ASUS RT-N56U Wireless Router Review

The Belkin 54G wireless access point I’ve been using for a few years has been suffering since we extended the house.. there’s just not enough range on it, and it tends to temporarily lock up if it’s hammered a lot.

Finding a replacement took a lot of research, but I eventually decided on the ASUS RT-N56U, costing about £85, after reading some great reviews, including one in PC Pro. It’s worth reiterating that it doesn’t contain an ADSL router.. so if you’re on that type of broadband you’ll still need one of those in your set up. I’m happy with that, since the master socket isn’t where I want to place the wireless router anyway.

Configuration was straight-forward, aided by a decent web interface. As soon as I plugged it in I upgraded the firmware to the latest version from ASUS. I’d also seen that there are unofficial firmwares from a Russian group which are meant to fix a bunch of stuff & add new features. I’m sticking with the ASUS firmware unless I hit stability problems or find that I want to tinker later on. I certainly like the option to have a customised firmware should the need arise.

After having it running for a few days I’m really impressed with the speed and coverage across the house. It allows you to either use one SSID for 2.4Ghz and one for 5Ghz.. which lets you decide which band you want a device to use. Or set the same SSID for both, and it’ll automatically switch you over to the fastest band according to the signal strength. I was in the kitchen, and it connected on what must have been the 2.4Ghz band (due to the distance), then moved to the living room where the speed shot up & was obviously using the 5Ghz band.

Here’s a table showing how the signal strength has been affected by the upgrade;

Signal Strength (dBm)
Postion ASUS Belkin
Utility Room -70 -75
Kitchen Diner -76 -85
Lounge -45 -63
Bedroom -61 -75
Bathroom -76 -85


And here’s my unboxing video;

Moving ISP – Not so difficult

This post will probably end up sounding like an ad, but that’s not the point of this post. Basically, I had to move ISPs because O2 were wanting heavier users off their network & don’t care if any downloads are limited to the early hours of the morning.

The hunt was on for a new ISP and BT looked half decent with a cap of 100Gb (at 80Gb they start sending you emails to warn you). Then a mate of mine said he was with IDnet; I took a look at their website & it was a breath of fresh air.. they actually publish their usage limits! If only more ISPs were as transparent as this!!

Migration only took 5 working days, and the new ADSL2+ service is really speedy.. I don’t get any problems watching iPlayer at peak times like I did with O2. Fantastic stuff!

Google Maps Navigation – Data Usage

Google unlocked the GPS navigation feature in the UK last week & one thing I wondered is how much data it used up as you drive the route it’s suggested… this is of interest to anyone on a metered tariff from their mobile provider. In my case I’m on an O2 business tariff that lets you download 200mb a month.

Google Navigate - Image from Mashable

To see how much data it used I first installed 3G Watchdog from the Android Market. Then I planned a route from work to home and headed off. From my unscientific tests it downloaded around 1mb of data in my 8 mile journey. Whether the duration of the journey makes a difference I’m not sure.. i.e. if you’re suck in traffic does it still pull/push data at the same rate as when you’re travelling? I’m assuming it won’t transfer as much, but it’ll still transfer something.

UPDATE: The actual per-mile download rate can’t be found by the method above. When you first plan the route, it’ll download and cache the data, then download small updates as you drive along. If you therefore plan your route at home whilst on a Wifi connection, then drive away (with route updates coming over 3G), you’ll get different results to what I documented above.

Ethernet Camera Review – Edimax IC-1310

Last week I bought one of these cameras to keep an eye on the house. After initially thinking I wanted the old D-Link DCS-900 I stumbled across the Edimax range of cameras. Here’s a summary of what they have available:

  • Edimax IC-1500 – Older model
  • Edimax IC-1510 – Updated version of the IC-1500 – ~£40
  • Edimax IC-1510wg – As per IC-1510 but adds wireless – ~£65
  • Edimax IC-1310 – Same as the IC-1510 but adds audio – ~£48
  • Edimax IC-1310wg – As per IC-1310 but adds wireless – ~£78

