Код и Капуста
رفتن به کانال در Telegram
Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/ Читать канал в max https://vk.cc/cVOWSP Для связи @akovardin Поддержать канал https://boosty.to/kodikapusta
نمایش بیشتر1 675
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
+1130 روز
آرشیو پست ها
1 675
glyphcss
#tools #fun
Библиотека для рендеринга 3D-моделей форматов OBJ, glTF, GLB, STL, MagicaVoxel и VOX)в ASCII-арт внутри одного HTML-элемента <pre>, без WebGL и <canvas>.
Растеризатор проецирует полигоны, заполняет символьную сетку cols × rows и пишет одну строку в textContent - ни одного лишнего DOM-узла на полигон.
Еще и интерактивность есть. Она добавляется через <GlyphHotspot> в заданной 3D-точке: на проекцию вешается один абсолютно спозиционированный <div> с реальными DOM-событиями, :hover-стилями и accessibility
Прям как игры в далеком прошлом
https://kodikapusta.ru/tools/32-glyphcss
Поддержать проект на boosty и читать в MAX
1 675
GDPatch
#rust #godot
GDPatch - это новый универсальный загрузчик модов для Godot 4.x, написанный на Rust, который вместо патчинга движка или игровых файлов перехватывает системные вызовы файловой системы, подменяя .pck-файлы и перенаправляя чтения на модифицированный контент. Такой подход позволяет работать с любым билдом Godot без модификации исполняемого файла, а внутренний парсер и токенизатор GDScript обеспечивают roundtrip между байткодом и исходным текстом, давая моддерам возможность патчить скрипты через Lua как простой заменой строк, так и через AST.
Все это звучит капец как сложно и меня такие статьи оч мотивируют поглубже разобраться в теме
https://kodikapusta.ru/news/1143-gdpatch
Поддержать проект на boosty и читать в MAX
1 675
G#
#lang
Новый прикольный пятничный язык программирования
G# - это новый язык для платформы .NET, сочетающий эргономику Go, Kotlin и Swift: пакеты и импорты, объявления через func, дата классы nullable-типы с if let, структурную конкурентность через scope и async/await, а также явные числовые типы вроде int32 и float64. Работает через обычный инструмент dotnet build/dotnet run.
Язык ориентирован на тех, кто хочет учить или использовать .NET с более современным и лаконичным синтаксисом, не начиная с C#
https://kodikapusta.ru/news/1140-g
Поддержать проект на boosty и читать в MAX
1 675
moonBASIC
#golang #tools #fun
Это современный BASIC с компилятором в байткод и встроенным рантаймом для 2D/3D-графики, физики и сети. Не интерпретатор, а прям настоящий компилятор. Исходники .mb компилируются в .mbc и исполняются на VM, интегрированной с Raylib, Jolt, Box2D и ENet через CGO.
Поставляется в трех вариантах:
- IDE-бандл в виде редактор + компилятор + рантайм + документация
- полный рантайм moonrun - одной командой компилирует и запускает игру
- compiler-only для CI/тулчейнов.
Есть VS Code-расширение с LSP и дебаггером, стандартная библиотека покрывает тайловые карты, спрайты, атласы, частицы, звук, освещение, шейдеры. Написан на Go, распространяется
Окей. Но зачем?
https://kodikapusta.ru/tools/31-moonbasic
Поддержать проект на boosty и читать в MAX
1 675
Не то время
#learn #code
Вторая статья автора в серии "Beyond Happy Path Engineering". Автор разбирает, как наивное обращение со временем в продакшене приводит к багам.
Разработчики часто используют now() и wall-clock там, где нужны монотонные часы для измерения длительности, guarded-транзиции состояния вместо сравнения таймстемпов для истечения срока, и явные часовые пояса/календари вместо голого UTC для пользовательских дат.
Автор на примере резервирования товара при покупке показывает, как дрейф часов между машинами вызывает преждевременное освобождение брони, сравнение таймстемпов не доказывает порядок событий, просроченный cron-воркер при наверстывании создает лавину обновлений, а отсутствие монотонного времени приводит к отрицательным измерениям производительности.
А надо явно разделять время на четыре категории: длительность, момент, порядок, бизнес-календар. Подробности в статье
Непростое время
https://kodikapusta.ru/news/1145-ne-to-vremia
Поддержать проект на boosty и читать в MAX
1 675
Кодим чат
#golang
Автор просто час пишет чат. Никаких слов, никакого хайпа. Просто час кодинга под музычку
https://kodikapusta.ru/news/1146-kodim-chat
Поддержать проект на boosty и читать в MAX
1 675
freeink
#tools
Free Ink - это сборизе энтузиастов, коотрые создаюют программное обеспечение, прошивки и аппаратную платформу для устройств на электронных чернилах. Ребята публикует в открытом доступе как софт, так и хардварных спецификации, чтобы любой желающий мог взять, доработать и сделать свою собственную читалку.
Моя следующая читалка точно будет опенсорсной. На каком-нибудь ESP32
https://kodikapusta.ru/tools/30-freeink
Поддержать проект на boosty и читать в MAX
1 675
768 серверов Postgres
#db
Статья рассказывает, как PlanetScale заставляет 768 серверов Postgres, хранящих петабайт данных, выглядеть для приложения как одна монолитная база. 768 серверов это 256 шардов, каждый с мастером + 2 реплики.
Ключевой компонент - прокси-слой, который парсит SQL, понимает топологию данных через JSON-конфигурацию , хеширует ID и направляет записи и чтения в нужные шарды, агрегируя результаты при запросах, затрагивающих несколько шардов. Сверху балансир распределяет подключения между десятками прокси, а приложение видит единый хост mydb.pscale.com.
Получается, что вся сложность шардирования скрыта за привычной строкой коннекта
https://kodikapusta.ru/news/1142-768-serverov-postgres
Поддержать проект на boosty и читать в MAX
1 675
Хранение паскеев
#golang
Автор предлагает формат для паскеев спеуиальный формат. Что похожее на интероперабельную, непрозрачную строку для хранения паскей-записей, по аналогии с PHC-строками для паролей.
Зачем это нужно? Приложения смогут обращаться с паскеями как с хешами паролей, не привязываясь к конкретной схеме БД или библиотеке. На основе этого формата он набросал небольшое Go API crypto/passkey. Библиотека генерирует JSON, а приложение отвечает только за хранение passkey-записей, привязанных к пользователю, и кеширование challenge'ов
Отличная идея, кмк
https://kodikapusta.ru/news/1139-khranenie-paskeev
Поддержать проект на boosty и читать в MAX
1 675
chatto
#golang #tools
Chatto - полнофункциональный self-hosted чат для команд и сообществ с поддержкой скриншеринга, видео- и голосовых звонков. Бекенж написан на Go
Ну что, настало время своих собственных серверов с чатами
https://kodikapusta.ru/tools/27-chatto
Поддержать проект на boosty и читать в MAX
1 675
Zig на примерах
#zig
Это интерактивное введение в язык Zig через примеры программ, оформленное в стиле известного проекта Go by Example. Этоя прям ностальгические вайбы, в свое время Go by Example прям очень выручал
Сайт покрывает версию Zig 0.16 и разбит на разделы: базовые типы, функции и ошибки, управляющие конструкции ( составные типы, стандартную библиотеку, comptime-метапрограммирование, асинхронный I/O, работу с C, систему сборки и написание CLI-программ - каждая тема иллюстрируется коротким компилируемым примером с пояснениями
Это мы используем
https://kodikapusta.ru/news/1141-zig-na-primerakh
Поддержать проект на boosty и читать в MAX
1 675
Арены жалко
#golang
Go отказался от экспериментальных Memory Arenas - механизма, позволявшего выделять память крупными пулами в обход GC для снижения накладных расходов в высоконагруженных сценариях.
Автор считает это стратегической ошибкой. Формальной причиной стали проблемы безопасности, когда можно попытаться использовать память после ее освобождения. И еще никому не понравилась несовместимость с интерфейсами - пришлось бы добавлять аргумент *Arena в сигнатуры функций, и это раскололо бы экосистему на стандартный и arena-миры, подобно тому как context.Context когда-то "инфицировал" весь Go.
Но, по мнению автора, реальная опасность в том, что Go добровольно ограничил свой потолок производительности в момент, когда быстрые интерпретируемые языки догоняют его сверху, а системные языки вроде Rust и Zig становятся проще снизу. Go рискует остаться застывшим в "среднем" сегменте, став COBOLом облачной эпохи
https://kodikapusta.ru/news/1137-areny-zhalko
Поддержать проект на boosty и читать в MAX
1 675
Kutta
#tools #golang
Это 2D-аэродинамическая труба, написанная на Go с Ebitengine,
Ага, прям настоящая аэродинамическая труба, которая симулирует обтекание профиля крыла методом Lattice-Boltzmann и визуализирует поле скоростей, завихрения, линии дыма и векторы подъемной силы/сопротивления.
Это не валидированная CFD-модель. Она правильно передает форму потока, но не точные числа
Но как красиво!
https://kodikapusta.ru/tools/28-kutta
Поддержать проект на boosty и читать в MAX
1 675
SIMD для всех
#zig
Митчелл Хашимото утверждает, что SIMD незаслуженно считается сложным.
Он на примере из своего терминала Ghostty показывает, что "обработка N значений за раз" всегда сводится к одному и тому же шаблону из пяти шагов: размножить константы в вектор, загружать по одному вектору за итерацию, выполнить операцию сразу над всеми линиями, свернуть векторный результат в скаляр и дообработать остаток обычным циклом. Звучит просто, неправда ли?
Он демонстрирует это на сканировании массива. 12 строк SIMD-кода дают ускорение до 5×, при этом компиляторы плохо справляются с авто-векторизацией таких циклов.
Каждый разработчик должен узнавать ситуации, где применим SIMD, и не бояться его, потому что типовой паттерн осваивается быстро и не требует знания ассемблера или конкретных инструкций процессора
А ты уже используешь SIMD?
https://kodikapusta.ru/news/1138-simd-dlia-vsekh
Поддержать проект на boosty и читать в MAX
1 675
687 ГБ аллокаций
#golang
Автор профилировал свою многопоточную реализацию Redis на Go и обнаружил, что одна строка кода
s.kvList[k] = append(v[popped:], s.kvList[k]...) за время бенчмарка суммарно аллоцировала 687 ГБ памяти. Реально приложение держало в памяти лишь около 4,58 МБ. В чем прикол?
Проблема была в том, что LPUSH каждый раз создавал новый массив и копировал весь существующий список, давая O(n²) по аллокациям, тогда как RPUSH использовал штатную стратегию роста слайсов с амортизированным O(1).
Замена на deque с двумя индексами, растущий от середины в обе стороны, ускорила LPUSH в 33 раза, а аллокации упали с 715 ГБ до 27 ГБ
Нужно быть внимательным
https://kodikapusta.ru/news/1136-687-gb-allokatsii
Поддержать проект на boosty и читать в MAX1 675
HTMX с Go
#golang
Автор детально описывает свои паттерны интеграции HTMX с Go. Почитайте, там много всего интересного.
Но мне весь это веб всё еще не нравится. Любой HTML - это в первую очередь ебля со стилями. Я хотел бы, чтобы уже сделали как во Flutter или Qt, чтобы было очевидно, как выравнивать и форматировать блоки. А не вот это всё
https://kodikapusta.ru/news/1135-htmx-s-go
Поддержать проект на boosty и читать в MAX
1 675
Запускаем юникловскую футболку
#fun
Автор обнаружил на футболке Uniqlo из коллекции Akamai "Peace for All" обфусцированный bash-скрипт. На спине напечатан небэнг и base64-закодированная строка, подаваемая в eval.
После трудоемкого OCR и выверки расшифрованный скрипт оказался очень милой пасхалкой: бесконечная синусоидная анимация текста ♥PEACE♥FOR♥ALL♥ с цветовым градиентом от циана к оранжевому, бегущая по терминалу.
Футболка отсылает к эпохе раннего интернета и Linux как "open-source языку интернета". Немножко компьютерной ностальгии для гиков и отличная рекламная кампания для Uniqlo
https://kodikapusta.ru/news/1133-zapuskaem-iuniklovskuiu-futbolku
Поддержать проект на boosty и читать в MAX
1 675
GALA
#golang #tools
GALA (Go Alternative LAnguage) - статически типизированный функциональный язык, транспилирующийся в Go, который приносит в экосистему Go sealed-типы с исчерпывающим паттерн матчиг, монадический стек, иммутабельные коллекции и do-нотацию с накоплением ошибок через Validated и конкурентным выполнением через Future. Уже даже есть примеры проектов на GALA
Кароче, ребята решили SCALA написать на Go
https://kodikapusta.ru/tools/24-gala
Поддержать проект на boosty и читать в MAX
1 675
Виртуальная память
#learn
Масштабное погружение в виртуальную память от самых основ. Туториал прикольно написан как диалог двух приятелей - процесса по имени Аллока и Ядра.
Раскрывается множество тем: зачем нужна виртуальная память, раскладка адресного пространства, 4-уровневые иерархические таблицы страниц, роль MMU и TLB в ускорении трансляции адресов, ленивое выделение памяти через page faults, copy-on-write для fork() и разделяемой памяти, mmap, типы памяти, swap, эффекты NUMA-топологии, производительность data-intensive систем и наблюдаемость. И это я еще не все перечислил
https://kodikapusta.ru/news/1134-virtual-naia-pamiat
Поддержать проект на boosty и читать в MAX
