Thursday, November 29, 2007

Goodbye, Old Paint

In 1997, I fired off an email to a little shareware company intent on mustering a small team of senior engineers tasked with building the company's flagship product up and out. In the resulting interview, I learned the company dress code: "You have to wear clothes." These guys are all right, I thought before returning home to a ringing phone and a great offer. It was the beginning of a wild and exhilarating ride.

The company always felt like the little engine that could. What we lacked in terms of technical experience and connections to the West Coast, we seemed to make up for in terms passion, tenacity and good will. In retrospect, the extent to which we succeeded still amazes me, especially given the muscle of much larger competitors.

Over the years, the downloads, users and dollars accumulated in eight and nine digit quantities. I feel very fortunate for being a part of it, and I can't express sufficient gratitude to everyone who made it possible--the great people who have supported the products and the great people with whom I have worked over the years.

Once again, thanks to all for your support.
Now, it's time to move on to new things.
Goodbye, Old Paint.

Tuesday, November 27, 2007

The Google Enigma

The most interesting post I read today came from Nicholas Carr (link) who cited a worthwhile article from strategy + business titled The Google Enigma.

"Google’s protean appearance is not a reflection of its core business. Rather, it stems from the vast number of complements to its core business. Complements are, to put it simply, any products or services that tend be consumed together. Think hot dogs and mustard, or houses and mortgages. (For a general discussion of complements, see my column “Complementary Genius,” s+b, Summer 2006.) For Google, literally everything that happens on the Internet is a complement to its main business. The more things that people and companies do online, the more ads they see and the more money Google makes. In addition, as Internet activity increases, Google collects more data on consumers’ needs and behavior and can tailor its ads more precisely, strengthening its competitive ad­vantage and further increasing its income. As more and more products and services are delivered digitally over computer networks — entertainment, news, software programs, financial transactions — Google’s range of complements is expanding into ever more industry sectors."


What's He Got

The Romantics have been in the news for suing Guitar Hero maker Activision because the cover version of their 1980s hit What I Like About You allegedly sounds too much like the real McCoy. The band is claiming Activision should have sought rights to the original rather than the publishing license that was secured.

What's the answer? I don't know. I'm not a lawyer. But it is a morsel of news that serves as a decent segue to an obscure 80s tune titled What's He Got by a band called The Producers. The two songs both came out in the very early 1980s, and for some reason my hearing one seems to trigger memories of the other. The videos are available on the band's web site (link).

Artist: The Producers
Song: What's He Got
Disc: The Producers
Year: 1981

With a little luck, maybe somebody in advertising (Saatchi, Chiat, Ogilvy, JWT, etc.) will resurrect this ear worm.

Monday, November 26, 2007

Blitz Scrabble

Scrabulous has a game called Blitz Scrabble. It's competitive, but the only person taking turns is you. After your turn, it's your turn and your turn again for the next four minutes. The same is true for the other players. He or she with the most points wins.

Repeatedly playing this seems to be a good way to fry your brain. It's so painful it's gotta be good for you.

If you try it, be sure to read the "How to win at Blitz!" on the lower right side of the page. Knowing keyboard shortcuts is crucial. Registration is required but free.


What Stephen King Said...

In the recent Time, Stephen King squarely and aptly slams the nail:

"I think there ought to be some serious discussion by smart people, really smart people, about whether or not proliferation of things like The Smoking Gun and TMZ and YouTube and the whole celebrity culture is healthy. We've switched from a culture that was interested in manufacturing, economics, politics — trying to play a serious part in the world — to a culture that's really entertainment-based. I mean, I know people who can tell you who won the last four seasons on American Idol and they don't know who their #$*@&#$ Representatives are."

link: Q & A: Talking with Stephen King

Travel IQ

The Traveler IQ Challenge is a well done Flash geography quiz that is unbelievably addictive.


I've played too much of this, and I'm stuck on Level 10.

Sunday, November 25, 2007

Andy Kaufman on "The Dating Game"

Saturday, November 24, 2007

How To Do Philosophy

