56,966 blogs · [ { "id": "01a0878c-107f-72f9-bf43-f3e4cdc8ed6d", "title": "Landline phones with Google Homes", "url": "https://jch.github.io/posts/2026-08-22-landline-phones-google-homes.html", "published_at": "2026-08-22T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ce8e6f6d", "title": "Meshtastic meets Tomagotchi: Long Range Mesh Radio Network", "url": "https://jch.github.io/posts/2026-08-15-meshtastic-tomagotchi.html", "published_at": "2026-08-15T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4cf241d50", "title": "Makecode Arcade Games on Retropie", "url": "https://jch.github.io/posts/2026-05-26-makecode-arcade-on-retropie.html", "published_at": "2026-05-26T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4cf9806b7", "title": "Apple Numbers vs Google Sheets", "url": "https://jch.github.io/posts/2026-05-18-apple-numbers.html", "published_at": "2026-05-18T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4cff7f873", "title": "Serverless Offline Audiobook player", "url": "https://jch.github.io/posts/2026-05-14-audiobook-player-no-dep.html", "published_at": "2026-05-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d0baf770", "title": "Troubleshooting NetworkManager DHCP", "url": "https://jch.github.io/posts/2026-03-29-troubleshooting-networkmanager-dhcp.html", "published_at": "2026-03-29T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d1a10b06", "title": "Campfire lessons: colors, icons, and inputs", "url": "https://jch.github.io/posts/2026-03-28-campfire-css-colors-icons-inputs.html", "published_at": "2026-03-28T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d1c2884e", "title": "Pico CSS notes", "url": "https://jch.github.io/posts/2026-02-24-picocss.html", "published_at": "2026-02-24T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d25594c1", "title": "December 2025", "url": "https://jch.github.io/posts/2025-12-12-december.html", "published_at": "2025-12-12T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d308c633", "title": "Reducing Tailwind asset size", "url": "https://jch.github.io/posts/2025-11-20-tailwind-diet.html", "published_at": "2025-11-20T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d3a3f925", "title": "Quiet, but discoverable", "url": "https://jch.github.io/posts/2025-10-07-notifications-quiet-default.html", "published_at": "2025-10-07T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d3c99286", "title": "No CSS, No Javascript. Longevity on the web.", "url": "https://jch.github.io/posts/2025-09-18-no-css-no-js.html", "published_at": "2025-09-18T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d434d9f6", "title": "SSL for local Rails development", "url": "https://jch.github.io/posts/2025-09-02-rails-localhost-ssl.html", "published_at": "2025-09-02T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d5248727", "title": "Japan 2025", "url": "https://jch.github.io/posts/2025-08-21-japan.html", "published_at": "2025-08-21T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d5cf45af", "title": "Fugit gem: defining recurring tasks for background jobs", "url": "https://jch.github.io/posts/2025-06-24-fugit-recurring-tasks.html", "published_at": "2025-06-24T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d6ae1ea3", "title": "HENRY's Guide to Taxes, Loans, and Cars", "url": "https://jch.github.io/posts/2025-05-14-henrys-guide-taxes-loans-cars.html", "published_at": "2025-05-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d7a59f93", "title": "CSS Fragmentation issues with multi column", "url": "https://jch.github.io/posts/2025-05-08-css-multi-column-issues.html", "published_at": "2025-05-08T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d8516321", "title": "Monthly finance night", "url": "https://jch.github.io/posts/2025-05-07-monthly-finance-night.html", "published_at": "2025-05-07T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d8b2c803", "title": "My computers 2025", "url": "https://jch.github.io/posts/2025-05-03-my-computers-2025.html", "published_at": "2025-05-03T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4d96dc7c7", "title": "Sourdough", "url": "https://jch.github.io/posts/2025-04-29-sourdough.html", "published_at": "2025-04-29T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4da4a3f14", "title": "Popovers and Anchor Positioning", "url": "https://jch.github.io/posts/2025-04-13-popovers-css-anchor.html", "published_at": "2025-04-13T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4db44ea78", "title": "Ruby HTTP Streaming Revisited", "url": "https://jch.github.io/posts/2025-04-12-ruby-http-streaming-revisited.html", "published_at": "2025-04-12T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4dc14cf5a", "title": "iOS Progressive Web App Dialog bug", "url": "https://jch.github.io/posts/2025-03-14-ios-pwa-dialog-bug.html", "published_at": "2025-03-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4dd10d98b", "title": "Dark mode and RSS", "url": "https://jch.github.io/posts/2025-03-05-dark-mode-and-rss.html", "published_at": "2025-03-05T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ddfd381e", "title": "Environmental Hardware Upgrades: iPhone 16e", "url": "https://jch.github.io/posts/2025-02-19-environmental-hardware-upgrades-iphone-16e.html", "published_at": "2025-02-19T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4dee702b1", "title": "Building an accessible search page with progressive enhancements", "url": "https://jch.github.io/posts/2025-01-30-building-modern-search.html", "published_at": "2025-01-30T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4dfc2f972", "title": "Self hosting Rails on a Mac", "url": "https://jch.github.io/posts/2024-12-06-self-hosting-rails.html", "published_at": "2024-12-06T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e063740c", "title": "Progressive HTML Currency Input", "url": "https://jch.github.io/posts/2024-11-01-html-currency-input.html", "published_at": "2024-11-01T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e0e647f4", "title": "Things I learned this week", "url": "https://jch.github.io/posts/2024-10-27-things-i-learned.html", "published_at": "2024-10-27T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e13ac950", "title": "Customizing Turbo lifecycle events: iOS swipe view transitions", "url": "https://jch.github.io/posts/2024-10-14-customize-turbo-view-transitions.html", "published_at": "2024-10-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e15d2d4d", "title": "Bake-off: It's Performance Week!", "url": "https://jch.github.io/posts/2024-09-14-bake-off-rails-performance-week.html", "published_at": "2024-09-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e1af2425", "title": "Personal project deployment is both harder than easier than ever", "url": "https://jch.github.io/posts/2024-09-01-personal-project-deploy-is-harder-and-easier.html", "published_at": "2024-09-01T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e1f458e7", "title": "Saving $1,000 in interest using money market funds to pay bills", "url": "https://jch.github.io/posts/2024-08-19-saving-1000-interest-using-money-market-funds-for-bills.html", "published_at": "2024-08-19T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e292f0bd", "title": "Ruby timezones and testing", "url": "https://jch.github.io/posts/2024-08-15-ruby-timezones-and-testing.html", "published_at": "2024-08-15T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e34baa5d", "title": "Managing Rails client side navigation state", "url": "https://jch.github.io/posts/2024-08-01-rails-manage-client-side-navigation-state.html", "published_at": "2024-08-01T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e3c51673", "title": "Skip tailwindcss build if already running", "url": "https://jch.github.io/posts/2024-05-14-skip-tailwind-if-running.html", "published_at": "2024-05-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e3f869d2", "title": "Rails 5 Production Database Protection", "url": "https://jch.github.io/posts/2016-04-01-rails-5-protect-production-database.html", "published_at": "2016-04-01T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e4943433", "title": "How to sort GitHub notifications in Gmail", "url": "https://jch.github.io/posts/2016-02-10-how-to-sort-github-notifications-in-gmail.html", "published_at": "2016-02-10T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e5235c72", "title": "How to have an effective one on one", "url": "https://jch.github.io/posts/2016-01-14-how-to-have-effective-one-on-ones.html", "published_at": "2016-01-14T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e5e53224", "title": "Building reusable Ruby scripts", "url": "https://jch.github.io/posts/2016-01-02-building-reusable-ruby-scripts.html", "published_at": "2016-01-02T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e69cde8e", "title": "Protecting Resque::Server", "url": "https://jch.github.io/posts/2013-05-17-protecting-resque-server.html", "published_at": "2013-05-17T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e69e6b8d", "title": "Interview your libraries", "url": "https://jch.github.io/posts/2013-05-09-interview-your-libraries.html", "published_at": "2013-05-09T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e7300582", "title": "Ruby Incompatible Encoding Errors", "url": "https://jch.github.io/posts/2013-03-05-ruby-incompatible-encoding.html", "published_at": "2013-03-05T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e804eb55", "title": "Ruby on Rack", "url": "https://jch.github.io/posts/2012-07-23-ruby-on-rack.html", "published_at": "2012-07-23T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e83c7af9", "title": "Blog Reboot, Lessons Learned", "url": "https://jch.github.io/posts/2012-07-05-blogging-reboot-lessons-learned.html", "published_at": "2012-07-05T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e8bea9b7", "title": "And You Thought Render Farms Were Just For Pixar!", "url": "https://jch.github.io/posts/2012-06-14-and-you-thought-render-farms-were-just-for-pixar.html", "published_at": "2012-06-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e91963f2", "title": "Building Streaming REST APIs with Ruby", "url": "https://jch.github.io/posts/2012-05-24-building-streaming-rest-apis-with-ruby.html", "published_at": "2012-05-24T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e94cb0c6", "title": "Define Custom Callbacks for ActiveRecord and More", "url": "https://jch.github.io/posts/2012-03-22-define-custom-callbacks-for-activerecord-and-more.html", "published_at": "2012-03-22T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4e95c5cb6", "title": "Real Web Performance for Users, not Robots", "url": "https://jch.github.io/posts/2012-03-12-real-web-performance-for-users-not-robots.html", "published_at": "2012-03-12T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ea3557f9", "title": "Faraday: One HTTP Client to Rule Them All", "url": "https://jch.github.io/posts/2012-03-12-faraday-one-http-client-to-rule-them-all.html", "published_at": "2012-03-12T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4eadb06c8", "title": "Writing a Custom Rails Cache Store", "url": "https://jch.github.io/posts/2012-03-06-writing-a-custom-rails-cache-store.html", "published_at": "2012-03-06T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4eaf7fedb", "title": "Pry Productivity From Your Code", "url": "https://jch.github.io/posts/2012-02-29-pry-productivity-from-your-code.html", "published_at": "2012-02-29T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ebf37200", "title": "Balancing Pain and Happiness", "url": "https://jch.github.io/posts/2012-02-28-balancing-pain-and-happiness.html", "published_at": "2012-02-28T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ec805d44", "title": "Prototyping with Compass and Serve", "url": "https://jch.github.io/posts/2012-01-24-prototyping-with-compass-and-serve.html", "published_at": "2012-01-24T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ec8a9a00", "title": "Hunting Down Execution Order Test Failures", "url": "https://jch.github.io/posts/2012-01-11-hunting-down-execution-order-test-failures.html", "published_at": "2012-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ed0378ba", "title": "Backbone.js: Sessions and Authentication", "url": "https://jch.github.io/posts/2012-01-11-backbonejs-sessions-and-authentication.html", "published_at": "2012-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ede26bfd", "title": "Useful Libraries: Rake::Pipeline and Spade", "url": "https://jch.github.io/posts/2011-12-19-useful-libraries-rake-pipeline-and-spade.html", "published_at": "2011-12-19T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4eee2132f", "title": "Planning a Big Data Migration", "url": "https://jch.github.io/posts/2011-12-01-planning-a-big-data-migration.html", "published_at": "2011-12-01T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4efc8e720", "title": "Behind the Curtain: Grape API Versioning", "url": "https://jch.github.io/posts/2011-11-30-grape-api-versioning.html", "published_at": "2011-11-30T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4efd5134e", "title": "Developers, what are you thankful for?", "url": "https://jch.github.io/posts/2011-11-23-developers-what-are-you-thankful-for.html", "published_at": "2011-11-23T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4eff314b1", "title": "The Scrappy Guide to Pre-Launch Bootstrapping", "url": "https://jch.github.io/posts/2011-11-21-scrappy-guide-to-prelaunch-bootstrapping.html", "published_at": "2011-11-21T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f01c1a42", "title": "PROJECT README, Y U NO HAVE?", "url": "https://jch.github.io/posts/2011-11-21-project-readme-y-u-no-have.html", "published_at": "2011-11-21T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f102be51", "title": "Rubies to Prevent Devops Mayhem", "url": "https://jch.github.io/posts/2011-06-01-rubies-to-prevent-devops-mayhem.html", "published_at": "2011-06-01T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f1aa4f8e", "title": "Node.js Jumpstart", "url": "https://jch.github.io/posts/2011-04-08-nodejs-jumpstart.html", "published_at": "2011-04-08T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f220e751", "title": "My Web Development Toolbox, 2010 Edition", "url": "https://jch.github.io/posts/2011-01-11-my-web-development-toolbox-2010-edition.html", "published_at": "2011-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f2fbac03", "title": "Modular Cocoa Interfaces", "url": "https://jch.github.io/posts/2011-01-05-modular-cocoa-interfaces.html", "published_at": "2011-01-05T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f3b76604", "title": "Fixing Common Bundler Problems", "url": "https://jch.github.io/posts/2010-08-12-fixing-common-bundler-problems.html", "published_at": "2010-08-12T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f4310e59", "title": "Resque Cheatsheet", "url": "https://jch.github.io/posts/2010-06-22-resque-cheatsheet.html", "published_at": "2010-06-22T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f5201096", "title": "New Beginnings: Starting with Intridea", "url": "https://jch.github.io/posts/2010-06-14-starting-at-intridea.html", "published_at": "2010-06-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f52adcfc", "title": "Getting Around in MongoDB", "url": "https://jch.github.io/posts/2010-06-11-getting-around-in-mongodb.html", "published_at": "2010-06-11T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f5982c25", "title": "Email Delivery for Webapps", "url": "https://jch.github.io/posts/2010-05-14-email-deliverability.html", "published_at": "2010-05-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f61141c9", "title": "Beerpad Hackathon: Hosting with Heroku", "url": "https://jch.github.io/posts/2010-03-03-beerpad-hackathon-hosting-with-heroku.html", "published_at": "2010-03-03T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f6f467e5", "title": "Reaction to 37Signal's Getting Real", "url": "https://jch.github.io/posts/2010-03-01-reaction-to-37signals-getting-real.html", "published_at": "2010-03-01T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f7408cb1", "title": "Hackathon creation: Beerpad", "url": "https://jch.github.io/posts/2010-02-27-hackathon-beerpad.html", "published_at": "2010-02-27T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f77bae88", "title": "Page Caching Gotcha on Heroku", "url": "https://jch.github.io/posts/2010-02-24-page-caching-gotcha-on-heroku.html", "published_at": "2010-02-24T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f80aaa1f", "title": "Rails Dependency Management", "url": "https://jch.github.io/posts/2010-01-21-rails-dependency-management.html", "published_at": "2010-01-21T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f89a7f4c", "title": "Tips of the Day", "url": "https://jch.github.io/posts/2010-01-19-tips-of-the-day.html", "published_at": "2010-01-19T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f9182373", "title": "Tips of the Day", "url": "https://jch.github.io/posts/2010-01-14-tips-of-the-day.html", "published_at": "2010-01-14T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f91bb000", "title": "Tips of the Day", "url": "https://jch.github.io/posts/2010-01-13-tips-of-the-day.html", "published_at": "2010-01-13T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f964dc9f", "title": "Tips of the Day", "url": "https://jch.github.io/posts/2010-01-12-tips-of-the-day.html", "published_at": "2010-01-12T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f9be6c66", "title": "Ruby Rails Gmail SMTP", "url": "https://jch.github.io/posts/2010-01-11-ruby-rails-gmail-smtp.html", "published_at": "2010-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4f9f591fe", "title": "A Day in Python Library Hell", "url": "https://jch.github.io/posts/2010-01-11-a-day-in-python-library-hell.html", "published_at": "2010-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4faa62515", "title": "Ruby Python Cheatsheet", "url": "https://jch.github.io/posts/2009-12-09-ruby-python-cheatsheet.html", "published_at": "2009-12-09T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fb72883c", "title": "Talking the Startup Talk, Walking the Outspokes Walk: Founders", "url": "https://jch.github.io/posts/2009-10-30-first-month-of-first-startup.html", "published_at": "2009-10-30T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fc3e3caa", "title": "The Software Maintenance Light", "url": "https://jch.github.io/posts/2009-06-09-rails-application-maintenance.html", "published_at": "2009-06-09T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fc456975", "title": "Introspecting Rails Models and Controllers Callbacks", "url": "https://jch.github.io/posts/2009-06-04-introspecting-rails-models-and-controllers.html", "published_at": "2009-06-04T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fc961452", "title": "Ruby Postgresql Gem Cleanup", "url": "https://jch.github.io/posts/2009-04-14-ruby-postgresql-gem-cleanup.html", "published_at": "2009-04-14T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fd8d69df", "title": "Fast Tracked iPhone Development", "url": "https://jch.github.io/posts/2009-04-10-fast-tracked-iphone-development.html", "published_at": "2009-04-10T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4fe7fab14", "title": "Adventures with ActiveRecord find", "url": "https://jch.github.io/posts/2009-04-08-adventures-with-active-record-find.html", "published_at": "2009-04-08T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ff42b939", "title": "Rails 2.2.2 Chicken and Egg Migrations Headache", "url": "https://jch.github.io/posts/2009-03-17-rails-2.2.2-chicken-and-egg-migrations-headache.html", "published_at": "2009-03-17T07:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e4ffda86d5", "title": "Rails and Gems Documentation Everywhere", "url": "https://jch.github.io/posts/2009-02-28-rails-and-gems-documentation-anywhere.html", "published_at": "2009-02-28T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e5008b90de", "title": "Another .irbrc Jewel", "url": "https://jch.github.io/posts/2009-02-18-another-irbrc-jewel.html", "published_at": "2009-02-18T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e50149740e", "title": "Multiple Gmail Accounts on OSX Done Right", "url": "https://jch.github.io/posts/2009-02-11-multiple-gmail-accounts-on-osx-done-right.html", "published_at": "2009-02-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e5016f6dfb", "title": "Emacs Refactoring", "url": "https://jch.github.io/posts/2009-02-06-emacs-refactoring.html", "published_at": "2009-02-06T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e5026ec5ba", "title": "Rails-like Javascript Date Helpers", "url": "https://jch.github.io/posts/2009-01-11-rails-like-javascript-date-helpers.html", "published_at": "2009-01-11T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e5031bf75a", "title": "Rails Flash with Ajax", "url": "https://jch.github.io/posts/2008-12-13-rails-flash-with-ajax.html", "published_at": "2008-12-13T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e503fd2fc3", "title": "OS X GUI Tool 'HTTP Client'", "url": "https://jch.github.io/posts/2008-12-08-osx-gui-tool-httpclient.html", "published_at": "2008-12-08T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e5041e5247", "title": "How to Make an API for a Rails App", "url": "https://jch.github.io/posts/2008-11-25-how-to-make-an-api-for-a-rails-app.html", "published_at": "2008-11-25T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e504a96140", "title": "Deploying into the Night", "url": "https://jch.github.io/posts/2008-11-08-deploying-into-the-night.html", "published_at": "2008-11-08T08:00:00+00:00" }, { "id": "01a0878c-107f-72f9-bf43-f3e50556e377", "title": "Subversion for the Lazy", "url": "https://jch.github.io/posts/2008-11-07-subversion-for-the-lazy.html", "published_at": "2008-11-07T08:00:00+00:00" } ] posts Claim your blog
Back to jch.github.io
Blog · corpus.blog/blogs/jch.github.io/posts

jch.github.io

jch.github.io

2026

2025

2024

2016

2013

2012

2011

2010

2009

2008