Код и Капуста
1.67K subscribers
3.15K photos
68 videos
3 files
3.45K links
Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/

Читать канал в max https://vk.cc/cVOWSP

Для связи @akovardin

Поддержать канал https://boosty.to/kodikapusta
Download Telegram
Bevy и сеть

#rust #gamedev

Цикл статей по разработке игр на Rust и Bevy все еще продолжается. Я уже писал про этот цикл статей, но ребята продолжают выпускать годноту. Правада, несколько статей платные, но остальное тоже хороши

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

Учим Rust через написание игр

https://kodikapusta.ru/news/996-bevy-i-set

Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥31😢1
Заработок на опенсорсе

#fun

Мечта любого разработчика - писать код без в опенсорс в свое удовольствие и полуать за это деньги.

Кажется, у автора статьи это почти получилось. Разработчик утилиты mise рассказывается сколько он зарабатывает на опенсорсе и сколько он хотел бы зарабатывать

Кстати, реклама в документации приносит ему 100 баксов в месяц

https://kodikapusta.ru/news/1003-zarabotok-na-opensorse

Поддержать проект на boosty: https://boosty.to/kodikapusta
2
Швейцарский стол

#golang

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

Но все соль в группровке. Вместо одного ключа в ячейке мы храним сразу по 8 штук, и для каждой группы добавляем специальные контрольные байты (младшие 7 битов хэша). Это позволяет за одну операцию сравнивать с хэшем все восемь элементов через битовые трюки с uint64, а это очень быстро.

На практике хоть обычный подход и шустрее на малых объемах, swiss table раскрывается при высокой заполненности: если забить ее под завязку, она тормозит в разы меньше обычной

https://kodikapusta.ru/news/991-shveitsarskii-stol

Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥2
Парсим JSON на Rust

#rust

Автор решил запилить парсер JSON на Rust с нуля, чтобы на практике прочувствовать структуры, енумы и сопоставление с образцом.

Начал с теории: struct для группировки данных, enum для вариантов вроде объекта, массива или строки, а match - чтобы все это красиво разбирать. Потом написал токенизатор, который жрет строку символов и выдаёт токены: фигурные скобки, двоеточия, строки с эскейп-последовательностями, числа и ключевые слова. А дальше - парсер, который рекурсивно обходит эти токены и собирает их в тип JsonValue - енум с вариантами Object, Array, Str, Number, Bool и Null.

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

Автора вообще много прикольных статей

https://kodikapusta.ru/news/997-parsim-json-na-rust

Поддержать проект на boosty: https://boosty.to/kodikapusta
👍1
Game Boy на F#

#fun

Я удивлен, что F# все еще живи на нем даже пишут прикольные штуки.

Вот, например, автор запилил эмулятор Game Boy. Это как писать стихи на латыни

Мне, кстати, понравился синтаксис и сам код

https://kodikapusta.ru/news/1004-game-boy-na-f

Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥1
Домашний HAL

#golang #ai

Автор считает, что пора собирать себе домашнего HAL’а на новых локальных моделях вроде Gemma4 или Qwen 3.6. Сейчас даже на обычной видеокарте можно запустить нормального мультимодального ассистента, который и жестикулирует, и лицо распознает, и умный дом крутит, и болтает без всяких облачных подписок - жрет только твое электричество.

Автор использует современные локальные модели, связку speech-to-text (Whisper/Moonshine) и text-to-speech (Kokoro), систему жестов и мимики, управляемую через вызовы инструментов LLM. Проект интегрируется с Home Assistant, поиском SearXNG, векторной базой Qdrant для памяти и распознаванием лиц.

В итоге автор запилил болванчика с анимацией, локальной википедией, поиском и автономными задачами. И он реально работает, правда, пока хватает контекста

https://kodikapusta.ru/news/992-domashnii-hal

Поддержать проект на boosty: https://boosty.to/kodikapusta
🎉1
Я опубликовал для вас уже 1001 интересную ссылку 💻
🔥8🎉8🤩2👍1
Свой Redis на Rust

#rust

