Sunday, January 29, 2012

My 3 Favorite & Easiest Ways To Download Videos Off The Web

It seems that every year a promising new video service emerges (most recently, perhaps Vevo) and another hits the dust (most recently, MegaUpload/MegaVideo). As the trend continues, we storage junkies must adapt. We’ve talked a lot on this subject in the past, but I’m confident that you’ll find my ways to be the easiest and most effective. Storing remote video content locally is a challenge no more, and I’ve got three tried and true methods to tip you on to.
If you’ve ever been to a website, watched a hilarious clip, and thought to yourself, “Wow, I wish I could keep that one forever. What if it gets deleted?”, you’re now looking at the correct article.

Downloading Flash Files Using Your Browser

Saikat wrote an awesome article nearly three years ago that still works like a charm. This method is still my favorite as it can be performed in every browser available. Although the method still works like a charm, exactly as it’s described in Saikat’s article, let’s go back over the process for Firefox.
Start by going to a page with a Flash video on it. YouTube is a good example. You can tell if a website is using Flash to power their video front-end by right clicking on the video itself and looking at the context menu. If Flash is mentioned, there you go.
After you’ve found your video, right click on the page (not the video) and select “View Page Info“.

Now, click the “Media” tab across the top. Scroll through the list until you find the content with the “Type” matching “Embed“. Click on it, and then “Save As…“. A download prompt will come up and you’ll be saving the SWF file right to your drive.

Using Offliberty

Offliberty is my best-kept secret when it comes to pulling video content off of the web. I’m not sure if it can get any more easier than this solution.
There are a lot of ad-filled websites that extract videos from YouTube for you. There’s also a lot of sticky, bad adware that you can download to get it done. With Offliberty, you just paste the URL and then wait for it to crunch some numbers, then download.

It’ll take a few seconds and then your results are in. You can actually rip the MP3 or the entire video from YouTube with this service, but for the sake of this article, let’s go with the video.

Offliberty supports a lot of the most popular video and music websites. Just plug a URL in and give it a shot, pretty good chance that it’ll be able to instantly convert and spit out what you’re looking for.
Just a little warning: Offliberty uses a script to randomize their page background. I refreshed anywhere between 10 and 15 times and one of the backgrounds was set to a very faint image of a male and a female, the female being topless. It was nothing explicit or hardcore and I’d classify it as “artsy,” but don’t use this at work. You shouldn’t be, anyway!

NetVideoHunter for Firefox

NetVideoHunter Video Downloader is one of my favorite Firefox add-ons. This page explains the usage of the add-on better than any, but let me give you a quick rundown.
Download and install the plugin. Restart Firefox. Go to any website that streams video. Start the video. Look at your Add-ons Bar for the NVH icon and click on it.

Here, you’ll see a list of every video that you’ve loaded this browser session. From this menu, you can watch the videos or download them. If using a site like YouTube where many formats are supported, every format should be available in the menu (as you can see it is in the screenshot). Can’t be much simpler than clicking “Download” and saving the video locally.
If these three are less than what you want, check out some of our other related posts:


Perl has been around for more than 20 years. During that time, it has received its share of both praise and criticism, and lots of misconceptions surround it. Much of this stems from long-outdated notions of what Perl used to be, but have nothing to do with what Perl actually is today.
Perl hasn't been standing still. It's been growing continuously and evolving, and that growth has accelerated dramatically in the past few years. Moose is one of the technologies at the heart of this "Perl Renaissance", which also includes other exciting projects that have emerged, such as Catalyst and DBIx::Class.
Moose is essentially a language extension for Perl 5 that provides a modern, elegant, fully featured object system. I say "language extension", but Moose is written in pure Perl, and as you'll see, its syntax is still normal Perl. You don't need to patch Perl itself to use Moose; under the hood, it's just Perl 5.
Because Moose is still just Perl 5, it's fully compatible with all of those wonderful modules on CPAN, regardless of whether they are written in Moose (and most aren't, as CPAN has been around for so long, and Moose is relatively new).
For me, this is still the single biggest reason to choose Perl. Whatever you are trying to accomplish, chances are, there already is a refined module for it on CPAN. This usually means dramatic cuts in total development time, because someone else already has written a lot of your program for you.
And now, with all the modern object-oriented features Moose brings to Perl, you get to have your cake and eat it too.
In this article, I provide an introduction to object-oriented programming in Moose and cover some of Moose's core features with useful examples. To get the most out of this article, you already should be familiar with object-oriented programming concepts, such as classes, objects, methods, attributes, construction and inheritance.
You also need to know Perl—at least the fundamentals. If you don't know Perl, learning it is not very hard to do. At the end of the day, it's just syntax. The good news is you don't need to master Perl by any stretch to start using Moose.
Perl does have its quirks, and Moose doesn't make them all totally go away (and you wouldn't want them all to go away, because a lot of them are really useful). The most important concepts to understand are how Perl references work (the "perlreftut" tutorial is a great place to start—see Resources), and also the basics of working with Scalars, Arrays and Hashes. Also, learn what the fat comma is (=>) if you aren't already familiar with it. Moose makes heavy use of it as an idiom. It's actually not that scary; it's interchangeable with the normal comma (,).
Most of the rest of it you can learn as you go. Normal language stuff like loops, conditionals and operators aren't all that different in Perl than any other language. So give it a shot. I think you'll find it's well worth the investment.

