Friday, September 21, 2007

GNOME 2.20 released

...and it looks like I will be sticking with GNOME for another 6 months after all!

Even the most annoying thing about Epiphany seems to be fixed - the address bar. Also I no longer have to sync my Tomboy notes with an automated SVN commit. I'm close to forgiving it for being written in C#...

Do read!

Saturday, September 08, 2007

Summer of Code final update

As of 20th August Google's Summer of Code program has officially ended. Students must upload code produced up until the deadline to Google's hosting, and are only judged on work up to that date.

Continuation of GSoC projects is encouraged however, and I shall be finishing off HTTPS (and have already committed bug fixes) and tidying parts of my code over the next few weeks.

There has been plenty of interest in my summer's work, on the gloox mailing list, and in private emails/IMs to me personally. It is great to know that people are finding my work useful to them.

I would like to thank Jakob my mentor for endless help with figuring things out when they went wrong, and for guiding me around the innards of gloox when I got lost (not to mention for his excellent library existing in the first place!). Thanks to Peter for taking on the hard task of orchestrating the XSF's involvement in GSoC, and for supporting the students throughout. Finally thanks to Google and the team behind the administration of GSoC, for, well, you know what :)

I will update this post with the URL to my uploaded tarball once it is on Google's servers.

However the latest, greatest code will always be found in SVN. Currently BOSH is at svn:// but very soon will be moved to the trunk. More information on gloox's download page.

The server-side implementations that I know work with this code are Openfire 3.3.2 (or .3), and Araneo (a standalone CM (connection manager), which allows any BOSH client to connect to any standard Jabber/XMPP server, using the CM as a kind of proxy) from (site down at the moment I write this).

PS. Apologies for the delay in this post... blame my vacation :)

Update: Official tarball uploaded here. Please use the version from SVN (see above) though if you would like to test or use my code.

Thursday, August 09, 2007

Summer of Code Update

This week has been a good one for my project, despite my being ill for a few days of it. Firstly, I completed my initial implementation of multiple connections! I say 'initial' because it is currently only tested and working with one server (OpenFire), and I will be testing more, and likely fixing bugs, in the next few days.

I also received a lot of help from people following my previous blog post...

My problems with PunJab are fixed with minor code changes (although it still doesn't work correctly for other reasons at the moment).

badlop let me test against his ejabberd SVN server, and I discovered that it doesn't seem to support persistent HTTP connections, let alone pipelining. Now I have non-persistent connections implemented, I shall be testing ejabberd again.

OpenFire... well, it works (without the previous problems I had with a 30 second delay) with multiple connections, and works well too :)
The only downside is still the lack of XEP-0206 support, so my code won't work with SASL auth to OpenFire.

Which brings me to the news of a new CM, which I have high hopes for. If I can get my code working as well with this CM as it currently works with OpenFire, all servers can be connected to this way, and SASL login will work as well.

Wednesday, July 25, 2007

A sign of Jabber's increasing popularity?

Some of you reading this are regulars in the Jabber MUC at This MUC is referenced on, and is the default room to join in many clients.

Unfortunately the past weeks have included events that I can only say are reminiscent of IRC...

  • Flooding

  • Abusive language

  • Spamming/advertising ("hey, check out this cool site! http://..." and leaving again)

Inevitably as Jabber gains good users it will also gain bad ones. While their activity in private chats is of little concern to us, I believe we need to lay down some guidelines for acceptable behaviour in the public conference.

Currently there are a handful of moderators keeping the MUC friendly. However it becomes hard to draw the line between what is acceptable and what is not. This is a matter of opinion that varies between most people.

My hope is that with some guidelines it will be easier for both the moderator and the user (who can then be directed to them if necessary).

The need for these moves is somewhat disappointing, but necessary it seems, if we are to keep the friendly atmosphere that we currently have in this little corner of the Jabber community :) and to continue providing useful help to Jabber newcomers.

I propose the same policy as the official Ubuntu support channels, which works well. Mild swearing is ok, as long as it is not excessive, or directed at a person. Anything else may result in a warning and/or kick at the moderator's discretion.

No deliberate flooding
Though I am not aware of it happening in the Jabber MUC, it has happened in another MUC I am in. A user joined 2 bots into the room, and set them into a loop with each other, and left. Obviously this is deliberate, and I had to ban all 3 JIDs involved (but not until several hundred messages had already been sent to the room).

In IRC it is frequent to get shouted at for pasting more than a couple of lines. In Jabber people seem to be more lenient, and I don't see why this should change. Obviously a warning should be given when needed.

English only
It may seem unfair to prevent people from speaking in their native language. However most languages have their own servers and their own conferences. I don't propose this rule to affect those casual users who come in search of help, yet speak no or little English. Those users are usually directed in a friendly way to a room and server of their native language, where they will hopefully receive better help.