Это практическое руководство по созданию KV базы данных, похожей на Redis, с параллельным освоением языка Rust.

Книга построена на основе задания CodeCrafters под названием Build Your Own Redis. Вы начнете с изучения работы с TCP и настройки сервера, постепенно перейдете к более сложным задачам: обработке нескольких подключений клиентов и реализации основных команд Redis.

Сейчас в книге описаны базовые темы плюс два расширенных раздела: "Репликация" и "Транзакции"

Для обучения самое то

https://kodikapusta.ru/news/998-svoi-redis-na-rust

Поддержать проект на boosty: https://boosty.to/kodikapusta
🔥3
Сделали идеально ненужное

#fun

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

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

Главный вывод: лучше сделать что-то "очевидно плохое", но получить опыт и радость творчества, чем бесконечно обдумывать идеальный результат. Автор призывает вернуться к подходу "просто сделать", игнорировать лишние функции (даже если их подсказывает ИИ) и помнить, что рост скорости разработки часто компенсируется ростом ненужных усложнений

https://kodikapusta.ru/news/1005-sdelali-ideal-no-nenuzhnoe

Поддержать проект на boosty: https://boosty.to/kodikapusta
👍3
FastCGI все еще достоин

#golang

FastCGI - протокол, которому уже 30 лет, но он по-прежнему может показать свою силу

Автор предлагает использовать FastCGI для реверс прокси вместо HTTP. И в этом действительно есть смысл. Две основные причины - безопастность и неопределенность в передаче некторых данных запроса, например реального IP клиента

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

Есть олды котоые помнять что такое FastCGI?

https://kodikapusta.ru/news/993-fastcgi-vse-eshche-dostoin

Поддержать проект на boosty: https://boosty.to/kodikapusta
1
device-envoy-esp

#rust

ESP32 шагают по планете и отдирабт популярность у Arduino

device-envoy-esp - это экспериментальная Rust-библиотека, кторая делает программирование микроконтроллеров ESP32 значительно более увлекательным за счет использования асинхронного фреймворка Embassy и абстракций устройств, которые инкапсулируют владение аппаратными ресурсами и фоновую координацию в удобные, переиспользуемые компоненты с высокоуровневым(сравнительно) API

Мигаем диодами на Rust

https://kodikapusta.ru/news/999-device-envoy-esp

Поддержать проект на boosty: https://boosty.to/kodikapusta
2🔥2
Музыка лиспа

#music

Автор разработал расширение для музыкального редактора Renoise, позволяющее прямо внутри него писать и исполнять живую музыку на языке Fennel - диалекте Lisp, компилируемом в Lua.

Автор доработал существующую на Rust библиотеку для алгоритмической генерации музыки, добавив поддержку Fennel: скрипты компилируются через отдельную VM в Lua-код и выполняются в песочнице, а для удобства создан инструмент с автоперезагрузкой файлов и автодополнением в редакторе. Это делает программирование музыки гибким, экспрессивным и идеально подходит для лайвкодинга.

Как Overtone, только современней

https://kodikapusta.ru/news/1006-muzyka-lispa

Поддержать проект на boosty: https://boosty.to/kodikapusta
2
Свой маленький TCP

#golang

Есть чуваки - Pilot. Они пилять различные сетевые решения для агентов

Они на Go с нуля забабахали свой транспорт для обхода NAT поверх UDP, очень похожий на TCP. Cо скользящими окнами, контролем перегрузок и повторными таймаутами. Обошлись вообще без сторонних библиотек и даже без CGO, использовав стандартную библиотеку. Пришлось добавить немного хитрых приемчиков. Например, вместо кучи таймеров на каждый пакет - один тикер на все соединение, а блокировки сделали настолько незаметными, что сокет не тормозит под нагрузкой

В итоге засунули все это в стандартный net.Conn интерейес и теперь AI-агенты могут обходить через NAT и шифровать трафик

Исходники доступны, можете мутитить свои мешсети с агентами

https://kodikapusta.ru/news/994-svoi-malen-kii-tcp

Поддержать проект на boosty: https://boosty.to/kodikapusta
👍3😱1
Zig для хаскелистов

