Обновить
1024K+

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

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

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

А чё, так можно было? Три недооценённых атрибута .NET

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

Три атрибута, которые меняют результат компиляции. Один запускает метод раньше Main. Второй передаёт текст выражения вместо результата. Третий ускоряет stackalloc в 50 раз.

Все три описаны в документации и применяются внутри .NET. А в рабочем коде я их ни разу не видел.

Читать далее

Новости

Вебхук ЮKassa принимал payment.succeeded на веру. Подделать оплату брони можно было одним curl

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

Разбираю находку из технического аудита сервиса аренды авто: вебхук /payments/webhook/yukassa помечал бронь оплаченной по одному полю из тела запроса, которое присылает клиент, а не банк. Файл аудита датирован 5 июля 2026, фикс смержен 8 июля — привожу код до и после, тесты и то, что мы сознательно не стали чинить в этом же PR.

Читать далее

Валидатор не нашёл поле is_admin, а Go его нашёл: пять ошибок при работе с JSON

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

Один и тот же JSON может привести систему к разным выводам. Валидатор пропустит поле, которое Go‑сервис спокойно прочитает, nil‑слайс превратится в неожиданный для клиента null, а ошибка в имени параметра останется незамеченной до самого продакшена.

Разбираем пять случаев, где поведение encoding/json в Go способно создать расхождение между компонентами системы, и смотрим, что меняет переход на encoding/json/v2.

Узнать детали

Выходит Java 27

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

🔥 Выходит Java 27!

• Compact Object Headers включаются по умолчанию. Метаданные каждого объекта становятся компактнее, что может уменьшить потребление heap примерно на 20% и снизить нагрузку на GC. Раньше для этого требовался флаг -XX:+UseCompactObjectHeaders.

• G1 становится сборщиком мусора по умолчанию во всех окружениях. Раньше JVM могла выбирать Serial GC на машинах и в контейнерах с небольшим количеством ресурсов. Поэтому после обновления стоит перепроверить память, паузы и CPU именно на маленьких инстансах.

• JFR начинает автоматически скрывать чувствительные данные. Пароли, токены, API-ключи и секреты в аргументах JVM, переменных окружения и системных свойствах больше не должны случайно попадать в запись Flight Recorder.

Читать далее

Куда уходят токены у кодинг-агента: разбираем счёт по полям usage

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

После недели работы с кодинг-агентом возникает вопрос: почему счёт растёт быстрее, чем объём написанного кода.

Разбираю по полям usage, куда именно уходят токены. Оказывается, типов не два, а пять: обычный ввод, запись в кэш, чтение из кэша, вывод и reasoning. Последний виден не всегда, а платите вы за него по цене вывода: в одном из примеров из 234 токенов ответа 230 оказались рассуждениями, а полезного текста — одно слово.

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

Читать далее

Мы измерили платный антидетект‑браузер: canvas совпадал с чистой машиной байт в байт. Потом сделали свой, открытый

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

Антидетект‑браузеры — инструмент, которым агентства ведут десятки рекламных кабинетов и аккаунтов маркетплейсов с одной машины: у каждого профиля свой отпечаток, свой прокси, свои cookies. Стоят они $30–150 в месяц на команду, и все до одного закрытые. В интерфейсе — зелёные галочки «canvas: защищён», «WebGL: защищён». Что на самом деле уходит сайту — не знает никто, включая, как выяснилось, пользователей.

Мы взяли один из популярных продуктов, поставили рядом с настоящим Chrome на одном Mac и сравнили ~250 значений отпечатка. Результат стал причиной написать свой. Ниже — методика, которую можно повторить на любом антидетекте за десять минут, что она показала, и как в итоге устроен Fury — открытый форк Chromium, где подмена делается в C++ у источника значения, а не инжектом JS.

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

Читать далее

Java 27: Новый день или Обзор JEP JDK 27

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

Уже завтра ожидается выход JDK 27, в которую вошли 9 JEP, связанных с криптографией, диагностическим механизмом JFR, управлением памятью и стандартной библиотекой. В этой статье разберём, что нас ждёт в этом релизе Java.

Читать далее

Декларативные макросы в Rust: полное руководство

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

Макросы - это механизм генерации кода во время компиляции. В отличие от макросов в C, где препроцессор работает исключительно на уровне текста, макросы Rust работают с токенами языка, а не с текстом программы. Процедурные макросы получают TokenStream и возвращают новый TokenStream, а декларативные сопоставляют поток токенов с заданными шаблонами. После раскрытия макросов полученный код компилируется так же, как если бы его написал программист вручную.

Читать далее

Перепеть песню и пересобрать код: почему это законно и что делать авторам в эпоху ИИ

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

В магазине играла «та самая» песня — но это была не она: та же композиция, переигранная заново и на два с половиной тона ниже. Авторское право защищает выражение, а не идею, — но пересборка не отменяет прав на само произведение. Разбираю, что это значит для авторов в эпоху ИИ.

Читать далее

Как я делаю ИИ‑память из переписки в Telegram: десятки тысяч сообщений, тысячи фактов, сотни людей

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

