Pull to refresh
27
0
Константин Аношкин@costique

User

Send message
Про выбор формата Вам, наверное, лучше ответят в Bookmate. Насколько я понимаю, они достаточно серьезно препарируют исходники в том же fb2 при импорте/закачке книги. Насколько это необходимо, не берусь сказать.

Собственно, вся проблема с изобретением велосипеда связана исключительно с желанием показать книгу постранично, как будто она на бумаге. Та же Станза, например, делает то же самое, отличия только в реализации. Если бы мы решили ограничиться окном с прокруткой, велосипед не то чтобы не пришлось изобретать – он был бы не нужен вовсе. Загрузил HTML в UIWebView одной строчкой кода, и готово. Но Букмейт провел свое собственное исследование рынка, из которого следовало, что нужно непременно сделать возможность перелистывания страниц, как в бумажных книгах.

О расчетах на сервере мы действительно думали, но в итоге пришли к мнению, что это слишком сложно. Фишка в том, что кроме выбора шрифта и его размера у нас есть еще одна переменная: ориентация аппарата. Она тоже влияет на количество текста, умещающееся на странице. Таким образом, число вариантов сразу умножаем на 2. Кроме того, Эппл изредка обновляет шрифты в системе и у них меняется метрика. Следить за такими вещами, если честно, просто не хочется. Да, мы потратили некоторое время на реализацию движка, но он достаточно универсален, поэтому нам не придется что-то постоянно переделывать ради поддержки его работоспособности. Чтобы улучшить – другое дело.

Насчет XML надо спросить – я могу не быть в курсе всего комплекса причин, по которым это работает именно так, как сейчас.
Насколько я понимаю (поправьте меня, если я неправ), fbreader делает примерно то же самое, что и мы, за одним маленьким исключением: он не умеет разбивать текст на страницы, как в бумажных книгах. В этом-то вся загвоздка. Чтобы просто показать HTML в окне с прокруткой, не нужно ничего, даже Javascript. UIWebView с этой задачей справляется легко, хоть и не так быстро.
Версия для iPad в разработке, но я пока не могу сказать, будет это отдельная программа или универсальное приложение, работающее и на iPhone, и на iPad.
Построчные вычисления однозначно быстрее. Другой вопрос – насколько. Если время обработки абзаца меньше O(n), где n – число строк, можно попробовать сделать совсем круто, как у Кнута. Если нет, можно упереться в абзацы размером в десятки тысяч символов. Мне еще предстоит получше изучить мат. часть.
Потому что считать их на лету на несколько порядков быстрее, чем сделать запрос на сервер. И, конечно, гибче, потому что при обновлении/добавлении шрифтов на сервере ничего делать не нужно.
Выделение и копирование текста будет, не переживайте :) По поводу отрисовывания текста в картинку, я, честно говоря, не понял. Видеокарта может показывать только двухмерные битмапы, поэтому любые шрифты в какой-то момент обязательно растеризуются. У нас они растеризуются так же, как и в UIWebView. Более того, для отрисовки глифов мы используем ту же функцию из Core Graphics, что и UIWebView. А нативное выделение текста или нет, не имеет принципиального значения. Хотя очень приятно, если оно вам досталось «for free».

По поводу интерактива: нет ничего, что можно сделать на JS и нельзя на ObjC. Серьезно. Если, опять-таки, поддержка аудио/видео вам досталась бесплатно из WebKit — это хорошо, меньше времени на разработку.
Анализировать целый абзац имеет смысл только при выравнивании текста по обоим краям (justified), для выключки влево это ни к чему. Но его нужно делать только с переносами, а их я сделать просто не успел. Системе переносов нужно знать, на каком языке каждое слово (в идеале) и как минимум — на каком языке книга. Мы еще не решили как это лучше сделать, поэтому не стали спешить. По-моему, лучше это сделать позже, но сразу хорошо.
С iPhone 4 есть косметические проблемы, исправим в ближайшем обновлении.
Так мы и делаем. Только глифы в битмапах не кэшируем, т.к. 1) на это нужно достаточно много памяти, 2) Core Graphics рисует глифы с невероятной скоростью и 3) поддержка iPhone 4 с его чудо-дисплеем достается нам автоматически, вообще ничего для этого делать не требуется.
Ничем не лучше, т.к. NSXMLParser сам использует libxml. Другое дело, что нам нужно парсить именно HTML, точнее, фрагменты HTML, которые не являются валидным XML в общем случае. NSXMLParser с ними не справляется.
«Это ваше первое приложение?»
4-е в App Store.

«Клиент вы делали в одиночку?»
Программировал для айфона – да, в одиночку. Но еще были дизайнеры, копирайтеры, серверные программисты, бета-тестеры и просто хорошие люди, которые приложили свои руки к этой программе. Поэтому я считаю ее плодом коллективной работы.

«Сколько времени ушло»
4 месяца, плюс-минус выходные.

«какова компенсация, если не секрет?»
Извините, секрет.
Большинство книг действительно разбиты на части вменяемых размеров и там таких проблем нет. В силу неизвестных мне обстоятельств (скорее всего, оригинальный fb2 был корявый) «Модель для сборки» оказалась монолитным куском. Там даже оглавления-то нет.

Идея была в том, чтобы тестировать приложение на экстремальном материале. Иначе шум в бенчмарках очень большой. Кроме того, если мы смогли найти одну такую корявую книгу, она не последняя. А пользователю неизвестно что у нее там не так, поэтому программа должна «просто работать», независимо от того что ей подсунули в качестве рабочего материала.
Нет-нет, я, наверное, неправильно выразился. На сайте есть API, через которые и работает программа. По сути, теми же API пользуется и он-лайн читалка. Регистрация происходит тоже через API. Парсить сайты – полное безумие, согласен. Я имел в виду парсинг самих книг, полученных с сервера через API. Сами книги – в HTML.

Re: «Кстати objective-c тот что для iphone не поддерживает soap». У эппла нет SOAP API, но кто мешает написать это самому? JSON у них тоже нет, но мы им активно пользуемся. Главное – у эппла есть полный набор сетевых библиотек, на все вкусы: NS* на Objective-C, CFNetwork на C, и даже BSD sockets, если нужно что-то совсем из ряда вон.
Попробуйте itunes.apple.com/ru/app/id386177450?mt=8
Почему-то правильная ссылка, в виде itunes.com/apps/, пока не работает. Очевидно, у админов iTunes Store сегодня выходной.
Стартап. Они, вроде бы, уже далеко не первый день существуют, но, поскольку их основной продукт – одноименный веб-сервис – еще не открылся полностью, букмейт можно считать стартапом.

В комплекте с Xcode есть программа Instruments, в ней есть инструмент Activity Monitor, который показывает кол-во памяти в колонке Real Mem.
Спасибо.

Все копирайты принадлежат компании Bookmate (если Вы это имели в виду, спрашивая об авторах). Дизайн программы они разрабатывали сами.

«И как попасть туда?»
Вы имеете в виду в Bookmate? Просто зарегистрироваться либо на сайте, либо в приложении. Процедура очень простая, главное – чтобы ник не оказался занят.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity