<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>blog.sidneidasilva.com</title>
	
	<link>http://blog.sidneidasilva.com</link>
	<description />
	<lastBuildDate>Thu, 06 Jun 2013 15:07:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="blog.sidneidasilva.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://1.gravatar.com/blavatar/9ed20a673cf8f74cf08f01d23fa6e0d5?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>blog.sidneidasilva.com</title>
		<link>http://blog.sidneidasilva.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.sidneidasilva.com/osd.xml" title="blog.sidneidasilva.com" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/sidnei/mwUx" /><feedburner:info uri="sidnei/mwux" /><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://blog.sidneidasilva.com/?pushpress=hub" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><item>
		<title>A tale of four proxies</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/rtAe6P8caWY/</link>
		<comments>http://blog.sidneidasilva.com/2013/06/06/a-tale-of-four-proxies/#comments</comments>
		<pubDate>Thu, 06 Jun 2013 15:07:58 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[canonical]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wsgi]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Twisted]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=451</guid>
		<description><![CDATA[As part of my job as Operations Engineer on the Ubuntu One team, I&#8217;m constantly looking for ways to improve the reliability and operational efficiency of the service as a whole. Very high on my list of things to fix I have an item to look into Vaurien, and make some tweaks to the service [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=451&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As part of my job as Operations Engineer on the Ubuntu One team, I&#8217;m constantly looking for ways to improve the reliability and operational efficiency of the service as a whole.</p>
<p>Very high on my list of things to fix I have an item to look into <a title="Vaurien" href="https://github.com/mozilla-services/vaurien">Vaurien</a>, and make some tweaks to the service to cope better with outages in other parts of the system.</p>
<p>As you probably realized by now if you&#8217;re somehow involved into the design and maintenance of any kind of distributed systems, <a title="network partitions are a big deal" href="http://aphyr.com/posts/288-the-network-is-reliable">network partitions are a big deal</a>, and we&#8217;ve had some of those affect our service in the past, some with very interesting effects.</p>
<p>Take our application servers for example. They&#8217;ve been through many generations of rewrites, and switches from one WSGI server to another in the past (not long before I joined the team), each of them with a particular issue. Either they didn&#8217;t scale, or crashed constantly, or had memory leaks. Or maybe none of those (it was before I joined the team, so I wouldn&#8217;t know for sure). By the time I joined, <a title="Paste" href="http://pythonpaste.org/">Paste</a>, of all the things, was one of the WSGI servers in use in part of the service, and <a title="Twisted WSGI" href="http://twistedmatrix.com/documents/12.3.0/web/howto/web-in-60/wsgi.html">Twisted WSGI</a> was used in another part.</p>
<p>(The actual setup of those services is very interesting on itself. It&#8217;s a mix of Twisted and Django (and <a title="many others" href="https://www.google.com/search?q=twisted+django">many others</a> have done this before, so it&#8217;s not very unique. But there are internal details which are quite interesting. More below.)</p>
<p>Having moved from another team that used Twisted heavily, I decided to call it out and settle on Twisted WSGI, which seemed just fine.</p>
<p>As for the stability and memory issues, we started ironing them out one by one. Turns out the majority of the problems had nothing to do with the WSGI server itself, but everything to do with not cleaning up resources correctly, be it temporary files, file descriptors, and cycles between <a title="producers and consumers" href="http://twistedmatrix.com/documents/12.3.0/core/howto/producers.html">producers and consumers</a>.</p>
<p>And everything was perfect.</p>
<p>But then we got a few networking issues and hardware issues. Some of the servers were eventually moved to a different datacenter and things got even more interesting. I&#8217;ll go into the details of the specific problems that I&#8217;m hoping to approach with Vaurien on a different post, but suffice to say that talking to many external services in a threaded server doesn&#8217;t get pretty when there&#8217;s a network blip.</p>
<p>So speaking of threaded and Twisted, and coming to the subject of this post.</p>
<p>In front of a subset of our services we currently have 4 HAProxy instances in different servers. They are all set up to use <em>httpchk</em> every 2 seconds, which by default sends an <em>OPTIONS</em> request to &#8216;/&#8217;. If you&#8217;re still following, we have a Django app running there, and depending on how you have your Django app configured, it might just take that <em>OPTIONS</em> request and treat it just like a <em>GET</em>, effectively (in our case) rendering a response just as if a normal browser had requested it. Turns out that page is not particularly lean in our case.</p>
<p>So you take 4 servers, effectively doing a <em>GET</em> request to your homepage every 2s each one, times many processes serving that page across a couple hosts, and you have a full plate for someone looking for things to optimize.</p>
<p>To make it more fun, early on I added monitoring of the thread pool used by Twisted WSGI, sending metrics to Graphite. Whenever we had a network blip we saw the queue growing and growing without bound. This was actually a combination of a couple things, which I&#8217;m still working on fixing:</p>
<ol>
<li>HAProxy will keep triggering the httpchk after the service is taken out of rotation.</li>
<li>Twisted WSGI will keep accepting requests and throwing them in the thread pool queue, even if the thread pool is busy and the queue is building up.</li>
<li>We do a terrible job at timing out connections to external services currently so a minor blip can easily cause the thread pool queue to build up.</li>
</ol>
<p>As a strategy to alleviate that problem I came up with the following solution:</p>
<ol>
<li>Implement a custom thread pool that triggers a callback when going from busy -&gt; free and from free -&gt; busy (where busy is defined as: there are more requests queued than idle threads).</li>
<li>Changed the response to the HAProxy <em>httpchk</em> to simply check that busy/free state.</li>
<li>Changed the handling of that HAProxy check to *not* go through the thread pool.</li>
</ol>
<p>(There&#8217;s a few more details that I won&#8217;t get into in this post, but that&#8217;s the high-level summary.)</p>
<p>I have good confidence that this will fix (or at least alleviate) the main issue, which is the queue growing without bounds in the thread pool, and it will instead move the queueing to HAProxy. But after looking through the metrics today I saw an unintended consequence of the changes.</p>
<p><a href="http://omsg.files.wordpress.com/2013/06/busy-threads.png"><img class="aligncenter size-medium wp-image-452" alt="busy-threads" src="http://omsg.files.wordpress.com/2013/06/busy-threads.png?w=300&#038;h=135" width="300" height="135" /></a></p>
<p><a href="http://omsg.files.wordpress.com/2013/06/load-avg.png"><img class="aligncenter size-medium wp-image-453" alt="load-avg" src="http://omsg.files.wordpress.com/2013/06/load-avg.png?w=300&#038;h=135" width="300" height="135" /></a></p>
<p>In retrospect, it seems fairly obvious that this was to be one of the expected outcomes. I was simply surprised to see it since it was not the immediate goal of the proposed changes, but simply a side effect of them.</p>
<p>I hope you enjoyed this glimpse into what goes on at the heart of my job. I expect to write more about this soon, and maybe explore some of the details that I didn&#8217;t get into, since this post is already too long.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=451&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/rtAe6P8caWY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2013/06/06/a-tale-of-four-proxies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2013/06/busy-threads.png?w=300" medium="image">
			<media:title type="html">busy-threads</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2013/06/load-avg.png?w=300" medium="image">
			<media:title type="html">load-avg</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2013/06/06/a-tale-of-four-proxies/</feedburner:origLink></item>
		<item>
		<title>Coming back to (social) life</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/ATFMiPvI214/</link>
		<comments>http://blog.sidneidasilva.com/2013/05/15/coming-back-to-social-life/#comments</comments>
		<pubDate>Wed, 15 May 2013 16:51:39 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[canonical]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[nical]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=447</guid>
		<description><![CDATA[Due to some unplanned traveling I ended up near the Bay Area last week, more specifically Canonical was holding an internal Cloud Sprint in Oakland, CA, and Martin asked me to participate and push our agenda for the upcoming click packages upload and download services, which need to be live by October at least on [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=447&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Due to some unplanned traveling I ended up near the Bay Area last week, more specifically <a href="http://www.canonical.com/">Canonical</a> was holding an internal Cloud Sprint in Oakland, CA, and <a href="http://beuno.com.ar/">Martin</a> asked me to participate and push our agenda for the upcoming <a href="https://lists.ubuntu.com/archives/ubuntu-devel/2013-May/037074.html">click packages</a> upload and download services, which need to be live by October at least on its simplest form. But I&#8217;ll tell you more about that in a separate post.</p>
<p>What I want to share with you today is the joy of being able to connect with old friends and recollect memories, as I mentioned I was longing for in my <a href="http://blog.sidneidasilva.com/2013/03/01/extended-mourning/">last post</a>. In those few days I was in California I managed to catch up with <a href="http://limi.net/">Limi</a> and <a href="https://www.facebook.com/philikon">Philipp</a>, said an en passant hi to <a href="https://www.facebook.com/nonsequitarian">Rob Miller</a> at the Mozilla SF office, had dinner with <a href="http://blog.labix.org/">Gustavo</a>, walked around the city with <a href="http://www.flickr.com/photos/tealeg/8739695178/in/photostream">Fernando, Alberto, and Geoff</a>, ending up at an <a href="http://www.yelp.com/biz/great-eastern-restaurant-san-francisco">amazing Chinese restaurant</a> pretty much by accident, paid a visit to <a href="https://www.facebook.com/mfdutra">Marlon</a>, who took me on a guided tour of the Facebook HQ followed by lunch at <a href="http://locations.thecheesecakefactory.com/ca/san-mateo-156.html">The Cheesecake Factory</a> which I couldn&#8217;t refuse. It was exausting, but really great catching up with everyone!</p>
<p>A recurring topic between all of us was the general issues that all of our companies (Mozilla, Canonical, Facebook) have with general public perception. Most interestingly perhaps is the similarity between Canonical and Facebook when it comes down to privacy matters, how there seems to be a disconnect between the internal and external messaging on those matters, and how much the public perception is biased by the media and the very loud minority of privacy tinfoil hat zealots. I wish I could do more to help with solving that. Perhaps pushing for more transparency, better communication at least from the technical side of things could be a way to improve that.</p>
<p>Tech talks aside, I was simply overwhelmed by how much my kids&#8217; pictures and videos are popular amongst friends. Every single person that I talked to was quick to mention that as the very first thing. Oddly, that generally does not reflect in likes and comments on those Facebook posts, which is an interesting observation. Are people generally afraid of clicking that <strong>Like</strong> link or is it too much effort for them? I&#8217;m sure it would do for a great usability study.</p>
<p>I hope to explore a bit more on the outcome of the sprint on a later post. Suffice to say that I was really glad to be present and contribute some feedback to all the planning that&#8217;s going into the next cycle, and the opportunity to meet some old friends while at it was invaluable. Looking forward to be doing more of that in the coming months, at <a href="http://softwarelivre.org/fisl14">FISL</a> and <a href="http://2013.pythonbrasil.org.br/">PythonBrasil</a>. </p>
<p>As an article I&#8217;ve read yesterday mentioned, we tech heads seem to live on a bubble that mostly bounces between social networks and having post work hours drinks with colleagues, usually from the same company. I wish we could all be more social in the physical world, and talk more about things that are not so tech-related. About life, and family, and non-work things, and enjoy ourselves more.</p>
<p><a href="http://en.wikipedia.org/wiki/Coming_Back_to_Life">And headed straight into the shining sun.</a></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=447&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/ATFMiPvI214" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2013/05/15/coming-back-to-social-life/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2013/05/15/coming-back-to-social-life/</feedburner:origLink></item>
		<item>
		<title>Extended Mourning</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/lcQ5p73VdYU/</link>
		<comments>http://blog.sidneidasilva.com/2013/03/01/extended-mourning/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 03:35:39 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dorneles]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=400</guid>
		<description><![CDATA[It&#8217;s been more than two years now since I&#8217;ve written anything on this blog. The last thing I wrote was my attempt at summing up all that Dorneles meant to me as a friend and co-worker. It still hurts. Every. Day. I&#8217;ve been carrying on with life. Heads down into work. Enjoying my kids, which [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=400&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s been more than two years now since I&#8217;ve written anything on this blog. The last thing I wrote was my attempt at summing up all that Dorneles meant to me as a friend and co-worker. It still hurts. Every. Day.</p>
<p>I&#8217;ve been carrying on with life. Heads down into work. Enjoying my kids, which just started at daycare (or is afternooncare a word, even?) this week. But it&#8217;s going to hurt for quite some time. I can tell.</p>
<p>I feel like I should be writing more. I feel the need to hang out with old friends again. I might end up going to this year&#8217;s <a href="http://2013.pythonbrasil.org.br/">PythonBrasil</a>/<a href="http://2013.ploneconf.org/">PloneConf</a> one-two combo just for that. Hopefully some of the old-timers like Alan and Limi will be there. It would sure be great to see Paul again, which is apparently confirmed for one of the keynotes.</p>
<p>I actually started this post feeling very nostalgic, and the paragraph above shows. This was after stumbling on Gustavo&#8217;s <a href="http://blog.labix.org/2013/03/01/12-years-ago">12 years ago</a> post. Then I looked at the archive of this blog and found that my oldest post here is from <a href="http://blog.sidneidasilva.com/2003/07/20/cmfweblog-movabletype-and-metaweblog-apis-implemented/">July 20th 2003</a>. Reading forward from there I&#8217;ve revived some really happy memories, and tons of now-broken links. One of the broken links was to one of the oldest traces of me out there, asking for help with <a href="https://www.cslu.ogi.edu/forum/viewtopic.php?t=1154&amp;sid=9289ccd386632b3fbf1af36c97cf7720">Including TCL scripts in the CSLU Toolkit</a>, back in 1999. Here&#8217;s another, from 2005, where I mention <a href="http://blog.sidneidasilva.com/2005/05/05/in-other-news-a-gnome-vfs-for-plone-desktop/">meeting Gustavo in person</a> for the first time. And, the irony. I linked to his LiveJournal blog. :)</p>
<p>I feel much better now.</p>
<p>I should be writing more, and soon. I have lots of things to share, both personally and professionally. I really wish to become more like Dorneles. Not only <a href="http://www.nczonline.net/blog/2013/02/26/what-kind-of-a-software-engineer-do-you-want-to-be-known-as/">fun to work with</a>, but also fun to be around. I want to share more, not only about the things that I do, but also the things that I am. I hope to become a better person in the process, and I hope you can share and enjoy that journey with me.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=400&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/lcQ5p73VdYU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2013/03/01/extended-mourning/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2013/03/01/extended-mourning/</feedburner:origLink></item>
		<item>
		<title>Unfinished Life of a Sushi Lover</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/R2FOYHxqN5s/</link>
		<comments>http://blog.sidneidasilva.com/2011/02/14/unfinished-life-of-a-sushi-lover/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 03:33:48 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[enfold]]></category>
		<category><![CDATA[houston]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=391</guid>
		<description><![CDATA[In the last couple days since our beloved friend Dorneles died in a tragic car accident much has been said about him, both on and offline. Many people remember him from his technical prowess, though he never thought of himself as someone with exceptional programming skills. I know a lot of really brilliant people, both [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=391&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In the last couple days since our beloved friend Dorneles died in a tragic car accident much has been said about him, both on and offline. Many people remember him from his technical prowess, though he never thought of himself as someone with exceptional programming skills. I know a lot of really brilliant people, both in the Python and Plone communities and elsewhere, people that Dorneles himself considered actual heroes, but if there&#8217;s one thing that made him stand out from the rest was his willingness to share knowledge and collaboratively solve problems.</p>
<p>The realization of that had a profound impact in my life. As programmers, technically minded people that we are, we tend to focus on ourselves and rarely share our knowledge, except to show it off at conferences here and there. We do it mostly to please our ego. Dorneles was nothing like that. He didn&#8217;t present at many conferences, though he was always there as either a participant or an organizer. He didn&#8217;t write lengthy blog posts full of technical details. In fact, he didn&#8217;t blog at all since 2007. He didn&#8217;t create brilliant frameworks. Instead, his contributions were mostly invisible, through IRC, IM or Skype, directly between him and the person seeking his help. It was very common for him to carry about five parallel conversations over IM, helping people all over the world without breaking a sweat. He would happily pull out his laptop or phone at a table in a blink to teach someone a trick. The endless stream of messages on twitter following his death should serve as proof that his way was much more effective in causing an impact in the world than a horde of highly skilled programmers ever could.</p>
<p>As other people well put it, Dorneles could never lose that smile on his face. Nothing could make him curse or complain. He was a mixture of cheerfulness, innocence, tranquility and awkwardness that would immediately conquer people&#8217;s hearts with no effort. He was like that young little brother that makes you blush at a family dinner for being excessively goofy, but that you love so much you would never reprehend.</p>
<p>To me and my wife, Dorneles was closer than family. My wife suffered more from his loss than for the loss of her lovely grandma, or from her uncle that died a slow death from brain cancer a couple years ago. </p>
<p>In retrospect, I can now see that he did treat me like an older brother, always eager to take on my advice. When he was alone in a big empty office in Caxias do Sul, following the break with the other partners at X3ng I told him to move to Garibaldi because we could rent a similar office for much cheaper. I suggested that he should reunite with his wife and two kids, which were living with her mom, and that raising them in Garibaldi would be much better for their education and overall quality of life. I said it would be nice if he had a car so that he didn&#8217;t need to call a cab at 3am when his kids were sick (he refused to buy a car for years, since he had cars stolen several times). At a time he was having trouble getting regular pay, I suggested he should work for Enfold. I told him to go to more conferences and sprints, so that he could put faces to the names on #plone. He was easily convinced. And all of these things had a great impact in his life.</p>
<p>I regret not spending as much time with him as I could in the last year. But many are the good memories that we&#8217;ve shared. Back in November 2009, when my backpack with laptop and cameras containing all the pictures from my vacation in New York got stolen on our first day in Houston he calmly told me: &#8220;Don&#8217;t worry, you can buy all those things again. They didn&#8217;t take from you the most precious thing: your life.&#8221;</p>
<p>I regret that he didn&#8217;t find the time to visit my 3mo old twins. But I&#8217;m glad that after my visit last Saturday, he went to visit his 2 weeks old nephew and his dad on the Sunday. I&#8217;m glad that we spent a good 2h last Saturday sitting around, chatting about the most diverse subjects while I was at his place waiting for the rain to stop.</p>
<p>Dorneles was a sushi lover. He once walked for tens of blocks in Houston on a cracking hot summer day just to eat sushi, and lived to tell the tale. That&#8217;s perhaps the most un-American thing he could do. The first thing we did when we met in Houston in November 2009 was to go out for sushi. When Nate came to Brazil, he took him out for sushi, and that&#8217;s perhaps the most un-Brazilian thing he could do. His love for sushi passed on to his kids. For several weeks I told my wife that we should invite his family out for sushi. We were waiting for the right occasion, and it never happened. In his memory, I think we should do it anyway.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=391&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/R2FOYHxqN5s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2011/02/14/unfinished-life-of-a-sushi-lover/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2011/02/14/unfinished-life-of-a-sushi-lover/</feedburner:origLink></item>
		<item>
		<title>New domain, please fix your RSS readers</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/3pZwudR2i08/</link>
		<comments>http://blog.sidneidasilva.com/2010/12/09/new-domain-please-fix-your-rss-readers/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 17:08:08 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=385</guid>
		<description><![CDATA[I&#8217;ve registered the sidneidasilva.com domain slighly over a year ago, and let my old awkly.org domain expire. Seems like a few places (like planet.plone.org) were still using the old URL. Sorry for the noise.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=385&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve registered the sidneidasilva.com domain slighly over a year ago, and let my old awkly.org domain expire. Seems like a few places (like planet.plone.org) were still using the old URL. Sorry for the noise.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=385&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/3pZwudR2i08" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/12/09/new-domain-please-fix-your-rss-readers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/12/09/new-domain-please-fix-your-rss-readers/</feedburner:origLink></item>
		<item>
		<title>Even Faster Web Sites, with YUI</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/py056KnGSFg/</link>
		<comments>http://blog.sidneidasilva.com/2010/10/01/even-faster-web-sites-with-yui/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 06:22:40 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[canonical]]></category>
		<category><![CDATA[landscape]]></category>
		<category><![CDATA[yui]]></category>
		<category><![CDATA[speed]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=360</guid>
		<description><![CDATA[Ever since I got my copy of Steve Souders&#8217; Even Faster Web Sites I&#8217;ve became obsessed with speed. During my day job I&#8217;m constantly looking for things that can be improved to make the user experience smoother, specially for first-time visitors. I&#8217;m fairly happy with what we&#8217;ve achieved in the last year, though there are [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=360&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ever since I got my copy of <a href="http://stevesouders.com/">Steve Souders&#8217;</a> <a href="http://stevesouders.com/efws/">Even Faster Web Sites</a> I&#8217;ve became obsessed with speed. During my day job I&#8217;m constantly looking for things that can be improved to make the user experience smoother, specially for first-time visitors. I&#8217;m fairly happy with what we&#8217;ve achieved in the last year, though there are always things to be improved.</p>
<p>Today I&#8217;m going to share with you one of the tricks that we&#8217;ve discovered almost by accident and that can help with making your website faster, if <a href="http://developer.yahoo.com/yui/3">YUI</a> is your Javascript framework of choice.</p>
<p>We&#8217;ve started using YUI in <a href="https://landscape.canonical.com/">Landscape</a> around March of 2009, by rewriting all of our ExtJS-based scripts (which weren&#8217;t that many) to use YUI. Since our application requires HTTPS due to potentially sensitive information, we had to self-host YUI, to avoid mixed-content warnings. Initially we had little experience with it, so we went with the easiest option available: loading the YUI seed file and letting everything else be loaded on-demand by the YUI Loader, without a combo handler (more on that later).</p>
<p>Soon enough we noticed that it wasn&#8217;t such a great idea. First-time access was terrible, with load times over 30 seconds in some cases, due to the combination of HTTPS connection overhead, no static resource caching and large number of requests to fetch all the resources. It was worse than that even, because most browsers either don&#8217;t cache HTTPS content by default, or only cache it on memory, unless you set the proper caching headers. To give you an idea of what it looked like, here&#8217;s what a trivial page using the &#8216;overlay&#8217; module looks like in terms of loading.</p>
<div id="attachment_369" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/bAmXnD"><img src="http://omsg.files.wordpress.com/2010/10/selection_202.png?w=300&#038;h=233" alt="No combo loading at all" title="No combo loading at all" width="300" height="233" class="size-medium wp-image-369" /></a><p class="wp-caption-text">No combo loading at all</p></div>
<p>It was pretty clear that this kind of performance would not be acceptable, so I started looking for options to reduce the number of requests. It was around that time that I heard about Steve Souders work on web performance, through <a href="http://limi.net/">a long time friend</a> from the Plone community that happened to be working at Google and shared a link to Souders&#8217; <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">blog post on &#8216;@import&#8217;</a>.</p>
<p>Turns out that the YUI Loader supports using a <a href="http://www.yuiblog.com/blog/2008/07/16/combohandler/">combo handler</a> for reducing the number of requests, when loading modules on demand. What this &#8216;combo handler&#8217; does is basically take a GET request with a bunch of filenames as parameters and return a single response with the respective files concatenated. Here&#8217;s an example using the combo server from YUI&#8217;s CDN.</p>
<div id="attachment_368" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/aIE7QA"><img src="http://omsg.files.wordpress.com/2010/10/selection_203.png?w=300&#038;h=78" alt="Combo loading with a single &#039;Y.use()&#039;" title="Combo loading with a single &#039;Y.use()&#039;" width="300" height="78" class="size-medium wp-image-368" /></a><p class="wp-caption-text">Combo loading with a single 'Y.use()'</p></div>
<p>The problem was that we couldn&#8217;t use YUI&#8217;s combo server on the CDN because it doesn&#8217;t support HTTPS, which was requirement for us.</p>
<p>In November of 2009, at <a href="https://wiki.ubuntu.com/UDS-L">UDS-Lucid in Dallas</a>, we had our first YUI-only cross-team sprint, totalling about 20 people from Launchpad, Landscape, ISD and Ubuntu One. The main goals were to spread knowledge on YUI and improve support for IE on our shared codebase (lazr-js), but I managed to sneak in two things for the Landscape team: implementing a <a href="http://bazaar.launchpad.net/~launchpad-pqm/lazr-js/toolchain/annotate/188/combo.tac">Python-based combo loader</a> (served by Twisted, but it&#8217;s just a plain WSGI app) and extracting <a href="http://bazaar.launchpad.net/~launchpad-pqm/lazr-js/toolchain/annotate/188/src-py/lazr/js/meta.py">YUI module metadata</a>, so that we could make it easier to load extension modules on-demand, the code for which ended up as part of the lazr-js project.</p>
<p>At this point however we realized that there&#8217;s a significant issue with using the combo loader on an application as diverse as Launchpad or Landscape: depending on how you group your &#8216;Y.use()&#8217; calls, the combo URL generated by the YUI Loader can vary significantly, which means that re-use from the browser cache is less than optimal. Here&#8217;s an example of loading both the &#8216;anim-color&#8217; module and the &#8216;overlay&#8217; module within a page. Compare it to the previous example and notice how the parameters passed to the combo are completely different, since the second request (to load the &#8216;overlay&#8217; module) only requests modules which haven&#8217;t been loaded by the first request (to load the &#8216;anim-color&#8217; module).</p>
<div id="attachment_367" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/9EVFlN"><img src="http://omsg.files.wordpress.com/2010/10/selection_205.png?w=300&#038;h=88" alt="Combo loader can be a caching problem" title="Combo loader can be a caching problem" width="300" height="88" class="size-medium wp-image-367" /></a><p class="wp-caption-text">Combo loader can be a caching problem</p></div>
<p>In a hurry to get the situation solved ASAP, and taking a clue from our fellow developers on the Launchpad team, we went with a simpler alternative: manually combining all of YUI, including the seed file, and loading all of that in a &#8216;script&#8217; tag in the document &#8216;head&#8217;. It turns out that the situation improved quite dramatically, but there was still more to be done. Although the number of requests was much smaller, the total page size was actually larger, since we were loading a lot of stuff that wasn&#8217;t even being used. Worse, since we were putting that &#8216;script&#8217; tag in the &#8216;head&#8217;, it was blocking the whole page from loading until the script was finished downloading, which I after following Souders&#8217; blog for a while I realized wasn&#8217;t such a great idea either. Here&#8217;s an example of what that looked like.</p>
<div id="attachment_366" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/dAVZPg"><img src="http://omsg.files.wordpress.com/2010/10/selection_204.png?w=300&#038;h=86" alt="Combined modules in the head" title="Combined modules in the head" width="300" height="86" class="size-medium wp-image-366" /></a><p class="wp-caption-text">Combined modules in the head</p></div>
<p>At this point we had a significant codebase of YUI-based modules, and so did the Launchpad team, but we had gone from solely relying on the YUI Loader to not using it at all (by just loading all the code in one big honking file).</p>
<p>Once we got the module metadata extraction figured out though, I resumed working on improving the first-view load time, by reducing the number of modules manually combined to the bare minimum shared by all of our pages. Also, by having a single file with the common modules being loaded on all the pages, we can be sure that it is highly cacheable. And then we let the YUI Loader kick in and load the missing modules on less-used pages, which was a really nice improvement in page weight and reducing the time to the &#8216;onload&#8217; event.</p>
<p>At this point Souders started talking about asynchronous loading of scripts and the &#8216;defer&#8217; attribute, and I got my copy of Even Faster Web Sites. I started pondering if there was something that could be done to defer the loading of the combined modules while still letting the YUI Loader do it&#8217;s job.</p>
<p>The problem lies in the fact that YUI asynchronously loads modules that are not on the page yet, calling a callback function (the last argument to &#8216;Y.use()&#8217;) once all the scripts containing the required modules have finished loading. If all the modules are already on the page, it just calls the callback right away. So by just tacking a &#8216;defer&#8217; attribute on the &#8216;script&#8217; tag for the combined modules there would be a race condition between the loader checking if the modules were loaded and the script with the combined modules being loaded.</p>
<p>Then, it struck me. If the last argument to &#8216;Y.use()&#8217; is just a callback function, could we queue those functions to be called at a later time and load the combined modules ourselves, before letting the YUI loader proceed? After a little back and forth with Dav Glass and some pseudocode exchange, I got an implementation of this idea(which I&#8217;m calling the &#8216;<a href="http://bazaar.launchpad.net/~launchpad-pqm/lazr-js/toolchain/annotate/188/src-js/lazrjs/loader/prefetch.js">Prefetch YUI Loader Hack</a>&#8216;). And thus we managed to move the loading of all the combined modules from a &#8216;script&#8217; in the &#8216;head&#8217; to use asynchronous script loading, shortening even further our time to the &#8216;onload&#8217; event. Here&#8217;s an example of what it looks like.</p>
<div id="attachment_377" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/cMyF0a"><img src="http://omsg.files.wordpress.com/2010/10/selection_208.png?w=300&#038;h=81" alt="Prefetch with a single request" title="Prefetch with a single request" width="300" height="81" class="size-medium wp-image-377" /></a><p class="wp-caption-text">Prefetch with a single request</p></div>
<p>But wait, there&#8217;s more! Souders then started talking about parallel loading, tickling my speed bug again. After thinking for a while about the problem, enlightenment came again: when an YUI module is loaded, it is not executed right away, but added to an internal registry of modules. What that means is that regardless of what other modules it depends on, they can all be loaded independently from each other! That means you can break up a manually combined file into N smaller files and have them be loaded in up to N parallel connections (where N varies by browser and by browser version) and when they are all done you can let the YUI Loader kick in. Here&#8217;s an example with two parallel downloads plus an extra module not prefetched.</p>
<div id="attachment_365" class="wp-caption aligncenter" style="width: 310px"><a href="http://bit.ly/d8rLkq"><img src="http://omsg.files.wordpress.com/2010/10/selection_206.png?w=300&#038;h=97" alt="Prefetch, with parallel download" title="Prefetch, with parallel download" width="300" height="97" class="size-medium wp-image-365" /></a><p class="wp-caption-text">Prefetch, with parallel download</p></div>
<p>So that&#8217;s where things stand now. There are still optimizations that can be done in Landscape, like using the combo loader to reduce the number of requests on less common pages, or even using fixed URLs to the combo loader with the prefetch hack, to simplify the build process. We also need to start using Caridy&#8217;s <a href="http://yuilibrary.com/gallery/show/event-binder">Event Binder module</a>, since now the pages load so fast that the users start clicking around before the event handlers are in place (ha!). </p>
<p>I am also pushing to get those kinds of tips documented and passed around <a href="http://www.canonical.com/">Canonical</a>, through a project codenamed Dare2BFast, which has the goal of coming up with a set of Web Performance Guidelines that all Canonical web sites should follow, both on the frontend and backend. Stay tuned!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=360&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/py056KnGSFg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/10/01/even-faster-web-sites-with-yui/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_202.png?w=300" medium="image">
			<media:title type="html">No combo loading at all</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_203.png?w=300" medium="image">
			<media:title type="html">Combo loading with a single 'Y.use()'</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_205.png?w=300" medium="image">
			<media:title type="html">Combo loader can be a caching problem</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_204.png?w=300" medium="image">
			<media:title type="html">Combined modules in the head</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_208.png?w=300" medium="image">
			<media:title type="html">Prefetch with a single request</media:title>
		</media:content>

		<media:content url="http://omsg.files.wordpress.com/2010/10/selection_206.png?w=300" medium="image">
			<media:title type="html">Prefetch, with parallel download</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/10/01/even-faster-web-sites-with-yui/</feedburner:origLink></item>
		<item>
		<title>Get it like you like it</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/SoIQzsTjbOg/</link>
		<comments>http://blog.sidneidasilva.com/2010/09/08/get-it-like-you-like-it/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 16:05:50 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[landscape]]></category>
		<category><![CDATA[speed]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=349</guid>
		<description><![CDATA[This morning I woke up with this song in my head. It reminds me quite a bit of the Rolling Stones, and it&#8217;s very appropriate for the mood I&#8217;m in today. I&#8217;m sitting here at Canonical&#8217;s office in Montreal, where we are having another Landscape sprint. There&#8217;s a couple things that make this sprint special, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=349&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This morning I <a href="http://www.amazon.com/Get-Like-You/dp/B000TDWJ84">woke up with this song in my head</a>. It reminds me quite a bit of the Rolling Stones, and it&#8217;s very appropriate for the mood I&#8217;m in today.</p>
<p>I&#8217;m sitting here at Canonical&#8217;s office in Montreal, where we are having another Landscape sprint. There&#8217;s a couple things that make this sprint special, one of them being that <a href="http://fwierzbicki.blogspot.com/">Frank Wierzbicki</a> has joined us! Welcome to the team, Frank, and I hope you enjoy!</p>
<p>It has also coincided with the end of our 1.5.5 milestone, which rolled out yesterday, with some interesting highlights:</p>
<h3>Speed!</h3>
<p>Contrary to what other people might tell you, <em>YES</em> speed does matter. We&#8217;ve been slowly (ha!) <a href="http://www.showslow.com/details/?url=https://landscape.canonical.com/">rolling out improvements to page load speed</a>, and I&#8217;m happy to say that the improvements are very noticeable. Things we&#8217;ve done to improve this range from setting proper caching headers for static resources to heavily <a href="http://developer.yahoo.com/yui/3/yui/#loader">abusing the YUI Loader</a>. I should write more about that on a more appropriate occasion. There&#8217;s always things to improve on, so keep an eye on it!</p>
<h3>Faster Trials</h3>
<p>Over the last four years, the trial registration for Landscape hasn&#8217;t been&#8230; enjoyable to say the least. This week we&#8217;ve finally rolled out the first iteration of our simplified registration process, which removes a manual approval step which used to take several weeks to be done. That means you can now register for a trial account in Landscape and start using it right away! Quite a novel concept, isn&#8217;t it? :) We&#8217;ll planning some more updates to it, so that when starting the registration process you have a better sense of where you are in the process and what are steps involved.</p>
<p>We have more exciting updates coming up before the end of the year, so keep an eye on it. But in the meantime, <a href="https://landscape.canonical.com/?utm_source=sidnei&amp;utm_medium=blog&amp;utm_campaign=new-trial-registration">hit that &#8216;Registration&#8217; link in Landscape</a>, get it like you like it, and enjoy!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=349&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/SoIQzsTjbOg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/09/08/get-it-like-you-like-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/09/08/get-it-like-you-like-it/</feedburner:origLink></item>
		<item>
		<title>Call for testers: lxml 2.2.6/py2.6 Windows Binaries</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/eGvCWhgSndU/</link>
		<comments>http://blog.sidneidasilva.com/2010/07/09/call-for-testers-lxml-for-python-2-6-on-windows/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 03:58:40 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[enfold]]></category>
		<category><![CDATA[houston]]></category>
		<category><![CDATA[landscape]]></category>
		<category><![CDATA[twins]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=337</guid>
		<description><![CDATA[lxml 2.2.6 for Python 2.6 on Windows is now available. Also, some cool personal news.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=337&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hi everyone,</p>
<p>After several months of silence, I finally managed to get all the needed pieces back together to build lxml again. <a href="http://codespeak.net/pipermail/lxml-dev/2010-May/005453.html">More than once</a> people asked over on the lxml mailing list about what happened to the said eggs. The good news is that an <a href="http://bit.ly/bNGEol">unnoficial release of lxml 2.2.6 for Python 2.6 on Windows</a> is now available for testing, in 32 and 64 bit flavors. The 64 bits version was compiled without iconv support because that&#8217;s the only thing I haven&#8217;t figured out how to compile.</p>
<p>In case you didn&#8217;t hear about what happened, this delay was caused by a robbery that occurred on the same day I arrived in Houston, November of last year. I was with my wife and we left for a couple hours for dinner, and when we came back the place we were staying at (Robin&#8217;s Nest) had been broken into my backpack was taken, with my laptop, two cameras (with all the pictures we had taken in New York) and two cellphones. We have already replaced everything that was robbed and moved on. Thankfully Robin had insurance, which covered about half of our losses.</p>
<p>That was the bad news. The good news is completely unrelated to all of this: <a href="http://www.flickr.com/photos/sidnei/4760960546/">my wife is pregnant</a>, and the babies are due in somewhere between late November/early December. Note I said bab<strong>ies</strong>. Yes. <a href="http://www.flickr.com/photos/sidnei/4607038757/">Twins</a>. Apparently two girls (last ecography was a little bit to early to say, but the doctor gave us about 90% confidence). We&#8217;ve tentatively picked <strong>Laura</strong> and <strong>Rafaela</strong> for her names.</p>
<p>So if you&#8217;re as happy as we are about the news and want to show some gratitude, we&#8217;ve set up a <a href="http://bit.ly/dhfoUT">Baby Registry</a> at Babies&#8217;R'Us, and the shipping address is set to Enfold System&#8217;s office in Houston. I will be visiting my old friends there around September 10, on my way back from another <a href="http://landscape.canonical.com">Landscape</a> sprint in Montreal to pick up the gifts and to say <em>Hi</em>.</p>
<p>Thanks everyone for your patience!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=337&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/eGvCWhgSndU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/07/09/call-for-testers-lxml-for-python-2-6-on-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/07/09/call-for-testers-lxml-for-python-2-6-on-windows/</feedburner:origLink></item>
		<item>
		<title>blogging via seesmic for android?</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/CU5FH7RsF70/</link>
		<comments>http://blog.sidneidasilva.com/2010/04/16/blogging-via-seesmic-for-android-that/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 19:08:47 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/2010/04/16/blogging-via-seesmic-for-android-that/</guid>
		<description><![CDATA[blogging via seesmic for android? that&#8217;s nuts.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=334&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>blogging via seesmic for android? that&#8217;s nuts.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=334&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/CU5FH7RsF70" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/04/16/blogging-via-seesmic-for-android-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/04/16/blogging-via-seesmic-for-android-that/</feedburner:origLink></item>
		<item>
		<title>Javascript Testing and Browser Speed</title>
		<link>http://feedproxy.google.com/~r/sidnei/mwUx/~3/AA3zJeXTs5Y/</link>
		<comments>http://blog.sidneidasilva.com/2010/03/17/javascript-testing-and-browser-speed/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 02:30:20 +0000</pubDate>
		<dc:creator>Sidnei</dc:creator>
				<category><![CDATA[canonical]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[landscape]]></category>

		<guid isPermaLink="false">http://blog.sidneidasilva.com/?p=320</guid>
		<description><![CDATA[Just a quick post to get me started at blogging again. Over the last year (wow, time flies by!) I&#8217;ve been working at Canonical, as part of the Landscape team. This is a very diverse team with lots of different skills, and somehow I found myself naturally gravitating towards working more closely on frontend-related issues, [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=320&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Just a quick post to get me started at blogging again.</p>
<p>Over the last year (wow, time flies by!) I&#8217;ve been working at Canonical, as part of the Landscape team. This is a very diverse team with lots of different skills, and somehow I found myself naturally gravitating towards working more closely on frontend-related issues, of which I could highlight writing YUI3 widgets, speeding up page loading experience and creating a nice testing infrastructure. There&#8217;s a ton of things I could write about that, and I really plan to. But today&#8217;s entry will be pretty short.</p>
<p><span id="more-320"></span></p>
<p>As part of a brain-break task I fixed some of our Javascript tests today so that they would run on Google Chrome. We haven&#8217;t been targeting Chrome so far, but that might change soon, driven by Google Analytics stats of people using Landscape.</p>
<p>But, the thing that really caught my attention was the difference in speed between Chrome and Firefox. </p>
<p>For comparison:</p>
<p><b>Google Chrome 5.0.307.7 beta</b></p>
<pre>
$ BROWSER=google-chrome ./bin/test -1vpc --layer=JsTestDriverLayer
Running tests at level 1
Running canonical.testing.javascript.JsTestDriverLayer tests:
Set up canonical.testing.javascript.JsTestDriverLayer in 1.020 seconds.
Running:

Ran 318 tests with 0 failures and 0 errors in 9.545 seconds.
Tearing down left over layers:
Tear down canonical.testing.javascript.JsTestDriverLayer in 0.366 seconds.
</pre>
<p><b>Firefox 3.6.3pre</b></p>
<pre>
$ BROWSER=firefox ./bin/test -1vpc --layer=JsTestDriverLayer
Running tests at level 1
Running canonical.testing.javascript.JsTestDriverLayer tests:
  Set up canonical.testing.javascript.JsTestDriverLayer in 1.014 seconds.
  Running:
                                                                                                                             
  Ran 318 tests with 0 failures and 0 errors in 15.032 seconds.
Tearing down left over layers:
  Tear down canonical.testing.javascript.JsTestDriverLayer in 0.349 seconds.
</pre>
<p><b>Firefox 3.7a3pre</b></p>
<pre>
$ BROWSER=firefox-3.7 ./bin/test -1vpc --layer=JsTestDriverLayer
Running tests at level 1
Running canonical.testing.javascript.JsTestDriverLayer tests:
  Set up canonical.testing.javascript.JsTestDriverLayer in 0.804 seconds.
  Running:
                                                                                                                           
  Ran 318 tests with 0 failures and 0 errors in 13.433 seconds.
Tearing down left over layers:
  Tear down canonical.testing.javascript.JsTestDriverLayer in 0.379 seconds.
</pre>
<p><b>Disclaimer</b>: Both instances of Firefox were started with the &#8220;-safe-mode&#8221; flag, which disables all plugins and extensions. Also, as they say around here at Canonical: NOT A METRIC. But interesting still.</p>
<p>If you look closely at this post you might find some hints about things we&#8217;ve been working on and which I hope to write about, in addition to general tips and tricks about page speed optimization from experiences in both Landscape and Launchpad.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.sidneidasilva.com&#038;blog=232351&#038;post=320&#038;subd=omsg&#038;ref=&#038;feed=1" width="1" height="1" /><img src="http://feeds.feedburner.com/~r/sidnei/mwUx/~4/AA3zJeXTs5Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.sidneidasilva.com/2010/03/17/javascript-testing-and-browser-speed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/18268769213d24b741de807d6c350363?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">sidnei</media:title>
		</media:content>
	<feedburner:origLink>http://blog.sidneidasilva.com/2010/03/17/javascript-testing-and-browser-speed/</feedburner:origLink></item>
	</channel>
</rss>
