DevCon5
an HTML5 & Mobile App Developers Conference
July 21-22, 2015
Look... That's me!

The Main Room

The View

With Anna

Web RTC
RTC stands for Real Time Communications
- WhatsApp - instant messaging
- rabb.it - watch TV together
- live.pics.io - photo sharing and voice channel
Peter Dunkley, Technical Director, Acision
People's behavior is changing
- Voicemail isn't necessary
- Leave a text
- Send IM before call
Businesses need to provide programs with BYOD (Bring Your Own Device), because people will bring their own software as well.
Examples in Industries
- Online gambling a huge industry
- online is cards vs in person is playing against the person
- Need P2P high reliability, secure, heavily encrypted...
- mhealth - mobile healthcare
RTC not just WebRTC
- Don't forget you can use the server side to perform complex routing
- Web RTC call centers
Evolution of the Mobile Web
- Presentation mostly about Web RTC
- demo.kaazing.com
Franc Greco, Director, Kaazing Corporation
Enter web sockets!
- Http was not designed for real time, event based services
- Real time bi directional connectivity
- Avoids polling and resource consumption
- Avoids meta data overhead
-
Web sockets is an actual protocol
- Ws://
- Wss://
- Nodejs/socket.io...
Things to Consider
- What happens when the connection breaks?
- How do you guarantee delivery?
- What about large amounts of data over 3g?
APIs
- Growth in apis
- BLAHaaS
- REST is an acronym!
- RPC similar to REST?
- Esb similar to isb?
- Instead of vpn?
- Kaazing is a web socket implementation?
Making Mobile Browsers
- Write native web, not native app
- Browsers are getting better and more efficient.
- Browser developers are developing mobile first
- Slowly moving from gpu to cpu
- Future is html
- Skia Ganesh - graphics rendering
- Blink - Chromium rendering engine
- Slimming paint - another Chromium projects
Matt Spencer, UI and Browser Marketing Manager, ARM
Design Patterns for JavaScript
- Gang of Four (1994) publishes Design Patterns
- Many of these patterns have been incorporated into the languages
- Remember Uncle Ben! (from Spider Man)
- “With Great Power Comes Great Responsibility"
- AJAX is usually really AJAJ! (JSON instead of XML)
Tiego Garcia, Tech Manager at Avenue Code/Tech Lead at Macys.com
Constructor (old hat)
- {};
- vs Object.create(Blah.prototype);
- vs new Blah();
Facade/Revealing Object
- Wrapper for apis etc (so you can swap out changeable components or to simplify an api)
- IIFE (immediately invoked function expression) to hide the innards of a function or object
Module Loader and Dependency Injection
CommonJS
module.exports
import using require(dependency)
Pros
- synchronous (guaranteed order)
- simple convenient syntax
- official node.js and npm format
Cons
- doesn’t naturally work on browser (browserify and webpack to fix this)
- sequential loading of modules is slower than asynchronous
- npm dependency tree can skyrocket easily
AMD
widely used on browsers (not so much on server side)
Pros
- multiple modules can be loaded in parallell (asynchronous)
- works naturally with browsers
- easy to do lazy loading of modules
Cons
- Complex
- Easy to create race conditions
- Order of execution is not guaranteed
- Dependencies’ Array declaration can get bloated
AMD (cont)
- Require.js is typical declaration
- INTEROP?
- UMD, SystemsJS, and uRequire allow your code to run in both standards (although there are annoying caviats with each)
- Almond (supports amd implementation for sync and async)
ES6 Modules
- allow export each function
- will support sync and async loading
- Babel.js can be used today (as a transpiler)
- works same way on browser and server
Observer
- Event listeners
- Subject notifies listeners
- Subject has references to the observers
- How can we do better?
Mediator/Pub-Sub
- Subject talks to a mediator
- subject no longer has references to the observers (and vice versa)
- only has references to the mediator
Publishers and Subscribers (w/ mediator)
- Subscribe to a “channel"
- You publish to a “channel"
- Subscribers and Publishers do not have references to each other. Only the mediator has references to the Pub-Subs
Other Sources
- Javascript Patterns Stoyan Stefanov
- Addy Osmani - Learning JS Design Patterns
- The mind-boggling universe of Javascript module strategies (from tiago garcia - the speakers)
- Avenue Code
- tiagorg.com/talk-design-patterns-for-javascript-featuring-modules/
RTS in Web and Mobile Apps
-
Defining Real-time
- Same rate
- sometimes at the same time
voice and picture don’t really travel well over a distance
- speed
- absorption, reflection and interference
Boris Kock, Acision
Solutions (Via Telecom)
- use right frequency
- digitized data
- global infrastructure (the internet)
Use Cases
- not as strict as the clock hanging on the wall
- but we do need to keep that clock on the wall in mind (we can’t ignore delays etc)
- all about context
Use Cases (cont)
-- voice
-- communicaiton between apps
-- across the globe vs in-room lan
- content
-- huge files vs small pictures
-- personal vs enterprise (sharing photos vs sharing medical xrays)
- perspective
-- which location you are
-- how you want your data to be presented
User Expectations on communications
- secure
- authenticated
- robust
“New" technologies available
WebSocets
- bi-directional
- switch protocols to web socets
(WeSocket, HTTP, TLS, TCP)
RTC
- RTCWeb
<RTCWeb Slide> - webrtc.org/reference/architecture
- voice/video/transport
Media flows between User Agents
Signaling happens between the servers (usually?)
OAuth 2.0
- enable a 3rd party app to obtain access to HTTP services
Callback vs Async Hell
Nonblocking i/o in node.js
- event loop
- node is not single threaded
- but there is one javascript thread?
Has a thread pool
JS thread runs on V8 from javascript (so you don’t need to worry about it
"Event Loop”?
*events vs callbacks vs promises vs generators vs ...*
Be careful with
- execution time (never expect it to be consistent
- scope - returning a value or handline exception outside your functional block
- variable sc
ope and closures
- never use any global values
What’s wrong with callbacks
- instead of values we have function calls which can be really cumbersome to coordinate
Pyramid of Doom (nice slide with Street Fighter)
- extremely nested callbacks
Callback Hell
- always have to handle the error callback
<Look at examples when screen isn’t too bright>
async.waterfall? (using async.js library)
Collections
- each, map, filter, reduce, some...
Control Flow
- series, parallel, waterfall, compose...
Modularize
- expose your functions using package based modules
Promises
- hides the complexity of a callback into an object
- represents an eventual value of an asynchronous operation
- the promise doesn’t necessarily yet contain the value
- if it doens’t it must throw an error (most of the time) (it or you?)
- Here we get an object back right away - in pending mode
- The async operation does something and returns a value (fulfilled)
- The async operation fails and you will get an exception
- If you don’t respond to an exception, it will flow to anyone listening for an error (ie catch?)
Control Flow
- then - access value/reason
- all - wait for several promises
- race - wait for the first fulfilled promise
- catch
cascades in a linear way, rather than a nested way
Rule: From a promise... always return a promise if you don’t want to be in trouble (for error handling?)
(use a .catch after the last promise)
Always expose your package api as callback-based function
It’s a standard!
But no one prevents you to also return a promise ;)
Which will be standard with ES7?
Generators - ES6 feature
function* keyword?
yield (keyword)
Q.spawn?
blocking is easy
Not promises,
Not callback
Problem is we need an iterator... Not the same code, but I can read what’s going on
In node since v0.11.2
In chrome since 8.3.19
requires --harmony or -harmony-generators params
generators aren’t only iterators, you can push values into them as well to communicate between two places in the code
Like to see async/await keywords coming with ES7 (this is the future, but it’s not there yet - from .net and C#)
Async/Await
- Use babel experimental transpiler (to convert to C code and run there)?
What about “Go” from node.js (using channels to communicate between different parts of the code)
Modularize
- maintenance a lot easier
- promises and callbacks
- unit testing
Links
- developer-autodesk
-
Node vs apache
- apache is good as quick out of the box server of content
- if you want to use a language like php or python, you have to do a lot of more configuration
- lots of configuration with apache
- we can kill apache very quickly with DDoS (node copes better)
- good with CPU intense operations
- node, whatever you do, serves static or native javascript - node less than an hour to set up a server
- quick with heroku
- quick to get server up and running
- for CPU intense operations (need to delegate to someone else)
- good for writing webapps
- same code frontend and backend
- google V8 engine is very fast, so performance is good vs other scripting languages
npm-js.org (lots of libraries available)
Cyrille Fauvel, Senior Manager, Autodesk
Javascript Debugging
- You can add an XHR breakpoint (for network requests)!
- Break on source modification
- Watch when variable value changes
- Direct links to scripts containing methods
- Profiling section - you can see the times each function/method takes to execute (total vs self)
- UI Responsiveness (IE) / Timeline
- You can see GC in the timeline view (ideally minimize or hope it happens when ui isn’t "moving")
Sumit Amar, Director of Engineering, Electronic Arts
Memory Analysis
- Drip - for detecting memory leaks (IE) (also Memory tab)
- Heap Analysis (Chrome)
- take snapshot from chrome Profiles tab
- jit compiling (Just In Time compiling)
- can be useful when browser is crashing (start by checking chrome or other browser first)
Resources (tab)
Chrome Advanced tooling
chrome://about
chrome://memory-internals (and chrome://memory
- different pid for each tab
- similar to task manager - but with a lot more data
chrome://webrtc-internals
chrome://blob-internals (saved heap snapshots)
Remote Debugging in Safari
Firebug lite on a mobile device?
More!
- Resources (tab)
- Chrome Advanced tooling
- chrome://about
- chrome://memory-internals (and chrome://memory)
- different pid for each tab
- similar to task manager - but with a lot more data
- chrome://webrtc-internals
- chrome://blob-internals (saved heap snapshots)
- Remote Debugging in Safari
- Firebug lite on a mobile device?
Discussion: Performance & Responsive Design
- Responsive vs adaptive (combo) might be better for performance
- D for P - design for performance (new thing)
- Need to design for all views, not just desktop.
- Check that the main thing of your site is rendered. Try chrome dev tool mobile device and bandwidth spoofing.
- Devs and designers pair. Get stuff done way faster. Less waterfall.
- Think about team organization. Don't have a mobile and desktop silo.
Metrics are key from the start.
Segment.io (mvt framework?)
Eye tracking metrics from a usability testing lab.
Tweaking animations in realtime in chrome?
Make sure you know your target audience.
Leverage open source software.
Online tutorials of chrome dev tools.
Bandwidth atenurator CHROME DEV TOOLS.
Github is a breakthrough.
Bootstrap, React.
Stripe?
Forecast.io?
Google for performance...
Skack communitues are good to follow.
Radware does adaptive techniques...
- Guy pagarni acamai - adaptive - guypo
Sean Allen, Kent Alstad, Courtney Hemphill
Discussion: Performance & Responsive Design (cont)
- Metrics are key from the start.
- Segment.io (mvt framework?)
- Eye tracking metrics from a usability testing lab
- Tweaking animations in realtime in chrome?
- Make sure you know your target audience.
- Leverage open source software.
- Online tutorials of chrome dev tools.
- Bandwidth attenuator CHROME DEV TOOLS.
- Github is a breakthrough
- Stripe?
- Forecast.io?
- Look at Google for performance...
- Skack communitues are good to follow.
Radware does adaptive techniques...
- Guy pagarni acamai - adaptive - guypo
ES6 and Beyond
- ES6 === ES 2015
- ES7 === ES 2016
- Yearly releases for JS
Jafar Husain, Cross-Team Technical Lead, Netflix
Making async easier (main focus from the committee)
Arrow Functions =>
- ES 2015
- x => x+1
- (x,y) => x+y
- Code is getting simpler
Async Without Callbacks
- Blocking is easy
- Blocking means Pulling (stopping the world and pulling a value out of a function
- What if we want to wait instead of block?
- Waiting means Pushing (hand the function a value and it pushes it to you)
- This is how node works
More
- What if waiting were as simple as blocking (Promises)
- Can we make them look the same (blocking and waiting)
function* and yelid keyword
How it works
Effectively a state machine - turned into by the compiler
Fibonnacci using this is cool (can use while true with yield, will compute forever!)
Iteration
Consumer and Producer
The Consumer pulls values out of the Producer until the Producer says they are done.
If generator functions return Iterators... why are they called generators?
Made of up a generator and an observer
Can take a value out and push a value in.
Can push a value in or you can push a value or an error in or a vfinal value in.
Really interesting and powerful.
Not just a one-way flow, like an iterator.
Generators allow feeback, both directions! Crazy!!!!!!!!
Waiting with Async Iteration
yield will evaluate to a value... not just a return statement
“Asyncronous iteration"
whatever I push back into the generator replaces the “yeild” portion... the consumer pushes the value in and gets a promise... you can use the value you got from the promise... or you can use a different value...?
Curly braces to declare tuplies
Task.js includes the spawn function (node ..........
Why should waiting be downloaded in a library
ES2016 - async functions
Light syntactic sugar
- spawn → async
- yield → await
Generators are coming in ES 2015
Symmetrical support for blocking and waiting
What’s the difference between an event and a collection...?
It doesn’t have to be that way (they are really the same)..
Events are just collections pushed at as...
Anything you can do to arrays or iterators, are things you can do with collection...
We can be more sophisticated than a bunch of callbacks
ES 2015 is used by netflix in prod by using transpilers
Babel - ES 2015 is totally safe (ES 2016 are not yet fully baked)
Browsers will let you debug in core technology
ES Feature Maturity Stages
0. Strawman
1. Proposal
2. Draft
3. Candidate
4. Finished
The await keyword is great if you want to wait on one value...
increasingly dealing with streams of data (waiting on multiple data)
ES 2015 - all collections are iterable
New for loops (for of loop
for(var x of [123,123,234234]) {
...
}
Future version (might see)
for...on (might be able to “wait on” this)
a loop that waits on values pushing at you
large majorities of code won’t need callbacks at all
The web has NO standard of watching apis?
introducing Observable
- swapped arguments and return type of Iterable
- accepts a generator and returns nothing
- iteration in reverse
Anything you can do in iteration... you can do in observation
Imagin writing sql queries over events...
Declaratively writing queries over
.observer({
regular()
done()
failure()
});
.forEach(regular()).
.then( done(), failure())
ADDING SUGAR TO OBSERVATION SLIDE ^^^^
For loop over an async dom stream
...what should an async function* return?
FUNCTION TYPES RETURN TABLE.... OBSERVABLE IS THE ANSWER... NOT GOING TO MAKE IT IN ES 2016... MIGHT HAVE TO WAIT FOR 2017
PUSH AND PULL ARE SYMMETRICAL (NETFLIX USES IT EVERYWHERE) - THINK OF THEM AS STREAMS OF DATA - USE MAP/FILTER/REDUCE
JHUSAIN/ASYNCGENERATOR
HE WILL TWEET A LINK FOR NEXT JAVSCRIPT
ASYNC AWAIT
RESOURCES
GO GET A TRANSPILER (YOU NEED A BUILD STEP FOR YOUR WEBSITE) - YOU NEED A BUILD STEP FOR YOUR WEBSITE
CODE TO THE TRANSPILER... YOU DON’T NEED OT WAIT
var {x, y} = {x: “hi”, y: “blah”}
Someone asked about typescript (a transpiler ++ and give you optional type stuff)
https://babeljs.io/docs/learn-es2015/
Destructuring
Destructuring allows binding using pattern matching, with support for matching arrays and objects. Destructuring is fail-soft, similar to standard object lookup foo["bar"], producing undefined values when not found.
// list matching var [a, , b] = [1,2,3]; // object matching var { op: a, lhs: { op: b }, rhs: c } = getASTNode() // object matching shorthand // binds `op`, `lhs` and `rhs` in scope var {op, lhs, rhs} = getASTNode()
Generator Function (most powerful and most mis-understood)
function* getNumbers() {
yield 42;
yield 32;
return 19;
}
var iterator = getNumbers();
iterator.next(); // {value: 42; done: false};
iterator.next(); // {value: 32; done: false};
iterator.next(); // {value: 19; done: true};
“Returns power back to the user"
“Resumes right in the middle of a function"
How it works
- Effectively a state machine - turned into by the compiler
- Fibonnacci using this is cool (can use while true with yield, will compute forever!)
Iteration
Consumer and Producer
The Consumer pulls values out of the Producer until the Producer says they are done.
If generator functions return Iterators... why are they called generators?
- Made of up a generator and an observer
- Can take a value out and push a value in.
- Can push a value in or you can push a value or an error in or a final value in.
- Really interesting and powerful.
- Not just a one-way flow, like an iterator.
- Generators allow feedack, both directions!
Waiting with Async Iteration
- yield will evaluate to a value... not just a return statement
- “Asyncronous iteration"
- whatever I push back into the generator replaces the “yeild” portion... the consumer pushes the value in and gets a promise... you can use the value you got from the promise... or you can use a different value...?
Curly braces to declare tuplies
- Task.js includes the spawn function (node ..........
Why should waiting be downloaded in a library
(ES2016 - async functions)
Light syntactic sugar
- spawn → async
- yield → await
Generators are coming in ES 2015
Symmetrical support for blocking and waiting
What’s the difference between an event and a collection...?
It doesn’t have to be that way (they are really the same)..
Events are just collections pushed at as...
Anything you can do to arrays or iterators, are things you can do with collection...
We can be more sophisticated than a bunch of callbacks
Use Now?
ES 2015 is used by netflix in prod by using transpilers
Babel - ES 2015 is totally safe (ES 2016 are not yet fully baked)
Browsers will let you debug in core technology
ES Feature Maturity Stages
0. Strawman
1. Proposal
2. Draft
3. Candidate
4. Finished
Oh, geeze... more!
- The await keyword is great if you want to wait on one value...
- increasingly dealing with streams of data (waiting on multiple data)
- ES 2015 - all collections are iterable
- New for loops for of loop
for(var x of [123,123,234234]) {
...
}
... and more...
Future version (might see):
- for...on (might be able to “wait on” this)
- a loop that waits on values pushing at you
- large majorities of code won’t need callbacks at all
... and more... and more...
The web has NO standard of watching apis?
Introducing Observable
- swapped arguments and return type of Iterable
- accepts a generator and returns nothing
- iteration in reverse
... and more... and more...
Anything you can do in iteration... you can do in observation
Imagin writing sql queries over events...
Declaratively writing queries over
.observer({
regular()
done()
failure()
});
.forEach(regular()).
.then( done(), failure())
... and more... and more...
ADDING SUGAR TO OBSERVATION SLIDE ^^^^
For loop over an async dom stream
...what should an async function* return?
FUNCTION TYPES RETURN TABLE.... OBSERVABLE IS THE ANSWER... NOT GOING TO MAKE IT IN ES 2016... MIGHT HAVE TO WAIT FOR 2017
PUSH AND PULL ARE SYMMETRICAL (NETFLIX USES IT EVERYWHERE) - THINK OF THEM AS STREAMS OF DATA - USE MAP/FILTER/REDUCE
JHUSAIN/ASYNCGENERATOR
HE WILL TWEET A LINK FOR NEXT JAVSCRIPT
ASYNC AWAIT
RESOURCES
GO GET A TRANSPILER (YOU NEED A BUILD STEP FOR YOUR WEBSITE) - YOU NEED A BUILD STEP FOR YOUR WEBSITE
CODE TO THE TRANSPILER... YOU DON’T NEED OT WAIT
var {x, y} = {x: “hi”, y: “blah”}
Someone asked about typescript (a transpiler ++ and give you optional type stuff)
https://babeljs.io/docs/learn-es2015/
Destructuring
Destructuring allows binding using pattern matching, with support for matching arrays and objects. Destructuring is fail-soft, similar to standard object lookup foo["bar"], producing undefined values when not found.
// list matching var [a, , b] = [1,2,3]; // object matching var { op: a, lhs: { op: b }, rhs: c } = getASTNode() // object matching shorthand // binds `op`, `lhs` and `rhs` in scope var {op, lhs, rhs} = getASTNode()
... and more... and more...
- JHUSAIN/ASYNCGENERATOR
- ASYNC AWAIT
- RESOURCES
- GO GET A TRANSPILER (YOU NEED A BUILD STEP FOR YOUR WEBSITE) - YOU NEED A BUILD STEP FOR YOUR WEBSITE
- CODE TO THE TRANSPILER... YOU DON’T NEED OT WAIT
https://babeljs.io/docs/learn-es2015/
Destructing
Destructuring allows binding using pattern matching, with support for matching arrays and objects. Destructuring is fail-soft, similar to standard object lookup foo["bar"], producing undefined values when not found. // list matching var [a, , b] = [1,2,3]; // object matching var { op: a, lhs: { op: b }, rhs: c } = getASTNode() // object matching shorthand // binds `op`, `lhs` and `rhs` in scope var {op, lhs, rhs} = getASTNode()
business lunch
Automotive Disruption (kitt as disruption)
free IDEs
Venture Capital
"Biggest mistake was to look for buy-in from other people. All that matters is that you wake up and take a chance."
“People need other people to believe in them."
Lead Singer - stage presence
Drummer - who’s keeping the beat and making sure things are still running
Cover band or Original Music
What genre of music? Or new type of music?
People who ask for your financials aren’t interested in you.
Never interested on their forecasts, but investing based on the people and their ability to pivot.
Almost every successful company is not doing what they set out to do, but they were able to adapt and find the successful path.
Know within 5 minutes if i want to invest... Then the rest of the 25 minutes is for them trying to convince me that I shouldn’t.
Do what makes you happy. You can always go back to what you hate.
Underground Security
Underground Security
Recon - research, social engineering
Scan/Probe - scan for vulnerabilityies
Gain Access - exploit vulnerabilityes
Main Access - establish persistence
Cover up tracks - delete logs
Threats
- BaaS Service Exploitation
- Social Network oAuth Exploitation
- eCurrency Theft
- HTML5 Exploit Vectors
- MITB (Man in the Browser Malware)
securityscorecard.com
The risk of the third party... only as strong as the weakest link
Brian Krebbs blog?
Github and Dropbox
***Everyone is going to get breached... it’s going to be about how people respond to it...***
What shall we do...?
- as a company?
- as a person with a blog?
- as a person with a personal website?
As a person... what should I be doing to help protect my information.
Just need the last 4 of social (and can be brute forced) - Security questions can all be gleamed off of a credit report...
aheid@securityscorecard.io
www.securityscorecard.com
Default embedded passwords can send booter passwords (router passwords - toasters - etc)
brute forces passwords...
keepass keeypass x
create local encrypted container (local password manager)
windows or mac os should not be used
mac is where windows was 10 years ago...
run a flavor of linux lput a virtual box on it and run terrible vulnerable interface and run it in a sandbox
for developers
- php - rips project - free source code review
- google.com (search owasp source code review (code review project) - www.owasp.org
wordpress
- wordfence (reports and blocks reports) - autoupdating
threatmap.securityscorecard.com
Progressive JPEGs... Good? Evil?
Progressive JPEGs... Good? Evil?
Kent Alstad
StrangeLoop Networks (sold to radware) and accelerates offline
Initial idea - faster the pixels on the screen the better, right?...right?
Images are usually 60% of the total.
httparchive.com (steve souders)
--you can look at for day to day
Progressve JPEGs FTW?
Assumption: that pixels are coming to the screen earlier will be appreciated (not a white screen)
Connected with Neorostrata
Normal way (JPEG loads from top down)
Progressive JPEG (becomes sharper and sharper)
*Stoyan Stefanov*, The Book Of Speed
- Progressive images are better (smaller payload - more on screen faster)
Even webpage test was telling you to convert to progressive JPEG (used to be F if not using them)
Test 1: Facial Action Coding
which type of image, induces the greatest engagement
if you aren’t engaged, then you haven’t registered and are digesting it...
hypotheseis above ^^ +more
said aside "($25 K dollars on these technologies)"
Test:
- original image
- perfect image (lossy image that is carefully degraded using a DCIM (resulting in 5% loss in quality with a much smaller total file size)
-- wepi format
-- progressive JPEG (blurry to less blurry)
Results :
- original
- PI
- PJ
- male vs female (male more flat)
- anomoly on youtube for men...
-- maybe men are more used to progressive images?
photograph in your eye or skin, then blow it up 150x or more, then you can see the blood going through their eye... same on skin (red/white/red/white)
Test 2
Implicit responses
- congruent stimuli vs incongruent stimuli
bold italics
vs
bold italics
pi (pie pye) gaze for i tracking on laptops etc (free? now)
important task is embedded in the image, vs not embedded in the image (mostly text)
Overall
- progressive jpegs for males are bad
Faster doesn’t mean more engaged...
They don’t even use progressive image rendering anymore because it might degrade conversion
Whole industry got it wrong.
Conclusions and interpretations
brain wants to do things in the least way possible
skip to the end
get to the punchline
if you introduce multiple steps
took more brain sugar to view images multiple times? (hypothesis)
brain has more work to do... and it has an easy button... don’t trick the brain with a teaser
can you just bottom line it (yes or no before the explanation)
yes, but here’s my reason
progressive images give you reason first, then give you the answer ☺︎ (talking with wife example)
if you make brain work harder people won’t like it
Suggestions
Different sized well optimized images for different sizes
webperformancetoday.com progressive image rendering good evil
radware neurostrata fall 2014
Takaways
Is faster better? Maybe not...
Where do we go from here?
October, in NY presenting next study...
hypothesis: faster is not always better, processing fleuency
brain processes images
- prototypicality is one of the keys (should look like what you expect it to)
aim for highest process fluency
(tracked heat maps - often used for usability) animated heat maps
hypo: slower web page, but take the elements of it that are important and present them in a way that doesn’t jump around - and keep them in focus
--- don’t use default font first (don’t let things jump around...)?
slower isn’t by default a bad idea
if only we understood websites as well as the guy drawing where’s waldo :)
check out spar.com (from the uk)
Put an image with everything there...
don’t place it and move it around
rotating banner or photoflipper has moved
don’t start the rotaing thing until after the on-load event
general principle
Design for Performance!
questions:
- what was the compression on the original image vs pi? (what if your pi was the same)
- which tool for compressing image (the “perfect image”)
- is using babies cheating... because normally we wouldn’t smile necessarily at a regular page... what about the ignoring the photo example
------ youtube with friendly cats
- when was the test run? (i feel like i’m more used to them now, so i might not be as opposed to them)
- do you think if we train people on progressive images, it will be easier?
260 people
DevCon5 Notes - July 2015
By Ben Gibson
DevCon5 Notes - July 2015
- 373