fitc '14 toronto - technology, a means to an end
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
Technology, a means to an end. Thibault Imbert
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
CSS Shapes
Blend modes
Masking
justinjackson.ca/words.html
Technologyto serve a goal.
Focus on the goal, implementation is a detail.
detail.
C++, Objective-C, ActionScript, JavaScript, Java, C#…
Don’t place a technology.
Use the best one to do the best job.
DHTML!Flash
Ajax!Flash
Silverlight!Flash
Familiar?
Native!HTML/JS!
It is about the result, the end goal.
Technologies, come and go.
So I should not care?
Be passionate, stay curious,
and always assume you don’t know.
"The most dangerous thought you can have as a creative
person is to think you know what you're doing.” - Bret Victor
JavaScript will win.
C++ will win.
Obj-C will win.
Dart will win.
Why should one win?
There is no safe bet.
By being religious, you barricade yourself.
You stop learning and start having preconceived ideas.
JavaScript is for “scripting” only.
asmjs.org an extraordinarily optimizable, low-level subset of JavaScript
JavaScript is not object-oriented.
ES6
// 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; } }
But what if I want static-typing?
www.typescriptlang.org
// 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; } }
Which will generate plain ES5 compatible JS
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; })();
Challenge, run the original Space Invaders ROM in JS
Ported in an hour to JavaScript
Chose the best option (for me) to get the job done.
C# is for Windows developers only
Xamarin
C++ is way too low-level.
C++11
#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; }
I am a web guy, doing scripting, cool native stuff is hard.
Starry Night by Petros Vrellis
openFrameworks
Functional programming languages are not for real world usage.
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.
Functional programming is: I want a latte.
Thank you.
Have a look at F#
let numbers = [ 0..2..20 ] !
val numbers : int list = [0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20]
var value = Math.abs ( Math.round ( Math.sqrt ( 3.56 ) ) );
let result = 3.56 |> System.Math.Sqrt |> System.Math.Round |> System.Math.Abs
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
let sumSquare nums = nums |> Seq.map ( fun x -> x * x ) |> Seq.sum
Multicore and web apps? No way.
&
myPA = [1, 2, 3]; // incrementation is parallelized on the GPU myPlusPA = myPA.mapPar(val => val + 1);
myPA = [1, 2, 3]; // incrementation is parallelized on the GPU myPlusPA = myPA.mapPar(val => val + 1);
OpenCL (behind the scene)
Multicore and web apps? No way.
River Trail bit.ly/qme8BY
You may never use these, but they will make you a better developer, so keep
learning new stuff.
Creativity, but stepping back from technology.
GoalExperiment
FailIterate
Not good!Not good
Looks good!
Looks good!
Success is not an event, it is a process. James Clear.
@thibault_imbert
Thank you!