What about Perl 6?

A lot of the features in Moose were inspired by Perl 6. Perl 6 still is being developed actively, and I believe that when it's finally released for production use, it won't disappoint. The fact is Perl 5 is solid, proven and fast, so there is no reason to rush Perl 6. It is better that the developers take the time to do it really right, which is exactly what they're doing.

Getting Moose

Chances are you already have a distribution of Perl installed on your system. You at least should have Perl 5.8, but preferably 5.10 or 5.12. Installing Moose from CPAN is an easy task; simply run the following command:

cpan Moose
This should download and install Moose for you, as well as all of Moose's dependencies.

Object-Oriented Perl (the Old Way)

Even though Perl has had object-oriented features for a long time, it was not originally designed—syntactically—as an object-oriented language. This is more about the API provided to the programmer than it is about the underlying technical design of Perl itself.
Perl 5 provides a lean environment with the fundamental features and hooks needed for object-oriented programming, but then leaves most of the details (such as setting up object constructors, implementing attributes and handling validation) to you. As a result, the "right way" to go about implementing these concepts is open to interpretation.
The fundamental feature utilized by Perl to support objects is the "blessed" reference. This is like the flux capacitor of objects in Perl. Blessing simply associates a normal reference (usually a Hash reference) with a class. The blessed reference then becomes the "object instance", and its referent is used as the container to store the object's data.
The class name is the same thing as the package name, which is nothing more than the namespace in which subroutines and variables are defined. The subroutines defined in the given package namespace become the methods of the class and can be called on the object reference.
All object-oriented languages have to do something along these lines to implement objects under the hood. Other languages just don't impose so many of the low-level details on the programmer as in pure Perl.
Here is an example of a simple class in old-school Perl 5 OO:

package MyApp::Rifle;
use strict;

