Thursday, September 29, 2005

More frameworks, taking my eyes off Python for a moment

Since I am about to more or less formally review some Python web frameworks, it seems to me that this as good a time as any to try out a couple of similar frameworks written in other languages. I like my frameworks written in a dynamic language and I really value simplicity and flexibility, which pretty much rules out .net and Java as framework languages adequate to my tastes.

There are two frameworks that I have read about a lot during the last couple of months, so these are the two that I will test drive. There is no way I could earnestly say I want to check out cool dynamic frameworks and not include Ruby on Rails in my research, so that is my first non-Python candidate. Rails has made a lot of noise and has by far the best marketing of all the frameworks I have mentioned in my posts. Not that it is devoid of any technical merit, of course, but coming from a Python background it doesn't seem to me to be as original and groundbreaking as its proponents suggest. We'll see if it makes me change my mind.

The other very interesting framework I've been wanting to try is Seaside. Written in Smalltalk, a language that I really want to learn (as opposed to Ruby, which is not that attractive to me), Seaside is a component based web framework, and is for me a lot more original than RoR. It appears to be quite powerful too.

I plan to report on my experiments with these two frameworks.

Our baby is born, self-congratulations are in order

On Friday, September 23rd, 2005, our baby boy Carlos Rodrigo was born. He took his time, almost 42 weeks to come out of the womb, but he made up for it by being the most beautiful thing I have seen and just plain lovable. My wife was very brave before, during and after the c-section and I love her. Really, everything about this weekend was a huge success, so we are as happy as can be.

Thursday, September 22, 2005

frameworks, magaframeworks and metaframeworks

As I am getting ready for my new web development shop (and while I get my first client), I decided to take a look at the ever changing Python web development landscape. I have been developing with Zope 2x for years and I like it a lot, but sometimes it feels more complicated than it should be, plus there have been a lot of recent developments in this front, so I thought maybe I should at least check.

I recalled reading that at pycon in march, one of the most successful presentations was Michelle Levesque's PyWebOff, so that was my first stop. Sadly, the task of single handedly evaluating half a dozen or more python web frameworks proved to be too much for one person, so right now the project is stalled. Nonetheless, it is very interesting to note that the Python web framework landscape has changed so much in the past six months that the projects considered in the PyWebOff study do not include any of the (arguably) most notable frameworks to date: Django, Subway and TurboGears.

Well, that last point was not entirely accurate, since both Subway and TurboGears use CherryPy as the web backend. And that brings me to another confusing point, the concept of a megaframework. TurboGears seems to be the first project to use the term, but Subway is built on the same concept and of course other languages may use it to.

But what on earth is a megaframework? Well, instead of creating a new framework from scratch, a megaframework is an assembly of already existing frameworks. These frameworks usually include a layer of unifying code wrapped around a web backend, a templating engine, some kind of persistence or database backend and maybe a javascript browser frontend. Also, a simple setup procedure is very important to easily install all the required software. For this last step, setuptools and EasyInstall are popular Python solutions.

So there are frameworks and megaframeworks to evaluate, but that is not all. Since there is a growing number of Python web frameworks, and no easy way to move an application from one framework to another or to interconnect applications between them, PEP (Python Enhancement Proposal) 333 proposes the creation of a
simple and universal interface between web servers and web applications or frameworks: the Python Web Server Gateway Interface (WSGI).
Python Paste is what we could call a metaframework. It uses WSGI to create a framework-neutral set of components and also assists with application setup and deployment. Exactly how this helps or why anybody should implement WSGI support or use a metaframework like Paste is something I still have to fully understand. Maybe I will talk about this in another post.

Considering the varied and rapidly changing landscape, it seems quite a chore to carefully analyze the many available options, but I don't think this is a bad thing at all. There are many approaches to web application development and Python is a language capable of making any of them work well, so maybe it's just a matter of taste.

One final thought for today about the new wave of Python web frameworks: I really can't understand why Zope 3 seems to be entirely ignored in this respect. Zope 3 is a framework that was carefully developed taking into account the many lessons learned from Zope, which is without a doubt the most successful Python web framework to date. Zope 2 managed to get a reputation as an unpythonic framework, so maybe Zope 3, even with its painstakingly designed component architecture, is paying for it. Or perhaps there's a lack of influential bloggers touting it as the next big thing (Rails anyone?) or the project's web page is so terrible that few people think it's worth checking out. Whatever the reason, I think Zope 3 should be taken into account when exploring web frameworks of the future, so I intend to look into this matter more thoroughly.

Well, this is just a quick overview, but anyone can see that it's no easy task to pick the web framework for Python. I'll try to do it, anyway.

Thursday, September 08, 2005

A needle in a haystack

One of the things I have to do to start my new life as an independent developer is to start looking for prospective clients. That means I have to polish and update my resume. Well, after spending a few minutes with it, I feel that a resume is an unfair representation of my capabilities. How can a bunch of keywords used by thousands of other developers separate me from the rest? Where in the small paragraph describing my last ten years of experience at a fairly obscure and small web development company does it show the hard lessons learned about founding and sustaining a technical business? At what point in the long list of languages and technologies I have used can one be certain that I truly understand web development? Where and how on this two short pages can I make the reader appreciate the countless hours of learning that I have put into my career on my free time? How can they really know for sure that I have a passion for this?

Of course, having a blog is a good start (but not if you have one post a year). Hopefully, someday a couple of people may read it and like what they find. Also, practicing good writing can be helpful for another thing the modern programmer should do: promote himself like crazy. Have a web site that shows off your stuff, don't be shy and don't be afraid of the 'M' word. As exemplified by 37signals and RoR, marketing can be very well used to promote yourself and your ideas, specially if you already know how cool they are.

I am well aware that I am not alone in this thoughts. Just yesterday I was reading this post by David Heinemeier Hansson about the same subject but viewed from the other end. First he tells us how he was bothered by the fact that someone once hired him on the basis of his resume, a couple of emails and a one hour interview. The worst thing is that many companies usually do just this to hire people. He says that he will only hire people he knows from open source projects and that more companies should do the same.

I think he has a point there. I was not allowed to open source my work at my old job, but I intend to get involved in some open source effort as soon as I can. I really have a lot of stuff to do, which means at least for the time being I already have a client: myself.

Tuesday, September 06, 2005

A new life merits a new post

Today I signed the papers that definitely separate me from the company I helped found 10 years ago. The past few years saw my company become something very different from what me and a couple of friends wanted it to become when we started it back in 1995 and my very small share percentage after three rounds of investment was not enough to change this, so I decided to get out.

My wife and I are expecting our first baby anytime during the next few days and we are deep in debt over a house we bought a couple of years ago, but hey, I am going to do what I love the way I think it should be done and live a happier life overall. I'm not really sure right now exactly how I will pull it off, but I am really sure about who to blame if I don't. Being your own boss means there's no one to point the finger at when you fail.