Reading view

Ускоряем eMMC в 5 раз для процессора AllWinner H6 на примере Repka Pi 4

Когда речь заходит о производительности одноплатных компьютеров, чаще всего внимание уделяют процессору, объему оперативной памяти или системе охлаждения. Однако в реальных сценариях использования скорость работы системы очень сильно зависит от накопителя. Именно накопитель влияет на время загрузки ОС, скорость установки пакетов, работу Docker-контейнеров, баз данных, браузера и общую отзывчивость системы.

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

Пакуем PHP в PHP, чтобы запаковать в JS, чтобы обернуть в HTML

Прочтя недавний перевод про запаковку БД в exe, решил рассказать об идеи, которую реализовал лет 6 назад в своем домашнем проекте. Сам проект недоделал, но речь в статье об архитектуре файлов и их запаковке.

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

Чужой код у вас в Production. Как устроены Supply Chain Attacks и что с ними делать

Что может быть привычнее для разработчика, чем ежедневный ввод команд установки или обновления зависимостей: npm install, pip install, uv add, bundle add, cargo add? Пакетный менеджер находит нужную библиотеку, скачивает её вместе с транзитивными зависимостями и за несколько секунд устанавливает в проект сотни тысяч строк чужого кода. В этот самый момент мы не задумываемся о том, что совершаем серьёзный акт доверия. Мы доверяем автору пакета, его аккаунту, системе публикации, сборочному конвейеру и всем зависимостям, которые пакет подтянет вместе с собой. Бесспорно, большую часть этого кода мы не читали и, скорее всего, не прочитаем никогда. Пока всё работает как задумано, этот процесс остаётся незаметным. Но стоит злоумышленнику скомпроментировать хотя бы одно звено этой цепочки, и обычное добавление или обновление библиотеки превращается в установку вредоносного кода в сотни или даже тысячи проектов.

Именно на этой идее и строится атака на цепочку поставок — supply-chain attacks. Зачастую злоумышленнику не обязательно искать уязвимости непосредственно в вашем приложении, планировать дорогостоящие многовекторные атаки и применять социальную инженерию. Ему достаточно увести учётку разработчика даже не особо известного пакета, добавить бэкдор в новую версию, опубликовать её в тот же npm или PyPi — и вуаля: вот уже вредоносный код отправляет персональные данные ваших клиентов прямиком на серверы хакеров.

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

На что способен бесплатный Devin: тест на реальном проекте

Привет, Хабр! Меня зовут Завур, я фронтенд-разработчик в Selectel. Каждый день я работаю в привычной многим среде разработки VS Code. Однако в личных проектах, которые создаю для исследования новых инструментов и методов написания кода, часто использую Cursor.

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

Давайте посмотрим, как на практике выглядит реализация идеи с помощью Devin, и попробуем разобраться, действительно ли перед нами потенциальный конкурент Cursor.

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

Один пакет — один мини-плеер: почему мы перенесли голос БОЛТУНа в AudioWorklet

Почему исправные 20-мс аудиопакеты всё равно превращались в щелчки? В БОЛТУНе каждый пакет запускался как отдельный AudioBufferSourceNode — до 50 мини-плееров в секунду на одного говорящего. Мы заменили это расписание одним непрерывным AudioWorklet с кольцевым буфером и проверили новую схему тестами.

Разобраться в звуке
  •  

Ваша Kubernetes-платформа всё ещё держится на nginx.ingress.kubernetes.io/*? У меня плохие новости

Статья посвящена завершению поддержки ingress-nginx и рассматривает это событие не просто как необходимость заменить один Kubernetes-компонент на другой, а как повод пересмотреть архитектуру маршрутизации в Kubernetes-платформе. В статье показано, как со временем простой Ingress превращается в набор NGINX-specific annotations и накопленного технического долга, который сложно поддерживать и объяснять. Так же разбираются возможности Gateway API, разделение ответственности между Platform-командой и разработчиками, а также подходы к миграции существующей инфраструктуры. Особое внимание уделяется аудиту текущих Ingress, постепенному внедрению новой модели и отказу от массовой миграции ради миграции. Основная идея статьи — не просто перенести сотни Ingress в HTTPRoute, а использовать изменения для построения более понятной, управляемой и масштабируемой Kubernetes-платформы.

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

Автоматизируем обработку лидов в недвижимости с голосовым роботом

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

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

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

Как мы победили рутину: строим spec-driven платформу для генерации email

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

Мы устали и автоматизировали это. Теперь описываем контракт письма в OpenAPI, а CLI генерирует весь boilerplate — от NestJS-артефактов до React-компонента с типизированными пропсами. Часы работы сжались до минут.

Меня зовут Денис, я фронтенд-разработчик в ЮMoney. В этой статье расскажу, почему мы пришли к кодогенерации, как устроили процесс и что в нём изменилось для разработчиков, дизайнеров и тестировщиков. Материал будет полезен тем, кто работает с React, NestJS или TypeScript и хочет перестать писать однотипный код вручную. Особенно если поддержка UI-компонентов и API-слоя отнимает время, которое лучше потратить на реальную логику.

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

Как я перешёл на локального агента Pi и 100+ не тупых локальных токенов в секунду или Счёты 4.0

Год назад я делал доклад в Фонде развития Интернет‑инициатив по рискам использования облачных моделей. В тот момент полноценной замены на локальном железе не было, но за этот год мир изменился и Счёты 4.0 уже доступны каждому. Что это такое, как их бесплатно получить и научиться работать — читайте в этой статье.

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

Создание PHP SDK для Битрикс24

Привет! Меня зовут Максим Месилов, я один из мейнтейнеров BITRIX24 PHP SDK.

У Битрикс24 большой REST API: через него разработчики подключают внешние сервисы, работают с CRM и создают приложения для Marketplace.

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

Сегодня рассказываю, как PHP SDK для Битрикс24 вырос из pet-проекта в официальный инструмент, зачем он нужен в эпоху AI-кодинга и почему SDK становится нижним слоем для разработки приложений и интеграций вокруг Битрикс24.

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

[Перевод] Как Европа топит 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 и защищаться от устаревших действий.

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