<M <Y
Y> M>

[Comments] (4) World Famous Ultra Gleeper: So what did I find out today but that the Ultra Gleeper, which still needs to be rejiggered so it's easier to install, is famous! It's mentioned in an article on CodeCon and Demo on B1 of today's Wall Street Journal (though they devalued it to a mere "Gleeper").

And when I tried a Google News search to see if Google had some sneaky deal with the WSJ such that I could use it to link through their subscription firewall (answer: nope), I discovered that the Ultra Gleeper got a much more gushing treatment in Red Herring, in an interview with Christian Leybold, a VC whose company sponsored the "underground convergence of algorithmic minds". Doesn't this mean I get a free round of funding?

[Comments] (12) : Hey, how are you doing? The thing I've been working on for the past month is a chapter for a book. The book's about beginning programming in Python, and the chapter's about web applications and web services. I tried to write the chapter that would have turned me into a super-prescient web application genius if I'd read it in 1997, when I first started writing CGIs. Actually, most of my writing is messages to myself that come far too late to help me, but might help you.

So (the first draft of) that's done, and now I have to deal with all the personal stuff that's been piling up, but maybe this could be a new, not-very-lucrative career for me. It was pretty fun to write, except for the deadline panic, and I was able to write a lot more than I thought I could.

[Comments] (1) : Near the end of Moby-Dick Ahab's piling on the hubris because not only is he about to clobber the white whale but his weird preternatural advisor has practically assured him victory! For Ahab to fail, according to this guy's estimates, an elaborate set of conditions would have to be met: he, the advisor, would have to die first, and then Ahab would have to see him again somehow, and then encounter not one but two separate hearses (Hearses? On the ocean?) and come on, it's all just so far-fetched, how could that stuff possibly happen? And then of course it does and Ahab screws everything up. Same with prophecies in fiction since Oedipus Rex.

So you trust a guy to tell you the future, and then he starts telling you that your stupid plan can only fail if all this unlikely stuff happens. He's probably just trying to tell you that it's going to happen, but using terms that make it sound so ridiculous that you don't violate the timeline by actually acting to stop it. But it's gonna happen. It's the equivalent of the man who bets you that "he can make the Jack of Spades jump out of the deck and squirt cider in your ear". Don't take that bet.

PS: I guess I started thinking about this after the previous entry, where I described my writing as messages to my previous self except the messages can't actually go back in time.

[Comments] (2) : The Lego Fantasy Roleplaying Game gives purpose to all that Lego frippery (ghosts, pirate cannons that don't work, pirate cannons that do work, etc.) by turning each piece into a game rule. This confronts my hatred of Lego frip-pieces with my love of intricate RPG rules. Touché, Lego Fantasy Roleplaying Game, and well done. What I'd really like, though, would be some sort of Lego/Crystal Castles/Nethack type game.

[Comments] (4) FOOLISH HU MANS: Sumana tried that "Laughing Cow" cheese and thought it was disgusting. I explained that the cow was actually laughing at her.

Update: Sumana disputes this story. Maybe it was someone else.

[Comments] (11) Song & Dance: In the early days of rock 'n' roll[0], songs and dances were package deals. Every band had one or more songs that was just an excuse to do the corresponding dance. The song talked about nothing but how great the dance was, and sometimes told you how to do it. I don't know if the dances were invented to go along with the songs, or if dances spread through a different medium, and bands wrote songs to cash in on a dance craze.

You don't see this much anymore. I'm actually kind of glad, because I think those songs are generally pretty lousy. From a memetics standpoint, I do like the idea of a song just being an advertisement for some accessory to the song.

[0] Maybe earlier, too? I can't think of any jazz era dances that correspond to specific songs.

[Comments] (1) The Pocket Wisherman: I've got an Amazon wish list where I toss in whatever books strike my fancy in my online travels. The idea is that I'll know what to look for when I'd otherwise just be aimlessly staring at the shelves of used bookstores. The flaw in my plan, which you have no doubt realized, is that when I'm in those bookstores I don't have access to my wish list. Oh, the exquisite irony!

Yeah, I've had enough of that lousy irony. A while ago someone proposed the obvious solution: print out your wish list and keep it in your notebook. The problem is that while Amazon gives you a wide variety of ways to sort your wish list, none of them do you any good in a physical store. No alphabetical by author, or title, no sorting by genre. So yeah, you've got a hard copy of your wish list, but when you've got a wish list like mine with over 250 items, you'd spend all your time context-switching between the printout and the bookshelves.

I figured I could do better, because Amazon exposes their product and wish list info through a REST interface, and I've been messing around with it for a while (other bits of messing-around to show up in my book). So I wrote The Pocket Wisherman. It grabs a wish list, figures out the most-represented genres (for things that have genres), and sorts everything by genre and (where appropriate) author or artist. I wrote a formatter to print a big HTML card of the information that you can print out.

Except. I can't control printed dimensions in HTML. But I wanted 3x5 cards to put in my little birthday notebook. So I wrote a thing that generates the cards in PDF, four to a page. I also wrote a thing to generate a big HTML list, so now I can autogenerate the kind of obsessive page that other nerds would spend days keeping up to date (if only I could do the same for the books I've read... wait, I guess I can).

