Firefox 23 breaks DuckDuckGo (kinda). Well here’s a fix

Firefox has 2 search bars. Kinda. The address bar and the search box used to be configurable separately so that the search engine chosen for the address bar is irrelevant to the search engine set for the search bar. This behaviour has been disabled in FF23; the search engine selected in the search bar dictates the engine used in the address bar (the keyword.URL parameter doesn’t actually do anything anymore). So those of us who want 2 separate address bars are left out to dry.

UNTIL NOW. The Keyword Search plugin available here solves all your problems.

“Leap service is not running”

Happens quite a bit on Windows 7. The Leap Motion device is running nicely for a while, then you unplug it and plug it back in, and boom: no service. Simple solution is to restart the service.

Start > All programs > Accessories > (Right Click ‘Command Prompt’) > Run As administrator c:\> net start LeapService

If something similar happens on Linux, where the Leap Motion controller used to work and just suddenly stops, check your leap daemon. ensure none of the daemons are running $ ps aux |grep leapd . Kill all the daemons that are running $ killall -9 leapd and then restart the daemon $ leapd

Using Linux RT Kernel

It’s taken me a while to mess around with the Linux RT system, so here’s a somewhat full documentation of what I did. I assume some Linux compiling knowledge and a safe environment to actually do this, such as a chroot environment or a virtual machine or your roommate’s computer who isn’t going to know what happened.

I’ll start with a simple program in C to test the RT Kernel. Get it here, adapted from the official docs’ provided example. You can compile it on your regular stock kernel as such:
$ gcc -o test_rt test_rt.c -lrt
You can then run the program a number of times to see what the minimum run time is.
$ time sudo ./test_rt
My personal record is about 10 seconds on a stock kernel on VirtualBox running a single CPU. However, we know that testing this program on a standard machine with low load is not indicative of a `real` real time system. So we now run our program under high load. But first, we need to simulate that high load:
$ sudo stress -c 1000 -i 100 -m 2 --vm-keep -t 120
(note that the -m 2 uses (2 * 256)MB of memory, so make sure you have enough!)
And then, we’ll run the test_rt program again.

Patching the Kernel

In this example I’m working with kernel 3.8.4. You may want to use a different version of the kernel, in which case look for the highest version of the patch available here:
And download the corresponding vanilla kernel here:

And moving along, here’s how we patch:

  1. In your home directory go to the Download folder and download the patch file in bz2 format (mandatory for this exercise) and the vanilla kernel.
  2. Unpack the kernel, and go into the directory
    $ tar -xjvf linux-3.8.4
    $ cd linux-3.8.4
  3. Apply the patch
    $ patch -p1 < <(bunzip2 -c ../patches-3.8.4-rt2.tar.bz2)
  4. Configure the kernel using the config file from your existing kernel
    $ cp /boot/config-$(uname -r) .config
    $ make oldconfig

    1. when prompted for preemption model, select option 5 – Fully Preemptible.
    2. When prompted for debug options do not select it. Turning on the debug flags (which is the default option) will decrease performance.
    3. For every other prompt you can just press which selects the default
  5. Build the kernel
    $ make-kpkg clean
    $ CONCURRENCY_LEVEL=$(getconf _NPROCESSORS_ONLN) fakeroot make-kpkg --initrd --revision=0 kernel_image kernel_headers
  6. Install the .deb files
    $ cd ../
    $ sudo dpkg -i linux-headers-3.8.4-rt2_0_i386.deb linux-image-3.8.4-rt2_0_i386.deb
  7. Reboot into your new kernel. Note: the steps above do not make this kernel your default. You will need to select the appropriate kernel from your grub menu

At this point you can try running the benchmarking script again. My record was under 2 seconds, down from the 10 seconds mentioned above.

Note: If your performance actually decreases, you may want to check to make sure your debugging flags were turned off during compile.

Installing CDT as a plugin in Eclipse.