I went for the IC-1310 because I thought the audio might be useful, even if I didn’t use it at first. I also couldn’t justify the more expensive wireless model when I’ve got a couple of Belkin wireless APs in the loft that could be hooked up to add wireless at zero cost to me.

One week on, this camera is great, especially for the price! In low light the images are pretty decent, and in daylight they’re great. Some of the features require that you use Internet Explorer; e.g. getting audio as well as video requires their ActiveX control, as does the initial setup of the motion detection. However, most other features work through other web browsers like Firefox (I don’t think some people read all the documentation!) it’s all in the ‘CGI Commands’ manual on the Edimax website. You can get straight to the MJPG video stream or individual JPG images through whatever browser you like. However, I’ve not yet been able to get the audio and video stream mixed together on other browsers. The ActiveX control also doesn’t seem to work through corporate proxies.

Network setup is relatively trivial for anyone who knows their way around port forwarding in a router. It took me about 10 minutes to set everything up & make it available using a DynDNS host name for external viewing.

It hooked up to my Android phone without any problems, streaming the video over 3G using apps like ‘Tiny DVR‘ (which I’d recommend) or ‘IP Cam Viewer Lite‘. Over 3G the frame rate was about 1-2fps.. enough for a quick check on the house. Edimax have their own app for those with iPhones.

If you don’t need audio then go for the cheaper Edimax IC-1510 (which is currently about £40). I’ve had mine wired through a ethernet cable so can’t comment on the wireless side of things; if you want wireless then you need to see whether it’s worth the extra £30 to go from the IC-3010 to the IC-3010wg.

URLs that work through most non-IE web browsers are:

Single-image, not logged in (you define the file name to use);

MJPG Stream

MJPG Stream with authentication

QR Code Bookmarklet

QR Codes are a useful way of getting data to your mobile phone using it’s built-in camera. They’re basically 2D barcodes that can carry things like URLs and contact details. On Android I’d recommend using the app called Barcode Scanner to read QR Codes.

There were instances where I wanted to open up a webpage with a long URL on my phone & didn’t want to go through the hassle of copying and pasting it into one of those online QR Code generators.

This bookmarklet for Firefox and newer versions of IE lets you create a QR Code for the page you’re on.. it’ll default to the current page, but you can also override this with something else (like a URL from your clipboard, or whatever).

Add a new bookmark to your toolbar, and set the URL to the code below (I’d have put the proper link on here but WordPress disables the Javascript);


Android Apps – Pick of the best stuff – Jan 2010

Here’s my pick from the thousands of Android apps that are available as of Jan 2010.. all of these are free!


  • Listen – Google’s podcast subscription & listening app
  • beebPlayer – Stream content from the BBC’s iPlayer
  • Rev3Remote – Stream video content from Revision3

Screen Candy

  • chompSMS – View SMS conversations like the iPhone
  • SMS Popup – Nice pop-up notification of SMS messages
  • Endless Walls Wallpapers Lite – Wallpapers
  • Backgrounds – Wallpapers
  • Retro Clock Widget – Nice clock + date widget
  • The Weather Channel – has a nice widget

Developer / Techie / Advanced stuff

  • Quick Settings – Quick access to settings, e.g. turn off wifi
  • ASTRO File Manager – Access files on your SD card
  • AppsInstaller – Install apps from your SD card
  • Free Advanced Task Manager – Task management & app uninstaller
  • Wifi Analyser – Wifi graphing (like Netstumbler)
  • GPS Status – Detailed GPS info
  • android-vnc-viewer – VNC Viewer

Barcodes / Shopping

  • ShopSavvy – Read barcodes and it’ll find the product online
  • Barcode Scanner – Recommended for reading (and creating) QR Codes

Augmented Reality

  • Google Sky Map
  • Reality Browser 3.0

