Saturday, October 20, 2007

.signature

One man's constant is another man's variable. -- Alan Perlis


Alan Perlis was one of the finest specimens of the Real Programmer breed. Back in the days where Computer Scientists didn't exist, he and his kind were responsible for making many of the decisions that shape our view of computers today. I'm particularly fond of Perlis because of his views on Compuer Science:

I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands. What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.
The Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman

Unfortunately, things haven't quite turned out like Perlis would have wanted.

Besides of his many contributions to Computer Science, such as his work on ALGOL, Perlis is very well known for his Epigrams on Programming, of which our quote is the first one. I like this quote because it reminds me that there can never be an ultimate truth in programming due to our human condition.

Wednesday, October 03, 2007

Nerd Food: Interview with Federico Mena-Quintero

Pretty much anyone who is involved with Free Software - even just as a lowly user like myself - has heard of Federico. His blog is a source of insightful ideas on Gnome, and lately, on performance - combined with a healthy dose of interest in politics and, more importantly, good food. I decided to send a few questions to Federico, mainly on the topics I was most curious about, and he kindly replied to my questions - and did so in record time! Many thanks to Federico for taking time off his busy hacking schedule for this interview.
(C) Gnome Foundation

1. You are one of the founders of the Gnome project, which is currently celebrating ten years of existence. On a recent interview you gave to Fosdem, you considered the platform to be maturing. However, as we all know, the last 10% normally take 90% of the time, and it's considered to be boring work. What do you think the Gnome project needs to do to get people to focus on those remaining 10%?


Basically, to provide an incentive to get that last 10% of the work done :) Instead of smacking people with a stick for not writing documentation, you could have a web page with a bar chart of "percentage of documentation coverage". Then it becomes a competition: use a carrot instead of a stick.

I'd also like companies to get more involved in this. If they want to ship GNOME as a development platform they support, then they could very well employ people to do those missing bits.

2. You have been one of the champions of performance in Gnome for a while now. As functionality increased, Gnome started suffering more and more from performance problems, particularly when looked at from a low end perspective. You have been trying to explain to the masses that performance work is interesting. What do you think can be done to increase developer focus on this neglected area?

The thing about fixing performance problems is that nobody teaches you how to do it. There is very little documentation out there on how to generically approach an optimization problem (I intend to do something about this, but oh, time, time, time!) :)

Also, sometimes you fix a performance problem, but it reappears in the future. This happens when you don't leave an infrastructure in place to let you run a benchmark periodically. You need to be able to see if there are performance regressions.

Our tools are slowly getting better, but there are really very few people working on optimization and profiling tools. It takes a *ton* of time and skill to write a good tool; maybe that's why there are so few of them.

Finally, profiling and optimizing is really about following the scientific method ("make a hypothesis, change one thing at a time, measure, confirm your hypothesis, etc."). This requires discipline and a lot of patience.

Basically, it's a problem of education :)

3. Earlier on this year, Gnome users and developers met for GUADEC. Did you find the conference as productive as in previous years? How important is GUADEC for the Gnome user and developer community?

Yes, this GUADEC was tremendously productive! I think the venue helped a lot; the Birmingham Conservatoire is rather compact and has nice practice rooms that anyone can use. So, you could grab a couple of hackers and go to a room to hack peacefully.

GUADEC has always been important, even more so now that our community is large and widespread. It is about the only time in the year when most of the GNOME contributors get together in a single place and are able to talk in person. Do not underestimate the productivity of talking over a beer :)

4. From the outside world, it appears Novell is a company who has regained it's soul and direction with Linux. How was the transition from Ximian into Novell?

Like all acquisitions, it was a bit rought at first. It's what you get when you switch from being in a small company where you know all of the employees, to one with several thousands of people. You have to adjust to bigger processes, more layers of management, new locations, new paperwork...

It has been very interesting to see the mindset of the old-time Novell people change over time. At first they seemed reluctant to touch Linux and free software, since they were of course Windows users. Then we had a period with lots of questions, lots of bugs that needed to be fixed, lots of re-training... and now we are in a very nice period, when people have accepted that we must all use our own free software. People seem to be productive with it and happy.

I miss the monkeys, though.

5. You are currently telecommuting from Mexico, a position envied by a most developers out there. Do you find that telecommuting helps improving your productivity? Are there any downsides to it?

It has good things and bad things. Good things: working in your pajamas if you feel like it, not having to commute, taking a pause when you are stuck in a hard problem to do a bit of gardening. Bad things: you can't talk to people in person. You must fix all your networking problems yourself. Sometimes, when you are uninspired, it's nice to be able to look over someone else's shoulder or talk to them.

6. Can you describe your typical day at work?

Well, since I work from home... :)

I wake up. If my wife and I are hungry, we make breakfast while my email gets downloaded. If we are not hungry, I'll just check for super-urgent email and then start programming (fixing bugs, doing new development, reviewing patches, etc.).

I usually try to get some programming done in the morning, while my brain is fresh. Processing your email in the morning is a really bad idea; it will take you up to the afternoon and by then you'll be tired to really write code.

We have lunch at really irregular hours. Sometimes it's more like an early dinner. I have the bad habit of not stopping working until I'm exhausted or my wife is angry that we haven't gone out to the supermarket yet, but I'm trying to fix that :)

In the afternoon I tend to do "light" work... maintaining wikis, answering email, coordinating people. I don't really have a fixed work schedule.

7. Many developing countries are increasingly looking at Free Software as a way to bring down the digital divide. Do you find that Mexico is taking advantage of Free Software - particularly since it has two lead Free Software developers? Are there any lessons to be learned from Mexico's experience?

Mexico is blessed and cursed to be so close to the USA. There is plenty of basic usage of free software by individuals (often enthusiastic students), but relatively little usage in the public and private sectors.

People in Mexico get very impressed by rich people; most Mexicans want to be like the rich people from the USA they see on TV. It's very easy to woo us into accepting their ways.

So, every time there has been some noise about using free software in the public sector, Bill Gates has flown down, organized a big business lunch with government officials, and made sure that they keep using Microsoft products. If you are an ignorant politician, you will love to gloat that you had lunch (imagine, lunch!) with Bill Gates, the richest man in the world --- and whatever he says must be correct, of course. The problem we have is that most of our politicians don't have the faintest idea of the economic and cultural implications of free software, unlike those in the European Union (see the recent report on the economic impact of free software there!).

Thanks for the interview!

Saturday, September 29, 2007

.signature

"We must know, we shall know." -- David Hilbert


David Hilbert was a great German mathematician. What I appreciate the most about him is his quixotic personality and single-mindedness, going along with Bertrand Russel on their impossible quest to clean mathematics of all doubt and uncertainty, always searching for strict solutions through pure thought. In 1900, Hilbert came up with a list of 23 fundamental problems, many of which are still being investigated to this day. In 1930, Hilbert finished a famous speech in Königsberg with the words "We must know, we shall know", a phrase that fits perfectly the life-long devotion he had for mathematics.

Friday, September 28, 2007

Mighty Monty is Down

We knew it had to happen one day, but never this soon. The day had started badly, a drizzly sort of day, greyness and cold everywhere. To make matters worse, London transport was yet again against me, trains were cancelled, trains were overflowing with people, the human drones bent on one thing only: to get to their destination at any cost. I was one of them. In the madness of rush hour, a distress called reach me: Shahin and Monty were in big trouble.

Monty, our faithful Rover Metro, has been with us for just under six months, and in this period, it has been the definition of reliability itself. Its name comes from the licence plate - who needs vanity plates when sheer randomness is trying to tell you something? - and it's character is as English as the brand: not particularly pretty but very functional and reliable. Never once did it broke down, never once did it chug - a real trooper, always ready for the next long haul trip. When we came back from Africa, Monty took us from London to Southampton and back several times a week. It took us from Hertfordshire to London almost weekly. And he took Shahin to work and back everyday. Ah, but not Friday.

Shahin was driving Monty along on the motorway as usual, seventy, more, miles per hour, when Monty started to loose speed and make noises of all sorts; suddenly from the fast lane she had to move to the middle lane; soon after, from the middle lane down to the slow lane; and from the slow lane, having nowhere else to go, she had to get out of the motorway. She remembered the wise words of Jay to our friend Stacey, also involved in an unfortunate breakdown: "Whatever you do, get the hell out of the motorway!!!". The lights were flashing, smoke was coming out of the engine, Stacey was scared, but she managed to impose her will on the unruly metal. And so did Shahin, Inspired by Stacey's brave behaviour in combat, and by the heavy cost of towing cars off the motorway.

Since, unwisely, we didn't have any coverage of any kind - we were going to do it, I swear! just never had the time! - we had no option but tow the car ourselves. Shahin first tried it with her sister and the brother-in-law, but their car didn't have the required apparatus. Then she rung Stacey for help, and her boyfriend Jay agreed to come to the rescue later on at night.

Night came and we all met down at Stacey's house for the operation. In our innocence, we were entirely unconcerned - how difficult can it be right? Then Shahin had a warning call from her brother, telling her how hard towing would be, had we done it before and so on. Even then I still remained unconcerned. It was only when we got to Monty and Jay started giving us instructions, in that mellow but grave voice of his: "whatever you do, make sure you keep the rope taut or you'll end up running into the back of the van. And remember, I won't break so you have to break for me. If I break you won't have enough time to react and crash into me.". OK then, I thought, other than the fact that were going to die, it's a dead easy job.

Taut was a word I learned then, but which will undoubtedly stay with me forever. The cars got hooked up just outside of Welwyn, our target being Arlesey - twenty minutes of straight driving at a good speed. Miles away. And that's when it dawned on me how hard this was going to be. Shahin was driving - I was nowhere near brave enough.

