<?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>Wed, 17 Apr 2013 15:13:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>No self for new fancy =&gt; arrow functions!</title>
		<link>http://ed.agadak.net/2013/03/no-self-for-new-fancy-arrow-functions</link>
		<comments>http://ed.agadak.net/2013/03/no-self-for-new-fancy-arrow-functions#comments</comments>
		<pubDate>Thu, 28 Mar 2013 13:57:53 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=1068</guid>
		<description><![CDATA[Thanks Paul for letting people know how to define JavaScript functions, the ES6 way (in Firefox 22). I&#8217;m now busy converting my anonymous functions, e.g., function(x) x*x, to the new syntax: x => x*x. But one thing caught my eye in the spec he linked, harmony:arrow_function_syntax: // ''=>'' has only lexical ''this'', no dynamic ''this'' [...]]]></description>
				<content:encoded><![CDATA[<p>Thanks Paul for letting people know how to <a href="http://paulrouget.com/e/es6functions/">define JavaScript functions, the ES6 way</a> (in Firefox 22). I&#8217;m now busy converting my anonymous functions, e.g., <tt>function(x) x*x</tt>, to the new syntax: <tt>x => x*x</tt>.</p>
<p>But one thing caught my eye in the spec he linked, <a href="http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax">harmony:arrow_function_syntax</a>:</p>
<p><tt>// ''=>'' has only lexical ''this'', no dynamic ''this''</tt></p>
<p>This means you no longer need to <tt>bind</tt> or do the <tt>self = this</tt> dance. Both patterns are common for setting up callbacks in JavaScript.</p>
<p>So if your code in a method of an object used to look like either of..</p>
<p><code>addEventListener(.., function(event) {<br />
&nbsp; .. this.value ..;<br />
}.bind(this));</code></p>
<p>or</p>
<p><code>let self = this;<br />
addEventListener(.., function(event) {<br />
&nbsp; .. self.value ..;<br />
});</code></p>
<p>Your code can now look like this!</p>
<p><code>addEventListener(.., event => {<br />
&nbsp; .. this.value ..;<br />
});</code></p>
<p>Exciting stuff! <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/2013/03/no-self-for-new-fancy-arrow-functions#respond">5 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2013/03/no-self-for-new-fancy-arrow-functions/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>User Privacy Contracts and the Open Web</title>
		<link>http://ed.agadak.net/2012/10/user-privacy-contracts-and-the-open-web</link>
		<comments>http://ed.agadak.net/2012/10/user-privacy-contracts-and-the-open-web#comments</comments>
		<pubDate>Tue, 30 Oct 2012 16:36:17 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[User Data]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=1046</guid>
		<description><![CDATA[I&#8217;ve been blogging on the Labs blog about locally analyzing Firefox data [blog.mozilla.org] and helping users share that data while keeping users in control of their privacy. One area of ideas has involved users setting terms on how the shared data can be used, such as requiring temporary use of the data and increased transparency [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been blogging on the Labs blog about <a href="https://blog.mozilla.org/labs/2012/10/about-profile-analyzing-data-in-firefox/">locally analyzing Firefox data</a> [blog.mozilla.org] and helping users <a href="https://blog.mozilla.org/labs/2012/10/improving-firefox-with-locally-analyzed-data/">share that data</a> while keeping users in <a href="https://blog.mozilla.org/labs/2012/10/about-trackers-protecting-shared-firefox-data/">control of their privacy</a>. One area of ideas has involved users setting <a href="https://blog.mozilla.org/labs/2012/10/ideas-on-terms-for-shared-firefox-data/">terms on how the shared data can be used</a>, such as requiring temporary use of the data and increased transparency to let the user know what parts of the data was used.</p>
<div id="attachment_1047" class="wp-caption aligncenter" style="width: 328px"><img src="http://ed.agadak.net/wp-content/uploads/2012/10/agree-to-terms.png" alt="" title="Agreeing to terms" width="318" height="105" class="size-full wp-image-1047" /><p class="wp-caption-text">Common web pattern of users agreeing to terms</p></div>
<p>So far what I&#8217;ve described seems compatible with the Open Web because Firefox can expose access to the user&#8217;s data through a web API such as geolocation where the user confirms or denies the request. One main difference is that the site agrees to the user&#8217;s data privacy contract &#8212; perhaps through an electronic signature. But even then, this difference isn&#8217;t too foreign because this digital agreement pattern seems common on the web &#8212; except most of the time, it&#8217;s the user agreeing to the site&#8217;s terms.</p>
<p>One followup idea, <a href="https://blog.mozilla.org/labs/2012/10/ideas-on-terms-for-shared-firefox-data/#creating_contracts">regarding who is creating contracts</a>, suggested a non-profit who cares about the Open Web and users&#8217; privacy could be well suited to negotiate with web sites. Instead of having each user provide a user data privacy contract to each web site, Firefox could refer to a list of allowed domains that have already agreed to the non-profits requirements on how user data from the browser can be used. Of course Firefox would still give users control of what data is analyzed and to what detail is the data shared.</p>
<p>With these site-by-site contracts of agreeing to treat users&#8217; data at a privacy level acceptable/required by the non-profit, it seems like a potential slow-but-steady way to improve the web for all parties: the site gets high quality user data, the user gets better personalized content, and Firefox protects privacy for users.</p>
<p>The tricky part here is that there would be a split between which web site have access to the web API: those who are contractually bound to treat users&#8217; data correctly and those who are not. If Firefox only allowed access to web sites that have signed the contract, would this still be part of the Open Web? Is it necessary to have this as part of the Open Web? How about if general web access could be enabled through a user preference while also requiring user confirmation on a per-site basis from a scary looking dialog?</p>
<p>I&#8217;m sure there are plenty of other questions in this area of protecting users&#8217; data while improving the Open Web experience. So please comment and provide your thoughts or questions!</p>
<small><a href="http://ed.agadak.net/2012/10/user-privacy-contracts-and-the-open-web#respond">3 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/10/user-privacy-contracts-and-the-open-web/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Controlling what Firefox reveals to social networks</title>
		<link>http://ed.agadak.net/2012/10/controlling-what-firefox-reveals-to-social-networks</link>
		<comments>http://ed.agadak.net/2012/10/controlling-what-firefox-reveals-to-social-networks#comments</comments>
		<pubDate>Mon, 22 Oct 2012 18:56:43 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[User Data]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=1008</guid>
		<description><![CDATA[I recently released about:trackers [addons.mozilla.org] as a proof-of-concept to explore ideas of how Mozilla can protect users&#8217; data with terms and policies [blog.mozilla.org] even after the data is shared to web sites. The term it simulates is if a site (that had access to your Firefox data) would have been able to follow you across [...]]]></description>
				<content:encoded><![CDATA[<p>I recently released <a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-aboutTrackers/?src=external-ed1">about:trackers</a> [addons.mozilla.org] as a proof-of-concept to explore ideas of how <a href="https://blog.mozilla.org/labs/2012/10/about-trackers-protecting-shared-firefox-data/">Mozilla can protect users&#8217; data with terms and policies</a> [blog.mozilla.org] even after the data is shared to web sites. The term it simulates is if a site (that had access to your Firefox data) would have been able to follow you across too many sites, Firefox would stop sending cookies with those requests to reduce the risk of your user data get mixed with those sites.</p>
<p>I&#8217;ve been using about:trackers for a few weeks, and I&#8217;ve noticed some interesting side-effects of the add-on with social networks. But first to provide some more context, I&#8217;ll give some of my very informal observations on one aspect of how people use social networks.</p>
<p>People often log out of social networking sites when they aren&#8217;t actively using them. I&#8217;m not sure if they want to stop seeing their face on other websites (e.g., in comment boxes), or they don&#8217;t want the social network to be able to follow them to all the articles they read that have sharing widgets, or they just don&#8217;t want someone else from being able to post as them when they&#8217;re not around. Facebook even seems to leverage this fact that people often end up on the logged out screen and now shows content to users on that page.</p>
<div id="attachment_1031" class="wp-caption aligncenter" style="width: 382px"><a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-aboutTrackers/?src=external-ed2"><img src="http://ed.agadak.net/wp-content/uploads/2012/10/logged-out-in.png" alt="" title="Appearing logged out when logged in" width="372" height="192" class="size-full wp-image-1031" /></a><p class="wp-caption-text">Appearing logged out of Facebook when actually logged in</p></div>
<p>The interesting side-effect of the default policy in about:trackers is that I now appear logged out to Facebook even though I&#8217;m still logged in to Facebook. Now I can browse the web without actively logging out of Facebook when I&#8217;m done. This save me time from logging back when I want to use Facebook and logging out at the end while getting the best of both.</p>
<p>I can still see Facebook content on other sites such as the number of likes a page has and the Facebook comments because the embedded content is still getting requested &#8212; just without my personalization cookie sent to the servers. I do admit that I don&#8217;t actively click on like buttons or post comments, and some quick tests seem to indicate that functionality is not working.</p>
<p>Now that <a href="https://blog.mozilla.org/futurereleases/2012/10/22/help-us-test-the-social-api-with-facebook-messenger-for-firefox/">Social API is available for testing with Facebook</a> [blog.mozilla.org], users have more reason to stay logged in all the time because they get easy access to friend updates and are a single click away to chat from whatever tab they are viewing in Firefox via the Social sidebar. But for some those who would have wanted to appear logged out otherwise, this unintended feature of <a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-aboutTrackers/?src=external-ed3">about:trackers</a> could help give more control back to users.</p>
<p><b>Edit</b>: Tom just posted on the Privacy blog about this topic of <a href="https://blog.mozilla.org/privacy/2012/10/22/being-social-with-privacy-in-mind/">being social with privacy in mind</a> [blog.mozilla.org], and he goes into more detail about what happens now on the web with social networks. He also points out how the Social API can lead to better privacy because users are in control of when they inform Facebook of a URL by clicking the Like button in the location bar. Looks like both of us are helping users get more control of their data and privacy, and these two posts show that there are multiple options to get there.</p>
<small><a href="http://ed.agadak.net/2012/10/controlling-what-firefox-reveals-to-social-networks#respond">11 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/10/controlling-what-firefox-reveals-to-social-networks/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Stickers for your online presense?</title>
		<link>http://ed.agadak.net/2012/10/stickers-for-your-online-presense</link>
		<comments>http://ed.agadak.net/2012/10/stickers-for-your-online-presense#comments</comments>
		<pubDate>Fri, 12 Oct 2012 17:17:22 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=981</guid>
		<description><![CDATA[After suggesting an idea of how Firefox could help users share their interests online [blog.mozilla.org], I&#8217;ve been wondering if it&#8217;s similar to something people already do outside of a browser. I gave it some quick thoughts, and stickers seem like they might be a suitable comparison in that they&#8217;re something people can easily acquire and [...]]]></description>
				<content:encoded><![CDATA[<p>After suggesting an idea of how Firefox could <a href="https://blog.mozilla.org/labs/2012/10/improving-firefox-with-locally-analyzed-data/">help users share their interests online</a> [blog.mozilla.org], I&#8217;ve been wondering if it&#8217;s similar to something people already do outside of a browser. I gave it some quick thoughts, and stickers seem like they might be a suitable comparison in that they&#8217;re something people can easily acquire and customize and then present to others without giving them away.</p>
<div id="attachment_984" class="wp-caption aligncenter" style="width: 310px"><a href="http://ed.agadak.net/wp-content/uploads/2012/10/stickers.jpg"><img src="http://ed.agadak.net/wp-content/uploads/2012/10/stickers-300x300.jpg" alt="" title="Stickers on a laptop" width="300" height="300" class="size-medium wp-image-984" /></a><p class="wp-caption-text">Showing things you like on something you own</p></div>
<p>People seem to have all sorts of stickers placed on things they carry around, e.g., laptops, binders, or notepads; or a mode of transportation, e.g., cars, skateboards, or bikes. Even though showing something could be thought as a statement, I would guess that people aren&#8217;t necessarily always looking to have a conversation by displaying their sticker. They&#8217;re just happy to show off something they support or care about.</p>
<p>This note about having a presence without actively socializing seems to overlap in some way to the &#8220;Visitors&#8221; group from a <a href="https://blog.mozilla.org/ux/2012/10/identity-and-the-internet-a-study/">study on Identity and the Internet</a> [blog.mozilla.org]. Not everyone wants to be social on the internet and actively produce content, so using these stickers to show off one&#8217;s interests seems like a comfortable step from being completely without an online identity.</p>
<p>Do you use stickers? If so, what are you showing, where are you placing them, and why do you use them? I&#8217;m curious! <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/2012/10/stickers-for-your-online-presense#respond">3 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/10/stickers-for-your-online-presense/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>about:profile &#8211; interest categories vs demographics</title>
		<link>http://ed.agadak.net/2012/10/about-profile-interest-categories-vs-demographics</link>
		<comments>http://ed.agadak.net/2012/10/about-profile-interest-categories-vs-demographics#comments</comments>
		<pubDate>Fri, 05 Oct 2012 17:56:53 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=961</guid>
		<description><![CDATA[Over the last few weeks, I&#8217;ve been checking out my about:profile page [addons.mozilla.org], and I&#8217;ve been pretty surprised at how accurate it can get even though it&#8217;s a simple proof of concept to initiate discussions on how Mozilla should be analyzing data in the Firefox [blog.mozilla.org]. It shares some ideas with what Margaret implemented for [...]]]></description>
				<content:encoded><![CDATA[<p>Over the last few weeks, I&#8217;ve been checking out my <a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-aboutProfile/?src=external-ed-1">about:profile page</a> [addons.mozilla.org], and I&#8217;ve been pretty surprised at how accurate it can get even though it&#8217;s a simple proof of concept to initiate discussions on how Mozilla should be <a href="https://blog.mozilla.org/labs/2012/10/about-profile-analyzing-data-in-firefox/">analyzing data in the Firefox</a> [blog.mozilla.org].</p>
<div id="attachment_963" class="wp-caption aligncenter" style="width: 310px"><a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-aboutProfile/?src=external-ed-2"><img src="http://ed.agadak.net/wp-content/uploads/2012/10/about-profile-cropped-300x235.png" alt="" title="Category interests in about:profile" width="300" height="235" class="size-medium wp-image-963" /></a><p class="wp-caption-text">Overall categorization and detailed/recent interests</p></div>
<p>It shares some ideas with what Margaret implemented for <a href="https://wiki.mozilla.org/Firefox/Projects/about:me">about:me</a> [wiki.mozilla.org] such as processing the local data within Firefox and not sending data out of Firefox, except in about:profile, we&#8217;re trying to generate higher-level concepts such as an interest category as opposed to statistics of your browser behavior. We happened to go with some readily available domain data of ODP categories and Alexa siteinfo, and we selected some hundreds of top sites to package into the add-on. So while the reference data is not an exhaustive list, it seems to work for quite a few people I&#8217;ve shown the add-on to.</p>
<p>Our somewhat arbitrary choices of category interests and site demographics got me thinking about what we could do with this data in Firefox, and I seem to keep coming back to this distinction of category data actually shows what I&#8217;m interested in whereas demographics appears to create a label/characteristic that opens things up to preconceived judgements. I suppose in other words, the former is based on something I did vs the latter is something I am. (Although technically, the about:profile experiment is trying to guess at who you are based on what you did.)</p>
<p>I&#8217;m sure others will be able to better describe the differences between the two, but I wonder if because there appears to be a fundamental difference, we should go about presenting the data differently to the user. For example, perhaps users will be happy to explicitly give Firefox one&#8217;s demographic data whereas trying to have the user create a list of interested categories might be overwhelming.</p>
<p>I&#8217;m excited that we&#8217;ve released the add-on to <a href="https://blog.mozilla.org/labs/2012/10/about-profile-analyzing-data-in-firefox/">get a conversation started</a> because there&#8217;s so many different ways to analyze the data in Firefox, and each method can lead to interesting discussions such as this one about categories vs demographics.</p>
<small><a href="http://ed.agadak.net/2012/10/about-profile-interest-categories-vs-demographics#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/10/about-profile-interest-categories-vs-demographics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copy Selected urls from the AwesomeBar</title>
		<link>http://ed.agadak.net/2012/05/copy-selected-urls-from-the-awesomebar</link>
		<comments>http://ed.agadak.net/2012/05/copy-selected-urls-from-the-awesomebar#comments</comments>
		<pubDate>Fri, 25 May 2012 19:54:20 +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=954</guid>
		<description><![CDATA[I happened to switch to #fx-team to see madhava asking for an easier way to copy/paste urls from the AwesomeBar into the page. So whipped together something to do just that! Just switch to the location bar by pressing ctrl/cmd-L, start searching, highlight the result you want, and press ctrl/cmd-enter. The url will be in [...]]]></description>
				<content:encoded><![CDATA[<p>I happened to <a href="http://madhava.com/egotism/archive/005061.html">switch to #fx-team to see madhava</a> asking for an easier way to copy/paste urls from the AwesomeBar into the page. So whipped together something to do just that!</p>
<p>Just switch to the location bar by pressing <tt>ctrl/cmd-L</tt>, start searching, highlight the result you want, and press <tt>ctrl/cmd-enter</tt>. The url will be in the clipboard and automatically pasted to wherever you left off in the page.</p>
<p>And of course this works with <a href="http://ed.agadak.net/2012/03/enter-selects-with-inline-autocomplete">Enter Selects</a>, so you don&#8217;t even need to press down to copy the first result. Enter Selects automatically highlights it, so you can type out the page you want, and directly hit <tt>ctrl/cmd-enter</tt> and you&#8217;re done!</p>
<p>Try out <a href="https://addons.mozilla.org/en-US/firefox/addon/copy-selected/"><strong>Copy Selected</strong></a> or check out the <a href="https://github.com/Mardak/copySelected">code on github</a>. (This is neater than I expected! I just used the functionality 3 times in one post. <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/2012/05/copy-selected-urls-from-the-awesomebar#respond">5 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/05/copy-selected-urls-from-the-awesomebar/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Enter Selects with Inline Autocomplete</title>
		<link>http://ed.agadak.net/2012/03/enter-selects-with-inline-autocomplete</link>
		<comments>http://ed.agadak.net/2012/03/enter-selects-with-inline-autocomplete#comments</comments>
		<pubDate>Thu, 29 Mar 2012 16:42:49 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=937</guid>
		<description><![CDATA[Firefox will soon have inline autocomplete [blog.mozilla.com] in the AwesomeBar, so I&#8217;ve updated Enter Selects [addons.mozilla.org] to be compatible with that new functionality. If you&#8217;ve previously used Enter Selects, the behavior will now be the same as it was before &#8212; pressing [Enter] after typing in the AwesomeBar will automatically select the first result from [...]]]></description>
				<content:encoded><![CDATA[<p>Firefox will soon have <a href="http://blog.mozilla.com/addons/2012/03/15/compatibility-for-firefox-12/">inline autocomplete</a> [blog.mozilla.com] in the AwesomeBar, so I&#8217;ve updated <a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/">Enter Selects</a> [addons.mozilla.org] to be compatible with that new functionality.</p>
<p>If you&#8217;ve previously used Enter Selects, the behavior will now be the same as it was before &#8212; pressing [Enter] after typing in the AwesomeBar will automatically select the first result from the list. This is different from the new inline autocomplete behavior of completing a domain or url that begins with the letters you&#8217;ve typed.</p>
<div id="attachment_940" class="wp-caption aligncenter" style="width: 310px"><a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/"><img src="http://ed.agadak.net/wp-content/uploads/2012/03/inline-selects.png" alt="" title="Enter Selects with inline autocomplete" width="300" height="100" class="size-full wp-image-940" /></a><p class="wp-caption-text">Enter automatically selects the highlighted first result.</p></div>
<p>Enter Selects&#8217; behavior is good for you if you tend to type words that match in the title or mid-url or use multiple words where the AwesomeBar&#8217;s adaptive behavior will push these non-prefix domain matches to the top. If you do want inline autocomplete after Enter Selects highlights the first result, just press [Up] to edit or load the inline-completed url.</p>
<p>Just as before, Firefox&#8217;s adaptive learning behavior will push the sites that you frequently visit to the top, so quite quickly, you&#8217;ll be able to type 1 letter and press [Enter] to go to the page you want.</p>
<p>I&#8217;ve also revamped the code from the original Firefox 3 implementation to be restartless by using the <a href="https://builder.addons.mozilla.org/docs/">Add-on SDK</a> [addons.mozilla.org]. Additionally I converted the repository from hg to git <a href="https://github.com/Mardak/enterSelects">for people to fork</a> [github.com].</p>
<p><i>&#8220;what a fine add-on! Saves so much on needless keystrokes!&#8221; &#8220;Thanks a lot, this function is easy but necessary, now I can forget about chrome~&#8221; &#8220;This is the BOMB! This should be a built-in feature in Firefox, as it is with IE9. Keep up the good work!&#8221; -<a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/reviews/332626/">st3ve</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/reviews/332615/">yaapal</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/reviews/303730/">Deep Thought</a></i> [addons.mozilla.org]</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/enter-selects/"><b>Try out restartless Enter Selects in Firefox!</b></a> [addons.mozilla.org]</p>
<small><a href="http://ed.agadak.net/2012/03/enter-selects-with-inline-autocomplete#respond">23 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2012/03/enter-selects-with-inline-autocomplete/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>(Colorful) Search Tabs to search selected/typed text</title>
		<link>http://ed.agadak.net/2011/06/colorful-search-tabs-to-search-selected-typed-text</link>
		<comments>http://ed.agadak.net/2011/06/colorful-search-tabs-to-search-selected-typed-text#comments</comments>
		<pubDate>Sat, 11 Jun 2011 02:05:21 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=925</guid>
		<description><![CDATA[Continuing yesterday&#8217;s initial add-on for a Restartless Dominant Color, I&#8217;ve taken some ideas from the Firefox UX team to associate search engines with a color. Here I&#8217;ve used the dominant color to add search engine tabs to the bottom of the screen. Normally they&#8217;re hidden away, but when you first install the restartless add-on, all [...]]]></description>
				<content:encoded><![CDATA[<p>Continuing yesterday&#8217;s initial add-on for a <a href="http://ed.agadak.net/2011/06/restartless-dominant-color">Restartless Dominant Color</a>, I&#8217;ve taken some <a href="https://wiki.mozilla.org/index.php?title=Firefox/4.0_Mac_Theme_Mockups&#038;oldid=172831#Potential_Styling_for_Various_Search_Types">ideas from the Firefox UX team</a> to associate search engines with a color.</p>
<div id="attachment_926" class="wp-caption aligncenter" style="width: 560px"><a href="https://addons.mozilla.org/en-US/firefox/addon/search-tabs/?src=external-ed1"><img src="http://ed.agadak.net/wp-content/uploads/2011/06/tabs.png" alt="" title="Colorful tabs appear along the whole bottom edge on install" width="550" height="210" class="size-full wp-image-926" /></a><p class="wp-caption-text">Colorful tabs appear along the whole bottom edge on install</p></div>
<p>Here I&#8217;ve used the dominant color to add search engine tabs to the bottom of the screen. Normally they&#8217;re hidden away, but when you first install the restartless add-on, all the tabs appear for a few seconds. You can also see that all installed search engines are available, such as the one for <a href="https://mozillalabs.com/prospector/2011/06/01/exploring-social-search-with-twitter-address-bar-search/">Twitter Address Bar Search</a>.</p>
<div id="attachment_927" class="wp-caption aligncenter" style="width: 385px"><a href="https://addons.mozilla.org/en-US/firefox/addon/search-tabs/?src=external-ed2"><img src="http://ed.agadak.net/wp-content/uploads/2011/06/translate.png" alt="" title="Selecting text shows colored tips" width="375" height="300" class="size-full wp-image-927" /></a><p class="wp-caption-text">Selecting text shows colored tips</p></div>
<p>When you select some text or start typing in a text box (including those in the Firefox interface like the AwesomeBar!), the tabs will peek up from below only to show their transparent color-filled tips. If you do point at one of the tabs, it&#8217;ll become fully opaque and pop up to show the icon. Clicking it will let you search for whatever you have selected or typed.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/search-tabs/?src=external-ed3"><b>Install Search Tabs</b></a> on <a href="http://firefox.com/">Firefox 4</a> without needing a restart. Just reply back in comments if you have any feedback. Or <a href="https://github.com/Mardak/searchTabs">check the code on GitHub</a> and <a href="https://github.com/Mardak/searchTabs/issues">file suggestions or issues</a>!</p>
<small><a href="http://ed.agadak.net/2011/06/colorful-search-tabs-to-search-selected-typed-text#respond">2 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2011/06/colorful-search-tabs-to-search-selected-typed-text/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Restartless Dominant Color</title>
		<link>http://ed.agadak.net/2011/06/restartless-dominant-color</link>
		<comments>http://ed.agadak.net/2011/06/restartless-dominant-color#comments</comments>
		<pubDate>Thu, 09 Jun 2011 20:33:02 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=917</guid>
		<description><![CDATA[I&#8217;ve packaged Margaret&#8217;s getDominantColor code into a restartless add-on and put the source up on GitHub for people to try out and tweak the logic. After installing the add-on, hold shift while pointing at an image to have it report the color and show it behind the image. One slight difference from Margaret&#8217;s code is [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve packaged <a href="http://blog.margaretleibovic.com/post/6356312141">Margaret&#8217;s <tt>getDominantColor</tt> code</a> into a restartless add-on and put the source up on GitHub for people to try out and tweak the logic.</p>
<p>After installing the add-on, hold <tt>shift</tt> while pointing at an image to have it report the color and show it behind the image. One slight difference from Margaret&#8217;s code is that color and transparency values are rounded down to a multiple of 16.</p>
<div id="attachment_918" class="wp-caption aligncenter" style="width: 385px"><a href="https://addons.mozilla.org/en-US/firefox/addon/dominant-color/"><img src="http://ed.agadak.net/wp-content/uploads/2011/06/prospector.png" alt="" title="Pointing at an image in about:addons" width="375" height="460" class="size-full wp-image-918" /></a><p class="wp-caption-text">Pointing at an image in about:addons</p></div>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/dominant-color/">Download the add-on</a> and <a href="https://github.com/Mardak/dominantColor/blob/master/bootstrap.js">check out the code</a>!</p>
<small><a href="http://ed.agadak.net/2011/06/restartless-dominant-color#respond">10 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2011/06/restartless-dominant-color/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Great time to use Firefox 4</title>
		<link>http://ed.agadak.net/2011/02/great-time-to-use-firefox-4</link>
		<comments>http://ed.agadak.net/2011/02/great-time-to-use-firefox-4#comments</comments>
		<pubDate>Tue, 15 Feb 2011 09:22:05 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=877</guid>
		<description><![CDATA[If you&#8217;ve previously tried a Firefox 4 beta and ran into problems on some websites, I&#8217;m glad to report that everything is now working! (At least for the websites I use, and hopefully the sites that you use are working too.) Below is a list of the websites that I&#8217;ve run into problems in the [...]]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;ve previously tried a Firefox 4 beta and ran into problems on some websites, I&#8217;m glad to report that everything is now working! (At least for the websites I use, and hopefully the sites that you use are working too.) Below is a list of the websites that I&#8217;ve run into problems in the past but are working great now. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3><a href="http://www.youtube.com/">YouTube</a>, <a href="http://www.pandora.com/">Pandora</a>, <a href="https://mail.google.com/">Gmail</a></h3>
<ul>
<li>Problem: Video/music/flash keeps crashing when clicking links, e.g., related videos or skipping songs</li>
<li>Plugin: <a href="http://get.adobe.com/flashplayer/">Upgrade to Flash 10.2.152.26</a> (Feb. 8 update)</li>
<li>Context: Firefox on Windows added <a href="https://developer.mozilla.org/devnews/index.php/2010/06/22/firefox-3-6-4-with-crash-protection-now-available/">Crash Protection with 3.6</a>, and OS X users will no longer worry about plugins taking down Firefox in 4. But there was something different in Flash for Mac that was tickling Firefox in just the wrong way at the wrong time that resulted in many more plugin crashes. (Good thing Firefox could keep running and others tabs were unaffected.)</li>
<li>Learn more: <a href="http://www.adobe.com/support/security/bulletins/apsb11-02.html">Adobe security bulletin</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=572134">bug 572134</a></li>
</ul>
<h3><a href="http://www.netflix.com/">Netflix</a></h3>
<ul>
<li>Problem: Trying to watch a movie always shows &#8220;Once installation is complete please restart your browser to watch this movie.&#8221;</li>
<li>Plugin: <a href="http://go.microsoft.com/fwlink/?LinkId=149156">Upgrade to Silverlight 4.0.60129.0</a> (Feb. 14 update)</li>
<li>Context: One major feature in Apple&#8217;s latest operating system is <a href="http://www.apple.com/macosx/technology/#sixtyfourbit">64-bit Snow Leopard</a>, and Firefox 4 combines that with its speed improvements to go <em>even</em> faster. Unfortunately, existing 32-bit code, e.g., Silverlight plugin, doesn&#8217;t always play well with the new 64-bit code.</li>
<li>Learn more: <a href="http://timheuer.com/blog/archive/2011/02/14/silverlight-february-2011-update-gdr3.aspx">Silverlight 4 update</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=598406">bug 598406</a></li>
</ul>
<h3><a href="http://www.amazon.com/">Amazon.com</a></h3>
<ul>
<li>Problem: Lightning deals don&#8217;t show up on various pages like Gold Box pages</li>
<li>Context: Firefox 4 supports <a href="https://developer.mozilla.org/en/JavaScript/Strict_mode">ECMAScript 5 <tt>"strict mode"</tt></a>, which makes writing JavaScript code easier and cleaner. Amazon.com combines multiple files, e.g., its own code and jQuery, into a single file to speed up the site; however, jQuery uses strict mode, which applies to the whole file, and some of other other code was no longer valid.</li>
<li>Learn more: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=579119">bug 579119</a></li>
</ul>
<h3><a href="http://www.yelp.com/">Yelp</a></h3>
<ul>
<li>Problem: User-submitted photos, map navigation, search filters don&#8217;t appear or don&#8217;t work</li>
<li>Context: Firefox 4 implements many parts of <a href="https://developer.mozilla.org/en/HTML/HTML5">HTML5</a> from the <tt>&lt;video&gt;</tt> tag all the way down to the nitty-gritty details of what properties exist on certain HTML elements. Yelp&#8217;s code was counting on <tt>"style" in HTMLElement.prototype</tt> to be <tt>false</tt>, but HTML5 browsers will now give <tt>true</tt> instead.</li>
<li>Learn more: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=608651">bug 608651</a></li>
</ul>
<p>So if you haven&#8217;t tried Firefox 4 recently because your favorite sites weren&#8217;t working, <a href="http://firefox.com/beta"><b>download Firefox 4 beta</b></a> or have Firefox update itself and try again now. Thanks to the excellent work from all the teams involved to make sure Firefox 4 works great when the release candidates and official release appear in the coming weeks.</p>
<small><a href="http://ed.agadak.net/2011/02/great-time-to-use-firefox-4#respond">7 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2011/02/great-time-to-use-firefox-4/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Restartless add-on example code</title>
		<link>http://ed.agadak.net/2011/01/restartless-add-on-example-code</link>
		<comments>http://ed.agadak.net/2011/01/restartless-add-on-example-code#comments</comments>
		<pubDate>Tue, 25 Jan 2011 07:39:01 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=854</guid>
		<description><![CDATA[mfinkle&#8217;s recent posts [starkravingfinkle.org] on restartless add-ons reminded me that I was going to write a more detailed post about my restartless GitHub repository, but I&#8217;ve been distracted with another project. So briefly, I&#8217;ve put together some helper functions [github.com] that have been useful for developing various restartless add-ons. I&#8217;ve organized the repository to have [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://starkravingfinkle.org/blog/">mfinkle&#8217;s recent posts </a> [starkravingfinkle.org] on restartless add-ons reminded me that I was going to <a href="http://ed.agadak.net/2010/12/status-2010-12-20">write a more detailed post</a> about my restartless GitHub repository, but I&#8217;ve been <a href="http://ed.agadak.net/2011/01/looking-for-some-prototype-testers">distracted with another project</a>. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>So briefly, I&#8217;ve <a href="https://github.com/Mardak/restartless">put together some helper functions</a> [github.com] that have been useful for developing various restartless add-ons. I&#8217;ve organized the repository to have a bunch of &#8220;<tt>examples/</tt>&#8221; branches that build on top of other named branches that implement helper functions.</p>
<p>These first few are very simple examples:</p>
<p>- <a href="https://github.com/Mardak/restartless/blob/examples/autoReload/bootstrap.js"><tt>examples/autoReload</tt></a>: saves a step when developing a restartless addon by automatically re-enabling when you disable the add-on from <tt>about:addons</tt></p>
<p>- <a href="https://github.com/Mardak/restartless/blob/examples/ensureEnabled/bootstrap.js"><tt>examples/ensureEnabled</tt></a>: the <tt>install</tt> method always gets executed even when disabled, so this code makes sure the add-on runs on install; useful when combined with the following..</p>
<p>- <a href="https://github.com/Mardak/restartless/blob/examples/oneTime/bootstrap.js"><tt>examples/oneTime</tt></a>: run once and disable itself; useful for debugging problems on other people&#8217;s Firefox without doing the usual &#8220;copy/paste this into the Error Console&#8221;</p>
<p>The next couple helper functions have been incredibly useful for the restartless add-ons I&#8217;ve written:</p>
<p>- <a href="https://github.com/Mardak/restartless/blob/unload/bootstrap.js"><tt>unload</tt></a>: add a callback to run when the add-on is disabled by calling <tt>unload(callback)</tt>. This function makes it easy to ensure Firefox returns to its original state when a restartless add-on is disabled (which is very important for developing as you&#8217;re likely to disable and re-enable many times!) <a href="https://github.com/Mardak/restartless/blob/examples/shiftBrowser/bootstrap.js">(example)</a></p>
<p>- <a href="https://github.com/Mardak/restartless/blob/watchWindows/bootstrap.js"><tt>watchWindows</tt></a>: add a callback to run when the main Firefox browser window is open (navigator:browser) by calling <tt>watchWindows(callback)</tt>. The callback will be called immediately for existing windows and future windows, so put whatever browser UI modification code you want inside the callback. <a href="https://github.com/Mardak/restartless/blob/examples/shiftAllBrowsers/bootstrap.js">(example)</a></p>
<p>One last helper in the repository is the <a href="https://github.com/Mardak/restartless/blob/getString/bootstrap.js"><tt>getString</tt> function</a> that adds some l10n support to get the correct <tt>.properties</tt> file for the current locale. It shows off getting additionally packaged files and picking the right locale and some plural forms. I&#8217;ve put together a silly example at <a href="https://github.com/Mardak/restartless/blob/examples/l10nDialogs/bootstrap.js"><tt>examples/l10nDialogs</tt></a>.</p>
<p><a href="https://github.com/Mardak/restartless/blob/examples/l10nDialogs/bootstrap.js"><img src="http://ed.agadak.net/wp-content/uploads/2011/01/l10n-example.png" alt="Silly l10n example" title="Silly l10n example" width="394" height="168" class="aligncenter size-full wp-image-860" /></a></p>
<p>With all these helper functions, <a href="https://github.com/erikvold">Erik Vold </a>and <a href="https://github.com/nmaier">Nils Maier</a> helped put together <a href="https://github.com/mozilla/prospector/commit/d55358960e9ec86d9d8337944aae317b4f23a4f6">some code that loads packaged scripts</a>. We ended up with some code that makes use of <tt>getResourceURI</tt> so that it correctly works if the addon is .xpi packaged or an extension proxy file. Separating out the code this way lets you better organize the code and makes it easier to share.</p>
<small><a href="http://ed.agadak.net/2011/01/restartless-add-on-example-code#respond">3 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2011/01/restartless-add-on-example-code/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Looking for some prototype testers</title>
		<link>http://ed.agadak.net/2011/01/looking-for-some-prototype-testers</link>
		<comments>http://ed.agadak.net/2011/01/looking-for-some-prototype-testers#comments</comments>
		<pubDate>Sat, 22 Jan 2011 20:33:28 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=843</guid>
		<description><![CDATA[Edit: The add-on has now been released, so check out the announcement post: Towards Browse-Based Browsing with Home Dash. Thanks for the feedback! I started hacking on an idea last week in the context of the Prospector experiments [mozillalabs.com]. I&#8217;m looking for a small set of people to try it out and give some initial [...]]]></description>
				<content:encoded><![CDATA[<p><i><b>Edit</b>: The add-on has now been released, so check out the announcement post: <a href="http://mozillalabs.com/prospector/2011/01/26/towards-browse-based-browsing-with-home-dash/">Towards Browse-Based Browsing with Home Dash</a>. Thanks for the feedback!</i></p>
<p>I started hacking on an idea last week in the context of the <a href="https://mozillalabs.com/prospector">Prospector experiments</a> [mozillalabs.com]. I&#8217;m looking for a small set of people to try it out and give some initial technical feedback. For example, I know I&#8217;ve hard-coded some sizes/images that happen to fit my 1280&#215;800 screen on my Mac, but I am curious how it works or doesn&#8217;t work on other platforms, window sizes, etc.</p>
<p>You can <a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-home-dash/">install the restartless add-on</a> [<i>edit:</i> addons.mozilla.org] if you&#8217;re already running <a href="http://firefox.com/beta">Firefox 4 Beta 10</a> [firefox.com] or later. I&#8217;m not really describing it on purpose. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  But not to be too confused, below is a sketch from when I started hacking on it. And as usual, you can <a href="https://github.com/Mardak/prospector/tree/homeDash/homeDash">check out the source first from GitHub</a> [github.com] or directly from the .xpi.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/prospector-home-dash/"><img src="http://ed.agadak.net/wp-content/uploads/2011/01/sketch.png" alt="Sketch of Home Dash" title="Sketch of Home Dash" width="550" height="400" class="aligncenter size-full wp-image-845" /></a></p>
<p>You can email me the feedback at <a href="mailto:edilee@gmail.com">edilee@gmail.com</a> or just <a href="http://ed.agadak.net/2011/01/looking-for-some-prototype-testers">reply with a comment</a>!</p>
<small><a href="http://ed.agadak.net/2011/01/looking-for-some-prototype-testers#respond">23 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2011/01/looking-for-some-prototype-testers/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>#status 2010-12-20</title>
		<link>http://ed.agadak.net/2010/12/status-2010-12-20</link>
		<comments>http://ed.agadak.net/2010/12/status-2010-12-20#comments</comments>
		<pubDate>Tue, 21 Dec 2010 18:20:23 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Status]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=826</guid>
		<description><![CDATA[- Brainstorm next Prospector experiments At the Mozilla All Hands last week, and we held a discussion to brainstorm various ideas to try out in the Prospector family of experiments. A couple of the current experiments like Speak Words and Instant Preview help users get back to top sites almost instantly with just one key [...]]]></description>
				<content:encoded><![CDATA[<p><strong>- Brainstorm next Prospector experiments</strong></p>
<p>At the Mozilla All Hands last week, and we held a discussion to brainstorm various ideas to try out in the <a href="https://mozillalabs.com/prospector/2010/11/19/analyze-your-search-behavior/">Prospector family</a> of experiments. A couple of the current experiments like <a href="https://mozillalabs.com/prospector/2010/10/27/navigate-the-web-faster-with-awesome-bar-word-completion/">Speak Words</a> and <a href="https://mozillalabs.com/prospector/2010/12/07/awesome-bar-previews-for-faster-surfing/">Instant Preview</a> help users get back to top sites almost instantly with just one key stroke, but these mainly help for the relatively small set of sites that users frequent and not so much the remainder of the history available in Firefox.</p>
<p>So the next set of experiments will focus on improving the experience of searching for pages in Firefox. Interesting findings from <a href="https://mozillalabs.com/prospector/2010/11/19/analyze-your-search-behavior/">Query Stats</a> could help identify relevant pages or help build a better view of your past browsing behavior. Additional data about each page could be tracked by Firefox such as unique phrases from the page or how long a tab was opened and interacted with.</p>
<p>Displaying the search results also received some attention as to how to add all this extra information in a clean way. Some ideas ranged from being more space efficient by showing location bar results on one line to taking up more vertical space as one might not need to use the page when searching. This led to ideas of using the whole tab content area to show rich results and provide interaction such as grouping/switching of types of results like pages, apps, videos, etc.</p>
<p><strong>- Prepare search bar -> button demo</strong></p>
<p>Along the lines of combining the location bar and the search bar, I&#8217;ve been hacking together a Prospector experiment that changes the search bar into a list of buttons. This allows for explicit control for the user to decide when searching should be local to Firefox&#8217;s history or over the web. It also makes it apparent that there are multiple search engines to choose from and clicking another button switches the current search request to another provider.</p>
<p><img src="http://ed.agadak.net/wp-content/uploads/2010/12/search-buttons.png" alt="" title="Search buttons" width="276" height="64" class="aligncenter size-full wp-image-832" /></p>
<p>When clicking a button, it inserts a keyword and focuses the location bar, so it&#8217;s like doing a smart bookmark keyword search with the first location bar suggestion being the search. Combined with Instant Preview, it&#8217;ll automatically update the results immediately as you type more words or switch engines.</p>
<p><strong>- Attend Open Web App discussions</strong></p>
<p>I was curious what kind of web-apps were being created in general across the various web-app stores available today because I wanted to see if the search bar -> button experiment above could add to the types of available apps. This is because generally speaking, these search buttons processes some words from the user and converts it to a url or a set of results.</p>
<p>From the screenshot above, the last button is actually for Google Translate, so when I click the button and type &#8220;hola mis amigos&#8221;, Google translates it immediately as I type to &#8220;<a href="http://translate.google.com/#auto|en|hola+mis+amigos">hello my friends</a>&#8220;. This somewhat feels Ubiquity-like, which had all sorts of commands, so potentially allowing the web app manifest to describe these &#8220;searches&#8221; or &#8220;actions&#8221; could lead to web-apps that are more than just bookmarks.</p>
<p><strong>- Push restartless code examples to GitHub</strong></p>
<p>I&#8217;ve been hacking on restartless add-ons for a while now and noticed that I copy/paste some useful helper functions for when I start a new add-on. Other people hacking on these bootstrapped add-ons could make use of them as well, so I created a <a href="https://github.com/Mardak/restartless">&#8220;restartless&#8221; repository on GitHub</a>. I&#8217;ll write a post going into more detail later, but briefly, it&#8217;s a collection of git branches where each branch contains a helper function or provides an example usage or pattern.</p>
<p><strong>- Tracking down flash crashes</strong></p>
<p>I&#8217;ve been running into Flash crashes on OS X for a while and noticed other people were in a similar situation. So to help resolve it, I started tracking down the various flash crash reports, and I&#8217;ve <a href="http://ed.agadak.net/2010/12/tracking-down-flash-crashes">posted about my findings</a> and issues that I ran into.</p>
<small><a href="http://ed.agadak.net/2010/12/status-2010-12-20#respond">6 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/12/status-2010-12-20/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tracking Down Flash Crashes</title>
		<link>http://ed.agadak.net/2010/12/tracking-down-flash-crashes</link>
		<comments>http://ed.agadak.net/2010/12/tracking-down-flash-crashes#comments</comments>
		<pubDate>Sun, 19 Dec 2010 18:33:40 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=804</guid>
		<description><![CDATA[Over the last many months, flash has been crashing for me on any page with flash video when I browse away. This means flash crashes when clicking a link or typing in the location bar. Or probably worst when a site that has a flash intro it crashes when loading the main content of the [...]]]></description>
				<content:encoded><![CDATA[<p>Over the last many months, flash has been crashing for me on any page with flash video when I browse away. This means flash crashes when clicking a link or typing in the location bar. Or probably worst when a site that has a flash intro it crashes when loading the main content of the site.</p>
<p>This seems to only affect the Flash Player 10 plugin on OS X, but it was still a bit tricky finding out what crash reports are related to this particular issue.</p>
<p><strong>- There are many versions of the flash plugin</strong></p>
<p>If a bug is reported with a crash signature like <tt>[@ FlashPlayer-10.6@0x4b4b39 ]</tt>, watching the number of crashes for that signature go down may initially seem like something was fixed, but actually users are upgrading their version of flash and crashing at a different address. Additionally, it&#8217;s harder to see the actual number of crashes for this issue at a glance as the <a href="http://crash-stats.mozilla.com/query/query?version=Firefox%3A4.0b9pre&#038;platform=mac&#038;do_query=1">reports are spread across many entries</a>.</p>
<p><strong>- FlashPlayer-10.6 plugin version is missing</strong></p>
<p>Adding to the issue of there being many versions, for some reason the version information for FlashPlayer-10.6 shows up in reports as 0.0.0.0. Fortunately there&#8217;s an additional debug identifier that is consistently reported for the same version of the plugin.</p>
<p>Below is a listing of some recent versions and debug ids:</p>
<pre><table border=0 cellspacing=10>
<tr><td>10.2.151.49</td><td>nov 30</td><td>3CDC6F1339C791580EC31A451724F0110</td></tr>
<tr><td>10.1.102.64</td><td>nov 4</td><td>7F846A865E18B6E54DA2E5B46E7CF5B20</td></tr>
<tr><td>10.1.85.3</td><td>sep 20</td><td>392E898E2D7BCE8B02FFCE2287F7DF570</td></tr>
<tr><td>10.1.82.76</td><td>aug 10</td><td>5295F1D9A734E9FDD5350646BF2615A40</td></tr>
<tr><td>10.1.53.64</td><td>jun 10</td><td>28AEE5D0CE3E55DB5AE5787143EC0F960</td></tr>
</table></pre>
<p>I gathered these by looking through <a href="http://www.adobe.com/support/security/#flashplayer">Adobe&#8217;s security bulletins</a> to find the date and version of the new release. With the release date, I could then search for crash reports from <em>before the release</em> and see which reports disappeared. Then from the reports that did disappear, I can record the debug identifier to be for the new version.</p>
<p><strong>- Crash reports not being submitted</strong></p>
<p><img src="http://ed.agadak.net/wp-content/uploads/2010/12/no-report.png" alt="" title="No  report available" width="244" height="139" class="aligncenter size-full wp-image-805" /></p>
<p>Another issue that has recently been fixed was that most people running into these plugin crashes had no option to send a crash report. This was because Firefox by default runs in 64-bit mode and was <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=590961">unable to create a report for 32-bit plugin crashes</a>. This means the frequency of the crashes were massively under-reported and the sparse crash data made it harder to find relevant reports.</p>
<p><strong>- Improving crash-stats triaging</strong></p>
<p>For this particular case, I can think of a couple features that could have made tracking down flash crashes more efficient.</p>
<p>Because the crash signature kept changing from version to version, I had to inspect many crashes to see if the whole stack is similar to other stacks. For one set of crashes, I was looking for <tt>AnswerNPP_Destroy</tt> in frame #8 to identify the family of crashes. Being able to search in part of the stack could also make it easier for various component teams find relevant reports.</p>
<p>For another set of crashes, the crash reason was always <tt>EXC_BAD_ACCESS</tt> at address 0x44c. So in addition to being able to filter by crash signature, being able to search by reason and address could have avoided needing to click through many crash signature reports.</p>
<p>There&#8217;s a number of bugs filed for these flash crashes like <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=590955">bug 590955</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=572134">bug 572134</a>, and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=617469">bug 617469</a>. I&#8217;m still not sure if it&#8217;s an issue with OOPP or a bug in the plugin, so it&#8217;s hard to say if flash will stop crashing by a new Firefox beta release or a plugin update. But just as a heads up, getting the latest Flash Player 10.2<em>(.151.49)</em> beta or Firefox 4 beta8 won&#8217;t fix these crashes.</p>
<small><a href="http://ed.agadak.net/2010/12/tracking-down-flash-crashes#respond">12 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/12/tracking-down-flash-crashes/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Swipe Up for Top; Swipe Right for Tabs</title>
		<link>http://ed.agadak.net/2010/11/swipe-up-for-top-swipe-right-for-tabs</link>
		<comments>http://ed.agadak.net/2010/11/swipe-up-for-top-swipe-right-for-tabs#comments</comments>
		<pubDate>Sat, 13 Nov 2010 01:39:10 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=788</guid>
		<description><![CDATA[Now that Firefox 4 Beta 7 [mozilla.com] is out, some people trying it out on their Macs are giving frowny faces to some behavior changes [input.mozilla.com]. (But others are to find an easy way to view all their tabs.) In particular, doing a 3-finger swipe upwards no longer brings you to the top of the [...]]]></description>
				<content:encoded><![CDATA[<p>Now that <a href="http://www.mozilla.com/firefox/beta/">Firefox 4 Beta 7</a> [mozilla.com] is out, some people trying it out on their Macs are <a href="http://input.mozilla.com/en-US/search/?q=swipe&#038;product=firefox&#038;os=mac">giving frowny faces to some behavior changes</a> [input.mozilla.com]. (But others are <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  to find an easy way to view all their tabs.)</p>
<p>In particular, doing a 3-finger swipe upwards no longer brings you to the top of the page. Some people have pointed to <tt>about:config</tt> to change the preferences to switch back to the old behavior. But if that sounds too complex, you can just install an add-on to do the dirty work for you. Just click the following install link, and you&#8217;re ready to swipe! No need to restart.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/254002/">Install Swipe Top</a></strong> [addons.mozilla.org]: Swipe up to scroll to the top of the page (and down to the end).</p>
<p>I&#8217;ve also made another related add-on that changes the default behavior of swiping right and left, so instead of going forwards and backwards in the current tab&#8217;s history, it&#8217;ll switch tabs.</p>
<p><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/254003/">Install Swipe Tabs</a></strong> [addons.mozilla.org]: Swipe right to switch to the next tab (and left to the previous).</p>
<p>For both these add-ons, you can install them and try them immediately without restarting Firefox. If you want to get to the original Panorama and navigation behavior, just hold the &#8220;command&#8221; key while swiping. Or you can just disable or uninstall the add-on to get the original behavior as well without restarting.</p>
<p>If you&#8217;re interested in how I wrote the add-ons, you can check out the source for <a href="https://github.com/Mardak/swipeTop">Swipe Top</a> [github.com] and <a href="https://github.com/Mardak/swipeTabs">Swipe Tabs</a> [github.com].</p>
<small><a href="http://ed.agadak.net/2010/11/swipe-up-for-top-swipe-right-for-tabs#respond">2 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/11/swipe-up-for-top-swipe-right-for-tabs/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instant Preview of Location Bar Suggestions</title>
		<link>http://ed.agadak.net/2010/09/instant-preview-of-location-bar-suggestions</link>
		<comments>http://ed.agadak.net/2010/09/instant-preview-of-location-bar-suggestions#comments</comments>
		<pubDate>Thu, 30 Sep 2010 22:29:26 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=775</guid>
		<description><![CDATA[I&#8217;ve received a number of requests for getting Instant-like Search, so I&#8217;ve packaged it up for people to download. Part of the reason why I didn&#8217;t release earlier is that this restartless add-on requires the upcoming Firefox 4 Beta 7, so I was hoping to make it available when the beta was ready. If you&#8217;re [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve received a number of requests for getting <a href="http://ed.agadak.net/2010/09/video-preview-of-instant-like-search">Instant-like Search</a>, so I&#8217;ve packaged it up for people to download. Part of the reason why I didn&#8217;t release earlier is that this restartless add-on requires the upcoming Firefox 4 Beta 7, so I was hoping to make it available when the beta was ready.</p>
<p>If you&#8217;re already on the bleeding edge running a <a href="http://nightly.mozilla.org/">Firefox nightly build</a> [nightly.mozilla.org], you can <a href="http://ed.agadak.net/instantPreview.xpi"><b>install Instant Preview</b></a>.</p>
<p>With this add-on, Firefox will start loading pages highlighted in the location bar suggestions in place of the current tab. This means you can type a letter and press <tt>Down</tt> to start viewing that page. From there you can press <tt>Return</tt> to make the preview turn into a persistent tab. Alternatively, you can press <tt>Esc</tt> to get rid of the preview if you just needed to glance at the page. So if you do end up selecting the page, it might already be done loading and ready for you to use! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This works even better if you install <a href="http://ed.agadak.net/2010/09/speak-words-ito-the-location-bar">Speak Words</a>, so that when you type a single letter, not only will the rest of the word get filled in, it&#8217;ll automatically highlight the first entry resulting in the page being loaded immediately. For now you&#8217;ll need to install both these restartless add-ons separately, but I&#8217;m working on a way to simplify this so you just need to install one to automatically get these new features.</p>
<p>Don&#8217;t forget to check out my <a href="http://ed.agadak.net/2010/09/video-preview-of-instant-like-search">Video Preview of Instant-like Search</a> and <a href="http://ed.agadak.net/instantPreview.xpi">install it</a>!</p>
<small><a href="http://ed.agadak.net/2010/09/instant-preview-of-location-bar-suggestions#respond">23 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/instant-preview-of-location-bar-suggestions/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Video Preview of Instant-like Search</title>
		<link>http://ed.agadak.net/2010/09/video-preview-of-instant-like-search</link>
		<comments>http://ed.agadak.net/2010/09/video-preview-of-instant-like-search#comments</comments>
		<pubDate>Thu, 23 Sep 2010 14:00:07 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=728</guid>
		<description><![CDATA[Here&#8217;s a preview of an instant-like search add-on that I just hacked together in a few minutes. Please download the video to watch (or get a Firefox beta [mozilla.com]) Video formats: webm, ogv, mov Transcript: Let&#8217;s say I want to go to Planet Mozilla, so I start typing out &#8220;planet&#8221;, and before I even finish [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a preview of an instant-like search add-on that I just hacked together in a few minutes. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><video controls width=550><br />
<source src="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.webm" /><br />
<source src="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.ogv" /><br />
<source src="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.mov" /><br />
Please download the video to watch (or <a href="http://www.mozilla.com/firefox/all-beta.html">get a Firefox beta</a> [mozilla.com])<br />
</video></p>
<p>Video formats: <a href="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.webm">webm</a>, <a href="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.ogv">ogv</a>, <a href="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.mov">mov</a></p>
<p>Transcript:</p>
<blockquote><p>Let&#8217;s say I want to go to Planet Mozilla, so I start typing out &#8220;planet&#8221;, and before I even finish typing it out, the page has loaded over the current tab. This could be useful to take a quick peek at a page like xkcd, and then hit <tt>&lt;esc&gt;</tt> to return to where I left off.</p>
<p>Combining this with smart bookmark keywords, I can type &#8220;g&#8221; followed by some word, and it&#8217;s almost like Google Instant search. But this works for other search engines like Bing.. or even Wikipedia. As long as the site returns the page fast enough, it already feels pretty good.</p></blockquote>
<small><a href="http://ed.agadak.net/2010/09/video-preview-of-instant-like-search#respond">16 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/video-preview-of-instant-like-search/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
<enclosure url="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.webm" length="2947305" type="video/webm" />
<enclosure url="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.ogv" length="2350637" type="video/ogg" />
<enclosure url="http://ed.agadak.net/wp-content/uploads/2010/09/instant-preview.mov" length="2062493" type="video/quicktime" />
		</item>
		<item>
		<title>Speak Words to the Location Bar</title>
		<link>http://ed.agadak.net/2010/09/speak-words-ito-the-location-bar</link>
		<comments>http://ed.agadak.net/2010/09/speak-words-ito-the-location-bar#comments</comments>
		<pubDate>Wed, 22 Sep 2010 17:45:24 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=712</guid>
		<description><![CDATA[For those that already &#8220;speak words&#8221; to the location bar, you probably already know that you can find pages by their title or use multiple words to help find the exact page that you want. This is as opposed to typing in a url or a domain to first load a page to get to [...]]]></description>
				<content:encoded><![CDATA[<p>For those that already &#8220;speak words&#8221; to the location bar, you probably already know that you can find pages by their title or use multiple words to help find the exact page that you want. This is as opposed to typing in a url or a domain to first load a page to get to the page you want.</p>
<div id="attachment_713" class="wp-caption aligncenter" style="width: 270px"><a href="http://ed.agadak.net/speakWords.xpi"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/title-word.png" alt="" title="Title Word Match" width="260" height="69" class="size-full wp-image-713" /></a><p class="wp-caption-text">Finding a page by matching the title</p></div>
<p>To help people speak words and get to the pages even faster, I&#8217;ve written an add-on, <a href="http://ed.agadak.net/speakWords.xpi">Speak Words</a>, that will fill in the rest of the word as you type in the location bar. Similar to how <a href="http://ed.agadak.net/2010/09/find-suggest-words-from-the-page">Find Suggest</a> uses words from the current page as suggestions, this add-on will look for words that you&#8217;ve previously typed into the location bar for its dictionary.</p>
<p>In the example above, I&#8217;ve typed &#8220;r&#8221; and the add-on has filled in the rest of the word for &#8220;reader&#8221; and searched for that word in the location bar. I can now just press <tt>&lt;Return&gt;</tt> to go to that page. Just 2 key strokes, and I&#8217;m where I want to be! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_716" class="wp-caption aligncenter" style="width: 360px"><a href="http://ed.agadak.net/speakWords.xpi"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/instant-update.png" alt="" title="Immediate Updates" width="350" height="220" class="size-full wp-image-716" /></a><p class="wp-caption-text">Immediate suggestions for new words as you type</p></div>
<p>Because the add-on gives immediate feedback on what word it&#8217;s using, you can figure out what&#8217;s the fewest number of keys you need to press to get to the site you want. Before, I would probably type &#8220;bank&#8221; or &#8220;bugz,&#8221; but now I see that I can just type &#8220;b&#8221; and &#8220;bu&#8221; instead. Also if you do type words from a site&#8217;s domain, the add-on will also help fill in the rest of the word for you as shown above.</p>
<p>The suggested words are based on the adaptive learning of the location bar and previously-typed domains. So your suggestions will be different from mine, and instead it&#8217;ll show you the words that you&#8217;ll likely to type in anyway, except now you don&#8217;t need to type out the whole word.</p>
<p><a href="http://ed.agadak.net/speakWords.xpi"><b>Try out Speak Words</b></a> if you&#8217;re running a recent <a href="http://www.mozilla.com/firefox/all-beta.html">Firefox 4 beta</a> [mozilla.com]. It&#8217;s a restartless add-on, so you can make Firefox even snappier immediately!</p>
<p>Looking forwards in terms of improving search in Firefox, there&#8217;s now dictionaries for word suggestions for each type of search: search engine suggestions for the search bar, in-page words for find, and key words for history. While the actual dictionary for each might need to be tweaked, it&#8217;ll be interesting to see if the search interfaces can be combined and streamlined while still helping the user with relevant suggestions and results.</p>
<small><a href="http://ed.agadak.net/2010/09/speak-words-ito-the-location-bar#respond">8 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/speak-words-ito-the-location-bar/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Find Suggest: Words from the Page</title>
		<link>http://ed.agadak.net/2010/09/find-suggest-words-from-the-page</link>
		<comments>http://ed.agadak.net/2010/09/find-suggest-words-from-the-page#comments</comments>
		<pubDate>Fri, 17 Sep 2010 01:55:59 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=695</guid>
		<description><![CDATA[There&#8217;s a few main ways to do search in Firefox. You can use the location bar to search for pages that you&#8217;ve visited or bookmarked. You can use the find bar to search for words on the page that you&#8217;re currently looking at. You can use the search bar to find new pages on the [...]]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s a few main ways to do search in Firefox. You can use the location bar to search for pages that you&#8217;ve visited or bookmarked. You can use the find bar to search for words on the page that you&#8217;re currently looking at. You can use the search bar to find new pages on the internet. As I <a href="http://ed.agadak.net/2010/09/whats-in-your-searchbar">mentioned last week</a>, I&#8217;m taking a look into ways to improve searches in Firefox as part of Mozilla Labs, so this covers all of these types of searching.</p>
<p>Today I&#8217;ve quickly hacked together an initial prototype that helps you find words on a page. Instead of typing letters into the find box only to end up getting a &#8220;Phrase not found&#8221; message, the find bar will now show suggestions of words that will match on the page as you type. The find bar will only let you find words that are on the page anyway, so why not use those available words to guide the user?</p>
<div id="attachment_696" class="wp-caption aligncenter" style="width: 460px"><a href="http://ed.agadak.net/findSuggest.xpi"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/cropped-suggest.png" alt="" title="Suggested words from the page" width="450" height="85" class="size-full wp-image-696" /></a><p class="wp-caption-text">Suggestion of words from the current page (buttons removed to fit screenshot)</p></div>
<p>This is similar to how mobile phones will suggest words based on the letters you&#8217;ve entered so far. Except instead of showing possible words from the dictionary, the find bar will only show words from a custom dictionary.</p>
<p>You can try out this feature by <a href="http://ed.agadak.net/findSuggest.xpi"><b>installing Find Suggest</b></a>. It&#8217;s a restartless add-on that runs on recent <a href="http://www.mozilla.com/firefox/all-beta.html">Firefox 4 betas</a> [mozilla.com], so you can start playing around with it immediately.</p>
<p>This is a quick prototype, so you can only fill in the suggestions by clicking on them. Ideally there would be some keyboard mechanism to fill in the suggestion such as hitting <tt>&lt;Tab&gt;</tt> to fill in the common prefix like on the command line. But even with the limited functionality, it&#8217;s a useful guide to quickly see what words will match on the page without having to type them out.</p>
<small><a href="http://ed.agadak.net/2010/09/find-suggest-words-from-the-page#respond">13 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/find-suggest-words-from-the-page/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Running Code Without Error Console</title>
		<link>http://ed.agadak.net/2010/09/running-code-without-error-console</link>
		<comments>http://ed.agadak.net/2010/09/running-code-without-error-console#comments</comments>
		<pubDate>Fri, 10 Sep 2010 21:34:24 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=670</guid>
		<description><![CDATA[Being able to run chrome-privileged code from the Error Console has been very convenient for me to help users debug issues with Firefox or an add-on when they get stuck in some strange state. I can quickly test an idea or a snippet of code and have the user run it to track down where [...]]]></description>
				<content:encoded><![CDATA[<p>Being able to run chrome-privileged code from the Error Console has been very convenient for me to help users debug issues with Firefox or an add-on when they get stuck in some strange state. I can quickly test an idea or a snippet of code and have the user run it to track down where things are going wrong. However, there&#8217;s some issues that make it tricky to use:</p>
<ul>
<li>Users get confused doing Tools -> Error Console -> Paste -> Evaluate</li>
<li>Users might not copy/paste correctly or perhaps the code got wrapped oddly</li>
<li>Javascript version seems to be 1.6, so <tt>let</tt> needs to be replaced with <tt>var</tt>, etc.</li>
<li>Scripts are heavily <abbr title="Garbage Collection">GC</abbr>ed, so modules are imported to attach objects to keep them alive</li>
<li>Everything needs to be on one line, so beware of any lines with <tt>//</tt> comments!</li>
<li>Console output is html-like and strips tags and empty output leading to confusion</li>
</ul>
<p>One additional drawback in Firefox 4 is the Error Console is now disabled by default, so having users first go to about:config and toggling <tt>devtools.errorconsole.enabled</tt> to <tt>true</tt> is an extra step where users can get lost. (Don&#8217;t forget about the click-through warning page! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) Additionally, I believe enabling the Error Console requires a restart, so debugging a live instance is troublesome unless the problem is easily reproduced.</p>
<div id="attachment_679" class="wp-caption aligncenter" style="width: 435px"><a href="http://ed.agadak.net/wp-content/uploads/2010/09/about-config-errorconsole.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/about-config-errorconsole.png" alt="" title="about:config to find errorconsole prefs" width="425" height="175" class="size-full wp-image-679" /></a><p class="wp-caption-text">New preference to enable the Error Console (under the Tools menu)</p></div>
<p>Fortunately, Firefox 4 comes with restartless add-ons! You can just package up an add-on with two files: <tt>bootstrap.js</tt> and <tt>install.rdf</tt>, with the relevant code running from the <tt>startup()</tt> function. It&#8217;s simpler for users to try out as it looks like any other add-on install, so just point to the .xpi and click Install.</p>
<p>Just make sure that if you want the code to only run once, have the add-on uninstall itself after running. Otherwise it&#8217;ll be like any other add-on that runs when Firefox starts.</p>
<div id="attachment_683" class="wp-caption aligncenter" style="width: 395px"><a href="http://ed.agadak.net/restartless/bootstrap.js"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/autouninstall-autoenable.png" alt="" title="Code to auto-uninstall/enable" width="385" height="215" class="size-full wp-image-683" /></a><p class="wp-caption-text">Code snippets to for one-time scripts and easy reloading of scripts</p></div>
<p>Another neat trick for reloading or running an updated script is having the add-on auto-enable itself when it&#8217;s disabled. I can now just make changes to the files and click Disable once from about:addons, and it&#8217;ll automatically reload itself instead of needing to click Enable. Also because now I can just edit the file and not need to copy/paste into Error Console, I can easily track my changes with revision control software. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;ve provided the <a href="http://ed.agadak.net/restartless/bootstrap.js"><tt>bootstrap.js</tt></a> and <a href="http://ed.agadak.net/restartless/install.rdf"><tt>install.rdf</tt></a> files needed for this simple restartless add-on. From there you just need to:</p>
<ol>
<li>Delete one of the auto-uninstall or auto-enable snippets from <tt>bootstrap.js</tt></li>
<li>Add in the code you want to run inside <tt>startup()</tt> of <tt>bootstrap.js</tt></li>
<li>Package up the files into an xpi: <tt>zip restartless.xpi bootstrap.js install.rdf</tt></li>
<li>Distribute/install <tt>restartless.xpi</tt></li>
</ol>
<small><a href="http://ed.agadak.net/2010/09/running-code-without-error-console#respond">4 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/running-code-without-error-console/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What&#8217;s in your Searchbar?</title>
		<link>http://ed.agadak.net/2010/09/whats-in-your-searchbar</link>
		<comments>http://ed.agadak.net/2010/09/whats-in-your-searchbar#comments</comments>
		<pubDate>Fri, 10 Sep 2010 00:04:50 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Add-on]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=650</guid>
		<description><![CDATA[I&#8217;m looking into ways to improve how people search in Firefox. My previous contributions focused on getting useful pages to show up in the AwesomeBar when searching history, and I collected plenty of useful feedback to see what users wanted or didn&#8217;t want in the results. I&#8217;ve written a restartless add-on that lets you see [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m looking into ways to improve how people search in Firefox. My previous contributions focused on getting useful pages to show up in the AwesomeBar when searching history, and I collected plenty of useful feedback to see what users wanted or didn&#8217;t want in the results.</p>
<p>I&#8217;ve written a restartless add-on that lets you see how you use the searchbar in Firefox. It scans through what you&#8217;ve previously typed into the searchbar and groups your searches by the words you&#8217;ve typed. The first set of results shows words that you frequently use across different searches, and the second set shows searches that you repeat multiple times.</p>
<p>If you&#8217;re running a recent <a href="http://www.mozilla.com/firefox/all-beta.html">Firefox 4 beta</a> [mozilla.com], <a href="http://ed.agadak.net/queryStats.xpi">install the add-on</a>, and it&#8217;ll open a new tab with your results (without sending that data anywhere). This is a restartless add-on that will also uninstall itself after it runs.</p>
<p>If you feel like sharing your results, please leave a comment or send me an email: <a href="mailto:edilee@gmail.com?subject=Searchbar results">edilee@gmail.com</a>.</p>
<div id="attachment_651" class="wp-caption aligncenter" style="width: 460px"><a href="http://ed.agadak.net/queryStats.xpi"><img src="http://ed.agadak.net/wp-content/uploads/2010/09/sample-query-results.png" alt="" title="Sample searchbar query results" width="450" height="280" class="size-full wp-image-651" /></a><p class="wp-caption-text">Unique and repeated search queries from my own searchbar history data</p></div>
<p>From my personal usage, the unique search queries set has many searches that I only do once to find out information on some topic like &#8220;mozilla&#8221; or &#8220;starcraft&#8221;. This contrasts with my repeated searches where I have terms like &#8220;time&#8221; or &#8220;movie&#8221;. I do make heavy use of keyword searches and smart bookmarks, but I happen to not have set any for these repeated searches probably because search engines like Google and Bing provide useful information on the results page.</p>
<p>Are your results like mine? Do you have a totally different search behavior? Any suggestions for how you would improve searching?</p>
<small><a href="http://ed.agadak.net/2010/09/whats-in-your-searchbar#respond">4 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/09/whats-in-your-searchbar/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>There&#8217;s Always Another Release</title>
		<link>http://ed.agadak.net/2010/08/theres-always-another-release</link>
		<comments>http://ed.agadak.net/2010/08/theres-always-another-release#comments</comments>
		<pubDate>Tue, 31 Aug 2010 20:00:54 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Account Manager]]></category>
		<category><![CDATA[AwesomeBar]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=631</guid>
		<description><![CDATA[As Atul mentioned in &#8220;The Social Constraints of Bettering The Web&#8221; [toolness.com], Account Manager will likely not make its way into Firefox 4. He points out one of the biggest bottlenecks as getting approval from Firefox product drivers: Within Mozilla, I see my coworkers vie for the attention of this tiny handful of gatekeepers. People [...]]]></description>
				<content:encoded><![CDATA[<p>As Atul mentioned in &#8220;<a href="http://www.toolness.com/wp/?p=988">The Social Constraints of Bettering The Web</a>&#8221; [toolness.com], Account Manager will likely not make its way into Firefox 4. He points out one of the biggest bottlenecks as getting approval from Firefox product drivers:</p>
<blockquote><p>Within Mozilla, I see my coworkers vie for the attention of this tiny handful of gatekeepers. People in charge need convincing; the clever social engineer has a lot of power when it comes to navigating this landscape.</p></blockquote>
<p>This last step of getting approval comes at the very end of a long line of work. While Dan and I have been busy implementing the core feature and making sure it doesn&#8217;t regress performance and tests, a good number of people have been involved both inside and outside of Mozilla to design the user interface, to flesh-out the spec and to integrate the feature into sites or as plug-ins.</p>
<div id="attachment_633" class="wp-caption aligncenter" style="width: 425px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/delegated.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/delegated.png" alt="" title="Mockup of multiple account types" width="415" height="285" class="size-full wp-image-633" /></a><p class="wp-caption-text"><a href='http://ed.agadak.net/am/i6.png'>Alex Faaborg's mockup</a> of letting users pick different types of accounts</p></div>
<p>But this approval process affects people outside of Mozilla as well. New developers in the community hear about neat features of the upcoming Firefox and want to help by hacking on patches of related features. For example, the status bar removal in Firefox 4 has a number of side-effects including the removal of the download statusbar. Alex Limi has suggested ways for &#8220;<a href="http://limi.net/articles/improving-download-behaviors-web-browsers/">Improving download behaviors in web browsers</a>&#8221; [limi.net], which would add a new toolbar interface, and while there are initial patches from multiple community members, it seems unlikely to make it to Firefox 4.</p>
<p>I even ran into this same roadblock a couple years ago when I was trying to get the AwesomeBar into Firefox 3. Back then I was a random community member that had a good idea and was able to hack on stuff in my &#8220;free&#8221; (ha! <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) time. It was only after a lot of prodding and persistence that got just a bit of what I worked on into Firefox 3, but that was all very stressful as I looked back on &#8220;<a href="http://ed.agadak.net/2008/03/why-i-worked-on-firefox">Why I Worked On Firefox</a>.&#8221;</p>
<p>But fear not community members! There&#8217;s always another release. The product drivers are not approving patches during this beta-crunch time because there&#8217;s always some risk involved with changes (especially those &#8220;it&#8217;s just a one line change&#8221; fixes <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). New changes typically are followed up by a number of new issues and patches that then need to be additionally hacked on, tested, reviewed, and approved. So just because it doesn&#8217;t get approval now doesn&#8217;t mean it won&#8217;t be accepted when the tree is more open.</p>
<p>Additionally, patches usually come with a number of dependent fixes that might be able to land first. And in the case of Account Manager, I&#8217;ve already gotten in some changes into Firefox 4 that improve the new PopupNotifications (used by Geolocation and Add-ons) and testing infrastructure. Some other useful changes that could land independently of Account Manager are some upgrades to the Password Manager and networking APIs. So while the core feature might not be in yet, the platform is made better and ready for it.</p>
<p>So keep hacking away and perhaps your feature will be ready to land on the open tree after Firefox 4 branches. And then it&#8217;ll have many months to bake and get tested by other community members and eventually be seen by millions of Firefox users. <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/2010/08/theres-always-another-release#respond">10 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/08/theres-always-another-release/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Synchronous and Asynchronous APIs</title>
		<link>http://ed.agadak.net/2010/08/synchronous-and-asynchronous-apis</link>
		<comments>http://ed.agadak.net/2010/08/synchronous-and-asynchronous-apis#comments</comments>
		<pubDate>Mon, 30 Aug 2010 22:31:20 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Account Manager]]></category>
		<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=604</guid>
		<description><![CDATA[In designing the Firefox-facing APIs of Account Manager, thunder [sandmill.org] and I decided to make most of the interfaces take a callback/continuation. Two main reasons were 1) to allow add-ons to add extra account types like OpenID and 2) to find out if you&#8217;re logged-in to a site over multiple network requests. For an add-on [...]]]></description>
				<content:encoded><![CDATA[<p>In designing the Firefox-facing <abbr title="Application Programming Interface">API</abbr>s of Account Manager, <a href="http://blog.sandmill.org/">thunder</a> [sandmill.org] and I decided to make most of the interfaces take a callback/continuation. Two main reasons were 1) to allow add-ons to add extra account types like OpenID and 2) to find out if you&#8217;re logged-in to a site over multiple network requests.</p>
<p>For an add-on to provide a new account type, it needs to be able to tell Firefox what saved accounts are available and how to connect to them. These might need to read data from disk and/or network; or perhaps request more information from the user like a 1-time code sent over <abbr title="Short Message Service">SMS</abbr>. For Firefox to support these more-complex interactions, it can&#8217;t assume that a method implemented by the add-on can return a value immediately.</p>
<div id="attachment_609" class="wp-caption aligncenter" style="width: 359px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/sms.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/sms.png" alt="" title="Additional SMS security code" width="349" height="124" class="size-full wp-image-609" /></a><p class="wp-caption-text">Asking for additional information to connect to a banking site</p></div>
<p>In this particular mockup, the site has told Firefox not to use the basic username-password account type but instead to use an account type that asks for more information. Here, an add-on has already saved the username/password and doesn&#8217;t to ask for them, but it can&#8217;t immediately connect without asking for more information, so it tells Firefox to show this popup. With the async. API, the add-on can later tell Firefox that it has finished the connect process.</p>
<p>The second reason for going async. overlaps with the first of supporting add-ons; Account Manager and account types need to talk over the network to other machines. These requests can take more than just a few milliseconds, so blocking the rest of Firefox when you click on the &#8220;Sign in&#8221; button using a synchronous request would be bad. In the case of finding the account status, Firefox might need to make requests for any or all of host-meta, <abbr title="Account Management Control Document">AMCD</abbr> and the session status.</p>
<p>The Password Manager API in Firefox happens to be synchronous&mdash;as are many other interfaces in Firefox. Converting it to be asynchronous for use in the username/password account type was fairly simple, but there&#8217;s a couple things to keep in mind: when the work is done and when the result is given.</p>
<div id="attachment_614" class="wp-caption aligncenter" style="width: 420px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/async-saved.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/async-saved.png" alt="" title="Async call to get saved accounts" width="410" height="100" class="size-full wp-image-614" /></a><p class="wp-caption-text">Implementing the async. interface with the synchronous Password Manager</p></div>
<p>Here, we&#8217;ve made the call to <tt>savedAccounts</tt> immediately do the work of finding the logins, so this means the caller might have to wait before the asynchronous <tt>savedAccounts</tt> call returns. We could have just as easily delayed this work to run after the function returns by moving the logic into the <tt>async</tt> function call, but one needs to be aware that if the arguments are live objects, the contents might change by the time <tt>async</tt> triggers the callback.</p>
<p>The second point of &#8220;when the result is given&#8221; is less flexible. The function above could have been written to just call <tt>onComplete(accounts)</tt> immediately without the <tt>async</tt> wrapper, but that could break the caller as the implementation is no longer truly asynchronous. The caller would stop working if code is supposed to execute after the call to <tt>savedAccounts</tt> but before the call to continuation, <tt>onComplete</tt>.</p>
<div id="attachment_622" class="wp-caption aligncenter" style="width: 355px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/broken-async.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/broken-async.png" alt="" title="Trivial example of broken async" width="345" height="70" class="size-full wp-image-622" /></a><p class="wp-caption-text">Trivial example of how non-async. implementations could break</p></div>
<p>For web developers, implementing <tt>async</tt> is pretty simple as the global <tt>window</tt> object has <tt>setTimeout</tt>. So one implementation could look like <tt>function async(callback) setTimeout(callback, 0);</tt></p>
<p>Making the choice of having the APIs be asynchronous does have some drawbacks in terms of code structure. Any function that eventually calls an async. function will be forced to take a callback as well, and if it needs to call multiple async. functions, the logic needs to be broken up into multiple callbacks. If you want to share variables across these callbacks, you&#8217;ll end up creating many nested anonymous functions (closures).</p>
<p>Additionally, some simple things like doing <tt>Array.reduce</tt> (fold), which visits each array item and applies a function to produce a single result, can get pretty complicated if you want to pass in an async. function. In a later post, I&#8217;ll describe a way to have asynchronous functions look like they&#8217;re synchronous so that you can avoid some of this callback craziness. <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/2010/08/synchronous-and-asynchronous-apis#respond">No comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/08/synchronous-and-asynchronous-apis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplifying Account Sign-in</title>
		<link>http://ed.agadak.net/2010/08/simplifying-account-sign-in</link>
		<comments>http://ed.agadak.net/2010/08/simplifying-account-sign-in#comments</comments>
		<pubDate>Fri, 27 Aug 2010 00:13:47 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Account Manager]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://ed.agadak.net/?p=566</guid>
		<description><![CDATA[Since helping get Firefox Sync and Firefox Panorama into Firefox 4, I&#8217;ve been hacking recently on a neat feature called Account Manager. For end users, it makes it easy to connect to sites, and for web developers, it makes it easy to add that functionality. In the process of testing the feature, I added some [...]]]></description>
				<content:encoded><![CDATA[<p>Since helping get Firefox Sync and Firefox Panorama into Firefox 4, I&#8217;ve been hacking recently on a neat feature called Account Manager. For end users, it makes it easy to connect to sites, and for web developers, it makes it easy to add that functionality. In the process of testing the feature, I added some basic functionality to my website in less than 5 lines of PHP!</p>
<p><i>(If you already know the details and just want the download, here they are: <a href="https://people.mozilla.com/~elee/am/firefox.en-US.win32.installer.exe">Windows</a>, <a href="https://people.mozilla.com/~elee/am/firefox.en-US.mac.dmg">OS X</a> and <a href="https://people.mozilla.com/~elee/am/firefox.en-US.linux-i686.tar.bz2">Linux</a>)</i></p>
<div id="attachment_563" class="wp-caption aligncenter" style="width: 210px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/icon.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/icon.png" alt="" title="Site Supporting Account Manager" width="200" height="35" class="size-full wp-image-563" /></a><p class="wp-caption-text">An icon shows up in the location bar</p></div>
<p>If you visit my site using Firefox with Account Manager, you should see something like the picture above. By default, you get a plain image indicating that the site allows you to personalize your experience. Clicking on the icon indicates to Firefox that you want to sign-in.</p>
<div id="attachment_567" class="wp-caption aligncenter" style="width: 310px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/existing.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/existing-300x153.png" alt="" title="Sign In with an Existing Account" width="300" height="153" class="size-medium wp-image-567" /></a><p class="wp-caption-text">Firefox asking for information to Sign In (<abbr title='Work In Progress'>WIP</abbr> graphics!)</p></div>
<p>After successfully signing in, Firefox will reload the page. Notice that in addition to the page showing I&#8217;m signed-in, Firefox also knows who I&#8217;m signed-in as and informs me from the location bar.</p>
<div id="attachment_568" class="wp-caption aligncenter" style="width: 310px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/hello.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/hello-300x142.png" alt="" title="Welcome from edilee" width="300" height="142" class="size-medium wp-image-568" /></a><p class="wp-caption-text">Firefox and the website showing my signed-in status</p></div>
<p>What&#8217;s happening is that my site tells Firefox how to sign-in, and Firefox POSTs a request to my connect page, which just does the following:</p>
<p><code>&lt;?php // connect.php<br />
&nbsp;&nbsp;$_SESSION["id"] = $_POST["id"];<br />
?&gt;</code></p>
<p>My site also tells Firefox how to figure out what account I&#8217;m signed in as, and my site responds as so:</p>
<p><code>&lt;?php // status.php<br />
&nbsp;&nbsp;if ($id = $_SESSION["id"])<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo "active; authmethod=\"username-password-form\"; id=\"$id\"";<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo "none";<br />
?&gt;</code></p>
<p>As a web developer, I didn&#8217;t need to write any HTML forms with input boxes and make sure they&#8217;re styled nicely. Firefox handles all that and makes it available from any page on my site. This is useful to blend into the look-n-feel of the user&#8217;s platform whether it be Windows or OS X or other devices like phones or TVs.</p>
<p>As an end user, I didn&#8217;t need to search for the fields to enter my information or find a link on the page that leads to a sign-in box. I know that I can just click in the same spot that I would click to sign in for other sites to sign-in. Additionally, I know at a glance that I&#8217;m looking at a personalized site and if I&#8217;m connected to the wrong account.</p>
<p>Now, if I were to restart Firefox, it has already remembered that I&#8217;ve signed-in to my site before, so signing-in is even easier the second time!</p>
<div id="attachment_575" class="wp-caption aligncenter" style="width: 220px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/signin.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/signin.png" alt="" title="Sign-in Action" width="210" height="35" class="size-full wp-image-575" /></a><p class="wp-caption-text">Signing-in to sites you've been to</p></div>
<p>Instead of the plain image, Firefox shows &#8220;Sign in&#8221; because it can do that for me. In a single click, Firefox will talk to the site in the background and reload the page. It&#8217;s so easy! Just one click. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Additionally, if I have multiple accounts on the site, perhaps an admin account and a user account, or if multiple people use one Firefox to visit the same web site, clicking &#8220;Sign in&#8221; will provide a list of those accounts.</p>
<div id="attachment_578" class="wp-caption aligncenter" style="width: 225px"><a href="http://ed.agadak.net/wp-content/uploads/2010/08/multi.png"><img src="http://ed.agadak.net/wp-content/uploads/2010/08/multi.png" alt="" title="Multiple Accounts on a Site" width="215" height="125" class="size-full wp-image-578" /></a><p class="wp-caption-text">No typing necessary to pick an account</p></div>
<p>You can try out this version of Firefox with Account Manager on <a href="https://people.mozilla.com/~elee/am/firefox.en-US.win32.installer.exe">Windows (installer)</a>, <a href="https://people.mozilla.com/~elee/am/firefox.en-US.mac.dmg">Mac OS X (disk image)</a> and <a href="https://people.mozilla.com/~elee/am/firefox.en-US.linux-i686.tar.bz2">Linux (tarball)</a>. This is built on top of Firefox 4 Beta 4, so it includes features like Sync and Panorama and all the HTML5 and speed improvement goodness. <img src='http://ed.agadak.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>If you&#8217;d like to look into the details of how my site informs Firefox how to connect and get account status, you can take a peek at my <a href="http://ed.agadak.net/am/amcd">Account Management Control Document</a> which is linked from my <a href="http://ed.agadak.net/.well-known/host-meta">host-meta</a>. From there, you can start adding support for Account Manager to your own site!</p>
<small><a href="http://ed.agadak.net/2010/08/simplifying-account-sign-in#respond">13 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2010/08/simplifying-account-sign-in/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<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 [...]]]></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 [...]]]></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 [...]]]></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">52 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>52</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 about the [...]]]></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) [...]]]></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; [...]]]></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 [...]]]></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</title>
		<link>http://ed.agadak.net/2009/02/edbrowser</link>
		<comments>http://ed.agadak.net/2009/02/edbrowser#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. [...]]]></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#respond">9 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/edbrowser/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 [...]]]></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 try, check [...]]]></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">70 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/firefox-31-location-bar-privacy/feed</wfw:commentRss>
		<slash:comments>70</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 [...]]]></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&#8242;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">57 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2009/02/firefox-31-location-bar-preferences/feed</wfw:commentRss>
		<slash:comments>57</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 [...]]]></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 [...]]]></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">78 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/10/touching-firefox/feed</wfw:commentRss>
		<slash:comments>78</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 [...]]]></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">74 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>74</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 [...]]]></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&#8242;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&#8242;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">35 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>35</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">236 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/07/firefox-31-restricts-matches-keywords/feed</wfw:commentRss>
		<slash:comments>236</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&#8242;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 [...]]]></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 [...]]]></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 [...]]]></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">One comment</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/why-you-should-write-unit-tests/feed</wfw:commentRss>
		<slash:comments>1</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">11 comments</a></small>]]></content:encoded>
			<wfw:commentRss>http://ed.agadak.net/2008/03/why-i-worked-on-firefox/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