However some users hold long conversations which could easily be taken into private messages, or to other rooms. These conversations are nearly always unrelated to Jabber, and only annoy the other occupants of the room. It also makes it impossible for moderators to moderate when the conversation is in a language they don't know (I have previously been asked to kick people who were being insulting toward other users, although I had no idea because they were not speaking in English).

Obviously these choices are not up to me alone to make, and so I welcome comments and opinions on what I suggest here.

Update: It seems this post caused something of a discussion... :)

Summer of Code Progress

In the past 2 weeks, I have tried every server-side BOSH implementation I can find (although more are always finding me!), and all have their individual problems with my client...

No support for XEP-0206, and hence no SASL login is possible. I also have the reproducible (yet still mysterious) problem I blogged about in my last post. I also have had problems with Openfire's overactivity detection. The XEP specifies that the client is always allowed to make a request if it is to send data. The old version of the XEP which Openfire implemented was not clear on this, and as far as I can tell I get disconnected when I should not be.

Well, it seems to work. Yet ejabberd does not support XEP-0206 either, and also refuses non-SASL logins. This makes it impossible to use with my code for now.

JabberHTTPBind (JHB)
A handy little servlet which implements XEP-0124 and a little bit of XEP-0206. Yet I have problems with this also, as it seems to take wait seconds before the session creation response is received. After that I get a reply, which triggers a reply from gloox, to which the server replies instantly (yes, it appears to be polling for some reason). This happens until I begin getting errors from Tomcat (I believe JHB disconnects the client for requesting too frequently). I suspect a bug in the logic for polling, which I will take a look at after implementing multiple connections.

The problem with Punjab seems quite simple, yet I have been unable to solve it. All my testing so far is being done locally, and Punjab seems to try to resolve 'localhost' on the external DNS. I don't know Python well, so this is the best I can understand of the problem. I intend to speak with the Punjab developer(s) this week.

All of the above are problems I am having, I would not be surprised to learn that many of them are a problem within my code. Unfortunately not having a working server implementation makes it very hard to know where the source of any particular problem lies. If anyone has suggestions about issues I have listed above, please do contact me :)

Today I managed to talk with Ian Paterson (author of the XEPs), who will kindly allow me to test against his server. Also I spoke with the anonymous commenter on my last post who has been very helpful, and offered me their Python implementation to play with as well. I learnt this week that Tigase has BOSH support in-development. With luck I will be able to test against Tigase in the coming weeks.

This week I also began the biggest change in the code for a while - enabling multiple connections to be made to the connection manager. This will help the client to work through proxies which don't support/allow HTTP 1.1 and/or pipelining.

Links round-up

The oldest post in my post cache that may be applicable...

I don't have time to blog about things in general for now, so I'll present you with a list of links I've gathered on my travels through the web...

Make mailto: links open Gmail (Ubuntu):

TortoiseSVN-like script for Nautilus (GNOME):

A helpful article from Microsoft:

A small computer running Xubuntu now on sale (did I already blog about this?):

Flip, a novel programming language:

Why Linux drives don't need defragmenting:

Free web hosting:

Free file hosting:

My Starred Slashdot articles:

Ubuntu Market Share:

GPLv3 & Microsoft:

Written articles vs blog posts:

Using the mouse in UIs:

Spammers vs CAPTCHAs:

OpenMoko phone on sale:

The world's first programmable robot?

I think so, this time:

History of the CD:

Wednesday, July 11, 2007

Summer of Code Update

Time for an update on my progress with my project, now we are halfway through GSoC...

Disconnection (either by error, or as requested by the gloox client) gracefully from the server is working now. I have also made some small improvements in other areas where necessary, too many and too small to list here.

A big problem I am having is that there are regular delays in my test setup. I have a test client for gloox that replies to messages it receives. I have tried both tkabber and Psi as the second client, with the same results.

I checked that my BOSH code is doing everything correctly and it seems the answer is (insert disclaimer here) yes.

Here is the link to a network capture log: Wireshark capture file

