├── 2012 ├── 12-25--pony-foo-begins │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-29--single-page-design-madness │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2013 ├── 01-01--javascript-javascript-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-18--asset-management-in-node │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-18--continuous-integration-and-automated-deployments │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-23--publishing-nodejs-packages-with-npm │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-28--paging-in-the-wilderness │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-05--implementing-opensearch │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-15--javascript-is-awesome │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-21--information-hiding-in-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-06--defensive-design │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-12--introduction-to-seo-and-content-indexing │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-22--managing-code-quality-in-nodejs │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-28--pragmatic-unit-testing-in-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-01--a-note-on-everyday-usability │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-03--the-architecture-of-productivity │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-08--taming-asynchronous-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-13--the-web-wars │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-21--recommended-reading │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-22--understanding-build-processes │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-27--learn-regular-expressions │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-30--the-micro-library-phenomenon │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-10--uncovering-the-native-dom-api │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-24--css-for-dummies │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-25--organizing-your-css-with-bootstrap │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-27--monitoring-production-grade-node-applications │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-02--tech-news-reading-hints │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-09--getting-over-jquery │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-10--modularizing-node-applications-with-express │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-12--teach-yourself-nodejs-in-10-steps │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-22--upgraded-asset-management │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-29--lean-development-principles │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-27--the-angular-way │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-19--deploying-node-apps-to-aws-using-grunt │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-26--continuous-development-in-nodejs │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-28--we-dont-want-your-coffee │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-10--ditch-windows-become-a-polyglot │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-16--spritesheets-grunt-and-you │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-18--your-tab-views-suck │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-25--event-emitter-obey-and-report │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-08--angular-wysiwyg │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-13--grunt-tips-and-tricks │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-19--fun-with-native-arrays │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-26--package-authoring-with-paqui │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-02--get-between-the-covers-of-build-first │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-04--where-does-this-keyword-come-from │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-09--javascript-variable-hoisting │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-14--9-quick-tips-about-npm │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-20--is-webdriver-as-good-as-it-gets │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-23--architecture-of-ecmascript-6-modules │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-24--rehearsal-record-program-output │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2014 ├── 01-01--a-year-in-review │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-07--email-sending-done-right │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-09--gulp-grunt-whatever │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-20--how-to-design-great-programs │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-27--my-first-gulp-adventure │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-02--you-dont-need-a-todo-app │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-14--angle-brackets-rifle-scopes │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-19--angle-brackets-synergistic-directives │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-07--a-less-convoluted-event-emitter-implementation │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-24--head-first-public-speaking │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-07--shared-rendering-with-rendr │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-16--modularizing-your-front-end │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-17--css-the-good-parts │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-21--taunus-micro-isomorphic-mvc-framework │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-07--how-to-avoid-objectprototype-pollution │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-04--choose-grunt-gulp-or-npm │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-05--building-high-quality-front-end-modules │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-12--a-browsersync-primer │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-18--javascript-quality-guide │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-25--a-gentle-browserify-walkthrough │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-01--the-conventional-front-end │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-17--adjusting-ux-for-humans │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-21--critical-path-performance-optimization │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-24--measure-optimize-automate │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-25--free-sample-javascript-application-design │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-25--stop-breaking-the-web │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-03--my-campjs-experience │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-13--stateful-regular-expressions │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-12--building-stompflow │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-30--second-year-in-review │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2015 ├── 01-08--cross-tab-communication │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-14--baking-modularity-tag-editing │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-06--server-first-apps │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-07--immutable-deployments-packer │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-07--leveraging-immutable-deployments │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-20--designing-front-end-components │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-20--great-web-module-compendium │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-26--priorities │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-03--progressive-web │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-08--testing-javascript-modules-with-tape │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-20--composable-ui │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-24--maintainable-oss │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-24--readme-driven-development │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-24--semver │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-25--git-github-hacks │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-27--leveraging-constraints │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-28--browser-test-automation-dreams │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-29--fast-forwarding-the-web-platform │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-02--talk-about-web-performance │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-03--fixing-web-performance │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-03--food-for-thought-begins │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-03--low-budget-hosting-tips │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-04--why-i-write-plain-javascript-modules │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-17--things-you-can-do-in-plain-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-19--polyfills-or-ponyfills │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-19--universal-react-babel │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-20--universal-routing-react-es6 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-21--server-side-react-layout-and-side-effects │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-24--react-jsx-and-es6-the-weird-parts │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-25--a-brief-history-of-es6-tooling │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-25--es6-destructuring-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-26--es6-arrow-functions-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-26--es6-spread-and-butter-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-26--es6-template-strings-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-27--es6-object-literal-features-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-28--es6-classes-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-28--es6-let-const-and-temporal-dead-zone-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-31--es6-generators-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-31--es6-iterators-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-01--es6-symbols-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-05--es6-maps-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-05--es6-proxies-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-05--es6-weakmaps-sets-and-weaksets-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-07--es6-proxy-traps-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-07--more-es6-proxy-traps-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-08--es6-reflection-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-10--es6-number-improvements-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-11--es6-array-extensions-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-11--es6-math-additions-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-12--es6-object-changes-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-14--es6-strings-and-unicode-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-21--using-the-javascript-charting-library │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-22--es6-modules-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-24--es6-promises-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-29--redesign │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-30--weirdest-bug-ever │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-02--inlining-critical-css │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-08--immutable-npm-dependencies │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-09--all-aboard-the-es6-javascript-train │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-12--es6 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-12--securing-your-web-app-in-3-easy-steps │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-21--serviceworker-revolution │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-26--subscribing-to-pony-foo │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-28--progressive-networking-serviceworker │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-29--serviceworker-messagechannel-postmessage │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-02--simple-offline-site-serviceworker │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-13--progressive-app-serviceworker │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-27--javascript-developer-survey │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-10--javascript-developer-survey-results │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-18--third-year-in-review │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2016 ├── 01-11--asynchronous-i-o-with-generators-and-promises │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-21--controversial-state-of-javascript-tooling │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-30--es2016-features-and-ecmascript-as-a-living-standard │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-02--understanding-javascript-async-await │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-09--ecmascript-string-padding │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-13--proposal-draft-for-flatten-and-flatmap │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-15--proposal-statements-as-expressions-using-do │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-17--weakref │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-17--javascript-decorators-proposal │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-24--npm-meltdown-security-concerns │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-29--github-for-human-beings │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-08--nodeconf-hits-the-ground-running-in-latin-america │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-19--just-married │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 05-31--setting-up-elasticsearch-for-a-blog │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-07--an-elastic-stack-primer │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-14--promise-worldview │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-23--double-edged-sword-web │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-02--most-over-engineered-blog-ever │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-12--backgroundsync │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-27--art-of-pull-request │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-10--json-web-tokens-vs-session-cookies │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-14--two-way-synchronization-for-a-web-app-and-git │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-24--binding-methods-to-class-instance-objects │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-30--web-audio-art │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-01--announcing-practical-es6-and-modular-javascript-series │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-05--template-literals-strictly-better-strings │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-13--fixing-xss-vulnerability-marked │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-15--how-i-got-into-programming │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-17--javascript-asynchronous-iteration-proposal │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-18--modular-javascript-launches-soon │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-07--making-time-for-side-projects │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-05--color-coded-visualizations-react │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-21--fourth-year-in-review │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 12-22--terrible-code-sane-people │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-28--var-let-const │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2017 ├── 01-18--standard │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-26--setting-up-angular-2-development-environment │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-03--content-security-policy-in-express-apps │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-18--const-variables-not-immutable │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-09--observables-coming-to-ecmascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-29--iterators-as-generators │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 03-30--regular-expressions-post-es6 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 06-25--tc39-ecmascript-proposals-future-of-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-07--pattern-matching-in-ecmascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-07--setting-up-2fa-for-nodejs-applications │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-10--null-propagation-operator │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 07-27--tencent-frontend-conference-interview │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-02--investigating-performance-object-prototype-to-string-es2015 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 08-10--make-all-images-on-your-website-responsive-in-3-easy-steps │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-16--tiny-story-about-complexity │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-25--brief-history-of-modularity │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 10-17--mastering-modular-javascript │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 11-25--an-introduction-to-speculative-optimization-in-v8 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 12-07--modular-design-thinking │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2018 ├── 02-22--okta-auth0-and-the-goblet-of-identity │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 09-21--module-design │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 10-09--unhappy-path-driven-development │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 2019 ├── 01-15--javascript-performance-pitfalls-v8 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-16--react-state-choose-wisely │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 01-17--graphql-in-depth-what-why-and-how │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-13--action-pattern-clean-obvious-testable-code │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 02-22--disguise-driven-testing-jest-mocks-in-depth │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-09--conflict-resolution-and-code-reviews │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-09--disguise-driven-testing-jest-mocks-in-depth-part-2 │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── 04-23--discovering-patterns-with-react-hooks │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown └── 05-22--react-data-survival-kit │ ├── body.markdown │ ├── editor-notes.markdown │ ├── introduction.markdown │ ├── metadata.json │ ├── readme.markdown │ ├── summary.markdown │ └── teaser.markdown ├── .editorconfig ├── .gitignore ├── contributing.markdown ├── license └── readme.markdown /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ponyfoo/articles/7ff9f1fb152f4542d82e37e026df35756fc78661/.gitignore -------------------------------------------------------------------------------- /2012/12-25--pony-foo-begins/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2012/12-25--pony-foo-begins/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d22354683586910034198", 3 | "author": "543d222f4683586910034197", 4 | "title": "Pony Foo begins", 5 | "slug": "pony-foo-begins", 6 | "tags": [ 7 | "ponyfoo" 8 | ], 9 | "heroImage": "https://i.imgur.com/L7OocY3.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2012/12-25--pony-foo-begins/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2012/12-25--pony-foo-begins/teaser.markdown: -------------------------------------------------------------------------------- 1 | As I start writing this post, I set out with a purpose. To write a micro-blogging engine. The language of choice is _Node.JS_. I chose this language because I want to see how I fare in light of new horizons... 2 | -------------------------------------------------------------------------------- /2012/12-29--single-page-design-madness/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2012/12-29--single-page-design-madness/introduction.markdown: -------------------------------------------------------------------------------- 1 | So far, and _as expected_, I've implemented markdown in the client-side, but while implementing this I also spent a good deal of time fine-tuning the site's design. What I changed is the way in which I was going to _constraint browser support_. 2 | -------------------------------------------------------------------------------- /2012/12-29--single-page-design-madness/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d22354683586910034199", 3 | "author": "543d222f4683586910034197", 4 | "title": "Single Page Design Madness", 5 | "slug": "single-page-design-madness", 6 | "tags": [ 7 | "ponyfoo", 8 | "js", 9 | "css", 10 | "front-end" 11 | ], 12 | "heroImage": "https://i.imgur.com/T9zGKon.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2012/12-29--single-page-design-madness/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2012/12-29--single-page-design-madness/teaser.markdown: -------------------------------------------------------------------------------- 1 | A few days passed, a couple lessons learned. I promised myself not to spend too much time trying to make something perfect, but rather keep a _lean approach_ and moving forward. 2 | -------------------------------------------------------------------------------- /2013/01-01--javascript-javascript-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-01--javascript-javascript-javascript/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d2237468358691003419a", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript JavaScript JavaScript", 5 | "slug": "javascript-javascript-javascript", 6 | "tags": [ 7 | "ponyfoo", 8 | "js", 9 | "nodejs", 10 | "mongodb" 11 | ], 12 | "heroImage": "https://i.imgur.com/rQ3x6Fu.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/01-01--javascript-javascript-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-01--javascript-javascript-javascript/teaser.markdown: -------------------------------------------------------------------------------- 1 | In my [previous installment][1], I _prognosticated_ the discussion topic for this post. 2 | 3 | [1]: /2012/12/29/single-page-design-madness 4 | -------------------------------------------------------------------------------- /2013/01-18--asset-management-in-node/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-18--asset-management-in-node/introduction.markdown: -------------------------------------------------------------------------------- 1 | * Node.JS is just a few years old (it was born in _2009_) 2 | * Some areas, such as client-side asset managers, don't have a well defined **best library** 3 | * Publishing packages on [npm][1] is astonishingly easy 4 | * Large amounts of packages are available 5 | 6 | [1]: https://npmjs.org/ 7 | -------------------------------------------------------------------------------- /2013/01-18--asset-management-in-node/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d2238468358691003419c", 3 | "author": "543d222f4683586910034197", 4 | "title": "Asset Management in Node", 5 | "slug": "asset-management-in-node", 6 | "tags": [ 7 | "ponyfoo", 8 | "nodejs", 9 | "npm", 10 | "assetify" 11 | ], 12 | "heroImage": "https://i.imgur.com/QjEuYcm.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/01-18--asset-management-in-node/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-18--asset-management-in-node/teaser.markdown: -------------------------------------------------------------------------------- 1 | Client-side asset management reveals a series of issues with **Node.JS** and **npm** today: 2 | -------------------------------------------------------------------------------- /2013/01-18--continuous-integration-and-automated-deployments/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-18--continuous-integration-and-automated-deployments/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d2238468358691003419b", 3 | "author": "543d222f4683586910034197", 4 | "title": "Continuous Integration, and Automated Deployments", 5 | "slug": "continuous-integration-and-automated-deployments", 6 | "tags": [ 7 | "build" 8 | ], 9 | "heroImage": "https://i.imgur.com/6MT1J6K.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2013/01-18--continuous-integration-and-automated-deployments/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-23--publishing-nodejs-packages-with-npm/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-23--publishing-nodejs-packages-with-npm/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d2239468358691003419d", 3 | "author": "543d222f4683586910034197", 4 | "title": "Publishing Node.js Packages with npm", 5 | "slug": "publishing-nodejs-packages-with-npm", 6 | "tags": [ 7 | "nodejs", 8 | "npm" 9 | ], 10 | "heroImage": "https://i.imgur.com/CgFlNMu.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/01-23--publishing-nodejs-packages-with-npm/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-23--publishing-nodejs-packages-with-npm/teaser.markdown: -------------------------------------------------------------------------------- 1 | Back when I [introduced assetify][1], I mentioned publishing packages on [npm][2] is _very_ easy. 2 | 3 | [1]: /2013/01/18/asset-management-in-node 4 | [2]: https://npmjs.org/ 5 | -------------------------------------------------------------------------------- /2013/01-28--paging-in-the-wilderness/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-28--paging-in-the-wilderness/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223a468358691003419e", 3 | "author": "543d222f4683586910034197", 4 | "title": "Paging in the Wilderness", 5 | "slug": "paging-in-the-wilderness", 6 | "tags": [ 7 | "ux", 8 | "front-end" 9 | ], 10 | "heroImage": "https://i.imgur.com/BKhw4VW.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/01-28--paging-in-the-wilderness/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/01-28--paging-in-the-wilderness/teaser.markdown: -------------------------------------------------------------------------------- 1 | Traditionally, lists on websites have been paged to allow data to be _chunked_ rather than sent out all at once, when the user might not need all of it _right away_, improving both _overall performance_ and _perceived speed_, both of which are very important to **web usability**. 2 | -------------------------------------------------------------------------------- /2013/02-05--implementing-opensearch/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/02-05--implementing-opensearch/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223a468358691003419f", 3 | "author": "543d222f4683586910034197", 4 | "title": "Implementing OpenSearch", 5 | "slug": "implementing-opensearch", 6 | "tags": [ 7 | "seo", 8 | "opensearch" 9 | ], 10 | "heroImage": "https://i.imgur.com/pFKT6CO.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/02-05--implementing-opensearch/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/02-05--implementing-opensearch/teaser.markdown: -------------------------------------------------------------------------------- 1 | [OpenSearch][1] is an specification that allows websites to improve _usability_. When implemented, it allows consumers to search your site _the way you intended them to_. All major browsers support OpenSearch. **Google Chrome** for instance, allows users to search _OpenSearch-enabled_ websites by using tab in the search bar. 2 | 3 | [1]: http://www.opensearch.org/ 4 | -------------------------------------------------------------------------------- /2013/02-15--javascript-is-awesome/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/02-15--javascript-is-awesome/introduction.markdown: -------------------------------------------------------------------------------- 1 | Behold: the **"hate speech"**. 2 | -------------------------------------------------------------------------------- /2013/02-15--javascript-is-awesome/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223b46835869100341a0", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Is Awesome", 5 | "slug": "javascript-is-awesome", 6 | "tags": [ 7 | "js", 8 | "coffeescript" 9 | ], 10 | "heroImage": "https://i.imgur.com/iJI9yJ5.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/02-15--javascript-is-awesome/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/02-15--javascript-is-awesome/teaser.markdown: -------------------------------------------------------------------------------- 1 | _JavaScript_ is one of the most **loved and hated** languages out there. Some, can't stand the stench of how obtuse it _appears_ to be. Some appreciate the "anything goes" virtues of an interpreted language, and would marry _JavaScript_ given the chance. 2 | -------------------------------------------------------------------------------- /2013/02-21--information-hiding-in-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/02-21--information-hiding-in-javascript/introduction.markdown: -------------------------------------------------------------------------------- 1 | Information hiding results in _cleaner, conciser code, that's easier to read_, and therefore, **more maintainable** (and easily _testable_). 2 | -------------------------------------------------------------------------------- /2013/02-21--information-hiding-in-javascript/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223c46835869100341a1", 3 | "author": "543d222f4683586910034197", 4 | "title": "Information Hiding in JavaScript", 5 | "slug": "information-hiding-in-javascript", 6 | "tags": [ 7 | "js", 8 | "js-native", 9 | "best-practices" 10 | ], 11 | "heroImage": "https://i.imgur.com/NnDPU3w.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/02-21--information-hiding-in-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-06--defensive-design/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-06--defensive-design/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223d46835869100341a2", 3 | "author": "543d222f4683586910034197", 4 | "title": "Defensive Design", 5 | "slug": "defensive-design", 6 | "tags": [ 7 | "ux", 8 | "front-end", 9 | "book-review" 10 | ], 11 | "heroImage": "https://i.imgur.com/TbOls8D.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/03-06--defensive-design/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-06--defensive-design/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've recently read the book [Defensive Design for the Web][1], and I felt compelled to write about it here. I guess it's a good starting point for writing my thoughts about _designing a reasonable user experience_. 2 | 3 | [1]: http://amzn.to/2aoGDKr 4 | -------------------------------------------------------------------------------- /2013/03-12--introduction-to-seo-and-content-indexing/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-12--introduction-to-seo-and-content-indexing/introduction.markdown: -------------------------------------------------------------------------------- 1 | I must admit that _I'm no expert on SEO_, **I just read a lot**, and I think I've come to amass a _good sense_ in what makes a site relevant in the eyes of web crawlers such as [Google][1]. 2 | 3 | [1]: http://google.com 4 | -------------------------------------------------------------------------------- /2013/03-12--introduction-to-seo-and-content-indexing/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223e46835869100341a3", 3 | "author": "543d222f4683586910034197", 4 | "title": "Introduction to SEO and Content Indexing", 5 | "slug": "introduction-to-seo-and-content-indexing", 6 | "tags": [ 7 | "seo", 8 | "ajax" 9 | ], 10 | "heroImage": "https://i.imgur.com/6uPAN4X.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/03-12--introduction-to-seo-and-content-indexing/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-12--introduction-to-seo-and-content-indexing/teaser.markdown: -------------------------------------------------------------------------------- 1 | Just a few days ago, [Google][1] started indexing [this blog][2], and it's _just starting to show up_ in their search results. I wanted to go over the steps I took to make a _good impression_ on them. 2 | 3 | [1]: http://google.com 4 | [2]: http://blog.ponyfoo.com/ 5 | -------------------------------------------------------------------------------- /2013/03-22--managing-code-quality-in-nodejs/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-22--managing-code-quality-in-nodejs/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-22--managing-code-quality-in-nodejs/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've mentioned [CI][1] and [static asset management][2] in the past. Now I want to talk about code quality. 2 | 3 | [1]: /2013/01/18/continuous-integration-and-automated-deployments 4 | [2]: /2013/01/18/asset-management-in-node 5 | -------------------------------------------------------------------------------- /2013/03-28--pragmatic-unit-testing-in-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-28--pragmatic-unit-testing-in-javascript/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d223f46835869100341a5", 3 | "author": "543d222f4683586910034197", 4 | "title": "Pragmatic Unit Testing in JavaScript", 5 | "slug": "pragmatic-unit-testing-in-javascript", 6 | "tags": [ 7 | "unit-testing", 8 | "js", 9 | "best-practices" 10 | ], 11 | "heroImage": "https://i.imgur.com/yjhBoMm.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/03-28--pragmatic-unit-testing-in-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/03-28--pragmatic-unit-testing-in-javascript/teaser.markdown: -------------------------------------------------------------------------------- 1 | More often than not, companies completely (and _irresponsibly_) disregard JavaScript as code that _should be unit tested_. They might test their back-end code, it may be in C#, Ruby, Java, or even PHP, or _just about any other language_. But there's a good chance that the front-end code is **thoroughly untested**. 2 | -------------------------------------------------------------------------------- /2013/04-01--a-note-on-everyday-usability/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/04-01--a-note-on-everyday-usability/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224046835869100341a6", 3 | "author": "543d222f4683586910034197", 4 | "title": "A Note on Everyday Usability", 5 | "slug": "a-note-on-everyday-usability", 6 | "tags": [ 7 | "ux" 8 | ], 9 | "heroImage": "https://i.imgur.com/c2PJkzY.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2013/04-01--a-note-on-everyday-usability/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/04-01--a-note-on-everyday-usability/teaser.markdown: -------------------------------------------------------------------------------- 1 | We can learn a lot about usability just by _observing everyday objects_, applications and interfaces. This morning I was flying to London from Buenos Aires, when I realized _something awkward_ about the UI on the plane's in flight system, which allows you to track the progress and duration of the flight, or occasionally watch a movie. 2 | -------------------------------------------------------------------------------- /2013/05-03--the-architecture-of-productivity/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-03--the-architecture-of-productivity/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-03--the-architecture-of-productivity/teaser.markdown: -------------------------------------------------------------------------------- 1 | It's been a while since I last blogged. I went on vacation, switched jobs, and have been generally busy. I'm now working _full-time remote_, which will _hopefully_ give me some more time to dedicate to this blog. 2 | -------------------------------------------------------------------------------- /2013/05-08--taming-asynchronous-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-08--taming-asynchronous-javascript/introduction.markdown: -------------------------------------------------------------------------------- 1 | I'll try my best to put together a coherent article on the subject that doesn't put you to sleep. But I wouldn't bet my horse on that. 2 | 3 | I'd bet _yours_, though. 4 | -------------------------------------------------------------------------------- /2013/05-08--taming-asynchronous-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-13--the-web-wars/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-13--the-web-wars/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224346835869100341a9", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Web Wars", 5 | "slug": "the-web-wars", 6 | "tags": [ 7 | "js", 8 | "async", 9 | "architecture", 10 | "lazyjs", 11 | "politics" 12 | ], 13 | "heroImage": "https://i.imgur.com/rHSiSKK.jpg" 14 | } 15 | -------------------------------------------------------------------------------- /2013/05-13--the-web-wars/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-13--the-web-wars/teaser.markdown: -------------------------------------------------------------------------------- 1 | There have always been wars in browser-land. Browsers, specs, politics, _lots_ of politics. Even _libraries_ had theirs. 2 | -------------------------------------------------------------------------------- /2013/05-21--recommended-reading/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-21--recommended-reading/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224346835869100341aa", 3 | "author": "543d222f4683586910034197", 4 | "title": "Recommended Reading", 5 | "slug": "recommended-reading", 6 | "tags": [ 7 | "recommended-reading", 8 | "software-development" 9 | ], 10 | "heroImage": "https://i.imgur.com/zJCQ0tm.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/05-21--recommended-reading/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-22--understanding-build-processes/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-22--understanding-build-processes/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224446835869100341ab", 3 | "author": "543d222f4683586910034197", 4 | "title": "Understanding Build Processes", 5 | "slug": "understanding-build-processes", 6 | "tags": [ 7 | "build", 8 | "productivity", 9 | "best-practices" 10 | ], 11 | "heroImage": "https://i.imgur.com/BNERGDD.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/05-22--understanding-build-processes/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-22--understanding-build-processes/teaser.markdown: -------------------------------------------------------------------------------- 1 | A _task runner_ helps you automate everything you need to get an environment functional. Configure, build, run tests, and execute your web server. But there's more than that to a build system. Particularly, in the _local environment_, there's a lot you could do to improve _development productivity_. 2 | -------------------------------------------------------------------------------- /2013/05-27--learn-regular-expressions/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-27--learn-regular-expressions/introduction.markdown: -------------------------------------------------------------------------------- 1 | [TL;WR cheatsheet][1] 2 | 3 | I'll try my best not to drown you in a sea of technical stuff, but regular expressions **are** a complicated matter, and learning them is no easy feat. 4 | 5 | [![stand-back-regex.jpg][3]][2] 6 | 7 | [1]: https://i.imgur.com/UTlGckN.png 8 | [2]: https://xkcd.com/208/ 9 | [3]: https://i.imgur.com/fp19SqK.jpg 10 | -------------------------------------------------------------------------------- /2013/05-27--learn-regular-expressions/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224546835869100341ac", 3 | "author": "543d222f4683586910034197", 4 | "title": "Learn Regular Expressions", 5 | "slug": "learn-regular-expressions", 6 | "tags": [ 7 | "regular-expressions", 8 | "learning" 9 | ], 10 | "heroImage": "https://i.imgur.com/8zhRz0T.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/05-27--learn-regular-expressions/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-27--learn-regular-expressions/teaser.markdown: -------------------------------------------------------------------------------- 1 | **Regular Expressions** are a fundamental tool **_every_** programmer should understand, at the very least on a basic level. I might not make an expert in regex out of you, but at least, you should be able to comprehend what they do, and create simple ones yourself. 2 | -------------------------------------------------------------------------------- /2013/05-30--the-micro-library-phenomenon/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-30--the-micro-library-phenomenon/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224646835869100341ad", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Micro Library Phenomenon", 5 | "slug": "the-micro-library-phenomenon", 6 | "tags": [ 7 | "js", 8 | "nodejs", 9 | "politics", 10 | "micro-library" 11 | ], 12 | "heroImage": "https://i.imgur.com/CWg557k.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/05-30--the-micro-library-phenomenon/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/05-30--the-micro-library-phenomenon/teaser.markdown: -------------------------------------------------------------------------------- 1 | As of late, there seems to be a _steady trend_ towards minimalist [DOM][1] (and **BOM**) abstractions, these micro-libraries generally trade _functionality and flexibility_ for _performance boosts._ 2 | 3 | [1]: https://developer.mozilla.org/en/docs/DOM 4 | -------------------------------------------------------------------------------- /2013/06-10--uncovering-the-native-dom-api/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-10--uncovering-the-native-dom-api/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224746835869100341ae", 3 | "author": "543d222f4683586910034197", 4 | "title": "Uncovering the Native DOM API", 5 | "slug": "uncovering-the-native-dom-api", 6 | "tags": [ 7 | "js", 8 | "js-native", 9 | "dom", 10 | "best-practices" 11 | ], 12 | "heroImage": "https://i.imgur.com/fxFhPiC.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/06-10--uncovering-the-native-dom-api/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-10--uncovering-the-native-dom-api/teaser.markdown: -------------------------------------------------------------------------------- 1 | JavaScript libraries such as **jQuery** serve a great purpose in enabling and _normalizing cross-browser behaviors_ of the [DOM][1] in such a way that it's possible to use the same interface to interact with many different browsers. 2 | 3 | [1]: https://developer.mozilla.org/en/docs/DOM 4 | -------------------------------------------------------------------------------- /2013/06-24--css-for-dummies/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-24--css-for-dummies/introduction.markdown: -------------------------------------------------------------------------------- 1 | I'll be taking a different approach, though. Rather than explain what libraries do, I'll try explaining why a need for them was born, and walk you through the most basic stuff, such as selectors, and follow up by tackling complex topics such as fonts, [Bootstrap][1], pre-processing, and more. 2 | 3 | [1]: http://twitter.github.io/bootstrap/ 4 | -------------------------------------------------------------------------------- /2013/06-24--css-for-dummies/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224846835869100341af", 3 | "author": "543d222f4683586910034197", 4 | "title": "CSS For Dummies", 5 | "slug": "css-for-dummies", 6 | "tags": [ 7 | "css", 8 | "front-end", 9 | "learning" 10 | ], 11 | "heroImage": "https://i.imgur.com/WSy36xI.png" 12 | } 13 | -------------------------------------------------------------------------------- /2013/06-24--css-for-dummies/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-25--organizing-your-css-with-bootstrap/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-25--organizing-your-css-with-bootstrap/introduction.markdown: -------------------------------------------------------------------------------- 1 | Any decently-sized codebase, even CSS, needs some sort of organization in order to keep us from going insane. Pre-processing, and a few ground rules for style writing, will help us achieve the _level of organization **required** in higher level applications_. 2 | -------------------------------------------------------------------------------- /2013/06-25--organizing-your-css-with-bootstrap/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224946835869100341b0", 3 | "author": "543d222f4683586910034197", 4 | "title": "Organizing your CSS with Bootstrap", 5 | "slug": "organizing-your-css-with-bootstrap", 6 | "tags": [ 7 | "css", 8 | "front-end", 9 | "bootstrap" 10 | ], 11 | "heroImage": "https://i.imgur.com/jxp4dIn.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/06-25--organizing-your-css-with-bootstrap/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-25--organizing-your-css-with-bootstrap/teaser.markdown: -------------------------------------------------------------------------------- 1 | Now that we've laid [the basics][1] in the cascading land of awesomeness that is CSS, it's time to move forward and take a deeper look at _organization and tooling_. 2 | 3 | [1]: /2013/06/24/css-for-dummies 4 | -------------------------------------------------------------------------------- /2013/06-27--monitoring-production-grade-node-applications/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-27--monitoring-production-grade-node-applications/introduction.markdown: -------------------------------------------------------------------------------- 1 | We shouldn't ever rely on the luxury of _hoping for the best_ when it comes to _production application uptime_. There are a series of steps we can take to _prevent and minimize fatal exceptions_, while **maximizing uptime and improving monitoring**. 2 | -------------------------------------------------------------------------------- /2013/06-27--monitoring-production-grade-node-applications/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/06-27--monitoring-production-grade-node-applications/teaser.markdown: -------------------------------------------------------------------------------- 1 | Catching, or even _tracing_ errors in Node applications can be _tricky sometimes_. I wanted to share a few practices that can help you **keep your application up in most scenarios**. 2 | -------------------------------------------------------------------------------- /2013/07-02--tech-news-reading-hints/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-02--tech-news-reading-hints/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224b46835869100341b2", 3 | "author": "543d222f4683586910034197", 4 | "title": "Tech News Reading Hints", 5 | "slug": "tech-news-reading-hints", 6 | "tags": [ 7 | "recommended-reading", 8 | "rss", 9 | "link-dump" 10 | ], 11 | "heroImage": "https://i.imgur.com/is3XK9z.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/07-02--tech-news-reading-hints/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-02--tech-news-reading-hints/teaser.markdown: -------------------------------------------------------------------------------- 1 | The King is Dead, Long Live the King. 2 | -------------------------------------------------------------------------------- /2013/07-09--getting-over-jquery/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-09--getting-over-jquery/introduction.markdown: -------------------------------------------------------------------------------- 1 | Why do we _really_ use jQuery? Sure, it simplifies things. But do we really need _all those abstractions_? Can't we get away with just a few of _the most basic of them_? In this article I'll examine the most frequently used portions of its API, and look at the different ways we can _rewrite_ those everyday utilities _using **plain JavaScript**_. 2 | -------------------------------------------------------------------------------- /2013/07-09--getting-over-jquery/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-09--getting-over-jquery/teaser.markdown: -------------------------------------------------------------------------------- 1 | We've looked at doing some of the things that you can do in native code. So far, we've covered AJAX, event handling, event delegation, DOM querying, and DOM manipulation. If you haven't _already_ read that, you [_probably should_][1]. 2 | 3 | [1]: /2013/06/10/uncovering-the-native-dom-api 4 | -------------------------------------------------------------------------------- /2013/07-10--modularizing-node-applications-with-express/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-10--modularizing-node-applications-with-express/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-10--modularizing-node-applications-with-express/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've spent a few articles talking about [build processes][1]; now I want to spend a few words on [application architecture][2], particularly in _Node.JS web applications using Express_. 2 | 3 | [1]: /search/tagged/build 4 | [2]: /search/tagged/architecture 5 | -------------------------------------------------------------------------------- /2013/07-12--teach-yourself-nodejs-in-10-steps/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-12--teach-yourself-nodejs-in-10-steps/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d224f46835869100341b5", 3 | "author": "543d222f4683586910034197", 4 | "title": "Teach Yourself Node.js in 10 Steps", 5 | "slug": "teach-yourself-nodejs-in-10-steps", 6 | "tags": [ 7 | "nodejs", 8 | "learning" 9 | ], 10 | "heroImage": "https://i.imgur.com/ARsqBog.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/07-12--teach-yourself-nodejs-in-10-steps/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-12--teach-yourself-nodejs-in-10-steps/teaser.markdown: -------------------------------------------------------------------------------- 1 | I'm not sure anyone needs convincing that **Node.js is freaking awesome**, little has been said otherwise. Many of the people reading this blog are _already experienced Node developers_, but maybe we could help newcomers ramp up as fast as the technology itself is ramping up. 2 | -------------------------------------------------------------------------------- /2013/07-22--upgraded-asset-management/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-22--upgraded-asset-management/introduction.markdown: -------------------------------------------------------------------------------- 1 | There aren't real contenders when it comes to static asset management solutions for Node, and the solutions out there were either too thin, too opinionated, or too careless. 2 | -------------------------------------------------------------------------------- /2013/07-22--upgraded-asset-management/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225046835869100341b6", 3 | "author": "543d222f4683586910034197", 4 | "title": "Upgraded Asset Management", 5 | "slug": "upgraded-asset-management", 6 | "tags": [ 7 | "nodejs", 8 | "assetify", 9 | "grunt", 10 | "build" 11 | ], 12 | "heroImage": "https://i.imgur.com/hoJ9epw.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/07-22--upgraded-asset-management/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-22--upgraded-asset-management/teaser.markdown: -------------------------------------------------------------------------------- 1 | Recently, I've updated the documentation for [assetify][1], and [grunt-assetify][2]. I wanted to share the usage patterns as well as my reasons for developing, and maintaining **assetify**. 2 | 3 | [1]: https://github.com/bevacqua/node-assetify 4 | [2]: https://github.com/bevacqua/grunt-assetify 5 | -------------------------------------------------------------------------------- /2013/07-29--lean-development-principles/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-29--lean-development-principles/introduction.markdown: -------------------------------------------------------------------------------- 1 | The Lean Startup introduces us to a series of practices we can follow in order to build products faster, get feedback earlier and more often, and most importantly, **develop features customers actually want**. In this article, I'll go over the fundamentals, focusing on how Lean Development affects software development, not just startup management. 2 | -------------------------------------------------------------------------------- /2013/07-29--lean-development-principles/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225146835869100341b7", 3 | "author": "543d222f4683586910034197", 4 | "title": "Lean Development Principles", 5 | "slug": "lean-development-principles", 6 | "tags": [ 7 | "lean-startup", 8 | "book-review", 9 | "recommended-reading" 10 | ], 11 | "heroImage": "https://i.imgur.com/AW9oLPY.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/07-29--lean-development-principles/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/07-29--lean-development-principles/teaser.markdown: -------------------------------------------------------------------------------- 1 | I just finished reading [The Lean Startup][1], an immersive, ground-breaking take on entrepreneurship and startup management, with views heavily rooted in the Toyota Production System. There are quite a few take-aways for us, the **web work-force**, to learn. 2 | 3 | [1]: http://www.amazon.com/dp/0307887898 4 | -------------------------------------------------------------------------------- /2013/08-27--the-angular-way/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/08-27--the-angular-way/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225246835869100341b8", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Angular Way", 5 | "slug": "the-angular-way", 6 | "tags": [ 7 | "angularjs", 8 | "front-end", 9 | "best-practices", 10 | "app-press" 11 | ], 12 | "heroImage": "https://i.imgur.com/vDoxsEy.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/08-27--the-angular-way/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-19--deploying-node-apps-to-aws-using-grunt/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-19--deploying-node-apps-to-aws-using-grunt/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-19--deploying-node-apps-to-aws-using-grunt/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've been toying with **AWS** for a few days now, and I wanted to share my experience and my approach with you. My goal was to set up a deploy flow in Grunt to enable me to spin up new [EC2][3] instances in the AWS cloud and deploy to them easily. 2 | -------------------------------------------------------------------------------- /2013/09-26--continuous-development-in-nodejs/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-26--continuous-development-in-nodejs/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-26--continuous-development-in-nodejs/teaser.markdown: -------------------------------------------------------------------------------- 1 | With [Grunt][1], the JavaScript task runner, it's becoming _increasingly easy to tackle continuous development_. The goal is being able to work uninterruptedly in our code-base while developing. To this effect, there's quite a few things you could do. 2 | 3 | [1]: http://gruntjs.com/ 4 | -------------------------------------------------------------------------------- /2013/09-28--we-dont-want-your-coffee/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-28--we-dont-want-your-coffee/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225546835869100341bb", 3 | "author": "543d222f4683586910034197", 4 | "title": "We don't want your Coffee", 5 | "slug": "we-dont-want-your-coffee", 6 | "tags": [ 7 | "controversial", 8 | "politics", 9 | "coffeescript", 10 | "asmjs" 11 | ], 12 | "heroImage": "https://i.imgur.com/QlORSVd.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2013/09-28--we-dont-want-your-coffee/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/09-28--we-dont-want-your-coffee/teaser.markdown: -------------------------------------------------------------------------------- 1 | _An open letter to the [CoffeeScript][1] community._ 2 | 3 | [1]: http://coffeescript.org/ 4 | -------------------------------------------------------------------------------- /2013/10-10--ditch-windows-become-a-polyglot/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-10--ditch-windows-become-a-polyglot/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-16--spritesheets-grunt-and-you/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-16--spritesheets-grunt-and-you/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225746835869100341bd", 3 | "author": "543d222f4683586910034197", 4 | "title": "Spritesheets, Grunt, and You", 5 | "slug": "spritesheets-grunt-and-you", 6 | "tags": [ 7 | "grunt", 8 | "build", 9 | "sprites" 10 | ], 11 | "heroImage": "https://i.imgur.com/qQHNFJa.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/10-16--spritesheets-grunt-and-you/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-16--spritesheets-grunt-and-you/teaser.markdown: -------------------------------------------------------------------------------- 1 | If you are using Grunt, you really have **no excuse** not to be using CSS spritesheets. If you aren't using Grunt _yet_, then you should know that a well thought-out workflow with Grunt will allow you to _seamlessly integrate icons together_ into a spritesheet during your builds. 2 | -------------------------------------------------------------------------------- /2013/10-18--your-tab-views-suck/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-18--your-tab-views-suck/introduction.markdown: -------------------------------------------------------------------------------- 1 | In this article we'll discuss the **pitfalls of resorting to jQuery UI** and its ilk, and then compare it with an approach that _doesn't even involve any JavaScript_, but merely some lateral thinking and a couple of CSS tricks. 2 | -------------------------------------------------------------------------------- /2013/10-18--your-tab-views-suck/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225846835869100341be", 3 | "author": "543d222f4683586910034197", 4 | "title": "Your Tab Views Suck", 5 | "slug": "your-tab-views-suck", 6 | "tags": [ 7 | "front-end", 8 | "css", 9 | "jquery", 10 | "no-js", 11 | "tutorial" 12 | ], 13 | "heroImage": "https://i.imgur.com/gIZ46QH.jpg" 14 | } 15 | -------------------------------------------------------------------------------- /2013/10-18--your-tab-views-suck/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-18--your-tab-views-suck/teaser.markdown: -------------------------------------------------------------------------------- 1 | What if I told you... we can write a **tabbed UI view** without _using JavaScript_, which works in every modern browser, and even clocks around 20 _total_ lines of code? 2 | -------------------------------------------------------------------------------- /2013/10-25--event-emitter-obey-and-report/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/10-25--event-emitter-obey-and-report/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225946835869100341bf", 3 | "author": "543d222f4683586910034197", 4 | "title": "Event Emitter: Obey and Report", 5 | "slug": "event-emitter-obey-and-report", 6 | "tags": [ 7 | "js", 8 | "pattern", 9 | "event-emitter" 10 | ], 11 | "heroImage": "https://i.imgur.com/Q9q8dIW.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/10-25--event-emitter-obey-and-report/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-08--angular-wysiwyg/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-08--angular-wysiwyg/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225a46835869100341c0", 3 | "author": "543d222f4683586910034197", 4 | "title": "Angular WYSIWYG", 5 | "slug": "angular-wysiwyg", 6 | "tags": [ 7 | "angularjs", 8 | "wysiwyg", 9 | "ponyedit" 10 | ], 11 | "heroImage": "https://i.imgur.com/HHUf0rF.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/11-08--angular-wysiwyg/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-08--angular-wysiwyg/teaser.markdown: -------------------------------------------------------------------------------- 1 | Building on the blocks laid out [in my previous article][1], I open-sourced a [WYSIWYG][2] editing library _which doesn't provide an UI_. You can [find the source code here][3]. 2 | 3 | [1]: /2013/10/25/event-emitter-obey-and-report 4 | [2]: http://en.wikipedia.org/wiki/WYSIWYG 5 | [3]: https://github.com/bevacqua/ponyedit 6 | -------------------------------------------------------------------------------- /2013/11-13--grunt-tips-and-tricks/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-13--grunt-tips-and-tricks/introduction.markdown: -------------------------------------------------------------------------------- 1 | ###### In a Pinch 2 | 3 | * Always `--save-dev` 4 | * Heroku Custom Buildpack 5 | * Forget `grunt.loadNpmTasks` 6 | * Spread out `watch` 7 | * Use a nice JSHint reporter 8 | * Keep your Gruntfile organized! 9 | * Investigate 10 | 11 | These are explained and detailed below. 12 | -------------------------------------------------------------------------------- /2013/11-13--grunt-tips-and-tricks/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225b46835869100341c1", 3 | "author": "543d222f4683586910034197", 4 | "title": "Grunt Tips and Tricks", 5 | "slug": "grunt-tips-and-tricks", 6 | "tags": [ 7 | "grunt", 8 | "tips" 9 | ], 10 | "heroImage": "https://i.imgur.com/dr8Sb2x.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/11-13--grunt-tips-and-tricks/summary.markdown: -------------------------------------------------------------------------------- 1 | I’ve been meaning to compile a list of tips and tricks to improve you Grunt workflows, so here it is! 2 | -------------------------------------------------------------------------------- /2013/11-13--grunt-tips-and-tricks/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've been meaning to compile a list of tips and tricks to improve you Grunt workflows, so here it is! 2 | -------------------------------------------------------------------------------- /2013/11-19--fun-with-native-arrays/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-19--fun-with-native-arrays/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225b46835869100341c2", 3 | "author": "543d222f4683586910034197", 4 | "title": "Fun with Native Arrays", 5 | "slug": "fun-with-native-arrays", 6 | "tags": [ 7 | "js", 8 | "js-native", 9 | "array" 10 | ], 11 | "heroImage": "https://i.imgur.com/W6KqZls.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/11-19--fun-with-native-arrays/summary.markdown: -------------------------------------------------------------------------------- 1 | An introduction to function `Array` methods. 2 | -------------------------------------------------------------------------------- /2013/11-26--package-authoring-with-paqui/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/11-26--package-authoring-with-paqui/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d225d46835869100341c3", 3 | "author": "543d222f4683586910034197", 4 | "title": "Package Authoring with Paqui", 5 | "slug": "package-authoring-with-paqui", 6 | "tags": [ 7 | "paqui", 8 | "js", 9 | "front-end", 10 | "npm", 11 | "bower" 12 | ], 13 | "heroImage": "https://i.imgur.com/C3EsF6r.jpg" 14 | } 15 | -------------------------------------------------------------------------------- /2013/11-26--package-authoring-with-paqui/summary.markdown: -------------------------------------------------------------------------------- 1 | Creating client-side JavaScript packages is increasingly becoming a painful endeavor. Here's a potential fix. 2 | -------------------------------------------------------------------------------- /2013/12-02--get-between-the-covers-of-build-first/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-02--get-between-the-covers-of-build-first/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-04--where-does-this-keyword-come-from/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-04--where-does-this-keyword-come-from/introduction.markdown: -------------------------------------------------------------------------------- 1 | Until you _"get it"_, this is probably how you feel about `this`. 2 | 3 | ![chaos.gif][1] 4 | 5 | It's madness, right? In this brief article, I aim to demystify `this`. 6 | 7 | [1]: https://raw.github.com/bevacqua/buildfirst/master/images/chaos.gif 8 | -------------------------------------------------------------------------------- /2013/12-04--where-does-this-keyword-come-from/summary.markdown: -------------------------------------------------------------------------------- 1 | How scoping works is part of the latest chapter for my upcoming book on JavaScript Application Design. Here's an explainer! 2 | -------------------------------------------------------------------------------- /2013/12-09--javascript-variable-hoisting/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-09--javascript-variable-hoisting/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226046835869100341c6", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Variable Hoisting", 5 | "slug": "javascript-variable-hoisting", 6 | "tags": [ 7 | "js", 8 | "hoisting" 9 | ], 10 | "heroImage": "https://i.imgur.com/wILJhez.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/12-09--javascript-variable-hoisting/summary.markdown: -------------------------------------------------------------------------------- 1 | A large number of JavaScript interview questions, if not most of them, can be answered with an understanding of scoping, [how `this` works][1], and hoisting. 2 | 3 | [1]: /articles/where-does-this-keyword-come-from "Where does this keyword come from? --- Pony Foo" 4 | -------------------------------------------------------------------------------- /2013/12-09--javascript-variable-hoisting/teaser.markdown: -------------------------------------------------------------------------------- 1 | A large number of JavaScript interview questions, if not most of them, can be answered with an understanding of scoping, [how `this` works][1], and hoisting. 2 | 3 | [1]: /articles/where-does-this-keyword-come-from "Where does this keyword come from? --- Pony Foo" 4 | -------------------------------------------------------------------------------- /2013/12-14--9-quick-tips-about-npm/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-14--9-quick-tips-about-npm/introduction.markdown: -------------------------------------------------------------------------------- 1 | *23-12-13 Update: Now with an extra bonus tip* 2 | -------------------------------------------------------------------------------- /2013/12-14--9-quick-tips-about-npm/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226046835869100341c7", 3 | "author": "543d222f4683586910034197", 4 | "title": "9 Quick Tips About npm", 5 | "slug": "9-quick-tips-about-npm", 6 | "tags": [ 7 | "npm", 8 | "tips", 9 | "browserify" 10 | ], 11 | "heroImage": "https://i.imgur.com/9gXdb3a.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/12-20--is-webdriver-as-good-as-it-gets/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-20--is-webdriver-as-good-as-it-gets/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-20--is-webdriver-as-good-as-it-gets/teaser.markdown: -------------------------------------------------------------------------------- 1 | This blog post is part _rant_, part _learning experience_, and part _solutions and conclusions_ I've arrived at, while struggling with [WebDriver][1] implementations in Node. 2 | 3 | [1]: http://docs.seleniumhq.org/projects/webdriver/ 4 | -------------------------------------------------------------------------------- /2013/12-23--architecture-of-ecmascript-6-modules/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-23--architecture-of-ecmascript-6-modules/introduction.markdown: -------------------------------------------------------------------------------- 1 | ![es6.png][1] 2 | 3 | At the bottom you'll find a list of useful _related links_. 4 | 5 | [1]: https://i.imgur.com/bky9ghC.png 6 | -------------------------------------------------------------------------------- /2013/12-23--architecture-of-ecmascript-6-modules/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226246835869100341c9", 3 | "author": "543d222f4683586910034197", 4 | "title": "Architecture of ECMAScript 6 Modules", 5 | "slug": "architecture-of-ecmascript-6-modules", 6 | "tags": [ 7 | "es6", 8 | "modules", 9 | "harmony" 10 | ], 11 | "heroImage": "https://i.imgur.com/RlqIXjp.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2013/12-23--architecture-of-ecmascript-6-modules/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-23--architecture-of-ecmascript-6-modules/teaser.markdown: -------------------------------------------------------------------------------- 1 | This blog post contains useful information if you're interested in the latest developments on ECMAScript 6 Harmony modules and they current state of their implementation. The original post [can be found here][1]. 2 | 3 | [1]: https://gist.github.com/wycats/51c96e3adcdb3a68cbc3 4 | -------------------------------------------------------------------------------- /2013/12-24--rehearsal-record-program-output/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2013/12-24--rehearsal-record-program-output/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226446835869100341ca", 3 | "author": "543d222f4683586910034197", 4 | "title": "Rehearsal: Record program output", 5 | "slug": "rehearsal-record-program-output", 6 | "tags": [ 7 | "utility", 8 | "talks" 9 | ], 10 | "heroImage": "https://i.imgur.com/2GGGGUW.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2013/12-24--rehearsal-record-program-output/summary.markdown: -------------------------------------------------------------------------------- 1 | Persist standard input to a file and keep track of timestamps, then simulate real-time program execution. 2 | -------------------------------------------------------------------------------- /2013/12-24--rehearsal-record-program-output/teaser.markdown: -------------------------------------------------------------------------------- 1 | Persist standard input to a file and keep track of timestamps, then simulate real-time program execution. 2 | -------------------------------------------------------------------------------- /2014/01-01--a-year-in-review/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-01--a-year-in-review/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226546835869100341cb", 3 | "author": "543d222f4683586910034197", 4 | "title": "A Year In Review", 5 | "slug": "a-year-in-review", 6 | "tags": [ 7 | "yearly-review", 8 | "recommended-reading" 9 | ], 10 | "heroImage": "https://i.imgur.com/v5JAyvE.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2014/01-01--a-year-in-review/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-01--a-year-in-review/teaser.markdown: -------------------------------------------------------------------------------- 1 | It's been almost a year since [I launched this blog][1], although I had started writing blog posts before I finished coding the web application, as a way to "force me" to finish coding it, instead of fooling around with meaningless "features". 2 | 3 | [1]: /2012/12/25/pony-foo-begins 4 | -------------------------------------------------------------------------------- /2014/01-07--email-sending-done-right/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-07--email-sending-done-right/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226646835869100341cc", 3 | "author": "543d222f4683586910034197", 4 | "title": "Email Sending Done Right", 5 | "slug": "email-sending-done-right", 6 | "tags": [ 7 | "ponyfoo", 8 | "modules", 9 | "campaign" 10 | ], 11 | "heroImage": "https://i.imgur.com/QX7MBUu.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2014/01-07--email-sending-done-right/summary.markdown: -------------------------------------------------------------------------------- 1 | A week ago I wrote about [a few goals][1] I've set for myself in 2014. In particular, I alluded to writing code that's more modular than what I've been writing so far: 2 | 3 | [1]: /articles/a-year-in-review 4 | -------------------------------------------------------------------------------- /2014/01-07--email-sending-done-right/teaser.markdown: -------------------------------------------------------------------------------- 1 | A week ago I wrote about [a few goals][1] I've set for myself in 2014. In particular, I alluded to writing code that's more modular than what I've been writing so far: 2 | 3 | [1]: /articles/a-year-in-review 4 | -------------------------------------------------------------------------------- /2014/01-09--gulp-grunt-whatever/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-09--gulp-grunt-whatever/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226746835869100341cd", 3 | "author": "543d222f4683586910034197", 4 | "title": "Gulp, Grunt, Whatever", 5 | "slug": "gulp-grunt-whatever", 6 | "tags": [ 7 | "build", 8 | "grunt", 9 | "gulp", 10 | "npm" 11 | ], 12 | "heroImage": "https://i.imgur.com/Lox3uM0.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/01-09--gulp-grunt-whatever/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-20--how-to-design-great-programs/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-20--how-to-design-great-programs/summary.markdown: -------------------------------------------------------------------------------- 1 | A recollection of common-sense application design practices I usually follow when building things. 2 | -------------------------------------------------------------------------------- /2014/01-20--how-to-design-great-programs/teaser.markdown: -------------------------------------------------------------------------------- 1 | This article is a recollection of common-sense application design practices I usually follow when building things. I felt like grouping them together in a blog post, for future reference. I'll talk not so much about implementation, but more about **program design theory**. 2 | -------------------------------------------------------------------------------- /2014/01-27--my-first-gulp-adventure/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-27--my-first-gulp-adventure/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226946835869100341cf", 3 | "author": "543d222f4683586910034197", 4 | "title": "My First Gulp Adventure", 5 | "slug": "my-first-gulp-adventure", 6 | "tags": [ 7 | "gulp", 8 | "tutorial", 9 | "build" 10 | ], 11 | "heroImage": "https://i.imgur.com/oh34sKD.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2014/01-27--my-first-gulp-adventure/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/01-27--my-first-gulp-adventure/teaser.markdown: -------------------------------------------------------------------------------- 1 | I decided to take a gulp of Gulp and use it in one of my latest projects, to help me with releases. I wrote a Gulpfile, which lets me write some code to define the tasks enumerated below. 2 | -------------------------------------------------------------------------------- /2014/02-02--you-dont-need-a-todo-app/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-02--you-dont-need-a-todo-app/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226a46835869100341d0", 3 | "author": "543d222f4683586910034197", 4 | "title": "You don't need a TODO app", 5 | "slug": "you-dont-need-a-todo-app", 6 | "tags": [ 7 | "productivity", 8 | "tips", 9 | "gmail", 10 | "todo", 11 | "bash" 12 | ], 13 | "heroImage": "https://i.imgur.com/6bpm22v.jpg" 14 | } 15 | -------------------------------------------------------------------------------- /2014/02-02--you-dont-need-a-todo-app/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-02--you-dont-need-a-todo-app/teaser.markdown: -------------------------------------------------------------------------------- 1 | Recently, [a tip on Coderwall][1], about how to organize your TODO list, brought about [a discussion on Hacker News][2]. In this brief post, I'd like to provide my take on the subject. 2 | 3 | [1]: https://coderwall.com/p/kpd7ra 4 | [2]: https://news.ycombinator.com/item?id=7162131 5 | -------------------------------------------------------------------------------- /2014/02-14--angle-brackets-rifle-scopes/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-14--angle-brackets-rifle-scopes/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-14--angle-brackets-rifle-scopes/teaser.markdown: -------------------------------------------------------------------------------- 1 | **Angular.js** presents a remarkable number of interesting design choices in its code-base. Two particularly interesting cases are the way in which scopes work, and how directives behave. 2 | -------------------------------------------------------------------------------- /2014/02-19--angle-brackets-synergistic-directives/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-19--angle-brackets-synergistic-directives/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/02-19--angle-brackets-synergistic-directives/teaser.markdown: -------------------------------------------------------------------------------- 1 | In [the previous part of this article][1], I discussed scope events and the behavior of the digest cycle. This time around, I'll talk about directives. Just as promised, this article will cover **isolate scopes, transclusion, linking functions, compilers, directive controllers, and more**. 2 | 3 | [1]: /2014/02/14/angle-brackets-rifle-scopes 4 | -------------------------------------------------------------------------------- /2014/03-07--a-less-convoluted-event-emitter-implementation/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/03-07--a-less-convoluted-event-emitter-implementation/introduction.markdown: -------------------------------------------------------------------------------- 1 | In this article I'll explore the implementation that made its way into [contra][1], an asynchronous flow control library I designed. 2 | 3 | [1]: https://github.com/bevacqua/contra 4 | -------------------------------------------------------------------------------- /2014/03-07--a-less-convoluted-event-emitter-implementation/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/04-24--head-first-public-speaking/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/04-24--head-first-public-speaking/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d226f46835869100341d4", 3 | "author": "543d222f4683586910034197", 4 | "title": "Head First Public Speaking", 5 | "slug": "head-first-public-speaking", 6 | "tags": [ 7 | "public-speaking", 8 | "jsconf", 9 | "qcon", 10 | "buildfirst" 11 | ], 12 | "heroImage": "https://i.imgur.com/MkIHNpm.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/04-24--head-first-public-speaking/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-07--shared-rendering-with-rendr/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-07--shared-rendering-with-rendr/introduction.markdown: -------------------------------------------------------------------------------- 1 | [![rendr.png][2]][1] 2 | 3 | Let's take a quick dive into the world of [Rendr][1]. 4 | 5 | [1]: https://github.com/rendrjs/rendr 6 | [2]: https://i.imgur.com/88hPdca.png 7 | -------------------------------------------------------------------------------- /2014/05-07--shared-rendering-with-rendr/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d227046835869100341d5", 3 | "author": "543d222f4683586910034197", 4 | "title": "Shared Rendering with Rendr", 5 | "slug": "shared-rendering-with-rendr", 6 | "tags": [ 7 | "isomorphic", 8 | "backbone", 9 | "rendr", 10 | "mustache" 11 | ], 12 | "heroImage": "https://i.imgur.com/1OndmAJ.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/05-07--shared-rendering-with-rendr/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-16--modularizing-your-front-end/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-16--modularizing-your-front-end/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-17--css-the-good-parts/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-17--css-the-good-parts/introduction.markdown: -------------------------------------------------------------------------------- 1 | You can find the _latest version_ at [css][1] on GitHub. [Pull requests][2], suggestions, ideas, and critique are all welcome! 2 | 3 | [1]: https://github.com/bevacqua/css 4 | [2]: https://github.com/bevacqua/css/issues 5 | -------------------------------------------------------------------------------- /2014/05-17--css-the-good-parts/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d227346835869100341d7", 3 | "author": "543d222f4683586910034197", 4 | "title": "CSS: The Good Parts", 5 | "slug": "css-the-good-parts", 6 | "tags": [ 7 | "css", 8 | "modules", 9 | "architecture", 10 | "style-guide", 11 | "best-practices" 12 | ], 13 | "heroImage": "https://i.imgur.com/8sXt2ZV.jpg" 14 | } 15 | -------------------------------------------------------------------------------- /2014/05-17--css-the-good-parts/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-17--css-the-good-parts/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've decided to pour my thoughts of **how the CSS of an application should be modelled** into a formal style guide. I've been using this approach for over a year, and now I'm also moving to implement it on the job, as well. 2 | -------------------------------------------------------------------------------- /2014/05-21--taunus-micro-isomorphic-mvc-framework/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/05-21--taunus-micro-isomorphic-mvc-framework/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/06-07--how-to-avoid-objectprototype-pollution/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/06-07--how-to-avoid-objectprototype-pollution/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/07-04--choose-grunt-gulp-or-npm/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/07-04--choose-grunt-gulp-or-npm/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d227646835869100341da", 3 | "author": "543d222f4683586910034197", 4 | "title": "Choose: Grunt, Gulp, or npm?", 5 | "slug": "choose-grunt-gulp-or-npm", 6 | "tags": [ 7 | "gulp", 8 | "grunt", 9 | "npm", 10 | "npm-run" 11 | ], 12 | "heroImage": "https://i.imgur.com/T5DA45j.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/07-04--choose-grunt-gulp-or-npm/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-05--building-high-quality-front-end-modules/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-05--building-high-quality-front-end-modules/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-05--building-high-quality-front-end-modules/teaser.markdown: -------------------------------------------------------------------------------- 1 | Lately I've been developing front-end modules solely based on [Browserify][1], the latest being [rome][2]. Rome is a calendar component that has an extensive feature-set. I've compiled a list of highlights below. 2 | 3 | [1]: http://browserify.org/ 4 | [2]: https://github.com/bevacqua/rome 5 | -------------------------------------------------------------------------------- /2014/08-12--a-browsersync-primer/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-12--a-browsersync-primer/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d227946835869100341dc", 3 | "author": "543d222f4683586910034197", 4 | "title": "A BrowserSync Primer", 5 | "slug": "a-browsersync-primer", 6 | "tags": [ 7 | "build", 8 | "browsersync", 9 | "grunt", 10 | "gulp", 11 | "npm", 12 | "nodemon" 13 | ], 14 | "heroImage": "https://i.imgur.com/T8rSzes.jpg" 15 | } 16 | -------------------------------------------------------------------------------- /2014/08-12--a-browsersync-primer/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-18--javascript-quality-guide/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-18--javascript-quality-guide/introduction.markdown: -------------------------------------------------------------------------------- 1 | This style guide aims to provide the ground rules for an application's JavaScript code, such that it's highly readable and consistent across different developers on a team. The focus is put on quality and coherence across the different pieces of your application. 2 | -------------------------------------------------------------------------------- /2014/08-18--javascript-quality-guide/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "543d227a46835869100341dd", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Quality Guide", 5 | "slug": "javascript-quality-guide", 6 | "tags": [ 7 | "javascript", 8 | "style-guide", 9 | "quality", 10 | "best-practices" 11 | ], 12 | "heroImage": "https://i.imgur.com/jAKAmNa.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/08-18--javascript-quality-guide/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-18--javascript-quality-guide/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've recently created a [JavaScript Quality Guide][1], and I wanted to share it on Pony Foo as well. The latest version can be [found on GitHub][1]. As _all-things-style-guides_ go, it's super opinionated so take it with a pinch of salt. 2 | 3 | [1]: https://github.com/bevacqua/js 4 | -------------------------------------------------------------------------------- /2014/08-25--a-gentle-browserify-walkthrough/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-25--a-gentle-browserify-walkthrough/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/08-25--a-gentle-browserify-walkthrough/teaser.markdown: -------------------------------------------------------------------------------- 1 | Building modules for the front-end has become an increasingly easy problem to solve. Back in the nineties we had our Java applets, our `` and `` tag combinations, and those beloved `
` tags. Oh and we were mostly developing on Front Page. Anyways, time to **wean off the nostalgia**. Let's focus. 2 | -------------------------------------------------------------------------------- /2014/09-01--the-conventional-front-end/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/09-01--the-conventional-front-end/introduction.markdown: -------------------------------------------------------------------------------- 1 | When it comes to the front-end, conventions aren't as popular as I'd like. In this article we'll take a look at [`measly`][1], a conventional layer on top of `XMLHttpRequest` you can use to get started in the conventional world. 2 | 3 | [1]: https://github.com/bevacqua/measly 4 | -------------------------------------------------------------------------------- /2014/09-01--the-conventional-front-end/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-17--adjusting-ux-for-humans/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-17--adjusting-ux-for-humans/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54405c7b2db35c481f82a594", 3 | "author": "543d222f4683586910034197", 4 | "title": "Adjusting UX for human visitors", 5 | "slug": "adjusting-ux-for-humans", 6 | "tags": [ 7 | "ponyfoo", 8 | "case-study", 9 | "ux", 10 | "css" 11 | ], 12 | "heroImage": "https://i.imgur.com/mkqZ3yi.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/10-17--adjusting-ux-for-humans/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-21--critical-path-performance-optimization/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-21--critical-path-performance-optimization/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-24--measure-optimize-automate/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-24--measure-optimize-automate/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5449bdcf689a6a9d2dbd4235", 3 | "author": "543d222f4683586910034197", 4 | "title": "Measure, Optimize, Automate", 5 | "slug": "measure-optimize-automate", 6 | "tags": [ 7 | "measure", 8 | "performance", 9 | "build", 10 | "automation" 11 | ], 12 | "heroImage": "https://i.imgur.com/4MWTo62.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2014/10-24--measure-optimize-automate/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-25--free-sample-javascript-application-design/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-25--free-sample-javascript-application-design/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-25--free-sample-javascript-application-design/teaser.markdown: -------------------------------------------------------------------------------- 1 | My first book, [JavaScript Application Design][1] is in the final stretch and due to come out very soon! The code samples are finalized and [publicly available on GitHub][2]. Here's some free content in anticipation for the book launch. 2 | 3 | [1]: http://bevacqua.io/bf/book 4 | [2]: https://github.com/buildfirst/buildfirst 5 | -------------------------------------------------------------------------------- /2014/10-25--stop-breaking-the-web/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/10-25--stop-breaking-the-web/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/11-03--my-campjs-experience/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/11-03--my-campjs-experience/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54578fcdbc39e74b3969c47a", 3 | "author": "543d222f4683586910034197", 4 | "title": "My CampJS Experience", 5 | "slug": "my-campjs-experience", 6 | "tags": [ 7 | "campjs", 8 | "speaking" 9 | ], 10 | "heroImage": "https://i.imgur.com/lYz2xms.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2014/11-03--my-campjs-experience/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/11-13--stateful-regular-expressions/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/11-13--stateful-regular-expressions/introduction.markdown: -------------------------------------------------------------------------------- 1 | Apparently regular expressions with the `g` modifier are stateful. See for yourself. 2 | -------------------------------------------------------------------------------- /2014/11-13--stateful-regular-expressions/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54652383e432c4d93eb146f1", 3 | "author": "543d222f4683586910034197", 4 | "title": "Are Regular Expressions Stateful?", 5 | "slug": "stateful-regular-expressions", 6 | "tags": [ 7 | "regular-expressions" 8 | ], 9 | "heroImage": "https://i.imgur.com/sfKUWTN.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2014/11-13--stateful-regular-expressions/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/11-13--stateful-regular-expressions/teaser.markdown: -------------------------------------------------------------------------------- 1 | I seem to have stumbled across a bug regarding regular expressions using the `g` modifier, where they seem to preserve internal state across calls to `RegExp.prototype.test`. I'm looking for confirmation or a _"you're stupid, this is what is going on"_ dismissal. 2 | -------------------------------------------------------------------------------- /2014/12-12--building-stompflow/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/12-12--building-stompflow/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "548b667c925b2dd955d3fdb5", 3 | "author": "543d222f4683586910034197", 4 | "title": "I'm Building Stompflow!", 5 | "slug": "building-stompflow", 6 | "tags": [ 7 | "stompflow", 8 | "announcement", 9 | "non-technical" 10 | ], 11 | "heroImage": "https://i.imgur.com/rPeTuho.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2014/12-12--building-stompflow/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/12-12--building-stompflow/teaser.markdown: -------------------------------------------------------------------------------- 1 | Hey there! Today I have exciting news to share. We've recently started developing a prototype for a project management service called [Stompflow][1], and it has a transparent process that allows everyone to get involved. Keep reading to learn more! 2 | 3 | [1]: http://stompflow.com 4 | -------------------------------------------------------------------------------- /2014/12-30--second-year-in-review/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2014/12-30--second-year-in-review/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54a2ce3533343f3c1caa5229", 3 | "author": "543d222f4683586910034197", 4 | "title": "Second Year in Review", 5 | "slug": "second-year-in-review", 6 | "tags": [ 7 | "yearly-review", 8 | "recommended-reading" 9 | ], 10 | "heroImage": "https://i.imgur.com/jR7YLoO.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2014/12-30--second-year-in-review/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/01-08--cross-tab-communication/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/01-08--cross-tab-communication/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54ae98b1972e16f76f54b251", 3 | "author": "543d222f4683586910034197", 4 | "title": "Cross-tab Communication", 5 | "slug": "cross-tab-communication", 6 | "tags": [ 7 | "sharedworker", 8 | "localstorage" 9 | ], 10 | "heroImage": "https://i.imgur.com/nnElKtk.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/01-08--cross-tab-communication/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/01-14--baking-modularity-tag-editing/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/01-14--baking-modularity-tag-editing/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "54b6d0e5d511eb033302b491", 3 | "author": "543d222f4683586910034197", 4 | "title": "Baking Modularity into Tag Editing", 5 | "slug": "baking-modularity-tag-editing", 6 | "tags": [ 7 | "modularity", 8 | "insignia", 9 | "rome" 10 | ], 11 | "heroImage": "https://i.imgur.com/iQ01cNx.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/01-14--baking-modularity-tag-editing/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/01-14--baking-modularity-tag-editing/teaser.markdown: -------------------------------------------------------------------------------- 1 | For quite some time I've been wanting some sort of input that dealt with user-submitted tags in a reasonable way. I wanted this input to still be half-decent when JavaScript was out of the picture, so this meant starting with the basic building blocks of HTML. 2 | -------------------------------------------------------------------------------- /2015/02-06--server-first-apps/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/02-06--server-first-apps/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-07--immutable-deployments-packer/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-07--immutable-deployments-packer/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5524239f832e312c09099c98", 3 | "author": "543d222f4683586910034197", 4 | "title": "Immutable Deployments and Packer", 5 | "slug": "immutable-deployments-packer", 6 | "tags": [ 7 | "packer", 8 | "aws", 9 | "ami", 10 | "immutable-deployments" 11 | ], 12 | "heroImage": "https://i.imgur.com/oVuiNRr.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/04-07--immutable-deployments-packer/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-07--leveraging-immutable-deployments/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-07--leveraging-immutable-deployments/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-20--designing-front-end-components/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-20--designing-front-end-components/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-20--great-web-module-compendium/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-20--great-web-module-compendium/introduction.markdown: -------------------------------------------------------------------------------- 1 | I've organized the modules into a few different categories. Let me know if you find any of this to be useful! 2 | -------------------------------------------------------------------------------- /2015/04-20--great-web-module-compendium/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55347ee799926b2309d89197", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Great Web Module Compendium", 5 | "slug": "great-web-module-compendium", 6 | "tags": [ 7 | "front-end", 8 | "modularity", 9 | "javascript", 10 | "components" 11 | ], 12 | "heroImage": "https://i.imgur.com/5eRkOWj.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/04-20--great-web-module-compendium/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/04-20--great-web-module-compendium/teaser.markdown: -------------------------------------------------------------------------------- 1 | For the past few months I've developed quite the number of front-end modules. These range from UI components to utility libraries, silly games, and everything in between. I've put together this article briefly describing many of those modules in hopes that somebody puts them to good use. 2 | -------------------------------------------------------------------------------- /2015/05-26--priorities/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/05-26--priorities/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55646d133c0b973a19c64867", 3 | "author": "543d222f4683586910034197", 4 | "title": "Priorities", 5 | "slug": "priorities", 6 | "tags": [ 7 | "performance", 8 | "rant", 9 | "perfschool" 10 | ], 11 | "heroImage": "https://i.imgur.com/cglQHok.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/05-26--priorities/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-03--progressive-web/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-03--progressive-web/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55969547cd1a46310944fcdc", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Progressive Web", 5 | "slug": "progressive-web", 6 | "tags": [ 7 | "progressive-enhancement", 8 | "taunus", 9 | "server-first", 10 | "browserify" 11 | ], 12 | "heroImage": "https://i.imgur.com/qMxDa16.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/07-03--progressive-web/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-08--testing-javascript-modules-with-tape/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-08--testing-javascript-modules-with-tape/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "559d8a357b52d4ca34d066be", 3 | "author": "543d222f4683586910034197", 4 | "title": "Testing JavaScript Modules with Tape", 5 | "slug": "testing-javascript-modules-with-tape", 6 | "tags": [ 7 | "tape", 8 | "proxyquire", 9 | "sinon" 10 | ], 11 | "heroImage": "https://i.imgur.com/qqD82bP.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/07-08--testing-javascript-modules-with-tape/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-20--composable-ui/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-20--composable-ui/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55ad7201a8afa02d092e2505", 3 | "author": "543d222f4683586910034197", 4 | "title": "Composable UI", 5 | "slug": "composable-ui", 6 | "tags": [ 7 | "javascript", 8 | "composition", 9 | "modules", 10 | "architecture" 11 | ], 12 | "heroImage": "https://i.imgur.com/07HkqU4.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/07-20--composable-ui/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--maintainable-oss/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--maintainable-oss/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55b24d29e6f2e62b099d9ada", 3 | "author": "543d222f4683586910034197", 4 | "title": "Maintaining Open-Source Software", 5 | "slug": "maintainable-oss", 6 | "tags": [ 7 | "food-for-thought", 8 | "open-source", 9 | "triaging" 10 | ], 11 | "heroImage": "https://i.imgur.com/irCOgrg.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/07-24--maintainable-oss/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--readme-driven-development/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--readme-driven-development/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--semver/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-24--semver/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55b27b81ac6c592d09c5aa5e", 3 | "author": "543d222f4683586910034197", 4 | "title": "Pragmatic Semantic Versioning", 5 | "slug": "semver", 6 | "tags": [ 7 | "food-for-thought", 8 | "semver", 9 | "npm", 10 | "pragmatism" 11 | ], 12 | "heroImage": "https://i.imgur.com/BvRMxIB.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/07-24--semver/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-25--git-github-hacks/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-25--git-github-hacks/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55b2fba1b6825542095c03b9", 3 | "author": "543d222f4683586910034197", 4 | "title": "Git and GitHub Hacks", 5 | "slug": "git-github-hacks", 6 | "tags": [ 7 | "food-for-thought", 8 | "git", 9 | "github", 10 | "hacks" 11 | ], 12 | "heroImage": "https://i.imgur.com/lQTkEOu.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/07-25--git-github-hacks/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-27--leveraging-constraints/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-27--leveraging-constraints/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55b61bbd64e05030096cc582", 3 | "author": "543d222f4683586910034197", 4 | "title": "Leveraging Constraints", 5 | "slug": "leveraging-constraints", 6 | "tags": [ 7 | "food-for-thought", 8 | "constraints", 9 | "performance", 10 | "ux" 11 | ], 12 | "heroImage": "https://i.imgur.com/hhN7JqR.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/07-27--leveraging-constraints/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-28--browser-test-automation-dreams/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-28--browser-test-automation-dreams/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-29--fast-forwarding-the-web-platform/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/07-29--fast-forwarding-the-web-platform/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-02--talk-about-web-performance/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-02--talk-about-web-performance/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--fixing-web-performance/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--fixing-web-performance/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--food-for-thought-begins/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--food-for-thought-begins/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--low-budget-hosting-tips/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-03--low-budget-hosting-tips/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-04--why-i-write-plain-javascript-modules/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-04--why-i-write-plain-javascript-modules/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-17--things-you-can-do-in-plain-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-17--things-you-can-do-in-plain-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-19--polyfills-or-ponyfills/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-19--polyfills-or-ponyfills/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55d3f79f216a79db0364181c", 3 | "author": "543d222f4683586910034197", 4 | "title": "Polyfills or Ponyfills?", 5 | "slug": "polyfills-or-ponyfills", 6 | "tags": [ 7 | "food-for-thought", 8 | "polyfill", 9 | "ponyfill" 10 | ], 11 | "heroImage": "https://i.imgur.com/IEBEN86.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/08-19--polyfills-or-ponyfills/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-19--universal-react-babel/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-19--universal-react-babel/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-20--universal-routing-react-es6/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-20--universal-routing-react-es6/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-21--server-side-react-layout-and-side-effects/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-21--server-side-react-layout-and-side-effects/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-24--react-jsx-and-es6-the-weird-parts/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-24--react-jsx-and-es6-the-weird-parts/introduction.markdown: -------------------------------------------------------------------------------- 1 | ![1961 Buick "Flamingo" with rotating front seat][1] 2 | 3 | [1]: https://i.imgur.com/FKrDjJ1.jpg 4 | -------------------------------------------------------------------------------- /2015/08-24--react-jsx-and-es6-the-weird-parts/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55db8f30216a79db03641860", 3 | "author": "543d222f4683586910034197", 4 | "title": "React, JSX and ES6: The Weird Parts", 5 | "slug": "react-jsx-and-es6-the-weird-parts", 6 | "tags": [ 7 | "react", 8 | "jsx", 9 | "es6", 10 | "rant" 11 | ], 12 | "heroImage": "https://i.imgur.com/48TcoiZ.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/08-24--react-jsx-and-es6-the-weird-parts/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-25--a-brief-history-of-es6-tooling/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-25--a-brief-history-of-es6-tooling/introduction.markdown: -------------------------------------------------------------------------------- 1 | For the most part, we have Browserify, Babel, and the spec being finalized to thank for. But we didn't always have these tools and they weren't born as mature as they are today. 2 | 3 | [![Babel JavaScript Compiler][2]][1] 4 | 5 | [1]: http://babeljs.io/ 6 | [2]: https://i.imgur.com/DlNQvKS.png 7 | -------------------------------------------------------------------------------- /2015/08-25--a-brief-history-of-es6-tooling/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-25--es6-destructuring-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-25--es6-destructuring-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55dcd5fd1d234bdd03108e9b", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 JavaScript Destructuring in Depth", 5 | "slug": "es6-destructuring-in-depth", 6 | "tags": [ 7 | "es6", 8 | "destructuring", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/ITwYTC4.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/08-25--es6-destructuring-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-arrow-functions-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-arrow-functions-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55de378f1d234bdd03108eb3", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Arrow Functions in Depth", 5 | "slug": "es6-arrow-functions-in-depth", 6 | "tags": [ 7 | "es6", 8 | "arrow-functions", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/6ZlIKHj.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/08-26--es6-arrow-functions-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-spread-and-butter-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-spread-and-butter-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55de421d1d234bdd03108eb4", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Spread and Butter in Depth", 5 | "slug": "es6-spread-and-butter-in-depth", 6 | "tags": [ 7 | "es6", 8 | "spread", 9 | "rest", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/dMsez7Y.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/08-26--es6-spread-and-butter-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-template-strings-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-template-strings-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55de1d511d234bdd03108eb1", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Template Literals in Depth", 5 | "slug": "es6-template-strings-in-depth", 6 | "tags": [ 7 | "es6", 8 | "template-literals", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/2vVJy7f.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/08-26--es6-template-strings-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-26--es6-template-strings-in-depth/teaser.markdown: -------------------------------------------------------------------------------- 1 | Yesterday we've covered [ES6 destructuring in depth][1], as well as some of its most common use cases. Today we'll be moving to **template literals**. What they are, and how we can use them and what good they're for. 2 | 3 | [1]: /articles/es6-destructuring-in-depth 4 | -------------------------------------------------------------------------------- /2015/08-27--es6-object-literal-features-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-27--es6-object-literal-features-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-28--es6-classes-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-28--es6-classes-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55dfac0f1d234bdd03108ec7", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Classes in Depth", 5 | "slug": "es6-classes-in-depth", 6 | "tags": [ 7 | "es6", 8 | "classes", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/CicSWHT.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/08-28--es6-classes-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-28--es6-let-const-and-temporal-dead-zone-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-28--es6-let-const-and-temporal-dead-zone-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-31--es6-generators-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-31--es6-generators-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55e4bb78d2b5f3db03702365", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Generators in Depth", 5 | "slug": "es6-generators-in-depth", 6 | "tags": [ 7 | "es6", 8 | "generators", 9 | "iterators", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/ljoqlow.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/08-31--es6-generators-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-31--es6-iterators-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/08-31--es6-iterators-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55e47740d2b5f3db0370235a", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Iterators in Depth", 5 | "slug": "es6-iterators-in-depth", 6 | "tags": [ 7 | "es6", 8 | "iterators", 9 | "symbols", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/BAmLyNa.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/08-31--es6-iterators-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-01--es6-symbols-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-01--es6-symbols-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55e5132341243cdd03e8c234", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Symbols in Depth", 5 | "slug": "es6-symbols-in-depth", 6 | "tags": [ 7 | "es6", 8 | "symbols", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/Tv8ETja.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-01--es6-symbols-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-maps-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-maps-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55ea35929ce3f4dc037df7c6", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Maps in Depth", 5 | "slug": "es6-maps-in-depth", 6 | "tags": [ 7 | "es6", 8 | "maps", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/GLkFbqS.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-05--es6-maps-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-proxies-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-proxies-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55ea78979ce3f4dc037df7c8", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Proxies in Depth", 5 | "slug": "es6-proxies-in-depth", 6 | "tags": [ 7 | "es6", 8 | "proxies", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/AMHPqdd.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-05--es6-proxies-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-weakmaps-sets-and-weaksets-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-05--es6-weakmaps-sets-and-weaksets-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-07--es6-proxy-traps-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-07--es6-proxy-traps-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55edec3f9ce3f4dc037df7e0", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Proxy Traps in Depth", 5 | "slug": "es6-proxy-traps-in-depth", 6 | "tags": [ 7 | "es6", 8 | "proxies", 9 | "traps", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/jlyldS6.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/09-07--es6-proxy-traps-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-07--more-es6-proxy-traps-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-07--more-es6-proxy-traps-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55edf1fd9ce3f4dc037df7e3", 3 | "author": "543d222f4683586910034197", 4 | "title": "More ES6 Proxy Traps in Depth", 5 | "slug": "more-es6-proxy-traps-in-depth", 6 | "tags": [ 7 | "es6", 8 | "proxies", 9 | "traps", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/6268TXc.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/09-07--more-es6-proxy-traps-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-08--es6-reflection-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-08--es6-reflection-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55ef4e609ce3f4dc037df7ee", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Reflection in Depth", 5 | "slug": "es6-reflection-in-depth", 6 | "tags": [ 7 | "es6", 8 | "reflect", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/Th2JShl.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-08--es6-reflection-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-10--es6-number-improvements-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-10--es6-number-improvements-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55f10d739cb4c8de03b4261f", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Number Improvements in Depth", 5 | "slug": "es6-number-improvements-in-depth", 6 | "tags": [ 7 | "es6", 8 | "number", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/eAiKzbQ.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-10--es6-number-improvements-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-11--es6-array-extensions-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-11--es6-array-extensions-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55f354b79cb4c8de03b42632", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Array Extensions in Depth", 5 | "slug": "es6-array-extensions-in-depth", 6 | "tags": [ 7 | "es6", 8 | "array", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/HTNJ6Q3.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-11--es6-array-extensions-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-11--es6-math-additions-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-11--es6-math-additions-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55f28d249cb4c8de03b42627", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Math Additions in Depth", 5 | "slug": "es6-math-additions-in-depth", 6 | "tags": [ 7 | "es6", 8 | "math", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/1DKnkqn.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-11--es6-math-additions-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-12--es6-object-changes-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-12--es6-object-changes-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "55f44f749cb4c8de03b42640", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Object Changes in Depth", 5 | "slug": "es6-object-changes-in-depth", 6 | "tags": [ 7 | "es6", 8 | "object", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/4N9RguF.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-12--es6-object-changes-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-14--es6-strings-and-unicode-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-14--es6-strings-and-unicode-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-21--using-the-javascript-charting-library/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-21--using-the-javascript-charting-library/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-22--es6-modules-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-22--es6-modules-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56011139b11bb6dc03a844e3", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Modules in Depth", 5 | "slug": "es6-modules-in-depth", 6 | "tags": [ 7 | "es6", 8 | "modules", 9 | "commonjs", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/dW4ytbh.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/09-22--es6-modules-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-24--es6-promises-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-24--es6-promises-in-depth/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56044822b11bb6dc03a844fd", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Promises in Depth", 5 | "slug": "es6-promises-in-depth", 6 | "tags": [ 7 | "es6", 8 | "promise", 9 | "es6-in-depth" 10 | ], 11 | "heroImage": "https://i.imgur.com/6tpY1FW.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/09-24--es6-promises-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-29--redesign/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-29--redesign/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "560b07fe1c94a61d3c195de1", 3 | "author": "543d222f4683586910034197", 4 | "title": "Pony Foo Gets a Face Lift", 5 | "slug": "redesign", 6 | "tags": [ 7 | "ponyfoo", 8 | "redesign", 9 | "rainbows", 10 | "performance" 11 | ], 12 | "heroImage": "https://i.imgur.com/0TZvZP4.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/09-29--redesign/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-29--redesign/teaser.markdown: -------------------------------------------------------------------------------- 1 | Pony Foo's design remained largely the same throughout its [history](/articles/history "Repository of articles published on Pony Foo") so far, as I never really spent a lot of time on its design. Today I'm thrilled to announce that I've redesigned Pony Foo. I couldn't be any more excited about how cheerful and colorful the site now is. 2 | -------------------------------------------------------------------------------- /2015/09-30--weirdest-bug-ever/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/09-30--weirdest-bug-ever/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "560c521d7e2115db0320a999", 3 | "author": "543d222f4683586910034197", 4 | "title": "SVG and the DOM, or \"The Weirdest Bug I've Ever Encountered\"", 5 | "slug": "weirdest-bug-ever", 6 | "tags": [ 7 | "svg", 8 | "bug" 9 | ], 10 | "heroImage": "https://i.imgur.com/V812QXi.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/09-30--weirdest-bug-ever/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-02--inlining-critical-css/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-02--inlining-critical-css/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "560ec16c52d8a3dd03a94963", 3 | "author": "543d222f4683586910034197", 4 | "title": "Inlining Critical CSS for Dynamic Web Apps", 5 | "slug": "inlining-critical-css", 6 | "tags": [ 7 | "performance", 8 | "penthouse", 9 | "critical-css", 10 | "bash" 11 | ], 12 | "heroImage": "https://i.imgur.com/1aLH31K.png" 13 | } 14 | -------------------------------------------------------------------------------- /2015/10-02--inlining-critical-css/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-08--immutable-npm-dependencies/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-08--immutable-npm-dependencies/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5616f25f5f4134d9034bd35e", 3 | "author": "543d222f4683586910034197", 4 | "title": "Keeping Your npm Dependencies Immutable", 5 | "slug": "immutable-npm-dependencies", 6 | "tags": [ 7 | "semver", 8 | "immutability", 9 | "npm" 10 | ], 11 | "heroImage": "https://i.imgur.com/VxABgaq.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2015/10-08--immutable-npm-dependencies/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-08--immutable-npm-dependencies/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've been bitten a few times by dependencies using semver ranges such as `^1.0.1` where the dependency introduced a "non-breaking" change that ended up actually breaking somewhere in the dependency chain because an undocumented feature was being used, a workaround stopped working, and similar undesirable situations. 2 | -------------------------------------------------------------------------------- /2015/10-09--all-aboard-the-es6-javascript-train/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-09--all-aboard-the-es6-javascript-train/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56182d034407cadd03bec7f0", 3 | "author": "543d222f4683586910034197", 4 | "title": "All Aboard the ES6 JavaScript Train", 5 | "slug": "all-aboard-the-es6-javascript-train", 6 | "tags": [ 7 | "es6", 8 | "tutorial" 9 | ], 10 | "heroImage": "https://i.imgur.com/QWCsOQC.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/10-09--all-aboard-the-es6-javascript-train/summary.markdown: -------------------------------------------------------------------------------- 1 | The sixth ECMAScript specification has been **finalized last june**, and there's a flurry of JavaScript features coming our way. 2 | 3 | I'll be covering the most exciting new features. 4 | -------------------------------------------------------------------------------- /2015/10-12--es6/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-12--es6/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "561c00557dc61adc03c76518", 3 | "author": "543d222f4683586910034197", 4 | "title": "ES6 Overview in 350 Bullet Points", 5 | "slug": "es6", 6 | "tags": [ 7 | "es6", 8 | "javascript", 9 | "babel", 10 | "es6-in-depth" 11 | ], 12 | "heroImage": "https://i.imgur.com/EtMSvOX.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2015/10-12--es6/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-12--securing-your-web-app-in-3-easy-steps/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-12--securing-your-web-app-in-3-easy-steps/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-12--securing-your-web-app-in-3-easy-steps/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've recently upgraded Pony Foo to use the `https` protocol, something I've been meaning to do for a while. It's super easy to do so, and here's a few simple steps you can take to secure your own apps. The procedure is quite agnostic when it comes to your hosting stack, and you should definitely implement `https` on your own services as well! 2 | -------------------------------------------------------------------------------- /2015/10-21--serviceworker-revolution/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-21--serviceworker-revolution/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "562704ef6bc466de03d9e42f", 3 | "author": "543d222f4683586910034197", 4 | "title": "ServiceWorker: Revolution of the Web Platform", 5 | "slug": "serviceworker-revolution", 6 | "tags": [ 7 | "serviceworker", 8 | "offline-first" 9 | ], 10 | "heroImage": "https://i.imgur.com/QZfzKXN.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/10-21--serviceworker-revolution/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-26--subscribing-to-pony-foo/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-26--subscribing-to-pony-foo/introduction.markdown: -------------------------------------------------------------------------------- 1 | Almost since [day one](/articles/first "Pony Foo Begins") you could follow Pony Foo using the [RSS feed](/articles/feed). Now there's quite a few more options. I'd love to know what's your favorite and also maybe help me make your reading experience better. 2 | -------------------------------------------------------------------------------- /2015/10-26--subscribing-to-pony-foo/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "562eba8db3ad6cdd0345e3db", 3 | "author": "543d222f4683586910034197", 4 | "title": "Subscribing to Pony Foo", 5 | "slug": "subscribing-to-pony-foo", 6 | "tags": [ 7 | "ponyfoo" 8 | ], 9 | "heroImage": "https://i.imgur.com/79QDfRl.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2015/10-26--subscribing-to-pony-foo/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-26--subscribing-to-pony-foo/teaser.markdown: -------------------------------------------------------------------------------- 1 | There's a few different ways you can subscribe to read Pony Foo. What's your favorite? 2 | -------------------------------------------------------------------------------- /2015/10-28--progressive-networking-serviceworker/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-28--progressive-networking-serviceworker/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-29--serviceworker-messagechannel-postmessage/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/10-29--serviceworker-messagechannel-postmessage/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-02--simple-offline-site-serviceworker/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-02--simple-offline-site-serviceworker/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5637c479671e908e212f55db", 3 | "author": "543d222f4683586910034197", 4 | "title": "Making a Simple Site Work Offline with ServiceWorker", 5 | "slug": "simple-offline-site-serviceworker", 6 | "tags": [ 7 | "serviceworker", 8 | "tutorial" 9 | ], 10 | "heroImage": "https://i.imgur.com/CHX3int.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/11-02--simple-offline-site-serviceworker/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-13--progressive-app-serviceworker/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-13--progressive-app-serviceworker/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-27--javascript-developer-survey/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-27--javascript-developer-survey/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5658b41ff0158b130d8b0d5b", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Developer Survey", 5 | "slug": "javascript-developer-survey", 6 | "tags": [ 7 | "survey" 8 | ], 9 | "heroImage": "https://i.imgur.com/hcRKeXF.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2015/11-27--javascript-developer-survey/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/11-27--javascript-developer-survey/teaser.markdown: -------------------------------------------------------------------------------- 1 | Following the footsteps of [Alex R. Young][1] and his retired [dailyjs.com][2] blog, I've put together a survey about JavaScript usage similar to those he used to host on his blog. I'll be publishing the results in three weeks. 2 | 3 | [1]: https://twitter.com/alex_young "@alex_young on Twitter" 4 | [2]: http://dailyjs.com/ 5 | -------------------------------------------------------------------------------- /2015/12-10--javascript-developer-survey-results/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/12-10--javascript-developer-survey-results/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5669f8a9bb780c0b3855efa3", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Developer Survey Results", 5 | "slug": "javascript-developer-survey-results", 6 | "tags": [ 7 | "survey", 8 | "survey-results" 9 | ], 10 | "heroImage": "https://i.imgur.com/SbBlQAP.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2015/12-10--javascript-developer-survey-results/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/12-10--javascript-developer-survey-results/teaser.markdown: -------------------------------------------------------------------------------- 1 | The end of year is drawing close and the JavaScript Developer Survey has now ended. The survey received an unimagined amount of replies and I'm excited to share the results with you! 2 | -------------------------------------------------------------------------------- /2015/12-18--third-year-in-review/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/12-18--third-year-in-review/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56743fe641fdb12a03c8c06d", 3 | "author": "543d222f4683586910034197", 4 | "title": "Third Year in Review", 5 | "slug": "third-year-in-review", 6 | "tags": [ 7 | "yearly-review" 8 | ], 9 | "heroImage": "https://i.imgur.com/UYdqIFW.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2015/12-18--third-year-in-review/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2015/12-18--third-year-in-review/teaser.markdown: -------------------------------------------------------------------------------- 1 | In what has now become [somewhat of a tradition][1] for me, I'm looking back on the past year and digging up stats about the blog and my career. _This was definitely an interesting year in Pony Foo's history!_ 2 | 3 | [1]: /articles/tagged/yearly-review "Articles tagged yearly-review on Pony Foo" 4 | -------------------------------------------------------------------------------- /2016/01-11--asynchronous-i-o-with-generators-and-promises/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-11--asynchronous-i-o-with-generators-and-promises/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-11--asynchronous-i-o-with-generators-and-promises/teaser.markdown: -------------------------------------------------------------------------------- 1 | The article covers designing a JavaScript API to deal with **asynchronous data inputs and outputs** using generators to _succinctly_ describe a set of operations. Promises can also be used to *chain* other operations after the output has been registered. 2 | -------------------------------------------------------------------------------- /2016/01-21--controversial-state-of-javascript-tooling/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-21--controversial-state-of-javascript-tooling/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-30--es2016-features-and-ecmascript-as-a-living-standard/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-30--es2016-features-and-ecmascript-as-a-living-standard/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/01-30--es2016-features-and-ecmascript-as-a-living-standard/teaser.markdown: -------------------------------------------------------------------------------- 1 | As it turns out, ES2016 _-- also known colloquially as ES7 --_ will be comprised of a very small feature set. This article explains the new features in ES2016. 2 | -------------------------------------------------------------------------------- /2016/02-02--understanding-javascript-async-await/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-02--understanding-javascript-async-await/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-02--understanding-javascript-async-await/teaser.markdown: -------------------------------------------------------------------------------- 1 | Earlier this week we took a look at new [features coming in ES2016][1]. Today we'll learn about `async` / `await`. 2 | 3 | [1]: /articles/es2016-features-and-ecmascript-as-a-living-standard "ES2016 Features & ECMAScript as a Living Standard" 4 | -------------------------------------------------------------------------------- /2016/02-09--ecmascript-string-padding/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-09--ecmascript-string-padding/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56b95ea20bb3db2a03895329", 3 | "author": "543d222f4683586910034197", 4 | "title": "ECMAScript String Padding", 5 | "slug": "ecmascript-string-padding", 6 | "tags": [ 7 | "ecmascript", 8 | "string", 9 | "proposal-draft" 10 | ], 11 | "heroImage": "https://i.imgur.com/Yvj8d8E.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/02-09--ecmascript-string-padding/summary.markdown: -------------------------------------------------------------------------------- 1 | A first look into `.padStart` and `.padEnd` string methods drafted as proposals for implementation in ECMAScript. 2 | -------------------------------------------------------------------------------- /2016/02-09--ecmascript-string-padding/teaser.markdown: -------------------------------------------------------------------------------- 1 | A string padding proposal for ECMAScript is [at stage 3][1]. Let's dig into what it entails. 2 | 3 | [1]: https://github.com/tc39/ecma262 "tc39/ecma262 on GitHub" 4 | -------------------------------------------------------------------------------- /2016/02-13--proposal-draft-for-flatten-and-flatmap/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-13--proposal-draft-for-flatten-and-flatmap/summary.markdown: -------------------------------------------------------------------------------- 1 | `Array` prototype may be getting `.flatten` and `.flatMap` methods may be coming to ECMAScript in a distant future. This article describes what the proposal holds in store. 2 | -------------------------------------------------------------------------------- /2016/02-13--proposal-draft-for-flatten-and-flatmap/teaser.markdown: -------------------------------------------------------------------------------- 1 | `Array` prototype may be getting `.flatten` and `.flatMap` methods may be coming to ECMAScript in a distant future. This article describes what the proposal holds in store. 2 | -------------------------------------------------------------------------------- /2016/02-15--proposal-statements-as-expressions-using-do/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-15--proposal-statements-as-expressions-using-do/summary.markdown: -------------------------------------------------------------------------------- 1 | A proposal for `do` statements has been classified as **Stage 0** for a while, and it might be an interesting solution for some problems we can find in JavaScript. 2 | -------------------------------------------------------------------------------- /2016/02-15--proposal-statements-as-expressions-using-do/teaser.markdown: -------------------------------------------------------------------------------- 1 | A proposal for `do` statements has been classified as **Stage 0** for a while, and it might be an interesting solution for some problems we can find in JavaScript. 2 | -------------------------------------------------------------------------------- /2016/02-17--weakref/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/02-17--weakref/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56c3e46da93bea2603f9bd6b", 3 | "author": "543d222f4683586910034197", 4 | "title": "JavaScript Proposal for weak references: `WeakRef`", 5 | "slug": "weakref", 6 | "tags": [ 7 | "ecmascript", 8 | "weakref", 9 | "proposal-draft" 10 | ], 11 | "heroImage": "https://i.imgur.com/gaku2qj.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/02-17--weakref/summary.markdown: -------------------------------------------------------------------------------- 1 | A proposal to implement weak references in JavaScript _-- which would expose weak references made possible by [`WeakMap` and `WeakSet`][1] --_ is currently sitting at _stage 0_. 2 | 3 | [1]: /articles/es6-weakmaps-sets-and-weaksets-in-depth "ES6 WeakMaps, Sets, and WeakSets in Depth" 4 | -------------------------------------------------------------------------------- /2016/02-17--weakref/teaser.markdown: -------------------------------------------------------------------------------- 1 | A proposal to implement weak references in JavaScript _-- which would expose weak references made possible by [`WeakMap` and `WeakSet`][1] --_ is currently sitting at _stage 0_. 2 | 3 | [1]: /articles/es6-weakmaps-sets-and-weaksets-in-depth "ES6 WeakMaps, Sets, and WeakSets in Depth" 4 | -------------------------------------------------------------------------------- /2016/03-17--javascript-decorators-proposal/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/03-17--javascript-decorators-proposal/summary.markdown: -------------------------------------------------------------------------------- 1 | There's a JavaScript decorators proposal in the works. 2 | We take a look at how it works and why it's useful. 3 | -------------------------------------------------------------------------------- /2016/03-17--javascript-decorators-proposal/teaser.markdown: -------------------------------------------------------------------------------- 1 | Decorators are, as most things programming, definitely *not a new concept*. That being said, they may be coming to JavaScript. There's a JavaScript decorators proposal in the works. It is currently sitting at stage 1 of the ECMASCript process, but may soon advance to stage 2. We take a look at how it works and why it's useful. 2 | -------------------------------------------------------------------------------- /2016/03-24--npm-meltdown-security-concerns/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/03-24--npm-meltdown-security-concerns/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56f44e6806dedd29034d3ad5", 3 | "author": "543d222f4683586910034197", 4 | "title": "The `npm` Meltdown Uncovers Serious Security Risks", 5 | "slug": "npm-meltdown-security-concerns", 6 | "tags": [ 7 | "npm" 8 | ], 9 | "heroImage": "https://i.imgur.com/MW4oAaz.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2016/03-24--npm-meltdown-security-concerns/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/03-29--github-for-human-beings/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/03-29--github-for-human-beings/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "56fad2e31b94242903758d96", 3 | "author": "543d222f4683586910034197", 4 | "title": "GitHub for Human Beings 🕵", 5 | "slug": "github-for-human-beings", 6 | "tags": [ 7 | "github", 8 | "tips" 9 | ], 10 | "heroImage": "https://i.imgur.com/5EA3byF.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/03-29--github-for-human-beings/summary.markdown: -------------------------------------------------------------------------------- 1 | GitHub _-- and GitHub users --_ can be kind of annoying sometimes. Here are a few tips to improve your day-to-day experience. 2 | -------------------------------------------------------------------------------- /2016/03-29--github-for-human-beings/teaser.markdown: -------------------------------------------------------------------------------- 1 | GitHub _-- and GitHub users --_ can be kind of annoying sometimes. Here are a few tips to improve your day-to-day experience. 2 | -------------------------------------------------------------------------------- /2016/04-08--nodeconf-hits-the-ground-running-in-latin-america/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/04-08--nodeconf-hits-the-ground-running-in-latin-america/introduction.markdown: -------------------------------------------------------------------------------- 1 | We've been working hard to bring NodeConf to latin america and we're super excited to announce the first-ever [NodeConf Argentina 2016][home]. 2 | 3 | [![A jacaranda tree][jacaranda]][home] 4 | 5 | [home]: https://2016.nodeconf.com.ar/ "NodeConf Argentina Website" 6 | [jacaranda]: https://i.imgur.com/N2zPQ2q.jpg 7 | -------------------------------------------------------------------------------- /2016/04-08--nodeconf-hits-the-ground-running-in-latin-america/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/04-08--nodeconf-hits-the-ground-running-in-latin-america/teaser.markdown: -------------------------------------------------------------------------------- 1 | NodeConf Argentina is one of the first international Node.js conferences taking place in Latin American territory, and a not-for-profit community effort to push Node.js forward in Argentina and Latin America as a whole. 2 | -------------------------------------------------------------------------------- /2016/04-19--just-married/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/04-19--just-married/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "571637c359d25421030a3921", 3 | "author": "543d222f4683586910034197", 4 | "title": "Just Married! 🎉", 5 | "slug": "just-married", 6 | "tags": [ 7 | "ponyfoo" 8 | ], 9 | "heroImage": "https://i.imgur.com/WHZGRXu.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2016/04-19--just-married/summary.markdown: -------------------------------------------------------------------------------- 1 | I got married last friday, and then we threw a party on saturday. 2 | 3 | I wanted to extend the celebration a little bit longer by sharing a few pictures on my blog. 4 | -------------------------------------------------------------------------------- /2016/04-19--just-married/teaser.markdown: -------------------------------------------------------------------------------- 1 | I got married last friday, and then we threw a party on saturday. I wanted to extend the celebration a little bit longer by sharing a few pictures on my blog, so here we are. 2 | -------------------------------------------------------------------------------- /2016/05-31--setting-up-elasticsearch-for-a-blog/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/05-31--setting-up-elasticsearch-for-a-blog/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "574cfbbcaf5a7c41030c76b3", 3 | "author": "543d222f4683586910034197", 4 | "title": "Setting Up Elasticsearch for a Blog", 5 | "slug": "setting-up-elasticsearch-for-a-blog", 6 | "tags": [ 7 | "ponyfoo", 8 | "elastic", 9 | "elasticsearch" 10 | ], 11 | "heroImage": "https://i.imgur.com/ytDmMbK.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/05-31--setting-up-elasticsearch-for-a-blog/summary.markdown: -------------------------------------------------------------------------------- 1 | I've been experimenting with `elasticsearch` _-- and working at the company behind it for a while --_ so it only made sense to incorporate it as Pony Foo's search provider. 2 | -------------------------------------------------------------------------------- /2016/05-31--setting-up-elasticsearch-for-a-blog/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've been experimenting with `elasticsearch` -- and working at the company behind it for a while -- so it only made sense to incorporate it as Pony Foo's search provider. 2 | -------------------------------------------------------------------------------- /2016/06-07--an-elastic-stack-primer/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/06-07--an-elastic-stack-primer/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57573af8687d1d7f0300b2b5", 3 | "author": "543d222f4683586910034197", 4 | "title": "An Elastic Stack Primer", 5 | "slug": "an-elastic-stack-primer", 6 | "tags": [ 7 | "elasticsearch", 8 | "logstash", 9 | "kibana" 10 | ], 11 | "heroImage": "https://i.imgur.com/Ej7olDZ.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/06-07--an-elastic-stack-primer/summary.markdown: -------------------------------------------------------------------------------- 1 | This article describes my adventures while getting initiated into the Elastic Stack. We'll be building upon the `elasticsearch` index I've set up for search in an earlier post. 2 | -------------------------------------------------------------------------------- /2016/06-14--promise-worldview/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/06-14--promise-worldview/introduction.markdown: -------------------------------------------------------------------------------- 1 | > *Just a thought.* 2 | 3 | What was once considered a mistake by many -- inclusion of `Promise` as a native language API -- is now seeing increasingly high rates of adoption. I'd say there's three reasons for this. 4 | -------------------------------------------------------------------------------- /2016/06-14--promise-worldview/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "576021a0918b2ee90d402e9a", 3 | "author": "543d222f4683586910034197", 4 | "title": "A Promise-Based Worldview", 5 | "slug": "promise-worldview", 6 | "tags": [ 7 | "es6", 8 | "promise", 9 | "async-await", 10 | "food-for-thought" 11 | ], 12 | "heroImage": "https://i.imgur.com/lrg9mQr.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2016/06-14--promise-worldview/summary.markdown: -------------------------------------------------------------------------------- 1 | Once the Node.js developer's victim of choice, `Promise` now enjoys healthy adoption on both sides of the stack, with prominent open-source contributors like [@sindresorhus][sindre] visibly leveraging them. 2 | *What's changed?* 3 | 4 | [sindre]: https://github.com/sindresorhus 5 | -------------------------------------------------------------------------------- /2016/06-14--promise-worldview/teaser.markdown: -------------------------------------------------------------------------------- 1 | Once the Node.js developer's victim of choice, `Promise` now enjoys healthy adoption on both sides of the stack, with prominent open-source contributors like [@sindresorhus][sindre] visibly leveraging them. 2 | *What's changed?* 3 | 4 | [sindre]: https://github.com/sindresorhus 5 | -------------------------------------------------------------------------------- /2016/06-23--double-edged-sword-web/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/06-23--double-edged-sword-web/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "576b34172de3831b0cdda1c7", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Double-Edged Sword of the Web", 5 | "slug": "double-edged-sword-web", 6 | "tags": [ 7 | "opinion", 8 | "web", 9 | "state-of-the-web", 10 | "bugs" 11 | ], 12 | "heroImage": "https://i.imgur.com/9yBxDU3.jpg" 13 | } 14 | -------------------------------------------------------------------------------- /2016/06-23--double-edged-sword-web/summary.markdown: -------------------------------------------------------------------------------- 1 | A couple of weeks ago I had some time in my hands and decided to fix cross-browser rendering issues for Pony Foo. The ensuing bug hunt was a good reminder of just how obnoxious web development can get. 2 | -------------------------------------------------------------------------------- /2016/07-02--most-over-engineered-blog-ever/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/07-02--most-over-engineered-blog-ever/summary.markdown: -------------------------------------------------------------------------------- 1 | With almost 3000 [commits][git] on record, I'm pretty sure that Pony Foo is one of the most, *if not the most*, over-engineered blogs ever. This article goes over how it all began as a learning experience... 2 | 3 | [git]: https://github.com/ponyfoo/ponyfoo "ponyfoo/ponyfoo on GitHub" 4 | -------------------------------------------------------------------------------- /2016/07-12--backgroundsync/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "578510092e5faa81036fcdd5", 3 | "author": "57850f072e5faa81036fcdd4", 4 | "title": "ServiceWorker: A Basic Guide to BackgroundSync", 5 | "slug": "backgroundsync", 6 | "tags": [ 7 | "serviceworker", 8 | "offline", 9 | "backgroundsync" 10 | ], 11 | "heroImage": "https://i.imgur.com/I51DTgu.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/07-12--backgroundsync/summary.markdown: -------------------------------------------------------------------------------- 1 | A simple guide to getting up and running using Background Sync and Service Workers. Background Sync is a new web API that lets you defer actions until the user has stable connectivity. This makes it great for ensuring that whatever the user wants to send, is actually sent. 2 | -------------------------------------------------------------------------------- /2016/07-12--backgroundsync/teaser.markdown: -------------------------------------------------------------------------------- 1 | Picture the scene. You're using your mobile device to browse a website and book some important concert tickets. You've have been eagerly awaiting this concert for months. You get right through to the checkout screen, enter your card details and hit submit. And then your flaky 3G connection drops. Screaming and pain ensues! 2 | -------------------------------------------------------------------------------- /2016/07-27--art-of-pull-request/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/07-27--art-of-pull-request/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57992441f8eaeb88039bac2e", 3 | "author": "543d222f4683586910034197", 4 | "title": "The Art of a Pull Request", 5 | "slug": "art-of-pull-request", 6 | "tags": [ 7 | "open-source", 8 | "code-review" 9 | ], 10 | "heroImage": "https://i.imgur.com/6UHgyZj.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/07-27--art-of-pull-request/summary.markdown: -------------------------------------------------------------------------------- 1 | Writing a great Pull Request takes *time*. It can be *a scary proposition* going in. Did I **implement something relevant**? Will they *like* my changes? Will the PR meet their *expectations*? How much *scrutiny* can I expect? 2 | -------------------------------------------------------------------------------- /2016/07-27--art-of-pull-request/teaser.markdown: -------------------------------------------------------------------------------- 1 | Writing a great Pull Request takes *time*. It can be *a scary proposition* going in. Did I **implement something relevant**? Will they *like* my changes? Will the PR meet their *expectations*? How much *scrutiny* can I expect? 2 | -------------------------------------------------------------------------------- /2016/08-10--json-web-tokens-vs-session-cookies/summary.markdown: -------------------------------------------------------------------------------- 1 | Quite a few challenges have been found with using server-side sessions in modern-day applications. In this post, we’ll identify those challenges and explain how JWT and sessions work in practice. 2 | -------------------------------------------------------------------------------- /2016/08-10--json-web-tokens-vs-session-cookies/teaser.markdown: -------------------------------------------------------------------------------- 1 | **TL;DR** Many modern web applications use JSON Web Tokens (JWT), rather than the traditional session-based authentication. Quite a few challenges have been found with using server-side sessions in modern-day applications. In this post, we’ll identify those challenges and explain how JWT and sessions work in practice. 2 | -------------------------------------------------------------------------------- /2016/08-14--two-way-synchronization-for-a-web-app-and-git/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/08-14--two-way-synchronization-for-a-web-app-and-git/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57afd3a4dca57c960331e375", 3 | "author": "543d222f4683586910034197", 4 | "title": "Two-way Synchronization for a Web App and Git", 5 | "slug": "two-way-synchronization-for-a-web-app-and-git", 6 | "tags": [ 7 | "git", 8 | "webhooks" 9 | ], 10 | "heroImage": "https://i.imgur.com/P426mA0.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/08-14--two-way-synchronization-for-a-web-app-and-git/summary.markdown: -------------------------------------------------------------------------------- 1 | This article explains the challenges I went through and how I ended up implementing a two-way synchronization between the web application and a git repository for the articles. 2 | -------------------------------------------------------------------------------- /2016/08-24--binding-methods-to-class-instance-objects/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/08-24--binding-methods-to-class-instance-objects/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/08-24--binding-methods-to-class-instance-objects/teaser.markdown: -------------------------------------------------------------------------------- 1 | There's a number of different ways we can ensure class methods have access to `this`. After some controversy on Twitter last week, we quickly go over the most common approaches, discussing their advantages and drawbacks. 2 | -------------------------------------------------------------------------------- /2016/08-30--web-audio-art/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | Suz is always showing off cool hacks at conferences. I asked her to write about one of her most recent talks _-- The Formulartic Spectrum --_ which really inspired me. You can [watch her presentation at JSConf Budapest][yt] to catch a glimpse. Otherwise, save it for later and read on! 2 | 3 | [yt]: https://www.youtube.com/watch?v=P8Cy2_ZHWI8 4 | -------------------------------------------------------------------------------- /2016/08-30--web-audio-art/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57c4fb21c8db167e03f572d3", 3 | "author": "574c6df75066658af5822991", 4 | "title": "What Does a Sound Look Like? Web Audio Art!", 5 | "slug": "web-audio-art", 6 | "tags": [ 7 | "art", 8 | "web-audio", 9 | "hacks" 10 | ], 11 | "heroImage": "https://i.imgur.com/mOWCPDZ.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/08-30--web-audio-art/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/08-30--web-audio-art/teaser.markdown: -------------------------------------------------------------------------------- 1 | The [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API) is a very powerful feature available in modern browsers today, boasting a rich set of functionality. In this exploration, we'll be looking at ways to analyse audio data and produce some visual output, ranging from the rudimentary to the ridiculous. Let's get started! 2 | -------------------------------------------------------------------------------- /2016/09-01--announcing-practical-es6-and-modular-javascript-series/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-05--template-literals-strictly-better-strings/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-05--template-literals-strictly-better-strings/summary.markdown: -------------------------------------------------------------------------------- 1 | This article explores how template literals are strictly better than strings, and how they too should become the new default of a post-ES6 era _-- over single and double quoted strings._ 2 | -------------------------------------------------------------------------------- /2016/09-13--fixing-xss-vulnerability-marked/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57d88f3b5f97ef79030cedd1", 3 | "author": "57c489e5a59fe39a03ca40de", 4 | "title": "Fixing an XSS vulnerability in `marked`", 5 | "slug": "fixing-xss-vulnerability-marked", 6 | "tags": [ 7 | "xss", 8 | "security" 9 | ], 10 | "heroImage": "https://i.imgur.com/zuz2xYx.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/09-13--fixing-xss-vulnerability-marked/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-15--how-i-got-into-programming/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-15--how-i-got-into-programming/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "57db12d4f323f984032fba70", 3 | "author": "543d222f4683586910034197", 4 | "title": "How I Got Into Programming", 5 | "slug": "how-i-got-into-programming", 6 | "tags": [ 7 | "career", 8 | "ponyfoo" 9 | ], 10 | "heroImage": "https://i.imgur.com/4a1MUXQ.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/09-15--how-i-got-into-programming/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-15--how-i-got-into-programming/teaser.markdown: -------------------------------------------------------------------------------- 1 | Roughly half of this story *first appeared* on the preface to my first book, [JavaScript Application Design][jsad], but I've always felt that the story also belonged on Pony Foo. Hence this blog post _-- where I fleshed out the story quite a bit!_ 2 | 3 | [jsad]: /books/javascript-application-design "JavaScript Application Design: A Build-First Approach" 4 | -------------------------------------------------------------------------------- /2016/09-17--javascript-asynchronous-iteration-proposal/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-17--javascript-asynchronous-iteration-proposal/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/09-17--javascript-asynchronous-iteration-proposal/teaser.markdown: -------------------------------------------------------------------------------- 1 | There's a proposal in the works to simplify asynchronous iteration even further. 2 | -------------------------------------------------------------------------------- /2016/10-18--modular-javascript-launches-soon/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/10-18--modular-javascript-launches-soon/summary.markdown: -------------------------------------------------------------------------------- 1 | Modular JavaScript is an open effort to improve our collective understanding of writing robust, well-tested & modular applications. *It is launching very soon.* 2 | -------------------------------------------------------------------------------- /2016/11-07--making-time-for-side-projects/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "581fe292d3c7af7e0378a231", 3 | "author": "581fdd86d3c7af7e0378a229", 4 | "title": "Making Time for Side Projects: A Daily Habit", 5 | "slug": "making-time-for-side-projects", 6 | "tags": [ 7 | "side-projects" 8 | ], 9 | "heroImage": "https://i.imgur.com/fFN8WA5.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2016/11-07--making-time-for-side-projects/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/11-07--making-time-for-side-projects/teaser.markdown: -------------------------------------------------------------------------------- 1 | With so many other commitments to deal with, it can be hard to find time to work on side projects. In this article, I discuss the need for carving out a chunk of time to get work done – each and every day. 2 | -------------------------------------------------------------------------------- /2016/12-05--color-coded-visualizations-react/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/12-05--color-coded-visualizations-react/summary.markdown: -------------------------------------------------------------------------------- 1 | For the past few days I've been working on a data visualization that displays Elasticsearch node distribution across different cloud instances and zones. 2 | -------------------------------------------------------------------------------- /2016/12-05--color-coded-visualizations-react/teaser.markdown: -------------------------------------------------------------------------------- 1 | For the past few days I've been working on a data visualization that displays Elasticsearch node distribution across different cloud instances and zones. This article shows off the visualization, the color generation script, an interesting performance issue, and the solution I arrived at. 2 | -------------------------------------------------------------------------------- /2016/12-21--fourth-year-in-review/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/12-21--fourth-year-in-review/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "585b112ebd4e617e032221fd", 3 | "author": "543d222f4683586910034197", 4 | "title": "Fourth Year in Review", 5 | "slug": "fourth-year-in-review", 6 | "tags": [ 7 | "yearly-review", 8 | "recommended-reading" 9 | ], 10 | "heroImage": "https://i.imgur.com/OVAqD5b.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2016/12-21--fourth-year-in-review/summary.markdown: -------------------------------------------------------------------------------- 1 | Another year, another review of how Pony Foo did in its latest twelve months online! 2 | -------------------------------------------------------------------------------- /2016/12-21--fourth-year-in-review/teaser.markdown: -------------------------------------------------------------------------------- 1 | Another year, another review of how Pony Foo did in its latest twelve months online! 2 | -------------------------------------------------------------------------------- /2016/12-22--terrible-code-sane-people/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/12-22--terrible-code-sane-people/introduction.markdown: -------------------------------------------------------------------------------- 1 | Make your software development flow naturally by helping your team avoid some bad habits that can drive good teams to write terrible code. 2 | -------------------------------------------------------------------------------- /2016/12-22--terrible-code-sane-people/summary.markdown: -------------------------------------------------------------------------------- 1 | Help your team avoid some bad habits that can drive good teams to write terrible code. 2 | -------------------------------------------------------------------------------- /2016/12-22--terrible-code-sane-people/teaser.markdown: -------------------------------------------------------------------------------- 1 | When I found out I would be working on porting an old Python codebase to Node, I was slightly excited. These kinds of projects always give you more creative freedom than the ordinary code maintenance gig, and something about the challenge of rewriting other people's code makes it fun as hell. 2 | -------------------------------------------------------------------------------- /2016/12-28--var-let-const/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2016/12-28--var-let-const/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5864240d8a4d7b8603eb6abe", 3 | "author": "543d222f4683586910034197", 4 | "title": "Let's use `const`! Here's why.", 5 | "slug": "var-let-const", 6 | "tags": [ 7 | "const", 8 | "es6", 9 | "best-practices" 10 | ], 11 | "heroImage": "https://i.imgur.com/URl6zyr.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2016/12-28--var-let-const/summary.markdown: -------------------------------------------------------------------------------- 1 | When reading a piece of code, others can take cues from these signals in order to better understand what we did. ES6 offers `let` and `const` as new flavors of variable declaration, are they better signals than `var`? 2 | -------------------------------------------------------------------------------- /2017/01-18--standard/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/01-18--standard/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "587f6ba2215f6d032d6aff2b", 3 | "author": "543d222f4683586910034197", 4 | "title": "The JavaScript Standard", 5 | "slug": "standard", 6 | "tags": [ 7 | "ecmascript", 8 | "history-lesson", 9 | "standards" 10 | ], 11 | "heroImage": "https://i.imgur.com/J2MHHUM.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2017/01-18--standard/summary.markdown: -------------------------------------------------------------------------------- 1 | JavaScript has gone from being a marketing ploy to gain a tactical advantage, to becoming the core programming experience in the world’s most widely used application runtime platform. *Where to, next?* 2 | -------------------------------------------------------------------------------- /2017/01-26--setting-up-angular-2-development-environment/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/02-03--content-security-policy-in-express-apps/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/02-03--content-security-policy-in-express-apps/summary.markdown: -------------------------------------------------------------------------------- 1 | The `Content-Security-Policy` header is a bit frightening --- will I break my website if I suddenly start blocking requests for external resources? In this article we go over a gradual approach to adopting CSP. 🔐 2 | -------------------------------------------------------------------------------- /2017/02-03--content-security-policy-in-express-apps/teaser.markdown: -------------------------------------------------------------------------------- 1 | The `Content-Security-Policy` header is a bit frightening --- will I break my website if I suddenly start blocking requests for external resources 😰? In this article we go over a gradual approach to adopting CSP, so that you can mitigate the risk of breaking your website while trying to make it more secure. 🔐 2 | -------------------------------------------------------------------------------- /2017/02-18--const-variables-not-immutable/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/02-18--const-variables-not-immutable/introduction.markdown: -------------------------------------------------------------------------------- 1 | The following example shows that even though the `people` reference couldn't be changed, the array itself can indeed be modified. If the array were immutable, this wouldn't be possible. 2 | 3 | ```js 4 | const people = ['Tesla', 'Musk'] 5 | people.push('Berners-Lee') 6 | console.log(people) 7 | // <- ['Tesla', 'Musk', 'Berners-Lee'] 8 | ``` 9 | -------------------------------------------------------------------------------- /2017/02-18--const-variables-not-immutable/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "58a7d18dbac0700328aeea2e", 3 | "author": "543d222f4683586910034197", 4 | "title": "Variables declared using `const` are not immutable", 5 | "slug": "const-variables-not-immutable", 6 | "tags": [ 7 | "const", 8 | "immutability" 9 | ], 10 | "heroImage": "https://i.imgur.com/TjJ7TAS.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2017/02-18--const-variables-not-immutable/summary.markdown: -------------------------------------------------------------------------------- 1 | Using `const` only means that the variable will always have a reference to the same object or primitive value, because that reference can't change. 2 | -------------------------------------------------------------------------------- /2017/02-18--const-variables-not-immutable/teaser.markdown: -------------------------------------------------------------------------------- 1 | Using `const` only means that the variable will always have a reference to the same object or primitive value, because that reference can't change. The reference itself is immutable, but the value held by the variable does not become immutable. 2 | -------------------------------------------------------------------------------- /2017/03-09--observables-coming-to-ecmascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/03-09--observables-coming-to-ecmascript/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "58c09cb1011682420888f017", 3 | "author": "543d222f4683586910034197", 4 | "title": "Observables Proposal for ECMAScript!", 5 | "slug": "observables-coming-to-ecmascript", 6 | "tags": [ 7 | "ecmascript", 8 | "proposal-draft" 9 | ], 10 | "heroImage": "https://i.imgur.com/GKoh78o.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2017/03-09--observables-coming-to-ecmascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/03-09--observables-coming-to-ecmascript/teaser.markdown: -------------------------------------------------------------------------------- 1 | There's an ECMAScript proposal for Observables in the works. In this article we explore the proposal, the API, and look at a few use cases. 2 | -------------------------------------------------------------------------------- /2017/03-29--iterators-as-generators/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/03-29--iterators-as-generators/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "58dbea3cba8fc1032d35efa4", 3 | "author": "543d222f4683586910034197", 4 | "title": "Mixing Generators Into Iterators", 5 | "slug": "iterators-as-generators", 6 | "tags": [ 7 | "es6", 8 | "generators", 9 | "iterators" 10 | ], 11 | "heroImage": "https://i.imgur.com/YqpTJGF.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2017/03-29--iterators-as-generators/summary.markdown: -------------------------------------------------------------------------------- 1 | As it turns out, iterators can be written using generators. This can lead to some interesting use cases. 2 | -------------------------------------------------------------------------------- /2017/03-29--iterators-as-generators/teaser.markdown: -------------------------------------------------------------------------------- 1 | As it turns out, iterators can be written using generators. This can lead to some interesting use cases. Read on to understand the synergistic properties between these two JavaScript iteration concepts. 2 | -------------------------------------------------------------------------------- /2017/03-30--regular-expressions-post-es6/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/03-30--regular-expressions-post-es6/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "58dc8529a77b87031caf7894", 3 | "author": "543d222f4683586910034197", 4 | "title": "Regular Expressions in a post-ES6 world", 5 | "slug": "regular-expressions-post-es6", 6 | "tags": [ 7 | "es6", 8 | "unicode", 9 | "regular-expressions" 10 | ], 11 | "heroImage": "https://i.imgur.com/9OLawFo.jpg" 12 | } 13 | -------------------------------------------------------------------------------- /2017/03-30--regular-expressions-post-es6/summary.markdown: -------------------------------------------------------------------------------- 1 | In this article we'll take a look at regular expressions improvements in and after ES6. We'll discuss the `/y`, `/u`, and `/s` flags, named capture groups, unicode property escapes, lookbehind assertions, and `String#matchAll`. 2 | -------------------------------------------------------------------------------- /2017/06-25--tc39-ecmascript-proposals-future-of-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/06-25--tc39-ecmascript-proposals-future-of-javascript/summary.markdown: -------------------------------------------------------------------------------- 1 | > *Last week, I gave a presentation at Tencent Frontend Conference in Shenzhen, China. For this article, I've adapted its transcript.* 2 | -------------------------------------------------------------------------------- /2017/07-07--pattern-matching-in-ecmascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--pattern-matching-in-ecmascript/introduction.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--pattern-matching-in-ecmascript/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "595ff735d82f8a03327fbde7", 3 | "author": "543d222f4683586910034197", 4 | "title": "Pattern Matching in ECMAScript", 5 | "slug": "pattern-matching-in-ecmascript", 6 | "tags": [ 7 | "ecmascript", 8 | "proposal-draft" 9 | ], 10 | "heroImage": "https://i.imgur.com/DWA1qqb.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2017/07-07--pattern-matching-in-ecmascript/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--pattern-matching-in-ecmascript/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--setting-up-2fa-for-nodejs-applications/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--setting-up-2fa-for-nodejs-applications/introduction.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--setting-up-2fa-for-nodejs-applications/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "595faea4d82f8a03327fbd33", 3 | "author": "543d222f4683586910034197", 4 | "title": "Setting up 2FA for Node.js Applications", 5 | "slug": "setting-up-2fa-for-nodejs-applications", 6 | "tags": [ 7 | "nodejs", 8 | "security" 9 | ], 10 | "heroImage": "https://i.imgur.com/epv7mbC.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2017/07-07--setting-up-2fa-for-nodejs-applications/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-07--setting-up-2fa-for-nodejs-applications/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-10--null-propagation-operator/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-10--null-propagation-operator/introduction.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-10--null-propagation-operator/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "5963a8a6d82f8a03327fc36c", 3 | "author": "543d222f4683586910034197", 4 | "title": "Null Propagation Operator in JavaScript", 5 | "slug": "null-propagation-operator", 6 | "tags": [ 7 | "ecmascript", 8 | "proposal-draft" 9 | ], 10 | "heroImage": "https://i.imgur.com/fmTUKsL.jpg" 11 | } 12 | -------------------------------------------------------------------------------- /2017/07-10--null-propagation-operator/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-10--null-propagation-operator/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-27--tencent-frontend-conference-interview/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/07-27--tencent-frontend-conference-interview/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "59792fdcf320de026631ef89", 3 | "author": "543d222f4683586910034197", 4 | "title": "Interviewed at Tencent Frontend Conference", 5 | "slug": "tencent-frontend-conference-interview", 6 | "tags": [ 7 | "interview" 8 | ], 9 | "heroImage": "https://i.imgur.com/9VRpGt9.jpg" 10 | } 11 | -------------------------------------------------------------------------------- /2017/07-27--tencent-frontend-conference-interview/summary.markdown: -------------------------------------------------------------------------------- 1 | Last month, I was interviewed after delivering a presentation on ECMAScript to an audience in Shenzhen, China. I think it was an entertaining interview, so here's a transcript. 2 | -------------------------------------------------------------------------------- /2017/07-27--tencent-frontend-conference-interview/teaser.markdown: -------------------------------------------------------------------------------- 1 | Last month, I was interviewed after delivering [a presentation on ECMAScript][talk] to an audience in Shenzhen, China. I think it was an entertaining interview, so here's a transcript. 2 | 3 | [talk]: /presentations/tc39-ecmascript-and-the-future-of-javascript "TC39, ECMAScript, and the Future of JavaScript" 4 | -------------------------------------------------------------------------------- /2017/08-02--investigating-performance-object-prototype-to-string-es2015/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | We're thrilled to welcome Benedikt *--- the tech lead for JavaScript execution optimization at Google ---* to Pony Foo. He's been sharing a great deal of insight into V8 performance internals and caveats elsewhere on the web, and we're happy to host him on Pony Foo as well! ⏱ 2 | -------------------------------------------------------------------------------- /2017/08-02--investigating-performance-object-prototype-to-string-es2015/summary.markdown: -------------------------------------------------------------------------------- 1 | We discuss how `Object#toString` performs in the V8 engine, why it's important, how it changed with ES2015 symbols, and how to speed it up. 2 | -------------------------------------------------------------------------------- /2017/08-02--investigating-performance-object-prototype-to-string-es2015/teaser.markdown: -------------------------------------------------------------------------------- 1 | In this article, we'll discuss how `Object.prototype.toString()` performs in the V8 engine, why it's important, how it changed with the introduction of ES2015 symbols, and how the baseline performance can be improved by **up to 6x** (based on findings from Mozilla engineers). 2 | -------------------------------------------------------------------------------- /2017/08-10--make-all-images-on-your-website-responsive-in-3-easy-steps/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/08-10--make-all-images-on-your-website-responsive-in-3-easy-steps/summary.markdown: -------------------------------------------------------------------------------- 1 | Images are crucial to website performance, but most sites still don't implement responsive images. Cloudinary provides an alternative to `srcset` and `sizes` when implementing responsive images. 2 | -------------------------------------------------------------------------------- /2017/09-16--tiny-story-about-complexity/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/09-16--tiny-story-about-complexity/summary.markdown: -------------------------------------------------------------------------------- 1 | A human decides to open a new tab in their favorite web browser and they then google for *"cat in a pickle gifs"*. What happens next will shock you! 2 | -------------------------------------------------------------------------------- /2017/09-16--tiny-story-about-complexity/teaser.markdown: -------------------------------------------------------------------------------- 1 | A human decides to open a new tab in their favorite web browser and they then google for [*"cat in a pickle gifs"*][query]. What happens next will shock you! 2 | 3 | [query]: https://www.google.com/search?q=cat+in+a+pickle+gifs&tbm=isch 4 | -------------------------------------------------------------------------------- /2017/09-25--brief-history-of-modularity/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/09-25--brief-history-of-modularity/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/09-25--brief-history-of-modularity/teaser.markdown: -------------------------------------------------------------------------------- 1 | When it comes to JavaScript, modularity is a modern concept. In this article we'll quickly revisit and summarize the milestones in how modularity evolved in the world of JavaScript. This isn't meant to be a comprehensive list, by any means, but instead it's meant to illustrate the major paradigm changes along the history of JavaScript. 2 | -------------------------------------------------------------------------------- /2017/10-17--mastering-modular-javascript/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/11-25--an-introduction-to-speculative-optimization-in-v8/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | Once again, we have Benedikt Meurer in the house. Benedikt is the optimization lead in charge of V8 performance, and today he brings us a deep dive into how the TurboFan optimizing compiler in V8 works. 2 | -------------------------------------------------------------------------------- /2017/11-25--an-introduction-to-speculative-optimization-in-v8/summary.markdown: -------------------------------------------------------------------------------- 1 | An impressively low-level article that we hope gives you a good idea about what happens in V8 when it comes to optimization. 2 | -------------------------------------------------------------------------------- /2017/11-25--an-introduction-to-speculative-optimization-in-v8/teaser.markdown: -------------------------------------------------------------------------------- 1 | An impressively low-level article that we hope gives you a good idea about what happens in V8 when it comes to optimization. 2 | -------------------------------------------------------------------------------- /2017/12-07--modular-design-thinking/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2017/12-07--modular-design-thinking/summary.markdown: -------------------------------------------------------------------------------- 1 | Last year I gave a presentation about Modular Design and here's a transcript. 2 | -------------------------------------------------------------------------------- /2018/02-22--okta-auth0-and-the-goblet-of-identity/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/02-22--okta-auth0-and-the-goblet-of-identity/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/02-22--okta-auth0-and-the-goblet-of-identity/teaser.markdown: -------------------------------------------------------------------------------- 1 | I've been exploring a couple of different options when it comes to serverless authentication providers, and I was both pleased and surprised to find how little effort was required on my part, and how deep the rabbit hole can go! ⛳🐇 2 | -------------------------------------------------------------------------------- /2018/09-21--module-design/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/09-21--module-design/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/09-21--module-design/teaser.markdown: -------------------------------------------------------------------------------- 1 | This article is an excerpt from Mastering Modular JavaScript, which is [being released tomorrow on Amazon][amzn]. You can also "pay" for the HTML version by [sharing a single tweet][pf]. 2 | 3 | [amzn]: https://amzn.to/2QPItKI 4 | [pf]: /books/mastering-modular-javascript/chapters/1#read 5 | -------------------------------------------------------------------------------- /2018/10-09--unhappy-path-driven-development/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/10-09--unhappy-path-driven-development/introduction.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/10-09--unhappy-path-driven-development/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2018/10-09--unhappy-path-driven-development/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-15--javascript-performance-pitfalls-v8/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-15--javascript-performance-pitfalls-v8/summary.markdown: -------------------------------------------------------------------------------- 1 | Benedikt shows how V8 compiles your JavaScript programs, and explains a few tricks you can use to avoid draining application performance down the sink. 2 | -------------------------------------------------------------------------------- /2019/01-15--javascript-performance-pitfalls-v8/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-16--react-state-choose-wisely/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-16--react-state-choose-wisely/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-16--react-state-choose-wisely/teaser.markdown: -------------------------------------------------------------------------------- 1 | Proper state handling in React will make your components simple and maintainable. Poor choices will give you lots of headaches in the long-term. 2 | -------------------------------------------------------------------------------- /2019/01-17--graphql-in-depth-what-why-and-how/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/01-17--graphql-in-depth-what-why-and-how/introduction.markdown: -------------------------------------------------------------------------------- 1 | Learn why GraphQL is all the rage! We'll walk through the implementation of a schema for a popcorn company's API, learning about types, queries, and mutations as we go. 2 | -------------------------------------------------------------------------------- /2019/01-17--graphql-in-depth-what-why-and-how/summary.markdown: -------------------------------------------------------------------------------- 1 | Stop wondering if GraphQL is right for you and give it a spin! Learn about types, queries, and mutations in this in-depth walkthrough. 2 | -------------------------------------------------------------------------------- /2019/01-17--graphql-in-depth-what-why-and-how/teaser.markdown: -------------------------------------------------------------------------------- 1 | GraphQL is all the rage, but what exactly is it? In this in-depth walkthrough, we take a look at what GraphQL is, how to use it, and why you should use it. 2 | -------------------------------------------------------------------------------- /2019/02-13--action-pattern-clean-obvious-testable-code/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/02-13--action-pattern-clean-obvious-testable-code/summary.markdown: -------------------------------------------------------------------------------- 1 | Let's convert a mock API endpoint for signing up new users in a mobile app into using the action pattern. 2 | -------------------------------------------------------------------------------- /2019/02-13--action-pattern-clean-obvious-testable-code/teaser.markdown: -------------------------------------------------------------------------------- 1 | Let's convert a mock API endpoint for signing up new users in a mobile app into using the action pattern. 2 | -------------------------------------------------------------------------------- /2019/02-22--disguise-driven-testing-jest-mocks-in-depth/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/02-22--disguise-driven-testing-jest-mocks-in-depth/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-09--conflict-resolution-and-code-reviews/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-09--conflict-resolution-and-code-reviews/introduction.markdown: -------------------------------------------------------------------------------- 1 | This article covers one nifty trick I've been using lately in these cases that lets you review exactly the conflict resolution, while ignoring the mountains of changes that don't represent any conflicts (and can thus be safely ignored). 2 | -------------------------------------------------------------------------------- /2019/04-09--conflict-resolution-and-code-reviews/summary.markdown: -------------------------------------------------------------------------------- 1 | Have you ever tried to do a code review on a PR that merges a large release branch or feature branch back into mainline, fixing merge conflicts? It's not pretty. 2 | -------------------------------------------------------------------------------- /2019/04-09--disguise-driven-testing-jest-mocks-in-depth-part-2/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-09--disguise-driven-testing-jest-mocks-in-depth-part-2/summary.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-09--disguise-driven-testing-jest-mocks-in-depth-part-2/teaser.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-23--discovering-patterns-with-react-hooks/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/04-23--discovering-patterns-with-react-hooks/summary.markdown: -------------------------------------------------------------------------------- 1 | Exploring a pattern useful for building top-level, centralised functionalities in React apps. 2 | -------------------------------------------------------------------------------- /2019/05-22--react-data-survival-kit/editor-notes.markdown: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /2019/05-22--react-data-survival-kit/introduction.markdown: -------------------------------------------------------------------------------- 1 | React's flexibility means you can handle data in a lot of different ways. This guide will teach you patterns for fetching, storing, and retrieving data in React without the stress of maintaining a complex system. 2 | -------------------------------------------------------------------------------- /2019/05-22--react-data-survival-kit/summary.markdown: -------------------------------------------------------------------------------- 1 | Learn how to handle data inside of React with this collection of patterns for fetching, storing, and retrieving data in React. 2 | -------------------------------------------------------------------------------- /2019/05-22--react-data-survival-kit/teaser.markdown: -------------------------------------------------------------------------------- 1 | Handling data in React can be treacherous if you don't know your way around. Learn some common patterns for fetching, storing, and retrieving data in this guide to help you avoid messy code traps. 2 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | https://ponyfoo.com/license 2 | -------------------------------------------------------------------------------- /readme.markdown: -------------------------------------------------------------------------------- 1 | # articles 2 | 3 | https://ponyfoo.com/articles/history 4 | 5 | # license 6 | 7 | https://ponyfoo.com/license 8 | --------------------------------------------------------------------------------