Switching to twentyten

I’ve just upgraded to WordPress 3.0 and switched to the brand new default theme called twentyten. If you’re reading this in your feed reader, come by and check out the new look.

I’ll update my picture (people seem shocked when they see it after meeting me in person!), and modify the menu using the new menu editor. I’ll try to make navigating a little easier. If you haven’t already tried it, I recommend the new version of WordPress.

Regenerating nautilus thumbnails

Sometimes nautilus will try to generate a thumbnail for a video file while it’s downloading. Then  nautilus remembers that it tried, and failed, to generate a thumbnail for that file. Once the file has finished downloading, the thumbnail remains broken. I’ve had this issue for a while, today I chose to find a solution.

I found this post by Barak Korren. Barak wrote a short nautilus script in python to allow the easy deletion of a thumbnail in Nautilus. Here’s a step by step guide to getting it working.

Download this file and put it into your ~/.gnome2/nautilus-scripts directory. The script is by Barak, I uploaded a plain text version here to make it easier to download. Make the script executable, you can run chmod +x ~/.gnome2/nautilus-scripts/delete_thumbnails.py in a terminal to do this. Now go to that directory in Nautilus, and you’re in business.

To test, right click on a file with a thumbnail. You should see a new menu, Scripts, under which you’ll see “delete_thumbnails.py”. Click that option and the thumbnail will be deleted. Press F5 to reload the folder in nautilus, and you should see a new thumbnail generated.

Thanks for a such a handy script Barak.

Installing lyx without the bloat

For a few months now I’ve been researching programs to write in. I have OpenOffice, I tried AbiWord, I use gedit for text files. They’re all good programs, but they’re not what I want to write in. I want something ultra simple. Very basic formatting, spellcheck, light quick load time. The best option I found was Tomboy, a sticky note application. It supports very simple formatting, has a spellcheck, and is dead simple. It loads almost instantly. But, it saves notes automatically in its own format. There’s no way for me to save different versions, choose a file name or location, etc. It’s fine for the writing, but I need to go elsewhere to save.

In the last couple of days, I discovered gwrite. It’s a very simple WYSIWYG HTML editor. It has the potential to be exactly what I want, but it’s very young software and still has a few usability bugs. I’ve reported them to the program’s author, so maybe it’ll improve in time. I might even look at the source code and see if I can provide some patches myself.

But, that’s not the point of this post. This post is about lyx, which is a seriously cool application I’ve just discovered. It’s a “writing tool”, not a word processor. It’s a tool designed for scientific and other authors to simply write text. It’s based on an underlying technology called LATEX. As I understand it, and I’m completely new to this whole thing, LaTeX allows an author to just write. The layout of chapters, titles, indentations, bullet points, and all that jazz, is handled by LaTeX macros. What does that mean? Well, I think it means I just write, then lyx, LaTeX and TeX make it look beautiful.

So, all excited, I decided to install lyx. This is where I hit a problem. I was prompted to download 438MB of data and use 745MB of disk space. That’s outrageously huge for a single program. I was blown away, it makes installing lyx many times larger than OpenOffice. I was strongly intrigued by what took up so much space, so I had a little sniff. It turns out that more than 70% of the download size and almost 60% of the disk space is used by documentation. Mostly, documentation for underlying applications which I didn’t specifically choose to install, they’re required to make lyx work.

Being on a slow internet connection, I decided waiting the day or two for 438MB to download was just too much. There must be another way. A little research later, I found my solution in a program called equivs. Equivs is a pair of tools to create shadow or dummy debs. In my case, this meant creating a dummy package to make apt think that I had already installed the massive collection of documentation that was necessary to install lyx. Thus I was able to install lyx by downloading only 117MB of data and using only 302MB of disk space. Still astronomically huge, but less than half of what I was originally facing.

And so, onto the point of this post. How does one do that? If you want a simple answer, here it is. Step 1, install this file. Step 2, install lyx as normal. Bingo, jobsagoodun. :-)

For those who are interested, I’ll explain the process on Ubuntu 10.04. Install equivs in the usual way (sudo apt-get install equivs will do the trick). Now create a new directory, I called it equivs-texlive-dummy-docs. In that directory, run equivs-control texlive-dummy-docs.ctl. Now edit the newly created file. Mine looked like this. Next run equivs-build texlive-dummy-docs.ctl. This command creates a new file called texlive-dummy-docs_1.0_all.deb. That file can be installed with sudo dpkg -i texlive-dummy-docs_1.0_all.deb.

It took me a few hours to put all this together. Hopefully if you’re facing the same challenge, you can install one file and be done. :-)

Update: I discovered that all these packages are installed because apt is configured to install recommended packages by default. I tried installing lyx without any of the recommended packages using sudo apt-get install --no-install-recommends lyx, but previewing documents from lyx didn’t work. Instead I reverted to my equivs texlive-dummy-docs package. If you feel passionately about this topic, as I do, please chime in on this bug.

Prepaid ICE sim card in Costa Rica

Yesterday I bought a prepaid ICE sim card in Costa Rica. Last time I was in Costa Rica they didn’t exist. Then they were available, but very hard to find I read. I walked into a shop called abCelular in San Isidro, and after a bit of confusion, walked out with a 2500 colones sim. Yay. :-)

They asked for an ID card. I offered my UK driving license. That was fine, except their computer would only accept numbers in the “identification document number” spot. So instead, I gave them my passport, where the document number is only digits. I probably could have pushed the issue with my driving license, maybe they would have just entered the numerical part or something, but the passport seemed easier, and I was in a hurry.

The transaction was painless. I showed no phone and they only looked at the photo page of my passport, but wouldn’t have seen it at all if I’d pushed the driving license. It seems that prepaid SIMS are finally available in Costa Rica… :-)

Now if only I could get service inside my house…

CS Greasy on Launchpad

I created a project on Launchpad for the first time today. It’s called CS Greasy, a collection (or soon to be a collection) of Greasemonkey scripts related to CouchSurfing. It took a little time to figure it out, but thanks to Kasper’s help, I think we’ve got it working now.

I created a new team called ~csgreasy. The tilda (~) distinguishes teams and users from projects. So the project name is csgreasy, the team name that owns the project is ~csgreasy. The team is open, so anyone can join. Upon joining, new members can commit code immediately. Once you’ve joined the team, the commands to check out and commit code are:

bzr branch lp:csgreasy/trunk
# make some changes
bzr push lp:csgreasy/trunk

After the first push, subsequent changes can be pushed with just `bzr push`, the location will be remembered from last time. Now anyone with bazaar and some javascript skills can contribute. To get started, install bazaar, register on launchpad, join the team, branch, start hacking, push back changes. Happy hacking… :-)

Creating Launchpad projects

Creating the project was relatively simple. There were a couple of steps I didn’t fully understand at first, it was simple once I got it.

Firstly, I registered a project. Second, I created a team. Then, instead of pushing branches to lp:~user-name/project-name/branch-name, I can push to ~team-name/project-name/branch-name. Using the team name instead of my own username means that the code is owned by the team and can be edited by anyone else in the team. A team on launchpad is essentially a regular user that consists of multiple other users. Very handy. That’s the whole process. :-)

Proposing WP Flavours

Instigated in part by this discussion, I think the time has come to start forking WordPress. I think there is space for a few different forks, or flavours, of WordPress. I can imagine flavours focused on security, privacy and probably others. For example, a flavour that disables all the post versionining. A flavour that strips out other parts of the code to suit a specific need.

To serve these aims, I propose to create wpflavours (or wpflavors). I imagine a site where flavours can be downloaded, an svn repo where patch sets can be maintained (maybe using quilt), and potentially a mailing list for group communication. Maybe we could host the whole thing on google code or some other public code / svn service. I suspect we’ll need server space to automate the patching and packaging process though.

If there’s sufficient interest (say anyone else interested in writing patches), I’ll register the domains, setup a simple WordPress site, figure out svn, setup a mailing list, and we’ll see what happens. If you’re interested comment publicly below or get in touch privately.

My first greasemonkey script

On several ocassions I’ve looked for an animated weather map where I can see the predicted weather for a region. After some struggling, I found maps on weather underground that were close to what I wanted.

However, when I changed the date of the map, it loaded a whole new page with the new map for the new date. It was cumbersome to cycle through the dates. I figured I could write a little Greasemonkey script to make life easier. Some 6 or so hours of hacking later, it’s done. It was much more finicky than I anticipated, but it’s done, and it works. I present Wunderground AJAXifier.

