Local-first и децентрализация – Telegram
Local-first и децентрализация
712 subscribers
140 photos
19 videos
3 files
312 links
Replicated Object Notation,
CRDT, распределёнщина и децентрализация.
Ведёт @gritzko
Чат @Ronzgovory
Download Telegram
В ходе курса из Chotki начал расти интересный побег - "protobuf для CRDT", он же RDX, Replicated Data Interchange Format. Он заметно отличается от последних версий RON, что оправдывает смену названия.
(Контекст: "единая библиотека CRDT типов", оно же "единый формат CRDT данных" - это такой Святой Грааль local-first)
2🤡2🤔1
Local-first и децентрализация
В ходе курса из Chotki начал расти интересный побег - "protobuf для CRDT", он же RDX, Replicated Data Interchange Format. Он заметно отличается от последних версий RON, что оправдывает смену названия. (Контекст: "единая библиотека CRDT типов", оно же "единый…
Для новоприбывших поясняю: этот канал долго назывался "RON и тайны децентрализации", потому что автор долгое время работал над RON, форматом сериализации для CRDT. В том плане, чтобы можно было обмениваться данными не только в топологии клиент-сервер, но и в оффлайне и в разных децентрализованных сценариях. На github лежит изрядное количество реализаций RON, все разных версий - это был исследовательский проект. Похоже, количество переходит в качество - RDX выглядит (для меня лично) более зрело. В том плане, в том числе, что непонятно, что ещё можно было бы убрать :)

А задача "убирания лишнего" - это и есть суть вопроса, потому что RON/RDX, в отличие от protobuf/CBOR/JSON/flatbuffers/чегоугодно, содержит метаданные, необходимые для корректной репликации/синхронизации/мержа (которые и портят жизнь всякими патологическими случаями, когда их объём начинает превышать объём данных).
👍71🤔1💩1🤡1🖕1
Кстати, блиц-опрос, пожалуйста без заглядывания в доки. Сколько в protobuf видов интов (целочисленных типов) ?
Anonymous Poll
9%
1
31%
3
37%
6
23%
12
🤔2🤡2
Local-first и децентрализация
Кстати, блиц-опрос, пожалуйста без заглядывания в доки. Сколько в protobuf видов интов (целочисленных типов) ?
84 голоса, 11% 29% 40% 20%
1. int32,
2. int64,
3. uint32,
4. uint64,
5. sint32,
6. sint64,
7. fixed32,
8. fixed64,
9. sfixed32,
10. sfixed64
Получается 10, никто правильно не ответил. Ха-ха. Ну либо 11, если с bool. Ну либо 12, с double и float, но тогда это просто численные типы.
😁10🤡6🤯21
Local-first и децентрализация
Давайте подумаем, какие ещё эксперименты можно ставить на китайских шпионах. Обязательное условие: не должно быть опасности моей жизни.
По-видимому, выкручивание WiFi платки всё ещё работает. Сел в кафе поработать, отошёл на несколько секунд буквально, поворачиваюсь - к ноуту подшмыгнул китаец, внимательно смотрит на экран, запоминает. Зря они так, я всё на GitHub выкладываю.
Странно, что за полтора года ничего вкрутить в ноут не успели.
Или может опасаются, что я как-то найду - это будет ещё неприятней.
🤯12🤣2🤮1💩1🤡1😈1
Испания блокирует Телеграм по жалобам правообладателей (на пиратство). Технически, блокировку должны осуществлять провайдеры. Как в РФ в 2018, помню, пол-интернета глючило, пока Роскомнадзор блокировал случайные диапазоны адресов на всех возможных хостингах. Посмотрим-посмотрим.
👍2🥰21🎉1👌1🍾1
Local-first и децентрализация
Пошёл второй заход на Чётки (CRDT базу данных очень простого вида). Основное изменение: стала ещё проще.
Сегодня утром, хотя и кофе не пил, но что-то нашло, сделал почти все студенческие задания одним махом. Все CRDT типы. FIRST (Float, Int, Reference, String, Tomb~nil) уже были, добавил NZ счётчики (натуральные и целочисленные), ME (мапы и сеты) и вот сейчас смотрю на L (массивы).
Забавность в том, что массивы это Causal Tree, алгоритм, который я же и придумал, но они чуть сложней в реализации.
В конечном счёте NZ и MEL сводятся к iterator heap, это крайне красивая структура данных из LSM баз данных. Что может быть красивей iterator heap? Только iterator heap вложенный в iterator heap (LSM+CRDT).
Такие вот бурные выходные.

