Стохастический клеточный автомат на системе типов

Давайте разберёмся, как алгорифмы Маркова и pattern matching в WL позволяют генерировать лабиринты, реки, падающий песок и другие клеточные автоматы с помощью системы типов

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

Давайте разберёмся, как алгорифмы Маркова и pattern matching в WL позволяют генерировать лабиринты, реки, падающий песок и другие клеточные автоматы с помощью системы типов

Обещание, что скоро код не придется писать руками, звучит далеко не первый раз. COBOL делали похожим на английский, чтобы программы были понятны не только программистам. Предшественник SQL назывался SEQUEL, то есть буквально Structured English Query Language. Потом появились ноукод-платформы. Ручной работы действительно становилось меньше, но программисты никуда не исчезли. Наоборот, их становилось только больше.
Теперь очередь дошла до больших языковых моделей (LLM). Дальше, для краткости, я буду называть их просто моделями. И вот здесь мы встретили финального босса: впервые инструмент по-настоящему, от и до, работает с естественным человеческим языком. Стало возможно писать целые программы не зная ничего о языках программирования.
Звучит немного пугающе. Но мы быстро сделали успокаивающий для себя вывод, что исчезнет только рутина, а спрос вырастет на тех, кто занимается архитектурой и ревью. Все-таки должны остаться люди, которые ставят задачи, а потом проверяют сгенерированный код.
Но на что мы будем опираться при проверке такого кода? По объему знаний модель уже обгоняет любого отдельного разработчика: может воспроизвести большинство известных алгоритмов и паттернов, знает множество библиотек, синтаксис. Ни один человек не держит такой объем знаний в голове. И соревноваться с моделями в количестве запомненной информации бессмысленно.
И все же полноценной заменой программиста они пока не стали. Значит, наша ценность не только в знаниях, есть что-то еще.

По сути, тренды июля те же, что и в июне (описание июня здесь): как создать лучший harness, как настроить автономные или полуавтономные процессы, управление контекстом, повышение качества и повторяемости результатов, оптимизация, безопасность. Но заметен другой сдвиг. Если в июне основной фокус статей был из серии “мы пробуем, мы попробовали”, то сейчас фокус “мы решаем вопрос как именно сделать лучшую реализацию на основе всех кейсов, которые мы собрали”. То есть мы подходим к моменту, когда количество переходит в качество.
Все больше статей описывают не просто интересные кейсы, а дают прикладные рекомендации и решения как сделать так, чтобы агентная разработка давала повторяемый качественный результат. Большой фокус на агентов и субагентов, на оркестрацию большого количества скиллов и MCP, на качественное тестирование как реальную значимую часть агентной разработки (а не просто генерацию unit-тестов), все больше внимания на архитектуру (как ее строить под проекты с ии-разработкой).

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

Главная ошибка наивного генератора судоку — проверять, что решение существует, но не проверять, что оно единственное.
Вот почти заполненное поле:
534..8912 672195348 198342567 859..1423 426853791 713924856 961537284 287419635 345286179
solve() быстро заполнит четыре пропуска. Только завершений здесь два: цифры 6 и 7 можно переставить, не нарушив ни строку, ни столбец, ни блок.
countSolutions(puzzle, 2) останавливается после второго решения и возвращает 2.
Это не демонстрационная картинка. Та же строка из 81 символа лежит в solver.spec.ts, тест так и называется: «контрпример из лида действительно имеет два решения».
Я реализовал три стратегии поиска, а MRV и propagation дополнительно сравнил на наборах задач. Ещё измерил две операции: получение первого решения и доказательство того, что второго решения нет. Вторая вызывается после каждой попытки убрать подсказку, поэтому она в основном определяет цену генерации. React, Web Worker и тесты появятся дальше как обвязка этого поиска, а не как отдельные темы.
Это первый выпуск рубрики «ИграКОД» — про алгоритмы через запускаемые мини-игры. Ранее в цикле выходили материалы про useEffect, any, перенос TypeScript на Go, варианты архитектуры React-магазина и мы собирали и разбирали комбайн.

Вы открываете задачу и пишете одну строку:
Добавь идемпотентность в API создания заказа.
Через некоторое время перед вами diff в незнакомом репозитории. Изменены обработчик API, модель данных, тесты и документация. Все проверки проходят. При этом вы не написали ни одной строки кода.
AI-исполнитель сам нашёл модуль заказов, принятый формат ошибок и существующую обёртку над Redis. На ревью вы заметили опасное предположение о двух одновременных запросах. Вместо разового замечания вы потребовали закрепить инвариант в контракте и конкурентном тесте. Исполнитель исследовал соседний модуль, исправил решение и снова запустил проверки.
Так кто же автор этого изменения?

