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

Жизнь программиста за пределами программирования: алгоритмы, психология, инвестиции, иное.
Download Telegram
Вкратце про лидерство (2/2)

Получается человеку, который хочет лидировать у программистов, требуется:

1. Либо лучше всех писать код. Это будет сильно и бесспорно.

2. Либо смещать систему оценок в область своих сильных профессиональных сторон. Так сказать лидировать на своей территории. Но чем дальше смещена от основного рабочего контекста, тем меньше остаётся контроля и менее продуктивным будет лидерство. Например, лидер программистов может утверждать себя как хороший дизайнер (и так или иначе постоянно доказывать, что дизайнеры важней программистов), или человек с учёной степенью в точных или технических науках (и так или иначе постоянно доказывать, что образование важней навыков), или ещё что-нибудь вроде того. Это будет требовать регулярных накладных расходов, но всё ещё будет работать.

3. Либо манипулировать общечеловеческими атрибутами лидерства: демонстрировать уверенность в себе, знание цели, наличие явного или скрытого плана действий, способности добывать универсально ценные ресурсы, отсутствие боязни взять на себя инициативу, взгляды поверх голов, отсутствие суеты, справедливое и равное отношение ко всем и т.п. Это будет вызывать общую лояльность команды, но вот напрямую воздействовать на ход работ уже практически не будет возможности. Как только такой лидер (о котором в обсуждаемой книге-то и пишут) переступит невидимую, но вполне чёткую черту своего уровня предметной компетентности, вся магия его харизмы превратится тут же в тыкву. Поэтому, конечно, умный лидер-харизматик такого никогда и не делает.

#programming #management
Вкратце про лидеров - начальников - руководителей - управленцев...

В предыдущий раз поднимали тему лидеров и лидерства.

Смотря на это всё со стороны, ясно, что лидерство в целом переоценённая тема. Понятно, что прирождённым (или "самосделанным", self-made) лидерам выгодно всё к ней сводить, уж такие они, по определению, люди, но нам-то что с того.

Интересно было бы закончить предыдущее обсуждение из сообщества и хотя бы вчерне попытаться определить основные функциональные варианты "начальства".

Понятно, что реальный человек всегда будет иметь черты и того, и другого, и третьего, но всё равно интересно попробовать описать "чистые" типы.

Итак:

1. Лидер. Манипулирует первым делом "харизмой", точнее неким природным феноменом "лидерства" (человек – стайное животное), вызывающим рефлекторную лояльность. Ещё точнее это не один феномен, а набор коммуникативно-поведенческих привычек. Во вторую очередь использует превосходство в конкретной деятельности, например, в непосредственном исполнении обязанностей. Этакий Гас Фринг из Breaking Bad.

2. Начальник. Манипулирует возможностью нанимать и увольнять. По-моему здесь всё просто.

3. Руководитель. Похож на начальника, но немного другое содержание: манипулирует возможностью назначать задания, утверждать проекты, формировать отделы (группы, коллективы) и т.д.

4. Управленец. Манипулирует документацией: регламентами, приказами и т.д.

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

Отмечу, что по данной классификации в IT, конечно, востребованней всего именно тип управленца. Во-первых, он ближе всего по менталитету (да и по содержанию деятельности) программистам. Во-вторых, сейчас множество подходов к управлению тривиально материализуются через существующий софт: в самом деле, со всякими Джирами, Гитхабами, Хелпдесками, Скетчами и прочим все управленческие хитрости чуть ли не изоморфно отражаются на хитрости настройки соответствующего стандартного софта. Любой управленец с таким софтом должен умело обращаться, и чуть ли не любой кто умело обращается автоматически превращается в неплохого управленца.

Конечно, и лидерские качества, и прочее управленцу лишними в любом случае не будут. Кстати, выше рассмотрели разные функциональные типы начальства по отношению к подчинённым – интересно сделать раскладку по отношению к вышестоящему начальству. А потом можно всевозможные комбинации рассматривать. А потом смешанные типы. Тестов понаделать, методик, курсов сертифицированных и т.д. Поле-то непаханное! :)