What is Greasemonkey?

Greasemonkey is a plugin for Firefox that allows you to use custom scripts on various web sites. For example, I use the YouTube without flash auto script. When I load a YouTube video, the script removes the flash player and replaces it with an embed code that fires up my default browser plugin (VLC, xine, mplayer, etc). The script also creates a few links to download videos directly to my computer. Easy peasy.

There are thousands of scripts on userscripts.org. Mine is here. Be warned, the first few scripts I installed were malicious, they redirected me to the author’s web site. I recommend you check the reviews and read the source code before installing any scripts.

Philosophy

I think greasemonkey is a really big development for browsers. It provides an easy way for users to customise and control their web experience. For example, it’s now relatively easy to reorganise your favourite web site to improve the layout, add a WSIWYG editor, and more. It’s a significant step for users to regain control of their web experience from site publishers. Power to the people! :-)

Removing onclick or onchange with Greasemonkey

It took me quite a while to figure out how to remove the page’s default onchange event. I found the solution thanks to joeytwiddle on #greasemonkey. The trick is to use the wrappedJSObject method. Here’s a quick example:

var myel = document.getElementById('callum');
console.log(myel.onchange); // null, see XPCNativeWrapper
console.log(myel.wrappedJSObject.onchange); // works
myel.wrappedJSObject.onchange = null; // unsets the onchange handler

It took me a while to figure this out, hopefully this post helps somebody else.

Here’s a completely unrelated image from a flickr search for greasemonkey to brighten the post.

VirtualBox host to guest networking

Update 2013: This article is out of date. VirtualBox now includes a host-only network type. On my laptop I create 2 networks, one NAT to provide the VM with internet, and one host-only to provide the laptop access to the VM, even if the laptop is not on the internet.

Update: I just repeated this process with Ubuntu 11.04 host, 10.04 guest. It worked as described here. I also automated the setup on the host, and added a note at the bottom of the post explaining how I did that.

I’m creating a new development server on VirtualBox. I was using VMWare until recently, but since upgrading to Ubuntu 9.04 64bit, I’ve decided to try VirtualBox instead. I also recommended VirtualBox to my brother, so by using it myself I’ll be better able to support him if he has any issues.

Installing a new virtual machine was a breeze. After I activated hardware virtualisation in my bios, I installed a 64bit version of Ubuntu server 8.04 LTS. The install failed a couple of times, not sure why, but third time lucky.

My first major stumbling  block was connecting to the virtual machine from the host machine. By default VirtualBox gives the guest (virtual machine) a NAT ethernet connection. So the guest can connect to the network, including the internet, but the host can’t connect to the guest. I’m creating a development server, so that’s precisely what I want to do, connect from the host to the guest. With a little research, it turns out there’s an easy solution (on Linux hosts).

The VirtualBox article on Advanced Networking in Linux was my guide. I’ll document all the steps I took here.

Install bridge-utils, vtun and uml-utilities:

sudo apt-get install bridge-utils vtun uml-utilities

Create the bridge:

sudo brctl addbr br0
sudo ip link set up dev br0
sudo ip addr add 10.9.0.1/24 dev br0

Create a tap device for the guest to use, put your username in place of USER:

sudo tunctl -t tap0 -u USER
sudo ip link set up dev tap0
sudo brctl addif br0 tap0

If you need multiple guests connected, repeat this step replacing tap0 with tap1, tap2 and so on. Always use br0.

Now modify the virtual machine settings and map one of the network adapters (probably the second one) to the device tap0. Choose Attached To Host Interface and select the device tap0. I left the first network adapter as a NAT adapter so the virtual machine has internet access. In this configuration, I can disconnect the guest from the internet and / or the host separately.

When the virtual machine has started, setup the network. Assuming the guest is an Ubuntu machine, run these commands on the guest. If you linked the first network adapter to tap0 then use eth0 on the guest, if you chose the second network adapter use eth1, 3 to eth2, 4 to eth3 and  so on.

sudo ip link set up dev eth1
sudo ip addr add 10.9.0.2/24 dev eth1

Now test it all works. On the host machine try ping -c4 10.9.0.2 and on the guest try ping -c4 10.9.0.1. Assuming both machines are set to respond to pings (default in Ubuntu), you should see 4 successful pings.

