Обновить

Как я автоматизировал первичный поиск публичных Telegram-групп: Telethon, SQLite и дедупликация

Разбираю небольшой Python-инструмент для поиска публичных Telegram-групп: Telethon, фильтрация результатов, SQLite-дедупликация и уведомления только о новых находках.

Читать далее

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

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

В январе 2026 года я заключил договор с частным инвестором из Миссури, выступившим заказчиком на разработку маркетплейса профессиональных услуг, который я не буду называть, чтобы не нарушать п.1 правил Хабра, с чёткой географической привязкой: Канзас Метро. Задача казалось особенно удачной, поскольку инвестор сам представлял из себя компанию по строительству и ремонту, знал все тонкости рынка и был первым пользователем платформы, который давал подряды субподрядчикам через неё.

Читать далее

NOEMA RNSGate Lite: как я собрал mesh‑шлюз на Reticulum с интеграцией Home Assistant и локальным AI

Как я собрал открытый шлюз для сети Reticulum, который держит связь с домом по LoRa без интернета и сотовой сети, управляет Home Assistant по радиоканалу и отвечает на вопросы через локальный AI — без единого облачного сервиса. Разбираю архитектуру, код автоматизаций и почему выбрал Reticulum вместо более популярного Meshtastic.

Читать далее

Как создать из хаоса DWH для сквозной аналитики 6 проектов и 40 филиалов

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

Ещё несколько лет назад я даже не знал что такое DWH. Как аналитик не в IT-бизнесе, я анализировал эксельки и занимался составлением отчётности в них и Power BI. Но потом я начал потихоньку увеличивать свои навыки и в этой статье рассказываю какими путями я приходил к понимаю DWH и по итогу создал хранилище для сквозной аналитики крупного холдинга с 6 проектами и 40 филиалами.

Читать далее

Как я интегрировал AI для распознавания еды в EATLY AI мобильное приложение

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

Распознавание еды по фотографии на первый взгляд кажется простой задачей: пользователь отправляет изображение, модель определяет блюдо, а приложение показывает результат.

На практике между фотографией и готовым ответом находится несколько важных этапов: подготовка изображения, работа с vision-моделью, структурирование ответа, обработка ошибок и интеграция результата с остальной логикой приложения.

В этой статье я расскажу, как реализовал такой pipeline в мобильном приложении EatLy и с какими проблемами столкнулся во время разработки.

Читать далее

Клиент получил timeout. Выполнилась операция или нет?

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

Timeout — что за ответ? Как понять что это значит? А ещё более интересно — как эту проблему можно решить. При том архитектурно, а не очередным обработчиком с ответом «Все наши операторы сейчас заняты, перезвоните позднее».

Читать далее

iNote: как я построил зашифрованные заметки на блокчейне Base и заставил работать Smart Wallets

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

Что происходит, если попытаться сделать приватное хранилище заметок полностью on-chain?

Я решил проверить это на практике и собрал iNote - dApp, где заметки шифруются прямо в браузере, а в блокчейн попадает только шифротекст. Никакого сервера, базы данных и password recovery.

Но самое интересное началось, когда я добавил Coinbase Smart Wallet. Моя первая схема «ключ из подписи» просто перестала работать: смарт-кошельки сломали главное предположение о детерминированности подписей.

В статье разбираю, почему это произошло и как я решил проблему через envelope encryption, AES-256-GCM, PBKDF2 и два режима управления ключами.

Заодно показываю архитектуру, код и несколько неочевидных инженерных решений вокруг Base.

Буду рад техническому ревью и особенно вопросам - проект открыт, так что ломайте. 🙂

Читать далее

Хомлаба на старом ноутбуке: как попасть домой из интернета без белого IP

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

Я давно хотел написать статью на Хабр, и, кажется, наконец нашёл тему. Это история о том, как я настраивал доступ из внешнего интернета к своей хомлабе, почему не захотел покупать белый IP, зачем мне понадобился VPS и как в итоге HAProxy оказался ровно там, где ему и место.

Читать далее

Белые списки ТСПУ: подсети у хостеров есть, вход в них не продаётся

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

Я хожу по городу с телефоном, и на мобильном интернете половина того, чем я привык пользоваться, перестала открываться. Не случайно и не иногда: сеть периодически уходит в режим белых списков, и наружу проходит только то, что разрешено оператором. Дома на Wi-Fi всё работает. Вышел на улицу — нет.

Месяц я разбирался, как этот фильтр устроен, и около десяти тысяч рублей ушло на замеры. Пользуюсь не один: на канале, несколько своих, сервер мой. Схема, которую я в итоге собрал, продержалась примерно четверо суток. Дальше у хостера отвалился модуль Apache, и всё легло разом. Фильтр тут ни при чём, конфиг тоже: опора стояла на чужой машине, где я ничего не решаю. А свой купить негде.

