Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Site updated at 2012-03-25 19:33:01 UTC

  • Loading branch information...
commit 14257b607f9ba4cf90f36d2e26c796cefe0d3349 1 parent 772d26a
Jason Wadsworth authored
Showing with 10,677 additions and 191 deletions.
  1. +295 −77 atom.xml
  2. +5 −5 blog/2007/12/21/beginnings/index.html
  3. +5 −5 blog/2008/01/11/hobnobbing-in-boston/index.html
  4. +5 −5 blog/2008/02/26/clone-my-fields-please/index.html
  5. +5 −5 blog/2008/06/02/more-drafts-than-posts/index.html
  6. +7 −5 blog/2008/09/14/only-in-python/index.html
  7. +328 −0 blog/2009/04/21/s3cmd-with-macports/index.html
  8. +299 −0 blog/2009/04/22/ruby-network-error-list/index.html
  9. +297 −0 blog/2009/04/28/character-encodings-in-ruby/index.html
  10. +301 −0 blog/2009/05/08/sinatra-hacking-at-railsconf/index.html
  11. +307 −0 blog/2009/05/15/urijoin-v-filejoin/index.html
  12. +296 −0 blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge/index.html
  13. +304 −0 blog/2009/05/29/git-cannot-merge-try-committing-first/index.html
  14. +303 −0 blog/2009/11/15/runcoderun/index.html
  15. +313 −0 blog/2009/11/25/remove-an-environment-variable-in-bash/index.html
  16. +297 −0 blog/2010/04/22/bulk-update-github-hooks/index.html
  17. +300 −0 blog/2010/09/01/find-and-concatenate-files-with-spaces/index.html
  18. +299 −0 blog/2010/09/01/shareablerouteset-gist/index.html
  19. +307 −0 blog/2011/02/15/mysql-mass-destruction-with-xargs/index.html
  20. +307 −0 blog/2011/03/11/activerecord-join-table-gotcha/index.html
  21. +297 −0 blog/2011/03/12/shady-characters-the-secret-life-of-punctuation/index.html
  22. +308 −0 blog/2011/03/17/temporarily-change-the-rails-environment/index.html
  23. +303 −0 blog/2011/07/22/jay-fields-thoughts-the-high-level-test-whisperer/index.html
  24. +298 −0 blog/2011/07/29/making-applications-scalable-with-load-balancing/index.html
  25. +297 −0 blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/index.html
  26. +326 −0 ...011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/index.html
  27. +311 −0 blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/index.html
  28. +312 −0 blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/index.html
  29. +296 −0 blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/index.html
  30. +342 −10 blog/archives/index.html
  31. +79 −0 blog/categories/link/atom.xml
  32. +318 −0 blog/categories/link/index.html
  33. +27 −0 blog/categories/photo/atom.xml
  34. +242 −0 blog/categories/photo/index.html
  35. +150 −0 blog/categories/regular/atom.xml
  36. +461 −0 blog/categories/regular/index.html
  37. +674 −0 blog/page/2/index.html
  38. +657 −0 blog/page/3/index.html
  39. +279 −77 index.html
  40. +120 −2 sitemap.xml
