extern volatile world
602 subscribers
85 photos
1 video
4 files
192 links
Внешний мир, он занятный.

Меня зовут Дмитрий Богатов @KAction (или KAction@disroot.org), который #freebogatov и который история с выходным узлом Tor.
Download Telegram
Помню одного погромиста, от которого требовалась изменить две строчки в репозитории, с которым он обычно не работал. Потом смотрю -- коммит на триста строк. Вася, какого хрена? "А мне IDEA IDE переформатировала, а потом в этой IDE я нажал кнопку commit." И глазами хлопает. Я после этого gitolite внедрил.

Другая история. Таксист привозит в точку A, которая не совпадает с точкой назначения B. Вася, какого хрена? "А мне GPS так показывает." И глазами хлопает.

Господа, IDE, GPS и прочие восхитительные вещи -- это лишь инструменты, которые не снимают с вас обязанности понимать, что именно вы делаете этими инструментами.

Uber дал нам толпы таксистов, не знающих города, GitHub/GitLab -- толпы программистов, не умеющих пользоваться git, gmail -- толпы людей, не умеющих пользоваться электронной почтой (rfc1855). Понижение баррьера входа, да.

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

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

Увы, я не вижу достаточно могущественной силы, которая могла бы этому что-то противопоставить.
Сегодня утром новая версия мессенджера Signal (обсуждение практики автообновления оставим на другой раз) порадовала девизом "Зачем использовать слова, если можно использовать стикеры."

Затем чтобы выражать идеи, сложнее чем у кроманьонца. Затем, что мысли и речь неразрывно связаны.
Дружественный канал @parisburns задаётся вопросом про мессенжер сигнал:

Зачем использовать номер телефона если можно использовать имэйл?

Я бы пошёл дальше и спросил бы, почему бы просто не генерировать GUID при первом подключении.

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

Но ведь когда-то эти самые люди учились пользоваться мышкой и Microsoft Office. Через слёзы и "не хочу", но они справилась. Да, мир был другим.
Последнее время я активно использую Nix для того, чтобы раскатывать WSGI-приложения. Прелесть в том, что в одну производную (derivation) можно запихать собственно код, библиотеки по зависимостям, скрипты инициализации (supervision scripts), сервер приложений, веб-сервер, статичесеские файлы и вообще почти всё что угодно, и всё это без излишней дупликации. По сравнению с cdist/Ansible/..., а уж тем более ручным оркестрированием — райские кущи.

Единственное но — всю эту радость кто-то должен запускать. Для этого я из-под рута в init-скрипте запускаю runit, примерно так: chpst -u deploy runsvdir ~deploy/.nix-profile/sv. Единственная внешняя зависимость. Всё круто, но ~deploy/.nix-profile/sv/<foo>/supervise должен быть символической ссылкой на директорию, которую юзер deploy либо может создать, либо уже существует и в ней можно писать. Параметризовать derivation путём до домашней директории пользователя можно, но довольно уродливо. Как и вываливать в /dev/shm, который a+rwx.

После некоторых размышлений, рассматривая даже такую тяжёлую артиллерию как unshare(2), я нашёл довольно симпатичное решение. На чтение можно открыть не только обычный (regular) файл, но и директорию. Т.е можно сделать exec 64</tmp и теперь /proc/$$/fd/64 является символической ссылкой на /tmp. Работает только при kernel=linux.

Собственно, это и ответ: надо runsvdir запускать так, чтобы он унаследовал домашнюю директорию, открытую на дескрипторе 64, а производную собирать так, чтобы все файлы и директории лежали в /proc/self/fd/64. Если кто знает POSIX решение, я весь внимание.

PS. Если быть совсем точным, supervise может быть директорией, но Nix хранилище (store) только для чтения, так это не вариант сразу.
Question interfaces! Нет ничего важнее. Если не сомневаться в основах и не задумываться над тем, что именно мы хотим сделать, то будет вечное "хотели как лучше, получилось как всегда". Расскажу историю.

Традиционно, аутентификация пользователя в Unix системах производилась в соответствии с файлом /etc/passwd, где хранились логины и хеши от паролей пользователей, а стандартная библиотека предоставляла функцию проверки, что-то в духе:

bool check_credentials(const char *username, const char *password)

На самом деле интерфейс более неуклюжий, но это не важно. Важно то, что со временем появилась необходимость хранить данные о пользователях способами, отличным от формата /etc/passwd — в базе данных или на удалённом сервере. И что-бы удовлетворить эту потребность, стали появляться библиотеки, которые предоставляли примерно такой-же интерфейс, но проверяли логин и пароль, используя данные из альтернативных источником. Вершиной такой эволюции стала библиотека PAM (Pluggable Authentication Modules), которая предоставляет универсальный интерфейс к огромному количеству способов проверки логина и пароля, большинством из которых вы никогда не воспользуетесь.

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

Можно ли было сделать лучше? Нет, если держаться за интерфейс стандартной библиотеки. Но нужно ли?

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

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

Конечно, всё не так прямолинейно. Как за простыми формулами школьной физике, так и за простыми решениями в IT стоит титан мысли, гениальность которого нам сложно оценить, когда ответ уже перед нами.

