<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>Too-biased - Home</title>
  <id>tag:blog.leetsoft.com,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  
  <link href="http://blog.leetsoft.com/" rel="alternate" type="text/html" />
  <updated>2008-10-11T17:28:32Z</updated>
  <link rel="self" href="http://feeds.feedburner.com/too-biased/xml" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-10-11:4607</id>
    <published>2008-10-11T17:28:00Z</published>
    <updated>2008-10-11T17:28:32Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/417912145/lhc-rap" rel="alternate" type="text/html" />
    <title>LHC Rap</title>
<content type="html">
            &lt;p&gt;via &lt;a href="http://www.youtube.com/watch?v=j50ZssEojtM"&gt;youtube&lt;/a&gt;&lt;/p&gt;


&amp;lt;object height="344" width="425"&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src="http://www.youtube.com/v/j50ZssEojtM&amp;amp;#38;hl=en&amp;amp;#38;fs=1" height="344" width="425"&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=F7WH9w"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=F7WH9w" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/417912145" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/10/11/lhc-rap</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-10-06:4606</id>
    <published>2008-10-06T18:41:00Z</published>
    <updated>2008-10-06T18:44:42Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/413039746/shopify-blogging" rel="alternate" type="text/html" />
    <title>Shopify Blogging</title>
<content type="html">
            &lt;p&gt;Brand and community development where always the guiding principles behind &lt;a href="http://www.shopify.com"&gt;Shopify&lt;/a&gt; and today we launched an important aspect of this: Your visitors can now comment on blog posts.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://blog.shopify.com/2008/10/6/new-feature-comments-for-blogs"&gt;Read more about it on the shopify blog&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;We will provide an import tool for wordpress and other blogging systems soon (implemented as an open source shopify api app. )&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=57QhMg"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=57QhMg" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/413039746" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/10/6/shopify-blogging</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-08-31:4590</id>
    <published>2008-08-31T01:54:00Z</published>
    <updated>2008-08-31T01:58:16Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/379322065/liquid-js" rel="alternate" type="text/html" />
    <title>Liquid JS</title>
<content type="html">
            &lt;p&gt;Color me impressed.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.mattmccray.com"&gt;Matt Mccray&lt;/a&gt; ported Liquid to javascript. &lt;a href="http://gist.github.com/8150"&gt;Go here&lt;/a&gt; to get the gist of it (yea, bad pun)&lt;/p&gt;


	&lt;p&gt;Pretty awesome work Matt :-)&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
&amp;lt;script&amp;gt;
 Liquid.readTemplateFile = function(path) {
  var elem = $(path);
  if(elem) {
    return elem.innerHTML;
  } else {
    path +" can't be found."; // Or throw and error, or whatever you want...
  }
 }

 var tmpl = Liquid.parse("{% include 'myOtherTemplate' with current_user %}"); 
 alert( tmpl.render({ current_user:'M@' }));
&amp;lt;/script&amp;gt;

&amp;lt;script type="text/liquid" id="myOtherTemplate"&amp;gt;
  Hello, {{ current_user }}!
&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=622GHS"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=622GHS" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/379322065" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/8/31/liquid-js</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-08-22:4585</id>
    <published>2008-08-22T19:14:00Z</published>
    <updated>2008-08-22T20:06:56Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/372142416/competitor-comedy" rel="alternate" type="text/html" />
    <title>Competitor Comedy</title>