The file is so named because the test message I sent was the text "ooo". (No, I don't know why...)

Below is my translation to English of the necessary parts of the log, showing a message going from Psi to gloox (via the server) and the reply going back again:

A: GUI client (Psi 0.10, port 32921->5222)
B: BOSH client (gloox svn, port 45069->5280)
S: Jabber server (Openfire 3.3.2, port 5222)
CM: BOSH connection manager (Openfire 3.3.2, 5280)

# GUI client sends message to server
0 sec: A->S (frame 37 in the capture)
0.000030: TCP ACK for the above

# Server sends message to gloox via BOSH
0.001999: CM->B

# Gloox sends composing event
0.003065: (Composing event) B->CM
0.003090: TCP ACK for the above

# Gloox immediately after this sends reply message
0.003358: B->CM
0.003370: TCP ACK for the above

# Server sends composing event to GUI client
0.004707: (Composing event) S->A
0.004725: TCP ACK for the above

# Server replies with empty response to gloox,due to 30s inactivity (as per spec)
30.007330: (Empty response) CM->B

# Server sends message to GUI client

30.012078: S->A

# All the acks for the last packets
30.012078: TCP ACK for last TCP ACK (RTT to ACK was 30.007 seconds) (??????!)
30.012106: TCP ACK for S->A
30.046637: TCP ACK for (Empty response) CM->B

If anyone could explain why the server appears to hold a message for 30 seconds, please let me know!

The story with ejabberd (which I finally managed to patch, compile and build) isn't good either. Because the new version of the BOSH XEP does not define how to restart a stream, XEP-0206 support is needed, which now defines this function. Unfortunately no server supports this yet, so I disabled SASL until I find a way around this. Unfortunately ejabberd forces clients that advertise XMPP 1.0 to use SASL (which gloox does) so it denies login attempts.

Detecting which version of the BOSH protocol is supported by the server, and using the old method when necessary would work in this case, but not in Openfire's (it reports version 1.6 already).

There are a few server-independent connection managers around, and I will test with those. My intention is to find one that I am able to bring up to date with the current specifications.

This is my focus at the moment, but very soon I will begin implementing multiple connections (a big step) for when pipelining can not be used.

Thursday, June 28, 2007

Summer of Code Update

This post is somewhat delayed, for a variety of reasons, and from today I'll hopefully be posting more regularly again.

Despite the lack of posts, I have still been working, and I have made some progress too.

Code for pipelining (a single connection) to the BOSH connection manager is roughly in place. My first message was sent through BOSH last week!

I do have a couple of problems, both of which I believe are down to Openfire's lack of full BOSH support.

SASL authentication will not work, because Openfire does not support the xmpp:restart attribute defined in XEP-0206. I have temporarily overcome this by disabling SASL authentication attempts in the simple client I am testing with. I will see how I can make the code backwards-compatible with the old HTTP binding in this respect*.

The second problem is that Openfire disconnects the client if it sends requests too frequently.

As I understand XEP-0124 however, if no requests are outstanding (and hence no way for the server to push data to the client) the server should allow a request within any amount of time. Although the latest version of the XEP is more clear about this, version 1.5 (on which Openfire's support is based) does not explicitly state it. As a result Openfire is being more restrictive than it should be. I intend to file a bug report for this.

My last problem was a bug I encountered in gloox (resulting in message replies not always getting sent), and it affected the test client I have that is using my BOSH class. It happens that the bug was already fixed, and simply merging with the latest gloox trunk fixed it.

My current and next tasks are to fix an intermittent segmentation fault, and an out-of-range exception (which I believe to be both related), and improve the handling of disconnecting from the server.

* This is not helped by Openfire currently reporting the wrong protocol version...

Saturday, June 09, 2007

How to recover an Ubuntu/Linux PC

People often claim that Linux is more stable than Windows. Without hard statistics, this can't really be proven. One thing I do know however, is that when things go wrong it is much easier to recover a Linux PC than a Windows one, without restarting. In this post I will explain what to do, in easy steps, to get your Linux back running as safely as possible.

1. Kill a single graphical application
If you know the problem is a single application that you have open that maybe just froze then it is simple to fix. Press Alt+F2 and type 'xkill' (without the quotes) then press enter. This runs the xkill program, and the next application that you click on will be forced to close. If you change your mind, press the right mouse button to exit from this mode.

It may be worth setting a keypress that will automatically start xkill when you need it. In Ubuntu/GNOME, go to System->Preferences->Keyboard Shortcuts

2. Restart the graphical interface
If you are still having problems, or the whole of the graphical interface is not responding, press Ctrl+Alt+Backspace. This will attempt to stop the graphical display, and then restart it. Any applications you had open will be killed.

3. Switch to a console to end the application
If this didn't work, or you know a certain program is causing the problem, you can kill that program without using the graphical interface. Press Ctrl+Alt+F1. If your PC is running, but slowly, this may take a minute. Eventually you should end up at a text login screen. Log in with your usual username and password, and wait for the prompt to appear.

If you know the name of the program causing the problems, type: killall <program name>. If it continues, you can try to force it to stop, with: killall -KILL <program name>. For system process you may get "Permission Denied" errors. Prefix the above commands with "sudo ", ie. sudo killall...

If you are not sure which program is making the PC unresponsive, use the 'top' command. It shows a list of running programs, and their name, and in the CPU column it shows how much of the computer's processor they are using up. Once you identify the application press 'q' to exit top, and use the commands above to kill the program.

If all is now working, Ctrl+Alt+F7 will switch back to the graphical interface.

4. Emergency reboot procedure
If the steps above all failed, there is one last way to reboot your computer, and it is much safer than pressing the reset button on your PC's case, or pulling out the power cable.

It is important that you type these key combinations in the correct order, allowing the PC some time to complete the command between each one. The SysRq key on your keyboard is often also labelled as "Print" or "Print Screen".

Switches the keyboard mode.
Writes all data to the disks, necessary to avoid data corruption, unsaved files will still be lost.
Tries to end processes in a nice way. Allow a little bit of time before you use the next command.
Tries to forcefully kill processes that have not closed.
Temporarily makes the hard disks read-only, this makes it safe to reboot.
Force reboot.

5. Surrender
If that didn't reboot your PC, press the reset switch, or pull the plug, and cross your fingers :)

If you have any other methods, tips, or feedback to share, post a comment and let me know!

Friday, June 08, 2007


I just found this site, The Webware 100 in which Jabber appears next to many other networks and IM-related websites.

Do a good deed, and if you haven't already, vote for Jabber! :D

(That is, if you think it deserves the vote of course. If you don't, let me know and I'll correct you...)

Update: Whoops, I linked to the wrong category!

Tuesday, June 05, 2007

Summer of Code - Week 1 summary

As promised I shall give some update on my progress with the project so far.

We held the second weekly meeting, though with Kev temporarily in stpeter's seat - logs here.

I finally have a clear picture of what I am doing and where I am going.

As I said in the meeting, my project is not something I can make fancy screencasts from. On the other hand, I think I will try and produce some diagrams that show what BOSH is, and how it works. I realise that this is not clear to many people who might be reading this yet :)

Down to the important part. Today I finished my first steps and managed to get my initial code to compile (through the gloox makefile). I haven't finished the simple test client I will be using, so I can't actually test it yet. If I could however, it would hang immediately after connection... but it's surely a start! :)

Once I get some real code I think I will start producing tarballs of my progress. I am currently working in a local SVN repository, so it is not hard for me to do.

Back to work...

Thursday, May 31, 2007

First week of Summer of Code

The coding period of Google Summer of Code has officially started (since the 28th of May). A meeting was held on Tuesday for students and mentors working on Jabber projects.

So far...

The laptop

I have set up my new laptop for development, including development tools (subversion, SciTE), and server that I will be using to test my code against.

The server

I have chosen Openfire to be my reference server initially, although obviously I will be testing to ensure compatibility with all servers later on (just in case...). Openfire is easy to install and use, and includes XEP-0124 support by default.

Other implementations

I am interested in finding other clients or their developers that have XEP-0124 implemented already. It would help me make the final decisions this week about the way I will be implementing it. If you know something about it, or know someone who does, please contact me!

The code and protocol

Gloox thankfully already has a nice framework for adding new network-level connection methods. It is this way that HTTP proxy and SOCKS5 support has already been added. Thanks to Jakob's foresight it is also possible to chain multiple classes so that BOSH will be able to work though a SOCKS5 proxy, for example.

I need to create a class descended from ConnectionBase and write implementations of the pure functions from it. I will also have to descend from ConnectionDataHandler to parse the replies from the BOSH connection manager, before gloox is able to parse and handle the XML.

The main difficulty I have right now is deciding which BOSH parameters should be fixed in the implementation, and which should be configurable. I am also looking to see if I can make the connection degrade gracefully from HTTP pipelining to multiple connections, to polling, depending upon what is supported/available in the current environment.

Identifying possible client environments is also one of my tasks. This way I won't end up, for example, only supporting cases where the connection manager is at the same address as the XMPP server (which in the setup I will be testing with, it is).

From now on

I will be posting weekly updates to this blog, and I have decided I will aim for every Tuesday, before or after the weekly meeting. Watch this space!

PS. In the past couple of weeks I have seen BOSH spelt as BISH, NOSH and BOX. Stop it! :D

Tuesday, May 22, 2007

The Linux shell, a new user's friend?

Paul made another post yesterday, about the merits of the Linux text shell, and whether it was an ideal interface for new Linux users to have to learn.

So, they say that Linux forces users to learn how to use the shell and that, basically, Linux can't do anything without it.
It is a common argument made by Windows advocates, that it is impossible to use Linux without using the shell. I am glad to say, this is just not true.

Everyone knows that Linux grew from a shell-only interface, X and GUI applications came (much) later. Over the years Linux gained an image of being the hacker's operating system. It is far easier to hack (NOT 'crack') than Windows is.

Linux is growing beyond that now. Distributions (yes, I am saying it again) such as Ubuntu are doing their best to keep the shell to only those people that want it, and not require the people who don't to use it. In reality it is perfectly possible to use an Ubuntu system without knowing anything about the shell. There are graphical applications for practically any task you need to perform. I believe a little more could be done (ie. a GUI way to run programs as root), but still we are practically there already. One problem is that Linux tutorials nearly always show only shell way of doing things. This is at least better than Windows where a long how-to like this ("Click this tab, tick that box, click ok, oh, and again, and again...") could usually be done in a single command that could be copied and pasted.
Are shells good or not?
Yes, yes they are. There is no doubting the power of the shell. It is pretty easy to get started, you don't have to be a computer expert either. Knowing how to use the shell can help you take advantage of certain features in Linux that make it better than other operating systems - the possibility to bring it back to life from practically any crashed state, without data loss, and nearly always without rebooting. (Perhaps a simple how-to on this topic is in order... :) )

ObsidianLake: Another quarrel with my good friend...

In Paul's recent post about whether Linux is ready for the desktop, he debates whether there is a demand for Linux, and asks:

"Should or will Linux become a commercial product?"

I think we should look at how Linux started out, where it is now, and where it is heading.

For a start, the Linux kernel was started with entirely different goals to the components that make up the rest of a GNU/Linux system. Linux was not begun with intention of being free (as in freedom). It was a personal project of Linus. For GNU on the other hand, the philosophy came first. Ten years ago there was little commercial worth in either of these ventures, only once they were combined into a usable system would things start to gain interest and momentum.

GNU/Linux in the present day is doing quite well. It has taken a long time, but it is now ready for the desktop. GNU/Linux is earning recognition from both hardware and software makers, and the number of users is snowballing. I have to say this is in no small way helped by Ubuntu and a couple of other easy to use distributions. It is important to note that all of the most popular ones are free. Now that Linux is comparable to Windows in practically every way, what else is there to compare on, except the price? This is why I believe that free distributions will always be the most popular. Commercial distributions have their place almost only in the enterprise market.

Into the future? GNU and Linux will remain free, and Microsoft will have no choice but to switch away from its reliance on Windows being the dominant OS if it is to survive. Windows was the first easy to use OS, and it brought the possibilities of computers to those who would otherwise never have had it. This is the only reason it is on 99% of PCs today. Now that GNU/Linux is a competitor, with the added advantage of being free, Microsoft have no choice but to re-think their business. Very soon Haiku is also going to raise the BeOS community from the (un)dead, and this will only stir the mix even more.

Concluding by returning to the original question, is Linux a commercial product? No, at least, not while we are talking about the home-user's desktop. Should it become commercial? Well, supposing it did, it would lose one of the best things it has to attract people on the OS centre-ground - its freedom.

Sunday, May 20, 2007

C and C++

I think it is quite true to an extent...
A conjecture regarding C (and C++ too, although less so)...

Nice blog too, it's going onto my reading list :)

My favourite way to make an application at the moment is to create low-level (and possibly all platform-specific code) in C/C++, and then handle logic in Lua. It allows for a lot of flexibility, and faster development time. Lua should be better known :)

