Аннотация: Дневник разработки приложения, от задумки до реализации
Начнем, пожалуй.
Приложение - читалка для самиздата
Важно: 2016-07-06 приложение принято в апстор. добро пожаловать - пробуйте, пишите отзывы тут в коментах ) samlib : читалка
Мне как читателю который читает быстро, много и с с телефона - ужасно неудобно пользоваться самиздатом. Книги конечно экспортировать в fb2 можно но неудобно. А если произведение в процессе написания то просто беда.
Итого, цель - сделать удобное приложение для меня любимого )
Чтобы можно было читать в удобном формате книги авторов, чтоб можно было получить извещение прямо в телефон когда книга обновилась и когда кто из авторов любимых ( у меня их больше 5) что добавил.
Чтобы можно было автору любимому цветочек (как когда то в бк было) подарить.
Говорилка - не важна. Важно удобство чтения и чтоб сообщило когда прода )
ждать замучаешься
Итого, на пока задумана читалка - бесплатная прикладуха, которая должна позволить мне выбрать любимого автора, сделать список их любимых авторов, по авторам выбрать книги, для книги нажать извещения о изменении, и добавить возможность выбрать что то новое по топам да по алфавитам наверное. Код приложения пока планируется делать открытым, это важно чтобы администрация самиздата поддержала.
Ну и увидеть кто еще моим авторам цветочки подарил (или не кто а сколько) - короче такой немножко игровой вариант
То есть у нас есть необходимость узнавать дату обновления произведений из заданного списка, страниц авторов из заданного списка, и желательно возможность отобразить инфа о авторах в красивом виде, ну и конечно сама читалка - возможность скачать книгу прямо на дивайс, выбор шрифта/размера/цвет фона и листание страниц.
Вроде не много.
Как дополнительные фичи - синхронизация аккаунта с самиздатом и с соц сетями в параллель. Кто будет проверять обновление - сам дивайс или сервер? Или сервер самиздата сможет рассказать о себе - непонятно. Пока не похоже что такая информация доступна
Может можно добавить возможность узнать дату произведения?
Но пока что есть то есть.
Сюда будет добавляться рассказ о том как приложение пишется, какие проблемы и какие решения.
---
18 марта
: Устроил исследование на тему как делать листалку красивую для страниц, типа как в iBooks. выяснилось что сегодня такой сервис можно получить используя контроллер UIPageViewController - это приятно, не надо будет пользоваться левыми модулями или изобретать велосипед.
Еще интересно - нашел несколько красивых обзоров читалок, типа -
Теперь будет легче придумать формат "идеальной читалки" для Самлиб-а и составить список функционала и экранов.
Что касается настроек то пока склоняюсь к минималистичной схеме iBooks: http://osxdaily.com/2013/02/07/5-simple-tricks-for-a-better-reading-experience-with-ibooks-for-ios/
только "темы(разноцветные шкурки)" поначалу делать точно не буду - возни масса, а профит сомнителен.
Или нет?
25 марта
: Итак продолжим.
Сделал заготовку приложения (выложу в БитБакет скоро, как обещал) - на сейчас заготовка создает таблицу, задуманную как аналог списка аторов на первой странице. В таблицу добавил поиск - поигрался вдоволь с контролами Поиска для iOS. За пример взял код с
http://useyourloaf.com/blog/search-bar-table-view-storyboard/ ,
http://useyourloaf.com/blog/updating-to-the-ios-8-search-controller/ и
http://www.jhof.me/simple-uisearchcontroller-implementation/ .
Таблица на месте, навигация по буквам работает - пора наполнять смыслом ( то есть собственно списком авторов). Сперва наивно полагал использовать для получения содержимого страницы и парсинга связку - UIWebView с включением в код страницы JQuery и соответственно думал использовать простой современный JavaScript для доступа к содержимому. Наивность!
Код страницы написан при помощи старинной разметки, без классов и контейнеров, JQeury для работы с ним как двигатель внутреннего сгорания для взбивалки для омлета. не подходит ни разу. А жаль - на связку с жаваскриптом потратил массу времени (а приложение я делаю в свободное время все таки). Блидж настроил, jQuery подключил, все красиво но без толку.
Пойдем другим путем - выяснилось что содержимое странички можно очень удобно "выкусывать" из общего текста при помощи
- чтение и разборка первой страницы - собираем по алфавиту списки авторов (на первой странице не все, а только по какому то алгоритму часть), создаем для каждой буквы свой сегмент, в заголовок сегмента - кнопка для перехода на страницу буквы а в "футере" (подвале) сегмента - информация по количеству авторов в сегменте. работает вполне бодренько.
Понятно что от-парсив первую страницу было трудно остановиться и влет распарсил страницу авторов. Не, не так. реально решил саму страницу автора пока не трогать. завел "заголовок" который будет в странице со списком произведений автора содержать краткую информацию о авторе и пока отложил. заголовок есть но не трогаю пока - интереснее же до самих книг добраться.
Да, на самом деле парсинг оказался не таким простым. Причина в кодировке - сайт то написан в Виндоуз кодировке. Не, считалось то все прекрасно, и в строчки преобразовалось без проблем. А вот с разбором самих тэгов произошла заминка. Библиотека которую я использовал для разбивки странички по тэгам все отлично разбивала но вместо кирилика выдавала мощный "джибриш".
Убил на это целый вечер и очень даль времени. В результате попробовал вместо HTTP Parser - Hpple, и последний влет отпарсил все что надо. Итак драгоценные линки на произведения авторов у меня получаются. нагло вытащил их с страниц статистики - потому что разметка на самих страницах авторов настолько... ммм... короче хрен в ней ногу сломит. где подразделы, где произведения - по разметке (да честно скажу - и по внешнему виду то не пойму) - фиг разберешь.
Сперва думал разобраться а потом решил не париться.
В конце концов с страницы автора будет "открыть в браузере" (ну потом когда нибудь) и пусть там читатели разгребают в какой группе и какой подгруппе то или иное "произведение" имеют отношение. тут мы читать пришли а не.
Дальше самое интересное началось - не, конечно не самое но совершенно неотвратимое - надо книжку показать. ради чего мы собственно всем этим заморочились в первую очередь - чтоб читать было удобно и глазам и рукам.
Начал с того что начал разбираться к не к ночи упомянутым UIPageViewController.
Ну и красотень. без пол литра реально не подступиться. документация полностью не релевантна. интуитивно работать с ним тоже каша а не работа. Не да ладно. Короче разобрался - эта хрень позволяет закинуть в массив несколько клонтроллеров, есть функции "дай мне предыдущий/следущий контроллер" и тогда если эту контроллеры заданы то он магически их листает по заданному опять же методу - либо скролит либо как странички загибает либо еще как то.
Мне надо загиб страничек, тут понятно. непонятно как на странички собственно текст положить.
Вот пришла беда откуда не ждали - эта ж надо, чтобы тупо вывести кусочек текста на мой честный контроллер надо станцевать такую пляску с бубном! Реально я наивный парень думал кину строчку в контроллер, скажу показывай типа с буквы номер 14 - и он мне скажет честно - на экран влезло 1205 букв, остальные перенеси на следущий экран. Ну я правда думал так сделать. вроде все логично.
Сейчас! Уже.
Начнем с того что показывать я собираюсь вообще то HTML код книги - а самлиб нежно позволяет содержимое книг показывать в виде HTML. То есть сперва я его должен перевести в формат который мой тестовый контроллер покажет.
Пока я пошел по пути наименьшего сопротивления и использовал модуль // NSMutableAttributedString+HTML.h, Created by Christopher Guess on 2/2/16 - то есть созданный товарищем Кристофором совсем недавно, а реально выпиленный из проекта Пуш. Не знаю что делает этот проект но код парсит исправно, за что ему глубокий поклон.
Вызлядит это так:
в результате этого шаманства получаю вместо исходного текста книги на HTML удобную строку в виде NSMutableAttributedString которую прекрасно должен скушать UITextView контроллер.
Вообще после того как я познакомился с Text Kit от достопочтимой Эппл, я сразу понял что мне не хочется это трогать - даже думать об этом как то не хочется. Для фанатов можно полистать https://www.raywenderlich.com/50151/text-kit-tutorial и https://www.objc.io/issues/5-ios7/getting-to-know-textkit/ ну и конечно от создателей этого мега тула линк - тут - но поверьте это жесть. то есть начнем с того что буквы там называются не буквы а глифы, и делаются они их букв и дальше там черная магия дым и копоть. Короче слава всем богам что на сегодня уже существует UITextView и он умеет с этой магией как то работать. Как то - ключевое слово. вот если вам надо кусочек текста коротенький показать (или отредактировать) - то все понятно. а вот как блин эту чертову страницу вырезать из текста и показать только ее - тут все стопорится. которому что мы ж показываем не текст. А глифы. и где эти глифы закончат рисоваться - а бис ее знает. и сколько их влезло в зависимости от шрифта - вопросы к тому же бису.
Корче убил на это два вечера, но получилось.
Вот код который аккуратно собирает текст что получен выше по кусочкам в отдельные прямоугольные блоки, по размеру моего экрана, и впоследствии я создаю контроллеры для каждого такого блока и раздаю их через вышеупомянутый страничко-резатель.
коменты в коде я пишу на английском мне так удобнее.
короче берем и сперва весь текст запихиваем в "текстохранилище" - NSTextStorage.
потом создаем "тексто-контейнер" NSTextContainer и как раз последний задает размеры того "помещения" где данный текст будет показан. Контейнер добавляем в лайаут - реально управляющая структура которая занимается преобразованием текста из хранилища и распихиванием его по контейнерам. Естественно она не знает сколько нужно будет контейнеров. и естественно что потом мне придется этот код вешать в какой то обработчик, который будет вызываться каждый раз когда либо размер шрифта изменится либо читатель повернут свою читалку набок. но это потом. а пока я добавил контейнер в лайаут и сказал ему "елочка-гори". то есть попросил создать глифы на основании букв что в хранилище и заполнить глифами контейнер.
теперь у меня есть два счетчика - сколько всего в всем документе глифов и сколько глифов влезло в контейнер - ну а дальше слава богу несложно сделать столько контейнеров сколько надо.
Пока тут же поместил закрывалку для пустой книги. иначе эта листалка у меня пока не показывает кнопку возврата - и открывая пустую книгу назад не вернуться. неприятность.
Ну, после того как текст распихан по контейнерам все просто - делаем собственно листалку -
TextView - это в данном случае контроллер для показа страницы текста. Как не странно, работает, текст листается.
понятно что теперь надо все доработать напильником, сделать удобные заголовки для текста, добавить слайдер чтобы легче перепрыгивать по тексту и сделать пере-разбивку на страницы по извещению о повороте дивайса либо смене шрифта.
Но я уже могу читать книги с приложения!! по моему прогресс!
1 Apr 2016
Так, осталось столько работы что разбегаются глаза.
попробуем собрать мысли вместе.
Итак, есть несколько уровней на которых можно сконцентрироваться.
1. Презентация (то есть внешний вид) и навигация
- На страничке книги добавить ползунок для быстрого листания
- подписывать номер страницы внизу и автора/произведение вверху
- поправить размещение текста для книги
- разобраться с навигационной шапкой в книге. чтоб она всегда сперва была, потом по тапу - пряталась и по тапу снова появлялась а не как сейчас - как придется.
- черное пятно в листалке страниц замалевать белым (цветом фона)
- добавить в навигацию линк на автора и кнопку "поделиться" улыбкою своей
- добавить выбор книг по жанрам - все равно он есть, что пропадать то и по формату.
- сделать показ полного списка по букве алфавита, с поиском
2. Сделать регистрацию на сервере для дивайса
Вообще на сервере планируется на сейчас хранить:
- таблица юзеров (хотя и без обязательно регистрации, просто каждая инсталяция регистрируется.
там же храним айди вконтакте, фэйсбук айди или гугл айди если таковой будет предоставлен. зато если будет сделана переинсталяция, то юзеры указавшие свои криденшиалы смогут обратно получить свой список любимых книг ))
При добавлении книги или автора в закладки - делаем запись "закладка", в ней линк ан книгу, айди юзера и дата создания закладки. Еще наверное последняя дата скачивания книги.
Для каждой книги когда то добавленной в закладки создаем запись "книга" с линком на книгу, датой создания записи, и хэша по тексту книги. еще блин вопрос как хэш делать будем, с этой кодировкой, мать ее. ну лан. придумаем потом.
то есть , если я сегодня выбрал книгу, я ее понятно скачал на дивайс, и сказал на сервер - я такой то скачал такую то книгу, сегодня, ее код (ну хэш) - такой то.
Завтра сервер может проверить хэш для книги и при несовпадении мне сообщить - типа прода!
А когда я следущий раз зайду в свои фавориты и он их сравнит с тем что в сети - он мне покажет те книги из запомненных у которых что-то изменилось.
А если я хочу наблюдать за целым автором?
Пока думаю разделить список закладок по авторам отдельно и список закладок по произведениям.
Если б был прямой доступ в базу книг то конечно просто сравнил бы дату последнего обновления всех файлов автора, включая сам файл индекса. но за неимением - надо подумать. вариант - например делать для автора сразу типа все книги в фавориты, но ставить галочку что это типа фавориты автоматом, и не показывать их в списке книг фаворитов.. либо индексировать содержимое личной странички. но тут много шансов проморгать изменение какой то книги если размер ее не менялся. хотя не, это не будет работать - потому что каждый комент меняет страничку автора. то есть изменения будут постоянные но не настоящие. То есть пока версия с индексацией всех книг кажется самой релевантной.
на сервере кроме связки юзер-книга еще видимо нужно делать просто список книг - фаворитов. для того чтобы если пять человек любят одну и ту же книгу - сервер не скачивал ее пять раз.
то есть еще таблица мониторимых книг, ну и их код дата и линк на автора.
теперь внутри приложения - значит мне надо хранить список скачанных страничек (кроме самих страничек которые и так уже храню), дату когда скачано и код. ну флажок "обновлено".
При открытии книги проверять флаг обновлено - если таковой стоит то выкачивать книгу заново с сайта. Для не-фаворитных книг.. вообще подозреваю надо делать то же самое. если книга была скачана - то сохранять ее и дату этого скачивания, и при повторном открывании если новый день - то скачивать снова. надо ли? может раз в 7 дней? зачем качать то что и так у тебя лежит.. но проверить не обновилась ли книга не скачав и не добавив в фавориты - можно было бы если бы книга сама сказала свою дату. но она молчит :) Значит нет вариантов - если книга не добавлена в фаворитс то кэшируем ее на календарный день. новый день - значит выкачиваем книгу по новой.
предложения по улучшению принимаются ))
Ну я для фаворитных книг - при включении приложения первым делом делаем запрос на сервер и получаем полный список фаворитов с флажками "поменялось" и наверное отдельно список изменений. тогда читатель сразу сможет пойти на обновления, не заморачиваясь листанием авторов.
Еще надо будет зарегистрировать приложение в iOs чтобы им можно было открывать присланные линки на http://samlib.. (интересно, можно ли так) - может сделать формат линков типа samlib://samlib.ru/... интересная тема кстати. но это на потом.
Что то много получилось (
Да, еще шаринг потом надо прописать - то есть полюбившейся книгой будем делиться внутри соц сетей (и авторам профит - реклама линков на книги!) , линк для открытия в приложении и в браузере.
дааа... а ведь это только начало. ну сперва сделаем вышеперечисленное )
А там дальше будем посмотреть.
кстати как обещал - линк на публичную репозиторию с кодом тут - https://bitbucket.org/axelesha/sl1/
потом надо будет выковырять из нее всякие лишние детали..
но пока все доступно.
2 apr 2016
Сделал слайдер для листания страничек, и лэйбл с номером странички внизу. поправил размеры окошка с текстом, чтоб ничего никуда не наползало, поправил чтоб по тапу открывалась и закрывалась навигация, включая слайдер.
наверное потом надо будет слайдер и индикатор страницы перетащить в страницу листалки, но пока думаю сойдет и так. на этом честь презентации связанную с собственно чтением книги можно считать законченным в общем. ну потом надо будет еще на событие - поворот поставить обработчик с перестраничиванием. но это на потом. сейчас приоритет - регистрация устройства на сервере, и получение списка "обновленных" с сервера, то есть начинаем вторую часть марлезонского балета - серверную.
17 apr 2016
Во первых публичную репо пока спрятал - надо будет пере-экспортить проект. поднял его в репозиторию с рабочего аккаунта, по ошибке - а это очень не хорошо, зачем мне конфликт интересов. но тратить время на причесывание этого дела настроения нету.
начал работать с серверной стороной. Для начала прописал ей Сваггер (кто не знает - бегом бежать учить что такое сваггер!! ) - swagger. ( http://swagger.io ) В двух словах - сваггер - возможность описать API на удобном и понятном Json, в который включается полная документация как самого API так и структур данных в этом общении используемом. Ну а сверху идут плюшки типа возможности автоматически сгенерировать код и для сервера и для клиента на основе этого волшебного Json-a. понятно что этот "стаб" код в базу сам не полезет, но как минимум нет вопросов какие делать компоненты. За эти две недели понятное дело сам API переписал трижды, но пока вроде получается разумная схема.
- при открытии страницы автора я отправляю на сервер сообщение "открыт автор", и соответственно вношу автора в базу )
- при открытии книжки делаю то же самое для странички
- теперь можно и букмарки делать спокойно - есть айди и книжки и странички и жзера первым делом залогинил тихо, при открытии аппы.
до самих букмарков пока не дошел - завис на записи книги в базу. но регистрация юзера, регистрация автора - работают уже )
сервер на node.js пишется, удобно и привычно для меня последнее время. для работы с базой - knex (http://knexjs.org/).
конечно, я ожидал что будет быстрее все идти. ну, для того и этот "дневник" чтобы потом просмотреть и самому понять. Ну во первых с интерфейсом API оказалось много мороки. Сам сваггер штука конечно клевая, но если он сбоит в раутах - он сука молчит как рыбо об лед. запускаешь - работает но не открывает сервис. и иди ищи где по файлам может быть что-то не так.
Сейчас пользуюсь командой
для запуска сервиса - так он хоть рассказывает если что у него не так. Но, через "pm2" эту штуку не запустить, а pm2 - наше все для ноды. Если запустить
то одно удовольствие - при изменениях оно само проект перезапускает, все пишет в лог, если падает снова встает.. короче лапота - да не та. ну, та конечно, но когда API будет отлажен тогда и его можно будет использовать. а мне пока еще кучу вызовов оттестировать.
Кстати для ios сваггер тоже сгенерировал код, что правда очень удобно. он же и для виндов умеет и для андроида и для жавы и много еще для чего.
20 apr 2016
Итак наконец заработал код, который при открытии книги стучится на сервер и сообщает что собственно есть такая книга. Теперь можно будет наконец делать таблицу букмарков. Вообще - то их будет две - я думаю стоит разделить букмарк на автора и на отдельную книгу. Ну если быть совсем точным то таблицы я уже подготовил, интерфейсы прописал - только отсталось их повесить на кнопочку "букмарк" и собственно отладить. надеюсь до конца этой недели дойдут руки до этого.
А вчера настроения ковыряться с сервером не было и занялся запоминанием текущей страницы в книге и реакцией на переворот дивайса. Понятно что для этого пришлось "мок" код переформатировать, вытащить в отдельные функции, короче после небольшого рефакторинга заработало.
Текущее расположение запоминаю в кор-дата, думаю нефиг его на сервер таскать, оно обновляется через каждую страницу.. зачем мне этот траффик?
Короче, так вроде все славненько - номер текущей странички сохранил вместе с линком на книгу, сделал процедурку которая обратно этот номер читает при открытии странички.. Сча.
Вопрос в том что при повороте дивайса странички то все перестраничиваются. Ну а что делать - глипсы эти нежно любимые. То есть был ты на страничка 20 - повернул устройство - и должен оказаться на страничке 32 например. а у меня 20я запомнена ((
Беда. Короче думаю запоминать номер первого символа (глипса-шлипса) на страничке вместо номера странички, и уже по этому номеру искать а какая у нас страничка содержит эту радость.
Ну собственно не так сложно просто неожиданно. Но это не сегодня. А пока просто можно порадоваться что оно уже внятно крутится вместе с дивайсом, красиво рефрешится и теряет (сцуко) ползунок скрола - это отдельный баг, непонятно с какого хрена.
Такие вот дела на сегодня.
24 apr 2016
Выходные прошли - ну норм, эффективно.
1. Сделал нормально запоминание текущего положения по номеру первого символа в на странице, победил проблему с убеганием этого номера при повороте
2. поправил отрисовку ползунка - больше не пропадает
3. добавил экран для "фаворитс", сделал разделение между книгами и авторами, отладил API c сервером, теперь фавориты добавляются, отображаются, открываются.
4. сделал возможность добавлять бэджик на измененную ячейку, чтобы выделять обновления
чего не хватает:
страницы - полный список авторов по букву алфавита
страницы с сеттингами -
- настройки шрифтов и цвета
- синхронихация с социалками
- "акшена" - то есть возможность открыть книгу просто в браузере, поделиться в социалках.
надо настроить кэшинг книг - сейчас все безусловно кэшится раз и навсегда, вместо этого надо сохранять на конфигурироемое время, плюс сделать чтобы при обновлении книги из фаворитов кэш игнорировался
Еще интересно как разрулить обновление для автора - при том что запоминать все книги автора я не хочу если они не добавлены в фаворитс. но указать что изменилось таки хочется. как сделаю пока не придумал еще.
9 май 2016
С Днем Победы!
А теперь о прогрессе.
1. Сделал листалку по жанрам и типам произведений - и выкинул ее нафиг.
Посмотрел как на самой библиотеке организовано - для каждого жара грузится постранично список фамилий. Листать фамилии по страничкам - красиво конечно но не думаю что в это есть хоть какой то смысл. Не буду этого делать пока вообще.
Ну а полный список авторов по первой букве - сделал, с поиском.
пришлось заодно переделать весь поиск, сделал код гораздо более элегантным и удобным.
ну и не использующим устаревшие модули и методы.
2. Сделал страницу настроек, правда недоделал пока - на сейчас можно менять шрифты, размеры, яркость экрана. Не сделал пока что цвет экрана и все эти игры с цветом верхнего поля и тп. Ну руки дойдут - сделаю.
3. кэшинг книг настроил, можно всегда любую обновить, работает
4. обновление авторов - багнутое, но работает - правда странно как то пока. надо доделать - просто устал от клиент-серверных прыжков с шестом и хотел немножко просто поковырять чистый "фронт". наковырялся по самое немогу.
5. синхронизация с социалками - заработала - гугл+, фэйсбук, вконтакте
7. кнопка поделиться - тоже заработала
12 май 2016
перетащил сервак с моего рабочего компутера на реальный сервер. Использовал "pm2" - удобно получилось. теперь можно спокойно ставить программу на телефоны, и тестировать "по взрослому"
Потестировал.
найденые баги :
- при первой установке почему то не парсит нормально сколько каких авторов на какую букву, при перезапуске начинает работать. надо разобраться
- забыто сделать "экшен" для автора, кнопка пустая
- нельзя снять букмарки
- не запоминается на сервере установки шрифта
- надо сделать настраиваемым расстояние между строчками
- на сейчас настройка шрифтов идет в два этапа - сперва семейство шрифтов потом сам шрифт. как то криво.. не знаю, мож так и нормально?
- при увеличении размера шрифта глюк - несколько раз при листании показывало ту же самую страницу
16 май 2016
Немножко обновлений
- при первой установке почему то... (проблема с кнопками) - починено
- забыто сделать "экшен" для автора, кнопка пустая - починено
- нельзя снять букмарки - имплементировал, на сервере и на клинете
- не запоминается на сервере установки шрифта - решил что достаточно запоминать на дивайсе, не вижу причин тащить это на сервер
- надо сделать настраиваемым расстояние между строчками - не знаю, пока отложил
- на сейчас настройка шрифтов идет в два этапа - сперва семейство шрифтов потом сам шрифт. как то криво.. не знаю, мож так и нормально? - пока отложил, не вижу причин улучшать
- при увеличении размера шрифта глюк - несколько раз при листании показывало ту же самую страницу - не смог воспроизвести
- еще зачинил пару сотен разных багов, крэшей и проблем вызванных опечатками.
- походу поменял нижрюю панель в экране который показывает страницы книги, без этого не получалось пальцем скролить страницы. ну и так намного красивее. промучился с этими тулбарами кучу времени, пока понял как это работает. все равно магия, конечно - то показывает нижний бар от навигации с первой строки, то добавившись тулбар не убирается. странное создание.
- сделал короче текст "стандартные настройки" в сеттингах, а то как то ужасно выглядело на телефоне - а на симуляторе было отлично )
- сделал по краям отступ, теперь гораздо аккуратнее выглядит текст
Доделать -
- сделать чтобы посла присоединения к одной из социалок остальные снановились не активными - иначе поди разберись с комбинациями
- отделить "юзера" от "устройства", чтобы можно было "присодинить устройство" к уже существующему аккаунту
- ну и чтоб у одного юзера было несколько устройств (а потом еще и разные платформы)
- сделать иконку для постинга в апстор
- ну и запостить в апстор
2 июль 2016
Ну как оказалось конечно доделывать было еще что. Во первых отделил профили устройств от аккаунтов пользователей. Таким образом если вы синхронизировали свой профиль с любимой социальной сетью (я поддерживаю три) то если залогиниться с другого устройства - вы найдете все свои закладки и фаворитсы.
Дальше, собственно - профиль. Оказалось очень не сложно получить информацию о "авторской" страничке - и у меня получилось сделать профиль пользователя в Самлиб, что клево. В профиль добавил несколько полей типа "куда перечислять авторские" - вебмани яндекс и проч. надо будет потом придумать как сделать доступ читателям к этой информации. Суть - автор тоже сможет общаться с своими читателями через приложение.
Работы с профилями и аккаунтами оказалось очень много - занимался по сути весь июнь этим.
Ну вот вроде первая версия вполне юзабельна, собираюсь сделать скриншоты и поднять ее наконец в апстор сегодня. Пожелайте мне удачи )))
Можно сказать что первый круг - пройден, ребеночек выношен и собирается рождаться.
2 июль 2016
Ну что - приложение принято в апстор. добро пожаловать - пробуйте, пишите отзывы тут в коментах )
samlib : читалка
Приняли кстати не с первого раза - очень мне нравящееся название "samlib.ios" оказалось упоминает товарную марку iOS и собветственно ниииззя. У ладно - переименовал, что уж там )
Уже появились мысли не доделки -
- сделать экран "о приложении" с описанием функционала и кнопкой для обратной связи
- вынести с экрана сеттингов всю интеграцию в отдельный экран "профиль"
- надо думать на оптимизацию самого показа текста книги - какой то он неприлично тяжелый и особенно если книга большая то загрузка излишне долгая получилась.
- в добавок к лайкам сделать "подарки" авторам, добавить виртуальную валюту и возможность ее зарабатывать (ну что делать - я наверное слишком долгое время занимался програмированием игр?? ) - на самом деле думаю все будет просто и изящно - виртуальную валюту зарабатывать можно будет просто просматривая странички новых авторов и читая книги (ну мне кажется что это похвально - читать что то новое ) :) ну а тратить понятно на подарки
- думаю насчет нотификэйшен - вообще они нужны или как? с одной стороны приятно получить наверное нотификэйшен что у любимого автора есть обновления.. или книга изменилась.. надо подумать
- думаю надо линк на гостевую книг добавить в диалог
- надо поправить профиль автора (заголовок в тадлице книг автора) - сделать кнопочку - линк на отдельный экран "пупбличный профиль", егде сделать доступными расшимренную информацию о авторе и показать список подарков, собстна
- думаю, а не сделать мне отдельный какой то способ для общения читателей? либо 3rd парти какой то подключить липа "дискусса", может сделать реальное отображение гостевых - не просто линк на "открыть гостевую в браузере" а что то серьезнее? оно нам надо?
- вот думаю, может позволить прямо с гостевые писать с аппки? мож не стоит заморачиваться...
- сделать импорт "списка друзей" с самлиба в закладки, надо ли? может вместо для залогиненых читателей добавить отдельную закладку на "список друзей с самлиба"? и зачем два списка закладок?... вопросы ))
4 август 2016
перевел апликацию на правильный эппл аккаунт )
добавляю возможность быстро открыть коменты - но пока в отдельном браузере, писать парсилку для коментов мне чесно говоря ломак пока.
Народ, есть отзывы?
Еще, в будущем релизе (надеюсь на днях) уберу justify mode который ужасно раздвигает буквы (например при чтении книг от Демченко это раздражает ужасно. Ну и оказывается новая парсилка крэшится на длинных произведениях написанных в классическом маркап-е Самлиба с
- пришлось принудительно вставить
иначе он пытался каждую строку воспринять как вложенный тэг ну и загибался от нехватки памяти )))
Кстати, нас уже больше 200 человек установивших приложение.
Еще для справки - интеграция с социалками добавлена чтоб при переходе на другой дивайс можно было восстановить все свои закладки и любимые книжки и авторов - советую. Уверяю вас что спамить вам в ленту никакого у меня желания нету - это ж мне ж самому потом читать ))
6 август 2016
Выпестил версию 1,03 - точнее отправил на ревью. Надеюсь в апсторе появится на днях.
- Исправлены ошибки в внешнем виде при повороте экрана
- добавлен публичный профиль авторов (авторы приглашаются!!), немножко статистики по авторам/избранному
- поправлены баги в показе больших книг
- перекрасил иконку читалки чтобы выглядела так же как в Апсторе
- поправлены ошибки в показе обновившихся книг или авторов в у которых есть изменения - обращаю внимание что наблюдать изменения можно только у тех авторов которые занесены в Фавориты!!! Если автор не внесен в список любимых значит вам не важно что у него творится.
- еще обращаю внимание что если вы сделаете интеграцию вашей любимой социальной сетью ( в окошке настроек ), то вы с другого устройства можно чидеть все свои списки избранных книг и авторов.
Ну а иначе будет два независимых устройства с независимыми списками.
Еще хотел раскрыть тему "приглашаю авторов".
Во-первых я ваши логины не храню и пароли тем более.
Логин вы делаете через страницу СамЛиба, и все что я использую - это куписы которые ставит самлиб для авторизованных авторов. Если есть кукис - значит все клево, самлиб вам доверяет, значит и я могу.
Дальше. В добавок к сервису Самлиба я выделил несколько полей для "авторских" - ну просто чтобы удобнее было - потому что копировать номера кошельков или пэй пала на мобильном устройстве - вежливо говоря неудобно. А значит автор скорее всего не получит "бонус" доже если читатель и хотел бы его любимому автору прислать.
Ну а в приложении кроме того что эти все номера кошельков показаны удобно так еще можно одним нажатием сохранить номер в буфере обмена чтобы сразу на месте использовать.
Ну и в плане всякие "моральные" нештяки типа подарков, опять же сердечки - конечно мелочь но душу автору греет )))
Ну и советую использовать списки "избранное". Для того что избрано я мониторю изменения, Спасибо Максиму Мошкову за интерфейс. Всегда срезу видно у какого автора (из избранного) что-то есть новенькое.
Все книги в авторских списках отсортированы по дате - те что редактировались последними - выше в списке.
Да, совсем забыл - мелочь а приятно - я сделал кнопочку чтобы открывать (в браузере) гостевухи.
Если уважаемым читателям очень хочется чтобы гостевухи были "облагорожены" и тоже открывались в самом приложении или нужна возможность писать ответы из приложения- дайте знать. Сделаю только если будет реально надо.
27 август 2016
Множество ошибок исправлено:
- Поиск на первой странице
- "холостое" переворачивание страницы на первой странице
- исправлены размеры заголовков названий книг в списках, теперь названия показаны полностью а не обрезаны
- на странице книги в режиме без навигации написано название книги
Новые возможности для чтения:
- поиск по книгам и авторам в библиотеке (не только внутри алфавита по авторам как было раньше)
- нормальное отображение комментариев к книгам, возможность отвечать на комментарии будет добавлена скоро
- названия книг и имена авторов пишутся полностью в списках (где это возможно)
19 сентябрь 2016
Итак, шоу продолжается.
В последнем большом обновлении поправил работу с памятью и вообще пэйджинацию - оказалось что мой текущий алгоритм разбивки книги на страницы и запоминание каждой страницы в массиве неверен в корне. Во первых очень долго "пэйджинирует", во вторых страницы в памяти мертвым грузом и в третьих айфон в отличии от симулятора на больших книгах говорит - тютю, и приложение красиво вылетает.
Короче теперь храню только номер первого символа для каждой страницы а саму страницу (ну ее текст) при перелистывании вытаскиваю из текста книги (ну, его таки да храню в памяти) - хотя и его на самом деле можно из памяти выкидывать.
Короче, переделал - с третьего пинка заработало.
За одно сделал "список последних читаемых книг" - оказалось что иначе если просматривал книгу не из списка фаворитов то потом фиг ее найдешь. а каждый раз лезть в поиск как то некомильфо.
Еще поправил несколько странных крэшей в парсере html, которые подсказал айстор, хоть какая то польза от него.
Ну теперь короче дилема что делать дальше.
Варианты -
- Сделать "лок" - замочек для книг, то есть возможность выбранную книгу "заморозить" в том виде в котором она последний раз скачана. Это может быть важно так как многие авторы после окончания произведения после подписания договора книги убирают. Это понятно и правильно что убирают - договор с издательством, но в таком случае пользователи приложения типа получаются в проигрыше относительно пользователей веб странички которые могли просто не обновить страничку и перечитывать любимое сколько нравится. Ну по сути аналог "сохранить как" из браузера, только я не хочу предоставлять возможность эти замороженные копии передавать - ну для себя сохранил - на здоровье, а если автор убрал то передавать кому то неприлично.
- Тут просят сделать закладки в книги. На самом деле понятно что закладки нужны, вопрос только насколько важны и насколько это срочно.
- Возможность открывать линки из книг и гостевых - понятно что сейчас линки типа мертвые и это не удобно
- возможность смотреть картинки в книгах
- возможность отвечать на сообщения в гостевых
- рассылка информации про обновления через пуш нотификейшены - с этим много вопросов в основном "когда блин рассылать то"? а то если я любимого читателя (себя например) разбужу дзиньком в три часа ночи с важной информацией что у любимого автора - прода, то я сам свое приложение недрогнувшей рукой сотру нафиг. Как бы придумать нормальный способ сказать - да, пришли мне обновление, но вот в 12 часов дня по такому-то часовому поясу... хоть пример такого дела найти б. сами то пуши прикрутить не вопрос..
- еще есть мысль сделать типа "риал тайм" обновления, типа "юзер ... открыл книгу <<бла>>" или юзер открыл страницу автора "...". пока очень сомневаюсь что это имеет смысл. может сделать чат для фанатов автора? то есть с страницы профиля автора - страницу чата для интересующихся так сказать? Интересно оно надо...? но вообще это не такая плохая мысля.
короче такой вот "шорт лист" фич. ну и розочка - с ноября хочется заняться версией для андроида. то есть все основные фичи в приложение для аффона хотелось бы поставить до того - чтоб было что копировать ))
Очень хочется мыслей читателей. Что скажите?
23 сентябрь 2016
Решил начать с обработки линков в тексте. В любом случае, делать закладки можно только умея распознавать где кликнуто внутри текста и что конкретно кликнуто, а отладить это проще всего на "кошках" - ну то есть на линках.
Как мне кажется, получилось неплохо - теперь внешние открываются в сафари, а линки которые я "могу распознать" - а это линки на страницы авторов и на страницы книг - выдается меню с предложением открыть в сафари или в приложении. Заодно сделал чтобы работали линки из гостевых. Вот с гостевыми пришлось поморочиться.
Как не забавно, но предложенное разработчиком DTCoreText решение оно вроде работает - то есть в ячейках таблицы создается типа текстовый экран типа того что когда читаешь книгу, и в нем отрисовывается html со всеми делегатами - на нажатие линка и тп, но если начать такую таблицу скролить вверх вниз - я несколько вечеров убил пытаясь заставить ячейки отрисовываться как я их определил - фигушки. Ячейки таблицы выходят пустые, зараза. Короче вернулся в нынешнему решению - показывать html в виде аттрибутной строки. но для нее пришлось делать "поиск текущей буквы" самому ручками. Как не странно удалось, и теперь линки из гостевых отлично открываются.
На радости сделал картинку "юзера" - кнопкой, чтобы если отвечает зарегистрированный пользователь то аватарка работала как линк на страницу автора, соответственно.
Заодно поправил несколько багов. Правда боюсь что несколько новых посадил.
Причина простая - после обновления XCode все перестало строиться ( ну Apple в своем репертуаре) и пришлось сносить Pods (набор используемых библиотек). А после переустановки начало падать то что раньше работало.
Ну пол дня развлечений впустую (
се-ля-ви.
20 октября 2016
Наконец то доделал и Апстор принял следующую версию!
в этой версии:
- поправлена работа ползунка для быстрой навигации по книге
- добавлено автоматически генерируемое оглавление с быстрым переходом к главам
- добавлены метки, приватные и публичные. возможность быстрого перехода по меткам
- поправлен внешний вид
- в меню настроек возможно отменить показ чужих меток
звучит коротенько.
А реально я ж пользуюсь этой либой - DTCoreText а значит все не просто ))) Простые вещи как получить выбраный символ, или выяснить какое слово в тексте выбрано - требуют подвыподверта. Потому почти две недели выходные занимался этим самым - выковыривал данные из текста. Ну а потом прописать серверную часть для сохранения закладок и сделать для них более мение удобоворимый интерфейс.
Но вроде получилось неплохо, мне так пользоваться удобно. Буду теперь ждать отзывов.
По пути сделал парсилку для создания оглавления. Ну нету оглавления в Самиздате, что ты будешь делать.
На сейчас я выбираю следущие слова для создания оглавления -
Еще интересное, народ начал писать отзывы на приложение - некоторые просто оторв башки.
вот например товарищ с белорусии пишет:
Не оценил by Ven9l
Написано бесплатная подписка на 7 дней, а на деле сразу же хотят снять 5$
и зараза поставил единицу в рейтинг.
Ну какая подписка, где у человека голова?? приложение бесплатное и вообще нет подписок и платных сервисов, весь функционал без ограничений бесплатен!
Ну, я не берусь обещать что так будет всегда но на ныняшний момент то - по крайней мере пока не зализаны все детали, пока оно сырое - ну грех брать деньги за это.
Но писать такие отзывы - чума просто.
вот еще мега отзыв:
10из10 by Dhgjahmgbchcngbv
Мне все равно на функционал этого приложения , я просто хочу срубить 55 монет с AppCent за установку и отзыв
ну конечно спасибо человеку за десятку из 10, но я чес слово не рекламирую приложение ни на каком АппЦенте. Интересно, ему заплатят? :)
11 ноября 2016
Продолжаем рок-н-ролл ))
Сегодня наконец вроде бы готова (тьфу тьфу тьфу) очередная версия. И снова тонна изменений, пришлось себя тормозить чтоб выпустить то что есть а не ждать пока все задумки хватит сил и времени реализовать.
Итак, в этом релизе:
- Добавлена возможность менять внешний вид (размеры шрифтов, цвет фона и тп) прямо со странички книги. Скопировал поп-ап с ай-букс, надеюсь они не обидятся. Ну типа индустриальный стандарт, все такое.
А что, мы не хуже. Выбирая шрифт сразу видно как будет выглядеть книжка с выбранным шрифтом, размером и так далее.
- Немножко изменил внешний вид страницы книги, из за дополнительной кнопки имя автора перестало влезать и пришлось его заменить на кнопку. Это актуально особенно если книга открыта напрямую, например из списка любимых книг, минуя страницу автора.
- Добавил еще несколько топов, топы по количеству закладок на автора и на книгу. вообще вынес все топы в отдельный список, что то мне подсказывает что он будет дальше рости.
- Добавил индикацию изменения книги прямо в списке авторских книг (то есть на страничке автора можно видеть какие книги изменились с того времени как вы их открывали последний раз). Если не открывали то не будет показано )
- Ну и конечно панель обновлений - теперь если книжка из закладок или любимый автор (из закладок) что-то изменил на своей страничке - об этом можно узнать в списке обновлений. Потом обновление удалить, а то они вам будут надоедать маленько.
Думаю сделать потом обовещения про обновления (ну, пуш нотификейшены) но пока просто не успел.
- Еще самые глазастые смогут заметить что ежедневно при запуске приложения снизу вверх пробегает полоска с сообщением о "дневном бонусе" - бонус задуман для возможности потом покупать авторам подарки, но пока ни увидеть количество заработанных очков бонуса ни использовать их никак, это будет в следующих версиях. Хотя всю серверную часть для подарков я прописал, теперь дело за клиентской. Нк все сразу )
Жду отзывов и сообщений о проблемах, поверьте они реально помогают!!
3 декабря 2016
практически закончил приложение - в кои то веки! Остались доделки типа разрешить писать комментарии прямо из приложения, ну и всякие мелочи - но это будет идти уже постепенно под настроение.
Главная задача теперь - сделать то же самое для Андроида )))
Автор потирает потные ручонки - тут работы еще на год вперед! Ну а что, с начала Марта 2016 по сегодняшний день приложение можно сказать выросло из ниоткуда и стало вполне полноценной и удобной читалкой - теперь читаю книги Самиздата только там. Вот только коменты пока нельзя писать в ответ - но добавлю!
Такие дела, жду откликов!
8 декабря 2016
Сегодня был тяжелый день. Ну кроме всяких походов к дантисту с дочей, которые к приложению отношения не имеют. И вот, под конец дня решил я как положено почитать обновления, тем более что есть что - Федорченко что до добавил.. Короче, открываю я читалку - а она давай глючить. Ну не отмечает книгу как прочитанную, не показывает детали авторов, так серьезно глючить. Я туда сюда - ну глюки какие то, словно сервер стоит. Проверяю сервер - да нет, бегает, все в порядке. Короче нашел источник проблему - сертификат SSL сервера (моего, который нужен для работы читалки а не сервера Самиздата) - так вот этот сертификат просрочен.
Реально на самом деле я уже недели две как приготовил новый сертификат и перезапустил сайт с ним. но про приложение то я забыл! А оно не забыло ((
Короче извиняюсь перед всеми кому эта проблема помешала сегодня, сейчас все поправлено и работает.
Такие дела.
10 декабря 2016
И снова непростой день. снова все упало. Выяснилось что мой нежно любимый pm2 - система которая поддерживает серверные скрипты на nodejs решила ночью тихонько обновиться. И хотя по всем настройкам она должна была при этом снова запустить процессы - ку. Мало что что она должна. Не запустила. Ну ничего, мы не лыком шиты тоже - победили проклятых хулиганов, и сервер снова бегает радуя глаз.
Ну и я сделал новую версию и приготовил ну прям офигенные скриншоты, аж сам радуюсь.
В новой версии можно писать комментарии! Правда сам Самлиб строг - и если ваш комментарий не появился - значит либо много написали либо надо вставить имя-мэйл или еще что нибудь в этом роде. Если вы - зарегистрированный автор Самиздата и не поленились зайти и связать свой профиль на страничке настроек, то подставим страничку и имя для комментариев, как это делает сам Самиздат.
Одним словом - правда работает, ляпота!
20 января 2017
Под новый год вдруг приложение вырвалось в топ 20 книжных приложений, было круто!
правда толпа новых посетителей ничего не пишет в фидбэк, но я понимаю - новый год, праздники, не до того.
Ео вот праздники прошли. Чего у нас нового?
На самом деле много чего. Готовится новая версия для айфона с поддержкой пуш нотификейшенов наконец то. Знаю, торможу с этим - но быстрее не получается. Ну и главное - начал вести разработку приложения для Андроида! Уже победил первую страничку и страничку с списком книг автора - на днях добавлю скриншоты. надеюсь что на неделе удастся начать работать собственно над страницей чтения книги, если все будет норм то начну даже уже сегодня.
Ну и еще целый выходной впереди. В рабочие дни писать читалку совершенно нет возможности, реально к концу дня не хватает запала.
Но зато сам постоянно пользуюсь. Думаю надо несколько улучшить список обновлений - а то если один и тот же автор день за днем добавляет что то то строчки об обновлениях путаются. наверное как то надо обьединять что ли..
Ну вот такие новости.
Еще вчерашние катастрофы - конечно досадно но ничего не поделаешь. Домен сайта который хостит серверную часть приложения вчера был недоступен. Ну, мой промах конечно, не учел что сервер имен крутился на старом сервисе который как раз вчера отключил. Ну и как результат - несколько сайтов легло и приложение тоже не работало. Стоило конечно пару седых волос - но все запустил и сегодня все доступно и работает как надо. Очень извиняюсь за безобразия.
30 января 2017
Апстор принял новую версию, с улучшенным списком обновлений. В плане теперь переделать первую страницу - вместо списка фамилий авторов с главной страницы самиздата (учитывая что список то не полный, все равно многих авторов надо искать на страницах букв - ну, так устроен самиздат!) - так вот вместо этого списка планирую сделать таки список жанров и форм. а поиск авторов по фамилиям оставить для поиска и для страничек по первой букве. Страницы форм и жанров конечно тоже далеки от идеала - понять на основе чего сформирован список почти невозможно, но все же это должно облегчить новым читателям возможность найти книги по интересам. Как я смотрю, большая часть людей скачавших приложение собственно не знает что читать и не добавляет авторов в закладки, то есть люди не нашли своего читателя. Еще есть мысль сделать более явной кнопку добавления книги и автора в список фаворитов (я это то закладками называю то фаворитами) - я думаю что может оказаться что пользователи и не понимают что для облегчения поиска автора это просто необходимо сделать. Ну либо человек реально не нашел книги которая ему была бы интересно - а я думаю это почти невозможно, ну реально - на самиздате есть книги реально на Любой вкус!
Теперь два слова про Андроид.
К огромной радости моей, нашел более менее простой способ разрубить текст на странички и отобразить странички. Вчера буквально получилось! Осталось из базового функционала сделать листалку для этой радости и дальше останется чисто ассемблирование - сборка приложения, все основные компоненты которого уже отработаны и обкатаны. Думаю реально есть шанс что приложение будет в гугл плэй к марту.
Такие новости, пишите комментарии и предложения ))