We drove in the dark, cold English countryside lanes, barely able to see anything but the white van one meter in front of us and it's flashing lights. I thought ten miles or so per-hour was going to be our top speed, but the speedometer just wouldn't obey and kept on going higher and higher until it settled at thirty or so. It felt like the fastest ride we've had ever had. Trees were rushing by us, darkness was rushing fast. Like good soldiers, we focused on the rope and kept it tight as possible, as tight as it had ever been before. But to keep it tight, we had to break often; and knowing the precise amount of breakage required is nigh impossible. Every time Shahin pressed the breaks, time froze for a split of a second; then the van would yank us, making us bounce like a ball. We would then do the same to the van, pulling it backwards, until the whole process would settle and we'd be on a straight line again. Perfectly within the laws of physics, but extremely scary nonetheless.

We stared intensely at the rope, to the exclusion of everything else. Not much we could see anyway. But then, breaking took its toll and a break pad died with an awful grinding noise - hell itself and its horsemen coming after us. We panicked with the noise, but kept on going straight on. The worse was still to come. As we past one strangely named locality after another, we suddenly noticed we weren't going the right way. It could be that Jay new a shortcut, or even a long cut, anything but just get us there. But no, we were really, truly lost. All cars stopped, maps were taken out. We had crossed the county border, and were now in the strange land of Bedfordshire - effectively, off the map. On the good side, it appeared we were not that far away.

Eventually we settled on a plan of attack; but then, as we started the cars and went past a hump, the rope snapped. Jay kept on going, but we got left behind. I thought it was the end of our adventure, somewhere in the barren lands of Bedfordshire, all was lost and we'd have to call some towing company. But resourceful Jay got rid of the metal bits, tied a simple knot and we were on our way again. All the excitement was a bit too much for Shahin, she was getting really scared by this point, but kept on going. There was nothing we could do but keep on going till the end.

It's a strange feeling, being behind a car, two meters or less, at thirty miles per hour; your brain is fully aware that any breaking, any breaking at all and you will crash. It's a simple equation really.

Sometime later we found ourselves driving in town center Arlesey, past all the pubs, past all the shops, excitedly looking for the garage. Shahin spotted it, screamig. We had made it alive. But we learned our lesson. Next time, we'll pay the hundred pounds for towing gladly - and probably even add a tenner to the chap.

Saturday, September 22, 2007

Blogosphere

OK, it appears one of my favourite blogs has really ended: Sem Destino. This blog had a great atmosphere and was always the place to go to when one needed to get closer to Angola. All the best to miguel, and a speedy return to activity! In particular, we all want is photobook, as he has some incredible pictures on that blog.

The good news is the crowd around the blog decided to create another blog, with the creative title of Life Goes On - Aguardando o Regresso do Chefe (Waiting the Boss's Return) :-) it's a great read too. In particular, the posts about Blue and Agostinho Neto made me homesick :-)

Another blog that is always interesting to read is Dave Richards. Totally techie. It's great to see how a large scale linux desktop deployment looks like, the problems it faces, the solutions they come up with.

I haven't had much time to read other people's blogs of late - other than the usual nerdy ones - but I will make it up this weekend...

Nerd Food: Take a Walk on the Server Side

When it comes to programming, for me there isn't much of a choice: the place to be is the server side. I may work a lot on the client side these days, but GUIs and chrome never had much of an attraction for me. I do have a healthy dose of respect for those who love it: client side work is a mixture of coding mastery, design skills and a big dollop of human psychology. For some reason when I visualise the client side I always imagine nice, pristine offices with lots of light and huge amounts of human interaction between programmers as well as between programmers and users.

The server side is a totally different beast. I always visualise it as the dark place of green terminals and server rooms, of never ending performance charts and monitor applications, the land of blinken lights. Of course, these days we all have to share the same desks and deal with the same layers of managerial PHBs - and with HR and their latest social experiments - but the fundamental point is that these are two very different crafts.

Thing is, I find that the server side is extremely misunderstood because the vast majority of developers out there come from a client background. When developers cross over, their bias introduces many, many problems on server side applications, simply because they are not used to the server way of thinking.

This article covers many mistakes I've seen over the years, in the hope you may avoid them, offering some tentative solutions.

The Languages

There really is only one language to do server side work: C++. Yes, I'm a zealot. Yes, I know that both .Net and Java are much easier to get along with, and have none of the tricky memory allocation problems that riddle C++ applications (those that haven't discovered shared pointers, at any rate). I agree that, in theory, both Java and C# are better options. In practice, however, they become problematic.

The right staff. It's difficult to find a got Java/C# programmer, just like it was difficult to find a good VB programmer. The client side is a very forgiving land, and not only can bad programmers get away with it for years but you also have to remember that great client side programmers don't need to know their tools to the level of detail that server side programmers do. How many times do you need to read up on scheduling to do a GUI? Or on TCP flags? Not often, I'd wager. So the reality is, if you have been doing any of these languages for a while, you can talk all the right TLAs and describe all the right concepts with easiness and fly through most interviews. But when it comes to doing the job, you will probably be reading manuals for days trying to figure out which subset of technologies on your stack are good for server side and which ones are just plain evil performance killers. A good server side Java/C# programmer will use only the smallest set of features of the language when programming, knowing exactly the cost of those features.

It is, of course, really hard to find a good C++ programmer too. But here, there are two things that help us. There are not that many left doing C++ work - most of them have migrated to higher pastures by now, in particular those that always felt uncomfortable with the language. The few that are left are doing server side work. The second thing is, due to C++'s lower level of abstraction, even a bad C++ programmer is well aware of the bare metal. It basically forces you to think harder, rather than just pickup a manual and copy an example.

Minimise layers of indirection. Another problem I have with Java/C# is indirection, which is another way of saying performance. Now, I know all you Java and .Net heads have many benchmarks proving how your AOT compilers optimise on the fly and make them even faster than native code, or how your VM is much better at understanding application's run time behaviour and optimising itself for it. And the fact that you never worry about memory leaks goes without saying. Well, that's all fine and dandy as far as the lab is concerned.

What I found out on the field is different. Resource allocation is still a massive problem, either due to complex cyclical referencing, or just plain programmer incompetence. Memory consumption is massive, because programmers don't really understand the costs involved in using APIs, and thus just use whatever is easier. This, of course, also impacts performance badly. And to make things even worse, you then have to deal with the non-deterministic behaviour of the VM. It's bad enough not knowing what the kernel will decide and when, but when you put in a VM - and god forbid, an application server! - then its nigh impossible. It could be a VM bug. Or it could be that you are not using certain API properly. Or it's just your complex code. Or it's the OS's fault. Who knows. That's when you have to fork out mega-bucks and pay an expensive Java/.Net consultant to sort it all out. And pray he/she knows what he/she is talking about.

The truth is, I've never heard of a Java/.Net application on the field that was found to be more performant than it's C++ counterpart. In part, this is because we are comparing apples with oranges - the rewrites seldom cover the same functionality, adding large amounts of new features and making straight comparisons impossible. But there must be more to it too, since, from experience, Java/.Net engineers seem to spend an inordinate amount of time trying to improve performance.

Now, before you go and start rewriting your apps in C++, keep this in mind: the biggest decision factor in deciding a language is the competence of your staff. If you have a Java/.Net house, and you ain't going to hire, don't use C++. It will only lead to tears and frustration, and in the end you will conclude C++ is crap. If you are really serious about C++, you will need a team of very strong, experienced C++ developers leading the charge. If you haven't got that, best use whatever language you are most competent at.

Another very important thing to keep in mind is the greatest C++ shortcoming: its small standard class library. It is perhaps the language's biggest problem (and probably the biggest reason for Java/c#'s success). This means you either end up writing things from scratch, buying a third party product (vendor lock-in) or using one or several open source products, each with their own conventions, styles, etc. At present Boost is a must have in any C++ shop, but it does not cover the entire problem domain of server side development. These are the following things to look for in any library:
  • Networking
  • Database access
  • Threading
  • Logging
  • Configuration
  • Serialisation

The Hardware Platform


As far as the client side is concerned, platform is almost a non-issue: you will most likely only support Windows on x86. After all, Linux and Mac are so far behind in terms of market share it's not even funny. The cautious developer will point out that a Web application is a safer bet, although you may loose much richness due to the limitations of the technology. AJAX is nice, but not quite the same as a solid GUI. If kiosks and POS are some or all of your target market, you will be forced to look at cross-platform since Linux is making inroads in this market. And you can always use Java.

With regards to the server side, one must look at the world in a totally different light. Because you never know what your scalability requirements are, there is no such thing as an ideal hardware platform. Today, one 32-bit Windows server with 2 processors and 4 gigs or RAM may be more than enough; tomorrow you may need to run apps that require 20 gigs of RAM and 16 processors, and big iron is your only option.

So the most important aspect in terms of the hardware platform is this: whatever you do, _never_ commit yourself to one. Write a cross-platform application from the start, and ensure it remains one. Even on a Windows only shop, it's not hard to use a cross-platform toolkit and have a PowerPC Linux box on the side to run tests on. Its actually not much harder to write cross-platform _server side_ code, as long as you have a library you can trust to abstract things properly. And as long as you take cross-platform testing seriously.

Think of it as an insurance policy. One day, when your boss asks you for a 10-fold increase in deal volume, you know you can always run to the shop and buy some really, really big boxen to do the job. Tying yourself to an hardware platform is like putting all of your eggs in one basket; better not drop it.

The Architecture

The single most important lesson to learn on the server side is that architecture is everything. No server side project should start without first having a top notch architect, known to have built at least two large scale systems. You can always do it on the cheap, save the money and get more programmers instead, but remember: you will pay the cost later. Things would be different if maintenance was taken seriously; but don't kid yourself, it's not.

When the business suddenly tells you that you need to double up capacity, or support Asia and America, or add some products that are radically different from the ones your system now processes - that's when you'll feel the pain. And that's when you'll have to start designing v2.0 of your system, starting mainly from scratch.

