]> Sergey Matveev's repositories - stargrave-blog.git/log
stargrave-blog.git
19 months agoВведение в PCIe для пользователя
Sergey Matveev [Thu, 7 Sep 2023 18:54:49 +0000 (21:54 +0300)]
Введение в PCIe для пользователя

https://www.youtube.com/watch?v=fE0fnGbI8B8
Введение, на чисто пользовательском уровне, в мир PCIe устройств. Почти
на два часа. Я даже удивился: о чём можно столько времени говорить, если
не углубляться в сам протокол PCIe? Ан нет, мужик говорит достаточно
быстро, чётко, ясно, но действительно информации не мало. Много
любопытных фактов о которых не знал прежде.

19 months agoПрочитал пару томов "Механиков"
Sergey Matveev [Wed, 6 Sep 2023 18:44:48 +0000 (21:44 +0300)]
Прочитал пару томов "Механиков"

https://www.litres.ru/serii-knig/mehaniki/
Но дальше наверное уже не буду. Лёгкая, незатейливая приключенческая
фантастика. Хотя от фантастики то только факт попадания в другой мир,
и другая природа. Я бы даже сказал что местами прям наивно просто
многое.

Но когда во втором томе я всё слушаю и слушаю и слушаю (аудиокнигу) про
автомобили и отношение к ним всех действующих лиц, то сопереживать или
сочувствовать им не могу. Ну вот насрать мне абсолютно на все эти марки,
цвета, лошадиные силы и скорости. Не интересно это! Я в курсе что тьма
мужиков готовы обсуждать всё это дни напролёт, и никогда, с самого
детства, не понимал всего этого. Особенно когда обсуждают автомобили к
которым даже притронуться никогда не дадут, не говоря про то, чтобы их
купить. Вот про технологии внутри них может быть интересно, но они (если
не считать электромобили) как-бы принципиально не меняются уже давным
давно. И задевает меня упорно и многократно повторяемая фраза что
"каждый настоящий мужчина хочет иметь нормальную тачку".

