<M <Y
Y> M>

[Comments] (1) : Tivo recorded one of those programs full of snippets of artsy videos. One of them was really nice: sort of drifting around Paris while Claire de Lune played. Proving something or other about our age, it looked kind of like a drug commercial. It could have been sponsored by drug companies and called "Claritin de Lunestra".

[Comments] (2) It Exists!: Sometimes Sumana uses "it exists" to indicate indifference about something. But today I use it in celebration. We went to the new Cody's books, and they had Beginning Python! I finally got to see my book, and it was great to see stuff I wrote in print. The only downside is that my last hopes for the actual book cover being the non-freaky picture have been dashed.

I started writing some documentation for Rubyful Soup. Only about halfway done, but it's a good start. I've learned a lot about technical writing in the past couple months, as you can tell by comparing the documentation files for the two Soups.

[Comments] (3) Challah: I made a challah bread (originally intended for French toast) and people raved about it, asked if challah were my specialty, etc. I'm not sure how to deal with the quality of my cooking because it's not something I feel I'm especially good at. I keep thinking people are just being polite but the charade has been going on for long enough that the hypothesis starts taking on aspects of your more sinister conspiracy theories, with salivating lizard-men lurking in the shadows waiting to eat leftover risotto.

Sometimes I think about going to culinary school, but it would be a big waste of money because I doubt I could ever be happy making food for a living. However I am always on the lookout for ways to be a dilletante on the cheap, so I just bought a cooking school textbook for self-teaching. We'll see how it goes.

Forthcoming NYCB entries: big changes, Ruby stuff, fun with Amazon wish lists and AWS tomfoolery. I am basically just typing stuff because I don't want to go to sleep yet.

: Here's an excellent thesis on recommendation engines with overview and ideas for decentralizing the recommenders. It's got equations and everything. I'd pull a quote but it's in PDF and really who has the time? Life is too short to waste time justifying my decisions!

Link from waxy, which has seemingly picked up an interest in recommendation engines.

Rubyful Soup 1.0: It's got documentation, it's got some minor improvements, it's got the version number that means "at last, perfect!" in the open source world and "crappy rushed-to-market" everywhere else. Enjoy it! It will be there.

[Comments] (4) The Day Job: I've quit my job at CollabNet. My current plan is to finish this book first and then find a more interesting job. We'll see what develops!

: The Spam Stock Tracker takes a more long-term view of the same dataset used by the Stock Spam Effectiveness Monitor. It buys 1000 hypothetical shares of each new stock mentioned in spam, and tracks the performance indefinitely. Excellent. I also like the old-school way the author always refers to spam as "SPAM". Wait and See? SPAM Can't Wait. Found via O'Reilly Radar.

: This is an idea, not a serious suggestion. Consider a political system in which getting re-elected to an office requires a bigger percentage of the vote than being elected to that office for the first time. The nth time you stand for election you have to get over 50+k(n-1) percent of the vote, or you trigger some kind of instant runoff. This achieves some of the anti-corruption advantages of term limits while mitigating the anti-experience bias created by term limits.

: You know those old science fiction B-movies where "giant" lizards and dinosaurs wrestle with each other? They're always flipping each other over in their jaws. How did they film those scenes? The mandibular body slam is not a natural fighting technique of lizards, and it doesn't look very real (though realer than stop-motion), so it must be something that's easy to gimmick up with fake lizards. But I can't figure out what that gimmick might be. Do they have the lizards on sticks that they turn over? Gabe probably knows this one.

: Obvious omission from this list:

[Comments] (2) Fool! That's My Strawberry!: Going down south for a wedding. Not in the mood to do a bunch of driving but oh well. I leave you with this game, in which you drive around a badass motocross bike to... gather strawberries. Needs to be in a Game Roundup. There needs to be a Game Roundup, in fact.

[Comments] (4) : Back from SoCal. The wedding was great. We saw all of my immediate family as well. Two more days of work and then I'm a full-time writer!