<content type="html">
            &lt;p&gt;&lt;a href="http://www.shopify.com"&gt;Shopify&lt;/a&gt; got profiled last week in Practical E-Commerce as &lt;a href="http://www.practicalecommerce.com/articles/800-Cart-Of-The-Week-Shopify"&gt;cart of the week&lt;/a&gt; . According to them they found 300 different Shopping cart packages, I know our market was big but that’s pretty insane.&lt;/p&gt;


	&lt;p&gt;Anyways, their Cart of the Week feature pits one Cart against another by asking a competitor to comment on the software, &lt;span class="caps"&gt;CNN&lt;/span&gt; style. In our case they asked Rick Wilson of Miva Merchant to comment on Shopify. Here is what he dislikes:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;The obvious weaknesses I saw were the limits on what they called ‘enterprise’ level offering of only 10,000 SKUs. The other major weakness is the product is built using Ruby On Rails. Ruby On Rails seems to be a development environment with a lot of future possibilities, &lt;strong&gt;but as a general rule you don’t want your revenue-generating product to be based on cutting edge technology. There’s a lot of unforeseeable pitfalls in that area.&lt;/strong&gt;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;(emphasis mine).&lt;/p&gt;


	&lt;p&gt;So to deconstruct the first part of this argument let me just say that we have millions of products in Shopify right now and it’s a pure business decision to limit SKUs to 10k and has nothing to do with the software. There are millions of products in the database. In fact i’d buy Rick lunch if Shopify isn’t right now handling twice the traffic any given Miva Merchant store has ever sustained.&lt;/p&gt;


	&lt;p&gt;What’s left is the advice that you shouldn’t run a revenue-generating web site based on cutting edge technology. I don’t think I have to point out how ridiculous that statement is. First of all I presume that perl was pretty cutting edge ( definitely more than ruby is today ) in 1998 when Miva was written and also we are talking about bloody Miva Merchant here, the e-commerce system that runs on a proprietary closed source database that is known for corruption issues after several hundred products. Not only that, it seems to be one of their main sources of revenue: For &lt;a href="http://www.mivamerchant.com/services/serviceclub/"&gt;129$ setup + 20$ a month&lt;/a&gt; you can get some support and basic database recovery. Unfortunately:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;** Due to the nature of database problems not all database corruption can be covered under this package&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Isn’t it nice that you never have to worry about such tactics with hosted systems and SaaS packages like Shopify?&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=heuJdh"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=heuJdh" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/372142416" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/8/22/competitor-comedy</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-07-21:4571</id>
    <published>2008-07-21T09:37:00Z</published>
    <updated>2008-07-21T09:37:52Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/341611006/rockstar-memcaching" rel="alternate" type="text/html" />
    <title>Rockstar Memcaching</title>
<content type="html">
            &lt;p&gt;I’m back from &lt;a href="http://rethink.unspace.ca/2008/7/20/we-are-rubyfringe"&gt;Rubyfringe&lt;/a&gt; which was hands down the best conference i’ve been to.&lt;/p&gt;


	&lt;p&gt;Pete Forde asked me to present on memcached (mem-cache-dee) after my popular blog article &lt;a href="http://blog.leetsoft.com/2007/5/22/the-secret-to-memcached"&gt;Secret to memcached&lt;/a&gt;. The talk covers different use cases such as simple html snippet stores to advanced expiry systems such as generational cache keys.&lt;/p&gt;


	&lt;p&gt;Every talk at rubyfringe was taped so I’ll update this space with the video once its online. In the meantime enjoy the slides which probably make zero sense on their own.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://blog.leetsoft.com/assets/2008/7/21/Rubyfringe.pdf"&gt;Download the &lt;span class="caps"&gt;PDF&lt;/span&gt;&lt;/a&gt; or watch it on slideshare:&lt;/p&gt;


&lt;div&gt;&lt;a href="http://www.slideshare.net/guest807bb2/rubyfringe?src=embed" title="Rubyfringe"&gt;Rubyfringe&lt;/a&gt;&amp;lt;object height="355" width="425"&gt;&amp;lt;param /&gt;&amp;lt;param /&gt;&amp;lt;param /&gt;&amp;lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=rubyfringe-1216650794678661-8" height="355" width="425"&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;&lt;div&gt;view &lt;a href="http://www.slideshare.net/guest807bb2/rubyfringe?src=embed" title="View Rubyfringe on SlideShare"&gt;presentation&lt;/a&gt; (tags: &lt;a href="http://slideshare.net/tag/memcached"&gt;memcached&lt;/a&gt; &lt;a href="http://slideshare.net/tag/ruby"&gt;ruby&lt;/a&gt; &lt;a href="http://slideshare.net/tag/code"&gt;code&lt;/a&gt; &lt;a href="http://slideshare.net/tag/talk"&gt;talk&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;

	&lt;p&gt;P.S: 30 minute is the ideal length for talks at a Tech Conference.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=2WzvV2"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=2WzvV2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/341611006" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/7/21/rockstar-memcaching</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-07-07:4568</id>
    <published>2008-07-07T19:41:00Z</published>
    <updated>2008-07-07T19:46:42Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/329148436/shopify-sys-admin" rel="alternate" type="text/html" />
    <title>Shopify Sys Admin</title>
