<?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>Less Talk, More Do &#187; Mozilla</title>
	<atom:link href="http://www.chrisfinke.com/category/mozilla/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chrisfinke.com</link>
	<description>Christopher Finke is a software engineer who builds high-traffic websites (like AOL Shopping and Mahalo.com) and develops browser add-ons (like ScribeFire, TwitterBar, FireFound, and Tapsure) to enhance the Web.</description>
	<lastBuildDate>Mon, 06 Feb 2012 21:34:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>An API for Browser Screenshots</title>
		<link>http://www.chrisfinke.com/2011/08/26/an-api-for-browser-screenshots/</link>
		<comments>http://www.chrisfinke.com/2011/08/26/an-api-for-browser-screenshots/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 12:00:37 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2192</guid>
		<description><![CDATA[A proposal to reduce the number of out-of-date screenshots on the Web.]]></description>
			<content:encoded><![CDATA[<p>What do the following screenshots all have in common?</p>
<p>From <a href="http://read.amazon.com">Amazon&#8217;s Cloud Reader Installation</a>:</p>
<p><img src="http://www.chrisfinke.com/files/2011/08/cloud-reader-install.png" alt="" title="cloud-reader-install" width="653" height="413" class="alignnone size-full wp-image-2193" /></p>
<p>From the <a href="http://www.hsl.virginia.edu/services/computing/FirefoxProxySetUp.cfm">University of Virigina&#8217;s guide to setting proxy settings in Firefox</a>:</p>
<p><img src="http://www.chrisfinke.com/files/2011/08/uv.png" alt="" title="" width="522" height="240" class="alignnone size-full wp-image-2232" /></p>
<p>From HootSuite&#8217;s <a href="http://hootsuite.com/twitterbar-becomes-hootbar">TwitterBar acquisition announcement</a>:</p>
<p><img src="http://www.chrisfinke.com/files/2011/08/hootbar-twitterbar.png" alt="" title="hootbar-twitterbar" width="541" height="346" class="alignnone size-full wp-image-2195" /></p>
<p>From <a href="http://www.tecca.com/columns/internet-explorer-tips-browser-central/">Tecca&#8217;s Guide to Internet Explorer</a>:</p>
<p><img src="http://www.chrisfinke.com/files/2011/08/tecca-ie.png" alt="" title="" width="643" height="240" class="alignnone size-full wp-image-2235" /></p>
<p>That&#8217;s right: they all include portions of browser chrome. (Chrome 13, Firefox 3, Firefox 4 for Windows, and Internet Explorer 9, I believe.)</p>
<p>What else do these screenshots have in common? They will all one day be out of date (if they aren&#8217;t already). As soon as Google modifies their extension installation dialog, or Mozilla changes their proxy settings tab, or the Firefox address bar gets a new background color, these screenshots will no longer accurately represent the interaction through which they&#8217;re meant to guide the user.</p>
<h3>A Modest Proposal</h3>
<p>I propose that this problem of stale browser screenshots could be alleviated by the creation of a Web service that exists solely to serve semi-dynamic screenshots of browser chrome. Allow me to explain with examples.</p>
<p>The Amazon screenshot above could be replaced with a call like this:</p>
<p><code>&lt;img src="http://browsers.foo/addons/installation?highlight=confirm&#038;w=460&#038;h=60" /></code></p>
<p>Or the TwitterBar image could use this URL instead:</p>
<p style="text-align: left;"><code>&lt;img src="http://browsers.foo/toolbar/?include=url-bar,icon&#038;icon=http://foo.com/hoot.png&#038;highlight=icon" /></code></p>
<p>(Note the idea of being able to merge existing images into the screenshots.)</p>
<p>The IE add-ons dialog screenshot could just as easily call this URL:</p>
<p style="text-align: left;"><code>&lt;img src="http://browsers.foo/addons/tracking-protection?browser=ie&#038;version=9&#038;highlight=easy-list" /></code></p>
<p>The API would automatically use the user&#8217;s user-agent to determine what browser, version, and platform to show in the screenshot (although these could also be specified manually, as seen in the IE example). If images from the exact current version aren&#8217;t available, the most recent version could be used instead.</p>
<p>I think that with a couple dozen high-resolution, high-quality screenshots of the various windows and dialogs in each major browser version on each major platform combined with metadata defining the position of key elements in those screenshots (e.g., the home button, the address bar, the History menu), 90%+ of the browser-specific screenshots on the Web could be replaced by calls to this service.</p>
<h3>What do you think?</h3>
<p>Is this a solution in search of a problem, or is it a legitimately useful idea?  I think it would be worth its development costs just for organizations like Mozilla or Google to use in order to populate their help documents with screenshots that would always be up to date. Tell me what you think in the comments below.</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2192" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/08/26/an-api-for-browser-screenshots/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>FireFound Shutting Down</title>
		<link>http://www.chrisfinke.com/2011/08/08/firefound-shutting-down/</link>
		<comments>http://www.chrisfinke.com/2011/08/08/firefound-shutting-down/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 14:00:37 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[Extend Firefox]]></category>
		<category><![CDATA[FireFound]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2175</guid>
		<description><![CDATA[They say all good things must come to an end.]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.firefound.com/">FireFound</a> is a Firefox add-on and companion Web service that I wrote for the <a href="http://blog.mozilla.com/extendfirefox/2009/11/30/extend-firefox-3-5-winners/">Extend Firefox 3.5 competition</a> in 2009. It allows users to track their device&#8217;s location via Firefox&#8217;s then-new <a href="http://www.mozilla.com/en-US/firefox/geolocation/">geolocation API</a>; additional features include the ability to view a device&#8217;s location history on the website and the ability to turn on a &#8220;killswitch&#8221; that would clear your browsing data (history, saved passwords, etc.) if someone opened your browser and could not provide your chosen password.  It was the first add-on of its kind, and it has been well-received.</p>
<p>That being said, FireFound will be shutting down on June 1, 2012.  I don&#8217;t have the time to keep it compatible with the newest Firefox and Firefox Mobile releases, nor can I keep up with the feature requests and bug reports.</p>
<p>FireFound users who would like to save a copy of their location data can, as always, export their data by logging in and clicking the &#8220;Download&#8221; button on the <a href="https://www.firefound.com/data">&#8220;My Data&#8221; page</a>. Any users who have pre-paid for a Premium account past June 1 will be given a prorated refund.</p>
<p>For those looking for a suitable replacement, I recommend <a href="http://preyproject.com/">Prey</a>. It&#8217;s an open-source implementation of a similar idea, but it runs at the operating system level rather than inside the browser, so it&#8217;s always on.</p>
<p style="font-style: oblique;">(If you&#8217;re interested in taking over FireFound, e-mail me at <a href="mailto:cfinke@gmail.com">cfinke@gmail.com</a>.  If you&#8217;d just like to run your own instance of FireFound, all of <a href="https://github.com/cfinke/FireFound">the code is open-source</a>.)</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2175" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/08/08/firefound-shutting-down/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>What do people type in the address bar?</title>
		<link>http://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/</link>
		<comments>http://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 14:00:31 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Mozilla Firefox for Mobile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[URL Fixer]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2104</guid>
		<description><![CDATA[An analysis of 7.5MM location bar inputs.]]></description>
			<content:encoded><![CDATA[<p>Earlier this year, I added a feature to <a href="https://addons.mozilla.org/en-US/firefox/addon/url-fixer/">URL Fixer</a> (a browser add-on that fixes errors in URLs that you type in the address bar) that collects anonymous usage stats from users who opt in in order to help improve the ways that URL Fixer corrects typos; the collected data includes domains that are typed in the URL bar as well as the locale (language/country) of the user who typed them.</p>
<p>I now have six months of data, and I&#8217;ve run some statistical analysis on it in order to share some interesting stats with you. (If I were more creative, I would make an infographic out of this information.) <em>Note that this data does not include bookmarked links or links that users click on in websites. It is strictly domains that have been typed directly into the address bar.</em></p>
<div class="snippet">
<p>Care to guess <b>the most commonly typed domain</b>? That&#8217;s right: <b>facebook.com</b>. It was typed almost three times as often as <b>the second most popular domain</b>, google.com.</p>
</div>
<div class="snippet">
<p><b>The top 10 domains</b> account for 20% of all typed domains.</p>
<table class="data" style="width: 100%;">
<tr>
<td>facebook.com</td>
<td>9%</td>
<td>twitter.com</td>
<td>1.1%</td>
<td>amazon.com</td>
<td>0.5%</td>
</tr>
<tr>
<td>google.com</td>
<td>3.3%</td>
<td>mail.google.com</td>
<td>0.6%</td>
<td>reddit.com</td>
<td>0.5%</td>
</tr>
<tr>
<td>youtube.com</td>
<td>3.3%</td>
<td>yahoo.com</td>
<td>0.6%</td>
</tr>
<tr>
<td>gmail.com</td>
<td>1.1%</td>
<td>hotmail.com</td>
<td>0.6%</td>
</tr>
</table>
</div>
<div class="snippet">
<p>The <b>most popular TLD for typed domains is .com</b>, followed by .org, .net, and .de.</p>
<p><img src="http://www.chrisfinke.com/files/2011/07/tld-popularity.png" alt="" title="TLD Popularity" width="457" height="354" align="left" style="margin-right: 20px;" /></p>
<table class="data" style="width: 280px;">
<tr>
<td>.com</td>
<td>63%</td>
</tr>
<tr>
<td>.org</td>
<td>4%</td>
</tr>
<tr>
<td>.net</td>
<td>4%</td>
</tr>
<tr>
<td>.de</td>
<td>4%</td>
</tr>
<tr>
<td>.ru</td>
<td>2%</td>
</tr>
<tr>
<td>.hu</td>
<td>1%</td>
</tr>
<tr>
<td>.fr</td>
<td>1%</td>
</tr>
<tr>
<td>.co.uk</td>
<td>1%</td>
</tr>
<tr>
<td>.br</td>
<td>1%</td>
</tr>
</table>
<p><br style="clear: both;" /></p>
</div>
<div class="snippet">
<p>The <b>top 17 <abbr title="Top-level domain">TLD</abbr> typos</b> are all variations of .com. In order of frequency, they are <b>.com\, .ocm, .con, .cmo, .copm, .xom, &#8220;.com,&#8221;, .vom, .comn, .com&#8217;, &#8220;.co,&#8221;, .comj, .coim, .cpm, .colm, .conm, and .coom</b>.</p>
</div>
<div class="snippet">
<p>The website that appears to benefit the most from users mistyping a legitimate URL is <b>faceboook.com</b> (count the o&#8217;s). It&#8217;s a scammy website set up to make you think that you have been chosen as a &#8220;Facebook Winner.&#8221; However, it is only typed once for every 7,930 times that someone correctly types <b>facebook.com</b>. (<b><a href="http://googe.com/">googe.com</a></b> and <b><a href="http://goole.com">goole.com</a></b> are runners-up in this category, albeit with much less scammy sites in place than faceboook.com.)</p>
</div>
<div class="snippet">
<p style="text-align: center;"><img src="http://www.chrisfinke.com/files/2011/07/www-vs-nowww.png" alt="" title="Leading www. vs no www." width="469" height="323" /><br /><b>49.5% of domains</b> are typed with a <b>leading &#8220;www.&#8221;</b>.</p>
</div>
<div class="snippet">
<p>The <b>most popular non-.com/.net/.org domains</b>: google.de, vkontakte.ru (a Russian social network), and google.fr.</p>
</div>
<div class="snippet">
<p>The only <b>locales where neither Google nor Facebook control the most popular domain</b> are <b>ru-RU</b> (Russia &#8211; vkontakte.ru), <b>fi-FI</b> (Finland &#8211; aapeli.com, a gaming website), <b>ko-KR</b> (Korea &#8211; fomos.kr, an e-sports website), and <b>zh-CN</b> (China &#8211; baidu.com).</p>
</div>
<div class="snippet">
<p>How does <b>domain length</b> correlate with typing frequency?</p>
<p><img src="http://www.chrisfinke.com/files/2011/07/domain-length-vs-frequency.png" alt="Domain Length vs Frequency Graph" title="Domain Length vs Frequency" width="772" height="373" /></p>
<p>(Facebook is to thank for the spike at 12 characters.)</p>
</div>
<div class="snippet">
<p>How about <b>alphabetical order</b>? Has the old trick of choosing a site name early in the alphabet in order to show up above the fold on DMOZ had any lasting effect?</p>
<p><img src="http://www.chrisfinke.com/files/2011/07/domain-alpha-vs-frequency.png" alt="" title="Domain Alphabetization vs Frequency" width="780" height="374" /></p>
<p>Facebook and Google certainly make their letters stand out, but there doesn&#8217;t appear to be a correlation between the first letter of the domain and its popularity.</p>
</div>
<div class="snippet">
<p><b>None of the domains with more than a 0.0005% share are unregistered</b>, indicating that this kind of usage data would not be very useful to a scammer or phisher looking for new domain names.</p>
</div>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2104" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>Using Google Chrome locale files in Firefox extensions, updated</title>
		<link>http://www.chrisfinke.com/2011/05/06/using-google-chrome-locale-files-in-firefox-extensions-updated/</link>
		<comments>http://www.chrisfinke.com/2011/05/06/using-google-chrome-locale-files-in-firefox-extensions-updated/#comments</comments>
		<pubDate>Fri, 06 May 2011 22:15:31 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2068</guid>
		<description><![CDATA[A generalized method that works in recent all versions of Firefox.]]></description>
			<content:encoded><![CDATA[<p>After I posted my latest revision to <a href="http://www.chrisfinke.com/2011/05/05/how-to-use-google-chrome-extension-locales-in-firefox-4-extensions">some code for using Google Chrome locale files in Firefox extensions</a>, <a href="http://www.chrisfinke.com/2011/05/05/how-to-use-google-chrome-extension-locales-in-firefox-4-extensions/#comment-288359">Wladimir Palant pointed out some shortcomings</a> with the code; I&#8217;ve made some changes to address these issues, and the new code is shown below.</p>
<p><script src="https://gist.github.com/959868.js"></script></p>
<p><a href="https://gist.github.com/959868">View the code at GitHub.</a></p>
<h3>Usage</h3>
<p>The new usage rules are as follows:</p>
<ul>
<li>Replace <code>MY_EXTENSION_NAMESPACE</code> with the namespace of your extension&#8217;s files. e.g., if your files are at <code>chrome://abcdefg/content/</code>, then replace <code>MY_EXTENSION_NAMESPACE</code> with <code>abcdefg</code>.</li>
<li>Rename <code>MY_EXTENSION_STRINGS</code> to something that won&#8217;t interfere with another extension.</li>
<li>The <code>_locales</code> directory from your Chrome extension should be in the <code>chrome/content/</code> directory of your Firefox extension (or update my code to point to wherever you put it).</li>
</ul>
<h3>Advantages</h3>
<p>This code has four advantages over the previous versions:</p>
<ol>
<li>It&#8217;s a single code block that works with all recent versions of Firefox.</li>
<li>You don&#8217;t need to include an additional library for file I/O.</li>
<li>It fixes a bug in retrieving the proper locale code in Firefox on Linux.</li>
<li>You don&#8217;t have to specify <code>&lt;em:unpack>true&lt;/em:unpack></code> in your install.rdf in Firefox 4.</li>
</ol>
<p>Thanks Wladimir for your input; this version is undoubtedly better than both previous versions. I can&#8217;t ensure that it&#8217;s the best possible solution, but it&#8217;s the best one that I&#8217;ve found so far.</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2068" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/05/06/using-google-chrome-locale-files-in-firefox-extensions-updated/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to use Google Chrome extension locales in Firefox 4 extensions</title>
		<link>http://www.chrisfinke.com/2011/05/05/how-to-use-google-chrome-extension-locales-in-firefox-4-extensions/</link>
		<comments>http://www.chrisfinke.com/2011/05/05/how-to-use-google-chrome-extension-locales-in-firefox-4-extensions/#comments</comments>
		<pubDate>Thu, 05 May 2011 19:48:16 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2052</guid>
		<description><![CDATA[An updated implementation of my API for using JSON locale files in Firefox extensions.]]></description>
			<content:encoded><![CDATA[<p><b>Update: Don&#8217;t use this code. Use this <a href="http://www.chrisfinke.com/2011/05/06/using-google-chrome-locale-files-in-firefox-extensions-updated/">new version</a>.</b></p>
<p>A few months ago, <a href="http://www.chrisfinke.com/2010/12/10/using-google-chrome-style-locales-in-firefox-extensions/">I posted a snippet of code</a> that provides an API for using locale files from Google Chrome extensions in extensions for Firefox 3.6 and older.  I&#8217;ve now added support for Firefox 4, and the updated code is shown below:</p>
<p><script src="https://gist.github.com/736538.js"></script></p>
<p><a href="https://gist.github.com/736538">View the code at GitHub.</a></p>
<p>The same usage rules still apply:</p>
<ul>
<li>Replace &#8220;MY_EXTENSION_ID&#8221; with the ID of your extension.</li>
<li>Rename &#8220;MY_EXTENSION_STRINGS&#8221; to something that won&#8217;t interfere with another extension.</li>
<li>The _locales directory from your Chrome extension should be in the chrome/content/ directory of your Firefox extension (or update my code to point to wherever you put it).</li>
<li>Include the excellent <A href="http://kb.mozillazine.org/Io.js">io.js library</a> in your extension.</li>
<li><b>NEW:</b> For Firefox 4, you&#8217;ll need to specify &lt;em:unpack>true&lt;/em:unpack> in your install.rdf.</li>
</ul>
<p>I&#8217;ve been using this solution in ScribeFire in Firefox 3.5, 3.6, and 4.0 (and 5 and 6) for a while now with no complaints.  Let me know if you implement this in your extension, and I&#8217;d love any feedback you have on the code or its performance.</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2052" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/05/05/how-to-use-google-chrome-extension-locales-in-firefox-4-extensions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Discontinuing Slashdotter</title>
		<link>http://www.chrisfinke.com/2011/04/19/discontinuing-slashdotter/</link>
		<comments>http://www.chrisfinke.com/2011/04/19/discontinuing-slashdotter/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 16:35:12 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Add-ons]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Slashdot]]></category>
		<category><![CDATA[Slashdotter]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=2038</guid>
		<description><![CDATA[In which I discontinue Slashdotter.]]></description>
			<content:encoded><![CDATA[<p><a href="https://addons.mozilla.org/en-US/firefox/addon/slashdotter/">Slashdotter</a> is an extension I wrote in 2006 in order to customize the <a href="http://slashdot.org/">Slashdot</a> experience.  It was <a href="http://news.slashdot.org/story/06/03/28/1855252/Slashdot-Firefox-Extension">covered on Slashdot</a> and was received favorably by the Slashdot audience, but I don&#8217;t have the time anymore to update it every time Slashdot changes their UI or HTML.</p>
<p>If you&#8217;d like to take over development, <a href="mailto:cfinke@gmail.com">let me know</a>, and I&#8217;ll transfer the Slashdotter add-on to you on <a href="http://addons.mozilla.org/">AMO</a>; if nobody volunteers, I&#8217;ll be removing the add-on from AMO in a couple of weeks.  (Like all of my browser extensions, <a href="https://github.com/cfinke/Slashdotter">Slashdotter&#8217;s source code</a> is open source, so you could still develop your own version if you want.)</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2038" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/04/19/discontinuing-slashdotter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TwitterBar is now HootBar</title>
		<link>http://www.chrisfinke.com/2011/04/06/twitterbar-is-now-hootbar/</link>
		<comments>http://www.chrisfinke.com/2011/04/06/twitterbar-is-now-hootbar/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 15:44:48 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[HootBar]]></category>
		<category><![CDATA[HootSuite]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[TwitterBar]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=1971</guid>
		<description><![CDATA[In which I sell out a little bit.]]></description>
			<content:encoded><![CDATA[<p><a href="http://hootsuite.com/twitterbar-becomes-hootbar" style="display: block; text-align: center; border: 0;"><img src="http://www.chrisfinke.com/files/2011/04/twitterbar-hootbar.jpg" alt="" title="" width="539" height="274" class="alignnone size-full wp-image-1988" /></a></p>
<p>My Firefox add-on <a href="https://addons.mozilla.org/en-US/firefox/addon/4664">TwitterBar</a>, the world&#8217;s most popular Twitter client for Firefox&#8217;s URL bar, has been acquired by <a href="http://hootsuite.com/">HootSuite</a> and has been renamed <a href="http://hootsuite.com/hootbar">&#8220;HootBar.&#8221;</a></p>
<p>HootBar users now have access to great HootSuite features like the Hootlet: instead of typing &#8220;&#8211;post&#8221; at the end of your tweet, if you type &#8220;&#8211;hoot&#8221;, you can schedule your tweet for later, send your message to networks besides Twitter (like Facebook or LinkedIn), and track stats for link clicks.</p>
<p>The rebranded version of TwitterBar is still awaiting approval by Mozilla, but you can <a href="https://addons.mozilla.org/en-US/firefox/addon/hootbar/versions/#version-4.0">install it manually here</a>. More information on the TwitterBar-to-HootBar change is available at <a href="http://hootsuite.com/twitterbar-becomes-hootbar">HootSuite&#8217;s &#8220;TwitterBar to HootBar&#8221; transition page.</a></p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1971" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/04/06/twitterbar-is-now-hootbar/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Announcing Typo.js: Client-side JavaScript Spellchecking</title>
		<link>http://www.chrisfinke.com/2011/03/31/announcing-typo-js-client-side-javascript-spellchecking/</link>
		<comments>http://www.chrisfinke.com/2011/03/31/announcing-typo-js-client-side-javascript-spellchecking/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 13:00:52 +0000</pubDate>
		<dc:creator>Christopher Finke</dc:creator>
				<category><![CDATA[Browser Add-ons]]></category>
		<category><![CDATA[Comment Snob]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Mozilla Firefox]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[YouTube Comment Snob]]></category>

		<guid isPermaLink="false">http://www.chrisfinke.com/?p=1978</guid>
		<description><![CDATA[In which I spend lots of time on something that will eventually be made obsolete by a Chrome extension API.]]></description>
			<content:encoded><![CDATA[<p>When I first ported <a href="/addons/youtube-comment-snob">YouTube Comment Snob</a> to Chrome, Chrome&#8217;s lack of a spellchecking API for extensions meant that I would be unable to implement Comment Snob&#8217;s most popular and distinguishing feature: the ability to filter out comments based on spelling mistakes.  That, my friend, is about to change.</p>
<p>I&#8217;ve finished work on the first version of a client-side spellchecker written entirely in JavaScript, and I&#8217;m calling it <a href="https://github.com/cfinke/Typo.js">Typo.js</a>. Its express purpose is to allow Chrome extensions to perform spellchecking, although there&#8217;s no reason it wouldn&#8217;t work in other JavaScript environments. (Don&#8217;t use it for Firefox extensions though; use <a href="https://developer.mozilla.org/en/Using_spell_checking_in_XUL">Firefox&#8217;s native spellchecking API.</a>)</p>
<h2>How does it work?</h2>
<p>Typo.js uses <a href="http://hunspell.sourceforge.net/">Hunspell</a>-style dictionaries &#8211; the same ones used in the spellcheckers of OpenOffice.org and Firefox.  (Typo.js ships with the latest American English dictionary, but you could add any number of other dictionary files to it yourself.)  You initialize a Typo.js instance in one of two ways:</p>
<h3>Method #1</h3>
<pre>
var dictionary = new Typo("en_US");
</pre>
<p>This tells Typo.js to load the dictionary represented by two files in the <code>dictionaries/en_US/</code> directory: en_US.aff and en_US.dic.  The .aff file is an affix file: a list of rules for creating multiple forms of a word by adding prefixes and suffixes. The .dic file is the dictionary file: a list of root words and the affix rules that apply to them.  Typo parses these files and generates a complete dictionary by applying the applicable affix rules to the list of root words.</p>
<h3>Method #2</h3>
<pre>
var dictionary = new Typo("en_US", affData, dicData);
</pre>
<p>With this initialization method, you supply the data from the affix and dictionary files.  This method is preferable if you wish to change the location of the affix and dictionary files or if you are using Typo.js in an environment other than a Chrome extension, such as in a webpage or in a server-side JavaScript environment.</p>
<p>Once you&#8217;ve initialized a Typo instance, you can use it to check whether a word is misspelled:</p>
<pre>
var is_correct_spelling = dictionary.check("mispelled");
</pre>
<h2>Customization</h2>
<p>Depending on your needs, you can configure Typo.js to perform word lookups in one of two ways:</p>
<ol>
<li>hash: Stores the dictionary words as the keys of a hash and does a key existence check to determine whether a word is spelled correctly. Lookups are very fast, but this method uses more memory.</li>
<li>binary search: Concatenates dictionary words of identical length into sets of long strings and uses binary search in these strings to check whether a word exists in the dictionary. It uses less memory than the hash implementation, but lookups are slower.</li>
</ol>
<p>See <a href="http://ejohn.org/blog/revised-javascript-dictionary-search/">this blog post by John Resig</a> for a more detailed exploration of possible dictionary representations in JavaScript.</p>
<h2>Practice vs. Theory</h2>
<p>Typo.js is already in use in my <a href="https://chrome.google.com/webstore/detail/gfbnmebccmipejnnlcaenkhfhniaielg">Comment Snob</a> extension.  You can install it today to experience Typo.js in action, filtering comments on YouTube based on the number of spelling mistakes in each one.</p>
<h2>What&#8217;s next for Typo.js?</h2>
<p>The next step is adding support for returning spelling suggestions; right now, all Typo.js can do is tell you whether a word is spelled correctly or not. It also needs to support Hunspell&#8217;s compound word rules.  These are the rules that a spellchecker uses to determine whether words like &#8220;100th&#8221;, &#8220;101st&#8221;, &#8220;102th&#8221; are correct spellings (yes, yes, and no, for those of you keeping track) since it would be impossible to precompute a list of all possible words of these forms.</p>
<p>The Typo.js code is available on <a href="https://github.com/cfinke/Typo.js">GitHub</a>. I welcome any and all suggestions or code contributions.</p>
 <img src="http://www.chrisfinke.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1978" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://www.chrisfinke.com/2011/03/31/announcing-typo-js-client-side-javascript-spellchecking/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

