Monthly Archives: February 2010

Removing Features

Applications have a natural tendency to grow. If you don’t pay attention, what started out as an elegant, simple application that perfectly solves a single problem, can quickly turn into a huge behemoth of an application that solves a ton of problems, but solves all of them poorly. Features are always more complex than you think, and many small features quickly add up to one large mess.

This is the kind of application you want:

Swiss Army Knife

If you are not careful, this1 is the kind of application you will end up with:

Novelty Knife

Constant vigilance is the price you pay for an elegant application.

This means you have to learn to say «no». Your current customers will ask you for a feature they want. Potential customers will tell you that if you add just one specific feature, they’ll buy the app. You can’t be everything for everyone. You have to let some people be customers of your competitors.

Kathy Sierra puts it like this:

Each of our books, for example, covers fewer topics than its closest competitors. Yet we outsell all of them, and part of that is precisely because we cover less. Our readers learn fewer topics, but nail the important ones, and it turned out that for most people, nailing it was more important than reading it. Our readers put their trust in us to work hard at finding and focusing on what really matters, and brutally cutting the cognitive overload that comes with the rest, and we try not to let them down.

Be brave. And besides, continuing to pile on new features eventually leads to an endless downhill slide toward poor usability and maintenance. A negative spiral of incremental improvements. Fighting and clawing for market share by competing solely on features is an unhealthy, unsustainable, and unfun way to live.

Steven Frank points out:

