
Які конференції в нашій країні запам'яталися вам найбільше? Якщо у перших пунктах вашого рейтингу не зустрічається словосполучення GDG DevFest, швидше за все, ви там просто не були. Молода команда зі Львова GDG Lviv змогла організувати грандіозну подію міжнародного рівня. Це захід був п’ятим за рахунком, і це відчувалося в кожному організаційному моменті.
Подія орієнтована на розробників, які використовують технології Google у повсякденній роботі. Зал розподілений на три основні потоки: Android, Web і Cloud. Також є воркшопи, на які потрібно приходити во всеозброєнні — з власним ноутбуком.
Ми з командою відвідуємо конференцію вже вдруге, і особисто для мене кожного разу це як поїздка до близьких родичів =) Хлопцям вдалося створити настільки теплу атмосферу, що кожен гік, пройшовши реєстрацію на ресепшені, потрапляє в експо-рай, повний квестів, конкурсів та цікавих персонажів для нетворкінгу. Невимушена атмосфера ще більше залучає до відбувається, найбільш гарячі доповіді тривають у лаунж-зоні у вигляді бурхливого обговорення або особистого спілкування з доповідачем.
Активності
Лаунж — це не просто місце, де можна перевести дух між доповідями, у цьому році організатори порадували нас можливістю протестувати AR Music Kit і пограти в раритетні ігри на Dendy. Відбувся також вже традиційний майстер-клас зі збору з картону Google Cardboard.
Не обійшлося також без трендової на сьогодні VR. Організатори привезли HTC Vive, і навіть у двох екземплярах! Проте, як і слід було очікувати, черга до цього пристрою вишикувалася миттєво =)
Це далеко не всі активності, які можна було зустріти в лаунжі, там був і масажний стенд, 3D-кисть, за допомогою якої можна малювати в VR. А ще один із спонсорів провів експеримент — вони зважували всіх бажаючих, таким чином намагаючись визначити середню вагу учасника конференції. В результаті проведеного експерименту була встановлена середня вага в 79 кг, а захід відвідало близько 15 тонн розробників.
Доповіді
Що стосується доповідей, то їх було близько тридцяти. Практично всі доповіді звучали англійською. Звісно, всі теми були трендовими та цікавими, але, чесно зізнатися, ми більше чекали другого дня, на який були заплановані такі доповіді, як “Firebase + Kotlin + RxJava + MVP: Practical Tips”, “J2ObjC. Cross platform development — Google way”, “Deal with it: Android DataBinding explained”.
DataBinding, MVVM, Firebase — ці теми для нас не нові, я б навіть сказав, що є чим поділитися, і ми це робимо у нашому блозі, але все ж ми не обходили їх стороною.
Перша доповідь, яку ми відвідали, була “Knock knock! Who’s there? Doze” Йонатана Левіна (Yonatan Levin). Йонатан — ізраїльський розробник мобільних додатків, GDE-експерт. Він вже запустив кілька стартапів. Наразі активно займається запуском Gett.
В Android Marshmallow компанія Google представила велику кількість нових функцій, одна з яких називається Doze — нова технологія, що дозволяє значно продовжити час роботи смартфона від батареї. Йонатан і розповів нам про неї. Технологія Doze реалізує це завдяки новому, більш економічному режиму сну. Це означає, що в той час, коли смартфон не використовується, він практично не споживає енергію акумулятора. Звичайно, це впливає на фоновий режим роботи додатків:
- Доступ додатку до мережі вимкнено, поки додаток не отримає high-priority GCM-push.
- Система ігнорує Wake lock’и. Додатки можуть скільки завгодно намагатися запитати пробудження процесора — вони його не отримають.
- Будильники, заплановані в AlarmManager, не будуть викликатися, крім тих, які будуть оновлені за допомогою setAndAllowWhileIdle().
- Система не проводить пошук мереж Wi-Fi.
- NetworkPolicyManagerService пропускає тільки додатки з білого списку.
- JobSchedulerService: всі поточні задачі скасовуються. Нові відкладаються до пробудження.
- SyncManager: всі поточні задачі синхронізації скасовуються, нові відкладаються до пробудження.
- PowerManagerService: викликатимуться тільки задачі додатків з білого списку.
Далі Йонатан розповів про App Standby, White List та застарілі дозволи. А особисто мене він наштовхнув на рішення нагальної проблеми, що додало ще більше азарту в відвідування наступних доповідей.
Далі Дмитро Данилик (Dmytro Danylyk) тримав у головному залі зацікавлену публіку з доповіддю “Kotlin + Android”. В цілому, доповідь була якісною, але, на жаль, очевидною. Діма ще раз розповів нам про синтаксичний цукор і переваги мови. У мене поки що спірне ставлення до цього. Альтернатива досить цікава, і плагін для студії є, і компілюється все по-людськи — як би можна пробувати. Пам’ятаю, були проблеми з конструкторами кастомних вьюшок, але все вирішувалося написанням окремих класів на Java. Але щодо продакшена поки не впевнений… Хотів поговорити про це з Дімою, але його забрала натовп фанатів =)
Довга дорога і безсонна ніч у поїзді нагадали про себе, і, незважаючи на літри випитої під час перерви кави, сила тяжіння давала про себе знати… Але! У нас ще була надія! Наступна доповідь “ExoPlayer: Media playback without pain (almost...)” і його автор Антон Мінашкін (Anton Minashkin).
Антон — давній знайомий, кілька разів приїжджав до нас у Хмельницький. Ми завжди раді його бачити. Усі його доповіді виконані в сатирично-гумористичному стилі. Розуміючи всю біль, яку переживають розробники, працюючи з деякими фреймворками та API, він вміє в деталях і з гумором передати це все аудиторії, а після надати рішення проблеми. Як доза адреналіну, він подіяв і на нас.
Цього разу Антон торкнувся актуальної й досі проблеми MediaPlayer. Думаю, кожен, хто з ним працював, стикався з проблемою отримання стану плеєра в конкретний момент часу. А скільки болю я відчув на одному з проєктів… зараз я вимовлю слово, і близькі мені за духом люди все зрозуміють: “Samsung” — А?! Бачите! Неймовірно, скільки асоціацій і емоцій у Android-розробника може викликати це буквосполучення =) Рішення, як виявилося, є, я його і раніше помічав краєм ока, але, як кажуть, було вже пізно, та й, можливо, не звернув належної уваги. А бібліотека однозначно варта уваги: ExoPlayer. Щоб не повторюватися, просто наведу список фіч, наданий у документації:
- Підтримка динамічного адаптивного стрімінгу через HTTP (DASH) та SmoothStreaming, які не підтримуються MediaPlayer. Багато інших форматів також підтримуються. Дивіться сторінку Підтримувані формати для деталей.
- Підтримка розширених функцій HLS, таких як правильна обробка тегів #EXT-X-DISCONTINUITY.
- Можливість безшовно зливати, конкатенувати та зациклювати медіа.
- Можливість налаштувати та розширити плеєр відповідно до вашого використання. ExoPlayer спроектовано саме з цією метою, і дозволяє багато компонентів замінювати на кастомні реалізації.
- Легке оновлення плеєра разом із вашим додатком. Оскільки ExoPlayer — це бібліотека, яку ви включаєте у свій apk додатка, ви маєте контроль над версією, яку використовуєте, і можете легко оновити до новішої версії в рамках регулярного оновлення додатка.
- Менше специфічних проблем з пристроями.
- Підтримка Widevine common encryption на Android 4.3 (API level 18) та вище.
Мене, відверто кажучи, вразив цей список. Плюс, враховуючи, що це бібліотека, можна забути про версії API, і Антон запевняє, що з підтримкою кастомних виробників справи йдуть набагато краще. Я вірю Антону і маю намір скористатися цим рішенням у наступному подібному проєкті.
Другий день почався з дуже-дуже смачної ранкової кави з пончиками, на яку ми не встигали, в результаті зайшли в зал практично першими. Як виявилося, пізніше це зіграло нам на руку, адже на цю доповідь вирішили прийти всі — в прямому сенсі цього слова. Зал був заповнений до відмови, через розкриті двері жалюгідними очима дивилися запізнілі… ще б! стільки класних слів у назві доповіді: “Firebase + Kotlin + RxJava + MVP: Practical Tips” від Давида Ваври (David Vávra).
Давид розповів нам про нові фішки Firebase. Продемонстрував додаток Settle Up, який допоможе компанії друзів розділити спільні витрати порівну, якщо вони заплуталися з платежами. Додаток використовує Firebase-сервіси, такі як Firebase Realtime Database, Firebase Dynamic Links, Firebase Storage, Firebase Authentication. Про це він також писав у своєму блозі на Medium, раджу прочитати для розуміння можливостей Firebase. Також Давид показав приклади коду з використанням хмарної бази та той же код в RxJava і Kotlin.
Наступним на порядку денному було знайомство з кросплатформою від самого Google. “J2ObjC. Кросплатформна розробка — шлях Google” Віталія Засадного (Vitaliy Zasadnyy).
Віталій одразу дав зрозуміти, що кросплатформа — це досить складно, і щоб отримати прибуток, потрібно все оцінювати і зважувати заздалегідь. Розповів про GetSocial SDK, над яким зараз працює. Далі дав короткий огляд головних рішень на ринку, а саме Xamarin, RoboVM, XmlVM, J2ObjC. До речі, Xamarin нещодавно придбав RoboVM, і тепер усім, хто використовує RoboVM на даний момент у своїх проектах, доведеться задовольнятися старою версією, і в найближчому майбутньому шукати альтернативу — привіт J2ObjC! =)
Ну і, як і очікувалося, головною темою доповіді був J2ObjC. По своїй суті це інтерпретатор Java-коду в Objective-C. Таким чином, ми можемо описати всю бізнес-логіку на Java і використовувати її на інших платформах, а UI доведеться реалізовувати для кожної платформи окремо. Є ще один момент: це працює тільки в один бік, тому для зміни коду в Objective-C потрібно змінювати Java-код і інтерпретувати заново. В результаті отримуємо повністю нативні додатки з реюзабельністю коду до 70%. J2ObjC підтримує Java 7, тож на останній синтаксичний цукор не варто особливо розраховувати. Плагіни є, продуктивність на рівні, в загальному тут потрібно пробувати.
Це далеко не всі доповіді, на яких ми побували — стільки інформації просто складно вмістити в рамки однієї статті — але все ж я намагався розповісти про найяскравіші з них. Конференція тривала два дні, в кінці першого для учасників була організована Silent Party. Це було щось незвичайне: всім роздали навушники, кожен мав можливість вибирати собі музику за смаком з трьох каналів, наданих діджеями. При цьому, якщо зняти навушники, можна було побачити, як натовп танцює в тиші =)
P.S. Велике спасибі CoreValue за чудовий подарунок! Ніколи ще нічого не вигравав на конференціях, дівчата — ви у мене перші =)