Latest posts

Код и Капуста
22 Sept, 08:20
Реверс самоката#rustАвтор занимается реверс-инжинирингом своего электросамоката.Через Bluetooth-приложение и осциллограф он обнаруживает скрытую шину CAN на разъеме USB-C дисплея, снимает ее трафик с помощью самодельного логгера на ESP32 и расшифровывает сообщения, управляющие мотором, режимами езды и фарами, а также выясняет, что самокат тайно отправляет производителю телеметрию (пробег, историю зарядок и т.д.).Он разбирает контроллер и дисплей, через SWD-порт дампит прошивки, анализирует их в Ghidra и заливает собственный код на Rust на самокатПолучается, переписал самокат на Rust?https://kodikapusta.ru/news/1214-revers-samokataПоддержать проект на boosty и читать в MAX


Код и Капуста
21 Sept, 15:01
А такая шутка раньше была


Код и Капуста
21 Sept, 08:20
Связанные списки#learnСтатья объясняет, что такое интрузивные связные списки - вариант списков, в котором узлы связи встроены прямо в связываемую структуру, а не выделяются отдельно, поэтому для доступа к содержащему объекту используется арифметика указателей: адрес узла минус смещение поля.По сравнению с обычными списками это дает два преимущества: вдвое меньше аллокаций памяти (не нужен отдельный узел списка) и меньше промахов кэша, так как при обходе разыменовывается только следующий узел, а не узел плюс данныеhttps://kodikapusta.ru/news/1211-sviazannye-spiskiПоддержать проект на boosty и читать в MAX


Код и Капуста
14 Sept, 08:20
Шейдеры на ebiten#gamedev #golangПрактический разбор пиксельных шейдеров в игровом движке Ebitengine для Go, где шейдеры пишутся на языке Kage, который транслируется в GLSL/HLSL.Автор на примерах из своих игр Roboden и Decipherism показывает пять типичных задач. Наложение маски урона для зданий, эффект "дрожащих" пикселей для рукописного шрифта, ретро-CRT-эффект терминала с глитчами, зацикленную анимацию текстур и эффект постройки здания.Дополнительно автор объясняет основы Kage. Рассказывает про функцию Fragment(), работу с текселями и пикселями, uniform-параметры, встроенные функции вроде imageSrc0At() и подключение шейдера через DrawRectShader() вместо DrawImage()Ну красиво жеhttps://kodikapusta.ru/news/1213-sheidery-na-ebitenПоддержать проект на boosty и читать в MAX


Код и Капуста
13 Sept, 07:45
И с 256 днем в году


Код и Капуста
12 Sept, 09:20
QCRACK.EXE#funКак раз закончил перечитывать книгу "Повелители DOOM" а тут интересная статья про id SoftwareВ 1996 году id Software выпустила шареваре версию Quake на CD-ROM за $9.95. Но на самом деле на этом диске бесплатная игра занимала лишь 22 МБ, тут же лежали зашифрованные версии всего своего каталога, которые можно было разблокировать по телефону - позвонив по номеру 800, назвав код CHALLENGE и получив серийник.Идея казалась надежной как швейцарские часы. Но через 39 дней хакерская группа GNOMON выпустила QCRACK.EXE, который генерировал серийник автоматически. Оказалось, что серийный номер не содержал никакого секрета, а программа FLOW.EXE на самом CD умела вычислять его сама и просто сверяла с введенным пользователем.Это было провальное издание - почти 150 000 дисков застряли на складах.Кстати, автор статьи - Fabien Sanglard. Это оч крутой чувак и в его блоге много


Код и Капуста
11 Sept, 08:20
Как построить Diffusion Language Model#aiЭто, по сути, введение в диффузионные языковые модели, альтернативу авторегрессивным LLM, которые генерируют текст по токену слева направо. Вместо этого диффузия создает сразу всю последовательность и итеративно "денойзит" ее. Такой подход дает исправление ошибок, возможность менять скорость за счет числа шагов и двунаправленный контекстСтатья разбирает строительные блоки современных моделей - блочную диффузию для переменной длины, энкодер-декодер архитектуру, ремаскинг для исправления ошибок, дистилляцию для ускорения, контролируемую генерацию и постобучение.Автор описывает реальные модели вроде Mercury 2, Gemma Diffusion, Nemotron Diffusionhttps://kodikapusta.ru/news/1210-kak-postroit-diffusion-language-modelПоддержать проект на boosty и читать в MAX