If this works, you can set the address permanently by editing /etc/network/interfaces and adding this text.

# Host only network
auto eth1
iface eth1 inet static
address 10.9.0.2
netmask 255.255.255.0
network 10.9.0.0
broadcast 10.9.0.255

I’ve used the 10.9.*.* addresses as an example. You can use any private network address (10.*.*.*, 192.168.*.* or 172.16.*.*-172.31.*.*). The most commonly used addresses are 192.168.*.* and 10.0.*.* or 10.1.*.* so I recommend staying away from them. You want to choose addresses that won’t clash with anything else on your network.

Edit: Finally, I added a script to automate the setup on the host machine. I created a script called /etc/init.d/virtualbox-bridgenetwork with the following contents:

#!/bin/bash
# Create the br0 interface
brctl addbr br0
ip link set up dev br0
ip addr add 10.9.0.1/24 dev br0
# Create tap0 for the vm to connect to
tunctl -t tap0 -u USER
ip link set up dev tap0
brctl addif br0 tap0

You need to change USER to your own username and modify the IP to whatever you were using. Then to make this script run automatically at boot time, run:

sudo update-rc.d virtualbox-bridgenetwork defaults

Now the br0 and tap0 interfaces should be automatically created at boot time.

Mapping plans

Since receiving my spot messenger I’ve been looking at mapping. I’d like to create a live route map that documents my travels. I’ve taken inspiration from Mark Beaumont’s map. Mark is cycling from Anchorage, Alaska to Ushuaia, Argentina, you can read more on his site.

The spot will update my location every 10 minutes. For $50 a year Spot will give me a map that shows my current location plus, I believe, up to 30 days of history. Example. I’d like to show my whole trip, more than 30 days of history. A little hacking turned up this. It’s the feed that drives spot’s map. Hopefully with a little jiggery-pokery, I can use the feed to create my own map with pieces added.

I’d like to show the following:

  • My route and current location, up to the last update
  • Points of interest that I highlighted along the way
  • Pictures or video showing the location where they were taken
  • Status updates plotted on the map at the place they were sent from
  • Blog posts linked to the relevant points on the map

Is there anything else you would like to see on the map? Are you familiar with open source mapping? Do  you want to help me put this together? Do you know of any mapping services I could use? Thanks in advance for your help.

Here’s a random picture from a flickr search for maps to brighten your screen.

Mounting LVM vmware disks

I’ve spent a couple of weeks trying to recover some data from an old vmware machine. I didn’t want to install vmware on my new OS, so I looked into the vmware-mount program. The documentation refers to vmware-mount.pl, but I couldn’t find that file at first. It looks like since VMWare 2.0, vmware-mount.pl and vmware-loop have been replaced by a single vmware-mount binary, which behaves slightly differently.

I initially had problems with vmware-mount from VMware-server-2.0.0-122956.i386.tar.gz. I was getting this error:

vmware-mount: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory

I saw other reports of the same error, but no solution. I was using vmware-mount from a 32bit build on a 64bit OS, so instead I tried the vmware-mount from VMware-server-2.0.1-156745.x86_64.tar.gz. Then I got an error along the lines of:

SSLLoadSharedLibrary: Failed to load library libcrypto.so.0.9.8:/usr/local/bin/libdir/lib/libcrypto.so.0.9.8/libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
Core dump limit is 0 KB.
Child process 26541 failed to dump core (status 0x6).

VMware Server Error:
VMware Server unrecoverable error: (app)
SSLLoadSharedLibrary: Failed to load library libcrypto.so.0.9.8:/usr/local/bin/libdir/lib/libcrypto.so.0.9.8/libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
Please request support.
To collect data to submit to VMware support, select Help > About and click “Collect Support Data”. You can also run the “vm-support” script in the Workstation folder directly.
We will respond on the basis of your support entitlement.

Press “Enter” to continue…

I read this. With a little guesswork this command seemed to do the trick:

sudo ln -s /lib /usr/lib/vmware

Now vmware-mount would list my partitions. First major breakthrough.

Mounting suspended disks

It complained that my virtual machine was in a suspended state, and so it wasn’t safe to mount the disk. I found I could bypass this problem by moving all the vmdk files into a separate directory. Then running vmware-mount in that directory. It effectively ignored all the vmware machine files, and used only the hard disk files.