Полезного за месяц осталось два блока: метод разведки, который переносится на любого оператора и любого хостера, и десяток опровергнутых гипотез. Часть из них я сам какое-то время считал действующими, и это отдельная статья расходов.

Механику самих белых списков подробно разобрал zarazaexe в статье «Это — всё что вам надо знать о белых списках». Я пользуюсь снапшотом openlibrecommunity/twl и в двух местах с ними расхожусь — оба расхождения называю прямо.

Читать далее

Оптимизация ML-моделей: исправление 8 критических ошибок в датасете CSE-CIC-IDS2018


Практика машинного обучения и информационной безопасности показывает, что  использование публичных датасетов часто приводит к сбоям в работе моделей. Модель может выдать отличную точность на тесте, однако в реальной сети поплывет при первом же сканировании портов. Недавно коллеги из ИСП РАН опубликовали отличный разбор проблем датасета CICIDS2017. Мы пошли дальше и провели аудит его более крупной версии - датасет CSE-CIC-IDS2018, который до сих пор массово применяют для оценки систем обнаружения вторжений (IDS).

Мы разберем 8  системных багов генерации трафика, которые ломают ML-модели и заставляют алгоритмы выучивать аппаратный шум вместо реальных атак.

Все пайплайны очистки, включая обработку Infinity, удаление коллинеарных признаков и скрипты сэмплинга, выложены в открытом репозитории по ссылке https://nikita7291.github.io/dataset/analysis/ - там же детально разобраны строки кода CICFlowMeter, содержащие дефекты логики работы.

Что такое CSE-CIC-IDS2018?

Набор данных CSE-CIC-IDS2018 - это фундаментальный совместный проект Канадского института кибербезопасности (CIC) и Центра безопасности коммуникаций (CSE). Для его создания авторы развернули гигантскую изолированную инфраструктуру в облаке AWS:

Читать далее

VLESS XHTTP CDN против белых списков

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

Бюджетный и эффективный способ обойти белые списки, используя CDN, VLESS и XHTTP. Рассматриваем технологию и разбираемся

Читать далее

Пять звеньев управления медицинским ИИ

В национальной стратегии Казахстана записано: «не менее 80% клинических решений в стационаре с применением ИИ к 2029 году». Порядка допуска ИИ в клинику при этом нет, ответственность за ошибку алгоритма публично возложена на врача, а единственная цифра пользы — «до 20% экономии времени врача» — взята из пресс-релиза. Я знаю, как такие показатели появляются и во что превращаются: подключат всё, что подключается, в информационной системе появится галочка «решение принято с ИИ», и через два года её будут ставить автоматически. Это не казахстанская особенность, а типовой сбой управления, и у него есть хорошее описание — пять звеньев, которые надо проверить прежде, чем ставить ИИ в KPI. Ниже разбираю их на нашем материале и объясняю, почему цепь у нас нужно запускать с другого конца.

Читать далее

Чем заменить Discord: развернул восемь решений, померил задержку и нагрузку, делюсь цифрами

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

Держу сервер примерно на 200 аккаунтов, после блокировки Discord всё это перестало работать. За полтора года развернул на своём железе Mumble, TeamSpeak, Spacebar и Stoat, плюс протестировал четыре облачных сервиса, и собрал по ним метрики: задержку голоса акустическим методом, потребление CPU и RSS у клиента, поведение при 2% и 5% потерь через tc netem.

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

Читать далее

Archaeological Review: как я настраивал VPN-шлюз на роутере 2012 года выпуска

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

Или будь проклят тот товарищ из комментов на Хабре, который сказал, что каждый может поднять свой VPN за вечер, зачем нужна Амнезия.

Tldr: я не сетевой инженер, не разработчик ядра и даже не системный программист. Я простой парень с 11 классами образования и 10-летним опытом эпизодических попыток войти в айти. Но иногда этого оказывается достаточно для того, чтобы починить Ютуб (ну, почти) на древнем телевизоре посредством настройки VPN на не менее древнем роутере, если есть время, желание разобраться и хороший собеседник в виде бесплатной версии ChatGPT.

Об этом и пойдёт сказ в этой статье.

Читать далее

Как подготовить команду к AI-агентам: TDPD и инженерный контур вокруг модели

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

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

Я разрабатываю TDPD: сначала пользовательский сценарий и исполняемая проверка, затем реализация агентом, в конце — человеческая приёмка. В статье сопоставляю этот подход с инженерной практикой OpenAI и Anthropic: harness, короткими навигационными файлами, исполняемыми ограничениями, наблюдаемостью, журналами прогресса и изоляцией параллельной работы.

Отдельно разбираю, где сравнение заканчивается и почему зелёные тесты ещё не означают, что результат можно принять.

Читать далее

Мы хотели сделать каталог готовых сайтов. Через год получили маркетплейс с realtime, модерацией и аналитикой

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

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

