<M <Y
Y> M>

[Comments] (2) Kinds of Sauce: As Kris' and my generic Tom Waits parody goes, "Life just keeps suckin'." However, I have discovered that hot fudge sauce is better if you make it with coconut milk instead of condensed milk. Also, I made a strawberry coulis and it didn't turn out great. Not bad for a first try though.

Game Roundup: The Antirevenge: I'm actually not terribly clear on this concept of "antirevenge", but I do know a few things about games and the rounding up thereof, as I shall demonstrate. Incidentally, my fancy new graphics card has graphics acceleration, so I should now be able to review a bunch of games (like Kenta Cho's magnificent space shooters, each of which redefines the genre) that have been stacking up because previously my only review of them could have been "too slow".

The Krakow Wakes: Friday night dinner date: Krakow in West Portal. Polish food. Pricey, but everything's homemade and good. They have a wonderful thing called sourdough soup, which I don't even know if it's a real thing or if it has actual sourdough in it or what, but it was incredible. Best chicken I've had in a long time, but that's not saying much because I only eat chicken in restaurants and, like restaurant chocolate cake, restaurant chicken is always incredibly dry, so just doing chicken right is enough to be noteworthy. The only saeurkraut I've ever eaten and enjoyed. Good chocolate mousse for dessert. I would go again and just eat a couple bowls of the soup. It's that tasty.

: Done with the Cheetah article. Good to know I can still put these things off until the last minute.

[Comments] (1) Missed Calls... Of Destruction!: Riana and I went to see a preview of Godzilla: Final Wars, but it was sold out, so no Godzilla for us. Instead we watched a DVD of Kiki's Delivery Service, which was great.

Working on a little project which is fun and which you might like when I'm done. Also trying to get my sci-fi story done before someone actually implements the idea and it becomes pointless New Yorker fiction instead of sci-fi. My next article isn't due until the end of the month so I have a little time to do other things.

: Lately I've picked up an interest in the universe. I come to this interest only recently, after becoming frustrated at the lack of anything else to be interested in. Where to start but with a map of the universe and its major features? Disturbingly, among its major features are two Great Walls and something called The Great Attractor, which can't be good. Disturbing it may be, but this new hobby of mine has much to recommend it. Now, if only there were souvenir bits of the universe that you could buy and take home with you. Wait, that's it! I'll be rich!

[Comments] (1) Hubris: There are a bunch of buildings full of biotech companies by where I work, and today I saw a big on-building logo that said "LifeMasters". I feared for the worst, but it turns out that LifeMasters is just some health care thing for people with chronic conditions. I've never feared for the worst and then been so disappointed.

[Comments] (7) Gained In Translation: I should have mentioned earlier that my seeing Kiki's Delivery Service earlier with Riana was actually the second time I saw it; I'd also seen it the day before with Sumana. Also we had watched Elf, which Sumana really likes but which I wasn't crazy about.

Anyway, when I watched it with Sumana we watched it in Japanese with subtitles, just because that's how we saw Spirited Away in the theater and we liked the voice work for that movie. About halfway through the second viewing, the disc started acting up and we tried various things to fix it, including switching the audio track to English. And gaah! but the English track was a mess.

There was already a perfectly servicable and (as far as I could tell) pretty faithful English translation, which was used as the subtitles for the Japanese audio track. But in the dubbed version, this translation had been jettisoned in favor of what was clearly a much looser and greatly inferior translation, complete with entirely new lines of dialogue that didn't even work. It was like someone's bad fan fiction had been dubbed onto the movie. So I guess I am going to have to be a subtitle snob, if that's what they do when they dub movies. I never really compared the subtitled versions of a particular movie to the dubbed before, because I assumed they used the same translation for each. Does this always happen?

: I restumbled upon the term I first encountered in a restaurant a month ago. It's "concasse". Once again the peculiar genius of the French is evident: "concasse" means "chopped-up tomatoes". Ah, but if la tomate, she is but lightly mashed, zen she is "a la dabruque". So simple, non?

[Comments] (2) NewsBruiser Nepotism Number N: My cousin Jill Whitney now has a weblog! The template looks just like John's weblog, but it's blue!

: Remember the Game Roundup about a year ago where I gushed about a game called Metal Blob Solid? Well, the game is now complete, and there's a postmortem along with postmortems of the designers' other games. I've always loved game postmortems, especially for open source games.