Misc Useful Stuff

  • RealCalc Scientific Calculator
  • Voice Recorder
  • Text Edit
  • Compass
  • DrawNoteK – Draw notes on the screen
  • Bubble – Spirit level

App Versions of Websites

  • Quickpedia – Mobile optimised Wikipedia
  • Seesmic – Twitter client
  • Facebook for Android – Official Facebook app
  • Bloo – Unofficial Facebook app that includes notifications


  • Labyrinth Lite
  • Phit Droid
  • Frozen Bubble
  • Coloroid
  • Bebbled

iPhone and Android development with Titanium

Over the past few months I’ve worked on a couple of mobile applications for the iPhone and Android platforms. I’d looked at Phonegap some time before that, but determined that it wasn’t up to the job, but more recently I stumbled across Titanium from Appcelerator. The idea is that you code up your apps using HTML and Javascript. The Javascript calls the Titanium API to create things like lists, dialog boxes, and phone features such as geolocation.

Some of the advantages of using Titanium are:

– No need to learn Objective-C (iPhone) or Java (Android)
– Leverage existing HTML + Javascript skills
– Write one version of the code that can be deployed to both platforms
– Code is compiled up into native applications which are accepted in the App Store
– Potential to deploy to other platforms in the future (e.g. Blackberry, Symbian)

The level of support provided by the Appcelerator staff on the official forums is brilliant, and the tutorial videos are good for those who want to get an overview of creating apps without wading through documentation.

You’ll still need a Mac if you want to develop for the iPhone, because Titanium makes use of the iPhone SDK. But if you just want to do Android development then you can use Window or Linux as well.

Although you’ll be developing 1 set of code for both the iPhone and Android, you’ll probably want to customise the UI slightly differently for each platform. For example, Android apps often hide away items such as ‘Settings’ and ‘Help’ under the Menu button. It’s simple to code this kind of thing up:

	if ( == 'android') {
		var menu = Titanium.UI.createMenu();
		menu.addItem("Help/About", function() {
			displayWindow('Help / About', 'window_about.html');
		}, Titanium.UI.Android.SystemIcon.HELP);
	} else {
		data.push({title:'Help / About',image:'tabicon_help.png', color:'#ffffff'});

That code will create the Help/About option under a menu on Android, and add it to the home screen’s list on the iPhone. Simple.

Titanium is an awesome framework so if you’re considering developing for the iPhone and/or Android then I’d highly recommend you take a look.

Creating a Netvibes / iGoogle Gadget for Multi-Image Display

To help make it as easy as possible for family members to see new pictures from the Collinge household I decided to set them up with Netvibes homepages, each containing a widget to display the latest photos from Picasa Web Albums. Picasa Web Albums provide an RSS feed that you can subscribe to which is a good start.. but I couldn’t find a way to display them just as I wanted.

The spec is to display the latest images, over as many columns as the user specifies.. and have the images resize to fit the width of the widget. They pretty much get displayed in a grid style layout.

Step 1) Get the URL for Picasa Web Albums (or whatever service you’re using) and make sure it works. The first gotcha here was that Picasa Web Albums has a limitation which means that images > 800px will not be embedded. They’ll result in a 404 File Not Found. To get around this, append ?imgmax=800 to the RSS’s URL.

Step 2) The feed for Picasa Web Albums is sorted in ascending date order.. I wanted it in descending date order so that the latest photos show first. To do this I chose to re-format the feed using Yahoo Pipes.. it’s a way of tinkering with a feed an invaluable for times when you need to do something simple like this.

Picasa gives you an Atom-based feed which seems to be causing a few issues with my code.. it basically makes the images go into a different node from the one I expected.. and I’ve been unable to work out exactly where it’s putting them. The best way around this is to simply run the RSS feed through a simple Yahoo Pipe; I’ve published one which sorts the images in date descending order. Use that and copy the RSS feed it generates.

