September 23, 2008

Some people (such as me) have always been annoyed by how you need to use the mouse a lot to make use of your X11 desktop environment. Wouldn’t it be great if you could just control everything using your keyboard? Well, that is what ratpoison allows you to do.

Ratpoison is a minimalist window manager which is similar to GNU screen. It’s called ratpoison because you don’t need to use a “rat” (mouse). It is written in C.

But eventually, the authors got tired of writing in C, as they were implementing many features that resembled Emacs or that were in a Lisp style. As said by the authors:

“StumpWM grew out of the authors’ frustration with writing ratpoison in C. Very quickly we realized we were building into ratpoison lispy-emacs style paradigms. We had a REPL hanging off ‘C-t :’, hooks, and a growing subset of Common Lisp in the implementation … It was clear what we really wanted was a window manager written in Lisp from the ground up with lots of room for customizing and real-time hacking.”

So, being a Lisp fanboy and an Emacs zealot, I decided to give it a try. I wrote down most of the key combos on a sheet of paper which I put on my wall, and I set up StumpWM. I got used to it in about 15 minutes, and after an hour or two I was completely addicted to it. Emacs-like frames, window groups, its being written in Common Lisp (and hence hackable for me), its simple key combo to run/raise Emacs, and of course its allowing me to control my desktop with the keyboard make it the best window manager I’ve ever tried.

If I gladly said “I don't need no stinkin' icons” after setting up Fluxbox, I excitedly thought “I don't need no stinkin' mouse either” after trying out StumpWM.

I really recommend that you try it out. Don’t let the key combos throw you off, you’ll get used to it (although I do recommend that you set up your CapsLock key as an additional (or the only) left Control key.

But hey, why don’t you watch this video?

How to install/start it

  1. Install SBCL, the portable-clx package (called cl-clx-sbcl in Debian), and cl-ppcre.
  2. Download StumpWM.
  3. In the stumpwm directory, run ./configure.
  4. Run make. This should create a stumpwm executable.
  5. In your ˜/.xinitrc file, include the path to the stumpwm executable.
  6. Finally, start X Windows with startx.

Useful links

StumpWM wiki

StumpWM manual


I’ve always thought that there are several types of programmers, each one showing distinctive features. Now, I think you could do the same with people who want to learn programming. And, one of the most important decisions a novice programmer will ever take is what to learn; the first choice is which programming language to learn first.

The hobbyist

That’s the person who’s just interested in learning programming as a form of entertainment and to take a challenge every now and then. So, instead of collecting stamps, he learns programming. He probably won’t want to get down to the complex stuff, but he might end up liking it and wanting to do it for a living.

Is this you? I suggest you learn Python, which is easy to learn but also powerful.
You should probably read this book. You can find a .pdf version here.

The engineer

That’s the person who wants to learn programming as a discipline, and to get more out of his computer, or perhaps because he likes a challenge (but not the hobbyist‘s kind). He’s more likely to end up wanting to do it for a living, or to make use of the skills he starts to acquire in his current job.

Is this you? I suggest you either learn Python (see above) as an introduction to programming, and perhaps learn C. The latter might be a bit difficult in the beginning, but the effort will be worth it (you will not only be able to program in C — You will have some base knowledge and skills which will let you learn C++ or more advanced object-oriented programming languages more easily).

The computer scientist

Right, we’re starting to deal with the serious folks. That’s the folk who wants to learn programming to earn a living, and perhaps we should make a difference between an “engineer” in my categorizing system, and a “software engineer”, which is what this type of person will eventually become. He does want a challenge, but probably only to improve his skills and add new shiny things to his CV.

Is this you? I suggest you learn C. It will most likely be a prerequisite for you to work as an actual software engineer. Otherwise, it lets you learn C++, Java, or whatever you’re into more easily. Focus on object-oriented programming languages, as that’s the trend nowadays.

The hacker

Now, this is the type I wanted to talk about. That’s the person who loveschallenges, loves programming, and loves to experiment with both old and new stuff. He’ll most likely want to do it for a living, but he’s likely to experience some trouble working for someone else doing things that he doesn’t like, unless he’s got enough free time to do what he likes at home (or in his server-cave). While you may think of programming as either something very complex or as a serious discipline, the hacker (if you’re thinking of movie types who break into computer systems, you’re thinking of a cracker, not a hacker) will think of it as a playful and pleasurable form of entertainment. It will probably even become his lifestyle.

Is this you? Hell, forget about Python unless you don’t know anything about programming yet! Learn C for lower-level tasks and embedded systems, and… Lisp! You can choose between Scheme (the tiny basis for Lisp, with which you can experiment but not really write any serious applications) and Common Lisp (a complex and complete dialect of Lisp, probably uglier than Scheme but excellent for any purpose).

See? It’s not that hard to decide which language to learn first.