[Comments] (7) : I tried making marshmallows with agar agar and it was a disaster. What went wrong? I tried again with gelatin and that too was a disaster, but not in an unsuccessful-marshmallows way; more like a third of the marshmallow mixture stuck to things like my hands and the kitchen, and wouldn't go into the pan.

Perhaps if I made marshmallows using John Agar as the thickening agent. Yes, that would surely work.

[Comments] (1) : I came up with an idea today which is not particularly clever, but which I think I could get a patent on if it's not already patented. It's the same caliber of ridiculous stuff that gets software patents put on it, and I was idly kicking around the meta-idea of actually trying to get a patent on it to use an example of ridiculousness. Does this make any kind of sense or is it all a sucker's game?

[Comments] (2) The Bayes Motel: I kept wondering about the suitability of Bayesian textual analysis to such-and-such a problem domain. Would it magically solve the problem as it does with spam, or would it be like trying to evolve an artificial intelligence by rating randomly generated sentences? Eventually I decided that the time had come for action! So I hired this guy to write a really simple generalized Bayesian rating application which you could use for just long enough to see if the problem was tractable. Yes, I don't just sit around--I make others do my bidding! But then he subcontracted it to a company in the Phillippines, and they went out of business, and their contracts were picked up by a floating libertarian utopia on a raft built out of abandoned oil drums, so make a long story short I ended up doing it myself for about half the price.

It's called The Bayes Motel and it does a pretty good job. By which I mean I wrote applications using it for a domain where Bayesian rating obviously works, and one where it almost works, and... it works and it almost works. TBM also does something I've been wanting for a while without realizing it: different tokens are displayed with different colors, to help you visualize how a piece of text got a certain Bayesian score. Pretty slick! And inefficient. Oh well, it's not supposed to be a big heavy-duty application anyway, just a prototyping tool. I hope you find it useful.

If I were a real hacker I would forget this Bayesian nonsense and do a Python implementation of Fast and accurate text classification via multiple linear discriminant projections. Even in accomplishment I feel guilty!

[Comments] (5) : Sumana has been playing a CD of marches so I have been marching around. I invented a march I call the Dinosaur Stomp March. In this march you stand perfectly still and pose like T-Rex in the third panel of Dinosaur Comics, and move your left leg up and down in time to the beat, stomping on something. It's kind of an avant-garde march because it disregards what's generally considered the primary purpose of a march: getting you somewhere else. On the "things stomped per measure" metric, though, it's off the scale.

[Comments] (4) : I've seen recipes for brewing root beer before but they always involved bottles and bottlecaps and some kind of crimping device for affixing the bottlecap to the bottle and blah and blah. That's why I was so interested when I found David Fankhauser's recipe where you brew the root beer in a two-liter bottle. Great idea!

He's also got lots of other interesting recipes, mainly for homemade cheese and other dairy products. My seventh grade science teacher was named Larry Fankhauser; I wonder if the two are related.

You're So Vague: I think this song is about you, don't I, don't I?

Del Eat: I wrote a tiny script that runs my del.icio.us tags through the Eater of Meaning's WordEndingEater to get different words, and prints links to the tag pages for those words. Sometimes these tags don't go anywhere, like "carpets" or "antedates", but sometimes they're pretty interesting, like "macro" (wonderfully ambiguous) and "twenty". It's fun--until you try it yourself!

No packaging; I'll just put it inline for those interested. You need the Eater, of course, and Beautiful Soup (or one of those fancy del.icio.us-Python interfaces with all the XML dependencies).


#!/usr/bin/python
#Del Eat
#by Leonard

import urllib2
import os
import sys
from BeautifulSoup import BeautifulSoup
from eater import WordEndingEater

if len(sys.argv) != 4:
    print 'Usage: %s [username] [password] [path to Eater prefix file]' \
          % sys.argv[0]
    sys.exit(1)

username, password, path = sys.argv[1:]
if not os.path.exists(path):
    print 'No such Eater prefix file: %s' % path
    sys.exit(1)

authinfo = urllib2.HTTPBasicAuthHandler()
authinfo.add_password('del.icio.us API', 'http://del.icio.us', 
                      username, password)
opener = urllib2.build_opener(authinfo)
xml = BeautifulSoup(opener.open('http://del.icio.us/api/tags/get').read())

