fitc '14 toronto - technology, a means to an end

85
Technology, a means to an end. Thibault Imbert

Upload: thibault-imbert

Post on 08-Sep-2014

7 views

Category:

Technology


1 download

DESCRIPTION

Technology is fascinating, but should this be what drives us? What are the things you can do to differentiate yourself today? With all that noise, what are things you should be looking at? In this talk, Thibault Imbert will look at the different technologies available today to build amazing experiences and what’s coming tomorrow. He will focus on the importance of learning, crafting and getting out of your comfort zone and most importantly, to never be religious about a technology.

TRANSCRIPT

Page 1: FITC '14 Toronto - Technology, a means to an end

Technology, a means to an end. Thibault Imbert

Page 2: FITC '14 Toronto - Technology, a means to an end

1996 - Discovered BASIC on my dad’s T07.

1998 - Started playing with Flash in my bedroom !

2004 - Teaching programming !

2008 - Joined Adobe (France) !

2010 - Moved to San Francisco (PM for Flash Player) !

2014 - Working on next-gen web authoring tools/services projectparfait.adobe.com

Page 3: FITC '14 Toronto - Technology, a means to an end

CSS Shapes

Page 4: FITC '14 Toronto - Technology, a means to an end

Blend modes

Page 5: FITC '14 Toronto - Technology, a means to an end

Masking

Page 6: FITC '14 Toronto - Technology, a means to an end
Page 7: FITC '14 Toronto - Technology, a means to an end

justinjackson.ca/words.html

Page 8: FITC '14 Toronto - Technology, a means to an end

Technologyto serve a goal.

Page 9: FITC '14 Toronto - Technology, a means to an end

Focus on the goal, implementation is a detail.

Page 10: FITC '14 Toronto - Technology, a means to an end

detail.

Page 11: FITC '14 Toronto - Technology, a means to an end
Page 12: FITC '14 Toronto - Technology, a means to an end

C++, Objective-C, ActionScript, JavaScript, Java, C#…

Page 13: FITC '14 Toronto - Technology, a means to an end

Don’t place a technology.

Use the best one to do the best job.

Page 14: FITC '14 Toronto - Technology, a means to an end

DHTML!Flash

Page 15: FITC '14 Toronto - Technology, a means to an end

Ajax!Flash

Page 16: FITC '14 Toronto - Technology, a means to an end

Silverlight!Flash

Page 17: FITC '14 Toronto - Technology, a means to an end

Familiar?

Native!HTML/JS!

Page 18: FITC '14 Toronto - Technology, a means to an end

It is about the result, the end goal.

Page 19: FITC '14 Toronto - Technology, a means to an end
Page 20: FITC '14 Toronto - Technology, a means to an end
Page 21: FITC '14 Toronto - Technology, a means to an end
Page 22: FITC '14 Toronto - Technology, a means to an end

Technologies, come and go.

Page 23: FITC '14 Toronto - Technology, a means to an end

So I should not care?

Page 24: FITC '14 Toronto - Technology, a means to an end

Be passionate, stay curious,

and always assume you don’t know.

Page 25: FITC '14 Toronto - Technology, a means to an end
Page 26: FITC '14 Toronto - Technology, a means to an end

"The most dangerous thought you can have as a creative

person is to think you know what you're doing.” - Bret Victor

Page 27: FITC '14 Toronto - Technology, a means to an end

JavaScript will win.

C++ will win.

Obj-C will win.

Dart will win.

Why should one win?

There is no safe bet.

Page 28: FITC '14 Toronto - Technology, a means to an end

By being religious, you barricade yourself.

Page 29: FITC '14 Toronto - Technology, a means to an end

You stop learning and start having preconceived ideas.

Page 30: FITC '14 Toronto - Technology, a means to an end

JavaScript is for “scripting” only.

Page 31: FITC '14 Toronto - Technology, a means to an end
Page 32: FITC '14 Toronto - Technology, a means to an end

asmjs.org an extraordinarily optimizable, low-level subset of JavaScript

