TLDR; Нельзя просто так взять и запихнуть реальную систему сборки в браузер. Но если обойти некоторые тонкие технические и юридические моменты - вполне можно, что мы показываем наглядно. Статья о том, как это сделано, и немного о том, где можно применить.
Идея запихнуть clang в браузер и собирать приложения не нова: это уже делали в Emscripten как минимум, и ещё пара исследовательских проектов. Проблема в том, как это использовать в практических сценариях: программирование это не про работающий компилятор, это про целую кучу прикладных библиотек, про инфраструктуру
Проблема встаёт в момент, когда человек узнаёт, сколько в реальности нужно собрать, чтобы получить готовый sysroot для, например, QT: объём работы для подготовки сборочной площадки убивает всю выгоду от идеи. Но что если этой работы делать просто… не нужно.
P.S. Да, это Doom в браузере. Опять. А ещё там есть HoMM2. Ссылка на playground в конце статьи, там, в браузере, можно его запустить, и собрать на свой десктоп. И посмотреть другие примеры.
Как мы докатились до этогоВ прошлой статье я рассказывала, как с помощью GPT-6 Astra и Blender сделала 3D-анимацию вращающейся настольной лампы. Многие назвали это стрельбой из пушки по воробьям: для такой задачи мощная модель показалась им избыточной.
На этот раз хочу поговорить о другом способе создавать видео: поручить Opus написание кода, который управляет сценами и анимацией. Сначала покажу три работы других авторов, а затем на примере Remotion объясню, как устроен весь процесс. В конце оставлю подборку готовых промптов для тех, кто захочет попробовать.
Читать далее
Российский рынок справочно-правовых систем (СПС) и LegalTech-сервисов переживает активную трансформацию. Рассмотрим основных игроков рынка СПС и LegalTech-сервисов для анализа судебной и арбитражной практики.
Читать далее
Стив Кауфман - известный канадский популяризатор изучения языков. В различной степени он владеет двадцатью языками. Изучение языков изначально было прикладной целью - они требовались ему для работы и проживания в различных странах, а позже он трансформировал изучение языков в полномасштабный бизнес-проект.
Как он учит языки сейчас?
Читать далееСледуй за белым кроликом.
В «Матрице» герои возвращались в реальный мир через телефон. Мне эта идея понравилась настолько, что собственный VPN я назвал PAYPHONE, а в консольном клиенте сделал зелёный дождь из символов. Правда, прежде чем через него удалось выйти в интернет, пришлось разобраться, почему туннель отправляет пакеты самому себе, таймер не срабатывает, а нажатие Ctrl+C не возвращает сеть. Об этом и будет статья — с устройством протокола, фрагментами кода и ошибками, которые обнаружились уже после первого успешного подключения.
Читать далееКазалось бы, что там может быть интересного — A-запись прописал и забыл. Ан нет: стоило захотеть один сертификат сразу на все тестовые поддомены и переключать тестовую среду между двумя кластерами Kubernetes, да ещё автоматически поднять сертификаты Let’s Encrypt с помощью cert-manager… Выяснилось, что всё просто, да не так просто, как хотелось бы.
Бесплатный DynDNS, скажем, DuckDNS.org, отдаёт записи с TTL в сутки (переключился — а люди ещё долго ходят на старый кластер), а wildcard сертификат Let’s Encrypt выдаёт только через проверку DNS-записи.
Ищем альтернативу и учим cert-manager с ней работать без костылей. В итоге родился маленький открытый проект: cert-manager-webhook-freens — плагин для cert-manager, который умеет получать такие сертификаты через бесплатный DNS-хостинг FreeNS.
Сразу о том, для кого это. Если вы не используете Kubernetes и cert-manager, статья вам будет малополезна, разве что раздел про сравнение бесплатных DNS-хостингов (и он не претендует на полный обзор рынка).
Расскажу, зачем проект понадобился, почему не подошли очевидные варианты, как им пользоваться и что у него внутри.
Читать далееRiver Sortie это шутер в духе River Raid, в который можно сыграть прямо в браузере. Самолёт летит вверх по бесконечной реке, сбивает танкеры, вертолёты и мосты, заправляется над складами. Всё, что в нём движется, это обычные компоненты Flame с хитбоксами Flame, а рисует всё это в 3D flutter3d. Расскажу, как два движка поделили работу, что для этого пришлось добавить в мост flame_flutter3d, и про короткий способ, когда в 2D-игре нужна всего одна трёхмерная модель.
Читать далее«Просто напишите правильный промпт», говорили они
У меня появился проект, которому нужно перекладывать миллионы пакетов со скоростью канала. Для такой задачи я рассматривал C, C++ и Rust. На C я последний раз писал в 2009 году, и обратно не тянет. Слабак, согласен.
Выбрал Rust: современный язык, удобная сборка, большая библиотечная экосистема и обещание безопасности памяти. Когда в описании технологии встречается слово «безопасный», у меня по профессиональной привычке начинает чесаться в кончиках пальцев.
Язык для меня новый, поэтому я хотел разобраться, какие ошибки остаются в программах на Rust и чем их искать. В результате появились учебное приложение, сигнатуры для SAST, собственный исследовательский конвейер rust-in-peace, находки в библиотеках и приложениях, а затем и патч для ядра Linux и выступление на конференции. По дороге выяснилось, сколько убедительных ошибок способны произвести модели, агенты, проверяющие модели и я сам.
На ZeroNights я рассказывал об этом в докладе Rust in Peace: How to Raise Your Own Pet Mythos. Здесь можно позволить себе больше подробностей: откуда взялся каждый механизм, какую проблему он решал и что получилось при проверке в бою.
Читать далееВ прошлой статье я показал cronsense, библиотеку, которая переводит расписание на русском или английском в cron: «по будням в 9:30» → 30 9 * * 1-5. Комментаторы устроили ей хабратестирование и нашли, чего она не умеет: «полвторого», «без пяти шестнадцать», «каждые полчаса», а ещё задачи, для которых cron не подходит вообще.
За несколько дней вышло семь версий. Теперь одна фраза превращается в cron, RRULE для календарей или таймер systemd, а праздники можно называть по имени. Для «последнего рабочего дня месяца» появилась вторая библиотека, prodcalendar: производственный календарь РФ, который сам обновляется в npm. Попутно сверка с rrule.js и systemd-analyze нашла баги, о которых я не знал.
Прочитать до Нового годаИсследователи из NVIDIA, MIT и NTU поручили одному ИИ-агенту улучшать harness другого, кодинг-ассистента на базе открытого Pi. Агент перебрал 152 идеи, и 4 из них сократили расход токенов почти вдвое при той же модели. Счёт за API упал на треть, средний балл на EdgeBench снизился на 6 %. Разбираем, что такое harness, какие приёмы сработали и где у результатов слабые места.
Какие 4 приёма сработалиПосле технического интервью на позицию Go-разработчика я попросил более подробную обратную связь.
Часть выводов в ней плохо стыковалась и с тем, что реально проверяли на собеседовании, и с моим фактическим опытом. Особенно по конкурентности в Go, эксплуатации инфраструктуры и Python/frontend.
Мне стало интересно, как из конкретных эпизодов интервью появляются настолько широкие выводы о кандидате и в какой момент «мы не получили подтверждения» превращается в «у кандидата этого нет».
Разобрать фидбекКогда денег в компании начинает не хватать (такое особенно часто бывает в кризисные времена, когда денег не хватает у всех , рынок падает и палки в песке перестают цвести) обычно бывает два пути. Путь первый (он же путь финансиста): режем все, что не приносит выручку прямо сейчас. Путь второй (он же продуктовый): кризис - время возможностей, надо вкладываться в инновации и быстрее всех выходить в рост, поджимать рынок под себя, пока все сокращают расходы (такой путь встречается гораздо реже, поскольку адептам такого пути обычно нечего ответить на вопрос "Чем вкладываться?) Денег то нет))0)").
Я думаю, что оба неправы. Точнее, каждый прав ровно наполовину, и именно эта половина решает, выйдет ли компания из кризиса сильнее или просто выйдет.
В эпоху ИИ агентов и ботов мне, как человеку, занимащемуся автоматизацией бизнесов, выгодно сказать «автоматизируйте все и вся на последние деньги». Не скажу. В этой статье я попробую рассказать о фильтре, по которому я сам для себя решаю, браться ли за проект в плохие времена.
Читать далееРеклама всегда существует в контексте. Баннер, видео или нативный пост пользователь видит рядом с новостями, роликами, комментариями и другими публикациями. Иногда это почти не влияет на восприятие, но бывает и так, что именно окружение определяет отношение к бренду.
Например, туристическая компания рекламирует отдых на морском курорте, а ее объявление появляется рядом с новостью о разрушительном наводнении в том же регионе. Сама реклама может быть качественной, но выглядит неуместно. У аудитории возникают тревога, раздражение или ощущение, что бренд не замечает происходящее.
В digital-рекламе такие риски принято описывать термином Brand Safety. Он означает контроль над тем, в каком информационном окружении появляется бренд.
В инфлюенс-маркетинге среда меняется. Рекламное сообщение выходит не просто на странице или в рекламном блоке, а в аккаунте конкретного человека. Контекст формируют сам блогер, его контент, подписчики, другие рекламодатели и все, что происходит вокруг его публичного образа.
Читать далееПолгода назад я решил измерить, сколько языковые модели на самом деле знают про вино. Вышел бенчмарк OenoBench: 38 104 факта из открытых источников, 3 266 вопросов с вариантами ответа и прогон шестнадцати моделей. Почти всю работу сделали агенты: код писал Claude Code, вопросы генерировали пять моделей, проверяли их десять агентов аудита. Я был единственным человеком в схеме и отвечал за вино. Счёт за API — около $800.
Внутри: как 17 скраперов из 35 оказались «гарантированным fallback» из памяти модели и как выглядит инвариант, который этого больше не допускает; как факт превращается в вопрос через ячейки «стратегия × домен × генератор»; почему три LLM-судьи из трёх компаний согласились друг с другом и все ошиблись; какой агент так и не прошёл свой порог и почему я перестал верить ему, а не корпусу; как 16 моделей ведут себя на одном лидерборде, разрезанном пополам; и почему самые сложные вопросы любого сгенерированного бенчмарка — в первую очередь самые сломанные. Все числа — из базы, запросы в тексте.
Читать далееАвтомойка для собак за 390 000 ₽: разбираю устройство как систему — что автоматизируется, где остаётся человек, какие нужны аварийные сценарии и какие метрики смотреть на пилоте.
Читать далееДисклеймер сразу: я не собирался писать «ещё один стартап». Мне просто было лень руками пересматривать видео, чтобы выписать из него тезисы. Дальше — история о том, как решение личной проблемы обросло LLM-цепочками, защитой от SSRF и вопросами вроде «а что если сертификат не выпустится».
Сервис называется postvid.ru: ссылка на видео или файл на входе, расшифровка, тезисы, таблица, презентация и карточки для карусели на выходе.
Стек, если коротко
- FastAPI — веб-приложение и API, ничего экзотического.
- faster-whisper, модель small — расшифровка речи. Брал именно small, потому что сервер без GPU, а medium на CPU превращает ожидание в пытку.
- YandexGPT / любой OpenAI-совместимый API — выделение тезисов, с фолбэком на локальную модель через Ollama и на офлайн-алгоритм без нейросети вообще.
- Pillow — генерация карточек карусели.
- openpyxl, python-pptx — таблица и презентация из тех же тезисов.
- SQLite — аккаунты, сессии, подписки, платежи. Да, SQLite, не Postgres — для текущей нагрузки хватает с запасом, а лишнюю инфраструктуру я себе усложнять не стал.
- Docker Compose + Caddy — деплой и автовыпуск TLS-сертификатов сразу для нескольких доменов.
- ЮKassa — оплата и автопродление.
Пайплайн
```
ссылка/файл → проверка SSRF → faster-whisper (текст + таймкоды)
→ LLM (тезисы + цитаты + время) → {xlsx, pptx, PNG-карусель, srt}
```
Задача обрабатывается в пуле потоков, статус лежит в памяти процесса и отдаётся polling'ом через /api/jobs/{id}. На бумаге — просто. На практике каждый пункт этой схемы принёс свой сюрприз, и вот четыре самых запоминающихся.
Грабли №1: облако решило отдохнуть, а сервис — вместе с ним
Первая версия дёргала облачную LLM напрямую, без всякой защиты. Всё было отлично, пока однажды ночью модель не легла на пару минут. Для меня это была строчка в логе. Для пользователей в этот момент — «сервис сломан, ничего не работает». Неприятное ощущение, когда узнаёшь об этом постфактум.
Сделал цепочку:
1. Облачная модель.
2. Если недоступна — локальная модель через Ollama на том же сервере.
3. Если и её нет — офлайн-алгоритм: рубит текст на предложения и выбирает самые «весомые» по простым эвристикам.
Плюс кулдаун: если облако упало, следующая минута задач сразу идёт в запасной вариант, не тратя время на повторный обречённый запрос. На странице результата честно пишется, какой движок сработал — cloud, local или offline. Мне кажется, это важнее любой красивой анимации загрузки: пользователь должен понимать, почему результат вдруг стал немного хуже.
Грабли №2: «просто вставь ссылку» — ха
Казалось бы, что сложного в том, чтобы скачать видео по ссылке. Сложного оказалось много: нужно отсечь запросы во внутреннюю сеть сервера (привет, SSRF), проверить, что схема — именно http(s), и не пускать всё подряд.
```python
def validate_public_url(url: str, allowed_hosts: set[str] | None = None) -> None:
parsed = urlparse(url.strip())
if parsed.scheme not in ("http", "https"):
raise SourceRejected("Разрешены только http(s) ссылки")
# резолвинг хоста, отказ на приватные/
Читать далееЭта типология родилась не в кабинете, а в ходе работы над DTaaS и более чем 50 разговоров с лидерами цифровой трансформации. Одни уверены, что справятся без «цифры», другие создают витрину из пары дежурных кейсов, третьи превращают трансформацию в продолжение автоматизации. Четвёртые действительно меняют бизнес-модель. А пятый лидер, возможно, уже не человек. Пять узнаваемых управленческих образов — и один неприятный вопрос, который стоит задать себе.
Узнать свой типВсе мы любим VLC. Он открывает что угодно, работает на всём, не просит денег и не спрашивает, кто ты такой. IINA на маке выглядит как нормальное приложение, а не как диалог из нулевых. mpv вообще эталон: лучшая картинка, скрипты, конфиг под любую паранойю. Это отличные плееры, я пользовался всеми тремя годами и не собираюсь объяснять, что их авторы что-то делают не так.
Но однажды я поймал себя на мысли: 2026 год, вокруг десятки приложений, отполированных до состояния, когда интерфейса просто не замечаешь: он не мешает, он угадывает, он не заставляет вспоминать, где лежит нужная галочка. И ни одного такого видеоплеера. Хороших видеоплееров не существовало — не в смысле «не умеют открыть файл», а в смысле, в котором мы говорим «хорошее приложение» про всё остальное на своём компьютере. Поэтому я сделал свой.
Он называется Frame Player, он бесплатный и с открытым кодом, Windows и macOS. Дальше — список того, что меня в плеерах раздражало, и что с каждым пунктом в итоге получилось сделать.
Читать далееВ прошлом году я написал пост про известную шифровальную машину нацистов Как работает машина Enigma M3 (для флота) / Хабр .
Enigma широко использовалась в немецких вооружённых силах, включая армию и флот.
Но куда менее известной является машина Lorenz SZ 42, хотя она была не менее важна.
Из этой статьи вы сможете узнать, как шифровали сверхсекретную связь высшего немецкого командования, как ошибка оператора в 1941 году помогла раскрыть устройство Lorenz и почему в 1944-м для чтения таких сообщений появился электронный Colossus.
Сразу скажу, что написать эту статью было куда сложнее, чем статью про Enigma, так как материалов про это сильно меньше, особенно научно-популярных и особенно на русском языке. Но это того стоило! Получилась еще одна увлекательная глава из истории техники, криптографии и Второй мировой войны.
Кроме того, в процессе работы над материалом было найдено довольно много первоисточников, которые неплохо сохранить внутри такой статьи. В самом низу есть cайты, архивы, интерактивные модели и первоисточники, в статье много кода на Python.
Погрузиться в историю ...Сайты открываются, но часть изображений не загружается, а приложения жалуются на сеть. VPN помогает, однако российские сервисы начинают видеть зарубежный IP.
Рассказываю, как настроил Policy-Based Routing (PBR) на OpenWrt: основной внешний трафик направил через VPN, а российские сети оставил на WAN. Показываю конфигурацию, настройку исключений и генерацию списка адресов с помощью собственной утилиты.
Читать далее