NZ does us proud

It’s times like this that I’m proud to be a kiwi. Despite lobbying by certain business interests, it looks like New Zealand is going to beat the US and most of Europe to the punch in outlawing software patents.

This is a huge win for the IT industry in New Zealand. The patent system was designed to encourage innovation, but thanks to “licensing companies” which litigate without producing anything and the use of patents on obvious techniques to obstruct competitors, patent law has been doing quite the opposite.

Link to original article

Configuring the backup system

This article is part of a series about setting up a home server. See this article for further details.

Surprisingly, this is one of the easiest bits. If you don’t mind sticking with the options presented by the GUI, Back In Time makes backups so simple it’s almost criminal not to use it. The use of the GUI itself is fairly straightforward so I’m not going to go step by step and instead go for the important bits.

Just make sure you use the root shortcut (Back In Time – root) to prevent any permissions problems.

I’ve used NTFS for the backup volume because it supports hard links and is readable by Windows machines if something goes wrong. A native Linux file system would be preferable for many, but whatever you do don’t use FAT32 (FAT32 doesn’t support hard links, so every snapshot would consume 100% of its size whether the file was changed since the last backup or not).

Creating the Job

This is all done in the settings menu, which isn’t labelled but represented by the classic screwdriver and spanner icon – intuitive enough.

Under General, make sure you’re saving snapshots to your backup volume. Set the schedule to whatever you like, but I prefer to handle the schedule manually as it doesn’t give enough options. For a desktop machine the “daily” option would make sense, but as this machine will be on 24/7 I want it to run at a set time each day, not whenever it feels like it. So we will setup a cron job manually later.

Under the Include tab add your data folder (/media/data). Under exclude I removed all the preset options as I want everything on the data volume backed up. Everything that is except the lost+found folder, so I would suggest clicking Add folder and adding “/media/data/lost+found”.

The auto-remove options are up to you. I set the free space threshold to 1Gb, checked the smart-remove box, and chose not to remove named snapshots as they all seem fairly logical. The expert options don’t really need tweaking unless you want to do different schedules for different folders.

Click OK to save and you can now take a backup.

Altering the schedule

As I explained above we want to make sure the backup runs at a set time, which the gui for Back In Time doesn’t allow for, so fire up a terminal and enter the command: ‘sudo crontab -e’

The crontab is like task scheduler on Windows, but arguably a lot more powerful and flexible. The ‘-e’ option just tells crontab to edit the existing crontab instead of overwriting.

The screenshot below shows my crontab.

The @daily line is the line that the Back In Time gui added. I’m not so concerned about ‘niceness’ at 4am (nice values on Linux serve the same purpose as task priority on Windows), so I left that out. The final line is:
0 4 * * * /usr/bin/backintime --backup-job >/dev/null 2>&1

For an explanation of the crontab, see this crontab quick reference. Basically all you need to know though, is that the first number is the minute and the second is the hour. So if for example you would rather it ran at 1.30am instead of 4am, change the first number to 30 and the second to 1 so it reads:
30 1 * * * /usr/bin/backintime --backup-job >/dev/null 2>&1

Later on we will modify this to also email the result.

Important Caveat

I just discovered that the Back In Time gui blitzes any lines in the the crontab that contain the string “backintime” whenever you click OK from the preferences window. This is a rather annoying problem, as I can easily see this happening.

I recommend making sure the gui schedule is set to every day rather than disabled, which means that if someone does fiddle at least the backup will still happen once a day. The solution to this is to call a wrapper script which does not contain “backintime” in its name… I’ll update this once I’ve written and tested it.

Next part – Monitoring and email configuration

Creating user accounts and setting up the file shares

This article is part of a series about setting up a home server. See this article for further details.

In this section we will create accounts for each user that will access the server, create a folder for each user, make sure the permissions are sane, and configure the samba shares.

For home environments a single user account that everyone uses can be good enough. However I like to have some semblance of security to raise barriers for viruses (who knows what’s going to be connecting to the network), so I setup guest to be read-only and assign write permissions only to authenticated users.

But before we proceed…

One Caveat when doing remote administration in a NeatX session

For some reason NeatX breaks policykit, which means any buttons in control panel applets that require root privileges will simply fail to work.

The way around this is to run the applets with gksu. The most convenient way to do this in my opinion is to create a desktop shortcut.

Go to System > Administration, right click on the users and groups icon in the menu, and “Add this launcher to desktop”. Next, right click on the resulting desktop icon, click properties and in the “Command” field, prepend gksu so that it reads “gksu users-admin”.

Double-clicking on the icon should then prompt you for your password, and all the buttons will work. Hopefully in the future this won’t be necessary!

I also created desktop shortcuts for Disk Utility and Back In Time (root).

Adding the users

Creating users is simple enough, but afterwards we need to add the users to two groups – “sambashare” and “users” (you should be able to figure this out). After doing this, go to Advanced Settings > select the Advanced tab and change the main group to users.

The reason for changing the primary group is so that any files the user creates are also accessible to others in the users group – which will include anyone that we want to be able to access files on the server. If you want to keep files private it is best to leave the primary group as the user name. Old school Unix people tend to know this, but for Windows refugees the lower level Linux concepts such as user groups and file system permissions can seem a bit strange, as they work quite differently.