Since the days of the Apple ][, C64, and Atari 400, all we’ve done is add, add, add. Add more features to sell more computers. We’ve never stopped to take anything away.

You may be thinking that you’re creating a product for power users, so it’s okay to just keep adding features, because people will figure it out. But it’s not okay. Brent Simmons writes:

Here’s the thing about the power users and developers I know: they use a lot of apps. They manage a lot of complexity already. They often have a few powerful apps (Xcode, Photoshop, Final Cut, Excel, whatever) that they use to get their work done.

They’re not sitting around wishing for more complexity. Quite the opposite! But they do wish that some apps fit them better. And in many cases they wish for less complexity.

Of course, if you do ask power users what they want, and then implement every feature they can come up with, you’ll end up with this:

The Open Office Mouse

So saying no is good for you, and good for your customers.

But what if you’ve already said yes?

Eventually, you will find yourself in a position where your application contains features it should not. Even if you’ve been vigilant, this will happen. There are various reasons.

Technology Becomes Outdated

When you wrote your application, it made perfect sense to add support for FTP syncing, add a Java bridge or refactor your application to be an OpenDoc container. But the world changes, and a year or two later, what looked like a good idea at the time has now become useless, has turned out to cause huge support problems, or has turned out to be unreliable. Or perhaps most people simply didn’t care, and the feature has made the application more complex without helping anyone.

It Was Free

If your backend supports a feature, it’s often tempting to implement it, because to you, it’s essentially free. Months later, you will find out that while it didn’t cost you anything, it wasn’t free to your users. They now have to deal with a feature they may not care about, and all it does is get in their way. Jason Alderman provides an example:

Our devs whipped up a framework early on that supports categories, subcategories, AND tagging. (…) Tags just adds a layer of complexity to so many screens of the UI, that it’s hard to design a good, consistent user experience.

If the work already went into implementing a feature, it’s hard to argue that it should not be exposed to users. Even if you’re the only one working on the project, the sunk cost fallacy may have tempted you to expose a useless or potentially harmful feature in your user interface.

Mistakes Were Made

It happens. Perhaps it’s a feature the CEO wanted, and there was no way to say «no». Perhaps the people responsible just didn’t think it through.

You’re Creating a Simpler Version

It’s also possible that your application is great as it is, but that there is demand for a simpler version. Maybe you’re creating an iPad version of your desktop app and need to decide which features are not going to make it, or you’re trying to create a new consumer application out of your existing pro application.

What Now?

Regardless of how you got there, eventually you’ll be in a position where you have features in your application that don’t really (or really don’t) belong there. The most obvious solution is to simply keep them. Sometimes, this is a valid solution. Perhaps the features work, they are easy to support, and they don’t bother the people who don’t need them. In that case, it may be okay to just leave them in.

But a more likely scenario is that it’s not okay. Outdated features that most of your users don’t care about are broken windows of user experience design. John Gruber explains the «broken windows» theory:

It’s similar to the «broken windows» theory of urban decay, which holds that if a single window is left unrepaired in a building, in fairly short order, the remaining windows in the building will be broken. Fixing windows as soon as they are broken sends a message: that vandalism will not be tolerated. But not fixing windows also sends a message: that vandalism is acceptable. Worse, once a problem such as vandalism starts, if left unchecked, it flourishes.

If you leave features in your application just because half a dozen people actually use them, you’ll end up with Microsoft Word. Most people only use a small percentage of all features in Word. Unfortunately, most people use a different small percentage of all features in Word. Even the most unpopular, most broken feature is used by somebody. Nadyne Richmond, a user experience researcher in the Macintosh Business Unit at Microsoft, explains it like this:

There are people who insist that Word 5.1 was the pinnacle of word processors, and everything that has been done since then has been nothing more than bloat. They tell us that we should update it to run under OS X (and now they want it as a Universal Binary). Oh, but while we’re in there updating the code, could we please add their ten favourite features? As the ever-insightful Rick [Schaut] points out, ‘by the time you add up all the «Plus’s» you come to something that’s not all that far away from Word 2004, which is how we got here in the first place’.

Presumably, somebody needed Word 5.1 «Plus Web Search», so Microsoft went ahead and added the feature:

Web Search in Office

To me, this is a cautionary tale. Perhaps Microsoft is in a position where they absolutely have to «add up all the Plus’s»2. But you’re not. You don’t have to try to please everybody and eventually create an application that is liked by nobody. In fact, since your users are in all likelihood in a situation where they can switch applications easily, and since they probably are not locked in by the need to open a specific file format in its native application, it might be a really bad idea for you to go down the «simply add up all the requested features» route of application design.

So eventually, the best course of action is to get rid of some features that just don’t work out anymore.

So how do you go about it without causing a revolt amongst your users? Here are some ideas.

Get Usage Data.

Let your users opt in to sending you usage data.

Usage Statistics

This is probably the best solution, since it removes the «human factor». People often don’t consciously know how exactly they use an application. Getting objective usage data tells you exactly what features you can cut.

If you can’t get objective data, the second-best solution is to ask. Manton Reece has an interesting blog post explaining how he asked his users for this type of feedback. In a follow-up, he writes about his eventual decision:

I eventually did remove a feature, and the survey to customers served as a nice sanity check that the feature wasn’t heavily used. The interesting part, to me, is that the feature I removed was the entire 1.0 product for Wii Transfer. Literally everything that 1.0 did is now gone.

It’s been two weeks so far without any complaints. I like to think that it removes a distraction from the app — one less place in the app that could lead the customer down the wrong path

Inform Your Users About Your Plans. Be Transparent.

Before removing features, tell your users that you plan to do so, and why you’ve decided to remove features. Brent Simmons shows how this is done. He writes:

So one thing I like doing is getting as much feedback on the possibly-to-delete list as I can. I don’t put things up to a vote, because a vote doesn’t tell me the why of anything, and that matters more than just numbers.

I’ve learned a few specific things in the past few hours that I didn’t know: for instance, that people actually do use the HTML Archive feature. That people don’t use the automatic enclosure downloading feature very much, but they do like the possibility of manual downloading. (I didn’t, and don’t, intend to remove manual downloading of enclosures.)

There’s also a great blog post by Adobe’s John Nack, where he explains why removing features is a good idea, and lists a number of features Adobe was going to remove from Photoshop.

Provide Alternative Solutions.

When the people at Bohemian Coding removed the bitmap features from their application DrawIt, they contacted Flying Meat’s Gus Mueller. They were able to work out a deal, and every DrawIt customer got a free copy of Flying Meat’s image editor Acorn.

Keep the Old Version Available (For a Time).

When Apple rewrote iMovie, they kept the older, more feature-complete version of the application online until they felt that the new version was mature enough, thus giving people who were not satisfied with the update a way to keep using the old version, at least for a time. This allowed Apple to add features users needed, and it allowed users to take their time getting comfortable with the update.

Do What You Have to Do. Suck It Up.

Despite of the generous offer of giving Acorn to each owner of DrawIt, Bohemian Coding’s Pieter Omvlee writes that reaction was not entirely positive:

The feedback I got was mixed. Some people were happy with the improvements I made to the vector part in the same update and said they never used the bitmap part anyway. Some complained because they only used the bitmap part, but I could point them to Acorn. Lastly, I received some complaints from people who really liked the combination of both vector and bitmap in one app. Fortunately, only very few people felt that way. In general, it all went well, and I think that’s for a big part thanks to Gus Mueller’s generous offer.

You can’t please all of the people all of the time. Sometimes, you have to make a few people really unhappy in order to make everyone else a little bit happier. Don’t let angry customers dictate your application design – the application isn’t as important to them as it is to you. Keeping your application healthy is your responsibility.

Your customers can switch to a different application if they don’t like yours anymore. You can’t. Your customers don’t know how hard it is to support a feature. You do. Your customers don’t know how popular a feature really is. You probably have a pretty good idea. Your customers likely don’t even really know what features they want, even if they tell you that they do. It’s your job to figure out how to grow – or shrink – your application properly and responsibly. It’s your job to make the hard decisions and cut the features that did not work out.

Conclusion

As a programmer or designer, it’s easy to become a bit too invested in your application’s feature set; accepting that something you’ve put a lot of work in needs to be changed or removed can be hard. But sometimes, it has to be done, and if done carefully, most of your users will appreciate your decision.

Further Reading

I want to thank everyone who helped write this article. Pieter Omvlee from Bohemian Coding, Max Steenbergen who provided awesome feedback on an earlier draft, Jason Alderman, Fabien Marry, Thibaut Sailly, Henning Hoefer, and Andreas Hartl.


  1. If you really want one of these, you can buy one here. Wenger also sells the knife in the first picture, which is the specific model currently used by the Swiss Army. Turns out this is no longer true. Kenneth Ballenegger informs me that the army has switched to a different model in 2009, long after I finished my own military service. ?

  2. And maybe Photoshop users are truly craving for wet paints, but it’s also possible that Adobe would be better off investing that time into making Photoshop less of a UI mess?

If you require a short url to link to this article, please use ignco.de/38

Chrome 4 Supports Greasemonkey Userscripts Without an Extension [Userscripts]

The Greasemonkey extension has long been one of our favorite tools for Firefox, allowing us to bend the web to our will with light and simple scripts written in JavaScript. Now most Greasemonkey scripts work in Chrome, no extension required.

In fact, when you install a userscript in Chrome, it actually installs as though it’s a regular old extension. That means, as the original Greasemonkey developer and Google employee Aaron Boodman points out on the official Chromium Blog, that Chrome users now have roughly 40,000 more extensions to add to the list.

Some scripts won’t work with Chrome just yet because of differences between Firefox and Chrome, but it looks like that number is somewhere around 15-20%. Not bad, Chrome. It’s getting more and more tempting to consider Chrome as a viable Firefox alternative every day.

The improved support for userscripts should work on any Chrome version over 4, which includes the stable version on Windows and both of the beta versions on OS X and Linux. If you'd like to try out a few good userscripts—for Chrome or Firefox—our list of the top 10 Greasemonkey user scripts is a good place to get started.

40,000 More Extensions! [Chromium Blog]






“You’ve Got Waves”: How to Get Google Wave Notifications [Notifications]

Once you're active in Google Wave, you want to know when something new happens there—even if you don't have Wave open in your browser. These notifier tools monitor your Wave inbox, letting you know you've got new and changed waves.

The following is an excerpt from the all-new Chapter 9 of The Complete Guide to Google Wave. Got feedback? Let me know in the comments and help write the first book on Wave!

Google Wave Add-on for Firefox

If you use Mozilla’s popular web browser, Firefox, the Google Wave Add-on puts a Wave icon on the status bar at the bottom of your browser window. That icon displays alerts when you’ve got new, unread waves and keeps a running total of how many unread changes you’ve got in your inbox. Click on the icon to open Wave in a new tab for quick access. Set your Wave login information in the extension’s Options dialog, as shown in Figure 9-1.

Figure 9-1. The Google Wave Add-on for Firefox adds a Wave icon on the status bar of your web browser, which displays the number of unread and changed waves in your inbox.

Download the Google Wave Add-on for Firefox at addons.mozilla.org/en-US/firefox/addon/14973. As of writing, the extension is listed as “experimental,” which means it hasn’t been reviewed by the Mozilla Add-ons editors. Check the box next to “Let me install this experimental add-on” to download and install it in your copy of Firefox.

Googsystray for Windows and Linux

If you’d rather get Wave notifications outside of your browser, Googsystray is a system tray utility for Windows and Linux that plays a sound when new waves arrive and displays unread wave notifications in the corner of your screen, as shown in Figure 9-2.

Figure 9-2. Googsystray plays an alert sound and displays a notification of new and changed waves in your system tray.

Click a Wave notification to open the unread wave directly in your browser. Googsystray is particularly useful if you’re an all-around Google lover, as it also offers Gmail, Google Voice, Google Calendar, and Google Reader notifications. Download Googsystray for free from googsystray.sourceforge.net/.

Google Wave Notifier for Windows

Don’t need all the bells, whistles, and multi-service support of Googsystray? The aptly named Google Wave Notifier is a Windows system tray utility that, like the others, alerts you of new and changed waves with unread content in a pop-up box and icon, as shown in Figure 9-3.

Figure 9-3. The Google Wave Notifier adds a Wave icon in the Windows system tray that displays the total number of new and unread waves in your inbox.

Like Googsystray, you can click on an alert to open the new wave directly. Download the Google Wave Notifier for free from wave-notify.sourceforge.net/.

Waveboard with Growl Notifications for Mac OS X

Mac users who want Wave notifications should try Waveboard. Waveboard is a free, standalone Wave client that adds a Waveboard icon with your total of unread waves on Mac OS X’s menu bar and Dock. Waveboard also provides pop-up Growl notifications, as shown in Figure 9-4.

Figure 9-4. Waveboard for Mac OS X displays an icon with the total of unread waves on the menu bar and Dock, as well as Growl notifications.

To get Growl notifications with Waveboard, download and install Growl for your Mac from growl.info/. Waveboard is also a free download from www.getwaveboard.com/.

XMPP Lite for Google Talk and AIM

Unlike the other notifier apps and add-ons listed here, the XMPP Lite bot is a solution that you put to work directly inside the specific waves you want to receive updates from. If you add the XMPP Lite bot to a wave and then click the subscribe button in the blip it adds, you’ll receive IM updates when that wave changes.

Figure 9-5. The XMPP Lite bot adds a blip with a Subscribe and Unsubscribe button to a wave. Click the Subscribe button to opt into instant messenger notifications of wave activity.

Gotcha: While all the other notifiers mentioned here let you know if you have ANY changed or unread waves in your inbox at all, XMPP Lite only notifies you about the specific waves you’ve added it to, and pressed the Subscribe button in.

XMPP Lite is one of this book’s featured bots. For details on how to use it, head back to the “XMPP Lite (wave-xmpp@appspot.com)” section in Chapter 8.


Like the rest of the book, this was co-written by Adam Pash and myself (in this section, mostly Adam, bless his soul). We’re working furiously on getting The Complete Guide to Google Wave's first edition—a step up from the Preview PDF—ready for print publication. What should we include or exclude? Let us know in the comments, and thanks in advance.






Hacking the Kindle DX to add Bluetooth

bluetoothkindle.jpg

Griffin I’Net has a nice story with pictures about hacking a Kindle DX to add Bluetooth support! [via RuutAckses]

Read more | Permalink | Comments |

Read more articles in hacks |

Digg this!

How-To: Create a Chiptune in GarageBand

Chiptunes are everywhere, and if you’ve been intrigued by them, this article will help you create your very own out of just about any song.

Chiptunes are traditionally created using sound chips from old computer systems and game consoles. Some of the best examples of chip music can be made using Commodore 64s, GameBoys and the original NES. Since these pieces of hardware could only generate sounds and tones over a few channels, there is difficulty in creating complex songs. Along with the fact that this kind of circuit bending is not for a novice like myself and the learning curve tends to be very high. I wanted to find a way to accomplish this without spending days learning and researching software or hardware.

I am not trying to devalue chiptunes in any way, it definitely is an art form. I just want to present an alternative for those that are curious in creating their own masterpiece. So if we’re not going to need hardware and complicated software, what are we going to use? Using GarageBand ‘09, a plugin and a MIDI file, you can convert a song you already know and love into a chiptune.

First thing is to find a MIDI version of a song you want to create. I just went to Google and searched for “Muse midi” and quickly found a Muse song that would work. Save the MIDI file on your computer for later. Now we need to download the Magical 8-bit Plugin from the YMCK website and put the magical8bitPlug.component file in the /Libraries/Audio/Plug-ins/Component folder.

  1. Startup GarageBand and start new project by selecting the Piano. This will create a single track project that we can import our MIDI file into.
  2. Now drag your MIDI file into GarageBand and you will see it create new tracks for each voice in the MIDI file.
  3. Double-click a track to change the instrument from the Piano to our chiptune instrument.
  4. Click the Edit tab and then click the drop-down where it says “Piano” and select “Magical8bitPlug”
  5. Now if you want to tweak that tracks sound, click the Plugin logo and play around with the settings.

  6. This needs to be setup for every track except the drums. Use your creativity and change the track sounds to match the instrument they’re representing. The drum track needs some special attention and since the plugin won’t work for this, I did the following.
  7. Change the drum track sound to the Hip Hop drum Kit.
  8. Add a new effect to this track. Use the Bitcrusher effect and select whatever settings sound good to you. I used Wave Deconstruction.

Now you may have to tweak the volume levels on each track to your liking but for the most part, you are done. Export an MP3 and amaze your friends! Well maybe not if they read this article too, but with this knowledge you could create your own music and use the chiptune sounds as your instruments. I know this is not as hardcore as true circuit bending, so don’t send me angry emails. It’s more of a fun little project to please your creative side. Share your own creations with us through the comments and check out my final results in the audio clip below.

PDFMyURL Saves Web Sites as PDF Files [PDF]

Saving something as a PDF file is a great way to preserve it for future reference or for sharing with others, without risking the site changing before you look at it again. PDFMyURL makes it easy to convert sites to PDF.

Point PDFMyURL at a website URL and it will convert the site into a PDF document. Not only can you do a simple conversion just by plugging in a URL but you can also modify the PDF with a wide variety of flags—see the advanced menu for a full list—that let you set the page orientation and size, header information, print orientation, and more. PDFMyURL also has a bookmarklet you can drag to your toolbar for easy access to the PDF creation service.

PDFMyURL is a free service and doesn’t watermark or otherwise alter the site you are converting to PDF. Have a favorite tool for PDF conversion or a bookmarklet that makes life easier? Let’s hear about it in the comments.






Fact and Fiction: The Truth About Browser Cookies [Privacy]

Browser cookies are one of those technical bits of web browsing that almost everyone has some awareness of. They’re also probably one of the most misunderstood aspects of browsing. Today we’re here to clear up the confusion.

Photo by esti.

When it comes to browser cookies, most users have a lot of misconceptions about what they do. Here’s a closer look at exactly what a browser cookie is, what it isn’t, and what it’s really used for.

Note: If you’re serious about your online privacy, check out our guide on how to really browse without leaving a trace, where we cover much more than just cookies.

What Are Cookies Anyway?

Cookies are nothing more than tiny bits of text stored on your PC by your web browser, containing information set by web sites such as your session token, user preferences, or anything else that the web site needs to keep track of you from one request to the next. Once the web site has asked your browser to set the cookie, the next time your browser opens a new request to the server—clicking a link to a page, adding an item to your cart, or even loading an image—your browser will send that cookie back to the web site that set the cookie.

Cookies exist because the underlying HTTP protocol is stateless—each request from your browser is completely separate from the next one, so the server needs a way to keep track of what request belongs to what visitor. By storing a small bit of information in a cookie, the web site can determine that your page view belongs to your user account.

There are two "categories" of cookies: either first-party or third-party cookies. (Although there's actually no technical difference between the two.) First-party cookies are those cookies that belong to sites you actually visited in your browser, while third-party cookies, also known as tracking cookies, are generated from a Javascript include on the page—generally from third-party advertising web sites.

Myth: Cookies Spy On You and Track Everything You Are Doing

As we’ve already learned, the contents of cookies are set by the web site that you visited, so unless you’ve given your information to a web site, there’s no way that cookies are going to contain personal information unless you’ve given that information to the site already.

Most cookies are as simple as a session token, but sometimes they contain your login credentials, usually encrypted or hashed in some format—but since cookies are only sent back to the same site that originated them, even if cookies contained personal information, it is not going to be shared with every site you visit.

Myth: Cookies Are Viruses or Spyware and Create Spam and Popups

Cookies are nothing more than text files and could not be executed even if you track down the hidden folder they are usually located in, but a surprising amount of people believe that cookies contain viruses or spyware. The reason for this, other than misconceptions fueled by clueless TV writers, is probably because most anti-spyware applications catch tracking cookies when you do a scan. Why? Cookies can be used by advertising web sites to track the sites you visit (assuming the sites are using the same advertising network—see more below), so most anti-spyware applications help you remove them.

The other myth is that cookies are responsible for spam and create pop-up advertisements. While it’s true that an advertiser can use cookies to track which pop-up ads you’ve seen, the cookies have nothing to do with the advertisement in the first place.

Fact: Spyware and Viruses Can Read Your Cookies, but So What?

Another common misconception is that cookies are bad because if you have a virus or spyware infection, they can read your cookies to find out more information about you. This concept is not only overly paranoid, but completely illogical to boot—if your PC is already infected with a virus, you've got a lot more to worry about than a virus "reading" your cookies, since it has complete control over your computer, and your information at that point. You're better off spending your energy learning about the best ways to keep your PC secure.

Fact: Cookies Are Required for Logging Into Most Sites

The vast majority of web sites require cookies to be enabled in order to create an account and keep yourself logged in, so if you disable cookies in your browser, a large portion of the web is going to be broken. There are some exceptions, of course—you'll probably notice that many shopping web sites embed the session token into the URL, but it's not something that most sites are going to implement. These cookies are considered first-party cookies, because they are set by the web site you purposely visited.

Fact: Cookies are Used by Advertisers to Track Sites You Visit

Because cookies are always sent back to the site that originated them, an advertiser’s cookie will be sent back to them from every web site you visit that is also using that same advertiser. This allows the advertiser to track the sites you visit, and send targeted advertising based on the types of sites that you visit.

This does not mean that advertisers can read the cookies from the web site you are visiting—they can only read their own cookies, but because the advertising Javascript is embedded in the page, they will know the URL you are visiting. These cookies are considered third-party cookies, because they are not set by the actual page you are visiting, and they can generally be blocked without causing any serious problems.

If this type of tracking keeps you up at night, consider that an advertiser can already track the sites you visit based a combination of your IP address, browser version, location, and any number of other factors—so getting rid of the tracking cookies only eliminates a small piece of the puzzle when it comes to tracking your behavior online. There are also only a few advertisers big enough to really track you across the majority of web sites—and one has to assume Google already knows everything else you're doing online.

Fact: Deleting or Blocking Cookies Can Cause More Annoying Ads

If you've ever visited a web site that sometimes, but not always, prevents you from reading the article until you click through an interstitial advertisement that takes over the entire page—you might wonder what logic dictates who sees the ads and when.

Here’s how it works: interstitial ads pay web sites very lucrative rates to allow them to take over the entire page, but since most web site owners know that they are annoying, they are usually rate-limited so they aren’t seen too often by the same person. Once you’ve seen the ad a single time, the advertiser sets a cookie on your PC to make certain that you don’t see the same annoying ad again for a while. If you are deleting your cookies on a regular basis, you’re probably also seeing a lot more of these interstitial ads than everybody else. That is, of course, if you don’t have an adblocker installed.

Fact: Disabling Cookies Doesn’t Matter If You Have Flash Enabled

As we’ve already pointed out in our guide to browsing without leaving a trace, even if you are blocking cookies in your browser, advertisers are using Flash cookies to keep track of what you’re browsing online. In fact, more than half of the most popular web sites are using Flash tracking cookies—and even using your browser in private mode won't (currently) stop them from tracking you this way.

Still Want to Block Cookies? Try Blocking Third Party Cookies Only

If you are still worried about cookies for privacy reasons, you can set up your browser to only accept first-party cookies, so you’ll still be able to log in to all the web sites that you visit. For Firefox, just head into the Options panel, switch to the Privacy tab, and uncheck the Accept third-party cookies box. If that causes you any problems, you can keep the option checked, but change the “Keep until” setting to remove the cookies once you close Firefox. Other browsers have similar settings; just head into the options to find them.


Do you clear your cookies religiously, or do you just use a private browsing mode? Share your thoughts in the comments.

The How-To Geek isn’t paranoid enough to delete cookies regularly. His geeky articles can be found daily here on Lifehacker, How-To Geek, and Twitter.






WP Like Button Plugin by Free WordPress Templates