Обновить
1024K+

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

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

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

После Тьюринга: может ли машина программировать?

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

Может ли машина программировать — или она лишь продолжает намерение человека? Споры о вайбкодинге часто застревают между восторгом от скорости и страхом потерять контроль. Но практический вопрос точнее: при каких условиях созданной с участием ИИ программе можно доверять?

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

Читать далее

Паравиртуализация при отладке графических приложений KasperskyOS в QEMU

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

Привет! Меня зовут Денис Молодяков, я — тимлид команды графики в KasperskyOS. Мы отвечаем за разработку графического стека полного цикла для микроядерной ОС: от создания низкоуровневых графических драйверов до всего необходимого для фреймворков.

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

Читать далее

Почему нейросети съедают токены: что происходит с длинными чатами и как снизить расход

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

Один пользователь Claude утверждает, что прогнал через модель больше миллиарда входных токенов. Другой оставил AI-агента без присмотра и насчитал около $6000 расходов. Цифры из Reddit можно оспаривать, но механизм за ними вполне реальный.

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

А заодно собрал несколько способов снизить расход токенов без бессмысленной охоты за каждым словом в промпте.

Разобраться с токенами

ИИ-ревьюверы твоего кода: как нейросети позволяют упрощать анализ PR

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

С развитием ИИ себестоимость кода стремительно падает. Его становится все больше, а команды не растут пропорционально количеству. AI-инструменты генерации кода (Copilot, Cursor, Codex, Claude Code) увеличивают скорость написания, но не скорость проверки кода.

Узким горлышком становится сам PR, они могут висеть днями в вашей компании или opensource-проекте, контекст может теряться, на его оценку тратится время, и иногда впустую.

В среднем, команда на ревью тратит ~20% рабочего времени, особенно если это большой PR, или PR от новичка.

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

В этой статье я расскажу о том, как помочь вашему корпоративному или опенсорс-проекту, если он тонет в код-ревью, и расскажу о существующих решениях — devin ai, context7, deepwiki, rabbit code review и других.

Читать далее

RGB‑значения нужно нормализовать делением на 255 или на 256?

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

Допустим, вы пишете программу для обработки изображений. Программа получает изображение, преобразует его в значения с плавающей запятой, выполняет обработку и сохраняет изменённые пиксели на диск в виде 8-битных цветов. Сегодня я хочу рассмотреть вопрос преобразования целых значений в значения с плавающей запятой. Существует два решения, которые на Python и NumPy выглядят так:

Стандартное деление на 255

pixels = img / 255.0
result = process(pixels)
output = np.trunc(result * 255 + 0.5)

Альтернативное деление на 256

pixels = (img + 0.5) / 256.0
result = process(pixels)
output = np.trunc(result * 256)

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

# Ограничение и преобразование в 8 бит
output_8bit = output.clip(0, 255).astype(np.uint8)

В стандартном случае целочисленный 0 соответствует 0.0, а 255 соответствует 1.0. Это работает абсолютно нормально и именно так всё реализовано в GPU. В альтернативном случае прибавляется смещение на 0,5 и деление происходит на 256, поэтому целочисленный 0 соответствует 0.5/256=0.001953125. Это неудобно, потому что код обработки изображений, например, без знания константы не сможет обнаруживать чёрные пиксели. Из‑за этого мы привязываем логику к 8-битным значениям, даже если вычисления выполняются с плавающей запятой. В стандартном решении всегда можно предполагать, что чёрный соответствует 0.0.

Однако некоторых программистов всё равно притягивает альтернативное решение. В чём дело? Чем оно им так нравится?

Читать далее

Серьёзные проблемы разработки с помощью AI, о которых никто не говорит

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

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

