<?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>Inkzee</title>
	
	<link>http://blog.inkzee.com</link>
	<description>How to read more in less time</description>
	<lastBuildDate>Wed, 12 May 2010 13:23:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Inkzee" /><feedburner:info uri="inkzee" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><item>
		<title>Cherokee Web Server… when lighter and faster is a must</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/uPmKRuqDsxk/</link>
		<comments>http://blog.inkzee.com/index.php/2010/05/12/cherokee-web-server-when-lighter-and-faster-is-a-must/#comments</comments>
		<pubDate>Wed, 12 May 2010 13:23:28 +0000</pubDate>
		<dc:creator>luis</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cherokee]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[lighthttpd]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=100</guid>
		<description><![CDATA[Sometimes when it comes to choosing a web server we always end up in the same decision: Apache&#8230; it&#8217;s alright, it&#8217;s the most widely used web server but that doesn&#8217;t mean it&#8217;s the best one. When we started with Inkzee we didn&#8217;t think too much about other alternatives&#8230; we started with Apache and it&#8217;s not [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes when it comes to <strong>choosing a web server</strong> we always end up in the same decision: <strong>Apache</strong>&#8230; it&#8217;s alright, it&#8217;s the most widely used web server but that <strong>doesn&#8217;t mean it&#8217;s the best one</strong>.</p>
<p><img class="alignright size-medium wp-image-103" style="margin: 5px;" title="cherokee2-mini" src="http://blog.inkzee.com/wp-content/uploads/cherokee2-mini-300x116.png" alt="" width="300" height="116" /></p>
<p>When we started with Inkzee we didn&#8217;t think too much about <strong>other alternatives</strong>&#8230; we started with Apache and it&#8217;s not that we had big complaints about it, but having all the backend in one machine made us have<strong> performance/low resource consumption requirements</strong> and after a few months of our service running the all the different backend subsystems were almost killing the server and we started to research alternatives.</p>
<p>We were going to change Apache for Lighttpd but then we stepped into<strong> </strong><a href="http://www.cherokee-project.com/"><strong>Cherokee</strong></a> <a href="http://www.cherokee-project.com/benchmarks.html">statistics</a> and after reading some reviews we decided to give it a try, the numbers spoke for themselves. We had been checking on Che</p>
<p>rokee for some years now, the project was mature enough for our needs so we went for it.</p>
<p>After a year and a half we can write our own<strong> lessons-learned</strong> from our experience:</p>
<ul>
<li>The <strong><a href="http://www.cherokee-project.com/cgi-bin/mailman/listinfo/cherokee">Cherokee team</a></strong> have been so <strong>responsive</strong> to every problem or tweak we wanted to do with our server.</li>
<li>The <a href="http://www.cherokee-project.com/doc/bundle_cherokee-admin.html">admin interface </a>is pretty rad, if you are not used to messing with config files you&#8217;ll find no challenge.</li>
<li>We didn&#8217;t miss anything: <strong>FastCGI</strong>, <strong>PHP</strong>, TLS and SSL, Load Balancer, Reverse Proxy, statics cache, &#8230;</li>
<li>And the most important for us: our servers stand the load so much better now&#8230; indeed now we are still able to have our service in <strong>just one server</strong> <img src='http://blog.inkzee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>So, dare to try it now that Cherokee is celebrating their <strong><a href="http://summit.cherokee-project.com/">version 1.0 release</a></strong>, it&#8217;s a really nice product worth trying.</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/uPmKRuqDsxk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2010/05/12/cherokee-web-server-when-lighter-and-faster-is-a-must/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2010/05/12/cherokee-web-server-when-lighter-and-faster-is-a-must/</feedburner:origLink></item>
		<item>
		<title>Using Zend Framework</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/U5uCIKSIyvg/</link>
		<comments>http://blog.inkzee.com/index.php/2010/05/03/using-zend-framework/#comments</comments>
		<pubDate>Mon, 03 May 2010 13:00:13 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=94</guid>
		<description><![CDATA[One of our team members is a testing ninja and we bring him on board exactly because of that. We wanted to make our testing framework more robust so we asked for his wise expertise. One of the things he proposed was the use of Zend Framework. I&#8217;m not very keen of frameworks but it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>One of our team members is a <strong>testing ninja </strong>and we bring him on board exactly because of that. We wanted to make our<strong> testing framework more robust</strong> so we asked for his wise expertise. One of the things he proposed was the use of <strong><a href="http://framework.zend.com">Zend Framework</a></strong>. I&#8217;m not very keen of frameworks but it&#8217;s true that from a code point of view, we do need to get a <strong>better MVC architecture</strong> than the one we have now.</p>
<p>This is specially true now that it&#8217;s not just me coding, but a couple more people, so we are <strong>migrating part of the code to the Zend Framework</strong> or more precisely, to a tuned version of it we want to build. The idea is to only use what&#8217;s necessary to be able to <strong>create interface tests in a very reliable way</strong>. Right now this is not entirely possible without <a href="http://www.seleniumhq.org">Selenium</a> (our testing UI server), and what we want is to don&#8217;t need a webserver to run the tests.</p>
<p>We&#8217;ll be migrating parts of the UI and will be living with both environments until we&#8217;ve migrated all the code.</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/U5uCIKSIyvg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2010/05/03/using-zend-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2010/05/03/using-zend-framework/</feedburner:origLink></item>
		<item>
		<title>The corporate road</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/cs-D9l0E_eM/</link>
		<comments>http://blog.inkzee.com/index.php/2010/04/27/the-corporate-road/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:30:47 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[corporate]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[product]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=89</guid>
		<description><![CDATA[Since the beginning of this year, we are starting to focus heavily on the corporate side of our business. The reason? Money, of course. Although the reader is very useful, we feel it has an even greater potential if we tune it for the corporate world. That&#8217;s the reason why since the beginning of the year we&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Since the beginning of this year, we are starting to focus heavily on the<strong> corporate side of our business</strong>. The reason? Money, of course. Although the reader is very useful, we feel it has an even <strong>greater potential </strong>if we tune it for the corporate world.</p>
<p>That&#8217;s the reason why since the beginning of the year we&#8217;ve been working on an enterprise product. It&#8217;s a<strong> simplified version of the reader</strong>, with new features, but very oriented to smart and seamless integration within a corporate web.</p>
<p>Check out this <strong>simple demo </strong>we recorded some time ago:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/HsMihB9QC_0&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/HsMihB9QC_0&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>So basically it&#8217;s a way to create groups of feeds that <strong>generate a single url</strong> that can be used to<strong> subscribe to from a web widget</strong> or similar. Right now we are working on adding new features to this very simple version. We are also working with our first corporate customers to roll out the<strong> first pilots inside companies</strong>.</p>
<p>If you <strong>might be interested in testing it</strong>, let us know and we&#8217;ll get in contact with you!</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/cs-D9l0E_eM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2010/04/27/the-corporate-road/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2010/04/27/the-corporate-road/</feedburner:origLink></item>
		<item>
		<title>The team grows</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/qTPusjji1Oc/</link>
		<comments>http://blog.inkzee.com/index.php/2010/04/26/the-team-grows/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 07:59:28 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[growth]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=86</guid>
		<description><![CDATA[Hi everyone! Sorry for the lack of communication this past months. I&#8217;ll try to write about everything that&#8217;s been going on recently with Inkzee. One of the most important news is that the team is growing. We&#8217;ve incorporated new members to the Inkzee family. We are very happy because we have so many things to [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone!</p>
<p>Sorry for the lack of communication this past months. I&#8217;ll try to write about everything that&#8217;s been going on recently with Inkzee.</p>
<p>One of the most important news is that the <strong>team is growing</strong>. We&#8217;ve incorporated new members to the Inkzee family. We are very happy because we have so many things to do at once that we definitely <strong>need more hands </strong>to help. It&#8217;s very hard to keep pushing on your own so I&#8217;m grateful of having people helping Inkzee apart from myself.</p>
<p>The interesting part is that things have change considerably. When on your own, you don&#8217;t need to explain processes, code or features. Now we need to <strong>document everything</strong>, from code structure to deploying methods and that takes time. We setup an <strong>internal wiki</strong>, moved the local trac to a server accessible to the other members and did a couple of training sessions with the new members to get them up to speed.</p>
<p>But we are finally there and starting to work as a team!!</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/qTPusjji1Oc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2010/04/26/the-team-grows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2010/04/26/the-team-grows/</feedburner:origLink></item>
		<item>
		<title>The importance of resting</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/O6pyVuvpQoE/</link>
		<comments>http://blog.inkzee.com/index.php/2010/01/13/the-importance-of-resting/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 23:28:25 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[break]]></category>
		<category><![CDATA[christmas]]></category>
		<category><![CDATA[rest]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=83</guid>
		<description><![CDATA[Happy New Year all! During this Christmas, we gave ourselves a little break and I have to say, it felt really good! We entrepreneurs love to do things, we are generally over excited by everything and it&#8217;s rare if we aren&#8217;t handling several projects at the same time. The problem is that we don&#8217;t know [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Happy New Year</strong> all!</p>
<p>During this Christmas, we gave ourselves a little break and I have to say, it felt really good! We <strong>entrepreneurs</strong> love to do things, we are generally <strong>over excited by everything</strong> and it&#8217;s rare if we aren&#8217;t handling several projects at the same time. The problem is that <strong>we don&#8217;t know when to take a break</strong>. Not resting, not knowing when to stop and watch movies with popcorn affects the performance of whatever we do.</p>
<p>Exactly that was what was happening me. My performance in the last weeks of December was terrible and I couldn&#8217;t concentrate in my coding. So, having been here before I immediately recognized it as what it was, lack of resting. So, <strong>I took 10 days of Christmas</strong> holidays.</p>
<p>Now<strong> I&#8217;m back</strong>, with a<strong> lot of energy</strong> for the new year a <strong>full of surprises for the next months</strong>! So, stay tuned for some news and remember, take a break from time to time, it&#8217;s good for your health <img src='http://blog.inkzee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/O6pyVuvpQoE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2010/01/13/the-importance-of-resting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2010/01/13/the-importance-of-resting/</feedburner:origLink></item>
		<item>
		<title>Efficent comunication protocols are critical</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/flBQbP0U3cU/</link>
		<comments>http://blog.inkzee.com/index.php/2009/12/26/efficent-comunication-protocols-are-critical/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 14:30:55 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[communication protocol]]></category>
		<category><![CDATA[cpickle]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=78</guid>
		<description><![CDATA[As we said before, one on the problems we had when migrating to AWS was that the backend system was putting a lot of stress on the server. After a week of benchmarking we realized that the protocol we where using to communicate between the different subsystems we have was the main responsible for the [...]]]></description>
			<content:encoded><![CDATA[<p>As we <a href="http://blog.inkzee.com/index.php/2009/12/24/christmas-updates/">said before</a>, one on the problems we had when migrating to AWS was that the backend system was putting a lot of stress on the server. After a week of benchmarking we realized that the <strong>protocol</strong> we where using to <strong>communicate</strong> between the different subsystems we have was the <strong>main responsible for the load increment</strong>.</p>
<p>From day one we didn&#8217;t want to use complex and cryptic protocols so we chose <strong>xmlrpc</strong> for our communication channel. It was easy to implement, had wide support in php and python and was very easy to debug. We knew that at some point <strong>we would need to switch</strong> to a more efficient protocol, but we didn&#8217;t know it was going to be so soon.</p>
<p>After doing some <strong>extensive benchmarking</strong> we realize that the <strong>through output of the protocol was very low</strong>, not only that, if too many xmlrpc connections were spawned it would eventually consume all resources of the process (file descriptors, sockets and memory). This was a painful lesson to learn, but we did. So we <strong>switched</strong> to the most efficient protocol we could found, that is <strong>binary</strong>. To be more precise we employ <strong>python&#8217;s cPickle binary protocol</strong>. Saying that the use of this is orders of magnitude more efficient is not even close <img src='http://blog.inkzee.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>So after switching each subsystem to the new protocol we saw the load of the machines going down. As with all big changes in the backend of any system, it took a while to stabilize it. To avoid any havoc we actually put it into production subsystem by subsystem so <strong>during some time we had both protocols running at the same time</strong>.</p>
<p>And so, always remember that the choices you make will come to hunt you if not done correctly <img src='http://blog.inkzee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/flBQbP0U3cU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/12/26/efficent-comunication-protocols-are-critical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/12/26/efficent-comunication-protocols-are-critical/</feedburner:origLink></item>
		<item>
		<title>Merry Christmas 2009!</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/zdndUEDvteM/</link>
		<comments>http://blog.inkzee.com/index.php/2009/12/24/merry-christmas-2009/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 20:02:04 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[christmas]]></category>
		<category><![CDATA[new year]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=80</guid>
		<description><![CDATA[Hi all, We just wanted to wish you all a Merry Christmas and a happy New Year!! We hope that this incoming new year is even better than the past one and we wish you all the best of lucks! Turkey cheers from the Inkzee Team]]></description>
			<content:encoded><![CDATA[<p>Hi all,</p>
<p>We just wanted to wish you all a <strong>Merry Christmas</strong> and a<strong> happy New Year</strong>!! We hope that this incoming new year is even better than the past one and we wish you all the best of lucks!</p>
<p>Turkey cheers from the <strong>Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/zdndUEDvteM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/12/24/merry-christmas-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/12/24/merry-christmas-2009/</feedburner:origLink></item>
		<item>
		<title>Being a lean startup</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/ccr_we0wsGQ/</link>
		<comments>http://blog.inkzee.com/index.php/2009/12/24/being-a-lean-startup/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 19:25:12 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Continuous deployment]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Eric Ries]]></category>
		<category><![CDATA[inkzee]]></category>
		<category><![CDATA[Lean Startup]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=75</guid>
		<description><![CDATA[After working as a freelancer on the biggest social network in Spain, I&#8217;ve come to value the principles of what Eric Ries calls, the Lean Startup. Among all the things he talks about, one of them stroke really powerful with us, and that is, the notion on Continuous Development. Having experienced the slowness of development [...]]]></description>
			<content:encoded><![CDATA[<p>After working as a freelancer on the biggest social network in Spain, I&#8217;ve come to <strong>value the principles</strong> of what <a href="http://www.startuplessonslearned.com">Eric Ries</a> calls, the<a href="http://www.startuplessonslearned.com/2008/09/lean-startup.html"> <strong>Lean Startup</strong></a>. Among all the things he talks about, one of them stroke really powerful with us, and that is, the notion on <a href="http://www.startuplessonslearned.com/search/label/continuous%20deployment"><strong>Continuous Development</strong></a>. Having experienced the slowness of development in my previous company, I realized that what Eric proposes was<strong> key to the success of Inkzee</strong>.</p>
<p>We meditated the decision, and we got to the conclusion it was worth the effort and that we would, not only learn a lot during the process, but that we would get<strong> greater productivity on the long run</strong>. So off we went to implement the <a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html"><strong>5 steps</strong></a> Eric proposes:</p>
<ol>
<li><strong>Continuous integration server</strong>: We created our own home brewed mini system that allows us to add new tests that get started every time we need them. For now it&#8217;s a rather rudimentary system but does the job handsomely.</li>
<li><strong>Source control commit check</strong>: We already had a source control system, so we just added all the commit checks. At first we thought this was a waste of time, but with some time we realized how many bugs we had/introduced without this. We added 3 very basic checks, a python syntax check (with pylint) , a very basic php syntax check and the automatic triggering of all the unit tests we have. These checks also enforced a common style rules for all the code under SVN, a somehow gruesome task at first (all the old code was triggering the syntax and style checks), but very rewarding in the end.</li>
<li><strong>Simple deployment script</strong>: We had a very small deployment script but we fine tuned it so that it work flawlessly with the new AWS infrastructure. As for now, we make all the deployments in the same fashion, something that reduces the number of flaws you can introduce in this step. The script also creates a backup copy of the previous running code, in case you need to revert to the old version because of some critical error. As to date we&#8217;ve never needed to revert anything <img src='http://blog.inkzee.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li><strong>Real-time alerting</strong>: We introduced a lot of Munin plugins to monitor all type of parameters on our servers. We even developed some very simple Munin plugins for Tokyo Cabinet. We are still missing some alerting here. We have all the graphs but we still need to setup some alerting framework to detect weird situations.</li>
<li><strong>Root cause analysis (<a href="http://www.startuplessonslearned.com/2008/11/five-whys.html">5 whys</a>):</strong> This is probably the most critical part of the process. We&#8217;ve realized that this 5th step is what makes all the previous ones work. This process is an iterative one, you start with a small thing but with time, it will grow into an amazing process that&#8217;s is able to detect the slightness problem way before it makes it to the live servers. We&#8217;ve become used to always ask the 5 whys and it&#8217;s helping in improving the quality of the software we code.</li>
</ol>
<p>So all in all, it&#8217;s an incredible experience we are still figuring out but that to date, has been impressive. We&#8217;ve managed to do 14 code uploads in a single day with no bugs whatsoever, plus stopped introducing small potentially critical bugs in the code base and all the way into production. If you want to give it a try, please do read the original posts by Eric Ries, you wont regret it.</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/ccr_we0wsGQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/12/24/being-a-lean-startup/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/12/24/being-a-lean-startup/</feedburner:origLink></item>
		<item>
		<title>Christmas updates</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/JST3j0cWxVs/</link>
		<comments>http://blog.inkzee.com/index.php/2009/12/24/christmas-updates/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 18:56:48 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=73</guid>
		<description><![CDATA[Hi all, Sorry we&#8217;ve been so silent lately. It&#8217;s been a mad fall. Last post we wrote about a migration to Amazon Web Services (AWS). To be fair, the migration was a little painful. We had to set new machines with new software versions that made the system a little shaky for a while. We [...]]]></description>
			<content:encoded><![CDATA[<p>Hi all,</p>
<p>Sorry we&#8217;ve been so <strong>silent</strong> lately. It&#8217;s been a mad fall. <a href="http://blog.inkzee.com/index.php/2009/08/20/step-3-aws-migration/">Last post</a> we wrote about a migration to Amazon Web Services (AWS). To be fair, the <strong>migration was a little painful</strong>. We had to set new machines with new software versions that made the system a little shaky for a while. We also run into some really nasty performance issues with the new AWS instances.</p>
<p>First of all, if you have a<strong> Debian image</strong> as we had, be sure to <strong>use the correct fine tuned C libraries for Xen Virtualization</strong> (that&#8217;s what AWS runs on). We started having a huge load on the machines and after investigating we discovered we were using the wrong C library and it was really killing the server.</p>
<p>So after changing the libraries and setting up images that would autoconfigure themselves with the latest config files and code from the latest release, we setup the monitoring software. That&#8217;s when we discovered the magic of the AWS instances. When you&#8217;re the only one running stuff in your datacenter, everything runs smoothly, but when the US East Coast woke up, the performance of the machine would just drop alarmingly. The reason is that, when <strong>no one else is using the resources</strong> of the machine your VM is running, <strong>you&#8217;ll get extra resources</strong>, but when all the resources are being used, <strong>you&#8217;ll get capped</strong> to what is configured for that AWS instance. In our case, that was killing us.</p>
<p>After figuring out this, we started benchmarking the backend and looking for ways to decrease the stress. When we finally did, everything went back to normal. We had to fine tune some parameters but the worse part was done. That was our great AWS adventure that didn&#8217;t end up there. In the next posts we&#8217;ll write a little bit about different issues we had and <a href="http://blog.inkzee.com/index.php/2009/12/24/being-a-lean-startup/">things we&#8217;ve been doing lately</a>.</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/JST3j0cWxVs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/12/24/christmas-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/12/24/christmas-updates/</feedburner:origLink></item>
		<item>
		<title>Step 3: AWS migration</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/-H4SelBiQS8/</link>
		<comments>http://blog.inkzee.com/index.php/2009/08/20/step-3-aws-migration/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 18:02:14 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[tokyo cabinet]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=70</guid>
		<description><![CDATA[Hello all! We are finally there! We&#8217;ve devoted this past month to migrate all of the Inkzee system to the new database we are deploying, Tokyo Cabinet. It&#8217;s taken us forever to finish this migration but it&#8217;s here to stay. We are still missing some key things, but the bulk of it is already there [...]]]></description>
			<content:encoded><![CDATA[<p>Hello all!</p>
<p>We are finally there! We&#8217;ve devoted this past month to <a href="http://blog.inkzee.com/index.php/2009/06/15/step-2-database-redesign/">migrate all of the Inkzee system</a> to the new database we are deploying, <a href="http://blog.inkzee.com/index.php/2009/06/25/first-stats-with-tokyo-cabinet/"><strong>Tokyo Cabinet</strong></a>. It&#8217;s taken us forever to finish this migration but it&#8217;s here to stay. We are still missing some key things, but the bulk of it is already there so we&#8217;re starting to<strong> begin the migration to <a href="http://aws.amazon.com/">Amazon Web Services</a></strong> (AWS).</p>
<p>Right now we&#8217;ve managed to <strong>build a custom image for our servers</strong> with all the tools we need to run the Inkzee backend. Tomorrow and next week we&#8217;ll<strong> start moving data from the old server to the one in Amazon</strong>. This wont be painless and we know it. The architecture is still not 100% stable so we expect some minor glitches but nothing too serious.</p>
<p>So, here we go for step 3!!</p>
<p>Happy summer to all!</p>
<p><strong>The Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/-H4SelBiQS8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/08/20/step-3-aws-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/08/20/step-3-aws-migration/</feedburner:origLink></item>
		<item>
		<title>Tokyo Tyrant and some numbers</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/aJw6kJN5pZU/</link>
		<comments>http://blog.inkzee.com/index.php/2009/06/28/tokyo-tyrant-and-some-numbers/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 17:13:26 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[schema-less]]></category>
		<category><![CDATA[schemaless]]></category>
		<category><![CDATA[tokyo cabinet]]></category>
		<category><![CDATA[tokyo tyrant]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=66</guid>
		<description><![CDATA[Tokyo Tyrant is the database server that uses Tokyo Cabinet as backend. It allows you to access the database remotely. It supports 3 protocols, binary, memcache and http. This is great if you have already existing infrastructure. We needed a php class that implemented the protocol so we took a look at two of them, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Tokyo Tyrant</strong> is the database server that uses Tokyo Cabinet as backend. It allows you to access the database remotely. It<strong> supports 3 protocols</strong>, binary, memcache and http. This is great if you have already existing infrastructure.</p>
<p>We needed a php class that implemented the protocol so we took a look at two of them,  <a href="http://openpear.org/repository/Net_TokyoTyrant/">Net_TokyoTyrant</a> with Pete Warden&#8217;s patch and Tyrant by <a class="username" href="http://mamasam.indefero.net/u/golgote/">Bertrand Mansion</a>. The first one supports http and binary protocols, while Tyrant only supports the raw binary protocol.</p>
<p>During the first tests, Net_TokyoTyrant went crazy when inserting over 28000 records over http, so I guess there&#8217;s something wrong with that. When we switched to the binary protocol it worked as expected.</p>
<p>Here are some quick numbers:</p>
<p><strong>Net_TokyoTyrant (100000 keys)</strong></p>
<p>Time inserted: 50.3662779331 secs<br />
Time retrieved: 57.7555668354 secs<br />
Time deleted: 34.1996 secs</p>
<p><strong>Tyrant (100000 keys)</strong></p>
<p>Time inserted: 39.330272913 secs<br />
Time retrieved: 44.3433589935 secs<br />
Time deleted: 26.9360201359 secs</p>
<p><strong>The former is slightly faster</strong> so I guess we&#8217;ll go for it. Specially important is that the <strong>author keeps it up to date</strong>, which is also a plus!</p>
<p><strong>The Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/aJw6kJN5pZU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/06/28/tokyo-tyrant-and-some-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/06/28/tokyo-tyrant-and-some-numbers/</feedburner:origLink></item>
		<item>
		<title>First stats with Tokyo Cabinet</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/6HmPWGZbNsc/</link>
		<comments>http://blog.inkzee.com/index.php/2009/06/25/first-stats-with-tokyo-cabinet/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 02:15:33 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[benchmarks]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pytc]]></category>
		<category><![CDATA[pyTyrant]]></category>
		<category><![CDATA[schemaless]]></category>
		<category><![CDATA[tokyo cabinet]]></category>
		<category><![CDATA[tokyo tyrant]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=62</guid>
		<description><![CDATA[Today we started testing Tokyo Cabinet as our DBM for the new design. We had some very good references about it, so we thought we should give it a try. After setting up Tokyo Cabinet, it&#8217;s python binding and Tokyo Tyrant (db server) with it&#8217;s python bindings too we did some fast tests. We drafted [...]]]></description>
			<content:encoded><![CDATA[<p>Today we<strong> started testing <a href="http://tokyocabinet.sourceforge.net/">Tokyo Cabinet</a></strong> as our DBM for the new design. We had some very good references about it, so we thought we should give it a try.</p>
<p>After setting up Tokyo Cabinet, it&#8217;s python binding and <strong><a href="http://tokyocabinet.sourceforge.net/tyrantdoc/">Tokyo Tyrant</a> (db server)</strong> with it&#8217;s python bindings too we did some fast tests. We drafted a new schema-less design for the new database and<strong> dumped part of some old data</strong> to Tokyo Cabinet.</p>
<p>For those not familiar with the term <strong>schema-less</strong>, it&#8217;s basically a database that has no table structure, that is, everything is stored as a tuple of (key, value). On one side, a key-value database is much faster to read/write but it&#8217;s much harder to maintain and keep in sync.</p>
<p>So, we did some queries (<strong>read only operations</strong>) in both databases an this is what we saw:</p>
<p><strong>Test 1:</strong></p>
<ul>
<li>All data from a feed (MySQL):  0.01699 s</li>
<li>Partial data from a feed (TC): 0.00174 s</li>
</ul>
<p>This first test wasn&#8217;t really fair, as MySQL had to retrieve all fields per record, while TC just had to access a bunch of buckets with fewer fields. We did this first test as it&#8217;s going to be the real scenario, currently we retrieve many more fields from a Feed than we should and so, the new query under TC is, not only faster because of the database, but because it&#8217;s much more lightweighted.</p>
<p>Anyway, we modified the test so that <strong>both queries retrieved both fields per row</strong>:</p>
<p><strong>Test 2:</strong></p>
<ul>
<li>Partial data from a feed (MySQL): 0.00346 s</li>
<li>Partial data from a feed (TC): 0.00151 s</li>
</ul>
<p>Here we can see that both are slightly similar. Again, this isn&#8217;t really fair, as MySQL is executing just one query against several that we do with TC. So, we changed the TC query into a <strong>multiget request</strong> (request several keys at the same time):</p>
<p><strong>Test 3:</strong></p>
<ul>
<li>Partial data from a feed (MySQL): 0.003533 s</li>
<li>Partial data from a feed (TC with Multiget): 0.000845 s</li>
</ul>
<p>Under exact circunstances it&#8217;s clear which one is faster. So, I think we&#8217;ll continue experimenting with Tokyo Cabinet and some more real data and see how it performs.</p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/6HmPWGZbNsc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/06/25/first-stats-with-tokyo-cabinet/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/06/25/first-stats-with-tokyo-cabinet/</feedburner:origLink></item>
		<item>
		<title>When partitioning isn’t enough</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/4IFl9Gfbj_Q/</link>
		<comments>http://blog.inkzee.com/index.php/2009/06/24/when-partitioning-isnt-enough/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 16:51:10 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[partition]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[schemaless]]></category>
		<category><![CDATA[sharding]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=59</guid>
		<description><![CDATA[These past weeks we&#8217;ve been partitioning our database design. The goal was to achieve better scalability. Because Inkzee grows with the number of feeds it holds, not the users, we needed to partitioned the data tables so that we could process feed posts faster. After altering a lot of our current code so that it [...]]]></description>
			<content:encoded><![CDATA[<p>These past weeks we&#8217;ve been partitioning our database design. The goal was to <strong>achieve better scalability</strong>. Because Inkzee grows with the number of feeds it holds, not the users, we needed to partitioned the data tables so that we could process feed posts faster.</p>
<p>After altering a lot of our current code so that it worked with the new database design we&#8217;ve been experiencing problems with MySQL. It seems that, even though the solution makes the overall system much faster (like 3 to 4 times faster), <strong>some operations don&#8217;t play too well</strong> with MySQL and add an unaccepted latency to the system.</p>
<p>We&#8217;ve been resisting the urge to<strong> migrate to a schema-less database</strong> but it seems we have no other option but to transition to it. So, even though we thought we could have the new design working by the end of the week, we are afraid we&#8217;ll have to <strong>postpone it until further notice</strong>. We&#8217;ll keep you guys updated though!</p>
<p><strong>The Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/4IFl9Gfbj_Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/06/24/when-partitioning-isnt-enough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/06/24/when-partitioning-isnt-enough/</feedburner:origLink></item>
		<item>
		<title>Step 2: Database redesign</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/jgHSJWtVg4I/</link>
		<comments>http://blog.inkzee.com/index.php/2009/06/15/step-2-database-redesign/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 16:17:19 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[milestone]]></category>
		<category><![CDATA[redesign]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=56</guid>
		<description><![CDATA[As part of our milestones towards opening up Inkzee we have the database redesign. We currently manage more than 2 millions posts and over 4000 blogs. And although it might not seem as a lot, our database is starting to complain. A lot of the queries we do against it are getting really sluggish. That [...]]]></description>
			<content:encoded><![CDATA[<p>As part of our milestones towards opening up Inkzee we have the<strong> database redesign</strong>. We currently manage more than <strong>2 millions posts and over 4000 blogs</strong>. And although it might not seem as a lot, our database is starting to complain. A lot of the queries we do against it are getting really sluggish.</p>
<p>That means that if we ought to open up Inkzee we need to <strong>redesign the database so it can sustain a higher load of blogs and posts</strong>. We are currently working on it and we&#8217;ve done great advances. We have a prototype working with the new design but there are still some bugs and problems to resolve.</p>
<p>We hope the new design is finished sometime during this week. We&#8217;ll then fire up our test cases and check nothing is broken and once we&#8217;re sure the new design is as flawless as we can get it, we&#8217;ll release it to you guys! Hopefully you&#8217;ll experience a much faster site, not only on a subscription by subscription basis but specially when you request all posts from all blogs.</p>
<p>We&#8217;ll keep you posted!</p>
<p><strong>The Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/jgHSJWtVg4I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/06/15/step-2-database-redesign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/06/15/step-2-database-redesign/</feedburner:origLink></item>
		<item>
		<title>New UI redesign</title>
		<link>http://feedproxy.google.com/~r/Inkzee/~3/R2tMmuw5e-o/</link>
		<comments>http://blog.inkzee.com/index.php/2009/06/15/new-ui-redesign/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 16:03:39 +0000</pubDate>
		<dc:creator>abarrera</dc:creator>
				<category><![CDATA[inkzee]]></category>
		<category><![CDATA[faq]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.inkzee.com/?p=48</guid>
		<description><![CDATA[As we said before, since we got back from the Bay Area we&#8217;ve been working on getting the site out of alpha status. Our goal is to open it up to everyone as soon as possible. This plan requires 3 steps: Redesign the UI and make it more user-friendly Redesign the database architecture and alleviate [...]]]></description>
			<content:encoded><![CDATA[<p>As we said before, since we got back from the Bay Area we&#8217;ve been working on <strong>getting the site out of alpha status</strong>. Our goal is to open it up to everyone as soon as possible. This plan requires <strong>3 steps</strong>:</p>
<ol>
<li><strong>Redesign the UI and make it more user-friendly</strong></li>
<li>Redesign the database architecture and alleviate the current scalability bottlenecks we are experiencing</li>
<li>Move all infrastructure to Amazon Web Services for easy horizontal scaling.</li>
</ol>
<p>To date we&#8217;ve accomplished the <strong>first milestone</strong>. We did a <strong>complete overhaul of the UI</strong> for Inkzee. It wasn&#8217;t just the design but we needed to add a lot of help features. One thing we&#8217;ve seen is that most users just use a small fraction of the features the site has (and there aren&#8217;t too many). Because the current version was on alpha status, there where no help pages whatsoever. That meant that only the most advanced users were able to navigate the site. Our goal is to make it plain simple for everyone and so we realized <strong>we needed a complete help system</strong>.</p>
<p>So, off we went and added a lot of help features into the site. For starters, <strong>we added a help page where you a a complete (or so we think) guide to Inkzee</strong>. In there you&#8217;ll, hopefully, find the answers to the most common questions you might have.</p>
<p>Secondly, we changed most of our cryptic icons and turned them into fully blown buttons with their textual meaning apart from the icon.</p>
<p><img class="aligncenter size-full wp-image-49" title="alerts" src="http://blog.inkzee.com/wp-content/uploads/alerts.png" alt="alerts" width="650" height="306" /></p>
<p>We also added a bunch of widgets to the main page so you now will have the<strong> latest news of this blog on the main page</strong>. We also added a much more interactive <strong>&#8220;get started&#8221; widget</strong> than the old plain text layer we had before.</p>
<p>And finally but not least, we added <strong>help bubbles</strong> all over the interface with tips about the feature at hand.</p>
<p>The<strong> first reviews from our alpha users has been very positive</strong> but we will love to <strong>get some feedback from everyone</strong>. Found a spelling mistake? Couldn&#8217;t find help about a specific topic? Do you still don&#8217;t undeerstand what that button or feature does?<strong> Feel free to <a href="http://www.inkzee.com/contact.html">contact us</a> with your suggestions and ideas!</strong></p>
<p><strong>The Inkzee Team</strong></p>
<img src="http://feeds.feedburner.com/~r/Inkzee/~4/R2tMmuw5e-o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.inkzee.com/index.php/2009/06/15/new-ui-redesign/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.inkzee.com/index.php/2009/06/15/new-ui-redesign/</feedburner:origLink></item>
	</channel>
</rss>
