Обновить

Создаём свой облачный музыкальный стриминг через WebDAV (без Яндекс Музыки и ограничений)

Уровень сложностиПростой

Всем привет!

В какой-то момент я понял: музыка у меня есть – а контроля над ней нет...

В текущих условиях (цензура треков, отсутствие релизов, качество звука на стриминговых платформах) внезапно вышли из тени наши старые подходы: загрузка и прослушивание музыки локально. Лично у меня в шкафу до сих пор валяется старый Sony Ericsson K550i с флешкой Memory Stick Micro, где хранится капсула времени в виде низкокачественных MP3 файлов времён школы из нулевых. Конечно, мы не будем с вами слушать подобное сейчас, так как у нас имеется возможность достать почти любой релиз в формате без потерь или в более-менее приемлемом качестве. Именно такую собственноручно собранную коллекцию я и хочу слушать, прогуливаясь в наушниках по улицам в прекрасный весенний день.

Читать далее

LLM как Stateless-процесс: как я перестал полагаться на память нейросети и вынес состояние в файлы

Уровень сложностиСредний

Проблема: Иллюзия памяти и стохастический хаос

Большинство проблем при работе с AI-ассистентами (Cursor, Windsurf, Kiro и др.) проистекают из одной иллюзии: мы ждем от них «памяти». Но LLM по своей природе — это стохастический stateless-исполнитель с эфемерным контекстом.

Любая сессия со временем подвергается «гнили контекста» (Context Rot). IDE автоматически суммаризирует историю, при этом важные детали реализации просто выбрасываются. Один сбой сессии или обрыв связи — и вы тратите время на повторное «обучение» модели. Я подошел к этому как к задаче проектирования отказоустойчивых систем: если процесс не может надежно хранить состояние — состояние должно быть внешним.

Парадигма: External State vs Embedded Memory

Вместо того чтобы пытаться запихнуть в модель побольше контекста, я внедрил архитектуру, где модель не обязана помнить ничего. Она каждый раз читает актуальный стейт извне. Это превращает ассистента из «умного собеседника» в предсказуемый инженерный инструмент.

Читать далее

Менеджер паролей на python

Уровень сложностиПростой

Повесть о том как один программист решил разработать для себя и для всех программу, а получилась небольшая система.

Весь мой путь наполнен любовью к русским разработчикам и открытому коду, а также желанием продвигать российские IT-продукты (не все конечно).

Читать далее

PBT или подбор гиперпараметров с помощью популяции

Уровень сложностиСредний

Существует достаточно большое количество методов для автоматического подбора гиперпараметров, но у меня своя история с эволюционными методами, так что я сегодня выбрал PBT или Population Based Training или подбор на основе популяции.

Читать далее

TG WS Proxy: Ускоряем Telegram на macOS через WebSocket

Уровень сложностиПростой

Telegram - один из самых популярных мессенджеров, и многие пользователи macOS и д��угих ОС заметили что в последнее время загрузка фото и видео работает медленнее. Причина часто кроется не в скорости интернета, а в особенностях работы TCP-соединений с серверами Telegram.

Изучая эту проблему, я обнаружил интересный подход: перенаправление трафика через WebSocket Secure (WSS) соединения может значительно ускорить загрузку медиафайлов и работу телеграма. WebSocket работает поверх TLS и имеет оптимизации для долгоживущих соединений, что особенно важно для мессенджеров.

Однако готового решения для macOS не существовало. Так родилась идея создать нативное приложение, которое будет работать в фоне, не отвлекать меня и при этом эффективно ускорять Telegram.

Читать далее

Стековые аллокации срезов в Go 1.25 и 1.26: как компилятор учился не мусорить

Уровень сложностиСредний

Это пересказ статьи разработчика компилятора Go Кита Ренделла. Не нужно воспринимать это как перевод. Я постарался упростить и обойтись без некоторых блоков текста из статьи, которые по моему мнению могут только запутать читателя.

Читать далее

Как математики спасли гномов от дракона: история одной задачи с шапками

Уровень сложностиСредний

Как математики (почти) спасли гномов от дракона