The Test

But how well does it work? Yesterday, I put it to the test by taking my printout cards to Black Oak Books in Berkeley. I'd made many previous visits, while my wish list was accumulating its items, but on any given trip I'd never found more than maybe 5 books I really wanted. How many would I find if I had easy access to my wish list? How easy would it be to correlate the wish list and the store bookshelves?

I ended up buying 11(!) books from my wish list, and 2 by authors on my wish list (Stephen Baxter and Fernand Braudel) where the bookstore didn't have the specific book I'd put on there. I got 3 books not on my wish list, which is about my usual total haul when I go to a used bookstore. Total elapsed time: about 2.5 hours, which is slightly longer than I would have spent in Black Oak without a list.

There were 6 books on my wish list that I didn't get because they seemed too expensive (including the out-of-print novel with the hilarious name, "Buddy Holly Is Alive And Well On Ganymede", available in a signed first edition for $45). There was also one book I looked at and then decided I didn't really want it. Total books found because of an entry on my wish list: 20. I'm confident I found about 70 percent of the books on my wish list of which Black Oak had used copies. Pretty good.

How easy is it to apply this program? For ze so-called "genre fiction" it is incredibly easy. The Pocket Wisherman automagically figures out which genres to sort by, so that science fiction is shown as Science Fiction and not Fiction (unless you don't have much science fiction). Genre fiction classifications are pretty monolithic, so you just go to that section of the bookstore and run through your list and the bookshelves in parallel. One pass and you're done.

For nonfiction it is difficult. The biggest section of my wish list is "History", but history is not a monolithic classification in most used bookstores. Black Oak has separate sections for the history of every region of the world. It puts biography in with history, though some bookstores have them separately. I went all over the place trying to remember what the books were about (the downside of the truncated author names and titles that make the card display so compact) and in which subgenre I might find them.

General fiction was also a pain, but I think that's just because there was so much of it and so little of it was stuff I wanted.

I had a big "unclassified" section that I didn't really check at all. It's made of high-hanging fruit: really obscure stuff, stuff I don't think a used bookstore would sell, and stuff that might be categorized in any of a number of places.

The categorization itself slips up in a couple places. Historical fiction in my list gets categorized under History instead of Fiction. Sometimes the Amazon data is just wrong (why is the big Far Side collection filed under "History"?)

Sumana points out that if the bookstore has a terminal where you can look things up, or has a lot of staff (unlike Black Oak), you can just hog the terminal or a staff member for a while and avoid a lot of these problems.

Anyway, give it a try. If there's enough demand I might host a web application version of it, but that could be pretty ugly due to the one-query-per-second-per-IP-address limitation of AWS.

: Oh, the thing I forgot to mention in that enormous entry is that Michael Josephson put my OnDemandAmazonList class in the "contributed code" section of the PyAmazon project. Ordinarily to iterate over an Amazon list you have to iterate over the first page, then grab the second page, iterate over it, etc. There's also at least two different things that might happen when you go over the end of the list. OnDemandAmazonList hides that complexity and lets you iterate over a wish list or result set like a regular Python list. Now I might be able to get away with not including that code in my chapter, which would be nice.

[Comments] (5) : Clearly bottles of wine dipped in chocolate are an abomination, since inedible objects should never be dipped in edible coating. But is it actually disturbing, or just a garden-variety abomination? I can't decide.

[Comments] (2) : What would happen if Frank Chu met Frank Cho?

: "But five years on and let's be real: Isn't this starting to feel tiring, repetitive, cloying, misguided, weird seeming?"

It seems you cannot write about Dave Eggers without adopting his writing style.

[Comments] (2) : Not in the mood to do much software writing lately, for whatever reason. Sorry, people who use software I wrote. I did release a minor fix to The Pocket Wisherman which gives PDF wish list cards a bit of a margin so that printers don't print off the edge of the page, as happened to me once in a sort of Fermat's Last Theorem stroke of fate. I thought I was so clever setting the edge of the card flush with the page so as to save a whack of the scissors, but those printers have different ideas.

Tomorrow: jury duty.

[Comments] (3) The Pocket Wisherman Gets A Bite: Wow, someone bought me things off of my wishlist, previously used only as an example. Who is this mysterious patron of the crummy.com arts? Maybe I'll find out when I go in to work tomorrow to pick up the packages. Thanks!

[Comments] (4) : Why am I deluged with spam for pills to cure impotence, but nothing to cure idempotence?

[Comments] (2) There's a dollar in every one! My chain letter scam worked!: It turns out I have two benefactors: Kevan, who bought me The Third Policeman; and Josh Lucas, who bought me Moneyball and Fear and Loathing on the Campaign Trail. These data points lend still more support to Kevan's hypothesis that when Alice buys Bob a gift from Bob's wish list, she actually buys from the intersection of the wish list and the things Alice likes.

Kevan writes:

Come on, admit it, you only made the Wisherman so that people would buy things from your wishlist in gratitude. This book's one of my favourites, anyway; enjoy it.

I encourage everyone to believe this.

: I got roped into writing another chapter for the Python book, so once again free time is a thing of the past. Lousy past, hoarding all my free time! [whack] Take that! Crud, I destroyed the past.

[Comments] (3) : I think woefully unexplored is the continuity of modern haute cuisine ("deconstructed dishes", recent causes celebres of turning food into aerosol foams, printing images on rice paper with flavored inks, etc.) with similar bizarre preparations used in medieval and ancient times, Not strange ingredients like flamingo tongues and lampreys, which was what I always used to think of, but the dishes themselves: the ground meat of animal foo molded into the shape of a roasted animal bar, the Satyricon's twelve-course Zodiac meal, four and twenty blackbirds baked in a pie, etc. It's the same impulse in both cases, but now we have better technology. I would love to read (or write) something that tied these trends together.

My current favorite example of old-school culinary tomfoolery is this medieval recipe for an enormous egg using 30-40 normal-sized eggs and two pigs' bladders. That sucker's huge! There's no reason to make such a huge egg except to mess with visitors' minds. "Yup, everything's bigger here in Mecklenburg-Strelitz. You should see our cows!"

[Comments] (6) : Okay, that's enough of that. I took my cards to Moe's in Berkeley and found nine books from my wishlist (plus two not in the wishlist) without trying very hard. Then I went to B&N and spent accumulated gift cards on another five. The increasing fragmentation of my wish list is exposing problems in the Pocket Wisherman's automatic categorization, but if I fix them I'll just go off printing new copies of the cards and buying more dang books.

The new chapter I'm writing for the Python book is on network programming. I'm planning to write a tiny IRC-like chat room thing, and a multiplayer game of some sort, and maybe a file-sharing something to demonstrate peer-to-peer. Let me know if you have any ideas, especially for the game. I don't want to introduce a whole lot of irrelevant-to-the-chapter overhead just to get a cool demo application, but it'd be nice to have something besides the not-terribly-heart-pounding number-guessing game I'm currently planning.

[Comments] (1) Fore!: WHACK

[Comments] (3) : I wrote my cute little IRC ripoff for the book in about 100 lines of Python. I was going to invite you all to telnet in and try it out, but there are firewalls in front of all the machines on which I can run the program, firewalls that prevent me from exposing servers of any kind to the outside. Tragedy!

: Went to the Ferry Building for the first time today. It's full of expensive little boutiques, including a store that sells only mushrooms. You don't see many stores that try to cover a whole kingdom of life. The whole experience was nice, albeit overpriced.

[Comments] (5) : Still in jury selection blah. I don't understand how sitting and doing nothing can be more stressful than going to work. Too tired to write anything, which is a problem as I'm supposed to be writing the other book chapter.

[Comments] (1) : Jury selection is over and I'm not on the jury. Bizarrely, both of the people I made friends with during the process are on the jury. So don't make friends with me if you want to get out of jury duty.

This is fortunate because it means I can go down to Bakersfield tomorrow to see my mother. Hoorah!

: This depiction of game auteurs basking in the glow of game mega-auteur Will Wright (who writes the games I've always wanted to write) is a little odd to me. It seems to have an unhealthy obsession with Wright's technique of saving money by rendering graphics dynamically instead of paying someone to animate every possible sprite you might see in a game.

I'm no artist, so I've always accepted that I'd need to do this for any fancy-graphics games I might write. I've never had a budget for paying anyone for anything, and a "we need an artist" announcement is a near-sure sign of a moribund open source game ("Our ambitions have overshot our abilities! Who has some spare ability?"). So maybe it's just a different worldview.

The thing in that presentation that seems really interesting and novel to me is the tactic of creating in-game content by reusing the products of other users' normal play. Now that I write it down I see it's not totally novel: for instance, bones levels in roguelike games do the same thing. That's a lot more limited than what Wright is describing, though.

This type of hack, interpreting the normal behavior of users in a way that yields new information, is one of my favorites. In a game context it could cause privacy problems or be a Tar Pit From Hell, but you could structure games to avoid those problems; game state need not be a general-purpose communication mechanism.

[Comments] (1) Medical Heuristics I Learned From Watching House: If you don't know what it is, it's probably some obscure form of poisoning.

I'm Disorganized, Just Like A Real Author: Hey, a couple days ago someone sent me mail asking if I wanted to write a tutorial, presumably for money. I'm interested but I can't find your mail. Would you please resend it? I remember you mentioned reading NYCB, so hopefully you'll read this.

[Comments] (8) A kiss may be grand but it won't pay the rental: Sumana knows I'm obsessed with the automat, and sent me a bunch of frustratingly-small historical images pertaining to that dys/utopia of restauranteering. I must now see Dark City just for that sleek-looking automat scene. Also, for some reason, vegan cheesecake.

: Having lots of fun clicking around Board Game Geek's GeekLists, which are much more interesting than the similar product lists on Amazon, or, indeed, more interesting than writing about network protocols.

[Comments] (2) : In the antique store I saw a book with one of the best titles I've ever seen. I'll use wacky font sizes to try to convey the way the title looked on the cover:

Gold! ...no gold

The book itself was some self-published autobiography of growing up in central California or something. I could tell it was self-published because the jacket copy told me that when I was done reading the book I would feel like I really knew the author and consider them a close friend. Only the self-published author would consider that the best use of jacket copy space. I don't know anyone who reads books to make friends with the authors, and I imagine non-self-published authors would be kind of creeped out about people who considered themselves your friends based on what they read in a book.

In a refreshing reverse of what's usually less creepy, this is less creepy if the author is dead. Then reading their stuff is the closest thing possible to actually making friends with them. I don't think the author of Gold! ...no gold had that in mind, though.

[Comments] (1) : Spam asks me: "Would you take the time to meet people that spend over one billion dollars on travel?". I can't imagine such people would stay still long enough for me to meet them.

[Comments] (6) : It's hard to keep writing a cutting-edge weblog such as NYCB when every spare moment is being dedicated to writing quality Python information for beginners (you hear that, Debra?), so I'm just ripping off stuff from other weblogs. From Amygdala I steal Star Trek blooper reels, which are actually pretty dull, even the titillating-sounding "TNG -- Cast Swearing.mpg". The 'VOY Bloopers' one has some decent ones, including funny pre-post-production overacting from Tim Russ. That's the one I'd recommend, if you're IMAP. Interested. I meant interested.

[Comments] (2) : Does Newton's Wake have any thematic connection to Finnegans Wake, or is that wishful thinking?

[Comments] (2) a/s/l: I figured out the problem that was preventing me from running my lame IRC ripoff server such that others could connect to it. So telnet in to crummy.com, port 2000, and keep me company tonight while I write my lame BitTorrent ripoff.

It turns out the problem wasn't firewalls; it was a misconception of mine about DNS. You'd think they'd be able to find domain experts to write these books, and you'd be right. But it turned out the networking domain expert didn't have time, so they turned to me to write that chapter instead.

Update: That was fun, like a little party, in that no one showed up for hours and then a bunch of people showed up and stayed past my bedtime. I got some good advice on select().

[Comments] (3) Socket Question: Okay, here's something interesting. Python's socket documentation for the socket.shutdown method mentions three constants: SHUT_RD, SHUT_WR, and SHUT_RDWR. However, nowhere I can find does Python actually define these constants. It's obvious what they are because they're ripped off from C/Unix constants of the same names, and those always start numbered from zero. But it seems really weird that the socket library would forget to define these constants even though it defines a million other constants. Am I missing someplace where those constants are defined?

Hamentashen: Sumana got obsessed with hamentashen so I made some tonight. Only one of them held its echinodermoid shape throughout baking; the others unfolded and became little tarts. I made a poppy seed filling, which was probably really expensive, but tasty.

Happy Mordecai! I mean Haman. Purim. Happy Purim.

[Comments] (3) Polls You Can Bruise: I'm not going to haul out the old COPOUT code just for this one poll, but I'd like your opinion on how I should end my networking chapter for the Python book.

I've got enough pages to cover one more topic in a fair amount of detail (a couple 10-100LOC examples or one 200-300LOC one). Should I cover a) the peer-to-peer architecture by writing a little file-sharing/distibution network type application, as I planned, or b) the Twisted library, which makes writing networked applications easy such that much of the rest of the chapter is rendered moot and rather quaint-sounding? I'm leaning towards b) even though a) would be easier, because I don't want to be responsible for people thinking raw socket programming is the way to go. On the other hand, so far I've been able to write my chapters without using anything outside the Python standard library, and I think that's a worthy goal.