eater = WordEndingEater(path)
print '<ul>'
for tag in xml('tag'):
    eaten = eater.eatWord(tag['tag'], 'text')
    print '<li><a href="http://del.icio.us/tag/%s/">%s</a></li>' % (eaten,
                                                                    eaten)
print '</ul>'

[Comments] (2) Who Wants to Be A Hundredaire?: I got into the book-writing business at the beginning of the year, on the recommendation of Clark colleague Tony Steidler-Dennison. Not only has the experience been more or less fun, but with my pen I have made enough money to pay for the dinosaur hunt I'm going on with my mother in August (assuming it is just a trip to Alberta to see some dinosaur bones and not some sort of Sound of Thunder thing where we hunt live dinosaurs).

Now, you too can gain entry into this lucrative field (writing, not dinosaur hunting)! Tony thought of me when his editor needed someone to work on a Python book; now I'm paying it forward. My Wiley editor needs someone to finish a chapter about clustering on Knoppix. I don't have the equipment to run any kind of cluster, but I bet one of my readers does.

You should probably know something about cluster programming, but not neccessarily anything about Knoppix. The ability to write good prose is 5-10 times more important than knowing about the topic beforehand. You just have to be good at picking things up quickly, because by the time you're done you will need to know a whole lot about the topic.

Send me email if you're interested in this. It's just one chapter and much of it is done already, so it's about the easiest introduction into the world of writing you could hope for. If you deliver on time the editor will have a mental picture of you as someone who saved their bacon, and think of you for other, larger projects, and pretty soon the world is your scallop.

[Comments] (1) : Is Rogue not realistic enough for you to consider it a true tactical simulation? Perhaps playing it on a hex grid will help.

[Comments] (3) Jonathan Strange and Mr Norrell: I can't say enough good about this book (mainly because I'm tired). It's great. You should read it. I borrowed it from the library--it was just sitting there and I was able to read it for free! Amazing, these libraries.

[Comments] (4) Dry Cake: Every time I make a cake (as opposed to brownies or some other baked dessert) it comes out dry. I can't figure it out. What are the causes of dry cake? I am not accustomed to my food disobeying me in this way.

[Comments] (1) : The Fresh Loaf is not the vegetarian version of FreshMeat; it's a web site about bread. Makes me want to make some pretzels.

I made some bread yesterday actually. A couple weeks ago I was running out of pizza dough so I decided to make some more. But I wasn't thinking and I made french dough starter instead. So, lots of french dough starter in the freezer.

[Comments] (4) : I did make pretzels, and they were great but I didn't oil the pan so they stuck. Oh well. One lives, and, occasionally, learns.

I finished the revision on my Cheetah article, and submitted the first draft of my CherryPy article, so now I'm ready for my next overambitious project! Man, this is a big one.

[Comments] (1) Map Time: All sorts of ecology maps over at Mapping the Biosphere. Where else can you find the global map of soil pH? Actually, if you can find that somewhere else let me know, as that somewhere else probably has other interesting maps.

[Comments] (1) : There seems to be some interest in a Ruby port of Beautiful Soup, and I'm thinking of doing the port myself. I need to stop being a dilletante and do a good-sized Ruby project, and that's a good place to start. Do any Ruby people read this weblog? Would you like to have this?

[Comments] (3) : Floyd from The Fresh Loaf, who presumably knows from bread and bread byproducts, tells me that the sourdough soup I had at the Polish restaurant was probably zurek, and looking at the recipe I agree. Zurek is made with rye sourdough starter, so it is actually sourdough soup. Inventive.

Floyd also mentioned that he dabbles in Ruby, so that's one. I am going through the Poignant Guide, which is funny and gonzo and Fafbloggish, and I have a simple question about idiom. I see code like the following, which sets up a block that deals with a single item:

File::open('foo.txt', 'w') do |f|
  f << "text"
end

This idiom makes sense when you're iterating over a bunch of items, but why create a new block to deal with a single item? Is it somehow more Rubic (Rubyic?) than the following code, which seems much more straightforward?:

f = File::open('foo.txt', 'w')
f << "text"

Let me know. I'm trying to spare you the details of my mastery of Ruby (and puppets), but this is undoubtedly the first of many questions.

