Fluent 2014 Notes
My notes from Fluent 2014.
Day 1 – Tutorials
Automate all the frontend things
- Kitt Hodsden @kitt http://ki.tt/fluent2014
- Live reload – google for it
- Browser Sync http://browsersync.io npm install -g browser-sync grunt browser-sync
-
setup a development profile, disable caching, etc
- Alfred http://alfredapp.com/ (similar to LaunchBar)
- Dash Documentation repo: http://kapeli.com/dash
- VM images for testing IE: http://modern.ie
Grunt.js
image sizing
grunt-contrib-imagemin make smaller for mobile, etc: grunt-responsive-images grunt-grunticon
non images
grunt-contrib-cssmin grunt-csscss grunt-contrib-uglify
reduce number of files
sprites: grunt-montage
SASS
- http://compass-style.org/
-
Commands:
gem update –system gem install sass sass –watch –line-numbers –style expanded scss:css compass watch
Books
- OOCSS?
- SMACSS: http://smacss.com
- Sass for Designers
- Pragmatic Guide To Sass
- Sass and Compass in Action
- http://css-tricks.com/sass-style-guide/
- http://developers.google.com/speed/docs/best-practices/rendering/
GUIs:
- CodeKit incident57.com/
- Compass app
- koala-app.com
- grunt-devtools chrome extensions
PhantomCSS grunt-phantomcss http://tldr.huddle.com/blog/css-testing/
From the beginning
- Faster HTML – autocomplete: Emmet, emmet.io – HTML expander
-
Yeoman:
npm install -g yo yo webapp
- Vagrant: scotch.io http://scotch.io/tutorials/get-vagrant-up-and-running-in-no-time
Attacking Web Applications
- http://fluentconf.com/fluent2014/public/schedule/detail/31818
- https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
- https://wifipineapple.com/
- DroidSheep
- zANTI
- http://haveibeenpwned.com/
- http://blog.sashag.net
- hsts: http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Effective Collaboration on GitHub
- http://fluentconf.com/fluent2014/public/schedule/detail/32989
- push early to communicate that you are working on something
- Local and remote tracking are local to laptop, GitHub master is remote/cloud
-
credential cache – keychain, need settings?
-
fixed a repo problem: git remote set-url origin https://githubstudent@github.com/githubstudent/example-basic.git
-
Commands:
git config –global user.name git config –global user.email git config –global color.ui
git clone https://github.com/githubteacher/example-basic
git branch jdugan-fluent
git log –oneline –decorate
git checkout jdugan-fluent
git push -u origin jdugan-fluent
touch jdugan.md git add jdugan.md git commit -m “introducing …”
$EDITOR jdugan.md git add jdugan.md git commit -m “add more stuff” git status git push -u origin jdugan-fluent
add a file via web ui merge pull requst via web ui
this fails: git push
need to pull:
git pull git push
git log –oneline –graph –decorate –all
Day 2 – 3/12/2014
Brendan Eich
- script async?
- module tag
- “Low road”
- literal syntax for new value types
- SIMD
- end goal – near native performance
- emscriptem all over the place
- native browser / no plugins – game engines, nifty
- “High road”
- Note: to read: http://remysharp.com/2010/10/08/what-is-a-polyfill/
Pamela Fox, Khan Academy
- http://khanacademy.org/cs/programming
- Nature of Code – physics using JS: http://natureofcode.com/
JavaScript Virtal Machines and the Cloud; Scott Hanselman, Microsoft
- podcast, etc http://www.hanselman.com/
- Bizarro world, MicroSoft on GitHub?
Border Radius, Lea Verou
- http://lea.verou.me/
- interesting, but is this totally misguided?
Performance, Ilya Grigorik
- Browser Networking, OReilly Book
- 10ms limits in games, but 10ms no big deal in ecommerce
- 60 fps is 16ms for video, 1ms jitter in audio is perceptible (but some gaps are ok)
- perceived performance = f(expected, UX, actual)
- experience = f(perceived perf, task completion)
Practical Workflows ES6 Modules, Guy Bedford
- Why use ES6 modules?
- browserify vs require.js – not compatible, etc
- try to get to a common place
- ES6 defines module syntax & module loader
- Separate browser spec: system browser loader
- Traceur github.com/google/traceur-compiler
- (what is aurora.app?)
- NodeJS Entry Point
- module.js: export var test = ‘es6’;
- app.js: import {test} from ‘./module’;
- example of ES6 classes
- traceur –dir app app-build –modules=commonjs
- SystemJS:
- got lost here somewhere … lots of stuff I have no background for
Interface Design Considerations for Data Visualization, Scott Murray
- @alignedleft, alignedleft.com
- kindred britain, kindred.stanford.edu
- Design process.
- Visual Structure
- Outline the content, as detailed as possible
- Wireframes to to mockups
- exploratory mode and explanatory mode
- Navigation Structure
- conistency is important – navigational language 3, Interaction
- Color
- “Position is everything. Color is difficult.”
- Authorship: signing your work?
- read the essays about Kindred Britain on the site
- Visual Structure
Managing JavaScript Complexity in Teams, Jarrod Overson
- Late for this one, good to go back and review
- http://jarrodoverson.com/blog/
- https://github.com/es-analysis/plato
WebCL: A Secure Solution for Accelerating Web Applications
- http://fluentconf.com/fluent2014/public/schedule/detail/32649
- https://www.khronos.org/files/opencl-quick-reference-card.pdf
Where’’s my straw?
- This looks worth going back to on video:
- http://fluentconf.com/fluent2014/public/schedule/detail/32381
The Perception of Speed
Static Types are Overrated: The Dynamic Duo - Loose Types and Object Extension
- http://fluentconf.com/fluent2014/public/schedule/detail/33114
- Carmack article on static code analysis: http://www.altdevblogaday.com/2011/12/24/static-code-analysis/
- tern.js http://ternjs.net/
- debugging “oscilliscope for code” http://trace.gl/
- Chrome: Dominators view? Find dangling DOM
- TDD – tests first
- jsdoc, DocBlockr for Sublime
- The Joys of Static Memory JavaScript http://www.youtube.com/watch?v=Op52liUjvSk
- Random list of Mac dev apps: https://gist.github.com/erikreagan/3259442
Code Risk Management at Twitter
- didn’‘t attend may be interesting
- http://fluentconf.com/fluent2014/public/schedule/detail/32538
Inside JavaScript Execution
- http://fluentconf.com/fluent2014/public/schedule/detail/33116
- Object Specifications
- objects/hashes/dicts
- array objects / sparse arrays
- classes as structs
- Objects vs primitives
- ojects are pointer references
- primitives are store directly (potentially faster)
- don’t box primitives (var s = “hi”; s.x =5;)
- Mr Aleph http://mrale.ph/
- Andy Wingo http://wingolog.org/
6 Bottles of RUM: Surprising Stories of Mobile Behavior in the Real World
- http://fluentconf.com/fluent2014/public/schedule/detail/32476
- Mobile performance
- lots of people are using mobile devices: phone + table = 50%?
- 3G to LTE there is a 20x gain in speed
- load speed is more related to latency than to speed (esp over 3 Mbps)
- performance patterns vs anti-patterns: eg. CDN doesn’t work if you are localized
- need to measure in order to optimize
- Mobile speed, state of the union:
- 0 byte image; headers only; pretty grim
- https://developers.google.com/speed/articles/web-metrics/
- how many measurements in the carrier breakdown?
- Cookies increase the size of the payload:
- MSS/MTU, slow start and fragmentation
- 10% performance loss for large cookies; 1% for <= 400 bytes
- Parallelism to the rescue?
- 4-6 in modern browsers
- domain sharding – game the system with multiple names
- with 4x shards we have 24 simultaneous connections, probably not good
- gains for sharding are pretty minimal
- HTTP 2.0 allow multiplexing a single connection – claim to make completely obsolete, I disagree possibly
- Materializing images
- sprites are generally faster than dataURIs
- Conversions & carousels
- swipe surprisingly low interaction in one study
- CSS
- Souders CSS experiment http://www.stevesouders.com/blog/2009/03/10/performance-impact-of-css-selectors/
- Similar results for mobile
- although CSS has gotten bigger / more complex and tests don’t cover all of this
Feature Branches as an Art
- http://fluentconf.com/fluent2014/public/schedule/detail/33095
- Didn’t attend, watch on video?
Day 3, 3/13/2014
Delivering the goods, Paul Irish
- @paul_irish
- An Engineer’s Gude to Optimization
- Speed Index
- http archive
- not all requests are equal – what part of the UX is impacted?
- video is bandwidth limited, web browsing is latency limited
- TCP slow-start, particularly bad for mobile
- http://www.webpagetest.org/
- http://www.webpagetest.org/result/140313_CN_Q0Z/1/details/
- CSS adn the critical path Patrick Hamann
- Eliminate render-blocking CSS
- Minimize render-blocking CSS
A Love Letter to HTML, Jen Simmons
- Podcast: the web ahead
- Rah Rah
Understing your user’s experience, Christine Sotelo, New Relic
- JavaScript Error reporting
Beyond Pushing Play, Susan McGregor
- Johnny Cash Project, collaborative art
- Epic Rap Battle: Steve Jobs vs. Bill Gates
- Popcorn mixup?
The Goodness of JavaScript, Aaron Frost and Dave Geddes
- JS Jabber podcast
- http://trollcount.com/
Fluent Hardware Showcase, John McKay
- Beaglebone
- tessel.io
In Defense of Frameworks, Yehuda Katz and Tom Dale
- ember.js
- “You call a library. A framework calls you.” is insufficient
- Dependency Injection
- Everyone who builds multiple apps eventually builds there own “framework” to start proejcts with
- “You’re doing it wrong”
- Toolkits all have “Best PRactice Guides” to help new developers
ExpressJS
- http://fluentconf.com/fluent2014/public/schedule/detail/32484
- http://expressjs.com
- https://github.com/guyellis/Introduction-to-ExpressJS/
- blog post: http://x.co/fluent2014
Asynchronous Promises, Kris Kowal
Leaflet, Node.JS, and MongoDB for a easy and fun web mapping experience, Steven Citron-Pousty
- http://fluentconf.com/fluent2014/public/schedule/detail/31698
- http://talks.thesteve0.com/fluentwebcast/
- Mongo Spatial
- Near
- Containment
- Intersection
- 2D indices and 2D sphere coords on earth like sphere, great circle distance
- http://leafletjs.com/
- http://fluentwebmap-spatial.rhcloud.com/
- https://github.com/thesteve0/fluentwebmap.git
- Also check out MapBox http://mapbox.com/
Writing Real Time Web Apps, Wesley Hales
- http://fluentconf.com/fluent2014/public/schedule/detail/32856
- http://wesleyhales.com/
- SPDY: http://www.chromium.org/spdy
- WAMP: WebSocket
- PubNub http://www.pubnub.com/ and Pusher http://pusher.com/