Techcrunch

Fun facts about Wyoming

I dropped some knowledge on the Techcrunch audience today by listing these interesting facts about Wyoming in the comments of a post about regional searching habits: (These are all completely true.)

  • No state touches more other states than Wyoming.
  • Wyoming is the #1 exporter of “Montana Sucks” refrigerator magnets.
  • “Wyoming” is Native American slang for “Almost square.”
  • You can buy Wyoming-shaped cookie cutters in almost any cooking store. It is the most popular state shape for cookie cutters, second only to West Virginia.
  • When you enter Wyoming, you are given a complimentary mug. True story.
  • Wyoming was originally going to be named West Dakota.
  • Wyoming is the only state with the constitutional right to egg Colorado.
  • All of the street signs in Wyoming are printed in both English and American Sign Language.
  • The second W in WWW actually stands for Wyoming.
  • The Wyoming governor is legally obligated to pose with you for a picture if you ask politely.
  • Wyoming residents are known as “Yom-ers.”
  • Wyoming was briefly owned by Canada for a time in 1973 during the ill fated “Foreign-Exchange Territory” program. (We traded it for the Yukon.)
  • The biggest city in Wyoming is smaller than the smallest city in California.
  • Yellowstone National Park was originally contained entirely in Wyoming. The reason it now lies partially in Montana and Idaho is because it is slowly trying to escape.
  • License plates are optional in Wyoming. Trailer hitches, however, are not.
  • When you fly over Wyoming, you will notice that they have built their highways in an argyle pattern.
  • Wyoming is tied with New York and New Jersey for most y’s in its name.
  • The Wyoming Constitution was written in three languages: English, French, and Jive.
  • Out of all of the states, Wyoming is one of them.
  • Wyoming has more bronco-related festivals than any other state.
  • Residents of Wyoming are 14% more likely to have tried beef jerky than the average American.

What do you know about Wyoming? Feel free to share in the comments.

Standard
Browser Add-ons, Feed Sidebar, Mozilla, Mozilla Firefox

Feed Sidebar Update

Feed Sidebar is an extension for the Mozilla Firefox web browser that displays the items from your newsfeeds in a sidebar. It can be downloaded for free from Mozilla Add-ons.

I just uploaded an update for Feed Sidebar to Mozilla Add-ons. Changes since version 3.0.1 include:

New Features

  • Added an option to always have new items open in tabs
  • Added a button to the search bar to quickly show all items, both read and unread
  • Removed “Mark All as Read” and “Mark All as Unread” from feed and item context menus

Bug Fixes

  • Sidebar now shows the name you gave the feed, not the feed’s default title.
  • Marking a feed (or all items) as read is now much faster. In my tests, it only took about 5% of the time it used to.
  • Clicking on a feed name in the preview pane now opens the homepage, not a useless blank page.

The update can be installed from Mozilla Add-ons, or you can wait for Firefox to notify you of the available update. If you’re not using Feed Sidebar, give it a try; it has seen a lot of improvements in the past few months.

Standard
Life

Our Closing Nightmare

Note: This post has been edited to redact the name of Title Company A.

My wife and I just finished selling our house and buying a new one, and the day on which we closed on our houses unfolded in such a way that it had to be documented for the ages. This is our story…

We were scheduled to close on both the house we were selling (House A) and the house we were buying (House B) on Monday, the 30th of June.

On Friday, the 27th, we got a phone call from our realtor Jean (Realtor A). She had just found out 2 important things:

    1. Our buyer’s loan had been switched from conventional to an FHA loan, which usually requires a stricter home inspection. Because of this, we would have to install a handrail on our basement stairs by Monday morning.
    2. The title company handling the sale of our house (Title Company A) had not yet received our mortgage payoff quote from our lender (CitiBank). (A payoff quote is an exact amount that is required to payoff a mortgage in full by a specific date, and it takes into account interest and fees and whatnot so that you know exactly how much to send the lender to fulfill your loan.) Our realtor’s chosen title company (Title Company B) was responsible for requesting this quote, and they claimed that it had never taken so long (greater than 48 hours) to come in.Since you cannot sell your house without paying off your mortgage, this could potentially stop us from closing on Monday; however, she (Realtor A) offered 2 options:
      1. We could try and contact CitiBank ourselves to get a payoff quote rushed to Title Company A.
      2. We could ask our buyer to ok the purchase without the exact payoff quote, but then we’d have to leave an extra couple thousand dollars in escrow until the amount came in.

