Paul Graham writes some good stuff. I've stumbled across some of this articles in the past and, unlike most of these types of essays from other dot-com millionaires, I've always been very impressed.

His latest essay takes on the subject of software patents, a subject that nearly every hacker has an uninformed opinion about. I've always had a very libertarian view about patents in general, and was very glad to read that by Mr. Graham's assessment, I'm at least uniform in my opinions on the validity or worth of patents in our society.
Mr. Graham compares software patents to traditional patents, insightfully and accurately explaining what he thinks are some reasons for the sometimes silly patents issued by the USPTO. He compares the rules to a game of hockey, and lawsuits to the rules of body-checking:

Hockey allows checking. It's part of the game. If your team refuses to do it, you simply lose. So it is in business. Under the present rules, patents are part of the game.

What does that mean in practice? We tell the startups we fund not to worry about infringing patents, because startups rarely get sued for patent infringement. There are only two reasons someone might sue you: for money, or to prevent you from competing with them. Startups are too poor to be worth suing for money. And in practice they don’t seem to get sued much by competitors, either. They don’t get sued by other startups because (a) patent suits are an expensive distraction, and (b) since the other startups are as young as they are, their patents probably haven’t issued yet. [3] Nor do startups, at least in the software business, seem to get sued much by established competitors. Despite all the patents Microsoft holds, I don’t know of an instance where they sued a startup for patent infringement. Companies like Microsoft and Oracle don’t win by winning lawsuits. That’s too uncertain. They win by locking competitors out of their sales channels. If you do manage to threaten them, they’re more likely to buy you than sue you.

If you've got an interest in intellectual property law and the business of technology and computing, it's certainly a good read. Like always, you'll learn something from one of Paul Graham's essays.


I’ve always struggled with the Cisco VPN client for linux. It has seemingly never installed smoothly for me, but now I finally have figured out what’s going on. Last week I built a Debian Sarge (stable) box, and installed Cisco’s VPN client v4.7. I used a patched installer I had made a long time ago (and forgot why I needed to patch it), but the module compile was failing. After lots of frustration, I reversed the patch to the original sources, and then the installer compiled the kernel module without any problems. I was using the Sarge 686-SMP (officially linux-image-2.6-686-smp) kernel on a dual Xeon SMP 3.0Ghz box, which for Stable means kernel 2.6.8-3-686-smp.

Just now I built a Debian testing machine, this time using kernel 2.6.15-1-686-smp. I rsync’d the Cisco VPN client from the previus box (Sarge 686-SMP), and after running ‘make clean’, ran the installer. This time I got this:

altefrau:/home/tracv/vpnclient_old# ./vpn_install
Cisco Systems VPN Client Version 4.7.00 (0640) Linux Installer
Copyright (C) 1998-2005 Cisco Systems, Inc. All Rights Reserved.

By installing this product you agree that you have read the
license.txt file (The VPN Client license) and will comply with
its terms.

Directory where binaries will be installed [/usr/local/bin]

Automatically start the VPN service at boot time [yes]

In order to build the VPN kernel module, you must have the
kernel headers for the version of the kernel you are running.

Directory containing linux kernel source pre [/lib/modules/2.6.15-1-686-smp/build]

* Binaries will be installed in "/usr/local/bin".
* Modules will be installed in "/lib/modules/2.6.15-1-686-smp/CiscoVPN".
* The VPN service will be started AUTOMATICALLY at boot time.
* Kernel source from "/lib/modules/2.6.15-1-686-smp/build" will be used to build the module.

Is the above correct [y]

Shutting down /opt/cisco-vpnclient/bin/vpnclient: module cisco_ipsec is not running.
Stopped: /etc/init.d/vpnclient_init (VPN init script)
Making module
make -C /lib/modules/2.6.15-1-686-smp/build SUBDIRS=/home/tracv/vpnclient_old modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.15-1-686-smp'
CC [M] /home/tracv/vpnclient_old/linuxcniapi.o
/home/tracv/vpnclient_old/linuxcniapi.c: In function 'CniInjectReceive':
/home/tracv/vpnclient_old/linuxcniapi.c:292: error: 'struct sk_buff' has no member named 'stamp'
/home/tracv/vpnclient_old/linuxcniapi.c: In function 'CniInjectSend':
/home/tracv/vpnclient_old/linuxcniapi.c:432: error: 'struct sk_buff' has no member named 'stamp'
make[2]: *** [/home/tracv/vpnclient_old/linuxcniapi.o] Error 1
make[1]: *** [_module_/home/tracv/vpnclient_old] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.15-1-686-smp'
make: *** [default] Error 2
Failed to make module "cisco_ipsec.ko". 

