<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Keep Calm And Carry On</title>
	<atom:link href="http://keep12on.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://keep12on.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 16 Aug 2011 11:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='keep12on.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Keep Calm And Carry On</title>
		<link>http://keep12on.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://keep12on.com/osd.xml" title="Keep Calm And Carry On" />
	<atom:link rel='hub' href='http://keep12on.com/?pushpress=hub'/>
		<item>
		<title>Mustachio</title>
		<link>http://keep12on.com/2011/08/12/mustachio/</link>
		<comments>http://keep12on.com/2011/08/12/mustachio/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 23:43:31 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=63</guid>
		<description><![CDATA[It went like this: Andrew: This service adds a moustache to any face! It&#8217;s awesome! Me: I&#8217;m busy working. A: What if we create an extension that would add a moustache to every face! It&#8217;d be awesome! Me: I&#8217;m busy working. A: It&#8217;d take only a few minutes anyway. Me: Ok, whatever&#8230; In the next [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=63&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It went like this:</p>
<p>Andrew: <a href="http://mustachify.me/">This service</a> adds a moustache to any face! It&#8217;s awesome!</p>
<p>Me: I&#8217;m busy working.</p>
<p>A: What if we create an extension that would add a moustache to every face! It&#8217;d be awesome!</p>
<p>Me: I&#8217;m busy working.</p>
<p>A: It&#8217;d take only a few minutes anyway.</p>
<p>Me: Ok, whatever&#8230;</p>
<p>In the next 7 minutes or so I created a<a href="https://chrome.google.com/webstore/detail/khaoakmndhjandiaaadnjgnbchillcdj"> Chrome extension that puts a moustache</a> on every face on every page. It took us another half an hour to test it, fix an occasional bug, draw a few icons, write a description for the Chrome gallery and pay $5 developer fee to Google since I never used my own account for extensions yet.</p>
<p>We tweeted about it and it went viral, to our surprise. We found out that the code doesn&#8217;t perform well on the Cedar stack of Heroku, so we had to redeploy to the old Bamboo – all while the usage levels were growing exponentially. Almost immediately it became obvious that our <a href="http://www.face.com">Face.com</a> API key wouldn&#8217;t be enough to process all the requests and we asked to raise the limit (fortunately, they raised our limit promptly &#8211; thanks). In a matter of minutes we received an email from the American Mustache Institute, and in a matter of hours people began <a href="http://siliconfilter.com/mustachio-the-one-chrome-extension-you-need-to-install-today/">blogging about it</a> (and <a href="http://blogs.diariodonordeste.com.br/desencontrando/aplicativos/mustachio-todo-mundo-de-bigode/">not only in English</a>). Our servers are still unable to process all the requests; we have to drop some of them and the tweets keep coming.</p>
<p>It was a good fun for a Friday afternoon pairing with the awesome <a href="http://forwardtechnology.co.uk/andrew">@teabass</a>!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=63&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2011/08/12/mustachio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>A/B testing browser extensions</title>
		<link>http://keep12on.com/2011/06/02/ab-testing-browser-extensions/</link>
		<comments>http://keep12on.com/2011/06/02/ab-testing-browser-extensions/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 14:37:02 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=57</guid>
		<description><![CDATA[A in-depth description of how we split test InvisibleHand, our price comparison extension.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=57&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A in-depth description of <a href="http://visualwebsiteoptimizer.com/split-testing-blog/a-b-testing-browser-extension/">how we split test InvisibleHand</a>, our price comparison extension.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=57&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2011/06/02/ab-testing-browser-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>Detecting extension uninstallations on Chrome</title>
		<link>http://keep12on.com/2011/05/26/detecting-extension-uninstallations-on-chrome/</link>
		<comments>http://keep12on.com/2011/05/26/detecting-extension-uninstallations-on-chrome/#comments</comments>
		<pubDate>Thu, 26 May 2011 16:46:44 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=49</guid>
		<description><![CDATA[Google Chrome, unlike Firefox, doesn&#8217;t allow to detect when the user uninstalls the extension, which is quite useful to understand user behaviour. There is a feature request on crbug.com with a discussion of this feature but it hasn&#8217;t been implemented yet. At InvisibleHand we are really trying to understand user behaviour to improve our extension. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=49&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Google Chrome, unlike Firefox, doesn&#8217;t allow to detect when the user uninstalls the extension, which is quite useful to understand user behaviour. There is a feature request on crbug.com with a discussion of this feature but it hasn&#8217;t been implemented yet.</p>
<p>At <a href="https://chrome.google.com/webstore/detail/lghjfnfolmcikomdjmoiemllfnlmmoko" title="InvisibleHand" target="_blank">InvisibleHand</a> we are really trying to understand user behaviour to improve our extension. In particular, <a href="http://www.visualwebsiteoptimizer.com/split-testing-blog/a-b-testing-browser-extension/">we run A/B tests of our extension</a> to track whether new features make the users to uninstall InvisibleHand less or more. To track the uninstallations in a fairly hacky way, we inject this piece of code as a content script into every single page:</p>
<pre><code>var iFrameId = 'invisiblehand-uninstallation-notifier';
var silenceCount = 0;
var maxSilence = 3;

var timer = setInterval(function() {
  chrome.extension.sendRequest({topic: "heartbeat"}, function(reply) {
    if (reply &amp;&amp; reply.alive)
      silenceCount = 0; // we want 3 consecutive silence events just to be sure
    else
      silenceCount++;
    if (silenceCount &lt; maxSilence) return;
    clearInterval(timer);
    if (document.getElementById(iFrameId)) return;
    var iframe = document.createElement(&quot;iframe&quot;);
    iframe.id = iFrameId;
    iframe.src = &quot;http://productsiframe.invisiblehand.co.uk/uninstall&quot;;
    iframe.style.display = &quot;none&quot;;
    document.body.insertBefore(iframe, document.body.firstChild);
  })
}, 1000);
</code></pre>
<p>This code tries to connect to the background page every second and if it fails (when it fails, the callback is still called but the reply is undefined), we assume the extension was disabled or uninstalled, so we inject an invisible iframe into the current page to notify our server about the uninstall. It&#8217;s the server&#8217;s responsibility to count only one uninstall per user since there is a high probability that this code will be executed in every open tab. However, it&#8217;s not of utmost important to us since we&#8217;re tracking not the absolute number of uninstalls but a relative change.</p>
<p>However, there is a big problem with this piece of code apart from it being very hacky. Several users reported that it leaks memory and the tabs with this code running that are left open in background can leak hundreds of MBs of memory. We found it hard to reproduce it but it looks like the issue is only present on the version 11 and not present on version 12 of Google Chrome. Furthermore, some users have reported InvisibleHand crashing a lot when this code was deployed. Again, we were unable to reproduce it reliably but I tend to believe this setInterval() has something to do with memory leaks and crashes.</p>
<p>We usually deploy this code only for short periods of time (hours) to run a specific A/B test and roll it back (release a new version without this content script) as soon as possible. I&#8217;m really looking to the day when it&#8217;ll be possible to listen for the uninstallation event.</p>
<p>If you know why this code may be causing memory leaks and/or crashes, please let me know in the comments.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=49&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2011/05/26/detecting-extension-uninstallations-on-chrome/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery exception in Firefox 4</title>
		<link>http://keep12on.com/2010/12/14/jquery-exception-in-firefox-4/</link>
		<comments>http://keep12on.com/2010/12/14/jquery-exception-in-firefox-4/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 15:06:33 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=46</guid>
		<description><![CDATA[If jQuery is used as a part of a browser extension in Firefox, it will work for FF3 but not necessarily in FF4. In particular, when jQuery is loaded using loadSubScript() passing a window (a wrappedJSObject object) to it as a context, it will throw an exception in eventSupported(): &#8220;Component is not available&#8221; nsresult: &#8220;0&#215;80040111 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=46&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If jQuery is used as a part of a browser extension in Firefox, it will work for FF3 but not necessarily in FF4. In particular, when jQuery is loaded using loadSubScript() passing a window (a wrappedJSObject object) to it as a context, it will throw an exception in eventSupported():</p>
<p>&#8220;Component is not available&#8221;  nsresult: &#8220;0&#215;80040111 (NS_ERROR_NOT_AVAILABLE)&#8221;<br />
FF4 throws this exception if the event that is being checked is not supported on these lines:</p>
<p>var isSupported = (eventName in el); </p>
<p>isSupported = typeof el[eventName] === &#8220;function&#8221;;<br />
This problem seems to be specific to loading jQuery using loadSubScript() since I cannot reproduce it in the console.</p>
<p>A workaround is a simple try/catch block. I created a pull request for the jQuery team here: https://github.com/jquery/jquery/pull/128</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=46&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2010/12/14/jquery-exception-in-firefox-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>Rails Mailer, GMail and Net::SMTPFatalError: 555 5.5.2 Syntax error.</title>
		<link>http://keep12on.com/2010/04/17/rails-mailer-gmail-and-netsmtpfatalerror-555-5-5-2-syntax-error/</link>
		<comments>http://keep12on.com/2010/04/17/rails-mailer-gmail-and-netsmtpfatalerror-555-5-5-2-syntax-error/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 19:20:10 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=40</guid>
		<description><![CDATA[As it turns out, you&#8217;ll get Net::SMTPFatalError: 555 5.5.2 Syntax error. if your from address looks like &#8216;Evgeny Shadchnev &#60;email@gmail.com&#62;&#8221;. Setting it to just &#8216;email@gmail.com&#8217; helps.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=40&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As it turns out, you&#8217;ll get</p>
<p><code>Net::SMTPFatalError: 555 5.5.2 Syntax error.</code></p>
<p>if your from address looks like &#8216;Evgeny Shadchnev &lt;email@gmail.com&gt;&#8221;. Setting it to just &#8216;email@gmail.com&#8217; helps.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=40&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2010/04/17/rails-mailer-gmail-and-netsmtpfatalerror-555-5-5-2-syntax-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>FasterCSV and UTF-16</title>
		<link>http://keep12on.com/2010/04/09/fastercsv-and-utf-16/</link>
		<comments>http://keep12on.com/2010/04/09/fastercsv-and-utf-16/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 17:17:36 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=38</guid>
		<description><![CDATA[FasterCSV under Ruby 1.8 will throw an obscure error if the input is given in UTF-16: FasterCSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 1). The solution is to convert the data to UTF-8: require 'iconv' csv = Iconv.conv('utf-8', 'utf-16', csv) Then, :encoding =&#62; 'u', flag for FasterCSV should be enough to process [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=38&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>FasterCSV under Ruby 1.8 will throw an obscure error if the input is given in UTF-16:</p>
<p><code>FasterCSV::MalformedCSVError: Unquoted fields do not allow \r or \n (line 1).</code></p>
<p>The solution is to convert the data to UTF-8:</p>
<p><code><br />
require 'iconv'<br />
csv = Iconv.conv('utf-8', 'utf-16', csv)<br />
</code></p>
<p>Then, <code>:encoding =&gt; 'u',</code> flag for FasterCSV should be enough to process this file with no problems.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=38&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2010/04/09/fastercsv-and-utf-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>Ack in Project Textmate bundle fails with Ruby 1.9</title>
		<link>http://keep12on.com/2010/04/02/ack-in-project-textmate-bundle-fails-with-ruby-1-9/</link>
		<comments>http://keep12on.com/2010/04/02/ack-in-project-textmate-bundle-fails-with-ruby-1-9/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 15:22:56 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=34</guid>
		<description><![CDATA[Textmate is great but Find in Project is slow as molasses, so everybody&#8217;s using Ack in Project bundle. The problem is it doesn&#8217;t work with Ruby 1.9 (fails with to_plist ArgumentError) and the problem is Textmate, which provides plist.c that is incompatible with Ruby 1.9. The solution: # Updating osx-plist for Ruby 1.9 compatibility $&#62; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=34&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Textmate is great but Find in Project is slow as molasses, so everybody&#8217;s using Ack in Project bundle. The problem is it doesn&#8217;t work with Ruby 1.9 (fails with to_plist ArgumentError) and the problem is Textmate, which provides plist.c that is incompatible with Ruby 1.9. The solution:<br />
<code><br />
# Updating osx-plist for Ruby 1.9 compatibility<br />
$&gt; git clone git://github.com/kballard/osx-plist.git<br />
$&gt; cd osx-plist/ext/plist<br />
$&gt; ruby extconf.rb &amp;&amp; make<br />
$&gt; cp plist.bundle /Applications/TextMate.app/Contents/SharedSupport/Support/lib/osx/<br />
</code><br />
The credit for the finding the solution goes to <a href="http://altentee.com/2007/installing-the-cvs-bundle-for-textmate-for-mac-osx/comment-page-1/#comment-39">James</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=34&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2010/04/02/ack-in-project-textmate-bundle-fails-with-ruby-1-9/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>Focused unit tests in ruby 1.9</title>
		<link>http://keep12on.com/2010/04/02/focused-unit-tests-in-ruby-1-9/</link>
		<comments>http://keep12on.com/2010/04/02/focused-unit-tests-in-ruby-1-9/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 15:16:47 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=25</guid>
		<description><![CDATA[I was having a problem running focused unit tests with TextMate 1.5.9, ruby 1.9.1 and rails 2.3.5. TextMate passes the params to the script like this: ruby unit/booking_test.rb --name=test_cost_is_calculated_correctly_when_theres_a_surcharge This doesn&#8217;t work (all tests are run instead) because the parameter is not passed correctly to the script. This works, however: ruby unit/booking_test.rb --name test_cost_is_calculated_correctly_when_theres_a_surcharge On [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=25&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was having a problem running focused unit tests with TextMate 1.5.9, ruby 1.9.1 and rails 2.3.5. TextMate passes the params to the script like this:</p>
<p><code>ruby unit/booking_test.rb --name=test_cost_is_calculated_correctly_when_theres_a_surcharge</code></p>
<p>This doesn&#8217;t work (all tests are run instead) because the parameter is not passed correctly to the script. This works, however:</p>
<p><code>ruby unit/booking_test.rb --name test_cost_is_calculated_correctly_when_theres_a_surcharge </code></p>
<p>On ruby 1.8.7 both ways of passing the argument work just fine, while on ruby 1.9.1 only the second way works.</p>
<p>Since we want to pass two arguments to the script (&#8216;&ndash;&ndash;name&#8217;, &#8216;test_foobar&#8217;) instead of one (&#8216;&ndash;&ndash;name=test_foobar&#8217;), let&#8217;s patch TextMate. Open<br />
<code>/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/RubyMate/runscript.rb</code><br />
and replace<br />
<code><br />
  if name and !name.empty?<br />
    args &lt;&lt; &quot;--name #{name}&quot;<br />
  elsif test_name and !test_name.empty?<br />
    args &lt;&lt; &quot;--name test_#{test_name.gsub(/\s+/,&#039;_&#039;)}&quot;<br />
  elsif spec and !spec.empty? and context and !context.empty?<br />
    args &lt;&lt; %Q{--name &quot;/test_spec \\{.*#{context}\\} \\d{3} \\[#{spec}\\]/&quot;}<br />
</code></p>
<p>with<br />
<code><br />
  args &lt;&lt; &quot;--name&quot;<br />
  if name and !name.empty?<br />
     args &lt;&lt; name<br />
  elsif test_name and !test_name.empty?<br />
    args &lt;&lt; &quot;test_#{test_name.gsub(/\s+/,&#039;_&#039;)}&quot;<br />
  elsif spec and !spec.empty? and context and !context.empty?<br />
    args &lt;&lt; %Q{&quot;/test_spec \\{.*#{context}\\} \\d{3} \\[#{spec}\\]/&quot;}<br />
</code></p>
<p>This will make the focused unit tests work.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=25&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2010/04/02/focused-unit-tests-in-ruby-1-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>Javascript testing in Ruby with Selenium</title>
		<link>http://keep12on.com/2009/06/03/javascript-testing-in-ruby-with-selenium/</link>
		<comments>http://keep12on.com/2009/06/03/javascript-testing-in-ruby-with-selenium/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 09:20:13 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=19</guid>
		<description><![CDATA[InvisibleHand, a Firefox plugin that checks alternative prices as you are shopping online and alerts you if a bargain is found, consists of client part (the extension itself, in Javascript) and server part (the database of products, in Ruby). In order for the extension to always stay up-to-date it downloads pieces of JS code with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=19&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.getinvisiblehand.com/">InvisibleHand</a>, a Firefox plugin that checks alternative prices as you are shopping online and alerts you if a bargain is found, consists of client part (the extension itself, in Javascript) and server part (the database of products, in Ruby). In order for the extension to always stay up-to-date it downloads pieces of JS code with price scraping logic from the server when it starts. I look after the JS code updating it whenever the layout of pages on retailers&#8217; websites changes.</p>
<p>The challenge was to test this stuff automatically because the JS code makes part of a Ruby project and I want to &#8216;rake test&#8217; it all. Getting a JS engine in my project would be an overkill, so I resorted to <a href="http://www.seleniumhq.com/">Selenium</a>.</p>
<p>So, how to test a piece of Javascript code stored in your Ruby project?</p>
<p>First, download Selenium <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Then, launch the server<br />
<code>java -jar selenium-server.jar</code></p>
<p>Then, install selenium client<br />
<code>sudo gem install selenium-client</code></p>
<p>In your unit test, launch Selenium:<br />
<code><br />
attr_reader :browser</code></p>
<p><code>def setup<br />
  @browser = Selenium::Client::Driver.new "localhost", 4444, "*firefox", "http://www.google.com/", 10000<br />
  browser.start_new_browser_session<br />
end</p>
<p>def teardown<br />
  browser.close_current_browser_session<br />
end</p>
<p> </p>
<p>The base address that you use to launch Selenium (google in this example) doesn't matter as long as your code isn't doing cross-domain requests.</p>
<p>Then, in your test:<br />
<code><br />
def test_js<br />
  str = "Ah, Satan sees Natasha".to_json<br />
  js = %Q[<br />
    function reverseString(str) {<br />
      var rstr = '';<br />
      for (var i=str.length-1; i&gt;=0; i--)<br />
        rstr += str.charAt(i);<br />
      return rstr;<br />
    } <br />
    reverseString(#{str});<br />
  ]<br />
  result = browser.js_eval(js)<br />
  assert_equal 'ahsataN sees nataS ,hA', result<br />
end<br />
</code></p>
<p>A few comments:</p>
<ol>
<li>The conversion to json is not necessary in this example but if you are sending an array of data or strings with characters which should be escaped, use json.</li>
<li>js_eval() function returns the result of the last line in the script.</li>
<li>If you need to return anything more complex than a string or a number, consider converting your data to json before returning and then parsing it in ruby (that's what I'm doing in my tests but I omitted it here for clarity)</li>
</ol>
<p>The problem with this code is that is damn slow because a new instance of Firefox is started for this test and it's not fast. However, it's better than no tests at all and if you don't need to start a new instance of firefox for every test, it's actually tolerable.<br />
<code>Loaded suite /Users/evgeny/invisiblehand/test/selenium/js_test<br />
Started<br />
.<br />
Finished in 7.403807 seconds.</code></p>
<p><code> </code></p>
<p><code>1 tests, 1 assertions, 0 failures, 0 errors<br />
</code></p>
<p>Good luck!</p>
<p></code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=19&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2009/06/03/javascript-testing-in-ruby-with-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
		<item>
		<title>libxml Extra content at the end of the document</title>
		<link>http://keep12on.com/2009/05/13/libxml-extra-content-at-the-end-of-the-document/</link>
		<comments>http://keep12on.com/2009/05/13/libxml-extra-content-at-the-end-of-the-document/#comments</comments>
		<pubDate>Wed, 13 May 2009 08:07:13 +0000</pubDate>
		<dc:creator>kappaprime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keep12on.com/?p=15</guid>
		<description><![CDATA[Ruby libxml parser that I use to process large xml files in SAX mode refused to process a file that looked perfectly valid, throwing &#8216;Extra content at the end of the document&#8217; error somewhere in the middle of the file. It turned out that it disliked control character \x0B (vertical tab), which is not allowed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=15&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ruby libxml parser that I use to process large xml files in SAX mode refused to process a file that looked perfectly valid, throwing &#8216;Extra content at the end of the document&#8217; error somewhere in the middle of the file. It turned out that it disliked control character \x0B (vertical tab), which is not allowed in XML according to the spec.</p>
<p>To simply remove the vertical tabs from the file (or, rather, replace them with spaces), I tried using sed like this</p>
<p><code>sed s/\x0B/\ /g file.xml</code></p>
<p>but I found out that \xXX syntax is not supported by OSX sed version, which is a shame, so I used a ruby script, which, to my surprise, was quick enough to process a 800 MB file.</p>
<p><code>output = File.open("out.xml", 'w+')<br />
File.open('file.xml').each{|p| output.puts p.gsub(/\x0B/, ' ')}<br />
</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/keep12on.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/keep12on.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/keep12on.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=keep12on.com&amp;blog=6666530&amp;post=15&amp;subd=keep12on&amp;ref=&amp;feed=1" width="1" height="1" /><div class="sharedaddy sharedaddy-dark"></div>]]></content:encoded>
			<wfw:commentRss>http://keep12on.com/2009/05/13/libxml-extra-content-at-the-end-of-the-document/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/32863b249d1e5627b4574f6a380cd2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">54bottles</media:title>
		</media:content>
	</item>
	</channel>
</rss>
