<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog ! {tim, taubert}</title>
	<atom:link href="http://timtaubert.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://timtaubert.de</link>
	<description>Software Engineer and Music Addict</description>
	<lastBuildDate>Mon, 14 May 2012 09:21:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Are we small yet?</title>
		<link>http://timtaubert.de/2012/04/are-we-small-yet/</link>
		<comments>http://timtaubert.de/2012/04/are-we-small-yet/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 20:32:17 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=854</guid>
		<description><![CDATA[Lately, Asa Dotzler posted to dev.apps.firefox regarding the download size of Firefox: &#8220;This evening I noticed that my full win32 mar update for Firefox was 21MB. That caused me to look at what our full win32 installer size was. I (&#8230;)</p><p><a href="http://timtaubert.de/2012/04/are-we-small-yet/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Lately, <a href="http://weblogs.mozillazine.org/asa/">Asa Dotzler</a> <a href="https://groups.google.com/forum/#!topic/mozilla.dev.apps.firefox/k7fzkhdt9io">posted to dev.apps.firefox</a> regarding the download size of Firefox:</p>
<p><em>&#8220;This evening I noticed that my full win32 mar update for Firefox was 21MB. That caused me to look at what our full win32 installer size was. I was a bit surprised to see it&#8217;s up to 17MB. When we shipped Firefox 1, our Windows installer build was 4.7MB. [...]</em></p>
<p><em>Firefox 12 is a 16.1 MB download.</em><br />
<em> Firefox 4 was a 12.0 MB download.</em><br />
<em> Firefox 3.6 was a 7.7 MB download.</em></p>
<p><em>In less than three years we&#8217;ve more than doubled in size. (fuller chart here <a href="http://grab.by/cSHA">http://grab.by/cSHA</a>)&#8221;</em></p>
<p>While there&#8217;s no doubt that adding new features and supporting new platforms are good reasons for increasing the build size it&#8217;s definitely a metric that impacts users. It hits them the hardest when downloading Firefox the first time, especially with slow internet connections. It still hits them every time we provide application updates.</p>
<p>To better illustrate the steady growth over the last few years I created <a href="http://arewesmallyet.com/">http://arewesmallyet.com/</a>. It&#8217;s updated daily, shows differences between nightly builds and links to the corresponding changelog if one would like to investigate the cause of increasing build sizes.</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2012/04/2012-04-11_22-03-08.png" rel="lightbox[854]"><img class="alignnone size-large wp-image-871" title="arewesmallyet.com" src="http://timtaubert.de/wp-content/uploads/2012/04/2012-04-11_22-03-08-1024x492.png" alt="" width="500" height="240" /></a></p>
<p>While this surely isn&#8217;t the most important battle we have right now I hope this will turn out useful to anyone willing to pick this up and tackle some build size optimizations.</p>
<p>&nbsp;</p>
<p><strong></strong><strong>Data:</strong> <a href="http://arewesmallyet.com/files/data.json">http://arewesmallyet.com/files/data.json</a><br />
<strong>GitHub:</strong> <a href="https://github.com/ttaubert/are-we-small-yet">https://github.com/ttaubert/are-we-small-yet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2012/04/are-we-small-yet/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>One year at Mozilla</title>
		<link>http://timtaubert.de/2012/04/one-year-at-mozilla/</link>
		<comments>http://timtaubert.de/2012/04/one-year-at-mozilla/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 22:40:56 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=650</guid>
		<description><![CDATA[You may already know the story of how I became a Firefox contributor. Back in early April of 2011, having volunteered full-time for three months (a rather short time compared to other core contributors), I was given the opportunity to (&#8230;)</p><p><a href="http://timtaubert.de/2012/04/one-year-at-mozilla/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://timtaubert.de/wp-content/uploads/2012/04/nz4tlzljtw11.jpeg" rel="lightbox[650]"><img class="alignnone size-large wp-image-835" title="The twins" src="http://timtaubert.de/wp-content/uploads/2012/04/nz4tlzljtw11-1024x640.jpg" alt="" width="500" height="312" /></a></p>
<p>You may already know the story of <a title="How I became a Firefox contributor" href="http://timtaubert.de/2012/01/how-i-became-a-firefox-contributor/">how I became a Firefox contributor</a>. Back in early April of 2011, having volunteered full-time for three months (a rather short time compared to other core contributors), I was given the opportunity to start as a paid contributor working for Mozilla.</p>
<p>Over the year I met a lot of great people and had the chance to visit our awesome offices in Mountain View, San Francisco and soon Toronto. I attended JSConf.eu, MozCamp and FOSDEM, with the JSDay yet to come.</p>
<p>But Mozilla isn&#8217;t about traveling or attending conferences. It&#8217;s about passion for open source, passion for the open web. Working for a non-profit, where decisions are driven by reason and mission, is something that not many software engineers will ever experience in their whole professional career. That&#8217;s only one of the reasons I&#8217;m really glad to be a part of the global Mozilla community.</p>
<p>Inspired by <a title="Lucas Rocha - My first 238 days at Mozilla" href="http://lucasr.org/2012/03/13/my-first-238-days-at-mozilla/">Lucas Rocha</a> I&#8217;ll end this post with some neat statistics about my contributions to the Mozilla project (we Germans love statistics):</p>
<p>I fixed 223 bugs and reviewed patches for 116. I pushed 417 changesets, 110 of them being merges between trees. I changed roughly 1367 files (31862 insertions(+), 19081 deletions(-)).</p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2012/04/one-year-at-mozilla/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fighting DocShell and DOMWindow leaks</title>
		<link>http://timtaubert.de/2012/02/fighting-docshell-and-domwindow-leaks/</link>
		<comments>http://timtaubert.de/2012/02/fighting-docshell-and-domwindow-leaks/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 20:14:08 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=630</guid>
		<description><![CDATA[In my post Leak hunting in browser-chrome mochitests I wrote about the measures we were considering to prevent regressing efforts to get rid of leaks in Firefox. Now that bug 683953 has landed we finally have a way to detect (&#8230;)</p><p><a href="http://timtaubert.de/2012/02/fighting-docshell-and-domwindow-leaks/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>In my post <a href="http://timtaubert.de/2011/09/leak-hunting-in-browser-chrome-mochitests/">Leak hunting in browser-chrome mochitests</a> I wrote about the measures we were considering to prevent regressing efforts to get rid of leaks in Firefox. Now that <a title="Bug 683953 - Browser-chrome mochitests should show statistics about leaked DOMWindows and DocShells" href="https://bugzilla.mozilla.org/show_bug.cgi?id=683953">bug 683953</a> has landed we finally have a way to detect the leakage of whole DocShells and DOMWindows for the lifetime of the browser when running the browser-chrome mochitest suite.</p>
<p><strong>How does it work?</strong></p>
<p>While our browser-chrome mochitest suite runs we parse stdout to track starting and ending tests as well as the creation and removal of DocShells and DOMWindows. Just before the test suite shuts down we schedule a precise GC and wait until it&#8217;s completed. Any DOMWindows and DocShells still active are now counted as leaks and assigned to the tests that created them. Additionally we collect the URLs of DOMWindows to help debugging a bit.</p>
<p><strong>How does this prevent new leaks?</strong></p>
<p>We implemented a threshold of (currently) 130 leaks that must not be exceeded. If a test run leaks more than the limit we configured it goes orange and the patch should be backed out from the tree. These are the current numbers:</p>
<p>Linux (64): 116 (116)<br />
OS X (64): 79 (89)<br />
Windows (XP): 120 (118)</p>
<p>Additionally, I filed <a title="Bug 730797 - Track number of DOMWindow/DocShell leaks and report regressions" href="http://bugzil.la/730797">bug 730797</a> to integrate these leaks statistics into our Talos infrastructure. So the leak count for each push will be recorded and compared to previous runs to make sure the numbers don&#8217;t regress. As the leak numbers differ quite heavily between OSes it makes sense to apply a custom threshold per OS, this will be implemented in <a title="Bug 730800 - Apply per-OS threshold for shutdown leaks" href="http://bugzil.la/730800">bug 730800</a>.</p>
<p><strong>Why is there even a threshold?</strong></p>
<p>First, there are DocShells and DOMWindows that are intentionally kept alive until the browser closes. Second, it&#8217;s nearly impossible to bring all these leaks down to &#8220;zero&#8221; at once. It&#8217;s a list of bugs that have to be addressed and we will slowly decrease the threshold to approach &#8220;zaroo&#8221;.</p>
<p>Thanks to Dão who has been doing great work in <a title="Bug 658738 - (bc-leaks) [meta] We seem to be leaking hundreds of windows until shutdown during browser-chrome tests" href="https://bugzilla.mozilla.org/show_bug.cgi?id=658738">bug 658738</a> discovering all those leaks manually, which in the first place gave me the idea of automating it.</p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2012/02/fighting-docshell-and-domwindow-leaks/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Help us test the New Tab Page!</title>
		<link>http://timtaubert.de/2012/02/help-us-test-the-new-tab-page/</link>
		<comments>http://timtaubert.de/2012/02/help-us-test-the-new-tab-page/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 13:02:30 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=680</guid>
		<description><![CDATA[Over the last weeks we worked hard on getting the New Tab Page into Firefox. It&#8217;s not quite ready yet but we need your help testing it. We enabled it by default on Nightly and decided to give it a (&#8230;)</p><p><a href="http://timtaubert.de/2012/02/help-us-test-the-new-tab-page/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Over the last weeks we worked hard on getting the New Tab Page into Firefox. It&#8217;s not quite ready yet but we need your help testing it. We enabled it by default on Nightly and decided to give it a week on Aurora to get feedback from those users as well.</p>
<p>Nightly: <a href="http://nightly.mozilla.org/">http://nightly.mozilla.org/</a><br />
Aurora: <a href="https://www.mozilla.org/en-US/firefox/aurora/">https://www.mozilla.org/en-US/firefox/aurora/</a></p>
<p>We&#8217;ll disable it for Aurora again on February 16th (next Thursday). If you liked the feature and want it back then just set the preference &#8216;browser.newtab.url&#8217; to &#8216;about:newtab&#8217;, &#8216;browser.newtabpage.enabled&#8217; to &#8216;true&#8217; and restart the browser. You can easily file bugs using the following link:<br />
<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&amp;component=General&amp;short_desc=[New%20Tab%20Page]%20Summary%20of%20your%20problem"></p>
<p>https://bugzilla.mozilla.org/enter_bug.cgi?product=Firefox&#038;component=General</a></p>
<p>Please make sure you don&#8217;t report a duplicate bug and check the dependencies of the original New Tab Page bug before filing &#8211; <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=455553">bug 455553</a>.</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2012/02/Screen-shot-2012-02-10-at-1.37.13-PM.png" rel="lightbox[680]"><img class="alignnone size-full wp-image-685" title="New Tab Page" src="http://timtaubert.de/wp-content/uploads/2012/02/Screen-shot-2012-02-10-at-1.37.13-PM.png" alt="" width="803" height="723" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2012/02/help-us-test-the-new-tab-page/feed/</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>How I became a Firefox contributor</title>
		<link>http://timtaubert.de/2012/01/how-i-became-a-firefox-contributor/</link>
		<comments>http://timtaubert.de/2012/01/how-i-became-a-firefox-contributor/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 14:23:06 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=652</guid>
		<description><![CDATA[December 2009. I&#8217;ve been a freelancer for quite some time now and decided to dedicate some weeks to something that always fascinated me: contributing to a big open source project. I started some smaller open source projects in the past (&#8230;)</p><p><a href="http://timtaubert.de/2012/01/how-i-became-a-firefox-contributor/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>December 2009. I&#8217;ve been a freelancer for quite some time now and decided to dedicate some weeks to something that always fascinated me: contributing to a big open source project. I started some smaller open source projects in the past (like <a href="https://github.com/ttaubert/video4linux-net">Video4Linux.Net</a> and <a href="https://github.com/ttaubert/ViGedit-Plus">ViGedit+</a>) and contributed every so often to Gentoo and the Linux kernel. I&#8217;ve always been a great fan of the open source movement and I felt that it&#8217;s time to give back some love.</p>
<p>I made a list of all the things that interested me and that I could possibly contribute to. Besides having things like Linux, ReactOS and Wine on the list I picked &#8220;Firefox&#8221; because it simply has been a loyal companion for years. I think I&#8217;ve used it first in version 1.5 and it was one of the most valuable tools that helped me to earn money, get my everyday work done and the most trivial: just browse and experience the web.</p>
<p>Some weeks before that I switched to Firefox 4.0 beta3/4 because that included the first version of Panorama (Tab Groups / TabCandy) that worked on Linux. I loved this feature but noticed that it was in an early stage and needed some fixes. I set up a Firefox build environment, went through Bugzilla to find open bugs, nagged people on IRC and was totally overwhelmed by the warm welcome and the appreciation of my work. This was something I did not at all experience when trying to contribute to other open source projects. Finally, the Panorama team and me managed to get this feature into shape and land it in Firefox 4, yay!</p>
<p>Long story short, I&#8217;m now a full-time contributor and love what I&#8217;m doing<a title="Work at Mozilla" href="https://www.mozilla.org/en-US/about/careers.html">.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2012/01/how-i-became-a-firefox-contributor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firefox Add-on: WebSockets for IRCCloud</title>
		<link>http://timtaubert.de/2011/12/firefox-add-on-websockets-for-irccloud/</link>
		<comments>http://timtaubert.de/2011/12/firefox-add-on-websockets-for-irccloud/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 11:36:15 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=600</guid>
		<description><![CDATA[If you don&#8217;t know IRCCloud, check it out. It&#8217;s become a very important tool for my every day work and I really don&#8217;t want to miss it. The one thing I never liked about it is that is currently uses (&#8230;)</p><p><a href="http://timtaubert.de/2011/12/firefox-add-on-websockets-for-irccloud/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you don&#8217;t know <a href="https://irccloud.com/">IRCCloud</a>, check it out. It&#8217;s become a very important tool for my every day work and I really don&#8217;t want to miss it. The one thing I never liked about it is that is currently uses a Flash fallback if it detects that the browser doesn&#8217;t support the WebSocket API.</p>
<p>The Firefox WebSocket API is currently prefixed (called MozWebSocket) and that&#8217;s why even with the newest Firefox you&#8217;re forced to use the Flash fallback. They even check for MozWebSocket and explicitly don&#8217;t use it if detected. As I didn&#8217;t quite understand the reasons behind that I decided to write an add-on that convinces IRCCloud to use native WebSockets in Firefox. Works good so far. I hope that&#8217;ll encourage the IRCCloud guys to think about using it again.</p>
<p><strong>Add-on:</strong> <a href="https://addons.mozilla.org/en-US/firefox/addon/websockets-for-irccloud/">https://addons.mozilla.org/en-US/firefox/addon/websockets-for-irccloud/</a><br />
<strong>Source:</strong> <a href="https://github.com/ttaubert/irccloud-websockets">https://github.com/ttaubert/irccloud-websockets</a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2011/12/firefox-add-on-websockets-for-irccloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Add-on: Facebook Auto-Logout</title>
		<link>http://timtaubert.de/2011/10/firefox-add-on-facebook-auto-logout/</link>
		<comments>http://timtaubert.de/2011/10/firefox-add-on-facebook-auto-logout/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 10:37:42 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=594</guid>
		<description><![CDATA[While talking to a friend of mine recently I got to know that he really dislikes that Facebook hides the Logout link in a sub-menu. He told me that he even uses a separate browser only for Facebook because he (&#8230;)</p><p><a href="http://timtaubert.de/2011/10/firefox-add-on-facebook-auto-logout/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>While talking to a friend of mine recently I got to know that he really dislikes that Facebook hides the Logout link in a sub-menu. He told me that he even uses a separate browser only for Facebook because he is very well aware of Facebook&#8217;s business model relying on tracking users wherever they are (this is not a big issue for me because I&#8217;m very happy with <a href="https://addons.mozilla.org/de/firefox/addon/ghostery/">Ghostery</a>).</p>
<p>A quick search revealed that there seem to be lot more users than I expected that would find an auto-logout of Facebook very useful. If not for privacy issues it&#8217;s also quite useful if someone else uses your computer and wants to post weird status updates.</p>
<p>So I wrote a Firefox add-on that logs the user out of Facebook when quitting Firefox or after a configurable amount of time has passed since he last closed a Facebook page (and there&#8217;s no active tab). It removes all cookies belonging to facebook.com so even tracking should not be an issue anymore (unless Facebook implements alternative tracking techniques).</p>
<p><strong>Add-on:</strong> <a href="https://addons.mozilla.org/en-US/firefox/addon/facebook-auto-logout/">https://addons.mozilla.org/en-US/firefox/addon/facebook-auto-logout/</a><br />
<strong>Source:</strong> <a href="https://github.com/ttaubert/facebook-auto-logout">https://github.com/ttaubert/facebook-auto-logout</a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2011/10/firefox-add-on-facebook-auto-logout/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Leak hunting in browser-chrome mochitests</title>
		<link>http://timtaubert.de/2011/09/leak-hunting-in-browser-chrome-mochitests/</link>
		<comments>http://timtaubert.de/2011/09/leak-hunting-in-browser-chrome-mochitests/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 20:47:26 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=518</guid>
		<description><![CDATA[Some weeks (even months) ago Dão Gottwald started the hunt for leaked DOMWindows and DocShells while running our browser-chrome mochitest suite (see bug 658738). That means that there are some expensive objects whose lifetimes are longer than they should be (&#8230;)</p><p><a href="http://timtaubert.de/2011/09/leak-hunting-in-browser-chrome-mochitests/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Some weeks (even months) ago <a href="http://design-noir.de/">Dão Gottwald</a> started the hunt for leaked DOMWindows and DocShells while running our browser-chrome mochitest suite (see <a title="Bug 658738 - (bc-leaks) [meta] We seem to be leaking hundreds of windows until shutdown during browser-chrome tests" href="http://bugzil.la/658738">bug 658738</a>). That means that there are some expensive objects whose lifetimes are longer than they should be &#8211; they are kept alive until the test runner shuts down. Sometimes these are caused by only a little typo in the test and sometimes they unveil bigger problems in the core.</p>
<p>Dão has done some great work so far, fixed lots of those leaks and also pointed out patches that introduced new leaks. Inspired by his <a href="https://bugzilla.mozilla.org/attachment.cgi?id=553428">script</a> that parses the mochitest build log and lists all <a href="https://bugzilla.mozilla.org/attachment.cgi?id=559090">leaked URIs</a> I wrote a Python script that additionally assigns those URIs to the tests that created these DOMWindows and DocShells. I filed <a title="Bug 683953 - Browser-chrome mochitests should show statistics about leaked DOMWindows and DocShells" href="http://bugzil.la/683953">bug 683953</a> to automatically have those statistics at the end of each mochitest run. Here is an example:</p>
<pre>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">TEST-INFO | leaked 15 DOMWindows and/or DocShells<br />
<br />
[browser/components/sessionstore/test/browser/browser_589246.js]<br />
&nbsp; 5x [about:blank]<br />
&nbsp; 4x [chrome://browser/content/browser.xul]<br />
&nbsp; 1x docShells<br />
<br />
[browser/devtools/styleinspector/test/browser/styleinspector.js]<br />
&nbsp; 2x [chrome://browser/content/csshtmltree.xhtml]<br />
&nbsp; 1x [data:text/html,basic%20style%20inspector%20tests]<br />
&nbsp; 1x [about:blank]<br />
&nbsp; 1x docShells</div></div>
</pre>
<p>This would definitely be very helpful as you don&#8217;t have to parse a build log manually after the test run finished. It would also allow us to fail (in a far future where all leaks are fixed) when we detect that the current patch would introduce a new leak.</p>
<p>Another approach would be to have an API that allows to check whether a given object should be regarded as &#8220;alive&#8221; or &#8220;dead&#8221;. This is what <a title="Bug 633670 - (LifetimeTesting) Need testing support for &quot;leaks&quot;" href="http://bugzil.la/633670">bug 633670</a> is about. Every test would need to check if the DOMWindows, DocShells and other objects created by it are still considered alive after it has finished. One problem with this is that we would have to run GC after each test to determine an object&#8217;s lifetime &#8211; which would negatively affect the overall mochitest suite runtime.</p>
<p>No matter which solution (or maybe a combination of both or something completely different) will make it &#8211; we definitely need some kind of better leak detection than we currently have. Many of us are not aware that they are accidentally introducing new leaks with new patches they write. Manually checking for new leaks after each push is a real waste of time and shouldn&#8217;t be necessary.</p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2011/09/leak-hunting-in-browser-chrome-mochitests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Electrolysis 101 (part 1)</title>
		<link>http://timtaubert.de/2011/08/firefox-electrolysis-101-part-1/</link>
		<comments>http://timtaubert.de/2011/08/firefox-electrolysis-101-part-1/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 19:55:35 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=286</guid>
		<description><![CDATA[You probably have all heard of this weird new thing called Electrolysis (a.k.a. e10s). Basically it&#8217;s all about running the browser UI and its tabs in separated processes. I recently rewrote a part of Panorama to be e10s-future-proof and thought (&#8230;)</p><p><a href="http://timtaubert.de/2011/08/firefox-electrolysis-101-part-1/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>You probably have all heard of this weird new thing called <a href="https://wiki.mozilla.org/Electrolysis">Electrolysis (a.k.a. e10s)</a>. Basically it&#8217;s all about running the browser UI and its tabs in separated processes. I recently rewrote a part of Panorama to be e10s-future-proof and thought I should share what I&#8217;ve learned so far&#8230;</p>
<p><em>(If you don&#8217;t know why we&#8217;re all doing this, please read: <a href="http://blog.mozilla.com/products/2011/07/15/goals-for-multi-process-firefox/">http://blog.mozilla.com/products/2011/07/15/goals-for-multi-process-firefox/</a></em>)</p>
<p><em><strong>Update:</strong> There is a global message manager. You <strong>can</strong> send messages through the global or the per-window message manager. Corrected the different loadFrameScript() behaviors. Thanks to Mark Finkle for these corrections!</em></p>
<h2><strong>The message manager</strong><br />
<span style="font-size: small;">(<a href="https://developer.mozilla.org/en/The_message_manager">https://developer.mozilla.org/en/The_message_manager</a>)</span></h2>
<p>We&#8217;re using messages to establish communication between the chrome process and the content processes. The message manager sends messages and registers message listeners. It&#8217;s also capable of injecting so-called frame scripts (or content scripts) into a content process &#8211; these send or receive messages and interact with the DOM loaded into the &lt;browser&gt;. There are four types of message managers:</p>
<h3>global messageManager</h3>
<p>This message manager sends messages to and receives them from  every &lt;browser&gt; loaded in every window. You can access it by doing:</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* chrome script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> globalMM <span style="color: #339933;">=</span> Cc<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@mozilla.org/globalmessagemanager;1&quot;</span><span style="color: #009900;">&#93;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #660066;">getService</span><span style="color: #009900;">&#40;</span>Ci.<span style="color: #660066;">nsIChromeFrameMessageManager</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</pre>
<h3>window.messageManager</h3>
<p>This message manager sends messages to and receives them from every &lt;browser&gt; loaded in the given window.</p>
<h3>browser.messageManager</h3>
<p>This message manager is specific to a single &lt;browser&gt;.</p>
<h3>Available methods</h3>
<pre>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">messageManager.addMessageListener(messageName, listener)<br />
messageManager.removeMessageListener(messageName, listener)<br />
messageManager.sendAsyncMessage(messageName[, json])<br />
messageManager.loadFrameScript(url[, allowDelayedLoad])</div></div>
</pre>
<h3>content/frame scripts</h3>
<p>The methods of a content script&#8217;s message manager are available as global functions. Note that a content script can send synchronous messages, unlike the message managers accessible from chrome scripts. The chrome process is not allowed to block on content processes.</p>
<pre>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">addMessageListener(messageName, listener)<br />
removeMessageListener(messageName, listener)<br />
sendAsyncMessage(messageName[, json])<br />
sendSyncMessage(messageName[, json])</div></div>
</pre>
<h3>e10s components</h3>
<p>Here is an overview of all Electrolysis components. That&#8217;s not exactly how e10s is implemented in Gecko but rather a logical view to clarify interactions between these parts.</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/electrolysis.png" rel="lightbox[286]"><img class="alignnone size-full wp-image-505" title="Overview of Electrolysis components" src="http://timtaubert.de/wp-content/uploads/2011/08/electrolysis.png" alt="" width="1003" height="491" /></a></p>
<h2>A simple example</h2>
<h3><strong>The chrome script</strong></h3>
<p>This is the part of the code that runs in the browser process and listens for messages sent by frame scripts. We&#8217;re processing a &#8220;click&#8221; message and respond with an &#8220;alert&#8221; message.</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* chrome script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> mm <span style="color: #339933;">=</span> window.<span style="color: #660066;">messageManager</span><span style="color: #339933;">;</span><br />
<br />
mm.<span style="color: #660066;">addMessageListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">let</span> browser <span style="color: #339933;">=</span> msg.<span style="color: #660066;">target</span><span style="color: #339933;">;</span><br />
  <span style="color: #003366; font-weight: bold;">let</span> data <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>text<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;You clicked a &lt;&quot;</span> <span style="color: #339933;">+</span> msg.<span style="color: #660066;">json</span>.<span style="color: #660066;">tagName</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&gt;!&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; browser.<span style="color: #660066;">messageManager</span>.<span style="color: #660066;">sendAsyncMessage</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;alert&quot;</span><span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
mm.<span style="color: #660066;">loadFrameScript</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;chrome://project/content/content.js&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</pre>
<h3><strong>The frame script</strong></h3>
<p>The frame script (or content script) runs in the same process as the web page and has access to the contentWindow, document and their events. We listen for any click event and send a &#8220;click&#8221; message providing the tagName of the clicked element. Additionally we listen for &#8220;alert&#8221; messages and show an alert dialog when we receive them.</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* content script */</span><br />
addEventListener<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">let</span> data <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>tagName<span style="color: #339933;">:</span> event.<span style="color: #660066;">target</span>.<span style="color: #660066;">tagName</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; sendAsyncMessage<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;click&quot;</span><span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
addMessageListener<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;alert&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>msg.<span style="color: #660066;">json</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</pre>
<h3>Process communication</h3>
<p>This diagram illustrates what the communication between all processes involved looks like (regarding our simple example).</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/processes1.png" rel="lightbox[286]"><img class="alignnone size-full wp-image-507" title="Process communication" src="http://timtaubert.de/wp-content/uploads/2011/08/processes1.png" alt="" width="1000" height="433" /></a></p>
<h2>Which parts of your project will be affected by e10s?</h2>
<h3>DOM Objects</h3>
<p>It&#8217;s no longer possible to work with or directly access DOM objects (window, document and normal DOM nodes) from the chrome process. As an example, you are not allowed to access a page&#8217;s content window through <strong>browser.contentWindow</strong>. You&#8217;ll have to send a message to a content script that does all the work for you. In content scripts, the &#8220;global variable&#8221; <strong>content</strong> is the DOM window of the page loaded in the browser.</p>
<h3>DOM Events</h3>
<p>DOMEvents are no longer propagated to the parent &lt;browser&gt; and you&#8217;re not able to call DOMElement.addEventListener(). Use <strong>addEventListener()</strong> in a content script and then send a message to a listener in the chrome process.</p>
<h3>DocShell</h3>
<p>The docShell is no longer accessible. It&#8217;s available as a &#8220;global variable&#8221; named <strong>docShell</strong> in content scripts.</p>
<h3>nsIWebProgress(Listener)</h3>
<p>If you still need to monitor a page&#8217;s web progress all you need is (surprise) a content script. This could look like the following:</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* content script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> ifaceReq <span style="color: #339933;">=</span> docShell.<span style="color: #660066;">QueryInterface</span><span style="color: #009900;">&#40;</span>Ci.<span style="color: #660066;">nsIInterfaceRequestor</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">let</span> webProgress <span style="color: #339933;">=</span> ifaceReq.<span style="color: #660066;">getInterface</span><span style="color: #009900;">&#40;</span>Ci.<span style="color: #660066;">nsIWebProgress</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">let</span> WebProgressListener <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> ... <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">let</span> mask <span style="color: #339933;">=</span> Ci.<span style="color: #660066;">nsIWebProgress</span>.<span style="color: #660066;">NOTIFY_STATE_ALL</span><span style="color: #339933;">;</span><br />
webProgress.<span style="color: #660066;">addProgressListener</span><span style="color: #009900;">&#40;</span>WebProgressListener<span style="color: #339933;">,</span> mask<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</pre>
<h3>nsIDOMWindowUtils</h3>
<p>The DOM utility interface is also no longer accessible. You still can retrieve it in a content script like this:</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* content script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> ifaceReq <span style="color: #339933;">=</span> content.<span style="color: #660066;">QueryInterface</span><span style="color: #009900;">&#40;</span>Ci.<span style="color: #660066;">nsIInterfaceRequestor</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">let</span> utils <span style="color: #339933;">=</span> ifaceReq.<span style="color: #660066;">getInterface</span><span style="color: #009900;">&#40;</span>Ci.<span style="color: #660066;">nsIDOMWindowUtils</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</pre>
<h2>Tips and hints</h2>
<h3>sendSyncMessage or sendAsyncMessage?</h3>
<p>Sending synchronous message is not allowed for chrome processes. Only content processes can block on the parent. In general you should always try to use<strong> sendAsyncMessage()</strong> to not block while waiting for the message to be processed. You should try to rewrite your code if it isn&#8217;t ready for asynchronous communication, yet. There are a few valid cases where a message needs to be sent synchronously &#8211; if you have one of those you should at least try to handle this message as quickly as possible to not block the content process longer than necessary.</p>
<h3>sendSyncMessage()</h3>
<p>If you use sendSyncMessage() then you should know that the response is an array of all values returned from each listener.</p>
<pre>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">/* chrome script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> mm <span style="color: #339933;">=</span> browser.<span style="color: #660066;">messageManager</span><span style="color: #339933;">;</span><br />
mm.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;mymessage&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #3366CC;">&quot;hello world&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
mm.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;mymessage&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #3366CC;">&quot;hello the 2nd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">/* content script */</span><br />
<span style="color: #003366; font-weight: bold;">let</span> results <span style="color: #339933;">=</span> sendSyncMessage<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;mymessage&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>foo<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;bar&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span>results<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// prints &quot;hello world&quot;</span><br />
<span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span>results<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// prints &quot;hello the 2nd&quot;</span></div></div>
</pre>
<h3>globalMessageManager.addFrameScript()</h3>
<p>Use this if you want a frame script to be attached to every existing tab/browser of every existing window out there. Set the second parameter, allowDelayedLoad, to true, to automatically load the desired frame script in newly created browsers/tabs (of possibly newly created windows) as well.</p>
<h3><strong>window.loadFrameScript()</strong></h3>
<p>The window-specific message manager has the same frame script loading behavior as the global one, but it will add your frame script to every browser in the given window, only.</p>
<h3>browser.loadFrameScript()</h3>
<p>If the second parameter, allowDelayedLoad, is false this method will add the frame script only if the browser is ready. If you set it to true and the browser isn&#8217;t ready, yet, the script will be added when it becomes ready.</p>
<h3>messageManager.addMessageListener()</h3>
<p>When a message from a content script is received the listeners attached via <strong>browser.addMessageListener()</strong> are called first, and then the ones added via <strong>window.addMessageListener()</strong>, then the ones via <strong>globalMessageManager.addEventListener()</strong>.</p>
<h3><strong>Message properties</strong></h3>
<p>The first argument passed to message listeners is the message they just received. This is an object with the following properties:</p>
<pre>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name &nbsp; - the name of the message<br />
json &nbsp; - the custom message data<br />
sync &nbsp; - false if the message was sent asynchronously<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(always false for messages from chrome scripts)<br />
target - the browser associated with the content that this<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;message came from</div></div>
</pre>
<h3><strong>Message name prefixes</strong></h3>
<p>At the beginning there won&#8217;t be many message users in the Mozilla code base and we should not start consolidating messages before the requirements of all those are fully fleshed out. So it&#8217;s better to be over-specific for now and name your messages like <strong>Project:click</strong> instead of just <strong>click</strong> to avoid conflicts.</p>
<h3>Conventions for frame scripts</h3>
<p>Frame scripts (or content scripts) should be stored in the same folder as the code that calls loadFrameScript() to load them. A good convention is to name them something like <strong>content-project.js</strong> or just <strong>content.js</strong>.</p>
<h2>Next steps</h2>
<p>Part two will address a more complex example. I&#8217;ll try to follow-up as soon as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2011/08/firefox-electrolysis-101-part-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>7 things (you may not know) about me</title>
		<link>http://timtaubert.de/2011/08/7-things-you-may-not-know-about-me/</link>
		<comments>http://timtaubert.de/2011/08/7-things-you-may-not-know-about-me/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 13:53:13 +0000</pubDate>
		<dc:creator>Tim Taubert</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://timtaubert.de/?p=285</guid>
		<description><![CDATA[My name is Tim Taubert (ttaubert on IRC and Twitter). I work as a Firefox Engineer for Mozilla, based in Berlin, Germany. Here are the rules for this particular meme: Link to your original tagger(s) and list these rules in (&#8230;)</p><p><a href="http://timtaubert.de/2011/08/7-things-you-may-not-know-about-me/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>My name is Tim Taubert (ttaubert on IRC and Twitter). I work as a Firefox Engineer for Mozilla, based in Berlin, Germany.</p>
<p><strong>Here are the rules for this particular meme:</strong></p>
<p><em>Link to your original tagger(s) and list these rules in your post. Share seven facts about yourself in the post. Tag seven people at the end of your post by leaving their names and the links to their blogs. Let them know they’ve been tagged.</em></p>
<p>I wasn&#8217;t tagged by anyone but after reading <a href="http://msujaws.wordpress.com/2011/07/21/seven-things-you-may-or-may-not-have-wanted-to-know-about-me/">Jared Wein&#8217;s blog post</a> I felt inspired to do the same and keep the idea alive.</p>
<p><strong>These are my seven things:</strong></p>
<p><strong>1)</strong> At the age of sixteen I started to play multiple instruments, including guitar, piano and drums. I may not be the best musician out there and have quite a hard time reading music but it&#8217;s a lot of fun anyway. My current band is called &#8220;Rabbit Wrong&#8221; (which is easier to understand with a German background) and I play a white and adorable Gibson Studio connected to an Engl Screamer.</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/IMG_5826.jpg" rel="lightbox[285]"><img class="alignnone size-medium wp-image-304" title="Engl Screamer" src="http://timtaubert.de/wp-content/uploads/2011/08/IMG_5826-300x199.jpg" alt="" width="180" height="119" /></a></p>
<p><strong>2)</strong> I have always been a big fan of guinea pigs. Three of them live at my home and they are called Charlie, Whiskey and Sydney (left to right).</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/guinea_pigs2.jpg" rel="lightbox[285]"><img class="alignnone size-medium wp-image-301" title="my three guinea pigs" src="http://timtaubert.de/wp-content/uploads/2011/08/guinea_pigs2-300x168.jpg" alt="" width="180" height="101" /></a></p>
<p><strong>3)</strong> Back in 2008 I managed to contribute ~12 lines of code to the Linux kernel 2.6.25 to add support for my newly bought USB TV adapter.</p>
<p>Patch: <a href="http://linuxtv.org/pipermail/linux-dvb/2008-January/022742.html">http://linuxtv.org/pipermail/linux-dvb/2008-January/022742.html</a><br />
Changelog: <a href="http://lwn.net/Articles/266704/">http://lwn.net/Articles/266704/</a></p>
<p><strong>4)</strong> All electronic devices I own (including TV, mobile phones, a tablet and laptops) are set to English language (hint, I&#8217;m German). I always loved everything about English &#8211; I watch movies and sitcoms almost exclusively in English and guess which language all my books are written in.</p>
<p><strong>5) </strong>My first car about 4-5 yours ago was a sixteen years old Renault Rapid. It was assembled out of three wrecks of the same type. I used to call it the &#8220;death mobile&#8221; because it was really old and rusty, also the brakes didn&#8217;t work very well.</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/43630007.jpg" rel="lightbox[285]"><img class="alignnone size-medium wp-image-307" title="the &quot;death mobile&quot;" src="http://timtaubert.de/wp-content/uploads/2011/08/43630007-300x225.jpg" alt="" width="180" height="135" /></a></p>
<p><strong>6)</strong> I&#8217;ve been a vegetarian for almost two years now and I feel quite good about it. I&#8217;m not one of those who tries to talk you into that but I&#8217;m much more comfortable about my own way of life since then. And that&#8217;s what counts in the first place.</p>
<p><strong>7)</strong> One of my first employers was an agency for digital communication in Berlin. They were apparently very pleased with my work and decided to introduce the &#8220;Tim Taubert award&#8221; that is bestowed on every Christmas staff party. There have been three award winners so far, me being the first one :)</p>
<p><a href="http://timtaubert.de/wp-content/uploads/2011/08/IMG_0073.jpg" rel="lightbox[285]"><img class="alignnone size-medium wp-image-310" title="the &quot;Tim Taubert&quot; award" src="http://timtaubert.de/wp-content/uploads/2011/08/IMG_0073-300x225.jpg" alt="" width="180" height="135" /></a></p>
<p><strong>These are the people I&#8217;d like to tag:</strong></p>
<p><em>(Just because they&#8217;re all truly awesome and there&#8217;s only place for seven of them.)</em></p>
<p>Frank Yan &#8211; <a href="http://frankyan.com/">http://frankyan.com/</a><br />
Ian Gilman &#8211; <a href="http://iangilman.com/">http://iangilman.com/</a><br />
Rob Campbell &#8211; <a href="http://antennasoft.net/robcee/">http://antennasoft.net/robcee/</a><br />
Dietrich Ayala &#8211; <a href="http://autonome.wordpress.com/">http://autonome.wordpress.com/</a><br />
Marco Bonardo &#8211; <a href="http://blog.bonardo.net/">http://blog.bonardo.net/</a><br />
Hernán Colmeiro &#8211; <a href="http://peregrinogris.com.ar/">http://peregrinogris.com.ar/</a><br />
Michael<strong> </strong>Yoshitaka Erlewine &#8211; <a href="http://mitcho.com/">http://mitcho.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://timtaubert.de/2011/08/7-things-you-may-not-know-about-me/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