Let me know what you think I should do. I was going to try to write the last section tonight, but instead I'll start pitching everything into the Word template. I'll write the last section tomorrow after I've decided what goes in said section.

Whichever one I do, the other one will get a little text-only section under "other topics", because I think they're both important.

Out, Damned Irony: I wrote about sockets all day and now my shoulder sockets are sore.

[Comments] (6) Time Meddler: This is the game that makes our fortune, Leonard me boy. Time travel game! In other such games you experience time travel from the perspective of a human: you turn back the clock to a specific point and relive events from there. In this game, you are a four-dimensional being! To you, the timeline looks like the pages of a flip book spread out before you. Like a Trafalmadorian you can visit any segment of the timeline that strike your fancy. Unlike a Trafalmadorian you can also change the timeline. Your changes have ripple effects into the future.

The game board looks like a 2D grid. The squares contain people and objects in different states over time. That is, the x axis is stepwise "time" and the y axis is stepwise "state of person/object #y". Your job on each level of the game is to meddle with the timeline to achieve a certain result (eg. to make two people fall in love). You can insert items into the timeline, move objects around, etc. Every time you do something at time x, the timeline is redrawn from x+1 onwards. With the right modelling the possible actions and resulting events could be very flexible.

It is a turn-based puzzle game because of course it makes no sense to have any time-related operations since the whole point is you exist outside of time.

