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

Код и Капуста

الذهاب إلى القناة على Telegram

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

إظهار المزيد
1 669
المشتركون
+324 ساعات
+47 أيام
+4130 أيام
أرشيف المشاركات
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

Асинхронный Rust в трех частях #rust Совсем не свежие но все еще очень актуальные и полезные статьи про устройство ассинхронн
Асинхронный Rust в трех частях #rust Совсем не свежие но все еще очень актуальные и полезные статьи про устройство ассинхронности Rust в трех частях Async/await, или "асинхронный ввод‑вывод" - это функция языка, которая позволяет программам выполнять несколько задач одновременно. Это в некотором виде альтернатива многопоточности, хотя программы на Rust часто используют и то и другое. Асинхронный ввод‑вывод особенно популярен в веб‑сервисах и сетевых приложениях, работающих с большим числом подключений одновременно. "Большое число" обычно означает порядока десяти тысяч подключений, что иногда называют "C10K problem", то есть задачей обработки 10 000 клиентов или соединений. Использование большого количества "futures" или "задач" оказывается более эффективным, чем запуск множества потоков. А еще, конечно же, стоит почитать https://rust-lang.github.io/async-book/ ну и посмотреть все ссылки в статье https://kodikapusta.ru/news/1097-asinkhronnyi-rust-v-trekh-chastiakh Поддержать проект на boosty и читать в MAX

driftwm #rust Driftwm - это экспериментальный Wayland-композитор на Rust, реализующий концепцию "бесконечного холста": окна ж
driftwm #rust Driftwm - это экспериментальный Wayland-композитор на Rust, реализующий концепцию "бесконечного холста": окна живут в своем родном размере на безграничной 2D-плоскости, а дисплей это что-то типо камеры, которую можно перемещать, панорамировать и зумировать. Управление заточено под трекпад с жестами, а при сближении краев окна автоматически "примагничиваются" друг к другу, собираясь в своеобразные группы Когда запустил кучу агентов и следишь за всеми https://kodikapusta.ru/tools/10-driftwm Поддержать проект на boosty и читать в MAX