Код и Капуста
الذهاب إلى القناة على Telegram
Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/ Читать канал в max https://vk.cc/cVOWSP Для связи @akovardin Поддержать канал https://boosty.to/kodikapusta
إظهار المزيد1 678
المشتركون
-124 ساعات
+27 أيام
+3830 أيام
جاري تحميل البيانات...
القنوات المماثلة
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
يوليو '26
يوليو '26
+33
في 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 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 18 يوليو | 0 | |||
| 17 يوليو | +1 | |||
| 16 يوليو | +1 | |||
| 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 |
منشورات القناة
А зачем нужны CORS?
#learn
Автор разбирает распространенные заблуждения о CORS. Автор любит задавать каверзный вопрос на собеседовании: является ли CORS механизмом защиты сервера или браузера? Правильный ответ - браузера. Сервер вообще не проверяет источник запроса и спокойно выполняет его, а браузер лишь решает, отдавать ли пришедший ответ JavaScript-коду.
Работает это так: браузер добавляет заголовок Origin к кросс-доменным запросам, а при получении ответа ищет заголовок Access-Control-Allow-Origin, и если источники не совпадают - просто выбрасывает ответ, хотя запрос уже дошел до сервера и был обработан. Для "непростых" запросов сначала отправляется предварительный OPTIONS-запрос.
Реальная угроза, от которой защищает CORS, требует одновременно браузера жертвы и ее активной сессии: вредоносный сайт может отправить запрос с cookie жертвы к банку, но браузер не даст злоумышленнику прочитать ответ с балансом. При этом важно, что CORS не защищает от CSRF: если атака не требует чтения ответа, запрос все равно доходит до сервера и наносит ущерб, а блокировка ответа уже бесполезна
https://kodikapusta.ru/news/1123-a-zachem-nuzhny-cors
Поддержать проект на boosty и читать в MAX
| 2 | История в меню
#fun
Не хочу никаких сложных тем в пятницу. Лучше посмотрите на эту подборку красивых американских меню более чем столетней давности. Умели же!
https://kodikapusta.ru/news/1121-istoriia-meniu
Поддержать проект на boosty и читать в MAX | 253 |
| 3 | Ante
#lang
Пятница! Новый язык программирования - Ante!
Автор рассказывает про этот экспериментальный язык, который сделал шаг к тому, что раньше считалось невозможным: объединить подсчет ссылок и проверку заимствований без риска падений в рантайме, в отличие от Rust с его Rc<RefCell> и Swift с проверками эксклюзивности.
Ключевая идея - "стабильность формы" (я хз как нормально перевести shape-stability). Пока никто не может уничтожить объект, можно безопасно иметь несколько мутабельных ссылок на структуру и ее поля одновременно, а типы можно пометить как шаренные (че-то типа Rc) для автоматического подсчета ссылок.
У подхода есть недостаток - он требует рекурсивного анализа типов, что работает довольно хрупко, поэтому создатель языка ищет более надежные варианты
https://kodikapusta.ru/news/1112-ante
Поддержать проект на boosty и читать в MAX | 270 |
| 4 | Borrowed & Owned 🦀
#rust #tools
Открытая, курируемая сообществом коллекция ресурсов для изучения языка Rust: книг, видео, курсов, репозиториев, блогов и прочего. Есть удобный поиск с фильтрами по категории, уровню и бесплатности
https://kodikapusta.ru/tools/21-borrowed-and-owned
Поддержать проект на boosty и читать в MAX | 286 |
| 5 | mmap или pread
#golang
Автор статьи - инженер из VictoriaMetrics. На примере реального движка хранения VictoriaLogs разбирает выбор между системным вызовом pread и отображением файла в память mmap при чтении байтов из файлов.
Автор объясняет, что pread имеет заметную цену: каждый вызов - это дорогой переход из пользовательского пространства в ядро с копированием данных, и при миллионе мелких случайных чтений на один запрос теряется целая секунда процессорного времени только на пересечение границы ядра.
Mmap превращает эти чтения в дешевый доступ к памяти, но у него есть коварная проблема именно для Go: обращение к "холодной" странице вызывает major page fault, который блокирует поток ОС незаметно для планировщика Go. При достаточном числе таких блокировок программа может застопориться.
В итоге, оптимальное решение - это абстракция ReaderAt, которая через системный вызов mincore проверяет, находится ли нужная страница уже в оперативной памяти. Если да, то используется быстрый mmap-путь, а если нет - то безопасный pread. При этом результаты mincore кэшируются в битовой карте на срок до минуты.
В статье еще разбирается целая куча самых разных тонкостей
https://kodikapusta.ru/news/1120-mmap-ili-pread
Поддержать проект на boosty и читать в MAX | 698 |
| 6 | TypeScript переписали на Go
#golang
Команда Microsoft с помощью AI переписала компилятор TypeScript 7.0 на Go, а не на Rust (шах и мат!). Команда добилась примерно десятикратного ускорения сборки, и автор использует это как повод доказать, что Go - оптимальный язык для эпохи агентной разработки с использованием ИИ.
Go изначально спроектирован ради читателя, а не писателя кода. И это свойство идеально подходит большим языковым моделям, которые читают код гораздо больше, чем люди (что печально). Автор разбирает четыре накапливающиеся проблемы, которые Go решает лучше Python и TypeScript: медленная сборка, недетерминированное управление зависимостями, слабая обратная связь по ошибкам и постоянная нестабильность экосистемы.
Вот видите, есть еще порох в пороховницах! Все на Go перепишем
https://kodikapusta.ru/news/1119-typescript-perepisali-na-go
Поддержать проект на boosty и читать в MAX | 843 |
| 7 | 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 | 426 |
| 8 | Как не надо делать
#fun
Автор ставит забавный эксперимент: найти самый медленный способ просуммировать массив из 2^26 целых чисел на C++, меняя только порядок доступа к элементам. Он умудряется превзойти по медлительности даже случайный доступ более чем на 30%.
Отправной точкой служат линейный проход и случайная перестановка Фишера-Йетса. После чего автор шаг за шагом выстраивает патологический паттерн, последовательно эксплуатируя устройство памяти: доступ с шагом в кэш-линию убивает переиспользование кэша, шаг в целую страницу ломает аппаратный префетчер и создает конфликтные промахи из-за наборно-ассоциативного кэша, а увеличение дистанции переиспользования выбивает данные из приватных кэшей ядра.
Короче, действительно интересная статья, которая может многому научить по работе с памятью. Несмотря на нарочито комичную цель, статья служит наглядным уроком о работе кэшей, префетчеров, MMU и DRAM
https://kodikapusta.ru/news/1122-kak-ne-nado-delat
Поддержать проект на boosty и читать в MAX | 335 |
| 9 | 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 | 338 |
| 10 | httpsms
#golang #tools
Сервис, превращающий обычный Android-телефон в SMS-шлюз. Вы делаете запрос к простому HTTP API, а он запускает отправку SMS с вашего телефона. Входящие сообщения могут пересылаться на ваш webhook.
Проект создан разработчиком из Камеруна, потому что во многих странах нельзя купить виртуальные номера, а готового удобного решения для отправки и приёма SMS через телефон не нашлось
Система состоит из веб-интерфейса на Nuxt/Vuetify, API на Go (фреймворк Fiber) с базой CockroachDB
https://kodikapusta.ru/tools/19-httpsms
Поддержать проект на boosty и читать в MAX | 451 |
| 11 | Свой 3d редактор
#rust
Это первый эпизод серии туториалов по созданию простого 3D-редактора сцен на движке Bevy 0.19.
Проект вдохновлен Blender. Теоретически, его можно будет использовать для разработки игровых миров, где редактор и игра используют одну и ту же ECS-архитектуру.
Автор начинает с базовой настройки проекта и объясняет, что любая 3D-сцена требует трех вещей: камеры, источника света и меша. Все в мире Bevy представлено сущностями, собираемыми из компонентов, и этот редактор не исключение. Забавно, что редактор для игр сам разрабатывается как игра.
В следующих выпусках обещает выбор объектов кликом, инструменты перемещения-поворота-масштабирования и сохранение сцен
https://kodikapusta.ru/news/1115-svoi-3d-redaktor
Поддержать проект на boosty и читать в MAX | 341 |
| 12 | На 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 | 919 |
| 13 | pRESTd
#golang #tools
pREST (PostgreSQL + REST) - это готовый к продакшену инструмент на Go, который автоматически создает мгновенный, реалтаймовый и высокопроизводительный REST API поверх базы данных PostgreSQL, без необходимости писать код
https://kodikapusta.ru/tools/17-gocondense
Поддержать проект на boosty и читать в MAX | 534 |
| 14 | Сокращатель ссылок на 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 | 404 |
| 15 | Активация сокетов
#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 | 1 058 |
| 16 | لا يوجد نص... | 413 |
| 17 | SSH порт форвардинг
#devopsina
Туториал наглядно разбирает все режимы SSH-туннелирования. А их не так мало: локальный проброс портов (ssh -L) для доступа к удаленным сервисам с локальной машины, удаленный проброс (ssh -R) для публикации локальных сервисов через внешний шлюз, их динамические эквиваленты (-D и -R без адреса назначения), превращающие SSH-клиент или сервер в SOCKS-прокси для доступа сразу ко всем хостам за шлюзом, а также сценарии с bastion/jump-хостами (-J) для доступа к loopback-портам через промежуточный сервер и проброс портов из домашней сети наружу.
Короче, тут есть над чем заморочиться
https://kodikapusta.ru/news/1107-ssh-forvarding
Поддержать проект на boosty и читать в MAX | 467 |
| 18 | Вебернетис
#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 | 491 |
| 19 | Ода форумам
#fun
Автор статьи размышляет о закате веб-форумов и том, что мы потеряли с их уходом. Все начиналось от первых экспериментов CERN и Perl-скриптов Мэтта (WWWBoard) до золотой эры UBB, phpBB, vBulletin, Slash и, наконец, Discourse.
Форумы давали чувство настоящего сообщества, которое современные соцсети с их алгоритмами вовлечения так и не смогли воспроизвести. Ключевым культурным наследием форумов стал BBCode - язык разметки, предшествовавший Markdown и до сих пор живущий в игровом движке Godot
В итоге, автор приходит к выводу, что интернет-пользователи страдают синдромом блестящего объекта, постоянно мигрируя на новые платформы в погоне за потреблением контента. Хотя настоящая ценность была не в охвате всех людей на планете, а в маленьком кругу единомышленников, который форумы давали по умолчанию.
Лампово
https://kodikapusta.ru/news/1109-oda-forumam
Поддержать проект на boosty и читать в MAX | 447 |
| 20 | 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 | 434 |