Question interfaces, и возможно жизнь станет немного проще.
Что за фигня?! 307 проголосовавших из 1116? Судьбоносный референдум с явкой около одной трети?!

Если у вас есть возможность физически дотянуться до Debian Developer'а, который не проголосовал, напомните ему о его гражданском долге.

https://vote.debian.org/~secretary/gr_initsystems/

https://db.debian.org/search.cgi
Пару дней назад я прочитал статью, озаглавленную Unix Considered Harmful, а в ней была ссылка на Unix Haters Handbook. Прочитал и задумался, а вдруг я и правда я чего-то не вижу? В конце концов, все красивые и простые решения, которые я тут нахваливаю, базируются на на примитивах Unix. Question Intefaces! и достал из кладовки маленький нетбук, обладающий свойством, что вся периферия на нём отлично работает с kernel=linux-libre.

Окей, что у нас есть? Пробуем HaikuOS. Написана на С++. Хм. Установочный образ почти гигабайт. Неудивительно. Окей, графическая оболочка, напоминающая Windows98. Терминал. В терминале нет vim. Хм. Окей, браузер. Проводной интерфейс с dhcp нашёлся сам, хорошо. В браузере похоже Javascript есть. И видео проигрывает. Нешустро, но я не знаю, кто виноват — браузер, немолодой нетбук или современный web. В общем, любви с первого взгляда не случилось. Если кто знает о какой-то вау-идее в Haiku — я весь внимание.

Что ещё? KolibriOS. Операционная система, полностью написанная на x86 ассемблере. Установочный образ 1.5 мегабайта. Добро. Ещё одна графическая оболочка a-la Windows98. Ок. Пятнашки есть. И текстовый редактор примитивный тоже. И браузер. Упс, а вот проводное соединение с dhcp на нашлось. Любовь опять не сложилась.

Надо признать, я был очень поверхностен, и вероятно первое знакомство с tty1 в GNU/Linux системе вызовет примерно такую же реакцию.
Сейчас очень бурное движение наблюдается в области использования графических web-браузеров как замену операционной системе. Я задамся вопросом, почему люди это делают.

Да, окружение в котором выполняется Javascript абстрагирует от работы с сетью в разных операционных системах и от построения графических интерфейсов, и это удобно. Но тоже самое предоставляют многие кроссплатформенные библиотки, например Qt, которую, кстати, можно использовать не только из С++, но и из Python. Так в чём же секрет?

Мне кажется, секрет в том, что у приложения, выполняющегося в браузере, нет версий и нет обратной совместимости. Никто не любит поддерживать обратную совместимость, все любят новые игрушни. Серебряная пуля найдена?!

Нет, конечно. Программу, которую я скачиваю откуда-то на свой компьютер я могу изучить, запустить несколько раз в разных условиях и сделать определённые выводы на её счёт. Теоретически, тоже самое можно сделать и с JS кодом, но когда я зайду на сайт в следующий раз, браузер скачает и выполнит уже другой код. Без предупреждения. В браузере нет возможности сделать chattr +i, поэтому идея LibreJS не выглядит убедительной.

Ещё один компромисс безопасности в пользу удобства. Как знать, возможно в мире, где информационная безопасность держится не на технологиях, а на уголовном кодексе, это разумно.
Всё плохо. Последний крупный бастион здравого смысла пал. Прощай, Debian.

https://kaction.cc/posts/2019-12-28_tragedy_in_debian.html
О сколько открытий чудных нам дарит https://mitmproxy.org. Это было проще, чем я ожидал. Попробуйте!

Увы, есть несколько сайтов, которые мне нужны и которые работают только в Firefox/Chromium.

И я обнаружил, что кроме бяки гуглоаналитики (и других), браузер по своей инициативе лезет куда не надо. Например, что такое http://detectportal.firefox.com/success.txt ?

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

Я работал в физической лаборатории при МПГУ, где вместе с коллегами обоих полов, изготавливал крошечные девайсы размером 3×4 милиметра. Расходником в технологии создание этих устройств были баллоны со сжатым азотом. 50 литров, 62 килограмма, 150 атмосфер.

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

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

Другая история. Маленькая IT контора в офисе на втором этаже. Четрыре мальчика-программиста и девочка дизайнер. Бутыли для кулера (19 литров) доставляли только до первого этажа, дальше этим занимались...
Как подсказывают в личке, http://detectportal.firefox.com/success.txt проверяет что http траффик не перехватывается, как то на любом публичном wifi в России.

Окей, вопрос зачем решен. Вопрос да кто вы такие, чтобы за меня решать -- открыт. Когда мне нужен http именно для этих целей, есть http://neverssl.com, например.
Периодически я открываю для себя какую-нибудь новую фишку в Vim и думаю, как я раньше без этого жил. С firefox строго наоборот -- открываешь новую дрянь и думаешь, как можно было раньше с ней жить.

Риторический вопрос: что такое addons.mozilla.org/__cspreport__
В debian-private, от которого я пока не нашёл способа отписаться, продолжает бушевать шторм, связанные с Code of Conduct, отголоски которого можно найти тут (автор -- участник конфликта, кажется).