Arg, not this again, I thought. Then I remembered that I had reversed the patch for the last machine, so I re-applied the patch and then re-ran the installer. This time it built the kernel module without a problem, and then all was gravy. What this means is that Cisco’s installer does not compile out of the box for kernel 2.6.15, but it does work for kernel 2.6.8. I’m guessing that somewhere in between those releases, pre was changed that breaks the Cisco installer.

So, the point of this post is to help anyone out there who has struggled with the Cisco VPN client. First, make sure you’ve got your kernel’s headers installed - apt-get install linux-headers-uname -r. If you’re still getting a compiler error, try using this patch (I don’t even know where I found it anymore):

    --- linuxcniapi.c 2005-11-12 11:53:06.000000000 -0600
    +++ 2.6.14-vpnclient-linux-4.7.00.0640-linuxcniapi.c 2005-11-12 11:49:20.000000000 -0600
    @@ -276,6 +276,8 @@
    struct sk_buff *skb = NULL;
    unsigned char *pIP = NULL, *pMac = NULL;

    + struct timeval timecount;
    +
    /* we need to build the actual sk_buff from the packet structure */
    pBinding = (PBINDING) Binding;
    lpPacketDescriptor = (LPPACKETDESCRIPTOR) Packet;
    @@ -289,7 +291,10 @@
    goto exit_gracefully;
    }
    /* move the data into the packet */
    - do_gettimeofday(&skb->stamp);
    + do_gettimeofday(&timecount);
    +
    + skb->tstamp.off_sec = (u32) timecount.tv_sec;
    + skb->tstamp.off_usec = (u32) timecount.tv_usec;

    pIP = skb_put(skb, lpPacketDescriptor->uiPacketSize);

    @@ -389,6 +394,8 @@
    unsigned char *pIP = NULL, *pMac = NULL;
    int tmp_rc = 0;

    + struct timeval timecount;
    +
    int (*tmp_InjectSend) (struct sk_buff * skb, struct net_device * dev);
    tmp_InjectSend = NULL;

    @@ -429,7 +436,10 @@
    CniGetPacketData(Packet, 0, lpPacketDescriptor->uiPacketSize, pIP);

    /* put the mac header on */
    - do_gettimeofday(&skb->stamp);
    + do_gettimeofday(&timecount);
    +
    + skb->tstamp.off_sec = (u32) timecount.tv_sec;
    + skb->tstamp.off_usec = (u32) timecount.tv_usec;

    skb->dev = pBinding->pDevice; 

Copy and paste that as is into your favorite text editor (or click download on the file at the bottom of this post), and then place it into the Cisco VPN installer root directory, then run:

patch -p0 < vpnclient-linux-4.7.patch.txt

Then re-run the installer. Good luck, and feel free to leave a comment if it worked for you (or if you have any questions).

UPDATE AUG 30 2006

I recently installed version 4.8 of the Cisco client, and it appears as though Cisco fixed the problem. It works with new >2.6.15 kernels without requiring this patch.

Rebecca and I joined another couple and went to the Stuttgarter Lange Nacht der Museen event earlier tonight, and I'm happy to report that we had quite a lot of fun. The basic idea is that for €12, you have a free pass to all of Stuttgart's museums, including other sites like the famed TV Tower and the Wilhema zoo & botanical gardens, complete with special shuttles running between all the sites. It sounded like a good idea, and we had heard about it before but didn't go, so we decided to take advantage of it this time.

We met our friends at Schlossplatz, and walked over to the Staatsgalerie for our first stop. We purchased our tickets there, and soon we were inside perusing through the impressive building's collections. I guessed they must have closed off portions of the museum due to the sheer number of people showing up, because it seemed as though many sections of the Staatsgalerie were off limits. Nonetheless, we were able to wander through several rooms of modern art, a handful of impressionist work, and a room entirely devoted to Picasso, including two very interesting works from his "blue period." I wasn't an art history major, but I thought some of the modern stuff on display tonight was somewhat dubious as to it's artness (think a solidly black canvas or a pink flourescent tube light). However, the rest of the museum was fairly nice, although I did think they should have opened more to the crowds.