One of the key differences between client side and server side work is this focus on scalability. After all, there is only so much work a single person can do, so many simultaneous instances of a client side application that can be started on any one machine, and so many trades that can be loaded into a single PC. Not so with the server side. You may think that processing N trades is more than enough, but that is today; tomorrow, who knows, 10xN could be the average.

A good architect will probably look at the problem and find ways to distribute it. That is, to design a very large number of small, well-defined servers, each of which with a small subset of responsibilities - all talking to each other over a messaging bus of some kind. The system will use a narrow point of access to the database, and huge amounts of caching on each server. This will allow the system to scale as demand grows, just by adding more servers. Hardware is cheap; software engineers are expensive.

The ideal architect will also be clever enough to allow client tools to be written on Java or C#, and let someone with more experience on these matters lead its development.

In summary, the key components of a system will be along these lines:
  • A solid, cross-platform, scalable relational database. Oracle and Sybase are likely candidates, and PostgreSQL on the free software side of things;
  • A solid, cross-platform, scalable messaging bus. Tibco, Talarian, etc. Choose something you have experience with. Never, ever, under any circumstances write your own. (at present, I'm not aware of any free software alternatives for messaging);
  • A large number of small servers, communicating over the messaging bus.
Getting the architecture right is essential; but once you're there, you must work hard to maintain it.

The Database

Just as you need an architect, you also need a DBA. You may be a hotshot when it comes to databases, you think, but the truth is a good DBA will take your optimal code and optimise it ten times over. Minimum. It's what they do for a living. It's important to get the DBA early into the system design process to ensure no crass mistakes are made on the early stages. These are much harder to fix afterwards. And make sure the schema is designed by him/her, with large input from developers - minimising the impedance mismatch between the C++ datamodel and the database schema.

If your DBA hasn't got the bandwidth to write all the stored procs directly, at least make sure he/she sets down the guide lines on how to write the stored procs, and if at all possible reviews code before check-ins.

You should also create a repeatable testing framework for performance on all procs, to detect quickly when somebody makes a change that impacts performance. But a good DBA will tell you all about it, and many things more.

A Catalogue of Mistakes

There are many small mistakes to be found on server side apps, some at the architectural level, others at the implementation. This is a summary of a few I've seen over the years.

Overusing XML. Whilst XML is a brilliant technology to enable cross-platform communication, and it has many benefits for client side development, it is of very limited usage on the server side. Pretty much the only things it should be considered for are:
  • Allow Java / .Net clients to talk to the server side;
  • Allow external parties to send data into our system;
  • Save the configuration settings for servers.
It should not be used for anything else. (And even then, you should still think really hard about each of these cases). It certainly should not be used for communication between servers within the server side, nor should it be used, god forbid, in any kind of way within the database. De-serialising XML in a stored proc is an aberration of server side nature.

Bear in mind the following XML constraints:
  • The vast majority of the message is redundant information, making messages unnecessarily large. This will clog up your pipes, and have particularly nasty effects in terms of throughput on high-latency links (any large message will).
  • XML messages normally have associated a schema or DTD. Servers that you yourself wrote will use the same serialisation code, so there shouldn't be any need to validate these messages against a DTD/schema (you will of course have some sanity checks on C++).
  • Serialising and de-serialising from XML is horrendously expensive. In particular, if all your servers are running on the same hardware platform, there are absolutely no benefits - and the costs are massive.
  • Compressed XML is a solution in need of a problem. You may save costs on transport, but these have been transferred to an intensive CPU bound process (decompressing and compressing).
In conclusion, XML is not cheap. As your deal volumes increase, you will find that you're spending more and more of your absolute time transporting, serialising, de-serialising and validating. It's fine for one-offs, for sure, but not for volume.

The only type of serialisation permitted on the server room is binary serialisation. You can make it cross-platform using something along the lines of XDR or X.409.

The lesson we learn from XML is applicable everywhere else on the server side: always evaluate cautiously a technology and make sure you fully understand its costs - in particular with regards to increases in volume.

XML is a brilliant technology, and fit for purpose; that purpose is not efficiency.

Cool technologies. If you didn't listen to my point on how C++ is the only option and insisted in using Java or C# - or, god forbid, you found a way of doing it in C++ - you may have started using reflection. This, and many other technologies are utterly forbidden on the server side.

Very much like XML, the problem with such technologies is that in 99% of cases they are used to solve problems that never existed in the first place. I mean, do you really need to dynamically determine the database driver you are going to use? How often do you change relational database providers without making any code changes? Of course, those calls would be cached, but still, it's the principle that matters. And does it really help application design to determine at run-time which method to call, and its parameters and their types? This is several orders of magnitude more expensive than virtual functions. Does it really make coding any simpler? Because the cost is huge, and the scalability is poor. If you are using reflection because there is large amount of repetitive code, which can be factored out with reflection, consider using a text processing language to generate the repetitive code. This is a clean, maintainable and performant solution.

Another pet peeve are components and distributed technologies. Do you really need complex technologies such as (D)COM and CORBA? Components are nice in theory, but in reality they add huge amounts of maintenance problems, configuration costs, debugging becomes much harder and performance is hindered in mysterious ways.

In the vast majority of cases, you can create your own little messaging layer in extremely simple C++ - code that anyone understands and can debug in seconds - built on top of a serialisation framework such as Boost.Serialisation. Whilst Boost.Serialisation is not the most performant of them all, nor does it have great support for cross-platform binary serialisation, it is good enough for a large number of cases; and you can extend its binary serialisation to fit your needs.

The server side is not the place to experiment. Cool and hip are bad. Pretty much all technologies that are required to make large-scale, scalable applications have been invented decades ago - they just need to be used properly. When choosing a server side technology, always go down the proven path.

Performance testing. One thing many people do is to create servers that can only be loaded up from a database or another server, and can only send their results to a database or another server. This is a crushing limitation, introduced for no reason other than laziness or bad project planning ("test tools? no time for them!"). The whole point of server side development is to be able to offer guarantees in terms of scalability. Those guarantees can only be offered if there is a reliable way of stress testing your components independently, and create a baseline of such tests so that regressions can be found quickly.

Having to setup an entire environment to test a given server is not just troublesome, it hinders fault isolation. It may also mean that there are only a few test systems available. Each developer should be able to have their own development environment.

Of course, don't take me wrong: one should have system-wide performance tests; but these are only relevant if all components passed their individual load tests.

GUI tools. One thing you should consider from the beginning is the ecosystem of GUI tools that are required to manage your system, ideally written in a high-level language such as Java/C#. Here, in the vast majority of cases, usability is more important than performance, and this is where Java/C# are at their best.

The GUI tools should focus on things like:
  1. Account administration: adding new users, deleting them, etc.
  2. Monitoring and diagnostics: graphs on deal volume, health checks to ensure servers are still alive, memory usage, cpu usage.
  3. Maintenance, deployment, configuration: restarting servers when they die, easy deployment and configuration of servers.
  4. Data administration: special functions to perform on the data to resolve cases where duff data was inserted, etc. This is sort of a client for power users.
The biggest problem of not having a good ecosystem of GUI management tools is that your development work will became more and more operational, since the system is too complex to give it to real operators.

Database Serialisation. This is one of the most important aspects of any server side system, and has to be carefully thought out. You should keep it to a bare minimum the number of servers that touch the database directly, and make sure they are physically located as close as possible to the database - but no closer; never on the same machine. All other servers must go to these data servers to read and write to the database.

The second important point is to try to "automate" the serialisation as much as possible. All objects that are serialisable to the database should have auto-generated code (never reflection!) responsible for reading/writing the data. They should also interface with the database via stored procs - never reading tables directly - all making sensible use of transactions.

Keep it simple and Know Your Costs. Optimal code is normally very simple; sub-optimal code is non-performant due to its complexity. This simple truism underlies very much all performance work. It's very rare that one needs to increase complexity to improve performance. In the majority of cases, the easiest way is to ask the simple question: do we really need to do this? And when you decide you really need to do something, make sure you are fully aware of its O cost. Choosing a O(N) approach (or worse) should never be taken lightly because it's a scalability time bomb and it will always blow up when you need it the least - i.e. when the system is overloaded.

I found that Object Orientation is in many cases detrimental to performance, because people are so focused in API's and abstraction that they forget about the hidden costs. For instance, it's common to see a call-stack five levels deep (or more) just to do something as simple as changing the value of a variable. Inheritance is particularly evil due to its encapsulation breaking and tight-coupling. When you think in terms of algorithms and data structures, the costs are much more obvious.

In designing a modern OO system, it's best to:
  • keep inheritance to an absolute minimum, using either interfaces or client-supplier relationships;
  • keep behaviour to a minimum in the objects of your data model - probably best if they are but glorified data structures with getters/setters, on which other, more specialised classes operate on.
Do not optimise early. One classic case of early optimisation in C++ is not using virtual functions because of performance. This may be true in certain cases, but you need to be coding really close to the metal to start suffering from it. However, many programmers refuse to consider inheritance or interfaces at design-time - even in systems where microsecond performance will never be an issue - limiting their options dramatically, for no real gain whatsoever. There are many, many other such examples - like designing your own string class before you proved it to be a bottleneck.

Misuse of threads. Another classic case in server side programming is thread misuse. Many developers look at every bit of code and think: "I'll stick a thread pool in there; this will scale really neatly when we have more processors". The end result of this sort of thinking was apparent at one customer site, where they had over 170 threads (!!!) for one single server application. This application was running in boxes with 64 processors, and sharing them with other instances as well as other servers which also made liberal use of threads.

The problem with this approach is obvious:
  • very rarely is there a need to have more threads than processors (unless you're doing IO bound work; and even then, threading may not be the best solution; consider multiplexing);
  • really thread-safe code requires lots of locking; when you finally make your code multithread-safe you may find it performs as badly as single threaded code - if not worse!
  • having ridiculous amounts of threads hinders performance even if they are doing nothing (as it was the case with our application above) because threads consume resources and take time to construct and destroy.
Server side and threading go hand-in-had, like bread and butter. But they should only be used in cases where few or no locking is required - and that requires large amounts of experience in application design.

Conclusion

Designing large-scale, server side systems is a very difficult job and should not be taken lightly. Lack of experience normally leads to using the wrong technologies and making wrong fundamental architectural decisions, which cannot be fixed at a later date. When designing a large system from scratch, one should always prefer the proven approaches to the new ideas the market keeps on churning.

Monday, August 27, 2007

Afrobasket: Angola wins yet again!

Incredible. Angola wins Afrobasket for an amazing ninth time. We're incredibly proud of each and everyone of you boys! And of the organisers, who demonstrated the capabilities of our country.

Angola v Cameroon, Afrobasket Final. (C) 2007 Afrobasket.com

Friday, August 24, 2007

Afrobasket 2007

Oh. My. God. What can I say about Afrobasket 2007 in Angola. Perhaps just: WE ROCK!!!! :-) Not only did the stadiums get finished on time (incredible, since some of them started less than 6 months before the beginning of the competition), but they actually look pretty good, and stood the test of the first few games without falling over :-) In addition, although there have been a few glitches, and whilst the website is definitely not the fastest or the most professional in the world, it does the job. For all of its faults, this has been one of the most organised events in Africa, and comments like these are extremely encouraging. Maybe one day we will actually see the World Cup in Angolan soil.

