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

Код и Капуста

Відкрити в 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 - это нативная, локальная
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 агентов,
Научные статьи #learn Это интерактивная семантическая карта ~3 миллионов статей arXiv. Авторы собирали статьи для AI агентов, но люди тоже могут почитать Хотели начать читать научные статьи, но не знали с чего начать? Вот вам знак https://kodikapusta.ru/news/1132-nauchnye-stat-i Поддержать проект на boosty и читать в MAX
191
3
Убираем ограничения #golang Автор разбирает продвинутый прием устранения проверки границ в горячих путях Go Когда компилятор
Убираем ограничения #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
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 В статье выдвигается и математически обосновывается тезис о "псевдокалипсисе" - неизбежном конце аноним
Псевдопокалипсис #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 с п
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-резолверов чу
dnsfs #golang #tools Шуточно-гениальный проект Бена Картрайта Файловая система FUSE, хранящая данные в кеше DNS-резолверов чужих людей. Файл разбивается на чанки, которые кодируются в DNS-запросы к специально настроенному авторитативному DNS-серверу. Резолверы по всему миру кешируют ответы - и данные физически распределяются по глобальной инфраструктуре DNS, буквально "true cloud storage" Чтение файла восстанавливается из тех же DNS-запросов: если ответ закеширован - данные возвращаются мгновенно, если кеш протух - сервер перегенерирует чанк https://kodikapusta.ru/tools/23-dnsfs Поддержать проект на boosty и читать в MAX
469
8
Интернет от самых основ #learn #net Масштабный интерактивный разбор устройства интернета от первых принципов до наших дней. Н
Интернет от самых основ #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 (
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
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 всё переписыв
А теперь переписываем на 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 — виртуальную машину
Запускаем 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 для борьбы с п
Объединение запросов #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? #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 Не хочу никаких сложных тем в пятницу. Лучше посмотрите на эту подборку красивых американских меню более
История в меню #fun Не хочу никаких сложных тем в пятницу. Лучше посмотрите на эту подборку красивых американских меню более чем столетней давности. Умели же! https://kodikapusta.ru/news/1121-istoriia-meniu Поддержать проект на boosty и читать в MAX
389
18
Ante #lang Пятница! Новый язык программирования - Ante! Автор рассказывает про этот экспериментальный язык, который сделал ша
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: книг, видео, ку
Borrowed & Owned 🦀 #rust #tools Открытая, курируемая сообществом коллекция ресурсов для изучения языка Rust: книг, видео, курсов, репозиториев, блогов и прочего. Есть удобный поиск с фильтрами по категории, уровню и бесплатности https://kodikapusta.ru/tools/21-borrowed-and-owned Поддержать проект на boosty и читать в MAX
410
20
mmap или pread #golang Автор статьи - инженер из VictoriaMetrics. На примере реального движка хранения VictoriaLogs разбирает
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