Уже больше месяца (564930f08277a2813bcf84b4b58001dbeafa400c) я на новой
VPS-ке с другой /48 сетью. Полёт отличный. Ни к скорости, ни к каким то
другим неожиданностям придраться не могу.
Но также заметил, что при обновлении различных Git зеркал, полностью
исчезли ошибки недоступности. Почти 200 различных репозиториев, многие
из которых доступны по IPv6, некоторые даже только по нему. И где-то с
полдюжины, иногда штук 20, но не могут они обновиться -- отрубают через
какое-то время с ошибкой по прикладному протоколу (Git/HTTP) что всё
медленно, плохо и timeout. С новой сетью если что-то и не получалось, то
когда реально сами Git хосты лежат. Но зато на нём не работает YouTube,
в отличии от прошлого. На работе он (по IPv6) доступен, но тратить там
трафик на скачивание видосиков на тему компьютерных игр я не буду.
Но и в мире IPv4 всё аналогично: что-то где-то доступно и работает
исправно, а на другом провайдере уже нет.
https://arxiv.org/abs/1904.06525
Вот есть предложение с анализом по использованию Стрибога в SPHINCS+
(ae09a56ab4c40b8a377821678c929e32ef2a0c0d). С ним, как и с SHA2-256
сложнее, ибо они не XOF функции, как SHAKE, но типа просто замена хэша
более чем достаточна. Чем SPHINCS+ и прекрасен.
Побывал на концерте ансамбля Центрального Дома Российской Армии
https://cdra.ru/
Не целенаправленно ходил, но была возможность посетить "за компанию".
Как по одиночке пели, так и небольшим хором. Пляски, музыкальные номера.
Ну... не скажу что пожалел, но всё же совсем не моё. По сути мне больше
всего то только танцы и понравились, но наверное потому что я редко когда
их вообще видел в живую. В целом это было крайне близко к эстраде и
попсе, разве что тексты были ожидаемой тематики. Казачий хор, на котором
был днями раньше -- куда более серьёзный.
https://code.mendhak.com/gpl-v2-address-letter/
Некто прошёл квест по отправке материального настоящего письма в FSF,
чтобы получить от них тоже настоящее письмо с распечатанной GPL лицензией.
Вот только ему прислали GPLv3, а не GPLv2, которая у него была указана.
Раз в пару недель проскакивает новость о том, как люди то тут, то там
ставят "защиту" от AI-роботов, типа Anubis. На сайте написано, что он
заставляет обозревателя делать proof-of-work. Детали на сайте больше не
прочитать: он бросает redirect-ами на один и тот же URL со слэшом и без
него (видимо, это та самая "защита"?). На GitHub только можно посмотреть
документацию. Ну так и есть: всякие cookie, PoW. То есть, теперь уже не
корпорации (типа Cloudflare), но сами люди заставляют других запускать
код и сжигать немалое кол-во ресурсов для доступа уже к обычным HTML
сайтам (не web-приложениям).
https://ru.wikipedia.org/wiki/Кубанский_казачий_хор
В целом понравилось, но повторно вряд ли бы пошёл. Всё же далеко от меня.
Ни одна женская солистка не тронула, не впечатлила (ну кроме мощью голоса),
в отличии от мужских солистов. Были и танцевальные вставки. И чисто
музыкальные, которые мне, похоже, больше всего понравились. Сходить,
считаю, стоит -- удовольствие получаешь.
http://blog.cr.yp.to/20250423-mceliece.html
DJB рассказывает о том, насколько всё сложно, не красиво и фигово и
странно с NIST стандартизацией алгоритмов.
На днях коллега был удивлён количеству разнообразных систем установки
пакетов для Python. Кроме pip это всякие poetry и прочее. Сегодня я
полчаса пытался создать venv внутри которого хотя бы python-dateutil
установить, плюс ещё несколько зависимостей на чистом Python.
Устанавливал из полностью замороженного состояния pip-а. На двух разных
версиях Python. Даже предварительно устанавливая setuptools. Ничего уже
не сделать: упорно всё равно пытается установить setuptools новейших
версий, падает на этом, ничего не ставит. Пришлось править код проекта,
удалять временно часть зависимых библиотек, другие ставить чисто руками,
третьи подкладывать через PYTHONPATH. Если нет директории с полным
слепком всех пакетов, то через PyPI это уже почти нереально что-то
установить. В полнейшей деградации вся экосистема. Не проверял только на
супер-пупер новейших версиях. Но зато хотя бы никто не пытался
подтягивать Rust зависимости.
В кои то веки вспомнил про "Женщина. Учебник для мужчин"
Как-то недавно одна знакомая рассказывала, как готовила в общежитии еду,
чтобы с ней и с нерешённой задачей из института пойти к знакомому за
помощью. Я думал что давно уже меня не могут задеть или возбудить старые
воспоминания подобные темы. Но смогли. Опять я вспомнил, что аж два
диплома делал девушкам (оставалось только оформить, всякую воду с ОБЖ и
экономической частями добавить), но никогда никто не благодарил (ну ok,
одиночное "спасибо" всё же было), или тем более превентивно не приносил
еду или что-либо подобное. А тут чувак ещё ничего не успел сделать, не
выставил условия, но уже в profit. Теперь то, кстати, понимаю: если я
уже и так всё сделал, то смысл меня благодарить, ибо и так всё получено.
Когда были отношения с бывшей, то я был уверен, что красиво одевалась
она, в том числе, чтобы типа и мне тоже нравилось, как парню.
Самоуверенности, конечно, хоть отбавляй. Уже после её измены, начинало
доходить, что одёжка то запросто и для мужчины была, но для другого.
Сколько то лет назад вроде ко мне проявляла одна особа симпатию, но там
вообще не понятно что в голове у неё было, параллельный мир и не долго
всё продлилось, относительно шустро прекратившись, более не пересекаясь.
Умён, не умён -- роли вообще никакой не играет (про ум просто чаще всего
женщины говорят как о наиболее важной черте). Видел я как и на умных
вешаются, так и умнейших полностью игнорируют. С дебилами не связывающими
два слова вместе -- вот у них, судя по тому что вижу на улицах, всегда
есть пара. Если ли хорошая (по зарплате) работа или нет -- тоже никакой
роли не играет. Ну если речь не про очень высокооплачиваемую. Когда то я
получал больше чем все друзья вместе взятые. Результата никакого. Сейчас
я меньше многих junior-ов получаю (судя по информации из первых уст), но
и не пытаюсь кому-либо понравится. Хорошо ли одеваешься или нет -- тоже
роли не играет. Я не один год ходил только в костюмах. А сейчас вот на
днях решил новые джинсы всё же открыть, ибо на старых появилась уже
дырка :-) (но до дырки то они же выполняли свою функцию!). Если я забил
на то, чтобы кому-то понравится, то почему же в прошлом году позвал
замуж одну? Опять, чтоб её, лютая самоуверенность, хотя не одну неделю
обдумывал всё и прикидывал.
И вот и вспомнилась сабжевая книжка. Где чётко мужчин можно разделить на
тех, кому "дадут" (не обязательно секс) за-просто-так; кому дадут в обмен
на что-то (еду за помощь, с чего заметка моя и мысли и начались); кому
не дадут ни при каких обстоятельствах (разве что если с головой не лады
или какие-то безвыходные ситуации с вопросом о жизни/смерти). Изначально
книжка мне понравилась. Потом я, скорее, считал её далёкой от реальности,
где всё не так просто и однозначно. Сейчас что-то из ностальгии вновь в
неё посмотрел и... её точно мне надо было прочитать до знакомства с
бывшей, где на каждой второй строчке указывалось насколько всё было
паршиво и не правильно.
Но спустя уйму лет с момента создания этого "блога", у меня уже
преобладают другие мысли по поводу (сильно) теоретически знакомств с
женщинами. Практически сразу возникает в голове напоминание о факте
моего возраста. Ещё немного и мне уже будет сорок! А (не)понимание
женщин у меня на уровне 13-летнего пацана, у которого после общежития (в
которых я никогда и не был) в институте уже никаких проблем не было бы.
И когда мне друзья предлагают познакомиться со знакомыми выпускницами
институтов... я больше удивляюсь как им вообще такие идеи приходят в
голову? Я же не рок- или теле- звезда, чтобы было нормально иметь
разницу в возрасте в полвека :-) Объективно это полнейшая фигня. Её
сверстники вовсю начинают (или уже вовсю идут) подниматься на холмы
успеха и развития, тогда как после сорока у большинства, насколько мне
кажется, в лучшем случае будет только плато стабильности, после которого
всё равно только спад возможностей и умений.
Ну и в целом к женщинам у меня с начала СВО ощутимо поубавилось
уважения и спокойного отношения. Так как, видя как они обсуждают тех,
кто буквально их жизни защищает, можно только порадоваться что такой вот
нет дома, ибо не представляю как с ней жить то или разговаривать можно
будет. И детей страшно оставлять, ибо воспитает таких, что уж лучше бы и
не рождались. Видимо, феминизм у нас настолько развит в стране, что
(настоящих, которые защитники) мужчин у нас настолько презирает женский
пол, что они только и ждут как получат выплаты за гибель мужа. Он же
просто очередным будет, вообще ничего не стоящей (кроме выплат) единицей.
Конечно, не все такие, даже не уверен что больше половины, но расслоение
между "отвратительными" и "нормальными" женщинами ещё шире стало в моей
призме мировосприятия.
А ещё мне из года в год сильнее и сильнее кажется, что с молодёжью не
выйдет найти общий язык в быту. Люди всю жизнь росли со смартфонами и
сплошным проприетарными ПО и удалёнными сервисами в Сети. Всё на свете,
каждая мысль ими сразу же вбивается в Google/whatever. А теперь в LLM
системы, судя по всему. По моему это всё кардинально иное мышление
должно быть, принципиально иные принципы решения проблем/задач. Плюс
иные "протоколы" общения/взаимодействия с людьми (ну кому в голову может
прийти мысль об отправке голосовых сообщений!? (исключая инвалидов, тут
всё оправдано)).
Добавил аутентифицированное шифрование на основе публичных ключей
http://www.keks.cypherpunks.su/Authcrypt.html
Аутентификация отправителя зашифрованного сообщения без подписи мало кем
предоставляется. Ни в CMS, ни в PGP такого нету например. А было бы
полезно: может работать быстрее, нет non-repudiability свойства, которое
кому-то может не нравится.
По идее, достаточно просто сделать ещё один DH между статическими
ключами (DH(s,s)), а не только один DH(e,s). Засада в том, что у меня
не-ГОСТовые KEM-ы -- гибридные, из традиционных и постквантовых
алгоритмов. А PQC KEM-ы не предоставляют API которым бы можно было
выполнить аналог DH(s,s). Поэтому решил его делать без участия PQC, ведь
это не повлияет на конфиденциальность, только аутентификацию, причём
deniable/repudiable. Результат просто подмешивается HKDF-ом.
Но это всё просто. А вот в чём настоящая засада, так это проблема
нескольких получателей. Дешифровать сообщение может каждый из
получателей. Соответственно и перешифровать сообщение, так как CEK
ключ же один на всех.
Начитался про всякие message franking, про key commitment (снова), про
committing AEAD и ccAEAD (compactly committing). Многие статьи и люди в
рассылках предлагают использовать ccAEAD, commitment которого использовать
в KDF при шифровании CEK-а. Всё это красиво, да, но не применимо к тому
как KEKS/CM шифрует: потоково, разделяя на независимые 128KiB блоки.
В итоге остановился на практически простейшем решении, как это также
сделали и в Saltpack (f9e33af95af9179a24c5539e9e9661d60d0a3c0b).
Добавлять MAC над хэшом от шифротекста для каждого получателя по
отдельности. Хэш от шифротекста -- чтобы один раз его можно было дорого
посчитать, а MAC уже делать над короткой строкой, чисто оптимизация.
Пока всего этого ещё нет в коде, но хотя бы практически поставлена точка
над этой единственной оставшейся задачей. Месяцами время от времени
обдумывал и прикидывал всякие за и против.
https://norton.fandom.com/ru/wiki/Королева_Солнца_(серия_книг)
Лёгкое прелёгкое приключенческое чтиво. В конце, правда, уж
слишком по-детски наивное, чуть оставляя осадок. Но в целом
с большим удовольствием всё прочитал.
Какие CA доверяются создателями web-обозревателей?
В рассылке задали вопрос: Why aren't any browser makers also CA's?
На что дали исчерпывающий ответ:
Apple is a CA, at least according to themselves.
Google is a CA, at least according to themselves, Microsoft and Mozilla.
Microsoft is a CA, according to themselves, Apple, Google and Mozilla.
Mozilla is the only one that doesn't seem to be trusted as a CA by any
of the major browser makers, but I won't rule out that I'm searching
for the wrong thing.
I'm pretty sure as someone controlling a host name you can get an
actual TLS certificate at least from Google.
Apple's list of currently trusted CAs: https://support.apple.com/en-us/121672
linked from https://support.apple.com/en-us/103272
Google's: https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store/root_store.md
linked from https://pkic.org/ltl/
Microsoft's: https://ccadb-public.secure.force.com/microsoft/IncludedCACertificateReportForMSFT
linked from https://learn.microsoft.com/en-us/security/trusted-root/participants-list
Mozilla's: https://ccadb.my.salesforce-sites.com/mozilla/CACertificatesInFirefoxReport
linked from https://wiki.mozilla.org/CA/Included_Certificates
https://blog.trailofbits.com/2025/04/18/sneak-peek-a-new-asn.1-api-for-python/
Ну вот как относится к авторам (судя по всему) библиотеки декодирования
DER, но которые заявляют, что: DER is a self-describing and
self-delimiting encoding: A given DER message can be fully and soundly
parsed without prior reference to a schema or format description beyond
the encoding rules of DER themselves. Можно только одно сказать: они
вообще не работали хоть сколько-то широко с DER-ом, с ASN.1 и выдумывают
полный бред. Достаточно встретиться с массой IMPLICIT TAG-ов со
структурами и фиг твой декодер справится. Именно поэтому в PyDERASN есть
--allow-expl-oob флаг, который позволяет пытаться декодировать "выходящий
за пределы" (якобы) EXPLICIT TAG и пытаться влезать дальше по структуре.
https://habr.com/ru/companies/ru_mts/articles/902244/
как заявляет автор статьи. Типа программист. Который сравнивает скорость:
из БД извлекается 100 тестовых пользователей; создается экземпляр класса
для каждой строки, преобразуя объект datetime в строку формата ISO и
шифруя одно из полей с помощью шифра Цезаря; результат сериализуется в JSON.
Это просто прекрасно сравнивать при наличии СУБД, и при наличии JSON в
Python, который сериализуется Сишным кодом. Ну а если применить Numba,
то Python становится сравним по скорости!
Мне удалось разобраться с циклами, функциями, пакетами, но впереди
еще постижение интерфейсов, работы с файлами и параллелизма.
На самом деле, человеку ещё уйму просто базовых вещей по программированию
познавать. И ещё понять тот факт, что в Go придётся не "параллелизм" изучать,
а конкурентность.
https://sphincs.org/
К KEKS/CM форматам добавил возможность создания подписей SPHINCS+
алгоритмом, который стал стандартом SLH-DSA (stateless hash-based
digital signature algorithm) в NIST, наравне с ML-DSA.
Чем мне очень понравился SPHINCS? Тем, что он полностью основан
исключительно на хэш-функциях и я в общем и целом понимаю его
устройство, понимаю принцип работы. Не в таком понимании как
эллиптические кривые и простое доверие что всё так и есть, когда
объясняют на пальцах, а такое, что я прям осязаю что вся сложность
задачи сводится к свойствам хэшей криптографических. Ну и в его
создании участвовал DJB.
Активно пытаются стандартизовать XMSS алгоритм подписей. Тоже всё на
хэшах, но он stateful -- каждая подпись это изменение состояния
"приватного ключа". Что не шибко то удобно, но зато точно работает. Так
вот SPHINCS это как-бы надстройка над XMSS, делающая его stateless. Но
ценой вычислительных мощностей и размера подписи.
Если взять самый параноидально безопасный вариант SPHINCS+: 256s-robust,
то создание ключевой пары, создание и проверка подписи занимают
несколько секунд. Но позже в SPHINCS+ предложили "simple" вариант,
который в разы легче по затратам процессора и более чем удовлетворяет
безопасностью. SLH-DSA выбрал вообще только этот вариант.
"256f" ("s" -- small, "f" -- fast) вариант гораздо более быстрее, ценой
размера подписи большим на 10 килобайт (~30 vs ~40). Это компромисс, но
я выбрал более быстрый вариант, ибо место довольно дёшево и это не
вопрос 1K (который влезет в один IP-пакет) vs 10K.
Подпись можно делать детерминированной (без использования случайных
данных) или randomised. Изначально я слепо выбрал детерминированную, ибо
это убирает требование наличия хорошего PRNG. По аналогии с
детерминированными подписями в Ed25519 vs ECDSA/ГОСТ. И SPHINCS+ и NIST
намекают, что randomisation полезно для борьбы с fault-injection атаками.
Но позже я осознал свою неправоту: хороший PRNG вовсе не требует. Даже
если PRNG будет константой, то это просто станет детерминированной
подписью, без каких-либо рисков для утечки приватного ключа. Поэтому он
либо ничего не даст (если PRNG плохой), либо приятные свойства против
fault-injection атак.
Да, размер подписи большой, но всё же более чем пригодный для применения
на практике, плюс точно очень безопасный, даже против квантовых
компьютеров. Пока мне видится использование SPHINCS+ (или SLH-DSA
варианта) как предпочтительного для долговременных документов. Не там
где подпись используется для интерактивной аутентификации (TLS тот же),
а для подписей рядом с файлами. И то, для интерактивных протоколов стоит
не подписи, а DH использовать.
Уже со вчерашнего дня. Теперь у меня остались только stargrave.org,
cypherpunks.su и nncpgo.org домены, более никаких .ru. Содержимое
cryptoparty.ru переехало на cryptoparty.cypherpunks.su, но с уходом
всяких либералов, экстремистов, оппозиционеров и сепаратистов,
криптопати больше как-то никто и не устраивает :-)
На работе провели сабж между службами. На 90% всё сплошные фильмы времён
СССР, где я не силён, как и более молодые коллеги. Я где-то 1/3 или 1/2
вопросов мог бы ответить. Коллеги бы справились и без меня, но кроме
одного вопроса, где я дал правильный и уверенный ответ на тему фильма
"Убить дракона" (afef111c5fedb37d00145abaedc2ff3feed28418). Заняли
второе место с отрывом в одно очко.
https://habr.com/ru/articles/900778/
Какие критерии успешного обновления ПК? Как гласит статья:
* "Веб-браузер больше не тормозит" -- вот да, теперь surf-ить просторы
Паутины это уже как Crysis запустить по ресурсам. Безумие, которое не
останавливается
* "Однако "мгновенной загрузки любой программы" о чем я мечтал нету.
Софт хоть и стартует пошустрее, но ждать приходится все равно ощутимое
время" -- я поэтому и люблю адекватное ПО и не переношу ожидания или
задержки при интерактивное работе
CA/B форум решил сократить срок действия сертификатов до 47 дней
https://dxdt.ru/2025/04/14/15371/
https://www.opennet.ru/opennews/art.shtml?num=63069
Как верно заметил автор:
Сертификаты превращаются в квитанции, разрешающие доступ. Что-то
вроде тикетов в каком-нибудь Kerberos. Короткие сертификаты
означают, что веб-узлам придётся плотно привязаться к внешней
централизованной системе. Всякий веб-узел должен будет постоянно и в
автоматическом режиме отмечаться на центральном сервере, который
станет выдавать (или не выдавать) подтверждение, что браузерам всё
ещё разрешено к этому веб-узлу подключаться.
А так как WWW рулится де-факто всего одним CA, под юрисдикцией США, то у
них (ещё более) офигенный инструмент цензуры.
Идея emoji для меня выглядит полнейшим безумием, в контексте Unicode.
Это же не просто символы/картинки, а реально штуки которые на лету
рендерятся и могут комбинироваться между собой. Твёрдо убеждён что этому
не место в Unicode. А многие превращаются из-за этого в каких-то макак
безграмотных, которые только символы могут друг другу показывать, и
гадай что они хотели своими ребусами сказать.
Графический Links у меня не рендерит их, как и многое из Unicode тоже.
Не проблема. А вот терминал прекрасно отображает. Не нравится мне это.
Надо пропатчить терминал.
К сожалению, emoji не расположены в одном диапазоне значений Unicode.
Поэтому пришлось написать Perl программку, которая парсит emoji-data.txt
из Unicode стандарта, интерпретирует диапазоны, выводит готовый Си код с
полным списков всего что касается emoji. А сам терминал bsearch-ем
напротив этого списка проверяет выводимые руны и заменяет на невалидную,
если нашёл emoji. Благо, код в suckless terminal мало и место для
вставки находится моментально.
Как-то на работе во время парного программирования, у человека git stash
выдавал ошибку: мол, обломались, ничего не смог сделать. Эмпирически
выяснили, что если git stash делать в SHA256 репозитории, то всё плохо.
Версия Git 2.43.0. Не разбирались до конца в чём же дело, но понадеялись,
что это просто бага в самой 2.43 версии. Собрал сегодня её и никаких
проблем не обнаружил. А так как у человека самая обычная vanilla Ubuntu,
почти голая, без настроек персональных, то, судя по всему, это именно
они умудрились как-то собрать Git таким образом, что поломали stash. Ну
и как под этим разработчику работать?
Услышал тут мнение от человека, который когда-то проходил наши
собеседования на начинающего разработчика. Он был на собеседованиях в
Сбере, в Яндексе, обсуждал со своими знакомыми, тоже куда-то
устраивавшимися.
Я был полностью уверен, что наши собеседования чрезвычайно просты и,
скорее, даже постыдно несерьёзны и запросто отталкивающими от того, что
мы мало чего спрашиваем и проверяем. Опыта в нашей команде не много по
этому вопросу.
Оказалось, что для стороннего человека они были полной жестью и
ужасом в плане сложности. Выходя после собеседования, у него
криптография чуть ли не из ушей лилась (как он примерно так и
выражался). Вроде приходил устраиваться на место Python-разработчика,
но с ходу начали спрашивать то по сетям, то по Unix-ам, то по базам
данных, то по архитектуре распределённых решений. И только после этого
начался Python. А человек готовился только к нему, ничего иному. В
Сбере, мол, вопросы только по нему и были.
Я был реально удивлён, совершенно не ожидая, что всё как-раз наоборот,
чем я представлял.
https://habr.com/ru/news/899812/
Типа он отъедает половину всего времени работы декомпрессора. А я по
статьям из dffa894abeab4eaec509b95af9d23b51e4e0f844 уже наслышан, что
автору LZ4/Zstandard пришлось изобретать более быстрый алгоритм контроля
целостности, ибо CRC32 слишком медленным оказался.
https://habr.com/ru/articles/898958/
Ох, насколько же у меня всё было похоже на описанное в статье! Правда,
Mandrake был 7.x, на двух дисках. Запомнилось, что там применялся EGCS,
вместо чистого GNU GCC. Ну и у меня AMD K6-2 III был, никогда никаких
Pentium-ов.
http://lists.cypherpunks.su/archive/nncp-devel/87ecy76f5v.fsf@complete.org/T/
https://lobste.rs/s/gzuzyp/email_over_nncp_via_exim
Тут люди чего-то изобретают, создают какие-то сети почтовые поверх NNCP.
Вот только ни одна ссылка с salsa.debian.org у меня не открывается.
Поэтому вообще никаких деталей не знаю.
http://www.keks.cypherpunks.su/Schemas.html
С самого начала появления YAC/KEKS проекта я откладывал такую тему как
валидация структур данных. Сам по себе кодек должен быть schemaless: для
декодирования ничего дополнительного не нужно. Но схема всё же нужна для
задания какие поля, какого типа, какой длины, каких значений должны же
быть. Для JSON есть JSON Schema как пример.
Соответственно, нужно и понять как задавать схемы, а потом понять как их
применять и валидировать данные напротив них. JSON Schema или CDDL,
конечно, не вариант для Си -- слишком тяжеловесно. Генерировать код
декодирования или проверки из этих схем -- я не потяну такую задачу,
уверен что не простая, особенно когда, в отличии от ASN.1/protobuf,
порядок следования элементов не всегда априори известен.
Более чем полгода откладывал, но менее чем за неделю всё придумал и
реализовал. 90% всех проверок -- очень однообразны и просты. Можно
значит написать какие-то простые правила описывающие как проводить
проверки. Так сказать, сделать некую validation (virtual) machine,
которой управлять через подаваемые команды валидации. Предполагая, что
сама реализации такой верификации по командам/правилам/спецификациям
должна быть очень простой для реализации даже для Си.
В итоге реализовал подобное для Си и для Go. В Си это, если убрать
огромный код связанный с проверкой точности TAI полей и всякие
красивости поясняющие где и какая валидация не прошли -- это займёт
где-то 200-300 строк кода.
На вход нужно подавать команды валидации. Как их передать, как
закодировать? Конечно же использовать сам KEKS! В итоге имеем функцию
валидации, на вход которой подаются декодированные произвольные данные и
декодированные схемы. Каждая схема это просто последовательность команд
валидации.
Некоторые команды принимают n-ое кол-во аргументов, какие-то без них
вообще. Команды реализовал: ". k" -- "взять" элемент словаря или списка;
"E" -- проверить что взятый элементы существует; "!E" -- не существует;
"*" -- применить последующую команду для каждого элемента выбранного
словаря/списка; "T t0 [t1 ...]" -- проверить что тип выбранного элемента
находится в множестве (t0[, t1 ...]); "> n" -- проверить что значение
int или длина списка/словаря больше указанного числа; "< n" -- меньше;
"S s" -- проверить выбранный элемент напротив схемы s; "TMP p" -- time
maximal precision, проверить что точность выбранного поля со временем не
превышает указанную; "= v" -- проверить что выбранная строка равна v.
Например проверка такой CDDL схемы:
ai = text .gt 0
fpr = bytes .size 32
our = {a: ai, v: bytes/text, fpr: fpr, ?comment: text}
По сути это такой встроенный интерпретатор. Но достаточный для 90%+ всех
задач связанных с проверкой напротив схем. А если чего сильно будет не
хватать, то можно и новые команды добавить.
Как их генерировать? Я написал реализацию на Tcl, в которой множество
вспомогательных коммандочек имеется. В итоге содержимое файла с полным
описанием правил валидации публичного ключа (который может быть
подписан, который является и cm/signed структурой):
SCHEMAS {
av {
{HAS a}
{TYPE= a {STR}}
{!EMPTY a}
{HAS v}
{TYPE= v {BIN}}
}
{HAS sub}
{TYPE= sub {MAP}}
{!EMPTY sub}
{TYPE* sub {STR}}
}
}
Что, с моей точки зрения, не сильно и не существенно отличается от
описаний ASN.1 или CDDL. Я их писал просто с ходу, без запинок, без
особых раздумий. В самой Tcl утилитке, например STR= (убедиться что k
является строкой со значением v) описан вот так:
где более низкоуровневые TAKE, TAKE, EQ команды описаны так:
proc TAKE {v} {
if {[string is digit $v]} {set v [list INT $v]} {set v [list STR $v]}
subst {{LIST {{STR .} {$v}}}}
}
proc EQ {v} {subst {{LIST {{STR =} {STR $v}}}}}
proc TYPE {vs} {
set l {{STR T}}
foreach v $vs {lappend l "STR $v"}
subst {{LIST {$l}}}
}
что затем уже через LIST/STR/INT команды кодируется в KEKS.
Соответственно, пишем на Tcl подобные схемы, преобразуем их в KEKS
файлы, через go:embed встраиваем во время компиляции в Go код, где
декодируем и передаём в функции валидации. Аналогично и для Си. А так
как схемы, в общем то, являются самыми обычными Tcl программами, то там
всякого можно понапридумывать для сокращения писанины.
По моему вышло здорово. Пока функции валидации ещё не покрыты тестами,
но это явно не сложная задача, ибо команд не много. Зато теперь можно
настоящие схемы писать, а не то что я на сайте показываю, чисто для
человеков. И свои Go утилитки у меня уже используют это всё для
валидации файлов с ключами, подписанных и зашифрованных контейнеров.
Я тут далёк от всей темы, но не Тьюринг-ли полный у меня язык вышел?
А то наслышан, что нечаянно сделать подобное -- относительно легко. Но
это не должно быть проблемой, ибо не предполагается что схемы из
недоверенных источников могут приходить.
Добровольно-принудительно на работе нам выдают банковские карты одного
банка. Говорю что не использую сотовый телефон, могу дать городской.
Обращаются к старшей: мол, тут человек без сотового. На меня оборачиваются
пять человек, вся комната. "Как же так, ни один банк без сотового не
выдаст карту". Отвечаю, что "со Сбером проблем не было". После этого
сказали, что пускай напишу городской, выдали карту. Хотя там в анкете
явно есть пункт "нет мобильного телефона".
Пару недель назад я криво подстригся. Сделал одну глупость и у меня
что-то типа чёлки появилась. Конечно же временно, пока волосы на
несколько сантиметров не дорастут. Был тут на дне рождения у друзей и
мне сказали что с ней я похож на Винсента (Траволта) из Криминального
Чтива (действительно так и есть) и помолодел лет на пять.
https://16-bits.ru/%d0%b0%d0%bd%d0%be%d0%bd%d1%81-01-04-25/
Из-за блокировок со стороны РКН и Google, а также недостатков других
альтернатив, 16-bits.ru будет делать выпуски на картриджах для Game Boy,
что крайне удобно и просто.
Sergey Matveev [Mon, 31 Mar 2025 18:59:00 +0000 (21:59 +0300)]
Клоны рядом с Арбатом
С мамой мы сильно заранее приехали на оперу
(40013dd3cad3dc129608c583c3ca141c5eb760e5) и поэтому погуляли по улицам
вокруг, недалеко от Арбата. На улице не мало стоит столиков рядом с
кофейнями, за которыми молодые люди в основном. Секунд десять мимо них
шли, где-то дюжина парочек за ними сидит. И абсолютно все девушки за
ними полностью на одно лицо. А точнее так: за их пухлыми надутыми
губищами полностью теряется всё остальное лицо. Одно и то же выражение
лица, одни и те же омерзительные губищи, один и тот же неприятный и
отталкивающий взгляд, одни и те же причёски. Прям выход с конвейера
клонов. Где-то видел коллаж из жён "рэперов" -- да проще Вальдо найти,
чем отличия в этих жёнах, как-будто клонов с одной и той же пластиковой
куклы. Вот тоже самое и на улице было.
Sergey Matveev [Mon, 31 Mar 2025 18:35:37 +0000 (21:35 +0300)]
Конец театров
https://www.m24.ru/articles/kultura/22112024/745667
Пару недель назад вступили новые правила: в театры и на концерты теперь
билеты приобретаются только с вбиванием паспортных данных и предъявлением
оных при входе. У нас билеты пока были приобретены заранее и без этих
правил, но в выходные вот видели как на входе в оперу сверяли паспорта.
Это настолько вопиюще глупо, что смириться или согласиться ходить по
таким правилам я не согласен. С какой стати я должен отчитываться и
заранее сообщать недоверенным лицам о том, куда я хожу развлекаться?
На каждом шагу орут о безопасности персональных данных, но теперь ещё и
театрам с концертами надо их будет сливать. Говорят, что для борьбы со
спекулянтами. Там где это проблема: там и думайте как решать. А я ни
разу в жизни никуда не ходил, где нельзя бы было в кассе театра/зала
приобрести билеты без проблем.
Для меня это означает конец походов по таким местам. Надеюсь что безумие
и маразм не дойдут до клубов, где вообще нет посадочных мест, где почти
вся моя музыка и играет. Благо, успел прослушать все доступные оперы Вагнера.
Sergey Matveev [Mon, 31 Mar 2025 18:31:01 +0000 (21:31 +0300)]
Сходил на оперу "Иоланта"
https://ru.wikipedia.org/wiki/Иоланта_(опера)
После пятичасовой Вагнеровской "Тристан и Изольда", Иоланта на полтора
часа с антрактом -- пролетела вмиг. По началу было скучно, но когда
пошли мужские арии, то уже начало нравится. Были в Геликон-опере, где
все костюмы были под современные переделаны. Когда показывают гламурных
девочек, но поют про что-то типа пряжи -- это вызывает диссонанс. Нам с
мамой эта современность костюмов/декораций не понравилась. Например в
Новой Опере на Лоэнгрине -- рыцарь был в костюме-тройка, но это не
бросалось в глаза, не вызывало диссонанса, не сбивало. Музыка -- ну типа
нормально, но не более. Мама сделала окончательный вывод: с Вагнером
пока ничто не сравниться.
Sergey Matveev [Fri, 28 Mar 2025 13:34:27 +0000 (16:34 +0300)]
Починил скорость на VPS для IPv6
Перейдя на другой VPS провайдер для IPv6 Интернета, с самого начала у
меня с ним только одна проблема: низкая скорость ко мне, всего десятки
килобайт в секунду, или пару сотен если несколько потоков параллельно.
Отдача трафика на мегабайтах в секунду, проблем нет.
Время от времени пытался выяснять в чём проблема, почти всё время про
себя ругаясь на ТСПУ, который мне наверное всё и урезает, чтобы VPN не
использовал.
Я пробовал WireGuard. Пробовал просто IP-in-IP туннель. Пробовал всё это
пропускать уже поверх IPv6 через вторую VPS-ку. Все автономные системы
российские, все адреса тоже, сети тоже, никаких зарубежных. fetch ISO
образа с mirror.yandex.ru на VPS-ке идёт быстро, а через неё медленно.
iperf3 показывает, что скорость внутри VPN-а между мной и самой VPS-кой
хорошая. Но как только "выхожу" куда-то наружу, то на вход проседает.
Думал, что это DPI так shape-ит трафик. Не нашёл ни одного готового
решения чтобы UDP трафик пускать через TCP-прокси. Ну или плохо искал
или что-то сложное попадалось. Хотел завернуть UDP пакеты WireGuard-а в
него. Написал на Go свой, на пару экранов кода. Просто перед содержимым
UDP пакета 16-бит длины добавляется. Не помогло. Решил шифровать первые
8-байт Blowfish (он реально вполне быстрый), а в начале делать простой
challenge-response authentication на основе хэша. Ну чтобы скрыть явные
инкапсулированные длины UDP пакетов проксируемых. Не помогло. Решил
ChaCha20 шифровать полностью весь пакет, так что TCP трафик полностью
становится неотличимым от шума. Не помогло. Решил дополнять каждый пакет
до большого фиксированного размера, чтобы было меньше корреляций с
размерами проксируемых пакетов. Не помогло. Стал генерировать
константный по кол-ву пакетов трафик: или у меня срабатывает таймер и
отправляется пустой (но фиксированный по размеру всё равно) пакет, либо
у меня есть UDP для отправки. Вижу что 1.5MBps трафик в обе стороны
идёт, iperf3 показывает симметричную скорость ограниченную туннелем. Ну
вот уж полностью стала отсутствовать корреляция между этим трафиком и
входящими пакетами, которые через туннель выйдут наружу. Тоже не помогло.
Благо, что каждая подобная правка это вопрос получаса работы at most,
ибо на Go, который даже в top не особо будет заметен.
Подумал что может быть hop count в IP пакетах как-то влияет? Поменял в
разные стороны на VPS -- не помогло, на её скорость (fetch .iso на ней)
никак не отражается.
Ну не может DPI как-то находить корреляции между входящим plaintext
трафиком и константным шумом. Кто ещё может как-то "вредить"? Начал
грешить на саму VPS-ку. Пошёл даже ядро пересобирать, подумав, что может
быть они какие-то патчи наложили мешающие делать VPN? До установки
нового ядра не успел дойти.
Вот где можно/нужно вставить sleep, чтобы VPN тормозит? По сути просто
навсего в forwarding plane. Никаких проблем если IP пакеты не
затрагиваются forwarding-ом. Уже почти сдавшись, решил поискать банально
"freebsd slow forwarding" и среди первых ссылок есть задача с темой тип
"медленный forwarding в xen". У меня, правда, KVM. И там рекомендуют
отключить аппаратную проверку контрольных сумм на виртуальном сетевом
адаптере. Я всю жизнь сплошь и рядом видел обсуждения и порицания
аппаратных ускорений. TSO и LRO обязательно надо отключать для
маршрутизатора -- это у меня с самого начала было. А вот из своих
рекомендаций я убрал отключение проверки контрольных сумм, ибо давно не
находил на них ругательств, вроде бы они не проблема. Поэтому забыл.
ifconfig vtnet0 -rxcsum -txcsum и скорость скачивания через VPN более
чем в сотню раз повышается, проблема решена. И стыдно, что забыл про
такую банальную штуку, но зато сколько софта понаписал, плюс очередной
неотличимый от шума протокол, даже квантовоустойчивый (ибо PSK :-)). Но
ни на одной VPS у меня не было такой проблемы. Какой-то не такой KVM у них.
Sergey Matveev [Mon, 24 Mar 2025 15:26:28 +0000 (18:26 +0300)]
Carcass "Reek Of Putrefaction" -- рождение goregrind
https://en.wikipedia.org/wiki/Reek_of_Putrefaction
С альбомом знаком давно. Так давно, что ещё не очень был наслушан
всякого горграйнда. Прослушал сейчас -- понимаю почему Carcass считают
прародителями этого жанра. Уже в 88-ом году всё было придумано ими. И
огромное количество каверов на всё их творчество исполняют.
Sergey Matveev [Mon, 24 Mar 2025 08:42:23 +0000 (11:42 +0300)]
Распараллеленный BLAKE3
https://github.com/BLAKE3-team/BLAKE3/releases/tag/1.7.0
https://www.linux.org.ru/news/opensource/17918577
В новой reference версии BLAKE3 на Си появилась возможность сборки с
oneTBB, позволяя распараллеливать вычисления. 4-х гигабайтный файл за
доли секунды у меня хэшируется теперь. Но их example программа tbb
версию использует только для mmap-нутых данных.
Sergey Matveev [Mon, 24 Mar 2025 07:19:39 +0000 (10:19 +0300)]
Greylisting работает, вновь убедился
Пока я общался с VPS провайдерами (f52906a5e4067b2bfc45c054c1cd222dae4d223a),
то отключил greylisting для ускорения переписки с раннее незнакомых адресов.
Больше недели был без него, затем больше недели как включил обратно. Разница
очень ощутима! В разы кол-во просачиваемого спама сокращается. И заметил, что
без greylisting спам сообщения очень большого размера (1-2 мегабайта) могут
прилетать.
Sergey Matveev [Mon, 24 Mar 2025 06:09:05 +0000 (09:09 +0300)]
Подстановка мусора на www-сайтах, недоступность ресурсов
https://www.opennet.ru/opennews/art.shtml?num=62925
На прошлой неделе заметил, что пара блогов перестала обновляться.
Увидел, что они начали отдавать непонятную тарабарщину со случайными
значениями в заголовках. Не псевдослучайный шум, а наборы бессвязных
слов. А также видел обсуждения/предложения в других блогах о том, чтобы
подсовывать паукам зацикленные перенаправления или, вот, мусор. Плюс вот
новость о том, что всякие свободные проекты на серверах своих инфраструктур
вводят всякие ограничения и проверки, блокирующие целые сети, если есть
подозрения на то, что это пауки от ИИ. В рассылке Debian видел жалобы на
невозможность открыть какие-то ранее доступные их ресурсы. GNOME, судя
по новости, так вообще у себя решили заставлять пользователя (а точнее
его обозревателя) скачивать программу для вычисления proof-of-work.
Ну и вот пара блогов решила, что я тоже робот, хотя я не понимаю на
каком основании. Качается Atom-лента вызовом cURL, с честным
User-Agent-ом, говорящим что это feeder-качалка. Может быть, там
поменялась ссылка на блог, которая должна находится в robots.txt? Но я
же хочу штатно зайти на сайт обычным обозревателем, чтобы увидеть эту
новую ссылку, но уже главная выдаёт бредятину. Вынужден удалить эти
блоги и забыть о них.
Мой новый VPS провайдер работает сильно иначе чем предыдущий. Скорость
скачивания через него, как отмечал ранее, десятки килобайт в секунду.
Если это BitTorrent UDP трафик, то может превышать мегабайт. Плюс то ли
он весь Cloudflare блокирует, то ли Cloudflare блокирует его сеть, то ли
это блокировка ИИ-like адресов с их стороны и мой переезд на VPS совпал
со всеми этими пертурбациями. То ли он блокирует некоторые BitTorrent
сайты, находящиеся за Cloudflare, которые вроде бы у нас типа запрещены.
Но я уже и прежде писал, что всё что размещается за ними, почти
наверняка не будет доступно (9ec8af5c6c0a3d586e33640842652801f20d6f53, 5b16fb4fccf7e8062956aa169aec927ae4349a6d, 3377284e1f2e5c1db69e100ec32f8f5a92a08cb4, 6bbbada632a3727fa74995fa8e1700d389688ac9).
В комментариях на OpenNet понравилось: сайты, чтобы их не парсили
автоматизированно, добавляют уродскую разметку. Затем добавляют CAPTCHA,
которую распознают. Затем помещают за Cloudflare. Теперь вот уже
применяют PoW. Смотрят напротив GeoIP базы данных. DNSBL. Абсолютно
точно внедрят обязательную авторизацию через ЕСИА. Что дальше?
Использовать квалифицированную ЭЦП? Ввести OTP из SMS, двухфакторно же.
Или, как мне уже один VPS писал, с web-камерой связаться с ними для
идентификации. А ещё "Beat the DarkSouls boss on 512x512 window on WASM".
Хотя ведь уже была новость о том, что CAPTCHA придумали со встроенной
мини-игрой. И я наслышан про сложность Dark Souls-like игр.
Sergey Matveev [Sun, 23 Mar 2025 13:02:49 +0000 (16:02 +0300)]
Сходил на Only Fetish Fest: Black Metal Time
Всё же для меня человечество ещё не придумало в музыке ничего лучше чем
black metal. Много я куда ходил, но не сравнится оно с интересным и
добротным блэком.
В этот раз не было московских групп. Открывали мероприятие, прежде мне
не известные, Уводь из Удомли. Хороший такой блэк, всё по трушному. Уже
на этой группе понял, что не зря выбрался из дома. Не однообразный,
интересный. И, по сути, единственный кого точно можно к этому
направлению в музыке причислить, среди всех выступавших.
Продолжили Cage Of Creation из Суздаля. Два года назад в 91bf686031eb868a0d3b0f5dddcb2db9bf977c9d уже писал о них и ничего нового
не добавлю: интересное и мелодичное. Но к black сложно причислить, лишь
моментами.
Затем шла единственная группа мне известная из Новосибирска -- Olshanoe.
Я не продолжаю удивляться: огромный город, развитый, культурный, но
метал групп из него вообще прям нет, что мне и подтвердил экскурсовод
когда там был. Вокалист представлял группу ставя ударение на втором
слоге. Пожалуй больше всего она мне и понравилась. Очень атмосферная,
почти всё время и спокойная, хотя и элементы быстрого рубилова тоже
присутствовали. Плюс несколько раз вместо электрогитары наяривал их
вокалист на баяне. Более чем его звук сочетается с метал инструментами.
Заканчивали сие мероприятие Passéisme. Полная противоположность
умиротворяющему спокойствию Olshanoe. Сплошное сверхскоростное рубилово
похлеще чем в грайндкоре. С кучей риффов напоминающих русские народные.
Под них активный слэм и шёл. Такой, что буквально ботинки слетали с людей.
Между своими песнями они вставляют спокойные французские медляки
старенькие, под которые брутальные слэмоводы мигом образовывали пары и
вальсировали, заставляя ржать вокалиста.
Перед Passéisme ко мне подошёл какой-то человек и спросил кто для меня
является headliner-ом. Сам он пришёл на Passéisme. Olshanoe ему вообще
не понравилась. Сзади меня я слышал разговоры, что кто-то только ради
Cage Of Creation посетил. Этим мне black (и его смежные направления) и
нравится: он очень разнообразен. Ну и на вкус и цвет -- товарища нет. Я
то точно в восторге от Olshanoe, а на Passéisme, если не поколбаситься,
то не пошёл бы снова.
Прикупил дюжину дисков, футболочку. Only Fetish Fest это прям уже имя
нарицательное интереснейших сборных солянок из музыки, а не повторение
одного и того же раз за разом.
Я думаю, что Vim многих отпугивает тем по началу, что если его
запустить, то увидишь голое окно. И типа... и это всё? В отличии от
приборной панели шаттла как в GUI IDE всяких. Конечно же причина тут
одна: минимум ненужной и явно не запрашиваемой информации. В современных
Microsoft Office же даже делают снимки экрана, показывая чуть ли не с
полдюжины панелей с кнопочками, которые занимают почти четверть экрана
рабочего. Но под капотом Vim скрывается практически самый мощный
редактор текста, инструмент для работы с текстом, коим являются все наши
программы, письма, документация.
Вначале все познают базовые команды по передвижению по тексту и
редактированию. Я уже тебе на словах говорил, что это, как правило,
команда (yank, delete, change, follow, и т.д.), после которой идёт
motion (слово, СЛОВО, внутри слова, предложение, абзац, внутри кавычек,
внутри скобок, и т.д.). Перед этим может идти указание кол-ва повторов
команды. "Удали ка мне три слова с окружающими их знаками препинания".
Если суммарно команд в каком-нибудь Блокноте или IDE от силы 2-3 десятка
наверное наберётся, то в Vim их сотни.
Вместо нажатия "влево, влево, влево, удалить букву, ещё раз", ты будешь
стараться делать "перейди на начало предыдущего слова, удали до его
конца слог". И это нужно для того, чтобы можно было повторить действие,
нажатием точки. Если твоим действием было "удалить букву", то с этим
много не сделаешь полезных повторов, а "удали слово" -- уже будет
актуально для многих контекстов применения. Так начнёшь пользоваться
макросами: это буквально запись твоих действий. Например тебе надо из
конца предложения найти вторую фразу с конца, но которая в кавычках,
переместить её в начало предложения, сменить кавычки на скобочки, и
внутри все слова поменять с camelCase на kebab-case, плюс порядковый
номер в начале строки увеличить на единицу. Всё это будет сделано одним
макросом, в котором каждое высокоуровневое действие у меня точками
разделено в описании. Подобные вещи сплошь и рядом встречаются во время
рефакторинга того же.
Сколько буферов обмена в Windows? Я им конечно пользовался в последний
раз четверть века назад, но вроде бы больше одного у них не стало. В X11
(графическая система в UNIX-ах) их два. А в Vim их больше трёх десятков.
Найди мне среди строк начинающихся с описания вот такого вот класса,
заканчивающихся на docstring в конце класса, строки описываемые такой то
регуляркой, и примени к каждой строке макрос который мы только что
написали в предыдущем абзаце, но при этом оригинальные версии строк
добавляй ка в регистр "m". Всё это делается одной командой в командной
строке Vim. Зачем всё сохраняли в регистр m? Чтобы из него удобно
сформировать changelog для нашего log message коммита, чтобы потом не
выуживать вручную их git diff-а.
Нашли запоминающиеся места в нашем исходном коде, о которых не надо
забывать и быстро между ними перемещаться? В Vim есть метки, по которым
можно как в Wikipedia моментально перемещаться. Вернутся на последнее
изменение? Вернутся на последнее место с которого мы сделали jump из
другого файла? Всё это пара нажатий клавиш. Посмотреть список последних
сделанных высокоуровневых изменений и среди них выбрать вот то 20-е, где
я правил странный метод в другом проекте? Пожалуйста, пара команд.
Как угодно делать mapping клавиш и слов? Я не пишу "и т.д.", а пишу
"итд", который автоматом раскрывается. Тьма команд у меня тоже
сокращены, заалиасены. У каждого тьма сокращений и мини команд
накапливается. Например если мне надо "обернуть" какую-то переменную в
скобочки, то я парой нажатий оборачиваю слово в кавычки, а дальше ещё
парой нажатий меняю кавычки на скобочки. Звучит как двойная команда,
много нажатий, но это занимает доли секунды, ибо на рефлексах всё.
Кто-то может считать, что идеально когда минимальное количество нажатий
клавиш делается. Я убеждён что нет: более длинные последовательности
рефлекторно отработанные могут быть эффективнее. Плюс многие действия
могут быть менее эффективны для конкретного узкоспециализированного
здесь-и-сейчас случая, но зато их можно будет удобно применить в макросе
или хитрой команде командной строки Vim.
Про повтор действий/команд многие пишут, но многие умалчивают что в Vim
есть, очевидно, и отмена действий, но организованная в виде дерева
изменений. Такого вроде нет ни в одном редакторе. У всех история
изменений по которой можно туда-сюда перемещаться линейна.
Искать текст по всякому, подсвечивать, перемещаться по меткам, в том
числе среди множества файлов -- это всё банально. Vim умеет перемещаться
по тэгам. Тэги это по сути аналог индекса из СУБД. Это отдельные заранее
сгенерированные файлы. Хочешь прыгнуть на определение функи под
курсором, или по названию -- два нажатия клавиш. Название фунок
совпадают/похожи с названиями переменных или констант? Два нажатие и
тебе меню с выбором куда ты хочешь перейти. Это возможно единственное
что умеют IDE в отличии от тупых редакторов (Nano, Блокнот, и подобных).
Но более того: поддержка навигации по тэгам появилась не в Vim, а в Vi,
который был задолго до него (просто любопытный факт насколько старая эта
фича (вовсю в 1980х), которой так любят хвастаться современные IDE из
2020-х :-)). Причём я вот как-то себе делал Zettelkästen систему, где
проще простого было написать скрипт, который бы генерировал бы файл с
тэгами для моего формата заметок, чтобы я в Vim мог как в броузере
прыгать по заметкам как по ссылкам.
В Vim есть jump-list и quickfix-list. Это отдельные окошки в которых
зачастую выводят результат работы поиска типа grep или git grep. Или там
выводят список ошибок во время компиляции или linter-а. По которым можно
удобно перемещаться и прыгать. А можно одной командой выкинуть ошибки
связанные с PEP8. А второй командой для каждой ошибки linter-а во всём
проекте применить команду комментирующую проблемную строку или например
сразу исправляющую вызов os.exit на os_exit например. Выставить пометки
рядом со словами или строками о проблемах -- тоже пожалуйста.
Подключить LSP плагин для работы с LSP сервером и получить по сути весь
per-language функционал для рефакторинга и linting-а? Без проблем. Иметь
автодополнение методов или аргументов? Показывать сигнатуры функций во
время набора кода и сразу же lint-ить? Все эти свистоперделки и полезные
вещи (опять же, которыми любят хвастать IDE) включаются на раз два.
Конечно же в Vim есть возможность показывать множество окон и как угодно
тасовать/изменять их. Есть и табы, хотя лично я не вижу в них смысла,
особенно при использовании мультиплексора терминала. Хочется сохранить
полностью от и до всё размещение окон, табов, курсора, содержимого
регистров и jump/change-списков? Одной командной Vim может сохранить
файл с сессией и одной командной продолжить эту сессию. А можно
сохранить только расположение окон/файлов, для часто используемого
проекта.
Отредактировать кусок кода изолированно в отдельном буфере/окне? Без
проблем. Скрывать часть текста, чтобы глаза не мозолил? Скрывать
определённые символы (ну например URL при редактировании Markdown, чтобы
только название ссылки оставалось)? Выводить всплывающие окна рядом с
курсором или словами? Все есть из коробки.
Молчу про многие сотни опций и настроек. Даже такой мелочи как добавлять
ли пробел после объединения строк или нет? Оставлять ли отступ после
ввода перевода строки? Но я молчу про это, молчу ибо слишком много.
Мы вроде с тобой использовали не просто вставку из файла, а вставку
вывода команды -- это частое действие.
Возможность проверки орфографии? Из коробки, встроена. Ну только словари
подложить надо.
Vim может быть запущен в режиме сервера и из командной строки в него
можно посылать команды. Например ты в терминале видишь вывод Python
traceback-а и можешь послать команду на открытие уже запущенного Vim-а
заданного файла на данном месте с подсветкой проблемного слова. А можно
редактировать файлы по прозрачно запущенному SSH на удалённой машине. А
можно и прямо в Vim запустить терминал и в нём работать, прямо на месте
выуживая или редактируя вывод программ.
Открывать и искать файлы как в эффективном shell-е, не задалбывая Tab
для автодополнения? Всё можно. Но ты наверное ещё тут не в теме, так как
и в shell ещё не использовал эффективное перемещение по директориям и
поиск/выбор файлов. В Vim я себе делал fuzzy-matching файлов как в zsh,
всё возможно. А может быть для поиска или выбора файлов хочется
буквально использовать fzf (https://github.com/junegunn/fzf) -- легко.
Интегрироваться с tmux мультиплексором терминала и общаться с его
встроенными буферами обмена? Плагин на пару экранов кода, без проблем.
Автоматическое форматирование текста, перенос строк, соблюдение отступов
в многоуровневых списках? Всё из коробки, настраиваемое. Зависимое от
языка комментирование строк и снятие комментариев? Пара нажатий. Ведь не
везде же достаточно добавить "#" в начало строки, а надо обрамлять и с
начала и с конца "/*" какими-нибудь.
Запустить компилятор/сборку, отловить ошибки в выводе, заполнить ими
quickfix окно -- при должной настройке из пары команд это можно сделать
вызовом :make. Из коробки, всё заточено под дружелюбность к разработчику.
Иметь возможность навешивать hook-и и автоматически выполняемые команды
на разных действиях? Без проблем. Например когда у меня открывается
письмо (email), то у меня сразу из цитируемого содержимого вырезается
подпись человека и курсор сразу же перемещается после конца цитаты.
И я ещё даже не упомянул про чуть ли не самую важнейшую часть Vim: его
встроенный язык программирования. Конечно, обязательно многие про свои
Atom, PyCharm, VSC могут начать говорить что там тоже можно писать на
JS/whatever и добавлять/изменять функционал. А теперь покажите мне хоть
одного человека кто это бы делал на практике. На этом "а у нас так тоже
можно делать" можно закрывать. Если бы было РЕАЛЬНО удобно и легко это
делать, то делали бы. А вот в Vim его язык очень интегрирован с самим
редактором и на vimscript регулярно и постоянно пишутся какие-нибудь
плагины многими людьми под свои нужды.
Разбить длинную сигнатуру функи на много строчек с корректным indent,
соблюдением нетривиального формата Python "foo: [bar, baz]", с
добавлением всех нужных запятых в конце? Написал плагин. Добавить все
недостающие import-ы о которых нам сказал linter из quickfix окна,
основываясь на статистике их применений через банальный git grep вызов?
Написал плагин. Открывать файлы которые указаны как
путь/к/файлу:строка:столбец? Что часто выдаётся компиляторами. Написал
плагин. Добавить дополнительные интерактивные команды для навигации по
indent-ам в тексте, что часто нужно в Python коде? Написал плагин.
Подсвечивать не человековводимые Unicode символы, которые могут
представлять опасность? Написал плагин. Выравнивать удобно по всяким
вертикальным разделителям? Написал плагин. Находясь в произвольном месте
unittest метода Python, нажать пару клавиш, чтобы в буфере обмена
оказался полный python-path вида path/to/file:TestCaseName.test_method?
Снова плагин. Тоже самое делать для Си кода, чтобы в буфере обмена
оказывалась строчка пригодная для вставки в отладчик, чтобы он
останавливался на строке где курсор? Плагин. И почти все вышеназванные
плагины написаны что-то типа за десятки минут или пару часов. Это не
очередной долбанный framework с которым нужно хорошенько пострадать
чтобы от него добиться того, что ты хочешь, а это инструмент сделанный
программистами для программистов, чтобы делать новые инструменты и
программы :-)
Когда-то можно было услышать критику vimscript: мол он странно выглядит
и не удобен. Не спорю: даже перенос строк в нём выполнялся добавлением
слэша в начале строки. И нельзя было в конце списков/словарей оставлять
запятую. Эти времена в прошлом, так как уже не мало времени существует
vim9script, который уже полностью похож на современный и привычный нам
язык программирования. Почти все мои плагины были написаны ещё на старом
vimscript, но я всё полностью перевёл на vim9 -- он хорош.
А кроме самого языка, Vim может и запускать асинхронные задачи. Есть как
в Go и каналы для коммуникации между асинхронными процессами. Сделать
instant messenger внутри Vim? Да я десятки видел и пробовал, не проблема
уже 20 лет назад была.
Из коробки интеграции с Git нет, но есть замечательнейший плагин
fugitive, без которого многие из нас не представляют уже возможным
разрешение конфликтов. Не скажу что он супер-пупер выделяющийся, но он
сильно помогает при работе с Git. И, в отличии от IDE, не скрывает его
от пользователя, ограничивая его действия или скрывая важные
предупреждения и сообщения.
И из коробки в Vim есть инструмент для сравнения, создания, отображения
и вообще работы с diff-ами. Видел в блогах что не редко Emacs
пользователи используют именно vimdiff для визуализации и правки
diff-ов, а не свой родной Emacs. Может что-то уже и поменялось и у них
появились свои достойные решения.
Как минимум vi, есть на любом уважающем себя UNIX. Поэтому, зная хотя бы
vi ты сможешь эффективно править конфиги на серверах во время
администрирования. Работая в командной строке, в zsh, в bash, whatever,
ты всегда одним нажатием можешь вызвать vi/vim для редактирования
многострочной строки в вызванном редакторе. Работая в PostgreSQL, введя
\e в его psql клиенте, ты будешь редактировать SQL запрос в Vim. Я
наверное лет 20 в самом окне web-обозревателя уже ничего не редактировал
и одним нажатием у меня вызывался Vim чтобы отредактировать textarea,
которая вставится назад в web после выхода из редактора. Мало кто из
опытных пользователей набирает/отвечает на почту в окне почтового
клиента: для этого де-факто всё равно будет вызываться внешний редактор
(типа Vim или Emacs). *Любой* POSIX совместимый shell по стандарту
обязан иметь два режима редактирования командной строки: либо vi, либо
emacs. Других вариантов нет. Огромная часть интерактивных CLI программ
реализует свой интерфейс через libedit или GNU readline, оба из которых
имеют возможность использования vi режима. Это не полноценный vi(m)
редактор, но базовые команды там будут одинаковы. То есть, почти всё в
UNIX мире, на котором строятся все современные серьёзные решения, ЦОДы,
сети, backend-ы и HPC -- имеет только два режима работы с пользователем:
или vi или emacs. Другого не дано, ибо за ~35 лет никто не изобрёл
ничего хотя бы отдалённо лучшего.
Если что, то в Vim одна из самых лучших документаций что я встречал. С
введением безумно дружелюбным к пользователю, даже с графическими
объяснениями (чего не было в документации в моё время когда я начинал им
пользоваться).
Но начать стоит с получасового vimtutor (это прям команда в терминале),
после которого ты сможешь уже без проблем использовать редактор где бы
то ни было.
От меня есть важнейший (как я считаю) совет: не усердствовать с
визуальным режимом выделения текста ("v" команда), не злоупотреблять ею.
Для начала вообще забыть про её существование. Ибо я со стороны видел,
что именно из-за неё люди убивают почти все возможности редактора типа
повторение действия, создания макросов или выполнения команд в ":g".
Визуальное выделение это уже не высокоуровневое действие, а буквально
"выдели вот ровно вот именно такой длины строки/символы". Но тянуть к
нему будет, так как в Microsoft Windows программах стрелочки с зажатым
shift-ом используются крайне часто.
Ну и рекомендую сразу же включить режим показа относительной нумерации
строчек. 5ff1b3c8c76be6e7691defe34a7e18c4d753f4f2
Без этой фичи ещё будет проблематично совместно с кем-то работать, так
как сказать "на минус 19-ой строке забыл вот то то" можно моментально,
ибо на экране прям будет "19" число написано. А если бы были абсолютные
номера строчек, то они и трёхзначные бывают и просто устанешь
произносить их.
Есть большущий миф о том, что Vim нельзя использовать без массы
плагинов. Как человек с 20+ летним стажем работы в нём, знакомый с
другими опытными его пользователями с не меньшим стажем, однозначно
заявляю что это миф/бред/враньё. Чаще всего люди обвешиваются плагинами
только для того (иногда и сами того не понимая), чтобы из Vim сделать
другой редактор. Людям дают болид Формулы-1, а они сразу начинают
модифицировать его, чтобы сделать знакомый им Жигуль. Многие, включая
меня, проходили этот этап, когда 20-30 плагинов стояло. Но с годами об
этом только жалели, ибо многие из них только скрывают настоящую мощь
Vim, препятствуют гибкому использованию. Сейчас у меня 15 моих
собственных самописных плагинов: но они связаны или уже с выработанными
привычками или же для узкоспециализированных задач (особых языков,
форматов и прочего) -- тут я не вижу проблем в установке task-specific
помощников. Вот только для языков программирования есть LSP, поэтому
Python/Go/C/whatever-specific плагины вряд ли могут потребоваться, ибо
достаточно одного LSP клиента, ну и LSP-сервера для языка, который от
редактора уже никак не зависит.
Ещё можно найти много рекомендаций для новичков начинающихся с совета
установки менеджера плагинов. Это абсолютно устаревший и не имеющий
смысла совет, так как уже много лет назад в нём появилась встроенная
система пакетов, очень удобная.
Всё что я написал касательно Vim также наверняка полностью относится и к
Emacs -- второму из "профессиональных" редакторов. Хотя многие и не
считают Emacs редактором, а скорее чуть ли не операционной системой,
неким desktop environment.
Самое большое отличие между ними в том, что Emacs с самого начала был по
сути интерпретатором и окружением для работы с Lisp (свой диалект),
поверх которого как бы реализован редактор. Vim, в котором не сразу
появился vimscript, же это развитие Vi -- а Vi это просто редактор, без
какого либо встроенного языка программирования (VI VI VI -- editor of
the Beast :-)). Vim это редактор в который добавили возможность
программирования/расширения, а Emacs это наоборот штука для
программирования на Lisp, поверх которой, на которой сделали редактор.
Реализовать внутри Emacs-а почтовые и новостные клиенты, IM-ы и всякое
такое: это абсолютно штатное его использование.
Плюс главнейшая разность Emacs и Vi(m) как редакторов: в Vi используется
несколько переключаемых режимов работы (вставка, выделение, командный,
командная строка), тогда как в Emacs сплошные сочетания и комбинации
клавиш (Ctrl+то, Ctrl+сё). Физиологически за ними работается по разному.
И есть известный статистический факт: частота проблем с запястьями у
Emacs-еров существенно выше чем у пользователей другого редактора.
Коротко упомяну про shell-ы. Я видел как большинство новичков работают в
терминале. Собственно, как и все мы когда-то начинали. Постоянный cd
туда, cd сюда, ls и всякое подобное. Наверное возникает вопрос: и чем же
это удобнее чем тыкать мышкой в GUI проводнике или IDE? Ничем.
А удобнее это становится тогда, когда начинает использоваться эффективно :-)
Пока работа в режиме cd/cd/cd/ls/cd/cd/ls ничем не отличается от DOS, в
котором просто было мало ресурсов для чего-то более серьёзного.
Надо сразу понимать: есть shell который используется для исполнения
скриптов, а есть интерактивный shell, в котором ты, человек,
интерактивно с ним взаимодействуешь. Иногда эти две задачи может
выполнять один и тот же shell. Не редко два совершенно разных и
несовместимых. shell скрипты де-факто пишутся на POSIX shell, который
/bin/sh. Но например в FreeBSD по умолчанию для интерактивного
использования выставляется tcsh, который вообще не совместим с /bin/sh.
Многие писаются от FISH shell-а, который тоже никоим образом не
совместим с POSIX/bin/sh -- и это не страшно, ибо интерактивная работа и
скрипты это зачастую не пересекающиеся задачи.
Первое что узнают люди для хоть какой-то эффективной работы с
интерактивным shell-ом это автодополнение имён файлов и названий команд.
Никто не пишет "main.go", все напишут "ma" и нажмут TAB, который
дополнит имя файла (если нет коллизий) до "main.go". Это всё научились
делать shell-ы ещё в 1980-е, насколько знаю.
Второе что узнают: наличие истории команд. Хотя бы нажимать стрелочками
вверх/вниз. А затем узнают про Ctrl+r, в котором можно написать часть
команды и будет произведён поиск только по этой части. Например ты
помнишь что что-то вводил касательно "build". Ctrl+r, "bui" а дальше
тебе предлагают команду "go build", нажимаешь enter.
90% людей на этом и останавливается. Хотя это всё лишь только 5% от всех
возможностей современных интерактивных shell-ов. Что прискорбно и
удручает, видя как много времени теряется впустую на сплошную ручную
работу.
Исторически как бы существовало два больших семейства shell-ов: Bourne
shell и C shell (1978 появился). "sh" и "csh". POSIX shell это Bourne
shell. BASH это Bourne Again Shell (что читается как "born again", игра
слов). Не то чтобы Bourne shell чем-то был сильно удобнее и выделялся,
но просто так исторически сложилось, что именно он стал стандартом для
написания скриптов, так как появился первым.
https://en.wikipedia.org/wiki/Comparison_of_command_shells
Одним из самых продвинутых shell-ов (и для интерактивной работы и для
скриптоваяния) долгое время был Korn shell, появившийся аж в 1983.
Однако он был проприетарным (закрытым). Сейчас появились свободные
версии, но по сути после появления Z shell это уже не так актуально.
Хотя некоторые BSD системы используют ksh по умолчанию, который я очень
уважаю.
В tcsh (TENEX C shell) впервые появилась возможность дополнения имён
команд и файлов. В csh появилась впервые история команд,
дополнение/подстановка из истории, алиасы, стэк директорий посещённых,
~-нотация (~/ это домашняя директория например) которая сверх часто
используется. В tcsh это всё развилось ещё сильнее. Job control в csh
был почти с самого начала, тогда как в том же GNU Bash оно появилось
только в 1989.
Почти всё вышенаписанное перекочевало и в ksh, который был более менее
ещё и совместим с bourne shell синтаксисом, позволяя и удобно/привычно
скрипты писать и интерактивно работать. В нём появились ассоциативные
массивы как тип данных. Очень продвинутые возможности по подстановке и
перенаправлению всяких файлов. Иерархичные вложенные переменные.
Ссылочные переменные. И многое другое.
Сложно описать насколько более продвинут ksh/zsh/bash относительно POSIX
shell. Простейший пример: у тебя "foo | bar" команда в скрипте. Если у
тебя foo упадёт и вернёт плохой код возврата, то для POSIX/bin/sh кодом
возврата всей этой конструкции pipeline-а будет результат только bar.
Например bar это "grep". Если у тебя упал "foo", то с точки зрения
"grep" ему просто подали на вход пустоту, ничего ошибочного, всё
валидно, мы успешно выходим. Тогда как более продвинутые для
скриптования shell-ы имеют возможность "выкинуть" плохой код возврата
pipeline-а любой команды. Это делает скриптовании и куда безопаснее и
куда компактнее/короче без тьмы костылей.
Вот например табличка с сравнением некоторых возможностей разных
shell-ов, довольно старая уже, древняя можно сказать:
sh csh ksh bash tcsh zsh rc es
Job control N Y Y Y Y Y N N
Aliases N Y Y Y Y Y N N
Shell functions Y(1) N Y Y N Y Y Y
"Sensible" Input/Output redirection Y N Y Y N Y Y Y
Directory stack N Y Y Y Y Y F F
Command history N Y Y Y Y Y L L
Command line editing N N Y Y Y Y L L
Vi Command line editing N N Y Y Y(3) Y L L
Emacs Command line editing N N Y Y Y Y L L
Rebindable Command line editing N N N Y Y Y L L
User name look up N Y Y Y Y Y L L
Login/Logout watching N N N N Y Y F F
Filename completion N Y(1) Y Y Y Y L L
Username completion N Y(2) Y Y Y Y L L
Hostname completion N Y(2) Y Y Y Y L L
History completion N N N Y Y Y L L
Fully programmable Completion N N N N Y Y N N
Mh Mailbox completion N N N N(4) N(6) N(6) N N
Co Processes N N Y N N Y N N
Builtin artithmetic evaluation N Y Y Y Y Y N N
Can follow symbolic links invisibly N N Y Y Y Y N N
Periodic command execution N N N N Y Y N N
Custom Prompt (easily) N N Y Y Y Y Y Y
Sun Keyboard Hack N N N N N Y N N
Spelling Correction N N N N Y Y N N
Process Substitution N N N Y(2) N Y Y Y
Underlying Syntax sh csh sh sh csh sh rc rc
Freely Available N N N(5) Y Y Y Y Y
Checks Mailbox N Y Y Y Y Y F F
Tty Sanity Checking N N N N Y Y N N
Can cope with large argument lists Y N Y Y Y Y Y Y
Has non-interactive startup file N Y Y(7) Y(7) Y Y N N
Has non-login startup file N Y Y(7) Y Y Y N N
Can avoid user startup files N Y N Y N Y Y Y
Can specify startup file N N Y Y N N N N
Low level command redefinition N N N N N N N Y
Has anonymous functions N N N N N N Y Y
List Variables N Y Y N Y Y Y Y
Full signal trap handling Y N Y Y N Y Y Y
File no clobber ability N Y Y Y Y Y N F
Local variables N N Y Y N Y Y Y
Lexically scoped variables N N N N N N N Y
Exceptions N N N N N Y N Y
Не так часто делают просто переход cd, cd, cd. Или имеют алиасы для
директорий (например "cd ~pyg" у меня перейдёт в /home/stargrave/work/pygost),
или имеют стэк директорий и при перемещении добавляют директори в стэк,
позволяя одной командой (у меня это буквально одно нажатие клавиши)
перейти назад по стэку. "cd -" вернёт в предыдущее место.
tcsh (как и zsh) имел встроенный spellchecker и он мог исправлять
опечатки в командах или названиях файлов (но лично я не рекомендовал бы
такое, ибо у меня не раз случались губительные исправления).
Если пользователь набирает полностью снова целые слова или команды, то
скорее всего делает что-то не так и не эффективно. "!$" подставит
последний аргумент из последней команды -- эту штуку даже наши
технические писатели, которые сидят под Астрой и в Word, вовсю
используют. !:1 подставит первый аргумент из прошлой команды.
!!:gs/foo/bar выполнит заново предыдущую команду, но заменив в ней все
foo на bar.
Иногда ты точно не помнишь с чего начиналась команда, но помнишь что это
было связано с ffmpeg и blablabla фильмом. А тебе надо повторить команду
связанную с перекодированием видео. У себя я могу просто набрать "ffm
blabla", нажать кнопку "вверх" и у меня по сути будет выведен список
команд с поиском по ".*ffm.*blabla" регулярке без учёта регистра букв.
Набрав "s/2/r2s/auth/init" и нажав TAB у меня этот путь раскроется до
"src/rik2utils/rik2s/request_auther/__init__.py". Причём между слэшами
можно даже опускать написание букв вообще (зависит от наличия коллизий с
другими файлами/директорий, конечно же).
"**.mod" в ksh/zsh подставит все go.mod файлы проекта.
"**.php(.om[1]:h)" у тебя возьмёт все .php файлы рекурсивно из всех
поддиректорий, отсортирует по времени изменения и возьмёт самый свежий и
подставит директорию где он находится.
"**.{js,php,css}~(libs|temp|tmp|test)/*" подставит рекурсивно всей .js,
.php, .css файлы, но за исключением директорий libs, temp, tmp, test.
"!#$:t:r" -- подставит у *текущей* команды последний аргумент, но только
с отрезанной директорией из пути и без расширения. "**(#ia2)readme"
подставить все "readme" файлы где допустимо до двух опечаток в названии.
Ничто с подобным мощным раскрытием wildcard-ов и работой с историей не
сравнится по эффективности. Именно подобными вещами и мощны командные
интерпретаторы, чего невозможно сделать в графических приложениях.
GNU Bash по умолчанию во многих дистрибутивах GNU/Linux используется по
сути исключительно из-за политических причин. Многое мною написанное
выше в bash не работает и невозможно сделать. Да и для скриптования он
не сильно лучше голого POSIX shell. Самая частая проблема при
скриптовании shell-а это возня с пробелами. Например у тебя в переменной
foo есть имя файла с пробелами: foo="hello world.txt". И сделав cat $foo
ты получишь ошибку, так как $foo раскроется в два слова, которые станут
двумя аргументами, что означает что ты хочешь вывести файл hello и файл
world.txt. В zsh почти во всех случаях с этим нет проблем, за счёт чего
на нём на порядок проще писать скрипты, надёжнее их писать.
В zsh есть возможность иметь объединённую историю команд между разными
instance-ами, чего тоже нет в bash. Сидишь в двух разных окнах, и у тебя
у каждого запущенного bash будет своя история. Для многих именно эта
фича zsh является главной для перехода на него. Для меня главной фичей
являлось autopushd: когда у тебя каждый "cd" начинает работать как
"pushd" -- добавляет директорию автоматически в стэк. Дальше я бы
выделил инкрементальный поиск истории по шаблону. Дальше бы выделил
fuzzy раскрытие wildcard-ов в путях. И только потом уже наверное
вспомнил бы про shared history. http://strcat.de/zsh/
https://www.arp242.net/why-zsh.html
Но чаще всего про zsh упомянут его мега-гипер-убер-мощнейшую систему
дополнений и https://ohmyz.sh/
https://adam-drake-frontend-developer.medium.com/supercharge-your-terminal-with-oh-my-zsh-4fb102ca5005
https://old.reddit.com/r/zsh/comments/1iu8bz8/is_ohmyzsh_worth_it/
Да, в zsh сверх крутая-как-нигде гибкая система completion-а. Которую я
активно использую и написал свои completer-ы. Но рекомендовать oh-my-zsh,
как и все пользователи с опытом -- однозначно не могу. Типа да,
прикольно что на каждой позиции кучи команд ты можешь нажать tab и у
тебя разукрашенные свистопердящие менюшки показывающие опции команд,
дополняющие имена хостов на основе данных из ~/.ssh/known_hosts,
дополняющие пути до файлов на других хостах (прозрачно логинясь через
ssh на них), но это всё жутко тормозит на практике и не даёт заметного
profit. Время не сильно экономит. Часто только вредит тем, что не
показывает все возможные опции/аргумент для команд и пользователь будет
думать что их и нет. А также это скрывает много деталей которые бы нужно
было знать. Вот человек знает как подставить PID процесса через
автодополнение zsh-а, но этом без наличия свистопердящего zsh он вообще
не в курсе как вывести хотя бы список процессов ("ps" команда). Всех
кого я знаю -- отключают oh-my-zsh и полный спектр completer-ов со
временем, ибо оно не даёт profit-а. Я не к тому что система completion
не нужна, а к тому, что нужно включать только то что нужно, осознанно и
с пониманием дела.
Не редко слышал фразы о том, что zsh медленный. Это, опять же, с чистой
совестью заявляю, что произносят только некомпетентные и не понимающие
люди. В 100% случаях они говорят про обвешанный плагинами свистопердящий
oh-my-zsh. Сам по себе zsh гораздо компактнее, проще, меньше по размеру
и существенно более быстрый чем тот же bash. И не смотря на меньшее
кол-во кода, zsh при этом умеет в десятки раз больше всего.
Ещё рекомендую начать посматривать на https://github.com/tmux/tmux/
https://en.wikipedia.org/wiki/Tmux
Это такая штука, которая притворяется обычным терминалом для запущенных
под ним программ. Но при этом он позволяет иметь множество вкладок,
множество окон, жонглировать ими по всякому, всякие там менюшки и popup
окна делать для автоматизации, иметь scrollback буфер и путешествовать
по нему или редактировать, иметь буфер обмена в котором менюшкой можно
выбирать что хочется вставить (штатные же буферы обмена это стэк из
одного элемента как бы).
Хотя многие впервые знакомятся с мультиплексорами терминалов
исключительно для того, чтобы можно было на сервере их запустить и
спокойно отключиться от сети, а подключившись снова увидеть всё как там
было запущено в точно таком же виде. Штатно при отключении сети, SSH
грохнет все запущенные в сессии процессы.
Многое из вышеназванного умеют делать эмуляторы терминалов: scrollback
буфер, разбиение на окна и их жонглирование, множество вкладок. Но
эмуляторы запускаются только под GUI, а значит на сервере их не будет.
Плюс у каждого второго обязательно да будет какой-то незнакомый тебе
эмулятор, поэтому будет неудобно за чужим компьютером. С другой стороны,
конечно, и нечего делать за чужим :-). Но изучив tmux ты будешь в своей
тарелке на любой системе где он установлен (да и собрать его не
проблема, ибо зависимостей почти нет).
Плюс ты сможешь скриптовать своё рабочее окружение. Я то как-раз именно
поэтому начал пробовать tmux. Когда я работал с одним проектом, то хотел
чтобы мне сразу создалось несколько вкладок, сразу в нужной директории,
в других вкладках всякие просмотрщики журналов сразу были запущены, в
третьих сразу подготовленные строчки с командами запуска. Даже если и
какие-то GUI эмуляторы терминалов и позволяют себя как-то
автоматизировать, то я не встречал кто бы это реально использовал, плюс
это зависимость от чётко заданного конкретного GUI эмулятора терминалов
(тогда как tmux под голой консолью можно запустить без проблем).
Я активно использую его popup окна для следующего: хочу вставить путь до
файла, но даже с возможностями zsh не всегда быстро можно указать путь
до нужного (много коллизий в именах), поэтому парой клавиш у меня
появляется popup окно, где запускается bfind (breadth-first штука типа
find-а, https://github.com/tavianator/bfs), которая на лету в real-time
подаёт данные в "fzf" fuzzy matcher (https://github.com/junegunn/fzf) и
fuzzy поиском позволяет выбрать мне нужный файл частенько за доли
секунды. Выбрав, нажав enter, он подставится в основное рабочее окно, а
popup закроется. Никакого дополнительного места на экране не будет
отъедено во время поиска.
Ну и с коллегами все его используем для парного программирования или
администрирования. Настраиваем специальную SSH учётную запись, при
логине в которую автоматически форсированно будет запускаться tmux
клиент, подключённый к твоему tmux серверу, но в read-only режиме. И мы
видим рабочие экраны друг друга. Но под своим графическим терминалом, со
своими удобными нам шрифтами. Если бы это была передача графической
информации (как удалённый доступ к Windows рабочему столу), то на
мониторах с разными DPI это было бы неюзабельно, либо дико неудобно тому
кому придётся перевести свою рабочую сессию на HiDPI мониторе в "low"
DPI, плюс шрифты регулярно многим не нравятся (на вкус и цвет товарища
никогда нет). Плюс GUI требовал бы очень неплохое Интернет соединение,
тогда как tmux это реально просто просасывание видимой текстовой
информации -- мизер.
Кроме Emacs пользователей, у нас вроде все коллеги с кем мы работали и
работаем, даже когда не идёт речь про связь по сети или удалённого
доступа, используют tmux локально запускаемый. Собственно, прям
настраиваются эмуляторы терминалов так, что после их запуска там сразу
же оказывается tmux. Ничего не отжирающая штука, но добавляющая
офигенное кросс-платформенное удобство, можно сказать сетевую
прозрачность и по сути window manager в терминале. Но штука
опциональная -- она уже не настолько значимую роль играет в отличии от
shell и текстового редактора.
Sergey Matveev [Fri, 21 Mar 2025 08:18:29 +0000 (11:18 +0300)]
Popup-ы на сайтах и других местах
https://yurichev.com/nr/popups/
На все 100% солидарен с автором, со всем написанным. Помню как в
Футураме (20+ лет назад!) показывался их Интернет будущего, в котором им
приходилось отбиваться от назойливых popup окон, не дающих нигде проходу.
В "Очень страшном кино" или каком-то подобном фильме тоже показывали
монитор человека зашедшего в Интернет, где десятки всплывашек то тут, то
там. Недавно я много часов убил сидя в "современном" Интернете, в
обозревателе с включённым JS. Помню что два хостинга сразу же, мгновенно
отмёл, вычеркнул и забыл про них, даже не интересуясь что у них там по
поводу IPv6: просто потому, что после захода на главную они сразу же
суют в лицо какие-то выгодные предложения, которые я вынужден буду
закрыть, тыкнув на крестик. Сразу закрыл. Это полное неуважение к людям.
Автор пишет про то, что на сайте автобусного расписания, после закрытия
popup-а, сделал снимки экрана и сохранил их, дабы более не заходить. И я
аналогично тоже делал когда-то. Или текст сохранял. Но заходить на такое
в последствии -- не вариант.
Понравилось, что он даже дошёл до темы с IDE и редакторами, сказав что
не встречал спецов, которые бы сидели под IDE. И предполагает, что
связано с возможностью сосредоточиться в нормальных редакторах. Типа
может быть где-то и бывают крутые профи за Word или IDE, но только как
редкое исключение из правил.
Sergey Matveev [Fri, 21 Mar 2025 07:46:30 +0000 (10:46 +0300)]
Бойкот собрания IETF 127
https://boycott-ietf127.org/
Так как США являются очень опасной страной для въезда, то предлагают
бойкотировать данное собрание. Мол, даже будучи белым европейцем, всё
равно показывают примеры как их сажают, например если находят критику
президента в смартфонах.
Sergey Matveev [Thu, 20 Mar 2025 14:13:52 +0000 (17:13 +0300)]
Вроде переехал на другую /48 сеть
Сегодня (0b605fb62d37ba546eb3ad5340938cd8e379a088) писал, что всё ожидаю
нового VPS hoster, но вот он предоставил всё в рабочем видел. Уже
поменял адреса в DNS, но ещё ждать пока и glue record обновятся. Вроде
бы пока всё работает. И, в отличии от предыдущего hoster, никаких NDP
proxy не нужно использовать: через выделенную /125 сеть мне на отдельный
IP адрес трафик приходит для всей /48 сети, а дальше я уж сам занимаюсь
маршрутизацией через WireGuard туннель. Насколько более грамотное решение.
Но вот, правда, скорость у них как-то не очень. И на самой VPS с того же
mirror.yandex.ru не более 10MBps (в отличии от 45+ на прошлой) и через
WireGuard с ней как-то не шустро, но это уже мелочи.
Sergey Matveev [Thu, 20 Mar 2025 08:59:42 +0000 (11:59 +0300)]
Вторая версия schwabrak
Год назад (42b3d1b739b5f0cef40f349cdc7044a785dc604a) писал о том, что
schwabrak (bd94115b066472316ea03e85d611f732785f8b7c) более менее активно
использовался мною и немного коллегами. Сейчас в одном репозитории с
задачами надо было причесать и поприводить их в порядок. Переименование
задач или смена иерархии директорий приводит к довольно муторному и
аккуратному исправлению символических ссылок. Получать информацию,
фильтровать её, без использования вспомогательных скриптов -- ну так
себе по простоте дело. Да, информация есть, можно всё сделать, но это не
тривиальные запросы в shell-е, почти всегда скрипты.
Вспомнил одну презентацию, но которую не могу найти в блоге (или не
упоминал о ней), где показывалось как "просто и легко" можно работать с
Bluetooth или чем-то подобным в GNU/Linux. Мол, вот у вас есть sysfs,
где в ряде директорий вы можете узнать о существовании тех или иных
устройств. Сделав echo такого-то значения в такой sysfs файл, вы сможете
сделать то или иное действие. И там относительно простая задача
превращалась в дюжину команд на shell, со сплошными циклами и хаками.
Тогда как эта же задача под Windows решалась единственным API вызовом
функи с несколькими аргументами.
Или вот распространённый suckless подход к IM-ам: делать per-user
директории, внутри них FIFO файлы in/out и ещё метаинформационные. Можно
ли это скриптовать? Конечно, да. Но работать без кучи дополнительных
обвязок уже проблематично. А хотелось бы иметь нечто, с чем более менее
можно бы было и вообще без дополнительного софта работать. В противном
случае это уже будет именно решение под конкретный framework/toolset.
Вторая итерация schwabrak у меня, как мне кажется, стала более
дружелюбной к пользователю и машине. Но она уже потребует recutils
утилиты. Вместо директории tags/ с символическими ссылками на файлы
меток, вместо deps/ с ссылками на зависимые задачи, вместо единичных
файлов на каждое key-value значение, я решил всё это сложить в один
"meta" файл в recfile формате.
По идее я захотел вообще всё сложить в одну базу данных в recfile. Но
разделить её на множество .rec-ов точно нужно: тогда на каждую задачу
git log-ом можно будет смотреть историю только чётко заданной одной, не
иметь конфликтов с другими. Плюс поля about/result я так и оставил в
отдельных файлах, чтобы удобнее было с ними работать в редакторе (внутри
recfile каждая строчка должна была бы иметь "+ " префикс). И написано
несколько утилит, которые просто генерируют большой recfile с
about/result полями на выходе. И предполагается что дальше нужно
использовать recutils. В них и производить фильтрацию, выборку, создание
отчётов, без дополнительных не тривиальных (z)shell скриптов.
recutils наверняка есть в каждом дистрибутиве. А если и нет, то
собираются легко, без зависимостей. Но пока это всё выглядит куда
удобнее для работы.
Sergey Matveev [Thu, 20 Mar 2025 07:22:37 +0000 (10:22 +0300)]
Всё в ожидании IPv6 сети
Больше недели я написал (f52906a5e4067b2bfc45c054c1cd222dae4d223a)
всяким VPS провайдерам вопрос по возможности предоставления /48 (или
хотя бы /56) сети, SMTP/PTR, SSH и всякого такого. Только один провайдер
у меня остался не спрошенным, но как-то я наверное даже и не буду
пытаться, ибо его собственная родная главная страница находится на
Cloudflare, что уж больно не серьёзно. Ответил удовлетворительно только
deephost.pw.
Я задал вопрос как именно будет предоставляться сеть: по нормальному
через маршрутизацию, как это делает Hurricane Electric или IPv4Market
тот же, или придётся костылять и поднимать NDP proxy. Они сказали, что
по идее NDP прокси, но попробуют сделать по уму, но нужна настройка с их
стороны. Вот уже прошла неделя с момента как я начал с ними общаться. За
это время мне смогли выделить /48 сеть, даже трафик маршрутизируется на
указанный мною IP адрес из отдельной /125 сети. Однако... исходящий
трафик теряется. Пока только в одну сторону есть работоспособность, что
смысла практического не имеет.
Ещё мне необычным показалось то, что vtnet0 интерфейс смотрит в их /32
сеть. Выходит, что все VPS-ки напрямую подключаются к их /32 сети. Как и
широковещательные ARP по полтысячи пакетов в секунду льются. А ещё,
когда я только завёл VPS-ку, то tcpdump показывал полное отсутствие IPv6
пакетов в сети. Как пообщались со мной, то сразу внезапно появился
мультивещательный NDP трафик. Такое впечатление, что IPv6 в принципе был
выключен полностью. А если так долго возятся с моим банальным запросом
на /48 сеть, услуга которая у них вообще на главной странице сайта
показана, то такое впечатление, что я чуть ли не первый клиент у них,
или в их ДЦ в Москве, который запросил IPv6. Грустно это всё.
Если с этим VPS ничего не получится, то я даже не знаю... похоже я
просто буду делить /64 сеть другой VPS на маленькие части и их через NDP
proxy раздавать. Бесит. Где-то в РФ (в вопросах телекоммуникаций) всё
делают state-of-art грамотно и без проблем, но просто так физическому
лицу никто, даже за хорошие деньги, не готов предоставлять услуги,
которые вообще как рекомендуемые (то есть штатные, что должно быть по
умолчанию) в RFC прописаны.
Ну или ещё глубже выяснять вопрос со своей IPv6 сетью и как её где по
BGP можно будет подключить. Само собой я обращусь в какую-нибудь
организацию, которая сделает за меня все юридические процедуры по
регистрации AS и сети. Тут я не особо вижу проблем -- только денег надо
будет заплатить. Но дальше то надо где-то подключиться и анонсировать
эту сеть.
Sergey Matveev [Wed, 19 Mar 2025 07:07:43 +0000 (10:07 +0300)]
Сходил снова на оркестр волынщиков и ирландские танцы
Вот настолько круто слушать и смотреть на City Pipes волынщиков, что уже
третий раз на них не раздумывая пошёл. Но уже в Москве, в большом КЗ
Измайлово. А так как за день до этого был день святого Патрика, до
вместе с шотландской тематикой была группа ирландских танцоров "Celtic Wind".
Когда-то папу уговорил через силу пойти за компанию на City Pipes. Ему
так понравилось, что вообще ни на что больше не ходил из концертов или
опер, кроме как на них. Тётю затащил в прошлом году и в этот раз она,
тоже не долго думая, захотела пойти. Слышны были разговоры других людей
выходящих с концерта "теперь то понял почему мне так нравятся волынки?".
Всё было на ура. Танцоры выступали как и просто отдельно без музыкантов,
только создавая оглушительный ритмичный топот, так и вместе с
барабанщиками City Pipes и вместе со всем их оркестром. Там не просто
параллельно шли танцы и игра на инструментах, а была и хореография между
всеми на сцене, плюс прям шоу (типа театральное). Отличный симбиоз!
В этот раз, в отличии от предыдущих, совсем не исполняли рок хиты.
Но было больше классики старой английской.
В общем, офигенные концерты они устраивают! Ну и симбиоз с танцорами
тоже отлично вышел!
Sergey Matveev [Tue, 18 Mar 2025 08:18:45 +0000 (11:18 +0300)]
AV1 не перестаёт радовать
С одной стороны, AV1, судя по всему, очень и очень сложный, ничего
эстетически красивого в нём нем, плюс вроде бы непонятки с патентами
(впрочем, как и с JPEG XL что ли?).
Но зато на практике без всяких GPU и ускорителей, чисто на CPU, он за
более чем вменяемое время (в отличии от VP9) способен с отличнейшим
качеством и битрейтом пожать видео. За ночь у меня два DVD
перекодировалось в таком же разрешении с -crf 24 и -preset 2 (почти
самый медленный режим), делая 500-600 мегабайтные файлы, в которых я
вообще на глаз даже при ближайшем рассмотрении не могу заметить разницы
с оригиналом (хотя это и так DVD, с относительно мыльной картинкой). А с
YouTube (когда он ещё пускал) я и 20+ Mbps 4K видео в real-time без
проблем проигрывал на нескольких ядрах.
VP8/VP9 или по качеству/bitrate не могут сравнится или по скорости
кодирования. Пока AV1 реально лучший на практике. Всякие H.2xx не хочу
рассматривать.
Sergey Matveev [Mon, 17 Mar 2025 08:14:10 +0000 (11:14 +0300)]
Посмотрел "Зеркало для героя"
https://ru.wikipedia.org/wiki/Зеркало_для_героя
Советский фильм 1987-го о том, как двое людей попадают на 40 лет назад
во времени и каждый день у них повторяется снова и снова. Как "День Сурка",
вот только получаемые ими увечья остаются. Начинается с того, как сын с
отцом поругался, прям конфликт поколений. Но затем он увидел жизнь
своего молодого отца, по другому на неё начал смотреть. Хороший фильм.
Sergey Matveev [Mon, 17 Mar 2025 08:10:47 +0000 (11:10 +0300)]
Посмотрел "Крупный план"
https://ru.wikipedia.org/wiki/Крупный_план_(фильм)
Иранский фильм от их известнейшего режиссёра. Основан на реальных
событиях и в нём снялись сами участники этих событий. Очень необычный.
Куча Тарантино-like крупных планов говорящих людей. Жуть как понравился!
Ну и плюс любо посмотреть как на быт и людей Ирина, так и на их суд.
Sergey Matveev [Sun, 16 Mar 2025 13:36:46 +0000 (16:36 +0300)]
Лабиринт Фотопии
https://ifhub.club/2025/03/15/photopia-as-a-tutorial.html
https://en.wikipedia.org/wiki/Photopia
Photopia очень часто рекомендуется как первая IF игра. И у меня она тоже
была первой, если не изменяет память. Но её реально сложно отнести к
настоящим IF играм, ибо почти никакой интерактивности (просто постоянно
ждёшь продолжения развития сюжета).
Sergey Matveev [Thu, 13 Mar 2025 09:19:39 +0000 (12:19 +0300)]
Хотят избавиться от .su
https://habr.com/ru/news/890452/
https://habr.com/ru/news/890606/
https://dxdt.ru/2024/10/10/14047/
https://ripn.su/news/razyasnenie-o-statuse-domena-su/
Ну блин, приехали. Только я перевёл свои домены с .ru на .su, так вот
новость о том, что хотят от него избавиться. pos.su→pos.ru
Sergey Matveev [Wed, 12 Mar 2025 18:35:55 +0000 (21:35 +0300)]
Прочитал "Последние дни" Типа Пауэрса
https://ru.wikipedia.org/wiki/Пауэрс,_Тим
https://fantlab.ru/work7487
Да, начал читать не первую книгу из "Трилогии сдвигов", но... понял что
это точно не моё. Слишком много непонятной мистики. Через силу дочитывал
только первый том, второй даже не собираюсь.
Sergey Matveev [Wed, 12 Mar 2025 18:15:39 +0000 (21:15 +0300)]
Прочитал "Королеву ангелов"
https://ru.wikipedia.org/wiki/Королева_ангелов_(роман)
Номинирован научно-фантастический роман был на множество премий.
И Грег Бир мне нравится как автор, уже знаком с его творчеством.
Интересное произведение, в котором как в "Криминальном чтиве"
несколько историй параллельно идут, а потом встречаются вместе.
Удивительно что это только в 1990 было написано, ибо уж очень
современно выглядят описания.
Sergey Matveev [Wed, 12 Mar 2025 17:29:50 +0000 (20:29 +0300)]
Поиск IPv6-capable хостинга
Не один час сегодня потратил на прочёсывание на разных сайтах информации
о хостерах всяких. На каждом дальше нужно индивидуально искать у них
информацию о том как (не)поддерживается IPv6. В десяток компаний написал
email с вопросами о PTR, ограничениях трафика и возможности /56 или /48
сетей. Не раз слышал рекомендацию спрашивать об этом, ибо на самом сайте
могут не написать.
Вообще хостеров с поддержкой /64 IPv6 прям не мало. И речь только про
тех, кто есть в РФ. Зарубежные не рассматриваю в принципе. Есть,
конечно, и много кто не поддерживает IPv6, но, похоже, их всё меньше и
меньше. Попадаются такие, кто выдаёт единичные IPv6 адреса и просят
деньги за каждый дополнительный адрес. Бежать надо от таких, бежать, ибо
это это вне всяких норм этики.
Не мало видел примеров настройки IPv6 сети с полноценной маршрутизацией
через fe80::1 link-local адреса. Лично я бы именно так и делал.
Но поиск тех, кто выдавал бы >/64 -- удручает. Среди всех найденных мною
компаний только, среди тех кому написал письма, только с одной завтра
попробую уже на практике что-то сделать, и есть ровно одна про запас,
кто явно говорит про предоставление /48 сети. Возможно кто-то ещё не
ответил из адресатов, но у других или нет IPv6 (хотя по их сайту, где не
мало информации о преимуществах протокола, сразу и не скажешь) или нет
больших сетей.
Ещё есть возможность с собственной AS и сетью прийти, но это пока не моя
весовая категория, так сказать.
Sergey Matveev [Wed, 12 Mar 2025 07:16:26 +0000 (10:16 +0300)]
Никому не порекомендую vpsville.ru
Ну что ж, вот и подходит конец моего использования сабжевого VPS
провайдера. Вчера аж два человека сообщили о недоступности SSH-а
по IPv6 до моего основного компьютера. В комментарии к
(3136e07d90bf973abaf9fda3bad7e343a58c0be6) и ещё один у меня многие
годы хостил jail с сайтом, до которого SSH доступ всегда был только
по IPv6.
tcpdump-ом выяснил, что трафик по TCP 22-му порту полностью резался в
обе стороны на VPS-ке с которой я получаю /48 сеть. Техподдержка только
посоветовала своего демона на другой порт повесить. Извините, а
исходящие SSH соединения, как им это поможет?
* Блокируется SSH трафик в обе стороны
* Нигде не было написано, но PTR запись можно назначить только для IPv4
адреса (25ce76407710dc00ab7e4cbda272f32a83f54300). Сегодня мне
написали, что можно назначить на IPv6 адрес внутри /64 сети, но где ж
вы раньше то были с этой информацией? Или на момент моих настроек даже
для /64 нельзя было прописать. В общем, поднять SMTP сервер для
отправки не выйдет
* Были серьёзные (db38f36c737212f4ec8e82a82acf96586b56ea3b) проблемы и с
входящей SMTP почтой, особенно от gmail.com. Меня уверяют, что они
ничего не режут, так что возможно тут беда в вышестоящих магистралях.
Но весь входящий SMTP трафик я в итоге заруливал через мою старую VPS
* Безграмотное решение для /48 сети. Вся эта сеть просто навешивалась
ими на виртуальный Ethernet интерфейс, а не маршрутизировалась через
какой-то адрес (f1dc900ba79ee0d1f87977c16bfbf61c574bbcdf). Из-за этого
пришлось использовать ndproxy, да ещё патчить, так как на Ethernet-е у
них не только я, но и куча других VPS-ок, которым тоже рассылаются NDP
запросы, на которые мне отвечать не надо
Что-то это какая-то жопа с нашими провайдерами. А точнее с IPv6 в них.
Он на магистралях есть везде -- бери не хочу. У всех моих знакомых, кто
владеет компаниями и закупает Интернет в фирму, на работе -- везде есть
IPv6 и вроде бы без проблем. Но простому физическому лицу это какая-то
жопа получить работающее решение. И, судя по всему, банально из-за
недостатка достаточно квалифицированных специалистов по сетям. Как будто
всех спецов крупные компании переманили к себе, а для SOHO провайдеров
никого не осталось.
Я то, кстати, неработоспособность SSH не замечал, так как у меня до моей
VPS-ки с почтовым сервером проложен WireGuard туннель, через который по
BGP маршрут меняется. Я до своих IPv6 сетей через туннель ходил, минуя
блокировки провайдеров.
Sergey Matveev [Wed, 12 Mar 2025 07:03:38 +0000 (10:03 +0300)]
SFTP-only учётная запись и медленность протокола
https://stackoverflow.com/questions/8849240/why-when-i-transfer-a-file-through-sftp-it-takes-longer-than-ftp
У меня давно есть учётная запись выделенная исключительно под SFTP. Но
раз я в последнее время в блоге про SSH пишу, то просто заметка как
сделать сабж: достаточно прописать в authorized_keys:
А если правильно рулить правами доступа и сделать анонимного
(3136e07d90bf973abaf9fda3bad7e343a58c0be6) SSH пользователя, прописать
аналог restrict,command=internal-sftp в sshd_config, то будет анонимный
read-only SFTP.
Но с ним (SFTP) есть серьёзная проблема производительности. По ссылке к
этой записи автор HPN-SSH патчей объясняет почему с ним всё так плохо.
По сути из-за того, что он самостоятельно делает TCP flow control. Он
также отмечает, что эти HPN патчи применяют:
Google, Yahoo, Apple, most ever large research data center, NASA,
NOAA, the government, the military, and most financial institutions.
Слышал где-то и про Яндекс. А я никогда не пробовал с ними. Да и не
охота: всё равно NFS буду использовать для чего-то серьёзного/крупного.
Sergey Matveev [Tue, 11 Mar 2025 11:36:52 +0000 (14:36 +0300)]
Анонимный SSH+Git
https://gameoftrees.org/code.html
https://gameoftrees.org/gotsh.1.html
https://git-scm.com/docs/git-shell
Как-то я заметил, что в Game Of Trees (реализация Git от OpenBSD
разработчиков) весь исходный код доступен через ssh://-протокол,
анонимно, без регистрации (и SMS), никаких https://. Особо я никогда
не задавался вопросом можно ли "анонимный" SSH предоставить как либо?
Но в их документации на всё это есть намёки. Для "анонимного"
пользователя достаточно выставить в sshd_config (OpenSSH):
Match User anongit
PasswordAuthentication yes
PermitEmptyPasswords yes
DisableForwarding yes
PermitTTY no
ну и убрать пароль у этого пользователя. В качестве shell-а выставить
git-shell, чтобы ограничить его возможности только работой с git-ом.
Создать git-shell-commands/no-interactive-login чтобы явно вообще
запретить интерактивную работу в git-shell.
Я не использую got, но в его gotd можно указать read-only права доступа.
А вот для обычного git-а git-shell-у ничего такого не указать. В
исходном коде git-shell можно закомментировать строчку в командой
разрешающей загрузку патчей, Но я пока решил задачу с read-only доступом
просто помещением anongit в группу git, для которой не даются права на
запись в репозитории.
И я убрал HTTP/HTTPS протокол для Git репозиториев у себя. Это не
связано с моим недавним (3342002daf11a729fc4591577a72b81d8cfda5df)
очередным постом про HTTPS, а просто так совпало по времени. Git и так
есть, OpenSSH и так есть: почему бы их и не использовать для случаев,
когда нужна криптографическая защита протокола? HTTPS излишен. Плюс
никакого PKI не надо, на который намекает TLS.
Sergey Matveev [Tue, 11 Mar 2025 10:29:50 +0000 (13:29 +0300)]
Попробовал всяких азиатских дошираков
Уже множество знакомых, при упоминании Ханой-Москва на Ярославском
шоссе, обязательно посоветуют попробовать их лапшу быстрого приготовления.
Недавно оказался там совсем рядом и попросил знакомого сводить и
посоветовать чего-нибудь эдакого. Похоже там сотни видов всякой лапши, но
почти нигде нет никаких английских подписей. Судя по всему, сложнее
всего найти не острые варианты. Взяли каких-то видов. Попробовал. Ну или
что-то не настолько сногсшибательное взяли, как это описывают другие,
либо я не в состоянии оценить. Вкусно, но не более. Восторга или чего-то
необычного не почувствовал. Хотя и не был прежде знаком с рисовыми
клёцками. Ну и от одной лапши всё-равно рот потом горел. Не нашёл
кардинальных отличий от Доширак/Роллтон. Но часть лапши вроде бы
корейская, не вьетнамская.
Sergey Matveev [Tue, 11 Mar 2025 08:14:49 +0000 (11:14 +0300)]
Firefox форсирует HTTPS использование
http://xahlee.info/w/Firefox_Forces_HTTPS.html
http://xahlee.info/w/why_no_https.html
Не только я недоволен форсированным криптобесием касательно HTTPS.
* you now get a error for sites not sponsored by big corps such as Let's Encrypt.
* this means, billions of small sites are now unreadable. You only get
to read big corp sites.
* forcing https, began by google, is a way to censor the masses and control info.
* in the beginning, google empire mildly suggested it, for so called security.
* then, mysteriously, at the same time some org spring up offering https for free.
* then it gets gradually worse. sites without https shows as insecure
warning sign. scare tactics.
* vast majority of sites are not shopping sites.
* also, vast majority, even coders, making a cert is too much hassle, even free.
* then u get the expire issue, which occurs very often.
* requiring cert, basically force sites to be centralized by a few giant
orgs. (and there is lots war n scam within cert orgs, there's
incident...)
* and, oddly, for so called security of non-credit card sites, they no
sanction self cert.
* and now, basically, firefox begin simply prevent reading of non ngo
sanctioned sites. that's basically billions of sites.
* firefox says it's experimental. of course, they r trying to see how
deep it can go, how coders receives it.
Letsencrypt is a tool of capture to make it easier to censor people by
revoking their access to CAs.
HTTPS and more specifically Let's Encrypt is a power play to control the
internet and prevent counter-culture from forming. By browsers using
scare tactics for enforcing https it puts the control of the internet
into a handful of CAs making you vulnerable to cancelling.
Sergey Matveev [Sun, 9 Mar 2025 17:54:21 +0000 (20:54 +0300)]
Услышал Чеботину
https://ru.wikipedia.org/wiki/Чеботина,_Люся
Были на даче, готовили шашлыки, в колонках был playlist со всякой
нашей современной попсой российской. На одной песне мне прям почти
физиологическое отвращение и неприязнь вызывало что я слышу. Пошёл
посмотреть на экран смартфона, чтобы понять кто это. Я не припомню
чтобы настолько мерзкой и неприятной, раздражающей манерой пения
кто-либо обладал. Хотя я за последние лет десять вроде бы совершенно
спокоен стал ко многому в музыке, даже рэп в целом не вызывает негатива.
Sergey Matveev [Fri, 7 Mar 2025 10:08:58 +0000 (13:08 +0300)]
Yondr на концерте Ghost
https://www.darkside.ru/news/171495/
Снова (6a30d3693577f42c01ed7e5bdf73328a5eb30dfa) новость о концерте, где
запрещены смартфоны. Люто поддерживаю подобное. Я совершенно не понимаю
людей, которые потратили деньги, припёрлись, но смотрят не на сцену с
действом, а в свои смартфоны, ещё и частенько вытягивая их на руках
загораживая обзор сзади стоящим. У меня только один вопрос возникает:
х*ли ты припёрся то вообще? Ты на концерте или где? Тебе надо просто
сделать check-in о том что ты побывал на нём, засветиться?
Вот и исполнители это отмечают: что вместо созерцания довольных рож они
видят только направленные на них плоские объективы смартфонов, что
ломает всю "магию", скрывает людей (которым ты играешь) и обратную связь
от них.
Sergey Matveev [Fri, 7 Mar 2025 08:48:41 +0000 (11:48 +0300)]
Альтернатива GPS
https://lenta.ru/news/2025/03/07/gps-alt/
https://ru.wikipedia.org/wiki/Чайка_(навигационная_система)
https://ru.wikipedia.org/wiki/РСДН-20
США беспокоится о том, что GPS-у то у них нет запасных альтернатив.
В d5354336306e39e53086e7f171b5dc5ad9347ea1 я узнал про "гиперболическое"
позиционирование. И что у нас, кроме ГЛОНАССа, до сих пор функционируют
и наземные системы. А вот космические системы (Парус, Сфера, Цикада,
Циклон) тоже выведены из оборота.
Sergey Matveev [Fri, 7 Mar 2025 08:35:19 +0000 (11:35 +0300)]
You can tune a file system, but you cannot tune a fish
https://man.freebsd.org/cgi/man.cgi?query=tunefs
https://unixhistory.livejournal.com/1808.html
Взято из man-а по tunefs.
.\" Take this out and a Unix Demon will dog your steps from now until
.\" the time_t's wrap around.
.sp
You can tune a file system, but you can't tune a fish.
Sergey Matveev [Fri, 7 Mar 2025 07:38:32 +0000 (10:38 +0300)]
Идеальный рабочий компьютер и домашний сервер
https://ounapuu.ee/posts/2025/03/07/perfect-home-server/
https://ounapuu.ee/posts/2023/10/25/the-optimization-treadmill/
https://www.apple.com/newsroom/2025/03/apple-unveils-new-mac-studio-the-most-powerful-mac-ever/
Свалились ссылки из одного блога о рассуждениях об идеальном домашнем
сервере. Плюс на днях посмотрел на новое железо от Apple.
Когда-то я тоже любил делать "подкроватный хостинг" на отживших своё
ноутбуках. Зачастую у них ломается "мобильность", но системный блок ещё
может продолжать жить. Какое-то время у меня работал GuruPlug: маленькая
коробочка размером с RPi втыкаемая напрямую в розетку, имеющая два
Ethernet-а и eSATA порт. Подобные решения я вообще не рассматриваю как
вариант, даже для маршрутизатора/шлюза и/или NAS.
Нужно, как минимум, 2 или более Ethernet порта. Или, если форм-фактор
позволяет, то несколько PCIe слотов. Собственно, в них можно сколько
надо вставить сетевых карт, это не дорого.
Нужна возможность подключения множества HDD, чтобы это было сразу же и
NAS-ом. Хотя в теории ничто же не мешает разделить NAS от сетевого
шлюза/моста, но зачем? И опять же это намёк на необходимость
использования PCIe для установки SAS/SATA HBA. Не всегда на материнской
плате будет достаточное количество портов.
В нём должен быть всё же более менее приемлемый по мощности процессор и
вменяемое количество оперативной памяти. Когда я был выходной Tor нодой,
хостил Freenet, I2P и всякое такое -- всё это вполне себе требовало
относительно не мало ресурсов. А раз там будет NAS, то это однозначно
ZFS файловая система, которой CPU/RAM не помешают. Одновременный scrub
моих зеркал из 16, 20 и 22 TB дисков отъедает ощутимую часть 6-ти
ядерного Xeon процессора.
Только серверное железо, не consumer grade -- за 25+ лет я убедился, что
надёжность и стабильность работы (без нежданчиков) это не пустой звук и
слова на бумаге, поэтому только серверные процессоры и материнские платы.
Почти всю жизнь в нашей семье были только AMD процессоры: i386 (возможно
i286 тоже), i486, K6-2, K6-3, Athlon -- потому что дешевле. С
приобретением ноутбука появился Intel. Не считая MIPS-ового netbook-а,
дальше у меня только Intel был. Судя по сторонним наблюдениям,
обсуждениям в рассылках: AMD не всегда полностью и до конца
поддерживается в современных ядрах, если речь про виртуализацию и прочие
штуки. Видел в новостях как яростно глючили и были чуть-ли не
работоспособны Ryzen первые, если ничего не путаю. Возможно и с Intel
такие же проблемы всегда были, но вот почему-то в памяти оседает чётко
только про AMD. Плюс Intel chipset-ы и сетевые карты это максимальный
шанс что оно без проблем будет работать не под Windows/Linux, в отличии
от чипсетов для AMD решений. Поэтому я слепо только Intel CPU и chipset
выбираю.
Совсем нет опыта с ARM процессорами. Не прочь бы это использовать и
попробовать, но серверные решения на ARM что я видел -- дорогие, дороже
amd64 based. Либо относительно слабые. Это правда означает низкое
энергопотребление, что тоже хотелось бы, но если оно не может вытягивать
resilver/scrub с полдюжины HDD, параллельно раздавать BitTorrent и всё в
таком духе -- то значит оно уже не выполняет возложенные на него задачи.
Ну и вопрос с совместимостью с ОС: будет ли на случайной ARM64-based
штуке работать FreeBSD из коробки?
Сейчас я уже не хотел бы отказывать от 10GbE сети. И чтобы была
возможность подключения нормальных кабелей (хотя бы DAC), то есть был бы
SFP, а не намертво встроенная витая пара. А это снова означает, как
правило, необходимость ещё свободного PCIe слота.
То есть, по сути мне то на самом деле нужно просто обычный сервер. Но!
Не rackmount, которые, как правило, сильно шумят. Плюс в пьедестал можно
обычные полноразмерные PCIe карты вставлять, в отличии от невысоких
rackmount-ов. Которые ещё и дороже за счёт крепкого корпуса будут, что
не критивно для пьедестальника. И большущие, а значит тихие,
вентиляторы. Вот и автор заметок тоже к этому же решению пришёл.
Решения из ноутбуков или дешёвых одноплатников -- нет, не рассматриваю.
Больше нервов и геморроя и ограничений будет, чем экономии хотя бы
просто на обычном desktop компьютере, куда вставили HDD и NIC
дополнительные.
А каким я вижу идеальный рабочий (мобильный!) компьютер? Да по сути мой
текущий Intel NUC всем устраивает. Ну точнее, да: я хотел бы чтобы там
было server grade железо, но такого или никто не предложит в компактном
форм-факторе или будет дорого (хотя и NUC-то отнюдь не дешёвая штука).
Тут уж без вариантов и надо смириться. Обязательно два M.2 NVMe (можно и
только SATA) порта должно быть (или свободный PCIe слот для этого),
чтобы иметь зеркало, а не единичный диск. Мой NUC этому удовлетворяет.
Было бы полезно иметь SATA кабель, для того чтобы произвольный диск во
время каких-нибудь rescue работ иметь, но для rescue бывает достаточно и
USB enclosure, не страшно. Два сетевых порта: мой NUC из коробки их
имеет, killer-feature. Плюс в свободном PCIe ещё и 10GbE карта
вставлена. DisplayPort вывод должен быть -- HDMI то ещё говно по
вероятности иметь проблемы. Помощнее процессор и памяти побольше
(минимум 64GB) -- это очень хочется на рабочей машине.
Но Intel отдала производство NUC-ов Asus, к которым у меня не такое
доверие к качеству, но с ходу я не могу вспомнить точно моменты где Asus
плохо бы себя показывать. Они делают, насколько помню, насколько
показалось, и ширпотреб и качественные server-grade решения -- широкий
спектр. Вижу что NUC похожего форм-фактора всё же продолжают делать,
хотя в рюкзаке оно уже не уместится, судя по фотографиям:
https://www.asus.com/displays-desktops/nucs/nuc-kits/nuc-13-extreme-kit/
Sergey Matveev [Thu, 6 Mar 2025 06:55:48 +0000 (09:55 +0300)]
Колоссальная коллекция CD-ROM игр типа Фаргуса
https://rutracker.org/forum/viewtopic.php?t=6560175
https://my.abandonware.ru/
Подборка на 3.5TiB образов дисков с играми от уже не существующих
компаний типа Фаргуса, Седьмого Волка и подобных. Фаргус -- это прям
моя молодость. Именно эти диски были на прилавках всех магазинов и в
основном только подобные и приобретались.
Sergey Matveev [Tue, 4 Mar 2025 09:50:26 +0000 (12:50 +0300)]
Tutorial по git-send-email
https://git-send-email.io/
https://git-am.io/
Там даже есть пометки относительно Proton Mail:
Protonmail does not support the open, industry-standard protocols
necessary for git send-email to work out-of-the-box.
Be advised that Protonmail is generally known to be a pretty bad
email host. They will munge up your outgoing emails and your patches
may fail to apply when received by the other end. Not to mention
their mistreatment of open source and false promises of security!
You should consider a different mail provider.
Sergey Matveev [Tue, 4 Mar 2025 05:40:18 +0000 (08:40 +0300)]
Кратчайшая история появления IP протокола
https://linkmeup.ru/podcasts/2761/
Понравилось:
[00:14:36.140 --> 00:14:38.520] Сегодня IPv6 поддерживается большинством крупнейших
[00:14:38.520 --> 00:14:41.080] интернет-компаний, хотя, конечно, есть и ретрограды,
[00:14:41.080 --> 00:14:42.780] которым милее работать через коктейли из костыли
[00:14:42.780 --> 00:14:45.400] и синей изоленты, образовавшиеся в результате эксперимента
[00:14:45.400 --> 00:14:49.160] 50-летней давности.
Sergey Matveev [Fri, 28 Feb 2025 14:03:46 +0000 (17:03 +0300)]
Ещё разные способы шифрования файлов. Kryptor, Saltpack
https://www.kryptor.co.uk/specification
https://samuellucas.com/2021/01/28/kryptor-v3.html
https://saltpack.org/
https://blog.cloudflare.com/hybrid-public-key-encryption/
https://datatracker.ietf.org/doc/rfc9180/
За последнее время я узнал о существовании всяких разных стандартов и
инструментов для всякого шифрования.
* Kryptor. Сравнивает себя с age и minisign. Хвалится поддержкой PSK,
аутентифицированного шифрования на публичных ключах, key commitment
(6529c5c19cb52f69f65fec3d17e718cc491d2c53), в противовес age. Есть не
prehashed версия подписи, в отличии от minisign. Квантовоустойчивость
только за счёт PSK. Неотличимость от шума.
* Saltpack. Основан на MessagePack кодировании.
* Описывает проблемы PGP: нет настоящего signcryption, выводит ещё не
аутентифицированные данные, нет анонимных получателей, много старого
legacy.
* Подписи поддерживает потоково, однако подписывает каждый мегабайт
отдельно, что я не очень одобряю (нагрузка на ключ). Не prehashed
версии нет. Использует SHA512, что не одобряю ибо медленно.
* В зашифрованных сообщениях есть repudiability, anonymity и сокрытие
получателей. Поддержка нескольких получателей, с защитой от того,
что кто-либо из них может изменить шифротекст (ведь ключ же есть у
группы людей уже). Всё заточено на дружелюбность к потоковой
обработке. И это тоже аутентифицированное шифрование на основе
публичных ключей, в противовес age.
Оба творения (хотя я больше присматривался к Saltpack) выглядят достойно
и хорошо с криптографической точки зрения. В моём текущем KEKS/CM, где
реализация на Go имеется, тоже сплошное дружелюбие к потоковой
обработке, не выдаются неаутентифицированные данные, есть key
commitment, есть не prehashed версия подписи, есть настоящие PQ
алгоритмы для шифрования, есть key ratcheting (serial external key
rekeying, как в других местах это ещё называют). И шифрование и подпись
(только для prehashed версии) распараллеливаются (что у меня и делается,
выдавая GiB/sec).
Но у меня нет аутентифицированного шифрования на основе публичных
ключей. Чем рано или поздно надо будет заняться. Но когда есть несколько
получателей, то это сильно всё усложняет, поэтому не спешу с этим. И
похоже, что реализация будет сильно похожа на Saltpack своей сутью,
чтобы быть дружелюбным к потоковой обработке.
Вообще, чем больше погружаешься в десятки всяких статей с IACR, то
офигеваешь от того же PGP (даже современного LibrePGP) и CMS, JOSE и
многим другим популярным вещам. Такое впечатление, что никто не
приглашает криптографов для разработки всего этого.
Sergey Matveev [Fri, 28 Feb 2025 13:59:41 +0000 (16:59 +0300)]
Слепой метод печати: стоит ли переучиваться?
https://habr.com/ru/articles/886758/comments/
Статью не дочитал, но осуждаю.
[...]
слепой метод печати. Освоить его сложнее, придется целенаправленно
его изучать
[...]
Категорически не согласен с этим утверждением, ибо я вот не учился.
Оно само со временем приходит. Если не приходит, то могу предположить,
что слишком мало времени проводится за набором текста. Соответственно и
доверия к дальнейшему тексту у меня нет. ~300 символов в минуту я делал
на ThinkPad. Но после подключения тактильной клавиатуры скорость сразу
же стала >400.
Sergey Matveev [Fri, 28 Feb 2025 08:02:02 +0000 (11:02 +0300)]
Chempat KEM combiner
https://datatracker.ietf.org/doc/draft-josefsson-chempat/
Вот есть множество вариантов как скомбинировать результат работы разных
KEM-ов (объединить полученный секрет от пост-квантового и традиционного
DH, грубо говоря). X-Wing (135afdcb923cd9463751d5766279c8426ee6ab00),
XYBERTLS, HPKE,
https://datatracker.ietf.org/doc/html/draft-ounsworth-cfrg-kem-combiners-05,
да и ещё всякие. По сути нужно просто захэшировать результат. По
хорошему ещё и учесть отосланный шифротекст, а ещё лучше и публичные
ключи участников, чтобы весь контекст учесть в результате. Плюс и
возможность бы задать сам контекст применения.
Кто-то не учитывает публичные ключи, но доказывает что это излишне, для
чётко заданных двух конкретных комбинируемых алгоритмов. Кто-то хэширует
в таком порядке, что не удобно делать потоково это всё. Кто-то полностью
суёт в хэш публичные ключи (как это я делал в KEKS/CM), которые в случае
Classic McEliece могут быть более мегабайта.
Но вот смотришь на предложение от DJB. Всё учитывает. Вместо полных
публичных ключей использует хэш от них, как и хэш от шифротекстов. Это
позволяет заранее захэшировать эти огромные значения. Публичный ключ
получателя наверняка будет один и тот же, если использовать для PGP/CMS
подобных применений. Шифротекст (эфемерные ключи) тоже зачастую можно
переиспользовать -- поэтому и хэш от него вычислить и переиспользовать.
То есть, получаем возможность дорогие вычисления сделать заранее и
переиспользовать (например если отправляем сообщение нескольким
получателям).
Ну вот почему именно DJB (и команда) предлагает такие простые, но
продуманные решения? Даже вот в таких мелочах.
Sergey Matveev [Thu, 27 Feb 2025 07:28:58 +0000 (10:28 +0300)]
Firefox с условиями использования
https://www.opennet.ru/opennews/art.shtml?num=62799
Я вот не понимаю людей, которые умудряются считать Mozilla какой-то
положительной компанией, а Firefox чем-то хорошим. По моему уже чуть ли
не лет десять, но как ни новость про Firefox, то жесть на жести в плане
ужаса со сбором данных, рекламой, слежкой. Забавно, но я те же самые
эпитеты из года в год к Firefox применяю: 84f4c26aab49c2b1665ab961e264b2f6d3e45b89 a3a49eccb47ca5b67ff9c52fca12c08121a130e1
Sergey Matveev [Wed, 26 Feb 2025 09:01:02 +0000 (12:01 +0300)]
Качество Debian документации, NTP
https://www.debian.org/doc/manuals/debian-handbook/sect.config-misc.en.html
https://docs.freebsd.org/en/books/handbook/network-servers/#network-ntp
Вчера видел как коллега устанавливал себе Debian современный. По
неаккуратности у него так вышло, что оставшаяся какая-то резервная
область с Windows установила этот самый Windows поверх его Ubuntu.
Но это я знаю со времён Windows 9x -- она без спросу перезатирает
всё стороннее.
Коллега задался вопросом как настроить NTP в нём. Быстрый поиск приводил
к systemd-timesyncd, но вот только по умолчанию эта штука не установлена.
Ok, уже даже мне стало интересно есть ли что-то в штатной документации
этого старейшего дистрибутива. Идём с сайта в "Debian Administrator's
Handbook", видим секцию "Time Synchronization".
Во-первых, мне кажется я впервые вижу, что рекомендуют вообще
использовать только ntpdate при загрузке для рабочих станций, мол,
достаточно, ибо они часто перезапускаются. По моему современные ПК у
большинства живут очень долго: ноутбуки постоянно спят и не
перезагружаются месяцами, а настольные ПК сотрудников тоже редко
выключаются, дабы удалённо на них заходить.
Во-вторых, нет никакой конкретики и примеров настройки. Есть упоминание
"ntp" пакета и в какой его конфиг смотреть. А теперь сравним с разделом
документации из FreeBSD, где и сам "ntp" стоит из коробки (хотя лично я
всегда везде chrony использую) и примеры конфигов приведены все, даже с
командами по перезапуску демона.
В-третьих, почему, будучи systemd ОС, Debian не упоминает даже
systemd-timesyncd? Это не Gentoo какая-нибудь, которая одновременно
несколько систем запуска. А timesyncd как-раз для чисто клиентских
устройств решение.
А ещё в этом Debian, в котором XFCE был выбран в качестве DE, есть
LibreOffice, но нет... ssh! Дистрибутив для секретарш, дожили. Хотя,
может оно и к лучшему -- наконец-то для них появился рабочий GNU/Linux? :-)
Sergey Matveev [Wed, 26 Feb 2025 08:00:44 +0000 (11:00 +0300)]
Снова Linux, снова Rust, очередной профессионал уходит оттуда
https://www.opennet.ru/opennews/art.shtml?num=62797
Дядька участвовавший в разработке "XFS, KVM, Trace events, SCSI и Slab
Allocator" ушёл из Linux сопровождающих. Такое ощущение, что как будто
из ядра уходит по мощному профи чуть ли не каждую неделю. И всё из-за
безумия с Rust-ом, а точнее переусложнением и так дико сложного ядра.
Всякие fetch.prune и fetch.all не одобряю чтобы были по умолчанию, ибо
человек должен решать как и что будет обновляться. Про всякую сортировку
ничего не могу сказать, ибо у меня нет проектов с большим количеством
веток. Заявление что column.ui clearly makes better у меня под вопросом,
ибо мне совершенно не нравится вывод в колонках.
Sergey Matveev [Tue, 25 Feb 2025 07:56:45 +0000 (10:56 +0300)]
Трафик сайта cURL
https://daniel.haxx.se/blog/2025/02/22/curl-website-traffic-feb-2025/
Около 2TB/день. Причём, преобладающая часть трафика это не скачивание
самого cURL, а их пачки CA сертификатов.
Sergey Matveev [Tue, 25 Feb 2025 07:42:51 +0000 (10:42 +0300)]
Муха и солёные огурцы
Увидел тут, что наша собака Муха, если ей дать солёного огурца, начинает
об него обтираться. Ну как любят собаки в тухлятинке поваляться. Вторая
собака, Таська, потом съедает этот огурец.
Sergey Matveev [Mon, 24 Feb 2025 18:02:32 +0000 (21:02 +0300)]
Алгоритмы ломают наше мышление
https://www.youtube.com/watch?v=QEJpZjg8GuA
Очень необычное для Technology Connections канала видео про
рекомендательные системы и их роль в нашей жизни. Автор предупреждает
об этом и советует переключиться на другие его творения, если идея не
нравится.
Понравилось там сравнение о том, что вот вы сидите в общепите и слышите
за соседним столиком разговор о чём-то вам интересном, то вы всё же не
встрянете в разговор, не подсядете за их столик, ибо это и невежливо и
вряд ли будет хотя бы нейтрально встречено. А вот соцсети это огромный
общепит, но в котором нормой является встревание в разговоры и, чаще
всего, совершенно не понимания их (прошлого) контекста. Что... сразу же
ведёт к срачам и негативным реакциям от всех сторон.
Половину ролика рассказывается про новостные ленты, которые на лету сами
генерируют что надо посмотреть человеку. Похоже, что у меня таких лент
даже в VK/Facebook вроде не было -- были только потоки информации на
которые я явно подписался. Единственный подобный источник это пара
новостных сайтов, с которыми фильтр критического мышления вывернут на
максимум. Ну и несколько новостных агрегаторов из мира ИТ, но в которых
не автоматизированные системы публикуют ссылки, а люди. И ещё из-за
плеча в общественном транспорте вижу в каких количествах абсолютно
бесполезной информации льют на мегабайтных/сек скоростях.
Автор ролика верно говорит, что если человек полностью отдаёт на откуп
генерирование мнения о том или ином вопросе/предмете машине, то он, как
минимум, полностью отказывается от ответственности за это мнение/решение.
Видимо, чем оно и подкупает людей. Масса хочет получить быстрый ответ
"хорошо или плохо?" (только два чётких цвета) на любой вопрос. И вроде
бы любому мыслящему человеку очевидно, что достаточно одной/двум
компаниям запрограммировать свои системы на отдачу нужного (им) ответа и
ты вот уже и запрограммировал массу людей так же считать и следовать за
этим мнением. Чего мы видим по геополитической обстановке в разных странах.
А ещё вспомнилось, не совсем уже по теме рекомендаций, но что куча людей
боится написать напрямую человеку сообщение. Некоторые мне даже это явно
говорили. Вот написать комментарий в публичном пространстве это как
нефиг делать. А вот адресовать комментарий или вопрос автору поста --
так какая-то мне неведомая преграда.
Причём у меня всё совершенно полностью от и до абсолютно на 100%
наоборот. Буквально вчера я пару писем отправил двум неизвестным мне
людям, имеющих опечатки и битые ссылки в своих статьях попавших мне
через Atom ленты. Я массу писем писал людям напрямую, но мне сложно
вспомнить когда бы я в последний раз писал комментарий. Наверное все
комментарии у меня были разве что только на Хабре (и то, потому что я
там статьи выкладываю), парочка на ЛОРе. Если у автора есть возможность
оставлять комментарии, но нет контактной информации как ему почту
отправить, то я вообще ничего не напишу.
Вот в целом мне совершенно не хочется обсуждать/комментировать что-то
публично, но переписка с человеком один-на-один у меня частенько
начинается как ответ на какую-то его запись в его блоге. Вообще
поддержку комментариев я в своём блоге делал что-то типа как ответ на
"слабо?" от одного человека, а не потому что лично я сам считаю это
полезным и нечто что лично я бы использовал.
Где-то в geminispace я даже видел фразу типа "хочется пообщаться с
автором, но у него нет комментариев в его gemlog". Совершенно мне не
ясно и не понятно это мышление. Причём сталкивался с таким не только у
молодёжи, но и у тех кто ощутимо старше меня.
Sergey Matveev [Mon, 24 Feb 2025 14:41:58 +0000 (17:41 +0300)]
Google ALTS
https://cloud.google.com/docs/security/encryption-in-transit/application-layer-transport-security
Вообще никогда не слышал прежде, но в Google свой собственный "TLS"
используется. Я был в курсе про IPsec на стыках из ЦОДов, но не более.
Вообще я скорее был бы удивлён если бы TLS использовался внутри. Судя по
описанию ALTS, то это протокол в котором Protocol Buffers вместо X.509
ASN.1 используются -- одобряю, разумно. У них многочисленные tradeoff-ы
явно отмечены, типа отсутствия PFS, сокрытия идентификаторов участников,
возможность KCI. Но я прекрасно понимаю, что для их внутреннего
использования и очень частого обновления сертификатов участников, всё
это разумные компромиссы. Они не поддерживают Ed25519 сертификаты в
Web/почте (только из-за них я ещё держал ECDSA сертификаты), но при
этом, внутри конечно же активно используют X25519.
Плюс моношифр в виде AES-GCM.
Sergey Matveev [Sun, 23 Feb 2025 07:18:56 +0000 (10:18 +0300)]
Отваливался активный USB удлинитель
В e83e818e20c039c6fc8a035154e3c732d98a9352 писал о том, что регулярно
отваливалось USB устройство. Но позже эмпирически было выяснено, что во
всём виноват активный удлинитель, вскоре вообще переставший работать.
Заменил на два соединённых 5м обычных кабеля. Не особо надеялся что
заработает, ибо везде же пишут про 3-5м максимальную дальностью. Но если
есть, как у инженеров, двухкратный запас прочности, то попытка не пытка.
GNSS приёмник заработал и вот уже почти неделю ни одного отвала. Демон
следящий за подключённостью устройства всё равно остаётся, но хоть тут
USB показывает себя приятно.
В блоге не писал, но USB хаб в, прошлом году приобретённом, мониторе
работал тоже паршиво -- время от времени отваливаясь со всеми
устройствами (клавиатура, мышь, звуковая карта).
Sergey Matveev [Sat, 22 Feb 2025 21:50:06 +0000 (00:50 +0300)]
Wayland вроде стал уметь WCG и HDR
https://www.opennet.ru/opennews/art.shtml?num=62737
В 826d90cc2ea12e59239d965728d9ec099e8d43c8 я писал о том, что
неожиданностью для меня стало отсутствие поддержки WCG/HDR и в
X.org и в Wayland. Ну про X.org ещё могу понять, но на дворе
2024-ый год, а модный современный так всеми популяризириуемый
Wayland всё это не мог. А тут новость, что в этом направлении
есть активное движение.
Sergey Matveev [Sat, 22 Feb 2025 11:50:02 +0000 (14:50 +0300)]
FreeBSD sysctl и дополнения для zsh
man sysctl имеет примеры для дополнения значений sysctl-а для zsh:
-N Show only variable names, not their values. This is particularly
useful with shells that offer programmable completion. To enable
completion of variable names in zsh(1) (ports/shells/zsh), use
the following code:
listsysctls () { set -A reply $(sysctl -AN ${1%.*}) }
compctl -K listsysctls sysctl
To enable completion of variable names in tcsh(1), use:
complete sysctl 'n/*/`sysctl -Na`/'
Эта ОС не перестаёт приятно удивлять и радовать такими мелочами и
дружелюбностью к пользователю.
Sergey Matveev [Fri, 21 Feb 2025 08:43:37 +0000 (11:43 +0300)]
Mantar -- Post Apocalyptic Depression
https://mantar.bandcamp.com/album/post-apocalyptic-depression
Клёвый у них вышел альбом! Прям чуть ли не эталонный по своему
фирменному звучанию и мотивчикам. Предыдущий, 2022-го года, прям...
скучный, совсем не запоминающийся, сразу забывается.
Sergey Matveev [Fri, 21 Feb 2025 08:26:01 +0000 (11:26 +0300)]
Matrix это творение Моссада?
https://web.archive.org/web/20201219014215/https://samba.noblogs.org/post/2018/08/27/matrix-org-a-federated-app-funded-by-a-mossad-company/
https://web.archive.org/web/20201104154843/https://github.com/matrix-org/matrix-doc/issues/979
https://0x19.org/posts/2023-06-09.php
Как тут пишут (но я не проверял, да и не хочу), Matrix с момента
создания годами спонсировался Amdocs компанией, которая засветилась
много раз на сборе (развед)данных для Израиля. Китай (и другие страны)
их вышибли отовсюду у себя из-за этого.
А что плохого в Matrix при этом? Лично я относительно спокойно отношусь
к творениям армий и спецслужб, ибо кому как не им необходимы безопасные
коммуникации? Но и надо держать ухо востро, ибо кому как не им и
разведкой заниматься. А в Matrix, являясь не федеративной службой
доставки сообщений, а службой по синхронизации состояний баз данных,
активно участвующие сервера обмениваются метаинформацией.
Автор статьи также пишет:
functionally centralized (I have a suspicion that the devs
intentionally made it as difficult as possible to self host in order
to scrape more metadata and to sell more SAAS solutions)
Вот тут полностью соглашусь с тем, что разработчики как-будто специально
всё усложнили, дабы ты не поднимал своего решения. Я не смог поднять
работающую связку из своего Matrix сервера, клиента и чтобы с федерацией
к matrix.org. Пробовал и Python версию и Go. Уже не помню детали, но при
каждой попытке то так, то сяк попробовать, но какой-то из компонентов
(клиент, сервер, федерация) не работал. И очень много я слышал
рекомендаций из серии "забейте поднимать свой Matrix сервер, просто
используйте matrix.org".
Sergey Matveev [Fri, 21 Feb 2025 08:07:59 +0000 (11:07 +0300)]
Минимализм ПО это максимализм UNIX
https://0x19.org/posts/2023-05-21.php
Верно замечает автор, что software minimalism это: to "reduce code
complexity", avoid "bloat", что "increases the maintainability", что, в
свою очередь, "decreases the total number of bugs". "Programmer
sacrifices cleverness for readability" -- что прямо противоположно
(3cd3d587c3909ae8da1f6bdde9ecaaf3bbcf87b9) Rust-у в моём понимании.
"Unused features are unaudited attack vectors"
"Any free UNIX that is not Linux is sufficiently minimal" -- похоже на
правду :-). "Any Linux without {systemd, freedesktop, pulseaudio, dbus,
wayland, GTK, KDE, anything GNU whatsoever} is sufficiently minimal".
Впрочем, в UNIX мире тоже полно так себе продуманных вещей, типа Make,
Autotools (хотя, возможно для своего времени оно стоило того), SysV
систем инициализации как пример.
Sergey Matveev [Fri, 21 Feb 2025 07:58:10 +0000 (10:58 +0300)]
Боязнь IPv6
https://techlog.jenslink.net/posts/ipv6-is-hard/
Как написал источник откуда я получил ссылку:
If it doesn't work it doesn't mean it's hard, fix it instead.
Полностью согласен с этим. IPv6 я считаю более простым и куда более
продуманным чем IPv4. Если не работает, то чини, исправляй, делай
грамотно, включай голову, забывай про подходы использованные в
obsolete legacy мире IPv4.
If you do IPv6 take it seriously. If you don't take it seriously,
don't do IPv6. That leaves to people thinking that IPv6 is hard and
can not be done.
Sergey Matveev [Thu, 20 Feb 2025 17:54:39 +0000 (20:54 +0300)]
Ink console
https://blog.zarfhome.com/2025/02/the-ink-console
https://inkconsole.com/
Наконец-то портативная консоль не для всяких этих ваших стрелялок и
бродилок, а для interactive fiction игрушек! Но если серьёзно, то без
клавиатуры... и без софта или ручки под рукой для рисования карт...
не уверен что будет хорошим user experience-ом. Впрочем, я тот ещё игрок :-)
Sergey Matveev [Thu, 20 Feb 2025 10:48:44 +0000 (13:48 +0300)]
zstd --patch-from
https://www.linux.org.ru/news/opensource/17890558
https://github.com/facebook/zstd/releases/tag/v1.5.7
Только что вышел новый zstd. Узнал о существовании --patch-from штуки,
которая и прежде был (но кто ж читает документацию!?). Попробовал --
действительно, делает прям патч, который можно применить относительно
уже существующих данных.
Я применяю bsdiff для обновления (bf0b7e0357b8bf41a874a85ab55f920a0fba7d59)
своих web-серверов, ведь у них нет явного конфига и любые изменения это
пересборка самого демона, который весит несколько мегабайт. Тогда как
bsdiff патчи занимают десятки килобайт (если не прыжок с мажорной Go
версии на мажорную произошёл). zstd делает патчи в разы большего
размера, но это всё равно сильно лучше чем передавать полностью все эти
бинарники. Думаю, что буду zstd использовать теперь для этих целей,
просто чтобы иметь меньший зоопарк инструментов. Впрочем, под FreeBSD
bsdiff идёт из коробки.
Попробовал и новую --max опцию. Памяти она жрёт уйму: для двух потоков
более 30GiB. Поэтому я не могу утилизировать все свои ядра на компьютере
(мало памяти). Ну и медленно оно конечно работает. Для больших файлов
вряд ли вариант -- уж очень долго.
Sergey Matveev [Thu, 20 Feb 2025 07:53:15 +0000 (10:53 +0300)]
Rust в Linux всё же будет
https://www.opennet.ru/opennews/art.shtml?num=62748
https://www.opennet.ru/opennews/art.shtml?num=62756
https://lore.kernel.org/all/2025021954-flaccid-pucker-f7d9@gregkh/
https://lore.kernel.org/lkml/Z7SwcnUzjZYfuJ4-@infradead.org/T/
Не то чтобы я сильно переживал и интересовался происходящему в Linux,
но, к сожалению, он, как Windows, окружает повсюду. И двое главных
решили что Rust однозначно будет в ядре.
Для меня Linux уже давно мёртв и не рассматривается, но теперь это ещё
одна причина не думать о нём. К Rust-у у меня резко негативное отношение.
Одна из причин: его авторы/разработчики плевать хотели на то, чтобы мы
могли его собрать из исходных кодов. Мол, бери бинарники которые мы дали
и не вякай. Возможно что-то за годы поменялось, но сторонний mrustc
проект на FreeBSD у меня не вышло собрать. Поэтому это по сути закрытое
ПО, ну или как минимум доступное только на GNU/Linux, под которым у меня
на работе всё же вышло собрать на Devuan большим количеством шагов,
которые не факт что удастся повторить, ибо то одни, то другие патчи на
сам Rust требовались, то одни, то другие пакеты из его Cargo. Судя по
всему, современные программисты на Rust это всякая молодёжь, которая
вообще не понимает как так может быть, что при сборке/установке софта
может не быть Интернета и что такого в том, чтобы использовать бинари? a109e79ace807e6d0caa8c682f9d507725a51356
Плюс он жутко сложный. А я убеждён, что одна из главным проблем в ИТ это
(безосновательная) сложность. Да, это наверное говорит о моей
некомпетентности и не высоком профессиональном уровне, но я за неделю не
смог зашифровать AES-ом файлик. Это когда я всё же решил углубиться в
этот язык для понимания что это такое и может быть он не так уж плох.
Взяв его документацию и под Devuan собранную версию (по NFS-у из FreeBSD
правил код, а по ssh-у запускал компилирование под GNU/Linux в виртуалке)
я так и не смог осилить: открытие файла, чтение в память, инициализация
AES с ключом, шифрование, запись в другой файл. Надо быть очень умным
для его использования. Может быть люди тем самым и любят этот язык? Он
сам по себе отсеивает некомпетентных и у них не будет шанса написать
какое-нибудь говно забагованное? В этом случае у нас действительно
тотальная нехватка квалифицированных специалистов. Но даже знакомые
коллеги, кто на Rust ради интереса реализовывали ASN.1 с CMS-ом, после
этого ничего на нём и не писали и не стремятся где-либо ещё попробовать
его применить.
Плюс он открыто поддерживал нацистов и террористов в 2022-ом, что крайне
негативное впечатление производит о людях руководящих его разработкой.
Да и другие решения (48f294ee80ca459983f1e403497f3d60ee35f37f) не
связанные напрямую с технологией как таковой тоже заставляли людей
отворачиваться.
Sergey Matveev [Thu, 20 Feb 2025 07:16:23 +0000 (10:16 +0300)]
CAP теорема на собеседовании
https://habr.com/ru/companies/ru_mts/articles/882656/
https://en.wikipedia.org/wiki/CAP_theorem
Очередная статья про ИТ собеседования, плохие вопросы и всё такое
прочее. Как в ней и сказано -- 1001-ая, тьма их.
Но в ней на картинке есть какой-то пример с: "как реализовать новостную
ленту со строгой консистентностью, высокой доступностью и гео
резервом?". И я вот не понял: типа высмеивают этот вопрос, мол типа он
сложный что ли? Я почти такой же вопрос задаю на собеседованиях: "какая
их современных существующих СУБД могут обеспечить и консистентность и
доступность и устойчивость к обрыву связи между ДЦ?". Уж извините, но
это простой вопрос и на него простейший ответ: никакая. Как сделать
ленту новостей заявленную? Никак! Ну если не вдаваться в особые режимы
работы типа переключения в read-only режим и всё такое прочее. В ivi
поэтому для разных задач (например работа с финансами/балансом
пользователя и показом ему истории просмотра) разные подходы и БД
использовались.
Может быть я не понял эту высмеивающую картинку, но я подобное спрашиваю
на собеседованиях на junior-ов. Нет, чётко мне пока ещё никто не
ответил "никак", но ход мыслей уже у двоих был очень близок к такому
умозаключению, про CAP-теорему слышали.
Между тем, недавно мы уволили студента-стажёра-практиканта. Вот вроде бы
и головастый, соображает, но производительность труда была просто никакой.
Всё что успел сделать за почти три месяца, так это написать тесты на
Python и Go для KEKS кодека. Но... в которым почти каждую строчку мне
всё равно пришлось править.
Недавно на собеседовании хотя бы один человек смог правильно ответить на
мой вечный вопрос "по какому протоколу работает Интернет?". Другой же
ответил "HTTP". Эх, ну вот почему так удручающе мало людей хоть как-то
интересуются сетями и совершенно не понимают что происходит когда они
ежедневно путешествуют по Паутине?
Возможно это нам HR/рынок/HH/хз подкидывают такие варианты стажёров, а
другие разбегаются по иным компаниям, крупным наверняка, но в моё время,
что я, что все мои знакомые ИТшники студенты, даже начав работать со
второго курса, но каждый день приезжали на работу, пускай и не на полный
рабочий день. А сейчас складывается впечатление, что у молодёжи сама
мысль о каждодневной работе просто невозможна. На последних курсах так у
нас наверное половина одногруппников и моих знакомых из других
институтов уже даже продвигались по служебной лестнице, были вполне себе
ценными кадрами. Но это и старшее поколение мне подтверждает: молодёжь
сейчас не хочет работать, не понимает как можно вкалывать хотя бы по 8ч
в день, нормально и полноценно. Я считаю, что слишком много у нас
сюсюкаются с молодёжью (говорю только про ИТ сферу).
Sergey Matveev [Tue, 18 Feb 2025 08:20:39 +0000 (11:20 +0300)]
Вывожу age из использования
В 4eed9f47294d277e84f8ba1451b1b4ced04a09de упоминал, что начал делать
аналог CMS EnvelopedData контейнера. Всё уже настолько устаканилось, что
бОльшую часть всего перешифровал в cm/encrypted контейнеры.
Изначально у меня вовсю использовались слова типа "pki" и сертификаты.
Выпилил любое упоминание PKI, решив назвать все эти криптографические
форматы "cm"-ом -- cryptographic messages. И коротко и не пересекается с
чем-то другим распространённым. Сертификаты заменил просто на публичные
ключи. У которых, как и в случае с PGP, могут быть подписи, не без этого.
ChaPoly шифрование распараллелил, аналогично как делал в реализации на
основе деревьев Меркла (f77b37849893c17724125acc62916d01521e363d). Всё
равно до сих пор не понимаю где затык, но утилизировать все ядра не
выходит -- 2.5+GiB/sec потолок, хотя он достигается на 3-4 потоках
шифрования уже, половина ядер остаются у меня не использованными.
Чтобы рандомизировать шифрование, на всякий пожарный, решил nonce для
ChaPoly делать не просто счётчиком, но подмешивать в него неизвестное
злоумышленнику значение, как это делается в TLS 1.3.
Причесал работу с HKDF-ом, ибо где-то его Extract шаг не нужен, где-то
нужен. В целом зоопарк стал более упрощённым. ChaPoly для DEM-а не
отличается теперь от ChaPoly применяемом в KEM-ах (для key wrapping).
Доработал утилиты cmkeytool, cmenctool, cmsigtool, cmhshtool для более
удобной интерактивной работы с человеком. Собственно, их и применяю уже
для своих нужд, радуясь огромной скорости работы без бутылочного
горлышка в виде одного ядра.
Обнаружил, что вообще нет ни BLAKE3 реализаций на Си, ни BLAKE2
распараллеленных. Ни ChaPoly распараллеленного не смог найти (возможно
оно только в составе более сложного софта). Такое впечатление, что
распараллеливание толком никому не нужно и все удовлетворяются
скоростями на одном ядре. Но ChaPoly у меня даже до GiB/sec не
дотягивает. Аппаратно ускоренный AES-OCB в GnuPG вроде тоже что-то около
GiB/sec был, как и BLAKE2b. Это конечно относительно не мало, но всё же
SSD диски во много раз быстрее, как и суммарная производительность всех
ядер процессора. Понимаю что parallel код сложнее устроен, но он же
стоит того. А вот нифига свободных и открытых реализаций не видно, кроме
как на Rust попадаются.
Добавил возможность шифровать приватные ключи тем же самым cm/encrypted
контейнером но с применением KEM-а на основе парольной фразы. И
прозрачно использовать такие ключи при дешифровании. Типа весь основной
функционал age повторил удобный.
А ещё в KEKS появился новый тип данных: MAGIC. 16-байтная строчка
начинающаяся с "KEKS". "K" является тэгом, не используемый прежде
codepoint. 12 байт произвольных данных можно засунуть в неё.
Предполагается, что MAGIC будет просто добавляться в начало файла, чтобы
хоть как-то намекать на используемый в нём тип данных. Ведь ни в ASN.1,
ни в JSON невозможно это легко и просто понять. В ASN.1 любят делать
контейнеры типа {"type": "SignedData", "data": ...}, но с этим не очень
удобно работать если хочется делать аналог json.Unmarshal -- оно всё
загрузит в память. А MAGIC можно потоково декодировать просто как один
единственный KEKS-атом, а дальше продолжить чтение из io.Reader.
И для удобства использования и в cm/signed и в cm/encrypted применяется
BLOB вне основной структуры. В случае с cm/signed:
MAGIC(cm/signed) || cm-signed-prehash || BLOB(detached-data) || cm-signed
и подписывается:
[detached-data] || /load || sig-tbs
всё это позволяет не делать потоковое декодирование данных, а частями
засовывать в io.Reader/hash.Hash и подобные. KEKS позволяет потоково
работать, как и сама Go реализация, но это не так удобно и просто как
сделать .Unmarshal. В случае с cm/encrypted:
MAGIC(cm/encrypted) || cm-encrypted || BLOB(encrypted-data)
А ещё обнаружил, что в http://libpqcrypto.org/command.html софте от DJB
вовсю используются не только stdout файловые дескрипторы. В моём
cmenctool я один из таких дополнительных "файлов" использовал для вывода
bind значения (сейчас его не стало). А в libpqcrypto они вообще
используются вовсю для передачи и приватных и публичных ключей. Чем
дальше, тем больше у меня появляется схожих идей и ещё больше одобрения
того как делается DJB софт.
Sergey Matveev [Mon, 17 Feb 2025 10:01:10 +0000 (13:01 +0300)]
Прочитал Real World Cryptography
https://www.manning.com/books/real-world-cryptography
Хорошая книжка по прикладной криптографии. Самое главное: она хотя бы
упоминает и показывает как в действительности криптография применяется,
без всех этих "RSA зашифровали сессионный ключ" которым полны другие
книги и люди совершенно теряются и не понимают где же "асимметричное
шифрование" в TLS/IPsec/SSH/Signal/whatever протоколах то?