This is only relevant if you already have Eclipse IDE, perhaps for developing Java, and you want the relevant C/C++ development plugins. If you are only developing on C/C++, you could just as easily download CDT in a standalone IDE right here

The following is an alternative, which only installs the relevant CDT plugins.

  1. Start Eclipse
  2. Help > Install New Software > “Available Software Sites” > “Add”
  3. Name: CDT, Location: > OK
  4. Now you’re back to the Available Software popup, the first label at the top says “Work With”. Click the drop-down, select CDT (or “All”. Whatever)
  5. Select the relevant C/C++ tools.

Other plugins you might find useful:
Git stuff:
Linux Tools – Valgrind, Gprof, etc:

How to insult your hires

So some dude from a “Talent Recruitment” company insulted me. Here’s how:

From: Shawn Low
To: <me>;
Subject: Career Opportunity
Sent: Thu, Jan 3, 2013 9:24:41 AM

Hi Alvin,
Could you please contact me on my mobile (+6012xxxxxxx) or via email (, giving me your present contact number, for a quick chat about a career opportunity?
This is Shawn here from Talentsbay, a headhunting firm. Thanks.

Best Regards,
Shawn Low
Principal Consultant

Talentsbay Sdn Bhd (932119-T)
Suite 27-11, Penthouse, Signature Office,
The Boulevard, Mid Valley City,
Lingkaran Syed Putra,
59200 Kuala Lumpur, Malaysia

Mobile: +6012 xxx xxxx
Tel: +603 2297 xxxx
Fax: +603 2287 xxxx
Website: www. talentsbay .com

I wasn’t interested. Partly because I don’t trust recruitment agencies. Mostly because I’ll be in the US for a while. I decided to tell him that. Politely.

 Subject: Re: Career Opportunity
From: Dartarrow <me>
Date: Thu, January 03, 2013 9:10 pm
To: “Shawn”

Sorry. Not interested. How do us you find me anyway? I need to remove my online profiles

I’m pretty sure that reply was rather polite. His next reply however sounded like a scorned girlfriend you dumped for a 17yo cheerleader.

From: “Shawn Low”
To: “Dartarrow”
Subject: RE: Career Opportunity
Date: Thu, 03 Jan 2013 18:48:11 -0700

Sorry, the email must have been sent to you by mistake by my assistant. It was meant for another Alvin, an intelligent, smart, qualified and high-calibre candidate. I do not know how your email could have been included in our privileged list of high-performing candidates.

No signature, no “sent from my assistants iPhone”, no “regards”, no “whoopsies”.
And just as I thought we were getting along

svn:ignore directory

I don’t know how the book recommends, but here’s how i do it. Took a while to figure out:

svn propset svn:ignore "*" cache/classes/

remember the double quotes and backslash at the end.
Also the effects would be available immediately – you’d see the files with “?”s immediately disappear

Why MCMC is impotent

Malaysian Communications and Multimedia Commission (MCMC) has the job as *the* steering force for Teh Internetz in Malaysia. As far as I remember they have the job of regulating the ISPs which they failed at miserably.

Somebody somewhere lately bestowed upon them the role of witch-hunters, moral-police, and National Hypocrites. Which is about all they’re good for anyway. But now they’re bitching about not finding proof? Did you morons even look? Why don’t you start right here, and here. And while you’re at it:

Fix Your Fucking Website

Do you guys understand just how embarrassing it is that the Communications and Multimedia Commission website does not work?

10 bucks says they’ll blame Indonesian hackers soon.

How to test your webcam in Ubuntu

Testing your webcam is done with mplayer, first though you’ll have to install mplayer as so:

sudo aptitude install mplayer

then fire up mplayer as so but in one line:

mplayer tv:// -tv driver=v4l2:width=320:height=240:fps=200:device=/dev/video0 -nosound

And you SHOULD see your pretty face on the screen. Good Luck.

Collectd Python plugin

One of the most interesting development in collectd recently (4.9) would have to be the availability of a Python binding. You can find the man page here with some samples.

Another interesting feature available with collectd plugins is the availability to overwrite the `hostname`. This opens up a whole new page to collectd, including what I’m attempting right now which is active checks.

In any case, a sample python plugin which overwrites the `hostname` would look like so:

# Sample Python module to use python plugin 

import collectd

#== Our Own Functions go here: ==#
def configer(ObjConfiguration):
   collectd.debug('Configuring Stuff') 

def initer():
    collectd.debug('initing stuff')

def reader(input_data=None):
    metric = collectd.Values();
    metric.plugin = 'python_plugin_test'
    metric.type = 'gauge'
    metric.values = [100] = 'OverwritenHostname'

#== Hook Callbacks, Order is important! ==#

Lets assume a few things here:

1. Collectd installation:

2. python plugins

3. plugin file will be in

The relevant corresponding config in /opt/collectd/current/etc/collectd.conf would look something like:

LoadPlugin python
<Plugin python>
  ModulePath "/opt/collectd/current/share/python/"
  LogTraces true
  Interactive false
  Import python_plugin_test
  <Module python_plugin_test>
    Test "This" "are" "the" "inputs"

Dont forget to test your plugins by running sbin/collectd -C  etc/collectd.conf -T If this causes nothing to be printed on the STDOUT, that means your plugins are good.

N900 development Part 2

Before you continue on reading, understand that a prerequisite is for you to start with part 1 and especially Maemo’s Getting Started guide.

For this guide, I’ll be showing how to create multiple widgets in one window. The code from Maemo provides you one window with one widget (the button). You cannot add on more widgets to the example just like that. Adding >1 widget to a HildonWindow will still allow the program to compile, however if you run it you will have to expect an error message that looks something like “… as a GtkBin subclass a HildonWindow can only contain one widget at a time; it already contains a widget of type …”

So the alternative is to create one vBox (or hBox) and pack all other widgets (including other hBox and vBox) inside of it. The end result from the sample should be an applicati
on with an interface that looks like this

3-button hello world app on N900 emulator

3-button hello world app on N900 emulator

The blog formatting makes it a bitch to paste my code here, so just download the code into scratchbox environment with something like this:


You should now be able to compile the program with the following line:

gcc hworld.c `pkg-config hildon-1 --cflags  --libs` -o hworld 

Execute the programe


And voila.

Take note of how the hbox is prepared and then packed into the vbox. Understanding the interaction is key to your own gui development with C, GTK, and Hildon.

Credit where credit’s due, I stole and modified the code from Maemo’s Wiki

N900 Development Part 1

This section shows you how to get started (Your baby steps in N900 development starts by starting up the environment. And gettin some sample codes from the community).

Development for Maemo currently utilizes GTK, so if you’re planning on developing something for Maemo devices I’d recommend you start here and then proceed to the Maemo Wiki.

Step 1 in development is setting up the SDK which can be done by following the guide here or here

If you’ve already done that, then start up Xephyr (and here’s how). From a terminal first startup the SDK

sudo sh -c 'echo 0 > /proc/sys/vm/vdso_enabled' 
Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb & 

Go into scratchbox


Switch to the x86 environment

sb-conf se FREMANTLE_X86 

export the display and start up

export DISPLAY=:2 start 

You will get a screen that looks like this
xephy-n900. Remember to click, click + drag and just play with it as much as possible to just make sure you get familiar with the interface :)