mkdir vmdks
sudo mv *.vmdk vmdks/
cd vmdks

Now I could mount my /boot partition within the VM, but not the second partition because it was was an LVM container. A whole new problem to solve.

Mounting LVM volumes with vmware-mount

I stumbled on my buddy John’s post. That and this helped me figure out what was required.

My first step was to mount the disk flat, using a command like:

sudo vmware-mount -f pathToVMDK.vmdk /path/to/mount

That worked, sort of. With fdisk -l /path/to/mount I could see the two partitions. But sudo vgscan couldn’t find the lvm partition. I tried sudo losetup /dev/loop0 /path/to/mount/flat, but that didn’t work either.

I figured I needed vmware-loop to mount the partition as a loop device. I searched the VMware-server-2.0.1-156745.x86_64.tar.gz file for vmware-loop, but it was nowhere to be found. That’s when I started investigating with previous versions of VMWare. It looks like the 1.0.* releases included vmware-mount.pl and vmware-loop while the 2.0.* releases only include the new vmware-mount binary.

I downloaded VMware-server-1.0.9-156507.tar.gz. In that tar file I extracted bin/vmware-mount.pl and bin/vmware-loop. These were the files I needed. I skipped vmware-mount and went straight to vmware-loop. I was able to mount the second partition directly onto a network block device (/dev/dbd0) with:

sudo vmware-loop pathToVMDK.vmdk 2 /dev/nbd0

Now I could use the lvm commands to activate and mount my lvm. Note that vmware-loop is running the whole time, so I left it in a separate terminal. I closed it with CTRL-C at the very end of the process.

sudo vgscan
sudo vgchange -ay VolGroup00
sudo mount /dev/VolGroup00/LogVol00 /mnt/

Finally, I was able to copy the files from my virtual hard drive. I made a full backup with tar and then grabbed some other specific files and unmounted the whole thing.

sudo umount /mnt/
sudo vgchange -an VolGroup00

If you’re struggling with vmware-mount and  LVM or suspended disks, I hope this helps. Comments welcome.

Ubuntu Jaunty and pidgin-facebookchat 1.61

I was able to install pidgin-facebookchat 1.61 on Ubuntu Juanty Jackalope (9.04) by first installing the relevant libjson-glib-1.0-0 from Karmic. To find the correct deb look at the different builds on the right hand side of the page. In my case on 64-bit Ubuntu the relevant deb was this one, the 32-bit version is here.

I had to install the glib-json deb first. Otherwise the pidgin-facebookchat deb warned of an unsatisfiable dependency.

It looks like pidgin-facebookchat 1.6x is being included in Ubuntu Karmic but I’d guess it won’t be backported to Jaunty.

Google Wave

This might be the most exciting technological development since email. I’m truly impressed at Google’s approach to this project. It gives me newfound faith in Google.

The guys behind Google Maps set out to answer the question “What would email look like if it were invented today?”

Their answer is truly outstanding. Wave is a collaborative communication tool. Something like email crossed with a wiki, instant messaging client, and much, much more. As I watched the video I was thinking, all well and good, but when I got to around 1 hour 8 minutes, I got really excited. In a truly genius move, Google has made the whole protocol behind this new platform open source. That allows independent organisations to build their own Wave servers, and privacy is tightly coded within the system. No Google snooping. Wow.

If you’re technically minded, watch the video here. I’m not embedding the video because it’s 1 hour 20 minutes long and you probably want to watch it in high def on YouTube directly. See more info and sign up for a demo account on Google Wave here.

I was clapping with the audience as the video ends. Truly amazing. Thanks to Pete Mall for the tip. :-)

An Ubuntu Kindle outside the US

I just bought a Kindle and successfully loaded my first book onto it in Canada, using only Ubuntu. The process I used should work anywhere outside the United States. Here’s a quick summary for overseas, would-be Kindle owners.

1] Buy the Kindle. You need a shipping address in the United States where a friend or forwarding service will receive the Kindle and send it on to you. You can use a credit card from any country to actually purchase the Kindle, but not the books.

2] Deregister the Kindle from your Amazon account.

3] Buy yourself an Amazon gift voucher (I started with $20). Just buy a gift card and have it sent to your own email address.