P.S. Готовы и каузальные деревья. Тоже через iterator heap.
🔥17🤯5👏31👎1🤡1💊1
Прочитал вот текст Вьюкова, что не бывает безобидных data races. Он там приводит пример очень неожиданных супер-оптимизаций, которые может сделать компилятор, чтобы из вашего доступа двух ниток к инту (который сам безусловно атомарно записывается и читается) тем не менее сделать катастрофу.
Напомнило старый советский анекдот.
Человек прилетел в Грузию, взял такси. Таксист гонит, круто маневрирует, всех обгоняет по встречке, джигит в общем. Впереди красный, таксист - пролетает пулей. У пассажира уже штаны полные. Впереди снова красный. Снова пулей. Пассажир: "Вы почему едете на красный" Таксист: "Патаму чта МАСТЭР!" Гонит дальше, впереди зелёный. Резко раз по тормозам, пассажир лицом бам в доску, кровь, нос держит, спрашивает: "А подему на делёный не едеде?" Таксист: "Слушай, апасна, да? Вдруг там другой мастэр?"
😁16👍5👎1🤡1🥴1
Чотки приобретают относительно играбельный вид. Уже не просто теория распредёлённых типов, а можно узлы пинговать, смотреть как оно мёржится с грехом пополам, даже немношко бенчить.
Декабрь, январь, март - три месяца работы, не полный full-time, но плотно. Пока главное достижение RDX, Chotki всё таки на уровне proof-of-concept пока. Но ещё пара-тройка месяцев работы и будет наверное вполне практически полезно.
Что тут интересного сделано:
1. RDX как сериализация CRDT (кстати обрабатывается без парсинга в объекты, как и нужно делать в БД)
2. RDX впилен в LSM БД через merge operators (рецепт превращения в CRDT годится для RocksDB, Cassandra, всех их клонов и форков)
3. JSON подобный текстовый RDX, парсер на ragel итд (это не JSON всё-таки на экране, это RDX)
4. Довольно забавный механизм пересинхронизации реплик через дельты (лог для синхронизации не нужен)
5. Не менее забавная система объектов и типов (CRDT, они же реплицированные типы, это типы полей, из них состоят объекты, есть "классы" и наследование)
🔥18👍51🤯1
Никита очень успешный предприниматель, 10 лет возгравлял стартап MemSQL (newsql база данных). Сейчас делает постгрес в облаке.
🤔41🤣1
Сегодня прошёлся по CRDT sync / CRDT database проектам на GitHub. Очень густо стало, есть люди которых я вообще не знаю - уже целая индустрия растёт. Не обошлось и без забавных сюрпризов, например "collision-free replication data types (CRDT) and decentralized appendix-only logs" - похоже ChatGPT уже начал создавать свои проекты на GitHub.
Что ж, я предупреждал. Вот уже пишут, что GitHub чистит миллионы фейковых реп с бэкдорами.
1🤔1
Вообще интересно, насколько можно масштабировать "инфраструктуру доверия". В том плане, что я скачиваю дистр, собранный известными людьми, который включает пакеты, собранные известными им людьми, итд. В том плане, что ни на каком шаге не появляется случайно скачанный из интернета пакет, написанный неизвестно кем, либо (сценарий xz) контрибутор оказывается виртуалом и злоумышленником. PGP Web-of-trust уже который десяток лет убиваются строят свою "паутину", и оно даже работает в некоторых узких кругах для очень упёртых людей (типа коммитеров в ядро Linux).
А NPM в этом плане это обезьянник с мартышками, за которыми присматривает полицейский-пенсионер.
В go придумали пару фишек, типа регистрации хэша каждой версии проекта в публичном регистре, так что при некоторой аккуратности можно от очевидных атак уберечься.
В Linux в целом нельзя сказать что дела хорошо, там например во все мэйнстримовые дистры был протащен совершенно катастрофический systemd (а это типа миллиона строк кода, которые имеют доступ ко всему - прощай unix way). Ну и история xz опять же, показывает, что даже целеустремлённый хулиган сможет многого достичь, если запасётся терпением. Слишком большие и необозримые стали дистры.
А вот до опен сорса был порядок (нет не был). В Solaris помню был "баг" - логин по telnet рутом без пароля, в Apple в 2018 такой тоже ловили, только локально, без telnet.
Значит ли это, что мы не можем построить социальную структуру, которая позволит надёжно контролировать >1млн строк кода?
🤔8👍5👎1🤡1🙈1💊1
◌ open a1ece-0
a1ece-302511
◌ cat b0b-6
{_ref:0,Title:"pinc-ponc",Count:223938}
b0b-6
◌ sinc {fid:b0b-6-2,count:1000000,ms:0}
b0b-6-2
1000000 incs complete for b0b-6-2, elapsed 2.587417349s, a1ece-302511..a1ece-3f6751
◌ cat b0b-6
{_ref:0,Title:"pinc-ponc",Count:1223938}
b0b-6