Dichotomous Google Memewatch: "Threat or Menace?" is much more popular than my favorite false dichotomy, "Myth or Fallacy?"

[Comments] (9) : I was Google sightseeing (they just put up the first decent-resolution satellite photos of the whole world that I've ever seen) and I noticed something weird in Libya. It looks like the Black Pit of Doom. Now that I've seen it I can find the same feature on other, much larger-scale satellite maps. I'm almost positive it's a real geographical feature and not a picture of a solar eclipse or something, but I can't find any information about it on the web. I tried the geographical name search engine for that latitude and longitude, and nothing it found seemed to match. What is that thing? It's creeping me out.

: Are your Nethack bones files dull because you always play the exact same character? Sign up for Hearse and it'll deliver other peoples' bizarre bones files straight to the directory in which you put bones files. Other, inferior bones file sharing services put the bones files in inappropriate directories like the current working directory, or /usr/bin/. Not Hearse!

My Neighbor Totoro: Really cute but somehow not a whole lot of substance. The She's Got a Thing for a Spring of movies. But I would watch it again (and I would probably play She's Got a Thing for a Spring again). Some of the more bizarre qualities I exhibit (the stomping around and roaring) I used to think were Godzillan or T-rex-esque, but now I think they might be totoroid.

The DVD we borrowed from the library, which is apparently the only edition available in the US, was dubbed (who knows how well etc.) but supposedly Disney is going to release a subtitled version soon... Hold on, I've just been handed a late-breaking bulletin. It seems Disney won't have enough incentive to release the subtitled version unless copyright is extended another twenty years! Hey, why is this "bulletin" written with letters cut out from magazine headlines?

The Man in the White Suit: We just finished watching this movie and I checked my mail and there was spam Business Cooperation in Textile Products. So he's still at it.

Oh yeah, the movie. Not as funny as The Ladykillers, but a more interesting plot, with several good dramatic moments. The Lavender Hill Mob is now waiting at the library, so our Film Festival of the Long Now proceeds apace, in which we will eventually see all the Ealing comedies starring Alec Guinness.

[Comments] (1) Deglazing: Clip 'n' Save: Brendan doesn't know how to deglaze a pan so he is stymied by my mother's chicken recipe. You deglaze by pouring a cool, flavorful liquid into a hot pan and then quickly scraping off the pan all the burnt bits that stuck to it while you were cooking. The burnt bits and the flavorful liquid will form the basis of a sauce. To deglaze, you usually use one of the three Bs: broth, booze, or lemon juice that somehow starts with a B.

[Comments] (1) Game Roundup You Can't Get Out of Your Head: Lots of Roguelikes and pseudo-RPGs in this Roundup, mainly the luck of the draw. There were a lot of Pac-man type games, but there were so many Pac-man type games, more and more of the URLs from my Game Roundup file turning out to be Pac-man type games, that I decided to round them all up in a special "Pac-man Type Game Fever" roundup, forthcoming.

Ethics: Sumana pointed this out during the screening of The Man in the White Suit, when the captains of industry are trying to get Alec Guiness to sign away the rights to his idea. Some people don't care about you as a person at all; they'll try to cheat you, walk all over you, trick you, but they won't lie to you. They have to be able to convince themselves they gave you a fair deal. That's why that scene is so great. You don't see that trait in movies much anymore; it's too complicated.

Fraud of the Century: Not, as would be cooler, "Frog of the Century". Today I went with Sumana and Riana to the Monterey Bay Aquarium. There were awesome jellies and a sea turtle and huge sharks and huge tuna and penguins and bat rays that you could touch (they feel so soft!), but the real reason we went was to see the awesome mola mola (mola mola), king of the open seas. And indeed there was a big tank containing lots of fish and surrounded by drawings of the mola. But there were no molas in the tank! The gift shop had postcards of that tank which distinctly showed two molas, so the molas must have died or gone on vacation and been removed from the exhibit. I bought a poster of the postcard but that was as close as I got to a mola today. Big disappointment.

We did see a guy who works at the aquarium and was a college friend of Pete Peterson II, and the jellies were incredible. They were illuminated from within the tanks, and in one of the tanks you could push a button to turn off the light and see the jellies become nearly invisible.

Coming soon: sea creature nomenclature prescriptivism: exposed!