We tried option 1, and got nowhere. ‘We get calls like this every day; we can’t prioritize all of them,’ CitiBank said. But my wife got the number of someone who told her to call him at 8:30 Monday morning if the quote hadn’t yet come in. Not ideal, but not terrible. So we asked our realtor to pursue option 2 with the buyer, and we tentatively planned on closing at the scheduled time.

On Sunday, my father-in-law came over and we spent 4 hours installing a railing and posts for the basement stairs. We ensured that it was up to code, at the correct height, with sufficient clearance between the wall and the rail, etc. It was solid; if a tornado came through and tore the house from its foundation, I’m convinced that the railing we put in would still be in place. I also threw on a coat of paint in case there was an ordinance against bare pressure-treated wood being used in interior construction.

On Monday morning, the appraiser stopped by and ok’d our new railing without even touching it. He was in and out of the house in less than 90 seconds, and although we were relieved that this potential roadblock was now a non-issue, I almost asked him to at least give it a tug or drop something on it to show off how sturdy it was. I decided against it in the end. (I had even had some tools and paint on hand in case he had found a problem with any part of the railing so I could fix it before he left. Obviously, I didn’t have to use them.)

We packed up the rest of our last-minute things (food in the fridge, the air mattress we had slept on, etc.) and said our goodbyes to the house. We ate breakfast on the front steps, took a picture by the ‘Sold’ sign, and took a final walk around the house to say goodbye to the place we spent our first three years of marriage, hopefully never to set foot in it again. ‘Goodbye, house,’ we said. ‘This is the last time we’ll walk down your steps,’ we said.

We got into our vehicles (a van and a borrowed SUV+trailer, all packed to the brim with belongings), and started our drive to Title Company A to complete the sale of our house. About halfway through the 40 minute trip, it was time to call the CitiBank employee that had given us his direct number in the case of the payoff quote not coming in. It had not, so my wife called.

In hindsight, we should have been suspicious of a bank employee being so helpful. As my wife called the various numbers he had given her, no one could seem to locate this employee; his voicemail did not answer, his extension did not work, and several other CitiBank employees claimed that he wasn’t listed in their directory. After 20 minutes of calling, we decided that the Friday on which he gave out his direct number was probably his last day at CitiBank.

We arrived at Title Company A, the location of our first closing, an hour early. As we walked inside, fully prepared to meet the day and sell some real estate, we got a call from Title Company B. ‘[Title Company A] said that they won’t close on your sale unless you put 150% of your mortgage amount in escrow.’ Surely, there must have been a mistake. After confirming that we had heard Title Company B correctly, we went inside to check with the [Title Company A] agent.

Yes, apparently, they had the gall to require that 150% of the original mortgage amount be put in escrow in the absence of a payoff quote. To put this in perspective, if we had originally taken out a $135,000 mortgage, but paid off all but $100 of it, we would still have to put up $200,000 in order to close without the payoff quote, even though we had supplied our last mortgage statement. This was not the exact situation we were in, but it’s close enough to make it obvious that this was an unreasonable request.

‘We need the extra to cover any pre-payment fees there might be,’ the [Title Company A] title agent claimed. ‘Since we don’t have the quote, we don’t know about any of the fees.’ I had never heard of a lender charging $70,000 in pre-payment fees, but Title Company A assured me that it could definitely happen and was not at all out of the question and that she was not at all incompetent, as we were suspecting.

We tried to talk her off of the drugs she had obviously taken to cause her to make such a ridiculous request, but she stood firm. ‘Every title company in Minnesota would require the same thing. Oh, and since we knew that you wouldn’t have $200,000, we told the buyer’s bank not to send over his financing papers until tomorrow, since we won’t be able to close today.’ Keep in mind that this had been done before even notifying us of the 150% requirement.

You've got to be kidding me.

Here’s the current score, for those of you who skimmed the above: two closings left. Closing #2 (our purchase) is contingent on closing #1 (our sale). Title Company A says they need $200,000 in order to finish closing #1, which is for the sale of a $150,000 house. We don’t have $200,000.