Folders and Permissions

The raid array in my home server is mounted at /media/data. I like mount points to be owned by root to avoid accidental tampering:
chown root.root /media/data
chmod 755 /media/data

The octal permissions are 755, which means read/write/execute for the owner, read/execute for the group and all other users. For newbies I must confess that the rwx permissions notation is easier to understand, but unfortunately I learned octal permissions and it’s become a habit!

Under the data folder I have a folder for each user. The owner of the folder is the user, and the group is users, as I want Mum and Dad to be able to see each others files:
mkdir /media/data/mum
chown -R mum.users /media/data/mum
chmod -R 775 /media/data/mum

Repeat this for each user (substitute the user for “mum” in the example above). Note the use of the -R switch which applies the command to all sub-folders and files.

If Mum wanted keep her files private, both the owner and group would be the user name, e.g.:
chown -R mum.mum /media/data/mum
And the permissions would be:
chmod -R 700 /media/data/mum
Remember to make sure the primary group is the user name as well.

Setting up sharing (Samba)

I’m not 100% sure I’ve done this the officially sanctioned way, especially since it involves the decidedly old-school method of editing smb.conf. However for anyone comfortable with the terminal I think it works perfectly well.

First open /etc/samba/smb.conf in your favourite text editor (my preference is vim). There’s no need to modify any of the configuration, so scroll down to the bottom where the shares are located. I always comment out the printer shares (print$ and printers), as sharing printers via samba is a fool’s errand in my opinion, just get a blimmin’ network printer.

My shares are setup as follows:
[Data]
comment = Raid5 array, backed up daily
path = /media/data
browseable = yes
read only = no
guest ok = yes

[Backup]
comment = Backup drive, read only, no guest
path = /media/backup
browseable = yes
read only = yes
guest ok = no

[Media]
comment = Media files for XBMC
path = /media/media
browseable = yes
read only = no
guest ok = yes

Some explanation is definitely needed. Firstly while [Data] allows guests and the share is not read-only, guests will not be able to write because of the file system permissions which only allow the owner and group to modify files. You may want to create a public folder with permissions 777, which would allow guests to copy files on to the server. Or you may want to set up a another share and change guest ok to “no” for the data share.

The backup drive is read-only because I don’t want anyone to modify files on the backup drive, and file system permissions are no protection due to it being NTFS (Linux doesn’t and really shouldn’t support NTFS permissions). It would be too easy to go back to a previous version of a file and accidentally save it, and I’m not sure how Back In Time would handle a backed up file being newer than the source. Altering a file in the backup would also change every linked copy, so basically writing to files on the backup volume is bad mmkay? It is shared only to make restoring previous versions convenient.

NFS?

I haven’t covered setting up NFS here, as Mum and Dad both run Windows machines. If you do decide to setup NFS it’s fairly straightforward, but to save yourself some pain make sure the user ID’s match on all machines – NFS matches uid and not the actual user name. Off the top of my head the packages to install are nfs-common and portmap, and the config file to modify is /etc/exports.

A final note on samba passwords

I have found that a login to the local machine is required in order for the samba password to be synchronised with the unix password. If after logging in you still can’t access samba shares with that account, use the command smbpasswd to set the password, e.g.:
sudo smbpasswd mum

If you need to restart samba you can do so with the command ‘service smbd restart’.

Next section – Configuring the backup system

Running EpNamer on Ubuntu

EpNamer is a useful tool for renaming TV episodes. It’s not open source, but it is written in .NET and the developer has released a version that works with mono.

To run it on Ubuntu, you need to download the Mac OSX version from epnamer.com, mount the image, copy the application to your home folder and install some mono dependencies.

This would be quite complicated via gui so I figure 6 lines at the command line is going to be easier for most:

wget http://www.epnamer.com/?dl=EpNamer1.4.4.dmg
mount -o loop -t hfsplus ./EpNamer1.4.4.dmg /mnt
mkdir ~/epnamer
cp -R /mnt/EpNamer.app/Contents/Resources/* ~/epnamer
sudo apt-get install mono-winforms*
mono ~/epnamer/EpNamer.exe

If anyone’s found a better tool for renaming media files on Linux I’d be keen to hear about it! Unfortunately I couldn’t get the current Windows release of EpNamer (1.4.5) working.

Configuring the raid array

This article is part of a series about setting up a home server. See this article for further details.

Most of this can actually be achieved with the GUI these days, RedHat’s disk utility has improved a lot since the version that was included with karmic. To load it go to Settings > Administration > Disk Utility.

Make sure all the disks to be used have no partitions on them, then go to Create > Raid array.
512KiB was the default stripe size and is what I used initially, but I later switched to a 128KiB stripe. The example below uses a 512KiB stripe.

Also, it is a good idea to reduce the size to 128mb or so below the max capacity. Drives of the same advertised capacity can vary slightly in actual size, and if you replace a disk you don’t want the rebuild to fail because the drive is a few megabytes too small.

After selecting the disk members and pressing create the array will be in a “degraded” state until all the disks are synchronised. The amount of time it takes depends on the size of the array, but I’d suggest letting it finish before proceeding, I received errors in disk utility if I tried to create a partition too soon.

Also note that I’ve used the GPT partitioning scheme. GPT is designed to replace the old MBR scheme which has some limitations and can be restrictive these days, so I elected to use GPT. MBR is a safer option if your array is less than 2TB. If you use new hard drives with 4096-byte sectors such as Western Digital “advanced format” drives, you should use GPT. The use of GPT means that fdisk cannot be used, because it doesn’t support it. In its place we use parted and gdisk (“aptitude install gdisk” if you don’t yet have it).

Creating a partition on the array

The only slightly tricky part is creating a partition that is aligned with the raid stripe. You can’t create a partition starting at sector 0 because that’s where the partition table lives, so disk utilities will always offset the start of the first partition. However in order to get the best performance you need to align the partitions with the stripe size.

After creating a partition with disk utility I was greeted with the following:

It appears that disk utility isn’t quite intelligent enough to create properly aligned partitions on its own just yet.

In my case the partition was offset by 17.4KiB, which doesn’t align with the stripe size of 512KiB:

I found the easiest way to get a properly aligned partition was to create a partition in disk utility with no file system, and note the offset given to you by the warning message that appears after the partition has been created. Then, simply delete the partition and use gdisk to create the partition with the original offset plus the figure given to you in the warning.

To get the existing offset, run “parted /dev/md0″, type “unit b” to switch the working units to bytes and type p to print a list of partitions on the volume.

In my example the original offset was 17408 bytes (34 sectors * 512 bytes/sector), and the partition was out of alignment by 506880 bytes. This means it should actually be at byte 524288, which also happens to match the stripe size of 512KiB.

gdisk works in sectors however, so we need to divide the result by 512, giving sector 1024 (524288/512=1024). So in this example you would run gdisk, type n to create a new partition, enter 1024 for the first sector, and accept the default for the last. For the current type I used code 0700, which is “Linux/Windows data”.

The second time around I used a stripe size of 128KiB (it seemed more “normal”), and with this stripe you would offset the start of the partition by 256 sectors (131072 bytes). I don’t believe the stripe size matters much – larger stripe sizes probably perform marginally better with larger files but I wanted something more general purpose as there will be a lot of small documents as well as large photos.

An example of creating a partition in gdisk follows. Note that I’m using /dev/null in this example to avoid destroying my laptop, you would probably want to use the actual blank raid array, which is likely to be /dev/md0. You can delete partitions with gdisk (with d), but for the newbies it’s probably easier to delete any previous attempts in the gui disk utility first.
sudo gdisk /dev/null
GPT fdisk (gdisk) version 0.5.1

Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-18446744073709551582, default = 34) or {+-}size{KMGT}: 256
Last sector (256-18446744073709551582, default = 18446744073709551582) or {+-}size{KMGT}:
Current type is 'Unused entry'
Hex code (L to show codes, 0 to enter raw code): 0700
Changed system type of partition to 'Linux/Windows data'

Command (? for help):

Creating the file system

Next create the file system on the partition:
mkfs.ext4 /dev/md0p1

I haven’t yet investigated tuning an ext4 partition for raid 5 arrays. There are probably some tweaks to be made here, please comment if you have a suggestion.

Autostarting and mounting the array

At this point you should have a working raid array, shown as running in disk utility and an ext4 partition on the disk. If you reboot you will notice that the array doesn’t start automatically, you have to go into the disk utility and start it manually each time.

Getting it to start by itself also requires falling back to the command line. Make the array is running before proceeding.

First we need to get the config line:
mdadm --detail --scan
You should get a line like the following:
ARRAY /dev/md0 level=raid5 num-devices=4 metadata=01.02 name=:Raid5 UUID=7198dc4b:0b61431d:99f71126:c2d41815
Paste this line into /etc/mdadm/mdadm.conf, below the line that says “definitions of existing MD arrays”. Reboot, load disk utility and you should see that your array has been started automatically.

Automounting the file system on the array simply involves putting a line in /etc/fstab, which unfortunately every technical Linux user still needs to know about (it seems to be the most prominent legacy hangover, but it’s still a pretty good system when you know how it works). My line is as follows:
UUID=47b4d934-c0c3-46c6-b9f7-09c1c7a94774 /media/data ext4 rw,nosuid,nodev 0 1
Note that the UUID here is the UUID of the partition and not the raid array. To get the UUID of your partition, use the command “sudo blkid” and note the UUID of the partition on your raid array, which should be /dev/md0.

Another useful command is “cat /proc/mdstat” which gives some info about active arrays.

You shouldn’t need to create the mount point in /media, in my experience this happens automatically.

Next part – Creating user accounts and setting up the file shares

OS and package installation

This article is part of a series about setting up a home server. See this article for further details.

I did a simple install of Ubuntu using the alternate media written to a USB stick. You could use the ordinary desktop CD, or Ubuntu server (but you will need to install a lot more packages on the server version). I did not configure the raid arrays on install. The reason for this is that I didn’t have all the disks ready, but I didn’t want to install OS data on them anyway.

Installing packages

For media playback, the medibuntu repository is essential. See the Medibuntu site for more info, but the commands I used (lifted straight off the Medibuntu site) are:
sudo wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && sudo apt-get --quiet update && sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && sudo apt-get --quiet update

sudo apt-get --yes install app-install-data-medibuntu apport-hooks-medibuntu

Next I installed some additional software:

aptitude install openssh-server backintime-gnome gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg ntp samba winbind libpam-smbpass apache2.2-bin lib-apache2-mod-dnssd mdadm

Some of these warrant explanation:

  • The gstreamer plugins packages are codecs, which may or may not be legal in your country depending on its stance on patents (like anyone really pays an attention to that). However you need to ensure you have codecs available for any media you wish to play back.
  • ntp is for time synchronisation, which isn’t strictly necessary in a home environment but I like to have an accurate source of time on any network.
  • samba, winbind, libpam-smbpass, apache2.2-bin, lib-apache2-mod-dnssd are all related to file sharing. Winbind allows the system to lookup other hosts with Netbios, which Windows uses on small networks without a local DNS server (like most homes). I don’t feel it is necessary to provide a DNS server in a home with non-technical users, and to me it is for a network appliance such as an ADSL router to handle anyway.
  • apache2.2-bin and lib-apache2-mod-dnssd are required for the “personal file sharing” control panel in Gnome to work. The developer has stated that the Apache won’t be required in the future (see this bug report for details. You may not need this functionality for your home server, but I thought it was nice to have in case it’s needed.
  • mdadm is for raid
  • gdisk is for partitioning GPT partition tables. If you prefer to stick with MBR partition tables you don’t need this

Installing NeatX

NeatX is a free implementation of NoMachine’s nx server, originally written by Google for an internal project. It seems to be the easiest and quickest way to get going with Windows RDP equivalent functionality, in fact it’s just a few lines:
add-apt-repository ppa:freenx-team/ppa
aptitude update
aptitude install neatx-server

Next simply download the client from nomachine.com and away you go. There are a few rough edges and I have encountered errors on reconnect, but it’s good enough for me. It is much more efficient than VNC, and the speed increase is more than enough for me to put up with the bugs.

Internal Errors on reconnect

If you encounter internal errors when connecting, delete all directories from /var/lib/neatx/sessions. For some reason it isn’t always cleaning up properly, even if you logoff.

Next part – Configuring the raid array

An Ubuntu 10.04 Home Server

I’ve recently been setting up a home server for my parents using lucid. While it’s not quite a point and click setup process, the process is a lot more streamlined than it used to be.

They have an individual computer each running Windows 7 and, one laptop between them running XP. Mum is also a photographer and generates a large amount of data. Dad also generates a fair bit of data, less than Mum although he does do the occasional home video.

Backups are an ad-hoc affair. Mum has three hard disks in her computer which she manually copies files between and tries to ensure she has two copies of everything. Dad has a portable external drive which he backs up to infrequently. Between them, neither is confident that they’d get all their data back in the event of a disaster.

Dad also liked how my HTPC (running XBMC) worked, and decided one of those would be nice too. So I decided to setup a home server for them and solve all their computer problems. Well, almost.

I started writing this as a single article, but it got a bit long so I’ve decided to break it up into a series. This first post is an overview, the links to the other posts are at the bottom of this article.

I’m assuming a fairly good degree of technical knowledge here, but if there are any gaps you feel I should add please feel free to leave a comment. I am aiming this at a reader who is familiar with Linux and Ubuntu, has installed software with apt-get or Synaptic, is comfortable with using the command line, and understands the implications of using raid5.

Overview

This home server will perform the following tasks:

  • Play music and video via the TV
  • Present a file share to the network, with individual folders for Mum and Dad
  • Backup the contents of their folders nightly to an external hard drive
  • Provide a GUI-based remote administration interface
  • Monitor backups and the raid array, sending emails to both Mum and Dad if something is amiss

Software that needs to be configured to perform these tasks:

  • MDADM for RAID
  • Xbox Media Center (XBMC) for media playback
  • Samba for file sharing
  • Back in Time for backup
  • NeatX for remote administration

The main boot device in this case will be an IDE compact flash card. I did this partly because it makes recovery easier (just write an image to a flash card rather than a whole hard drive), but mainly because it frees up a SATA port!

The hardware components for this particular HTPC are:

  • Gigabyte M85M-US2H motherboard
  • AMD Athlon II 250
  • 2gb DDR2 ram
  • 4x640gb Western Digital 6400AAKS hard drives
  • 1x1TB Western Digital Green
  • 1x2TB Western Digital Green (in external esata case)
  • 4 Raidon/Stardom hotswap drive bays
  • IDE Compact Flash adaptor and 8gb 133x CF card

A note on raid

The 4x640gb drives are configured in a raid 5 array. Personally, this is about as large an array as I would trust Raid5 to, the future is redundancy at the file system layer, as ZFS and Btrfs are capable of. ZFS can’t be used in the Linux kernel and Btrfs isn’t even close to production-ready yet, so for now I believe Raid is still the most sensible option. But if you’re reading this in 2012, you should probably be using Btrfs instead.

Storage

The 1TB hdd is just a single disk for media to be played back on the TV. Anything here is considered replaceable (think of it like the internal HDD in a MySky or TiVO box), so it won’t be backed up at all.

The 2TB hdd is the backup drive. Each night the entire raid array is backed up to it with Back in Time, configured to take snapshots. Since it uses rsync, the backups are incremental and shouldn’t take more than a few minutes to run, depending on how much was changed during the day. Obviously as the array nears capacity fewer snapshots will be able to be kept, and once it does the idea is to replace the 2TB backup hdd with a new one, keep the old one as an archive, delete any data from the raid array that is no longer current, and start again with a fresh clean backup disk. Hopefully by then it will be a 3 or 4TB disk and they can keep more snapshots!

The file system on the backup HDD will be NTFS. This is because it supports hard links and is readable by the Windows machines, which is important for my parents when they go to retrieve files from the archive.

Final notes before we get to the nitty gritty

I had a bit of trouble getting the drive bays lined up with the ports that the OS reported they were attached to. This is important because if mdadm tells Dad that the sata disk on port x has failed, I need him to be able to know that it’s the disk in bay x. Unfortunately on the motherboard I used, Ubuntu assigns them like so:

0 – 1
1 – 3
2 – 2
3 – 4

(motherboard port – ubuntu port)

So while your motherboard may be better designed than mine, don’t assume they are in the same order. The links to the follow-up articles are below:

N900 – 3 months on

My last on this blog was a review of the Nokia N900, and that was a whole quarter ago. The last 3 months have been hectic to say the least but I now have a lot more free time!

So how has the N900 turned out?

In short, OK.

My conclusion still stands – the N900 is not a suitable phone for most people, and it probably isn’t the best phone for me either. For developers of applications for Nokia’s QT platform it’s the reference device and thus an essential piece of kit. But the general public are better served by the existing Symbian range.

So what’s good and what’s bad?

The Good

  • The full Linux experience. An example – a friend of mine uses mac address filtering on his wifi. On a closed phone I would need to download an app to get the mac address (a chicken/egg dilemma), so he could allow my device access. On the N900: ‘sudo gainroot’ followed by ‘ifconfig -a’. SSH access is handy too.
  • Quake 3. OK so it’s not something I use often, but running what was considered cutting edge graphics 10 years ago (requiring high end 3d hardware) on a device that fits in my pocket is plain cool.
  • Skype. This is still the best phone for Skype bar none.
  • Contacts – I’ve yet to see a mobile OS do this better than Maemo (although by many accounts Palm’s WebOS is a possible contender). Being able to aggregate contacts from multiple sources (Google Talk, MSN messenger, Skype) and treat them as one is really powerful, and the Hermes app which updates the info from your social networks is just icing on the cake.
  • The openness of this phone will ensure that the device will be useful long after it stops being a cutting edge communication or my primary mobile device. Future MeeGo versions will probably be backported by the community (ala MER), and failing that I’m sure one of the generic Moblin/MeeGo distributions will do the trick.

The Bad

  • Absentee PR1.2. This update was meant to be released a month ago with many improvements, but it still hasn’t been released (due to a late problem in the QA cycle according to a unknown source on the maemo forums). And a little boy waits!
  • Music stuttering. Apparently they improved this in PR1.1, but high cpu usage still causes media playback to suffer.
  • Video calling is still missing, although this is apparently coming in PR1.2 (rumor has it that Skype will work with it too).
  • The touch screen hardware is accurate and works really well, but the software sometimes doesn’t register touches properly. Two examples are the media player desktop widget, and the close button of some notifications on the dashboard.
  • Problems syncing calendar and contacts with Google – apparently it works if there are less than 5 changes… The fault is probably Google’s ActiveSync implementation which is known to be quite poor.
  • It’s a brick – almost as thick as an N95, but much wider and heavier.

The Ugly

  • Being a tester for Nokia
  • Obsoleting Maemo for MeeGo just a month after I bought it

So my recommendation would be to avoid this phone unless you’re a QT developer or open source enthusiast. I don’t actually regret the purchase due to the long term utility, and it was still significantly cheaper than the best alternative (Nexus One). MeeGo is going to be a Johnny-come-lately in a crowded mobile OS market, but being the most open I hope it gains traction.

Nokia N900 Buyer Review

I’ve had to think long and hard about this review. The N900 is unquestionably flawed, but it’s a leading edge device, and prescient in so many ways. It shows promise of things to come, and that promise is exciting. So does one knock it as a failed attempt at reclaiming the smart phone crown, or praise its foresight and anxiously await N900+1? Considering Nokia’s stance on the device it would perhaps be unfair to call it an attempt to retake the smart phone crown, as they never positioned it as such. But it does not deserve unreserved praise either.

To get my own personal bias out of the way – I want to love the N900. It’s a Linux-based smart phone built on open source software that doesn’t try to hide its roots. I’m a Linux geek and open source enthusiast. I dislike walled gardens such as the iPhone App Store and the artificial restrictions placed on the iPhone, so a 3GS was never an option. Android is a bit too tied to Google’s services (a company which already knows much more about me than I would like to admit), and while Nokia are certainly trying to push their Ovi suite of services, they would be foolish to make it difficult for you to use competing services. My credibility as a reviewer drops somewhat given my lack of experience in using Android, and quality time with an iPhone. I’ve had a play on devices owned by friends, but that’s not enough to get to know the ins and outs of a device.

So it’s with a bit of trepidation that I review the N900. My only real frame of reference is the aging Symbian S60 – an OS that has served us well, but is now past its use-by date and hardly the ideal operating system to compare it to.

Physical Presence

Nokia have many, many years of experience in building handsets, and it shows in the N900. It’s well constructed, the buttons have a good tactile feel and the screen operates well. Other reviewers have commented that the slide out keyboard doesn’t feel as solid as other handsets, including Nokia’s own N97. Unfortunately not having used other handsets with slide out keyboards I can’t comment on this, however it feels solid enough to me. There’s no wobble to speak of and it makes a reassuring click when slid shut.

There’s a little stand at the back, which is so flimsy as to be almost worthless. It might be useful if you want to use it to watch video (a 3 inch screen is too small no matter how high the resolution), but any interaction is out of the question as the pressure required to register a press feels similar to what it might take to break the stand.

Perhaps the biggest downside is the thickness and weight. I’m coming from a Nokia N78, which at 101g is rather svelte by smart phone standards, in fact even today it’s hard to think of a smaller device with comparable features. The surface area on top is very similar to other smart phones like the iPhone, but the N900 is the chunkiest handset I’ve used since I had a Nokia 5120 back in 1999 (the link is to the 5110, but the 5120 was physically identical, it just worked on Telecom’s old 025 network instead of GSM). In fact at 181 grams it weighs even more than the 5110 (170g), and makes my E61i seem positively light (which at 150g is really not light at all). The iPhone by comparison is 135g.

This is not a device you take everywhere in your pocket without a second thought, this is a device you leave behind when you don’t need to carry the internet with you. I wouldn’t dream of taking it with me on a night out, so it looks like I’ll be keeping a second phone around to swap the SIM… which reminds me of a point about SIM cards which I’ll come back to later.

Operating System

Just a few years ago the operating system running on a handset was all but irrelevant – now it’s the bullet point that determines more about the capabilities of a phone and how it operates than anything else. If you’re reading this you’re probably aware that the N900 runs a Linux-based operating system called Maemo. A full review of Maemo is way beyond the scope of this article, suffice to say it is the main strength of the N900. It is a proper Linux distribution which is designed for small touch screen devices, is open source, and looks positively gorgeous.

Desktop

The first thing you need to know about Maemo is that it’s currently very much a landscape OS. While most handsets operate vertically, Maemo devices will have you using them horizontally 90% of the time. Currently the only two official applications that support portrait mode are the Phone/Dialer and the Web Browser, although in the case of the web browser this is a semi-official hidden function! (you need to press Ctrl-Shift-O to activate it).

I find the rotation animation a bit kooky (for want of a better word). It doesn’t seem to bear any relation to what’s actually happening, unlike the iPhone’s rotation animation. Portrait mode feels like an afterthought, and this will need to change for more mainstream devices.

The desktop gives you four virtual desktops, and they work similarly to those on a standard Linux desktop, except they’re OpenGL accelerated and you move between them by swiping your finger across the screen. I found four to be too many, so I disabled one only to find it had removed the one that had all my icons on it. Reinstating it did not bring the icons back either, it was blank! So if you don’t want 4 desktops, be sure to disable any unwanted ones before you start loading icons and widgets onto them.

Connectivity

The OS intelligently switches data connections when appropriate, i.e. if a configured wifi connection comes within range it will disconnect the HSDPA data connection and use the much cheaper wifi. The first time you connect via HSDPA data it asks whether you want to use it automatically when no wifi connections are in range, which is a very nice touch. If you do not grant permission you need to manually initiate the connection to use it, which I find to be a big improvement over Symbian. On S60 you had the choice of allowing everything to use it automatically or manually confirming each and every access, which was positively annoying.

The desktop environment supports signing in to several types of accounts. As shipped these include Ovi, Skype, Google talk and SIP. If you install some extra plugins from the development repository, you gain support for AIM, Facebook, Gadu Gadu, Groupwise, ICQ, Jabber, MSN, QQ, Sametime and Yahoo (some of these I’d never heard of). The accounts you setup integrate with some of the more important built-in applications, notably “Phone” and “Conversations”.

Overall the connectivity of this device is quite outstanding, and best of all it does not restrict what you can do over particular connection types, unlike the iPhone Skype debacle.

Applications

Not surprisingly for such a new platform, applications for the N900 are a bit thin on the ground (to say the least). The Ovi store is a bit of a joke at present, as illustrated by the fact that “Proverbs 3:5,6 – MMS” is on the “recommended” list! One has to wonder what an application has to do to get recommended, as this appears to be an app that sends MMS messages on a device that doesn’t support MMS (maybe this is inaccurate, but I’m not about to spend USD 1.00 to find out).

The selection of free open source software is quite impressive, but many of these are direct ports of software that was designed for other platforms. Some things just weren’t designed to work on a small touch screen – two notable examples being Scummvm and DOSBox. Still, if you want to put in the time you can use them. Some software was designed for the older Maemo tablets (N770, N800, N810), and since those are similar devices these applications can be a bit more usable.

An OS is only as good as the apps that run on it, so in the sections below I’ve made some comments about some of the more important applications you’ll use on Maemo.

Phone

The N900 is a very service-agnostic device which is fantastic. In the phone application, SIP and Skype calls are treated with equal prominence to standard telephony calls. For us in New Zealand this is useful when you’re at home, but when roaming about it’s a bit ahead of the curve. Using Skype over 3G isn’t practical yet as the data costs are a bit high, but in the future this will change.

Notably absent is video support. I was rather disappointed by this, as the idea of Skype video calls on the N900 appealed greatly. Traditional video calling over the carrier network is also unsupported. This is a very notable omission given the number of other handsets support it, and the hardware is there (the N900 has a front facing camera). Reading the forums I get the impression that this is a high priority for Maemo, so I would expect to see it in an update later in the year. Hopefully we don’t have to wait until Maemo 6…

There have been some reports of video calls over Google talk working, but I’ve never used video chat over Google Talk – I want Skype!

Contacts

I love this. The Palm Pre introduced to us the idea of an integrated contact list which aggregated contacts from multiple sources. The Contacts application in Maemo lays the foundation for a similar system, but to really make it sing you need a third part application called Hermes.

Hermes is a small app that matches your existing phone contacts with your contacts on Facebook or Twitter. Once matched, it updates the contact details for them, and downloads their profile pictures to represent them in your phone book.

It seems to be really conservative and doesn’t match any that aren’t a clear match, but you can see the unmatched contacts in your phone book and manually link them to online profiles. Be careful though, as at present Hermes does not support removing the links, so you will probably have to delete and recreate any contacts you mess up.

Below is an example contact screen (with the obvious editing out of personal details). On my Symbian phone, this contact was a simple contact with a cell phone number and home phone number. The picture was pulled from this friend’s Facebook page, and the Google Talk details were merged from my Google Talk contact list. Off screen below are web page and birthday information from Facebook, and MSN account details merged from my MSN messenger contact list.

It does take a bit of manual merging of contacts from various sources (I had MSN, Google Talk, Skype and of course legacy phone book entries), but the effort is well worth it as you can then pull in the supplementary information automatically from Facebook with Hermes and have a truly unified contact list. But more importantly you have an easy way to contact them through any available protocol.

Conversations

This replaces the “Messaging” app on Symbian devices. It operates completely differently, but definitely in a good way. As the title hints at, messages are organised into conversations, and these conversations can be IM sessions or SMS messages. In my opinion it’s rather brilliant, and works in such a way that you don’t have to care about what service you’re using – the conversation takes the lead here.

Yes, you can now receive malmare IM messages on your cell phone!

Other than that it is fairly basic but does the job without getting in your way. It doesn’t handle email, that is reserved for a separate email application.

Web Browser

The web browser has been reviewed extensively on other sites. While it is one of Maemo’s strengths, to be perfectly honest I don’t find it that exciting. Web sites are generally designed to be viewed on desktop web browsers are don’t work well with touch screens, particularly 3 inch touch screens. You really have to use the stylus if you want to click on any links, and to me mobile computing should be done with nothing but your fingers. Sites that are designed for mobile browsers are generally portrait orientation and designed for much lower resolution than 800×480, so you end up with tiny text on the left side of the screen. Anything else is designed for a much larger screen, so Maemo is in a funny middle ground.

Of all mobile phones it undoubtedly gives the best experience on normal sites that were designed for desktop use, but the overall experience is still quite poor in my opinion.

Once more web sites are designed for 800×480 pixel 3 inch screens I might be inclined to revise my position, but for now I’m placing web browsing on the N900 firmly in “only when you need to” territory.

Maps

This is a bit of a disappointment. Ovi Maps on the N900 is online-only, that is you can’t preload maps like you can with the Symbian version. I can somewhat understand the rationale behind the decision given that connectivity is increasing, and the main competition (Google Maps) is all online, but I don’t have to like it. The other reason behind this decision may be that you can’t provide up to date business listings/advertisements without being online, or is that just my cynicism showing through.

I have tried it out, and the experience was quite positive once I got used to the user interface. I couldn’t find any graphical turn by turn navigation, but routing worked reasonably well, and gave me an accurate list of directions.

So overall, mapping and navigation on Marmo seems to be a step backwards. S60 had Nokia Maps, Google Maps and Garmin Mobile XT which were all quite good, although I hated how Nokia Maps randomly rotated the screen when you weren’t moving (it caused me to make a wrong turn on at least one occasion). Maybe I will give Ovi Maps on the N900 a better shot, and the open source Navit looks promising as it can use Open Street Maps. It is a little tricky to configure though.

Music/Media Player

In short it’s attractive, easy to use and it works.

The music player on Symbian (at least on my N78, which isn’t all that old) is quite frankly poor. It’s unstable (easily tripped up by slightly incorrect files), doesn’t play anything other than the most basic formats (MP3/WMA/WAV), and is slow to operate. The Media Player on Maemo is a huge breath of fresh air, and it had to be given the heritage of the competition – the iPhone is an outstanding media player, but in my view Maemo stands up to it very well.

So what’s good about it? The interface is built for touch screens. It supports a broad variety of media formats which can be extended via plugins – particularly OGG support, which is in the stable repository. It supports UPNP shares (of questionable utility right now but we’ll see…). It has dynamic playlists, including an extremely useful “Never Played” option – which means I never have to listen to the same thing twice, and also recently added etc. Creating and saving playlists is extremely easy.

Out of the box the FM transmitter is a little weak – I had more interference problems than I did with my N78. The frequency selection also isn’t as granular – on the N78 you could choose a frequency to the nearest 0.5mhz but on the N900 it’s the nearest 2mhz. There is however a script (FM-Boost) and desktop widget called “Simple FMTX desktop widget” available (in the extras-devel repository, actually it may have been promoted to extras-testing by now), which helped a lot. This boosts the transmit power, and it made a big difference for me. Whereas before it was barely usable it’s now almost flawless.

If you’re wondering about a good frequency to use, I recommend checking out wikipedia – I found a list of radio stations in Auckland. From there I found that 105.7mhz is rather isolated, and that frequency has been working very well for me. The default (107.9) is a bit too close to Trend FM, which seems to play annoying loopy music that was giving interference of a regular staticcy rhythm.

Firefox

The “killer app”? Well maybe not but it’s the closest thing the N900 has to one. Firefox mobile doesn’t do flash, which in my opinion is a very. good. thing. The interface is noticeably slower than the default Nokia web browser, although javascript performance is reportedly up… Personally I prefer snappy browser controls to 30% faster javascript.

Firefox mobile will only improve, but for a more detailed look check out Arstechnica’s write up.

Misc

There’s a flashlight! It’s in the extras repository, and is simply called flashlight. One thing that bugged me about the N78 is that you simply couldn’t use the camera’s LED flash as a light unless you also made a video. Fortunately you now can if you install this app on the N900, just remember to open the lens cover or the option doesn’t show up!

Battery Life

Poor, this is simply not good enough. Coming from the E61 which gives me about 4 days of regular to heavy use and the N78 which gives between 3 and 7 depending on whether I use the GPS and music player, the N900s battery life is a massive, if not totally unexpected, disappointment. With my current desktop setup I’m getting just 1 and a half days of light use – with maybe a couple of hours of interaction thrown in there.

I charged it almost exactly 24 hours ago, and the battery is at 40% after about 30 minutes of RSS reading, 10 minutes of IM/texting, and 2 hours of music playing with the FM transmitter.

Choice of desktop widgets can have a big impact and the number of accounts you connect, whether you use wifi etc. Yes the poor battery life is my partly fault, but it does highlight the fact that we need to be able to perform some things more efficiently before they become practical in a hand set.

Camera

The camera is standard fare 5MP – nothing to write home about. The sliding cover is appreciated vs the N78 which had no protection whatsoever. Subjectively I think the photos are a noticeable improvement over the N78 (which is 3MP) as well.

Conclusion

The N900 is not for everyone. In fact I’d go so far as to say it’s for hardly anyone. Business users will be put off by the immature software stack and poor battery life. Casual consumers will be put off by the size, weight and lack of applications. This is a phone for geeks that like to tinker and live on the bleeding edge. It’s the best open source phone there is, and the only phone I know of other than the Open Moko that has no “anti-features” (artificial restrictions) built in. But just like running Linux on the desktop, these freedoms do come at a price, and that price is applications.

I have no doubt the software stack will improve immensely over the next few years, but Maemo has a tough battle on its hands against Android and iPhone OS.

Remember the comment I made about SIMs earlier? Well one of the biggest annoyances is that I have to carry two phones. Why is this? Because I have a personal mobile number and a work mobile number. But why does having two phone numbers mean I have to carry two devices? Because they’re tied to the SIM card, and each SIM card needs a contract. Effectively Vodafone is earning two incomes from me.

The beauty of devices like the N900 and those that will come after is that it brings sanity to mobile communications. Work calls can all be done over VoIP (when they get around to deploying it), and since the N900 supports multiple accounts I can link all my phone numbers to one handset. I will no longer have to carry two devices, just one that can connect to my companies SIP server and my personal Skype account. I wouldn’t have to swap SIM cards around when switching to a smaller device – I can just sign on to my VoIP account from the more compact handset, while still keeping the larger and more capable handset for work.

The N900 supports multiple email inboxes and multiple calendars – keeping work and personal data distinct while giving the convenience of having everything in one handset. It would even be possible to automatically sign off from your work’s VoIP server at a specific time each day – you wouldn’t even have to remember to switch off your phone!

So while imperfect, the N900 has given me a glimpse of the future of mobile communications, and I really, really like what I see. The problem is, I can’t take advantage of it yet. Purchasing one today is probably not the smartest move in a practical sense, but it sure is cool, and the gadgety factor can’t be ignored. The N900 is one hell of a device, but unless you can make use of its VoIP features it’s a bit ahead of its time.

Mozilla Prism – what’s the point?

Mozilla prism is a framework for packaging web apps as applications. It uses the gecko rendering engine and is basically Firefox without the user interface. My reaction upon first reading about it a couple of years ago was as per the title – this is just a web browser with a restricted interface, and thus offered no advantage over a simple desktop url shortcut.

But there actually is a good reason to use prism, and that is privacy. Prism uses seperate profiles for each application, thus if you are logged in to Gmail, you do not have to be logged in while using Firefox and have Google track all your searches in addition to indexing your email. You can use Facebook in prism and not have to worry about third party sites accessing your profile, like the much-maligned beacon “service” facilitated recently.

In short prism affords a lot of convenience for those of us that like to keep their web identities segregated, but if you’re really really paranoid about privacy then Gmail and Facebook are two sites you probably shouldn’t use.

On Ubuntu you can install Gmail for Prism with the following command:

  • aptitude install prism-google-mail

For Facebook:

  • aptitude install prism-facebook

Once the prism package is installed you can also convert any site into a prism app by going to Tools > “Convert Website to Application”.