За последние несколько лет мы уже много раз наблюдали массовые психозы: блокчейн, NFT, ковид - вот только некоторые из них. Те из нас, кто ещё сохранил память о том, как это было, чувствуют, что современное наваждение ИИ - точно такой же массовый психоз. Конечно, под каждым психозом лежит что-то реальное: блокчейн - действительно полезная и нашедшее своё применение технология, NFT - теоретически интересная технология на основе блокчейна, во время ковида люди действительно болели и умирали. Реальная основа в каждом случае была, но ей уделялось фанатично непропорциональное внимание, у людей просто сносило крышу. В средневековой христианской литературе такие массовые истерии обычно описывались как одержимость демонами: люди теряют контроль над собой, фиксируют своё сознание на одной идее, ведут себя как зомби, а когда всё заканчивается, ничего не помнят. Рассказам тех, кто помнит, как всё было, и напоминает про это, не то чтобы не верят - скорее воспринимают их как истории из какой-то другой реальности. Но я помню.

Читать далее

/party — скилл для общения между агентскими сессиями: Claude, Cursor, Codex, Grok, и т.д

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

У меня открыто несколько агентских сессий сразу: Claude Code в одном окне, Cursor в другом, иногда ещё одна на второй машине. Пока они не пересекаются, всё хорошо. Как только одна из них меняет то, на что опирается вторая, начинается кутерьма: копирую вопрос из окна в окно, объясняю второй сессии, что имела в виду первая, несу ответ обратно.

Так появился agents-party: общий канал, в который агентские сессии заходят сами. Скилл-файл плюс CLI, лицензия MIT. Вызывается просто по команде “/party”, которая выводит текс приглашение для других сессий. Текст приглашение рассылается по сессиями и они общаются между собой, не блокируя ваш ввод в те же сессии.

Видео-обзор на YouTube: https://www.youtube.com/watch?v=4IT0oFwGtP4 Видео-обзор на VK Video: https://vkvideo.ru/video-227165132_456239214 Исходный код: https://github.com/1gr14/agents-party

Под катом рассказываю, как этим пользоваться и как устроено под капотом.

Читать далее

Как мы заменили Oracle WebLogic в банке из топ-3: опыт внедрения единой платформы управления Java‑приложениями

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

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

Я Сергей Рощупкин, занимаюсь развитием платформы управления серверами приложений Digital Q.AppServer в «Диасофт». В статье разберу реальный кейс миграции с Oracle WebLogic в крупном банке, покажу, как устроена платформа и где в ней работают ИИ‑агенты, а в конце — практические советы инженерам, которые мы сформулировали по итогам проектов.

Читать далее

Стек отвечает «где упало», а вопрос был «что случилось»

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

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

Читать далее

Что консоли подарили разработчикам

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

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

Я пройдусь в статье по основным моментам и что они дали разработчику такого, что осталось в фундаменте разработки игр. Иногда подарок технический, вроде Mode 7 или PCM-звука, иногда больше инфраструктурный, принесший лицензирование или достижения, а иногда просто сменивший модель мышления разработчика, отдельной компании или вообще всей индустрии. Как обычно в нашем болоте, каждый подарок обычно приходил с подводными камнями, и про них я тоже постараюсь рассказать, потому что за все приходится платить, а игрострой любит сначала придумать, а потом превозмогать.

Читать далее

RSS вырос до 3 ГБ, а tracemalloc показывает 180 МБ: как найти остальные 2,8

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

RSS растёт к лимиту контейнера, tracemalloc показывает прежние 180 МБ, а gc.collect() ничего не меняет. Разберём, как в такой ситуации отделить утечку Python-объектов от нативных аллокаций и удержания памяти системным аллокатором — и понять, где именно искать причину до OOMKilled.

Разобраться с памятью

Пятнадцать месяцев финтеха агентами: кривая качества по всей истории проекта

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

У меня 12 лет опыта в Go. И я больше не имею права назвать себя программистом: мой код не пройдёт ту планку качества, которую я выставил для своих агентов. Хотя честнее так: они сами её выставили, я лишь ставил цели.

Заявление громкое, но у меня есть график. Красная пунктирная линия на нём: уровень моего лучшего рукописного кода. Синяя кривая: код, который пишут агенты. В апреле 2026 кривая ушла под красную линию и продолжает падать.

Читать далее

Платформа — не самоцель: когда ML-разработку стоит унифицировать, а когда лучше остановиться, обсудили на «ИТ-Пикнике»

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

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

