August 2008 Archives

Aug 31

My Awesome Experiment

A month or so ago I switched window managers from KDE to Awesome . I see no reason to go back.

The Tiling Mindset

Awesome is a tiling window manager. The premises of tiling window managers are:

  • Look how much space is wasted on your desktop - blank space & window decorations!
  • Look how much time you spend dragging windows around, arranging, resizing.
  • Look how mouse-dependent these activities are - what a timesuck!

All three of these points are true, but I couldn't have really seen it until after I gave it a try. Now when I navigate the Windows desktop at work I'm quite irritated by the amount of time I spend futzing with resizing and dragging windows. Now my windows lay out in a mostly-sane way, and resizes can be done with a couple of keystrokes. Same for focus changes, window swaps, and desktop (tag) changes - a couple of keystrokes to handle it all, and I rarely have to reach for the mouse.

To be fair, at work I use more applications at one time than at home - but Awesome has a solution for this too - tagging. For the most part, tagging = virtual desktops, which have been common in Linux for years, though for some reason I never used them. Awesome's improvement on the old virtual desktop idiom is: virtual desktops can be combined.

So, if I have Firefox on desktop "One", and Eclipse on Desktop "Two", I can hold Ctrl-Logo-1-2, and the windows from both desktops are tiled. Do I use feature? Rarely. But I do frequently send windows from one desktop to another with Shift-Logo-#.

A Small Footprint

Comparing memory usage, the lo-fi ethic is evident:

  • Memory usage at after login (no window manger): 67 MB
  • Memory usage following Awesome launch (+1 aterm): 72 MB
  • Memory usage following KDE launch (+1 xterm): 100 MB

I won't pretend that the 28 MB extra used by KDE bothers me too much - after all, a Windows XP launch on a 512 MB machine usually has me paging immediately after launch! The point of the benchmark is to show that Awesome is truly a minimalist setup.

The Target Audience

I think Awesome isn't for everyone. I prefer keyboard navigation as much as possible, and Awesome isn't for folks who must grab for their mouse for every action. I don't always understand these folks - in some cases these are power users who can master the complexity of a gaming console keypad, and re-learn the setup for every new game - but when they get to work they'd prefer to click "Build" before pressing F5.

Extensibility

Awesome has an equally lo-fi plugin architecture. A clock in the navigation bar is powered by a bash script, which I typed in from a tutorial. This has me thinking of other items I could automate easily - most recent but in a software project, latest item in a to-do list, or even grabbing my net worth from GnuCash.

If you haven't tried a tiling window manager, give Awesome a try! If you have, what has been your experience?


Posted by Erik | Permanent link

Aug 24

The insoluble problem of passwords

When I'm asked to provide a password, I have a system for coming up with great passwords:

  • It's long
  • It's unique to the site
  • It contains some non-alphanumeric characters
  • The alphabetical portion of it is composed of letters that alternate left and right hands, making it fast to type.

Unfortunately, my system is too good for most sites. Even sites for large, should-know-better organizations commit some heinous password atrocities:

  • Alphanumeric characters aren't allowed
  • Passwords are restricted in length, sometimes to eight characters.

Gah! NEVER LIMIT COMPLEXITY. In 2008, we now use "passphrases", and if a user wants to enter a novella, you should let them. The other thing that makes me cringe with an eight-character restriction, is that I have a creepy feeling that my password is being stored in the clear in an eight-character field, no salt, no hash.

The result is that my brilliant system is undermined, and I have a lot of passwords that all stray from the system just enough to make the system useless. So, in 2008, I have a text file called logins.txt, with all my passwords. Well, I did a few hours ago anyway.

Thanks to Gnu Privacy Guard (gpg), it's encrypted. I'm also in the process of moving contacts from GMail into a similar, encrypted file, since I don't at all trust GOOG to keep this information secure (and also since I'm trying to wean from Google's pervasive services - they won't always be the world's tech darling - I'll elaborate more on this another day).

GPG will work great when I need to read my passwords file - one quick command. But writing, say, a new password to the file isn't an "in-place" operation. I'll have to decrypt, edit, encrypt, and remember to delete the decrypted copy - a shell script may emerge to automate this.

Is there a better way to handle this problem? I'm aware of password manager programs, but I prefer a non-GUI solution, and anyway a more generalized solution is better, since I'm trying to keep contacts here also and maybe other files.

On OpenID

I have an OpenID, since it's required for my blog's comment system. Strangely, this is the only software I use that allows OpenID for authentication, which is a little sad. It's a grand idea - basically a single sign-on for the web. Realistically, though, only the Web 2.0 startups seem to be excited about it. Yes, I'd like to see the effort succeed, but I can't imagine people going through the trouble of porting an existing authentication infrastructure to support it. Certainly the banking sites I use, who presumably store my 8-char-max password in clear text in a DB2 in a mainframe, can't be bothered with it.

Update from last week

My socket sprint has gone well. I've written eight socket servers, all identical, but mostly from memory. No longer shall I shudder at a socket task.


Posted by Erik | Permanent link

Aug 10

Socket sprint

Problem one

A recent prototyping project went unfinished when I realized that a custom proxy server would be required. It's shaken me a little, because the idea of writing a fairly simple socket server shouldn't intimidate me. If I was the programmer I'd like to be, I should be able to bust out a socket server in a couple of hours.

Problem two

My workstation at the office is broken. Due to aggressive automated patching policies, my box gets some software patches nearly every night. When this happens, the machine loses network connectivity. This will bite me in the ass very soon, because I often need to log in from home to develop or for releases. The solution that I can think of is to create a system service that executes some network activity every five minutes or so (say, pull a web page). If an error occurs, restart the machine. If I can't write this as a batch script, I'll use C, so there's another cause for learning sockets.

So...

I'm on a socket sprint this weekend. I'm writing a boilerplate socket client and socket server, over and over, until it's trivial and mostly committed to memory. This way problems one and two (and countless future problems) will be that much easier. I'll let you know how this works out. Covey called this "Sharpening the Saw" in his Seven Habits of Highly Effective People.


Posted by Erik | Permanent link

Aug 03

Experiment: Low-fi project management with Remind

Since my personal software project is unbounded, it's easy to slack and make very slow progress. I need to set dates.

What do Open Source developers use for project management? Apparently, most of them aren't quite sure what that means .

Not that I blame them. I haven't been totally sure what I want. Gantt charts seem like unmaintainable overkill, and not my style. There's Projity's OpenProj , but I tend to avoid desktop apps. BaseCamp ? I'm even less likely to use a hosted solution.

Let's try Remind . I think this can only work if my solution is lightweight and simple. I add a few lines to my .remind file.

# Project management
REM 24 Aug 2008 +21 MSG Dev complete %b
REM 7 Sep 2008 +14 MSG QA complete %b
REM 28 Sep 2008 +21 MSG Portal built, 0.0 release %b

Ah, project management in four lines :-) Let's see how this turns out, shall we?


Posted by Erik | Permanent link