<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Zetetic Blog</title>
    <link>http://zetetic.net/rss/</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Zetetic Software Design and Development Blog</description>
    
    
        <item>
          <title>Tempo Maintenance Tonight, Sept 1st 11PM EDT</title>
          <description>&lt;p&gt;For customers of our time-tracking system, &lt;a href=&quot;http://keeptempo.com&quot;&gt;Tempo&lt;/a&gt;, the web interface will be temporarily unavailable starting at &lt;a href=&quot;http://www.timeanddate.com/worldclock/fixedtime.html?month=9&amp;amp;day=1&amp;amp;year=2010&amp;amp;hour=23&amp;amp;min=0&amp;amp;sec=0&amp;amp;p1=179&quot;&gt;11PM &lt;span class=&quot;caps&quot;&gt;EDT&lt;/span&gt; tonight&lt;/a&gt;, Wednesday September 1st.&lt;/p&gt;
&lt;p&gt;Just a couple of small fixes, service should only be offline for a few minutes while we make sure nothing&amp;#8217;s amiss. Reporting time entries via Twitter and Email will continue to function without interruption.&lt;/p&gt;</description>
          <pubDate>Wed, 01 Sep 2010 14:00:32 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/09/01/tempo-maintenance-tonight-sept-1st-11pm-edt/</guid>
          <link>http://zetetic.net/blog/2010/09/01/tempo-maintenance-tonight-sept-1st-11pm-edt/</link>
        </item>
    
        <item>
          <title>On the Subject of Online Backup for Strip </title>
          <description>&lt;p&gt;We&amp;#8217;ve received a few requests recently to provide an online or cloud-based backup/sync solution for our password manager &lt;a href=&quot;http://getstrip.com&quot;&gt;Strip&lt;/a&gt;, in particular as to whether we plan to add an integration with &lt;a href=&quot;http://dropbox.com&quot;&gt;Dropbox&lt;/a&gt;, so we figured now is a good time to provide a statement with regards to what direction we&amp;#8217;re going.&lt;/p&gt;
&lt;p&gt;We do not have plans to provide an integration with Dropbox for Strip at this time. While we agree an online backup would a really cool and useful feature, we&amp;#8217;re uncomfortable with tying a core part of the product to another service that might change without consultation. That&amp;#8217;s not to say anything at all about the utility or stability of Dropbox (it&amp;#8217;s a really useful service done very well), but decisions made at Dropbox will always be out of our control.&lt;/p&gt;
&lt;p&gt;Any online backup would require that the database file be stored remotely in an unknown location, with unknown security risks. That scenario makes us and many of our customers nervous, so we are reluctant to move in this direction without serious planning and risk evaluation.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ll continue to investigate the possibility of an online backup for Strip, but in the mean time, Strip can be backed up to the desktop with &lt;a href=&quot;http://getstrip.com&quot;&gt;Strip Sync&lt;/a&gt;, providing &lt;strong&gt;multi-device replication&lt;/strong&gt;. Our implementation requires authentication, and the files are always encrypted and secured on your local computers.&lt;/p&gt;</description>
          <pubDate>Mon, 16 Aug 2010 11:25:21 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/08/16/on-the-subject-of-online-backup-for-strip/</guid>
          <link>http://zetetic.net/blog/2010/08/16/on-the-subject-of-online-backup-for-strip/</link>
        </item>
    
        <item>
          <title>Strip 1.4.8 Released</title>
          <description>&lt;p&gt;A new update to Strip, our &lt;a href=&quot;http://getstrip.com&quot;&gt;password manager for the iPhone&lt;/a&gt;, has been approved by the Apple iTunes App Store, version 1.4.8. This is mostly a bug-fix release for version 1.4.7, and makes the changes list below. While this is a minor update, &lt;strong&gt;all users are strongly recommended to backup their data and update to the latest version&lt;/strong&gt; to ensure compatibility with future versions of Strip.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Fixes crash on auto-save of Note during fast-app switching on iOS 4.&lt;/li&gt;
	&lt;li&gt;Autosave is now enabled when editing Notes with a hardware keyboard.&lt;/li&gt;
	&lt;li&gt;Displays &lt;span class=&quot;caps&quot;&gt;GUID&lt;/span&gt; of data entities to facilitate sync support requests and debugging.&lt;/li&gt;
	&lt;li&gt;Corrects icon display on import.&lt;/li&gt;
	&lt;li&gt;Fixes a couple of &lt;span class=&quot;caps&quot;&gt;NIB&lt;/span&gt;-related crashes introduced by iOS4.&lt;/li&gt;
	&lt;li&gt;Corrects a typo in one of the dialog prompts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More updates are on the way, but they&amp;#8217;re still a few weeks out, so make sure you get the latest and greatest. [ Get it on &lt;a href=&quot;http://zetetic.net/products/strip/its-strip&quot;&gt;iTunes&lt;/a&gt; ]&lt;/p&gt;</description>
          <pubDate>Tue, 13 Jul 2010 12:48:15 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/07/13/strip-1-4-8-released/</guid>
          <link>http://zetetic.net/blog/2010/07/13/strip-1-4-8-released/</link>
        </item>
    
        <item>
          <title>Announcing Strip Sync for Mac OS X and Windows</title>
          <description>&lt;p&gt;&lt;img src=&quot;http://getstrip.com/images/screen-stripsync-windows.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As many of our customers have already noticed, we&amp;#8217;ve made &lt;a href=&quot;http://getstrip.com/strip-sync&quot;&gt;Strip Sync for Mac OS X and Windows&lt;/a&gt; generally available. It serves as a free a companion utility to &lt;a href=&quot;http://getstrip.com&quot;&gt;Strip 1.4 for iOS&lt;/a&gt;, the first version of Strip to support our new Sync feature. More accurately, Strip supports multi-device replication, allowing you to safely replicate your data across any number of devices&lt;sup class=&quot;footnote&quot;&gt;&lt;a href=&quot;#fn1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Strip is the first password manager we know of with this kind of awesome and &lt;em&gt;lightning&lt;/em&gt; fast sync system.&lt;/p&gt;