Making Scite the default editor in GNOME (Ubuntu)

For too long I was fighting with gedit, the default text editor in Ubuntu. While it is not too bad, Scite is far more powerful, and much better.

To install Scite, you can type the following in Terminal:

sudo aptitude install scite

I had the option of changing the editor associated with each of the file types in Nautilus (which is what I did on my desktop), but I was sure there must be a better way. I found it...

sudo aptitude install scite
cd ~/.local/share/applications
echo -e "[Default Applications]\ntext/plain=scite.desktop" >defaults.list
killall nautilus

Works a treat. Also, here is my Scite settings file:


Tip: A per-folder settings file can be created. For example, I have created a '' file in the gloox src folder, so Scite will automatically use the correct indentation for gloox, and insert spaces when I use the tab key.

Update: I found later that this only tells scite to open plain text files. If you are dealing with code (as I am) add the following lines too:


If you want to add other file types, find the MIME type by right-clicking on a file and selecting 'Properties', the MIME type you need to know is listed there.

Who am I?

I asked this very question, and found my answer:

You are C++. You are very popular and open to suggestions.  Many have tried to be like you, but haven't been successful
Which Programming Language are You?

Ubuntu on my new laptop (+ how-to)

Yes, my laptop (Toshiba A100-062) did arrive, and yes I had installed Ubuntu within the hour :)