А тут мы видим, как Chotki за 2.58 секунды на ноуте Lenovo Yoga инкрементит счётчик 1 миллион раз. Это не in-memory, это с записью на диск. Если не знать, как работают LSM базы данных, это может показаться фантастикой, а если знать - просто видно, что я ничего не испортил.
С перекачкой данных на другую реплику (на том же ноуте) 3.7сек.
10млн+10млн встречной перекачки в формате RDX управилось за 60 сек. То есть, всё те же 3 секунды на миллион операций.
Как бы метрики ухудшить. Может, в облаке запустить? С докером и кубернетисом?
🍾12👍41❤‍🔥1🤡1
Local-first и децентрализация
И это ведёт к ответу на аргумент про Схему Понци. Да, пирамида это довольно мощный мотиватор роста, но в долгосрочной перспективе проблемный и ведёт к циклам пузыря: надули-лопнул. Это пока состояние экосистем крипты. Система более доброкачественная позволяет…
Опирамиживание экономики (мой термин) это когда тратятся деньги под обещания будущих доходов, а "будущие доходы" не материализуются. В результате образуется висящий долг. Тут можно вспомнить Мавроди, а можно вспомнить теории J.Tainter'а, но неважно. Сегодня на HN в вентилятор попал пост из рассылки Gentoo, где предлагают вписать в политику нежелательность использования AI контрибуторами. Причины:
- непонятность ситуации с авторским правом (AI как "автоматический плагиат")
- плохое качество кода и текстов сгенерированных AI (plausibly looking bullshit)
- ну и тот факт что AI используется, как оправдание массовых увольнений
Совместив в голове эти две темы, мне неожиданно показалось, что в плане опирамиживания AI вообще очень удобная технология. Чтобы, так сказать, съехать с базара. Почему массовые увольнения белых воротничков? Потому что AI заменил. Где моё здравоохранение, я всю жизнь страховку выплачивал. А вот вам (реальный эпизод из маркетинга OpenAI) виртуальная медсестра на основе AI, говорите с ней сколько хотите!
Итого, получается сдув пирамиды по Тайнтеру, под предлогом AI.
Опять же, если AI начнут продуктивно использовать в промышленной автоматизации, я эти соображения возьму обратно.
😁15👍71
Чтобы программировать, нужно быть молодым. Вот я решил проверить, как дела у WebAssembly. Если помните, это легковесная среда выполнения для безопасного подмножества ассемблера. В wasm можно компилить разные программки на C и Rust и запускать в браузере. Ну либо эмбедить этот код в свою программу. С webassembly.org перехожу на wasmtime. Ну, понятно, там советуют curl | sh сразу, печалька. Я всё-таки git clone делаю. 120MB репка. Легковесный ассемблер, ага. cargo build скачивает зависимости, их сотни. Билд ломается, в библиотеке machine learning чего-то не хватает. Ах, да, ещё git submodule забыл. git ещё скачивает... cargo build срабатывает, вот и результат
-rw-r--r--. 2 gritzko gritzko 346489812 Apr 18 09:37 libwasmtime_cli.rlib
-rwxr-xr-x. 2 gritzko gritzko 434775592 Apr 18 09:37 wasmtime

Ну, что тут сказать. Это явно нужно запускать в электроне. Там незаметно будет.
P.S. Есть ещё wasmer, "blazing fast and secure WebAssembly runtime that enables incredibly lightweight containers", но он пока скачивается, репка под гиг.
P.P.S. билдится уже, 600 зависимостей.
P.P.P.S. с rustc 1.79.0-nightly (c9f8f3438 2024-03-27) не собралось
P.P.P.P.S. Там ещё у подпроектов свои сотни зависимостей.
Итого, при сборке wasmer упал rustc.
error: rustc interrupted by SIGSEGV, printing backtrace