My wife went outside to cry, and the agent from Title Company A, apparently over-stressed from all of this early-morning extortion, went outside to smoke.

We called our realtor, who was en-route. She started making calls, both to CitiBank, Title Company A, and Title Company B. She felt terrible, since it was the fault of Title Company B (who she had chosen) that the payoff quote had not arrived. (However, Title Company A was also at fault for making such an unreasonable request.) She got nowhere with CitiBank or Title Company A. She did, however, learn that the agent from Title Company A had only been at that job for 6 days.

We then called our other realtor (Robert), the one helping us with the purchase of our new house, to see if he had any ideas. He got the lender for our new mortgage on the phone, and our mortgage agent pulled strings and worked magic in order to get our new mortgage non-contingent on the sale of our house. He was very helpful and worked very quickly. He also recommended that we write a letter to the attorney general of Minnesota detailing the requests of Title Company A, as it bordered on being illegal.

Updated scoreboard: two closings left. Closing #2 is no longer contingent on closing #1 – at least we’ll be able to move into our new house.

We started running some numbers to determine if we could somehow come up with the $200,000 needed to close on our sale. We figured that if we put all of the amount the buyer was paying us plus most of our downpayment for our purchase into escrow with Title Company A, we could close on our sale (assuming that Title Company A could get ahold of the papers from the buyer’s lender that they had told the lender not to send). However, this would leave us with no downpayment for closing #2. On the other hand, we could just reschedule closing #1 for a few days later and go through with closing #2. This would leave us with 2 mortgages to pay and a homeless buyer who has already moved out of his apartment (and has done essentially nothing wrong).

Scoreboard: 2 closings left. Closing #2 can happen if closing #1 does not. Closing #1 can happen if we forfeit closing #2. We need an extra $30,000 in 3 hours to make both closings happen. We don’t have an extra $30,000. Oh, and did I mention that if closing #2 did not happen that day, we would be out $3000 in earnest money?

:-(

We start calling people – relatives who could lend us some money for a few days until all of the dust clears. We came up with a few possibilities, but all were tenuous due to the amount of money and lack of time.

Robert (Realtor B) called back. He had been talking with some people in the industry and found that not only do none of the other title companies in Minnesota request a ludicrous 150% of the mortgage amount for a standard closing, but that pre-payment penalties are capped at 5% of the mortgage value by Minnesota law. Recommends again that we write the attorney general.

Jean (Realtor A) heard us calling relatives and asked us how much money we would need to close on both houses (one of which she is not involved with and gets no commission from). We told her, and she generously offered to arrange for a short-term loan from her own family’s finances. We thanked her and hoped that it wouldn’t come to that.

So at this point, we have spent about 2 hours on the phone trying to get someone to be a decent human being and cut us some slack. We had accepted that we might not close that day on either house, that we might lose the perfect house we were buying, that we might not sell the house we had spent a year trying to sell, and we had each aged at least 5 years. All seemed lost. If you don’t like happy endings though, you can stop reading here.

The agent from Title Company B called and said that he got ahold of someone at CitiBank who could fax a payoff quote if we faxed them a purchase agreement, and that he had done so and was just waiting for them to get back to him, possibly in as little as 20 minutes. We told everyone, and we all sat down in the waiting area of Title Company A to wait for a phone call from Title Company B confirming the receipt of the payoff quote. And by ‘we all’, I mean my wife and I, our realtor, the guy buying our house, his realtor, and the unbelievably unhelpful agent from Title Company A. Awkward.

:-\

An hour passed, and we all went our separate ways for lunch. While we were out, our realtor called and screamed that the quote had come in and that we would close at 3PM. Happy happy joy joy. The only hitch at this point was that closing #2 was scheduled for 3:30PM, but we got lucky in that it was at a bank less than a mile away, on the same street.

:-)

So to sum it up, both closings went essentially as planned. We didn’t have to borrow $30,000, and we didn’t have to return to the house we had already said goodbye to. We moved into our new house later that day.

:-D

Lessons we learned:

  1. Always make sure that your mortgage payoff quote has been requested with plenty of time to spare.
  2. Know the laws that govern your sale. Had I known earlier about the 5% maximum prepayment penalty in Minnesota, I might have been able to talk some sense into (or threaten some legal action against) Title Company A at the very beginning of this whole ordeal.
  3. Choose a title agent that has spent enough time on the job to have worn the same outfit to work at least twice.

