Обновить
1467.1

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

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

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

Zator: Специализированный язык программирования для построения генеративных пайплайнов через KoboldCpp и StableDiffusion

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

Язык программирования Zator представляет собой интересный и четко очерченный пример доменно-ориентированного языка, разработанного не для универсальных задач программирования, а для решения одной конкретной, но все более значимой проблемы — построения сложных генеративных пайплайнов для создания текста и изображений = Его философия коренится в стремлении минимизировать "шаблонный" код, который традиционно мешает созданию содержания, и предоставить разработчикам, дизайнерам и другим создателям контента высокоуровневые абстракции для работы с передовыми технологиями искусственного интеллекта . В отличие от мощных, но часто громоздких общепurpose языков, таких как Python или JavaScript, Zator делает ставку на простоту, скорость и специализацию, что определяет его место в экосистеме инструментов для ИИ =

Основная идея, лежащая в основе Zator, заключается в том, чтобы стать "языком описания пайплайнов", который работает поверх существующих сервисов искусственного интеллекта, а именно KoboldCpp и Stable Diffusion = Задача создания последовательностей, где результат одного шага (например, сгенерированный текст) используется как вход для следующего (например, промпт для генерации изображения), требует сложного взаимодействия с API. Это обычно включает в себя написание кода для сетевых запросов, управления состоянием, парсинга JSON-ответов и обработки файлов. Zator призван инкапсулировать всю эту сложность внутри нескольких ключевых функций, таких как generate_text() и generate_img(), которые абстрагируют низкоуровневые детали и позволяют пользователю сосредоточиться исключительно на логике своего пайплайна . Таким образом, язык позиционируется как инструмент, снижающий порог входа для людей без глубоких знаний в области системного программирования или веб-разработки, позволяя им быстро экспериментировать и создавать сложные генеративные сценарии .

Читать далее

Новости

Data Structure Protocol (DSP): как дать LLM-агентам «долговременную память» о большом репозитории

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

Есть паттерн, который видит каждый, кто работает с агентами: первые 5–15 минут уходят не на задачу, а на "ориентацию". Где точка входа? Откуда растут зависимости? Почему эта библиотека, а не другая? Кто считает это публичным API? В маленьком проекте раздражает. В большом — превращается в постоянный налог на токены и внимание.

DSP (Data Structure Protocol) "выносит карту проекта наружу" — в простой, версионируемый, языковой граф, который живёт рядом с кодом и доступен агенту как постоянная память.

k-kolomeitsev/data-structure-protocol

Цель в архитектуре сформулирована так:

1) Цель и границы

Цель DSP — хранить минимальный, но достаточный контекст о репозитории/системе артефактов в виде графа «сущности → зависимости/публичный API», чтобы LLM могла:

- быстро находить нужные фрагменты по UID,

- понимать «зачем» сущности существуют и «как» они связаны,

- не требовать загрузки исходников целиком в контекстное окно.

DSP — это долговременная память и индекс проекта для LLM. Агент может в любой момент выполнить поиск (grep) по проекту, найти нужные сущности по описаниям/ключевым словам и от найденного UID раскрутить весь граф связей: входящие зависимости, исходящие импорты, реципиентов через exports. Это заменяет необходимость «помнить» структуру проекта или загружать его целиком — вся карта проекта всегда доступна через .dsp.

Читать далее

Первое знакомство с Rust

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

Язык программирования Rust в последние годы приобрел значительную популярность, выступая в качестве универсального языка, обеспечивающего высокую производительность и безопасную работу с памятью. Разработанный Mozilla, это современный язык программирования системного уровня, который является наиболее популярным среди разработчиков, работающих над различными приложениями, от операционных систем до веб-браузеров.

Эта статья предназначена для тех, кто только начинает свое знакомство с миром Rust. Мы рассмотрим основные преимущества этого языка, установим необходимые компоненты и соберем первое приложение.

Читать далее

Как Anthropic убивает Биткоин?

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

Нативная валюта ИИ уже существует - она прячется у всех на виду, превосходя криптовалюты на шесть порядков.

Мы находимся в начале эры тотальной машинной экономики - и вы держите в руках неправильные деньги.

Вы вот-вот увидите сдвиг, который большинство людей в крипте и ИИ все еще упускают из виду.

Пока вы следили за ценой Биткоина и циклами хайпа вокруг ИИ, одна компания собирала финансовую инфраструктуру, которая работает за пределами архитектурных ограничений Биткоина, Эфириума и всего остального в текущем крипто-стеке.

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

Читать далее

От MNIST к Transformer. Часть 2. Основы работы с памятью

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

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

Это вторая статья из цикла От MNIST к Transformer, цель которого пошагово пройти путь от простого CUDA ядра до создания архитектуры Transformer - фундамента современных LLM моделей. Мы не будем использовать готовые высокоуровневые библиотеки. Мы будем разбирать, как все устроено под капотом, и пересобирать их ключевые механизмы своими руками на самом низком уровне. Только так можно по настоящему понять как работают LLM и что за этим стоит. В этой статье разберем основы работы с памятью и две простые математические операции с точки зрения математики, но не такие простые с точки зрения CUDA ядер.

