• Грокаем RxJava, часть четвертая: Реактивный Android

    • Перевод
    В первой, второй и третьей частях я объяснил в общих чертах устройство RxJava. Вы можете подумать: «Прекрасно, но как всё это сделать полезным для меня, как для разработчика под Android?» В заключительной части статьи я приведу некоторую информацию, практичную именно для вас.

    RxAndroid


    RxAndroid — это расширение RxJava, написанное специально для Android, которое включает в себя специальные обвязки вокруг RxJava, делающие вашу жизнь проще.

    Во-первых, здесь есть класс AndroidSchedulers, предоставляющий готовые планировщики для потоков, специфичных для Android. Нужно запустить код на UI потоке? Без проблем — воспользуйтесь AndroidSchedulers.mainThread():

    retrofitService.getImage(url)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(bitmap -> myImageView.setImageBitmap(bitmap));
    
    Читать дальше →
  • Грокаем RxJava, часть третья: Реактивность с пользой

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

    Обработка ошибок


    До настоящего момента мы полностью игнорировали такие методы Observable, как onComplete() и onError(). Данные методы вызываются в момент, когда Observable прекращает порождать новые данные — либо потому, что ему нечего больше порождать, либо потому, что произошла ошибка.
    Самый первый наш Subscriber следил за onCompleted() и onError(). Давайте сделаем что-нибудь полезное в этих точках:

    Observable.just("Hello, world!")
        .map(s -> potentialException(s))
        .map(s -> anotherPotentialException(s))
        .subscribe(new Subscriber<String>() {
            @Override
            public void onNext(String s) { System.out.println(s); }
    
            @Override
            public void onCompleted() { System.out.println("Completed!"); }
    
            @Override
            public void onError(Throwable e) { System.out.println("Ouch!"); }
        });
    

    Читать дальше →
    • +15
    • 36,1k
    • 2
  • Грокаем RxJava, часть вторая: Операторы

    • Перевод
    В первой части мы с вами рассмотрели основные строительные блоки RxJava, а также познакомились с оператором map(). Я могу понять тех из вас, кто всё ещё не чувствует желания всё бросить и начать использовать этот фреймворк, так как пока что мы, условно выражаясь, рассмотрели лишь вершину айсберга. Но скоро всё переменится — большая часть всей мощи RxJava скрывается в её операторах, и я как раз подготовил для вас пример, по которому можно изучить некоторую их часть.
    Читать дальше →
    • +17
    • 61,6k
    • 8
  • Грокаем* RxJava, часть первая: основы

    • Перевод
    * от переводчика: я долго думал над тем, как перевести на русский язык глагол «to grok». С одной стороны, это слово переводится как «понять» или «осознать», а с другой стороны, при переводе романа Роберта Хайнлайна «Чужак в чужой стране» (в котором это слово впервые и появилось на свет), переводчики сделали из него русское «грокать». Роман я не читал, поэтому счёл, что есть у этого слова какие-то смысловые оттенки, которые русскими аналогами не передавались, а посему в своём переводе использовал ту же самую кальку с английского.

    RxJava — это, сейчас, одна из самых горячих тем для обсуждения у Android-программистов. Единственная проблема состоит в том, что понять самые её основы, если вы не сталкивались ни с чем подобным, может быть довольно затруднительно. Функциональное реактивное программирование довольно сложно понять, если вы пришли из императивного мира, но, как только вы разберётесь с ним, вы поймёте, насколько же это круто!
    Я постараюсь дать вам некое общее представление об RxJava. Задача этого цикла статей состоит не в том, чтобы объяснить всё вплоть до последней запятой (вряд ли я смог бы это сделать), но, скорее в том, чтобы заинтересовать вас RxJava, и тем, как она работает.
    Читать дальше →
  • Android. Пару слов об MVP + rxJava



    Работая с Android часто можно видеть, как весь функциональный код помещается в методы жизненного цикла activity/fragment. В общем-то такой подход имеет некоторое обоснование — «методы жизненного цикла» всего лишь хэндлеры, обрабатывающие этапы создания компонента системой и специально предназначенные для наполнения их кодом. Добавив сюда то, что каркас UI описывается через xml файлы, мы уже получаем базовое разделение логики и интерфейса. Однако из-за не совсем «изящной» структуры жизненного цикла, его зависимости от множества флагов запуска, и различной (хоть и похожей) структуры для разных компонентов, эффективно воспользоваться подобным разделением не всегда бывает возможно, что в итоге выливается в написании всего кода в onCreate().
    Читать дальше →
  • Реализация некоторых задач для самосборного NAS

    Привет, Хабр. Наконец-то я созрел для того, чтобы собрать своё собственное сетевое хранилище. Цели и задачи простые — скачивание торрентов, раздача контента по DLNA на IPTV-приставку MAG-245, iPad Mini первого поколения и смартфон на ОС Windows Phone. С учетом того, что необходимая база у меня уже была, а именно — материнская плата Intel D425KT форм-фактора mini-ITX с встроенным двухъядерным процессором Atom с пассивным охлаждением; 2 гигабайта ноутбучной оперативной памяти, и ноутбучный же HDD Seagate 750Gb. Докупил только корпус 3Cott M01, в комплекте с которым шел блок питания ноутбучного типа и адаптер для него.
    Читать дальше →
    • +10
    • 21,1k
    • 1
  • Домашний медиа-сервер на основе Ubuntu Server 12.04 LTS

    • Tutorial
    Привет, Хабр! В ходе обсуждения одной статьи про «идеальную» домашнюю сеть, возник спор, что лучше, аппаратный NAS или мини-компьютер с Linux дистрибутивом. Автор предлагал использовать аппаратный NAS, т. к. якобы он проще в администрировании, не требует знаний Linux, да и вообще NAS тихий. Но при этом, для просмотра на DLNA-телевизоре видео, который он не поддерживает, предлагал включать ноутбук с транскодирующим DLNA. Меня это, мягко говоря, удивило, т. к. в идеальной сети такого быть не должно. Поэтому хочу представить своё видение одного из ключевых компонентов домашней сети — централизованного хранилища данных, и основано оно будет на мини-ПК с ОС Ubuntu Server.
    Читать дальше →
  • Питание 9/12-вольтовых SOHO-маршрутизаторов от USB-источника

    Самодельный переходник-преобразователь для питания распространенных SOHO-маршрутизаторов, требующих напряжения 9/12 В, от любого 5-вольтового источника достаточной мощности с разъемом USB.



    Предыстория


    Несколько лет назад у меня завелась пара USB/WiFi-маршрутизаторов Sapido RB-1842. Один я таскал с собой в поездки, чтобы удобнее было раздавать отельный/квартирный/мобильный интернет, а второй поставил стационарно в сельском доме, где интернет доступен только мобильный. Довольно скоро выяснилось, что обоим нужно автономное питание: возимый с собой иногда приходилось ставить на балкон, чтобы ретранслировать WiFi из отельного холла или соседнего кафе, а в деревне регулярно отключают свет на 10-20-40 минут — ноутбуки и гаджеты работают, базовая станция тоже, а интернета нет.

    Порадовавшись, что модель пятивольтовая, я отрезал кабели от блоков питания маршрутизаторов, поставив в разрыв разъемы USB «мама/папа» и при нужде запитывал их от обычных повербанков. При этом один из купленных у китайцев безымянных повербанков оказался способен при наличии входного напряжения одновременно заряжать батарею и давать энергию на выходе, а при пропадании — переключаться на батарею. То есть, получился прекрасный пятивольтовый UPS, которого хватало где-то на час-полтора (в том повербанке два аккумулятора 18650) и за которым не требовалось никакого присмотра.
    Читать дальше →
  • Особенности работы Android TV box с multicast вещанием

    Однажды мне захотелось найти среди недорогих 2-х ядерных андроид ТВ приставок такую, которая просто будет работать с HD ТВ каналами, транслируемыми провайдерами в моём городе. Оказалось, что из 4-х купленных приставок с чипами RK3066, Allwinner А20, Amlogic 8726-MX только одна корректно и без зависаний видео воспроизводит HD каналы, получаемые в мультикаст режиме. При этом просмотр фильмов с разрешением 1080p с внутренней памяти или «флешки» происходил качественно на всех приставках. Итак, IPTV приставка CA9-DA (см. рис. 1).
    Читать дальше →
    • +2
    • 76,9k
    • 8
  • Raspberry Pi — что можно сделать на основе «малинки»?



      Мини-ПК Raspberry Pi смог быстро стать популярной платформой для разного рода проектов — как коммерческих, так и не очень. Тому есть несколько причин, среди которых — низкая цена компьютера, его относительная универсальность и открытость.

      Как результат — интересные проекты стали появляться с завидной регулярностью, и часть таких проектов представлены в этой подборке. Здесь есть и вполне серьезные системы, и проекты, которые можно назвать развлекательными, из серии «а почему бы и нет?».

      Читать дальше →