Я никогда не вникал в суть конфликта, но знаю одно -- Code of Conduct -- это очень, очень плохо. Точнее не так. CoC это никак, но за ним обычно приходит полиция нравов.

Не надо нам властных структур. Free Software всегда крутилось вокруг кода, а не вокруг политкорректности, и было бы неплохо, если бы так оно и осталось.

Если Вася козёл, то я могу написать правило procmail, отправляющее все письма Васи в /dev/null. Если кто-то особо нежный не умеет пользоваться почтовиком и не может отфильтровать Васю -- пусть учится или проваливает. В некоторых NNTP клиентах эта процедура доступна из коробки, в одно нажатие, что явно не случайно.

Если Вася является мейнтейнером проекта -- значит надо либо пропихивать патчи через другого мейнтейнера, либо форкать.

Вот такой пост -- это нормально. Не надо тут пансионата благородных девиц. Чёрт, уже
Сегодня директор по приватности Apple рассказала, что все фотографии, которые пользователи загружают в iCloud, сканируются для поиска "подозрительной детской эксплуатации". При этом во избежание ложных срабатываний бота "каждое совпадение проверяется индивидуально", то есть вручную.

Фактически в Apple создали поисковик ЦП по всем личным фото пользователей, который будет отправлять их сотрудникам (на самом деле, аутсорсерам) терабайты приватных данных. Естественно, ложных срабатываний будет масса — нейронные сети пока что не очень сильны в опеределении возраста, так что почти все интимные фото, загруженные в iCloud, будут пачками просматривать индусы за $2 в час.

Так вот, к чему я это. Облака — это удобно, они постоянно становятся дешевле и быстрее. Но вы должны чётко понимать, что все файлы, которые вы загружаете в облако, вы фактически выкидываете в паблик. Рано или поздно они будут скомпрометированы, если представляют хоть какой-то интерес. Храните приватные данные исключительно локально, на зашифрованном носителе, и не ведитесь на красивые слова про приватность.
О существовании format=flowed я слышал давно, но почему-то думал, что это сродни смертному греху html.

Я был неправ, и я приношу извинения за тысячи электронных писем без format=flowed.
Пару дней назад я узнал о существовании минималистичного дистрибутива KISS Linux. Он совсем юн, и я не возьмусь делать прогнозы о его дальнейшей судьбе.

Интересно другое. Основателю и разработчику проекта всего 21 год. Новое поколение безнадёжно не в полном объёме.

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

Сравнивая тех, кто вокруг, с героями прошлого поколения, я прихожу к неутешительным выводам. С другой стороны, представители прошлого поколения создали sendmail, javascript и php...
Мне неловко в этом признаться, но я никогда не вдумывался какая часть файлов в /dev создаётся ядром, а какая -- udev.

Дабы исправить это упущение я снова достал нетбук, поставил туда Alpine Linux, удалил eudev и перезагрузился.

Окей, всё работает, никаких ошибок во время загрузки нет. Воткнул флешку -- /dev/sdb и /dev/sdb1 появились, вытащил флешку -- исчезли.

Так зачем, говорите, так нужен (e)udev, что он идёт в стандартной поставке, а в Debian так вообще был фактически essential?
Есть такая штука keybase.io В числе прочего, там есть мессенджер, позиционирующий себя шифрованным по самые гланды, как это нынче модно.

Я не специалист по криптографии, про безопасность говорить не буду. Я просто выскажу своё частное, субъективное отношение к интерфейсу.

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

Например, я честно пытался осилить Matrix -- тоже шифрованный и даже децентрализованный. Но! Единственный вменяемый клиент (нет, недоделанный плагин к weechat не считается) это поделие на Electron.
Какое-то время назад я тщательно и подробно перемывал косточки gitlab и github, которые клепаются в предположении что их ЦА есть идиоты простые люди(tm).

Больше не буду. Я нашёл долину Джона Голта.
В США есть такое слово -- compliance. Означает оно, что что-то надо делать в соответствии с требованиями закона. Например, нужно проверять, что твой клиент -- не террорист. Или персональные данные хранить бережно. Или тщательно проверять удостоверение личности клиента. Или ещё что-нибудь.

Теоретически -- здраво. На практике это лишь создаёт работу конторам, которым все аутсорсят такие проверки. Надёжность методов этих контор никто не знает и не хочет знать, главное compliance.

К чему это я? Вот в Европе приняли GDPR, что привело к плашечкам на сайтах, спрашивающих про куки.

Боль и страдание разработчиков "современного веба", которые вынуждены были эти плашечки делать, безусловно, греет мне душу. Но правда ли мир стал лучше?

Мне кажется, нет. Если люди не знают, о чём речь, они просто на автомате нажмут на самую большую кнопку. Внезапно, это кнопка "я согласен на всё". Ну кто знает что такое куки, блокируют их сами.

Мир не изменился, но работа -- погроммистов, художников, юристов -- была совершена. Впустую. Оплачиваемая работа.

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

Но что тогда делать?...

PS. Любопытная книга о бесполезных рабочих местах: