Pull to refresh

Comments 83

Bookmate понравился. Кто авторы? Кто делал дизайн? И как попасть туда?

Ваша история — выше всяких похвал, спасибо!
Спасибо.

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

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

кстати — один вопрос — как вы получали метрики по использованию памяти?
Стартап. Они, вроде бы, уже далеко не первый день существуют, но, поскольку их основной продукт – одноименный веб-сервис – еще не открылся полностью, букмейт можно считать стартапом.

В комплекте с Xcode есть программа Instruments, в ней есть инструмент Activity Monitor, который показывает кол-во памяти в колонке Real Mem.
меня нет на вконтакте (вообще нигде нет) :) можно ли как то более простым способом?
UFO just landed and posted this here
в русском AppStore не нашел bookmate, и на сайте регистрация закрыта
в браузере-то я увидел приложение, а вот с телефона в AppStore не вижу. itunes под рукой нет к сожалению.
Поиск в AppStore пока(!) не дает результата. К сожалению. Но, если зайти в категорию «Books», выбрать кнопку «Free App» то приложение будет одно из 25 первых.
Скачал так.

Спасибо, давно искал именно это. Скачал несколько книг, уже читаю. Все книги, что хотел прочитать, уже есть в базе. Появится возможность их покупать, буду покупать. До этого покупал на litres.ru, но с покупкой iPhone перестал, так как лень загонять их на телефон. А тут прямо все само собой решилось! ;)

Немного не хватает наличия разделов. Не всегда знаешь название, а интересует конкретное направление (фантастика, деловая литература и т.д.).
Тоесть вы пытались по сути в своём приложении распарсить другое приложение. Потому как сайты(html, css, js) не что иное как настоящии программы и мы их каждодневно скачиваем.

Изначально архитектура была не правильной, сайт должен был сделать api, той же мега библиотекой на javascript что у них у же была, отдавать книгу хотя бы в xml.

А как книги хранятся на сервере?
И как без api вы сделали регистрацию на клиенте? Парсите сайт?

Кстати objective-c тот что для iphone не поддерживает soap.
Andriod тоже, ну тут больше политика партии(гугл) у них есть свой GData и они больше rest ориентированы.

soap — на плаху, и забудьте о soap как о страшном сне — фикция и фуфел этот soap
Не вижу аргументов
Microsoft, Oracle, IBM и многие другие компании строят на нём свой бизнес ну или часть бизнеса:)
я активно использовал и использую soap — и аргументы то как раз вижу. начиная от мега fail в Microsoft WCF с SOAP'ом, где svcutils генерирует по wsdl'ке java сервера просто непонятно что, при чем не компилирующиейся вообще никак, заканчивая что Microsoft движется симимильными шагами в сторону REST, чего стоит OData, которая внедряется в последние продукты от них.

Oracle, IBM не особо показательны, ибо монстры и turnaround занимает дичайшее время.
Rest вы можете сделать и без soap например asp.net mvc отдавать json/xml да что хотите, в wcf4 сервисы могут быть как soap так и rest.
Приходите в браузер или делайте запрос по url и получаете json/xml/

Про какой fail вы говорите, microsoft генерирует корректный wsdl
Microsoft то генерирует корректный wsdl, который потом можно использовать с помощью генератора от того же Microsoft.

Все веселее становится, когда речь заходит о wsdl, не сгенерированный тулзами от Microsoft — который абсолютно валиден, но Microsoft поддерживает только определенный subset (как в случае WCF), или просто вы попадаете на баги svcutils (попробуйте скормить два wsdl с одинаковыми классами) — вот тогда и начинается свистопляска. wsdl.exe — тот еще багоделатель то же.
Нет-нет, я, наверное, неправильно выразился. На сайте есть API, через которые и работает программа. По сути, теми же API пользуется и он-лайн читалка. Регистрация происходит тоже через API. Парсить сайты – полное безумие, согласен. Я имел в виду парсинг самих книг, полученных с сервера через API. Сами книги – в HTML.

