ru
Feedback
Код и Капуста

Код и Капуста

Открыть в Telegram

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

Больше
1 671
Подписчики
+324 часа
+47 дней
+4130 день
Архив постов
gocondense #tools #golang Форматтер Go-кода, который сворачивает многострочные конструкции в однострочные там, где они умещаю
gocondense #tools #golang Форматтер Go-кода, который сворачивает многострочные конструкции в однострочные там, где они умещаются в лимит (по умолчанию 80 символов), сокращая вертикальный шум без потери читаемости. Трансформации учитывают длину строки, идемпотентны и сохраняют все комментарии: сворачиваются сигнатуры функций, списки аргументов, литералы слайсов/массивов/структур/карт, цепочки выражений и селекторов, убираются одиночные группы объявлений (import, const, var, type) из скобок, группируются соседние параметры одного типа, удаляются лишние скобки, пустые строки в начале/конце блоков и пустоты после оператора присваивания, коллапсируются пустые блоки и убираются избыточные типы в композитных литералах и len/нулевые границы в слайсах Интегрируется с VS Code, GoLand, Vim и Neovim, может использоваться как CLI или как библиотека https://kodikapusta.ru/tools/17-gocondense Поддержать проект на boosty и читать в MAX

Джину уже 12 лет #golang Ману Мартинес-Алмейда рассказывает историю как он создавал Gin - одного из самых популярных веб-фрей
Джину уже 12 лет #golang Ману Мартинес-Алмейда рассказывает историю как он создавал Gin - одного из самых популярных веб-фреймворков для Go, который вырос из его несостоявшегося стартапа Fyve и разрабатывался по принципу "простое важнее легкого". Вдохновившись выступлением Роба Пайка, он противопоставил Gin фреймворку Martini. Вместо рефлексии и магии - явный gin.Context, который нес все нужное для обработки запроса и появился за два года до стандартного context.Context, а вместо обхода списка регулярных выражений на каждый запрос - radix-дерево для маршрутизации с константным временем поиска, не зависящим от количества маршрутов. Как быстро растут чужие фреймворки https://kodikapusta.ru/news/1105-dzhinu-uzhe-12-let Поддержать проект на boosty и читать в MAX

mo #tools #golang Markdown-просмотрщик на Go, который открывает .md-файлы в браузере с живым обновлением при сохранении. Серв
mo #tools #golang Markdown-просмотрщик на Go, который открывает .md-файлы в браузере с живым обновлением при сохранении. Сервер запускается на порту 6275 и сервит множество файлов, сгруппированных по вкладкам. Инструмент с поддержкой GitHub-flavored Markdown, подсветкой синтаксиса через Shiki, Mermaid-диаграмм, KaTeX-математики, есть полнотекстовый поиск, темная/светлая тема, перетаскивания файлов из файлового менеджера и чтения из stdin https://kodikapusta.ru/tools/16-mo Поддержать проект на boosty и читать в MAX

zero-copy-оптимизации #golang Разбор zero-copy-оптимизаций в Go. Когда вы передаете *os.File напрямую в io.Copy(conn, f), ран
zero-copy-оптимизации #golang Разбор zero-copy-оптимизаций в Go. Когда вы передаете *os.File напрямую в io.Copy(conn, f), рантайм распознает это через цепочку type-assertions и вызывает sendfile(2), передавая данные из кеша странички в сокет без копирования в юзерспейсе. Но вот когда вы оборачиваете *os.File в свой собственный io.Reader, то все становится не так радужно. В тестах использование *os.File дает прирост в ~54 мс CPU на гигабайт и ~3 000 сисколлов против 184 мс CPU и 131 000 сисколлов при оборачивании файла в любой пользовательский io.Reader. Единственная "бесплатная" обертка это io.LimitedReader, которую рантайм явно разворачивает. Для проксирования сокет-в-сокет та же логика работает через splice(2), но любая промежуточная обертка ломает fast path, и диагностировать это проще всего через strace -c. Сотни тысяч пар read/write означают, что zero-copy не работает в вашем коде https://kodikapusta.ru/news/1108-zero-copy-optimizatsii Поддержать проект на boosty и читать в MAX