How do I know this game will make my fortune? TIME TRAVEL, DUH!

Next time on NYCB Game Design Brainstorming: Captain Compliance! The game where the object is to get permission to play the game! Inspired by my review of oki. I'm still not sure exactly how it will go, though.

[Comments] (6) Crøss Purposes: OpenOffice Writer autocorrected "naive" to "naïve", then immediately flagged it as misspelled and suggested "naive" as the correct spelling. Come on, different parts of OpenOffice Writer, let's see some cöoperation cooperation cöoperation coöperation cooperation coöperation here!

[Comments] (1) : Almost done with the book. I have to think up two more study questions and that's it. I can't believe I've written 110 pages of stuff!

Welcome Robot Sea Monsters: I must be more wicked than I thought, because no rest for me. Tonight I did taxes and wrote an item for an O'Reilly "Hacks" book. Tomorrow the technical reviewers' comments come back on my web applications/services chapter for the Python book, and I have to work on that. You'd think I was making a living at this or something.

I'm really proud of the web chapter (and undoubtedly I will remain proud until I get the reviewers' comments), partly because it brings me full circle back to the student class on CGI I gave six years ago. But mainly because in this chapter I suggest a definition of web services that I've only seen one other place, but that I'd like to see more often. I think it's a pretty intuitive definition that will hopefully set the younger generation on the right path.

