41554 blogs · [ { "id": "01a087d5-d729-70fb-8dd4-1451caedf90c", "title": "How I Built My Mobile Second Brain", "url": "https://robdodson.me/posts/how-i-built-my-mobile-second-brain/", "published_at": "2026-02-16T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cb813235", "title": "My Second Brain Never Worked. Then I Gave It a Gardener.", "url": "https://robdodson.me/posts/i-gave-my-second-brain-a-gardener/", "published_at": "2026-02-08T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cbfaa389", "title": "Your AI Chatbot Is a Gatekeeper", "url": "https://robdodson.me/posts/your-ai-chatbot-is-a-gatekeeper/", "published_at": "2026-01-29T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cc49091c", "title": "Clawdbot's Missing Layers", "url": "https://robdodson.me/posts/clawdbots-missing-layers/", "published_at": "2026-01-29T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cc7eccf4", "title": "Joining Voltus to work on climate!", "url": "https://robdodson.me/posts/joining-voltus/", "published_at": "2022-07-10T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cd0db534", "title": "Why I'm turning my home into a virtual power plant", "url": "https://robdodson.me/posts/your-home-is-a-virtual-power-plant/", "published_at": "2022-04-08T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cd70360a", "title": "Finding a job in climate as a front-end engineer", "url": "https://robdodson.me/posts/finding-a-job-in-climate/", "published_at": "2022-03-16T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cdef0e29", "title": "How I work", "url": "https://robdodson.me/posts/how-i-work/", "published_at": "2021-03-06T00:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451ce46b44b", "title": "Command palettes for the web", "url": "https://robdodson.me/posts/command-palettes/", "published_at": "2019-09-03T15:00:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cf315f46", "title": "Easily upgrade Ghost 0.x to 2.0", "url": "https://robdodson.me/posts/easily-upgrade-ghost-0-x-to-2-0/", "published_at": "2019-01-14T00:40:51+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cfe3e199", "title": "Which elements support shadow DOM?", "url": "https://robdodson.me/posts/which-elements-support-shadow-dom/", "published_at": "2019-01-13T16:56:36+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451cfff4260", "title": "Why you can't test a screen reader (yet)!", "url": "https://robdodson.me/posts/why-you-cant-test-a-screen-reader-yet/", "published_at": "2018-01-02T17:42:55+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d0da4a10", "title": "Hello, 2018!", "url": "https://robdodson.me/posts/hello-2018/", "published_at": "2018-01-01T20:29:49+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d14ae478", "title": "The future of accessibility for custom elements", "url": "https://robdodson.me/posts/the-future-of-accessibility-for-custom-elements/", "published_at": "2017-10-02T20:17:28+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d169e54a", "title": "How to use Polymer with Webpack", "url": "https://robdodson.me/posts/how-to-use-polymer-with-webpack/", "published_at": "2017-07-17T18:28:54+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d1a21f85", "title": "Don't use jQuery plugins with Shadow DOM", "url": "https://robdodson.me/posts/dont-use-jquery-with-shadow-dom/", "published_at": "2017-06-25T00:00:44+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d1d17ccf", "title": "Regarding the broken promise of Web Components", "url": "https://robdodson.me/posts/regarding-the-broken-promise-of-web-components/", "published_at": "2017-03-16T01:01:38+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d20cf7de", "title": "Custom Elements That Work Anywhere", "url": "https://robdodson.me/posts/interoperable-custom-elements/", "published_at": "2016-11-30T18:32:38+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d2499c9c", "title": "Building better accessibility primitives", "url": "https://robdodson.me/posts/building-better-accessibility-primitives/", "published_at": "2016-06-11T14:43:09+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d2913bb9", "title": "Setting up Android Studio on Yosemite", "url": "https://robdodson.me/posts/setting-up-android-studio-on-yosemite/", "published_at": "2014-12-31T06:01:12+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d35e3d7b", "title": "@font-face doesn't work in Shadow DOM", "url": "https://robdodson.me/posts/at-font-face-doesnt-work-in-shadow-dom/", "published_at": "2013-11-19T17:27:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d3c590b6", "title": "Exploring HTML Imports", "url": "https://robdodson.me/posts/exploring-html-imports/", "published_at": "2013-08-20T20:07:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d4a56fa8", "title": "nth-child is weird", "url": "https://robdodson.me/posts/nth-child-is-weird/", "published_at": "2013-08-04T17:55:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d57ff287", "title": "RequireJS: Embracing the Awesomness of AMD Modules", "url": "https://robdodson.me/posts/requirejs-embracing-the-awesomness-of-amd-modules/", "published_at": "2013-03-22T04:57:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d5a57061", "title": "HTML5 Template Tag: Introduction", "url": "https://robdodson.me/posts/html5-template-tag-introduction/", "published_at": "2013-03-16T16:51:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d6207788", "title": "Asynchronous Grunt Tasks", "url": "https://robdodson.me/posts/asynchronous-grunt-tasks/", "published_at": "2012-11-29T16:15:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d6e7cb92", "title": "A RequireJS multi-page shimmed site: How-To", "url": "https://robdodson.me/posts/a-require-dot-js-multipage-shimmed-site-how-to/", "published_at": "2012-11-18T21:05:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d75362e0", "title": "JavaScript Design Patterns: Factory", "url": "https://robdodson.me/posts/javascript-design-patterns-factory/", "published_at": "2012-09-03T19:40:00+00:00" }, { "id": "01a087d5-d729-70fb-8dd4-1451d83d3931", "title": "JavaScript Design Patterns: Decorator Update", "url": "https://robdodson.me/posts/javascript-design-patterns-decorator-pt-2/", "published_at": "2012-08-31T01:07:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caefd7d80de", "title": "JavaScript Design Patterns: Decorator", "url": "https://robdodson.me/posts/javascript-design-patterns-decorator/", "published_at": "2012-08-27T16:59:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caefe49ad25", "title": "JavaScript Design Patterns: Observer", "url": "https://robdodson.me/posts/javascript-design-patterns-observer/", "published_at": "2012-08-16T20:19:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caefea763df", "title": "JavaScript Design Patterns: Iterator", "url": "https://robdodson.me/posts/javascript-design-patterns-iterator/", "published_at": "2012-08-10T22:45:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caeff82fe21", "title": "JavaScript Design Patterns: Singleton", "url": "https://robdodson.me/posts/javascript-design-patterns-singleton/", "published_at": "2012-08-09T02:52:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf005da684", "title": "JavaScript Design Patterns: Strategy", "url": "https://robdodson.me/posts/javascript-design-patterns-strategy/", "published_at": "2012-08-03T22:12:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf00f04bae", "title": "JavaScript Design Patterns: Table of Contents", "url": "https://robdodson.me/posts/javascript-design-patterns/", "published_at": "2012-08-03T16:39:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0117ac54", "title": "Ending My First Chain", "url": "https://robdodson.me/posts/ending-my-first-chain/", "published_at": "2012-06-26T05:58:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf01983968", "title": "Sublime Snippet Basics", "url": "https://robdodson.me/posts/sublime-snippet-basics/", "published_at": "2012-06-25T05:48:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf028ae3ea", "title": "Sublime Text 2 Tips and Shortcuts", "url": "https://robdodson.me/posts/sublime-text-2-tips-and-shortcuts/", "published_at": "2012-06-24T05:28:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf02cb95c4", "title": "Publish your Node library to npm", "url": "https://robdodson.me/posts/publish-your-node-library-to-npm/", "published_at": "2012-06-17T06:06:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf02d810ec", "title": "How to Run a Node Script from the Command Line", "url": "https://robdodson.me/posts/how-to-run-a-node-script-from-the-command-line/", "published_at": "2012-06-16T02:46:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf031adc17", "title": "How To Write a Command Line Ruby Gem", "url": "https://robdodson.me/posts/how-to-write-a-command-line-ruby-gem/", "published_at": "2012-06-14T15:17:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf039df630", "title": "Writing a Command Line Tool in Ruby", "url": "https://robdodson.me/posts/writing-a-command-line-tool-in-ruby/", "published_at": "2012-06-13T14:29:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0483e12b", "title": "Let's Talk SMACSS", "url": "https://robdodson.me/posts/lets-talk-smacss/", "published_at": "2012-06-10T04:03:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf054622a5", "title": "CSS Semantics: Best Practices", "url": "https://robdodson.me/posts/css-semantics/", "published_at": "2012-06-09T14:19:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0600ed95", "title": "Building a Countdown Timer with Socket.io pt. 3", "url": "https://robdodson.me/posts/building-a-countdown-timer-with-socket-dot-io-pt-3/", "published_at": "2012-06-08T02:41:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0604fe95", "title": "Building a Countdown Timer with Socket.io pt. 2", "url": "https://robdodson.me/posts/building-a-countdown-timer-with-socket-dot-io-pt-2/", "published_at": "2012-06-06T14:47:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf064236a8", "title": "Building a Countdown Timer with Socket.io", "url": "https://robdodson.me/posts/building-a-countdown-timer-with-socket-dot-io/", "published_at": "2012-06-05T15:07:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0659b33a", "title": "Make Your Own jQuery Deferreds and Promises", "url": "https://robdodson.me/posts/make-your-own-jquery-deferreds-and-promises/", "published_at": "2012-06-04T03:33:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf06dea5f8", "title": "How to use EJS in Express", "url": "https://robdodson.me/posts/how-to-use-ejs-in-express/", "published_at": "2012-05-31T18:34:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0793d360", "title": "Using jQuery Deferred to Load an Underscore Template", "url": "https://robdodson.me/posts/using-jquery-deferred-to-load-an-underscore-template/", "published_at": "2012-05-30T15:53:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0838fd06", "title": "Testing AMD Backbone Modules", "url": "https://robdodson.me/posts/testing-backbone-modules/", "published_at": "2012-05-29T15:03:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf08b588ab", "title": "Mocking Requests with Mocha, Chai and Sinon", "url": "https://robdodson.me/posts/mocking-requests-with-mocha-chai-and-sinon/", "published_at": "2012-05-28T18:20:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0913cbbf", "title": "Getting started with Mocha and Chai", "url": "https://robdodson.me/posts/testing-backbone-boilerplate-with-mocha-and-chai/", "published_at": "2012-05-27T21:08:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf09b287dc", "title": "Backbone Events: Framework Communication", "url": "https://robdodson.me/posts/backbone-events-framework-communication/", "published_at": "2012-05-25T15:01:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0a87a9ae", "title": "Backbone Events: Adding Views to the DOM", "url": "https://robdodson.me/posts/backbone-events-between-views/", "published_at": "2012-05-24T14:23:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0aafa974", "title": "How do you switch between views in Backbone", "url": "https://robdodson.me/posts/how-do-you-switch-between-views-in-backbone/", "published_at": "2012-05-23T14:56:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0b836ab3", "title": "Exploring the Backbone Router and History API", "url": "https://robdodson.me/posts/exploring-the-backbone-router-and-history-api/", "published_at": "2012-05-21T14:59:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0c62d0f8", "title": "Some More Backbone.js Basics", "url": "https://robdodson.me/posts/some-more-backbone-dot-js-basics/", "published_at": "2012-05-20T15:19:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0c938f87", "title": "My First Chain", "url": "https://robdodson.me/posts/my-first-chain/", "published_at": "2012-05-20T05:53:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0cf36a1a", "title": "Backbone Boilerplate: Playing with RequireJS", "url": "https://robdodson.me/posts/backbone-boilerplate-playing-with-require-dot-js/", "published_at": "2012-05-18T15:07:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0cf6d4e1", "title": "Getting Familiar with Backbone Boilerplate", "url": "https://robdodson.me/posts/getting-familiar-with-backbone-boilerplate/", "published_at": "2012-05-17T14:47:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0d7a4020", "title": "Hacking the PATH variable in Sublime Text", "url": "https://robdodson.me/posts/hacking-the-path-variable-in-sublime-text/", "published_at": "2012-05-15T03:26:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0da88cef", "title": "Pangrams in Ruby", "url": "https://robdodson.me/posts/pangrams-in-ruby/", "published_at": "2012-05-10T06:15:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0e58d77c", "title": "Building a Simple Scraper with Nokogiri in Ruby", "url": "https://robdodson.me/posts/building-a-simple-scraper-with-nokogiri-in-ruby/", "published_at": "2012-05-06T04:08:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0eb1ee1e", "title": "D3 Basics: The Linear Scale", "url": "https://robdodson.me/posts/d3-basics-the-linear-scale/", "published_at": "2012-05-04T14:21:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0eff27a5", "title": "D3 Basics: An Introduction To Scales", "url": "https://robdodson.me/posts/d3-basics-an-introduction-to-scales/", "published_at": "2012-05-03T17:04:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf0ffdab0a", "title": "D3.js and Octopress", "url": "https://robdodson.me/posts/d3-js-and-octopress/", "published_at": "2012-05-02T14:20:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf10b9e0b3", "title": "Ruby Objects and Dot Syntax", "url": "https://robdodson.me/posts/ruby-objects-and-dot-syntax/", "published_at": "2012-05-01T14:37:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf10f505fd", "title": "Playing with Ruby Dates", "url": "https://robdodson.me/posts/playing-with-ruby-dates/", "published_at": "2012-04-28T14:30:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf1115b45f", "title": "A Basic RVM Tutorial for Rails 3", "url": "https://robdodson.me/posts/how-to-use-rvm-for-rails3/", "published_at": "2011-09-23T14:33:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf11f134e7", "title": "Syntax Error: Unexpected tIDENTIFIER in Rails 3", "url": "https://robdodson.me/posts/syntax-error-unexpected-tidentifier/", "published_at": "2011-09-21T14:33:00+00:00" }, { "id": "01a087d5-d72a-719a-a7d9-2caf1277ab3f", "title": "NoMethodError in Rails 3", "url": "https://robdodson.me/posts/nomethoderror-in-rails-3/", "published_at": "2011-09-20T14:33:00+00:00" } ] posts Claim your blog
Back to robdodson.me
Blog · corpus.blog/blogs/robdodson.me/posts

robdodson.me

robdodson.me

2026

2022

2021

2019

2018

2017

2016

2014

2013

2012

2011