История одной задачи с шапками, в которой я решил пойти по максимуму.

Читать далее

Python-микросервисы: Как подружить Django и FastAPI без головной боли

Уровень сложностиСредний

Хотите FastAPI-микросервисы, но нужна внутренняя админка? Выход есть, и он дешевый! Разбираю архитектуру на примере LMS-системы с PostgreSQL-схемами, Alembic-миграциями и аккуратным разделением зон ответственности по данным между сервисами.

Читать далее

Организация удаленного доступа в защищенный контур на базе Openvpn + Keycloak

Уровень сложностиСредний

Привет, Хабр!

У одного из наших заказчиков вся инфраструктура расположена в Yandex Cloud и для доступа во внутреннюю сеть ко внутренним ресурсам компании а-ля Grafana, Prometheus, Elasticsearch и т.д. использовался VPN-сервис на базе Self-Hosted OpenVPN. При этом аутентификация пользователей VPN осуществлялась просто по локальным учетным записям на сервере через конфигурацию сервера вида

Читать далее

Как навести порядок на складе цветочного магазина: учет, сроки хранения и доставка

Уровень сложностиСредний

Цветочный ритейл сильно отличается от большинства других видов торговли. Основной товар здесь — скоропортящийся, поставки происходят часто, а спрос может резко меняться буквально за несколько дней до праздников. Магазин может спокойно работать неделю, а затем за два дня перед 8 Марта через склад проходит объем, сравнимый с обычным месячным оборотом.

Из‑за этого владельцы цветочных магазинов регулярно сталкиваются с одними и теми же операционными проблемами:

Читать далее

Я написал файловую систему для Linux за вечер

Уровень сложностиСредний

Когда мы говорим файловая система, обычно представляем что-то очень сложное: ext4, btrfs, десятки тысяч строк кода в ядре, журналирование, кеши, оптимизации. Но если убрать все оптимизации, минимальная файловая система оказывается удивительно простой. В этой статье я попробовал сделать эксперимент: написать минимальную файловую систему для Linux, которую можно смонтировать и использовать как обычную. Без написания кода ядра, без драйверов.Только пользовательский код и FUSE. В итоге получилась работающая файловая система примерно на 200 строках Python, которая умеет:

Читать далее

Пишем сетевой слой в Swift как надо: гибко, понятно и без лишних зависимостей [Часть 1]

Уровень сложностиСредний

Расскажу как написать типобезопасный и масштабируемый сетевой слой на Swift с использованием async/await.

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

Читать далее

Annotate PDF: как я написал клиентский редактор без бэкенда и всё запорол в погоне за улучшениями

Уровень сложностиПростой

Представьте ситуацию: вам прислали контракт или учебный материал в PDF. Нужно быстро поставить подпись, обвести важный абзац или добавить пару комментариев. Идти в Adobe Acrobat долго, а загружать документ на сомнительные онлайн-сервисы небезопасно.

Я столкнулся с этой проблемой и решил сделать свой инструмент. Так появился проект Annotate PDF

Это простая «рисовалка» поверх документов, которая работает полностью в браузере.

Читать далее

Как мой телеграмм бот заменил мне Anki

Уровень сложностиПростой

На первом курсе университета я столкнулся с классической проблемой студента — необходимостью зубрить. В моем случае это были история и английский язык. Нужно было выучить около сотни исторических дат и 250 английских слов.

Обычно для таких вещей все советуют Anki. Но чтобы им пользоваться, нужно скачать приложение, потом как-то вытащить данные, отформатировать их в нужный формат таблицы (CSV и т.д.) или использовать сторонние чат-боты. Более того, у меня почему-то не работала синхронизация с мобильным приложением.

В итоге терпение лопнуло, и так появилась идея Mnemocards. Мой подход: не нужно нигде регистрироваться, не нужно ничего скачивать. Открыл бота — и учишь.

Читать далее

Playwright + MockAPI: тестируем форму логина без живого бэкенда

Уровень сложностиСредний

