Summer Holidays on Mars

Summer Holidays on Mars — это мой новый трек в стиле Melodic Techno, который уже доступен на всех стриминговых платформах. Диджеи и создатели видео могут скачать его бесплатно. Послушайте Summer Holidays on Mars на всех основных стриминговых сервисах Мелодия трека захватывает с первых нот, а ударные инструменты призывают танцевать. Мне очень нравится этот трек (кто бы мог подумать ;)). Я надеюсь, что Summer Holidays on Mars можно будет наслаждаться как дома, так и в диджейском сете на шумной клубной вечеринке. ...

10 мая 2024 г.

Практический пример использования Protocol

Представьте себе ситуацию: у вас есть микросервисы, в каждом — своя конфигурация со своим набором параметров; есть библиотечный код, который получает и использует объекты конфигураций. Представили? А теперь в этот код надо завести подсказки типов. И тут представили? Давайте проведём мысленный эксперимент и попробуем это сделать. Вариантов в целом несколько. Варианты решения: Базовый класс конфигурации с ещё одним ветвлением:* затаскивать все возможные параметры; затаскивать только общие для микросервисов параметры. Использовать протоколы для нотации типов. Затаскивать все возможные варианты параметров в один базовый класс — гарантированный путь к «помойке». Затаскивать только общие параметры для микросервисов — получать кучу красного цвета от Pyright в общем коде. ...

26 февраля 2024 г.

Poker Face

В сердце электронного лабиринта лежит «Poker Face» — музыкальное путешествие сквозь пульсирующие тени тёмного, мелодичного техно. Слушать Poker Face на ваших любимых стриминговых платформах Это инструментальное произведение создаёт звуковую ткань, окутывая слушателей загадочной атмосферой. Благодаря осознанно низкой эмоциональной динамике трек создаёт таинственную атмосферу, управляемую гипнотическими битами и сложными аранжировками синтезаторов. Отсутствие вокала усиливает эффект погружения, позволяя музыке говорить напрямую с душой. «Poker Face» — это исследование неизведанных областей техно, путешествие по электронным звуковым ландшафтам, которое выходит за рамки традиционных границ жанра. ...

8 декабря 2023 г.

У Kаждого Cвой SCRUM

У каждого свой Scrum. Он описан в книгах как стройный, понятный и простой процесс. Участники семинаров и тренингов утверждают, что применять его легко. Однако в реальной жизни Scrum каждого человека не похож ни на пример из книг или тренингов, ни на процессы коллег… за редкими исключениями. Почему? Не знаю. Куда интереснее выяснить, что с этим делать и нужно ли это. TL;DR Scrum эффективен, когда желания бизнеса и разработки совпадают и они готовы играть по этим правилам. Scrum определяет чёткие зоны ответственности и правила для скрам‑команды. Если попытаться изменить их, это может привести к проблемам. Если вы устанавливаете сроки для разработчиков, определяете исполнителей задач и не ведёте бэклог, то у вас нет Scrum, даже при наличии спринтов и ежедневных митингов. В вашей команде есть скрам‑мастер, даже если он не выделен формально. Один из членов команды выполняет эту функцию. Это занимает у него время и, возможно, вызывает лишний стресс. Наём скрам‑мастера показывает разработке, что компания готова играть по правилам и ожидает долгосрочного применения Scrum. При работе с большой командой следует разделить её на несколько подгрупп и использовать LeSS или «Scrum of Scrums». Я не знаю, какой Scrum можно считать идеальным. Я не являюсь сертифицированным скрам‑мастером. Я всего лишь разработчик. Эта статья — моя попытка понять, каким должен быть Scrum, зачем вам нужен скрам‑мастер и в каких случаях Scrum не работает. Повторяю: это мнение разработчика, участника скрам‑команды, а не консультанта. ...

28 ноября 2023 г.

Использование typing.Generic в Python

Я работаю над проектом с довольно большой кодовой базой. Проект с историей. Некоторые части наша команда написала задолго до аннотаций типов. Мы до сих пор добавляем их в наш легаси‑код и улучшаем существующие подсказки. Стоит ли эта игра свеч? Определённо — да. Наши пользователи — разработчики. Они открывают наш код в PyCharm ежедневно и надеются, что он поможет им решить их задачи максимально быстро и просто. Могу уверенно сказать, что существует корреляция между точностью автодополнения кода и тем, как быстро работают разработчики. Наша цель — не только добавить более точный статический анализ или автодополнение, но и не сломать их боевой код. ...

18 февраля 2022 г.

Для чего Python лучше не использовать?

На Quora относительно недавно задали вопрос «What is Python not good for?». Я бы хотел сказать, что Python хорош для всего. Но это неправда. Python во многих областях — второй. Не так много областей, где Python — номер один. К примеру, Go сейчас гораздо больше подходит для веб‑разработки, чем Python. Его довольно легко выучить, его гораздо легче деплоить. В Go есть достаточное количество «батареек» для любого веб‑приложения. Тем не менее Python остаётся второй опцией. ...

22 ноября 2019 г.

Подсказки типов в Python

Мой небольшой список источников по type hints в Python, которые я использую в повседневной практике. Относительно недавно я сменил проект. Теперь я работаю над DWH и ETL‑процессами. Проект большой: в нём сравнимое количество кода с предыдущим, но разработчиков гораздо больше. Я убеждён, что для этого проекта подсказки типов даже нужнее. Дело не только в количестве разработчиков. Особенность DWH/ETL‑проектов — наличие разнообразных источников, мест хранения и потребителей данных. Отсюда довольно сильная фрагментированность проекта. И если не добавить «клея», он развалится на отдельные скрипты. ...

24 мая 2019 г.

Clash of Code

В начале года я писал, что хочу сделать большой и интересный проект с Codingame: создать и обучить бота для Legends of Code & Magic. В очередной раз, когда я прокрастинировал начало этого проекта, я наткнулся на Clash of Code! — быстрые мини‑соревнования по кодированию на этом же сайте. Попробовав поиграть, я могу сказать, что это отличный способ отвлечься от рабочей рутины, попутно потренировав свои навыки. Формат Clash of Code Эти мини‑соревнования строятся по такому принципу: ...

26 апреля 2019 г.

Переименование при импорте

В Python есть замечательная возможность присваивать свои имена при импорте (import foo.bar.baz as fbb). Так можно легко избежать конфликтов имён при импорте и повысить читаемость кода, если требуется. Но этой же возможностью можно легко превратить хороший код в абсолютно нечитаемый. В последнее время я несколько раз встречался с этим: попадались мне в основном странные сокращения и непонятные имена для алиасов. Продемонстрирую проблему на примере сокращений. Хороший пример придумать с ними проще: ...

18 марта 2019 г.

Пожалуйста, не используйте else

Я не люблю else, когда обе ветки содержат return. Всегда можно написать код без этого придатка для if. Такой код будет компактнее, проще читаться и лучше выглядеть. Так зачем же многие пишут этот никчёмный else? Делая ревью кода одного из коллег, я указал на то, что его код можно упростить, убрав else. Ответом была ссылка на PEP8, где такое поведение определяется допустимым. Код был примерно таким: def get_magic_number(use_magic): if use_magic: return calculate_with_magic() else: return calculate_with_science() С точки зрения работоспособности этому коду нечего предъявить. Меня, как читателя, такой код заставляет остановиться и задуматься: ...

29 января 2019 г.