{"id":627,"date":"2015-10-30T19:09:48","date_gmt":"2015-10-30T18:09:48","guid":{"rendered":"http:\/\/blog.ansuz.nl\/?p=627"},"modified":"2015-10-30T19:09:48","modified_gmt":"2015-10-30T18:09:48","slug":"droidcon-uk-2015-day-2","status":"publish","type":"post","link":"http:\/\/blog.ansuz.nl\/index.php\/2015\/10\/30\/droidcon-uk-2015-day-2\/","title":{"rendered":"DroidCon UK 2015 day 2"},"content":{"rendered":"<p><strong>9.00 Keynote &#8211; Android for Java Developers<\/strong><br \/>\nSpeaker: Chet Haase<\/p>\n<p>Or &#8220;Avoiding the Tragedy of the Commons&#8221;.<\/p>\n<p>Ten articles on medium.com with tips for developing Android apps when coming from a Java backend background. First in the series: &#8220;<a href=\"https:\/\/medium.com\/google-developers\/developing-for-android-introduction-5345b451567c#.mwdty5rkw\" target=\"_blank\">Developing for Android: Introduction<\/a>&#8220;.<\/p>\n<p>Allocations, <a href=\"https:\/\/parleys.com\/tutorial\/part-1-android-performance-workshop\" target=\"_blank\">Android performance workshops<\/a>.<br \/>\n&#8220;&#8230; dive deep into graphics and UI performance topics.&#8221;<\/p>\n<p><a href=\"https:\/\/developer.android.com\/reference\/android\/support\/annotation\/IntDef.html\" target=\"_blank\">IntDef<\/a><br \/>\n&#8220;Denotes that the annotated element of integer type, represents a logical type and that its value should be one of the explicitly named constants.&#8221;<br \/>\nAlternative for enums.<\/p>\n<p><strong>10.00 Staying alive, online and offline<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/ErikHellman\" target=\"_blank\">Erik Hellman<\/a><\/p>\n<p>Tips about handling offline in your app.<br \/>\nSlides will be posted online later.<\/p>\n<p><strong>11.00 Beautiful Typography on Android<\/strong><br \/>\nSpeaker <a href=\"https:\/\/twitter.com\/lisawrayz?lang=en-gb\" target=\"_blank\">Lisa Wray<\/a><br \/>\nVideo: <a href=\"https:\/\/www.youtube.com\/watch?v=7GFRpP9a-eQ\" target=\"_blank\">YouTube<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/lisawray\/fontbinding\" target=\"_blank\">Fontbinding<\/a><br \/>\nA full example of custom fonts in XML using data binding and including font caching.<\/p>\n<p>Use spans, when using HTML text consider replacing default spans with your own.<\/p>\n<p>Audience suggestion: <a href=\"http:\/\/ahmadsoft.org\/ropes\/\" target=\"_blank\">Java Ropes<\/a>.<br \/>\n&#8220;A rope is a high performance replacement for Strings.&#8221;<\/p>\n<p><strong>12.00 Prototyping your Android app, the (U)X-factor<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/welsinga\" target=\"_blank\">Wiebe Elsinga<\/a><br \/>\nVideo: <a href=\"https:\/\/www.youtube.com\/watch?v=HcOG6xAIkL4\" target=\"_blank\">YouTube<\/a><\/p>\n<p>Prototype definition: Visualisation of an idea.<\/p>\n<p>Uses of prototypes<\/p>\n<ul>\n<li>Raise new questions OR answer existing ones.<\/li>\n<li>Explore alternatives.<\/li>\n<li>Fail early and cheaply.<\/li>\n<\/ul>\n<blockquote><p>&#8220;Fake it until you make it.&#8221;<\/p><\/blockquote>\n<p>Who will make the prototype? Create it with the whole team.<\/p>\n<p>Good prototypes are Quick, Cheap, Minimal and Testable.<\/p>\n<p>How to create a prototype?<br \/>\n<em>1. Plan<\/em><\/p>\n<ul>\n<li>Define user stories (1 or 2 sentences each).<\/li>\n<li>Identify tasks.<\/li>\n<li>Create user flow diagram.<\/li>\n<li>Sketch rough interface screens.<\/li>\n<\/ul>\n<p><em>2. Build<\/em><\/p>\n<ul>\n<li>Using UI stencils or\n<li>Showing paper or\n<li>Templates (Sketch, Adobe Illustrator, etc) or\n<li>In the cloud (<a href=\"https:\/\/marvelapp.com\/\" target=\"_blank\">Marvel app<\/a>) or\n<li>With motion<\/li>\n<\/ul>\n<p><em>3. Test<\/em><\/p>\n<ul>\n<li>Several prototypes<\/li>\n<li>Choose the right users<\/li>\n<\/ul>\n<p><em>4. Refine<\/em><\/p>\n<ul>\n<li>Discuss results<\/li>\n<li>Integrate findings<\/li>\n<\/ul>\n<p><em>5. Repeat.<\/em><\/p>\n<p><strong>13.45 Meaningful motion<\/strong><br \/>\nSpeakers: <a href=\"https:\/\/twitter.com\/crafty\" target=\"_blank\">Nick Butcher<\/a> and <a href=\"https:\/\/twitter.com\/keyboardsurfer\" target=\"_blank\">Benjamin Weiss<\/a><\/p>\n<p><em>View Property Animator<\/em><br \/>\nSimple animations, since API 16. Use ViewCompat for backward compatibility.<\/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\">java<\/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=\"java\" 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\">someView.<span style=\"color: #006633\">animate<\/span><span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span>.<span style=\"color: #006633\">alpha<\/span><span style=\"color: #009900\">&#040;<\/span>1f<span style=\"color: #009900\">&#041;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p><em>ObjectAnimator<\/em><br \/>\nAnimate all the things, since Honeycomb. Choreographed animations.<br \/>\nWhen no getter\/setter exist, use the Property class.<br \/>\nFor colors, set the evaluator to ArgbEvaluator.<\/p>\n<p><em>Interpolators<\/em><br \/>\nEasing in and out.<\/p>\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\">java<\/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=\"java\" 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\">AnimationUtils.<span style=\"color: #006633\">loadInterpolator<\/span><span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p><em>Circular reveal<\/em><\/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\">java<\/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=\"java\" 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\">Animator reveal <span style=\"color: #339933\">=<\/span> ViewAnimationsUtils.<span style=\"color: #006633\">createCircularReveal<\/span><span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span><span style=\"color: #339933\">;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p><em>Transitions<\/em><br \/>\nMove from scene A to scene B.<br \/>\nTransition and TransitionManager classes.<\/p>\n<ul>\n<li>ChangeBounds: Animate size and position of an object.<\/li>\n<li>Fade<\/li>\n<li>AutoTransition: Fade in, ChangeBound and Fade out.<\/li>\n<\/ul>\n<p><em>Window content transitions<\/em><br \/>\nEntering and exiting (Activities).<\/p>\n<ul>\n<li>Slide<\/li>\n<li>Explode<\/li>\n<\/ul>\n<p>Can be added programmatically or declared in XML.<\/p>\n<div id=\"ig-sh-4\" 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\">java<\/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=\"java\" 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\">Bundle bundle <span style=\"color: #339933\">=<\/span> ActivityOptionsCompat.<span style=\"color: #006633\">makeScenTransitionAnimation<\/span><span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span>.<span style=\"color: #006633\">toBumdle<\/span><span style=\"color: #009900\">&#040;<\/span><span style=\"color: #009900\">&#041;<\/span><span style=\"color: #339933\">;<\/span><\/div><\/li>\n<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\">ActivityCompat.<span style=\"color: #006633\">startActivity<\/span><span style=\"color: #009900\">&#040;<\/span>... <span style=\"color: #006633\">bundle<\/span><span style=\"color: #009900\">&#041;<\/span><span style=\"color: #339933\">;<\/span><\/div><\/li>\n<\/ol>\t<\/div>\n\n<\/div>\n\n<p>Use android:transitionGroup=&#8221;true&#8221; to treat the View as a single animation target.<\/p>\n<p><em>Shared element transitions<\/em><br \/>\nSince Lollipop, use AppCompat.<\/p>\n<p><em>Animated Vector Drawables<\/em><br \/>\n&#8220;This class uses ObjectAnimator and AnimatorSet to animate the properties of a VectorDrawable to create an animated drawable.&#8221;<br \/>\nhttps:\/\/developer.android.com\/reference\/android\/graphics\/drawable\/AnimatedVectorDrawable.html<\/p>\n<p><em>Sample Apps<\/em><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/\/google\/iosched\" target=\"_blank\">Google I\/O 2015<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/\/googlesamples\/android-topeka\" target=\"_blank\">Topeka<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/\/nickbutcher\/plaid\" target=\"_blank\">Plaid<\/a><\/li>\n<\/ul>\n<p><strong>14.45 Physics UI<\/strong><br \/>\nSpeakers: <a href=\"https:\/\/twitter.com\/fabrantes\" target=\"_blank\">Filipe Abrantes<\/a> and <a href=\"https:\/\/twitter.com\/will_bailey\" target=\"_blank\">Will Bailey<\/a><\/p>\n<p>Slides: https:\/\/github.com\/fabrantes\/physicsui<\/p>\n<p>Help making animations consistent.<\/p>\n<p><a href=\"http:\/\/facebook.github.io\/rebound\/\" target=\"_blank\">Rebound<\/a><br \/>\n&#8220;Rebound is a java library that models spring dynamics. Rebound spring models can be used to create animations that feel natural by introducing real world physics to your application.&#8221;<\/p>\n<p>An interesting paper from Microsoft &#8220;<a href=\"http:\/\/research.microsoft.com\/apps\/pubs\/default.aspx?id=191705\" target=\"_blank\">The Magic of UI Physics<\/a>&#8220;.<\/p>\n<p><strong>15.45 Microservices is our BFF: why SoundCloud stopped using its own public API for its mobile clients<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/starkcoffee\" target=\"_blank\">Duana Stanley<\/a><\/p>\n<p>Public API development is slowed down because it needs consensus. Some parts of a private API are not needed or wanted in the public API. A public API needs to be future-proof.<\/p>\n<p>To overcome the issue create a &#8220;presentation&#8221; API, which is another layer. Break API up in micro services.<\/p>\n<p>The result was BFF: Backend For Frontend. Provide a framework to make it like &#8220;scripting&#8221;.<\/p>\n<blockquote><p>&#8220;App+backend together build better APIs&#8221;<\/p><\/blockquote>\n<p><strong>16.45 Make Believe<\/strong><br \/>\nSpeaker: <a href=\"https:\/\/twitter.com\/lunarsong\" target=\"_blank\">Shanee Nishry<\/a><\/p>\n<p>VR Hardware<\/p>\n<ul>\n<li>Morpheus &#8211; Sony<\/li>\n<li>Oculus Rift &#8211; Facebook<\/li>\n<li>GearVR &#8211; Samsung<\/li>\n<li>Vive &#8211; Valve<\/li>\n<li>Etc&#8230;<\/li>\n<\/ul>\n<p>Cardboard devices as cheap alternative.<\/p>\n<p>Loads of interesting peripherals.<\/p>\n<p>Own section for <a href=\"https:\/\/www.google.com\/get\/cardboard\/\" target=\"_blank\">Cardboard<\/a> in the Google Playstore.<\/p>\n<p>How does VR work?<\/p>\n<ul>\n<li>Visual immersion<\/li>\n<li>Tracking<\/li>\n<li>Input (Interaction)<\/li>\n<\/ul>\n<p>Challenges in VR<\/p>\n<ul>\n<li>Latency and performance.<\/li>\n<li>Tracking.<\/li>\n<li>Comfort and design.<\/li>\n<\/ul>\n<p>Technical requirements<\/p>\n<ul>\n<li>High resolution.\n<li>Wide field of view.<\/li>\n<li>No motion blur.<\/li>\n<li>Low motion-to-photon latency.<\/li>\n<li>Stable high frame rate, 90, 120+.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.khronos.org\/vulkan\" target=\"_blank\">Vulkan<\/a>: Low overhead graphics and compute API.<\/p>\n<p>Beware of people&#8217;s real-life fears, think about vertigo, claustrophobia, etc.<\/p>\n<p><a href=\"https:\/\/www.google.com\/atap\/project-tango\/\" target=\"_blank\">Project Tango<\/a>: &#8220;Project Tango technology gives a mobile device the ability to navigate the physical world similar to how we do as humans.&#8221;<\/p>\n<ul>\n<li>Motion tracking<\/li>\n<li>Depth perception<\/li>\n<li>Area learning<\/li>\n<\/ul>\n<p><strong>Other<\/strong><br \/>\n<a href=\"http:\/\/fbinfer.com\/\" target=\"_blank\">Facebook Infer<\/a>: &#8220;A static analyzer for Java, C and Objective-C&#8221;.<\/p>\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 &#8211; Android for Java Developers Speaker: Chet Haase Or &#8220;Avoiding the Tragedy of the Commons&#8221;. Ten articles on medium.com with tips for developing Android apps when coming from a Java backend background. First in the series: &#8220;Developing for &hellip; <a href=\"http:\/\/blog.ansuz.nl\/index.php\/2015\/10\/30\/droidcon-uk-2015-day-2\/\">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,145],"tags":[],"class_list":["post-627","post","type-post","status-publish","format-standard","hentry","category-android","category-virtual-reality"],"_links":{"self":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/627","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=627"}],"version-history":[{"count":5,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/627\/revisions"}],"predecessor-version":[{"id":632,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/posts\/627\/revisions\/632"}],"wp:attachment":[{"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/media?parent=627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/categories?post=627"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.ansuz.nl\/index.php\/wp-json\/wp\/v2\/tags?post=627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}