Краткое описание формата Creeper — UUE нового поколения

(x) Copyleft, Marïnais, 01.05.2003

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

Однако UUE, Base64 и множество их аналогов — далеко не предел совершенства с точки зрения эффективности достижения этой цели. Просто так сложилось, что именно эти форматы (UUE — для Фидо; Base64 — для Интернета) оказались наиболее распространёнными.

Их можно отнести к I поколению, отличительным свойством которого является использование для представления получаемого кода только фиксированного набора из 64 символов, путём простого разбиения троек байт на 6–битные четвёрки. Очевидно, что поскольку как FTN-, так и e-mail-сообщение может содержать в себе гораздо больше видов символов — где-то от 150 до 200 и более, — такие форматы реализуют их возможности далеко не полностью. Кроме того, поскольку 6–битные последовательности всё равно выравниваются до байта, размер кода в итоге увеличивается на треть по сравнению с размером исходных данных.

II поколение форматов, к которому относится Creeper, использует для своего представления произвольный набор символов, задаваемый пользователем по его усмотрению. Это позволяет реализовать возможности среды передачи данных максимально полно и получить код ценой его минимального увеличения по сравнению с исходными данными. При этом Creeper содержит информацию об использованном в каждой конкретном случае наборе символов вместе с самим кодом, так, что получателю нет необходимости знать заранее, каким набором воспользовался отправитель. Возможное число используемых символов может меняться в пределах от 2 до 256.

Код Creeper также имеет ещё одно достоинство — он устойчив к « засорению» его посторонними символами, не входящими в используемый в данный момент набор — они просто игнорируются. Вы можете использовать, к примеру, только латинские символы, а прямо внутри кода поместить какие–либо комментарии, написанные из русских букв и пробелов.

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

Внешне код Creeper выглядит примерно так:

*#L53G!«e`<8»Wd,MFBg!#«{!'!,vC$}CaA!#E'pGi%#»!b2uJE+P(fЧAxпK 6kP!bEqLVАБ5bC1Z6Ы+И(+kA11ЫmwLbkгO1)4А6YaAгxY6k();+бsФY]Kй6[ hO1KvУkh#~CqLV/с&3fOuZк^_J#jAwХхсi*5j#БOvLv[NWrЭM1K=;ъйБQ{.& Jшы~;fEbPЯxK5фKйБS|ЦJ1LU+.\aAаuL5Kй~[eAsKыЖ%+ю&7jГбqIv[NWrЭA 1KvУk"Y;+kL}+И()bВqJш5+.\fAwi5C"eгггbD8)1{6/lNuJVc%_bGuYv{й8 OyAsKыЖ5O.7~BиsУdBKБ[dIбsФцYVKйj$dFбu)3kf3}Ar)6K(?lГбrJE+^#z Fwхi=_0+bВsР[6/J$jOЯwI=Kй1U5vKrE+b"%ГZzGЕBY;+

При этом следует иметь в виду, что набор символов в вашем случае может более или менее сильно отличаться.

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

Недостатком формата является отсутствие встроенной поддержки разбиения кода на секции такой, которая хорошо известна пользователям UUE/Base64. На этом вопросе необходимо задержаться.

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

Первым вариантом решения проблемы может быть использование архиватора, который способен дробить архивы по томам произвольных и достаточно мелких размеров (это могут делать ARJ и RAR). Задайте архивирование вашего файла(ов) томами, напр., по 30К, а затем закодируйте каждый том Creeper-ом и вставьте в почтовые сообщения. Получатель, в свою очередь, должен будет экспортировать их в файл и передать его декодирующей программе. В результате получится партия сделанных вами томов. Т.о. будет неважно, в какой последовательности пришли к получателю отдельные тома — их состыкует архиватор.

Вторым вариантом может быть использование формата sergey korowkin для секционирования поверх Creeper-а. Этот формат был разработан для постинга текстов по секциям в непосредственном виде, а его основной задачей является сохранение информации о последовательности и общем числе секций. Подробнее об этом формате см. [Marïnais. Как правильно постить тексты в эхоконференции (формат постинга текстов sergey korowkin). — 01.05.2003]. Сархивируйте ваш файл(ы) в один и закодируйте его Creeper-ом. Затем подробите код на секции. Каждую оформите как текст в формате sergey korowkin и вставьте в сообщение. Вкратце смысл этого формата сводится к тому, что каждая секция снабжается заголовком и заключением, позволяющим обозначить её границы, порядковый номер и имя исходного файла. Заголовок представляет собой строки вида:

textsection x of y of file z textbegin.all

для 1–й секции и:

textsection x of y of file z textbegin.section

для всех последующих, где:

x — номер текущей секции;

y — общее число секций;

z — исходное имя Creeper-файла.

Заключение представляет собой строку вида:

textend.all

для последней секции и:

textend.section

для всех предшествующих. Снабдить секции этими заголовками можно как вручную, так и с помощью программ UUE Wizard и FastPost/FastUUE, поддерживающих удобную автоматическую работу с форматом sergey korowkin. Получатель воспользуется этими программами или извлечёт и состыкует секции вручную, после чего передаст код программе декодирования формата Creeper и разархивирует результат.

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

Помимо собственно почты Creeper может быть эффективно использован и с другой целью. Иногда возникает потребность вставить в текстовый файл нетекстовую информацию, причём желательно, чтобы она составляла с ним неотделимое целое, сопровождалась рядом комментариями и не могла потеряться при различных манипуляциях с файлом. При этом использование какого–либо более сложного формата, чем Plain Text бывает нежелательно. Некоторые авторы прибегают в таких случаях к UUE, данные в котором вставляют непосредственно в текст, однако, очевидно, что Creeper благодаря большей гибкости подходит для этой цели лучше.

В настоящее время формат Creeper поддерживает только одна программа — Creeper 1.01a, написанная автором формата Евгением Пажитновым в качестве простейшей базовой утилиты для работы с ним. Программа работает под DOS из командной строки.

Желаемый вами набор символов для представления кода задаётся отдельной опцией.

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

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

— Часть текстовых редакторов воспринимает символ 1Ah (стрелка вправо, ASCII 26) как признак конца файла и выбрасывает всё, что за ним следует. Если это не принять во внимание, большая часть тестового файла может оказаться выброшенной, что драматически исказит результаты тестирования. В большинстве случаев работы с почтовыми сетями этот символ непригоден для использования. Поэтому строку с ним из тестового файла лучше удалить вообще.

По умолчанию Creeper 1.01a использует символы в интервале 21..7E. Это печатные ASCII-символы, которые гарантированно поддерживаются в любой среде. Их 94, что всё равно больше, чем 64 используемых в форматах I поколения.

Для безопасной транспортировки или публикации в любых русскоязычных компьютерных сетях можно смело использовать следующий набор: 21..7E,80..8C,8E..AF,E0..E2,E4..EF. Эти символы надёжно проходят большинство используемых форматов сообщений в среде BBS/FTN/Интернет, выдерживают конвертирование и гейтование между разными форматами и работу в текстовых редакторах. Их 156, что более чем в 2 раза больше, чем в форматах I поколения. Если вы уверены, что канал передачи обеспечивает прохождение псевдографики, можете добавить и её — тогда набор составит 220 символов.

Более подробную информацию вы найдёте в документации на Creeper 1.01a. В ней же содержится описание формата и алгоритмов кодирования и декодирования, которыми могут воспользоваться интересующиеся разработчики.