Экслибрис — книжный знак с именем или эмблемой владельца книги и информацией о составе его библиотеки. Столь интересное название своему приложению дала молодая команда разработчиков из Ростова-на-Дону. Программа exLibris это читалка книг в формате EPUB с функцией загрузки произведений через iTunes, с помощью электронной почты или через web-бразуер Safari.

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

Вчера в AppStore появилась новая версия exLibris. Наряду с некоторыми исправлениями, возможности ридера приросли опцией отключения сглаживания текста и расстановкой переносов для русского и английского языков. Воспользовавшись этим поводом, мы решили задать несколько вопросов создателям exLibris Михаилу Любимову и Алексею Гребенец.

Михаил, Алексей, что привело вас на платформу Mac, какие продукты Apple вы используете в повседневной жизни и работе?

Михаил:
На Mac OS я пришёл достаточно витиеватым для программиста путём. Сначала моими инструментами были Windows и платформа .NET, после этого Perl и Linux. Два года назад директор нашей компании «Точка Кипения» предложил мне попробовать писать приложения под новую на тот момент платформу iPhoneOS. Естественно я не отказался :). С тех пор более интересного для себя направления я не нашёл. В качестве рабочей и домашней машины использую MacBook, которого вполне хватает для моих задач. Из мобильных устройств — пожалуй всю линейку iPhone и iPad Wi-Fi.

Алексей:
Мне по этому вопросу сказать нечего. Начал разрабатывать больше по воле случая =)

Когда iPad попал в мои руки, на меня самое сильное впечатление оказали три приложения: Weather HD, Alice и конечно iBooks. Назовите наиболее интересные программы, за счет которых iPad может «обыграть» любые устройства подобного рода, тот же Galaxy Tab от Samsung?

Михаил:
Хотя я и не умею играть на музыкальных инструментах, первым iPad приложением, которое меня поразило, стало Magic Piano — весьма интересная реализация пианино, полностью раскрывающая мультитач возможности устройства. Из игр — это Angry Birds и Plants vs. Zombies. Что касается сравнений iPad c другими аналогичными по формату устройствами, я считаю это не совсем корректным. Каждое из подобных устройств имеет свою нишу на рынке.

Алексей:
Реально сложно говорить об этом не представляя себе как выглядит Galaxy Tab. А вообще сильный эффект был только от того что это «бальшой айфон».

Как возникла идея разработки приложений для AppStore? Каковы ваши роли в проекте и кто участвовал в нем помимо вас?

Михаил:
Учитывая, что в проекте нас всего двое, (да ещё и оба программисты) жёсткого распределения ролей нет. Есть задачи, которые более профильны для меня, и есть для Алексея. Все работы касающиеся серверной части приложения выполнены веб-программистами «Точки Кипения». С дизайном нам помог Роман Мартиросян, за что ему большое спасибо! Идея назвать приложение exLibris пришла как раз от него.

Есть ли у вас еще приложения, помимо exLibris, уже выпущенные для мобильных устройств?

Михаил:
Из уже выпущенных наиболее заметным было моё первое приложение iProbki, которое достаточно долго держалось в топе приложений русского AppStore и серия приложений литературного проекта «Этногенез» последние версии которого мы выпускали уже вместе с Алексеем.

Насколько сложно было начать работать с Objective C? С какими проблемами вы столкнулись на этапе разработки?

Михаил:
Особых проблем при знакомстве с Objective C не было. Язык достаточно прост для знающих основы C и понимающих принципы ООП. Сложности появляются при углублении в фреймворки идущие в составе iPhone SDK. Как обычно это бывает: 80% проекта выполняется за 20% времени. Остальное время — война за оптимизацию кода и борьбу с багами нижестоящих компонент. Отдельной трудностью также можно назвать поддержку обоих платформ iPhone и iPad, в частности самого слабого из устройств — iPhone 3G.

Алексей:
Сам язык Objective-C очень простой по сравнению с С и С++. Вся информация относящаяся к различиям между С и Objective-C помещается в одну wiki страничку, причем вам даже не нужно хорошо знать С, так как большинство возможностей языка С можно не использовать вообще. В Objective-C нет таких проблем с управлением памяти как в C и нет сложностей с шаблонами как в С++. В целом это хороший современный язык, который можно смело ставить в один ряд с такими языками как Java или C#.
Там есть и свои сложности, в основном они относятся к стандартным библиотекам. Достаточно плохая документация (например некоторые функции могут возвращать только код ошибки, не сообщая ничего о её причине, причем описание такой ошибки часто не получается найти ни в документации, ни даже в гугле), часто неочевидные названия методов (например для того чтобы найти вхождение подстроки в строку вам потребуется использовать метод rangeOfString:, хотя название содержащее слово find было бы привычнее), сложность в модификации стандартного поведения некоторых компонент (некоторые вещи которые, казалось бы, должны делаться просто, доставляют много головной боли — например много усилий вы потратите если попытаетесь обвести компоненту UITextView рамкой).

Как возникла идея создать ридер для довольно заполненной ниши в AppStore? Возможен ли доход от приложения такого рода или это лишь проба собственных сил и возможностей?

