Monday, December 19, 2011

Linux Mint 12 with MATE

If you are a fan of GNOME 2 you probably think GNOME 3 is unusable garbage. Linus does. Well MATE is here to save the day. MATE is a fork of GNOME 2 that can be installed on the same system as GNOME 3. Linux Mint 12 comes with MATE and GNOME 3 + MGSE.

Wednesday, November 30, 2011

Don't be cheap, be frugal

Number 8 in Paul Graham's essay Startups in 13 Sentences is "Spend Little. I can't emphasize enough how important it is for a startup to be cheap." It's a good essay, and even more interesting to watch as he writes and corrects it. But he is wrong on about #8. Cheapness is always bad, frugality is good. It may seem like minor semantics, but from someone as influential as Paul Graham it makes a difference.

Thursday, October 20, 2011

Pictures and video of South Beach, Fleet Week, and motorcycles.

Here a bunch of pictures I took around South Beach Harbor, AT&T Park, Fleet Week, and some videos of awesome motorcycle riding at Pier 30/32.

Wednesday, October 19, 2011

Airsoft and laser tag at Escape Sonoma County


This past weekend I went to Escape in Rohnert Park to play airsoft. For those that don't know, airsoft is played like paintball, but the guns shoot plastic BBs instead of paint. The guns are generally realistic replicas of military firearms, as opposed to the funky looking paintball guns. A lot of the guns are such accurate replicas that accessories designed for the real guns fit the airsoft guns.

At Escape airsoft is only played on Sundays, and they use the same arena as QZAR laser tag. The arena is a close quarters battle (CQB) field, it consists of a bunch of little rooms with windows and doors, and random barrels everywhere (just like in video games!). In first-person shooter (FPS) terms the gametype in Team Deathmatch (TDM) without respawn. The rounds end up being pretty short, probably because the area is quite small (5000 sq ft). Overall it's a lot of fun, the people are friendly, and it's well worth the money.

Monday, October 3, 2011

What the... washed my car for free!

A few days ago I was walking down the street and I saw two guys with bright red shirts, they looked kind of like Facebook employee shirts, except they said Cherry on them. And they were putting business cards on cars, including my car. I took the card off my car, it said:

"The Carwash that comes to you
Park anywhere, check in online and we'll wash you car right where you left it, in real time.
Get your free carwash at"
What a brilliant idea! I live in an area of San Francisco without driveways and hose hookups. Getting a car wash means I have to drive somewhere, and lose my valuable parking space. The business card has been sitting on my desk for a few days, and tonight I decided to sign up. Registration was easy and they have a good website (once you login). I browsed around the site, their HQ is a couple blocks away, and they are hiring a front-end dev. Normally car washes are $25, but I get a free one, I decided I'd use it later this week.

All this thinking about my car made me remember, it's street cleaning tonight, I have to move my car--right now. So I rush out the door. I find two more Cherry business cards on my car. Luckily I find a good parking spot on a different street. As I'm closing my car door I notice something, the door is smooth, like really smooth, like just waxed smooth. What the...!? I haven't washed my car in over a month, it's too much of a pain. I only drive once every few weeks. My car should be filthy... but it's clean... really clean.

Yes, Cherry washed my car for free, and I didn't even ask them to. I don't know whether they were supposed to wash another car and washed mine by accident, or if this is just brilliant marketing. But I'm happy! I tried to think, is there a time I wouldn't want my car washed for free? I try to avoid drive-through car washes, but I'm always in favor of a good hand wash. If I had I classic car or a show car, I wouldn't want it washed by a random person. Then again, if I had a show car I wouldn't park it on the street covered in two months of dust. Cherry probably thought through the same thing. Most people are going to be happy, just don't wash any '65 Mustangs or Lamborghini Murcielagos without being asked.

Cherry's website says they are "building an online/offline technology to connect consumers with services they use every day." I have a feeling they are planning to do more than wash cars. It's a closed beta, if you want a free car wash click here. Cherry is on Twitter @Cherry.

Wednesday, September 28, 2011

Python libraries should not be licensed under the GPL

GNU General Public License (GPL) is great. It has helped the computing world in huge ways. I don't think Linux would be where it is today if it weren't for the GPL requirement that people who distribute modified versions of Linux also release their modifications. The GPL is what is called a copyleft license, it means modified versions of GPL'd software must be released under the GPL or a GPL-compatible license. In this way the GPL is infectious, like a virus. If you release software that includes any GPL'd code, your software in now under the GPL, or your software is illegal. Your software cannot be licensed under a permissive open source license like the BSD or MIT licenses.

The viral nature of the GPL poses a problem for code libraries, because anything released that uses the library will have to be GPL licensed. Mercurial has a good explanation of how the GPL works. It's really easy to write a little web application to display info about your local Mercurial repositories, all you have to do is import hg and write 50 lines of code. But if you do import hg, and you release your code, it must be released under the GPL. This is fine for a major stand-alone application like Mercurial, but not for libraries that don't function on their own. I have been disappointed by how many Python libraries are licensed under the GPL, for example all the DHCP-related libraries I have found are GPL.


