Metaprogramming
618 subscribers
103 photos
1 video
157 links
μετά- «между, после, через» (греч.)

Жизнь программиста за пределами программирования: алгоритмы, психология, инвестиции, иное.
Download Telegram
Срок годности криптографии

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

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

Но следует ли торопиться?

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

Конечно, в "большой истории" возникают казусы типа "Краледворской рукописи": в 19-м веке "за шкафом на чердаке церкви" нашли древнечешский эпос, который 70 лет пытались прописать в мировой исторический блокчейн, но в итоге свою ноду-валидатор чехам не утвердили, рукопись окончательно объявили подделкой в начале 20-го века. (Понятно, что через 100 лет весь "национальный эпос" Европы будет считаться подделкой 18-го века. А всех других стран – 19-го.)

В частных делах, однако, где нет мешающего химическому анализу политического фактора, возраст документа установить можно вполне точно. (Подобные вопросы, кстати, фоном ставятся, среди прочего, в недавнем рассказе Д.Е. Галковского.)

А как установить возраст цифрового документа?

Во-первых, где электронный документ хранить? Облака становятся платными, закрываются, сбоят. Флешки и SSD-накопители теряют заряд. HDD размагничиваются. Кассетные системы хранения дорогие, неудобные, стандарты слишком часто обновляются. Остаётся, выходит, пытаться среди казалось бы вышедших из употребления BluRay дисков выбирать хорошие бренды специальных архивных болванок и верить на слово, что заявленный срок хранения в 50 лет они выдержат?

Так 50 лет это срок небольшой. Не уберёшь в шкаф "навечно", надо раз в 30 лет доставать и перезаписывать. Желательно в том же шкафу хранить привод. А к приводу компьютер, т.к. для его подключения не будет разъёмов. А к компьютеру сисадмина нанять, который раз в 10 лет будет перезапись делать.

Во-вторых, как подтвердить подлинность цифрового документа?

Экспертизу намагниченности пластин диска проводить вероятно теоретически возможно, но достаточно бессмысленно, получается ещё более неудобная бумага. А экспертиза цифровой подписи ничего не даст. Через 50 лет текущие алгоритмы, как мы обсудили ранее, не будут считаться стойкими. Следовательно, можно будет задним числом производить подделки, неотличимые от подлинников. Следовательно, никакие старые цифровые документы не будут приниматься к рассмотрению.

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

О чём в другой раз.

#programming #philosophy
Идеальная сеть для OSI Base Model

Продолжаем прошлую заметку, где вкратце поговорили про модель OSI. Заметка вызвала некоторую полемику среди программистов, так что разовьём мысль дальше.

OSI создавалась как модель, которая позволила бы на уровне основных понятий общаться разработчикам разных глобальных сетей друг с другом (конкретнее, европейцам общаться с американцами). Сначала на уровне понятий, следующим логичным шагом интеграции была бы унификация конкретных протоколов. Делать этот шаг не понадобилось, потому что на фоне многолетних обсуждений в комитетах американский интернет помножил на ноль всех конкурентов (и слава богу, что европейцы бы устроили можно себе представить – например, даже сейчас практически каждый немецкий сайт должен получать торговую лицензию, регистрироваться в налоговой и добавлять плашку с официальной информацией).

Достаточно развитой оказалась, пожалуй, только французская сеть – Минител. Кто пользовался хоть раз телетекстом может неплохо себе представить, на что был похож этот телетекст с элементами интерактива. Появился в 1982 году, окончательно отключен был только в 2012 году, в 2009 всё ещё были "миллионы запросов в месяц" к минителовскому сайту телефонного справочника.

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

И вот для неё модель OSI имеет некоторый смысл:

1. Физический уровень - провод к АТС
2. Канальный - модем
3. Сетевой - система роутинга АТС
4. Транспортный - система магистральных линий между серверами сайтов
5. Сессионный - система логической адресации (перевод символьного имени сайта в маршрут)
6. Презентационный - парсинг языка разметки в текст и картинки (и обратно, обработка ввода пользователя)
7. Прикладной - реализация бизнес-сервиса (функции сайта)

Примечательны следующие ключевые аспекты этих первых глобальных сетей:

1. Топология сети статическая, новые узлы (сайты, как я их называю современным языком – конечно, такого термина ещё не было) добавляются в строгую древовидную структуру
2. Сеть имеет национальный размах (OSI задумывалась для интеграции таких национальных сетей)
3. Протоколы "последней мили" и "магистральные протоколы" чётко разделены: разная скорость и принцип модуляции, конечная линия выделенная а магистральная коммутируется, первым пользуется клиент и звонит на АТС, а вторым частные организации связаны друг с другом и с инфраструктурой телекома и пр.

Т.е. по сути это была не глобальная сеть, а большая локальная. А OSI нужна была для объединения национальных локальных сетей в Большую Мировую Локальную Сеть. Глобальную по размаху, но локальную по принципам работы.

Однако количество перешло в качество и возникли неучтённые (или вышедшие из-под контроля разработчиков) свойства глобальных сетей:

