It occurred to me… Django is something like a dictatorship… or maybe an oligarchy. At first it seems like Pylons is the same… but no. Pylons is clearly feudal. I lord over Paste, WebOb, FormEncode. Mike Bayer lords over Mako and SQLAlchemy. Ben lords over Routes, Beaker, and Pylons.
I suppose in all cases there is a certain amount of democracy, because there are no serfs, and any individual is free to travel to any kingdom they like. Well, at least among the open source kingdoms. Without citizenship, and with no exclusiveness of ownership, with even property having largely disappeared, I suppose it’s inevitable that traditional metaphors of control and governance don’t really make sense.
No related posts.
Does that make WSGI like a treaty or a free trade agreement?
Ian it is funny you mention this, because as I was working with App Engine this past weekend I thought to myself, now why do I need a framework someone else wrote, especially for App Engine, WSGI, and Datastore? I might choose to use something another person wrote, like I did with Django templates, but only if it makes sense to me in that situation. I guess I am too alpha male to buy into anything wholesale, and follow a “philosophy” or plan I didn’t completely understand, or play a role in creating.
I dislike the idea that I am supposed to follow some form of leader, or package, who has my best interest in mind, and thought of what I may need to write for me. How does anyone know what I need ahead of time? I like libraries, they save a lot of work and they are cool, but frameworks are just not my thing. Of course I am very stubborn, and it pisses a lot of people off too :)
Food for thought:
Oligarchy: “According to this school of thought, modern democracies should be considered as elected oligarchies”
Feudal: “In its most basic essence—the granting of land in return for military service”
Noah:
this makes little sense:
I dislike the idea that I am supposed to follow some form of leader, or package, who has my best interest in mind, and thought of what I may need to write for me.
You are confusing the “here is ONE way to do it” with “here is how you MUST be doing it”, nothing stops you from rolling your own application. Or, are you against WSGI too?
Oh yeah, and posts like this is why the Pylon peeps are thought to be anti-Django, you will never see a post like this from any of the main Django developers.
Zum-zum, I am not in any camp except my own. To quote the Fountainhead, freedom “…To ask nothing. To expect nothing. To depend on nothing.” I don’t have a label or a category to be placed in other then I program in Python, but even that could change if something better came along. In a nutshell, I don’t want what anyone is selling, and I don’t want to join anyone’s revolution, I would rather start my own.
In a nutshell, I don’t want what anyone is selling, and I don’t want to join anyone’s revolution, I would rather start my own.
NIH?
I think Pylons or Zope 3 actually seem to suit Noah’s self-described temperament the best. These systems explicitly give you a toolbox of libraries and leave a lot of flexibility into the hands of people who want to use the toolbox. The drawback is that the individual developer also needs to do a bit more integration to figure out which components in the toolbox they should use, and how.
Something like Django, Grok or TurboGears aim to offer a more integrated experience. The advantage is that more works out of the box without research by the individual developer, but the drawback is that it may be harder to swap in new components and less flexibility. Django aims to give this experience by building its own integrated stack. This is similar to the traditional Zope 2 project (which has changed quite a lot over the last few years). TurboGears did this by integrating a set of existing components, and now with TurboGears 2, by offering a more integrated experience on top of Pylons components. Grok already had that mission for Zope 3 components (and other things).
Grok’s approach has an interesting aspect. We mostly build on existing Zope 3 components so far, though certainly not exclusively so. These components have integration and plugin points using the component architecture, and they all tend to share a style. This helps us present an integrated feel while still retaining the toolbox (“megaframework”) aspect. We try to retain Zope 3′s flexibility while adding a more integrated feel: the best of both worlds.
The best way in my own personal experience to do new things that people seem to like to use is to actually build on things that already exist. “Things” here means both communities, APIs and codebases. Five was all about Zope 3 in Zope 2. lxml on libxml2 and using ElementTree’s API. Grok on Zope 3. This process still involves invention, but the aim is to invent the least amount necessary to accomplish the main aim of the project. Five: the flexibility of Zope 3 in production Zope 2 sites. lxml: an easier API to expose libxml2′s power, Grok: taming Zope 3′s power. The trick when doing new things is to use existing things as much as possible, so there are less new bits to worry about. So there is a way for Noah to start his revolutions without succumbing to NIH. :)
What do you mean? I didn’t intend this post as being particular for or against Django or Pylons. It’s just an observation that occurred to me. (If you were responding to Noah, I think he just said he was kind of anti-everything.)
Why this weird sensitivity?
To respond to Ian, Martijn, and Mike,
I actually like a lot of the tools that Mike and Ian have created, I use them quite a bit. In fact, I am very grateful for them in fact. I am working on a “secret” project using SQLAchemy right now in fact, and I use virtualenv everyday. In terms of Pylons and Ben, I like this Routes idea, and I will probably use it at some point soon for another project I am doing.
Those tools don’t preach to me though, or tell me what I am supposed to do. As my skills develop in my journey through Python, I realize I don’t like philosophical ideals, like frameworks, but I like tools. Anything that smells of religion, or wants me to join a club, or wear a T-Shirt, or make decisions for me, I dislike immediately. Of course, I am somewhat influenced by objectivism, and am agnostic, and am really stubborn, so I am sure that bleeds into other areas as well.
One thing I have enjoyed about doing very small things in Grok, and lurking a lot on the list, is that I am learning quite a bit about Python and Web Development, thanks in a large part to Martijn. I also like that Grok, like Pylons, is very flexible, and people aren’t shoving some philosophy or architecture down my throat, or even suggesting I am stupid if I don’t use their way of doing things. I also like that Grok has support for ZODB, and SQLAlchemy, while having this huge pile of Zope 3 code I could start experimenting with as I learn more. Finally, after meeting a Neuroscientist guru at Caltech that changed my life, I have obtained a great deal of respect for my elders and as such, I really respect the Zope people, like Jim Fulton and Martijn. In fact, I want to take the time to learn what they know, they are a pot of gold. I would classify this as the opposite of NIH actually.
All that being said, I like to experiment and question things, so if something doesn’t make sense, I am not afraid to ask why. This really pisses a lot of people off, including my friends at times. In terms of the current state of Google App Engine for example, I really don’t get what a framework buys me. I think I can write a killer application, which I am doing btw, that doesn’t use a framework other than perhaps the default webapp minimal framework.
Those tools don’t preach to me though, or tell me what I am supposed to do. As my skills develop in my journey through Python, I realize I don’t like philosophical ideals, like frameworks, but I like tools. Anything that smells of religion, or wants me to join a club, or wear a T-Shirt, or make decisions for me, I dislike immediately. Of course, I am somewhat influenced by objectivism, and am agnostic, and am really stubborn, so I am sure that bleeds into other areas as well.
Hah. Why bother reading good books or examining the aesthetics of experienced folk’s code?! No-no, I’m too smart for that!
I haven’t looked into Pylons that much, but Django code is just a pleasure to look at and pick up idioms from. If your ego is too small to bend reading other’s source only because there is a “club” and they take (somewhat justfully) pride in their creation, then, really — good luck and good night.
I expect Pylons code to be as pleasant to look at. The governing and dick-waving doesn’t really matter if you stand face-to-face with the source.
Noah, thanks for the compliment, but I’m not old enough by far to be an “elder”. :)
Fubar/I am sorry you don’t have the courage to reveal your true identity in a blog post, but from a guess you seem to like to use the word “folk’s”, and “dick-waving”, with a hyphen no less…gee…I wonder who this could be? I guess you about summarized your method of operation, personal attack, to make your point, anonymously. What is next, are you going to hide behind a bush at the next PyCon 2009 and throw rocks at me?
I have been studying web frameworks in Python for the last 2 years quite heavily, this includes Pylons, Zope, Zope 3, Grok, Django, web.py, and I don’t like Django for every situation, but I do for some, like the appengine application where I used the Django templates recently. I also don’t believe in the idea that you need to have a web framework to write a web application in every situation. I also do not like a tightly configured set of components in all situations, I like freedom. Finally, I don’t need a leader, or want what you are peddling, sorry, give the next guy in the airport the flower…
“Feudal” is stretching it. Pylons and its components are mostly one-man shows: the project leader writes the vast majority of code himself. Pylons is feudal in the sense that Ben cedes a lot of design authority that dictators wouldn’t: he’ll do what others want unless he thinks it’s really bad.
But the relationship between the projects is not feudal: there’s no emperor over them. Each project leader is sovereign; none owes anything to the others. The code has technical interdependencies, but that’s not feudalism any more than a restaurant and its suppliers are feudal. WSGI-org-onia is both a treaty organization and a marketplace: Pylons shops for components, and all parties make interoperability agreements. You saw that at the inter-framework meeting at PyCon.
I don’t know enough about Django’s development structure to know if it’s an oligarchy or not.
Noah is certainly a rebel, but his interest in customizing something specifically for himself makes it unlikely others will follow him, thus no revolution. I prefer the framework approach because several minds working together can build something better than one mind can. Frameworks are designed to be used by others besides the author, so they can attract a movement and thus form a revolution.
If you think Ian’s statement was anti-Django, you don’t know Ian. He wasn’t using “oligarchy” as an insult, but merely describing its governance structure as he sees it. Pylons developers respect Django and its developers. But Pylons and Django express opposite design philosophies. One tries to borrow the best; the other tries to build something better. You can’t expect Pylons developers to like Django when, if they did, they’d have been Django developers instead. But I think that much of Django’s idiosynchracies are because the right components didn’t exist when Django was written. Maybe if Pylons had existed then, and were a bit more mature than it is now, there wouldn’t have been a need for a Django project.
Mike/Your are funny as usual :) In being revolutionary, I largely mean, following my own path. I do like this medieval theme though, and would like there to be some Jousting mixed into these debates: http://en.wikipedia.org/wiki/Jousting Maybe we can get some form of wrestling or sparring to happen at every PyCon. We could even write a google app engine application that kept fighter stats, weight classes, etc ;) Seriously, wrestling solves a lot of problems.
Agreed that Ian was definitely not trying to insult anyone. I wonder how to describe Grok’s governance structure. It’s being run as an oligarchy, I guess. We heavily reuse other systems though, in particular Zope 3, so we follow a lot of design decisions that originated there. A federation?
Mike: You can excuse Zope 2 for not having access to the right components when it was developed in the 90s, but Django has far less excuse. I think a lot of the right components did already exist when Django was written. They were in Zope 3. :) It’s just that it was very hard to see them back then, so I understand them for not noticing. (Zope’s problem, not Django’s, too)
Noah: being a stubborn outspoken Dutchman, I have a lot of sympathy for following ones own path. I do ally myself to the Zope framework as I see a lot of value in both community, reuse, and avoiding NIH, though spend much of my time actually pushing it forward.
There has been a growing movement of Python cavemen, partly inspired by Grok’s mascot, Fred Flintstone with a club, ready to club down any unpythonic constructs. Some form of wrestling at the Python conferences would be good way to balance the geekish atmosphere. (“Hey, we’re the only programming conference with our own wrestling tournament!”) I do know a jiu-jitsu guy in Chicago who’s a network administrator. He doesn’t use Python directly but says, “I know what you’re talking about.”
Not to offend anybody’s feelings, but the Grok mascot does look a bit wussy. Noah and I could fix that of course, except that I can’t draw. I wonder if Mr PyStone was a fighter twenty years ago who got worn down by the military-industrial complex (Zope?).
You’re not hurting my feelings. My wife drew Grok’s mascot, and it doesn’t look at all like me, no matter what people say! So if he looks wussy I’m not hurt at all. At all! No matter what people say! :)
Have you actually seen him in action, smashing stuff?
http://startifact.com/grok_smash.jpg
Now that‘s more like it. Bam. bam, bam, bam, bam!
Fred PyStone just needs to get back in training, start running, and he’ll be back to his warrior self in no time.
@fubar I just happened to be browsing through Django’s source code looking for something that would help on some WSGI code I am writing and I did “read the source Luke”. It is kind of tough though, as there is no compliance with PEP 8, and in vi all the lines wrap. I did a svn blame on one particularly troublesome file, and saw this:
RL: http://code.djangoproject.com/svn/django/trunk/django/core/cache/backends
2378 adrian cursor.execute(“SELECT cachekey FROM %s ORDER BY cachekey LIMIT 1 OFFSET %%s” % self.table, [num / self.cullfrequency]) 2378 adrian cursor.execute(“DELETE FROM %s WHERE cachekey < %%s” % self._table, [cursor.fetchone()[0]])
That last lines wraps a full 140 characters. I wouldn’t exactly call that a tribute to software craftsmanship.
A benign dictatorship would be great ( as long as you can find a benign dictator and have the ability to remove him ! )