#programming #management
Нейросети для программирования: новая сводка новостей

Ранее уже писал на эту тему, но новости продолжают поступать: гугловскую нейросеть научили решать олимпиадные задачки по программированию.

Одновременно ChatGPT демонстрирует решение широкого круга диалоговых задач. Прогресс заметный. Проблема сохранения контекста, о которой немного писал ранее, решена. Представить себе общение с современными нейросетями можно примерно как общение с Гуглом или Википедией, который при этом накапливает опыт диалога, позволяет уточнять и редактировать запрос (и ответ) ссылаясь на ходу на предыдущие реплики и имеет базовый модуль "написания коротких эссе на заданную тему". О тесте Тьюринга говорить больше не серьёзно, все шероховатости, понятно, будут в самое ближайшее время дошлифованы.

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

Ну, то есть, перечисляют "количественные" недоработки, но не качественные.

Кстати, примечательно, что тема ИИ для игры в StarCraft, о котором речь шла ещё когда там Alpha Go была на пике популярности, как-то постепенно была замылена. Может быть киберспортивные лоббисты вежливо попросили разработчиков ИИ не лезть своими грязными руками в эту важнейшую область народного хозяйства?

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

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

В довесок. "Впечатляющей пример" "решения задач уровня колледжа" с эпитетами вроде "челюсть отвисла" (буквальная цитата) – решение ChatGPT на 95% "теста по микробиологии". Всяк может убедиться, что для решения теста на 100% требуется посмотреть несколько серий "Доктора Хауса" и доступ к первой странице поисковой выдачи Гугла по соответствующим запросам. Интересно, по поводу рассыпавшихся по полу челюстей это они прикалываются так или всерьёз?

#programming #neuronetworks
Настоящий peer-to-peer

После отмены web2.0 – т.е. эпохи универсальных протоколов, свободных форматов данных, разнообразия клиентов – наступил некоторый откат технологий. Короткий миг, когда можно было использовать, к примеру, Pidgin, разработанный open-source сообществом jabber-клиент, для того чтобы через серверы VK послать сообщения в Google Talk, канул в небытие.

Единственным надёжным средством платформо-независимого обмена сообщениями осталась электронная почта: на десятилетия казалось бы устаревший протокол, который тем не менее спокойно пережил все восхождения и низвержения парадигм. В определённом смысле эталон свободных технологий: полноцененый peer-to-peer, при котором даже частное лицо может развернуть свой сервер (с рядом проблем, но типовых и вполне решаемых) и тем самым де-факто войти в международный электронно-почтовый союз. Без заполнения единого бланка и не подписывая никаких контрактов.

Главной проблемой (с появлением дешёвой и открытой асимметричной криптографии, решившей раз и, видимо, навсегда, проблему тайны переписки и передачи ключей шифрования) в подобных системах является discovery, проблема адресации. Как отделить идентификатор пользователя от маршрута, по которому информацию к нему можно доставить?

В общем-то весь многоуровневый стек протоколов того, что мы называем интернетом, и работает для решения этой проблемы. На вершине пирамиды DNS – сервис доменных имён – вишенка на торте. Которая позволяет какой-нибудь google.com (DNS-имя) перевести в 142.250.181.110 (IP-адрес). А зная IP-адрес уже понятно как до него доставить пакет информации: на самом грубом уровне рассмотрения это работает также, как доставка бумажной почты, где каждый пункт приёма корреспонденции знает, до каких вышестоящих у него есть связь, а все корневые узлы знают как через минимальное число посредников переслать почту другому корневому узлу. Работает география планеты с наложенной не неё картой линий сообщений.

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

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