I installed the latest version, 7.04, and had no trouble at all. A far cry from the way Linux used to be, absolutely everything worked out of the box. Once that would have been something uncommon, especially on a laptop. Certainly a pat on the back goes to the Ubuntu developers, and all who contribute directly or indirectly to it.

One of the first things I did was install Beryl, a 3D window manager. A full-quality video of it is here (if you're on Windows and it won't play, you need the Ogg Theora codec, try VLC video player, I think it works there).

A couple of things I would like to document here, in case they help anyone...

Memory card reader

At first I thought it wouldn't work (since that is what a lot of people told me). Sure enough, putting an SD card into the slot did nothing. However I forgot to remove it, and I rebooted with it still in the slot. It seems this was enough to trigger Ubuntu to recognise it, and mount the card.

It worked absolutely fine, until I tried a new card. The one that works is 256MB, and the one that doesn't is 2GB, so perhaps it is incompatible with the reader.

A couple of filed bugs for Ubuntu caught my eye:
Ubuntu Bug #53923
Ubuntu Bug #105284

I get the output posted there while the card is in the slot (Ubuntu tries to load it, fails, and tries again and again...).

ubuntu kernel: [ 3545.540000] end_request: I/O error, dev mmcblk0, sector xxxxx

I still have to test the card in this reader in Vista, so I can be sure it is not just a hardware incompatibility.