Михаил:
Когда стало понятно, что эволюция читалки для Этногенеза упёрлась в исходный формат книги, стали выбирать из уже имеющихся и наиболее распространённых форматов. Каждый из них имел свои минусы и ограничения, поэтому выбрали EPUB, как наиболее открытый и мощный, на наш взгляд, в плане возможностей форматирования книги.
Ридеров в AppStore на самом деле не так уж и много. А для действительно качественных вообще хватит пальцев одной руки. Мы решили попытаться пополнить этот список своим приложением. Естественно кроме бесплатной версии читалки мы заинтересованы выпустить и платные (либо с платным контентом) приложения на базе созданного движка. Для этого сейчас мы ищем партнёров, желающих продавать свой контент (книги, журналы или любые схожие по формату публикации).

Алексей:
Идея была всегда. Первая читалка была реализована в приложении «Маруся», читала разбитый на файлы plain text и умела только переходить по оглавлению (это было задолго до появления ibooks). Постепенно эта читалка улучшалась, пока в один прекрасный день не было принято решение попробовать перейти на отображение epub. Попробовали, получилось.
Доход от данного приложения конечно возможен, так как многим нужен движок для чтения книг. Ридер — это всего лишь возможность обкатать движок и подготовить его к интеграции в другие приложения.
Именно поэтому ридер бесплатен. Это всего лишь испытательный полигон =)

Приложения других разработчиков изучали долго и кропотливо. Смотрели на те функции, которые были в каждом из них (stanza, amazon, booq, ibooks, kobo, freebooks, i2reader и другие), смотрели на интерфейсы и отзывы. В некотором роде exLibris — это компиляции всего наиболее полезного из других читалок =)

IMG_0228.jpg

На чем было сосредоточено основное внимание при создании exLibris?

Михаил:
Основное внимание, конечно же, сконцентрировано на удобстве пользования приложением, стабильности и максимальной поддержке формата. Сейчас, когда вышла уже вторая версия приложения, мы постоянно обрабатываем все приходящие нам отчёты о проблемах в приложении и отзывы пользователей. В новой версии появится возможность написать нам отзыв изнутри приложения и прислать книгу, которая, по мнению читателя, имеет проблемы при отображении в exLibris. Таким образом мы планируем совершенствовать продукт исходя из мнений пользователей. Ну и конечно в самых ближайших планах плотно заняться дизайном и юзабилити интерфейса.

IMG_0234.jpg

Алексей:
Было 3 больших проблемы — парсинг epub’a (основные сложности связаны с парсингом css), отображение текста на плоскости (здесь сложности связаны с разбивкой элементов на страницы) и память. Памяти приложению не хватало всегда, и это ужасно замедляло процесс разработки.

С парсингом epub’a все сложно — дело в том, что стандарта структуры epub файла как такового не существует. Есть то, как делает большинство, но, тем не менее, часто можно встретить книги, где стили css не вынесены в отдельный файл и вставлены в заголовок каждой xhtml страницы, или книги в которых в принципе нет файла оглавления, или книги в которых весь текст (очень большой!) засунут в один файл.
Поэтому тут пришлось идти на компромисс, устанавливая список случаев когда читалка просто не будет открывать книги. Ну и конечно были сложности с парсингом css — поддерживать весь стандарт css — это очень сложная задача, пришлось выбрать только небольшое подмножество стилей.

Отображение текста на плоскости также вызывало затруднения. Дело в том, что единственная библиотека для рисования текста CoreText, во-первых, достаточно глючная, а, во-вторых, не позволяет сделать много необходимых вещей (например, не позволяет делать отступ влево от правого края). Поэтому несмотря на то, что в итоге CoreText лег в основу приложения, впоследствии многие его функции были заменены своими, более стабильными и обладающими расширенной функциональностью.

Проблемы с нехваткой памяти начались наверно ещё до первого запуска (точнее первый запуск на устройстве не удался именно по причине нехватки памяти). Особенно ужасно дела обстоят на iPhone 3g. Невозможно держать в памяти разбитую на страницы книгу целиком (выбрасывается все кроме текущей главы), невозможно держать в памяти текст глав (а это значит, что сложнее осуществлять поиск). Экономить приходится буквально на всем. На текстурах, на текстовой информации, на вспомогательных контроллерах.
На данном этапе именно проблемы с памятью остаются самыми важными.

Каким образом был реализован 3d эффект для перелистывания страниц?

Алексей:
Технически, это действительно 3d эффект, реализованный с помощью openGL. Однако если присмотреться, то вы поймете, что 3d там нет =) На самом деле страница просто загибается так, …

Михаил:
Интересно, что большинство из тех, кто пытается реализовать подобный эффект в OpenGL начинают воплощать его в «полном 3D». Мы пошли другим путём и обошлись без него. Если с первого взгляда получившийся эффект кажется естественным, то мы добились поставленной задачи и не будем портить магию объяснением её технической реализации :)

IMG_0235.jpg

Имеются ли в дальнейшем планы в отношении рынка AppStore, уже есть идеи по его завоеванию? :)

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

Алексей:
Планов полно. Жаль что в сутках только 24 часа.

Спасибо Михаилу и Алексею за интересные и весьма содержательные ответы на наши вопросы. Пожелаем им удачи и новых идей!

Страница приложения exLibris для iPad и iPhone (free)
Домашняя страница проекта exLibris.