1. Динамическая топология, необходимость её рефлексии и автоматизированного расчета маршрутов, что порождает семейство протоколов на разных архитектурных уровнях от ARP до BGP
2. Полная отвязка "содержания" от "расположения" (глобальная логическая схема практически не связана с физической/географической)
3. Унификация и взаимозаменимость протоколов. Один и тот же вид физического соединения и протокола связи вроде ethernet или оптического канала может использоваться как на "последней миле", так и для магистрального соединения. Что важнее, также используется один и тот же стек протоколов "логической" адресации и передачи информации.
4. "Фрактальность" архитектуры, когда отдельно ethernet воплощает чуть ли не все уровни исходной модели, не говоря уже про современные реалии вроде VPN и прочее

Резюмируя: если вы планируете разработку системы интерактивного телетекста, то модель OSI, несомненно, будет полезным подспорьем.

#programming
Apple и хеллоуинский брутализм

Apple выпустила короткую презентацию по поводу рутинного выхода очередной серии чипов (M3). Видно, что заготовки были сделаны давно, прогресс идёт по расписанию. Целевой период использования "макбука", учитывая скорость планомерного роста характеристик, примерно 3-5 лет. Думаю, это вдвое больше, чем для аналогичных ноутбуков других производителей. Это плюс.

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

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

Основной сюжет разворачивается в бетонном бункере "без окон и дверей". В какой-то момент выясняется, что счастливый дом какой-то парочки музыкантов, эпизодически показываемый в ярких оранжевых тонах, стоит посередине всё того же безликого огромного и пустого ангара. Как в суперлаборатории из "Breaking Bad" :)

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

Кстати, вот и архитектор Клио в своём последнем посте о том же ведь!

#programming
Как я пользуюсь докером в быту

(Программистская тема, так что всех не интересующихся прошу скиповать.)

Иногда бывает удобно установить что-то не из brew/apt (или аналога), а напрямую из исходников или скачав бинарник. С другой стороны устанавливать все зависимости времени компиляции и времени выполнения в основную систему неудобно, кроме того возможны конфликты между разными версиями библиотек и т.д.

В таких случаях максимально удобно использовать Docker.

Чтобы вручную не вбивать каждый раз кучу параметров docker build/docker run я пришёл к такой схеме:

* В ~/images пишу dockerfile для образа очередной программы, например youtube-dl.dockerfile для youtube-dl
* В ~/images/docker-compose.yml добавляю секцию для сборки и теггирования описанного образа
* Скрипт ~/images/build-all делает docker-compose build, собирая все образы
* Скрипт ~/images/wrap-all для каждого докерфайла создаёт скрипт запуска данного контейнера в ~/bin, вызывая ~/bin/docker-run-script
* Скрипт ~/bin/docker-run-scripts вызывает docker run ..., передавая параметры командной строки и подключая текущую директорию внутрь образа

Директория ~/bin добавлена в PATH, в итоге собранными в докере скриптами можно пользоваться как установленными локально (например, запускать youtube-dl-docker как если бы это был установленный youtube-dl).

Выложил на github: https://github.com/EugZol/docker-run-script

#programming
Ведутся бесконечные споры о том, надо ли на собеседовании программистов спрашивать алгоритмы.

Есть более насущный вопрос: владение алфавитом.

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

Это в полной мере подошло бы ценностям Гитлаба типа "больше дел, меньше анализа" и пр.

О дивный мир UX-дизайна!

#programming
Вкратце о математиках, информатиках и маркетинге

ChatGPT выпустил новую модель, o1, построенную на принципе рекурсивного порождения текстов: модель буквально ведёт сама с собой "внутренний диалог", "думает вслух", пытаясь в итоге получить рациональное построение.

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

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

С чем смириться, конечно, невозможно.

Для подтягивания роботам математики необходимо (хоть и недостаточно) набрать "математического материала". Буквально следует иметь некое промежуточное формальное представление, не допускающее лишних вольностей и галлюцинаций, в которое можно конвертировать запрос пользователя (математическую задачу, формулировку теоремы и т.п.), и из которого потом снова перевести результат на естественный язык. (Такую работу ИИ как специфического "универсального переводчика" вкратце обсуждали ранее.)

Как на основе подобного формального представления довести качество работы бота до приемлемого уровня (ведь в аналогичной задаче — написание программного кода — ещё и близко об этом говорить не приходится) как-нибудь в будущем разберутся.

Сейчас — нужен сырой материал для обучения.

В таком контексте второе дыхание получают proof assistants — "помощники в доказательстве", такие как Lean.

И на сцену выходят агрессивные проповедники (см. предыдущий пост-введение) с практически буквально следующими лозунгами: деды приватизировали математику, да и вообще люди совершают ошибки, формализуем все теории в Lean!

Целевая аудитория: пассионарные undergraduate students (бакалавры). Ну оно и понятно по слову "деды" в риторике (сам Кевин практически подросток, до 60 ещё два года).

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

Агрессивная риторика, впрочем, неизбежно порождает агрессивных фанбоев. Ну знаете, есть пользователи Apple и есть пользователи Apple. В таком же смысле есть пользователи Lean и есть пользователи Lean :)

По неофициальному мнению некоторых профессионалов в области систем формальных доказательств из числа наших подписчиков, началась вся текущая волна беззастенчивой рекламы с того, что... американцам в более зрелых проектах-аналогах не понравилось название... потому что Coq оно по произношению означает... ну, вы знаете, то самое. Не захотели переименовываться по-хорошему, сейчас значит организуем переезд по-плохому! :)

#mathematics #programming