<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>&lt;jack&gt;</title>
    <link>https://www.jackchristensen.com/</link>
    <description>Recent content on &lt;jack&gt;</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 26 Sep 2020 00:00:00 +0000</lastBuildDate><atom:link href="https://www.jackchristensen.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Improving SQL Tests with Doppelgänger and Canary Data</title>
      <link>https://www.jackchristensen.com/2020/09/26/improving-sql-tests-with-doppelganger-and-canary-data.html</link>
      <pubDate>Sat, 26 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2020/09/26/improving-sql-tests-with-doppelganger-and-canary-data.html</guid>
      <description>SQL statements can appear to work correctly in development and testing but fail catastrophically in production</description>
    </item>
    
    <item>
      <title>Sharpening the Axe is Doubly Important In Software Development</title>
      <link>https://www.jackchristensen.com/2020/08/01/sharpening-the-axe.html</link>
      <pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2020/08/01/sharpening-the-axe.html</guid>
      <description>The ancients recognized the wisdom of sharpening one&amp;rsquo;s tools. It is especially important in software development</description>
    </item>
    
    <item>
      <title>When To Use PostgreSQL Enums</title>
      <link>https://www.jackchristensen.com/2020/04/18/when-to-use-postgresql-enums.html</link>
      <pubDate>Sat, 18 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2020/04/18/when-to-use-postgresql-enums.html</guid>
      <description>PostgreSQL enums should be used for values that directly impact application control flow.</description>
    </item>
    
    <item>
      <title>The Context Overridable Global Pattern in Go</title>
      <link>https://www.jackchristensen.com/2020/04/11/the-context-overridable-global-pattern-in-go.html</link>
      <pubDate>Sat, 11 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2020/04/11/the-context-overridable-global-pattern-in-go.html</guid>
      <description>Contexts and global variables mitigate each others weakness.</description>
    </item>
    
    <item>
      <title>Simple Enums in Ruby with the meta_enum Gem</title>
      <link>https://www.jackchristensen.com/2018/02/04/simple-enums-in-ruby-with-meta-enum.html</link>
      <pubDate>Sun, 04 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2018/02/04/simple-enums-in-ruby-with-meta-enum.html</guid>
      <description>Ruby does not have a built-in enum type. The meta_enum gem can fill the gap.</description>
    </item>
    
    <item>
      <title>Simple PostgreSQL Upgrades in Development</title>
      <link>https://www.jackchristensen.com/2017/08/08/simple-postgresql-upgrades-in-development.html</link>
      <pubDate>Tue, 08 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2017/08/08/simple-postgresql-upgrades-in-development.html</guid>
      <description>Upgrading a production PostgreSQL server can be a complex and delicate process. But in a development environment downtime is not an issue and database size is typically fairly small. For these cases performing the same upgrade process as production can be overkill. There is a simpler way.</description>
    </item>
    
    <item>
      <title>Development of a Simple Command Line Websocket Client</title>
      <link>https://www.jackchristensen.com/2016/09/08/development-of-a-simple-command-line-websocket-client.html</link>
      <pubDate>Thu, 08 Sep 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2016/09/08/development-of-a-simple-command-line-websocket-client.html</guid>
      <description>While working on the Websocket Shootout, I frequently needed to connect to a websocket server and interact directly. None of the existing tools I was aware of had exactly the features I was wanted. That led to the creation of ws.</description>
    </item>
    
    <item>
      <title>Modeling Polymorphic Associations in a Relational Database</title>
      <link>https://www.jackchristensen.com/2016/07/07/modeling-polymorphic-associations-in-a-relational-database.html</link>
      <pubDate>Thu, 07 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2016/07/07/modeling-polymorphic-associations-in-a-relational-database.html</guid>
      <description>Polymorphic associations can be difficult to correctly represent in a relational database. In this post I will compare and contrast four different ways to model these challenging relationships.</description>
    </item>
    
    <item>
      <title>Custom Aggregates in PostgreSQL</title>
      <link>https://www.jackchristensen.com/2016/02/15/custom-aggregates-in-postgresql.html</link>
      <pubDate>Mon, 15 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2016/02/15/custom-aggregates-in-postgresql.html</guid>
      <description>Given a bank account of debit and credit transactions, what is the greatest balance the account ever had? Given a hotel with arrivals and departures, what is the greatest number of guests the hotel ever had? Both of these are examples of finding the greatest running total. Finding the greatest running total is a great exercise with which to explore some of the lesser known features of PostgreSQL such as window functions, custom aggregates, and C functions.</description>
    </item>
    
    <item>
      <title>Switch vs. Map: Which is the Better Way to Branch in Go?</title>
      <link>https://www.jackchristensen.com/2015/12/28/switch-vs-map-which-is-the-better-way-to-branch-in-go.html</link>
      <pubDate>Mon, 28 Dec 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2015/12/28/switch-vs-map-which-is-the-better-way-to-branch-in-go.html</guid>
      <description>This article compares the performance of map lookup and switch statements in Go?</description>
    </item>
    
    <item>
      <title>Materialized View Strategies Using PostgreSQL</title>
      <link>https://www.jackchristensen.com/2015/04/23/materialized-view-strategies-using-postgresql.html</link>
      <pubDate>Thu, 23 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2015/04/23/materialized-view-strategies-using-postgresql.html</guid>
      <description>Queries returning aggregate, summary, and computed data are frequently used in application development. Sometimes these queries are not fast enough. Caching query results using Memcached or Redis is a common approach for resolving these performance issues. However, these bring their own challenges. Before reaching for an external tool it is worth examining what techniques PostgreSQL offers for caching query results.</description>
    </item>
    
    <item>
      <title>About</title>
      <link>https://www.jackchristensen.com/page/about.html</link>
      <pubDate>Fri, 03 Apr 2015 02:13:50 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/page/about.html</guid>
      <description>About Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec dolor in magna lobortis egestas. Suspendisse eu erat tempor, tristique neque eu, convallis nulla. Curabitur vel bibendum lacus, at semper mauris. Suspendisse aliquet commodo ex, sed sagittis metus aliquam id. Maecenas feugiat rutrum lorem vel imperdiet. Nullam ornare lectus ut enim finibus, et porttitor mi tincidunt. Aenean lacinia, leo quis vehicula eleifend, quam libero sagittis erat, at euismod augue mauris et sapien.</description>
    </item>
    
    <item>
      <title>Contact</title>
      <link>https://www.jackchristensen.com/page/contact.html</link>
      <pubDate>Fri, 03 Apr 2015 02:13:50 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/page/contact.html</guid>
      <description>Contact Aenean ipsum justo, semper eu nisl ut, pretium tincidunt sem. Praesent et diam sit amet lacus lobortis dictum a id lacus. Quisque hendrerit sit amet turpis eu varius. Ut id lorem ac felis ultrices tincidunt. Pellentesque consequat arcu ac fringilla imperdiet. Phasellus pellentesque, sapien non pulvinar blandit, sapien ante aliquet felis, vel porttitor sapien ante in lacus. Fusce non urna aliquet, malesuada nibh vel, luctus urna. Phasellus ut lacus molestie, varius purus quis, malesuada lorem.</description>
    </item>
    
    <item>
      <title>16 Tips from the 2014 Winter Miniconf</title>
      <link>https://www.jackchristensen.com/2014/12/18/16-tips-from-the-2014-winter-miniconf.html</link>
      <pubDate>Thu, 18 Dec 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2014/12/18/16-tips-from-the-2014-winter-miniconf.html</guid>
      <description>Hashrocket hosts an internal conference twice a year called Miniconf where we take a day to share ideas with each other. This last Miniconf I gave a quick 20 minute talk with a grab bag of Linux, shell, PostgreSQL, and Ruby tricks. This article is that talk converted to text format.</description>
    </item>
    
    <item>
      <title>React2FS - React to File System Changes</title>
      <link>https://www.jackchristensen.com/2014/10/04/react2fs-react-to-file-system-changes.html</link>
      <pubDate>Sat, 04 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2014/10/04/react2fs-react-to-file-system-changes.html</guid>
      <description>React to file system changes by executing a command</description>
    </item>
    
    <item>
      <title>Go Performance Observations</title>
      <link>https://www.jackchristensen.com/2014/08/07/go-performance-observations.html</link>
      <pubDate>Thu, 07 Aug 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2014/08/07/go-performance-observations.html</guid>
      <description>In the course of optimizing the pgx PostgreSQL driver I observed a number of performance characteristics of Go that I hope you will find useful.</description>
    </item>
    
    <item>
      <title>Tern 1.0.0 Released</title>
      <link>https://www.jackchristensen.com/2014/04/19/tern-1-0-0-released.html</link>
      <pubDate>Sat, 19 Apr 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2014/04/19/tern-1-0-0-released.html</guid>
      <description>New release of Tern rewritten in Go</description>
    </item>
    
    <item>
      <title>Writable Common Table Expressions</title>
      <link>https://www.jackchristensen.com/2013/08/18/writable-common-table-expressions.html</link>
      <pubDate>Sun, 18 Aug 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2013/08/18/writable-common-table-expressions.html</guid>
      <description>Writable common table expressions are a powerful feature of PostgreSQL that is rarely used when building applications with an ORM like ActiveRecord. It allows inserts, updates, and deletes to be performed in the WITH clause of an SQL statement. Here are a few techniques that I have found useful.</description>
    </item>
    
    <item>
      <title>Surus 0.4.0 Released</title>
      <link>https://www.jackchristensen.com/2013/02/22/surus-0-4-0-released.html</link>
      <pubDate>Fri, 22 Feb 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2013/02/22/surus-0-4-0-released.html</guid>
      <description>Surus now can use PostgreSQL&amp;rsquo;s JSON functions to build JSON much faster than Rails to_json</description>
    </item>
    
    <item>
      <title>Faster JSON Generation with PostgreSQL</title>
      <link>https://www.jackchristensen.com/2013/01/29/faster-json-generation-with-postgresql.html</link>
      <pubDate>Tue, 29 Jan 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2013/01/29/faster-json-generation-with-postgresql.html</guid>
      <description>A new feature in PostgreSQL 9.2 is JSON support. It includes a JSON data type and two JSON functions. These allow us to return JSON directly from the database server. This article covers how it is done and includes a benchmark comparing it with traditional Rails JSON generation techniques.</description>
    </item>
    
    <item>
      <title>Text Tunnel - Remote Text Editing</title>
      <link>https://www.jackchristensen.com/2012/08/25/text-tunnel-remote-text-editing.html</link>
      <pubDate>Sat, 25 Aug 2012 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2012/08/25/text-tunnel-remote-text-editing.html</guid>
      <description>Use your favorite GUI text editor on remote servers over SSH.</description>
    </item>
    
    <item>
      <title>Surus - PostgreSQL Acceleration for ActiveRecord</title>
      <link>https://www.jackchristensen.com/2012/02/16/surus-postgresql-extensions-for-active-record.html</link>
      <pubDate>Thu, 16 Feb 2012 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2012/02/16/surus-postgresql-extensions-for-active-record.html</guid>
      <description>Accelerate ActiveRecord with PostgreSQL specific support</description>
    </item>
    
    <item>
      <title>tern - The SQL Fan&#39;s Migrator</title>
      <link>https://www.jackchristensen.com/2011/02/07/tern-the-sql-fans-migrator.html</link>
      <pubDate>Mon, 07 Feb 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2011/02/07/tern-the-sql-fans-migrator.html</guid>
      <description>New gem to simplify complex database schema migrations</description>
    </item>
    
    <item>
      <title>tod - Time of Day for Ruby</title>
      <link>https://www.jackchristensen.com/2010/11/29/tod-time-of-day-for-ruby.html</link>
      <pubDate>Mon, 29 Nov 2010 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2010/11/29/tod-time-of-day-for-ruby.html</guid>
      <description>New gem to simplify time of day handling</description>
    </item>
    
    <item>
      <title>assert_db_rejects - Test database constraints in Ruby on Rails</title>
      <link>https://www.jackchristensen.com/2009/11/14/assert-db-rejects-new-rails-test-plugin.html</link>
      <pubDate>Sat, 14 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2009/11/14/assert-db-rejects-new-rails-test-plugin.html</guid>
      <description>A simple gem plugin for testing database constraints.</description>
    </item>
    
    <item>
      <title>Solving a Math Puzzle with Ruby</title>
      <link>https://www.jackchristensen.com/2009/08/08/solving-a-math-puzzle-with-ruby.html</link>
      <pubDate>Sat, 08 Aug 2009 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2009/08/08/solving-a-math-puzzle-with-ruby.html</guid>
      <description>A math puzzle from The Art of Game Design by Jesse Schell is solved with Ruby.</description>
    </item>
    
    <item>
      <title>Linksys WRT54G2 Connection Problems Solved by DD-WRT</title>
      <link>https://www.jackchristensen.com/2009/07/11/linksys-wrt54g2-connection-problems-solved-by-dd-wrt.html</link>
      <pubDate>Sat, 11 Jul 2009 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2009/07/11/linksys-wrt54g2-connection-problems-solved-by-dd-wrt.html</guid>
      <description>Random internet connection loss was solved by installing DD-WRT.</description>
    </item>
    
    <item>
      <title>Selenium Broken by Firefox Upgrade on Ubuntu</title>
      <link>https://www.jackchristensen.com/2009/06/22/selenium-broken-by-firefox-upgrade-on-ubuntu.html</link>
      <pubDate>Mon, 22 Jun 2009 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2009/06/22/selenium-broken-by-firefox-upgrade-on-ubuntu.html</guid>
      <description>The path to the Firefox binary changes on upgrade. This can break Selenium.</description>
    </item>
    
    <item>
      <title>Ruby 1.9 Development with Windows, VirtualBox, and Ubuntu</title>
      <link>https://www.jackchristensen.com/2009/06/20/ruby-19-on-windows-7-virtualbox-and-ubuntu.html</link>
      <pubDate>Sat, 20 Jun 2009 00:00:00 +0000</pubDate>
      
      <guid>https://www.jackchristensen.com/2009/06/20/ruby-19-on-windows-7-virtualbox-and-ubuntu.html</guid>
      <description>Ruby is more at home on *nix than on Windows. This tutorial covers setting up a Windows machine as a VM host, installing an Ubuntu VM, building Ruby 1.9, and setting up file sharing between Windows and the VM.</description>
    </item>
    
  </channel>
</rss>
