Timeless design

August 16, 2008

What do these items have in common?

They’re all examples of timeless industrial design. In my mind they’re also brilliant archetypes for the work of their designers Dieter Rams, Giorgetto Giugiaro and Jonathan Ive. While you may not agree with my particular choice, these designers have created so many excellent products that surely a couple of them will capture your imagination. Perhaps a Braun pocket radio, an electric shaver or one of their stereo systems. Maybe the Lancia Delta, the Lotus Esprit or the Alfa-Romeo Brera. One of the iPods or an iPhone, the Titanium and Aluminium PowerBooks/MacBook Pros or even the Mac Mini. You can take any of these items and easily put them in a museum, and in fact people have done so already.

Another thing they have in common, especially the works from Dieter Rams and Jonathan Ive, is a lot of simplicity, clarity, even cleanliness. In fact, it is widely-suspected that Apple’s chief designer Ive takes direct inspiration from Rams and the devices he designed for Braun, as several articles on the web illustrate, in particular one on Gizmodo and a Brazilian one. Of course they also illustrate just how timeless Rams’s design really is, if thirty years later it could inspire a whole range of products that are widely appreciated for their looks.

By now you’ve probably gathered that I’m amongst those who do appreciate the looks. Yes, I have to admit that to a large part it is the simplicity and cleanliness in such design that make me I prefer a 35 year-old Braun stereo over a Sony boombox, a MacBook Pro over a Thinkpad (though there are other reasons, too) and a Mk1 Golf over any later model. And another thing just occurred to me: When my dad went to college, he spent his savings (and a bit more) to buy a Braun stereo, which by today’s standards were even pricier than today’s top-of-the-line Macs. For several years now I’ve spent a considerable amount of money on Apple stuff. Coincidence? I don’t think so.

I no longer prefer flying

August 11, 2008

Whenever I take a plane for a short distance, I feel like I’m trading in comfort for speed: You have to get to the airport, be there at least an hour before your flight, go through security, etc. only to sit in a an uncomfortably small seat (I’m 1.93m / 6’4″) for an hour or two. And for about half that time you can’t even listen to music on your iPod because your either taking off or landing. Not to mention using a computer which I often can’t anyways due to the lack of space.

So why not trade in speed for comfort for a change? I mean, how much time will you actually have won when you’re going through the hassles of air travel? Surely it isn’t very relaxing so I always find myself having to make up for the travels with relaxation time at some point. And who says ground transport has to be slow? When I was in the US last month, I drove from Virginia to central Pennsylvania instead of taking the plane. It took me a mere 4.5 hours to drive. A pleasant drive, I might add. I imagine I could also have taken the bus if I didn’t want to drive myself or wanted to save carbon-dioxides.

In Europe, we typically take trains. I’m trying not to sound too patriotic, but in my opinion the German high-speed train ICE delivers the best package: You don’t have to get a reservation, in fact you can just step into the train without a ticket and pay on-board, but you can also buy a ticket online or at a vending machine, if you wanted. You also don’t have to “check in” or have your luggage X-rayed like with air travel or the AVE trains in Spain. In fact ICEs go to the same stations as regional or medium-range trains do. These stations are typically in the city center (unlike many TGV stations which are outside the cities, much like, uh, airports). While that may slow down the ICE when going from city to city, it’s much more convenient for passengers. Last but not least, many people find the ICE more comfortable than the TGV (although the TGV seems to have the better underlying technology and has therefore broken numerous speed records).

The best thing, however, is that thanks to high-speed trains, the railway has become a serious alternative to flying. Certainly within the country, but slowly they’re also tackling cross-border traffic. That isn’t easy because for decades, each European country was proud to have its own voltage and alternation frequency, not to mention a proprietary signaling system. But the latest generation TGV and ICE have been certified for the various systems in western Europe. You can now take the ICE from where I live, Dresden, all the way to Paris (a whopping 1000 km) in just under 9 hours and you only have to change trains once, in Frankfurt. A bit less spectactular and even half an hour quicker is Cologne to Vienna (900 km). And in just 8 hours you can get from Amsterdam to Munich. Sure, flying would probably add up to about half the time if you count the time spent going from city center to city center (assuming there’s a direct flight), but then I’m much more comfortable in the train. I have tables, 230 V power outlets, GPRS or 3G internet connectivity, in some trains they even have Wifi now. I could have a bite or drink in the on-board bistro. Or I can just sit back and relax.

Unfortuantely there still are numerous challenges in international rail traffic. Neither southern Europe (with the exception of Spain) nor eastern Europe has a high-speed train system. It’ll be a while until you can take a train from Munich to Rome in under a day (the Alps also have something to do with it ;)). But so far, the TGV, Thalys, EuroStar and ICE have brought Paris, London, Brussels, Amsterdam, Vienna and Berlin much closer to each other. I can’t wait until Madrid, Rome, Prague, Warsaw and many other cities join the club.

From my mailinglist post:

When relying on a third-party package with ZCML configuration, it is sometimes desirable to disable certain directives, for instance when the third-party package defines an event subscriber that you’d like to disable. This is now possible with z3c.unconfigure.