I have a likely gig lined up at Broadband Mechanics after the book is done. But they keep getting business and they need more people now, especially Javascript ECMAScript DHTML AJAX hackers. If you're interested email Phillip.

[Comments] (3) Fun with Amazon Wish Lists I: For years I have been waiting for a web application that lets me keep track of my books. So far the best storage mechanism I've found is the Amazon wish list. It's not intended to keep track of books you already own, but it works fine for that purpose.

Unlike trendy repositories like LibraryThing and AllConsuming, Amazon wish lists are free and reasonably fast. I've tried local spreadsheets but wish lists are easier to keep updated, and you can do more stuff with them. Amazon gives each account multiple named wish lists, and it has a (read-only, blah) RESTish API. The features it doesn't have (tagging, mainly) I don't really need, though I would like to be able to comment on a book and retrieve my comment through the API.

Among the wish lists I'm using for nontraditional purposes are the requisite list of books I own, divided into books I've read and books I haven't. I'm starting to maintain a list of all the books I've read, though I started about 23 years too late. I have separate lists for my cookbooks and movies that Sumana and I plan to rent. Et cetera.

Amazon has a horrible interface for showing you your wish list. It's designed to make you buy things from the wish list, preferably things that show up on the first page of results. But its interface for finding something and adding it to a wish list is the easiest I've used. As for looking at the list that's why the Pocket Wisherman was invented (no, really, that's why). The only problem comes when I read a book and need to find it in one list to move it to another.

I have 2 or 3 books that don't have ISBNs and don't show up on Amazon. I don't know how to keep track of those. On the whole it works out pretty well. If you want to keep online lists of books or other cultural artifacts, and don't mind (or relish the thought of) writing the display code yourself, consider using an Amazon wish list. If you also keep a "real" wish list on Amazon, don't give any shipping information for your subsidiary lists. This will make it more difficult for people to use Amazon to buy you things from those lists.

Next time: exploiting price information. (I also cover this in more detail in the Python book.)

[Comments] (4) Fun With Amazon Wish Lists I.V: I should talk about the target audience for this series before more authors of online bookshelf programs leave comments in my entries. This series is not for bibliophiles per se; rather for bibliophiles who want a programmable API to their bibliophilia.

If you only want to make an annotated list of all your books then use LibraryThing. It's fast, easy to use, and the data is reliable. You can simulate multiple discrete lists by using tags. It costs $10, which is not much compared to other things you've paid for. You could also use All Consuming, which is free and does non-books, but was really slow when I tried to use it (which was a long time ago). You could also use one of the 200 bookshelf applications sure to show up on Ning. You could buy Delicious Library for your Mac, which uses a webcam as a barcode scanner. You could, in short, use whatever incarnation of this particular project tickles your fancy, because your fancy is not tickled by external APIs.

If you want to build a list of books and then use it as a data structure, then Amazon wish lists are the only game in town operating on a higher level than a Z39.50 binding: see for instance this NYCB from last year, before I got REST religion. Amazon provides some interesting data not available through other APIs, like prices and sales rank, but you can join on ISBN to get that data, so a lot of the things in the series will be applicable to people with Tyrannioware or other Z39.50 systems.

[Comments] (4) Overworked: How many "business hours" would you say are in a "business day"? I would say eight. But someone told me they would call me back in 24-48 business hours, which makes it sound like every hour in a business day is a business hour.

[Comments] (3) : Today Kevin told me that the noble gases can be coerced into forming compounds, mainly with fluorine. When this was discovered (1960s), Kevin's father wrote a paper on the subject called "How the Noble have Fallen". Just recently the noble gases have been bound to uranium. Stay tuned for action as the noble gases form compounds with more and more other elements!

Terror From Not Beyond Space: NEGADON: The Monster from Mars! Sure to be a hit.

As we know, Japanese robot technology is making great advances. Once a gigantic humanized robot was only an imaginary object, but it will be made in the future. We wonder whether it is in demand or not.

That reminds me, I need to finish the postmodern Godzilla fanfic I was going to serialize a million years ago... aw, who am I fooling?