Ну да, ненормальный я мужчина, ибо мне насрать на всё это. Десять лет у
нас был Daewoo Matiz с 0.8л двигаталем и эта машина более чем устраивала
и меня и родителей (экономичность, дешёвость починки, массу всего можно
перевозить (на болтах кресла снял и хоть холодильник, хоть электроплиту
суй), неплохая проходимость (сколько раз видели что многие не могут
проехать там где мы), отличный обзор. Некоторые говорили что некоторые
девушки точно сливались узнав на чём я ездил (сейчас я просто почти за
руль не сажусь, ибо нет задач для этого). Оно и к лучшему, конечно же.

На втором томе можно сказать что всё типа устаканилось: нашли новое
место для города, материалы, топливо, людей, избавились от бандитов, а
дальше уже можно бесконечно (судя по количеству томов -- так и есть)
высасывать истории и дальше. Как сериал. А сериалы для меня почти табу.

19 months agoПонял за что Astra можно не любить
Sergey Matveev [Wed, 6 Sep 2023 14:50:10 +0000 (17:50 +0300)]
Понял за что Astra можно не любить

Делаю man getrandom -- говорят что getrandom() появился в glibc 2.5.
man на русском языке, который по умолчанию выставляется.
Делаю LC_ALL=C !! -- и англоязычный man говорит про glibc 2.25, что
соответствует правде. А я ведь, доверившись русскому man, пошёл было
собирать программу с этим getrandom и думал что Astra выпилила что ли
его с какой-то целью.

19 months agoPrime Trust потерял ключ от криптокошелька
Sergey Matveev [Wed, 6 Sep 2023 11:49:08 +0000 (14:49 +0300)]
Prime Trust потерял ключ от криптокошелька

https://www.schneier.com/blog/archives/2023/09/cryptocurrency-startup-loses-encryption-key-for-electronic-wallet.html
Криптовалютный стартап потерял ключи от своего кошелька, >38M$, банкроты.
Шнайер "can’t understand why anyone thinks these technologies are a good idea".

19 months agopassman менеджер паролей
Sergey Matveev [Tue, 5 Sep 2023 19:48:03 +0000 (22:48 +0300)]
passman менеджер паролей

http://www.git.stargrave.org/?p=passman.git;a=summary
Что-то ни разу не писал про свой менеджер паролей тут. Видимо, потому
что он был сделан задолго до создания блога.

Давным давно я хранил пароли в текстовом файле в TSV формате,
зашифрованном GnuPG. gpg -d < passwords.tsv.gpg | grep foo.com

Дальше я перешёл на хранение всего этого в виде иерархии директорий и
текстовых файлов. www.foo.com/stargrave+foo@stargrave.org/passwd файл
содержит пароль, просто одной строчкой. Соответственно я вводил "passman
foo.com" и он найдёт www.foo.com. Если в нём одна запись
(поддиректория), то сразу же в X11 буферы обмена копирует
stargrave+foo@stargrave.org и пароль. Если учётных записей несколько,
скрипт вернёт плохой код возврата и покажет доступные найденные
варианты. А я уже уточню "passman foo.com/stargrave2" каким-нибудь.

В GUI программах вставить из одного буфера обмена просто третьей
кнопкой, а из второго через контекстное меню. В эмуляторах терминалов,
даже в suckless terminal, shift+ins и alt+shift+ins тоже позволяет из
одного и другого буфера вставку произвести. Через десять секунд скрипт
очищает буфер с паролем.

А сейчас решил что всё же стоит хоть какой-то дополнительный порог
добавить, а не в открытом виде (для моего пользователя) хранить всю эту
кучу паролей. Безусловно это всё на зашифрованном диске должно быть,
чтобы никакого plaintext на самом накопителе не оказалось.

Теперь passman хранит всё в одном recfile. И все действия используют
родной инструментарий recutils для поиска и вывода паролей. Ищем пароль
регулярным выражением через recsel. На вход ему подаётся БД всех
паролей, а на выходе тоже будет уже отфильтрованная другая БД. recsel
--count покажет сколько записей найдено, recsel -P Password уже выведет
только пароль из этой БД.

passman gen -- сгенерирует случайный пароль (16 случайных байт в
Base64). passman add name [password] -- добавит новую запись под именем
name (если пароль не задан, то сгенерирует его). Можно её добавить, а
дальше уже вызвать passman name чтобы в буфере получить пароль для
копирования в броузере -- таким образом я его на мониторе вообще ни разу
не увижу. passman mod -- позволяет отредактировать весь recfile в
редакторе, например чтобы добавить Data: поле с произвольными данными,
которые при поиске пароля тоже будут выведены на экран.

И этот файл автоматически шифруется age-ем с использованием парольной
фразы и сжимается zstd. passman mod конечно же натравит редактор на
временный дешифрованный файл, а дальше его зашифрует. Надо сменить
парольную фразу на БД? Просто запустить passman mod и сохранить файл
ничего в нём не изменяя -- age всё равно перешифрует всё в другой
временный файл.

Переконвертировать 238 паролей из иерархии директорий: одной строчкой
zsh-а сделал и к началу только добавил схему этой БД, чисто чтобы была,
для красоты и порядка.

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

19 months agoЁжик в парке
Sergey Matveev [Tue, 5 Sep 2023 18:23:45 +0000 (21:23 +0300)]
Ёжик в парке

Снова сегодня на многочасовую прогулку выбрался. В одном из наших парков
ёжик перебежал дорогу параллельную и в клумбу. Остановился напротив, он
неспешно, зыркая на меня, дошёл до дороги со мной, дальше снова
перебежал дорогу уже к деревьям и кустам. Не шибко боялся, но и был
аккуратен. За это время женщина с ребёнком поравнялись со мной, я им
тыкнул в ежа, мол, смотрите. Ребёнок счастлив за ним проследить был.

19 months agoПосмотрел на протокол shadowsocks
Sergey Matveev [Tue, 5 Sep 2023 14:20:53 +0000 (17:20 +0300)]
Посмотрел на протокол shadowsocks

https://www.hindawi.com/journals/scn/2022/4862571/
https://github.com/shadowsocks/shadowsocks-org/wiki/Protocol
https://github.com/Shadowsocks-NET/shadowsocks-specs
https://habr.com/ru/news/758786/
https://habr.com/ru/news/758638/
https://habr.com/ru/news/758556/
Новости и статьи на Хабре завалены тем, что у нас могут быть
заблокированы ресурсы где есть информация по настройке обходов
блокировок. Большинство это приравнивает ко всем VPN технологиям.

Чаще всего упоминают shadowsocks, говоря что он прям основной основной
инструмент для работы в условиях GFW. Ну решил посмотреть что у него за
протокол то. Оказалось, что он просто простой препростой: это тупо
симметричное шифрование, без handshake-ов, где с каждым пакетом
прикладывается соль/IV/рандом. То есть это прям ничего кроме шифрования,
почти сплошной шум.

Ведь совсем недавно я тоже задавался вопросом есть ли решения просто для
шумовой обфускации UDP пакетов и написал свой udpobfs
(552979396ad8de1f3bbeb409f1c2a65f7446806b). То что shadowsocks до боли
простой -- одобряю. Что это не какой-то очередной монстр пытающийся то
так, то сяк в кошки-мышки играть и притворяться то TLS, то DTLS, то SRTP
-- тоже нравится. Да и говорят что в Китае это прекрасно работает --
чего извращаться то с мимикрией под другие протоколы? Возможно просто у
кого какой опыт и, судя по комментариям, там от города к городу, от
провайдера к провайдеру всё по разному в плане DPI и работоспособности.

Но что мне больше всего понравилось: мой udpobfs гораздо меньше overhead
имеет! Не просто так я старался не добавлять лишние байтики. Но у меня
переиспользование PSK очень не хорошо будет -- поэтому предполагается
рядом наличие SSH-like канала через который ключ будет синхронизирован.
В shadowsocks так как "IV" с каждым пакетом отправляется, то не такая
большая проблема.

В оригинальном SS протоколе всё плохо с replay защитой. Сделали SS-2022
версию, где для выработки ключа даже новомодный BLAKE3 применяется и
AEAD шифры (что всё хорошо конечно же). У меня в udpobfs replay защиты
нет, но на уровне моей программы, ибо просто было лень писать. Но в
протоколе есть последовательные номера, поэтому ничто не мешает и её
реализовать.

Ну а главное отличие: SS явно передаёт адреса/id-каналов: то есть там
прям мультиплексирование множества соединений возможно. Я же явно ничего
подобного и не хотел делать, ибо предполагается полноценный VPN под
слоем обфускации, где и PFS, и replay, и защита, и аутентификация и
маршрутизация/мультиплексирование/whatever.

19 months agoКак я делаю релизы
Sergey Matveev [Tue, 5 Sep 2023 07:33:33 +0000 (10:33 +0300)]
Как я делаю релизы

Где-то в блогах увидел как кто-то описывает процесс создания релиза СПО
программы. Есть время -- опишу и свой процесс, хотя он во всяких
скриптах закоммиченных в Git и так имеется, тайн нет. Ну и просто мои
мысли о структуре программы.

* .gitignore не должен содержать исключения касающиеся инструментария
  конкретного разработчика. Если кто-то использует Emacs, то у него не
  появятся vim-specific файлы. Если кто-то использует другую реализацию
  redo, то запросто не будет .redo директорий, и т.д.
* Я стараюсь прописывать в .gitignore как можно более точные/узкие
  правила. Если надо проигнорировать директорию, то явно указываю "/",
  так как это директория. Если только в текущей директории что-то, то
  слэш в начале. Прописываю "/foo.out" в foo/.gitignore и "/bar.out" в
  bar/.gitignore, вместо "/*.out" в .gitignore выше foo и bar директорий

* Любой проект должен содержать README по хорошему, где было бы хотя бы
  краткое описание что это, пускай и пара строчек. У меня не во всех
  репозиториях это есть, но они только про маленькие утилиты, где
  документацией является комментарий в начале скрипта
* Никаких README.md и вообще Markdown
  (da160c3c7b3f5393aa37f2d042f9b281264273de,
  9d989dceed050f0e0e8f5ac63c22cd3771cd2d56,
  b8b7029858e6e5cbea511e66dedfb98c4d7340b3)!

* Лицензия является важной вещью для СПО. Можно быть против copyright,
  против "intellectual property" и подобных вещей, но пока в этом мире
  есть законы стран и по ним ваше творение не может считаться свободным
  ПО, если это явно не отмечено. Я считаю что выбор можно свести либо к
  семейству GPLv3: GPLv3, AGPLv3, LGPLv3, либо public domain. Для новых
  форматов/протоколов GNU сайт также рекомендует обратить внимание на
  permissive лицензии типа Apache License 2.0, однако например OpenBSD
  не считает её допустимой свободной (http://www.openbsd.org/policy.html)
  Те, кто говорят что топят за полную свободу, но при этом используют
  Expat лицензию (которую некорректно называют "MIT"
  (499d8afd7741e9056f0d4c9f969386f49a6a293f)) -- лицемеры, ибо не делают
  public domain (1c19e4cee16c687f33dba569b8b7381527fc3e51). Кто за
  распространение СПО, то GPLv3 более чем отлично продумана и учитывает
  засады типа TiVoization
* В значимых файлах исходного кода стоит, как GPL и гласит, добавлять
  явно информацию о том что файл лицензирован так то. По умолчанию GPLv3
  в своём примере вставки для кода предлагает использовать v3 или более
  позднюю версию. Я не доверяю людям из FSF, только RMS, ибо там шиза у
  них в головах лютейшая и у меня сомнения что они за СПО как RMS,
  поэтому все мои проекты не содержат разрешения (автоматического)
  использования более поздних версий GPL (1afd778850d7ed026677339de509ef3c0c3a5269)
* GNU Coding Standards рекомендуют GNU GPL помещать в COPYING файл, чему
  тоже и следую. И срать я хотел что многие новомодные платформы для
  разработки ПО хотят видеть LICENSE. Не они толкают СПО в мир, они не
  хотят СПО в этом мире, плюс меня бесит американское написание этого
  слова и я написал бы LICENCE

* Go стал обязательно требовать использования системы модулей. И я это
  яро одобряю, ибо они удобны и хороши тем, что жёстко фиксируют
  конкретную версию зависимостей. Может быть даже несколько версий одной
  библиотеки. Вообще нарадоваться не могу этому всему.
* Я убеждён что Make не имеет права на существование, ибо оно просто
  прям вот всем всем хуже и не выполняет задач, не помогает разработчику
  (a79698c8ace58a8c35fa35ba382281a018fea59e). Поэтому никаких
  Makefile-ов! Но и .do файлов я из многих Go проектов поубирал тоже,
  ибо в самом Go собственная система сборки/кэширования и достаточно
  простых скриптов вызывающих go build возможно с передачей нескольких
  флагов
* Я использую свой goredo, как redo реализацию, но .do файлы пишутся
  только с предположением что есть redo-{ifchange,create} команды, если
  это не .do файлы для "внутреннего" использования, не предполагающие
  запуск другим человеком
* Если в Go проекте используется stringer, то я не коммичу
  сгенерированный им файл, ибо репозиторий это для разработки, не
  готовый для использования код, не релиз, не tarball, поэтому и нет
  условия что из него должно всё мочь собираться
* Если программа является демоном, то для неё я или в документации или в
  contrib/ директории описывал как создавать daemontools файл для
  запуска. Никаких systemd-модулей (ведь так же называется?) у меня быть
  не может. Единственно правильным подходом по запуску демонов я считаю
  подход daemontools. Не обязательно буквально его использовать: это
  может быть и runit и s6 какой-нибудь, но принцип у них такой же

* Всякие вспомогательные утилиты для сборки, для разработки я стараюсь
  помещать в utils/. Скрипты/программы без которых в общем и целом можно
  обойтись, но они возможно пригодятся конечному пользователю --
  стараюсь помещать в contrib/. Например это примеры использования той
  или иной программы, скрипты для запуска под daemontools, и т.п..
  Например когда NNCP требовал redo для сборки, то минималистичную
  реализацию redo на POSIX shell я помещал в contrib/do
* Если исполняемый файл подразумевает интерактивный запуск
  пользователем, то я стал стараться опускать расширение файла. Не
  "foo.sh", а а просто "foo". Ведь какая разница на чём он написан? Да и
  имея .py расширение -- не будет понятно Py2 это или Py3. Для
  определения типа файла достаточен вызов file или head
* Если скрипт предполагает source кем-то другим, именно source ("."), а
  не выполнение, то стараюсь добавлять .rc расширение, пускай даже после
  расширения говорящего про тип языка (.tcl.rc, .zsh.rc)
* Абсолютно недопустимо никакого GNU Bash применения или упоминания. Он
  ещё больше не имеет права на существование чем Make
  (http://www.stargrave.org/ZSH-proscons.html). Огромный, монструозный,
  громоздкий, медленный. Имеет смехотворные средства customization, но
  для скриптов это не имеет значения, ok. Не имеет никакой помощи для
  работы хотя бы даже с переменными/файлами содержащими пробелы -- чем
  он тогда лучше POSIX shell? Кроме того, на множестве дистрибутивов он
  не стоит по умолчанию, а значит #!/bin/bash требует подтягивания
  сторонней зависимости, которая для скриптов мало чем лучше будет чем
  POSIX shell
* Почти для всего надо использовать #!/usr/bin/env, а не #!/usr/bin/perl
  какой-нибудь, ибо он может находится (собственно, как и /bin/bash не
  обязан существовать в этом месте) в другом месте
* Не приемлю использование awk (ибо их куча диалектов, а зачем писать на
  узком подмножестве, если можно использовать Perl?). Не забываю про
  разницу между BSD sed и GNU sed, где даже поведение -i аргумента
  отличается. sed использую для относительно простых действий, но вообще
  даже для sed -i частенько применяю perl. В OpenBSD он идёт из коробки.
  Во многих системах он из коробки тоже, хотя в современной FreeBSD это
  отдельный пакет. Но что за система без Perl, который везде одинаково
  работает, ибо нет BSD/GNU/Plan9/whatever диалектов несовместимых между
  собой? Считаю что Perl5 доступен будет всегда, поэтому частенько
  скрипты на нём присутствуют в проектах

* Документацию пишу в Texinfo формате
  (http://www.stargrave.org/InfoRules.html) и считаю Info достаточно
  хорошим форматом для неё. Собственно, Info и является официальным
  форматом документации в GNU, а не какие-нибудь man-страницы. Некоторые
  проекты пишут на подмножестве Texinfo и используют утилиты способные
  их версию сконвертировать в man-страницы (GnuPG и Z shell, насколько
  помню, как минимум). Но я не считаю это оправданным геморроем, ибо
  info команда вполне себе удобна для использования и нет смысла в man
* Частенько использую PlantUML. К сожалению, на их сайте сейчас призывы
  поддерживать терроризм и собирать средства на нацистов, мразей, воров
  и бандитов всяких. Но это не отменяет что прошлые версии их программы
  умеют делать как и растровые, так и Unicode текстовые версии диаграмм.
  Только ради этой программы и держу Java. Отрендеренные изображения не
  коммичу: ведь это же build artifact, как и .o/.a какой-нибудь
* Есть redo правила для сборки как .info, так и .html, как правило.
  Вроде бы во всех случаях я документацию пишу так, чтобы она могла
  выступать как исходник для HTML сайта программы
* Кроме короткого описания что это за программа (аналог README), нужно
  не забывать про информацию со спасибами (thanks), про информацию о
  том, как можно связаться с автором, возможных списков рассылки, как
  стоит отправлять патчи, отчёты об ошибках и и т.п.
* На странице установки/скачивания я стараюсь приводить коротко список
  команд как скачать и собрать программу. wget|fetch, tar xf, go build
  -mod=vendor, и т.д.
* Список tarball-ов оформлен в виде таблицы. Если в проекте ведётся
  старница "новостей", где описаны изменения от релиза к релизу, то
  каждая версия tarball-а является ссылкой на версию страницы NEWS. Не
  забывать указывать дату релиза, его размер
* Когда-то (c3ba3d2f29655d06dffe1ec836c9f0b98daec0c9) я там прописывал
  SHA256 от tarball. Для проектов связанных с ГОСТ криптографией ещё
  добавлял Стрибог-256. А недавно всё это убрал и стал публиковать
  ссылку на Metalink .meta4 XML файл, создаваемый собственной meta4a
  утилитой, которая прописывает кучу видов хэшей, а также URL-ы на
  Yggdrasil (y.что-то-там) версию сайтов и возможно других зеркал.
  Удобно тем, что и GNU Wget это поддерживает и позволяет и автоматом
  проверять целостность и качать с разных мест
* Также раньше я добавлял ссылку на OpenPGP ASCII-armored подпись.
  Недавно (d2890179a8bbb7bc3f2dcd807faa906e6ab78224) стал ещё
  подписывать OpenSSH ключом (c5e9b245012a5a1ac1732b2c94fc89d9e760efe3),
  стал двигаться в сторону *существенно* более простого софта. Теперь в
  таблице tarball-ов есть ссылка на .sig ASCII файлик с подписью
* В репозитории появляется из-за этого файл PUBKEY-PGP.asc с armored
  OpenPGP публичным ключом подписи tarball-ов и Git тэгов проекта. Рядом
  находится PUBKEY-SSH.pub файл с публичным OpenSSH ключом подписи.
  Возможно им я и Git тэги начну подписывать вместо OpenPGP. Этот .pub
  файл содержит ключ в формате пригодном для использования в качестве
  "-f allowed_signers_file". Этот файл также ещё и подписан OpenPGP
  ключом в detached signature файле PUBKEY-SSH.pub.asc. Если у кого-то
  есть доверие к моему основному ключу, то ключ подписи проекта он
  сможет проверить, а им уже проверить подпись под OpenSSH ключом
* .meta4 также содержат и armored версии OpenPGP и OpenSSH подписей tarball-а
* В документации, особенно для установки, часто использую @var{VERSION}
  переменные, которые во время сборки подставляю каким-нибудь
  -D "VERSION `cat ../VERSION`" вызовом. чтобы руками явно ничего не
  прописывать
* В этом году отказался от использования CSS вовсе
  (--set-customization-variable NO_CSS=1). Прежде применял свой
  "фирменный" style.css, со спёртыми цветами из одного из screenshot-ов
  SGI IRIX 4Dwm. Но я всегда хочу видеть границы ячеек в таблицах. Без
  CSS они невидимы. Модифицировал код своего локально установленного
  Texinfo чтобы он добавлял border=1 к таблицам

Собственно, как же сам процесс релиза то выглядит?

* Убеждаюсь в doc/news.texi содержит всю информацию о новом релизе,
  ничего не забыто. В .go файле где зашивается версия программы тоже
  выставлена нужная версия
* Делаю git tag -a -s -u proj-id vX.Y.Z. Если проект содержит отдельные
  ветки master и develop, то перед этим делаю: git checkout master; git
  merge --no-ff develop; git tag ...; git branch -d develop ; git branch
  develop ; git checkout develop
* Далее запускаю ./makedist скрипт. По сути в котором все действия
  автоматизированы. Скрипт рассчитан на запуск на моей системе, поэтому
  там вроде бы точно где-то есть и hard-coded пути. Если это программа
  для работы, то всё всё равно происходит примерно аналогично как и СПО
  версиям. Всё что ниже: делается автоматически
* Клонируется git репозиторий во временную директорию, чтобы никакой
  лишний файл ненароком не мешал
* git checkout vX.Y.Z
* Зависит от проекта, но чаще всего делается redo VERSION, который
  вычисляет версию на основе текущего тэга коммита. Появляется VERSION с
  vX.Y.Z строчкой
* Далее собирается документация. Она всегда использует redo для этого.
  Но перед сборкой я заменяю doc/download.texi файл, содержащий таблицу
  с tarball-ами, на пустышку из нескольких строчек: "tarball вот отсюда
  можно скачать". Запускаю redo/PROJNAME.info
* Делаю отдельный NEWS файл в корне проекта. Создаю временный NEWS.texi
  файл, в который просто копируется содержимое doc/news.texi, без
  @node/@section, которые бы сбили иерархию секций. Отдельным makeinfo
  вызовом собираю ASCII версию NEWS
* Аналогичное повторяю для INSTALL файла и THANKS в корне проекта. Для
  INSTALL файла из-за этого есть ограничения: в нём нельзя сделать
  ссылки на другие страницы документации, так как он собирается без
  ведома остальных файлов
* Исходный код (*.go, go.*) перемещаю в src/
* Выполняю go mod vendor, который создаст vendor/ со всеми необходимыми
  зависимостями для сборки проекта
* Копирует он отнюдь не все файлы что находятся в репозиториях
  зависимостей. Иногда вызываю modvendor утилиту и указываю что ещё надо
  докопировать (типа тестовых векторов например) в vendor/ директорию.
  Чтобы каждая зависимость более-менее была самодостаточна и полноценна
* Выполняю зачистку: удаляю всякие .gitignore find-ом, .travis.yaml,
  тяжёлые *_test.go, возможно что-то касающееся *_windows.go и всё в
  таком духе. Зашиваю я это всё в скрипт makedist заранее. Если я
  обновлял зависимости, то во время релиза, как правило, делаю
  makedist-ом tarball и смотрю что в него попадает, всё ли нормально,
  вменяемого ли размера он получается
* Удаляю свои собственные вспомогательные скрипты и ненужные файлы:
  .redo (redo-cleanup full), makedist, VERSION.do, .git* и т.д.
* Если есть скрипты вызывающие "go build", то sed/perl-ом добавляю в них
  -mod=vendor. Иногда в скриптах есть просто проверка на наличие vendor
  директории и они сами добавляют эту опцию
* Меняю права доступа для всех файлов на 644, для директорий на 755.
  Тем, что нужны права на исполнение: явно добавляю chmod +x. Сам по
  себе то я штатно работаю с umask 077, поэтому у меня права по
  умолчанию для группы и других будут вообще по нулям. Вообще git
  archive например делает 664/775 права, но GNU Coding Standards
  рекомендует 755 для директорий, чему и следую
  (https://www.gnu.org/prep/standards/standards.html#Releases)
* Засовываю всё в архив: tar cf --uid=0 --gid=0 --numeric-owner
  Это делает архив более "детерминированным" при создании. git clone
  тоже выставляет mtime-ы во что-то отталкивающихся от времени коммита
* Я много уделял времени на поиск идеального архиватора/формата
  (d5670fc7a83b5161ebbb4f7b9cdaf34f3edf3a94,
  a3f2621a4986184923161e2e1c65778f61a98086,
  c13068dff5ce5219180a26327a0e0a8bafa20f6f,
  3292f9367343832b03ecc52e17437333d136cab6,
  dd558b2a665788dfa4a15024397060615bd86d98,
  b4b36a45ec721be274a4b6c0f9f243d5672f3a48) и сделал вывод что pax лучше
  всех. Но BSD tar (libarchive-based который) по умолчанию делает как:
  ustar формат если ничего из метаинформации не будет потеряно, pax в
  противном случае. Поэтому я не указываю форсированное использование
  pax (ведь ustar это небольшое его подмножество), и для исходного кода
  на деле получается ustar архив по факту
* Сжимаю Zstandard-ом с -19 силой. Для себя я файлы часто сжимаю с
  --ultra -22 -- максимальной силой, но -22 требует --ultra, а он, в
  свою очередь больше памяти для декомпрессии. Я уверен что для моих
  относительно не больших tarball-ов это вряд ли где будет проблемой, но
  всё же не гоже выходить за пределы рекомендуемого и предъявлять
  повышенные требования к памяти целевой системы. Почему .zst? Да потому
  что невероятно быстрый при декомпрессии, сжимает почти как XZ (сильно
  лучше gzip), давно на него уже переходят во множестве пакетных
  менеджеров. Сжимается один раз -- разжимается часто
* Делаю OpenSSH и OpenPGP подписи:
    ssh-keygen -Y sign -f ~/.ssh/sign/PROJ -n file $tarball
    gpg --armor --detach-sign --sign --local-user PROJ "$tarball"
* Вызываю meta4-create -fn "$tarball" -mtime "$tarball"
    -sig-pgp "$tarball".asc -sig-ssh "$tarball".sig
    http://www.PROJ/download/"$tarball"
    http://y.PROJ/download/"$tarball" < "$tarball" > "$tarball".meta4
* Вывожу сгенерированный кусок Texinfo для вставки в doc/download.texi,
  где есть человекочитаемый размер (в KiB) и пути к сгенерированным файлам
* Переношу это всё в doc/PROJ.html/download/
* mtime .meta4 файла явно выставляется равным tarball-у. Для файлов
  подписей не парюсь с идентичностью mtime, хотя не помешало бы
* Вывожу портянку текста для отправки в письме в рассылку об анонсе
  выхода новой версии PROJ. В письмо подставляются URL-ы и размер
  tarball. Прежде я туда вставлял и хэш
* Далее вывожу команду запуска mutt, в которой указано, что надо
  прикрепить .meta4 файл, а также выставить соответствующую тему. Именно
  благодаря .meta4, я и перестал засовывать хэш в текст письма, ибо оно
  и так всё содержится в Metalink файле
* makedist скрипт на этом завершает своё выполнение
* Добавляю кусок текста о новом tarball для download.texi и собираю
  документацию для сайта. Как правило, это redo doc/www цель.
* Отличается она от просто сборки HTML версии документации тем, что ещё
  вызывает releases.atom.zsh (390632c69d7d0dc7a048befff5b48e1f0b34cf42)
  скрипт для создания releases.atom файла на основе файлов в
  doc/PROJ.html/download. В этот XML файл добавляется URL до нового
  tarball и его .meta4. Время берётся из mtime-а tarball. Затем perl
  скриптом в Install.html файле добавляется <link rel=alternate> ссылка
  до releases.atom. Для файлов/директорий HTML документации выставляется
  644/755 права
* Запускаю ./update скрипт, делающий rsync HTML документации на VPS и
  мой основной сервер
* На серверах запущен godlighty
  (bc087ee7e3be4177e83bc39ae3b1497e336ec5da), который умеет на лету
  парсить .meta4 лежащие рядом и выставлять соответствующие заголовки
  (контрольные суммы, альтернативные URL-ы для скачивания) при попытке
  скачивания tarball-ов
* git push --tags master develop
* Запускаю подготовленный mutt, копирую в него текст из makedist,
  открываю NEWS файл из tarball-а и вставляю в письмо. Когда-то пробовал
  хранить эту информацию в git tag сообщении, но потом забил, ибо
  геморрой, требует аккуратность, не так сложно копировать небольшие
  кусочки текста при не так уж и частых релизах
* Письма подписываются моим основным OpenPGP ключом, в MIME режиме.
  Поэтому подписью покрывается и .meta4 файл со всеми хэшами

Если проект подразумевает использование и чисто через go get/install
(например в нём нет ни contrib, ни чего-либо такого особо интересного
кроме чисто кода), то отдельно ещё иду в директорию с prepro
(f110400deb3082f8a7c551479153143fb2808e25) и добавляю знание о новом
релизе в скрипты подготовки директории с .zip модулями. Запускаю
./update для rsync-а онных на мои сервера.

Если это совсем новый проект, то для него надо и сайт подготовить:

* Через zeasypki (47b11bfd222d9f3f03664035e4fb4ca32cfa75de) создаю X.509
  сертификат для HTTPS версии сайта
* В zdns (d4eadab571bf5e8ea00d19598f129a708a322d15) завожу новый
  поддомен (при этом, если он увидит сертификат для нового домена, то и
  DANE записи автоматом пропишет)
* В godlighty прописываю знание о новом домене и где брать на файловой
  системе статические файлы для него
* собираю его новую версию, вычисляю bsdiff-ом
  (bf0b7e0357b8bf41a874a85ab55f920a0fba7d59) патч, загружаю на сервер
  (это всё одним скриптом делается), запускаю скрипт применяющий
  бинарный патч
* svc -t /var/service/godlighty*
* Для не совсем маленьких и тривиальных проектов завожу отдельные
  OpenPGP и OpenSSH ключи (это происходит уже и в момент создания
  проекта, ведь PUBKEY надо закоммитить и знания прописать в makedist).
  Возможно что OpenPGP перестану заводить уже. Во всех случаях это
  ed25519 ключ -- быстрый, безопасный, компактный, более чем хорошо
  проанализированный
* Для OpenPGP ключей отдельно делаю gpg --edit-key и удаляю ключ
  шифрования, так как всё равно эти ключи только для подписи Git тэгов и
  файлов. Делаю подпись ключа своим основным
* Так как большая часть проектов расположена на
  cypherpunks.ru/stargrave.org доменах, то и идентификатор ключа это
  goredo@cypherpunks.ru какой-нибудь. Поэтому иду в ~w/cypherpunks-www,
  редактирую keys.do, в котором добавляю строчку вида
    mk-wkd-keys goredo@cypherpunks.ru 3A528DDE952C7E93
  mk-wkd-keys команда создаёт файл с armored версией указанного ключа, с
  именем пригодным для использования в WKD системе
* redo all && ./update для пересборки сайта cypherpunks.ru, добавления
  нового ключа в .well-known/openpgpkey, rsync-а на два сервера.
  Аналогично всё и для stargrave.org домена
* Далее иду в файлы настройки Postfix и добавляю знание о новом домене
  и/или новых почтовых адресах, обновляю файлы баз данных, перезапускаю
  Postfix
* А если нужна почтовая рассылка... то иду конфигурировать public-inbox
  (8c5adc4480ecdd5c1e35da40c5f2fddd896ea892) и mlmmj
  (aac872add6b3defe52aef4d70dbb54a6fcddf973). Это всё по документации
  каждый раз вспоминаю. Далее в ~w/lists, добавляю знание о новой
  рассылке в index.texi, redo all && ./update
* Ах, да, ещё добавляю в список ключей на домашней странице знание о
  новом ключе OpenSSH/OpenPGP: cd ~hp ; vi trustanchor.texi. Поменяв
  список ключей, выделяю визуально текст для подписи и делаю
  :'<,'>!gpg --clear-sign -u myself -u myold -- обновляя и clearsign
  подпись. redo all && ./update
* Подготовка git-репозитория публичного: su -l git ; cd ~/pub ; mkdir
  PROJ.git ; cd PROJ.git ; git init --object-format=sha256 --bare ; echo
  description > description ; touch git-daemon-export-ok ; cd
  ~/cypherpunks.ru ; ln -s ../pub/PROJ.git .
  По факту у меня репозитории касающиеся stargrave.org и cypherpunks.ru
  лежат одной кучей в одной директории и только символическими ссылками
  распределяются по этим двум доменам

Забыл ли я чего? Наверняка!

19 months agoО чём было American McGee's Alice
Sergey Matveev [Mon, 4 Sep 2023 21:17:42 +0000 (00:17 +0300)]
О чём было American McGee's Alice

https://www.youtube.com/watch?v=zu4qyAJzsL4
Алису я так и не прочитал. Всякие фильмы были психоделическими о ней. Но
игра, судя по вырезкам из gameplay, просто жуть какая-то страшная. Будь
ребёнком -- не уснул бы уже.

19 months agoВоробьёва нет в почтовом ящике
Sergey Matveev [Mon, 4 Sep 2023 17:38:09 +0000 (20:38 +0300)]
Воробьёва нет в почтовом ящике

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

Вообще я доволен его работой за все эти годы. Ну точнее доволен всем,
что происходит в области, в плане дорог, жилищного хозяйства,
благоустройства, строительства и прочего. Но вот на днях мне пришла SMS
"лично для меня от Воробьёва" с ссылкой на какое-то видео. Вот это мне
очень не понравилось: я не давал согласия на получение подобного рода
информации, да и прежде такого не было перед выборами. Обычно я
принципиально не стал бы голосовать/пользоваться чем-то что форсированно
вот так себя проталкивает. А тут он ещё и буклет демонстративно мне не
положил! Срань такая. Или знает что я всё равно за него проголосую?

19 months agoУменьшена плата за проезд в маршрутке
Sergey Matveev [Mon, 4 Sep 2023 17:33:28 +0000 (20:33 +0300)]
Уменьшена плата за проезд в маршрутке

Вообще плату всегда вроде бы повышают на проезд, почти каждый код, на
протяжении всей моей жизни. А тут на 15% сделали дешевле и возвращают
сдачу. Как так? Что? Почему? Промелькнула мысль что может быть это наш
губернатор Московской области распорядился, перед самими выборами то?

19 months agoПрицепился картёжник на остановке
Sergey Matveev [Mon, 4 Sep 2023 17:33:12 +0000 (20:33 +0300)]
Прицепился картёжник на остановке

Жду на автобусной остановке маршрутку свою, третий в очереди. Подходит
молодой парень, спрашивает не очень ли я тороплюсь, предлагает просто
так сыграть в козла, 21, и ещё с десяток названий игр на выбор
озвучивает, показывая колоду карт в руке. Говорю, достав наушник, что,
мол нет, не хочу, не интересно. Он настаивает снова, продолжая
перечисление игр, подчёркивая что не на деньги же. "Повторяю -- нет",
вставляю наушник назад. Он не унимается. "Сколько раз вам повторить
нет?". Всё равно не отстаёт. Дальше уже просто молча игнорирую не смотря
на него. Через пять секунд отстал, "какой-то вы не разговорчивый". Пошёл
к кому-то дальше в очереди, девицу похоже уговорил поиграть, слыша его и
её голоса. Что это было? Кто это был? Не слышал, не видел такого прежде.
Очень не понравилось что на троекратное (или даже более) чёткое "нет"
(без наверное или раздумья и неуверенности) привязывается как банный лист.

19 months agoСообщил о БПЛА в Москве
Sergey Matveev [Mon, 4 Sep 2023 17:13:55 +0000 (20:13 +0300)]
Сообщил о БПЛА в Москве

Сегодня видел как небольшой самолёт, ниже многих зданий, с пухлым
передним фюзеляжем (как у кучи всяких БПЛА, судя по фотографиям)
бесшумно пролетал по Москве. Недолго думая сообщил в полицию. Размер,
высота, направление, цвет, шумность, вертолётного или самолётного типа,
и подобное спросили. Судя по новостям, взрывов вроде не было. Или
грохнулся, или сбили, или он разведывательный был, насколько понимаю.

19 months agoНе шибко много я и хожу
Sergey Matveev [Mon, 4 Sep 2023 08:49:09 +0000 (11:49 +0300)]
Не шибко много я и хожу

За последние два месяца я регулярно раз в 2-3 дня выходил погулять. Пару
лет назад даже было немыслимо для меня идти на прогулку просто ради
прогулки, а не для того чтобы в какое-то определённое место попасть.
Сейчас не могу без этого, не сидится дома, хочется размяться.

И в пути я по 3-3.5 часа на ногах. Думал что уже не менее 20-25км при
этом точно делаю, но на днях посмотрел по карте мой последний путь:
всего 15км туда-обратно. Выходит что я двигаюсь около 5км/ч. Я обгоняю
пешком всех людей -- хожу быстро. Насколько знал, ходят они 5км/ч,
поэтому ожидал что у меня ну 7-8 должно быть. Фигня оказалась.

Заходил в глубь Лосиного острова на пару километров. Давно я в нём не
был. Ужасно влажно там и холодно. Через асфальтовую дорогу в город
входишь, буквально 10м, и сразу чуть ли не на десять градусов выше
температура.

19 months agoДоверие к документации Linux у разработчиков OpenBGPD
Sergey Matveev [Sun, 3 Sep 2023 15:03:57 +0000 (18:03 +0300)]
Доверие к документации Linux у разработчиков OpenBGPD

commit 9abfa3f135f62515557c78cc182dcc3a683c125e
Author: Claudio Jeker <claudio@openbsd.org>
Date:   2023-08-30 10:46:34 +0200

    Never ever trust the linux documentation, it is full of lies!

    While RTA_METRICS is everywhere documented as type `int` it is not.
    It seems to be an array of ints but who knows, there is no documentation,
    not even in the header files.

19 months agoДоступ к LUKS разделу GNU/Linux-а... просто зажав Enter
Sergey Matveev [Sat, 2 Sep 2023 10:31:02 +0000 (13:31 +0300)]
Доступ к LUKS разделу GNU/Linux-а... просто зажав Enter

https://www.opennet.ru/opennews/art.shtml?num=59702
Ага, вот так вот просто (почти) зажав Enter, можно не то что обойти ввод
пароля, но и вообще получить доступ к дешифрованному разделу LUKS. Но
для этого надо использовать ключ в TPM. Вот именно из-за подобных
инцидентов я не доверяю никаких криптотокенам/ключам/TPM/etc -- если я
чётко знаю что *я* должен ввести ключевой материал, то это я понимаю,
могу прикидывать риски и доверять так или иначе. А если это чёрный ящик,
где я, будучи не НИИ/НТЦ/ФСБ, не могу ничего проверить или узнать, то не
могу этому доверять. Безусловно никто не отменяет keylogger и прочие
штуки, но уж просто зажав Enter получить доступ к шифрованной информации
(грубо говоря)... это как-то уж совсем ни в какие ворота.

20 months agoЗащита игр от нелегального копирования
Sergey Matveev [Thu, 31 Aug 2023 19:23:49 +0000 (22:23 +0300)]
Защита игр от нелегального копирования

https://www.youtube.com/watch?v=wr7eqHS3rEk
Показана масса способов защиты от копирования игрушек прежде мне не
ведомых. Чего только не придумают!

20 months agoПринципы работы lattice PQC алгоритмов, MLS
Sergey Matveev [Tue, 29 Aug 2023 19:32:12 +0000 (22:32 +0300)]
Принципы работы lattice PQC алгоритмов, MLS

https://www.youtube.com/watch?v=_C5dkUiiQnw
https://www.youtube.com/watch?v=QDdOoYdb748
https://www.youtube.com/watch?v=K026C5YaB3A
https://www.youtube.com/watch?v=FESp2LHd42U
Симпатичная девчонка рассказывает про то, что такое пост-квантовая
криптография и на пальцах принципы работы lattice-based схем, а также
про групповое шифрование в MLS протоколе.

20 months agoАнна
Sergey Matveev [Tue, 29 Aug 2023 09:26:29 +0000 (12:26 +0300)]
Анна

Скинули тут ссылку на рецензию фильма "Анна". Ссылка на dzen.ru, сервисе
Яндекса, поэтому без JavaScript не открыть. Прислали текст, забавно
написанный и в котором нет сомнений что всё так в фильме. Ибо "смотрел"
(проматывая так, что минут за десять управился) "Красный воробей", в
котором такая лютая паршивая дичь, что только голые телеса Лоуренс
удерживали у экрана.

    1985 год. По Москве едет «Джигульи тщетвьорка» (говорит с сильным
    американским акцентом), за рулем сидит американская агентша,
    загримированная под советскую женщину.

    Тут в машине звонит телефон. Если бы у кого-то из настоящих
    владельцев «четвёрки» в 1985 году в машине зазвонил телефон, он бы
    закричал и въехал. Но женщина спокойно берет трубку — сразу видно,
    агент. Трубка большая с витым телефонным проводом — только по такому
    телефону прямо в «четвёрку» может дозвониться куратор из ЦРУ. Он
    говорит, что всё пропало, Петька вылезай, нас предали, гони в
    американское посольство. Женщина такая:
    — Ну ладно, давайте.

    Женщина гонит. Пока она гонит, по всей Москве дяденьки в кожаных
    плащах попарно подходят к нескольким людям сзади и под белы руки
    ведут их понятно куда. В застенки! (говорит с сильным подвальным
    акцентом).

    Женщина-агент останавливается у ворот американского посольства и
    говорит, что она дипломат, пропустите. Её обещают через секунду
    впустить и женщина расслабляется. Она не знает, что за рулем
    «четвёрки» вообще расслабляться нельзя, поэтому через секунду в неё
    насмерть приезжает Гелендваген.

    Вскоре ЦРУшный куратор получает посылку. Он вскрывается коробку и
    отшатывается — в коробке голова агента! Зритель сначала тоже
    отшатывается, но потом наоборот приглядывается — голова аккуратно
    упакована в полиэтиленку, в пенопласт... Очень хорошо упакованная
    голова, прямо приятно за советскую почту! Вокруг куратора стоят еще
    восемь коробок.

    Проходит пять лет.

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

    Она едет в Париж фоткаться и жить жизнью модели — ходить в красивом,
    волооко смотреть и спать с женщиной. Она знакомится с русским
    бизнесменом (говорит с сильным криминальным акцентом), они крутят
    роман, но целомудренно. Через два месяца бизнесмен говорит, что сил
    на целомудренность у него больше нет, что он в конце концов оружием
    торгует, а тут Анна из него веревки вьёт и так нельзя. «Хорошо», —
    говорит Анна и идёт в ванну готовиться к разврату. А бизнесмен не
    идет, он к разврату готов.

    Анна возвращается из ванны без разврата, но неожиданно с пистолетом
    и стреляет бизнесмену из пистолета сначала в голову, а потом два
    контрольных... в грудь. Перепутала, наверное.

    Ого! — говорит зритель, который тоже, как русский бизнесмен, был
    более готов к разврату, чем к пистолету.

    И тут нам рассказывают подлинную историю Анны за три года до этого.
    Она трагическая: начало девяностых, Анна живёт в Москве, а её парень
    — актёр Александр Петров. Он ведёт себя как Александр Петров,
    смеется как Александр Петров и кричит как Александр Петров. Мы
    понимаем, как Анне плохо.

    Анна возвращается домой из магазина с двумя авоськами (говорит с
    сильным продуктовым набором, то есть акцентом). Тут подъезжает
    Александр Петров с дружками на машине типа «наглый Мерс» и
    приглашает Анну прокатиться. Анна говорит:
    — Ну ладно, давай.

    Они едут в банкомат.
    — Но у нас же нет банкоматов?! — говорит Анна.
    — Теперь есть! — радуется Петров. — Один!

    Они подъезжают в банкомату, Петров достает из багажника Мерседеса
    какого-то иностранца и начинает вместе с дружками пихать его в
    банкомат, чтобы обменять на деньги. Иностранец полный — он не лезет
    в банкомат.

    Тут приезжает милиция. Происходит перестрелка, а затем погоня.
    Мерседес уходит от погони, а новенькие и бодрые, словно шмели,
    милицейские Нивы хищно настигают Петрова и Анну. Но милиционеры
    поочередно попадают в аварию и отстают. Александр Петров смеется над
    ними, как Александр Петров, но тут Мерседес переворачивается. Петров
    и Анна идут домой пешком.

    Дома их поджидает агент КГБ. Он сразу убивает Александра Петрова,
    тем самым сразу и навсегда располагая к себе зрителей. Анна
    облегченно сидит. Все самые тяжелые её вещи — Александр Петров и
    авоськи — лежат на полу. Агент КГБ говорит, что Анна будет шпионкой,
    а он будет её куратором (говорит с сильным половым акцентом). Но
    Анна отвечает «Не-а» и режет себе вены, потому что Александр Петров
    умер, а чего ещё в жизни можно пожелать. Но агент качает головой и
    спрашивает, что бы сказала на это Анина мама, ай-яй-яй! Агенты КГБ —
    отличные психологи. Анна испытывает стыд, затыкает вену пальцем и
    говорит:
    — Ну ладно, давай.

    Агент КГБ знакомит Анну со старой опытной кгбшницей, которая будет
    старшим куратором. Кгбшная старушка не хочет признавать Анну
    агентом, но та отвечает ей Чеховым на Достоевского и старушка берет
    Анну на испытательный срок.
    — Ну ладно, давай, — говорит старушка.

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

    Дальше мы узнаем историю с матрьошками с другой стороны.
    Французского коммивояжера специально заманили на тот рынок. Это
    буквально была операция «Троянская матрьошка» — снаружи московский
    рынок, внутри рынка Анна, внутри Анны КГБ. И все они прокрались
    через коммивояжера в Париж.

    В Париже Анна начинает работать в полную силу, много и часто убивая
    злодеев и забирая их секретные чемоданчики. Складывается даже
    впечатление, что Анна вошла во вкус и просто убивает всех подряд
    мужчин в костюмах с чемоданчиками. И в КГБ такие: «Анна, прекрати,
    ну сколько можно?!», а у самих уже половина застенков завалена
    чемоданчиками.

    Только одного мужчину она не убила из пистолета в лоб, а задушила на
    кровати в красных труселях, а он при этом делал кхр-кх-кх! (с
    сильным предсмертным акцентом). Тут особенно непонятно, был ли он
    злодей или просто Анна сорвалась, узнав, что тот пришел без
    чемоданчика.

    На очередном задании по отниманию чемоданчиков Анну перехватывает
    тот самый агент ЦРУ, которому в начале фильма прислали шпионское
    поголовье. Он предлагает работать на него, дожидается от Анны: «Ну
    ладно, давай» — и перевербовывает её: в гостиничный номер зашла
    русская шпионка по чемоданчикам, а вышла дабл агент по кейсам
    (говорит с сильным вирджинским акцентом).

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

    Постепенно вскрывается, что весь сыр-бор — в генерале КГБ Уасильеве.
    Вообще-то КГБ и ЦРУ всегда дружили, спокойно охотились за шпионами,
    прослушивали друг друга и возможно даже оставляли друг другу
    забавные записочки на конспиративных квартирах. Но потом во главе
    КГБ встал Уасильев и растоптал все куличики в общей секретной
    песочнице.

    И ЦРУ говорит Анне:
    — Понимаешь, Анна, Уасильев — он... он... в общем, у него есть чемоданчик.

    И Анна прям задрожала сразу вся, забилась — чемоданчик, чемоданчик,
    дайте я его убью. Ну и убила прямо в его кабинете в КГБ, а потом
    ушла огородами, то есть подвалами. В КГБ нет огородов.

    Затем собрала в парижском парке за столиком КГБшного куратора,
    ЦРУшного куратора, поцеловала обоих подряд и говорит, мол, мальчики,
    давайте вы меня отпустите пожить, а сами продолжайте следить друг за
    другом хоть без выходных, микрофоны там, записочки, бинокли, ну всё,
    чем вы обычно занимаетесь. Давайте?

    А мальчики сидят и у каждого за спиной полпарка агентов, и у всех
    пальцы на курках дрожат. И все они целиком тоже дрожат, да так, что
    в парке листья с деревьев осыпаются. Мальчики подумали и говорят:
    — Ну ладно, давай.

    Жаль, что в фильме Анна не рожает детей от обоих кураторов — тогда
    ЦРУ с КГБ были бы не только друзья, но ещё и семья.

    Анна уходит, уходит, уходит и почти уже ушла, но тут из кустов
    выскакивает КГБшная старушка и убивает Анну из пистолета в грудь. Но
    не совсем, потому что старушка тоже генерала Уасильева не любила.
    Пистолет у нее ненастоящий, и стреляет он не по-настоящему, и грудь
    у Анны тоже видимо ненастоящая. Поэтому труп Анны уползает в кусты,
    а старушка садится в кабинет генерала Уасильева и становится
    начальницей КГБ.

    Она открывает ноутбук, а там видосик от Анны. Анна говорит, что у
    неё на старушку компромат. Поэтому возьми моё досье, старушка — и
    удоли его! Удоли!

    Старушка думает: «Ну ладно, давай» — и нежно удаляет досье. С
    сильным материнским акцентом.

В США снова что ни фильм про нас, так показывают как зверей, продажных
по любому поводу, всех женщин как конченых шлюх, страну предателей,
трусов и воров. А ведь, если забыть про пропаганду, то по бежавшим из
страны такое мнение и сложится действительно.

20 months agoСтруктурированное логирование в Go
Sergey Matveev [Mon, 28 Aug 2023 14:19:57 +0000 (17:19 +0300)]
Структурированное логирование в Go

https://go.dev/blog/slog
https://pkg.go.dev/log/slog
https://github.com/golang/example/blob/master/slog-handler-guide/README.md
Про slog я давно уже слышал что наконец-то что-то более навороченное чем
родной log добавят в новую версию Go. Но не вчитывался даже в документацию,
поэтому и не обратил внимание на возможность объединять key-value значения
в группы. Мне казалось этого нет, поэтому заменой логирования который
умеет делать RFC 5424 структурированные записи.

Сегодня уже вплотную начал рассматривать slog. Группы есть -- а значит
RFC 5424 задачи может покрыть. С первого раза и первого компилирования
написал slog.Handler который бы сохранял записи в recfile формате. Очень
удобно и просто работать со всем что даёт slog. И разные уровни, и
key-value и просто сообщения, и With/WithAttrs, и WithGroup -- всё
тривиально но удобно. Заморочены на производительности -- приятно. И
явно типизированные данные в качестве value можно логировать, что
здорово. В двух проектах мою самопальную систему структурированного
логирования можно полностью заменять на slog.

Я не поклонник RFC 5424 сейчас, но его внедрял и в ivi и на следующей
работе. Сам формат сейчас перестал нравится тем, что многострочные
данные уже не засунуть, типа traceback-ов, если только не изобретать
дополнительный формат или экранирование. Мне нравится идея записей из
recfile-ов, где и многострочные можно засовывать и читается это легко
человеку и даже готовые утилиты для работы есть.

20 months agoНужна ли математика программисту?
Sergey Matveev [Sun, 27 Aug 2023 05:25:17 +0000 (08:25 +0300)]
Нужна ли математика программисту?

https://beldmit.dreamwidth.org/963985.html
Само собой -- смотря какими задачами занимаешься. Но мне она ни разу не
понадобилась. Более того: я в школе то её еле еле на тройку натянуто
сдал. Непойми как в институте умудрился чуть выше двойки сдать.
Программист я посредственный, возможно из-за отсутствия знаний и умений
математических -- ну да и ладно, работы всё равно хватает и без неё.
Понравилось как автор написал:

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

20 months agoСтатическая линковка с pthread
Sergey Matveev [Sat, 26 Aug 2023 12:11:00 +0000 (15:11 +0300)]
Статическая линковка с pthread

https://stackoverflow.com/questions/35116327/when-g-static-link-pthread-cause-segmentation-fault-why
Под FreeBSD добавление -static для одной моей программы было достаточно,
чтобы статически слинковать и оно работало. Под GNU/Linux -- хрен мне,
конечно же. Линкует, запускает, но при попытке взять lock в pthread-е
выдаёт ошибку. "-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
помог, но сам бы я до этого не допёр.

20 months agoПроизводительность SHA256 с SHA инструкциями, BLAKE3 с AVX512
Sergey Matveev [Sat, 26 Aug 2023 08:58:23 +0000 (11:58 +0300)]
Производительность SHA256 с SHA инструкциями, BLAKE3 с AVX512

В новом Xeon (9412c8cdb0c01875e9bfca8d3efde9695e4d9211) появились SHA
инструкции, но только которые SHA1 и SHA256 поддерживают. Проверяю
скорость: pv < /dev/zero | cmd

     NUC, cmd=sha256: 152 MiB/sec
    Xeon, cmd=sha256: 226 MiB/sec

     NUC, cmd=openssl sha256: 276 MiB/sec
    Xeon, cmd=openssl sha256: 933 MiB/sec

b3sum (который на Си, github.com/BLAKE3-team/BLAKE3) поддерживает AVX512:

     NUC: 1.68 GiB/sec
    Xeon: 3.43 GiB/sec

но это всё только одно ядро грузит. Go-шная реализация
(lukechampine.com/blake3) выдаёт такие же скорости.

Ради интереса остальные хэши на Xeon, никаких открытий:

    b2sum: 506 MiB/s
    openssl sha512: 493 MiB/sec
    skein512: 463 MiB/sec
    b2sum -a blake2s: 412 MiB/sec
    skein256: 367 MiB/sec
    goshake128: 348 MiB/sec
    sha512: 345 MiB/sec
    goshake128: 284 MiB/sec
    nettle-hash --algorithm=streebog*: ~82 MiB/sec

То бишь, SHA256 самый медленный (ну не считая Стрибога, в котором никто
не заморачивается оптимизациями (они есть в проприетарных решениях или
железе)), но с SHA-инструкциями самый быстрый, кроме BLAKE3.

20 months agoПоддерживаемые команды CPU
Sergey Matveev [Sat, 26 Aug 2023 08:42:56 +0000 (11:42 +0300)]
Поддерживаемые команды CPU

В 93a94460359f21b284080d1a1b4be8dcea26c4bd упоминал cpuc утилиту,
которая красиво выводит список расширенных инструкций процессора. А то
прежде я знал только способ в виде чтения dmesg-а, рассказывающий про
процессор.

В новом Xeon (9412c8cdb0c01875e9bfca8d3efde9695e4d9211) у меня дома
появились AVX512 инструкции, а также SHA. Пошёл в код Go смотреть
поддерживает ли он их и как определяет наличие. Увидел
golang.org/x/sys/cpu модуль, через который можно получить почти такой же
список расширений как и cpuc выдаёт:

    import "golang.org/x/sys/cpu"
    data, _ := json.MarshalIndent(cpu.X86, "", "  ")
    fmt.Println(string(data))

Затем вспомнил, что ведь lukechampine.com/blake3 Go-шный пакет тащит за
собой github.com/klauspost/cpuid/v2, который наверняка занимается
узнаванием поддерживаемых команд. И в blake3 вроде AVX512 поддержка
есть. Действительно, cpuid отдельную утилиту предоставляет, которая и
частоты и размеры кэшей покажет -- побольше информации чем cpuid и лично
мне приятнее с Go иметь дело:
    go install github.com/klauspost/cpuid/v2/cmd/cpuid@latest

20 months agoПристроил корзину для дисков
Sergey Matveev [Sat, 26 Aug 2023 08:28:56 +0000 (11:28 +0300)]
Пристроил корзину для дисков

Из-за рёбер поддерживающих 5.25" устройства, вставить мою имеющуюся
(fcc65425cfcba9a10396b23ac1c22690d95cc6cb) корзину на пять дисков просто
так не вышло . Руки у меня из жопы и я не знаю как хорошо от них
избавиться. В прошлом корпусе был очень мягкий метал и я его просто
пассатижами расшатал и загнул.

Но если её перевернуть на 90 градусов, то она конечно же влезает, правда
занимая ещё один (то бишь все) 5.25" слот и имеет пустые места и не
закреплено по бокам. Вставил поролоновые вкладыши (от ИБП вроде) и не
болтается, сидит достаточно крепко. Охлаждению мешать по идее не должны
-- оно за счёт вентилятора прикреплённого к заднице корзины идёт, а не
за счёт теплопроводности по корпусу.

Приобрёл miniSAS↔4xSATA переходник для материнской платы, но не вставлял
-- про запас и на всякий пожарный будет. В корзине у меня SAS диски,
поэтому подключена она к HBA переставленному с прошлого сервера. Эти SAS
диски у меня для чтения/записи со стримером использовались в основном,
ибо размер у них всего 450GB. Но они на 15kRPM -- так что жрут дофига
электричества.

Впервые вот использовал "camcontrol stop daX" команду для их останова.
Действительно -- просто останавливаются, а на корзине при этом лампочка
начинает гореть напротив каждого из них. Если раскручен -- то она
выключена и только мигает при активности. Так что вот удобно можно
вырубать их пока не нужны. И при этом, собственно, корзину для
полноценного hotplug-а использовать. Ведь штатный backplane в корпусе
для SATA дисков нифига не hotplug -- если вынуть диск, то прям слышно
что питание на всех остальных сбрасывается тоже.

20 months agoВкладыши к жвачкам -- детская валюта
Sergey Matveev [Sat, 26 Aug 2023 06:39:08 +0000 (09:39 +0300)]
Вкладыши к жвачкам -- детская валюта

https://moslenta.ru/news/city/nazvana-glavnaya-detskaya-valyuta-sovetskogo-soyuza-25-08-2023.htm
Как валюту при мне (это правда уже РФ, а не СССР) не использовали их, но
коллекционировали. У меня до сих пор пачка из десятков вкладышей
сохранилась и лежит в ящике. Точно много Turbo.

20 months agoЗапуск FreeBSD под Firecracker
Sergey Matveev [Thu, 24 Aug 2023 21:03:05 +0000 (00:03 +0300)]
Запуск FreeBSD под Firecracker

https://www.usenix.org/publications/loginonline/freebsd-firecracker
Интересное чтиво про приключения разработчика о том, как он портировал
FreeBSD под минималистичной платформой виртуализации. То тут надо было
сделать реализацию не следующую стандарту, но зато совместимую с
забагованным Linux, то там указать что используется сломанная штука. А
также куча интересных мелочей как можно очень круто сократить время
загрузки ядра.

20 months agoserde_derive
Sergey Matveev [Thu, 24 Aug 2023 20:01:06 +0000 (23:01 +0300)]
serde_derive

https://www.opennet.ru/opennews/art.shtml?num=59656
В новости про выход очередной версии Rust упомянуто желание
разработчиков популярного пакета (зависимость для тысячи других)
распространять его только в бинарном виде. Вот как я люто не люблю
всё что связано с Rust, так и продолжаю ещё больше: в головах людей
просто недопустимые решения и вообще мысли. Идиотизм и долбанутость.
Как и самого Rust, где разработчики срать хотели на его boostrapability.

Ведь тот же JavaScript или NodeJS или npm не любят в первую очередь не
из-за того что они сами по себе так плохи, а потому что последователи,
вся экосистема, основная масса разработчиков такие, что лучше не
связываться. И Python уже таким же стал.

20 months agoЖелезный повод уйти с первого свидания
Sergey Matveev [Thu, 24 Aug 2023 05:13:20 +0000 (08:13 +0300)]
Железный повод уйти с первого свидания

https://lenta.ru/news/2023/08/24/away/
Эксперты пишут, что "если у мужчины нет соцсетей и мессенджеров, стоит
уйти со свидания". О как всё просто то оказалось почему у меня с женщинами
не ладилось. Дожили...

20 months agoВпечатления от нового сервера
Sergey Matveev [Wed, 23 Aug 2023 06:06:18 +0000 (09:06 +0300)]
Впечатления от нового сервера

Переставить жёсткие диски из прошлого сервера и загрузиться с них, как и
ожидалось, не вышло. Legacy/CSM по идее есть, но что-то с ним не вышло,
видео вывода никакого не увидел. Хотя и не сказать что я потратил много
времени на это. Так как в начале загрузочных дисков у меня находился
swap и freebsd-boot раздел, то я просто создал EFI и уменьшил swap. Пару
минут и с UEFI всё пошло прекрасно загружаться.

Материнка мне понравилась (9412c8cdb0c01875e9bfca8d3efde9695e4d9211). А
вот в корпусе первым делом что стало не хватать: отдельных лампочек для
каждого HDD. Да и в целом оно не рассчитано на hotswap, ибо нужно же
вскрывать его крышку для доступа к дискам. Этом плане оно конечно отнюдь
не серверный. С охлаждением жёстких дисков проблем никаких, 36±2 градуса.

Ошибся что можно было бы вставить две 5.25" корзины для HDD. Одна такая
корзина у меня занимает не два отсека, а три. Но не проблема. А вот
проблемой оказалось вставить её: она не имеет пазов для полозьев между
каждым из 5.25" отсеком в корпусе. В прошлом корпусе, неизвестно откуда
у меня притащенным, дешёвым и с жестяным металлом -- я просто
пассатижами загнул эти полозья чтобы не мешались. А в текущем корпусе
метал достаточно жёсткий. Так что пока не вставлял корзину -- пока
не подключённая лежит, как и прежде большую часть времени жизни.

А так никаких неожиданностей. Со вчерашнего дня сервер заменил. Из-за
смены MAC-адресов только IPv6 link-local в паре мест пришлось поменять
на других компьютерах. Если бы не треск HDD, то его вообще не слышно.

20 months agoВместе с чайником обновил и сервер
Sergey Matveev [Mon, 21 Aug 2023 20:11:24 +0000 (23:11 +0300)]
Вместе с чайником обновил и сервер

Вчера обновлял чайник (c55795c7d6ef3e1679d28e80288546df5c5527cf), ибо
сломался. А сегодня мой второй сервер два раза спонтанно просто брал и
перезагружался без уведомления ОС (8b084f928564cd3b23edc8bfd8dcf5d6c1d1892e).
В общем, ему точно хана, ибо два раза уже что-то "выпускало джина".

Поехал в НИКС и приобрёл новый сервер. Удивительно, но почти все
компоненты были сразу же в наличии, так что я его даже уже успел собрать
и проверить работоспособность под FreeBSD. В теории мне достаточно
только переставить диски из старого сервера, хотя я уже запамятовал как
там установлена система и UEFI (289a1c8a9aa5e98936203d48c6079903aaf3550b).

* Нормальный такой тяжёлый здоровый корпус Inwin. Место под пять 3.5"
  дисков. Плюс 4 5.25" слота. Плюс ещё какое-то место под 2.5". Прелесть
  5.25" в том, что у меня же есть корзина, занимающая два 5.25" слота,
  на пять 3.5" дисков, в которой сейчас 4x SAS диска. То есть, если ещё
  такую корзину вставить, то вообще в сервере 15 дисков может уместиться
* Power Man-овский 750W блок питания, который в корпусе шёл комплектом.
  Никаких модульных кабелей, просто килограммовая Ниагара кабелей. Ну я
  по идее и половину мощности не буду использовать -- так что вроде сойдёт
* Материнскую плату взял ASUS P12R-E. Всякие SuperMicro уж больно
  дорогие. Но это типа вся из себя серверная, с точки зрения НИКС и
  ASUS. По поведению действительно такая: никаких desktop свистоперделок
  не заметил, BIOS даже без GUI, классический текстовый. Hex-индикатор,
  всякие там джамперы, LED-ы. В комплекте даже планка с COM-портом идёт.
  Если вставить BMC, то будет VGA, но я его не приобретал и не хочу. А
  так как мой CPU с GPU, то видеовыход на HDMI идёт -- первый сервер
  который не поддерживает VGA. 4x порта SATA, плюс mini-SAS порт на ещё
  четыре. 2x 1Gbps LAN (igb драйвер, всё как полагается. В общем очень
  мне она понравилась всем
* Xeon E2356G процессор. 6 ядер, 3.2GHz. Очень такой современный. Среди
  инструкций впервые увидел что есть SHA -- SHA256 ускорение. Есть куча
  всяких AVX512, которые тоже впервые у меня дома появились
* Пока только одна планка 32GB DDR4 ECC памяти, но заказал ещё три,
  чтобы суммарно были все 128. Это единственное что не было в
  достаточном количестве сегодня на складе
* Ну и какой-то башенный ID-Cooler вентилятор с радиатором для CPU.
  Подозрительно дешёвый, но по характеристикам вроде всё более чем с
  запасом. Ориентировался на то, что НИКС свои сервера с ним собирает
  (в таком же корпусе и такими же Xeon-ами)

Пока я его пощупал только минут десять, убедился что FreeBSD загружается
и видит всё железо что нужно. Но чувствую что всё тип-топ. Ни одного
косяка при сборке не допустил, ни одного кабеля вроде бы не подключил не
правильно. В него же пойдёт и SAS HBA и корзина, COM-порт подключить надо.
memtest86+ прошёл, хотя пока у меня только 1 из 4 планок памяти.
Максимальная температура была 46 градусов.

Единственное что меня не очень обрадовало по сути -- отсутствие VGA.
Сколько раз писал о том, что с HDMI регулярно проблемы. Вот и сегодня: с
одним HDMI кабелем он даёт картинку, а с другим нет. Тогда как NUC
работает с обоими. Но в целом то ладно -- это сервер, ему и COM-порта бы
было достаточно.

20 months agoЧайник и приватность
Sergey Matveev [Mon, 21 Aug 2023 10:27:55 +0000 (13:27 +0300)]
Чайник и приватность

Во время мыться чайника, неудачно надавил на его стекло и оно лопнуло.
Поехал в Глобус за новым. Вторая чисто бытовая покупка с момента переезда
в свою квартиру -- прежде только микроволновка ломалась. На кассе спросили
чего ж у меня нету их карточки персональной, мол вон какая скидка бы была!
Объяснял что косвенно плачу за приватность и анонимность -- не хочу чтобы
где либо бы была история моих покупок. Ничего не ответили на это, ибо чем
тут парировать можно?

20 months agoСохранение torrent по magnet URI
Sergey Matveev [Mon, 21 Aug 2023 10:09:10 +0000 (13:09 +0300)]
Сохранение torrent по magnet URI

aria2c --bt-save-metadata --bt-metadata-only "magnet:..."
скачает только torrent-файл по DHT, сразу же выйдя.

20 months agoЧего все так ненавидят Астру?
Sergey Matveev [Mon, 21 Aug 2023 07:06:49 +0000 (10:06 +0300)]
Чего все так ненавидят Астру?

https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%82%D1%80%D0%B0_%D0%9B%D0%B8%D0%BD%D1%83%D0%BA%D1%81
Тьма наших компаний переходит на этот дистрибутив. Повозился с его
сертифицированной версией. Прежде как-то трогал и common edition. Вот
вряд ли преувеличу, если скажу что за последние два года это наверное
был самый беспроблемный и вменяемый дистрибутив GNU/Linux. Под Ubuntu
даже терминал может на запускаться (70593bcac3eb3323307ddbe158fc829438bacd08),
В Fedora (df37da70db7620b53e79b2492c154bc713da78ad) нет документации по
настройке сети. В Debian уже не помню, но тоже от былого качества давно
и след простыл (ведь за ним я когда-то сидел лет семь).

В Астре же даже банальное именование "eth0" NIC-а остаётся.
/etc/network/interfaces правишь и никакой NetworkManager,
systemd-network или прочая дрянь не мешает и не сбивает настройки. В
сертифицированной версии почти никаких заголовочных файлов не прилагают.
Даже OpenSSL или curses не будет. Собирай сам руками их в системе, ну
или собирай софт под common edition, а дальше уже копируй собранные
версии на special edition. Что, в общем-то, адекватно. Никаких
неожиданностей и внезапных поломок/багов не обнаружил, хотя два дня
возился с сетевыми/административными задачами. Даже логи по умолчанию
пишутся в /var/log, всякие "service" команды работают. Ни одной systemd
утилиты не пришлось трогать.

Но не без косяков. Например при установке мне не дают выбрать MBR или
GPT мне нужен. При установке предлагают XFS ФС выбрать, но в режиме
восстановления системы -- xfs-utils (или как их там) отсутствуют. То
есть, предлагают то, для чего не нет в их базовой системе средств
починки. Прописывают какие-то UUID-ы в загрузчики/fstab-ы, из-за которых
после переноса образа не запустится ничего на другом компьютере (хотя
это возможно и специально сделано). Но это всё даже сильного негодования
у меня не вызывало всё, на фоне mainstream дистрибутивов современных.

Не понятно почему нет tmux-а например. Астры не предполагают удалённое
взаимодействие? Пришлось собирать руками.

Создаётся впечатление, что Астра не люба тем, кто привык быстренько
делать apt install pkg и довольствоваться результатом. А она намекает на
то, чтобы включалась голова и критическое мышление. Собирать руками это
больший геморрой? Да, безусловно. Но зато это дисциплинирует и
заставляет вдумчиво ставить софт, а не слепо доверять непойми как, кем и
когда собранным бинарникам. Я же ведь в FreeBSD своей точно также делаю.
Поэтому, видимо, отторжения она и не вызывает.

В любом случае, это не отменяет того, что она проприетарна и закрыта --
поэтому рекомендовать её с точки зрения этики и морали конечно же
нельзя. Менять одну проприетарную ОС (Windows) на другую (Astra) -- так
себе радость должно вызывать. К тому же основанную на systemd.

ALT Linux я ведь в 2000-х трогал много. Мой первый начальник был
выходцем из этой конторы. И на тот момент это вполне себе качественный
серьёзный дистрибутив был. С тех времён ни разу не трогал. Помню что
были какие-то мутные истории про то, что он не свободным вроде бы стал:
785a2400264beaf24fe7fa4e4c7d285bdb9b0ad1. Но что-то с ходу так и не
понял вернулось ли там в норму.

20 months agoБитый GPT не вывести
Sergey Matveev [Mon, 21 Aug 2023 06:38:30 +0000 (09:38 +0300)]
Битый GPT не вывести

Нужно было ужать образ жёсткого диска. Сделал resize раздела, поменял
его размер. В конце остаётся много пустого места. Если скопировать такой
образ простой dd, то FreeBSD не хочет показывать и загружать таблицу
разделов, выводя в dmesg что GPT вообще плох плох и никакой recovery вам
не поможет.

Если переносить образ на диск большего размера -- то в dmesg будет
предупреждение что второй GPT не находится в конце диска, но это чинится
одной командой. А тут первый GPT указывает на LBA выходящего за пределы
диска. Всякие kern.geom.part.check_integrity не помогают. Хотя я ведь
точно знаю что первый GPT исправен и просто нужно сделать его копию и
поправить её адрес.

Имея на руках оригинальный диск, можно сделать gpart backup, который
выведет в простом текстовом формате разметку, а дальше gpart recover-ом
записать её на уменьшенный диск. Но вот backup берёт информацию из
GEOM-а, который на маленьком диске отказывается подгружать информацию о
разделах и поэтому backup не сработает.

И вот не нашёл вообще никаких средств в самой ОС чтобы заставить
показать хоть в каком-нибудь виде информацию о GPT разделах, чтобы хотя
бы вручную восстановить этот backup файлик и с него уже валидный GPT
записать. То есть мне просто нужно нечто, что могло бы прочитать 32
сектора диска в начале, интерпретировало

20 months agoНеобычные животные под водой
Sergey Matveev [Fri, 18 Aug 2023 09:11:51 +0000 (12:11 +0300)]
Необычные животные под водой

https://habr.com/ru/companies/leroy_merlin/articles/755276/
Жуть берёт даже от фотографий половины таких тварей.
На какие только выдумки природа способна!

20 months agoКонвойный член
Sergey Matveev [Thu, 17 Aug 2023 19:30:48 +0000 (22:30 +0300)]
Конвойный член

https://lenta.ru/news/2023/08/17/accident/
В статье про "худшие места для внезапной эрекции" упоминают сабж:

    Когда уставшие люди едут в армейском грузовике сзади по бездорожью,
    их трясет, и вибрация вызывает эрекцию

Не забуду как в Гриффинах была сценка менее чем на 10сек: двое на
трахтящем мотороллере стоят на светофоре; водитель прищурив глаза
оборачивается к пассажиру (Питеру Гриффину); тот отвечает "это от
вибрации". Ничего не показывают явно, тема больше не поднимается.
Так я вот у разных девушек и женщин (на протяжении, так сказать,
жизни), с которыми мог такие темы обсуждать, спрашивал поняли ли
они о чём тут вообще в этой сценке речь. Никто не понял. Хотя я
то эту серию увидел ещё будучи школьником.

20 months agoЧеловек вручную настраивает ESP между хостами
Sergey Matveev [Thu, 17 Aug 2023 11:24:32 +0000 (14:24 +0300)]
Человек вручную настраивает ESP между хостами

https://www.sobyte.net/post/2022-10/ipsec-ip-xfrm/
ip xfrm командой устанавливает AES-GCM IPsec шифрование. Скрипт при
запуске каждый раз с нуля создаёт ключ шифрования, копирует по ssh на
другую машину: неплохо то, что хотя бы создаётся новый ключ на каждый
перезапуск. Но он в обе стороны использует один и тот же ключ: то есть
буквально дважды переиспользует AES-GCM ключ. *Полностью* нивелируя
безопасность.

20 months agoudpobfs
Sergey Matveev [Wed, 16 Aug 2023 17:18:53 +0000 (20:18 +0300)]
udpobfs

http://www.git.cypherpunks.ru/?p=udpobfs.git;a=blob;f=README
Постоянно стали возникать новости о блокировках VPN-ов в РФ. Хотя у меня
только один раз возникала она (55eac8d1c25b49bafcc4ed1ece2f4f7763e0230f)
на несколько часов.

Многие предлагают бороться обфускацией трафика, маскированием его под
что-то другое. Я на всё это смотрю проще, со времён разработки GoVPN:
если сеть не позволяет случайные данные (сплошной рандом) отправлять, то
значит это whitelist блокировка: разрешено отправлять только явно
заданные вещи. По этой сети нельзя произвольными данными обмениваться.
Извращаться и страдать хернёй с попытками то так, то сяк, то таким или
другим образом запрятать данные, а то и вообще со стеганографией -- я не
собираюсь. Нет сети обмена произвольными данными -- значит нет. Мне не
интересно играть в игры, прятки и притворяться по всякому. Это же всё
равно продолжение игры по правилам не совсем дружных с головой людей,
и потакание их тупостям. А с их точки зрения они будут продолжать видеть
то, что люди, не смотря на whitelisting, всё равно продолжают
использовать эти каналы связи.

Blacklist блокировки уже давно стали нормой абсолютно везде в мире,
задолго до РФ -- да и в целом то я не сталкивался с ними на практике
особо.

Так вот для меня лакмусовой бумажкой является возможность отправки чисто
шума, не содержащего ни структуры, ни заголовков явных каких-то, ни чего
то подобного. Это у меня умел GoVPN, но не охота снова смотреть на него,
ибо это мой первый проект на Go, где по идее надо бы вообще всё
переписать с нуля. Сам протокол то там нормальный, а вот код так себе.
Да и я уже говорил, что если бы WireGuard появился раньше, то я бы и не
начинал писать GoVPN, ведь всякие DPI-resistant фишки я уже добавлял
после того как мне просто нужен был какой-то простой препростой VPN, а
не IPsec или OpenVPN.

Нельзя ли просто сделать какой-нибудь простой UDP прокси, который бы
симметрично как-то шифровал пакетики, исключительно для того, чтобы они
выглядели как сплошной шум? Проще написать, чем читать документацию
какого-нибудь shadowsocks, obfsproxy и подобных проектов, где я так и не
смог за пару минут найти как именно они работают и могут ли просто "шум"
слать. Всякие имитации HTTPS/whatever мне не интересны.

Вот и написал его. (Пока?) Даже handshake нету. Предполагаю что в любом
случае уж OpenSSH то будет работать априори (а если нет, то можно
выдернуть Ethernet -- всё равно это не работающая сеть). А значит по
нему (аутентифицированному, с PFS) можно просто отправлять ключи для
udpobfs какими-нибудь скриптами. Вариантов масса. Почему не делать VPN
прямо поверх OpenSSH, который вполне себе из коробки умеет даже TUN
интерфейс создавать? Плохая производительность, как минимум потому что
это поверх TCP будет.

Каждая сторона имеет 64-бит счётчики, являющиеся nonce-ом. В начале
пакета добавляются только 24-бит счётчика, остальная часть в памяти на
каждой стороне. Если значение счётчика пакета пришло меньше чем было
прежде, то значит было переполнение и в памяти увеличивается оставшаяся
часть. Аналогично как это с ESN в IPsec ESP делается. Над полным 64-бит
счётчиком и шифротекстом (ChaCha20) вычисляется Poly1305 (ключ, как это
принято в ChaCha20-Poly1305, берётся из первых 256-бит выхлопа ChaCha20)
вычисляется MAC, но только 40-бит от него используется. 24-бит часть
счётчика и 40-бит MAC добавляются перед шифротекстом, всего восемь байт
overhead. И эти 8 байт шифруются Blowfish-ем. Почему Blowfish? Потому
что у него 64-бит блок, а почти у всех остальных шифров (хоть сколько то
серьёзных) -- 128-бит. "Заголовок" 8 байт. UDP пакет может быть пустым,
а значит для 128-бит шифров понадобится дополнение, с которым не хочется
возиться. Ключи для всего этого (пара ChaCha20+Blowfish для каждой
стороны) вырабатываются из выхлопа SHA3 SHAKE128, на входе которого
общий ключ приходящий из вне.

Демон берёт ключи из stdin -- можно прямо на лету их подавать всё новые
и новые. Конечно же будет какой-то промежуток времени когда ключи будут
разсинхронизованы и поэтому часть трафика потеряется, но да и фиг с
этим. Это всё равно заточено под обфускацию VPN, внутри которого всякие
TCP не сильно пострадают.

Сейчас вспомнил что в коде нет обнуления буферов с nonce-ами после
обновления ключей -- надо будет поправить. Да и всё же хоть какой-то
handshake, пускай даже без DH, но добавить, ибо сейчас при любом выходе
демона ему по хорошему стоит менять ключи. Откладываю это, ибо боюсь что
это вырастит в полноценный транспортный протокол, чего не хотелось бы.

20 months agoМФУ и IPv6
Sergey Matveev [Wed, 16 Aug 2023 06:20:20 +0000 (09:20 +0300)]
МФУ и IPv6

https://en.wikipedia.org/wiki/WS-Discovery
У коллеги есть GNU/Linux, в виртуальной машине которого запускается
Windows (а как ещё с Office OpenXML работать?
8d9138fe39d78b56fa27a0e851dda729d58b8573). Ему стало нужно подключить
принтер+сканер (МФУ) ко всему этому.

Пробросить USB в виртуалку -- проще считать что не вариант, не работает.
Пробовали другие коллеги -- не вышло. Я точно знал что даже не стал бы
пытаться. Поэтому подключить по IP его надо.

Админы сказали что принтер не умеет IPv6, а сеть между хостом и
виртуалкой IPv6-only. Ради интереса я всё же полазил по меню принтера и
нашёл там уже включённый IPv6, но для него ни настроек, ни какой-либо
информации об адресах. ping ff02::1 показал что принтер по IPv6
отвечает.

Решил поднять radvd, чтобы посмотреть примет ли он RA пакет и настроит
ли глобальный адрес? Да, ping -S 2001:db8:... ff02::1 показал что адрес
появился. В Windows, который через мост был соединён с Ethernet-ом --
принтер просто автоматически обнаружился, без каких-либо ручных действий
типа ввода адреса.

Не проверял, но наверное radvd был излишен и можно было ВООБЩЕ ничего не
делать и не предпринимать, а принтер бы всё равно нашёлся и работал, так
как, видимо, обнаружение происходит по WS-Discovery протоколу, по ff02::c.

А люди продолжают упорно верить что IPv6 это всё сложнее. Вот даже
принтер: ничего не надо делать, кроме как тыкнуть на "ipv6 enable". А
Windows IPv6 умеет уже очень давно и вот прекрасно с этим работает на
практике.

20 months agoSite-local адреса IPv6
Sergey Matveev [Wed, 16 Aug 2023 05:57:15 +0000 (08:57 +0300)]
Site-local адреса IPv6

https://blog.apnic.net/2020/05/20/getting-ipv6-private-addressing-right/
Я читал, ещё до знакомства с IPv6, что fec0::/10 адреса, site-local, не
должны более использоваться, ибо deprecated. Встречал их только в старой
литературе.

Сейчас же актуальной заменой для них стали unique local адреса, ULA,
fc00::/7. Я всё равно продолжал называть их site-local, что не верно. И
когда я делаю сети где не выходит или нельзя использовать link-local
адреса, где нет выданных глобальных префиксов, то я просто беру что
попадается из fc00::/64 сети. А это неправильно, ибо ULA (RFC 4193):

    | 7 bits |1|  40 bits   |  16 bits  |          64 bits           |
    +--------+-+------------+-----------+----------------------------+
    | Prefix |L| Global ID  | Subnet ID |        Interface ID        |
    +--------+-+------------+-----------+----------------------------+

где L=1 бит означает что адрес сгенерирован локально. Глобально
сгенерированных пока не бывает. Поэтому L=0 сейчас не валиден.
Корректные ULA адреса могут быть только fd00::/8.

20 months agofilm-grain в AV1
Sergey Matveev [Tue, 15 Aug 2023 07:19:59 +0000 (10:19 +0300)]
film-grain в AV1

Перекодировал тут один старый фильм 1980-х в AV1. В нём сплошное зерно.
Применил впервые film-grain=8 (другие уровни не пробовал, а 8 взял из
документации) опцию при кодировании. Действительно, существенно (десятки
процентов) ускорило кодирование и раза в полтора снизило bitrate, при
оставшемся превосходном качестве.

20 months agoprepro утилиты
Sergey Matveev [Mon, 14 Aug 2023 15:17:01 +0000 (18:17 +0300)]
prepro утилиты

http://www.git.cypherpunks.ru/?p=prepro.git;a=blob;f=README
Не даёт мне покой (01b506180ad27c841d2fefed28cc3cffde06f3a7)
невозможность использовать из коробки SHA256 Git репозитории
в Go. Ну точнее получать модули из них.

Я понимаю что SHA256 формат в Git это экспериментальная штука, но во
всяких GitLab и других системах есть задачи и работа по возможности его
использования. Во всяких github.com/go-git/go-git библиотеках это тоже
поддерживается. Ну и, собственно, никто ничего не будет развивать пока
кто-то не будет неким первопроходцем и популяризатором. А избавляться от
SHA1 не может не быть неправильным, хоть в контексте Git это и не горит.

Удручало то меня в Go то, что нет готовых простых инструментов чтобы
сделать GOPROXY-совместимые директории для раздачи HTTP сервером. Так то
они создаются прозрачно на лету когда я устанавливаю зависимость. Но
чтобы установить её: у меня должен быть HTTP-сервер который бы отвечал
go-import-ом и перенаправлял на VCS. Но когда у меня GOPROXY-совместимый
кэш уже создан, то HTTP-сервер уже должен перенаправлять не на VCS, а на
GOPROXY сервер.

Думал как бы форсировать обращение при вызове go-get (для создания
GOPROXY кэша) не на настоящий go.{stargrave.org|cypherpunks.ru} сервер,
где не должно оставаться go-import-ов с VCS-ом, на какой-то временно
поднятый второй сервер, отдающий URL-ы до VCS-ом. Вызывая go-get-ы у
меня бы заполнилась директория которую бы я отдал для раздачи на GOPROXY
домене. Геморрой, короче.

Ещё пару дней назад я нашёл golang.org/x/mod/zip библиотеку, которая
может сделать ZIP-архив с нужной версией модуля прямо из VCS. Но она не
делает .info/.mod/list файлы. То есть, тоже не законченное решение.

Сегодня вспомнил про это, снова посмотрел на GOPROXY протокол и уже вижу
что "доделать" недостающие файлы -- тривиально. Вот и написал prepro
утилиты, которыми сделал себе GOPROXY/go-import-дружелюбные директории
для раздачи на HTTP-сервере. Несколько zsh скриптов. mk-mod делает
.zip/.info.mod файлы для заданного VCS URL/path, модуля и версии.
mk-list генерирует list-файлы во всей иерархии. mk-goget генерирует HTML
файл с go-import для заданного VCS-Web-URL и модуля (прежде я просто
руками создавал эти файлы, что тоже не было проблемой).

Теперь установить модуль разрабатываемый в SHA256 Git репозитории -- не
проблема, если я конечно не забуду вызвать mk-mod/mk-list для новой
версии в Git. go.* сайты перенаправят на proxy.go.* версии, следующие
GOPROXY протоколу.

Ещё один внезапный profit от этого: так как Git у меня находился только
на моей домашней машине, то вся раздача Go модулей шла с одного места. С
GOPROXY решением, так как теперь это просто несколько статичных файлов
-- я могу безболезненно их ещё и на VPS разместить, о чём прежде я и не
задумывался и вообще забыл что была только одна точка отказа.

20 months agoНападение на мечеть
Sergey Matveev [Sun, 13 Aug 2023 18:32:59 +0000 (21:32 +0300)]
Нападение на мечеть

https://lenta.ru/news/2023/08/13/mechet/
Я вот удивлялся когда-то людям путающим две совершенно разных страны:
Ирак и Иран. Чуть ли не большинство считает, что в Иране арабы живут.
Но новости то что за дебилы необразованные публикуют? В заголовке Ирак,
а на деле беда случилась в иранском Ширазе. В этой мечети я кстати был.

20 months agoНачинаю подписывать Git тэги SSH-ключами
Sergey Matveev [Sat, 12 Aug 2023 12:30:05 +0000 (15:30 +0300)]
Начинаю подписывать Git тэги SSH-ключами

Плавно и неспешно начинаю двигаться в сторону использования OpenSSH
ключей для подписи, вместо OpenPGP. Не раз писал в блоге что не горю
поддержкой всяких наездов на OpenPGP, но простота minisign/signify и
OpenSSH ключей подкупает, особенно когда достаточно OpenPGP использовать
например только для установки доверия, а дальше уже context-specific
per-application дешёвые простые подписи более простыми ключами.

Почти во все свои проекты добавил OpenSSH публичные ключи в документацию
по установке, предоставляю .sig файлы для подписи, включаю их внутрь
Metalink файлов. Подписываю параллельно с OpenPGP.

Теперь вот и в tofuproxy появился Git тэг подписанный. Делается это
действительно легко (d6e5458329cc1eb3a61082b64115bfdecea8a90a), прямо в
директории tofuproxy проекта:

    git config gpg.format ssh
    git config user.signingKey `realpath ~/.ssh/sign/tofuproxy@stargrave.org`
    git config gpg.ssh.allowedSignersFile `realpath PUBKEY-SSH.pub`

signify/minisign я считаю не имеет смысла использовать, если только на
какой-то совершенно минималистичной standalone системе, так как OpenSSH
из коробки вроде бы есть в любом дистрибутиве -- значит поддержка его
ключей шире. В Git оно уже интегрировано. Плюс сам по себе формат его
ключей вполне себе минималистичный, чай не попытка просто распарить
OpenPGP пакеты.

Кстати, по умолчанию генерируемые OpenSSH ключи шифруются aes256-ctr.
Можно форсировать "-Z chacha20-poly1305@openssh.com", тоже доступный в
OpenSSH сборке без OpenSSL.

20 months agoGo и SHA256 Git репозитории
Sergey Matveev [Sat, 12 Aug 2023 11:45:12 +0000 (14:45 +0300)]
Go и SHA256 Git репозитории

Мне казалось, что вроде бы Go без проблем работал с Git репозиториями в
которых используется SHA256 (73555bc7b599082947d066015b3010be9a3e9c5f,
7a48b1fda8f0429e5d0e1c61d961891b83d97ffb). Сделал тут один модуль, тоже
в подобном репозитории, но Go не в состоянии его был склонировать.
Проблема в том, что Go делает "git init", а затем внутри этой директории
"git fetch". Если просто выполнять "git clone", то проблем нет. А
git-init уже фиксирует формат репозитория и поэтому с сервером клиент
уже не может договориться.

Смотрел как бы сделать отдачу модулей не через ссылку на Git репозиторий,
а через отдачу модуля в виде tarball-а. github.com/goproxy/goproxy может
помочь в создании GOPROXY сервера, который на файловой системе и нужные
@v-like файлы наплодит, которые уже раздавать как готовые модули. Но
геморройно как-то это всё пока.

На данный момент решаю проблему так: при попытке go get он падает и
выдаёт путь на экране до директории с репозиторием в который не удалось
ничего склонировать. Перехожу туда, руками делаю:
    git config core.repositoryformatversion 1
    git config extensions.objectformat sha256
и снова вызываю go get, который уже сможет выполнить fetch, а дальше уже
будет использоваться закэшированная версия модуля. Менять тут формат
репозитория можно безопасно, так как абсолютно ни одного объекта ещё не
было скачано и ломаться нечему.

Что-то предлагать или отправлять патчи разработчикам Go бесполезно. В
рассылке патчи они игнорируют. А официально их можно отправить только
через платформы которые недопускают россиян (типа GitHub).

20 months agoГусь-матершинник
Sergey Matveev [Sat, 12 Aug 2023 10:42:36 +0000 (13:42 +0300)]
Гусь-матершинник

https://habr.com/ru/companies/ruvds/articles/753324/
https://www.youtube.com/watch?v=KGFDZq8IhMQ
Не знал что в Atomic Heart есть такой гусь. В YouTube есть записи всех
его фраз. Ну мата прилично конечно. Но порадовало то, что я бОльшую
часть отсылок знаю и понимаю типа "братишки"
(ea6c177863ad872d8d65364622a0a8bce002f29d,
3019ebaf3054e1fd922f6e192f9c0398320d3594).

20 months agoSix Feet Under хороши для работы
Sergey Matveev [Fri, 11 Aug 2023 20:47:26 +0000 (23:47 +0300)]
Six Feet Under хороши для работы

https://en.wikipedia.org/wiki/Six_Feet_Under_(band)
В b1131e9ec315c349c3d299b9cdd4fbbca598dda6 писал что Cannibal Corpse
никогда не нравился мне в целом. Зато вот Six Feet Under -- группа
которую организовал бывший вокалист Каннибалов, более чем заходит.
Простая, незатейливая, ритмичная, приятная для уха -- отлично работа
под неё идёт. Примерно как и Debauchery, только не такая стёбная.

20 months agoPQC для инженеров
Sergey Matveev [Fri, 11 Aug 2023 18:16:00 +0000 (21:16 +0300)]
PQC для инженеров

https://datatracker.ietf.org/doc/html/draft-ar-pquip-pqc-engineers
https://blog.cloudflare.com/nist-post-quantum-surprise/
https://www.schneier.com/blog/archives/2023/08/you-cant-rush-post-quantum-computing-standards.html
Скоро будет опубликован RFC про постквантовую криптографию для
инженеров. Чисто с прикладной точки зрения. Какие алгоритмы есть, их
базовые свойства прикладные (размеры ключей/подписей, предполагаемая
"сила" и тому подобное).

Я не сильно беспокоюсь по поводу PQC, хотя мой OpenSSH уже по умолчанию
между всеми компьютерами использует SNTRUP+25519. Более того, в
последнем проекте на работе я вообще впервые собственноручно кое что для
PQ добавил в протокол, опциональную дополнительную защиту. Про Kyber,
видел, до сих пор всякие речи ходят о патентах на него, из-за чего
OpenSSH его и не выбрал. Но возможно слухи, возможно я его напутал.

Толком я не много чего читал про конкретику всех этих алгоритмов, ибо не
думаю что чего-либо буду понимать, однако вот SPHINCS, а точнее то, на
чём он был основан, уходящее ещё корнями в одноразовые подписи, для
которых и деревье Меркле сделали -- это понимаю. И не смотря на то, что
он на порядки медленнее чем ed25519, имеет на порядки большие размеры
подписей и ключей, но зато он понятен и не требует хранения состояния
как другие алгоритмы.

20 months agoКак МТС IPv6 внедряли
Sergey Matveev [Fri, 11 Aug 2023 16:30:08 +0000 (19:30 +0300)]
Как МТС IPv6 внедряли

https://www.youtube.com/watch?v=jBpubiE9r_w
В общем и целом ничего интересного или нового: железо толком всё давно
уже поддерживает IPv6, причём и для 2G/3G. МТС уже пять лет назад
полностью запустила для мобильных устройств IPv6, доля трафика 60%
(где-то видел эту статистику, но ссылку уже потерял).

20 months agoEmail провайдеры в РФ
Sergey Matveev [Fri, 11 Aug 2023 07:56:33 +0000 (10:56 +0300)]
Email провайдеры в РФ

Вчера перестал отвечать rambler.ru POP3/IMAP4 сервер
(238c6b55fb46cf0546f72ccd0f351d3ba4a3cb64). Только где-то полчаса назад
ожил снова. Больше полусоток не работал! Мне то ладно, чисто на пожарный,
но а если бы это был основной мой email?

Ради интереса посмотрел что ещё у нас "официально" есть. Ну только
mail.ru и Yandex. На mail.ru, как и следовало ожидать, привязка к
сотовому, 1234567890 не введёшь (ну точнее подтверждения не получишь). А
Яндекс это просто какая-то лютая жесть. Зашёл под JavaScript-capable
броузером на yandex.ru и не вижу ссылок на почту. Только если начать
что-то вводить в строке поиска, то там покажется ссылка на почту.
Перехожу, попадаю на mail.yandex.ru, с минуту рассматриваю/читаю
страницу и не вижу чтобы был хоть какой-то намёк на возможность завести
бесплатную почту -- только платная предлагается. Ладно, ввёл как идиот
прям в поиске Яндекса "как завести бесплатную почту на яндексе". Благо,
первая ссылка показала что для доступа к почте надо завести Яндекс.ID. Я
до сих пор не уверен, но видимо они как синонимы используются. Почему
это явно нигде не сказано? Или я отупел совсем или уже полностью не
понимаю как мыслят современные пользователи. Без предоставления
сотового, конечно же тоже ничего там не выйдет. Но больше меня поразило
обилие CAPTCHA! На каждый второй переход/клик (и это под JS-enabled
browser, иначе бы вообще ничего не показывалось!) мне в морду тычут
очередным ребусом, причём отнюдь не тривиальным, на который бы я минуту
наверное потратил реального времени. Ничего не решал конечно же, время
дороже, но по какой-то причине эти CAPTCHA пропадали при очередных
переходах. Я к Яндексу просто несколько раз возвращался.

Если ничего не путаю, то раньше вроде бы по закону каждый Интернет
провайдер обязан был предоставлять почту каждому клиенту. В 2000-х точно
помню что каждый ISP имел, пускай на пару десятков мегабайт, но почтовый
ящик для тебя на его домене.

20 months agoMilk Sad
Sergey Matveev [Thu, 10 Aug 2023 16:46:38 +0000 (19:46 +0300)]
Milk Sad

https://www.schneier.com/blog/archives/2023/08/cryptographic-flaw-in-libbitcoin-explorer-cryptocurrency-wallet.html
https://milksad.info/disclosure.html
Эх, позорнейшее программирование Libbitcoin Explorer (bx), где вместо
криптографических PRNG, использовали Mersenne Twister, и в качестве
зерна --  32-бит текущее время. В итоге куча денег была спёрта с разных
кошельков.

20 months agoДоступность почтового сервера rambler.ru
Sergey Matveev [Thu, 10 Aug 2023 16:17:53 +0000 (19:17 +0300)]
Доступность почтового сервера rambler.ru

Вообще для резерва у меня долгое время уже есть ящик на riseup.net.
За всю жизнь он понадобился только один раз: когда Gandi "отрубил"
все мои домены (c31f6098d68cde8ca765e916fb58e4cb7ce93a69) и,
соответственно, через почту (на этих доменах) я уже связаться не мог.
Web-сайт riseup.net в РФ, насколько вижу, недоступен, хотя почтовый
сервер работает. Но видя что riseup.net даже на IPv6 не слушает нигде,
то в их компетентности у меня сомнения и явно они скоро пропадут
запросто. А ящик на всякий пожарный стоит иметь.

Я был уверен что на более менее известных почтовых провайдерах не
зарегистрироваться без предоставления номера сотового телефона, а то и
ещё небось каких документов, особенно в РФ. Моя первая почта была на
rambler.ru, поэтому туда и пошёл сразу же. Он ни черта не работает даже
под surf-ом с включённым JavaScript, но раз это потребуется один раз при
регистрации, то достал ноутбук старый, загрузил на нём KNOPPIX (просто
известный мне дистрибутив который на LiveCD имеет Chrome), прошёл
регистрацию. Включил POP3, настроил fdm, проверил прохождение между моим
почтовым сервером -- всё ok.

Любят многие говорить что большие почтовые провайдеры надёжны и всегда
доступны. На gmail я постоянно видел downtime-ы. А сегодня уже не один
час на rambler.ru недоступны ни SMTP, ни POP3. Проверил с разных мест:
буквально на всех серверах не отвечают TCP сокеты, connection refused.

Я то без претензий, это никогда не будет использоваться ни для чего,
кроме как каких-то ахтунгов (которых возможно и не будет), но даже мои
домашние сервера не часто бывают в таком долгом down-е.

20 months agotofuproxy как gemini-клиент и tilde.pink
Sergey Matveev [Thu, 10 Aug 2023 15:28:16 +0000 (18:28 +0300)]
tofuproxy как gemini-клиент и tilde.pink

В 9dab9cd83096a2832d0665835d35f60696e5bb98 (как время то летит!) я писал
что добавлял поддержку gemini:// протокола. SGBlog движок блога тоже
обзавёлся его поддержкой в c9626e34dc5995df0e8d8332bd8f99f7fffab9e2. За
последние месяцы разные люди не раз писали и упоминали/намекали что
читали именно gemini-версию блога, которого я даже в мониторинг не
добавлял и поэтому недавно его сертификат протухал.

Такое отношение связано с тем, что мне как не нравилась идея gemini, так
и не нравится (559781a8756ad1b6362a8228970cec7f5ac901a2). Протокол не
решает ни одной реальной проблемы. Небольшой subset HTTP более чем
достаточен.

Формат его .gmi файлов тоже не нравится, который явно пишут что
вдохновлён был Markdown. Я косо смотрю на всех людей, кто упоминает этот
формат, ибо его нет -- есть только десятки малосовместимых между собой
диалектов, с крайне узким общим подмножеством совместимости,
малопригодном почти для любых задач форматирования.

Но .gmi особенно бесит тем, что его во вменяемом нормальном удобном
текстовом редакторе не набрать, так как он хочет длинные строки иметь,
чтобы они по ширине пользовательского экрана сама выравнивались по
ширине. Нет уж, с чем бы я не работал: исходный код программ, скрипты
shell/whatever, LaTeX/Texinfo/reST документы, HTML -- везде в них я
удобную для человека ширину в ±80 колонок сохраняю. А дальше уже не моя
забота как оно будет на экране отображаться.

В текстовом редакторе работать с длинными строками не может быть удобно.
Поэтому для .gmi нужно по идее придумывать ещё какой-нибудь формат
документа, в котором можно бы было использовать удобные для человека по
ширине строки, а затем это преобразовывать в .gmi с длиннющими. А вот
сразу нельзя было что-то тривиальное придумать, чтобы формат .gmi
являлся пригодным для удобного редактирования человеком файлом с
исходным текстом?

Но да ладно, снова я отвлёкся на ненависть к инструменту, который ничего
не решает (да уж, а я его поддержку уже в две своих программы ведь
добавил). Полазил я в русскоязычном "gemspace" (я даже не знаю какой
термин надо применять корректно, но помню "gopherspace"), в котором прям
десятки вполне себе живых гемлогов обитают.

Обнаружил, что многие используют "=>" для ссылок, а не "=> " который
ожидает мой tofuproxy. Оказалось, что, действительно, спецификация это
явно разрешает. Сделал патчик. В итоге вроде бы проблем с броузингом
gemini ресурсов больше нету: tofuproxy более чем годен оказался.

Увидел запись gemini://topotun.dynu.com/blog/2022-05-17.gmi где
видно, что администраторы tilde.pink (видимо, как и всех tilde ресурсов)
оказались конкретными пособниками нациков, даже их лозунг запихнули на
своём ресурсе. Уже второй раз я что-то сегодня упоминаю их, но так
совпало.

Перечитал кстати свою прошлую запись о gemini и вижу что критиковал там
советы о выборе AES/SHA/ECDSA и подобных алгоритмов. А у меня TLS 1.3 в
gemini сервере поддерживает и все ГОСТовые алгоритмы -- чем это хуже?
Вот нафига давать бесполезные/глупые best practices?

20 months agoPuffin Cafe приближается к концу
Sergey Matveev [Thu, 10 Aug 2023 15:15:23 +0000 (18:15 +0300)]
Puffin Cafe приближается к концу

В c2ca5b3c80288aaa1a12d1a6d6ff3e2600657c0d я нашёл сборник аудиокниг
Puffin Cafe, где хорошо читают и подборку фантастики имеют схожу с
Моделью Для Сборки (3144d39f1903349286e1e81e3d4ca114bf420349). Да вот
засада: я уже на 472-ой книге из 498. То есть вот-вот уже с недели на
неделю всё прослушаю. Надо будет снова искать сборники.

Мне как-то порекомендовали книги из серии "Механики", которые в виде
аудиокниг уже тоже скачаны -- следующими пойдут они, но ведь могут и не
понравится.

20 months agoПопытки пропаганды украинских нацистских террористов
Sergey Matveev [Thu, 10 Aug 2023 08:13:25 +0000 (11:13 +0300)]
Попытки пропаганды украинских нацистских террористов

https://club.hugeping.ru/blog/Tvq6MCSCEZFXXvlpBNom#Tvq6MCSCEZFXXvlpBNom
Автор одного небольшого ресурса пишет, что его спамом заваливали
недавно, но при этом использовали свой родной язык. Он верно пишет, что
врагу вообще-то пишут на его родном языке, дабы донести какую бы то ни
было информацию. Но у последователей нацистского террористического
режима настолько всё отбито в голове, что они даже этого не понимают. У
них явно даже нет цели попытаться донести что-то. От коллег, которые
больше обитают в соцсетях, слышал что нацики считают, что их язык якобы
все славяне обязаны знать.

А так полностью солидарен с автором этого блога по теме СВО. Точно также
наслышан про тьму ИТшников (0c8266d3ec0e7676deb9da3d4e3d85fb94748e1a)
либералов (для меня это собирательное слово уже давно, отличная
лакмусовая бумажка). И точно так же думал: зачем освящать громко и
публично свою позицию? Но и было чувство некоего предательства, ибо как
будто стыдишься поддерживать свою Родину и своих солдат товарищей,
которым и сам станешь в любой момент.

Хотели меня тут познакомить с одной девочкой молодой (ещё не окончившей
институт) в этом году на одном мероприятии. Во время разговоров слышал
уверенные безапелляционные фразы от неё типа "ну а кто сейчас не боится
мобилизации?". Вот как-то сразу прям неприятна она стала, нейтрально уже
не выйдет относиться.

Говорила, что боится куда то там идти работать, потому что очень опасно.
Я про себя думаю: что ж такого опасного то может быть на какой работе?
Мысли, честно говоря, только про то, чтобы заниматься чем-то незаконным,
типа наркоторговли. Ну или работать в зоне боевых действий. Оказалось,
речь про то, что работа может оказаться под санкциями. Насколько же у
нас кардинально разное восприятие, что даже не смешно уже, противно.

С моей точки зрения, оказаться под санкциями, равносильно признанию
того, что ты всё верно и правильно делаешь для своей страны и для
спасения жизни миллионов людей. Это признание заслуг, чем вообще-то
стоит гордиться. Как автор блога на club.hugeping.ru видит, что его
статья запускает некую цепную реакцию у нацистов: "Значит, всё-правильно
сделал".

А в знакомствах то я и так не был заинтересован: тема отношений с
женщинами для меня закрыта, ибо со мной невозможно провести и полдня не
разосравшись. Да и в прошлом году уверенную фразу услышал в свою сторону,
от девушки много лет общающейся со мной, что в мужья я точно не гожусь.

20 months agoПосмотрел "Лучше не бывает"
Sergey Matveev [Thu, 10 Aug 2023 07:30:05 +0000 (10:30 +0300)]
Посмотрел "Лучше не бывает"

https://ru.wikipedia.org/wiki/%D0%9B%D1%83%D1%87%D1%88%D0%B5_%D0%BD%D0%B5_%D0%B1%D1%8B%D0%B2%D0%B0%D0%B5%D1%82
Какие-то отрывки из фильма я видел ещё в детстве по ТВ. Почему-то в
памяти запомнился Джек за рулём в перчатках и что ему не нравится когда
его трогают. Джек Николсон вообще крутейший актёр когда надо играть на
голову больных и страшных людей (Отступники, Пролетая над гнездом
кукушки, Сияние, и т.д.). Фильм очень понравился. Как человека может
поменять пёсик и пробудить в нём хорошую сторону! Ах да, ну кроме пёсика
ещё женщина. Вот только в конце Николсон чуть ли не перестаёт быть
собой, превращаясь в какого-то обычного романтичного влюблённого,
потеряв свою изюминку.

20 months agoUntitled Goose Game
Sergey Matveev [Thu, 10 Aug 2023 07:28:44 +0000 (10:28 +0300)]
Untitled Goose Game

https://en.wikipedia.org/wiki/Untitled_Goose_Game
Увидел упоминание компьютерной игры, где играешь за гуся, который должен
сеять хаос и панику среди людей в деревушке. Собственно, и наград всяких
у неё не мало. Чего только не придумают!

20 months agoDownfall, Inception
Sergey Matveev [Wed, 9 Aug 2023 08:06:51 +0000 (11:06 +0300)]
Downfall, Inception

https://www.opennet.ru/opennews/art.shtml?num=59571
https://www.opennet.ru/opennews/art.shtml?num=59574
Очередные (каждые несколько месяцев же ведь находят всё новые и новые!)
возможности постороннему процессу получить данные другого. Пишут, что
даже и через JavaScript в броузере можно.

20 months agoБрэма нет -- репозиторий начал уродоваться
Sergey Matveev [Wed, 9 Aug 2023 06:53:39 +0000 (09:53 +0300)]
Брэма нет -- репозиторий начал уродоваться

Подтянул обновления из git-репозитория Vim. Вот прям вся история до
этого была в нём линейна, и вот сейчас появился уже уродливый "merge
pull request":

    * 84bc00e9b (tag: v9.0.1679, origin/master, origin/HEAD) patch 9.0.1679: Cleanup Tests from leftover files
    *   9fcde9417 (tag: v9.0.1678) Merge pull request #12740 from k-takata/import-9.0.1678
    |\
    | * ad34abee2 patch 9.0.1678: blade files are not recognized
    |/
    * 4c0089d69 (tag: v9.0.1677) patch 9.0.1677: typo in syntax test input file
    * 16abd997c (tag: v9.0.1676) patch 9.0.1676: warning for buffer in use when exiting early
    [тысячи линейно идущих друг за другом]

Я вот удивляюсь тем кто это делает: они вообще что ли никогда не смотрят
в историю и просто вслепую нашлёпывают коммиты в репоизтории? Сложно
перед merge сделать rebase?

20 months agoВолодарского больше нет
Sergey Matveev [Tue, 8 Aug 2023 18:05:12 +0000 (21:05 +0300)]
Володарского больше нет

https://lenta.ru/news/2023/08/08/potok/
https://lenta.ru/news/2023/08/08/volodarskirip/
Изначально я увидел новость о перепалки какой-то блогерши с Собчак, на
тему переводов Володарского. Блогерша написала и привела пример фильма
с его переводом. Собчак же заметила что это Гаврилов был. Собчак мразь
конечно та ещё, но тут оказалась права. Удивительно, но все эти ссылки
на Telegram вполне себе позволили в Links показать посты этого канала
и выдать ссылку на YouTube, которую обсуждали. Конечно же это Гаврилов.
Что я на самом деле узнал сам только три года назад:
2e94b72b12b80b04d00e6b983f193a9ce652a4e9.

В новости на Ленте пишут что у каждого типа если и были кассеты VHS,
то не без Володарского. У нас видеомагнитофон появился под конец 90-х,
и кассет с фильмами у нас наверное несколько штук за всё время и было.
Использовался он для записи по будильнику передач с ТВ. Но зато кассет
у знакомых много видел. Так вот Володарского я с ходу даже и не вспомню
где у кого слышал, в отличии от Гаврилова. С ним, действительно, прям
всё детство прошло, ибо в, тогда ещё, Калининграде по местному
кабельному крутили с видеокассет фильмы с переводом именно Гаврилова.
И вот у меня сомнения: точно ли авторы новости не путают Гаврилова и
Володарского? Или это нам в Королёве так повезло, что нас пичкали именно
Гавриловым, в переводе которого я даже современные фильмы стараюсь
скачивать. А Володарского... честно говоря, и слушать сложно и перевод,
я бы сказал -- отвратительный, никакой, теряющий большую часть информации,
даже суть не передающий.

Пример перевода из "Кровь и бетон", где масса народу пишет, что это
Володарский, что неверно: https://www.youtube.com/watch?v=ak0VILEdYDw

20 months agoНе стоит недооценивать пропускную способность HDD-over-email
Sergey Matveev [Tue, 8 Aug 2023 09:53:02 +0000 (12:53 +0300)]
Не стоит недооценивать пропускную способность HDD-over-email

https://textfiles.libsyn.com/the-computer-shopper-aesthetics-episode
Jason Scott упомянул в своём подкасте, что, при сканировании книг на
больших разрешениях, у него файлы по 70 гигабайт выходят. Поэтому он
задумывается об отправке жёстких дисков курьерской почтой.

Таненбаум в "Архитектуре компьютера", если не ошибаюсь, писал что не
стоит недооценивать пропускную способность грузовика гружённого лентами.

20 months agolftp и WebDAV
Sergey Matveev [Mon, 7 Aug 2023 06:58:55 +0000 (09:58 +0300)]
lftp и WebDAV

lftp с WebDAV-ом реализованном через golang.org/x/net/webdav я считал
что не работает. Попытался разобраться. Всё оказалось до банального
просто. lftp и не пытается честно следовать WebDAV протоколу по
умолчанию для получения списка элементов коллекции. Просто навсего нужно
выставить http:use-propfind в нём и всё заработает.

20 months agoПолтора дня шашлыков и DJing
Sergey Matveev [Sun, 6 Aug 2023 13:05:43 +0000 (16:05 +0300)]
Полтора дня шашлыков и DJing

В последний раз с друзьями на нашей дачи собирались 13+ лет назад. Где
сама дача с тех времён уже успела даже сгореть дотла. Была отвратная
холодная погода и дождь целый день. Сейчас же, наоборот лютая жара и
солнце. Встретились все вместе аж в девять утра уже. Наелись шашлыками и
кучей другим, поиграли в настольные игры. И даже часть народа осталась
ночевать, уложившись в три ночи.

Принесли настоящий профессиональный DJ-пульт. Впервые я, собственно,
понял чем занимаются DJ, в чём заключается их работа. Интересно конечно.
Было приятно, что мои познания в музыке были достаточны для понимания
многого без лишних пояснений, как и предложения как бы я сделал и как
решить ту или иную задачу/проблему.

20 months agoBram Moolenaar больше нет
Sergey Matveev [Sun, 6 Aug 2023 11:18:40 +0000 (14:18 +0300)]
Bram Moolenaar больше нет

https://www.tuhs.org/mailman3/hyperkitty/list/tuhs@tuhs.org/thread/LQ7RTVZ5ITQ7IJBLCKTSA3YJVGS6SEW5/
https://en.wikipedia.org/wiki/Bram_Moolenaar
https://www.opennet.ru/opennews/art.shtml?num=59557
https://habr.com/ru/news/752706/
http://blog.sesse.net/blog/tech/2023-08-05-17-36_rip_bram_moolenaar.html
Умер автор Vim, главный разработчик онного.

20 months agoПароли здорового человека
Sergey Matveev [Wed, 2 Aug 2023 12:37:26 +0000 (15:37 +0300)]
Пароли здорового человека

https://habr.com/ru/articles/751414/
Статью сразу можно считать говном, ибо пароль предлагают генерировать
старым добрым идиотским способом с кучей спецсимволов. Реально это уже
всё выглядит как заговор, навязыванием небезопасных решений, с целью
проталкивать 2FA.

20 months agoУшёл сопровождающий XFS в Linux. Будет заниматься ZFS
Sergey Matveev [Wed, 2 Aug 2023 12:31:21 +0000 (15:31 +0300)]
Ушёл сопровождающий XFS в Linux. Будет заниматься ZFS

https://www.opennet.ru/opennews/art.shtml?num=59543
Заниматься ZFS -- одобряю! Но XFS мне нравилась в своё время тоже.

20 months agoПодпись без OpenPGP, signify/minisign, ssh-keygen
Sergey Matveev [Wed, 2 Aug 2023 10:21:15 +0000 (13:21 +0300)]
Подпись без OpenPGP, signify/minisign, ssh-keygen

http://www.ca.cypherpunks.ru/
Недавно подписал, просто ради интереса попользоваться утилитами, X.509
CA сертификат не только OpenPGP, но и minisign-ом и OpenSSH-ем.

minisign приятен тем, кроме минималистичности, что его подпись
совместима и с signify утилитой, входящей в состав OpenBSD. Просто тупо
подпись, без ада структур и сложностей OpenPGP. Даже вариативности
работы то толком никакой нет у утилиты, что хорошо. Как минимум, в
OpenBSD, ничего дополнительно из софта ставить не надо будет для
проверки этих подписей (ну кроме копирования 1-2 строчных публичных
ключей).

ssh-keygen (e6184094fc1f16c6d0648dfb62b02e95c15b4136) из OpenSSH может
подписывать произвольные данные. Публичный ключ занимает, аналогично как
в authorized_keys, одну строчку. В подписи необходимо указывать
namespace, что вообще очень здорово и правильно: современные хэши из
коробки в своём API позволяют задавать application-context. Я тоже во
всех проектируемых форматах/алгоритмах/протоколах всегда добавляю
контекст (хотя бы просто добавляя строчку при хэшировании). Формат
подписи чуть сложнее: содержит ещё и идентификатор хэша, namespace и
публичный ключ. Приятно решение тем, что OpenSSH из коробки и в BSD и в
GNU/Linux-ах, как правило, имеется.

20 months agoOpenSSH против SSH
Sergey Matveev [Wed, 2 Aug 2023 10:00:04 +0000 (13:00 +0300)]
OpenSSH против SSH

https://habr.com/ru/companies/ruvds/articles/751756/
Действительно, вечная проблема "реализация vs стандарт (типа независимый)".
Не знал что DJB выгоняли из DNS IETF-а. BIND кстати всегда прям не любил,
не нравился он мне даже форматом конфигов. У себя на практике вроде бы
его никогда и не использовал.

А вот OpenSSH мне нравится. Конечно, отнюдь не минималистичное решение,
но ребятам из OpenBSD доверие имеется. Да и как может не нравится софт,
в котором явно есть переключатель "не использовать (ненавистный) OpenSSL"
(ac8333dcf2a8d2e40a00b4a551355760aa0e28b7)?

Dropbear SSH я вроде в 2000-х как-то трогал в составе OpenWRT. Мало что
из воспоминаний о нём осталось. Если не ошибаюсь, то вроде были проблемы
с тем, что он современных алгоритмов каких-то не поддерживал.

21 months agoПоломается ли RSA-2048 в 2030-ом?
Sergey Matveev [Mon, 31 Jul 2023 15:28:04 +0000 (18:28 +0300)]
Поломается ли RSA-2048 в 2030-ом?

https://habr.com/ru/companies/mvideo/articles/751506/
https://articles.59.ca/doku.php?id=em:20482030
Конечно же нет, если коротко. Статья прикидывает почему именно. Я
поэтому и не видел и не вижу проблем с RSA 2k и создавал его для многих
ключей OpenPGP подписи. Сейчас, конечно же, использую ed25519, особенно
когда он вообще стал алгоритмом по-умолчанию в GnuPG.

21 months agoМуха охотится на маленьких детей
Sergey Matveev [Mon, 31 Jul 2023 14:39:53 +0000 (17:39 +0300)]
Муха охотится на маленьких детей

Собака Муха (63f7f86c5e15507ca960e0b7d861176c48a4655c) обожает дачу и
любит её охранять: может и тяпнуть, говорят. А как-то сам увидел как
если рядом нет взрослых, то Муха бежит, думая что её никто не видит, за
маленькими детьми чтобы загнать их с лаем на лавку и не позволять
спускаться. Причём прям явно видно как совершенно иначе она относится к
маленьким и взрослым.

21 months agoПара дней на шашлыках
Sergey Matveev [Mon, 31 Jul 2023 14:37:55 +0000 (17:37 +0300)]
Пара дней на шашлыках

Целых два дня я дома особо не присутствовал: то на одном дне рождения,
где жарил шашлыки, то на другом, где их уже только ел. В субботу здорово
что погода разошлась во второй половине дня. В воскресенье то целый день
были отличная.

21 months agoБудущее Web-а это VNC
Sergey Matveev [Mon, 31 Jul 2023 11:57:42 +0000 (14:57 +0300)]
Будущее Web-а это VNC

https://shkspr.mobi/blog/2023/07/the-future-of-the-web-is-vnc/
О, точно такая же мысль пришла одному человеку как и мне
(a3b6b4ff11f962f8810c12fb331311a3655adda3): просто использовать аналог
VNC для Web-а, чтобы никаких сложностей и пользователь не мог делать
того, что не хотят корпорации (ab5d66334f36ab22a7b8547357829bcd24925ea6).

21 months agoПроблемы с пробелами в Bourne shell
Sergey Matveev [Mon, 31 Jul 2023 10:51:11 +0000 (13:51 +0300)]
Проблемы с пробелами в Bourne shell

https://blog.plover.com/Unix/whitespace.html
https://drewdevault.com/2023/07/31/The-rc-shell-and-whitespace.html
Хорошая статья о том, что в POSIX shell всё вообще очень ужасно если
есть пробелы в именах файлах. Да и где бы то ни было ещё. И ещё статья
ответ, в которой говорится об rc shell (но не тот что в Plan 9), а также
упоминающая что в zsh и fish, в которых нет упомянутых проблем с
экранированием. Обе хороши. И в bash проблем ничуть не меньше.

21 months agoКонцерт Тейлор Свифт -- землетрясение
Sergey Matveev [Mon, 31 Jul 2023 06:07:59 +0000 (09:07 +0300)]
Концерт Тейлор Свифт -- землетрясение

https://naked-science.ru/community/867783
Поклонники буквально устроили землетрясение с магнитудой 2.3. Круто!

21 months agoБлог умеет показывать картинки
Sergey Matveev [Fri, 28 Jul 2023 18:40:40 +0000 (21:40 +0300)]
Блог умеет показывать картинки

Во время написания 8b084f928564cd3b23edc8bfd8dcf5d6c1d1892e я захотел
поделиться фотографией того, что раньше выглядело как аккуратненький
сервер. Но это надо куда-то выкладывать фотографию, желательно чтобы не
просто файло-помойка была, ссылаться на неё. Иногда ведь были позывы
поделиться снимком экрана. В общем, добавил в свой движок для блока
показывать картинки.

Для добавления дополнительной информации к коммиту (который является
постом в блоге) в Git можно в отдельной ветке в файле с названием равном
хэшу коммита разместить произвольную информацию. Собственно это
git-notes. Комментарии у меня хранятся именно как git-note, в который
дописываются recfile-отформатированные записи. Но картинки это бинарные
файлы, к тому же к которым надо бы название/alt добавлять и намекать на
формат изображения. Была идея превратить файл в notes-like ветке в
директорию, в которой названия файлов это alt-текст плюс расширение
указывающее тип.

Но хранить изображения хотелось бы в отдельном репозитории, ибо это уже
опциональная информация, жутко тяжёлая по определению. Начал думать о
подключении в движке ещё одного репозитория, в котором выбирать нужную
ветку и искать директорию с файлами. Легко делать сложно. И только после
этого дошло: а зачем Git то? Не нашёл ответа. В итоге для хранения
картинок просто указываю путь к директории с картинками. Поддиректориями
являются хэши записей в блоге. Внутри них -- просто обычные файлы. И
раздавать директорию можно обычным HTTP-сервером, ничего не надо
просасывать через движок блога. По сути он теперь просто проверяет есть
ли директория с именем коммита и список файлов превращает в список <img>
элементов, а в Atom ленте это превращается в enclosure.

Делаю сертификаты для нового домена img.blog.stargrave.org через
zeasypki (47b11bfd222d9f3f03664035e4fb4ca32cfa75de). Среди них ECDSA
(для всякого старья), EdDSA и ГОСТ, который на уровне TLS 1.3
поддерживается моей сборкой Go (http://www.gostls13.cypherpunks.ru/).
Делаю записи в DNS через zdns (d4eadab571bf5e8ea00d19598f129a708a322d15)
(сертификаты надо сделать заранее, чтобы DANE записи появились в зоне).
Добавляю знание о нём в свой HTTP-сервер godlighty
(http://www.godlighty.stargrave.org/). Пишу скрипт для rsync-а ~blog/img
директории на сервер. Правлю код sgblog. Добавляю пару строчек в
конфигурационный файл на сервере: ImgPath:
/home/www/www/img.blog.stargrave.org, ImgDomain: img.blog.stargrave.org.
Добавляю первую картинку, загружаю, перезапускаю sgblog, радуюсь.

В Atom ленте для enclosure стоит указывать MIME-тип. Поэтому sgblog по
расширению должен уметь определять его. Пока просто сделал hard-code
словарика со всеми поддерживаемыми форматами которые я мог бы раздавать.
То бишь, JPEG XL и WebP (так как много чего у меня в нём есть, без
оригинального файла из которого он был сделан).

Так как я люблю, чтобы серверы были дружелюбны к зеркалированию полному,
то директория раздающая картинки должна читаться через WebDAV. godlighty
его поддерживает частично: например lftp не работает с ним. Но cadaver и
rclone вполне.

21 months agoFreeBSD консоль и кириллица
Sergey Matveev [Fri, 28 Jul 2023 09:04:13 +0000 (12:04 +0300)]
FreeBSD консоль и кириллица

Установил тут на работе недавно FreeBSD на компьютеры. Вот вообще ничего
не настраивал для консоли, только moused_enable=YES добавил. UTF-8
кириллический текст показывается, ScrollLock-ом мотать историю экрана
можно (хотя я всё равно tmux установил), мышкой выделять двойным щелчком
слова и вставлять третьей кнопкой тоже можно. А из-за UEFI, можно при
загрузке выбрать нужное разрешение framebuffer и по человечески работать.

Раньше (2000-е), помню, надо было явно выставлять особый шрифт, а
кириллица была через KOI8-R в терминале. Хотя мне этого хватало и для
работы полностью (я реально на запускал X-ы вообще) и для FidoNet вполне.

21 months agoТрушные названия музыкальных групп
Sergey Matveev [Thu, 27 Jul 2023 05:44:46 +0000 (08:44 +0300)]
Трушные названия музыкальных групп

Регулярно ставлю альбом Krahnholm-а (2d440a96b081b1740db1c2d1183ab04c3ecec2e0).
Порыскал в Encyclopaedia Metallum о том, с какими ещё группами связаны
участники, особенно понравившийся вокалист Gapsanger Draugsvelg. Kroda,
Reusmarkt, Emptynest, Colotyphus, Ezkaton, Atra Mors Kvlt, Torqverem,
Zgard, Kruk, Mørkt Tre, KZOHH, Ulvegr, Djur. Ничего не понятно, но
нравится как это всё пишется и звучит.

21 months agoWeb Environment Integrity
Sergey Matveev [Thu, 27 Jul 2023 05:15:32 +0000 (08:15 +0300)]
Web Environment Integrity

https://www.opennet.ru/opennews/art.shtml?num=59495
https://kevincox.ca/2023/07/26/web-environment-integrity-api/
https://habr.com/ru/news/750368/
https://www.neelc.org/posts/google-webauth-palladium/
https://stackdiary.com/web-environment-integrity/
Хорошо и коротко в блоге Kevin Cox написано что это такое: это API для
удостоверения что третье лицо полностью контролирует ваше устройство.
Удостоверение что вы не контролируете никоим образом.

В общем-то просто уже проторённая дорожка всей сущности современного
Web-а. Зашёл на сайт: тебе загружают программу берущую под контроль твой
компьютер. Теперь хотят убеждаться точно ли ты ничего не поменял там,
чтобы корпорации могли убедиться в том, что они твоё устройство
корректно могут использовать для своих нужд.

21 months agoОтношение к .docx
Sergey Matveev [Tue, 25 Jul 2023 06:20:55 +0000 (09:20 +0300)]
Отношение к .docx

https://fsfe.org/activities/msooxml/msooxml.en.html
https://fsfe.org/activities/msooxml/msooxml-interoperability.en.html
https://www.fsf.org/campaigns/opendocument/copy_of_index_html
На фоне кучи Word-овых документов на сайте Госдумы
(2312210dcbc3da3381b5e07f811aeef7a5fb1a36), вспомнилось что как-то меня
попросило начальство один документ, написанный в Texinfo для
генерирования набора HTML-ек с картинками, отправить в .docx формате. Не
просто описать все мысли и эмоции по этому поводу, ибо, считаю, что нет
ничего более отсталого и, я бы сказал, унизительного чем использовать
подобный формат и софт.

* Ну не может образованный технарь в здравом уме делать осознанный
  техничный выбор в сторону WYSIWYG решения. Вот выбирать Microsoft
  Windows технарь может: эта платформа для всяких домохозяек и на софте
  для неё можно зарабатывать уйму денег, поэтому это выбор платформы для
  profit, как минимум. Но к Word то, конечной программе, этот аргумент
  (про profit) не применим
* Решение, в котором невозможно использование текстового редактора
  (уж извините, но пока не придумано ничего лучше Vim или Emacs, даже
  хоть как-то на милю к ним приближённого) и систем контроля версий?
* Я считаю что выбрать Word осознанно может только тот, кто не ушёл в
  своём развитии и знаний о прикладном ПО дальше чем 1990-е, где тьма
  нелегальных ("пиратских") копий Windows+Office распространялась, с
  целью подсаживания стран на vendor-lockin решение от Microsoft. Да, в
  нашей стране ПК то и появились в это время, как и люди с ними
  работающие, то прошло уже почти 30 лет с тех времён!
* Это абсолютно сродни тому, что человек бы использовал печатную
  машинку: на ней же тоже можно сделать документ? Сродни тому, что
  человек писал бы код без какой-либо системы контроля версий, даже хотя
  бы RCS. Знаю что таких людей много, но это говорит *только* об их, так
  сказать, необразованности, либо о необразованном дебилизме (ибо только
  всем в округе вредит) руководителей которые форсируют не применять VCS
* Все эти люди могут быть умнейшими человеками, крутейшими специалистами
  в своей области, но это не отменяет что они могут продолжать
  использовать печатные машинки или чертить от руки. Но вот только зачем
  от окружающих то этого требовать? CAD системы имеют далеко не нулевой
  порог входа и если надо быстренько раз в полгода небольшой чертёжик
  нарисовать, то запросто это проще сделать от руки безусловно. Но
  человек который целыми днями только и делает чертежи -- будет
  использовать куда более навороченный (CAD) инструмент
* Вот и Word создавался для домохозяек и секретарш, чтобы они могли, как
  я это называю, служебные заметки печатать. Для их задач это более чем
  достаточно с минимальным порогом входа. Вот только не бывает
  инструментов одинаково пригодных для использования профессионалами и
  для полных любителей. Не бывает такого в принципе, ни в одной области.
  И если я умею CAD или roff/TeX, то зачем мне любительские инструменты?
* Всё вышеописанное я на самом деле применяю не только к Word-у, но и к
  любом другому WYSIWYG, такому как Open/LibreOffice. Домашним
  пользователям достаточен был бы BASIC на их компьютере (как в ZX
  Spectrum), но зачем профессионального программиста то заставлять его
  использовать?

Но чаще у меня возникает другой вопрос, на который никто так и не дал
мне вменяемого ответа: конечному человеку который будет читать документ,
какая разница в каком формате он будет? Хорошо, я понимаю почему не
HTML, ибо он не очень красиво и просто может быть распечатан, а читать
A4 страницы распечатанные, действительно, может быть куда удобнее. Но
для печати итогового документа вообще то придуманы форматы типа
PostScript (ok, про него можно забыть) и PDF. PDF, грамотно сделанный
(PDF/A), откроется везде и распечатается as-is везде. И его можно
сделать десятками инструментов, кому какой нравится.

.docx же, даже на самих Word-ах открывается по разному. Более того, я
даже видел что на одной и той же версии Word он может выглядеть по
разному (версия ОС, настройки ОС?)! Не говоря о том, что он заведомо
наверняка не будет одним и тем же в LibreOffice и Microsoft Office. Так
зачем же хотеть этот формат (ну кроме 90-х в голове и "я так делал 30
лет назад и мне нормально")? HTML/whatever точно везде по разному будет
выглядеть, но зато точно откроется, потерь информации не будет, богатый
выбор инструментария. PDF/A точно везде одинаково будет выглядеть и
везде откроется, не малый выбор инструментария. .docx часто будет
выглядеть по разному, ограничен по сути только одной программой и
зачастую определённой (не более старой) её версией, как и инструментарий
для создания.

Единственный аргумент который вспоминаю: а если противоположная сторона
захочет внести правки? А для этого есть исходный код. Вы программу тоже
предоставляете всегда на интерпретируемом языке, чтобы принимающая
сторона могла поправить? Давайте в PostScript документы делать: их тоже
люди руками правили. А говорить о серьёзной кооперативной правке
документа/кода без возможности использования системы контроля версий,
это опять же возврат к тому как некоторые люди разрабатывали софт
прежде: обменивались готовыми tarball и вручную делали merge. Без
комментариев, так как сейчас 2023-ий год.

И я ещё пока молчал о том, что .docx это только про одну программу. Сам
я лично это не проверял, но много источников говорят о том, что в OOXML
есть возможность проприетарных расширений и вставки бинарных данных
(implementation-specific). И MS конечно же активно их использует. Именно
поэтому документы сделанные в MS не могут быть гарантированно открыты
где бы то ни было ещё, ибо это закрытые implementation-specific
proprietary блобы. Есть несколько стандартов для OOXML: Transitional и
Strict версии, как минимум. И Strict MS Office не использует по
умолчанию вовсе.

Более того, в РФ OOXML не является стандартом, тогда как для Open
Document Format (ODF) есть ГОСТ. То есть, .odt это по ГОСТ и очень
странно видеть от людей госучреждение желание видеть .docx (компьютеры с
1995-го не обновлялись, где нет PDF просмотрщика из коробки даже?). Но
MS Office ODF не умеет писать, не знаю насколько точно умеет их для
просмотра открывать. Но если для записи MS Office всё равно с ГОСТовым
.odt нельзя использовать, то, опять же, почему не PDF использовать?

То есть, .docx это только про ровно одно семейство программ (OOXML
де-юре может и имеет ISO стандарт, но де-факто он не используется
никем), которое проприетарное и закрытое. Более того, написанное
вражескими странами и это ни при каких обстоятельствах нельзя поэтому
подключать к Интернету. Заставлять гражданина РФ использовать .docx, а
значит и Word, а значит и Windows -- призывать к использованию
шпионского закрытого проприетарного ПО вражеского государства, которое
уже долго и упорно делает многое, чтобы нас физически истреблять. Не
хорошо, недопустимо.

Нарушение ГОСТ, нарушение политики госбезопасности, противостояние
свободному ПО и свободным/открытым форматам, частая невозможность видеть
документ одинаково на разных компьютерах. Ну и плюс это просто класс ПО
для создания служебных записок. Что-то серьёзнее в нём делать? Я видел
как Word тормозит на компьютерах с i7/64GB RAM на документах всего в
пару сотен страниц. Я у себя на компьютере отключал даже "git status"
вызываемый при отображении строки приглашения командной оболочки, ибо
пара сотен миллисекунд это ОЧЕНЬ заметно и ДИКО раздражает. А Word на
секунды может задумываться при промотке страниц. Это просто, опять же,
намекает на то, что он не предназначен для документов даже такого
размера, только для небольших служебных заметок или объявлений по
домохозяйству.

И вот какого мне было реагировать на просьбу сделать .docx? Texinfo
может выдать Docbook. Начался поиск инструментов которые бы Docbook
могли бы в OOXML перевести. Тут уж пофиг как это будет выглядеть, лишь
бы как-нибудь. С полдюжины программ перепробовал, но или теряют массу
*важного* форматирования, или кириллицу не могут, или картинки не
вставляют (из внешних PNG файлов). В общем, только Pandoc смог ничего не
потерять. Но с ним конечно большая засада: он на Haskell, который штатно
не предоставляет никакой документации как его bootstrap-нуть. Видел в
GNU Guix что они умеют делать для него bootstrap, но это наверное неделю
у меня заняло бы повторить на основе их файлов сборки. Так что на
отдельном физическом компьютере, в виртуальной машине я установил Devuan
и бинарь pandoc поставил.

Но меня больше смущало другое: я (уже) почти всю жизнь Unix-оид.
Программист, который хоть сколько-то современным инструментарием умеет
пользоваться (без VCS жить не могу). Я окончил технический институт,
поэтому, как минимум, знаю (La)TeX. Да, Texinfo в LaTeX тоже не
тривиальная задача перевести, насколько помню -- проще руками .tex
сделать с нуля, копируя текст, но это хотя бы отличную PDF может
сделать. А меня просят опуститься до уровня печатной машинки. Верю что
разочаровались во мне как в программисте, ибо мой КПД в этом году ниже
плинтуса, но TeX же я мог вспомнить то.

21 months agoУчётные записи только по ЕСИА, ЕБС или "российской" электронной почты
Sergey Matveev [Tue, 25 Jul 2023 05:42:18 +0000 (08:42 +0300)]
Учётные записи только по ЕСИА, ЕБС или "российской" электронной почты

https://habr.com/ru/news/750116/
Как понять кто считается российской электронной почтой? Чётко заданный
список? Или обязательно в домене .ru (.su, .рф)? А будет ли учитываться
хостинг где находится, иначе какой смысл какой домен? Текста законопроекта
не знаю как достать: на сайте Госдумы только Word документы вижу.

21 months agoU2F, FIDO, CTAP, WebAuthn, caBLE, passkeys
Sergey Matveev [Mon, 24 Jul 2023 18:52:38 +0000 (21:52 +0300)]
U2F, FIDO, CTAP, WebAuthn, caBLE, passkeys

https://www.imperialviolet.org/2023/07/23/u2f-to-passkeys.html
Отличная статья рассказывающая про всё это нормальным языком, не
marketing bullshit-ом, а про конкретику что конкретно и как примерно
делается. А в целом просто ужасаюсь passkeys: это же буквально просто
помещаемые в облака приватные ключи. С одной стороны сколько людей
трындят о том, что отдельные аппаратные токены это хорошо, ведь, мол,
отдельное устройство, ключ не покидает его, а тут вот такое делают. Не,
ясно что для разных задач всё это, но от web-а я не перестаю офигевать.

21 months agoЛовушка в Go циклах
Sergey Matveev [Mon, 24 Jul 2023 18:36:24 +0000 (21:36 +0300)]
Ловушка в Go циклах

https://flak.tedunangst.com/post/dodging-the-go-loop-trap
Прекрасно знаю ведь про переменные в циклах, всё ясно и понятно, но на
днях потратил несколько часов на поиск ошибки которая была именно такой
как описано в статье. Не уследил по неаккуратности.

21 months agoZenbleed
Sergey Matveev [Mon, 24 Jul 2023 18:27:43 +0000 (21:27 +0300)]
Zenbleed

https://marc.info/?l=openbsd-tech&m=169021508718971&w=2
https://lock.cmpxchg8b.com/zenbleed.html
Очередная атака на процессоры, о которой я вообще узнал из письма от Тео
в OpenBSD. При использовании AVX, данные из регистра могут утечь другой
программе. glibc, как пишет Тео, AVX использует даже для простых
(частых) операций работы со строками (копирование, нахождение длины). А
достать данные тривиально при этом.

21 months agoСборка Go на FreeBSD 13+
Sergey Matveev [Mon, 24 Jul 2023 10:38:38 +0000 (13:38 +0300)]
Сборка Go на FreeBSD 13+

С момента обновления FreeBSD, появилась проблема: go1.4 не собирается
под ней:

    [...]
    cmd/6c
    /tmp/go/src/cmd/6c/../cc/pswt.c:36:2: error: use of undeclared identifier 'C1'
    /tmp/go/src/cmd/6c/../cc/pgen.c:35:14: error: unknown type name 'Type'
    [...]

Решить проблему не смог с ходу. Первый раз когда это возникло:
пересобрал под виртуальной машиной С FreeBSD 12.

Сегодня снова посмотрел на эту проблему. В общем пока выходит так:

* разворачиваю chroot FreeBSD 12:

    zstd -d < FreeBSD-12.4-RELEASE-amd64-dvd1.iso.zst > fbsd12.iso
    mdconfig -a fbsd12.iso
    mount -t cd9660 /dev/md0 /cdrom
    mkdir /tmp/fbsd12-chroot
    tar xfC /cdrom/usr/freebsd-dist/base.txz /tmp/fbsd12-chroot

* сую туда Go, делаю debash (утилита из
  http://www.gostls13.cypherpunks.ru/, которая убирает зависимость от
  мерзкого bash, которого нет из коробки в нормальных ОС), пытаюсь собрать:

    tar xfC go1.4.3.src.tar.gz /tmp/fbsd12-chroot/root
    cd /tmp/fbsd12-chroot/root/go
    debash
    chroot /tmp/fbsd12-chroot /bin/sh
    cd go/src
    export CGO_ENABLED=0
    ./make.bash

  получаю:

    [...]
    cmd/go
    runtime: address space conflict: map(0xc208000000) = 0xc2081bf000
    fatal error: runtime: address space conflict

* выключаю ASLR, который по умолчанию в FreeBSD теперь включён:

    sysctl kern.elf64.aslr.enable=0

  теперь сборка не падает, а просто на cmd/go зависает, не делая ничего
  на CPU. Но, ведь всякие "6c" программы же уже собраны, которые падали
  на FreeBSD 13

* уже вне chroot, под FreeBSD 13, продолжаю сборку без очистки:

    ./make.bash --no-clean

* после этого можно собрать уже Go 1.17, но, с ним тоже будут проблемы с
  ASLR. Зато после него, 1.20 уже собирается без проблем

21 months agoДополнительный вентилятор на beta.stargrave.org
Sergey Matveev [Mon, 24 Jul 2023 09:05:32 +0000 (12:05 +0300)]
Дополнительный вентилятор на beta.stargrave.org

Так как второй сервер у меня стоит открытый без крышки
(fb54d5d2412830bcd3bf867828b85fd2d3c46a0d), так как стандартных размеров
блок питания в него не влезет, то обдув жёстких дисков никакой. Только
сейчас задумался что надо бы это поправить хоть как-то. Нашёл какой-то
здоровый вентилятор, питающийся от 4-pin маленького разъёма на
материнской плате. Оказалось, что на материнке есть свободный. Подвесил
на верёвочках от тортов "От Палыча". Почти на 14 градусов температура
спала. Почему раньше об этом не подумал?

21 months ago@image{....txt} при генерировании .info
Sergey Matveev [Fri, 21 Jul 2023 06:07:39 +0000 (09:07 +0300)]
@image{....txt} при генерировании .info

В Texinfo @image ищет файлы по расширению в зависимости от выходного
формата. Для Info он вставляет .txt, что здорово, так как PlantUML и его
и растр может генерировать.

21 months agoRFC 9446: 10 лет после Сноудена
Sergey Matveev [Fri, 21 Jul 2023 05:15:48 +0000 (08:15 +0300)]
RFC 9446: 10 лет после Сноудена

https://www.rfc-editor.org/rfc/rfc9446.txt
Аж целый RFC вышел с мыслями об изменениях в мире после слива данных
Сноуденом.

21 months agoPNG-3
Sergey Matveev [Thu, 20 Jul 2023 16:50:30 +0000 (19:50 +0300)]
PNG-3

https://www.w3.org/TR/png-3/
В новой версии PNG уже будет явная поддержка сигнализации о WCG/HDR,
плюс APNG стал официальным.

21 months ago4G то не CDMA
Sergey Matveev [Thu, 20 Jul 2023 10:33:50 +0000 (13:33 +0300)]
4G то не CDMA

https://en.wikipedia.org/wiki/LTE_(telecommunication)
https://habr.com/ru/companies/yota/articles/119319/
https://habr.com/ru/articles/129101/
https://en.wikipedia.org/wiki/Telebit#PEP_and_the_TrailBlazer
В комментарии
http://blog.stargrave.org/russian/9efbcf62bc71043d22408ff66087b62dd5bac00f#comment1
я сказал что нравятся 3G и 4G из-за CDMA. Почему-то я был уверен что и
4G тоже является развитием этой технологии. Хотя ведь сотню раз читал по
нему бегло статьи и нигде этого не упоминалось. А слона то и не заметил!
LTE использует OFDM в своей основе.

Когда-то я удивлялся заявлениям о модемах Telebit TrailBlazer
(857a760118e644a1399fffa053c26d60eca490a6), о том, что они даже на
отвратительных междугородних линиях могли показывать >18Kbps скорости
при стабильной связи, тогда как другие модемы на 9600 то еле
соединяются. Как так то? А всё из-за OFDM. Правда из-за этого же они
были и жутко дорогими, ибо внутри них стоял m68k и ещё отдельный TI DSP
процессор. Но, пишут, что для UUCP соединений, они были популярны, так
как экономия на стоимости связи между городами быстро компенсировала
стоимость модемов. Более того, их использование для UUCP было так
распространено, что модем научился делать hijack "g"-протокола UUCP и
делать вид что противоположная сторона отвечает ACK-ом на приём, ведь
TrailBlazer был (почти) полудуплексным и "разворот" стороны
приёма-передачи был долгой по времени операцией.

21 months agoСнова пшик на beta.stargrave.org
Sergey Matveev [Thu, 20 Jul 2023 09:27:30 +0000 (12:27 +0300)]
Снова пшик на beta.stargrave.org

Пару месяцев назад сдох блок питания (fb54d5d2412830bcd3bf867828b85fd2d3c46a0d).
Сегодня проснулся и вижу что сервер снова выключен. Отключил от сети,
снова подключил -- завёлся. Но при этом что-то в нём ярко полыхнуло. На
самом деле я умолчал, что при включении два месяца назад, я тоже услышал
что что-то сгорело, даже палёным запахло. Сейчас я в отражении корпуса
ещё одного компьютера увидел яркое сгорание чего-то. Я с фонариком
проглядел что там могло вспыхнуть так ярко. По идее только SAS
контроллер, но на нём всё идеально, ничего подгоревшего. В общем, сервер
работает, контроллер этот тоже, все диски тоже, так и не понял что же
уже пару раз сгорело.

21 months agoЧто едят в космосе
Sergey Matveev [Thu, 20 Jul 2023 08:55:05 +0000 (11:55 +0300)]
Что едят в космосе

https://habr.com/ru/companies/first/articles/748856/
Многие не знают, но тюбиками уже давным давно не питаются космонавты.
Зато на ВДНХ можно их купить без проблем -- просто как развлечение такое.

21 months agoПодключение к НСДИ
Sergey Matveev [Thu, 20 Jul 2023 08:32:27 +0000 (11:32 +0300)]
Подключение к НСДИ

https://www.diera.ru/blog/nsdi-dns/
https://habr.com/ru/articles/562722/
https://habr.com/ru/articles/545366/
https://labs.ripe.net/media/documents/Утвержденная_инструкция_по_НСДИ_1.pdf
https://habr.com/ru/articles/667162/
Вот чёрт его знает как начать использовать НСДИ. Искал официальные сайты
с информацией про неё -- нема. Во время поиска и просмотра статей с
Хабра, нашёл статью с ссылкой на labs.ripe.net (ага, на совершенно
зарубежном сервере), где есть отсканированная распечатка информации о
подключении.

21 months agoНекоммерческая версия КонсультантПлюс
Sergey Matveev [Thu, 20 Jul 2023 08:26:27 +0000 (11:26 +0300)]
Некоммерческая версия КонсультантПлюс

На сайте КонсультантПлюс пытался получить один документ. Написали:

    Этот документ в некоммерческой версии КонсультантПлюс доступен по расписанию:
    * по рабочим дням с 20-00 до 24-00 (время московское)
    * в выходные и праздничные дни в любое время

Ещё не встречал чтобы сайт работал по расписанию. Хотя понимаю, что всё
сделано для неудобства и вынуждения приобретать коммерческую версию их
программы.

А вообще все эти расписания и перерывы на обед у меня только с СССР
ассоциируются. Хотя я по сути то в нём ещё только в детском саду жил, но
в 1990-е всё равно видел что магазины на обед закрываются, и допоздна не
работают. Сейчас представить такое сложно. За последние 15 лет я
сталкивался разве что с санитарными днями в музеях.

21 months agoПогиб Hans Petter Selasky
Sergey Matveev [Thu, 20 Jul 2023 05:33:28 +0000 (08:33 +0300)]
Погиб Hans Petter Selasky

https://lists.freebsd.org/archives/freebsd-announce/2023-July/000076.html
Из-за автомобильной аварии в Норвегии, погиб Hans Petter William Sirevåg Selasky,
разработчик FreeBSD. Эту фамилию я много раз видел в документации.
virtual_oss например недавно настраивал -- написан им. USB стэк, CUSE,
webcam, mce (Mellanox >=200GbE NIC), TLS ядерный.

21 months agoifmcstat
Sergey Matveev [Wed, 19 Jul 2023 14:24:18 +0000 (17:24 +0300)]
ifmcstat

https://man.freebsd.org/cgi/man.cgi?query=ifmcstat
Не знал про эту утилиту, которая показывает, по аналогии с ifconfig,
информацию о multicast группах на каждом интерфейсе.

21 months agobfs 3.0 ещё более быстрый
Sergey Matveev [Wed, 19 Jul 2023 06:18:58 +0000 (09:18 +0300)]
bfs 3.0 ещё более быстрый

https://tavianator.com/2023/bfs_3.0.html
Автор bfs заморочился с нитями и асинхронной обработкой результатов
поиска в bfs, делая его, судя по статье, ещё более быстрым. Я bfs
использую постоянно при интерактивной работе (команды "f", "cf" и в
качестве ввода для fzf), но только для выдачи полного списка файлов.
Если нужно что-то отфильтровывать или в скриптах, то родные возможности zsh.

21 months agopipefail в POSIX
Sergey Matveev [Wed, 19 Jul 2023 06:02:53 +0000 (09:02 +0300)]
pipefail в POSIX

https://www.austingroupbugs.net/view.php?id=789
https://unix.stackexchange.com/questions/654885/who-is-responsible-for-providing-set-o-pipefail/654932
В будущую версию POSIX shell включат pipefail опцию. Думаю что это
единственная опция которой точно явно однозначно недоставало там.

Узнал про это во время обновления исходного кода fzf, который я вынужден
был патчить, ибо он имел hardcoded bash (уроды!), который принципиально
не держу, не признаю. А сейчас заменили на перебор shell-ов которые
должны поддерживать pipefail опцию (молодцы!).

И сейчас она поддерживается во всех shell-ах по сути: Free/Net/OpenBSD,
busybox, mksh, yash, bash, zsh. А появилась она в ksh93g. ksh вообще
дико много чего наизобретал в мире shell-ом.

21 months agotspu.no-hope
Sergey Matveev [Tue, 18 Jul 2023 16:54:43 +0000 (19:54 +0300)]
tspu.no-hope

В выводе traceroute увидел вот такой hop с ТСПУ, без надежды:
    tspu-6364.no-hope.msk-m9-cr5.ae666-3002.rascom.as20764.net (80.64.97.55)

21 months agoГром гремит, дождь стеной... strlcat в glibc появился
Sergey Matveev [Tue, 18 Jul 2023 12:13:13 +0000 (15:13 +0300)]
Гром гремит, дождь стеной... strlcat в glibc появился

https://zine.dev/2023/07/strlcpy-and-strlcat-added-to-glibc/
https://sourceware.org/legacy-ml/libc-alpha/2000-08/msg00053.html
Давно я не видел такой лютой погоды как сейчас: каждые пять секунд
гремит гром, прорываясь сквозь музыку наушников (открытых потому что),
а плотность дождя такая, что на расстоянии 50м ничего не видно. Появился
Интернет (24f68b770490f51f643a75767d7f10ed8b52abd3), обновил RSS, понял
почему так всё ненаствует: в glibc, спустя 20+ лет, завезли strlcat и
strlcpy из BSD систем.