dev:mobile 2013

No Gravatar

Tillsammans med Göteborgs utvecklarcommunity  arrangerar Squeed för andra året mobilutvecklingskonferensen dev:mobile. Årets konferens bjuder på inte mindre än 12 presentationer samt keynoten “Panel reflection about the future of mobile platforms from a developers perspective”.

Flera kända företag kommer och håller presentation som bla Spotify, Microsoft, IBM, Opera mfl.

Och det bästa av allt med en konferens som arrangerar av användargrupperna i Göteborg är att det är helt kostnadsfritt att delta! Anmäla och mer information finns här.

Devoxx 2012 Antwerpen Belgien

No Gravatar

 

Det var ett tag sen man satt bakom skolbänken, vilket man tydligt känner av efter tre dagars totalt korvstoppande i vad som sägs vara europas andra största bioanläggning, kinepolis.
Årets upplaga bjöd inte på några riktigt stora namn, men det är inte enbart rock-star-status som styr om ett föredrag blir bra.

Onsdag

Keynote

Denna keynote var något av det segaste jag sett i världshistorien, då den till 80% handlade om hur duktiga devoxx-folket var, och hur bra deras konferrens gått senaste åren. Vidare handlade den om devoxx-klan-ledarens Stephan Janssens egna presentations-site parleys.com, vilket iofs är en fantastisk sida. Hans egotrip drog ut på tiden, och Oracles Nandini Ramani fick mindre tid, vilket sedan gav ripple-effects i schemat resten av dagen.
Stephen Chin kom sedan inrullande på motorcykel fram till podiet, och även här syntes inte ett spår av självinsikt.
Oracles presentation var bra, och handlade mestadels om JDK8 och vad som komma skall, inga direkta nyheter. JavaFX verkar ges fokus igen, trots dess minst sagt misslyckade framgång hittils. Nu kommer en 3D-funktion, för att enkelt kunna göra 3D-grafik likt Direct3D på native-klienter. Personligen tror jag inte detta kommer kännas intressant, då WebGL har kommit så långt, men vem vet.