I'm extremely proud of the work the entire country has put in, and I think that every Angolan shares the same feeling too. Now all we need is for the boys to bring it back home tomorrow.

(C) 2007 Afrobasket.com

Tuesday, July 24, 2007

Interview with Con Olivas

As everyone knows, Ingo's scheduler is now in mainline. Many have been curious as to why CFS made it when SD didn't. This and much more is now explained here, and even though its a one sided account of the events, one cannot but feel that most of it is a truthful representation of what happened. A must read for anyone interested in the kernel, and free software development in general. The great thing about this interview is, perhaps, the braveness and frankness in which Con expresses himself - as well as how he conveys the dog-eat-dog world of kernel hacking.

Perfect read for those days when you get depressed about working for a bespoke company. Free software hacking has its downsides too.

Sunday, July 08, 2007

Interesting...

Books

Capitalist Nigger: The Road to Success: a Spider Web Doctrine: Didn't really need to swear on its cover; and is a bit patchy in parts, as if the author started with the intention of writing a business book but ended up in a different direction; but, for all of it's faults, it's still a book worth reading. It's an attempt to sound the wake-up call the black race needed for the 21th century, and it goes a long way towards doing that. If the author had spent more time polishing the structure of the book, and made the name and the style less antagonistic, this could be Walter Rodney's successor. As it is, it's not up to the standard, and you may find it a bit crude in places.

África Acima: (Portuguese) After attempting to write a travel book (admittedly only for friends, but nevertheless...), I began to understand a little bit the difficulties involved. This made me appreciate all the more Gonçalo's book. It does a great job in transporting the reader to Africa, and taking us along with him. Gonçalo does sound a bit like a public school boy at times, but overall he does a remarkable job of presenting Africa.

The Bang-Bang Club: I have no words to describe this book, other than absolutely brilliant. Narrates the painful birth of the new South-Africa, from the perspective of the lens of four photographers. Amazing.

Movies

Fantastic Four: Rise of the Silver Surfer: Hated it. I was a big fan of comic books when I was a kid, and I still buy the occasional Neil Gaiman book, but these last few Marvel movies are disgusting. They choose random bits of the story, ignoring or changing really important ones - such as Galactus - and hope it will all turn out alright. Jesus. I just hope Transformers is any better.


Saturday, July 07, 2007

Notebook of a Return to My Native Land - part 14

NOTE: since I'm never going to have enough time to finish the last chapter properly (it has been over two months...) I decided to publish it as it is. I didn't have enough time to check all the factual information so don't blame me if I got dates and places wrong! :-) Without further ado, here is the last chapter of our adventure.


It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate:
I am the captain of my soul.

Invictus, William Ernest Henley

Simon's Town

The flight to Cape Town was hilarious. Seriously. Kalula seems to have this policy of only hiring comedians and our flight attendant was perhaps one of their finest picks. Other than the first time I flew, I don't remember ever paying attention to safety instructions, but this time I felt compelled to listen and so did everyone else on the plane. I can still recall some of the jokes he made:

There is a no smoking policy in all Kalula flights, so please refrain from smoking anywhere on board, including toilets. Besides the usual smoke detectors, we also have installed hidden video cameras in all toilets to ensure you aren't breaking the law. This has the interesting side benefit of keeping the crew amused when we have nothing better to do, which is quite frequently.

If you are going to leave anything behind please make sure it is something worth our while. We suggest cameras, laptops, latest generation phones or lots of money. Passenger on row 15 can leave his girlfriend behind, she's quite fit.

Do you know why Cape Town is called the Mother City? Its because anything you try to do in Cape Town takes at least 9 months.

There were many, many more jokes - every announcement had at least one or two - and most of them were quite funny. Every so often the entire plane would just burst out laughing, begging for mercy.


After a cheap but filling lunch at Cape Town's airport, we begun our quest for accommodation. Usually this is a fairly painless process, as Shahin normally finds a place within two or three phone calls, but this time round she was struggling hard. Around six phone calls in, still with no luck, she decided that something wasn't quite right. What kind of place was this? All the backpackers lodges were fully booked and you even had to make a reservation for dorms! Dorms have been our last resort of last resorts - being middle-aged backpackers, we couldn't help but look at them snobbishly, one very small step above sleeping on the streets. And now suddenly, it seemed we were lucky if we managed to find any dorm space at all. "What kind of place is this?", we wondered.

As we later found out, this was a particularly bad time to go to Cape Town. One of the biggest cycle races was on, and the whole of South Africa had relocated to the Mother City for it. These damned cyclists left total havoc on their wake and were sleeping virtually anywhere and everywhere you can think of. There wasn't a single bed available in any backpacker's and all other places had increased their prices by 100% or more, trying to cash in with the event. It was just far too much excitement for our liking. After all, we were in no particular rush to get to Cape Town.

The best strategy was to bid our time and wait for the dust to settle at a safe distance. Simon's Town, a little village next door, was the perfect candidate. (In my usual aloofness, I thought the destination was being chosen at random, but Shahin, ever the scheming Lonely Planet reader, had her reasons for choosing Simon's Town.) Although part of the route, the town managed to miraculously escape the worse of the accommodation fever that was taking over the province. We instantly booked a room and found transport.

We got driven there in an official candongueiro designed for tourists, with comfy seats and even sporting professionally printed tickets. The driver was a genuine Cape Town coloured, the first we ever met, and we had great difficulty understanding him due to his strong Cape English accent. In truth we barely understood the man talking, which was most unfortunate since he spent the entire journey asking us questions or providing what appeared to be interesting information about the province. Capetonians speak very broad English - in particular the majority who have Afrikaans as their native language - and have an accent resembling a mix of Scottish with Australian, if such thing can be imagined. For the untrained ear, it is next to impossible to decipher. He didn't seem to take offence to our constant ramblings, fortunately, and carried on even though we kept on giving absolutely random answers to his perfectly valid questions.

The transfer to Simon's Town took less than an hour, and the drive there is fantastic, offering great views of the mountains as well as the Atlantic Ocean and its beaches.


We decided to stay in a lodge creatively called "Simon's Town Backpackers". Whilst a no-frills sort of place, it was very clean, not particularly rowdy, had Internet access and, most important of all, a pool table. All the mod coms a tired and weary backpacker needs.

Simon's Town is rather small, not much more than a single long street containing all the shops and most restaurants. Perhaps due to its size, it is very safe to walk around the town pretty much at all hours, and even carrying valuables. What it lacks in size, though, it more than makes up in its quaintness: grand old houses built on top of hills, many over one hundred years old, lovely Victorian summer houses in a palette of watercolour blues and pastel cremes, some Art-Deco.


In our first couple of days I found strange that most young people in Simon's Town, particularly men, were extremely fit - gym obsessed sort of people, bulging muscles coming out of their tight t-shirts, making me look even skinnier than usual. No, this was not a mini-California. Simon's Town is mainly known for its very large Naval base, and all the boys and girls you see out and about are young sailors. Perhaps this also helps to make the town safer, as their presence is bound to dissuade many a troublemaker. And these were pretty disciplined people, quietly drinking their beers in the corner, playing pool, not causing much trouble at all - at least during the time we were in town.


Cyclists passing through Simon's Town

There are a few restaurants to choose from in Simon's Town, not a wide choice of options but just about enough to keep one entertained for a week or so. On the negative side, the food is as a norm of a lower standard than Durban's but the prices are much higher. Of all places we ate in, there is only one we unreservedly recommend: "Bertha's", just by the waterfront, around the corner from the backpackers lodge. The food here was of the highest quality, especially the fresh fish - but the meat was also commendable too - although prices were much higher than in durbs.

High prices were a running theme. We spent on average 200 to 230 Rand per meal in Simon's Town, instead of the 140 or so we were used to paying, a trend that only got worse in Cape Town. Whilst overall food in South Africa is excellent and great value for money, there are a few places that are not very good. Interestingly, we found out that there is a high inverse correlation between cost and quality. Most of the expensive places we've been to weren't actually that good, and the cost was mainly due to their being near some kind of tourist attraction such as a Marina, the seafront or a big shopping mall. The probability of having a bad meal seems to increase exponentially the closer one gets to one of these. Cheaper, more out of the way places were normally quite good.


The biggest attraction in Simon's Town - and the reason behind Shahin's desire to get us here - is the huge Boulders Beach penguin colony. The beach is less than half-an-hour walk from our lodge, a pleasant stroll along a curvy road that allows plenty of time to admire the sights: uncountable and diverse period Art-Deco houses, a small park with benches, the large navy base, the sailors quarters. The entrance to the Boulders Bay national park arrives all too soon, the sun still high up in the sky, but not so hot as to make walking strenuous.


