Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
В быту 3D-принтер полезен тем, что можно напечатать разные уникальные изделия, “оптимизированные” для решения конкретной задачи. Например, я напечатал ремонтную деталь для блока кнопок управления автомобильным креслом: можно было бы заменить весь блок целиком (хорошо, что не кресло), но это потребовало бы снятия кресла – достаточно много работы. Это далеко не единственный пример. Так, из недавнего, я спроектировал и распечатал несколько установочных кронштейнов для крепления небольших солнечных батарей (для питания уличных светильников), кронштейн для установки самого светильника под скатом крыши, несколько элементов крепления видеокамер, немало коробок-корпусов для разных самодельных устройств вроде цифровых термометров и часов с GPS-коррекцией, несколько защитных кожухов для различных простых механизмов (вроде замка уличной калитки) и другие подобные изделия. Модели я готовлю в OpenSCAD, это очень удобно. Сейчас я в основном использую FDM-принтер Anycubic Mega X – о чём рассказано в отдельной заметке (с картинками). Этот принтер работает методом последовательного наплавления слоёв пластика, то есть, он состоит из нагреваемого столика, над которым перемещается печатающий узел с горячим соплом (“хотэндом”) экструдера.
Естественно, возможности принтера ограничены, но если вы самостоятельно проектируете изделие, то его конструкцию можно оптимизировать с учётом этих ограничений. Например, многие удивляются, что этот конкретный принтер позволяет распечатать работающие резьбовые соединения. Действительно, резьбу печатать не так просто, но вполне возможно. Единственная хитрость состоит в том, что при печати изделие на столике нужно расположить так, чтобы резьба шла строго вертикально. Это касается и внешней, и внутренней резьбы. Печать “под наклоном” или в горизонтальном положении – даёт плохой результат. Естественно, это связано с кинематикой принтера: в данном случае, столик двигается только по одной горизонтальной оси, а второе горизонтальное перемещение и вертикальное – обеспечиваются перемещением печатающего узла.

Основные проблемы всегда доставляют участки модели, которые нависают над столиком. Очевидно, что FDM-принтер не может печатать “в воздухе” – пластик будет просто вытекать вниз. Обычно, для того, чтобы печатать “нависающие” поверхности, используются подпорки. Подпорки здесь – это достаточно лёгкие структуры, которые принтер печатает, начиная от столика, и которые потом можно удалить, отломив или отрезав от изделия. Подпорки добавляются в описание модели для печати. Слои основного изделия, соответственно, накладываются на подпорки. Убирать подпорки, например, у резьбы – весьма сложно: смысл теряется. (Бывает ещё вариант с печатью подпорок другим типом пластика, например, водорастворимым, но для этого принтер должен иметь два печатающих узла.)
Так вот, у всякого FDM-принтера, тем не менее, есть некоторая “степень нависания” слоя, которую принтер может распечатать без подпорок, если только соответствующая часть изделия “вырастает” из другой части, а не висит уж совсем отдельно. Это объясняется достаточно просто: если очередной слой лишь немного “свешивается” за край предыдущего, то свежий пластик успешно приклеивается к этому краю и не провисает, так как застывает достаточно быстро (тут главное не использовать ни слишком высокую скорость движения печатающего узла, ни слишком низкую). Это отлично работает как для резьбы, печатаемой вертикально, так и для других моделей (в принципе, можно даже печатать небольшие горизонтальные “прогоны”, на небольшой скорости). Что, собственно, и составляет один из методов оптимизации: углы “нависания” нужно проектировать так, чтобы принтер справился без подпорок. Да, это вводит ограничения на конструкцию изделия, поэтому может составить проблему, если использовать готовую модель. Однако если модель проектируется под конкретную задачу с нуля, этот момент можно учесть, что, в общем-то, является обычным технологическим аспектом разработки (не только в случае 3D-печати).
Построение изделия “от столика” приводит к ещё одному методу оптимизации: отверстия лучше всего печатаются в положении, когда плоскость отверстия параллельна столику. Идеальный вариант – это когда поверхность, в которой сделано отверстие, лежит при печати прямо на столике.