sub new {
        my ($class, %opts) = @_;
        $opts{rounds} = 0 unless ($opts{rounds});
        my $self = bless( {}, $class );
        return $self;

sub rounds {
        my ($self, $rounds) = @_;
        $self->{_rounds} = $rounds if (defined $rounds);
        return $self->{_rounds};

sub fire {
        my $self = shift;
        die "out of ammo!" unless ($self->rounds > 0);
        print "bang!\n";
        $self->rounds( $self->rounds - 1 );

Save the above class definition into a file named MyApp/ within one of your Perl's include directories, and then you can use it in a Perl program like this:

use MyApp::Rifle;
use strict;

my $rifle = MyApp::Rifle->new( rounds => 5 );
print "There are " . $rifle->rounds . " rounds in the rifle\n";
print "Now there are " . $rifle->rounds . " rounds in the rifle\n"; 

Saturday, January 28, 2012

How to Use Multiple Headers and Footers in a Single Document

There is no option in Word 2010 that allows you to use a different header and footer for different sections in a document. The trick is to use section breaks and unlink the header and footer respectively–this allows you to set them as you are creating the document.
For demonstration purposes we have a document with a plain text header as well as a plain text footer which both say How-To Geek.

This is awesome but i want a different header and footer on the next page saying my name. Now we could use the option which allows for different headers and footers on odd and even pages, however we also want a different header on the third page saying @howtogeek (which is our twitter handle). The only way to achieve this is to use section breaks. So place your cursor at the end of the first page and switch to the page layout tab.

Now click on the breaks button in the Page Setup section and choose to insert a New Page Section break, choose the next page section break

Click on the Header on the second page and click on the Link to Previous button to unlink it

Once it has been unlinked you can edit it without effecting your other header

You will need to do the same for your new footer as it will still be linked to the footer in the previous section

Now you can make your changes to the footer

You can create another section break and use another header and footer if you so choose to give your third page a completely unique section break

Thursday, January 26, 2012

How To Extend Your Wireless Network with Tomato-Powered Routers

If you’re underwhelmed by the reach of your wireless signal, follow along as we show you how to extend your wireless network using routers powered with Tomato firmware.
Last year we showed you how to extend your network using DD-WRT powered routers. Since then, several readers have written in, asking how they could do the same thing with Tomato routers. Many of them said they’d switch to DD-WRT if they had to, but would prefer to keep using Tomato if possible. Although Tomato doesn’t have a perfectly analogous match to the DD-WRT repeater mode (more on this later) you can easily link two Tomato routers together with only a few minutes of configuration.

What You’ll Need

For this tutorial the requirements are quite minimal. You’ll need the following things:
That’s it! You technically don’t even need the Ethernet cable but we always prefer to do any heavy router tweaking over a wired line (saves you the hassle of having to plug yourself in anyway should something go wrong with the wireless configuration and you lose you Wi-Fi connection to the router).
We won’t be covering the installation of Tomato in this guide (for that you can check out our previous installation guide to get up to speed).
A final note before we proceed. The prior DD-WRT guide we shared with you focuses on using the second DD-WRT powered router as a Wi-Fi repeater. Currently, Tomato (and it’s derivative TomatoUSB) do not include the specific software components necessary for a true Wi-Fi repeating mode. The network extension tool included in Tomato is known as Wireless Distribution System (WDS). If you’re interested in the technical aspects of WDS you can check out this Wikipedia entry here. For our purposes there are only a few key details we need to highlight.
The most important difference between setting up a pure repeater (as per our DD-WRT guide) and setting up a WDS node, is that the WDS suffers a performance hit after the first transmission hop. What this means in practical terms is that if you were, say, transferring a file between a laptop in your bedroom which was connected to your WDS node upstairs (which is then, in turn, connected to your actual router in your office), and then to a network drive connected to that office router, you’d suffer a theoretical performance hit of 1/2 the Wi-Fi transmission speed.
This sounds like an awful compromise, but in reality you likely won’t even notice it. Unless you’re trying to transfer massive files over your network by Wi-Fi (which isn’t very practical to begin with) the potential halving of transmission speed is of no practical impact for simple web browsing and small file transfers–and is far outweighed by the huge signal boost you get from the placement of the secondary node.
Although we’re focused on extending a Wi-Fi network with this guide, it is worth noting that you can use the secondary router (once configured in WDS mode) to plug in wired devices via Ethernet. Thus you could, for example, place the secondary Wi-Fi router near a network-enabled printer or older computer without a Wi-Fi connection and use the secondary router as a sort of Wi-Fi Ethernet bridge.
All that said, if  you find the Wi-Fi performance hit to be unacceptable you can always flash your secondary node with DD-WRT and configure it as a pure repeater.

Getting Started Configuring Your Primary Router and Node

To cut down on confusion we will, henceforth, refer to the router that your internet connection is hooked up to as your Primary Router and the router you’re configuring to be your network extender as your Node. It is very easy to accidentally apply settings to the wrong administrative interface so, despite the relative simplicity of the following instructions, it’s critically important that you make sure you’re applying the settings to the correct side of the equation. Always double check if you’re supposed to be working with the Primary Router or Node.
The following instructions start from the premise that you have two routers, both with Tomato installed, and both plugged in.

First, navigate to the administrative interface of the Node. This is where it is extremely helpful to use the Ethernet cable as, even if the default settings on the Node confliction with the default settings on the Primary Router, your direct wired connection will overrule that.
In the administration panel of the Node, navigate to Administration –> Admin Access –> Color Scheme. Select an alternative color scheme for the Node. The default color scheme for Tomato is, simply, “Tomato”. We changed the color on the Node to “Blue”. It seems trivial but you’re going to spend the next 20 minutes plugging in commands to the two interfaces and something as simple as a different color scheme will decrease the chances you plug in the wrong parameters. Also, for future tweaking, it’ll make it immediately clear which of the devices you’ve logged into. Now would also be a great time to scroll down in that same Admin Access sub-menu and change the access password on the router if you haven’t done so already. Make sure to click Save at the bottom to save your changes.
After you’ve set the color and changed the default password to something more secure, it’s time to begin configuring the Node to serve as a WDS access point. Navigate to Basic –> Network on the Node. We have quite a few settings to toggle in this section, you may wish to print a basic check list so you can check them off as we go (trust us, it’s really frustrating to waste time trouble shooting a network problem only to find out that you forgot to change a 1 to a 2 or something as equally tiny).

Within the Network sub-menu of the Node, you want to work down through the following settings, toggling them as you go. First, toggle the WAN / Internet to Disabled. Second, change the values in the LAN section to the following:
  • Router IP Address: (presumes your Primary Router IP is
  • Subnet Mask:
  • Default Gateway: (the IP of your Primary Router)
  • Static DNS: (You may use either your Primary Router IP or your ISP’s DNS server IPs)
  • DCHP Server: Unchecked.

In the Wireless section of the Network sub-menu of the Node, configure the following settings:
  • Enable Wireless: Checked.
  • Wireless Mode: Access Point + WDS
  • Wireless Network Mode: G Only
  • SSID: The SSID of your Primary Router, i.e. linksys or wireless.
  • Broadcast: Checked.
  • Channel: The channel of your Primary Router, i.e. 6 – 2.437.
  • Security: WPA Personal (this is the strongest method you can use with WDS)
  • Encryption: AES
  • Shared Key: Enter the Wi-Fi key used by the security settings on your Primary Router.
  • Group Key Renewal: 3600
  • WDS: Link With…
  • MAC Address: In the first slot, insert the Wi-Fi MAC address of your Primary Router.
Make sure to click Save at the bottom to lock in all the changes you just made.

Now it’s time to go into the administrative panel of the Primary Router and finish the connection. Login and navigate to Basic –> Network (just like you did on the Node). In order to cut down on confusion (and the chances of you messing up the already functional configuration of your Primary Router) we’re only going to include the WDS specific changes you need to make. Scroll down in Network to the Wireless section. Toggle the following settings:
  • Wireless Mode: Access Point + WDS
  • Wireless Network Mode: G Only
  • WDS: Link With…
  • MAC Address: In the first slot, insert the WI-FI MAC address of your Node.
Note: If you weren’t using WPA Personal/AES and inserted new values for your security/encryption into the Node during the previous step, you need to make sure those settings are mirrored on the Primary Router. Click Save.
At this point, having saved the changed on both the Primary Router and the Node, you should be in business. Plug in the Node at the edge of your current wireless signal (say, upstairs or across your house) and enjoy a much stronger Wi-Fi signal.

Monday, January 23, 2012

3 Ways To Run Android Apps On Windows

android on windowsInterested in Android? You don’t have to buy a device or go to a physical electronics store (do those still exist?) to try it out. You can run individual Android apps and play with the latest versions of the Android operating system on Windows.
Whether you want to try Android before you buy, experiment with the latest version of Android or sync apps between your Android device and your PC, these Windows programs have you covered.


BlueStacks doesn’t replicate the full Android experience, it’s just an “app player” that runs individual apps on your PC. BlueStacks runs in full-screen mode, but you can Alt-Tab and use other programs while it’s open.
android on windows
Here we’re reading MakeUseOf with the Pulse news reader app, included with Blue Stacks:
android apps on windows
Click the Get More Apps icon in the menu to get more apps. You’ll need to sign in with Facebook Connect or create a BlueStacks account to continue. Unfortunately, this page doesn’t contain many apps at the moment.
android apps on windows
BlueStacks really shines if you already have an Android device. You can install theBlueStacks Cloud Connect app, available in the Android market, to synchronize apps between your device and your PC.
android apps on windows


YouWave provides a free 7-day trial, which is more than enough time to get a feel for Android apps. It starts an emulated environment with a home screen and app menu.
run android app on pc
YouWave doesn’t include many apps, but you can get more from Amazon’s App Store and the AndAppStore. Just click the View menu and select Online Content to view the available app stores.
run android app on pc
Click their icons to install them and they’ll appear in the emulator’s app menu. From there, you can launch them and explore the universe of Android apps.
run android app on pc

Official Android Emulator

Google’s Android software development kit provides a free Android emulator, although it’s targeted at developers. You can run the latest version of Android with this method, so it’s a great way to try out Android 4.0, Ice Cream Sandwich, if you have a device that’s stuck on an older version.
First, you’ll have to download and install the SDK manager from Google. After installing it, launch it and check off the files for the latest version of Android. Click the Install button and the SDK manager will automatically download and install the required software.
Click the Tools menu once the download has finished, select Manage AVDs and click the New button to create a new virtual device. Select your installed version of Android as the target, name your Android virtual device, then click Create AVD.
You’ll see your new virtual device in the virtual device manager window. Select it, click the Start button and click Launch to launch the Android emulator. Don’t worry if it takes a while to start — it took over a minute to start for me.
android on windows
Google’s Android emulator definitely doesn’t perform as well as BlueStacks or YouWave. It also doesn’t have the Android Market or any other app store integrated, but you can download app files inside it and install them. Check out our list of Android app-finding websites to find apps for the emulator.


Android’s openness allows developers to create applications like these, which is awesome — no similar solutions are available if you want to try out iPhone or iPod apps on Windows. Still, there are some limitations — the Android Market doesn’t run in any of these environments, for one.
Remember that Android wasn’t designed for the mouse. The experience of using a mouse cursor to navigate apps designed for rich touch interface just isn’t the same — it makes you wonder how well Windows 8’s Metro interface will work on PCs.

5 Reasons To Choose iPhone Over Android

If you’re considering buying your first smartphone, you’ve got a fairly big decision to make. As well as choosing a carrier, plan and minimum contract period you then have to trawl through the barrage of handsets until you find something you like.
Most buyers will probably end up choosing between the Android operating system and aniPhone, running iOS. So how do you know which is right for you? In this editorial I’ll put the iPhone argument forward and explain why I think Apple’s plan is better than Google’s. Don’t forget to have your say in the comments.

UI Response & Lag

I’ve had enough terrible mobile phones in the past to understand the value of a smooth and responsive UI, and this is guaranteed with the iPhone. Pretty much every mundane task you take for granted – scrolling your Facebook feed, looking up a phone number or responding to email – is silky smooth with very little lag at all. Even if you managed to pick up an ageing 3GS you’d still be pleasantly surprised as the OS glides through most tasks the way you’d expect.
Unfortunately, Android has still not quite caught up despite Android 4.0 (Ice Cream Sandwich) making leaps and bounds over previous versions. The Galaxy Nexus is surely one of the most talked-about devices of 2011, but even it seems to have some issues. This controversial TechCrunch article claimed: “It’s still not as smooth as it should be. For the most part, ICS fixes many of Android’s performance issues, but there are plenty of times that you’ll still see stutters here and there.” Let’s not forget the multi-touch issues and rotation lag that has plagued the device as well, making some apps and games unusable.

Google even acknowledged Android’s lag issues before Christmas, and whilst Ice Cream Sandwich is a huge improvement not every brand new Android phone in the shop will be running it. So why, when manufacturers continue to pile on the power, is Android still stuttering through some pretty basic tasks?

Too Many Handsets

The dazzling array of phones sporting the Android operating system is enough to confuse many people considering a purchase, especially your average consumer. Globally HTC released 4 Android phones last year, Motorola and Sony Ericsson turned out 6 but none could match Samsung who incredibly managed a total of 12.
Aside from the release date, choosing between these phones is bound to confuse your average consumer. The names become even more obscure (see Android Phone Name Generator for a humorous take on the situation) with only letters, words like “Droid” or “Galaxy” and screen size to tell the models apart.
Apple’s response is a one-size-fits-all device, released every 12 months or so. The company devotes its time to one product and the multi-device iOS operating system that every iPhone uses. The result might be limiting in terms of choice, but when it comes to quality of build, software-hardware integration and support, no manufacturer comes close. Which leads me on to…

Update Cycles

Many people were surprised when Apple announced that their iOS5 update would be compatible with the 3GS, a device that was released mid-2009 (making it three years old when the update hit). This level of support is much easier for Apple to provide considering they produce much fewer devices and control the operating system on which the products run.
As previously mentioned, there are a lot of Android phones on the market today with varied hardware set-ups, many running outdated versions of the operating system. The problem with releasing 12 phones in one year (Samsung, I’m looking at you) is that many of them will probably never see a single update, partly due to the perceived cost-effectiveness of updating “old” devices (for free) and partly due to the fact that the manufacturers do not control the core OS.
The result? A horrible mess of varying Android versions on the shelf of your local smartphone retailer and updates that might never arrive. Much of the time this update process is hindered by another bane of the Android OS…

Preloaded Crapware

Be it the carrier or the manufacturer, Android phones are guaranteed to come with some sort of custom interface that is designed to make your life easier. The only problem is that in the long run these interfaces – HTC Sense, Motorola MotoBlur, Samsung TouchWiz to name a few – slow down the upgrade process as they introduce more work for developers.
Another issue (which is often purely subjective) is that these interfaces may bloat and slow down devices, with no straightforward “disable” option. Tweakers prepared to flash their phones on a regular basis might be happy enough with a custom ROM, but for your average consumer who just wants a phone that works: this is not the way it should be.
Apple were stubborn over crapware ever since the iPhone was announced, declaring that no additional carrier-installed software would ship with their devices. This ensures a smooth uniform experience, regardless of whether your device is 3 weeks or 3 years old, and to top it off there’s no custom interface to write for when it comes to updates.


One thing Android users have to worry about is malware, which became a real problem in 2011. In August of last year McAfee announced a 76% surge in malware over a matter of months with incidents reported in the Android Market and seemingly benign apps. Now the problem is so bad that there are dedicated scanners designed to remove malware for the platform, such as Avast! for Android 2.1 and above.
Another report from McAfee in December of last year announced:
Apple so far has done an excellent job of securing its devices; as we write this there were no reported cases of malware for iPhones that have not been jailbroken.
The report criticises the Android security model and goes on to analyse Apple’s approach as proactive and Google’s as reactive, stating:
from the security perspective [Google's approach] creates exactly the kind of environment in which malware gangs feel comfortable.
Clearly, there’s work to be done.


These are my personal reasons for choosing and above all recommending the iPhone to friends and strangers alike. Whilst this is an editorial, there’s no denying that Android devices have become fragmented, threatened with a lack of updates, loaded with custom manufacturer ROMs and are the highest-risk devices on the market when it comes to mobile malware.
Finally, it must be said that the iPhone is not a perfect device, especially for users who don’t appreciate the locked-down nature of the OS. Then again, if you want an easy to use, rock-solid device with performance and build quality to match…
What do you think? Do you own an Android device? An iPhone? I bet you’re itching to get stuck in, so have your say in the box below.

How to Browse From the Linux Terminal With W3M

W3M is a terminal web browser for Linux. It’s got a few tricks up its sleeve, including support for images, tabs, tables, frames and other features not usually included with terminal web browsers.
If you’ve used Linux for a while, you probably remember using a terminal browser to Google up a solution for your hardware when the X server refused to load. Modern X servers have advanced far beyond this, but W3M and other terminal browsers can still be useful.

Installing W3M

W3M isn’t included by default on most Linux distributions. You’ll want to install the mainw3m package and the w3m-img package if you want inline image support. Use the following command on Ubuntu:
sudo apt-get install w3m w3m-img

Basic Browsing

W3M has quite a few command-line options, but none are mandatory. The only thing you need to specify is a web page address. Want to bring up Google? Just use the w3m command.
You can use the arrow keys to move the cursor around or click at a desired location to move the cursor there. If you want to type in a text box, select the text box with your cursor and press Enter before typing your text. W3M treats your keystrokes as commands if you just start typing.
Load a hyperlink by selecting it with your cursor and pressing Enter. You don’t have to select hyperlinks manually — press the Tab key to position your cursor over the next hyperlink on the page.
Shift-B will take you back a page. If you want to load a different URL, press Shift-U and you’ll get an URL prompt. Press Shift-H to view the help page if you want to see a more complete list of keyboard shortcuts.

Images in the Terminal

W3M supports images, so where are they? Well, terminals like GNOME Terminal and KDE’s Konsole can’t display W3M’s images. Other terminals, such as Xterm, can. W3M will also display images if you’re running it in a framebuffer console, so you don’t need an X server running to take advantage of this feature.
Another feature that doesn’t work in GNOME Terminal or Konsole is W3M’s right-click menu.

Browser Tabs

How did we ever live without tabs? They’re an essential feature for desktop web browsers. W3M includes tabs, too. Just press Shift-T to open a new tab.
You can switch between tabs by clicking them, but we’re trying to be terminal ninjas here. Use the { and } keys to switch between tabs without touching your mouse (that’s Shift-[and Shift-]).

Gmail in the Terminal

W3M isn’t stuck in the past, like Lynx (another web browser for the terminal) is. It can render tables, frames and even has support for Gmail’s basic HTML interface.
You’d probably feel more comfortable accessing Gmail with an IMAP client from your terminal, but hey — it works.