четверг, 24 февраля 2011 г.

EPUB to Kindle converter

Замутил тут новую программу: EPUB to Kindle converter. Собственно, вначале просто ковырял mobi и epub на предмет добавления в лучший просмоторщик документов, потом просто ковырять стало скучно, решил применить знания на практике. Ну и являясь вполне счастливым обладателем Kindle, который собака не жрет ничего кроме MOBI и PDF, заодно написал себе инструмент для загоняния всякого для чтения на девайсе, есть там пара мыслей как все это углубить и расширить, хотя возможно и не в рамках конвертерного проекта. Мыслей правда и помимо этого до черта, вот времени на все радости к сожалению не всегда хватает.
С другой стороны интересно посмотреть на проект, сделанный фактически с нуля за месяц и на то чего из этого получится.

Про мега варианты защиты текста в XPS

В связи с STDU Viewer кинули тут замечательный XPS файл. Проблема была в том, что страницы рендерились крайне медленно, т.е. тормозило все жутчайшим образом. Первая мысль была что народ в очередной раз чего-то отсканировал c 600 dpi разрешением и закрутил в xps. Думаю, эко до чего техника дошла, раньше все в djvu и pdf гнали, а теперь значит и до xps добрались. Причем размер у файла был вполне себе достойный, больше 30 метров, что подозрения усиливало.
Но выяснилось, что все намного веселее.
Нас самом деле xps, он как бы сильно похож на pdf, т.е. то же документ с подготовленными к печати страницами, часть данных может быть представлена в векторном виде (причем вроде как тут инструментов у xps даже побогаче), часть в растровом, часть просто как текст, причем и шрифты можно внедрить. Надо сказать, xps видится мне форматом существенно прямее и четче чем pdf, хотя и не без своих заскоков. В pdf например, есть понятие потока и соответственно кодированного потока, ну и есть пяток разных кодеров, типа Deflate, jpeg, CCITT и прочем RLE, причем над данными, которые вы хотите положить в pdf файл, вы можете последовательно надругаться разными кодеками. Понятно, что по-большому счету вот это вот последовательное применение нескольких кодеков над одними и теми же данными нужно крайне редко (т.е. я вообще не припомню, чтобы с таким сталкивался, хотя и допускаю, что кто-то где-то и когда-то этим пользовался и может даже пользуется до сих пор). При этом совершенно очевидно, что ч/б картинки будут кодироваться CCITT или JBIG2, цветные jpeg или jpeg2k ну, а текстовые данные Deflate или LZ77 (вроде LZ77 там тоже есть лезть проверять в спеку лень). Но все как обычно сделано очень обще, при том, что вся эта общность вырождается во вполне конкретную частность в 95% случаев, и еще кучу работы чтобы поддержать оставшиеся 5%. В отличие от pdf в xps все проще и от того приятнее для реализации, причем сильно сомневаюсь, что можно найти pdf не переводимый в xps.
В xps правда есть свои веселые заморочки, типа virtual brush с дикой вложенностью, но в целом формат на мой вкус попрямее, и думаю если микрософт его не забросит, в конечном итоге он должен pdf придушить. Хотя судя по скорости распростронения электронных читалок, есть вполне приличная вероятность, что скоро форматы с четким разбитием на страницы сдохнут уже все скопом, а выживут всякого рода ePub, FB2 и прочие MOBI. А если учесть, что гугл всерьез решил пересканировать всю мировую литературу, перспектива, лично меня, сильно радует.
Возвращаясь к тому файлу xps с которого все началось. Итак, открываю файл начинаю разбираться чего там внутре. Честно говоря, давно я так не удивлялся.
Как известно современные шрифты (да вообщем, и не очень современные тоже, поминая METAFONT Кнута), задают каждую буквовку набором кривых, от чего собственно шрифты и называются векторными. Так вот ребята готовившие документ, не стали внедрять шрифты, а просто перевели весь текст в набор кривых, благо формат xps вполне это повзоляет.
Плюс на мой взгляд только один. Документ по сути разом стал Read Only, т.е. скопировать оттуда текст стало фактически не возможно штатными средствами. Из минусов размер документа раздулся до невозможности, т.е. если его растерезовать с разрешением 600DPI и потом загнать в pdf с JPBIG2 кодеком или в djvu, то этот самый растровый документ будет раз в 10 меньше по объему (а может и в 20). Ну и понятно что скорость рендеренга такого документа резко снизилась, потому что одно дело когда шрифт растеризуется и кешируется, и другое когда кешировать особенно нечего и каждый символ приходиться растеризовать заново.
С одной стороны столь элегантное решение по созданию Read Only документов не может не радовать, с другой плодить энтропию в таких объемах мягко говоря выглядит не экономно.

среда, 2 февраля 2011 г.

Про формат epub, русские народные сказки и прочее

