fitc 2013 - the technical learning curve

70
Thomas Joos, Little Miss Robot Experience Director, Partner @thomasjoos The Technical Learning Curve Thomas Joos | Little Miss Robot | @thomasjoos Thursday 28 February 13

Upload: little-miss-robot

Post on 27-Jan-2015

105 views

Category:

Technology


0 download

DESCRIPTION

Technical presentation at FITC by our managing partner Thomas Joos. The presentation gives insight and behind the scene learnings.

TRANSCRIPT

Page 1: FITC 2013 - The Technical Learning Curve

Thomas Joos, Little Miss Robot

Experience Director, Partner@thomasjoos

The Technical Learning CurveThomas Joos | Little Miss Robot | @thomasjoos

Thursday 28 February 13

Page 2: FITC 2013 - The Technical Learning Curve

-(void) helloFragmentation;

Retina

iOS4.0

iOS5.0iOS6.0

320x480 640x960

HTML5

CSS3

Node.js

Objective-c

Java

.NET

OpenFrameworks

IE8IE9 Chrome

Safari

Firefox Opera

C++ Javascript ActionScript

XML

JSON

PHP

XAML

Flash

Smart TV720x1280xHDPI

HDPI

mHDPI

lHDPI

Klingon

Thursday 28 February 13

Page 3: FITC 2013 - The Technical Learning Curve

Design  is  not  just  what  it  looks  like  and  feels  like.Design  is  how  it  works.

-­‐  Steve  Jobs

Thursday 28 February 13

Page 4: FITC 2013 - The Technical Learning Curve

YO  STEVE!  I’M  REALLY  HAPPY  FOR  YOU  AND  IMA  LET  YOU  FINISH...

BUT  WITHOUT  WOZZYOU  HAD  JACK  SHIT!  

Thursday 28 February 13

Page 5: FITC 2013 - The Technical Learning Curve

-(void) goodLuckWithThat;Pen & Paper

Adobe Photoshop

Keynote

Adobe Illustrator Men’s Bag

Thursday 28 February 13

Page 6: FITC 2013 - The Technical Learning Curve

DESIGN VS

DEVELOPMENT

Thursday 28 February 13

Page 7: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 8: FITC 2013 - The Technical Learning Curve

Our name represents our ambition to combine creative ideas with innovative technology.‘Little Miss’ stands for dreams and fantasy without limits, like a true ten-year-old. ‘Robot’ illustrates the endless technical opportunities and evolutions in our industry. We are user- centered in every step of our process, in order to create wonderful experiences that meet the needs of real people.

As a wise man once said: ‘Design is not what it looks like and feels like. Design is how it works.

LITTLE MISS ROBOT

Thursday 28 February 13

Page 9: FITC 2013 - The Technical Learning Curve

Development informs.When building a product, design leads development and development informs design. This is a cyclical, iterative process in which the goal is to continually improve the product to better meet the needs of users.

source: Aral Balkan, Mobile Considerations in UX Design

Thursday 28 February 13

Page 10: FITC 2013 - The Technical Learning Curve

You tell designers what they can or can not do.And they will show you how it should look like and feel like. You know, because that’s how it works.

Thursday 28 February 13

Page 11: FITC 2013 - The Technical Learning Curve

A developer’s toolbox:1 Passion for digital innovation2 Interested in interactive design & ux3 Great programming skills4 The ability to say ‘I don’t know’5 Eager to find out ‘how the hell it works’

Thursday 28 February 13

Page 12: FITC 2013 - The Technical Learning Curve

The Learning Curve, you said?

Thursday 28 February 13

Page 13: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 14: FITC 2013 - The Technical Learning Curve

iPhone PrototypeNative front-end client (iOS5.0)Rest API Webservice (http requests, JSON)Last.FM API

Wim Van Buynder@wimvanbuynder

Thursday 28 February 13

Page 15: FITC 2013 - The Technical Learning Curve

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize

Interesting articles: http://stackoverflow.com/questions/2658738/the-simplest-way-to-resize-an-uiimagehttp://stackoverflow.com/questions/2645768/uiimage-resize-scale-proportionhttp://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

Thursday 28 February 13