Понятно, что настоящий анархический интернет это не очередной клон джаббера с деривируемыми криптоключами и доменами в блокчейне. Это программа (скорее, прошивка) на мобильном телефоне, которая при попадании в радиус ближней связи с другим таким устройством обменивается небольшим количеством накопившихся сообщений. Маршрутизация опирается банально на географические координаты, типовые паттерны передвижения пользователя (настраиваемо) и его планы глобальных перелётов (под ручным контролем). За чужие доставленные сообщения пользователь получает крипто-токен, ну дальше понятно, рейтинг раздачи торрентов все понимают что такое (больше раздаёшь, меньше скачиваешь = зарабатываешь; иначе тратишь; обмен криптотокенов на любые материальные ресурсы через готовую инфраструктуру бирж, обменников и т.д.).

Выключить такое, однажды запустив, можно только физически уничтожив пользователей.

Все составные элементы технологии созданы, отработаны и годами успешно функционируют (самое "близкое к земле" звено относительно недавно – AirTag). А прошивки почему-то нет такой замечательной. Интересно, почему? Да потому же, почему нет промышленного производства военных квадрокоптеров, автопилотируемых грузовиков, и всех подобных вещей – страшно-с.

#programming
Суть программирования

В книге Getting Real создатели Ruby on Rails описывают секрет успеха своей компании: "нанимайте хороших писателей!" (имеется в виду на должность программистов).

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

Настало время сделать финальное обобщение и прямо так сказать: программирование это способность создавать языки.

В самом благородном и парадном виде это, конечно, создание именно языков программирования. Но вообще говоря новые языки повсюду. Будь это Kubernetes со своим языком "описания того как на множестве серверов развёрнуты приложения" или ActiveRecord с языком "объявления критериев верности данных". И так далее.

Далее можно провести различие senior programmer от middle и junior. Обычно этой темы либо избегают (и это не худший вариант), либо приводят формальные критерии (количество лет опыта, перечень изученных технологий и т.п.). Понятно, что, во-первых, отличие есть. И, во-вторых, оно отнюдь не формальное, а вполне себе существенное. Но чтобы получить возможность хоть немного продвинуться в рассуждении надо зайти на формализацию этих понятий с другой стороны. Курсант военного училища это почти офицер, а прапорщик с 20 годами опыта службы никогда им не станет.

Кто-то из программистов после 5 месяцев обучения является "делающим первые шаги senior-ом". А кто-то после десяти лет опыта будет де-факто "опытным middle". Как между ними будет распределяться зарплата и прочие такие вопросы к делу отношения не имеют. Есть некое объективное различие.

Это объективное различие как раз будет связано со способностью создавать (и развивать) языки. Способный программист очень быстро ухватывает, хоть может быть и не вполне осознаёт, что дело именно в этом, после чего у него волшебным образом с каждым разом всё лучше и лучше начинает всё получаться:

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

Пользуясь случаем, напоминаю, что у меня есть небольшой цикл лекций, посвящённый элементарным основам создания языков программировния :)

#programming
Вкратце про GigaChat

Сбер выпустил свою "большую лингвистическую модель" GigaChat. Как видно по самопредставлению, проект сделан на основе OpenAssistant – международной заготовки лингвистических моделей с открытым кодом. Впрочем, команда Сбера явно проводила полноценное дообучение, а не просто придумала промпт (как сделано в продуктах Microsoft, таких как Bing и Skype, в отношении ChatGPT).

Вкратце модель от Сбера вот какую получает от меня оценку:

1. По темам программирования твёрдая двойка. Видимо, модель не обучали специально на коде.

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

3. Метафоры и загадки – хуже, чем ChatGPT, но вообще и у последнего одни слёзы. Впрочем, в следующих версиях вроде должно быть получше.

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

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

#programming
Вкратце про бессмертный софт

Какие игры-то красочные были!

Не зря "Герои меча и магии" до третьей части стали не умирающей классикой. Особенно привлекает минимализм, чёткость интерфейса. Все кнопки на своих местах, плотно так упаковано, но при этом не без рюшечек для создания атмосферы (книга заклинаний там какая-нибудь – впрочем, пожалуй она-то как раз худший элемент интерфейса).