None of the workarounds posted in comments to those bugs worked (though I admit I did not try compiling new drivers, I am using the Feisty tifm module). I expect this will be fixed in an update.

Update: It decided to start working all by itself... :D Don't ask me what it was all about.

Second update: In fact this problem seems to be a completely intermittent problem. Sometimes it will work, sometimes it will not. When it doesn't work, I have yet to find a way to fix it, except to repeatedly remove and re-insert the card. Hopefully the next kernel will indeed fix this.

I knew there was a program called 'GSynaptics' which allows extra configuration of your touchpad. Being me, I had to install it. I got an error that I needed to set SHMConfig to "true" in xorg.conf. Not very helpful. Here is what I really had to do:

If you have a section that says "Synaptics Touchpad" in /etc/X11/xorg.conf already, you can just add the line:

Option "SHMConfig" "true"

to the section for the device. You must be root to edit this file, so run 'gksudo gedit /etc/X11/xorg.conf' for a GUI or 'sudo nano /etc/X11/xorg.conf' in Terminal.

If you don't have such a section, add this somewhere in /etc/X11/xorg.conf:
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "SHMConfig" "true"
Close all your applications, log out, and press Ctrl+Alt+Backspace to restart the X server. If you haven't already, install GSynaptics.

Supend to RAM (Sleep), Hibernation and Resume

Although initially working, and working at the time I made this post, I have added this section when I discovered that somehow suspend/resume was broken. I fixed it by doing the following:

Change these options in /etc/default/acpi-support:


Note: I also changed: MODULES="tifm_core tifm_sd tifm_7xx1"
This probably isn't right, but I'm too lazy to change it back right now :). I am concerned that it may lose write-cache data for the SD card if you suspend to RAM. Maybe it won't, but you have been warned!

Next, reboot, and immediately press F2 to enter the BIOS. Change "Enable support for legacy USB devices" to 'Disabled', then Save and Exit.

Test suspend/resume, it should work. If you have a problem with the keyboard/touchpad not working after resume, download the patch (and apply it with the instructions) from this blog post.

Suspend/resume now works fine for me.

LCD Brightness

Maybe not an issue for most people. For some reason the LCD brightness controls in most places don't seem to work, yet controlling the brightness manually is possible.

Create a file /usr/bin/setbrightness:

sudo nano /usr/bin/setbrightness

Paste into it this:

sudo sh -c "echo $1 > /proc/acpi/video/VGA/LCD/brightness"

Press Ctrl+O to save, and Ctrl+X to exit. You can now change the brightness with:
`sudo setbrightness 10` (this is the lowest brightness)
Possible values are: 10 25 35 50 60 75 90 100 (other values will be ignored)

To allow any user on the system to use setbrightness with no sudo:
`sudo chmod a+w /proc/acpi/video/VGA/LCD/brightness` (without the quotes)
This may not last between reboots though.

Links (the places from which I gathered all the information I used):
Debian Etch on a Toshiba Satellite A100-159
Ubuntu: Synaptics Touchpad