Penguins at Boulders Beach, next door to Simon's Town.

The national park caters for the less wealthy, providing free access to an extensive area that circumscribes the main penguin colony. Access to the colony itself and the swimming beach requires purchasing a day-ticket, all for the very reasonable sum of 30 Rands. The park is composed of paths, a set of wooden platforms that sit slightly above the sand-dune like vegetation, which appears very similar to the fynbos found in Kosi Bay. The platforms pierce the park in strategic places, giving visitors an excellent view, but at the same time creating the impression of an artificial environment rather than a pristine natural reserve. However, careful inspection reveals that the stilted design is there not by chance but due to clever environmental thinking, as it permits wildlife to roam unconstrained across the entire area.

As you get closer, sharp screeching sounds attack you from all directions: mating calls perhaps, or parents looking for their children. Quite a few penguins live outside the main colony, in the free part of the park, and you can see dozens of them lying around, normally in pairs but sometimes in bigger groups. The main colony, however, overpowers the senses, with hundreds of animals congregating in a small space.

We spent many hours observing these wonderful creatures going about their busy lives: some walking round as if socialising, parents with their chicks, a group suddenly arriving from a fishing expedition, others yet beginning theirs. Incredibly interesting characters, and in more ways than one. When they walk they seem to do so carefully and determinedly, sometimes staring at the floor as if cautiously preparing the next step, other times gazing at the horizon and the sea, always progressing at a relentless pace towards a destination only known by them. Mating for life and their quasi-human walk make them somewhat eerie, alien and yet very much like us.


On one of our visits to the penguin colony, we decided to go in for a swim. We had to give it a go since you get to swim almost side-by-side with penguins - or at least as close at it gets, since they don't appear to be as sociable with humans as dolphins. The weather was hot as usual, and the beach was packed with locals. Well, packed isn't an accurate description since the sandy part of the beach is extremely small; in reality, it doesn't take a huge crowd to completely fill the beach. Once the preliminaries where taken care of - i.e. we somehow managed to find a corner to stand (literally) - I went in to snorkel. There were quite a few kids swimming, perhaps ten or so, and a handful of adults too, so the coldness of the water did not deterred me.

It's impossible to describe the experience of swimming in the Atlantic side of South Africa. The best I can say is this: after a few seconds of swimming round, in which I didn't see a single living thing creature because the visibility was too low, I noticed that something was not quite right with me. I couldn't quite pinpoint what was wrong, so at first I attempted to ignore it. A few seconds more, and the funny sensation grew even weirder, and I had no option but come out. As soon as I got out I started breathing uncontrollably and desperately, gasping for air. That's when it hit me, the water was actually so cold it made me stop breathing through my snorkel!

To be fair to South Africa's Atlantic coast, I experienced a similar reaction when swimming in northern Portugal, but not quite as extreme as this one. At any rate, our advice is clear: if you want to swim and enjoy the ocean in South Africa, stick with the Indian Ocean. The west coast is great for many things, but swimming is certainly not one of them.

Cape Town

A few days of bumming around in Simon's Town proved more than enough. Although the town is nice, and its surroundings are rather pleasant, there just isn't enough to do to keep one busy for over three or four days. The cycle race did generate much excitement amongst the "Towners" and backpacking community - even Shahin was bitten by the virus and spend hours on end watching bikes going past our hostel - but once it was done and dusted, the sleepy town returned back to normality. And so did accommodation in Cape Town. It was undoubtedly time to leave.

There were several options in terms of transportation. We could either came back on our "Business Class" candongueiro, take the bus or get the train. A lot of backpackers had mentioned that the train trip was a must, an opinion seconded by Shahin's faithful Lonely Planet, and since we hadn't actually used a train in Africa it became the obvious choice. We were on the road again.

The trip didn't start terribly well, though. We miscalculated a bit the distance from the hostel to the train station. In reality, there are very few distances that could be considered walkable when you are carrying twenty kilos of luggage on your back plus another five or so on your arms, and the heat of the midday sun didn't help either. Drenched in sweat we managed to get to the station, barely able to speak to the ticket inspector, who, politely ignoring our gasping breathing and sweat covered shirts, told us that we had just missed a train. On the positive side, tickets were dirt cheap and we only had to wait for half-an-hour or so for the next train.

The train arrived with a punctuality unseen in Britain, but since it was our first and only railway journey, we cannot extrapolate any conclusions regarding its reliability. The cars were rather peculiar, with chairs on the sides and a huge space in-between for standing. They vaguely resembled the Piccadilly line in London, but in a much wider and taller structure. The emptiness was even more palpable because there were no more than twenty passengers inside, but it was a remarkable lot for its diversity: some white people, coloureds, a few blacks and, of course, Shahin representing the Indians. This put us at ease somewhat, since you never feel totally at ease in any public transport in South Africa. The trip was quite amazing in terms of sightseeing, the large train windows providing great views of the coast, and the Cape Town station arrived all too soon.

At this point things got complicated again. As strange as it may appear, its actually quite difficult to find the right exit at Cape Town's massive train terminal. This is because the terminal itself is very close to town centre and all roads around it are extremely busy. We walked around the terminal for a little while, but our many kilos of luggage didn't allow proper exploration. Shahin, already exhausted from the previous adventure of getting to the train station, was in no mood for my linear search approach for finding the correct exit (for non-computer scientists, this basically entails trying each exit at a time until you get to the right one; it's a great approach, but, I'll admit it, it has some limitations).

A few well meaning Capetonians pointed out the exit for the taxis, but what they meant was "African Taxis" rather than cabs, and after the Joburg experiences that was a no-no. Tried as we might, it proved to be impossible to explain that we wanted a taxi rank, not a candongueiro rank. After much walking round we finally decided to go into the shopping mall next door to the terminal, grab some food at Wimpy's, and ask the waiters for some help. There they explained that there was no taxi rank as such, but instead one had to signal them to stop on one of the busy main roads; and no, they didn't have any taxi numbers. We were very much unconvinced about the idea of standing in a busy South African town with all of our stuff, and indeed the plan seemed little more than suicidal, but as we couldn't think of any other option at that juncture in time we left the mall and braved it.

To our great relief it didn't take us long to get a cab, and whilst we still wondered if it was a dodgy taxi driver, it felt much better to be inside of a car rather than sitting vulnerable on a side-walk.

If you have actually spent any time in Cape Town you'll probably find our fears quite amusing, and to be honest, I struggle not to laugh when I think back about it. But at the time we really thought our lives were in danger. Our perception of the city changed instantly as soon as we hit Long Street, one of the main arteries of day- and night-life in Cape Town. The place was booming with life, all colours of the rainbow widely represented, everyone walking up and down the streets as if in the safest of countries.

We got dropped at Carnival Court, a nice if somewhat expensive backpackers. Like Long Street, the place was full of life, people sitting and standing everywhere, most lounging quietly in the veranda, smoking pot and observing the roaming crowds below. Our room was on the third floor, and it felt really good to be able to finally drop all of our stuff and change clothes. The tiredness of the day was fast catching up with us, but we decided to go for a small stroll around the block - assured as we were by the hostel staff that walking during the day was very safe. "Sometimes there's trouble at night, but its mainly OK" we were told.

The problems with Carnival Court revealed themselves at night, but not for the reasons we expected. Cape Town is the Benidorm of South Africa, the city that never sleeps. And that's rather inconvenient if you intend to sleep. Like many such places, its perfect for the teenager and bachelor traveller who is mainly looking for some techno, alcohol and sex; but the older traveller, the one who wakes up early in the morning to look at monuments, struggles to keep up. At three o'clock in the morning the techno was still banging, not just from our own bar two floors down but also from every other backpacker's in the street - and there are many of those, believe me - and even our extreme tiredness was just not enough to allow our brains to switch off. The only way to find some sleep, any sleep, was to listen to music with our headphones on. It worked, but I must say that after a week my ears were in absolute pain. We also started to go to bed later, to make the process slightly more bearable.

The V&A Waterfront.

Other than its loudness, Long Street is actually a nice place. There are many (many) second-hand bookshops, ready to receive your old books and change them for new ones for a small fee. There are also a few record shops, many coffee shops and cafes and plenty of bars, restaurants and pubs. There is a large Irish pub just underneath Carnival Court, but I must say we were terribly unimpressed with the staff - who would fit like a glove in any Angolan restaurant - and to make matters worse the beer wasn't much good either. But there were plenty of other places, such as Zula with great food and music, including impromptu dancing classes of Latin music and lots of animation. There is also a Mexican restaurant around the corner from Carnival, with great food and very reasonable prices - reasonable for Cape Town, that is. A great find was Mama Africa, a great African restaurant (it does sound funny saying African restaurant when you're in Africa but hey. I wonder if the Italians refer to their restaurants as Italian Restaurants in Italy). However, be sure to book well in advance as this place is worse than Roma Revolving, forever busy.

Another must in Long Street is the Kurdish restaurant, the name of which escapes me know; it has great ambiance and food to go with it. It was there that I was asked if my Debian T-Shirt had anything to do with the lesbian movement. I gave a sad and weary look at the lesbian girl, shook my head looking at the horizon, wondering if Windows and Mac users ever suffer from this sort of humiliation. Not her fault, of course, but one cannot help but think that Linux still has a long way to go in terms of brand recognition outside the geek community.


As we had done before in Durban, we decided to go on a bus tour of the city. These tours are normally quite expensive, designed with the lazy tourist in mind, but are actually a good way to get an overview of a large city before exploring it in earnest. In South Africa in particular these trips are a must, costing around 100 Rand - expensive relative to South African prices, but quite cheap in British terms. Most of the guides are quite knowledgeable and they don't hesitate to tackle difficult topics such as apartheid. Our trip in Cape Town took us to the bottom of Table Mountain, to District Six, to the Victoria and Albert (V&A) Waterfront, the crafts market, and many other places such as the beautiful and rather expensive beaches of Camps Bay. The experience was so good we ended up not leaving the bus on our first trip. I say first because we ended up going on the bus twice - the second time being rather more adventurous, as we'll see later on.