Финтех заметки #learn Fintech Engineering Handbook - это практическое руководство по разработке надежных финансовых систем, п
Финтех заметки #learn Fintech Engineering Handbook - это практическое руководство по разработке надежных финансовых систем, построенное вокруг трех принципов: - Не изобретать деньги. Никаких дубликатов и произвольных изменений баланса - Не терять данные. Полная прослеживаемость через event sourcing, аудиторские следы и иммутабельность - Никому не доверять. Проверка вебхуков, сверка данных из независимых источников, валидация на границах системы Статья разбирает все ключевые аспекты: представление денег с правильной точностью и без плавающей запятой, двойную бухгалтерию как основу лоджера с разграничением value/booking/settlement time, резервирование средств для исключения гонок, идемпотентность для защиты от повторной обработки, полную возобновляемость операций после сбоев, надежное взаимодействие с внешним миром через аутбокс-паттерн и reconciliation, а также контроль доступа с разделением обязанностей (принцип двух пар глаз) и подходы к тестированию - от property-based до инъекции сбоев и проверки обратной совместимости событий. Если вы хотит работать в финтехе, то маст рид https://kodikapusta.ru/news/1104-fintech-hanbook Поддержать проект на boosty и читать в MAX

gomax #tools #golang А это уже мое поделие. Уверен, вам понравится. Порт библиотеки PyMax с Python на Go с помощью LLM. С пом
gomax #tools #golang А это уже мое поделие. Уверен, вам понравится. Порт библиотеки PyMax с Python на Go с помощью LLM. С помощью либы можно делать все, что умеет делать официальный клиент Макс. А еще можно написать свой клиент с end-to-end шифрованием, например. В какой-то степени оно работает. Используйте на свой страх и риск https://kodikapusta.ru/tools/15-gomax Поддержать проект на boosty и читать в MAX

Миллиард строк #rust Автор проходит One Billion Row Challenge на Rust - задачу по обработке файла с миллиардом строк метеодан
Миллиард строк #rust Автор проходит One Billion Row Challenge на Rust - задачу по обработке файла с миллиардом строк метеоданных за минимальное время. В 10-часовом стриме он итеративно оптимизирует решение: от наивной версии через отказ от парсинга UTF-8 и мапинга файла в память к fixed-point-температурам, инлайнингу коротких ключей, branchless-парсингу, SIMD для поиска строк, хеш-таблицам вдохновленным Java-решениями и, наконец, многопоточности с конкурентной загрузкой данных По сути, это практическое пособие по низкоуровневой оптимизации. Можно поучится профилированию через perf, чтению ассемблера, работе с CPU-кэшами и прокачать понимание того, что на самом деле происходит под капотом Rust-кода. Если у вас есть 10 часов свободного времени https://kodikapusta.ru/news/1111-milliard-strok Поддержать проект на boosty и читать в MAX

WAL-RUS #golang #rust ClickHouse Cloud переписали утилиту для бэкапов и WAL-архивирования Postgres с Go на Rust. В результате
WAL-RUS #golang #rust ClickHouse Cloud переписали утилиту для бэкапов и WAL-архивирования Postgres с Go на Rust. В результате появился WAL-RUS - опенсорсный инструмент, у которого пиковое потребление виртуальной памяти более чем на 70% ниже, чем у WAL-G. Это достигнуто за счет прямого управления аллокациями, ограниченных воркер-пулов и потоковой архитектуры без избыточного буферирования. При этом WAL-RUS полностью совместим с WAL-G на уровне конфигурации и формата архивов. Пропускная способность осталась сопоставимой с Go-версией, но выигрыш в потреблении памяти шикарный. Где-то грустит один маленький гофер https://kodikapusta.ru/news/1103-wal-rus Поддержать проект на boosty и читать в MAX

leafwiki #tools #golang LeafWiki - это self-hosted вики, упакованная в один Go-бинарник без внешних зависимостей: SQLite для
leafwiki #tools #golang LeafWiki - это self-hosted вики, упакованная в один Go-бинарник без внешних зависимостей: SQLite для метаданных, Markdown-файлы на диске для контента (можно читать и бэкапить обычным cp -r) и React-фронтенд со встроенным редактором, живым превью, древовидной навигацией и ручной сортировкой страниц. Проект нацелен на личные вики, инженерные заметки и runbook'и для небольших команд, которым не нужна тяжесть Wiki.js или Outline. Развернуть можно одной Docker-командой или через системный инсталлятор https://kodikapusta.ru/tools/14-leafwiki Поддержать проект на boosty и читать в MAX

Ты можешь написать симфонию? #ai Джей Акунцо использует знаменитый монолог Робина Уильямса из фильма "Умница Уилл Хантинг" ка
Ты можешь написать симфонию? #ai Джей Акунцо использует знаменитый монолог Робина Уильямса из фильма "Умница Уилл Хантинг" как метафору противостояния человека и AI. Уилл - это ChatGPT, который прочитал все книги, но никогда не жил, а Шон (Уильямс) - человек, который знает запах Сикстинской капеллы, боль потери и цену любви из собственного прожитого опыта. Да, AI владеет информацией, но не может "прочитать комнату" или пропустить слова через собственые "маленькие жизненные моменты". Тут в статье прикольная игра слов: little life moments - LLM. Настоящая ценность творческой работы не в правильно расставленных фактах. Она в уникальном синтезе прожитого опыта, превращающем сценарий в искусство, как это сделал Робин Уильямс, сыграв роль так, как не смог бы ни один другой актер. В эпоху AI-контента соблазн уступить машине велик, но именно способность вложить себя в работу - то, что отличает живое от мертвого, и выбор за нами https://kodikapusta.ru/news/1110-ty-mozhesh-napisat-simfoniiu Поддержать проект на boosty и читать в MAX

