Чтобы создать что-то по-настоящему новое, порой достаточно сделать первый шаг: выйти из плоскости.
Начну этот рассказ с краткого отступления – истории, изложенной в книге «Код» Чарльза Петцольда. На всякий случай, напомню: это классическая научно-популярная книга о сути информатики, о том, как из языка формируется код, что такое системы счисления, как создавались счетные машины (и почему именно счетные), о языках программирования, человеко-машинных взаимодействиях и о тонкой грани между кодом и шифром.
![](https://habrastorage.org/getpro/habr/upload_files/a66/fbc/0ae/a66fbc0ae2de0ddb53e8a3f23e778639.jpg)
Луи Брайль (1809 - 1852), знаменитый автор шрифта для слепых, от рождения слеп не был. Отец Брайля работал шорником, и девятилетний ребенок случайно попал себе в глаз острым инструментом, играя в отцовской мастерской. На один глаз он ослеп сразу, но затем инфекция быстро перекинулась и на второй глаз, в результате чего Луи полностью утратил зрение и оказался в парижском приюте Валентина Гаюи (1745 - 1822), который в 1784 году основал в Париже «Мастерскую трудящихся слепых», а в 1806-1818 годах занимался аналогичной работой в Санкт-Петербурге.
Именно Валентин Гаюи впервые попытался разработать тактильный шрифт для слепых. Он делал рельефные отпечатки латинских букв, которые затем должны были на ощупь изучать его воспитанники. Тем не менее, эта система оказалась малоэффективной и непонятной, поскольку Гаюи не смог поставить себя на место слепого человека, вообще не представляющего, что такое визуальное восприятие буквы. Система Брайля, сделанная ослепшим для слепых, оказалась гораздо более эффективной и семантически насыщенной, чем изобретение его учителя.
Этот эпизод заставил меня вспомнить о феномене кипу — узелковой знаковой системе древних перуанцев. В XVI веке испанцы, вторгшиеся в государство инков, обнаружили, что огромная территория от Колумбии до Чили (захватывающая западные области Боливии) управляется как империя, здесь построены дороги, подвесные мосты, налажено (натуральное) налогообложение и почта, а также кодифицировано законодательство. При этом испанцы не обнаружили у инков письменности в привычном нам виде.
Оказалось, что прикладные задачи, связанные с учетом, счетом, передачей и выполнением распоряжений выполняются в государстве инков при помощи кипу. Слово «кипу» в переводе с языка кечуа означает «узел» или «завязывать узел». Кипу напоминает длинную бахрому, вертикальные нити которой отходят от горизонтальной основы.
На самом деле, письменность в привычном нам понимании у инков была. П. Сакраменто де Гамбоа упоминает, что у инков были кожаные полотна в золотых рамах, причем, как полотна, так и сами рамы были покрыты пиктографическими символами. Также письменность встречается на посуде инков и на стенах храмов. По-видимому, инки заимствовали такую письменность у майя. Эта письменность, должно быть, воспринималась буквально как «иероглифы», то есть, «священные знаки». Функционально кипу являлось не столько письмом, сколько кодом, который принципиально выигрывал у письменности по нескольким показателям:
Информационная емкость и масштабируемость
Наглядность (нити кипу были разноцветными)
Сочетание зрительного и тактильного восприятия
Пригодность для хранения как текстовой, так и числовой информации
Функционально кипу сближается с другой разновидностью американского протописьма — вампумом. Вампумы представляли собой широкие пояса из разноцветных нитей, использовались в районе Великих Озер и Вудленде. Вампум был расшит бисером и раскрашенными раковинами и также использовался в прикладных целях, в первую очередь, для формулировки договоров, объявления войны и заключения мира. Традиционно вампум ассоциируется с культурой ирокезов, но также был известен многочисленным племенам алгонкинов, населявших Вудленд.
![](https://habrastorage.org/getpro/habr/upload_files/ed8/637/d4f/ed8637d4f92455bf30881031eb19ccdb.jpg)
Как сходство, так и различие между вампумом и кипу вполне очевидны. Сходство: это утилитарная тканевая письменность, символика которой далека даже от иероглифического уровня абстракции, но насыщенная семантика передается при помощи цвета. Но кипу значительно сложнее вампума, поскольку каждая его нить семантически самостоятельна, а значение передается не только через цвет нитей, но и через сочетания цветов.
Примеры использования кипу
Специалист по обращению с кипу назывался «кипукамайок» и характеризовался, как «человек, на которого возложена обязанность считать». Таким образом, инки воспринимали кипу прежде всего, как средство счета, а не средство письма.
До настоящего времени в музеях сохранилось до 400 цельных и фрагментарных кипу. Тем не менее, европейцы столкнулись с кипу в сравнительно недавний исторический период, поэтому функционал и применение этой знаковой системы были хорошо известны. Наиболее древним и авторитетным источником этой информации является «История государства инков», написанная Инкой Гарсиласа де ла Вега (1539 - 1616), сыном высокопоставленного испанца (судьи Куско) и знатной инкской женщины. Эта работа, изданная в 1609-1617 годах, характеризует кипу как «книги ежегодного учета». Каждая толстая вертикальная нить в кипу состояла из нескольких разноцветных нитей и снабжалась узлами. Цвет нити означал «тему» зашифрованной информации, а узлы использовались при подсчете. Так, желтые нити означали золото, белые – серебро, красные – воинов. В вертикальном направлении по шнуру кипу откладывались узлы, которые в сочетании с цветом нити и в направлении сверху вниз обозначали предметы и сущности в порядке убывания их ценности, например «пшеница-ячмень-горох-бобы-просо». Некоторые кипу ветвились, таким образом, сообщались дополнительные признаки сущности, которую обозначал данный узел, и в котором происходило ветвление. Например, от узла, обозначавшего количество женщин, отходили ниточки, указывавшие девушек и замужних женщин.
При этом область использования кипу расширялась, поэтому каждое кипу снабжалось специальными знаками «senales», указывавшими его тему. Существовали кипу, посвященные хронологии или содержавшие эпические повествования.
Наконец, кипу обязательно снабжались «счетными» узлами, обозначавшими разряды чисел. Известны кипу, исчисляемые в которых единицы измерялись десятками тысяч (прежде всего, это кипу с информацией о переписи населения).
Поскольку кипукамайоки были неграмотны (в нашем понимании, то есть, не умели читать и писать), основную информацию кипу они заучивали наизусть, а сама узелковая структура служила мощным мнемоническим средством. Можно сказать, что кипу напоминали таблицы или базы данных и, разумеется, их невозможно было заменить пиктографическими надписями.
Кипу: варианты реализаций в коде
Итак, можно утверждать, что кипу обладают интересным сходством с базой данных и одновременно с пользовательским интерфейсом. Также в кипу прослеживаются параллели с азбукой Брайля, поскольку их можно читать на ощупь – но, разумеется, благодаря цветовой семантике кипу гораздо информативнее как азбуки Брайля, так и обычного текста. Кипу обладает чертами «статической типизации» - в верхней части кипу есть «аннотация», характеризующая его тему. Наконец, кипу имеет ярко выраженные признаки гипертекста, выражающиеся в ветвлении нитей.
Графический пользовательский интерфейс в форме кипу был реализован в рамках уникального этнографического проекта. Во 1990-е годы президентом Перу был Альберто Фухимори, и одна из самых одиозных его инициатив заключалась в стерилизации сельских жителей (прежде всего, кечуа и метисов) для борьбы с излишней рождаемостью. Многие такие операции проводились насильственно, без информированного согласия и в приказном порядке; власти пользовались неграмотностью крестьян. Сборник историй об этом периоде реализован в виде сайта, имитирующего по своей структуре кипу. В качестве примера приведу три скриншота:
![](https://habrastorage.org/getpro/habr/upload_files/b51/103/6ae/b511036ae445da0f93e987019d4b379b.png)
![](https://habrastorage.org/getpro/habr/upload_files/be1/738/72d/be173872d8be178bdf66d10d1c3d87ab.png)
![](https://habrastorage.org/getpro/habr/upload_files/10c/1f8/fd9/10c1f8fd92e7079ce6883b2fbce45827.png)
Оставим в стороне вопрос о том «изобрели ли инки первый компьютер» — эта тема подробно рассмотрена здесь — и поговорим о попытках реализации кипу в виде компьютерной программы.
В статье Пола Бейнон-Дэвиса (Paul Beynon-Davies) "Significant threads. The Nature of Data" находим одно из первых систематических обсуждений кипу как структуры данных. Автор рассматривает правила плетения кипу как формальную грамматику, подходящую под определение BNF (форма Бэкуса-Наура). Грамматики такого вида используются, в частности, при составлении документов RFC. Подробный разбор кода отдельно взятого кипу приведен в вышеупомянутой статье, здесь же я перечислю только значимые параметры кипу, несущие информационную нагрузку:
Аспект 1: тип материала
Аспект 2: направление скручивания нитей и прядей
Аспект 3: цвет нитей
Аспект 4: цветовая гамма прядей
Аспект 5: соединяемость прядей
Аспект 6: относительное расположение прядей
Аспект 7: абсолютное расположение прядей
Аспект 8: тип узла или маркера
Аспект 9: направление узлов
Аспект 10: относительное взаимное расположение узлов и маркеров
Еще в 2013 году на Хабре была предложена концепция языка программирования Quipu, автором которого является Владимир Костюков @spiff. Не буду пересказывать в подробностях его статью, которая, кстати, набрала такие показатели:
![](https://habrastorage.org/getpro/habr/upload_files/e89/9a2/ce8/e899a2ce8cf5f131809ebd87756e0e82.png)
Автор предлагает реализацию языка Quipu, в котором предусмотрены две основные структуры данных: узелки (knots) и нити (threads). Таким образом, язык предназначен для работы с числовыми и строковыми данными. Узлы и нити в Quipu объединены в виде матрицы:
![](https://habrastorage.org/getpro/habr/upload_files/04d/6e0/02b/04d6e002bf978c80653e0a737a16ebaa.png)
Автор также предлагает интерпретатор этого языка на Scala https://github.com/vkostyukov/quipu.
Другая интересная реализация кода для кипу предложена на сайте проекта «Penelope», авторы которого занимаются цифровизацией древних видов письменности, в том числе, узелковой. Авторы этого проекта, который называется «Knotcoding», подчеркивают древовидные черты кипу (ветвление), а также пытаются учесть в коде показатель цвета нитей.
![](https://habrastorage.org/getpro/habr/upload_files/5cb/440/5b3/5cb4405b36d3b7c8fd34428424a09e0f.png)
В этом коде запрограммирован ритмический паттерн «TidalCycles». Вот как этот код выглядит в форме кипу:
![](https://habrastorage.org/getpro/habr/upload_files/3a0/7f1/963/3a07f19637fcad5b90b0fee96152950e.jpg)
И вот как он читается:
Узлы соответствуют числам, причем, здесь сделана и слегка неуклюжая попытка представить рациональные числа (числитель обвязывается вокруг знаменателя).
Нечисловые значения представлены в виде бусинок. Желтые означают cp, а фиолетовые feel (номер образца – это число, поэтому, оно обозначается узлом). В качестве исключения, одиночные буквы представлены в виде порядковых чисел, соответственно, узлов, напр., c = 3.
Имя функции – это бусина, за которой идет коричневая бусина. Например, красная и коричневая для jux, розовая и коричневая для foldEvery, синяя и коричневая для ~>
Субпаттерны и функции как параметры – это отдельные нити, подвешенные сбоку (карринг удается как надо)
Имя параметра – это бусина, за которой идет черная бусина. Красная и черная для sound, зеленая и черная для cut, синяя и черная для up, розовая и черная для speed.
Подвязанные сбоку нити – это скобки, они вводят, например, параметры, списки или другие суб-инструкции. Именно здесь просматривается древовидная структура.
Еще одна занятная реализация кипу в коде (Khipu) предложена Юлианом Рорхубером из Дюссельдорфского университета. Она уже довольно далека от традиционного кипу, но принципиально схожа с письмом инков тем, что инструкции языка наращиваются по вертикали сверху вниз, отходя от горизонтальной основе. Основную роль в программировании на Khipu играет цвет бусин, и программу на этом языке можно представить в виде такого рисунка:
![](https://habrastorage.org/getpro/habr/upload_files/f53/20b/558/f5320b5585bf89270ccbfb0597e7adc6.png)
В качестве условных операторов в такой программе используются цвета «нитей» и направление, в котором закручена каждая из нитей. Вот репозиторий для преобразования программы на Khipu в программу на Python.
Наконец, существует скрипт на Python, позволяющий визуализировать данные, записанные в кипу. С его помощью удалось каталогизировать гарвардский архив кипу, получились вот такие картинки:
![](https://habrastorage.org/getpro/habr/upload_files/b59/c40/325/b59c40325db4ea8b39153fb1545d4714.png)
Каждому узлу соответствует один пиксель, где красным цветом обозначен одиночный узел, зеленым – длинный узел, а синим – узел-восьмерка. Желтым обозначены недостающие узлы. От значения узла зависит яркость пикселя. Также работает цветовая дифференциация прядей, правда, такая визуализация не учитывает направления скручивания прядей.
Заключение
По-видимому, кипу действительно находится ближе к базе данных, чем к письменности. Мне сложно сказать, можно ли сравнить это творение инков с компьютером (давайте об этом поговорим?). На мой взгляд, кипу не может считаться компьютером, поскольку не подходит для вычислительных операций, а только фиксирует информацию. Тем не менее, у кипу определенно просматривается front-end (тактильный пользовательский интерфейс, реализованный в виде узелков), и даже GUI (цветовая дифференциация нитей). Полагаю, что у кипу есть и подобие back-end, заключающееся в строгой иерархической упорядоченности нитей. Нити могут наращиваться (масштабироваться), определенно обладают обратной совместимостью с более ранними версиями кипу, и именно по совокупности этих причин довольно легко реализуются в коде.
Если я ничего не упустил – то кипу даже не упоминаются в книге Петцольда «Код», притом, что там упоминается код Брайля. Это странно. Тем не менее, кипу, как и код Брайля, демонстрируют, насколько насыщенную и необычную систему передачи информации можно создать, если не зацикливаться на алфавите, словах и синтагматике.