The Waterfront was a place we particularly liked, with its Marina and restaurants, shops, crafts and hustle-and-bustle. Unfortunately, we must say that the restaurants there leave much to be desired. The places we ate in varied between bearable to inedible food, but the prices remained rather constantly high. The worst of them all was an African restaurant where I was served a sweetcorn soup that very much resembled the contents of a sweetcorn tin dropped in a bowl and wormed up - and even then not even that worm. The main course was of the same calibre, I'm afraid to say, and all of it for the bargain price of 250 Rand - enough for two meals in Durban. The remaining restaurants, even the really expensive ones, could only be considered good if compared to this one restaurant. Without question, they were worse than the average restaurant in Durban. Another disappointment was St. Patrick's day at the Irish pub at the Waterfront. Castle, a robust South African lager is normally excellent in draught form, but the Irish pub seems to have the worst Castle pint in South Africa. Conveniently enough, all other beers are 10 Rand more expensive than Castle, and these are the ones everyone drinks. The whole atmosphere was badly fabricated. On the plus side, we did go to a very good Irish pub in town centre where the real Irish met and watched Rugby. This was an excellent bar, and the pint there was second to none, as was the craic.

Whilst food and beer was not an highlight at V&A, everything else was. It is indeed a most quaint area, surrounded with old, beautiful buildings, but also displaying its share of modern architecture. There are also the statues of the four South African Nobel Peace Prize winners: Luthuli, Tutu, De Klerk and, of course, Mandela. Strolling down the quay as the sun went down, we spent many an evening looking at the boats and the masses of people, busying themselves with shopping, some just sitting and waiting, listening to the many street bands, the jazz bands impressing us in particular. We also took our freedom to walk in our own hands and ended up walking from Long Street to V&A as much as possible, getting purposely lost on our way, finding things otherwise hidden.

The other main highlight around the Waterfront is the Oceanarium. Whilst not the biggest we've seen - Lisbon's is probably bigger and more diverse - it's still worth seeing huge sharks and a great diversity of fish, as well as different types of penguins and learn a little bit about the local ecosystems.

Camps Bay

One sunny day we decided to go to Table Mountain, probably the most emblematic symbol of Cape Town. The mountain is one huge plateau, or so it seems from below, sometimes covered at the very top with clouds. This the locals call the table cloth, and the effect does indeed, from afar, resemble a large green table with a white table cloth. You do need some imagination, though. For the less athletic tourist, the mountain is well served with cable cars, taking you all the way to the summit. However, getting from town centre to the cable cars still involves some walking, most of it up a rather steep hill.

We left the house fully intending to get a bus to the cable cars. But as we started to walk to the bus stop, uncertain as we were about its location, it became clear that walking to the summit wasn't that bad an idea. To me, that is. Shahin disagreed somewhat, but by then we already had started walking. The initial walk was rather steep indeed, with little in a way of a view as the streets were filled with houses. As we continued walking, perhaps half-an-hour or so into our march, the size of our undertaking started to dawn on us. We were nowhere near the cable cars, and the remaining of the way was perhaps steeper than the road behind us. At this point Shahin started to despair, but then realised that after all that trouble it would be a bit of a defeat to get a bus now. We sat down underneath trees quite a few times, and watched as elder people walked past us at high speed. At one point, a rather comical moment, we saw a guy on his sixties, or there abouts, cycling up the mountain! Half-an-hour or so later, as we were still making our way up, we saw him going down at full speed, probably doing all that exercise only purely for the joy of then going downhill.

At one point, where the road starts zigzagging, we decided to go on a straight line and cut through the zigs an the zags, across bushes and badly made paths. In total it took us more than one hour and thirty minutes to get to the cable cars, stops included. We ascended towards the summit in a fancy new model cable car, sporting a rotating floor. But the biggest surprise was outside the car. As we looked at the harsh mountain in front of us we started to notice small dots, which eventually revealed themselves to be people. And there weren't just one or two of these, but at least ten or maybe fifteen. A couple of lads had walked past us on our climb to the cable cars and were now climbing up the rocks, with what appeared to be little or no climbing gear on them. We were positively amazed, and they sure made our hour long walk seem trivial.

The new cars take you up the mountain in no time. After spending some time admiring the town below, we decided to explore the plateau. There one can choose between several trails, each with varying degrees of difficulty. We choose a medium one, but ended up getting somewhat lost and doing the remainder of a hard one. Although we were quite tired, and the hike quite frequently resembled a climb, it was worth it in the end because the views were incredible. On our way back, the weather suddenly turned on us, all in a short span of time. Suddenly the heat from the sun was gone, a chilling wind replacing it, and clouds were all around us. As time went by, the clouds became more and more pervasive, and we felt we had been really lucky not to have any clouds up to this point as one could not see anything at all. Instead of the stunning views we had less than an hour before, looking down the mountain was akin to looking ahead in a foggy day; visibility was no more than five metres. Shahin could not stop herself and took several pictures of me, this time with my head literally in the clouds rather than metaphorically.

We made our way back without incident, other than the chilling cold we all felt, but feeling rather fortunate that the weather had changed after we got to the furthest point of the hike and were on our way back. There were also some stories of days when the weather really turns nasty and the cable cars have to stop servicing the mountain. On those days, if you're unlucky enough to be up there, you'll have to survive until the weather changes again. I'm sure there is some life-support on the touristic buildings for desperate situations though.

All the hiking made us extremely hungry, but since there is only one restaurant on top of Table Mountai we expected the worse. A pleasant surprise awaited us, though, for although the food at the restaurant was not of french-chef quality, it was certainly very edible - the hunger probably helped too - and more importantly, all for the amazing price of 100 or so Rand.

Our way down from the mountain was uneventful but rather pleasant, especially after the hard, long climb up.


Another interesting adventure was our second bus tour. After a few days bumming around in cape town we decided to go on the bus again. To our great misfortune, it was one of those days when the winds hit Cape Town. At that point it hit me that a name much more apt for the town would have been Windhoek.

Fire at the Signal Hill

The bus trip started normally, with a bit of wind. As we started making our into town the winds got stronger and stronger, to a point where hats where flying off the bus and people were hanging to the rails with extra-strength. The tour guide was doing her best to ensure no one was afraid, stating several times that there was no way a double-decker bus could topple with the wind; I'm not sure if she managed to convince any of the passengers. At one point pretty much everyone went downstairs, leaving us, the guide and two other couples to fight against the elements. Then, to make things even more exciting, we saw a massive fire in the distance. Signal Hill was on fire. Apparently this happens quite frequently in Cape Town, when the weather is really hot and the winds begin. All the conditions are ready for some nasty fires. We started making our way towards Table Mountain, a part which we dreaded because we thought the winds would certainly topple us down the mountain. In fact it was quite the contrary, as the mountain shielded us from the wind. From up there one could clearly see the flames, the entire hill ablaze, helicopters bringing huge buckets of water and throwing them into the flames without any visible effect.

After a small stop at the mountain we made our way to Camps Bay, the huge column of smoke still making itself visible from the other side of the hill. We then made our way back and made our final stop at V&A, partly because we couldn't help but want to observe the progress of the fire. Here the winds were in full swing, and the blaze was at its cruelest splendour. The many passers-by, normally occupied with shopping, were now spending their time gazing at the hill, paralysed as if not knowing what to do. It was hard to stop one's mind from wondering, would the fire actually get to the waterfront? There was a large green gulf between the fire and V&A, but the flames were spreading faster and faster, a living entity propelled by some unknown evil desire to consume and burn. Ashes were everywhere. We stayed for a bit, watching man fighting against beast.

The hour was getting late and we still had to get back to Long Street, so we started walking back, a journey that made us realise just how unforgiving Cape Town's winds really are. Suddenly, from absolutely nowhere, as you take a turn from a busy street, you get hit by a gush of wind so fast, so furious, that it really feels like you're about to take off like a kite. There were a few times when I felt like holding on to a street lamp or some rails, just for extra safety. At other turns it felt as if we were not going to be able to stop going forwards and walk straight into a main road, straight into the traffic. Near the train station the rubbish of the local markets gathered in huge spirals, mini-tornadoes that can hit you at very high speed.

Robben Island

One of the highlights of Cape Town is its proximity to the infamous Robben Island, where many ANC supporters and other freedom fighters where jailed for fighting against apartheid. Arguably, it is the most famous prison in the world, due in no small part to the many years Nelson Mandela spent there. Mandela was incarcerated for a total of twenty seven years, most of which were served within the confines of the island. While his body was behind bars, his mind was never conquered; and the great man made sure his cause wouldn't be forgotten by incessantly sending letters to everyone and anyone who would listen.

As we all know, Mandela - or Madiba, as he is affectionately known in his country - came from jail to lead his people, and had the honour of being elected the president of the last African country to escape colonial rule. Mandela closed the era that Kwame Nkrumah had opened all those years ago, simultaneously concluding one chapter and starting another, both of which fraught with difficulties.

In keeping with these events, Robben Island was converted from a prison to a museum, highlighting both the conditions of its dwellers, as well as the importance of the causes they defended. Shahin and me have always been interested in issues of development and freedom. Having the chance to see the place that shaped the political mind of Mandela and many of the ANC cadres was an opportunity not to be missed.

The boat to the island leaves from the Waterfront, and as with many things in the museum, tourists are transported in the very same vessels that were used to transport prisoners more than two decades ago. I believe one of the captains was also a captain back when Robben Island was still a prison. The boats are small, and struggle to accommodate the huge numbers of tourists that flock to see the island, but somehow we all managed to fit in. They certainly were not designed to provide comfort. The trip itself is rather quiet, most passengers lost in their own thoughts, but there is no running commentary. One is left to appreciate the stunning views of the ocean, Cape Town fading in the horizon, the island drawing nearer and nearer.

