voidlizard.online
116 subscribers
160 photos
6 videos
5 files
105 links
Haskell, распределённые системы.

Разработка P2P CAS hbs2 и приложений для него

Распределенный git aka hbs2-git

hbs2.net

Прочее https://t.me/genedrd47r (мото, EUC, скайдайвинг, дайвинг)
Download Telegram
AI который мы заслужили, например
Итого, petrovich почти переписан на Haskell с утра (с точностью до того, что я перемудрил с типами и не могу сделать интерфейс). Может завтра добью. от LLM пользы почти не было. Это как если микроменеджить совсем джуна. Странно, на других задачах ( SQL с обвязкой) было лучше. Сделал эвристику вывода гендера получше вроде, чем в исходном на Go - там только по отчеству, я сделал с весами по всем частям имени)
Ну короче в первом приближении порт petrovich работает

hbs23://5kQb6z3SJ9jdHEebtWJMPKg8ENguA9xUaUHypAFkBS53

оформлять как-то пока что не до этого, но если вдруг кому надо то вот
А вот помните, я хотел делать 9P потому, что простой и красивый, но по факту стали делать на fuse, потому что "все используют fuse", "быстрее запилить" и "быстрее будет работать" ?

Что по факту: 1) не работает на задаче 2) не проще (т.к. не работает на нашей задаче хрен знает почему и надо отлаживать выяснять) 3) быстрее не будет, т.к. fuse точно не место в демоне, но при этом оно в демона ходить будет по RPC, т.е что так по сети что сяк по сети (и об этом я сразу не подумал).

Какой-то отсюда надо вынести урок, но урок который я вижу — если нормально то давай, а если говно — то не надо. Проблема в том, что пока не попробуешь - не поймешь.

Надо было брать 9P оно красивое, жаль, что мёртвое. Но простое, можно с нуля написать и поддерживать. Но по факту и hFuse много лет никто не поддерживает — т.е если ориентироваться не на интуицию, а сначала выписать факты в табличку — то может быть сразу бы принял правильное решение. А может нет. Короче, интуиция сначала не подвела, а потом подвела. Нельзя никакие решения принимать интуитивно.
AOWD ✔️, nitrox check ✔️, deep diving wip
Вернул не-IT блог. Собственно снёс-то я его из-за неприятной реакции со стороны определенного сообщества, но если здраво рассудить - то надо бы было просто послать всех любителей перемыть кости за глаза нахрен, как и буду поступать в дальнейшем, ну а тогда это была запоздалая попытка сбить волну. В общем, по заметки по филлипинской поездке и дайвингу вообще здесь - https://t.me/genedrd47r
как понять, что у кандидата большой опыт в области блокчейна : в качестве уточняющего вопроса он пытается выяснить, кого посадят в случае реализации той или иной фичи если что.
Раскатал hbs2 на новую тачку, на которой ничего нет по собственному мануалу. всё гладко.

Вообще после отпуска с nix что-то случилось, он стал где-то на 30% менее выводящим из себя (это про итогам раскатки с станции с 5090, свежего ядра, нестабильных драйверов и т.п. Всё завелось и работает, как настоящее, убил всего-то меньше половины дня).

В порядке эксперимента буду раскатывать тачку без syncthing, только на hbs2-sync. Страшновато, но время пришло.

Переписываю свои никсовые конфиги в сторону максимального упрощения. home-manager почти выпилен в пользу обычного nix + gnu stow.

Миграция на wayland. Все прошло гладко. hyprland после доработки напильником такой же удобный, как xmonad. Моторная память не пострадала.

Поскольку ситуация со всратостью nix (как языка) не изменится никогда, абсолютной метрикой является минимизация всего, что делается на нём.

Есть планы хранить параметры в hbs2 и накатывать конфиги, собирая по шаблону, беря данные из hbs2. Если понадобится.

Пока всю работу можно сделать просто с gnu stow и кажется это намного проще и удобнее, чем home-manager.

hyprland ok. синтаксис конечно смешной (реально — ну почему так?)

eww ну кстати тоже ничего. гопатыч в него не может, потому, вероятно, что там буквально пользовательская база человек... двадцать? Пока не прочитаешь мануал или сам не натыкаешь — ничего работать не будет, а как прочитаешь-натыкаешь так вроде и все нормально.

Как понять, что модель инферится на GPU? Вышибает бесперебойник.
новая сборка hbs2 на https://hbs2.net/ref/4X65y4YvUjRL2gtA9Ec3YDDP4bnxjTGhfjpoah96t3z1/project — поправлен косяк с залипанием в ожидании рефчана в hbs2-sync
Смена обоев по таймеру в hyprland при помощи клея момент bf6. Так же можно заметить, что вместо возни с постылым systemd воткнут mcron, написанный на guile. Ехали скобки через скобки!
Так же хочу заметить, что модный-молодежный просмотрщик изображений loupe на gtk4 стартует около двух секунд на компе c быстрым nvme и где вообще много всего (CPU, RAM). Двух секунд! Так держать! Сделаем из любого компа 286-ой. Хотя, кажется, там вьювер картинки стартовал быстрее. По крайней мере не помню у себя никакого дискомфорта на эту тему.
Итак, чего не хватает (сейчас, в числе прочего) hbs2 - это публикации страничек проектов из некоего дефолтного шаблона, который пользователи смогли бы патчить для себя. Ну, hbs2.net так собирается — практически исключительно при помощи hbs2-cli, которая предоставляет просто биндинги на функции работы с hbs2 + немного общих функций (строки, файлы, шаблонизация). Думаю, что этот шаблон будет генерировать просто hbs2-git если его попросить. Думаю там просто README + лог коммитов + снапшот исходников (daily? weekly?). Всякое типа лога fixme — прикрутить можно позже. Круто было бы интегрировать haddock, но на это меня точно не хватит сейчас, но если вдруг найдутся добровольцы, было бы здорово.