<content type="html">
            &lt;p&gt;If you love servers you should consider applying for our &lt;a href="http://jobs.37signals.com/jobs/4002"&gt;system administrator position&lt;/a&gt; . Flexible work hours and you get to work with all the coolest and latest technologies and a fantastic team.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://jobs.37signals.com/jobs/4002"&gt;&lt;img src="http://blog.leetsoft.com/assets/2008/7/7/job.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=VQ2aa2"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=VQ2aa2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/329148436" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/7/7/shopify-sys-admin</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-07-07:4566</id>
    <published>2008-07-07T03:09:00Z</published>
    <updated>2008-07-07T03:10:00Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/328522497/one-million-integers" rel="alternate" type="text/html" />
    <title>One million integers?!</title>
<content type="html">
            &lt;p&gt;This is a great general purpose interview tip:&lt;/p&gt;


	&lt;p&gt;If you don’t know how to answer a question because it’s way outside of your 
expertise simply give it your best guess and negate the question.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=k4RRi_ntQc8"&gt;via youtube&lt;/a&gt;:&lt;/p&gt;


&amp;lt;object height="344" width="425"&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src="http://www.youtube.com/v/k4RRi_ntQc8&amp;amp;#38;hl=en&amp;amp;#38;fs=1" height="344" width="425"&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;

	&lt;p&gt;This can sometimes have pretty impressive results.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=omLbOD"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=omLbOD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/328522497" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/7/7/one-million-integers</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-05-17:4548</id>
    <published>2008-05-17T16:07:00Z</published>
    <updated>2008-05-17T16:22:01Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/292365370/gecko-webkit-screenshots" rel="alternate" type="text/html" />
    <title>Gecko/Webkit Screenshots</title>
<content type="html">
            &lt;p&gt;For our &lt;a href="http://search.shopify.com/search?q=Surfing&amp;amp;#38;min=&amp;amp;#38;max=&amp;amp;#38;limit=16"&gt;Shopify Product Search&lt;/a&gt; we needed a good way to Screenshot web pages. There are some services on the web for this but we ended up building it but none of them fit our needs. They were either way to expensive, they didn’t produce nearly the quality we needed or they didn’t offer an &lt;span class="caps"&gt;API&lt;/span&gt; at all.&lt;/p&gt;


	&lt;p&gt;Our solution was to install a headless X server in our server farm which runs firefox 2.0. We used a python &lt;span class="caps"&gt;GTK&lt;/span&gt; automation script which navigates the Firefox instance to the page and then dumps the framebuffer into a png file when done. This works well enough but i’d like something more robust for a different project.&lt;/p&gt;


	&lt;p&gt;Ideally I’d like someone to build a screenshot tool based on Gecko or Webkit which can simply take an url and spit out an png. A dependency on an running X server is acceptable but I’d rather not have it running all the time because it complicates deployment a lot. It has to run on Linux and must not depend on a shared global resource, i.e. you should be able to take two screenshots at the same time.&lt;/p&gt;


	&lt;p&gt;If you know of a tool like the one I describe or if you think you could build something like this for me please &lt;a href="mailto:tobi@leetsoft.com"&gt;contact me&lt;/a&gt;. This may be paid open source work.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=CzHeKW"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=CzHeKW" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/292365370" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/5/17/gecko-webkit-screenshots</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-05-09:4536</id>
    <published>2008-05-09T01:13:00Z</published>
    <updated>2008-05-09T01:13:50Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/286477632/twitter" rel="alternate" type="text/html" />
    <title>Twitter</title>
<content type="html">
            &lt;p&gt;I need more &lt;a href="http://twitter.com/tobi"&gt;followers on twitter&lt;/a&gt; :-)&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=aydmDe"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=aydmDe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/286477632" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/5/9/twitter</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-05-05:4517</id>
    <published>2008-05-05T17:04:00Z</published>
    <updated>2008-05-05T21:13:08Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/284070927/canadian-citizenship" rel="alternate" type="text/html" />
    <title>Canadian Citizenship</title>
<content type="html">
            &lt;p&gt;Today I got my Canadian citizenship.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://blog.leetsoft.com/assets/2008/5/5/beaver_72.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Both Germany and Canada allow multiple citizenships so I’m allowed to carry both.