Neall Ford från ThoughtWorks var väl kanske ett av de största namnen, och pratade lite om hur bra det är att vara generös med sin specialistkunskap, och låta den rinna ut i andra delar av organisationen och i sitt övriga liv. Hans stora idol Richard Feynman var på duken i stora delar av hans presentation, då Feynman löste många olika problem, trots att han egentligen var specialist inom ett givet område. Poäng efter poäng handlade om hur man kan flytta en lösning inom en domän in till en annan.
Även om det är omöjligt att jämföra sig med geniet Feynman, kan det vara en bra tankeställare.
Neal har släppt en bok som täcker detta ämne fullt ut som heter: Presentation Patterns (http://presentationpatterns.com/).

Lunch

Efter lunch halkade jag för sent in i en snabbföreläsning, quickie, om Arquillian. Mha Arquillian och ShrinkWrap, byggde han ihop en snyggt och prydligt unit-test där data-sourcen bestod av lite vad man ville. I hans fall var det bl.a. en simpel textfil som beskrev tabeller med data.
Klart smidigt då man vill mocka data, vilket man ju gör typ hela tiden i sina integrationstester.

Nästa quickie var om JMS 2.0 av Nick Wright från c2b2 consulting. Han beskrev i korthet alla smaskiga nyheter i JMS 2.0. Han tyckte det var dags att fräscha upp saker, JMS 1.1  har levt i ca 10 år nu. Bland annat bygger jms nu ut de delar som massor av andra ramverk byggt ovanpå jms, eller parallellt med. Exempelvis finns nu stöd för Java 7 Autoclosable och ett betydligt kompaktare och snyggare API, som absolut ger JMS en konkurrensfördel mot andra aktörer. Vidare finns batch-delivery, delivery-delay och async-delivery. P2P och Pub-Sub måste implementeras av API:et iom 2.0. På det stora hela ser det riktigt modernt och bra ut, blir kul att testa.

Java 8

Oracles Joseph Darcy hade sedan sin presentation om Java 8.
Här fick alla reda på att det var dags att skynda på, då slutdatum för Java 1.6 är bara 4 månader bort. Lustigt nog tycker jag att Java 7 fortfarande är rätt buggig, och G1 har ju precis blivit klar. Jag tror 1.6 kommer få leva lite till, men det är bara min teori.
Joseph försvarade och förklarade hur Oracle tänker när de gör olika typer av teknikval och vilka olika nivåer av kompatiblitet som måste efterlevas.
De har i praktiken tre dimensioner; source-, behavioral- och binary-compatibility.
Intressant nog har de nästan aldrig brutit alla tre dimensionerna tidigare, men det blir det ändring på iom Java 8.
Java 8 kommer bygga in default-methods på interfaces för att möjliggöra interface evolution, dvs vi kommer få traits in i java till sist, inga nyheter här.
Det mest spännande han tog upp var hur de valt att implementera lambda uttryck.
Istället för att utnyttja statisk kompilering, dvs använda antingen syntaktiskt socker och köra med anonyma klasser undertill, eller utnyttja MethodHandles, valde Oracle att göra detta helt i run-time.
Detta görs via den i Java 7 introducerade invoke dynamic (indy), vilket visar sig passa aldeles utmärkt in i deras val att göra tillräckligt stora ingrepp för att lösa problemet, utan att skapa en situation de inte kan komma ur i framtiden.
Det fiffiga med att använda indy är att hur lambdas faktiskt plockas fram, det blir en implementationsdetajl som Oracle kan ändra i framtiden om de har lust, mycket smart.
I Java 8 kommer ditt anrop till en lambda sättas upp första anropet, för att i följande anrop anropas i praktiken med samma prestanda som vilken vanlig metod som helst (han visade lite lovande grafer på detta).

Vertx.io

Nästa presentation var av Tim Fox och handlade om vertx.io.
Detta hade jag redan lite kunskap om tidigare, och det var kul att höra lite mer om detta lovande ramverk. Passade även på att ställa lite väl valda frågor till Tim efteråt.
Vertx.io löser ett ganska vanligt problem som dagens Web 2.0 appar måste lösa, nämligen en smidig kommunikation mellan server tillbaka till klienten, dvs comet, ajax-push osv vad alla namn kan tänkas vara.
Serverkod körs i en enkeltrådad event-loop, likt node.js, all kommunikation görs via en eventbus (hazelcast). Det fiffiga är att även klienter kan anropas på samma eventbus, gömt för app-utvecklaren.
Klienten har tillgång till att inkludera vertx.js-javascriptet, och kan därefter lyssna och ta emot json-data via denna event-bus. Klienten kommer utnyttja websockets om browsern stödjer det, eller använda i nedstigande ordning; SockJS, long-polling, timed-polling.
Jag tror vi kommer se mer av detta ramverk, han är trots allt backad av VMWare.

Mäss-mingel

Efter detta var det mingeldags. JetBrains och Spring fick mestadels av min tid. Jag är numera kändis på JetBrains hemsida, då deras kameraman sprang runt och ville fånga alla olika nationaliteters beröm. Det kommer komma en film där de klipper ihop olika språk som berättar hur fantastisk deras IDEA är.

Spring Cloud Foundry blir en ny konkurrent inom PaaS. Deras setup är mycket lik Amazon EC2, där de i princip har ett appmoln med tomcats, riak, mongodb, mysql, postgre etc.
De har en fin plugin till eclipse och IDEA 12 har en plugin klar i pipan.
En fiffig feature är att om man har en spring-applikation, kan CloudFoundry autokonfigurera och injecta bönor med dataSources rakt in i din app, autoconfig kallade de detta, verkar ganska smidigt.

Torsdag

Keynote

Keynote-dags igen, Googles tur att skryta lite och Tim Brady stod för vocals.
Google har gjort en rad förbättringar och förenklingar i GAE/J som verkade lovande.
Maven och jenkins-integration och möjligheta att auto-deploya ett bygge till GAE/J smidigt direkt efter success i jenkins. Bra för continous deployment.
GAE/J har nu traffic-splitting så att man smidigt kan lyfta över lite trafik åt gången till sin nya version, lite live-testning a’la FaceBook, smidigt.

Tim var näst intill aggressiv i sitt framförande om hur viktigt säkerhet är på nätet, och hur viktigt det är att vi utvecklare tar ansvar för våra kunders data.
Han praktiskt taget skrek ut: ‘ANVÄND HTTPS’, varefter han promotade 2-step-verifcation, och att alla borde använda det. Han promotade sedan OAuth2, och tyckte att hela världen helst skulle logga in via deras SSO-lösning, och inte någon annan. Man skulle absolut inte skriva en egen login, då det var svårt och skulle bli hackat for sure.
Hur läskigt ett internet där alla loggar in via OAuth2 än må vara, verkar det vara en bra och säker lösning, speciellt tillsammans med deras nya Account Chooser, som enkelt gör val av olika OAuth2-leverantörer enkelt.
Efter detta var det en kort intro till Dart. Dart löser samma problem som JetBrains Kotlin och RedHat Ceylon enligt mig, speciellt eftersom det ännu inte ens kör i Chrome, utan endast i en special chrome-variant kallad Dartium. Alla tre språken är snygga, bra, genomtänkta och har lambdas etc, ser ingen klar vinnare här ännu.

Blandad kvalitet

Halkade sedan snett in i vad jag trodde skulle vara en intressant presentation om G1.
Det visade sig vara en Jaromir Hamala, som borde gå en ordentlig engelska-lektion (något år eller två). Tyvärr kunde man inte se denna föreläsning, och det fick istället bli lite BigData och Hadoop.
Costin Leau presenterade en rad olika snygga wrappers för att få in Hadoop-algoritmer i ditt Spring-projekt.
Antingen kan man använda Apache Pig, PigRunner och specifikt PigTemplate. Pig utnyttjar ett speciellt query-språk kallat Pig Latin för att beskriva dina map-reduce steg. PigTemplate trycker in och sätter upp en Hadoop och en Pig i ditt spring-projekt, smidigt.
Alternativ två som demonstrerades var HiveTemplate, som i praktiken gör samma sak, men där utnyttjar man Hive och specifikt HiveSQL som query-språk.
HiveSQL är nästan som SQL, men med lite extra socker för att göra allt distribuerat och map-reducigt. Verkar vara enklare att använda och hans exempel med HiveTemplate såg bra ut.

Costin visade sedan hur man med Spring Batch, Spring Integration och någon av tidigare valda tekniker kunde bygga en snygg graf av händelser för att distribuerat parsa stora mängder loggar.

Flera olika sources i Spring Integration samlade loggar, som skrevs till en fil eller katalog, varpå dessa processades av olika steg m.h.a HiveTemplate, mycket snyggt.

Project butter

Chet Haase och Romain Guy, Google, förklarade sedan varför deras operativsystem Android alltid har haft lagg och vad de kalla ‘jerk’, vid t.ex. scroll av table-views, drag av ikoner över skrivbord etc, och hur de löst problemen nu till sist, iom project ‘Butter’ i android 4.1 Jelly Bean.
Inte en dag försent enligt mig.
En mycket teknisk genomgång av tripple-buffering och annat ganska intressant, men det mest intressanta var deras tooling de presenterade.
De har byggt en fin uppsättning verktyg för att hitta och identifiera exakt vad som sker i Android då visuella problem uppstår.
De hade live-kodning, som så många andra under Devoxx, och visade DumpSys, SysTrace, TraceView och Allocation Tracker.
Allocation Tracker är ett program jag tycker Oracle skall skriva ihop och skicka med i deras JDK, nu måste man ju köpa dessa produkter separat.

Ceylon

I ett extrainsatt nummer presenterade sedan Gavin King RedHat’s senaste språk, Ceylon.
Han var inte alls förberedd, då han blivit inkastad i sista stund.
Det blev en enminuters intro, sedan rakt in i eclipse och deras egengjorda Ceylon-plugin.
Ceylon är starkt typat och kompilerar till javascript och bytecode.
Gavin valde att lägga hela tiden till att visa hur man bygger tupler för hand, och hur man kan med det kraftfulla typsystemet skapa listor som består av olika typer, t.ex. List<String, Integer, Float>, och hur man sedan kan skapa en operator som kan addera en sådan lista med en annan sådan lista.
Ganska trevliga saker, enkelt att förstå, och framförallt extremt bra plugin som meddelar typfel direkt. Ceylon gör otroligt intelligenta statiska kompileringar, han har gjort ett bra jobb, skall bli intressant att testa.

Java posse

Efter detta blev det en stunds avslappning med en öl i hand, då JavaPosse 2012 spelades in live i en av salongerna. Kanske en aning utdraget, men roligt trots allt.

Tillbaka in i allvaret igen fortsatte Daniel Spiewak att förklara hur han gått till väga när han skapade sin kompilator till sitt språk han utvecklar på Precog.
Energisk i sitt framförande vandrade han fram och tillbaka barfota i sina slitna jeans framme vid podiet, denna mannen brann för att koda avancerade saker, mycket inspirerande.
Han hade tagit fram en konstruktion som han kallade Atom. Namnet kom av total idébrist enligt Daniel.
En Atom var en klass, med en metod, som utifrån sett var helt pure, men internt var mutable.
Ganska intressant lösning på problemet att populera noddata i ett spanning tree, när kompilatorn vandrar nedåt. Ärvda attribut är sällan ett problem men när man har ett språk som hanterar lambdas som skall evalueras i ett senare skede är det problematiskt. Den enklaste lösningen är att vandra genom hela trädet (grafen) igen då ett lambda påträffas. En annan är att skapa denna typen av lazy-init-data-holders.
Klart intressant, men man var helt slutkörd efter att ha dels lärt sig scala, och dels tagit upp grafteori igen, allt på mindre än 40 minuter.

Spring 3.2

Josh Long presenterade sedan nyheter med Spring 3.2.
Han ägnade stor tid åt att repetera vad 3.1 innehöll men kom till sist till 3.2.
Bland nyheterna kan man hitta async processing i Servlet 3.0 som vi väntat på i ca tre år. Josh Long är för övrigt ganska kort.
De har byggt ut stödet för mockning vid test, och lagt in en rad nya mock-objekt och byggt på de gamla en del.
Det finns nu generic factory methods, som möjliggör att mockning blir korrekt i samtliga tester, om man utnyttjar Mockito eller EasyMock.
En annan trevlig nyhet är det utbyggda stödet för att testa hela web-appen smidigt med deras junit-runner.
Allt är stiligt konfigurerat, med convention over configuration, och flertalet olika mock-mekanismer går automatiskt igång för att testa dina controllers på ett smidigt sätt.
Även lite förbättrade konfigureringsmöjligheter vid test-setup har tillkommit via ContextInitializers.
Tester kan nu även ha hierarkier av spring contexts, vilket inte fanns tidigare. Detta möjliggör att ha samma konfig som i produktion om man så önskar.
Sammantaget kan man säga att VMWare har lagt mesta energin på att förbättra för testbarheten i spring, vilket vi givetvis välkomnar.

Bästa presentationen

Eftersom inspelningsutrustningen inte fungerat, körde sedan Chet Haase sin presentation igen, som handlade om framtidens Processer.
Detta var bland det roligaste jag sett i form av presentation, av en smart och karismatisk programmerare.

En hand-jagad version av hans presentation finns här: https://www.youtube.com/watch?v=b8H90xr61FY

Med lite belgisk choklad under armen lämnar vi Antwerpen med dess fantastiska katedral bakom oss för den här gången.

Sammanfattning

Lite allmäna reflektioner om konferrensen gäller hygien och könsfördelning, dock inte sammanhängande.
Det var 4% kvinnligt deltagande i år, 4%. Det är lite, och det påpekades av flertalet arrangörer och talare. Det lite ironiska är att Stephan i sin keynote frågade publiken om hur många som ‘doesn’t have an erection now?’ när han visade sin nya funktion i parleys.com. Det kan ju vara plumpa skämt som detta som skrämmer bort våra kvinnliga programmerarvänner kanske.
Vidare till hygien då. Belgare och fransmän och deras cigaretter. Det röks, och inte lite, och inte långt utanför där alla sitter.
Faktum är att det röks precis utanför byggnaden, och all denna rök letar sig med enkelhet in via ventilation och öppna dörrar.
Vidrigt.

De hade styrt upp WiFi riktigt ordentligt, och trots 3400 deltagare fungerade WiFi…ibland. Inte första dagen, men andra fungerade det utmärkt…ish.

Alla fick ett åkband som innehöll ett NFC/RFID-chip. Detta kunde man utnyttja till att rösta Upp eller Ned efter man sett ett bidrag. Vidare kunde samma chip utnyttjas till diverse mat-utdelningar, öl-utskänkning, omröstningar och annat i olika montrar, genom att de scannade med en tablet eller telefon. Detta fungerade imponerande väl och gjorde allt betydligt mer strömlinjeformat än tidigare konferrenser.

Talarlistan var inte speciellt stjärnspeckad men konferrensen bjöd ändå på mycket matnyttigt och intressant, och sammanfattningsvis var den bra arrangerad i sin helhet.

 

At devoxx12

No Gravatar

Wednesday

The first keynote was by Oracle. A couple of Oracle employees started of talking about some of the new features in java 8, most of which I think you are already familiar with. They also showed of a 3D view version of the JavaFX library that is due to be launched soon.

The second keynote speaker, Neil Ford from ThoughWorks, talked about something he referred to as geek leaks. A name for a phenomenon where solutions that are usually applied to one domain easily can be transfered onto another, essentially leaking through to another domain.

One of his most interesting point spawning from applying geek leaks was the insight that “if something hurts, do it more often”. An example of when this should be applied was when merging code. Doing it often reduces the total pain of merging. He argued that this would be true for many programming tasks. An example of this was the TDD movement. Forcing yourself to run tests often meant they had to be automated to make it practically viable. Continually doing something encourages automation and the entire burden of that task is thereby reduced. Having automated tests allowed for the development of continuous integration and subsequently continuous delivery.

He also had a very witty definition of software architecture: All the stuff which are hard to change later. Which is a description that Kirk Knoernschild largely seem to agree with in his talk “Architecture all the way down”.

Securing the client side, Mike West, Google

Mike argued that the foundation of a secure web application was HTTPS. Without it all other efforts of security was in vain. This statement was something that was repeated several times from different members of the Google team. Mike also argued that the use of the Least Privilege Principle (e.g. Linux file system) should be applied to web applications. To accomplish this the new HTTP header Content Security Policy(CSP) could be used. Among other things the CSP lets a site define which URI’s content may be fetched from, removing a large source of XSS problems. Mike also displayed the usage of advanced iframe(and html5 communication) features to compartmentalize JavaScript code within the browser. Doing so lets potentially insecure code run without compromising the end users data.

Home Automation OpenHAB, Kai Kreuzer, Thomas Echstädt-Engelen,

The OpenHAB project is an open source platform for home automation. It is architecture does however not support entire units, but it rather defines smaller subsets of devices which are denoted items. An example of such an item is an on/off toggle or a dimmer (0% to 100%). Each item has a state and a number of commands which can be applied to it. A device is then composed of several items grouped together. The OpenHAB is built on top of a OSGi container and currently have an entire DSL(implemented in XText) for writing rules that can instruct connected devices. The setup of the project was rather interesting with a OSGi container running on a RasberryPi controlling external units and in turn controlled from within another OSGi container running on normal server hardware. The presentation was however far from perfect and they spent more time trying to toggle a light bulb that explaining the implementation and lessons learned.

Vert.x, Tim Fox, VMWare

After some wandering between presentations i found a presentation about Vert.x. I’m glad I did, because Vert.x seems to be a fresh take on web development. An application is divided into so called Verticles. A verticle is simply a module within the application. Tim compared the a verticles internal structure to that of the Event Loop used within nodejs. i.e. a nonblocking single threaded loop handling all calls. The comparison was not perfect however since Vert.x allowed Worker Verticles to be spawn to handle long running processes. In effect Vert.x uses what Tim called a Hybrid threading model.

Verticles within an application communicate with each other in a way very similar to that if Erlang. Simply enter a global unique id and fire away a message to anyone listening. Several options such as point-to-point or publish-subscriber patterns exist. Heres the punchline: A verticle can be in any supported Vert.x language. Java, JavaScript, Python, Groovy and Ruby currently. They are working on Scala and Clojure support. Messages passed between verticles can be serialized using any method, but it was currently customary to use JSON.

Since vericles can be written in any language it means that a server written in Java can seamlessly communicate with JavaScript running in a users browser. To accomplish this the “vert.x client” in JavaScript uses the SockJS library which uses Socket.IO when available but resorts to other methods the browser lacks html5 support. What vert.x does is to apply an actor model like that of Scalas Akka or the Erlang to the web-domain. In my opinion this is the right way to go. No more server/client AJAX boilerplate! I think the principle is sound, but I am by no means certain that vert.x is the vehicle by which this technique will delivered. Time will tell.

Architecture all the way down, Kirk Knoernschild

This was another great presentation. Kirk seemed to agree with Neil Ford about the role of architecture in software development. Architecture is put in place to facilitate change, which according to Kirk also meant in was in itself hard to change at a later date. Therefore he advocated that big architecture decisions in a project should be made as late as possible to allow the maximal amount of information to be accumulated. Quite the opposite of the normal approach in which architecture decisions are takes as early as possible to simplify smaller design decisions later.

Kirk also argued that limiting complexity within a software system was one of the essential roles of architecture. This should be done by adding flexibility in the system where is was likely to change in the future. But also by not adding flexibility to the system where it was unlikely to change since flexibility in it self adds complexity.

To accomplish flexibility without adding too much complexity it was essential to modularize the system all the way down to the individual classes. Hence the title of the presentation. To modularize Java systems meant not only considering dependencies between classes, but also between packages and modules (e.g. OSGi). Flexibility in the system should therefore exists in the connections between different packages and modules, not within a module itself. Kirks goal with architecture was elegantly summed up as “Minimize impact and cost of change”.

Effective Scala, Josh Suereth

Josh is currently responsible for the next release of Scala and seemed to know all there was to know about the language. I must however admit that I don’t and most of the presentation was beyond my understanding. What I did understand was the fundamental difference between statements in Scala and Java. Java is declarative, basically telling the machine what to do step by step, while Scala is expressive. Telling the machine what needs to be done, but not how to do it. The use of “for”(very different from Javas for) statements to control execution flow within a program reminded me of Haskell courses I had during my first year in Chalmers.

Another thing that I grasped is that Scala has native support for something similar to Maybe objects in Haskell. It wraps an object in a container which forces the user of the data to unwrap it, and in doing so implicitly checking for null. According to Josh this rather simple feature prevented the majority of null pointer exceptions from ever occurring.

Josh talked about a bunch of other stuff, but nothing that I feel comfortable relaying without running the risk of corrupting the message due to lack of background knowledge.

Thursday

The keynote on Thursday was by Google. A couple of guys talked about many different things related to Google projects. Among the things they mentioned was a cool new feature introduced in Android 4.2 called photosphere, which allowed you to take panorama images with any android 4.2 device. They also talked about some new features in the Android development environment, nothing major as far as I could tell. Apparently the Google app engine now also has integration with maven and Jenkins. Code is pulled directly from a git repository and processed by Jenkins in the app engine.

Some Chrome developers also showcased new hardware support in chrome, e.i. access to web cam and microphone directly through JavaScript. The also mentioned that in the very near future support for css shaders will be added to chrome.

Effective Dependency Injection, Jerome Dochez & Nicholas Behrens, Google

A great presentation about lessons learn when developing DI applications at Google. They essentially talked about do-s and don’t-s when writing DI.

* The first thing they mentioned was to be explicit when binding objects. All sorts of problems comes from using implicit binding functionality.

* Prefer constructor injection, this allows private final on the fields. Immutability is king.

* Don’t do work in the constructor, have a separate create method for that. Exceptions thrown from a constructor can be hard to handle when building the object graph.

* Avoid dependency on injector. I.e. don’t pass a reference to Guice or spring bean factory!

*Don’t bind to general types, e.g. Integer. It is ambiguous and easy to confuse at a later date.

* Use Null object pattern (which to me seems like more of a general guideline.)

* Don’t use context objects! The a very, vary hard to handle and makes the code unpredictable since their state is often unknown/hard to determine when they are passed to methods in real application.

Jerome and Nicholas also argued that DI can be used to increase modularity, in a way consistent with what Kirk described in his talk “Architecture all the way down”. In contrast to Kirk, Jerome and Nicholas did not seem to see OSGi as good general tool for achieving modularity. Due to the complexity introduced with OSGi they argued that it is really only was two valid reasons to use it: Runtime extensibility and Runtime versioning. For all other reasons the cost of the complexity outweigh the benefits.

To achieve modularity they advocated only exposing interfaces from a package and keeping all the implementation classes package private. One implementation class still needed to be public to allow DI. The interfaces(API) and implementations should be places in a separate jars and the API jar is the only one that should be used for dependency resolution by other packages. This ensures decoupling of the API and implementation.

For Butter or Worse, Chet Haase & Romain Guy, Google

This was a presentation from two guys that have been working on Android 4.2. Both of them worked on the UI part of the operating system and their focus during this latest iteration of the system was to reduce “jank”. Jank was what they called sudden drops in frame rate, more commonly known as lag. The reason for much of the unexplained jank in the old versions of android could be traced to that the update frequency of the display was not completely synchronized with the frame renderer in android. This sometimes caused rendering to “spill over” into the next frame which effectively lowered the frame rate to half for a short period of time. Whats worse is that this increases the likelihood of the next frame also causing a jank. The simple(at least in theory) solution to this is to let the display frequency trigger the rendering process in the android system. That was pretty much it. Interesting problem but rather narrow for a full presentation. They also mentioned a bunch of tools which are great when profiling Android applications such as traceview and allocation tracker.

JavaScript unit tests & build integration, Wouter Groeneveld, Cegeka

Wouter presented a rather neat way of integrating JavaScript unit tests with the rest of your Java build system. He argued that to be able to really unit test JavaScript it needs to be properly separated from HTML and CSS. To organize the JavaScript code in modules also significantly helped when creating tests from JavaScript. The best way of ensuring this was simply to apply TDD to JavaScript development!

To do the actual unit testing Wouter used Jasmine which conveniently provide equals and assert methods for tests. Instead of using Selenium Wouter advocated the use of an “artificial” DOM tree on which the test can operate.He proposed a couple of different techniques but seemed to settle on using PhantomJS for simulating the DOM. He then showed how to integrate this in maven and how to convert Jasmine reports to JUnit result XML’s readable by Jenkins. If a JavaScript failed during continuous integration Jenkins would complain! A in all a nice presentation on the state of JavaScript unit testing.

 

En vecka kvar till dev:mobile

No Gravatar

Med en vecka kvar till dev:mobile ser det ut som om det kommer att bli en riktigt bra konferens. Vad sägs om 25 sessioner (Microsoft, IBM, Nokia, Adobe, med flera), keynote av Erwan Paccard om ”Top 11 Trends for Enterprise Mobile”.

Konferensen är fullsatt men det går fortfarande att registrera sig på reservlistan

Vi ses den 12:e Juni!

 

Posttraumatiska presentationstankar

No Gravatar

Så här ett par veckor efter SDC 2012 har jag börjat smälta mina intryck från konferensen och mina egna presentationer. Övriga intryck får jag lov att återkomma till i en annan blogpost.

Avseende mina egna presentationer så talade jag dag 1 kort om ‘Renderscript‘ på mobilspåret i form av ett s.k. “lightning talk”. På 12 minuter (eller närmare bestämt 11:45) lyckades jag klämma in en kortfattad genomgång av vad Renderscript är inför drygt 70 åhörare. Det blev lite om tekniken, några enkla demonstrationer samt lite snack kring potentiella användningsområden. Det mesta intressanta är väl egentligen det sistnämnda, utan något vettigt användningsområde blir ny teknik mest av akademiskt intresse – hur avancerad och fantastisk tekniken än må vara. Presentationsmässigt gick det nog så bra som jag hade kunnat hoppas på då detta var min premiär som talare på en offentlig konferens – dessutom på engelska. Mitt stora bekymmer inför talet var att hinna med det jag ansåg viktigt på mina 12 minuter. När jag repeterade var jag uppe i 14-15 minuter och fick löpande skära i materialet – med resultat att jag tyckte det uppstod otrevliga luckor i den röda tråden istället. Men den feedback jag fick efteråt var helt klart positiv så presentation 1 var jag klart nöjd med.

Foto från scandevconf.se

Mitt huvudnummer handlade om OpenGL ES 2.0 på Android och ägde rum som sista pass dag 2. Åhörarskaran var klart glesare denna gång, men jag är ändå glad att drygt 30 personer tog sig tid för att komma att lyssna på mig. Budskapet jag i grund och botten ville få fram var att 3D-grafik behöver inte vara så svårt och krångligt. Om jag lyckades? Något tveksamt. Eller som en f.d. kollega som lyssnade sade efteråt.

- Jag tycker presentationen var jättebra. Fast jag förstod ingenting.

Komplimang eller kritik så ligger det nog en hel del i vad han sade. Likt Renderscript-presentationen hade jag fått skära oerhört mycket i mitt material och under resan mot v.1.0 av presentationsmaterialet insåg jag flera gånger om att mitt tilltänkta omfång var alldeles för stort. Något jag nämnde i presentationen också – man skulle utan vidare kunna prata i 45 minuter om såväl 3D-grafikens grunder, Shaders, GLSL, tips&tricks eller olika renderingstekniker på Android. Nu blev det en ganska blandad kompott där jag själv kände att luckorna var lite väl stora, men samtidigt kanske inte åhörarna förväntar sig annat än överskådliga genomgångar på 45-minutersföredrag på utvecklarkonferenser. Hoppas åtminstone jag fick fram att även en så matematiskt obevandrad person som jag kan åtstadkomma fräcka grejer med 3D-grafik, även om det såklart inte skadar med lite koll på linjär algebra och annat man inte lär sig på gymnasiet.

Presentationsmässigt gick det väl lite knackigare än på måndagen. Men det kanske är ofrånkomligt när man inte är något presentationsproffs och/eller engelsktalande till vardags och man skall hålla låda i trekvarts timme. Något som dock blev väldigt lyckat var att använda en sekundär projektor kopplad direkt till mobilen där jag “live” kunde visa upp olika funktioner och effekter som jag samtidigt talade om och visade kod för på huvudskärmen. Tekniken var med mig!

Vägen fram till presentationerna var ganska tidskrävande, men det skall sägas att det är en ganska skön ego-boost att stå framme vid podiet. Att tala offentligt är lite på gränsen av min komfortzon, men förvånansvärt roligt när man väl lagt den första minuten av nervositet bakom sig. Jag kommer säkerligen skicka in abstrakt till framtida konferenser om jag har något vettigt att berätta!

För din app

No Gravatar

Det är inte var dag man får möjlighet att promota sin app i ett forum som bubblar av intresse och engagemang. Ett unikt tillfälle för feedback och till kreativ diskussion.
Då det dessutom sker på sveriges störta utvecklarkonferens för mobil utveckling (det är gratis! för besökare) finns massor med tillfällen för inspiration och viktigt nätverkande.

Jag kommer i alla fall slänga upp några appar ur min samling!

Får jag se din app i applandet?

@JFokus: So whats so cool about Android 4.x av Lars Vogel

No Gravatar

Intressant presentation om nyheterna i Andorid 4.x. Den stora nyheten är naturligtvis att 4.0 fungerar både för plattor och mobiler. Andra nyheter som demonstrerades var ActionBar, GridLayout (ersätter i stort sätt table layout), förbättrat widget stöd, face detection med hjälp av kameran.

@JFokus: Tackling Android fragmentation av Glenn Bech

No Gravatar

Glenn Bech höll en väldigt bra presentation på JFokus om hur man hanterar problem som skärm storlek och OS version. Ett av problemen är att gamla telefoner inte uppgraderas till nya versioner av OS:et. Idag använder flest telefoner version 2.3  av Android (v2.2 20%). Detta kan jämföras med iOS där 66% använder iOS 5+. Men frågan är om et är ett problem för konsumenterna? Troligtvis inte. Men för vem är det ett problem? Naturligtvis för oss utvecklare. Vi måste veta hur många telefoner som finns körande på dom olika versionerna så att vi tex kan använda version av Androids api:er.