4] Create a new Amazon account with a new email address.

5] Register the Kindle onto your new Amazon account. The Kindle serial number is in tiny letters on the back of the device.

6] Load your gift voucher onto your new Amazon account.

7] Browse the Kindle book store, purchase a book. You’ll need to add a shipping address to your account, use a US shipping address.

8] Got Your Account > Manage My Kindle and scroll down. You’ll see a list of your purchases, choose Download to My Computer then save the file.

9] Plug your Kindle into your computer (Linux, Mac or Windows all work) and drop the file into the documents folder on the Kindle.

Voila, you have a Kindle outside of the USA.

Do not add a non-US credit card to your Amazon kindle account. Use the account only for your Kindle and only put money on the account via gift vouchers. Any non-US credit card will stop Amazon sending books to you on that account. You could repeat the process to register the Kindle to a new account, but you might run out of email addresses!

I’ll post some thoughts on the Kindle once I’ve had a chance to try it out. Right now it’s charging via USB. :-)

For those of you still wondering what  Kindle is, go here. Think ipod for books. Here’s a picture to help you visualise:

bbPress 0.9 and WordPressMU 2.7

I’ve just integrated cookie logins between bbPress 0.9.04 and WordPressMU 2.7.1 fort the second time. It took me a while to remember all the steps that were necessary the first time, so I’m documenting them here.

This is a quick and dirty integration. There might be a more fanciful or secure way of doing this. It works (for me, no guarantees!) and it’s easy. I think it will work for WordPress and WordPressMU but I’ve only tested on WordPressMU.

Firstly, you need to sync all the key and salt values in wp-config.php and bb-config.php. Set them in bb-config.php first. You need two lines like this:
define('BB_SECRET_KEY', 'secret_key_here');
define('BB_SECRET_SALT', 'secret_salt_here');

Generate secrets here.

The next step is to copy those values into wp-config.php. Copy the secret key value into all of these lines:
define('SECRET_KEY', 'secret_key_here');
define('AUTH_KEY','secret_key_here');
define('SECURE_AUTH_KEY','secret_key_here');
define('LOGGED_IN_KEY','secret_key_here');

Then copy the secret salt value into each of these lines:
define('SECRET_SALT', 'secret_salt_here');
define('AUTH_SALT','secret_salt_here');
define('SECURE_AUTH_SALT','secret_salt_here');
define('LOGGED_IN_SALT','secret_salt_here');

It is possible for these to be different on WordPress. That means each cookie will be different. WordPress uses 3 cookies to handle logins. However, that complicates matters with bbPress, so for simplicity, keep them all the same.

You may also need to set COOKIE_DOMAIN and COOKIEPATH in bb-config.php. Check out your forum admin (Settings > WordPress Integration) and it will tell you what to do.

Now go to your forum admin, Settings, WordPress Integration. Click “Show manual config settings:”. Now copy that into bb-config.php. Change this line to:
$bb->authcookie = 'wordpress_logged_in_';

WordPress standalone uses a wacky cookie name, generated randomly, but WordPressMU does not. If you’re using WordPress, you need to change this value. Log into WordPress, check the cookies in your browser, and copy the name here. I think you can also do this by setting COOKIEHASH in your wp-config.php. See this article for more info.

Now when you log into WordPress, you’ll be logged into bbPress. When you log out of WordPress, you’ll be logged out of bbPress. But not vice versa. In order to complete the link so you can log in and out on bbPress, you’ll need to add a little plugin to bbPress. Get the code here and put the file in bb-plugins then activate the plugin via your forum admin. This plugin only works for WordPressMU / bbPress. If you want a version for WordPress, nag me with a comment on this post and I’ll see what I can do. :-)

Now logins should sync beautifully. If you have any questions, try asking on the bbPress forums.

lftp and cPanel

I routinely have problems connecting to cPanel FTP servers with lftp. Much to my frustration it works fine through gFTP. After some debugging investigation it seems that lftp automatically tries to use AUTH TLS and then fails. There is a simple solution. Set the lftp setting “ftp:ssl-allow” to false. This can be done by running this command within lftp:

set ftp:ssl-allow false

Another WordPress plugin

I’ve been on something of a plugin writing spree of late. I’ve just written my second WordPress plugin this week.