[Comments] (1) Garden Refactoring: Went to the garden store to get new stuff to replace the stuff that died. I got a big jasmine bush because Sumana really likes jasmine. I also got the Sunset book so I wouldn't have to keep calling my mother with "will this grow?" advice. The Sunset zone system (and the underlying biology) is so complicated; there should really be a big online lookup table.

[Comments] (1) Jake Berendes BoogaBooga: A couple days back Jake was in BoogaBooga (nb. obviously this is my goofy nickname, you get the picture). Also, I got a postcard from Jake! He claims to be coming to San Francisco this fall, and demands vegan tiramisu when he gets here. That's going to be tricky since tiramisu contains just about every non-vegan substance known to man, and all extant recipes are full of unimaginative substitutions. But I'll never have to deliver on it because c'mon, Jake Berendes in California? It could never happen.

Also while writing this entry I noticed that there are some MP3s up from Jake's new album, which now that I think of it I should probably buy cause it's not just gonna magically get sent to me. The songs on this album are based on search requests to his website, and in the postcard he says he's looking forward to the album I've barely touched. "Trouble rarely stops but when it does we make our own," he says.

[Comments] (3) : The LazyWeb strikes back: I was planning to post links to satellite maps of all the UNESCO World Heritage Sites, but someone else beat me to it. Way to go, person who's not me!

[Comments] (6) So Long, And Thanks For All The Non-Fish: In high school or college I learned from one or another pedant that you're not supposed to call starfish "starfish"; you're supposed to call them sea stars because they're not fish. Well, they're not stars eithGAH MY EYES! Okay, some of them are stars. Also at some point I learned that octopods used to be called "devilfish". They're not fish either.

When we went to the Monterey Bay aquarium last weekend there was one awesome permanent exhibit with a lot of jellyfish. Also a "The Art of Jellies" exhibit which was pretty gimmicky if you ask me, though it did position a tank of jellyfish in a mirrored room, giving you the impression that they had you surrounded. But apparently the marine biology cartel now wants you to say "jellies" (or, I suppose "sea jellies") instead of "jellyfish", because those things are amazingly not fish.

The only other non-fish with a fishy name I can think of is "cuttlefish". I've never heard anyone saying you should call a cuttlefish something else, but I checked "on the line", as the kids say, and "cuttle" is the hot new name for that beast. How long has this been going on? Did people used to refer to cucumberfish, anenomefish, and urchinfish until someone rewrote the aquarium displays to encourage the biologically correct usage?

In an interesting reverse of this trend, at the aquarium I also noticed that the fish that used to be called a "dolphin" is now called a "dolphinfish". I think chopping "fish" off the names of obvious non-fish is not really worth it, but I'm glad about the "dolphinfish" change because that was really confusing. I'd hear about sport fishermen catching a bazillion dolphin and wonder why nobody was upset about that.

[Comments] (2) : Decklin Foster, who seems to have some connection to the Chicago cabal, has written roux. This is a screen-scraper->RSS feed gateway that uses Beautiful Soup, much like Scrape 'N' Feed, but where S'N'F gives you the page and has you write a screen-scraper, roux has you define some suspiciously regexp-looking things that magically reach into the soup and extract the things you want. As Vic Fontaine would say, crazy! Decklin, how does it work?

Darmonodes’ Elephant: This has beeen bothering me for a while. In Moby-Dick Melville uses a metaphor that includes "Darmonodes' elephant", known for its antisocial behavior. I didn't know if this Darmonodes character was supposed to be the owner of the elephant or a historian who'd included the elephant in a book of prurient anecdotes or what, so I looked him up and--nothing. The only place he shows up on the web is in copies of Moby-Dick. Did Melville make him up to avoid direct association with the elephant story?

2007 Update: I found this annotation in Google Book Search, in the Northwestern University Press's edition of Moby-Dick (ISBN 0810102684):

Apparently a misreading as the name for the elephant's owner. The editors of the Hendricks House Moby-Dick... point out that it does not occur in Melville's source passages and that its form is an impossible one in Greek. The NN [presumably another edition] editors have no explanation or emendation to offer.

I'm pretty sure Melville made up a dirty story and ascribed it to ancient history.

: Kevin says: "That's the thing I like about your generation: you never let lack of talent hold you down for long."