Re: «Кстати objective-c тот что для iphone не поддерживает soap». У эппла нет SOAP API, но кто мешает написать это самому? JSON у них тоже нет, но мы им активно пользуемся. Главное – у эппла есть полный набор сетевых библиотек, на все вкусы: NS* на Objective-C, CFNetwork на C, и даже BSD sockets, если нужно что-то совсем из ряда вон.
Написать то можно, но это же стандарт, которые apple так поддерживает — www.w3.org/TR/soap/ в настольной версии, тоесть если писать под MacOSX там такая библиотека из коробки на сколько знаю… Хочется из коробки.

В андроиде google могли бы перенести из java soap, но они поддерживают только java.net.HttpURLConnection что даёт нам только rest запросы. Как раз чтоб работать с Google сервисами
зачем вообще этот soap из коробки? чем rest не устраивает — передавайте данные как хотите, хоть в plain text — тем более, что soap сообщения просто монстрообразны и их парсинг все же не так легковесен на телефонах, как на больших машинах.
Так в том то и дело, что в отличие от rest парсить ничего не надо, если на другом конце есть поддержка соап.
Вообщем хватит флудить, топик не про rest vs soap
ууу, это если вы microsoft -> microsoft или weblogic -> weblogic используете. а как что не так — soap резко оказывается не совсем стандартным, во всяком случае, генераторы от microsoft закидывают лапки и просятся домой — а самому писать код, да еще в вермешели от microsoft это удовольствие гораздо меньшее, чем распарсить xml с rest сервиса, а если есть xsd — то тот же microsoft сильно не брыкается.

но вы правы — топик не о том.
WSDL2ObjC генерирует ObjectiveC проски по заданному WSDL. Сам использовал его для доступа к очень обширному API.
Только собирать его нужно из исходников. Бинарник, выложенный на сайте, устарел и содержит кучу ошибок.
Да, есть сторонии библиотеки, где то даже подборку видел, жаль что из коробки apple не хочет поддерживать.
Полезная статья. Особенно для тех, кто пойдет вашим путем.

Я так понял, с технологией у вас выбора не было?
Неужели все так сложно во всех читалках? Их же пруд пруди. Есть платные, бесплатные подо все мыслимые и немыслимые форматы. Почему именно такой путь вы выбрали? Это ж чтобы читать книгу надо быть подключенным к сети или сначала она закачивается на устройство?

Все-таки немного непонятна политика: книги на сайт загружаются в формате epub и fb2… А потом преобразуются в html, а потом разработчик изобретает велосипед, на котором давно «ездят» читалки этих очень распространенных форматов. Я правильно понял механизм? В чем преимущество для пользователя? Ваш формат удобнее, нежели fb2 и epub? Я не критикую, мне просто интересно.

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

Да, про XML еще подумайте тоже.
Присоединяюсь в вопросу об fb2. Есть открытый fbreader, который прекрасно работает даже на тяжёлых книжках с картинками. Изобретение велосипеда вообще не понятно.
Насколько я понимаю (поправьте меня, если я неправ), fbreader делает примерно то же самое, что и мы, за одним маленьким исключением: он не умеет разбивать текст на страницы, как в бумажных книгах. В этом-то вся загвоздка. Чтобы просто показать HTML в окне с прокруткой, не нужно ничего, даже Javascript. UIWebView с этой задачей справляется легко, хоть и не так быстро.
Про выбор формата Вам, наверное, лучше ответят в Bookmate. Насколько я понимаю, они достаточно серьезно препарируют исходники в том же fb2 при импорте/закачке книги. Насколько это необходимо, не берусь сказать.

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

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

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

Идея была в том, чтобы тестировать приложение на экстремальном материале. Иначе шум в бенчмарках очень большой. Кроме того, если мы смогли найти одну такую корявую книгу, она не последняя. А пользователю неизвестно что у нее там не так, поэтому программа должна «просто работать», независимо от того что ей подсунули в качестве рабочего материала.
ну так один монолитный кусок это хорошо) его можно сохранить и выбирать кусочки нужным размером в зависимости шрифта на странице, а книги из нескольких html склеить в один.
Насколько я понял проблема была только в рендере всего и сразу.
Получается bookmate конкурент imobilco? Или не планируете делать магазин электронных книг?
Это ваше первое приложение? Клиент вы делали в одиночку? Сколько времени ушло, какова компенсация, если не секрет?
«Это ваше первое приложение?»
4-е в App Store.

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

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