I realised that the timezone was wrong on this blog. It’s been wrong since I left Sydney. Now that I’m posting status updates, and not using the “posted X minutes ago” format, it’s obvious when my times are wrong.

I looked into how I could change the times on my old posts. In the process I found Otto’s excellent Automatic Timezone plugin. It sets your timezone automatically including changes for DST and so on. You just choose the nearest city and it does the rest.

However, I couldn’t find a plugin that would change the timezone information on older posts. So I wrote one. The first version ruined the posts, thankfully I had run a backup before I made 90% of the changes. This version seems to work fine. New page here, it’s still waiting for approval from the WordPress plugin directory.

So the timestamp on this post is correct for my current timezone, it’s 2:17am, time for bed!

Trying a new theme

I’m trying a new theme on the blog. I’m going for a lighter, simpler look more focused on the content and less on the blog. What do you think?

If you’re reading this in a feed reader, come check out the site and share your thoughts in the comments. :-)

Considering a Kindle

I’m considering the purchase of an Amazon Kindle 2. I like reading books but books a’re big and bulky which doesn’t fit very well with my current nomadic lifestyle. I’ve spoken to a few people who recommend the Kindle.

However, I just read this. Amazon has allowed publishers to restrict whether a book can be read aloud on the Kindle or not. There is no basis for this in law, but Amazon has conceded all the same.

I’m typically a hardliner on issues like this. I boycott all Apple products because of the company’s proprietary lock-in practices. I use Ubuntu GNU/Linux because it includes software freedoms not available on proprietary operating systems.

Is there a Kindle competitor out there? Is the same range of books available?

Before I make a purchase I want to find out if I can load books onto the Kindle via Ubuntu. The Kindle includes a cell phone wireless component that allows internet access, but only in the US. So outside of the US I need another way to load books. If that requires Windows or Mac then I won’t buy the Kindle.

Then I’d also like to research the selection of books that is available. I’m hoping that the type of non-fiction books I typically read are readily available on the Kindle, otherwise, again, no point getting one.

Do you have a Kindle? Do you use Ubuntu? Any feedback?

My Manhattan office

I went to the New York OpenCoffee meeting this morning. I’ve been to a few OpenCoffee’s around the world and I like the events. They normally give me a quick flavour of the tech scene in a place. The meetings in Cape Town are really buzzing for example.

This morning’s meeting opened with a series of introductions, each person introduced themselves in that usual “My name is blah and my company is called blah and I blah blah blah”. I was looking for a place to work for the day so I literally jumped from my seat when my turn came. I sprang into life, delivered an energetic good morning, explained my name was Callum, I’m from Scotland, and I was looking for a desk for the day.

The charming, generous and downright handsome Ashley J. Heather was a couple of intros before me. English accent, runs a tech incubator. Perfect I thought. He agreed. Bingo, I had scored an office for the day. So this post comes to you from the office space of dotbox. Thanks Ashley. :-)

Here’s a completely unrelated, creative commons licenced picture of a totally different type of dotbox for your viewing pleasure!

A sad day for Michael Arrington

Michael Arrington is the main entrepreneur and journalist behind TechCrunch. According to Technorati, TechCrunch is the second most popular blog on the internet. TechCrunch covers technology startup news, specifically silicon valley, web based type stuff (as far as I know, I’m not a regular reader).

Michael posted some sad news yesterday. He is taking a break after being spat on at a European conference. He also said that he had received death threats and hired private security personnel to protect his family and employees.

As I understand it, Michael is a very public figure. He’s one of the best known web celebrities, whatever that means. As with all famous people, there comes a downside to that fame. While the likes of Mark Zuckerberg (24 year old, paper billionaire, Facebook founder) or Matt Mullenweg (25 year old, paper millionaire, Automattic / WordPress founder) keep a low profile, Arrington is the opposite. He’s been prolific in getting his name known, and very successful.

It’s a shame that fame is accompanied with such a downside. I’m sure most major actors have experienced similar issues to Arrington. Personally, I take this as a stark reminder that popularity has a cost. It reminds me that while fame may seem appealing, personally, I don’t think the benefit is worth the cost.

I hope Michael Arrington and his family are safe, and I hope he’s able to deal with these challenges and grow as a result. Good luck Michael.

Unsubscribing from AirAsia

