Код и Капуста
前往频道在 Telegram
Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/ Читать канал в max https://vk.cc/cVOWSP Для связи @akovardin Поддержать канал https://boosty.to/kodikapusta
显示更多1 678
订阅者
无数据24 小时
+97 天
+4030 天
数据加载中...
相似频道
标签云
进出提及
---
---
---
---
---
---
吸引订阅者
七月 '26
七月 '26
+31
在2个频道中
六月 '26
+66
在1个频道中
Get PRO
五月 '26
+31
在1个频道中
Get PRO
四月 '26
+42
在2个频道中
Get PRO
三月 '26
+33
在2个频道中
Get PRO
二月 '26
+54
在2个频道中
Get PRO
一月 '26
+36
在1个频道中
Get PRO
十二月 '25
+43
在2个频道中
Get PRO
十一月 '25
+41
在2个频道中
Get PRO
十月 '25
+54
在1个频道中
Get PRO
九月 '25
+36
在2个频道中
Get PRO
八月 '25
+34
在3个频道中
Get PRO
七月 '25
+42
在2个频道中
Get PRO
六月 '25
+39
在2个频道中
Get PRO
五月 '25
+111
在5个频道中
Get PRO
四月 '25
+55
在1个频道中
Get PRO
三月 '25
+72
在2个频道中
Get PRO
二月 '25
+62
在1个频道中
Get PRO
一月 '25
+73
在3个频道中
Get PRO
十二月 '24
+37
在1个频道中
Get PRO
十一月 '24
+53
在1个频道中
Get PRO
十月 '24
+75
在2个频道中
Get PRO
九月 '24
+96
在2个频道中
Get PRO
八月 '24
+75
在2个频道中
Get PRO
七月 '24
+57
在4个频道中
Get PRO
六月 '24
+41
在3个频道中
Get PRO
五月 '24
+33
在2个频道中
Get PRO
四月 '24
+46
在2个频道中
Get PRO
三月 '24
+41
在1个频道中
Get PRO
二月 '24
+38
在2个频道中
Get PRO
一月 '24
+70
在2个频道中
Get PRO
十二月 '23
+57
在2个频道中
Get PRO
十一月 '23
+68
在3个频道中
Get PRO
十月 '23
+30
在4个频道中
Get PRO
九月 '23
+6
在0个频道中
Get PRO
八月 '23
+5
在0个频道中
Get PRO
七月 '23
+26
在0个频道中
Get PRO
六月 '23
+25
在0个频道中
Get PRO
五月 '23
+42
在0个频道中
Get PRO
四月 '23
+27
在0个频道中
Get PRO
三月 '23
+62
在0个频道中
Get PRO
二月 '23
+38
在0个频道中
Get PRO
一月 '23
+76
在0个频道中
Get PRO
十二月 '22
+42
在0个频道中
Get PRO
十一月 '22
+31
在0个频道中
Get PRO
十月 '22
+49
在0个频道中
Get PRO
九月 '22
+31
在0个频道中
Get PRO
八月 '22
+21
在0个频道中
Get PRO
七月 '22
+9
在0个频道中
Get PRO
六月 '22
+32
在0个频道中
Get PRO
五月 '22
+16
在0个频道中
Get PRO
四月 '22
+223
在0个频道中
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 15 七月 | +3 | |||
| 14 七月 | +4 | |||
| 13 七月 | +2 | |||
| 12 七月 | +1 | |||
| 11 七月 | +1 | |||
| 10 七月 | +5 | |||
| 09 七月 | +3 | |||
| 08 七月 | +5 | |||
| 07 七月 | +1 | |||
| 06 七月 | +3 | |||
| 05 七月 | 0 | |||
| 04 七月 | 0 | |||
| 03 七月 | +1 | |||
| 02 七月 | 0 | |||
| 01 七月 | +2 |
频道帖子
taproom
#golang #tools
Это уютный терминальный интерфейс для менеджера пакетов Homebrew на macOS, написанный на Go с использованием библиотек Bubble Tea, Bubbles и Lip Gloss. Он позволяет быстро и удобно исследовать формулы и cask-пакеты прямо в терминале, делая ряд вещей проще, чем стандартный CLI brew. Поиск сразу показывает все детали в реальном времени, отображает рекурсивные зависимости и обратные зависимости без медленной команды brew uses, а также поддерживает сортировку по популярности (установки за 90 дней) и размеру на диске
https://kodikapusta.ru/tools/20-taproom
Поддержать проект на boosty и читать в MAX
| 2 | Как не надо делать
#fun
Автор ставит забавный эксперимент: найти самый медленный способ просуммировать массив из 2^26 целых чисел на C++, меняя только порядок доступа к элементам. Он умудряется превзойти по медлительности даже случайный доступ более чем на 30%.
Отправной точкой служат линейный проход и случайная перестановка Фишера-Йетса. После чего автор шаг за шагом выстраивает патологический паттерн, последовательно эксплуатируя устройство памяти: доступ с шагом в кэш-линию убивает переиспользование кэша, шаг в целую страницу ломает аппаратный префетчер и создает конфликтные промахи из-за наборно-ассоциативного кэша, а увеличение дистанции переиспользования выбивает данные из приватных кэшей ядра.
Короче, действительно интересная статья, которая может многому научить по работе с памятью. Несмотря на нарочито комичную цель, статья служит наглядным уроком о работе кэшей, префетчеров, MMU и DRAM
https://kodikapusta.ru/news/1122-kak-ne-nado-delat
Поддержать проект на boosty и читать в MAX | 243 |
| 3 | PostgreSQL достаточно
#db
Авторы сайта утверждают, что PostgreSQL достаточно для всего. Большинству команд не нужны отдельные системы для кэширования, очередей, поиска, документов и векторных эмбеддингов, потому что PostgreSQL справляется с этими задачами достаточно хорошо.
Типичная проблема в том, что приложения обрастают самыми разными хранилищами: Redis, Elasticsearch, MongoDB, Kafka, Snowflake, Pinecone и так далее. И каждое из них добавляет операционную нагрузку на мониторинг, резервное копирование, обновления и ночные сбои. Все это, как правило, преждевременная оптимизация.
Всего 0,3% проектов реально достигают успеха, а с ним и нагрузок. Стартапам разумнее не тратить силы на сложную архитектуру, а решать реальную задачу, опираясь на "скучные" проверенные технологии. Так делают Notion, Netflix и Instagram. Cпециализированную инфраструктуру стоит добавлять только после того, как возможности PostgreSQL действительно исчерпаны
Но! Это все не просто слова. На сайте как раз можно поискать как использовать PostgreSQL вместо всех этих сервисов
https://kodikapusta.ru/news/1117-postgresisenough
Поддержать проект на boosty и читать в MAX | 272 |
| 4 | httpsms
#golang #tools
Сервис, превращающий обычный Android-телефон в SMS-шлюз. Вы делаете запрос к простому HTTP API, а он запускает отправку SMS с вашего телефона. Входящие сообщения могут пересылаться на ваш webhook.
Проект создан разработчиком из Камеруна, потому что во многих странах нельзя купить виртуальные номера, а готового удобного решения для отправки и приёма SMS через телефон не нашлось
Система состоит из веб-интерфейса на Nuxt/Vuetify, API на Go (фреймворк Fiber) с базой CockroachDB
https://kodikapusta.ru/tools/19-httpsms
Поддержать проект на boosty и читать в MAX | 386 |
| 5 | Свой 3d редактор
#rust
Это первый эпизод серии туториалов по созданию простого 3D-редактора сцен на движке Bevy 0.19.
Проект вдохновлен Blender. Теоретически, его можно будет использовать для разработки игровых миров, где редактор и игра используют одну и ту же ECS-архитектуру.
Автор начинает с базовой настройки проекта и объясняет, что любая 3D-сцена требует трех вещей: камеры, источника света и меша. Все в мире Bevy представлено сущностями, собираемыми из компонентов, и этот редактор не исключение. Забавно, что редактор для игр сам разрабатывается как игра.
В следующих выпусках обещает выбор объектов кликом, инструменты перемещения-поворота-масштабирования и сохранение сцен
https://kodikapusta.ru/news/1115-svoi-3d-redaktor
Поддержать проект на boosty и читать в MAX | 299 |
| 6 | На 49% быстрее из-за выравнивания
#golang
Разбор неожиданной оптимизации в Go: сдвиг массива на 4 байта через добавление padding-поля ускоряет операцию обнуления на 49% на Intel и на 9% на AMD. Обнуляция - это что-то типо b.data = [words]uint32{}
Но почему так происходит? Компилятор генерирует инструкцию REP STOSQ, чей механизм Enhanced REP (ERMSB) записывает целые кэш-строки без предварительного чтения, но только при 8-байтном выравнивании адреса - при смещении. Добавление 4 байт как раз выравнивает позицию массива по 8 в примере автора.
Не уверен что вам это пригодиться, но мне нравятся люди, которы зелазют так глубоко в кишки к байтам и битам
https://kodikapusta.ru/news/1114-49-bystree-iz-za-vyravnivaniia
Поддержать проект на boosty и читать в MAX | 760 |
| 7 | pRESTd
#golang #tools
pREST (PostgreSQL + REST) - это готовый к продакшену инструмент на Go, который автоматически создает мгновенный, реалтаймовый и высокопроизводительный REST API поверх базы данных PostgreSQL, без необходимости писать код
https://kodikapusta.ru/tools/17-gocondense
Поддержать проект на boosty и читать в MAX | 450 |
| 8 | Сокращатель ссылок на rust
#rust
Это вводная статья серии по бэкенд-разработке на Rust и Axum.
Автор на примере создания сокращателя URL разбирается веб-фреймворк Axum и объясняется как он устроен. По сути, Axum это надстройка поверх Hyper, Tower и асинхронной среды Tokio.
Автор раскрывает ключевые концепции Axum: маршрутизатор Router с методом route(), трейт Handler, извлечение параметров пути через Path<T>, разделяемое состояние через State<T> и удобное формирование ответов через трейт IntoResponse.
В итоге у вас будет сервис, который принимает POST /shorten с JSON-телом, генерирует короткий код на основе UUID v4, хранит соответствия в памяти в Arc<RwLock<HashMap>> и по GET /{code} выдаёт 302-редирект или 404, если код не найден. Прикольно что автор подробно прослеживает путь запроса через все слои стека, от TCP-пакета до обработчика и обратно.
В следующих сериях будет про хранилища и другие штуки
https://kodikapusta.ru/news/1116-sokrashchatel-ssylok-na-rust
Поддержать проект на boosty и читать в MAX | 343 |
| 9 | Активация сокетов
#golang
Автор рассказывает, как с помощью сокет-активации systemd запускать Go-сервис только когда в него реально приходит запрос, чтобы не тратить память и CPU.
systemd сам открывает и слушает сокет на нужном порту, а при первом подключении запускает сервер, передавая ему уже открытый файловый дескриптор вместе с переменными окружения LISTEN_PID и LISTEN_FDS. В Go это можно сделать вручную через net.FileListener, но удобнее использовать пакет coreos/go-systemd, который через activation.Listeners() сразу отдает готовый net.Listener.
Можно наколбасить решение, которое сможет работать и без активации, при этом использовать фишечки systemd через daemon.SdNotify() и будет завершает работу после нескольких секунд простоя с помощью отдельной горутины с таймером. В итоге сервис будет стартовать по первому запросу и автоматически выключается при бездействии, освобождая ресурсы
https://kodikapusta.ru/news/1113-aktivatsiia-soketov
Поддержать проект на boosty и читать в MAX | 871 |
| 10 | 没有文字... | 356 |
| 11 | SSH порт форвардинг
#devopsina
Туториал наглядно разбирает все режимы SSH-туннелирования. А их не так мало: локальный проброс портов (ssh -L) для доступа к удаленным сервисам с локальной машины, удаленный проброс (ssh -R) для публикации локальных сервисов через внешний шлюз, их динамические эквиваленты (-D и -R без адреса назначения), превращающие SSH-клиент или сервер в SOCKS-прокси для доступа сразу ко всем хостам за шлюзом, а также сценарии с bastion/jump-хостами (-J) для доступа к loopback-портам через промежуточный сервер и проброс портов из домашней сети наружу.
Короче, тут есть над чем заморочиться
https://kodikapusta.ru/news/1107-ssh-forvarding
Поддержать проект на boosty и читать в MAX | 394 |
| 12 | Вебернетис
#fun
Автор за два месяца с помощью LLM портировал значительную часть Kubernetes на TypeScript, создав "webernetes" — библиотеку (~140 КиБ в gzip), которая запускает полноценный кластер Kubernetes прямо в браузере. Реально, запускает kubelet, планировщик подов, контроллеры Deployment/ReplicaSet, DNS, сетевой интерфейс (CNI), container runtime (CRI) и официальный kubernetes-client API для взаимодействия. И все это без WebAssembly, поскольку даже "hello world" на Go в WASM весит больше всей библиотеки.
Самая большая сложность заключалась в том, что LLM плохо справляются с портированием кода. Агенты срезали углы, заменяли LRU/FIFO-кэши на обычный Map, пропускали тесты и придумывали лишние хелперы, поэтому автор лично ревьюил каждую из ~100 000 строк и написал 204 интеграционных теста, которые прогоняются и для настоящего k3s-кластера, и для "webernetes", гарантируя идентичное поведение.
Суммарные затраты на API-токены составили около $4 335, но автор подчеркивает, что его время все равно осталось самой дорогой статьей проекта. Конечно, LLM хороши как неутомимый генератор кода, но требуют обязательного ручного ревью и надежного набора тестов
Мммм... хуита! За $4k
https://kodikapusta.ru/news/1106-vebernetis
Поддержать проект на boosty и читать в MAX | 432 |
| 13 | Ода форумам
#fun
Автор статьи размышляет о закате веб-форумов и том, что мы потеряли с их уходом. Все начиналось от первых экспериментов CERN и Perl-скриптов Мэтта (WWWBoard) до золотой эры UBB, phpBB, vBulletin, Slash и, наконец, Discourse.
Форумы давали чувство настоящего сообщества, которое современные соцсети с их алгоритмами вовлечения так и не смогли воспроизвести. Ключевым культурным наследием форумов стал BBCode - язык разметки, предшествовавший Markdown и до сих пор живущий в игровом движке Godot
В итоге, автор приходит к выводу, что интернет-пользователи страдают синдромом блестящего объекта, постоянно мигрируя на новые платформы в погоне за потреблением контента. Хотя настоящая ценность была не в охвате всех людей на планете, а в маленьком кругу единомышленников, который форумы давали по умолчанию.
Лампово
https://kodikapusta.ru/news/1109-oda-forumam
Поддержать проект на boosty и читать в MAX | 425 |
| 14 | Gossamer
#rust #lang
Новый пятничный язык программирования, вдохновленный Rust но с горутинами на M:N-планировщике и моделью памяти, близкой к Swift
Без borrow checker'а. Для сборщика муссора используется не трассировка, а подход Swift: детерминированный подсчет ссылок с автоматическим сбором циклов и arena-регионы
Язык поддерживает Result/Option, pattern matching, трейты, дженерики, иммутабельность по умолчанию и forward pipes, работает как в режиме скриптов через байткод-VM с REPL, так и в компилируемом режиме через LLVM в единый нативный бинарник без зависимостей.
Стандартная библиотека включает HTTP, JSON, криптографию, SQL и сжатие, а при необходимости можно расширять код на безопасном Rust
Жопой чую, что написала LLM
https://kodikapusta.ru/news/1102-gossamer
Поддержать проект на boosty и читать в MAX | 419 |
| 15 | gocondense
#tools #golang
Форматтер Go-кода, который сворачивает многострочные конструкции в однострочные там, где они умещаются в лимит (по умолчанию 80 символов), сокращая вертикальный шум без потери читаемости. Трансформации учитывают длину строки, идемпотентны и сохраняют все комментарии: сворачиваются сигнатуры функций, списки аргументов, литералы слайсов/массивов/структур/карт, цепочки выражений и селекторов, убираются одиночные группы объявлений (import, const, var, type) из скобок, группируются соседние параметры одного типа, удаляются лишние скобки, пустые строки в начале/конце блоков и пустоты после оператора присваивания, коллапсируются пустые блоки и убираются избыточные типы в композитных литералах и len/нулевые границы в слайсах
Интегрируется с VS Code, GoLand, Vim и Neovim, может использоваться как CLI или как библиотека
https://kodikapusta.ru/tools/17-gocondense
Поддержать проект на boosty и читать в MAX | 458 |
| 16 | Джину уже 12 лет
#golang
Ману Мартинес-Алмейда рассказывает историю как он создавал Gin - одного из самых популярных веб-фреймворков для Go, который вырос из его несостоявшегося стартапа Fyve и разрабатывался по принципу "простое важнее легкого".
Вдохновившись выступлением Роба Пайка, он противопоставил Gin фреймворку Martini. Вместо рефлексии и магии - явный gin.Context, который нес все нужное для обработки запроса и появился за два года до стандартного context.Context, а вместо обхода списка регулярных выражений на каждый запрос - radix-дерево для маршрутизации с константным временем поиска, не зависящим от количества маршрутов.
Как быстро растут чужие фреймворки
https://kodikapusta.ru/news/1105-dzhinu-uzhe-12-let
Поддержать проект на boosty и читать в MAX | 1 241 |
| 17 | mo
#tools #golang
Markdown-просмотрщик на Go, который открывает .md-файлы в браузере с живым обновлением при сохранении. Сервер запускается на порту 6275 и сервит множество файлов, сгруппированных по вкладкам.
Инструмент с поддержкой GitHub-flavored Markdown, подсветкой синтаксиса через Shiki, Mermaid-диаграмм, KaTeX-математики, есть полнотекстовый поиск, темная/светлая тема, перетаскивания файлов из файлового менеджера и чтения из stdin
https://kodikapusta.ru/tools/16-mo
Поддержать проект на boosty и читать в MAX | 641 |
| 18 | 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 | 1 277 |
| 19 | Финтех заметки
#learn
Fintech Engineering Handbook - это практическое руководство по разработке надежных финансовых систем, построенное вокруг трех принципов:
- Не изобретать деньги. Никаких дубликатов и произвольных изменений баланса
- Не терять данные. Полная прослеживаемость через event sourcing, аудиторские следы и иммутабельность
- Никому не доверять. Проверка вебхуков, сверка данных из независимых источников, валидация на границах системы
Статья разбирает все ключевые аспекты: представление денег с правильной точностью и без плавающей запятой, двойную бухгалтерию как основу лоджера с разграничением value/booking/settlement time, резервирование средств для исключения гонок, идемпотентность для защиты от повторной обработки, полную возобновляемость операций после сбоев, надежное взаимодействие с внешним миром через аутбокс-паттерн и reconciliation, а также контроль доступа с разделением обязанностей (принцип двух пар глаз) и подходы к тестированию - от property-based до инъекции сбоев и проверки обратной совместимости событий.
Если вы хотит работать в финтехе, то маст рид
https://kodikapusta.ru/news/1104-fintech-hanbook
Поддержать проект на boosty и читать в MAX | 449 |
| 20 | gomax
#tools #golang
А это уже мое поделие. Уверен, вам понравится. Порт библиотеки PyMax с Python на Go с помощью LLM. С помощью либы можно делать все, что умеет делать официальный клиент Макс. А еще можно написать свой клиент с end-to-end шифрованием, например.
В какой-то степени оно работает. Используйте на свой страх и риск
https://kodikapusta.ru/tools/15-gomax
Поддержать проект на boosty и читать в MAX | 620 |
