├── asset ├── img │ ├── .gitignore │ ├── ie.png │ ├── map.png │ ├── adobe.png │ ├── azure.png │ ├── bobby.png │ ├── dshaw.png │ ├── glenn.png │ ├── jden.png │ ├── logo.png │ ├── tree.png │ ├── adron.jpeg │ ├── cloudant.png │ ├── domenic.jpg │ ├── github.png │ ├── hubsea.png │ ├── ie-small.png │ ├── ineeman.png │ ├── jdalton.jpeg │ ├── jdalton.png │ ├── mandrill.png │ ├── merrick.jpg │ ├── secret1.png │ ├── secret10.png │ ├── secret2.png │ ├── secret3.png │ ├── secret4.png │ ├── secret5.png │ ├── secret6.png │ ├── secret7.png │ ├── secret8.png │ ├── secret9.png │ ├── sendgrid.png │ ├── sintaxi.jpg │ ├── twilio.png │ ├── twitter.png │ ├── alexlande.png │ ├── dgreenspan.jpg │ ├── emilyrose.jpeg │ ├── saucelabs.png │ ├── syntacticx.jpg │ ├── thoward37.jpg │ ├── topfunky.jpeg │ ├── azure-small.png │ ├── carterrabasa.png │ ├── cheezburger.png │ ├── chriswilliams.jpg │ ├── dominictarr.png │ ├── jerrysievert.png │ ├── kitcambridge.png │ ├── markcowlishaw.png │ ├── rickwaldron.jpg │ ├── subtle_dots.png │ ├── twilio-small.png │ ├── whereisciao.jpg │ ├── angelinafabbro.jpg │ ├── mattpodwysocki.png │ ├── cheezburger-small.png │ ├── subtle_dots_blue.png │ ├── subtle_dots_green.png │ └── speaker-placeholder.png ├── css │ ├── scss │ │ ├── _state.scss │ │ ├── _variables.scss │ │ ├── _breakpoint1.scss │ │ ├── _hidpi.scss │ │ ├── site.scss │ │ ├── _layout.scss │ │ ├── _print.scss │ │ ├── _base.scss │ │ ├── _helpers.scss │ │ ├── _modules.scss │ │ └── _normalize.scss │ └── site.css ├── pdf │ └── sponsor_brochure.pdf ├── js │ ├── site │ │ ├── site.min.js │ │ └── site.js │ ├── compiled │ │ ├── site.min.js │ │ └── site.js │ ├── main.js │ └── vendor │ │ └── modernizr-2.6.2.min.js └── grunt │ ├── include │ └── reloadClient.js │ ├── compass.js │ ├── img.js │ └── reload.js ├── CNAME ├── .gitignore ├── proposal ├── images │ ├── jden.png │ ├── chustar.png │ ├── dshaw.png │ ├── ineeman.png │ ├── janedoe.png │ ├── jdalton.png │ ├── molant.png │ ├── ozten.jpg │ ├── raynos.png │ ├── revin.png │ ├── rwldrn.jpg │ ├── sintaxi.jpg │ ├── skoon.jpg │ ├── airportyh.png │ ├── coderoshi.jpg │ ├── crcastle.png │ ├── dgreensp.jpg │ ├── joeeames.png │ ├── lorenwest.png │ ├── mdarnall.jpg │ ├── pconerly.png │ ├── topfunky.jpg │ ├── chewbranca.png │ ├── delvarworld.png │ ├── dominictarr.jpg │ ├── dustyjewett.jpg │ ├── fivetanley.jpg │ ├── howardabrams.png │ ├── iammerrick.png │ ├── kitcambridge.png │ ├── troythewolfe.jpg │ ├── halffullheart.png │ ├── mattpodwysocki.png │ └── matthew_bergman.jpg ├── making-robots-walk_rwldrn.md ├── proposal-template_janedoe.md ├── sailing-at-midnight-kitcambridge.md ├── add-lightness_revin.md ├── survey-of-backbone-plugin-ecosystem.md ├── cheap-design-into_chustar.md ├── stream-all-things_raynos.md ├── make-nodjs-your-framework-agnostic-worker_pconerly.md ├── js-in-your-chrome-extension_pconerly.md ├── persona-login-that-just-works_ozten.md ├── the-tyranny-of-choice.md ├── observable-nodejs_dshaw.md ├── optimize-your-tdd_airportyh.md ├── promises-for-profit_delvarworld.md ├── excel-in-the-browser_halffullheart.md ├── distributed-programming-for-kids_dominictarr.md ├── model-view-rockstar_dustyjewett.md ├── big-data-real-time_ineeman.md ├── rethinking-distributed-systems-with-nodejs_sintaxi.md ├── understanding-asynchronous_coderoshi.md ├── app-scale-all-the-things-typescript_jden.md ├── whirlwind-tour-couchapps-and-viz-with-d3-and-friends_chewbranca.md ├── are-we-there-yet_jden.md ├── testing-like-a-boss_mdarnall.md ├── lodash-for-a-better-utility-belt_jdalton.md ├── does_size_matter__microjs_fx_vs_macrojs_fx_skoon.md ├── learn-from-the-masters_topfunky.md ├── realtime-monitoring-with-nodejs_lorenwest.md ├── tdd-with-angularjs_joeeames.md ├── easy-dynamic-websites-using-fuzzytoast_howardabrams.md ├── requirejs-to-tame-your-javascript_iammerrick.md ├── dark-secrets-of-dirty-projects_molant.md ├── windows-8-apps-in-javascript-the-good-the-bad-and-the-ugly.md ├── tdd-in-javascript_joeeames.md ├── async-javascript_johnkpaul.md ├── reactive-html-with-meteor_dgreensp.md ├── the-real-bad-parts_johnkpaul.md ├── curiosity-killed_fivetanley.md ├── keg.io_crcastle.md ├── dont_cross_the_streams-mattpodwysocki.md └── README.md ├── README.md ├── grunt.js └── index.html /asset/img/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | cascadiajs.com 2 | -------------------------------------------------------------------------------- /asset/css/scss/_state.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store -------------------------------------------------------------------------------- /asset/css/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $accent: rgb(50, 163, 90); 2 | $background: lighten(#268bd2, 45%); -------------------------------------------------------------------------------- /asset/img/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/ie.png -------------------------------------------------------------------------------- /asset/img/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/map.png -------------------------------------------------------------------------------- /asset/img/adobe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/adobe.png -------------------------------------------------------------------------------- /asset/img/azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/azure.png -------------------------------------------------------------------------------- /asset/img/bobby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/bobby.png -------------------------------------------------------------------------------- /asset/img/dshaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/dshaw.png -------------------------------------------------------------------------------- /asset/img/glenn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/glenn.png -------------------------------------------------------------------------------- /asset/img/jden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/jden.png -------------------------------------------------------------------------------- /asset/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/logo.png -------------------------------------------------------------------------------- /asset/img/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/tree.png -------------------------------------------------------------------------------- /asset/img/adron.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/adron.jpeg -------------------------------------------------------------------------------- /asset/img/cloudant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/cloudant.png -------------------------------------------------------------------------------- /asset/img/domenic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/domenic.jpg -------------------------------------------------------------------------------- /asset/img/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/github.png -------------------------------------------------------------------------------- /asset/img/hubsea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/hubsea.png -------------------------------------------------------------------------------- /asset/img/ie-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/ie-small.png -------------------------------------------------------------------------------- /asset/img/ineeman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/ineeman.png -------------------------------------------------------------------------------- /asset/img/jdalton.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/jdalton.jpeg -------------------------------------------------------------------------------- /asset/img/jdalton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/jdalton.png -------------------------------------------------------------------------------- /asset/img/mandrill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/mandrill.png -------------------------------------------------------------------------------- /asset/img/merrick.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/merrick.jpg -------------------------------------------------------------------------------- /asset/img/secret1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret1.png -------------------------------------------------------------------------------- /asset/img/secret10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret10.png -------------------------------------------------------------------------------- /asset/img/secret2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret2.png -------------------------------------------------------------------------------- /asset/img/secret3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret3.png -------------------------------------------------------------------------------- /asset/img/secret4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret4.png -------------------------------------------------------------------------------- /asset/img/secret5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret5.png -------------------------------------------------------------------------------- /asset/img/secret6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret6.png -------------------------------------------------------------------------------- /asset/img/secret7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret7.png -------------------------------------------------------------------------------- /asset/img/secret8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret8.png -------------------------------------------------------------------------------- /asset/img/secret9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/secret9.png -------------------------------------------------------------------------------- /asset/img/sendgrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/sendgrid.png -------------------------------------------------------------------------------- /asset/img/sintaxi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/sintaxi.jpg -------------------------------------------------------------------------------- /asset/img/twilio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/twilio.png -------------------------------------------------------------------------------- /asset/img/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/twitter.png -------------------------------------------------------------------------------- /asset/img/alexlande.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/alexlande.png -------------------------------------------------------------------------------- /asset/img/dgreenspan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/dgreenspan.jpg -------------------------------------------------------------------------------- /asset/img/emilyrose.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/emilyrose.jpeg -------------------------------------------------------------------------------- /asset/img/saucelabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/saucelabs.png -------------------------------------------------------------------------------- /asset/img/syntacticx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/syntacticx.jpg -------------------------------------------------------------------------------- /asset/img/thoward37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/thoward37.jpg -------------------------------------------------------------------------------- /asset/img/topfunky.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/topfunky.jpeg -------------------------------------------------------------------------------- /proposal/images/jden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/jden.png -------------------------------------------------------------------------------- /asset/img/azure-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/azure-small.png -------------------------------------------------------------------------------- /asset/img/carterrabasa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/carterrabasa.png -------------------------------------------------------------------------------- /asset/img/cheezburger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/cheezburger.png -------------------------------------------------------------------------------- /asset/img/chriswilliams.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/chriswilliams.jpg -------------------------------------------------------------------------------- /asset/img/dominictarr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/dominictarr.png -------------------------------------------------------------------------------- /asset/img/jerrysievert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/jerrysievert.png -------------------------------------------------------------------------------- /asset/img/kitcambridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/kitcambridge.png -------------------------------------------------------------------------------- /asset/img/markcowlishaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/markcowlishaw.png -------------------------------------------------------------------------------- /asset/img/rickwaldron.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/rickwaldron.jpg -------------------------------------------------------------------------------- /asset/img/subtle_dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/subtle_dots.png -------------------------------------------------------------------------------- /asset/img/twilio-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/twilio-small.png -------------------------------------------------------------------------------- /asset/img/whereisciao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/whereisciao.jpg -------------------------------------------------------------------------------- /proposal/images/chustar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/chustar.png -------------------------------------------------------------------------------- /proposal/images/dshaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/dshaw.png -------------------------------------------------------------------------------- /proposal/images/ineeman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/ineeman.png -------------------------------------------------------------------------------- /proposal/images/janedoe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/janedoe.png -------------------------------------------------------------------------------- /proposal/images/jdalton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/jdalton.png -------------------------------------------------------------------------------- /proposal/images/molant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/molant.png -------------------------------------------------------------------------------- /proposal/images/ozten.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/ozten.jpg -------------------------------------------------------------------------------- /proposal/images/raynos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/raynos.png -------------------------------------------------------------------------------- /proposal/images/revin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/revin.png -------------------------------------------------------------------------------- /proposal/images/rwldrn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/rwldrn.jpg -------------------------------------------------------------------------------- /proposal/images/sintaxi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/sintaxi.jpg -------------------------------------------------------------------------------- /proposal/images/skoon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/skoon.jpg -------------------------------------------------------------------------------- /asset/img/angelinafabbro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/angelinafabbro.jpg -------------------------------------------------------------------------------- /asset/img/mattpodwysocki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/mattpodwysocki.png -------------------------------------------------------------------------------- /proposal/images/airportyh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/airportyh.png -------------------------------------------------------------------------------- /proposal/images/coderoshi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/coderoshi.jpg -------------------------------------------------------------------------------- /proposal/images/crcastle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/crcastle.png -------------------------------------------------------------------------------- /proposal/images/dgreensp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/dgreensp.jpg -------------------------------------------------------------------------------- /proposal/images/joeeames.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/joeeames.png -------------------------------------------------------------------------------- /proposal/images/lorenwest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/lorenwest.png -------------------------------------------------------------------------------- /proposal/images/mdarnall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/mdarnall.jpg -------------------------------------------------------------------------------- /proposal/images/pconerly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/pconerly.png -------------------------------------------------------------------------------- /proposal/images/topfunky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/topfunky.jpg -------------------------------------------------------------------------------- /asset/img/cheezburger-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/cheezburger-small.png -------------------------------------------------------------------------------- /asset/img/subtle_dots_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/subtle_dots_blue.png -------------------------------------------------------------------------------- /asset/img/subtle_dots_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/subtle_dots_green.png -------------------------------------------------------------------------------- /asset/pdf/sponsor_brochure.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/pdf/sponsor_brochure.pdf -------------------------------------------------------------------------------- /proposal/images/chewbranca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/chewbranca.png -------------------------------------------------------------------------------- /proposal/images/delvarworld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/delvarworld.png -------------------------------------------------------------------------------- /proposal/images/dominictarr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/dominictarr.jpg -------------------------------------------------------------------------------- /proposal/images/dustyjewett.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/dustyjewett.jpg -------------------------------------------------------------------------------- /proposal/images/fivetanley.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/fivetanley.jpg -------------------------------------------------------------------------------- /proposal/images/howardabrams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/howardabrams.png -------------------------------------------------------------------------------- /proposal/images/iammerrick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/iammerrick.png -------------------------------------------------------------------------------- /proposal/images/kitcambridge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/kitcambridge.png -------------------------------------------------------------------------------- /proposal/images/troythewolfe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/troythewolfe.jpg -------------------------------------------------------------------------------- /asset/img/speaker-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/asset/img/speaker-placeholder.png -------------------------------------------------------------------------------- /proposal/images/halffullheart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/halffullheart.png -------------------------------------------------------------------------------- /proposal/images/mattpodwysocki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/mattpodwysocki.png -------------------------------------------------------------------------------- /proposal/images/matthew_bergman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lorenwest/cascadiajs.github.com/master/proposal/images/matthew_bergman.jpg -------------------------------------------------------------------------------- /asset/css/scss/_breakpoint1.scss: -------------------------------------------------------------------------------- 1 | @media only screen and (min-width: 35em) { 2 | /* Style adjustments for viewports that meet the condition */ 3 | } -------------------------------------------------------------------------------- /asset/css/scss/_hidpi.scss: -------------------------------------------------------------------------------- 1 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 2 | only screen and (min-resolution: 144dpi) { 3 | /* Style adjustments for high resolution devices */ 4 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Website for cascadia.js conference. 2 | 3 | Run grunt during development for continuous Compass and JS compilation and LiveReload support (browser extension required). 4 | 5 | Run grunt build before deployment to do all of that stuff again and compress images. -------------------------------------------------------------------------------- /asset/css/scss/site.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | @import 'compass/css3/transform'; 3 | @import 'normalize'; 4 | @import 'helpers'; 5 | @import 'base'; 6 | @import 'layout'; 7 | @import 'modules'; 8 | @import 'state'; 9 | @import 'breakpoint1'; 10 | @import 'hidpi'; 11 | @import 'print'; -------------------------------------------------------------------------------- /asset/js/site/site.min.js: -------------------------------------------------------------------------------- 1 | /*! CascadisJS - v0.1.0 - 2012-10-02 2 | * http://cascadiajs.com/ 3 | * Copyright (c) 2012 Alex Lande; Licensed MIT */ 4 | console.log("Testing one two"),function(){var e=function(){},t=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeStamp","trace","warn"],n=t.length,r=window.console||{};while(n--)r[t[n]]=r[t[n]]||e}(); -------------------------------------------------------------------------------- /asset/css/scss/_layout.scss: -------------------------------------------------------------------------------- 1 | $block: 280px; 2 | 3 | .l-constrained { 4 | width: $block * 3; 5 | margin: 0 auto; 6 | padding: 0 24px; 7 | } 8 | 9 | .l-column { 10 | padding-left: 0; 11 | margin: 3em 0 0 -1.5em; 12 | list-style: none; 13 | } 14 | 15 | .l-single { 16 | width: $block - 24px; 17 | float: left; 18 | margin-left: 1.5em; 19 | } 20 | 21 | .l-double { 22 | width: $block * 2 - 24px; 23 | float: left; 24 | margin-left: 1.5em; 25 | } 26 | 27 | .first { 28 | margin-left: 0; 29 | clear: both; 30 | } -------------------------------------------------------------------------------- /asset/js/compiled/site.min.js: -------------------------------------------------------------------------------- 1 | /*! CascadisJS - v0.1.0 - 2012-10-17 2 | * http://cascadiajs.com/ 3 | * Copyright (c) 2012 CascadiaJS; Licensed MIT */ 4 | $(function(){$(".information-nav a").click(function(e){var t=$(this).attr("href");$(".information-tab, .information-nav a").removeClass("active"),$(t).addClass("active"),$(this).addClass("active"),e.preventDefault()}),Array.prototype.slice.call(document.querySelectorAll("h2[id]")).forEach(function(e){var t=document.createElement("a");t.href="#"+e.id,t.className="sct-anchor",e.appendChild(t)})}); -------------------------------------------------------------------------------- /asset/js/main.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | // information section tabs 4 | 5 | $('.information-nav a').click(function(e) { 6 | var target = $(this).attr('href'); 7 | 8 | $('.information-tab, .information-nav a').removeClass('active'); 9 | $(target).addClass('active'); 10 | $(this).addClass('active'); 11 | 12 | e.preventDefault(); 13 | }); 14 | 15 | // add anchor links for all section headers 16 | 17 | Array.prototype.slice.call(document.querySelectorAll('h2[id]')).forEach(function(h2) { 18 | var a = document.createElement('a'); 19 | a.href = '#' + h2.id; 20 | a.className = 'sct-anchor'; 21 | h2.appendChild(a); 22 | }); 23 | 24 | }); -------------------------------------------------------------------------------- /asset/js/compiled/site.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | 3 | // information section tabs 4 | 5 | $('.information-nav a').click(function(e) { 6 | var target = $(this).attr('href'); 7 | 8 | $('.information-tab, .information-nav a').removeClass('active'); 9 | $(target).addClass('active'); 10 | $(this).addClass('active'); 11 | 12 | e.preventDefault(); 13 | }); 14 | 15 | // add anchor links for all section headers 16 | 17 | Array.prototype.slice.call(document.querySelectorAll('h2[id]')).forEach(function(h2) { 18 | var a = document.createElement('a'); 19 | a.href = '#' + h2.id; 20 | a.className = 'sct-anchor'; 21 | h2.appendChild(a); 22 | }); 23 | 24 | }); -------------------------------------------------------------------------------- /asset/js/site/site.js: -------------------------------------------------------------------------------- 1 | console.log('Testing one two'); 2 | 3 | // Avoid `console` errors in browsers that lack a console. 4 | (function() { 5 | var noop = function noop() {}; 6 | var methods = [ 7 | 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 8 | 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 9 | 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 10 | 'timeStamp', 'trace', 'warn' 11 | ]; 12 | var length = methods.length; 13 | var console = window.console || {}; 14 | 15 | while (length--) { 16 | // Only stub undefined methods. 17 | console[methods[length]] = console[methods[length]] || noop; 18 | } 19 | }()); 20 | 21 | // Place any jQuery/helper plugins in here. 22 | -------------------------------------------------------------------------------- /proposal/making-robots-walk_rwldrn.md: -------------------------------------------------------------------------------- 1 | Making Robots Walk 2 | ======================== 3 | 4 | * Speaker : Rick Waldron 5 | * Available : 11/8 - 11/9, 2012 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Johnny-Five is a framework for programming Arduino robots on Node.js. Making Robots Walk entails sequential execution complexities that could only be solved by just letting Node be Node. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![rwldrn](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/rwldrn.jpg) 17 | 18 | 19 | I make things with JavaScript. 20 | 21 | 22 | 23 | Links 24 | ----- 25 | 26 | * Blog: [Rick Waldron](http://weblog.bocoup.com/author/rick-waldron/) 27 | * Company: [Bocoup](http://bocoup.com) 28 | * Github: [rwldrn](http://github.com/rwldrn) 29 | * Twitter: [@rwaldron](http://twitter.com/rwaldron) 30 | -------------------------------------------------------------------------------- /proposal/proposal-template_janedoe.md: -------------------------------------------------------------------------------- 1 | [Proposal Title] 2 | ======================== 3 | 4 | * Speaker : [Your Name, eg: *Jane Doe*] 5 | * Available : [Dates/Times Available, eg: *Feb 11th, 9am-12pm*] 6 | * Duration : [Length of Presentation, eg: *45 mins*] 7 | 8 | Description 9 | ----------- 10 | 11 | [Presentation description goes here. Try to keep it under say, 500 words, but more than 140 characters] 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![jandoe](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/janedoe.png) 17 | 18 | I'm a big furry mammal that likes to run through the forest and splash in the stream and I write code sometimes. 19 | 20 | 21 | Links 22 | ----- 23 | 24 | * Blog: http://bloggityblogblog.com/jane-doe-does-code 25 | * Company: http://companitycompanycomp.com/jane-doe-makes-cool-products 26 | * Github: http://github.com/jane-doe 27 | * Twitter: http://twitter.com/janedoe 28 | -------------------------------------------------------------------------------- /proposal/sailing-at-midnight-kitcambridge.md: -------------------------------------------------------------------------------- 1 | # Sailing at Midnight 2 | 3 | * Speaker: Kit Cambridge 4 | * Available: 11/8 - 11/9, 2012 5 | * Duration: 30 minutes 6 | 7 | # Description 8 | 9 | Sail is a collection of low-level functions to help make DOM APIs more palatable. I'll be speaking about the lessons I learned while working on Sail — cross-browser consistency, custom builds, and adventures in spec interpretation. 10 | 11 | # Speaker Bio 12 | 13 | ![kitcambridge](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/kitcambridge.png) 14 | 15 | I'm a [rookie engineer](http://jeremyckahn.github.com/blog/2012/09/23/developers-vs-engineers-vs-scientists/) who loves JavaScript, Ruby, running, tea, and literature. 16 | 17 | # Links 18 | 19 | * [Web](http://kitcambridge.github.com) 20 | * [Voxer](http://voxer.com) 21 | * [GitHub](https://github.com/kitcambridge) 22 | * [Twitter](http://twitter.com/kitcambridge) -------------------------------------------------------------------------------- /proposal/add-lightness_revin.md: -------------------------------------------------------------------------------- 1 | Add Lightness 2 | ======================== 3 | 4 | * Speaker : Revin Guillen 5 | * Available : 8–9 Nov 2012 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | We often talk about simplicity as something we achieve through subtraction, but Colin Chapman's philosphy of "adding lightness" helps us re-frame the idea so we can be deliberate about designing software that stays simple throughout its life. We'll discuss how this engineer and car designer's ideas can make our software better. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![revin](https://raw.github.com/revin/cascadiajs.github.com/master/proposal/images/revin.png) 17 | 18 | I'm a freelance front end developer, open standards nut, and Dojo committer. I JavaScript all the things, but only when appropriate. When I grow up I want to be a rocket powered sky crane. 19 | 20 | Links 21 | ----- 22 | 23 | * Github: [/revin](http://github.com/revin) 24 | * Twitter: [@revin](http://twitter.com/revin) 25 | 26 | -------------------------------------------------------------------------------- /proposal/survey-of-backbone-plugin-ecosystem.md: -------------------------------------------------------------------------------- 1 | #Survey of Backbone Plugin Ecosystem# 2 | 3 | Backbone is quickly becoming one of the most popular client side MVC (MVV?) frameworks, and along with it an entire ecosystem of plugins are starting to emerge. 4 | 5 | In this presentation, we will cover the backbone plugin landscape, including a look at the breadth of available plugins, a look at the advantages of different approaches to backbone plugin development (extension vs injection, etc) as well as deeper dive into some of the most popular/useful plugins out in the wild. 6 | 7 | ##Speaker Bio## 8 | 9 | troythewolfe 10 | 11 | ![troythewolfe](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/troythewolfe.jpg) 12 | 13 | Troy Wolfe is a software engineer who loves all things UI, and has a visceral reaction to information design and rich interactivity. 14 | 15 | * [Github](http://github.com/troythewolfe) 16 | * [Website](http://www.troythewolfe.com) 17 | * [Twitter](http://twitter.com/wolfetr) -------------------------------------------------------------------------------- /proposal/cheap-design-into_chustar.md: -------------------------------------------------------------------------------- 1 | [Cheap Introduction to Design] 2 | ======================== 3 | 4 | * Speaker : [Chuma Nnaji] 5 | * Available : [Anytime(?)] 6 | * Duration : [15-20 minutes] 7 | 8 | Description 9 | ----------- 10 | 11 | "Launch now, deal with the design later." 12 | Right? 13 | Wrong! 14 | The first impression that users get of your new project could very well be their 15 | last if you don't do some work to get a clean and uncluttered interface. 16 | Even when you're building a prototpe, it helps to build a well laid out interface 17 | right from the begining to avoid getting used to the "localhost" design. 18 | 19 | Speaker Bio 20 | ----------- 21 | 22 | ![chustar](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/chustar.png) 23 | 24 | SDET at Microsoft by day, web developer by night. Currently working on chrome extensions and mobile apps. 25 | 26 | Links 27 | ----- 28 | 29 | * Website: http://chumannaji.com 30 | * Github: https://github.com/chustar 31 | * Twitter: https://twitter.com/chustar 32 | -------------------------------------------------------------------------------- /proposal/stream-all-things_raynos.md: -------------------------------------------------------------------------------- 1 | Stream all the things 2 | ======================== 3 | 4 | * Speaker : Jake Verbaten 5 | * Available : 11/8 - 11/9, 2012 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Witness why streams are awesome and what happens when you use them everywhere for everything. 12 | 13 | We will walk through what the new 0.9 streams look like. We then look at how functional programming with streams plays nicely. Once we have functional programming we can just pile on the abstractions until we have a fully working streaming web application, with all the usual features (reactive, real-time, distributed, peer to peer, etc) 14 | 15 | Speaker Bio 16 | ----------- 17 | 18 | ![Raynos](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/raynos.png) 19 | 20 | I have a NPM addiction. I also make mad science JavaScript experiments. 21 | 22 | Links 23 | ----- 24 | 25 | * [npm](https://npmjs.org/~raynos) 26 | * [github](https://github.com/Raynos) 27 | * [company](http://www.colingo.com/) 28 | * [twitter](https://twitter.com/Raynos2) -------------------------------------------------------------------------------- /proposal/make-nodjs-your-framework-agnostic-worker_pconerly.md: -------------------------------------------------------------------------------- 1 | [Make node.js your framework-agnostic worker!] 2 | ======================== 3 | 4 | * Speaker : [Peter Conerly] 5 | * Available : [Either Day] 6 | * Duration : [5min / lightning talk] 7 | 8 | Description 9 | ----------- 10 | 11 | I needed to use nodejs as a worker for a js-specific package, but I had already written the website in Django! The lightning talk will present my trivial redis queueing system to send tasks from Django (or any framework that can access redis) to nodejs. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![pconerly](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/pconerly.png) 17 | 18 | Peter lives & codes in Seattle. While he has a B.S. in Biochemistry, he has left the world of biotech to be a web developer. His mothertongue is python, Django is his favorite web framework and phantomjs is his favorite JS project. 19 | 20 | Links 21 | ----- 22 | 23 | * Blog: http://peterconerly.com/blog/ 24 | * Company: Freelance/Self/None 25 | * Github: https://github.com/pconerly/ 26 | * Twitter: https://twitter.com/pete_thedevguy -------------------------------------------------------------------------------- /proposal/js-in-your-chrome-extension_pconerly.md: -------------------------------------------------------------------------------- 1 | [JS in your chrome extension] 2 | ======================== 3 | 4 | * Speaker : [Peter Conerly] 5 | * Available : [Either Day] 6 | * Duration : [~30min] 7 | 8 | Description 9 | ----------- 10 | 11 | Not sure when or where to call the chrome api in your chrome extension? What does your background.js do, and why is it different from js files listed in content_scripts['js']? This talk will address common pitfalls and structure of chrome extensions, through the lens of a chrome extension the speaker wrote. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![pconerly](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/pconerly.png) 17 | 18 | Peter lives & codes in Seattle. While he has a B.S. in Biochemistry, he has left the world of biotech to be a web developer. His mothertongue is python, Django is his favorite web framework and phantomjs is his favorite JS project. 19 | 20 | Links 21 | ----- 22 | 23 | * Blog: http://peterconerly.com/blog/ 24 | * Company: Freelance/Self/None 25 | * Github: https://github.com/pconerly/ 26 | * Twitter: https://twitter.com/pete_thedevguy -------------------------------------------------------------------------------- /proposal/persona-login-that-just-works_ozten.md: -------------------------------------------------------------------------------- 1 | Persona - Log In that Just Works 2 | ================================ 3 | 4 | * Speaker : Austin King aka *ozten* 5 | * Available : Nov - Feb 6 | * Duration : 30 minutes - Can make shorter or longer 7 | 8 | Description 9 | ----------- 10 | 11 | Persona is a new decentralized authentication system for the web. It's powered by JavaScript and gets 12 | annihilates per-site passwords, making your users happier and your backend more secure. 13 | 14 | In this talk we'll BrowserID enable a website and learn about all the cool aspects of this Upgrade for 15 | The Web Platform. 16 | 17 | Speaker Bio 18 | ----------- 19 | 20 | ![ozten](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/ozten.jpg) 21 | 22 | I'm a Developer on the Mozilla Identity team. I've been hack with the web for many moons and love 23 | learning new tricks. Spell check is for the week! 24 | 25 | 26 | Links 27 | ----- 28 | 29 | * Blog: http://ozten.com/ 30 | * Company: http://mozilla.org 31 | * Github: http://github.com/ozten 32 | * Twitter: http://twitter.com/ozten 33 | * Project: https://login.persona.org 34 | -------------------------------------------------------------------------------- /proposal/the-tyranny-of-choice.md: -------------------------------------------------------------------------------- 1 | [The Tyranny of Choice] 2 | ======================== 3 | 4 | * Speaker : [Matthew Bergman] 5 | * Available : [November] 6 | * Duration : [15-20 minutes] 7 | 8 | Description 9 | ----------- 10 | JS is blowing up exponentially. NPM has over 15,000 packages, 20-30 JS frameworks, myraid of flow controll libraries and 10s of JS conferences daily. More is better right. Not always. I want to explore some or the problems that having so many choices in JS is creating for us and the next generation of programmers and some ways we can go about dealing with this continuing to grow our options. 11 | 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | fotoverite aka Matthew Bergman 17 | 18 | ![matthew_bergman](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/matthew_bergman.jpg) 19 | 20 | I'm an expat from the ruby world trying to make it in great city of node and JS! I'm the senior engineer at novafabrica where I work on rail applications and spend my spare time tinkering with other frameworks. 21 | 22 | Links 23 | ----- 24 | 25 | * Company: https://www.novafabrica.com 26 | * Github: https://github.com/FotoVerite 27 | * Twitter: https://twitter.com/fotoverite 28 | -------------------------------------------------------------------------------- /proposal/observable-nodejs_dshaw.md: -------------------------------------------------------------------------------- 1 | # Observable Node.js 2 | 3 | Production considerations for running and maintaining realtime Node.js apps. 4 | 5 | ## Talk 6 | 7 | **Name:** Daniel Shaw (@dshaw) 8 | 9 | **Title:** Observable Node.js 10 | 11 | **Description:** Building realtime apps with Node.js is easy. The real fun begins when you start to scale (and by "fun", we mean unholy pain and agony). Unfortunely, it's extremely hard to fabricate scale. You can try to simulate it, but the pressure placed on a system is likely to be different from real pressures placed on your system at scale. dshaw will share his experience scaling realtime apps and will present some techniques that will help better prepare for scale when it happens. 12 | 13 | **Duration:** 20 mins (can accomodate up to 50 mins, especially if there's Q/A) 14 | 15 | **Photo:** [dshaw_256x256.png](http://dshaw.me/SIzJyM) 16 | 17 | ## Bio 18 | 19 | Daniel Shaw is a Node.js Engineer on the Voxer platform team and co-founder of The Node Firm. He is a regular seat and organizer of the NodeUp podcast. He is Socket.io contributor, startup advisor and developer mentor. @dshaw is passionate about helping startups be successful with Node.js and exploring the scalability potential of Node.js. 20 | -------------------------------------------------------------------------------- /asset/grunt/include/reloadClient.js: -------------------------------------------------------------------------------- 1 | /* 2 | * grunt-reload 3 | * https://github.com/webxl/grunt-reload 4 | * 5 | * Copyright (c) 2012 webxl 6 | * Licensed under the MIT license. 7 | */ 8 | 9 | (function(window) { 10 | 11 | 'use strict'; 12 | 13 | var reloader = (function Reloader() { 14 | 15 | var l = window.location, url; 16 | 17 | if (window.__reloadServerUrl) { 18 | url = window.__reloadServerUrl; 19 | } else { 20 | url = 'ws://' + l.host; 21 | } 22 | 23 | return { 24 | isSocketConnected:function () { 25 | return this.socket && this.socket.readyState === WebSocket.OPEN; 26 | }, 27 | connect:function () { 28 | if (this.isSocketConnected()) { 29 | return; 30 | } 31 | if (this.connectTimeout) { 32 | clearTimeout(this.connectTimeout); 33 | } 34 | this.socket = new WebSocket(url); 35 | 36 | this.socket.onmessage = function (msg) { 37 | this.close(); 38 | console.log(msg.data); 39 | window.document.location.reload(); 40 | }; 41 | 42 | // Todo: reconnect support 43 | } 44 | }; 45 | 46 | }()); 47 | 48 | setTimeout(function() { reloader.connect(); }, 3000); 49 | 50 | }(this)); -------------------------------------------------------------------------------- /proposal/optimize-your-tdd_airportyh.md: -------------------------------------------------------------------------------- 1 | Optimize Your TDD 2 | ================= 3 | 4 | * Speaker : Toby Ho 5 | * Available : Anytime 6 | * Duration : 30 minutes (but flexible) 7 | 8 | Description 9 | ----------- 10 | 11 | Test-Driven Development has become increasingly important for web developers as Javascript-based web applications become more and more complex. However, TDD is not an easy discipline to master, and doing it well takes a lot of practice and learning. I will first explore and motivate the *one reason* why we do TDD after all: to be able to *code faster*. Then, I will present a set of principles, guidelines, tips and tools to help you optimize for your coding speed when TDD'ing. 12 | 13 | Speaker 14 | ------- 15 | 16 | ![airportyh](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/airportyh.png) 17 | 18 | Toby Ho is a Javascript hacker in Atlanta. He teaches a Javascript class monthly and is passionate about helping others learn. He is a practical practitioner of TDD, and also wrote a test runner called Testem - designed to streamline the TDD workflow. 19 | 20 | Links 21 | ----- 22 | 23 | * Blog : http://tobyho.com 24 | * Github: http://github.com/airportyh 25 | * Twitter: http://twitter.com/airportyh 26 | * Testem: https://github.com/airportyh/testem -------------------------------------------------------------------------------- /proposal/promises-for-profit_delvarworld.md: -------------------------------------------------------------------------------- 1 | [Promises for Profit] 2 | ======================== 3 | 4 | * Speaker : [Andrew Ray] 5 | * Available : [Uhhh, when is cascadia? And where / what is cascadia?] 6 | * Duration : [15-20 minutes] 7 | 8 | Description 9 | ----------- 10 | 11 | What are javascript promises? When should you use them? Do they make your code 12 | cleaner (probably)? What are their benefits? What are their downsides? Where do 13 | promises show true power? How do you use them in jQuery? How do you use them in 14 | NodeJS? How do we use them at Crowdtilt? In what version of jQuery should you 15 | ignore promises because they are terrible and broken? All these questions 16 | anwered and nothing else if you accept Andrew Ray's "Promises for Profit" talk! 17 | 18 | Speaker Bio 19 | ----------- 20 | 21 | ![delvaworld](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/delvarworld.png) 22 | 23 | I'm a JS and VIM loving developer from San Francisco. I've worked at 24 | Atlassian (don't blame me for JIRA) and currently and rocking the amazing 25 | startup Crowdtilt. 26 | 27 | Links 28 | ----- 29 | 30 | * Blog: http://delvarworld.github.com 31 | * Company: https://www.crowdtilt.com 32 | * Github: https://github.com/DelvarWorld 33 | * Twitter: https://twitter.com/andrewray 34 | -------------------------------------------------------------------------------- /proposal/excel-in-the-browser_halffullheart.md: -------------------------------------------------------------------------------- 1 | Excel in the Browser 2 | ==================== 3 | 4 | * Speaker : Daniel Worthington 5 | * Available : Nov 8-9th, 10am-6pm 6 | * Duration : 30min 7 | 8 | Description 9 | ----------- 10 | 11 | A little over a year ago we started a very ambitious project at Simply 12 | Measured. We built an Excel spreadsheet viewer in JavaScript. We took 13 | the Excel reports we already had and added them to our web app. I’ll 14 | talk about: 15 | 16 | * How to approach building and maintaining a large front-end JavaScript library 17 | * How functional programming and JSON will save you time and stress 18 | * What happens when your UI Designers work in Excel and your Analysts become programmers 19 | 20 | 21 | Speaker Bio 22 | ----------- 23 | 24 | ![halffullheart](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/halffullheart.png) 25 | 26 | I’m a web developer. I love Ruby and JavaScript. I’m also a UI/UX Designer. I’m currently working on product design and development at Simply Measured. I’m also in the early stages of building a new product for professional photographers, Photo Pages. 27 | 28 | Links 29 | ----- 30 | 31 | * Company: http://simplymeasured.com/ 32 | * Company: http://www.photopagesapp.com/ 33 | * Twitter: http://twitter.com/halffullheart 34 | -------------------------------------------------------------------------------- /proposal/distributed-programming-for-kids_dominictarr.md: -------------------------------------------------------------------------------- 1 | Distributed Systems for Kids. 2 | ======================== 3 | 4 | * Speaker : Dominic Tarr 5 | * Available : November 8-9, 2012 6 | * Duration : ~30 minutes 7 | 8 | Description 9 | ----------- 10 | 11 | Games are fun. Friends are fun. Playing games with friends are fun. 12 | Programming is fun, especially if you are making games. 13 | 14 | However, Distributed Systems (aka, multiplayer games) are hard, right? 15 | 16 | ...at least, that is what adults will tell you. 17 | 18 | The way adults have learned to think about programming local 19 | systems doesn't work well when distributed systems. But kids don't know that! 20 | so there is nothing stopping them from writing fun distributed systems! 21 | 22 | If you grown-ups can refactor your thinking, they can get in on the fun too! 23 | 24 | Speaker Bio 25 | ----------- 26 | 27 | ![dominictarr](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/dominictarr.jpg) 28 | 29 | A Mad Scientist experimenting with distributed realtime systems and real-time streaming in node. 30 | I love soup, orange juice, javascript and node.js streams. 31 | 32 | Links 33 | ----- 34 | 35 | * Blog: http://dominictarr.com 36 | * Company: http://fybe.com 37 | * Github: http://github.com/dominictarr 38 | * Twitter: http://twitter.com/dominictarr 39 | 40 | -------------------------------------------------------------------------------- /proposal/model-view-rockstar_dustyjewett.md: -------------------------------------------------------------------------------- 1 | MV* - Model View (Rock)* 2 | ======================== 3 | 4 | * Speaker : Dusty Jewett 5 | * Available : Any 6 | * Duration : 45-60 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Backbone, Knockout, Angular, Ember... all of these frameworks impose an Architecture on your application... but before you choose, you should know more about the concepts and patterns underlying and driving the frameworks. Come learn about MVC, MVP and MVVM, without any frameworks getting in the way! Understand the pros and cons of each Arch, and how to choose based on your product, team and client. This talk is a deep-dive into generic UI Architectures, prepare to be inundated with JavaScript code. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![Dusty Jewett](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/dustyjewett.jpg) 17 | 18 | Dusty Jewett is a Software Engineer based in Seattle. He loves dynamic languages and compile-time error checking. He has served as the manager of the Web App Developers meetup for 5 years and Lead/Dev Manager for several companies, but finds the "Individual Contributor" role the most rewarding. 19 | 20 | Links 21 | ----- 22 | 23 | * Website: http://dustyjewett.com/ 24 | * Github: http://github.com/dustyjewett 25 | * Twitter: http://twitter.com/dustyjewett 26 | -------------------------------------------------------------------------------- /proposal/big-data-real-time_ineeman.md: -------------------------------------------------------------------------------- 1 | Realtime Big Data makes real data big time 2 | ======================== 3 | 4 | * Speaker : Itay Neeman 5 | * Available : [Anytime?] 6 | * Duration : 45 minutes 7 | 8 | Description 9 | ----------- 10 | 11 | Interested in keeping your data real-time? What if your data is big, as in Big Data? Every website click, device-to-device communication and social media interaction creates valuable data. Lots of it. All the time. Big Data is raw, detailed, and happening all the time. We'll talk about ingesting, searching and visualizing this real-time data using the power of JavaScript. From inline scripting in HTML to Backbone.js to Node.js, JavaScript has the power to tame your Big Data and I'll show you how. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![ineeman](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/ineeman.png) 17 | 18 | Itay works at Splunk, where he is trying to make it easier for developers to handle 19 | big data, whether it is real time or not. He wrote the Splunk JavaScript SDK, as well 20 | as the code coverage tool for Node.js Cover. He has two cats who are confused about 21 | who exactly owns who. 22 | 23 | 24 | Links 25 | ----- 26 | 27 | * Company: http://dev.splunk.com 28 | * Github: http://github.com/itay 29 | * Github (Splunk): http://github.com/splunk 30 | * Twitter: http://twitter.com/itayneeman 31 | -------------------------------------------------------------------------------- /proposal/rethinking-distributed-systems-with-nodejs_sintaxi.md: -------------------------------------------------------------------------------- 1 | Rethinking Distributed Systems with NodeJS 2 | ========================================== 3 | 4 | * Speaker : Brock Whitten 5 | * Available : Nov 8-10th 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | I love REST APIs but over the years I have seen a common anti-pattern emerge where we are poorly reimplementing libraries over HTTP APIs. We tend to call these SDKs. The root of the problem is with how the design our our data models is at odds with the design of our interfaces. 12 | 13 | Recently, with the creation of the Harp Platform, I have been rethinking this paradigm and I will share with you how we are using tools such as Dnode, Axon, and Thug to keep our system fast, maintainable, and easy to use. 14 | 15 | Speaker Bio 16 | ----------- 17 | 18 | ![sintaxi](http://sintaxi.com/img/sintaxi-beach.jpg)! 19 | 20 | Brock Whitten co-founded Chloi where he is currently working on the Harp Platform, a WebFWD project that gives you zero-configuration app publishing within Dropbox. Previously, Brock co-created the PhoneGap project and later became an engineer at Joyent where he first developed their public cloud API. NodeJS, Redis, and HAProxy are among his favourite tools. 21 | 22 | Links 23 | ----- 24 | 25 | * Blog: http://sintaxi.com 26 | * Company: http://chloi.io 27 | * Github: https://github.com/sintaxi 28 | * Twitter: https://twitter.com/sintaxi 29 | -------------------------------------------------------------------------------- /proposal/understanding-asynchronous_coderoshi.md: -------------------------------------------------------------------------------- 1 | Understanding Asynchronous 2 | ======================== 3 | 4 | * Speaker : Eric Redmond 5 | * Available : Any 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Asynchronous development is both the core power, and major frustration of working in javascript. We'll begin with the fundamental issues people face when confronted writing async code for the first time, moving onto the more insidious problems you'll encounter without a firm grasp of how the callback loop actually functions. We'll end with several classes of solutions to the problems of callbacks and waits, from promises/defers and await queues, up to code generating languages with flow control, like icedcoffeescript. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![coderoshi](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/coderoshi.jpg) 17 | 18 | Eric's been a longtime advocate of full-stack javascript (before it was cool #hipster), has authored several nodejs projects, is a coffeescript advocate, and technical reviewer of the new Pragmatic Node.js book. He's co-author of Seven Databases in Seven Weeks, international speaker on NoSQL, and an Engineer at Basho (makers of the Riak database). 19 | 20 | Links 21 | ----- 22 | 23 | * [npm](https://npmjs.org/~coderoshi) 24 | * [basho](http://basho.com/) 25 | * [github](http://github.com/coderoshi) 26 | * [twitter](http://twitter.com/coderoshi) 27 | -------------------------------------------------------------------------------- /proposal/app-scale-all-the-things-typescript_jden.md: -------------------------------------------------------------------------------- 1 | # App Scale All The Things - What's Up With TypeScript? 2 | 3 | Microsoft's newly announced TypeScript is the latest in the list of languages 4 | which compile to JavaScript. But unlike CoffeeScript or other alternatives, 5 | it's really just a thin veneer on top of plain old JS. So, TypeScript or 6 | HypeScript? Let's find out. For bonus fun, we'll look at the TypeScript 7 | compiler API and look at unobtrusive uses of TypeScript to make your libraries 8 | easier to consume. 9 | 10 | Runtime: 30ish minutes (I'm flexible) 11 | 12 | ## By whom? 13 | 14 | jden aka Jason Denizac 15 | 16 | ![a smiling photo of jden][1] 17 | 18 | After declaring an Art History major and graduating with a degree in Political 19 | Science, Jason decided to become a javascript hacker bent on fixing health 20 | technology. When asked to list examples of software software he likes, he once 21 | responsed "text editors, mostly. And web browsers." 22 | 23 | - [blog](http://blog.denizac.org) 24 | - [twitter](https://twitter.com/leJDen) 25 | - [lanyrd](http://lanyrd.com/profile/lejden/) 26 | - [ADN](https://alpha.app.net/jden) 27 | - [geekli.st](https://geekli.st/leJDen) 28 | - [coderwall](http://coderwall.com/denizac) 29 | - [company](http://www.agilediagnosis.com/) 30 | 31 | Availability: 11/8 - 11/9, 2012. 32 | 33 | [1]: https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/jden.png -------------------------------------------------------------------------------- /proposal/whirlwind-tour-couchapps-and-viz-with-d3-and-friends_chewbranca.md: -------------------------------------------------------------------------------- 1 | [Whirlwind Tour of CouchApp Visualizations with D3 and Friends] 2 | ======================== 3 | 4 | * Speaker : [Russell Branca] 5 | * Available : [Nov 8th and 9th] 6 | * Duration : [45-60 mins] 7 | 8 | Description 9 | ----------- 10 | 11 | CouchApps are an interesting way of attaching self contained 12 | applications together with data in a CouchDB database. This talk will 13 | demonstrate how to leverage modern visualization tools such as D3, 14 | Cubism and Crossfilter to do client side data processing and 15 | visualization on top of server side distributed MapReduce processing 16 | with CouchDB. 17 | 18 | You'll see how you can create powerful, two tier applications on top of 19 | a distributed database, allowing you to deploy on hosting providers 20 | with no server installs. 21 | 22 | If you have a local CouchDB install on your laptop, you will be able 23 | to replicate the application and play along as we go. 24 | 25 | 26 | Speaker Bio 27 | ----------- 28 | 29 | ![chewbranca](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/chewbranca.png) 30 | 31 | I'm a front end developer at [Cloudant](http://cloudant.com) 32 | specializing in data driven javascript applications and visualizations. 33 | 34 | 35 | Links 36 | ----- 37 | 38 | * Company: http://cloudant.com 39 | * Github: http://github.com/chewbranca 40 | * Twitter: http://twitter.com/chewbranca 41 | -------------------------------------------------------------------------------- /proposal/are-we-there-yet_jden.md: -------------------------------------------------------------------------------- 1 | # "Are we there yet?" 2 | _and other stuff you shouldn't have to care about_ 3 | 4 | By now you've heard a bit about promises (and if you haven't you probably 5 | should check them out). They're about more than cleaning up "callback soup" and 6 | making pretty APIs - they provide a great way to maintain clear separation of 7 | concerns in your asynchronous code. Logging, timing, "loading" status 8 | indicators - promises make it easy to keep your application DRY. 9 | Cross listed under `PROM 201 - Intermediate Applications of Promises`. 10 | Warning: contains code. 11 | 12 | Runtime: 30 - 60 minutes (as time allows) 13 | 14 | ## By whom? 15 | 16 | jden aka Jason Denizac 17 | 18 | ![a smiling photo of jden][1] 19 | 20 | After declaring an Art History major and graduating with a degree in Political 21 | Science, Jason decided to become a javascript hacker bent on fixing health 22 | technology. When asked to list examples of software software he likes, he once 23 | responsed "text editors, mostly. And web browsers." 24 | 25 | - [blog](http://blog.denizac.org) 26 | - [twitter](https://twitter.com/leJDen) 27 | - [lanyrd](http://lanyrd.com/profile/lejden/) 28 | - [ADN](https://alpha.app.net/jden) 29 | - [geekli.st](https://geekli.st/leJDen) 30 | - [coderwall](http://coderwall.com/denizac) 31 | - [company](http://www.agilediagnosis.com/) 32 | 33 | Availability: 11/8 - 11/9, 2012. 34 | 35 | [1]: https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/jden.png -------------------------------------------------------------------------------- /proposal/testing-like-a-boss_mdarnall.md: -------------------------------------------------------------------------------- 1 | Testing Like A Boss 2 | ================================= 3 | * Speaker : Matt Darnall 4 | * Available : Either Day 5 | * Duration : 30 minutes 6 | 7 | Description 8 | --------------------------------- 9 | 10 | You're code base is growing, and you need to know your code will run on all the browsers and potentially on multiple devices. You have a suite of tests, and you are aware of the various tools to write tests, but when it comes to actually running them you may not be doing all that you can to ensure realistic results and useful feedback. 11 | 12 | From quick headless test runners to cloud-based services that can target all the browsers we'll cover how you can incorporate a set of modern tools and approaches to your daily routine to continuously test your code base in a quick and efficient manner. 13 | 14 | Speaker Bio 15 | --------------------------------- 16 | ![mdarnall](https://raw.github.com/mdarnall/cascadiajs.github.com/master/proposal/images/mdarnall.jpg) 17 | 18 | I'm a developer living in sunny Portlandia. I'm all over the internets 19 | and love to build enjoyable applications for people to use. When I'm not 20 | telling computers what to do I'm probably into a tasty beverage or making funny meme pics of my friends in comprising situations. 21 | 22 | Links 23 | --------------------------------- 24 | * Website : http://mdarnall.com 25 | * Blog : http://blog.mdarnall.com 26 | * Github : http://github.com/mdarnall 27 | * Twitter : http://twitter.com/mdarnall 28 | 29 | -------------------------------------------------------------------------------- /proposal/lodash-for-a-better-utility-belt_jdalton.md: -------------------------------------------------------------------------------- 1 | Lo-Dash for a better utility belt. 2 | ======================== 3 | 4 | * Speaker : John-David Dalton 5 | * Available : 11/8 - 11/9, 2012 6 | * Duration : 45 mins (with Q/A) 7 | 8 | Description 9 | ----------- 10 | 11 | Lo-Dash is a drop-in replacement[*](https://github.com/bestiejs/lodash/wiki/Drop-in-Disclaimer) for Underscore.js 12 | delivering [performance](http://lodash.com/benchmarks), [bug fixes](https://github.com/bestiejs/lodash#resolved-underscorejs-issues), 13 | and [additional features](https://github.com/bestiejs/lodash#features). I will discuss the unconventional way in which Lo-Dash gets 14 | its performance gains, dive into its features, and explore some of the extra geeky JS things I learned or implemented while developing Lo-Dash. 15 | 16 | Speaker Bio 17 | ----------- 18 | 19 | ![jdalton](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/jdalton.png) 20 | 21 | I'm a Chakra performance program mananger at [Microsoft](http://blogs.msdn.com/b/ie/archive/2012/06/13/advances-in-javascript-performance-in-ie10-and-windows-8.aspx), co-maintainer of [jsPerf.com](http://jsperf.com), contributor to [Benchmark.js](http://benchmarkjs.com), 22 | advocate of spec compliant polyfills, library/framework enthusiast, tinkerer, bug fixer, and overall JS fanboy. 23 | 24 | Links 25 | ----- 26 | 27 | * Blog: [allyoucanleet.com](http://allyoucanleet.com) 28 | * GitHub: [/jdalton](http://github.com/jdalton) 29 | * Twitter: [@jdalton](http://twitter.com/jdalton) 30 | * Project: [lodash.com](http://lodash.com) 31 | -------------------------------------------------------------------------------- /proposal/does_size_matter__microjs_fx_vs_macrojs_fx_skoon.md: -------------------------------------------------------------------------------- 1 | Does Size Matter? MicroJS Frameworks versus MacroJS Frameworks 2 | ======================== 3 | 4 | * Speaker : Scott Koon 5 | * Available : November 8-9, 2012 6 | * Duration : 30 minutes 7 | 8 | Description 9 | ----------- 10 | When you are starting a new project, you can pick any JS frameworks you want. 11 | What are the pros and cons of picking a large JS framework like ExtJS versus smaller JS frameworks like EnderJS. How does it affect future development? Features? 12 | At what point do you say, "Hey, I don't really need all of the stuff that this framework offers. I really just need to wire up events." 13 | In this talk, I will talk about what a microJS framework is and I'll give a quick survey of the currently available microjs frameworks. I'll also cover what picking a lot of smaller frameworks versus one big framework means in terms of page load, features, and maintainability. 14 | 15 | 16 | Speaker Bio 17 | ------------ 18 | 19 | ![skoon](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/skoon.jpg) 20 | 21 | 22 | I've been working with JavaScript for a long time. I co-authored a book called "Professional JavaScript Frameworks" published by Wrox press. I've been a web developer for over 17 years. 23 | 24 | 25 | Links 26 | ----- 27 | * Blog : http://lazycoder.com/ 28 | * Twitter : @lazycoder 29 | @LazycoderLinks 30 | * GitHub : http://github.com/skoon 31 | * BitBucket : http://bitbucket.org/scott_koon 32 | * podcast : http://herdingcode.com 33 | 34 | -------------------------------------------------------------------------------- /asset/css/scss/_print.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Print styles. 3 | Inlined to avoid required HTTP connection: h5bp.com/r 4 | ========================================================================== */ 5 | 6 | @media print { 7 | * { 8 | background: transparent !important; 9 | color: #000 !important; /* Black prints faster: h5bp.com/s */ 10 | box-shadow: none !important; 11 | text-shadow: none !important; 12 | } 13 | 14 | a, 15 | a:visited { 16 | text-decoration: underline; 17 | } 18 | 19 | a[href]:after { 20 | content: " (" attr(href) ")"; 21 | } 22 | 23 | abbr[title]:after { 24 | content: " (" attr(title) ")"; 25 | } 26 | 27 | /* 28 | * Don't show links for images, or javascript/internal links 29 | */ 30 | 31 | .ir a:after, 32 | a[href^="javascript:"]:after, 33 | a[href^="#"]:after { 34 | content: ""; 35 | } 36 | 37 | pre, 38 | blockquote { 39 | border: 1px solid #999; 40 | page-break-inside: avoid; 41 | } 42 | 43 | thead { 44 | display: table-header-group; /* h5bp.com/t */ 45 | } 46 | 47 | tr, 48 | img { 49 | page-break-inside: avoid; 50 | } 51 | 52 | img { 53 | max-width: 100% !important; 54 | } 55 | 56 | @page { 57 | margin: 0.5cm; 58 | } 59 | 60 | p, 61 | h2, 62 | h3 { 63 | orphans: 3; 64 | widows: 3; 65 | } 66 | 67 | h2, 68 | h3 { 69 | page-break-after: avoid; 70 | } 71 | } -------------------------------------------------------------------------------- /proposal/learn-from-the-masters_topfunky.md: -------------------------------------------------------------------------------- 1 | Learn from the Masters 2 | ======================== 3 | 4 | * Speaker : Geoffrey Grosenbach 5 | * Available : All dates open 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Over the last two years, I've traveled the world to pair with expert designers and developers on short projects to learn their day to day secrets and understand their philosophies. I've condensed these live sessions into a 30 minute multimedia audio/video extravaganza of tricks, insights, opinions, and old-fashioned rants from Tim Caswell (Node.js), Ryan Singer (37signals), Kyle Neath (GitHub), Neven Mrgan (Panic), Zed Shaw, Gary Bernhardt (Destroy All Software), and others. 12 | 13 | As open source developers, we can read each others' code, but we rarely see developers working as they write that code. This is a rare peek into the way top developers think through coding problems! 14 | 15 | 16 | Speaker Bio 17 | ----------- 18 | 19 | ![topfunky](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/topfunky.jpg)! 20 | 21 | Geoffrey Grosenbach is the founder of PeepCode screencasts, cutting edge tutorials for web developers and alpha geeks. PeepCode's growing staff published on Node.js, Backbone and CoffeeScript years before they appeared in books. He spends his time documenting undocumented Open Source software and producing mini documentaries with innovative developers and designers across the whole range of Open Source languages and software. 22 | 23 | Links 24 | ----- 25 | 26 | * Blog: https://peepcode.com/blog 27 | * Company: https://peepcode.com 28 | * Github: http://github.com/topfunky 29 | * Twitter: http://twitter.com/topfunky 30 | -------------------------------------------------------------------------------- /proposal/realtime-monitoring-with-nodejs_lorenwest.md: -------------------------------------------------------------------------------- 1 | Real Time Monitoring with Node.js 2 | ================================= 3 | 4 | * Speaker : *Loren West* 5 | * Available : *All conference Nov. 8-9 2012* 6 | * Duration : *30 mins. 45 with QA* 7 | 8 | Description 9 | ----------- 10 | 11 | Stuff happens, and you need to see it. In this interactive session we'll use 12 | Node.js and open source to build a real time dashboard for monitoring your most 13 | important systems. 14 | 15 | Come play with your favorite stars: Node.js, Socket.IO, Backbone, jQuery, and 16 | discover some new talent. Bring your laptops, your wifi, and your favorite 17 | caffiene for this fast paced interactive session. 18 | 19 | Then strap on your retro goggles. REPL may make an appearance, and word is she's 20 | back - and lookin' good. 21 | 22 | Speaker Bio 23 | ----------- 24 | 25 | Loren rides the Sounder train into Seattle, and uses that time writing open source 26 | software. You may have seen him surfing the streets on an [electric skateboard](http://xkcd.com/139/). 27 | The other stuff is public - see the links below. 28 | 29 | Links 30 | ----- 31 | 32 | * Company: [A.R.O.](http://aro.com) 33 | * LinkedIn: [http://www.linkedin.com/in/lorenwest](http://www.linkedin.com/in/lorenwest) 34 | * Github: [http://github.com/lorenwest](http://github.com/lorenwest) 35 | * Twitter: [http://twitter.com/lorenwest](http://twitter.com/lorenwest) 36 | * Email: [CascadiaJS@lorenwest.com](mailto:cascadiajs@lorenwest.com) 37 | * Facebook: You don't want to see that. Some things can't be un-seen. 38 | 39 | Special Request 40 | --------------- 41 | This session will be even more fun with two screens. I'll bring two laptops if necessary. 42 | -------------------------------------------------------------------------------- /asset/css/scss/_base.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Base styles: opinionated defaults 3 | ========================================================================== */ 4 | 5 | html, 6 | button, 7 | input, 8 | select, 9 | textarea { 10 | color: #495555; 11 | } 12 | 13 | body { 14 | font-size: 1em; 15 | line-height: 1.4; 16 | } 17 | 18 | html, body { 19 | overflow-x: hidden; 20 | } 21 | 22 | a { 23 | color: $accent; 24 | text-decoration: none; 25 | 26 | &:hover, &:focus { 27 | text-decoration: underline; 28 | } 29 | } 30 | 31 | nav ol, nav ul { 32 | padding: 0; 33 | } 34 | 35 | /* 36 | * Remove text-shadow in selection highlight: h5bp.com/i 37 | * These selection declarations have to be separate. 38 | * Customize the background color to match your design. 39 | */ 40 | 41 | ::-moz-selection { 42 | background: #b3d4fc; 43 | text-shadow: none; 44 | } 45 | 46 | ::selection { 47 | background: #b3d4fc; 48 | text-shadow: none; 49 | } 50 | 51 | /* 52 | * A better looking default horizontal rule 53 | */ 54 | 55 | hr { 56 | display: block; 57 | height: 1px; 58 | border: 0; 59 | border-top: 1px solid #ccc; 60 | margin: 1em 0; 61 | padding: 0; 62 | } 63 | 64 | /* 65 | * Remove the gap between images and the bottom of their containers: h5bp.com/i/440 66 | */ 67 | 68 | img { 69 | vertical-align: middle; 70 | max-width: 100%; 71 | } 72 | 73 | /* 74 | * Remove default fieldset styles. 75 | */ 76 | 77 | fieldset { 78 | border: 0; 79 | margin: 0; 80 | padding: 0; 81 | } 82 | 83 | /* 84 | * Allow only vertical resizing of textareas. 85 | */ 86 | 87 | textarea { 88 | resize: vertical; 89 | } -------------------------------------------------------------------------------- /proposal/tdd-with-angularjs_joeeames.md: -------------------------------------------------------------------------------- 1 | TDD with AngularJS 2 | ======================== 3 | 4 | * Speaker : Joe Eames 5 | * Available : Nov 8 and 9 6 | * Duration : 30-60 mins based on need 7 | 8 | Description 9 | ----------- 10 | 11 | Are you struggling to do TDD in JavaScript? AngularJS is a fantastic MV* framework from the brains at Google, built from the ground up with Unit Testing in mind. It is quickly becoming the framework of choice for many JavaScript devs. It has a unique dependency injection implementation that not only supports but actually embraces building applications using Test Driven Development. Although no prior experience is assumed, this is NOT an introduction to AngularJS. We will be writing code and enhancing a real-world application. In doing so we will learn how AngularJS supports using TDD to write well structured and maintainable code. Please come prepared to code. 12 | 13 | Speaker Bio 14 | ----------- 15 | 16 | ![joeeames](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/joeeames.png) 17 | 18 | Joe began his love of programming on an Apple III in BASIC. Although his preferred language is javascript, he has worked professionally with just about every major Microsoft language. He is currently a front end developer for Domo Inc. Joe has always had a strong interest in education, and has worked both full and part time as a technical teacher for over ten years. He is a frequent blogger and speaker, the curator of testdrivenjs.com, and a panelist on the JavaScript Jabber podcast (http://javascriptjabber.com/) He can be found at @josepheames 19 | 20 | 21 | Links 22 | ----- 23 | 24 | * Blog: http://geekswithblogs.net/joeeames 25 | * Passion: http://testdrivenjs.com 26 | * Company: http://www.domo.com/ 27 | * Github: http://github.com/joeeames 28 | * Twitter: http://twitter.com/josepheames 29 | -------------------------------------------------------------------------------- /proposal/easy-dynamic-websites-using-fuzzytoast_howardabrams.md: -------------------------------------------------------------------------------- 1 | [Easy dynamic websites using FuzzyToast] 2 | ======================================== 3 | 4 | * Speaker : [Howard Abrams] 5 | * Available : [Anytime] 6 | * Duration : [30 minutes (but flexible)] 7 | 8 | Description 9 | ----------- 10 | 11 | Create dynamic web applications by combining data grabbed from REST 12 | services with templates from your website... all with a single line of 13 | JavaScript. The FuzzyToast plugin for jQuery, let's you build small to 14 | medium-sized active websites with minimal effort. This session will 15 | show you the framework, how to use it, and how it can be used with 16 | other jQuery plugins and frameworks. 17 | 18 | Clearly, build clunky, inefficient web applications by having servers 19 | create HTML pages is so twentieth century. However, for many 20 | situations, setting up a Backbone may be more effort than needed. In 21 | this session, I'll build a complete web application that dynamic 22 | retrieves its data from a server that delivers JSON through a REST 23 | interface to show how easy FuzzyToast is to make panels that update 24 | themselves. 25 | 26 | This target audience for this session is those familiar with jQuery, 27 | but not experts and building complete web applications. 28 | 29 | 30 | Speaker Bio 31 | ----------- 32 | 33 | ![howardabrams](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/howardabrams.png) 34 | 35 | I built my first web app in 1993 when I traded in my Tk GUIs for Perl 36 | CGIs running on CERN's first implementation of `httpd`. After building 37 | many web apps in Java and icky JSPs (even creating my own framework 38 | to solve the problem), I started the FuzzyToast project to allow a 39 | browser to do the work of rendering dynamic web pages. 40 | 41 | Links 42 | ----- 43 | 44 | * Blog: http://www.howardism.org 45 | * Project: http://www.fuzzytoast.com 46 | * Github: http://github.com/howardabrams 47 | * Twitter: http://twitter.com/howardabrams 48 | -------------------------------------------------------------------------------- /proposal/requirejs-to-tame-your-javascript_iammerrick.md: -------------------------------------------------------------------------------- 1 | Require.js To Tame Your JavaScript 2 | ================================== 3 | 4 | * Speaker : Merrick Christensen 5 | * Available : Anytime 6 | * Duration : 30 - 45 minutes (Flexible) 7 | 8 | Description 9 | ----------- 10 | 11 | The AMD specification and [Require.js](http://requirejs.org) go a long way towards helping you write more maintainable JavaScript. We'll look at leveraging Require.js and AMD modules to tame your JavaScript. This talk will offer a brief introduction to the AMD specification APIs, then dive into the most powerful features of Require.js. 12 | 13 | Here is a list of things we will explore: 14 | 15 | 1. Errbacks, catching errors and responding gracefully. Examples: Restarting a feature. Fallback loading when a CDN goes down. 16 | 17 | 2. Using plugins as middleware to preprocess your JavaScripts. Examples: CoffeeScript. Non-AMD Scripts. 18 | 19 | 3. Using plugins to load different types of dependencies like CSS and templates. 20 | 21 | 4. The Require.js plugin API, writing a plugin. 22 | 23 | 5. Require.js at build time, using r.js to optimize your project. Dead code removal & preprocessing with plugins. 24 | 25 | After this presentation, you will be better equipped to write and maintain large scale JavaScript applications for the browser. 26 | 27 | 28 | Speaker Bio 29 | ----------- 30 | 31 | ![iammerrick](https://raw.github.com/iammerrick/cascadiajs.github.com/master/proposal/images/iammerrick.png) 32 | 33 | I am a JavaScript developer at Domo reinventing the way people do business. I am a strong proponent for open source software and have been obsessively interested in writing maintainable rich clients for the browser since I was in diapers (not entirely true). 34 | 35 | Concerned about my qualification? [Check it son](http://merrickchristensen.com/work.html)... you're welcome. 36 | 37 | 38 | Links 39 | ----- 40 | 41 | * Blog: http://merrickchristensen.com 42 | * Company: http://domo.com 43 | * Github: http://github.com/iammerrick 44 | * Twitter: http://twitter.com/iammerrick -------------------------------------------------------------------------------- /proposal/dark-secrets-of-dirty-projects_molant.md: -------------------------------------------------------------------------------- 1 | Dark Secrets of Dirty Projects 2 | ====== 3 | 4 | * Speaker: Anton Molleda 5 | * Available: any time 6 | * Duration: around 45 minutes although it could be a bit more or less depending on the number of dirty secrets I can share and Q&A :) 7 | * Ideal audience: Anyone insterested in knowing more about HTML5 experiences/experiments and the problems they can find (and hopefully some solutions) 8 | 9 | Description 10 | ------------- 11 | 12 | Microsoft's IE team has partnered with several companies to create new HTML5 experiences. Plain Concepts is one of these companies and we have participated in several of these experiences (more or less involved). During this session we will review this experience not from a marketing point of view but from a developer's side. We will talk about the issues we had, the problems with the code, differences accross browsers that maybe you don't know and how to solve them (or at least keep them in mind!). 13 | 14 | Some of the projects that will be covered are: 15 | * The Hunger Games: http://thecapitoltour.pn 16 | * Prometheus Training Center: http://www.projectprometheus.com/trainingcenter 17 | * The XX - Coexist: http://coexist.thexx.info/ 18 | And some others not publicly available yet (but that hopefully will be then)! 19 | 20 | Personal Bio 21 | ------------ 22 | 23 | ![Anton Molleda](https://raw.github.com/molant/cascadiajs.github.com/master/proposal/images/molant.png) 24 | 25 | Anton Molleda, Spanish born, decided he wanted to visit the world and move to Lyon (France) to get a Computer’s Science degree. After finishing his studies and realizing how much he missed the tapas and jamón, he went back to Spain where he started developing with Microsoft Technologies. How he ended up working in Plain Concepts and be the manager of the US branch is still a mystery, but an even greater is how he ended up being a JS developer too. In any case he seems to be enjoying it so far. 26 | 27 | Links 28 | ----- 29 | 30 | * Company: http://www.plainconcepts.com 31 | * Twitter: http://twitter.com/molant 32 | * GitHub: https://github.com/molant -------------------------------------------------------------------------------- /proposal/windows-8-apps-in-javascript-the-good-the-bad-and-the-ugly.md: -------------------------------------------------------------------------------- 1 | # Windows 8 Apps in JavaScript: The Good, the Bad, and the Ugly 2 | 3 | * Speaker: Domenic Denicola 4 | * Duration: 30 or 60 minutes 5 | 6 | Anders Hejlsberg would have you believe that you cannot build large applications in JavaScript. My team has been proving him false for over two years now, building desktop e-reader software in HTML5, JavaScript, and CSS. Lately we've turned our efforts toward a Windows 8 application, built, yet again, in these technologies. 7 | 8 | This is the story of how we did that, with a focus on the many gaps we filled in the rudimentary framework provided. When creating a serious app, you need to go far beyond the techniques shown in the Microsoft demos. Come learn how we integrated a Node.js build process and module system, used Knockout's two-way databinding, built our own custom unit test harness, and worked around a number of flat-out bugs in the provided libraries. 9 | 10 | 11 | ## Speaker Bio 12 | 13 | Domenic 14 | 15 | I develop software and servers for the Nook at [Barnes & Noble.com](http://www.barnesandnoble.com). This includes desktop apps written in HTML5 and JavaScript, both for traditional OS's and for Windows 8, as well as Node.js services for those applications. Outside of work, I enjoy taking part in the New York tech scene and contributing to the growing open-source ecosystem surrounding Node.js. Some topics I am passionate about include [promises][], [unit testing][], and the future of the JavaScript language. 16 | 17 | [promises]: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript 18 | [unit testing]: http://www.slideshare.net/domenicdenicola/unit-testing-for-great-justice 19 | 20 | 21 | ## Links 22 | 23 | * Website: http://domenicdenicola.com 24 | * Company: http://www.barnesandnoble.com 25 | * GitHub: https://github.com/domenic 26 | * Twitter: https://twitter.com/domenic 27 | -------------------------------------------------------------------------------- /proposal/tdd-in-javascript_joeeames.md: -------------------------------------------------------------------------------- 1 | TDD in JavaScript 2 | ======================== 3 | 4 | * Speaker : Joe Eames 5 | * Available : Nov 8 and 9 6 | * Duration : 30-60 mins based on need, or two 30 minute presentations, part 1 and 2 7 | 8 | Description 9 | ----------- 10 | 11 | Test Driven Development has been around for a long time, but rarely do we see it practiced by JavaScript programmers. A large number of developers think that the only benefit of TDD is the unit tests, but that is simply not true. Test Driven Development is widely recognized as one of the most effective ways to build code that works and is well factored. Unfortunately bringing this practice to JavaScript, and especially to client-side JavaScript, offers a wide range of unique challenges. In this session we won't just discuss TDD as an abstract concept but we will actually learn by doing and build a sample application using Test Driven Development. In addition, we will learn about many of the tools that enable TDD, and how to overcome JavaScript-specific challenges with TDD. Please come prepared to code. 12 | 13 | Note to organizers: 14 | This will be an evolution of a session I gave at the Utah Open Source 2012 conference which you can view here: 15 | http://www.youtube.com/watch?v=qsCm4j0aWaU 16 | 17 | Speaker Bio 18 | ----------- 19 | 20 | ![joeeames](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/joeeames.png) 21 | 22 | Joe began his love of programming on an Apple III in BASIC. Although his preferred language is javascript, he has worked professionally with just about every major Microsoft language. He is currently a front end developer for Domo Inc. Joe has always had a strong interest in education, and has worked both full and part time as a technical teacher for over ten years. He is a frequent blogger and speaker, the curator of testdrivenjs.com, and a panelist on the JavaScript Jabber podcast (http://javascriptjabber.com/) He can be found at @josepheames 23 | 24 | 25 | Links 26 | ----- 27 | 28 | * Blog: http://geekswithblogs.net/joeeames 29 | * Passion: http://testdrivenjs.com 30 | * Company: http://www.domo.com/ 31 | * Github: http://github.com/joeeames 32 | * Twitter: http://twitter.com/josepheames 33 | -------------------------------------------------------------------------------- /grunt.js: -------------------------------------------------------------------------------- 1 | /*global module:false*/ 2 | module.exports = function(grunt) { 3 | 4 | // Project configuration. 5 | grunt.initConfig({ 6 | meta: { 7 | version: '0.1.0', 8 | banner: '/*! CascadisJS - v<%= meta.version %> - ' + 9 | '<%= grunt.template.today("yyyy-mm-dd") %>\n' + 10 | '* http://cascadiajs.com/\n' + 11 | '* Copyright (c) <%= grunt.template.today("yyyy") %> ' + 12 | 'CascadiaJS; Licensed MIT */' 13 | }, 14 | lint: { 15 | files: ['asset/js/*.js'] 16 | }, 17 | concat: { 18 | dist: { 19 | src: ['asset/js/*.js'], 20 | dest: 'asset/js/compiled/site.js' 21 | } 22 | }, 23 | min: { 24 | dist: { 25 | src: ['', ''], 26 | dest: 'asset/js/compiled/site.min.js' 27 | } 28 | }, 29 | watch: { 30 | files: ['', 'asset/css/scss/*.scss', 'index.html'], 31 | tasks: 'compass:build lint concat min reload' 32 | }, 33 | compass: { 34 | build: { 35 | src: 'asset/css/scss', 36 | dest: 'asset/css', 37 | outputstyle: 'compressed', 38 | linecomments: false, 39 | forcecompile: true 40 | } 41 | }, 42 | reload: { 43 | port: 35729, 44 | liveReload: {}, 45 | proxy: { 46 | host: 'localhost', 47 | port: 8000 48 | } 49 | }, 50 | img: { 51 | png: { 52 | src: ['asset/img/*.png'] 53 | } 54 | }, 55 | jshint: { 56 | options: { 57 | curly: true, 58 | eqeqeq: true, 59 | immed: true, 60 | latedef: true, 61 | newcap: true, 62 | noarg: true, 63 | sub: true, 64 | undef: true, 65 | boss: true, 66 | eqnull: true, 67 | browser: true, 68 | devel: true 69 | }, 70 | globals: { 71 | jQuery: true, 72 | $: true 73 | } 74 | }, 75 | uglify: {} 76 | }); 77 | 78 | // Default task. 79 | grunt.registerTask('default', 'server open-browser reload watch'); 80 | grunt.registerTask('build', 'compass lint concat min img'); 81 | grunt.registerTask('open-browser', function() { 82 | var open = require('open'); 83 | open( 'http://localhost:8000' ); 84 | }); 85 | 86 | // Extra Tasks 87 | 88 | grunt.loadTasks('asset/grunt'); 89 | 90 | }; 91 | -------------------------------------------------------------------------------- /asset/css/scss/_helpers.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Helper classes 3 | ========================================================================== */ 4 | 5 | /* 6 | * Image replacement 7 | */ 8 | 9 | .ir { 10 | background-color: transparent; 11 | border: 0; 12 | overflow: hidden; 13 | /* IE 6/7 fallback */ 14 | *text-indent: -9999px; 15 | } 16 | 17 | .ir:before { 18 | content: ""; 19 | display: block; 20 | width: 0; 21 | height: 100%; 22 | } 23 | 24 | /* 25 | * Hide from both screenreaders and browsers: h5bp.com/u 26 | */ 27 | 28 | .hidden { 29 | display: none !important; 30 | visibility: hidden; 31 | } 32 | 33 | /* 34 | * Hide only visually, but have it available for screenreaders: h5bp.com/v 35 | */ 36 | 37 | .visuallyhidden { 38 | border: 0; 39 | clip: rect(0 0 0 0); 40 | height: 1px; 41 | margin: -1px; 42 | overflow: hidden; 43 | padding: 0; 44 | position: absolute; 45 | width: 1px; 46 | } 47 | 48 | /* 49 | * Extends the .visuallyhidden class to allow the element to be focusable 50 | * when navigated to via the keyboard: h5bp.com/p 51 | */ 52 | 53 | .visuallyhidden.focusable:active, 54 | .visuallyhidden.focusable:focus { 55 | clip: auto; 56 | height: auto; 57 | margin: 0; 58 | overflow: visible; 59 | position: static; 60 | width: auto; 61 | } 62 | 63 | /* 64 | * Hide visually and from screenreaders, but maintain layout 65 | */ 66 | 67 | .invisible { 68 | visibility: hidden; 69 | } 70 | 71 | /* 72 | * Clearfix: contain floats 73 | * 74 | * For modern browsers 75 | * 1. The space content is one way to avoid an Opera bug when the 76 | * `contenteditable` attribute is included anywhere else in the document. 77 | * Otherwise it causes space to appear at the top and bottom of elements 78 | * that receive the `clearfix` class. 79 | * 2. The use of `table` rather than `block` is only necessary if using 80 | * `:before` to contain the top-margins of child elements. 81 | */ 82 | 83 | .clearfix:before, 84 | .clearfix:after { 85 | content: " "; /* 1 */ 86 | display: table; /* 2 */ 87 | } 88 | 89 | .clearfix:after { 90 | clear: both; 91 | } 92 | 93 | /* 94 | * For IE 6/7 only 95 | * Include this rule to trigger hasLayout and contain floats. 96 | */ 97 | 98 | .clearfix { 99 | *zoom: 1; 100 | } -------------------------------------------------------------------------------- /proposal/async-javascript_johnkpaul.md: -------------------------------------------------------------------------------- 1 | Asynchronous Javascript - callbacks are so old school 2 | ======================== 3 | 4 | * Speaker : John K. Paul 5 | * Available : Nov 8 and 9 6 | * Duration : 45-60 mins based on need 7 | 8 | Description 9 | ----------- 10 | 11 | Javascript developers can't get enough of callbacks. It's been our tried and true workhorse when dealing with asynchronous code since the dawn of ajax. With the advent of nodejs, we've taken things to the extreme. Now, if we want to make a database query, respond to a web server request, or make a rest call to a web service, we need deeply nested callbacks in order to achieve what we need. In time, this phenomenon becomes the pyramid of doom, where we need 500 character of horizontal screen width to read all of our code. 12 | 13 | The issue here isn't that we are using asynchronous code, but rather that we aren't using the best design pattern for the job. I'd like to talk through a relatively new paradigm for control flow in javascript, the promise. Using this technique, you can develop an much more straightforward asynchronous javascript application. Not only is it a way to remove the need for callbacks, but it opens a door to new design possibilities, without the complexity of continuation passing style. Rather than passing all of our callbacks as arguments, we will take a higher level, and more functional approach, by creating a system that expects promise objects to eventually produce data, and we manipulate that data expecting that it will exist in the future. 14 | 15 | Note to organizers: 16 | This will be an evolution of a talk at the 2012 Pittsburgh Tech Fest which you can view here: 17 | https://vimeo.com/49946885 18 | 19 | Speaker Bio 20 | ----------- 21 | 22 | ![johnkpaul](https://secure.gravatar.com/avatar/eee585a10c1d7c4f1f30e28077ffa720?size=256) 23 | 24 | John K. Paul is the VP of Engineering at Avagen Ventures and former lead front end software engineer at TheLadders.com. He is a contributor to numerous open source projects including learn.jquery.com. He has spoken to various startups around NYC about front end development, and scalable engineering practices, in particular, unit testing javascript. Additionally, he has taught Javascript and jQuery fundamentals to teams throughout the NYC area. 25 | 26 | Links 27 | ----- 28 | 29 | * Blog: http://johnkpaul.tumblr.com 30 | * Github: http://github.com/johnkpaul 31 | * Twitter: http://twitter.com/johnkpaul 32 | * Vimeo: http://vimeo.com/johnkpaul 33 | * SpeakerRate: http://speakerrate.com/speakers/110621-john-k-paul 34 | -------------------------------------------------------------------------------- /proposal/reactive-html-with-meteor_dgreensp.md: -------------------------------------------------------------------------------- 1 | Reactive HTML with Meteor 2 | ======================== 3 | 4 | * Speaker : David Greenspan 5 | * Available : All 6 | * Duration : 30 mins 7 | 8 | Description 9 | ----------- 10 | 11 | Meteor is a full-stack web framework that brings new principles to 12 | application development. Using pure JavaScript on the client and 13 | server, apps define both a rich client and a server-side data endpoint 14 | that work together so that database updates stream in realtime all the 15 | way from the backend to the DOM. Meanwhile, client-side database 16 | mutations are simulated locally but are still securely validated on 17 | the server. Unlike previous reactive web frameworks, Meteor lets you 18 | use your favorite database, template language, and JS/CSS 19 | preprocessors, while making it all realtime. 20 | 21 | Spark is Meteor's library for live-updating HTML. Normally, web apps 22 | must both *declare* their views and then *update* them with separate 23 | logic. For example, a chat view is rendered to HTML as a series of 24 | DIVs, and then, when a new chat message comes in, there is update code 25 | to append a new DIV. Or, a button might have certain properties, like 26 | its class and whether it's disabled, that depend on some local state 27 | or even database state. This button must both occur in some original 28 | form in HTML and be updated from JavaScript. To make matters worse, 29 | often the original HTML is declared on the server, while the update 30 | logic happens on the client! 31 | 32 | Spark gets rid of the update step by automatically re-rendering parts 33 | of the DOM when their HTML needs to change. It can even "match and 34 | patch" your templates to apply arbitrary changes to the HTML without 35 | disturbing form fields and other sensitive elements. Spark supports 36 | browsers going back to IE 7 and takes care of the browser hacks for 37 | you. Code that uses Spark can also run in a server environment with 38 | no DOM to generate static HTML. 39 | 40 | Speaker Bio 41 | ----------- 42 | 43 | ![David Greenspan](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/dgreensp.jpg) 44 | 45 | Before coming to Meteor, David Greenspan created EtherPad, a web-based 46 | collaborative document editor, which was acquired by Google and 47 | open-sourced in 2009. Before that he founded AppJet, an early 48 | server-side JavaScript platform. David holds two SBs from MIT in 49 | Computer Science and Physics. 50 | 51 | 52 | Links 53 | ----- 54 | 55 | * Company: http://meteor.com/ 56 | * Github: http://github.com/meteor/meteor 57 | -------------------------------------------------------------------------------- /proposal/the-real-bad-parts_johnkpaul.md: -------------------------------------------------------------------------------- 1 | Javascript - The Real Bad Parts 2 | ======================== 3 | 4 | * Speaker : John K. Paul 5 | * Available : Nov 8 and 9 6 | * Duration : 45-60 mins based on need 7 | 8 | Description 9 | ----------- 10 | 11 | Douglas Crockford's book "Javascript: The Good Parts," is one of the best selling javascript books of all time and is only 176 pages long. For most developers, there's an tacit belief that the rest of Javascript falls under "bad," especially when comparing that to the 900 pages of "Javascript: The Definitive Guide" There are websites dedicated to these list of language mis-features and anti-patterns, and dozens of blog posts about how to avoid the "bad" in your own code. 12 | 13 | I don't think that these most of these things are actually "bad". In their day to day, developers don't need to worry about all of these smaller issues. Chances are, a javascript developer has encountered these difficult issues, learned the solution, and then immediately absorbed the concepts. 14 | 15 | I'm going to explain to you, the real "bad" parts of the language. These are at least three javascript language features that are the most likely to trip up a javascript developer. Once you innately understand these three issues, you will become significantly more productive in javascript, and will be a lot less confused when reading through large javascript code bases. 16 | 17 | I'll be walking you through at least three concepts within javascript language semantics: 18 | 1. What on earth does "this" mean, and in what context does its meaning change? 19 | 2. How does prototypical inheritance work? 20 | 3. What is hosting? Why do I care what a function expression or function declaration is? 21 | 22 | [Blog post that I wrote about the subject](http://johnkpaul.tumblr.com/post/20720951024/javascript-only-three-bad-parts) 23 | 24 | Speaker Bio 25 | ----------- 26 | 27 | ![johnkpaul](https://secure.gravatar.com/avatar/eee585a10c1d7c4f1f30e28077ffa720?size=256) 28 | 29 | John K. Paul is the VP of Engineering at Avagen Ventures and former lead front end software engineer at TheLadders.com. He is a contributor to numerous open source projects including learn.jquery.com. He has spoken to various startups around NYC about front end development, and scalable engineering practices, in particular, unit testing javascript. Additionally, he has taught Javascript and jQuery fundamentals to teams throughout the NYC area. 30 | 31 | Links 32 | ----- 33 | 34 | * Blog: http://johnkpaul.tumblr.com 35 | * Github: http://github.com/johnkpaul 36 | * Twitter: http://twitter.com/johnkpaul 37 | * Vimeo: http://vimeo.com/johnkpaul 38 | * SpeakerRate: http://speakerrate.com/speakers/110621-john-k-paul 39 | -------------------------------------------------------------------------------- /proposal/curiosity-killed_fivetanley.md: -------------------------------------------------------------------------------- 1 | Curiosity Killed: Embracing Failure Without Burning Alive 2 | ======================== 3 | 4 | * Speaker : Stanley Stuart 5 | * Available : Any time 6 | * Duration : 30 minutes 7 | 8 | Description 9 | ----------- 10 | 11 | Warning: Unconference material ahead! But it does involve JavaScript. 12 | 13 | I'm honestly afraid of missing everything cool. 14 | 15 | Our brains initially start with a blank state when we are born. As we mature, 16 | we become pre-dispositioned to avoid people we think are different than us. 17 | We often shoot new ideas down without thought, or because we don't have 18 | the perspective to tackle problems in a different way. Our mental shortcuts, 19 | or 'heuristics', are incredibly useful for some sets of problems. **Too often, 20 | I think we, or at least I personally, arrive at the conclusion of "I can't do this".** 21 | 22 | I'm wrong. You and I **can** do it. We don't have to tell each other lies that we can't. 23 | 24 | I hear lots of sentiments like this on the internet: 25 | 26 | * "I don't want to be around this person, they're *stupid*." 27 | * "Why would anybody do such an idiotic thing?" 28 | * "Not Invented Here! Not Invented Here! Look who's rewriting the wheel!" 29 | * "**JavaScript**? Why the hell would you write your app in JavaScript?" 30 | 31 | This year I was diagnosed with ADHD, and have been learning how to dispell 32 | the myths of worthlessness others told about me and that I unfortunately 33 | believed. I want to help JavaScript dismiss myths that experts, 34 | both from within the JavaScript community and outside it, have perpetuated. 35 | 36 | In this talk is a sort of coming-of-age story about learning to embrace failure 37 | as a tool to constantly improve ourselves and be happier. Logic, pride, and doing 38 | things The Right Way will take a backseat to honesty, emotions, communication, 39 | and self-improvement. It's about embracing your style, because somebody else 40 | probably has that style too. It's about finding what works for you, and 41 | working with others. It's about putting others up instead of dragging them down. 42 | 43 | I'm hoping to dispel some JavaScript dogma as well. 44 | 45 | I'll use my own experiences and the life experiences and stories from Walter 46 | Kirn, Friedrich Nietzche, Bonnie Raitt, John J. Ratey, Edward Hallowell, 47 | Kent Greenfield, and Captain Planet to open ourselves up to new ideas and new people, and most 48 | importantly, change our expectations about ourselves. 49 | 50 | Also, I'm sorry this is past the deadline. 51 | 52 | Speaker Bio 53 | ----------- 54 | 55 | ![fivetanley](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/fivetanley.jpg) 56 | 57 | I wwebsite on the Internet. 58 | 59 | A male human being who loves watching terrible movies. I also listen to music 60 | from time to time. And there's this programming thing I keep hearing about 61 | that I apparently do? 62 | 63 | Links 64 | ----- 65 | 66 | * Blog: http://fivetanley.com | work in progress 67 | * Github: http://github.com/fivetanley 68 | * Twitter: http://twitter.com/fivetanley 69 | -------------------------------------------------------------------------------- /proposal/keg.io_crcastle.md: -------------------------------------------------------------------------------- 1 | keg.io 2 | ====== 3 | _arduino- and node.js-enabled kegerator_ 4 | 5 | * Speaker: Chris Castle 6 | * Available: any time 11/8-11/9, 2012 7 | * Duration: 30 or 60 minutes 8 | * Ideal audience: node.js practitioners, arduino/hardware hobbyists, beer drinkers 9 | 10 | keg.io is a technology-laden kegerator project originally developed by Vivaki Nerve Center employees to satisfy their nerdiest beer-drinking needs. It's built on node.js and utilizes an arduino microcontroller to interface with the keg's hardware and sensors. 11 | 12 | Come learn how we built it -- from learning about hardware (never soldered _anything_ before this project), to learning Arduino, to the trials and tribulations of debugging hardware and software… at the same time (fml). Also I'll talk about how you can get one in your office! 13 | 14 | Check out [http://keg.io](http://keg.io) for more details. 15 | 16 | Talk Outline 17 | ------------- 18 | 1. What is it 19 | - Picture of system, diagram of components 20 | 2. Why we built it 21 | - wanted to learn node, wanted to tinker with hardware, like to play with data, and like drinking beer 22 | 3. How we built it 23 | - v1: node.js talks serial 24 | - node.js runs on server beside kegerator, serial connection to arduino (i.e. kegerator) 25 | - v2: node.js goes to the cloud! (persistent, grey Seattle-style) 26 | - node.js server is an HTTP endpoint at AWS that arduino (i.e. kegerator) talks to 27 | - server also provides public web-based dashbaord ([keg.io](http://keg.io)) and beer consumption stats API 28 | 4. Demo! 29 | - Hopefully I can bring a built-out kegerator with me. If not, I can shoot a video for the demo, but it won't be as exciting. If I do bring one, I can have it setup throughout the conference for people to pour themselves a tasty beer. 30 | 5. What's next? 31 | - Post-pour hooks? (node.js server makes a POST request to custom endpoint when you do a pour) 32 | - More stats and data visualization 33 | - Too many ideas! Really we just want to get to the point where anyone can contribute a small piece to the project. AND get one setup in every nerdy, developer-filled office we can. 34 | - We also realize there could be a business opportunity here but haven't explored that too much. 35 | 6. Audience Q&A 36 | 37 | _Talk length is flexible. I could use 60 minutes (including Q&A) or 30 minutes or, less ideally, could squeeze the talk in to a 10-minute lightning session._ 38 | 39 | 40 | Personal Bio 41 | ------------ 42 | Crude and cynical observer of the world. Incurable optimist day-to-day. Tinkers with APIs while consuming IPAs. 43 | 44 | ![Chris Castle](https://raw.github.com/crcastle/cascadiajs.github.com/master/proposal/images/crcastle.png) 45 | 46 | * I'm Chris Castle [crcastle@gmail.com](mailto:crcastle@gmail.com) 47 | * I twitter [@crc](http://twitter.com/crc) 48 | * I'm [crcastle](https://github.com/crcastle) on the githubs 49 | * I dwell in the [Central District](http://en.wikipedia.org/wiki/Central_District,_Seattle) of Seattle 50 | * Most of my waking hours I'm thinking about code and keeping the [amazing group of people](http://simplymeasured.com/about/our-team/) at [Simply Measured](http://simplymeasured.com) happy and making an awesome product (p.s. [we're hiring](http://simplymeasured.com/about/careers/)) 51 | -------------------------------------------------------------------------------- /proposal/dont_cross_the_streams-mattpodwysocki.md: -------------------------------------------------------------------------------- 1 | Don't Cross the Streams 2 | ======================== 3 | 4 | * Speaker : Matthew Podwysocki 5 | * Available : November 8-9, 2012 6 | * Duration : 45 minutes 7 | 8 | Description 9 | ----------- 10 | 11 | In today’s world, streams are everywhere, whether it is social media feeds, binary data, GPS data or any other type of real-time data. Node.js and library approaches for client and server such as socket.io have made stream programming even easier and accessible to more people. But with the ease also comes complication and a number of questions arise. How do we start composing streams together? How do we filter them? How do we express that we listen to this stream until another stream fires? Pretty quickly the code can becomes strewn with nested callbacks and global state, which makes you lose the essence of what you’re trying to accomplish. Luckily, there are patterns which can help alleviate some of these problems. The Node.js community has also created a number of libraries which focus on democratizing stream programming including async, as well as more ambitious approaches such as custom languages such as IcedCoffeeScript. We’ll look at a number of these libraries and also cover the Reactive Extensions for JavaScript, a library for democratizing stream and asynchronous callback programming to unify the two concepts and allow for queries to be written over them. 12 | 13 | We’ll go from: 14 | 15 | - **Dr. Egon Spengler:** There's something very important I forgot to tell you. 16 | - **Dr. Peter Venkman:** What? 17 | - **Dr. Egon Spengler:** Don't cross the streams. 18 | - **Dr. Peter Venkman:** Why? 19 | - **Dr. Egon Spengler:** It would be bad. 20 | - **Dr. Peter Venkman:** I'm fuzzy on the whole good/bad thing. What do you mean, "bad"? 21 | - **Dr. Egon Spengler:** Try to imagine all life as you know it stopping instantaneously and every molecule in your body exploding at the speed of light. 22 | - **Dr Ray Stantz:** Total protonic reversal. 23 | - **Dr. Peter Venkman:** Right. That's bad. Okay. All right. Important safety tip. Thanks, Egon. 24 | 25 | To: 26 | 27 | - **Dr. Egon Spengler:** I have a radical idea. The door swings both ways, we could reverse the polarity flow through the gate. 28 | - **Dr. Peter Venkman:** How? 29 | - **Dr. Egon Spengler:** We'll cross the streams. 30 | - **Dr. Peter Venkman:** 'Scuse me Egon? You said crossing the streams was bad! 31 | - **Dr Ray Stantz:** Cross the streams... 32 | - **Dr. Peter Venkman:** You're gonna endanger us, you're gonna endanger our client - the nice lady, *who paid us in advance*, before she became a dog... 33 | - **Dr. Egon Spengler:** Not necessarily. There's definitely a *very slim* chance we'll survive. 34 | - **Dr. Peter Venkman:** I love this plan! I'm excited it could work! LET'S DO IT! 35 | 36 | Speaker Bio 37 | ----------- 38 | 39 | ![mattpodwysocki](https://raw.github.com/cascadiajs/cascadiajs.github.com/master/proposal/images/mattpodwysocki.png) 40 | 41 | Matthew Podwysocki is a software developer at Microsoft working with such teams as the Cloud Programmability Team on all things JavaScript. He is the author and maintainer of the Reactive Extensions for JavaScript and loves just hacking on JavaScript... 42 | 43 | 44 | Links 45 | ----- 46 | 47 | * Blogs: 48 | - http://codebetter.com/matthewpodwysocki/ 49 | - http://blogs.msdn.com/b/rxteam/ 50 | * Company: Microsoft 51 | * Github: 52 | - http://github.com/mattpodwysocki 53 | - https://github.com/reactive-extensions 54 | * Twitter: http://twitter.com/mattpodwysocki 55 | -------------------------------------------------------------------------------- /proposal/README.md: -------------------------------------------------------------------------------- 1 | # TALK SUBMISSIONS FOR 2012 ARE CLOSED!! 2 | # THE DEADLINE HAS PASSED. THANK YOU, EVERYONE WHO SUBMITTED. THIS COMMUNITY IS AMAZING. 3 | 4 |
5 | 6 | How To Submit A Proposal 7 | ======================== 8 | 9 | First and foremost, make sure you're available on both 11/8 and 11/9. Once we have settled on the talks, we will be curating an agenda that groups like topics together. More information at [cascadiajs.com](http://cascadiajs.com). 10 | 11 | * Create a **Github account** if you don't have one already 12 | * **Fork this repository** 13 | * **Create and commit a .MD file** in this directory named after the talk title and your Github ID. 14 | 15 | For example, if your talk is called "Intro To Node.js" and your Github ID is **janedoe**, name the file ```~/proposal/intro-to-nodejs_janedoe.md``` ([example template](https://github.com/cascadiajs/cascadiajs.github.com/blob/master/proposal/proposal-template_janedoe.md)) 16 | * **Commit an image of yourself** in the images subdirectory, named after your Github id. 17 | 18 | Format should be PNG, 256x256 Eg: ```~/proposal/images/janedoe.png``` 19 | * When you're ready, **submit a pull request** 20 | * **Send an email** to [carter.rabasa@gmail.com](mailto:carter.rabasa@gmail.com) to introduce yourself and so that we have a way to contact you if your talk is accepted. 21 | * **Wait patiently** (and *nicely*) for us to get back to you. We will respond to everyone who submits a proposal even if it's just to say "Thanks but no thanks". 22 | 23 | 24 | What should be in the proposal? 25 | ------------------------------- 26 | 27 | Every proposal should have, at minimum, the following information: 28 | 29 | * Your Full Name 30 | * Presentation Title 31 | * Presentation Description 32 | * Presentation Duration (in minutes/hours/days) 33 | * Your preferred photo for the website (256x256) 34 | 35 | If would be great if you could add in a short **personal bio** (50 words or less) and other details like links to your **blog**, **twitter account**, **open source projects**, **company**, or what have you, that's completely up to you. Whatever floats your boat. Bios are nice! :) 36 | 37 | To make this easier, we've created a template you can copy and modify. See ```proposal-template_jane-doe.md``` in this directory. 38 | 39 | If you have any other artifacts that relate to your presentation, like slide decks, code samples, videos, etc, make a directory named the same as the .MD file from above, and put related files in there. For example, if my proposal was saved in ```intro-to-nodejs_janedoe.md```, I would place the example code in ```~/cascadiajs.github.com/proposal/intro-to-nodejs_janedoe/example-code.js``` 40 | 41 | 42 | What are we looking for? 43 | ------------------------ 44 | 45 | We're looking for anything related to JS technology, which includes: browser, Node.js, Windows 8, Firefox OS, you name it. We're still working out the final format of the conference, but most of the talks will need to be ~30 minutes. 46 | 47 | We're also open to suggestions for unconference topics. For example, suppose you really want to talk about MongoDB in Node.js but don't have a presentation, maybe just some questions or experiences to share? We will likely set aside time for lightening talks, so get your ideas ready. 48 | 49 | Other Stuff 50 | ----------- 51 | 52 | If you have any questions about this process, need more information or need assistance with travel and/or lodging, don't hesitate to reach out to us at [carter.rabasa@gmail.com](mailto:carter.rabasa@gmail.com). 53 | 54 | 55 | Thanks, 56 | Troy and Carter 57 | -------------------------------------------------------------------------------- /asset/grunt/compass.js: -------------------------------------------------------------------------------- 1 | module.exports = function( grunt ) { 2 | 3 | // Create a new multi task. 4 | grunt.registerMultiTask( 'compass', 'This triggers the `compass compile` command.', function() { 5 | 6 | // Tell grunt this task is asynchronous. 7 | var done = this.async(), 8 | exec = require('child_process').exec, 9 | command = "compass compile", 10 | src = undefined, 11 | dest = undefined, 12 | config = this.data.config, 13 | images = this.data.images, 14 | fonts = this.data.fonts, 15 | outputstyle = this.data.outputstyle, 16 | linecomments = this.data.linecomments, 17 | forcecompile = this.data.forcecompile, 18 | debugsass = this.data.debugsass, 19 | relativeassets = this.data.relativeassets, 20 | libRequire = this.data.require, 21 | bundleExec = this.data.bundleExec; 22 | environment = this.data.environment; 23 | 24 | if ( this.data.src !== undefined ) { 25 | src = grunt.template.process(this.data.src); 26 | } 27 | 28 | if ( this.data.dest !== undefined ) { 29 | dest = grunt.template.process(this.data.dest); 30 | } 31 | 32 | if ( bundleExec ) { 33 | command = 'bundle exec ' + command; 34 | } 35 | 36 | if ( src !== undefined && dest !== undefined ) { 37 | command += ' --sass-dir="' + src + '" --css-dir="' + dest + '"'; 38 | } 39 | 40 | if ( config !== undefined ) { 41 | command += ' --config="' + config + '"'; 42 | } 43 | 44 | if ( images !== undefined ) { 45 | command += ' --images-dir="' + images + '"'; 46 | } 47 | 48 | if ( fonts !== undefined ) { 49 | command += ' --fonts-dir="' + fonts + '"'; 50 | } 51 | 52 | if ( debugsass !== undefined ) { 53 | if ( debugsass === true ) { 54 | command += ' --debug-info'; 55 | } 56 | } 57 | 58 | if ( relativeassets !== undefined ) { 59 | if ( relativeassets === true ) { 60 | command += ' --relative-assets'; 61 | } 62 | } 63 | 64 | if ( outputstyle !== undefined ) { 65 | command += ' --output-style ' + outputstyle; 66 | } 67 | 68 | if ( linecomments === false ) { 69 | command += ' --no-line-comments'; 70 | } 71 | 72 | if ( libRequire !== undefined ) { 73 | command += ' --require '+ libRequire; 74 | } 75 | 76 | if ( forcecompile === true ) { 77 | command += ' --force'; 78 | } 79 | 80 | if ( environment !== undefined ) { 81 | command += ' -e ' + environment; 82 | } 83 | 84 | function puts( error, stdout, stderr ) { 85 | 86 | grunt.log.write( '\n\nCOMPASS output:\n' ); 87 | grunt.log.write( stdout ); 88 | /* grunt.log.error( stderr ); 89 | * compass sends falsy error message to stderr... real sass/compass errors come in through the "error" variable. 90 | */ 91 | 92 | if ( error !== null ) { 93 | grunt.log.error( error ); 94 | done(false); 95 | } 96 | else { 97 | done(true); 98 | } 99 | } 100 | 101 | exec( command, puts ); 102 | grunt.log.write( '`' + command + '` was initiated.' ); 103 | }); 104 | }; -------------------------------------------------------------------------------- /asset/grunt/img.js: -------------------------------------------------------------------------------- 1 | 2 | var fs = require('fs'), 3 | path = require('path'), 4 | which = require('which'); 5 | 6 | // 7 | // This task takes care of img optimizations by running a set of `.png` 8 | // or `.jpg` files through optipng and jpegtran. 9 | // 10 | // grunt img: 11 | // 12 | // Gruntfile config: 13 | // 14 | // ... 15 | // img: { 16 | // src: ['img/**/*'], 17 | // options: { 18 | // ... 19 | // } 20 | // } 21 | // 22 | 23 | var win32 = process.platform === 'win32'; 24 | 25 | module.exports = function(grunt) { 26 | 27 | var png = ['.png'], 28 | jpegs = ['.jpg', 'jpeg']; 29 | 30 | // rev task - reving is done in the `output/` directory 31 | grunt.registerMultiTask('img', 'Optimizes .png/.jpg images using optipng/jpegtran', function() { 32 | var cb = this.async(), 33 | files = grunt.file.expandFiles(this.file.src); 34 | 35 | var pngfiles = files.filter(function( file ) { 36 | return png.indexOf( path.extname( file ).toLowerCase() ) !== -1; 37 | }); 38 | 39 | var jpgfiles = files.filter(function( file ) { 40 | return jpegs.indexOf( path.extname( file ).toLowerCase() ) !== -1; 41 | }); 42 | 43 | grunt.helper('optipng', pngfiles, grunt.config('optipng'), function(err) { 44 | if(err) { 45 | grunt.log.error(err); 46 | return cb(false); 47 | } 48 | 49 | grunt.helper('jpegtran', jpgfiles, grunt.config('jpegtran'), function(err) { 50 | if(err) { 51 | grunt.log.error(err); 52 | return cb(false); 53 | } 54 | cb(); 55 | }); 56 | }); 57 | }); 58 | 59 | grunt.registerHelper('optipng', function(files, opts, cb) { 60 | opts = opts || {}; 61 | cb = cb || function() {}; 62 | 63 | grunt.helper('which', 'optipng', function(err, cmdpath) { 64 | if ( err ) { 65 | return grunt.helper( 'not installed', 'optipng', cb ); 66 | } 67 | 68 | var args = opts.args ? opts.args : []; 69 | args = args.concat(files); 70 | 71 | if ( !files.length ) { 72 | return cb(); 73 | } 74 | 75 | grunt.log.writeln('Running optipng... ' + grunt.log.wordlist(files)); 76 | var optipng = grunt.utils.spawn({ 77 | cmd: cmdpath, 78 | args: args 79 | }, function() {}); 80 | 81 | optipng.stdout.pipe(process.stdout); 82 | optipng.stderr.pipe(process.stderr); 83 | optipng.on('exit', function(code) { 84 | if ( code ) { 85 | grunt.warn( 'optipng exited unexpectedly with exit code ' + code + '.', code ); 86 | } 87 | cb(); 88 | }); 89 | }); 90 | }); 91 | 92 | grunt.registerHelper('jpegtran', function(files, opts, cb) { 93 | opts = opts || {}; 94 | cb = cb || function() {}; 95 | opts.args = opts.args ? opts.args : ['-copy', 'none', '-optimize', '-outfile', 'jpgtmp.jpg']; 96 | 97 | grunt.helper('which', 'jpegtran', function(err, cmdpath) { 98 | if ( err ) { 99 | return grunt.helper( 'not installed', 'jpegtran', cb ); 100 | } 101 | 102 | (function run(file) { 103 | if ( !file ) { 104 | return cb(); 105 | } 106 | 107 | grunt.log.subhead('** Processing: ' + file); 108 | var jpegtran = grunt.utils.spawn({ 109 | cmd: cmdpath, 110 | args: opts.args.concat(file) 111 | }, function() {}); 112 | 113 | jpegtran.stdout.pipe(process.stdout); 114 | jpegtran.stderr.pipe(process.stderr); 115 | 116 | jpegtran.on('exit', function(code) { 117 | if ( code ) { 118 | return grunt.warn( 'jpgtran exited unexpectedly with exit code ' + code + '.', code ); 119 | } 120 | // output some size info about the file 121 | grunt.helper('min_max_stat', 'jpgtmp.jpg', file); 122 | // copy the temporary optimized jpg to original file 123 | fs.createReadStream('jpgtmp.jpg') 124 | .pipe(fs.createWriteStream(file)).on('close', function() { 125 | run(files.shift()); 126 | }); 127 | }); 128 | }(files.shift())); 129 | }); 130 | 131 | }); 132 | 133 | grunt.registerHelper('not installed', function(cmd, cb) { 134 | grunt.verbose.or.writeln(); 135 | grunt.log.write('Running ' + cmd + '...').error(); 136 | grunt.log.errorlns([ 137 | 'In order for this task to work properly, :cmd must be', 138 | 'installed and in the system PATH (if you can run ":cmd" at', 139 | 'the command line, this task should work)' 140 | ].join(' ').replace(/:cmd/g, cmd)); 141 | grunt.log.subhead('Skiping ' + cmd + ' task'); 142 | 143 | if ( cb ) { 144 | cb(); 145 | } 146 | }); 147 | 148 | // **which** helper, wrapper to isaacs/which package plus some fallback logic 149 | // specifically for the win32 binaries in vendor/ (optipng.exe, jpegtran.exe) 150 | grunt.registerHelper('which', function(cmd, cb) { 151 | if ( !win32 || !/optipng|jpegtran/.test( cmd ) ) { 152 | return which( cmd, cb ); 153 | } 154 | 155 | var cmdpath = cmd === 'optipng' ? '../vendor/optipng-0.7.1-win32/optipng.exe' : 156 | '../vendor/jpegtran-8d/jpegtran.exe'; 157 | 158 | cb(null, path.join(__dirname, cmdpath)); 159 | }); 160 | }; 161 | -------------------------------------------------------------------------------- /asset/css/scss/_modules.scss: -------------------------------------------------------------------------------- 1 | @import 'compass/css3'; 2 | 3 | .wf-active .sct-head { 4 | text-transform: uppercase; 5 | } 6 | 7 | .logo { 8 | margin-top: 1em; 9 | } 10 | 11 | .logotype { 12 | margin-bottom: 0; 13 | 14 | text-align: center; 15 | } 16 | 17 | .logotype-accent { 18 | margin-left: 6px; 19 | 20 | color: $accent; 21 | } 22 | 23 | .tagline { 24 | margin-top: 0; 25 | margin-bottom: 0.33em; 26 | 27 | text-align: center; 28 | } 29 | 30 | .buttons { 31 | text-align: center; 32 | } 33 | 34 | .btn { 35 | padding: 0.5em; 36 | position: relative; 37 | top: 0; 38 | 39 | border: 1px solid rgba(0,0,0,0.2); 40 | 41 | background-color: $accent; 42 | background-image: url('../img/subtle_dots_green.png'); 43 | 44 | color: #FFF; 45 | text-shadow: 0px -1px 0px rgba(0,0,0,0.4); 46 | 47 | -webkit-user-select: none; 48 | -moz-user-select: -moz-none; 49 | user-select: none; 50 | 51 | -webkit-user-drag: none; 52 | -moz-user-drag: -moz-none; 53 | user-drag: none; 54 | 55 | @include border-radius(4px); 56 | @include box-shadow(inset 0 1px 1px rgba(255,255,255,0.3), 0 1px 1px rgba(0,0,0,0.2)); 57 | @include transition(0.1s ease top); 58 | 59 | &:hover { 60 | background-color: #FFF; 61 | background-image: url('../img/subtle_dots.png'); 62 | 63 | border: 1px solid #999; 64 | 65 | color: $accent; 66 | text-decoration: none; 67 | text-shadow: none; 68 | } 69 | 70 | &:active { 71 | top: 2px; 72 | } 73 | } 74 | 75 | .twitter { 76 | background-image: url('../img/twitter.png'); 77 | height: 38px; 78 | width: 38px; 79 | display: inline-block; 80 | margin-left: 1em; 81 | position: relative; 82 | top: 12px; 83 | 84 | &:hover { 85 | background-position: 0 40px; 86 | } 87 | } 88 | 89 | .sct-break { 90 | margin: 1.5em 0; 91 | clear: both; 92 | 93 | border: 1px solid #666; 94 | border: 1px solid rgba(0,0,0,0.2); 95 | border-left: none; 96 | border-right: none; 97 | 98 | background-color: $accent; 99 | background-image: url('../img/subtle_dots_green.png'); 100 | } 101 | 102 | .sct-head { 103 | color: #FFF; 104 | text-shadow: -1px -1px 1px rgba(0,0,0,0.3); 105 | font-size: 1.75em; 106 | } 107 | 108 | .sct-head:hover .sct-anchor { 109 | opacity: .6; 110 | } 111 | 112 | .sct-anchor { 113 | position: relative; 114 | top: -3px; 115 | left: 8px; 116 | 117 | font-size: 24px; 118 | text-decoration: none; 119 | 120 | opacity: 0; 121 | color: #fff; 122 | 123 | @include transition(0.5s); 124 | 125 | &:before { 126 | content: "\00B6"; 127 | } 128 | 129 | &:hover { 130 | text-decoration: none; 131 | } 132 | } 133 | 134 | .lineup-block { 135 | margin-left: 1.5em; 136 | margin-bottom: 0.75em; 137 | width: 148px; 138 | height: 14.375em; 139 | float: left; 140 | 141 | text-align: center; 142 | } 143 | 144 | .csstransitions .lineup-block { 145 | @include transition(all 0.3s ease); 146 | 147 | &:hover .lineup-img { 148 | top: -1.5em; 149 | } 150 | } 151 | 152 | .lineup-img { 153 | width: 100%; 154 | position: relative; 155 | top: 0; 156 | 157 | border-radius: 100px; 158 | 159 | @include box-shadow(0px 0px 1px rgba(0,0,0,0.3)); 160 | @include transition(top 0.3s ease); 161 | } 162 | 163 | .lineup-name { 164 | margin: 0.75em 0 0; 165 | 166 | font-size: 0.875em; 167 | font-family: proxima-nova, Helvetica Neue, Helvetica, Arial, sans-serif; 168 | font-weight: bold; 169 | color: #333; 170 | } 171 | 172 | .lineup-text { 173 | font-size: 0.875em; 174 | margin: 0 0 0.75em; 175 | 176 | color: $accent; 177 | } 178 | 179 | .agenda { 180 | margin-top: 1.5em; 181 | margin-bottom: 1.5em; 182 | 183 | tr { 184 | border: 1px solid #ccc; 185 | border-left: none; 186 | border-right: none; 187 | 188 | &:first-child { 189 | border: none; 190 | } 191 | 192 | &:last-child { 193 | border: none; 194 | } 195 | 196 | &:hover { 197 | color: $accent; 198 | } 199 | } 200 | 201 | td { 202 | padding: 0.5em 4em; 203 | padding-left: 1em; 204 | } 205 | } 206 | 207 | .agenda-time { 208 | width: 120px; 209 | 210 | font-size: 0.875em; 211 | text-transform: uppercase; 212 | } 213 | 214 | .agenda-sponsor { 215 | display: block; 216 | margin-top: 1em; 217 | 218 | font-family: proxima-nova, Helvetica Neue, Helvetica, Arial, sans-serif; 219 | font-weight: normal; 220 | font-size: .667em; 221 | } 222 | 223 | .contacts-img { 224 | width: 100px; 225 | margin: 1.5em; 226 | margin-left: 0; 227 | margin-top: 0; 228 | float: left; 229 | } 230 | 231 | .header { 232 | width: 100%; 233 | height: 375px; 234 | margin-bottom: -1.5em; 235 | 236 | background: lighten(rgb(93, 170, 241), 30%) url('../img/subtle_dots_blue.png'); 237 | 238 | text-shadow: 0 1px 0 #FFF; 239 | } 240 | 241 | .scroller { 242 | background: #FFF url('../img/subtle_dots.png'); 243 | } 244 | 245 | .no-touch { 246 | 247 | .header { 248 | position: fixed; 249 | } 250 | 251 | .scroller { 252 | margin-top: 375px; 253 | position: relative; 254 | z-index: 2; 255 | } 256 | 257 | } 258 | 259 | .sponsors { 260 | margin: 0 0 3em -1.5em; 261 | text-align: center; 262 | } 263 | 264 | .sponsors li { 265 | margin: 0 0.75em; 266 | display: inline-block; 267 | list-style: none; 268 | } 269 | 270 | .lt-ie8 .sponsors li { 271 | margin-bottom: 1.5em; 272 | } 273 | 274 | .sponsors-small, .sponsors-large { 275 | padding: 0; 276 | margin-bottom: 1em; 277 | } 278 | 279 | .sponsors-large { 280 | 281 | li { 282 | width: 300px; 283 | } 284 | 285 | img { 286 | width: 275px; 287 | } 288 | } 289 | 290 | .sponsors-small li { 291 | width: 175px; 292 | margin-bottom: 1.5em; 293 | } 294 | 295 | .sponsors-cta { 296 | font-weight: bold; 297 | font-size: 0.875em; 298 | text-decoration: underline; 299 | 300 | &:hover { 301 | color: #333; 302 | } 303 | 304 | span { 305 | color: #333; 306 | 307 | &:hover { 308 | color: $accent; 309 | } 310 | } 311 | } 312 | 313 | .inset { 314 | @include border-radius(10px); 315 | @include box-shadow(0 0 1px rgba(0,0,0,0.3),0px -1px 0px rgba(0,0,0,0.3)); 316 | } 317 | 318 | .map { 319 | height: 450px; 320 | margin: -1.5em 0; 321 | 322 | border: 1px solid #999; 323 | border-bottom: none; 324 | border-top: none; 325 | } 326 | 327 | .information-nav { 328 | margin: 1em 0; 329 | 330 | a { 331 | text-decoration: underline; 332 | 333 | &:hover, &.active { 334 | color: #495555; 335 | 336 | .information-head { 337 | color: $accent; 338 | } 339 | } 340 | 341 | } 342 | 343 | } 344 | 345 | .information-head { 346 | margin: 0.667em 0; 347 | color: #495555; 348 | } 349 | 350 | .information-tab { 351 | display: none; 352 | 353 | &.active { 354 | display: block; 355 | } 356 | } 357 | 358 | .no-js .information-tab:active { 359 | display: block; 360 | } 361 | 362 | .hotels { 363 | padding: 0 0 0 16px; 364 | 365 | li { 366 | margin: 1em 0; 367 | 368 | font-size: 0.875em; 369 | font-weight: normal; 370 | } 371 | 372 | } 373 | 374 | .hotels-name { 375 | font-weight: bold; 376 | color: #333; 377 | } 378 | 379 | .kicker { 380 | margin: 0.3125em 0; 381 | 382 | font-size: 2em; 383 | font-family: futura-pt, Helvetica Neue, Helvetica, Arial, sans-serif; 384 | font-weight: bold; 385 | line-height: 1.2; 386 | } -------------------------------------------------------------------------------- /asset/css/site.css: -------------------------------------------------------------------------------- 1 | /* normalize.css v1.0.1 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}html,button,input,select,textarea{font-family:proxima-nova,Helvetica Neue,Helvetica,Arial,sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1,h2,h3,h4,h5,h6{font-family:futura-pt,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700}h1{font-size:6em;margin:0.67em 0}h2{font-size:2em;margin:0.83em 0}h3{font-size:1.5em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:0.83em;margin:1.67em 0}h6{font-size:0.75em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px}dfn{font-style:italic}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace, serif;_font-family:'courier new', monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:1.5em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.ir{background-color:transparent;border:0;overflow:hidden;*text-indent:-9999px}.ir:before{content:"";display:block;width:0;height:100%}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}html,button,input,select,textarea{color:#495555}body{font-size:1em;line-height:1.4}html,body{overflow-x:hidden}a{color:#32a35a;text-decoration:none}a:hover,a:focus{text-decoration:underline}nav ol,nav ul{padding:0}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}img{vertical-align:middle;max-width:100%}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.l-constrained{width:840px;margin:0 auto;padding:0 24px}.l-column{padding-left:0;margin:3em 0 0 -1.5em;list-style:none}.l-single{width:256px;float:left;margin-left:1.5em}.l-double{width:536px;float:left;margin-left:1.5em}.first{margin-left:0;clear:both}.wf-active .sct-head{text-transform:uppercase}.logo{margin-top:1em}.logotype{margin-bottom:0;text-align:center}.logotype-accent{margin-left:6px;color:#32a35a}.tagline{margin-top:0;margin-bottom:0.33em;text-align:center}.buttons{text-align:center}.btn{padding:0.5em;position:relative;top:0;border:1px solid rgba(0,0,0,0.2);background-color:#32a35a;background-image:url("../img/subtle_dots_green.png");color:#FFF;text-shadow:0px -1px 0px rgba(0,0,0,0.4);-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;-webkit-user-drag:none;-moz-user-drag:-moz-none;user-drag:none;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(255,255,255,0.3),0 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:inset 0 1px 1px rgba(255,255,255,0.3),0 1px 1px rgba(0,0,0,0.2);box-shadow:inset 0 1px 1px rgba(255,255,255,0.3),0 1px 1px rgba(0,0,0,0.2);-webkit-transition:0.1s ease top;-moz-transition:0.1s ease top;-o-transition:0.1s ease top;transition:0.1s ease top}.btn:hover{background-color:#FFF;background-image:url("../img/subtle_dots.png");border:1px solid #999;color:#32a35a;text-decoration:none;text-shadow:none}.btn:active{top:2px}.twitter{background-image:url("../img/twitter.png");height:38px;width:38px;display:inline-block;margin-left:1em;position:relative;top:12px}.twitter:hover{background-position:0 40px}.sct-break{margin:1.5em 0;clear:both;border:1px solid #666;border:1px solid rgba(0,0,0,0.2);border-left:none;border-right:none;background-color:#32a35a;background-image:url("../img/subtle_dots_green.png")}.sct-head{color:#FFF;text-shadow:-1px -1px 1px rgba(0,0,0,0.3);font-size:1.75em}.sct-head:hover .sct-anchor{opacity:.6}.sct-anchor{position:relative;top:-3px;left:8px;font-size:24px;text-decoration:none;opacity:0;color:#fff;-webkit-transition:0.5s;-moz-transition:0.5s;-o-transition:0.5s;transition:0.5s}.sct-anchor:before{content:"\00B6"}.sct-anchor:hover{text-decoration:none}.lineup-block{margin-left:1.5em;margin-bottom:0.75em;width:148px;height:14.375em;float:left;text-align:center}.csstransitions .lineup-block{-webkit-transition:all 0.3s ease;-moz-transition:all 0.3s ease;-o-transition:all 0.3s ease;transition:all 0.3s ease}.csstransitions .lineup-block:hover .lineup-img{top:-1.5em}.lineup-img{width:100%;position:relative;top:0;border-radius:100px;-webkit-box-shadow:0px 0px 1px rgba(0,0,0,0.3);-moz-box-shadow:0px 0px 1px rgba(0,0,0,0.3);box-shadow:0px 0px 1px rgba(0,0,0,0.3);-webkit-transition:top 0.3s ease;-moz-transition:top 0.3s ease;-o-transition:top 0.3s ease;transition:top 0.3s ease}.lineup-name{margin:0.75em 0 0;font-size:0.875em;font-family:proxima-nova,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:bold;color:#333}.lineup-text{font-size:0.875em;margin:0 0 0.75em;color:#32a35a}.agenda{margin-top:1.5em;margin-bottom:1.5em}.agenda tr{border:1px solid #ccc;border-left:none;border-right:none}.agenda tr:first-child{border:none}.agenda tr:last-child{border:none}.agenda tr:hover{color:#32a35a}.agenda td{padding:0.5em 4em;padding-left:1em}.agenda-time{width:120px;font-size:0.875em;text-transform:uppercase}.agenda-sponsor{display:block;margin-top:1em;font-family:proxima-nova,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:normal;font-size:.667em}.contacts-img{width:100px;margin:1.5em;margin-left:0;margin-top:0;float:left}.header{width:100%;height:375px;margin-bottom:-1.5em;background:#eaf4fd url("../img/subtle_dots_blue.png");text-shadow:0 1px 0 #FFF}.scroller{background:#fff url("../img/subtle_dots.png")}.no-touch .header{position:fixed}.no-touch .scroller{margin-top:375px;position:relative;z-index:2}.sponsors{margin:0 0 3em -1.5em;text-align:center}.sponsors li{margin:0 0.75em;display:inline-block;list-style:none}.lt-ie8 .sponsors li{margin-bottom:1.5em}.sponsors-small,.sponsors-large{padding:0;margin-bottom:1em}.sponsors-large li{width:300px}.sponsors-large img{width:275px}.sponsors-small li{width:175px;margin-bottom:1.5em}.sponsors-cta{font-weight:bold;font-size:0.875em;text-decoration:underline}.sponsors-cta:hover{color:#333}.sponsors-cta span{color:#333}.sponsors-cta span:hover{color:#32a35a}.inset{-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;-webkit-box-shadow:0 0 1px rgba(0,0,0,0.3),0px -1px 0px rgba(0,0,0,0.3);-moz-box-shadow:0 0 1px rgba(0,0,0,0.3),0px -1px 0px rgba(0,0,0,0.3);box-shadow:0 0 1px rgba(0,0,0,0.3),0px -1px 0px rgba(0,0,0,0.3)}.map{height:450px;margin:-1.5em 0;border:1px solid #999;border-bottom:none;border-top:none}.information-nav{margin:1em 0}.information-nav a{text-decoration:underline}.information-nav a:hover,.information-nav a.active{color:#495555}.information-nav a:hover .information-head,.information-nav a.active .information-head{color:#32a35a}.information-head{margin:0.667em 0;color:#495555}.information-tab{display:none}.information-tab.active{display:block}.no-js .information-tab:active{display:block}.hotels{padding:0 0 0 16px}.hotels li{margin:1em 0;font-size:0.875em;font-weight:normal}.hotels-name{font-weight:bold;color:#333}.kicker{margin:0.3125em 0;font-size:2em;font-family:futura-pt,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:bold;line-height:1.2}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}} 2 | -------------------------------------------------------------------------------- /asset/grunt/reload.js: -------------------------------------------------------------------------------- 1 | /* 2 | * grunt-reload 3 | * https://github.com/webxl/grunt-reload 4 | * 5 | * Copyright (c) 2012 webxl 6 | * Licensed under the MIT license. 7 | */ 8 | 9 | 'use strict'; 10 | 11 | module.exports = function (grunt) { 12 | 13 | // node libs 14 | var path = require('path'); 15 | var fs = require("fs"); 16 | var taskEvent = new (require("events")).EventEmitter(); 17 | 18 | // external libs 19 | var connect = require('connect'); 20 | var buffers = require('buffers'); 21 | var httpProxy = require('http-proxy'); 22 | var WebSocketServer = require("websocket").server; 23 | 24 | var throttle = false; 25 | // support for multiple reload servers 26 | var servers = {}; 27 | 28 | function handleReload(wsServer, target) { 29 | var connections = wsServer.connections; 30 | var path = grunt.file.watchFiles ? grunt.file.watchFiles.changed[0] : 'index.html'; 31 | 32 | // apply_js_live 33 | var msg = '["refresh", {"path": "' + path + '", "target": "' + target + '"}]'; 34 | 35 | for (var i = 0; i < connections.length; i++) { 36 | connections[i].sendUTF(msg); 37 | } 38 | } 39 | 40 | // simple router 41 | function route(method, path, cb) { 42 | return function (req, res, next) { 43 | if (req.method !== method) { 44 | return next(); 45 | } 46 | 47 | if (path instanceof RegExp && req.url.match(path) === null || typeof path === 'string' && req.url !== path) { 48 | return next(); 49 | } 50 | 51 | cb(req, res, next); 52 | }; 53 | } 54 | 55 | grunt.registerTask('reload', "Reload connected clients when a file has changed.", function (target) { 56 | 57 | var server = servers[target ? target:'default']; 58 | 59 | if (server) { 60 | var errorcount = grunt.fail.errorcount; 61 | // throttle was needed early in development because of rapid triggering by the watch task. Not sure if it's still necessary 62 | if (!throttle) { 63 | if (target) { 64 | taskEvent.emit('reload:' + target); 65 | } else { 66 | taskEvent.emit('reload'); 67 | } 68 | 69 | throttle = true; 70 | setTimeout(function () { 71 | throttle = false; 72 | }, 2000); 73 | grunt.log.writeln("File updated. Reload triggered."); 74 | } else { 75 | return; 76 | } 77 | // Fail task if there were errors. 78 | if (grunt.fail.errorcount > errorcount) { 79 | return false; 80 | } 81 | } else { 82 | // start a server that can send a reload command over a websocket connection. 83 | 84 | var middleware = []; 85 | 86 | this.requiresConfig('reload'); 87 | 88 | // Get values from config, or use defaults. 89 | var config = target ? grunt.config(['reload', target]) : grunt.config('reload'); 90 | var port = config.port || 8001; 91 | var base = path.resolve(grunt.config('server.base') || '.'); 92 | var reloadClientMarkup = ''; 93 | 94 | if (!target) { 95 | target = 'default'; 96 | } 97 | 98 | if (config.proxy) { 99 | var proxyConfig = config.proxy; 100 | var options = { 101 | target:{ 102 | host:proxyConfig.host || 'localhost', 103 | port:proxyConfig.port || grunt.config('server.port') || 80, 104 | path:proxyConfig.path || '/' // not yet supported by http-proxy: https://github.com/nodejitsu/node-http-proxy/pull/172 105 | } 106 | }; 107 | var proxy = new httpProxy.HttpProxy(options); 108 | var targetUrl = 'http://' + options.target.host + ':' + options.target.port + options.target.path; 109 | 110 | // modify any proxied HTML requests to include the client script 111 | middleware.unshift(connect( 112 | function (req, res) { 113 | 114 | if (proxyConfig.includeReloadScript !== false) { 115 | // monkey patch response, postpone header 116 | var _write = res.write, _writeHead = res.writeHead, _end = res.end, _statusCode, _headers, tmpBuffer; 117 | 118 | res.write = function (data) { 119 | if (tmpBuffer) { 120 | tmpBuffer.push(data); 121 | } else { 122 | _write.call(res, data); 123 | } 124 | }; 125 | 126 | res.writeHead = function (statusCode, headers) { 127 | _statusCode = statusCode; 128 | _headers = headers; 129 | if (/html/.test(_headers["content-type"])) { 130 | // defer html & headers 131 | tmpBuffer = buffers(); 132 | } else { 133 | _writeHead.call(res, _statusCode, _headers); 134 | } 135 | }; 136 | 137 | res.end = function () { 138 | if (tmpBuffer) { 139 | var html = tmpBuffer.toString(); 140 | 141 | html = html.replace('', reloadClientMarkup + ''); 142 | _headers['content-length'] = html.length; 143 | _writeHead.call(res, _statusCode, _headers); 144 | _write.call(res, html); 145 | } 146 | _end.call(res); 147 | }; 148 | } 149 | 150 | proxy.proxyRequest(req, res); 151 | } 152 | )); 153 | 154 | grunt.log.writeln("Proxying " + targetUrl); 155 | 156 | } else { 157 | middleware.unshift(connect.static(base, { redirect:true })); 158 | } 159 | 160 | if (config.iframe) { 161 | // serve iframe 162 | middleware.unshift(route('GET', '/', function (req, res, next) { 163 | var targetUrl = config.iframe.target; 164 | res.end('' + 165 | reloadClientMarkup + ''); 166 | })); 167 | } 168 | 169 | if (config.liveReload) { 170 | // required by LR 2.x 171 | middleware.unshift(route('GET', /\/livereload.js(\?.*)?/, function (req, res, next) { 172 | res.write('__reloadServerUrl="ws://localhost:' + config.port + '";\n'); 173 | fs.createReadStream(__dirname + "/include/reloadClient.js").pipe(res); 174 | })); 175 | } 176 | 177 | // provide route to client js 178 | middleware.unshift(route('GET', '/__reload/client.js', function (req, res, next) { 179 | fs.createReadStream(__dirname + "/include/reloadClient.js").pipe(res); // use connect.static.send ? 180 | })); 181 | 182 | // if --debug was specified, enable logging. 183 | if (grunt.option('debug')) { 184 | connect.logger.format('grunt', ('[D] reloadServer :method :url :status ' + 185 | ':res[content-length] - :response-time ms').blue); 186 | middleware.unshift(connect.logger('grunt')); 187 | } 188 | 189 | // kick-off 190 | server = connect.apply(null, middleware).listen(port); 191 | 192 | servers[target] = server; 193 | 194 | if (!servers.default) { 195 | servers.default = server; 196 | } 197 | 198 | var wsServer = new WebSocketServer({ 199 | httpServer:server, 200 | autoAcceptConnections:true 201 | }); 202 | 203 | wsServer.on('connect', function (request) { 204 | 205 | var connection = request; //.accept(); //.accept('*', request.origin); 206 | console.log((new Date()) + ' Connection accepted.'); 207 | connection.on('message', function (message) { 208 | if (message.type === 'utf8') { 209 | console.log('Received Message: ' + message.utf8Data); 210 | if (message.utf8Data === 'trigger') { 211 | grunt.helper('trigger', grunt.config('trigger.watchFile')); 212 | connection.sendUTF('Update triggered'); 213 | } 214 | // LiveReload support 215 | if (message.utf8Data.match(/^http:\/\//)) { 216 | connection.sendUTF("!!ver:1.6;"); 217 | } 218 | if (message.utf8Data.match(/{.*/)) { 219 | var handshake = "{ command: 'hello', protocols: [ " + 220 | "'http://livereload.com/protocols/official-7', " + 221 | "'http://livereload.com/protocols/2.x-origin-version-negotiation', " + 222 | "'http://livereload.com/protocols/2.x-remote-control'" + 223 | "], serverName: 'grunt-reload', }"; 224 | connection.sendUTF(handshake); 225 | } 226 | } 227 | }); 228 | connection.on('close', function (reasonCode, description) { 229 | console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); 230 | }); 231 | }); 232 | 233 | taskEvent.on('reload', function() { 234 | handleReload(wsServer); 235 | }); 236 | 237 | if (target) { 238 | taskEvent.on('reload:' + target, function() { 239 | handleReload(wsServer, target); 240 | }); 241 | } 242 | 243 | grunt.log.writeln("reload server running at http://localhost:" + port); 244 | 245 | } 246 | }); 247 | }; -------------------------------------------------------------------------------- /asset/css/scss/_normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v1.0.1 | MIT License | git.io/normalize */ 2 | 3 | /* ========================================================================== 4 | HTML5 display definitions 5 | ========================================================================== */ 6 | 7 | /* 8 | * Corrects `block` display not defined in IE 6/7/8/9 and Firefox 3. 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | nav, 20 | section, 21 | summary { 22 | display: block; 23 | } 24 | 25 | /* 26 | * Corrects `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. 27 | */ 28 | 29 | audio, 30 | canvas, 31 | video { 32 | display: inline-block; 33 | *display: inline; 34 | *zoom: 1; 35 | } 36 | 37 | /* 38 | * Prevents modern browsers from displaying `audio` without controls. 39 | * Remove excess height in iOS 5 devices. 40 | */ 41 | 42 | audio:not([controls]) { 43 | display: none; 44 | height: 0; 45 | } 46 | 47 | /* 48 | * Addresses styling for `hidden` attribute not present in IE 7/8/9, Firefox 3, 49 | * and Safari 4. 50 | * Known issue: no IE 6 support. 51 | */ 52 | 53 | [hidden] { 54 | display: none; 55 | } 56 | 57 | /* ========================================================================== 58 | Base 59 | ========================================================================== */ 60 | 61 | /* 62 | * 1. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using 63 | * `em` units. 64 | * 2. Prevents iOS text size adjust after orientation change, without disabling 65 | * user zoom. 66 | */ 67 | 68 | html { 69 | font-size: 100%; /* 1 */ 70 | -webkit-text-size-adjust: 100%; /* 2 */ 71 | -ms-text-size-adjust: 100%; /* 2 */ 72 | } 73 | 74 | /* 75 | * Addresses `font-family` inconsistency between `textarea` and other form 76 | * elements. 77 | */ 78 | 79 | html, 80 | button, 81 | input, 82 | select, 83 | textarea { 84 | font-family: proxima-nova, Helvetica Neue, Helvetica, Arial, sans-serif; 85 | } 86 | 87 | /* 88 | * Addresses margins handled incorrectly in IE 6/7. 89 | */ 90 | 91 | body { 92 | margin: 0; 93 | } 94 | 95 | /* ========================================================================== 96 | Links 97 | ========================================================================== */ 98 | 99 | /* 100 | * Addresses `outline` inconsistency between Chrome and other browsers. 101 | */ 102 | 103 | a:focus { 104 | outline: thin dotted; 105 | } 106 | 107 | /* 108 | * Improves readability when focused and also mouse hovered in all browsers. 109 | */ 110 | 111 | a:active, 112 | a:hover { 113 | outline: 0; 114 | } 115 | 116 | /* ========================================================================== 117 | Typography 118 | ========================================================================== */ 119 | 120 | /* 121 | * Addresses font sizes and margins set differently in IE 6/7. 122 | * Addresses font sizes within `section` and `article` in Firefox 4+, Safari 5, 123 | * and Chrome. 124 | */ 125 | 126 | h1, h2, h3, h4, h5, h6 { 127 | font-family: futura-pt, Helvetica Neue, Helvetica, Arial, sans-serif; 128 | font-weight: 700; 129 | } 130 | 131 | h1 { 132 | font-size: 6em; 133 | margin: 0.67em 0; 134 | } 135 | 136 | h2 { 137 | font-size: 2em; 138 | margin: 0.83em 0; 139 | } 140 | 141 | h3 { 142 | font-size: 1.5em; 143 | margin: 1em 0; 144 | } 145 | 146 | h4 { 147 | font-size: 1em; 148 | margin: 1.33em 0; 149 | } 150 | 151 | h5 { 152 | font-size: 0.83em; 153 | margin: 1.67em 0; 154 | } 155 | 156 | h6 { 157 | font-size: 0.75em; 158 | margin: 2.33em 0; 159 | } 160 | 161 | /* 162 | * Addresses styling not present in IE 7/8/9, Safari 5, and Chrome. 163 | */ 164 | 165 | abbr[title] { 166 | border-bottom: 1px dotted; 167 | } 168 | 169 | /* 170 | * Addresses style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. 171 | */ 172 | 173 | b, 174 | strong { 175 | font-weight: bold; 176 | } 177 | 178 | blockquote { 179 | margin: 1em 40px; 180 | } 181 | 182 | /* 183 | * Addresses styling not present in Safari 5 and Chrome. 184 | */ 185 | 186 | dfn { 187 | font-style: italic; 188 | } 189 | 190 | /* 191 | * Addresses styling not present in IE 6/7/8/9. 192 | */ 193 | 194 | mark { 195 | background: #ff0; 196 | color: #000; 197 | } 198 | 199 | /* 200 | * Addresses margins set differently in IE 6/7. 201 | */ 202 | 203 | p, 204 | pre { 205 | margin: 1em 0; 206 | } 207 | 208 | /* 209 | * Corrects font family set oddly in IE 6, Safari 4/5, and Chrome. 210 | */ 211 | 212 | code, 213 | kbd, 214 | pre, 215 | samp { 216 | font-family: monospace, serif; 217 | _font-family: 'courier new', monospace; 218 | font-size: 1em; 219 | } 220 | 221 | /* 222 | * Improves readability of pre-formatted text in all browsers. 223 | */ 224 | 225 | pre { 226 | white-space: pre; 227 | white-space: pre-wrap; 228 | word-wrap: break-word; 229 | } 230 | 231 | /* 232 | * Addresses CSS quotes not supported in IE 6/7. 233 | */ 234 | 235 | q { 236 | quotes: none; 237 | } 238 | 239 | /* 240 | * Addresses `quotes` property not supported in Safari 4. 241 | */ 242 | 243 | q:before, 244 | q:after { 245 | content: ''; 246 | content: none; 247 | } 248 | 249 | /* 250 | * Addresses inconsistent and variable font size in all browsers. 251 | */ 252 | 253 | small { 254 | font-size: 80%; 255 | } 256 | 257 | /* 258 | * Prevents `sub` and `sup` affecting `line-height` in all browsers. 259 | */ 260 | 261 | sub, 262 | sup { 263 | font-size: 75%; 264 | line-height: 0; 265 | position: relative; 266 | vertical-align: baseline; 267 | } 268 | 269 | sup { 270 | top: -0.5em; 271 | } 272 | 273 | sub { 274 | bottom: -0.25em; 275 | } 276 | 277 | /* ========================================================================== 278 | Lists 279 | ========================================================================== */ 280 | 281 | /* 282 | * Addresses margins set differently in IE 6/7. 283 | */ 284 | 285 | dl, 286 | menu, 287 | ol, 288 | ul { 289 | margin: 1.5em 0; 290 | } 291 | 292 | dd { 293 | margin: 0 0 0 40px; 294 | } 295 | 296 | /* 297 | * Addresses paddings set differently in IE 6/7. 298 | */ 299 | 300 | menu, 301 | ol, 302 | ul { 303 | padding: 0 0 0 40px; 304 | } 305 | 306 | /* 307 | * Corrects list images handled incorrectly in IE 7. 308 | */ 309 | 310 | nav ul, 311 | nav ol { 312 | list-style: none; 313 | list-style-image: none; 314 | } 315 | 316 | /* ========================================================================== 317 | Embedded content 318 | ========================================================================== */ 319 | 320 | /* 321 | * 1. Removes border when inside `a` element in IE 6/7/8/9 and Firefox 3. 322 | * 2. Improves image quality when scaled in IE 7. 323 | */ 324 | 325 | img { 326 | border: 0; /* 1 */ 327 | -ms-interpolation-mode: bicubic; /* 2 */ 328 | } 329 | 330 | /* 331 | * Corrects overflow displayed oddly in IE 9. 332 | */ 333 | 334 | svg:not(:root) { 335 | overflow: hidden; 336 | } 337 | 338 | /* ========================================================================== 339 | Figures 340 | ========================================================================== */ 341 | 342 | /* 343 | * Addresses margin not present in IE 6/7/8/9, Safari 5, and Opera 11. 344 | */ 345 | 346 | figure { 347 | margin: 0; 348 | } 349 | 350 | /* ========================================================================== 351 | Forms 352 | ========================================================================== */ 353 | 354 | /* 355 | * Corrects margin displayed oddly in IE 6/7. 356 | */ 357 | 358 | form { 359 | margin: 0; 360 | } 361 | 362 | /* 363 | * Define consistent border, margin, and padding. 364 | */ 365 | 366 | fieldset { 367 | border: 1px solid #c0c0c0; 368 | margin: 0 2px; 369 | padding: 0.35em 0.625em 0.75em; 370 | } 371 | 372 | /* 373 | * 1. Corrects color not being inherited in IE 6/7/8/9. 374 | * 2. Corrects text not wrapping in Firefox 3. 375 | * 3. Corrects alignment displayed oddly in IE 6/7. 376 | */ 377 | 378 | legend { 379 | border: 0; /* 1 */ 380 | padding: 0; 381 | white-space: normal; /* 2 */ 382 | *margin-left: -7px; /* 3 */ 383 | } 384 | 385 | /* 386 | * 1. Corrects font size not being inherited in all browsers. 387 | * 2. Addresses margins set differently in IE 6/7, Firefox 3+, Safari 5, 388 | * and Chrome. 389 | * 3. Improves appearance and consistency in all browsers. 390 | */ 391 | 392 | button, 393 | input, 394 | select, 395 | textarea { 396 | font-size: 100%; /* 1 */ 397 | margin: 0; /* 2 */ 398 | vertical-align: baseline; /* 3 */ 399 | *vertical-align: middle; /* 3 */ 400 | } 401 | 402 | /* 403 | * Addresses Firefox 3+ setting `line-height` on `input` using `!important` in 404 | * the UA stylesheet. 405 | */ 406 | 407 | button, 408 | input { 409 | line-height: normal; 410 | } 411 | 412 | /* 413 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 414 | * and `video` controls. 415 | * 2. Corrects inability to style clickable `input` types in iOS. 416 | * 3. Improves usability and consistency of cursor style between image-type 417 | * `input` and others. 418 | * 4. Removes inner spacing in IE 7 without affecting normal text inputs. 419 | * Known issue: inner spacing remains in IE 6. 420 | */ 421 | 422 | button, 423 | html input[type="button"], /* 1 */ 424 | input[type="reset"], 425 | input[type="submit"] { 426 | -webkit-appearance: button; /* 2 */ 427 | cursor: pointer; /* 3 */ 428 | *overflow: visible; /* 4 */ 429 | } 430 | 431 | /* 432 | * Re-set default cursor for disabled elements. 433 | */ 434 | 435 | button[disabled], 436 | input[disabled] { 437 | cursor: default; 438 | } 439 | 440 | /* 441 | * 1. Addresses box sizing set to content-box in IE 8/9. 442 | * 2. Removes excess padding in IE 8/9. 443 | * 3. Removes excess padding in IE 7. 444 | * Known issue: excess padding remains in IE 6. 445 | */ 446 | 447 | input[type="checkbox"], 448 | input[type="radio"] { 449 | box-sizing: border-box; /* 1 */ 450 | padding: 0; /* 2 */ 451 | *height: 13px; /* 3 */ 452 | *width: 13px; /* 3 */ 453 | } 454 | 455 | /* 456 | * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. 457 | * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome 458 | * (include `-moz` to future-proof). 459 | */ 460 | 461 | input[type="search"] { 462 | -webkit-appearance: textfield; /* 1 */ 463 | -moz-box-sizing: content-box; 464 | -webkit-box-sizing: content-box; /* 2 */ 465 | box-sizing: content-box; 466 | } 467 | 468 | /* 469 | * Removes inner padding and search cancel button in Safari 5 and Chrome 470 | * on OS X. 471 | */ 472 | 473 | input[type="search"]::-webkit-search-cancel-button, 474 | input[type="search"]::-webkit-search-decoration { 475 | -webkit-appearance: none; 476 | } 477 | 478 | /* 479 | * Removes inner padding and border in Firefox 3+. 480 | */ 481 | 482 | button::-moz-focus-inner, 483 | input::-moz-focus-inner { 484 | border: 0; 485 | padding: 0; 486 | } 487 | 488 | /* 489 | * 1. Removes default vertical scrollbar in IE 6/7/8/9. 490 | * 2. Improves readability and alignment in all browsers. 491 | */ 492 | 493 | textarea { 494 | overflow: auto; /* 1 */ 495 | vertical-align: top; /* 2 */ 496 | } 497 | 498 | /* ========================================================================== 499 | Tables 500 | ========================================================================== */ 501 | 502 | /* 503 | * Remove most spacing between table cells. 504 | */ 505 | 506 | table { 507 | border-collapse: collapse; 508 | border-spacing: 0; 509 | } -------------------------------------------------------------------------------- /asset/js/vendor/modernizr-2.6.2.min.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.6.2 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | CascadiaJS 2012 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |
21 | 22 |

CascadiaJS

23 |

November 8 – 9, 2012 / Seattle, WA

24 | 25 |
26 | Buy Tickets 27 | 28 |
29 | 30 |
31 | 32 |
33 | 34 |
35 | 36 |
37 | 38 |

About Us

39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 | 48 |

The world of JavaScript has moved beyond the browser.

49 | 50 |

Node.js has taken server-side application developers by storm and helped to blur the line between website and web application. Windows 8 is the first major operating system to make JS a first-class citizen when developing native applications. Mozilla is pushing the boundaries of mobile with Firefox OS, a mobile OS that is fully powered by the web.

51 | 52 |

CascadiaJS is bringing together these topics and more in order to survey where JS is today and where it is going tomorrow.

53 | 54 |
55 | 56 |
57 | 58 |
59 | 60 |
61 | 62 |

Speakers

63 | 64 |
65 | 66 | 190 | 191 |
192 | 193 |
194 | 195 |
196 | 197 |

Agenda

198 | 199 |
200 | 201 |

Day One / Nov 8 202 | Presented by
Microsoft Azure
203 |

204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 |
8:00 - 9:00Breakfast and Registration
9:00 - 10:30
10:30 - 11:30Break
11:00 - 12:30
12:30 - 14:00Lunch with Twilio
14:00 - 15:30
15:30 - 16:00Break
16:00 - 18:00
20:00Party with Internet Explorer
245 | 246 |

Day Two / Nov 9

247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 |
8:00 - 9:00Breakfast
9:00 - 10:30
10:30 - 11:00Break
11:00 - 12:30
12:30 - 14:00Lunch with Cheezburger
14:00 - 15:30
15:30 - 16:00Break
16:00 - 18:00
284 | 285 |
286 | 287 |
288 | 289 |
290 | 291 |

Sponsors

292 | 293 |
294 | 295 |
296 | 306 | 338 | 339 | Become a Sponsor 340 | 341 |
342 | 343 |
344 | 345 |
346 | 347 |
348 | 349 |

Information

350 | 351 |
352 | 353 | 361 | 362 |
363 | 364 |
365 | 366 |

Location

367 | 368 |
369 | 370 | 371 | 372 |
373 | 374 |
375 | 376 |
377 | 378 |

Hotel Options

379 | 380 |

We've run around Seattle and located some good hotel options for people coming in from out of town. We do not have special rates (sorry) but feel free to book your rooms ASAP before they fill-up. If any of you who are living in Seattle would be open to letting some friends from out of town crash on your couch (couchsurfing.js!) please let us know. We're happy to connect people.

381 | 382 | 389 | 390 |
391 | 392 |
393 | 394 |
395 | 396 |
397 | 398 |
399 | 400 |

Organizers

401 | 402 | 450 | 451 |
452 | 453 |
454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | --------------------------------------------------------------------------------