Это же применимо и к разнообразным опорным поверхностям и рёбрам жёсткости: для оптимизации печати нужно стараться большинство углов сводить к прямым, учитывая, что модель лучше всего разместить так, чтобы наибольший по площади сегмент поверхности непосредственно лежал на столике. Например, если нужно распечатать плоскую деталь, то её нужно повернуть так, чтобы при печати она лежала, а не стояла на столике (тут, кстати, хорошо заметны некоторые известные особенности русского языка: плоская тарелка стоит на столе, а вилка – лежит рядом; если тарелку перевернуть, то она тоже будет лежать, как ни странно).
Вернёмся к принтерам. Размещение и поворот моделей приводит к следующему аспекту оптимизации – к оптимизации затрат времени. Так, плоские детали, лежащие на столике, могут печататься дольше, чем те же детали, но стоящие вертикально. Вообще, время, требующееся для печати детали, складывается из затрат на перемещение печатающего узла. По каким-то направлениям и осям этот узел может двигаться быстрее, а по каким-то – медленнее. Больше всего этот аспект проявляется тогда, когда печатается простая, но “протяжённая” модель: затраты на движение оказываются неожиданно большими, при этом в вертикальном направлении слой перемещается целиком. Совсем уж очевидный пример: размещение нескольких моделей на столике для одновременной печати. Заметьте, что тут, опять же, многое определяется кинематической схемой (и другая история – фотополимерные принтеры).
Комментировать »
(Продолжаем рассматривать занимательные знаки в манускриптах.) В Unicode есть лигатура ϗ, обозначающая древнегреческий союз καί и совпадающая по свойствам и значению со всем знакомым знаком “амперсанд” (& – происходит от латинского et). Занятно, что в старых (9 – 12 века) манускриптах сокращённое древнегреческое καί нередко выглядит похожим на S (но, согласно справочникам, встречаются и весьма экзотические варианты, например, очень близкие по начертанию к @ – такой вариант, похоже, был почему-то популярен в 14 веке, но это вряд ли связано с распространением Интернета). Вот на картинке ниже “скриншот” из манускрипта Venetus A десятого века, который содержит текст Илиады (на этот знаменитый манускрипт традиционно ссылаются, когда нужно привести пример достаточно старого и полного текста Илиады).

(Сокращения καί отмечены стрелкой, штрих “акцента” – тоже входит в обозначение.) Но сам знак ϗ происходит из приписывания к каппе (“κ”) сокращённой записи для “αι” (она как раз похожа на растянутую s): то есть, сокращению в ϗ подвергается не слово целиком, а только часть.
Комментировать »
Вот сейчас кругом рассказывают о том, что некоторый ИИ, в качестве автоматической говорилки, заменит всех подряд “высококвалифицированных специалистов”. Это занятно. Возьмём в качестве примера задачу реализации шифра на языке высокого уровня. Какой подразумевается целевой процесс, когда “всех заменили”? Предполагается, что задачу для ИИ в вольной форме ставит человек, который увидел название шифра и эталонные тестовые примеры, предложенные разработчиками шифра. Как этот человек проверяет реализацию, выполненную силами ИИ? Правильно: передаёт в получившийся код тестовые примеры и сравнивает результат.
Теперь представьте, что ИИ-говорилка совсем хорошо “оптимизировалась” и генерирует код, который просто-напросто самым прямым образом реализует выдачу правильных ответов на эталонные тестовые примеры, без, собственно, шифра. Ну, буквально, через блок условных операторов и пару циклов: поступили тестовые примеры – получите не менее тестовые, но соответствующие входным данным, ответы. Как известно, не так уж и трудно написать программу “сжатия данных”, которая всякую входную строку произвольной длины сжимает до одного байта. Трудности составляет последующее восстановление исходной строки, но это, как известно, детали, да и “нейросетка” поможет угадать. Человеческий постановщик задачи про реализацию шифра – в коде ничего не понимает, потому что, во-первых, ради этого и затевался переход на “услуги ИИ”, во-вторых – “компьютер с ИИ не может ошибаться” (хотя, казалось бы – но тут не до деталей). Тестовые примеры – сходятся, этого достаточно. А то, что код не реализует шифр и в других случаях может легко выводить всё что угодно – это как раз те самые детали, избавление от анализа которых высококвалифицированными специалистами и являлось целью изменения процесса. Так что результаты внедрения ИИ будут очень заметны, не сомневайтесь.
Комментировать »
На картинках ниже – замок Fichet 787 с “рычажным” механизмом (источник фото: Toool Blackbag).
Замок в разрезе и ключ (фото: CC-BY-4.0 Jan-Willem, Toool Blackbag).