Идея появилась довольно просто. Мы посмотрели, что уже есть на рынке, и не нашли специализированной площадки именно под продажу готовых веб-решений. Фриланс-бирж много, студий тоже, есть магазины шаблонов и доски объявлений. Но если у разработчика уже есть готовый сайт или сервис и он хочет выставить его как отдельный продукт, понятного места для этого мы не нашли.

На старте проект выглядел гораздо скромнее, чем сейчас. MVP можно было описать одной строкой:

регистрация => профиль продавца => создание товара => карточка => контакт с продавцом.

На разработку в итоге ушёл примерно год. За это время простая форма добавления товара превратилась в многошаговый конструктор с черновиками и предпросмотром, появилась модерация, затем повторная модерация изменений, realtime-чат, уведомления, аналитика для продавцов и отдельная инфраструктура вокруг проекта.

По дороге мы ещё и полностью поменяли первоначальную схему монетизации.

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

Почему Next.js

Frontend написан на Next.js и TypeScript. Для локального состояния используем Zustand, для серверных данных TanStack Query.

Next.js выбирали в первую очередь из-за SSR и SEO. Для нас было важно, чтобы карточки продуктов и другие публичные страницы нормально индексировались поисковиками. Для маркетплейса органический трафик потенциально играет большую роль, поэтому делать всё как обычное клиентское SPA не хотелось.

Читать далее

Новый Искусственный Интеллект

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

От хайпа на миллиарды до нового хайпа

Мутация в инженера нового времени

По оценкам технологических стратегов (например, аналитиков Juniper Research), переход будет плавным и займет около десяти лет:

2026–2028 гг. — Спрос со стороны работодателей носит точечный характер. Ищут в основном ученых, физиков-схемотехников и R&D-инженеров в крупные лаборатории.

2029–2032 гг. — Переломный момент (Бум робототехники). Производители робототехники понимают, что классические процессоры разряжают батарею за полчаса, и начинают массово закупать нейроморфное железо. Начинается лавинообразный спрос на специалистов. Появляются вакансии типа «SNN Compiler Engineer», «Edge AI Developer», «Embedded Neuromorphic Systems Architect». Появляются зрелые библиотеки. IT-курсы начинают массово предлагать программы переподготовки. Это идеальное время для перехода в индустрию для прикладных программистов. Тут-то мы и появляемся уже во всём разобравшись, практически без конкуренции.

2033–2035 гг. — Стандартизация и масс-маркет. Нейроморфные сопроцессоры интегрируются в потребительские чипы по умолчанию — точно так же, как нейронные процессоры (NPU) встроены в современные процессоры сегодня. Технология становится утилитарной. Навык оптимизации кода под событийно-зависимую и спайковую архитектуру становится базовым требованием для бэкенд-разработчиков и системных инженеров, наряду со знанием баз данных или Docker сегодня.

Читать далее

История самой скучной кражи на 400 BTC. Расследование

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

История самой скучной кражи на 400 BTC. Расследование

Шесть символов в начале и пять в конце совпали. Середину никто не сверял. 400 биткойнов ушли человеку, которого не существует ни в одном отчёте об инцидентах.

Читать далее

Выборочная маршрутизация трафика по доменным именам

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

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

Здесь пока не буду начинать сразу с готового конфига. Сначала хочу рассказать, откуда вообще появилась эта задача, какие варианты я пробовал и почему в итоге остановился на связке DNS, dnsmasq, nftables и policy routing.

С чего всё началось

Несколько лет назад я работал в компании, основной офис которой находился в Москве, а сам я работал из небольшого офиса в Томске. Для доступа к части корпоративных ресурсов нужно было подключаться к рабочему VPN.

Сам по себе VPN работал нормально. Неудобство было в другом: его постоянно нужно было включать и выключать. Нужно открыть внутренний сервис — включил VPN. Закончил работать с ним — выключил. Появился новый ноутбук — снова настрой VPN.

Плюс всё это нужно было делать на каждом устройстве отдельно.

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

Я хотел, чтобы человек просто подключался к сети нашего офиса и работал. Если он открывает внутренний GitLab или другой корпоративный сервис, трафик сам идёт через московский офис. Если открывает обычный сайт — трафик идёт напрямую в интернет.

Причём мне было важно соблюсти несколько условий.

Во-первых, я хотел иметь одно место, где задаётся список нужных ресурсов. Не хотелось потом ходить по компьютерам и менять конфигурацию на каждом из них.

Читать далее

Галлюцинация, которая следует за VPN: исследуем скрытый localization context DeepSeek

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

Всё началось с попытки понять, какие данные о текущей сессии доступны DeepSeek помимо текста диалога. Модель неожиданно назвала мою реальную IP-геолокацию. Я решил, что это обычная галлюцинация — пока после смены VPN эта «галлюцинация» не переросла во что-то большее.

Читать далее