понедельник, 19 июня 2017 г.

О реактивном программировании - RxJava в Android



Давно уже ничего не писал сюда. Но тут повод сам появился, скачал в сети книгу "Reactive android programming" и решил потихоньку постигать тему реактивной java и заодно описывать свой опыт. В детальнейшем если осилю написание постов, то притуплю к разработке бота для telegram и также процесс изучения планирую описать в блоге. Также по программированию для ARM контроллеров хотел написать посты (идей очень много, не всегда удается их реализовать)

Больше наверное в блоге пишу для себя. потому как по прошествии месяцев бывает довольно сложно вспомнить прочитанное. В голове оно откладывается в долговременную память, но доставать бывает из неё достаточно проблематично. И так, погнали...

Скажу сразу, я не с нуля штурмую эту тему, знакомство началось с одного из приложений, где решил воспользоваться архитектурным подходом MVP и в частности его реализации в библиотеке Moxy, Либа очень простая и удобная. Вам достаточно лишь подключить её в gradle зависимостях.
compile 'com.arello-mobile:moxy:1.4.5'
compile 'com.arello-mobile:moxy-android:1.4.5'
compile 'com.arello-mobile:moxy-app-compat:1.4.5'
Затем воспользоваться готовым шаблоном для AS, либо написать всё с нуля по примеру. Я попробовал и так и так. Остановился в итоге на шаблоне (видимо лень победила :D ). Отвлекся немного, ведь тема этого поста - реактивное программировани, - RxJava. В первый раз использовать её стал для отправки уведомлений из адаптера recycler view в UI. Этакий интерфейс между подписчиком - адаптером и эмиттером сообщений - моделью. Да, ведь не только одно применение было, ещё захотелось воспользоваться отличной библиотекой rx-mqtt-android для работы с mqtt сообщениями. Она мега удобная, представляет из себя Rx обертку над mqtt сервисом eclipse.

Перед переходом к изучению книги, немного расскажу как в проекте происходила работа с rx-mqtt. Прочитав многочисленные статьи, изучив ответы на stackoverflow решил создать класс ClientMQTT. Это простой singleton в котором присутствуют методы: getInstance() - позволяет получить объект класса MqttAndroidClient, close() - закрывает соединение, когда клиент уже не нужен, publish() - служит для публикации сообщений в брокер.
public static void publish(ArrayList command) throws MqttException {
    Observable.fromArray(command.toArray())
            .concatMap(i-> Observable.just(i).delay(500, TimeUnit.MILLISECONDS))
            .map(mqttMessageList-> onRequestFromPublishMessage((MqttMessage) mqttMessageList))
            .flatMap(Maybe::toObservable)
            .filter(response -> response.getResponse().toString().equals("PUBACK msgId 1"))
            .subscribe(t->System.out.println("Успешная отправка сообщения: " + t.getResponse().getMessageId()));}

private static Maybe onRequestFromPublishMessage(MqttMessage mqttMessage) throws MqttException {
    return RxMqtt.publish(new ClientMQTT().getInstance(),            "from_mobile", mqttMessage);}

Вот тут код немного корявый, я ещё до конца не разобрался почему задержка в 500 мс нормально не отрабатывает, думаю после прочтения книги всё встанет на свои места. На этом пока всё. Следующий пост расскажет о первой главе книги, конечно там будет описание hello world приложения. Возможно бегло пробегусь по тексту и напишу краткое резюме по прочитанному, ну там видно будет.







воскресенье, 31 мая 2015 г.

Знакомство с языком erlang

logo erlang

Предыстория: 

Недавно у меня возникло желание написать свой сервер мгновенных сообщений. Со своим блек-джеком и со всем остальным, как положено. Дальше решил узнать на чем нынче пишут высоконагруженные сервера. Поскольку в нашем велосообществе Братство Велосипедистов Уфы, мы для общения используем WhatsApp, начал копать какой бекэнд у них на серваках стоит.
Немного погуглив по словам stack behind WhatsApp натолкнулся на отличное описание бекэенда: ссылка

BACKEND

  1. OS: freeBSD
  2. Server : yaws
  3. Server application : custom ejabberd
  4. Language : erlang
  5. Technology : custom XMPP
  6. PHP somewhere in middle for non-stream server-user transactions.(at least website uses WordPress :) )
  7. Database : mnesia
  8. Encryption: RC4
Смотрим: ось - фряха, сервер - yaws (никогда о таком не слышал), сервера приложений - custom ejabberd(видимо что-то наподобие tomcat), технология - кастомный xmpp (знаю, что используется в jabber), php немного, бд - mnesia(позже зауглю), шифрование - RC4 (кажется проходили в универе). Всё новое и непонятное оставлю на будущее, а пока разберусь с языком erlang

Полезные ссылки чтобы понять с чем есть этот язык и его история: link_1link_2link_3

Теперь надо понять, как его готовить. План стандартный, как со всеми языками.

  1. Определить среду разработки (ide)
  2. Познакомиться с синтаксисом
  3. Получить знания по основам языка
  4. Изучить фреймворки и их применение
  5. Написать свой высоконагруженный сервер

  1. Определить среду разработки (ide)
Большинство статей и сам официальный сайт erlang предлагал для разработки использовать eclipse (с ним я уже знаком по разработке android, java ee). Так что проблем возникнуть не должно. У меня установлена версия eclipse luna (Version: Luna Service Release 2 (4.4.2)). На ней и решил готовить erlang. Приступил к установке модуля erlide, всё как по официальному мануалу.