You can then look through this pseudo-maemo-emulator for applications you can install. You can start with the sample widget – the process of which is nicely documented here. Or better yet, write (and compile) your own obligatory Hello World program as documented here

Maemo SDK installation on Linux

There are 3 Options on how to install the Maemo 5 SDK,
1. The GUI Installer (recommended)
2. Script based installer.
Instruction for both can be found here
3. Manual installation

This is a Manual Installation instruction, covering the installation of Scratchbox, Nokia + Maemo binaries and Xephyr X server – which are the prerequisites for development. The host machine here is Debian based machine. so k/ubuntu will work. I’ve tried this on Kubuntu 9.10 with a 32-bit architecture and can confirmt that it works. I can’t guarantee you it will work on a 64-bit machine.

  1. Install Xephyr
  2. sudo aptitude install xserver-xephyr

  3. Download / Install scratchbox
  4. Note: before you start, take note that scratchbox installs by default in “/scratchbox” so make sure you have about 4GB’s in your “/” partition.
    sudo sh -c 'echo "deb maemo5-sdk main" > /etc/apt/sources.list.d/scratchbox.list'
    sudo aptitude update
    sudo aptitude install scratchbox-core scratchbox-libs scratchbox-devkit-qemu scratchbox-devkit-debian scratchbox-devkit-doctools scratchbox-devkit-perl scratchbox-toolchain-host-gcc scratchbox-toolchain-cs2007q3-glibc2.5-arm7 scratchbox-toolchain-cs2007q3-glibc2.5-i486 scratchbox-devkit-svn scratchbox-devkit-git scratchbox-devkit-apt-https

  5. Setup Scratchbox
  6. in the terminal, first make user you are logged in as your default user. Not the root user. And type:
    sudo /scratchbox/sbin/sbox_adduser $USER yes
    sudo ln -s /scratchbox/users/$USER/home/$USER /scratchbox/users/$USER/home/user
    This is optional, But I’d do it anyway just in case : sudo sh -c 'echo "nameserver" >> /scratchbox/etc/resolv.conf'
    sudo sh -c 'echo "nameserver" >> /scratchbox/etc/resolv.conf'

  7. Setup Mamemo Packages
  8. You will need to ensure:
    1. your group membership is registered in the current terminal
    2. VDSO support is disabled,
    to do so run these in the terminal: newgrp sbox
    sudo sh -c 'echo 0 > /proc/sys/vm/vdso_enabled'

  9. Log into scratchbox environment
  10. /scratchbox/login If this works, you will be inside of the scratchbox environment; and you will see something this in the terminal: [sbox->:~]>

  11. Configure the scratchbox x86 and armel target as such:
  12. sb-conf st FREMANTLE_X86 -c cs2007q3-glibc2.5-i486 -d perl:debian-etch:doctools:svn:git -t none
    sb-conf st FREMANTLE_ARMEL -c cs2007q3-glibc2.5-arm7 -d qemu:perl:debian-etch:doctools:svn:git -t qemu-arm-sb
    it is safe to ignore the warnings here.

  13. Now download the rootstraps:
  14. wget
    If networking doesn’t work inside of scratchbox, check your DNS server settings. Unfortunately there’s no `ping` inside of scratchbox so the only way to do this is to edit /scratchbox/etc/resolv.conf from OUTSIDE of scratchbox and paste the following:
    From inside scratchbox, paste the same lines to “/etc/resolv.conf”

  15. Now switch to the x86 target and install the binaries,
  16. sb-conf se FREMANTLE_X86
    sb-conf rs maemo-sdk-rootstrap_5.0_i386.tgz
    sb-conf in -edFL

  17. Add the nokia repos
  18. You’ll need to do some apt trickery here for maemo related items. So first accept the EULA here and copy the URL, paste the it into /etc/apt/sources.list (inside scratchbox) and then:
    apt-get update
    fakeroot apt-get install maemo-sdk-debug nokia-binaries nokia-apps
    Keep the url, you will need it later on in this installation

  19. fix the scratchbox symlinks
  20. According to the instructions from maemo you will need to remove a symlink and replace it with a folder so do this in the terminal: rm /targets/FREMANTLE_X86/opt
    mkdir /targets/FREMANTLE_X86/opt

  21. repeat the same for armel architecture
  22. At this point the x86 target is setup, you will need to do the same for the armel target.
    edit the file /etc/apt/sources.list and paste the URL that you got previously after agreeing to the EULA
    sb-conf se FREMANTLE_ARMEL
    sb-conf rs maemo-sdk-rootstrap_5.0_armel.tgz
    sb-conf in -edFL
    apt-get update
    fakeroot apt-get install maemo-sdk-debug nokia-binaries nokia-apps
    rm /targets/FREMANTLE_ARMEL/opt
    mkdir /targets/FREMANTLE_ARMEL/opt

  23. Startup Xephyr, with the x86 targets pointing the output to it
  24. export DISPLAY=:2 start
    And from OUTSIDE the scratchbox environment: Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb & And you will be greeted with a very reassuring emulator-like environment emulating the Maemo 5 on a Nokia N900 😀

