Wednesday, April 23, 2008

Goldilocks and The Three Icons

Once upon a time, there were three icons. A Poppa Application icon, a Momma Folder icon and a Baby Document icon. Life was good, and people were easily able to tell the difference between them, although very few visitors were known to go to that part of the forest.

But then along came the Trashcan icon... and the dark times began. If you dragged a folder to the trash it went away back into the void. But if you dragged a Special kind of folder called a Disk icon, it was EJECTED. The trash had discovered "Free will" and their eden was never the same again.

Suddenly, there were icons everywhere. Icons here, icons there. And all different kinds of icons, too. The icons not only overran the desktop, but they began to appear inside of applications. And they did so many different things! Where the poppa had once used WORDS to describe actions by way of MENUS, the icons stubbornly sat there silently.

So then along came Goldilocks. She had wandered onto the desktop innocently enough, but suddenly was propelled into an incomprehensible world of mysterious iconography... in other words, she couldn't make heads or tails of the icons by which she was surrounded. The only icon she thought she recognized was that pesky trashcan that had started all the trouble, and she figured she wanted to stay away from that one.

It was around this time that poor Goldilocks ran into the original Three Icons. "How could you have let this happen!" raged the girl. "It's not our fault, " moaned the icons. "We were never supposed to be a replacement for anything, we were just another way of looking at things!" they grumbled.

"100% data compression means 0% information," howled the Baby Document. "That was the beauty of it. Don't you get it, 0% information. The trashcan is behind all of this. It was the trashcan!"

Just then the trashcan showed up. "Hey kid, don't believe the hype. I deal with all of the things that no one wants, and look how they treat me."

Goldilocks was impressed by the smooth animation of the trashcan, as well as its nice 3-D appearance. "Well, I wouldn't quite put it that way," she said politely. The Trashcan didn't seem at all like she had expected.

"You wouldn't believe the things that people throw away. I'm talking some good stuff here!" said the Trashcan in a friendly tone. "Why just take a look at this..."

Goldilocks' curiosity was piqued. She leaned closer to take a look, and before the warning cries of the Three Icons could reach her, she was swallowed up, and then before you could say "Empty Trash" the poor thing was gone.

"How could you have deleted that poor innocent sweet girl!" sobbed the Momma Folder. "What girl?" burped the Trashcan.

Later, the Poppa Application was alone with the Momma Folder. "Don't worry, baby," he smiled. "I have a backup and restore function. If I can just figure out which icon it is..."

The End?

April Is For AOL

Last night was the always fun Los Angeles web application developer Meetup, this time at AOL in Beverly Hills. After navigating a veritable maze of cubes, we found ourselves in a fairly large screening room chock full of AV equipment, accompanied by a large pile of pizza boxes. A few moments later, the throng of LA-based developers shuffled in, ready for the latest and greatest. The prerequisites fulfilled, we got down to some serious techno-babble.

First up was Omer Singer from DigiTrust, talking about Web Application Firewalls. Although it strayed a little closely to a sales pitch, Omer was able to tie it together with his definition of "defense in depth", which is simply enough having multiple layers of overlapping protection. One good point that he raised which is often overlooked is the cost of "brand-damage" in the marketplace from a web application being hacked. There were several good security related question asked afterwards, so yes the crown was paying close attention.