In the networking chapter I don't do anything like that. For one, I don't know nearly as much about low-level networking as I do about web programming (though I know a hell of a lot more about networking than I did when I started writing that chapter). But mainly it's because on the network and the transport layer, we already had the fight between the simple geeky incrementally-developed protocol and the huge corporate designed-by-committee protocols, and just like in the movie, the ragtag band of geeks and their scruffy but loveable protocol won. Not much to do now except to show people how to use it.

We had that same fight on the application layer for email and chat and "content delivery" and you name it, and almost all the time the geeks won. And just when you thought the fight had been appealed all the way up the protocol stack and settled once and for all, now we're having the same fight on top of HTTP! Being too young to have been involved in the earlier fights, I figured I might as well do my bit for this one, and throw in my lot with the idea of web services I think fits the best with the Python philosophy.

Update: The guy doing the Hacks book (okay, it's Danny, if you must know) says of my hack: "I'm speechless!". Nothing like a shot of praise to bolster my spirits in preparation for the clobbering I fear the tech reviewers will give my web chapter.

[Comments] (3) Games Games: It's games they say, on the other side of the hill. Brendan started a fun new collaborative weblog about game design, and through it we were all reminded of Kevan's random game idea generator. It was the best temporal-displacement Christmas ever.

I think I'd be a good game designer, but almost everything I've heard says it's a miserable profession, and far better to just dabble in it as an amateur. But they say the same thing about writing, and I'm kind of headed in that direction, so maybe I can take it. They probably say that about software development, too, and carpentry.

[Comments] (6) Blockquote Thetans: Beautiful Soup is on a roll lately, getting lots of buzz at PyCon, and at the BangPyPers, the Bangalore Python users' group. Now that I've got a little free time I worked on version 2.0 this evening, which should make people happy. But then I watched The Emperor's New Groove with Sumana, which made me happy.

I can't think of any other Disney films that are out-and-out comedies. Usually they've got a bunch of songs and morality crap and it's like a dang variety show up there. I really dislike that, but this movie was great. Even its failed jokes were funnier than the comic relief in a typical Disney animated feature. Of course, I stopped seeing these movies a long time ago; maybe they're all like this now.

[Comments] (1) Beautiful Soup Buzz Update: It's now in Debian! How 'bout that.

[Comments] (5) Software Package Names: Apropos all the buzz detailed in the previous entries, Sumana said the problem with Beautiful Soup is that you can't tell what it does by looking at the name. This is true, but I'd say it's true of a majority of software packages. It's at its worst in commercial software where your package name is a product name and needs to be trademarkable. It's not as bad in free clones of commercial proprietary software, where they can't use the trademarkable name so they take a word describing the software and hack "K" or "G" or "GNU" into it. But I think those names are pretty bad and unimaginative. That may be my bias towards wacky names that stick in your head but (though usually trademarkable) would never make it past a marketing department.

Maybe software packages need subtitles, the way every nonfiction book nowadays has a subtitle that explains the catchy main title in way too much detail. "Beautiful Soup: The Hidden History Of The Python *ML Parser That Handles Bad Input And Provides Tree Traversal Methods".

: Okay, I've got the new Beautiful Soup running an extremely sensible parsing algorithm based (more or less) on the difference between block tags and inline tags. I gave it a pretty-print mode so I could eyeball the parse tree, and it looks good everywhere I've tried it. Major features I still have to implement:

[Comments] (8) Grapefruit Riot: I've told this story before, but when I was a kid my father would eat grapefruit halves for breakfast and I thought it disgusting. But recently I had the other half of a grapefruit my mother ate and it was still disgusting but not after I'd put sugar on it. Previously even sugar was not enough to disguise the foul taste of the grapefruit, but with sugar it was pretty good. Now I eat grapefruit all the time, though I don't yet have a special spoon for it. I guess your taste buds do change as you get older.

Then I started thinking about sugar and fruit in general and got totally lost. Why exactly is fruit good for you? I have been eating more fruit than I used to to satisfy my sweet tooth, but that's because it's chock full of fructose. The sugar named after fruit.

Obviously a mango is better than a slime moldcandy bar, because in addition to sugar the mango has fiber and vitamin chemicals, while the candy bar has fat and preservative chemicals. But is the mango really a good nutritional investment in an absolute sense? And what about fruit juice? This canned (bleah) 100% fruit juice on my desk says 180 calories and 37 grams of sugar. That's more calories and more sugar than a can of ginger ale. What does the fruit juice have that moves it from the tiny space on the top of the food pyramid into the middle?

I tried to figure this out with web searches but all I got was people telling me to eat fruit. I'm eating fruit! I just want to know what's in the fruit that makes it so great.

[Comments] (4) : What's the deal with WIGU? The old strip ended, and after a couple weeks of messing around with other things, half the characters from the old strip showed up again and now it's like it was before. It's the Outland of web comics.

: The Beautiful Soup 2.0 beta is available for a limited time only, before it becomes the real 2.0. Before I bless it I want other people to try porting their old code to the new version, but mainly to see if the new tree builder works as well as I think it does deciding how to build a parse tree out of bad HTML. All the other stuff is new features, so if you have to change your code, it's because your old code was a victim of the weird ways version 1.x parsed bad HTML. One fun way to test it is just load an HTML file into a BeautifulSoup and prettyPrint() it to see if the tags line up the way you think they should. It all depends on your idea of what's fun, of course.

Beautiful Soup 2.0 only works with Python 2.2 and above, which is unfortunate but I had to do that so I could subclass the string and Unicode types. Should a sufficiently large mob form outside my castle, I'll consider doing a version of the the new version that works with Python 1.5.2.

<M <Y
Y> M>


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