Also, how to automatically switch off the touchpad while you are typing (I haven't tried it yet):
Disable Touchpad While Typing - Ubuntu Forums
Ubuntu Tutorials - Temporarily Disable Touchpad While Typing
Disable Touchpad Tapping While Typing - Ubuntu Forums
Toshiba Satellite Laptop Success Story -Ubuntu Forums (Where I found the suspend/resume fix I wrote above, slightly modified for the A100 with Intel graphics)

Sunday, May 06, 2007

Versioning FIle System

I haven't tried it, but the idea is a good one. Every time you create, modify, or delete a file, Ext3Cow records the changed part of the file in a different place on the disk, preserving the old data that was in the file.

Using this system it is possible to find out what any file was like, at any given point in time. There is even a file manager that supports browsing ext3cow volumes.

There are many applications for this kind of file system, especially in places where revision control tools (CVS, SVN...) will not suffice.

New Laptop

Finally I ordered a laptop for myself. I've been saving up for a while, but now I will be able to use my GSoC money towards it also. It should be arriving this week.

I'll be probably doing most of my development on it, so the first thing I will do is install Ubuntu alongside the pre-installed Vista. Yes, because I still need access to Windows for testing things, I will probably keep Vista, but reduce its partition size and dual-boot it.

Seeing as I have never used Vista before (only looked over someone's shoulder) you can be sure I will be posting a Vista vs Ubuntu right here very soon :)

OLPC and Microsoft

The OLPC project is hoped to bring computers, technology, and even the internet to those who currently have no access to it. Since the project began it has been known to have been intended to run a version of Linux. Despite recent rumours that OLPC had been persuaded otherwise by Microsoft, the OLPC is, and will remain, "a free and open-source shop.". Microsoft on the other hand have their own project to reach to the same user base as the OLPC - they will introduce a new $3 bundle of software (the BBC article linked to also draws parallels between the 2 projects).

The AACS Saga

It is unlikely that many missed this one. At one point it was even responsible for the news site Digg going offline...

It started when details of a crack for scrambled HD-DVDs was posted on the internet. This crack involved a (supposed to be) secret key used to decode the DRM-enabled DVDs. It caused quite a storm, and spread across the internet, mainly through blogs. Bloggers excercising their right to free speech posted the key. Obviously it was not long before the story got 'Dugg'. However after the AACS-LA announced that it was prepared to take legal action against those publishing the key, Digg began censoring stories linking to the number.

Disgruntled Digg users rebelled, and began mass-posting stories about the crack to the site. The whole issue has become something of an internet phenomenon, and the key can be found from T-Shirts to well, anywhere! In the end forcing Digg to side with its users, saying they had made their wish clear.

Though the AACS-LA's threats have stirred up internet users worldwide, and only served to publicise the key more than ever before, a more important story may have been forgotten. There exists a crack published a while ago that can not be revoked the way this infamous key has been. A much deeper flaw exists in the copy protection method itself. Perhaps HD-DVD and the video industry in general will go the same way as the music industry, which is now shifting away from DRM.

Microsoft gives guidance on OS design

Some of you may have tried Windows Vista. It has a great new feature 'User Account Control', or UAC.

UAC allows users with administrative privileges to use the PC without the privileges enabled, until they are required. When a program requires the extra privileges, Windows pops up a dialog, describing what program is asking for administrative rights, and you must enter your password to continue. This is a great feature, and it makes using the computer for everyday tasks much more secure. For example, if your web browser was compromised, it would be limited in what damage it could cause, unless you had previously granted it administrative rights.

You may wonder why I am telling you this (you probably already know about UAC). However Microsoft have publicly said last week how great UAC in Vista is (though it hasn't stopped Apple making fun of it!). In fact they recommend that other operating systems should support it too!

"If you look at it from an architectural direction User Account Control is a great idea and strategically a direction that all operating systems and all technologies should be heading down," -- Peter Watson, Microsoft Australia's chief security advisor.

Chief security adviser? He must have used Linux, even briefly, at some time, right? This is a feature that Linux has had since the beginning, in the form of 'su' and 'sudo'. Before you think otherwise, no, Windows Vista was not even the first OS to bring it to the desktop! Here is a screenshot of Ubuntu:

Ubuntu 7.04 Released

I was originally posting a single, long post, of interesting news since I last posted. I decided to split it up though, so here goes...

Well, Ubuntu version 7.04 ('Feisty Fawn') has been released, and I'm running it :) Not too much has changed, except that this time I decided to opt for the standard Ubuntu, and not Xubuntu which I have been running up until now.

There is no particular reason for this. I still love Xubuntu, I'm just going for a change, that's all. Putting up with GNOME, too :) That said, I am not finding resource usage /that/ much higher than Xubuntu. I find that Xubuntu's interface is actually far more intuitive, and far more customisable - perhaps this is from being an ex-Windows user. However the GNOME interface wins in features, and it is well polished.

EDIT: I also forgot to add that the next version has been announced too, and it will be 7.10 'Gutsy Gibbon'!

Dell will offer Ubuntu

Dell are set to offer Ubuntu pre-installed on their consumer PCs. This news comes not long after Michael Dell was discovered to be running Ubuntu 7.04 (which was still a release candidate at the time) on his laptop. This is a huge step forward for Ubuntu, and desktop Linux. Perhaps the age-old argument "Is Linux ready for the desktop?" finally ends here...


A small, power-efficient, inexpensive computer/device, that runs not only Linux, or even Ubuntu, but... Xubuntu! Linutop has many possibilities, especially with being so portable. Media streaming (if the CPU proves able), it is also a handy as just a portable PC. It has no internal storage, but comes with a 1GB USB key containing the OS and software. It has ethernet, USB and audio ports, and of course connects to an external monitor.

Sunday, April 22, 2007

My Google Trends

Google recently released a new 'Web History' service, where they log your wanderings through the web. A great tool, or a ploy to get even more personal data about you, this is a service Yahoo have offered for a long time.

Suffice to say, I won't be using it. However I do have Search History enabled. It logs your all your Google searches, and logs which results you click on, with the aim of getting better results next time.

Some statistics from that service (running since May 2005):

Yes, I am responsible for Google searches at every one of the 24 hours in a day...

Friday, April 20, 2007

Me, Blogging and Bookmarks

I have been in receipt of complaints that I don't post to my blog often enough.

Here's an idea... subscribe to my feed, or better, my sites tagged 'interesting'. I use for all my bookmarks now, and post there more often.

Not that this is a way to get out of posting to my blog... :)

Tessa IM, the Jabber client, 29/9/2005:

[10:17:33] I think there is space for 1 more Jabber client
[10:17:36] In C++
[10:17:46] Like Miranda, but stable, and Jabber-only

Finally, a year and a half later, I am writing it myself :)