Фрагмент основной части механизма (фото: CC-BY-4.0 Jan-Willem, Toool Blackbag).
“Кодирующая” часть ключа содержит пазы, которые сдвигают внутренние рычажки (1), поворачивающие через зубчатое зацепление диски (зубчатые колёсики – 2), блокирующие вращение механизма: если углы, выставленные на ключе, соответствуют коду замка, то колёсики поворачиваются так, что прорези в них совпадают, образуется общая длинная прорезь, что и освобождает траверсу, делая возможным поворот. Занятно, что устройство, вообще-то, аналогично дисковому, например, замку, но здесь пакет дисков повёрнут относительно ключа, поэтому вместо “угловых бородок” получаются пазы, а для преобразования углов вращения служат рычажки (последние, кстати, можно считать “транслированным” вариантом цилиндров-штифтов в обычных “английских” замках – просто, прямолинейный подъём штифта здесь преобразуется в поворот).
Комментировать »
Ещё немного окололингвистических рассуждений. Про Чарльза и Карла. Как известно, прескриптивный подход привёл к тому, что Чарльз (принц) превратился в русскоязычном пространстве в Карла (короля). Этому есть историческое словарное обоснование (“имена монархов некоторых стран – на немецкий манер”), но замена имени произошла несколько неожиданным для современной аудитории образом, тем более, что Чарльз регулярно упоминался в русскоязычной прессе. Этот процесс, существенным образом связанный со СМИ, занятно отразился в русскоязычной “Википедии”: там, например, пишут, буквально, что принц “Чарльз будет использовать тронное имя Карл III”. Это создаёт расщепление смысла, которого в изначальном событии не было (подобное “слоение” – важная особенность “Википедии”). Конечно, если придерживаться предложенной схемы именования, то написать следовало бы, что это принц Карл (в скобках: Чарльз) будет использовать тронное имя Карл III.
Кстати, даже в немецкой прессе современный Чарльз остался Charles (то есть, в английском варианте), а в самой Великобритании эпоха правления называется (new) Carolean era, однако Чарльз там всё равно король Чарльз (не Карл, естественно, хоть это, понятно, одно и то же имя, а в английском расщепить его на два представления довольно сложно, как бы ни хотелось). При этом подходящих исторических периодов, названия которых образуются от карлов (латинское влияние), в локальной англоязычной традиции есть два, и их предлагается не перепутать: Caroline/Carolean.
Комментировать »
На сайте Ватиканской апостольской библиотеки опубликовано большое количество старых манускриптов, в неплохо оцифрованном виде. Например, текст “Начал” Евклида, датируемый девятым веком. Конечно, девятый век нашей эры, но, как считается, это самый старый из известных подробный текст, в который не было внесено позднейших (относительно Евклида) изменений и дополнений. Посмотрим на фрагмент (обычно цитируют страницу с теоремой Пифагора, поэтому выберем другую – книга первая, Предложение 29 ):

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

