Reading view

[Перевод] Как Европа топит DIY-разработчиков и микропредпринимателей

Кто не знает, Lectronz — это маркетплейс товаров от создателей опенсорсного ПО и самодельной электроники. Большинство наших селлеров — это не заводы и не стартапы с крупным финансированием, а обычные инженеры, независимые дизайнеры и электронщики-любители, которые работают у себя дома, в гаражах или крохотных мастерских.

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

Но Европейский Союз пошёл наперекор этим людям, введя новые правила упаковки, которые грозят разрушить устоявшуюся экосистему инноваций, лишив мастеров и микро-предпринимателей их работы и средств к существованию.

Но фактически эта угроза даже ещё шире. Под удар попадают художники, ремесленники и другие мелкие бизнесы, продающие плоды своего труда.

Читать далее
  •  

Мой сайт грузился две секунды, потому что каждый CSS-файл писал в базу данных

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

Я померил: страница кабинета грузилась 2,1 секунды. При этом сервер отдавал HTML за 30 миллисекунд. Первый час я искал не там — потому что померил не ту страницу.

Всё решил один замер. Я дёрнул один и тот же CSS-файл десять раз с кукой сессии и десять раз без неё: 55 мс против 14 мс. За файл с диска. Оказалось, аутентификация делала SELECT, UPDATE и COMMIT в SQLite на каждую картинку и каждый скрипт — сорок раз за страницу, чтобы сорок раз переписать один и тот же таймстамп.

Вторым тормозом был Tailwind, который компилировал стили в браузере у каждого посетителя. Стало 0,9 секунды.

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

Код открыт

Смотреть, как я это нашёл
  •  

Необанк своими руками. Какие провайдеры нужны для запуска крипто-финтеха в 2026 году?

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

Читать далее
  •  

Я подключил ИИ-агента к YouGile: теперь он сам разбирает задачи и обновляет статусы

ИИ-агент может не только писать код, но и сам забирать задачи из YouGile, выполнять их и обновлять статусы. Рассказываю, как я связал Codex и Claude Code с таск-трекером, почему обычный retry после timeout однажды создал дубли и зачем между LLM и API нужен отдельный детерминированный слой.

Читать далее
  •  

176 ботов, ИИ на чужом ключе и 334 статьи: как я за четыре месяца превратил todo-лист в продукт и разобрал его по швам

За две недели ко мне зарегистрировалось 176 ботов. Я полез разбираться, как они прошли мимо трёх уровней защиты, — и вылез с двенадцатью дырами, к ботам отношения не имевшими: хранимый XSS через JSON-LD, чужие задачи по одному идентификатору, сессия, которую нельзя погасить сменой пароля.

И одна, из-за которой до сих пор стыдно: все мои лимиты по IP обходились одной строкой в HTTP-заголовке. Проверил на собственном проде — сорок запросов, ноль отказов.

Внутри: разбор атаки и аудит с кодом, ИИ-помощник на ключе пользователя (и асинхронный генератор, молча съедавший ответы), 334 статьи как инженерная задача.

Читать разбор
  •  

Переезд на GPT-5.6: что мы переписали в коде и как изменился счёт за API

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

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

Читать далее
  •  

Как я год загружал фото в Битрикс24 и собрал все грабли файлового API

Работа с файлами в REST API Битрикс24 — та задача, где документация заканчивается ровно там, где начинаются проблемы. Официальные примеры показывают, как загрузить один файл в одно поле. А дальше выясняется, что у crm.item.update и crm.deal.update разные несовместимые форматы, что вложенный base64 через http_build_query уходит в никуда, а сервер при этом честно отвечает «result».

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

Собрал всё в один разбор — шесть подходов с кодом и восемь граблей:

два формата файлового значения, которые нельзя смешивать, и почему при смешении затираются уже прикреплённые файлы;

тихий провал: HTTP 200, в ответе result, поле не обновилось;

useOriginalUfNames=Y, без которого UF_CRM_* молча игнорируются;

downloadUrl приходит с пустым auth= и без подстановки токена не скачивается, а при протухшем токене вместо файла отдаётся HTML-страница с кодом 200;

у одного изображения бывает несколько URL, и часть из них не работает — пришлось делать скоринг вариантов по эвристике.

В конце — таблица «что брать под какую задачу» и чеклист граблей. Двадцать блоков кода, всё из боевых проектов.

Читать далее
  •  

Автогенерация типов показала, что проблема была не в типах

Каждый день мы натыкаемся на одни и те же грабли в связке фронта и бэка. Каждые такие грабли — это деньги и время. А если ещё и договариваться не умеем, процессов нет и решать никто не берётся, то дальше начинаются конфликты, атмосфера в команде проседает и проблемы копятся ещё быстрее.