Для того, чтобы реанимировать игру и попробовать продлить срок её жизни, энтузиасты движок переписали практически с нуля. Написали на C++ логику, сделали сборки под основные операционные системы.

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

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

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

#programming #games
Вкратце про модель OSI

"Модель OSI" появилась в 70-е годы, разработана французами параллельно с появлением в США протокола TCP/IP.

Вопреки задумке, хорошо подходит для описания как раз локальных сетей, а для интернета не применима.

Прямое сопоставление TCP/IP с OSI при этом, в защиту последней, в большинстве случаев не корректно уже именно потому, что первое это конкретная разработка, а второе абстрактная схема, "как должно быть". Абстрактная схема, тем более появившаяся раньше конкретных реализаций, должна не столько хорошо описывать буквальное положение вещей, сколько помогать развивать текущие и будущие альтернативы.

С этой задачей, конечно, OSI совершенно не справляется.

"Дыры в абстракциях" начинают протекать начиная с самых нижних уровней: в терминах OSI невозможно описать протокол ARP, который 40 лет уже как используется повсеместно для синхронизации "логической" и "физической" топологии локальной сети. Тренированные IT-теоретики так и пишут: находится МЕЖДУ вторым и третьим уровнем OSI.

Если что-то находится "МЕЖДУ" двумя соседними значениями периодической системы элементов Менделеева (или теории о социальных классах, или системе фундаментальных физических взаимодействий, и пр. в любой области науки и техники) это означает, что данная системная схема несостоятельна. Что в лучшем случае она требует доработок и расширения.

Не то с моделью OSI: после фатального провала практически в момент своего рождения (не изучили опыт реализации реального TCP/IP – углубляться не будем, описано в литературе – но к примеру нельзя TCP и IP по-отдельности вульгарно распихать по 3 и 4 уровню, функции этих суб-протоколов не соответствуют описанию этих уровней) и до сегодняшнего дня она в неизменном виде фигурирует на курсах телекома в университетах и на собеседованиях самого широкого круга IT-специалистов (я сам не считаю осведомлённость или неосведомлённость о ней сколь-либо иллюстративной при оценке квалификации программиста).

Про то, как с помощью этой единственной мейнстримной универсальной концепции глобальных сетей анализировать и понимать такие штуки как DNS, BGP, облачные вычисления, блокчейн, виртуализацию-кластеризацию и прочее, и прочее, и прочее – никто не знает и знать не может. Всё перечисленное – за всеми этими аббревиатурами и терминами стоит не просто нечто различное, но нечто живущее именно на разных системных уровнях глобальных сетей – обычно запихивают с чистой совестью на 7-й уровень OSI и на том вопрос закрывают.

Так а зачем нужна концептуальная схема, которая даёт вырожденные (в математическом смысле) выводы и не позволяет порождать полезные для развития систем суждения? На помойку её, в качестве забавного исторического курьёза и примера религиозного мышления в сообществе инженеров.

#programming
Интернет и телевизор

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

Сейчас это выросшее с интернетом поколение людей недоумённо пишет: мол, показал подростку как "винду переустановить", а ему не интересно совсем.

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

Одновременно меняется и формат работы СМИ. Во время последнего "марша на Москву" ночью, прерывая расписание передач, по первому каналу выходит экстренный выпуск новостей. Миллионы людей включают... нет, не телевизор, конечно, что уже показательно, а сайт телекомпании... и что там видят: выступление одного из первых лиц? Зачитывание официального обращения к гражданам? Стереотипную речь с призывом сохранять спокойствие, подготовленную редакцией канала для любых подобных случаев? Нет, видят СКРИНШОТЫ ТЕЛЕГРАМ-КАНАЛОВ и сайтов государственных ведомств!

Ну и всё, официально нет больше телевизора.

