Код и Капуста


Гео и язык канала: Россия, Русский
Категория: Технологии


Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/
Поддержать проект на boosty https://boosty.to/kodikapusta

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика

Как экономить 100 TB оперативы

#rust

Cloudflare обнаружил, что их сервис балансировки нагрузки Pingora Backend Router использует 6+ GB RAM на хранение хешей для консистентного хеширования

Инженеры применили два улучшения: заменили 32-битный индекс сервера на 16-битный, упаковав структуру в 6 байт вместо 8, и, проанализировав статистическую формулу коэффициента вариации, выяснили, что 90% хешей можно убрать без потери точности распределения нагрузки.

В итоге высвободили 100 TB оперативной памяти по всей глобальной сети. Ашалеть

https://kodikapusta.ru/news/1225-kak-ekonomit-100-tb-operativy

Поддержать проект на boosty: https://boosty.to/kodikapust


Одна вставка руинит все

#db #pg

Разбор write amplification в PostgreSQL.

Одна вставка строки в 40 байт на таблице с тремя индексами порождает 4 WAL-записи и ~345 байт лога - коэффициент амплификации ~8-10x.

Автор показывает SQL-скрипт для замера реальной амплификации на своей БД и предлагает четыре способа снижения: пакетная вставка через COPY, удаление неиспользуемых индексов, wal_compression и увеличение checkpoint_timeout

https://kodikapusta.ru/news/1224-odna-vstavka-ruinit-vse

Поддержать проект на boosty: https://boosty.to/kodikapust


Valen

#lang

Новый язык программирования - Valen!

Обещают бесшовную интероперабельность с Rust. Они там такого намудоиил чтобы обойти отсутствие дженериков в C ABI, капец. Valen использует rustc как библиотеку и патчит его, добавляя колбэки для совместной мономорфизации — Rust и Valen обмениваются информацией о том, какие generic-функции нужно инстанцировать

https://kodikapusta.ru/news/1220-valen

Поддержать проект на boosty: https://boosty.to/kodikapust


Шторм ретраев

#tech

Инженеры Uber рассказывают, как они защитили свой сервис меш от ретрай-штормов — лавинообразного размножения запросов при сбоях.

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

Во время реального крупного сбоя в ноябре 2025 года система заблокировала 9,5 млн лишних запросов, сократив максимальный радиус ретрай-шторма

https://kodikapusta.ru/news/1223-shtorm-retraev

Поддержать проект на boosty: https://boosty.to/kodikapust


БД на Zig

#zig

Автор рассказвает как они переписали свою поисковую БД с Go на Zig. Zig дал портативность, полный контроль над памятью без GC и CGO, и, главное, std.Io, который позволяет передать пакету симулированное окружение и прогонять VOPR-тестирование (сбои диска, сети, времени) в каждом модуле с первого дня. Новая версия получила собственные LSM, B+tree, Raft и HTTP/3.

Говорят. что производительность, недостижимая на Go

https://kodikapusta.ru/news/1222-bd-na-zig

Поддержать проект на boosty: https://boosty.to/kodikapust


zedis

#rust

Нативный Redis GUI, написанный на Rust с использованием GPUI. Тот же движок рендеринга, что у Zed Editor.

В отличие от Electron-клиентов, он работает при 60+ FPS даже с миллионами ключей, потребляя минимум памяти. Поддерживает автоматическую расшифровку JSON, Protobuf, MessagePack, JWT и других форматов, работу с TLS/SSH, Cluster/Sentinel, Redis и Valkey, встроенный мониторинг, AI-ассистента и веб-версию через Docker

https://kodikapusta.ru/news/1221-zedis

Поддержать проект на boosty: https://boosty.to/kodikapust


C на Go

#golang

Интересный пропозал - добавить возможность сборки Go-пакетов, использующих cgo для взаимодействия с C-библиотеками, без установленного C-тулчейна

Предлагается описывать C-интерфейс на языке Go с помощью аннотаций //cgo:binding, а cmd/cgo будет генерировать прослойку на Go и ассемблере, обрабатывая C ABI самостоятельно. Это избавит конечных пользователей от необходимости ставить C-компилятор, упростит кросскомпиляцию, а пакетам нужно будет лишь один раз сгенерировать или написать binding-файл

Но! Пока непонятно как обеспечить синхронизацию binding-файлов с C-кодом и как поступить с пакетом runtime/cgo, который пока содержит C-код

https://kodikapusta.ru/news/1219-c-na-go

Поддержать проект на boosty: https://boosty.to/kodikapust


Робоутка

#rust

Microduck от Pollen Robotics - это открытый репозиторий "мозга" крошечного двуногого робота-утенка, который ходит, катается на колесах, ходит, поднимает предметы, встает после падения и крякает, используя обучение с подкреплением. Все работает на одноплатном компьютере Rockchip RK3566 и на Rust

https://kodikapusta.ru/news/1217-roboutka

Поддержать проект на boosty: https://boosty.to/kodikapust


Rune

#golang

Команда Unstable Build заопенсорсила свою нативную IDE Rune, написанную на Go.

Под капотом - GPU-ускорение, собственный терминал, REPL и расширяемое ядро, которое общается с расширениями по gRPC. Поддерживается, конечно, Go, а еще Rust и Zig.

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

Возможно, я даже попробую слезть с VS Code и наконец-то начать пользоваться хоткеями

А как она шикарно запускается!

https://kodikapusta.ru/news/1216-rune

Поддержать проект на boosty: https://boosty.to/kodikapusta


Специализированные аллокаторы