It's called Tessa IM, and no, I don't really know how the name came to be. But neither do Miranda IM, theirs :)

It is designed in quite the same way as Miranda, but avoiding some weaknesses Miranda has. Some of the most obvious ones are inflexible plugin handling, and the fact that Miranda only runs on Windows.

Although using C++, Tessa employs Lua to bring even more flexibility, and will be cross-platform, by having the ability to be independent of the GUI used. Although we are starting with wxWidgets, it makes possible people writing Qt, Win32, ncurses, telnet interfaces... quite limitless.

Although the design will allow for multiple network plugins, like Miranda, officially (for now) only Jabber will be supported. For this we will use gloox, a great library which supports more XEPs than many clients do now.

If you are interested in joining development (several people have offered help already) then comment here, email ( me, Jabber me (, or post to the development group. We also have a MUC at!

Google Summer of Code

Dear Applicant,

Congratulations! This email is being sent to inform you that your
application was accepted to take part in the Summer of Code.

Yay! I applied to work on gloox, a C++ Jabber library, under the hood of the XMPP Software Foundation as the mentoring organisation.

This project is important to me in many ways. Firstly I know I need to get back to C/C++ coding, of which I have not done much for quite some time. Second, my task is all about adding XMPP-over-HTTP support, which is currently my only way around my ISP's restrictions. Gloox is also the library that Tessa (my new Jabber client, more coming later) uses.

All this, plus the (much needed) payment, and being able to add this to my CV, all is good :)

I will be posting development progress updates to this blog, tagged with 'Jabber' and 'GSoC' (view) (rss).

Some other interesting projects I really look forward to seeing:

Saturday, March 17, 2007

OpenID, Jyte, and good-heartedness

If you don't know what OpenID is, I predict that you will by this time next year. If you don't have an OpenID, you will have someday (or an identity protocol that federates with OpenID), I am sure.

OpenID is not a new concept. It allows you to have one identifier (like you usually have a username), and a single password. You can use your identifier, in any site that supports OpenID (they are rapidly increasing in number). However, you will only ever need to enter your password once... on the site that provides you with your OpenID.

Yes, that's right. You can now log into sites without using a password. I have edited a couple of wikis using my OpenID only, and I can't wait until I can do the same with forums, and blog comments.

Your OpenID provider holds your data, and they allow you to control which sites you log into can see what parts of your data.

How does it work? Well, in brief... you use your OpenID to log into a site. To make sure that you are the owner of the OpenID, the site checks with the OpenID provider. If you are already logged into to the provider, then the site will log you straight in. If you are not logged in yet, you will be redirected to your provider's site, to enter your password and log in. The site you are using your OpenID on NEVER sees your password!

Another great thing about OpenID is something called 'delegation'. I'll be the example here. My OpenID is: However I have edited my blog so that it will redirect to when used as an OpenID. The result? Now I can log into OpenID sites using my blog URL! I can do this with any URL in my control.

The best thing is, it is an open protocol!

Read more about OpenID:


Jyte is a relatively popular Web 2.0 app that relies on OpenID, it is impossible to use the site without one.

Jyte allows you to both post, and vote on, 'claims'. A claim can be anything, for example "I like strawberries!". If someone does indeed like strawberries, they can agree. If they do not, they disagree. It is also possible to make claims about people (using their OpenID) and to relate your claim to other claims. As with any Web 2.0 application... it also has tags.

It's a simple idea, but works well, and is highly addictive. Be warned.


PS. Incidentally:

Tuesday, January 23, 2007

The Big Bad ISP?

I have told this story so many times, I forced myself to tell it once more, so I will not have to again :D

For months now, during certain times of the day (early evening until 11PM), I have been unable to use the internet, with the exception of HTTP, which is web browsing. All other attempted connections fail, transmit a FIXED amount of data (I think it is 1Kb, but I have not yet counted) and then hang, or the data packets can simply arrive delayed... often by hours.

I can't state for definite that this is my ISP filtering traffic. How can I? They have not announced they are/will, though they do 'reserve the right to at any time'. Until I get a definite answer from them, I shall not write their name here.

I am hoping to resolve this, (currently battling with their seemingly non-English technical support), on the basis that this problem severely limits my use of the internet. I shall switch my ISP if all fails.

To be continued...