April 16, 2008
Learning to create Google App Engine applications via building this simple blog has been hugely fun and not just a little bit frustrating. Many, many thanks to Google's Marzia for so diligently helping me to figure out the missing piece that kept me from being able to upload this code.
I've come away from the experience feeling very enthusiastic about App Engine. It's not going to replace Ruby on Rails as my web development platform of choice, but I have to admit that GAE makes it very, very easy to quickly build and deploy an application. I managed to become a pretty competant Python programmer in just a few days, and I know enough about Django to build a small web application that observes the DRY principle.
I became very frustrated that Django is a whole seperate language unto itself, so I had to learn Python and Django. I suppose that I have become spolied by Rails, which allows me to write the logic, data and presentation layers in one language. It's so simple, beautiful and elegant.
That's not neccesarily an argument against GAE, which it seems is going to support multiple language and frameworks as it matures. The combination of Ruby on Rails's power with Google's essentially infinite scalability would be a mighty and compelling thing.
April 17, 2008
I'm continuing to work on this blog software, and I am learning a lot about AppEngine, Python and Django. I used Django's include function to refactor the rendering of posts. That removed some code duplication. Got to love that. I feel like I've already done a full day's work, and it's only 10:30!
My inclination is next to look at extending Python's WSGIHandler further to make it more MVC-like. I'd never paid much attention to that design pattern before I started using Ruby on Rails, but I'm quite addicted to it now, and doing the extra work -- and admittedly, it's not that much -- to do it the AppEngine way irks me. I've already taken a step in that direction, subclassing RequestHandler to do all the work of creating a path to the appropriate template file and passing it to the render method, but I know that there's a lot more to do. I also feel like I could refactor the handling of the dictionary that passes values to the template to reduce the repititious setting of values that happens in each handler.
April 29, 2008
I've just uploaded another release of my blog software, and this time it has TAGS! Tags, of course, are clickable links, and you can use them to search for all posts that also have the given tag. Cool, I think.
I'm rather proud of the fact that I wrote the tagging-related classes to be completely transportable to anyone else's Google AppEngine code, and integrating this functionality is as easy as making the taggable class a super-class of any Model class.
I'll update this entry once I have release the tagging code as a Google Code open source project. I might see if I can run it by someone who is a more experienced Pythonista, so I can get a quick sanity check. I'm just the tiniest bit nervous that while my code might be valid Python, it might not observe common idioms of the language.
May 05, 2008
I'm strongly mulling the idea of building an IDE tailored for creating AppEngine applications. I'd start with Scintilla.NET for the text-editing component, add as much Intellisense-like help for Python code as I could manage and hook it up to a debugger and the GAE development web server.
Now, there are plenty of IDEs that will help you write Python. I have been using Komodo Edit, and it does a lot of things very well, but it did not enable me to do source-level debugging, and I just gotta have that. MUST HAVE. Developing any other way is painful and unproductive and horribly inefficient. It's difficult enough to write in a dynamically-typed language, using both a language and a framework that have cringe-worthy documentation (that includes you, Django), but to have to rely on logs to debug you code makes it too painful for serious projects.
However, I'm so impressed with the upside of Google AppEngine , and I'm so sure that it is going to be a meaningful and important web platform, I'm considering taking yet another iron and jamming it into my already-sputtering-and-nearly-out fire. This thing is absolutely going to be a part of my professional life, so investing some time and energy into making it more reasonable to use seems like it just might be wise.
But please, somebody, talk me out of this.