Geographical redundancy accomplished. Next step is to apply for my Canadian passport so that I can instant failover :-)&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Take the &lt;a href="http://www.yourlibrary.ca/citizenship/"&gt;citizenship test&lt;/a&gt; yourself and post your score in the comments.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=HmkhDU"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=HmkhDU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/284070927" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/5/5/canadian-citizenship</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-04-22:4508</id>
    <published>2008-04-22T12:45:00Z</published>
    <updated>2008-04-22T12:48:23Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/275384609/database-situps" rel="alternate" type="text/html" />
    <title>Database situps</title>
<content type="html">
            &lt;p&gt;Todd Hoff in his love letter to &lt;a href="http://highscalability.com/search-source-data-how-simpledb-differs-rdbms"&gt;Amazon’s SimpleDB&lt;/a&gt;&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;SimpleDB shifts work out of the database and onto programmers which is why the SimpleDB programming model sucks: it requires a lot more programming to do simple things. I’ll argue however that this is the kind of suckiness programmers like. Programmers like problems they can solve with more programming. We don’t even care how twisted and inelegant the code is because we can make it work. And as long as we can make it work we are happy.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;I can’t think of what drove him to write this. This argument is directly contradicted by the success of Rails.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=jlfmlV"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=jlfmlV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/275384609" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/4/22/database-situps</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-04-21:4497</id>
    <published>2008-04-21T17:36:00Z</published>
    <updated>2008-04-21T19:59:29Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/274845773/active-shipping" rel="alternate" type="text/html" />
    <title>Active Shipping</title>
<content type="html">
            &lt;p&gt;&lt;a href="http://jmacaulay.net/"&gt;James&lt;/a&gt; released his development version of &lt;a href="http://github.com/shopify/active_shipping/tree/master"&gt;Active Shipping to github&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Active Shipping does what Active Merchant did for payment gateways: Provide one unified &lt;span class="caps"&gt;API&lt;/span&gt; to talk to all the Parcel Services on the web. Given a weight, a to and a from address you can calculate the Shipping costs of every supported Shipping Service. All the complexity of the task is handled by the library.&lt;/p&gt;


	&lt;p&gt;Active Shipping has been in production use with &lt;a href="http://www.shopify.com"&gt;Shopify&lt;/a&gt; since the beginning of the year.&lt;/p&gt;


&lt;span class="caps"&gt;API&lt;/span&gt;: 
&lt;pre&gt;&lt;code&gt;
require 'active_shipping'
include ActiveMerchant::Shipping

# Package up a poster and a Wii for your nephew.
packages = [
  Package.new(  100,                        # 100 grams
                [93,10],                    # 93 cm long, 10 cm diameter
                :cylinder =&amp;gt; true),         # cylinders have different volume calculations

  Package.new(  (7.5 * 16),                 # 7.5 lbs, times 16 oz/lb.
                [15, 10, 4.5],              # 15x10x4.5 inches
                :units =&amp;gt; :imperial)        # not grams, not centimetres
]

# You live in Beverly Hills, he lives in Ottawa
origin = Location.new(      :country =&amp;gt; 'US',
                            :state =&amp;gt; 'CA',
                            :city =&amp;gt; 'Beverly Hills',
                            :zip =&amp;gt; '90210')

destination = Location.new( :country =&amp;gt; 'CA',
                            :province =&amp;gt; 'ON',
                            :city =&amp;gt; 'Ottawa',
                            :postal_code =&amp;gt; 'K1P 1J1')

# Find out how much it'll be.
ups = UPS.new(:login =&amp;gt; 'auntjudy', :password =&amp;gt; 'secret', :key =&amp;gt; 'xml-access-key')
response = ups.find_rates(origin, destination, packages)

ups_rates = response.rates.sort_by(&amp;:price).collect {|rate| [rate.service_name, rate.price]}
# =&amp;gt; [["UPS Standard", 3936],
#     ["UPS Worldwide Expedited", 8682],
#     ["UPS Saver", 9348],
#     ["UPS Express", 9702],
#     ["UPS Worldwide Express Plus", 14502]]

# Check out USPS for comparison...
usps = USPS.new(:login =&amp;gt; 'developer-key')
response = usps.find_rates(origin, destination, packages)

