<?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>Ted's Mozilla Blog</title>
	<atom:link href="http://blog.mozilla.org/ted/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.org/ted</link>
	<description>If this were a diary it would have a unicorn on the cover, because unicorns are awesome.</description>
	<lastBuildDate>Thu, 07 Mar 2013 17:06:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Gregory Szorc is now the Build Config module owner</title>
		<link>http://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/</link>
		<comments>http://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 17:06:34 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[build system]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=114</guid>
		<description><![CDATA[Effective immediately Gregory Szorc (gps) is now the Build Config module owner. Greg joins a storied list of module owners who touched the build system too much and got stuck owning it until they could find someone else to pawn it off on. Greg has been leading the way technically in build system work for [...]]]></description>
				<content:encoded><![CDATA[<p>Effective immediately <a href="http://gregoryszorc.com/">Gregory Szorc</a> (<a href="https://twitter.com/indygreg">gps</a>) is now the Build Config module<br />
owner. Greg joins a storied list of module owners who touched the build<br />
system too much and got stuck owning it until they could find someone<br />
else to pawn it off on.</p>
<p>Greg has been leading the way technically in build system work for a<br />
while now, so in my mind this is more of a formality than anything else.<br />
You have undoubtedly already interacted with the great work he&#8217;s been<br />
doing: <a href="http://gregoryszorc.com/blog/2012/09/26/mach-has-landed/">mach</a>, the fantastic new front-end driver for the build system, or<br />
<a href="http://gregoryszorc.com/blog/2013/02/28/moz.build-files-and-the-firefox-build-system/">moz.build</a>, our Makefile replacement for build system data. I expect that<br />
this will continue, so making him module owner was an easy decision for me.</p>
<p>I will continue to serve as a peer of the Build config module, but Greg<br />
will now have final say on all questions regarding build system work.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2013/03/07/gregory-szorc-is-now-the-build-config-module-owner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prettier Mercurial output</title>
		<link>http://blog.mozilla.org/ted/2012/08/20/prettier-mercurial-output/</link>
		<comments>http://blog.mozilla.org/ted/2012/08/20/prettier-mercurial-output/#comments</comments>
		<pubDate>Mon, 20 Aug 2012 19:41:57 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=108</guid>
		<description><![CDATA[I don&#8217;t use git on a daily basis, but I&#8217;m a fan of how its output is both colorful and run through a pager (like less) if necessary. As it turns out, Mercurial (which I do use daily) ships with all the functionality you need to replicate this behavior, it&#8217;s just not enabled by default. [...]]]></description>
				<content:encoded><![CDATA[<p>I don&#8217;t use git on a daily basis, but I&#8217;m a fan of how its output is both colorful and run through a pager (like less) if necessary. As it turns out, Mercurial (which I do use daily) ships with all the functionality you need to replicate this behavior, it&#8217;s just not enabled by default. You need to enable the <a href="http://mercurial.selenic.com/wiki/ColorExtension">color</a> and <a href="http://mercurial.selenic.com/wiki/PagerExtension">pager</a> extensions (which ship with Mercurial), so just a few lines in your ~/.hgrc will get you there:</p>
<pre>[extensions]
color =
pager =</pre>
<pre>[pager]
pager = LESS=FRSXQ less
quiet = True</pre>
<p>The pager configuration simply makes less handle the colored output properly, and also behave like cat if the output fits on the screen.</p>
<p>I frequently find myself using <em>hg export</em> to view the contents of patches in my mq, so I also added an alias that I could use instead to get nice colored and pagered diffs:</p>
<pre>[alias]
show = log --patch --verbose --rev</pre>
<pre>[pager]
attend = diff,status,log,qdiff,blame,annotate,pdiff,glog,show</pre>
<p>The pager configuration is necessary because by default pager only works on a whitelist of commands, so you need to add this new show alias. Then you can simply use it like <em>hg show tip</em> to view the contents of your topmost mq patch.</p>
<p>I&#8217;ve only tested this configuration on Ubuntu 12.04 with Mercurial 2.0.2, so I&#8217;d be interested to hear if it works elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2012/08/20/prettier-mercurial-output/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Baby #2</title>
		<link>http://blog.mozilla.org/ted/2012/02/29/baby-2/</link>
		<comments>http://blog.mozilla.org/ted/2012/02/29/baby-2/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 23:17:35 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=109</guid>
		<description><![CDATA[Just a quick note for those of you who haven&#8217;t already seen it on Twitter or Facebook. On Thursday, February 23rd at 2:01 AM my wife and I welcomed our second child into the world. He&#8217;s a healthy baby boy: Michael Thomas Mielczarek. We currently have our hands full sorting out how to raise both [...]]]></description>
				<content:encoded><![CDATA[<p>Just a quick note for those of you who haven&#8217;t already seen it on Twitter or Facebook. On Thursday, February 23rd at 2:01 AM my wife and I welcomed our second child into the world. He&#8217;s a healthy baby boy: Michael Thomas Mielczarek. We currently have our hands full sorting out how to raise both a toddler and a newborn, so I&#8217;ll be mostly offline for another week still.</p>
<p><a href="http://www.flickr.com/photos/49243838@N00/6783947830/"><img class="alignright" title="Michael Thomas Mielczarek" src="http://farm8.staticflickr.com/7041/6783947830_c94c3634b7.jpg" alt="Our baby boy, Michael Thomas Mielczarek" width="500" height="333" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2012/02/29/baby-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Firefox Mobile on ARMv6 processors</title>
		<link>http://blog.mozilla.org/ted/2012/02/17/firefox-mobile-on-armv6-processors-2/</link>
		<comments>http://blog.mozilla.org/ted/2012/02/17/firefox-mobile-on-armv6-processors-2/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 18:56:24 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[firefox]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=94</guid>
		<description><![CDATA[Most smartphones use ARM processors. Much like how most PCs use x86 processors, for various reasons ARM has become the CPU of choice for mobile devices. Similar to x86, there are different versions of ARM processors that support different features. One of the biggest differences is which instruction set is supported. Instructions are the smallest [...]]]></description>
				<content:encoded><![CDATA[<p>Most smartphones use <a href="http://en.wikipedia.org/wiki/ARM_architecture">ARM</a> processors. Much like how most PCs use <a href="http://en.wikipedia.org/wiki/X86">x86</a> processors, for various reasons ARM has become the CPU of choice for mobile devices. Similar to x86, there are different versions of ARM processors that support different features. One of the biggest differences is which <a href="http://en.wikipedia.org/wiki/Instruction_set"><em>instruction set</em></a> is supported. <em>Instructions</em> are the smallest units of what a processor can do, and an <em>instruction set</em> are the particular units that a processor knows how to run. For Intel, instruction sets were changed when they went from the <a href="http://en.wikipedia.org/wiki/Intel_80386">386</a> to the <a href="http://en.wikipedia.org/wiki/Intel_80486">486</a> to the <a href="http://en.wikipedia.org/wiki/Pentium">Pentium</a> and so on. For ARM, the instruction sets are numbered, with the most current one in use being ARMv7 (with ARMv8 in development). Confusingly, ARM&#8217;s processors themselves have similar naming, with the <a href="http://en.wikipedia.org/wiki/ARM11">ARM11</a> being the generation that supports the ARMv6 instruction set, and ARM Cortex being the generation that supports the ARMv7 instruction set. All high-end smartphones that are currently shipping use processors that support the ARMv7 instruction set. The <a href="http://www.apple.com/iphone/">Apple iPhone 4S</a>, Samsung <a href="http://www.samsung.com/global/microsite/galaxys2/html/">Galaxy S2</a> and <a href="http://www.google.com/nexus/">Galaxy Nexus</a>, as well as others all come with similar processors. They&#8217;re all similarly fast as processors in smartphones go, and ARMv7 contains lots of features that allow programs to run very quickly.</p>
<p>How is this relevant to <a href="http://www.mozilla.org/en-US/m/">Firefox Mobile</a>? Currently the builds we&#8217;re producing only run on processors that support ARMv7. This is partially because we&#8217;ve been working on performance for quite a while, and it&#8217;s much harder to get acceptable performance on a slower processor, so targeting only faster processors makes sense. (This is the same reason that <a href="https://market.android.com/details?id=com.android.chrome&amp;hl=en">Chrome for Android</a> only runs on Android phones running the latest version of Android.) It&#8217;s also partially because all modern JavaScript engines ship with a <a title="just-in-time compiler" href="http://en.wikipedia.org/wiki/Just-in-time_compilation">JIT</a>, which is a highly specialized piece of code that needs to know intimate details about the type of processor it&#8217;s running on. We used to produce additional builds that supported ARMv6 alongside our ARMv7 builds, but we saw lots of ARMv6-specific crashes in our crash reporting system, and we didn&#8217;t have the resources to tackle them all. Additionally, we were focused on making Firefox Mobile run well on ARMv7 processors; so making it run well on ARMv6 seemed like a stretch at the time.</p>
<p>Coming back to the present, we&#8217;ve got a revitalized mobile team working on a revamped Firefox Mobile that&#8217;s much faster than previous versions, so the performance target seems much more within reach. We also had people attending MozCamps and other Mozilla events across the globe last year. <a href="http://autonome.wordpress.com/">Dietrich</a> <a href="http://autonome.wordpress.com/2011/04/29/trip-log-mozilla-kenya/">visited Nairobi for some Mozilla Kenya events</a> and found that the most widely used Android phones in Kenya are all ARMv6 devices. In addition, there are lots of Android phones being sold in China that are ARMv6. Even in the USA there are some low-end Android devices being released that are still ARMv6, like the <a href="http://www.gsmarena.com/lg_optimus_hub-4157.php">LG Optimus Hub</a>, which shipped in October of 2011. As of that date roughly 58% of the Android install base was comprised of ARMv6 phones. That&#8217;s a huge segment of the market that we&#8217;re not supporting.</p>
<p>Because of this, during the Firefox Mobile revamp <a href="http://dougturner.wordpress.com/">Doug</a> roped me in and asked if I would look into getting our ARMv6 builds back up and running. I started working on it figuring it wouldn&#8217;t be too bad since we used to produce builds. As it turns out, I was wrong. We managed to break things in quite a few ways since we disabled those builds. A few of them were simple fixes in our build configuration (although one of those took <a href="http://glandium.org/">Mike Hommey</a> and I a solid week of debugging to track down), but I also ran into a few problems with our custom linker. Firefox Mobile ships with a replacement for the system dynamic linker on Android. It&#8217;s pretty complicated, but this is the reason that <a href="https://twitter.com/#!/tarasglek/status/167303241892237312">Firefox only takes up about 15MB, whereas Chrome for Android takes up nearly 50MB</a> after installation. Being a complicated piece of code there were some hard-to-diagnose bugs in it. Thankfully, with some input from <a href="http://forums.arm.com/index.php?/user/105519-arm-jacob/page__tab__aboutme">Jacob Bramley</a> from ARM we were able to track down the remaining problem and get builds working again.</p>
<p>With all the setbacks and other issues it&#8217;s not unreasonable to ask why we&#8217;re doing this. Clearly this isn&#8217;t the end of the process by any means. We still have to get automated builds back up and running on our build farm. We will undoubtedly have to shake out more ARMv6-specific bugs in our JavaScript engine and elsewhere. We&#8217;ll almost assuredly have to do some work to make performance acceptable. It&#8217;s a lot of work and it will take time, but this seems like the right thing to do given the number of users we can reach. You can <a title="Get ARMv6 builds working again" href="https://bugzilla.mozilla.org/show_bug.cgi?id=697205">follow along in Bugzilla</a> if you&#8217;re interested in this work.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2012/02/17/firefox-mobile-on-armv6-processors-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Blogging catch-up</title>
		<link>http://blog.mozilla.org/ted/2012/02/09/blogging-catch-up/</link>
		<comments>http://blog.mozilla.org/ted/2012/02/09/blogging-catch-up/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 14:12:10 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=91</guid>
		<description><![CDATA[Apparently I haven&#8217;t written anything in this blog for over seven months! In my defense, I&#8217;ve been really busy both at Mozilla and in my personal life. I have quite a few things that I&#8217;ve been working on, so I&#8217;m going to try to catch up and post about a few of them in the [...]]]></description>
				<content:encoded><![CDATA[<p>Apparently I haven&#8217;t written anything in this blog for over seven months! In my defense, I&#8217;ve been really busy both at Mozilla and in my personal life. I have quite a few things that I&#8217;ve been working on, so I&#8217;m going to try to catch up and post about a few of them in the next couple of days. Expect to see posts about the <a href="https://wiki.mozilla.org/GamepadAPI">Gamepad API</a>, <a title="Bug 697205 - (armv6) Get ARMv6 builds working again" href="https://bugzilla.mozilla.org/show_bug.cgi?id=armv6">ARMv6 support</a> for <a href="https://wiki.mozilla.org/Mobile/Fennec">Firefox Mobile</a>, and the <a title="Bug 643692 - Implement GYP generator generating Mozilla Makefiles" href="https://bugzilla.mozilla.org/show_bug.cgi?id=643692">build</a> <a title="Bug 688187 - Build Makefile.in's for major WebRTC modules" href="https://bugzilla.mozilla.org/show_bug.cgi?id=688187">hackery</a> that I did for our upcoming <a href="http://www.webrtc.org/">WebRTC</a> support.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2012/02/09/blogging-catch-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xpcshell manifests, phase 2</title>
		<link>http://blog.mozilla.org/ted/2011/06/29/xpcshell-manifests-phase-2/</link>
		<comments>http://blog.mozilla.org/ted/2011/06/29/xpcshell-manifests-phase-2/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 17:30:48 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[tests]]></category>
		<category><![CDATA[tinderbox]]></category>
		<category><![CDATA[manifests]]></category>
		<category><![CDATA[xpcshell]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=84</guid>
		<description><![CDATA[Recently we implemented a manifest format for xpcshell unit tests (with Joel Maher doing the lion&#8217;s share of the work). After that work landed, we realized there were some things missing from our initial design, so we set out to revamp a few things to make it easier to write useful manifests. We decided to [...]]]></description>
				<content:encoded><![CDATA[<p>Recently we <a title="Bug 616999 - switch to a manifest format for xpcshell instead of walking directories" href="https://bugzilla.mozilla.org/show_bug.cgi?id=616999">implemented</a> a <a href="https://elvis314.wordpress.com/2011/05/20/converting-xpcshell-from-listing-directories-to-a-manifest/">manifest format</a> for <a title="Writing xpcshell-based unit tests" href="https://developer.mozilla.org/en/Writing_xpcshell-based_unit_tests">xpcshell unit tests</a> (with <a href="https://elvis314.wordpress.com">Joel Maher</a> doing the lion&#8217;s share of the work). After that work landed, we realized there were some things missing from our initial design, so we set out to revamp a few things to make it easier to write useful manifests.</p>
<p>We decided to make the manifests support boolean expressions, similar to what <a title="Creating reftest-based unit tests" href="https://developer.mozilla.org/en/Creating_reftest-based_unit_tests">reftest</a> manifests allow, except with a restricted grammar, and not &#8220;all of JavaScript&#8221;. To make this useful, we had to offer a set of values to test, so <a href="http://k0s.org/">Jeff Hammel</a> buckled down and <a title="Bug 606524 - new package: MozInfo" href="https://bugzilla.mozilla.org/show_bug.cgi?id=606524">wrote</a> a Python module called <a href="http://k0s.org/mozilla/hg/mozinfo/">mozinfo</a> that had been in discussion for a long time. I <a title="Bug 663180 - Make configure write mozinfo JSON data about build configuration for test harnesses to use" href="https://bugzilla.mozilla.org/show_bug.cgi?id=663180">wrote</a> a <a title="Bug 664197 - integrate mozinfo + new manifest parser work into xpcshell harness" href="https://bugzilla.mozilla.org/show_bug.cgi?id=664197">few bits</a> to hook this all up between the build system and the xpcshell test harness, and it <a href="http://tbpl.mozilla.org/?rev=5974e4cb3fc2">all landed on mozilla-central</a> this morning.</p>
<p>I&#8217;ll update the <a href="https://developer.mozilla.org/en/Writing_xpcshell-based_unit_tests">MDN documentation</a> later today, but for a preview, a sample manifest entry might look like:</p>
<pre>[test_foo.js]
skip-if = os == 'win' || os == 'linux'</pre>
<p>If you look in your object directory in a build containing these patches (or in the xpcshell directory of a test package from a tinderbox build), you&#8217;ll find a mozinfo.json, which is where most of the values you can use in these expressions come from. For example, the mozinfo.json for my 64-bit Linux build looks like:</p>
<pre>{'os': 'linux', 'toolkit': 'gtk2', 'crashreporter': false, 'debug': false, 'bits': 64, 'processor': 'x86_64'}</pre>
<p>You can annotate tests with &#8220;skip-if, run-if and fail-if&#8221; conditions currently. &#8220;skip-if&#8221; indicates that a test should not be run if the condition evaluates to true, &#8220;run-if&#8221; indicates that a test should only be run if the condition evaluates to true and &#8220;fail-if&#8221; indicates that the test is known to fail if the condition is true. Tests marked fail-if will produce TEST-KNOWN-FAIL output if they fail, and TEST-UNEXPECTED-PASS (which is treated as a failure) if they pass.</p>
<p>Hopefully this work will enable developers to more easily work with xpcshell tests. We&#8217;d appreciate any feedback you have on these changes!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2011/06/29/xpcshell-manifests-phase-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Measuring UI Responsiveness</title>
		<link>http://blog.mozilla.org/ted/2011/06/27/measuring-ui-responsiveness/</link>
		<comments>http://blog.mozilla.org/ted/2011/06/27/measuring-ui-responsiveness/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 14:50:47 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[firefox]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[responsiveness]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=80</guid>
		<description><![CDATA[One of the goals for the Firefox team is to ensure that the user interface remains responsive to input at all times. Clearly a responsive interface is incredibly important to making the browser a useful application, but how do we measure &#8220;responsiveness&#8221;? Dietrich has done some work on this, writing an add-on that measures the [...]]]></description>
				<content:encoded><![CDATA[<p>One of the goals for the Firefox team is to <a href="https://wiki.mozilla.org/Firefox/Features/50ms_ASSERT">ensure that the user interface remains responsive</a> to input at all times. Clearly a responsive interface is incredibly important to making the browser a useful application, but how do we measure &#8220;responsiveness&#8221;?</p>
<p><a href="https://twitter.com/#!/dietrich/">Dietrich</a> has done some work on this, <a href="https://github.com/autonome/about-response">writing an add-on</a> that measures the time that various UI actions take. This covers the direct case, where a user initiates an action and expects a response in a reasonable amount of time. Clearly we want to make sure that individual actions don&#8217;t take an extraordinary amount of time.</p>
<p>I took the opposite tack, with an eye on being able to detect when the application was not responsive to user input regardless of what actions the user was taking. Building on some work by <a href="http://blog.mozilla.org/cjones/">Chris Jones</a> and <a href="http://mozakai.blogspot.com/">Alon Zakai</a>, I <a title="Bug 606574 - Add event loop responsiveness instrumentation" href="https://bugzilla.mozilla.org/show_bug.cgi?id=606574">wrote some code</a> that instruments the main thread event loop to find out how long it takes to respond to events, which ought to be a reasonable proxy for measuring responsiveness. When the instrumentation detects that the event loop takes too long to respond (more than 50 milliseconds, currently) it writes a data point to a log giving the current timestamp and the amount of time the event loop was not responsive.</p>
<p>When I implemented this I had my eye on <a title="Bug 631571 - Measure browser responsiveness in Talos" href="https://bugzilla.mozilla.org/show_bug.cgi?id=631571">Talos integration</a>, where we could run the browser through some automated UI tests with this instrumentation enabled, and then correlate &#8220;UI actions&#8221; with &#8220;unresponsive periods&#8221; and ensure that the browser did not become unresponsive during those actions. Talos integration has been shifted off as a longer-term goal, with the more immediate goal being &#8220;find UI actions that are the worst offenders of unresponsiveness&#8221;. To that end we&#8217;ve filed some other bugs about<a title="Bug 653701 - Figure out a way to correlate JavaScript execution with event loop non-responsiveness" href="https://bugzilla.mozilla.org/show_bug.cgi?id=653701"> correlating this unresponsiveness data with JavaScript execution</a>, and <a title="Bug 653703 - Correlate C++ profiling with event loop non-responsiveness" href="https://bugzilla.mozilla.org/show_bug.cgi?id=653703">correlating the data with C++ execution</a>. If you&#8217;ve got any ideas please feel free to contribute to those bugs!</p>
<p>If you&#8217;d like to try out the responsiveness instrumentation I implemented, it landed on mozilla-central a while ago, and there&#8217;s <a href="http://mxr.mozilla.org/mozilla-central/source/toolkit/xre/EventTracer.cpp#38">some reasonably complete documentation in the source code</a>. There are implementations for Windows, Linux/GTK2 and OS X currently. (And a patch for <a title="Bug 633239 - event loop responsiveness for Android" href="https://bugzilla.mozilla.org/show_bug.cgi?id=633239">an Android implementation in a bug</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2011/06/27/measuring-ui-responsiveness/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why it&#8217;s hard to ship non-crashy software</title>
		<link>http://blog.mozilla.org/ted/2011/06/14/why-its-hard-to-ship-non-crashy-software/</link>
		<comments>http://blog.mozilla.org/ted/2011/06/14/why-its-hard-to-ship-non-crashy-software/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 13:28:50 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[firefox]]></category>
		<category><![CDATA[crashes]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=73</guid>
		<description><![CDATA[I was just looking at some data produced from our crash reporting system, and I continue to be amazed at the amount of third-party code that gets loaded into Firefox on Windows. That data file contains a list of all unique binary files (EXE or DLL) that were listed in Windows crash reports in a [...]]]></description>
				<content:encoded><![CDATA[<p>I was just looking at <a title="Warning: 2MB file" href="https://crash-analysis.mozilla.com/crash_analysis/modulelist/20110613-modulelist.txt">some data</a> produced from our <a title="crash-stats.mozilla.com, running the Socorro webapp" href="https://crash-stats.mozilla.com/products/Firefox">crash reporting system</a>, and I continue to be amazed at the amount of third-party code that gets loaded into Firefox on Windows. That data file contains a list of all unique binary files (EXE or DLL) that were listed in Windows crash reports in a single day. A quick look at it shows:</p>
<p>$ cut -f1 -d, 20110613-modulelist.txt  | sort -u | wc -l<br />
10385</p>
<p>There are over 10,000 unique filenames in a single day&#8217;s worth of crash reports. That sure seems like a lot! Now, certainly, a lot of these modules look like they&#8217;ve been randomly named, which probably indicates that they&#8217;re some kind of virus (like <em>0eYZf0QFDSGEAbTRWD3F.dll</em>, for example), so those are likely to inflate the number. There&#8217;s <a title="Bug 634726 - add md5 hash of .dll's when gathering crash report, and expose those in crash reports on socorro" href="https://bugzilla.mozilla.org/show_bug.cgi?id=634726">a bug on file</a> asking that we collect MD5 hashes of every DLL in our crash reports so we could more easily detect malware/virus DLLs that use these tactics, as well as integrate with lists of known malware and viruses from antivirus vendors.</p>
<p>In the past, we have had problems with <a title="Adobe Flash Player" href="http://www.adobe.com/products/flashplayer/">plugins</a> and <a title="Skype Click and Call" href="http://www.skype.com/intl/en/get-skype/on-your-computer/click-and-call/">extensions</a> causing crashes for many Firefox users. We have ways of mitigating those through <a href="http://www.mozilla.com/en-US/blocklist/">blacklisting</a>. We can also <a href="https://wiki.mozilla.org/Firefox/3.6/DLL_Blocking">blacklist specific DLLs</a> from loading in the Firefox process, which is not used as often because it&#8217;s harder to get right and provides little feedback to users about what&#8217;s been disabled. However, given the sheer number of possible things that can be loaded in our process, it&#8217;s unlikely that we&#8217;ll ever be able to block all software that causes crashes for users. This is unfortunate, because any one of these pieces of software can cause a crash in Firefox, and all the user sees is &#8220;<a title="We're Sorry..." href="http://support.mozilla.com/media/uploads/gallery/images/send_crash.png">Firefox crashed</a>&#8220;. I suppose we now know how Microsoft feels when users blame Windows for crashes caused by faulty drivers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2011/06/14/why-its-hard-to-ship-non-crashy-software/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Quick QR codes for URLs from your browser</title>
		<link>http://blog.mozilla.org/ted/2010/11/23/quick-qr-codes-for-urls-from-your-browser/</link>
		<comments>http://blog.mozilla.org/ted/2010/11/23/quick-qr-codes-for-urls-from-your-browser/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 16:19:50 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=67</guid>
		<description><![CDATA[I&#8217;ve been doing some work on Firefox Mobile lately, and I keep winding up in situations where I have a URL that I want to load on my mobile device. It&#8217;s a pain to type URLs in with a virtual keyboard (or a tiny keyboard), so people have taken to using QR codes to encode [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been doing some work on <a href="http://www.mozilla.com/en-US/mobile/">Firefox Mobile</a> lately, and I keep winding up in situations where I have a URL that I want to load on my mobile device. It&#8217;s a pain to type URLs in with a virtual keyboard (or a tiny keyboard), so people have taken to using <a href="http://en.wikipedia.org/wiki/QR_Code">QR codes</a> to encode them, and there are lots of mobile apps that can read the codes and load the URL contained within. Conveniently, the<a href="http://code.google.com/apis/chart/"> Google Charts API</a> supports generating QR codes, so I threw together a <a href="http://people.mozilla.com/~tmielczarek/qr-bookmarklet.html">tiny bookmarklet</a> that generates a QR code of the page you&#8217;re currently viewing. <a href="http://people.mozilla.com/~tmielczarek/qr-bookmarklet.html">Go to this page</a> and drag it to your bookmarks toolbar to use it, then just click it whenever you&#8217;re viewing a URL that you need to view on your device. I&#8217;ve been using <a href="http://www.androlib.com/android.application.com-google-zxing-client-android-xzA.aspx">Barcode Scanner</a> on Android to read them, and it works pretty well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2010/11/23/quick-qr-codes-for-urls-from-your-browser/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>bzexport: a Mercurial extension</title>
		<link>http://blog.mozilla.org/ted/2010/09/07/bzexport-a-mercurial-extension/</link>
		<comments>http://blog.mozilla.org/ted/2010/09/07/bzexport-a-mercurial-extension/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 15:18:51 +0000</pubDate>
		<dc:creator>Ted Mielczarek</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://blog.mozilla.org/ted/?p=63</guid>
		<description><![CDATA[Last week I managed to find myself a little bit of time for a project I had been meaning to get to: bzexport. bzexport is a Mercurial extension that allows you to attach patches from your Mercurial patch queue to bugzilla from the Mercurial command line. It&#8217;s the obvious companion to the qimportbz extension. You [...]]]></description>
				<content:encoded><![CDATA[<p>Last week I managed to find myself a little bit of time for a project I had been meaning to get to: <a title="bzexport Mercurial repository" href="http://hg.mozilla.org/users/tmielczarek_mozilla.com/bzexport/">bzexport</a>. bzexport is a <a title="Mercurial SCM" href="http://mercurial.selenic.com/wiki/TransplantExtension">Mercurial</a> extension that allows you to attach patches from your <a href="https://developer.mozilla.org/en/Mercurial_Queues">Mercurial patch queue</a> to <a href="https://bugzilla.mozilla.org/">bugzilla</a> from the Mercurial command line. It&#8217;s the obvious companion to the <a href="http://robarnold.org/hg-qimport-my-bugzilla-patch-redux/">qimportbz</a> <a href="http://hg.mozilla.org/users/robarnold_cmu.edu/qimportbz">extension</a>. You can read the <a title="bzexport README" href="http://hg.mozilla.org/users/tmielczarek_mozilla.com/bzexport/file/tip/README">README</a> for details on installing and using the extension, but the short form is:</p>
<pre>hg bzexport [REV] [BUG]</pre>
<p>where REV is the name of a currently applied patch from your queue, and BUG is a bug number to attach it to. Of course, the extension is smarter than just that, and if you leave off those parameters it will default to working on the topmost patch in your queue, and it will attempt to deduce the bug number from the commit message in the patch. (Standard notation used at Mozilla should work, i.e. &#8220;bug 12345 &#8211; some text&#8221;, &#8220;b=12345 some text&#8221; etc.)</p>
<p>bzexport attempts to be clever and borrow your Bugzilla login cookies from your default Firefox profile so that you don&#8217;t have to provide authentication details. This does not currently work on the Mercurial shipped with MozillaBuild, so you&#8217;ll have to provide your username and password in your .hgrc as described in the README if you intend to use it under MozillaBuild&#8217;s hg.</p>
<p>bzexport relies on <a href="http://weblogs.mozillazine.org/gerv/">Gerv</a>&#8216;s excellent <a href="https://wiki.mozilla.org/Bugzilla:REST_API">BzAPI</a>, so hats off to Gerv for that! Also, patches for additional functionality are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.org/ted/2010/09/07/bzexport-a-mercurial-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