Приготовьтесь, будет много кода на C++ и CUDA, работы с памятью и погружения в архитектуру GPU. И конечно же математика что за этим стоит. Поехали!

Читать далее

Ceylon и NULL: как сделать null нормальным

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

В одном и том же null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения.

В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО.

Читать далее

Агентская амнезия: как я решил эту проблему на Go

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

Недавно наткнулся на статью про Echovault на Хабре — инструмент для памяти AI-агентов, написанный на Python. Автор описывал ровно ту же боль, что и я испытывал месяцами. Идея хорошая, реализация — рабочая. Но Python. Я ничего не имею против языка, просто не мой выбор для инструментов, которыми пользуюсь каждый день. Люблю скомпилированные бинарники: кинул файл — и работает, без virtualenv, без pip, без «а какая у тебя версия питона». Поэтому я взял идею и переписал её с нуля на Go. Получился Pantry.

Расскажу, зачем это вообще нужно и что внутри.

Читать далее

На что кодинг-агенты тратят наши токены

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

На прошлой неделе я попросил Claude устранить однострочный баг. Ему понадобилось 23 тысячи токенов. Потом тот же баг я попросил устранить Gemini. Он потратил 350 тысяч токенов. Да уж, на такое невозможно закрывать глаза.

Поэтому я написал Context Lens — трассировщик контекста, перехватывающий вызовы LLM API, чтобы показать, что же на самом деле находится в окне контекста с разбивкой по этапам. Я подключил его к четырём инструментам кодинга и дал им одну и ту же задачу. Результаты оказались настолько разными, что я решил написать об этом статью.

Вопрос

При работе с этими моделями мы платим за токены. Токены — это довольно сложная тема. По сути, это блоки информации; 1 токен приблизительно равен 4 символам английского текста. Чем больше токенов передаётся в модель, тем больше мы платим.

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

Итак, нам нужно быть аккуратными с нашим окном контекста, а для построения этого окна используются токены. Я задался вопросом: как инструменты справляются с этим ограничением? Насколько умно они его обрабатывают?

Читать далее

Два процесса, одна задача (КК, Глава 1)

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

В результате долгих попыток упихнуть методологию разработки в телеграм-посты и Твиттер, пришел к выводу, что это невозможно. Слишком много информации, которую невозможно разрезать на мелкие куски.

Первая глава книги про AI-разработку - по ссылке. Прошу любить и жаловать :-)

Мы поговорим о том, почему отношения с нейросетью в формате «начальник → подчинённый» и «человек → инструмент» работают крайне отстойно. Введем модель сопроцессоров. Посмотрим, как устроено разделение когнитивной нагрузки в связке человек-машина. Что может только человек, что может только AI, и есть ли где-то пересечение.

Интересно! Читать далее

С++ внутри PostgreSQL: удобство против традиций

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

Всем привет, меня зовут Илья Шишков, я пишу на С++ с 2006 года. Много лет я был разработчиком в больших C++-кодовых базах, но в 2024 году жизнь меня занесла в PostgreSQL. А именно в RnD-разработку СУБД Pangolin, это реляционная СУБД от СберТеха, PostgreSQL с нашими доработками под требования к усиленной безопасности, производительности и так далее. PostgreSQL, как известно, написан на чистом С. Так я поработал с этим языком несколько месяцев и… стал внедрять C++. 

В этой статье я расскажу, зачем так сделал и почему это оказалось очень удобно. Например, некоторые технологии из C++ есть в PostgreSQL, при том, что их нет в C. Разберу практические примеры, как мне кажется, хороших абстракций на C++, которые упрощают программирование на C. И немного времени уделю разбору цены, которую нам приходится платить, когда мы используем в коде различные абстракции.

Читать далее

Рекап для разработчика: как я собрал итоги года на основе GitHub и self-hosted LLM

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

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

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

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

Читать далее

Проектирование системы отложенных уведомлений со склейкой: от требований до продакшена

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

Всем привет! Меня зовут Евгений Федосеев, я инженер-программист в компании iSpring.

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

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

Читать далее

Нестандартные фичи Rust, которые вы полюбите

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

Привет, Хабр! В Rust есть тип, у которого нет ни одного возможного значения. Звучит необычно. Но я однажды столкнулся с этим самым никогда‑типом и понял — без него жить в Rust уже не хочется! Что это такое и зачем нужно — разберём подробно. По ходу дела упомянем и связанные фичи: Infallible, новоявленные макросы вроде matches!, разные фишки для оптимизации кода и FFI, про которые часто не догадываешься.

Читать далее

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

«Sandtrix»: как фильм вдохновил на переосмысление легенды

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

Думаю, что в каждом из нас живёт воспоминание о первой видеоигре, для кого-то это были «Герои 3», для кого-то — гонки на приставке из 90-х, а для миллионов людей по всему миру первой любовью стали падающие кирпичики, которые нужно было складывать в ровные ряды. Тетрис не требовал перевода, не нуждался в инструкции и не спрашивал, сколько тебе лет — он просто затягивал.