Привет, это команда Яндекс Практикума. До окончания приёмной кампании в онлайн-магистратуру МИФИ «Кибербезопасность» осталось меньше месяца. Если вы планируете поступать в 2026 году, сейчас самое время разобраться, как устроена программа, что входит в обучение и как проходит поступление.

Всё началось с чата с однокурсниками. Кто‑то обронил фразу «сейчас без ИИ никуда, это уже базовый навык», и следующие два дня мы выясняли, что каждый понимает под этим что‑то своё.
Один говорил, что весь навык сводится к умению нормально сформулировать запрос, всё остальное сделает модель. Другой доказывал, что настоящее умение это как раз не пускать ИИ туда, где он навредит, и что главный навык это дисциплина отказа. Третий считал, что тема надутая, а через год всё устаканится само и учиться нечему. Четвёртый прислал скриншот своего CLAUDE.md на двести строк и сказал, что вот она, настоящая работа.
Меня зацепило, что мы все вроде бы делаем одно и то же каждый день, а описываем это несовместимыми словами. Ни у кого, включая меня, не оказалось внятного ответа на простой вопрос: если разработчик говорит «я умею работать с ИИ», что конкретно он умеет?
А потом выяснилось, что вопрос не академический. У половины из нас в резюме стоит строчка про навыки работы с ИИ, и на собеседованиях за неё уже начали цепляться. «У вас тут указаны навыки ИИ. Что вы имели в виду?» И вот тут начинается неловкое. Потому что честный ответ большинства звучит примерно так: пользуюсь Claude Code каждый день, беру модель посильнее, когда задача сложная, в прошлом месяце сжёг столько то токенов. Всё это правда, и всё это ничего не говорит о вас как об инженере. Количество потраченных токенов характеризует вас ровно так же, как количество написанных строк кода: то есть никак, а иногда и в минус.
Проблема в том, что альтернативной формулировки у нас просто нет. Мы умеем называть инструменты и не умеем называть умения. Поэтому я сел и попробовал собрать перечень. Не «топ 10 промптов», а честный список умений, каждое из которых можно проверить, показать в работе и внятно описать словами, когда спросят.

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

Одна C++ схема — protobuf, binary, JSON, YAML и structured logging без ручных маппингов. В статье разбираю, как CONTRACT отделяет стабильный контракт типа от конкретных форматов, зачем нужны BASE, PROPERTY и REFERENCE и как атрибуты полей задают общую политику для разных адаптеров. Всё - на реальном коде из репозитория: YAML-конфиг, структурированный лог и сравнение производительности с libprotobuf. GitHub.

В связи с тем, что Павел Дуров теперь террорист, Telegram скоро признают экстремистской сетью, что окончательно выведет бизнес в черную зону. Несмотря на то, что мы видим, как до сих пор всё прекрасно работает в соц.сети с картинками, важно перестраховаться. Поэтому сейчас, чтобы “обелиться”, многие бизнесы и эксперты переезжают или будут переезжать в другие соц.сети, в том числе в тот, который ловит даже на парковке
Если вам кажется, что для перевода бота с Telegram на МАХ достаточно пары кликов: получить токен, поменять адрес API и подключить прежние обработчики, то, к сожалению, все не совсем так. Обычно это намного сложнее, ведь у платформ отличаются события, кнопки, медиа, работа с мини-приложениями и идентификаторами.
А если вам не повезло и в проекте намешаны бизнес-логика и код конкретной платформы, то скорее всего, надо будет написать практически нового бота
Всем привет! Решил попробовать новый формат на хабре: делиться результатами своей работы за прошедший месяц. С интересными ссылками на события, проекты, обсуждения, релизы из мира питона, моего телеграм канала и нашего замечательного чата (куда много людей приходят пиарить свои проекты).
Давайте сразу договоримся: я не публикую ИИ слоп, пишу статью ручками (потому что уважаю своего читателя) и рассказываю интересное и актуальное из своей бесплатной работы в опенсорсе, а с вас лайк статье (если она будет для вас интересной).
Погнали смотреть, что у нас в питоне происходило!

Рост в разработке редко определяется только количеством освоенных технологий. Гораздо важнее понимать, какие инструменты действительно применяются в проектах, какие архитектурные решения становятся стандартом и где находятся точки роста — в коде, инфраструктуре, данных или работе с ИИ.
В этом дайджесте собрали 70 открытых уроков месяца — от Python, Go и C# до Kubernetes, Kafka, PostgreSQL, микросервисной архитектуры, ML и ИИ-агентов. Темы разбирают преподаватели-практики: можно погрузиться в новые технологии, обсудить инженерные задачи и проверить свои знания на примерах из реальной разработки.
Карьер. Ночная смена. Самосвал везет уголь, водитель уже несколько часов за рулем. Самый опасный сценарий сейчас – не поломка, а «микросон»: несколько секунд без сознания на скорости, и 45-тонная машина превращается в неуправляемый снаряд.
Готовые системы мониторинга состояния водителя решают эту задачу с помощью видеокамер: следят за глазами, анализируют видеопоток, интегрируются с диспетчерской. Но стоят они соответственно. Сегодня разберем кейс угледобывающего предприятия «Разрез Пермяковский», где пошли инженерным путем и собрали собственную систему «Кнопка бдительности» на базе телематического оборудования. Итоговая стоимость на 10 единиц техники – около 30 000 ₽.