/usr/local/bin/../lib/librustc_driver-4caab773549df9ac.so(+0x3016246)[0x7fa4b2016246]
/lib64/libc.so.6(+0x3e9a0)[0x7fa4aee5c9a0]
/usr/local/bin/../lib/../lib/libLLVM.so.18.1-rust-1.79.0-nightly(+0x621d6eb)[0x7fa4ad61d6eb]

Резюме. rm -rf: lightweight and incredibly secure.
P.P.P.P.P.S. wasmtime в release версии всё-таки 35MB, поиграюсь
😁23🤣8🤡5🔥1💯1
Помню, была волна NoSQL баз данных, потом была волна NewSQL, сейчас какая-то волна PostSQL, все мутят поверх Postgres'а что-то. Причём за месяц уже второй анонс "постгрес с бранчами". Сначала Neon от Келвича-Шамгунова, потом EdgeDB от Селиванова (не знаком).
Первые используют слово "бранч" фактически для чекпойнтов, которые получаются дешёвыми/бесплатными за счёт кастомной LSM storage engine. А вторые уже типа и rebase имплементировали, но лично я не использовал, не знаю как оно. (Технически, это нужно прокрутить изменения одного бранча поверх другого, но что скажет на это Постгрес - зависит от обстоятельств.)
Думаю, со временем и Supabase подтянутся и какие-то бранчи исполнят, конкуренция.
Тем временем сам Стоунбрейкер ебанулся вообще на отличненько - пытается из БД сделать ОС. В принципе, выстрелы в эту сторону случались, вот WinFS например пытались что-то исполнить, но сдулись. С другой стороны, в мире БД Стоунбрейкеру уже некого побеждать, так что он двинул на сопредельную территорию. Прям как Тамерлан.
👍73😁2👎1
ChatGPT и прочий AI чем-то напоминает сверхдешёвые китайские товары: выглядит, как настоящее, по факту - говно. Говно в том плане, что чем больше времени/денег на это потратишь, тем больше твой убыток. Это если ты покупатель, а не продавец, конечно.
Причём, в отношении китайских товаров есть нюанс. Я вот в СССР вырос и успел там привыкнуть, что всё нужно чинить. Кто старше 40 в бывшем СССР, те наверное помнят, как телевизор все пассатижами переключали. Подозреваю, переключатели делал один завод, и делал говённо. И никто это не исправлял, потому что всем пофиг, и управы на них нет никакой. И опытные люди обменивались хитростями, как продукцию советской промышленности подфиксить, чтоб нормально было. И фиксили.
Так вот. Китайское говно совершенно иной природы. Оно непочинимо, как шинель Акакия Акакиевича. Там всё по миллиграммам выверено. Просто материала минимальное количество самого низкого качества, но чтобы выглядело как настоящее до момента продажи, ни и может ещё чуть-чуть. Некоторые это объясняют тем, что сталинизм там возник в III веке до н.э. и кто не умел туфтить - передохли.
Но лично для себя делаю два вывода:
- запахло ChatGPT - прекращаю чтение, вечный бан
- не покупаю безбрендовый Китай
Раньше отскочил - меньше потерял.
💯29👍107😁3🤡3👎1🤔1
Local-first и децентрализация
Так вот, по моей прикидке, бурное безудержное развитие темы с AI конкретно в IT и в целом в экономике может привести к цивилизационному коллапсу даже с решением проблемы AI alignment, то есть без AI истребляющего людей, а просто естественным течением процессов.
Вот в ноябре я с потолка сказал мысль (в комментах там), что увлечение AI может подтолкнуть нас к цивилизационному коллапсу. Не через терминаторов, истребляющих людей - а из-за систематической утраты компетенций (все говнякают с помощью AI, никто не понимает что "под капотом").
И вот сегодня я читаю коммент на HN где этот эффект рассказывается, уже как "вести с полей". Реальное новое поколение инженеров плохо представляют, как что крутится под капотом (реальным, у машин), им нужен интерфейс с мышкой и кнопками, это они понимают. И старички вынуждены менять промышленный дизайн, чтобы молодёш смогла разобраться.
А цивилизационный коллапс - дело в общем-то обычное.
👍13🥴42👎1🤡1💊1