Обновить

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

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

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

Читать далее

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

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

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

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

Читать далее

Обход лимитов Яндекс.Диска

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

Купил я себе домой NAS и начал потихоньку перетаскивать туда всякое. Сделал синк фотографий, добавил vaultwarden и занялся удалением всякого из облаков. И если с паролями все более менее просто, то с фотографиями, которые хранятся фактически у государства, было чуток посложнее. Покоя мне это не давало, решил удалить.

Захожу в интерфейс ЯДиска, удаляю все папки. Тут все хорошо. Хочу удалить фото - тут все плохо. Ну я попробовал зарегать аппку через их ЛК, но фотки недоступны через нее.

Если API не работает, остаётся единственный вариант — смотреть, что делает браузер. Весь интерфейс Яндекс.Диска живёт на одном endpoint:

Читать далее

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

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

Цветочный ритейл сильно отличается от большинства других видов торговли. Основной товар здесь — скоропортящийся, поставки происходят часто, а спрос может резко меняться буквально за несколько дней до праздников. Магазин может спокойно работать неделю, а затем за два дня перед 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 большинство курсов годами фокусируются на синтаксисе: типах данных, циклах и бесконечных манипуляциях со списками. В итоге человек выходит из обучения с багажом знаний о том, «как написать цикл», но без малейшего понимания, «как построить проект».

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

Читать далее

Доработка алфавитно-цифрового ЖК-модуля 1602A (ЖКИ LCD1602) для работы от 3.3V

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

Эти модули китайского производства широко доступны на AliExpress, Озон, WB и предназначены для работы при питании напряжением 5.0V в диапазоне температур 0..+50C в стандартном исполнении.

Читать далее

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

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

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

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

Каждый элемент массива имеет индекс — порядковый номер. В большинстве языков программирования индексация начинается с 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 паттерн.

Читать далее

Как в 2026 году IT-специалисту за границей отправить налоговую отчетность в ФНС России? Спойлер: Всё сложно

Ты открыл ИП, уехал за границу и честно хочешь заплатить налоги. У тебя есть Госуслуги, доступ в ЛК ФНС и даже «Госключ». Казалось бы, нажми кнопку и спи спокойно. Но система говорит: «Нет». В этой статье я расскажу, почему удаленная сдача декларации из‑за рубежа превратилась в квест с просроченными подписями, неработающими плагинами и борьбой с IP‑фильтрами. Сэкономил вам десятки часов гугления и нервных клеток — рассказываю, что точно НЕ сработает и какие реальные варианты остались.

Читать далее

UUID мертв? Да здравствует Smart ID! Почему ваш проект заслуживает лучшего

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

В этой статье я поделюсь опытом проектирования идентификаторов для крупной медицинской системы. Мы пройдем путь от простых автоинкрементов до UUID, ULID и в итоге создадим гибридное решение, которое оказалось лучше всех существующих подходов. Спойлер: идеальный ID — это не технология, а архитектура.

Читать далее

Килограмм пуха тяжелее килограмма железа

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

Такой загадкой многие донимали своих одноклассников. И если кто-то отвечал «железо», над ним ржал весь класс. 

Но никто не ставил такой эксперимент. Все только ржут. А мы в ТОПЛЕС решили провести его! Видео есть на нашем канале, а тут расскажем еще больше нюансов о том, как проходил этот эксперимент и как мы несколько раз облажались с ним. 

Для этого эксперимента мы построили большие плечевые весы. Две крупные чаши висят на цепочках на общей балке, а посередине — подшипник, чтобы весы свободно качались.

Читать далее

Tmux для Windows на Win32 API: как я портировал легендарный мультиплексор

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

Многие разработчики, переходящие с Linux на Windows, сталкиваются с одной и той же болью: отсутствием адекватного нативного мультиплексора терминалов. Да, есть WSL, есть вкладки в Windows Terminal, но это не заменяет классический опыт. Настоящий tmux — это когда ты можешь отцепиться (detach) от сессии, закрыть терминал, а потом вернуться и продолжить работу ровно с того же места.

Я решил, что хватит это терпеть, и реализовал tmux-win — нативный порт tmux для Windows, написанный на C с использованием Win32 API без тяжелых слоев совместимости вроде Cygwin или MSYS2.

Читать далее

Как отправить заявки с WordPress в Битрикс24: входящий вебхук и REST API

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

Заявки с форм на сайте удобно сразу получать в CRM. Если у вас WordPress и Битрикс24, интеграцию можно сделать без своего сервера: Битрикс24 даёт входящий вебхук — URL, по которому можно вызывать методы REST API (создание лида, сделки, контакта). В статье разберём, как это устроено и как подключить формы WordPress к такому вебхуку: сначала в общих чертах, потом — пошагово через готовое решение.

Что понадобится

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