Sergey Matveev [Fri, 25 Dec 2020 16:12:20 +0000 (19:12 +0300)]
Год прошедший
Уже традиционно надо подвести итоги года моей жизни.
Этот год меня удручил больше прошлых.
* Профессиональное выгорание. И "восстановления" сейчас до сих пор нет
(некоторые говорят что у них и спустя годы возврат производительности
так и не происходит). Настолько бесполезного года в плане работе у
меня не было никогда. Буквально никогда: я вообще ничего не сделал за
этот год весомого полезного, хотя задачи интересные и желанные.
* От бывшего коллеги, мнение которого было ценно, неожиданных
нелицеприятных вещей узнал, после чего почти ни с кем из прошлой
команды не общаюсь. Пересмотрел своё отношение к людям в целом
* Научился ли я вообще хоть чему-нибудь в этом году? Единственное что
приходит в голову -- redo. И goredo это единственное что новенькое
написал из личных проектов. Наверное можно сказать что это год redo.
* Плюс начал программировать на Си. Что в целом нравится. Но пока ещё
никакого полезного выхлопа (чтобы написанное начало использоваться
где-либо).
* Обнаружилось что зрение дико упало, причём с сильной разницей по
глазам. Сменил очки, а то даже минимума, формально необходимого для
жизни, не было.
* Из-за карантина, только в начале года был на нескольких концертах.
Жутко скучаю по ним! Да и за билеты вряд ли увижу деньги, что не малые
потери.
* И никуда не ездил -- не то чтобы в Крым какой-нибудь, но даже в Нижний
Новгород не вышло. Только в Москву и выбирался.
* Пару недель пожил с собаками. И неделю с кошками -- что для меня было
совершенно новым опытом.
* Ставил себе условие чтобы пройти AMFV и Planetfall игры, но после
первой части в AMFV так и не сдвинулось дело.
Но в целом и не сказать что что-то сильно плохо, кроме выгорания (ведь
профессиональные умения это единственное чем я ценен был). Родные и
друзья здоровы, барбосы здоровы -- это главное. Путин здоров, новое
правительство работает, работа для инженеров есть, импортозамещение идёт
нешуточными шагами. Третья мировая из-за террористических атак со
стороны США и Израиля не началась.
Sergey Matveev [Thu, 24 Dec 2020 11:31:59 +0000 (14:31 +0300)]
ExFAT не позволяет использовать " в имени файла
https://en.wikipedia.org/wiki/ExFAT
Внезапно сегодня открыл для себя для exfat не даст записать файлы с
двойными кавычками в имени файла. Коих у меня прилично среди аудиокниг.
А ещё файлы с двоеточием тоже не прокатят (тоже полно). Microsoft всё
равно найдёт возможность поднасрать людям.
Sergey Matveev [Thu, 24 Dec 2020 09:51:21 +0000 (12:51 +0300)]
Что ненавижу в Си
1) Когда записывают if/for без фигурных скобок. Да, это 1-2 строки
экономит, но когда надо вставить ещё какую-нибудь команду, например
print для отладки, то начинаются пляски с добавлением. А ещё не всегда
замечаешь что фигурных скобок нет, вставляешь print, и только он после
if срабатывает, а штатная, следующая после него команда, уже находится
вне if.
2) В целом ненавижу как возвращается успех/не успех выполнения функи.
Такое впечатление, что половина людей/фунок считают int=0 успехом
выполнения, а половина int≠0, и ещё меньше нуля отдельная категория. И,
как правило, по названию функи не поймёшь что от неё ожидать. Вот если
cmp, то скорее всего 0 означает равенство. Вот только фиг -- есть и
исключения. Если функа называется is_equal, то точно стоит ожидать что
возвращает 1 при равенстве, чтобы можно было записать if(is_equal), но
это редкость встретить такие говорящие названия. Ну и лично я, когда
вижу, восклицательные знаки, то это ассоциируется с чем-то негативным,
отрицательным, хотя 100500 мест уже видел где if (!...) это проверка на
успешность выполнения. Плюс бесит отсутствие ЯВНЫХ указаний что
ожидается от проверки (==0, >-1, !=0, и т.д.) -- но это касается также и
кода для Python, где видел тьму ошибок совершаемых из-за этого. А ведь в
Unix return code = 0 это успех, хотя в Сях оно eval-ится в false.
После этого понимаю насколько Go всё же молодец тем, что if проверяет
только и только булевы выражения, а не эти неявные преобразования в них.
Если какие-то функи возвращают NULL, то это значит что не успех. А в чём
ошибка? Или глобальные переменные смотри или в, указанную отдельным
аргументом, переменную с результатом смотри. Или >0 -- успех, ==0 --
такая-то ошибка, <0 -- другие такие-то ошибки.
После этого особо стал ценить задумку с error типом в Go. Вообще в Сях я
по сути пишу как на Go. Практически все функи возвращают структуру
которая как-бы является error-ом, внутри которого есть .code возможно
говорящий что ошибки не было. Все функи возвращают error этот, почти без
исключений. Это и возможность кучу дополнительной информации передать
сопутствующей ошибки. Код везде становится очень простым из серии:
err=MyFunc, if(HasErr(err)).
Ещё я всюду и везде делаю не просто указатели на массивы, но и рядом с
ними size_t размер данных. А в идеале вообще можно и нужно бы было
делать struct из указателя и размера, по сути делая недо-slice из Go.
Для входных read-only данных это const size_t, а для выходных это
size_t*, куда записывается кол-во данных записанных, или возвращается
ошибки и записывается сколько данных в dst нужно иметь, но не хватает.
Особенно видя OpenSSL код, я ужасаюсь кучей потенциальных проблем
которые может вызвать всё это отсутствие указания явных размеров и как
нужно доверять разработчику. Собственно, понимаю что с таким кодом
ненавидеть Си -- благое дело и здоровая реакция.
Отдельная боль это конечно очистка данных при выходе из функи, при
ошибках. Если в Go хотя бы есть garbage collector, то в Си нужно не
забывать освобождать память. В Go хотя бы есть defer или, как минимум,
анонимные функции. В Сях нужно очень аккуратным быть. Я делаю
int needCleanup = 0 переменную, а дальше с каждым действием требующим
"очистки"/освобождения, её инкрементирую (if (malloced == NULL);
needCleanup++). А при очистке декрементирую (free(...); needCleanup--) и
вставляю assert(needCleanup == 0) перед каждым return-ом. Костыль,
недоверие к самому же себе, но этот подход не раз уже окупился у меня на
практике.
Sergey Matveev [Thu, 24 Dec 2020 08:03:09 +0000 (11:03 +0300)]
LLDB нравится
http://lldb.llvm.org/
Последние много использую LLDB и с ним очень приятно работать!
Во-первых, любо что не надо ставить GDB, имея полностью non-GNU
окружение. Во-вторых, в LLDB синтаксическая подсветка и куча всего
разукрашенного, что помогает работе. Не знаю схожи ли они по
возможностям или GDB всё же мощнее, но LLDB для моих нужд хватает с
лихвой. Нет правда интеграции с Vim-ом -- GDB протокол общения в LLDB не
заложен.
Есть некоторые неприятные вещи, типа необходимости указывать номера
строк и смещения (для memory read команд) через аргументы к функции. Как
программист я понимаю что это упрощает парсер, но удобству чуть вредит.
Но чтобы расставлять breakpoint-ы, то для Vim просто сделал штуку
самостоятельно высчитывающую строку для LLDB:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/whereami.vim;h=8c55eded5f032db1fed06e8819392f70a01c70a3;hb=HEAD#l8
Sergey Matveev [Wed, 23 Dec 2020 19:57:22 +0000 (22:57 +0300)]
Кот там
https://www.yaplakal.com/forum7/topic2069077.html
На Модели для Сборки в том числе такие короткие рассказы на несколько
минут читают. Нравится мне когда забавно смешивают и что-то очень старое
(домовых) и современное. И ведь кстати домового я сам повесил (не
самого, а за верёвочку) при входе. У родителей домовой в квартире тоже
водится в коридоре.
Относительно недавно даже спорил что домовой и барабашка это нифига не
одно и то же. И всякая Wikipedia говорит что я прав. Барабашка не
позитивная штука, более того, вообще в XX веке в СССР появившаяся. А
домовой, как и Леший -- не обязательно добрый, не обязательно злой.
Sergey Matveev [Wed, 23 Dec 2020 16:53:13 +0000 (19:53 +0300)]
Toshiba НЖМД NAS N300
Временно в руках оказался сабжевый диск. Собственно, его я заполнял
рандомом (cd2aaf4bf3c195d45e6ffcd59145decc4e9d7a5f), чистил и проверял.
Первый диск дома который более 200 MBps последовательной записи/чтения
скорость имеет. SMART его смотреть одно удовольствие: столько всего есть!
Очень приятное впечатление оставляет.
Сейчас я для себя даже делаю заметку что присматриваться стараться к
Toshiba дискам бы, ибо с ними у меня только самый положительный опыт
был. Hitachi/HGST до этого были моим кумиром, но, говорят, что сейчас
они уже не те пошли, хотя на практике у меня с ними проблем ещё не было.
Так то я штатно покупал Western Digital (главное не Green!), но и
Toshiba не сильно дороже, зато один SMART какой приятный! Главное чтобы
не Seagate.
Sergey Matveev [Wed, 23 Dec 2020 12:04:41 +0000 (15:04 +0300)]
vi то оказывается поддерживает тэги тоже
Я вообще стараюсь дифференцировать vi и vim когда упоминаю какие-то
фичи. Большинство забывает что есть масса vi версий, а не этого жирного
монстра vim. И в FreeBSD именно (n)vi стоит, никаких vim. И я на работе
как-то даже был удивлён что некоторые не могут работать в vi, ибо отдают
исключительно vim-specific команды. Хотя у меня даже не сразу приходит
осознание что я не в vim -- работаю, значит, "канонично". Так вот nvi
оказывается поддерживает ctags tags из коробки (который тоже идёт из
коробки в FreeBSD).
Sergey Matveev [Wed, 23 Dec 2020 07:39:28 +0000 (10:39 +0300)]
Бесшумный мощный ПК
https://fabiensanglard.net/tb3/index.html
https://fabiensanglard.net/the_beautiful_machine/index.html
Не часто встречаю интересные компьютерные установки чтобы глаз зацепился
за них. И сам ПК интересен своей радиаторной системой и отсутствием
вентиляторов (хотя мне казалось что вентиляторы с большим диаметров
бесшумны -- или такой уровень шума всё равно не считает отсутствием?). И
как всё подвешено везде и спрятаны провода.
Sergey Matveev [Tue, 22 Dec 2020 21:26:56 +0000 (00:26 +0300)]
Быстрое заполнение диска рандомом
Если нужно заполнить диск рандомом (перед тем как отдать, сделав
заполнение нулями или просто для проверки), то dd if=/dev/urandom делать
не стоит для больших скоростей, ибо под FreeBSD используется полноценная
Fortuna PRNG, потребление и ротирование энтропии и у меня скорость
работы где-то 70-80 MBps, что не может насытить современный SATA диск.
Можно использовать (go)hpenc утилиты для генерирования более быстрого
рандома, но я делаю проще:
это конечно не запишет рандом в начало, так как там будет заголовок
GELI, но это уже можно "по старинке" перезаписать. При этом по сути всё
будет упираться в скорость AES-XTS (по умолчанию), который на
современных Intel процессорах и ускоряется ещё (поэтому в CPU не
упереться). А рандом будет по всему диску, так как хоть данные и ключ
одни и те же, но XTS в качестве tweak-а принимает порядковый номер
сектора, который везде будет разный. Вообще и размер GELI сектора можно
выставить большего размера, что ещё сократит нагрузку на CPU.
Sergey Matveev [Tue, 22 Dec 2020 19:32:22 +0000 (22:32 +0300)]
Шпионаж амишей
https://textfiles.libsyn.com/the-amish-shareware-episode
У Jason Scott интереснейший выпуск подкаста где, как выяснилось (хотя и
нет 100% уверенности, возможно это даже был розыгрыш), в коммуне амишей
выделили человека для того, чтобы он дал прослабление себе и начал
работать с компьютерами. Он даже поднял BBS-ку и общался с людьми, плюс
собирал кучу shareware. И каждый год, встречаясь со старейшинами,
докладывал и показывал как общаются и чем живут люди в окружающем мире.
Амишевская разведка. А когда его "служба" шпионская закончилась, то он
Jason Scott-у решил отдать все свои накопления ИТшные.
Sergey Matveev [Tue, 22 Dec 2020 19:26:05 +0000 (22:26 +0300)]
broot заменяет TOML на Hjson
https://dystroy.org/blog/hjson-in-broot/
Что такое broot я понятия не имею, но со всем остальным прошёл
аналогичный путь как и автор: JSON, INI, YAML, TOML... И точно также
аналогично, даже переписав NNCP на TOML (где конфиги далеко не в
несколько строек могут быть), убедился что TOML не для людей. Он прост
для работы компьютером, но для человека... нет уж. Hjson действительно
отличнейший компромисс во всём что я видел.
Sergey Matveev [Tue, 22 Dec 2020 10:51:41 +0000 (13:51 +0300)]
Как индексируется исходный код?
https://lobste.rs/s/ujr9mg/how_do_you_index_code_your_projects
Автор вопроса описывает свой use-case:
* Fuzzy find and open a file in the project (FZF :Files or Ctrl+P)
* Fuzzy find and jump to line in the open buffer (FZF :Lines)
* Grep the project and jump to line (FZF :Rg)
но прыгать на нужные "символы" (определения фунок и прочего) было бы
очень здорово. Когда-то он использовал vim-gutentags, но это медленно
для больших проектов и нужно не забывать про файл с тэгами.
Да, создание тэгов для больших проектов может занять время (у меня
наверно самые большие проекты по 10-15сек индексировались), но делается
это ведь достаточно редко. Даже с активно разрабатываемым проектом не
факт что за целый день я запущу переиндексацию (инкрементально вообще
никогда не пробовал). Так что это терпимо. Меня больше напрягает размер
этого файла по несколько мегабайт в лёгкую. И когда мне надо работать с
OpenSSL и libtasn1 кодом, то я просто делаю символические ссылки на их
исходник в своём проекте и ctags их отлично индексирует тоже.
Зато его простота, возможно генерировать хоть руками и интеграция в Vim
из коробки -- это стоит того! Достаточно узнать несколько команд для
навигации по тэгам и вот уже из коробки можно удобно работать с тьмой
языков программирования, не ставя для каждого свои уникальные плагины
или ожидать наличия LSP (в котором и прыжки по определениям не факт что
будут), который у меня в любом случае (ну кроме Go) ещё и медленнее
будет работать. Даже при наличии работающего goto-definition в LSP я всё
равно не использую его возможности (1ae39d6ffa08741a2564f3e095508ce49b11bf03),
как минимум, ради скорости (интерактивного перехода).
Для Python я ни у одного человека с Vim-ом не видел чтобы их
language-aware плагины достойно прыгали на определения. Даже знакомый с
Emacs-ом всё равно "путешествует" по коду через тэги. Конечно, всё ещё
зависит и от программы которой создаются эти тэги. Я недавно перешёл на
Universal Ctags (31a56f5de0234738b454049f5a18a8d8b65a11a3) потому что
Exhuberant не знал ничего про Go.
Для управления tags файлом я давным давно написал функу помощник и
никаких плагинов никогда не использовал за ненадобностью:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/ctags.vim;h=a76e736dc4f8528ee3ca7d9ae4569dcbc3ff80ed;hb=HEAD
Где-то в корне проекта надо самостоятельно создать "tags" файл (touch
flags), а дальше вызвать ":Ctags ЯЗЫКИ" ("C,C++", "Go", "Python", и т.д.).
Вот и всё что у меня есть на эту тему. А дальше штатные встроенные
команды для тэгов.
Автор использует FZF для поиска файлов. Не приживались у меня как-то все
эти fuzzy finder-ы. Но мне очень нравилось как работает дополнение пути
в zsh-е и я использую самописный плагин для вызова zsh, осуществления
дополнения в нём: 72bfea8fec7934c5c70a6a6795e48b8c8c9e920c
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/zshfe.vim;h=fd5e5b14616596802f7eaf01e804e34e0eadb936;hb=HEAD
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/zshfe.zsh;h=0dfcd68e96761bff887a860988e5ad7b1338322a;hb=HEAD
Выглядит ужасно (vim запускает subprocess zsh, который в свою очередь
запускает pty внутри которого другой zsh, скармливая ему искомую строку
и tab, как будто это пользователь ввёл), но работает очень хорошо,
регулярно использую.
Для открытия FILE:LINE:COL строк использую самопереписный:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/file_line.vim;h=65962d2f9fc8d2c0e77aec4f1bc0c5149020032b;hb=HEAD
Для открытия выхлопа команд (в вышеуказанном формате) в консоли:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=bin/bin/qq;h=250645a664e6476d699ad4ae135a2e5ee943207d;hb=HEAD
Для перехода между буферами в которых FILE:LINE есть: родные возможности
когда можно ввести только часть имени буфера, через одно нажатие tab-а:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vimrc;h=f26cf6ef1857670c6695eb36a7f7bdad19e6ea65;hb=HEAD#l162
Ну и поиск по директориям/проекту через вызов :vimgrep или git grep, но
через удобные самописные обёртки, сразу же делающие и экранирование
нужное и открывающие quickfix:
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/grep.vim;h=e0878e7e2186e0fad352054a25b88cb79244b270;hb=HEAD
http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/ggrep.vim;h=7b52921113ff525e61bca15bf3c45828d7fa4f9a;hb=HEAD
Sergey Matveev [Sun, 20 Dec 2020 15:05:28 +0000 (18:05 +0300)]
Old-games.ru в музее ретрокомпьютеров Яндекса
https://www.old-games.ru/news/96192.html
Узнал что в музей ретрокомпьютеров Яндекса даже вовсю школьников
регулярно водили (до карантина). Тоже первая мысль -- а будет ли им
интересно? Но говорят что всегда найдутся с горящими глазами. А то у
многих школьников музей это синоним скуки.
Чаще всего ломаются конечно конденсаторы, потом память, ну и, очевидно,
винчестеры. Насчёт современных конденсаторов ничего не знаю, ну а то что
первым делом летят диски и память это и в современных аналогично.
Sergey Matveev [Sat, 19 Dec 2020 17:50:02 +0000 (20:50 +0300)]
Похудел
Уже которую неделю я ем мало, так что вечером урчит (но терпимо). Вес
конечно всё равно далёк до того каким я обычно был (дрыщом), но сегодня
мама сказала что у меня пропали щёки. В общем, какая никакая, но сила
воли у меня есть и вес получается сбрасывать.
Sergey Matveev [Sat, 19 Dec 2020 11:06:34 +0000 (14:06 +0300)]
Вакцина "Чувак"
https://lenta.ru/news/2020/12/19/chuvak/
https://ria.ru/20120330/609056634.html
https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B5%D1%81%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BE%D1%80%D1%83%D0%B6%D0%B8%D1%8F
"Чумаков" + "вакцина". А мне нравится как у нас названия строятся. Шифр
Кузнечик: Кузнецов, Нечаев и компания. Шифр Магма. Хэш Стрибог. Когда-то
была шифровальная машина "Фиалка".
В статье на ria.ru упомянули про "лимонку", но без подробностей. А я вот
знаю что она в честь капитана Лемона, а не потому что похожа на лимон,
как граната на гранат.
Вот назвать вооружение всякими Пантерами, Гепардами и Тиграми каждый
может. А у нас цветочки любят. Всякие миномёты, пулемёты, пушки, гаубицы:
Гиацинт, Тюльпан, Пион, Гвоздика, Акация, Василек. Обидно, наверное,
быть "накрытым" Тюльпаном, а не каким-нибудь "Тигром".
На грани чёрного юмора, как мне кажется, Волнение (термобарический
снаряд), радиопеленгатор Улыбка и Позитив, кассетный снаряд Украшение,
химический снаряд Ласка. Садизм какой-то уже, но у меня уважение к тем
кто придумал эти названия.
С названиями животных уже всё как-то понятно. Но вот "бесшумный
автоматно-гранатометный комплекс" названый Канарейкой это странно: они
слышали канареек то? У нас много лет они жили в квартире. Они легко
закладывают уши от громкости (хм, да, после этого уже всё плохо слышно).
* "Полуфинал" — неконтактный взрыватель
* ручной огнемет "Приз"
* тяжелая ТРС станция "Диагноз"
* бронетранспортер "Буйность"
* программно-технический комплекс "Тонус"
* медицинская машина для ВДВ "Травматизм"
* 40-миллиметровый выстрел "Подкидыш"
* "Газетчик-Е" — средство защиты радиолокационных станций
* "Подзаголовок" — комплекс обеспечения радиоэлектронной совместимости
* "Абзац" — 220-миллиметровый агитационный реактивный снаряд
* "Курьер" — подвижный грунтовой ракетный комплекс
* "Стюардесса" — автономный радиолокатор
* 30-миллиметровая авиационная автоматическая пушка "Балеринка"
* МБР "Молодец"
* 55-миллиметровый корабельный семиствольный гранатомет "Огонек"
* тяжелая огнеметная система "Солнцепек"
* 220-миллиметровая тяжелая огнеметная система "Буратино"
* бронежилет "Гжель", "Визит"
* контрольно-проверочная аппаратура "Буковица"
* 40-мм гранатомет-лопата "Вариант"
* пехотная лопата "Азарт"
* наручники "Нежность"
* автомобиль УАЗ "Шалун"
* светозвукошумовая граната "Экстаз"
Sergey Matveev [Sat, 19 Dec 2020 10:55:47 +0000 (13:55 +0300)]
Символические ссылки и CWD/PWD
https://unix.stackexchange.com/questions/79571/symbolic-link-recursion-what-makes-it-reset/79621#79621
http://harmful.cat-v.org/software/symlinks
Для goredo мне отправили патч
http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff;h=79b9219363d2f69f8fd209ec5ee3794759fa7396
чтобы использовать os.Getwd() вместо системного вызова getwd(), ибо,
когда рабочая директория находится в иерархии с символическими ссылками,
то, из-за того что getwd() возвращает физический путь, вычисление
относительного пути до целей начинает содержать массу ../../ всяких.
Насколько понял, когда есть символические ссылки, то всё может
происходить недетерминированно, ибо появляется не чёткая иерархия в
файловой системе, а граф, где есть не один путь "следования". Ссылка на
stackexchange содержит описание работы getwd() и того, что внутри
shell-а запросто есть и своё понимание "логического" пути, с которым и
идёт работа для удобства пользователя. Вне shell всё может быть совсем
по другому.
Опять же, насколько понял, для redo действительно лучше просто
использовать os.Getwd() и дальше уж "как повезёт". Среди тестов взятых
из apenwarr, ровно в одном ровно одну проверку я закомментировал,
связанную с хождением по иерархии где есть символические ссылки. Немного
повозился с этим тестом снова, но... в интерактивном режиме zsh
redo-ifchange ведёт себя одним образом, не в интерактивном уже другим.
/bin/sh работа тоже как-то отличалась. В общем, тест явно делает
ожидания от поведения именно shell-а, а не реализации redo (ну или
совокупности какого-то поведения shell и реализации). Чёрт с ним.
Sergey Matveev [Sat, 19 Dec 2020 10:31:12 +0000 (13:31 +0300)]
Посмотрел кучу фильмов за последние месяцы
Как писал прежде, далеко не о всех хочется упоминать, но почему бы и нет.
* Аэроплан
https://ru.wikipedia.org/wiki/%D0%90%D1%8D%D1%80%D0%BE%D0%BF%D0%BB%D0%B0%D0%BD!
Я любитель комедий с Лесли Нильсоном (Голые пистолеты и прочее), хотя
они и на любителя. А в этом фильме его роль очень небольшая. Но мне
фильм понравился. Ведь и режиссёры тут которые снимали "пистолеты"
* Суп с капустой
https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%BF_%D1%81_%D0%BA%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%BE%D0%B9_(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC)
Ну... просто добрая комедия с Луи де Фюнесом. Где он с другом улетел
вообще на другую планету
* Татуированный
https://ru.wikipedia.org/wiki/%D0%A2%D0%B0%D1%82%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9
Ещё одна комедия с Луи де Фюнесом. Но в ней у меня остался осадок
того, что как-то уж больно быстро этот торгаш искусством проникся
спокойно жизнью и покончил со своей старой
* Большая прогулка
https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%83%D0%BB%D0%BA%D0%B0
Ещё один фильм с ним. 42 года этот фильм был лидером проката во
Франции, до выхода "Бобро поржаловать" (571a2b18f78cdb93b3c642e2595d9c6eaa326a3d)
* Маленькая мисс счастье
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B8%D1%81%D1%81_%D1%81%D1%87%D0%B0%D1%81%D1%82%D1%8C%D0%B5
Хорошая комедия о семье, где у каждого проблемы с головой, грубо говоря.
Но я бы не отнёс это к yet another тупой американской комедии. Не плоха
* Закон есть закон
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%B5%D1%81%D1%82%D1%8C_%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD
Понравилась комедия, но... больше добавить ничего и не могу
* Гангстеры
https://en.wikipedia.org/wiki/Les_Tontons_flingueurs
Комедия про жизнь мафиозной семьи. В целом не плохо, но скорее не
одобряю когда романтизируют бандитов. Хотя какой-нибудь "Крёстный
отец" конечно очень крут, как фильм
* Сбрось маму с поезда
https://ru.wikipedia.org/wiki/%D0%A1%D0%B1%D1%80%D0%BE%D1%81%D1%8C_%D0%BC%D0%B0%D0%BC%D1%83_%D1%81_%D0%BF%D0%BE%D0%B5%D0%B7%D0%B4%D0%B0
Неплохая комедия с Дени Де Вито
* Мужской стриптиз
https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%B6%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%B7_(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC)
Только сейчас увидел как много наград и номинаций у этого фильма.
Понравилась комедия. Бросается в глаза цветовая гамма (ну и то, что
действие в промышленных районах Англии) очень напоминающая фильм
Разрыв или Большой куш какой-нибудь. Чисто по английский! Но...
впечатлил меня не так, чтобы я отдельно для него брался писать в
блоге. А вот Разрыв (a8f94961c18cb59d5ae10b72815bfda3e256521a)
атаснейшая комедия, ещё раз которую с удовольствием пересмотрел бы!
* А в душе я танцую
https://ru.wikipedia.org/wiki/%D0%90_%D0%B2_%D0%B4%D1%83%D1%88%D0%B5_%D1%8F_%D1%82%D0%B0%D0%BD%D1%86%D1%83%D1%8E
Запомнился фильм по игре Джеймса МэкВойа, который прежде у меня
ассоциировался только и только с "Особо опасен". И не только по игре,
но и просто по персонажу, вроде бы и молодой оторве, но понимающей в
людях больше многих других. Фильм хорош!
Sergey Matveev [Sat, 19 Dec 2020 10:28:13 +0000 (13:28 +0300)]
Посмотрел Уолл-стрит
https://ru.wikipedia.org/wiki/%D0%A3%D0%BE%D0%BB%D0%BB-%D1%81%D1%82%D1%80%D0%B8%D1%82_(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC,_1987)
А то много где он упоминается (именно этот, а не с ДиКаприо), но я так и
не смотрел. Хотя в нём же Майкл Дуглас -- крутейший актёр! Фильм хорош!
Хотя его основная суть о том что там как волки все грызутся между собой
и так предполагалась и открытием ничего не было. "Волк с Уолл-Стрит"
куда более жёстче. Понравился, но не так что особо в восторге от него.
Sergey Matveev [Sat, 19 Dec 2020 10:14:52 +0000 (13:14 +0300)]
Посмотрел "Если..."
https://ru.wikipedia.org/wiki/%D0%95%D1%81%D0%BB%D0%B8..._(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC)
Первый фильм где снялся Малкольм Макдауэлл. Подобные роли явно ему
подходят! Собственно, я только в подобных его и знаю: Заводной апельсин,
Калигула (404e4af5155e1b8a7f7c46921554f4e4a5ba64e6), Переход.
А "Если..." сейчас бы точно запретили показывать, ибо в конце вообще же
начинается массовая бойня/перестрелка с кучей трупов в школе.
И ещё Макдауэлла сложно представить в фильме чтобы он не катался по полу
с обнажённой девицей, как это было в этом фильме, Калигуле или Заводном
апельсине. А в "Если..." это была идея, судя по Wikipedia, самого
Малькольма увидеть хорошенькую актрису обнажённой.
Sergey Matveev [Sat, 19 Dec 2020 10:09:02 +0000 (13:09 +0300)]
Броузеры добавили УЦ всея Казахстана в blacklist
https://www.opennet.ru/opennews/art.shtml?num=54284
С одной стороны возмущение: какого хрена и кто они такие чтобы влиять на
решения чужих стран? Ведь точно так же Let's Encrypt это УЦ всея США. С
другой стороны -- все эти броузеры и компании США и в праве делать в
*своём* софте что хотят. Лицемерие и двойные стандарты конечно
зашкаливают, но это же США, в которой по другому дела никогда не делались.
А пользователи этих броузеров сами выбрали софт США. Я то конечно
считают что CA сертификатами должен (обязан!) управлять сам пользователь,
но этот софт решил иначе. А кому не нравится, то СПО броузеры можно
поправить.
Sergey Matveev [Sat, 19 Dec 2020 08:45:40 +0000 (11:45 +0300)]
Интервью с барабанщиком Евгением Рябченко
http://www.hitkiller.com/intervyu-yutuber-prepodavatel-barabannogo-masterstva-drammer-fleshgod-apocalypse-evgenij-ryabchenko-velikij-barabanshhik-ne-obyazatelno-dolzhen-byt-xoroshim-ispolnitelem.html
Оказывается этот барабанщик был в куче групп, живьём на которых бывал:
Belphegor, Decapitated, Vital Remains, Fleshgod Apocalypse и наверное
его не раз видел. Эх... как же хочется на концерты!
Sergey Matveev [Fri, 18 Dec 2020 14:00:49 +0000 (17:00 +0300)]
Unix beards
http://www.usenix.org.uk/content/unix_beards.html
Facial hair that all Unix experts are mysteriously compelled to
grow. The length, bushiness, and unkemptness of the Unix beard are
all directly proportional to the owner's expertise.
programming languages designed by guys with facial hair become
popular (C, C++, Basic, PERL) while languages designed by
smooth-shaven guys don't (Smalltalk, Eiffel, Scheme, Haskell,
Erlang).
Блин, а я всё бреюсь. Хотя у меня пару сантиметровая растительность на
всём лице когда-то была. Чешется (по началу), растёт криво -- поэтому и
решил сбривать.
Sergey Matveev [Fri, 18 Dec 2020 13:02:49 +0000 (16:02 +0300)]
OpenSSL -lssl библиотека
Копаюсь тут, кое чего добавляя, в -lssl. Прежде я только -lcrypto трогал
(1a696ac6c369da1e70a15ba52006f05012934df6). Не могу сдерживаться, но это
сущее адовое говно! Это Вавилонская башня из костылей. Новые алгоритмы
не просто так добавляются через всякие EVP_* -- нужно ещё и в десятках
других местах библиотеки обмазать знаниями о новом алгоритме (и речь не
про его согласование, не про id-шники, а про конкретные криптографические
действия). Весь TLS в нём это просто нагромождение if-ов друг друга
погоняющих.
Я видел устройство crypto/tls в Go. Да, там TLS 1.3 и всё остальное
сильно разделены и не много где пересекаются -- можно сказать что две
независимых реализации. Но и одна и другая довольно аккуратно и просто
расширяются новыми алгоритмами (например). Все эти EVP_CIPHER в -lssl
являются же типа интерфейсами, идея то здравая. Но только вот почему
толку от неё никакого и всё равно весь код покрыт слоем if такой-то
алгоритм, то делаем вот так, ибо потроха реализации этого алгоритма
таковы.
Sergey Matveev [Thu, 17 Dec 2020 21:18:01 +0000 (00:18 +0300)]
Github перестал использовать cookie banner
https://github.blog/2020-12-17-no-cookie-for-you/
Пишут что "никто не любит их, как же мы их убрали?". Ну должны же были
начать с того что "мы заботимся о приватности, анонимности и ради вас
только больше не следим". Но нет, сразу же после этого пишут "ЕС
требует...". То есть... только потому что кто-то начал что-то заставлять
делать со всеми этими слежками через cookie, вы (github) начали чесаться
по этому поводу? А, не, потом вы всё же пишете "we want to protect
privacy...". Так а где же раньше были, до того как вас ЕС начал
заставлять предупреждать пользователей о слежке? "После поиска, мы нашли
решение: просто не использовать cookie". Вот и у меня ощущение что
современные web-разработчики просто даже не подозревают что можно не
использовать tracking технологии или можно делать web, показывать
пользователю странички, без 100500 технологий изобретённых после HTML.
"Developers should not have to sacrifice their privacy to collaborate on
GitHub" -- эээ, а для "коллаборации" то как раз придётся
логиниться/регистрироваться и это потребует использовать cookie. Как
приватность и реальное использование (а не read-only surfing) связаны у
них?
И вот у корпораций почти всегда подобный bullshit а-ля Apple с громкими
и, главное, нужными словами, хотя это просто лапша на уши.
Sergey Matveev [Thu, 17 Dec 2020 18:03:57 +0000 (21:03 +0300)]
Uriel.cat-v.org
https://suckless.org/people/Uriel/
https://wiki.installgentoo.com/wiki/Uriel
https://wiki.installgentoo.com/wiki/Harmful_software
https://groups.google.com/forum/print/topic/comp.os.plan9/xEb4wYzfaBc
Я знал что этого человека уже нет. Но не знал что ему было всего 30 и
что он, оказывается, покончил с собой. Работал над Plan9, любил Go,
заядлый suckless.org участник, автор известнейшей страницы
http://harmful.cat-v.org/software/
На wiki.installgentoo.com не красиво написали что вот такие (harmful)
вещи могут убить человека. Но меня напрягла картинка, ибо табличка в ней
издалека пугающе выглядит в той же цветовой гамме что и мой
http://www.stargrave.org/Harmful.html а я ведь помню что текущий
cat-v.org имеет другие цвета. Но просто совпадение. Я то цвета нагло
тырил из Silicon Graphics тем.
Sergey Matveev [Thu, 17 Dec 2020 17:56:34 +0000 (20:56 +0300)]
Oh Shit, Git!?!
https://ohshitgit.com/
https://ohshitgit.com/ru
https://github.com/bsdimp/freebsd-git-docs/blob/main/doc-cvt.md
Официальная дока по миграции FreeBSD на Git содержит ссылку на ohshitgit
сайт. У него есть даже русский перевод... далёкий от цензурного, но
близкий к тому что люди говорят/думают когда обучаются git-у.
Но у всего этого есть версия и без ругательств:
https://dangitgit.com/en
https://dangitgit.com/ru ("Чёрт побери, Git" vs "Ёбаный Git")
Sergey Matveev [Thu, 17 Dec 2020 16:52:31 +0000 (19:52 +0300)]
Чистка очков
Прошлые очки я просто мыл с мылом (как можно более простым) и вытирал
чистым полотенцем (специально для них используемом). А вот с новыми
(479f6242d8a4d5e07139545c983e27f565ca5534) видно что мыло вовсю остаётся
на поверхности и полотенце лишь равномерно это распределяет. Сегодня
нашёл способ идеально их сделать прозрачными -- используя шампунь вместо
мыла и простые салфетки вместо полотенца. Пластик что ли другой совсем
в этих используется что старый способ не годится?
Sergey Matveev [Thu, 17 Dec 2020 15:34:48 +0000 (18:34 +0300)]
Косплееры
https://habr.com/ru/company/tuturu/blog/533486/
https://www.youtube.com/watch?v=lScjwHHN-NY
https://habr.com/ru/company/smileexpo/blog/410281/
Впервые посмотрел интервью, да и вообще что-то почитал про косплееров.
Такое забавное занятие, такое гиковское. Если что-то попадается на эту
тему, то бывает погляжу -- девочки то там хороши, как правило. Но это и
так забавно полной нелепостью костюмов, их непрактичностью.
А вот Анна Молева это единственное имя которое я знаю/узнаю. Ибо когда
что-то про Bioshock смотрел, то напоролся на её известнейшую фотографию
Элизабет и глаз реально зацепился глазом крутостью. И реально был
удивлён что это настоящая фотография, настоящего человека.
А в интервью тоже подчеркнула что сейчас общество потребления и
популярность это всё. Причём пофиг как хорошо ты делаешь, если не
делаешь это ещё и достаточно быстро (каждый день, грубо говоря, надо
что-то новое выстреливать). И из соцсетей выпиливалась, ибо из-за
отсутствия приватности всякие неадекватные (опасные) люди её стали
находить.
А сам кстати тоже один раз косплеил в "костюме" Бората. Практичен и не
стесняет движений.
Sergey Matveev [Thu, 17 Dec 2020 11:28:29 +0000 (14:28 +0300)]
Путин о Навальном
https://lenta.ru/news/2020/12/17/navalny/
Вот коротко и ясно он ответил, аналогично как и я считаю:
По словам Путина, «пациент берлинской клиники» пользуется поддержкой
спецслужб США. «Но это не значит, что его травить нужно. Кому он
нужен? Если бы хотели — довели бы до конца».
Sergey Matveev [Thu, 17 Dec 2020 09:26:10 +0000 (12:26 +0300)]
Торрент клиенты для Linux
https://losst.ru/luchshie-torrent-klienty-dlya-linux
10 программ и 9 GUI-шных! Linux уже не тот что был прежде :-)
rTorrent я тоже когда-то использовал... пока не наткнулся на то, что у
него в коде было жёсткое ограничение на максимальный размер то ли
торрента, то ли файла и я не мог скачать нужное. Причём торрентов
большого размера вполне себе предостаточно. После этого им не пользуюсь.
ctorrent давным давно использовал. Но он чисто классический BitTorrent.
Нет ни UDP трэкеров, ни DHT. Хотя во всём остальном нравился. Даже самой
идеей управления через простую HTML-форму генерируемую Perl-овым скриптом.
Sergey Matveev [Thu, 17 Dec 2020 08:34:44 +0000 (11:34 +0300)]
Опять в Go баги специфичные только для этого Linux
https://github.com/golang/go/issues/1435
А BSD системы ведут себя как ожидается.
Но вообще выглядит страшно: проблема известна почти 10 лет назад! И куча
ссылок на то, как много проектов имеет проблемы с демонизацией из-за
этого. Но раз это Linux-specific, то нафиг торопиться Go-шникам :-)
Хотя теперь то, после daemontools, я знаю что не нужно самостоятельно
демонизироваться, а надо запускаться под superviser-ами.
Sergey Matveev [Thu, 17 Dec 2020 08:30:17 +0000 (11:30 +0300)]
goredo замораживает систему
Забавный факт мне написали. Если в .do файл поместить Python код, но не
сделать его исполняемым, то goredo (как и redo-c и apenwarr/redo)
запустит его через /bin/sh, который проигнорирует python-shebang, увидит
import и честно запустит эту команду. Которая, из ImageMagick, делает
снимок экрана.
Sergey Matveev [Wed, 16 Dec 2020 11:18:12 +0000 (14:18 +0300)]
Датасатанисты
https://habr.com/ru/company/ruvds/blog/519522/
Уже который раз, видя заголовки о "дата сайентистах", читаю как "дата
сатанистов". А в целом задолбали использовать зарубежные слова транслитом.
Уже проще на английском сразу писать статью.
Sergey Matveev [Wed, 16 Dec 2020 08:03:58 +0000 (11:03 +0300)]
Второму свиданию "нет" из-за сумки для телефона на ремне
https://lenta.ru/news/2020/12/16/second_date/
Я всё мог бы понять почему с человеком не захочется больше встречаться
после некоторых действий, но телефон на ремне в специальном чехле/сумке
то тут причём!? И если речь про смартфон, которые все из себя здоровые
лопаты, то я скорее задаюсь вопросом про себя об удобстве его носки
просто в карманах, которые у всех или оттопыриваются или в них не сесть.
Видел наременной чехол у одного коллеги для смартфона-лопаты -- первая
же мысль об удобстве была и удивлении почему другие так не носят.
Мой Philips сотовый довольно маленького размера и его можно засовывать в
карманы джинс без проблем. Но люди уже отвыкли от таких маленьких
форм-факторов и тётя, когда надо было поговорить по моему, даже, смеясь,
спрашивала как его держать и куда говорить.
Ещё знаю что большинство женщин сразу скажет нет из-за носков с
сандалиями: 6f5406f8b42ce6f557ec3578e2541270aabd19b9
И ещё 100500 причин о которых не догадаться и не понять. Это как
программирование на Си, как минное поле по которому заставляют бежать.
Обязательно допустишь оплошность. Но Си хотя бы даёт ещё шансы исправить
программу и перекомпилировать, в отличии от женщины или мины!
Sergey Matveev [Wed, 16 Dec 2020 07:34:41 +0000 (10:34 +0300)]
Зарплата в конвертах
https://lenta.ru/news/2020/12/16/grey/
О налогах я не думаю (работа за меня занимается ими), но получать в
конверте зарплату я бы тоже хотел ради удобства: тебе сразу выдают
деньги и никуда не надо идти за ними, тем более на территорию вне
работы, зачастую ещё и с "чужими" людьми. А ещё и банкоматы бывают не
могут выдать сразу всю зарплату целиком.
Sergey Matveev [Wed, 16 Dec 2020 07:25:30 +0000 (10:25 +0300)]
Про устройство GPON в Москве
http://blog.stargrave.org/russian/bdd304a51771bf6dfabdbf31d748877112178406#comment0
Интересный, короткий и чётко описывающий принципы работы GPON-а
комментарий. Возможно я не корректно называю это GPON-ом. Возможно речь
далеко не только про Москву, но, судя по статьям, вроде именно в ней это
сильно распространено.
Sergey Matveev [Tue, 15 Dec 2020 20:41:49 +0000 (23:41 +0300)]
SONET нравится
https://computer.rip/2020-10-02%20so%20net.html
https://en.wikipedia.org/wiki/SONET
Хотел было написать какой SONET/SDH милый (so net): 81c7c6557af89e79e480b21f12a4ea97c01679cb, но это не по английски.
Только спустя несколько дней после прочтения статьи с computer.rip, до
меня дошло почему SONET так устроен и как это красиво! По сути во всех
статьях всё одно и то же написано что и тут, но иногда нужно немного
другими словами преподнести и оно раскроет тебе глаза. Уже давным давно
в мире телекоммуникаций параллельно рулили два мира: телефонистов и
компьютерщиков. Изначально последним конечно приходилось жить в мире
телефонов и их сетей, но сейчас победили компьютерщики и в LTE и 5G
используются и IPv6 несущие голос (а не как в GSM и прочих сетях: каналы
заточенные под голос передают, как уж получится, данные) и HTTP/2 вместо
SCTP придуманного телефонистами. Поэтому и SONET уже можно отнести к
истории. Но своим компьютерным умом я не мог сразу понять почему он так
устроен.
Цифровые АТС, само собой, передают звук оцифрованным. А с ISDN и сразу
из дома он идёт уже в цифре. Для хорошей по чёткости передачи речи
достаточно акустического канала в 3-4 кГц, поэтому при оцифровке частоту
дискретизации достаточно иметь 8kHz. Один канал, с глубиной в 8бит:
64Kbps для хорошей несжатой передачи речи в одну сторону. ISDN поэтому
имеет два 64Kbps канала для двусторонней связи. Сжатие не применяют в
нём, ибо усложняет железо, а значит и цену повышает.
Эти 64Kbps каналы затем мультиплексируются и передаются по всяким E1 (T1
в паре стран), которые, в свою очередь, тоже мультиплексируются,
агрегируются и передаются уже дальше вплоть до оптоволокна. Передача
данных в E1 идёт кадрами, длительностью 125мкс (те самые 8000kHz), где
находится по одному байту от/для каждого из 32-х 64Kbps каналов. Пара
каналов используется для синхронизации и управления. Очень просто,
значит и дёшево. Но, в отличии от компьютеров, тут реально льются потоки
ото всех каналов каждые 125мкс. Никаких эти заголовков, или
произвольного времени возможности передачи пакета, как в компьютерных
сетях.
А дальше это суётся в SONET. В нём тоже передача идёт кадрами каждые
125мкс. Всегда передаётся, чётко и жёстко кадр всегда будет передан. Но,
в отличии от компьютерных сетей, кадр передаётся не в виде заголовка,
после которого идут данные, а он буквально параллельно с данными идёт.
Кадр SONET поэтому удобно представлять в виде таблицы, где сколько-то
столбцов каждой строки передают данные заголовка, а остальные столбцы
несут сами данные. Часть заголовка, конечно же, содержит биты для
синхронизации, поэтому зная что каждые 125мкс мы должны видеть одну и ту
же фиксированную последовательность, мы можем ссинхронизироваться.
Зачем так? Полезная нагрузка, весь этот поток байт, перемешенный с
байтами заголовка, делится на virtual circuit-ы (VC). И заголовок несёт
информацию о них. Если у нас имеются данные для передачи, при этом мы
уже прямо сию микросекундно передаём кадр (а мы всегда их передаём,
постоянно, пускай и "пустышки" без полезной нагрузки), то мы на лету
может вставить в следующие строки кадра, в столбцы заголовка, данные о
нашем VC и передавать его. То есть, кадр буквально формируется на лету
(ведь всё же 125мкс это довольно продолжительное время!) и заголовок в
нём формируется на лету, как и данные засовываемые.
Если бы это был компьютерный кадр, то пришлось бы в буфер в памяти
накапливать данные, после этого формировать заголовок и только после
этого отправлять. Пока отправляется текущий кадр, то ещё нужно иметь
память для формирования параллельно нового. Новые приходящие данные
будут отправлены только с следующим кадром. SONET и дешевле (за счёт
отсутствия буферов) и задержки от ожидания передачи кадра нет.
Но, чтобы всё работало хорошо, тикало как часы, каждый из 8000kHz, нужно
чтобы все устройства хорошо были синхронизированы по времени. Поэтому в
SONET используются атомные часы, GPS-приёмники и подобное. С одной
стороны конечно геморрой, а с другой хороший QoS и меньшая цена
оборудования из-за ненужности буферизации кадров.
Но это (для меня) не самое интересное было и открывающее глаза. У нас
идёт оптоволоконный провод от АТС до какого-то дома. В нём много
телефонов. Так как оптоволокно очень информационно ёмкое, то от этого
дома и дальше будет идти волокно до следующего на улице. В одном кабеле
от АТС будет идти много сотен каналов (VC) несущих оцифрованный звук до
поднятых телефонных аппаратов. В дом заходит SONET кабель с кучей этих
каналов внутри, но только лишь небольшая часть из них "интересна" этому
дому, только некоторые из них предназначены для аппаратов в нём. И тут
самая красивая часть SONET: add-drop multiplexer (ADM), в который входит
кабель. Интересующие для него каналы внутри кадра(ов) являются по сути
входящим трафиком, который он копирует на внутренние E1/ISDN/whatever
каналы. Дальше передавать эти VC внутри кадра не имеет смысла, так как
больше они никому не интересны. Получается, что внутри кадра на выходе
имеются слоты вакантные. Но раз речь про телефонную связь, то она
дуплексная и симметричная -- нужен исходящий канал симметричной ёмкости.
И вакантные места исходящего кадра как-раз заполняются исходящим
трафиком с устройств этого дома. Входящие кадры, некоторые слоты в них,
немного изменяются на этом ADM, в основном на лету копируясь, даже не в
буфер, а сразу же в оптический канал в формируемый кадр (SONET --
поэтому и называется синхронной сетью). И так каждый дом, на пути
следования этого единственного кабеля, имеет ADM который "забирает"
некоторые слоты каналов и добавляет свои исходящие.
Если этот кабель замкнуть кольцом на этой же самой АТС, то она по сути
на вход получит кадры с агрегированным исходящим трафиком всех домов. По
моему очень красиво с инженерной точки зрения! И высочайший QoS и
стабильность. Чтобы не ждать пока исходящий трафик дойдёт через все
hop-ы через всё кольцо до АТС снова, можно бросить ещё одно волокно, но
с трафиком в противоположную сторону. Тогда кол-во hop-ов до и от
каждого дома будут симметричны, как и задержки для каждой стороны
трафика. А если одно из колец "порвётся", то оно автоматом просто
деградирует до первого варианта с полным проходом кольца для ответного
трафика.
Все компоненты (дискретизация звука, кадры E1/T1, кадры SONET) живут по
одному таймингу, симметричные, полнодуплексные, не требуют буферизации
(E1 буквально байты каждого канала отправляет в каждом кадре). Лучшее
качество в обслуживании для телефонных разговоров (как мне кажется, в
теории и, судя по статьям, на практике) и достаточно низкая цена для
перехода на всё это ещё уже в 80-е. Но со временем всё понижающаяся цена
компьютерных систем, их информационная ёмкость и гибкость конечно
сделали своё дело и убили телефонные технологии. И для компьютеров SONET
уже не очень, ибо, как минимум, на часто в Интернете трафик симметричный
в обе стороны и в нём просто навсего сложнее утилизировать в полной мере
ёмкость канала. А объёмы чисто компьютерных данных куда сильнее растут
чем телефонных разговоров.
Мне SONET ещё приятен тем, что он точь-в-точь похож на идею
store-and-forward NNCP сети где одну флешку передают по кругу по рукам,
где каждый забирает пакеты предназначенные для него (остальные он всё
равно дешифровать не сможет) и записывает свои исходящие для других
(собственно, первая команда в NNCP только на это и рассчитывалась --
никакой поддержки сети изначально даже не планировалось). Хотя и тут
идея, само собой, не нова, ибо Token Ring по кругу передавал токен. Но
SONET не обязан быть в кольце -- для него это одна из опций.
Sergey Matveev [Tue, 15 Dec 2020 20:37:43 +0000 (23:37 +0300)]
Итоги использования tmux popup-ов
которые я понаделал в e5f0b69a0821e3ceccc83530aea066be9a84f03b. Сегодня
понял что я постоянно ими пользуюсь. Не десятки, а возможно под сотню
раз в день. Управление музыкой, парольный менеджер, словарь (хотя это не
каждый день используется), калькулятор, календарь. Хотя календарь
вызывается относительно редко, но я с ходу не помню опции чтобы он мне
показывал начало недель с понедельника и при этом сразу три месяца
(прошедший и следующий) -- поэтому вызываю через popup ибо там сразу как
надо. В общем, menu+popup мне очень нравятся и они реально удобны тем
что не надо переключаться куда-то, да ещё открывать pane и вводить
короткие команды.
Sergey Matveev [Tue, 15 Dec 2020 20:31:07 +0000 (23:31 +0300)]
Милый
Я был уверен что "net" также переводится как "милый" или что-то из этой
серии. Смотрю в словарь чтобы убедиться, но ничего подобного. Но, благо
что у меня словарь и в немецком сразу ищет! Действительно, "nett" это
как-раз милый, славный, приятный. Удивительно как всё же немецкий я до
сих пор ещё помню, даже сам не осознавая этого.
Sergey Matveev [Tue, 15 Dec 2020 16:17:12 +0000 (19:17 +0300)]
DragonFlyBSD выпилила SCTP
https://www.dragonflybsd.org/release42/
Недавно (bbc574bb0ef6fc7eb0fbf37e3b5782d1cdd2597e) увидел что эта BSD
выпилила IPsec. Так оказывается она ещё и от SCTP избавлялась. Очень,
очень странная ОС. Хотя я и одобряю убирать и выпиливать то, что не
поддерживается автором.
Sergey Matveev [Tue, 15 Dec 2020 14:28:54 +0000 (17:28 +0300)]
Современный SQL
https://modern-sql.com/
Я вот даже не знал (да и не задавался вопросом) что сколько стандартов и
каких годов есть на тему SQL. Оказывается, большинство пишут по сути на
SQL-92, как и я. А с того времени стандарт раздулся на порядок по объёму.
Даже JSON стал его частью, в 2016-ом. Вот только бесплатно получить не
представляется возможным. Только SQL-99:
https://crate.io/docs/sql-99/en/latest/index.html
Но вообще объёмы этого пугают. Небось опять комитеты собирались и каждый
участник давай свой use-case продвигать и внедрять в стандарт. А ведь
большие размеры стандартов/спецификаций приводят и к невозможности
полной вменяемой реализации (тот же OpenXML от Microsoft, слышал, даже
они сами не реализовывают) и их использования со стороны разработчиков.
Но во вступительном ролике на сайте понравилось что SQL это вполне себе
хороший API для данных, вместо этих REST/GraphQL, с чем солидарен.
Sergey Matveev [Tue, 15 Dec 2020 13:11:30 +0000 (16:11 +0300)]
goredo 0.6.0 с apenwarr/redo тестами
http://www.git.cypherpunks.ru/?p=goredo.git;a=blob;f=t/apenwarr/README;h=ae5e7e0a23cfae6835d5ac5b49695d04e588a6e7;hb=HEAD
Вчера добавил тесты из dieweltistgarnichtso.net/redo-sh, но сегодня
решил добить тему с ними и добавить apenwarr/redo тесты. Добавил все
базовые, которые основной redo функционал проверяют. А всё остальные по
большей части apenwarr специфичны и заточены под него. Похоже что
покрывают они вообще всё что касается самого redo. Так что, goredo,
можно считать вполне себе покрытым функциональными тестами.
Sergey Matveev [Tue, 15 Dec 2020 11:28:46 +0000 (14:28 +0300)]
Дополнение zsh для *(
Очень часто использую модификаторы для путей, чтобы например только
директории, исполняемые, пустые файлы показать, отсортировать и тому
прочее (a706ddd8826b001990c7488a128862ace64924e3). Сейчас вот нужно было
отфильтровать по символическим ссылкам. Набрал "*(", а дальше не помню
как он там указывается, но нечаянно нажал tab, и мне заботливый zsh
показал возможные модификаторы. Хотя штатно я completion по сути отрубил
его мощнейший, оставив самописный вариант. Но это, видимо, его не
касается и оказалось очень удобно!
Sergey Matveev [Mon, 14 Dec 2020 19:24:35 +0000 (22:24 +0300)]
Deathspell Omega снова рулит!
https://en.wikipedia.org/wiki/Deathspell_Omega
Два года назад упоминал эту французскую black metal группу: 97bdd4d894c82ef016339178af55e4b027fdbe34. После всех альбомов Death
(97952e82afeef2d66621bdb3a0fac8f3fe35a795), среди списка директорий
увидел её и всю дискографию заслушал снова до дыр. Мало на кого похожи,
чисто авангардный black metal! Люк Лемей (frontman Gorguts) всегда их
упоминал среди любимых современных групп.
Sergey Matveev [Mon, 14 Dec 2020 19:05:05 +0000 (22:05 +0300)]
goredo 0.5.0
Вот и первый релиз goredo в котором уже настоящие баги поправлены. Из
проекта http://news.dieweltistgarnichtso.net/bin/redo-sh.html я взял
тесты, сделал обёртку над ними для запуска через github.com/chriscool/sharness.
Обнаружил неприятные баги. Все они данные бы не попортили, не обманывали
бы тем что собрали что должны -- ничего страшного. Но в некоторых
случаях просто падали бы с ошибками о не найденных .do например.
Вот только автор этого redo-sh считает что redo-always буквально всегда
превсегда должен пересобирать цель. Мол например TeX может
неопределённое количество раз пересобирать документ, пока не будут
разрешены все ссылки и номера ссылок/страниц. Люто несогласен с его
позицией. Собственно, как и apenwarr/redo реализация. Это по сути
делает always цели совершенно неюзабельными/бесполезными. Например у
меня все .c файлы зависят от .h, в котором проставляется версия кода,
которая, в свою очередь, берётся из выхлопа git-describe. Да, из-за
checksum (или redo-stamp) зависимые цели пересобираться не будут, но сам
git-describe то вызовется же. А он очень не лёгкий. В итоге простенький
Си проектик всегда будет собираться уйму времени из-за кучи git вызовов.
И я даже не представляю как в redo-sh можно хотя бы костылями сделать
желаемое поведение (при сборке "проверять" версию, но делать только один
раз). И с ходу я даже не понимаю как он использует redo-always для
сборок TeX-а... ведь в redo нет таких вещей как повтори сборку или пойми
выполнена ли она. С TeX-ом проблем вообще нет никаких и я прям недавно
как-раз делал .do цели для сборки LaTeX документа где те самые несколько
итераций пересборки нужны. apenwarr/redo предлагает просто обернуть
содержимое .do в while. Логично, разумно. И я так же сделал:
redo-ifchange report.tex
exec >&2
pdflatex report.tex
while grep -q "Rerun to get" report.log ; do
pdflatex report.tex
done
mv report.pdf $3
Возможно не супер элегантно, но и не сказать что шибко страшно, зато
никаких проблем с always целью. В любом случае я убеждён что сборка
LaTeX документа это одна атомарная цель, с точки зрения системы сборки.
А то что LaTeX-у действительно бывает нужно буквально говорить
"собирайся, пока ..." (условия о bibtex-ах, номерах страниц, ссылках и
прочем).
В общем, как всегда always цели плодят много проблем и
недоговорённостей. Лучше держаться от них подальше. Но в apenwarr/redo
(+redo-stamp) с ними жить получается, как и в goredo, само собой. Да и
redo-c благодаря checksum-ам. Но redo-sh в моих проектах был бы
неюзабелен (хотя он и так не юзабелен и не работает у меня, ибо требует
именно GNU утилиты (stat тот же) для работы).
Sergey Matveev [Mon, 14 Dec 2020 18:45:24 +0000 (21:45 +0300)]
Как Россия 20 лет развивала Интернет
https://lenta.ru/articles/2020/12/14/internet/
А я вот не застал времена описываемые в начале статьи. Точнее застал, но
сам в них не участвовал. Я никогда не был в Интернет-клубах, хотя чуть
ли не все одноклассники бывали и регулярно даже прогуливали там уроки.
Никогда не сидел в чатах и мне и сейчас не очень понятно как можно
часами там было просиживать в *real-time* общении? Я понял бы когда это
без оплаты времени (GPRS) хотя бы. Я никогда не был подключён к
локалкам, хотя видел их у знакомых и видел что там подъездами и домами
могли играть в игрушки и обмениваться всяким между собой.
Тогда я тратил время на GNU/BSD системы, изучению программирования и,
позже, попаданию в FidoNet. Первый Интернет появился через GPRS
соединение. Даже консольный mICQ тогда был. Но никакой речи о
существенном трафике не могло идти (дорого). И тогда я вовсю только
FidoNet использовал по сути. Только ближе к институту появился ADSL. К
этому времени вроде бы локалки уже начали отмирать, как и Интернет
клубы, ибо компьютеры стали сильно доступнее, вместе с домашним
Интернетом (поэтому и мы себе смогли его позволить).
Sergey Matveev [Mon, 14 Dec 2020 13:27:24 +0000 (16:27 +0300)]
Death и Чак Шульдинер
http://www.hitkiller.com/remember-the-fallen-chuck-schuldiner-na-foto-i-v-citatax.html
https://www.youtube.com/watch?v=MHkMjX2W5RMo
Сегодня день памяти Чака и его группы Death. Чак, как и преобладающее
большинство металлистов, дет-металлистов, против всякой вражды, насилия
между людьми и прочего дерьма. Любитель животных. Вообще самые приятные
и добрые люди о которых слышал в музыке это в основном всякие из
death-близких групп и грайндкора (Барни из Napalm Death чего стоит!).
Любителей бухла, наркоты, насилия в музыке конечно полно, но в кругах
вне тяжёлого метала. Под тяжёлым я не подразумеваю heavy metal (он то
самый простецкий). Вот на heavy metal концертах стереотипных пропитых
людей, которым музыка это просто предлог выбраться -- полно. Мне не
очень там комфортно было. А как дома, в максимальной безопасности,
чувствуешь только на death/grind.
Sergey Matveev [Sun, 13 Dec 2020 20:28:16 +0000 (23:28 +0300)]
Не идите дети в программисты
https://habr.com/ru/post/532794/
Если тебе не нравится программировать, то и нефиг учиться на
программиста и вообще суваться в эту сферу. Такой посыл автора. Но у
меня сразу же вопрос: а к другим профессиям это разве не относится?
Мне кажется везде лучше когда болеешь за своё дело, когда оно тебе
приносит удовольствие. Как там говорят, что в идеале работа должна быть
хобби и тебе не пришлось бы работать, а только заниматься любимым делом.
ИТ выделяется просто своей относительной молодостью и тем, что совсем
недавно только действительно заинтересованные в этой теме люди шли в
программисты. Плюс из-за (относительной) новости профессии/индустрии,
специалистов было мало и платили очень хорошо сразу же. Но это было
актуально, как мне кажется, 20-30 лет назад. А сейчас программист это
уже самая обычная рутинная профессия. Хочу подчеркнуть: в большинстве
случаев. Само собой интереснейшие проекты и задачи особенно у крутых
разрабов имеются, но это мизерное меньшинство.
Я видел не раз программистов для которых эта работа -- просто работа,
ничего более. Про неё они забывают когда уходят домой. И при этом они
отлично могут выполнять свои обязанности. Не хуже "горящих" и "болеющих".
Меня вот только возмутил комментарий где человек удивляется как
программирование может нравится, мол враки это, ведь:
Потому что программирование — это сплошная боль. От постоянных
«сражений» с машиной, которая в очередной раз ведёт себя «не так».
До сражений с «собой», потому что тяжело быть тупым, но надо хотя бы
стараться не быть им.
Отчасти безусловно всё так! Особенно если ещё и иметь дело с
проприетарным ПО, которое и по качеству паршиво и ничего с ним не
поделать, ибо, раз проприетарно, то по определению человек должен
страдать. Много чего бесит и не нравится. Но лично я получаю дичайшее
удовольствие! Не от боли, а от результата. От того что что-то делаю,
выполняю, решаю задачи (пускай даже которые сам себе ставлю (ну типа
redo на Go лучше остальных написать)). Мне нравится что я что-то творю,
чаще всего полезное. Как это всё может не нравится?
У меня вот руки из жопы растут и всё что бы я не делал руками --
корявое, сикось-накось, переделывать придётся. И вот от ручного труда у
меня никакого удовольствия. Хотя оно конечно пользу приносит в быту, но
это мучение. Наверное у автора комментария аналогично с программированием?
Возможно мне нравится, потому что у меня оно как-то да получается? Мне
нравится причёсывать код, делать его красивым, аккуратным. Чисто даже
ради эстетического удовольствия. А вот в быту -- работает и ладно, лишь
бы надёжно, а дальше забыть. Хотя вот у меня выходит делать чизкейк. И
всем нравится каким он получается. Но удовольствия процесс этот мне не
приносит. Делаю только ради других, чтобы их порадовать. Но процесс
любой готовки еды мне не люб совершенно. Зато вот например
разбирать/перебирать какие-нибудь вещи (в шкафах, инструментах, на даче
там) -- нравится сам процесс, хотя и времени отнимает и скоро опять надо
будет перебирать. А на компьютере бесконечно можно всё приводить в
порядок и улучшать. Наверное мне просто нравится сам факт приведения
вещей в порядок, чтобы на месте всё было, чтобы красиво, аккуратно.
Компьютерный мир, в отличии от материального, хорош тем что можно многое
переделывать не тратя ресурсы кроме своего времени и чутка электричества.
Слышал от одного верстальщика что ему реально просто нравится делать все
эти CSS-ы и HTML-и, ибо он сразу видит как и что выходит, аккуратно,
красиво (с его точки зрения, верстальщической, а моему Lynx-у зачастую
больно :-)). Я осознаю что это может нравится (как и готовка еды), но
сам я прочувствовать это не могу. Вёрстка для меня это боль и страдания,
без какой-либо компенсации, ибо... да насрать уже как оно выглядит,
когда пришлось ненавистью пробиваться через эти уродские технологии
Web-а, чтоб их! Короче... кому что. Но от всего можно получать
удовольствие. Те же музыканты это тоже в массе своей сплошная рутинная
работа.
Или я вот никогда не понимал удовольствие в сборке пазлов. Невероятное
количество времени на монотоннейший труд. Причём вот какой-нибудь бисер
или там рисование -- это создание с нуля всё же. А пазл это когда кто-то
взял и сломал картину, а ты её собирай. А целой нельзя было оставить?
Если совместить это с прослушиванием аудиокниги -- то можно считать что
это хотя бы время потраченное на чтение. Но я бы предпочёл просто
прогуляться на улице (проветриться), слушая книгу -- ибо пазл всё равно
к полезному делу не отнесу, а прогулка полезна для проветривания. Ровно
один пазл доставил удовольствие (на заднем плане):
http://www.stargrave.org/photoes/hezbsy.webp
Потому что 1) мне нравится pixel-art сам по себе и во время сборки его
пристальнее рассматриваешь; 2) его очень легко и быстро можно было
собрать из-за тьмы уникальных деталей и отсутствия рандомного перебора
кусочков.
Sergey Matveev [Sun, 13 Dec 2020 15:25:01 +0000 (18:25 +0300)]
Bombadillo и Gemini
https://bombadillo.colorfield.space/
https://gemini.circumlunar.space/docs/faq.html
Свеженький, UTF-8 aware, броузер gopher://, gemini://, finger. Да ещё и
на Go написанный, без проблем у меня собираясь. Мой phlog работает в нём
отлично.
С одной стороны мне конечно нравится что gopherspace не умирает, даже в
общем-то разрастается (но это наверное связано с возрастающей
доступностью компьютеров и Интернета). С другой стороны, gopher протокол
чисто технически, чисто формально, не юзабелен, так как его RFC не
разрешает что-то кроме 7-бит ASCII. Встречал strict броузеры которые
действительно UTF-8 не показывают.
Gemini, с точки зрения протокола, "закрывает" недостатки Gopher:
* non-ASCII поддержка
* MIME-типы вместо item type Gopher-а. Я это одобряю, ибо, хоть и не
компактно, но рабочий вариант по чёткому понимаю что за контент
* Добавлены коды ошибок. По идее действительно нужно и важно, чтобы
машина могла понять успешен ли был запрос
* вставка URL без хаков. Действительно, в gopher нет штатного способа
указать URL или сделать ссылку на него. Де-факто многие делают
HTML-like ответ с redirect-ом, но это костыль
* redirect-ы. Полезно, когда что-то переместилось
* domain-based virtual hosting. Ну... тут не уверен одобряю ли. Зачем на
один IP вешать несколько ресурсов? Пора забыть про IPv4 мир, пинать
кто не может из него выбраться. Адресов в IPv6 даже конечной квартире
дают уйму
* Gemini старается уйти от древовидной структуры директорий/файлов
Gopher-а. В целом мне это нравится, ибо, как и в Texinfo, оно не
всегда удобно
Основные цели Gemini это сделать нечто для тех, кто не любит слежку (web
tracking), кто устал от баннеров и кто устал ждать загрузки страниц на
своём мощном многогигабайтном amd64 компьютере.
Форматы запроса/ответа Gopher/Gemini очень простые и по сути просто
представляют отправку URI некого. Чем это отличается от "GET URI HTTP/X"?
Иметь возможность качать большие файлы (большие -- значит должна быть
докачка) я считаю необходима. Если не необходима, то рядом держать
HTTP-ноду для раздачи больших файлов? Что Gemini предлагает? Что плохого
в том, чтобы к запросу (да и ответу) можно было опционально добавить
key-value дополнительные данные, которые можно будет проигнорировать,
если не поддерживается? Чем кардинально HTTP тут не устраивает? Точнее
подмножество HTTP, которое даже на Си не сложно написать для задач
Gopherspace?
Как HTTP и HTML заставляют людей вставлять баннеры, кучу дерьма и
следить за людьми? Никто из них не заставляет. Всё это можно
использовать приватно, почти без overhead-а относительно gopherspace.
Мне нравится жёсткий минималистичный формат страниц gopher, и
text/gemini. Но что мешает передавать их поверх HTTP?
Но автор даже в FAQ имеет целый раздел "почему бы просто не использовать
подмножество HTTP/HTML"? И его ответ меня не устраивает. Он просто
говорит, что видя gemini://, точно можно быть уверенным что сейчас будет
всё открываться без говн. Но кто мешает использовать броузер без говн,
который бы не отправлял User-Agent, не загружал эти CSS и прочее? Такой
броузер реально написать за вменяемое, особенно для (X?)HTML подмножества.
Мне просто не нравится что HTTP тут не рассматривается. Уж для этих
задач он вполне себе хорош и приятен. Сам по себе со всеми chunked
encoding, pipelineing-ом и кучей других фич он конечно громоздок, но
никто не заставляет их реализовывать. Если я хочу выложить PDF-ку, то
она может занимать много мегабайт и докачка обязательна.
text/gemini одобряю в целом, хотя ещё не пробовал. Отсылка к Markdown
мне не нравится (da160c3c7b3f5393aa37f2d042f9b281264273de), но ладно уж,
там über маленький subset. Возможно добавлю в SGBlog его поддержку и это
будет ещё и gemlog-engine. Just-for-run.
А вот что мне яростно не нравится, так это обязательное использование
TLS. Пускай даже и TOFU, но обязательное использование. Нет, это ни в
коем случае не могу одобрять.
FAQ говорит что осознанно нет ничего подобного Content-Length, ибо
появление одного "расширения" сразу приведёт к другим. А тут всё так
урезано, что соблазна не будет. Опять же, не согласен. Некоторые люди
превратили HTTP/HTML в адовый ад, согласен. Но кто заставляет
"тусоваться" вместе с ними и быть как они? Нет уж, но я хочу знать качаю
я 20 мегабайтную фотографию, потому что какая-то редиска не умеет
масштабировать изображения, или это нормальная фотография на 100-200
килобайт? FAQ предлагает дать ссылку на HTTP/BitTorrrent/whatever. Снова
для меня это говорит о том, что ничто не мешает использовать HTTP.
Также в FAQ явно сказано что осознанно нет версии протокола. Типа чтобы
никогда не расширять. Я так же мог бы подумать лет 10-15 назад. Но я
давно уяснил что ВСЕГДА её надо добавлять (в протоколы). ВСЕГДА, пускай
даже и не сменится. Но у меня никогда не было случая чтобы всё равно она
да не возросла, ибо не всё можно продумать и не всё предусмотреть (это
вообще невозможно). Так и хочется сказать что это какой-то детский аргумент.
Вот для меня и вырисовывает картина такая: gopher создавали тогда,
когда, можно сказать, многих best-practices не было, да и таких вещей
как URL/URI. Им, в общем-то, всё простительно. А вот Gemini как будто
ребёнок писал с подобной аргументацией. Ведь вовсю делали и поддерживали
Gopher+, в котором всё равно появились generic key-value сущности.
И заметки https://gemini.circumlunar.space/docs/best-practices.html по
поводу TLS: пожалуйста используйте ECDHE, AES/ChaCha20 и SHA2/3...
только подтверждают это. DHE это хорошо. А *25519 было бы ещё лучше,
кроме того оно и поддерживается. ECDHE зачем рекомендовать? Вот упомянул
бы DHE и промолчал бы насчёт ECDHE -- было бы лучше. AES/ChaCha20...
допустим, упомянул, хорошо. Но писать про SHA2/3 для целостности
сообщений? Серьёзно? Не использовать AEAD? Если бы автор промолчал бы,
то было бы куда лучше.
Ну и его ответы в рассылке на тему замены TLS тоже не лучше, хотя там
Drew DeVault пришёл. Gemini это типа про "здесь и сейчас". Ну ok, он
здесь и сейчас уже не актуален одной только темой про TLS. Здесь и
сейчас требует громоздкий и сложный софт для одного только TLS. Здесь и
сейчас требует (ok, советует) ECDSA, что без комментариев.
И хочется им написать, но желания никакого ввязываться, ибо это будет
точно априори впустую, видя ответы автора Gemini. Я в блоге поэтому про
Gemini и не упоминал даже, ибо нефиг время на это тратить. Хотя написать
пару строчек всяким людям из сотен блогов на которые подписан -- делаю
регулярно. Но тут прям точно в бестолку.
Sergey Matveev [Sun, 13 Dec 2020 13:20:23 +0000 (16:20 +0300)]
Работа в Яндексе
https://habr.com/ru/post/530228/
У меня и знакомые из Яндекса есть и полно людей оттуда перешедших в
ivi, да и сам я там не раз в гостях был. Там безусловно есть
офигеннейшие специалисты (без них бы просто Яндекс не существовал).
Одного крутого спеца знаю ушедшего из ivi туда -- но там ему, вроде как,
самое место с его головой было. Они хорошо получают. А вот всем
остальным, среднячкам -- платят сильно меньше остальных мест. Студентом
там быть наверное хорошо -- ибо деньги не так ещё важны, а энергию будет
куда деть работая там безвылазно, набираясь опыта. Но, кроме крутых
спецов, никто из моих знакомых там возможность работы уже давно не
рассматривает.
Sergey Matveev [Sun, 13 Dec 2020 10:41:36 +0000 (13:41 +0300)]
RSS vs Atom
https://nullprogram.com/blog/2013/09/23/
Хотел было написать чисто от себя, но тут статья с аналогичным моей
голове содержанием. Я совершенно не понимаю почему RSS до сих пор
существует и даже более популярен чем Atom. Как минимум, я его искренне
ненавижу и не хочу, как технарь, признавать из-за грёбаного сраного
пиндосского формата дат (RFC 822). Ничего против него не имею когда оно
создавалось во времена холодной войны и вообще на заре компьютеров в США.
Но сейчас то, какой человек в своём уме его выберет? А RSS даже первой
версии создавался в конце 90-х уже.
Автор статьи ещё говорит про GUID-ы. Которые не обязательны и вообще не
GUID-ы в RSS. Поэтому понимать видел ли ты запись или нет -- запросто
вообще не выйдет, ибо для этого нет регламентов. И это RSS 2.0. А более
старые так вообще ужас, ибо item-ы находятся вне channel.
А тему возможностей (разные языки, всякие Base64 содержимые) не затрагиваю.
Sergey Matveev [Sun, 13 Dec 2020 10:28:10 +0000 (13:28 +0300)]
Попробовал UDT протокол
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_UDP
https://udt.sourceforge.io/
https://tools.ietf.org/html/draft-gg-udt-03
Нашёл Go wrapper над этой библиотекой. Впервые собирал Go с C и даже кое
какого C кода в этой обёртке написал (настраивал MSS, размеры буферов).
Понравилось что пользоваться этим легко: самый обычный io.ReadWriter
сокет, который вполне себе работает. UDT4 полностью на UDP основан,
никакого TCP управляющего соединения (хотя я и не против него).
Но... одни документы/презентации говорят что UDT творит чудеса, там где
FTP при небольших потерях пакетов проседает до неюзабельного состояния.
А https://scialert.net/fulltext/?doi=itj.2009.600.604 говорит что UDT
очень далёк до насыщения даже гигабитного канала связи. И да, даже с
большим MSS и буферами, на lookpack UDT передача у меня более чем на
порядок медленнее простого TCP соединения. Лень проверять что будет на
канале с большой задержкой или потерями, но наверное будет конечно же
лучше. Но это значит что применим он только к очень особым каналам
связи, как они и заявляют. А вот http://tsunami-udp.sourceforge.net/
даже в теории должен творить чудеса, как тесты в статье и показывают. Но
я с ходу не смог собрать ни саму библиотеку, ни ничего на Go не нашёл
для неё.
Тема очень интересная в целом. Может эти UDT/Tsunami и прочее не так
популярно потому что современные TCP CC алгоритмы и возможности их
настроек в ядрах ОС достаточно хороши?
Ещё нашёл KCP библиотеку/протокол: https://github.com/xtaci/kcp-go
Который тоже предоставляет UDP надёжный ordered протокол. Но он заточен
на низкие задержки и поэтому в нём добавляется избыточность и коды
Рида-Соломона. Тоже интересная тема (хотя это же всё уже обмуслёкано в
QUIC и HTTP/3) и приятно что на pure Go всё есть.
Sergey Matveev [Sun, 13 Dec 2020 09:56:42 +0000 (12:56 +0300)]
FTP, SIP, RTMP протоколы
https://computer.rip/2020-05-25%20more%20weird%20protocols.html
https://computer.rip/2020-05-20%20file%20transfer%20pseudoprotocol.html
Все эти протоколы рассчитывались на то, что Интернет будет работать как
задумывался -- у компьютеров есть связанность между собой. Поэтому все
они используют несколько соединений (для управления и для данных). В
целом это просто, здорово, эффективно, красиво. Но так как нехорошие
люди сильно тормозят переход на IPv6, то у нас полно NAT-а, отсутствие
связанности и поэтому эти протоколы в Интернете не распространены и не
очень хорошо работают.
И поэтому у нас есть полный лютый звездец в виде HLS, DASH, WebSockets,
WebRTC и подобное. Даже не смешно что подобные задачи отправляются по
HTTP и TCP (хотя с фильмами немного спорно, ибо конечный пользователь
всё же иногда хочет видеть идеальную картинку). Автор считает что нужно
забыть про нормальные, простые и эффективные сети. Ну а я считаю что
свыкаться с этим нельзя и нужно настойчиво требовать IPv6 как минимум.
Хотя к FTP всё написанное я не отношу. Ибо FTP предполагает что
компьютеры могут по эфемерным портам протоколов связываться между собой.
А вот это я не приемлю -- ибо с какой стати, как мне firewall то
настраивать при этом? Одно дело связанность между компьютерами, а другое
дело совершенно эфемерные транспорты. Хочется SIP? В firewall говорим
про связь по чётко заданным протоколам/портам. А с FTP засада. Хотя, с
другой стороны, для FTP можно выделить отдельный IPv6 адрес (их же,
можно сказать, бесконечно) и firewall-ом разрешать на нём всё что
угодно: так что с ним вообще тоже можно решить задачу, просто для неё
всё равно без IPv6 никак.
Sergey Matveev [Sat, 12 Dec 2020 13:49:23 +0000 (16:49 +0300)]
Протоколы обмена файлами, IPsec, удалённый доступ
В моём идеальном мире между компьютерами должен быть IPsec.
Аутентифицированный, всё такое. А не костыли транспортного уровня типа
TLS per-application. Мне поэтому жутко не нравится когда протоколы
делают без возможности использования TLS (ну вроде HTTP/2 хотели же) или
когда говорят что FTP это не безопасно. Если поверх аутентифицированного
доверенного IPsec, то какие проблемы?
Кроме IPsec у меня на моих машинах гоняется и SSH. Вот зачем он мне? Для
управления компьютерами вне IPsec (его же тоже нужно как-то настроить
предварительно) конечно нужен, а в общем случае нет. Могу ли
использовать старый добрый telnetd для этого? Попробовал -- могу, вроде
бы всё терминальное (tmux там) работает. А вот все утилиты типа rlogin,
rsh, rcp убраны уже в моей версии FreeBSD. Ну и нужно думать как бы
автоматизировать telnet вход.
А если чуть подольше подумать, то вообще аутентификация по ключам (для
которых локально можно требовать парольную фразу) была бы в любом случае
полезна. telnet намекает на то, что нужно Kerberos использовать. Но у
меня с ним мало что выходило и я его боюсь. То есть SSH поверх IPsec был
бы хорош всем, если бы можно было отключить шифрование трафика, ибо
IPsec это делает. Такой опции из коробки нет. И вообще SSH это про
удалённый доступ, а это значит мало трафика, ибо интерактив для
человека. Поэтому плюнул на telnet+Kerberos идею. SSH всё равно будет
для управления out-of-band IPsec и это уже рабочая инфраструктура,
пускай и с overhead-ом, но для интерактивных сессий не страшного.
А как быть с передачей файлов? NFS работает, но это кардинальное большое
решение, не во всех случаях удобное. scp/sftp не хочется, так как это
уже серьёзный overhead на шифрование, избыточное в IPsec сети. Один файл
можно передать и просто по TCP сокету через netcat. Но продолжить
прерванную передачу нельзя, если не считать руками байты и указать их
для какого-нибудь dd при повторном запуске. python -m SimpleHTTPServer
на одной стороне и fetch/wget/curl позволит продолжить докачку.
tftp сервер просто и быстро поднимается, но всё же это уже больно не
эффективный протокол. Да и, из-за ограничений размеров счётчиков, в нём
только небольшие файлы можно передать. Хотя простота подкупает.
А какие протоколы есть для передачи нескольких файлов, для получения
списка директорий/файлов? FTP -- мамонт, не рассматриваю, хотя он
подходит. Он должен уже не одно десятилетие назад вымереть. Его два TCP
соединения -- та ещё заноза для firewall-а, да и много архаичного в нём,
совершенно не актуального и избыточного для современного мира. lftp
утилита позволяет одной командой зеркалировать целые FTP
серверы/директории. SFTP -- подходит, но, как уже писал, ненужный
overhead в IPsec сети.
Я надеюсь что 9P на практике окажется очень здоровским протоколом,
который бы и NFS наверное заменил. Но в FreeBSD его поддержка будет
только в следующем релизе.
Вспомнил про WebDAV. Который даже позволял из коробки в Windows 98
монтировать удалённые директории. Работало это на Windows у родителей не
очень -- уже не помню конкретики, но вроде просто нестабильно. Но WebDAV
чисто в теории мне нравится относительной простотой, возможностью
использовать без WebDAV клиента (curl хватит или даже броузера), всякими
докачками. В принципе годное решение. Да и всякие lighttpd/apache имеют
из коробки webdav модуль.
rsync ещё могу вспомнить, который по своему собственному протоколу может
работать, без всяких SSH. В отличии от FTP, SFTP, WebDAV -- с большим
количеством файлов/директорий он очень эффективен для зеркалирования.
Никогда не пробовал, но man говорит что и докачивать файлы может
(--append). Тоже годное решение, особенно учитывая что rsync часто есть
на компьютерах и его демон настраивается куда проще чем HTTP-серверы.
FISH https://en.wikipedia.org/wiki/Files_transferred_over_shell_protocol
мог бы быть интересен, но отдельного клиента с ходу для него не увидел.
lftp поддерживает fish://, но при этом запускает его поверх SSH насильно.
UUCP мог бы отправлять/докачивать файлы в обе стороны -- в нём есть
возможность не копировать файл в spool область. NNCP может только через
копирование. Но это уже настройка знаний между компьютерами (хотя UUCP
может и анонимным быть).
Kermit решение вспомнил. http://www.columbia.edu/kermit/ckututor.html
И Zmodem вместе с ним: https://ohse.de/uwe/software/lrzsz.html
В lrzsz даже есть сразу поддержка TCP сервера-клиента и протоколов без
коррекции ошибок (IPsec же!). Списка файлов нет. Но... по IPv4 оно у
меня заработало, а по IPv6 нет -- ругается на какой-то format3, наверное
адреса. Kermit, судя по исходникам, аналогично с IPv6 не должен дружить,
но в нём хотя бы уже и списки файлов можно было бы получать. Но так
можно накопать уже тьму другую софта, особенно ориентированного для
быстрой передачи данных (из единственного TCP соединения сложно выжать
скорость).
Sergey Matveev [Sat, 12 Dec 2020 12:42:18 +0000 (15:42 +0300)]
NFSv4.1
https://lists.freebsd.org/pipermail/freebsd-fs/2020-December/028505.html
https://lists.freebsd.org/pipermail/freebsd-fs/2020-December/028509.html
Оказывается, есть огромная между NFSv4.0 и v4.1. Мол это существенно
отличающиеся протоколы. Я то думал что там только pNFS, опциональный.
Вот разница между NFS 4.2 и предыдущими я помню что небольшая. В 4.1
вроде как меньше проблем можно ожидать. Стал у себя дома использовать
4.1 везде (minorversion=1 добавить к опциям надо). Хотя и прежде то меня
всё устраивало и всё работало, но надо будет запомнить про эту
особенность. GNU/Linux, пишут, по умолчанию автоматом последнюю версию
пытается использовать.
На v4 я давно перешёл. С одной стороны напрягает TCP, но его можно
tune-ить. С другой стороны, мне как пользователю, v4 сильно приятнее тем
что это просто TCP по одному порту и один демон. А не куча RPC, демонов,
портов в случае с NFSv3: cfbfcb542d56cd20b49d506e9f4356eafa75a286. Плюс,
сразу же в протокол встроенные возможности работы с lock-ами, что для v3
отдельно надо было поднимать. В v4 удобнее иерархию директорий в exports
настраивать.
Хотя в целом NFS конечно выглядит как монструознейший по сложности
протокол. Полтысячи страниц RFC. Тогда как какой-нибудь 9P можно по
памяти вспомнить.
Sergey Matveev [Sat, 12 Dec 2020 12:07:20 +0000 (15:07 +0300)]
Vim creep
https://rudism.com/vim-creep/
Забавная история (вымышленная, без какой-либо конкретики) про то, как
вначале человек услышал "Vim." и это изменило его жизнь. Конечно тут всё
сильно преувеличено. Хотя факт того, что даже у меня уже чуть ли не
каждая интерактивная программа имеет vi-like клавиши -- это правда.
Пользоваться Firefox без Pentadactyl стало невыносимо. Одна из причин
почему я перестал (когда ещё пользовался им) обновлять FF это то, что
этот плагин перестал бы работать, из-за регулярной смены API броузера.
В комментариях на тему Vim люди постоянно разбиваются на лагеря. Один
лагерь не понимает что в Vim такого клёвого и мощного, ведь вот в
Atom/Sublime/whatever можно сделать вот так то. А другой лагерь,
Vim-fan-ов, не может привести хорошие примеры где показать мощь Vim.
Atom/whatever любителей можно понять, ибо ресурсов, статей, сайтов
которые бы показывали тьму возможностей и финтов -- почти нет. 99% всего
что я видел по Vim это чуть ли не vimtutor. На этой работе я в Vim чего
только не вытворял с коллегами, но об этом даже в блоге не писал, ибо...
ну да, Vim, там можно круто проворачивать многие вещи -- всё это есть в
документации по сути. Нужно просто понять где и когда уместно применить
то или иное сочетание действий.
It all started out innocently enough. You experimented with it once
or twice in your first year of college, but Nano and Pico were
easier—closer to what you had already been using during high school
on the Windows machines and Macs. But as time went on and you got
more experience under your belt in the college-level computer
science courses, you started to notice something: All of the really
great programmers—the kind who churned out 4 line solutions for an
assignment that took you 10 pages of code to complete; the kind who
produced ridiculously over-featured class projects in a day while
you struggled with just the basics for weeks—none of them used Nano
or Pico.
Staying late one night to finish an assignment that was due at
midnight, you happened to catch a glimpse over one of the quiet
uber-programmer’s shoulders. Your eyes twinkled from the glow of
rows upon rows of monitors in the darkened computer lab as you
witnessed in awe the impossible patterns of code and text
manipulation that flashed across the screen.
"How did you do that?" you asked, incredulous.
The pithy, monosyllabic answer uttered in response changed your life
forever: "Vim."
At first you were frustrated a lot, and far less productive. Your
browser history was essentially a full index to the online Vim
documentation; your Nano and Pico-using friends thought you were
insane; your Emacs using friends begged you to change your mind; you
paid actual money for a laminated copy of a Vim cheat sheet for easy
reference. Even after weeks of training, you still kept reaching for
your mouse out of habit, then stopped with the realization that
you’ll have to hit the web yet again to learn the proper way to
perform some mundane task that you never even had to think about
before.
But as time went on, you struggled less and less. You aren’t sure
when it happened, but Vim stopped being a hindrance. Instead, it
become something greater than you had anticipated. It wasn’t a mere
text editor with keyboard shortcuts anymore—it had become an
extension of your body. Nay, an extension of your very essence as a
programmer.
Editing source code alone now seemed an insufficient usage of Vim.
You installed it on all of your machines at home and used it to
write everything from emails to English papers. You installed a
portable version along with a fine-tuned personalized .vimrc file
onto a flash drive so that you could have Vim with you everywhere
you went, keeping you company, comforting you, making you feel like
you had a little piece of home in your pocket no matter where you
were.
Vim entered every part of your online life. Unhappy with the meager
offerings of ViewSourceWith, you quickly graduated to Vimperator,
and then again to Pentadactyl. You used to just surf the web. Now
you are the web. When you decided to write an iPhone application,
the first thing you did was change XCode’s default editor to MacVim.
When you got a job working with .NET code, you immediately purchased
a copy of ViEmu for Visual Studio (not satisfied with the offerings
of its free cousin, VsVim).
Late one night, as you slaved away over your keyboard at your
cubicle, working diligently to complete a project that was due the
next morning, you laughed to yourself because you knew no ordinary
programmer could complete the task at hand before the deadline. You
recorded macros, you moved entire blocks of code with the flick of a
finger, you filled dozens of registers, and you rewrote and
refactored entire components without even glancing at your mouse.
That’s when you noticed the reflection in your monitor. A wide-eyed
coworker looking over your shoulder. You paused briefly, to let him
know that you were aware of his presence.
"How did you do that?" he asked, his voice filled with awe.
You smile, and prepare to utter the single word that changed your
life. The word that, should your colleague choose to pursue it, will
lead him down the same rabbit hole to a universe filled with
infinite combinations of infinite possibilities to produce a form of
hyper-efficiency previously attainable only in his wildest of
dreams. He reminds you of yourself, standing in that darkened
computer lab all those years ago, and you feel a tinge of excitement
for him as you form the word.
Sergey Matveev [Sat, 12 Dec 2020 09:42:12 +0000 (12:42 +0300)]
Неадекватный человек
https://habr.com/ru/post/532620/
Во-первых, подобную статью компании всё же наверное не стоило бы писать.
Бывают странные и не адекватные люди, хамы, невоспитанные -- но что на
них время то тратить и прелюдно, пускай и обезличенно, выносить эти
тёрки? Не хорошо когда человек плохо говорит на новой работе (тем более
во время собеседования) о старой. Как и когда вспоминает бывшую при
"новой". Также нехорошо, мне кажется, когда компания про кандидатов
своих это делает. Забавные случаи или совсем отрешённые от реальных
людей описания -- это уже другое. Хотя половина статьи это дельные
советы/выводы.
Но меня статья задела тем, что я за свою жизнь знал ровно одного
человека который бы *полностью* подходил под всё описанное тут! Сложно
поверить что такие люди бывают, что это не преувеличения, но подтверждаю
что бывают. Даже ответы этого человека (которые там в виде картинки
прилагаю) как будто написаны моим знакомым. Общение с ним --
незабываемый опыт! Поверить что есть два настолько похожих человека --
не просто, но учитывая что речь про PHP-разработку, то приходится.
Действительно существует прям такой отдельный редкий типаж.
Я вот себя вижу чрезвычайно токсичным человеком, но до этого типа мне
(надеюсь) ещё далеко. Да и вообще с годами я вроде гораздо более
сдержаннее и спокойнее становлюсь. Да и конфликты у меня, как мне
кажется, только из-за переживаний по работе (не)сделанной, а не потому
что хочется самоутвердится, кого-либо унизить или что-то из этой серии.
Sergey Matveev [Sat, 12 Dec 2020 09:27:48 +0000 (12:27 +0300)]
Интернет-кочевники
https://habr.com/ru/post/532648/
У большинства возникают вопросы к таким "кочевникам": есть ли семья
(ответ очевиден), тем более дети. У других вопрос о том, возможно ли
вообще хоть какие-то сбережения при таком образе жизни накопить -- даже
указанные автором цифры говорят что о них можно забыть. Ну и это конечно
удел только молодых, у которых ещё ничего нет, которым, как бы, нечего
терять и нечем рисковать. Вот только когда стукнет за 30, то придёт
осознание что (взято из комментария): нет семьи, нет пенсии, нет места
жительства, нет постоянных друзей.
Но у меня то первым в голове возникает другой вопрос/претензия: работа
за ноутбуком это нормальная работа? Не, я сам то исключительно за
ноутбуком проработал 8 лет, но теперь то вырос (человек резко взрослеет
после приобретения тактильной клавиатуры :-)) и понимаю что в laptop-only
режиме можно только перекантоваться временно, но не полноценно и долго
работать. Учитывая всё удручающее качество ноутбуков и их клавиатур. Это
ещё не говоря про рабочий стол/место (в комментариях верно заметили что
в кафе это всё равно не то) и музыку (один только ЦАП и усилитель у меня
весят наверное под 10кг, плюс объёмные наушники в чехле).
Sergey Matveev [Sat, 12 Dec 2020 09:18:53 +0000 (12:18 +0300)]
Посмотрел "Бобро поржаловать"
https://ru.wikipedia.org/wiki/%D0%91%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D1%80%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C
А то грех не посмотреть то, что имеет невиданный успех во Франции (где
много хороших фильмов снято), обходя рекорды десятилетий. Забавный
конечно, но удивительно чем именно он так превзошёл всех остальных.
Думаю что нам, не франкоговорящим, просто не настолько понятна вся
забавность выговора и поэтому не дано это прочувствовать. Но
рекомендовать точно бы смог, есть особо смешные запоминающиеся моменты.
Sergey Matveev [Sat, 12 Dec 2020 08:10:59 +0000 (11:10 +0300)]
Посмотрел "Дед Мороз -- отморозок"
https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%B4_%D0%9C%D0%BE%D1%80%D0%BE%D0%B7_%E2%80%94_%D0%BE%D1%82%D0%BC%D0%BE%D1%80%D0%BE%D0%B7%D0%BE%D0%BA
Выбитые мозги в телефонной будке, застреленные люди, расчленёнка,
скармливание трупа животным в зоопарке, побои беременных, драки,
суициды, секс перед животными, гомосексуальные приставания... в общем
отличная новогодняя комедия! Причём снятая ещё в далёком 1982-ом. И пишу
всё без сарказма -- мне действительно комедия очень понравилась, хотя по
сути то она довольно чёрная.
Sergey Matveev [Fri, 11 Dec 2020 07:39:24 +0000 (10:39 +0300)]
Cyberpunk 2077 бьёт рекорды
https://habr.com/ru/news/t/532448/
https://habr.com/ru/news/t/532296/
Пишут что Cyberpunk игра бьёт массу рекордов по деньгам, предзаказам и
даже на трафик неплохо повлияла. В этом году, слыша что куча знакомых
если и играет, то во всякие сетевые игры, подумал что "а не умирает ли
жанр одиночной игры, как таковой?". Ведь целые жанры исчезали из
mainstream-а игродела (квесты, IF-ы, как минимум). Делают то, что
приносит деньги, а всё остальное становится "indie" и подобным. Но
Cyberpunk намекает что рано хоронить не сетевые игры.
Впечатлён размерами игры: 100 гигабайт скачивать надо. У меня несколько
лет была 100GB SSD, сейчас несколько лет живёт 120GB. И больше то и не
нужно. А вот для игрушки бы не хватило. А если бы был HDD, то наверное
не один час бы заняла установка с него на него же. И в комментариях люди
описывают тормозит ли или нет на разрешениях в 38xx-на-что-то-там. А я
вроде так и не играл в FPS игры на разрешениях больше 800x600, ибо
железа не хватало. Doom3, как одна из последних сыгранных, игралась на
640x480 только и то, на уровне в туннелях с маской произошёл какой-то
баг и у меня показывалась картинка 50x100 пикселей наверное и играть
было невозможно (я включал god mode и просто напролом куда-то пёр, пока
не вышел из них).
Хотя Call of Duty: Modern Warfare занимает почти 250GB:
https://www.pcgamesn.com/call-of-duty-modern-warfare/install-size-200-gb
Да и остальные нехило весят тоже:
https://www.gamesradar.com/biggest-ps4-install-size-games/
Ясно где для дома NVMe пригодится.
Sergey Matveev [Thu, 10 Dec 2020 10:29:04 +0000 (13:29 +0300)]
Первый день весны
https://fantlab.ru/work204563
http://www.mds.cypherpunks.ru/Dmitrij_Gradinar-Pervyj_denj_vesny.opus
Внезапно я легко нашёл книгу о погасшем солнце, которую прежде никак не
мог вспомнить: da7fc085eee25f089ddd0bd6af5bca38afdd63cd
Sergey Matveev [Thu, 10 Dec 2020 09:07:34 +0000 (12:07 +0300)]
Mantar запись московского концерта
https://www.youtube.com/watch?v=lSrGQT8_nWk
https://www.youtube.com/watch?v=2xdze-aqK8s
https://www.youtube.com/watch?v=R1QsMZJ77FM
https://www.youtube.com/watch?v=jaSA7j4PePM
Внезапно увидел что в YouTube есть запись (всего?) концерта Mantar
(5443aff12e760fd58eb15b0d0c325b4f380d88f3). Одного из лучших и
незабываемых концертов в моей жизни.
Sergey Matveev [Wed, 9 Dec 2020 08:59:15 +0000 (11:59 +0300)]
Не привет
https://neprivet.ru/
https://gist.github.com/ValdikSS/570631cca891719a770c
https://valdikss.org.ru/smart-questions.html
https://www.nohello.com/
При обсуждении 6855f1c4e5ade25cfd4a97941ce6dab32cedb18a, вспомнились
ссылки с рекомендациями как задавать вопросы в электронной переписке. У
ValdikSS взял все эти ссылки. Вообще чуть ли не в каждом крупном проекте
ПО есть похожие рекомендации и даже шаблоны где человека *сразу* просят
рассказать суть проблемы, что было предпринято, и т.д..
Как грамотно задавать технические вопросы, чтобы эффективно общаться
и получать ответы (версия ValdikSS):
Многие молодые люди привыкли к синхронному тет-а-тет общению в
интернете, никогда не писали бумажных писем, из-за чего не умеют или
не осознают, как эффективно задавать вопросы технического толка.
Если вы хотите задать вопрос, пишите так, чтобы собеседнику всё было
понятно без дополнительного расспрашивания:
* Начните с короткой формулировки проблемы. Ёмко опишите, что не
работает или не получается сделать.
* Опишите проблему в деталях. Разъясните в сообщении, какой
результат вы получаете, а какой должен быть на самом деле. Укажите
ваше оборудование и версии ПО. Лучше написать больше информации,
чем что-то упустить.
* Опишите ваши действия, которые вы предприняли для решения
проблемы. Специалисты часто ожидают, что вы проделывали какие-то
действия для решения проблемы до того, как задаёте вопрос. Если вы
совсем не разбираетесь в теме, что даже не знаете, с чего начать —
так и напишите, чтобы не складывалось ложного впечатления, что вы
просто ленивый.
* Отправляйте сообщение и ожидайте ответа. Некоторые проблемы
требуют раздумий и длительной подготовки ответа, будьте терпеливы.
* Помните: чем точнее и полнее вы сформулируете вопрос, тем больше
шансов, что вам ответят. Уважайте собеседника, и собеседник будет
уважать вас.
И вот хорошо сказано что это реально всё не понятно людям привыкшим к
синхронному общению. Кто ничего из списка из коробки делать не будет. В
итоге эффективность работы/общения/кооперации явно невероятно низкая. И
дав таким людям email, они же и в нём будут так же писать.
И я неоднократно получал вопросы по PyGOST/ещё чему то в духе описанном
на neprivet.ru: "можно задать вопрос?", я отвечаю, через полдня мне
придёт вопрос. Меня просто даже удивляет мотивация задавать вопрос о
вопросе. Мне кажется шансы что человек вас пошлёт, не будет общаться,
будет слишком занятым, куда меньшие чем то что он пойдёт навстречу и
выслушает. Поэтому почти с 100% вероятностью инициатору придётся всё
равно написать свой вопрос. А раз всё равно писать, то зачем этот лишний
round-trip? Более того, часто бывает что инициатор думает что у него
большая проблема, требующая долгого объяснения/решения, хотя она на
самом деле такая мелочная глупая, что её решение сразу же понятно у
ответчика и не займёт много времени, как бы он ни был занят.
me: "Hi"
them: "Hello"
me: "How's your day been?"
them: "fine"
me: "Crazy weather"
them: "yeah"
me: "Do you have a second to chat about ABC"?
them: "Just a sec"
me: "Ok"
them: "Ok, shoot"
me: "Do you if PDQ about ABC?"
them: "Oh yeah, it's 123"
Sergey Matveev [Wed, 9 Dec 2020 08:32:41 +0000 (11:32 +0300)]
Как же тут не любят Ruby
http://harmful.cat-v.org/software/ruby/
Забавное собрание цитат про Ruby:
Ruby is Scheme mated with Perl in such a way that the best genes of
both failed to exert a phenotype.
ruby is what happens when some kid learns java then looks at perl
and thinks ‘I can fix this!’.
Everything you heard about Ruby being slow is not true. It’s about
twice as slow as that
Ruby performance tuning really feels like trying to get the best
miles per gallon out of a tricycle.
Ruby performance tuning also feels like trying to bail out the ocean.
At least Perl is hilarious. Ruby does not have the redeeming quality
of being funny.
irb(main):003:0> ''.methods.length
=> 176
А я ведь в 2000-х писал на Ruby и Ruby On Rails. В принципе то жить
можно было, хотя и казалось что это тоже такой Perl, где вот 176 методов
только для пустой строки. Небольшая скорость тоже запомнилась. Но особо
негатива не осталось, хотя я тогда ещё и совсем молодой был. Но когда я
увидел Django и Python, то тогда Ruby полностью забросил и забыл про него.
Sergey Matveev [Wed, 9 Dec 2020 08:27:27 +0000 (11:27 +0300)]
Посмотрел "После прочтения сжечь"
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%81%D0%BB%D0%B5_%D0%BF%D1%80%D0%BE%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B6%D0%B5%D1%87%D1%8C
С одной стороны, это конечно не шибко то и комедия, ибо куча людей
мёртвых, сплошные измены и страшная деятельность ЦРУ. Но с другой, такая
глупость, с точки зрения стороннего наблюдателя (ЦРУ), такая фигня
выходит, просто потому что люди оказывались не во время не в том месте,
что выходит очень забавно! Собственно, чёрная комедия. Очень понравилась!
Sergey Matveev [Tue, 8 Dec 2020 19:41:14 +0000 (22:41 +0300)]
AirPods Max
https://habr.com/ru/news/t/532008/
Безусловно только Apple может предоставить наушники за 62 тыс. руб., но
даже не показать АЧХ. Ладно, даже не написано какие частоты то
воспроизводит уж. Вообще ничего про звук... ведь это же наушники, кому
он нужен? Think different! Мне казалось что начиная с 2-х тыс. руб. для
наушников это уже всё будет указываться.
Плюс ещё очень важен вес. Каждые десятки грамм, по своему опыту, знаю
что сильно влияют на возможность долгого ношения. Мои Байеры 290г
весят, а AirPods на сотню грамм больше. В них конечно и электроника и
аккумуляторы, ничего удивительного, но это точно не для долгого ношения.
Sergey Matveev [Tue, 8 Dec 2020 19:21:21 +0000 (22:21 +0300)]
Почему Vi использует hjkl клавиши, а в JS месяц с нуля?
https://www.hillelwayne.com/post/always-more-history/
Просто любопытное копание в истории почему так всё устроено. Про vi я
знал. Также ещё и факт что Esc на клавиатуре находился на месте Tab и
поэтому легче нажимался чем сейчас. Про даты я конечно догадывался что
для оптимизации, но не знал что они так заморочено хранятся в памяти.
Sergey Matveev [Tue, 8 Dec 2020 14:08:32 +0000 (17:08 +0300)]
github.com/agl/xmpp-client XMPP клиент на Go
У меня уже прилично времени нет установленного XMPP клиента. Давным
давно, я пользовался mcabber и был им полностью доволен. Одно с ним
большое но: он не поддерживает несколько учётных записей -- нужно
запускать несколько программ.
Когда Google, Facebook, ВКонтакте прикрыли возможность его
использования, то почти все люди исчезли из мира Jabber.
На работе его использовали, но из-за желания использовать мобильные
устройства, он тоже отпадает, ибо, насколько понимаю, нету для мобильных
ничего нормально работающего, кроме централизованной проприетарщины. И
на работах всех Jabber исчез. Но для всяких решений типа Mattermost и
Slack есть мосты для IRC. В ivi какое-то время были попытки использовать
IRC. На следующей работе тоже, даже использовали, так как связь с
XMPP-сервером паршивила.
В итоге я уже много лет использовал irssi и bitlbee, который снёс когда
Jabber полностью пропал даже на работах. Но всё же учётные записи у меня
остались и есть люди с которыми крайне редко, но нужно связаться через
него.
И вот попробовал xmpp-client -- для супер частого постоянного
активного использования (которого в IM-ах у меня уже много лет нет в
принципе) он наверное не очень удобен, но в остальном имеет всё что
надо. Все базовые фичи Jabber поддерживает, управляет ростером,
статусами, показывает изменение статусов собеседников, даёт
многострочные сообщения вводить, из коробки сразу же OTR автоматический.
Состоит ровно из одного бинарника, без Си зависимостей. Один JSON
конфиг, автоматом создаваемый. OTR ключ в нём же хранится, как и
отпечатки ключей собеседников. SMP OTR поддерживается. Редактируемая
строка ввода, разукрашенный вывод. В общем, для себя взял на заметку что
если нужно быстро и просто поднять клиент, то это отличный вариант. Если
не нужен MUC (тут уж другие клиенты нужны), передача файлов и подобное.
MCabber ещё надо ставить, собирать зависимости, да и конфиг править.
Bitlbee аналогично, плюс вспоминать как пользоваться, ибо его help-ы и
дока запомнились не лучшей точностью, болью и страданиями при работе с
MUC. Но bitlbee приятен тем, что для всего используется один irssi
(например), а он уже является мостом и можно несколько учётных записей
использовать.
Sergey Matveev [Tue, 8 Dec 2020 11:34:25 +0000 (14:34 +0300)]
Хлеб в холодильнике
У некоторых людей я видел такое, когда вместо хлебницы хранят в
холодильнике. И мне не нравилось что он холодный -- хотелось хотя бы
комнатной температуры. Но в итоге, с переездом, как стал жить один, сам
стал так делать. Ибо он хранится существенно дольше. Один я не съедают
батон чтобы он не успел начать портится.
Sergey Matveev [Tue, 8 Dec 2020 07:36:37 +0000 (10:36 +0300)]
Клетки Фарадея для дома
https://habr.com/ru/news/t/531850/
Люди покупают эти клетки для защиты от "вредоносного" 5G, но жалуются
что что-то сигнал плохо и ничего не работает. Ну эту новость не
переплюнет ранее написанная с амулетами супротив 5G: 19f39a3de479bc9ab31c12f2d4ff79b5d65dad41.
А вообще если нужно действительно оградить себя от как-то оказавшегося в
квартире какого-нибудь iPhone-а, который и не выключить и аккумулятор не
вынуть, то клетка бы пригодилась. Но вот у меня дома "из коробки" ни
одного места нет где бы сотовый не работал: микроволновка идеально
пропускает GSM (конечно, если её включить, то через некоторое время
сотовый точно не будет ничего передавать). Отец предложил холодильник,
но там у меня не было сомнений что дохлый номер. Коробка полностью
металлическая из под чая, закрывающаяся плотно -- ухудшает сигнал, но
всё равно он работает.
Раньше были проездные от электрички и метро -- помещал их в
собственноручно сделанный чехол с кучей фольги. Дело ещё с института
было. И вот через несколько слоёв фольги ни Bluetooth устройства, даже
вплотную к USB-приёмнику, не работали, ни сотовые, ни, соответственно,
RFID/NFC карты. А с переездом на электричке стал ездить так редко, что
использую одноразовые билеты. И с коронавирусом в метро тоже по
одноразовым стал, ибо редко вылажу.
Sergey Matveev [Sun, 6 Dec 2020 15:00:48 +0000 (18:00 +0300)]
Новая коллекция GNU проекта о запланированном устаревании
https://www.gnu.org/proprietary/proprietary-obsolescence.html
Как и ожидалось, Apple, Google, Samsung и их устройства в которые
заложены тормоза и просто неработоспособность после какого-то времени.
Не забуду свой Panasonic CD-плеер, который подарили на день рождения,
тогда же он, соответственно, был включён первый раз, а ровно через год,
буквально на следующий ДР, он просто так перестал включаться совсем
(хотя его не били и был в отличном состоянии).
Sergey Matveev [Sun, 6 Dec 2020 14:58:51 +0000 (17:58 +0300)]
Статья про квантовые компьютеры, в том числе и про криптографию
https://habr.com/ru/post/480480
В тему b9198692a94e3f931bee4b7411a84ca0a9577a02 статья о квантовых
компьютерах интересная с попытками разъяснить это на пальцах.
Sergey Matveev [Sun, 6 Dec 2020 11:44:42 +0000 (14:44 +0300)]
В Prey серверы с VGA и жёсткими дисками
В добавок к d62cebfa50b82f8e2f859ce94ee9c78e44511ae2: в одном месте там
видны стоечные серверы и их задницы. И RJ45 и VGA до сих пор всё точно
так же используются. А то находятся люди которые считают что VGA уже
сейчас умер -- надо постараться найти сервер без него! Хотя меня тоже
удивляет, что, в казалось бы, весь из себя цифровом компьютере,
продолжают использовать аналоговый сигнал для визуализации информации.
HDMI всё же дороже чем ЦАП? DisplayPort, в виду своей природы, насколько
понимаю, ощутимо сложнее устроен и требует больше "мозгов". Или HDMI всё
же действительно в целом паршиво работает, как вот у меня в ноутбуке
(да, до сих пор его иногда приходится подключать по VGA!)? Или лицензии
какие-нибудь стоять на HDMI/DP так, что проще ЦАП засовывать? Или просто
тот факт что и мониторов много только с VGA до сих пор, а их, в свою
очередь, потому что серверов/компьютеров? У меня дома ни дома, ни на
работе нет никого где бы ни было VGA. Хотя нет и ни одного монитора где
бы не было, в добавок, и DVI, в который зачастую можно HDMI конвертировать.
Sergey Matveev [Sun, 6 Dec 2020 10:28:18 +0000 (13:28 +0300)]
Может нам всё же не нужен децентрализованный web?
https://withblue.ink/2020/11/12/maybe-we-shouldnt-want-a-fully-decentralized-web.html
https://news.ycombinator.com/item?id=25312854
Человек был увлечён IPFS, хостил в нём свои творения, что-то писал,
ратовал за свободу слова, а потом решил забить на всё это и прекратить
поддерживать IPFS и связанное с ним. Мне статья понравилась тем, что
пересекаются мысли в ней с моими во многих отношениях.
Автор, по моему, всё же мешает цензуру/свободу с
централизацией/децентрализацией. Связь между ними конечно есть, но всё
же натянутая зачастую. И в централизованной системе можно обеспечивать
анонимность, конфиденциальность, безопасность. И в децентрализованной
устраивать цензуру. Но буду считать что он просто вот так эти термины
решил использовать.
Его мысли близки к моим относительно Tor-а, выходную ноду которого, не
говоря про релейную, я держал не один год. Уже не раз писал, но
повторюсь что Tor-у, как проекту, я просто не доверяю что их мотивом
является свобода/анонимность/бла-бла-бла: чисто технически у них
централизованная БД нод, централизованное управление поведением сети и
её участниками (собственно, тоже цензура), при этом нет защиты
анонимности от злоумышленника государственного уровня и ничего для этого
не предпринимается. Ответом на последнее могло бы быть: используйте I2P,
если нужна более сильная и надёжная анонимность. Но а Tor тогда что и
для чего? Я его вижу и воспринимаю исключительно как инструмент для
обхода цензуры сетевой. И исключительно для целей (ведь никто и не
скрывает что оно и создавалось и спонсировалось ВС США) пропаганды США.
Любое творение может использоваться и во вред и для блага. А основной
прогресс делают для военных целей, потом уже применяя в быту и для
благих. Tor тоже можно использовать и для благих целей, как, банально,
например просто для создания относительно доступной тогда входа для
своей ноды, которая может быть за NAT-ом и быть мобильной. Но есть
решения более для этого приспособленные -- Tor излишен. Его можно
использовать *в теории* и для многих других вещей, о которых у них пишут
на сайте. Но... для всего этого чисто технически куда лучше использовать
кучу других технологий (если забыть про размер anonymity set), типа
Freenet, I2P, GNUnet (в теории). А Tor имеет и цензуру и ничего не
делает для улучшения анонимности/whatever, ведь свою основную (как я её
воспринимаю) задачу он выполняет: обход сетевых ограничений вражеских
государств, для пропаганды и помощи оппозиционерам и сепаратистам.
Помогая Tor-у, запуская свои релейные или выходные ноды, я безусловно
помогаю честным людям, которые используют для благих целей. Но при этом
я автоматом помогаю и куда большему кол-ву людей свободословить и
подрывать стабильности гос-в, вешая лапшу на уши, промывая мозги, сея
дезинфу и распространяя слухи. И я убеждён что этих людей *значительно*
больше. В этом абзаце речь только про Tor, про ситуацию на данный момент
(ok, на момент "несколько лет назад", когда я его поддерживал).
Хорошо, возможно я заблуждаюсь и преувеличил и на самом деле людей там
больше которые его используют например для доступа к заблокированным
BitTorrent трэкерам каким-нибудь. А вот тут я считаю что нужно или
переносить по человечески BitTorrent/whatever ресурсы в overlay
цензуроустойчивые сети, или бороться со всякими уродами которые
блокируют подобные ресурсы. Ведь в основном все эти блокировки из-за
сверхбогатых корпораций которым проще просто заблокировать весь трэкер
из-за наличия на нём нескольких нелегально скопированных творений, чем
думать о том какой вред это наносит остальному. Проще заблокировать
львиную долю CDN-ов из-за наличия на них одного ресурса, забывая (и
никогда не зная, на самом деле) про то, что на них тысячи других никак
не связанных.
И вот тут мне цензура не нравится, как осуществляется. Может она совсем
не нужна? Дай волю рыночным отношениями, и "товар" будет предоставляться
теми у кого больше денег/возможностей. Сейчас вон в каждом экспортном
фильме или компьютерной игре из США (да, немного преувеличиваю)
обязательно будет черножопый пидарас трансвестит. Нужно вдолбить что это
нормально. Нужно вдолбить что семейные ценности, честь людей не стоят
ничего и нужно жить только по "рынку". Нужно вдолбить что центром мира
была, есть и всегда будет США. Вдолбить что нужно за всё мстить, есть
только сила и ничего кроме, она всем правит, а темы по доброту,
сострадание и прочее нужно табуировать. Это и сейчас льётся, хотя и не в
таких кол-вах из-за хоть какого-то, но контроля/цензуры. Сколько у нас
народу считает что COVID19-а нет на самом деле и это просто заговор. А
сколько считает что он есть? Сколько уверены что будут "чипированы"?
Сколько уверены что США выиграла Вторую Мировую? Сколько миллионов
уверены в том, что Земля плоская? За считанные дни/недели можно взять и
заставить ненавидеть всех мусульман в мире, как делает Макрон. И список
можно продолжать до бесконечности.
По хорошему конечно же людей надо учить критически мыслить, просто
мыслить, не верить домыслам, неподтверждённым фактам и прочему. Говорить
об этом легко, только сделать сложно, почти невозможно. И делать нужно
заранее, до того как им через соцсети/Tor-ы/whatever начнут вливаться
эти потоки убедительного бреда. Армию нужно вооружить, никто не спорит,
но делать это надо до того, как на неё нападут. А цензура является некой
обороной, сожжённым мостом по которому враг может пройти, которая может
хотя бы оттянуть подготовку. Я вижу как легко молодёжь "заражается"
либеральными взглядами. Вижу что людям проще поступать нечестно и
обманывать корпорации используя Tor, делая jailbrake своих Android/iOS,
вместо того, чтобы не спонсировать и бить "рублём" обнаглевшим Apple и
другим проприетарным корпорациям. Я то помню что даже файл не
скопировать штатными средствами, пока или не поставишь недешёвую софтину
(извините, я отдал XXX тыс.руб., но мне из коробки не дают "проводник"?)
или не сделаешь jailbrake. Tor проще, пару кликов, и вот ты уже смотришь
нелегально скопированное нечто. Jailbrake -- пару кликов и твой девайс
становится юзабельным. Везде есть простые решения: снять проститутку,
своровать что плохо лежит, просто отнять/ограбить у более беззащитного,
купить SIM-ку на вокзале чтобы зарегаться и общаться в VK/Telegram/whatever.
В итоге я и сам не понял какая точно моя позиция. Она точно не бинарная,
поэтому и не могу её точно назвать. С одной стороны цензура мало кому
нравится и это плохо. С другой стороны -- без неё нельзя. Tor я
однозначно бойкотирую и считаю инструментом созданным и, в первую
очередь, используемым для пропаганды. Нужна анонимность -- для этого
есть более достойные, с технической точки зрения, инструменты. Тут для
меня важны мотивы. И если мотивы изначально явно не благие (или я им не
верю, не верю в честность), то тут всё понятно. Пистолет можно
приобрести для убийства, для защиты, для колки орехов, охоты ради еды
или ради забавы. Сейчас Tor это инструмент пропаганды США. А почему бы
его не превратить в инструмент пропаганды РФ, для подрыва и
дестабилизации США? В теории можно. И тогда, поддерживая его, я
поддерживаю техникой страну. И это вроде бы хорошо. Но пока в
информационной войне, как минимум с Tor-ом, мы не так сильны, как наши
враги и поддержка Tor-а это как покупка акций военной компании США
делающей оружие для бомбёжки РФ. Но то, что Tor это инструмент для
пропаганды -- это бесспорно, как и пистолет это точно инструмент не для
колки орехов. И вот у автора статьи про IPFS что-то похожее на всё это.
Ему не нравится пропаганда РФ, пропаганда против геев, ЛГБТ, призывы к
нацизму или против ислама. Мне наоборот не нравится пропаганда США, за
геев/ЛГБТ, но с остальным солидарен. Но он как-то может выразить
(не)поддержку инструментов для этого. Я вот полностью согласен с:
I have seen, and I am seeing every day, the dangers of completely
unrestricted speech, and I don’t want to be the one enabling that.
Я видел не раз во что превращается место в Сети где полностью нет
никакой модерации. Общение с людьми почти невозможно проводить если нет
модерации (что тоже является цензурой). Даже в маленькой рассылке
cryptoparty@ не может не появится срачь, который надо останавливать и
включать модерацию. Люди так устроены. И автор статьи приводит примеры
во что свободословие превращается де-факто всегда.
Некоторые вещи, изначально с плохими/спорными мотивами, могут стать и
благом в будущем, или наоборот. Атомная энергия. FidoNet изначально же
вообще создавался голубыми для общения между собой, а потом вон чем
клёвым стал. И там кстати сильнейшая цензура/модерация по факту.
Возможно первые смартфоны создавались действительно для блага людей, а
теперь это, в первую очередь, крутейший инструмент для слежки и
уничтожения приватности людей. Список, опять же, можно до бесконечности
продолжать. Ну и, как всегда, то что для одного благо -- обязательно
найдётся кто-то другой кому это будет во вред.
Sergey Matveev [Sun, 6 Dec 2020 10:20:28 +0000 (13:20 +0300)]
Распределённый Github
http://radicle.xyz/
http://blog.vmsplice.net/2020/12/understanding-peer-to-peer-git-forges.html
https://news.ycombinator.com/item?id=25313010
Blockchain, какие-то новые транспортные протоколы, потому что NAT
мешает, и куча ещё всяких каких-то идей и задумок. Про себя думаю: что
только люди не придумают, лишь бы не пользоваться email и git-ом
научиться.
Sergey Matveev [Sun, 6 Dec 2020 09:30:59 +0000 (12:30 +0300)]
С отцом затарились в магазине для скейтеров
https://www.dcrussia.ru/mens-collection-acdc/
Кто бы мог подумать что или я или папа по какой-либо причине пойдём в
магазин одежды для скейтеров? Но ради коллекции AC/DC поехали. Я давно,
наверное со школы, никогда не любил спортивную обувь чисто эстетически.
Просто не моё. Но один раз как-то, когда уже и институт закончил, решил
попробовать походить в чём-то не сильно напоминающем спортивную обувь,
но с мягкой подошвой (кеды, кроссовки? не знаю как это называлось). И с
того момента летом стал носить только с мягкой (сильно мягкой) подошвой,
даже не обращая внимание что это и спортивное и не сочетается с
джинсами, кожаной жилеткой, grindcore-футболками и прочим. Удобство
такого уровня что остальное не имеет значения (это только женщины могут
променять удобство на что-то другое)! И вот папе уже наверное с год
советовал попробовал что-то мягкое надеть, ибо ноги существенно меньше
устают. Вот на AC/DC кеды он уговорился.
Sergey Matveev [Sun, 6 Dec 2020 08:57:00 +0000 (11:57 +0300)]
Посмотрел прохождение Prey (2017)
https://en.wikipedia.org/wiki/Prey_(2017_video_game)
Изредка смотрю на современные игры из любопытства. Ну и чтобы просто
быть в теме хоть как-то, чтобы отдалённо представлять что такое FarCry
(хотя первая часть вышла когда я был ещё в школе, но у самого железа не
было чтобы поиграть), Crysis, Halo, Battlefield, Gears Of War,
Unchanted, Dishonoured, Metro 20xx и т.д.. И вот толком сильно ничего не
захватывает. Безусловно смотреть на игру и играть самому это очень
разные вещи! Поэтому против игр ничего не хочу сказать. Bioshock
смотрел, ибо это же как игра из серии System Shock, которую (2-ую) я
обожал! Но... смотреть это одно, а играть -- другое. И смотреть мне
особо не доставляло удовольствия.
Но вот начал смотреть Prey (2017) и меня засосала тематика, сюжет и всё
всё всё. Почти ни разу не промотав в проигрывателе, от начала и до конца
просмотрел, пока ел, пока по мелочам что-то делал рутинное. Вот это
"продолжение" System Shock 2 каким оно и должно быть! Хотя ведь чуть ли
не всё уже реально было изобретено в SS2. Хаки техники, починка,
производство вещей (в SS2 из нанитов), пси, RPG система и прочее. Но в
Prey так всё выглядит сбалансированным, богатым и варьируемым по
возможностям. Музыка атасная для атмосферы этой игры. Модификаций оружия
в SS2 я с ходу не помню, но там была УЖАСНО бесящая порча этого оружия,
возможность его сломать и что оно заклинит. В Prey убрали -- это одобряю.
И сам сюжет жутко интересен. Разнообразные и не шибко мрачные места
действия. SS2 мне запомнился сильно угнетающей атмосферой. А тут и
звуков море и постоянно с тобой разговаривают.
Вовсю надо слушать аудиозаписи и читать чужую почту -- и для получения
кодов и вообще для понимания происходящего. В Doom3 не забуду что это
тоже было, но когда играл в первый раз, то забивал, ибо лень, хочется
бегать и стрелять. И в целом это и никто не заставлял делать -- всё
добровольно. Но на самом деле, без этого будет *крайне* мало амуниция
попадаться. В принципе можно и фонариком бить по голове и считанные
патроны для пистолета считать, но сильно проще всё же читать логи и из
них получать коды доступа к сейфам, где амуниция. Я бы даже сказал что
только так и можно играть по человечески, чтобы не превращать игру в
stealth-partisanen с "ударил, убежал, спрятался, переждал, снова ударил".
Нравится что даже в отдалённом будущем люди всё равно используют именно
email, ибо им нужно работать и использовать подобающий для этого
инструмент. Но не понравилось что даже в этом будущем, нажимая на иконки
интерфейса появляется анимация раскрытия разделов, вместо того, чтобы
быстро и сразу показать запрошенное. Программисты так и не научились там
писать быстрый софт :-)
Sergey Matveev [Fri, 4 Dec 2020 19:14:47 +0000 (22:14 +0300)]
Собаки расстреливают людей
https://lenta.ru/news/2019/10/08/dog/
https://lenta.ru/news/2018/05/10/dog/
https://lenta.ru/news/2017/12/01/friendlyfire/
Новость за новостью о том как собаки то из пистолетов, то из ружей
стреляют в своих хозяев.
Sergey Matveev [Fri, 4 Dec 2020 12:34:27 +0000 (15:34 +0300)]
Moxie не особо понимает как можно доверять одному корню DNSSEC
https://moxie.org/2011/04/11/ssl-and-the-future-of-authenticity.html
https://www.theregister.com/2011/02/18/fed_domain_seizure_slammed/
Намекая что, так как это в США (да и к любой другой стране это также бы
относилось, просто США уже показали свою суть), то в любой момент они
могут заставить сделать всё что угодно. Проблемы CA, как он описывает: и
в том что непонятно откуда у человека появляется доверие к XXX CA, и то,
что даже если Comodo и обосрётся (что уже произошло), то доверие к нему
никуда не денется и его CA сертификаты всё равно останутся в trust
anchor-ах. Причём с DNSSEC-ом всё гораздо хуже, ибо CA для TLS можно
менять, их много, а DNSSEC корень один.
Sergey Matveev [Fri, 4 Dec 2020 11:31:38 +0000 (14:31 +0300)]
О доверии к Apple железу
https://sneak.berlin/20201204/on-trusting-macintosh-hardware/
Оказывается у всего последнего Apple железа нельзя очистить диск/ОС и
установить всё с нуля, пока по Интернету не получить одобрение от Apple,
в виде подписанного сообщения. То есть, без их разрешения, каждый раз
одобряемого, не дозволено на их компьютерах ставить что захочешь.
То есть, для безопасных компьютеров с воздушным зазором (air-gapped),
для тех кто блюдёт криптографическую целостность (полностью очищаемые и
переустанавливаемые системы с доверенного носителя), те кто находятся
вне зоне доступа к Интернету (корабли, как минимум) -- Apple компьютеры
не могут использоваться по определению.
Я вот не сильно против чего имел того, что в ФСБ бумажки делают в Word,
на Windows, но эти компьютеры хотя бы изолированы и не подключены к
Интернету. А с Apple не перестаёшь удивляться их безумным задумкам. И
ещё больше удивляться что пипл это всё равно продолжает хавать.
Sergey Matveev [Fri, 4 Dec 2020 09:22:45 +0000 (12:22 +0300)]
Онлайн-кинотеатры не будут показывать "Криминальное чтиво"?
https://roskomsvoboda.org/67069/
Ну тут конечно сплошное словоблудство, но если представить что
действительно "Чтиво" будет под запретом (одна только клёвая
демонстрация приёма героина чего стоит!), то проще вообще считать
что кино у нас под запретом. Какой смысл в кино, если нельзя такое
посмотреть?
Sergey Matveev [Thu, 3 Dec 2020 12:15:42 +0000 (15:15 +0300)]
Atom комментариев блога тоже отдаёт HTML
В продолжение 259486cf8eb23b982d8b1b846315a5658a7667eb и feed для
комментариев отдаётся HTML-ем. Я просто забыл про комментарии и
поэтому их не сразу переделал вкупе.
Sergey Matveev [Wed, 2 Dec 2020 17:15:28 +0000 (20:15 +0300)]
Анкета после траха
https://lenta.ru/news/2020/12/02/10_iz_10/
Меня вот раздражает когда после связи с техподдержкой какой-нибудь тебе
приходит опросник (по email или SMS). Как и любые оценки людей людьми,
ибо неприятные люди, как бы они хорошо не выполняли работу или что-то
творили на благо -- всё равно будут "заминусованы", ибо большинству
объективность не важна нисколько. А тут вот за границей ещё и женщины
будут присылать анкеты с оценками по десятибальной шкале после "траха".
Что ещё раз говорит о том, что секс для женщин ничего существенного не
значит, поэтому и изменяют легко и обижаются что это не нравится их
мужчинам: "это же просто был трах, а не измена!", ибо "я ж свободная
женщина, фигли меня кто-то будет в чём-то ограничивать, я никому ничего
не должна".
Sergey Matveev [Wed, 2 Dec 2020 13:33:29 +0000 (16:33 +0300)]
Oragono IRC сервер
https://oragono.io/
Что-то вспомнился сегодня Oragono IRC сервер написанный на Go. Пробовал
его устанавливать и с ним работать, проверяя в том числе и irssi работу.
В отличии от моего goircd http://git.cypherpunks.ru/cgit.cgi/goircd.git/tree/README
он конечно громадный монстр по возможностям. Но приятно что в нём сразу
встроены всякие NickServ/ChanServ, bouncer, SASL и куча всего. Его
конфиг огромен! Но особо в нём можно ничего не трогать и всё из коробки
довольно легко и быстро заводится. Если кому-то нужен нормальный
здоровый полнофункциональный IRC сервер, то рекомендовал бы этот. Плюс
он на Go, быстро собирается. IRCv3 поддержка полная, даже с черновыми
CAP-ами.
Sergey Matveev [Wed, 2 Dec 2020 12:59:29 +0000 (15:59 +0300)]
Greylisting -- худшее что случалось с email после спама
http://articles.marco.org/238
Автор пишет что greylisting не работает и, более того, email перестаёт
быть instant-ом! Во-первых, а когда это email был instant-ом, и когда он
вообще предполагался хоть в каком-либо месте архитектуры своей что он
будет работать так? Автор порет чушь. Во-вторых, достаточно включить или
выключить greylisting и посмотреть на практике повлияет ли это на кол-во
спама. Я в этом или прошлом году ради чего-то временно отключил его, а
дальше решил не включать и посмотреть что будет. На глаз спама стало
больше. Включил обратно. Статья -- брехня. Более того, большинство
серверов с которыми моему приходится общаться -- все с greylisting-ом.
Статья правда из 2007-го и наверное с того времени greylisting только
чаще стал использоваться.
Sergey Matveev [Wed, 2 Dec 2020 11:20:48 +0000 (14:20 +0300)]
Прочитал "В сердце Антарктики"
Про путешествие Эрнеста Шеклтона к Южному географическому полюсу (не
дошёл, ещё чуть-чуть оставалось) и достижению магнитного. Как и прежде
(6c1d69c53a59413d51e1075a39857fc91ab40fbb), читать про Шеклтона одно
удовольствие, в противовес путешествиям Скотта, порождающим тонны
возмущения. Шеклтона лично Николай II даже пригласил и наградил, чего не
был удостоен даже Нансен. Сам же Нансен и Амундсен восторженно
отзывались о Шеклтоне и его достижениях.
Sergey Matveev [Tue, 1 Dec 2020 18:34:08 +0000 (21:34 +0300)]
В FreeBSD добавили ядерный WireGuard
https://www.opennet.ru/opennews/art.shtml?num=54178
Полегче! В новом релизе ожидается IPsec ESP ESN поддержка -- и этого уже
достаточно чтобы меня удовлетворить. А WG хорош даже в userspace.
Это конечно не (POSIX) Make, а GNU Make. Почему это просто не сделать
shell циклом? Наверное потому что make будет распараллеливать эти
задачи. Но есть решение куда более короткое (требующее, вместо GNU Make,
GNU Parallel):
По моему гораздо проще -- всё же однострочник, вмиг набираемый в
командной строке. Автор комментария отметил что Make не может тут ничего
поделать с именами с пробелами: с parallel их не возникнет.
Аналог на redo будет такой:
all.do:
find . -name "*.bmp" -maxdepth 1 |
while read f ; do echo ${f%.bmp}.png ; done |
xargs redo-ifchange
В отличии от GNU Make не требует знания сверх shell-а, без проблем будет
работать с пробелами. Если убрать -maxdepth, то и с иерархией файлов в
директориях будет отрабатывать без проблем (в parallel аналогично можно
сделать просто указав **.bmp или направив find). "mv $3.png $3" я делаю
только потому что мне лень искать как convert-у указать формат выходного
файла, поэтому подсказываю ему расширением. all.do можно конечно и
покороче записать, если файлов не много и они без пробелов:
all.do:
redo-ifchange `for f in *.bmp ; do echo ${f%.bmp}.png ; done`
Но у этих решений есть большой недостаток: а что будет если компьютер
упадёт? Нужны sync-и и только потом удалять оригинальный .bmp. Make
оставит за собой побитый .png мусор, но так как .bmp не удалён, можно
понять что задача не была завершена.
(Корректная реализация) redo делает sync на $3 файл автоматом, как DJB и
задумывал. goredo ещё явно делает и sync на директорию после
переименования. Но тут проблема с rm-ом: он выполняется до
автоматического redo sync-а. Руками вставить sync до rm --
гарантированно сбросит содержимое PNG, но не гарантирует что файл .png
будет создан переименованием. Можно сделать промежуточную .do цель,
которая заставит сначала сделаться (redo-ifchange) .png, а потом удалит
.bmp оригинальный.
Но по хорошему я бы просто ничего не удалял во время работы -- а
подчистил после отработки всего и вся. parallel, sync, rm *.bmp. redo
будет медленнее Make для этой задачи, так как 1) на диске хранит
состояние целей и зависимостей, 2) делает sync (ok, можно отключить
зачастую) и переименования файлов.
Sergey Matveev [Tue, 1 Dec 2020 13:51:19 +0000 (16:51 +0300)]
Не хотел бы я писать под Эльбрус?
А ведь наверняка на работе именно он будет основным местом для будущих
проектов. Хотя ведь есть же и Байкалы ARM-ы и MIPS32-ы, и КОМДИВ-ы
(MIPS64), но что-то с ними не удовлетворённости у людей (конкретики не
знаю, возможно речь просто про производительность).
А с Эльбрусом пока сложно ответить на вопрос. С одной стороны: идут они
в жопу ибо даже ассемблер закрыт! Ты НЕ можешь командовать своим
процессором, ибо не знаешь его команд. Используй только закрытый
проприетарный C-компилятор lcc. С другой стороны, много статей говорит
что в x86-эмуляции он не шибко просаживается по скорости и его можно
считать просто как альтернативной x86-реализацией. Против чего я в
общем-то ничего против уже не имею. Не, я считаю что x86 уже не один
десяток лет должен быть в гробу, но раз уж даже на отечественном рынке
MIPS/ARM-ы не удовлетворительны (по производительности?), то пока
деваться уж некуда, как и дома я же x86 использую.
А ещё с одной стороны: а что значит писать под Эльбрус? Там в теории
точно такой же Debian, Java, Python. Если уж программа работает на
FreeBSD/Clang/BSDlibc и на GNU/Linux/GCC/glibc, то и на Эльбрусе
(предполагая что забываем про ассемблерные вставки) уж должно взлететь.
Знать что программа будет запускаться вместо *BSD на e2k/GNU/Linux --
мне без разницы что за платформа, код то портируемый (должен быть).
А если речь про какую-то чисто e2k-специфику, то значит помогать
использовать эту платформу, вкладываться и продвигать платформу, которая
даже не открывает ассемблер свой, не говоря про то, что без несвободного
ПО ты не сможешь на ней ничего делать.
Sergey Matveev [Tue, 1 Dec 2020 13:11:20 +0000 (16:11 +0300)]
Midnight Commander то написал Мигель де Икаса
https://habr.com/ru/company/jugru/blog/530734/
Мигеля я вроде знаю, особенно когда его Столлман отругал, по GNOME и
Mono, но что-то не замечал что MC то тоже он написал. А MC я обязательно
раз в неделю да запущу.
Ещё увидел объяснение от RMS почему Tcl всё же не взят для glue
language: https://vanderburg.org/old_pages/Tcl/war/0000.html
И с ним я тут не сильно согласен, ибо "tcl непривычен" для
пользователей... ok, а Lisp значит привычнее? Хотя в принципе есть и
верное замечание про работу с числами, но у меня сомнения так ли это
должно волновать и парить его пользователя? Но я про Tcl мало всё же
знаю, поэтому не продолжаю тему.
Sergey Matveev [Tue, 1 Dec 2020 05:36:43 +0000 (08:36 +0300)]
OpenZFS 2.0
https://github.com/openzfs/zfs/releases/tag/zfs-2.0.0
Фичи очень вкусны вошедшие в этот релиз:
* последовательный resilver -- теперь у обычного RAID вообще нет даже
крайних случаев когда он бы мог быть быстрее при rebuild-е
* persistent L2ARC -- я с L2ARC только игрался (нет задач настоящих), но
помню как неприятно было что кэш надо было прогревать после перезагрузки
* Zstandard сжатие -- вот это то, что очень хочется попробовать. Но
никакой уверенности конечно же что будет стоить этого на домашних не
сильных процессорах. Но на ноутбуке я упирался в скорость НЖМД, а не
CPU, получая сжатие сильнее чем у gzip
* send/recv redaction -- ну тут не могу оценить. Ведь грамотное
разбиение на dataset-ы же достаточно вроде как
Sergey Matveev [Tue, 1 Dec 2020 05:21:05 +0000 (08:21 +0300)]
Стенотайп
https://habr.com/ru/post/530682/
https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0
Интереснейшее введение про то, что такое стенотайп. Раньше и слова то
такого не знал, но всегда было интересно видеть в американских фильмах
как на судах за маленькими устройствами на длинной ленте что-то
печатают. Теперь понятно как оно устроено. А то после фильма и забывал
посмотреть что это же это такое. 300 слов в минуту могут записывать!
Sergey Matveev [Mon, 30 Nov 2020 15:42:13 +0000 (18:42 +0300)]
Факты о Гайбраше
https://grumpygamer.com/guybrush_fact_fiction
Я кстати тоже про себя запомнил, как оказалось, миф о том, что файл имел
расширение .brush. И такое длинное расширение означало что оно делалось
не под DOS, а на Amiga.
Sergey Matveev [Mon, 30 Nov 2020 15:31:51 +0000 (18:31 +0300)]
Пример open-source, но не free software
https://blog.yossarian.net/2020/06/03/You-may-not-use-my-projects-in-a-military-or-law-enforcement-context
Вот тут автор ПО говорит что будет вставлять в свои open-source проекты
запрет на использование для военщины.
Sergey Matveev [Mon, 30 Nov 2020 08:11:13 +0000 (11:11 +0300)]
Посмотрел "Ужин с придурком"
https://ru.wikipedia.org/wiki/%D0%A3%D0%B6%D0%B8%D0%BD_%D1%81_%D0%BF%D1%80%D0%B8%D0%B4%D1%83%D1%80%D0%BA%D0%BE%D0%BC_(%D1%84%D0%B8%D0%BB%D1%8C%D0%BC,_1998)
Смеялся от души массу времени!
Причём главный герой ("придурок") в общем-то вызывает уважение.
Sergey Matveev [Mon, 30 Nov 2020 07:38:29 +0000 (10:38 +0300)]
Скучает по DTrace
https://utcc.utoronto.ca/~cks/space/blog/solaris/DTraceStillMiss
https://utcc.utoronto.ca/~cks/space/blog/solaris/DTraceVersusEBPF
Человек много лет проработавший с Solaris и DTrace недавно переехал на
GNU/Linux. И вот пишет что всё равно eBPF пока не такая клёвая и хорошая
замена DTrace, так как, как и в целом во всей Linux-экосистеме, в теории
всё можно делать тип-топ, а на практике всё сырое. Всё очень сильно
зависит от версий ПО, в противовес когда одна команда работает над всем
и сразу.
Sergey Matveev [Sun, 29 Nov 2020 08:54:44 +0000 (11:54 +0300)]
mpv коммит о locale
https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f027338b0fab0f5078971fbe
Я много где читал что POSIX locales это ужасная штука. Но сам не
сталкивался с ними, будучи программистом C. А тут вот в mpv есть коммит
объясняющий почему с ними всё так плохо. Насколько понимаю, тьму проблем
решает UTF-8.
stream_libarchive: workaround various types of locale braindeath
Fix that libarchive fails to return filenames for UTF-8/UTF-16 entries.
The reason is that it uses locales and all that garbage, and mpv does
not set a locale.
Both C locales and wchar_t are shitfucked retarded legacy braindeath. If
the C/POSIX standard committee had actually competent members, these
would have been deprecated or removed long ago. (I mean, they managed to
remove gets().) To justify this emotional outbreak potentially insulting
to unknown persons, I will write a lot of text. Those not comfortable
with toxic language should pretend this is a religious text.
C locales are supposed to be a way to support certain languages and
cultures easier. One example are character codepages. Back when UTF-8
was not invented yet, there were only 255 possible characters, which is
not enough for anything but English and some european languages. So they
decided to make the meaning of a character dependent on the current
codepage. The locale (LC_CTYPE specifically) determines what character
encoding is currently used.
Of course nowadays, this is legacy nonsense. Everything uses UTF-8 for
"char", and what doesn't is broken and terrible anyway. But the old ways
stayed with us, and the stupidity of it as well.
C locales were utterly moronic even when they were invented. The locale
(via setlocale()) is global state, and global state is not a reasonable
way to do anything. It will break libraries, or well modularized code.
(The latter would be forced to strictly guard all entrypoints set
set/restore locales, assuming a single threaded world.)
On top of that, setting a locale randomly changes the semantics of a
bunch of standard functions. If a function respects locale, you suddenly
can't rely on it to behave the same on all systems. Some behavior can
come as a surprise, and of course it will be dependent on the region of
the user (it doesn't help that most software is US-centric, and the US
locale is almost like the C locale, i.e. almost what you expect).
Idiotically, locales were not just used to define the current character
encoding, but the concept was used for a whole lot of things, like e. g.
whether numbers should use "," or "." as decimal separaror. The latter
issue is actually much worse, because it breaks basic string conversion
or parsing of numbers for the purpose of interacting with file formats
and such.
Much can be said about how retarded locales are, even beyond what I just
wrote, or will wrote below. They are so hilariously misdesigned and
insufficient, I can't even fathom how this shit was _standardized_. (In
any case, that meant everyone was forced to implement it.) Many C
functions can't even do it correctly. For example, the character set
encoding can be a multibyte encoding (not just UTF-8, but awful garbage
like Shift JIS (sometimes called SHIT JIZZ), yet functions like
toupper() can return only 1 byte. Or just take the fact that the locale
API tries to define standard paper sizes (LC_PAPER) or telephone number
formatting (LC_TELEPHONE). Who the fuck uses this, or would ever use
this?
But the badness doesn't stop here. At some point, they invented threads.
And they put absolutely no thought into how threads should interact with
locales. So they kept locales as global state. Because obviously, you
want to be able to change the semantics of basic string processing
functions _while_ they're running, right? (Any thread can call
setlocale() at any time, and it's supposed to change the locale of all
other threads.)
At this point, how the fuck are you supposed to do anything correctly?
You can't even temporarily switch the locale with setlocale(), because
it would asynchronously fuckup the other threads. All you can do is to
enforce a convention not to set anything but the C local (this is what
mpv does), or to duplicate standard functions using code that doesn't
query locale (this is what e.g. libass does, a close dependency of mpv).
Imagine they had done this for certain other things. Like errno, with
all the brokenness of the locale API. This simply wouldn't have worked,
shit would just have been too broken. So they didn't. But locales give a
delicious sweet spot of brokenness, where things are broken enough to
cause neverending pain, but not broken enough that enough effort would
have spent to fix it completely.
On that note, standard C11 actually can't stringify an error value. It
does define strerror(), but it's not thread safe, even though C11
supports threads. The idiots could just have defined it to be thread
safe. Even if your libc is horrible enough that it can't return string
literals, it could just just some thread local buffer. Because C11 does
define thread local variables. But hey, why care about details, if you
can just create a shitty standard?
(POSIX defines strerror_r(), which "solves" this problem, while still
not making strerror() thread safe.)
Anyway, back to threads. The interaction of locales and threads makes no
sense. Why would you make locales process global? Who even wanted it to
work this way? Who decided that it should keep working this way, despite
being so broken (and certainly causing implementation difficulties in
libc)? Was it just a fucked up psychopath?
Several decades later, the moronic standard committees noticed that this
was (still is) kind of a bad situation. Instead of fixing the situation,
they added more garbage on top of it. (Probably for the sake of
"compatibility"). Now there is a set of new functions, which allow you
to override the locale for the current thread. This means you can
temporarily override and restore the local on all entrypoints of your
code (like you could with setlocale(), before threads were invented).
And of course not all operating systems or libcs implement this. For
example, I'm pretty sure Microsoft doesn't. (Microsoft got to fuck it up
as usual, and only provides _configthreadlocale(). This is shitfucked on
its own, because it's GLOBAL STATE to configure that GLOBAL STATE should
not be GLOBAL STATE, i.e. completely broken garbage, because it requires
agreement over all modules/libraries what behavior should be used. I
mean, sure, makign setlocale() affect only the current thread would have
been the reasonable behavior. Making this behavior configurable isn't,
because you can't rely on what behavior is active.)
POSIX showed some minor decency by at least introducing some variations
of standard functions, which have a locale argument (e.g. toupper_l()).
You just pass the locale which you want to be used, and don't have to do
the set locale/call function/restore locale nonense. But OF COURSE they
fucked this up too. In no less than 2 ways:
- There is no statically available handle for the C locale, so you have
to initialize and store it somewhere, which makes it harder to make
utility functions safe, that call locale-affected standard functions
and expect C semantics. The easy solution, using pthread_once() and a
global variable with the created locale, will not be easily accepted
by pedantic assholes, because they'll worry about allocation failure,
or leaking the locale when using this in library code (and then
unloading the library). Or you could have complicated library
init/uninit functions, which bring a big load of their own mess.
Same for automagic DLL constructors/destructors.
- Not all functions have a variant that takes a locale argument, and
they missed even some important ones, like snprintf() or strtod() WHAT
THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT
THE FUCK WHAT THE FUCK WHAT THE FUCK WHAT THE FUCK
I would like to know why it took so long to standardize a half-assed
solution, that, apart from being conceptually half-assed, is even
incomplete and insufficient. The obvious way to fix this would have
been:
- deprecate the entire locale API and their use, and make it a NOP
- make UTF-8 the standard character type
- make the C locale behavior the default
- add new APIs that explicitly take locale objects
- provide an emulation layer, that can be used to transparently build
legacy code without breaking them
But this wouldn't have been "compatible", and the apparently incompetent
standard committees would have never accepted this. As if anyone
actually used this legacy garbage, except other legacy garbage. Oh yeah,
and let's care a lot about legacy compatibility, and let's not care at
all about modern code that either has to suffer from this, or subtly
breaks when the wrong locales are active.
Last but not least, the UTF-8 locale name is apparently not even
standardized. At the moment I'm trying to use "C.UTF-8", which is
apparently glibc _and_ Debian specific. Got to use every opportunity to
make correct usage of UTF-8 harder. What luck that this commit is only
for some optional relatively obscure mpv feature.
Why is the C locale not UTF-8? Why did POSIX not standardize an UTF-8
locale? Well, according to something I heard a few years ago, they're
considering disallowing UTF-8 as locale, because UTF-8 would violate
certain ivnariants expected by C or POSIX. (But I'm not sure if I
remember this correctly - probably better not to rage about it.)
Now, on to libarchive.
libarchive intentionally uses the locale API and all the broken crap
around it to "convert" UTF-8 or UTF-16 (as contained in reasonably sane
archive formats) to "char*". This is a good start!
Since glibc does not think that the C locale uses UTF-8, this fails for
mpv. So trying to use archive_entry_pathname() to get the archive entry
name fails if the name contains non-ASCII characters.
Maybe use archive_entry_pathname_utf8()? Surely that should return
UTF-8, since its name seems to indicate that it returns UTF-8. But of
fucking course it doesn't! libarchive's horribly convoluted code (that
is full of locale API usage and other legacy shit, as well as ifdefs and
OS specific code, including Windows and fucking Cygwin) somehow fucks up
and fails if the locale is not set to UTF-8. I made a PR fixing this in
libarchive almost 2 years ago, but it was ignored.
So, would archive_entry_pathname_w() as fallback work? No, why would it?
Of course this _also_ involves shitfucked code that calls shitfucked
standard functions (or OS specific ifdeffed shitfuck). The truth is that
at least glibc changes the meaning of wchar_t depending on the locale.
Unlike most people think, wchar_t is not standardized to be an UTF
variant (or even unicode) - it's an encoding that uses basic units that
can be larger than 8 bit. It's an implementation defined thing. Windows
defines it to 2 bytes and UTF-16, and glibc defines it to 4 bytes and
UTF-32, but only if an UTF-8 locale is set (apparently).
Yes. Every libarchive function dealing with strings has 3 variants:
plain, _utf8, and _w. And none of these work if the locale is not set.
I cannot fathom why they even have a wchar_t variant, because it's
redundant and fucking useless for any modern code.
Writing a UTF-16 to UTF-8 conversion routine is maybe 3 pages of code,
or a few lines if you use iconv. But libarchive uses all this glorious
bullshit, and ends up with 3 not working API functions, and with over
4000 lines of its own string abstraction code with gratuitous amounts of
ifdefs and OS dependent code that breaks in a fairly common use case.
So what we do is:
- Use the idiotic POSIX 2008 API (uselocale() etc.) (Too bad for users
who try to build this on a system that doesn't have these - hopefully
none are left in 2017. But if there are, torturing them with obscure
build errors is probably justified. Might be bad for Windows though,
which is a very popular platform except on phones.)
- Use the "C.UTF-8" locale, which is probably not 100% standards
compliant, but works on my system, so it's fine.
- Guard every libarchive call with uselocale() + restoring the locale.
- Be lazy and skip some libarchive calls. Look forward to the unlikely
and astonishingly stupid bugs this could produce.
We could also just set a C UTF-8 local in main (since that would have no
known negative effects on the rest of the code), but this won't work for
libmpv.
We assume that uselocale() never fails. In an unexplainable stroke of
luck, POSIX made the semantics of uselocale() nice enough that user code
can fail failures without introducing crash or security bugs, even if
there should be an implementation fucked up enough where it's actually
possible that uselocale() fails even with valid input.
With all this shitty ugliness added, it finally works, without fucking
up other parts of the player. This is still less bad than that time when
libquivi fucked up OpenGL rendering, because calling a libquvi function
would load some proxy abstraction library, which in turn loaded a KDE
plugin (even if KDE was not used), which in turn called setlocale()
because Qt does this, and consequently made the mpv GLSL shader
generation code emit "," instead of "." for numbers, and of course only
for users who had that KDE plugin installed, and lived in a part of the
world where "." is not used as decimal separator.
All in all, I believe this proves that software developers as a whole
and as a culture produce worse results than drug addicted butt fucked
monkeys randomly hacking on typewriters while inhaling the fumes of a
radioactive dumpster fire fueled by chinese platsic toys for children
and Elton John/Justin Bieber crossover CDs for all eternity.