• Грокаем 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
    • 37k
    • 2
  • Грокаем RxJava, часть вторая: Операторы

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

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

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



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

      Shopfans — компания по пересылке частных покупок из американских интернет-магазинов по всему миру. Идея сервиса проста: клиенты получают индивидуальный американский адрес — адрес склада Shopfans, — на который отправляют свои покупки. Shopfans же отвечает за все остальное — получение, хранение, бережную упаковку и доставку. Звучит несложно? С точки зрения клиента так и есть. Но за любой кажущейся простотой всегда стоит система. И чем легче кажется процесс со стороны — тем она лучше отлажена.



      Чтобы узнать, как работает Shopfans изнутри, я отправился туда, где творится магия: бесперебойная манипуляция тысячами посылок разного веса, объёма и содержания — на склад компании «Шопфанс» по знакомому её клиентам адресу 700 CARPENTERS XING FOLCROFT, PA 19032, U.S.A.
      Осторожно, много фоток!
    • Реализация некоторых задач для самосборного 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) и за которым не требовалось никакого присмотра.
      Читать дальше →
    • Сага о светодиодных лампах. Часть 2 — о том, чего не пишут на коробках

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


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