I’ve been thinking about Lisp lately. A powerful language, with many excellent
features, but not hugely successful. And I thought of one reason why:
The excellent book Guns, Germs and Steel hypothesizes that agriculture displaced
hunting and gathering because people who practiced agriculture stayed in one
place, and were able to have one child per year, as opposed to the hunter-
gatherers, who had to wait until their children were old enough to walk before
having another child. This reproductive rate difference was amplified by the
ability for a given unit of land to support more farmers than hunters. As a
result, agriculture displaced hunting even though individual hunters were far
healthier (as seen by their skeleton height) than the farmers that displaced
So it is possible for a poorer technology to displace a better one, if
it has compensating advantages. And I think that’s what’s hit Lisp. C and
Java, which are each less powerful and more wordy than Lisp, are more
successful for reasons other than power and brevity. Perhaps because both
languages allow lots of reusable code to be written by ordinary programmers.
Maybe Lispers are like healthy hunters, being displaced by hordes of sickly
Well, no doubt the Lispers will take some comfort in the Java and C
programmers being displaced in turn by whatever language next becomes even
more successful, just as hunter-gatherers may take pleasure in the trend that
farmers are gradually being displaced by urban dwellers. (Come to think of it,
Lispers have already seen their original competitor Fortran displaced by
C/C++, and in turn much of C++ has been displaced by Java and C#.)
something similar is happening in productivity applications, as a generation
of not-very-good-but-web-based productivity applications is displacing the
Microsoft Office suite. (For example, I am typing this blog entry into a
simple and ugly HTML-based web form rather than a beautiful Word document.)
This week I converted my family’s main computer from Vista to OS X. (It’s a
We pretty much use it for web surfing, web email, really old DOS
children’s games, and photo editing. Macs do that pretty well.
I still have a
Vista machine that I use for the excellent Windows Media Center – love the
record-by-keyword feature and the free programming guide.
But for day-to-day
use we’re back to the Mac.
I’ve spent roughly 4 years of midnight-engineering time looking into the cool
languages to see if they would make game programming easier or more fun.
Haskell, Ocaml, F#, Erlang, Scheme, Lisp, D, Factor, Scala, Python, I’ve
looked at them all.
F# held my attention for quite a while, but now my
platform-of-choice has moved away from F#’s design center. (I’m into Linux-
based mobile platforms now.) And to be honest, I’m still happier in a C-like
I’m depressed. Sure, I learned a lot about fancy language features,
but I could have written quite a few games in plain-old-C++ (or C#, or Java or
Flash or Basic) in the same time.
P.S. Someone else has done this more
impressively than I have. Do a Google Groups search for Brandon van Every, who
has had a five year odyssey to find the perfect non-C++ game programming
language. I corresponded with him back when we were both interested in O’Caml.
Since then he’s managed to annoy pretty much everyone by harping on their
favorite language’s shortcomings. In the end (at least as of six months ago)
he’d given up and gone back to C++. I look forward to seeing what he does
I’ve been poking around with Lisp and Scheme again, and am reminded of some of
my favorite science fiction books (warning, plot spoilers follow):
- Verner Vinge’s “A Fire Upon the Deep” begins with a group of scientists mining an ancient civilization’s web archives. They need to build interpreters for the ancient civilization’s programs. All goes well until they reconstitute a malevolent AI that they spend the rest of the book fighting.
- Piers Anthony’s Macroscope involves a group of people trying to decode an Extra-Terestrial message, that other ETs are trying to jam. Over the course of the book your opinion as to which group of ETs has humanity’s best interests at heart changes back and forth several times.
- Any number of SF stories are set in the far future where people poke around in the ruins of a once-great civilization. (See Gene Wolfe, Cordwainer Smith.)
Working with Lisp reminds me of these books. Lisp’s a seductive, ancient,
powerful language that has been worked on for years by very smart, very
motivated hackers. Pretty much everything one can think of to do with Lisp has
been done, multiple times, by really smart people.
For example, I want to have
a system where I can interactively write a game, changing code on the fly
while the game is running. I want to be able to use macros and garbage
collection and free serialization and inspection and all that cool stuff that
And Naughty Dog had all that, in GOAL, for the PS2. Their
implementation was apparently much better (more efficient, less buggy, more
features) than one I could cobble together out of open-source-Lisp parts. And
they had used it to successfully write two or three games. But they they
walked away from it. Gave it up. Went back to C++.
They said it was because
they had a lot of pressure from their parent company to make their engine more
reusable. But I think it’s also because the results they were getting just
weren’t that much better than the results that all the other developers, who
use C++-and-some-cheap-scripting-language-like-Lua, were getting.
I think Lisp
is like a powerful alien technology that may not be in your best interests to
As seen on Lambda the Ultimate.org
Quantifying the Performance of Garbage Collection vs. Explicit Memory
Management We compare explicit memory management to both copying and non-
copying garbage collectors across a range of benchmarks, and include real
(non-simulated) runs that validate our results. These results quantify the
time-space tradeoff of garbage collection: with five times as much memory, an
Appel-style generational garbage collector with a non-copying mature space
matches the performance of explicit memory management. With only three times
as much memory, it runs on average 17% slower than explicit memory management.
However, with only twice as much memory, garbage collection degrades
performance by nearly 70%. When physical memory is scarce, paging causes
garbage collection to run an order of magnitude slower than explicit memory
I just sold my MacBook over the web. I sold it on Craig’s
List. I also considered using
eBay, but Craig’s List turned out to be a better deal,
for both buyer and seller.
The reason is that listing and selling on Craig’s
List is free, while selling on eBay is expensive, especially for items priced
higher than $500. First, there’s the listing fee of $0.20, then the Final
Value fee of $0.50 + 3.25% * price. But wait, there’s more: EBay all-but-
requires you to use their PayPal service to settle transactions, and PayPal in
turn requires you to use a “Premier” account if you receive more than $500 in
eBay payments in one month, which you automatically would if the item you’re
selling is more than $500. Using a “Premier” account requires that you pay
PayPal 2.9%+$0.30 per transaction, even for cash transactions. (The processing
fee is less if you are doing a high volume of business through them.)
total eBay selling cost is in the range of 6.15%. That’s $50 on a $800 item.
You could avoid accepting PayPal, but since accepting PayPal is the norm on
eBay, it’s very likely that your auction will be shunned, and you will receive
a lower price.
Besides the hefty fees, using PayPal is riskier for the seller
than using cash. This is because it is possible for a disgruntled buyer to
reverse the transaction. (Of course this same ability is a plus for the buyer,
as is the ability to use credit cards.)
Even without using eBay to sell the
product, it makes sense to use eBay as a price setter. eBay makes this easy to
do by reporting the final price for closed auctions that you are “watching”.
Since auctions last between 3 and 10 days, and an auction must be active in
order for you to watch it, you will need at least a week to track enough
auctions of similar items to make a fairly accurate estimate of the market
The Fall 2007 Xbox 360 dashboard update (coming December 4th) will add support
for DivX and MP4 playback.
This is great news for Xbox 360 owners who want to watch
video encoded in these formats. I’m surprised that Microsoft did this, because
these formats compete with Microsoft’s own WMV format. While the benefit to
consumers is obvious, I’m not sure what the benefit is to Microsoft. I’m
guessing they did this to both improve the “watch your PC’s videos on your
Xbox” story, and also to match an existing PS3 feature.
This morning I fired up Mario Galaxy 64 on my new Wii for some early-morning
platforming. I happened to sit closer to the screen than I normally do. Yuck!
The jaggies were suddenly very apparent and very distracting. But when I moved
back to my normal viewing distance, the jaggies were gone, blurred out by my
It’s no wonder that HDTV and HD gaming in general is not taking
off as quickly as consumer electronics companies hoped – the benefits are
just not that apparent to normal eyes at normal viewing distance.
Jaggies aside, Mario Galaxy 64 is great fun! A very smooth difficulty curve, and
gorgeous graphics. Right now I’m working my way through the candy level. (I
have seven stars.)
I had a very nice birthday brunch at Salty’s on
Here’s a variety of
different ways of linking to Salty’s on Google Maps:
Search Result with
A place that isn’t Salty’s at
I finally got a Nintendo Wii this weekend. Wii’s are in fairly short supply
right now, so I couldn’t find one at a reasonable price on-line. If you live
in the Seattle area, here’s my Wii-finding tip: Fred Meyer stores get
deliveries on Wednesdays, Fridays, and Sundays, meaning that calling a Fred
Meyer store at 7am on Sunday morning to check if they received a new shipment
is a good way to find a Wii.
The total cost, with tax, an extra controller,
and a component video cable was around $350.
I’ve got Wii Sports, Wii Play,
and will be picking up Mario Galaxy this week. The primary users will probably
be my kids, although I am very interested in trying out Mario Galaxy.
former Xbox 360 developer, I couldn’t help comparing the Wii to the Xbox 360.
So far I give the Wii high marks for:
- It’s small and quiet.
- It starts up quickly.
- The dashboard UI is very clean and pleasant.
- The low-res (480p component) graphics are quite good. I did occasionally see jaggies, for example on the edges of the bowling pins during close-ups in Wii bowling. But the Wii encourages you to play fairly far away from the screen, which masks the lower resolution.
- The Wii remotes are great! I love the new gesture “verbs” that are available for game play, and I found it much easier to enter text with the Wii than with an Xbox controller.
- The TV station metaphor for the top-level UI is a good metaphor. It makes it easy to take in the available options at a glance. And the Wii remote makes it low-effort to pick the channel you want.
- Having built-in wireless was a nice touch.
- The Mii avatars are pure genius. Both the fun of designing them and then having them appear in the sports-style games. This is something that the other consoles should copy, and I’m surprised they haven’t. Maybe it’s patented in some way that makes it difficult to copy.
- I thought it was a nice touch that I could name my console, but I didn’t see the name used anywhere.
- My two three-year-old daughters were strongly attracted to the Wii dashboard and games’ graphics and sounds, saying things like “pretty!” and “I like it!” They never said this about the Xbox 360 dashboard or games.
- My five-year-old son really got into acting out the moves in the baseball game. And he has not yet played real-world baseball. It will be interesting to see how he does when he starts playing real-world baseball next spring.
- The UI of the Wii online store is very good. The Mario themed downloading bar is pure genius – you know you have a good UI when people enjoy watching the download progress bar.
Some things I didn’t like about the Wii:
- The UI for pairing a second wireless controller to the console was hard to discover. (I will give Nintendo big props for pre-pairing the in-the-box controller with the console. I’m sure that adds cost to manufacturing, but it makes for a great out-of-box experience.)
- The network connection UI gave very little feedback on why the network connection failed. When you test network connectivity you get a 20 second “testing” animation, followed by a cryptic five-digit error code. I had to make two changes to my router configuration to get networking to work. I would have preferred the Xbox 360’s UI, that gives more step-by-step information about network connectivity issues.
- My three-year-olds can’t handle the Wii controller very well. There are too many buttons to accidentally press, and the required gestures are too complicated for them.
- No downloadable games demos. And very few downloadable games at all.
- The walled-garden Internet channels are pretty weak, especially the Everybody Votes channel.
- Not many current or upcoming games that I want to play. After Mario Galaxy, I don’t know what my next purchase will be. Luckily, the current games should keep my kids happy for quite a while. (My son’s been working his way through Cloning Clyde on Xbox 360 for the past year, I can only imagine how much fun he’s going to have with Mario Galaxy!)
In conclusion, I’d have to rate the Wii as a much better “family” console than
either the Xbox 360 or the PS3. And by family I mean “small children”. I’m
lucky that I like the Wii’s UI and game style, because I have a feeling I’ll
be hearing and seeing a lot of it over the next few years. As for my trusty
360, I suspect it will be mostly relegated to “Media Center Extender” status.
(Although I am definitely looking forward to Alan Wake and I have high hopes
for the next Banjo game. And I might get “The Orange Box” – Portal and Team
Fortress 2 look like a lot of fun.)