World cup 2010, 3 easy steps to mute the VUVUZELA noise

to celebrate the come back home of the French team, I’d like to share with you the easiest way to cut the annoying buzzing of vuvuzela  in Ubuntu (compatible with all Gnome system).

1- Download and install PulseAudio Multiband EQ

2- Create the filter by copying the following lines in to the new file ~/.pulse/presets/vuvu-cut.preset

  • create the folders:
    mkdir ~/.pulse
    mkdir ~/.pulse/presets
  • the 4 frequencies to mute: 233Hz, 466Hz, 932Hz and 1864Hz (thanks
    nano ~/.pulse/presets/vuvu-cut.preset
Multiband EQ
  • save the file and exit:
    Ctrl+O and Ctrl+X
  • prevent the changes of the presets file by changing the right:
    chmod 444 ~/.pulse/presets/vuvu-cut.preset

3- Now, when you want to watch a match

  • open the soft in the gnome menu Applications/Sound & Video/PulseAudio Equalizer
  • select EQ Enabled and choose the vuvu-cut in the Preset list.

Enjoy the rest of the World Cup 2010 without the French team (I have to confess now, I’m a bit sad for my country).

Sources: for the frequencies and idea for the PulseAudio EQ installation/source
– French team for the motivation to write this article.


Cheap and easy DIY iPhone steering wheel for fantastic driving sensations

The intro story
The brother of Alice (Thanks Math) given to me a 2G iPhone 2 years ago. 
I used it a lot but 6 months later, the Home button stopped to work (it’s a well known problem with iPhone).
I tried to fix it but without success and finally bought a 3G iPhone.
Last week, I decided to retry to fix the first generation iPhone. After some solderings (flex cable of the Home button broken), the iPhone has resuscitated (the back cover is a bit damaged, it’s very hard to open).
Well, what to do with 2 iPhones, a car game and a little boy?
Yes, of course, a multiplayer race. But for my 4 years old boy, the iPhone is not really ideal to hold, specially to play a car game.
Ok, no problem, I decide to transform the iPhone in a real car simulation experience. 
And what you need to achieve this ambitious project? a steering wheel, of course!

Question: How to build a DIY iPhone steering wheel for next to nothing? See bellow.. 

What you  need:
 – a 2G iPhone (can work with 3G)
 – a steering wheel toy
 – an original iPhone packing (here first generation)
 – a bit of scotch-tape
 – 4 screws (for plastic)

 – an electric drill (like Dremel)
 – a screwdriver

 – between 1 and 2 hours depends how you are good with your hands!

1. Find an unused toy with a steering wheel. In this case, annoying and very noisy toy for the parents.

2. Pull out the wheel (4 screws to remove) and put the iPhone on the center to get to an overall view.

3. Find the original box of the iPhone (again thanks to Math to have given to me the full package) and get the transparent plastic packing.
Put it in the middle of the wheel, check the alignment and mark with a pen the position of the plastic piece to the wheel.

4. Use a Dremel tool to cut the unwanted bits of the wheel.

5. See the result, around 3 millimetres of plastic has been removed.
Now, the plastic packing takes place naturally in the middle of the wheel.

6. Keep the plastic piece with pieces of scotch-tape and mark 4 circles with a pen. They will be used to attach firmly the piece to the wheel. 

7. First, use a small drill bit to drill the 4 marks to the 2 pieces (packaging and wheel) and make a larger holes to the packaging.
The diameter of the drill bits must match with your screws (here, 2 millimetres and 3 millimetres). The screws come from a old plastic radio.
Before to mount the packaging to the wheel, put 2 rubber bands in each end of the packaging.

8. Now screw the packaging on the wheel.
The iPhone attach with the 4 rubber bands on the middle of the steering wheel.

9. Now, a little video to show how it’s cool to drive with the iPhone.. ok, I’m not really good in game but I’m better with the wheel than without.

10. Enjoy!

Convert a PDF to Epub for reading with your iPhone

It’s a bit frustrating to read a PDF file with an iPhone.

Why ?
Not only because the screen is too small (ok.. it could be is) but really because the PDF format doesn’t offer the needed functionalities for this type of device (no zoom, fixed page width..).
It’ why the formats of eBook exist, of course!

Good but what to do if you have like me some PDF impossible to find in eBook format?
It’s not more a problem since I found this very useful online tool called epub2go (

In 3 clicks, your PDF file will be converted.
 And more, the website offers the possibility to import easily the eBook in your iPhone via your email.

Let’s go for the (unneeded) howto:

1- Choose if the PDF file is on your computer or online.
2a- if it’s online, click on the bottom button and insert the URL
2b- if the file is on your computer, click on the top button and choose where it is (Browse)
3- After the processing screen, insert your email address and click on “Send to my iPhone

That’s it for the conversion part.

Now to install the eBook on your Iphone:
1- go to Apple Store and install Stanza. It’s a free eBook reader.
2- check your email on your iPhone and open the message from ePUB2Go
3- click (tap) on the link inside the message
4- now the ePUB2Go website is automatically open and in the second after a black screen appears with an icon of a book in the middle of the screen.
5- finally, Stanza is open with your new book in the list!

A good read!


If you want to read your ePub on your desktop, have a look on this list (from

Mac OS Mac OS Adobe Digital Editions
Lexcycle Stanza
Windows Windows Adobe Digital Edition
Lexcycle Stanza
Mobipocket Reader Desktop
Linux Linux FBReader

Jaunty Jackalope (Ubuntu Remix 9.04) on eeePC 901

Today is the migration day for the netbook of my wife, Alice. After a long time with pleasure and  some annoying things , we’ve decided to migrate the eeePC 901 from Xandros to Ubuntu Remix.
And to be honest, it hasn’t been really painful to achieve this job.

Find here the steps to do the same with your netbook:

1- download the last release from the Ubuntu server:

2- install ImageWriter:
sudo apt-get install usb-imagewriter

3- use ImageWriter to put ubuntu-9.04-netbook-remix-i386.img in the USB key (need a mini. 1Gb usb stick)

4- insert the usb key to the eeePC, start the PC and tape on ESC touch to view the boot menu. Select the USB key in the list.

5- in the boot menu, choose the right language (F2) and the right keyboard map (F3) and Enter
You’ll start the live distribution.

6- when the system is ready, click on the Install shorcut.

7- after the firsts easy steps, you arrive to the screen of partitioning. Here, you have some choices to make. I chose to make 3 partitions: 1 partition on the first SSD (root “/”), 2 on the second SSD (10Gb for”/usr” and ~5Gb for “/home”) all with the new format Ext4 (better results than Ext3).
You have noticed that I didn’t add swap partition, why? First of all, because the netbook has 2Gb of RAM and secondly because after some reads, the writings in the swap seems bad for the life of the SSD (not all people are agree with that but I had to take a decision).

8- after this important step, the installer copies the OS on the netbook.

9- reboot when it’s asked (don’t forget to remove the usb key).

As you can see, the boot is quite quick, under 40 seconds to go to the desktop with the wifi connexion.

Alice uses her eeePC for 4 main usages:
– to stay in touch with our family (in Spain, France, ),
– in the kitchen as a (luxury) webradio
– to make videos of our children or take a picture during cookery.
– to record her voice for her French lessons.

So, I had to install some softs:
– for the video, wxCam (sudo apt-get install wxcam). It has better perfomances than Cheese in video recording mode.
– for the webradio, Rhythmbox with a customized list of French webradios.
– for the webphone, Skype for linux (works better than on Xandros even the webcam). You must specify the sound device to get sound. Go to Options / Sound Devices and choose in the 3 lists, “HDA Intel (hw:Intel,0)”, then Apply.
– finally, nothing to do for the voice, Sound Recorder is already installed on Ubuntu Remix.

To finish the job:
– remove unused stuff like Evolution
– add plugins like Flash (nonfree), Jre (SUN).
You can do this job with the Synaptic Package Manager (in Administration tab).
– remove unused applications started with the system: go to Preferences tab / Startup Applications and unselect “Bluetooth Manager”, “Check for new hardware drivers”, “Remove Desktop”, “Visual Assistance”. Of course it depends of your specifi hardware or preferences.
– add shortcuts in the Favourites tab: simply selecting the shortcut (from its tab for example, Internet) and to glide it into the Favourites tab.

Here you can see the result.


Update (2009.06.13):
Wifi WPA authentication is impossible with the current rt2860 driver. To solve this problem, we have to downgrade the driver.

1) Get the driver from….


2) Go to terminal, and move the pre-installed driver so it won’t get loaded.

cd /lib/modules/2.6.28-11-generic/kernel/drivers/staging/rt2860/sudo mv rt2860sta.ko rt2860sta.bak

3) Install rt2860-dkms_1.7.1.1_all.deb. It will also install dependencies needed to compile the driver.

