blogquotes prototype is working

I'm supposed to be studying for a challenge exam I'm writing this week in "Advanced" Operating Systems. Instead I spend a good chunk of the day today working on blogquotes in between watching/playing with my daughter.

I can justify this time spent because I did all of this work exclusively from a bash shell using vi to refresh myself on some of the content for the course. In this session I was able to use wget,grep,awk,vi,a shell script and some file permissions. I'm not so sure that will get me through the exam but it was fun and I was finally able to put some time towards my random quote include for the blog.

You can see the quotes being pulled in now in the top right hand corner of this page. So far only my wife and I are using it, as this is very much a proof of concept. It works basically from end to end, but without a lot of features that are going to be necessary as this grows. Paging, searching, caching, tags, some UI polish, and some testing. It's very gratifying though to reach this first phase and actually get something working. Adding features will probably happen a lot quicker now that I actually have a user. ;-)

I also took the opportunity to try out some of Yahoo's client side api's in the YUI. Currently I'm using XHR, Layout and DataTable. I was amazed at how quick it was to basically "assemble" my application. Google's app engine makes the CRUD a total cake-walk, and yahoo's user interface library has no dependencies on server side code but works seamlessly with a JSON backed RPC scheme in Python. It's a whole new world! Now as long as my application doesn't get popular and I have to start paying for resources. ;-)

Some interesting snags while working on this latest revision:
  • Randomly selecting an entity in GQL
  • Django Utils simplejson can't serialize google's db.Model classes, so I had to actually proxy my model class to a simpler structure that I serialize to the client via JSON and XHR
  • No unique id's for google user accounts, all you have is email which isn't exactly something people are going to appreciate me passing on url's for the random inclusion widget. The solution was simple for what I needed, a user preference entity keyed on google's User db type and storing a UUID as the publishingKey, that id now becomes my unique id which won't change even if you change your google account name
  • Google has a very cool AJAX Library SDK for sharing hosting/serving up of all the most popular frameworks like dojo and jquery
I think I'll use google code to start some documentation around bugs and features for this tool rather than simply the blog so look for those details elsewhere.