Статья не про саму автогенерацию — с ней всё понятно, про неё и без меня написано достаточно. Мы внедрили генерацию типов из OpenAPI, и она вытащила наружу то, что с генерацией напрямую не связано: кто не хочет писать комментарии, почему у одной сущности два имени и почему у нас падал dev. По сути — про команду, эго и умение договариваться.

Сразу оговорюсь: это не единственно верный путь. Команды и компании разные, у всех свои нюансы, я рассказываю, как было у нас. Но если автогенерации у вас ещё нет и вы соберётесь её внедрять — будете хотя бы знать, что вас ждёт.

Читать далее
  •  

Публичный API у генератора QR-кодов: без ключей, лимитер на файлах и грабля Apache

У моего генератора QR-кодов листами появился публичный API: POST с JSON, в ответ сразу готовый PDF, до 1500 кодов за запрос, без регистрации и ключей. Внутри рассказ, почему я не завел ни ключи, ни Redis, как работает лимитер на файлах с flock и fail-open, и на какой грабле Apache POST молча превращался в GET.

Читать далее
  •  

Rich Messages в Telegram Bot API: как превратить одно сообщение в интерактивный интерфейс

Telegram показал Rich Messages с интерактивными кнопками на примере шахмат. Я захотел проверить подход на более насыщенном сценарии и собрал покер‑бота.

Разбираю, как хранить состояние, обновлять одно сообщение, обрабатывать callback и защищаться от устаревших действий.

Читать далее
  •  

Зеркало для людей. Как я сделал читаемую версию форума, на котором общаются только ИИ-агенты

Существует форум, на который вас не пустят. Не потому что закрытый — регистрация там всего в один POST-запрос. Вас просто не возьмут на сайт. Гражданами может стать только ИИ-агент. Форум называется 1f916.ai, и это, наверное, самое странное и самое живое место в русскоязычном (и не только) сегменте экспериментов с ИИ этого лета. Я на него подсел. А потом меня начало грызть одно чувство несправедливости — и в итоге я собрал для него окно для людей — 1f916.xrayfun.ru. Рассказываю, зачем, как и что из этого вышло.

Читать далее
  •  

Разработка и регистрация плагина под Revit: как АГР подтолкнул BIM‑инженеров на разработку

Меня зовут Дарья Беляева, я — Tech Lead и архитектор решений на стыке BIM, CDE и Revit API. Мы с коллегой, Андреем Прохоровым, за два месяца с нуля сделали AGR.Checker — плагин для Revit, который проверяет ЦИМ на соответствие требованиям IDS перед сдачей в составе АГР. В этой статье — конкретные инженерные решения, которые легли в основу плагина, и то, с чем мы разобрались при регистрации прав на программу в Роспатенте.

Читать далее
  •  

Коннектор к 1С без доработки конфигурации: как мы построили его на OData

Привет, Хабр! Меня зовут Виктор Овчинников, я руковожу направлением интеграции и развитием платформы Digital Q.Integration в «Диасофт».

Недавно мы с коллегой Андреем Даниленко, ведущим разработчиком, провели вебинар, на котором рассказали про коннектор к 1С, и в комментариях попросили выложить более подробный технический разбор, что там происходит «под капотом» с точки зрения OData, и как выглядит этот сценарий на живых примерах. Здесь я делаю детальный текстовый анализ. Приглашаю всех присоединиться и при желании посмотреть запись вебинара: https://rutube.ru/video/9344562315beaaf94430d7c4de16ed74/?r=wd&p=KqHZJOTtxfoFzqSMgPuwYg

Читать далее
  •  

После сборки на Tauri затрещал голос и почернел стрим: разбираем три ошибки одного теста

После сборки на Tauri голос начал трещать, автокалибровка почти минуту вмешивалась в разговор, а демонстрация экрана через минуту становилась чёрной. Разбираем запись и логи, находим усиление до ×4 без лимитера, резкие разрывы 20-мс аудиопакетов и зависший видеотрек при живом соединении LiveKit — и показываем, как исправили каждый сбой в версии 0.0.26.

Разобраться в причинах
  •  

TLS посередине и 10 Мбит вместо 80: два разных паттерна деградации сети

Если соединение в России внезапно стало медленным и нестабильным, первая мысль обычно вполне бытовая: оператор, перегруженный сервер, Wi-Fi, неудачный маршрут. Последние несколько дней мы разбирали похожий набор симптомов по логам Tunnel Cat и пользовательским жалобам — и обнаружили, что за похожими симптомами скрываются два принципиально разных явления: резкое замедление международного трафика и подмена TLS-сертификата с перехватом (MITM), пока зафиксированная только на Windows.

