<?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>Saturn Valley</title>
	<atom:link href="http://blog.mozilla.com/adw/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.com/adw</link>
	<description></description>
	<lastBuildDate>Sat, 21 Nov 2009 06:22:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Status update: November 20, 2009</title>
		<link>http://blog.mozilla.com/adw/2009/11/20/status-update-november-20-2009/</link>
		<comments>http://blog.mozilla.com/adw/2009/11/20/status-update-november-20-2009/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 06:22:39 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=130</guid>
		<description><![CDATA[Made some progress on async Places containers.  After last week, decided to think small and focus on moving sorting of folder node children to SQL.  Spun bug 530236, with a WIP patch, from bug 499985 to track this work.
Biggest snag so far is figuring out how to either do nsNavHistoryContainerResultNode::FillStats&#8217;s work inside the [...]]]></description>
			<content:encoded><![CDATA[<p>Made some progress on <a href="https://wiki.mozilla.org/Firefox/Projects/Async_Places_containers">async Places containers</a>.  After last week, decided to think small and focus on moving sorting of folder node children to SQL.  Spun <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=530236">bug 530236</a>, with a WIP patch, from <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=499985">bug 499985</a> to track this work.</p>
<p>Biggest snag so far is figuring out how to either do <a href="http://mxr.mozilla.org/mozilla-central/ident?i=FillStats"><tt>nsNavHistoryContainerResultNode::FillStats</tt></a>&#8217;s work inside the database, rather than C++, or avoid the work altogether.  <tt>FillStats</tt> recursively calculates a couple of members of a node and its descendants, and these members are then used to subsequently sort the children, if the selected sort requires those members.</p>
<p>Also filed a couple of bugs for tracking work on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=523524">3.7&#8217;s new Places UI</a>:</p>
<ul>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=529597">Bug 529597</a>: Places protocol handler</li>
<li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=529605">Bug 529605</a>: Places data should be visible in content</li>
</ul>
<p>Wanted to work on the former this week but just didn&#8217;t get around to it.</p>
<p>And all the while I wonder, do people still use bookmarks in Firefox?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/11/20/status-update-november-20-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status update: November 13, 2009</title>
		<link>http://blog.mozilla.com/adw/2009/11/13/status-update-november-13-2009/</link>
		<comments>http://blog.mozilla.com/adw/2009/11/13/status-update-november-13-2009/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 05:09:46 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=124</guid>
		<description><![CDATA[My patch for bug 506814 landed.  Thanks, Josh and Dao.
Created a new project, async Places containers, which is the topic of the remainder of this post.
Spent time thinking about a Storage &#8220;live view&#8221; interface, mocked it up, talked to sdwilsh about it.  The idea was a live view, where modifications to the view&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>My patch for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=506814">bug 506814</a> landed.  Thanks, Josh and Dao.</p>
<p>Created a new project, <a href="https://wiki.mozilla.org/Firefox/Projects/Async_Places_containers">async Places containers</a>, which is the topic of the remainder of this post.</p>
<p>Spent time thinking about a Storage &#8220;live view&#8221; interface, mocked it up, talked to sdwilsh about it.  The idea was a live view, where modifications to the view&#8217;s underlying data would automatically trigger a view refresh.  The motivation was the fact that Places query results now (well, will&#8212;<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=499985">bug 499985</a>) use the same collations in two locations: in the database on initialization (which makes possible APIs that return data in async batches), and in code when changes occur to the results.  That means duplicate collation code in Storage and Places, and the collations used by each must be equivalent.  But if there were such a thing as a generalized live view, it could all be handled by Storage.</p>
<p>However, I realized it&#8217;s not possible to in general and in constant time determine whether an arbitrary change to the database occurred within a given view.  In the current code it&#8217;s O(1) to do this check against a list of query results exactly because a list of query results is not generalized.  So I dropped this idea.</p>
<p>The problem of duplicate collations remains, and now I&#8217;m thinking of creating temp tables in Places code to store query results instead of the arrays of nodes it currently uses.  That way Storage and its collations do the heavy lifting, handling both initialization of and updates to results.  We&#8217;d turn the data into nodes only when it&#8217;s leaving the API.  There are big roadblocks to doing that, though.  There&#8217;s lots of post-Storage processing and filtering of data that would need to be moved to Storage.  I think the reasons we don&#8217;t do this processing in Storage have more to do with an inadequate schema and layers of modifications to the code over a long period of time than any substantive problems with using SQL or Storage.  In general I really wish we took better advantage of SQLite.</p>
<p>Rather than trying to solve big problems right off the bat, it might be better to start small: forget about the duplicate collations for now (making sure they&#8217;re equivalent) and just update the initialization path of the bookmarks query results, the simplest kind, to use the Storage collations.  Even that isn&#8217;t so straightforward.  We have a single, immutable <tt>mozIStorageStatement</tt>&#8212;among many others&#8212;that gets a container&#8217;s children.  It&#8217;s created from a long string of raw SQL.  If I merely want to change the sort order of that query, or any other for that matter, it&#8217;s not so clean or easy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/11/13/status-update-november-13-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jetpack menu and Twitter APIs</title>
		<link>http://blog.mozilla.com/adw/2009/11/10/jetpack-menu-and-twitter-apis/</link>
		<comments>http://blog.mozilla.com/adw/2009/11/10/jetpack-menu-and-twitter-apis/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 18:41:26 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=103</guid>
		<description><![CDATA[Jetpack 0.6 is out, sporting a new menu API and Twitter library.
Jetpack is a platform for writing Firefox add-ons the same way you write for the Web:  HTML, CSS, JavaScript, Webby libraries like jQuery, no browser restarts to see your changes.  But that&#8217;s shortchanging it.  It&#8217;s also add-ons with a security model; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mozillalabs.com/blog/2009/11/announcing-jetpack-0-6-jetpack-gallery/">Jetpack 0.6 is out</a>, sporting a new menu API and Twitter library.</p>
<p>Jetpack is a platform for writing Firefox add-ons the same way you write for the Web:  HTML, CSS, JavaScript, Webby libraries like jQuery, no browser restarts to see your changes.  But that&#8217;s shortchanging it.  It&#8217;s also add-ons with a <a href="https://wiki.mozilla.org/Labs/Jetpack/JEP/29">security model</a>; an interactive shell for tinkering with the browser, since it bundles <a href="https://bespin.mozilla.com/">Bespin</a>; a playground for <a href="http://www.toolness.com/wp/?p=665">budding coders</a>, potentially; portable to other XULRunner apps like <a href="http://www.visophyte.org/blog/2009/07/23/thunderbird-jetpack-messagedisplay-overridemessagedisplay-fun/">Thunderbird</a>; and a mechanism for extending not only the browser but the Web itself.  If it&#8217;s easy now to dismiss Jetpack as add-ons lite, it&#8217;s only because it&#8217;s still teething.</p>
<p>The new <a href="https://developer.mozilla.org/en/Jetpack/UI/Menu">menu API</a> lets you manipulate the browser&#8217;s menus&mdash;not only menu bar and context menus, but menus you can create and attach most anywhere, chrome or content, popup or context.</p>
<p>These lines of JavaScript add a &#8220;Tweet This Link&#8221; item to the page&#8217;s hyperlink context menu:</p>
<pre>
jetpack.menu.context.page.on("a").add(function (context) ({
  label: "Tweet This Link",
  command: function () jetpack.lib.twitter.statuses.update({
    status: context.node.href
  })
}));
</pre>
<p><a href="http://hg.mozilla.org/users/dwillcoxon_mozilla.com/jetpacks/raw-file/tip/tweet_link/index.html">Try it out.</a></p>
<p>This one adds a &#8220;Recent Tweets&#8221; submenu to the Tools menu.  When it&#8217;s opened, it displays a &#8220;Loading&#8230;&#8221; item, and if it remains open when the data comes down from Twitter, it&#8217;s filled in with solipsism, one item per tweet.  Note that the word &#8220;Tools&#8221; doesn&#8217;t appear, nor does any position specifying where in the menu to insert the item.  You tell Jetpack, &#8220;This is my add-on&#8217;s menu, stick it in the best place.&#8221;  You can get specific if you want.</p>
<pre>
jetpack.menu.add({
  label: "Recent Tweets",
  menu: new jetpack.Menu({
    beforeShow: function (menu) {
      menu.set("Loading...");
      jetpack.lib.twitter.statuses.public_timeline({
        success: function (array) {
          let tweetArray = array.map(function (obj) obj.text);
          menu.set(tweetArray);
        }
      });
    }
  })
});
</pre>
<p><a href="http://hg.mozilla.org/users/dwillcoxon_mozilla.com/jetpacks/raw-file/tip/recent_tweets/index.html">Try it out.</a>  (Mac users, <a href="http://hg.mozilla.org/users/dwillcoxon_mozilla.com/jetpacks/raw-file/tip/recent_tweets/index.html">a caveat</a>.)</p>
<p>You can add popup menus to content in pages.  This adds a popup to all images on the Web.  Left-click any image in a page and you&#8217;ll get a menu that notifies you of its URL:</p>
<pre>
jetpack.tabs.onReady(function () {
  $("img", this.contentDocument).each(function () {
    var imgNode = this;
    var myMenu = new jetpack.Menu([{
      label: "Show Image URL",
      command: function () jetpack.notifications.show(imgNode.src)
    }]);
    myMenu.popupOn(imgNode);
  });
});
</pre>
<p><a href="http://hg.mozilla.org/users/dwillcoxon_mozilla.com/jetpacks/raw-file/tip/content_popups/index.html">Tile and grout.</a></p>
<p>The first two snippets also illustrate Jetpack&#8217;s new <a href="https://developer.mozilla.org/en/Jetpack/Libraries/Twitter">Twitter API</a>, which hews close to <a href="http://apiwiki.twitter.com/Twitter-API-Documentation">Twitter&#8217;s own</a>.  If you&#8217;re already familiar with that API, there&#8217;s nothing new to learn, and if you aren&#8217;t, it&#8217;s easy, and you can add the phrase &#8220;Twitter API&#8221; to your resume.  <em>(You&#8217;re welcome.)</em></p>
<p>If you have thoughts on these new APIs&mdash;or bugs or patches&mdash;let us know.  More info and examples at the links below.</p>
<ul>
<li>
    <a href="https://developer.mozilla.org/en/Jetpack/UI/Menu">Menu API and examples</a>
  </li>
<li>
    <a href="https://developer.mozilla.org/en/Jetpack/Libraries/Twitter">Twitter API and examples</a>
  </li>
<li>
    <a href="https://jetpack.mozillalabs.com/">Jetpack home</a>
  </li>
<li>
    <a href="https://bugzilla.mozilla.org/enter_bug.cgi?alias=&#038;assigned_to=nobody%40mozilla.org&#038;blocked=&#038;bug_file_loc=http%3A%2F%2F&#038;bug_severity=normal&#038;bug_status=UNCONFIRMED&#038;cc=adw%40mozilla.com&#038;comment=&#038;component=Jetpack&#038;contenttypeentry=&#038;contenttypemethod=autodetect&#038;contenttypeselection=text%2Fplain&#038;dependson=&#038;description=&#038;flag_type-4=X&#038;form_name=enter_bug&#038;keywords=&#038;maketemplate=Remember%20values%20as%20bookmarkable%20template&#038;op_sys=All&#038;priority=--&#038;product=Mozilla%20Labs&#038;qa_contact=jetpack%40mozilla-labs.bugs&#038;rep_platform=All&#038;short_desc=&#038;target_milestone=--&#038;version=Trunk">Find a bug?</a>
  </li>
<li>
    <a href="http://groups.google.com/group/mozilla-labs-jetpack">Discussion list</a>
  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/11/10/jetpack-menu-and-twitter-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status update: November 6, 2009</title>
		<link>http://blog.mozilla.com/adw/2009/11/07/status-update-november-6-2009/</link>
		<comments>http://blog.mozilla.com/adw/2009/11/07/status-update-november-6-2009/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 08:55:53 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=96</guid>
		<description><![CDATA[&#8592;

Started looking again at making Places query APIs async, bug 490714.  First need to tackle bug 499985, sorting of query results should be done entirely in SQL.
&#8220;Helped&#8221; bz with test failures in blocker bug 526178, binding loading order changed in 3.6b1 compared to previous version of firefox.
Awaiting Josh&#8217;s review on bug 506814, get rid [...]]]></description>
			<content:encoded><![CDATA[<p>&larr;</p>
<ul>
<li>Started looking again at making Places query APIs async, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490714">bug 490714</a>.  First need to tackle <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=499985">bug 499985</a>, sorting of query results should be done entirely in SQL.</li>
<li>&#8220;Helped&#8221; bz with test failures in blocker <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=526178">bug 526178</a>, binding loading order changed in 3.6b1 compared to previous version of firefox.</li>
<li>Awaiting Josh&#8217;s review on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=506814">bug 506814</a>, get rid of / Change GetPersistentDescriptor / SetPersistentDescriptor.  Spoke to him last week, think he&#8217;s pretty busy with more important things.</li>
</ul>
<p>&rarr;</p>
<ul>
<li>Work on <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=499985">bug 499985</a>.</li>
<li>Been thinking about the gap between the Places database and its query code and the janky structure that bridges it.  Think more about it, <i>with intensity</i>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/11/07/status-update-november-6-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cold Ts</title>
		<link>http://blog.mozilla.com/adw/2009/09/04/cold-ts/</link>
		<comments>http://blog.mozilla.com/adw/2009/09/04/cold-ts/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 04:42:06 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=72</guid>
		<description><![CDATA[Alice ran the first cold Ts on her staging machines today.  I ran it locally against today&#8217;s nightlies and produced these numbers:

Shiretoko (3.5)   10266.25 ms
Namoroka  (3.6)   10017.55
Minefield (trunk) 11023.65

If we had had cold Ts when we landed whatever caused Minefield&#8217;s 10% regression over Namoroka, we would have caught it.
Cold [...]]]></description>
			<content:encoded><![CDATA[<p>Alice ran the first cold Ts on her staging machines today.  I ran it locally against today&#8217;s nightlies and produced these numbers:</p>
<pre>
Shiretoko (3.5)   10266.25 ms
Namoroka  (3.6)   10017.55
Minefield (trunk) 11023.65
</pre>
<p>If we had had cold Ts when we landed whatever caused Minefield&#8217;s 10% regression over Namoroka, we would have caught it.</p>
<p>Cold Ts is Ts run under simulated cold startup.  Right now we&#8217;re able to simulate cold startup on OS X only, so the test is not yet switched on for Windows and Linux.  The procedure on Linux, <tt>echo 3 > /proc/sys/vm/drop_caches</tt>, requires root privileges, which either opens a security hole on the Tinderboxen or forces a <tt>sudo</tt> prompt.  <a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements_Notes#adw.27s_Windows_XP_experience">Windows is worse</a>:  Nothing we know of works well or at all except for reboot, and the Talos infrastructure makes rebooting impractical.  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510587">Any help here</a> would be greatly appreciated.</p>
<ul>
<li>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510587">Bug 510587</a> &#8211; Create a cold startup Ts
</li>
<li>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=511914"> Bug 511914</a> &#8211; Allow Talos tests to run head and tail scripts
</li>
<li><a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements_Notes">Simulated cold startup notes</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/09/04/cold-ts/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Firefox startup 2</title>
		<link>http://blog.mozilla.com/adw/2009/08/21/firefox-startup-2/</link>
		<comments>http://blog.mozilla.com/adw/2009/08/21/firefox-startup-2/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 19:37:14 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=64</guid>
		<description><![CDATA[Another week in Firefox startup.
Good news is, joelr joined the platform team and is kicking startup in the shins.  He&#8217;s on the ball, I hope he doesn&#8217;t mind my saying.
My OS X-specific XPT-linking patch from last time landed.  Nightly trunk (Minefield) users on OS X, I&#8217;d like to hear from you if you [...]]]></description>
			<content:encoded><![CDATA[<p>Another week in Firefox startup.</p>
<p>Good news is, <a href="http://wagerlabs.com/post/168237170/faster-mac-firefox">joelr</a> joined the platform team and is kicking startup in the shins.  He&#8217;s on the ball, I hope he doesn&#8217;t mind my saying.</p>
<p>My OS X-specific <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510309">XPT-linking patch</a> from <a href="http://blog.mozilla.com/adw/2009/08/14/startup/">last time</a> landed.  <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/">Nightly trunk</a> (Minefield) users on OS X, I&#8217;d like to hear from you if you notice an improvement in cold startup time.  I was unable to, however, despite noting a good decrease in I/O.  Ted is working on improving OS X packaging overall in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=463605">bug 463605</a>.</p>
<p>Making progress on setting up a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510587">Talos cold Ts</a>.  A byproduct is that we&#8217;re going to allow Talos tests to run <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=511914">head and tail scripts</a>, which may be useful for others.  <a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements_Notes">Simulating a cold startup on Windows</a> looks like it might be a little tricky, but other than that I don&#8217;t foresee any roadblocks.  (What could go wrong?)</p>
<p>Posted a <a href="http://people.mozilla.com/~adw/startup/data/io_syscalls/latest.html">list of all files touched on OS X cold startup</a>, including time spent in the associated syscalls, number of bytes touched, and throughput.  You can drill down into each file to see all the I/O-related syscalls on it.  This is data from one run only, so it&#8217;s not smoothed out across multiple runs.  I have noticed some jitter between runs:  For example, reading four bytes of <tt>search.json</tt> will take 200ms (<em>!</em>) during one run, but on most others it&#8217;s something like 10-20ms (!).  The order of files by duration tends to remain fairly consistent, though.  I&#8217;ll try to keep this up-to-date; already it&#8217;s several days old, and since then I&#8217;ve improved the output so that it shows the counts of each syscall on the main page.  Feel free to rummage through <a href="http://people.mozilla.com/~adw/startup/">my startup dump</a>.</p>
<p><a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements/adw_notes">My daily startup notes, data, and scripts are open as always.</a>  For details and context, check there.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/08/21/firefox-startup-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startup</title>
		<link>http://blog.mozilla.com/adw/2009/08/14/startup/</link>
		<comments>http://blog.mozilla.com/adw/2009/08/14/startup/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 21:25:46 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=57</guid>
		<description><![CDATA[Some of us have recently been working on improving Firefox&#8217;s startup performance.  I&#8217;m focusing on cold startup, which is heavily I/O bound.  You can read about it in my chronicles of startup, which contain notes and thoughts, day-to-day travails, and some scripts for analysis that anybody can run to reproduce my results.
Yesterday I [...]]]></description>
			<content:encoded><![CDATA[<p>Some of us have recently been working on <a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements">improving Firefox&#8217;s startup performance</a>.  I&#8217;m focusing on cold startup, which is heavily I/O bound.  You can read about it in <a href="https://wiki.mozilla.org/Firefox/Projects/Startup_Time_Improvements/adw_notes">my chronicles of startup</a>, which contain notes and thoughts, day-to-day travails, and some scripts for analysis that anybody can run to reproduce my results.</p>
<p>Yesterday I filed <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510309">bug 510309</a> to combine XPT files for OS X DMG packages.  It should shave a couple hundred milliseconds off of OS X cold startup time spent in I/O.  <a href="http://autonome.wordpress.com/2009/08/14/weekly-firefox-startup-performance-roundup/">Dietrich</a>, Alice, and I are setting up a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=510587">Talos Ts to measure cold startup</a>, and that will provide more confidence in this number and more accurate and stable numbers in general.</p>
<p><strong>Update</strong>: Jesse pointed out that percentages are helpful when talking about performance.  I&#8217;ve been getting 8 to 9 wall clock seconds pretty consistently on OS X (simulated) cold startup.  Taking the 200ms decrease in I/O (not wall clock time), which is toward the low end of some of the runs I&#8217;ve done, that&#8217;s a 2.5% improvement over 8s.  In the bug linked above I note a decrease of 285ms, a 3.6% improvement.  One big caveat is that I was unable to see a corresponding drop in wall clock time in my testing, which is one reason I&#8217;d like to get a Talos cold Ts set up.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/08/14/startup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Locale-sensitive collations in Storage</title>
		<link>http://blog.mozilla.com/adw/2009/07/19/locale-sensitive-collations-in-storage/</link>
		<comments>http://blog.mozilla.com/adw/2009/07/19/locale-sensitive-collations-in-storage/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 22:53:02 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=38</guid>
		<description><![CDATA[Storage on the Mozilla platform now supports locale-sensitive collations.
SQLite provides a few simple built-in collations: BINARY, NOCASE, and RTRIM, but as the first suggests they all use memcmp and ignore text encoding and the user&#8217;s locale.  If you want to show respect to your user and the vagaries of her language&#8217;s collating conventions, you [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://developer.mozilla.org/en/Storage">Storage</a> on the Mozilla platform now supports locale-sensitive collations.</p>
<p>SQLite provides a few simple <a href="http://sqlite.org/datatype3.html">built-in collations</a>: <code>BINARY</code>, <code>NOCASE</code>, and <code>RTRIM</code>, but as the first suggests they all use <code>memcmp</code> and ignore text encoding and the user&#8217;s locale.  If you want to show respect to your user and the vagaries of her language&#8217;s collating conventions, you have to load your entire set of results and then sort it manually.  Sweet.</p>
<p>But now you can do it all in SQL.  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=499990">Bug 499990</a> adds the following collations sensitive to the locale of your user&#8217;s application:</p>
<dl>
<dt><code>locale</code></dt>
<dd>Case- and accent-insensitive</dd>
<dt><code>locale_case_sensitive</code></dt>
<dd>Case-sensitive, accent-insensitive</dd>
<dt><code>locale_accent_sensitive</code></dt>
<dd>Case-insensitive, accent-sensitive</dd>
<dt><code>locale_case_accent_sensitive</code></dt>
<dd>Case- and accent-sensitive</dd>
</dl>
<p>That&#8217;s everything covered by the platform&#8217;s existing <a href="http://mxr.mozilla.org/mozilla-central/source/intl/locale/idl/nsICollation.idl">collation facilities</a>.</p>
<p>Use them <a href="http://sqlite.org/lang_select.html">like so</a>:</p>
<pre>
SELECT * FROM fooflefipples ORDER BY name COLLATE locale ASC;
</pre>
<p>Locale-sensitive collations are useful for everyone building on the platform, but I added them as part of some ongoing work on <a href="http://blog.mozilla.com/adw/2009/06/08/going-places-quickly/">async Places APIs</a> in Firefox.  We&#8217;d like to notify consumers as batches of results load from the database, but that&#8217;s not possible if we have to sort the entire set outside the database &#8212; which in turn increases Places&#8217;s code size for something that should be handled at the platform level, and now it is.</p>
<p>For a nice summary of the importance and difficulty of sorting strings in our multilingual digital world, see the introduction to the <a href="http://unicode.org/reports/tr10/">Unicode Collation Algorithm specification</a>.</p>
<p>In related Storage news, Curtis is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=498938">adding</a> a <a href="http://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein distance</a> function.  (Pretty cool, but my patch is way cooler, don&#8217;t tell anybody.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/07/19/locale-sensitive-collations-in-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Going Places quickly</title>
		<link>http://blog.mozilla.com/adw/2009/06/08/going-places-quickly/</link>
		<comments>http://blog.mozilla.com/adw/2009/06/08/going-places-quickly/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 19:53:50 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=30</guid>
		<description><![CDATA[Improved performance is a key goal of Firefox 3.5 and beyond.  We have our work cut out for us on the Places team.
For example, if you have lots of bookmarks or history, you might have noticed that searching in the history sidebar or bookmarks library can be a little, uh, unresponsive.  When you [...]]]></description>
			<content:encoded><![CDATA[<p>Improved performance is a <a href="http://autonome.wordpress.com/2009/05/05/front-end-performance-in-firefox-35-and-beyond/">key goal</a> of Firefox 3.5 and <a href="https://wiki.mozilla.org/Firefox/Namoroka">beyond</a>.  We have <a href="https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Firefox&amp;product=Toolkit&amp;component=Places&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=anywordssubstr&amp;status_whiteboard=TSnap&amp;keywords_type=anywords&amp;keywords=&amp;resolution=DUPLICATE&amp;resolution=---&amp;emailassigned_to1=1&amp;emailtype1=exact&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailtype2=exact&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Bug+Number&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">our</a> <a href="https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Firefox&amp;product=Toolkit&amp;component=Places&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=anywordssubstr&amp;status_whiteboard=&amp;keywords_type=anywords&amp;keywords=perf&amp;resolution=DUPLICATE&amp;resolution=---&amp;emailassigned_to1=1&amp;emailtype1=exact&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailqa_contact2=1&amp;emailtype2=exact&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Bug+Number&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">work</a> cut out for us on the Places team.</p>
<p>For example, if you have lots of bookmarks or history, you might have noticed that searching in the history sidebar or bookmarks library can be a little, uh, unresponsive.  When you search or click a tag, folder, or history container in one of the sidebars or library, Firefox drops everything to fetch your results.  I&#8217;ve been working on making these actions <a href="https://developer.mozilla.org/en/Storage#Asynchronously">asynchronous</a> so that Firefox can walk and chew gum.</p>
<p><strong><a href="https://build.mozilla.org/tryserver-builds/dwillcoxon@mozilla.com-minefield-async_queries-adw/">Try out a test build here.</a></strong> It&#8217;s based off of <a href="http://mozillalinks.org/wp/2008/10/minefield-is-firefox/">Minefield</a>, the trunk version of Firefox.  <strong>Warning:</strong> You can use this with your default Firefox profile, but only if you normally use Firefox 3.0, the current 3.5 nightly, the current Minefield nightly, or 3.5 RC 1.  (As always, however, it&#8217;s a good idea to backup your <a href="http://support.mozilla.com/en-US/kb/Profiles">profile</a> before you try any experimental build.)  If you run any of the 3.5 betas up to and including beta 4, you will need to make a copy of your profile and use it instead.</p>
<p>This build loads searches and tag, history, and query containers asynchronously.  Instead of becoming unresponsive as it loads the entire set of results, Firefox will display results batch by batch as it retrieves them.  That&#8217;s the plan anyway.  Open up the sidebars and library and give it a shot.</p>
<p>A few notes about what not to expect:</p>
<ul>
<li> Responsiveness is still not 100%.  Depending on the size of your history, searching and opening large containers remain a little jerky, especially the first time.  Many disparate pieces impact responsiveness, and this one patch doesn&#8217;t touch them all.  I hope you will notice some improvement, though, and I&#8217;d certainly like to hear if it makes things worse.</li>
<li> This is not a cure-all.  It addresses only the issues described in this post, not things like the awesomebar or deleting large numbers of bookmarks.</li>
<li> Completeness and visual polish.</li>
</ul>
<p>Follow along in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490714">bug 490714</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/06/08/going-places-quickly/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Places stats last call</title>
		<link>http://blog.mozilla.com/adw/2009/06/07/places-stats-last-call/</link>
		<comments>http://blog.mozilla.com/adw/2009/06/07/places-stats-last-call/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 03:07:32 +0000</pubDate>
		<dc:creator>adw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/adw/?p=28</guid>
		<description><![CDATA[A quick note to kindly request your help in making Firefox better.  If you have not already done so, please take thirty seconds to visit the Places Stats Project and submit some anonymous statistics gathered from your Firefox bookmarks and history.  This is a great, super-easy chance to contribute to the improvement of [...]]]></description>
			<content:encoded><![CDATA[<p>A quick note to kindly request your help in making Firefox better.  If you have not already done so, please take thirty seconds to visit the <a href="https://places-stats.mozilla.com/">Places Stats Project</a> and submit some anonymous statistics gathered from your Firefox bookmarks and history.  This is a great, super-easy chance to contribute to the improvement of Firefox, so don&#8217;t miss it.</p>
<p>The Places Stats Project has been up and running for nearly three months now, and I previously blahhged about it and our initial results <a href="http://blog.mozilla.com/adw/2009/03/25/places-stats/">here</a>.  Everyone&#8217;s been busy getting Firefox 3.5 out the door since then, but now that work on it is winding down I&#8217;ll post soon about some of the things we learned.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/adw/2009/06/07/places-stats-last-call/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