На «ИТ-Пикнике» Сергей Кузнецов, руководитель разработки платформы рекомендаций и поиска MWS, показал на трех кейсах, почему в одних случаях лучше работать с полноценной ML-платформа, а в других — выгоднее остановиться на уровне библиотеки.

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

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

Костыль на костыле: как я больше двадцати лет лечил остатки вместо того, чтобы найти причину

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

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

Я сделал его в 2002 году, выбрал хранить, и получил вместе со скоростью проблему на двадцать лет вперёд.

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

Причина оказалась не в триггерах и не в производительности. Она в том, что одно бизнес‑правило было записано в коде шесть раз в разных местах, а в седьмом его забыли написать.

Читать далее

2160 раундов симуляции без кнопки «стоп». Исследование MiroFish, часть 3

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

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

Читать далее

Добавили потоков, стало медленнее: разбираемся с ложным разделением кеш‑линии

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

Добавили потоков, а программа стала медленнее? Причина может скрываться в ложном разделении кеш‑линий: потоки работают с разными переменными, но процессор всё равно заставляет ядра конкурировать за один участок памяти.

Разберём, как воспроизвести такую просадку, найти её через perf c2c и исправить без лишнего раздувания структур.

Читать далее

С 14 августа Claude Code стартует в авторежиме: что лежит в его рулбуке

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

С 14 августа Claude Code будет запускать новые сессии на Pro, Max и Team в auto mode: вместо диалога «разрешить/запретить» каждую команду оценивает отдельный классификатор. Коротко о том, что печатает команда claude auto-mode defaults (60 149 символов правил, 65 запретов, тринадцать из двадцати полей окружения пустые), какие ваши правила прав продолжают работать поверх классификатора, что на самом деле стоит за цифрой 13,6% из пересказов и был ли у этой фичи откат в прошлых версиях.

Читать дальше →

Написал расширение, которое качает статьи Хабра в Markdown — и не долбит сервер

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

В прошлых двух статьях я разбирал DNS-трафик домашней сети и анализировал 1233 публикации Хабра, чтобы понять, за что площадка даёт рейтинг. И там, и там был вопрос, который я обходил: чем, собственно, я выгрузил эту тысячу статей?

Не руками копировал и не скриптом на Python, который на двухсотом запросе получил бы 429 и бан по IP. Я написал расширение для Chrome, которое сохраняет статьи Хабра в Markdown — по одной, пакетом или автоматически по расписанию, — и делает это достаточно вежливо, чтобы сервер не считал его атакой.

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

— держит принудительный интервал между запросами (1.5 секунды, гарантированно); — слушает 429 и при перегрузке сервера замолкает на три минуты целиком (паттерн circuit breaker), а не долбит сквозь ограничение; — работает с открытыми статьями для личного архива, а не сливает базу.

Внутри: разбор вежливого граббера с кодом, почему парсинг чужой вёрстки ломается на каждом редизайне и как от этого защищаться фолбэками, формат Markdown с YAML-метаданными (тот самый, что сделал возможным анализ тысячи статей) и правовая рамка — где граница между «сохранил для себя» и «спарсил».

Расширение с открытым кодом под MIT, ставится из Chrome Web Store в один клик.

Читать далее

Битрикс24 + Python: шесть функций, после которых REST становится проще

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

REST Битрикс24 можно удобно использовать из Python — для интеграций, миграций, аналитики и служебных скриптов. 

Разбираем библиотеку a24wh: шесть функций, которые упрощают запросы, пагинацию, batch-вызовы и обработку ошибок.

Читать далее

Rust прячет инструменты там, где вы их не ищете. Часть 3

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

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

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

Со стандартной библиотекой Rust так постоянно. Она большая, и половину её мы не используем не потому, что она плохая, а потому, что просто про неё не знаем — и пишем руками то, что давно лежит готовым. В первой части уже разбирали такие штуки: never-тип !, matches!, black_box, прозрачные обёртки repr(transparent) и transmute_copy. Подготовил для вас ещё девять.

Читать далее