Код и Капуста
10 Sept, 08:20
Портирование на Godot с помощью LLM#gamedev #godotАвтор описывает, как портировал свою игру Babylonian Twins 1993 года, написанную на 68000 ассемблере для Amiga 500, под Godot с помощью LLM. Использовал Claude Fable 5LLM сумел не только перенести его собственный C++-движок года в Godot за один вечер, но и разобрать оригинальные 72 758 строк ассемблера без комментариев: собрать их заново до байтовой идентичности с выпущенными бинарниками, восстановить все форматы данных и даже запустить его же редактор карт 1993 года в эмуляторе.Конечно, без ошибок не обошлось. Например, "охрана" поражала игрока через сплошную скалу из-за неправильных проверок, а двери оказались нарисованными кодом в рантайме, а не зашитыми в карту. Автор подчеркивает, что LLM сам делал всю техническую работу, а он лишь тестировал и принимал решенияhttps://kodikapusta.ru/news/1209-portirovanie-na-godot-s-pomoshc


Код и Капуста
9 Sept, 08:20
Агенты лучше нас#aiАвтор утверждает, что оптимизация производительности перестала быть дорогой специализациейLLM-агенты настолько удешевили сложную работу, что ее может делать любой, кто способен набрать несколько предложений. Он приводит примеры: свой regex-движок FRE, который агент за пару минут ускорил под реальные запросы и игровой ИИ для Azul, который стал сильнейшим в мире при сравнительно небольших затратахОн считает, что будущее за "динамическим кастомным софтом", подогнанным под конкретную рабочую нагрузкуhttps://kodikapusta.ru/news/1207-agenty-luchshe-nasПоддержать проект на boosty и читать в MAX


Код и Капуста
8 Sept, 08:20
Прокси для базы данных#golangАвтор пишет простой такой прокси на Go в учебных целях вдохновившись статьей Figma о том, как их команда баз данных построила DBProxy для перехвата SQL-запросов и маршрутизации их по разным узлам Postgres.Он реализует проксирование TCP-соединений между клиентом и MySQL: перехватывает пакеты, находит команду COM_QUERY по структуре пакета MySQL и переписывает имя таблицы. В статье объясняется структура MySQL-пакета и демонстрируются базовые принципы, на которых строятся настоящие решения для шардинга, валидации запросов, безопасности и наблюдаемостиhttps://kodikapusta.ru/news/1208-proksi-dlia-bazy-dannykhПоддержать проект на boosty и читать в MAX


Код и Капуста
7 Sept, 08:20
У нас отмена!#golangСтатья разбирает, как пакет singleflight в Go предотвращает лавину запросов к кэшу. Он прекрасно схлопывает одинаковые запросы в одну операцию, но есть нюансыАвтор на примере IsleDB показывает "ловушку контекста первого вызывающего": если фетч использует контекст лидера, тот может отменить операцию для всех, а если контекст отсоединен, то хрен сделаешь грейсфул шатдаун. В итоге автор строит собственный протокол конкурентности с тремя гарантиями - каждый вызывающий может независимо прекратить ожидание, общая операция отменяется при уходе последнего ждущего, а гатдаун отклоняет новые вызовы, отменяет активную работу и ждет остановки всех воркеровhttps://kodikapusta.ru/news/1197-u-nas-otmenaПоддержать проект на boosty и читать в MAX


Код и Капуста
6 Sept, 09:20
Офис на заднем дворе#funЧувак делится опытом постройки офиса на заднем дворе. Проект обошёлся примерно в $19 478, что вдвое-втрое дешевле готового решения или найма строительной компании.Автор рекомендует ставить больше розеток, чем кажется необходимым, тщательно продумывать ориентацию и расположение окон, а также следить за уровнем CO₂ в герметичном помещении.У меня будет такой же офисhttps://kodikapusta.ru/news/1205-ofis-na-zadnem-dvoreПоддержать проект на boosty и читать в MAX


Код и Капуста
5 Sept, 11:10
учите С - https://www.youtube.com/watch?v=vhgI_F-WMwAYouTubeHarvard Professor On Why You Should Learn C in 2026 | David MalanThis is a clip from a longer conversation with David Malan who is a Harvard professor known for turning CS50 into a popular online computer science course. We discussed the story behind CS50, how to lecture well, and how AI is changing CS education including…
Код и Капуста
5 Sept, 09:20
DDD во времена AI#golang #aiСтатья утверждает, что с ростом AI-кодинга идеи Domain-Driven Design становятся еще актуальнееDDD никогда не был строго про код - главная сложность всегда заключалась в понимании предметной области и ее моделировании. Автор подчеркивает, что доменная модель - это не артефакт. Даже если ИИ-агент сгенерирует внушительный документ или план, это не поможет команде понять бизнес-задачу, а ценность knowledge crunching в том, чтобы самому разобраться в домене и уметь судить, осмысленен ли результат агента. Полностью пожжерживаю автора в этомОн советует проектировать решение командой до написания кода, использовать ограниченные контексты для точных имен и точных промптов, а не делегировать мышление ИИ. Иначе некому будет оценить корректность результата.Даже если весь код пишет ИИ, инженеру нужно глубоко знать домен, чтобы направлять агента, как напарника.