[Comments] (3) Squid Ink: A while ago Sumana and I found out that the squid ink used to dye pasta is taken from the ink sacks of dead squids. Previously we had naively imagined that it was extracted like milk from a cow. Like you'd put a bunch of squid in a tank, and suddenly hold up a picture of a thresher shark. Oh no! Water full of squid ink. Move the squids to another tank and distill the inky water into squid ink for pasta. That doesn't really make sense if you think about it. There's no real point to putting squid ink in food except for aesthetics' sake, so we stopped eating stuff with squid ink.

I bring this up now because there's an Italian deli on Valencia I've always wanted to go into, and today we were there when it was open and we did go into it and they had little bags of squid ink for sale. We were on Valencia to have a dinner to celebrate my newfound unemployment. We ate at the fittingly-named Last Supper Club, which was tasty. Sumana liked it more than I did. I would probably have liked it more if we'd had a cheese course instead of dessert: I really had my eye on the gorgonzola fondue.

The first time we ate on Valencia it was at an Italian restaurant called Bistro Annex. I got suckered by the romantic candles on the tables. It was not good eats, though apparently it's a spin-off of Watercress, which we've been to and liked. Bistro Annex had subcontracted their desserts to a dessert company, and the dessert company had printed up a dessert menu that was a lot flashier than the main menu. It was, I realize, disturbingly like Brendan's restaurant that instead of having a kitchen just goes to other restaurants to fulfil your order.

Basically we should have gone to the Salvadorean restaurant next door. We still haven't been to that restaurant, but it probably would have been pretty good.

Anyway, I have just recently started to really observe restaurant kitchens. The neatest thing at Last Supper Cafe was how they cook the pasta. They have deep-fryer machines full of water which they occasionally top off from a pot set under a barely dripping tap. To cook a bunch of spaghetti they drop it into the basket of the deep fryer. When it's done they pull out the basket and reuse the boiling water. It's probably some specialized $600 pasta-boiling machine but it basically looks like a deep fryer full of water instead of oil.

Fun With Amazon Wish Lists II: A neat thing I saw today is a search engine for used computer-related books on Amazon. I love buying stuff from used bookstores, so it's no surprise that UsedPrice is my favorite field of the AWS Bag data structure. In this section I'll present a couple simple ideas for efficiently allocating your money by combining Amazon wish lists (or other lists of desirable ISBNs) with AWS' pricing information. These ideas go beyond the Pocket Wisherman, which is designed to help you finding stuff from your wish list in real-world locations.

In the web services portion of Beginning Python I demonstrate a web service client that goes through an Amazon wish list looking for bargains. A bargain is defined as an item available used through Amazon for some small fraction of its new price.

There are lots of bargains because many people think they can make money selling used books online for a penny and making it up in volume. Actually they think they can make it up by skimming money off the $3.50 shipping surcharge that Amazon charges the buyer. But they might as well be trying to make it up in volume, because $3.50 is not that much when you think of the labor involved in determining the book's condition, doing the data entry, then when someone buys the book finding it, packaging it, and shipping it out. That kind of low wage is usually associated with foolhardy professions like writing the books in the first place.

But people persist in listing books online at sub-yard-sale prices, and even when you tack on $3.50 for shipping you can find lots of good deals on books you wanted to buy anyway. The formula I would use today (slightly different from the one in the book) would be to add the UsedPrice for an item to the shipping cost (assumed $3.50), then consider the item a "bargain" if the total cost is 25% or less of Amazon's OurPrice.

Ideally you would have a script that generated an RSS feed containing all the current bargains on your wish list. I haven't written this useful program yet because my pressing concern right now is slowing down the rate at which I acquire books from my wish list.

Recently I was given an Amazon gift certificate. You can't use gift certificates on used items because you're not really buying from Amazon. The rational way to use them is on things that aren't available used, or that cost just as much used as new. In other words, anti-bargains. Tweak the threshold algorithm and by bargain finder script became an anti-bargain finder.

