<?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"
	>

<channel>
	<title>edilee</title>
	<atom:link href="http://ed.agadak.net/feed" rel="self" type="application/rss+xml" />
	<link>http://ed.agadak.net</link>
	<description>(rhymes with jubilee)</description>
	<pubDate>Tue, 01 Jul 2008 15:48:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Firefox 3 Smart Location Bar Saves You Time</title>
		<link>http://ed.agadak.net/2008/07/firefox-3-smart-location-bar-saves-you-time</link>
		<comments>http://ed.agadak.net/2008/07/firefox-3-smart-location-bar-saves-you-time#comments</comments>
		<pubDate>Tue, 01 Jul 2008 12:48:48 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=114</guid>
		<description><![CDATA[Now that Firefox 3 [mozilla.com] has been downloaded well over 27 million times [mozilla.com], many people have noticed that the Smart Location Bar can find pages that match not only in the URL but also in the title or tags added to a bookmarked page. One commonly overlooked feature that saves you a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://www.mozilla.com/en-US/firefox/">Firefox 3</a> [mozilla.com] has been downloaded well over <a href="http://downloadcounter.sj.mozilla.com/">27 million times</a> [mozilla.com], many people have noticed that the Smart Location Bar can find pages that match not only in the URL but also in the title or tags added to a bookmarked page. One commonly overlooked feature that saves you a lot of time is the ability to quickly narrow down the search results and find exactly what you want. Just type another word.</p>
<p>Typing multiple words and not being restricted to just matching at the beginning of the URL to match the domain provides a lot of power to the user.</p>
<p>I&#8217;ve put together some examples of how the Smart Location Bar can save you seconds, even minutes, every day when using websites like YouTube or Gmail or any place you can visit through Firefox. (Don&#8217;t miss the pro-tip at the end to easily read your new messages in Gmail! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<div style="margin: 1em auto; width: 200px; opacity: .5;">
<hr /></div>
<p>Ever visited a page but don&#8217;t remember the site&#8217;s URL or even the the domain? When you&#8217;re clicking through Google search results, you might find what you&#8217;re looking for but forget to make note of the URL. Many times you can just type in what you were searching for and Firefox can find it right away. Firefox will even order the results based on better matches.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><a href="http://ed.agadak.net/wp-content/uploads/2008/07/diablo-iii.png" title="Diablo III Results"><img src="http://ed.agadak.net/wp-content/uploads/2008/07/diablo-iii.png" alt="Diablo III Results" width="450" height="185" class="attachment wp-att-120" /></a>
<div class="imagecaption">Easily go back to pages without typing the domain</div>
</div>
</div>
<p>In most other browsers, you would have to start typing out &#8220;www.blizzard.com&#8221; if you remembered it and then additionally type &#8220;/diablo3&#8243; to find the Diablo III related pages. Using Firefox 3&#8217;s Smart Location Bar, you could easily jump to what you want and perhaps find non-Blizzard pages that you might be interested in because you don&#8217;t have to remember to type the domain anymore.</p>
<div style="margin: 1em auto; width: 200px; opacity: .5;">
<hr /></div>
<p>A lot of pages on the Internet have URLs that are completely filled with junk &#8212; at least totally unmemorable for the user. Most likely the title of the page will have something much more useful. One prime example is YouTube where the video URLs are just some way for YouTube to know which video you want.</p>
<p>You&#8217;re more likely to remember the title of the page, which directly relates to the content of the video that you previously watched, than remembering even half of the random characters used to identify the video.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><img src="http://ed.agadak.net/wp-content/uploads/2008/06/youtube.png" alt="YouTube Results" width="450" height="260" class="attachment wp-att-115" />
<div class="imagecaption">Quickly find previously viewed YouTube videos</div>
</div>
</div>
<p>In this case, I was trying to find <a href="http://www.youtube.com/watch?v=ahZd13Uvvw8">Wind Garden</a> [youtube.com], an 8-bit remix of a really great song from Super Mario Galaxy. In other browsers, if I wanted to try finding the page from my history and started typing out &#8220;yout,&#8221; I would never have found it because somebody linked that video to me from nl.youtube.com. I was able to find it with Firefox 3 because &#8220;yout&#8221; matched in both the title and URL ignoring the &#8220;nl.&#8221; part.</p>
<div style="margin: 1em auto; width: 200px; opacity: .5;">
<hr /></div>
<p>Another example of the AwesomeBar&#8217;s time-saving ability that will be popular with movie watchers is with IMDb - the Internet Movie Database. If you&#8217;re like me and can&#8217;t remember which movies every actor has been in, you&#8217;ll be revisiting this site over and over again. However, instead of always going to to the main IMDb homepage to find a movie using the search box, you can go directly to the page you want with Firefox 3.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><img src="http://ed.agadak.net/wp-content/uploads/2008/06/imdb.png" alt="IMDb Results" width="450" height="260" class="attachment wp-att-116" />
<div class="imagecaption">Save time by going directly to movie page</div>
</div>
</div>
<p>These IMDb results show off yet another strength of the AwesomeBar &#8212; being able to match both the URL and title at the same time. Notice that &#8220;imdb&#8221; only shows up in the url. You can type &#8220;imdb&#8221; and then a word from the title to quickly narrow down the results to find the exact page you want. This saves you those extra seconds it takes to load the whole IMDb homepage and start a search.</p>
<div style="margin: 1em auto; width: 200px; opacity: .5;">
<hr /></div>
<p>You&#8217;ve got phone numbers, account numbers, social security numbers, personal identification numbers, and more numbers to keep track of. There&#8217;s no need to additionally keep track of IP addresses for those websites that don&#8217;t have easy-to-remember domain names.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><a href="http://ed.agadak.net/wp-content/uploads/2008/07/router.png" title="Router Results"><img src="http://ed.agadak.net/wp-content/uploads/2008/07/router.png" alt="Router Results" width="450" height="145" class="attachment wp-att-121" /></a>
<div class="imagecaption">No need to memorize IP addresses anymore</div>
</div>
</div>
<p>Cellphones let you easily find phone numbers by Contact name, and Firefox 3 lets you find IP addresses by Page name. Just like how you need to enter the contact name and phone number the first time on your phone, you&#8217;ll need to type in the the IP address once. But on the up-side, you don&#8217;t even need to provide a name for the IP address because Firefox 3 will automatically remember the page&#8217;s title for you. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="margin: 1em auto; width: 200px; opacity: .5;">
<hr /></div>
<p>Gmail has done a great job with their newest version by providing multiple points of access to their web application. Each message can be accessed directly by URL instead of requiring the user to first load the main Gmail page then searching for a message.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><img src="http://ed.agadak.net/wp-content/uploads/2008/06/mail.png" alt="Gmail Results" width="450" height="260" class="attachment wp-att-117" />
<div class="imagecaption">Get right to business with rich internet apps</div>
</div>
</div>
<p>Being able to access these multiple points of entry is facilitated by the AwesomeBar&#8217;s match-anywhere functionality. In this case, you would want to match page titles for email titles, but URLs can also be matched for commands like <a href="http://madhava.com/egotism/archive/005016.html">&#8220;new doc&#8221; for Google Docs</a> [madhava.com].</p>
<p>By combining the AwesomeBar&#8217;s <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">adaptive learning</a> [ed.agadak.net] with the ability to start a Gmail search to <a href="https://mail.google.com/mail/#search/l%3Aunread">find unread messages</a> [mail.google.com] plus <a href="https://addons.mozilla.org/en-US/firefox/addon/7423">automatically selecting the first result</a> [addons.mozilla.org] when pressing enter, I&#8217;ve been saving a lot of time whenever I check for new messages. All I need to do is type &#8220;mail&#8221; and press enter.</p>
<p><a href="http://digg.com/software/Firefox_3_Smart_Location_Bar_Saves_You_Time"><b>Digg it!</b></a> <small><i>Edit: Updated for post-Firefox 3 launch intro and a couple new examples.</i></small></p>
<small><a href="http://ed.agadak.net/2008/07/firefox-3-smart-location-bar-saves-you-time#respond">46 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/07/firefox-3-smart-location-bar-saves-you-time/feed</wfw:commentRss>
		</item>
		<item>
		<title>Hide Unvisited Add-on for AwesomeBar</title>
		<link>http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar</link>
		<comments>http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar#comments</comments>
		<pubDate>Thu, 19 Jun 2008 18:33:34 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Add-on]]></category>

		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=118</guid>
		<description><![CDATA[A really useful AwesomeBar feature in Firefox 3 that works together with the one-click bookmarking is the ability to search for pages that you&#8217;ve bookmarked or tagged. Adding a star to a page effectively makes that page stay permanently in your history.
However, this is an unexpected behavior for some users who want the location bar [...]]]></description>
			<content:encoded><![CDATA[<p>A really useful AwesomeBar feature in Firefox 3 that works together with the one-click bookmarking is the ability to search for pages that you&#8217;ve bookmarked or tagged. Adding a star to a page effectively makes that page stay permanently in your history.</p>
<p>However, this is an unexpected behavior for some users who want the location bar to be completely empty after clearing browsing history. So to address that, I&#8217;ve made an add-on that hides pages (bookmarks) that you haven&#8217;t visited (since deleting or clearing history) from showing in the AwesomeBar.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><a href="https://addons.mozilla.org/en-US/firefox/addon/7429" title="Hide Unvisited Add-on"><img src="http://ed.agadak.net/wp-content/uploads/2008/06/hideunvisited.png" alt="Hide Unvisited Add-on" width="450" height="150" class="attachment wp-att-119" /></a>
<div class="imagecaption">Only visited pages (and bookmarks) are shown</div>
</div>
</div>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/7429">Hide Unvisited</a> [addons.mozilla.org] makes it so that you can visit websites, potentially those that you&#8217;ve bookmarked, and later open the History panel and delete individual pages or whole sites from your history to then have the bookmarked pages also disappear from the Smart Location Bar&#8217;s suggestions. Once you&#8217;ve visited a bookmarked page, it&#8217;ll appear in the suggestions like normal except there&#8217;ll be a star and tags if you&#8217;ve tagged it.</p>
<p><i>&#8220;This add-on is absolutely fantastic and does exactly what I wanted it to do and most likely what <b>many others will want actually</b>.&#8221; - <a href="https://addons.mozilla.org/en-US/firefox/reviews/display/7429">Misa!</a></i> [addons.mozilla.org]</p>
<p>Check out <a href="http://ed.agadak.net/category/add-on">other add-ons</a> I&#8217;ve written like <a href="http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar">Edit Middle</a> [ed.agadak.net].</p>
<small><a href="http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar#respond">26 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar/feed</wfw:commentRss>
		</item>
		<item>
		<title>Edit Middle Add-on for AwesomeBar</title>
		<link>http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar</link>
		<comments>http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar#comments</comments>
		<pubDate>Wed, 28 May 2008 15:39:35 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Add-on]]></category>

		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=112</guid>
		<description><![CDATA[I&#8217;ve made a simple add-on to let you see results immediately when you fix typos or edit search terms in the location bar. The difference from what you get in Firefox 3 is that with this add-on, you&#8217;ll see results when editing in the middle.
For example, if you accidentally type &#8220;mozzilla&#8221; you can correct the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve made a simple add-on to let you see results immediately when you fix typos or edit search terms in the location bar. The difference from what you get in Firefox 3 is that with this add-on, you&#8217;ll see results when editing in the middle.</p>
<p>For example, if you accidentally type &#8220;mozzilla&#8221; you can correct the typo to be &#8220;mozilla&#8221; and see the pages you were looking for right away. Or if you type &#8220;addons&#8221; but meant to type &#8220;add ons&#8221;. Or maybe you searched for &#8220;<a href="http://www.dria.org/wordpress/archives/2008/04/17/628/">ginger carrot cake</a>&#8221; [dria.org] and want to search for &#8220;orange carrot cake&#8221; instead.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:450px; margin: auto;"><a href="https://addons.mozilla.org/en-US/firefox/addon/7400" title="Edit Middle Add-on"><img src="http://ed.agadak.net/wp-content/uploads/2008/05/editmiddle.thumbnail.png" alt="Edit Middle Add-on" border="0" width="450" height="91" class="attachment wp-att-113" /></a>
<div class="imagecaption">Fixing &#8220;midle&#8221; typo to &#8220;middle&#8221; instantly shows results</div>
</div>
</div>
<p>Download <a href="https://addons.mozilla.org/en-US/firefox/addon/7400">Edit Middle</a> [addons.mozilla.org] from the add-ons website or use the add-ons search from within Firefox 3. &#8220;Edit Middle&#8221; works for Firefox 3 including those using release candidates as well as nightly builds.</p>
<p><i>&#8220;<b>Very helpful</b> for those with less than 100% keyboard accuracy!&#8221; &#8220;Search relies on keyboard input and typos are a fact of life; this just <b>makes the smart location bar that much smarter</b>.&#8221; - <a href="https://addons.mozilla.org/en-US/firefox/reviews/display/7400">bharuch2, Harlequin99</a></i> [addons.mozilla.org]</p>
<p>Thanks everyone who helped test, provided feedback, and reviewed my first add-on. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<small><a href="http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar#respond">12 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Different Development Process</title>
		<link>http://ed.agadak.net/2008/04/a-different-development-process</link>
		<comments>http://ed.agadak.net/2008/04/a-different-development-process#comments</comments>
		<pubDate>Wed, 16 Apr 2008 05:45:11 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Mercurial]]></category>

		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/04/a-different-development-process</guid>
		<description><![CDATA[It seems that Mercurial and Mozilla have quite different patch/review process, but then again they&#8217;re two very different projects. I just found out today that Bug 394650 - Make line numbers linkable when viewing files/annotate for hg.mozilla.org [bugzilla.mozilla.org] was &#8220;works for me.&#8221; I was confused for a little bit; but yes indeed, annotate/changeset views on [...]]]></description>
			<content:encoded><![CDATA[<p>It seems that Mercurial and Mozilla have quite different patch/review process, but then again they&#8217;re two very different projects. I just found out today that <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=394650">Bug 394650 - Make line numbers linkable when viewing files/annotate for hg.mozilla.org</a> [bugzilla.mozilla.org] was &#8220;works for me.&#8221; I was confused for a little bit; but yes indeed, annotate/changeset views on hg.mozilla.org have linkable line numbers for each file&#8230; just like how I would have coded it. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Turns out that the patch that I sent in to the dev list ended up <a href="http://hg.intevation.org/mercurial/rev/800e2756c9ab">making it in to Mercurial 1.0</a> [hg.intevation.org]. No official reviews, no comments. They just checked in the patch to their &#8220;crew&#8221; (trunk) repository and let it bake for several months. Seems like nobody complained enough to have it backed out and here it is now in Mercurial 1.0 as we can see on <a href="http://hg.mozilla.org/index.cgi/cvs-trunk-mirror/">hg.mozilla.org</a>.</p>
<p>But this post isn&#8217;t about the differences between Mercurial and Mozilla. It&#8217;s about the current Mozilla CVS development process vs Mozilla with Mercurial.</p>
<p>One main difference is <b>changesets</b>. Instead of having a separate version number for each file as in CVS, all related changes are grouped together for a changeset. These are the steps one needs to do right now to see all related changes of a patch: 1) use mxr to find the file you&#8217;re editing 2) switch to blame to find the checkin 3) click the bug number if provided 4) hope there&#8217;s a clearly marked patch as the one checked in to see what else was changed. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>With Mercurial, you can just look at the changeset which contains everything; e.g., <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/rev/e423b453cf77">patch to not need to click the page to use gmail keyboard commands</a> [hg.mozilla.org]. Additionally, now with my patch for showing line numbers in changesets, you can link people to a <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/rev/e423b453cf77#l2.47">specific line in a patch</a> [hg.mozilla.org]. This could be useful if you need to point to a particular line in a bugzilla comment about why it broke something. Or especially useful with a stack of patches on mq and you&#8217;re collecting feedback on it from other people.</p>
<p>Another aspect of changesets is that there&#8217;s a &#8220;<b>global version</b>&#8221; for the whole repository. You can jump back in time to an earlier revision and view the whole repository as it was before a particular patch was checked in. We currently have something like this on a per-file basis with bonsai, but you need to do so much more work to look at &#8220;the right version&#8221; of other files. E.g., going back to when <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/rev/163ef2f91d48">adaptive learning was checked in</a> [hg.mozilla.org], you can see that the autocomplete was still only <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/file/163ef2f91d48/toolkit/content/widgets/autocomplete.xml#l1257">emphasizing the first match in the url and title</a> [hg.mozilla.org].</p>
<p>Of course, you can just use the mercurial web interface to view the latest version of the file. Just take <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/file/tip/">http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/file/tip/</a> and append the file you want. (Normally &#8220;tip&#8221; would be a changeset/revision hex number, but you can put in &#8220;tip&#8221; because it&#8217;s an alias (tag) for the latest version.) And from there, you can look at the whole patch for the current version (<b>changeset</b>), browse the checkin history of that file (<b>revisions</b>), or look at the blame (<b>annotate</b>) <i>[unfortunately it doesn't have checkin comments on hover yet]</i>.</p>
<p>Typing out that whole url might be cumbersome, but good thing we have the AwesomeBar with multi-word search on word boundaries (with camel case) plus adaptive learning. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <a href="http://hg.mozilla.org/cvs-trunk-mirror/index.cgi/file/tip/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp">&#8220;hg. auto&#8221;</a> [hg.mozilla.org]</p>
<p>I&#8217;m not sure how distributed the development process will become for Mozilla, but these neat tools provided by default with Mercurial will make it easier to track changes and refer to them in bugzilla comments or over IRC. <i>(Oh, and if you&#8217;re using mercurial and haven&#8217;t looked into <b>mq</b> yet, you should do so. It&#8217;s a great (builtin) extension to track/reorder multiple patches that you&#8217;re working on. And for those curious how I send changes for try-server builds, I apply the stack of patches and <tt>hg export firstpatch:lastpatch > combined.patch</tt> <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</i></p>
<small><a href="http://ed.agadak.net/2008/04/a-different-development-process#respond">2 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/04/a-different-development-process/feed</wfw:commentRss>
		</item>
		<item>
		<title>Awesomeness in Beta 5</title>
		<link>http://ed.agadak.net/2008/04/awesomeness-in-beta-5</link>
		<comments>http://ed.agadak.net/2008/04/awesomeness-in-beta-5#comments</comments>
		<pubDate>Tue, 08 Apr 2008 15:53:14 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Conference]]></category>

		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/04/awesomeness-in-beta-5</guid>
		<description><![CDATA[I&#8217;ve been busy preparing for a conference talk, so I didn&#8217;t get around to reporting AwesomeBar improvements for Beta 5 sooner. (But for those curious, I presented Branch-on-Random [pdf, uiuc.edu] at CGO 2008 [cgo.org] (Code Generation and Optimization). Basically, it&#8217;s an instruction that&#8217;s really cheap to implement and allows for a factor of 10 times [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been busy preparing for a conference talk, so I didn&#8217;t get around to reporting AwesomeBar improvements for Beta 5 sooner. <i>(But for those curious, I presented <a href="http://www-sal.cs.uiuc.edu/~zilles/papers/branch-on-random.cgo2008.pdf">Branch-on-Random</a> [pdf, uiuc.edu] at <a href="http://www.cgo.org/">CGO 2008</a> [cgo.org] (Code Generation and Optimization). Basically, it&#8217;s an instruction that&#8217;s really cheap to implement and allows for a factor of 10 times less overhead than traditional sampling techniques. I think it went well, and I even got asked during Q&#038;A.. &#8220;When can I buy one of these?&#8221; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</i></p>
<p>As we&#8217;re winding down to ship Firefox 3, there aren&#8217;t as many more big features, but there&#8217;s still some useful changes in Beta 5 in terms of functionality, display, and performance. So those of you who have installed extensions to make the auto-complete smaller might want to turn it off to try out the new look.</p>
<p><b>Functionality</b></p>
<p>To better accommodate people&#8217;s expectations of results in the auto-complete, there are frecency tweaks to better prefer pages you&#8217;ve typed &#8212; by default, before adaptive learning. This helps address concerns that the top level site&#8217;s main page should appear high in the list because typically people are typing in the domain.</p>
<p>Another common complaint is that results seemed to be returning useless results when typing 1-2 characters. This stemmed from results being matched in the middle of words instead of at the start of the domain, for example. The adaptive learning helps avoid this problem because you&#8217;re typing words and selecting results that matched the word you wanted. The learning system then knows to show that selected page over others when you just type a single letter of the word &#8212; effectively showing a result that matches at the beginning of the word.</p>
<p>So to improve things for Beta 5, words that you type in the location bar will try to match on word boundaries e.g., matching after a forward slash or space. This even works for CamelCase (capitalizing the first letter of words instead of putting spaces)  which is common for wikis.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/04/wik-m.png" width="450" height="234" alt="Word boundary matching" title="Word boundary matching" style="border: 0;" />
<div class="imagecaption">Searching for &#8220;wik m&#8221; matching on word boundaries</div>
</div>
</div>
<p><b>Display</b></p>
<p>The first thing people will probably notice is that the list doesn&#8217;t feel as overpowering anymore. The number of results shown on the screen has been reduced to 6. Additionally the font size of the title text is smaller which felt unnecessarily large on some platforms like OS X. Ideally, the fewer number of results will help users scan results quickly instead of feeling overwhelmed. Combined with better functionality of multi-word search, adaptive learning, and word boundary matching, finding the page you want should be a happy experience. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Another set of changes is for how words you type get emphasized. Instead of only showing the first match in the title and url, it&#8217;ll emphasize all matches. Additionally, it&#8217;ll show matches when you type multiple words as well, so each word gets emphasized instead of nothing at all. For browser skin designers, there&#8217;s a new css class to alternatively emphasize matches, but the main purpose is to avoid styling bold which breaks common ligatures in some languages.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/04/islam.png" width="350" height="64" alt="Emphasize islam" title="Emphasize islam" style="border: 0;" />
<div class="imagecaption">Bold/underline for english, just underline for ligatures</div>
</div>
</div>
<p><b>Performance</b></p>
<p>There has been improvements in browser responsiveness in Beta 5, so now it no longer eats up all of your CPU power for every letter that you type. In Beta 4, every single letter you typed caused the browser to start searching through your whole history</p>
<p>To optimize for users typing letters one by one for a whole word, we now reuse the results that are currently being shown in the list as well as continuing the search from where the last one left off. This has 2 main effects outside of reduced CPU usage: 1) existing matching results show up immediately instead of disappearing momentarily then reappearing and 2) not-as-frecently visited results can be found faster as you continue to type.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/04/cpu-usage.png" width="450" height="210" alt="CPU Search Usage" title="CPU Search Usage" style="border: 0;" />
<div class="imagecaption">CPU usage when searching in Beta 4 and Beta 5</div>
</div>
</div>
<p>The picture shows a CPU usage graph where high bars means the CPU is doing a lot of work (and potentially not letting it update the UI). The horizontal axis is time and each set of 5 bars shows the 5 seconds after typing a letter one by one. So comparing the two graphs, we find the same results with a lot less work.</p>
<p>As an informal poll, I was wondering how many people are using the unofficial tryserver builds that I&#8217;ve been making. There&#8217;s some features like showing keyword searches, restricting searches, etc., that might not make it into Firefox 3 final, but I could potentially start a build near ship time, so you can get Firefox 3 + some extra awesomeness.</p>
<small><a href="http://ed.agadak.net/2008/04/awesomeness-in-beta-5#respond">10 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/04/awesomeness-in-beta-5/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why You Should Write Unit Tests</title>
		<link>http://ed.agadak.net/2008/03/why-you-should-write-unit-tests</link>
		<comments>http://ed.agadak.net/2008/03/why-you-should-write-unit-tests#comments</comments>
		<pubDate>Mon, 31 Mar 2008 16:18:47 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/03/why-you-should-write-unit-tests</guid>
		<description><![CDATA[Requiring unit tests for code review isn&#8217;t the greatest motivation for people to write unit tests. Sure, it tries to make sure unit tests are written, but it doesn&#8217;t give the reason to write them.
In general, I like to ask &#8220;why?&#8221; to figure out why things are done, why they should be done, what are [...]]]></description>
			<content:encoded><![CDATA[<p>Requiring unit tests for code review isn&#8217;t the greatest motivation for people to write unit tests. Sure, it tries to make sure unit tests are written, but it doesn&#8217;t give the reason to write them.</p>
<p>In general, I like to ask &#8220;why?&#8221; to figure out why things are done, why they should be done, what are other ways to achieve the same goal?</p>
<p>I don&#8217;t remembering ever getting an explanation on why there was a requirement. I suppose the obvious answer was that we now have a testing infrastructure, and we don&#8217;t have many unit tests, so you need to write them. But still, that&#8217;s not a great motivation for writing tests.</p>
<p>So, <em>why should you write unit tests</em>?</p>
<ol>
<li>Make sure your code does what you want it to do</li>
<li>Speed up development and optimizations/refactoring</li>
<li>Create better interfaces and functionality</li>
<li>Get other people to use your contribution</li>
<li>Make sure nobody else breaks your feature</li>
</ol>
<p>This isn&#8217;t an exhaustive list, but these are things I&#8217;ve noticed from my own experiences.</p>
<p><b>Make sure your code does what you want it to do</b>. The first reason is somewhat obvious, but it&#8217;s effect isn&#8217;t. I believe one big benefit is that it lets you change how you write code. Specifically, it speeds up your development in that you don&#8217;t <em>have</em> to completely think through what you&#8217;re doing. That might not sound too great, so I&#8217;ll try to give an example.</p>
<p>When working on word boundary matching for the AwesomeBar, I had automated unit tests set up with a set of pages and a set of searches, and it made sure searches matched on word boundaries (like spaces, dots, slashes and not after other characters). I needed to write a string processing utility that matched on word boundaries that would work for standard word boundaries as well as CamelCase and not break search for ideograph languages like Chinese.</p>
<p>I was never one for too much theory, so instead of sitting around and explicitly drawing out all the boundary conditions, I made simple code changes, recompiled, checked if the tests passed. Instead of sitting around for 10 minutes thinking deeply about how to deal with multiple word boundaries in a row, I made a 1 second change and ran the test to see that it passed.</p>
<p>The point there is that you can spend less time trying to reason about if the code will do what you want and just let the computer automatically do the checking. You already specified what the code should do with your test, and the computer can quickly make sure that they pass. This also relates to speeding up development (or perhaps avoiding my impatientness) because I don&#8217;t need to go through the long process of firing up a debug build to make sure my manually typed search terms find the expected pages &#8212; I don&#8217;t even need to make sure I have the right profile with the right set of test pages.</p>
<p><b>Speed up development and optimizations/refactoring</b>. I mentioned speeding up optimizations and refactoring, but the former is basically a special case of the latter. Both tasks are making changes to the code without changing functionality. With automated unit tests set up, you can be sure that your refactoring changes don&#8217;t break expected functionality. For example, as I was optimizing the AwesomeBar to go faster and use less CPU cycles, I relied on the unit tests to make sure searches still provided the same list of urls.</p>
<p>In fact, one of my unit tests caught a bug in my first optimization because I forgot to check for javascript: URIs. The optimization reuses previous search results if the new search begins with the same text as the previous one, but we also do some special processing for javascript: URIs. Namely, we don&#8217;t show javascript: results unless you explicitly type out &#8220;javascript:&#8221; at the beginning of the query. So if you were searching for &#8220;javascript&#8221; and then typed &#8220;javascript:&#8221;, the optimization wouldn&#8217;t have shown any javascript: URIs because the previous result couldn&#8217;t have contained javascript: results.</p>
<p><b>Create better interfaces and functionality</b>. Good APIs are fun to test. I enjoy writing AwesomeBar tests because I just need to provide some search words and a set of expected results. Simple. But you can also have better functionality because the process of writing tests makes you a user of the API. You start thinking about &#8220;what else&#8221; or &#8220;how could this be better.&#8221;</p>
<p>For a might-not-make-it-to-Firefox-3 feature of being able to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395161">restrict results</a> to non-bookmarked pages or forcing matches on the url (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=424557">by default</a>), I wasn&#8217;t sure at first how things should interact if you have multiple &#8220;restricts&#8221; or &#8220;matches&#8221;. By writing the unit tests, I was able to easily look at all possible combinations such as &#8220;must match url and must match title&#8221;. Because I was writing the test, I noticed this potential issue and got it clarified; otherwise, it might have remained a not-well defined feature.</p>
<p><b>Get other people to use your contribution</b>. I like to learn by example, so if I want to use something that I don&#8217;t know how to use, I search for existing uses of it in the codebase. A good description of a class/method is nice and all in the interface description, but seeing it actually used is much more helpful for me. Ideally test cases are written to test representative usages of a feature, so someone looking at the test code should be able to reason about how they should use the interface.</p>
<p>I&#8217;ve written up a couple unit tests for the PluralForm module, and they serve as additional examples of how to use PluralForm. I&#8217;ve written up some <a href="http://developer.mozilla.org/en/docs/Localization_and_Plurals#Developing_with_PluralForm">PluralForm documentation</a> [developer.mozilla.org] on how to use it in Firefox and extensions, but without the unit tests, someone searching for PluralForm would have to rely on the current usage in the Download Manager. And relying on that would make things more confusing as one would have to look through a lot of unrelated-to-PluralForm download manager code.</p>
<p><b>Make sure nobody breaks your feature</b>. You just worked really hard on adding a new feature. You don&#8217;t want it broken. I suppose an alternate motivation is that the blame goes to whoever breaks your test. If you didn&#8217;t have the test, potentially you would be stuck fixing it some weeks/months later. Also, with unit tests, it&#8217;s easier to see how the code is being used, so the person breaking the test should be able to fix it faster.</p>
<p>Tests aren&#8217;t just &#8220;for the future.&#8221; They help fix things now and help you go faster. And if you&#8217;re doing a lot of development and frequently touching the same piece of code such as having a huge stack of patches for a single file, unit tests help make sure patches can be applied without other patches, and if not, you know it wasn&#8217;t going to be safe to &#8220;cherry pick&#8221; a patch out of the stack and check it in.</p>
<p>I&#8217;m sure there are other benefits of writing automated unit tests, but I think this is a good starting list of motivations. Hopefully better than &#8220;why didn&#8217;t you write a test?!&#8221; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
<small><a href="http://ed.agadak.net/2008/03/why-you-should-write-unit-tests#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/why-you-should-write-unit-tests/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why I Worked On Firefox</title>
		<link>http://ed.agadak.net/2008/03/why-i-worked-on-firefox</link>
		<comments>http://ed.agadak.net/2008/03/why-i-worked-on-firefox#comments</comments>
		<pubDate>Sat, 29 Mar 2008 06:22:04 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[UIUC]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/03/why-i-worked-on-firefox</guid>
		<description><![CDATA[Perhaps being stressed out and tired and after having some drinks isn&#8217;t the best time to write blog posts, but this is something I&#8217;ve been thinking about over the last few days. And I suppose in other conditions, I definitely wouldn&#8217;t be as open about this as I probably will be. I&#8217;m not accustomed to [...]]]></description>
			<content:encoded><![CDATA[<p>Perhaps being stressed out and tired and after having some drinks isn&#8217;t the best time to write blog posts, but this is something I&#8217;ve been thinking about over the last few days. And I suppose in other conditions, I definitely wouldn&#8217;t be as open about this as I probably will be. I&#8217;m not accustomed to talking about personal things in person and especially not blogs. I tend to focus on objective things that &#8220;gets things done.&#8221;</p>
<p>So why did I work on Firefox?</p>
<p>Maybe I like to help people. Maybe I just like making things better when I see a problem that I can fix. Maybe I just want the world to be a better place. Or maybe I just like to work long hours. I do all this even if I don&#8217;t get much out of it. I suppose good thing about Firefox is that it&#8217;s open source and anybody can contribute and there are many people to help.</p>
<p>I recently sent Gerv an after-summer-of-code update and only then realized how much I&#8217;ve worked on. How much I wanted to help those people have a better experience. How many problems I saw that I could fix.</p>
<p>Both the download manager and location bar were being changed for the better, but there was so much more work to be done. Just to list a few things, I&#8217;ve added better download manager functionality with cross session resumable downloads, auto-pause/resume on sleep/wake, auto-resume on browser restart/crash, various fixes for saving files and some download status bar work.</p>
<p>Additionally, there&#8217;s the redesigned download manager UI work with the full listing of downloads and the ability to do multi-word search against any text shown in the list, and providing a way to display download progress / speed / times consistently as well some localization support for plural forms. </p>
<p>And of course there&#8217;s the work to make the location bar awesome. I wasn&#8217;t happy with the location bar return seemingly random results, so I decided to make things better. I started with the adaptive learning, but along the way I added in multi-word searching across urls, titles, and tags as well as word boundary matching. I also pushed patches for emphasizing all matches and cleaning up the display to be more compact as well as correct for foreign characters. There are also performance fixes to make results come back faster and render with less work.</p>
<p>Unfortunately, there were costs in making things better for everyone else. I haven&#8217;t been concentrating on my coursework, and my assignments have been partially completed when I turned them in. I&#8217;ve been tired and feeling burned out.</p>
<p>Just last week, I easily spent over 100 hours on Firefox stuff for my 1-week spring break. I wasn&#8217;t catching up on my assignment that was due the week before. Why not? There are still many things that I feel should be fixed.</p>
<p>I suppose I finally couldn&#8217;t take the stress from keeping things in, so I talked / cried / discussed with my Ph.D. advisor about things. He has been very good to me even though I haven&#8217;t focused as much on my research as I should have. Especially that he&#8217;s paying for my research assistantship and my tuition waiver. So I suppose unofficially, all my work on the Download Manager and the AwesomeBar has been funded by my advisor. (Apparently the download manager, location bar, and download manager again are the top 3 favorite features of Firefox 3 at mozillalinks, so I hopefully his money didn&#8217;t go to too much waste.)</p>
<p>But just working long hours isn&#8217;t really that bad. And I never really minded before, so I guess there must be something else.</p>
<p>It might be related to the improportionate amount of effort that I put in and what comes out. For those who followed the adaptive learning work to make the location bar into AwesomeBar, you might have noticed the code was pretty much ready when I first wrote about it in my blog early November. It wasn&#8217;t until a quarter of a year later (and almost 20 versions of the patch &#8212; mostly unbitrotting) that the patch got the appropriate bits twiddled so that it was high enough on the priority list to be reviewed and make it into Firefox 3.</p>
<p>I don&#8217;t think I did anything wrong in the process. I followed the rules and even provided extensive testcases. Perhaps there&#8217;s an issue with the code / review / approval path? For some reason, it just seems strange to me that only after people have done all the work writing the code, creating testcases, and getting reviewed does a final approval decision say yes or no.</p>
<p>It might also be that I try to fix too many things at once. I tend to have 10-20 patches on my mercurial queue stack, and the bases keep changing as things eventually get reviewed and modified. Maybe I&#8217;m creating artificial work unbitrotting myself, but that needs to be done when certain patches are deemed to be more important and I need to pull it from one end of my stack to the other.. Conflicts galore.</p>
<p>I realize it&#8217;s time to ship and changes need to cut back, so the process will have more hoops to jump through. But maybe I wasn&#8217;t expecting so many.</p>
<p>I still have a number of patches ready that add some neat things to the AwesomeBar such as being able to restrict searches to history or bookmarks and forcing matches against the url/title (additionally, you can set it up to force your queries to match against the url by default or only search non-bookmarked items). There&#8217;s also showing keyword queries and searching for strings as well as ignoring the protocol (e.g., &#8220;h&#8221; doesn&#8217;t match Http). Of course there&#8217;s tweaks to the adaptive learning to make it even better. But I suppose those will likely get to Firefox Next.</p>
<p>But back to unexpected hoops and tightening of the review process.. Earlier today, I was trying to make it easier to write download manager *test* code by adding a notification, and it was a very simple change to the download manager code. I simplified and cleaned up one of the testcases, but apparently it&#8217;s not good enough to review without at least 10 more testcases.</p>
<p>Also, I was trying to add in support for multiple-selection in the download manager so you can easily select multiple downloads to delete, pause/resume, etc. I even had a testcase locally that makes sure only selected items were deleted, but apparently the minimum number of things to test would be at least 20 more testcases.</p>
<p>But it&#8217;s getting late, and I suppose I&#8217;m feeling better already.. a little. Perhaps enough to even stick in an emotion <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Maybe I&#8217;ll feel good enough by the morning to finally post about the new awesomeness of the AwesomeBar for Beta 5.. definitely with more pictures too. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<small><a href="http://ed.agadak.net/2008/03/why-i-worked-on-firefox#respond">9 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/why-i-worked-on-firefox/feed</wfw:commentRss>
		</item>
		<item>
		<title>Using the AwesomeBar</title>
		<link>http://ed.agadak.net/2008/03/using-the-awesomebar</link>
		<comments>http://ed.agadak.net/2008/03/using-the-awesomebar#comments</comments>
		<pubDate>Wed, 12 Mar 2008 06:43:12 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/03/using-the-awesomebar</guid>
		<description><![CDATA[How are people using the AwesomeBar in Firefox 3 Beta 4 [mozilla.com]? (Please comment. [ed.agadak.net])
There have been a lot of positive comments already: searching for multiple words like the domain plus title, adaptive learning that immediately brings previously selected results to the top.
But there are a few that say the desired results aren&#8217;t showing up. [...]]]></description>
			<content:encoded><![CDATA[<p>How are people using the AwesomeBar in <a href="http://www.mozilla.com/en-US/firefox/3.0b4/releasenotes/#download">Firefox 3 Beta 4</a> [mozilla.com]? (<a href="http://ed.agadak.net/2008/03/using-the-awesomebar#respond">Please comment.</a> [ed.agadak.net])</p>
<p>There have been a lot of positive comments already: searching for multiple words like the domain plus title, adaptive learning that immediately brings previously selected results to the top.</p>
<p>But there are a few that say the desired results aren&#8217;t showing up. I&#8217;m not sure if they haven&#8217;t tried Beta 4, or if they&#8217;re just commenting based on previous versions. Or maybe they&#8217;ve installed extensions that revert the look of the location bar and haven&#8217;t really tried the new features.</p>
<p>Common complaints include typing &#8220;news&#8221; and getting results that match in the title instead of the url. However, that should be instantly fixed when the user selects the desired result from the list after typing out more of the url. Next time typing &#8220;n&#8221; will have the previously-selected page at the very top.</p>
<p>Below is a sample thought process that could only be possible with the AwesomeBar*.</p>
<p><i>I&#8217;m trying to find a <b>news</b> article I read yesterday..</i></p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/news.png" width="450" height="260" alt="Searching for “news”" title="Searching for “news”" style="border: 0;" />
<div class="imagecaption">The first result has news matching at the beginning of the url</div>
</div>
</div>
<p><i>Oh, it&#8217;s matching a lot of pages that I&#8217;ve tagged. I know it&#8217;s something in my <b>history</b> that I haven&#8217;t bookmarked.</i></p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/news-.png" width="450" height="260" alt="Searching for “news ^”" title="Searching for “news ^”" style="border: 0;" />
<div class="imagecaption">Restrict results to non-bookmarked pages</div>
</div>
</div>
<p><i>Much better. I actually see some <b>Fire</b>fox results that I was looking for to begin with. Let&#8217;s filter out the pages I don&#8217;t want.</i></p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/news-fire.png" width="450" height="260" alt="Searching for “news ^ fire”" title="Searching for “news ^ fire”" style="border: 0;" />
<div class="imagecaption">History pages that match the url and title</div>
</div>
</div>
<p><i>Beta 2? Beta 3? I just want <b>beta 4</b> news articles!</i></p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/news-fire-beta-4.png" width="450" height="260" alt="Searching for “news ^ fire “beta 4″" title="Searching for “news ^ fire “beta 4″" style="border: 0;" />
<div class="imagecaption">String matches for pairs of words like &#8220;beta 4&#8243;</div>
</div>
</div>
<p><i>Perfect! I love the awesomebar! <span style="font-size: smaller;">Hehe, thanks shaver. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></i></p>
<p>* The screenshots were taken with a trunk build (<a href="https://build.mozilla.org/tryserver-builds/2008-03-15_16:00-edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey/edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey-firefox-try-win32.zip">win32</a>, <a href="https://build.mozilla.org/tryserver-builds/2008-03-15_16:00-edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey/edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey-firefox-try-mac.dmg">os x</a>, <a href="https://build.mozilla.org/tryserver-builds/2008-03-15_16:00-edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey/edward.lee@engineering.uiuc.edu-camelBoundary.commaTags.colonKey-firefox-try-linux.tar.bz2">linux</a> [build.mozilla.org]) that contain some patches: <span style="font-size: smaller;"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=393678" title="Bug 393678 - location bar autocomplete should take word boundaries in account">393678</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=419656" title="Bug 419656 - Location bar instrumentation misses unencoded urls">419656</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=417441" title="Bug 417441 - Bookmark cannot handle %2B ('+' sign) when accessed by its tag">417441</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=415397" title="Bug 415397 - URLs with (un)escaped characters can't be deleted">415397</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=421315" title="Bug 421315 - Just re-use autocomplete richlistitems instead of re-adjusting for no purpose">421315</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=407946" title="Bug 407946 - emphasize all matching text in title and url, not just the first match in title and url">407946</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=415403" title="Bug 415403 - Show matches for all search words for location bar autocomplete">415403</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=418257" title="Bug 418257 - Show what part of which tags match for urlbar autocomplete">418257</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=392143" title="Bug 392143 - show keywords as url bar autocomplete choices">392143</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=249468" title="Bug 249468 - Add all bookmark keywords to location bar autocomplete drop-down list">249468</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395161" title="Bug 395161 - make it possible to restrict the url bar autocomplete results to bookmarks, tags, or history entries">395161</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=407204" title="Bug 407204 - adjust the title and url text sizes">407204</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=406257" title="Bug 406257 - reduce the number of rows in url bar autocomplete from 10 to 6">406257</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=420437" title="Bug 420437 - Search and emphasize quoted strings with spaces">420437</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=414326" title="Bug 414326 - Use DownloadUtils for software update downloads">414326</a> [bugzilla.mozilla.org]</span>. Feel free to try it out and see if it finds results better or just looks better (6 rows and smaller font size).</p>
<p><i>* edited downloads to include word boundary matching</i></p>
<small><a href="http://ed.agadak.net/2008/03/using-the-awesomebar#respond">31 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/using-the-awesomebar/feed</wfw:commentRss>
		</item>
		<item>
		<title>Beyond Awesome</title>
		<link>http://ed.agadak.net/2008/03/beyond-awesome</link>
		<comments>http://ed.agadak.net/2008/03/beyond-awesome#comments</comments>
		<pubDate>Mon, 03 Mar 2008 23:56:12 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/03/beyond-awesome</guid>
		<description><![CDATA[It&#8217;s been exactly four months since I first wrote about the AwesomeBar [ed.agadak.net], and how it would become awesome with adaptive learning, which makes Firefox give you the pages that you want with just a single letter typed in the location bar.
Firefox 3 Beta 4 will have this feature.  Everyone will be able to [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been exactly four months since I first wrote about the <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">AwesomeBar</a> [ed.agadak.net], and how it would become awesome with adaptive learning, which makes Firefox give you the pages that you want with just a single letter typed in the location bar.</p>
<p>Firefox 3 Beta 4 will have this feature. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> Everyone will be able to play with it in just a couple weeks.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/dropdown.png" width="450" height="234" alt="Adapted dropdown" title="Adapted dropdown" style="border: 0;" />
<div class="imagecaption">Adaptive learning puts your most selected results first</div>
</div>
</div>
<p>The adaptive learning even works for the drop down menu without typing any words. So those who prefer using the mouse can benefit as well. But if you ever do select a page after typing some words, it will also learns to show those results when you click the auto-complete drop-down.</p>
<p>But that&#8217;s not all that&#8217;s new in Beta 4. There has been many improvements to the location bar since Places landed, and here&#8217;s a short list of changes since the first beta.</p>
<p>Beta 1: Search page titles and urls - not just the start of a domain; Match page tags<br />
Beta 2: Two line view with title first; Emphasize first match in title then url<br />
Beta 3: Global frecency for better ranking; Search bookmarked pages; Emphasize first match in both title and url; Unescape url-encoded URLs</p>
<p>Outside of adaptive learning for Beta 4, there&#8217;s also the ability to <a href="http://ed.agadak.net/2008/01/another-way-to-awesome">search with multiple words</a> [ed.agadak.net]. I first wrote about the feature letting you find pages that match the domain and a word from the title.</p>
<p>It&#8217;s even better. You can also match against the tags you&#8217;ve added to pages, so you can just treat the tags as extra text in the page&#8217;s title, except they&#8217;re common across multiple pages. This means you can type a tag, a domain, and part of the title to get the exact page you want. As a bonus, the pages are treated like any other page, so they aren&#8217;t specially placed at the top of the list, and you don&#8217;t even need to type out the whole tag in the same order you tagged the page to match it. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So what else is there?</p>
<p>Well, it&#8217;s already Beta 4, and there isn&#8217;t much time left to keep adding features. But I&#8217;ve got some neat things that are somewhat geared towards more advanced users. Whether or not they make it in for the final version of Firefox 3 is in the air. I&#8217;ve already implemented them, so we&#8217;ll just need to see if people have time to review and approve the changes.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/restrict-star.png" width="450" height="260" alt="Show tags and restrict to starred" title="Show tags and restrict to starred" style="border: 0;" />
<div class="imagecaption">Only search pages with a star</div>
</div>
</div>
<p>First up is being able to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395161">restrict search to certain pages</a> [bugzilla.mozilla.org] such as those that you&#8217;ve bookmarked, which have a star in the drop-down. You can type a single &#8220;<tt>*</tt>&#8221; at the beginning of the search and do the multi-word search as normal, except only bookmarked pages are searched. Also, you might notice that pages will <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=418257">show which tags they have</a> [bugzilla.mozilla.org] and where they match.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/restrict-history.png" width="450" height="260" alt="Restrict to history" title="Restrict to history" style="border: 0;" />
<div class="imagecaption">Only search through history</div>
</div>
</div>
<p>On a similar note, you can also use &#8220;<tt>^</tt>&#8221; to find pages only from your history &mdash; pages that have not yet been given a star. I find myself using this type of search without additional search terms to find pages that I&#8217;ve frecently visited, and perhaps I would want to bookmark and tag them. One last special search is with &#8220;<tt>+</tt>&#8221; that restricts the search to tagged pages. Of course you can customize the character you want to type for the special search, so you can make it &#8220;<tt>!</tt>&#8221; or even &#8220;<tt>z</tt>&#8221; or more verbose &#8220;<tt>tags</tt>”. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/keyword.png" width="450" height="260" alt="Keyword search" title="Keyword search" style="border: 0;" />
<div class="imagecaption">Show the keyword search</div>
</div>
</div>
<p>Another feature helps show a powerful feature of Firefox. Keyword searches. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Basically, they&#8217;re special bookmarks that you can create by opening the context menu on any search box of a website. You give the search a keyword, and then in the location bar, you type that keyword and the terms that you would have put into the box on the web page. You can easily search for content such as Wikipedia pages, YouTube videos, IMDB movie information, and more.</p>
<p>Except now, you get a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=392143">keyword auto-complete entry</a> [bugzilla.mozilla.org] showing which page you&#8217;ll be going to. Additionally, you can even reuse the same keyword for multiple searches because now you can pick which one gets used.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/quoted-search.png" width="450" height="104" alt="String searches" title="String searches" style="border: 0;" />
<div class="imagecaption">Search with phrases</div>
</div>
</div>
<p>Sometimes treating each word as a separate search isn&#8217;t quite enough, and what you really want is two words right next to each other. Perhaps you want to find that page that tells you how to bug mozzy <i>(&hellip; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</i>, but all your searches for &#8220;bug moz&#8221; finds bugzilla bugs! Just put the phrase in quotes and you can <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=420437">search quoted strings</a> [bugzilla.mozilla.org]!</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/03/emphasize-all.png" width="450" height="260" alt="Emphasize all search terms" title="Emphasize all search terms" style="border: 0;" />
<div class="imagecaption">Emphasize all matches for all words</div>
</div>
</div>
<p>You might have noticed in the previous screenshots, multiple parts of the result get emphasized. For Beta 4, it&#8217;ll only emphasize words that match as the phrase, so most of the time, if you type multiple words, it won&#8217;t emphasize anything. The screenshot above shows &#8220;<tt>a</tt>&#8221; <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=407946">matching in all places</a> [bugzilla.mozilla.org], not just the first. Additionally, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=415403">all words/phrases</a> [bugzilla.mozilla.org] are treated separately when showing matches.</p>
<p>For the very observant crowd, you might have already noticed the screenshots have a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=407204">smaller font size for the page title</a> [bugzilla.mozilla.org]. But additionally, the number of rows has been <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=406257">reduced from 10 to 6</a> [bugzilla.mozilla.org]. Hopefully, being able to find pages with multiple words against the title, url, and tags in additional adaptive learning will lessen the need to show 10 results by default. There will be fewer results for you to scan, but you can also filter pages more easily by typing another word that you know to be in the title or url.</p>
<p>We&#8217;ve come a long way since Firefox 2, and we&#8217;re getting really close to shipping Firefox 3. But hopefully there&#8217;ll be some time to get in at least some of these features. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<small><a href="http://ed.agadak.net/2008/03/beyond-awesome#respond">22 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/beyond-awesome/feed</wfw:commentRss>
		</item>
		<item>
		<title>Plurals, Downloads, Statuses for Yous</title>
		<link>http://ed.agadak.net/2008/01/plurals-downloads-statuses-for-yous</link>
		<comments>http://ed.agadak.net/2008/01/plurals-downloads-statuses-for-yous#comments</comments>
		<pubDate>Sun, 27 Jan 2008 19:54:13 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/01/plurals-downloads-statuses-for-yous</guid>
		<description><![CDATA[Now that the bug to show days, hours, minutes, seconds for download times [bugzilla.mozilla.org] has landed, there&#8217;s some new neat things to use to help support localization of plural strings [ed.agadak.net] as well as making download progress texts consistent.
PluralForm for Developers
To get the correct plural form of a word in Firefox or an extension, the [...]]]></description>
			<content:encoded><![CDATA[<p>Now that the bug to show <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=394516">days, hours, minutes, seconds for download times</a> [bugzilla.mozilla.org] has landed, there&#8217;s some new neat things to use to <a href="http://ed.agadak.net/2007/12/one-potato-two-potato-three-potato-four">help support localization of plural strings</a> [ed.agadak.net] as well as making download progress texts consistent.</p>
<p><b><u>PluralForm for Developers</u></b><br />
To get the correct plural form of a word in Firefox or an extension, the javascript file just needs to import the module and call a method.</p>
<blockquote><p><code>// Load the module at the top of the javascript file<br />
let Cu = Components.utils;<br />
Cu.import("resource://gre/modules/PluralForm.jsm");<br />
// Get "word" or "words" based on the number<br />
let word = PluralForm.get(number, "word;words");</code></p></blockquote>
<p>In this English example, there&#8217;s only two words, but other languages might need fewer or more. More information about what string to give to <tt>PluralForm.get()</tt> for various languages is on the devmo wiki page <a href="http://developer.mozilla.org/en/docs/Localization_and_Plurals">Localization and Plurals</a> [developer.mozilla.org].</p>
<p>So anywhere in your code you&#8217;re doing something like..</p>
<blockquote><p><code>let string = number == 1 ? singular : plural;</code></p></blockquote>
<p>.. you might want to consider using the PluralForm module.</p>
<p><b><u>PluralForm for Localizers</u></b><br />
To help localizers make sure they&#8217;re correctly localizing the plural strings, I&#8217;ve created a <a href="http://ed.agadak.net/firefox/pluralForm-checker.xpi">pluralForm Checker extension</a> [ed.agadak.net xpi 3.6 KB].</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/pluralform-checker03.png" width="450" height="400" alt="pluralForm Checker v0.3" title="pluralForm Checker v0.3" style="border: 0;" />
<div class="imagecaption">Strings can be checked to have the right word for a corresponding value</div>
</div>
</div>
<p>With this tool, localizers can list the property files and properties that have plural forms to check. Each string is split up into its appropriate plural form and there&#8217;s a sample output display at the bottom for the first few numbers of each plural form.</p>
<p>Notice that &#8220;words&#8221; don&#8217;t necessarily have to be a single word.</p>
<blockquote><p><code>pausedDownloads=One paused download;#1 paused downloads</code></p></blockquote>
<p>Of course, for a language that has multiple values that are treated as singular (1, 11, etc.), the first paused string can&#8217;t be hard coded to &#8220;One&#8221;.</p>
<p><b><u>DownloadUtils</u></b><br />
In fixing the bug, there is now also a <a href="http://mxr.mozilla.org/mozilla/source/toolkit/mozapps/downloads/src/DownloadUtils.jsm">DownloadUtils.jsm module</a> [mxr.mozilla.org].</p>
<p>This provides some useful methods for downloads such as displaying file sizes, transfer times, and download locations. Once again, it&#8217;s loaded just like PluralForm.jsm using <tt>Cu.import()</tt>, and it can be used in Firefox or extensions.</p>
<p>For example, right now the automatic updates dialog still uses the old download strings from long before: &#8220;1.2 of 8.4 MB at 146 KB/sec; 00:32 remain&#8221;. We could use DownloadUtils to make it consistent with the redesigned Download Manager for Firefox 3 to be &#8220;32 seconds remaining &mdash; 1.2 of 8.4 MB (146 KB/sec)&#8221;. This mean it would also get the benefits of being able to display &#8220;days, hours, minutes, seconds&#8221; and &#8220;GB, MB, KB, bytes&#8221; as well as time smoothing. <i>(Hopefully updates never take that long or are that big.. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</i></p>
<p>This DownloadUtils.jsm module helps simply implementing download related displays such as the new <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=402278">download activity summary in the status bar</a> [bugzilla.mozilla.org].</p>
<p><b><u>Download Activity Status Bar</u></b><br />
Thanks to Michael Schonfeld, we can now monitor downloads from the status bar! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Michael first uploaded a patch to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=402278">the bug</a> [bugzilla.mozilla.org] out of nowhere about a month ago. I had him wait on me because he would be running into issues with plural forms and download strings. After I landed the patches for PluralForm and DownloadUtils, Michael was able to quickly update his patch in about an hour to be ready for the l10n string freeze. <i>(Additionally, the original patch went from 22.13 KB to 5.76 KB just to show how much the modules simplified things. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</i></p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/downloadstatus.thumbnail.png" width="450" height="200" alt="Download Activity Status" title="Download Activity Status" style="border: 0;" />
<div class="imagecaption">A brief summary of downloads for easy user monitoring</div>
</div>
</div>
<p>Personally, I&#8217;ll be turning off the preference that shows the download manager when a download starts. I can now open files without having an extra window pop up while still knowing how much time it&#8217;ll take. As for saving files, I can easily alt-click links to save many files at once without being interrupted with the download manager flashing.</p>
<small><a href="http://ed.agadak.net/2008/01/plurals-downloads-statuses-for-yous#respond">5 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/01/plurals-downloads-statuses-for-yous/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
