<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2672427473119923109</id><updated>2012-01-01T06:55:42.206-08:00</updated><title type='text'>Marco Craveiro</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6596517286583343869</id><published>2012-01-01T06:42:00.000-08:00</published><updated>2012-01-01T06:55:42.212-08:00</updated><title type='text'>Nerd Food: Batch exports using latest org mode</title><content type='html'>&lt;div&gt;I recently hit an annoying problem with &lt;a href="http://orgmode.org/"&gt;org-mode&lt;/a&gt;: batch exports of gnuplot where failing with a mysterious error (full details &lt;a href="http://lists.gnu.org/archive/html/emacs-orgmode/2011-12/msg00813.html"&gt;here&lt;/a&gt;). To make a long story short, I was told to upgrade to latest org-mode from git. I followed the instructions on the brilliant org-mode &lt;a href="http://orgmode.org/worg/org-faq.html#updating-org"&gt;FAQ&lt;/a&gt; and got there in no time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But then it hit me, I needed to provided support for latest org mode in batch mode too! I tend to use default emacs settings in batch mode - well, lets put it this way, I never needed anything else - so I wasn't too sure how to do this. Last thing you need is your batch mode taking 1 minute to bootstrap because its running your full &lt;i&gt;.emacs&lt;/i&gt; initialisation. And lord knows &lt;a href="https://github.com/mcraveiro/cunene"&gt;cunene&lt;/a&gt; ain't getting any smaller.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So after some fumbling I hacked myself a quick &lt;i&gt;export.el&lt;/i&gt; that bootstraps a minimal latest org-mode:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span&gt;(setq dotfiles-dir "~/.emacs.d/lisp")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(setq kill-buffer-query-functions&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      (remove 'process-kill-buffer-query-function&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              kill-buffer-query-functions))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(add-to-list 'load-path (concat dotfiles-dir "/other/gnuplot-mode"))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(add-to-list 'load-path (concat dotfiles-dir "/other/org-mode"))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(load-file (concat dotfiles-dir "/other/org-mode/lisp/org-install.el"))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(org-babel-do-load-languages&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt; 'org-babel-load-languages&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt; '((emacs-lisp . t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   (sh . t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   (gnuplot . t)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   (R . t)))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(setq org-confirm-babel-evaluate nil)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(require 'org-install)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(require 'org)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;You may notice the &lt;span&gt;setq kill-buffer-query-functions&lt;/span&gt; bit. This was to stop a really annoying message coming from gnuplot:&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;blockquote&gt;Buffer "*gnuplot-version*" has a running process; kill it? (yes or no)&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Googling didn't reveal any direct solutions to the problem, which is a bit worrying; I wonder if I'm getting this because I'm running latest &lt;a href="https://github.com/bruceravel/gnuplot-mode"&gt;gnuplot mode&lt;/a&gt;. At any rate, I managed to knocked up this hack based on some other process related problem and it made the problem go away. The full incantation for emacs is:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$ /usr/bin/emacs --batch --no-site-file --directory ${org_path}/lisp/ \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;--directory ${org_path}/contrib/lisp/ \&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;--load export.el --visit ${target} --eval '(org-export-as-html-batch)'&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Replacing &lt;span &gt;${org_path}&lt;/span&gt; with the path to your git clone of org mode and &lt;span &gt;${target}&lt;/span&gt; with the org file you want to generate HTML for.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6596517286583343869?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6596517286583343869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6596517286583343869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6596517286583343869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6596517286583343869'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2012/01/nerd-food-batch-exports-using-latest.html' title='Nerd Food: Batch exports using latest org mode'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-1496089147889372295</id><published>2011-10-19T14:38:00.001-07:00</published><updated>2011-10-19T23:19:14.974-07:00</updated><title type='text'>Nerd Food: C++11 with clang</title><content type='html'>&lt;div style="text-align: justify;"&gt;So, &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B11"&gt;C++11&lt;/a&gt; is &lt;a href="http://herbsutter.com/2011/10/10/iso-c11-published/"&gt;finally out&lt;/a&gt;! However, we still have to wait for the compilers to catch up. Some compilers are faster than others, however, and &lt;a href="http://clang.llvm.org/"&gt;clang&lt;/a&gt; is certainly one of the fastest of the lot. I've recently set-up a simple trunk environment for clang and found it to be pretty stable - at least for learning purposes - so I decided to share my notes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I started my wonderings with this post: &lt;a href="http://solarianprogrammer.com/2011/10/16/llvm-clang-libc-linux/"&gt;Compiling llvm, clang and libc++ on Linux&lt;/a&gt;.However, I must say I found their approach to be a bit too... hacky... so I adjusted it somewhat. You won't fail to notice the similarities though. For the remainder of the article, I assume you have git, svn, cmake, and all other usual development packages installed; if not, apt-get them before proceeding.  I also decided to compile clang using clang stable, for giggles mainly, so I got my hands on the latest clang (2.9) via the usual apt-get means. Without further ado, lets get on with it.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The first thing to do is to checkout the source code. I use git as an svn client, but feel free to use svn directly. Unfortunately, I couldn't get git svn to use modules, so I ended up having to do an svn checkout of clang. Oh well.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Checkout steps:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ mkdir llvm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd llvm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ git svn clone -r HEAD http://llvm.org/svn/llvm-project/llvm/trunk llvm_src&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd llvm_src/tools&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ svn checkout http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd ../../&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ git svn clone -r HEAD http://llvm.org/svn/llvm-project/libcxx/trunk libcxx_src&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;We now have llvm, clang and the standard library. However, before we can do a build we must do the include headers hack:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd llvm_src/tools/clang/lib/Frontend&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ emacs InitHeaderSearch.cpp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;"Apply" the following patch, replacing &lt;b&gt;&lt;span class="Apple-style-span"&gt;marco&lt;/span&gt;&lt;/b&gt; with your username:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;// FIXME: temporary hack: hard-coded paths.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;-      AddPath("/usr/local/include", System, true, false, false);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;+      AddPath("/home/&lt;b&gt;&lt;span class="Apple-style-span"&gt;marco&lt;/span&gt;&lt;/b&gt;/local/include/c++/v1", System, true, false, false);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Exit emacs. The source is now ready to build. As we are civilised folk, we do out of source builds:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd - # e.g. back at the llvm top level directory&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ mkdir llvm_build&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd llvm_build&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ CC=clang CXX=clang++ cmake -DCMAKE_INSTALL_PREFIX=/home/marco/local ../llvm_src -j4&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A couple of notes:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;If you want to do a default gcc build you can omit the CC and CXX variables. If you have multiple gcc versions, just set them accordingly (e.g. CC=gcc-4.5 CXX=g++-4.5, etc.).&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Ideally you want the install directory to be a throw away directory that you can wipe out whenever, so don't put anything else on it. &lt;/li&gt;&lt;li style="text-align: justify;"&gt;Feel free to bump the -j4 to a sensible number depending on the cores you have available. If you are not using the machine, a -j6 or even -j8 on a quad-core tends to speed things up a lot.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;You can now install clang:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"&gt;$ make install&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This will copy all the libs and binaries over to the install directory (~/local on our case). Now we can build and install the standard library:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd ../libcxx_build&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ CC=clang CXX=clang++ cmake -DCMAKE_INSTALL_PREFIX=/home/marco/local ../libcxx_src -j4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ make install&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;At this point you now have a complete, if somewhat bare, clang trunk environment to play with. So lets create a simple program to test it:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd ..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ mkdir simple_src&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ mkdir simple_build&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd simple_src&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ emacs simple.cpp&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Type a simple hello world:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;#include "iostream" // can't get the angle-brackets to work..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;#include "fstream" // can't get the angle-brackets to work..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;using namespace std;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;int main(int, char**) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;    std::cout &amp;lt;&amp;lt; "Hello c++11 world!" &amp;lt;&amp;lt; std::endl;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;    return 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;On the same directory, create a trivial CMakeLists.txt file (I'm making it a bit more involved as I have a template...):&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;cmake_minimum_required(VERSION 2.8 FATAL_ERROR)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;project(simple)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# compiler and linker flags&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# enable as many warnings as possible&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "-Wall -Wextra")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# issue all the warnings demanded by strict iso c and iso c++&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -pedantic")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# treat warnings as errors&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -Werror")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# definition shadows another&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -Wshadow")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# do not issue warnings for system headers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -Wno-system-headers")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# overloaded virtual function has a different signature&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -Woverloaded-virtual")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# make string constants const char*&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(warning_flags "${warning_flags} -Wwrite-strings")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# enable RTTI&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(other_flags "-frtti")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;# set the flags&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CC_COMPILER /home/&lt;b&gt;&lt;span class="Apple-style-span"&gt;marco&lt;/span&gt;&lt;/b&gt;/local/bin/clang)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_COMPILER /home/&lt;b&gt;&lt;span class="Apple-style-span"&gt;marco&lt;/span&gt;&lt;/b&gt;/local/bin/clang++)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/home/marco/local/lib")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${optimisation_flags}")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${profiling_flags}")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${other_flags}")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(app "simple")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;set(files "")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;file(GLOB_RECURSE files RELATIVE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;    "${CMAKE_CURRENT_SOURCE_DIR}/"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;    "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;add_executable(${app} ${files})&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;We can now compile our test program! Exit emacs and type:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd ..&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cd simple_build&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ cmake ../simple_src&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ make&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;To run the binary we will need to ensure the C++ library is on the program loader's path:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ LD_LIBRARY_PATH=/home/marco/local/lib ./simple&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Hello c++11 world!&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;One interesting thing to notice is that we still have two C++ libraries:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ LD_LIBRARY_PATH=/home/marco/local/lib ldd simple | grep c++&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;libc++.so.1 =&amp;gt; /home/marco/local/lib/libc++.so.1 (0x00007fa5b5188000)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;libstdc++.so.6 =&amp;gt; /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa5b463f000)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Something for a further article though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With this set-up you can now follow clang trunk development; just git svn rebase, and svn update all the checkout directories, rebuild and re-install. Every so often you may need to delete the whole of ~/local and start again, but other than that you should be good to go.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-1496089147889372295?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/1496089147889372295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=1496089147889372295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1496089147889372295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1496089147889372295'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2011/10/nerd-food-c11-with-clang.html' title='Nerd Food: C++11 with clang'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-9002996411737274725</id><published>2011-08-02T15:05:00.000-07:00</published><updated>2011-08-02T15:09:20.327-07:00</updated><title type='text'>Nerd Food: No sound with flash</title><content type='html'>Life on the debian testing lane is never boring. After loosing X.org for a week - its fine now, thanks! - I found myself without sound on flash. The fix was simple: /etc/asound.conf was gone, for some reason. As root, I created it again with the following content:&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;pcm.pulse {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;   type pulse&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;ctl.pulse {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;   type pulse&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;pcm.!default {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;   type pulse&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;ctl.!default {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;   type pulse&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;}&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Solution courtesy of the &lt;a href="https://wiki.ubuntu.com/PulseAudio"&gt;Ubuntu wiki&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-9002996411737274725?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/9002996411737274725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=9002996411737274725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/9002996411737274725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/9002996411737274725'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2011/08/nerd-food-no-sound-with-flash.html' title='Nerd Food: No sound with flash'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4569844909940652273</id><published>2011-06-12T02:55:00.000-07:00</published><updated>2011-06-15T11:36:28.595-07:00</updated><title type='text'>Nerd Food: High CPU usage with NVidia</title><content type='html'>&lt;div style="text-align: justify;"&gt;I recently bought myself a new shiny i5 Sandy Bridge rig, and I was really looking forward to Debian Testing 64-bit and stable Intel video drivers. No more NVidia and ATI binary drivers, I shouted to the wind! However, being rather averse to reading manuals and being generally stingy, I got myself a cheap deal on a Assus P8P67 motherboard. Yep, you read right, I was blissfully unaware that the P67 chipset didn't allow access to the Intel integrated video card and what I really wanted was the H67 or &lt;a href="http://www.tomshardware.com/reviews/intel-z68-express-smart-response-technology-ssd-caching,2938.html"&gt;the Z68&lt;/a&gt;. Oh well. I grinned, moaned, cursed and subsequently placed my old and trusty NVidia GeForce 7300 GS on the motherboard.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;All was going well, until I started using the machine in anger. For some reason my X server started using 100% of one of the cores, rendering the whole machine unusable for _several seconds_. This was rather disappointing as I have 8 GB of RAM and a Vertex 2 SSD. This thing should fly at all times. And indeed it did fly using nouveau - except nouveau gave me really low resolution (and of course no composition).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After much, much digging I finally figured out the problem. You &lt;a href="http://www.mythtv.org/wiki/NVidiaProprietaryDriver#Choppy_video.2FHigh_CPU_Usage"&gt;need&lt;/a&gt; to have option UseEvents set:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;Option "UseEvents" "True"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now the machine is 100% responsive 100% of the time, even under high load! However, for some reason I'm &lt;a href="http://forums.debian.net/viewtopic.php?f=10&amp;amp;t=64176"&gt;still unable to run compiz&lt;/a&gt; even though composition works just fine under metacity. Oh well.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Update&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sadly, my good-feeling didn't last long. Although the machine was hyper-responsive when I was using, my screen went totally black when I left the computer running overnight. Black Screen of Death you could call it. I guess this is what they meant by instability associated with UseEvents. Oh well. On the plus side, I've tried a few other options nicked from the &lt;a href="http://wiki.compiz.org/Hardware/NVIDIA"&gt;Compiz NVidia page&lt;/a&gt; and things actually seem ok for the moment - knock on wood. The options are:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;Section "Device"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Identifier     "Device0"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Driver         "nvidia"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    VendorName     "NVIDIA Corporation"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "RenderAccel" "on"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "UseEvents" "false"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "RenderAccel" "True"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "DamageEvents" "True"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "TripleBuffer" "True"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;    Option "BackingStore" "True"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;EndSection&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Notice UseEvents is set to false.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4569844909940652273?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4569844909940652273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4569844909940652273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4569844909940652273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4569844909940652273'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2011/06/nerd-food-high-cpu-usage-with-nvidia.html' title='Nerd Food: High CPU usage with NVidia'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-321437255763120584</id><published>2011-02-22T10:50:00.000-08:00</published><updated>2011-02-22T12:06:47.424-08:00</updated><title type='text'>How to access Radio Nacional de Angola from Linux</title><content type='html'>Admittedly, this may be useful to a rather limited user pool - but nevertheless. If you desperately need to access RNA (Angolan National Radio or Radio Nacional de Angola) from Linux, don't bother going to their &lt;a href="http://www.rna.ao/"&gt;website&lt;/a&gt;. You'll just get weird plug-in errors, due to the way they detect windows media support. The best way is to access the stream directly in RhythmBox. To do so, click on Library | Radio | New Internet Radio Station and add:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="mms://streaming.gisp.pt:12000/rna1"&gt;mms://streaming.gisp.pt:12000/rna1&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For Radio Nacional and &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="mms://streaming.gisp.pt:12000/rna2"&gt;mms://streaming.gisp.pt:12000/rna2&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;For Radio Luanda. Happy Listening!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-321437255763120584?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/321437255763120584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=321437255763120584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/321437255763120584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/321437255763120584'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2011/02/how-to-access-radio-nacional-de-angola.html' title='How to access Radio Nacional de Angola from Linux'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4846126811976416277</id><published>2011-02-20T06:40:00.000-08:00</published><updated>2011-02-20T06:41:06.778-08:00</updated><title type='text'>NP: Fitter Happier</title><content type='html'>&lt;div&gt;Fitter, happier, more productive, &lt;/div&gt;&lt;div&gt;comfortable,&lt;/div&gt;&lt;div&gt;not drinking too much, &lt;/div&gt;&lt;div&gt;regular exercise at the gym&lt;/div&gt;&lt;div&gt;(3 days a week),&lt;/div&gt;&lt;div&gt;getting on better with your associate employee contemporaries,&lt;/div&gt;&lt;div&gt;at ease,&lt;/div&gt;&lt;div&gt;eating well &lt;/div&gt;&lt;div&gt;(no more microwave dinners and saturated fats), &lt;/div&gt;&lt;div&gt;a patient better driver,&lt;/div&gt;&lt;div&gt;a safer car&lt;/div&gt;&lt;div&gt;(baby smiling in back seat),&lt;/div&gt;&lt;div&gt;sleeping well&lt;/div&gt;&lt;div&gt;(no bad dreams), &lt;/div&gt;&lt;div&gt;no paranoia, &lt;/div&gt;&lt;div&gt;careful to all animals&lt;/div&gt;&lt;div&gt;(never washing spiders down the plughole), &lt;/div&gt;&lt;div&gt;keep in contact with old friends&lt;/div&gt;&lt;div&gt;(enjoy a drink now and then), &lt;/div&gt;&lt;div&gt;will frequently check credit at (moral) bank (hole in the wall), &lt;/div&gt;&lt;div&gt;favors for favors,&lt;/div&gt;&lt;div&gt;fond but not in love, &lt;/div&gt;&lt;div&gt;charity standing orders, &lt;/div&gt;&lt;div&gt;on Sundays ring road supermarket &lt;/div&gt;&lt;div&gt;(no killing moths or putting boiling water on the ants),&lt;/div&gt;&lt;div&gt;car wash &lt;/div&gt;&lt;div&gt;(also on Sundays),&lt;/div&gt;&lt;div&gt;no longer afraid of the dark or midday shadows &lt;/div&gt;&lt;div&gt;nothing so ridiculously teenage and desperate,&lt;/div&gt;&lt;div&gt;nothing so childish - at a better pace, &lt;/div&gt;&lt;div&gt;slower and more calculated,&lt;/div&gt;&lt;div&gt;no chance of escape,&lt;/div&gt;&lt;div&gt;now self-employed, &lt;/div&gt;&lt;div&gt;concerned (but powerless),&lt;/div&gt;&lt;div&gt;an empowered and informed member of society&lt;/div&gt;&lt;div&gt;(pragmatism not idealism),&lt;/div&gt;&lt;div&gt;will not cry in public,&lt;/div&gt;&lt;div&gt;less chance of illness,&lt;/div&gt;&lt;div&gt;tires that grip in the wet &lt;/div&gt;&lt;div&gt;(shot of baby strapped in back seat), &lt;/div&gt;&lt;div&gt;a good memory, &lt;/div&gt;&lt;div&gt;still cries at a good film, &lt;/div&gt;&lt;div&gt;still kisses with saliva, &lt;/div&gt;&lt;div&gt;no longer empty and frantic like a cat tied to a stick,&lt;/div&gt;&lt;div&gt;that's driven into frozen winter shit &lt;/div&gt;&lt;div&gt;(the ability to laugh at weakness), &lt;/div&gt;&lt;div&gt;calm,&lt;/div&gt;&lt;div&gt;fitter,&lt;/div&gt;&lt;div&gt;healthier and more productive &lt;/div&gt;&lt;div&gt;a pig in a cage on antibiotics.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4846126811976416277?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4846126811976416277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4846126811976416277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4846126811976416277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4846126811976416277'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2011/02/np-fitter-happier.html' title='NP: Fitter Happier'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4774846554519050269</id><published>2010-03-22T15:47:00.000-07:00</published><updated>2010-03-23T11:06:54.201-07:00</updated><title type='text'>Nerd Food: Lucid, the Lynx</title><content type='html'>&lt;div style="text-align: justify;"&gt;Well, its that time of the year again. Unwisely, I always take the Ubuntu releases when the first betas are out, I just can't resist the urge. Not on all boxen, mind you. I always pick a victi^W candidate box to do the testing, give it a spin for a week or two and then proceed to upgrade the whole stable when I feel confident enough. It has been that way since Warty, and Lucid was no exception. However, Lucid has been exceptional in pretty much every other regard - mainly for positive reasons, but for some negative ones too. Let's retrace my steps back to the weekend, for the full Lucid experience.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In the many years I've burned ISO images I can't recall ever having had problems with dodgy media. I remember back in the RedHat 5 days when I used to religiously test the media before installing. At some point or other, having never found any defects, I gave up on that; luck has been on my side ever since. Ever since, that is, until this weekend, when the 1 GBP CD I had bought from a local camera shop - out of desperation - proved to be dodgy. After trying to install Lucid a couple of times and failing miserably with weird errors, I thought perhaps the issue was the CD. But on reboot, lo and behold: the option to test the media had been removed! I'm pretty sure it was around in Karmic, so this is a Lucid "innovation". I guess for basic users this is not that bad, but old hands will feel slightly disappointed. Back to the shops I went - this time buying six CDs for good measure. (where did I put that blasted USB key!!). This time round the installation went OK - no major innovations from Karmic, just a general sense of polish.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After installation, I was greeted with the most well thought out boot I've seen in Linux. Now, let me qualify that: I haven't used any other distro since Warty, so I don't really know what other people are up to. It is likely all distros boot this way these days - and indeed I think a lot of the glory comes from plymouth, a RedHat technology. But let me tell you the way I saw it. The boot is almost seamless; KMS, plymouth and GDM work together to provide this amazing flow from boot to usable desktop; once KMS does the mode setting there is no more dodgy flickering, blinking cursors, intro music out of sync and so many other little annoyances of the past. Its just... elegant. And the whole process takes around 40 seconds (depending how fast you can type your password, of course).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The second thing I noticed - and I'm still not quite believing myself - is the amazing, and I mean AMAZING, memory usage. I thought that there was a bug in the System Monitor applet, because the dark green colour that indicates the memory usage was so low I could not see it. This is a bit less impressive than it sounds, as this particular machine has 4 GB of RAM, so one cannot rely on percentages. But the figures reported by other tools didn't lie: less than &lt;b&gt;200 megs&lt;/b&gt; taken by a fully usable gnome session with no applications running. I then proceeded to install all my usual apps just to see how a reasonable session would look like. The session I'm running at the moment has the following desktop applications:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;skype&lt;/li&gt;&lt;li&gt;empathy for messaging (facebook, MSN, google)&lt;/li&gt;&lt;li&gt;Google Chrome (8 tabs)&lt;/li&gt;&lt;li&gt;Evolution for email&lt;/li&gt;&lt;li&gt;Liferea for RSS feeds&lt;/li&gt;&lt;li&gt;Emacs for development&lt;/li&gt;&lt;li&gt;Dia for diagrams&lt;/li&gt;&lt;li&gt;Assorted PDF documents with Evince&lt;/li&gt;&lt;li&gt;OpenOffice Writer for word processing&lt;/li&gt;&lt;li&gt;Nautilus doing large file copying (restoring backups)&lt;/li&gt;&lt;li&gt;Gimp editing a couple of images &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;According to the System Monitor, it is costing me less than &lt;b&gt;700 megs&lt;/b&gt;. CPU usage is extremely low - but remember this is a 4-core system. Compared to Karmic, this is nothing short of amazing. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_nEck2BGjqOg/S6gEVUGC-cI/AAAAAAAAAXM/PIoiIByeGoY/s1600-h/system_monitor_applet.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_nEck2BGjqOg/S6gEVUGC-cI/AAAAAAAAAXM/PIoiIByeGoY/s320/system_monitor_applet.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5451612113149819330" style="cursor: pointer; width: 320px; height: 22px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;System Monitor Applet and Workspace Viewer with all open applications. Dark Green is used memory.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'm still playing around with the apps, so I can't really say much about them. I have noticed a lot of crashes being reported, especially from plymouthd, tracker, etc.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Unfortunately, not everything was positive with this first experience. Having an NVidia card, the first thing I tend to do is to enable binary drivers - purely so I can use compiz. I don't really need them for anything else, but there are a couple of things that compiz provides that are so interlinked with my workflow that I struggle to function without it. In the past, NVidia drivers have worked really well, with minimal fuss. I've relied on the distro supplied ones for a while, without any problems. I regret to say, this has changed with lucid and for the worse. So much so that I know believe binary drivers are just plain harmful.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Having installed NVidia drivers I rebooted and lost X altogether. The reason why became apparent after a few hours of investigation - and it is amazing the speed at which bug reports are &lt;a href="https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers/+bug/522328"&gt;replied to&lt;/a&gt; in Ubuntu. But after applying &lt;a href="https://bugs.edge.launchpad.net/ubuntu/+source/nvidia-graphics-drivers/+bug/538071"&gt;the workaround&lt;/a&gt;, even though I got X back the entire smoothness experience had been lost! This is because the KMS integration is amazingly _bad_ when using binary drivers, and this is obviously not the fault of the community. It just sucks, its hard to describe. Not just that, but on my second boot, my box just &lt;b&gt;HUNG&lt;/b&gt;! It didn't do that afterwards, but its shocking to think that with the "unstable" nouveau the experience was smooth and stable and with the binary drivers I managed to crash the box in minutes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But NVidia wasn't done with me just yet. For the moment I need to access this box from my karmic laptop via XDMCP, a process that has been made &lt;a href="http://www.peppertop.com/blog/?p=690"&gt;considerably harder&lt;/a&gt; of late. Not a problem; nothing a xinit with a manual ssh -X cannot solve. And then I'm greeted with a &lt;b&gt;totally&lt;/b&gt; inverted screen. And I mean totally, it was like left-to-write rotation with up-to-down or something. After much head scratching, I found out this was &lt;a href="http://art.ubuntuforums.org/showthread.php?t=1220458"&gt;yet another NVidia&lt;/a&gt; feature. That was it, removed all traces of these nasty binary drivers and defaulted back to nouveau. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Don't take me wrong. I think its great that NVidia care about Linux and provide us with drivers. After all, they don't have to. But, from purely an egotistical perspective, I think open source, in-kernel drivers are the future. I just want something that works out of the box and is integrated into the kernel release cycle. I don't want to wait to have proper KMS support. I don't want to have to do &lt;a href="http://www.webupd8.org/2010/03/how-to-get-plymouth-working-with-nvidia.html"&gt;crazy workarounds&lt;/a&gt; to get proper plymouth support. And I don't want weird bugs. My experiences with the Intel drivers have been absolutely positive. And now nouveau seems to be on the right track.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Anyway, those were the key problems, but there were other issues I haven't quite finished investigating:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;pulseaudio is behaving weirdly. It seems that if I login locally and then log in remotely the sound comes out of the server's sound card - which is an acceptable behaviour for me; however, if I don't log in locally to the server, then I get no sound at all, locally or remotely. This is not so ideal.&lt;/li&gt;&lt;li&gt;Wireless is not quite working for my server network card (Broadcom BCM4318). The binary drivers are enabled and all but for some reason it fails to connect (time out). This is not too bad as the server is wired into the modem.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In addition to this, I ended up having to wire my laptop to the modem as I was finding XDMCP over wireless to be utterly unusable. The delays were akin to running a VM, seconds some times - and chrome was particularly affected by this. Using a 100-MBit cable the experience is identical to working locally. Now if only I could suspend/resume my sessions!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;All and all I must say I'm really happy with Lucid, and if nouveau could do acceleration (or if I had an Intel card) I would have cried with joy on first boot.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;UPDATE: &lt;/b&gt;One very, very important thing I forgot to mention are the silly little annoying UI changes (thanks sardaukar, your post reminded me of this!). Truth is, I ended up spending _a lot_ of time figuring out how to revert some of the new "features" such as button ordering, etc. I didn't really give them a fair trial - but my reasoning is, I'm happy with my current workflow and I can't see a need to change it. When gnome shell comes I'll re-evaluate it.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here's a list of the things I've done til now as a script. I'll try to keep it updated.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# do not display text next to icons on toolbars. Interface&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# tab of appearance has been removed&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# so you can't do this from the GUI any more.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gconftool --set /desktop/gnome/interface/toolbar_style --type string icons&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# display icons in menus. they look a tad bare without them.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gconftool --set /desktop/gnome/interface/menus_have_icons --type bool true&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# display icons in buttons&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gconftool --set /desktop/gnome/interface/buttons_have_icons --type bool true&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# fix the crazy new button placement and order.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# not sure why gconftool&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-2&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# (note: this is one single long line) &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gconftool-2 --set /apps/metacity/general/button_layout --type=string :minimize,maximize,close&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# check for updates as they come available&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gconftool --set /apps/update-notifier/regular_auto_launch_interval --type int 0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4774846554519050269?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4774846554519050269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4774846554519050269' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4774846554519050269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4774846554519050269'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/03/nerd-food-lucid-lynx.html' title='Nerd Food: Lucid, the Lynx'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_nEck2BGjqOg/S6gEVUGC-cI/AAAAAAAAAXM/PIoiIByeGoY/s72-c/system_monitor_applet.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4633899530942817092</id><published>2010-03-18T12:18:00.001-07:00</published><updated>2010-03-18T12:30:21.433-07:00</updated><title type='text'>Nerd Food: Getting ls to behave</title><content type='html'>&lt;div style="text-align: justify;"&gt;ls appears to be sorting rather weirdly of late (well, since quite a few Ubuntu releases), ignoring upper and lower case, e.g.:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 00:12 cmake&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;-rw-r--r-- 1 marco marco 8708 2010-03-17 18:39 CMakeLists.txt&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 15:17 config&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 4 marco marco 4096 2010-03-11 18:22 cpp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 16:24 doc&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-12 01:39 glade&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 5 marco marco 4096 2010-03-17 18:42 output&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;-rw-r--r-- 1 marco marco 1124 2010-03-17 16:26 README.TXT&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-11 18:22 scripts&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 3 marco marco 4096 2010-03-11 18:22 sql&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 3 marco marco 4096 2010-03-11 18:22 templates&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This is utterly annoying. The main reason people use upper case filenames is precisely because they come up at the top of the listing. It &lt;a href="https://www.linuxquestions.org/questions/linux-general-1/ls-sorting-problem-lower-and-upper-case-folded-594175/"&gt;appears&lt;/a&gt; the reason why is the locale, more precisely LC_COLLATE.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;$ locale | grep LC_COLLATE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;LC_COLLATE="en_GB.UTF-8"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;By changing it to C, it all behaves as expected:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;$ export LC_COLLATE=C&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;$ ls&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;-rw-r--r-- 1 marco marco 8708 2010-03-17 18:39 CMakeLists.txt&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;-rw-r--r-- 1 marco marco 1124 2010-03-17 16:26 README.TXT&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 00:12 cmake&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 15:17 config&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 4 marco marco 4096 2010-03-11 18:22 cpp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-17 16:24 doc&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-12 01:39 glade&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 5 marco marco 4096 2010-03-17 18:42 output&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 2 marco marco 4096 2010-03-11 18:22 scripts&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 3 marco marco 4096 2010-03-11 18:22 sql&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;drwxr-xr-x 3 marco marco 4096 2010-03-11 18:22 templates&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Much better! To make it permanent, add it to your .bashrc.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4633899530942817092?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4633899530942817092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4633899530942817092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4633899530942817092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4633899530942817092'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/03/nerd-food-getting-ls-to-behave.html' title='Nerd Food: Getting ls to behave'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-1749668848342005558</id><published>2010-03-17T07:43:00.000-07:00</published><updated>2010-03-17T07:46:29.115-07:00</updated><title type='text'>Kids Thrive on Complexity</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); "&gt;I've found a probability distribution that went unstudied until now, and the random process originating it is my nephew. To be more precise, its the dazzingly complex algorithm he uses to distribute the contents of a packet of crisps across a room - in his lingo: eating. Its not just the quasi-uniform floor coverage (including underneath all furniture), the fact that no two crumbs share the same size, or even its speed that makes it unique; its the efficient use of resources. A single room can be covered with _the remains_ of a small packet of crisps. Amazing.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-1749668848342005558?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/1749668848342005558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=1749668848342005558' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1749668848342005558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1749668848342005558'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/03/kids-thrive-on-complexity.html' title='Kids Thrive on Complexity'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-469872221589635251</id><published>2010-03-11T03:54:00.000-08:00</published><updated>2010-03-12T07:37:28.694-08:00</updated><title type='text'>Nerd Food: use_action_appearance saga</title><content type='html'>&lt;div style="text-align: justify;"&gt;While playing with Ian Remmel's &lt;a href="http://ianwremmel.com/wp/2009/12/17/there-are-aliens-in-the-carpark/"&gt;instructions&lt;/a&gt; on how to use &lt;a href="http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1Action.html"&gt;Gtk::Action&lt;/a&gt; and &lt;a href="http://library.gnome.org/devel/gtkmm/stable/classGtk_1_1ActionGroup.html"&gt;Gtk::ActionGroups&lt;/a&gt;, I've bumped into an annoying problem: for some reason my toolbar icons and menu items started behaving weirdly after adding some Gtk::Actions to them. Symptoms were blank labels on menu options and blank toolbar items, or toolbar items with words rather than stock items. After some head scratching, I think I got to the bottom of it. Basically, the toolbar or menu item is taking its caption from the Gtk::Action.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_nEck2BGjqOg/S5jqEcODZII/AAAAAAAAAXA/3FK70mjUCPM/s1600-h/missing_tool_bar_button.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S5jqEcODZII/AAAAAAAAAXA/3FK70mjUCPM/s320/missing_tool_bar_button.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5447361111320126594" style="cursor: pointer; width: 262px; height: 59px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Stock item refresh not being displayed.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What is puzzling is that the Glade UI clearly says that "Use Action Appearance" is set to "No". However, close inspection of the .glade file shows no mention of this property at all, so somehow the default value for it appears to be "Yes".  I proved it by manually hacking use_action_appearance, e.g.:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;                &amp;lt;property name="related_action"&amp;gt;act_reload&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;              &amp;lt;p&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia, serif;font-size:16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;roperty name="use_action_appearance"&amp;gt;False&lt;span class="Apple-style-span"   style=" font-weight: normal;  font-family:Georgia, serif;font-size:16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:small;"&gt;&amp;lt;&lt;span class="Apple-style-span"   style=" font-weight: normal;  font-family:Georgia, serif;font-size:16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia, serif;font-size:16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;/property&lt;span class="Apple-style-span"   style=" font-weight: normal;  font-family:Georgia, serif;font-size:16px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:small;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This fixed all my prolems. Of course, this is not a long term solution because it gets overwritten every time you save your .glade file. A more enduring workaround may be to do this in code, possibly where you add the Gtk::Action to the Gtk::ActionGroup, at least until Glade fixes the bug.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Another puzzling aspect of this bug is that there has been a lot of work around it of late, as the &lt;a href="https://lists.ubuntu.com/archives/karmic-changes/2009-June/003402.html"&gt;release notes&lt;/a&gt; of glade-3 3.6.7-0ubuntu1 imply:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Sync up remaining properties at load time (&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;fixes use-action-appearance property &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;and any other unmentioned property states at load time, also unvails broken orientation default value in GTK+, bug 587256).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;- Fixed glitches with &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;use-action-appearance&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; at save time.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A quick apt-cache check reveals we're running the correct version:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;$ apt-cache show glade | grep "^Version"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Version: 3.6.7-1ubuntu1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So either all of this activity around use_action_appearance did not fix the bug or there was some kind of merge mistake downstream.  Here we can see the &lt;a href="http://git.gnome.org/browse/glade3/commit/?id=608a792e393e3f6502eb085546137be1f15ebd0b"&gt;commit&lt;/a&gt; that tried to fix the problem - nothing obvious to the layman, unfortunately. By &lt;a href="https://launchpad.net/glade/head/3.6.7"&gt;downloading&lt;/a&gt; the tarball used to make the Ubuntu  package, we can easily confirm that the upstream commit is present downstream.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An upstream bug report had been filled for this problem: &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=582882"&gt;#582882&lt;/a&gt;. Shame it wasn't cross referenced in the release notes, like some others were. Perhaps the maintainers haven't gotten to the bug report just yet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nothing more to do other than wait for the glade maintainers...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update:&lt;/b&gt; Another workaround for this problem is to set the icon / lable text directly on the action.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-469872221589635251?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/469872221589635251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=469872221589635251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/469872221589635251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/469872221589635251'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/03/nerd-food-useactionappearance-saga.html' title='Nerd Food: use_action_appearance saga'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S5jqEcODZII/AAAAAAAAAXA/3FK70mjUCPM/s72-c/missing_tool_bar_button.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7155795865132494556</id><published>2010-03-01T02:27:00.001-08:00</published><updated>2010-03-01T02:35:02.038-08:00</updated><title type='text'>Nerd Food: Suspend and Resume on Karmic</title><content type='html'>&lt;div style="text-align: justify;"&gt;For some reason, the suspend and resume in Karmic (Ubuntu 9.10) fails to restart wireless properly on one of my laptops. According to lspci the card is  a RealTek RTL8101E/RTL8102E . Everything else works ok, and the failure is intermittent - maybe one resume fails out of three or so. If you have the same problem, you can try the following before restarting your machine:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;$ su&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# cd /etc/init.d&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# ./networking restart&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# ./network-manager restart&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This seems to sort the problem out, most of the time. Hopefully the Lynx is going to fix this.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7155795865132494556?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7155795865132494556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7155795865132494556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7155795865132494556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7155795865132494556'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/03/nerd-food-suspend-and-resume-on-karmic.html' title='Nerd Food: Suspend and Resume on Karmic'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-640088082548073695</id><published>2010-02-27T16:52:00.000-08:00</published><updated>2010-02-28T03:03:42.985-08:00</updated><title type='text'>NP: See That My Grave Is Kept Clean (Blind Lemon Jefferson)</title><content type='html'>&lt;div&gt;&lt;div&gt;Only one kind favour I ask of you&lt;/div&gt;&lt;div&gt;Well, there's one kind favour I ask of you&lt;/div&gt;&lt;div&gt;Lord, there's one kind favour I'll ask of you&lt;/div&gt;&lt;div&gt;Please [see] that my grave is kept clean&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's a long lane, it's got no end&lt;/div&gt;&lt;div&gt;It's a long lane, it's got no end&lt;/div&gt;&lt;div&gt;It's a long lane, ain't got no end&lt;/div&gt;&lt;div&gt;There's a bad wind that never came&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lord, there's two white horses in a line&lt;/div&gt;&lt;div&gt;Well, there's two white horses in a line&lt;/div&gt;&lt;div&gt;Well, there's two white horses in a line&lt;/div&gt;&lt;div&gt;Gonna take me to my burying ground&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My heart stop beating, my hands are cold&lt;/div&gt;&lt;div&gt;My heart stop beating, my hands are cold&lt;/div&gt;&lt;div&gt;Well, my heart stop beating, Lord my hands are cold&lt;/div&gt;&lt;div&gt;It wasn't long [till I understood] what the Bible told&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have you ever heard a coffin sound?&lt;/div&gt;&lt;div&gt;Have you ever heard a coffin sound?&lt;/div&gt;&lt;div&gt;Have you ever heard a coffin sound?&lt;/div&gt;&lt;div&gt;Then you know that the poor boy is in the ground&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh, dig my grave with a silver spade&lt;/div&gt;&lt;div&gt;Dig my grave with a silver spade&lt;/div&gt;&lt;div&gt;Well, dig my grave with a silver spade&lt;/div&gt;&lt;div&gt;You may lead me down with a golden chain&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have you ever heard a church bell toll?&lt;/div&gt;&lt;div&gt;Have you ever heard a church bell toll?&lt;/div&gt;&lt;div&gt;Have you ever heard a church bell toll?&lt;/div&gt;&lt;div&gt;Then you know that the poor boy is dead and gone&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-640088082548073695?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/640088082548073695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=640088082548073695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/640088082548073695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/640088082548073695'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/02/np-see-that-my-grave-is-kept-clean.html' title='NP: See That My Grave Is Kept Clean (Blind Lemon Jefferson)'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-320267251273625000</id><published>2010-02-19T05:30:00.001-08:00</published><updated>2010-03-20T17:16:00.317-07:00</updated><title type='text'>Nerd Food: SSH darwin awards</title><content type='html'>&lt;div style="text-align: justify;"&gt;Like every other Linux user, I use SSH extensively to connect to different computers and run applications remotely (-X in particular is one of my favourites). SSH has a tendency to remember hosts you've connected to in the past, and stores this information under ~/.ssh/known_hosts. This works quite well for fixed IPs in the WAN, where SSH key to IP address is bijective. It doesn't work so well for people who connect to different local networks using the traditional 192.168.X.Y space, because the same IP maps to many different keys, confusing SSH. Any DHCP environment also suffers from this problem.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In the past, I've solved this the brute force way by trashing the whole of .ssh:&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;rm -rf ~/.ssh&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This solution works fine. Fine, that is, &lt;b&gt;unless&lt;/b&gt; you happen to actually have created a private/public key to authenticate with servers requiring it, such as GitHub. Just as I pressed the enter key, it suddenly occurred to me that I had in fact started messing around with git and said provider, and had made &lt;b&gt;no backup&lt;/b&gt; of the key - even though the FAQ states quite clearly that one should do so. Classic Homer Simpson moment. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Fortunately, GitHub must have thought about this exact same mistake and made it really easy to update one's key. From now on:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;rm -rf ~/.ssh/known_hosts&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-320267251273625000?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/320267251273625000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=320267251273625000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/320267251273625000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/320267251273625000'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/02/nerd-food-ssh-darwin-awards.html' title='Nerd Food: SSH darwin awards'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7983586696579067913</id><published>2010-02-18T15:37:00.000-08:00</published><updated>2010-02-18T15:38:28.101-08:00</updated><title type='text'>NP: Singapore (Tom Waits)</title><content type='html'>&lt;div&gt;We sail tonight for Singapore,&lt;/div&gt;&lt;div&gt;We're all as mad as hatters here&lt;/div&gt;&lt;div&gt;I've fallen for a tawny Moor,&lt;/div&gt;&lt;div&gt;Took off to the land of Nod&lt;/div&gt;&lt;div&gt;Drank with all the Chinamen,&lt;/div&gt;&lt;div&gt;Walked the sewers of Paris&lt;/div&gt;&lt;div&gt;I danced along a colored wind,&lt;/div&gt;&lt;div&gt;Dangled from a rope of sand&lt;/div&gt;&lt;div&gt;You must say goodbye to me&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We sail tonight for Singapore,&lt;/div&gt;&lt;div&gt;Don't fall asleep while you're ashore&lt;/div&gt;&lt;div&gt;Cross your heart and hope to die&lt;/div&gt;&lt;div&gt;When you hear the children cry&lt;/div&gt;&lt;div&gt;Let marrow bone and cleaver choose&lt;/div&gt;&lt;div&gt;While making feet for children shoes&lt;/div&gt;&lt;div&gt;Through the alley, back from hell,&lt;/div&gt;&lt;div&gt;When you hear that steeple bell&lt;/div&gt;&lt;div&gt;You must say goodbye to me&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wipe him down with gasoline&lt;/div&gt;&lt;div&gt;'til his arms are hard and mean&lt;/div&gt;&lt;div&gt;From now on boys this iron boat's your home&lt;/div&gt;&lt;div&gt;So heave away, boys&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We sail tonight for Singapore,&lt;/div&gt;&lt;div&gt;Take your blankets from the floor&lt;/div&gt;&lt;div&gt;Wash your mouth out by the door,&lt;/div&gt;&lt;div&gt;The whole town's made of iron ore&lt;/div&gt;&lt;div&gt;Every witness turns to steam,&lt;/div&gt;&lt;div&gt;They all become Italian dreams&lt;/div&gt;&lt;div&gt;Fill your pockets up with earth,&lt;/div&gt;&lt;div&gt;Get yourself a dollar's worth&lt;/div&gt;&lt;div&gt;Away boys, away boys, heave away&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The captain is a one-armed dwarf,&lt;/div&gt;&lt;div&gt;He's throwing dice along the wharf&lt;/div&gt;&lt;div&gt;In the land of the blind&lt;/div&gt;&lt;div&gt;The one-eyed man is king, so take this ring&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We sail tonight for Singapore,&lt;/div&gt;&lt;div&gt;We're all as mad as hatters here&lt;/div&gt;&lt;div&gt;I've fallen for a tawny Moor,&lt;/div&gt;&lt;div&gt;Took off to the land of Nod&lt;/div&gt;&lt;div&gt;Drank with all the Chinamen,&lt;/div&gt;&lt;div&gt;Walked the sewers of Paris&lt;/div&gt;&lt;div&gt;I drank along a colored wind,&lt;/div&gt;&lt;div&gt;I dangled from a rope of sand&lt;/div&gt;&lt;div&gt;You must say goodbye to me&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7983586696579067913?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7983586696579067913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7983586696579067913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7983586696579067913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7983586696579067913'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/02/np-singapore-tom-waits.html' title='NP: Singapore (Tom Waits)'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4215650153046530723</id><published>2010-01-31T10:29:00.001-08:00</published><updated>2010-01-31T11:11:02.857-08:00</updated><title type='text'>Kizua Mwangola: They think it's all over...</title><content type='html'>&lt;div style="text-align: justify;"&gt;And it's all over now: Egypt has won the CAN. Ghana did a lot better than I expected though, and in the end the game was actually quite close. The cup goes to the best team though. The other point worth of notice was the size of the crowd: over forty thousand Angolans turned up to watch it, an amazing figure for a final that did not involve the host nation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S2XMkdc2RxI/AAAAAAAAAWU/Fsb72ZUhrgA/s1600-h/egypt.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 251px; height: 167px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S2XMkdc2RxI/AAAAAAAAAWU/Fsb72ZUhrgA/s320/egypt.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5432973452245354258" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Egypt team. (c) Angola Press&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4215650153046530723?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4215650153046530723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4215650153046530723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4215650153046530723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4215650153046530723'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-they-think-its-all-over.html' title='Kizua Mwangola: They think it&apos;s all over...'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S2XMkdc2RxI/AAAAAAAAAWU/Fsb72ZUhrgA/s72-c/egypt.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8355866231276564044</id><published>2010-01-29T01:59:00.000-08:00</published><updated>2010-01-29T02:49:23.867-08:00</updated><title type='text'>Kizua Mwangola: Magreb War</title><content type='html'>&lt;div style="text-align: justify;"&gt;There is no other way to describe yesterday's game - it was like being invited to watch someone else's war. A few days ago I overheard one of the reporters quoting a Algerian player, his words being along the lines of "this is a matter of life or death" and "it will be a war". Well, it really was. To make matters worse, the game boasted the biggest crowd of away fans we've ever seen in CAN, with a predominance for the Algerian side. The rumours of two thousand Algerian fans entering the country were certainly an exaggeration, but at least five hundred must have done the trek, and they were noisy too.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There was a lot at stake, and it wasn't just the place in the final. The Egyptians wanted revenge from &lt;a href="http://www.guardian.co.uk/football/2009/nov/18/algeria-egypt-live-world-cup-playoff"&gt;Sudan&lt;/a&gt;, which according to them was solely due to the referee's mistakes. The Algerians wanted to prove that Sudan was no mistake, and that they deserved to represent the Magreb and the whole Arab world in the World Cup. If, to that, you add years of bad blood between these two, you're starting to get a rough idea of how high the tension was.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S2K3aiQ4fcI/AAAAAAAAAWI/C429-G1CdT4/s1600-h/algerian_supporters.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S2K3aiQ4fcI/AAAAAAAAAWI/C429-G1CdT4/s320/algerian_supporters.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5432105767064337858" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Algerian Supporters. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When it came to football, however, the Algerians demonstrated their Achilles heel: bad behaviour. To be fair, this is a common problem on all Arab teams. We've seen Egypt and Tunisia losing it too, moaning on every decision referees take against them and ganging up around the ref. Algeria managed to go that extra step, causing total havoc when Egypt got a penalty. The game was going Egypt's way, to be sure, but it wasn't clear cut; but playing Egypt is always a difficult task, and playing with ten men is neigh impossible. From then on it was a slippery slope, red cards following red cards and trivial goals following trivial goals. Egypt wasn't even trying to score, but the massive gaps in the Algerian defence made it so easy they couldn't resist. The final body count revealed almost as many red cards as goals (three of the former against four of the latter). It seems Egypt is, and always was, the champion waiting to be crowned.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S2K3aXdlZLI/AAAAAAAAAWA/pktysRhb7RM/s1600-h/algerian_attack.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S2K3aXdlZLI/AAAAAAAAAWA/pktysRhb7RM/s320/algerian_attack.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5432105764164822194" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Egyptian keeper anticipates Algerian striker. (c) Shahinara Craveiro&lt;/i&gt;    &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;As a side note, I was extremely surprised to see a packed ground for this game - must have been around thirty thousand of us watching it. Most people here are interested in the Southern African teams, and very few can name an Arab player other than Egypt's Zidane. However, Benguela turned up for the game in great numbers and made loads of noise. A good few hours later, I'm still unable to hear properly. I guess Egypt became our adoptive team, the only one that never left Benguela all the way up to the final. Egypt's coach said so in the after match press conference, and thanked the Benguelans for all the support.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This was also a milestone for us: the last game of the competition we're watching live. We've seen many games, travelled to three of the four CAN stadiums, saw Angola live and met many, many great people. It was a great adventure. But all good things must come to an end, unfortunately, and the tiredness is now getting to us. The last two games will be watched on telly.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8355866231276564044?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8355866231276564044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8355866231276564044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8355866231276564044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8355866231276564044'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-magreb-war.html' title='Kizua Mwangola: Magreb War'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S2K3aiQ4fcI/AAAAAAAAAWI/C429-G1CdT4/s72-c/algerian_supporters.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-767525391922077676</id><published>2010-01-28T09:57:00.000-08:00</published><updated>2010-01-28T10:01:44.059-08:00</updated><title type='text'>Kizua Mwangola: OMG, Ghana!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Unbelievable. Watching Ghana v Nigeria was exactly like watching Angola v Ghana. One attack from Ghana early on in which they score, then  90-odd minutes of Nigeria attacking badly. Amazing, like a carbon copy. Off to the stadium now, to watch Egypt v Algeria. Hopefully my &lt;a href="http://www.portalangop.co.ao/motix/pt_pt/noticias/desporto/2010/0/4/Benguelenses-divididos-quanto-vencedor-Egipto-Argelia,0d5a2380-0018-4c30-bb91-f1621d540927.html"&gt;predictions&lt;/a&gt; will come to pass, and we'll have an Egypt v Ghana final - either way, I think Ghana is running out of luck, fast.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-767525391922077676?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/767525391922077676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=767525391922077676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/767525391922077676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/767525391922077676'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-omg-ghana.html' title='Kizua Mwangola: OMG, Ghana!!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-5533582685024595784</id><published>2010-01-27T03:43:00.000-08:00</published><updated>2010-01-27T05:00:37.467-08:00</updated><title type='text'>Kizua Mwangola: Peter and the Kupapata</title><content type='html'>&lt;div style="text-align: justify;"&gt;After a prolonged stay here at Nancy's, &lt;a href="http://www.pfd.co.uk/client/peter_auf_der_heyde/books/?section=books_authors"&gt;Peter&lt;/a&gt; decided to move to Hotel Praia Morena. We were all getting quite used to him (and to &lt;a href="http://www.blogger.com/blogs.reuters.com/mark-gleeson"&gt;Mark&lt;/a&gt; too, another recent defector), but that's the gist of a guest house I guess - people come and people go. But that's not the story; the story is _how_ he got there. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Like any practical South-African-come-Irish-come-German he thought the fastest way to move hotels was to take a kupapata (a bike-taxi). However, he had some luggage, so he decided to go for a kupapata with a trailer - something fairly common around here. He immediately caused chaos amongst all the staff by asking them to arrange one for him: surely not!! A Praia Morena guest riding on the back of the kupapata with the luggage?! Unheard off! Debates immediately started, and heated discussions too; people wanted to see this crazy foreigner riding with the luggage. I was even asked to take a picture, an undeniable proof that this event had actually happened.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/S2Ap1IMJU2I/AAAAAAAAAVs/Ju3xdOFTWhw/s1600-h/pete_with_senhor_viana.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_nEck2BGjqOg/S2Ap1IMJU2I/AAAAAAAAAVs/Ju3xdOFTWhw/s320/pete_with_senhor_viana.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5431387143317050210" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Peter with Senhor Viana. (c) Marco Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No one believed the security guards would allow them to park at the entrance of the hotel. In the end, the mission was successful. Whilst the locals were getting agitated, the foreigners didn't quite understand what the fuss was all about - seemed like the sensible thing to do, really. I guess they don't quite get the "never lose your style" moto.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-5533582685024595784?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/5533582685024595784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=5533582685024595784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5533582685024595784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5533582685024595784'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-peter-and-kupapata.html' title='Kizua Mwangola: Peter and the Kupapata'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nEck2BGjqOg/S2Ap1IMJU2I/AAAAAAAAAVs/Ju3xdOFTWhw/s72-c/pete_with_senhor_viana.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8829779755866521284</id><published>2010-01-26T00:51:00.001-08:00</published><updated>2010-01-26T09:43:56.857-08:00</updated><title type='text'>Kizua Mwangola: Aiwee!! Ta Doeeeer!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;That's how an Angolan song goes, and it seems to accurately represent the nation's feelings; translating it loosely it means "I'm in pain". We certainly are. It wasn't &lt;a href="http://www.thenational.ae/apps/pbcs.dll/article?AID=/20100124/SPORT/701239901/1004"&gt;meant&lt;/a&gt; to end like this. And to make it worse, we saw it all unfolding live, minute by painful minute, at the 11th of September stadium in Camama.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But lets rewind it all back to the Friday. Two new photographers had joined our lovely guest house - a couple from Harlsden (of all places). While chatting over a few cucas they told us of their crazy plans: take their South-African bought car from Benguela to Luanda on the Saturday and drive back on the Monday, resting their heads only a few hours at some cheap hostel. This got Shahin's brain going. Perhaps we could join them? After a quick check, we concluded that all of our commitments could be postponed by a day or two - in fact, in a more general form, it can be said that there is no activity held in Angolan soil that is deemed to be so vital that cannot be postponed by a day or two. So we joined the quest. We tapped all our contacts for a living room in which to crash, but none was forthcoming so the only other option was to camp. At 120 km from Luanda, Cabo ledo was the destination of choice.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We set off a bit late in the day - midday or so - and had a more-or-less uneventful trip there, with a short stop at Sumbe. The roads from Benguela to Luanda are now in a decent state, so one can drive at full speed, making it a seven hour journey. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cabo Ledo has changed a lot in three years. The dirt-track has been superseded by a sandy road, the two lonely bungalows now have mushroomed into ten or so and - even more surprisingly - there is a whole new resort at the very end of the beach. This was a luxury place, with rooms going for 300 USD a night. They didn't have any camping area, but the chap there was very nice and allowed us to camp for a negligible price.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S18IJszjb1I/AAAAAAAAAVM/bkJU7cvDj5Q/s1600-h/camping_cabo_lado.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S18IJszjb1I/AAAAAAAAAVM/bkJU7cvDj5Q/s320/camping_cabo_lado.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5431068638371344210" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Camp at Cabo Ledo. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The evening and morning were great, very much like a proper beach outing. We left early for Luanda, as the photographers need to start work quite early on. In addition, cousin Rui fought hard to secure a couple of last minute tickets for us, and the plan was to meet him at the stadium for delivery. He deliver the goods, and did so in proper Angolan fashion, arriving at around 15 minutes before the game. In Benguela this would have meant losing the first 20 minutes or so of the match; surprisingly, in Luanda - amongst a 50-thousand crowd - we still got in _before_ the game had started. I was amazed. Unfortunately, I was also quite pissed off too as they forced me to bin my newly bought bolos secos (dried cakes). Apparently these can be quite lethal. No cameras allowed inside either.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;What can I say about the game. I thought that we played well overall, and other than not scoring, we did everything best we could. One defensive mistake produced one goal; to make just one mistake in 90 minutes is quite good for us. Manucho and Flavio let us down, the first by not scoring any of the many opportunities he had and the second by not creating any for himself. The crowd tried their best. We even sang Angolan songs:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Nossa Angola, Ole, Ole&lt;/div&gt;&lt;div style="text-align: center;"&gt;Nossa Angola Ole, Ole&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But it was all in vain.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/S18I4cqxg4I/AAAAAAAAAVg/UpHON9CGNu8/s1600-h/angola_v_ghana.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_nEck2BGjqOg/S18I4cqxg4I/AAAAAAAAAVg/UpHON9CGNu8/s320/angola_v_ghana.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5431069441493402498" style="cursor: pointer; width: 307px; height: 230px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Angola v Ghana. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The post-match was quite good though. There were hamburger vans selling beers at the parking lot, with TVs showing the Ivory Coast v Algeria game and selling cold'ish beer. In fact, beers and drinking have been handled quite well by the authorities. I was expecting a stadium full of drunken Angolans on all matches - lord knows we love our cuca - but instead I didn't see a single drunken spectator. Police was quite strict and didn't allow the selling or consumption of alcohol until the end of the game, an arrangement which proved to work well.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Afterwards, we drove back to Cabo Ledo in the dead of night - with a few scary near misses. Driving in Angola at night is not recommended for the faint at heart. In keeping with the depressed Angolan spirit, the night was dreadful, with rain and thunderstorms. To make it all worse, our 25 USD-chinese-shop tent had a leak and we got soaked and blasted by sand. And to top it all off, it was still quite rainy in the morning, so I couldn't even go for a swim before heading back to Benguela. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The road back was again uneventful. We got to Benguela just in time to watch the Egypt v Cameroon live in Ombaka. And so it was that three of my teams are now out of the African Cup: Angola, Ivory Coast and Cameroon. Like one fan said, "who shall we support now? Ghana?".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nEck2BGjqOg/S18IJ47sj7I/AAAAAAAAAVU/U9g-tGuqyEk/s1600-h/egypt_v_cameroon.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_nEck2BGjqOg/S18IJ47sj7I/AAAAAAAAAVU/U9g-tGuqyEk/s320/egypt_v_cameroon.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5431068641626722226" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Egypt v Cameroon. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Go on Zambia! Ow no, they lost too. Maybe its me?&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8829779755866521284?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8829779755866521284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8829779755866521284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8829779755866521284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8829779755866521284'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-aiwee-ta-doeeeer.html' title='Kizua Mwangola: Aiwee!! Ta Doeeeer!!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S18IJszjb1I/AAAAAAAAAVM/bkJU7cvDj5Q/s72-c/camping_cabo_lado.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2095542995175135442</id><published>2010-01-22T09:14:00.000-08:00</published><updated>2010-01-23T01:06:51.118-08:00</updated><title type='text'>Kizua Mwangola: Lubango</title><content type='html'>&lt;div&gt;&lt;div style="text-align: justify;"&gt;Well, Lubango was certainly an adventure. We convinced Silvano and Jonathan that the bus was the most sensible option to get there and back - on the vague advice from Lau that the roads from Benguela to Lubango weren't too bad, 50-100 km's or so of picada. I didn't think that they would _really_ take us up on that offer; one tends to associate important reporters with five-star hotels, chauffeurs and all that. Turns out they were actually keen on going to Lubango by bus, to experience the real Angola rather than the sheltered one. It makes sense, I guess. After all, these are guys that have been covering African cups for a long time and are used to the, how shall I put it, vagaries of African travel. So by bus we went.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1nxUyn4RvI/AAAAAAAAAUk/CkGKKSJYYjo/s1600-h/silvano_and_jonathan.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1nxUyn4RvI/AAAAAAAAAUk/CkGKKSJYYjo/s320/silvano_and_jonathan.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5429636165260560114" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Jonathan and Silvano. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;By the standards of most of our trips, this bus journey was remarkable for its non-eventfulness. No flat tires, no drunken passengers, not that many chickens on board, not that many passengers picked up en route, buses roughly on time, roads not too bad - it was as if the Angolan transport system knew they were carrying reporters and wanted to behave. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We got to Lubango at around 14:00, and were greeted by nasty weather. After enjoying a constant stream of hot, cloudless days, it was a real shock to see rain and - gasp - feel the cold.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1n5dMpPxwI/AAAAAAAAAU4/7nKWWVpaMbg/s1600-h/rain_in_lubano.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1n5dMpPxwI/AAAAAAAAAU4/7nKWWVpaMbg/s320/rain_in_lubano.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5429645105777592066" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Main road in Lubango. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Luckily we were promptly picked up by Remidor, our contact in town. In fact, he proved to be a really valuable resource and - surprisingly for Angola - a stickler for time (if you need a driver in Lubango, give me a shout and I'll send you his number). Remidor took us to a couple of hotels, but the whole town appeared to be booked. After much searching, there were only two rooms to be found: a posh one at Hotel Amigo and a crap one at Hotel Diocema - and by crap I mean _crap_; it would have been a 5-10 USD one in Thailand but in our lovely Angola it was going for just over 50 USD. To add some excitement to the occasion me and Shahin picked the short straw and got Diocema.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The rest of our stay was a story of rain, more rain and then some real thunderstorms. I even managed to get a really bad cold on the process, something unthinkable in Benguela. On the plus side, the games were pretty good, in particular the Cameroon v Tunisia. This was a fantastic game, if I ever saw one, even including the horrendous defensive mistakes by Cameroon; the fact that the whole group was being decided on a minute-by-minute basis added even more excitement to the equation, so much so that by the end even the professionals were somewhat confused as to who had actually qualified and which team had won the group. In the end, Zambia and Cameroon qualified, giving us an exciting Egypt v Cameroon here in Benguela.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nEck2BGjqOg/S1nxVHXGcwI/AAAAAAAAAUs/a-FVSqqpDW4/s1600-h/peter_odemwimgie.JPG"&gt;&lt;img src="http://2.bp.blogspot.com/_nEck2BGjqOg/S1nxVHXGcwI/AAAAAAAAAUs/a-FVSqqpDW4/s320/peter_odemwimgie.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5429636170827330306" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Nigeria's Peter Odemwimgie. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The other interesting highlight of Lubango, and one which I hope to pursue in the future, is the huge white Angolan community down there. Not only are there the well-do types, but there is also a down-and-out white Angolan community, something which I had never seen in my life. For instance, I saw a white Angolan living in the bairro and carrying her young child on her back, just like a black Angolan woman would do. I couldn't believe my eyes so I got Remidor to confirm this for me - no, it wasn't a really light-skinned mulatto but a real white Angolan. Apparently this is a common sight in the bairros of Lubango.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Update: &lt;/b&gt;Jonathan has also &lt;a href="http://betting.betfair.com/international-football/african-cup-of-nations/african-cup-of-nations-news-the-road-to-lubango-200110.html"&gt;posted&lt;/a&gt; about this trip, just not quite as eloquently as me :-) Also, ignore the terrible headline ("In a haunting account", "encountering remnants of war and weak bladders" etc) - just another great display of terrible sub-editing (e.g., not his fault). Just read the whole thing.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2095542995175135442?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2095542995175135442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2095542995175135442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2095542995175135442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2095542995175135442'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-lubango.html' title='Kizua Mwangola: Lubango'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S1nxUyn4RvI/AAAAAAAAAUk/CkGKKSJYYjo/s72-c/silvano_and_jonathan.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7153808803882596742</id><published>2010-01-19T09:39:00.000-08:00</published><updated>2010-01-19T10:40:02.517-08:00</updated><title type='text'>Kizua Mwangola: Newspaper men</title><content type='html'>&lt;div style="text-align: justify;"&gt;Our days have been incredibly busy of late. Not only because I'm spending longer hours at the tech support at Uni but also because the cream of the reporting crop is staying at our guest house: being the only hotel with a name in English and having an American expat running it makes it the obvious choice for every other English-speaking foreigner. These are famous people in their fields, contributers to papers such as Financial Times, Daily Telegraph, The Independent, Die Spiegel, BBC, et al. This, of course, excluding Nigerian and Angolan papers.&lt;br /&gt;&lt;br /&gt;All this excitement not only makes my tech support somewhat harder - we now have people that rely on the Internet to do proper work rather than the occasional browsing - but it also means me and even Shahin are on "translation duties" at all hours. For example, yesterday I translated an interview with the Zambian coach for local newspapers. I've also spoken quite a lot of really bad French (but fortunately, the Swiss are here to help!). Shahin's claim to fame is translating French to Portuguese, the unfortunate targets being our Gabonese guests. I've also been &lt;a href="http://www.earthtimes.org/articles/show/304652,excuse-me-is-there-any-football-being-played-here--feature.html"&gt;quoted&lt;/a&gt; &lt;a href="http://www.guardian.co.uk/football/blog/2010/jan/18/angola-africa-cup-of-nations"&gt;twice&lt;/a&gt; (if not entirely precisely). And to top it all off, we're traveling to Lubango tomorrow with journalist and &lt;a href="http://www.amazon.co.uk/Inverting-Pyramid-History-Football-Tactics/dp/1409102041/ref=pd_bxgy_b_text_c"&gt;book author&lt;/a&gt;, &lt;a href="http://www.guardian.co.uk/profile/jonathanwilson"&gt;Jonathan Wilson&lt;/a&gt; - a gem of a bloke by the way. Mind you, &lt;a href="http://www.pfd.co.uk/client/peter_auf_der_heyde/books/?section=books_authors"&gt;Pete&lt;/a&gt; was looking over my shoulder as I write this and he swears that &lt;a href="http://www.amazon.com/Has-Anybody-Got-Whistle-Football/dp/1903158311"&gt;his book&lt;/a&gt; is better for the common man, so I may end up buying both.&lt;br /&gt;&lt;br /&gt;There is nothing scarier than watching a football match on telly with five or ten of these guys. You just feel afraid of shouting even the most trivial things, lest they look at you with disapproving eyes - "do you know _anything_ at all about football, young man?". On the plus side, they are a really great bunch to chat over a few cucas. There were a couple of comments that really made me laugh. One was that "the stadiums were just too good, you couldn't tell whether this was Germany or Angola" which made me pretty laugh pretty smugly. Apparently Ghana and Mali's African cup had a more African feel. Don't want to discriminate against our African brothers, but I'll take that as a compliment. The other, which made me laugh really hard was - "I hate those Scandinavians! Their biggest problem is a complete lack of cynicism! I mean, just look all the NGO's they have which actually _believe_ in changing the world!". I wish all my Scandinavian friends could read this now.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7153808803882596742?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7153808803882596742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7153808803882596742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7153808803882596742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7153808803882596742'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-newspaper-men.html' title='Kizua Mwangola: Newspaper men'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4731915722570341993</id><published>2010-01-19T07:50:00.000-08:00</published><updated>2010-01-19T08:01:43.958-08:00</updated><title type='text'>Kizua Mwangola: Why I love Benguela (part I)</title><content type='html'>&lt;div&gt;Everyone is always asking me, but what makes you like Benguela so much. I thought perhaps a piece of photo-blogging would help. So here's my first part of Why I love Benguela: &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/S1XV0YT7stI/AAAAAAAAAUY/32rPiReiOEo/s1600-h/IMG_1397.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_nEck2BGjqOg/S1XV0YT7stI/AAAAAAAAAUY/32rPiReiOEo/s320/IMG_1397.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428480021720969938" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Our brand spanking sidewalks. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XV0JTb_6I/AAAAAAAAAUQ/-JgUS1VUTX4/s1600-h/IMG_1392.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XV0JTb_6I/AAAAAAAAAUQ/-JgUS1VUTX4/s320/IMG_1392.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428480017692360610" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Loads of lovely public gardens. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVz9bYcsI/AAAAAAAAAUI/J7CA17hpNYw/s1600-h/IMG_1214.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVz9bYcsI/AAAAAAAAAUI/J7CA17hpNYw/s320/IMG_1214.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428480014504456898" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The new Ombaka stadium. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVmrbo_bI/AAAAAAAAAUA/1wvP0WUKVvM/s1600-h/IMG_1109.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVmrbo_bI/AAAAAAAAAUA/1wvP0WUKVvM/s320/IMG_1109.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479786335403442" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The sunsets we get every day. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVmkTp9ZI/AAAAAAAAAT4/9w46S9PTu38/s1600-h/IMG_0893.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVmkTp9ZI/AAAAAAAAAT4/9w46S9PTu38/s320/IMG_0893.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479784422864274" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The rush hour traffic. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVmV0e2kI/AAAAAAAAATw/1yHE30tx_eo/s1600-h/IMG_0892.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1XVmV0e2kI/AAAAAAAAATw/1yHE30tx_eo/s320/IMG_0892.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479780534016578" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Great colonial architecture. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVVop81OI/AAAAAAAAATo/0YK6qxP35eE/s1600-h/IMG_0826.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVVop81OI/AAAAAAAAATo/0YK6qxP35eE/s320/IMG_0826.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479493532341474" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Caotinha beach. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVVT496pI/AAAAAAAAATg/qI5XcT3DTVs/s1600-h/IMG_0623.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_nEck2BGjqOg/S1XVVT496pI/AAAAAAAAATg/qI5XcT3DTVs/s320/IMG_0623.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479487958182546" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Catumbela river. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nEck2BGjqOg/S1XVU4BaB_I/AAAAAAAAATY/KmNuejMglTw/s1600-h/IMG_0540.JPG"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); -webkit-text-decorations-in-effect: none; "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nEck2BGjqOg/S1XVU4BaB_I/AAAAAAAAATY/KmNuejMglTw/s1600-h/IMG_0540.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_nEck2BGjqOg/S1XVU4BaB_I/AAAAAAAAATY/KmNuejMglTw/s320/IMG_0540.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5428479480477386738" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Local capoeira school&lt;i&gt;. (c) Shahinara Craveiro&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4731915722570341993?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4731915722570341993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4731915722570341993' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4731915722570341993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4731915722570341993'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-why-i-love-benguela-part.html' title='Kizua Mwangola: Why I love Benguela (part I)'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nEck2BGjqOg/S1XV0YT7stI/AAAAAAAAAUY/32rPiReiOEo/s72-c/IMG_1397.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-3405326037212855469</id><published>2010-01-19T07:39:00.000-08:00</published><updated>2010-01-19T07:49:57.996-08:00</updated><title type='text'>Kizua Mwangola: We're through!</title><content type='html'>&lt;a href="http://news.bbc.co.uk/sport2/hi/football/africa/8464507.stm"&gt;Awful game&lt;/a&gt;! I'm sure Mali and Malawi thought it wasn't cricket any more too, but hey - we probably would have lost on a real game. Now, lets see how we fare against the elephants.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-3405326037212855469?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/3405326037212855469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=3405326037212855469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3405326037212855469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3405326037212855469'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-were-through.html' title='Kizua Mwangola: We&apos;re through!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-749543251989314892</id><published>2010-01-16T13:49:00.002-08:00</published><updated>2010-01-16T14:55:53.691-08:00</updated><title type='text'>Kizua Mwangola: Deadly Mambas</title><content type='html'>&lt;div style="text-align: justify;"&gt;So, the entertainment of the day proved to be entertaining. First course was a pleasing &lt;a href="http://news.bbc.co.uk/sport2/hi/football/africa/8462601.stm"&gt;Nigeria v Benin&lt;/a&gt;, with the Super Eagles displaying the usual not-so-super form. Somehow they managed to scrape a win with a penalty that didn't look that obvious to me - but then again, that's the biggest problem with live games: no replays. Benin looked good though, or maybe it just was a weak Nigeria that made them look so good. Second course was the very much waited &lt;a href="http://news.bbc.co.uk/sport2/hi/football/africa/8462293.stm"&gt;Mozambican mambas against Egypt&lt;/a&gt;. If Egypt had a great support from the public against Nigeria, this time they felt the might of 30-odd thousand Benguelans against them. I mean, jeez, we even sang _Mozambican_ songs. This was better support than they would have in Maputo, I tell you.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/S1I08PGauLI/AAAAAAAAATA/OCoIRzRlaaM/s1600-h/IMG_1387.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/S1I08PGauLI/AAAAAAAAATA/OCoIRzRlaaM/s320/IMG_1387.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5427458710385113266" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Mozambique v Egypt, Benguela. (c) Shahinara Craveir&lt;/i&gt;o&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The first half was exciting, mainly because Egypt didn't quite manage to score, but Mozambique did make a few interesting moves. The crowed got to the interval screaming very loudly every time Mozambique had the ball in Egypt's half (my own voice is almost gone). It was clear that the Mambas were feeling the pressure to score, so they decided to let loose and make the deadly mamba venom felt. Rather unfortunately, the target of all of that uncontrolled aggression was themselves, with an own goal starting the second half. Or was this the old score-an-own-goal-to-distract-them, a strategy tried and tested on the previous game against Benin? If it was, it didn't work. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Egypt didn't really need the extra help - but didn't deny it either - and looked very much the part of champions-waiting-for-a-crown. In some ways, watching Egypt play is not that dissimilar to watching a well drilled army fighting against a bunch of territorial reserves. Its not that they do anything particularly flashy, or flairy or crowd-pleasing; they are just a really well oiled, well drilled machine, where everyone knows their position, everyone knows who they're covering, everyone knows where they should be when attacking and everyone - and I mean _everyone_ - knows how time waste when they're winning. Its amazing. The only chances they give away, other than the rare defence mistake, are free-kicks and shots from far away - and Mozambique never looked dangerous in either of these.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;* * *&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you're in Angola you've seen the "Miudo" (kid) TV ad, featuring Angola's captain Kali and the "Miudo". Well, we thought we'd find our Miudo too and gave away a bunch of tickets to kids waiting outside the stadium - hey, at 500 Akz a pop one can just about afford the luxury. One of them we decided to drag with us, and he reluctantly accepted or invitation. The miudo was pretty quiet. In fact, he didn't say a single word during both games, communicating only by affirmatively shaking his head to our inquisitive questions: do you want some juice? are you enjoying the game? do you want a cap? He then quietly disappeared minutes before the end of the second game. He seemed amazed with the big stadium though.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/_nEck2BGjqOg/S1I5hYpvdGI/AAAAAAAAATM/ExU7_iz8H_w/s320/miudo.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5427463746650862690" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 240px; height: 320px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;The "Miudo" (c) Shahinara Craveiro&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;* * *&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;On our way back we decided to avoid the crows at the parking lot's exit, taking instead some really alternative routes. This involved trekking through some very dark bairros, places where the electricity hasn't got to (nor will it) and where people can't afford generators either. Goes to say a lot about safety in this country when you can ride the back of a pick-up truck across the "dangerous" bairros, chatting to the people as you go along without worrying about being mugged.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: center; "&gt;* * *&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Shahin has decided to busy herself by becoming a cook; as I write this she's serving Pizzas to starving journalists from many different countries. &lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-749543251989314892?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/749543251989314892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=749543251989314892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/749543251989314892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/749543251989314892'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-deadly-mambas.html' title='Kizua Mwangola: Deadly Mambas'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_nEck2BGjqOg/S1I08PGauLI/AAAAAAAAATA/OCoIRzRlaaM/s72-c/IMG_1387.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2136572368185426178</id><published>2010-01-14T13:16:00.000-08:00</published><updated>2010-01-15T04:27:47.678-08:00</updated><title type='text'>Kizua Mwangola: Angolaaaaaaa!! Angolaaaaaaa!!!</title><content type='html'>&lt;a href="http://news.bbc.co.uk/sport2/hi/football/africa/8457784.stm"&gt;ANGOOOOOOOLAAAAAAAAAA!!!  ANGOOOOOLAAAAAAAA!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2136572368185426178?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2136572368185426178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2136572368185426178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2136572368185426178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2136572368185426178'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-angolaaaaaaa.html' title='Kizua Mwangola: Angolaaaaaaa!! Angolaaaaaaa!!!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2867275606616502344</id><published>2010-01-14T13:12:00.000-08:00</published><updated>2010-01-14T13:16:27.485-08:00</updated><title type='text'>Kizua Mwangola: Benguela's first game</title><content type='html'>We made it to the stadium! Shahin covered it on &lt;a href="http://www.facebook.com/album.php?aid=188286&amp;amp;id=667878901&amp;amp;l=1339489a35"&gt;her facebook&lt;/a&gt;, but here's a teaser. The crowd was much bigger in the end, but it took ages to get in!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos-a.ak.fbcdn.net/hphotos-ak-snc3/hs172.snc3/19932_284376273901_667878901_4568766_4522219_n.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 547px; height: 410px;" src="http://photos-a.ak.fbcdn.net/hphotos-ak-snc3/hs172.snc3/19932_284376273901_667878901_4568766_4522219_n.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2867275606616502344?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2867275606616502344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2867275606616502344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2867275606616502344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2867275606616502344'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-benguelas-first-game.html' title='Kizua Mwangola: Benguela&apos;s first game'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8188028885470930665</id><published>2010-01-10T14:18:00.000-08:00</published><updated>2010-01-10T15:16:20.193-08:00</updated><title type='text'>Kizua Mwangola: Snatching defeat from the jaws of victory</title><content type='html'>There isn't much in common between the Angolans and the English. One exception is an uncanny ability to engineer defeats where no one else would believe them possible. That was most certainly the case &lt;a href="http://news.bbc.co.uk/sport2/hi/football/africa/8450491.stm"&gt;against Mali tonight&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8188028885470930665?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8188028885470930665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8188028885470930665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8188028885470930665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8188028885470930665'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-snatching-defeat-from.html' title='Kizua Mwangola: Snatching defeat from the jaws of victory'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-5114595734696747457</id><published>2010-01-10T05:03:00.001-08:00</published><updated>2010-01-10T15:17:03.721-08:00</updated><title type='text'>Kizua Mwangola: HOWTO: Underplaying your hand</title><content type='html'>Right, not only are we all traumatised with the &lt;a href="http://news.bbc.co.uk/2/hi/africa/8449319.stm"&gt;events of last Friday&lt;/a&gt; but we now have to deal with the media coverage of it as well. And lordy, lord is it bipolar or what. On one side we have the dramatic, disaster-intensive coverage coming from the west, making it clear the world is coming to an end - Angola first. On the other side we have a Beijing style, 1980's coverage from the national media that makes it all sound oh so alright and downplays Togolese suffering far too much.&lt;br /&gt;&lt;br /&gt;If the authorities were media savvy they would have instantly recognised a neo-liberal sort of moment and played it to their advantage. Shock and awe and all that. How easy it would have been to make the most out of this disaster, using it to unite the national and international communities around the "war on terror" disease - all the while promoting the continuation of the CAN as a duty to all who do not believe in giving in to terror. Someone needs to go to America for a 101 course on modern propaganda.&lt;br /&gt;&lt;br /&gt;Anyway, three hours for the game against Mali. Força Palancas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-5114595734696747457?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/5114595734696747457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=5114595734696747457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5114595734696747457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5114595734696747457'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-underplaying-your-hand.html' title='Kizua Mwangola: HOWTO: Underplaying your hand'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-376971573453321090</id><published>2010-01-09T11:14:00.000-08:00</published><updated>2010-01-09T11:34:23.478-08:00</updated><title type='text'>Kizua Mwangola: Kick'em while they're down</title><content type='html'>&lt;div style="text-align: justify;"&gt;So yet again our hopes were dashed. These past couple of months since we arrived here, up to last Friday, have been nothing short of amazing. The whole country was involved in a giant wave of positiveness, as if nothing could stop us now; as if the long war and the troubles were something that could and had been overcome; as if, like England, Germany or Vietnam, we too had the right recover from the war and build something, to move on. It was great to be part of this wave. But, just like in the past, it felt really bad to see it crash, hard against the rocks. Angola just seems to be one of those luckless countries.&lt;br /&gt;&lt;br /&gt;Truth to be told, the bullets didn't steal any of the roads, bridges, hospitals, school's or even stadiums: those are still standing. The losses feel far greater though. The bullets stole Togolese and Angolan lives, and they stole the Angolan belief in a hard-earned decent future, a future paid in blood and with interest. They made everyone realise that, no matter how hard things were to earn, they can be harder still, forever out of one's reach. Just like the bombings in London or in Madrid, a very small number of people managed to inflict extremely severe damage to millions. Unfortunately, unlike Madrid and London, no-one will remember this incident as a terrorist attack; instead, the insanity was to ever conceive the idea of having &lt;a href="http://newsforums.bbc.co.uk/nol/thread.jspa?forumID=7401&amp;amp;edition=2&amp;amp;ttl=20100109192459"&gt;"a high-profile tournament held on a country were civil war is rife"&lt;/a&gt;, as a commentator put it on the BBC's forums.&lt;br /&gt;&lt;br /&gt;As I walk through the long, wide avenues of Benguela, admiring a few of our new sidewalks and the manicured gardens behind fences, as I see a bunch of young boys joyfully going to basketball practice, I cannot help but think that the world's view of Angola will never change. And I cannot help but to be cynical. I wonder how many of those who are now incensed about "countries rife with civil war" even watched the last CAN or the CAN before that. If deaths occurred then, media coverage would have been next to non-existent, nothing but numbers flashing at the bottom of the screen. Now that their teams' backbones are in Africa, suddenly its at the top of the global news agenda.&lt;br /&gt;&lt;br /&gt;Yesterday, the mother of a good friend of mine said: "You're wearing that t-shirt? They've started killing people already". I looked at my CAN top with the palanquinha and sighed. She spoke in a nonchalant, matter-of-factly sort of way - the weary voice of someone who's been through it before. Too many times before. "Too good to be true, hey?", my nod said without needing words.&lt;br /&gt;&lt;br /&gt;Lord have mercy. Lets pray we can still make _something_ out of it.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;NP: Jorge Palma, Ao Meu Encontro Na Estrada&lt;br /&gt;&lt;br /&gt;Disseste que vinhas&lt;br /&gt;E não chegaste&lt;br /&gt;Mudaste de planos, ok&lt;br /&gt;&lt;br /&gt;Mas isso deitou-me tão abaixo&lt;br /&gt;Espero que tenhas pensado bem&lt;br /&gt;Estou triste que só eu sei&lt;br /&gt;Preciso de alguém&lt;br /&gt;&lt;br /&gt;Chaminés pretas deslizam&lt;br /&gt;Nas janelas de mais um comboio&lt;br /&gt;Casas e pessoas&lt;br /&gt;Feias árvores falidas&lt;br /&gt;E um céu angustiado&lt;br /&gt;Tal é o meu quadro&lt;br /&gt;Estou bem chateado&lt;br /&gt;&lt;br /&gt;E agora toca a arranjar o buraco&lt;br /&gt;Que eu tenho no coração&lt;br /&gt;Vou mudar de cenário&lt;br /&gt;Que a coisa assim está mal parada&lt;br /&gt;Vou procurar calor&lt;br /&gt;Mudar de estação&lt;br /&gt;&lt;br /&gt;Há-de vir alguém&lt;br /&gt;Ao meu encontro na estrada&lt;br /&gt;&lt;br /&gt;Pensei tanto em ti&lt;br /&gt;Que não calculas&lt;br /&gt;De manhã, à tarde e ao anoitecer&lt;br /&gt;&lt;br /&gt;Andava louco de contente&lt;br /&gt;Só com a ideia de te voltar a ver&lt;br /&gt;Ahh, mas que grande idiota&lt;br /&gt;Voltei a perder&lt;br /&gt;&lt;br /&gt;Procuro no fumo e no vinho&lt;br /&gt;A forma de chegar depressa à fronteira&lt;br /&gt;Mas sei muito bem que a dor que sinto no peito&lt;br /&gt;Não vai com a bebedeira&lt;br /&gt;Pus-me a voar e caí&lt;br /&gt;Da pior maneira&lt;br /&gt;&lt;br /&gt;E agora toca a arranjar o buraco&lt;br /&gt;Que eu tenho no coração&lt;br /&gt;Vou mudar de cenário&lt;br /&gt;Que a coisa assim está mal parada&lt;br /&gt;Vou procurar calor&lt;br /&gt;Mudar de estação&lt;br /&gt;&lt;br /&gt;Há-de vir alguém&lt;br /&gt;Ao meu encontro na estrada&lt;br /&gt;Há-de vir alguém&lt;br /&gt;Ao meu encontro na estrada&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-376971573453321090?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/376971573453321090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=376971573453321090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/376971573453321090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/376971573453321090'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/kizua-mwangola-kickem-while-theyre-down.html' title='Kizua Mwangola: Kick&apos;em while they&apos;re down'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2977811286134862448</id><published>2010-01-05T05:35:00.000-08:00</published><updated>2010-01-05T05:53:56.488-08:00</updated><title type='text'>Nerd Food: Flash won't beat me</title><content type='html'>&lt;div style="text-align: justify;"&gt;One of those days. For the last day or so, I've been trying to watch a financial video from one of my favourite gurus-that-predicts-everything-before-it-happens &lt;a href="http://firecracker-report.blogspot.com/2010/01/peter-schiff-on-mr-clueless-ie-ben.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+FirecrackerReport+%28The+Firecracker+Report%29&amp;amp;utm_content=Google+Reader"&gt;Peter Schiff&lt;/a&gt; (thanks Fuzz!) and a Google talk with &lt;a href="http://www.youtube.com/watch?v=mrvAqvtWYb4"&gt;Boehm&lt;/a&gt; (of the c++ garbage collector fame).  I had thought &lt;a href="http://www.getmiro.com/"&gt;Miro&lt;/a&gt; was going to save the day on all things flash, and to be honest it has been quite useful in the past; I've managed to search for a bunch of talks and then download them for later consumption. This killer feature is entirely under-appreciated in Europe, where bandwidth is plentiful, but once you get to Africa - with its sporadic-but-expensive Internet connections - it really comes to its own.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;However, of late I've found Miro's search to behave weirdly. Links in YouTube which I can clearly validate don't show up on the search results; or when they do, I get a "file does not exist error" at the download stage. And I don't seem to be able to feed it a straight YouTube URL either. Extremely annoying. So after much searching it suddenly occurred to me that I could literally play the whole video while doing other stuff and then copy it from the browser cache! Not particularly efficient, but great as a last resort measure. This was done, but then I found out that the cached files have the weirdest names in the whole world and no extensions:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[marco@perlis Cache]$ cd /home/marco/.mozilla/firefox/ft6kqpe4.default/Cache&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[marco@perlis Cache]$ ls | head&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;total 57200&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    63548 2010-01-05 12:07 00723220d01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    75884 2010-01-05 12:34 047E9A92d01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    72071 2010-01-05 12:14 04D19A3Dd01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    36826 2009-12-27 15:55 050CF10Ad01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    30346 2010-01-05 11:42 05FF9B13d01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    30487 2010-01-05 11:59 0A86946Ad01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    48362 2010-01-05 13:45 0C9499D4d01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    37458 2010-01-05 11:46 10E28E0Ed01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-rw------- 1 marco marco    38169 2010-01-05 12:00 12C78C2Bd01&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Great for a cache but not so for humans. Bummer. Some googling later I found a chap which pointed out a &lt;a href="http://www.hellogiri.com/get-youtube-video-in-flv-format-at-firefox-cache-folder-without-download/"&gt;way&lt;/a&gt; of figuring out which files are which, windows style. That got my neurons firing:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[marco@perlis Cache]$ A="*"; for a in $A; do file $a; done | grep -i video&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;76568185d01: Macromedia Flash Video&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;806EBA02d01: Macromedia Flash Video&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;82C84C55d01: Macromedia Flash Video&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sorted. A few cp's later and the cache was stored safe and sound! All hail the command line...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2977811286134862448?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2977811286134862448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2977811286134862448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2977811286134862448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2977811286134862448'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2010/01/nerd-food-flash-and-will-to-live.html' title='Nerd Food: Flash won&apos;t beat me'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6094973517393203543</id><published>2009-12-30T06:45:00.000-08:00</published><updated>2009-12-30T07:18:09.043-08:00</updated><title type='text'>Nerd Food: Kindle my Fire!</title><content type='html'>Being in Africa, one of the things we miss the most is access to books. Y'all know how book mad me and Shahin are - all those full shelves we always had. Suddenly we had to downsize significantly, and books were at the bottom of our priority list. I frantically searched for ebook replacements for all my programming books - and largelly succeeded, it must be said. But novels and so on were nowhere to be found (other than &lt;a href="http://www.gutenberg.org/wiki/Main_Page"&gt;project Gutenberg&lt;/a&gt;, that is). I ignored the whole Kindle revolution because I'm not a big fan of ebook readers. For one I find them far too expensive. Also, when space is at a premium, you really don't want to have to carry yet another device on you. However, my ignorance played very much against me this time, as I missed the &lt;a href="http://www.amazon.com/gp/feature.html/ref=kcp_pc_mkt_lnd?docId=1000426311"&gt;Kindle for PC&lt;/a&gt;. Luckily we have slashdot. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Amazon, being the great Linux company they are, they released a Linux version of their product. Not. (Just kidding! The amazon MP3 downloader is absolutely fantastic!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Early reports of wine support were &lt;a href="http://lifehacker.com/5406505/run-kindle-for-pc-in-linux-with-wine"&gt;quite promising&lt;/a&gt; so I gave that a go, only to find out that the latest release &lt;a href="http://ubuntuforums.org/showthread.php?t=1326044&amp;amp;page=2"&gt;does not work&lt;/a&gt;! Luckily our faithful ubunteros discovered the &lt;a href="http://blueyonder.tucows.com/files/KindleForPC-installer.exe"&gt;old version&lt;/a&gt;, which works just like lifehacker had reported.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of this to say, I got Kindle for PC working on wine, and it works well. I must say, the experience was not perfect:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The whole .com vs .co.uk amazon websites is rather confusing: for dead-tree items (and for MP3's too) one is supposed to go via the .co.uk website, which has prices in GBP. However, for kindle I could only find a .com website with prices in USD. On the plus side, my English amazon account works perfectly, and I was able to use the 1-click (TM) order to buy &lt;a href="http://www.amazon.com/Too-Big-to-Fail-ebook/dp/B002VNFNZ6/ref=sr_1_1?ie=UTF8&amp;amp;s=digital-text&amp;amp;qid=1262185417&amp;amp;sr=1-1"&gt;my first Kindle ebook&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;The Kindle interface is a bit &lt;i&gt;too&lt;/i&gt; spartan; after buying an item, its difficult to tell how long the item will take to download, how fast the download is going, etc. Its obviously not designed for dialup style internet connections like the ones we got here, that bounce more than a basketball.&lt;/li&gt;&lt;li&gt;Shantaram is &lt;a href="http://www.amazon.com/s/ref=nb_ss?url=search-alias%3Ddigital-text&amp;amp;field-keywords=shantaram&amp;amp;x=0&amp;amp;y=0"&gt;not yet available&lt;/a&gt;, and that was one of the main things I wanted to (re) buy.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;But even taking those problems into account (and the lack of a Linux version, of course), its still a great product. I mean, its nothing more that a pdf reader, really, but the availability of a lot of books at a decent price makes it really compelling. And for someone like us who cannot access dead-tree books at all, man, its like having all your birthdays in one go.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6094973517393203543?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6094973517393203543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6094973517393203543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6094973517393203543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6094973517393203543'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/12/nerd-food-kindle-my-fire.html' title='Nerd Food: Kindle my Fire!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4331969651357897671</id><published>2009-12-07T10:08:00.000-08:00</published><updated>2009-12-13T14:36:41.705-08:00</updated><title type='text'>Kizua Mwangola: Part 6: Benguela</title><content type='html'>&lt;div style="text-align: justify;"&gt;We've finally arrived at the destination: BENGUELA!!! We still need to sort out Shahin's documents, but since she still has two Ordinary Visa renewals, which take us to the end of the African Cup we're not too worried right now.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Benguela has improved a lot since we were here last. The roads are now paved, and there is a revolution with regards to side-walks. Its beginning to shape up like the Benguela of old. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We've also managed to sort our accommodation for the next 2 months, a key worry of ours. The price is steep, but its much lower than anything on the market; it's also the place in which we stayed three years ago. Now, all we need to do is find jobs!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Shahin has progressed more than me on this department as she has made friends with the American expat that runs an English school. Unfortunately, as the semester is winding down here, the work is also slowing down. Things look good for the next academic year though.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I've also managed to open up a bank account and get myself a bank (ATM) card.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No beach as of yet though.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4331969651357897671?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4331969651357897671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4331969651357897671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4331969651357897671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4331969651357897671'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/12/kizua-mwangola-part-6-benguela.html' title='Kizua Mwangola: Part 6: Benguela'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2234037834802785035</id><published>2009-12-07T09:47:00.000-08:00</published><updated>2010-03-12T16:55:25.969-08:00</updated><title type='text'>Kizua Mwangola: Part 5: Diaspora HOWTO</title><content type='html'>&lt;div style="text-align: justify;"&gt;Right, y'all know I'm a nerd, and part of the nerd lifestyle is writing HOWTOs. For all the non-nerds out there, the reason why we tend to do this is because we love efficiency: there is nothing worse than having more than one person wasting time figuring something out. So, in this spirit, for all the Angolan diasporans out there that are planning to come back home, here are some tips on how to get your documents back. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NOTE: The below assumes only the legally available means (e.g. it's gasosa-free).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NOTE: The standard disclaimer applies: this HOWTO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Without further ado, here's the returning to Angola HOWTO for diasporians.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;1. _BEFORE_ you travel to Angola, make sure to:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Speak to all elements of your family that know anything at all about your past in Angola. You want to make sure you know exactly WHERE you were baptised and registered (exact addresses of church and conservatoria) and WHEN (year and month ideally). Old addresses are useful (even with the old street and town names, don't worry about that). Also, you need to find out where you live in the register of the conservatoria (e.g. Registo, Folhas, Livro).&lt;/li&gt;&lt;li&gt;Collect every single old _Angolan_ document you can lay your hands on (e.g. documents issued by the Portuguese-Angolan government before the independence or the Angolan government after independence; documents issued by the Portuguese government after independence are of no use, even if they state Angolan details).&lt;/li&gt;&lt;li&gt;If married a non-Angolan outside of Angola and you wish to issue your Angolan documents as married, ensure you bring a translated copy of: a) the foreigner's birth certificate and the foreigners criminal record; b) the marriage certificate. These copies MUST be stamped by the Angolan consulate at the country in which the foreigner was born and the wedding took place (if you're talking about Portugal or Brazil, the translation is not required of course). DO NOT leave the country(ies) until you have these documents, or nothing will be done.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NOTE: if you do NOT know your conservatoria, you will not be able to obtain an Angolan citizenship, I don't think.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;2. When you get to Angola:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If you need to update your marriage status, you must do it before anything else. You will need to go to the registros centrais in Luanda next to Hotel Mundial, not far from Mutamba (I don't think this can be done in the provinces, but I'm probably wrong). The process of bringing your document into existence in Angolan law is called a "transcricao". You will need a lot of stuff for this:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;The translated and stamped versions of the birth certificate, marriage certificate and criminal record, as explained above.&lt;/li&gt;&lt;li&gt;Doctor's certificate (Atestado medico), indicating everyone is alive and healthy.&lt;/li&gt;&lt;li&gt;Residence certificate (Atestado de residencia, this is normally proving the address of the Angolan member of the couple and issued by the Bairro's Comissao de Moradores).&lt;/li&gt;&lt;li&gt;Basic Curriculum Vitae&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;One very useful thing about going through this process is your wife will then have a much easier time getting a residence card. I'll cover that on a later update to this HOWTO. After you have transcribed your marriage properly (if required), you can start the climb of the documentation ladder proper.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NOTE: the below assumes you know the conservatoria, registo, folhas and livro.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Go to the church you were baptised and request a Certidao Narrativa. You may not need this, but I would get it if I were you (see my previous episode). Churches have a "notario" on the back. I don't think opening times are standard, but it may be between 10:00 AM and 12:00 PM. Queueing is normally not too bad (e.g. one or two people in the queue). You can collect the certidao narrativa while sorting out the certidao de nascimento (but do it BEFORE going for the ID card).&lt;/li&gt;&lt;li&gt;Next, go to THE conservatoria where you were originally registered at any time during its working hours, and look for a paper with an account number and prices (ideally you want to do this on a Friday or Thursday). DO NOT rely on information from other conservatorias. The paper should contain a standard price and an express price for the certidao (2700'ish and 4900'ish kwanzas respectively; get the EXACT values). It should also contain a cost for the cedula (210'ish kwanzas). IN THEORY you don't need to pay for both the certidao and the cedula as the cedula is included; in practice I'd pay for both since the cedula is so cheap. Ensure you find out WHICH BANK the account belongs to. It should be BPC, but just in case check. I strongly suggest you go for the EXPRESS option (5 working days).&lt;/li&gt;&lt;li&gt;Go very early to the bank and make the payments (I suggest 05:00 AM start but you may be lucky). Ensure you make SEPARATE payments for each document, with the EXACT amounts as displayed in the price sheet. Of course, ENSURE the account number is correct.&lt;/li&gt;&lt;li&gt;Ensure you receive a receipt from the bank for each transaction, STAMPED as deposited. &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NOTE: There is no point in going to the conservatoria without the receipts.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Once you got the receipts, take them to THE conservatoria where you were originally registered to obtain a cedula and a birth certificate:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;The birth certificate (certidao de nascimento) is also known as Assento de Nascimento (abbreviated to assento).&lt;/li&gt;&lt;li&gt;Conservatorias only deal with requests on MONDAYS and TUESDAYS, from 08:00 to 13:00. In practice you need to get there no later than 05:00 AM. I suggest going there on a Monday, in case anything goes wrong (god forbid) or else you'll have to wait for next week.&lt;/li&gt;&lt;li&gt;When you get there early in the morning, keep your eyes and ears open. Ask around. Some places have "lists" (a lista). These are informal documents created by customers that list the names of other customers in order of arrival. Make sure you keep your eyes on the list and do not leave the queue/place at any time. There are sometimes competing lists done by different people, so keep a keen eye open. There should, however, be multiple lists kept by _one_ person, one list per _department_; worry if there is only a single list for everything, as there will be trouble later on. You want to be in the Certidao list (NOT on the cedula list as the child registration is sometimes called). If you are on the wrong list and discover this later on YOU WILL have to queue again next time, so make sure you're on the correct list.&lt;/li&gt;&lt;li&gt;If your position in the list is greater than 50 don't bother waiting for too long; most conservatorias only accept 50 requests a day, so only the first 50 people get a go. At 51 to 55 you may get lucky, any higher than that and its neigh impossible you will be seen to on the day. At any rate, ask as your conservatoria may be different.&lt;/li&gt;&lt;li&gt;At around 08:00 AM the public servants will drop by and collect the lists. They will then read out the list and for every citizen present, give our a "ficha" with a number. This will be the order of processing for the day.&lt;/li&gt;&lt;li&gt;When your turn comes, make sure you ask for a Cedula as well as a Certidao/Assento de nascimento. Ensure the receipt states its a request for both documents. Ask for the collection date (the exact day of the week).&lt;/li&gt;&lt;li&gt;Guard the receipt they give you with your life. Make at least one photocopy of it. The copy is accepted in place of the original.&lt;/li&gt;&lt;li&gt;If you payed for express service, return at any day during the week to collect it. It can be at any of the valid working hours. If you paid for regular service, you can ONLY collect on Thursdays, between 08:00 and 13:00. Do not bother coming on any other day of the week as they will NOT see you.&lt;/li&gt;&lt;li&gt;When you receive your documents, its likely the cedula will be produced on the spot. Regardless, SPEND AS LONG AS NECESSARY CHECKING EVERY FIELD OF YOUR CEDULA. DO NOT LEAVE until you're satisfied. Misspellings, even minor ones will lead to trouble later on. Try to get them to fix your cedula there and then.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If at this point you still don't know your registo, folhas and livro you need to do a search on the conservatoria's books. This is EXTREMELY painful. You NEED to at least know the year. You will have to go to the conservatoria and do a "search". This can two or more weeks and the result can be negative (e.g. "you're not registered in 1966", try again).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When you get your certidao narrativa, certidao de nascimento (assento de nascimento) and cedula, find ANY centro de identificacao (I think, will fix it later if this is not the correct name):&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Ideally go to a province as they are normally not as busy as Luanda. If you must do it in Luanda, I suggest Chicala (Ilha), next to the Portvgalia brewery. This is not quite as mad-busy as other places.&lt;/li&gt;&lt;li&gt;They normally are open Monday to Friday at 07:00 and accept requests until 13:30. In practice, its best to arrive very early (05:00 AM).&lt;/li&gt;&lt;li&gt;There is only one queue for everything, although some people make different queues for men and women. This is rather pointless as they end-up merging the two queues, using an entirely arbitrary merge algorithm that is likely to piss you off (mine was 3 men, 3 women and it worked very much against me). The queue will result in a "ficha", with your number. Guard the ficha with your life.&lt;/li&gt;&lt;li&gt;When they call you, the first counter will be a validation counter. They spot fakes and so on. They should be happy with your supporting documents (e.g. certidao narrativa and cedula).&lt;/li&gt;&lt;li&gt;The second counter takes your details and enters them into the computer (dados biograficos).&lt;/li&gt;&lt;li&gt;The third counter takes your biometric details (e.g. picture and finger prints).&lt;/li&gt;&lt;li&gt;The fourth counter will hand your ID card.&lt;/li&gt;&lt;li&gt;If you're at the beginning of the queue, you may get an ID card printed on the day. This could be as late as 13:30 to 15:30. If its not done by then, you need to come back next working day at any time after 07:00.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;With the ID card you are now ready to go and get:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Numero de contribuinte (tax number): you can't really work without this.&lt;/li&gt;&lt;li&gt;Numero de seguranca social (social security number): you can't really work without this.&lt;/li&gt;&lt;li&gt;Criminal Record: most employers will ask you for it. Look for a Registo Criminal. The document should cost less than 2000 kwanzas (express) and should be ready within a couple of days.&lt;/li&gt;&lt;li&gt;Passport: you won't be able to travel as Angolan without this. Its very useful within SADC as there are lots of special agreements with member countries. Any DEFA would do, the provinces preferably as they are quieter (but slower). Should take around 30 days to issue. To be on the safe side, its best to renew your ordinary visa in the mean time (although this shouldn't really be required after getting an ID card).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Although the process is long, cumbersome and complex, I must say all the people I dealt with were surprisingly professional and managed to get things done in the time slots promised (I'm trying to say this whithout sounding too amazed, but yeh, I was really amazed).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'll update the HOWTO with more details as I get the remaining documents.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;HTH.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2234037834802785035?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2234037834802785035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2234037834802785035' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2234037834802785035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2234037834802785035'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/12/kizua-mwangola-part-5-diaspora-howto.html' title='Kizua Mwangola: Part 5: Diaspora HOWTO'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7106092591471252832</id><published>2009-12-07T09:40:00.000-08:00</published><updated>2009-12-07T09:46:20.187-08:00</updated><title type='text'>Kizua Mwangola: Part 4: Angolan Again</title><content type='html'>&lt;div style="text-align: justify;"&gt;On our return to Luanda, we found the city to be busier than ever. Perhaps it was the long, empty roads of Huambo that made us adapt to the slow pace of country life. Luanda hits you in the face, overflowing with people, cars, rubble. We were not expecting much of the conservatoria, not quite believing that the express service was actually going to deliver results. To my amazement it did: a brand-spanking cedula and birth-certificate were at the ready, waiting for me.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The next mission was to sort out the ID card. We did the scouting as usual, dropping by during the day and figured out another early start was required. I went solo. I got there for around 05:10 AM, managed to be number 38 after some complications (don't ask), waited for ages and got seen around 09:30. The going was good until around 5 people ahead of me. At this point, a middle-aged white Angolan goes up to the desk - a desk sitting more or less in the centre of the room, in full view of everyone. The chap was talking too softly for me to hear, but our Angolan public servant was not; his loudness was calculated to ensure everyone could participate in the exchange. Proceedings went more or less like this:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- So you're 40-odd years of age, haven't you ever had an ID card before?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- (inaudible mumble by citizen)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- So now you come back with this measly piece of paper (pointing to the birth certificate) and want me to believe this person is in fact you? How do I know?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- (more inaudible mumble by citizen)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- No, no, if it comes from the province you need to go back to the province! You all go when things got though and now want to come back when its sweet, and expect us to just believe your word!! If you want me to accept your documents you need some supporting evidence!!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- (even more inaudible mumble by citizen)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- Back to the province I say!! I'm here to do my job!!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The citizen left the building, but the public servant wasn't quite finished. He kept talking about it while processing the subsequent four cases, getting angrier and angrier as time went by - a full fledged monologue by now, punctuated only by the yesses and hm hms uttered by the customer and a few in the crowd. This went on until it was my turn, at which point he finally stopped talking, but for all the wrong reasons. He could hardly believe his eyes when he looked at my birth certificate, alternating between the paper and me several times with gaping mouth:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- I can't believe this!! Another one!?! What's going on here today?? Where is your old ID card?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- I never had one Sir - I say, starting to despair, but with still one card up my sleeve. Using my politest, nicest, humblest Portuguese I mumble:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- I also have the church's birth certificate, if that helps at all.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Incredibly, the guy changed his tone immediately after seeing the church's document, and suddenly starts displaying me as a model citizen to the crowd, explaining how this is the sort of behaviour he expects, with the neat confirming documents and so on. We all had a chuckle at the expense of these citizens that come round with only one document - me noisily joining the crowd slagging those fools. In the same breath I was thanking God I had remembered the old Portuguese bureaucratic trick of bringing every single legal document you own every time you go to a government agency - this makes it harder for them to send you home for lack of documentation.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The adventure wasn't quite finished after that - there were some other minor problems, but nothing major and the end result was that I _almost_ managed to finish the day with a valid Angolan ID card. Yep, this is the same day in which I initiated my request, and I did not do anything different from a regular, average Angolan citizen. The _almost_ bit was due to some mishaps with my file that I don't fully understand - something to do with stamps; my lovely number 38 ended up being processed at number 72 or so, meaning I was at the very back of the queue by the end of the working day (around 14:30). And this is excluding the other minor incident in which the chap calling out people got the files in the wrong order and jumped from 29 to 60 odd, skipping everyone inbetween; it took the queue something like ten names to notice the problem, at which point we were all shouting in unison: TA ERRADO CHEFE!!! TROCOU A ORDEM!!! (its all wrong boss, you flipped the order!!).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Anyway. Next day I returned at the late hour of 08:00 AM and it took me the whole of 20 mins to obtain my brand-spanking new Angolan ID card.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7106092591471252832?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7106092591471252832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7106092591471252832' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7106092591471252832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7106092591471252832'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/12/kizua-mwangola-part-4-angolan-again.html' title='Kizua Mwangola: Part 4: Angolan Again'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-600368022988511833</id><published>2009-12-07T09:35:00.000-08:00</published><updated>2009-12-13T15:08:23.486-08:00</updated><title type='text'>Kizua Mwangola: Part 3: Huambo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Things ended up going quite well with the conservatoria in the end. It sure didn't look like it in the beginning though. We got there around 07:00 AM on the dot, thinking this was early enough - I should have known better. The fall of Saigon had less people roaming around. Nevertheless, it was an instructive day as we figured out all the requirements to get things done. Next day I turned up at 05:10 AM, and was still number 12 in the queue (!!) but managed to put my request in. On the plus side, I was out by 09:30 AM.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Since it would take 5 working days to pick up the finished articles (e.g. the cedula and birth certificate), we decided to trek to Huambo to visit Cousin R. This is Angola's equivalent of Namibia's Windhoek, as it sits more or less on the centre of the country. Many years ago, the Portuguese had ambitions of making Huambo the capital of the empire; they called it Nova Lisboa. Due to its strategic importance and proximity to the rebels home ground, Huambo and the surrounding areas got shelled intensively during the war, particularly during the late nineties.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;These days, the city is a recovering place. It still displays many scars of the recent past, but it also sports a great deal of rebuilt infrastructure. The government sees Huambo and the surrounding areas (such as Cela in Wako Kungo) as key for the agricultural revival the nation requires. Angola imports around 80% of what it consumes, a lot of which are cereals and other agricultural products. This is all the more amazing when one travels through the fertile lands of the plateau, kilometres and kilometres of greenery and very little of it affected by human hand. Imagine something like Hertfordshire but with unspoilt nature instead of farms and then scale that to a Britain-like size and you get close. Excluding the landmines, of course.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After a difficult bus trip,  we spent 5 days in great luxury at cousin R's pad, with all the mod-coms. During the day we treked the city, visiting places like the granja, and meeting nice people such as Hugo. Time went far too quickly, and we had to go back to the madness of Luanda.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-600368022988511833?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/600368022988511833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=600368022988511833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/600368022988511833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/600368022988511833'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/12/kizua-mwangola-part-3-huambo.html' title='Kizua Mwangola: Part 3: Huambo'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6823467383816415460</id><published>2009-11-19T08:55:00.000-08:00</published><updated>2009-12-13T15:03:33.302-08:00</updated><title type='text'>Kizua Mwangola: Part 2: The Lion's Den</title><content type='html'>&lt;div align="justify"&gt;Alvalade is the home of Sporting Lisbon, the mighty lion of Portuguese football. And now, its also the key to my future...&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;* * *&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;As promised, the day started early, with a trip to Alvalade's Conservatoria. However, it was just my luck that it had burnt down in a fire recently. Oscillating between hope and despair - have they lost my entry? can we create a new one? - we wondered down to the abandoned shop window to read a notice: the conservatoria had migrated, lock stock and smoking barrels (literally) to a different place. Luckily, it was only up the road, next to the Sonangol pumps by the national radio station.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;To our great displeasure, the new place was nothing like the ordered chaos of Kinaxixe. Here we had sheer, unabated, uncontained disorganised chaos. After watching some great examples of Angolan queueing (surely an oxymoron if I ever seen one), I managed to sneakily speak to a worker. She dutifully told me that archive searches were not one of their set tasks; I should know to which conservatoria I belong, and that's that. If I truly wanted to conduct a search, I could wait two weeks for the new IT system that was being installed.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Well, we couldn't wait two weeks - half of our visas!! - nor did I have any belief in time scales for software development - Angolan's or otherwise, worked on far too many of these critters to have any faith left - so we gave up and decided to go for breakfast. I badly needed my morning coffee to regain my strength. God had, of course, very different ideas. An hour walk revealed nothing that could vaguely resemble a cafe and Shahin boycotted all street vendors so, in addition to all our troubles, starvation now beckoned.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;We considered our options in a quiet shade under my baptism church. As if sensing our despair, just there and then our friend L decided to ring us. A lawyer! Surely a sign. She didn't know off the top of her head whether there were any other conservatorias in Alvalade, but she would check; in the mean time, we were to ring Portugal and try to rinse out more details. Shahin also thought we should consult the padre and see if we can get any additional info from him.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;As we queued up to see the padre, we met another couple that were in almost exactly the same situation as us: a Scottish girl was trying to marry an Angolan chap, R, but they were struggling in both Britain and Angola. The coincidence was so amazing it felt uncanny. We chatted for a bit and traded war stories, commiserating  each other. R told us he had had a lot of problems getting his birth certificate, and one of the most important things is knowing the location of one's entry in the registry. This was to be a vital detail.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;In the end, all our sources came together:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;The church archives did not know where I was registered, but they knew the exact location (book, page, etc.) of my entry in it; thanks to R, we appreciated the importance of this vital information.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;My uncle knew where we were registered, and L confirmed that there was only one conservatoria in Alvalade. We also found my cousin's B entry in the church archive, and it mentioned the conservatoria (but regrettably, not the location of his book in the archives!).&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;Great dectective work. Now all we need is to request the documents on Monday.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6823467383816415460?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6823467383816415460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6823467383816415460' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6823467383816415460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6823467383816415460'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/11/kizua-mwangola-part-2-lions-den.html' title='Kizua Mwangola: Part 2: The Lion&apos;s Den'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-3827525324459135324</id><published>2009-11-19T08:45:00.000-08:00</published><updated>2009-12-13T14:55:09.157-08:00</updated><title type='text'>Kizua Mwangola: Part 1: Dead on Arrival</title><content type='html'>&lt;div align="justify"&gt;Not so long ago I started a email newsletter with very restricted circulation: a palavra do dia (word of the day). Its purpose was to teach myself and a few friends and family some meagre words of kimbundu, one of the major Angolan languages. I regret to say it was a rather short lived and somewhat unsuccessful project, but I did pickup one or two words. One of them was Kizua, or "word". My really limited kimbundu has not progressed much further since then, as the title of these series of blog posts attests. What I'm trying to say in terrible pidgin kimbundu is "words from Angola". Perhaps one day a real kimbundu speaker will help me fix the title.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Another pet project of mine was A Notebook of a Return to My Native Land, chronicling my return to Angola. This one was slightly more successful, and a complete book was actually "published" in the end - if with a somewhat restricted circulation of one copy. At the time, many people protested about the long length of posts (all the ten of you), so this time I'll try to keep them short and (hopefully) frequent.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;* * *&lt;/strong&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;After a rather long trip, we arrived in the motherland safe and sound. As usual, Cousin R had made a sterling job of organising it all, a feat even more amazing considering she now dwells far away in the provinces and did everything by phone. Cousin Z picked us up and gave us a mini-tour of town.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Its strange but if anything Luanda hasn't changed that much: there are lots of new buildings - all of them sky-high - but the key things are as we remembered, if not worse. Terrible traffic, bad side-walks and expensive things. Luanda is incredibly even busier than any city in Vietnam, with the added messiness that only big African cities seem to have.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;* * *&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Our first mission after a good night rest was to obtain my cedula. We hoped the job was going to be easy as I already possess a shiny"certidao narrativa" (not quite a birth certificate, but almost. Don't ask.). No such luck, said the man at the Conservatoria (Registry Office). We need to figure out where my parents did the original registration and Lord knows where that was.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Mum gave us some tips. We're going to queue up from 07:00 onwards tomorrow morning in the vain hope that one of the places she suggested is the right one (Alvalade). Of course, cedulas are only requested on Mondays or Tuesdays and collected on Wednesdays and at best take eight days to be processed but hey, we'll try it on anyway. Our spirits are high. And we're that desperate to get out of Luanda and hit the real beaches down south.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-3827525324459135324?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/3827525324459135324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=3827525324459135324' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3827525324459135324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3827525324459135324'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/11/kizua-mwangola-part-1-dead-on-arrival.html' title='Kizua Mwangola: Part 1: Dead on Arrival'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-3825587183306328037</id><published>2009-10-03T06:41:00.000-07:00</published><updated>2009-10-03T06:46:29.764-07:00</updated><title type='text'>Gnarls Barkley: who's going to save my soul now?</title><content type='html'>http://www.vimeo.com/3263864&lt;br /&gt;&lt;br /&gt;I got some bad news this morning&lt;br /&gt;Which in turn made my day&lt;br /&gt;When this someone spoke I listened&lt;br /&gt;All of a sudden, has less and less to say&lt;br /&gt;Ohhhhhh how could this be?&lt;br /&gt;All this time, I've lived vicariously&lt;br /&gt;Who's gonna save my soul now?&lt;br /&gt;Who's gonna save my soul now?&lt;br /&gt;How will my story ever be tollllld now?&lt;br /&gt;How will my story be tollllld now?&lt;br /&gt;&lt;br /&gt;Made me feel like somebody&lt;br /&gt;Hmmm, like somebody else&lt;br /&gt;Although he was imitated often&lt;br /&gt;It felt like I was bein myself&lt;br /&gt;Is it a shame that someone else's song&lt;br /&gt;Was totally and completely dependant on&lt;br /&gt;Who's gonna save my soul now?&lt;br /&gt;Who's gonna save my soul now?&lt;br /&gt;I wonder if I'll live to grow old now&lt;br /&gt;Gettin high cause I feel so lowwwww down&lt;br /&gt;&lt;br /&gt;And maybe it's a little selfish&lt;br /&gt;All I have is the memory&lt;br /&gt;Yet I never stopped to wonder-ahhhhh&lt;br /&gt;Was it possible you were hurtin worse than me&lt;br /&gt;Still my hunger turns to greeeeed&lt;br /&gt;Cause what about what I neeeeeed?!&lt;br /&gt;And OHHHH~! Who's gonna save my soul now?&lt;br /&gt;Who's gonna save my soul now?&lt;br /&gt;Ohhhh I know I'm out of control now&lt;br /&gt;Oooh-oooh, tired enough to lay my own soul down&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-3825587183306328037?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/3825587183306328037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=3825587183306328037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3825587183306328037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3825587183306328037'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/10/np-whos-going-to-save-my-soul-now.html' title='Gnarls Barkley: who&apos;s going to save my soul now?'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7390361739487858768</id><published>2009-09-14T23:00:00.000-07:00</published><updated>2009-09-14T23:05:23.945-07:00</updated><title type='text'>holiday pics</title><content type='html'>Being slightly more clued up on these newfangled technologies, Shahin already has a facebook account and has discovered the joys of microblogging (twitting, for the youngsters amongst us). Me,  I'm stuck in time, still editing text files with emacs. Here are some of the pictures she has published:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/album.php?aid=147757&amp;amp;id=667878901&amp;amp;l=89c07e618c"&gt;Bangkok&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/album.php?aid=147758&amp;amp;id=667878901&amp;amp;l=20bf4220db"&gt;Hanoi&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/album.php?aid=147760&amp;amp;id=667878901&amp;amp;l=2d36449b47"&gt;Halong Bay and Cat Ba Island&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/album.php?aid=149076&amp;amp;id=667878901&amp;amp;l=68d9e38f54"&gt;Cat Bs Island and Halong Bay 2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Hope these links work for y'all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7390361739487858768?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7390361739487858768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7390361739487858768' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7390361739487858768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7390361739487858768'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/09/holiday-pics.html' title='holiday pics'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2579412498545268826</id><published>2009-08-12T04:22:00.000-07:00</published><updated>2009-08-12T04:32:33.428-07:00</updated><title type='text'>Afrobasket: Good start!</title><content type='html'>Well it seems we cleared everyone out of our path, including our main rivals &lt;a href="http://libya2009.fiba.com/pages/eng/fe/09/fafcm/news/p/eid/4047/nid/31583/sid/6599/article.html"&gt;Nigeria&lt;/a&gt;. However, the game was very tight, and if we do meet them again in the finals, the result may be very different...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://libya2009.fiba.com/images/web/Events/09/FAFCM/daybday/090811/ang-ngr/_400/ang_ngr_3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 533px;" src="http://libya2009.fiba.com/images/web/Events/09/FAFCM/daybday/090811/ang-ngr/_400/ang_ngr_3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Angola x Nigeria. (C) fiba.com&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;One negative note for the afrobasket though. As it was with Angola, its extremely difficult to know what is going on. There are no TV stations in the UK showing any games at all (or even the highlights!), the website provides scarce information (would it be so hard to have web-highlights - if webcasting whole games is too hard?) and to top it all, when you type "Afrobasket 2009", Google Ajax's cleverness converts it to "Eurobasket 2009". You gotta be a real fan, basically. I know Fiba in general is not that great, but when I look at &lt;a href="http://www.nba.com/"&gt;NBA's&lt;/a&gt; website I cannot help but wonder how hard it would be to provide all that content with Open Source and Free Software (drupal comes to mind).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2579412498545268826?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2579412498545268826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2579412498545268826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2579412498545268826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2579412498545268826'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/08/afrobasket-good-start.html' title='Afrobasket: Good start!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8291881087195509098</id><published>2009-06-28T13:54:00.000-07:00</published><updated>2009-06-28T14:59:11.836-07:00</updated><title type='text'>Manu Chao: Helno est mort</title><content type='html'>NP: Helno est mort&lt;br /&gt;&lt;br /&gt;Au clair de la lune mon ami Helno&lt;br /&gt;prete moi ta plume&lt;br /&gt;pour t'ecrire un mot&lt;br /&gt;ta chandelle est morte je n'ai plus de feu&lt;br /&gt;ouvre moi ta porte pour l'amour de dieu.&lt;br /&gt;&lt;br /&gt;Au clair de la lune mon ami Helno&lt;br /&gt;prete moi ta plume&lt;br /&gt;pour t'ecrire un mot.&lt;br /&gt;&lt;br /&gt;Helno est mort une fois encore il est sorti après minuit&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop il est partie au paradis&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;Au clair de la lune mon ami Helno&lt;br /&gt;prete moi ta plume&lt;br /&gt;pour t'ecrire un mot&lt;br /&gt;ta chandelle est morte je n'ai plus de feu&lt;br /&gt;ouvre moi ta porte pour l'amour de dieu.&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop dans les journaux&lt;br /&gt;ya sa photo&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop dans les bistros il a pécho&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;Au clair de la lune mon ami Helno&lt;br /&gt;prete moi ta plume&lt;br /&gt;pour t'ecrire un mot&lt;br /&gt;ta chandelle est morte je n'ai plus de feu&lt;br /&gt;ouvre moi ta porte pour l'amour de dieu.&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop dans les journaux&lt;br /&gt;ya sa photo&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop dans les bistros il a pécho&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;helno est mort une fois encore il est sortie après minuit&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;helno est mort une fois de trop il est partie au paradis&lt;br /&gt;helno est mort helno est mort 100.000 remords&lt;br /&gt;&lt;br /&gt;Don't wanna lose nobody don't wanna lose nobody&lt;br /&gt;don't wanna lose nobody...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8291881087195509098?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8291881087195509098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8291881087195509098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8291881087195509098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8291881087195509098'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/06/manu-chao-helno-est-mort.html' title='Manu Chao: Helno est mort'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-1748104533777703014</id><published>2009-06-22T12:36:00.001-07:00</published><updated>2009-06-22T12:55:52.996-07:00</updated><title type='text'>Using boost svn with cmake</title><content type='html'>This post was created in the interest of saving someone else's sanity. If for some absolutely insane reason you decide to use boost's trunk from your shinny new cmakefile - and thus have a need to negotiate your way through FindBoost - all you need to do is:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Make sure you created a symlink for the include directory. &lt;/span&gt;By default boost puts its includes under boost-X.YY (e.g. boost-1.39). Just ln -s boost-1_39/boost boost and away you go. Not sure how things work on Win32, but if you need to symlink remember: junction.exe is your friend.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Set BOOST_ROOT and only BOOST_ROOT.&lt;/span&gt; When things fail to work you may be lured into thinking that artifacts such as Boost_LIBRARY_DIRS or Boost_INCLUDE_DIRS or others of such ilk (BOOST_LIBRARY_DIRS, BOST_LIBRARYDIRS, etc.) may actually help you. How wrong you are. All you need is to get BOOST_ROOT right. To do so, simply point it to the top level directory where you installed boost. For instance, I've placed boost under ~/local. Your BOOST_ROOT is set correctly when ${BOOST_ROOT}/include/boost and ${BOOST_ROOT}/lib exist.&lt;/li&gt;&lt;/ul&gt;So the final work of art looks like so (pray notice the capitalization!!):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set(BOOST_ROOT /home/marco/local)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;find_package(Boost 1.36 REQUIRED COMPONENTS system thread serialization filesystem)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;include_directories(${INCLUDE_DIR} ${Boost_INCLUDE_DIRS})&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;link_directories(${Boost_LIBRARY_DIRS})&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;target_link_libraries(${YOUR_BINARY} ${Boost_LIBRARIES})&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;That&lt;/span&gt; simple. Of course, one must not forget to change this before giving this to anyone else - you should be checking the regular directories where boost gets installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-1748104533777703014?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/1748104533777703014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=1748104533777703014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1748104533777703014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1748104533777703014'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/06/using-boost-svn-with-cmake.html' title='Using boost svn with cmake'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6761512932784548545</id><published>2009-06-06T08:23:00.001-07:00</published><updated>2009-06-06T08:24:44.811-07:00</updated><title type='text'>Bratislava</title><content type='html'>Central square in Bratislava, Slovakia. A rather quiet city.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nEck2BGjqOg/SiqKFT3DX2I/AAAAAAAAAIQ/gIDyMSK2RXo/s1600-h/slovakia_bratislava.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_nEck2BGjqOg/SiqKFT3DX2I/AAAAAAAAAIQ/gIDyMSK2RXo/s320/slovakia_bratislava.jpg" alt="" id="BLOGGER_PHOTO_ID_5344235731663675234" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6761512932784548545?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6761512932784548545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6761512932784548545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6761512932784548545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6761512932784548545'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/06/bratislava.html' title='Bratislava'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nEck2BGjqOg/SiqKFT3DX2I/AAAAAAAAAIQ/gIDyMSK2RXo/s72-c/slovakia_bratislava.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-5611842885302762817</id><published>2009-06-02T05:02:00.000-07:00</published><updated>2009-06-02T23:13:28.281-07:00</updated><title type='text'>Santos FC beats Al-Ahly!</title><content type='html'>&lt;div style="text-align: justify;"&gt;A most &lt;a href="http://www.cafonline.com/competition/confederation-cup_2009/news/2802-sad-exit-for-jose-as-ahly-stunned-in-angola.html"&gt;unexpected result&lt;/a&gt;, particuarly after the trashing Santos had on the first leg (3-0). Somehow, the Santos FC boys managed to pick themselves up and show their skills to Angola's new national coach. Hopefully Manuel Jose was suitably impressed with the talents from Girabola, considering &lt;a href="http://www.opais.net/pt/opais/?det=3494&amp;amp;mid=290"&gt;the blunders&lt;/a&gt; he's already made in the few days ahead of the team...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_nEck2BGjqOg/SiUVlMJJ2mI/AAAAAAAAAII/dI5mmyjQpmU/s1600-h/santos_al_alhy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 267px;" src="http://1.bp.blogspot.com/_nEck2BGjqOg/SiUVlMJJ2mI/AAAAAAAAAII/dI5mmyjQpmU/s320/santos_al_alhy.jpg" alt="" id="BLOGGER_PHOTO_ID_5342700261603924578" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Santos FC - Al-Ahly. Source: CAF.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-5611842885302762817?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/5611842885302762817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=5611842885302762817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5611842885302762817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/5611842885302762817'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/06/santos-fc-beats-al-ahly.html' title='Santos FC beats Al-Ahly!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_nEck2BGjqOg/SiUVlMJJ2mI/AAAAAAAAAII/dI5mmyjQpmU/s72-c/santos_al_alhy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8412498968305472918</id><published>2009-05-26T12:41:00.000-07:00</published><updated>2009-05-26T23:17:11.200-07:00</updated><title type='text'>Recent Books</title><content type='html'>Some of the books I went through (or will go through), in no particular order:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/Flashman-Mountain-Light-Papers/dp/0006513042/ref=sr_1_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243366907&amp;amp;sr=8-9"&gt;Flashman and the Mountain of Light&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt; Like every other book of the Flashman series - of which I have now  read four - it's unbelievably un-PC, and incredibly funny. The cover says it best, really: "farcically outrageous and disgracefully entertaining". Flashman is probably one of my best finds, and this particular book is the best yet. I'm beginning to think that it narrates British colonization a lot more accurately than any real history book. Amongst all the fun and madness, it has some gems of prose. It also seems the author spent a lot of time doing historical analysis, since the detail is amazing. If, like me, you are from a minority group, you will undoubtedly find the book rather offensive; ignore it and keep going, if you can.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/Las-Venas-Abiertas-amRica-Latina/dp/9682319005/ref=sr_1_2?ie=UTF8&amp;amp;qid=1243369447&amp;amp;sr=1-2"&gt;Las Venas Abiertas de America Latina&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt; I had this on my list for a bit but forgot all about it. My interest was rekindled by Chavez, who decided to offer a copy of it to Obama. Cannot recommend this book enough, really. If you want to understand Latin America, and particularly the latest shifts to the left, this is a good starting point. Towering work. Read it in the original Spanish, but there is, of course, an &lt;a href="http://www.amazon.co.uk/Open-Veins-Latin-America-Centuries/dp/0853459916/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243369589&amp;amp;sr=1-1"&gt;English translation&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/High-Stakes-No-Prisoners-Internet/dp/1587990652/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243369770&amp;amp;sr=1-1"&gt;High Stakes, No Prisoners: A Winner's Tale of Greed and Glory in the Internet Wars&lt;/a&gt;: Mandatory read. This book was not at all what I expected - I was looking for a geeky read to lift my spirits. Instead its a gruesome account of the difficulties of startups in the silicon valley. Its really, really good. The language is not as polished as say Galleano's (how can you beat gems such as "People were in prison so that prices could be free"?); in fact, some parts are rather dry, such as the final chapters on market analysis. But this is still incredible stuff. Compelling reading. Should be mandatory for all computer science students (high-school and university).&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/exec/obidos/ASIN/0451529103/ref=ord_cart_shr?%5Fencoding=UTF8&amp;amp;m=A3P5ROKL5A1OLE"&gt;Child of the Dark: The Diary of Carolina Maria de Jesus&lt;/a&gt;: Via Galleano, bumped into this. Ordered the English version (which is quite ironic, since the original is in &lt;a href="http://www.sobresites.com/alexcastro/artigos/quartodedespejo.htm"&gt;Portuguese&lt;/a&gt;; totally forgot that &lt;a href="http://www.sdblogue.com/"&gt;Miguel&lt;/a&gt; had offered to buy me books in Portuguese, if required). Seems very promising.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/Empires-Oil-Corporate-Barbarian-Worlds/dp/1846680468/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243370299&amp;amp;sr=1-1"&gt;Empires of Oil: Corporate Oil in Barbarian Worlds&lt;/a&gt;: Couldn't quite finish this one. Although it had rave reviews, and started interestingly enough, it proved to be too dry a reading. It seems to waffle a lot without providing any real insight. I may attempt it again - got half-way through it this time - but not for a good while. Seems a bit pro-oil, but there's nothing wrong with that if the argument is well constructed.&lt;/li&gt;&lt;li&gt;&lt;a style="font-weight: bold;" href="http://www.amazon.co.uk/This-Not-Drill-Glorious-Oilfield/dp/1857885007/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243370597&amp;amp;sr=8-2"&gt;This is Not a Drill: Just Another Glorious Day in the Oilfield&lt;/a&gt;: Quite unlike the previous one, this is a compelling read. Always wanted to know what exactly oil workers get up to in the middle of nowhere, and this book explained it in great detail. Basically, the boys have a great laugh, while trying not to get killed and working their socks off. Fantastic humour - if somewhat dark.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.co.uk/Traders-Guns-Money-Unknowns-Derivatives/dp/0273704745/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243404999&amp;amp;sr=8-1"&gt;Traders, Guns and Money: Knowns and Unknowns in the Dazzling World of Derivatives&lt;/a&gt;: Absolute classic. Must read if you really want to understand the finantial markets.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8412498968305472918?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8412498968305472918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8412498968305472918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8412498968305472918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8412498968305472918'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/05/recent-books.html' title='Recent Books'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-3506925702919015866</id><published>2009-05-16T08:38:00.000-07:00</published><updated>2009-05-18T05:13:59.536-07:00</updated><title type='text'>Nerd Food: The Jaunty Jackalope</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-style: italic;"&gt;Winning isn't always finishing first. Sometimes winning is just finishing.&lt;br /&gt;-- Manuel Diotte &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;That Time of the Year&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So here we are again. Another six months have gone by, and we're all ready and eager to see what those Debian and Ubuntu boys and girls were up to. Like everybody else, I dutifully upgraded my Interpid boxes, very much as I have done for every release since Warty. This time though I decided to expand a bit more on my experiences - the main reason being that, for better or for worse, Linux on the desktop is now big business. You may not think so, considering we appear to still be at around 1% market share, and considering most people using computers are still ignorant of Linux and Free Software in general; but, in my personal opinion, we are now on the threshold, on the verge, of starting to build a commercial position.&lt;br /&gt;&lt;br /&gt;Thus, we can no longer afford to look at Ubuntu - or at any other Linuces who wish to break through into the desktop mainstream market - as we have until now. This review is not just a typical Linux review. I do not wish in anyway to upset all those people who work so hard to make GNU, Linux, Debian and Ubuntu what they are now - people for which I have the utmost respect. However, I shall endeavour to make a frank accessment of the strong points and weak points of Ubuntu as it stands at 9.04.&lt;br /&gt;&lt;br /&gt;If your main concerns are with software freedom, the remainder of this article will not be useful to you at all. I have taken a stance of the "ignorant consumer", the sort of chap who would buy a product based on price and quality; a person who does not really care how product came to be, but focuses only on features and usability. I think its really important to look at the world from this perspective, because to some extent, we have taken all the easy pickings. A lot of people who care deeply about their freedoms and buy products thoughtfully are probably either using GNU/Linux (or some other free operative system) or have made a conscious decision not to use it. It is the nature of this audience to investigate their choices. It is not the nature of the majority of the market though, and to capture them we must play the game on their terms - not on ours.&lt;br /&gt;&lt;br /&gt;In addition, one must bear in mind that GNU/Linux is challenging a strong incumbent, and a very strong second place; being as good as Windows or MacOS won't win any prizes, because they both possess huge advantges: large installed base, marketing, familiarity, large amounts of money. From whatever angle you look, these are formidable oponents. To beat them at their own game, one must be pretty special indeed.&lt;br /&gt;&lt;br /&gt;Without further ado, my views on Jaunty.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Booting the Live CD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the many advantages Apple and Microsoft have over Ubuntu is installation. Its not that their installation is better - its just that the vast majority of their users have never installed an operative system in their lives. Consumers buy boxes with the operative system pre-installed, giving them the false impression that installation is trivial. A lot of people see a new operative system only when buying a new machine, and, given the choice, would probably revert back to the previous version.&lt;br /&gt;&lt;br /&gt;This is in stark contrast with Ubuntu. SWAGging, I'd say the vast majority of Ubuntu installations are/were done by either the end user or its local computer nerd. Dell notwithstanding, until  a large number of manufacturers offer Ubuntu pre-installed, installation will always be a key battlefield, and a really though battle to fight. After all, its very difficult to compete against an idealized installation process which is just assumed to be easy.&lt;br /&gt;&lt;br /&gt;Overall, I think Ubuntu does a good job with installation - although there are a few niggles. For instance, first impressions are extremely important, and unfortunately, the language menu does not quite give the best first impression. It takes a lot of screen real estate and uses an approach that is just not scalable (what will we do when we have more languages than fit the screen?):&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/ShADp9XuwcI/AAAAAAAAAHg/mifgcKpXbRw/s1600-h/softpedia_language_menu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_nEck2BGjqOg/ShADp9XuwcI/AAAAAAAAAHg/mifgcKpXbRw/s320/softpedia_language_menu.jpg" alt="" id="BLOGGER_PHOTO_ID_5336769577817653698" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Language Menu. Source: &lt;a href="http://news.softpedia.com/news/Installing-Ubuntu-9-04-110794.shtml"&gt;Softpedia&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Its understandable that such an internationalised product as Ubuntu wouldn't want to force  non-English speakers to understand just what "F2 Language" means; but the approach taken just doesn't look professional. A lot of thought should have been given to the language list, making it scalable and easy to navigate.&lt;br /&gt;&lt;br /&gt;The boot menu has good and bad points. On the plus side, "Try Ubuntu without any changes to your computer" is a good idea, as many a newbie wouldn't understand the concept of a live CD and will think that choosing "Install Ubuntu" will be a non-reversible operation, or one which won't take you to a regular desktop. However, all other options should really be under a sub-menu - or perhaps accessible via F6 Other Options or another such shortcut - because they may needlessly alarm users (why do I need to test memory? is this going to corrupt it? Is my disc defective? what does that mean?)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/ShAH3pP-Z3I/AAAAAAAAAHo/zO65F0SwLa4/s1600-h/softpedia_boot_menu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/ShAH3pP-Z3I/AAAAAAAAAHo/zO65F0SwLa4/s320/softpedia_boot_menu.jpg" alt="" id="BLOGGER_PHOTO_ID_5336774210981095282" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Language Menu. Source: &lt;a href="http://news.softpedia.com/news/Installing-Ubuntu-9-04-110794.shtml"&gt;Softpedia&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;If one were to think in terms of flow, the vast majority of users will go through the following two use cases:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Choose language, try Ubuntu&lt;/li&gt;&lt;li&gt;Choose language, install Ubuntu.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Anyone trying anything else is an advanced user who knows what they're doing. As such, I'd say the boot process should start with a full screen combo-box which allows one to scroll up and down to choose a language; once the language is chosen, the second menu has two options: "Install Ubuntu" and "Try Ubuntu without any changes to your computer". At the bottom, the shortcuts should be:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;F1 Help&lt;/li&gt;&lt;li&gt;F2 Language&lt;/li&gt;&lt;li&gt;F3 Accessibility (with, if at all possible, a accessibility icon)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;F4 Advanced&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;All these options are perfectly meaningful to any basic user; anything which requires domain knowledge is hidden in "Advanced".&lt;br /&gt;&lt;br /&gt;At anu rate, once Install Ubuntu is chosen, the boot process is elegant and blazing fast - a great improvement over Intrepid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Overall, the installation process is very clean, with as few steps as possible. In fact, I'd go as far as saying that Ubuntu installation is probably second to none now. I wasn't very keen on live CDs when they first came out - couldn't quite see the point - but I now understand the error of my ways. Having the ability of starting your PC with a full blown version of the operative system you're about to install is fantastic. You can quickly assess which bits of hardware are going to be more problematic, as well as giving Ubuntu a good run. For the average consumer this is great, a sort of taste before you buy, if you like. The only change I'd perhaps make to the live disc - for systems with plenty of RAM (say 2 Gb or more) - is to create a RAM disc with all the apps, to avoid reading so much from the (slow) CD-Rom.&lt;br /&gt;&lt;br /&gt;With regards to the actual installation steps, there are two points which may warrant a bit of attention.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Partitioning&lt;/span&gt; is clearly the scariest aspect of the installation process, so its important to be clear and reassuring to users. It would perhaps be a good idea to make the partitioning options slightly clearer, in particular with regards to resizing an existing Windows partition. It would also be a good idea to ensure the text below "Use the entire hard disc" is clearly disabled, as just the words "This will delete Windows XP..." are enough to dissuade many a newbie.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/ShAOnALJMWI/AAAAAAAAAHw/HTPoqwQy6RU/s1600-h/softpedia_step_4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 243px;" src="http://4.bp.blogspot.com/_nEck2BGjqOg/ShAOnALJMWI/AAAAAAAAAHw/HTPoqwQy6RU/s320/softpedia_step_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5336781621658464610" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Partitioning. Source: &lt;a href="http://news.softpedia.com/news/Installing-Ubuntu-9-04-110794.shtml"&gt;Softpedia&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Users and passwords&lt;/span&gt; are also rather important. It is common for a single PC to be shared by two or more people, so multi-user support is very important. It is also very common for users not to want to type a password every time they log in. These use cases are not very well served by this dialog:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/ShATu_wKTCI/AAAAAAAAAH4/_spLSuMUd5M/s1600-h/softpedia_step_5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://4.bp.blogspot.com/_nEck2BGjqOg/ShATu_wKTCI/AAAAAAAAAH4/_spLSuMUd5M/s320/softpedia_step_5.jpg" alt="" id="BLOGGER_PHOTO_ID_5336787256542383138" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Users and passwords. Source: &lt;a href="http://news.softpedia.com/news/Installing-Ubuntu-9-04-110794.shtml"&gt;Softpedia&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ideally all the user wants is one of two scenarios:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Setup one or more users and, for each user, decide whether to use a password or not.&lt;/li&gt;&lt;li&gt;For a single user box, probably allow automatically login.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Multi-user polish will be addressed further on in this article.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Loging in&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The new login screen may be perhaps a bit too dark for users with accessibility needs, but overall its a triumph of parsimony. Its literally impossible to get confused using it. The only slight snag is the missing user list. Most people will probably prefer not to type a password, so it makes sense not to type a username either. The security conscious will no doubt complain, scream and shout - but from the perspective of the regular user, it makes complete sense (it's my house, not a public computer!).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_nEck2BGjqOg/ShAVScPizqI/AAAAAAAAAIA/GQBjM5Jauv8/s1600-h/softpedia_login.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_nEck2BGjqOg/ShAVScPizqI/AAAAAAAAAIA/GQBjM5Jauv8/s320/softpedia_login.jpg" alt="" id="BLOGGER_PHOTO_ID_5336788964997254818" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Login Screen. Source: &lt;a href="http://news.softpedia.com/news/Installing-Ubuntu-9-04-110794.shtml"&gt;Softpedia&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Proprietary Question&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;One of the greatest problems with Ubuntu (and most linuces) is the hidden steps of "additional setup". These  can be extremely costly. Whilst there are enumerable articles, detailing exhaustively what needs to be done, and whilst most guides can be followed blindly by even the newbiest of all newbies, the very existence of the "additional setup" is a huge barrier of entry to many users.  The additional setup is exclusively related to installing and configuring proprietary applications and drivers. For me these are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;NVidia/ATI drivers &lt;/li&gt;&lt;li&gt;MP3 support&lt;/li&gt;&lt;li&gt;Getting (encrypted) DVDs to play&lt;/li&gt;&lt;li&gt;Wireless drivers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Flash&lt;/li&gt;&lt;li&gt;Adobe acrobat&lt;/li&gt;&lt;li&gt;Skype&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;For a very large number of users out there, a PC is not usable unless all these have been successfully installed and configured. The additional setup process has been trimmed to its absolute minimum, methinks, particularly if one compares it to how things used to be 5 or 10 years ago. It is, in fact, trivial in most cases. But this is the problem: when we look at where we are, we inevitably see things in terms of a natural evolution. A Windows or MacOS user will not see things that way; it will become instantly apparent to him or her that a lot of things are not setup on Ubuntu out of the box, and setting them up is non-trivial (even if all we're talking about is following a very simple and detailed procedure) because this is just not the way they are used to work.&lt;br /&gt;&lt;br /&gt;In my mind, just like we have &lt;a href="http://www.freesoftwaremagazine.com/columns/gnewsense_the_free_ubuntu"&gt;gNewSense&lt;/a&gt; for the purists, we also need a "compromised" Ubuntu, _even_ if it requires users to pay for it to ensure all licences are in working order. After all, time is money, and I'd much rather pay Canonical 10-30 EUR twice a year for a "compromised" version with all the proprietary stuff  installed, rather than having to waste time doing it. The "compromised" version should also be used in any pre-installed PCs.&lt;br /&gt;&lt;br /&gt;Alas, this is not how things are at the moment. To make matters worse, my "additional setup" has been very far from trouble-free. These are the issues I've faced:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wireless&lt;/span&gt; (WPA) is utterly broken for my laptop. Try as I might, I just can't get my laptop to connect, even though it used to work well with Intrepid. Some people reported this issue in Kubuntu, but I'm seeing it with regular Ubuntu. A few of the proposed workarounds don't seem to work for me either, such as typing the password in hex. Its a rather annoying regression, and until it gets fixed, I've got a big fat Ethernet wire in my living room.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Recommended NVidia&lt;/span&gt; drivers (v180) are broken for my card. This is &lt;a href="https://bugs.launchpad.net/ubuntu/+bug/366222"&gt;#366222&lt;/a&gt;. For me there was a very simple workaround, which was to downgrade the drivers back to v173. No problems since then. Its an annoying bug though.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Epiphany&lt;/span&gt; still crashes frequently after closing tabs when I'm using flash heavily. This is not a regression; I've had this problem for a long time. Its similar to &lt;a href="https://bugs.launchpad.net/ubuntu/+source/flashplugin-nonfree/+bug/196588"&gt;#196588&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sound in Skype&lt;/span&gt; is not working. This is a regression prior to Intrepid - in fact, since PulseAudio. Its getting really close to working though; now the problem seems to be that Skype somehow lowers the volume of the microphone on startup (I can see this from the PulseAudio volume control). I followed many a tutorial (including &lt;a href="http://ossnotebook.blogspot.com/2009/04/ubuntu-jaunty-904-skype-sounds-problems.html"&gt;this&lt;/a&gt; one, with amazing screenshots of volume control configuration), to no avail.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sound in RealAudio&lt;/span&gt; is not working. Same as for Skype really.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Lets make a few things clear. Setting things up and chasing bug tickets is not something that would put me off Ubuntu and GNU/Linux the least - after all, I've been using GNU/Linux for over 10 years, and I value  FOSS highly. Also, it is important to understand that none of these problems have anything at all to do with FOSS - these are exactly the issues people have been warning us about with regards to binary drivers and closed software. After all, PulseAudio works incredibly well for all my other applications - its the closed source ones that are and have always been the problem (in fact, the only real FOSS problem I have with Jaunty is &lt;a href="https://bugs.launchpad.net/ubuntu/+source/pidgin/+bug/346840"&gt;#366083&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;However, this is not an excuse for a commercial company looking to increase their market share at the expense of two ferociously competitive companies such as Apple and Microsoft. If I was Ubuntu, Novell or RedHat, I would have had personal meetings with all key companies providing commercial software (Flash and Skype are certainly key applications in the desktop space, even if RealAudio is not) and would have made available engineers to work with them to sort out the PulseAudio mess once and for all. Pulse is the future and its an increadible piece of software; Its just that the commercial companies seem unable to keep up. The same applies to NVidia/ATI.&lt;br /&gt;&lt;br /&gt;Wireless is slightly more complicated, and its a symptom of a more difficult problem. The truth is GNU/Linux and Windows work in extremely complex ecosystems, with mind-bogglingly complex hardware combinations. Many things just cannot be known until releases hit the wild and people complain. Microsoft attenuates this problem by massively regression testing the most common hardware combinations; as far as I am aware, no Linux vendor does something similar. In a way, it shouldn't be necessary; after all, the software is provided to all at all points of development, so in theory regressions should be picked up quickly. Release soon, release often right? In practice, it doesn't quite work this way.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;potential&lt;/span&gt; number of testers is huge - just have a look at the number of people that downloaded Jaunty on the last betas and since it has gone gold - but a very large percentage of users will not download until close to the release date. This means that the bugs reported during the development process are not representative of those that will be found post going gold; and people reporting bugs after the official release will be rather more upset with problems than those doing the alpha/beta testing. If there was some traceability, one could "register" all the different hardware combinations out there (say those using Jaunty over the next 6 months), and then check to see how many of those were tried during the development phase. But there is no such data, so one is driving blind. Metrics here are fundamental, and knowing what was tested and when is vital. I'm sure many people would contribute (after all, a lot of the testing can be done by booting a live CD) if only they understood where they fit in the big scheme of things.&lt;br /&gt;&lt;br /&gt;All these problems are clearly distribution issues, and can only be fixed if distributors make an incredible effort. In order to have any semblance of a chance at attacking the desktop mass market, they must be addressed thoroughly and convincingly, or else we risk the ire of many a user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Multi-User Deficiencies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;UNIX is the multi-user operative system par-excellence, and GNU/Linux carries on that tradition. However, there is a need to update the multi-user view of the world to today's reality. The challenge these days is not so much isolating users so that they cannot damage eachother or the system, but to create ways in which a machine can be shared sensibly. The issues I constantly keep on bumping into are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Music. &lt;/span&gt;I spend a lot of time creating groups, shares, permissioning, etc. just to ensure all users of the main PC have got access to a central music collection in RhythmBox. The setup is now more or less stable, but its not conceivable that a newbie would stumble on it after half-hour of googling (I'll write it up one day). This is an incredibly common use case: to have a shared music collection as well as a private music collection. The second problem is to access your music collection from another device, such as a laptop. I've had no luck in setting up DAAP from RhythmBox.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Photos.&lt;/span&gt; I love F-Spot, its great. But I just cannot set it up in a multi-user environment - again with a set of private photos, as well as a set of shared photos that all users in the PC have got access to. As with DAAP, it would be nice to be able to browse the photo collection from a different device too.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Printers. &lt;/span&gt;Setting up a local printer in Ubuntu is amazingly trivial. However, sharing that printer over the network is not trivial at all. It should really be a matter of right-clicking on a printer and choosing "Share". and, funnily enough, there is just such an option in "Printer Configuration". Problem is, my printer remained invisible to my laptop even after sharing. Making it visible required a large amount of  faffing with CUPS config files and the CUPS web-based config.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Shutdown&lt;/span&gt; with multiple users logged in requires entering a password. This won't go down well with the average user; a big notice would have sufficed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;All these complaints are sympthoms of a larger problem, which is a lack of use case based usability analysis. This should probably be done at the Gnome level, as it is not a distribution issue as such. There is a lot of focus on Gnome 3.0 these days, but it seems to me that the job of Gnome 2.0 is not yet done; the architectural work is excellent, but the polish wasn't quite finished.&lt;br /&gt;&lt;br /&gt;The final thing with regards to multi-users, is user switching. It seems this will be comprehensively sorted out with &lt;a href="https://wiki.ubuntu.com/specs/KernelKarmicKMS"&gt;KMS&lt;/a&gt;, at least technology-wise, but it will be interesting to see if the user switching process is made much smoother (no flickering; allowing switching with no password; allowing switching with music still playing from previous user; etc.).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Grumpy Old Man&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;By now you probably have made up your mind and  judged me as a typical grumpy old man, lost to FOSS and soon to migrate to Windows 7 or MacOS. In fact, its quite the contrary: I'm a very satisfied Ubuntu user, and I think the future will belong, undoubtedly, to Free Software.&lt;br /&gt;&lt;br /&gt;There are many, many good things to say about Jaunty, and in a way, the criticisms laid out above demonstrate just how far we have come. After all, Jaunty did do a sterling job of detecting all my hardware,  other than the wireless / NVidia issues, and NVidia is working just fine with v173.&lt;br /&gt;&lt;br /&gt;The best thing about Jaunty for me is performance. Its nothing short of amazing. I'm using EXT4 for all partitions other than home, but I'm not sure if the filesystem is enough to explain the snapiness of this baby. For instance, with two users logged in, quite a lot of applications open, playing music, 3D effects, etc and my CPU usage rarely goes above 10% and my memory usage has oscillated between 400 Mb and 1 Gb! Its amazing. All apps have slimmed down so much as to be unrecognisable. A two day old loaded Epiphany is still below 100 Mb, a sight I don't recall ever seeing. Booting and shutting down are now lightening fast. And there are so many unsung heroes: Evolution, Evince, Liferea, Nautilus - so many applications that just work, and do what they're told.  I most certaintly recommend upgrading to all Interpid users, and I'll certainly will be waiting unpatiently for karmic and all the KMS goodness (NVidia/ATI permitting).&lt;br /&gt;&lt;br /&gt;This is to say that Ubuntu is certainly working very hard, and releasing a product with a lot of  quality. But as I said on my opening words, good is not good enough; one has to be much better than Apple and Microsoft if one is to challenge them.&lt;br /&gt;&lt;br /&gt;For me, the big question is: can we put the fantastic engine of FOSS to good use in the hard problems of testing and usability? This is the key to unlock the mass market consumer desktop market.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-3506925702919015866?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/3506925702919015866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=3506925702919015866' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3506925702919015866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3506925702919015866'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/05/nerd-food-jaunty-jackalope.html' title='Nerd Food: The Jaunty Jackalope'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nEck2BGjqOg/ShADp9XuwcI/AAAAAAAAAHg/mifgcKpXbRw/s72-c/softpedia_language_menu.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6020870024879964910</id><published>2009-02-02T00:20:00.000-08:00</published><updated>2009-02-02T06:51:16.818-08:00</updated><title type='text'>Before and After</title><content type='html'>One month ago, in Bilene (Mocambique):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_nEck2BGjqOg/SYatN_wc_TI/AAAAAAAAAHQ/K9LnrdiBYts/s1600-h/bilene.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_nEck2BGjqOg/SYatN_wc_TI/AAAAAAAAAHQ/K9LnrdiBYts/s320/bilene.jpg" alt="" id="BLOGGER_PHOTO_ID_5298112467612532018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now, in England:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_nEck2BGjqOg/SYatV6bHTuI/AAAAAAAAAHY/BOSMW0CBguM/s1600-h/snow.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_nEck2BGjqOg/SYatV6bHTuI/AAAAAAAAAHY/BOSMW0CBguM/s320/snow.jpg" alt="" id="BLOGGER_PHOTO_ID_5298112603619806946" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6020870024879964910?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6020870024879964910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6020870024879964910' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6020870024879964910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6020870024879964910'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2009/02/before-and-after.html' title='Before and After'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_nEck2BGjqOg/SYatN_wc_TI/AAAAAAAAAHQ/K9LnrdiBYts/s72-c/bilene.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7217448959393707509</id><published>2008-08-05T15:29:00.000-07:00</published><updated>2008-08-05T15:37:15.072-07:00</updated><title type='text'>Here we go again...</title><content type='html'>Four days to go for the olympic games! and our basketball boys have got their job cut out for them in group B:&lt;br /&gt;&lt;br /&gt;Angola&lt;br /&gt;China&lt;br /&gt;Spain&lt;br /&gt;USA&lt;br /&gt;Germany&lt;br /&gt;Greece&lt;br /&gt;&lt;br /&gt;In fact, all the teams in the Olympic games seem to be quite strong, with the exception of Iran I guess, whom I never really saw playing.&lt;br /&gt;&lt;br /&gt;The place to be is fiba.com:&lt;br /&gt;&lt;br /&gt;http://www.fiba.com/pages/eng/fe/08/olym/men/olympic_basketball_men.asp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7217448959393707509?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7217448959393707509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7217448959393707509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7217448959393707509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7217448959393707509'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2008/08/here-we-go-again.html' title='Here we go again...'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-510828042874520182</id><published>2008-06-19T09:43:00.000-07:00</published><updated>2008-07-01T07:17:07.709-07:00</updated><title type='text'>Nerd Food: On the UbuntuBox</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;The Regular User&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As with many other geeks, I find myself in the unofficial position of "computer guy" for family and friends (F&amp;amp;F). This entails sorting out broken computers, providing advice on new purchases for a variety of devices and software packages, installing said devices and packages, doing security updates and giving security advice, providing mini-tutorials on applications, teaching basic programming - the list goes on and on. The funny thing is, much like all other nerds, I may moan about my duties but secretly I enjoy performing them. Sometimes I get to setup people with cheap Ubuntu boxen, which they may complain about a little in the beginning but eventually use in extremely productive ways; and even on windows setups, I get to understand what drives people to Microsoft and what its weak and strong points are. Its a very instructive job.&lt;br /&gt;&lt;br /&gt;Things got even more interesting since I bought my eee PC, a device that is selling like fire in the polar winter. The eee PC helped me understand a bit better how most people think. All along we, the Linux community, have focused on providing a user experience that is very similar to Windows: you may not have a Start Menu but you have the Ubuntu logo; toolbars and menus are very similar and so on. Even the newest eye-candy is similar to Mac and Vista's way of doing things (although there's always the chicken-and-egg problem). The end result is interesting: developers and regular Linux users are now convinced that no one should have any difficulties at all moving from Windows to KDE or Gnome; on the other hand, as soon as you sit a user down on a Linux box, he or she immediately tells you that something is not right. Objectively, the average user will probably not be able to point out what's wrong, if anything at all, other than "this is not Windows, can we not have Windows please".&lt;br /&gt;&lt;br /&gt;The fantastic thing about the eee PC was that, of all people I showed it to, not a single one said: bah, this is not Windows. Most of them got on with the user interface immediately, and found it really intuitive. In all my years of advocating Linux I never before seen a reaction like this. I did absolutely no advocating whatsoever, no mention about freedom or the superiority of free software. Just letting them play with it was enough. As an example, my girlfriend has been using Linux for over 5 years, and I get the periodic complains of "why can't we just use windows" whenever I have some difficulties installing a device, or I break the world on a dist-upgrade. But within minutes of playing with the eee, her reaction was: "I want one of these!!".&lt;br /&gt;&lt;br /&gt;The reactions I've seen towards the eee PC are almost the opposite of the few Vista users I've spoken to. Sure, Vista looks nice, but have you tried installing a one-click wireless router? That's when F&amp;amp;F call me out, when it all goes wrong with the "one-click" cheap product they bought. But thing is, I can't say much in Ubuntu's defense either. For example, I spent several days installing a Huawei e220 modem to provide 3G Internet access to my nephews, and let me just tell you, trivial would not have been a word one could apply to any part of the process. Vodaphone's new clever GUI may be good for Vodaphone users but I never got the damn thing to cooperate. True, the whole exercise wasn't taxing for a nerd - hey, its fun to look at AT commands now and then - but there is no way, just noooo waaaay a regular user would have gone through the pain, even with the brilliant Ubuntu forums to hand.&lt;br /&gt;&lt;br /&gt;Now, before we go any further, I can already hear the complaints: "so you've chatted to what, twenty people, and now you think you understand the market?". Well, that much is true, I cannot claim any statistical accuracy to my diagnostics. These are my opinions; the entire article is based on empiricism and small samples. However, if my line argumentation is done correctly and rightly interprets the success of the eee, then there must be some truth to my views because I've tried to align them with the eee. The market has given a verdict on this gadget, loudly and unequivocally.&lt;br /&gt;&lt;br /&gt;The eee PC is also a brilliant illustration of the huge divide between regular users and the developers who are tasked with providing software for them. At a moment in time where the Gnome community is yet again rethinking the future of Gnome, not a single regular user would find this debate interesting. This should send all the alarm bells ringing, but unfortunately that doesn't seem to be the case. The truth is, regular users don't want flashy 3D desktops, although they can eventually cope with them; they don't need spinning cubes although they may start using them once they understand it. What they really want is simplicity. They have a simple set of tasks to perform, and they want to do so cheaply and reliably, and they truly do not understand why everything has to be so complicated and why do computers have to change so much so often.&lt;br /&gt;&lt;br /&gt;So what made the eee popular? In my opinion, there are two key points:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Its cheap. No one would even have a look at it if it was 400 GBP&lt;/li&gt;&lt;li&gt;Its easy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;These are the key selling points to a regular user. To illustrate the second point, when I said to my girlfriend I was thinking about installing Ubuntu Hardy on the eee, she replied in dismay: "Why would you do that??".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Regular User Use Cases&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The key thing to notice about the eee is that most users don't even know its not running Windows. Its just an appliance, a bit like a PlayStation, and thus there is no need to enquire about it's operative system. Like an appliance, it is also expected to be switched on and just work - the fast boot reinforces this idea. The interface provided is also designed for the tasks common to the vast majority of regular computer users, and allows them to find things fast. But, looking at the wider problem, what do our regular users do with their computers? I compiled a list of all use cases I found in my user base:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Internet: email, browsing, playing on-line games and youtube;&lt;/li&gt;&lt;li&gt;Listen to music, sync with their music player;&lt;/li&gt;&lt;li&gt;Watch local video content;&lt;/li&gt;&lt;li&gt;Talk with their friends: IM, VOIP&lt;/li&gt;&lt;li&gt;Play (basic) games: on all cases, real gaming is done on the PlayStation;&lt;/li&gt;&lt;li&gt;Work: word-processor by far, some spreadsheet use but "it's quite hard";&lt;/li&gt;&lt;li&gt;Burning and ripping;&lt;/li&gt;&lt;li&gt;Downloading: torrents, etc. Not very popular because "its complicated";&lt;/li&gt;&lt;li&gt;Digital photo management: storage, some very basic manipulation (make it smaller for emailing);&lt;/li&gt;&lt;li&gt;Printing: mainly for school/University; pictures in very few cases.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In addition to these, some additional requirements crop up:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows users all have proprietary firewalls and virus scanners;&lt;/li&gt;&lt;li&gt;All machines are multi-user, and data must be kept private - especially with the youngsters;&lt;/li&gt;&lt;li&gt;Machines must withstand battering: switched off at any point, banged about, dropped, etc;&lt;/li&gt;&lt;li&gt;Internet connectivity is vital, ADSL, cable and 3G are used. Computers are useless without the Internet;&lt;/li&gt;&lt;li&gt;Wireless around the house is vital. External wireless is nice, but not frequently used because "it's too complicated";&lt;/li&gt;&lt;li&gt;Costs must be kept exceedingly low as IT budget is normally very low;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;That's it. You'd be amazed with the percentage of the market one covers with only these use cases; not just doing them, but doing them well, like a PlayStation plays games.&lt;br /&gt;&lt;br /&gt;And what are the biggest complaints about computers?&lt;br /&gt;&lt;ul&gt;&lt;li&gt; They're really hard. Installing hardware and software is a nightmare, and they'd be stuffed without the local nerd;&lt;/li&gt;&lt;li&gt;They break easily. One of my Vista users is still in disbelief that installing wireless drivers could cause the DVD drive to stop working;&lt;/li&gt;&lt;li&gt;They're expensive. Sure you can get a cheap'ish box but then everything else is expensive (software, peripherals, etc);&lt;/li&gt;&lt;li&gt;They change far too frequently. Most users just about got around XPs user interface just to see it all change again;&lt;/li&gt;&lt;li&gt;They're insecure. They don't know how or why but that's what they've heard. That and the constant popups that look like viruses.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;On one hand, the regular user is quite advanced, making multi-user and networking a central part of its computer experience. On the other hand, he/she is very naive: the vast majority of computing power goes under-utilised - the OS gobbling most of the resources for no good reason - and the majority of software expenses easily avoidable by using freely available applications. Regular users haven't got nowhere near using Media Centres, "clever" media management software, or even connecting their PCs to the TVs. All these things they consider "advanced" and yet nerds and more savvy users have been doing it for years. One cannot help but feel that there is a massive market out there for the taking - a market that Vista cannot aim to grab because it's diametrically opposed to its needs - and yet, no one else seems to find the path to its door.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UbuntuBox: The Hardware Platform&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The rest of this article is an Ubuntero Gedankenexperiment: if I was a manufacturer, what sort of box would I like my F&amp;amp;F to have? What would make my life and their life easier? The short answer to that question is a PlayStation 2 like box but with PC-like functionality. The long answer is, well, long.&lt;br /&gt;&lt;br /&gt;I'm not going to bother with engineering reality here - I'm sure some requirements will be so conflicting they cannot possibly be implemented. However, I've got zero experience in hardware manufacturing, weights, cooling, large scale deployment and so on - so much so that I'm not even going to bother pretending; any assumptions I'd make would be wrong anyway. So, to make matters easy, I'll just ask for it all - impossible or not - and wait for the reality check to come in.&lt;br /&gt;&lt;br /&gt;The first, very different thing about our box is that it's not a computer. Well, inside it is a regular PC of course, but it doesn't look like one. It is designed to look exactly like a DVD player, and to fit your living room. A bog-standard black-box with a basic LED display would do. Inside, it has:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Multiple cores: four would be ideal, but at least two. They don't have to be particularly fast (1.x Ghz would do, but I guess 2 Ghz would be easier to find);&lt;/li&gt;&lt;li&gt;4 GB of RAM: can be the slowest around, but we need at least 4; the more the merrier, of course;&lt;/li&gt;&lt;li&gt;250 to 500 GB hard drive: the more the merrier. Doesn't have to be fast, we just need the space;&lt;/li&gt;&lt;li&gt;Average video card: key things are RGB/HDMI and TV out; resolution decent enough to play most games (not the latest);&lt;/li&gt;&lt;li&gt;Loads of USB ports;&lt;/li&gt;&lt;li&gt;RW DVD drive;&lt;/li&gt;&lt;li&gt;Analog TV + DVB card (for FreeView in England);&lt;/li&gt;&lt;li&gt;Wired and Wireless Ethernet;&lt;/li&gt;&lt;li&gt;Sound card with 5.1 surround sound: doesn't have to be a super card, just an entry level one would do;&lt;/li&gt;&lt;li&gt;SD card, compact flash readers;&lt;/li&gt;&lt;li&gt;Ability to control the box with a remote control;&lt;/li&gt;&lt;/ul&gt;And now the key limiting factor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The overall cost of the box must not exceed 200 GBP. This may require some tweaking, e.g. if raising it to 299 means we can put all features in, it may be worthwhile.&lt;/li&gt;&lt;/ul&gt;Notice that all the hardware will be standard on all boxes of the same generation. This is all commodity hardware - certainly nothing proprietary - but without the heterogeneity that is associated with it. Note that control is a key feature - the limiting of user and vendor freedom to swap things at will. We'll return to the topic later on, as I'm sure it will prove controversial.&lt;br /&gt;&lt;br /&gt;Now, how does the box behave for the regular use case? Well, you buy it, plug it in, set all the cables up and start it up. You will see only two things on boot: the logo (say the Ubuntu logo) fading in and out, and the console password. That's it. No BIOS, no flashing X-Server, nothing else. Within a few seconds you'll be prompted for the console password and given an option of not needing a password in the future (Note: console is _not_ root). Lets leave the desktop at that for the moment as we'll cover it properly in the next section.&lt;br /&gt;&lt;br /&gt;What about Internet access, you ask? Well, you will need to buy one of the available modems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;3G;&lt;/li&gt;&lt;li&gt;ADSL;&lt;/li&gt;&lt;li&gt;Cable.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Each of these modems are made available at market prices (i.e. as cheap as possible); however, they will have been officially and exhaustively tested and stamped with a "UbuntuBox compliant vX" or some such, where vX is the box's generation. To be compliant means that your hardware has been throughly tested and is known to work with the hardware and software in a given generation. When you plug any of these devices after console login, a simple wizard will appear asking you to choose a provider. Each provider will have been also part of a certification program before inclusion.&lt;br /&gt;&lt;br /&gt;The other networking device is an Ethernet Switch. This is only required if your modem does not come with switching abilities (maybe in the 3G case). Network Manager already does a pretty good job of this, so all you'll need to do is setup the network on your console session (SSID, etc). You can use a USB keyboard for this or just endure typing from the remote control.&lt;br /&gt;&lt;br /&gt;Note that the certification requirement is extended to all hardware used with the box. In other words, there is a pretty draconian control on the hardware platform. Users are, of course, free to do as they wish with the device they bought, but if they go down the uncertified route, all support contracts are rendered void (more on this later). The truth is, its impossible to provide cost-effective support to all possible permutations of off-the-shelf hardware - a fact all Linux and Windows nerds are all too aware, as are Mac engineers. There will always be some weird combination that makes things break, and it can take many, many man-days to fix it; when you have 1M boxen out there, this cost would be prohibitive. The only way is to control the standard platform.&lt;br /&gt;&lt;br /&gt;For all of its closeness, the certification process is actually open when compared with other companies. All the criteria involved is made available in public websites, APIs with all the hooks required to extend wizards are public (with examples), companies are free to do public dry runs and any company can request a slot for validation. Perhaps some cost needs to be associated with the process (time is money after all, and we must discourage the less serious companies), but in general, the process is fair and public. The tests, however, are stringent; hardware that passes _cannot_ fail when deployed in the wild.&lt;br /&gt;&lt;br /&gt;One final note with regards to entry level hardware. Some people may not be aware, but the computing power available as standard today is incredibly high. For example, one of the PCs I maintain has a 1Ghz CPU, 512 MB of ram, 10 GB hard drive and an average ATI card; I bought it for 60 GBP. This machine runs Ubuntu Hardy and sometimes has to cope with as many as 3 users logged on. It doesn't do any of the 3D Compiz special effects due to the dodgy ATI card, but it does pretty much everything else. You'd be surprised on what you can do with the slowest RAM, cheapest sound-card and so on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UbuntuBox: The Software Platform&lt;/span&gt;&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;By now you must have guessed that the box would be running Ubuntu; but this is not your average Ubuntu. Using an interface along the lines of &lt;a href="http://www.markshuttleworth.com/wp-content/uploads/2008/06/nb-remix-launcher.png"&gt;Remix&lt;/a&gt;, we would make a clear statement that this is an appliance - not a PC. As the eee has demonstrated, perceptions matter the most. Remix's &lt;a href="http://www.markshuttleworth.com/archives/151"&gt;interface&lt;/a&gt; will remind no one of Windows, whilst at the same time making the most common tasks really easy to locate.&lt;br /&gt;&lt;br /&gt;In addition to regular Ubuntu, the software platform would provide, out-of-the box, complete media support. This entails having GStreamer will all the proprietary plugins, Adobe's flash and any other plug-ins that may be required for it to play all the media one can throw at it.&lt;br /&gt;&lt;br /&gt;The UbuntuBox is mainly a clever Media Centre, and, as such, applications such as &lt;a href="http://elisa.fluendo.com/home/"&gt;Elisa&lt;/a&gt;, &lt;a href="http://www.gnome.org/projects/rhythmbox/"&gt;Rhythmbox&lt;/a&gt;/&lt;a href="http://wiki.banshee-project.org/Main_Page"&gt;Banshee&lt;/a&gt;, &lt;a href="http://f-spot.org/Main_Page"&gt;F-Spot&lt;/a&gt;, etc are at the core of the user experience. These applications would need to be modified slightly to allow for a better multi-user experience (e.g. shared photo/music collections, good PVR and DVB support, etc), but on the whole the functionality they already provide is more than sufficient for most users.&lt;br /&gt;&lt;br /&gt;As with the hardware side, the software platform is tightly controlled. Only official Ubuntu repositories are allowed, and all software is tested and known to work with the current generation of boxen. And, as with hardware, the software platform is made available for third-party who want to deploy their wares. An apt interface similar to click 'n run is made available so that commercial companies can sell their wares on the platform and charge for it. They would have to go through compliance first, of course, but if the number of boxes out there is large enough, there will be companies interested in doing so. This would mean, for example, that a games market could begin to emerge based on Wine; instead of having each user test each Windows application for their particular setup, with many users having mixed results, this would put the onus of the testing on the company owning the platform and on the software vendor. Games would have to be repackaged as debs and be made installable just like any other Debian package. Of course, the same logic could be applied to any windows Application.&lt;br /&gt;&lt;br /&gt;As I mentioned previously, boxen come with support contracts. A standard support contract should provide:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Access to all security fixes;&lt;/li&gt;&lt;li&gt;Troubleshooting of problems, including someone remotely accessing your machine to help you sort it out.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Due its homogeneity, UbuntuBox is very vulnerable to attacks. If an exploit is out in the wild, large number of boxen can be compromised very quickly. To make things a bit safer, the platform has the following features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SELinux is used throughout;&lt;/li&gt;&lt;li&gt;All remote access is done via SSH and is only enabled on demand (e.g. when tech support needs access);&lt;/li&gt;&lt;li&gt;All users have passwords and must change them regularly;&lt;/li&gt;&lt;li&gt;There is an encrypted folder (or vault) for important documents, available from each user's desktop.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Finally, notice that binary drivers and proprietary applications are avoided when possible - e.g. Intel drivers would be preferable to nVidia, provided they have the same feature-set. However, where the proprietary solutions are technically superior, they should be used. Skype springs to mind.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UbuntuTerm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Readers may be left wondering, "this is all very nice and dandy, but am I supposed to do my word processing using a TV?". Well, not quite. Whilst the TV is central, its use is focused on the gaming and Media Centre aspects of the box. If you want to use UbuntuBox as a regular PC, you will need to buy a UbuntuTerm. Just what is a UbuntuTerm? It is a dumb terminal of "old" in disguise (e.g. &lt;a href="http://www.ltsp.org/"&gt;LTSP&lt;/a&gt;). It is nothing but a LCD display of a moderately decent size (19" say), with an attached PC - the back of the monitor or the base would do, as the hardware is minimal. The PC has a basic single core chip with low power consumption to avoid fans and on-board video, sound and wireless Ethernet. It is designed to boot off the network if &lt;a href="http://en.wikipedia.org/wiki/BOOTP"&gt;BOOTP&lt;/a&gt; can be used over wireless; if not, from flash. Whichever way it boots, its configured to find the mothership and start an &lt;a href="http://probing.csx.cam.ac.uk/about/xdmcp.html"&gt;XDMCP&lt;/a&gt; session on it. Its price should hover around the 100 GBP mark.&lt;br /&gt;&lt;br /&gt;As with any decent terminal these days, UbuntuTerm is designed to fool you in believing you are sitting on the server. X already does most of the magic required, but we need to take it one level further: if you start playing music, the audio will come out of your local speakers via pulseaudio; if you plug your iPod via its USB port, the device will show up on your desktop; if you start playing a game, the FPSs you get remotely will comparable to playing it on the server. As with everything else mentioned in this article, all of these technologies are readily available on the wider community; its a matter of packaging them in a format that regular users can digest (see Dave's &lt;a href="http://davelargo.blogspot.com/"&gt;blog&lt;/a&gt; for example).&lt;br /&gt;&lt;br /&gt;The standard hardware on a UbuntuTerm is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Low RAM, basic video card;&lt;/li&gt;&lt;li&gt;Speakers attached to monitor;&lt;/li&gt;&lt;li&gt;SD Card, compact flash readers;&lt;/li&gt;&lt;li&gt;WebCam, headset;&lt;/li&gt;&lt;li&gt;Lots of USB ports&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;A house can have as many UbuntuTerms as required, and the server should easily cope with at least 6 of them without too much trouble, depending on what sort of activities the users get up to.&lt;br /&gt;&lt;br /&gt;Finally, in addition to the UbuntuTerm in hardware, there is also a UbuntuSoftTerm. This is nothing but a  basic Cygwin install with X.org, allowing owners of PCs to connect to their UbuntuBox without having to buy an entire UbuntuTerm.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;UbuntuBox is an attempt to ride the wave of netbooks; it also tries to make strengths out of Linux's weaknesses. The box is not may not live up to everyone's ideals of Free Software, but its main objective is to increase Ubuntu's installed base, allowing us to start applying leverage against the hardware and software manufacturers. The design of the box takes into account the needs of a very large segment of the market which have basic computing needs, but don't want to became experts - just like a PlayStation owner does not want to know the ins-and-outs of the PowerPC chips.&lt;br /&gt;&lt;br /&gt;The UbuntuBox is an appliance, and as such is designed to be used in a fairly rigid number of ways, but that cannot be avoided if one wants to stay true to its nature. The more freedom one gives to users, the worse the end product will be for the Regular User, which cares not for intricate technical detail.&lt;br /&gt;&lt;br /&gt;Note also I haven't spent much time talking about business models for the company providing UbuntuBoxen. The opportunities should be there to create a sustainable business, based on revenue streams such as monthly payments for support, fees from OEMs, payments to access the platform (content providers). However, I don't know too much about making money so I leave that as an exercise to the reader. The other interesting aspect is comunity leverage. If managed properly, a project of this nature could enjoy large amounts of comunity participation: in testing, packaging, marketing, support - in fact, pretty much all areas can be shared with the  comunity,  reducing costs greatly.&lt;br /&gt;&lt;br /&gt;All and all, if there was an UbuntuBox out there for sale, I'd buy it. I think such a device would have a good chance of capturing this illusive segment of the market, giving Linux a foothold, however small, on the desktop.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-510828042874520182?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/510828042874520182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=510828042874520182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/510828042874520182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/510828042874520182'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2008/06/nerd-food-on-ubuntubox.html' title='Nerd Food: On the UbuntuBox'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-6724724072739561041</id><published>2008-06-11T14:18:00.000-07:00</published><updated>2010-01-27T02:26:16.042-08:00</updated><title type='text'>Nerd Food: On Evolutionary Methodology</title><content type='html'>&lt;div style="text-align: right;"&gt;Unix's durability and adaptability have been nothing short of astonishing. Other technologies have come and gone like mayflies. Machines have increased a thousand-fold in power, languages have mutated, industry practice has gone through multiple revolutions - and Unix hangs in there, still producing, still paying the bills, and still commanding loyalty from many of the best and brightest software technologists on the planet.&lt;span style="font-style: italic;"&gt; -- ESR &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;Unix...is not so much a product as it is a painstakingly compiled oral history of the hacker subculture&lt;span style="font-style: italic;"&gt;. -- Neal Stephenson &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Impossibly Scalable System &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If development in general is an art or a craft, its finest hour is perhaps the maintenance of existing systems which have high availability requirements but are still experiencing high rates of change. As we covered &lt;a href="http://mcraveiro.blogspot.com/2007/05/nerd-food-on-maintenance.html"&gt;previously&lt;/a&gt;, maintenance in general is a task much neglected in the majority of commercial shops, and many products suffer from entropic development; that is, the piling on of changes which continuously raise the complexity bar, up to a point where it is no longer cost-effective to continue running the existing system. The word "legacy" is in itself filled with predestination, implying old systems cannot avoid time-decay and will eventually rot into oblivion.&lt;br /&gt;&lt;br /&gt;The story is rather different when one looks at a few successful Free and Open Source Software (FOSS) systems out there. For starters, "legacy" is not something one often hears on that side of the fence; projects are either maintained or not maintained, and can freely flip from one state to the other. Age is not only _not_ a bad thing, but, in many cases, it is a remarkable advantage. Many projects that survived their first decade are now stronger than ever: the Linux kernel, x.org, Samba, Postgresql, Apache, gcc, gdb, subversion, GTK, and many, many others. Some, like Wine, took a decade to mature and are now showing great promise.&lt;br /&gt;&lt;br /&gt;Each of these old timers has its fair share of lessons to teach, all of them incredibly valuable; but the project I'm particularly interested in is the Linux kernel. I'll abbreviate it to Linux or "the kernel" from now on.&lt;br /&gt;&lt;br /&gt;As published &lt;a href="https://www.linux-foundation.org/publications/linuxkerneldevelopment.php"&gt;recently&lt;/a&gt; in a study by Kroah-Hartman, Corbet and McPherson, the kernel suffers a daily onslaught of unimaginable proportions. Recent kernels are a joint effort of thousands of kernel hackers in dozens of countries, a fair portion of which working or well over 100 companies. On average, these developers added or modified around 5K lines per day during the 2.6.24 release cycle and, crucially, removed some 1.5K lines per day - and "day" here includes weekends too. Kernel development is carried out in hundreds of different kernel trees, and the merge paths between these trees obeys no strictly enforced rules - it does follow convention, but rules get bent when the situation requires it.&lt;br /&gt;&lt;br /&gt;It is incredibly difficult to convey in words just how much of a technical and social achievement the kernel is, but one is still compelled to try. The absolute master of scalability, it ranges from the tiniest embedded processor with no MMU to the largest of the large systems - some spanning as many as 4096 processors - and covering pretty much everything else in between: mobile phones, Set-Top Boxes (STBs), game consoles, PCs, large severs, supercomputers. It supports more hardware architectures than any other kernel ever engineered, a number which seemingly keeps on growing at the same rate new hardware is being invented. Linux is increasingly the kernel of choice for new architectures, mainly because it is extremely easy to port. Even real time - long considered the unassailable domain of special purpose - is beginning to cave in, unable to resist the relentless march of the penguin. And the same is happening in many other niches.&lt;br /&gt;&lt;br /&gt;The most amazing thing about Linux may not even be its current state, but its pace, as clearly demonstrated by Kroah-Hartman, Corbet and McPherson's analysis of kernel source size: it has displayed a near constant growth rate between 2.6.11 and 2.6.24, hovering at around 10% a year. Figures on this scale can only be supported by a catalytic development process. And in effect, that is what Linux provides: by getting better it implicitly lowers the entry barrier to new adopters, which find it closer and closer to their needs; thus more and more people join in and fix what they perceive to be the limitations of the kernel, making it even more accessible to the next batch of adopters.&lt;br /&gt;&lt;br /&gt;Although some won't admit it now, the truth is none of the practitioners or academicians believed that such a system could ever be delivered. After all, Linux commits every single schoolboy error: started by an "inexperienced" undergrad, it did not have much of an  upfront design, architecture and purpose; it originally had the firm objective of supporting only a single processor on x86; it follows the age-old monolithic approach rather than the "established"  micro-kernel; it is written in C instead of a modern, object-oriented language; its processes appear to be haphazard, including a clear  disregard for Brook's law; it lacks a rigorous Q&amp;amp;A process and until very recently even a basic kernel debugger; version control was first introduced over a decade after the project was started; there is no clear commercial (or even centralised) ownership; there is no "vision" and no centralised decision making (Linus may be the final arbiter, but he relies on the opinions of a lot of people). The list continues ad infinitum.&lt;br /&gt;&lt;br /&gt;And yet, against all expert advice, against all odds, Linux is the little kernel that could. If one were to write a spec covering the  capabilities of vanilla 2.6.25, it would run thousands of pages long; its cost would be monstrous; and no company or government department would dare to take on such an immense undertaking. Whichever way you look at it, Linux is a software engineering singularity.&lt;br /&gt;&lt;br /&gt;But how on earth can Linux work at all, and how did it make it thus far?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Linus' Way &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;I'm basically a very lazy person who likes to get credit for things other people actually do. &lt;span style="font-style: italic;"&gt;-- Linus Torvalds &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;The engine of Linux's growth is deeply rooted in the kernel's methodology of software development, but it manifests itself as a set of core values - a culture. As with any other school of thought, not all kernel hackers share all values, but the group as a whole displays some obvious homogeneous characteristics. These we shall call Linus' Way, and are loosely summarised below (apologies for some redundancy, but some aspects are very interrelated).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Small is beautiful  &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Design is only useful on the small scale; there is no need to worry about the big picture - if anything, worrying about the big picture is considered harmful. Focus on the little decisions and ensure they are done correctly. From these, a system will emerge that _appears_ to have had a grand design and purpose.&lt;/li&gt;&lt;li&gt;At a small scale, do not spend too long designing and do not be overambitious. Rapid prototyping is the key. Think simple and do not over design. If you spend too much time thinking about all the possible permutations and solutions, you will create messy and unmaintainable code which will very likely going to be wrong. Best implement a small subset of functionality that works well, is easy to understand and can be evolved over time to cover any additional requirements.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Show me the Code  &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Experimentation is much more important than theory by several orders of magnitude. You may know everything there is to know about coding practice and theory, but your opinion will only be heard if you have solid code in the wild to back it up.&lt;/li&gt;&lt;li&gt;Specifications and class diagrams are frowned upon; you can do them for your own benefit, but they won't sell any ideas by themselves.&lt;/li&gt;&lt;li&gt;Coding is a messy business and is full of compromises. Accept that and get on with it. Do not search for perfection before showing code to a wider audience. Better to have a crap system (sub-system, module, algorithm, etc.) that works somewhat today than a perfect one in a year or two. Crap systems can be made slightly less crappy; vapourware has no redeeming features. &lt;/li&gt;&lt;li&gt;Merit is important, and merit is measured by code. Your ability to do boring tasks well can also earn a lot of brownie points (testing, documentation, bug hunting, etc.) and will have a large positive impact on your status. The more you are known and trusted in the community, the easier it will be for you to merge new code in and the more responsibilities you will end up having. Nothing is more important than merit as gauged by the previous indicators; it matters not what position you hold on your company, how important your company is or how many billions of dollars are at stake - nor does it matter how many academic titles you hold. However, past actions do not last forever: you must continue  to talk sense to have the support of the community. &lt;/li&gt;&lt;li&gt;Testing is crucial, but not just in the conventional sense. The key is to release things into a wider population ("Release early, release often"). The more exposure code has the more likely bugs will be found and fixed. As ESR put it, "Given enough eyeballs, all bugs are shallow" (dubbed Linus' law). Conventional testing is also welcome (the more the merrier), but its no substitute for releasing into the wild.&lt;/li&gt;&lt;li&gt;Read the source, Luke. The latest code is the only authoritative and unambiguous source of understanding. This attitude does not in anyway devalue additional documentation; it just means that the kernel's source code overrides any such document. Thus there is a great impetus in making code readable, easy to understand and conformant to standards. It is also very much in line with Jack Reeve's view that source code is the only real specification a software system has.&lt;/li&gt;&lt;li&gt;Make it work first, then make it better. When taking on existing code, one should always first make it work as intended by the original coders; then a set of cleanup patches can be written to make it better. Never start by rewriting existing code.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;No sacred cows &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt; _anything_ related to the kernel can change, including processes, code, tools, fundamental algorithms, interfaces, people. Nothing is done "just because". Everything can be improved, and no change is deemed too risky. It may have to be scheduled, and it may take a long time to be merged in; but if a change is of "good taste" and, when required, provided the originator displays the traits of a good maintainer, it will eventually be accepted. Nothing can stand on the way of progress.&lt;/li&gt;&lt;li&gt;As a kernel hacker, you have no doubts that you are right - but actively you encourage others to prove you wrong and accept their findings once they have been a) implemented (a prototype would do, as long as it is complete enough for the purpose) b) peer reviewed and validated. In the majority of cases you gracefully accept defeat. This may imply a turn-around of 180 degrees; Linus has done this on many occasions.&lt;/li&gt;&lt;li&gt;Processes are made to serve development. When a process is found wanting - regardless of how ingrained it is or how useful it has been in the past - it can and will be changed. This is often done very aggressively. Processes only exist while they provide visible benefits to developers or, in very few cases, due to external requirements (ownership attribution comes to mind). Processes are continuously fine-tuned so that they add the smallest possible amount of overhead to real work. A process that improves things dramatically but adds a large overhead is not accepted until the overhead is shaved off to the bare bone.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Tools &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Must fit the development model - the development model should not have to change to fit tools;&lt;/li&gt;&lt;li&gt;Must not dumb down developers (i.e. debuggers); a tool must be an aid and never a replacement for hard-thinking;&lt;/li&gt;&lt;li&gt;Must be incredibly flexible; ease of use can never come at the expense of raw, unadultered power;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Must not force everyone else to use that tool; some exceptions can be made, but on the whole a tool should not add dependencies. Developers should be free to develop with whatever tools they know best.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;The Lieutenants: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One may come up with clever ways of doing things, and even provide conclusive experimental evidence on how a change would improve matters; however, if one's change will disrupt existing code and requires specialised knowledge, then it is important to display the characteristics of a good maintainer in order to get the changes merged in. Some of these traits are:&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Good understanding of kernel's processes;&lt;/li&gt;&lt;li&gt;Good social interaction: an ability to listen to other kernel hackers, and be ready to change your code;&lt;/li&gt;&lt;li&gt;An ability to do boring tasks well, such as patch reviews and integration work;&lt;/li&gt;&lt;li&gt;An understanding of how to implement disruptive changes, striving to contain disruption to the absolute minimum and a deep understanding of fault isolation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic;"&gt;Patches&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Patches have been used for eons. However, the kernel fine-tuned the notion to the extreme, putting it at the very core of software development. Thus all changes to be merged in are split into patches and each patch has a fairly concise objective, against which a review can be performed. This has forced all kernel hackers to _think_ in terms of patches, making changes smaller and concise, and splitting scaffolding and clean up work and decoupling features from each other. The end result is a ridiculously large amount of positive externalities - unanticipated side-effects - such as technologies that get developed for one purpose but uses that were never dreamt of by their creator. The benefits of this approach are far too great to discuss here but hopefully we'll have a dedicated article on the subject. &lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Other &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Keep politics out. The vast majority of decisions are taken on technical merits alone, and very rarely for political reasons. Some times the two coincide (such as the dislike for binary modules in the kernel), but one must not forget that the key driver is always the technical reasoning. For instance, the kernel uses the GNU GPL v2 purely because its the best way to ensure its openness, a key building block of the development process.&lt;/li&gt;&lt;li&gt;Experience trumps fashion. Whenever choosing an approach or a technology, kernel hackers tend to go for the beaten track rather than new and exciting ones. This is not to say there is no innovation in the kernel; but innovators have the onus of proving that their approach is better. After all, there is a solid body of over 30 years of experience in developing UNIX kernels; its best to stand on the shoulders of giants whenever possible.&lt;/li&gt;&lt;li&gt;An aggressive attitude towards bad code, or code that does not follow the standards. People attempting to add bad code are told so in no uncertain terms, in full public view. This discourages many a developer, but also ensures that the entry bar is raised to avoid lowering the signal-to-noise (S/N) ratio.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;If there ever was a single word that could describe a kernel hacker, that word would have to be "pragmatic". A kernel hacker sees development as a hard activity that should remain hard. Any other view of the world would result in lower quality code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Navigating Complexity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Linus has stated in many occasions he is a big believer of development by evolution rather than the more traditional methodologies. In a way, he is the father of the evolutionary approach when applied to software design and maintenance. I'll just call this the evolutionary methodology (EM) by want of a better name. EM's properties make it strikingly different from everything that has preceded it. In particular, it appears to remove most forms of centralised control. For instance:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;It does not allow you to know where you're heading in the long run; all it can tell you is that if you're currently on a favourable state, a small, gradual increment is _likely_ to take you to another, slightly more favourable state. When measured in a large timescale it will appear as if you have designed the system as a whole with a clear direction; in reality, this "clearness" is an emergent property (a side-effect) of thousands or small decisions.&lt;/li&gt;&lt;li&gt;It exploits parallelism by trying lots of different gradual increments in lots of members of its population and selecting the ones which appear to be the most promising.&lt;/li&gt;&lt;li&gt;It favours promiscuity (or diversity): code coming from anywhere can intermix with any other code.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;But how exactly does EM work?  And why does it seem to be better than the traditional approaches? The search for these answers takes us right back to the fundamentals. And by "fundamentals", I really mean the absolute fundamentals - you'll have to grin and bear, I'm afraid. I'll attempt to borrow some ideas from Popper, Taleb, and Dawkins to make the argument less nonsensical.&lt;br /&gt;&lt;br /&gt;That which we call reality can be imagined as a space with a really, really large number of variables. Just how large one cannot know, as the number of variables is unknowable - it could even be infinite - and it is subject to change (new variables can be created; existing ones can be destroyed, and so on). With regards to the variables themselves, they change value every so often but this frequency varies; some change so slowly they could be better describbed as constants, others so rapidly they cannot be measured. And the frequency itself can be subject to change.&lt;br /&gt;&lt;br /&gt;When seen over time, these variables are curves, and reality is the space where all these curves live. To make matters more interesting, changes on one variable can cause changes to other variables, which in turn can also change other variables and so on. The changes can take many forms and display subtle correlations.&lt;br /&gt;&lt;br /&gt;As you can see, reality is the stuff of pure, unadulterated complexity and thus, by definition, any attempt to describe it in its entirety cannot be accurate. However, this simple view suffices for the purposes of our exercise.&lt;br /&gt;&lt;br /&gt;Now imagine, if you will, a model. A model is effectively a) the grabbing of a small subset of variables detected in reality; b) the analysis of the behaviour of these variables over time; c) the issuing of statements regarding their behaviour - statements which have not been proven to be false during the analysis period; d) the validation of the models predictions against past events (calibration). Where the model is found wanting, it needs to be changed to accommodate the new data. This may mean adding new variables, removing existing ones that were not found useful, tweaking variables, and so on. Rinse, repeat. These are very much the basics of the scientific method.&lt;br /&gt;&lt;br /&gt;Models are rather fragile things, and its easy to demonstrate empirically why. First and foremost, they will always be incomplete; exactly how incomplete one cannot know. You never know when you are going to end outside the model until you are there, so it must be treated with distrust. Second, the longer it takes you to create a model - a period during which validation is severely impaired - the higher the likelihood of it being wrong when its "finished". For very much the same reasons, the larger the changes you make in one go, the higher the likelihood of breaking the model. Thirdly, the longer a model has been producing correct results, the higher the probability that the next result will be correct. But the exact probability cannot be known. Finally, a model must endure constant change to remain useful - it may have to change as frequently as the behaviour of the variables it models.&lt;br /&gt;&lt;br /&gt;In such an environment, one has no option but to leave certainty and absolutes behind. It is just not possible to "prove" anything, because there is a large component of randomness and unknown-ability that cannot be removed. Reality is a messy affair. The only certainty one can hold on to is that of fallibility: a statement is held to be possibly true until proven false. Nothing else can be said. In addition, empiricism is highly favoured here; that is, the ability to look at the data, formulate an hypothesis without too much theoretical background and put it to the test in the wild.&lt;br /&gt;&lt;br /&gt;So how does this relate to code? Well, every software system ever designed is a model. Source code is nothing but a set of statements regarding variables and the rules and relationships that bind them. It may model conceptual things or physical things - but they all inhabit a reality similar to the one described above. Software systems have become increasingly complex over time - in other words, taking on more and more variables. An operative system such as multics, deemed phenomenally complex for its time, would be considered normal by today's standards - even taking into account the difficult environment at the time with non-standard hardware, lack of experience on that problem domain, and so on.&lt;br /&gt;&lt;br /&gt;In effect, it is this increase in complexity that breaks down older software development methodologies. For example, the waterfall method is not "wrong" per se; it can work extremely well in a problem domain that covers a small number of variables which are not expected to change very often. You can still use it today to create perfectly valid systems, just as long as these caveats apply. The same can be said for the iterative model, with its focus on rapid cycles of design, implementation and testing. It certainly copes with much larger (and faster moving) problem domains than the waterfall model, but it too breaks down as we start cranking up the complexity dial. There is a point where your development cycles cannot be made any smaller, testers cannot augment their coverage, etc. EM, however, is at its best in absurdly complex problem domains - places where no other methodology could aim to go.&lt;br /&gt;&lt;br /&gt;In short, EM's greatest advantages in taming complexity are as follows:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Move from one known good point to another known good point.&lt;/span&gt; Patches are the key here, since they provide us with small units of reviewable code that can be checked by any experienced developer with a bit of time. By forcing all changes to be split into manageable patches, developers are forced to think in terms of small, incremental changes. This is precisely the sort of behaviour one would want in a complex environment.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Validate, validate and then validate some more.&lt;/span&gt; In other words, Release Early, Release Often. Whilst Linus has allowed testing and Q&amp;amp;A infrastructure to be put in place by interested parties, the main emphasis has always been placed in putting code out there in the wild as quickly as possible. The incredibly diverse environments on which the kernel runs provide a very harsh and unforgiving validation that brings out a great number of bugs that could not have possibly been found otherwise.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;No one knows what the right thing is, so try as many possible avenues as possible simultaneously. &lt;/span&gt;Diversity is the key, not only in terms of hardware (number of architectures, endless permutations within the same architecture, etc.), but also in terms of agendas. Everyone involved in Linux development has their own agenda and is working towards their own goal. These individual requirements, many times conflicting, go through the kernel development process and end up being converted into a number of fundamental architectural changes (in the design sense, not the hardware sense) that effectively are the superset of all requirements, and provide the building blocks needed to implement them. The process of integrating a large change to the kernel can take a very long time, and be broken into a sequence of never ending patches; but many a time it has been found that one patch that adds infrastructure for a given feature also provides a much better way of doing things in parts of the kernel that are entirely unrelated.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Not only does EM manage complexity really well but it actually thrives on it. The pulling of the code base in multiple directions makes it stronger because it forces it to be really plastic and maintainable. It should also be quite clear by now that EM can only be deployed successfully under somewhat limited (but well defined) circumstances, and it requires a very strong commitment to openness. It is important to build a community to generate the diversity that propels development, otherwise its nothing but the iterative method in disguise done out in the open. And building a community entails relinquishing the traditional notions of ownership; people have to feel empowered if one is to maximise their contributions. Furthermore, it is almost impossible to direct this engine to attain specific goals - conventional software companies would struggle to understand this way of thinking.&lt;br /&gt;&lt;br /&gt;Just to be clear, I would like to stress the point: it is not right to say that the methodologies that put emphasis on design and centralised control are wrong, just like a hammer is not a bad tool. Moreover, its futile to promote one programming paradigm over another, such as Object-Orientation over Procedural programming; One may be superior to the other on the small, but on the large - the real world - they cannot &lt;span style="font-style: italic;"&gt;by themselves&lt;/span&gt; make any significant difference (class libraries, however, are an entirely different beast).&lt;br /&gt;&lt;br /&gt;I'm not sure if there was ever any doubt; but to me, the kernel proves conclusively that the human factor dwarfs any other in the production of large scale software.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-6724724072739561041?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/6724724072739561041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=6724724072739561041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6724724072739561041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/6724724072739561041'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2008/06/nerd-food-on-evolutionary-methodology.html' title='Nerd Food: On Evolutionary Methodology'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2300190711008673793</id><published>2008-01-28T22:43:00.000-08:00</published><updated>2008-01-28T22:51:04.111-08:00</updated><title type='text'>Super Angola!!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Incredible. Amazing. We actually did it. We managed to beat Senegal. Our stars &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Flavio&lt;/span&gt; and specially the new Manchester United player &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Manucho&lt;/span&gt; did the job and the end result was an amazing 3-1. Now we're only one draw away from going past the group stages for the first time ever. So all fingers crossed for Thursday 17:00 UK time, when we face the very difficult obstacle of Tunisia.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/R57LlQVDzuI/AAAAAAAAAE8/idXIRCngF3Y/s1600-h/flavio_manucho.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/R57LlQVDzuI/AAAAAAAAAE8/idXIRCngF3Y/s320/flavio_manucho.jpg" alt="" id="BLOGGER_PHOTO_ID_5160786063912062690" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;(C) 2008 Associated Press&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2300190711008673793?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2300190711008673793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2300190711008673793' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2300190711008673793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2300190711008673793'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2008/01/super-angola.html' title='Super Angola!!!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_nEck2BGjqOg/R57LlQVDzuI/AAAAAAAAAE8/idXIRCngF3Y/s72-c/flavio_manucho.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4588630122052032616</id><published>2008-01-27T04:54:00.000-08:00</published><updated>2008-01-27T05:08:46.180-08:00</updated><title type='text'>Ghana 2008 - Forca Palancas!!</title><content type='html'>&lt;div style="text-align: justify;"&gt;The emotion is running high on the African Cup! Angola started well against our regional rivals South Africa, but yielded at the end. To be fair, South Africa was dominant for periods of the game, and did deserve the draw. Today we have a rather difficult game against Senegal (UK 17:00). The coverage in the UK has been superb, with all the games available on BBC interactive (on BBC1 just press the Red Button).&lt;br /&gt;&lt;br /&gt;A positive note for Ghana too: the stadiums are superb, and things have been rather well organised, if we ignore minor glitches (like the electricity going, or playing two games on the sames stadium without allowing the grass to recover or the disorganisation with regards to granting press credentials). The camera work has been top notch, at European level. The sound could perhaps be a bit better. All and all, the best CAN ever, methinks. One lesson Angola should learn for 2010 is to ensure all tickets get sold. Its much more important to have all stadiums full that to profit from the event.&lt;br /&gt;&lt;br /&gt;The main site for the event is &lt;a href="http://www.ghanacan2008.com/"&gt;http://www.ghanacan2008.com/&lt;/a&gt;. Not the best (can't find any pictures or live results, and the content is rather limited), but not the worst either, showing how far things have come and how much the quality bar has been raised.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/R5x_XQVDztI/AAAAAAAAAE0/GKRqHt346Rs/s1600-h/palancas.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/R5x_XQVDztI/AAAAAAAAAE0/GKRqHt346Rs/s320/palancas.jpg" alt="" id="BLOGGER_PHOTO_ID_5160139310556761810" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;(C) MTNFootball.com&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4588630122052032616?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4588630122052032616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4588630122052032616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4588630122052032616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4588630122052032616'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2008/01/ghana-2008-forca-palancas.html' title='Ghana 2008 - Forca Palancas!!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nEck2BGjqOg/R5x_XQVDztI/AAAAAAAAAE0/GKRqHt346Rs/s72-c/palancas.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7274990602389930330</id><published>2007-10-20T05:24:00.000-07:00</published><updated>2007-10-20T14:22:24.061-07:00</updated><title type='text'>.signature</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-style: italic;"&gt;One man's constant is another man's variable. -- Alan Perlis&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nEck2BGjqOg/Rxnz1IogxVI/AAAAAAAAAEA/2wzuQkMUe28/s1600-h/alan_perlis.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nEck2BGjqOg/Rxnz1IogxVI/AAAAAAAAAEA/2wzuQkMUe28/s320/alan_perlis.jpg" alt="" id="BLOGGER_PHOTO_ID_5123394145286669650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Alan_Perlis"&gt;Alan Perlis&lt;/a&gt; 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:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;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.&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-style: italic;"&gt;The Structure and Interpretation of Computer Programs&lt;/span&gt; by Abelson, Sussman, and Sussman&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, things haven't quite turned out like Perlis would have wanted.&lt;br /&gt;&lt;br /&gt;Besides of his many contributions to Computer Science, such as his work on ALGOL, Perlis is very well known for his  &lt;a href="http://www.cs.yale.edu/quotes.html"&gt;Epigrams on Programming&lt;/a&gt;, 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7274990602389930330?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7274990602389930330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7274990602389930330' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7274990602389930330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7274990602389930330'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/10/signature.html' title='.signature'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_nEck2BGjqOg/Rxnz1IogxVI/AAAAAAAAAEA/2wzuQkMUe28/s72-c/alan_perlis.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7265796865177573293</id><published>2007-10-03T15:16:00.000-07:00</published><updated>2007-10-04T12:56:38.640-07:00</updated><title type='text'>Nerd Food: Interview with Federico Mena-Quintero</title><content type='html'>&lt;span style="FONT-STYLE: italic"&gt;Pretty much anyone who is involved with Free Software - even just as a lowly user like myself - has heard of Federico. His &lt;/span&gt;&lt;a style="FONT-STYLE: italic" href="http://www.gnome.org/~federico/news.html"&gt;blog &lt;/a&gt;&lt;span style="FONT-STYLE: italic"&gt;is a source of insightful ideas on Gnome, and lately, on performance - combined with a healthy dose of interest in politics and, more importantly,&lt;a href="http://www.gnome.org/~federico/news-2007-08.html#cilantro-chutney"&gt; good food&lt;/a&gt;. 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. &lt;/span&gt;&lt;br /&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gnome.org/"&gt;&lt;img id="BLOGGER_PHOTO_ID_5117239882353263938" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_nEck2BGjqOg/RwQWj4ogxUI/AAAAAAAAAD4/9n675li0amY/s320/Gnome-logo.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:+0;"&gt;(C) Gnome Foundation&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;br /&gt;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%?&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;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?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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!) :)&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Basically, it's a problem of education :)&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;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?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;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.&lt;br /&gt;&lt;br /&gt;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 :)&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;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?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;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...&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;I miss the monkeys, though.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;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?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;6. Can you describe your typical day at work?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, since I work from home... :)&lt;br /&gt;&lt;br /&gt;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.).&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 :)&lt;br /&gt;&lt;br /&gt;In the afternoon I tend to do "light" work... maintaining wikis, answering email, coordinating people. I don't really have a fixed work schedule.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic"&gt;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?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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!).&lt;br /&gt;&lt;br /&gt;Thanks for the interview!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7265796865177573293?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7265796865177573293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7265796865177573293' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7265796865177573293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7265796865177573293'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/10/nerd-food-interview-with-federico-mena.html' title='Nerd Food: Interview with Federico Mena-Quintero'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_nEck2BGjqOg/RwQWj4ogxUI/AAAAAAAAAD4/9n675li0amY/s72-c/Gnome-logo.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-927320028643615122</id><published>2007-09-29T12:47:00.000-07:00</published><updated>2007-10-19T11:15:54.202-07:00</updated><title type='text'>.signature</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;span style="font-style: italic;"&gt;"We must know, we shall know." -- David Hilbert&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nEck2BGjqOg/Rv6xkIlDizI/AAAAAAAAADw/vOROUFQaGUw/s1600-h/hilbert.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nEck2BGjqOg/Rv6xkIlDizI/AAAAAAAAADw/vOROUFQaGUw/s320/hilbert.jpg" alt="" id="BLOGGER_PHOTO_ID_5115721461075774258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/David_Hilbert"&gt;David Hilbert&lt;/a&gt; was a great German mathematician. What I appreciate the most about him is his quixotic personality and single-mindedness, going along with &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Russell"&gt;Bertrand Russel&lt;/a&gt; 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 &lt;a href="http://en.wikipedia.org/wiki/Hilbert%27s_problems"&gt;23 fundamental problems&lt;/a&gt;, 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.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-927320028643615122?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/927320028643615122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=927320028643615122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/927320028643615122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/927320028643615122'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/09/signature.html' title='.signature'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_nEck2BGjqOg/Rv6xkIlDizI/AAAAAAAAADw/vOROUFQaGUw/s72-c/hilbert.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-332827995217911594</id><published>2007-09-28T18:38:00.000-07:00</published><updated>2007-10-20T11:25:33.644-07:00</updated><title type='text'>Mighty Monty is Down</title><content type='html'>&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-332827995217911594?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/332827995217911594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=332827995217911594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/332827995217911594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/332827995217911594'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/09/mighty-monty-is-down.html' title='Mighty Monty is Down'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-626352059984070949</id><published>2007-09-22T06:38:00.000-07:00</published><updated>2007-09-22T07:34:37.868-07:00</updated><title type='text'>Blogosphere</title><content type='html'>OK, it appears one of my favourite blogs has really ended: &lt;a href="http://sdblog.wordpress.com/"&gt;Sem Destino&lt;/a&gt;.  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.&lt;br /&gt;&lt;br /&gt;The good news is the crowd around the blog decided to create another blog, with the creative title of &lt;a href="http://lifegoesonaguardandooregressodochefe.blogspot.com/"&gt;Life Goes On - Aguardando o Regresso do Chefe&lt;/a&gt; (Waiting the Boss's Return) :-) it's a great read too. In particular, the posts about &lt;a href="http://lifegoesonaguardandooregressodochefe.blogspot.com/2007/09/para-pp-uma-blue.html"&gt;Blue&lt;/a&gt; and &lt;a href="http://lifegoesonaguardandooregressodochefe.blogspot.com/2007/09/havemos-de-voltar-agostinho-neto.html"&gt;Agostinho Neto&lt;/a&gt; made me homesick :-)&lt;br /&gt;&lt;br /&gt;Another blog that is always interesting to read is &lt;a href="http://davelargo.blogspot.com/"&gt;Dave Richards&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;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...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-626352059984070949?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/626352059984070949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=626352059984070949' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/626352059984070949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/626352059984070949'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/09/blogosphere.html' title='Blogosphere'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-42983926051356453</id><published>2007-09-22T04:52:00.000-07:00</published><updated>2007-10-11T02:00:39.748-07:00</updated><title type='text'>Nerd Food: Take a Walk on the Server Side</title><content type='html'>&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;blinken&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;This article covers many mistakes I've seen over the years, in the hope you may avoid them, offering some tentative solutions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Languages&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The right staff.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Minimise layers of indirection.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Networking&lt;/li&gt;&lt;li&gt;Database access&lt;/li&gt;&lt;li&gt;Threading&lt;/li&gt;&lt;li&gt;Logging&lt;/li&gt;&lt;li&gt;Configuration&lt;/li&gt;&lt;li&gt;Serialisation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;The Hardware Platform &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Architecture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://mcraveiro.blogspot.com/2007/05/nerd-food-on-maintenance.html"&gt;maintenance&lt;/a&gt; was taken seriously; but don't kid yourself, it's not.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;In summary, the key components of a system will be along these lines:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;A solid, cross-platform, scalable relational database. Oracle and Sybase are likely candidates, and PostgreSQL on the free software side of things;&lt;/li&gt;&lt;li&gt;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);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A large number of small servers, communicating over the messaging bus.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Getting the architecture right is essential; but once you're there, you must work hard to maintain it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Database&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Catalogue of Mistakes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overusing XML.&lt;/span&gt; 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:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Allow Java / .Net clients to talk to the server side;&lt;/li&gt;&lt;li&gt;Allow external parties to send data into our system;&lt;/li&gt;&lt;li&gt;Save the configuration settings for servers.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;br /&gt;Bear in mind the following XML constraints:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;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).&lt;/li&gt;&lt;li&gt;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++).&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;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).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;XML is a brilliant technology, and fit for purpose; that purpose is not efficiency.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cool technologies.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Performance testing.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;GUI tools.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;The GUI tools should focus on things like:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Account administration: adding new users, deleting them, etc.&lt;/li&gt;&lt;li&gt; Monitoring and diagnostics: graphs on deal volume, health checks to ensure servers are still alive, memory usage, cpu usage.&lt;/li&gt;&lt;li&gt;Maintenance, deployment, configuration: restarting servers when they die, easy deployment and configuration of servers.&lt;/li&gt;&lt;li&gt;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.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Database Serialisation.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep it simple and Know Your Costs.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;In designing a modern OO system, it's best to:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;keep inheritance to an absolute minimum, using either interfaces or client-supplier relationships;&lt;/li&gt;&lt;li&gt;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.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Do not optimise early.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Misuse of threads.&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;The problem with this approach is obvious:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;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);&lt;/li&gt;&lt;li&gt;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!&lt;/li&gt;&lt;li&gt;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.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-42983926051356453?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/42983926051356453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=42983926051356453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/42983926051356453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/42983926051356453'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/09/nerd-food-take-walk-on-server-side.html' title='Nerd Food: Take a Walk on the Server Side'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4895607684893395867</id><published>2007-08-27T13:50:00.000-07:00</published><updated>2007-08-27T13:57:29.339-07:00</updated><title type='text'>Afrobasket: Angola wins yet again!</title><content type='html'>&lt;div style="text-align: justify;"&gt;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.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/RtM6KVgWSHI/AAAAAAAAADo/IbtDO2QZEu8/s1600-h/final.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/RtM6KVgWSHI/AAAAAAAAADo/IbtDO2QZEu8/s320/final.JPG" alt="" id="BLOGGER_PHOTO_ID_5103486751986829426" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Angola v Cameroon, Afrobasket Final. (C) 2007 Afrobasket.com&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4895607684893395867?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4895607684893395867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4895607684893395867' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4895607684893395867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4895607684893395867'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/08/afrobasket-angola-wins-yet-again.html' title='Afrobasket: Angola wins yet again!'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_nEck2BGjqOg/RtM6KVgWSHI/AAAAAAAAADo/IbtDO2QZEu8/s72-c/final.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-1693548835141513272</id><published>2007-08-24T12:33:00.001-07:00</published><updated>2007-08-24T12:44:16.546-07:00</updated><title type='text'>Afrobasket 2007</title><content type='html'>&lt;div style="text-align: justify;"&gt;Oh. My. God. What can I say about Afrobasket 2007 in Angola. Perhaps just: &lt;span style="font-weight: bold;"&gt;WE ROCK!!!!&lt;/span&gt; :-) 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 &lt;a href="http://afrobasket2007.com/"&gt;website&lt;/a&gt; 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 &lt;a href="http://www.fiba.com/pages/eng/fc/news/lateNews/fibaEven/fibaAfriCham/p/newsid/21462/arti.html"&gt;these&lt;/a&gt; are extremely encouraging. Maybe one day we will actually see the World Cup in Angolan soil.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/Rs8yyVgWSGI/AAAAAAAAADg/_igXZlF3tvM/s1600-h/Angola.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/Rs8yyVgWSGI/AAAAAAAAADg/_igXZlF3tvM/s320/Angola.jpg" alt="" id="BLOGGER_PHOTO_ID_5102352743181731938" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;(C) 2007 Afrobasket.com&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-1693548835141513272?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/1693548835141513272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=1693548835141513272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1693548835141513272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/1693548835141513272'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/08/afrobasket-2007.html' title='Afrobasket 2007'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_nEck2BGjqOg/Rs8yyVgWSGI/AAAAAAAAADg/_igXZlF3tvM/s72-c/Angola.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-4593979842120492526</id><published>2007-07-24T13:47:00.000-07:00</published><updated>2007-07-24T13:54:36.115-07:00</updated><title type='text'>Interview with Con Olivas</title><content type='html'>&lt;div style="text-align: justify;"&gt;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 &lt;a href="http://apcmag.com/6735/interview_con_kolivas"&gt;here&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;Perfect read for those days when you get depressed about working for a bespoke company. Free software hacking has its downsides too.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-4593979842120492526?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/4593979842120492526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=4593979842120492526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4593979842120492526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/4593979842120492526'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/07/interview-with-con-olivas.html' title='Interview with Con Olivas'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7838996385112301223</id><published>2007-07-08T11:06:00.000-07:00</published><updated>2007-07-08T12:30:03.743-07:00</updated><title type='text'>Interesting...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Books&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;a href="http://www.amazon.co.uk/Capitalist-Nigger-Success-Spider-Doctrine/dp/0967846099"&gt;Capitalist Nigger: The Road to Success: a Spider Web Doctrine&lt;/a&gt;: 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 &lt;a href="http://www.amazon.co.uk/Europe-Underdeveloped-Africa-Walter-Rodney/dp/0882580965"&gt;successor&lt;/a&gt;. As it is, it's not up to the standard, and you may find it a bit crude in places. &lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;/span&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;a href="http://oficinadolivro.pt/site/bookDetails.aspx?BookID=345"&gt;África Acima&lt;/a&gt;:  (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. &lt;/span&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;Gonçalo does sound a bit like a public school boy at times, but overall he does a remarkable job of presenting Africa.&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;a href="http://www.amazon.co.uk/Bang-bang-Club-Making-South-Africa/dp/009928149X"&gt;The Bang-Bang Club&lt;/a&gt;: 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.&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;span style="font-weight: bold;"&gt;Movies&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;a href="http://www.google.co.uk/movies/reviews?cid=b08f0ce8eae5fe0c&amp;fq=rise+of+the+silver+surfer&amp;amp;sa=X&amp;oi=showtimes&amp;amp;ct=reviews&amp;cd=1"&gt;Fantastic Four: Rise of the Silver Surfer&lt;/a&gt;:  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 &lt;a href="http://en.wikipedia.org/wiki/Galactus"&gt;Galactus&lt;/a&gt; - and hope it will all turn out alright. Jesus. I just hope Transformers is any better.&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span id="lblTitulo" class="bigGrayText"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7838996385112301223?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7838996385112301223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7838996385112301223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7838996385112301223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7838996385112301223'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/07/interesting.html' title='Interesting...'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-2150991112616315124</id><published>2007-07-07T05:26:00.000-07:00</published><updated>2007-07-07T10:25:56.465-07:00</updated><title type='text'>Notebook of a Return to My Native Land - part 14</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; 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.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-style: italic; text-align: right;"&gt;It matters not how strait the gate,&lt;br /&gt;How charged with punishments the scroll,&lt;br /&gt;I am the master of my fate:&lt;br /&gt;I am the captain of my soul.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-weight: bold; text-align: right;"&gt;&lt;span style="font-weight: normal;"&gt;Invictus, William Ernest Henley&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Simon's Town&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;/blockquote&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;dorms&lt;/span&gt;! 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-vk3NqWkI/AAAAAAAAACI/1P8iL_eRTc0/s1600-h/simons_town_cyclists.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-vk3NqWkI/AAAAAAAAACI/1P8iL_eRTc0/s320/simons_town_cyclists.jpg" alt="" id="BLOGGER_PHOTO_ID_5084475552155982402" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Cyclists passing through Simon's Town&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/Ro-wcXNqWlI/AAAAAAAAACQ/lYPmRWRaFj4/s1600-h/simons_town_penguins.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/Ro-wcXNqWlI/AAAAAAAAACQ/lYPmRWRaFj4/s320/simons_town_penguins.jpg" alt="" id="BLOGGER_PHOTO_ID_5084476505638722130" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Penguins at Boulders Beach, next door to Simon's Town.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;fynbos&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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!&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cape Town&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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).&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-xj3NqWmI/AAAAAAAAACY/Q4HSXCgRaRc/s1600-h/cape_town_victoria_albert.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-xj3NqWmI/AAAAAAAAACY/Q4HSXCgRaRc/s320/cape_town_victoria_albert.jpg" alt="" id="BLOGGER_PHOTO_ID_5084477733999368802" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;The V&amp;A Waterfront.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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&amp;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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;craic&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Whilst food and beer was not an highlight at V&amp;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&amp;amp;A as much as possible, getting purposely lost on our way, finding things otherwise hidden.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/Ro-ykXNqWnI/AAAAAAAAACg/Z1jP55m6_Lg/s1600-h/cape_town_camps_bay.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/Ro-ykXNqWnI/AAAAAAAAACg/Z1jP55m6_Lg/s320/cape_town_camps_bay.jpg" alt="" id="BLOGGER_PHOTO_ID_5084478842100931186" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Camps Bay&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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, &lt;span style="font-style: italic;"&gt;cycling&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;people&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;medium&lt;/span&gt; one, but ended up getting somewhat lost and doing the remainder of a &lt;span style="font-style: italic;"&gt;hard&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Our way down from the mountain was uneventful but rather pleasant, especially after the hard, long climb up.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-2I3NqWoI/AAAAAAAAACo/LWACIKVSMpA/s1600-h/cape_town_signal_hill_fire.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-2I3NqWoI/AAAAAAAAACo/LWACIKVSMpA/s320/cape_town_signal_hill_fire.jpg" alt="" id="BLOGGER_PHOTO_ID_5084482767701039746" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Fire at the Signal Hill&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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&amp;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&amp;amp;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Robben Island&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nEck2BGjqOg/Ro-2sHNqWpI/AAAAAAAAACw/DYa6mwMCgqk/s1600-h/robben_island.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nEck2BGjqOg/Ro-2sHNqWpI/AAAAAAAAACw/DYa6mwMCgqk/s320/robben_island.jpg" alt="" id="BLOGGER_PHOTO_ID_5084483373291428498" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Security towers at Robben Island.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;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.&lt;br /&gt;&lt;/blockquote&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;It was the grimmest of days; it was the brightest of days.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Bright City Lights&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-3J3NqWqI/AAAAAAAAAC4/fkN7ipqgtUI/s1600-h/cape_town_poverty.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-3J3NqWqI/AAAAAAAAAC4/fkN7ipqgtUI/s320/cape_town_poverty.jpg" alt="" id="BLOGGER_PHOTO_ID_5084483884392536738" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Young Capetonian selling The Issue&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Out of sight, out of mind.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Knysna&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-3v3NqWrI/AAAAAAAAADA/KXPtlYIOgG0/s1600-h/plattenberg.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-3v3NqWrI/AAAAAAAAADA/KXPtlYIOgG0/s320/plattenberg.jpg" alt="" id="BLOGGER_PHOTO_ID_5084484537227565746" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;The Plattenberg.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_nEck2BGjqOg/Ro-4XXNqWsI/AAAAAAAAADI/xxM8f5CiwlM/s1600-h/canopy_tree.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_nEck2BGjqOg/Ro-4XXNqWsI/AAAAAAAAADI/xxM8f5CiwlM/s320/canopy_tree.jpg" alt="" id="BLOGGER_PHOTO_ID_5084485215832398530" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;At a platform on the Canopy Tree tour. The tree is over 50 metres in height.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style: italic;"&gt;slide&lt;/span&gt; from one to the next over steel cables.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Port Elizabeth&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;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...&lt;br /&gt;&lt;/blockquote&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_nEck2BGjqOg/Ro-5FHNqWtI/AAAAAAAAADQ/bqYSUpsqRHU/s1600-h/port_elizabeth.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_nEck2BGjqOg/Ro-5FHNqWtI/AAAAAAAAADQ/bqYSUpsqRHU/s320/port_elizabeth.jpg" alt="" id="BLOGGER_PHOTO_ID_5084486001811413714" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;View from our Hotel in Port Elizabeth.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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".&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;We had one last destination to see before going home, the place where it all had begun all those months ago: Johannesburg.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Jozi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_nEck2BGjqOg/Ro-5l3NqWuI/AAAAAAAAADY/dRtp-ZVzsHI/s1600-h/jozi_soweto.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_nEck2BGjqOg/Ro-5l3NqWuI/AAAAAAAAADY/dRtp-ZVzsHI/s320/jozi_soweto.jpg" alt="" id="BLOGGER_PHOTO_ID_5084486564452129506" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;A poor area in Soweto.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;And so it was that our great adventure came to an end.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-2150991112616315124?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/2150991112616315124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=2150991112616315124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2150991112616315124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/2150991112616315124'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/07/notebook-of-return-to-my-native-land.html' title='Notebook of a Return to My Native Land - part 14'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_nEck2BGjqOg/Ro-vk3NqWkI/AAAAAAAAACI/1P8iL_eRTc0/s72-c/simons_town_cyclists.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-7442859872053909383</id><published>2007-07-07T04:32:00.000-07:00</published><updated>2007-07-07T05:00:56.187-07:00</updated><title type='text'>Nerd Food: Skype on Feisty AMD64</title><content type='html'>&lt;div style="text-align: justify;"&gt;Yet another Feisty adventure, another one worth documenting in the hope it will save someone else's time. As all AMD64 users know, we're the underdogs of the Linux world. Actually, that's me playing the victim. Its not that bad in terms of open source applications - pretty much everything that works on i386 works equally well on AMD64. The problem is with the commercial applications. For me, the key annoyances are flash and skype. Until recently I had solved my problems via the chroot root (pardon the pun), but after upgrading to Feisty - a few days after, I hasten to add - and setting up wireless with WPA (a mission I never found the time to blog about, I'm afraid), for some unexplained reason, my chroot lost all network access. Not just wireless, mind you, wired as well. This was rather unfortunate, as there is very few things you can do with skype in the absence of a network. Instead of troubleshooting the chroot - the pain just seemed far to great - I decided to look for alternatives. One such alternative is explained &lt;a href="http://ubuntuforums.org/showthread.php?p=475023#post475023"&gt;here&lt;/a&gt;. Basically, it makes use of the ia32 libs. So the steps are:&lt;br /&gt;&lt;br /&gt;1. Install the ia32 libs package in Feisty.&lt;br /&gt;2. Download the skype static binary. I used &lt;a href="http://www.skype.com/go/getskype-linux-static"&gt;this one&lt;/a&gt;.&lt;br /&gt;3. Do an ldd on the binary, grepping for "not found". Note: if you skipped step one, ldd will produce a message similar to "command not found". This got me for a little while.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ ldd ./skype | grep not&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4. Download all the missing packages from &lt;a href="http://packages.ubuntu.com/"&gt;ubuntu&lt;/a&gt;. In my case all I had to get was:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;libasound2_1.0.13-1ubuntu5_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;libsigc++-2.0-0c2a_2.0.17-2build1_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;libxcursor1_1.1.8-1_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;libxfixes3_4.0.3-1_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5. Unpack the libraries to a temporary directory:&lt;br /&gt;&lt;br /&gt;ar -x &lt;span style="font-family:courier new;"&gt;libasound2_1.0.13-1ubuntu5_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rm control.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rm debian-binary&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;tar -zxf data.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rm data.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;6. When you finish unpacking them all, you should end up with a usr directory, and inside of it a lib directory. Go to it, and, as root, copy all the contents to /usr/lib32. You may have to redo all the symlinks.&lt;br /&gt;&lt;br /&gt;7. Run ldconfig. If, like me, you missed step 6 ldconfig will complain about the symlinks. I ended up making hard copies, so I had to delete the hard copies and re-symlink by hand.&lt;br /&gt;&lt;br /&gt;8. As root, copy your new skype to a sane location such as &lt;span style="font-family:courier new;"&gt;/usr/local/skype&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;9. Create a launcher on the destop. Suggested command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/bin/linux32 /usr/local/skype/skype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it! Certainly easier than a chroot...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-7442859872053909383?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/7442859872053909383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=7442859872053909383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7442859872053909383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/7442859872053909383'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/07/nerd-food-skype-on-feisty-amd64.html' title='Nerd Food: Skype on Feisty AMD64'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-8272477133417056396</id><published>2007-06-17T06:08:00.000-07:00</published><updated>2007-06-17T07:16:08.614-07:00</updated><title type='text'>Nerd Food: Ubuntu in the Real World</title><content type='html'>&lt;div style="text-align: justify;"&gt;After raving and ranting about Ubuntu so many times, I decided it was time to put it to the test in really demanding conditions. And there are no more demanding conditions than those set by children, in particular when they are nearing their teens. So it was that I installed Feisty in two machines and gave them to my nephews. After 24 hours, the experiment had already produced some interesting results.&lt;br /&gt;&lt;br /&gt;The two machines in question are as follows:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Machine A is a 64-bit AMD, NVidia graphics card and 512 RAM (less than 4 years old);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Machine B is 32-bit AMD, ATI graphics card  and 512 RAM (around 6 years old).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;The installation in both was pretty straightforward, with all hardware detected. Additional software was easily installed via Synaptic. After the easiness, problems started to appear.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem one  is related to the well-known issues with ATI cards. &lt;/span&gt;Enabling restricted drivers doesn't seem to do anything at all (finds none suitable to my card), and enabling desktop effects without binary drivers results in some kind of video corruption (there's a 5 centimetre area on the right side of my screen that doesn't appear to be used). Even if I had managed to get the ATI card going with binary drivers - which I don't think I would have as this particular card is really old and unsupported - but even if I did, I would have had to setup XGL in order to use compiz, which is really not something I think the average user should do. On the positive side, NVidia support is brilliant. All I had to do on machine B was to enable the restricted driver and enable desktop effects. Compiz was up and running in no time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem  two is related to flash and 64-bit.&lt;/span&gt;  There is no available Firefox/Epiphany plug-in for flash, a vital element of the browsing experience for any young kid these days. I could have gone and installed some less standard flash support, but again, this is well beyond the call of duty for a normal user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem  three was DVD playout.&lt;/span&gt; I never quite got Totem-GStreamer playing encrypted DVDs. Not sure if it's me being thick and not understanding how to configure decss for GStreamer, but regardless of the underlying causes, my solution for this problem has always been to install Totem-Xine. In addition, I never quite got subtitles working with Totem-Xine so I play all movies requiring subtitles from XineUI (and here, for some reason, I never quite managed to increase the subtitle's font size but at least they're there). None of these steps make sense to the average user.&lt;br /&gt;&lt;br /&gt;At this point I had the machine sorted out, and ready for my two eager customers. The first one was impressed with her desktop for a few moments, until she realised I hadn't installed The Sims. Now, as far as games go, she isn't much of a gamer. In fact, for the last couple of years she only bought two PC games: The Sims and The Sims expansion pack. So yes, this was a vital requirement for the experiment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem four: the dreaded Sims. &lt;/span&gt;The installer worked well enough, as well as one could expect on a windows box even, up to the point when it finished CD 1. You are then expected to insert CD 2 and continue the installation. Alarm bells started ringing at this point. You see, UNIX and Linux have a very special relationship with devices. When you &lt;span style="font-style: italic;"&gt;mount&lt;/span&gt; your CD and start running applications from it, its neigh impossible to unmount it until you close all the open files you have on that device. In my particular case I had cd'd to /media/cdrom to run wine start.exe. This basically meant I could not unmount the cdrom properly until I exited from wine, but I couldn't really exit from wine until I got CD 2 mounted. I was about to restart the whole process again when it occurred to me that even if I didn't cd into that directory, I would still have start.exe as an open file (I needed to run it, of course) which meant that I would not be able to unmount the device. I'm not sure about this but logic seems to imply that wine cannot cope with installing programs with two or more discs because of the underlying UNIX mentality. I hope some wine person will prove me wrong.&lt;br /&gt;&lt;br /&gt;The temporary solution was to copy the contents of disc 1 to a local folder and execute start.exe from there. This worked a treat &lt;span style="font-style: italic;"&gt;until &lt;/span&gt;I got to disc 2. Here, for some random reason the installer refused to recognise the disc. Because the installer gives you absolutely no clues as to where it is looking for disc 2 I couldn't tell if there was something wrong with the CD or if it was just looking in the wrong place. After much fiddling it occurred to me that the installer was probably looking for disc 2 on the local directory. However, disc 2 had a similar structure to disc 1 (same setup directory) which meant I couldn't just copy it over disc 1. My final solution was to rename disc two's setup to setup2 while installing disc one, and then renaming setup2 to setup when it asked for disc 2. This perverted experiment actually produced the expected results and the installation completed successfully.&lt;br /&gt;&lt;br /&gt;However, the problems were far from over. After all that pain, the sims.exe binary simply refused to launch. It would start but do nothing afterwards. The problem appears to be as reported in the wine DB &lt;a href="http://appdb.winehq.org/appview.php?appId=768"&gt;here&lt;/a&gt; and &lt;a href="http://appdb.winehq.org/appview.php?iVersionId=4999"&gt;here&lt;/a&gt;. There isn't much I can do until wine support improves for the sims. As one would expect, this did not please my user at all.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem five: the crash. &lt;/span&gt;When I thought everything was quiet and everyone was happy enough, it all collapsed in front of me. Two kids were happily playing with the machine when electricity suddenly went off. On reboot, they were stuck on the fsck screen, at which point &lt;span style="font-weight: bold;"&gt;they proceeded to randomly press keys&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;switch the computer on and off, probably several times&lt;/span&gt;, in a desperate attempt to fix it. Apparently this technique worked quite well with their previous box running Windows 95.&lt;br /&gt;&lt;br /&gt;This, methinks, is one fundamental problem with the current Ubuntu boot. If some operation takes too long, you are thrown back in to the console with huge amounts of text output. This is fine for a nerd user but an absolutely scary experience for any user. It would be much better if one could have some kind of user interface with a massive warning saying "DO NOT SWITCH THE COMPUTER OFF" or something like that. Text mode just scares people off, and when it is compounded with things like "running fsck" then there's absolutely no hope of survival. The end result of all of this was that the machine was rendered unbootable by the time I got there. Yep, you read that right. First time it went all the way to fsck again and froze, second time it froze on grub, the exact same point it froze on for the subsequent twenty reboots.&lt;br /&gt;&lt;br /&gt;So here I am on the local Internet cafe, downloading an Ubuntu amd64 ISO image, preparing myself to re-install it yet again. &lt;span style="font-style: italic;"&gt;Ele há dias...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-8272477133417056396?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/8272477133417056396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=8272477133417056396' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8272477133417056396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/8272477133417056396'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/06/nerd-food-ubuntu-in-real-world.html' title='Nerd Food: Ubuntu in the Real World'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-3830038471062605264</id><published>2007-06-04T09:15:00.000-07:00</published><updated>2007-06-04T10:02:00.853-07:00</updated><title type='text'>Nerd Food: Merging and Branching Procedures</title><content type='html'>&lt;div style="text-align: justify;"&gt;It seems version control is a popular topic again, thanks to the ever courteous Linus. If you haven't seen the talk he gave at Google, do &lt;a href="http://codicesoftware.blogspot.com/2007/05/linus-torvalds-on-git-and-scm.html"&gt;watch&lt;/a&gt; it as  it's  quite interesting. Linus, in his usual so-offensive-its-funny style, criticises SVN to death. I got to say that I quite like SVN, perhaps because I've been forced to use ClearCase, SourceSafe, RCS and CVS for far too long. My only complaint  with SVN has always been the terrible merging, something that Linus rightly criticises on his talk. The good news is it appears the most severe problems with merging will be fixed on the next SVN &lt;a href="http://subversion.tigris.org/merge-tracking/"&gt;release&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Linus' talk did make me more aware of distributed version control though, but I'm not entirely convinced it would work in a commercial software house. After all, we already have a hard time with branches - let alone having multiple repositories...&lt;br /&gt;&lt;br /&gt;All this talk about version control reminded me of a set of procedures for merging and branching I once wrote. I can't take all the credit, of course, since my good friends Kevin and Chris - the ClearCase genius - fixed some mistakes and added important bits. Here is the procedure, in the hope that someone else may find it not entirely without merit. Apologies for the (lack of) indentation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Merging and Branching&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;1. Trunk (HEAD/LATEST/[insert version control term here]) is always compilable and stable.&lt;br /&gt;&lt;br /&gt;2. When a new project is started, a set of branches are created:&lt;br /&gt;2.1. Integration branch: off trunk;&lt;br /&gt;2.2. Branch for each developer (or whatever the required granularity is, one branch per 2 developers, etc.): off the integration branch;&lt;br /&gt;2.3. All branches should be named sensibly and follow a repository-wide convention (e.g. PRODUCT_TEAM_PROJECT or something equally meaningful).&lt;br /&gt;&lt;br /&gt;3. Each developer works on his/her own development branch. Developers must check in every day (PC never contains unsaved data), but are encouraged to do so more frequently.&lt;br /&gt;&lt;br /&gt;4. When the developer is happy enough with his/her changes, he/she "rebases" (aka forward merges), that is:&lt;br /&gt;4.1. Updates development branch to the current state of the integration branch (this should be done as often as possible anyways);&lt;br /&gt;4.2. Ensures no one else is merging to the integration branch;&lt;br /&gt;4.3. Tests development with the new changes (in theory runs his/her [J|N]Unit tests, in practice, well... :-)&lt;br /&gt;4.4. "merges back", that is updates integration branch to the state of the development branch;&lt;br /&gt;4.5. Features should be merged one-at-a-time, that is if a developer is working on 5 features for a given release, he/she should merge to integration each feature at a time, allowing other developers to pick and test each change rather than one huge patch.&lt;br /&gt;&lt;br /&gt;5. While the project is in development, the integration branch may be rebased from the trunk, but never the opposite (see small bugfixes below).&lt;br /&gt;&lt;br /&gt;6. When the project enters development testing (feature freeze):&lt;br /&gt;6.1. All developers rebase from integration and merge back to integration as described above;&lt;br /&gt;6.2. Developers test the current state of the integration branch (normally this means validating the functionality they've coded). Integration branch is by now equal to dev branches;&lt;br /&gt;6.3. Bugfixes are applied to development branches, and rebased/merged back to integration (iterate till right).&lt;br /&gt;&lt;br /&gt;7. When integration branch is ready for a release to QC (UAT):&lt;br /&gt;7.1. Release branch is created with unique release number, off integration branch. (i.e. release is "labeled", but this is equivalent to branching in SVN). All dev branches are locked;&lt;br /&gt;7.2. Release is shipped to QC and release branch is locked;&lt;br /&gt;&lt;br /&gt;7.3. If release passes QC, ship it. If release needs another spin:&lt;br /&gt;7.3.1. Bugfix branch is created with the bug ticket number and the version number. This is off the integration branch;&lt;br /&gt;7.3.2. Bugfix is made, tested in bugfix branch and rebased back to integration;&lt;br /&gt;7.3.3. When all bugfix branches have been merged in, integration branch is dev tested;&lt;br /&gt;7.3.4. New release branch with release number is created and tested. rinse, repeat;&lt;br /&gt;7.3.5. If required, a "special" release branch is created for the final release so we can distinguish between release candidates and final release.&lt;br /&gt;&lt;br /&gt;8. When a release passes QC and is shipped:&lt;br /&gt;8.1. No one is allowed to merge back to trunk (this has to be serialized across all teams using the trunk and must be done asap after the release);&lt;br /&gt;8.2. Integration branch, which at this point is identical to the final release branch, is rebased off trunk;&lt;br /&gt;8.3. Integration branch is tested (QC should get involved);&lt;br /&gt;8.4. Integration branch is merged back into the trunk;&lt;br /&gt;8.5. At this point the release is complete.&lt;br /&gt;&lt;br /&gt;9. Small bugfixes:&lt;br /&gt;9.1. Branch of trunk with version number and bug ticket number (just integration branch will do, no need for dev branches);&lt;br /&gt;9.2. Do bugfix in integration branch;&lt;br /&gt;9.3. Dev test integration branch;&lt;br /&gt;9.4. Create release branch off integration branch;&lt;br /&gt;9.5. QC release branch;&lt;br /&gt;9.6. Ship;&lt;br /&gt;9.7. Rebase / merge back to trunk.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;10. Ideally, once all the merging is done, branches should be deleted IF the version control system keeps the history of the merged files. This greatly avoids clutter (i.e. you can actually find a branch when looking for it), makes the repository smaller and improves the performance of a few operations.&lt;br /&gt;&lt;br /&gt;11. Ideally you should be running something like &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; on selected branches (such as HEAD and integration).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-3830038471062605264?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/3830038471062605264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=3830038471062605264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3830038471062605264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/3830038471062605264'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/06/nerd-food-merging-and-branching.html' title='Nerd Food: Merging and Branching Procedures'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-560373494511148638</id><published>2007-06-02T02:56:00.000-07:00</published><updated>2007-06-05T03:01:08.860-07:00</updated><title type='text'>Nerd Food: On Ubuntu, DELL and the Playstation 3</title><content type='html'>&lt;div style="text-align: justify;"&gt;Unlike many ubunteros, I'm not entirely pleased with the DELL "victory". I mean, I was initially, but reading the small print made me cringe uncontrollably. As a quick summary, for those not following the latest developments, DELL setup a suggestions website called IdeaStorm which was quickly swamped with "I Want Linux" comments. First DELL thought they wouldn't be able to pick and choose from the myriad of available Linux distros, but eventually someone upstairs concluded that Ubuntu was popular enough. As a result, DELL now has a limited range of models with Ubuntu pre-installed (a better description is available &lt;a href="http://direct2dell.com/one2one/archive/2007/05/01/13147.aspx"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;While the idea is a good one in principle, the devil is in the details. These machines will not be able to play any of the codecs modern users require, and there will be no DVD support (as in, you can't play movies in encrypted DVD format). &lt;a href="http://www.ehomeupgrade.com/entry/3904/ubuntu_dell_pc"&gt;This&lt;/a&gt; comment is very much telling about the Linux attitude towards the codecs: "they are not free!", "you'd have to install them on windows anyway!", "it's not that hard!".&lt;br /&gt;&lt;br /&gt;I've criticised this attitude in the &lt;a href="http://mcraveiro.blogspot.com/2007/03/nerd-food-on-world-domination.html"&gt;past&lt;/a&gt; and will have to do so again. Just because Microsoft, the biggest desktop company in the world, can get away with things, it doesn't mean that all aspiring desktop-wannabees can do it too. Mac is gaining market share because their stuff "just works" - or at least, its perceived as such by everyone. We're not trying to be like Microsoft, we're trying to improve on them.  I'm not a stategist, but it seems obvious that  DELL and Ubuntu  should have talked with &lt;a href="http://www.fluendo.com/"&gt;Fluendo&lt;/a&gt; first before embarking on this adventure and made sure the full range of codecs was available as standard. This would have been great for all parties involved. Fluendo would have agreed to a massively discounted price, a still rather rewarding proposition due to  the potential in terms of volume.  &lt;a href="http://www.codeweavers.com/"&gt;Codeweavers&lt;/a&gt; could have also had a piece of the pie, since software such as iTunes is popular with the crowds. This would have been a more challenging proposition a) because Microsoft seems to dislike Wine quite a lot (and for all we know explicitly asked DELL not to include it) and b) as people start installing random Windows software, the support overload would grow beyond DELL's capacity.&lt;br /&gt;&lt;br /&gt;I know Ubuntu has tried to make configuration of codecs and restricted drivers easier but to be absolutely honest, both failed when I tried to use it. The technology does not appear to be entirely mature yet. Now, if the same happens with the newly converts, they will most likely say that "Linux does not work". This was a great chance to woo new users with the beauty of Compiz (if not Beryl), GStreamer et al, but I cannot help but think that a lot of new buyers will end up giving up on Linux because they won't get the whole "configuration" thing. And it's not because Windows is easier to configure; its because Linux is configured &lt;span style="font-style: italic;"&gt;differently&lt;/span&gt;, and the 50 or so USD you save are not enough to compensate the time needed to learn a new way of doing things.&lt;br /&gt;&lt;br /&gt;Which brings me neatly to my next topic. Even more important than DELL is the Playstation 3. There are over 6 million PS3's out there. Some estimate Ubuntu to be installed in 6 to 20 million computers worldwide, so adding 6 million to that number would have a major impact. And the relationship would be entirely symbiotic, since Sony managed to price the PS3 out of the console range and into the low-end PC range; it is possible to buy a DELL model, &lt;span style="font-style: italic;"&gt;including&lt;/span&gt; a TFT monitor, for around the same price of a PS3 - which is, of course, monitorless. I personally wanted to get a PS3 and use it as a PC, but was not amused when I found out that much of its functionality doesn't work under Linux (including accelerated graphics, wireless, problems with sound - and let's not forget that Flash seems to be 32-bit x86 only at the moment). Not only that, but the entire installation process is &lt;a href="http://psubuntu.com/2007/04/01/installing-feisty-beta/"&gt;non-trivial&lt;/a&gt;, meaning that only die-hard ubunteros are going to go for it.&lt;br /&gt;&lt;br /&gt;Now, you tell me: if you were a manager at Sony, would you not have started talking to Linux vendors long before the PS3 was due to launch to ensure Linux would be 100% compatible with your hardware? And would you not select a Linux vendor and pre-install the distro? After all, many console users are not IT savvy, they see the console as yet another "white good" in their house. If not, ask youself: what is the point of buying a "'Computer', Not A Console", as Sony's CEO said, if it has no decent general purpose software on it?&lt;br /&gt;&lt;br /&gt;Its hard not to feel that we've wasted two great opportunities to fight for market and mind share.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; check &lt;a href="http://www.bryceharrington.org/Photos/DellUbuntu/"&gt;this&lt;/a&gt; for some pics of the setup of a new DELL laptop.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2672427473119923109-560373494511148638?l=mcraveiro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mcraveiro.blogspot.com/feeds/560373494511148638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2672427473119923109&amp;postID=560373494511148638' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/560373494511148638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2672427473119923109/posts/default/560373494511148638'/><link rel='alternate' type='text/html' href='http://mcraveiro.blogspot.com/2007/06/nerd-food-on-ubuntu-dell-and.html' title='Nerd Food: On Ubuntu, DELL and the Playstation 3'/><author><name>Marco Craveiro</name><uri>http://www.blogger.com/profile/01039195055988254979</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2672427473119923109.post-1065824803882336069</id><published>2007-05-24T16:35:00.000-07:00</published><updated>2007-05-31T05:33:06.594-07:00</updated><title type='text'>Nerd Food: On Maintenance</title><content type='html'>&lt;div style="text-align: justify;"&gt;The many years I've spent working for the bespoke industry and using free software finally made me understand the obvious: the single most important aspect in the whole of software development is maintenance. Yes, you heard it right. Its not the language, not the platform, not the methodologies, not the technologies involved, not even the pretty Gantt charts. All these tools are important, of course, but if one looks at the entire lifespan of a program, maintenance overshadows every other aspect by a wide margin. You may think I'm not saying anything new here, and with good reason. Classic texts like Bertrand Meyer's Object Oriented Software Construction already pointed out that the highest cost in a software project is maintenance; Meyer was not the first, by far, to pick up on this. The problem was not with their diagnosis but rather with the cure they proposed. Allow me to expand on this.&lt;br /&gt;&lt;br /&gt;The first thing one must realise is that code is in itself the only complete system specification there is. I'm not going to spend much time explaining this view of the world since I cannot possibly improve upon Jack Reeves' "What is Software Design?". Any experienced developer knows that the only way to really understand how a system works is by looking at the source. Let's face it, in the real world manuals don't exist. Comments are sketchy and, more often than not, totally wrong. You may get developers to write good documentation on the early stages but in all these years I'm yet to see a large five-year old project properly documented. The only thing you can always rely on, the only thing that truly documents the behaviour of a program is its source code. I know, I know, you'll bring up Knuth and literate programming. Unfortunately, I have no option but to check-mate you with real world experience. Sad truth is, most people don't even know about Knuth. While Doxygen et al are nice and make documenting much easier, very few people bother making sure the text matches the source when they are on a tight deadline, and the life of a bespoke developer is nothing but one tight deadline after another, &lt;span style="font-style: italic;"&gt;ad infinitum&lt;/span&gt;. You can imagine your project manager's face when you explain that the deadline won't be met because you still need to finishing off commenting.&lt;br /&gt;&lt;br /&gt;Speaking in very empirical terms, most projects seem to have an average lifespan of around seven to ten years, with the caveat that the final stage can drag on for a very long time. The first two or three years are all about adding large amounts of new features, cramming in as much as possible in the shortest possible time. During this period, lurking in the shadows, there is a steady increase of complexity. If these things were easily quantifiable, I'd expect the data would display a high correlation between the number of added features and the increase in complexity (i.e. each feature dramatically raises the complexity bar). Thus, adding each feature (and fixing each bug) starts taking longer and longer over time. At some point the project will reach the "complexity barrier"; this is the point at which adding new features (or fixing existing bugs) is so expensive that it's cheaper to create a new product from scratch, 