P.S. My wife and I both highly recommend either of our realtors and the mortgage lender that helped us through that day:

Standard
Feed Sidebar, Mozilla, Mozilla Add-ons, Mozilla Firefox

Feed Sidebar updated for Firefox 3

Firefox 3 introduced many new features for extension developers, and I decided to take advantage of some of them in order to update my Feed Sidebar extension. Version 3.0 of Feed Sidebar is now out, and these are the main features and changes I added:

  1. Look and feel: I updated all of the icons for the extension to blend in with Firefox 3’s new OS-specific look and feel. The sidebar’s toolbar uses the native theme icons, and the toolbar button is specifically designed to fit in on each of Mac OSX, Linux, and Windows. (The toolbar buttons for Windows, Mac, and Linux are shown respectively below.)

    Windows toolbar icon for Feed Sidebar Mac toolbar icon for Feed Sidebar Linux toolbar icon for Feed Sidebar

  2. Continuous updating: Feed Sidebar used to only check for feed updates when the sidebar was open; now it checks whether the sidebar is open or not (and notifies you when it finds updates). Big improvements in memory usage and performance were necessary to make this possible.
  3. Offline capabilities: the extension now caches all of your feeds, so if you go offline, you still have access to all of the data that was in the feeds, and you can read it while offline. When you go offline, Feed Sidebar goes into “Offline Mode”, and automatically opens the stored summary from the feed when you click on an item rather than trying to open the webpage the item references. This features makes use of the new online/offline events in Firefox 3.Here is a screenshot of what offline reading looks like:

  4. Places integration: when you add or delete a live bookmark in Firefox 3, Feed Sidebar will detect that via Firefox 3’s nsINavBookmarksService interface. When you add a new feed, it will instantly appear in the sidebar, and the reverse is true for deleting a feed.
  5. Caching: as soon as you start Firefox, Feed Sidebar will fill the sidebar with the feeds you were reading the last time Firefox shut down, even if you are now offline. This is made possible via the new JSON libraries that shipped with Firefox 3.

Feed Sidebar 3.0 is now available at Mozilla Add-ons.

Standard
Mozilla, Mozilla Firefox

Firefox 3

Today marks the release of Firefox 3. It’s free. It’s fast. It’s the best Web browser ever created. (Yes, even better than Netscape Navigator 9, if you can believe it.) Did I mention that it’s free?

Do yourself a favor and upgrade from whatever steaming pile of garbage you’re using to browse the Web. Because that’s what Firefox 3 makes the competition look like: steaming piles of garbage.

Download Day - English
Standard
Bug Evangelism, Mozilla, Mozilla Firefox

Mozilla Firefox Bug #237180

In this episode of “Bug Evangelism,” Chris highlights a 4-year-old bug in Firefox concerning bookmark keywords.

Mozilla Firefox lets you assign “keywords” (or “shortcuts”) to bookmarks by entering a word or phrase in the bookmark’s “keywords” field. The advantage to setting a keyword for a bookmark is that you can load the page more quickly by typing the keyword in the location bar than by finding the bookmark in your bookmarks menu or toolbar.

Assigning a keyword to a bookmark in Firefox 3

However, if you assign the same keyword to multiple bookmarks (for example, assigning “tech” to both Slashdot and TechMeme), Firefox will only open one of your bookmarks when you type the keyword in the location bar. This mis-behavior is documented in bug #237180, which was submitted in March of 2004. Some argue that you shouldn’t be able to assign the same keyword to multiple URLs, and others (like me), argue that you should be able to, and Firefox should open all bookmarks that have been assigned a given keyword. After all, isn’t that what tabs in a browser are for?

So, if, like me, you would like the ability to quickly open a set of bookmarks by typing a single word (think “stats” for a set of pages showing various statistics about your website traffic, or “news” to pop open your three favorite news sites), vote for bug #237180, and leave a comment indicating how you’d like the multiple keyword problem to be resolved.

Standard
Digg, Digg Statistical Data, Python

Tracking the top Diggers

For the past 15 months, I’ve been maintaining a list of the top 100 (and top 1000) Digg users. As Digg has become less and less relevant to my interests (and the interests of the greater tech community), I’ve decided to stop updating these lists. However, I have chosen to provide the tools I have used in case someone else has an interest in tracking Digg statistics.

