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

Код и Капуста

前往频道在 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 с использо
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 целых ч
Как не надо делать #fun Автор ставит забавный эксперимент: найти самый медленный способ просуммировать массив из 2^26 целых чисел на C++, меняя только порядок доступа к элементам. Он умудряется превзойти по медлительности даже случайный доступ более чем на 30%. Отправной точкой служат линейный проход и случайная перестановка Фишера-Йетса. После чего автор шаг за шагом выстраивает патологический паттерн, последовательно эксплуатируя устройство памяти: доступ с шагом в кэш-линию убивает переиспользование кэша, шаг в целую страницу ломает аппаратный префетчер и создает конфликтные промахи из-за наборно-ассоциативного кэша, а увеличение дистанции переиспользования выбивает данные из приватных кэшей ядра. Короче, действительно интересная статья, которая может многому научить по работе с памятью. Несмотря на нарочито комичную цель, статья служит наглядным уроком о работе кэшей, префетчеров, MMU и DRAM https://kodikapusta.ru/news/1122-kak-ne-nado-delat Поддержать проект на boosty и читать в MAX
243
3
PostgreSQL достаточно #db Авторы сайта утверждают, что PostgreSQL достаточно для всего. Большинству команд не нужны отдельные
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, а он з
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. Проект
Свой 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 байта через добавление padd
На 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, который автоматически создает мг
pRESTd #golang #tools pREST (PostgreSQL + REST) - это готовый к продакшену инструмент на Go, который автоматически создает мгновенный, реалтаймовый и высокопроизводительный REST API поверх базы данных PostgreSQL, без необходимости писать код https://kodikapusta.ru/tools/17-gocondense Поддержать проект на boosty и читать в MAX
450
8
Сокращатель ссылок на rust #rust Это вводная статья серии по бэкенд-разработке на Rust и Axum. Автор на примере создания сокр
Сокращатель ссылок на 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-сервис только когда в него р
Активация сокетов #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 порт форвардинг #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"
Вебернетис #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 Автор статьи размышляет о закате веб-форумов и том, что мы потеряли с их уходом. Все начиналось от первых эк
Ода форумам #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-планировщике и моделью
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-кода, который сворачивает многострочные конструкции в однострочные там, где они умещаю
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 - одного из самых популярных веб-фрей
Джину уже 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-файлы в браузере с живым обновлением при сохранении. Серв
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), ран
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 - это практическое руководство по разработке надежных финансовых систем, п
Финтех заметки #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. С пом
gomax #tools #golang А это уже мое поделие. Уверен, вам понравится. Порт библиотеки PyMax с Python на Go с помощью LLM. С помощью либы можно делать все, что умеет делать официальный клиент Макс. А еще можно написать свой клиент с end-to-end шифрованием, например. В какой-то степени оно работает. Используйте на свой страх и риск https://kodikapusta.ru/tools/15-gomax Поддержать проект на boosty и читать в MAX
620