databasus
#db #tools #golang
Селфхостед инструмент для резервного копирования PostgreSQL, ориентированный на Point-in-Time Recovery с низкими RPO/RTO. Он поддерживает физические и логические бэкапы, гибкое расписание, компрессию 4–8x, верификацию восстановления, политики хранения, множество хранилищ и каналов уведомлений
https://kodikapusta.ru/tools/52-databasus
Поддержать проект на boosty и читать в MAX
#db #tools #golang
Селфхостед инструмент для резервного копирования PostgreSQL, ориентированный на Point-in-Time Recovery с низкими RPO/RTO. Он поддерживает физические и логические бэкапы, гибкое расписание, компрессию 4–8x, верификацию восстановления, политики хранения, множество хранилищ и каналов уведомлений
https://kodikapusta.ru/tools/52-databasus
Поддержать проект на boosty и читать в MAX
Интересные баги
#golang
Команда sigma star(хз кто это) нашла и исправила давнюю ошибку в рантайме Go, проявлявшуюся только на 32-битных встраиваемых Linux-системах.
Приложение периодически падало с ошибкой "runtime: netpoll: eventfd ready for something unexpected". Корень проблемы оказался в том, что Go хранит в 8-байтовом поле ev.Data два типа указателей - сырой указатель на event fd и тегированный указатель на pollDesc, а сравнение на 32-битных little-endian системах считывает лишь младшие 4 байта, из-за чего адрес event fd алиасился с fdseq. Как только долгоживущая программа накапливала миллионы пересозданных pollDesc, netpoll путал сокет с event fd и падал
Ребята прям недра залезли. Представляю как они все это дебажили
https://kodikapusta.ru/news/1198-interesnye-bagi
Поддержать проект на boosty и читать в MAX
#golang
Команда sigma star(хз кто это) нашла и исправила давнюю ошибку в рантайме Go, проявлявшуюся только на 32-битных встраиваемых Linux-системах.
Приложение периодически падало с ошибкой "runtime: netpoll: eventfd ready for something unexpected". Корень проблемы оказался в том, что Go хранит в 8-байтовом поле ev.Data два типа указателей - сырой указатель на event fd и тегированный указатель на pollDesc, а сравнение на 32-битных little-endian системах считывает лишь младшие 4 байта, из-за чего адрес event fd алиасился с fdseq. Как только долгоживущая программа накапливала миллионы пересозданных pollDesc, netpoll путал сокет с event fd и падал
Ребята прям недра залезли. Представляю как они все это дебажили
https://kodikapusta.ru/news/1198-interesnye-bagi
Поддержать проект на boosty и читать в MAX
❤1
Исполняемы файл - это SQLite база
#db #fun
Куда только этот ваш SQLite не запихивали
Статья рассказывает о проекте SELF - замене формата исполняемых файлов ELF на SQLite-базу данных, которую можно реально запускать через chmod +x и ./hello.
ELF по сути уже является базой данных, но автор вручную переизобретает ее примитивы. В SELF заголовок хранится в виде пар ключ/значение, сегменты - таблицей с BLOB, а символы - одной таблицей с обычным b-tree индексом вместо. Загрузчик self-exec мапит сегменты, релоцирует и прыгает в точку входа, а динамическое связывание можно делать через glibc rtld-audit или полностью SQL-линкером self-ld.
Все инструменты для работы с исполняемым файлом сводятся к SQL-запросам над базой, а опциональные отладочные таблицы можно удалять транзакцией
Используем?
https://kodikapusta.ru/news/1201-ispolniaemy-fail-eto-sqlite-baza
Поддержать проект на boosty и читать в MAX
#db #fun
Куда только этот ваш SQLite не запихивали
Статья рассказывает о проекте SELF - замене формата исполняемых файлов ELF на SQLite-базу данных, которую можно реально запускать через chmod +x и ./hello.
ELF по сути уже является базой данных, но автор вручную переизобретает ее примитивы. В SELF заголовок хранится в виде пар ключ/значение, сегменты - таблицей с BLOB, а символы - одной таблицей с обычным b-tree индексом вместо. Загрузчик self-exec мапит сегменты, релоцирует и прыгает в точку входа, а динамическое связывание можно делать через glibc rtld-audit или полностью SQL-линкером self-ld.
Все инструменты для работы с исполняемым файлом сводятся к SQL-запросам над базой, а опциональные отладочные таблицы можно удалять транзакцией
Используем?
https://kodikapusta.ru/news/1201-ispolniaemy-fail-eto-sqlite-baza
Поддержать проект на boosty и читать в MAX
safebucket
#tools #golang
Селфхостед платформа для обмена файлами, написанная на Go и React, с подключаемой инфраструктурой, где файлы идут в обход сервера через presigned-URL.
Ключевые возможности:
- прямые загрузки/скачивания мимо сервера,
- заменяемые компоненты,
- SSO через любой OIDC-провайдер плюс локальная авторизация,
- ролевой доступ на уровне платформы и «бакета»,
- публичный шеринг ссылками с опциями
И еще многое другое
https://kodikapusta.ru/tools/53-safebucket
Поддержать проект на boosty и читать в MAX
#tools #golang
Селфхостед платформа для обмена файлами, написанная на Go и React, с подключаемой инфраструктурой, где файлы идут в обход сервера через presigned-URL.
Ключевые возможности:
- прямые загрузки/скачивания мимо сервера,
- заменяемые компоненты,
- SSO через любой OIDC-провайдер плюс локальная авторизация,
- ролевой доступ на уровне платформы и «бакета»,
- публичный шеринг ссылками с опциями
И еще многое другое
https://kodikapusta.ru/tools/53-safebucket
Поддержать проект на boosty и читать в MAX
👍1
Горутины повсюду
#golang
Частенько мы пишем Go-сервисы, не задумываясь о том, кто и как запускает наши горутины. Возникает феномен "случайного рантайма приложения": когда Go-сервис обрастает множеством долгоживущих горутин, их время жизни и связи оказываются неявно размазанными по коду инициализации. Это становится особенно очевидным, когда нужно реализовать graceful shutdown.
Автор на примере сервиса для 3D-принт-фермы показывает, как выделить конкурентные компоненты в явные модули с помощью небольшой библиотеки backplane. Каждый модуль - это обычная функция вида func(ctx context.Context, deps ...interface{}) error, где каналы задают потоки сообщений, а всё остальное - ресурсы.
Когда в приложении появляется несколько долгоживущих конкурентных компонентов, их архитектура заслуживает явного представления в коде, а не существования лишь в виде побочных эффектов при запуске
https://kodikapusta.ru/news/1199-gorutiny-vezde
Поддержать проект на boosty и читать в MAX
#golang
Частенько мы пишем Go-сервисы, не задумываясь о том, кто и как запускает наши горутины. Возникает феномен "случайного рантайма приложения": когда Go-сервис обрастает множеством долгоживущих горутин, их время жизни и связи оказываются неявно размазанными по коду инициализации. Это становится особенно очевидным, когда нужно реализовать graceful shutdown.
Автор на примере сервиса для 3D-принт-фермы показывает, как выделить конкурентные компоненты в явные модули с помощью небольшой библиотеки backplane. Каждый модуль - это обычная функция вида func(ctx context.Context, deps ...interface{}) error, где каналы задают потоки сообщений, а всё остальное - ресурсы.
Когда в приложении появляется несколько долгоживущих конкурентных компонентов, их архитектура заслуживает явного представления в коде, а не существования лишь в виде побочных эффектов при запуске
https://kodikapusta.ru/news/1199-gorutiny-vezde
Поддержать проект на boosty и читать в MAX
Конкурентный сервер на Go
#golang #learn
Это восьмая часть серии о конкурентных сетевых серверах, в этот раз посвященная Go. В прошлый раз было про Rust
Автор показывает, как язык решает описанные ранее задачи. Статья начинается с последовательного сервера с state machine, затем показывает конкурентную версию с одной горутиной на клиента.
Для ограничения параллелизма предлагаются счетный семафор на канале и паттерн воркер пул, когда нужно сохранять состояние между задачами.
Логично, что в Go почти никогда не нужно прибегать к async/event-driven программированию, потому что конкурентность встроена в язык и рантайм. Но интересно смотреть в сравнении с другими языками
https://kodikapusta.ru/news/1203-konkurentnyi-server-na-go
Поддержать проект на boosty и читать в MAX
#golang #learn
Это восьмая часть серии о конкурентных сетевых серверах, в этот раз посвященная Go. В прошлый раз было про Rust
Автор показывает, как язык решает описанные ранее задачи. Статья начинается с последовательного сервера с state machine, затем показывает конкурентную версию с одной горутиной на клиента.
Для ограничения параллелизма предлагаются счетный семафор на канале и паттерн воркер пул, когда нужно сохранять состояние между задачами.
Логично, что в Go почти никогда не нужно прибегать к async/event-driven программированию, потому что конкурентность встроена в язык и рантайм. Но интересно смотреть в сравнении с другими языками
https://kodikapusta.ru/news/1203-konkurentnyi-server-na-go
Поддержать проект на boosty и читать в MAX
resterm
#golang #tools
Терминальный API-клиент и "workbench" для REST, GraphQL, gRPC, WebSocket и SSE, построенный вокруг простых файлов .http/.rest, которые можно diff'ить и хранить в git.
В отличие от Postman, автоматизация живёт прямо в файлах запросов через директивы, плюс собственный язык выражений RestermScript с хуками на JavaScript. Есть встроенная авторизация, SSH-туннели и Kubernetes port-forward, мок-серверы с правилами сопоставления и верификацией вызовов, трейсинг/таймлайн с экспортом в OpenTelemetry, профилирование и сравнение прогонов, импорт OpenAPI и curl-команд. Все локально, без облака и телеметрии, и с явной позицией "никакой интеграции ИИ"
https://kodikapusta.ru/tools/54-resterm
Поддержать проект на boosty и читать в MAX
#golang #tools
Терминальный API-клиент и "workbench" для REST, GraphQL, gRPC, WebSocket и SSE, построенный вокруг простых файлов .http/.rest, которые можно diff'ить и хранить в git.
В отличие от Postman, автоматизация живёт прямо в файлах запросов через директивы, плюс собственный язык выражений RestermScript с хуками на JavaScript. Есть встроенная авторизация, SSH-туннели и Kubernetes port-forward, мок-серверы с правилами сопоставления и верификацией вызовов, трейсинг/таймлайн с экспортом в OpenTelemetry, профилирование и сравнение прогонов, импорт OpenAPI и curl-команд. Все локально, без облака и телеметрии, и с явной позицией "никакой интеграции ИИ"
https://kodikapusta.ru/tools/54-resterm
Поддержать проект на boosty и читать в MAX
👍1
Оптимизация DNS-кэша
#rust #net
Ребята из Cloudflare рассказывают, как пять последовательных оптимизаций раскладки DNS-кэша Big Pineapple сократили потребление памяти на запись на 56% - с 953 до 420 байт. Освободили около 100 терабайт ОЗУ по всем машинам, а также ускорили кэш.
Они сделали замену Vec/String на Box<[T]>/Box<str>, объединенили три списка секций ответа в один с 2-байтовыми смещениями вместо указателей, отказались от хранения owner-имени записи, когда оно совпадает с запрошенным доменом, упаковали маленькие варианты enum RecordData inline с боксом крупных, и наконец реализовали хранение данных записей в сыром wire-формате единым Box<[u8]>
При масштабе в 250+ миллиардов записей экономия даже одного байта на запись дает гигабайты памяти, и круто что экономию памяти удалось совместить с ростом производительности
https://kodikapusta.ru/news/1204-optimizatsiia-dns-kesha
Поддержать проект на boosty и читать в MAX
#rust #net
Ребята из Cloudflare рассказывают, как пять последовательных оптимизаций раскладки DNS-кэша Big Pineapple сократили потребление памяти на запись на 56% - с 953 до 420 байт. Освободили около 100 терабайт ОЗУ по всем машинам, а также ускорили кэш.
Они сделали замену Vec/String на Box<[T]>/Box<str>, объединенили три списка секций ответа в один с 2-байтовыми смещениями вместо указателей, отказались от хранения owner-имени записи, когда оно совпадает с запрошенным доменом, упаковали маленькие варианты enum RecordData inline с боксом крупных, и наконец реализовали хранение данных записей в сыром wire-формате единым Box<[u8]>
При масштабе в 250+ миллиардов записей экономия даже одного байта на запись дает гигабайты памяти, и круто что экономию памяти удалось совместить с ростом производительности
https://kodikapusta.ru/news/1204-optimizatsiia-dns-kesha
Поддержать проект на boosty и читать в MAX
🔥3
Введение в Racket
#lang
Нового языка на сегодня нет, но есть интересный вариант лиспа - Racket. К лиспам я вобще с трепетом отношусь, но никак не хватает времени со всем разобраться
Это дружелюбное введение в язык Racket для начинающих. Статья кратко излагает историю: от Лиспа 1958 года и Джона Маккарти через Scheme 1975 к Racket 2010. Автор отмечает, что многие "современные" идеи - сборка мусора, функции первого класса, REPL, условные выражения гомоиконность - родились именно в Лиспе.
Racket - "язык для создания языков", где синтаксис принадлежит программисту
https://kodikapusta.ru/news/1206-vvedenie-v-racket
Поддержать проект на boosty и читать в MAX
#lang
Нового языка на сегодня нет, но есть интересный вариант лиспа - Racket. К лиспам я вобще с трепетом отношусь, но никак не хватает времени со всем разобраться
Это дружелюбное введение в язык Racket для начинающих. Статья кратко излагает историю: от Лиспа 1958 года и Джона Маккарти через Scheme 1975 к Racket 2010. Автор отмечает, что многие "современные" идеи - сборка мусора, функции первого класса, REPL, условные выражения гомоиконность - родились именно в Лиспе.
Racket - "язык для создания языков", где синтаксис принадлежит программисту
https://kodikapusta.ru/news/1206-vvedenie-v-racket
Поддержать проект на boosty и читать в MAX
TUIOS
#golang #fun
Современный терминальный мультиплексор и оконный менеджер, написанный на Go, с vim-подобным модальным интерфейсом, несколькими панелями, 9 воркспейсами, BSP-тайлингом, поддержкой kitty graphics protocol и командной палитрой - все внутри существующего терминала. Построен на Charm-стеке
Ну это прикольно
https://kodikapusta.ru/tools/55-tuios
Поддержать проект на boosty и читать в MAX
#golang #fun
Современный терминальный мультиплексор и оконный менеджер, написанный на Go, с vim-подобным модальным интерфейсом, несколькими панелями, 9 воркспейсами, BSP-тайлингом, поддержкой kitty graphics protocol и командной палитрой - все внутри существующего терминала. Построен на Charm-стеке
Ну это прикольно
https://kodikapusta.ru/tools/55-tuios
Поддержать проект на boosty и читать в MAX
DDD во времена AI
#golang #ai
Статья утверждает, что с ростом AI-кодинга идеи Domain-Driven Design становятся еще актуальнее
DDD никогда не был строго про код - главная сложность всегда заключалась в понимании предметной области и ее моделировании. Автор подчеркивает, что доменная модель - это не артефакт. Даже если ИИ-агент сгенерирует внушительный документ или план, это не поможет команде понять бизнес-задачу, а ценность knowledge crunching в том, чтобы самому разобраться в домене и уметь судить, осмысленен ли результат агента. Полностью пожжерживаю автора в этом
Он советует проектировать решение командой до написания кода, использовать ограниченные контексты для точных имен и точных промптов, а не делегировать мышление ИИ. Иначе некому будет оценить корректность результата.
Даже если весь код пишет ИИ, инженеру нужно глубоко знать домен, чтобы направлять агента, как напарника. Аминь
https://kodikapusta.ru/news/1202-ddd-vo-vremena-ai
Поддержать проект на boosty и читать в MAX
#golang #ai
Статья утверждает, что с ростом AI-кодинга идеи Domain-Driven Design становятся еще актуальнее
DDD никогда не был строго про код - главная сложность всегда заключалась в понимании предметной области и ее моделировании. Автор подчеркивает, что доменная модель - это не артефакт. Даже если ИИ-агент сгенерирует внушительный документ или план, это не поможет команде понять бизнес-задачу, а ценность knowledge crunching в том, чтобы самому разобраться в домене и уметь судить, осмысленен ли результат агента. Полностью пожжерживаю автора в этом
Он советует проектировать решение командой до написания кода, использовать ограниченные контексты для точных имен и точных промптов, а не делегировать мышление ИИ. Иначе некому будет оценить корректность результата.
Даже если весь код пишет ИИ, инженеру нужно глубоко знать домен, чтобы направлять агента, как напарника. Аминь
https://kodikapusta.ru/news/1202-ddd-vo-vremena-ai
Поддержать проект на boosty и читать в MAX
Офис на заднем дворе
#fun
Чувак делится опытом постройки офиса на заднем дворе. Проект обошёлся примерно в $19 478, что вдвое-втрое дешевле готового решения или найма строительной компании.
Автор рекомендует ставить больше розеток, чем кажется необходимым, тщательно продумывать ориентацию и расположение окон, а также следить за уровнем CO₂ в герметичном помещении.
У меня будет такой же офис
https://kodikapusta.ru/news/1205-ofis-na-zadnem-dvore
Поддержать проект на boosty и читать в MAX
#fun
Чувак делится опытом постройки офиса на заднем дворе. Проект обошёлся примерно в $19 478, что вдвое-втрое дешевле готового решения или найма строительной компании.
Автор рекомендует ставить больше розеток, чем кажется необходимым, тщательно продумывать ориентацию и расположение окон, а также следить за уровнем CO₂ в герметичном помещении.
У меня будет такой же офис
https://kodikapusta.ru/news/1205-ofis-na-zadnem-dvore
Поддержать проект на boosty и читать в MAX
👍4
У нас отмена!
#golang
Статья разбирает, как пакет singleflight в Go предотвращает лавину запросов к кэшу. Он прекрасно схлопывает одинаковые запросы в одну операцию, но есть нюансы
Автор на примере IsleDB показывает "ловушку контекста первого вызывающего": если фетч использует контекст лидера, тот может отменить операцию для всех, а если контекст отсоединен, то хрен сделаешь грейсфул шатдаун. В итоге автор строит собственный протокол конкурентности с тремя гарантиями - каждый вызывающий может независимо прекратить ожидание, общая операция отменяется при уходе последнего ждущего, а гатдаун отклоняет новые вызовы, отменяет активную работу и ждет остановки всех воркеров
https://kodikapusta.ru/news/1197-u-nas-otmena
Поддержать проект на boosty и читать в MAX
#golang
Статья разбирает, как пакет singleflight в Go предотвращает лавину запросов к кэшу. Он прекрасно схлопывает одинаковые запросы в одну операцию, но есть нюансы
Автор на примере IsleDB показывает "ловушку контекста первого вызывающего": если фетч использует контекст лидера, тот может отменить операцию для всех, а если контекст отсоединен, то хрен сделаешь грейсфул шатдаун. В итоге автор строит собственный протокол конкурентности с тремя гарантиями - каждый вызывающий может независимо прекратить ожидание, общая операция отменяется при уходе последнего ждущего, а гатдаун отклоняет новые вызовы, отменяет активную работу и ждет остановки всех воркеров
https://kodikapusta.ru/news/1197-u-nas-otmena
Поддержать проект на boosty и читать в MAX
👍2🫡1
Прокси для базы данных
#golang
Автор пишет простой такой прокси на Go в учебных целях вдохновившись статьей Figma о том, как их команда баз данных построила DBProxy для перехвата SQL-запросов и маршрутизации их по разным узлам Postgres.
Он реализует проксирование TCP-соединений между клиентом и MySQL: перехватывает пакеты, находит команду COM_QUERY по структуре пакета MySQL и переписывает имя таблицы. В статье объясняется структура MySQL-пакета и демонстрируются базовые принципы, на которых строятся настоящие решения для шардинга, валидации запросов, безопасности и наблюдаемости
https://kodikapusta.ru/news/1208-proksi-dlia-bazy-dannykh
Поддержать проект на boosty и читать в MAX
#golang
Автор пишет простой такой прокси на Go в учебных целях вдохновившись статьей Figma о том, как их команда баз данных построила DBProxy для перехвата SQL-запросов и маршрутизации их по разным узлам Postgres.
Он реализует проксирование TCP-соединений между клиентом и MySQL: перехватывает пакеты, находит команду COM_QUERY по структуре пакета MySQL и переписывает имя таблицы. В статье объясняется структура MySQL-пакета и демонстрируются базовые принципы, на которых строятся настоящие решения для шардинга, валидации запросов, безопасности и наблюдаемости
https://kodikapusta.ru/news/1208-proksi-dlia-bazy-dannykh
Поддержать проект на boosty и читать в MAX
👍3
Агенты лучше нас
#ai
Автор утверждает, что оптимизация производительности перестала быть дорогой специализацией
LLM-агенты настолько удешевили сложную работу, что ее может делать любой, кто способен набрать несколько предложений. Он приводит примеры: свой regex-движок FRE, который агент за пару минут ускорил под реальные запросы и игровой ИИ для Azul, который стал сильнейшим в мире при сравнительно небольших затратах
Он считает, что будущее за "динамическим кастомным софтом", подогнанным под конкретную рабочую нагрузку
https://kodikapusta.ru/news/1207-agenty-luchshe-nas
Поддержать проект на boosty и читать в MAX
#ai
Автор утверждает, что оптимизация производительности перестала быть дорогой специализацией
LLM-агенты настолько удешевили сложную работу, что ее может делать любой, кто способен набрать несколько предложений. Он приводит примеры: свой regex-движок FRE, который агент за пару минут ускорил под реальные запросы и игровой ИИ для Azul, который стал сильнейшим в мире при сравнительно небольших затратах
Он считает, что будущее за "динамическим кастомным софтом", подогнанным под конкретную рабочую нагрузку
https://kodikapusta.ru/news/1207-agenty-luchshe-nas
Поддержать проект на boosty и читать в MAX
🎉1
Портирование на Godot с помощью LLM
#gamedev #godot
Автор описывает, как портировал свою игру Babylonian Twins 1993 года, написанную на 68000 ассемблере для Amiga 500, под Godot с помощью LLM. Использовал Claude Fable 5
LLM сумел не только перенести его собственный C++-движок года в Godot за один вечер, но и разобрать оригинальные 72 758 строк ассемблера без комментариев: собрать их заново до байтовой идентичности с выпущенными бинарниками, восстановить все форматы данных и даже запустить его же редактор карт 1993 года в эмуляторе.
Конечно, без ошибок не обошлось. Например, "охрана" поражала игрока через сплошную скалу из-за неправильных проверок, а двери оказались нарисованными кодом в рантайме, а не зашитыми в карту. Автор подчеркивает, что LLM сам делал всю техническую работу, а он лишь тестировал и принимал решения
https://kodikapusta.ru/news/1209-portirovanie-na-godot-s-pomoshch-iu-llm
Поддержать проект на boosty и читать в MAX
#gamedev #godot
Автор описывает, как портировал свою игру Babylonian Twins 1993 года, написанную на 68000 ассемблере для Amiga 500, под Godot с помощью LLM. Использовал Claude Fable 5
LLM сумел не только перенести его собственный C++-движок года в Godot за один вечер, но и разобрать оригинальные 72 758 строк ассемблера без комментариев: собрать их заново до байтовой идентичности с выпущенными бинарниками, восстановить все форматы данных и даже запустить его же редактор карт 1993 года в эмуляторе.
Конечно, без ошибок не обошлось. Например, "охрана" поражала игрока через сплошную скалу из-за неправильных проверок, а двери оказались нарисованными кодом в рантайме, а не зашитыми в карту. Автор подчеркивает, что LLM сам делал всю техническую работу, а он лишь тестировал и принимал решения
https://kodikapusta.ru/news/1209-portirovanie-na-godot-s-pomoshch-iu-llm
Поддержать проект на boosty и читать в MAX
👍1
Как построить Diffusion Language Model
#ai
Это, по сути, введение в диффузионные языковые модели, альтернативу авторегрессивным LLM, которые генерируют текст по токену слева направо. Вместо этого диффузия создает сразу всю последовательность и итеративно "денойзит" ее. Такой подход дает исправление ошибок, возможность менять скорость за счет числа шагов и двунаправленный контекст
Статья разбирает строительные блоки современных моделей - блочную диффузию для переменной длины, энкодер-декодер архитектуру, ремаскинг для исправления ошибок, дистилляцию для ускорения, контролируемую генерацию и постобучение.
Автор описывает реальные модели вроде Mercury 2, Gemma Diffusion, Nemotron Diffusion
https://kodikapusta.ru/news/1210-kak-postroit-diffusion-language-model
Поддержать проект на boosty и читать в MAX
#ai
Это, по сути, введение в диффузионные языковые модели, альтернативу авторегрессивным LLM, которые генерируют текст по токену слева направо. Вместо этого диффузия создает сразу всю последовательность и итеративно "денойзит" ее. Такой подход дает исправление ошибок, возможность менять скорость за счет числа шагов и двунаправленный контекст
Статья разбирает строительные блоки современных моделей - блочную диффузию для переменной длины, энкодер-декодер архитектуру, ремаскинг для исправления ошибок, дистилляцию для ускорения, контролируемую генерацию и постобучение.
Автор описывает реальные модели вроде Mercury 2, Gemma Diffusion, Nemotron Diffusion
https://kodikapusta.ru/news/1210-kak-postroit-diffusion-language-model
Поддержать проект на boosty и читать в MAX
QCRACK.EXE
#fun
Как раз закончил перечитывать книгу "Повелители DOOM" а тут интересная статья про id Software
В 1996 году id Software выпустила шареваре версию Quake на CD-ROM за $9.95. Но на самом деле на этом диске бесплатная игра занимала лишь 22 МБ, тут же лежали зашифрованные версии всего своего каталога, которые можно было разблокировать по телефону - позвонив по номеру 800, назвав код CHALLENGE и получив серийник.
Идея казалась надежной как швейцарские часы. Но через 39 дней хакерская группа GNOMON выпустила QCRACK.EXE, который генерировал серийник автоматически. Оказалось, что серийный номер не содержал никакого секрета, а программа FLOW.EXE на самом CD умела вычислять его сама и просто сверяла с введенным пользователем.
Это было провальное издание - почти 150 000 дисков застряли на складах.
Кстати, автор статьи - Fabien Sanglard. Это оч крутой чувак и в его блоге много про внутрянку DOOM и Quake
https://kodikapusta.ru/news/1212-qcrack-exe
Поддержать проект на boosty и читать в MAX
#fun
Как раз закончил перечитывать книгу "Повелители DOOM" а тут интересная статья про id Software
В 1996 году id Software выпустила шареваре версию Quake на CD-ROM за $9.95. Но на самом деле на этом диске бесплатная игра занимала лишь 22 МБ, тут же лежали зашифрованные версии всего своего каталога, которые можно было разблокировать по телефону - позвонив по номеру 800, назвав код CHALLENGE и получив серийник.
Идея казалась надежной как швейцарские часы. Но через 39 дней хакерская группа GNOMON выпустила QCRACK.EXE, который генерировал серийник автоматически. Оказалось, что серийный номер не содержал никакого секрета, а программа FLOW.EXE на самом CD умела вычислять его сама и просто сверяла с введенным пользователем.
Это было провальное издание - почти 150 000 дисков застряли на складах.
Кстати, автор статьи - Fabien Sanglard. Это оч крутой чувак и в его блоге много про внутрянку DOOM и Quake
https://kodikapusta.ru/news/1212-qcrack-exe
Поддержать проект на boosty и читать в MAX
👍3