От имени основной команды Axelix и всех, кто внёс вклад в сообщество, я хочу заявить: мы наконец это сделали.
Axelix, наконец, выходит в GA (Generally Available — общедоступная версия)!
Для тех, кто не знает - Axelix это продукт с открытым (Open Source) ядром, который позволяет выявлять распространённые проблемы, подводные камни и неэффективности в Java-приложениях.
Ядро продукта лежит на GitHub - можете использовать, это бесплатно.
В этом посте я хочу поделиться историей и мотивацией, стоящей за продуктом в целом. Надеюсь, вам будет интересно.

ZLinq — замена LINQ без аллокаций. На .NET 8 и .NET 9 время одинаковое. На .NET 10 иначе: массив тот же, но если параметр объявлен как IEnumerable, foreach перебирает его в 2,58–3,89 раза быстрее ZLinq. Причина видна в машинном коде, память замерена отдельно.

Привет, Хабр! Я делаю execai — терминальный AI-агент на Go (bubbletea), в духе Claude Code. Он читает файлы, гоняет shell-команды, ходит в kubernetes и стримит ответы в TUI.
В какой-то момент выяснилось, что пользователям нужен не «агент с одной моделью», а мультитул: у кого-то подписка Kimi Code за $19, у кого-то GLM Coding Plan за $18, у кого-то корпоративный ключ Anthropic, а кто-то хочет гонять Ollama локально и не платить вообще. И всё это — в одном чате, с общей историей, с переключением на лету.
Под катом — как устроена мультипровайдерная архитектура: один интерфейс из пяти строк, два несовместимых мира API (Anthropic-compat и OpenAI-compat), SSE-парсеры с аккумуляцией tool calls, динамические каталоги моделей, автодетект тарифа подписки и делегирование в чужие CLI. С реальным кодом и граблями, на которые мы наступили.

Привет, Хабр! Меня зовут Костя, я десять лет занимаюсь коммерческой Android-разработкой. Давно хотелось попробовать себя в вебе, а эксперименты с LLM давали некоторую уверенность в том, что по крайней мере есть шанс написать агентами поддерживаемый код и задеплоить.
Что же можно сделать? Конечно тамагочи! Текстовая браузерная игра: герой живёт в мире мрачного будущего. Непрямое управление, возможность предлагать миссии, а также тюнинг предпочтений героя. Эдакий Годвилль, но на новый лад. Как я делал, и что получилось, спустя пару недель, расскажу под катом :)

В прошлой статье (Непослушный using ) я разобрал, как using вмешивается в поиск имён и почему его поведение часто расходится с тем, что от него ждет программист, и на этом ветку статей про поиск имен (name lookup) можно временно закрыть.
Using'и попортят вам в проектах еще немало крови, но в целом их проблемы известны и легко ловятся, а теперь давайте поговорим обauto и выводе типов в шаблонах, который регулярно удивляет даже опытных программистов на C++, когда речь идёт о распаде типов (type decay) и неявных ловушках при работе с ним. Представьте, что у нас есть несколько переменных, которые выглядят разными: const int&, просто int, const int и int&&.
По наивной интуиции можно подумать, что компилятор должен относиться к ним по‑разному: и где‑то ссылка, где‑то константность, где‑то rvalue, но это будет работать только до тех пор, пока мы не используем auto или шаблон.
Потихоньку дописываю книгу, в целом каркас уже сложился и большая часть материала уже собрана и обработана в черновике, если вам интересно, что получилось, то главы выложены на гитхабе в русском и английском вариантах или тут, если вам больше нравится в виде статей, а то, что ещё дописывается уже больше шлифовка, чем поиск нужной формы. Оглавление и ссылки будут под катом.

В документации к PropertyNameCaseInsensitive есть предупреждение про накладные расходы, но не сказано, когда они появятся. Замерил на четырёх машинах, трёх рантаймах и трёх размерах входного JSON: пока через настройки идёт один регистр ключей, флаг не добавляет ничего — 0,92–1,09. Политика именования camelCase тоже.
Разницу до ×4,3 даёт другое: какие ещё написания этих ключей прошли через настройки раньше. Два экземпляра JsonSerializerOptions, созданные через new с одинаковыми полями, делят один кеш имён.
Внутри: пять историй с таблицами по четырём машинам, листинги из dotnet/runtime, предел кеша в 64 записи и веб-настройки, на которых эта разница не видна.