The anti-bargain finder relies on the assumption that used availability on Amazon is proportional to used availability in the real world. If there were some book that crowded used bookstores in the real world but wasn't being sold used on Amazon at all, it would be falsely flagged as an anti-bargain. This is unlikely to happen because so many of the used listings on Amazon come from real-world used bookstores in the first place.

I think I had another hack idea in this category but I can't remember it at the moment. These are pretty simple ideas but they can save you money.

[Comments] (1) Speaking of used books: We went to Borderlands yesterday as part of our Valencia walk and I ended up with three books. Two of them were from my wishlist but--I don't know why I keep buying the old novelizations of Infocom games when they're guaranteed to be juvenile disappointments. Just because George Effinger wrote one doesn't make them a legitimate art form. But yesterday I bought the Stationfall novelization. I don't know if I could even stand to be in the same room as a Planetfall novelization because the game was so great and the book is bound to be so awful. Well, I say that now, but if I ever actually see it I'll probably end up buying it. I should accrete all six and then purge them by giving them away as a prize for the IF competition.

Ruby Cookbook: Well, the contracts are sent in and Lucas announced it, so I too will announce it. The book I'm working on is the Ruby Cookbook for O'Reilly. I'm co-authoring it with Lucas Carlson. So far it's going really well. One thing I still need to get set up is the website where I solicit recipe ideas; I'll try to do that today. In the meantime you can send me mail if there's something you'd like to see in the Cookbook.

[Comments] (2) Game: Play a game of Twenty Questions. Then invert the answer to the first question and try to think of a different object that fits all the questions. Alternatives: invert the earliest answer you can, invert all the answers.

[Comments] (1) : What if J.G. Ballard ran the mid-20th-century game company L.G. Ballard?

[Comments] (3) If You Want To Contribute To The Ruby Cookbook: The Ruby Cookbook Official Unofficial Homepage has details.

Jake Berendes sent me an awesome stuffed mola mola today. By coincidence I sent him a less awesome thing today.

[Comments] (6) : Today I picked up Sumana's mother at the airport. We had a good time making lemon rice. She brought lots of ACK and other Indian comic books for Sumana, a tunic (!) for me, snacks for both of us.

Also today O'Reilly sent me a "new author" package with some books about writing and a T-shirt. Basically I think they are trying to make me feel like I'm a college freshman and they are my supportive parents. Every month they'll send me a box of cookies or something.

[Comments] (1) : I stuck some AdSense ads on the NYCB archives and other Crummy pages that I run (as opposed to other peoples' weblogs). I did this 1) as an experiment to see how much money I would get by selling out, 2) because I don't have a real job right now, but mainly 3) because I've been freeloading off of Kevin's hosting services for long enough and it's time he got a cut of the action, which means I must drum up some action for him to get a cut of.

My ideal audience for these ads are the people who come into my site on really weird search requests that I can't help them with. Often times someone will do a search for, say, a game called Rat Poker with colorful rats that you color coordinate. For the median person who comes into my site on that search request, Crummy is a smorgasbord of disappointment. My scintillating discussion of mola molas and scripting languages are ashes in their mouth. Assuming I'd ever talked about games in which you color-coordinate rats (the plague has never been so stylish!) it would have been a computer hippy Linux game reviewed in a Game Roundup, or some crusty old DOS game in the Da Warren archives.

But there's a slightly larger chance that some programmer has recently written a Flash game that's all about picking the right rat to go with your jacket, and is advertising it through AdSense. The search request person should have just clicked on the AdSense ad for Barbie Rat Shop in the first place. But if the same ad shows up on my page and they click on it, I get money.

I have tried to make these ads unobtrusive by picking the most boring color scheme on offer, in keeping with the philosophy of design simplicity that drives all of our efforts here at crummy.com. Let me know if they bother you nonetheless. They sort of bother me, mainly because I've already had to tell Google not to use my site to push ads for the PublishAmerica vanity press, but also because there's sleazy impossible-to-block-all-of-it "give us your personal information and receive a tasty herring!" stuff. What kind of way is that to make a living? Whatever happened to making money the old fashioned way, by putting ads on your website and writing about random crap?

