Код и Капуста
Відкрити в Telegram
Авторский канал с интересными ссылками про разработку на Go, Rust, Godot, Flutter, Android, iOS, Aurora. Все ссылки тут https://kodikapusta.ru/ Читать канал в max https://vk.cc/cVOWSP Для связи @akovardin Поддержать канал https://boosty.to/kodikapusta
Показати більше1 673
Підписники
-224 години
-57 днів
+3130 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
липень '26
липень '26
+37
в 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 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 23 липня | 0 | |||
| 22 липня | +1 | |||
| 21 липня | 0 | |||
| 20 липня | 0 | |||
| 19 липня | +3 | |||
| 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 |
Дописи каналу
OpenLogi
#tools #rust
Я давно влюбился в лоджитековские мыши MX Master. И вдруг появляется OpenLogi - это нативная, локальная альтернатива Logitech Options+, написанная на Rust.
Приложение управляет мышами Logitech напрямую через протокол HID++ без аккаунта, телеметрии и облака и не аффилирован с Logitech.
Кто-то любит MX Master еще больше меня
https://kodikapusta.ru/tools/26-openlogi
Поддержать проект на boosty и читать в MAX
| 2 | Научные статьи
#learn
Это интерактивная семантическая карта ~3 миллионов статей arXiv. Авторы собирали статьи для AI агентов, но люди тоже могут почитать
Хотели начать читать научные статьи, но не знали с чего начать? Вот вам знак
https://kodikapusta.ru/news/1132-nauchnye-stat-i
Поддержать проект на boosty и читать в MAX | 191 |
| 3 | Убираем ограничения
#golang
Автор разбирает продвинутый прием устранения проверки границ в горячих путях Go
Когда компилятор не может доказать безопасность доступа к срезу, а программист может, на помощь приходит unsafe.Pointer с арифметикой указателей. Вместо binary.LittleEndian.Uint32(data[i:]) можно использовать *(*uint32)(unsafe.Add(unsafe.Pointer(unsafe.SliceData(b)), i)), что устраняет все проверки границ и на реальном бенчмарке brotli-компрессора даёт прирост ~10%. У автора в статье довольно много таких хаков
Кроме очевидного сокращения инструкций и ветвлений в хотпасе, вы еще и работу кеша процессора улучшаете. Меньше инструкций, меньше мисов
https://kodikapusta.ru/news/1129-ubiraem-ogranicheniia
Поддержать проект на boosty и читать в MAX | 324 |
| 4 | UTM
#tools
UTM - бесплатное open-source приложение для macOS, использующее Apple Hypervisor для виртуализации ARM64 на Apple Silicon и QEMU для эмуляции x86/x64, ARM32, MIPS, PPC, RISC-V и SPARC.
Мне понравилась очень удобная надстройка над QEMU. Запомнить команды и праметры для консольной QEMU я не в состоянии
Есть версия для iOS
https://kodikapusta.ru/tools/25-utm
Поддержать проект на boosty и читать в MAX | 356 |
| 5 | Псевдопокалипсис
#fun
В статье выдвигается и математически обосновывается тезис о "псевдокалипсисе" - неизбежном конце анонимности в интернете из-за статистического "отпечатка", который каждый человек оставляет в своих текстах.
Для уникальной идентификации среди ~490 млн англоязычных людей достаточно всего ~29 бит информации. Обычные сообщения раскрывают порядка 106 бит информации о личности. 17 бит уходит на демографию, 39 - на черты личности по модели HEXACO, а 50 бит - это стилистические особенности: от частот служебных слов до пунктуационных привычек.
По его расчетам, псевдонимность компрометируется уже после ~1000 слов. Современные стилометрические методы работают лишь на пулах из ~50 авторов, но LLM уже неплохо угадывают авторов "случайно", а специализированная модель, обученная по рецепту "огромный датасет + огромная сеть + огромный бюджет", могла бы приблизиться к теоретическому пределу.
В статье автор упоминает и другие факторы для идентификации. Это может быть походка, царапины на машине, динамика нажатий клавиш, а также аналоговые схемы зарядки наушников.
Прикольно, что одной из контрмер может быть LLM-фильтрация, выхолащивающая человечность текста.
Кажется, что гонка вооружений между идентификацией и приватностью складывается в пользу идентификации
https://kodikapusta.ru/news/1131-psevdopokalipsis
Поддержать проект на boosty и читать в MAX | 292 |
| 6 | Go конкурентность в C
#golang #c
Автор исследует, насколько близко можно воспроизвести конкурентную модель Go на чистом C с помощью только POSIX-потоков. Это делается для проекта Solod - строгого подмножества Go, транслируемого в C без рантайма и сборщика мусора.
Реализация построена на двух примитивах - pthread_mutex_t и pthread_cond_t. Поверх них сделаны мьютексы, condition-переменные, пул воркеров с кольцевым буфером и буферизированные/небуферизированные каналы с рандеву-передачей значений напрямую со стека отправителя. Но без зеленых тредов и своего планировщика
Бенчмарки показывают, что на крупных задачах пул pthreads уступает Go всего ~10%, а атомики и неподблокированные мьютексы даже быстрее, но как только поток паркуется в ядре, накладные расходы на wakeup-сисколлы дают проигрыш до 23 раз. Это, очевидно, плата за отсутствие отдельного планировщика и простоту кода в ~200 строк
https://kodikapusta.ru/news/1128-go-konkurentnost-v-c
Поддержать проект на boosty и читать в MAX | 688 |
| 7 | dnsfs
#golang #tools
Шуточно-гениальный проект Бена Картрайта
Файловая система FUSE, хранящая данные в кеше DNS-резолверов чужих людей. Файл разбивается на чанки, которые кодируются в DNS-запросы к специально настроенному авторитативному DNS-серверу. Резолверы по всему миру кешируют ответы - и данные физически распределяются по глобальной инфраструктуре DNS, буквально "true cloud storage"
Чтение файла восстанавливается из тех же DNS-запросов: если ответ закеширован - данные возвращаются мгновенно, если кеш протух - сервер перегенерирует чанк
https://kodikapusta.ru/tools/23-dnsfs
Поддержать проект на boosty и читать в MAX | 469 |
| 8 | Интернет от самых основ
#learn #net
Масштабный интерактивный разбор устройства интернета от первых принципов до наших дней.
Начинаем с телеграфа Морзе и релейной регенерации сигналов, Увидим что цифровая передача битов через дискретные символы появилась задолго до компьютеров. Пройдем через коммутацию каналов и dial-up-модемы - к пакетной коммутации Барана и Дэвиса, ARPANET и первым IMP-маршрутизаторам.
Автор последовательно проводит читателя через Ethernet, IP-адресацию с CIDR, TCP, BGP-маршрутизацию между автономными системами, NAT в домашних сетях, иерархический DNS, HTTP как пользовательский интерфейс интернета, TLS-шифрование. Посмотрим на полный путь пакета при клике на ссылку - от радиоволн Wi-Fi до света в оптоволокне на дне океана.
Статья с очень крутыми интерактивными симуляторами, которые все показывают максимально наглядно
Обязательно к прочтению
https://kodikapusta.ru/news/1130-internet-ot-samykh-osnov
Поддержать проект на boosty и читать в MAX | 316 |
| 9 | OpenTelemetry в комптайме
#golang
Разрабы OpenTelemetry объявили о первом стабильном релизе Go Compile-Time Instrumentation (v1)
Новый инструмента otelc, который встраивает телеметрию в Go-бинарник на этапе компиляции через механизм -toolexec, без правок исходного кода и без отдельного кода в рантайме. В v1 поддерживаются net/http, database/sql, gRPC, Redis и метрики рантайма Go. Можно инструментировать кастомный код через специальные правила в конфиге.
Инструмент заменяет go build на otelc go build. Но это необязательно, можно просто настроить GOFLAGS с указанием toolexec, а значит все уже совместимо с вашим CI/CD
В будущем планируется реестр инструментаций, расширение покрытия библиотек и оптимизация
Лучшее использование toolexec, которое я видел
https://kodikapusta.ru/news/1127-opentelemetry-v-komptaime
Поддержать проект на boosty и читать в MAX | 960 |
| 10 | Davit
#tools
Полностью нативное macOS-приложение для управления контейнерами на платформе Apple (apple/container), без Docker Desktop, Electron и фоновых сервисов. Общается напрямую с демоном Apple по XPC. Каждый контейнер запускается в собственном легковесном VM через Apple Virtualization framework.
К сожалению, не имеет 100% docker CLI/API-совместимости, поэтому не замена для сложных скриптованных CI-пайплайнов, но для разработки "run/compose/build" подойдет
Кста, а кто-то пользуется podman?
https://kodikapusta.ru/tools/22-davit
Поддержать проект на boosty и читать в MAX | 447 |
| 11 | Теперь про Go и Playdate доступен и на вквидео и на рутубе
вквидео https://vkvideo.ru/video-228916121_456239441
рутуб https://rutube.ru/video/338ceeb9741a5f53acf04b58b1ddff3d/
ну и на ютубе тоже посмотрите https://www.youtube.com/watch?v=TH1q-Yt8Jwc
Playdate — это компактная портативная игровая консоль от компании Panic и Teenage Engineering. У консоли черно-белый экран 2,7 дюйма без подсветки, необычное механическое управление крутилой кранком
В этом видео научимся писать программы под playdate на Go и напишем приложение для чтения новостей с сайта kodikapusta.ru | 878 |
| 12 | А теперь переписываем на Zig
#zig #rust
Окей, Bun переписывают с Zig на Rust. Но вы что думаете, только на Rust всё переписывают? Нифига!
Команда языка Roc за полтора года переписала свой 300 000-строчный компилятор с Rust на Zig и реализовала почти весь функционал оригинала.
Основной причиной стала потребность в полном контроле над управлением памятью и архитектурная перестройка вокруг новой системы дефункционализации замыканий, которая потребовала переписать почти весь компилятор.
Автор отмечает, что выбор между Rust и Zig не опирался на memory safety, но Zig дал желанные сверхбыстрые инкрементальные сборки, встроенную поддержку кастомных аллокаторов, нестандартных целочисленных типов и упакованных структур. При этом автор, судя по всему, любит Rust и скучает по derive-макросам, приватным полям, трейтам и бесшовным обновлениям Rust, а значит, выбор был вполне объективным
Ну и что, что вы ничего не слышали про Roc
https://kodikapusta.ru/news/1126-a-teper-perepisyvaem-na-zig
Поддержать проект на boosty и читать в MAX | 362 |
| 13 | Запускаем DOOM на базе данных
#db #fun
Разработчики Turso портировали оригинальный Doom на байткод VDBE — виртуальную машину SQLite.
Они написали целый компилятор vdbecc, который переводит LLVM IR в инструкции VDBE, а всю C-память игры разместили в одном BLOB-столбце таблицы. Чтение и запись идут через b-tree-страницы базы данных, которая фактически работает как MMU.
Кадры отрисовываются как строки результата одного бесконечного SELECT, управление передается через bind-параметры, а сохранение игры - это просто запись базы на диск.
Ребята хотели порекламироваться и показать, что байткод SQLite можно использовать как универсальную платформу для пересборки любых СУБД, включая грядущий Postgres на Rust, о котором я уже упоминал.
https://kodikapusta.ru/news/1125-zapuskaem-doom-na-baze-dannykh
Поддержать проект на boosty и читать в MAX | 323 |
| 14 | Запилил еще один видос. В этот рас рассказываю про программирование на Go под Playdate
Пока только на Ютубе https://www.youtube.com/watch?v=TH1q-Yt8Jwc | 975 |
| 15 | Объединение запросов
#golang
Статья объясняет технику объединения запросов на Go с помощью пакета singleflight для борьбы с проблемой "громового стада". Когда после истечения популярного ключа в кэше сотни одновременных запросов промахиваются и каждый выполняет собственный идентичный запрос к базе данных, перегружая ее и рискуя вызвать постоянный каскадный отказ.
Но решение есть - использовать метод Group.Do с заданным ключом. Это гарантирует выполнение функции не более одного раза для ключа за раз: первый вызывающий выполняет запрос, а остальные ждут его и получают тот же результат, при этом singleflight обычно оборачивает только путь промаха кэша.
Автор подробно разбирает подводные камни: разделяемый вызов означает, что одна ошибка или один медленный запрос бьет по всем ждущим, поэтому стоит использовать DoChan с собственным таймаутом и context.WithoutCancel, чтобы отмена одного вызывающего не рушила остальных, а также помнить, что все получают один и тот же объект.
Отдельно обсуждается инструментирование и вопрос распределенного выполнения
https://kodikapusta.ru/news/1124-ob-edinenie-zaprosov
Поддержать проект на boosty и читать в MAX | 397 |
| 16 | А зачем нужны 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 | 404 |
| 17 | История в меню
#fun
Не хочу никаких сложных тем в пятницу. Лучше посмотрите на эту подборку красивых американских меню более чем столетней давности. Умели же!
https://kodikapusta.ru/news/1121-istoriia-meniu
Поддержать проект на boosty и читать в MAX | 389 |
| 18 | Ante
#lang
Пятница! Новый язык программирования - Ante!
Автор рассказывает про этот экспериментальный язык, который сделал шаг к тому, что раньше считалось невозможным: объединить подсчет ссылок и проверку заимствований без риска падений в рантайме, в отличие от Rust с его Rc<RefCell> и Swift с проверками эксклюзивности.
Ключевая идея - "стабильность формы" (я хз как нормально перевести shape-stability). Пока никто не может уничтожить объект, можно безопасно иметь несколько мутабельных ссылок на структуру и ее поля одновременно, а типы можно пометить как шаренные (че-то типа Rc) для автоматического подсчета ссылок.
У подхода есть недостаток - он требует рекурсивного анализа типов, что работает довольно хрупко, поэтому создатель языка ищет более надежные варианты
https://kodikapusta.ru/news/1112-ante
Поддержать проект на boosty и читать в MAX | 413 |
| 19 | Borrowed & Owned 🦀
#rust #tools
Открытая, курируемая сообществом коллекция ресурсов для изучения языка Rust: книг, видео, курсов, репозиториев, блогов и прочего. Есть удобный поиск с фильтрами по категории, уровню и бесплатности
https://kodikapusta.ru/tools/21-borrowed-and-owned
Поддержать проект на boosty и читать в MAX | 410 |
| 20 | 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 | 1 319 |