Понадобилось мне тут поразбирать файлы в формате epub. Я в свое время на этот формат уже смотрел, и помнилось мне, что все там просто. Т.е. всего то запакованный в зип набор html-к, картинок и css-ок, плюс некая главная xml-ка в которой прописано, в каком порядке те html-ки собираются в книжку.
Начал смотреть. Собственно первая задача, это определить, который из файлов в зипе есть та самая главная xml-ка. Как бы сделал я будь я составителем стандарта? Я бы сделал просто. Сказал бы, вот вам граждане зип, кладите туда чего хотите, с какими хотите названиями и папками, но опосля всего этого безобразия будьте любезны положить туда же в корень архива файл main.opf, который бы описывал чего жеж с тем что вы в зип понапихали делать. Оно, конечно, может в тот момент я был бы не в духе и заставил бы бедных граждан называть тот файл general.opf, а то и TyrpYRMyrDYR.opf, всяко бывает. Но как-то вот так, да.
Как же оно реализовано мега гражданами составителями формата? Естественно, там не такие простаки, поэтому все существенно круче, а именно.
В зипе должна обязательно быть папка META-INF, в папке той должен быть обязательно файл container.xml, в том файле, который кстати "содержит XML которая использует "urn:oasis:names:tc:opendocument:xmlns:container" namespace для всех ее элементов и аттрибутов." Да так вот в этом container.xml должен содержаться элемент , который в свою очередь должен содержать по меньшей мере один элемент , имеющий media-type "application/oebps-package+xml". Но только один элемент , имеющий media-type "application/oebps-package+xml" должен быть включен. И вот наконец файл на который ссылается первый элемент, имеющий media-type "application/oebps-package+xml" будет содержать EPUB rootfile.
Я когда все это прочитал, понял, что что-то это мне напоминает.
"Смерть Кащея на конце иглы, игла в яйце, яйцо в утке, утка в зайце, заяц ларце, ларец на дубе, дуб на острове, остров хер пойми где" а теперь Ваня шкандыбай в сторону того острова и отстреливай весь этот зоопарк.
Самое интересное во всем этом мегаконструкте, полнейшее отсутствие полезности. А местами даже вредность. На 10 epub файлов скаченных из разных мест и созданных явно разными программами, не нашлось ни одного, в котором бы файл container.xml содержал что-то кроме ссылки на файл. Кто-то называл тот главный файл main.opf, кто-то general.opf, кто-то запихнул его не в корень архива, а подпапку, но по сути весь этот восторг разнообразия, программистам писавшим редакторы или конвертеры в epub вряд ли нужен. Если бы в спецификации было четко написано, как назвать главный файл они бы его так и назвали и вряд ли сильно расстроились за такое тоталитарное измывательство над креативными людьми.
Самое грустное, что это вот странное желание не упростить сложное, а усложнить простое, оно последние время наблюдается практически везде в ПО. "Давайте мы сейчас зафигачим такой формат, такой общий, такой абстрактный, что только держись". И понеслось, навертели такое, что реализовывать поддержку того формата целиком не упиралось уже даже монстрам индустрии, после чего начинаются дальнейшие радостные крики, а вот профиль 0, это когда мы из нашего мега формата отрезали вот это, вот то и еще здесь оставили только параметры от 0 до 2, а не от 0 до 2 в 32-й как было изначально, а вот профиль 1, там мы тоже все обчекрыжали и файл должен быть тока в UTF-8. Абалдеть.
Собственно, если начать сравнивать форматы сделанные лет 10-15 назад и сейчас, отличие разительно и совершенно очевидно. Берем Word-овский doc, благо теперь его открыли - все просто понятно, все пляшет от практических нужд, видно что делалось оно людьми, которые пишут программы, причем не программы вообще, а вот один из лучших текстовых редакторов (как по мне так и лучший), а не пытаются поковырявши в носу или где то там еще выдумать "чего бы там могло бы быть если бы оно бы туда бы и чтобы всем бы круто, вот". Берем DjVu тоже все четко и понятно, PDF старенький - все отлично, потом пошли формы, 3Д, мультимедиа и прочее и прочее и прочее. Смотрим, например, спецификацию 1.7. на PDF: "Sound, Movies, 3D artwork"... граждане, башку то включите, хочется интерактивных документов со всеми этими вашими мультимедиа, дык кто же спорит - здорово, но при чем тут PDF, который разбит на страницы и вообще подготовлен к печати, это ж PostScript по факту то, чего из него HTML то делать, мало что-ли HTML?
Из относительно новых, только FB2 греет мне душу, простой понятный и главное ровно то что нужно, для задачи хранения книги в библиотеки и ее отображения на компьютере. Т.е. люди представляли для чего им нужен формат, а не пытались сделать нечто чем можно и гвозди забивать, и стихи писать.
Вообщем ситуация навевает грусть, ибо вместо того чтобы сделать простое просто, а сложное постараться упростить, имеется тенденция, усложнять простое, а сложное и вовсе не делать.