[Comments] (2) Tasty Lemon Rice Recipe: From Sumana's mother, reprinted by popular demand. * marks stuff I didn't actually have in the kitchen.

Put in rice cooker.

Fry in skillet. When it starts popping, add:

Fry it up. Deglaze with

If you have timed everything correctly the rice in the cooker is now about 5 minutes from being done. Drain the excess water from it, and dump the rice into the skillet. Stir, cover, let sit until it's done.

Cleaning tip: chop the lemon rind into quarters and put one of the quarters into the rice cooker pot. Fill with water and turn on the rice cooker for 5 minutes. The turmeric mess will wipe away.

Today's Found Story: From "Once Upon a Time", which, incidentally, is dedicated to Gouverneur Morris (!). I call it "The Folly of Fanfic".

"Then, how did you suppose your sister was going to read it?"

Schnitzel was smiling to himself

"Schnitzel, you certainly are a magnificent liar"

"I think," said Ainsley, "they have lost their way"

"Was it you," demanded young Andrews, in a puzzled tone, "or your brother who tried to knife me?"

Mr. Thorndike stood irresolute, and then sank back into his chair

"Do I look as easy as that, or are you just naturally foolish?"

She was easily the prettiest and most striking-looking woman in the room


Sumana: Really makes you think, huh?
Leonard: Yes, but not about anything in particular.

[Comments] (2) Penguin Pictures: If I know one thing about you, random reader of my weblog, it's that you like cool things. It is my blessing... and my curse! For I must labor night and day (but mostly day) to find cool things for you. One such cool thing is the Flickr photo set of Antarctic M, who labors night and day (but mostly day, but for different reasons than I labor mostly day) to take incredible pictures of penguins and other austral phenomena. Through the power of WEB 2.0 she can actually put these pictures online, something never thought possible before the development of SOAP.

: I got a fancy Ruby gem set up on RubyForge, so now you can just gem install rubyful_soup and start screen-scraping the Rubyful Soup way. No dependency worries or anything. Plus, while I was figuring out how Ruby gems work, I wrote about five gem-related recipes for the Cookbook. I lauv zis cauntry!

[Comments] (3) Sumana's Mother's Sambar: I was a sous-chef for this operation so I don't precisely remember how you make it. This is my best guess.

Cook the dahl in water and turmeric in a pot. Add the vegetables and cook some more. (Throughout this adventure, add more water whenever neccessary.) Meanwhile, scrape out:

I scooped it out with a melon baller. Save half of it for the raitha. The other half goes into the blender and gets chopped into coconut flakes. Then to the blender add:

Blend into a paste. Scrape into the dahl and stir. Now the sambar is basically ready and just needs to cook some more. While it cooks make the raitha. To the leftover coconut add:

Stir to combine. Finish the sambar with about a tablespoon of brown sugar and 2 teaspoons of salt. Finish the raitha with 3/4 teaspoon of salt. Serve with rice.

I like putting the raitha on top of the sambar as a sauce. Sumana thinks this is really weird. But I used to put ranch dressing on top of pizza, and this is an analagous situation. To me, it is Sumana's habit of eating the raitha completely separately that is weird.

: Jason Scott, the chap who runs textfiles.com and who did a (presumably awesome) documentary on BBSes, is now doing a documentary on text adventures. This is so in tune with my demographic of one that both Mike and Brendan sent me this information. Brendan actually suspects that I am Jason Scott. Ha ha! Such an impossibility strikes me as humorous! Ha ha! Ha!

[Comments] (1) For Kris: The Back to the Future DeLorean rendered in Lego. From lonita_links.

I'm Hip, I'm With It: Takka takka takka takka. Beautiful Soup is mentioned in a podcast! Or, as we used to call it, an "MP3 file". Specifically, this MP3 file, about 17 minutes in. It also mentions a cool module called NLQ for doing natural language queries.

