Недавно возникла задача сделать ротацию логов в веб-сервисе на Tornado. До начала работы казалось, что вопрос должен быть давно изучен и решение будет очевидным. Но, как это часто случается, если требования несколько отличаются от стандартных, то приходится искать решение самостоятельно. Или читать документацию. TL;DR Если необходимо реализовать ротацию логов таким образом, чтобы файлы создавались ежедневно и имя файла соотвествовало формату %Y%m%d.%i.log, где %Y - год, %m - месяц, %d - день, %i - индекс текущего файла лога, то необходимо использовать TimedRotatingFileHandler и настраивать формат имени файла переопределяя свойства namer и suffix этого класса:

Continue reading

Думаю, никого сегодня не удивить рекомендательными системами. Их можно встретить повсюду: на сайте с книгами (ozon.ru), блогах (habr.ru), интернет-магазинах (практически любой), стриминговых музыкальных (spotify, Яндекс.Музыка) и видео сервисах (kinopoisk, ivi, amediateka). Самый продуктивный способ разобраться как работают подобные алгоритмы — написать самому с самого начала. Этому и будет посвящена текущая статья. В рекомендательных системах есть два основных подхода: Content-based рекомендации основанные на описании объектов, которые требуется рекомендовать (рекомендуем фильмы, похожие на те, которые понравились пользователю); Коллаборативная фильтрация основанная на оценках пользователя и похожести его на других пользователей.

Continue reading

Оригинал Уже десятилетия я программирую с на объектно-ориентированных языках программтрования. Первым объектно-ориентированным языком, который я использовал, был C++. После этого был Smalltalk и, в конце, .NET и Java. Я фанатично использовал преимущество Наследования, Инкапсуляции и Полиморфизма. Три столпа Объектно-ориентированного программирования. Я жаждал получить обещаное Переиспользование и использовать мудрость полученную теми, кто был до меня в этом новом удивительном мире. Я не мог сдержать волнения при мысли, что можно сопоставить объекты реального мира с моими классами и ожидал, что всё встанет на свои места.

Continue reading

На днях наконец-то решил добраться до такой хайповой темы как Docker: Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами. Изначально использовал возможности LXC, с 2015 года применял собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer.

Continue reading

Использование переменных окружения в Postman Продолжу тему про Postman. В этой заметке немного расскажу про использование переменных в Postman. JavaScript API Во-первых, напомню, что переменные можно использовать в JavaScript API Postman. Например, для тестов или в pre-request: console.log(pm.variables.get('param')); console.log(pm.environment.get('param')); console.log(pm.globals.get('param')); Объекты variables, globals и environment объекта pm хранят значения переменных из соответствующих scope-ов: из переменных коллекции, из глобального scope и из переменных окружения. Приоритеты получения переменной: pm.environment содержит значения переменных, означенных для окружения, pm.

Continue reading

Вдохновившись статьёй для английских книг, решил проверсти аналогичный анализ для русских произведений. Преподаватель английского языка автора оригинальной статьи утверждал, что прочитав 20 страниц любой книги можно узнать 90% всех слов произведения и далее читать книгу будет значительно проще. В этой статье я хочу проверить аналогичное утверждение для русского языка: сколько страниц необходимо прочитать, чтобы узнать 90% книги. Спойлер: прочитав 20 страниц книги вы практически наверняка не узнаете 90% всех слов.

Continue reading

Наткнулся буквально только что, но, думаю, проблема известная: при запуске из консоли команды jupyter notebook браузер запускается, но при открытии блокнота намертво зависает. Казалось бы, в чём может быть проблема, если только что на другом комьютере всё работало отлично? Однако, внимательный поиск в Google моей любимой поисковой системе натолкнул на мысль, что дело может быть в размере этого блокнота (на момент обнаружения проблемы блокнот дорос до 21Мб). Для проверки этой догадки получил одну из первых версий этого блокнота из VSC (около 200Кб).

Continue reading

Author's picture

feeeper

За деньги программирую на C# и Python

Software developer

Russia