Tuesday, April 29, 2008

Windows Portable Executable (PE) File Format

Great articles by Matt Pietrek that discuss the PE format in-depth:

Bash 'for' loop examples

I can never remember the syntax for bash for loops:

for i in $( ls ); do
echo item: $i

for i in `seq 1 10`; do
echo $i

for ((i=100;i<=115;i+=1)); do
echo $i
sleep 1
echo $i > /dev/ttyS1

PenguinTV broken on Gutsy

I have been using PenguinTV to download the radio shows I subscribe to. The interface is OK, except:

  • The multiple download feature is broken. You can't select muliple files and get it to download. Sucky!
  • It is totally broken on Ubuntu Gutsy (segfaults). The workaround is:

    export LD_LIBRARY_PATH=/usr/lib/firefox
    export MOZILLA_FIVE_HOME=/usr/lib/firefox

Monday, April 28, 2008

HOWTO write a firefox plugin

I'm in the process of writing my first firefox plugin and have recorded my experiences here. The HOWTOs and links I used were:

The most important firefox extensions are:

  • Console2
  • Extension developer's extension. The 'reload all chrome' is useful for stuff that is otherwise cached.

To create the xpi file for publishing you need to change your chrome.manifest to point to the jar file (I keep another chrome.manifest for packaging in the repository so I can just copy it over). The ordinary manifest looks like this:

content myextensionname chrome/content/
skin myextensionname classic chrome/skin/
overlay chrome://browser/content/browser.xul chrome://myextensionname/content/browser_overlay.xul
locale myextensionname en chrome/locale/en/myextensionname/
and the packaging one looks like this:

content myextensionname jar:chrome/myextensionname.jar!/content/
skin myextensionname classic jar:chrome/myextensionname.jar!/skin/
overlay chrome://browser/content/browser.xul chrome://myextensionname/content/browser_overlay.xul
locale myextensionname en jar:chrome/myextensionname.jar!/locale/en/myextensionname/

I use these commands to create the jar and xpi:

cd chrome
zip -r myext.jar * -x \*.svn\*
cd ..
zip myext.xpi install.rdf chrome.manifest chrome/myext.jar

Monday, April 7, 2008

Python memcached

Installing the python bindings for the C libmemcached:
  1. Patch libmemcache

  2. It's been a while since I used patch, so I thought I'd record the command I used. This was a multifile patch, and it applies the patches to all the right files. How cool is that! The -p1 prunes off one slash of the path since my directory was different to the guys who made the patch.

    patch -b -p1 -i libmemcache-1.4.0.rc2.patch

  3. Compile and install libmemcache

  4. sudo apt-get install python-dev

  5. sudo python setup.py install

  6. Download the actual memcached, compile and install

  7. Use it (StringClient for strings, Client uses pickle for other types):

  8. import cmemcache
    a.set('key', 'value')