sudo dpkg -i rt2860-dkms_1.7.1.1_all.debsudo apt-get install -f

If it doesn’t retrieve the right packages, makesure “build-essential”, “linux-header-generic” and “dkms” is installed. Let it run and it should complete without a problem.

4) Restart. The new driver should work automatically.


Easy multiple image submit buttons management with Mootools

It can be interesting to have multiple image type submit buttons in a form for example to print and to submit  the form to another page.
A way to do it is to change dynamically the action attribute (in the form tag) by another value just before to send the form.

First of all, add the buttons to your form:

<form id="myform" name="myform" method="post" action="my/temp/page.html">...<input type="image" src="path/to/myimagebutton1.gif" id="btn1" rel="path/to/print/action/page.html" /><input type="image" src="path/to/myimagebutton2.gif" id="btn2" rel="path/to/submit/action/page.html" /></form>

Secondly, insert a small Javascript code after the DOMready declaration.

window.addEvent('domready',function(){        $('btn1').addEvent('click', function() {                $('myform').setAttribute('action', $('btn1').getProperty('rel'));                $('myform').setAttribute('target','_print');        });        $('btn2').addEvent('click', function() {                $('myform').setAttribute('action', $('btn2').getProperty('rel'));                $('myform').setAttribute('target','_parent');        });});