Код и Капуста
4 Sept, 14:20
TUIOS#golang #funСовременный терминальный мультиплексор и оконный менеджер, написанный на Go, с vim-подобным модальным интерфейсом, несколькими панелями, 9 воркспейсами, BSP-тайлингом, поддержкой kitty graphics protocol и командной палитрой - все внутри существующего терминала. Построен на Charm-стекеНу это прикольноhttps://kodikapusta.ru/tools/55-tuiosПоддержать проект на boosty и читать в MAX


Код и Капуста
4 Sept, 10:20
Введение в Racket#langНового языка на сегодня нет, но есть интересный вариант лиспа - Racket. К лиспам я вобще с трепетом отношусь, но никак не хватает времени со всем разобратьсяЭто дружелюбное введение в язык Racket для начинающих. Статья кратко излагает историю: от Лиспа 1958 года и Джона Маккарти через Scheme 1975 к Racket 2010. Автор отмечает, что многие "современные" идеи - сборка мусора, функции первого класса, REPL, условные выражения гомоиконность - родились именно в Лиспе.Racket - "язык для создания языков", где синтаксис принадлежит программистуhttps://kodikapusta.ru/news/1206-vvedenie-v-racketПоддержать проект на boosty и читать в MAX


Код и Капуста
4 Sept, 08:20
Оптимизация DNS-кэша#rust #netРебята из Cloudflare рассказывают, как пять последовательных оптимизаций раскладки DNS-кэша Big Pineapple сократили потребление памяти на запись на 56% - с 953 до 420 байт. Освободили около 100 терабайт ОЗУ по всем машинам, а также ускорили кэш.Они сделали замену Vec/String на Box<[T]>/Box<str>, объединенили три списка секций ответа в один с 2-байтовыми смещениями вместо указателей, отказались от хранения owner-имени записи, когда оно совпадает с запрошенным доменом, упаковали маленькие варианты enum RecordData inline с боксом крупных, и наконец реализовали хранение данных записей в сыром wire-формате единым Box<[u8]>При масштабе в 250+ миллиардов записей экономия даже одного байта на запись дает гигабайты памяти, и круто что экономию памяти удалось совместить с ростом производительностиhttps://kodikapusta.ru/news/1204-optimizatsiia-dns-keshaПодд


Код и Капуста
3 Sept, 14:20
resterm#golang #toolsТерминальный API-клиент и "workbench" для REST, GraphQL, gRPC, WebSocket и SSE, построенный вокруг простых файлов .http/.rest, которые можно diff'ить и хранить в git.В отличие от Postman, автоматизация живёт прямо в файлах запросов через директивы, плюс собственный язык выражений RestermScript с хуками на JavaScript. Есть встроенная авторизация, SSH-туннели и Kubernetes port-forward, мок-серверы с правилами сопоставления и верификацией вызовов, трейсинг/таймлайн с экспортом в OpenTelemetry, профилирование и сравнение прогонов, импорт OpenAPI и curl-команд. Все локально, без облака и телеметрии, и с явной позицией "никакой интеграции ИИ"https://kodikapusta.ru/tools/54-restermПоддержать проект на boosty и читать в MAX


Код и Капуста
3 Sept, 10:20
Конкурентный сервер на Go#golang #learnЭто восьмая часть серии о конкурентных сетевых серверах, в этот раз посвященная Go. В прошлый раз было про RustАвтор показывает, как язык решает описанные ранее задачи. Статья начинается с последовательного сервера с state machine, затем показывает конкурентную версию с одной горутиной на клиента.Для ограничения параллелизма предлагаются счетный семафор на канале и паттерн воркер пул, когда нужно сохранять состояние между задачами.Логично, что в Go почти никогда не нужно прибегать к async/event-driven программированию, потому что конкурентность встроена в язык и рантайм. Но интересно смотреть в сравнении с другими языкамиhttps://kodikapusta.ru/news/1203-konkurentnyi-server-na-goПоддержать проект на boosty и читать в MAX


Код и Капуста
3 Sept, 08:20
Горутины повсюду#golangЧастенько мы пишем Go-сервисы, не задумываясь о том, кто и как запускает наши горутины. Возникает феномен "случайного рантайма приложения": когда Go-сервис обрастает множеством долгоживущих горутин, их время жизни и связи оказываются неявно размазанными по коду инициализации. Это становится особенно очевидным, когда нужно реализовать graceful shutdown.Автор на примере сервиса для 3D-принт-фермы показывает, как выделить конкурентные компоненты в явные модули с помощью небольшой библиотеки backplane. Каждый модуль - это обычная функция вида func(ctx context.Context, deps ...interface{}) error, где каналы задают потоки сообщений, а всё остальное - ресурсы.Когда в приложении появляется несколько долгоживущих конкурентных компонентов, их архитектура заслуживает явного представления в коде, а не существования лишь в виде побочных эффектов при запускеhttps://kod

Related Channels
Other channels in the same section of the catalogue.