Пишем E2E-тесты на Playwright для формы логина — без живого бэкенда. Вместо встроенного page.route() используем внешний мок-сервер: настраиваем один эндпоинт с пятью сценариями (успех, неверный пароль, таймаут, 500, 429), матчинг по телу запроса и заголовкам. В итоге — тесты не зависят от состояния бэкенда, граничные кейсы воспроизводятся стабильно, а история запросов доступна в логах.

Читать далее

Запускаем старые игры на Linux с помощью Bottles

Уровень сложностиПростой

Steam активно портирует игры на Linux с помощью Proton, да и нативные версии игр (особенно учитывая популярность Steam Deck) сейчас не редкость. Но что делать с остальным софтом и играми? Для них есть проверенное решение — Wine и его удобная обертка Bottles.

Я решил проверить на практике, насколько сложно запустить олдскульную игру на моей Fedora 43. В качестве подопытного выбрал S.T.A.L.K.E.R.: Тень Чернобыля.

Читать далее

Архитектурное мышление в Python

Уровень сложностиПростой

В Python большинство курсов годами фокусируются на синтаксисе: типах данных, циклах и бесконечных манипуляциях со списками. В итоге человек выходит из обучения с багажом знаний о том, «как написать цикл», но без малейшего понимания, «как построить проект».

Когда же дело доходит до ООП, новичок часто пишет код вот так:

Читать далее

Массивы под капотом: память, адресация и сложность операций

Уровень сложностиСредний

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

Массив — это структура данных, представляющая собой упорядоченный набор элементов одного типа, расположенных в непрерывной области памяти.

Каждый элемент массива имеет индекс — порядковый номер. В большинстве языков программирования индексация начинается с 0.

Массив в информатике — это тип данных, в котором хранится упорядоченный набор однотипных элементов.

Можно выделить одномерные и многомерные массивы.

Одномерные — это просто ряд пронумерованных значений.

Многомерные — матрица: каждое из значений массива само является массивом. Соответственно, доступ к элементу возможен по двум индексам — строки и столбца

Ассоциативные массивы — особый подвид структуры данных, в котором индексы не обязательно являются упорядоченными целыми числами. Это набор данных в формате «ключ — значение», где ключ — аналог индекса, а значение — аналог элемента.

Читать далее

Внедряем Claude Code нативно в Cursor IDE. Или как 9Router позволяет платить меньше

Уровень сложностиПростой

Думаю все, кто начинал использовать claude code, рано или поздно ощущали на себе его недостатки. Не удобно навигироваться по чекпоинтам, не удобно смотреть, какие были внесены изменения, не удобно использовать через CLI. А что если решение есть? Я начал об этом задумываться после того, как настроил свой openclaw, он же используем мою обычную подписку на Claude, почему я не могу использовать ее сам. Тут у многих возникнет вопрос касательно безопасности, кто-то слышал что антропики против подобного использования подписки, но я исхожу из фактов. Я не слышу, чтобы всех повсеместно начали банить за это. Да и в целом если так задуматься, когда мы подключаем наш аккаунт Claude через OAuth к Claude Code, наша цель - написание кода. Так в чем проблема, если мы немного обхитрим систему и внедрим все прямо в Cursor IDE.

Я долго искал нормальное решение и уже думал сам вайбкодить что-то, но в итоге наткнулся на прекрасный инструмент 9Router. Разработчик не я, так что сразу скажу, что ответственности за его использование и в целом всю описанную схему, я на себя не беру. Я просто обозреваю возможность.

Так вот, что такое в целом 9Router. Это некий хаб, куда можно подключить десятками провайдеров нейросетей и использовать все через нужный тебе endpoint.

Читать далее

Transactional Outbox паттерн

Уровень сложностиПростой

Transactional Outbox паттерн используется для надежной публикации событий, когда нужно одновременно сохранить изменения в БД и отправить сообщение в брокер.

В распределенных системах нельзя объединить в транзацию сохранение данных в БД и отправку события в брокер сообщений, т.к. это 2 разных системы не объединенные общей системой транзакционности. И правило атомарности для двух операций вместе не действует.

Для решения этой проблемы нам приходит на помощь Transactional Outbox паттерн.

Читать далее
1
23 ...