While zope.configuration (the package that implements ZCML) itself supports overriding existing configuration and the zc.configuration package supports excluding whole ZCML files from being loaded, z3c.unconfigure allows you to disable specific directives.

More information is available at http://pypi.python.org/pypi/z3c.unconfigure.

(This is a post from my old blog which seems to be going offline once in a while, maybe even permanently at some point. This article is still very useful, especially with laptop searches now happening at U.S. borders, so I’ve reposted it here for other people’s and my reference.)
Let’s face it, you always end up having sensitive data on your laptop. If you ever have your laptop stolen (and I have!) or when you cross borders, this sensitive data may fall into the wrong hands.  It’s not that I carry nuclear missile launch codes around with me, but thinking that a simple laptop thief may easily access

  • VPN keys for accessing customer networks and customer code that I have signed NDAs for,
  • credit card bills, tax reports and other financial information,
  • print-ready PDFs of my book that might eventually circulate eMule,

does scare me a bit.  If you’re thinking that laptop thieves perhaps don’t have enough technical expertise to take advantage of this data, how about this: I archive all electronic invoices, especially for my computer equipment and various other gadgets, and my home address can easily be found in many documents on my harddrive. I could get my laptop stolen and the thief might decide to come back to my house for another “shopping tour.”  Perhaps he can even deduce from the electronic plane tickets when I’m on a business trip and take all the time he needs to break into my appartment.

One obvious solution to avoid letting this information fall into the wrong hands is not to carry it around all the time.  But I only have this one computer and I’d like to keep it that way.  “So store sensitive data on an external harddrive,” you might say.  That makes a lot of sense, but more than often I’m away from home, perhaps with a customer, when I want to check something that would be on the external harddrive.  And if I took it with me, it could be stolen or detained by the DHS just as well.

The best solution, and most comfortable one, simply is to encrypt your sensitive data.


Mac OS X comes with a built-in system to encrypt your whole home directory with a pass-phrase.  It’s called FileVault.  The integration is seamless and you won’t notice that your files actually live inside an encrypted disk image.  That’s very nice.  The problems with this approach are the following:

  • I have loads of other data in my home directory that doesn’t need to be encrypted at all: mp3s, movies, tons of checkouts of open source software, etc.  Encrypting those would be a waste of CPU cycles.
  • When I make a backup, I want to back up the encrypted form, not the raw form.  Otherwise somebody would just have to get a hold of my backup (e.g. the backup disk I carry around in the same bag as the laptop…).
  • Being logged in automatically means having access to the encrypted data.  Sometimes I would like to be logged in to let others have access to the machine (e.g. during repairs, parties, sprints, etc.) and NOT risk sensitive data to be accessible.  Sure, in most of those cases it’d be possible to create a new user account and be logged in there, but that’s typically a major hassle.  Wouldn’t it be easier if I could simply lock down parts of my home dir for a while?

Encrypted disk image

Mac OS X supports a particular form of “loop devices” called disk images.  These are files that look like a regular disk device: They contain an (Apple) partition map and an HFS or UDF partition.  There are several neat things about these disk images:

  • they’re resizable
  • they support a SPARSE mode in which the image grows as it needs and doesn’t occupy its defined size
  • there’s an on-the-fly compression available
  • they support on-the-fly AES encryption

So much for the well-known features of DMGs.  One of the lesser known features is that when Mac OS X “attaches” an image, it represents it as an actual disk block device unter /dev, so you can mount it practically anywhere you like — not necessarily under /Volumes where double-clicking on an image would normally mount it.

My idea was to designate a certain directory within my home directory as a “secure” area.  This directory would in fact be a mount point for an encrypted DMG.

Creating an encrypted sparse image

The image can be created using Mac OS X’s excellent command line toolbox:

hdiutil create \
    -encryption -stdinpass \
    -type SPARSE -fs HFS+J \
    -volname Secure \
    -size 100g \

Note that the 100 GiB size limit here is purely theoretical as the image is of type SPARSE, which means it starts with practically 0 Bytes of size and grows as it needs.  And even if it had to grow larger than 100 GiB, you could always resize it quite easily.

You can now mount the image file by double-clicking on it.  This however, will mount it below /Volumes.  If you’re ok with that, stop reading here and go on moving your sensitive data to the disk.  If you prefer having the image mounted below your home directory, keep reading.

Mounting the image inside the home directory

Instead of double-clicking on the image, use the following command to attach the DMG to a disk device and mount it to a mount-point inside your home directory:

hdiutil attach -mountpoint ~/Secure Secure.sparseimage

If you’re like me and work with the command line a lot, you could alias this command line to a short command (e.g. mount-secure) in your .profile file.  If you prefer to work with Finder, you can create the following small AppleScript (worst scripting language in the world, but it lets you create OS X apps that are executable with a simple double-click):

do shell script ("hdiutil attach -mountpoint ~/Secure ~/Secure.sparseimage")
tell application "Finder"
  make new Finder window
  select Finder window 1
  set target of Finder window 1 to disk "Secure"
end tell

