{"id":619,"date":"2015-10-30T13:38:42","date_gmt":"2015-10-30T12:38:42","guid":{"rendered":"http:\/\/blog.ansuz.nl\/?p=619"},"modified":"2015-10-30T13:38:42","modified_gmt":"2015-10-30T12:38:42","slug":"droidcon-uk-2015-day-1","status":"publish","type":"post","link":"http:\/\/blog.ansuz.nl\/index.php\/2015\/10\/30\/droidcon-uk-2015-day-1\/","title":{"rendered":"DroidCon UK 2015 day 1"},"content":{"rendered":"<p><strong>9.00 Keynote: The long road<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/sandromancuso\" target=\"_blank\">Sandro Mancuso<\/a><\/p>\n<p>Inspirational talk about how to find the job that will be the next step in your career.<br \/>\nYour personal career goals can be very different from a career within a company.<\/p>\n<p><strong>10.30 RxJava &#8211; Get Reactive<\/strong><br \/>\nSpeakers:  <a href=\"https:\/\/github.com\/passsy\" target=\"_blank\">Pascal Welsch<\/a> and <a href=\"https:\/\/github.com\/writtmeyer\" target=\"_blank\">Wolfram Rittmeyer<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\" target=\"_blank\">RxJava<\/a><br \/>\nBeware of <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/Backpressure\" target=\"_blank\">backpressure<\/a> (items emitted too fast) discussed on Wiki as well. Possible solutions:<\/p>\n<ul>\n<li>Throttle<\/li>\n<li>Buffer<\/li>\n<li>Request(n) upstream items<\/li>\n<\/ul>\n<p>Testing: Use TestSubscriber.<\/p>\n<p><a href=\"https:\/\/github.com\/ReactiveX\/RxAndroid\" target=\"_blank\">RxAndroid<\/a><br \/>\nRxJava bindings for Android.<\/p>\n<p><a href=\"https:\/\/github.com\/JakeWharton\/RxBinding\" target=\"_blank\">RxBinding<\/a><br \/>\nRxJava binding APIs for Android&#8217;s UI widgets.<\/p>\n<p>Type and make network request handling, i.e. type and search. Add the following:<\/p>\n<ul>\n<li><a href=\"http:\/\/reactivex.io\/documentation\/operators\/sample.html\" target=\"_blank\">.throttleLast(100, MS)<\/a> &#8211; Emit the most recent items emitted by an Observable within periodic time intervals.<\/li>\n<li><a href=\"http:\/\/reactivex.io\/documentation\/operators\/debounce.html\" target=\"_blank\">.debounce(200, MS)<\/a> &#8211; Only emit an item from the source Observable after a particular timespan has passed without the Observable emitting any other items.<\/li>\n<li>.onBackPressureLatest() &#8211; Is there are still too many, take latest input.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/trello\/RxLifecycle\" target=\"_blank\">RxLifecycle<\/a><br \/>\nLifecycle handling APIs for Android apps using RxJava.<\/p>\n<p>Other recommendations<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/sockeqwe\/mosby\" target=\"_blank\">Mosby<\/a> &#8211; A Model-View-Presenter library for modern Android apps.<\/li>\n<li><a href=\"https:\/\/github.com\/konmik\/nucleus\" target=\"_blank\">Nucleus<\/a> &#8211; Nucleus is a simple Android library, which utilizes the Model-View-Presenter pattern to properly connect background tasks with visual parts of an application.<\/li>\n<\/ul>\n<p><strong>11.30 Gradle (performance)<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/etiennestuder\" target=\"_blank\">Etienne Studer<\/a><\/p>\n<p>Gradle is more than just building. It can also be used for releasing, documentation, etc.<\/p>\n<div id=\"ig-sh-1\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">bash<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"bash\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">gradle build <span style=\"color: #660033\">--rerun-tasks<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p> Rerun tasks even if they are up to date.<\/p>\n<p>Performance improvements:<\/p>\n<ul>\n<li>Incremental build feature. Define inputs and outputs for custom tasks.<\/li>\n<li>Continuous build feature, faster compilation.<\/li>\n<\/ul>\n<div id=\"ig-sh-2\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">bash<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"bash\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">gradle <span style=\"color: #7a0874;font-weight: bold\">test<\/span> <span style=\"color: #660033\">-t<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>(Relies on inputs and outputs being defined.)<\/p>\n<p>MOOC: <a href=\"https:\/\/www.udacity.com\/course\/gradle-for-android-and-java--ud867\" target=\"_blank\">Gradle for Android and Java<\/a>.<\/p>\n<p><strong>12.30 Land\u2019s End: Creating the flagship mobile VR adventure<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/two2heads\" target=\"_blank\">Peter Pashley<\/a><\/p>\n<p>Getting started: Install Unity! and the Oculus SDK.<\/p>\n<p>Nausea<\/p>\n<ul>\n<li>Frame rate<\/li>\n<li>Texture<\/li>\n<li>Don&#8217;t highlight lack of positional tracking (Don&#8217;t put objects close to user so they won&#8217;t try to step \/ look around it.)<\/li>\n<li>Acceleration is bad!<\/li>\n<\/ul>\n<p>Input<\/p>\n<ul>\n<li>Gamepad (Reminds user of the world they are not in.)<\/li>\n<li>Gear VR<\/li>\n<li>&#8220;Gaze&#8221; (Look points)<\/li>\n<\/ul>\n<p>Things that didn&#8217;t work<\/p>\n<ul>\n<li>Moving things on rails or predefined paths. Limits the user&#8217;s freedom.<\/li>\n<li>Buttons. Too easy, too little player reward.<\/li>\n<li>Unconstrained exploration. Take a wrong route, takes a long time to get back.<\/li>\n<li>Path hinting. Focus becomes on following the path and not exploring.<\/li>\n<li>Levitating huge objects. Obstructs points of reference and makes players motion sick.<\/li>\n<\/ul>\n<p>Lookpoints<\/p>\n<ul>\n<li>Focussing, aim and hold.<\/li>\n<li>Motion, knowing where you&#8217;re going to stop moving.<\/li>\n<li>Placement, not too many near each other.<\/li>\n<\/ul>\n<p><strong>14.15 ClassyShark Attack<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/BorisFarber\">Boris Farber<\/a><\/p>\n<p>Fast decompiling\/debugging for Android APKs.<\/p>\n<p>Ctrl + s &#8211; Save Java file.<\/p>\n<p>Supports 5 binary formats<\/p>\n<ul>\n<li>Jar<\/li>\n<li>Dex<\/li>\n<li>APK<\/li>\n<li>Manifest<\/li>\n<li>Java class<\/li>\n<\/ul>\n<p>Project site: https:\/\/github.com\/googlesamples\/android-classyshark<\/p>\n<p><strong>15.15 $N tips for building better apps.<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/wkalic\">Wojtek Kalicinski<\/a><\/p>\n<p><em>Stop running your code<\/em><br \/>\nDon&#8217;t cram too much into Application.onCreate(). ContentProviders and BroadcastReceivers can cause the method to be invoked.<br \/>\nSolutions:<\/p>\n<ul>\n<li>Defer work, lazy load.<\/li>\n<li>Stop Services.<\/li>\n<li>Disable BroadcastReceivers.<\/li>\n<\/ul>\n<p><em>Permissions<\/em><\/p>\n<ul>\n<li>Use ContentProviders to share files and\/or get rid of permissions.\n<li>Use Intents to get rid of even more.<\/li>\n<li>Runtime permissions. <a href=\"http:\/\/developer.android.com\/guide\/topics\/manifest\/uses-permission-sdk-23-element.html\" target=\"_blank\">&lt;uses-permission-sdk23&gt;<\/a><\/li>\n<li>AccountPicker.newChooseAccountIntent()<\/li>\n<\/ul>\n<p><em>Low memory devices<\/em><br \/>\nActivityManager.isLowRamDevice(), available in M, use<\/p>\n<div id=\"ig-sh-3\" class=\"syntax_hilite\">\n\n\t\t<div class=\"toolbar\">\n\n\t\t<div class=\"view-different-container\">\n\t\t\t\t\t\t<a href=\"#\" class=\"view-different\">&lt; View <span>plain text<\/span> &gt;<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t<div class=\"language-name\">xml<\/div>\n\n\t\t\n\t\t<br clear=\"both\">\n\n\t<\/div>\n\t\n\t<div class=\"code\">\n\t\t<ol class=\"xml\" style=\"font-family:monospace\"><li style=\"font-weight: normal;vertical-align:top\"><div style=\"font: normal normal 1em\/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top\">android:extractNativeLibs=&quot;false&quot;<\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Native library cannot be compressed and need to be zipaligned (zipalign -p). Write a small bash script to repackage .so when APK is built.<\/p>\n<p><em>Accessibility<\/em><br \/>\nAccessibility is important, you get a bonus for it.<\/p>\n<ul>\n<li>Settings > Accessibility -> Talkback<\/li>\n<li>Add android:contentDescription tags. Set it to something meaningful. (For decorative elements, set to @null.)<\/li>\n<li>onTouchListener, don&#8217;t insert click logic, use View.performClick()<\/li>\n<\/ul>\n<p>Bonus: No extra work when integrating with the accessibility assistent.<\/p>\n<p><strong>16.15 Democamp Community Demos<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=done.lumi&#038;hl=en_GB\" target=\"_blank\">Lumi Social News<\/a> &#8211; Tinder for news.<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=it.sendto.android.client&#038;hl=en_GB\" target=\"_blank\">SendTo<\/a> &#8211; Send messages, text, links, etc to your own devices.<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.myntra.android&#038;hl=en_GB\" target=\"_blank\">Myntra<\/a> &#8211; Fashion \/ Shopping app. Preloading content for fast user experience.<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.balysv.loop&#038;hl=en_GB\" target=\"_blank\">Infinity Loop<\/a> &#8211; Game<\/li>\n<li><a href=\"https:\/\/github.com\/Pixplicity\/sharp\" target=\"_blank\">Sharp SVG lib<\/a><\/li>\n<li>Lunchbreak (Belgium only) &#8211; Order lunch online<\/li>\n<li>UI testing in your browser &#8211; ??<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=org.gdg.frisbee.android&#038;hl=en\" target=\"_blank\">Frisbee GDG<\/a> &#8211; All GDG content in one place.<\/li>\n<\/ul>\n<p><strong>17.15 Keynote: Managing Expectations: A Manager&#8217;s Guide for Managing to Manage Unmanageable Teams Manageably<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/chethaase\" target=\"_blank\">Chet Haase<\/a><\/p>\n<p>Hilarious talk about management.<\/p>\n<p><strong>Other<\/strong><\/p>\n<ul>\n<li><a href=\"http:\/\/landsofruin.com\/\" target=\"_blank\">Lands of Ruin<\/a> &#8211; Lands of Ruin is a tabletop game where tablets replace classic rulebooks, character cards, stat sheets, and pen-and-paper calculations.<\/li>\n<li><a href=\"http:\/\/www.landsendgame.com\/\" target=\"_blank\">Land\u2019s End<\/a> &#8211; Mobile VR game.<\/li>\n<li><a href=\"https:\/\/chrome.google.com\/webstore\/detail\/vysor-beta\/gidgenkbbabolejbgbpnhbimgjbffefm\" target=\"_blank\">Vysor<\/a> &#8211; Lets you view and control your Android on your computer. Easy peasy.<\/li>\n<\/ul>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>9.00 Keynote: The long road Speaker: Sandro Mancuso Inspirational talk about how to find the job that will be the next step in your career. Your personal career goals can be very different from a career within a company. 10.30 &hellip; <a href=\"http:\/\/blog.ansuz.nl\/index.php\/2015\/10\/30\/droidcon-uk-2015-day-1\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112,92,52,66],"tags":[114,113],"class_list":["post-619","post","type-post","status-publish","format-standard","hentry","category-android","category-games","category-java","category-unity3d","tag-droidcon","tag-droidconuk"],"_links":{"self":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/comments?post=619"}],"version-history":[{"count":7,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/619\/revisions"}],"predecessor-version":[{"id":626,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/619\/revisions\/626"}],"wp:attachment":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/media?parent=619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/categories?post=619"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/tags?post=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}