#golang

В Go 1.27 появилась оптимизация выделения памяти для объектов размером до 80 байт. Аллокации ускоряются на 20–30%, а приложения с интенсивным выделением памяти - до 1%.

Идея в том, что рантайм генерирует специализированные версии функции mallocgc для каждого span-класса, что позволяет компилятору не вычислять класс во время выполнения.

Наибольший выигрыш получают самые частые размеры - 16 и 24 байта. Например это интерфейсы, строки из двух слов и слайсы из трех

https://kodikapusta.ru/news/1215-spetsializirovannye-allokatory

Поддержать проект на boosty: https://boosty.to/kodikapusta


Реверс самоката

#rust

Автор занимается реверс-инжинирингом своего электросамоката.

Через Bluetooth-приложение и осциллограф он обнаруживает скрытую шину CAN на разъеме USB-C дисплея, снимает ее трафик с помощью самодельного логгера на ESP32 и расшифровывает сообщения, управляющие мотором, режимами езды и фарами, а также выясняет, что самокат тайно отправляет производителю телеметрию (пробег, историю зарядок и т.д.).

Он разбирает контроллер и дисплей, через SWD-порт дампит прошивки, анализирует их в Ghidra и заливает собственный код на Rust на самокат

Получается, переписал самокат на Rust?

https://kodikapusta.ru/news/1214-revers-samokata

Поддержать проект на boosty: https://boosty.to/kodikapusta


Связанные списки

#learn

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

По сравнению с обычными списками это дает два преимущества: вдвое меньше аллокаций памяти (не нужен отдельный узел списка) и меньше промахов кэша, так как при обходе разыменовывается только следующий узел, а не узел плюс данные

https://kodikapusta.ru/news/1211-sviazannye-spiski

Поддержать проект на boosty: https://boosty.to/kodikapusta



Связанные списки

#learn

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

По сравнению с обычными списками это дает два преимущества: вдвое меньше аллокаций памяти (не нужен отдельный узел списка) и меньше промахов кэша, так как при обходе разыменовывается только следующий узел, а не узел плюс данные

https://kodikapusta.ru/news/1211-sviazannye-spiski



Связанные списки

#learn

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

По сравнению с обычными списками это дает два преимущества: вдвое меньше аллокаций памяти (не нужен отдельный узел списка) и меньше промахов кэша, так как при обходе разыменовывается только следующий узел, а не узел плюс данные

https://kodikapusta.ru/news/1211-sviazannye-spiski


Шейдеры на 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: https://boosty.to/kodikapusta


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. Это оч крутой чувак и в его блоге много про внутрянку DOOM и Quake

https://kodikapusta.ru/news/1212-qcrack-exe

Поддержать проект на boosty: https://boosty.to/kodikapusta


Как построить Diffusion Language Model

#ai

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

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

Автор описывает реальные модели вроде Mercury 2, Gemma Diffusion, Nemotron Diffusion

https://kodikapusta.ru/news/1210-kak-postroit-diffusion-language-model

Поддержать проект на boosty: https://boosty.to/kodikapusta


Портирование на Godot с помощью LLM

#gamedev #godot

Автор описывает, как портировал свою игру Babylonian Twins 1993 года, написанную на 68000 ассемблере для Amiga 500, под Godot с помощью LLM. Использовал Claude Fable 5

LLM сумел не только перенести его собственный C++-движок в Godot за один вечер, но и разобрать оригинальные 72 758 строк ассемблера без комментариев: собрать их заново до байтовой идентичности с выпущенными бинарниками, восстановить все форматы данных и даже запустить его же редактор карт 1993 года в эмуляторе.

Конечно, без ошибок не обошлось. Например, "охрана" поражала игрока через сплошную скалу из-за неправильных проверок, а двери оказались нарисованными кодом в рантайме, а не зашитыми в карту. Автор подчеркивает, что LLM сам делал всю техническую работу, а он лишь тестировал и принимал решения

https://kodikapusta.ru/news/1209-portirovanie-na-godot-s-pomoshch-iu-llm

Поддержать проект на boosty: https://boosty.to/kodikapusta


Агенты лучше нас

#ai

Автор утверждает, что оптимизация производительности перестала быть дорогой специализацией

LLM-агенты настолько удешевили сложную работу, что ее может делать любой, кто способен набрать несколько предложений. Он приводит примеры: свой regex-движок FRE, который агент за пару минут ускорил под реальные запросы и игровой ИИ для Azul, который стал сильнейшим в мире при в сотни раз меньших затратах

Он считает, что будущее за "динамическим кастомным софтом", подогнанным под конкретную рабочую нагрузку

https://kodikapusta.ru/news/1207-agenty-luchshe-nas

Поддержать проект на boosty: https://boosty.to/kodikapusta


Прокси для базы данных

#golang

Автор пишет простой такой прокси на Go в учебных целях вдохновившись статьей Figma о том, как их команда баз данных построила DBProxy для перехвата SQL-запросов и маршрутизации их по разным узлам Postgres.

Он реализует проксирование TCP-соединений между клиентом и MySQL: перехватывает пакеты, находит команду COM_QUERY по структуре пакета MySQL и переписывает имя таблицы. В статье объясняется структура MySQL-пакета и демонстрируются базовые принципы, на которых строятся настоящие решения для шардинга, валидации запросов, безопасности и наблюдаемости

https://kodikapusta.ru/news/1208-proksi-dlia-bazy-dannykh

Поддержать проект на boosty: https://boosty.to/kodikapusta

Показано 20 последних публикаций.