Как стать автором
Обновить
12
0

Разработчик

Отправить сообщение

Крах на финишной прямой, или как написать нетестируемый код

Время на прочтение4 мин
Количество просмотров3K

Это история о том, как потерпеть фиаско, имея хорошо написанный и протестированный в боевых условиях работающий код и даже написанную документацию. Изначально я собирался делать анонс своей библиотеки, но что-то пошло не так. Поэтому начнём за здравие -- постановка и формализация задачи, описание возможностей и батареек. А закончим за упокой -- вопросами, как всё это теперь тестировать?

Читать далее
Рейтинг0
Комментарии0

SQLAlchemy: а ведь раньше я презирал ORM

Время на прочтение10 мин
Количество просмотров34K

Так вышло, что на заре моей карьеры в IT меня покусал Oracle -- тогда я ещё не знал ни одной ORM, но уже шпарил SQL и знал, насколько огромны возможности БД.

Знакомство с DjangoORM ввело меня в глубокую фрустрацию. Вместо возможностей -- хрена с два, а не составной первичный ключ или оконные функции. Специфические фичи БД проще забыть. Добивало то, что по цене нулевой гибкости мне продавали падение же производительности -- сборка ORM-запроса не бесплатная. Ну и вишенка на торте -- в дополнение к синтаксису SQL надо знать ещё и синтаксис ORM, который этот SQL сгенерирует. Недостатки, которые я купил за дополнительную когнитивную нагрузку -- вот уж где достижение индустрии. Поэтому я всерьёз считал, что без ORM проще, гибче и в разы производительнее -- ведь у вас в руках все возможности БД.

Так вот, эта история с SQLAlchemy -- счастливая история о том, как я заново открыл для себя ORM. В этой статье я расскажу, как я вообще докатился до такой жизни, о некоторых подводных камнях SQLAlchemy, и под конец перейду к тому, что вызвало у меня бурный восторг, которым попытаюсь с вами поделиться.

SELECT article FROM habr
Всего голосов 38: ↑32 и ↓6+26
Комментарии118

Цензура в интернете. Когда базовых мер недостаточно — I2P

Время на прочтение8 мин
Количество просмотров32K

В прошлой статье я рассказал, какие выкрутасы можно сделать одним только браузером. В этой статье я расскажу, что ещё можно сделать, выйдя за рамки браузера

То, что изначально планировалось как небольшое дополнение к предыдущей статье с посылом "мы научились использовать прокси -- теперь добавим в их список шлюз i2p", выросло, словно собачка во время пути

Объём статьи не означает, что всё так сложно. Я подробно рассказал про несколько вариантов настройки. А какой выбрать -- решать вам

Поехали
Всего голосов 46: ↑44 и ↓2+42
Комментарии93

Цензура в интернете. Надо что-то делать

Время на прочтение6 мин
Количество просмотров34K

Интернет сегодня как воздух. Его никто не замечает и принимает как должное до тех пор, пока его кто-то не испортит или не отключат вовсе (привет горячему августу 2020 в РБ). В данной статье я расскажу, какие меры можно предпринять, имея в руках только браузер. Каждый инструмент вне браузера -- это тема для отдельной публикации

PS: а ещё вангую реакцию: "О, прикольно. Добавлю в закладки. Почитаю как-нибудь потом". Ага, когда интернет пропадёт?

Читать далее
Всего голосов 60: ↑46 и ↓14+32
Комментарии148

Celery + asyncio

Время на прочтение2 мин
Количество просмотров18K
Привет, Хабр! Я хочу рассказать, как я решал проблему эффективного конкурентного исполнения asyncio задач в Celery.

КДПВ
Всего голосов 8: ↑6 и ↓2+4
Комментарии2

Celery taskcls: новый декоратор, новые возможности

Время на прочтение3 мин
Количество просмотров7.1K

Привет, Хабр! Я расскажу тебе историю своего профессионального подгорания.


Так вышло, что я терпеть не могу рутинных однообразных действий. У меня за плечами несколько проектов, использующих Celery. Каждый раз, когда задача становится сложнее вывода 2 + 2 = 5, шаблон решения сводится к созданию класса, выполняющего задачу, и функции-стартера, с которой умеет работать Celery — бойлерплейта. В этой статье я расскажу, как я боролся с бойлерплейтом, и что из этого вышло.


Logo

Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии22

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Fullstack Developer
Senior
Git
Linux
SQL
Python
OOP
MySQL
PostgreSQL
Docker
Nginx
High-loaded systems