Профилирование #golang Статья разбирает пять встроенных профилировщиков в Go (CPU, heap, block, mutex и goroutine), показывая
Профилирование #golang Статья разбирает пять встроенных профилировщиков в Go (CPU, heap, block, mutex и goroutine), показывая, что все они собирают данные в единый pprof-формат, но отличаются способом записи. CPU-профайлер работает асинхронно через сигналы ОС и кольцевой буфер. Heap, block и mutex накапливают данные на месте в хеш-таблице бакетов прямо в рантайме. А goroutine-профайлер делает мгновенный снимок всех горутин только по запросу, кооперируясь с планировщиком для минимальных остановок мира https://kodikapusta.ru/news/1101-profilirovanie Поддержать проект на boosty и читать в MAX

6 связанных списков #rust "Learning Rust With Entirely Too Many Linked Lists" - это прикольный учебный материал, где автор уч
6 связанных списков #rust "Learning Rust With Entirely Too Many Linked Lists" - это прикольный учебный материал, где автор учит основам и продвинутым концепциям Rust через реализацию шести разных связных списков - от плохого односвязного стека до production-unsafe двусторонней очереди, попутно разбирая указатели (Box, Rc, Arc, *const, *mut), владение, заимствование, обобщённые типы, итераторы, unsafe-код и stacked borrows. При этом автор открыто признает, что ненавидит связные списки и считает их ужасной структурой данных для 99% случаев, где разумнее использовать Vec или VecDeque. Но именно из-за их неудобства в Rust они становятся идеальным учебным полигоном - заставляя столкнуться с borrow checker, временами жизни, мутабельностью и unsafe-кодом в контролируемой обстановке https://kodikapusta.ru/news/1100-6-sviazannykh-spiskov Поддержать проект на boosty и читать в MAX

2048 для Game Boy Advance на Zig #zig Автор написал игру 2048 для Game Boy Advance на Zig и объясняет, почему этот язык отлич
2048 для Game Boy Advance на Zig #zig Автор написал игру 2048 для Game Boy Advance на Zig и объясняет, почему этот язык отлично подошел для embedded-разработки под консоль. Байтоебство, но красивое Главные плюсы: встроенная кросс-компиляция, система сборки, позволяющая в одном build.zig описать все шаги от линковки до кодогенерации спрайтов, и особенно packed structs с нестандартными целочисленными типами (например, u2), которые делают работу с аппаратными регистрами GBA читаемой и удобной. Ну и конечно отмечаются comptime-вычисления, автор использовал их как раз для сжатия спрайтов на этапе компиляции. Еще ему понравилась гибкая стандартная библиотека с кастомными аллокаторами И недостатков рассказывает, что в zig ограниченная поддержка инлайн-ассемблера, невозможность указать ARM/Thumb-режим для отдельной функции, и проблемы с "weird memory" GBA, где нельзя писать в видеопамять 8-битными операциями https://kodikapusta.ru/news/1099-2048-dlia-game-boy-advance-na-zig Поддержать проект на boosty и читать в MAX

DOOM на Cobol #fun Так, так, сча будут шикарные новости Ютубер с ником icitry написал полноценный шутер от первого лица на яз
DOOM на Cobol #fun Так, так, сча будут шикарные новости Ютубер с ником icitry написал полноценный шутер от первого лица на языке COBOL - архаичном, многословном языке из 1960-х, лишенном современных возможностей и графических функций. Красава, ну Для обхода отсутствия инструментов для графики он гененрирует каждый кадр как простое изображение и отображает его через ffplay, управление реализовано через ввод одиночных символов в консоли, а векторную математику, необходимую для игровой механики, пришлось реализовывать самому. Проект построен на базе движка DOOM и использует некоторую логику оттуда, вроде переменной высоты потолка, и в целом напоминает Wolfenstein 3D. Игра работает и выглядит на удивление достойно. Чувак очень крут и у него очень много свободного времени https://kodikapusta.ru/news/11095-doom-na-cobol Поддержать проект на boosty и читать в MAX

