<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Ben Noland's Blog</title>
	
	<link>http://bennoland.com</link>
	<description />
	<lastBuildDate>Fri, 29 Jul 2011 20:41:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/bennoland" /><feedburner:info uri="bennoland" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>When Adding Complexity – Just in Time Beats Just in Case</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/H-k3fRDS9vs/</link>
		<comments>http://bennoland.com/2011/07/when-adding-complexity-just-in-time-beats-just-in-case/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 13:27:02 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=251</guid>
		<description><![CDATA[It&#8217;s better to introduce complexity into your code &#8220;Just in Time&#8221; rather than &#8220;Just in Case&#8221;. Let&#8217;s make this ultra flexible, Just in Case someone wants to do x, y and z. Let&#8217;s split this into a new library, Just in Case we need it elsewhere. Let&#8217;s optimize this piece of code, Just in Case [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s better to introduce complexity into your code &#8220;Just in Time&#8221; rather than &#8220;Just in Case&#8221;.</p>
<p>Let&#8217;s make this ultra flexible, Just in Case someone wants to do x, y and z.<br />
Let&#8217;s split this into a new library, Just in Case we need it elsewhere.<br />
Let&#8217;s optimize this piece of code, Just in Case it&#8217;s too slow.</p>
<p>They&#8217;re really going to want a, b or c (not x, y and z).<br />
It&#8217;s easy to create that new library later, when you know you need it.<br />
A profiler will tell you what parts are slow.</p>
<p>If all the Just in Cases were saved until Just in Time&#8230; there would be time to refactor, there would be time to do more testing and the code would be more maintainable.</p>
<p>You should think about the Just in Cases, but don&#8217;t implement them yet&#8230; (unless it has to do with testing).</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2011/07/when-adding-complexity-just-in-time-beats-just-in-case/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bennoland.com/2011/07/when-adding-complexity-just-in-time-beats-just-in-case/</feedburner:origLink></item>
		<item>
		<title>EC2 Micro Instance Fail</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/k7th6flA814/</link>
		<comments>http://bennoland.com/2011/02/ec2-micro-instance-fail/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 17:26:15 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=233</guid>
		<description><![CDATA[A few weeks ago, I decided it was time to move collabedit off of shared hosting. Shared hosting is great for small stuff, my blog is still here, but it wasn&#8217;t working well for the frequency of database interaction that collabedit needs. Collabedit doesn&#8217;t need much processing power, but whenever my shared hosting neighbors decided [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I decided it was time to move <a title="collabedit - online text editor" href="http://collabedit.com">collabedit</a> off of shared hosting. Shared hosting is great for small stuff, my blog is still <a href="http://www.webfaction.com/?affiliate=bnoland">here</a>, but it wasn&#8217;t working well for the frequency of database interaction that collabedit needs. Collabedit doesn&#8217;t need much processing power, but whenever my shared hosting neighbors decided to exercise the cpu, things got very slow.</p>
<p>I looked at a few options, but ended up going for <a href="http://aws.amazon.com/ec2/">ec2</a>. It gave me more familiarity and flexibility than app engine, has better pricing than dedicated hosting, and has a good community knowledge base.</p>
<p>I needed to run MySQL [<a title="EC2 MySQL" href="http://aws.amazon.com/articles/1663?_encoding=UTF8&amp;jiveRedirect=1">1</a>,<a href="http://paikialog.wordpress.com/2010/12/24/best-practices-for-running-mysql-on-ec2-with-ebs/">2</a>], python2.6, tornado, nginx (as a <a href="http://www.tornadoweb.org/documentation#running-tornado-in-production">front end load balancer</a>) and some cron jobs. I don&#8217;t need much horsepower, so I decided to try the micro instance (~$14/month). I got everything setup and ran it in test for a couple weeks. Everything worked great. The average request was 3X faster than the shared hosting environment.</p>
<p>Everything looked awesome, so on <a href="http://collabedit.com/updates/Speed%20Upgrade">Feb 5</a> I moved it all over. The micro instance performed wonderfully&#8230; , for a few hours, then it didn&#8217;t. It was still working, everything was up, but it was very slow, and my cpu was at 99%. I spent hours looking at all my logs and tweaking indexes, but I couldn&#8217;t figure it out. It would run fast for awhile, and then it would slow wayyyy down. Requests were taking 60X longer than normal.</p>
<p>Then I re-read amazon&#8217;s description of the Micro Instance.</p>
<blockquote><p>Instances of this family provide a small amount of consistent CPU resources and allow you to burst CPU capacity when additional cycles are available. They are well suited for lower throughput applications and web sites that consume significant compute cycles periodically.</p></blockquote>
<p>I moved everything from the Micro Instance to a Small Instance. This fixed everything. Apparently I was experiencing the burst speed on the micro instance for the duration of my testing. It wasn&#8217;t until I put some real load on it that it switched out of turbo mode. Luckily the <a href="http://twitter.com/#!/collabedit/status/35189831147601920">upgrade</a> from Micro to Small only took about 10 minutes. Since MySQL is using the Elastic Block Storage, I just attached the EBS volume to the new instance all my data was there.</p>
<p>So, if you&#8217;re considering moving to a micro instance, makes sure to do some load testing before making the final decision. Ec2 is amazing, the transition has been very smooth other than that.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2011/02/ec2-micro-instance-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2011/02/ec2-micro-instance-fail/</feedburner:origLink></item>
		<item>
		<title>Collabedit news moved to collabedit.com</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/XyeXhx2ynyA/</link>
		<comments>http://bennoland.com/2011/01/collabedit-news-moved-to-collabedit-com/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 03:59:24 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=229</guid>
		<description><![CDATA[If you&#8217;re looking for updates on collabedit, I&#8217;ve moved all that to collabedit.com. It&#8217;s got an rss you can subscribe to.]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking for updates on collabedit, I&#8217;ve moved all that to collabedit.com. It&#8217;s got an rss you can subscribe to.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2011/01/collabedit-news-moved-to-collabedit-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bennoland.com/2011/01/collabedit-news-moved-to-collabedit-com/</feedburner:origLink></item>
		<item>
		<title>Accounts Added</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/sNslEMH91uc/</link>
		<comments>http://bennoland.com/2010/06/accounts-added/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 23:54:01 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=227</guid>
		<description><![CDATA[Introducing accounts! An account allows you to keep track of documents you&#8217;ve recently worked on. I&#8217;ll be adding more features in the near future which don&#8217;t work without an account. I&#8217;ve also made a few changes to the website&#8217;s style.]]></description>
			<content:encoded><![CDATA[<p>Introducing accounts! An account allows you to keep track of documents you&#8217;ve recently worked on. I&#8217;ll be adding more features in the near future which don&#8217;t work without an account.</p>
<p>I&#8217;ve also made a few changes to the website&#8217;s style.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2010/06/accounts-added/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2010/06/accounts-added/</feedburner:origLink></item>
		<item>
		<title>Other Recent Changes</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/5S9gOIgVhg4/</link>
		<comments>http://bennoland.com/2010/04/other-recent-changes/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 14:21:25 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=220</guid>
		<description><![CDATA[A few changes I&#8217;ve made over the last few weeks. I moved to the latest version of EditArea. Looks like it actually took a small regression in chrome, I&#8217;ll look into fixing that. Smaller urls, collabedit.com/display?id=123456 becomes collabedit.com/123456. The old urls will redirect to the new one. 4 spaces instead of tabs for indentation. Word [...]]]></description>
			<content:encoded><![CDATA[<p>A few changes I&#8217;ve made over the last few weeks.</p>
<ol>
<li>I moved to the latest version of EditArea. Looks like it actually took a small regression in chrome, I&#8217;ll look into fixing that.</li>
<li>Smaller urls, collabedit.com/display?id=123456 becomes collabedit.com/123456. The old urls will redirect to the new one.</li>
<li> 4 spaces instead of tabs for indentation.</li>
<li>Word wrap.</li>
<li>Fixed 5 minute timeout issue.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2010/04/other-recent-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2010/04/other-recent-changes/</feedburner:origLink></item>
		<item>
		<title>Document History Launched</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/jt5TUYBn5Vs/</link>
		<comments>http://bennoland.com/2010/04/document-history-launched/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 14:14:28 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=218</guid>
		<description><![CDATA[You&#8217;ll notice a new &#8220;History&#8221; button on the top menu bar.  This will allow you to see all previous versions of your documents, and restore an older version if you want. Prior to this feature, if you accidentally wiped out your document text it was gone for good. This is no longer a problem. Older [...]]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ll notice a new &#8220;History&#8221; button on the top menu bar.  This will allow you to see all previous versions of your documents, and restore an older version if you want.</p>
<p>Prior to this feature, if you accidentally wiped out your document text it was gone for good. This is no longer a problem.</p>
<p>Older documents won&#8217;t have any history yet, because it hasn&#8217;t been tracked until now.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2010/04/document-history-launched/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2010/04/document-history-launched/</feedburner:origLink></item>
		<item>
		<title>Latest Changes to Collabedit</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/O5kbhKnH-5I/</link>
		<comments>http://bennoland.com/2010/02/latest-changes-to-collabedit/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 00:53:00 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=213</guid>
		<description><![CDATA[I just released a couple changes to collabedit. 1. User List &#8211; See a list of everyone who is currently viewing the document 2. Improved latency &#8211; The code no longer polls every 2 seconds to check for document changes. Instead it uses comet so it&#8217;s updated instantly. I also fixed an issue with opera, [...]]]></description>
			<content:encoded><![CDATA[<p>I just released a couple changes to <a href="http://collabedit.com">collabedit</a>.</p>
<p>1. User List &#8211; See a list of everyone who is currently viewing the document</p>
<p>2. Improved latency &#8211; The code no longer polls every 2 seconds to check for document changes. Instead it uses comet so it&#8217;s updated instantly.</p>
<p>I also fixed an issue with opera, improved the error dialog and made some changes to the underlying code.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2010/02/latest-changes-to-collabedit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2010/02/latest-changes-to-collabedit/</feedburner:origLink></item>
		<item>
		<title>Chat in Collabedit is Live</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/pazEIEXmN5s/</link>
		<comments>http://bennoland.com/2010/01/chat-in-collabedit-is-here/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 17:14:40 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=209</guid>
		<description><![CDATA[Collabedit now has sidebar chat! There are still has a few minor quirks with it. I ran into some trouble with EditArea (the javascript text editor I&#8217;m using) because it requires browser focus in order to update the text.  I&#8217;ve got my eye on Codemirror and some other alternatives though. I&#8217;ve switched to using Tornado [...]]]></description>
			<content:encoded><![CDATA[<p>Collabedit now has sidebar chat! There are still has a few minor quirks with it. I ran into some trouble with EditArea (the javascript text editor I&#8217;m using) because it requires browser focus in order to update the text.  I&#8217;ve got my eye on <a href="http://marijn.haverbeke.nl/codemirror/">Codemirror</a> and some other alternatives though.</p>
<p>I&#8217;ve switched to using <a href="http://www.tornadoweb.org/">Tornado</a> as the underlying web server. Tornado will enable me to use comet (aka &#8220;long polling&#8221;, &#8220;server-push&#8221;, &#8220;http-streaming&#8221;, &#8220;bosh&#8221;) technology.  I haven&#8217;t taken full advantage of that yet, but I will. Tornado also has a built in templating system, authentication, database helpers and a few other nice features.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2010/01/chat-in-collabedit-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2010/01/chat-in-collabedit-is-here/</feedburner:origLink></item>
		<item>
		<title>eclocking is on hold</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/EAxi2CH9v2o/</link>
		<comments>http://bennoland.com/2009/12/eclocking-is-on-hold/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 16:25:11 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[eclocking]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=191</guid>
		<description><![CDATA[Eclocking has not gotten the reception I had hoped from the world wide web. It doesn&#8217;t solve a problem that most people care about. With this in mind I have decided to spend my time on something else for now. I will leave eclocking up, and I will continue to use it myself.]]></description>
			<content:encoded><![CDATA[<p><a href="http://eclocking.com">Eclocking</a> has not gotten the reception I had hoped from the world wide web. It doesn&#8217;t solve a problem that most people care about.</p>
<p>With this in mind I have decided to spend my time on something else for now. I will leave eclocking up, and I will continue to use it myself.</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2009/12/eclocking-is-on-hold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bennoland.com/2009/12/eclocking-is-on-hold/</feedburner:origLink></item>
		<item>
		<title>I intend to replace Etherpad</title>
		<link>http://feedproxy.google.com/~r/bennoland/~3/KTEHtHUXXi8/</link>
		<comments>http://bennoland.com/2009/12/i-intend-to-replace-etherpad/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 16:21:12 +0000</pubDate>
		<dc:creator>ben</dc:creator>
				<category><![CDATA[collabedit]]></category>

		<guid isPermaLink="false">http://bennoland.com/?p=184</guid>
		<description><![CDATA[When etherpad launched in November 2008, I took notice. It was very similar to collabedit, a website that I had launched in March 2008. I quickly became a fan of etherpad and have used it for awhile now, preferring it over collabedit for most tasks. I stopped working on collabedit and moved on to other [...]]]></description>
			<content:encoded><![CDATA[<p>When <a href="http://etherpad.com">etherpad </a>launched in November 2008, I took notice. It was very similar to <a href="http://collabedit.com">collabedit</a>, a website that I had launched in March 2008. I quickly became a fan of etherpad and have used it for awhile now, preferring it over collabedit for most tasks. I stopped working on collabedit and moved on to <a href="http://eclocking.com">other things</a>.</p>
<p>When I learned that <a href="http://etherpad.com/ep/blog/posts/google-acquires-appjet">google had acquired etherpad</a> earlier this week I had mixed feelings. I&#8217;m going to miss the service it provided, but I see an opportunity for <a href="http://collabedit.com">collabedit </a>to fill the void left by etherpad. I have been looking for another side project, but hadn&#8217;t considered revisiting collabedit until now.</p>
<p>I recognize that collabedit lacks many of the features that make a collaborative editor like this useful. I intend to spend time over the next several months adding these features. I would appreciate any feedback from etherpad users about what features would be the most useful. For this purpose I have created a new feedback forum at <a href="http://collabedit.uservoice.com">http://collabedit.uservoice.com</a>.</p>
<p>Congratulations to the <a href="http://etherpad.com/ep/about/company">etherpad team</a>, you deserve all the success you&#8217;ve seen. Best of luck with <a href="http://wave.google.com">Google Wave</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://bennoland.com/2009/12/i-intend-to-replace-etherpad/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://bennoland.com/2009/12/i-intend-to-replace-etherpad/</feedburner:origLink></item>
	</channel>
</rss>