Caveat: This whole thing was thrown together without any regard for coding or design conventions. Also, I can’t guarantee that you won’t be banned from Digg for using any of this information – I was, a few times. Proceed with caution.

First, the data structures. The Top Diggers lists are supported by two database tables: `digg` and `digg_users`. `digg` holds the set of front-page stories and their submitters, while `digg_users` stores aggregated information about each user in the system.

CREATE TABLE `digg` (
  `user` varchar(128) NOT NULL default '',
  `submission` varchar(255) NOT NULL default '',
           `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`submission`),
  KEY `user` (`user`)
);

CREATE TABLE `digg_users` (
  `user` varchar(128) NOT NULL default '',
  `frontpage` int(11) NOT NULL default '0',
  `dugg` int(11) NOT NULL default '0',
  `submitted` int(11) NOT NULL default '0',
  `profileViews` int(11) NOT NULL default '0',
  `frontpagestatic` int(11) NOT NULL default '0',
  `frontpagetotal` int(11) NOT NULL default '0',
  `submittedstatic` int(11) NOT NULL default '0',
  `image` varchar(128) NOT NULL default '',
  UNIQUE KEY `username` (`user`)
);

Next, some data to get you started. Here is a SQL dump of the two tables described above, including information on about 13000 Digg users (for `digg_users`), as well as the last 4 stories on the Digg homepage at the time of the last update (for `digg`). Import this data into your database in preparation for the next step.

The next step: data retrieval. The main work of updating the top 100 list is done by a Python script:

import digg

# Grab the last X pages of popular stories
digg.update_news(100)

# Update the top X profiles
digg.update_profiles(110)

Of course, this code makes no sense without the digg.* methods, downloadable here. This script also requires the excellent BeautifulSoup Python HTML parser. You will have to modify digg.py to change the database connection parameters.

For those who don’t care to read through the code, it achieves two main objectives: Find out who submitted any frontpage stories since the last update (it stops when it hits a story already in the `digg` table), and using that information, determine the new top 100 users and update their profile information.

The last step is data presentation. The information in the database tables needs to be transformed into a readable HTML file. I’ll leave this step as an exercise for the reader, but to get you started, this SQL query will get you the data you want in an easy-to-read format:

SELECT 
   user `Username`, 
   frontpagetotal `Frontpage Stories`, 
   submitted `Stories Submitted`, 
   dugg `Stories Dugg`, 
   profileViews `Profile Views`
FROM digg_users 
WHERE 
   frontpagetotal <= submitted 
ORDER BY 
   `Frontpage Stories` DESC, 
   `Stories Submitted` ASC, 
   `Stories Dugg` DESC 
LIMIT 100

So to sum up, if you want to manage your own “Top 100 Diggers” list, take the following steps:

1. Import the dump of digg data linked above.
2. Set up and run your scripts
3. Create a readable version of the data.

Have fun, and beware the Digg ban-hammer.

Standard
Life, Mahalo, Mozilla Firefox

Does Mahalo crash your Firefox?

We at Mahalo have had quite a few reports of Firefox 3 crashing when visiting Mahalo.com. (Here’s a video of it happening.) We’d love to get this fixed, but we are unable to duplicate the problem on our own machines.

If this happens to you, here is some information that you could send us to help us out:

  1. Your Operating System and Firefox versions. Example: Mac OSX 10.4.11, Firefox 3.0RC1.
  2. Whether you’re logged into Mahalo when it happens.
  3. prefs.js. This file is found in your Firefox profile directory, and it contains any changes you’ve made to Firefox’s default settings. It doesn’t contain any especially private or personally identifiable information. (Where is my Firefox profile directory?)
  4. If you can get Mahalo to crash Firefox in a clean profile (one without any personal information like passwords or an extensive browsing history), then sending us a ZIP of your entire profile directory would be extremely helpful. If the crashing happens in your regular, every-day browsing profile, please don’t send this to us if there’s any chance that it includes information that you don’t want anyone else to know, like usernames, passwords, or browsing history.

So if you’d like to help us fix this problem, send as much of this information as you can to finke@mahalo.com. Just remember: We’re all in this together. We don’t want Firefox to crash any more than you do.

Standard
Mahalo

WTB: Los Angeles Systems Engineer

Mahalo is growing, and although Dan is some sort of wizard, he has to start getting more than 20 minutes of sleep per night. We’re looking for another Los Angeles Based Systems Engineer to complement (and compliment!) him:

“You should be expert in massively scalable architectures, how MySQL and Linux interact, how MySQL and memcache interact, sharding, replication (including multiple master replication) and how to tune MySQL based on various schemas for maximum performance and availability. You are a HANDS ON implementor, a get-it-done kind of developer. The right person is a self starter with the ‘general get it factor.’ You work well with a team of like-minded engineers, and have a genuine desire for excellence.”

See Jason’s blog for instructions on applying for this Systems Engineer job in Los Angeles. Tell ’em Finke sent you.

Standard
Mahalo, Nintendo Wii

I got yer links… right here!

It’s the week of Grand Theft Auto IV at Mahalo this week. If you play video games like me, you’ll probably want to read the Grand Theft Auto 4 Cheats before you check out the Grand Theft Auto 4 Walkthrough.

If the Wii and Mario Kart is more your style, check out my brother’s blog. He updates regularly with new insights into the Wii and Wii games.

If you like to read about food, or if eating is one of your hobbies, check out Fast Food Critic. Just try not to read the nutrition information posted with each review.

And for no reason at all, here’s a video of our dog Pedro trying on his Halloween costume a few years back. You can see the Scape-o-lantern on the coffee table behind him.

Standard
Browser Add-ons, Mozilla Firefox, YouTube, YouTube Comment Snob

YouTube Comment Snob updated

YouTube Comment Snob is an extension for the Firefox Web browser that allows you to filter YouTube comments based on spelling, capitalization, and punctuation usage.

I’ve updated YouTube Comment Snob to work with YouTube’s latest redesign, as well as to add compatibility for Firefox 3. It’s available for download from the Mozilla Add-ons sandbox until it is approved by an AMO editor for mass consumption.

Standard
Mozilla Add-ons, Mozilla Firefox, Programming

Finding unused entities in your Firefox extensions

If you’ve maintained a Firefox extension for any amount of time, you know that you can accumulate unused entities as you change the UI or add/remove features. They just pile up in your .dtd and .properties files, taking up space. Here’s a bash script that will list out any entities or entries in .properties files in your extension that is no longer being used so that you can prune them out.

Usage: $ ./unused-entities.sh path/to/locale-directory/ path/to/content-directory/


#!/bin/bash

echo "Unused entities:"

for dtdfile in `ls $1*.dtd` 
do
	awk '/<!ENTITY/ {print $2}' < $dtdfile | while read line
	do
		search=`grep -R "${line}" "$2"`
		if [ "$search" == "" ]
		then
			echo "${line}";
		fi
	done;
done;

echo ""
echo "Unused properties:"

for propfile in `ls $1*.properties`
do
	awk -F "=" '{if (!($2 == "")) { print $1 }}' < $propfile | while read line
	do
		search=`grep -R "${line}" "$2"`
		if [ "$search" == "" ]
		then
			echo "${line}";
		fi
	done;
done;
Standard
Life

Decade-old drawings: Part I

I was rifling through one of my old sketch books, and I found this editorial cartoon I drew sometime in the late ’90s.

Go directly to Court; do not dominate industry.

Based on the “Do not succeed” tagline, I think I had a weaker grasp of the entire situation (and a more pro-Microsoft position) then than I do now. Little did I know then that I would eventually work for the company that got that whole ball rolling.

Standard
Mozilla Firefox, Programming, Software

7 ways to be a better developer

Over the past few months, I’ve been thinking about ways to become a better software developer, specifically in terms of Firefox extension development. I’m listing the ways that I came up with here; most of it can be generalized to the development of any end-user facing program or application, but I wrote it with extension development in mind. (I initially was going to call it “How to be a better programmer”, but as it turned out, the most important things I came up with had little or nothing to do with writing code.)

  1. Keep your ear to the ground.

    Nothing is worse than finding out weeks (or months) after the fact that there’s a bug in your software that you never knew about. Nobody e-mailed you about it, you never came across it, so what were you to do? If you had signed up for Google alerts on your name/your extension/your website’s name, you might have heard about it from someone who blogged about it (“FeatureFox is terrible. It doesn’t even detect my COBOL widgets.”), but didn’t know how to report it as a bug.

    Having Google e-mail you when your name or extension or website is mentioned in a blog post can be invaluable in getting feedback that you otherwise might not have read. (I also find it helpful to use TweetScan to sign up for an RSS feed of tweets that mention your extension. Twittering is the new blogging for many users, especially if it’s just a quick gripe about a buggy extension.)

  2. Give your users a place to talk to each other.

    If you have a popular extension, that can mean that 100,000 users or more have it installed – one person doing customer support for 100,000 users will get old fast. I’ve found that if the users have a place to talk to each other (a comment thread on the extension’s home page, a support forum), oftentimes, the more savvy users will be able to take over a portion of this support duty by helping out a new user who may be in the dark about how to use a certain feature of your extension. Additionally, several users working together may be able to uncover the roots of a bug more easily than just you and a single user working on it. (“We’re all running Linux on a Mac with both Firefox and Seamonkey installed and we’re all using a non-standard profile directory? That’s a weird coincidence…”)

  3. Start a public bug tracking system.

    If you’re not using some kind of bug tracking system (and I don’t include your e-mail inbox as a “system”), you’re not really invested in the success of your extension. Although many extensions are quick one-offs to add a new feature to Firefox, keeping track of issues reported by users is key, as 99% of software grows larger than originally anticipated. A public tracking system adds accountability, it gives other users a chance to chime in on a bug that they’ve experienced but didn’t actually report, and it frees up your inbox without casting valid bug reports by the wayside. (I recommend Google Code; it’s easy to use, has a nice issue tracker, and the support so far has been great.)

  4. Release early, release often

    The old saying “release early, release often” certainly applies here, but I’d like to warn against releasing too early. Uploading an extension to Mozilla Add-ons that only adds a non-functioning item to the Tools menu just to get it out there will do more harm than good, since users will intall it, see that it’s worthless, and uninstall it. Not only will they uninstall it, but they’ll be more hesitant to download it in the future.

    Make sure your first release is functional, even if its function is small. It’s key to get users to download it, but it’s just as key to get them to keep it installed. From that point on though, release as often as you can, since everybody loves a good upgrade.

  5. Talk to your users

    Whether it’s by blogging, Twittering, or creating a thread in a support forum, start a conversation with your users. To many Firefox users, software development is magic – the idea that a person can type up some computer code and make their browser do great new things is mysterious and wonderful, and being able to interact with that person allows them to participate in the magic. The most enthusiastic users (and sometimes the ones with the best ideas) are often those who would have no idea of how to actually write the software behind the features. (Perhaps the fact that they are unencumbered by the burden of implementation is the cause for their enthusiasm…)

  6. Be responsive

    This fits in with the previous point, but it’s more specific. Once a user has posited a question in a support forum or a blog comment, the clock starts ticking. If it takes you a week to respond about why X or Y doesn’t work in your latest release, you can bet that by the time you do answer, that user (and a dozen others who wondered the same thing) have spent the 30 seconds it takes to uninstall your extension because you didn’t take the 60 seconds to respond to them.

    On the other hand, timely responses give your users more faith in your commitment to the project. For example, check out this comment left on my blog after I quickly replied to a user about a problem with TubeStop.

  7. Participate in the development community

    Mozilla has a great community of developers, and you’re doing yourself a disservice if you’re not participating. The Mozilla IRC channels and the mozdev.org mailing lists, for example, are both great resources for connecting with fellow developers to brainstorm over weird bugs or just talk about software-related topics. I like to keep this rule in mind: there’s always someone out there who knows more than you about extension development, and more likely than not, they’re on irc.mozilla.org.

What do you think? What would you add? Anything you disagree with? Reply in the comments, and I will, of course, respond.

Standard
Browser Add-ons, Mahalo Follow

Hey, you got your VC in my XUL!

Fred Wilson is blogging about Firefox extensions today, specifically on the benefits of adding features to the content (the actual webpages) versus adding functionality to the chrome (new toolbars, sidebars, etc.).

He uses Mahalo Follow as an example to make the case for in-content data being more valuable than in-chrome, making me feel all warm and fuzzy inside. Of course, that feeling might also be due to the microwaved kiwifruit I just ate.

Standard