Building a Music Recommender That Doesn't Recommend Nickelback

Building a Music Recommender That Doesn't Recommend Nickelback

Picture this: You’ve just created the perfect playlist of synthwave bangers, only to have your music app suggest “How You Remind Me” for the third time this week. Let’s build something better using collaborative filtering - the same tech that powers Spotify’s Discover Weekly (but hopefully with less Chad Kroeger). By the end of this guide, you’ll be recommending music so personalized, your users will think you’ve bugged their AirPods....

June 17, 2025 · 4 min · 776 words · Maxim Zhirnov
Создание музыкального рекомендателя, который не рекомендует Nickelback

Создание музыкального рекомендателя, который не рекомендует Nickelback

Представьте: вы только что создали идеальный плейлист с треками в стиле synthwave, и вдруг приложение предлагает вам «How You Remind Me» уже в третий раз за неделю. Давайте создадим что-то получше, используя коллаборативную фильтрацию — ту же технологию, что лежит в основе Spotify Discover Weekly (но, надеюсь, без Чада Крюгера). К концу этого руководства вы будете рекомендовать музыку настолько персонализированно, что ваши пользователи подумают, будто вы установили жучок в их AirPods....

June 17, 2025 · 4 min · 729 words · Maxim Zhirnov
Apache Airflow vs Prefect: The Orchestrator's Dilemma

Apache Airflow vs Prefect: The Orchestrator's Dilemma

Imagine conducting an orchestra where half the musicians play Beethoven while others attempt the Macarena. That’s your data pipeline without proper orchestration. Let’s examine two maestros - Apache Airflow and Prefect - to see which baton-waving solution makes your data sing in harmony. Setting the Stage: Basic Implementations Airflow’s “Hello World” Symphony from airflow import DAG from airflow.operators.bash_operator import BashOperator from datetime import datetime default_args = { 'owner': 'mozart', 'retries': 3 } with DAG('classical_music', start_date=datetime(2025, 6, 4), schedule_interval='@daily') as dag: tune = BashOperator( task_id='play_requiem', bash_command='echo "The show must go flow!...

June 4, 2025 · 3 min · 498 words · Maxim Zhirnov
Apache Airflow против Prefect: дилемма оркестратора

Apache Airflow против Prefect: дилемма оркестратора

Представьте себе управление оркестром, где половина музыкантов играет Бетховена, а другие пытаются исполнить «Macarena». Вот так и ваш конвейер данных без должного управления. Давайте рассмотрим двух «маэстро» — Apache Airflow и Prefect, чтобы понять, какое решение позволит вашим данным звучать в гармонии. Подготовка сцены: основные реализации Симфония «Hello World» от Airflow from airflow import DAG from airflow.operators.bash_operator import BashOperator from datetime import datetime default_args = { 'owner': 'mozart', 'retries': 3 } with DAG('classical_music', start_date=datetime(2025, 6, 4), schedule_interval='@daily') as dag: tune = BashOperator( task_id='play_requiem', bash_command='echo "The show must go flow!...

June 4, 2025 · 3 min · 513 words · Maxim Zhirnov
The Great Python Dependency Showdown: When Poetry Meets Pipenv in a Virtual Octagon

The Great Python Dependency Showdown: When Poetry Meets Pipenv in a Virtual Octagon

Picture this: you’re standing in the Python packaging aisle, staring at two shiny tools that promise to organize your dependencies better than Marie Kondo organizes sock drawers. Let’s explore why developers are increasingly choosing Poetry over Pipenv, even if both claim to spark joy in dependency management. Virtual Environments: The .venv Tango # Poetry's subtle invitation poetry init -n && poetry install # Pipenv's eager approach pipenv install --python 3.11 Both tools create virtual environments, but Poetry prefers the ....

June 1, 2025 · 3 min · 474 words · Maxim Zhirnov