I recently rewrote Hangman! (and also renamed it) For those who don’t know, Hangman! was my first Facebook app. I wrote it originally in June of 2007 and it silently lived on Facebook, deep deep within the depths of Application hell.
As part of my Hangman! application on Facebook, I plan on adding word definitions. Like any good word app, it should tell you what the word means. I’m not a big fan of sending off users to other sites when I don’t have to, so I looked into some dictionary APIs.
These APIs are hard to come by. Google has a pretty good one, but it’s not open. It’s not open because their third party data providers won’t allow it to be open. I still whipped up a little PHP love to use it, but I can’t actively use it on a public site because of their restrictions. So I had to find something else. All the big obvious players like dictionary.com and m-w.com have APIs that aren’t free or fun.
Then I found Wordnik. They have a sweet, sweet, young API that they were kind enough to give me access to. As soon as I whip up my own little library to interface with it in a happy efficient way, I’ll be adding definitions and other fun word-related things to Hangman!
It’s finally alive!
You can read Magaret’s announcement here.
What it is:
‘Moments Like Today’ is a collaborative project that aims to inspire people to post “moments” of their lives in three sections: mornings, afternoons, and evenings.
What I did:
While the concept and design came from Margaret and Myra, the functionality and everything back-end came from me. With some zend framework, some man-handling of APIs from Flickr and Vimeo and a little bit of jQuery fun, the end result (for now) is live.
I’ve been using Zend Framework for a while and when I do my own sites things always work as expected. But a couple of times in the past I’ve had the honor of working on other sites with other people that have lead me to a few ‘wtf?’ issues.
The most recent one was as to why the shorter urls ie: “/index/pants” would not work. It would always complain and blow up that the controller ‘pants’ doesn’t exist. Even though I know for a fact that I want the index controller in the default module and the action ‘pants’…
Here’s my skeleton for my magical REST interface. It’s still missing a lot of method calls for Flickr and Vimeo, but the guts are there and the remaining methods will be done in priority when I need them. Right now it supports automatic caching and logging via simple options.
At some point I’ll probably put it on a public SVN repository, but for now you can have the tarball. There’s a README in the file with a simple sample. And the source is pretty self explanatory so you should be able to figure it out if you want to.
The remainder of the work will be done in the order I see fit. Likely read-only methods (most of the getters) Authentication and write methods will be much much later.
I’ll also add more RESTful interfaces as I need them. Probably Facebook soon, Twitter later. Who knows.
Drop your comments here if you’ve got any questions.
I’ve managed to get my little test server all configured for each path. This little task involved configuring mod_ruby, mod_perl, mod_python on top of my already standard php. I also had to fire up mod_proxy to mask the jsp directory (which is really going to an apache tomcat server – another box on my network).
You can view the progress as I start building. Progress is still fairly slow at this moment. But now that all the frameworks are in place and my apache ninja skills have been revived I should be able to kick it up a notch.
I’ve also made a slight change in how I’ll be storing the images in the database. I’m going to just be doing a plain old base64 encode of the binary data. I’d much rather just store binary data in the database as a central repository for all paths, but there appears to be some issues with this and the fact that the entire django community hates binary data in a database. So I’m not going to fight it or waste any more time on it.