I cannot unsubscribe from AirAsia’s email newsletter. They say email unsubscribe@fly.airasia.com to be removed from the mailing list. That email address is dead. Likewise unsubscribe@airasia.com is also dead.

I’ve tried contacting their customer support department, nothing.

AirAsia’s emails appear to be handled by dartmail.net. Whois shows that this domain is owned by Google. The first result in a scroogle search for dartmail is a service from ClickZ / Double Click.

All in all, I’m feeling some frustration. If it comes to it, I can simply block all email from AirAsia, but that would mean I cannot fly with them. Not ideal. Does anyone out there have a suggestion or solution?

Update at 15 Jan 2009: ccd5 said the unsubscribe address now works, I tried again and it worked for me.

New laptop: Lenovo X301

Exactly one month after I bought it, my Lenovo X301 finally arrived in Guadalajara. Big thanks to Ferg and Maeve for getting it to me.

New X301

I’m very impressed with the X301. It’s not cheap, my configuration retails for around $3’500 USD, but it definitely feels worth it. The machine is half the weight of my previous ThinkPad R60. The screen is noticeably brighter, I’m running it about 70% brightness indoors. It’s also got 70% more pixels, which means more stuff on the screen. That was the main reason I changed laptops, I wanted more desktop space.

Naturally, I immediately installed Ubuntu. I didn’t even boot the machine on Vista. I also swiftly removed the Intel Inside and Microsoft Vista stickers. After some hassles getting Ubuntu installed (I repeatedly chose the wrong options), I finally got there. Everything “just works”. Bluetooth, wifi, FN keys, the whole lot. This was the easiest Linux install I’ve experienced to date.

What impresses me most about the X301 is the build quality. It feels absolutely solid, particularly for a machine that is so light. Oz is staying with us at the moment and he has a MacBook Air so I’ve been able to compare them both first hand. The Air feels smaller. It’s thinner at the edges so it looks smaller. The two machines are almost identical in dimensions, I think the Air is 0.03 inches thinner at it’s thickest point. The Air also looks better. It’s Apple good looking. Metal finish, back lit Apple logo, etc. It looks awesome. However, I’m happy to have a machine that looks old school,  it draws less attention and is less likely to be stolen.

The X301 comes into its own on performance. The Air has a total of 3 ports. Headphones, mini-dvi and one USB. The X301 has 3 USB ports, headphone and microphone sockets, DisplayPort, VGA, ethernet, the list goes on. My X301 has an in-built DVD Burner which I can swap out for a second battery. The Air’s battery is not removable, so no carrying spares. I can run two batteries in my X301 and given enough batteries, achieve potentially unlimited runtime.

Overall, I’m delighted with my new X301. It’s super light, ultra portable, but packs enough performance that I can use it as my main workhorse machine. Very happy with my purchase.

[ Picture on the screen is One Night in Bangkok by Stuck in Customs ]

Satellite versus roaming

Satellite broadband runs about $5-$7 USD per Mb. It seems expensive. I thought I’d compare that to global roaming charges. Vodafone NZ charge $10 – $30 per Mb depending on the region!

At these kind of prices, it looks like I’ll be staying in major metropolitan areas with wifi for the next few months. I was dreaming of getting a satellite phone and a camper van (or a motorbike) and taking off into the wild!

If I want to be uber-available, I might consider a pre-paid satellite sim card ($500!) valid for 6 months. Paired with a satellite handset, I could potentially be “permanently connected”. Food for thought.

Skype on Ubuntu 8.10

Every time I reinstall Skype on Linux I lose sound for some reason. I can hear the other side, but they can’t hear me. I fiddle with the volume settings, and after a while it starts working. This time, I paid attention and made note of how I got it working. This post is as much for me as for anyone else on Ubuntu. :)

Firstly, under Options > Sound Devices I switched the output device to pulse. Then I set the input device to “HDA Intel (hw:Intel,0)”. Then I opened the volume control, enabled all the devices, and set Mic Boost to about 15%. That was the critical step. Now callers can hear me.

For the first time in my Linux history, I can now receive a Skype call and have music playing at the same time. Previously, I had to kill all other sound output before answering the call and I would only see it ring, not hear it. Much progress.

Here’s a random picture from a search for Skype on flickr to brighten things up a little.