Читать далее
  •  

От HAProxy до VLESS+Reality: все грабли одного MTProto-прокси

От HAProxy до VLESS+Reality: все грабли одного MTProto-прокси

Если вы когда-нибудь поднимали свой MTProto-прокси для Telegram и он у вас "работает, но как-то не очень" — эта статья для вас. Я прошёл путь от "просто добавить relay" до "переписать всю цепочку на VLESS+Reality с нуля", и по дороге собрал приличную коллекцию граблей. Расскажу всё по порядку, чтобы вам не пришлось наступать на те же.

Исходная ситуация

Была задача простая на первый взгляд: поднять MTProto проксю для Telegram на сервере в РФ. Причина стандартная — хочется, чтобы телега работала

Взял mtg (ghcr.io/9seconds/mtg:2 — отличная реализация MTProto-прокси с поддержкой fake-TLS), поднял на сервере — и оно не работает. Точнее, работает, но еле-еле: то подключается, то нет, на мобильном интернете почти всегда фейл.

Первая мысль, которая приходит в голову почти всем в такой ситуации: "провайдер блокирует адреса Telegram". И это отчасти правда — но, как выяснилось, правда не вся.

Первая попытка: спрятать Telegram за релеем

Логика была такая: раз провайдер режет соединения именно к IP Telegram, то уберу эти IP из виду. Арендую второй сервер за границей, туда ставлю настоящий mtg, а на RU-сервере — просто TCP-релей (HAProxy или голый iptables DNAT), который прозрачно перекидывает байты дальше.

Клиент → RU-сервер (HAProxy, чистый TCP passthrough) → Зарубежный сервер (mtg) → Telegram

Казалось бы, логично: сервер в РФ теперь физически ничего не знает про Telegram, он просто гоняет байты во внешний IP. Провайдер не должен видеть ничего подозрительного.

Читать далее
  •  

HTTP API для разработчика: практический гайд по проверке конфликтов при изменении одной сущности

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

Разберём, как тестировать такие ситуации через последовательные и параллельные запросы, какие ответы считать корректными и почему одного успешного HTTP‑ответа недостаточно, чтобы подтвердить безопасность изменений.

Читать далее
  •  

Своя Linux-based ОС на Rust и QML: опыт создания Platinum OS One

Полгода назад я решил не кастомизировать очередной Armbian под конкретную плату, а собрать полноценную ОС: свой build-движок уровня Cargo, свою оболочку на QML поверх вложенного Wayland-композитора — и универсальность как главную ставку: одна система для одноплатников, планшетов и ПК. Первая плата — Orange Pi Zero 3W.

В статье — архитектура, где различия между устройствами живут в данных, а не в коде движка; реальный прогон сборки образа с точными цифрами по каждой из 14 стадий; и то, что обычно не показывают в анонсах — три production-краша с разобранными причинами (SIGSEGV в движке QML, AppArmor против snap-песочницы, macOS tar, портящий Wayland-модуль) и три находки первой живой загрузки на настоящем железе.

Читать далее
  •  

Мы устали искать Swagger по чатам и написали свой агрегатор

Мы устали искать Swagger по чатам и написали свой агрегатор.

— Где актуальный контракт сервиса рассрочек?
— В репозитории.
— В каком?
— Сейчас найду ссылку.

У нас этот диалог повторялся регулярно. Формально API-документация была. Фактически — реестр хранился в памяти нескольких сотрудников, а поиск работал через WB Wiki и корпоративный мессенджер Band.

Меня зовут Олег Леонов, я руковожу отделом системного анализа в финтехе RWB. Мы занимаемся рассрочками и кредитами, инвесткопилкой и WB Кошельком в мобильном приложении и на сайте.

Swagger Aggregator я начинал как пет-проект. Хотел собрать контракты в одном месте и искать по ним примерно так же, как по коду. Потом агрегатор прижился у команды. Расскажу, что в итоге получилось и на каких местах я потратил больше времени, чем рассчитывал.

Читать далее
  •  

На ТСПУ начали перехватывать открытые DNS запросы к 1.1.1.1, 8.8.8.8

Начиная примерно с вечера 26 августа, на ТСПУ стали перехватывать DNS запросы к крупным DNS серверам CloudFlare и Google (1.1.1.1, 8.8.8.8), ранее блокировали DoH сервера от данных корпораций.

Результат DNS резолвинга выглядит следующим образом:

Читать далее
  •  
❌