Page 33: FITC '14 Toronto - Technology, a means to an end

JavaScript is not object-oriented.

Page 34: FITC '14 Toronto - Technology, a means to an end

ES6

Page 35: FITC '14 Toronto - Technology, a means to an end

//  entities.js  module  entities  {                    export  class  Person  {  !            private  message  =  "Hi  my  name  is  ";  !            constructor  (public  name,  public  age,  public  town){                      this.name  =  name;                      this.age  -­‐  age;                      this.town  =  town;              }  !            talk(){                      return  this.message  +  this.name;              }  !            get  isAbove18(){                      return  this.age  >=  18;              }  }

Page 36: FITC '14 Toronto - Technology, a means to an end

But what if I want static-typing?

Page 37: FITC '14 Toronto - Technology, a means to an end

www.typescriptlang.org

Page 38: FITC '14 Toronto - Technology, a means to an end

//  entities.js  module  entities  {                    export  class  Person  {  !            private  message  :string  =  "Hi  my  name  is  ";  !            constructor  (public  name:  string,  public  age:  number,  public    town:  string){                      this.name  =  name;                      this.age  =  age;                      this.town  =  town;              }  !            talk(){                      return  this.message  +  this.name;              }  !            get  isAbove18(){                      return  this.age  >=  18;              }  }

Page 39: FITC '14 Toronto - Technology, a means to an end

Which will generate plain ES5 compatible JS

Page 40: FITC '14 Toronto - Technology, a means to an end

var  Person  =  (function  ()  {          function  Person(name,  age,  town)  {                  this.name  =  name;                  this.age  =  age;                  this.town  =  town;                  this.message  =  "Hi  my  name  is  ";                  this.name  =  name;                  this.age  -­‐  age;                  this.town  =  town;          }          Person.prototype.talk  =  function  ()  {                  return  this.message  +  this.name;          };  !        Object.defineProperty(Person.prototype,  "isAbove18",  {                  get:  function  ()  {                          return  this.age  >=  18;                  },                  enumerable:  true,                  configurable:  true          });          return  Person;  })();  

Page 41: FITC '14 Toronto - Technology, a means to an end

Challenge, run the original Space Invaders ROM in JS

Page 42: FITC '14 Toronto - Technology, a means to an end

Ported in an hour to JavaScript

Page 43: FITC '14 Toronto - Technology, a means to an end
Page 44: FITC '14 Toronto - Technology, a means to an end

Chose the best option (for me) to get the job done.

Page 45: FITC '14 Toronto - Technology, a means to an end

C# is for Windows developers only

Page 46: FITC '14 Toronto - Technology, a means to an end
Page 47: FITC '14 Toronto - Technology, a means to an end
Page 48: FITC '14 Toronto - Technology, a means to an end
Page 49: FITC '14 Toronto - Technology, a means to an end
Page 50: FITC '14 Toronto - Technology, a means to an end

Xamarin

Page 51: FITC '14 Toronto - Technology, a means to an end
Page 52: FITC '14 Toronto - Technology, a means to an end

C++ is way too low-level.

Page 53: FITC '14 Toronto - Technology, a means to an end

C++11

Page 54: FITC '14 Toronto - Technology, a means to an end

#include  <iostream>  #include  <stdint.h>  #include  <iostream>  #include  <vector>  #include  <algorithm>  !int  main(int  argc,  const  char  *  argv[])  {          std::vector<uint32_t>  data  =  {  234,  76767,  43,  343,  4322,  33,  122  };                    std::sort(data.begin(),  data.end(),  []  (uint32_t  a,  uint32_t  b)  {  return  a  <  b;  });                    for  (auto  i  =  data.begin();  i  <  data.end();  i++)  {                  std::cout  <<  *i  <<  std::endl;          }                    class  MyClass  {                  public:                          MyClass(size_t  size)  :  m_size(size)  {  }                          MyClass(const  char  *str)  :  MyClass(strlen(str))  {  }                          size_t  Size()  {  return  m_size;  }                  private:                          size_t  m_size;          };                    MyClass  obj("Hello!");          std::cout  <<  obj.Size()  <<  std::endl;          return  0;  }