[Comments] (3) Party Food: I am having a multipurpose party on Sunday which is partially a birthday party. I'm going to start making food for it so I don't have to make it all on Sunday, and I want to know what you think I should make. I am going to make a whole bunch of pretzels and have various pretzel-dipping substances around, but I want to make other, more substantial stuff too. What?

[Comments] (1) DSR:

astroids that will come to earth and destroy it do you have a picture of that

Well? Do you, smart guy?

ingredients to make a real live metroid egg

Not gonna work.

[Comments] (2) The answer to this question is false.    T  F  : Seth is talking about self-referential aptitude tests, so maybe it's time to tell the story of... the self-referential aptitude test that ripped me off (nb. change to "broke my heart" for inclusion in Readers Digest).

This was in seventh grade algebra. We were given a mimeographed worksheet containing a "test of [our] ability to follow instructions". It had twenty instructions on it to follow. It said "Read this test all the way through before you do anything." So I did. The first instruction said to put your name at the top of the paper. All the rest of the instructions were to write down the answer to various trivia questions, except the last one, which was along the lines of "Stop! Don't write anything on this paper! Just turn it in!"

Ridiculous, I thought. By the time I get to that instruction, I'll have already written all kinds of things on this paper, and there's nothing after it. It's probably a trick to get people to follow the instructions out of order. Anyway, having read the test all the way through, I started on the first instruction. I completed all the instructions until I got to the one that said stop, then I stopped and turned it in.

Well, that wasn't what you were supposed to do. You were supposed to execute the the last instruction before any of the others, and never write anything on your paper. Why should you execute instruction #20 before executing instruction #19? Because #20 looks weird! Geez, Leonard!

I fought it, and lost. At the time I foolishly thought that mine was the only correct solution. But I don't think the worksheet said anything about the order in which you should complete the instructions, so there are actually a large number of correct solutions, including the one the teacher considered correct. So I could have satisfied my own sense of correctness while still getting a good score on the assignment (this was a big dilemma for me in school; it's not so much a factor now that satisfying my own sense of correctness is more closely aligned with doing a good job).

The moral, as always: don't mess with self-reference unless you really know what you're doing. Start by messing with Texas, and work your way up.

[Comments] (3) Gravlax:

     EXT. ILLINOIS COUNTRYSIDE - AFTERNOON 

			   GENERAL MCBOMBEM

             I just got off the phone with Washington. The
             Gravlax is headed towards Chicago. You'd better
             pray this device of yours works, doctor.

                           PROF. TOUCHFEELY

             I can't shake the feeling we're making a huge
             mistake. We haven't been able to establish
             communication with the Gravlax yet. For all
             we know its intentions are peaceful.

                           GENERAL MCBOMBEM

             By golly, I won't see the Earth destroyed
             just to test out your pet theories! Sergeant, 
             activate the atom ray!

                            SERGEANT JONES

             Sir, yes sir!

      CUT TO: 

      There is a huge EXPLOSION (STOCK).

      EXT. ILLINOIS COUNTRYSIDE - CONTINUING

      The area is covered with a fine paste of GRAVLAX.

                           GENERAL MCBOMBEM
                      (scraping GRAVLAX off his hat
                       with one finger)

             What _is_ this stuff?

                           PROF. TOUCHFEELY
                       (tasting GRAVLAX from his 
                        tie)

             It's cured salmon, General. Perfectly harmless.

                       (wiping GRAVLAX off his suit)

             As I suspected, the Gravlax came to this planet
             to lend its salty taste to little sandwiches
             and other light appetizers. But we were not
             ready for it. In our arrogance and blindness we
             assumed that because it had a name like
             "Gravlax" it had to be some sort of hideous
             B-movie monster. Perhaps one day mankind will 
             learn.

                           GENERAL MCBOMBEM

             It's delicious.

      Enter PETE, frantic.

                                 PETE

             Doctor, General. I just heard from the lab
             in Peoria. That signal the Gravlax sent from
             its ship -- it was aimed directly at its
             original point of origin.

                           GENERAL MCBOMBEM

             That could only mean...

                           PROF. TOUCHFEELY

             More of them are on the way.

      CLOSE ON MCBOMBEM

                           GENERAL MCBOMBEM

             We'll be ready for them.

                               THE END
                                 ...
                                  ?

<M <Y
Y> M>

[Main]

Unless otherwise noted, all content licensed by Leonard Richardson
under a Creative Commons License.