This is a list of some software I use every day.

F(?) Virtual Window Manager

I'm a big fan of the fvwm window manager, you can view my fvwm2rc here, if you would like to try it out, follow the instructions in the comments at the top to convert it to plain text.

Fvwm is an insanely powerful window manager, every minute detail of it's operation can be configured or scripted. It includes powerful modules to create desktop panels and task lists and even a simple scripting language to make small applications. I wrote an article on fvwm for osnews once, where I compared using a regular window manager to using a hypothetical shell that doesnt support regular features such as globbing and job control, unfortunately the analogy didnt work too well, and a lot of people thought I was writing a new shell! Still, I did get some positive response, and a lot of people emailed me to thank me for introducing them to fvwm.

I've also written a tutorial on FvwmButtons and vector buttons.

If you're new to fvwm, you might like to check out this great introduction by Jaimos, a good friend of mine.

Here are some other fvwm related links.

Vi IMproved

My editor of choice is vim, you can download my vimrc here.

I've written a few simple abbreviations for c programming that I find useful, a few people have asked me about them so I'm listing them here. When editing c programs, they automatically insert braces, parentheses and so on as soon as you have entered the first keyword.

" abbreviations for c programming
func LoadCAbbrevs()
    iabbr do do {<CR>} while ();<C-O>3h<C-O>
    iabbr for for (;;) {<CR>}<C-O>k<C-O>3l<C-O>
    iabbr switch switch () {<CR>}<C-O>k<C-O>6l<C-O>
    iabbr while while () {<CR>}<C-O>k<C-O>5l<C-O>
    iabbr if if () {<CR>}<C-O>k<C-O>2l<C-O>
    iabbr #d #define
    iabbr #i #include
au FileType c,cpp call LoadCAbbrevs()


Mutt is an extremely powerful and awesome mail user agent, You can download my muttrc here. I subscribe to a lot of mailing lists, and sometimes need to access my email remotely, mutt makes this very easy, and integrates with gpg very well.


I use Gentoo Linux on most of my machines, it's a flexible and powerful linux distribution. It's not as mature as some other distributions, and this does show sometimes, but it's promising and a lot of fun. I would highly recommend anyone check it out.

I'm also a Gentoo developer, I've worked on porting software to the Alpha architecture, general software packaging, security auditing and general security work. If you use linux on Alpha, you might be interested in my performance analysis of cpml, the compaq portable maths library. I've also performed some benchmarks on ccc Vs. gcc (compaq's c compiler for alpha).

I've made a list of some of the hardware I've used whose linux compatibility isn't well documented here.


I have a page that describes the proprietary software I still rely on. I've also made a list of some excellent software that is little known or highly underrated, you can read it here.



If you often need to debug or analyse the behaviour of programs, you might be interested in libpretrace, a preload library for linux that intercepts execution of all dynamically linked applications and offers the ability to execute under a debugging environment.


fuzz is a fuzz testing utility for testing how fault tolerant binary file format parsers are. This is invaluable for security auditing or QA testing.


scanmem is an interactive debugging utility for linux, which can locate or modify the address of a variable in an executing process. Symbols or source code are not required, scanmem determines the location of the variable by searching for matching candidates in the process' address space.

This can be used to analyse or modify a hostile process on a compromised machine, for reverse engineering, or as a "pokefinder" to cheat at video games.


A small script to identify which architecture an alpha application was compiled for, very useful for diagnosing SIGILL on alpha.


My primary language is C, however I really like terse, it's a lowlevel algebraic assembly language for x86 systems. It's a proprietory DOS application, however it runs perfectly under DosEmu using FreeDOS. With some wrapper script magic, it is indistinguishable from a native linux command line application.

This is what a Hello World in terse looks like (linux specific, of course)

segment .data;
    'msg = ("hello world",0ah);
segment .text;
global _start;
    eax = 4; 
    ebx = 1;
    ecx = $msg;
    edx = 12; !80h;
    &eax+; &ebx; !80h;

$ terse hello.t 
------- The terse (tm) Compiler, Version 2.20 -------
Copyright (C) Jim Neil 1989-1997, All Rights Reserved

    12 Lines In.
    14 Lines Out.

$ nasm -f elf -o hello.o hello.asm
$ ld -o hello hello.o
$ ./hello 
hello world

Here's some more random code to demonstrate the syntax

section .data;
    'msg = ("arr[%d] = %d", 0ah, 00h);
    'arr = (34, 126, 42, 9, 124, 64, 24, 76, 98, 121);
section .text;
global _start;
extern printf;
    ebx = ecx = edx = eax = 0; eax+;
    {   bl = [arr+eax];
        cl = al; cl-;
        {   ecx ? --;    
            dl = [arr+ecx]; 
            dl - bl ? > {    
                [+ecx+arr] = dl; 
            }, { . };
        [+ecx+arr] = bl;    
        eax - 10 ?;
    ecx = 9;
    {   &eax; 
        al = [ecx+arr];
        =eax; =ecx; =msg; =.printf;
        ecx=; ecx=; eax=; ecx-;
    &eax+; &ebx; !80h;

I plan on implementing a free terse compiler for linux systems using nasm and bison, If anyone is interested in helping with this project, let me know.

I've also made a preliminary terse linux HOWTO, and I'm working on a vim syntax file.