With this saved as an .app application, you can now double click on it, enter the passphrase for the image and be presented with the Finder window of the newly mounted volume.

One interesting and slightly-annoying detail is that once the ~/Secure folder has become the mount point of the image, the Finder doesn’t not show it inside the home folder anymore, but instead as a top-level volume, while from the Unix environment, it’s obviously still accessible as ~/Secure.  So visually, the Secure image does not seem part of the home directory while physically it is.  But since I work with the command line a lot, I care more about the physical location of the mount point.

(This is a post from my old blog which seems to be going offline once in a while, maybe even permanently at some point. This article is still very useful so I’ve reposted it here for other people’s and my reference.)

Thanks to Hanno Schlichting’s howto, I’ve figured out how to create Windows eggs of those packages that have C extensions. This approach doesn’t need Microsoft Visual Studio, nor does it require you to wade
through a bunch of free Microsoft downloads that don’t really work in the end anyway.

Here’s what I did:

  1. Installed the standard Python 2.4 distribution from the MSI package.
  2. Installed the MingW compiler (into the standard location C:\MingW)
  3. Created C:\Documents and Settings\Philipp\pydistutils.cfg and put the following text in it:

    This tells distutils to always use the MingW compiler whenever it has to compile something from C.

  4. Went to the Control Panel -> System -> Advanced tab and clicked on the Environment Variables button. There I appended the following text to the the Path environment variable, adding the Python interpreter as well as MingW’s programs to the search path:

    Then I added another environment variabled called HOME with the following value:

    C:\Documents and Settings\Philipp

    This points distutils at the pydistutils.cfg file that I created earlier (you can put the pydistutils.cfg file anywhere you want, you just need to make sure that the HOME environment
    variable points to the directory).

  5. With that in place, I am able to take any tarball (e.g. zope.interface-3.4.0.tgz), unzip it and create a Windows egg from it like so:
    python setup.py bdist_egg

What’s more, with a setup like this, it is easily possible to install Zope 3 completely from eggs (e.g. using zc.buildout) even if there are no pre-built Windows eggs on the Cheeseshop. More specifically, with this setup, zopeproject (which is really just a convenience tool over zc.buildout) works like a charm on Windows now.

In 5th grade I took an optional afternoon class: typing. We learned how to type on classic, non-electric Triumph-Adler typewriters using the ten finger technique. Since then I can type text with my eyes closed at relatively high speed. Back then it was 300 char/min on those clunky mechanical type writers with their steep keyboard. I think it’s more on a computer keyboard (depending on the text, of course). We also learned basic typesetting techniques when writing documents with the typewriter, especially how to type a standard business letter. So all in all, this class was immensely useful for basically any office-related work later on, not to mention software development.

I still remember vividly how my dad said to my mom in the late 1990s, “Thankfully I’m too old to get a computer at work. It’s a tool for younger generation, not for me.” That was when he still had a secretary that he would give dictaphone tapes to. Naturally, at home I would be his secretary, having done that typing class. Just a year later he had a computer on his desk. Fast forward a few more years, he’s typing lots of letters, then emails, both on and off work. Of course he does. Everybody does these days! But just think about how much easier it would be for him if he had taken that typing class as well.

So like you, I and even my dad, everybody’s going to have to do a lot of typing in their job, no matter whether they’re a car mechanic or a Fortune 500 executive. It’s probably safe to say that this won’t change in the too distant future because let’s face it, speech recognition hasn’t caught on yet and it’s questionable whether it ever will be.

It’s been a while since I was in 5th grade. I wonder whether typing as a class has become a mandatory part of any school’s curriculum nowadays. If not, why hasn’t it? And who can we talk to to make it happen?

Tu misera America

August 2, 2008

As if taking off your shoes, being inspected in a machine that I can only describe as a miniature gas chamber while your shoes are checked for hazardous materials (boy, they should just smell mine, there’s a chemical WMD for ya!), and then being grunted at by an unfriendly immigration officer wasn’t enough of a hassle when going to the U.S. No, now I could also have my laptop detained, my data inspected, copied and stored by the Department of Homeland Security for God knows how long, and all that without even being under suspicion.

What happened to the Fourth Amendment that I was taught in U.S. History class?

The right of the people to be secure in their persons, houses, papers, and effects, against unreasonable searches and seizures, shall not be violated, and no Warrants shall issue, but upon probable cause, supported by Oath or affirmation, and particularly describing the place to be searched, and the persons or things to be seized.

How much paint thinner do you have sniff to not find the DHS’s practice “unreasonable?” How can this not be unconstitutional? I suppose you’ll have to go to law school to understand your own rights, or the absence thereof in this case…

How cynical does New Hampshire’s number plate inscription “Live Free or Die” sound now! If this is America’s new interpretation of freedom, dying is starting to look like a serious alternative. Or at least not going there anymore.


August 1, 2008

I apologize in advance if I’m stealing anybody’s thunder with this post, but why should we keep it a secret that ME GROK HAS DOKS! Much thanks to Uli Fouquet for setting up the reference docs using Sphinx!


Get every new post delivered to your Inbox.