Having devoted a good deal of time and thought to both computer science and philosophy, points of intersection are generally of interest to me; and, as time goes by, I notice more and more notable software creators who majored in philosophy.

Stewart Butterfield (Flickr) has a master's in philosophy from the University of Cambridge. Kai Krause has a doctorate in philosophy. Most recently, I realized Paul Graham spent most of his university time majoring in philosophy.

Among Graham's most recent is an essay titled How to Do Philosophy:

"In high school I decided I was going to study philosophy in college. I had several motives, some more honorable than others. One of the less honorable was to shock people. College was regarded as job training where I grew up, so studying philosophy seemed an impressively impractical thing to do. Sort of like slashing holes in your clothes or putting a safety pin through your ear, which were other forms of impressive impracticality then just coming into fashion.

But I had some more honest motives as well. I thought studying philosophy would be a shortcut straight to wisdom. All the people majoring in other things would just end up with a bunch of domain knowledge. I would be learning what was really what..."


Thursday, November 22, 2007

Happy Thanksgiving

Artist: Glen Gould, et al.
Song: Brandenburg Concerto. No. 5:3

Leaf Morphology

Efficiently searching and sampling N-dimensional spaces is a challenge to computer scientists. For quite some time, I've been fascinated with plants because they're faced with similar optimization problems--there are tradeoffs in terms of costs/benefits that determine branching rates, leaf sizes, venation, etc. in their blind or almost blind quests for nutrients and sunlight.

Via kottke, a Wiki page on leaf morphology.

Also via Kottke, a paper investigating why some of nature's creations are rippled and wavy:

Leaves, Flowers and Garbage Bags: Making Waves

Wednesday, November 21, 2007

Stanford's excellent raster-to-vector tool

Stanford's VectorMagic does a magnificent job of converting raster to vector. From the web page, you can upload your own image and select various settings to control the level of detail. Check it out!


(via kwc)

Tomato Basil Soup v. 0.08

Half of the recipes I conjure up have to do with fast preparation of fresh ingredients. In order to speed up the process, I'll cheat a little by using Garden Gourmet's tubes of garlic and basil. Tonight's experiment turned out well, so I'm posting it here. There's nothing like tomato soup made with fresh tomatoes.

10 Roma tomatoes
1 tbsp olive oil
2 tbsp minced garlic (2" - 3" from tube)
2 tbsp minced basil (2" - 3" from tube)
1/2 tsp salt
1/4 tsp crushed red peppers
1 tsp fennel seeds
2 tbsp lemon juice
14 oz. can of diced tomatoes

1. Wash Roma tomatoes and slice 4-5 times crosswise and 1 once lengthwise (the point is getting everything chopped enough to cook evenly). 2. Pour olive oil in large pan and swish it around to cover surface. 3. Combine tomatoes, basil, fennel, lemon juice, crushed peppers and salt in pan and, stirring periodically, cook over medium low heat for ~20 minutes until tomatoes fall apart. 5. Turn off heat and add can of diced tomatoes. 6. Add everything to blender and puree to desired consistency. 7. Return to soup pot and stir over low heat until hot. 8. Serve (approximately 4 servings).

Friday, November 16, 2007