То есть, для того, чтобы начать читать первоисточники, потребуется совершить экскурс в палеографию. Так, данный манускрипт не только использует алфавит, начертания букв которого не очень-то похожи на αβγ, но и насыщен специальными лигатурами и сокращениями, которые использовали при записи древнегреческого в соответствующий период (в данном случае – 9-10 вв., как я понимаю; Евклид был древним уже тогда).
Посмотрим, как выглядит “перевод” на более “привычный” древнегреческий. Я попробовал приписать соответствующий текст в режиме, близком к “буква под буквой”, насколько позволяют особенности исходника – потому что, например, ει схлопнуто в одну лигатуру. (В Предложении 29 речь про накрест лежащие углы, образуемые прямой, падающей на параллельные прямые, поэтому, как минимум, одно слово нетрудно узнать.)

Здесь на поле указан номер предложения: ΚΘ, под чертой, что имеет числовое значение 29.

Пришлось дополнительно притянуть μ к π, потому что оригинальное начертание имеет совсем другую ширину – не только хвост мю, но у пи широкая шляпа (к тому же, сыграла узкая йота).

Слово γωνίας (“углы”) здесь разделено между строками, пришлось дорисовать чёрточку. Обратите внимание, что не только λ выглядит необычно (про π уже можно не напоминать), но и ν слишком похожа на μ (спасает только хвостик справа, который, кстати, длинен не во всех случаях).
Для записи древнегреческого использовались самые разные начертания букв – это лишь один небольшой пример. Говорят, что если построить достаточно мощную “систему с машинным обучением” и загрузить в неё некоторые старые манускрипты, написанные на древнегреческом, – а не на латыни, как можно подумать, – то эффект окажется достойным самых смелых эсхатологических предсказаний. Скорее всего, это выдумки.
Комментировать »
Ещё один короткий комментарий на тему форм английских слов и скрытого расслоения смыслов, полностью исчезающего при переходах между языками. В английском языке у слова antenna (антенна; в британском – aerial) две формы множественного числа: antennae и antennas. Форма antennae – кажется естественной, а вот antennas – для “литературного взгляда” смотрится несколько странно, но, тем не менее, тоже верная форма. Почему? Дело в том, что если речь идёт об антеннах для приёма радиосигнала, то использование формы antennas – сразу выдаёт в вас разбирающегося в вопросе человека, потому что antennae – это, с точки зрения радиоинженера, да и продвинутого филолога, усы на голове насекомого (но, впрочем, эту форму допустимо использовать и в электромагнитном контексте, вряд ли кто-то осудит строго).
Комментировать »
Один из оксфордских словарей (Oxford Advanced Learner’s Dictionary) относит слово miaow к уровню C1 (это высокий уровень владения языком). Казалось бы, здесь miaow – это “мяу!”, а именно – подражание разговору котов. Почему же C1? Потому, что только на высоком уровне освоения языка обязательно узнавать подобные слова. Естественно, слово cat, в значении “кошка”, тот же словарь относит к начальному уровню A1. Но попробуйте показать начинающему изучать английский (как иностранный) слово miaow – скорее всего, с пониманием возникнут трудности; а вот на уровне C1 – трудностей возникать не должно.
Занятно, что moo (мычание коров) тот же словарь относит уже к уровню C2 (это максимально возможный, по данной шкале, уровень владения языком). Дети изучают, что “коровка говорит: му-у!”, в том числе, дети, для которых английский является родным и первым языком – moo. Это так. Но для тех, кто осваивает иностранный английский, конечно, moo может показаться незнакомым загадочным словом, поскольку для них и коровка могла говорить что-то другое, и сопоставить иностранное слово, записанное незнакомыми буквами, со знакомым звукоподражанием, в общем случае, не так-то просто. Кроме того, сортировка по шкале внутри одного языка должна происходить более или менее одинаковым способом для всех животных звукоподражаний, но с учётом того, что с коровой многие городские жители сталкиваются реже.
Теперь, что касается mew. Это слово здесь тоже означает “мяу”, но без восклицательного знака (даже, скорее, “миу”). Mew – как минимум, в британском английском, – тише и мягче, чем miaow (meow), поэтому может использоваться иначе.
Комментировать »
Ещё о пресертификатах в Certificate Transparency (CT) и странных “свойствах”, которые возникают вокруг. TLS-сертификаты превращаются в пресертификаты после того, как добавлено специальное расширение Poison. Может показаться, что с этим расширением тоже связана проблема “курицы и яйца”, поскольку нарушать процесс валидации poison-расширение должно потому, что оно помечено как Critical (критическое), но имеет тип, неизвестный валидатору – неизвестные критические типы, согласно рекомендациям, должны приводить к тому, что сертификат считается невалидным (а вот расширения неизвестного типа, которые не помечены как критические, можно игнорировать). Если же валидатор знает тип poison-расширения, то флаг Critical уже не должен препятствовать валидации. Это так, однако проблемы тут нет: в том случае, когда валидатор распознал poison-расширение, он не должен принимать сертификат на правах валидного, так как, грубо говоря, видит, что это пресертификат (ну или можно интерпретировать иначе: наличие poison-расширения означает, что сертификат не должен использоваться так же, как и сертификат без Poison). В общем, всё же появляется неплохой шанс выстроить однозначный процесс валидации.
С пресертификатами связано множество весьма неочевидных аспектов. Так, единственный смысл в пресертификатах – это создание “костыля” для получения метки времени от сервиса CT-лога, чтобы включить эту метку в сертификат. Метка (она называется SCT) связана с конкретным пресертификатом и подписывается лог-сервисом. Но включается метка уже в сертификат, который от пресертификата отличается в некоторых деталях. Напрмер, сертификат не должен содержать poison-расширение. При валидации сертификата проверяется и SCT-метка (ну, если валидирующая сторона, – скажем, браузер, – хочет проверить метку). Понятно, что если подпись вычислена для другого набора данных (пресертификат), то она не сойдётся. Как же устроены процессы подписывания и проверки подписи SCT-метки? Они устроены непросто.
При вычислении подписи для пресертификата сервис CT-лога использует в качестве входных данных не весь сертификат, а только его “содержательную часть” (некоторое зафиксированное в структуре подмножество полей), из которой, к тому же, удаляется poison-расширение. Это, что называется, первый “сюрприз”: poison-расширение должно присутствовать в составе поступающего пресертификата не только потому, что оно и делает сертификат пресертификатом, но и потому, что иначе не сойдётся подпись УЦ на пресертификате, а подпись должен проверить сервис лога. Дописать какие-то данные в сертификат не выйдет. Однако поскольку в сертификате Poison удаляется, то и подпись в SCT нужна на данных без poison-расширения. Второй “сюрприз”: при проверке подписи SCT в сертификате – нужно восстановить содержательную часть пресертификата в точно таком виде, какой передавался в сервис CT-лога, но с учётом удаления Poison – то есть, нужно удалить “лишние” расширения (SCT-метки), а те расширения, которые останутся, должны совпасть с конфигурацией пресертифката. А поскольку такое преобразование снова удаляет из состава сертификата значение подписи, к данным сертификата, перед проверкой, вместе с другими служебными параметрами SCT, нужно присоединить отпечаток открытого ключа УЦ. Понятно, что то же самое делается и на стороне CT-лога, при формировании SCT. Так что общий алгоритм местами “макаронный”, но, тем не менее, используется. Не удивительно, что в новой версии CT пресертификатов нет.
Комментировать »
Омоглифы – это символы, совпадающие по начертанию, но различные по значению (интерпретации). Например, Н, H и Η, а именно – заглавная кириллическая “н”, заглавная “h” английского алфавита и заглавная “η” греческого алфавита. Пришлось тут столкнуться с забавной “программной” интерпретацией данного явления. Пакет Gitea (это пакет для работы с исходным кодом в git, с веб-интерфейсом и прочими полезными функциями) при попытке посмотреть некий русскоязычный текстовый файл из репозитория на сервере – показывал мне в браузере предупреждение, что “This file contains ambiguous Unicode characters!” (“Этот файл содержит “неоднозначные” символы Unicode!”). И действительно, встроенный фильтр подсвечивал буквы вроде “a”, “T” и “о”, но не во всех случаях. Так, целиком подсвечивалось сочетание букв “То” из “То есть”. А в другом месте этого же текста подсвечивалась одинокая буква “а”, при помощи которой обозначался союз “а”.
Сперва показалось, что это действительно в текст прокрались “омоглифы”. Такое случается, особенно, когда используешь несколько раскладок клавиатуры: английская “C” прокрадывается и занимает место “С”, предположим. Однако попытка исправить эти буквы в исходном файле и отправить изменения к успеху не привела: выяснилось, что ничего-то там не меняется – буквы уже использованы кириллические, в файле всё записано верными буквами. Хитрость оказалась в том, что пакет Gitea, руководствуясь настройками “локали” в браузере (а у меня использовалась англоязычная), самостоятельно делал вывод, что данного пользователя могут ввести в заблуждение сочетания кириллических букв, похожие на английские слова, о чём и предупреждал. То есть, “То” в этом “То есть”, выглядит английским “to”, а “а” – неотличима от артикля. В общем, как говорится в тексте, содержащем исходную формулировку знаменитой, – но известной только специалистам, – проблемы Винни-Пуха: “зачем эта хта обязательно та, а жерка, как правило, эта?”. Кто бы мог подумать.
(Уточнение: под “словами” подразумеваются последовательности омоглифов, обособленные пробелами.)
Комментарии (2) »
В продолжение предыдущей записки: действительно большая угроза, связанная с ИИ, скрывается за фольклорным предположением, что “компьютер не может ошибаться”, тем более, когда это компьютер с “интеллектом”. Представьте современную систему, которая по запросу типичного клерка или специалиста, занятого подготовкой отчёта или рекомендаций по какому-то вопросу, генерирует связные тексты, внешне выглядящие как “совет эксперта”. Естественно, такая система может использоваться при принятии решений, в качестве источника подсказок. Известно, что экономикой многих предприятий управляет MS Excel, как и целым рядом научных направлений. Что же говорить про такой удобный инструмент, как генератор текстов – он тут оказывается гораздо мощнее, чем Excel. Вот и может так выйти, что куча административных процессов в мире попадёт в зависимость от некоторого центрального сервиса, который, через модификацию выдачи “нейросети”, станет управлять ими, двигать, так сказать, в нужном направлении. Это лучше профилирования человеческой деятельности путём “обучения нейросетки” на непонятно какой выборке, и приближается по эффективности к дорисовыванию картинок высокого разрешения на основании значений нескольких пикселей (данная тема, заметьте, популярности не теряет).
Что же касается реальных технических моментов, то тут можно было бы предложить, что, начиная с некоторого порога сложности, все эти нагромождения взаимосвязей регистров компьютерной памяти входят в соприкосновение с некоторыми непонятными пока что свойствами “окружающего мира”, результатом соприкосновения становится “нечеловеческий интеллект“. Ну, в том случае, если концентрация большого количества значимых бит в небольшом объёме пространства не приведёт к схлопыванию всего массива в одну частицу типа позитрона, как описано в известном фантастическом произведении.
Вообще, соприкосновение с неизвестными свойствами действительно могло бы происходить на уровне электроники, элементы которой должны быть достаточно миниатюрными: с малой пространственной шкалой и электромагнитным взаимодействием может быть связан какой-нибудь неожиданный временной эффект, который проявляется только на очень больших числах взаимосвязей – сами взаимосвязи не обязаны быть “физическими”. Аналогичное рассуждение применимо к аппарату квантовой механики: например, откуда можно узнать, что известные модели действительно работают для пространств состояний порядка 2^1000? А узнать можно, попытавшись построить квантовый компьютер соответствующей разрядности (ну или другую экспериментальную машину, сходную по расчётным свойствам). А в случае больших машинных ИИ на тысячах специализированных процессоров можно было бы ожидать проявления обратных свойств. При этом, если самосознание (self-awareness), – настоящий интеллект, – оказывается принципиально невычислимым (откуда и все “проблемы” с интерпретацией времени), то это вовсе не запрещает нечеловеческий, – но вычислимый “неожиданным образом”, – искусственный “интеллект”, пусть и тоже в кавычках.
Комментировать »
Новый