Недавно я посмотрел фильм «Тетрис» (2023) и поймал себя на мысли, что история создания — не менее увлекательна, чем сама игра. А ещё она вдохновила меня на идею, взять классическую механику и добавить в неё щепотку… песка.

Читать далее

Книга «Game++. Устройство и оптимизация игрового движка»

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

Привет, Хабр!

С радостью и чувством выполненного долга издательство «БХВ» представляет вам одну из флагманских новинок наступившего года. Мы получили из типографии книгу «Game++. Устройство и оптимизация игрового движка».

Как известно, высококлассные AAA-игры — это та территория, на которой сходятся проверенные и экспериментальные алгоритмы, высокая производительность, графика на уровне произведений искусства и проектирование распределённых систем. Главный язык программирования для аса в разработке игр — это C++.

Поскольку сложно объять необъятное, да и участие в разработке The Sims и Age of Empires смотрелось бы в резюме как опыт участия в гонках «Формулы-1», автор, самоотверженно поработав, создал фундаментальную книгу о наилучших практиках высокопроизводительного программирования как в элитном продакшне, так и на очень ограниченных ресурсах. Для автора игры — это полигон, на котором он набрал свой уникальный профессиональный опыт, а C++ — это инструмент, при помощи которого решается любая задача. Отдельно отметим, что в книге уделено внимание не только различным структурам данных и их реализациям, но и стандартной библиотеке шаблонов (STL); этот материал серьёзно повысит профессиональный уровень любого C++-разработчика.  

Далее - от автора, Сергея Кушниренко @dalerank.

Читать далее

Андрей Карпаты только что создал полноценный GPT на 240 строках Python

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

Никакого PyTorch. Никакого TensorFlow. Только чистый Python и базовая математика.

За время работы над докторской я перечитал множество реализаций трансформеров. Плотные кодовые базы. Тысячи файлов. Зависимости, нагроможденные на зависимости. Открываешь репозиторий, запускаешь pip install -r requirements.txt и смотришь, как скачиваются 400 пакетов, прежде чем ты вообще увидишь, как твоя модель тренируется (а потом ошибки, проблемы с версиями... и так далее).

А потом, 11 февраля 2026 года, Андрей Карпаты выложил один-единственный файл на Python, который обучает и запускает GPT с нуля. 240 строк. Ноль зависимостей.

Читать далее

Prompt injection для смелых духом: от zero-click атаки на 1.4B устройств до философского джейлбрейка

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

SQL-инъекцию мы лечили 20 лет и вылечили. Prompt injection — фундаментально нерешаема. Это не я придумал. OWASP ставит её на первое место второй год подряд. Найдена в 73% продакшн AI-систем при аудитах.

Вы не за статистикой сюда пришли. Вы пришли за мясом. Ниже — 10 кейсов, которые не попали в типичный пересказ про Chevrolet за доллар. Тут пострашнее.

Что происходит?

Охота за красным fps

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

Профилирование часто недооценивают как постоянный процесс, считая его чем вроде финальной фазы перед релизом, вроде полировки или поиска багов и в целом это, конечно, напоминает поиск багов, но это не просто поиск узких мест в коде и их фикс здесь и сейчас, а часто отдельная философия разработки, которая содержит несколько школ со своими принцЫпами, которые нормально так разнятся. И без глубокого понимания "как надо профилировать" невозможно создать игру, которая будет приемлемо работать на "картошке".

Начну я с фундаментального вопроса: что же такое игра с точки зрения программной инженерии? В целом игра -- это система мягкого реального времени, что означает, что все процессы, которые в ней происходят, начиная от игровых событий вроде нажатия кнопок игроком или появления врагов на экране, продолжая игровой логикой, которая определяет правила взаимодействия объектов и состояния игрового мира, физикой, столкновениями и заканчивая рендерингом, должны происходить в строго определенное время, и это ограничение является абсолютным и не подлежащим обсуждению, иначе мы получим "вязкий" игровой процесс.

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

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

Оптимизируй это...

Python mmap: Улучшенный I/O файлов с помощью отображения файлов в память

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

В Zen of Python есть много мудрых идей. Одна особенно полезная гласит: «Должен быть один — и желательно только один — очевидный способ сделать это». Тем не менее в Python существует несколько способов решить большинство задач. Например, есть разные способы чтения файла в Python, включая редко используемый модуль mmap.

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

Читать далее

Автоматическая модернизация кода на Go при помощи go fix

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

В релизе 1.26 языка Go, выпущенном в этом месяце, есть полностью переписанная подкоманда go fix. Go fix использует набор алгоритмов для обнаружения возможностей улучшения кода; часто для этого применяются более новые фичи языка или библиотеки. В этом посте мы сначала покажем, как использовать go fix для модернизации кодовой базы на Go. Во второй части статьи мы расскажем о лежащей в основе этой подкоманды инфраструктуре и её эволюции. В третьей части мы познакомим вас с тематикой инструментов анализа с «самообслуживанием», которые помогают мейнтейнерам модулей и организациям кодироовать собственные правила и рекомендации.

Читать далее