Page 55: FITC '14 Toronto - Technology, a means to an end

I am a web guy, doing scripting, cool native stuff is hard.

Page 56: FITC '14 Toronto - Technology, a means to an end
Page 57: FITC '14 Toronto - Technology, a means to an end

Starry Night by Petros Vrellis

Page 58: FITC '14 Toronto - Technology, a means to an end

openFrameworks

Page 59: FITC '14 Toronto - Technology, a means to an end

Functional programming languages are not for real world usage.

Page 60: FITC '14 Toronto - Technology, a means to an end

Imperative programming is: I want a latte.

Heat some milk. Put it into a cup.

Brew some coffee with a stovetop Moka pot. Pour the coffee into the heated milk.

Thank you.

Page 61: FITC '14 Toronto - Technology, a means to an end

Functional programming is: I want a latte.

Thank you.

Page 62: FITC '14 Toronto - Technology, a means to an end

Have a look at F#

Page 63: FITC '14 Toronto - Technology, a means to an end

let numbers = [ 0..2..20 ] !

val numbers : int list = [0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20]

Page 64: FITC '14 Toronto - Technology, a means to an end

var value = Math.abs ( Math.round ( Math.sqrt ( 3.56 ) ) );

let result = 3.56 |> System.Math.Sqrt |> System.Math.Round |> System.Math.Abs

Page 65: FITC '14 Toronto - Technology, a means to an end

let numbers = [ 0..3..30 ] let square x = x * x !let sumSquare nums = let mutable buffer = 0 for i in nums do buffer <- buffer + square i buffer !let result = sumSquare numbers

Page 66: FITC '14 Toronto - Technology, a means to an end

let sumSquare nums = nums |> Seq.map ( fun x -> x * x ) |> Seq.sum

Page 67: FITC '14 Toronto - Technology, a means to an end

Multicore and web apps? No way.

Page 68: FITC '14 Toronto - Technology, a means to an end

&

Page 69: FITC '14 Toronto - Technology, a means to an end

myPA  =  [1,  2,  3];      //  incrementation  is  parallelized  on  the  GPU  myPlusPA  =  myPA.mapPar(val  =>  val  +  1);  

Page 70: FITC '14 Toronto - Technology, a means to an end

myPA  =  [1,  2,  3];      //  incrementation  is  parallelized  on  the  GPU  myPlusPA  =  myPA.mapPar(val  =>  val  +  1);  

Page 71: FITC '14 Toronto - Technology, a means to an end

OpenCL (behind the scene)

Page 72: FITC '14 Toronto - Technology, a means to an end

Multicore and web apps? No way.

Page 73: FITC '14 Toronto - Technology, a means to an end

River Trail bit.ly/qme8BY

Page 74: FITC '14 Toronto - Technology, a means to an end

You may never use these, but they will make you a better developer, so keep

learning new stuff.

Page 75: FITC '14 Toronto - Technology, a means to an end

Creativity, but stepping back from technology.

Page 76: FITC '14 Toronto - Technology, a means to an end
Page 77: FITC '14 Toronto - Technology, a means to an end
Page 78: FITC '14 Toronto - Technology, a means to an end

GoalExperiment

FailIterate

Page 79: FITC '14 Toronto - Technology, a means to an end
Page 80: FITC '14 Toronto - Technology, a means to an end
Page 81: FITC '14 Toronto - Technology, a means to an end
Page 82: FITC '14 Toronto - Technology, a means to an end

Not good!Not good

Looks good!

Looks good!

Page 83: FITC '14 Toronto - Technology, a means to an end
Page 84: FITC '14 Toronto - Technology, a means to an end

Success is not an event, it is a process. James Clear.

Page 85: FITC '14 Toronto - Technology, a means to an end

@thibault_imbert

Thank you!