Security towers at Robben Island.

At the island one is taken into a bus, and driven around. The first stop was the quarry. If you know a bit of Madiba's story, you are aware that he spent many years breaking stones in a quarry, working long hours in the baking sun. It was this work, compounded certainly by the time he spent in Joburg reading law books by candle light, that greatly damaged his sight. One can easily see how, just by staring at the rocks for a few moments when the sun is shinning; the light reflected back is so bright one has difficulty in seeing. Unfortunately for Madiba and his colleagues, no sunglasses or any other type of protective gear were allowed, and they had to work, day in, day out, facing the sun and its bright reflexion on the rocks.

The quarry had its positive side too. It was here that many political discussions regarding ANC's future where held. And it was here, many years later, that Madiba and many ex-prisoners came to honour those who gave their lives for the struggle. One could not stop feeling strong emotions when looking at the pile of rocks Madiba had started on that day. After talking for a bit, he just went quiet, gazed at the infinite, thoughtfully; and then grabbed a small stone, walked a few metres, stopped; and dropped the stone. Soon he was followed by every other ex-prisoner, and the pile was created. It is a great symbolic monument for the fallen, in a way much more significant than other more elaborate, more ornamental and artistic works of art. A simple stone, a simple pile, and yet so much profound meaning.

We were told of this and much more else, some things which we knew, others which we didn't even imagine. With few words, our quietly spoken but very articulated guide transformed an arid scenery into one of the great stages of politics and freedom of the twentieth century.

The departure from the quarry was done in a more somber mood, but darker shadows awaited us behind the walls. We were taken to the main prison buildings. Here we were handed over to another guide, with a difference: he was an ex-prisoner at Robben Island. He took us inside the building, and explained its many details. He made us see things as they once were. At one point, a bit into the tour, I noticed that he was a little shaken. This, in a person who does guided tours day in day out. Obviously not the best of professions. Then, with the tact that only a tourist would have, someone asked "If you hate this island so much, why do you work here as a guide?", to which he quietly and politely replied:

I would never ever come back here if I could. When I left prison, and after the regime change, I was unemployed for a long time. It was then that the government offered me this job. I had no option but to accept, there were no jobs elsewhere. But I'll never allow my family to come here. They still leave in Soweto. If I could I'd leave this job right now. This is an evil place.
The man spoke slowly and with great sadness, the words of a person reliving a dark past; a freed prisoner and yet unable to walk through the open doors of his cage. We all went quiet, even our inquisitive companion. I kept on conjuring images of freed American slaves that knew not where to go, and so just staid in their master's plantation. There simply was nowhere else to go.

We visited cells, saw the patio, saw many pictures of ex-prisoners, heard of those who never left and were taken by the island, of those who staid and learned how to read, write and got college degrees. As the boat took us back to Cape Town, the sun had cooled off dramatically and a bitterly cold wind was flowing from the ocean towards the coast.

It was the grimmest of days; it was the brightest of days.

The Bright City Lights

Cape Town is one of those popular places, the sort that you either love or hate. Unlike its European counterparts, like say Costa Del Sol or the Algarve, it does have some soul; its not just an hedonistic figment of the tourist's imagination. The biggest problem with it, though, is that the place we all visit exists only for a privileged few. The average Capetonian is much more likely to live in Cape Flats than in Long Street; and for him or her, the lights of the city are probably as foreign and exotic as London or Madrid. Truth to be told, it's probably much more accurate to describe Cape Town as one huge slum with a trendy little Cartier - a description to which, I'm sure, 80% of its population would eagerly subscribe to.

Young Capetonian selling The Issue

It may seem unfair to single out the Cape since places like Jozi and even Durban, not to mention Luanda, also have deep poverty side-by-side with massive wealth. The problem with Cape Town is that it's easy to forget about poverty altogether because you feel safe enough in the affluent streets; it's slums are far away enough as to be invisible. Other places keep you in check, constantly reminding you of just how lucky you are. Not Cape Town, though. You can quietly sip your lovely South African wine with your lovely, if somewhat dear, meal and be entirely forgiven for not knowing about the plight of those surrounding you.

Out of sight, out of mind.

Knysna

Our original intention was to depart from Cape Town and join in the Garden Route. Lonely Planet spoke highly about the steam train linking George and Knysna and we, never ones to go on a straight line, wanted to verify these claims. However, to our great disappointment, there were some extensive engineering works being carried out and trains were not running at all. The previous mishaps on short distance driving where enough to dissuade us to drive, so we hoped on a Greyhound and rode all the way to Knysna.

The Plattenberg.

After a very scenic bus trip, we arrived at Knysna and booked ourselves in the Knysna Backpackers. Incredibly, we forgot the lessons learned at Simon's Town and decided to walk from the bus stop to the hostel. The map told us we had a fair distance to walk - a stone's throw, really, if we had no luggage, but a considerable hike with 85 litres on your back. What the map didn't say, though, was that much of the walk was uphill. Less than half-way through and we were drenched in sweat, feeling pains in muscles you didn't even know they existed. It was a painful walk, one we swore not to repeat anytime soon.

At the hostel, we were received by very friendly staff. The accommodation wasn't luxurious - backpacker's places rarely are - but very clean and quiet, and we had a massive room for ourselves, located in a conservatory like part of the house.


Knysna is not a particularly big place, nor does it appear to get that busy. The town is mainly one big block where most shops and businesses are. On one side of the block there is hilly residential area where we were located; the other side leads towards the lake.

The town's main claim to fame is the Knysna Heads, located where the Knysna lake meets the sea. The Heads are huge cliffs, and they make navigation really difficult; the town is well known for shipwrecks, and every year a number of lives is lost at sea. The area surrounding the lake is has a posh Waterfront, with restaurants and shops as well as trips around the lake - and for the more adventurous, across the heads into the ocean and back.

We decided to go on a boat trip, but not being exactly brave, we settled for just going around the lake. The journey was rather pleasant but, unexpectedly, it did get cold at times and the blankets provided ended up being very handy. This is all the more strange when one takes into account that the temperature on land was over thirty Celsius, with very little wind. Once on the lake though, the wind factor lowers the temperature dramatically.

Enduring the cold was made much more bearable by the amazing views of the valley and the ocean. The mountains surrounding the lake are covered in lush vegetation, the odd house here and there. These are extremely expensive houses, and some even sport their own docks.


A bit further up from the Waterfront - not quite all the way in to town - there is this rather interesting Internet cafe called Chatters. The place is run by an English family, as their accents instantly betrayed, a very friendly bunch indeed. But here's the twist: Chatters is actually a Cafe, come restaurant with a couple of PC's. So not only can you get your Castle or coffee with your Internet connection, listening to good music all the while, but all of this is available for only 25 Rand an hour. Of course, 25 Rand is not quite as good as the 6 Rand an hour we used to pay in Durban, but it's much better than Mtubatuba's 50 Rand. The only catch was we had to buy 4 hours at a time to get the discounted price, but we liked Chatters so much we ended up spending hours on end there. The food was excellent; Shahin fell in love with their potato bake and deserts, and I absolutely loved their pizzas and coffee. But most of all, the people were really friendly.


Once all the local attractions had been explored, we decided to hire a car. This part of the South African coastline is fertile in estuaries and natural reserves, as well as other little towns nearby, and the car gave us the flexibility to visit these places on day trips. Three of the most memorable ones were Plattenberg Bay, Nature's Valley and the Canopy Tree.

Plattenberg Bay has a rather nice beach with big hotels next to it, a river-let flowing across town and then towards the sea. We spent a morning at the beach, eating a fantastic breakfast at one of the many beach restaurants and cafes available - all with large verandas from where you can idly gaze at the ocean. After a few hours in town it was quite clear that Plattenburg Bay would have been a better choice for a base camp than Knysna, both on the scenic side of things, but also because it seems to be a much livelier place.

At a platform on the Canopy Tree tour. The tree is over 50 metres in height.

Nature's Valley, as the name implies is a very much unspoiled valley, at the bottom of which lies a river. The hills are covered with lots of vegetation and wild-life is abundant. The river is small during the dry season, so much so that we walked in it all the way up the ocean. There we found a large beach, a vast expanse of sand mostly untouched by human action.

The last trip was the most exciting one. As usual, Shahin was brave in finding new things and booking us, but not quite so brave when time came for action. The concept behind the Canopy Tree tour is simple: a set of platforms are placed on top of very tall trees in a forest, each at a fair distance from the next, and the objective is to slide from one to the next over steel cables.

Whilst the principle may sound easy, in practice the experience is a bit daunting because of the height of the trees and the distance between them. Once we got there, Shahin suddenly realised what she gotten herself into and started panicking somewhat. To help things along even more, our guide had a brilliant sense of humour and spend much of his time scaring tourists with shouts along the lines of "STOP!!! Your cable is going to break!!!" or "Oh my god, you're missing a strap!!". And since the guide was only targeting women, all the boys had a great laugh looking at the faces of sheer fear of all the girls and their screams of panic. It was definitely an experience worth having, hurling yourself from one tree to the next at fairly high speed, looking down at the forest underneath your feet.

Port Elizabeth

When Knysna and surrounding areas started to become a bit boring, we hoped on a bus again and went off to Port Elizabeth. (Port Elizabeth is known to all locals as PE, an abbreviation which we quickly got used to, and that's what I'll use here too). PE didn't have much in a way of attractions, but it was a big city and big cities always have the advantage of being compact - something the Garden Route totally lacks - and it had a great beach.