«какова компенсация, если не секрет?»
Извините, секрет.
Кстати, а почему нельзя делать расчёты глифов заранее и хранить на сервере? Как минимум для одних устройств набор шрифта одинаков.
Потому что считать их на лету на несколько порядков быстрее, чем сделать запрос на сервер. И, конечно, гибче, потому что при обновлении/добавлении шрифтов на сервере ничего делать не нужно.
К сожалению движок Аймобилки работает на столько медленно, на сколько описано в этой статье. Это очень неприемлемо.
Работает он приемлемо.
Нативный клиент конечно будет быстрее, зато теряется кроссплатформенность.
Зато у вас выделения текста нету :)

Мы, кстати, по этой причине и начали делать на веб-технологиях, а также потому, что в дальнейшем наши книги не будут ограничиваться только текстом, но и видео, аудио, интерактив, сложное форматирование. В вебките это есть «из коробки». А по производительности нам ещё есть куда расти.
С выделением все решается без проблем. С интерактивными штуками тоже не вижу особых проблем.
А вот сложное форматирование конечно да, вебкитом удобнее :) поэтому мы тоже рассматривали вариант использования вебкита изначально.
С выделением все решается без проблем.

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

С интерактивными штуками тоже не вижу особых проблем.

Так как ePub — по сути zip-архив с кучей xhtml файлов, мы можем без проблем вставить в книгу произвольный Javascript. Как вы хотите делать интерактив через ObjC?
Выделение и копирование текста будет, не переживайте :) По поводу отрисовывания текста в картинку, я, честно говоря, не понял. Видеокарта может показывать только двухмерные битмапы, поэтому любые шрифты в какой-то момент обязательно растеризуются. У нас они растеризуются так же, как и в UIWebView. Более того, для отрисовки глифов мы используем ту же функцию из Core Graphics, что и UIWebView. А нативное выделение текста или нет, не имеет принципиального значения. Хотя очень приятно, если оно вам досталось «for free».

По поводу интерактива: нет ничего, что можно сделать на JS и нельзя на ObjC. Серьезно. Если, опять-таки, поддержка аудио/видео вам досталась бесплатно из WebKit — это хорошо, меньше времени на разработку.
По поводу интерактива: нет ничего, что можно сделать на JS и нельзя на ObjC. Серьезно.

Я в этом ничуть не сомневаюсь. Но разница в том, что если нам понадобится добавить произвольный интерактив для произвольной книги, нужно будет всего лишь добавить JS-файл в epub. Что вы будете делать в этом случае? Вместо текста отдавать бинарник?
Спасибо за приложение!!!
На данный момент оно может стать моей дефолтной читалкой, если сделаете версию для левшей (тапзоны наоборот):-)).

А в остальное настолько все грамотно, быстро и без всего лишнего, что просто диву даешься.
Просто молодцы!!!
даже удивительно — у остальных читалок на iOS уходит где-то от 6-7 секунд (и больше) на то чтоб запуститься и открыть книгу, эта грузится за две.

