May 28th, 2010

moose, transparent

книги: pdf reference 1.7

(эта запись будет в основном интересна программистам)

PDF Reference 1.7, by Adobe Inc.

Эта книга, скажу сразу, не для нетерпеливых. Ее объем - 1310 страниц - может отпугнуть; если не считать приложений и индекса, выходит чуть меньше тысячи страниц (правда, некоторые из приложений необходимы, чтобы понять суть происходящего в главном тексте). Как обычно для книг в этом жанре, рекомендуется читать ее вдумчиво и внимательно; отдельные главы или разделы можно пропускать, но никогда не знаешь заранее, сошлется ли на них текст в других главах.

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

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

На первый взгляд, нарратив книги - вполне линейный; повествование плавно перетекает из главы в главу, от введения, к общему обзору, затем "Синтаксис", "Графика", "Текст" итд. Но если внимательней присмотреться, то становится очевидной иллюзорность этой стройной линейности. Тесная сеть перекрестных ссылок пронизывает тело книги, и прыгают эти ссылки то вперед, то назад, не заботясь особенно о том, что уже известно читателю, а что нет. Это создает замечательное ощущение дезориентации, но само по себе еще недостаточно для того, чтобы считать эту книгу шедевром постмодернисткого романа. Для того, чтобы эту дезориентацию закрепить и многократно усилить, автор последовательно применяет три приема.

Во-первых, изобретательная терминология. Так, читатель должен различать stream objects и object streams - два совершенно разных понятия. При этом object stream являeтся видом stream object, но не наоборот. Object stream может также содержать внутри себя другие объекты, но не stream objects.

Во-вторых, обязательное наличие более одного способа добиться одного и того же результата, а желательно - более двух. Эта тема развивается в книге постоянно и последовательно. Так версию PDF можно указать в первой строке файла, а можно - в отдельном словаре. Есть два стандартных фильтра для кодирования двоичных данных в ASCII. Два стандартных способа записать строку-литерал. Два совершенно разных механизма для индексации объектов внутри файла. Два способа указать множество разных графических и текстовых параметров - специальными командами или в специальном словаре параметров (имена команд и имена ключей в словаре различаются). Итд. итп., этот список можно продолжать очень долго.

В-третьих, тонкое введение исключений из общего правила в разнообразных частных случаях. Ни одно универсальное правило не может быть без исключений - таков неофициальный лозунг романа. Скажем, все нумерованные объекты в файле определяются так: [число] [число] obj [содержимое объекта] endobj. Кроме того случая, когда объект хранится внутри object stream, тогда все точно так же, только "obj" и "endobj" выкидываются. Скажем, все идентификаторы внутри файла, т.е. названия чего угодно: ключей в словарях данных, поименованных картинок или секций документа, шрифтов, итд. итп. начинаются с символа /. Кроме одного исключения: названия графических и текстовых команд не начинаются с /. И так далее, и так далее.

В заключение особенно отмечу тот факт, что сквозь все это мастерское жонглирование постмодернистскими темами и символами в романе тем не менее ясно выделяются определенные темы, которые можно было бы назвать в чем-то старомодными, традиционными, гуманными. Во-первых, принцип "терпенье и труд все перетрут" снова и снова демонстрируется в тексте, как например в этом отрывке из секции 3.5.2: "Do the following 50 times: Take the output from the previous MD5 hash and pass it as input to a new MD5 hash".

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