Как это будет: hbs2-git генерирует рыбу проекта куда-то в .hbs2-git3/website или типа того. или прямо сюда. или спросит куда. там - bf6 скрипт, который соберёт базовую страницу и сделает функции для публикации. как сейчас это выглядит:

hbs2-cli import ./root.ss and publish

после чего hbs2.net доступен по ссылке localhost:port/ref/4X65y4YvUjRL2gtA9Ec3YDDP4bnxjTGhfjpoah96t3z1

что бы это захостить в "clearnet" — нужно поднять hbs2-peer на хосте и настроить реверс прокси на этот URL.

Почему сейчас? Ну вот свои библиотеки таскаю туда-сюда, и единственный источник данных о них — каталоги на хостах. fuzzy-parse вот понадобился.
Решил донастроить suspend на новой рабочей станции. Вопреки ожиданиям — и драйвера nvidia и ядро работают хорошо. Но hyprland крашится после выхода из suspend. Крашится он тоже не просто так, а ему почему-то кажется, что hyprlock (локер экрана) - упал. Сука упал и упал — ну подними. Но нет. В общем, путём тыка выяснилось, что скорее всего имеет место банальная гонка — там какая-то сложная конструкция из dbus и всего прочего, скорее всего hyprand успевает подумать что "о — нужен hyprlock", потом комп засыпает раньше, чем последний успевает стартовать, потом при просыпании — хоба, нету hyprlock. Это, кстати, не первая гонка в hyprland — при смене обоев тоже всякий бред происходит. Думаю там банально в коде что-то в духе sleep(0.25) расставлено. Что бы писать на C++ надо быть очень умным, это вам не хаскель. Однако то, что люди пишут на C++ вовсе не означает автоматически, что они очень умные.
Haskell-ный petrovich здесь:

git clone hbs23://DnzR3EgPTmQ9Gkmjr1t5umiNDVqC67bR4BzKcnYDaTsC petrovich-hs


в прошлый раз дал ссылку на зашифрованный репо, не склонится. Эта открытая.

Использование примерно так:

ghci> let name  = fromJust $ parseName "Иванова Татьяна Генриховна"
...

ghci> detectGender name
Just F

-- ruleGen from here:

--data Rule =
-- Rule {
-- ...
-- , ruleNom :: Nom
-- , ruleGen :: Gen
-- , ruleDat :: Dat
-- , ruleAcc :: Acc
-- , ruleIns :: Ins
-- , rulePre :: Pre
-- }

ghci> inclineName ruleGen Nothing name
...


гендер детектит... как-то само или можно явно указать. Попробую добавить скелет странички проекта, вопрос что там должно быть (последние N коммитов? ссылка на архив?).

Думаю для минимально скелета сойдет README.md + ссылка на репо.
как-то так:

https://hbs2.net/ref/2ryFDHtC6yDk6XQNidVaayy6NUUUMb4RV7aG61Cp2ue5


(define site:ref :2ryFDHtC6yDk6XQNidVaayy6NUUUMb4RV7aG61Cp2ue5)

(define (from:markdown:file f)
(call:proc:raw pandoc -s -t :markdown -t :html f)
)

(define (as-html n) [kw :file-name n :mime-type "text/html; charset=utf-8"])

(define README
(begin
(local readme (from:markdown:file ../README.md))
; (local html (skel '[] readme "petrovich"))
(local meta [kw :file-name :index.html :mime-type "text/html; charset=utf-8"])
(hbs2:tree:metadata:string meta readme)
)

)

(define (publish)
(hbs2:lwwref:update site:ref README))


 hbs2-cli import ./page.ss and publish
О технология фичах и юзабилити. Застрял на трассе на заправке. Беспроводной ключ - заперт в кофре, мотоцикл его не видит. Короткая грустная история, почти Хэмингуэй. А был бы ключ обычный - я бы не забыл его в сумке. И если вдруг он не в кофре, а улетел на трассе - это было бы не несколько месяцев ожидания и очень много денег, а просто запасной ключ ничем не хуже основного.
Продолжаем сторейдж. Кажется, в текущем дизайне я лоханулся, хорошо, что он никуда еще не успел пойти (...)
Сторейдж в целом готов. Осталось сделать компакцию, которая получается очень простая: берём два самых старых файла в A и B в порядке обратном таймстемпам, пишем все записи которые не томбы из A в C, потом все записи, которых не было в A и которые не томбы из B в C. Индексируем C. Атомарно удаляем A и B из списка tracked files, C добавляем. Таймстемп C <- таймстемп A.

Получилось (ценой изменения структуры, добавление префикса блока) сделать так. что ссылки и блоки живут в одних и тех же файлах — больше нет ни отдельного неймспейса для ссылок, ни отдельных механизмов, всё одинаковое.
А теперь — зачем это всё было. Вот сравнение трех сторейджей:

новый (ncq), sqlite-mock (просто пишем блоки в таблицу, ключ = 32 байта), старый (git-like loose). пишем дерево Меркла для 2.5G файла, 32 байта ключ, 256K - значение.

Интересно, что sqlite проиграл не только NCQStorage, но и SimpleStorage.

Запись в sqlite асинхронная, с таймслотами по 1 секунде, т.е батчами. Сильно его не ускорить.
Теперь у нас есть ответ на вопрос — можно ли из говна и палок на хаскелле сделать приемлемое хранилище и что получится. Ну вот примерно что.
ну что, пир поехал работать на новом сторейдже. помариную сколько-то (месяц?) и в релиз. сторейдж уже не стыдный.