Step 3) Create a new widget using UWA so that it works with Netvibes and iGoogle. This is relatively simple.. just requiring a bit of coding to make it happen. As usual I’ve tried to make the code as generic as possible & driven by user preferences. The user can specify which node in the JSON object (returned from the RSS feed) contains the image to display.. useful when dealing with non-standard image enclosures. It will default to the first enclosure at item.enclosures[0].url

The finished widget is published here.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<html xmlns="" xmlns:widget=""  >
		<title>Multi-Image Display</title>
		<meta name="author" content="Matt Collinge" />
		<meta name="email" content="" />
		<meta name="description" content="Display multiple images from an RSS feed. Useful for feeds like those from Picasa Web Albums" />
		<meta name="version" content="1.0" />
		<meta name="website" content="" />

		<meta name="keywords" content="image, rss, picasa, web album, picture, multiple, display, grid" />
		<meta name="autoRefresh" content="15" />
		<meta name="apiVersion" content="1.2" />
		<link rel="stylesheet" type="text/css" href="" />
		<script type="text/javascript" src=""></script>
		<style type="text/css">
			.imageDisplay {
			<preference name="title" type="text" label="Title" defaultValue="Multi-Image Display" />

			<preference name="url" type="text" label="RSS Feed" defaultValue="" />
			<preference name="limit" type="range" label="Number of images to display" defaultValue="10" step="1" min="1" max="50" />
			<preference name="columns" type="range" label="Number of columns to use" defaultValue="2" step="1" min="1" max="8" />
			<preference name="imagenode" type="text" label="Node in RSS Feed Containing Image" defaultValue="item.enclosures&#91;0&#93;.url" />
			var BasicRSSReader = {};
			BasicRSSReader.feed = false;
			widget.onLoad = function() {
				if (widget.getValue('url') === '' || widget.getValue('url') == undefined) {
					widget.setBody('Please edit the preferences and enter the URL of the RSS feed where you want to take images from.<br><br>. Use a feed re-formatter like Yahoo Pipes if you need to tinker with a 3rd party RSS feed.');
				} else {
					UWA.Data.getFeed(widget.getValue('url'), BasicRSSReader.display);
			BasicRSSReader.display = function(feed) {
				var bodyHTML = '';
				if (feed) BasicRSSReader.feed = feed;
				var imageWidth = widget.body.getDimensions().width / widget.getValue('columns');
				var imageCount = 0;
				var columnCount = 0;
				bodyHTML += '<table border=0 cellpadding=0 cellspacing=0>';
				for(var i=0; i < BasicRSSReader.feed.items.length; i++) {
					var item = BasicRSSReader.feed.items&#91;i&#93;;
					if (imageCount >= widget.getValue('limit')) {
						bodyHTML += '</tr>';
					if (columnCount == 0) {
						bodyHTML += '<tr>';
					bodyHTML += '<td><a href="' + + '"><img src="' + eval(widget.getValue('imagenode')) + '" width="' + imageWidth + '" /></a></td>';
					if (columnCount == widget.getValue('columns')) {
						columnCount = 0;
						bodyHTML += '</tr>';
				bodyHTML += '</table>';
				if (imageCount==0) bodyHTML = 'Unable to load feed.';


Netvibes UWA

Netvibes is a pretty awesome personal homepage web app. It’s very similar to iGoogle, but IMO it’s a lot more stable & a lot better looking. Netvibes offer a unified API that allows you to write using their API and deploy your gadget to multiple providers, such as iGoogle, Opera, iPhone, MacOSX and Vista.

I’ve been writing a gadget for my company but decided I also wanted one to take the first image out of an RSS feed and present so that it takes up all the space in the gadget. Useful for things like LOLcats. It was surprisingly simple to create.. so with some UWA coding, and a simple pipe at Yahoo Pipes, I’m now able to bring in the first image from a specified RSS feed.. assuming the image’s URL has been put into the item.content tag.

Here’s the finished gadget.. and the source code is below…

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "">
<html xmlns="" xmlns:widget=""  >
		<title>Single Image Display</title>
		<meta name="author" content="Matt Collinge" />
		<meta name="author_email" content="" />
		<meta name="description" content="Display an image from the content section of the first item in an RSS feed. Useful for feeds like those from LOLCats. Use Yahoo Pipes to get the image URL (only) into the item.content tag." />
		<meta name="version" content="1.1" />
		<meta name="website" content="" />
		<meta name="keywords" content="image, rss, lolcats, single, full width" />
		<meta name="autoRefresh" content="15" />
		<link rel="stylesheet" type="text/css" href="" />
		<script type="text/javascript" src=""></script>
		<style type="text/css">
			.imageDisplay {
			<preference name="title" type="text" label="Title" defaultValue="Single Image Display" />
			<preference name="url" type="text" label="URL" defaultValue="" />
			var BasicRSSReader = {};
			BasicRSSReader.feed = false;
			widget.onLoad = function() {
				if (widget.getValue('url') === '' || widget.getValue('url') == undefined) {
					widget.setBody('Please edit the preferences and enter the URL of the RSS feed where you want to take the image from.<br><br>The image URL must be in the item.content tag otherwise this will not work. Use feed a reformatter like Yahoo Pipes if you need to tinker with a 3rd party RSS feed such as LOLcats.');
				} else {
					UWA.Data.getFeed(widget.getValue('url'), BasicRSSReader.display);
			BasicRSSReader.display = function(feed) {
				var feedList = 'Unable to load feed.';
				if (feed) BasicRSSReader.feed = feed;
				var item = BasicRSSReader.feed.items[0];
				feedList = '<img src="' + item.content + '" width="' + widget.body.getDimensions().width + '" />';

Using JSLint with Notepad++

I’m doing a fair amount of development using the ExtJS framework. IE is a bit picky about getting JavaScript properly formatted (otherwise it refuses to render the page). That’s why I’ve found JSLint really useful for locating stray commas or semi-colons.

To make it a bit quicker to put the file contents in the JSLint box I decided to hook it up to the Run menu in Notepad++. However, the JSLint web page doesn’t allow us to pass in data to it. To get around this you can copy the HTML + JS files from the authors website an copy them locally. Once you’ve got them locally you can modify the source to allow the passing of data.. here’s the change I made to do it on my system:

jslint.php changes.. add this right near the end

<script src="javascript.js"></script>

You’ll then need a way to take the file contents and fire it off to the page. At first I tried passing the file contents via the GET request, but it’s limited in length. Also, Notepad++ won’t let you send the file contents via the Run command. In the end I chose to use a piece of VBScript to bring up the webpage in the default browser, and some JavaScript to read in the file & place it into the page.


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(wscript.Arguments(0), 1)

Dim strCharacters

Do Until objFile.AtEndOfStream
    strCharacters = strCharacters + objFile.Read(1)

strCharacters = Escape(strCharacters)

Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile("c:\progra~1\notepad++\jslint\javascript.js", TRUE)
objOutputFile.WriteLine("document.getElementById(""input"").value = unescape(""" & strCharacters & """);")

Dim wShell
Set wShell = CreateObject("WScript.Shell")
wShell.Run "c:\progra~1\notepad++\jslint\jslint.html", 9

Finally, this is the Run command you can use in Notepad++ to launch the script…

wscript "C:\Program Files\Notepad++\launchJSLint.vbs" "$(FULL_CURRENT_PATH)"

Switching FoxyProxy Profiles using Script

FoxyProxy is a useful extension to Firefox, but I’m always having to switch profiles back and forth as I take my laptop from work to home, and vice versa. I experimented with proxy PAC files without any success (mainly because laptops have multiple network adapters and the PAC scripts only detect your first IP address). Plus, as far as I can tell, PAC files are checked for every single HTTP request which must be a hit on browser performance.

Anyway, what I decided to do was directly modify the FoxyProxy config file before Firefox was run, and this would then select which FoxyProxy profile was used. The script below detects the host of something on my local network (which doesn’t exist at work) and switches accordingly. You could get it to switch on anything you like, but this works for me.


Set WshShell = WScript.CreateObject("WScript.Shell")

' Code to determine where you are and switch profiles accordingly
if (Ping("somehost") = "") then
end if

' Run Firefox - this uses a specific profile.. your command line can simply exclude it
ReturnCode  = WshShell.Run("""C:\Program Files\Mozilla Firefox\firefox.exe"" -profile ""z:/firefox/profiles/qtxjee58.default""", 6, False)

sub ModifyFoxyProxy(sProfile) 
	' Path to your foxyproxy.xml file
	set oparser=createobject("msxml2.domdocument")
	with oparser
	    .load xmlfile
	end with
	if oparser.parseerror.errorcode<>0 then
	    wscript.echo "xml file " & xmlfile & " is not well-formed." & vbcrlf & "Operation aborted."
	    wscript.quit 999
	end if
	set oroot=oparser.documentElement
	oroot.setAttribute "mode", sProfile outfile
	set oparser=nothing 

end sub

function Ping(strHost)

    dim objPing, objRetStatus

    set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery ("select * from Win32_PingStatus where address = '" & strHost & "'")

    for each objRetStatus in objPing
        if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode<>0 then
    		Ping = ""
            'WScript.Echo "Status code is " & objRetStatus.StatusCode
            'Ping = True
            'Wscript.Echo "Bytes = " & vbTab & objRetStatus.BufferSize
            'Wscript.Echo "Time (ms) = " & vbTab & objRetStatus.ResponseTime
            'Wscript.Echo "TTL (s) = " & vbTab & objRetStatus.ResponseTimeToLive
            Ping = objRetStatus.ProtocolAddress 
        end if
end function 

Using OpenDNS with the O2-supplied Router

One thing that O2 didn’t put into the web interface for the Thomson TG585 wireless routers they supply you with, is a way to change DNS servers. It’s therefore a bit of a pain if you want to use OpenDNS. Luckily it’s not that hard to make the changes via a telnet connection:

Login name: SuperUser
Password: O2Br0ad64nd

Now make a note of your existing DNS setup using this command:

dns server route list

It’ll give you something like this;

DNS Server Entries:
  DNS Server     Source  Label   Metric Intf         State  Domain
D                    10     O2_ADSL       UP      *
D                    10     O2_ADSL       UP      *

The ‘Intf’ column is the type of connection you have (yours might differ from mine).. you’ll need this for the next commands;

dns server route flush
dns server route add dns= metric=0 intf=O2_ADSL
dns server route add dns= metric=0 intf=O2_ADSL
dns server route list

That’s it. Release and renew your IP address on all connected equipment and you’re all set.

BT i-Plate

There have been a bunch of articles on the web about the BT i-Plate; a self-fit component that you stick into your master socket to improve your broadband speed. PC Pro gave it a good review, and so did a bunch of sites on the web.. for a tenner I thought I’d give it a try.

Speeds before:

5975 kbps (747kB/s) 376 kbps (47kB/s)
5812 kbps (727kB/s) 377 kbps (47.1kB/s)
5453 kbps (682kB/s) 373 kbps (46.6kB/s)
4873 kbps (609kB/s) 378 kbps (47.3kB/s)

Speeds after:

6151 kbps (769kB/s) 379 kbps (47.4kB/s)
5227 kbps (653kB/s) 379 kbps (47.4kB/s)
5350 kbps (669kB/s) 379 kbps (47.4kB/s)
4141 kbps (518kB/s) 366 kbps (45.8kB/s)
3622 kbps (453kB/s) 358 kbps (44.8kB/s)
4409 kbps (551kB/s) 360 kbps (45kB/s)

So far the results don’t look any different from before. Hey Ho. Maybe the connection will improve over time, with better line stability.