Обновить
512K+

Программирование *

Искусство создания компьютерных программ

1 120,11
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Я собрал 33 ИИ-агента на одном движке. Показываю, как устроены пять из них

Уровень сложностиСредний
Время на прочтение28 мин
Охват и читатели4.6K

За последний год я собрал 33 ИИ-агента. Шахматный тренер для ребёнка, помощник по учёбе, ассистент для жены, тьюторы образовательных программ, боты для металлургического холдинга и энергетической компании, внутренние агенты отдела продаж и CRM.

Все они работают на одном движке. Один и тот же Docker-образ, одна и та же кодовая база. Форков ядра — ноль.

Различаются они ровно одним: где у каждого проходит граница между тем, что считает код, и тем, что говорит модель. Это и есть содержание всей работы. Не промпт-инжиниринг, не выбор модели, не RAG. Граница.

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

TL;DR

Читать далее

Новости

Бенчмаркая Enumerable.Chunk: почему батчей меньше, а проход до ×2,7 дольше

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели4.8K

Chunk делит коллекцию на массивы — одна строка кода. Но есть размер чанка, после которого он замедляется в разы при тех же данных и той же памяти. А на массиве и на List<int> внутри разный код, и в самой строке этого не видно.

Читать далее

Как PVS-Studio улучшает качество embedded-проектов

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели7.2K

Embedded-разработка отличается множеством уникальных настроек, компиляторов и систем сборки. А при использовании стандартных методов анализа могут возникать сложности. Для решения этой проблемы PVS-Studio предоставляет специально разработанный механизм. Давайте узнаем о нём больше и посмотрим, как его можно применять на практике.

Читать далее

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

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5.5K

Привет, Хабр! Кредиты и все, что с ними связано – тема для многих весьма чувствительная. Мы в Smart Engines выступаем за то, чтобы сделать самые раздражающие процессы удобными и быстрыми. И в этом смысле распознавание документов – это редкий пример технологии, где интересы банка (сократить издержки), сотрудника (меньше рутины) и клиента (не ждать решение неделями) действительно совпадают. Под катом рассказываем, как автоматическое распознавание документов может трансформировать процесс кредитования в банках и как такие технологии становятся ключевым звеном кредитного конвейера.

Читать далее

Kazry — новая кусочно‑заданная активация

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели6K

Привет, Хабр, в этой статье я хочу представить новую функцию активации для нейронных сетей под названием Kazry, которая по результатам тестов обошла SiLU.

Читать далее

Как мигрировать 1 млн строк кода с одного языка на другой за 2 недели

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели6.8K

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

За последний месяц отдельные разработчики Anthropic с помощью Claude Fable 5, Claude Opus 4.8 и dynamic workflows перенесли десять проектов объемом от десятков до сотен тысяч строк кода. В этой статье мы разберем два примера и лучшие практики, сформировавшиеся в ходе этих проектов.

Джарред Самнер, сооснователь Bun и технический специалист Anthropic, использовал Claude Code, чтобы перенести Bun с Zig на Rust. Менее чем за две недели было создано миллион строк кода. До слияния ветки 100% существующих тестов Bun проходили в CI. После слияния обнаружилось 19 регрессий, все они уже исправлены. В июне версия на Rust вошла в состав Claude Code.

Майк Кригер, один из руководителей Anthropic Labs, за выходные перенес кодовую базу на Python в 165 000 строк TypeScript. В процессе работали сотни агентов, использовались восемь контрольных этапов, три раунда состязательного ревью и финальная проверка, которая сравнивала вывод каждой команды с результатом оригинальной версии на Python.

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

Читать далее

VK Security Gate: наша платформа для разработчиков

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.8K

Security Gate — это наша внутренняя AppSec-платформа, объединяющая инструменты и практики для проверки безопасности кода, зависимостей и других компонентов разработки. Платформа помогает находить потенциальные проблемы безопасности, приоритизировать результаты сканирования и встраивать проверки в привычный процесс работы с кодом.

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

Читать далее

Лень, Modbus и ИИ: как я сделал инструмент, которого мне не хватало на пусконаладке

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5K

Когда я работал инженером АСУ ТП, мне часто приходилось проверять связь с устройствами по Modbus. Существующие утилиты помогали, но почти в каждой чего-то не хватало. Спустя несколько лет я вернулся к старой идее и с помощью ИИ-инструментов разработал ProtoLink — простой локальный клиент для Modbus TCP и RTU. Рассказываю, как появился проект, что он уже умеет и в какую сторону будет развиваться дальше.

Читать далее

React Update Lifecycle: что происходит при обновлении компонента

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели5.4K

В этой статье последовательно разобран полный цикл обновления React: от Virtual DOM до внутреннего устройства Fiber Reconciler.

Разобраться в жизненном цикле React

Невероятно быстрый алгоритм нахождения простых делителей огромных составных чисел

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.9K

хочу представить вам свой очень быстрый алгоритм нахождения простых делителей огромных составных чисел. Однажды на уроке математики мне нужно было найти делители какого-то числа. Раз уж "лень — двигатель прогресса", я решил поручить эту задачу компьютеру. Но простая программа на Python по перебору до корня мне показалась скучной, и тогда я решил найти более интересный способ.

Читать далее

Месяц, 500M токенов и симулятор завода: как мы с ИИ-агентом построили имитационную модель производства чипов

Время на прочтение18 мин
Охват и читатели6K

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

Первой же пробой пера стал вовсе не Todo-app, а самый что ни на есть хардкорный энтерпрайз. Задача - создать полноценный аналог интеграционной шины CellWorks MBX. Это ключевой элемент автоматизации завода по производству полупроводников: она связывает в единое целое MES-систему и сотню единиц технологического оборудования. Мы как раз начинали перенос легаси-стека с PA-RISC-серверов на x64, и вопрос портирования старого транспорта стоял остро.