DailyChilly recovery after pwned

Disclaimer: I’m not encouraging breaking and entering or defacing other peoples websites. Regardless of how dumb they may be or how tempted you are to show your l33t-ness
So the Daily Chilli was pwnd at sometime before Sun Feb 14.

Daily Chilli in all its pwnness

Daily Chilli in all its pwnness

This was taken from my Mum’s PC on her brand new Zen theme. Don’t laugh. This was about 12:30am

Daily Chilli Downtime message. Uber coolness

Daily Chilli Downtime message. Uber coolness

Screenshot from my N900. Timestamp is about 1:30am

Daily Chilli - Reinstallation of the CMS

Daily Chilli - Reinstallation of the CMS

By this time I was on my Laptop, and was trying to see if they got their site backup, and was greeted with this. If you notice, the only thing I’d be able to click is “Next” so I did.
Joomla DB installation? I think...

Joomla DB installation? I think...

I can’t imagine what the administrators must be thinking, doing this so publicly on a public website. The only thing I could deduce was that the sysadmins sucked. Which could only mean one thing. There will be a phpMyAdmin somewhere. So I looked for in the standard locations and found
yes. we all need phpMyAdmin (PMA). Definitely.

yes. we all need phpMyAdmin (PMA). Definitely.

Compaq CQ40 Wireless Driver