Incidentally, when I saw Austin Powers I did not get the Macarena reference at all. I only got it a couple days ago after Sumana painstakingly explained every aspect of the joke. I thought Dr. Evil was walking like a toy robot, making a sound a toy robot might make while walking. I actually like this explanation of his behavior a lot better.

[Comments] (1) More Mega Penguins: You know how Cory Doctorow subscribes to certain Flikr tags' RSS feeds and uses that to post pictures to BoogaBooga? I subscribe to the 'penguins' tag feed. Penguins!

Torosaurus, Torosaurus: Last night in a dream I discovered that if you have to sing a song from an Italian opera, but you don't know the words, you can just sing the names of dinosaurs and it will work out okay.

[Comments] (4) : Got a book deadline coming up. Looking pretty good.

: More book work. Today I was unable to avoid learning about continuations, a topic on which I was for years able to maintain total ignorance. I got my revenge, though, by writing about continuations as though they were a way of manufacturing Pez dispensers.

I also wrote a song. It's an "I Will Survive" type anthem to be sung by Godzilla, and it will go on the next album. I had to give Kevin's drum machine back, and still haven't figured out how to record on the computer, so who knows when that album will be forthcoming. My writing breaks are good opportunities to practice, though.

: I'm ahead of my self-imposed arbitrary schedule for the book but I don't want to use any of the slack time because then I won't have it. I guess that kind of makes sense because there might be an emergency in the future.

Anyway, today when I wasn't writing I spent a lot of time playing Angband spinoff #300, Troubles of Middle-Earth. As the name indicates it's sort of a Tolkien-themed Angband variant. Yes, Angband itself is supposed to be Tolkien-themed but it's just not enough for some people. This game lets you gallivant all around Middle-Earth and jumbles the three ages all together for your delectability.

There's also a bunch of weird stuff like Deathmolds. I don't think any of those supplemental volumes of Tolkien's obscure myths mention Deathmolds, or any kind of sentient molds for that matter. I think I'd have heard about that. This obsessive eclectiveness (really the defining feature of the roguelike genre) yields some weird features though. As usual with Angband clones, I was having a great time until my carefully constructed character was cloberred by something significantly more powerful than myself.

: "They say an axe murderer lived in this sentence once," says Giblets. "But he killed all references to himself."

Best self-reference I've seen in a long time.

: Sometimes, swirling patterns form in the Tar Pit From Hell.

[Comments] (1) : Argh. Spent all day working on a recipe about matrix multiplication. Like a party in an after school special, it started out with laughs, everyone having a good time, but then someone started passing around some linear programming and it all got kind of blurry. Next thing I knew I was lying optimally in a pool of my own vomit, clutching the memoized state of all subpools of the vomit. A lot of the fun in writing this book comes from relearning stuff you learned in college, but it's not so fun when it takes all day to get it right.

[Comments] (1) : Today I realized that I should probably rewrite one of my old songs because it mentions a file format that's obsolete, or at least not used for what it used to be. Then I started thinking about all those old file formats. Remember when files used to use different data serialization techniques, rather than just different XML tags? Seems like every application had its own three-letter extension, or a mysterious set of .DAT files. Am I the only one who feels nostalgia for these weird beasts?

You may have noticed that I try to avoid telling you about my dreams unless some aspect of the dream would be interesting if I'd thought of it while awake. There's no need to thank me for this, though large cash donations are always appreciated. Anyway, last night I dreamed I was reading a Terry Pratchett book and weird punctuation started creeping into the middle of the words. There'd be a string of periods or an exclamation mark where it didn't belong. More and more of these strange characters started showing up in the text, and then you turned the page and there was a two-page spread that looked like a screenshot from a roguelike game. In retrospect all the weird characters made sense within the roguelike game, and the screenshot accurately represented the state of the plot of that scene in the book.

It would be pretty neat if someone could actually do this for a nontrivial story, but it seems like a task similar to the map of Rome in Gigamesh that you see if you only look at the commas.

<M <Y
Y> M>


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