Page 16: FITC 2013 - The Technical Learning Curve

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {        UIImage *sourceImage = self;    UIImage *newImage = nil;        CGSize imageSize = sourceImage.size;    CGFloat width = imageSize.width;    CGFloat height = imageSize.height;        CGFloat targetWidth = targetSize.width;    CGFloat targetHeight = targetSize.height;        CGFloat scaleFactor = 0.0;    CGFloat scaledWidth = targetWidth;    CGFloat scaledHeight = targetHeight;        CGPoint thumbnailPoint = CGPointMake(0.0,0.0);        if (CGSizeEqualToSize(imageSize, targetSize) == NO) {                CGFloat widthFactor = targetWidth / width;        CGFloat heightFactor = targetHeight / height;                scaleFactor = heightFactor;        scaledWidth  = width * scaleFactor;        scaledHeight = height * scaleFactor;                // center the image                if (widthFactor < heightFactor) {            thumbnailPoint.y = 0;         } else if (widthFactor > heightFactor) {            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;        }    }            // this is actually the interesting part:        UIGraphicsBeginImageContext(targetSize);        CGRect thumbnailRect = CGRectZero;    thumbnailRect.origin = thumbnailPoint;    thumbnailRect.size.width  = scaledWidth;    thumbnailRect.size.height = scaledHeight;        [sourceImage drawInRect:thumbnailRect];        newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();        if(newImage == nil)        NSLog(@"could not scale image");        return newImage ;}

Thursday 28 February 13

Page 17: FITC 2013 - The Technical Learning Curve

Refactoring code.

Thursday 28 February 13

Page 18: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 19: FITC 2013 - The Technical Learning Curve

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {        UIImage *sourceImage = self;    UIImage *newImage = nil;        CGSize imageSize = sourceImage.size;    CGFloat width = imageSize.width;    CGFloat height = imageSize.height;        CGFloat targetWidth = targetSize.width;    CGFloat targetHeight = targetSize.height;        CGFloat scaleFactor = 0.0;    CGFloat scaledWidth = targetWidth;    CGFloat scaledHeight = targetHeight;        CGPoint thumbnailPoint = CGPointMake(0.0,0.0);        if (CGSizeEqualToSize(imageSize, targetSize) == NO) {                CGFloat widthFactor = targetWidth / width;        CGFloat heightFactor = targetHeight / height;                scaleFactor = heightFactor;        scaledWidth  = width * scaleFactor;        scaledHeight = height * scaleFactor;                // center the image                if (widthFactor < heightFactor) {            thumbnailPoint.y = 0;         } else if (widthFactor > heightFactor) {            thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;        }    }            // this is actually the interesting part:        UIGraphicsBeginImageContext(targetSize);        CGRect thumbnailRect = CGRectZero;    thumbnailRect.origin = thumbnailPoint;    thumbnailRect.size.width  = scaledWidth;    thumbnailRect.size.height = scaledHeight;        [sourceImage drawInRect:thumbnailRect];        newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();        if(newImage == nil) //NSLog(@"could not scale image");        NSLog(@"could not scale image");        return newImage ;}

= backgroundImage.contentMode = UIViewContentModeScaleAspectFill

Thursday 28 February 13

Page 20: FITC 2013 - The Technical Learning Curve

Too often we feel the need to reinvent the wheel and program specific behavior from scratch. Always remind yourself to start from the beginning and Read The Fucking Manual.

@wimvanbuynderiOS Development tip: keep reading the fucking sdk. #rtfsdk

Thursday 28 February 13

Page 21: FITC 2013 - The Technical Learning Curve

Radio+ BetaResponsive WebsiteHTML5, CSS3, Javascript, Node.JSRest API Webservice(http requests, JSON)Last.FM API

Gwen Vanhee@gwenvanhee

Bram Monstrey@brmm

Thursday 28 February 13

Page 22: FITC 2013 - The Technical Learning Curve

Channel nameChannel logoCurrent Show Current PresentorCurrent ArtistPlaylist

Thursday 28 February 13

Page 23: FITC 2013 - The Technical Learning Curve

Guys. I really think we should move away from manual polling as quickly as possible. It’s Node.JS time. @brmm

Thursday 28 February 13

Page 24: FITC 2013 - The Technical Learning Curve

A few tiny thoughtsthat crossed my mind...

Thursday 28 February 13

Page 25: FITC 2013 - The Technical Learning Curve

“ It’s not really in the scope of this project. Who am I kidding, it’s not in there at all. ”

- the wallet speaking -

Thursday 28 February 13

Page 26: FITC 2013 - The Technical Learning Curve

“ If we screw this up, it’s gonna be legen - never have to wait for it again - dary. “

- the chicken speaking -

Thursday 28 February 13

Page 27: FITC 2013 - The Technical Learning Curve

“ Isn’t Javascript a front-end scripting language? Maybe it’s just me... “

- the inner voice speaking -

Thursday 28 February 13

Page 28: FITC 2013 - The Technical Learning Curve

“ How cool would it be to just pull this off. “

- the ego speaking -

Thursday 28 February 13

Page 29: FITC 2013 - The Technical Learning Curve

Node.JSA platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Perfect for data-intensive real-time applications that run across distributed devices.

source: nodejs.org

Thursday 28 February 13

Page 30: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 31: FITC 2013 - The Technical Learning Curve

Web services

Radio+Node

request content (twitter, last.fm)request additional content (radio host, program guide, ...)receives server updatespush update to client

PushNode

Server Side Polling for updates

Last.FM API

Web Client(html5)

NOA, On Demand, PlaylistAdditional Content (Radio host, program guide, ...

Version 1

Thursday 28 February 13

Page 32: FITC 2013 - The Technical Learning Curve

Web services

Radio+Node

request additional content (radio host, program guide, ...)receives server updatesaggregates feed contentpush update to client

PushNode

Server Side Polling for updates

Last.FM API

Web Client(html5)

NOA, On Demand, PlaylistAdditional Content (Radio host, program guide, ...

FeedNode

request content (twitter, last.fm)

Version 2

Thursday 28 February 13

Page 33: FITC 2013 - The Technical Learning Curve

Web services

Radio+Node

request additional content (radio host, program guide, ...)receives server updatesaggregates feed contentpush platform optimized update to client

PushNode

Server Side Polling for updates

Last.FM API

Web Client(html5)

NOA, On Demand, PlaylistAdditional Content (Radio host, program guide, ...

Version 3

Smart TV(html5)

iOS Client(obj-c)

Android Client(java)

FeedNode

request content (twitter, last.fm)

Thursday 28 February 13

Page 34: FITC 2013 - The Technical Learning Curve

#client overloadThursday 28 February 13

Page 35: FITC 2013 - The Technical Learning Curve

Guys. I really think we should integrate more Radio+nodes to serve all those clients. @Brmm

Thursday 28 February 13

Page 36: FITC 2013 - The Technical Learning Curve

“ It’s a good idea and ima let you finish... but it’s not going to happen.”

- the wallet won -

Thursday 28 February 13

Page 37: FITC 2013 - The Technical Learning Curve

Gwen Vanhee@gwenvanhee

Thursday 28 February 13

Page 38: FITC 2013 - The Technical Learning Curve

littlemissrobot.comThursday 28 February 13

Page 39: FITC 2013 - The Technical Learning Curve

Mobile FirstHTML5, CSS3, JavascriptResponsive design

Gwen Vanhee@gwenvanhee

Thursday 28 February 13

Page 40: FITC 2013 - The Technical Learning Curve

I thought it would be a good idea to learn more about HTML5 for mobile.

@gwenvanhee

Thursday 28 February 13

Page 41: FITC 2013 - The Technical Learning Curve

Gwen Vanhee@gwenvanhee

An interactive HTML5 drawing experiment

Code::Brush

Thursday 28 February 13

Page 42: FITC 2013 - The Technical Learning Curve

Conceptual, visual and functional, #mobilefirst stimulates you to remove the clutter and focus on what really matters.

And thats a very good thing. Always.

Mobile First

Thursday 28 February 13

Page 43: FITC 2013 - The Technical Learning Curve

We are at a turning point where websites will be visited mostly by mobile devices. A new site should last for 3 years, so #mobilefirst thinking is a must.

Mobile First

Thursday 28 February 13

Page 44: FITC 2013 - The Technical Learning Curve

A few insights...

Thursday 28 February 13

Page 45: FITC 2013 - The Technical Learning Curve

Focus on mobile friendly browsers.(IE is not one of them.)

Thursday 28 February 13

Page 46: FITC 2013 - The Technical Learning Curve

Mobile optimalisation simply means downsizing the hell out of your download size and page requests.

Thursday 28 February 13

Page 47: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 48: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 49: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 50: FITC 2013 - The Technical Learning Curve

http://blog.netvlies.nl/design-interactie/retina-revolution/

Thursday 28 February 13

Page 51: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 52: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 53: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 54: FITC 2013 - The Technical Learning Curve

Progressive Enrichmentmobile > tablet > desktop

Thursday 28 February 13

Page 55: FITC 2013 - The Technical Learning Curve

Too often we discuss what should happen when the canvas becomes smaller. #mobilefirst thinking means discussing what happens when the canvas becomes bigger. @gwenvanhee

Thursday 28 February 13

Page 56: FITC 2013 - The Technical Learning Curve

Mobile JournalistiOS5 & 6iPhone 4 & 5Objective-C

Wim Van Buynder@wimvanbuynder

Thursday 28 February 13

Page 57: FITC 2013 - The Technical Learning Curve

Start

First time Yes First run Login

Approval

Failed

No

Homescreen

Record Import from library

Cancel Pick image

Last file takenArchive

Draft

Sent

Uploading

List item

Back Edit

Settings

Configuration Cancel Next

Collection view

Back Next

DetailpageDetailpage

Back Update

Add

Disclaimer

Log out

Launch application

Flowchart Uploader app VRT

Thursday 28 February 13

Page 58: FITC 2013 - The Technical Learning Curve

Handling large chunks of data.

Thursday 28 February 13

Page 59: FITC 2013 - The Technical Learning Curve

the iPhoneApplication

DocumentDirectory

Application

Application

Handling large amounts of data is not really this directory’s specialty.

Thursday 28 February 13

Page 60: FITC 2013 - The Technical Learning Curve

the iPhoneApplication

DocumentDirectory

Application

Application

GlobalTemp Directory

Saving created data directly into the iPhone’s global ‘temp’ directory.(tmp/mobilejournalist)

Thursday 28 February 13

Page 61: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 62: FITC 2013 - The Technical Learning Curve

“ It works like a charm. What a wonderful app you guys made. Thanks! “

- Feedback week 1 -

Thursday 28 February 13

Page 63: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 64: FITC 2013 - The Technical Learning Curve

“ HEY GUYS! THE APP FUCKING STOPPED WORKING FOR SOME REASON!!! “

- Feedback week 3 -

Thursday 28 February 13

Page 65: FITC 2013 - The Technical Learning Curve

Thursday 28 February 13

Page 66: FITC 2013 - The Technical Learning Curve

the iPhoneApplication

DocumentDirectory

Application

Application

GlobalTemp Directory

Saving created data directly into the iPhone’s global ‘temp’ directory.(tmp/mobilejournalist)

Automatically erasing random content to make space.

Thursday 28 February 13

Page 67: FITC 2013 - The Technical Learning Curve

the iPhoneApplication

DocumentDirectory

Application

Application

GlobalTemp Directory

Saving created data directly into the iPhone’s global ‘temp’ directory.(tmp/mobilejournalist)

When data is saved as draftthe app automatically savesthis content in the document directory.

Thursday 28 February 13

Page 68: FITC 2013 - The Technical Learning Curve

I knew there was something like dummy-proof or granny-proof. Now I now there is also journalist-proof.

@wimvanbuynder

Thursday 28 February 13

Page 69: FITC 2013 - The Technical Learning Curve

special thanks to

Wim Van Buynder@wimvanbuynder

Gwen Vanhee@gwenvanhee

Bram Monstrey@brmm

Thursday 28 February 13

Page 70: FITC 2013 - The Technical Learning Curve

Thomas Joos, Little Miss Robot

Experience Director, Partner@thomasjoos

Defining a great experience design process.

Thank you. Thomas Joos, The Technical Learning CurveFITC Amsterdam 2013@thomasjoos

Thursday 28 February 13