News
May 21, 2006 – I bought and have been listening to Bruce Springsteen's Nebraska this week. It's very good, much different (and better) than I expected. It's dark, there's little hope with this album. It generally tells the stories of hard-luck people, and opens with a murder ballad – it reminds me of a collection of Bukowski poems set to music. "I got debts that no honest man can pay." It's a solo performance from Bruce; I understand that these were demos, and you can hear it as it sounds gritty and a little poor in places, but the grittiness at least is endearing. "Atlantic City" and "Highway Patrolman" are probably my favorite tracks. I highly recommend.
Interests
Software
Graphviz is a very useful graph drawing tool. ("Graph" here means graphs constructed of edges and verticies, not a graph of a function or a plot of numeric data.) As input, Graphviz takes a description of the graph in a simple and elegant text-based language; as output, Graphviz yields a diagram of the graph in one of a variety of formats, such as PostScript or an image format (JPEG, PNG, etc.).
Geomview is a neat tool for visualizing 3D objects. The only detriment is that the languages used to describe an object to Geomview are fairly baroque (by necessity, I think) and not easy to edit manually. Once you have a description of the object, Gemoview has a very nice interface where you can rotate, translate, and zoom around the object.
PuTTY is a very good Telnet/SSH client for Windows.
Projects/Ideas
It would be nice if there were disk-backed versions of the C++ STL containers. The idea is that disk-backed containers would behave like standard STL containers until they reached some threshold size, at which point they'd spill to disk so that physical memory and address space aren't exhausted. Insofar as possible, the disk-backed containers would use the same API as the conventional containers. It's easier to imagine this for some containers than others. For example, a map could spill to a B-Tree on disk, and it's easy to imagine good ways to handle a stack, queue, or priority_queue. The hash-based containers would be more difficult to handle, but for applications that exhibited good temporal locality of reference, they could work well.
The C++ STL provides a mechanism to generate permutations in lexicographic order, via next_permutation and prev_permutation. However, it is possible to generate permutations more efficiently if you don't care about the order in which they're generated. In fact, Knuth has a "pre-fascicle" from The Art of Computer Programming, Volume 4: Combinatorial Algorithms that describes efficient algorithms for generating all permutations. It would be nice if there was a library that allowed (1) efficient iteration over all permutations, (2) efficient ranking (not necessarily in terms of lexicographic order) of a permutation, and (3) efficient unranking of a permutation. (Here a ranking is a bijection from permutations over N elements to an integer in [1,N!] and an unranking is the inverse of a ranking.) Ideally, I think, this fast-permutation library would handle the case of computing permutations of {0, 1, 2, ..., n-1} (or the 1-based equivalent), and leave permutations of arbitrary sets to wrapper code. Also, it would have optimizations for the case where N is known at compile time, but still be able to handle the case where N is specified at runtime.
Links
If I had more time I'd learn more about embedded systems:
Atmel's AVR 8-Bit RISC microprocessors look pretty hobbiest-friendly. There is an AVR Freaks community site. You can also find notes on programming Atmel AVR microprocressors in-circuit with your PC, which are part of a more general set of notes on constructing a robot around an AT90S1200 brain.
Sony used to sell a Linux kit for the PlayStation 2; there is even a PS2 Linux community. In March of 2004, the PS2 Linux kit was reduced in price from $199 to $99, but it has since sold out and is no longer available in the US. The kits show up on eBay, but they seem to go for more than $199 these days. Hopefully Sony will continue the Linux kit tradition with the PS3.
If you'd like to program the Atari 2600 (a 6502 based machine) you might be interested in the Stella Programming Manual (also in PDF), or AtariAge's 2600 Programming For Newbies series. Also, Kirk Israel has written a 2600 programming tutorial.
There are a lot of ways to get electrical power from your PC.
GoingWare's Bag of Programming Tricks - In an effort to make life easier for other programmers, Michael D. Crawford has written down some of the things he's learned over the years.
Archive of file format descriptions
Interesting keyboards for sale
my FOAF (Friend Of A Friend) description
lou at louthompson dot com