Ночью, около двух по московскому времени, сервер просыпается и запускает конвейер. Сначала сервис идёт в Telegram и скачивает новые сообщения из чатов, которые пользователь отметил галочками. Через час стартует второй воркер и превращает эти сообщения в память: режет на куски, гоняет через DeepSeek, раскладывает по таблицам, выгружает в markdown-файлы. К утру у человека появляются дополнительная информация в сервисе второй памяти.

Сервис второй памяти - это не просто история переписки. Через полгода можно спросить «какой бюджет мы тогда согласовали на поездку» и получить ответ со ссылкой на конкретное сообщение в конкретном чате.

Как ни странно, почти вся моя работа по созданию сервиса была не в работе с LLM.

А в чём?

Delta Lake 4.3: Выборочная замена данных и API‑интерфейсы каталога Unity Delta

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

Методы replaceUsing и replaceOn обеспечивают более удобный способ перезаписи, а каталог теперь проверяет каждую операцию, а не только фиксацию.

Выпуск Delta Lake 4.3 состоялся в июне 2026 года, и он основан на Apache Spark 4.1.0 и 4.0.1. Если прочитать примечания к выпуску от начала до конца, вы увидите длинный список изменений, охватывающих Delta Spark, ядро, UniForm, Sharing и Flink, который легко принять за релиз с исправлениями, дополненный описанием каталога обновлений.

Два момента заслуживают вашего внимания, и они находятся на противоположных концах стека. Первый — небольшой и сразу полезный: replaceUsingнаконец replaceOn-то API DataFrame получает возможность выборочной перезаписи, которая не является replaceWhere. Второй — структурный: теперь каждая операция с таблицей, управляемой каталогом, проходит через API Unity Catalog Delta , а не только фиксация изменений. В Delta 4.2 фиксации изменений были скоординированы с каталогом. В Delta 4.3 остальная часть интерфейса, загрузка таблиц, CREATECTASREPLACE, и запись метаданных, объединены в один проверенный путь.

В этой статье рассматривается версия 4.3 с точки зрения разработчика конвейера: какие изменения в коде вы вносите, какие изменения происходят под вашим контролем и что следует проверить перед обновлением. Приводятся примеры testing.defaultдля каталога и схемы, а также пример компании CH Enterprise. Ссылки на исходный код находятся внизу.

Читать далее

Что такое RFC, зачем он нужен и как его писать #1

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

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

Читать далее

Плагин Profiling Tools для исследования Java‑приложения в OpenIDE

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

Иногда Java-приложение ведёт себя странно: потребляет больше памяти, чем ожидалось, тормозит без видимой причины или будто «ничего не делает», хотя запросы всё равно обрабатываются медленно. В такие моменты хочется быстро посмотреть «внутрь» Java-приложения, например, сколько памяти оно потребляет, какие потоки в нём запущены и что с ними происходит.

Первое, что приходит в голову, это VisualVM или JDK Mission Control. Однако во время разработки приложения удобнее не переключаться между инструментами, а открыть состояние процесса прямо в IDE.

Для этого мы в OpenIDE выпустили Profiling Tools — плагин для мониторинга и исследования Java-приложений. Его разработкой занималась команда Axiom JDK.

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

Читать далее

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

Я дал LLM память, root‑доступ и деньги. Получился ли «свободный ИИ»?

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

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

Читать далее

Рендеринг Angular‑приложения в Minecraft

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

Что потребуется, чтобы Angular-приложение отображалось в Minecraft и реагировало на действия игрока? Разбор собственной платформы и Renderer2, расчёта layout через Yoga, отрисовки текста и изображений блоками. В результате получается интерактивный прогноз погоды, которым можно управлять прямо из игрового мира.

Читать далее

Решаем задачу по реверс-инжинирингу от Jane Street

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

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

Для общего представления рекомендую почитать ознакомительную статью из блога Jane Street «Can you reverse Engineer an ASIC?»

И если у вас вдруг возникнет желание изучить тот «ужасный» код, который я использовал для решения, то он лежит в моём репозитории GitHub.

Читать далее

Я просил ход, который сделал бы человек. Stockfish ответил правильным

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

С лета у меня в браузере рядом с доской работает локальный Stockfish и подсказывает стрелкой на лучшем ходу. Люди, которые начали пользоваться, выразили одну претензию: ход верный, но ход непонятный. Я бы так никогда не сыграл — покажи, что сыграл бы я.

Читать далее

Как я автоматизировал почти всю работу в CRM

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

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

Я хотел автоматизировать почти всё.

Читать далее

Микрокод внутри сопроцессора Intel 8087: обмен регистрами

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

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

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

Разобрать 8087

Один ИИ кодит, второй командует: как устроен Devin Fusion

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

11 сентября Cognition объявила о доступности Fusion в Devin Desktop и CLI. Ранее система работала в облачном Devin. Теперь связку из ведущей модели и исполнителя можно использовать в десктоп приложении и терминале. Компания рекомендует сочетание Claude Fable 5.1 и SWE-2.

Напомню, что Devin – это такой инструмент, в котором ему можно поручить задачи, связанные с изучением проекта, изменением кода и проверками. А Fusion же в свою очередь организует совместную работу двух моделей. Одна, например, составляет план и принимает результат, другая занимается реализацией. Это как в обычной команде разработки, только без дейликов.

Читать далее