cardinal #rust Cardinal - это самое шикарное приложение для поиска на Mac. Быстрое и точное приложение для поиска файлов, нап
cardinal #rust Cardinal - это самое шикарное приложение для поиска на Mac. Быстрое и точное приложение для поиска файлов, написанное на Rust с использованием Tauri для десктопного UI. Поддерживает Everything-совместимый синтаксис запросов: AND/OR, фильтры по расширению и размеру, поиск по содержимому, sub-path матчинг, regex, поиск по finder-тегам, быстрый предпросмотр. И вызывается через Cmd+Shift+Space https://kodikapusta.ru/tools/13-cardinal Поддержать проект на boosty и читать в MAX

6 популярных кешей #golang Автор сравнивает шесть подходов к реализации потокобезопасного in-memory кеша в Go. От наивного ma
6 популярных кешей #golang Автор сравнивает шесть подходов к реализации потокобезопасного in-memory кеша в Go. От наивного map без блокировок до copy-on-write через atomic.Pointer и все это на своем на 20-ядерном i7-14700K под разными нагрузками - read-only, read-heavy, write-heavy. В итоге приходит к выводу, что шардированая 256-сегментная мапа с отдельным мьютексом на сегмент это лучшее универсальное решение. Такой подход дает почти 8-кратное ускорения на 8 ядрах по сравнению с одним sync.Mutex. И неожиданно sync.RWMutex контринтуитивно почти не помогает чтению при количестве ядер больше двух и проигрывает обычному мьютексу на запись из-за накладных расходов на счетчик читателей, один мьютекс с ростом ядер замедляется из-за ping-pong кеш-линии с блокировкой, а распределение Ципфа для ключей ускоряет чтение тк горячие ключи остаются в кеше процессора, но может замедлить шардированный кеш, когда горячие ключи попадают в один шард и создают коллизию https://kodikapusta.ru/news/1098-6-populiarnykh-keshei Поддержать проект на boosty и читать в MAX

DNS и Zig Хотел сделать перевод статьи про DNS пакеты с примерами на C, но в итоге переписал все на #zig и докинул еще интере
DNS и Zig Хотел сделать перевод статьи про DNS пакеты с примерами на C, но в итоге переписал все на #zig и докинул еще интересности https://kodikapusta.ru/articles/29-dns-na-zig

pgsty/minio #golang pgsty/minio (также известен как Silo) - это поддерживаемый сообществом форк популярного S3-совместимого о
pgsty/minio #golang pgsty/minio (также известен как Silo) - это поддерживаемый сообществом форк популярного S3-совместимого объектного хранилища MinIO, сопровождаемый проектом Pigsty. Изменения относительно апстрима минимальны: восстановлена встроенная консоль управления, обновлены ссылки на документацию и пути Go-модулей на этот репозиторий Даешь опесорс! https://kodikapusta.ru/tools/12-pgsty-minio Поддержать проект на boosty и читать в MAX

Глитчарт #art #fun Начнем понедельник с искусства. Кстати, я уже как-то писал про гличарт: https://kodikapusta.ru/news/937-gl
Глитчарт #art #fun Начнем понедельник с искусства. Кстати, я уже как-то писал про гличарт: https://kodikapusta.ru/news/937-glitchart. Но теперь про чуть более классический вариант "The Art of PNG Glitch" - отличное исследование художественного "глитча" PNG-изображений от японского программиста и художника. В статье автор разбирает, как пять фильтров PNG (None, Sub, Up, Average, Paeth) и их комбинации по-разному влияют на визуальный результат при повреждении данных на этапах фильтрации или сжатия, создавая узнаваемые эффекты - от лавинообразных полос до метеоритных хвостов и снежного шума. Еще рассматривает влияние прозрачности, чересстрочности (interlace) и намеренно некорректных фильтров. Кроме теории, автор показывает Ruby-библиотеку PNGlitch для программного создания таких эффектов и каталог из 120 вариантов глитча. Автор отмечает, что, несмотря на кажущуюся простоту формата PNG по сравнению с JPEG, разнообразие получаемых глитч-эффектов неожиданно богато Всем срочно творить https://kodikapusta.ru/news/1094-glitchart Поддержать проект на boosty и читать в MAX

HelixDB #rust HelixDB - это графо-векторная OLTP-база данных на Rust, созданная для построения knowledge-графов и AI-памяти.
HelixDB #rust HelixDB - это графо-векторная OLTP-база данных на Rust, созданная для построения knowledge-графов и AI-памяти. База поддерживает работу с графами, векторами, ключ-значениеями, документами и даже работу с реляционной моделью и все в одной платформе. Позволяет писать запросы через DSL на Rust, TypeScript, Go и Python. В комплете есть CLI-утилита для быстрой инициализации проекта, а также управляемое облачное решение с ACID-транзакциями, векторным и полнотекстовым поиском и автоматическим масштабированием Выглядит красиво https://kodikapusta.ru/tools/11-helixdb Поддержать проект на boosty и читать в MAX