372 atom.xml
View
@@ -4,7 +4,7 @@
<title><![CDATA[Subakva Teknika]]></title>
<link href="http://subakva.github.com/atom.xml" rel="self"/>
<link href="http://subakva.github.com/"/>
- <updated>2012-03-25T15:04:48-04:00</updated>
+ <updated>2012-03-25T15:32:55-04:00</updated>
<id>http://subakva.github.com/</id>
<author>
<name><![CDATA[Jason Wadsworth]]></name>
@@ -14,143 +14,361 @@
<entry>
- <title type="html"><![CDATA[Only in Python...]]></title>
- <link href="http://subakva.github.com/blog/2008/09/14/only-in-python/"/>
- <updated>2008-09-14T23:33:41-04:00</updated>
- <id>http://subakva.github.com/blog/2008/09/14/only-in-python</id>
- <content type="html"><![CDATA[<p>I just <a href="http://docs.python.org/lib/bltin-file-objects.html">imported code from the <strong>future</strong></a>. That <a href="http://xkcd.com/353/">famous XKCD comic</a> is a lot closer to reality than you might have thought.</p>
+ <title type="html"><![CDATA[None]]></title>
+ <link href="http://subakva.github.com/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/"/>
+ <updated>2012-01-15T09:24:59-05:00</updated>
+ <id>http://subakva.github.com/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram</id>
+ <content type="html"><![CDATA[<p><img src="http://www.tumblr.com/photo/1280/subakva/15884659363/1/tumblr_lxug1nl7Xr1qzbsqk" alt="" /></p>
-<p><code>from __future__ import with_statement</code></p>
+<p>Federal Reserve Bank of Boston (Taken with <a href="http://instagr.am">instagram</a>)</p>
]]></content>
</entry>
<entry>
- <title type="html"><![CDATA[More Drafts Than Posts]]></title>
- <link href="http://subakva.github.com/blog/2008/06/02/more-drafts-than-posts/"/>
- <updated>2008-06-02T00:29:55-04:00</updated>
- <id>http://subakva.github.com/blog/2008/06/02/more-drafts-than-posts</id>
- <content type="html"><![CDATA[<p>As I write this, this blog system contains 3 published posts and 8 drafts. If you were to try to infer my level of engagement with technology from the activity on this blog, you might think I&#8217;ve given up and started selling used cars. For better or worse, that&#8217;s not the case.</p>
+ <title type="html"><![CDATA[Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson]]></title>
+ <link href="http://subakva.github.com/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/"/>
+ <updated>2012-01-08T22:52:37-05:00</updated>
+ <id>http://subakva.github.com/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson</id>
+ <content type="html"><![CDATA[<p><img src="http://media.tumblr.com/tumblr_lxaxd8WzPh1qzzhm0.gif" alt="" /></p>
-<p>Here are some things that I coulda/shoulda blogged about since I last posted in January:</p>
+<h4>Summary</h4>
+
+<p><a href="http://shop.oreilly.com/product/0636920016038.do">HTML5 Cookbook</a> provides an overview and examples of new HTML 5 features and related JavaScript APIs. The cookbook series aims to provide short, targeted chapters that solve real world problems, and for simple use-cases, this book provides that.</p>
+
+<p>Most of the material in the book could be found in online tutorials, but it provides a good overview of the available technologies in a single place. I wouldn&#8217;t recommend this for developers who are already using/familiar with HTML 5, but it could be a great foundation for newbies who want to absorb a lot quickly. Personally, I felt that I had a solid foundation to start working with HTML 5 technologies after reading through the examples.</p>
+
+<h4>In a Nutshell:</h4>
<ul>
-<li><p>Tagging Dreams with Django</p></li>
-<li><p>Plotting the Future of Crosscheck</p></li>
-<li><p>New Gig: Second Rotation</p></li>
-<li><p>From Django to Rails (and Back)</p></li>
-<li><p>Encapsulating a Django Project</p></li>
-<li><p>Auditable Django Models</p></li>
-<li><p>Simplify Wordpress Upgrades With Subversion</p></li>
-<li><p>The AppEngine Experience</p></li>
-<li><p>Building Web Apps on the T</p></li>
-<li><p>A Brief History of Freestyle</p></li>
-<li><p>Building Your Own Blog: Awesome or Chumpy?</p></li>
-<li><p>Boston BarCamp 2008</p></li>
+<li><p>Good compilation of intro material for HTML 5 and friends.</p></li>
+<li><p>Filled with useful internet references.</p></li>
+<li><p>Recipes are rather basic, but complete and well-written.</p></li>
+<li><p>Great coverage of accessibility issues.</p></li>
+<li><p>Probably less useful once the basics are understood.</p></li>
</ul>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media]]></title>
+ <link href="http://subakva.github.com/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/"/>
+ <updated>2011-11-23T13:32:20-05:00</updated>
+ <id>http://subakva.github.com/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media</id>
+ <content type="html"><![CDATA[<p><img src="http://media.tumblr.com/tumblr_luxtvovtYx1qzzhm0.gif" alt="" /></p>
+
+<h4>Summary</h4>
+
+<p><a href="http://shop.oreilly.com/product/9781593273859.do">A Bug Hunter&#8217;s Diary</a> describes the technical details of how the author identified and analyzed software security bugs. It doesn&#8217;t get into exploiting the bugs because, as the author points out at the end of every chapter, it&#8217;s illegal to publish exploits in Germany.</p>
+
+<p>I expected a light treatment based on the cute title and cover, but it was mostly C code, debuggers and assembly. I was a little out of my element, but it was interesting. The appendices explaining how stack overflows, etc. can occur and how they can be exploited (roughly) were helpful and interesting. The bug diaries were a little repetitive, but they at least covered a range of platforms.</p>
+
+<h4>Other Notes</h4>
+
+<p>The book is lacking one major piece of the puzzle: details on exploiting these security bugs. After all the work understanding the bug and the details, it was always a bit of a letdown when their was no working exploit as a payoff. According to the author, his home country, Germany, passed a law making it illegal to publish exploits for bugs. Given the ease of finding that information on the internet, I&#8217;d guess that the single major effect of that law is to make this book less useful, which is a real shame.</p>
-<p>I&#8217;m a bad, bad blogger. This list doesn&#8217;t include any of the drafts that I actually began to write. But, as I look at this list, there&#8217;s a lot of interesting stuff here. I suspect that if I actually make myself write about the things that I&#8217;m thinking and working on, it will help motivate me to finish some of my projects. If I&#8217;m lucky, a few people might even read it, which will motivate me even more. Is this how life works for extroverts?</p>
+<p>In addition to the technical details, the author outlines the process of reporting and resolving bugs. It was interesting to see that commercial software vendors seem to be consistently orders of magnitude slower in releasing patches for security issues. I suppose one could argue that means that open-source software is safer, but at the end of the day, it&#8217;s always up to the end user to keep their software updated and patched.</p>
+
+<h4>Bottom Line</h4>
+
+<p>You&#8217;ll need some understanding of assembly, c, and how memory allocation works. But that background, the book and a bit of Googling to learn more about how the exploits work make for a solid, entertaining overview of the life cycle of security bugs.</p>
]]></content>
</entry>
<entry>
- <title type="html"><![CDATA[Clone My Fields, Please]]></title>
- <link href="http://subakva.github.com/blog/2008/02/26/clone-my-fields-please/"/>
- <updated>2008-02-26T23:50:59-05:00</updated>
- <id>http://subakva.github.com/blog/2008/02/26/clone-my-fields-please</id>
- <content type="html"><![CDATA[<h3>The Introduction</h3>
+ <title type="html"><![CDATA[Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media]]></title>
+ <link href="http://subakva.github.com/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/"/>
+ <updated>2011-11-09T21:41:00-05:00</updated>
+ <id>http://subakva.github.com/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media</id>
+ <content type="html"><![CDATA[<p><img src="http://media.tumblr.com/tumblr_lufbogviud1qzzhm0.gif" alt="" /></p>
-<p>I recently started using the SearchManager from <a href="http://www.mercurytide.co.uk/whitepapers/django-full-text-search/">the Mercury Tide white paper</a> on using <a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html">MySQL full-text search</a> with <a href="http://www.djangoproject.com/">Django</a>. It&#8217;s been helpful, but I ran into a bug recently while trying to add a default filter to a SearchManager subclass.</p>
+<h4>Summary</h4>
-<h3>The Boring Context</h3>
+<p><a href="http://shop.oreilly.com/product/0636920020042.do">Test-Driven Infrastructure with Chef</a> describes a rationale and an approach to developing automated tests for system infrastructure. It includes an explanation of behavior-driven development, and detailed instructions for setting up a testing system using <a href="https://github.com/Atalanta/cucumber-chef">cucumber-chef</a> on EC2.</p>
-<p>Rather than deleting objects from the database, my application sets a boolean flag to indicate that the content is not longer relevant. I wanted my manager to apply a filter to every query set to include only items that are not disabled. Here&#8217;s what the manager class looks like:</p>
+<h4>Audience</h4>
-<pre><code>class SearchableItemManager(SearchMangager):
- def __init__(self):
- zuper = super(SearchableItemManager, self)
- zuper.__init__(('name','description',))
+<p>Surprisingly little time was spent talking about cucumber-chef and how to use it. The majority of the book is spent explaining BDD and why you&#8217;d want to apply it to infrastructure, and then explaining in minute detail the process to get <a href="https://rvm.beginrescueend.com/">RVM</a>, <a href="http://aws.amazon.com/ec2/">EC2</a> and <a href="http://www.opscode.com/chef/">Chef</a> configured. The last portion of the book covered the process of using <a href="https://github.com/Atalanta/cucumber-chef">cucumber-chef</a> to set up a server with multiple user accounts.</p>
- def get_query_set(self):
- query = super(SearchableItemManager, self).get_query_set()
- return query.filter(is_enabled=True)
-</code></pre>
+<p>Being already familiar with the supporting tools, I found this disappointing. The teamserver example was too simple and unrealistic. It would have been more useful to see some examples using cucumber-chef for a more realistic use-case, such as setting up a web server.</p>
-<h3>The Ugly Crash</h3>
+<p>Unfortunately, I suspect the text isn&#8217;t likely to be helpful to a reader who <em>isn&#8217;t</em> familiar with the tools either. The instructions were already outdated when I read them, shortly after the book was released. A reader who is new to Cucumber, Chef, Ruby or EC2 will be in danger of getting lost before they even get to the point where they can run a test against an instance.</p>
-<p>When I made the change, I found that calling the <code>search()</code> method raised a TypeError: &#8220;&#8216;NoneType&#8217; object is not iterable.&#8221; The error occurred when the SearchQuerySet tried to construct the SQL for the MATCH&#8230;AGAINST clause. Somehow, the <code>_search_fields</code> tuple on the SearchQuerySet was None.</p>
+<h4>Practicality</h4>
-<h3>The Mystery Solved</h3>
+<p>In the course of working through the examples, I was continually frustrated by the amount of time it took to get feedback. The tests are really slow. It&#8217;s hard to imagine actually developing red/green/refactor-style at this pace. I like the concept of being able to test the infrastructure, but it doesn&#8217;t seem practical with these tools.</p>
-<p>This had me baffled until I had a look at the <em>QuerySet code in Django. It seems obvious now, but adding an additional filter to a query set returns a clone of the original with the new filter added. The </em>QuerySet object contains a <code>_clone</code> method that copies a hard-coded list of fields from the old QS to the new one. Naturally, that hard-coded list doesn&#8217;t know anything about my <code>_search_fields</code>, so the property has no value on the clone.</p>
+<p>I&#8217;m not convinced that it would really be worth the time involved to write tests at this level anyway. Writing integration tests against the full application stack might be a better use of your testing time. The true test of the infrastructure is how well it supports needs of the application and it&#8217;s users.</p>
-<h3>The Fix</h3>
+<p>Neither BDD-style infrastructure tests nor full-stack integration tests will help you with the most difficult and interesting infrastructure challenges: scaling and stability. Simulating all the wonderful ways that a server can crash (used up disk space, hung connections, etc.) would be a complex, difficult, slow, and inevitably incomplete endeavor. It&#8217;s possible that server ops really is fundamentally different than application development.</p>
-<p>Now, depending on how much of a zealot you are about modifying &#8220;private&#8221; functions, there are two ways to fix this. The easiest method is to simply override the <code>_clone</code> method and add the <code>_search_fields</code> tuple to the clone. The alternative is to override every method that depends on the _clone method, and copy over the <code>_search_fields</code> tuple for each one. I think that would be stupid, and will speak of it no further. Here&#8217;s the code I added to generate happiness:</p>
+<h4>Bottom Line</h4>
-<pre><code>class SearchQuerySet(models.query.QuerySet):
- # ... code from the original Mercury Tide class
- def _clone(self, klass=None, **kwargs):
- zuper = super(SearchQuerySet, self)
- clone = zuper._clone(klass, **kwargs)
- clone._search_fields = self._search_fields
- return clone
-</code></pre>
+<ul>
+<li><p>Good explanation of BDD and how it could be applied to infrastructure</p></li>
+<li><p>Short on useful examples for readers familiar with the supporting tools</p></li>
+<li><p>Thorough instructions for setting up EC2, Chef and RVM, but likely to have a short shelf-life</p></li>
+</ul>
-<p> *[QS]: Query Set</p>
+
+<p>Available from O&#8217;Reilly: <a href="http://shop.oreilly.com/product/0636920020042.do">Test-Driven Infrastructure with Chef</a></p>
]]></content>
</entry>
<entry>
- <title type="html"><![CDATA[Hobnobbing in Boston]]></title>
- <link href="http://subakva.github.com/blog/2008/01/11/hobnobbing-in-boston/"/>
- <updated>2008-01-11T17:33:56-05:00</updated>
- <id>http://subakva.github.com/blog/2008/01/11/hobnobbing-in-boston</id>
- <content type="html"><![CDATA[<p><img src="http://subakva.com/wp-content/uploads/2008/01/meetup.gif" alt="Meet-Up Logo" /></p>
+ <title type="html"><![CDATA[The Mother of All Interview Questions - raganwald's posterous]]></title>
+ <link href="http://subakva.github.com/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/"/>
+ <updated>2011-08-02T14:43:29-04:00</updated>
+ <id>http://subakva.github.com/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous</id>
+ <content type="html"><![CDATA[<p><a href="http://raganwald.posterous.com/the-mother-of-all-interview-questions">The Mother of All Interview Questions - raganwald&#8217;s posterous</a></p>
-<pre><code>One of the things that I'm most looking forward to about my ongoing transition to Boston is getting involved in the development community. I have no doubt that New Bedford has a few developers around, but the [meet-up community](http://www.meetup.com/) is completely dead, and the chances of me making [3 hour](http://www.allposters.com/-sp/Gilligan-s-Island-Posters_i1617189_.htm) round-trip to Boston on a week night just to talk shop are slim. But, now that I'm up there every day for work, you can expect to see me out on the town, [hobnobbing](http://www.etymonline.com/index.php?search=hobnob&amp;searchmode=none) with the [geekiest of the geeks](http://www.etymonline.com/index.php?search=geek&amp;searchmode=none).
+<p>&#8220;Does your process involve invention? … &#8221; This is a great interview question. It&#8217;s a conversation starter, and it&#8217;s both relevant to evaluating a candidate and, hopefully, an interesting question for the interviewee to consider.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Making applications scalable with Load Balancing]]></title>
+ <link href="http://subakva.github.com/blog/2011/07/29/making-applications-scalable-with-load-balancing/"/>
+ <updated>2011-07-29T09:32:03-04:00</updated>
+ <id>http://subakva.github.com/blog/2011/07/29/making-applications-scalable-with-load-balancing</id>
+ <content type="html"><![CDATA[<p><a href="http://1wt.eu/articles/2006_lb/">Making applications scalable with Load Balancing</a></p>
+<p>Old but useful article about load balancing issues by the author of HAProxy</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Jay Fields' Thoughts: The High-Level Test Whisperer]]></title>
+ <link href="http://subakva.github.com/blog/2011/07/22/jay-fields-thoughts-the-high-level-test-whisperer/"/>
+ <updated>2011-07-22T09:57:19-04:00</updated>
+ <id>http://subakva.github.com/blog/2011/07/22/jay-fields-thoughts-the-high-level-test-whisperer</id>
+ <content type="html"><![CDATA[<p><a href="http://blog.jayfields.com/2011/07/high-level-test-whisperer.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:%20jayfields/mjKQ%20(Jay%20Fields%20Thoughts">Jay Fields&#8217; Thoughts: The High-Level Test Whisperer</a>)</p>
+<p>Two key takeaways from this post:</p>
+<ul>
+<li><p>Sometimes it&#8217;s better to clobber an unmaintainable test suite and start over with something simple and focused on maximizing value.</p></li>
+<li><p>Maintenance of high-level tests might be a sensible place to break from the shared code-ownership principle.</p></li>
+</ul>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Temporarily Change the Rails Environment]]></title>
+ <link href="http://subakva.github.com/blog/2011/03/17/temporarily-change-the-rails-environment/"/>
+ <updated>2011-03-17T14:00:29-04:00</updated>
+ <id>http://subakva.github.com/blog/2011/03/17/temporarily-change-the-rails-environment</id>
+ <content type="html"><![CDATA[<p>A helper method to change the Rails environment within a block. I use this for testing isolated, environment-specific methods. Obviously, I wouldn&#8217;t suggest using this outside of test code. You could easily do something very stupid.</p>
+
+<pre><code>&lt;code&gt;
+def with_rails_env(environment, &amp;block)
+ begin
+ original_env = Rails.env
+ Rails.instance_variable_set(:@_env, environment)
+ yield if block_given?
+ ensure
+ Rails.instance_variable_set(:@_env, original_env)
+ end
+end
+&lt;/code&gt;
+</code></pre>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Shady Characters - The secret life of punctuation]]></title>
+ <link href="http://subakva.github.com/blog/2011/03/12/shady-characters-the-secret-life-of-punctuation/"/>
+ <updated>2011-03-12T14:57:48-05:00</updated>
+ <id>http://subakva.github.com/blog/2011/03/12/shady-characters-the-secret-life-of-punctuation</id>
+ <content type="html"><![CDATA[<p><a href="http://www.shadycharacters.co.uk/2010/12/hello-world/">Shady Characters - The secret life of punctuation</a></p>
+<p>Proving once again the breadth of my geekdom, I&#8217;m really enjoying this blog about the history of punctuation.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[ActiveRecord Join Table Gotcha]]></title>
+ <link href="http://subakva.github.com/blog/2011/03/11/activerecord-join-table-gotcha/"/>
+ <updated>2011-03-11T20:10:30-05:00</updated>
+ <id>http://subakva.github.com/blog/2011/03/11/activerecord-join-table-gotcha</id>
+ <content type="html"><![CDATA[<p>Whenever I create join tables, I&#8217;m always tempted to add an ID column, in case I want to upgrade it to a :through association at some point. I&#8217;m also tempted to timestamp columns, so that I can know when the association was created.</p>
-I went to my first meet-up last week: [The eXtreme Tuesday Club](http://xtcboston.blogspot.com/). It sounds like it might involve [jumping from a plane with a snowboard strapped to my feet while drinking Mountain Dew](http://www.halfbakery.com/idea/MtDew), but it's actually a group for [Extreme Programming](http://www.extremeprogramming.org/) (XP) zealots. I'm not actually a zealot about it, but I've seen it work brilliantly in the past and it's an experience that I'd like to repeat. That single, trancendental experience doing full XP with a great team was probably the most stress-free, fun, and productive project that I've ever been involved with.
+<p>Sadly, it just doesn&#8217;t work with <code>has_and_belongs_to_many</code>.</p>
+<ul>
+<li><p>If you add an ID column, Rails will choke as soon as you try to access it. IDs are not allowed!</p></li>
+<li><p>If you add timestamps, Rails will make all of your association records readonly.</p></li>
+</ul>
+<p>If you want to have an ID and timestamps, you&#8217;ll just have to bite the bullet and create an association model and a <code>has_many :through</code> relationship.</p>
+<p>Maybe now that I&#8217;ve written about it, I&#8217;ll remember it next time and save myself debugging mysterious <code>"ActiveRecord::ReadOnlyRecord: ActiveRecord::ReadOnlyRecord"</code> errors.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[MySQL Mass Destruction with xargs]]></title>
+ <link href="http://subakva.github.com/blog/2011/02/15/mysql-mass-destruction-with-xargs/"/>
+ <updated>2011-02-15T22:02:52-05:00</updated>
+ <id>http://subakva.github.com/blog/2011/02/15/mysql-mass-destruction-with-xargs</id>
+ <content type="html"><![CDATA[<p>Yesterday, I needed to clobber a bunch of similarly-named database schemas on my development machine. I could have selected and deleted 40 times in Navicat, but I thought I&#8217;d try to write a one-liner instead:</p>
+<p>`</p>
-I had a great time at the meet-up. It wasn't heavily attended, but it was great talking to the few people that were there about [continuous integration](http://martinfowler.com/articles/continuousIntegration.html), [checked exceptions](http://www.artima.com/intv/handcuffs.html), and [other geekery](http://www.channel4.com/entertainment/tv/microsites/I/itcrowd/). There were a couple of guys from [a local Agile shop](http://cyrusinnovation.com/website/), a woman from "a very large company", and a sales guy from an IT services company. The sales guy was a bit out of his element, but he did manage to sit through my explanation of XP. I love trying to explain technical concepts to non-technical people, so I think I may have gotten more out of the experience than he did.
+<p>mysql -u root -e &#8220;show databases;&#8221; | grep _3_6 | xargs -IDB_NAME mysql -u root -e &#8220;drop database DB_NAME;&#8221;<br/>
+`</p>
+<p>The first part pulls the database names all the database names. The second part culls any schema names that don&#8217;t match &#8220;_3_6&#8221;, and the last part executes a DROP DATABASE command for each matching schema name.</p>
+<p>The clever bit is the &#8220;-I&#8221; flag to xargs, which sets a token to be replaced with the argument in the command string. In this case, the schema name (&#8220;pp_development_3_6&#8221;) is dropped in wherever xargs sees the string &#8220;DB_NAME&#8221; in the command.</p>
+<p>_<a href="http://en.wikipedia.org/wiki/PWB/UNIX">Wikipedia attributes the xargs utility to PWB/UNIX</a>. It may have been written by <a href="http://www.ugu.com/sui/ugu/showclassic?I=info.Dick_Haight">Dick Haight</a>, who is, apparently, the 10 of Clubs in the <a href="http://www.ugu.com/sui/ugu/showclassic?I=info.usenix-cards">Unix 25th Anniversary Playing Card deck</a>, which, apparently, exists.<br/>
+_</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[ShareableRouteSet - Gist]]></title>
+ <link href="http://subakva.github.com/blog/2010/09/01/shareablerouteset-gist/"/>
+ <updated>2010-09-01T11:24:02-04:00</updated>
+ <id>http://subakva.github.com/blog/2010/09/01/shareablerouteset-gist</id>
+ <content type="html"><![CDATA[<p><a href="http://gist.github.com/556374">ShareableRouteSet - Gist</a></p>
+
+<p>This is a class to allow the creation of Rails route helpers for external applications without interfering with the application routes.</p>
+
+<p>This is useful when you have a Rails application that needs to have some knowledge about the routes in another application. The routes could be published by the source application in a plugin/gem to avoid duplication of routing information.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Find and Concatenate Files with Spaces]]></title>
+ <link href="http://subakva.github.com/blog/2010/09/01/find-and-concatenate-files-with-spaces/"/>
+ <updated>2010-09-01T11:19:45-04:00</updated>
+ <id>http://subakva.github.com/blog/2010/09/01/find-and-concatenate-files-with-spaces</id>
+ <content type="html"><![CDATA[<p>Normally, xargs will interpret the spaces in the filenames as separate files. The <code>-print0</code> argument to find paired with the <code>-0</code> argument to xargs will use some other magical delimiter so that the spacey filenames remain intact as you pipe them around.</p>
+<p>`</p>
+<p>find ./spacey_files -name <em>Report</em> -type f -print0 | xargs -0 cat > all_reports.csv<br/>
+`</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Bulk Update Github Hooks]]></title>
+ <link href="http://subakva.github.com/blog/2010/04/22/bulk-update-github-hooks/"/>
+ <updated>2010-04-22T14:39:11-04:00</updated>
+ <id>http://subakva.github.com/blog/2010/04/22/bulk-update-github-hooks</id>
+ <content type="html"><![CDATA[<p>The Github API doesn&#8217;t support updating hooks, but I&#8217;ve got way too many projects going to do it by hand. I wrote up this script to update all of my hooks at once. I used the <a href="http://mechanize.rubyforge.org/mechanize/">mechanize</a> gem to drive the web admin interface for the hooks that I needed.</p>
-I'll be back again next month, and in the meantime, there are meet-ups for (in order of eagerness) [JavaScript](http://javascript.meetup.com/2/), [Python](http://python.meetup.com/181/), [Web Design](http://webdesign.meetup.com/83/), [Ruby](http://ruby.meetup.com/87/) and [Java](http://java.meetup.com/10/). If you see me out hobnobbing, be sure to say "hello" and hand me the nickel that you owe me for reading this.
+<p>The gist with the code is here: <a href="http://gist.github.com/375621">[http://gist.github.com/375621](http://gist.github.com/375621)</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Remove an Environment Variable in Bash]]></title>
+ <link href="http://subakva.github.com/blog/2009/11/25/remove-an-environment-variable-in-bash/"/>
+ <updated>2009-11-25T01:13:27-05:00</updated>
+ <id>http://subakva.github.com/blog/2009/11/25/remove-an-environment-variable-in-bash</id>
+ <content type="html"><![CDATA[<p><code>export -n RAILS_ENV</code></p>
+
+<p>Setting an environment variable to nothing is not the same as removing it entirely. If really need it to go away completely, use the <code>-n</code> flag on <code>export</code>.</p>
+
+<p><strong>Behold:</strong></p>
+
+<pre><code>&lt;code&gt;
+jason@idaho:~/Code/subakva$ env | grep RAILS_ENV
+jason@idaho:~/Code/subakva$ export RAILS_ENV=development
+jason@idaho:~/Code/subakva$ env | grep RAILS_ENV
+RAILS_ENV=development
+jason@idaho:~/Code/subakva$ export RAILS_ENV=
+jason@idaho:~/Code/subakva$ env | grep RAILS_ENV
+RAILS_ENV=
+jason@idaho:~/Code/subakva$ export -n RAILS_ENV
+jason@idaho:~/Code/subakva$ env | grep RAILS_ENV
+jason@idaho:~/Code/subakva$
+&lt;/code&gt;
</code></pre>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[RunCodeRun]]></title>
+ <link href="http://subakva.github.com/blog/2009/11/15/runcoderun/"/>
+ <updated>2009-11-15T11:57:08-05:00</updated>
+ <id>http://subakva.github.com/blog/2009/11/15/runcoderun</id>
+ <content type="html"><![CDATA[<p>For a personal project, I&#8217;m trying out <a href="http://runcoderun.com">RunCodeRun</a>, a service for doing automated builds for projects on <a href="http://github.com">github</a>.</p>
+
+<p>I think the idea is a good one. For gems or simple web apps without complicated integration tests, getting an automated build up and running is dead simple. It&#8217;s just a matter of adding a post-commit hook to your github project to notify runcoderun that the code has been updated.</p>
+
+<p>I&#8217;ve run into a few issues with missing gems on the build machine, but they&#8217;ve been incredibly responsive. After posting a support request to install a gem, they not installed the gem I requested; they also installed a gem I didn&#8217;t know was missing, forked my project to fix a gem dependency problem and a database configuration problem, and sent me a pull request. This is all within 24 hours, and for a service I&#8217;m not even paying for!</p>
+
+<p>The service is free for Open Source code, but they have a paid build option for private projects with dedicated build resources. I haven&#8217;t used the paid service, so I&#8217;m not sure to what extent they support more complex requirements like multiple database connections, system services (Sphinx), and distributed systems.</p>
-<p> *[XP]: Extreme Programming</p>
+<p>Hopefully, if <a href="http://thinkrelevance.com">Relevance</a> is dedicating the resources to provide such great support, they&#8217;ll also be improving the flexibility of the service for more complex builds. I doubt it would work in its current state for my current professional work, but I&#8217;d love to be able to easily outsource my builds.</p>
]]></content>
</entry>
<entry>
- <title type="html"><![CDATA["I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings]]></title>
- <link href="http://subakva.github.com/blog/2007/12/21/beginnings/"/>
- <updated>2007-12-21T17:28:16-05:00</updated>
- <id>http://subakva.github.com/blog/2007/12/21/beginnings</id>
- <content type="html"><![CDATA[<p><img src="http://subakva.com/wp-content/uploads/2007/12/finite-jest.jpg" alt="Finite Jest" />
-There&#8217;s a trick to blogging.</p>
+ <title type="html"><![CDATA[Git Cannot Merge? Try committing first.]]></title>
+ <link href="http://subakva.github.com/blog/2009/05/29/git-cannot-merge-try-committing-first/"/>
+ <updated>2009-05-29T18:05:03-04:00</updated>
+ <id>http://subakva.github.com/blog/2009/05/29/git-cannot-merge-try-committing-first</id>
+ <content type="html"><![CDATA[<p>I ran into this git error again today:</p>
+
+<pre><code>&lt;code&gt;
+Entry 'blah/blah.rb' would be overwritten by merge. Cannot merge.
+&lt;/code&gt;
+</code></pre>
-<p>I don&#8217;t know what that trick is, but I intend to figure it out. I&#8217;ve had quite a few blogs in the past with sparse to middling success at maintaining them with new content. Maybe I ought to just throw in the towel and admit that I&#8217;m either too much of a perfectionist or too disorganized to maintain a blog successfully, but I can&#8217;t shake the feeling that I really ought to be doing this, and doing it well.</p>
+<p>After messing around with it for a while, I remembered the last time this happened. The solution is to commit your current conflicting changes, then merge afterwards.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge]]></title>
+ <link href="http://subakva.github.com/blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge/"/>
+ <updated>2009-05-21T18:51:32-04:00</updated>
+ <id>http://subakva.github.com/blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge</id>
+ <content type="html"><![CDATA[<p><a href="http://sunlightlabs.com/blog/2009/05/21/apps-america-2-datagov-challenge/">Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[URI.join v. File.join]]></title>
+ <link href="http://subakva.github.com/blog/2009/05/15/urijoin-v-filejoin/"/>
+ <updated>2009-05-15T19:12:00-04:00</updated>
+ <id>http://subakva.github.com/blog/2009/05/15/urijoin-v-filejoin</id>
+ <content type="html"><![CDATA[<p><code>URI.join</code> does not work quite the same way as <code>File.join</code> in Ruby. The aim of <code>URI.join</code> is more to calculate a relative path (as a browser would) than to simply concatenate path elements cleanly. The irb output below demonstrates this:</p>
+
+<p>`</p>
+
+<pre><code>irb&gt; require 'uri' #=&gt; true
+irb&gt; host = 'http://www.example.com' #=&gt; "http://www.example.com"
+irb&gt; prefix = 'prefix' #=&gt; "prefix"
+irb&gt; file = 'file.html' #=&gt; "file.html"
+irb&gt; URI.join(host, prefix, file).to_s #=&gt; "http://www.example.com/file.html"
+irb&gt; URI.join(host, prefix+ '/', file).to_s #=&gt; "http://www.example.com/prefix/file.html"
+</code></pre>
-<p>So, this is my latest attempt at staking out some digital territory in the crowded, geek-o-sphere. It&#8217;s <a href="http://subakva.com">Subakva</a>, which means, for those of us who don&#8217;t speak <a href="http://lernu.net">esperanto</a>, &#8220;underwater&#8221; (Prepare yourself for my upcoming blog entry on how to find an squatter-free domain name by learning obscure, artificial languages.)</p>
+<p>`</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Sinatra Hacking at RailsConf]]></title>
+ <link href="http://subakva.github.com/blog/2009/05/08/sinatra-hacking-at-railsconf/"/>
+ <updated>2009-05-08T16:21:33-04:00</updated>
+ <id>http://subakva.github.com/blog/2009/05/08/sinatra-hacking-at-railsconf</id>
+ <content type="html"><![CDATA[<p>I played around with <a href="http://www.sinatrarb.com/">Sinatra</a> a bit at RailsConf and there&#8217;s a tiny spec of open source code to show for it:</p>
-<p>If you&#8217;re interested in web technology, interface design, and all that Geek 2.0 jazz, I predict that there will be something worthwhile for you to read here in the future. If you&#8217;re not interested in any of that, then there&#8217;s nothing for you here but heartache and disappointment. Go now, with your spirit still intact.</p>
+<ul>
+<li><p><a href="http://subakva.github.com/bourbon">Bourbon</a> - An extension to Sinatra that adds support for <a href="http://wiki.github.com/tobi/liquid">Liquid</a> templates.</p></li>
+<li><p><a href="http://github.com/subakva/colorurl/tree/master">ColorURL</a> - A simple Sinatra application that displays a page in the color of the URL path. It uses the <a href="http://color.rubyforge.org/">color</a> gem and is deployed on <a href="http://www.heroku.com">Heroku</a>. [<a href="http://colorurl.heroku.com/mauve">[http://colorurl.heroku.com/mauve](http://colorurl.heroku.com/mauve)</a>]</p></li>
+</ul>
-<p><strong>Excelsior!</strong></p>
]]></content>
</entry>
10 blog/2007/12/21/beginnings/index.html
View
@@ -155,23 +155,23 @@ <h1 class="entry-title">"I Am Seated in an Office, Surrounded by Heads and Bodie
<ul id="recent_posts">
<li class="post">
- <a href="/blog/2008/09/14/only-in-python/">Only in Python...</a>
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
</li>
<li class="post">
- <a href="/blog/2008/06/02/more-drafts-than-posts/">More Drafts Than Posts</a>
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
</li>
<li class="post">
- <a href="/blog/2008/02/26/clone-my-fields-please/">Clone My Fields, Please</a>
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2008/01/11/hobnobbing-in-boston/">Hobnobbing in Boston</a>
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2007/12/21/beginnings/">"I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings</a>
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
</li>
</ul>
10 blog/2008/01/11/hobnobbing-in-boston/index.html
View
@@ -174,23 +174,23 @@ <h1 class="entry-title">Hobnobbing in Boston</h1>
<ul id="recent_posts">
<li class="post">
- <a href="/blog/2008/09/14/only-in-python/">Only in Python...</a>
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
</li>
<li class="post">
- <a href="/blog/2008/06/02/more-drafts-than-posts/">More Drafts Than Posts</a>
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
</li>
<li class="post">
- <a href="/blog/2008/02/26/clone-my-fields-please/">Clone My Fields, Please</a>
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2008/01/11/hobnobbing-in-boston/">Hobnobbing in Boston</a>
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2007/12/21/beginnings/">"I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings</a>
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
</li>
</ul>
10 blog/2008/02/26/clone-my-fields-please/index.html
View
@@ -187,23 +187,23 @@ <h1 class="entry-title">Clone My Fields, Please</h1>
<ul id="recent_posts">
<li class="post">
- <a href="/blog/2008/09/14/only-in-python/">Only in Python...</a>
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
</li>
<li class="post">
- <a href="/blog/2008/06/02/more-drafts-than-posts/">More Drafts Than Posts</a>
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
</li>
<li class="post">
- <a href="/blog/2008/02/26/clone-my-fields-please/">Clone My Fields, Please</a>
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2008/01/11/hobnobbing-in-boston/">Hobnobbing in Boston</a>
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2007/12/21/beginnings/">"I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings</a>
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
</li>
</ul>
10 blog/2008/06/02/more-drafts-than-posts/index.html
View
@@ -168,23 +168,23 @@ <h1 class="entry-title">More Drafts Than Posts</h1>
<ul id="recent_posts">
<li class="post">
- <a href="/blog/2008/09/14/only-in-python/">Only in Python...</a>
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
</li>
<li class="post">
- <a href="/blog/2008/06/02/more-drafts-than-posts/">More Drafts Than Posts</a>
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
</li>
<li class="post">
- <a href="/blog/2008/02/26/clone-my-fields-please/">Clone My Fields, Please</a>
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2008/01/11/hobnobbing-in-boston/">Hobnobbing in Boston</a>
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2007/12/21/beginnings/">"I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings</a>
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
</li>
</ul>
12 blog/2008/09/14/only-in-python/index.html
View
@@ -135,6 +135,8 @@ <h1 class="entry-title">Only in Python...</h1>
<a class="basic-alignment left" href="/blog/2008/06/02/more-drafts-than-posts/" title="Previous Post: More Drafts Than Posts">&laquo; More Drafts Than Posts</a>
+ <a class="basic-alignment right" href="/blog/2009/04/21/s3cmd-with-macports/" title="Next Post: s3cmd with MacPorts">s3cmd with MacPorts &raquo;</a>
+
</p>
</footer>
</article>
@@ -148,23 +150,23 @@ <h1 class="entry-title">Only in Python...</h1>
<ul id="recent_posts">
<li class="post">
- <a href="/blog/2008/09/14/only-in-python/">Only in Python...</a>
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
</li>
<li class="post">
- <a href="/blog/2008/06/02/more-drafts-than-posts/">More Drafts Than Posts</a>
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
</li>
<li class="post">
- <a href="/blog/2008/02/26/clone-my-fields-please/">Clone My Fields, Please</a>
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2008/01/11/hobnobbing-in-boston/">Hobnobbing in Boston</a>
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
</li>
<li class="post">
- <a href="/blog/2007/12/21/beginnings/">"I am seated in an office, surrounded by heads and bodies," and Other Great Beginnings</a>
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
</li>
</ul>
328 blog/2009/04/21/s3cmd-with-macports/index.html
View
@@ -0,0 +1,328 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>s3cmd with MacPorts - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="I ran into a string of errors while trying to run s3cmd with MacPorts python. /opt/local/bin/s3cmd uses ParameterError before importing it. I moved &hellip;">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/04/21/s3cmd-with-macports">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+
+</nav>
+ <div id="main">
+ <div id="content">
+ <div>
+<article class="hentry" role="article">
+
+ <header>
+
+ <h1 class="entry-title">S3cmd With MacPorts</h1>
+
+
+ <p class="meta">
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-21T11:52:18-04:00" pubdate data-updated="true">Apr 21<span>st</span>, 2009</time>
+
+ | <a href="#disqus_thread">Comments</a>
+
+ </p>
+
+ </header>
+
+
+<div class="entry-content"><p>I ran into a string of errors while trying to run s3cmd with MacPorts python.</p>
+
+<p><code>/opt/local/bin/s3cmd</code> uses <code>ParameterError</code> before importing it. I moved the imports out of the try/except block to get this working:</p>
+
+<pre><code>if __name__ == '__main__':
+
+ from S3 import PkgInfo
+ from S3.S3 import *
+ from S3.Config import Config
+ from S3.S3Uri import *
+ from S3 import Utils
+ from S3.Exceptions import *
+ from S3.Utils import unicodise
+ from S3.Progress import Progress
+ from S3.CloudFront import Cmd as CfCmd
+
+ try:
+
+ main()
+ sys.exit(0)
+
+ except ParameterError, e:
+ error(u"Parameter problem: %s" % e)
+ sys.exit(1)
+</code></pre>
+
+<p>Next, the command died while trying to import <em>md5. The Python 2.5 port does not include hashlib, which defines </em>md5. You can install it yourself like so:<br/>
+<code>sudo port install py25-hashlib</code></p>
+
+<p>Lastly, while running <code>s3cmd --configure</code> and testing my connection with the HTTPS option, I got this warning:<br/>
+<code>WARNING: Retrying failed request: /?delimiter=/ ('module' object has no attribute 'ssl')</code></p>
+
+<p>This feature depends on another port, which can be installed with:<br/>
+<code>sudo port install py25-socket-ssl</code></p>
+</div>
+
+
+ <footer>
+ <p class="meta">
+
+
+
+<span class="byline author vcard">Posted by <span class="fn">Jason Wadsworth</span></span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-21T11:52:18-04:00" pubdate data-updated="true">Apr 21<span>st</span>, 2009</time>
+
+
+<span class="categories">
+
+ <a class='category' href='/blog/categories/regular/'>regular</a>
+
+</span>
+
+
+ </p>
+
+ <div class="sharing">
+
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://subakva.github.com/blog/2009/04/21/s3cmd-with-macports/" data-via="subakva" data-counturl="http://subakva.github.com/blog/2009/04/21/s3cmd-with-macports/" >Tweet</a>
+
+
+
+</div>
+
+
+ <p class="meta">
+
+ <a class="basic-alignment left" href="/blog/2008/09/14/only-in-python/" title="Previous Post: Only in Python...">&laquo; Only in Python...</a>
+
+
+ <a class="basic-alignment right" href="/blog/2009/04/22/ruby-network-error-list/" title="Next Post: Ruby Network Error List">Ruby Network Error List &raquo;</a>
+
+ </p>
+ </footer>
+</article>
+
+</div>
+
+<aside class="sidebar">
+
+ <section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+
+ <li class="post">
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
+ </li>
+
+ </ul>
+</section>
+
+<section>
+ <h1>GitHub Repos</h1>
+ <ul id="gh_repos">
+ <li class="loading">Status updating...</li>
+ </ul>
+
+ <a href="https://github.com/subakva">@subakva</a> on GitHub
+
+ <script type="text/javascript">
+ $.domReady(function(){
+ if (!window.jXHR){
+ var jxhr = document.createElement('script');
+ jxhr.type = 'text/javascript';
+ jxhr.src = '/javascripts/libs/jXHR.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(jxhr, s);
+ }
+
+ github.showRepos({
+ user: 'subakva',
+ count: 0,
+ skip_forks: true,
+ target: '#gh_repos'
+ });
+ });
+ </script>
+ <script src="/javascripts/github.js" type="text/javascript"> </script>
+</section>
+
+
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("subakva", 4, false);
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+
+ <a href="http://twitter.com/subakva" class="twitter-follow-button" data-show-count="false">Follow @subakva</a>
+
+</section>
+
+
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:subakva">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "subakva"; //id target for pinboard list
+ var pinboard_count = 3; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+
+
+
+
+
+</aside>
+
+
+ </div>
+ </div>
+ <footer role="contentinfo"><p>
+ Copyright &copy; 2012 - Jason Wadsworth -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
+
+</footer>
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'subakva';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+
+
+
+
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+
+
+
+
+
+</body>
+</html>
299 blog/2009/04/22/ruby-network-error-list/index.html
View
@@ -0,0 +1,299 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Ruby Network Error List - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="I&#8217;m writing some code that needs to handle a failed network connection. Here&#8217;s an almost certainly incomplete list of the exceptions I &hellip;">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/04/22/ruby-network-error-list">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+
+</nav>
+ <div id="main">
+ <div id="content">
+ <div>
+<article class="hentry" role="article">
+
+ <header>
+
+ <h1 class="entry-title">Ruby Network Error List</h1>
+
+
+ <p class="meta">
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-22T15:33:18-04:00" pubdate data-updated="true">Apr 22<span>nd</span>, 2009</time>
+
+ | <a href="#disqus_thread">Comments</a>
+
+ </p>
+
+ </header>
+
+
+<div class="entry-content"><p>I&#8217;m writing some code that needs to handle a failed network connection. Here&#8217;s an almost certainly incomplete list of the exceptions I need rescue:</p>
+
+<p><code>SocketError, Timeout::Error, ActiveResource::TimeoutError, Errno::ECONNREFUSED, Errno::EHOSTDOWN, Errno::EHOSTUNREACH</code></p>
+
+<p>How about an IOError or something?</p>
+</div>
+
+
+ <footer>
+ <p class="meta">
+
+
+
+<span class="byline author vcard">Posted by <span class="fn">Jason Wadsworth</span></span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-22T15:33:18-04:00" pubdate data-updated="true">Apr 22<span>nd</span>, 2009</time>
+
+
+<span class="categories">
+
+ <a class='category' href='/blog/categories/regular/'>regular</a>
+
+</span>
+
+
+ </p>
+
+ <div class="sharing">
+
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://subakva.github.com/blog/2009/04/22/ruby-network-error-list/" data-via="subakva" data-counturl="http://subakva.github.com/blog/2009/04/22/ruby-network-error-list/" >Tweet</a>
+
+
+
+</div>
+
+
+ <p class="meta">
+
+ <a class="basic-alignment left" href="/blog/2009/04/21/s3cmd-with-macports/" title="Previous Post: s3cmd with MacPorts">&laquo; s3cmd with MacPorts</a>
+
+
+ <a class="basic-alignment right" href="/blog/2009/04/28/character-encodings-in-ruby/" title="Next Post: Character Encodings in Ruby">Character Encodings in Ruby &raquo;</a>
+
+ </p>
+ </footer>
+</article>
+
+</div>
+
+<aside class="sidebar">
+
+ <section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+
+ <li class="post">
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
+ </li>
+
+ </ul>
+</section>
+
+<section>
+ <h1>GitHub Repos</h1>
+ <ul id="gh_repos">
+ <li class="loading">Status updating...</li>
+ </ul>
+
+ <a href="https://github.com/subakva">@subakva</a> on GitHub
+
+ <script type="text/javascript">
+ $.domReady(function(){
+ if (!window.jXHR){
+ var jxhr = document.createElement('script');
+ jxhr.type = 'text/javascript';
+ jxhr.src = '/javascripts/libs/jXHR.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(jxhr, s);
+ }
+
+ github.showRepos({
+ user: 'subakva',
+ count: 0,
+ skip_forks: true,
+ target: '#gh_repos'
+ });
+ });
+ </script>
+ <script src="/javascripts/github.js" type="text/javascript"> </script>
+</section>
+
+
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("subakva", 4, false);
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+
+ <a href="http://twitter.com/subakva" class="twitter-follow-button" data-show-count="false">Follow @subakva</a>
+
+</section>
+
+
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:subakva">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "subakva"; //id target for pinboard list
+ var pinboard_count = 3; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+
+
+
+
+
+</aside>
+
+
+ </div>
+ </div>
+ <footer role="contentinfo"><p>
+ Copyright &copy; 2012 - Jason Wadsworth -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
+
+</footer>
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'subakva';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+
+
+
+
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+
+
+
+
+
+</body>
+</html>
297 blog/2009/04/28/character-encodings-in-ruby/index.html
View
@@ -0,0 +1,297 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Character Encodings in Ruby - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="I&#8217;ve been dealing with some issues related to character encodings in MySQL, and I ran across this series of articles. It covers the &hellip;">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/04/28/character-encodings-in-ruby">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+
+</nav>
+ <div id="main">
+ <div id="content">
+ <div>
+<article class="hentry" role="article">
+
+ <header>
+
+ <h1 class="entry-title">Character Encodings in Ruby</h1>
+
+
+ <p class="meta">
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-28T09:53:32-04:00" pubdate data-updated="true">Apr 28<span>th</span>, 2009</time>
+
+ | <a href="#disqus_thread">Comments</a>
+
+ </p>
+
+ </header>
+
+
+<div class="entry-content"><p>I&#8217;ve been dealing with some issues related to character encodings in MySQL, and I ran across this series of articles. It covers the fundamentals of character sets and encodings as well as an overview of how they work with Ruby 1.8 and 1.9:</p>
+
+<p><a href="http://blog.grayproductions.net/articles/understanding_m17n">Shades of Gray: Understanding M17n</a></p>
+</div>
+
+
+ <footer>
+ <p class="meta">
+
+
+
+<span class="byline author vcard">Posted by <span class="fn">Jason Wadsworth</span></span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-04-28T09:53:32-04:00" pubdate data-updated="true">Apr 28<span>th</span>, 2009</time>
+
+
+<span class="categories">
+
+ <a class='category' href='/blog/categories/regular/'>regular</a>
+
+</span>
+
+
+ </p>
+
+ <div class="sharing">
+
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://subakva.github.com/blog/2009/04/28/character-encodings-in-ruby/" data-via="subakva" data-counturl="http://subakva.github.com/blog/2009/04/28/character-encodings-in-ruby/" >Tweet</a>
+
+
+
+</div>
+
+
+ <p class="meta">
+
+ <a class="basic-alignment left" href="/blog/2009/04/22/ruby-network-error-list/" title="Previous Post: Ruby Network Error List">&laquo; Ruby Network Error List</a>
+
+
+ <a class="basic-alignment right" href="/blog/2009/05/08/sinatra-hacking-at-railsconf/" title="Next Post: Sinatra Hacking at RailsConf">Sinatra Hacking at RailsConf &raquo;</a>
+
+ </p>
+ </footer>
+</article>
+
+</div>
+
+<aside class="sidebar">
+
+ <section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+
+ <li class="post">
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
+ </li>
+
+ </ul>
+</section>
+
+<section>
+ <h1>GitHub Repos</h1>
+ <ul id="gh_repos">
+ <li class="loading">Status updating...</li>
+ </ul>
+
+ <a href="https://github.com/subakva">@subakva</a> on GitHub
+
+ <script type="text/javascript">
+ $.domReady(function(){
+ if (!window.jXHR){
+ var jxhr = document.createElement('script');
+ jxhr.type = 'text/javascript';
+ jxhr.src = '/javascripts/libs/jXHR.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(jxhr, s);
+ }
+
+ github.showRepos({
+ user: 'subakva',
+ count: 0,
+ skip_forks: true,
+ target: '#gh_repos'
+ });
+ });
+ </script>
+ <script src="/javascripts/github.js" type="text/javascript"> </script>
+</section>
+
+
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("subakva", 4, false);
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+
+ <a href="http://twitter.com/subakva" class="twitter-follow-button" data-show-count="false">Follow @subakva</a>
+
+</section>
+
+
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:subakva">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "subakva"; //id target for pinboard list
+ var pinboard_count = 3; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+
+
+
+
+
+</aside>
+
+
+ </div>
+ </div>
+ <footer role="contentinfo"><p>
+ Copyright &copy; 2012 - Jason Wadsworth -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
+
+</footer>
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'subakva';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+
+
+
+
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+
+
+
+
+
+</body>
+</html>
301 blog/2009/05/08/sinatra-hacking-at-railsconf/index.html
View
@@ -0,0 +1,301 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Sinatra Hacking at RailsConf - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="I played around with Sinatra a bit at RailsConf and there&#8217;s a tiny spec of open source code to show for it: Bourbon - An extension to Sinatra &hellip;">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/05/08/sinatra-hacking-at-railsconf">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+
+</nav>
+ <div id="main">
+ <div id="content">
+ <div>
+<article class="hentry" role="article">
+
+ <header>
+
+ <h1 class="entry-title">Sinatra Hacking at RailsConf</h1>
+
+
+ <p class="meta">
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-05-08T16:21:33-04:00" pubdate data-updated="true">May 8<span>th</span>, 2009</time>
+
+ | <a href="#disqus_thread">Comments</a>
+
+ </p>
+
+ </header>
+
+
+<div class="entry-content"><p>I played around with <a href="http://www.sinatrarb.com/">Sinatra</a> a bit at RailsConf and there&#8217;s a tiny spec of open source code to show for it:</p>
+
+<ul>
+<li><p><a href="http://subakva.github.com/bourbon">Bourbon</a> - An extension to Sinatra that adds support for <a href="http://wiki.github.com/tobi/liquid">Liquid</a> templates.</p></li>
+<li><p><a href="http://github.com/subakva/colorurl/tree/master">ColorURL</a> - A simple Sinatra application that displays a page in the color of the URL path. It uses the <a href="http://color.rubyforge.org/">color</a> gem and is deployed on <a href="http://www.heroku.com">Heroku</a>. [<a href="http://colorurl.heroku.com/mauve">[http://colorurl.heroku.com/mauve](http://colorurl.heroku.com/mauve)</a>]</p></li>
+</ul>
+
+</div>
+
+
+ <footer>
+ <p class="meta">
+
+
+
+<span class="byline author vcard">Posted by <span class="fn">Jason Wadsworth</span></span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-05-08T16:21:33-04:00" pubdate data-updated="true">May 8<span>th</span>, 2009</time>
+
+
+<span class="categories">
+
+ <a class='category' href='/blog/categories/regular/'>regular</a>
+
+</span>
+
+
+ </p>
+
+ <div class="sharing">
+
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://subakva.github.com/blog/2009/05/08/sinatra-hacking-at-railsconf/" data-via="subakva" data-counturl="http://subakva.github.com/blog/2009/05/08/sinatra-hacking-at-railsconf/" >Tweet</a>
+
+
+
+</div>
+
+
+ <p class="meta">
+
+ <a class="basic-alignment left" href="/blog/2009/04/28/character-encodings-in-ruby/" title="Previous Post: Character Encodings in Ruby">&laquo; Character Encodings in Ruby</a>
+
+
+ <a class="basic-alignment right" href="/blog/2009/05/15/urijoin-v-filejoin/" title="Next Post: URI.join v. File.join">URI.join v. File.join &raquo;</a>
+
+ </p>
+ </footer>
+</article>
+
+</div>
+
+<aside class="sidebar">
+
+ <section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+
+ <li class="post">
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
+ </li>
+
+ </ul>
+</section>
+
+<section>
+ <h1>GitHub Repos</h1>
+ <ul id="gh_repos">
+ <li class="loading">Status updating...</li>
+ </ul>
+
+ <a href="https://github.com/subakva">@subakva</a> on GitHub
+
+ <script type="text/javascript">
+ $.domReady(function(){
+ if (!window.jXHR){
+ var jxhr = document.createElement('script');
+ jxhr.type = 'text/javascript';
+ jxhr.src = '/javascripts/libs/jXHR.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(jxhr, s);
+ }
+
+ github.showRepos({
+ user: 'subakva',
+ count: 0,
+ skip_forks: true,
+ target: '#gh_repos'
+ });
+ });
+ </script>
+ <script src="/javascripts/github.js" type="text/javascript"> </script>
+</section>
+
+
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("subakva", 4, false);
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+
+ <a href="http://twitter.com/subakva" class="twitter-follow-button" data-show-count="false">Follow @subakva</a>
+
+</section>
+
+
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:subakva">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "subakva"; //id target for pinboard list
+ var pinboard_count = 3; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+
+
+
+
+
+</aside>
+
+
+ </div>
+ </div>
+ <footer role="contentinfo"><p>
+ Copyright &copy; 2012 - Jason Wadsworth -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
+
+</footer>
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'subakva';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+
+
+
+
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+
+
+
+
+
+</body>
+</html>
307 blog/2009/05/15/urijoin-v-filejoin/index.html
View
@@ -0,0 +1,307 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>URI.join v. File.join - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="URI.join does not work quite the same way as File.join in Ruby. The aim of URI.join is more to calculate a relative path (as a browser would) than to &hellip;">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/05/15/urijoin-v-filejoin">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+
+</nav>
+ <div id="main">
+ <div id="content">
+ <div>
+<article class="hentry" role="article">
+
+ <header>
+
+ <h1 class="entry-title">URI.join v. File.join</h1>
+
+
+ <p class="meta">
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-05-15T19:12:00-04:00" pubdate data-updated="true">May 15<span>th</span>, 2009</time>
+
+ | <a href="#disqus_thread">Comments</a>
+
+ </p>
+
+ </header>
+
+
+<div class="entry-content"><p><code>URI.join</code> does not work quite the same way as <code>File.join</code> in Ruby. The aim of <code>URI.join</code> is more to calculate a relative path (as a browser would) than to simply concatenate path elements cleanly. The irb output below demonstrates this:</p>
+
+<p>`</p>
+
+<pre><code>irb&gt; require 'uri' #=&gt; true
+irb&gt; host = 'http://www.example.com' #=&gt; "http://www.example.com"
+irb&gt; prefix = 'prefix' #=&gt; "prefix"
+irb&gt; file = 'file.html' #=&gt; "file.html"
+irb&gt; URI.join(host, prefix, file).to_s #=&gt; "http://www.example.com/file.html"
+irb&gt; URI.join(host, prefix+ '/', file).to_s #=&gt; "http://www.example.com/prefix/file.html"
+</code></pre>
+
+<p>`</p>
+</div>
+
+
+ <footer>
+ <p class="meta">
+
+
+
+<span class="byline author vcard">Posted by <span class="fn">Jason Wadsworth</span></span>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2009-05-15T19:12:00-04:00" pubdate data-updated="true">May 15<span>th</span>, 2009</time>
+
+
+<span class="categories">
+
+ <a class='category' href='/blog/categories/regular/'>regular</a>
+
+</span>
+
+
+ </p>
+
+ <div class="sharing">
+
+ <a href="http://twitter.com/share" class="twitter-share-button" data-url="http://subakva.github.com/blog/2009/05/15/urijoin-v-filejoin/" data-via="subakva" data-counturl="http://subakva.github.com/blog/2009/05/15/urijoin-v-filejoin/" >Tweet</a>
+
+
+
+</div>
+
+
+ <p class="meta">
+
+ <a class="basic-alignment left" href="/blog/2009/05/08/sinatra-hacking-at-railsconf/" title="Previous Post: Sinatra Hacking at RailsConf">&laquo; Sinatra Hacking at RailsConf</a>
+
+
+ <a class="basic-alignment right" href="/blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge/" title="Next Post: Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge">Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge &raquo;</a>
+
+ </p>
+ </footer>
+</article>
+
+</div>
+
+<aside class="sidebar">
+
+ <section>
+ <h1>Recent Posts</h1>
+ <ul id="recent_posts">
+
+ <li class="post">
+ <a href="/blog/2012/01/15/federal-reserve-bank-of-boston-taken-with-instagram/">None</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2012/01/08/book-review-html5-cookbook-by-christopher-schmitt-kyle-simpson/">Book Review: HTML5 Cookbook by Christopher Schmitt, Kyle Simpson</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/23/book-review-a-bug-hunters-diary-by-tobias-klein-oreilly-media/">Book Review: A Bug Hunter's Diary by Tobias Klein; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/11/09/book-review-test-driven-infrastructure-with-chef-by-stephen-nelson-smith-oreilly-media/">Book Review: Test-Driven Infrastructure with Chef by Stephen Nelson-Smith; O'Reilly Media</a>
+ </li>
+
+ <li class="post">
+ <a href="/blog/2011/08/02/the-mother-of-all-interview-questions-raganwalds-posterous/">The Mother of All Interview Questions - raganwald's posterous</a>
+ </li>
+
+ </ul>
+</section>
+
+<section>
+ <h1>GitHub Repos</h1>
+ <ul id="gh_repos">
+ <li class="loading">Status updating...</li>
+ </ul>
+
+ <a href="https://github.com/subakva">@subakva</a> on GitHub
+
+ <script type="text/javascript">
+ $.domReady(function(){
+ if (!window.jXHR){
+ var jxhr = document.createElement('script');
+ jxhr.type = 'text/javascript';
+ jxhr.src = '/javascripts/libs/jXHR.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(jxhr, s);
+ }
+
+ github.showRepos({
+ user: 'subakva',
+ count: 0,
+ skip_forks: true,
+ target: '#gh_repos'
+ });
+ });
+ </script>
+ <script src="/javascripts/github.js" type="text/javascript"> </script>
+</section>
+
+
+<section>
+ <h1>Latest Tweets</h1>
+ <ul id="tweets">
+ <li class="loading">Status updating...</li>
+ </ul>
+ <script type="text/javascript">
+ $.domReady(function(){
+ getTwitterFeed("subakva", 4, false);
+ });
+ </script>
+ <script src="/javascripts/twitter.js" type="text/javascript"> </script>
+
+ <a href="http://twitter.com/subakva" class="twitter-follow-button" data-show-count="false">Follow @subakva</a>
+
+</section>
+
+
+<section>
+ <h1>My Pinboard</h1>
+ <ul id="pinboard_linkroll">Fetching linkroll...</ul>
+ <p><a href="http://pinboard.in/u:subakva">My Pinboard Bookmarks &raquo;</a></p>
+</section>
+<script type="text/javascript">
+ var linkroll = 'pinboard_linkroll'; //id target for pinboard list
+ var pinboard_user = "subakva"; //id target for pinboard list
+ var pinboard_count = 3; //id target for pinboard list
+ (function(){
+ var pinboardInit = document.createElement('script');
+ pinboardInit.type = 'text/javascript';
+ pinboardInit.async = true;
+ pinboardInit.src = '/javascripts/pinboard.js';
+ document.getElementsByTagName('head')[0].appendChild(pinboardInit);
+ })();
+</script>
+
+
+
+
+
+</aside>
+
+
+ </div>
+ </div>
+ <footer role="contentinfo"><p>
+ Copyright &copy; 2012 - Jason Wadsworth -
+ <span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
+</p>
+
+</footer>
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'subakva';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+
+
+
+
+ <script type="text/javascript">
+ (function(){
+ var twitterWidgets = document.createElement('script');
+ twitterWidgets.type = 'text/javascript';
+ twitterWidgets.async = true;
+ twitterWidgets.src = 'http://platform.twitter.com/widgets.js';
+ document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
+ })();
+ </script>
+
+
+
+
+
+</body>
+</html>
296 blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge/index.html
View
@@ -0,0 +1,296 @@
+
+<!DOCTYPE html>
+<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
+<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
+<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
+<head>
+ <meta charset="utf-8">
+ <title>Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge - Subakva Teknika</title>
+ <meta name="author" content="Jason Wadsworth">
+
+
+ <meta name="description" content="Sunlight Labs: Blog - Apps for America 2: The Data.gov Challenge
+">
+
+
+ <!-- http://t.co/dKP3o1e -->
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+
+ <link rel="canonical" href="http://subakva.github.com/blog/2009/05/21/sunlight-labs-blog-apps-for-america-2-the-datagov-challenge">
+ <link href="/favicon.png" rel="icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+ <script src="/javascripts/modernizr-2.0.js"></script>
+ <script src="/javascripts/ender.js"></script>
+ <script src="/javascripts/octopress.js" type="text/javascript"></script>
+ <link href="/atom.xml" rel="alternate" title="Subakva Teknika" type="application/atom+xml">
+ <!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
+<link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
+
+
+
+</head>
+
+<body >
+ <header role="banner"><hgroup>
+ <h1><a href="/">Subakva Teknika</a></h1>
+
+</hgroup>
+
+</header>
+ <nav role="navigation"><ul class="subscription" data-subscription="rss">
+ <li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
+
+</ul>
+
+<form action="http://google.com/search" method="get">
+ <fieldset role="search">
+ <input type="hidden" name="q" value="site:subakva.github.com" />
+ <input class="search" type="text" name="q" results="0" placeholder="Search"/>
+ </fieldset>
+</form>
+
+<ul class="main-navigation">
+ <li><a href="/">Blog</a></li>
+ <li><a href="/blog/archives">Archives</a></li>
+</ul>
+