As usual, getting to PE was easy enough, courtesy of the great bus system in South Africa; but getting from the bus stop to the hostel was a mission. We got there late at night, after a good delay on a previous bus stop because the bus driver refused to go until all the passengers were safe and sound inside their cars. An elderly lady was waiting for her lift, so the entire bus had to stay there and wait with her. At the time we didn't think much of it (hurry up woman!), but when we got into PE and were exactly in the same situation, suddenly we became great fans of this bus company and it's humane policies. In the dark of night, around eleven or so, there were no cabs at all waiting for passengers; and we had no way of calling them either. A few of us were on the same situation, but they managed to get cabs. We were the last ones left. You could see that the bus staff were there just waiting for you, unable to go anywhere until you did, and many a time I felt compelled to send them on their way. Fortunately, Shahin had a lot more common sense than me and stopped me every time I came up with such nonsense. After a good thirty minutes a cab finally dropped by and accepted to take us to our hotel, and the bus people were finally allowed to go on their way, back to their homes.

We were not entirely sure about our choice of taxi. The car looked as rundown as the average luandan cabs, something not as common in South Africa. However, it was a chance we were willing to take, all things considered. The taxi driver was a middle-aged coloured guy, full of advice about PE. "Heh, you were lucky, hard to find taxis at this time o' night hey? Very dangerous place that, shouldn't stay there for long.". He then proceeded to tell us all about the latest crimes and murders, explaining exactly why the bus terminal was not such a good place to be on your own. Of all the stories he told us, one I won't be able to forget. That was the hijacking story.

Hey, I was on my cab this one day with a woman, right? And then I stop and someone tries to hijack the car. A couple of white guys, responsible for lots of hijacks, everyone knew they were bad news. So I fight against them, they trying to kick me out of the car, and leave with the woman. I tried to get the woman out, like. Did it in the end, but they stabbed me. Going to court soon on that one...
That sure made us really quiet and worried. What sort of place were we getting ourselves into? At any rate, we got into our hotel before he had time to tell us another horror story - we had our filling for the night by then. That's when things turned for the better. Following advice of some fellow travellers, we decided to start investigating regular Hotels as well as backpacker's places. We were told that its often possible to get really good deals on hotels and guest houses, and in doing so we found a fantastic place in PE. It was all booked in the previous night, but we only really understood the luxury when we entered our room. I can't really call it a room, flat is more accurate. We had two bedrooms, one with en-suite, a massive balcony with a view to the sea, a kitchen and a living room with all DSTV channels. This was certainly the most luxurious place we had ever been to in all our travels. And all of this for 400 Rand a night. Regrettably, when we tried to book the whole week there we were told they only had it available for the one night and it was fully booked for the rest of the time. The one night and day in pure luxury was great though.

When we finally managed to leave the flat to inspected the city, we found out that our fears were a bit exaggerated. Yes, there are really dodgy parts of town and the bus station isn't very far from one, but at least the beach front and the area in which we were living wasn't bad at all - one could even walk around at night without too many problems.

The time we spent in PE was mainly dedicated to recovery. The Garden Route was quite exhausting, as we had to do long drives to get to places and move around quite a lot. In PE we did very little, all of it requiring only a twenty minute walk at most. One of the highlights is the small Oceanarium just by the beach, were we saw a live show with the dolphins. The show was excellent. It's hard to believe just how intelligent dolphins are. After the show, when everyone had left, we staid back and got to observe the dolphins playing on their own initiative, just fooling around the swimming pool. We spent at least an hour just looking at them, teasing them, trying to get them to play with us, to no avail. This experience made us even keener to go swimming with dolphins, they are just extraordinary creatures.


While I was recovering from my extreme tiredness, Shahin decided to go on a private safari game drive just to get a feel for it. As I mentioned previously, although I do like animals and parks to some extent, I don't share Shahin's extreme fondness for all things wild, and as such preferred to stay back and do some beach bumming. The reports from the safari experience were mixed. It was great to be able to see cats in the wild, something she didn't get to see much of in Durban. However, the park was extremely small. It wasn't so much that you spotted the lions, it was more like they couldn't really roam that far. All the cats looked extremely well fed, and not because they were being fed by a keeper; rather the cramped space offers little chance of survival to any type of prey, and the lions have to do little more than walk around and pick a zebra for lunch. In conclusion, Shahin wasn't entirely pleased with her private game reserve experiences. We were told that the Krugger park private game reserves are of a much better standard, something we no doubt will put to test in the near future.

View from our Hotel in Port Elizabeth.

PE does lack somewhat with regards to eating. There are many restaurants to choose from, but other than our hotel's cuisine and one or two pub-like places, we didn't like the food at any of them. It just didn't taste that nice, really. On the plus side, it was much cheaper than Cape Town. The worst places were definitely those closer to the beach. One of the places we did like was a tavern next door to Nando's, located on one of the smaller shopping malls. It had live music of excellent quality. Unfortunately the artist, a young girl with a guitar and a brilliant voice, didn't have an email, website or even a demo tape so we won't be hearing her again, we don't think.


As time went by we increasingly started to talk about going home. This is for several reasons. First, I didn't adapt very well to the backpacking life. I'm not very good at staying in a place for a day or two, then travel for ten hours and repeat the process. After doing this for a few days I start getting extremely tired, and not really enjoying most of the sightseeing. We affectionately named this process the Inverse Dina Effect, because my good friend Dina is unable to spend half-a-second unproductively on her holidays, and loves seeing everything she possibly can. Shahin is much more resilient to it than I am, perhaps because I am naturally lazy when it comes to holidays; I was brought up with the big summer holidays - ferias grandes - three whole months of sun, beach and laziness. I never quite grew off of it.

The second factor was malaria. After having it twice, I didn't think I could cope with a third bout. Shahin had it only once, but she was well aware of just how nasty it can be. And Mozambique was going through some severe floods at the time, the ideal conditions for mosquitoes and malaria.

The third problem was logistics. Due to my laziness and general inability of organising, Shahin had done most of the organisation on our trip. I could only claim some effort while at Angola, other than that she had sorted everything out. Slowly but surely it started to take a toll on her, and the idea of going to a country with a similar infrastructure to Angola made it all seem even worse. After all we had spent more than three days just trying to get a bus to Benguela, and that was one of the easiest trips! It was all too daunting after South Africa and it's web-based cheap flights, Greyhounds and organised trips.

With all of this in mind, we decided to cut our holidays short, skip Mozambique and return to England within little more than a week. It was a difficult decision, in particular because we knew we may never get a chance like this again. At the same time, there is little point in continuing to travel when you are no longer paying attention to the scenery, doing it purely to get stamps on your passport and tick boxes on your life's "places to visit".

It was all up in the air, until the point we went on line and booked ourselves on a flight back to London. There was no turning back then.

We spent a few more days in PE, mostly relaxing, but also genuinely looking forward to go home; to eat normal food, and see friends we hadn't seen for months. Normality acquired an attractiveness of its own.

Our last day in PE was a sleepless night, but not because we were worried about our next destination. An entire school of girls took over our hostel and literally spent all night, every single minute of it, talking. I knew women can talk, but these girls were aiming at some kind of Guinness Book record. We woke up absolutely knackered, got our stuff together and left for the airport.

We had one last destination to see before going home, the place where it all had begun all those months ago: Johannesburg.

Jozi

The Jozi we returned to was a very different place from that Johannesburg we had landed in November. Time allowed us to get to know South Africa and Africa a lot better, and now instead of fearing the city we finally started to treat it like any other place in the world. A place where one has to be cautions and use common sense, of course, but not exactly a war zone. This time we were determined to actually see a bit of it, rather than just escape some place else as we had done so many times in the past. And on the four days we had left, there were two things at the top of our list: Soweto and the Apartheid Museum.

With our newly acquired confidence we no longer felt we had to return to Gemini. Instead we booked ourselves in a hostel around the corner from the airport, the Purple Palm backpackers, and it turned out to be an enlightened choice. We were able to walk around on foot during the day for the first time in Jozi, going up to the shops (whole of ten minutes!) and back without any major incidents. The staff at the hostel was extremely friendly. We did managed to catch up with one of our old acquaintances from Gemini, Eric, the Minibus driver. To our surprise he was organising the Soweto and Apartheid Museum tour. It was great seeing him again. Events like these make you realise just how small our world really is.

A poor area in Soweto.

Our trip started with a drive around Soweto, followed by a short visit to a Church where police had attacked defenceless protesters. We then went to visit Madiba's house, a dingy little place where he used to dwell when he was living in Johannesburg. I must say I couldn't really get to appreciate Madiba's house, perhaps because there were so many tourists all crammed into a very little space. We could barely move. It was touching to see the place, but one would need to be there with a lot less people and with a lot more time to really be able to appreciate it properly. However, the house is highly popular with tourists so that is unlikely to happen in the near future.

Soweto itself is a puzzling place. It has some really affluent areas such as for instance where Reverend Desmond Tutu and Winnie Mandela live, as well as many famous South African footballers. And it also has areas which are extremely deprived. We visited one such area, hopelessly poor from the outside but full of dignity and pride inside. One of the makeshift houses was a clear example of this. Made with the most improbably materials, the house had a lovely little garden with colourful flowers, a clear symbol that people would achieve so much if only they were given the opportunity to do so.

Very much like Soweto, the Apartheid Museum is a place of despair but also a place of great hope. Its sad to see what human beings did to other human beings. It is also very sad to see how hopeless their cause was all those years ago, how little Europe and America cared for the oppression of millions of people. Africa has been the bastard child of the modern age, a fact all the more unfair because so much of modernity was only made possible due to the merciless, brutal exploitation of Africa and of the Africans. No industrial revolution would have occurred if it were not for the slave trade. No big multinational South African companies would exist today were it not for the unfairness of the regime, decade after decade. A lifetime of reading about Africa crystallises and becomes absurdly clear in a place like the Apartheid Museum. One picture after another bring back flooding memories of all those great men and women that fought so hard so we didn't have to.


After our excursion to Soweto, time completely escaped from our hands. Before we knew it we were being transported from our hostel to the OR Tambo airport, boarding a British Airways flight and landing in London. The weather was mercilessly cold on our arrival, very much in keeping with our feelings.

And so it was that our great adventure came to an end.