Next, was Mitch Hashimoto recent hire at CitrusByte, with a brief overview of the newly beta released Google App Engine. Mitch took us on a brief tour of the main capabilities of the Python-based system, like a Datastore API (based on BigTable), and the Users API (based on the Goog's own account authentication database). If you like Python, and don't mind doing everything the Google Way and no other, then the App Engine might be for you.

After Mitch, I did a presentation about Frankie, my newly released Ruby gem for easy development of Facebook applications. If you don't yet know, Frankie uses the Sinatra web server and the Facebooker gem to allow you to create a basic Facebook application with only 10 lines of Ruby. I also did a brief demo of a new, super-secret web thing that I have been working on for a little while... more will be revealed soon!

Last up was programming chum and Ruby expert Ari Lerner, talking about Amazon's EC2 service, and showing a little of another upcoming pet project of ours called "Pool Party", which makes it easy to deploy an auto-scaling application to the EC2 cloud.

It was a really great meetup, and the turnout was really good. Thanks to the persistent efforts of organizer Will Jessup, the community in LA is really thriving, and we were even able to keep the annoyance of non-technical recruiter sales pitches away. Great job, everyone!

Thursday, April 17, 2008

The Archimedes Codex

Archimedes was a very cool dude. When you think of inventor/intellectuals these days, we have been trained to imagine a fairly wimpy, bookish kind of person. Not so for Archie, he was also a bad-ass who defended his beloved city of Syracuse to the death at the hands of Roman invaders. Archimedes invented what for the day, were some freaky advanced technologies.

Well, new information has been discovered about him, thanks to the painstaking work by Will Noel at the Walters Art Museum of New York. A dilapidated tome that was recycled by a 13th century monk, has turned out to contain a treasure trove of amazing information regarding this famous but actually little-known giant.

The Christian Science Monitor has a fascinating article about it. Here is a taste:

Most significant among the discoveries was the knowledge that "Archimedes was the first to calculate with actual infinity in the mathematics of the West." That is to say, he was operating at an intellectual level that didn't become common in the mathematical world until the 17th century, nearly 2,000 years after his time. The Archimedean texts, Noel writes, make the mathematics of Leonardo da Vinci "look like child's play."

The CS Monitor article is fun, and a short read. I really recommend it, if you want to get a sense of the "Original Hacker" was all about.

Tuesday, April 08, 2008

Frankie Goes To Facebook

UPDATED 4/12/2008: Now compatible with Sinatra 0.2.0
So you want to create a small Facebook application... seems like it should be a small thing, right? But creating an entire Ruby on Rails application just for a tiny little Facebook application is, at the very least, a bit wasteful. In the case of a overly popular Facebook app you could end up with, as Marc Andreessen put it, a "self-inflicted denial of service attack", unless you have both a pretty serious infrastructure to support it, as well as lots of cash to keep that data center running.

Wouldn't you rather be able to create a highly scalable "hello, world" Facebook application in around 13 lines of Ruby code? Say hello to Frankie:

require 'rubygems'
require 'frankie'

configure do
set_option :sessions, true
load_facebook_config "./config/facebooker.yml", Sinatra.env

## facebooker helpers
before do

## the site
get '/' do
body "<h1>Hello #{session['facebook_session']} and welcome to frankie!</h1>"

Frankie is a plugin for the minimalist and very fast Sinatra web framework that allows you to easily create a Facebook application by using the Facebooker gem. Why would you want to use it? If your Facebook application needs to be highly scalable, is fairly small, or is really a mashup of other web-available resources, than Frankie could be a good solution.

Frankie is available now for your enjoyment. Here is how to get started:

- Install the Frankie gem, which will install the Sinatra and Facebooker gems if you do not already have them.
sudo gem install frankie

- Create the application directories for your new app:
mkdir myapp
cd myapp
mkdir config

- Put your facebooker.yml file into the /myapp/config directory, and set the values to your information. Here is a simple example of the file:

api_key: apikeyhere
secret_key: secretkeyhere
canvas_page_name: yourcanvashere
callback_url: http://localhost:4567
api_key: apikeyhere
secret_key: secretkeyhere
canvas_page_name: yourcanvashere
callback_url: http://localhost:4567
api_key: apikeyhere
secret_key: secretkeyhere
canvas_page_name: yourcanvashere

- Make sure you have setup your facebook application on the facebook site. Google "setup new facebook application" if you are unsure how to do this. I recommend starting with an IFrame application, so that you can point a development version of your Facebook application to your local machine. This, like our example here, would use "http://localhost:4567" as the callback URL when configuring the Facebook app.

- Create your application, based on the sample above, and run it:
ruby sample.rb

This will start the Sinatra Ruby web server running:
== Sinatra has taken the stage on port 4567!

- Test it by pointing your browser to If you have things setup correctly then you should see your application appear inside of Facebook's site.

Facebook is now your playground... have fun with Frankie!