<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Snake’s Hands</title><description>Adam Sanderson plays around</description><link>https://snakeshands.com/</link><item><title>AI Curb Cuts</title><link>https://snakeshands.com/blog/ai_curb_cuts/</link><guid isPermaLink="true">https://snakeshands.com/blog/ai_curb_cuts/</guid><description>Much of what is good for AI, is good for humans as well.</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Building Custom Form Elements</title><link>https://snakeshands.com/blog/custom_form_elements/</link><guid isPermaLink="true">https://snakeshands.com/blog/custom_form_elements/</guid><description>Let&apos;s see what we can learn by building a little web component</description><pubDate>Sun, 11 May 2025 00:00:00 GMT</pubDate></item><item><title>Asides in Astro Markdown</title><link>https://snakeshands.com/blog/til_asides_in_astro/</link><guid isPermaLink="true">https://snakeshands.com/blog/til_asides_in_astro/</guid><description>Thanks to remark, it&apos;s easy to customize how Markdown is processed</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Loss Aversion Is All You Need</title><link>https://snakeshands.com/blog/oops/</link><guid isPermaLink="true">https://snakeshands.com/blog/oops/</guid><description>Some mistakes can be quite liberating</description><pubDate>Sun, 23 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Brook, A Feed Reader</title><link>https://snakeshands.com/blog/brook_a_feed_reader/</link><guid isPermaLink="true">https://snakeshands.com/blog/brook_a_feed_reader/</guid><description>Building a feed reader into Firefox.</description><pubDate>Fri, 12 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Reading Rails - HTTP DELETEs With a Link</title><link>https://snakeshands.com/blog/reading_rails_http_delete_with_a_link/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_http_delete_with_a_link/</guid><description>Exploring how Rails, Rails-UJS, and Rack work together to enable HTTP DELETEs.</description><pubDate>Mon, 16 May 2016 00:00:00 GMT</pubDate></item><item><title>The Constructive No</title><link>https://snakeshands.com/blog/the_constructive_no/</link><guid isPermaLink="true">https://snakeshands.com/blog/the_constructive_no/</guid><description>No is a gift if presented thoughtfully.</description><pubDate>Mon, 16 Nov 2015 00:00:00 GMT</pubDate></item><item><title>Finding and Fixing Frustrating Tests</title><link>https://snakeshands.com/blog/finding_and_fixing_frustrating_tests/</link><guid isPermaLink="true">https://snakeshands.com/blog/finding_and_fixing_frustrating_tests/</guid><description>Track down some common ways tests fail due to unexpected interaction.</description><pubDate>Mon, 02 Nov 2015 00:00:00 GMT</pubDate></item><item><title>Testing a Little More</title><link>https://snakeshands.com/blog/testing_a_little_more/</link><guid isPermaLink="true">https://snakeshands.com/blog/testing_a_little_more/</guid><description>Start testing a little more with verification tests.</description><pubDate>Tue, 27 Oct 2015 00:00:00 GMT</pubDate></item><item><title>The Test That Cried Fail</title><link>https://snakeshands.com/blog/the_test_that_cried_fail/</link><guid isPermaLink="true">https://snakeshands.com/blog/the_test_that_cried_fail/</guid><description>Isolate indeterminate test behavior.</description><pubDate>Sun, 18 Oct 2015 00:00:00 GMT</pubDate></item><item><title>HasDefaultAssociations</title><link>https://snakeshands.com/blog/has_default_associations/</link><guid isPermaLink="true">https://snakeshands.com/blog/has_default_associations/</guid><description>Simplify your relations with HasDefaultAssociations.</description><pubDate>Mon, 17 Aug 2015 00:00:00 GMT</pubDate></item><item><title>Reading Ruby - Minitest&apos;s Plugin System</title><link>https://snakeshands.com/blog/reading_ruby_minitest_plugin_system/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_ruby_minitest_plugin_system/</guid><description>Let&apos;s read Minitest&apos;s source!</description><pubDate>Fri, 03 Apr 2015 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Time Travel</title><link>https://snakeshands.com/blog/reading_rails_time_travel/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_time_travel/</guid><description>How does Time Travel work in Rails? Let&apos;s find out!</description><pubDate>Sun, 15 Mar 2015 00:00:00 GMT</pubDate></item><item><title>Ruby Ducks - Serialization Duck Type</title><link>https://snakeshands.com/blog/ruby_ducks_serialization_duck_type/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_ducks_serialization_duck_type/</guid><description>Apply duck typing to serialization.</description><pubDate>Sun, 31 Aug 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - TimeWithZone</title><link>https://snakeshands.com/blog/reading_rails_time_with_zone/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_time_with_zone/</guid><description>Let&apos;s read the Rails source to see how TimeWithZone works.</description><pubDate>Wed, 27 Aug 2014 00:00:00 GMT</pubDate></item><item><title>MetaRuby - Calling and Receiving Methods</title><link>https://snakeshands.com/blog/metaruby_calling_and_receiving_methods/</link><guid isPermaLink="true">https://snakeshands.com/blog/metaruby_calling_and_receiving_methods/</guid><description>Let&apos;s play with meta programming!</description><pubDate>Thu, 19 Jun 2014 00:00:00 GMT</pubDate></item><item><title>Defense Against the Dark Art of Estimation Bargaining</title><link>https://snakeshands.com/blog/estimation_bargaining/</link><guid isPermaLink="true">https://snakeshands.com/blog/estimation_bargaining/</guid><description>How to spot and stop &apos;Estimation Bargaining&apos; — because nobody wins when deadlines are just wishful thinking!</description><pubDate>Tue, 17 Jun 2014 00:00:00 GMT</pubDate></item><item><title>MetaRuby - Monkeying With Methods</title><link>https://snakeshands.com/blog/metaruby_monkeying_with_methods/</link><guid isPermaLink="true">https://snakeshands.com/blog/metaruby_monkeying_with_methods/</guid><description>Introspect, call, bind, and wrap them with a bit of magic.</description><pubDate>Thu, 12 Jun 2014 00:00:00 GMT</pubDate></item><item><title>MetaRuby - Building Classes Dynamically</title><link>https://snakeshands.com/blog/building_classes_dynamically/</link><guid isPermaLink="true">https://snakeshands.com/blog/building_classes_dynamically/</guid><description>Make a factory to make your code for you.</description><pubDate>Wed, 28 May 2014 00:00:00 GMT</pubDate></item><item><title>MetaRuby - An Ounce of Meta</title><link>https://snakeshands.com/blog/metaruby_an_ounce_of_metaprogramming/</link><guid isPermaLink="true">https://snakeshands.com/blog/metaruby_an_ounce_of_metaprogramming/</guid><description>Write code to write code to write…</description><pubDate>Thu, 22 May 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - How Does MessageEncryptor Work?</title><link>https://snakeshands.com/blog/reading_rails_how_does_message_encryptor_work/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_how_does_message_encryptor_work/</guid><description>Read how MessageVerifier works, because learning is good for you.</description><pubDate>Mon, 19 May 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - How Does MessageVerifier Work?</title><link>https://snakeshands.com/blog/reading_rails_how_does_message_verifier_work/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_how_does_message_verifier_work/</guid><description>It&apos;s only magic if you don&apos;t read the code.</description><pubDate>Sat, 10 May 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - How Do Batched Queries Work?</title><link>https://snakeshands.com/blog/reading_rails_how_do_batched_queries_work/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_how_do_batched_queries_work/</guid><description>Read some Rails code and learn about Ruby in the process.</description><pubDate>Mon, 05 May 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - The Adapter Pattern</title><link>https://snakeshands.com/blog/reading_rails_the_adapter_pattern/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_the_adapter_pattern/</guid><description>Read the rails source, learn a design pattern.</description><pubDate>Tue, 25 Feb 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Errors and Validators</title><link>https://snakeshands.com/blog/reading_rails_errors_and_validators/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_errors_and_validators/</guid><description>Read up on error handling so the errors don&apos;t handle you.</description><pubDate>Wed, 29 Jan 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - How Validations Are Configured</title><link>https://snakeshands.com/blog/reading_rails_validations/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_validations/</guid><description>Who validates the validators? We do, now let&apos;s start reading.</description><pubDate>Sun, 12 Jan 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Concern</title><link>https://snakeshands.com/blog/reading_rails_concern/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_concern/</guid><description>Read some source code, discern the subtle value of Concern.</description><pubDate>Mon, 06 Jan 2014 00:00:00 GMT</pubDate></item><item><title>Reading Rails - More Migrations</title><link>https://snakeshands.com/blog/reading_rails_more_migrations/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_more_migrations/</guid><description>Read the source and understand more about migrations, it&apos;s even more worth it.</description><pubDate>Tue, 31 Dec 2013 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Migrations</title><link>https://snakeshands.com/blog/reading_rails_migrations/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_migrations/</guid><description>Read the source and understand migrations, it&apos;s worth it.</description><pubDate>Wed, 18 Dec 2013 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Attribute Methods</title><link>https://snakeshands.com/blog/reading_rails_attribute_methods/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_attribute_methods/</guid><description>Magic attributes cease to be magical under a close reading of the source.</description><pubDate>Sun, 08 Dec 2013 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Change Tracking</title><link>https://snakeshands.com/blog/reading_rails_change_tracking/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_change_tracking/</guid><description>It&apos;s only magic if you don&apos;t read the source.</description><pubDate>Thu, 28 Nov 2013 00:00:00 GMT</pubDate></item><item><title>Reading Rails - Handling Exceptions</title><link>https://snakeshands.com/blog/reading_rails_handling_exceptions/</link><guid isPermaLink="true">https://snakeshands.com/blog/reading_rails_handling_exceptions/</guid><description>Learn how Rails uses metaprogramming so your app doesn&apos;t crash</description><pubDate>Thu, 21 Nov 2013 00:00:00 GMT</pubDate></item><item><title>Ruby Metric Adapter</title><link>https://snakeshands.com/blog/metric_adapter/</link><guid isPermaLink="true">https://snakeshands.com/blog/metric_adapter/</guid><description>A tiny adapter to help you write better code.</description><pubDate>Tue, 09 Jul 2013 00:00:00 GMT</pubDate></item><item><title>Hierarchies With Rails</title><link>https://snakeshands.com/blog/hierarchies_with_rails/</link><guid isPermaLink="true">https://snakeshands.com/blog/hierarchies_with_rails/</guid><description>Implement and manipulate materialized path hierarchies in ActiveRecord with Postgres.</description><pubDate>Wed, 12 Jun 2013 00:00:00 GMT</pubDate></item><item><title>Aggregating Hierarchies With Postgres</title><link>https://snakeshands.com/blog/aggregating_hierarchies_with_postgres/</link><guid isPermaLink="true">https://snakeshands.com/blog/aggregating_hierarchies_with_postgres/</guid><description>Aggregate hierarchical data in PostgreSQL using materialized paths.</description><pubDate>Wed, 22 May 2013 00:00:00 GMT</pubDate></item><item><title>Hierarchies With Postgres</title><link>https://snakeshands.com/blog/hierarchies_with_postgres/</link><guid isPermaLink="true">https://snakeshands.com/blog/hierarchies_with_postgres/</guid><description>Model hierarchical data in Postgres using materialized paths with arrays.</description><pubDate>Sun, 12 May 2013 00:00:00 GMT</pubDate></item><item><title>When Files Change – Simple Automation</title><link>https://snakeshands.com/blog/when_files_change/</link><guid isPermaLink="true">https://snakeshands.com/blog/when_files_change/</guid><description>When files change something should happen.  Now it does.</description><pubDate>Thu, 09 May 2013 00:00:00 GMT</pubDate></item><item><title>Tagging With ActiveRecord and Postgres</title><link>https://snakeshands.com/blog/tagging_with_active_record_and_postgres/</link><guid isPermaLink="true">https://snakeshands.com/blog/tagging_with_active_record_and_postgres/</guid><description>Use Postgres arrays to implement tagging in a Rails application.</description><pubDate>Thu, 02 May 2013 00:00:00 GMT</pubDate></item><item><title>Postgres, The Best Tool You&apos;re Already Using</title><link>https://snakeshands.com/blog/postgres_railsconf2013/</link><guid isPermaLink="true">https://snakeshands.com/blog/postgres_railsconf2013/</guid><description>I got to present at RailsConf!</description><pubDate>Wed, 01 May 2013 00:00:00 GMT</pubDate></item><item><title>Ivy - Bound JavaScript</title><link>https://snakeshands.com/blog/ivy_data_binding_in_javascript/</link><guid isPermaLink="true">https://snakeshands.com/blog/ivy_data_binding_in_javascript/</guid><description>The best knockout knock off I&apos;ve ever written.</description><pubDate>Sat, 14 Jul 2012 00:00:00 GMT</pubDate></item><item><title>The Strange Ruby Splat</title><link>https://snakeshands.com/blog/the_strange_ruby_splat/</link><guid isPermaLink="true">https://snakeshands.com/blog/the_strange_ruby_splat/</guid><description>Splat!</description><pubDate>Fri, 21 Jan 2011 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – Delegator</title><link>https://snakeshands.com/blog/ruby_standard_library_delegator/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_delegator/</guid><description>Explore Ruby’s Delegator and the Proxy pattern.</description><pubDate>Tue, 18 Jan 2011 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – WeakRef</title><link>https://snakeshands.com/blog/ruby_standard_library_weakref/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_weakref/</guid><description>Objects, loosely held.</description><pubDate>Sun, 09 Jan 2011 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – Timeout</title><link>https://snakeshands.com/blog/ruby_standard_library_timeout/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_timeout/</guid><description>Read some source code, until you timeout.</description><pubDate>Fri, 31 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – Pathname</title><link>https://snakeshands.com/blog/ruby_standard_library_pathname/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_pathname/</guid><description>Learn how the Pathname library works and how to use it.</description><pubDate>Tue, 28 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – Abbrev</title><link>https://snakeshands.com/blog/ruby_standard_library_abbrev/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_abbrev/</guid><description>Make use of the tools you already have!</description><pubDate>Sat, 25 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Hash Tricks</title><link>https://snakeshands.com/blog/hash_tricks/</link><guid isPermaLink="true">https://snakeshands.com/blog/hash_tricks/</guid><description>Use and abuse Ruby&apos;s hashes for fun and concision.</description><pubDate>Fri, 24 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – TSort</title><link>https://snakeshands.com/blog/ruby_standard_library_tsort/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_tsort/</guid><description>Learn how to perform a topological sort by reading the source.  It&apos;s worth it.</description><pubDate>Wed, 22 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – MiniTest::Mock</title><link>https://snakeshands.com/blog/ruby_standard_library_minitest_mock/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_minitest_mock/</guid><description>If you&apos;re going to use a mock, learn how it works.</description><pubDate>Sat, 18 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – Shellwords</title><link>https://snakeshands.com/blog/ruby_standard_library_shellwords/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_shellwords/</guid><description>Read other people&apos;s regular expressions for great fun.</description><pubDate>Tue, 14 Dec 2010 00:00:00 GMT</pubDate></item><item><title>Getting to Know the Ruby Standard Library – MiniTest</title><link>https://snakeshands.com/blog/ruby_standard_library_mini_test/</link><guid isPermaLink="true">https://snakeshands.com/blog/ruby_standard_library_mini_test/</guid><description>Read MiniTest and learn a bit in the process!</description><pubDate>Fri, 10 Dec 2010 00:00:00 GMT</pubDate></item></channel></rss>