usps_rates = response.rates.sort_by(&amp;:price).collect {|rate| [rate.service_name, rate.price]}
# =&amp;gt; [["USPS Priority Mail International", 4110],
#     ["USPS Express Mail International (EMS)", 5750],
#     ["USPS Global Express Guaranteed Non-Document Non-Rectangular", 9400],
#     ["USPS GXG Envelopes", 9400],
#     ["USPS Global Express Guaranteed Non-Document Rectangular", 9400],
#     ["USPS Global Express Guaranteed", 9400]]
&lt;/code&gt;&lt;/pre&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=JUboDe"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=JUboDe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/274845773" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/4/21/active-shipping</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-04-15:4493</id>
    <published>2008-04-15T21:45:00Z</published>
    <updated>2008-04-15T21:57:20Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/271003114/git-and-capistrano" rel="alternate" type="text/html" />
    <title>Git and Capistrano</title>
<content type="html">
            &lt;p&gt;Git support in the latest capistrano works very well but there are two gotcha’s I ran into, i’ll document them here so that Google can pick it up.&lt;/p&gt;


	&lt;p&gt;The first problem was the bizarre error message I got when I forgot to push my changes to the deployment repository:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
 ** [err] Needed a single revision
 ** [err] Needed a single revision
 [...]
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Needed a single revision, well then. Git seems to use the rare other meaning of “single” which means “existing” or “valid”.&lt;/p&gt;


	&lt;p&gt;The other problem was harder to track down. Capistrano would simply hang forever after the update_code task. It would also leave the cached_copy directories in a totally invalid state on some servers which required manual rm -rf. Thanks go to Scott Raymond on &lt;a href="http://twitter.com/sco/statuses/788416848"&gt;Twitter&lt;/a&gt; for pointing me in the right direction. It seems that we have too many App servers for a stock sshd_config and It triggers some kind of throttling logic which git cannot deal with.&lt;/p&gt;


	&lt;p&gt;If you are deploying to medium to large server farms better head over to your git box and increase the &lt;code&gt;MaxStartups&lt;/code&gt; now.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
MaxStartups 10000:1:10000
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This solves the problem.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=eXTvPD"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=eXTvPD" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/271003114" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/4/15/git-and-capistrano</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-04-11:4478</id>
    <published>2008-04-11T01:44:00Z</published>
    <updated>2008-04-11T01:50:44Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/268077492/work-on-shopify" rel="alternate" type="text/html" />
    <title>Work on Shopify</title>
<content type="html">
            &lt;p&gt;Are you in Ottawa, Canada or willing to relocate? 
Want to work in the coolest office in town? Would you like to work on a high profile rails application with millions of users? 
Do you want to work with some of the best rails programmers out there?&lt;/p&gt;


	&lt;p&gt;Please email me at &lt;a href="mailto:tobi@jadedpixel.com"&gt;tobi@jadedpixel.com&lt;/a&gt;. 
Please include a piece of code you are especially proud of or point me to some of your open source work. If you include a CV please attach it as &lt;span class="caps"&gt;PDF&lt;/span&gt;.&lt;/p&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=xRxbRL"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=xRxbRL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/268077492" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/4/11/work-on-shopify</feedburner:origLink></entry>
  <entry xml:base="http://blog.leetsoft.com/">
    <author>
      <name>tobi</name>
    </author>
    <id>tag:blog.leetsoft.com,2008-04-11:4476</id>
    <published>2008-04-11T01:17:00Z</published>
    <updated>2008-04-11T01:18:19Z</updated>
    <link href="http://feeds.feedburner.com/~r/too-biased/xml/~3/268061958/wtf" rel="alternate" type="text/html" />
    <title>Wtf?</title>
<content type="html">
            &lt;pre&gt;&lt;code&gt;
if false
  var = nil
end

p var.nil? #=&amp;gt; true ??? 
&lt;/code&gt;&lt;/pre&gt;
          
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/too-biased/xml?a=JGbqw8"&gt;&lt;img src="http://feeds.feedburner.com/~a/too-biased/xml?i=JGbqw8" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/too-biased/xml/~4/268061958" height="1" width="1"/&gt;</content>  <feedburner:origLink>http://blog.leetsoft.com/2008/4/11/wtf</feedburner:origLink></entry>
</feed>
