<?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 &#187; Uncategorized</title>
	<atom:link href="http://keep12on.com/category/uncategorized/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 &#187; Uncategorized</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" />]]></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>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" />]]></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" />]]></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" />]]></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" />]]></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" />]]></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>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" />]]></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>