We get the action link from the rel attribute of the related image button and inject it to the action attribute of the form tag.

In the same time, it’s possible to declare the place (target) which will be active (here we have _print page for the 1st and _parent for the 2nd button).

This tip is really usefull when you use the Formcheck class!

FormCheck library for Mootools – fix overlay tips for IE6.x

It’s not possible to show a div element (or any other elements) on a select field in Internet Explorer 6.x
Of course, we get the same problem with the library FormCheck (

I’ve produced recently a small “dirty” fix.
The solution is to insert a iframe inside the generated div (tips).

in forcheck.js:

/*        Function: addError                Private method                Add error message        */        addError : function(obj) {...                if (obj.element) {                        obj.element.empty();                        if (this.options.display.errorsLocation == 1) {                                var errors = [];                                obj.errors.each(function(error) {                                        errors.push(new Element('p').set('html', error));                                });/** Iframe hack for IE6.x for select overlay **/                                if(Browser.Engine.trident4){                                        var cf_iframe = IFrame({                                                src:'about:blank',                                                'frameborder':0,                                                'height':'35px', //must be improve but how?                                                'width':'300px', //must be improve but how?                                                'background':'transparent'                                        }).injectInside(obj.element);                                }/****/                                var tips = this.makeTips(errors).injectInside(obj.element);...

in formcheck.css

.../* fix IE6.x iframe/select */.fc-tbx iframe {        z-index:-1;        filter:mask();        display:block;        position:absolute;}

The known problem with this fix is the fixed dimensions of the iframe.
It’s not possible to put at 100%, the iframe generates ann horizontal scrolling bar.

This solution is based on an idea of Fabien Molinet ( and his script called “Select Fix 0.30”.
Thanks to him!

IE6.x doesn’t work again with some Mootools code

Following my yesterday work, I have to add a new check on change event for the form in the script.

The idea is to send a request for each change in the form.
It’s easy to do it with Mootools, just add the addEvent() method
This code works fine with Firefox..and Co:

$('myform').addEvent('change', function() {        request.send($('myform'));});
BUT with Internet Explorer 6.x, it doesn’t work at all!
Yes again.. I know.

So, another way to get the same result is to use the magic function $$
With it, it’s easy to get all form elements to check their state (on change status)

$$('^myform_').addEvent('change', function() {        request.send($('myform'));});
Literally, we follow all the id elements starting by “myform_”, for example:
<input type="text" name="myform_text1" id="my_form_text1" />
Of course, you have to start all of your form elements name like this..
It’s not a problem for me, I do it by convention.

working day with Mootools.. find good tips here: blog

Well, a web dev day again today.
I looked for a solution to auto-update form in ajax.
I found solution here:
and here:
thanks to David 😉

I modified a bit the script to return form parameters in the ajax
request, here you are if you want it:

var request = new Request({        url: 'ajax.php',        method: 'post',        onComplete: function(fullresponse) {                var response= fullresponse.split('::');                $('result0').set('html',response[0]);                $('result1').set('html',response[1]);        }})var sendForm = function() {        request.send($('form3'));}sendForm.periodical(5000);