Но на самом деле телевизор есть, просто он в интернете: на Пикабу и Реддите, на Хабре и Стэковерфлоу, во Вконтакте и в Фейсбуке. Одновременно в интернете есть и "интернет номер 2", который, думаю, только формируется, вот например в виде (неудобной и изначально технически неполноценной) системы телеграм-каналов (конечно, и сюда "телевизор" тоже добирается). Идёт эпоха фидонета №2, за которой будет свой WWW №2, а потом и Web2.0 №2 (писал на что это, на мой взгляд, может быть похоже, раньше).

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

#programming #politics
Вкратце о программистах и системных администраторах

Обоих относят к собирательному классу "IT-специалистов", но разница мышления и подходов радикальная.

Хорошему системному администратору важно, чтобы работало, и работало сейчас.

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

Системный администратор дёргает ручки, крутит вентили, следит за манометрами.

Программист открывает капот, вываливает детали на пол, и рисует между ними стрелки.

Программист лучше вообще не будет делать, чем сделает плохо. Администратор не понимает, что значит "сделать плохо".

Интересно, есть ли какие-то параллели в более общей области знаний, в философии где-нибудь, к примеру?

Современный ИИ, кстати, похоже делали носители "сисадминского" мышления.

Носители "программистского" склада ума попытались что-то изобразить строгое и красивое, разработали Paradox и LISP, SQL и Semantic Web, и т.д. и т.п. Потом пришли "сисадмины" и сказали: ну, чтобы сгенерировать картинку "девочка с персиками", напишите запрос "девочка с персиками, intricate, elegant, highly detailed, lighting, painting, artstation, smooth, illustration, old painting, beautiful oil painting".

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

Для программиста не существует категории времени (в отношении своей работы). Для сисадмина не существует категории качества (в отношении своей работы).

(С девопсом всё тоже самое: есть девопс-программисты, а есть девопс-сисадмины. Первые не понимают, как можно деплоить что-то "руками вот через консоль, подправив чарт in-place", а вторые "зачем тут нужен код стайл, и так всё работает ведь, я проверил".)

#programming #philosophy
Ложная квантовая криптоугроза

Forward secrecy ("секретность наперёд"? русского перевода хорошего не придумали) это принцип криптографии, заключающийся в обеспечении надёжности шифрования даже при условии (потенциального) будущего взлома. Речь идёт, фактически, об использовании случайно сгенерированных одноразовых (сессионных) ключей в такой манере, что утечка в будущем участвующих в шифровании мастер-ключей не скомпрометирует эти сессионные ключи – следовательно, не обеспечит доступа к переписке.

Весь современный интернет невозможен без криптографии. Автоматически подразумевается, когда вы видите иконку замочка в адресной строке, что даже если трафик будет перехвачен (что может сделать любой промежуточный узел, начиная от владельца wi-fi сети и заканчивая частными организациями обслуживающими международные узлы обмена; про полицейские службы и не говорю), никто, кроме отправителя и получателя не сможет получить доступ к содержанию.

Звучат опасения из-за развития "квантовых компьютеров": за счёт "физического параллелизма", возникающего при использовании "квантовых битов" (в отличие от "классических") многие алгоритмы дешифровки перебором получают значительно большую теоретическую скорость. На практике прогресс в реализации квантовых вычислений выглядит, похоже, лишь немного лучше прогресса в холодном термоядерном синтезе ("через 10 лет будет мирный термояд", и так 70 лет). Да и фактор этот малозначимый: многие существующие алгоритмы шифрования не имеют уязвимостей к квантовым вычислениям.

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

Для распространённых алгоритмов даются оценки типа "потребуется 300 триллионов (sic) лет, чтобы взломать перебором". Это на одно универсальное ядро. Что, если на специальной карточке ядер 10000? Что, если есть 100 стоек по 10 устройств с такими карточками? Что, если есть 100 этажей таких стоек? Так уже миллиард набежал. Ещё два-три-четыре порядка осталось на бэкдоры (периодически всплывают), и вот, оказывается, цифры получаются вовсе не астрономические.

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

#programming
Срок годности криптографии

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

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

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

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

Конечно, в "большой истории" возникают казусы типа "Краледворской рукописи": в 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