This did not work out-of the box for me with Kubuntu 9.10.
`lspci` showed me that the wireless device was:
03:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)
This is messed up. The driver provided by the manufacturer worked fine with the previous kernels and the previous releases of kubuntu (kernel 2.6.28 ). After some googling I found a broadcom driver in the Ubuntu ‘restriced’ repos which is provided by the package `bcmwl-kernel-source`.

So if you have the “restricted” repositories turned on in your machine this will work fine. You’ll just need a reboot sudo aptitude install bcmwl-kernel-source

What you need to know about the Nokia N900

Alright my full post on this is really long so here’s a minified version with links to the full text. I never wanted this to be a simple list, because I don’t feel it does justice to the product. So if something mentioned here is new to you, find time to read the full text.

1. the Nokia N900 is not a smartphone read more…
2. It’s not meant to give you “web-like” experience read more…
3. It is not sexay read more…
4. It uses a resistive screen read more…
5. The display is almost entirely landscape read more…
6. The Hardware Keyboard is pretty small read more…
7. Choices of available apps are small and scattered read more…
8. Social Media integration isn’t quite there yet read more…
9. TFT LCD and not AMOLED read more…
10. OGG support is not default read more…
11. The MyDocs partition is on vfat read more…
12. Pluging in the N900 to your laptop will unmount ‘MyDocs’ read more…
13. The Battery life is just as expected (approx 6 hours). read more…
14. It runs on the `armel` architecture and not `arm` read more…
15. Multitasking is awesome read more…
16. The peripherals included are of pretty high quality read more…
17. The hardware is deceptively great read more…
18. Almost anything from linux – now at your palm read more…
19. Yes a terminal comes preinstalled read more…
20. You really own your phone read more…