You can download their current issue in PDF format.
His first article is on page 24.
If you're not familiar with my father's work, but you like this blog, you should probably give it a read. I have been told by numerous impartial observers that we make similar hand-gestures when speaking publicly; from that I cannot help but infer that our writings cover the interests of convergent groups.
Update: In addition to the column, apparently he's blogging again, too.
Supposedly I use a Free-as-in-Freedom desktop and operating system. According to the Free Software Foundation, that means I have the "right to use, study, copy, modify, and redistribute" all the software on my computer. That's absolutely fantastic. As a professional programmer, it means I'm not beholden to another company to make my living. As a user, it means that I am not at the mercy of huge corporations, I don't have to pay a tax simply to use my computer. Those rights, especially in combination, are empowering because I can make my computer behave as I need it to, not as some cabal of programmers think I need it to.
Or... am I?
For example, let's take this program I'm using right now, "drivel". As I mentioned previously, I'm a professional programmer so I know my way around. So, let's go through a checklist here. Use? Check. I'm using it. Study? Let's see:
glyph@legion:/usr/bin% file drivel
drivel: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux
2.2.0, dynamically linked (uses shared libs), for GNU/Linux 2.2.0, stripped
Hmm... nope, looks like that's not really going to be easy to study in any meaningful way. Let's see about the vaunted Source Code I keep hearing so much about.
glyph@legion:~/Scratch/Build% apt-get source drivel
Reading package lists... Done
Building dependency tree... Done
Need to get 950kB of source archives.
Get: 1 http://archive.ubuntu.com dapper/universe drivel 2.0.2-5ubuntu1 (dsc) [883B]
Get: 2 http://archive.ubuntu.com dapper/universe drivel 2.0.2-5ubuntu1 (tar) [931kB]
Get: 3 http://archive.ubuntu.com dapper/universe drivel 2.0.2-5ubuntu1 (diff) [18.6kB]
Fetched 950kB in 4s (210kB/s)
dpkg-source: extracting drivel in drivel-2.0.2
dpkg-source: unpacking drivel_2.0.2.orig.tar.gz
dpkg-source: applying ./drivel_2.0.2-5ubuntu1.diff.gz
(...)
glyph@legion:~/Scratch/Build/drivel-2.0.2% ./configure --prefix ~/Scratch/drivel
configure: error: Library requirements (...) not met; consider adjusting the PKG
_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix
so pkg-config can find them.
Yeah, uh, I sure don't need that cabal of programmers to figure out what's going on here...
For the record, I know exactly what I need to do to fix this. I have, in fact, built and modified this exact application on no fewer than five previous occasions. However, unless I am already a Free Software expert, how can I meaningfully "study" or "modify" this software without some kind of documented way to progress from the software I see on my system, some way to stumble my way towards an understanding of what's going on?
Also, this complexity really does explode to the point where it's a problem even for experts. I am aware of how to get individual applications to build and install into alternate locations for testing, but setting up a working environment where I can meaningfully modify my operating system or desktop is an exercise in futility. I know what's involved in setting up a gnome development environment, vaguely, but I'm not sure how I would effectively develop it without at least 2 computers, one for the debugger and one for the main desktop. Surely something like a rectangle with buttons on it that start programs like Gnome Panel should not require a six month training program and a 12-hour build process to get started on modifying.
For a better example of how this might work, let's have a look at a program with similar functionality to Drivel, "gnome-blog-poster". If I open up
/usr/bin/gnome-blog-poster
, instead of seeing a mass of binary
crud, I see some words which vaguely resemble english. "from", "import",
"class", "self". I might not know what these words mean, but I can see one
phrase from the user interface: "Post Blog Entry". If I open up that file in
an editor, and modify the words between the quotes, then run the program
again... wow! The program is different now!Knowing to look at a file in /usr/bin/ and launch a program like "gedit" on it is hardly a seamless, intuitive experience (nor is editing source code) but experiences like the one I just described really are important. Free software tools rarely realize the potential that they represent to users; at best, it's just like Windows but cheap; at worst, it's like Windows, but missing all the useful scripting tools like VBA.
Let me indulge myself for a moment in a metaphor. Supposedly this is to clarify the point I'm trying to make clearer, but really I just love metaphors.
Imagine if car manufacturers started welding car-hoods shut and legally prohibiting opening them. This could be a serious problem; they could charge drivers obscene rates for basic service like oil changes. In response - the Open Hood movement; a massive undertaking, costing billions of hours of volunteer labor, heroically laboring against the oppressive regime which seeks to prevent regular folks from fixing their cars when they break, or choosing their own mechanic.
After two decades of work and dozens of half-finished mopeds, go-karts and engine parts, the first fully Open Hood car is released. To the automotive industry's collective surprise, It's dramatically cheaper and gets better gas mileage than the economy cars from each manufacturer.
However, beleaguered consumers are in for a surprise. Joe Average buys himself an Open Hood car, and after a few thousand miles, he decides he's really going to take advantage of the spirit of the movement which created it, saving himself a few bucks in the process, and change his oil himself. He gets his dipstick, and some motor oil, and expectantly pops open the hood to find...
... a solid block of fused silicon.
Now, to an automotive engineer in this metaphorical universe (which has metaphorical physics - a lot more fun and easier to get an A in than actual physics) this may make perfect sense. In fact, it might be obvious. "Avoiding moving parts improves aerodynamics", "exposing the driver to complex parts wouldn't be user-friendly". Nevertheless, the movement's promise is abandoned, and it instead simply a way to get cheaper cars, which can still only be serviced at the dealer. It still decreases the cost of service, because now any licensed dealer can service a car, as long as they have the $10M machine required to safely and temporarily crack the fused shell around the engine.
Wasn't that trip into metaphor-land fun? If it was hard to follow, I'll break it down.
C is the fused silicon of software. There are technical reasons to use it in free software: it's fast, it's ubiquitous, it's UNIX's history, it's what all the infrastructure is written in. And sure, in some places, like the kernel, that makes sense. In today's real cars, there's a big difference between changing your oil and actually trying to fully disassemble the combustion engine. You need a lot of tools for the latter.
The programs on a Linux system aren't themselves objects that you can study and modify - you have to take the authors' word for it that the code you're running is the same code they're running. Sure, you could use a distribution like Gentoo, but that just moves the burden of the build process onto your machine (and I would estimate 95% of the folks who use gentoo don't understand the gibberish that scrolls by when they emerge something). The final products are still opaque lumps with no obvious way to modify them; the intermediary process is not designed to help the user. Finally, even if it were, the multi-hour feedback loop necessary to see the impact of anything modified in GNOME (and the absolutely disastrous impact if you get anything wrong) is going to be a turn-off.
When I was growing up, as young as 8 years old, I would change things around on my computer just to see what happened. I modified arexx scripts, APL programs, HyperCard stacks, batch files, anything I could get my hands on. Then I ran them. Sometimes they exploded violently. Sometimes not.
It might be easy to dismiss this as simple nostalgia, but it's only sometimes that these sorts of experiments lead to children learning to program. Other times, they lead to more "serious" results like improvements in office efficiency. Writing scripts with Visual Basic for Applications is a very similar experience (although markedly less positive or fun) than messing around with working HyperCard stacks.
Lots of people write programs to teach people how to program, and write "scriptable" applications with absolutely no functionality implemented as scripts. That might teach some people to program, or get some tasks automated, but in general people can learn faster, and get things done more effectively, by modifying full, working examples that are personally relevant to them and that they can see some immediate feedback if they modify.
I would like to close with two different points for two different audiences.
Python developers, especially core python developers: remember CP4E? That was a great dream. It saddens me that most of the work on Python these days is adding syntax and libraries to the core language for web programmers. Sure, that's a niche where it's useful today, but what about the future? What about the desktop users of tomorrow? The only real way to make Python into a language that's useful for everyone is to evangelize the hell out of it so that everyone has at least one application they use on a daily basis that's written in python, and methodically hammered into consistent and documented shape so that users can approach it at an odd angle. Novices never show up in the orderly way you expect. Let's stop asking what the people who are using Python today need: we are already using Python, clearly we have what we need. What about the people who aren't using python? What do they need? How can we get Python to be the lingua franca of end-user applications?
Free software C programmers - most especially desktop applications programmers: holy crap, what's wrong with you. It's 2006, people, what are you doing. You will get your applications done in maybe 1/10 as much time if you use a dynamic language. Don't make your applications "scriptable", let your users get right into the guts and change whatever they want. Your application will be fast enough, trust me. Rhythmbox, a hulking monster of C++ code, is visibly sluggish and painful to use on my computer; Quod Libet, a similar application written in Python, is snappy and has a lot more features.
Fine, you hate whitespace, you don't use newlines in your code, you were bitten by a snake as a small child, you hate British comedians, whatever. It doesn't have to be Python. As long as there is an accepted convention in the language for re-compiling at runtime and including the source with the application, some users will figure it out.
(A brief aside to the Mono guys: even though compilation is a required step, you're really close to this. Python compiles everything to bytecode before executing it, after all. Can you just tweak the deployment conventions somehow so you can easily run from a smattering of .cs files on the filesystem, and package things that way?)
There are a ton of options available today. Use ruby, use lua, use tcl or pike or csch or guile or clisp or javascript or perl or icon or sbcl or ... you know, whatever. Look around and find something you like.
(But don't use PHP if you can avoid it.)
The FireBug extension for Firefox is just such a product. If you are involved in the creation of any javascript code at all, you must download it now.
Firefox is fantastic as a browser, but a terrible environment for creating and debugging JavaScript. The usual workflow for testing a new snippet is:
- Open your editor
- Write some HTML.
- Include some
<script src="...">
tags. - Write some JavaScript
- Switch to browser, reload. Nothing happens.
- Force reload. Aah, there we go.
- Notice erroneous behavior
- Edit JS.
- Reload... no, damnit, force reload.
Firebug takes that down to:
- Type some JavaScript
I am tempted to wax poetical about this for longer, but I can explain it better with a screenshot than words:

To be clear: expressions and statements are executed in the page's context, with chrome's protection level. (That means you can do stuff like turn off the menubar and fullscreen the window from this prompt, functions not generally available to page scripts). You can directly inspect your existing JavaScript objects without having to resort to proliferation of alert() statements. As the "
>>>
" prompt may imply, it works a
heck of a lot like Python's interactive interpreter.This extension really is an absolute must-have for any web developer. It has been critical in improving and debugging Athena.
Almost 5 months ago I purchased a Logitech G15 gaming keyboard. You can read my review here. This was a very interesting idea, with some integrated features, such as an LCD and additional "macro" keys, which gave me high hopes for it. I purchased the board intending to use the macro features in World of Warcraft.
While I was pretty happy with it while I've had it, unfortunately the fancy bells and whistles did not make up for the fact that the basic feature of the keyboard - the key switches themselves - were the same cheap garbage you can find in a five dollar keyboard model. Despite looking nice out of the box, the paint rubbed off of frequently used keys such as "alt", "h", and the spacebar. The keys themselves now audibly squeak when I press them and some of them require more pressure than before.
I would like to say I collect keyboards. The truth is, I destroy keyboards. Every 6 months or so my keyboard starts to crap out, either losing multiple keys entirely (as with the Logitech DiNovo) or simply becoming too annoying to actually type with due to some built-in flaw (as with the Eluminex).
Originally I thought that my normal rate of destroying keyboards was highly abnormal; however, while reading an interesting review of a keyboard, I discovered that the normal rating of a rubber-dome key switch is about 1 million cycles. If you do some arithmetic on those statistics, it turns out that such a keyboard would only be rated (optimistically) at 220 12-hour days of 80wpm typing. I generally type at 120wpm, although not entirely without errors, so the MTBF for a keyboard for me would average around 150 days, or 5 months.
As I was saying, almost 5 months ago I purchased a keyboard. It doesn't work quite as well now as it did then.
I am lucky to have learned to type as one would learn to play piano: wrists straight, elevated. My form is certainly not perfect, but I follow this advice often enough that while it's good for my wrists, it only helps to accelerate the rate that I can annihilate normal keyboards.
Speaking of piano, I learned this weekend that a professional piano player might spend 1/3 as much time with their fingers touching their keys as I do mine, but they might easily spend $150,000 on such an instrument - and in fact, have more than one. Bolstered by this, and by recent successes at Divmod, I decided to celebrate by buying not one, but two keyboards, which I could actually add to a collection rather than tossing out as soon as my various projects have finished turning them into pulp.
The keyboards in question were the Unicomp EnduraPro USB 104-key with integrated "TrackPoint"-style mouse:

and the Déck Legend ("ToXiC" color):

In contrast to my previous review, both of these keyboards are bog-standard PC 104-key keyboards with only one special feature each: the Legend is backlit, and the EnduraPro has the integrated Trackpoint. There are no volume knobs, no "Internet Buttons", no integrated USB hubs, toggle switches or programmable keys.
Also, there are no 1/2¢ rubber dome switches which are going to wear out after another 5 months or feel like crap after 3.
So, on to the main event: keyboard feel. How do these keyboards compare? Either one is easily better than any other keyboard I've used in the last 5 years, with the possible exception of the Tactile Pro. Unfortunately, while the Tactile Pro had high-quality key switches, used an extremely cheap and shoddy key-matrix chip that made it drop keystrokes for people who type quickly. One of the first things that impressed me about the folks at Déck was that their ad-copy frequently mentions that you can type at 240 characters per second on their keyboards. "You cannot type this fast. Ever."
In terms of tactile feedback, the EnduraPro definitely has the edge. In fact, you could say they have the ultimate edge: the key switches activate at the exact moment of the "click" that the key makes, and similarly "click" again when the key is released. This makes it very easy to determine when you have pressed a key and when you haven't. I vaguely remember seeing an industrial design study that indicated that it is conclusively understood that this is, psychologically speaking at least, the best possible feedback that a keyboard can provide. (The impact on your wrist muscles and tendons is another matter...)
The Legend isn't quite so good: there is a definite "click" as your keys strike the bottom of the switch, however, the key activates about halfway down, not at the point of the click, so you end up doing more work and being slightly less sure of when the key has activated.
The EnduraPro's integrated mouse is also a nice feature. The trackpoint was pioneered by IBM in the mid-90s, and it was a good idea that never quite caught on. With USB, it's even more convenient as there is only one cable to worry about. I did end up using it a few times to shuffle my cursor out of the way or to click a link in a browser during some web development. It's not really usable as a primary mouse, but as a quick way to manipulate the mouse cursor without moving your hand, it's great. (Again: USB makes two mice on one machine easy.)
However, the Legend did have some advantages. For one thing, although it's not quite as quiet as the mush-fest boards that we're all used to using, it is a reasonable volume. This is important to me, since I do type in pretty close proximity to someone every day. Also, I spend almost as much time looking at my keyboard as I do touching it. Although I see it out of the corner of my eye (I don't have to hunt and peck for keys, obviously) it is a fixture of my world and I'd prefer that it didn't look awful.
Unfortunately Unicomp does not do so well in that regard either. The keys appear to be made from injection-molded plastic, and the artifacts of that process are clearly visible. In this picture you can see the molding seams leaking on the "2" and "4" keys:

Considering the extremely high quality of most of the other parts that went into this keyboard, it's a shame that a few details like this can ruin the overall effect.
If the Unicomp model was short on style, though, the Déck has an overabundance of it. Right out of the box, the contours of its chassis reminded me of the best keyboard ever, the Apple Extended Keyboard II. It comes with a tool to re-arrange your key-caps, and I purchased it with the suggested additional caps; the keyboard comes with a skull and crossbones, but the expanded set contains keys with symbols including: the "wasd" (and "qe") keys with appropriate directional arrows, a target, a revolver's barrel, and a raised middle finger (presumably for the "fn" or "effin'" key for adjusting brightness):

I particularly appreciated the icons they gave me for my F9 key. Doesn't this just scream, "Run Trial"?

The backlighting is just as serious as the key switches, too: as opposed to most illuminated keyboards with 2 (on and off) or, if you're lucky, 3 (on, dim, off) levels of brightness, the Legend has a whopping seven adjustable levels, ranging from "off" to "the surface of the sun". Here's one of the caps with the key off: no filters were applied to this or anything, it is actually bright enough to hurt your eyes if you look straight at it:

I also appreciate the inclusion of the key removal tool, because I'm sure I'm going to take it out when I need to clean this keyboard. This was made particularly stark because when the EnduraPro arrived, its spacebar was non-functional. I sent a mail to their support staff, and got a very prompt call back from an apologetic fellow who offered to replace it immediately if that was necessary, but asked me first to just try a simple repair: remove the spacebar and put it back.
While this was far from difficult, I ended up rummaging around for about 15 minutes with this support guy on the phone, looking for a screwdriver or something small enough I could jam under a key to pop it off. I couldn't really apply even pressure, and I was worried I would break the key. It came off just fine, but all I found was a ballpoint pen, and I ended up slightly scratching and drawing on the keys I removed, and wiping the ink off was another few minutes wasted. Replacing the keycaps on the Deck, by contrast, took about 5 minutes from start to finish, to replace about 15 keys. Luckily Déck's keys happen to be the same form factor as Unicomp's, so the key removal tool works on both keyboards :-).
In summary, both of these keyboards are a joy to use, feel pleasant to type on, and are a refreshing break from the sea of mediocrity plaguing keyboard manufacture today. While I do wish there were a good wireless keyboard with high-quality switches, the absence of other crazy special features is almost a relief. These are the sort of thing that anyone who types full-time ought to consider purchasing.
Obviously, most people will only need one or the other. If you care all about function and not about form, get the EnduraPro. It's the clear winner in the tactile battle, and the integrated pointer will save you a bunch of hand movement, especially if you only use the mouse occasionally.
However, if you care about style, or you have to worry about working with someone else in the same space, or you like the idea of "escape" being a little picture of a skull on your keyboard, the Legend is probably the board for you.
Since both of the latter conditions do apply to me, I will probably use the Déck as my primary keyboard. However, thanks to the magic of USB, I am leaving both plugged into my computer. If the mood seizes me, I can now always get some of that old-school Model M Clackety-Clack.
Hey, documentation-complainers! I know you're out there, and I know you read this blog. As you know, if you want to learn about Twisted, there is a book you can buy1.
However, thanks to JP's tireless adjustment of margins, there is now a book you can get for free as well. It's a nicely typeset version of the web-based documentation for Twisted's core, with a paginated table of contents, which you can print out and read on paper, if that's your thing. This book is 255 pages - and it only covers the core portions of Twisted.
At some point I'm going to try to put together an "extended mix" version of this book, that includes documentation of the less well-documented and stable parts of twisted. For now, though, I'll trust it'll take you all a little while to get through the first 250 pages :).
-
Paid link. See disclosures. ↩