We exited after about an hour, and decided to go to the Wilhema. We had some confusion (along with lots of Germans) as to what shuttles ran to which places (see http://www.lange-nacht.de/downloads/LNDM2006_Tourplan.pdf). After waiting around for about 30 minutes, we finally figured out where to get on the right bus. Well, the right bus came, but was completely packed, so we opted to just take the U-bahn to Wilhema.

None of us had been to Wilhema before, and it was definitely the highlight of the night. We entered Wilhema, and were immediately transported to the U.S. southwest by way of an elegant greenhouse filled with all sorts of cactii. Several greenhouses later, we had seen tropical plants, tons of orchids, azaleas, and much more. The greenhouses themselves reminded me, in terms of style, vintage, and quality, of the great greenhouses in London's famed Kew Gardens (Kew's greenhouses outnumber those at Wilhema). After the greenhouses we were treated to a small, but still interesting, aquarium / terrarium, where a staff member was wrapping a giant constricting python around patrons' necks.

By this time it was 12:15am, and unfortunately we had to forfeit the rest of the Wilhema so that we could catch the U-bahn back home.

I was really impressed with the event, even though we were only able to see two of the numerous different sites. It's a great idea to get Stuttgarters out of their homes to discover all the great things that Stuttgart has to offer. It's just too easy on any other day or night to put off visiting a museum or the zoo. I think just going tonight wet all of our appetites about the cultural attractions around Stuttgart, and I'm looking forward to having more time at Wilhema - it would be very nice to leisurely stroll through during the day.

I think these events happen every 2-3 months, and I highly recommend all you Stuttgarters out there to go take advantage of it.


Zooomr, a Flickr challenger?

There's a new photohosting site that just got out of public beta - Zooomr.  The similarities between it and Flickr don't just stop at the name - the rest of the site seems to take all of Flickr's good UI points as well.  However, it's obvious that the people responsible for Zooomr, BlueBridge Technologies Group, fully intend to innovate.

Homer!
Homer!Hosted on Zooomr

One of the first thing you notice when you go to register at Zooomr is that you don't have to actually register.  You can log in using federated ID authentication from numerous other services - Level9 R5, OpenID, LiveJournal, Google, and Meetro.  I logged in with my Google account, and within seconds I was able to edit my Zooomr profile.  After finding a test picture to upload, I was able to upload and start my Zooomr experience within minutes of signing in (the longest time was spent trying to find an actual photo to upload). 

The basic interface is fairly clean, but that is due to it taking LOTS from the flickr interface.  All the basic elements are in the same place as on flickr, and there's even a photostream, in this case called a "photo catalogue."  Unlike flickr, I found the text elements on the right side of the photo a little distracting - they are too bold and pronounced, whereas on flickr they are more subtle.

Aside from this,  Zooomr has all the basic web 2.0 features you would expect - tags, comments, social communities, RSS feeds, AJAX-y interface, etc.  However, they're adding some pretty cool features like Zooomrtations and Geotagging.  Zooomrtations are basically audio annotations embedded into each image.  This could allow for some pretty interesting visual and audio storytelling.  Geotagging, called Lightmap on Zooomr, is done via GoogleMaps at the moment, and holds a lot of promise.  By extending it a little further, Zooomr could mesh together the functionality of Plazes and Flickr, and in turn create a hot new web 2.0 site.

Check it out for yourself, there's no need to even register!

http://beta.zooomr.com/home 


A New Year

2006 is here, and for the second year in a row I’ve spent the beginning of the new year in Europe.  Last year it was Paris, and this year it was Stuttgart, and our Stuttgart experience was about 100 times more pleasant than it was in Paris.

Rebecca and I just had a quiet night and watched fireworks from our living room, from which we can see nearly the entire downtown of Stuttgart.

It was surprisingly amazing to watch, as there were literally hundreds of individual shows going up all over the city simultaneously. There wasn’t a city-sponsored official fireworks show, and so the Germans all went out and bought what appeared to be huge fireworks (the kind that would be illegal back home). I’m usually not in awe over fireworks, but watching nearly every street corner light up made the city look like it was the middle of a war zone. The sound was ridiculously loud, and after a few minutes it was clear that we had to close our window or else we’d have bottle rockets fly into our living room. Within 30 minutes, the previously clear night that allowed us to see the entire city was turned into a fog that seemed to have creeped in, and the smell of sulfur was unavoidable.

It was a pretty neat experience, and I tried to take as many pictures from our closed windows as I could without getting hit. I’ll try to get them online as soon as we get Internet access at the apartment again.