Вторым проектом стала имитационная модель этого производства. Нет-нет, это не аналог factorio, в ней ни намёка на 3D или игровые механики. Это симулятор реального цеха: с моделями оборудования, технологическими маршрутами, реальным незавершённым производством, производственным планом на годы вперёд (при желании). Эта модель отвечает на вопрос: какую продукцию и в какой срок я потенциально смогу выпустить, если запущу в работу вот столько-то сырья, и оборудование не встанет надолго из-за поломки или отсутствия материалов. Результат превзошёл ожидания. Софт, который раньше создавался большими коллективами, благодаря ИИ и open-source, теперь можно создавать практически в одиночку, и активно внедрять в реальное производство!

Читать далее

Симулятор программирования космических аппаратов

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.3K

Лет 8 назад пришла идея создать игру, где игрок сможет программировать космические аппараты, управлять его системами, управлять полётом и так далее. Концептуально игра должна была быть похожей на Kerbal Space Program, но вместо конструирования космических аппаратов игрок должен их программировать. Также KSP мне не нравился тем, что игрок по сути управляет космическим аппаратом вручную, вручную совмещает точки, стыкует космические аппараты «на глаз». Хотелось больше автоматизации (космическая станция должна расти). И в этот момент у меня зародилось приблизительное и далёкое видение моей игры.

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

Читать далее

Вам не нужны микросервисы

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели6.3K

Какое‑то время назад, проработав 3 года на позиции Java Middle+‑ разработчика на крупном монолитном легаси‑проекте (естественно, модульном), я столкнулся с тем, что не имел практики в создании приложений на микросервисной архитектуре. При этом я понимал, что работа с микросервисами — это работа с актуальным стеком технологий в мире Java. И если ты не работаешь с микросервисами, то ты вроде как не имеешь необходимой квалификации для большинства вакансий на рынке труда. По крайней мере, если судить по самим вакансиям.

Поэтому я решил, что мне нужен какой‑то достаточно крупный проект, который бы дал мне основные практические навыки работы с микросервисами. Это должен был быть проект, выходящий за рамки пет‑проекта с животными или чего‑то подобного. При этом, отработав на Java более трех лет, я уже хотел сделать что‑то свое, разработать архитектуру с самого начала. Думаю, это нормальное желание для мидл‑программиста, который хочет развиваться в своей сфере.

Читать далее

Ближайшие события

Как мы вынесли алгоритм ценообразования из кода Яндекс Такси (и почему это не было очевидно с самого начала)

Время на прочтение17 мин
Охват и читатели16K

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

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

Читать далее

130+ критериев: как холдинг искал замену Excel и чем это кончилось

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели7.1K

Крупный промышленный холдинг разослал по рынку анкету: больше 130 критериев к «умной таблице», которая должна заменить у него Excel. Мы её заполнили, защитили перед архитектором и службой безопасности, подали коммерческое предложение — и не получили даже отказа. Просто тишина. Разбор этого случая — ниже, и он объясняет, почему так заканчивается почти всегда.

Разберем также других кандидатов — что с ними не так и почему они безнадежны.

Про убийц Excel

Бенчмаркая StringBuilder: подстава на длинном тексте

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели9.2K

StringBuilder делит текст на чанки по 8000 символов — вчетверо ниже порога кучи больших объектов. Запас такой, что попасть туда невозможно.

Но чанк на 400 КБ в этой куче возможен и получить его можно разными способами.

Читать далее

Починил ripgrep или поддержка архивной звеRooшки

Время на прочтение2 мин
Охват и читатели9.1K

Далеко не новость, что поддержка популярного расширения прекратилась. Но кто мешает расширению Roo поддерживать самому себя. Решил это проверить и поправить заодно проблему с ripgrep. Проблем никаких почти не возникло, реализовал и починил все, что требовалось.

Починить ripgrep никаких проблем не составило.

Далее, добавил нового встроенного Агента 🎨 Image generator и настройки для подключения к sd api v1 и новый встроенный tool.

В старом tool не устроило использование только OpenRouter.

Читать далее

Проклятие детерминизма, или Меланхолия создателей цифровых миров

Время на прочтение6 мин
Охват и читатели10K

Всем привет, Я Артур Валиев, Не хотелось но на этот раз я все-таки попрошу гуся что-бы помог рассказать мою историю.

Три дня назад я сидел и сравнивал integrity level токена процесса с integrity level окна в фокусе, чтобы понять, почему Диспетчер задач блокирует ввод удалённого пользователя. Никто в мире, кроме меня, в этот момент не знал, что это вообще проблема. Я был там один. И мне было хорошо.

Читать далее

Корутины на бэкенде: семь ошибок, из‑за которых падает не тот запрос и висят не те задачи

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели7.2K

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

Разбираем типичные ошибки Kotlin‑бэкенда и показываем, как сохранить предсказуемое поведение сервиса.

Читать далее

Сборщик мусора в Dart. Часть 2: поколения и scavenge

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7.2K

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

Перед нами стоит самый главный вопрос: А как сборщик все-таки за собой убирает? 

Молодое и старое поколение.

Что происходит в обычном build() у Flutter-виджета? За один кадр создается куча временных объектов: EdgeInsets, Padding, промежуточные TextStyle, какие-то списки, замыкания. Живут они до следующего ребилда(Не учитывая const).

Также у нас есть и другая категория объектов, которые живут долго: синглтоны, кэши, репозитории, состояние приложения.  Они создаются один раз  и живут все время работы.
Отсюда вывод, если молодые объекты пересоздаются пачками, а старые в основном живут, то убирать их одинаково не выгодно. Именно поэтому Dart делит кучу на 2 поколения...

Читать далее