The GNU Lesser General Public License (LGPL) is specifically designed to be used by libraries, it allows a license-incompatible application to link to a LGPL'd library. I personally find the LGPL to be extremely confusing for non-C applications. The terms it uses like "linking" and "header files" don't make sense for most interpreted laguages like Python and Ruby. The confusion has led to the creation of the Lisp LGPL. The Free Software Foundation has tried to clarify this confusion for Java, but even their clarification is confusing.

"Applications use Java's “import” functionality to access classes from these libraries. When the application is compiled, function signatures are checked against the library, creating a link."

So in Java it works correctly because Java compiles and links? What about Python which compiles at runtime? Or combined/minified JavaScript? Twisted was originally licensed under the LGPL, then it was changed to the MIT License. In regards to choosing the LGPL, Glyph Lefkowitz the creator of Twisted, said:

"In that, the confusing wording of the LGPL as it regards Python code was an asset. It would be a halfway accurate statement that I selected the LGPL exactly because it doesn't make any sense."
I'm not a lawyer, but I agree, the LGPL doesn't make sense, if for no other reason than it has created all this confusion.

Real World Example

For a real world example lets look at MySQL. The MySQL database and libraries are licensed under the GPL, with a key exception, it allows linking from OSI-compliant open source software. That linking exception allows MySQLdb, the Python interface to MySQL to be dual-licensed under the GPL and the old Python License. The Python License is a liberal BSD-like license. As a result of the permissive licensing of MySQLdb, the extremely popular Django framework, licensed under a BSD License is able to use MySQLdb. And a cool project like Review Board, licensed under the MIT License is able to use Django. If MySQL didn't have the linking exception, MySQLdb, Django, and Review Board would all have to be GPL licensed.

More realistically if the MySQLdb team had decided to only license it under the GPL, Django and all other frameworks would not use it. Instead they would use a BSD-licensed alternative, and the MySQLdb project would die. The same is true in the Ruby world, Ruby on Rails is MIT licensed. If you are writing some really cool Ruby library, and you hope it's going to become uber popular and included in Rails, you better not license it under the GPL.

Your Choice

The developers of software have the right to choose what license they use, and I don't mean to sound like I'm telling them what to do. I understand many people strongly believe in the GPL, and they choose it knowing the full implications of it. But I think, or at least I hope that most open source developers writing libraries want their libraries to be as widely used and useful as possible. If that's the case, I strongly believe that BSD-like licenses, like the BSD 2-Clause License, MIT License, or ISC License are the way to go.

Sunday, September 11, 2011

My Memories of 9/11

My alarm went off at 5:55am PDT. I used my Aiwa stereo as an alarm, tuned to KGO Newstalk 810. There was some breaking news about an airplane hitting one of the Twin Towers in New York. Some eye witness said it was an airliner, like a Boeing 737. I thought yeah right, airliners don't crash into buildings, it was probably a little Cessna. I went downstairs and turned on the TV. I watch replays of the plane hitting, it was an airliner. At 6:03am PDT I watched live as a plane hit the second tower. The TV anchor didn't notice it was a second plane, he said it was a replay, but I noticed. One tower had smoke coming from it, and a plane hit the other tower. The TV said Live. It was shocking.

It was time to get ready for school. I had a Linux Administration class that morning, the official title of the class was probably something silly like "Introduction to UNIX", but it used Red Hat Linux. I brought a radio into the bathroom and listened to KGO as I got ready. After getting ready for school I went back to watching TV. I saw the people jumping out of the buildings. Then one of the towers collapsed. A wave of dust rushing down the streets. Then another tower collapses. It still brings tears to my eyes to think about it. It was horrific. I went to school.

Some people in class hadn't heard about the attack. It was hard to form the words to explain it. The towers were just gone. It was a very quiet and somber day in my Linux Administration class that morning.

Monday, September 5, 2011

99 Bottles of Beer in CoffeeScript

99 Bottles of Beer is a really fun (for a geek) website that has a huge collection of programs written in different programming languages, that all print the lyrics to "99 Bottles of Beer." It is a great way to show off the basic elements of a language, such as conditionals, loops, variables, string printing, etc.

There are examples of language simplicity, such as this Python version. Or the complete absurdity of a language, like the Perl example the looks like ASCII art of bottles of beer, but is actually executable Perl. Then there are the crazy funny languages like lolcode and COW.

CoffeeScript is a language the compiles to JavaScript, but it is simple and elegant like Python. While I was learning about CoffeeScript I noticed there were no CoffeeScript versions of 99 Bottles of Beer. So I wrote one! It's not fancy, it's the most straight forward way I could think to do it. I submitted it to, hopefully they will accept it.

If you are using Mac OS X you can use Homebrew to install CoffeeScript and Node.js (required for command-line CoffeeScript).

Tuesday, June 21, 2011

A sad day: 428 days of uptime lost

My Linux workstation had been up for 428 days without a reboot. No cheating, I don't think I even logged out of my X session in that time. But today is a sad day, I had to move my workstation to a new room.

I considered getting a UPS and trying George's Frogger move from Seinfeld. But it probably wouldn't have worked.

The upside is the reboot restarted all the memory leaks, so I'm not using 1GB of swap anymore!

Monday, May 30, 2011

You should stop using WordPress

It's not just WordPress, it's all Content Management Systems. A self-hosted CMS is a bad choice for a personal site or a small business. There are better choices than taking on the risks that come with using WordPress, Drupal, Joomla, and other CMSs.