&lt;p&gt;No longer will our dear customers be relying on and subsequently let down by iTunes for backups and data recovery. Every time you sync your device with Strip Sync, a backup copy of the local database on your desktop is taken for you. You can revert to any of your backups at any time, and the sync service also provides authoritative data restore.&lt;/p&gt;
&lt;p&gt;Strip Sync also provides &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt; import and export. This allows you to export your database to a spreadsheet that you could print and store in a safe. It also allows you to bulk load new entries, and in the case of the Mac OS X version, you can do bulk updates as well (e.g. export the existing database to spreadsheet, make edits, and import the same sheet).&lt;/p&gt;
&lt;p&gt;Now that more folks are seeing what Strip Sync is – or rather, that it&amp;#8217;s not a full desktop port of Strip, thus the qualified name – we&amp;#8217;ve been getting questions about a full desktop port. We&amp;#8217;re working on it! It&amp;#8217;s next on the list, Strip Sync had to come first. You can expect minor updates to Strip Sync in the next few weeks as we make some minor improvements (and add bulk-updating to the Windows version).&lt;/p&gt;
&lt;p&gt;I should add that there a ton of other improvements to Strip itself in the 1.4 upgrade (free for those who&amp;#8217;ve purchased Strip already), including improvements to the display of data, the ability to work with stored data quickly (copying, launching, etc), and better performance to boot.&lt;/p&gt;
&lt;p&gt;With regard to iOS 4, things are looking pretty good so far. We have no plans at the moment to take advantage of new features in the &lt;span class=&quot;caps&quot;&gt;SDK&lt;/span&gt; just yet, as our primary concern is stability and compatibility. We do have upcoming improvements planned for the 1.4 version of Strip and if any bugs pop up we should be able to address them in forthcoming updates.&lt;/p&gt;
&lt;p class=&quot;footnote&quot; id=&quot;fn1&quot;&gt;&lt;sup&gt;1&lt;/sup&gt; When we have a chance, we&amp;#8217;re going to post an article about how this works and the technology behind it. Ditto, the replication library, will be made available as open-source software, as was done with our encryption engine &lt;a href=&quot;/code/sqlcipher&quot;&gt;SQLCipher&lt;/a&gt;, in order to facilitate peer-review and to encourage future innovations from other developers.&lt;/p&gt;</description>
          <pubDate>Wed, 30 Jun 2010 10:13:53 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/30/announcing-strip-sync-for-mac-os-x-and-windows/</guid>
          <link>http://zetetic.net/blog/2010/06/30/announcing-strip-sync-for-mac-os-x-and-windows/</link>
        </item>
    
        <item>
          <title>Github Auto-Generates QR Codes for Android Apps</title>
          <description>&lt;p&gt;Imagine how cool it would be &lt;a href=&quot;http://github.com/blog/665-apk-downloads-for-android-projects&quot;&gt;if we had this&lt;/a&gt; for the iPhone? Says Github:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For all you Android developers out there, we now will automatically detect when you upload an Android package (.apk) file and will give you a QR code page link on your download page list&amp;#8230;. Now you can scan that with your Android phone to automatically download and install that package.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As a hacker, that makes me straight-up jealous. I ordered my iPhone 4, but I&amp;#8217;m not going to lie, I sweat this stuff.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://flavors.me/akaalias&quot;&gt;Alexis Rondeau&lt;/a&gt; tells me that you need to configure the Market app to allow this behavior explicitly. I&amp;#8217;ll take it.&lt;/p&gt;</description>
          <pubDate>Wed, 23 Jun 2010 13:45:41 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/23/github-auto-generates-qr-codes-for-android-apps/</guid>
          <link>http://zetetic.net/blog/2010/06/23/github-auto-generates-qr-codes-for-android-apps/</link>
        </item>
    
        <item>
          <title>Tempo Update: release Macross replaces Voltron</title>
          <description>&lt;p&gt;Last night we delivered an update to &lt;strong&gt;Tempo&lt;/strong&gt;, &lt;a href=&quot;http://keeptempo.com&quot;&gt;our time-tracking service&lt;/a&gt;, called &lt;strong&gt;Macross&lt;/strong&gt;. The previous release version had been named &lt;strong&gt;Voltron&lt;/strong&gt; internally. The reason for naming them, beyond internal version control and tracking, is that we want to start providing some more communication going forward about what&amp;#8217;s on the road map for Tempo, and having names for the releases makes it a bit easier.&lt;/p&gt;
&lt;p&gt;In any event, Tempo release Macross went into production last night. It brings a number of badly needed performance improvements and runs off the latest and greatest stable version of Rails (2.3.8) &lt;span class=&quot;caps&quot;&gt;AND&lt;/span&gt; gets us off Ruby 1.8.6 (now we&amp;#8217;re on 1.8.7). In particular, users with very high numbers of projects and users will be happy to know that the management screens are way faster thanks to implementing some over-due pagination. There&amp;#8217;s still a lot more optimization we&amp;#8217;re planning to do, and we&amp;#8217;re starting to consider changes we might make to the UI on the Projects and Team screens to make them more useful, in particular for our larger account holders. If you&amp;#8217;ve got your own ideas, please &lt;a href=&quot;/contact&quot;&gt;get in touch&lt;/a&gt; and tell us what you&amp;#8217;d like to see.&lt;/p&gt;
&lt;p&gt;Another important update in last night&amp;#8217;s release was switching our Twitter &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; interaction over to OAuth from &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; Basic Authentication, due to their &lt;s&gt;upcoming switch-over on June 23rd&lt;/s&gt; now-postponed conversion to OAuth. Whenever they do make the switch, Tempo will continue to scoop up your time entries via direct messages to &lt;a href=&quot;http://twitter.com/keeptempo&quot;&gt;@keeptempo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Macross, named after the TV show &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Super_Dimension_Fortress_Macross&quot;&gt;Macross&lt;/a&gt; and the &lt;span class=&quot;caps&quot;&gt;SDF&lt;/span&gt;-1, is mainly a stepping stone, to move us off some really old tech and to better position us for further infrastructure upgrades and service and UI improvements. This is now the current version of Tempo.&lt;/p&gt;
&lt;p&gt;The next release, &lt;a href=&quot;http://en.wikipedia.org/wiki/Macross_Plus&quot;&gt;Macross Plus&lt;/a&gt;, is currently shaping up. The biggest thing I want to tackle there is moving Tempo to Rails 3; we anticipate that this will deliver some really great performance gains, as well as make on-going development far easier. We still need to firm up the list of other improvements and features that will be in Macross Plus – it will likely remain in flux, so it&amp;#8217;s not a contract, but I will post it soon.&lt;/p&gt;</description>
          <pubDate>Mon, 21 Jun 2010 13:31:22 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/21/tempo-update-release-macross-replaces-voltron/</guid>
          <link>http://zetetic.net/blog/2010/06/21/tempo-update-release-macross-replaces-voltron/</link>
        </item>
    
        <item>
          <title>Strip Sync Beta Update: Almost There</title>
          <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fixed bad link to the beta sign up.&lt;/p&gt;
&lt;p&gt;As many of our customers have noticed, Strip Sync is still in beta (you can &lt;a href=&quot;http://getstrip.com/strip-sync/beta&quot;&gt;sign up here&lt;/a&gt;). We have a few finishing touches to work out and a final set of builds to run through the beta before we declare it official. Y.T. has to update the documentation, as well. We are planning to do a public release early next week.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve just pushed an update to Strip Sync for Mac OS X (0.2.2), that we hope is a good if not final release candidate for that version. An update to Strip Sync for Windows is on the way to resolve many of the data import issues that were discovered in the last build (turns out that an &lt;span class=&quot;caps&quot;&gt;MSFT&lt;/span&gt; data adapter was behaving somewhat badly, and we&amp;#8217;ve got a fix on the way). This next update of the applications also provides a minor bug fix for multi-device replication.&lt;/p&gt;
&lt;p&gt;Both the Mac OS X and Windows versions of Strip Sync automatically check for signed updates, so you should only need to run the software and you&amp;#8217;ll be asked if you&amp;#8217;d like to download the latest and greatest.&lt;/p&gt;</description>
          <pubDate>Thu, 17 Jun 2010 13:56:52 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/17/strip-sync-beta-update-almost-there/</guid>
          <link>http://zetetic.net/blog/2010/06/17/strip-sync-beta-update-almost-there/</link>
        </item>
    
        <item>
          <title>Inconsolata - Excellent Coding Font</title>
          <description>&lt;p&gt;Recently I visited &lt;a href=&quot;http://0xfe.blogspot.com&quot;&gt;Mohit Muthanna&amp;#8217;s blog 0xFE&lt;/a&gt; for the first time (a great nerd tech read, subscribed!) and came across &lt;a href=&quot;http://0xfe.blogspot.com/2010/04/my-coding-font.html&quot;&gt;this post&lt;/a&gt; about his new favorite font for programming, Raph Levien&amp;#8217;s &lt;a href=&quot;http://www.levien.com/type/myfonts/inconsolata.html&quot;&gt;Inconsolata&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.levien.com/type/myfonts/inconsolata.html&quot;&gt;&lt;img src=&quot;/page_attachments/0000/0618/inconsolata-preview.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s super, super snazzy. Switched both TextMate and XCode over to it as my default, it&amp;#8217;s quite pleasant. I&amp;#8217;m not exactly a typography connoisseur, and while I&amp;#8217;ve looked at other mono-space fonts before as an alternative to my usual default of Monaco, this is the first I was ever tempted to really switch.&lt;/p&gt;
&lt;p&gt;Also, it&amp;#8217;s free. Apparently, variants of the font are &lt;a href=&quot;http://leonardo-m.livejournal.com/77079.html&quot;&gt;breeding rapidly&lt;/a&gt;, although I&amp;#8217;m not feeling any of them in particular. Also, I don&amp;#8217;t need straight-quotes, I think the quotes look just fantastic:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/page_attachments/0000/0620/inconsolata-xcode.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Many thanks to &lt;a href=&quot;http://www.levien.com/&quot;&gt;Raph&lt;/a&gt; for making this available! Check out the aforementioned home page, this Google engineer is quite an interesting character!&lt;/p&gt;</description>
          <pubDate>Thu, 17 Jun 2010 13:45:10 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/17/inconsolata---excellent-coding-font/</guid>
          <link>http://zetetic.net/blog/2010/06/17/inconsolata---excellent-coding-font/</link>
        </item>
    
        <item>
          <title>Custom URL Shortener for Google Analytics using Rack</title>
          <description>&lt;h2&gt;Rack::Zetetic::Campaign&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;A Rack-based &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; Shortener for Link Tracking&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re like us and you like to send out a newsletter once in a while about one of your new products – in particular if you&amp;#8217;re running promotional ad campaigns and your own marketing efforts – you&amp;#8217;ve probably tried tacking on Google&amp;#8217;s various &lt;code&gt;utm_.*&lt;/code&gt; variables to the URLs you are sending people. These are really handy in that Google&amp;#8217;s analytics code looks for these when users visit your website, allowing you to start tracking which of your ads, promos, and newsletters is performing well, and which are bombing.&lt;/p&gt;
&lt;p&gt;The only problem with this is that you end up trying to put links like this into emails, and they&amp;#8217;re long enough to be problematic on display, in particular in plain-text emails:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
Write a blog post about Strip telling us what you like and 
what you don't like, and we'll hook you up with a candy-
bar! Click here to learn more: (not an actual link)

http://getstrip.com/promos/blogging?utm_medium=email&amp;amp;utm_term=&amp;amp;utm_campaign=new+promotional+offer&amp;amp;utm_content=textlink&amp;amp;utm_source=newsletter&amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We&amp;#8217;ve all seen emails where that &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; gets garbled and cut into two lines.&lt;/p&gt;
&lt;p&gt;What we used to do for this was to employ a &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; shortener like bit.ly or tinyurl.com, resulting in links like &lt;code&gt;http://bit.ly/abc123&lt;/code&gt;. This solves the problem of munging, but brings on two new problems: your links are dependent on bit.ly always being available and working correctly, and they&amp;#8217;re not always easy to &amp;#8220;fix&amp;#8221; once they&amp;#8217;re out there. In particular if you decide to change up the various &lt;span class=&quot;caps&quot;&gt;UTM&lt;/span&gt; variables you&amp;#8217;re sending to Google Analytics. &lt;span class=&quot;caps&quot;&gt;PITA&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Suffice it to say, many sites are choosing to implement their own &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; shorteners to ensure their carefully crafted links don&amp;#8217;t rot, and we decided that we&amp;#8217;d do ours as &lt;a href=&quot;http://github.com/billymeltdown/rack-campaign/blob/master/lib/rack/zetetic/campaign.rb&quot;&gt;a tiny Rack application with a &lt;span class=&quot;caps&quot;&gt;YAML&lt;/span&gt; file&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
# Rack-up config
require 'rubygems'
require 'rack/zetetic/rack-campaign'
run Rack::Zetetic::Campaign.new('/path/to/your/campaigns.yml')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To install:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
gem install rack-campaign
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we list our campaigns out in &lt;span class=&quot;caps&quot;&gt;YAML&lt;/span&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
blog-rack-campaign:
  url: http://dev.zetetic.net/blog/2010/06/11/introducing-rack-campaign
  tokens:
    campaign: rack-campaign
    source: blog
    medium: internets
    content: example link

blog-getstrip:
  url: http://getstrip.com
  tokens:
    campaign: rack-campaign
    source: blog
    medium: internets
    term: strip rocks!
    content: example link
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the top level of our Nginx config, we define an upstream directive for Unicorn, which will host our Rack application over a unix socket (mwahahaha):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
# define upstream for campaign routing
upstream campaigns {
  server unix:/www/campaigns/tmp/sockets/unicorn.sock;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, in each of our Nginx vhosts, we add a location directive for &lt;code&gt;/c&lt;/code&gt;, telling the server to forward all such requests to the unicorn process:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
location /c {
  proxy_redirect     off;
  proxy_set_header   Host             $host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_max_temp_file_size 0;

  # forward everything else to the mongrel cluster
  if (!-f $request_filename) {
   proxy_pass http://campaigns;
   break;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, we can pass out the link you may have seen on Twitter:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://zetetic.net/c/blog-rack-campaign&quot;&gt;http://zetetic.net/c/blog-rack-campaign&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you visit it, you get redirected to:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;http://www.zetetic.net/blog/2010/06/11/introducing-rack-campaign?utm_campaign=rack-campaign&amp;amp;utm_source=blog&amp;amp;utm_medium=internets&amp;amp;utm_content=example%20link&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Isn&amp;#8217;t that neat!?&lt;/p&gt;
&lt;p&gt;This needs to perform very well, so we did a little testing with Apache&amp;#8217;s &lt;code&gt;ab&lt;/code&gt; testing tool and found it runs as fast as a normal nginx rewrite. Here&amp;#8217;s what a basic rewrite looks like (/software rewrites to /code):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
$ ab -n 500 -c 10 http://zetetic.net/software
...snip...
Non-2xx responses:      500
Total transferred:      191000 bytes
HTML transferred:       92500 bytes
Requests per second:    4626.33 [#/sec] (mean)
Time per request:       2.162 [ms] (mean)
Time per request:       0.216 [ms] (mean, across all concurrent requests)
Transfer rate:          1721.00 [Kbytes/sec] received
...snip...
Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      2
  95%      2
  98%      2
  99%      2
 100%      2 (longest request)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here&amp;#8217;s how rack-campaign is performing:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
$ ab -n 500 -c 10 http://zetetic.net/c/blog-rack-campaign
...snip...
Non-2xx responses:      500
Total transferred:      167500 bytes
HTML transferred:       7000 bytes
Requests per second:    2749.78 [#/sec] (mean)
Time per request:       3.637 [ms] (mean)
Time per request:       0.364 [ms] (mean, across all concurrent requests)
Transfer rate:          896.43 [Kbytes/sec] received
...snip...
Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      3
  80%      3
  90%      4
  95%      4
  98%     13
  99%     14
 100%     39 (longest request)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Obviously, there&amp;#8217;s some differences but so far, it looks like rack-campaign is doing well enough here. I&amp;#8217;m sure it could be faster, and I&amp;#8217;m sure that over time a &lt;span class=&quot;caps&quot;&gt;YAML&lt;/span&gt; file could become a cumbersome manner of storage, but for now it&amp;#8217;s good &amp;#8217;nuff. Feel free to &lt;a href=&quot;http://github.com/billymeltdown/rack-campaign&quot;&gt;fork it&lt;/a&gt; and use a SQLite database (which in this case would likely be &lt;em&gt;very&lt;/em&gt; fast).&lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;gem install rack-campaign&lt;/code&gt;&lt;/p&gt;</description>
          <pubDate>Mon, 14 Jun 2010 22:58:42 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/14/introducing-rack-campaign/</guid>
          <link>http://zetetic.net/blog/2010/06/14/introducing-rack-campaign/</link>
        </item>
    
        <item>
          <title>Hampton's Ruby Survey 2010</title>
          <description>&lt;p&gt;The 2008 and 2009 results are listed, too. If you code in Ruby, you &lt;a href=&quot;http://survey.hamptoncatlin.com/&quot;&gt;should fill it out&lt;/a&gt; and have a look at the previous stats!&lt;/p&gt;
&lt;p&gt;Among the expected results are that Rails appears to be pulling more users away from Merb, due probably to Rails 3 being the merger of the two frameworks. Also, readership of the pickaxe is down, but only a little.&lt;/p&gt;
&lt;p&gt;Meanwhile, I continue to be surprised by how few people use &lt;a href=&quot;http://haml-lang.com/&quot;&gt;Haml&lt;/a&gt;! I just assumed that because it was so easy and that I personally found it such an important tool, that everyone else would, too. Well, shows me!&lt;/p&gt;
&lt;p&gt;Perhaps the auto-completing short-cuts that many folks use for &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; and &lt;span class=&quot;caps&quot;&gt;ERB&lt;/span&gt; make this a non-issue. But I can&amp;#8217;t stand to write &lt;span class=&quot;caps&quot;&gt;ERB&lt;/span&gt; anymore. &lt;em&gt;Grumble, grumble.&lt;/em&gt;&lt;/p&gt;</description>
          <pubDate>Mon, 14 Jun 2010 08:39:42 GMT</pubDate>
          <guid>http://zetetic.net/blog/2010/06/14/hamptons-ruby-survey-2010/</guid>
          <link>http://zetetic.net/blog/2010/06/14/hamptons-ruby-survey-2010/</link>
        </item>
    
    
  </channel>
</rss>