A while back, I posted a video interpretation of Robert Frost's Acquainted with the Night. Now I find myself searching YouTube for vids of poems, a multimedia genre I haven't seen anyone really identify or discuss generally (although it's always best to assume someone has), but one for which I'm developing much appreciation.

This time, an animated video of T.S. Eliot's Lovesong of J. Alfred Prufrock with Eliot as the narrator.

On YouTube, the creator of the animation writes:

"I produced the visuals for this poem by T.S. Eliot in the fall of 2001, during my brief time in the Media program at the University of Lethbridge. 'The Love Song of J. Alfred Prufrock, an Animated Rendition of T.S. Eliot's Poem' appeared in the 'highlights reel' of the Melbourne International Student Animation Festival, which traveled to select universities across Australia. After receiving feedback on YouTube, I replaced the original narration with T.S. Eliot's voice in this 2007 revision."


Thursday, November 15, 2007


He approached the counter with apprehension.

"Welcome to Upsellers!"
"Hi, I'd like..."
"Can I interest you in Upsell #1?"
"Uh, no. I'd just like what I always get."
"Are you sure you wouldn't like to upgrade that to Upsell #2?"
"No, thanks. Just what I always get."
"Do you have an Upsell card?"
"Um, no."
"Would you like an Upsell card? You'll save 15% today!"
"No, thanks. I'd just like to pay the way I always do."
"Are you on the Upsellers mailing list?"
"Would you like to be? We'll notify you about all sorts of great things!"
"No, thanks."
"Will that be all today?"
"Yes, thank you."

Sigh. This experience is a lot more painful than it used to be.

Mexican Chocolate Cookies

Cooking is an activity I find immensely satisfying. Last night, I made some Mexican Chocolate Cookies using a recipe attributed to Maida Heatter. I found the recipe after a extensively searching and perusing recipes containing both chocolate and cayenne.

This recipe includes 1/2 tsp of cayenne pepper and 3/4 cup of cocoa powder. The downside is having to freeze the dough for at least a day, but the trouble is more than worth it.

These cookies are excellent! If not the best I've found, very close. They have a chocolatey beginning and a wonderful spicy finish. Highly recommended!


Wednesday, November 14, 2007

The Swarm

The behavior of flocks of birds and schools of fish fascinates me so much that, for recreation, I used to write little applications in attempts to simulate the behavior. I came up with various rules determining how fast each particle could turn, how much it could accelerate, what imaginary point it tried to follow, etc.

Thanks to The Loom, I've realized that one the experts on this sort of thing is Iain D. Couzin at Princeton's Collective Animal Behavior Laboratory. He has a cool and interesting web page here. Also, check out Carl Zimmer's NYT article on Couzin: From Ants to People, an Instinct to Swarm.

Monday, November 12, 2007


Artist: Elvis Costello
Song: Shipbuilding
Disc: The Very Best of Elvis Costello

Fletcher Memorial

"Take all your overgrown infants away somewhere.
And build them a home, a little place of their own
The Fletcher Memorial home for incurable tyrants and kings..."

Artist: Pink Floyd
Song: The Fletcher Memorial Home
Disc: The Final Cut
Year: 1983

The Most Brilliant Book

It was the most brilliant book ever written.

Unfortunately, it was so brilliant there were only 50 people on the planet capable of truly understanding it, and, unsurprisingly, none of them were critics.

And so... the author perished in penury and obscurity as the few copies printed gathered dust on shelves, sandwiched between well-worn volumes filled with senseless drivel.

Sunday, November 11, 2007

On Skepticism

Often I feel hesitant in offering personal insights and observations, worrying they'll only come off as inspid and narcissistic, but some encouragement comes in the amount of interest such posts generate.

First, let me offer the disclaimer that I'm far from an expert in many areas on which I am prone to reflect, and so the thoughts often do not come backed by any rigorous studies or valid statistical sampling. (Although, it seems, this is a weakness shared by many widely-cited 'experts' speaking loudly on the Internet.)

Disclaimer out of the way, a thought on skepticism.

All too often, I find myself feeling shamefully skeptical of the wisdom of popular gurus, especially when it comes to persuasively explaining seriously complex phenomena--even when it's offered to standing ovations coming from cheering audiences.

One thing that's troubling to me is how simple many of the greatest scientific and mathematical discoveries seem in retrospect. F=MA? How could anyone have missed such an obvious model for motion? Duh!

The apparent simplicity of such great achievements demonstrates the clarity of 20/20 hindsight. It also leaves me wondering what other 'simple' great truths are dangling today right before the eyes of over six billion people.

It's troubling, genuinely troubling, that so many 'obvious' great truths behind us were invisible to tens or hundreds of millions of people until some brilliant and/or lucky individual stumbled upon them. The flat Earth question is particularly troubling. Duh!

Although we can look over our shoulders and see obviousness in many great discoveries and inventions, no one will claim the achievements came easily. Usually they required a great deal of thought and perspiration by brilliant individuals. As easy as things might seem when we look backward, it's important to remember the great difficulties in moving forward.

The question that seems to haunt me most when someone is expounding a new theory explaining complex phenomenon is this:

Is the system being explained an order of magnitude more complicated than anything Newton managed to figure out?

If the answer to the question is 'yes', the next question asks whether the individual offering theory is an order of magnitude more brilliant than Newton. Alternatively, there's the possibility of luck parallel to that produced by the Infinite Improbability Drive.

Neither case leaves me terribly confident of the 'truth' being offered, because any attempt to estimate the likelihood of truth results in a very tiny probability value (especially when the new theory is yet another theory in an area with a long history of new theories).

The thought experiment isn't always a valid one, but it can be a useful means of inducing skepticism. Whenever somebody starts hypothesizing or spewing buzzwords du jour, I can't keep my mind from generating ballpark estimates, within orders of magnitude, of the probability of the claims being true.

Saturday, November 10, 2007

Gare du Nord

Nic Harcourt : Music :: Steve Jobs : Technology

Always find something new and interesting in Harcourt's picks, most recently, Gare du Nord. Here's an except from the group's site:

"In the spring of 2001 Gare du Nord kicked off when producers Doc and Inca were asked by a French promoter to deliver a soundtrack for a Fashion & Lifestyle Event in Brussels called Excellence. Instead of going just for moody sounds and loungy atmospheres the twosome decided to go beyond synths and beats and they composed a song cycle to express their contemporary interpretation of traditional jazz and blues. The soundtrack for the event became the first Gare du Nord album; (in search of) Excellounge and the single Pablo’s Blues were released to high critical acclaim in The Netherlands, a country that has a tradition when it comes to picking up new sounds and trends."

Artist: Gare du Nord & Marvin Gaye
Song: You're my Medicine

Friday, November 09, 2007

Spoof 24 pilot set in 1994

In this hilarious spoof, Jack Bauer uses Windows 3.1, AOL 3.0, dot matrix printers and Polaroid pictures to fight terrorism. Even if you don't watch 24, you'll probably find this amusing.

link: 24: The Unaired 1994 Pilot

Thursday, November 08, 2007

Lena in Woody Allen's Sleeper?

File under: Learn something new everyday.

I was watching this YouTube clip from Woody Allen's Sleeper. About 1:28 into the clip, there are a few frames like this. Note the image on the sheet.

Here's a miniature of the classic test image used in computer graphics for eons.

The IEEE's A Note on Lena confirms my suspicions that I'm not the first to notice this, but, still, it was an amusing surprise.

Wednesday, November 07, 2007

Ze: Strike Day

Ze Frank talks about the writer's strike.


Tuesday, November 06, 2007

The Blue Nile vs Blade Runner

An interesting mash-up of a favorite film and a favorite band...


A 1990s flashback tribute about giving credit where credit is due.

Besides singing about raining men, Martha Wash owned the voice behind many of the lip-sync-ed hard-body-make-you-sweat videos of the 1990s--including Gonna Make You Sweat (C&C Music Factory), Strike it Up, and Everybody, Everybody (Black Box).

In this clip she reprises Everybody, Everybody.

Artist: Marsha Wash
Song: Everybody, Everybody

Monday, November 05, 2007

Matrix multiplication order in CG

Matrices are used in transformations in both 2D and 3D graphics. Over the years, I've seen a number of individuals confused about the order in which matrices are multiplied in the construction of composite transformations. If you've done a lot of work with matrices, this post is pretty basic, but I'm simply offering it with the hope it will help clear up a what seems to be a point of confusion among the less initiated.

The greatest source of confusion with matrix multiplication order seems to be due to different but equivalent methods used in computer graphics texts. Some texts multiply rows by matrices. Other texts multiply matrices by columns. In the row case, the row vector comes before the transformation matrix. In the column case, the transformation matrix comes before the column vector.

Why do authors use two different approaches? In the case of row vectors, matrices are concatenated in the same order that the operations are applied, which is an attractive property vs the column method in which the matrices are multiplied in reverse order. On the other hand, the use of column vectors is also attractive because that's the form typically used in linear algebra texts.

In understanding the relationship between the two, it's helpful to rememember that the transpose of a matrix product is equal to the reverse product of the individual matrix transposes. Applying this rule with a transformation matrix M and a column vector C shows us the relationship between the column method and the row method:


Note: The transpose of a column vector (CT) is a row vector. The transformation matrix used with row method is the transpose of the transformation matrix used with the column method.

If you remember that row*matrix always yields a new row and matrix*column always yields a new column, the rest falls into place. Apply each transformation sequentially and the order of multiplication needed for a composite transformation will be clear.

In the case of rows, apply the first transformation:


Because this product is a row, we append the next matrix and multiply again to apply the second transformation:


Since matrix multiplication is associative, we can move the parentheses to show the composite transform constructed by multiplying the transformations in order:


This shows why transformations are applied in order with the row method.

In the case of the column method, the transformation matrix comes first, followed by the column vector. Apply the first transformation:


Since this results in a column, we prepend the second transformation matrix (because with the column method, the transformation matrix always comes before the column):


Again, since matrix multiplication is associative, we can reorder the parentheses:


This clearly shows why transformation matrices are multiplied in reverse order when the column method is used.

One final reminder. If you switch from one method to the other, remember that the matrix used in one method is the transpose of the matrix used in the other method; i.e., (MC)T = CTMT

See also: The Matrix Cookbook and Gamasutra: Complex Matrix Conventions.

Feynman's Ants

Via Make blog...

This page at LanBo technologies recalls young Richard Feyman's ad hoc experiments on ants in which he tried to figure out how ants communicated the location of sugar. The story should be an inspiration to any curious mind.

"When he was a student at Princeton University, in the early 1940s, he tried to figure out how ants communicated. He put sugar on a piece of folded cardboard and hung it on a string stretched across a window. Then he waited for some ants to appear. Whenever he saw one, he picked it up on a piece of paper and took it to the sugar.

'I wanted to see how long it would take the other ants to get the message to go to the 'ferry terminal'. It started slowly, but rapidly increased until I was going mad ferrying the ants back and forth.' After a while, he started taking the ants from the sugar to a different spot. None of them went back to the original starting place, which would have returned them to the sugar. They followed one another, but not to the sugar."


Family Planning with Graph Theory

People often find graph theory too abstract to be applicable to their own lives. This post will try to change that.

A graph is a collection of vertices and edges. You might consider a Connect the Dots puzzle a graph, or a polygon, or a collection of cities on a road map, or a collection of nodes in a computer network--anything, really, that can be represented as a set of points between which meaningful connections can be made.

One quantitive property of graphs is density. The density of a graph tells you how close you are to the maximum possible number of edges. A completed Connect the Dots puzzle is an example a "sparse graph" (low density), but if you draw lines from every dot to every other dot, the graph will reach maximum density.

The maximum number of edges a graph can have is determined by the formula V*(V-1)/2, where V is the number of vertices. This can be easily verified using combinatorics, because it's the number of unique combinations of two chosen from a set of V elements: (V!) / (2! * (V-2)!).

It should be clear that the maximum number of edges grows exponentially with each additional vertex. If maximum density is to be maintained, for each new vertex added to a graph, edges must be added connecting the new vertex to all pre-existing vertices. Following is a visual example.

By this time, you may be wondering how any of this might relate to your own life and family planning. I'll explain by considering the number of possible fights that may occur among one's offspring.

If you have only one child, there are zero possible fights between this child and the other children, because there are no other children with which to fight.

If you have two children, there's obviously only one possible fight: the fight between Child A and Child B.

In the case of three children, there are three different possible fights: (A,B), (A,C) and (B,C).

Moving on to four children, the number of possible fights doubles: (A,B), (A,C), (A,D), (B,C), (B,D) and (C,D).

The number of fights possible with five children is interesting, but only theoretically so. In practical terms, it doesn't matter, because even four are perfectly capable of fighting all the time.


Saturday, November 03, 2007

Danny Wilson

Obscure 80s. Still love hearing the chords break on the piano solo.

Artist: Danny Wilson
Song: A Girl I Used To Know
Disc: Meet Danny Wilson
Year: 1987

(If you like this, also check out Mary's Prayer)

Love is the answer...

Is love the answer?
But not in a math class, as this instructor points out.


A class called "var"

The previous post bemoans "language flux," but the spark behind that post was a thought I've been pondering. The syntax of C++ and JavaScript are pretty close. This leaves me wondering how far one could go in creating code that functions as both valid C++ and valid JavaScript.

The biggest problem I see lies in disconnent with static vs dynamic typing, but here's the idea. If one created a C++ class named "var" that modeled the behavior of dynamic JavaScript variables as closely possible, I'll bet one could make quite a bit of hay out of it. Anything approaching first class functions seems daunting, but the prospect of a class named "var" seems promising even if it only handles strings, floats and integers.

Language Flux

As far as computing goes, the language wars and the attendant syntax thrash is a disappointment. This is a phenomenon that I never envisioned. In younger years, I would have guessed and hoped some sort of ultimate, universal programming language would have been developed by now, but that hasn't happened, and things don't seem to be going in that direction. The bright spot, I suppose, is the exent to which C's syntax has been adopted in many new languages.

A lot of thought and effort goes into solving many computing problems. Once the problem is solved, the greatest value, I believe, is the computational mechanism embodied in the solution. In Aristotelian terms, this is the essential part while the language used and associated syntax is merely accidental.

Perpetual language flux results in a perpetual reinvention of wheels of computing, or sometimes useful old wheels simply fade into the past and fall into disuse. I'm left pondering the extent to which this impedes human progress. Too much human effort seems to be thrown away. There seems to be a need for more global thinking in this area.

Friday, November 02, 2007

Where do you go to my lovely

Another track in The Darjeeling Limited

Artist: Peter Sarstedt
Song: Where Do You Go To My Lovely
Disc: The Darjeeling Limited
Year: 1969

Thursday, November 01, 2007

How to Resist a Sales Pitch

Each day, my Google home page offers a couple of helpful "How to of the Day" tips. Usually the only thing I do with this click bait is imagine ways in which the two tips might be combined into a single tip.

Here's an example:

The combination? I dunno. Maybe if someone tries to bother you with a sales pitch, you should simply walk away and sort your LEGOs.

Now, even though I'm usually able to resist the "How To" advice, today, I couldn't say no to the first one: How to Resist a Sales Pitch.

What's really fun is this wikiHow page is supported by Adsense ads. Here are a couple of examples I captured from the sales pitch resistance page:

The thought of making millions today left me feeling as tempted as Eve at a Farmer's Market, but fortunately I found salvation in the 14-step "How to Resist a Sales Pitch" posted in the adjacent column. Woohoo!!!

Gradient-directed Displacement

In the beginning, this blog was to be a blog about computer graphics, but, well, you know... Returning to the subject, let's look at an interesting way to deform an image.

In most applications, a displacement map indicates how much pixels in some other image are to be moved. Generally, one channel (red, green, blue) of the displacement map indicates horizontal shift while another channel indicates a vertical shift.

In other words, given D (the destination image), S (the source image), M(the displacement map) and k (some scaling constant), the mapping between D and S is something like this:

D(x,y) = S(x+k*M(x,y).red, y+k*M(x,y).green)

Interesting results can be realized with another approach. Rather than generating the displacement vectors from the color values of M, generate the displacement vectors from the gradient of the luminance channel of M (e.g., using a Sobel filter).

Here's an example with the original image on the left and the filtered image on the right:

In this case, the displacement map (M) is generated from the gradient of luminance channel of the original. A Gaussian Blur was applied to the luminance channel before calculating the gradients (without the blur, the results would be noisier, choppier and less smooth).

Visually, this effect causes lighter areas to sort of ooze into darker areas. (Of course, if you invert the vector, the opposite will happen). The results are especially interesting with faces and wrinkly things. In the case of faces, it reminds me of the style of a certain famous illustrator whose name escapes me at the moment.