Sergey Matveev [Sun, 27 Nov 2022 07:25:41 +0000 (10:25 +0300)]
Первая попытка эксплуатации BitTorrent клиента
https://github.com/anacrolix/torrent/issues/769
... провалилась. Процесс грохнулся с SIGABRT, потому что runtime не смог
создать новый тред: Resource temporarily unavailable.
kern.threads.max_threads_per_proc у меня выставлен в 1500 по умолчанию,
а процесс после запуска уже ~1300 имеет тредов. Есть даже заведённый
issue на это, где автор говорит про исчезновение проблемы при
использовании mmap-based storage. Попробовал -- действительно, тредов
стало меньше сотни и не растёт.
Но... у меня же ZFS, а mmap на ней использовать не гоже. Page cache для
mmap-а отъедает память, не смотря на то, что копия данных всё равно
имеется в ARC-е ZFS. В итоге использование памяти моим процессом
стремительно растёт, вытесняя ARC. А так как это торренты, то память
будет использоваться под завязку, нивелируя кэш ZFS.
В общем, или увеличить max_threads_per_proc (что я уже и сделал чтобы
продолжало работать) или ограничивать количество соединений.
Sergey Matveev [Sun, 27 Nov 2022 07:21:38 +0000 (10:21 +0300)]
The Hu -- первая тяжёлая группа ЮНЕСКО "Artist for peace"
http://www.hitkiller.com/the-hu-stali-pervoj-tyazheloj-gruppoj-poluchivshej-zvanie-yunesko-artist-for-peace.html
Ну здорово! Действительно клёвые ребята, с которыми и прежде
(12de649232075d4eec055fa36a7192d3ef0ac76b). Обожаю горловое пение,
нравится звучание подобных инструментов (варганы там), а к этому ещё
и рок добавили с distortion гитарами.
Sergey Matveev [Sat, 26 Nov 2022 20:32:47 +0000 (23:32 +0300)]
Написал BitTorrent клиент
Сегодня вот полностью стал им (8357328821a1a6859a268197a618554b875a87c6)
seed-ить все свои торренты. При запуске можно указать IPv4, IPv6 адреса,
DHT bootstrap адреса, ну и где слушать. github.com/anacrolix/torrent DHT
тоже обслуживает на том же самом порту что и торренты. На экран будет
выводиться общее кол-во принятого/переданного трафика и скорости раз в
секунду. Создаются "add", "del", "list" FIFO файлы. Если записывать
строчку с путём от .torrent или magnet: ссылку в "add", то он будет
добавлен в клиент. Запись (info) хэша торрента в del -- удалит его из
клиента. cat list покажет (с цветами) вывод аналогичный godiana
(0c40b3f99ee554b301bd40b1b4d4c6390c746834). Для каждого торрента
создаются также "files/HASH" и "peers/HASH" FIFO, который выдают
цветастый вывод с информацией о peer-ах и файлах.
Для хранения информации о проверенных кусочках всё продолжает
использоваться BoltDB, но по отдельному файлу на каждый торрент. По
идее, конечно же, overhead, но раз оно уже написано, занимает мало коду,
работает, не надо париться с консистентностью при обновлении этого
файла, то, боюсь что так и оставлю. Если добавить совершенно новые
торренты для seed-а, то их проверка будет идти параллельно, что плохо
для производительности на HDD. Для себя проблему решил добавлением
-verify флага к клиенту, где можно указать .torrent и он только проверит
целостность торрента, с созданием БД, и выйдет. Просто в shell цикле
пройдя по torrent-ам их можно подготовить для вставки в клиент.
Пока совершенно нет никакого сохранения знания о seed ratio. Возможно
буду его писать в уже имеющийся BoltDB для каждого торрента. Но и без
этого уже можно использовать. Ну и пока нет возможности выбора
директории для скачивания торрента. У меня два больших ZFS pool-а с
торрентами и сейчас я банально запустил два клиента на разных портах
параллельно. Стоит, конечно, заняться этим вопросом плотнее. Для этого
надо собственный storage написать будет, но вроде выглядит довольно легко.
По uTP общается, шифрование peer-ов есть, с трэкерами и DHT, IPv4/IPv6
-- все летает и существенно быстрее находит peer-ов. Если aria2
перезапустить, то она с минуту может начать хоть что-то кому-то
отдавать. CPU жрёт при этом немного поболее: ~12% одного ядра одним
клиентом, и ~4% другим, в котором только шесть торрентов. Listen queue
нулевой: никто не ждёт в очередях (35f498b93a95b1d620889197042db8a941aa0428).
Но потребление памяти клиентом растёт со временем неспешно. Утром
посмотрю до каких значений вырастет, если не упадёт с какой-нибудь
паникой за ночь. Но все 100Mbps с сотнями активных peer-ов заняты. Пока
это писал, то размер занимаемой памяти вообще стал уменьшаться -- так
что возможно это и не утечки.
В общем, пока очень очень доволен получившимся результатом. По сути то я
конечно просто сделал незатейливый frontend для библиотеки. Хотя пару
мест в ней пришлось подправить и сделать данные публично доступными.
Например крайне мало чего можно узнать о peer-е было. Отображение
информации о торрентах происходит моментально, тогда как aria2 можно
было ждать (ответа от её RPC) в течении секунд десяти.
На будущее: ещё знаю что надо будет рано или поздно добавлять в storage
на тему переименования файлов (cdc44c7a1bb63c5822313ac73e99a39bda088bff),
так как могут быть имена настолько длинные, что не уместятся в ФС.
Уже сделал коммит, но не стал ничего никуда push-ить, потому что ещё не
знаю как обозвать репозиторий. Ведь придумывание названия дело
ответственное и сложное, так что на свежую голову надо. Изначально хотел
просто github.com/anacrolix/torrent добавить как зависимость к
отдельному Go проекту. Но раз пришлось править саму библиотеку (из-за
приватных методов), то это будет уже fork-ом.
Sergey Matveev [Sat, 26 Nov 2022 11:36:46 +0000 (14:36 +0300)]
Lemote Loongson обзор от Бачило
https://16-bits.ru/%d0%b1%d0%b5%d0%b3%d0%bb%d1%8b%d0%b9-%d0%be%d1%81%d0%bc%d0%be%d1%82%d1%80-%d0%ba%d0%b8%d1%82%d0%b0%d0%b9%d1%86%d0%b5%d0%b2/
В этой рецензии показан Lemote ноутбук. У меня был такой же ±, только
чёрного цвета. Работал за ним несколько лет, был основным рабочим ПК.
И использовал как-раз Debian.
Sergey Matveev [Fri, 25 Nov 2022 23:19:01 +0000 (02:19 +0300)]
NAT64/DNS64-дружелюбный BitTorrent клиент
Прежде об этом мыслей у меня не было, но раз теперь у меня в руках
клиент написанный на Go, с довольно простым и понятным кодом, то что мне
мешает сделать его NAT64/DNS64-aware? Ведь только BitTorrent меня и
останавливал (346e0efce2e89ae14cc328bf433d54c9520aa145) от попыток дома
сделать IPv6-only сеть. В Си-шном коде я бы это точно за разумное время
не осилил бы (желание бы пропало прежде).
Sergey Matveev [Fri, 25 Nov 2022 20:16:11 +0000 (23:16 +0300)]
BitTorrent клиент основанный на github.com/anacrolix/torrent
В прошлом после я написал о плюсах сабжевой библиотеки, но очень не
хотелось писать собственный frontend/клиент. А то, уж что я только не
переписываю под свои потребности последнее время.
Но когда я полез менять список DHT bootstrap нод, когда пошёл добавлять
возможность установки IPv6 адреса (в дополнение к IPv4), то пошло поехало
и вот я уже почти полностью cmd/torrent и переписал. Мне не нравится что
состояние скачанных кусочков хранится в одной БД на все торренты. Я хочу
по отдельности, как это было во всех прошлых клиентах. Благо, API
библиотеки позволяет написать свою piece completion реализацию. Я просто
скопировал основанную на BoltDB и сделал так, чтобы имя файла БД было с
хэшом от торрента. Сработало. Но надо конечно будет переделать на
хранение просто bitfield структуры.
Проверка всего этого, просмотр вообще всех issue проекта, показал что в
целом он вроде бы действительно очень и очень хорошо и эффективно со
всем справляется. Уже часть торрентов поставил seeder-оваться через
него. Работает реально лучше чем aria2. И это речь и про IPv6 и про DHT.
Вот только нет никакой возможности понять в каком состоянии находится
торрент: проверяется ли он с диска или нет. Судя по всему, библиотека
так просто устроена, что она просто говорит качать нужные кусочки, а
дальше уже, напротив piece completion БД, проверяется готовы ли они или
нет. Можно подписаться на события происходящие с кусочками, но если файл
уже полностью был проверен, то они вообще не возникают и можно только
косвенно понять что файл полностью скачан. Если просто добавить все
торренты для seed-а, то они честно в параллельных горутинах начинают
проверяться и сразу же параллельно раздаваться. Это конечно происходит
один раз, до создания piece completion БД, но делается полностью не
последовательно и поэтому медленно -- мои диски трещали не один час
из-за этого.
Как быть с frontend-ом для этого? Делать свой RPC и через него общаться?
К чёрту. Просто сделал FIFO файл, по аналогии с suckless проектами и по
аналогии как я делал в tofuproxy (432f7635faed298751cef04f0102deee68ea942f).
"cat list" буквально просто выдаст вывод аналогичный тому что был в
godiana (0c40b3f99ee554b301bd40b1b4d4c6390c746834) -- я прям copy-paste
кода оттуда сделал, раз всё равно ж написано. Пока это единственный FIFO
сейчас имеющийся.
Думаю что через FIFO буду и добавлять torrent-ы, так как сейчас любое
изменение требует перезапуска программы. Типа запускаем демон, а дальше
просто "cat torrent-list > fifos/add". И через FIFO (уже отработано в
tofuproxy) удалять их. Точно не уверен, но API вроде бы позволяет и
ставить на паузу их. И аналогично можно будет показывать информацию о
peer-ах и скачанных файлов.
По сути, вроде бы все мои хотелки с точки зрения useability будут
удовлетворены. Кроме одного: не нашёл возможности сохранять состояние
DHT. Но особо тут проблем и не вижу никаких. Не даром же я bootstrap
ноду то поднимал. И API не позволяет задавать целевую директорию
per-torrent. Но я код storage уже облазил и это не сложно будет
добавить, хотя и саму библиотеку придётся менять для этого.
Вот теперь я начинаю не любить Go. Был бы любой другой язык, то я долго
бы возился с добавлением одного только DHT/IPv6 адреса и даже мысли бы
не возникло переписать это всё с нуля для своих useability хотелок. А
тут затягивает и не можешь остановиться. Пока ещё никуда наработки не
выложил, так как надо бы закончить всю тему с FIFO и причесать перед
коммитом.
Sergey Matveev [Fri, 25 Nov 2022 12:33:42 +0000 (15:33 +0300)]
github.com/anacrolix/torrent/cmd/torrent
https://github.com/anacrolix/torrent
Решил посмотреть какие вообще ещё варианты для BitTorrent-а то бывают.
Сразу отметаются конечно же все кто GUI, а также кто использует JS-based
WebUI. Transmission я уже не раз зарекался даже пытаться пользоваться.
Уже не помню конкретику, но блог говорит о его ресурсоёмкости чудовищной
(3ccff5a1e1f61e103b92dde4fc2e01c4affb9268, 59862ce0e889b45d6872ba974d906312bfbf0a01).
rTorrent идёт нафиг из-за hardcode-а максимального размера файлов -- я
помню что не мог скачать некоторые из-за этого
(3ccff5a1e1f61e103b92dde4fc2e01c4affb9268).
aria2... не без проблем (35f498b93a95b1d620889197042db8a941aa0428),
хотя использую её уже не один год (59862ce0e889b45d6872ba974d906312bfbf0a01).
И мне уже хочется обязательно иметь DHT, PEX и полную поддержку IPv6 (и
при общении с трэкером и с DHT). Часть клиентов из-за этого отметена.
Например изначально я использовал ctorrent -- он работал, без проблем,
но даже UDP трэкеров не поддерживал, а только чистый оригинальный
классический BitTorrent протокол.
В итоге нашёл я только anacrolix-овскую реализацию на Go. Причём в ней
явно сказано что она является библиотекой, а всякие cmd/* в ней только
для примера использования. Готовых и устраивающих меня клиентов нет. Но
cmd/torrent из её состава уже сейчас годится и для скачивания и для
seeding-а вполне. Есть у меня тут один проблемный торрент, единственного
peer-а которого aria2 банит -- тут работает без проблем. В SQLite3 или
BoltDB хранит состояние скачанных кусочков. Параллельно может и качать
при проверке целостности торрента. Кроме всех фич, даже uTP поддерживает.
Пока правда полное отсутствие frontend-а к нему, кроме просто печати раз
в несколько секунд прогресса скачивания. Эх... неужели снова, вновь и
опять придётся писать самостоятельно это всё? Если для aria2 хотя бы
просто надо переиспользовать её RPC (0c40b3f99ee554b301bd40b1b4d4c6390c746834),
то тут уже все хотелки самостоятельно придётся добавлять. Благо это всё
на Go и за десять секунд я нашёл например где задаётся список DHT
bootstrap нод.
Sergey Matveev [Fri, 25 Nov 2022 10:44:07 +0000 (13:44 +0300)]
aria2 как BitTorrent клиент далеко не идеален
Например он любит "банить" (если включить debug вывод, то сообщение о
том, что такой то peer is banned) по какой-то причине peer-ов и больше к
ним не возвращаться. Если у torrent-а единственный seeder, которого
клиент забанил, то ничего качаться не будет, пока не перезапустишь aria2.
Есть у меня домашний aria2, который запущен за NAT-ом (но с пробросом
портов) на втором сервере. Но он обращается к трэкеру расположенному на
первом сервере. При этом трэкер "запоминает" его 192.168/16 адрес, что
делает это знание бесполезным. Подключаюсь я к этому торренту с внешнего
адреса, таким же aria2, но за NAT-ом. Клиент получает только 192.168
адрес и ничего не качает. Если включить DHT, то рано или поздно они друг
о друге узнают, но... по неведомой причине (debug вывод не поясняет)
один aria2 банит другого. Причём есть и попытка подсоединения как со
стороны одного, так и со стороны другого. В итоге торрент вообще не
выходит скачать. С IPv6 проблем никаких при этом.
У aria2 постоянно переполненная очередь ожидающих TCP соединений. То
есть, они поступают быстрее чем он успевает делать accept. И если
снаружи я просто netcat-ом пытаюсь подключиться к нему, то меня пошлют с
высокой долей вероятности.
Ещё он не поддерживает uTP протокол. Вроде бы не проблема, но где-то
видел что многие uTorrent клиенты хотят общаться только по нему и бывают
uTP-only раздачи вообще.
Sergey Matveev [Fri, 25 Nov 2022 09:54:59 +0000 (12:54 +0300)]
.meta4 файлы на замену .sha512.txt
На своих web-серверах я держу всякие дистрибутивы и другие крупные
файлы. Рядом с ними хранил текстовые файлы с SHA512 хэшами, ну чтобы
на всякий случай можно было точно проверить всё ли хорошо скачалось.
И только недавно дошло что нет в них смысла, когда есть Metalink
(542f9611780a28a67ebd52210bbdcb9845c2890c) формат, в котором все эти
контрольные суммы уже имеются. Плюс мой godlighty
(bc087ee7e3be4177e83bc39ae3b1497e336ec5da) умеет находить .meta4 файлы
рядом с запрашиваемыми и вставлять в HTTP заголовки значения этих хэшей,
а также ссылку на .meta4. Плюс aria2/wget2 могут скачать файл и сразу же
автоматом проверить хэш. Плюс у меня уже есть написанные утилиты для
создания .meta4 файлов (http://www.git.stargrave.org/?p=meta4ra.git;a=summary).
А если никакого дополнительного софта у конечного пользователя нет, то,
так как это короткие XML-ки, тривиально или скопировать руками или
выпарсить утилитами значения хэшей.
Обнаружил что godlighty не выдаёт всю эту информацию если используется
HEAD метод, а не GET. Надо будет поправить.
Sergey Matveev [Thu, 24 Nov 2022 21:36:26 +0000 (00:36 +0300)]
Музей ретрокомпьютеров Дмитрия Бачило
https://16-bits.ru/%d0%bd%d0%b0%d1%87%d0%b8%d0%bd%d0%b0%d1%8e-%d0%b2%d0%b8%d0%b4%d0%b5%d0%be%d0%bb%d0%be%d0%b3-%d0%bf%d1%80%d0%be-%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d1%81%d1%82%d0%b2%d0%be-%d0%bc/
Буду ждать успеха этого проекта! Будет повод съездить в этот далёкий
город, где была первая в СССР FidoNet нода к тому же.
Sergey Matveev [Thu, 24 Nov 2022 19:21:15 +0000 (22:21 +0300)]
Гибридное шифрование, KEM/DEM, signcryption...
https://neilmadden.blog/2021/01/22/hybrid-encryption-and-the-kem-dem-paradigm/
https://neilmadden.blog/2018/11/14/public-key-authenticated-encryption-and-why-you-want-it-part-i/
https://neilmadden.blog/2018/11/26/public-key-authenticated-encryption-and-why-you-want-it-part-ii/
https://neilmadden.blog/2018/12/14/public-key-authenticated-encryption-and-why-you-want-it-part-iii/
Понятные интересные статьи объясняющие как устроены все эти
криптографические штуки для согласования ключей. Почему их
так много, какие сложности при этом возникают.
Sergey Matveev [Thu, 24 Nov 2022 18:50:03 +0000 (21:50 +0300)]
Посмотрел "Добро пожаловать в Зомбилэнд"
https://ru.wikipedia.org/wiki/%D0%97%D0%BE%D0%BC%D0%B1%D0%B8%D0%BB%D1%8D%D0%BD%D0%B4
Вообще мне тема всех этих зомби до лампочки, никогда не привлекала и
считал (да и считаю) это бредовой фигнёй. Но если тема зомби бы была
как в "Зомби по имени Шон" (0f456f8e5252351ca8e4028cebebdf4c4605e9ba),
то я бы был яростным поклонником всего этого. Решил тут дать шанс и
Зомбилэнду. Забавных моментов не мало действительно. Билл Мюррей, хоть и
краткосрочно появился в фильме, но заставил смеяться даже с грудиной
прострелянной. Это конечно не та весовая категория как у Шона, но
посмотреть разок можно.
Sergey Matveev [Wed, 23 Nov 2022 21:19:16 +0000 (00:19 +0300)]
Отказался от IPsec между домом и VPS
Раз всё равно я поднял WireGuard между ними
(5cb0d1facad355fc9192f34c048141680e30185e), как туннель для IPv6
трафика, то какой смысл в IPsec, который будет идти внутри этого
туннеля? Использовать IPsec для IPv4 я зарёкся -- гиблое дело.
Мне нравилось в IPsec то, что в нём я мог задавать security policy,
запрещающие общаться например DNS master↔slave без защищённой связи.
Теперь это заменил правилом firewall-а, который просто запрещает этот
трафик не по VPN каналу (если или он, или BGP лежат, то трафик пойдёт
честно через маршрутизацию обычную). Поднятие WireGuard-а в daemontools
делается на раз два.
Sergey Matveev [Wed, 23 Nov 2022 21:10:24 +0000 (00:10 +0300)]
Мои серверы не шибко дружат с UEFI
Сегодня перевёз систему со старых дисков на новые. Просто добавляя их к
зеркалу, ожидая конца resilvering, делая detach старых. Но изменил GPT
разбивку диска. На прошлых, кроме разделов для ZFS и swap, был ещё 800KB
для загрузчика FreeBSD. Серверы наверняка придётся менять до смерти
дисков, а на новом железе не UEFI загрузка уже запросто может и не
работать. Сделал EFI раздел с загрузчиком.
Но сервер отказался с него грузится. Хоть в BIOS и выставлены все
галочки для UEFI, но не грузится с них, даже не предлагает в меню.
Ладно, не беда -- удаляю раздел, создаю freebsd-boot на эти 800KB,
пихаю старый загрузчик. Раз всё равно место зарезервированное
осталось для EFI раздела, то на новой системе нужно просто пару команд
gpart выполнить чтобы превратить систему в UEFI compatible.
Насколько же всё это просто под FreeBSD делается и без какой-либо боязни
что сейчас что-то запросто пойдёт не так. Воспоминания о GRUB из
GNU/Linux мира только и только крайне негативные и неприятные.
Sergey Matveev [Mon, 21 Nov 2022 18:23:48 +0000 (21:23 +0300)]
Обожаю рассказы про Хогбенов
https://ru.wikipedia.org/wiki/%D0%A5%D0%BE%D0%B3%D0%B1%D0%B5%D0%BD%D1%8B
https://ru.wikipedia.org/wiki/%D0%AE%D0%BC%D0%BE%D1%80%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%84%D0%B0%D0%BD%D1%82%D0%B0%D1%81%D1%82%D0%B8%D0%BA%D0%B0
Ещё до начала блога, я был знаком с серией рассказов Генри Каттнера про
Хогбенов. С тех пор, Каттнер является для меня неотъемлемым автором
юмористической фантастике наравне с Гаррисоном, Шекли, и другими. Даже
просто читать описания членов семейства Хогбенов уже забавно.
Sergey Matveev [Mon, 21 Nov 2022 18:14:54 +0000 (21:14 +0300)]
Ошибка которую совершают многие с ZFS
Сколько лет пользуюсь ZFS, но всё равно умудрился обосраться, забыв
указать "mirror" при создании нового pool. В итоге, вместо зеркала,
получаю обычный, в два раза менее надёжный, stripe. И ведь это уже
не в первый раз. Главное обнаружить это до того, как на дисках
размещено что-то важное.
Sergey Matveev [Mon, 21 Nov 2022 14:23:14 +0000 (17:23 +0300)]
PTP протокол синхронизации времени в Facebook
https://engineering.fb.com/2022/11/21/production-engineering/future-computing-ptp/
https://engineering.fb.com/2022/11/21/production-engineering/precision-time-protocol-at-meta/
Как всегда (657ba65018717773b3a7e4cfb3f11332db5f81dd), статьи про
синхронизацию часов от Facebook-а очень интересны!
Sergey Matveev [Mon, 21 Nov 2022 12:43:45 +0000 (15:43 +0300)]
Книга по IPv6
https://github.com/becarpenter/book6
Ещё не закончена, в процессе написания, исходный код доступен. Не мало
интересных RFC из неё углядел. Там же обнаружился интересный факт: КНР
сеть довольно закрыта от посторонних глаз, поэтому точную статистику по
кол-ву пользователей IPv6 сложно было дать. Сам КНР говорит о 713M
пользователей, в противовес 220 по данным APNIC. А это почти 44%
пользователей *всего* Интернета уже на IPv6 сидят.
Sergey Matveev [Mon, 21 Nov 2022 12:15:52 +0000 (15:15 +0300)]
Познал про iBGP vs eBGP
https://en.wikipedia.org/wiki/IBGP#Operation
После поднятия WG+BGP на VPS, обнаружил что мой компьютер не может
больше ходить до VPS-ки. Точнее она не может до него дойти, отсылая
ответные пакеты не через туннель. Не смотря на то, что мой домашний
сервер знает все маршруты, он не отправляет их в VPS, и она не знает
что моя рабочая машина доступна тоже через этот туннель. А все BGP
демоны я добавил в одну AS, заставив их работать в interior BGP режиме.
На VPS поменял AS (использую private пространство), это стало eBGP,
маршруты стали просасываться, всё заработало.
Sergey Matveev [Mon, 21 Nov 2022 11:17:12 +0000 (14:17 +0300)]
Наконец-то поигрался с NDP proxy
http://fenyo.net/newweb/ndproxy.html
Несколько дней назад мой туннельный брокер (https://ipv6.ip4market.ru/)
не работал почти весь день. В принципе то они могут и отключиться когда
заблагорассудится, ведь всё бесплатно, никаких обязательств. Посмотрел
было какие ещё есть варианты на всякий пожарный. В течении пары часов
так ничего и не нашёл.
Туннельных брокеров в РФ (да как и в целом в мире) больше нету. Найти
VPS/VDS, которая могла бы выдавать /56 или /48 -- попробуй ещё найти.
Какие-то нашёл, список уже потерял, но в некоторых из них явно сказано
что проксировать трафик запрещено. На одной VPS хотел было попробовать
тестовый период, хотел зарегистрироваться по email, и он упорно говорит
что "stargrave@stargrave.org" не является валидным email-ом. Такой VPS
конечно идёт нафиг.
Многие выдают /64. Но понять как именно они эту сеть делегируют: повезёт
если хоть какие-то намёки будут в документации. Где-то явно
маршрутизируется через единственный адрес на моей стороне. А раз
маршрутизируется, то значит я по VPN-у могу прокинуть эту сеть домой и
переиспользовать это же адресное пространство. Неудобно конечно
находится в одном /64 блоке, но хоть что-то. Но до проверки дело не дошло.
На моей же VPS маршрутизации явной нету, а просто виртуальный сетевой
интерфейс считается /64. Поэтому если по NDP никто не будет отвечать, то
и пакетов, которые затем как-то отмаршрутизировать/отпроксировать можно
бы было, никто слать не будет. Нужен NDP прокси для этого. В кой да веки
я дошёл до этой штуки, понимая зачем она. WireGuard туннель, по BGP
узнаёт какие адреса доступны со стороны домашнего сервера, ndproxy
отвечает на NDP и... всё работает! Ну точнее я проверил только с
единственным адресом, просто как proof-of-concept, но внешним сайтом для
ping-ов, а также tcpdump-ом, убедился что всё ходит как надо.
Sergey Matveev [Mon, 21 Nov 2022 10:43:11 +0000 (13:43 +0300)]
BGP и WireGuard на VPS
Мой домашний сервер общается с VPS время от времени. Для отправки почты,
для синхронизации DNS и прочей всячине. И делает многое из этого
исключительно по IPv6, который у меня идёт через туннельного брокера.
Если поднять WireGuard по IPv4, а между ними BGP, то автоматом прозрачно
все маршруты пойдут через этот туннель, что в моём случае более короткий
маршрут. Приятно что типа ничего делать не надо, кроме как демона
маршрутизации поднять с copy-paste конфигом.
Sergey Matveev [Mon, 21 Nov 2022 08:16:58 +0000 (11:16 +0300)]
Leap second отменяется с 2035-го года
https://www.opennet.ru/opennews/art.shtml?num=58159
Только только я узнал про TAI, TAI64 формат, забацал БД этих високосных
секунд для работы в Go (http://www.git.stargrave.org/?p=leapsecs.git;a=tree),
как их уже решили и вовсе отменить.
Sergey Matveev [Sat, 19 Nov 2022 21:06:29 +0000 (00:06 +0300)]
Переводы Кураж-Бамбей
https://xn--80aacbuczbw9a6a.xn--p1ai/
Увидел тут "Убойные каникулы" в переводе и озвучке Кураж-Бомбея. Люто
понравилась их деревенская речь. Как и сам перевод (лексикон), так и
озвучка. Прежде слышал их в "Теории большого взрыва"
(4461fc237445990ecec250c075649b15fbda382a). Очень здоровски сделано.
Sergey Matveev [Fri, 18 Nov 2022 19:03:09 +0000 (22:03 +0300)]
Call From Grave
https://www.youtube.com/watch?v=i3h5ou0A508
https://www.youtube.com/watch?v=W5SzJgtCCH4
Одна и та же песня в исполнении Bathory
(671b65fb766cd69cfae5b84b90110e4d6043aedd) и Dæmonarch
(7f3e6f74b18b7193c13f2b50ce2b8ff66bff4caa). Приятно при
знакомстве с первыми было услышать этот трэк, с которым
хорошо знаком по второй группе, диск которой ещё в школе
появился.
Sergey Matveev [Fri, 18 Nov 2022 18:54:09 +0000 (21:54 +0300)]
Мнение про Blood
https://www.youtube.com/watch?v=B8Ju5gG3rgQ
Небольшое видео с мнением про игрушку (0a60b951f1ae358841b0891e5bf8416e0b525672)
Blood, с массой показанного gameplay. Действительно одна из самых офигенных FPS!
Sergey Matveev [Thu, 17 Nov 2022 21:18:30 +0000 (00:18 +0300)]
Вам не нужен HTML
https://no-ht.ml/
https://whitep4nth3r.com/blog/html-is-all-you-need-to-make-a-website/
Сайт-ответ на "HTML это всё что вам нужно". По сути то просто показаны
возможности Unicode, где далеко не всё у меня ни в броузере, не терминале
не отразилось. Но выглядит приятно безусловно.
https://fantlab.ru/work81626
https://en.wikipedia.org/wiki/The_Rediscovery_of_Man
В целом понравился сборник. Конечно далеко не все рассказы оттуда,
но основная тема вполне себе зашла. Особо больше ничего не могу
добавить, так как это просто приключения и рассказы.
Sergey Matveev [Wed, 16 Nov 2022 10:12:36 +0000 (13:12 +0300)]
Заказал пару 20TB HDD
Наверное можно в другом магазине и сегодня было получить, но мне не к
спеху, зато знаю что проблем с НИКСом не будет. А то в основном сервере
у меня "loaded hours" на 3TB дисках уже составляет шесть лет. А во
втором сервере один из 2TB дисков аж восемь лет (другой только четыре).
Как быстро время то летит! Не помешает, действительно, как рекомендовал
знакомый, превентивно уже начать поменять.
Sergey Matveev [Wed, 16 Nov 2022 09:55:15 +0000 (12:55 +0300)]
"Цвет из иных миров" Лавкрафта
https://ru.wikipedia.org/wiki/%D0%A6%D0%B2%D0%B5%D1%82_%D0%B8%D0%B7_%D0%B8%D0%BD%D1%8B%D1%85_%D0%BC%D0%B8%D1%80%D0%BE%D0%B2
Сегодня попался в Puffin Cafe (c2ca5b3c80288aaa1a12d1a6d6ff3e2600657c0d)
этот рассказ, который уже совсем недавно слышал в другой серии книг
(81b54ddca2c8b87000e557252080c6be628f2eeb). Но с удовольствием снова
"перечитал". И мне кажется это прям такая эталонная и каноничная чисто
Лавкрафтовская история, без мистики. Оказалось, как говорит Wikipedia,
сам Говард считал её лучшим своим творением. Понятно почему и мне
действительно тоже так понравилась. Если она не понравится кому-то, то
значит наверняка и весь Лавкрафт.
Лавкрафт выразил несколько важных для него соображений:
* присутствие инопланетян остается тайной не только для героев, но и
для читателя. Ни мотивы, ни цели, ни прошлое инопланетян не
раскрываются. Остается даже неясно, разумны ли они
* невозможность уйти от судьбы
* угроза для человечества. Иллюстрирует полное бессилие человека
перед загадочным явлением
* ничтожность человеческих знаний о Вселенной
Sergey Matveev [Mon, 14 Nov 2022 17:17:41 +0000 (20:17 +0300)]
Разделить аудиокнигу на части
Скачал я тут аудиокниги. Одна книга -- один файл. Но, благо, с
метаинформацией о частях (к сожалению в MP4 контейнере, а не Matroska).
Надо разделить на много файлов, так как ни на одном своём
MP3-проигрывателе нельзя быстро отмотать, например, на час вперёд.
FFmpeg-овская утилита ffprobe может выдать метаинформацию в JSON
формате. А дальше в цикле вызываю ffmpeg для создания набора WAV файлов.
Предварительно полность. декомпрессировав весь звук, потому что каждый
вызов ffmpeg с "перемоткой" вперёд -- отъедает кучу CPU, это медленно.
Sergey Matveev [Mon, 14 Nov 2022 12:43:16 +0000 (15:43 +0300)]
godlighty на FreeBSD 11
Обнаружилось тут, что web-сервер на моей VPS отвечает "internal error"-ом.
В журнале есть только "function not implemented". Оказалось, что всё
падает на невозможности выполнить golang.org/x/sys/unix.Fstat вызов. В
июле этого года, как-раз этот файл перегенерировали и явно в log message
написали о прекращении поддержки 11-ой ветки FreeBSD. Решить это пока
можно просто явно указав более старую версию этой зависимости в go.mod:
Sergey Matveev [Mon, 14 Nov 2022 07:05:23 +0000 (10:05 +0300)]
rfork как замена thread-ам
https://www.unix.com/man-page/freebsd/2/rfork/
https://en.wikipedia.org/wiki/Fork_(system_call)#Rfork
https://plan9.io/magic/man2html/2/fork
В B системахSD есть rfork() вызов, изобретённый ещё в Plan 9. Один вызов
для создания или отдельного fork()-like процесса или для thread-ов.
Sergey Matveev [Mon, 14 Nov 2022 06:49:50 +0000 (09:49 +0300)]
Роб Пайк об истории появления Go: less is more
https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html
Какие упрощения были сделаны относительно C/C++ того времени?
* regular syntax (don't need a symbol table to parse)
* garbage collection (only)
* no header files
* explicit dependencies
* no circular dependencies
* constants are just numbers
* int and int32 are distinct types
* letter case sets visibility
* methods for any type (no classes)
* no subtype inheritance (no subclasses)
* package-level initialization and well-defined order of initialization
* files compiled together in a package
* package-level globals presented in any order
* no arithmetic conversions (constants help)
* interfaces are implicit (no "implements" declaration)
* embedding (no promotion to superclass)
* methods are declared as functions (no special location)
* methods are just functions
* interfaces are just methods (no data)
* methods match by name only (not by type)
* no constructors or destructors
* postincrement and postdecrement are statements, not expressions
* no preincrement or predecrement
* assignment is not an expression
* evaluation order defined in assignment, function call (no "sequence point")
* no pointer arithmetic
* memory is always zeroed
* legal to take address of local variable
* no "this" in methods
* segmented stacks
* no const or other type annotations
* no templates
* no exceptions
* builtin string, slice, map
* array bounds checking
We also added some things that were not in C or C++, like slices and
maps, composite literals, expressions at the top level of the file
(which is a huge thing that mostly goes unremarked), reflection,
garbage collection, and so on. Concurrency, too, naturally.
Ну и заканчивает это всё очень правильными высказываниям
Python and Ruby programmers come to Go because they don't have to
surrender much expressiveness, but gain performance and get to play
with concurrency.
C++ programmers don't come to Go because they have fought hard to
gain exquisite control of their programming domain, and don't want
to surrender any of it. To them, software isn't just about getting
the job done, it's about doing it a certain way.
The issue, then, is that Go's success would contradict their world view.
And we should have realized that from the beginning. People who are
excited about C++11's new features are not going to care about a
language that has so much less. Even if, in the end, it offers so
much more.
Sergey Matveev [Sun, 13 Nov 2022 12:24:04 +0000 (15:24 +0300)]
Лишние keep-state в правилах ipfw
Я никогда точно не понимал как именно обрабатываются правила в ipfw.
Всегда было ощущение недопонимания и неясности. Но это особо не мешало
всё равно выполнять им задачи на практике. Но когда есть и NAT и NAT64 и
IPsec, то всё равно не фига до конца ничего не понятно. Но это только
потому что я и не пытался разобраться раз и навсегда.
Вчера возник вопрос: а зачем я почти для каждого правила добавляю
keep-state, делая stateful firewall. Для исходящих соединений это
понятно зачем надо. Но если у меня правило вида:
ipfw add allow tcp from any to "table(mein)" http keep-state
и весь исходящий от меня трафик разрешён, то какой смысл добавлять
какой-либо state? На выход всё разрешено, а на вход явно и так тоже.
В общем, убрал тьму эти keep-state-ов.
Sergey Matveev [Sun, 13 Nov 2022 11:34:05 +0000 (14:34 +0300)]
Новый mu-helper значительно быстрее работает
https://www.djcbsoftware.nl/code/mu/
Давно не обновлял эти утилиты. В них и заранее mu init теперь надо
делать и MUHOME указывать. Но они существенно (в разы) быстрее индексируют.
Sergey Matveev [Sun, 13 Nov 2022 11:26:17 +0000 (14:26 +0300)]
Обрезание новой строки при bracketed paste в zsh
Что-то надоело что при вставке из буфера строчек с newline-ом, он честно
вставляется, остаётся в истории, мозолит глаза. Нашёл рецепт как это очень
просто поправить:
Sergey Matveev [Fri, 11 Nov 2022 18:52:43 +0000 (21:52 +0300)]
Улучшения dht-bootstrap
http://www.git.stargrave.org/?p=dht-bootstrap.git;a=summary
Всё не могу успокоиться играться с правкой dht-bootstrap демона
(aa2617fbedd389ae134e81f8b3461f495c8cb6ef).
* использование arc4random() (в GNU/Linux-ах можно getrandom())
сокращает код, плюс не требует явной работы с файлами (чтения из
/dev/urandom). Более того, в glibc arc4random уже тоже добавили
* состояние о количестве известных нод теперь "показываю" в названии
процесса. И stdout/логи не загромождает, и посмотреть можно легко
* отладочный вывод показывает конкретные IP-адреса(+порты) всего
происходящего
* закрываю лишние файлы, ограничиваю ресурсы rlimit-ом
Всё это ещё было портабельным. Но очень хотелось использовать Capsicum.
Обломался, так как посылка UDP пакета на адрес к которому прежде не было
connect-а -- невозможна в Capsicum, который ограничивает доступ к global
namespace, к которому относятся и IP-адреса. Сделал в итоге privilege
separated решение: отдельный процесс который занимается только отправкой
UDP пакетов, принимая данные из заранее связанного сокета. Основной же
демон, который принимает пакеты, парсит их -- под Capsicum sandbox-ом
работает.
А раз всё равно я это уже перевёл на FreeBSD из-за Capsicum, то и смысла
держать poll() нету. Перевёл на использование kqueue(). Происходит из-за
этого дополнительное копирование содержимого исходящих пакетов, для их
отсылки через сокет дочернему процессу -- но да и ладно, ибо нагрузка и
так смехотворная.
Sergey Matveev [Fri, 11 Nov 2022 13:25:47 +0000 (16:25 +0300)]
Дополнение имён почтовых ящиков
http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=752967292719f7f312d8779d23c2659d3dbb25cf
http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=9617ad122904870e08106ace6db96c46a2ffca95
Частенько я открываю MUA с чётко указанным почтовым ящиком. mutt -f =MBOX.
Проблема с "MBOX" в том, что если это например будет "go", то "=go" в zsh
раскроется в путь до go. Из-за этого я переименовывал почтовые ящики в
какой-нибудь "godev". Но набирать эти длинные имена геморройно. Можно
автоматически экранировать путь до ящика
(9c8126a531e8f20aa10c5baea299529807ed0a4e), история не будет дополняться
удобно при поиске из-за эти кавычек. Для простоты можно просто сделать
алиас типа mbox () { mutt -f "=$1" }. И теперь мне нужно дополнение
имени аргумента для mbox команды. Благо, в zsh это тривиально:
local mboxes=()
for m ($MAILDIR/*(/on)) mboxes=($mboxes $m:t)
_mycomp_mbox () {
[[ ${words[1]} == mbox ]] && _values mboxes $mboxes && return
}
Sergey Matveev [Fri, 11 Nov 2022 10:36:34 +0000 (13:36 +0300)]
Chrome выпиливает JPEG XL поддержку
https://habr.com/ru/company/skillfactory/blog/697756/
https://www.opennet.ru/opennews/art.shtml?num=58012
Ну как бы... ну и что? Очевидно что ряд причин там надуманные.
Chrome это про Web, а AVIF для Web-а только и подходит -- вот
и решили сосредоточиться на нём. Ведь и WebP подходит только для
Web-а -- никто его не будет использовать для хранения фотографий
коллекции. Я не вижу преимуществ AVIF по сравнению с JPEG XL даже
для Web-а, но тут же уже делёж денег, вложений и всего подобного,
вопрос бизнеса. Но AVIF и не сказать что ужасен для всяких небольших
картинок (ибо фотографии у меня он сжимал отжирая 40GiB+ RAM и то не
все -- я просто не смог дождаться завершения). Также как JPEG 2000 не
взлетел в Интернете из-за патентов -- это не отменяет что он куда лучше
для многих задач (lossless сжатие фотографий например) чем всё имевшееся
до появления JPEG XL.
Sergey Matveev [Thu, 10 Nov 2022 14:21:31 +0000 (17:21 +0300)]
Reply-To поле email-а
https://karl-voit.at/2021/07/21/reply-to/
http://cr.yp.to/proto/replyto.html
http://www.stargrave.org/Email-headers.html
Оказывается не все знают про этот заголовок, как говорит автор. Ужас
если это так. Причём "поддерживают" (уважают) уж наверняка все MUA. А
вот Mail-Followup-To и Mail-Reply-To до сих пор поддерживаются не всеми,
но думаю это чтобы не улучшать user experience (а перетягивать на
централизованные решения для удобства).
Sergey Matveev [Thu, 10 Nov 2022 08:00:11 +0000 (11:00 +0300)]
Разные программные ошибки
https://habr.com/ru/company/pvs-studio/blog/698404/
Всякие истории об ошибках забавных. Забавно что катание на американских
горках посчиталось как ДТП и автоматом вызвало соответствующие службы
iPhone-ами. Microsoft вроде бы ведь какой-то софт но может писать, но
вот всё равно обосралась с tweet-ом с кодом пытающимся поздравить с
новым годом. Ну как так можно? Они не делают tweet-review?
Хотя история про leftpad не смешна. Самое уродское в ней это то, что
npm самостоятельно вернули взад этот пакет, не смотря на то, что автор
явно пожелал его удалить.
Sergey Matveev [Wed, 9 Nov 2022 17:50:57 +0000 (20:50 +0300)]
godiana frontend для Aria2
http://www.git.stargrave.org/?p=godiana.git;a=blob;f=README
Годами использовал diana (https://github.com/baskerville/diana) frontend
для Aria2. Но как-то пришлось добавить команду для показа информации о
peer-ах. Но фатальная проблема с ним в том, что нельзя передать
дополнительные опции при добавлении торрента. А мне частенько надо
переопределять директорию для скачивания. В итоге я редактирую seed-файл
и перезапускаю aria2, что геморрой и останов всех торрентов. Плюс diana
вывод не показывает seed ratio. Что я делаю в этом случае? Стыдно
признаться: проматываю вывод aria2 в tmux-е. Но ratio он показывает
только когда ты seeder.
Открыл код diana и прям всё противит править Python код. Решил
переписать на Go. Кроме решения всех вышеназванных проблем, теперь ещё
можно удалить Python3 пакет с сервера с BitTorrent-ом, который аж больше
сотни мегабайт весит.
Sergey Matveev [Wed, 9 Nov 2022 17:40:12 +0000 (20:40 +0300)]
dht-bootstrap fork
http://www.git.stargrave.org/?p=dht-bootstrap.git;a=commitdiff;h=5ce75cf1b18f93fc109bf860b7ad900f7a42542d
В прошлом посте упоминал что пришлось подправить dht-bootstrap.
Выложил fork где добавил возможность явно указывать адреса для bind-а.
Плюс заменил select на poll. Всё это заметно упростило код.
Sergey Matveev [Tue, 8 Nov 2022 18:45:03 +0000 (21:45 +0300)]
Как не тривиально настроить BitTorrent оказалось
BitTorrent-ом я пользуюсь с момента появления у меня Интернета. Уже не
первый год использую aria2 в качестве клиента. Много лет у меня поднят
локальный трэкер (opentracker). Но похоже я вообще толком не проверял
всё ли работает как надо.
opentracker заставляешь слушать на "::" адресе и sockstat показывает что
он слушает и отвечает везде. Но проверка показала что он нифига не
показывает всех peer-ов для моих трэкеров. Явно же в его README написано
что WANT_IPV6 опция только для IPv6-only версии трэкера. Я подумал что
без неё -- он будет dual-stack. Посмотрел код: либо он только IPv4, либо
только IPv6. Нашёл что в дистрибутивах по два пакета opentracker не
брезгуют делать из-за этого: один для IPv4, другой для IPv6. Пришлось
поднимать две версии этого трэкера.
Пошёл дальше проверять работает ли это всё. Сможет ли один aria2 клиент
скачать с другого, используя только этот трэкер? Приятно что в aria2
можно явно отключить и указать только чётко заданные трэкеры. Вижу в
debug выводе leecher-а, что он получает IPv4 адрес seeder-а, но, так как
он за NAT-ом этого же адреса, то качать с него не сможет. Не проблема,
всё понимаю, но где же IPv6 адрес seeder-а?
Предполагаю что aria2 почему то стукнулся по IPv4 адресу трэкера и
поэтому передал ему только IPv4. Жёстко задал IPv6 адрес в /etc/hosts.
Не помогло, потому что aria2 использует c-ares и самостоятельно
асинхронно опрашивает DNS серверы. Ладно, указываю адрес трэкера не по
доменному имени. Вижу что seeder подключается по IPv6 адресу трэкера, но
передаёт он IPv4, который я указал в --bt-external-ip опции к aria2.
Почему я понадеялся что он только IPv4 адрес переопределит или что он
просто добавит этот адрес к анонсируемым?
Оказалось, что указать несколько адресов этой опцией нельзя. Что
укажешь -- то он и будет анонсировать трэкерам. Указывать несколько
адресов можно только косвенно через multiple-interface опцию. Но
BitTorrent seeder у меня запущен на отдельной машине, которая ничего не
знает про свой внешний настоящий IPv4 адрес. В общем, никак нельзя
указать чётко заданный IPv4 и IPv6 адреса.
Благо, оказалось что можно передавать доменное имя. И BitTorrent
протокол это явно разрешает (BEP3). И aria2 leecher это прекрасно
понимает тоже. Так что проблема решилась созданием доменного имени с
нужными мне IPv4+IPv6 адресами.
Я также поднял и DHT bootstrap сервер github.com/jech/dht-bootstrap.
Очень минималистичный, поддерживающий и IPv4 и IPv6, слушающий спокойно
на всех адресах. Когда поднимал, то тестировал локально утилитой
github.com/jeanralphaviles/dhtcli чтобы хотя бы просто PING-ануть его.
Начал проверять работу уже через aria2 seeder/leecher и вообще не видно
в выводе чтобы что-либо на DHT сервере происходило. Запрос сервер видит,
пишет на экране что посылает и ответ, но клиент (dhtcli) ничего не
получает. tcpdump показывает что ответ, действительно, отсылается назад.
Вот только не с того IPv6 адреса на который запрос приходил.
Потому что, в отличии от TCP, UDP отправляется as-is и какой уж будет
выбран исходящий адрес, такой и будет. FIB-ом вроде бы тут делу не
поможешь (в отличии от 884f5eb6a88411f947a0d6c3fecd37c612a51654). А
dht-bootstrap настолько минималистичен, что даже не предлагает выбрать
явный адрес для bind-а. Не нашёл решений как можно явно указать
preferred source address или адрес для bind-а. Но просто взял и сделал
явный hardcode адреса для bind-а в dht-bootstrap демоне. DHT вроде бы
заработал после этого.
И вновь чувство того, что я похоже жутко что-то всё переусложняю или
что-то не то делаю. Неужели запуск dual-stack BitTorrent клиента за
NAT-ом это такое не тривиальное дело оказалось? Как и запуск DHT
сервера. Понимаю, что это вообще не часто кем-либо поднимается, да и то
это наверняка официальная BitTorrent реализация. Да и на IPv6, который
вообще в отдельных BEP-ах описан как для BitTorrent, так и для DHT --
многие плевать хотели. Ну а доку по opentracker я просто плохо читал.
Sergey Matveev [Tue, 8 Nov 2022 10:30:40 +0000 (13:30 +0300)]
engge2 движок для Thimbleweed Park игры
https://www.opennet.ru/opennews/art.shtml?num=58068
https://github.com/scemino/engge2
Написан на Nim и Lua. Вообще ничего про Nim не знаю, кроме названия. Но
появляется возможность, как и с SCUMMVM, ResidualVM, играть в квесты на
свободном ПО.
Почему engge2 был вообще написан? Автор пишет, что последние баги в
оригинальном engge проекте на C++, который его задолбал, он решил
профиксить переписыванием на другом языке.
Но Nim у меня собрался из tarball-а их без проблем.
Sergey Matveev [Tue, 8 Nov 2022 10:12:56 +0000 (13:12 +0300)]
FreeBSD будет использовать Dragonfly Mail Agent
https://cgit.freebsd.org/src/commit/?id=a67b925ff3e58b072a60b633e442ee1d33e47f7f
Всецело одобряю! Понятия не имею как устроен DMA, но временами что-то
вижу из конфигов в рассылках. Что что, но sendmail у меня вызывает самые
крайне удручающие воспоминания. И это первый компонент который я заменяю
в любой FreeBSD установке, и что бы заменял в OpenBSD (когда они тоже не
начали делать свой MTA).
Sergey Matveev [Tue, 8 Nov 2022 09:40:35 +0000 (12:40 +0300)]
Вышел Texinfo 7.0
В нём исправлена бага о пропаже элемента из индекса, о которой сообщал
(ab93c94e50820da24ba107002f5cb0c1091cef2d), а также теперь HTML5 вывод
по умолчанию и желанная мною ASCII_PUNCTUATION опция (ибо бесит когда в
текстовом выводе, как минимум, не ASCII кавычки).
Sergey Matveev [Tue, 8 Nov 2022 09:20:07 +0000 (12:20 +0300)]
aria2 не имеет DHT bootstrap серверов по умолчанию
https://github.com/aria2/aria2/issues/362
Задался я тут вопросом: какие сервера для BitTorrent DHT bootstrap-а
использует aria2. Полазил в исходном коде и не нашёл ответа. Точнее не
видел чтобы были какие-то вшитые по умолчанию. Даже мысли не было что
они честно просто дают это полностью на откуп пользователю. Что верное
решение. Просто видя, как в десятках других клиентах обязательно это всё
вшивается, то не подумал о трушности aria2.
Люди в задаче на Github тоже пишут что годами имели проблемы с aria2 и
DHT, который типа просто не работал толком. Мне тоже казалось что как-то
он не очень хорошо работает (но что поделать, если у тебя на руках есть
только магнитная ссылка?). И у меня на практике всё, выходит, хоть
как-то но работало только за счёт peer exchange между клиентами,
которых обнаруживал через трэкер. --dht-entry-point[6] надо использовать.
Sergey Matveev [Tue, 8 Nov 2022 09:12:14 +0000 (12:12 +0300)]
Про top-posting
В рассылке questions@freebsd.org кто-то вновь вбросил про сабжевую тему.
Понравился ответ старожила:
> The place where top posting makes most sense is the corporate
> environment where an email thread starts with two (or more) people and as
> discussion goes on more people are added to weigh in with their thoughts.
> Done right it looks a bit like this when it arrives in the unsuspecting
> Fiona's inbox, complete with all the context she needs to see what's going
> on. She just has to read it message by message from bottom to top.
No, that's complete utter nonsense because now poor Fiona
is also forced by others into wasting her brain cycles trying to
read reverse hodgepodge from bottom to top, gearshifting reading
direction with every included snippet (which are in top-down form),
to get the "full context" necessary anyways for her to not make
professional error or negligience in whatever her duly considered
reply ends up being. All those wasted burnt brain cycles add up
across the enterprise.
> She just has to read it message by message from bottom to top.
And this here exactly admits that that is indeed the actual
horrible situation... she "has to read it" all in backwards fashion,
where "just has to" is a trick phrase to get her to do something
different, extra burn, unnatural.
Nothing is read from bottom to top, not books, not newspapers,
not flyers, not signs, not computer terminals, not spreadsheets,
nothing. There is no way for bottom-up "done right" because it is
fundamentally wrong opposite against how humans run language.
All the "corporate environment" top-post apologists are doing is
making invalid excuses for their sorry lazy writing behaviours
random junk tools and random contracts instead of teaching
their staff to do standard top to bottom like everything else.
These "environments" also waste endless cycles futzing their
source code because they don't follow codequette there either.
It's garbage netiquette perpetuated by the uninitiated,
the lazy careless, and the impetulent flippants upon others.
Allow garbage, get garbage, and it's getting worse because of that.
Computing writing is a responsibility, teach your children.
Quit top-posting, html'ing, whole msg quoting, etc.
And get a real MUA that lets you actually see what your
disgustingly torrid mess of an email looks like for real in
real 80x25 plaintext... if that doesn't wake you up and tell you
what's wrong and make you fix your emails, nothing will.
Полностью согласен что "копоративные" пользователи просто подло
оправдываются за свою лень, некомпетентность и банальное неуважение ко
времени собеседников (зачастую, конечно, таких же уродов, аналогично не
уважающих).
Ну и оправдываются за неумение настраивать своё говёное ПО, типа
Microsoft/Apple поделий. Где-то читал что в Outlook была банально бага,
когда метки цитирования (">" всякие) просто пропадали и поэтому люди
даже не могли понять где ответ, а где цитата и поэтому вынуждены были
писать свой ответ сверху, чтобы хоть как-то можно было разделить
информацию из-за этого бага. А это были времена когда обновление софта
означало заказ/распространений версий через дискеты, поэтому подобное ПО
использовалось годами. А так как закрытое, то и самостоятельно исправить
не было возможности.
И ещё заметил что куча людей вообще не разделяет (почему то) такие
use-case-ы как ответ на дискуссионное сообщение и forward писем, мешая
всё в одну кучу.
Sergey Matveev [Mon, 7 Nov 2022 13:55:35 +0000 (16:55 +0300)]
Кому нужны скрытые сети? Заметка без романтических небылиц о даркнете
https://habr.com/ru/post/570128/
Статья о том, что в darknet-ах на самом деле крайне скучно и нет никакой
выдуманной "романтики". Подписываюсь под каждым словом автора на этот
счёт! В darknet-ах я не был уже уйму лет, но когда то держал и выходную
ноду Tor, и все свои ресурсы зеркалировал в виде hidden service, и ещё в
I2P, и всё в таком духе. Конечно же из любопытства и смотрел чего ж там
такое есть в этих тёмных сетях. Да ничего такого, чего не найти бы в
Интернете. И тоже как-то ради любопытства на YouTube несколько роликов
видел на тему "ужасов пршедших из darknet". Это было настолько уныло,
настолько позорно что я на это вообще потратил время, что стыдно было
даже отмечать это в блоге.
А то, что сами технологии, сама идея которую все эти сети пытаются
реализовать -- именно это интереснее больше всего. Вновь полностью
поддерживаю.
Сейчас мне в целом это всё просто наскучило уже. Реальной практической
пользы о приватности не получить из-за малых размеров anonymity set.
Увеличивать их? Впадлу и не интересно. Практическую пользу от увеличения
доступности стоит и можно получить банально VPN-ом или Yggdrasil-ом.
Сейчас у меня среди всех технологий на эту тему только Yggdrasil и стоит.
Это мне сильно больше нравится, так как Yggdrasil хотя бы эффективно
работает из-за отсутствия какого-либо overhead на попытки анонимизации
участников.
И в одном из комментариев, автор корректно отметил что в Tor большущей
проблемой (фатальной я бы сказал) являются централизованные bootstrap
сервера, о чём умалчивают почти все.
Sergey Matveev [Sun, 6 Nov 2022 17:03:33 +0000 (20:03 +0300)]
Ростелеком отстойный
https://habr.com/ru/post/697678/
Сам на практике (cb6bff728abd8e296dd4d10648c3a2b31b7c8343) столкнулся с
тем, что без уведомления и разрешения подключают платные услуги. Любая
монополия превращается в подобное.
Sergey Matveev [Sun, 6 Nov 2022 13:21:38 +0000 (16:21 +0300)]
Puffin Cafe
https://www.patreon.com/puffincafe
Рассказы (серия аудиокниг) Роберта Шекли подошли к концу, "Модель Для
Сборки" давно прослушена (3144d39f1903349286e1e81e3d4ca114bf420349).
Обнаружил вот проект Puffin Cafe. Чтеца я уже знаю и он тоже нравится.
Sergey Matveev [Sun, 6 Nov 2022 11:27:20 +0000 (14:27 +0300)]
glocate считаю достаточно стабильным
После кучи улучшений в glocate утилите (adca349bb86d9ed357051d2452c1a4f9dff24f7c),
находилось и куча серьёзных багов, когда и база данных портилась и когда
оно ломалось со всякими серьёзными падениями и расчёт размеров косячил.
Но после месяцев постоянного обновления через zfs-diff, где самые разные
случаи и варианты изменений были, сегодня проверил насколько БД
расходится с той, что создана полностью с нуля. Абсолютно никаких
изменений. Теперь я уже абсолютно спокойно могу считать эту утилиту
вполне себе на практике стабильной и без лишней боязни/осторожности
(тесты то лень писать) продолжать использовать.
Sergey Matveev [Sat, 5 Nov 2022 22:56:01 +0000 (01:56 +0300)]
Сходил на stoner metal концерт
https://www.youtube.com/watch?v=Zo4lrjgLbM8
https://www.youtube.com/watch?v=xvh-7AW_xkw
https://www.youtube.com/watch?v=dqKkUi97gPo
Вновь поразился местом проведения. "Клешни" (Clawbar) это буквально
двухэтажный гараж. Среди кучи других гаражей. Концертная "площадка" это
второй этаж, размер которого наверное даже меньше чем моя большая комната
в квартире. При этом шестая часть площади занята дыркой под лестницу на
первый этаж, где бар и туалет. Половина занята музыкантами. Остальное уж
сколько влезет народу. То бишь не больше человек наверное 20, если
выдохнуть и втиснуться между микрофонами. На первой ссылке один из
концертов оттуда.
Stoner и sludge для меня только совсем недавно познаваемое направление в
музыке. И оно мне люто нравится! Выступали сегодня: Clarity Vision,
heXenblatt и Aether. Первые в целом понравились, не прочь ещё что-нибудь
подобное услышать. Последние, честно говоря, на один раз, ибо повторно
уже не хочется довольно нудный пилёж слышать. А вот heXenblatt прям
очень понравились! С удовольствием сходил бы ещё на их выступление. Судя
по всему, они далеко не первый раз живьём играют. Причём на видео
вокалистка без гроула нормального, а сегодня была другая и с отличным,
как на их альбоме в третьей ссылке.
Очень доволен проведённым временем! И не смотря на то, что места там для
слушателей, грубо говоря, меньше чем у меня занимает моё рабочее место
дома, обязательно хочу туда ещё раз наведаться.
И опять я заметил, что вроде только несколько человек наверное сравнимы
или старше меня. Старею...
Sergey Matveev [Sat, 5 Nov 2022 10:51:37 +0000 (13:51 +0300)]
Обзор Skyrim
https://www.youtube.com/watch?v=6-K661MjWcU
Название игры знал, но особо ничего не знал про эту игру, кроме того,
что она типа RPG и вид от первого лица. Слышал что это культовая игра.
Но я и не подозревал насколько она красива! За играми я немного слежу
до сих пор, но меня крайне редко что-то задевает и трогает и почти
никогда меня не тянет во что-то поиграть из увиденного. Но вот Skyrim
хочется запустить просто чтобы порассматривать все эти разнообразные и
богатые красоты.
Sergey Matveev [Thu, 3 Nov 2022 17:41:21 +0000 (20:41 +0300)]
Netflix с оптимизациями для FreeBSD для отдачи 800Gbps с сервера
https://people.freebsd.org/~gallatin/talks/euro2022.pdf
https://news.ycombinator.com/item?id=33449297
Автор статьи в комментариях пишет что почти всё что они сделали отдано в
upstream и уже внедрено в ядро. Он заверяет что, в общем то, можно взять
аналогичное железо нехитрое и у себя получить аналогичные скорости. Для
корневой ФС используют ZFS. Для хранения самого видео, ZFS тут с sendfile-ом
будет не дружна, да и просто избыточна.
Sergey Matveev [Wed, 2 Nov 2022 18:07:58 +0000 (21:07 +0300)]
ZFS на OpenBSD
https://flak.tedunangst.com/post/ZFS-on-OpenBSD
Разработчик OpenBSD уже начал делать первые шаги в сторону портирования
ZFS на OpenBSD. А то FreeBSD и NetBSD уже поддерживают её.
Sergey Matveev [Wed, 2 Nov 2022 14:10:12 +0000 (17:10 +0300)]
Git алиасы
Прежде я считал что у меня довольно минималистичный git, ибо у коллег и
в блогах вижу кучу всяких алиасов у людей для команд типа "git commit"
или "git fetch". Но, после того как немного порефакторил свои dotfiles
(по другому просто растасовал их в GNU Stow иерархии), увидел что вообще
у меня прилично алиасов стало. И причём все из них вполне себе часто
используются -- ничего не могу удалить за ненадобностью.
Sergey Matveev [Wed, 2 Nov 2022 08:07:10 +0000 (11:07 +0300)]
QUIC vs TCP
https://www.potaroo.net/ispcol/2022-11/quicvtcp.html
Хорошо и интересно написанная статья про сравнение протоколов. Не знал
что в нём максимальное ограничение на размер датаграммы в 1200 байт, что
вроде бы и неприятно, но для задач на которые нацелен этот протокол --
вполне себе сойдёт конечно же.
Sergey Matveev [Tue, 1 Nov 2022 09:49:33 +0000 (12:49 +0300)]
Статья про настройку почтового сервера
https://habr.com/ru/company/intervolga/blog/696726/
В целом всё нормально описано и нужное упомянуто, но совершенно
некорректно применяется термин MDA. Автор показывает на картинках то,
что MDA это типа штука которая принимает входящую корреспонденцию. Нет,
MTA по сети общается с MTA, а дальше уже опционально MTA может вызвать
MDA для последующей обработки писем. MDA -- действительно, тот кто
положит письма в ящик, но по сети между собой общаются только MTA. Ну от
клиента ещё MRA задействуется опционально. Плюс MDA может быть
несколько: и на стороне сервера, после приёма от MTA, и у пользователя,
после приёма от MRA.
Sergey Matveev [Mon, 31 Oct 2022 19:30:04 +0000 (22:30 +0300)]
Офис Авито
https://habr.com/ru/post/696630/
Был я в Яндексе, в Mail.ru, в ivi -- и по сути вроде бы у всех
всё плюс-минус одинаково как и в этой статье. В Mail.ru правда
ещё вспоминается спортивная площадка, если не путаю.
Sergey Matveev [Mon, 31 Oct 2022 15:31:03 +0000 (18:31 +0300)]
SourceHut банит криптовалютные и blockchain проекты
https://jlelse.blog/micro/2022/10/2022-10-31-kckdc
https://sourcehut.org/blog/2022-10-31-tos-update-cryptocurrency/
Ещё прежде (8ca9d645649e3f7820d28719518be3bcf0e2cfd5) мне SourceHut со
стороны нравился. Теперь нравится ещё больше, ибо хорошее объяснение дали:
These domains are strongly associated with fraudulent activities and
high-risk investments which take advantage of people who are
suffering from economic hardship and growing global wealth
inequality. Few to no legitimate use-cases for this technology have
been found; instead it is mostly used for fraudulent “get rich
quick” schemes and to facilitate criminal activity, such as
ransomware, illicit trade, and sanctions evasion. These projects
often encourage large-scale energy waste and electronics waste,
which contributes to the declining health of Earth’s environment.
The presence of these projects on SourceHut exposes new victims to
these scams and is harmful to the reputation of SourceHut and its
community.
We recognize that the basic idea of a blockchain, as it were, may be
generally useful. However, most projects which market themselves
with blockchain technology are subject to the same social ills as
cryptocurrency. Consequently, we have chosen to include “blockchain”
related projects in this ban for the time being.
Sergey Matveev [Mon, 31 Oct 2022 10:10:30 +0000 (13:10 +0300)]
git.includeIf
Наконец-то заиспользовал сабжевый функционал в git-е. Все мои
репозитории касающиеся работы находятся в одной иерархии директорий,
а значит легко глобально к ним применить override своего email-а:
Sergey Matveev [Mon, 31 Oct 2022 09:13:30 +0000 (12:13 +0300)]
Навигация по git diff выводу
http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=fda0a4182a7d56f57dc128642dc51c0ee3d16131
Почему до меня только сейчас дошло желание упростить навигацию по git
diff выводу? Ведь годами я частенько ищу по "^commit" или "^diff". Пара
строчек в ~/.lesskey и "c" с "f" позволят прыгать до ближайшего коммита
или файла в нём:
c forw-search \^commit\r
f forw-search \^diff --git\r
Где-то встречал что люди делают целые интерактивные task-specific
программы в этом less-е, навешивая кучу binding-ов на клавиши его.
Sergey Matveev [Sun, 30 Oct 2022 11:24:40 +0000 (14:24 +0300)]
Многоточие
Я, Матвеев С.А., находясь в здравом уме и твёрдой памяти, не являясь
заложником, не подвергаясь шантажу, *за компанию* сходил на рэп-концерт.
20 лет назад на курсах немецкого мне дали альбом сабжевой рэп-группы как
некий эталон рэпа, наказывая чтобы я бережно относился к их диску (дали
на время оригинальный CD). А я на тот момент слушал Nightwish в основном.
Тут предложили в Королёве сходить в кафе-клуб на их выступление. Ну хотя
бы раз в жизни и можно попробовать что это такое.
В живую любая музыка существенно лучше воспринимается. Уверен что я бы
получил большое удовольствие и от какого-нибудь концерта Shakira например.
Но... рэп даже в живую меня совершенно не тронул. Я качал головой и
притоптывал ногой под выступление женского трио из текстильного
института на акустических гитарах на Фестос фестивале. Качал под
выступление гитаристов в переходах. Качал на джазе, на африканской
этнической музыке, на тувинском горловом пении. Но вот на рэпе, не имея
уже при этом никакого негативного предвзятого отношения, даже
притоптывать организм не порывался, хотя ведь в колонках что-то
ритмичное было.
В общем, вообще никак. Музыка -- да её нет, как всем известно, это же
рэп, просто ритм. Слова -- мне совершенно пофиг на слова. Я их не слушаю,
не воспринимаю и не хочу слушать почти нигде. Исключением является
Сектор Газа, ну и Ashen Light с недавних пор
(e4a09572c117d8bc3c9f00a71cdd750f339a35a1). И вновь отметил кардинально
и совершенно иной лексикон у рэперов
(ca23bc85781a099a3f61719c1714957ac20c8e6c) -- уже убеждён что это
основная причина чуждости всей их культуры и мировоззрения. Со сцены
исполнитель Многоточия хвалит собравшийся народ словом "красавы". Не,
нормальное слово, понятное, но в моей голове оно *никогда* не возникнет,
также как я и не могу представить чтобы оно прозвучали на "моих" рок или
метал концертах. Это read-only слово: можем интерпретировать, но чтобы
его где-то употребить -- немыслимо для меня. Ну и масса других выражений
из этой же серии.
На афише написано что начало в 20:00. А в действительности было в 22:00.
Возможно этой является нормой для кафе, не знаю. Но если нет, то это уже
прям камень в огород этих рэперов -- ибо неуважение к своим слушателям.
Выступление шло час, после чего началась дискотека на всю ночь. Я посидел
с полчаса и пошёл домой конечно же.
Впервые был в заведении где на ночь начиналась дискотека. Один раз мы
(грайндкорщики) пересеклись из-за задержки на выходе с толпой молодых
людей на входе в клуб (b4a0fa335945e013e8fc0eaa3982665dc6c316bf, 2eedb3e478f21a190ac4124f420e9626336811d1), но что там внутри происходило
для меня неведомо (кроме как из новостей/статей). Увидел кучу женщин в
вечерних нарядах, которых друг называл "пантерами". Увидел кучу женщин с
накачанными губами -- эх, совершенно мне не понятно что в этом красивого
может быть.
Я НИКОГДА за свою жизнь не танцевал на дискотеках. Не понимаю почему, но
у меня просто не возникает надобности или хотя бы малейшего желания
потрястись, попрыгать и подрыгаться. Вот например на алкоголь смотрю: ни
йоты желания не возникакет, ибо не пью его, не нравится ни запах ни вкус.
Вот и на дискотеках (в том числе которые начинаются во время свадеб или
днях рождениях в кафе), когда врубается музыка, ничего не йокает. Когда
играет музыка, то притоптываю ногой. Когда она нравится -- покачиваю
головой. Когда жутко нравится, то амплитуда кача увеличивается и может
перейти в желание помотать ею активно. Но попрыгать -- никогда не
возникало. Помню на концерте то ли Eisbrecher, то ли Megaherz, вокалист
призывал попрыгать -- но даже там я стоял, ибо совсем нет порыва в этом.
Покачать руками -- никогда не возникало желания. Показать козу -- это
знак и сигнал одобрения/уважения и обратной связи с исполнителями, не
более (лично у меня). Когда энергией накачивают ещё больше, то раньше
вливался в слэм. Сейчас уже староват для этого, но хотя бы по периметру
слэма стою чтобы и хоть как-то всё ещё оставаться причастным к нему, и
защищать слеймящихся и стоящих поодаль от него. Но "просто" потанцевать,
мне вроде бы даже в детстве никогда не хотелось, хотя на всяких днях
рождениях и праздниках у родителей они с друзьями всегда ставили в
колонки музыку и танцевали.
Интересный опыт был, не пожалел, но чувствовал себя совершенно не в
своей тарелке.
Sergey Matveev [Sat, 29 Oct 2022 14:20:57 +0000 (17:20 +0300)]
VimL название
https://stackoverflow.com/questions/4398312/vimscript-or-viml
Оказывается много где люди называют "Vim script", "vimscript" словом
"VimL". Откуда это пошло? Поискал хоть какое-либо упоминание в исходном
коде Vim, но даже близко ничего подобного нет. Бесящий меня "golang"
хотя бы понятно откуда растёт -- как минимум, из доменного имени. А тут
чертовщина какая-то.
Sergey Matveev [Fri, 28 Oct 2022 22:48:09 +0000 (01:48 +0300)]
Регистро-чувствительные адреса IPv6
https://weberblog.net/using-case-sensitive-ipv6-addressing-on-a-palo-alto/
Предлагают использовать case-sensitive IPv6 адреса, дабы увеличить их
пространство с 128 до 142 бит. Кроме "a..f" ещё использовать "A..F".
Я подумал что люди там совсем свихнулись, а публикация была 1-го апреля.
Sergey Matveev [Fri, 28 Oct 2022 12:47:01 +0000 (15:47 +0300)]
Глупость в инфобезе
https://habr.com/ru/company/cloud4y/blog/696078/
И ведь удручает в первую очередь то, что они (админы, программисты
подобных сайтов) искренне убеждены в своей дурной правоте.
"Использование email адреса в качестве пароля является достаточной
защитой, как выяснилось по опросам пользователей". А ещё антивирусная
защита в HDMI кабелях.
Sergey Matveev [Fri, 28 Oct 2022 11:04:05 +0000 (14:04 +0300)]
Вывод звука через DisplayPort на NUC
В c61de0e6608159911180022d79d1814b00e9809d упоминал что у меня появился
USB-C↔DisplayPort переходник, но я продолжал использовать HDMI, так как
DP (монитор/whatever) не всегда просыпался после энергосберегающего режима.
Но я не проверял выводится ли звук через него. Через HDMI, на NUC, в
отличии от Dell ноутбука -- не выводился, но это связано с драйверами
под мою не самую свежую FreeBSD. И внезапно мой монитор снова стал
колонками! Полтора года у меня не было совершенно никакой возможности
вывода звука не в наушники: даже CD/FM-проигрыватель не имеет линейного
входа.
Я у себя в sysctl явно включил ECN ещё давно, но никогда не смотрел на
что оно повлияло. А тут вот и оба хоста явно договорились об его
использовании. Может ли это на что-то на практике повлиять в моей
домашней сети? Уверен что нет, но хуже же ведь не будет?
Sergey Matveev [Thu, 27 Oct 2022 07:13:39 +0000 (10:13 +0300)]
Взяли интервью короткое на улице
Спросили про то, что на Собчак наезды/гонения, как я думаю это бизнес
или политика? Я ответил "я считаю, что она давно должна сидеть", кивнул,
пошёл дальше. На вопрос напрямую не ответил, но как бы и так ясно что
плевать по какому поводу её наказать.
Over the years I've become convinced that the BSD license is great
for code you don't care about. I'll use it myself.
-- Linus Torvalds at LinuxCon 2016
Если насрать на код, то BSD лицензия замечательна для него.
https://www.gnu.org/licenses/hessla.html
https://www.gnu.org/philosophy/programs-must-not-limit-freedom-to-run.ru.html
Не является лицензией свободного ПО, ибо содержит условия касающиеся
прав человека и запрета шпионажа/слежки. Статья ещё говорит о том, что
GNU GPL вполне себе тоже защищает от шпионажа, так как доступный для
чтения, изменения и распространения код достаточен для этого.
И судя по всему, открытая гослицензия (cc72ac45e40c515d619527ce37a3390a5c3223df)
аналогично всё же не является свободной, так как явно сказано что
применяется право РФ. Пользователь, то бишь, ограничен этими законами.
Ну и то, что право использования предоставляется безвозмездно это тоже
недопустимое ограничение.
Sergey Matveev [Wed, 26 Oct 2022 07:20:10 +0000 (10:20 +0300)]
Выбор ОС unixsheikh-а
https://unixsheikh.com/articles/my-choice-of-operating-system.html
OpenBSD, если речь про безопасность (с чем я не очень согласен, если
только не специально под эту ОС писать ПО для своей задачи), FreeBSD
для остального, особенно когда хочется производительности и гибкость
настройки. GNU/Linux-ы в целом не использует из-за зоопарка в котором
постоянно из-за несогласованности между разными группами что-то да
ломается. Но до момента внедрения systemd, ему нравился Debian. Теперь
Devuan является более Debian-ом чем сам Debian. Как и я, автор напрочь
отказывается иметь дело с RPM-based дистрибутивами. systemd не может
остановится добавлять всё новые и новые фичи, имея сумасшедшие проблемы
со стабильностью и надёжностью и, по мнению автора, он не подходит для
production систем (что и для меня очевидно). У Arch-а лучшая
документация в виде wiki -- с чем тоже согласен. Автор особо отмечает
Artix (в котором штатно можно использовать runit/s6/OpenRC), Void
(который и мне выглядит интересным).
Sergey Matveev [Wed, 26 Oct 2022 07:16:00 +0000 (10:16 +0300)]
Mechanized Assault and eXploration
http://tv-games.ru/news/read/m.html
https://www.youtube.com/embed/ra1bde0p4AM
Упоминал в 5648578d297f9e69a6e9b3da5a9e9885abcc8488 про M.A.X. игру,
которая в детстве имела для меня непреодолимый порог входа. Я вообще
не понимал что происходит и что и как делать. И тут вот автор видео
тоже говорит о пороге вхождения, но стоящей потрясающе хорошей
стратегии. Плюс рассказывает основы игры.
Sergey Matveev [Tue, 25 Oct 2022 10:49:52 +0000 (13:49 +0300)]
Снова увидел солнечное затмение
Когда работал в ivi, то через мой блокнот, обложкой которого выступает
5.25" дискета, увидел впервые в жизни затмение. Ну и сегодня видел как
половина солнца была закрыта.
Sergey Matveev [Tue, 25 Oct 2022 10:26:32 +0000 (13:26 +0300)]
Появилась Sofle клавиатура
https://josefadamcik.github.io/SofleKeyboard/
Подарили мне тут сабжевую клавиатуру. Тоже с полностью чёрными клавишами.
Пока, честно говоря, не очень ещё понимаю может ли она полноценно заменить
текущую клавиатуру. Для кириллической раскладки там буквально просто нет
места, нет целого ряда справа. В принципе мне недостаёт где-то 24 клавиши
на ней. Хорошо 12 это функциональные: я не все использую, оставляю про
запас, но неприятно без них. Четыре стрелочки: вроде бы можно и без них,
но у меня Shift+Up в zsh есть для поиска по истории, который очень
удобен и привык к нему. Так что пока надо думать над раскладкой, ещё не
углублялся в эту тему.
Sergey Matveev [Tue, 25 Oct 2022 08:49:14 +0000 (11:49 +0300)]
authn/authz
https://xeiaso.net/talks/surreal-horror-pam-2021-11-09
Впервые увидел использование сокращения "authn" для "authentication",
"authz", для "authorization". Мне нравится.
This is Linux and macOS. Those exist but we can't use them because
we are cursed into using PAM.
Sergey Matveev [Tue, 25 Oct 2022 08:45:56 +0000 (11:45 +0300)]
Время в macOS
https://www.netmeister.org/blog/epoch.html
Ну конечно же Apple не может просто так использовать Unix эпоху.
Внутри себя для монотонных часов использует отсчёт 2001-01-01.
Sergey Matveev [Fri, 21 Oct 2022 17:51:23 +0000 (20:51 +0300)]
Чистота в доме
Как-то (cbe826fc92e38541de57239906f4dfc534ac0fba) мне сказали что у
меня дома стерильно. Недавно были гости и услышал новое сравнение,
когда открыли ящик со столовыми приборами: как-будто только переехал,
аж противно как чисто.
Sergey Matveev [Fri, 21 Oct 2022 12:49:54 +0000 (15:49 +0300)]
"Последнее испытание" Роберта Шекли
https://fantlab.ru/work200634
Рассказ на 90% состоит из истории о том, что день за днём пропадают
звёзды с неба. Вскоре, когда погасла Альфа Центавра, голос с небес
огласил судный день через пять дней. Люди начали друг другу раздавать
деньги, делать всякие хорошие вещи, помогать друг другу и всё подобное.
Слушая всё это (аудиокнига), даже был разочарован: неужели на всём этом
книга и закончится? Ну не могут быть люди хорошими. Разве что перед
кончиной временно лицемеря. А в день суда, сообщили что решение
откладывается на десять лет. И тут понеслось: никто не хотел уже
продолжать работать, деньги потеряли ценность, начались бомбардировки
США Европы, Китаем США и вообще всеобщая резня и истребление, ведь всё
равно оставались считанные годы до точного конца. И книга как-то сразу
мне очень понравилась, ибо показывает гнусную суть большинства людей,
которые вчера только ходили в церковь помолиться, раздать бедным все
свои сбережения, а завтра готовы убивать любого кто косо посмотрит.
Sergey Matveev [Wed, 19 Oct 2022 13:57:04 +0000 (16:57 +0300)]
Более легковесный Mark плагин
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/pack/stargrave/start/mark/autoload/mark.vim
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/pack/stargrave/start/mark/plugin/mark.vim
https://www.vim.org/scripts/script.php?script_id=1238
https://www.vim.org/scripts/script.php?script_id=2666
https://github.com/inkarkat/vim-mark
Уже скоро как десять лет использую Mark плагин для Vim. Простое нажатие
\m (leader+m) подсветит слово под курсором. Нажав на другом слове: будет
подсветка другим цветом. Помню что в SQL-е, где полно очень похожих слов
(в единственном и множественном числе например) это очень помогало. Раз
в неделю но обязательно использую этот функционал.
Пока тут обновлял свои плагины, то заметил что у меня очень старая
версия Mark-а. Которая делается Ingo Karkat-ом и является fork-ом от
оригинального написанного Yuheng Xie. Современная версия Mark куда более
фичастая и требует ещё и установки библиотеки вспомогательных функций.
Что мне не нравится. Я ничего не хочу кроме подсветки слова под курсором.
Но современный Mark это тысячи строк vimscript-а.
Оказалось что оригинальный автор вернулся к своему плагину и продолжает
его развитие, явно написав что он в курсе наработок Karkat-а, но в своём
стиле будет продолжать его пилить. И его версия занимает несколько сот
строк всего, умея не только подсвечивать слова. То есть функционала мне
за глаза, существенно более маленькая, единственный файл в plugin
директории, и мне очень нравится его vimscript код компактный.
Понравилась идея того, что :Mark просто прячет все выставленные метки,
но повторное выполнение этой команды их снова покажет. Явного удаления
меток нет, но логично что если начать выставлять метки когда предыдущие
скрыты -- то старые будут удалены.
Пока писал этот пост, то внезапно обнаружил что он не подсвечивает
русские слова. Моментально нашёл место где это не отрабатывает как
ожидалось. Исправил. Дальше захотел портировать на vim9script. Увидел
что много мест с дубляжом кода, плюс проверок на наличие функций,
которые в современных версиях Vim можно бы было убрать. Короче говоря,
глядя на всё это, полностью написал свою реализацию с нуля. Которая
ничего не делает кроме подсветки слов под курсором. С одной стороны оно
есть и написано, только надо причесать. Но я ни разу никогда не
использовал ни подсветку по regexp-у, а поиск по подсвеченным словам
меня даже раздражал.
Моя реализация вышла в 55 строк, не считая объявление цветовой схемы.
autoload (231afdef7064d9a180de16f4ad8b285f85bb6e79) для ленивой загрузки
скрипта. vim9script (1663d9d463041807b70067497fe45249e45b7755) везде.
Использование списка вместо кучи переменных с автогенерированным именем.
Никаких глобальных переменных. Более простое и лёгкое обновление всех окон.
Sergey Matveev [Wed, 19 Oct 2022 10:10:15 +0000 (13:10 +0300)]
Советские языки программирования
https://habr.com/ru/company/ruvds/blog/692594/
Язык Робик:
ВКЛЮЧИТЬ ОБХОДЧИК;
ЗАПОМНИТЬ ПРОЦЕДУРУ ПРОВЕРКА_СТЫКА;
ЕСЛИ ОБХОДЧИК.СТЫК = "НЕИСПРАВЕН" ТО ОТМЕНИТЬ СТЫК;
ВПЕРЕД 24М;
ЗАКОНЧИТЬ;
ПОКА ОБХОДЧИК.ВПЕРЕДИ = "СВОБОДНО" ПОВТОРЯТЬ ПРОВЕРКА_СТЫКА;
ПОКА ОБХОДЧИК.СЗАДИ = "СВОБОДНО" ПОВТОРЯТЬ НАЗАД 24М;
ВЫКЛЮЧИТЬ ОБХОДЧИК;
РАПИРА:
ПРОЦ СТАРТ();
ВЫВОД: "ЗДРАВСТВУЙ, МИР!";
КНЦ;
ЕСЛИ А > В ТО
1 -> А; ВЫВОД: В;
ИНАЧЕ
1 -> В; ВЫВОД: А;
ВСЕ;
РАЯ (Русский Алгоритмический Язык). Ага, как же, поверим что это не
ответ на язык "Ада":
алг Сумма квадратов (арг цел n, рез цел S)
дано | n > 0
надо | S = 1*1 + 2*2 + 3*3 + … + n*n
нач цел i
| ввод n; S:=0
| нц для i от 1 до n
| | S := S + i * i
| кц
| вывод "S = ", S
кон
Sergey Matveev [Tue, 18 Oct 2022 07:17:43 +0000 (10:17 +0300)]
Пешеходы и водители Королёва
https://lenta.ru/news/2022/10/18/art_kosm/
Водитель сбил пешехода. Но раз это Королёв, то это не просто случайные
люди, а водителем оказался космонавта, пешеходом глава одного из проектов
Звёздного городка.
Sergey Matveev [Tue, 18 Oct 2022 07:06:51 +0000 (10:06 +0300)]
Рассказы Шекли. Брачные игры Вселенной
https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D0%BA%D0%BB%D0%B8,_%D0%A0%D0%BE%D0%B1%D0%B5%D1%80%D1%82
https://fantlab.ru/work30640
Сейчас читаю одну здоровую фантастическую книгу, довольно интересную, но
большую. Параллельно с ней прочитал фэнтезийную "Первое правило
волшебника" (77fc50ace832f87bb83690f3e88a0bee5b415e2e). А теперь достал
сборник различных коротких рассказов Шекли, с которым я конечно же и
прежде был знаком. Как же мне неописуемо нравятся его рассказы! И как же
мне это всё больше нравится чем yet another fantasy story!
Ну как может не умилять рассказ "Брачные игры Вселенной", в котором
существа целой планеты размножаются и оплодотворяются за счёт
пришельцев, просто передающие "символ плодородия" между мужчиной и
женщиной планеты? Пришельцы, среди которых и человек был, даже не
осознают что их просто поимели на этой планете. А с собой они забирают
некий "кайф", который просто уничтожит мир пришельцев после.
Хотя пишут что не факт что это рассказ самого Шекли. Но в его духе!
Просто он в начале сборника находится, поэтому его и выделил уже.
Sergey Matveev [Tue, 18 Oct 2022 06:51:47 +0000 (09:51 +0300)]
Я делал это, когда ещё не было модным и обязательным
На работе за последние года много указов и распоряжений о том что
запрещено использовать WhatsApp, открывать всякие почтовые вложения
непойми от кого, иметь в виду какие страны выдают людей США по запросу,
какие недружественны и имеют санкции на РФ. В армию можно взять обычный
сотовый, не смартфон.
А я ведь подобному всему следовал когда ещё не было никаких подобных
рекомендаций и указов. И так было очевидно что любая поездка в страну
НАТО например, даже до того как РФ начала себя активно защищать, всегда
могла оказаться билетом в один конец. Отец аналогично считал и говорил
что на кой чёрт рисковать поездками к пособникам США?
Про информационную безопасность вообще молчу: не понимал как люди могут
игнорировать факт тотальной небезопасности всех популярных IM-ов? Одно
дело в личных целях, но когда по работе что-то пересылают -- я бы давно
за это строго наказывал.
И раньше меня называли параноиком и придумывающим всякие геополитические
несуразицы не имеющие отношения к реальности. Теперь же я стал в этих
вопросах адекватным и нормальным человеком внезапно.
Sergey Matveev [Mon, 17 Oct 2022 10:46:12 +0000 (13:46 +0300)]
Подпись Git коммитов/тэгов SSH-ключами
https://calebhearth.com/sign-git-with-ssh
https://blog.dbrgn.ch/2021/11/16/git-ssh-signatures/
Как альтернатива OpenPGP, можно подписывать SSH-ключами.
Подписывать ими произвольные данные можно также через ssh-keygen
(e6184094fc1f16c6d0648dfb62b02e95c15b4136).
Только сейчас обратил внимание на allowed signers файлик, требуемый для
этого. Вот именно таким должно быть управление доверием: просто на
каждой строке указывается публичный ключ (ed25519 то компактные) и
identity. Опционально можно и время жизни задать или третье доверенное
лицо. Гибко, не форсирует PKI или бизнес решения типа validity.
Sergey Matveev [Mon, 17 Oct 2022 08:19:25 +0000 (11:19 +0300)]
ASN.1 парсинг в libKSBA
https://lists.gnupg.org/pipermail/gnupg-users/2022-October/066273.html
Серьёзная уязвимость в библиотеке при парсинге ASN.1. Эх, какой десяток
лет ASN.1 используется и всё равно продолжают находится серьёзные баги
при его парсинге. Брюс Шнайер в своей "Прикладной криптографии" уже
давно писал что при возможности лучше ASN.1 не использовать, так как
будут атаки на библиотеки работы с ним.
Sergey Matveev [Sun, 16 Oct 2022 10:17:41 +0000 (13:17 +0300)]
Про endianness работу в Си
https://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
В b45f896af5ca60802cbae0a00d8223857a771eba я давал ссылки на тему про
endianness конвертацию в Си. Но на днях на работе мне прислали вопрос
уверен ли я что с endianness нет проблем в таком куске кода тривиальном:
size_t len = (size_t)(data[2] << 8) | data[3];
Отвечаю что возможно я какой-то очередной подвох в Си не знаю, но что в
нём не так? Мне кидают информацией об endian.h и be16toh(). Отвечаю что
в курсе их существования, но:
* конкретно у be16toh менее удобный API (указатели все эти)
* be16dec, который удобен для использования, не факт что есть в glibc,
как например в нём, как оказалось, не было be64dec
* endian.h include не портабельный: в BSD системах это sys/endian.h
* плюсом будет только отсутствие *нескольких* арифметических операций
при запуске на BE-архитектуре. Если бы речь шла про миллионы пакетов в
секунду, то возможно можно было бы начать задумываться об этом, но
речь про один пакет за нескольких секунд (это просто парсинг его размера)
Коллега никакого ответа на это так и не дал, только повторив что в одном
случае порядок меняется, а в другом нет. Но до сих пор не знаю к чему
этот ответ.
Можно или писать чуть-чуть более эффективный код, который, в зависимости
от endianness платформы, будет тасовать байты или будет использовать их
as-is без преобразований. Или писать код независимый от endianness
вообще, в котором несколько тривиальных инструкций выполняются всегда,
пускай даже когда это и не надо (совпадающий endianness платформы и данных).
Позже вспомнил про статью Роба Пайка, в которой он тоже считает всё это
фигнёй. Мол, если в коде есть #ifdef BIG_ENDIAN, то это не порядок.
Вместо того, чтобы написать:
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
такие люди будут писать что-то типа:
i = *((int*)data);
#ifdef BIG_ENDIAN
i = ((i&0xFF)<<24) | (((i>>8)&0xFF)<<16) | (((i>>16)&0xFF)<<8) | (((i>>24)&0xFF)<<0);
#endif
Что, очевидно, гораздо больше года. Плюс не везде возможно целые числа
адресовать по любому адресу (выравнивания).
In fact, byte-swapping is the surest indicator the programmer
doesn't understand how byte order works. Why do people make the byte
order mistake so often? I think it's because they've seen a lot of
bad code that has convinced them byte order matters.
Plan 9 вообще без единого, как говорит Пайк, platform-specific #ifdef-а
был написан.
Sergey Matveev [Sun, 16 Oct 2022 10:00:06 +0000 (13:00 +0300)]
Статья про WebRTC
https://habr.com/ru/company/oleg-bunin/blog/660693/
Эх, количество абсолютно безграмотных и неверных утверждений зашкаливает
настолько, что рекомендовать статью невозможно.
* "Именно поэтому высокоскоростные транспорты часто реализуют поверх UDP
протокола". Как же часто я стал, после стандартизации QUIC и HTTP/3
видеть подобные бредни. Люди видят что UDP более лёгкий и поэтому
передавать данные по нему можно эффективнее и типа именно поэтому
появился HTTP/3 который так лучше работает на смартфонах в условиях
WiFi и сотовой связи. Хочется и написать чем оно не верно, но понимаю
что смысла нет, ибо любые базовые прочтения даже Wikipedia на тему UDP
и TCP у вменяемого человека должны всё поставить на свои места. А RTC,
как и весь VoIP, использует UDP только по причине низкой задержки и
ненужности гарантированной доставки, что вроде бы очевидно должно быть
* "Вообще, NAT еще обеспечивает приватность и делает всякие хорошие штуки."
Ну как мне после этого хоть что-то положительное можно сказать про автора?
* "При установке WebRTC-соединения вы сначала пробуете TURN, потом
STUN." -- наверное зависит от конкретного WebRTC, но вообще-то
официальный от Google делает как-раз наоборот. Делать TURN изначально
-- даже нелогично, ибо это очень ресурсоёмкая операция, да и TURN
сервер в общем случае не обязан присутствовать
* "Чтобы решить эту проблему, используют лайтовую версию TLS" -- это вот
в каком месте DTLS "лайтовее" чем TLS??? Я больше осведомлён только
про DTLS 1.3, но это вообще то самый пресамый обычный TLS, к которому
наоборот добавлены дополнительные поля и более сложная машина
состояний, плюс с дополнительными ACK-пакетами. Что что, но DTLS это
более усложнённая версия TLS со всех точек зрения
* Ничего не сказано про то, что SRTP/SRTCP трафик отправляется ВНЕ DTLS
соединения. Точнее всё сказано так, что RTP/RTCP как-будто работают
аналогично SCTP внутри DTLS
* "Напомню, что WebRTC data channels работают поверх UDP. Это более
легковесный протокол, чем TCP, и скорее всего используя его, вы
получите выигрыш по скорости." -- рехнуться можно от такого заявления.
Data channels это SCTP поверх DTLS UDP датаграм. SCTP существенно
более громоздкий, сложный и навороченный протокол чем TCP. И это я
закрываю глаза на то, что оно поверх DTLS ещё.
* "Возникает вопрос, а чем это лучше Websocket? Ответ: WebSockets
работает поверх TCP, поэтому может быть медленнее" -- окончательное
понимание того, что автор абсолютно не сведущ в причинах использования
UDP. Просто ужас
* Про работу с кодеками уже почти ничего не читал
Sergey Matveev [Sun, 16 Oct 2022 09:53:20 +0000 (12:53 +0300)]
Почему TCP/IP, а не просто IP?
https://stackoverflow.com/questions/24337177/why-tcp-ip-are-mentioned-together
https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Historical_origin
Всегда бесило когда говорят "TCP/IP", так как сразу же рождается вопрос
"а без TCP нельзя что ли?". Интернет это только про IP вообще-то. Но,
это просто исторически так сложилось, так как при разработке Internet
Protocol Suite центральной вещью в ней был именно TCP, ведь именно он
обеспечивает гарантированную доставку в сетях, а тема пакетной передачи
уже не столь важна для конечного пользователя. Так что логика есть.
Sergey Matveev [Sat, 15 Oct 2022 17:29:45 +0000 (20:29 +0300)]
Открытая государственная лицензия
http://publication.pravo.gov.ru/Document/View/0001202210120022?index=10&rangeSize=1
https://spbit.ru/news/n216164/
В 2fcded0750f1250134c7df3638b22b807f4717d0 уже вёл речь про гос лицензию.
Но тут какая-то другая версия теперь. Решил повнимательнее почитать её.
- Используется терминология бизнесменов ("открытое" ПО, хотя по сути там
речь вполне про свободное, насколько вижу)
+ По моему, грамотное определение и исходного и объектного кода. Это
хорошо, ибо обфусцированный JavaScript явно не может быть "исходным кодом"
+ Должна поставляться копия лицензии и полный attribution без изменений
+ Лицензиат не получает никаких дополнительных прав на программу
- Пункт 2.6 говорит что "право использования Программы по настоящей
Лицензии предоставляется безвозмездно". Я далёк от юридических вещей и
языка, но я это интерпретирую как "программа предоставляется бесплатно".
+ Явно сказано что исходный должен должен прилагаться к программе, или
должна быть указана возможность его получения без проблем. В GPLv3
аналогичные пункты есть
+ 4-ые пункты являются почти калькой 4-х свобод свободного ПО
? В конце явно упоминается что используется право РФ
Вот вроде бы всё удовлетворяет критериям СПО, но напрягает пункт про
безвозмездное использование. Вроде бы написано что оно относится только
к "Программе", что вроде бы не включает "Модифицированную программу".
Так что если я хочу за деньги доработать Программу, то вроде бы могу. Но
зачем этот пункт тогда? Для того чтобы на *уже* написанных за бюджетные
средства Программы не стричь снова денег? Но мне кажется я просто не
понимаю что тут хотели сказать.
Требование обязательного предоставления исходного кода мне нравится.
Это не BSD-like и не Expat-like permissive лицензии.
Но также в самом документе явно говорится о том что лицензия совершенно
не copyleft-ная. Что, конечно же плохо, ибо оно не заботится о том,
чтобы и основанное на нём ПО было свободным.
Но я вроде не вижу ничего такого, что помешало бы мне использовать софт
с такой лицензией как зависимость к своему. А вот выкладывать своё ПО
под ней не хотел бы, так как она не copyleft. Задача сделать так, чтобы
люди кооперировали, сотрудничали и пользовались совместными разработками?
А если тут всё же целью является публикация того, что было разработано
на бюджетные средства -- то одобряю, хотя бы так.
Sergey Matveev [Sat, 15 Oct 2022 17:17:10 +0000 (20:17 +0300)]
Национальный репозиторий открытого кода
https://www.opennet.ru/opennews/art.shtml?num=57909
Планируют сделать репозиторий открытого кода у нас. Насколько понимаю,
целью тут является обмен кодом созданным на бюджетные средства. Это
хорошо конечно.
А если целью является создание местного аналога GitHub, то я не понимал
и до сих пор не понимаю, хотя мне аргументы и приводили какие-то, зачем
это надо. Я считаю что вполне себе хватило бы просто аналога wiki
страничек типа Free Software Directory: https://directory.fsf.org/wiki/Main_Page
Поднять свою инфраструктуру для разработки ПО можно легко, быстро и без
особых затрат, так как компьютеры дешёвые, Интернет у нас почти
бесплатный, можно и дома *достаточно* надёжно хоститься. Ну или на VPS,
которые тоже крайне дёшевы. Тьма проектов вообще ничего не требует кроме
git-репозитория. На полном серьёзе мало кому нужны монструозные огромные
CI/CD-ready решения. А кому нужны: всегда найдёт время и специалистов
для поднятия локально, чтобы не зависеть от дурости, идиотизма и
безответственности сторонних организаций.
Централизованное решение могло бы быть интересно только как источник
знаний о вообще существовании того или иного ПО. Возможно как архив, yet
another зеркало для него, ведь домашний сервер в любой момент может
пропасть.
Боюсь, что, как всегда, не будет в нём ничего доступно без загрузки
проприетарных программ и небось только после авторизации через Госуслуги.
Но посмотрим, увидим.