#zig #haskell

На картинке - как я сувствую себя, когда читаю такие статьи

Zig привлекает внимание функциональных программистов благодаря своей мощной системе comptime.

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

Zig предлагает элегантные аналоги функциональных абстракций. Монады Reader через явную передачу аллокаторов и IO, newtype через структуры-одиночки, sum-типы через объединения с тегами. И даже typeclass'ы через генерацию словарей на comptime.

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

https://kodikapusta.ru/news/1001-zig-dlia-khaskelistov

Поддержать проект на boosty: https://boosty.to/kodikapusta
👍1
Rust India 2026

#rust

На эти долгие выходные у меня для вас есть отличная подборочка видео - Rust India Conference 2026

Веб серва и веб апапа вам обеспечены

https://kodikapusta.ru/news/1002-rust-india-2026

Поддержать проект на boosty и читать в MAX
🔥1
Проще лучше

#golang

Автор рассказывает как он запилил крутую базу данных с лок-фри ринг-буфером, пинером для GC и кучей умных слов в README, а потом оказалось, что всё это работает через жопу. Оказалось, что он перемудрил со всеми умными локфри алгоритмами.

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

https://kodikapusta.ru/news/995-proshche-luchshe

Поддержать проект на boosty и читать в MAX
😁3😱1
Async/Await

#golang

Статья про реализацию паттерна Async/Await в Go. Якобы, он упростит написание конкурентного кода.

В основном автор рекламирует свою либу go-opera. Ну, вот хрен знает, как по мне - только все сложнее становится

https://kodikapusta.ru/news/1000-async-await

Поддержать проект на boosty и читать в MAX
😁4
Системное программирование

#golang

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

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

Прикольно что на примере демонстрирует процесс выявления и устранения узких мест с помощью профилировщика pprof

В целом моно почитать ааесь его цикл про системное программирование

https://kodikapusta.ru/news/1007-sistemnoe-programmirovanie

Поддержать проект на boosty и читать в MAX
🔥31
pgrust

#rust

Почему бы не переписать на Rust все? Не, ну прям реально все, даже если оно нормально работает.

Автор проекта pgrust решил переписать PostgreSQL на Rust. И рассказывает о впечатляющем прогрессе: за неделю совместимость с тестовым набором Postgres выросла с 33% до 67%, а кодовая база превысила 450 тысяч строк.

Догадаетесь как он это сделала? Всего лишь 8 аккаунтов Codex (по $200 в месяц каждый) и до 20 параллельных агентов, которые работают над конкретными тестами и функциями.

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

Ближайшие цели - достичь почти 100% совместимости на уровне запросов, затем обеспечить стабильность под реальной нагрузкой, после чего приступить к улучшениям, которых не хватает в оригинальном PostgreSQL

https://kodikapusta.ru/news/1012-pgrust

Поддержать проект на boosty и читать в MAX
🔥51
Больше не нужно

#fun

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

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

А в статье автор, конечно, Д’Артаньян

https://kodikapusta.ru/news/1017-bol-she-ne-nuzhno

Поддержать проект на boosty и читать в MAX
1
CPU нагрузка

#golang

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

Автор показывает, что "нулевая стоимость абстракций" в Go часто недостижима: дженерики, интерфейсы и замыкания в горячих циклах не инлайнятся, что приводит к падению производительности на 15–27% по сравнению с конкретной реализацией. Основные причины — особенности компилятора, отсутствие встроенных интринсиков для prefetch и SIMD, невозможность форсировать инлайн, а также отсутствие директив для отключения проверок границ или размотки циклов.

Единственный способ достичь максимальной скорости — дублировать код, использовать трюки с масками для сдвигов или писать на ассемблере.

Автор приходит к выводу, что Go отлично подходит для I/O-задач, но для CPU-нагруженных сценариев код перестает быть идиоматичным, требуя специализации, дублирования и низкоуровневых оптимизаций

https://kodikapusta.ru/news/1008-cpu-nagruzka

Поддержать проект на boosty и читать в MAX
👍21