но все же выравнивания по ширине и ночного режима не хватает.
точнее — не хватает кнопки ночного режима где-то сразу под рукой, а не в меню настройки шрифтов.
быстродействие действительно поражает. тот же shortbook теперь кажется неповоротливым монстром. и поиск кинг в приложении организован очень удобно.
спасибо, буду пользоваться вашим сервисом.
Чем libXML лучше NSXMLParser, и почему не использовали его?
Всем. Погуглите NSXMLParser и в основном вы будете находить советы выкинуть его и использовать LibXML.
Ничем не лучше, т.к. NSXMLParser сам использует libxml. Другое дело, что нам нужно парсить именно HTML, точнее, фрагменты HTML, которые не являются валидным XML в общем случае. NSXMLParser с ними не справляется.
UFO just landed and posted this here
Анализировать целый абзац имеет смысл только при выравнивании текста по обоим краям (justified), для выключки влево это ни к чему. Но его нужно делать только с переносами, а их я сделать просто не успел. Системе переносов нужно знать, на каком языке каждое слово (в идеале) и как минимум — на каком языке книга. Мы еще не решили как это лучше сделать, поэтому не стали спешить. По-моему, лучше это сделать позже, но сразу хорошо.
UFO just landed and posted this here
UFO just landed and posted this here
Построчные вычисления однозначно быстрее. Другой вопрос – насколько. Если время обработки абзаца меньше O(n), где n – число строк, можно попробовать сделать совсем круто, как у Кнута. Если нет, можно упереться в абзацы размером в десятки тысяч символов. Мне еще предстоит получше изучить мат. часть.
UFO just landed and posted this here
ммм, а почему бы данные о глифах напрямую у freetype не спросить? Наверняка CGFontGetGlyphsForUnichars так и поступает где-то глубоко внутри… В принципе, рисовать текст тоже можно вручную, закешировав глифы в битмапы на лету.
Так мы и делаем. Только глифы в битмапах не кэшируем, т.к. 1) на это нужно достаточно много памяти, 2) Core Graphics рисует глифы с невероятной скоростью и 3) поддержка iPhone 4 с его чудо-дисплеем достается нам автоматически, вообще ничего для этого делать не требуется.
Отличное приложение. Спасибо!
Эхх, вы реализовали то, что я хотел сделать еще где-то год-пол года назад. Но в тот момент меня отговорили некоторые личности в узких, скажем так, преподавательско-литературных кругах. Которые говорили, что сейчас это не пойдет, поскольку нет действительно удобного устройства для чтения (даже ридеры в счет не брались!). И я поверил… а жаль! :)
Все равно — удачи вам! Я бы добавил из своих идей еще платную подписку на журналы/газеты. Свяжитесь с издательствами (многие наши соотечественники хотели бы читать местную прессу, проживая далеко от родных краев), они пойдут вам на встречу.
Хм… Вы говорите об обычной читалке книжек? Еще год-полтара назад их были тучи в том же Apple store
Нет, я говорю о всем проекте в целом (Bookmate). Что человек может «накачать» себе нужных книжек в «кабинет» и с любого девайса, который ему удобен читать их. Bookmate — это один в один то, что я хотел сделать. :)
Никаких проблем, бро! ;)
Думаю вы спасли по крайней мере одну жизнь:)
Интересный дизайн приложения. Хочу такое на iPad.
А на странице инфо по книге не работает кнопка закачки.
Шрифтов на ифоне немного. Как вариант — можно сделать лукап-таблицу, в которой хранятся размеры и вычислять размеры на ее основе.

По идее должно быть быстро.

Вопрос, тем, кто скачивал — оптимизировано ли приложение по графике и иконке под 4-й ифон?
С iPhone 4 есть косметические проблемы, исправим в ближайшем обновлении.
Я решал такую задачу и обломался — тогда еще не было CoreText. 6 секунд — это фантастика, коллеги! Супер, поздравляю!
Благодарности разработчикам. Приложение уже совместимо с айпадом или планируете? Это же нереальная красота, как представлю
Версия для iPad в разработке, но я пока не могу сказать, будет это отдельная программа или универсальное приложение, работающее и на iPhone, и на iPad.
Очень ждем. Думаю, версию для iPad стоит продавать. Потому что это уже мега вещь. Куплю обязательно, ну или скачаю бесплатно (как решите), давайте скорее :) И коммерческих успехов вам
С айпада можно читать и онлайн.
Вот только перелистывание сделано неудобно — лучше бы сделать по две кнопки листания с кажлой стороны, чтобы можно было листать одной рукой.
А почему так медленно выходит iPAD-версия? Там же к разрешению мало что цепляется, по идее, должно заработать почти сразу…
ой, уже увидел ответ. Сорри.
Sign up to leave a comment.

Articles