Instructions

  • Install Erlang R15B or later, if it isn't already present on your system. On Windows systems, use a path with no spaces in it.
  • Install Eclipse 3.7 or later, if you didn't already.
  • If your network uses a proxy to connect to the internet, fill in the appropriate data inWindow → Preferences → General → Network connections .
  • Install Erlide by going to Help → Install new software... . In the dialog, enter http://download.erlide.org/update as URL. Follow the dialogs with the obvious choices and in the end you will be asked to restart.
Установил erlang (erl6.4 x64. У меня Windows 8, 64 bit) - http://www.erlang.org/download.html
Добавил в системную переменную path путь к установленному интерпретатору (d:\Install\erl6.4\)

Eclipse уже установлен, прокси не использую, поставил Erlide
Запустил ide, создал новый проект test, настроил run config. И уже радостный приготовился увидеть консольку. Но не тут-то было, компилироваться проект отказывался. Выдавая страшную мессагу: Expected the service to be RUNNING, but the service has FAILED.
Помучился минут 20 и решил установить старую версию Eclipse Kepler SR2. Также выполнил прошлые шаги, установил erlide. И о чудо, всё откомпилилось и консолька появилась!Догадался по тому, как на официальном сайте было написано: прекращается поддержка версии Eclipse 3.7.

Сейчас поставил на закачку видеокурс Юрия Жлоба по Erlang, Докачается, приступлю к изучению.

Написал статью, чтобы не забыть и в будущем не попасть впросак. Ну а если моя статья проиндексируется поисковиками и кому-то поможет сэкономить время и нервы - буду рад)




пятница, 6 января 2012 г.

Перенос контактов со старой nokia на Windows Phone 7.

Предыстория моя такова - недавно я стал счастливым обладателем телефона на платформе wp7. Поковырял на досуге стандартный функционал этой оси. Довольно всё удобно сделано. Много конечно чего не хватает, но надеюсь следующем обновлении добавят, допилят недостающие фитчи.
Решил контакты перегнать с моей nokia, служившей мне 2 года верой и правдой, но последнее время начала глючить и быстро съедать батарею, в общем решил отправить nokia 5220 на покой.
На этом шаге я застрял, через bluetooth не возможно передать контакты на wp, блютузку платформа использует только для связи с гарнитурой...погоревал немного - начал искать другой способ.


Народ пишет: можно перекинуть контакты  с симки. Считаю полным бредом укорачивать имена при переносе. Именно так поступает функция импорта контактов с сим карты.
WP умеет синхронизировать контакты, календари и почту через сторонние аккаунты, а также live id, сервис бесплатно предоставленный мелкомягкими - Windows Live ID.
Мне больше понравилась идея синхронизировать контакты с google аккаунтом. В интернете нашёл инструкцию как настроить синхронизацию на nokiа.


Обрадовался, все шло гладко, в gmail появились мои контакты, но не долго моя радость продолжалась. В результате все контакты в списке остались без номеров при синхронизации с WP. Плюнув на google перешел к способу с live id, в итоге снова косяк - нет номеров.
Попробовал еще способ синхронизации outlook с hotmail Синхронизация контактов Outlook и Windows Phone. Опять не все гладко.
Вечером я все таки решил эту проблему.
Решение:
  • Скачиваем утилиту Nokia Suite ссылка (ранее noka pc suite, ovi suite), для другого телефона своя прога. Ставим дрова - подключаем телефон. Как только тело опозналось - делаем бекап данных. 
         По умолчанию путь 
       - C:\Users\Имя  пользователя\Documents\Nokia Suite\Резервные копии (для семерки)
       - C:\Documents and Settings\Admin\Мои документы\Nokia Suite\Резервные копии (для XP)  Расширение файла - nbu.
  • Скачиваем замечательную утилиту, написанную нашим разработчиком - nbu parser ссылка. Она позволяет из бекапов вытаскивать различные данные. Выбираем вкладку "Контакты". Щелкаем-  "запись csv файл". Получаем справочник контактов в формате csv.
  • В моём случае было очень много дублирующихся контактов, я решил от них избавиться таким способом.
  1. Открываем csv в excel. Убиваем ненужные поля (столбцы).  
  2. Включаем автофильтр (Ctrl + Shift + L). Проводим сортировку по фамилиям.
  3. В крайнем столбце прописываем формулу  =A2 = A3 множим до конца списка. Проводим сортировку по "истина". Форматируем любым способом полученные ячейки, убираем автофильтр, проверяем - наводим в контактах порядок.
  • Просто так live id не примет наш список, он должен быть правильно сформирован. Я создал пробный контакт прям на странице hotmail и экспортировал книгу контактов в любимый csv. Получил файл - WLMContacts.csv (если кто-то будут использовать мой способ - выкладываю пример файла.) ссылка
  • Теперь нужно просто привести нашу книгу к формату, который понравится hotmail.
  • В аккаунте на странице профиля live.com нажимаем "контакты" - "управление" -"импортировать" - "Outlook" - выбираем наш файл со всеми контактами формата csv и нажимаем "импорт контактов"
  • Заставляем телефон немедленно синхронизироваться с Windows Live
Всё, наша книга в телефоне.
Надеюсь, что мой пост кому-то поможет.










вторник, 15 сентября 2009 г.

воскресенье, 21 декабря 2008 г.