<?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>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>
	<lastBuildDate>Fri, 04 Sep 2009 17:38:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Weave 0.3 M5 (Weekly 2009/11-3)</title>
		<link>http://ed.agadak.net/2009/03/weave-03-m5-weekly-200911-3</link>
		<comments>http://ed.agadak.net/2009/03/weave-03-m5-weekly-200911-3#comments</comments>
		<pubDate>Wed, 18 Mar 2009 03:37:29 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[New Tab]]></category>
		<category><![CDATA[Status]]></category>
		<category><![CDATA[Weave]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=465</guid>
		<description><![CDATA[We released Weave 0.3 M5 last week March 12th, so I got in a bit of hacking for the first half of the week. This initially involved more deleting code than adding code though, but I’m probably just being obsessive-compulsive about keeping things clean and orderly. But the more interesting part is finally getting some [...]]]></description>
			<content:encoded><![CDATA[<p>We released Weave 0.3 M5 last week March 12th, so I got in a bit of hacking for the first half of the week. This initially involved more deleting code than adding code though, but I’m probably just being obsessive-compulsive about keeping things clean and orderly. But the more interesting part is finally getting some initial UI for helping users get out of a &#8220;broken state&#8221;. I then got to fixing things up for the new text view for About:Tab by refactoring code from the thumbnail view.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Weave Debugging Sync UI</tt></p>
<p>The initial debugging sync UI is to help users get out of situations where the server might contain incorrectly encrypted data (perhaps you accidentally used two different passphrases) or some other reason your local data isn&#8217;t syncing to the weave server. So for now, you can use the buttons to wipe the server data, wipe local data and resync with the server, or wipe remote data and have them resync with the server.</p>
<div id="attachment_493" class="wp-caption aligncenter" style="width: 185px"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/debugging.png" alt="Initial Weave debugging UI to control syncing" title="Weave Debugging" width="175" height="175" class="size-full wp-image-493" /><p class="wp-caption-text">Initial Weave debugging UI to control syncing</p></div>
<p>It&#8217;s kind of neat watching the local wipe clear out the bookmarks toolbar and then have it fill in with the bookmarks encrypted on the server. But don&#8217;t get too attached to the interface. We&#8217;ll be switching it to be more user friendly such as having diagrams of which way you&#8217;re syncing data (two-way sync, one way to your machine, one way to other machines) as well as being able to select which pieces of data to push out.</p>
<p>But this initial step is just getting the right logic to perform the various syncs. For example, I created a way to have each data engine reset their local temporary data without completely wiping out permanent data. Previously, there was just a single resetEngine method, but some engines treated that as wiping. There&#8217;s a whole set of service calls to <a href="http://hg.mozilla.org/labs/weave/rev/72029d49cd62">reset and wipe the local/remote client</a> and server now.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Weave Refactoring</tt></p>
<p>The first thing I cleaned up was the syncing logic of <a href="http://hg.mozilla.org/labs/weave/rev/f94b5f283397">choosing which engines to sync</a>. Right now weave syncs all engines, but some previous version used to sync engines by thresholds. The threshold syncing was actually handled by a separate code path, but it did pretty much the same thing as a full sync. So I just combined the two and cleaned up the callers and fixed some divergences in the code. There were potential bugs in the unused threshold sync because we&#8217;ve only been updating the full sync code.</p>
<p>Another refactoring was deciding if a <a href="http://hg.mozilla.org/labs/weave/rev/bec99330b82b">sync should run and if we should schedule a sync</a>. Both of these were basically checking a number of statuses such as logged in, enabled, etc.; so I just combined them to simplify the logic for the two. This made me feel much cleaner about making weave not try syncing when in <a href="http://hg.mozilla.org/labs/weave/rev/b622f51dbb1b">private browsing or offline</a> &#8212; I only had to make changes to the unified &#8220;check sync&#8221; logic instead of duplicating code all over the place.</p>
<p>One last cleanup I got in was switching code to use the <a href="http://hg.mozilla.org/labs/weave/rev/f88cf80fd101">lazy services attached to the Weave.Svc object</a>. Instead of having each object differently implementing their own lazy services, they could just re-use the lazy property that might already have gotten the service. Some of the original code checked if a &#8220;private&#8221; instance existed and returned that, others had a getter define another getter with a local closure to capture the instance, and some just grabbed the service directly. Instead of having all these class ids and interfaces scattered throughout the code, the centralized code can efficiently implement laziness as well as simplify debugging. </p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">New Tab Text View</tt></p>
<p>After looking through the initial feedback for the new tab page, Aza made a <a href="http://ed.agadak.net/2009/03/new-tab-text-view-customizations">text-focused view</a> for the new tab page, which got rid of all the thumbnails that were slow and not too useful. This was a whole separate page that had its own logic, but I cleaned things up by refactoring the shared data logic between the thumbnail and text views.</p>
<p>It turns out this is a good way to figure out how code should be structured to be reusable with different views. For example, the code for picking out which sites to show as well as their accompanying feeds were already in their own separate modules, but various clean-up code that could be used by both could be pushed to the data source as well.</p>
<p>However, I did run into an issue moving &lt;script&gt; code into a Cu.import module. Apparently plain unicode characters work just fine in the script code, but when imported, they need to be escaped like \u2013 for &ndash;. So I just <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/rev/13aabcce5ba2#l2.17">escaped them when sharing the subtitle trimming code</a> between the two views.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">New Tab Customization</tt></p>
<p>Another feature added recently was the ability to persist site removal. A lot of people want to customize their site list, so now you can just keep removing sites until you find the one you want. This actually ended up being fairly simple to implement as the back-end site storage just kept an array of sites to use, so <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/rev/e578c454274c">modifying that structure</a> allowed it to persist across new tabs.</p>
<p>Also, by reusing that site storage, we allow <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/rev/d9b268f0a477">configuration of the number of feeds</a> (or none) for each site, and that gets persisted across new tabs. With all this data in that shared storage, it shouldn&#8217;t be hard to get cross-browser data. All that needs to be done is to write the data out to disk, perhaps in a preference. Javascript now has a handy JSON object to stringify and parse json objects, so writing and reading the array is easy.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">New Tab Performance</tt></p>
<p>One last thing in terms of performance is that both sites and feeds are being prefetched on browser load. This is done asynchronously (yay Shawn!) so it doesn&#8217;t block the main thread which handles drawing and UI. The sites fetching code needed to be <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/rev/70b107b1c32d">switched to use async queries</a>, but that just needed some code restructuring. Instead of using a return value right away, pass the site getter a callback that gives the result. So for prefetching, the callback is used to <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/rev/f08b980a4c66">trigger yet another async query</a>, but this time for feeds. <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/2009/03/weave-03-m5-weekly-200911-3#respond">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/03/weave-03-m5-weekly-200911-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Tab Text View &amp; Customizations</title>
		<link>http://ed.agadak.net/2009/03/new-tab-text-view-customizations</link>
		<comments>http://ed.agadak.net/2009/03/new-tab-text-view-customizations#comments</comments>
		<pubDate>Tue, 17 Mar 2009 04:59:45 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[New Tab]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=454</guid>
		<description><![CDATA[We&#8217;ve been busy updating the New Tab add-on, About:Tab. We made it available a couple weeks back and plenty of new changes are based on the useful feedback in the comments section and elsewhere.
One big change is that we&#8217;ve switched to a more text-focused view. Instead of having gray thumbnails that aren&#8217;t too recognizable to [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been busy updating the <a href="http://ed.agadak.net/2009/03/abouttab-new-tab-page-from-mozilla-labs">New Tab add-on, About:Tab</a>. We made it available a couple weeks back and plenty of new changes are based on the useful feedback in the comments section and elsewhere.</p>
<p>One big change is that we&#8217;ve switched to a more text-focused view. Instead of having gray thumbnails that aren&#8217;t too recognizable to you, we focus more on the site&#8217;s icon that you normally see in tabs. We can have a cleaner display for the site&#8217;s name yet still make it easy to click (basically anywhere) in that site&#8217;s box. Also, instead of being overloaded by too many feeds you don&#8217;t want, the default is now 3 and there&#8217;s more breathing room.</p>
<div id="attachment_455" class="wp-caption aligncenter" style="width: 485px"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/customize-new-tab.png" alt="New text-based view for new tabs with customizations on the side" title="Customize New Tab" width="475" height="400" class="size-full wp-image-455" /><p class="wp-caption-text">New text-based view for new tabs with customizations on the side</p></div>
<p>Another big change is customizability. A lot of people want to be able to reorder the list and get rid of things they don&#8217;t want. The initial release allowed you to drag things up and down, but it didn&#8217;t save that ordering, but now it does (for just the current browsing session, for now). You can now remove sites by clicking the <u>edit</u> text then de-selecting the checkbox (where the site&#8217;s icon would be) then confirming to <u>remove</u> the site.</p>
<p>Some people didn&#8217;t really want feeds for some sites, but for other sites, the feeds were very useful. You can now get rid of feeds by clicking edit and dropping the number of items shown to 0. (Just pretend the 2 radio buttons were actually buttons with &#8220;-&#8221; and &#8220;+&#8221;&#8230; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) After adjusting the length to what you want, you can click on <u>save</u>.</p>
<p>As a bonus for comparison, you can hit the asterisk (∗) at the bottom corner of the screen to switch to the old thumbnail view. It uses the same data as the text version, so customizations you do on the text view will show up on the thumbnail view. It&#8217;ll even remember which view you used last, so next time you open a tab, it&#8217;ll show the right one. But just to note, we&#8217;re focusing more on the text view right now, so there will be features missing from the thumbnail view.</p>
<p>But we&#8217;re still focusing on speed and streamlining the behavior so that you don&#8217;t need to do much customization after using it for a bit. We now prefetch sites and their feeds, so the new tab opens up much faster, and the feeds will automatically get the newest information from time to time. Also, some have asked to be able to customize which feeds are shown, but if we can pick the right feed all the time, that saves the extra step. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For the official Mozilla Labs post by Aza, check out <a href="http://labs.mozilla.com/2009/03/firefox-new-tab-next-iteration/">Firefox New Tab: Next Iteration</a> [labs.mozilla.com]. Please try out the <a href="https://people.mozilla.com/~dmills/abouttab/abouttab-latest.xpi">latest version of About:Tab</a> [people.mozilla.com] and keep giving useful feedback.</p>
<p>Keep track of comments, bug fixes, code commits at <a href="http://newtab.agadak.net/">Planet New Tab</a>! [newtab.agadak.net]</p>
<small><a href="http://ed.agadak.net/2009/03/new-tab-text-view-customizations#respond">11 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/03/new-tab-text-view-customizations/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>About:Tab Sprint (Weekly 2009/10-2)</title>
		<link>http://ed.agadak.net/2009/03/abouttab-sprint-weekly-200910-2</link>
		<comments>http://ed.agadak.net/2009/03/abouttab-sprint-weekly-200910-2#comments</comments>
		<pubDate>Tue, 10 Mar 2009 14:24:26 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[New Tab]]></category>
		<category><![CDATA[Status]]></category>
		<category><![CDATA[UIUC]]></category>
		<category><![CDATA[Weave]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=427</guid>
		<description><![CDATA[For my first week working remotely from Champaign, I focused mostly on the About:Tab sprint, but I got in some time for other Labs projects like Weave and the Design Challenge.
I&#8217;ve already written about the About:Tab initial prototype release that provides a streamlined new tab page that needs no configuration, so I&#8217;ll mention specifically what [...]]]></description>
			<content:encoded><![CDATA[<p>For my first week working remotely from Champaign, I focused mostly on the About:Tab sprint, but I got in some time for other Labs projects like Weave and the Design Challenge.</p>
<p>I&#8217;ve already written about the <a href="http://ed.agadak.net/2009/03/abouttab-new-tab-page-from-mozilla-labs">About:Tab</a> initial prototype release that provides a streamlined new tab page that needs no configuration, so I&#8217;ll mention specifically what I worked on: frecency site listing, thumbnails, feeds, and predicting behavior.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">About:Tab Sites</tt></p>
<p>The site listing was the easiest part as I&#8217;ve already had plenty of experience with the Places database with the Location Bar for Firefox 3 and Auto Dial. The query I used is actually quite different from the existing queries as it focuses on finding top pages of sites instead of just any top-frecency pages. At one point I was tempted to also show related pages of that site similar to <a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future">EdBrowser&#8217;s Site Launcher</a>, but Beltzner set us back on track of quickly creating a prototype. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>For those using About:Tab, you might have noticed you can drag the sites around, but that doesn&#8217;t actually do anything. (Actually, it&#8217;s useful for preparing screenshots..) I used <a href="http://jqueryui.com/demos/sortable/">jQuery UI&#8217;s Sortable</a> [jqueryui.com] to let things get dragged around. This was actually the first time I used a framework like jQuery, so I had to do a lot of digging around the <a href="http://docs.jquery.com/Core">API Documentation</a> [docs.jquery.com]. So if you look through the <a href="http://hg.mozilla.org/users/dmills_mozilla.com/about-tab/file/tip/chrome/content/tab.html">mercurial code repository</a> [hg.mozilla.org], you&#8217;ll see plenty of chained <tt>$()</tt>s.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">About:Tab Thumbnails</tt></p>
<p>I had some trouble coding up the thumbnails as I kept thinking about how to efficiently grab thumbs and save them, but then I realized it was just a prototype, so for now it just loads the thumbnails once and saves them in memory for the session. This turns out to work pretty well as the site listing doesn&#8217;t change much and the thumbnails are just there to help remind you &#8220;yes, this is the site I want&#8221; as after a while, it should be muscle memory for going to site you want.</p>
<div id="attachment_447" class="wp-caption aligncenter" style="width: 410px"><a href="http://ed.agadak.net/gray.xhtml"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/gray-cake.png" alt="Testing grayscale filters on cake!" title="Grayscale Cake" width="400" height="126" class="size-full wp-image-447" border="0"/></a><p class="wp-caption-text">Testing grayscale filters on cake!</p></div>
<p>I also got to play around with SVG to make the thumbnails gray until hovered. I found roc&#8217;s post on <a href="http://weblogs.mozillazine.org/roc/archives/2008/06/applying_svg_ef.html">applying SVG effects to HTML</a> [weblogs.mozillazine.org] and quickly put together <a href="http://ed.agadak.net/gray.xhtml">my own example</a>. I had some troubles getting it to work in about:tab because the about: protocol doesn&#8217;t support #fragments, but because we clear out the location bar anyway, I decided to switch the page to just use the chrome:// URI.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">About:Tab Feeds</tt></p>
<p>A lot of the heavy lifting of automatically finding and tracking feeds was straight from <a href="http://www.toolness.com/wp/?p=158">Atul&#8217;s Ambient News</a> [toolness.com]. The main part I worked on was grabbing feeds for just the corresponding sites shown instead of showing any feed from top sites. Here I used an asynchronous SQLite query to get the feed data, so that&#8217;s part of the reason why feeds slowly fade in after opening a new tab.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">About:Tab Predicting Behavior</tt></p>
<p>There already is some behavior predicting in the prototype like suggesting undo closed tab and searching for addresses, but I&#8217;m actually working on something separate.. predicting where you would want to go next based on where you&#8217;ve already been. The Places backend already remembers your history to help decide which pages to show in the Location Bar, so mining useful data like starting pages is totally possible.</p>
<p>This functionality isn&#8217;t in the initial prototype, but I&#8217;ve got some results that seem promising.. at least for my own browsing history, so we&#8217;ll figure out a way to show this information to the user. The ability for Firefox to accurately provide useful pages is pretty neat but kinda creepy at the same time..</p>
<p>For example, after searching for &#8220;weather champaign,&#8221; it would suggest the GPS-tracking bus results. Or after going to <a href="http://air.mozilla.com/">Air Mozilla</a> [air.mozilla.com], it knows that I open up the <a href="https://wiki.mozilla.org/WeeklyUpdates">Weekly Status Updates</a> [wiki.mozilla.com]. Or when I go to one news site, I frequently go to other news sites.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Weave &#038; Design Challenge</tt></p>
<p>For Weave, I&#8217;ve got a number of patches in the pipeline for Milestone 5 such as being able to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480057">&#8220;start over&#8221;</a> as well as automatically <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=481345">disabling Weave</a> while offline and in private browsing. Other simple patches have already landed like <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=481873">clearing failed login notifications</a> after a successful login as well as allowing <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=443005">right-clicks</a> on the Weave statusbar icon.</p>
<p>In terms of the <a href="http://labs.mozilla.com/2009/01/introducing-the-design-challenge/">Design Challenge</a> [labs.mozilla.com], I figured that while I&#8217;m working remotely in Champaign, it would be good for me to reach out to the University of Illinois&#8217; HCI group. So I&#8217;ll be talking with some of my former professors like <a href="http://social.cs.uiuc.edu/people/kkarahal.html">Karrie Karahalios</a> [social.cs.uiuc.edu] who focuses on social computing.</p>
<small><a href="http://ed.agadak.net/2009/03/abouttab-sprint-weekly-200910-2#respond">5 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/03/abouttab-sprint-weekly-200910-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>About:Tab (New Tab Page From Mozilla Labs)</title>
		<link>http://ed.agadak.net/2009/03/abouttab-new-tab-page-from-mozilla-labs</link>
		<comments>http://ed.agadak.net/2009/03/abouttab-new-tab-page-from-mozilla-labs#comments</comments>
		<pubDate>Fri, 06 Mar 2009 00:53:39 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[New Tab]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=403</guid>
		<description><![CDATA[Mozilla Labs has a new prototype for you to try out &#8212; About:Tab [people.mozilla.com]. (Make sure you&#8217;re running Firefox 3.1 [mozilla.com] or newer!)
With this add-on, you get a listing of sites you frequently visit with thumbnails and feed items instead of a blank white page on opening a new tab. These sites are shown along [...]]]></description>
			<content:encoded><![CDATA[<p>Mozilla Labs has a new prototype for you to try out &#8212; <a href="https://people.mozilla.com/~dmills/abouttab/abouttab-latest.xpi">About:Tab</a> [people.mozilla.com]. (Make sure you&#8217;re running <a href="http://www.mozilla.com/en-US/firefox/3.1b2/releasenotes/">Firefox <b>3.1</b></a> [mozilla.com] or newer!)</p>
<p>With this add-on, you get a listing of sites you frequently visit with thumbnails and feed items instead of a blank white page on opening a new tab. These sites are shown along the far-right edge of the page to avoid interrupting your behavior if you just want to type in the site you want to go to.</p>
<p>You don&#8217;t need to manually bookmark sites or pick pages or even subscribe to feeds! The new tab page is smart enough to figure out which sites you frequently go to and shows related items like feeds.</p>
<div id="attachment_405" class="wp-caption aligncenter" style="width: 425px"><a href="http://labs.mozilla.com/2009/03/new-tab-page-proposed-design-principles-and-prototype/"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/sites.png" alt="Easily access your frequently visited sites along with their feed items" title="About:Tab Sites Listing" width="415" height="300" class="size-full wp-image-405" border="0" /></a><p class="wp-caption-text">Easily access your frequently visited sites along with their feed items</p></div>
<p>The sites are listed along the right edge of the page to be visible but not glaring. That&#8217;s why the thumbnails are shown in gray so that flashy sites don&#8217;t overpower the simple look. Both the thumbnail and text are faded gray until you put your mouse pointer over it to interact with it.</p>
<p>The page additionally will provide navigation options based on your behavior. If you&#8217;ve copied an address to map, you&#8217;ll be able easily get to the map by clicking on a link from the new tab page. Additionally, if you&#8217;ve recently closed a tab and want to get back to it, you can restore it with a single click.</p>
<div id="attachment_407" class="wp-caption aligncenter" style="width: 350px"><a href="http://labs.mozilla.com/2009/03/new-tab-page-proposed-design-principles-and-prototype/"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/behavior.png" alt="Behavior-based navigation suggests actions that you&#039;ll likely want" title="Behavior-based Navigation" width="340" height="120" class="size-full wp-image-407" border="0" /></a><p class="wp-caption-text">Behavior-based navigation suggests actions that you'll likely want</p></div>
<p>Check out the official Mozilla Labs post describing the ideas behind the <a href="http://labs.mozilla.com/2009/03/new-tab-page-proposed-design-principles-and-prototype/">New Tab Page</a> [labs.mozilla.com]. As pointed out there, the main themes behind the new tab page were were <b>No Configuration</b>, <b>Streamlined</b>, and <b>Polite</b>. Thanks everyone for the early feedback, and please continue to <a href="http://labs.mozilla.com/2009/03/new-tab-page-proposed-design-principles-and-prototype/#comments">provide comments, criticisms, and suggestions</a> [labs.mozilla.com].</p>
<p>This is an early prototype that Dan Mills initially started coding less than a week ago, but it&#8217;s pretty functional already as it has drawn from existing projects like Atul Varma&#8217;s <a href="http://www.toolness.com/wp/?p=158">Ambient News</a> [toolness.com] and my <a href="http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access">Auto Dial</a>. You can follow the <a href="https://wiki.mozilla.org/About:newtab">development of this prototype</a> [wiki.mozilla.org] to see what&#8217;s going on or even contribute.</p>
<p>For those using my Auto Dial add-on, you can easily uninstall it and <a href="https://people.mozilla.com/~dmills/abouttab/abouttab-latest.xpi">update to About:Tab</a> [people.mozilla.com] from Tools -> Add-ons. About:Tab provides more functionality with behavior-based navigation and feed items as well as a cleaner interface with thumbnails. <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/2009/03/abouttab-new-tab-page-from-mozilla-labs#respond">49 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/03/abouttab-new-tab-page-from-mozilla-labs/feed</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>Weave Intro &amp; UI (Weekly 2009/9-1)</title>
		<link>http://ed.agadak.net/2009/03/weave-intro-ui-weekly-20099-1</link>
		<comments>http://ed.agadak.net/2009/03/weave-intro-ui-weekly-20099-1#comments</comments>
		<pubDate>Tue, 03 Mar 2009 16:34:15 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Status]]></category>
		<category><![CDATA[UIUC]]></category>
		<category><![CDATA[Weave]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=366</guid>
		<description><![CDATA[I&#8217;m now a full-time software developer in Mozilla Labs working primarily on Weave [labs.mozilla.com]. I suppose that means I&#8217;ll have to pay income taxes again..   but that&#8217;s insignificant compared to helping Weave redefine web clients where users can interact with websites and friends in whole new ways. I&#8217;ll have less time to write [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m now a full-time software developer in Mozilla Labs working primarily on <a href="http://labs.mozilla.com/projects/weave/">Weave</a> [labs.mozilla.com]. I suppose that means I&#8217;ll have to pay income taxes again.. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  but that&#8217;s insignificant compared to helping Weave redefine web clients where users can interact with websites and friends in whole new ways. I&#8217;ll have less time to write about the <a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future">EdBrowser</a>, but being in Labs, I might get to build some of this as a bunch of ideas for that web client was built around Weave. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Most of what I worked on during the week was getting familiar with the Weave codebase and some initial debugging/hacking. I also did a little bit on optimizing the Location Bar for Firefox 3.1+.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Is 4 > 20? Yes! ?</tt></p>
<p>My first task was figuring out why <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=476903">4 is larger than 20</a> [bugzilla.mozilla.org]. This was causing problems with Weave history sync on Fennec when we set the Places sorting mode to get a number of recent pages. So to try figuring out what went wrong, I started with my Unibody Macbook and installed <a href="http://www.vmware.com/products/fusion/">VMWare Fusion</a> [vmware.com] to run <a href="http://www.ubuntu.com/">Ubuntu 8.10</a> [ubuntu.com] for a <a href="https://wiki.mozilla.org/Mobile/Build/Maemo_Build_Instructions">cross-compiling scratchbox</a> [wiki.mozilla.org] to <a href="https://wiki.mozilla.org/Mobile/Build/Fennec">build Fennec</a> [wiki.mozilla.org] for the Nokia N810. <i>(Side note: don&#8217;t run hg from the scratchbox. It&#8217;s old. Like 0.9.1 old.)</i></p>
<p>That&#8217;s just to build Fennec. Getting it to run on the Nokia N810 is just as fun. The default package is bzipped, but that doesn&#8217;t work on the device by default, so I have to repackage it as gzip. Even before then, you&#8217;ll need to jump through hoops to get Fennec onto the device, but the easiest way seems to be putting stuff on a web server and downloading it wirelessly to the device.</p>
<p>Long story short, I used my x86 asm experience from doing computer architecture/compiler research at UIUC, and noticed the compiled code for <a href="http://hg.mozilla.org/mozilla-central/file/6ac03fc09e48/toolkit/components/places/src/nsNavHistoryQuery.cpp#l1165">SetSortingMode</a> [hg.mozilla.org] was doing a plain comparison of the input argument to the value 20.</p>
<p><tt>cmp r1, #20</tt></p>
<p>While the value 4 was getting passed into the unsigned short argument, the compiler was expecting a 4-byte sign extended value. Vlad gave me a quick patch that made the XPTCall magic handle smaller-than-4-byte types correctly, and all was good. 4 is now less than 20.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Initial Weave Hacking</tt></p>
<p>I got a Weave account and used it for the first time. <a href="https://services.mozilla.com/">(And so can you!)</a> [services.mozilla.org] I kept track of various small UI issues as I used the Firefox client and pushed fixes for them &#8212; small localized changes are a great way to get into the bigger project. But I eventually messed up my account by typing different passphrases from different computers.</p>
<p>Lucky for me, I&#8217;m working on a way for users to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480057">reset the data on their client/server</a> [bugzilla.mozilla.org]. The general idea here is to allow the user to &#8220;start over&#8221; incase something went wrong. 1) Clean sync with the server, 2) Restart the client from server state, 3) Make other clients like the current one, 4) Have clients repopulate the server.</p>
<p>Before I dove too deep into coding, I got a whole look at the Weave architecture to better understand what pieces od what: <a href="http://www.toolness.com/wp/?p=41">A bird&#8217;s-eye view</a> [toolness.com] and <a href="https://wiki.mozilla.org/Labs/Weave/ClientAPI">Client APIs</a> [wiki.mozilla.org]. Also, Weave is written with a pattern called <a href="http://www.neilmix.com/2007/02/07/threading-in-javascript-17/">Trampolining Generators</a> [neilmix.com]. This basically lets you use asynchronous calls synchronously and get something more like traditional threading.</p>
<div id="attachment_395" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/03/color-logs.png" alt="Color-coded log files for easier tracking of Weave behavior" title="Color Weave Logs" width="450" height="200" class="size-full wp-image-395" /><p class="wp-caption-text">Color-coded log files for easier tracking of Weave behavior</p></div>
<p>I also figured I would be looking at debug logs a bunch, so I decided to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=480528">spice up the plain black/white log file</a> [bugzilla.mozilla.org] and color code the text by the type of message (warning, info, debug, etc.) and the background by the component generating the message. Hopefully now I&#8217;ll be able to get deep into Weave hacking.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">AwesomeBar Speedup</tt></p>
<p>I posted about <a href="http://ed.agadak.net/2009/02/looking-for-location-bar-perf-testers">speeding up the location bar</a>, and it&#8217;s made it into Firefox 3.2 already. On the way there, I used Andrew Sutherland&#8217;s SQLite explain parser to better understand why things were slower and faster. Basically, a query becomes a set of opcodes like how javascript code becomes an intermediate bytecode, and the engine executes this stream of instructions.</p>
<p>Andrew first made this tool to <a href="http://www.visophyte.org/blog/2009/02/04/visualization-of-control-flowdata-flow-analysis-of-sqlite-explain-ations/">analyze his own query optimizations</a> [visophyte.org], and now he&#8217;s made the code <a href="http://hg.mozilla.org/users/bugmail_asutherland.org/grokexplain/">available for everyone to use and contribute</a> [hg.mozilla.org]. Thanks!</p>
<small><a href="http://ed.agadak.net/2009/03/weave-intro-ui-weekly-20099-1#respond">2 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/03/weave-intro-ui-weekly-20099-1/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Looking for Location Bar Perf. Testers</title>
		<link>http://ed.agadak.net/2009/02/looking-for-location-bar-perf-testers</link>
		<comments>http://ed.agadak.net/2009/02/looking-for-location-bar-perf-testers#comments</comments>
		<pubDate>Wed, 25 Feb 2009 17:44:55 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=373</guid>
		<description><![CDATA[I&#8217;ve got a change that should speed up the Location Bar in Firefox 3.1 and 3.2, but I just want to make sure it&#8217;s not only me and my computers that are seeing this benefit.
For you to take the test, you&#8217;ll need to be running a Shiretoko (Firefox 3.1) build or Minefield (Firefox 3.2) build [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve got a change that should speed up the Location Bar in Firefox 3.1 and 3.2, but I just want to make sure it&#8217;s not only me and my computers that are seeing this benefit.</p>
<p>For you to take the test, you&#8217;ll need to be running a <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-1.9.1/">Shiretoko (Firefox 3.1) build</a> or <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/">Minefield (Firefox 3.2) build</a> [ftp.mozilla.org].</p>
<p>What you then need to do is type something that will search through all your history, such as &#8220;this page isn&#8217;t in my history yay&#8221;. Just copy/paste that into your location bar, but keep track of the time you pasted and the time the activity throbber stops spinning in the location bar. (If you <i>do</i> get results, it&#8217;ll still be okay, as long as the location bar didn&#8217;t find 12 results.)</p>
<p>Depending on how much history you keep and how long you&#8217;ve been using Firefox 3, this could take over a minute or two before the throbber stops spinning.</p>
<p>Once you record how many seconds it takes for the throbber to stop, repeat the same thing with the <a href="https://build.mozilla.org/tryserver-builds/2009-02-22_18:47-edward.lee@engineering.uiuc.edu-combine.select/">Firefox 3.2 build that includes my optimization</a> [build.mozilla.org].</p>
<div id="attachment_375" class="wp-caption aligncenter" style="width: 460px"><a href="https://build.mozilla.org/tryserver-builds/2009-02-22_18:47-edward.lee@engineering.uiuc.edu-combine.select/"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/optimized-query.png" alt="CPU Usage (1 bar/sec): Old Firefox 3.1 takes 2 minutes; New takes 20 seconds" title="Optimized Location Bar Query" width="450" height="195" class="size-full wp-image-375" border="0"/></a><p class="wp-caption-text">CPU Usage (1 bar/sec): Old Firefox 3.1 takes 2 minutes; New takes 20 seconds</p></div>
<p>I&#8217;ve tested this on a few Places databases with my current unibody MacBook and my old iBook, and both times it runs <b>much</b> faster. Some times it goes 6 times faster. With one test on a database with over 100,000 places, the location bar throbber stop spinning in 20 seconds instead of 120 seconds.</p>
<p>Please report back your results as comments, and if you&#8217;d like, go ahead and vote for the bug, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=479739">Make location bar autocomplete even faster</a> [bugzilla.mozilla.org], to follow its progress.</p>
<small><a href="http://ed.agadak.net/2009/02/looking-for-location-bar-perf-testers#respond">30 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/looking-for-location-bar-perf-testers/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Who Are You? Stop Asking Me!</title>
		<link>http://ed.agadak.net/2009/02/who-are-you-stop-asking-me</link>
		<comments>http://ed.agadak.net/2009/02/who-are-you-stop-asking-me#comments</comments>
		<pubDate>Fri, 20 Feb 2009 15:09:55 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[EdBrowser]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=355</guid>
		<description><![CDATA[Are you asked to sign-in to websites often? &#8220;Remember me&#8221; doesn&#8217;t seem to always work..
Do you have many user names? At least sites let you use your email address nowadays..
Have you forgotten your password? Saved by password manager..?
Is your password hard to hack? But I&#8217;m too lazy to make/remember a stronger password&#8230;
Why do websites have [...]]]></description>
			<content:encoded><![CDATA[<p>Are you asked to sign-in to websites often? &#8220;Remember me&#8221; doesn&#8217;t seem to always work..<br />
Do you have many user names? At least sites let you use your email address nowadays..<br />
Have you forgotten your password? Saved by password manager..?<br />
Is your password hard to hack? But I&#8217;m too lazy to make/remember a stronger password&#8230;</p>
<div id="attachment_352" class="wp-caption aligncenter" style="width: 285px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/signing-in-problems.png" alt="Google&#039;s account troubleshooter" title="Signing In Problems" width="275" height="140" class="size-full wp-image-352" /><p class="wp-caption-text">Google's account troubleshooter</p></div>
<p>Why do websites have sign-in forms anyway?</p>
<p>I suppose the site just wants to ask &#8220;who are You?&#8221; Signing in lets you personalize your experience on the site. Let You get to the stuff You want. That&#8217;s just some of the benefits for the user.</p>
<p>For the website, it wants to make sure it only gives your stuff to you and not some random person that&#8217;s also using the site. One way to ensure that is to &#8220;challenge&#8221; you by making you answer something that hopefully only you know.. like your username and password.</p>
<p>But what if the browser you&#8217;re using already knows that you are You?</p>
<p>Instead of challenging You to see if you happen to remember your username and password, the website could challenge your browser to prove that it&#8217;s You. Now you don&#8217;t need to worry about forgetting your password or username. You don&#8217;t need to worry about having a weak password either because computers are good at remembering and calculating complex stuff.</p>
<p>But that&#8217;s not all! One very useful aspect is that you wouldn&#8217;t even need to sign in to websites anymore!</p>
<p>The challenges that site asks to prove that you&#8217;re You can be made in a way that only your web client can answer them. So when you go back to the website, it already knows who you are, and nobody else can pretend to be you. And this is only if you let your client tell the site.</p>
<p>Even better is that you don&#8217;t even need to create an account on the website! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You can start using and personalizing your experience on a site without first going through the user creation process. Because the site knows that only you can be You, you can focus on getting a better experience <i>now</i> and <i>later</i> go through the nitty gritty details of providing a name, contact information, etc. if necessary.</p>
<div id="attachment_358" class="wp-caption aligncenter" style="width: 280px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/no-login-no-account.png" alt="Use the site first, create an account later" title="No Sign-in; No Account" width="270" height="200" class="size-full wp-image-358" /><p class="wp-caption-text">Use the site first, create an account later</p></div>
<p>For example, if you&#8217;re using a site to purchase items, e.g., stuff for a house or even a house, you could make notes on items without first creating an account. Next time you visit, the site already knows it&#8217;s You, and this is without being required to put any personal information. The site might eventually want your email address to send you notification that this item just got cheaper by 50%, but that&#8217;s up to you.</p>
<p>But what about privacy?</p>
<p>Just because one site knows you&#8217;re You doesn&#8217;t mean another site can know that. You could choose which sites your browser accepts these identification challenges, and if it doesn&#8217;t respond, the site can&#8217;t figure out who you are any better than how things are now.</p>
<p>Additionally, because computers are good at doing menial things like tracking lots of numbers, the way it answers challenges can be different for each site. So if you took a bad approach to this problem by just having the web client make some identification number, the web client could give a different identification number to each site instead of sharing the same number. That&#8217;s just to get a crude feel of how a client can maintain your privacy across sites, but real implementations would have much more complex challenges.</p>
<p>Go Phish?</p>
<p>If you happen to stumble upon a phishing site that didn&#8217;t automatically get blocked, there&#8217;s a lot more red flags that will be going off for the user. &#8220;Why do I need to all of a sudden sign into this site?&#8221; &#8220;Uhh.. how do I even sign in.. my client handles all that for me..&#8221; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="attachment_287" class="wp-caption aligncenter" style="width: 260px"><a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/identity-center.png" alt="Just one of the tasks for the Identity Center" title="Identity Center" width="250" height="75" class="size-full wp-image-287" border="0"/></a><p class="wp-caption-text">Just one of the tasks for the Identity Center</p></div>
<p>If all this was part of a cloud-based web client like <a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future">EdBrowser</a>, you can get this great experience no matter where you go. As long as you first get your information from the cloud to the client you&#8217;re using, your client will have enough information to answer the challenges to prove that you&#8217;re You, even if you&#8217;re at another computer like a mobile device.</p>
<p>The EdBrowser first simplifies <a href="http://ed.agadak.net/2009/02/going-places-all-the-different-ways">Going Places</a> by getting you there in a single click, and now you can make use of websites without needing to type in a username/email and password! There&#8217;s fewer and fewer reasons to touch the keyboard just to get to your actual goal &#8212; to use the site!</p>
<small><a href="http://ed.agadak.net/2009/02/who-are-you-stop-asking-me#respond">10 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/who-are-you-stop-asking-me/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Going Places: All the Different Ways</title>
		<link>http://ed.agadak.net/2009/02/going-places-all-the-different-ways</link>
		<comments>http://ed.agadak.net/2009/02/going-places-all-the-different-ways#comments</comments>
		<pubDate>Wed, 18 Feb 2009 16:47:37 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[EdBrowser]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=304</guid>
		<description><![CDATA[If you use Firefox 3, how do you get to the site you want?
Hopefully if you&#8217;ve been using Firefox for a while, you&#8217;ve found out that it is smart enough to show the site you want after typing just a single letter in the location bar. Firefox remembers which sites you go to frequently and [...]]]></description>
			<content:encoded><![CDATA[<p>If you use Firefox 3, how do you get to the site you want?</p>
<div id="attachment_311" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/firefox-3.png" alt="How would you go to a website from this screen?" title="Firefox 3" width="450" height="200" class="size-full wp-image-311" /><p class="wp-caption-text">How would you go to a website from this screen?</p></div>
<p>Hopefully if you&#8217;ve been using Firefox for a while, you&#8217;ve found out that it is smart enough to show the site you want after typing just a single letter in the location bar. Firefox remembers which sites you go to frequently and what you&#8217;ve typed before, so it can better suggest the page you want &#8212; one reason why people say it&#8217;s so awesome. And if you&#8217;ve installed <a href="https://addons.mozilla.org/en-US/firefox/addon/7423">Enter Selects</a> [addons.mozilla.org], you can just hit [enter] to go to the first result.</p>
<p>There&#8217;s 3 or 4 steps involved here:</p>
<ol>
<li>Getting to the location bar (click it or use the keyboard shortcut)</li>
<li>Typing what you want (a single letter or more)</li>
<li>Finding the result from the list (optional presses of [down] or [tab])</li>
<li>Selecting the page (hit [enter] or click)</li>
</ol>
<p>There are plenty more ways to get to the page you want:</p>
<ul>
<li>Click the search icon in the top-right box and then search &#8212; ~6 steps</li>
<li>Search from the default home page &#8212; ~5 steps</li>
<li>Search from the top-right search box &#8212; ~5 steps</li>
<li>Search from bookmarks sidebar &#8212; ~4 steps *</li>
<li>Open from a new tab (with a smart new tab page) &#8212; ~3 steps</li>
<li>Select from the smart bookmarks drop-down &#8212; ~2 steps</li>
<li>Select a page from the location bar drop-down &#8212; ~2 steps</li>
<li>Open from bookmarks sidebar &#8212; ~1 step *</li>
<li>Click a bookmark from bookmarks toolbar &#8212; ~1 step *</li>
</ul>
<p>I put a * next to the ones using bookmarks as you have to first bookmark a site and organize it into folders or put them onto the toolbar. So there&#8217;s some initial cost for setting them up, but it can pay off in the long run &#8212; just a single step to get to the site in the common case.</p>
<div id="attachment_312" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/hot-spots.png" alt="There are many ways to get to a site with varying number of steps" title="Places Hot Spots" width="450" height="200" class="size-full wp-image-312" /><p class="wp-caption-text">There are many ways to get to a site with varying number of steps</p></div>
<p>It&#8217;s not bad that there are many different ways to get at the same goal. Each way has its own benefits and drawbacks. For example, going to a bookmark is very simple (assuming it&#8217;s visible and clickable), but you need to have bookmarked a page beforehand, and going to a new site from a bookmark could be tricky. Additionally, you need to sacrifice screen space for the sidebar or the toolbar.</p>
<p>The main metric I&#8217;m looking at for these different ways is the number of user actions required to get back to a site. Just think about how many times you go to the same site over and over again. You might go to a number of sites frequently and others not as frequently, but you still revisit them more than a random site you&#8217;ve never heard of.</p>
<p>And don&#8217;t forget that others might have more difficulty than you when using a mouse or keyboard. Even if you only need to type a single letter to find the site you want, finding the right one key to press on the keyboard can be an ordeal in itself.</p>
<p>So ideally we make this common behavior very easy to do. At most one click is needed as we&#8217;ve seen with bookmarks. But bookmarks are &#8220;difficult&#8221; to work with as it requires extra effort from the user.</p>
<p>The idea behind <a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future">EdBrowser&#8217;s Site Launcher</a> comes from this goal of streamlining the interface to allow the user do what s/he wants &#8212; interact with the site &#8211; not the browser.</p>
<div id="attachment_319" class="wp-caption aligncenter" style="width: 310px"><a href="http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/one-click-site.png" alt="Get to where you want to be with a single click" title="One Click Site" width="300" height="70" class="size-full wp-image-319" border="0"/></a><p class="wp-caption-text">Get to where you want to be with a single click</p></div>
<p>Instead of having to manually bookmark sites and organize them to be accessible, the Site Launcher automatically figures out which pages you&#8217;ve been going to frequently &#8212; you kept typing them in over and over again. You can even drag the current site from the &#8220;temporary&#8221; right side and pin it somewhere on the left because you want to go back to it.</p>
<p>As you get more and more sites on the Site Launcher, there&#8217;s less and less need to type in the site you want. This means all that space currently used for some text input like the location bar isn&#8217;t as necessary any more.</p>
<p>But just because this text input gets smaller doesn&#8217;t mean you can&#8217;t type-to-get-to-the-site. In fact, having sites on the Site Launcher can streamline the keyboard interface even more. Searching from that input box can first prefer pages contained in the Site Launcher. This includes your open tabs, main pages of the websites, as well as pages you frequently visit; it would even include recently closed tabs.</p>
<small><a href="http://ed.agadak.net/2009/02/going-places-all-the-different-ways#respond">7 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/going-places-all-the-different-ways/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>EdBrowser: Web Client of the Future</title>
		<link>http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future</link>
		<comments>http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future#comments</comments>
		<pubDate>Tue, 17 Feb 2009 13:45:13 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[EdBrowser]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Online Shopping]]></category>
		<category><![CDATA[Wii]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=253</guid>
		<description><![CDATA[Introducing my very own web client of the future! EdBrowser!
Okay okay. I&#8217;m not actually making a web client of my own, but if I had a lot of time and the right infrastructure, it would probably look like the picture above. (I suppose I do have a lot of time seeing that I&#8217;m unemployed. But [...]]]></description>
			<content:encoded><![CDATA[<p>Introducing my very own web client of the future! EdBrowser!</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/edbrowser.png" alt="A brand new shiny web client with buttons and boxes that's better than foxes!" title="EdBrowser: Web Client of the Future" width="450" height="340" class="size-full wp-image-256" /><p class="wp-caption-text">A brand new shiny web client with buttons and boxes that's better than foxes!</p></div>
<p>Okay okay. I&#8217;m not actually making a web client of my own, but if I had a lot of time and the right infrastructure, it would probably look like the picture above. <small><i>(I suppose I <u>do</u> have a lot of time seeing that I&#8217;m unemployed. But that does have various benefits.. no going to classes, no studying for exams, no paying income tax to blow up then rebuild bridges.. And who would want to use something called EdBrowser?!)</i></small></p>
<p>I&#8217;ll just go in left-to-right order describing what you can see (and don&#8217;t see) in my mock-up:</p>
<ol>
<li>Identity Center</li>
<li>Site Launcher</li>
<li>Text Input</li>
<li>Web Content</li>
</ol>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Identity Center</tt></p>
<p>First off, we have something new here &#8212; the web client knows who you are and lets you know who it thinks you are. (If your name isn&#8217;t shown, you&#8217;ll want to &#8220;log in&#8221; so your experience is personalized for you. Everything described further down can be stored as part of your account.)</p>
<p>When the client knows who you are, it makes it easy for sites to find out that it&#8217;s you if you let the site know. Now you won&#8217;t need to fiddle with logins and passwords for &#8220;simple&#8221; sites like forums. Additionally, sites can restrict sensitive data (bank accounts, emails, etc.) and require you to give the web client a password. When you do so, the client will send the server an impossible to guess &#8220;password&#8221;, which it set up earlier, and now you don&#8217;t need to worry about internet hackers guessing your bank password.</p>
<p>There&#8217;s a lot more functionality for this &#8220;Identity Center,&#8221; but because I made it green and ugly, I&#8217;ll talk about it at the end. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Site Launcher</tt></p>
<p>You might be wondering wheres the tab bar, and here it is! Kinda. You can initially think of this area as a combination of the bookmarks bar, tab bar, and history drop-down menu.</p>
<p>I&#8217;ve mentioned in some other post that even with a smart new-tab page, you still need to open a new tab then find the page you want to open &#8212; 2 clicks. Similar two steps if you use the drop-down menu. And bookmarks&#8230; ew.. at least the drop-down menu automatically shows the sites you frequently use instead of manually bookmarking sites.</p>
<p>What you really want to do is just get to a site you frequently visit. So let&#8217;s just put those sites in an easy-to-find place.. in the Site Launcher! The web client knows which sites you use frequently, and it will automatically populate the area with the icon for that site. Now when you want to open the site in a new tab, you just click on the icon. Done.</p>
<p>But that&#8217;s not all! When you move your pointer over the icons, it&#8217;ll show you titles and thumbnails of all your open &#8220;tabs&#8221; that share that same icon. It will also show thumbnails of pages that you frequently go to on that site. This means no more loading the site&#8217;s home page then clicking through to the actual page you want. It shows up right there &#8211; accessible with a single click.</p>
<p>And as a bonus, you would be able to search the listing of tabs and pages you frequently visit to restrict your searches to just that one site.</p>
<div id="attachment_272" class="wp-caption aligncenter" style="width: 310px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/site-launcher.png" alt="Opened sites, unopened sites, trash and active tabs" title="Site Launcher" width="300" height="70" class="size-full wp-image-272" /><p class="wp-caption-text">Opened sites, unopened sites, trash and active tabs</p></div>
<p>The Site Launcher has 3 main components:</p>
<ol>
<li>Sites you commonly use</li>
<li>Trash for removed sites</li>
<li>New/temporary sites</li>
</ol>
<p>When you visit a site not in the Site Launcher, it shows up towards the right side &#8212; to the right of the dot. If you want to &#8220;pin&#8221; the site, just drag it to the left of the dot. You can close that site just by dragging it to the trash or any other normal way you would close a &#8220;tab.&#8221;</p>
<p>While the trash isn&#8217;t really a site, you can still hover over it just like any other site&#8217;s icon. Except now it shows you thumbnails of sites you&#8217;ve recently closed and might want to reopen. &#8220;Undo&#8221; is such a great feature! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>The dot is there for you to drag if you want more space for sites to automatically fill in to the left side. But hey, you&#8217;ve got a lot of space now that there&#8217;s just the Identity Center, Site Launcher, and some small Text Input box&#8230;</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Text Input</tt></p>
<p>Not much to explain here. Just type what you want to do. You can execute commands or search your history and/or the web. You could just put text to store there if you wanted. I suppose you could type a URL, but why do that when you&#8217;ve got the Site Launcher!</p>
<p>But about the location bar.. There&#8217;s nothing showing URLs anywhere. Not in this text box or when showing sites you might want to launch &#8212; those are just titles and thumbnails. (Wait! Didn&#8217;t this guy make the AwesomeBar awesome?! Oh well.. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Okay fine. You can still get to the current URL and edit it, but it&#8217;s not shown in the main interface.)</p>
<p>I lied. It&#8217;s not really just a text box for input. When you click on the &#8220;text box,&#8221; it also opens up bigger box in the middle of the screen, so when you type it shows up in both places. This box will show the results of what you&#8217;ve typed in. So it could be a map of an address you&#8217;ve selected or pages that you might want to go to. And after you hit enter for the command or search, the input box clears itself.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Web Content</tt></p>
<p>Content is king! Lots of space for it here with just little partitioned off to the web client.</p>
<p>So I&#8217;ve already talked about web sites knowing who you are, and now you won&#8217;t need to keep logging into sites before you use them. But there&#8217;s more websites can do with information if you give them access!</p>
<div id="attachment_278" class="wp-caption aligncenter" style="width: 385px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/web-content.png" alt="Share your history to find great deals (but no Wii will be that cheap...)" title="Smart Web Content" width="375" height="260" class="size-full wp-image-278" /><p class="wp-caption-text">Share your history to find great deals (but no Wii will be that cheap...)</p></div>
<p>If I&#8217;ve given Amazon.com access to my Target.com history, the next time I visit, the site can figure out what items I&#8217;ve been looking at and hopefully offer me a better deal. No need for me to manually search for the same item across multiple websites.</p>
<p>Another example would be sharing my digg.com history with a news aggregator site like Google News. It can know that I dugg an article and show me news stories related. Additionally Google could dig deeper and find when the original article was submitted or when I dugg it and only show news that has happened or updated since those times.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Identity Center</tt></p>
<p>Back to the ugly green button. It actually comes in different colors like red and gray. It would also have a different emphasis state when the site wants to get at more of your data (but hopefully it&#8217;s not an annoying animation..)</p>
<p>For example, when you first visit a site, the button will appear gray because you haven&#8217;t given the site any access. It would then try to get your attention, and pointing your cursor at it would show a message like &#8220;Site ABC would like to know who you are. 40% of your friends have granted access; 3% deny. Grant or Deny?&#8221; Granting access could be limited to just the site knowing that if you &#8220;log in&#8221; to your web client from somewhere else, it&#8217;ll know it&#8217;s you again. This can be done without ever giving away your name or other personal information.</p>
<p>Having the web client know about your social network is nice, but re-entering all your information to a web client is a pain. You already have a lot of information on a number of websites, so let&#8217;s collect that. When you visit certain sites, the Identity Center could let you know that you can extract data from those sites and securely store it on your profile. Then you can share that information with other sites you visit if you choose to do so.</p>
<div id="attachment_287" class="wp-caption aligncenter" style="width: 260px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/identity-center.png" alt="Crude mock-up of attempting to grab attention" title="Identity Center Attention" width="250" height="75" class="size-full wp-image-287" /><p class="wp-caption-text">Crude mock-up of attempting to grab attention</p></div>
<p>Other situations where the Identity Center button might want your attention is if the site wants to know more than just who you are. Clicking the button could show a list of sites that you might have history for. If you do have history, you can preview what information is sent to the site as well as visit the sites that you haven&#8217;t been to before.</p>
<p>If Amazon.com is asking for your visit history of competitor&#8217;s websites, they&#8217;re also giving away which competitors they&#8217;re interested in. You could then navigate to new sites that you didn&#8217;t even know about. (Or just visit the ones where your friends have also visited and granted access.)</p>
<p>There&#8217;s an endless combination of what can be done with having your data accessible online while selectively giving out certain portions to certain sites. Also, there&#8217;s plenty of interesting personal data that already exists on some sites, so you could unleash so much potential if it was easy to make that information available.</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/edbrowser.png" alt="Do you have suggestions to streamline user tasks in this new web client?" title="EdBrowser: Web Client of the Future" width="450" height="340" class="size-full wp-image-256" /><p class="wp-caption-text">Do you have suggestions to streamline user tasks in this new web client?</p></div>
<p>So that&#8217;s a quick overview of some parts of my imaginary EdBrowser. There&#8217;s plenty more that I&#8217;ve thought about but am currently too tired to write up. But even if this web client doesn&#8217;t exist yet, the technologies needed to make something like this are coming in. There&#8217;s the AwesomeBar as part of Places that pushed towards adaptive behaviors and Ubiquity for new interfaces for &#8220;doing stuff.&#8221; And there&#8217;s Weave for securely pushing data to the cloud and letting the user selectively open it up.</p>
<p>The user is the focus of attention here, and making the experience better and more streamlined is the goal. The user isn&#8217;t just passively browsing the web anymore as s/he gets to leverage the web client to easily get at whatever is desired. (So actually.. User is King! or Queen! <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/2009/02/edbrowser-web-client-of-the-future#respond">9 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/edbrowser-web-client-of-the-future/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Hiding History with userChrome</title>
		<link>http://ed.agadak.net/2009/02/hiding-history-with-userchrome</link>
		<comments>http://ed.agadak.net/2009/02/hiding-history-with-userchrome#comments</comments>
		<pubDate>Sun, 15 Feb 2009 19:30:41 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=243</guid>
		<description><![CDATA[Josh had an interesting comment in my recent post on Firefox 3.1 Location Bar Preferences about hiding certain keywords from the location bar.
At first I suggested using the new &#8220;Forget About This Site&#8221; feature where you can select a page from your History Sidebar and choose to forget everything (history, cookies, etc) about that site. [...]]]></description>
			<content:encoded><![CDATA[<p>Josh had an interesting comment in my recent post on <a href="http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences">Firefox 3.1 Location Bar Preferences</a> about hiding certain keywords from the location bar.</p>
<p>At first I suggested using the new &#8220;Forget About This Site&#8221; feature where you can select a page from your History Sidebar and choose to forget everything (history, cookies, etc) about that site. Doing this would prevent any of those pages from showing up in the location bar because you would have no history for that site.</p>
<div id="attachment_244" class="wp-caption aligncenter" style="width: 270px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/forgetsite.png" alt="Quick way to remove a site from the location bar" title="Forget About This Site" width="260" height="200" class="size-full wp-image-244" /><p class="wp-caption-text">Quick way to remove a site from the location bar</p></div>
<p>Unfortunately, that requires the user to actively clear the site from his/her history. (Perhaps Firefox could automatically do that for the user in a privacy-aware manner&#8230;)</p>
<p>Josh then had a question regarding userChrome. Since Firefox 3 handles all sorts of fancy CSS 3 selectors including substring matching in attributes with *=, I figured it would be fairly simple to match the url or title of a location bar result and hide it.</p>
<p>This technique works well if you don&#8217;t mind leaving trails of your privacy hiding in plain sight. However, I suppose the ease of taking a peek at userChrome is a quite bit more difficult than just typing in the location bar.</p>
<div id="attachment_246" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/userchrome.png" alt="Hide pages that match your keyword/pattern in the URL or title" title="userChrome.css" width="450" height="115" class="size-full wp-image-246" /><p class="wp-caption-text">Hide pages that match your keyword/pattern in the URL or title</p></div>
<p>All you need to do is use your favorite way to style Firefox, e.g., editing userChrome.css in your profile&#8217;s chrome directory or through an add-on, and add a style matching the class name &#8220;autocomplete-richlistitem&#8221; as well as a selector for either the &#8220;url&#8221; or &#8220;title&#8221; attributes.</p>
<p>For example, if you want to block any results that have &#8220;facebook&#8221; anywhere in the URL, use the following style:<br />
<code>.autocomplete-richlistitem[url*="facebook"] { display: none; }</code></p>
<p>This is just a simple hack to prevent certain pages from showing up. The location bar by default tries to show the top 12 pages, but if you&#8217;re hiding pages, you might end up with no results. You can try changing the value of browser.urlbar.maxRichResults from about:config to get more results, so if any get hidden, there are others to fill in the space.</p>
<small><a href="http://ed.agadak.net/2009/02/hiding-history-with-userchrome#respond">15 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/hiding-history-with-userchrome/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Panic Mode: Really! I Just Opened Firefox</title>
		<link>http://ed.agadak.net/2009/02/panic-mode-really-i-just-opened-firefox</link>
		<comments>http://ed.agadak.net/2009/02/panic-mode-really-i-just-opened-firefox#comments</comments>
		<pubDate>Wed, 04 Feb 2009 14:21:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=220</guid>
		<description><![CDATA[You probably already know about the new Private Browsing Mode [support.mozilla.com] in Firefox 3.1, but did you know about the other &#8220;P&#8221; Mode? Panic Mode!
Well, maybe not as it&#8217;s a brand new add-on I&#8217;ve written that shows your home page instead of about:privatebrowsing when starting Private Browsing Mode. That&#8217;s all! Very simple.  
Now when [...]]]></description>
			<content:encoded><![CDATA[<p>You probably already know about the new <a href="http://support.mozilla.com/kb/Private+Browsing">Private Browsing Mode</a> [support.mozilla.com] in Firefox 3.1, but did you know about the other &#8220;P&#8221; Mode? <a href="https://addons.mozilla.org/en-US/firefox/addon/10604">Panic Mode</a>!</p>
<p>Well, maybe not as it&#8217;s a brand new add-on I&#8217;ve written that shows your home page instead of about:privatebrowsing when starting Private Browsing Mode. That&#8217;s all! Very simple. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_229" class="wp-caption aligncenter" style="width: 460px"><a href="https://addons.mozilla.org/en-US/firefox/addon/10604"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/panic-mode1.png" alt="Panic Mode works just like Private Browsing except it shows your home page" title="Panic Mode" width="450" height="115" class="size-full wp-image-229" border="0" /></a><p class="wp-caption-text">Panic Mode works just like Private Browsing except it shows your home page</p></div>
<p>Now when your boss is walking over and you&#8217;ve got a bunch of tabs for online social networks, chatting and personal mail; just hit the shortcut for Private Browsing (Ctrl/Cmd-Shift-P), and <i><b>woosh!</b></i> those tabs disappear and now it looks like you&#8217;ve been busy working! Saved by Panic Mode! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Just remember that you&#8217;re now in Private Browsing, so if you hit the shortcut again, it&#8217;ll bring back the tabs you had opened. (Don&#8217;t mix up those modes! Could be dangerous if you restored those tabs as your boss is looking over your work!)</p>
<p>Oh, and any kind of home page works. So if you&#8217;ve set a bookmark folder to be your home page, it&#8217;ll load all those tabs when going into Panic Mode.</p>
<p>Try out <a href="https://addons.mozilla.org/en-US/firefox/addon/10604">Panic Mode Add-on</a> [addons.mozilla.org] today! <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/2009/02/panic-mode-really-i-just-opened-firefox#respond">3 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/panic-mode-really-i-just-opened-firefox/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 Location Bar Privacy</title>
		<link>http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy</link>
		<comments>http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy#comments</comments>
		<pubDate>Wed, 04 Feb 2009 14:20:01 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=216</guid>
		<description><![CDATA[Thanks for installing/upgrading Hide Unvisited. This latest version is only for Firefox 3.5 and leverages the built-in privacy functionality of Firefox 3.5, so you don&#8217;t even need the add-on anymore. The add-on has already automatically uninstalled itself and set the preference as described below for you.   But if you want another add-on to [...]]]></description>
			<content:encoded><![CDATA[<p><i>Thanks for installing/upgrading Hide Unvisited. This latest version is only for Firefox 3.5 and leverages the built-in privacy functionality of Firefox 3.5, so you don&#8217;t even need the add-on anymore. The add-on has already automatically uninstalled itself and set the preference as described below for you. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  But if you want another add-on to try, check out <a href="https://addons.mozilla.org/en-US/firefox/addon/7423">Enter Selects</a> &#8212; pressing enter from the location bar will now automatically go to the first result.</i></p>
<hr style="width: 90%; margin: 1em;"/>
<p>User Privacy has made big steps with Firefox 3.5. First off it&#8217;s very simple to clear out the last hour of online shopping, medical researching or media browsing with &#8220;Clear Recent History.&#8221; This is much smarter than wiping out your entire history or not letting Firefox track <i>any</i> history just to prevent some pages from showing up in the Location Bar. Another big privacy feature is <a href="http://support.mozilla.com/kb/Private+Browsing">Private Browsing Mode</a> [support.mozilla.org] (<a href="http://ed.agadak.net/2009/02/panic-mode-really-i-just-opened-firefox">Panic Mode?</a> <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), which starts a new browsing session where Firefox won&#8217;t track any history until you leave that mode.</p>
<p>Both these features affect the Location Bar because removing pages from your history stops you or someone else using Firefox and accidentally finding those pages when typing in the Location Bar.</p>
<p>One slight caveat is that by default, Firefox will suggest bookmarks from the Location Bar because you&#8217;ve added a star to the page and probably want to revisit it. This means even if you clear your browsing history, bookmarks will still show up when searching for pages.</p>
<div id="attachment_231" class="wp-caption aligncenter" style="width: 460px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/privacy-menu.png" alt="Choose what Firefox 3.5 can suggest from the Location Bar" title="Firefox 3.5 Privacy Drop-Down" width="450" height="120" class="size-full wp-image-231" /><p class="wp-caption-text">Choose what Firefox 3.5 can suggest from the Location Bar</p></div>
<p>Firefox 3.5 adds a new drop-down menu in the Privacy view when setting your Preferences. Here you can tell Firefox to only search &#8220;History&#8221; instead of the default of &#8220;History and Bookmarks.&#8221; This means if you use a bookmark and remove traces of visiting the bookmark, it won&#8217;t show up in the Location Bar until you revisit that page you bookmarked.</p>
<p>On a related note of only showing pages you&#8217;ve been to, Firefox 3.5 will only suggest pages that you&#8217;ve typed in the Location Bar when clicking the drop-down button. This means the 12 sites that appear in the list are those that you frequently use to start browsing. Similarly, <a href="http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access">Auto Dial 6</a> has been updated to only show pages you&#8217;ve typed. These two make great ways to go back to sites that you launch from.</p>
<div id="attachment_233" class="wp-caption aligncenter" style="width: 440px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/two-launchpoints.png" alt="Two launch-points to get you started in just a couple clicks" title="Two Launchpoints" width="430" height="120" class="size-full wp-image-233" /><p class="wp-caption-text">Two launch-points to get you started in just a couple clicks</p></div>
<p>If you want more advanced control of the Location Bar behavior, check out <a href="http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences">Firefox 3.5 Location Bar Preferences</a>.</p>
<small><a href="http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy#respond">68 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy/feed</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 Location Bar Preferences</title>
		<link>http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences</link>
		<comments>http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences#comments</comments>
		<pubDate>Wed, 04 Feb 2009 14:19:19 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=196</guid>
		<description><![CDATA[For those comfortable with twiddling around with about:config, there are several new preferences to play with since Firefox 3. (If that sounds scary, check out my other post about Firefox 3.5 Location Bar Privacy.)
I&#8217;ll explain three new groups of preferences that let you..

Toggle suggestions on and off
Customize what results get shown
Change the matching behavior as [...]]]></description>
			<content:encoded><![CDATA[<p>For those comfortable with twiddling around with about:config, there are several new preferences to play with since Firefox 3. (If that sounds scary, check out my other post about <a href="http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy">Firefox 3.5 Location Bar Privacy</a>.)</p>
<p>I&#8217;ll explain three new groups of preferences that let you..</p>
<ol>
<li>Toggle suggestions on and off</li>
<li>Customize what results get shown</li>
<li>Change the matching behavior as you type</li>
</ol>
<div id="attachment_212" class="wp-caption aligncenter" style="width: 335px"><img src="http://ed.agadak.net/wp-content/uploads/2009/02/31-prefs.png" alt="Configure Smart Location Bar&#039;s behavior from about:config" title="New Location Bar Preferences" width="325" height="235" class="size-full wp-image-212" /><p class="wp-caption-text">Configure Smart Location Bar's behavior from about:config</p></div>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Toggle Suggestions</tt></p>
<p>The first preference is fairly simple; toggle <tt>browser.urlbar.autocomplete.enabled</tt> to turn the location bar suggestions on and off. This is useful if you always want to type out the URLs you want, or if you can type a whole domain and hit enter faster than typing a single letter and having Firefox suggest the site you want.</p>
<p>If you&#8217;re just looking to prevent certain pages from showing up in the suggestions, there are better options available than using this sledgehammer (see below). Also, for those who have set <tt>browser.urlbar.maxRichResults</tt> to 0, -1 or something else (e.g., userChrome.css) to turn off suggestions, using this preference is better as it prevents your CPU from wasting power while searching for results that Firefox won&#8217;t show.</p>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Customize Results</tt></p>
<p>The second preference lets you make the location bar only match URLs of pages you&#8217;ve visited, similar to Firefox 2&#8217;s behavior. It&#8217;s much more powerful than just that as it also lets you restrict results to pages that you&#8217;ve 1) visited, 2) bookmarked, 3) tagged or 4) typed in addition to letting you force your search terms to match in 1) the title or 2) the URL.</p>
<p>You can use any combination of these filters to reduce the number of results that show up in the location bar&#8217;s suggestions. Another way to look at it is if you specify some filters, e.g., bookmarked + typed, you&#8217;re getting rid of anything that <i>isn&#8217;t</i> that &#8212; throw away all results that <i>aren&#8217;t</i> bookmarked as well as get rid of pages that you&#8217;ve <i>never</i> typed in the location bar.</p>
<p>The way you set these filters in <tt>browser.urlbar.default.behavior</tt> is slightly tricky if you&#8217;re not familiar with &#8220;bitmaps.&#8221; They&#8217;re not too complicated to deal with, but you will have to do some simple addition in your head. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  The way things work is each filter is given a number value, and to figure out what number to set for the preference, just add up the values of each filter you want.</p>
<p>If you want the location bar to only match URLs of pages you&#8217;ve visited like Firefox 2, set <tt>browser.urlbar.default.behavior</tt> to <b>17</b> (1 for visited pages + 16 for URLs).</p>
<p>Similarly, if you want to additionally restrict results to pages you&#8217;ve typed in, add in an extra 32 for &#8220;typed&#8221; &#8212; <b>49</b> for matching URLs of typed, visited pages. So for those who have used <tt>browser.urlbar.matchOnlyTyped</tt> in the past, you&#8217;ll probably want to add 32 to any other filters you want.</p>
<p>The whole set of values for each filter are as follows:</p>
<ul>
<li><b>1</b>: visited</li>
<li><b>2</b>: bookmarked</li>
<li><b>4</b>: tagged</li>
<li><b>8</b>: match title</li>
<li><b>16</b>: match URL</li>
<li><b>32</b>: typed</li>
</ul>
<p><tt style="text-decoration: underline; font-size: 1.1em;">Filter On-Demand</tt></p>
<p>The last group of preferences are very related to the previous preference, and I&#8217;ve introduced their functionality in my post on <a href="http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords">Firefox 3.5 Restricts, Matches, Keywords</a>.</p>
<p>Basically they do the same thing as the previous preference except you type in a special character to turn on a filter as you&#8217;re searching from the location bar. This lets you pick and choose when you want the filters to be in effect instead of always being on.</p>
<p>The default symbols for these &#8220;on-demand&#8221; filters are as follows:</p>
<ul>
<li><b><tt>^</tt></b>: <tt>browser.urlbar.restrict.history</tt></li>
<li><b><tt>*</tt></b>: <tt>browser.urlbar.restrict.bookmark</tt></li>
<li><b><tt>+</tt></b>: <tt>browser.urlbar.restrict.tag</tt></li>
<li><b><tt>~</tt></b>: <tt>browser.urlbar.restrict.typed</tt></li>
<li><b><tt>#</tt></b>: <tt>browser.urlbar.match.title</tt></li>
<li><b><tt>@</tt></b>: <tt>browser.urlbar.match.url</tt></li>
</ul>
<p>One big difference from what I described in the earlier post is the handling of empty filters. Setting these restrict/match preferences&#8217; special symbols to nothing prevents you from (accidentally) activating that filter dynamically. However, you can still set the default.behavior to use that filter automatically.</p>
<small><a href="http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences#respond">51 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences/feed</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>ABC Meme</title>
		<link>http://ed.agadak.net/2008/11/abc-meme</link>
		<comments>http://ed.agadak.net/2008/11/abc-meme#comments</comments>
		<pubDate>Mon, 24 Nov 2008 18:15:52 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=189</guid>
		<description><![CDATA[From bsmedberg [benjamin.smedbergs.us].. but a little more automated.
1) In Firefox 3.1, copy the following block of code and paste it into the &#8220;Code:&#8221; line in the Error Console (cmd-shift-J) then hit enter:
C=Components;d=C.classes[&#39;@mozilla.org/browser/nav-history-service;1&#39;].getService(C.interfaces.nsPIPlacesDatabase).DBConnection;for(o=[],c=97;c&#60;123;c++){h=String.fromCharCode(c);q=d.createStatement(&#39;SELECT title t, url u FROM moz_inputhistory JOIN moz_places ON id=place_id WHERE input LIKE \&#39;&#39;+h+&#39;%\&#39; ORDER BY use_count DESC LIMIT 1&#39;);if(q.step())o.push([&#39;&#60;b>&#39;,h,&#39;&#60;/b>: &#60;a href=&#34;&#39;,q.row.u,&#39;&#34;>&#39;,q.row.t,&#39;&#60;/a>&#39;].join(&#39;&#39;))}open(&#39;data:text/html,&#39;+o.join(&#39;&#60;br/>\n&#39;))
2) View [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://benjamin.smedbergs.us/blog/2008-11-24/abc-meme/">bsmedberg</a> [benjamin.smedbergs.us].. but a little more automated.</p>
<p>1) In Firefox <b>3.1</b>, copy the following block of code and paste it into the &#8220;Code:&#8221; line in the Error Console (cmd-shift-J) then hit enter:</p>
<p><tt style="font-size: xx-small;">C=Components;d=C.classes[&#39;@mozilla.org/browser/nav-history-service;1&#39;].getService(C.interfaces.nsPIPlacesDatabase).DBConnection;for(o=[],c=97;c&lt;123;c++){h=String.fromCharCode(c);q=d.createStatement(&#39;SELECT title t, url u FROM moz_inputhistory JOIN moz_places ON id=place_id WHERE input LIKE \&#39;&#39;+h+&#39;%\&#39; ORDER BY use_count DESC LIMIT 1&#39;);if(q.step())o.push([&#39;&lt;b>&#39;,h,&#39;&lt;/b>: &lt;a href=&quot;&#39;,q.row.u,&#39;&quot;>&#39;,q.row.t,&#39;&lt;/a>&#39;].join(&#39;&#39;))}open(&#39;data:text/html,&#39;+o.join(&#39;&lt;br/>\n&#39;))</tt></p>
<p>2) View source to copy the generated html to put in your blog. (I&#8217;ve added emphasis for what I was trying to match.)</p>
<p><b>a</b>: <a href="http://www.amazon.com/"><u>Amazon</u>.com: Online Shopping for Electronics, Apparel, Computers, Books, DVDs &#038; more</a><br /><b>b</b>: <a href="https://www.bankofamerica.com/index.jsp"><u>Bank</u> of America | Home | Personal</a><br /><b>c</b>: <a href="https://onlinebanking.capitalone.com/capitalone/login.aspx"><u>Capital</u> One Online Banking | Capital One Online Banking</a><br /><b>d</b>: <a href="http://digg.com/"><u>Digg</u> &#8211; All News, Videos, &#038; Images</a><br /><b>e</b>: <a href="http://ed.agadak.net/"><u>edilee</u></a><br /><b>f</b>: <a href="http://forums.mozillazine.org/viewforum.php?f=23">Firefox Builds • mozillaZine <u>Forums</u></a><br /><b>g</b>: <a href="http://www.gamefaqs.com/">Video Game Cheats, Reviews, FAQs, Message Boards, and More &#8211; <u>GameFAQs</u></a><br /><b>h</b>: <a href="http://www.hulu.com/house">Hulu &#8211; <u>House</u></a><br /><b>i</b>: <a href="http://www.imdb.com/">The Internet Movie Database (<u>IMDb</u>)</a><br /><b>j</b>: <a href="http://www.joystiq.com/"><u>Joystiq</u></a><br /><b>k</b>: <a href="http://kotaku.com/"><u>Kotaku</u>, the Gamer’s Guide</a><br /><b>l</b>: <a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-November/thread.html">The <u>LLVMdev</u> November 2008 Archive by thread</a><br /><b>m</b>: <a href="http://www.macrumors.com/"><u>Mac</u> Rumors: Apple Mac Rumors and News You Care About</a><br /><b>n</b>: <a href="http://www.neogaf.com/forum/forumdisplay.php?f=2">Gaming Discussion &#8211; <u>NeoGAF</u></a><br /><b>o</b>: <a href="http://www.apple.com/OrderStatus"><u>OrderStatus</u></a><br /><b>p</b>: <a href="http://planet.mozilla.org/"><u>Planet</u> Mozilla</a><br /><b>q</b>: <a href="http://www.cs.uiuc.edu/graduate/qualexam.php">PhD <u>Qualifying</u> Examination | University of Illinois at Urbana-Champaign</a><br /><b>r</b>: <a href="http://www.google.com/reader/view/">Google <u>Reader</u></a><br /><b>s</b>: <a href="http://www.squarefree.com/shell/shell.html">JavaScript <u>Shell</u> 1.4</a><br /><b>t</b>: <a href="http://tinderbox.mozilla.org/Firefox/"><u>tinderbox</u>: Firefox</a><br /><b>u</b>: <a href="https://mail.google.com/mail/#search/l%3Aunread">Gmail &#8211; Search results &#8211; edilee@gmail.com</a> (<u>unread</u>)<br /><b>v</b>: <a href="http://discussions.apple.com/thread.jspa?threadID=1756755&#038;tstart=0">Apple &#8211; Support &#8211; Discussions &#8211; New MacBook connected to external <u>VGA</u> &#8230;</a><br /><b>w</b>: <a href="https://wiki.mozilla.org/Firefox3.1/StatusMeetings">Firefox3.1/StatusMeetings &#8211; Mozilla<u>Wiki</u></a><br /><b>x</b>: <a href="http://xkcd.com/"><u>xkcd</u> &#8211; A Webcomic &#8211; Drapes</a><br /><b>y</b>: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=465076">Bug 465076 – <u>Yet</u> another Ctrl+Tab / All Tabs design revision</a><br /><b>z</b>: <a href="http://www-sal.cs.uiuc.edu/~zilles/">Craig <u>Zilles</u>, Department of Computer Sciences</a></p>
<p>The pages listed here are those that I visit frequently, so it&#8217;s not the best way to see the word searching ability of the location bar; however, it&#8217;s interesting to see that all but one site matches on the title. It&#8217;s also neat to know that I only need to type a single letter and <a href="https://addons.mozilla.org/en-US/firefox/addon/7423">hit enter</a> [addons.mozilla.org] to go to those sites. <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/11/abc-meme#respond">7 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/11/abc-meme/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Touching Firefox</title>
		<link>http://ed.agadak.net/2008/10/touching-firefox</link>
		<comments>http://ed.agadak.net/2008/10/touching-firefox#comments</comments>
		<pubDate>Wed, 22 Oct 2008 12:20:30 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=179</guid>
		<description><![CDATA[I finally upgraded from my iBook G4 to one of those new shiny aluminum MacBooks last Tuesday, so over the weekend, I got to play around with the big buttonless glass trackpad. I noticed that I often used the 4-finger gestures to show all windows or the desktop but rarely used any 3-finger ones.
I knew [...]]]></description>
			<content:encoded><![CDATA[<p>I finally upgraded from my iBook G4 to one of those new shiny aluminum MacBooks last Tuesday, so over the weekend, I got to play around with the big buttonless glass trackpad. I noticed that I often used the 4-finger gestures to show all windows or the desktop but rarely used any 3-finger ones.</p>
<p>I knew iPhoto supported 3-finger swipes to switch between pictures, so I figured I should file a bug so Firefox could do something similar to switch tabs. Lo and behold, there&#8217;s already a bug filed and resolved fixed since April! <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=426739">Three-finger navigation gestures on MacBook Pro trackpads should be recognized</a> [bugzilla.mozilla.org]</p>
<p>Wait a minute.. that&#8217;s Camino! But it didn&#8217;t take long to find two related bugs: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=412486">Core: widget/event-detection support for multi-touch trackpad gestures</a> and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=456520">Firefox: Implementation of Multi-Touch Gestures on Mac OS X</a> [bugzilla.mozilla.org].</p>
<p>And even better is that both bugs have patches already reviewed or in the process of getting reviewed. The bugs were inactive for a few months, but Tom Dyas appeared out of nowhere (<acronym title="As Far As I Can Tell">AFAICT</acronym>) and started submitting patches with the help of Camino, Mac, DOM guys.</p>
<p>Earlier I took the Firefox patch and tweaked it slightly to conform better to sdwilsh style standards <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  and added various refactoring. And now I&#8217;ve tossed those pair of patches up on the try-server so people can touch Firefox with a new set of gestures.</p>
<p>A quick detour for those not familiar with the multi-touch gestures.. The most basic multi-touch gesture is the 2-finger scroll which has been around for over 3 years (my iBook had it), and it lets you scroll through pages up/down/left/right/diagonally. Recently added is the 3-finger &#8220;swipe&#8221; where you place 3 fingers on the trackpad and move them in any direction like the 2-finger scroll. A couple other iPhone-inspired gestures are the &#8220;pinch&#8221; (2 fingers moving towards/away from each other) and the &#8220;twist&#8221; (2 fingers rotating).</p>
<p>Note! The following gestures are totally tentative and subject to change, and I&#8217;m not sure if they&#8217;ll even make it into Firefox 3.1. (From what I quickly gathered, the gestures interface was reverse engineered from some private Apple API, so things might change at any time!) You have been warned! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<ul>
<li><b>Swipe Left</b>: Go back in history [bonus! hold Cmd to open it in a tab]</li>
<li><b>Swipe Right</b>: Go forwards in history</li>
<li><b>Swipe Up</b>: Return to top of page</li>
<li><b>Swipe Down</b>: End of page</li>
<li><b>Pinch Together</b>: Zoom out</li>
<li><b>Pinch Apart</b>: Zoom in</li>
<li><b>Twist Right</b>: Next tab</li>
<li><b>Twist Left</b>: Previous tab</li>
</ul>
<p>Personally, the biggest benefit is the ease of going to the very next tab with just the touchpad. No need to use keyboard shortcuts like cmd-alt-right or fn-ctrl-down or cmd-tab#. Rotating to the right doesn&#8217;t just go to the next tab because if you keep twisting right, you&#8217;ll go to the next one and the next one. You could think of it as turning a dial to pick the tab you want. And of course, turning the dial back in the same motion switches back to the previous tab.</p>
<p>So if all that sounds interesting and you want to try, make sure you have one of these machines before downloading:</p>
<ul>
<li>MacBook Pro from this year (either early-2008 model or the new late-2008 ones)</li>
<li>MacBook Air (both models from 2008)</li>
<li>MacBook from late 2008 (the new aluminum ones)</li>
</ul>
<p><strike><a href="https://build.mozilla.org/tryserver-builds/2008-10-21_11:36-edward.lee@engineering.uiuc.edu-multi.touch/edward.lee@engineering.uiuc.edu-multi.touch-firefox-try-mac.dmg">Firefox 3.1 Beta 2 &#8220;pre&#8221; with Multi-Touch Gestures &#8211; OS X only</a> [build.mozilla.org]</strike><br />
Edit: This feature has been in &#8220;trunk&#8221; since Oct. 23. Firefox 3.1 will have this feature, and the upcoming milestone, Firefox 3.1 Beta 2, will have it. If you want to grab a version now, you can use a <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.1b2pre.en-US.mac.dmg">nightly build</a> [ftp.mozilla.org].</p>
<p>Thanks again Tom Dyas for working on this feature! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<small><a href="http://ed.agadak.net/2008/10/touching-firefox#respond">77 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/10/touching-firefox/feed</wfw:commentRss>
		<slash:comments>77</slash:comments>
		</item>
		<item>
		<title>Auto Dial Add-on for Quick Page Access</title>
		<link>http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access</link>
		<comments>http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access#comments</comments>
		<pubDate>Wed, 27 Aug 2008 23:32:48 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=152</guid>
		<description><![CDATA[Aza recently suggested a zero-configuration speed dial interface [azarask.in], so I started hacking on an add-on to do just that. After plenty of user feedback and reviews over the last couple days, you can get Auto Dial 4 [addons.mozilla.org] as a public add-on without needing to log in.
The add-on creates a page that fills up [...]]]></description>
			<content:encoded><![CDATA[<p>Aza recently suggested a <a href="http://www.azarask.in/blog/post/new-tabs/">zero-configuration speed dial interface</a> [azarask.in], so I started hacking on an add-on to do just that. After plenty of user feedback and reviews over the last couple days, you can get <a href="https://addons.mozilla.org/en-US/firefox/addon/8615">Auto Dial 4</a> [addons.mozilla.org] as a public add-on without needing to log in.</p>
<p>The add-on creates a page that fills up the screen with links to your frequently visited pages with the most frequently visited ones at the top being the easiest to click. As you go further down in the list, the links become smaller for the pages that you less frequently visit.</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/8615" title="Auto Dial Add-on"><img src="http://ed.agadak.net/wp-content/uploads/2008/09/autodial5.thumbnail.png" style="border: 0;" alt="Auto Dial Add-on" width="450" height="306" class="attachment wp-att-153" /></a>
<div class="imagecaption">Quick access to frequently visited pages on new tabs (Ctrl/Cmd-T) (<a href="http://ed.agadak.net/wp-content/uploads/2008/09/autodial5.png">larger</a>)</div>
</div>
</div>
<p>The Auto Dial page shows up every time you open a new tab. So after you hit Ctrl/Cmd-T, you can type into the Smart Location Bar as usual to search through your history as well as easily access your frequently visited pages with a click. With the Auto Dial page, you can click any of the pages like a normal link (middle-click or Ctrl/Cmd-click to open in a tab).</p>
<p>Other features in the current version include letting you to type the page&#8217;s number to jump right to it (hover over a link to see its number), moving selection with the keyboard and stripping off &#8220;http://&#8221; from URLs. There&#8217;s also a collection of about:config preferences to tweak to your liking: how many pages from the same site to have, how big the largest button should be, how fast the number of buttons grows, and how long you get to type the page number.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/8615"><b>Auto Dial Add-on</b></a> [addons.mozilla.org]</p>
<p><i>&#8220;.. <b>adds incredible functionality</b>. It’s like Active desktop for the browser.&#8221; &#8220;i love it! instantly my became my <b>first useful home page</b>&#8221; &#8211; <a href="http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access#respond">Michael, zac</a></i></p>
<p>Thanks again for the feedback through email, my blog, IRC, and AMO.</p>
<small><a href="http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access#respond">68 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/08/auto-dial-beta-add-on-for-quick-page-access/feed</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>Gmail Keyboard Commands</title>
		<link>http://ed.agadak.net/2008/08/gmail-keyboard-commands</link>
		<comments>http://ed.agadak.net/2008/08/gmail-keyboard-commands#comments</comments>
		<pubDate>Wed, 20 Aug 2008 18:25:06 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=146</guid>
		<description><![CDATA[Being able to read, write, organize, search mail in Gmail without ever having to touch the mouse is really convenient. I&#8217;ve even installed a Greasemonkey script, Modified Gmail Macros v. 2.0 [userscripts.org] that lets me label messages just by pressing &#8220;l&#8221; then typing part of the label.
Unfortunately, sometimes Gmail doesn&#8217;t know that you&#8217;re typing &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>Being able to read, write, organize, search mail in Gmail without ever having to touch the mouse is really convenient. I&#8217;ve even installed a Greasemonkey script, <a href="http://userscripts.org/scripts/show/14189">Modified Gmail Macros v. 2.0</a> [userscripts.org] that lets me label messages just by pressing &#8220;l&#8221; then typing part of the label.</p>
<p>Unfortunately, sometimes Gmail doesn&#8217;t know that you&#8217;re typing &#8212; keyboard commands all of a sudden stop working.</p>
<p>I&#8217;ve noticed this a lot recently when I use [alt]-[enter] to open a new tab from the location bar. This often happens when I&#8217;m reading a bugmail and want to see what a bug is, so I copy/paste the bug number and type &#8220;bug 395739&#8243; into the location bar and hit [alt]-[enter] so that the keyword search opens the page in a new tab. After switching back to the Gmail tab, I can no longer press &#8220;u&#8221; to return to the message list; instead, find-as-you-type finds a random link containing &#8220;u&#8221;.</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:414px; margin: auto;"><a href="http://ed.agadak.net/greasemonkey/gmail_fix_focus.user.js"><img src="http://ed.agadak.net/wp-content/uploads/2008/08/gmail-macros-bugzilla.png" alt="Gmail Macros Bugzilla" width="414" height="189" class="attachment wp-att-147" style="border: 0" /></a>
<div class="imagecaption">Adding labels to bug messages just by typing</div>
</div>
</div>
<p>So to address this issue, I&#8217;ve written a simple Greasemonkey script that fixes the problem that I&#8217;ve been running into. It even lets you hit [tab] from the location bar (to the search bar) to the web page and have keyboard commands working in Gmail.</p>
<p>If you have <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> [addons.mozilla.org] already installed, all you have to do is click the following link to install the fix:<br />
<a href="http://ed.agadak.net/greasemonkey/gmail_fix_focus.user.js"><b>Gmail Fix Focus</b></a> [ed.agadak.net]</p>
<p>For those curious, the reason why this focus problem occurs is that when Firefox opens a page in a new tab, it decides to move focus from the location bar into the page. However, Gmail is made of a bunch of IFrames, so focusing the outermost-top page doesn&#8217;t send the keyboard presses to the right place.</p>
<small><a href="http://ed.agadak.net/2008/08/gmail-keyboard-commands#respond">4 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/08/gmail-keyboard-commands/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Enter Selects Add-on for the Efficient</title>
		<link>http://ed.agadak.net/2008/08/enter-selects-add-on-for-the-efficient</link>
		<comments>http://ed.agadak.net/2008/08/enter-selects-add-on-for-the-efficient#comments</comments>
		<pubDate>Tue, 05 Aug 2008 17:03:03 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=139</guid>
		<description><![CDATA[Firefox 3&#8217;s Smart Location Bar learns to show you the page you want when you type in some search terms. In many cases, it already knows what you want when you type just a single letter. So for many people, going to a page is very efficient &#8212; only requiring 3 key strokes: typing the [...]]]></description>
			<content:encoded><![CDATA[<p>Firefox 3&#8217;s Smart Location Bar <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">learns</a> to show you the page you want when you type in some search terms. In many cases, it already knows what you want when you type just a single letter. So for many people, going to a page is very efficient &#8212; only requiring 3 key strokes: typing the letter, pressing [down] or [tab], and hitting enter.</p>
<p>If you want to be even more efficient, take a look at <a href="https://addons.mozilla.org/en-US/firefox/addon/7423">Enter Selects</a> [addons.mozilla.org]. This add-on gets rid of the middle step for you by automatically selecting the first result when you hit enter.</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/7423"><img src="http://ed.agadak.net/wp-content/uploads/2008/08/enterselects.png" alt="Enter Selects Add-on" title="Enter Selects Add-on" width="450" height="73" style="margin: 0;" class="attachment wp-att-140" /></a>
<div class="imagecaption">Pressing enter will select the first result</div>
</div>
</div>
<p>If you <i>don&#8217;t</i> want the first result to be selected, press [esc] or [left]/[right] to close the suggestions. However, if you&#8217;re typing in a URL or editing one from the suggestions, it&#8217;s smart enough to do what you want. You can even type in a domain like &#8220;ed.agadak.net&#8221; and not worry about it automatically selecting the first result.</p>
<p><i>&#8220;I install this on every instance of FF3 I get my hands on thus <b>saving buckets of extraneous keystrokes a day</b>.&#8221; &#8220;Wow this just makes the AwesomeBar <b>so much more usable</b>.&#8221; &#8211; <a href="https://addons.mozilla.org/en-US/firefox/reviews/display/7423">danhorst, pacifika</a></i> [addons.mozilla.org]</p>
<p>Quick update on my other add-ons. The functionality of <a href="http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar">Hide Unvisited</a>, <a href="http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar">Edit Middle</a>, and <a href="https://addons.mozilla.org/en-US/firefox/addon/7755/">Show Keywords</a> have made it in to the nightly versions of Firefox 3.1, so if you&#8217;ve already got those installed, you won&#8217;t need them for the next major release.</p>
<small><a href="http://ed.agadak.net/2008/08/enter-selects-add-on-for-the-efficient#respond">31 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/08/enter-selects-add-on-for-the-efficient/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 Restricts, Matches, Keywords</title>
		<link>http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords</link>
		<comments>http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords#comments</comments>
		<pubDate>Thu, 24 Jul 2008 21:43:21 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=122</guid>
		<description><![CDATA[I&#8217;ve continued to help Firefox users to get to the pages they want faster with features like multi-word search (just press space &#8212; great for matching titles) and adaptive learning (you&#8217;ll only need to type a single letter to get what you want). I even wrote an add-on that takes you to the top listed [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve continued to help Firefox users to get to the pages they want faster with features like <a href="http://ed.agadak.net/2008/01/another-way-to-awesome">multi-word search</a> (just press space &#8212; great for matching titles) and <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">adaptive learning</a> (you&#8217;ll only need to type a single letter to get what you want). I even wrote an add-on that takes you to the top listed site by <a href="http://ed.agadak.net/2008/08/enter-selects-add-on-for-the-efficient">just pressing enter <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </a>, so now you just need to type 1 letter, and hit enter, and you&#8217;re where you want to be (no need to press down first)!</p>
<p>So in Firefox 3.5, there&#8217;s some new ways to change what shows up in the Smart Location Bar such as restricting results to show only your history (and not your unvisited bookmarks) or matching only in the URL instead of also in the title. Additionally, you can see your Smart Keywords queries show up in the drop down.</p>
<p>You can restrict the search to your history by typing &#8220;^&#8221;, or bookmarks with &#8220;*&#8221;, or tagged pages with &#8220;+&#8221;. To make what you&#8217;ve typed match only in the URL type &#8220;@&#8221;, and for title/tags only use &#8220;#&#8221;.</p>
<p>You can first start typing something you want to find like &#8220;mozilla&#8221;..</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/07/mozilla.png" alt="Search \&quot;mozilla\&quot;" width="450" height="260" class="attachment wp-att-123" />
<div class="imagecaption">All results that match &quot;mozilla&quot;</div>
</div>
</div>
<p>Then realize that there&#8217;s too many results and you know it&#8217;s a page that you&#8217;ve tagged, so you restrict the results with &#8220;+&#8221;..</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/07/mozilla-tag.png" alt="Search \&quot;mozilla +\&quot;" width="450" height="260" class="attachment wp-att-124" />
<div class="imagecaption">Restricting &quot;mozilla&quot; to tagged pages</div>
</div>
</div>
<p>Then continue narrowing the results by typing more words..</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/07/mozilla-tag-ed.png" alt="Search \&quot;mozilla + ed\&quot;" width="450" height="107" class="attachment wp-att-125" />
<div class="imagecaption">Quickly finding pages out of thousands</div>
</div>
</div>
<p>If you prefer the results to always restrict to history and match only in the URL, you can go to about:config and change the corresponding preferences to nothing (edit the value and delete the special character). This way you can always be only searching your visited history and not worry about matching in the title. If you&#8217;ve installed <a href="http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar">Hide Unvisited</a> [ed.agadak.net], you can uninstall it and just change browser.urlbar.restrict.history to &#8220;&#8221; (nothing).</p>
<div style="text-align: center;">
<div class="imageframe centered" style="width:353px; margin: auto;"><img src="http://ed.agadak.net/wp-content/uploads/2008/07/default-pref.png" alt="about:config urlbar" width="353" height="108" class="attachment wp-att-130" />
<div class="imagecaption">Preferences to change default restrict/match behavior</div>
</div>
</div>
<p>As with the Hide Unvisited add-on, restricting to history will only show pages that you have visited and are stored in your history. This means if you visit a bookmark, it will still show up even when restricting to history. However, you can select the entry from the location bar and hit Delete, or delete pages from the History Panel, or just Clear History to make them disappear.</p>
<p>If you don&#8217;t like the standard characters to enable restrict/match, you can modify the values from about:config to be whatever you want. They can be single characters, whole words, even words in other languages.</p>
<p>One last thing about Keywords is that you can now see what you&#8217;re going to search with a Smart Keyword Bookmark. You can even assign multiple bookmarks the same keyword so one can be the default Wikipedia search and another can use <a href="http://www.google.com/search?q=%s+site:wikipedia.org+inurl:wiki+-intitle:%22User+talk%22&#038;btnI">I&#8217;m Feeling Lucky</a> [google.com]. You can uninstall <a href="https://addons.mozilla.org/en-US/firefox/addon/7755/">Show Keywords</a> [addons.mozilla.org] if you&#8217;re using that for 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/07/wi-firefox-shiretoko.png" alt="Wikipedia Smart Keyword" width="450" height="106" class="attachment wp-att-132" />
<div class="imagecaption">Choose from multiple Smart Keyword Searches</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords#respond">235 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords/feed</wfw:commentRss>
		<slash:comments>235</slash:comments>
		</item>
		<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[AwesomeBar]]></category>
		<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 &#8211; 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">65 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/07/firefox-3-smart-location-bar-saves-you-time/feed</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</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[AwesomeBar]]></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; &#8211; <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">37 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/06/hide-unvisited-add-on-for-awesomebar/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</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[AwesomeBar]]></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; &#8211; <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">18 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/05/edit-middle-add-on-for-awesomebar/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</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[AwesomeBar]]></category>
		<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 &#8211; 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 &#8211; 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">4 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/04/a-different-development-process/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</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[AwesomeBar]]></category>
		<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">15 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/04/awesomeness-in-beta-5/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</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[AwesomeBar]]></category>
		<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>
		<slash:comments>0</slash:comments>
		</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[AwesomeBar]]></category>
		<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">10 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/why-i-worked-on-firefox/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</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[AwesomeBar]]></category>
		<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">36 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/using-the-awesomebar/feed</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</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[AwesomeBar]]></category>
		<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 [...]]]></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 &#8211; 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">23 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/beyond-awesome/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</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>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Another Way to Awesome</title>
		<link>http://ed.agadak.net/2008/01/another-way-to-awesome</link>
		<comments>http://ed.agadak.net/2008/01/another-way-to-awesome#comments</comments>
		<pubDate>Sat, 19 Jan 2008 17:04:06 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/01/another-way-to-awesome</guid>
		<description><![CDATA[For the work on the AwesomeBar [ed.agadak.net], I&#8217;ve noted before that getting relevant results [ed.agadak.net] in the location bar to select is important before the adaptive behavior is useful.
A friend of mine pointed out that if he knew multiple words in the title, typing both resulted in no results instead of seeing some results if [...]]]></description>
			<content:encoded><![CDATA[<p>For the work on the <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">AwesomeBar</a> [ed.agadak.net], I&#8217;ve noted before that <a href="http://ed.agadak.net/2008/01/not-just-awesome">getting relevant results</a> [ed.agadak.net] in the location bar to select is important before the adaptive behavior is useful.</p>
<p>A friend of mine pointed out that if he knew multiple words in the title, typing both resulted in no results instead of seeing some results if he typed a word individually. This is because Beta 2 tries to match the whole input against either the title or url of a page.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/bug-auto-complete.thumbnail.png" width="450" height="186" alt="bug auto complete" title="bug auto complete" style="border: 0;" />
<div class="imagecaption">Drilling down results with 3 words matching the title</div>
</div>
</div>
<p>Instead of getting rid of all those good results, we can treat each word separately and match them in different places in the title. This lets the user incrementally filter out results by typing words s/he see from the current results.</p>
<p>But what if you knew the domain and a word in the title? No problem! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' 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/01/applecom-air.thumbnail.png" width="450" height="145" alt="apple.com air" title="apple.com air" style="border: 0;" />
<div class="imagecaption">Matching the url and title at the same time</div>
</div>
</div>
<p>Here&#8217;s some builds that you can use to test things out: <a href="https://build.mozilla.org/tryserver-builds/2008-01-19_00:36-edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc/edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc-firefox-try-win32.zip">Win32 zip</a> (<a href="https://build.mozilla.org/tryserver-builds/2008-01-19_00:36-edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc/edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc-firefox-try-win32.installer.exe">installer exe</a>), <a href="https://build.mozilla.org/tryserver-builds/2008-01-19_00:36-edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc/edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc-firefox-try-mac.dmg">OS X dmg</a>, <a href="https://build.mozilla.org/tryserver-builds/2008-01-19_00:36-edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc/edward.lee@engineering.uiuc.edu-glob.fast.adap.book.matc-firefox-try-linux.tar.bz2">Linux tbz2</a> [build.mozilla.org].</p>
<p>These include the incoming changes for &#8220;global frecency&#8221; as well as adaptive learning. So as an additional bonus, the browser will learn which pages you&#8217;ve selected after drilling down and show it first the next time &#8212; even when you&#8217;ve only typed the first word. <i>(I haven&#8217;t changed the UI, so it doesn&#8217;t show which words matched, but the results will be there.)</i></p>
<p>There has been plenty of work by developers to get the results to show up immediately, so comments on performance are appreciated. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><i>Edit: I just realized things might be initially slow because of the &#8220;global frecency&#8221; migration for existing profiles. So if you don&#8217;t do anything in the browser.. leave the room, grab a drink for a few minutes, things should go faster after it calculates some frecencies for your pages.</i></p>
<small><a href="http://ed.agadak.net/2008/01/another-way-to-awesome#respond">11 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/01/another-way-to-awesome/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Not Just Awesome</title>
		<link>http://ed.agadak.net/2008/01/not-just-awesome</link>
		<comments>http://ed.agadak.net/2008/01/not-just-awesome#comments</comments>
		<pubDate>Sun, 06 Jan 2008 14:42:21 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2008/01/not-just-awesome</guid>
		<description><![CDATA[It&#8217;s been over two months since I first posted about the AwesomeBar [ed.agadak.net], and some of you have been able experience the power of the learning behavior. Frequently visited sites are easily accessed with just a single letter. These &#8220;automatic bookmarks&#8221; bubble up to the top of the location bar autocomplete list just after selecting [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been over two months since I first posted about the <a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar">AwesomeBar</a> [ed.agadak.net], and some of you have been able experience the power of the learning behavior. Frequently visited sites are easily accessed with just a single letter. These &#8220;automatic bookmarks&#8221; bubble up to the top of the location bar autocomplete list just after selecting a result once.</p>
<p>However, I noticed that the list contained many &#8220;random&#8221; results below the adaptive learning results for these single-letter-bookmarks. Looking at the highlighted portions, they would be in the middle of words and all over the url. Or in the case of &#8216;p&#8217;, the list would contain pages that matched htt<b>p</b> which isn&#8217;t too useful when searching.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:400px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/pn-trunk.png" width="400" height="287" alt="Confused match" title="Confused match" style="border: 0;" />
<div class="imagecaption">Random results for &#8216;n&#8217; (or &#8216;p&#8217;) in Beta 2</div>
</div>
</div>
<p>The adaptive learning won&#8217;t be useful if the user can&#8217;t find anything of interest to select out of the list. Sure, one could keep typing and typing to filter out more pages and find something specific, but that requires typing more.. (and people are lazy! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  )</p>
<p>So I decided to improve the quality of the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=410133">pre-adaptive results</a> [bugzilla.mozilla.org]. Now matches near the beginning of the title or on word boundaries (and ends of words) are given preference. The same applies to the url, so matches near the front (like the domain) are preferred as well. Matching more helps as well, so top level pages are preferred over sub-pages with long, mysterious ?queries. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:400px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/p-good.png" width="400" height="287" alt="Awesome p match" title="Awesome p match" style="border: 0;" />
<div class="imagecaption">Preference for matches near the beginning</div>
</div>
</div>
<p>However, even with smarter matching of the title or url, the ordering might not be the one you want. Perhaps you have a page with the same title on the internet and locally for development, and you want one over the other. Only so much can be done without making things overly complex and slow, so that&#8217;s where the adaptive learning can fill in the gap.</p>
<p>There are builds available for people to try: <a href="https://build.mozilla.org/tryserver-builds/2008-01-06_04:29-edward.lee@engineering.uiuc.edu-adaptive.smartrank/edward.lee@engineering.uiuc.edu-adaptive.smartrank-firefox-try-win32.zip">Win32 zip</a> (<a href="https://build.mozilla.org/tryserver-builds/2008-01-06_04:29-edward.lee@engineering.uiuc.edu-adaptive.smartrank/edward.lee@engineering.uiuc.edu-adaptive.smartrank-firefox-try-win32.installer.exe">installer exe</a>), <a href="https://build.mozilla.org/tryserver-builds/2008-01-06_04:29-edward.lee@engineering.uiuc.edu-adaptive.smartrank/edward.lee@engineering.uiuc.edu-adaptive.smartrank-firefox-try-mac.dmg">OS X dmg</a>, <a href="https://build.mozilla.org/tryserver-builds/2008-01-06_04:29-edward.lee@engineering.uiuc.edu-adaptive.smartrank/edward.lee@engineering.uiuc.edu-adaptive.smartrank-firefox-try-linux.tar.bz2">Linux tbz2</a> [build.mozilla.org]. These contain the changes for smarter matching results as well as the adaptive learning.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:400px;"><img src="http://ed.agadak.net/wp-content/uploads/2008/01/n-good.png" width="400" height="286" alt="Adaptive n match" title="Adaptive n match" style="border: 0;" />
<div class="imagecaption">Adaptive results up top in addition to smarter matching<br /><span style="font-size: smaller;">(The highlighted portion doesn&#8217;t necessarily correspond to the smart-matched portion.)</span></div>
</div>
</div>
<p>So hopefully with these combined, people will need only to type a fewer letters to find a page they want initially and then type a single letter to find it again. (Are people lazy or am I making them lazy? .. I mean efficient! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  )</p>
<small><a href="http://ed.agadak.net/2008/01/not-just-awesome#respond">9 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/01/not-just-awesome/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>1 Potato, 2 Potato, 3 Potato, 4</title>
		<link>http://ed.agadak.net/2007/12/one-potato-two-potato-three-potato-four</link>
		<comments>http://ed.agadak.net/2007/12/one-potato-two-potato-three-potato-four#comments</comments>
		<pubDate>Mon, 03 Dec 2007 00:57:21 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/12/one-potato-two-potato-three-potato-four</guid>
		<description><![CDATA[I&#8217;ve been working on a bug to better display the download time remaining [bugzilla.mozilla.org] because right now it only shows either seconds or minutes. Not too useful for really long downloads (but friendlier than the hh:mm:ss of Firefox 2).
It&#8217;s gone from 1) the current seconds/minutes display to 2) displaying fractional times for seconds/minutes/hours/days to 3) [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a bug to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=394516">better display the download time remaining</a> [bugzilla.mozilla.org] because right now it only shows either seconds or minutes. Not too useful for <i>really</i> long downloads (but friendlier than the hh:mm:ss of Firefox 2).</p>
<p>It&#8217;s gone from 1) the current seconds/minutes display to 2) displaying fractional times for seconds/minutes/hours/days to 3) whole times with pairs of sub-units to 4) figuring out how to implement features from the upcoming <a href="http://wiki.mozilla.org/L20n">l10n v2 (l20n)</a> [wiki.mozilla.org] because we don&#8217;t have them now.</p>
<p>In particular.. how to correctly display plural forms of words for various numbers. In this case, 1 day vs 2 day<b><u>s</u></b>.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:394px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/12/download-times.png" title="Firefox 3 Download Times"><img src="http://ed.agadak.net/wp-content/uploads/2007/12/download-times.png" width="394" height="390" alt="Firefox 3 Download Times" title="Firefox 3 Download Times" style="border: 0;" /></a>
<div class="imagecaption">Downloads with 2 time units and their correct plurals</div>
</div>
</div>
<p>English is fairly simple with just 2 plural forms: a singular one for 1 and a plural one for everything else. (Asian languages are even easier! Everything is plural or singular.. however you want to look at it. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>Turns out some other languages aren&#8217;t so easy.</p>
<p>Russian has 3 plural forms: a singular form for values ending in 1 like 1, 21, 31, 41.. except 11; a special plural form for values ending in 2, 3 or 4 but skipping 12, 13, 14; and a common plural form for everything else (5-20, 25-30..).</p>
<p>There was some discussion about what to expose to the localizer as in how to specify which values need which plural forms. Enumerate all desired values and parse? Give a javascript expression and eval? Come up with a regular expression and execute?</p>
<p>Eventually Zbigniew (gandalf) provided a useful link to <a href="http://www.gnu.org/software/gettext/manual/html_node/gettext_150.html#Plural-forms">GNU&#8217;s <tt>gettext</tt> utility</a> [gnu.org] that lists 11 rules of shared plural forms such as a single plural form for the Asian and Turkic family; and two forms exactly like English&#8217;s for the Germanic, Latin/Greek, Semitic, etc. families.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/12/russian.png" title="gettext for Russian"><img src="http://ed.agadak.net/wp-content/uploads/2007/12/russian.thumbnail.png" width="450" height="140" alt="gettext for Russian" title="gettext for Russian" style="border: 0;" /></a>
<div class="imagecaption"><tt>gettext</tt>&#8217;s rule for Slavic/Russian-like languages</div>
</div>
</div>
<p>The list seemed pretty comprehensive, so I figured why not just implement those 11 rules and have localizers pick the matching rule number and then fill in the appropriate plural forms of the words.</p>
<p>At first I also provided a way to allow custom rules, but now I&#8217;m thinking about backing away from that. This would keep things much simpler &mdash; localizers wouldn&#8217;t worry about the special procedure to use a custom rule and wouldn&#8217;t need to create a rule that perfectly matches the language.</p>
<p>For example, if a language that&#8217;s almost-like-Russian where the plural forms are the same except 11 is singular, that localizer would just use the same rule for Russian as that&#8217;s the closest match. It&#8217;s not ideal, but the users in that language would still understand what the download was trying to inform them. And for the common case of all the other values, the plural forms match up perfectly.</p>
<p>The last task to be done is informing the localizers on how to make use of this system. This will probably involve linking to the l10n wiki with some simple instructions for picking out the appropriate rule and filling in the plural forms of the words.</p>
<p>A rule entry on the wiki would let the localizer know how many plural forms there are, which languages use it, and what each form means similar to the <tt>gettext</tt> page. Additionally it would have a list of sample values that match each form to be totally explicit.</p>
<blockquote><p>
<u><b>Plural rule #1 (2 forms)</b></u><br />
<b>Families:</b> Germanic (Danish, Dutch, English, Faroese), Finno-Ugric (Estonian, Finnish), &hellip;<br />
<b>is 1:</b> <tt>1</tt><br />
<b>everything else:</b> <tt>0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, &hellip;</tt></p>
<p><u><b>Plural rule #7 (3 forms)</b></u><br />
<b>Families:</b> Slavic (Croatian, Serbian, Russian, Ukrainian)<br />
<b>ends in 1; not 11:</b> <tt>1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, &hellip;</tt><br />
<b>ends in 2,3,4; not 12,13,14:</b> <tt>2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, &hellip;</tt><br />
<b>everything else:</b> <tt>0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, &hellip;</tt>
</p></blockquote>
<p>So to localize the strings for the download manager, someone doing English would scan the list and find Rule #1 with the appropriate plural forms and localize the strings for &#8220;seconds&#8221;, &#8220;minutes&#8221;, etc. matching the order of the plural forms listed under the rules.</p>
<p><tt>pluralRule=1</tt><br />
<tt>seconds=second;seconds</tt><br />
<tt>minutes=minute;minutes</tt></p>
<p><tt>potatoes=potato;potatoes</tt> <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/2007/12/one-potato-two-potato-three-potato-four#respond">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/12/one-potato-two-potato-three-potato-four/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SmartBar to AwesomeBar</title>
		<link>http://ed.agadak.net/2007/11/smartbar-to-awesomebar</link>
		<comments>http://ed.agadak.net/2007/11/smartbar-to-awesomebar#comments</comments>
		<pubDate>Mon, 05 Nov 2007 03:50:32 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Ph.D.]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/11/smartbar-to-awesomebar</guid>
		<description><![CDATA[One of the most useful features in Firefox 3 is the smarter location bar which now selects pages from your history and bookmarks if your input matches any part of them. For comparison, Firefox 2 would only match the beginning of the URL &#8211; typically the domain name. 


Firefox 3 searches text from the URL [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most useful features in Firefox 3 is the smarter location bar which now selects pages from your history and bookmarks if your input matches any part of them. For comparison, Firefox 2 would only match the beginning of the URL &#8211; typically the domain name. </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2007/11/smart-bar.png" alt="Firefox 3 Smart Bar" />
<div class="imagecaption">Firefox 3 searches text from the URL and title</div>
</div>
</div>
<p>When the &#8220;smart&#8221; bar first landed, I was somewhat disoriented because I was so used to typing domain names to browse history and Firefox didn&#8217;t give those results back. For example, I would type &#8220;en&#8221; (for <a href="http://en.wikipedia.org/"><b>en</b>.wikipedia.org</a>) but get random results that happened to match &#8220;compon<b>en</b>t,&#8221; &#8220;<b>en</b>-US,&#8221; &#8220;<b>en</b>gineering,&#8221; etc.</p>
<p>There were some changes to the location bar to help address these issues, but more importantly, I soon learned to use it by typing in words from the middle of the URL or title. For example, I now type the course number <a href="http://www.cs.uiuc.edu/class/fa07/cs426/">426</a> [cs.uiuc.edu] instead of typing out the whole &#8220;cs.uiuc.edu&#8230;&#8221; and scrolling down to pick that one out of the other classes that show up in my history. I can&#8217;t even use Firefox 2 in the computer labs anymore because it doesn&#8217;t have the &#8220;SmartBar&#8221; &mdash; <a href="http://dietrich.ganx4.com/blog/?p=258">others share</a> [dietrich.ganx4.com] this <a href="http://blog.mozilla.com/ted/2007/10/26/i-love-places/">same experience</a> [blog.mozilla.com]. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>While the SmartBar is pretty smart, it can get confused sometimes. It currently ranks the results based on how often you&#8217;ve visited that page, so if you visit <a href="https://bugzilla.mozilla.org/">bugzilla.mozilla.org</a> every day, typing any letter that matches the page will have it ranked first. This is fine by itself, but if you happen to visit other pages like <a href="http://planet.mozilla.org/">planet.mozilla.org</a> but not as frequently as bugzilla, Firefox will place bugzilla above planet if you type &#8220;moz&#8221;.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2007/11/confused-bar.png" alt="Firefox 3 Confused Bar" />
<div class="imagecaption">Bugzilla is placed over other pages because it&#8217;s most frequently visited</div>
</div>
</div>
<p>That&#8217;s not really too big of an issue because I happen to always go to those pages by typing other words: <b>bugz</b>illa.mozilla.org and <b>plan</b>et.mozilla.org. However, if I wanted to visit <b>moz</b>illazine, Firefox puts other pages ahead of it. Every time I type &#8220;moz,&#8221; I only want to select the mozillazine entry. I want that entry to be the first result.</p>
<p>In comes AwesomeBar! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  That&#8217;s exactly what I&#8217;ve done for <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=395739">adaptive learning url bar autocomplete</a> [bugzilla.mozilla.org]. Firefox will remember the text you typed and the page you selected, so next time when you give a similar input, Firefox will give a higher rank to those pages. It even matches partial inputs, so I can even type just &#8220;p&#8221; from <b><u>p</u>lan</b>et, and Firefox knows to put that above other pages that just happen to also match &#8220;p&#8221;.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><img src="http://ed.agadak.net/wp-content/uploads/2007/11/adaptive-bar.png" alt="Firefox 3 Awesome Bar" />
<div class="imagecaption">Firefox 3 could predict what you want with feedback-driven adaptive learning</div>
</div>
</div>
<p>Continuing my example of bugzilla, planet, mozillazine.. The first time around, I type &#8220;mozillazine&#8221; and press down and enter to select the entry. Next time, when I type just &#8220;moz,&#8221; Firefox remembers that I selected <a href="http://forums.mozillazine.org/viewforum.php?f=23">forums.<b><u>moz</u>illazine</b>.org</a> and places it as the first result.</p>
<p>Assuming that I can convince some people that we should have this in Firefox 3, we can potentially get this in as early as Beta 2. There&#8217;s still a lot of opportunity for other adaptive techniques throughout Firefox, but even just looking at the AwesomeBar, there&#8217;s room to make it even smarter &mdash; adapting to shifting behavior. For example, Firefox has learned that you always visit planet when typing &#8220;plan,&#8221; but you&#8217;ve started doing development and now frequent <a href="http://www.xulplanet.com/">xul<b>plan</b>et</a>. Firefox could then realize it should give less ranking to planet.m.o and give more to xulplanet.</p>
<p>I&#8217;m sure others will come in and create great new adaptive techniques for Firefox. In the mean time, I&#8217;ll need to continue working on my Ph.D. research which happens to be somewhat related &mdash; making new adaptive compiler techniques that take advantage of key hardware features. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em style="font-size: smaller;">(Post date bumped up for planet.mozilla.org.)</em></p>
<small><a href="http://ed.agadak.net/2007/11/smartbar-to-awesomebar#respond">44 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/11/smartbar-to-awesomebar/feed</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>ActionMonkey Time! (Begin Internship)</title>
		<link>http://ed.agadak.net/2007/06/actionmonkey-time-begin-internship</link>
		<comments>http://ed.agadak.net/2007/06/actionmonkey-time-begin-internship#comments</comments>
		<pubDate>Wed, 27 Jun 2007 02:29:56 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/actionmonkey-time-begin-internship</guid>
		<description><![CDATA[Today I officially began my Mozilla internship where I&#8217;ll be playing around with ActionMonkey [wiki.mozilla.org] for the Mozilla 2. This new monkey is a combination of two monkeys: SpiderMonkey (current JavaScript engine used by Mozilla created by Brendan Eich [wikipedia.org]) and Tamarin (VM and JIT for ECMAScript 4th edition donated by Adobe).
Eventually, this new engine [...]]]></description>
			<content:encoded><![CDATA[<p>Today I officially began my Mozilla internship where I&#8217;ll be playing around with <a href="http://wiki.mozilla.org/JavaScript:ActionMonkey">ActionMonkey</a> [wiki.mozilla.org] for the Mozilla 2. This new monkey is a combination of two monkeys: SpiderMonkey (current JavaScript engine used by Mozilla created by <a href="http://en.wikipedia.org/wiki/Brendan_Eich">Brendan Eich</a> [wikipedia.org]) and Tamarin (<acronym title="Virtual Machine">VM</acronym> and <acronym title="Just-in-Time Compiler">JIT</acronym> for ECMAScript 4th edition donated by Adobe).</p>
<p>Eventually, this new engine will speed up Firefox, which has a front-end that is  mainly controlled by JavaScript, as well as web applications using JavaScript. It&#8217;ll be able to do runtime optimizations instead of just interpreting the code &#8211; similar ideas to what can make Java faster than C++ code.</p>
<p>As for the Summer of Code project, I&#8217;ll need to finish up the Link Fingerprints Internet Draft and wait for comments. Code-wise, I have a working implementation with patches in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=377245">bug 377245</a> [bugzilla.mozilla.org], but it seems like things are waiting on the standardization of the Link Fingerprints concept. And the side project of coding up Download Manager changes might take a back seat for now. (Well, the main big thing here was using <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=237693">bytes/KB/MB/GB units when appropriate</a> [bugzilla.mozilla.org]. <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/2007/06/actionmonkey-time-begin-internship#respond">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/actionmonkey-time-begin-internship/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Status Update (2007/06/17 &#8211; 2007/06/23)</title>
		<link>http://ed.agadak.net/2007/06/status-update-20070617-20070623</link>
		<comments>http://ed.agadak.net/2007/06/status-update-20070617-20070623#comments</comments>
		<pubDate>Tue, 26 Jun 2007 08:29:08 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/status-update-20070617-20070623</guid>
		<description><![CDATA[Status Update:
[RFC] Writing draft for #hash(type:data) syntax with a specific type of sha256
for all mime types.
[Code] Updated code from reviews + strictify syntax and made big patch
available in bug 377245. (grab v2 bug 385599 with the #undef if you want to try
things out)
Last week (2007/06/17 &#8211; 2007/06/23):
- Get code reviewed and update from comments
- Add [...]]]></description>
			<content:encoded><![CDATA[<p>Status Update:</p>
<p>[RFC] Writing draft for #hash(type:data) syntax with a specific type of sha256<br />
for all mime types.</p>
<p>[Code] Updated code from reviews + strictify syntax and made big patch<br />
available in bug 377245. (grab v2 bug 385599 with the #undef if you want to try<br />
things out)</p>
<p>Last week (2007/06/17 &#8211; 2007/06/23):</p>
<p>- Get code reviewed and update from comments<br />
- Add flag to turn on/off (bug 385599)<br />
- (Interview for platform internship)<br />
- Not get responses from various people about drafts, RFC, IETF<br />
- Outline and draft the internet draft</p>
<p>This week (2007/06/24 &#8211; 2007/06/30):</p>
<p>- Continue writing draft and review/submit before July 2nd<br />
- (Start internship?)</p>
<small><a href="http://ed.agadak.net/2007/06/status-update-20070617-20070623#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/status-update-20070617-20070623/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sushi Near Berkeley</title>
		<link>http://ed.agadak.net/2007/06/sushi-near-berkeley</link>
		<comments>http://ed.agadak.net/2007/06/sushi-near-berkeley#comments</comments>
		<pubDate>Sun, 24 Jun 2007 17:27:03 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Berkeley]]></category>
		<category><![CDATA[Food]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/sushi-near-berkeley</guid>
		<description><![CDATA[As many going to Berkeley know, there&#8217;s a sushi place in Alameda with really good sushi &#8211; Sushi House (on Shoreline, next to Carlsbad Beach). There&#8217;s many sushi specialties on the menu (but the cartoony pictures don&#8217;t quite match up exactly..), but it&#8217;s not too expensive if you don&#8217;t order too much. Just make sure [...]]]></description>
			<content:encoded><![CDATA[<p>As many going to Berkeley know, there&#8217;s a sushi place in Alameda with really good sushi &#8211; Sushi House (on Shoreline, next to Carlsbad Beach). There&#8217;s many sushi specialties on the menu (but the cartoony pictures don&#8217;t quite match up exactly..), but it&#8217;s not too expensive if you don&#8217;t order too much. Just make sure to arrive early and prepare for a long wait even though it&#8217;s a pretty big place &#8211; good thing there&#8217;s a beach right next to the restaurant. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/library-1086.jpg" title="Caterpillar Roll"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/library-1086.thumbnail.jpg" width="450" height="337" alt="Caterpillar Roll" /></a>
<div class="imagecaption">This caterpillar lacks antennas and eyes shown on the menu</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/library-1087.jpg" title="Cherry Blossom Roll"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/library-1087.thumbnail.jpg" width="450" height="337" alt="Cherry Blossom Roll" /></a>
<div class="imagecaption">Cherry blossoms are made of fish! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/sushi-near-berkeley#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/sushi-near-berkeley/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gourmet Food Festival</title>
		<link>http://ed.agadak.net/2007/06/gourmet-food-festival</link>
		<comments>http://ed.agadak.net/2007/06/gourmet-food-festival#comments</comments>
		<pubDate>Sat, 23 Jun 2007 21:26:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Bay Area]]></category>
		<category><![CDATA[Food]]></category>
		<category><![CDATA[Illinois]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/gourmet-food-festival</guid>
		<description><![CDATA[This particular farmer&#8217;s market in Redwood City seems to be open every day &#8211; kinda like a grocery store, but it also has the open air market setting for various booths to set up for the gourmet food festival. There was plenty of fresh produce like piles and piles of corn for cheap! (Wait.. am [...]]]></description>
			<content:encoded><![CDATA[<p>This particular farmer&#8217;s market in Redwood City seems to be open every day &#8211; kinda like a grocery store, but it also has the open air market setting for various booths to set up for the gourmet food festival. There was plenty of fresh produce like piles and piles of corn for cheap! (Wait.. am I back in Illinois already?)</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/library-1083.jpg" title="Sigona’s Farmer’s Market"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/library-1083.thumbnail.jpg" width="450" height="337" alt="Sigona’s Farmer’s Market" /></a>
<div class="imagecaption">&#8220;The Fresh Approach&#8221; with many onions and more onions</div>
</div>
</div>
<p>For the special event, there seemed to have been a bunch of specialty cheeses, so if you want to test out all sorts of fancy cheeses, come back here next time. There were also some not-quite-so-edible displays (but I suppose you could eat the flowers if you <i>really</i> wanted to..) And a single specialty chocolatier stand. Mmmm.. Chocolates + Almonds! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/library-1084.jpg" title="Orchids"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/library-1084.thumbnail.jpg" width="450" height="337" alt="Orchids" /></a>
<div class="imagecaption">8+ flowers per orchid.. tasty?</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/library-1082.jpg" title="Chocolate Stand"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/library-1082.thumbnail.jpg" width="450" height="337" alt="Chocolate Stand" /></a>
<div class="imagecaption">A bowl of Orange Twigs from Charles Chocolates (milk chocolate ganache, orange, more chocolate!)</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/gourmet-food-festival#respond">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/gourmet-food-festival/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Status Update (2007/06/03 &#8211; 2007/06/16)</title>
		<link>http://ed.agadak.net/2007/06/status-update-20070603-20070616</link>
		<comments>http://ed.agadak.net/2007/06/status-update-20070603-20070616#comments</comments>
		<pubDate>Tue, 19 Jun 2007 08:50:58 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/status-update-20070603-20070616</guid>
		<description><![CDATA[Status Update:
[Code] Things are working fine for me. Waiting for reviews.
[RFCs] Contacting people on how to draft Link Fingerprints for IETF&#8217;s July 2nd meeting.
Last 2 weeks (2007/06/03 &#8211; 2007/06/16):
- Done initial coding to support Link Fingerprints for HTTP downloads/pages
- Open various bugs to break the patch into pieces &#8211; waiting for reviews.
- (Submit to MICRO; [...]]]></description>
			<content:encoded><![CDATA[<p>Status Update:</p>
<p>[Code] Things are working fine for me. Waiting for reviews.</p>
<p>[RFCs] Contacting people on how to draft Link Fingerprints for IETF&#8217;s July 2nd meeting.</p>
<p>Last 2 weeks (2007/06/03 &#8211; 2007/06/16):</p>
<p>- Done initial coding to support Link Fingerprints for HTTP downloads/pages<br />
- Open various bugs to break the patch into pieces &#8211; waiting for reviews.<br />
- (Submit to MICRO; Attend FCRC for ISCA, PLDI, HOPL &#8211; majority of last 2 weeks)<br />
- Fix related download manager bugs (and other random bugs..)</p>
<p>This week (2007/06/17 &#8211; 2007/06/23):</p>
<p>- Draft Link Fingerprints.<br />
- Write. Write. Write.<br />
- Contact Borden and St.Laurent about their type-independent #fragment-id</p>
<small><a href="http://ed.agadak.net/2007/06/status-update-20070603-20070616#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/status-update-20070603-20070616/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nintendo Dominates May US Sales</title>
		<link>http://ed.agadak.net/2007/06/nintendo-dominates-may-us-sales</link>
		<comments>http://ed.agadak.net/2007/06/nintendo-dominates-may-us-sales#comments</comments>
		<pubDate>Sun, 17 Jun 2007 07:49:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[DS]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Wii]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/07/nintendo-dominates-may-us-sales</guid>
		<description><![CDATA[Wow. The numbers are coming in from NPD with Nintendo way on top for both hardware and software. A total of over 850,000 units of DS, Wii and other hardware as well as over 1.1 million copies of games when counting the top 5 games of all systems from the month. This is especially interesting [...]]]></description>
			<content:encoded><![CDATA[<p>Wow. The numbers are coming in from NPD with Nintendo way on top for both hardware and software. A total of over 850,000 units of DS, Wii and other hardware as well as over 1.1 million copies of games when counting the top 5 games of all systems from the month. This is especially interesting because compared to May 2006 numbers, hardware and software are up almost 70% and 50% respectively for the usually slow-for-video-game middle part of the year.</p>
<p>I suppose Nintendo has been getting more and more sales in the recent months, but now they&#8217;re starting to put up press releases like this&#8230; <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<blockquote><p>Oh, my! All this attention is enough to make a girl blush!</p>
<p>As a princess I’m used to being adored, but this is just too much! I know I’m probably sounding like a broken record, but once again my friends at the NPD Group are telling me that Wii and Nintendo DS finished May as the most popular systems in the United States.</p>
<p>Thanks to everyone for your wonderful support! Nintendo couldn’t have made it back to the top without you. You’re all Mario-caliber heroes in my book.</p></blockquote>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/07/wp02_superpeach_1024.jpg" title="Super Princess Peach"><img src="http://ed.agadak.net/wp-content/uploads/2007/07/wp02_superpeach_1024.thumbnail.jpg" width="450" height="337" alt="Super Princess Peach" /></a>
<div class="imagecaption">Peach&#8217;s reaction to insanely strong video game sales</div>
</div>
</div>
<p>Source: <a href="http://www.neogaf.com/forum/showthread.php?t=163636">NeoGAF</a> and <a href="http://gonintendo.com/?p=19697">GoNintendo</a></p>
<small><a href="http://ed.agadak.net/2007/06/nintendo-dominates-may-us-sales#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/nintendo-dominates-may-us-sales/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bye Bye San Diego!</title>
		<link>http://ed.agadak.net/2007/06/bye-bye-san-diego</link>
		<comments>http://ed.agadak.net/2007/06/bye-bye-san-diego#comments</comments>
		<pubDate>Thu, 14 Jun 2007 00:51:59 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[San Diego]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/bye-bye-san-diego</guid>
		<description><![CDATA[Maybe I&#8217;ll be back here in 4 years for the next FCRC.. and perhaps with a paper submission! (Note to self: Don&#8217;t sign up for 2 conferences that are back to back that end/begin in the middle of the day. Apparently there&#8217;s no food for conferences ending today in the middle of the day, and [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe I&#8217;ll be back here in 4 years for the next FCRC.. and perhaps with a paper submission! (Note to self: Don&#8217;t sign up for 2 conferences that are back to back that end/begin in the middle of the day. Apparently there&#8217;s no food for conferences ending today in the middle of the day, and no food for conferences starting in the middle of the day either..)</p>
<p>Time to head back to the commuter airport at SAN, which has the open ramp for boarding the smaller Embraer planes. (Watch out for passing planes that might cross your path while you&#8217;re out there <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  it can get pretty noisy and windy..)</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1079.jpg" title="Convention Center"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1079.thumbnail.jpg" width="450" height="337" alt="Convention Center" /></a>
<div class="imagecaption">Outdoor dining area in front of the Convention Center</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/bye-bye-san-diego#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/bye-bye-san-diego/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extraordinary Desserts</title>
		<link>http://ed.agadak.net/2007/06/extraordinary-desserts</link>
		<comments>http://ed.agadak.net/2007/06/extraordinary-desserts#comments</comments>
		<pubDate>Wed, 13 Jun 2007 04:18:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[San Diego]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/extraordinary-desserts</guid>
		<description><![CDATA[Making up for the lack of desserts at the banquet.. a trip with a high school friend at UCSD to a super fancy dessert place! After a few loops around the complex highway network of San Diego.. we pull up to 5th avenue to look for cakes, pies, cookies, or maybe just a cupcake at [...]]]></description>
			<content:encoded><![CDATA[<p>Making up for the lack of desserts at the banquet.. a trip with a high school friend at UCSD to a super fancy dessert place! After a few loops around the complex highway network of San Diego.. we pull up to 5th avenue to look for cakes, pies, cookies, or maybe just a cupcake at Extraordinary Desserts.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1074.jpg" title="Chocolate Cake"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1074.thumbnail.jpg" width="450" height="472" alt="Chocolate Cake" /></a>
<div class="imagecaption">Mmmm chocolateee (but I didn&#8217;t eat it! just some of the top <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/extraordinary-desserts#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/extraordinary-desserts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Banquet at the San Diego Zoo</title>
		<link>http://ed.agadak.net/2007/06/banquet-at-the-san-diego-zoo</link>
		<comments>http://ed.agadak.net/2007/06/banquet-at-the-san-diego-zoo#comments</comments>
		<pubDate>Tue, 12 Jun 2007 06:24:24 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[San Diego]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/banquet-at-the-san-diego-zoo</guid>
		<description><![CDATA[It turns out that there was a trip to the San Diego Zoo after the first day of ISCA. I was slightly confused during the last couple presentations today when people kept asking when and where the buses were picking people up. Apparently the bigger conferences have fancy trips like these for a night of [...]]]></description>
			<content:encoded><![CDATA[<p>It turns out that there was a trip to the San Diego Zoo after the first day of ISCA. I was slightly confused during the last couple presentations today when people kept asking when and where the buses were picking people up. Apparently the bigger conferences have fancy trips like these for a night of adventure and mingling.</p>
<p>After the shuttles brought us to the zoo, we switched over to the guided tour buses that would bring us to the dining area. And just as we pulled out of the boarding area.. a peacock!</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1028.jpg" title="Peacock Usher"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1028.thumbnail.jpg" width="450" height="297" alt="Peacock Usher" /></a>
<div class="imagecaption">Peacock sending us off on our merry way through the San Diego Zoo</div>
</div>
</div>
<p>The rest of the tour had quite a few animals showing up with an 80% attendance rate &#8211; perhaps the missing group were tired from the day and went to sleep already. (Hrmm.. sitting around and getting fed while people watch you could be a tough job..) So of the ones that did show up, there were all sorts of birds and boars to meerkats and antelope-like creatures. A note about the meerkats.. they have one of them standing guard to alert the rest, so you probably won&#8217;t see many of them &#8211; let alone the one that stands motionless blending into the area.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1054.jpg" title="Meerkat.. maybe"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1054.thumbnail.jpg" width="450" height="337" alt="Meerkat.. maybe" /></a>
<div class="imagecaption">There&#8217;s nothing here! ?</div>
</div>
</div>
<p>At the end of the journey, there were drinks and a ton of food (desserts too, but those disappeared quickly) for all the computer architecture people to sit down and chat. It was an interesting experience for me because I just joined while a lot of people have been around for many many years. I got to meet some people and hear what they&#8217;ve been doing in this field, so I could get up to speed and see where things are going. But I won&#8217;t go into all those details here &#8211; instead, I&#8217;ll fill the rest of this post with animal pictures. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1038.jpg" title="Polar Bear Plunge"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1038.thumbnail.jpg" width="450" height="337" alt="Polar Bear Plunge" /></a>
<div class="imagecaption">Is the polar bear thirsty or looking for a swim?</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1061.jpg" title="Elephant Snacking"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1061.thumbnail.jpg" width="450" height="601" alt="Elephant Snacking" /></a>
<div class="imagecaption">The elephants were having dinner&#8230; right next to where we were having dinner</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1063.jpg" title="Squinting Koala"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1063.thumbnail.jpg" width="450" height="337" alt="Squinting Koala" /></a>
<div class="imagecaption">A fuzzy little koala (squinting causes the camera to blur ?!)</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1071.jpg" title="Flamingo Pond"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1071.thumbnail.jpg" width="450" height="337" alt="Flamingo Pond" /></a>
<div class="imagecaption">A bunch of pink flamingos partying late at night</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/banquet-at-the-san-diego-zoo#respond">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/banquet-at-the-san-diego-zoo/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>End of HOPL III</title>
		<link>http://ed.agadak.net/2007/06/end-of-hopl-iii</link>
		<comments>http://ed.agadak.net/2007/06/end-of-hopl-iii#comments</comments>
		<pubDate>Sun, 10 Jun 2007 21:40:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[UIUC]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/end-of-hopl-iii</guid>
		<description><![CDATA[The History of Programming Languages conference is pretty neat because programming languages designers describe how they developed the language and reflect on how it has progressed. There have only been three of these conferences with the first being in 1978, so it was nice that I was able to attend and listen to all these [...]]]></description>
			<content:encoded><![CDATA[<p>The History of Programming Languages conference is pretty neat because programming languages designers describe how they developed the language and reflect on how it has progressed. There have only been three of these conferences with the first being in 1978, so it was nice that I was able to attend and listen to all these important people.</p>
<p>Just last semester at UIUC, I was attending a dynamic language virtual machine seminar where we went through quite a few Self papers &#8211; all of them had David Ungar in the author list. And it turns out <i>the</i> Ungar was around to give a presentation and ask some questions at the panel at the end of the conference.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1016.jpg" title="Panel Discussion at HOPL III"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1016.thumbnail.jpg" width="450" height="332" alt="Panel Discussion at HOPL III" /></a>
<div class="imagecaption">David Ungar asking questions for Larry Wall (far right, Perl guy) and Olin Shivers (middle, Scheme) about their goals for making programming languages</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/end-of-hopl-iii#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/end-of-hopl-iii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Look From the Room</title>
		<link>http://ed.agadak.net/2007/06/a-look-from-the-room</link>
		<comments>http://ed.agadak.net/2007/06/a-look-from-the-room#comments</comments>
		<pubDate>Sun, 10 Jun 2007 17:07:09 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[San Diego]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/a-look-from-the-room</guid>
		<description><![CDATA[I&#8217;ve been wondering what San Diego looks like &#8211; near the Town and Country where I&#8217;m staying for the week. As the taxi drove me on I-8 towards the hotel last night, all I saw were signs for hotels and even more hotels, but I suppose that&#8217;s why the street is called Hotel Circle.
So from [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been wondering what San Diego looks like &#8211; near the Town and Country where I&#8217;m staying for the week. As the taxi drove me on I-8 towards the hotel last night, all I saw were signs for hotels and even more hotels, but I suppose that&#8217;s why the street is called Hotel Circle.</p>
<p>So from the room&#8217;s balcony looking towards the front of the convention center, there&#8217;s a bunch of palm trees, a flag, some hotels, and the highway. And looking from the front door, there&#8217;s an exciting view of more palms and a shopping mall carved out of the hills. I guess that explains why the trolley stop was called the Fashion Valley stop.</p>
<p>Some reason there seems to be a constant haze when looking further than half a mile.. and San Diego has been much cooler than I expected &#8211; at least compared to the Bay Area.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1022.jpg" title="Resort Front"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1022.thumbnail.jpg" width="450" height="337" alt="Resort Front" /></a>
<div class="imagecaption">Palm trees line the way to I-8</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1017.jpg" title="Resort Back"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1017.thumbnail.jpg" width="450" height="301" alt="Resort Back" /></a>
<div class="imagecaption">Even more palm trees at the back</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/a-look-from-the-room#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/a-look-from-the-room/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In San Diego for FCRC</title>
		<link>http://ed.agadak.net/2007/06/in-san-diego-for-fcrc</link>
		<comments>http://ed.agadak.net/2007/06/in-san-diego-for-fcrc#comments</comments>
		<pubDate>Sun, 10 Jun 2007 06:53:36 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[San Diego]]></category>
		<category><![CDATA[Summer of Code]]></category>
		<category><![CDATA[UIUC]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/in-san-diego-for-fcrc</guid>
		<description><![CDATA[I&#8217;m taking a quick &#8220;vacation&#8221; from Summer of Code and traveled down to San Diego for my first time.   Actually, officially I&#8217;m here with my UIUC research group for the Federated Computer Research Conference (FCRC) to attend the International Symposium on Computer Architecture (ISCA) &#8211; also my first time at one of these [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m taking a quick &#8220;vacation&#8221; from Summer of Code and traveled down to San Diego for my first time. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Actually, officially I&#8217;m here with my UIUC research group for the Federated Computer Research Conference (FCRC) to attend the International Symposium on Computer Architecture (ISCA) &#8211; also my first time at one of these types of conferences (but there&#8217;ll be plenty more as I continue the Ph.D. program). FCRC is a combination of a bunch of other conferences, so there&#8217;ll be sessions about programming languages, theory, and more &#8211; it&#8217;ll be interesting to hear about the exciting new research in those fields as well.</p>
<p>The flight from San Jose was just over an hour, and we landed in the Commuter Terminal (so if you ever have a short flight out of SAN, make sure to go to CT and not Terminal 1 or 2). I met up with another of my advisor&#8217;s Ph.D. students, and we taxied to the hotel/convention center and took the trolley to Old Town to find some dinner.. mexican food! I&#8217;m sure there&#8217;ll be plenty more in the days to come before I leave Wednesday night.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1010.jpg" title="Flying into FCRC 2007"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1010.thumbnail.jpg" width="450" height="337" alt="Flying into FCRC 2007" /></a>
<div class="imagecaption">About to land at SAN &#8211; flying past the baseball stadium</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/in-san-diego-for-fcrc#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/in-san-diego-for-fcrc/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whew.. submitted to MICRO</title>
		<link>http://ed.agadak.net/2007/06/whew-submitted-to-micro</link>
		<comments>http://ed.agadak.net/2007/06/whew-submitted-to-micro#comments</comments>
		<pubDate>Sat, 09 Jun 2007 00:55:42 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[UIUC]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/whew-submitted-to-micro</guid>
		<description><![CDATA[The last several days were.. filled with activity &#8211; gathering data and preparing a paper submission to MICRO-40. It&#8217;s my first time to submit a paper, and it&#8217;s mostly the research I did during the Masters portion of the degree, so it&#8217;ll be interesting to see how things work out.
Yay for screen multiplexing! Perhaps it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>The last several days were.. filled with activity &#8211; gathering data and preparing a paper submission to MICRO-40. It&#8217;s my first time to submit a paper, and it&#8217;s mostly the research I did during the Masters portion of the degree, so it&#8217;ll be interesting to see how things work out.</p>
<p>Yay for screen multiplexing! Perhaps it&#8217;s more useful for my 12&#8243; iBook G4, but <tt>ssh</tt> + <tt>screen</tt> to keep console sessions running from a single terminal is very useful when moving around remotely. Add in <tt>vim</tt>&#8217;s own document splitting.. I&#8217;ve got 10+ virtual windows with many more subwindows to edit scripts like crazy. All this is going on with X windows opening and closing as tests start and finish&#8230;</p>
<p>After 100s of emails and last minute changes.. time for a nap.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/nospace.png" title="X windows galore"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/nospace.thumbnail.png" width="450" height="337" alt="X windows galore" /></a>
<div class="imagecaption">Running a ton of tests remotely &#8211; X windows everywhere!</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/whew-submitted-to-micro#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/whew-submitted-to-micro/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status Update (2007/05/27 &#8211; 2007/06/02)</title>
		<link>http://ed.agadak.net/2007/06/status-update-20070603-20070609</link>
		<comments>http://ed.agadak.net/2007/06/status-update-20070603-20070609#comments</comments>
		<pubDate>Mon, 04 Jun 2007 07:00:31 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/status-update-20070603-20070609</guid>
		<description><![CDATA[Status Update:
[Code] Got automatic hash checking working in the channel so it gives an error status on Link Fingerprint failure, so loading bad hash pages results in an error page, and some images (gif, bmp) show up as a broken image.. others like jpg progressively load and show whatever they have on failure (i.e., the [...]]]></description>
			<content:encoded><![CDATA[<p>Status Update:</p>
<p>[Code] Got automatic hash checking working in the channel so it gives an error status on Link Fingerprint failure, so loading bad hash pages results in an error page, and some images (gif, bmp) show up as a broken image.. others like jpg progressively load and show whatever they have on failure (i.e., the whole thing).</p>
<p>[RFCs] Looking into other #fragment-id uses (XML XPointers and PDF) and references from Wilde and Baschnagel&#8217;s text/plain paper in HT 2005 (Sixteenth ACM Conference on Hypertext and Hypermedia).</p>
<p>Last week (2007/05/27 &#8211; 2007/06/02):</p>
<p>- Implement hash comparisons and pass on an error code from OnStopRequest to listeners downstream<br />
- Add a new network error pages for Link Fingerprint failures on page view (need a better string..)<br />
- Discuss implementation details on m.d.t.network clarifying my current implementation just provides a new error code after the transfer finishes<br />
- Attend Google Dev Day (Thursday)<br />
- Invite Erik Wilde to discuss RFC stuff and Link Fingerprint issues<br />
- Begin handling of Link Fingerprint failures in the consumers like download manager (vs webbrowserpersist/exthandler)</p>
<p>This week (2007/06/03 &#8211; 2007/06/09):</p>
<p>- Remove/delete failed downloads cleanly from the download manager<br />
- Refactor added code in HttpChannel so adding Link Fingerprints to other channels is clean/simple<br />
- Look into the image library to handle Link Fingerprint transfer failures<br />
- Figure out what interfaces to provide (for extensions) e.g., exist?/get fingerprint from URI, check fingerprint against file/stream<br />
- Note: Next week I&#8217;ll be out &#8211; attending FCRC 2007 in San Diego 9th to 13th</p>
<small><a href="http://ed.agadak.net/2007/06/status-update-20070603-20070609#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/status-update-20070603-20070609/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Developer Day 2007</title>
		<link>http://ed.agadak.net/2007/06/google-developer-day-2007</link>
		<comments>http://ed.agadak.net/2007/06/google-developer-day-2007#comments</comments>
		<pubDate>Fri, 01 Jun 2007 07:00:48 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/06/google-developer-day-2007</guid>
		<description><![CDATA[Today was quite exciting with Google&#8217;s event in San Jose. I got to learn about the new Google APIs and developer tools that&#8217;ll be pushing forward web applications as well as to meet all sorts of people and see what they&#8217;re working on. I attended most of the main sessions except to participate in the [...]]]></description>
			<content:encoded><![CDATA[<p>Today was quite exciting with Google&#8217;s event in San Jose. I got to learn about the new Google APIs and developer tools that&#8217;ll be pushing forward web applications as well as to meet all sorts of people and see what they&#8217;re working on. I attended most of the main sessions except to participate in the Fireside Chat for Google Gears, but the nice thing is that many of the sessions were recorded and are <a href="http://code.google.com/events/developerday/mv-sessions.html">now available on youtube</a> [code.google.com].</p>
<p>Overall, the event was very Google. Colorful decorations with beanbag seats and exercise balls. Free drinks. Free food. Free swag. And plenty of Google products. (<a href="http://picasaweb.google.com/developerday/GoogleDeveloperDayMountainViewCA">Tons of Dev Day photos</a> [picasaweb.google.com].)</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1008.jpg" title="Dev Day Shirts"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1008.thumbnail.jpg" width="450" height="331" alt="Dev Day Shirts" /></a>
<div class="imagecaption">Free Developer Day T-shirts + badge</div>
</div>
</div>
<p>I found the performance improvements provided by Google Gears especially interesting because one doesn't have to even be offline to see some benefits (of removing network latency). At the fireside chat, I asked a question about Javascript performance (relating to my research area) because Gears will facilitate building more complex web apps that do a lot more (distributed) processing on the client. The responses were valid in that bottlenecks do come from updating the DOM and disk I/O, but maybe I was just hoping to hear what Google has planned in pushing Javascript from interpreted to JIT and then adaptive optimizations.</p>
<p>And after the conference part ended, there was a big party at the Googleplex with even more free food and beverages. The center of the campus had food stands with hamburgers, corn dogs, shaved ice, cotton candy, churros, nachos, and a bunch more. The dining area of the main cafeteria changed into a party area with a DJ, pool tables, arcade games, and flashing lights with the projector showing photos of Dev Day around the world.</p>
<p>When it started getting dark, they brought out some neat cups to add to the party atmosphere - glowsticks in a cup form. Basically, cups that glow, so you end up drinking glowing green goo in the dark.. kinda. Just make sure when you hit the cup against a hard surface to break the glow capsules, don't hit so hard that you crack the cup causing the liquids to spill out.</p>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1006.jpg" title="Red Cup"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1006.thumbnail.jpg" width="450" height="337" alt="Red Cup" /></a>
<div class="imagecaption">"Cracked" glow-cup (only the middle red one is glowing)</div>
</div>
</div>
<div style="text-align: center;">
<div class="imageframe imgaligncenter" style="width:450px;"><a href="http://ed.agadak.net/wp-content/uploads/2007/06/library-1007.jpg" title="Glow Cups"><img src="http://ed.agadak.net/wp-content/uploads/2007/06/library-1007.thumbnail.jpg" width="450" height="337" alt="Glow Cups" /></a>
<div class="imagecaption">Flash shows the cups' true color</div>
</div>
</div>
<small><a href="http://ed.agadak.net/2007/06/google-developer-day-2007#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/06/google-developer-day-2007/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First SoC Payment</title>
		<link>http://ed.agadak.net/2007/05/first-soc-paycheck</link>
		<comments>http://ed.agadak.net/2007/05/first-soc-paycheck#comments</comments>
		<pubDate>Tue, 29 May 2007 07:00:17 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/05/first-soc-paycheck</guid>
		<description><![CDATA[Woohoo! $500. Picked it up at local Safeway Customer Service counter without any problems. I filled out a Western Union &#8220;receive&#8221; form with the various information provided by Google, and the next day I handed it in and showed my driver license, and I got $500 cash back. Hopefully next time they&#8217;ll just give me [...]]]></description>
			<content:encoded><![CDATA[<p>Woohoo! $500. Picked it up at local Safeway Customer Service counter without any problems. I filled out a Western Union &#8220;receive&#8221; form with the various information provided by Google, and the next day I handed it in and showed my driver license, and I got $500 cash back. Hopefully next time they&#8217;ll just give me a check instead.</p>
<p>Hrmm.. what to do with this money in the Bay Area? Buy more food for the interns? <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/2007/05/first-soc-paycheck#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/05/first-soc-paycheck/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status Update (2007/05/13 &#8211; 2007/05/26)</title>
		<link>http://ed.agadak.net/2007/05/status-update-20070513-20070526</link>
		<comments>http://ed.agadak.net/2007/05/status-update-20070513-20070526#comments</comments>
		<pubDate>Mon, 28 May 2007 07:00:00 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Summer of Code]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/2007/05/status-update-20070513-20070526</guid>
		<description><![CDATA[Status Update:
[Code] Last couple weeks I started playing with Mozilla C XPCOM and did a quick
implementation of Link Fingerprints for the Download Manager, which will help
me implement Link Fingerprints at the network level (i.e., Channels). I&#8217;ll
finish up the initial Channel implementation by conditionally deciding to do
Link Fingerprints and compare hashes to conditionally fail the transfer.
[RFCs] [...]]]></description>
			<content:encoded><![CDATA[<p>Status Update:</p>
<p>[Code] Last couple weeks I started playing with Mozilla C XPCOM and did a quick<br />
implementation of Link Fingerprints for the Download Manager, which will help<br />
me implement Link Fingerprints at the network level (i.e., Channels). I&#8217;ll<br />
finish up the initial Channel implementation by conditionally deciding to do<br />
Link Fingerprints and compare hashes to conditionally fail the transfer.</p>
<p>[RFCs] Looked into existing RFCs and internet drafts to see possibles scopes<br />
for our RFCs (a general extension to #fragment-ids (e.g., #!type!data) and Link<br />
Fingerprints). URI general syntax says the semantics of #fragment-ids are per<br />
MIME-type (e.g., application/gzip or text/plain (which has an internet draft<br />
requesting new #fragment-id functionality)), so right now, things seem tricky<br />
to request an all-encompassing RFC.</p>
<p>Last 2 weeks (2007/05/13 &#8211; 2007/05/26):</p>
<p>- Graduate 5-yr MS/BS in CS from UIUC and fly home to California bay area<br />
- Settle in at Mozilla Mountain View, discuss implementation with Dan Veditz<br />
- Investigate RFCs and discuss on m.d.a.firefox<br />
- Research Mozilla C codebase to learn XPCOM, pointers, interfaces, fun<br />
- Practice what I learned by partially implementing Link Fingerprints in<br />
Download Manager<br />
- Begin implementing Link Fingerprints (as a stream converter) in the network<br />
to handle all requests and not just downloads (currently it prints the md5 hash<br />
of all HTTP requests)</p>
<p>This week (2007/05/27 &#8211; 2007/06/02):</p>
<p>- Start (officially) Summer of Code (2005/05/28)<br />
- Communicate with DownThemAll developer (Nils Maier) to see what we can share<br />
- Add checks to nsHttpChannel to only do Link Fingerprint stuff if the URI<br />
contains a Link Fingerprint-like reference and if it&#8217;s not a partial Range<br />
request<br />
- Actually compare hashes and not just print out the computed hash <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
- Find Erik Wilde (#fragment-id for text/plain author) to ask about RFC stuff</p>
<small><a href="http://ed.agadak.net/2007/05/status-update-20070513-20070526#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2007/05/status-update-20070513-20070526/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
