Snake’s HandsAdam Sanderson plays aroundhttps://snakeshands.com/AI Curb Cutshttps://snakeshands.com/blog/ai_curb_cuts/https://snakeshands.com/blog/ai_curb_cuts/Much of what is good for AI, is good for humans as well.Fri, 30 Jan 2026 00:00:00 GMTBuilding Custom Form Elementshttps://snakeshands.com/blog/custom_form_elements/https://snakeshands.com/blog/custom_form_elements/Let's see what we can learn by building a little web componentSun, 11 May 2025 00:00:00 GMTAsides in Astro Markdownhttps://snakeshands.com/blog/til_asides_in_astro/https://snakeshands.com/blog/til_asides_in_astro/Thanks to remark, it's easy to customize how Markdown is processedTue, 25 Feb 2025 00:00:00 GMTLoss Aversion Is All You Needhttps://snakeshands.com/blog/oops/https://snakeshands.com/blog/oops/Some mistakes can be quite liberatingSun, 23 Feb 2025 00:00:00 GMTBrook, A Feed Readerhttps://snakeshands.com/blog/brook_a_feed_reader/https://snakeshands.com/blog/brook_a_feed_reader/Building a feed reader into Firefox.Fri, 12 Oct 2018 00:00:00 GMTReading Rails - HTTP DELETEs With a Linkhttps://snakeshands.com/blog/reading_rails_http_delete_with_a_link/https://snakeshands.com/blog/reading_rails_http_delete_with_a_link/Exploring how Rails, Rails-UJS, and Rack work together to enable HTTP DELETEs.Mon, 16 May 2016 00:00:00 GMTThe Constructive Nohttps://snakeshands.com/blog/the_constructive_no/https://snakeshands.com/blog/the_constructive_no/No is a gift if presented thoughtfully.Mon, 16 Nov 2015 00:00:00 GMTFinding and Fixing Frustrating Testshttps://snakeshands.com/blog/finding_and_fixing_frustrating_tests/https://snakeshands.com/blog/finding_and_fixing_frustrating_tests/Track down some common ways tests fail due to unexpected interaction.Mon, 02 Nov 2015 00:00:00 GMTTesting a Little Morehttps://snakeshands.com/blog/testing_a_little_more/https://snakeshands.com/blog/testing_a_little_more/Start testing a little more with verification tests.Tue, 27 Oct 2015 00:00:00 GMTThe Test That Cried Failhttps://snakeshands.com/blog/the_test_that_cried_fail/https://snakeshands.com/blog/the_test_that_cried_fail/Isolate indeterminate test behavior.Sun, 18 Oct 2015 00:00:00 GMTHasDefaultAssociationshttps://snakeshands.com/blog/has_default_associations/https://snakeshands.com/blog/has_default_associations/Simplify your relations with HasDefaultAssociations.Mon, 17 Aug 2015 00:00:00 GMTReading Ruby - Minitest's Plugin Systemhttps://snakeshands.com/blog/reading_ruby_minitest_plugin_system/https://snakeshands.com/blog/reading_ruby_minitest_plugin_system/Let's read Minitest's source!Fri, 03 Apr 2015 00:00:00 GMTReading Rails - Time Travelhttps://snakeshands.com/blog/reading_rails_time_travel/https://snakeshands.com/blog/reading_rails_time_travel/How does Time Travel work in Rails? Let's find out!Sun, 15 Mar 2015 00:00:00 GMTRuby Ducks - Serialization Duck Typehttps://snakeshands.com/blog/ruby_ducks_serialization_duck_type/https://snakeshands.com/blog/ruby_ducks_serialization_duck_type/Apply duck typing to serialization.Sun, 31 Aug 2014 00:00:00 GMTReading Rails - TimeWithZonehttps://snakeshands.com/blog/reading_rails_time_with_zone/https://snakeshands.com/blog/reading_rails_time_with_zone/Let's read the Rails source to see how TimeWithZone works.Wed, 27 Aug 2014 00:00:00 GMTMetaRuby - Calling and Receiving Methodshttps://snakeshands.com/blog/metaruby_calling_and_receiving_methods/https://snakeshands.com/blog/metaruby_calling_and_receiving_methods/Let's play with meta programming!Thu, 19 Jun 2014 00:00:00 GMTDefense Against the Dark Art of Estimation Bargaininghttps://snakeshands.com/blog/estimation_bargaining/https://snakeshands.com/blog/estimation_bargaining/How to spot and stop 'Estimation Bargaining' — because nobody wins when deadlines are just wishful thinking!Tue, 17 Jun 2014 00:00:00 GMTMetaRuby - Monkeying With Methodshttps://snakeshands.com/blog/metaruby_monkeying_with_methods/https://snakeshands.com/blog/metaruby_monkeying_with_methods/Introspect, call, bind, and wrap them with a bit of magic.Thu, 12 Jun 2014 00:00:00 GMTMetaRuby - Building Classes Dynamicallyhttps://snakeshands.com/blog/building_classes_dynamically/https://snakeshands.com/blog/building_classes_dynamically/Make a factory to make your code for you.Wed, 28 May 2014 00:00:00 GMTMetaRuby - An Ounce of Metahttps://snakeshands.com/blog/metaruby_an_ounce_of_metaprogramming/https://snakeshands.com/blog/metaruby_an_ounce_of_metaprogramming/Write code to write code to write…Thu, 22 May 2014 00:00:00 GMTReading Rails - How Does MessageEncryptor Work?https://snakeshands.com/blog/reading_rails_how_does_message_encryptor_work/https://snakeshands.com/blog/reading_rails_how_does_message_encryptor_work/Read how MessageVerifier works, because learning is good for you.Mon, 19 May 2014 00:00:00 GMTReading Rails - How Does MessageVerifier Work?https://snakeshands.com/blog/reading_rails_how_does_message_verifier_work/https://snakeshands.com/blog/reading_rails_how_does_message_verifier_work/It's only magic if you don't read the code.Sat, 10 May 2014 00:00:00 GMTReading Rails - How Do Batched Queries Work?https://snakeshands.com/blog/reading_rails_how_do_batched_queries_work/https://snakeshands.com/blog/reading_rails_how_do_batched_queries_work/Read some Rails code and learn about Ruby in the process.Mon, 05 May 2014 00:00:00 GMTReading Rails - The Adapter Patternhttps://snakeshands.com/blog/reading_rails_the_adapter_pattern/https://snakeshands.com/blog/reading_rails_the_adapter_pattern/Read the rails source, learn a design pattern.Tue, 25 Feb 2014 00:00:00 GMTReading Rails - Errors and Validatorshttps://snakeshands.com/blog/reading_rails_errors_and_validators/https://snakeshands.com/blog/reading_rails_errors_and_validators/Read up on error handling so the errors don't handle you.Wed, 29 Jan 2014 00:00:00 GMTReading Rails - How Validations Are Configuredhttps://snakeshands.com/blog/reading_rails_validations/https://snakeshands.com/blog/reading_rails_validations/Who validates the validators? We do, now let's start reading.Sun, 12 Jan 2014 00:00:00 GMTReading Rails - Concernhttps://snakeshands.com/blog/reading_rails_concern/https://snakeshands.com/blog/reading_rails_concern/Read some source code, discern the subtle value of Concern.Mon, 06 Jan 2014 00:00:00 GMTReading Rails - More Migrationshttps://snakeshands.com/blog/reading_rails_more_migrations/https://snakeshands.com/blog/reading_rails_more_migrations/Read the source and understand more about migrations, it's even more worth it.Tue, 31 Dec 2013 00:00:00 GMTReading Rails - Migrationshttps://snakeshands.com/blog/reading_rails_migrations/https://snakeshands.com/blog/reading_rails_migrations/Read the source and understand migrations, it's worth it.Wed, 18 Dec 2013 00:00:00 GMTReading Rails - Attribute Methodshttps://snakeshands.com/blog/reading_rails_attribute_methods/https://snakeshands.com/blog/reading_rails_attribute_methods/Magic attributes cease to be magical under a close reading of the source.Sun, 08 Dec 2013 00:00:00 GMTReading Rails - Change Trackinghttps://snakeshands.com/blog/reading_rails_change_tracking/https://snakeshands.com/blog/reading_rails_change_tracking/It's only magic if you don't read the source.Thu, 28 Nov 2013 00:00:00 GMTReading Rails - Handling Exceptionshttps://snakeshands.com/blog/reading_rails_handling_exceptions/https://snakeshands.com/blog/reading_rails_handling_exceptions/Learn how Rails uses metaprogramming so your app doesn't crashThu, 21 Nov 2013 00:00:00 GMTRuby Metric Adapterhttps://snakeshands.com/blog/metric_adapter/https://snakeshands.com/blog/metric_adapter/A tiny adapter to help you write better code.Tue, 09 Jul 2013 00:00:00 GMTHierarchies With Railshttps://snakeshands.com/blog/hierarchies_with_rails/https://snakeshands.com/blog/hierarchies_with_rails/Implement and manipulate materialized path hierarchies in ActiveRecord with Postgres.Wed, 12 Jun 2013 00:00:00 GMTAggregating Hierarchies With Postgreshttps://snakeshands.com/blog/aggregating_hierarchies_with_postgres/https://snakeshands.com/blog/aggregating_hierarchies_with_postgres/Aggregate hierarchical data in PostgreSQL using materialized paths.Wed, 22 May 2013 00:00:00 GMTHierarchies With Postgreshttps://snakeshands.com/blog/hierarchies_with_postgres/https://snakeshands.com/blog/hierarchies_with_postgres/Model hierarchical data in Postgres using materialized paths with arrays.Sun, 12 May 2013 00:00:00 GMTWhen Files Change – Simple Automationhttps://snakeshands.com/blog/when_files_change/https://snakeshands.com/blog/when_files_change/When files change something should happen. Now it does.Thu, 09 May 2013 00:00:00 GMTTagging With ActiveRecord and Postgreshttps://snakeshands.com/blog/tagging_with_active_record_and_postgres/https://snakeshands.com/blog/tagging_with_active_record_and_postgres/Use Postgres arrays to implement tagging in a Rails application.Thu, 02 May 2013 00:00:00 GMTPostgres, The Best Tool You're Already Usinghttps://snakeshands.com/blog/postgres_railsconf2013/https://snakeshands.com/blog/postgres_railsconf2013/I got to present at RailsConf!Wed, 01 May 2013 00:00:00 GMTIvy - Bound JavaScripthttps://snakeshands.com/blog/ivy_data_binding_in_javascript/https://snakeshands.com/blog/ivy_data_binding_in_javascript/The best knockout knock off I've ever written.Sat, 14 Jul 2012 00:00:00 GMTThe Strange Ruby Splathttps://snakeshands.com/blog/the_strange_ruby_splat/https://snakeshands.com/blog/the_strange_ruby_splat/Splat!Fri, 21 Jan 2011 00:00:00 GMTGetting to Know the Ruby Standard Library – Delegatorhttps://snakeshands.com/blog/ruby_standard_library_delegator/https://snakeshands.com/blog/ruby_standard_library_delegator/Explore Ruby’s Delegator and the Proxy pattern.Tue, 18 Jan 2011 00:00:00 GMTGetting to Know the Ruby Standard Library – WeakRefhttps://snakeshands.com/blog/ruby_standard_library_weakref/https://snakeshands.com/blog/ruby_standard_library_weakref/Objects, loosely held.Sun, 09 Jan 2011 00:00:00 GMTGetting to Know the Ruby Standard Library – Timeouthttps://snakeshands.com/blog/ruby_standard_library_timeout/https://snakeshands.com/blog/ruby_standard_library_timeout/Read some source code, until you timeout.Fri, 31 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – Pathnamehttps://snakeshands.com/blog/ruby_standard_library_pathname/https://snakeshands.com/blog/ruby_standard_library_pathname/Learn how the Pathname library works and how to use it.Tue, 28 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – Abbrevhttps://snakeshands.com/blog/ruby_standard_library_abbrev/https://snakeshands.com/blog/ruby_standard_library_abbrev/Make use of the tools you already have!Sat, 25 Dec 2010 00:00:00 GMTHash Trickshttps://snakeshands.com/blog/hash_tricks/https://snakeshands.com/blog/hash_tricks/Use and abuse Ruby's hashes for fun and concision.Fri, 24 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – TSorthttps://snakeshands.com/blog/ruby_standard_library_tsort/https://snakeshands.com/blog/ruby_standard_library_tsort/Learn how to perform a topological sort by reading the source. It's worth it.Wed, 22 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – MiniTest::Mockhttps://snakeshands.com/blog/ruby_standard_library_minitest_mock/https://snakeshands.com/blog/ruby_standard_library_minitest_mock/If you're going to use a mock, learn how it works.Sat, 18 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – Shellwordshttps://snakeshands.com/blog/ruby_standard_library_shellwords/https://snakeshands.com/blog/ruby_standard_library_shellwords/Read other people's regular expressions for great fun.Tue, 14 Dec 2010 00:00:00 GMTGetting to Know the Ruby Standard Library – MiniTesthttps://snakeshands.com/blog/ruby_standard_library_mini_test/https://snakeshands.com/blog/ruby_standard_library_mini_test/Read MiniTest and learn a bit in the process!Fri, 10 Dec 2010 00:00:00 GMT