Rust has some really nice functional programming facilities built in, all around an iterator concept. Rust being focused on performance and low level control makes it possible to use this without paying a performance cost. Sometimes I still prefer to use the humble for loop though. In quite a few cases, it combines high performance with high...
I've seen some programmers try to avoid the humble for loop at all costs, in favor of more functional abstractions. I'm going to argue that the for loop is sometimes simply the best option. That doesn't mean you should always use it -- far from it -- but it does mean you should give it due consideration. The goal is to help develop some...
In software development we have best practices. These are the distilled wisdom of software engineering, and you should follow best practices to be a good software developer, and to develop good software. If someone points out you broke them, that should be sufficient to make you mend your ways. This is what the term "best practices" implies to me...
Part five in a series about my teenage adventures learning about computers and programming in the 1980s: achieving assembly
Part four in a series about my teenage adventures learning about computers and programming in the 1980s: the call of assembly language.
Tool maven versus language maven. Do modern development environments enable you to be both? How does this affect languages?
Part three in a series about my teenage adventures learning about computers and programming in the 1980s: the MSX 2 computer.
Wherein we discover JavaScript always gives you a choice.
I think, for me, becoming enamored by a programming language requires a sense of empowerment by that language. "Now I can build all the things!" It also requires a certain sense of conceptual unity; it can't be too messy. It also cannot be too low level: it needs the ability to do abstraction. And I need to be actually using it a lot for real...
Developers like to complain about bloat in software. But should we feel guilty? What do to about it? Do we need software environmentalism and a retrofuturistic approach?
I've refreshed my blog again! Let's talk a bit about the history of this blog, and more specifically the technology behind it. I started my blog in January 2005. It's been a while. …
I have been using Rust for some years now for hobby projects. Recently I also had the opportunity to use it professionally for a while. My background is mostly in dynamically typed languages like Python and JavaScript, though I have played with various other languages over the years. I thought I'd share some of my impressions of Rust. …
I participated in a langjam. I created Apilar, an artificial life system based on a stack-based language.
Part two in a series about my teenage adventures learning about computers and programming in the 1980s: the first PC.
I have been programming computers for a long time; I started as a teenager at some point in the 1980s. I thought I might reminiscence a bit about it. That's fun for me, but it also may also be fun for others to see a small snapshot of what programming could be like back then. For some, of my generation or older, there may be recognition, but for...
In this article I'm going to talk about the SolidJS frontend framework, and why I think it's cool and fits my brain. …
Among programmers there is a saying: premature optimization is the root of all evil. Where did that come from? In what context was it used? Does it still apply? …
Software developers use software frameworks all the time, so it's good to think about them. You might even create one yourself, but even if you don't, understanding the design principles underlying them helps you evaluate and use frameworks better. …
When I build an application, I build frameworks along the way. I recently realized that not everybody thinks this is normal, so I thought I'd give a description of what I do and why I think it's a good idea.
I'm looking for new freelance challenges again! I've had an awesome couple of years working for a client that still keeps me very busy, but it's time to start thinking about moving on to something new.I'm looking for new freelance challenges again! I've had an awesome couple of years working for a client that still keeps me very busy, but it's time to start thinking about moving on to something new. What can I do?What can I do? Build (web) applications.Build (web) applications. Build software frameworks.Build software frameworks. Mentor and guide teams when they build web...Mentor and guide teams when they build web...
A discussion of what patterns occur in software framework design.
This is an old blog by now. I started it in 2005. But I'm not old! No way! Over the years I wrote a lot of stuff. Sprinkled throughout are entries that I think are still relevant. So if you'd like, join me in my little journey through the history of my secret weblog. Warning: it's mostly about software development in one way or another. …
Introduction Introduction Functions should have only a single entry point. We all agree on that. But some people also argue that functions should have a single exit that returns the value. More people don't seem to care enough about how their functions are organized. I think that makes functions a lot more complicated than they have to be. So...Functions should have only a single entry point. We all agree on that. But some people also argue that functions should have a single exit that returns the value. More people don't seem to care enough about how their functions are organized. I think that makes functions a lot more complicated than they have to be. So...
Introduction Introduction So I've written a new web form library: So I've written a new web form library: mstformmstform.. The first form library I ever wrote was called The first form library I ever wrote was called ZFormulatorZFormulator and I released it in 1999. My... and I released it in 1999. My...
Introduction Introduction Humans are storytellers. As anyone who knows me can confirm, I definitely enjoy the activity of telling stories. We process and communicate by telling stories. So let me tell you all a story about my life as a web developer the last 7 years. It may just be self-reflection, but hopefully it's also useful for...Humans are storytellers. As anyone who knows me can confirm, I definitely enjoy the activity of telling stories. We process and communicate by telling stories. So let me tell you all a story about my life as a web developer the last 7 years. It may just be self-reflection, but hopefully it's also useful for...
Fair warning: In this blog post I aim to sell myself. I'm looking for an exciting and challenging new freelance engagement.Fair warning: In this blog post I aim to sell myself. I'm looking for an exciting and challenging new freelance engagement. I'm a software developer and I have been one professionally for about 20 years now. I have deep experience, and I continue to learn and create. I know what real-world codebases look like, and I know software development is also about people. I'm a software developer and I have been one professionally for about 20 years now. I have deep experience, and I continue to learn and create. I know what real-world codebases look like, and I know software development is also about people. I think I can offer lot of value. I can develop software for you, and I can also help you...I think I can offer lot of value. I can develop software for you, and I can also help you...
I'm proud to announce the release of Morepath 0.16. I'm proud to announce the release of Morepath 0.16. Morepath_ is a Python web framework that is easy to use and lightweight but grows with you when your project demands more.Morepath_ is a Python web framework that is easy to use and lightweight but grows with you when your project demands more. Morepath 0.16 is one of the biggest releases of Morepath in a whileMorepath 0.16 is one of the biggest releases of Morepath in a while. I want to discuss a few of the highlights of this release here.. I want to discuss a few of the highlights of this release here.
MorepathMorepath is a Python web framework. But is it fast enough for your purposes? is a Python web framework. But is it fast enough for your purposes? Does performance matter? Does performance matter? Performance is one of the least important criteria you should use when you pick a Python web framework.Performance is one of the least important criteria you should use when you pick a Python web framework. You're using You're using PythonPython for... for...
I posted an article about programming yesterday. (I posted an article about programming yesterday. (punctuated equilibrium in software developmentpunctuated equilibrium in software development) In it I try to share some insights I've had about software development, and illustrate it with a library I work on that I think is interesting. I posted it to reddit ) In it I try to share some insights I've had about software development, and illustrate it with a library I work on that I think is interesting. I posted it to reddit /r/programming/r/programming, obviously hoping to get a bit of attention with it. I think the topic is..., obviously hoping to get a bit of attention with it. I think the topic is...
Introduction Introduction Punctuated equilibriumPunctuated equilibrium is a concept in evolution theory. It was developed to explain a feature of the fossil record: biological species appear quite suddenly and then tend to be in relative stasis for a long period, only undergoing... is a concept in evolution theory. It was developed to explain a feature of the fossil record: biological species appear quite suddenly and then tend to be in relative stasis for a long period, only undergoing...
Today the Morepath developers released Today the Morepath developers released MorepathMorepath 0.15 ( 0.15 (CHANGESCHANGES).). What is Morepath? Morepath is a Python web framework that is small, easy to learn, extensively documented, and insanely powerful.What is Morepath? Morepath is a Python web framework that is small, easy to learn, extensively documented, and insanely powerful. This release is a smaller release without big visible changes, or big hood changes. Instead it polishes a lot of stuff....This release is a smaller release without big visible changes, or big hood changes. Instead it polishes a lot of stuff....
Last week I went to the Last week I went to the React Europe conferenceReact Europe conference 2016 in Paris. It was a lot of fun and inspirational as well. I actually hadn't used React for about 6 months because I've been focusing on server-side stuff, in particular 2016 in Paris. It was a lot of fun and inspirational as well. I actually hadn't used React for about 6 months because I've been focusing on server-side stuff, in particular MorepathMorepath, but this really makes me want to go and work with it again (, but this really makes me want to go and work with it again (
Today we released Today we released MorepathMorepath 0.14 ( 0.14 (CHANGESCHANGES).). What is Morepath? Morepath is a Python web framework that is powerful and flexible due to its advanced configuration engine (What is Morepath? Morepath is a Python web framework that is powerful and flexible due to its advanced configuration engine (DectateDectate) and an advanced dispatch system () and an advanced dispatch system (
We just released We just released MorepathMorepath 0.13 ( 0.13 (changeschanges). Morepath is your friendly neighborhood Python web framework with super powers, and with 0.13 it has gained a significant ). Morepath is your friendly neighborhood Python web framework with super powers, and with 0.13 it has gained a significant power upgradepower upgrade.. This is the first Morepath release of 2016 and the biggest Morepath release in a while. The major change in Morepath 0.13...This is the first Morepath release of 2016 and the biggest Morepath release in a while. The major change in Morepath 0.13...
Dectate is a new Python library. It's geared towards framework authors. It's a meta-framework: a framework you can use to easily construct robust and powerful Python frameworks.Dectate is a new Python library. It's geared towards framework authors. It's a meta-framework: a framework you can use to easily construct robust and powerful Python frameworks. So what's a framework anyway? A So what's a framework anyway? A frameworkframework is a system that you supply with code and then it calls it at the appropriate times. is a system that you supply with code and then it calls it at the appropriate times. Don't call us, we'll call you!Don't call us, we'll call you! What does this look like in practice? Let's imagine you're building a web framework, and you want the...What does this look like in practice? Let's imagine you're building a web framework, and you want the...
Introduction Introduction A few years ago I wrote an A few years ago I wrote an article on how I was overwhelmed by JavaScript dependenciesarticle on how I was overwhelmed by JavaScript dependencies. In it I explored the difficulty of managing dependencies in a JavaScript project: both internal modules as.... In it I explored the difficulty of managing dependencies in a JavaScript project: both internal modules as...
Introduction Introduction It's been interesting how the prefix It's been interesting how the prefix cybercyber has drifted in meaning over the years. Let's explore together. has drifted in meaning over the years. Let's explore together. I wrote two thirds of this article and then I discovered Annalee Newitz was way ahead of me and I wrote two thirds of this article and then I discovered Annalee Newitz was way ahead of me and
Introduction Introduction ReselectReselect is a library with a very brief history that until a few days ago was sitting on my personal Github account. What does it do? It's not very relevant for this blog post, as I'm more interested in its history as an open source project. But briefly: it's a... is a library with a very brief history that until a few days ago was sitting on my personal Github account. What does it do? It's not very relevant for this blog post, as I'm more interested in its history as an open source project. But briefly: it's a...
GraphQL is an interesting technology originating at Facebook. It is a query language that lets you get JSON results from a server. It's GraphQL is an interesting technology originating at Facebook. It is a query language that lets you get JSON results from a server. It's notnot a database system but can work with any kind of backend structure. It tries to solve the same issues traditionally solved by HTTP "REST-ish" APIs. a database system but can work with any kind of backend structure. It tries to solve the same issues traditionally solved by HTTP "REST-ish" APIs. Some problems... Some problems...
Last week I visited the React Europe conference in Paris; it was the first such event in Europe and the second React conference in the world. Paris like much of the rest of western Europe during this early July was insanely hot. The airconditioning at the conference location had trouble keeping up, and bars and restaurants were more like saunas. Nonetheless, much was learned and much fun was had. I'm glad I went!Last week I visited the React Europe conference in Paris; it was the first such event in Europe and the second React conference in the world. Paris like much of the rest of western Europe during this early July was insanely hot. The airconditioning at the conference location had trouble keeping up, and bars and restaurants were more like saunas. Nonetheless, much was learned and much fun was had. I'm glad I went! React, in case you're not aware, is a frontend...React, in case you're not aware, is a frontend...
Introduction Introduction This post is the first in what I hope will be a series on neat things you can do with This post is the first in what I hope will be a series on neat things you can do with MorepathMorepath. Morepath is a Python web micro framework with some very interesting capabilities. What we'll look at today is what you can do with Morepath's link generation in a.... Morepath is a Python web micro framework with some very interesting capabilities. What we'll look at today is what you can do with Morepath's link generation in a...
Introduction Introduction There is a new trend in open source that I'm not sure I like very much: big companies announce that they are There is a new trend in open source that I'm not sure I like very much: big companies announce that they are goinggoing to open source something, but the release is nowhere in sight yet. Announcing something invites feedback, especially if it's announced as open source. When the software in question is available already as closed... to open source something, but the release is nowhere in sight yet. Announcing something invites feedback, especially if it's announced as open source. When the software in question is available already as closed...
Introduction Introduction I just released Morepath 0.10 (I just released Morepath 0.10 (CHANGESCHANGES)! )! MorepathMorepath is a modern Python web framework that is a modern Python web framework that combines power with simplicity of usecombines power with simplicity of use. Morepath 0.10's biggest new.... Morepath 0.10's biggest new...
Happy new year everybody! Last year we've made a Happy new year everybody! Last year we've made a lotlot of progress on the Morepath web framework for Python. It will go quite a lot further in 2015 as well. Here are 10 reasons why you should check out Morepath this year: of progress on the Morepath web framework for Python. It will go quite a lot further in 2015 as well. Here are 10 reasons why you should check out Morepath this year: Knows about HTTP status codesKnows about HTTP status codes. When you write a "Hello World" application it does not matter that there are other status codes besides . When you write a "Hello World" application it does not matter that there are other status codes besides 200 OK200 OK, but in real world..., but in real world...
I've spent a bit of time writing the somewhat grandiosely titled I've spent a bit of time writing the somewhat grandiosely titled A Review of the WebA Review of the Web, and I think it's a neat addition to the documentation of the , and I think it's a neat addition to the documentation of the MorepathMorepath web framework. web framework. It attempts to do two things:It attempts to do two things: Help those developers who aren't as familiar yet with the details of web technology to get a handle on...Help those developers who aren't as familiar yet with the details of web technology to get a handle on...
Yesterday I released Yesterday I released MorepathMorepath 0.9 ( 0.9 (CHANGESCHANGES)!)! What is Morepath? Morepath is a Python web framework. It tries to be especially good at implementing modern, RESTful backends. It is very good at creating hyperlinks. It is easy to use, but still lets you write flexible, maintainable and reusable code. Morepath is very...What is Morepath? Morepath is a Python web framework. It tries to be especially good at implementing modern, RESTful backends. It is very good at creating hyperlinks. It is easy to use, but still lets you write flexible, maintainable and reusable code. Morepath is very...
Today I released Morepath 0.8 (Today I released Morepath 0.8 (CHANGESCHANGES). In this release Morepath has become faster, simpler and more powerful at the same time. I like it when I can do all three in a release!). In this release Morepath has become faster, simpler and more powerful at the same time. I like it when I can do all three in a release! I'll get faster and simpler out of the way fast, so I can go into the "more powerful", which is what Morepath is all about.I'll get faster and simpler out of the way fast, so I can go into the "more powerful", which is what Morepath is all about.
I've just released I've just released MorepathMorepath 0.7! 0.7! What is Morepath? Morepath is a Python web framework. It tries to be especially good at implementing modern, RESTful backends. It is very good at creating hyperlinks. It is easy to use, but still lets you write flexible, maintainable and reusable code. Morepath is very extensively documented.What is Morepath? Morepath is a Python web framework. It tries to be especially good at implementing modern, RESTful backends. It is very good at creating hyperlinks. It is easy to use, but still lets you write flexible, maintainable and reusable code. Morepath is very extensively documented. So what's new in Morepath 0.7? The So what's new in Morepath 0.7? The
Assuming deceit Assuming deceit People frequently conclude inaccurately that someone who criticizes their community in some way is not only wrong, but also actively malicious; a liar, a manipulator, a troll. This faulty conclusion can lead to a lot of trouble.People frequently conclude inaccurately that someone who criticizes their community in some way is not only wrong, but also actively malicious; a liar, a manipulator, a troll. This faulty conclusion can lead to a lot of trouble. I ran into such reasoning...I ran into such reasoning...
In software development we deal with In software development we deal with boundariesboundaries between systems. between systems. Examples of boundaries are:Examples of boundaries are: Your application code and a database.Your application code and a database. Your application code and the file system.Your application code and the file system. A web server and your server-side application code.A web server and your server-side application code. A client-side application and the browser DOM.A client-side application and the browser DOM. A client-side application in JavaScript and the web server.A client-side application in JavaScript and the web server. It's important to recognize these boundaries. You want to do...It's important to recognize these boundaries. You want to do...
What's What's MorepathMorepath? Morepath is your friendly neighborhood web framework with super powers. It lets you easily create links between resources, and offers a range of mechanisms that allow you to better organize and reuse code. Morepath is geared towards this modern age of the web where more and more UI logic is moving into JavaScript, into the browser -- it does this by being great at creating RESTful...? Morepath is your friendly neighborhood web framework with super powers. It lets you easily create links between resources, and offers a range of mechanisms that allow you to better organize and reuse code. Morepath is geared towards this modern age of the web where more and more UI logic is moving into JavaScript, into the browser -- it does this by being great at creating RESTful...
What's What's BowerStaticBowerStatic? It's a little
WSGI framework application for Python that is easy to plug into any WSGI
web framework. What you can do with it is declare in Python code that
you want some Bower package included in the web page. It knows about
dependencies and such. Like ? It's a little
WSGI framework application for Python that is easy to plug into any WSGI
web framework. What you can do with it is declare in Python code that
you want some Bower package included in the web page. It knows about
dependencies and such. Like FanstaticFanstatic but for
but for
BowerBower..
I've just released a whole slew things of things, the most important is I've just released a whole slew things of things, the most important is MorepathMorepath 0.5, your friendly neighborhood Python web framework with 0.5, your friendly neighborhood Python web framework with superpowerssuperpowers!! What's... What's...
Recently Recently new HTTP 1.1 RFCsnew HTTP 1.1 RFCs were published that obsolete the old HTTP 1.1 RFCs. They are extensively rewritten. were published that obsolete the old HTTP 1.1 RFCs. They are extensively rewritten. Unfortunately the WSGI PEP 3333 refers to something only made explicit in the Unfortunately the WSGI PEP 3333 refers to something only made explicit in the oldold version of the RFCs, but which is much harder to find in the new versions of the RFCs. I thought I'd leave a report of my investigations here so that others who may run into this in... version of the RFCs, but which is much harder to find in the new versions of the RFCs. I thought I'd leave a report of my investigations here so that others who may run into this in...
It's pretty common for an open source project to have a "contrib" directory as part of its project structure. This contains useful code donated to the project by outsiders. It seems innocuous. A contrib section, why not?It's pretty common for an open source project to have a "contrib" directory as part of its project structure. This contains useful code donated to the project by outsiders. It seems innocuous. A contrib section, why not? I don't like contribI don't like contrib. A contrib directory gives the signal that "yes, we carry this source code around, but it's not . A contrib directory gives the signal that "yes, we carry this source code around, but it's not reallyreally part of our project". What does that mean? Why is it even part of your project at all then? Why... part of our project". What does that mean? Why is it even part of your project at all then? Why...
Here are some stories on how you can go wrong with naming, especially in open source software.Here are some stories on how you can go wrong with naming, especially in open source software. Easy Easy Don't use the name "easy" or "simple" in your software as it won't be and people will make fun of it.Don't use the name "easy" or "simple" in your software as it won't be and people will make fun of it.
I had a fun time at EuroPython 2014 in Berlin last week. It was a very well organized conference and I enjoyed meeting old friends again as well as meeting new people. Before I went I was a bit worried with the amount of attendees it'd feel too massive; I had that experience at a PyCon in the US a few years ago. But I was pleasantly surprised it didn't -- it felt like a smaller conference, and I liked it.I had a fun time at EuroPython 2014 in Berlin last week. It was a very well organized conference and I enjoyed meeting old friends again as well as meeting new people. Before I went I was a bit worried with the amount of attendees it'd feel too massive; I had that experience at a PyCon in the US a few years ago. But I was pleasantly surprised it didn't -- it felt like a smaller conference, and I liked it. Another positive thing that stood out was a larger...Another positive thing that stood out was a larger...
I just released I just released Morepath 0.4.1Morepath 0.4.1. This fixes a regression with Python 3 compatibility and has a few other minor tweaks to bring test coverage back up to 100%.. This fixes a regression with Python 3 compatibility and has a few other minor tweaks to bring test coverage back up to 100%. I had broken Python 3 support in Morepath 0.4. I'm still not in the habit of running 'tox' before a release, so I find out about these problems too late.I had broken Python 3 support in Morepath 0.4. I'm still not in the habit of running 'tox' before a release, so I find out about these problems too late. I'll go into a bit of detail about this issue, as it's a mildly amusing example...I'll go into a bit of detail about this issue, as it's a mildly amusing example...
I've just released Morepath 0.4!I've just released Morepath 0.4! MorepathMorepath 0.4 is a Python web framework that's small ("micro") and packs a lot of power. There are a lot of facilities for 0.4 is a Python web framework that's small ("micro") and packs a lot of power. There are a lot of facilities for application reuseapplication reuse. And as opposed to most web frameworks, it actually has . And as opposed to most web frameworks, it actually has
I've been working on something new these last few weeks that I'd like to share with you: BowerStatic.I've been working on something new these last few weeks that I'd like to share with you: BowerStatic. BowerStatic is Python WSGI framework for easily serving and including components that you manage by using BowerStatic is Python WSGI framework for easily serving and including components that you manage by using BowerBower.. Let's unpack that:Let's unpack that: BowerStatic serves static resources (JS, CSS, etc) for you. It makes sure those resources are cached when they can be, and that the cache is automatically busted...BowerStatic serves static resources (JS, CSS, etc) for you. It makes sure those resources are cached when they can be, and that the cache is automatically busted...
Today I've released Morepath 0.3!Today I've released Morepath 0.3! Morepath is a Python web framework that lets you write simple, flexible code for the modern web, and makes linking to things as easy as it should be.Morepath is a Python web framework that lets you write simple, flexible code for the modern web, and makes linking to things as easy as it should be. New in Morepath 0.3 is the ability to write New in Morepath 0.3 is the ability to write pathpath directives that directives that absorbabsorb the rest of the path. This is useful when you want to integrate a web server with a... the rest of the path. This is useful when you want to integrate a web server with a...
I've just released I've just released MorepathMorepath 0.2! Morepath is your friendly neighborhood Python web microframework with super powers. 0.2! Morepath is your friendly neighborhood Python web microframework with super powers. Major changes include:Major changes include: Python 3 support thanks to a generous contribution by Alec Munro.Python 3 support thanks to a generous contribution by Alec Munro. Documented Documented security infrastructuresecurity infrastructure.. And various smaller tweaks. You can...And various smaller tweaks. You can...
Thanks to an awesome contribution by Thanks to an awesome contribution by Alec MunroAlec Munro, , MorepathMorepath, your friendly neighborhood Python micro framework with super powers, has just gained Python 3 support!, your friendly neighborhood Python micro framework with super powers, has just gained Python 3 support! Developing something new while juggling the complexities of Python 2 and Python 3 in my head at the same time was not something I wanted to do -- I wanted to focus on my actual...Developing something new while juggling the complexities of Python 2 and Python 3 in my head at the same time was not something I wanted to do -- I wanted to focus on my actual...
Introduction Introduction Guido recently felt he needed to re-empathize that there will be no Python 2.8. The Python developers have been very clear for years that there will never be a Python 2.8.Guido recently felt he needed to re-empathize that there will be no Python 2.8. The Python developers have been very clear for years that there will never be a Python 2.8. http://legacy.python.org/dev/peps/pep-0404/http://legacy.python.org/dev/peps/pep-0404/ At the Python language...At the Python language...
I've just released I've just released MorepathMorepath 0.1! This is Morepath's first ever proper release. Hurray! If you've been waiting for a release before trying Morepath, now is the time to stop waiting! 0.1! This is Morepath's first ever proper release. Hurray! If you've been waiting for a release before trying Morepath, now is the time to stop waiting! Morepath is your friendly neighborhood Python web framework with super powers.Morepath is your friendly neighborhood Python web framework with super powers. The docs for 0.1 are here: The docs for 0.1 are here:
Yesterday I wrote Yesterday I wrote an articlean article discussing why Morepath switched from the discussing why Morepath switched from the WerkzeugWerkzeug library to the library to the WebObWebOb library. I promised a followup with some feedback on WebOb and Werkzeug, and here it is. library. I promised a followup with some feedback on WebOb and Werkzeug, and here it is. MorepathMorepath is... is...
Today I changed over Morepath to use Today I changed over Morepath to use WebObWebOb instead of instead of WerkzeugWerkzeug as its request and response implementation. as its request and response implementation. MorepathMorepath is your friendly neighborhood Python web micro framework with super powers. is your friendly neighborhood Python web micro framework with super powers. In this post I'd like to explain what lead...In this post I'd like to explain what lead...
I felt like I was I felt like I was racingracing on the Morepath today. My goal was to see how to integrate Morepath with a database. To make this goal practical, I looked into integrating Morepath with SQLAlchemy. To go faster, I borrowed ideas and code liberally from Pyramid. on the Morepath today. My goal was to see how to integrate Morepath with a database. To make this goal practical, I looked into integrating Morepath with SQLAlchemy. To go faster, I borrowed ideas and code liberally from Pyramid. Tweens Tweens This morning I borrowed the idea of This morning I borrowed the idea of
Things fall apart; the centre cannot holdThings fall apart; the centre cannot hold ((The Second ComingThe Second Coming by Yeats) by Yeats) Last timeLast time I talked about how I went back to the center of the Zope project. Over the course of the year following, we managed to refactor the Zope Toolkit, clean up the dependency structure, and we could... I talked about how I went back to the center of the Zope project. Over the course of the year following, we managed to refactor the Zope Toolkit, clean up the dependency structure, and we could...
I'm slowly heading to a first release of the Morepath web framework, but right now I can still change anything without breaking any significant code. So I took the opportunity to do so.I'm slowly heading to a first release of the Morepath web framework, but right now I can still change anything without breaking any significant code. So I took the opportunity to do so. What's Morepath? Morepath is your friendly neighborhood web framework with superpowers. Read more What's Morepath? Morepath is your friendly neighborhood web framework with superpowers. Read more herehere.. These changes are in fact less big than some refactorings I do to Morepath...These changes are in fact less big than some refactorings I do to Morepath...
I've been hard at work on I've been hard at work on MorepathMorepath recently, and I thought I'd give an update. Morepath is your friendly neighborhood Python web framework with super powers. recently, and I thought I'd give an update. Morepath is your friendly neighborhood Python web framework with super powers. Models and linking Models and linking URL parameters are now a first-class citizen in Morepath model-link generation, meaning that...URL parameters are now a first-class citizen in Morepath model-link generation, meaning that...
Another day, another piece of Morepath documentation. Morepath is your friendly neighborhood Python microframework with super powers.Another day, another piece of Morepath documentation. Morepath is your friendly neighborhood Python microframework with super powers. Morepath lets you write RESTful web services using the same tools you'd use to write any web applications, not with a separate framework. That's how it should be: traditional multi-page web applications tend to be eminently RESTful, after all. I think it's a good idea to make what's behind your modern rich client-side applications...Morepath lets you write RESTful web services using the same tools you'd use to write any web applications, not with a separate framework. That's how it should be: traditional multi-page web applications tend to be eminently RESTful, after all. I think it's a good idea to make what's behind your modern rich client-side applications...
In this post I'd like to discuss the security infrastructure of the
In this post I'd like to discuss the security infrastructure of the
MorepathMorepath web framework. I hope that I
can showcase some of the interesting features of Morepath security,
generate a bit of feedback for me, and also serve as the start of
documentation on this topic. Finally, it's also useful for me to get an
overview of where gaps in my implementation still exist. web framework. I hope that I
can showcase some of the interesting features of Morepath security,
generate a bit of feedback for me, and also serve as the start of
documentation on this topic. Finally, it's also useful for me to get an
overview of where gaps in my implementation still exist.
Fellow Pythoneers,Fellow Pythoneers, I've started an informal channel "#python2.8" on freenode IRC. It's to discuss the potential for a Python 2.8 version -- to see whether there is interest in it, what it could contain, how it could facilitate porting to Python 3, who would work on it, etc. If you are interested in constructive discussion about a Python 2.8, please join.I've started an informal channel "#python2.8" on freenode IRC. It's to discuss the potential for a Python 2.8 version -- to see whether there is interest in it, what it could contain, how it could facilitate porting to Python 3, who would work on it, etc. If you are interested in constructive discussion about a Python 2.8, please join. I realize that if there is actual code created, and if it's not under the umbrella of the PSF, it...I realize that if there is actual code created, and if it's not under the umbrella of the PSF, it...
Recently there have been some discussions about Python 3 adoption. Adoption rates aren't great. There are a number of theories on why Python 3 is not adopted more and what should be done about it. I'll expand a bit on the Recently there have been some discussions about Python 3 adoption. Adoption rates aren't great. There are a number of theories on why Python 3 is not adopted more and what should be done about it. I'll expand a bit on the analysis by Ian Bickinganalysis by Ian Bicking and add my own. I'll offer a few suggestions on what might help. and add my own. I'll offer a few suggestions on what might help.
Introduction Introduction I'm happy to see the Python community starting the Python 3 conversation again. Alex Gaynor shares his I'm happy to see the Python community starting the Python 3 conversation again. Alex Gaynor shares his analysisanalysis.. I agree with many of his points and am glad he was brave enough to take up this difficult topic in public.I agree with many of his points and am glad he was brave enough to take up this difficult topic in public. Update: I see...Update: I see...
By Martijn FaassenBy Martijn Faassen • • 2013-12-192013-12-19 • • Tags: Tags: morepathmorepath, , pythonpython, , planetpythonplanetpython For a while now I've been working on documenting Morepath, the Python web...For a while now I've been working on documenting Morepath, the Python web...
Grok the web framework was simple enough on its surface, but like an iceberg, beneath its simple surface lurked a vast codebase. This made it harder to understand Grok. We also were depending on a lot of code Grok was in fact Grok the web framework was simple enough on its surface, but like an iceberg, beneath its simple surface lurked a vast codebase. This made it harder to understand Grok. We also were depending on a lot of code Grok was in fact not usingnot using. That unused code was still being loaded, distracting, and even at one point interacting with Grok to generate a security bug.. That unused code was still being loaded, distracting, and even at one point interacting with Grok to generate a security bug. To simplify Grok we had to lose that code. This meant we couldn't go around the center of the...To simplify Grok we had to lose that code. This meant we couldn't go around the center of the...
I'm working on a new Python web microframework called Morepath, as I've mentioned I'm working on a new Python web microframework called Morepath, as I've mentioned beforebefore. Here's the . Here's the codecode and here's a and here's a draft quickstartdraft quickstart. Morepath is a microframework with a difference: it's small and easy to learn like the.... Morepath is a microframework with a difference: it's small and easy to learn like the...
Towards the First Grok Sprint Towards the First Grok Sprint I got the idea for Grok in the summer of 2006. In the fall I still hadn't done anything yet about it. Then I gave I got the idea for Grok in the summer of 2006. In the fall I still hadn't done anything yet about it. Then I gave a talk at a German Zope User Group (DZUG) conferencea talk at a German Zope User Group (DZUG) conference (the video of that now appears to have... (the video of that now appears to have...
It's been a month since I posted an entry in this ongoing series, but I got positive feedback and the story is not over yet, so here's a new entry! I hope you enjoy it!It's been a month since I posted an entry in this ongoing series, but I got positive feedback and the story is not over yet, so here's a new entry! I hope you enjoy it! Lost at CERN Lost at CERN In the summer of 2006 I went to the EuroPython conference, which that year was held in CERN, Switzerland. There was to be a Zope sprint ahead of the conference, so I came a...In the summer of 2006 I went to the EuroPython conference, which that year was held in CERN, Switzerland. There was to be a Zope sprint ahead of the conference, so I came a...
Introduction Introduction I can't sleep because some weird Twitter interaction I had earlier. I shouldn't let it bother me, but it did. I received a retweet from someone I didn't know, saying: "Linux doesn't work. There. I said it."I can't sleep because some weird Twitter interaction I had earlier. I shouldn't let it bother me, but it did. I received a retweet from someone I didn't know, saying: "Linux doesn't work. There. I said it." There was a link to a There was a link to a
Introduction Introduction For a while now I've been working on Morepath. I thought I'd say a bit about it here.For a while now I've been working on Morepath. I thought I'd say a bit about it here. Morepath is a Python web micro-framework with super powers. It looks much like your average Python micro-framework, but it packs some seriously power beneath the hood.Morepath is a Python web micro-framework with super powers. It looks much like your average Python micro-framework, but it packs some seriously power beneath the hood.
Using the New Zope Using the New Zope In 2004 the new Zope had started make it back into the old Zope through the Five project. In 2005 I also had the opportunity to use the new Zope in its pure, unadulterated form in a new project.In 2004 the new Zope had started make it back into the old Zope through the Five project. In 2005 I also had the opportunity to use the new Zope in its pure, unadulterated form in a new project. The overall experience of coding in the promised land of the new Zope was mixed. On the one hand, if...The overall experience of coding in the promised land of the new Zope was mixed. On the one hand, if...
A month ago I first A month ago I first announcedannounced the the RegReg library for Python. After posting it I got a comment asking why I didn't just use library for Python. After posting it I got a comment asking why I didn't just use simplegenericsimplegeneric or or PEP 443PEP 443? One important reason...? One important reason...
Introduction Introduction I hope to have shown that Zope in 1998 was massively creative: traversal based object publishing, a web UI, a pluggable architecture, a NoSQL object database and acquisition were all in the original Zope. When Zope renewed itself in the early 2000s we added a component system, an explicit configuration system, and many other...I hope to have shown that Zope in 1998 was massively creative: traversal based object publishing, a web UI, a pluggable architecture, a NoSQL object database and acquisition were all in the original Zope. When Zope renewed itself in the early 2000s we added a component system, an explicit configuration system, and many other...
Introduction Introduction The Zope community in late 2001 had been around for a few years already, almost an eternity in web time back then. Still, we weren't afraid to do bold new things. Perhaps too bold, as we'll see.The Zope community in late 2001 had been around for a few years already, almost an eternity in web time back then. Still, we weren't afraid to do bold new things. Perhaps too bold, as we'll see. Zope Rewrite Zope Rewrite We...We...
Introduction Introduction A final early Zope innovation that I want to talk about is object publishing. Object publishing is one of those ideas that seemed weird at the time. In fact, in its execution Zope would still be considered weird by many today. But in an important way the idea of publishing code on URLs is now absolutely the norm.A final early Zope innovation that I want to talk about is object publishing. Object publishing is one of those ideas that seemed weird at the time. In fact, in its execution Zope would still be considered weird by many today. But in an important way the idea of publishing code on URLs is now absolutely the norm.
Besides the use of Python, what were some of the other weirdnesses of early Zope?Besides the use of Python, what were some of the other weirdnesses of early Zope? Web UI Web UI Zope featured a web-based user interface, which was rare thing at the time. The user interface was a hybrid between a CMS and a development environment. Using the web interface, people were able to construct and configure applications using HTML templates,...Zope featured a web-based user interface, which was rare thing at the time. The user interface was a hybrid between a CMS and a development environment. Using the web interface, people were able to construct and configure applications using HTML templates,...
Zope at its birth in 1998 was neither a content management system nor a web framework. Zope was born too early; before we understood either very well.Zope at its birth in 1998 was neither a content management system nor a web framework. Zope was born too early; before we understood either very well. Zope was like a futuristic space alien from another dimension. In many ways it was advanced far beyond its time. It was Zope was like a futuristic space alien from another dimension. In many ways it was advanced far beyond its time. It was weirdweird. Some of its weird ideas didn't work out, but there are also ideas in there that are worthy of further consideration even today. Some of its innovations were weird at the time but.... Some of its weird ideas didn't work out, but there are also ideas in there that are worthy of further consideration even today. Some of its innovations were weird at the time but...
Last week I gave a Last week I gave a keynote speech at PyCon DEkeynote speech at PyCon DE. It was about a number of topics, too many topics, in fact (I went over my allotted time, something I regret). One topic was described by a friend as me "coming out of the closet" about my exit from Zope.. It was about a number of topics, too many topics, in fact (I went over my allotted time, something I regret). One topic was described by a friend as me "coming out of the closet" about my exit from Zope. So let's come out of the closet on my blog too. A few years ago, I stopped my involvement with Zope. I gave up hope about Zope...So let's come out of the closet on my blog too. A few years ago, I stopped my involvement with Zope. I gave up hope about Zope...
Reg is a new Python library for registering and looking up objects. It provides clever registries to let you build extensible applications, libraries and frameworks.Reg is a new Python library for registering and looking up objects. It provides clever registries to let you build extensible applications, libraries and frameworks. Why should you want to use Reg at all? The best way to find out is to read the Why should you want to use Reg at all? The best way to find out is to read the Reg docsReg docs.. The documentation is a work in progress, and especially API documentation is still lacking (read the The documentation is a work in progress, and especially API documentation is still lacking (read the interfaces.pyinterfaces.py module... module...
Yesterday I returned from JSConf EU in Berlin. I enjoyed the conference and I'll share some of my impressions here. It's not going to be a complete report; I met a lot of people and had a lot of conversations.Yesterday I returned from JSConf EU in Berlin. I enjoyed the conference and I'll share some of my impressions here. It's not going to be a complete report; I met a lot of people and had a lot of conversations. This was my first JSConf. I've been to a lot of Python conferences in the past. I was a bit nervous as for the first time in years I was going to a conference where I didn't really know anybody, but that is also an important reason This was my first JSConf. I've been to a lot of Python conferences in the past. I was a bit nervous as for the first time in years I was going to a conference where I didn't really know anybody, but that is also an important reason whywhy I was going... I was going...
I'm proud to announce the release of Obviel 1.0:I'm proud to announce the release of Obviel 1.0: http://www.obviel.org/en/1.0/http://www.obviel.org/en/1.0/ Obviel is a client-side web framework that supports powerful UI composition based on an easy to learn core. On top of that Obviel adds a lot of features, such as templating, i18n support, form generation and validation, and routing. Obviel stays close to HTML but lets you build sophisticated components when you need...Obviel is a client-side web framework that supports powerful UI composition based on an easy to learn core. On top of that Obviel adds a lot of features, such as templating, i18n support, form generation and validation, and routing. Obviel stays close to HTML but lets you build sophisticated components when you need...
Introduction Introduction [UPDATE: This post has [UPDATE: This post has new 2015 followupnew 2015 followup]] Recently I looked into JavaScript dependency management and wrote a long post about it where I was Recently I looked into JavaScript dependency management and wrote a long post about it where I was
I've just released I've just released ObvielObviel 1.0rc1. This, or something very close to it, will be turned into 1.0 final. 1.0rc1. This, or something very close to it, will be turned into 1.0 final. What's new in Obviel 1.0rc1?What's new in Obviel 1.0rc1? upgraded and tested with newer version of jQuery (1.9.x)upgraded and tested with newer version of jQuery (1.9.x) new Obviel Forms widget, passwordFieldnew Obviel Forms widget, passwordField a few fixes and improvements in Obviel Templatea few fixes and improvements in Obviel Template a few fixes surrounding event handlinga few fixes surrounding event handling See the See the
Introduction Introduction [UPDATE: This post has [UPDATE: This post has new 2015 followupnew 2015 followup]] This is about managing dependencies in a well-tested client-side JavaScript codebase, how I got overwhelmed, and how I automated the pieces to make...This is about managing dependencies in a well-tested client-side JavaScript codebase, how I got overwhelmed, and how I automated the pieces to make...
ObvielObviel is the client side web framework I've been hacking on for the past few years. It has among many other things a client-side template language called is the client side web framework I've been hacking on for the past few years. It has among many other things a client-side template language called Obviel TemplateObviel Template. Obviel Template has a bunch of nice features such as . Obviel Template has a bunch of nice features such as i18n supporti18n support, about which I'll write more..., about which I'll write more...
I've just released Obviel 1.0b6!I've just released Obviel 1.0b6! There are backwards incompatible changes to Obviel Template in this release. I figured now was the time to do so, as it's not widely adopted yet. The general pattern is to use imperative verbs where possible for directives (though There are backwards incompatible changes to Obviel Template in this release. I figured now was the time to do so, as it's not widely adopted yet. The general pattern is to use imperative verbs where possible for directives (though data-ondata-on is an exception): is an exception): data-eachdata-each was renamed to was renamed to data-repeatdata-repeat and and @each@each to to @repeat@repeat.. data-viewdata-view becomes... becomes...
I'm looking for a project to inspire me! I'm a creative developer with 15 years experience doing Python and the web. So much experience doing web applications does not mean I'm stuck in the past; I'm an accomplished client-side JavaScript developer too (who created a I'm looking for a project to inspire me! I'm a creative developer with 15 years experience doing Python and the web. So much experience doing web applications does not mean I'm stuck in the past; I'm an accomplished client-side JavaScript developer too (who created a client-side web frameworkclient-side web framework).). You can check out You can check out http://startifact.comhttp://startifact.com for an overview of some of... for an overview of some of...
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
Start with jQuery Start with jQuery Obviel's core principle is pretty simple if you know jQuery.Obviel's core principle is pretty simple if you know jQuery. With jQuery, you can select one or more elements like with a selector:With jQuery, you can select one or more elements like with a selector: var el = $('#foo') var el = $('#foo') You get a list of wrapped DOM elements. You can do things with these:You get a list of wrapped DOM elements. You can do things with these: el.text(); // get the text...el.text(); // get the text...
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
Introduction Introduction Reinout wrote Reinout wrote a blog posta blog post about the client side and what it means for server-side web development. Lots of it is very interesting to me, so I'm going to give some feedback here. about the client side and what it means for server-side web development. Lots of it is very interesting to me, so I'm going to give some feedback here. One of the central questions Reinout covers is...One of the central questions Reinout covers is...
I'm asked sometimes how I'm asked sometimes how ObvielObviel compares to other client side web frameworks. This compares to other client side web frameworks. This evaluationevaluation of JavaScript MVC frameworks provides a few useful points to consider and gives a good opportunity for me to highlight some features of Obviel. of JavaScript MVC frameworks provides a few useful points to consider and gives a good opportunity for me to highlight some features of Obviel. I think Obviel comes out pretty nicely in this particular set of criteria,...I think Obviel comes out pretty nicely in this particular set of criteria,...
part 1part 1
part 2part 2
part 3part 3
part 4part 4
part 5part 5
My blog used to use the venerable My blog used to use the venerable newsbruisernewsbruiser system. It worked, and has a nice web UI, but looked ugly. Now I could've fixed that, but since I wanted to change my blog workflow anyway to something filesytem and version control based, I've switched to a static blog generator instead: system. It worked, and has a nice web UI, but looked ugly. Now I could've fixed that, but since I wanted to change my blog workflow anyway to something filesytem and version control based, I've switched to a static blog generator instead: NikolaNikola. Thank you newsbruiser, you did well for me!. Thank you newsbruiser, you did well for me! This was...This was...
Introduction Introduction Dear Django, and any human beings interested in what I have to say too... This blog post is ostensibly about Python packaging. It's responding to Dear Django, and any human beings interested in what I have to say too... This blog post is ostensibly about Python packaging. It's responding to Tarek's postTarek's post.. But I'm actually currently not that...But I'm actually currently not that...
Since the last release of Obviel 1.0b2, I've been plugging away at creating a new version. This version has a massive list of Since the last release of Obviel 1.0b2, I've been plugging away at creating a new version. This version has a massive list of changeschanges. Some highlights:. Some highlights: a much nicer a much nicer demo appdemo app, the inevitable todo list. This is a demo along the lines of the TodoMVC project. I haven't..., the inevitable todo list. This is a demo along the lines of the TodoMVC project. I haven't...
It's been quiet around It's been quiet around ObvielObviel, the client-side web framework that I've been working on. That isn't because there wasn't any activity. The opposite is the case: I've just released Obviel 1.0b with a ton of new goodies. And when I mean a ton I do mean a ton:, the client-side web framework that I've been working on. That isn't because there wasn't any activity. The opposite is the case: I've just released Obviel 1.0b with a ton of new goodies. And when I mean a ton I do mean a ton: a whole new a whole new template languagetemplate language called called Obviel TemplateObviel Template that... that...
It's probably something everything has experienced in one way or another, but I now know a little what Cassandra felt like. No, not the It's probably something everything has experienced in one way or another, but I now know a little what Cassandra felt like. No, not the Cassandra databaseCassandra database but the original but the original CassandraCassandra of Troy. Recently, of Troy. Recently, Aaron SwartzAaron Swartz posted posted
Armin Ronacher bravely shares his Armin Ronacher bravely shares his thoughts on Python 3thoughts on Python 3.. He also says: "Can we reopen the option of doing a Python 2.8 if it makes porting easier?"He also says: "Can we reopen the option of doing a Python 2.8 if it makes porting easier?" A big +1 from me. Declaring that a Python 2.8 is never going to happen is just bizarre from my perspective. What is this supposed to accomplish? Encourage people to port code to Python 3? And if so, is this really the right way...A big +1 from me. Declaring that a Python 2.8 is never going to happen is just bizarre from my perspective. What is this supposed to accomplish? Encourage people to port code to Python 3? And if so, is this really the right way...
Back in 2003 I found myself at a sprint (a hackaton) to help build a web framework. But that's not what I'm talking about right now.Back in 2003 I found myself at a sprint (a hackaton) to help build a web framework. But that's not what I'm talking about right now. For some reason I was messing around with JavaScript. This was before JavaScript was cool. Let's give an impression of this era.For some reason I was messing around with JavaScript. This was before JavaScript was cool. Let's give an impression of this era. JavaScript was this abomination of a language used only by front-end designers. Horrible code was written in it. The term AJAX hadn't been coined yet - that was years into the future. We didn't...JavaScript was this abomination of a language used only by front-end designers. Horrible code was written in it. The term AJAX hadn't been coined yet - that was years into the future. We didn't...
Armin Ronacher just wrote an Armin Ronacher just wrote an interesting blog postinteresting blog post.. ObvielObviel is a JavaScript based glue toolkit that lets you assemble web applications on the client side. It integrates with client-side template languages; by default, Obviel works with is a JavaScript based glue toolkit that lets you assemble web applications on the client side. It integrates with client-side template languages; by default, Obviel works with
Introduction Introduction This document is an introduction to Obviel from the perspective of how it was developed. For those impatient with history, you can just go to This document is an introduction to Obviel from the perspective of how it was developed. For those impatient with history, you can just go to http://www.obviel.orghttp://www.obviel.org and read the documentation there, however. and read the documentation there, however.
Recently I have seen a sentiment espoused by some people in the Python web community that WSGI has failed to live up to one of this promises: bringing Python web frameworks closer together.Recently I have seen a sentiment espoused by some people in the Python web community that WSGI has failed to live up to one of this promises: bringing Python web frameworks closer together. Let's look at history and see whether this is true.Let's look at history and see whether this is true. Here's a snapshot of the Python web framework landscape in 2005:Here's a snapshot of the Python web framework landscape in 2005: Zope had its own way of hooking up to web servers. Several ways. FastCGI, SCGI, Apache Rewrite rules, ProxyPass.Zope had its own way of hooking up to web servers. Several ways. FastCGI, SCGI, Apache Rewrite rules, ProxyPass. Django had just...Django had just...
Over the years I gained some experience with how open source communities function. Sometimes these communities make it difficult for relative outsiders (or even insiders) to make a proposal or to share an idea.Over the years I gained some experience with how open source communities function. Sometimes these communities make it difficult for relative outsiders (or even insiders) to make a proposal or to share an idea. Recently I made a proposal on a mailing list of a project. It's a very useful project, and there are fine, smart people working on it. But here are some of the responses I got:Recently I made a proposal on a mailing list of a project. It's a very useful project, and there are fine, smart people working on it. But here are some of the responses I got: no! this is wrong! (no explanation)no! this is wrong! (no explanation) your use cases can...your use cases can...
There is a a strain of thought in the Python web development community these days that considers web frameworks a bad idea. Even beginners are sometimes told: why do you need a framework anyway? Just build your app from scratch with WSGI! Or just compose your own out of existing libraries and tools!There is a a strain of thought in the Python web development community these days that considers web frameworks a bad idea. Even beginners are sometimes told: why do you need a framework anyway? Just build your app from scratch with WSGI! Or just compose your own out of existing libraries and tools! I'm going to argue that frameworks are useful. I'm going to argue that we should normally not be telling beginners to avoid frameworks. And I'm going to argue that...I'm going to argue that frameworks are useful. I'm going to argue that we should normally not be telling beginners to avoid frameworks. And I'm going to argue that...
This is awesome. There is now a published This is awesome. There is now a published bookbook about about GrokGrok!! Thank you, Carlos, very much, for writing this book. That was a lot of work!Thank you, Carlos, very much, for writing this book. That was a lot of work! Why would you, Python developer, be interested in Grok? Why not learn about one of the myriad other Python web frameworks instead?...Why would you, Python developer, be interested in Grok? Why not learn about one of the myriad other Python web frameworks instead?...
BFG 1.2 offers BFG 1.2 offers imperative configurationimperative configuration: doing configuration not in ZCML but in Python. The declarative configuration system is built on top of this. This is an interesting approach that has some merit.: doing configuration not in ZCML but in Python. The declarative configuration system is built on top of this. This is an interesting approach that has some merit. It's interesting to compare this to Grok's configuration system, which also focuses on Python, not ZCML. Grok however offers a declarative configuration system in Python, not...It's interesting to compare this to Grok's configuration system, which also focuses on Python, not ZCML. Grok however offers a declarative configuration system in Python, not...
I just read an I just read an insightful article by Titus Browninsightful article by Titus Brown about the importance of communication in a team project, in the context of open source projects. It is a very good articulation of a topic I've thought about a lot myself as well. about the importance of communication in a team project, in the context of open source projects. It is a very good articulation of a topic I've thought about a lot myself as well. When helping to manage Zope's participation in the Google Summer of Code I recognized the problems that Titus is talking about. One thing I...When helping to manage Zope's participation in the Google Summer of Code I recognized the problems that Titus is talking about. One thing I...
A good open source community should have a good developer and user A good open source community should have a good developer and user support infrastructuresupport infrastructure. It should have things such as:. It should have things such as: releasesreleases that are recent enough to be useful that are recent enough to be useful up to date and helpful up to date and helpful documentationdocumentation a good a good web siteweb site a helpful and active a helpful and active mailing listmailing list automated automated teststests well maintained well maintained change...change...
Introduction Introduction Earlier this year I was at PyCon in the US. I had an interesting experience there: people were talking about the Earlier this year I was at PyCon in the US. I had an interesting experience there: people were talking about the problemproblem of packaging and distributing Python libraries. People had the impression that this was an urgent problem that hadn't been solved yet. I detected a vibe asking for the Python core developers to... of packaging and distributing Python libraries. People had the impression that this was an urgent problem that hadn't been solved yet. I detected a vibe asking for the Python core developers to...
Prompted by recent brief negative Prompted by recent brief negative pronunciationspronunciations by Malthe on the Zope Component Architecture (ZCA), I thought I'd talk a bit about what I think about it. I'm not going to go into hermeneutics here of what Malthe might mean -- others attempts at exegesis exist in the comments to that blog entry already. Instead, I'll just talk about what I think makes the ZCA useful, and why it... by Malthe on the Zope Component Architecture (ZCA), I thought I'd talk a bit about what I think about it. I'm not going to go into hermeneutics here of what Malthe might mean -- others attempts at exegesis exist in the comments to that blog entry already. Instead, I'll just talk about what I think makes the ZCA useful, and why it...
Grok 1.0 was released today! Almost exactly three years after the first
lines of code were written, and many Grok-based applications later,
we've finally released Grok 1.0.Grok 1.0 was released today! Almost exactly three years after the first
lines of code were written, and many Grok-based applications later,
we've finally released Grok 1.0.
Grok is a web framework based on the Zope Toolkit. It's based around a
powerful component architecture (zope.component) and a powerful system
for connecting these components (zope.configuration and Grok's own
Martian).Grok is a web framework based on the Zope Toolkit. It's based around a
powerful component architecture (zope.component) and a powerful system
for connecting these components (zope.configuration and Grok's own
Martian).
Here is the official release announcement:Here is the official release announcement:
Long time no blog. I've been at Pycon and EuroPython since then (which both were great experiences!). At EuroPython I gave a talk titled "Things I helped create". I've just uploaded the slides for this in the upload area of the EuroPython wiki:Long time no blog. I've been at Pycon and EuroPython since then (which both were great experiences!). At EuroPython I gave a talk titled "Things I helped create". I've just uploaded the slides for this in the upload area of the EuroPython wiki:
I decided to attend PyCon this year; there are a lot of people going
there that I'd like to meet, and a lot of people I'd like to run into
again. Oh, and there are cool talks too!I decided to attend PyCon this year; there are a lot of people going
there that I'd like to meet, and a lot of people I'd like to run into
again. Oh, and there are cool talks too!
I'll be there for the duration of the conference itself, and the first
2.5 days of the sprint.I'll be there for the duration of the conference itself, and the first
2.5 days of the sprint.
I'll be wearing many hats: my I'll be wearing many hats: my StartifactStartifact hat,
my hat,
my GrokGrok hat, my hat, my
We just had a constructive general meeting of the Zope Foundation on IRC, the first one under the new bylaws.We just had a constructive general meeting of the Zope Foundation on IRC, the first one under the new bylaws. Even though we had some issues with cleaning up our membership roster, we luckily got it all cleared up during the meeting. The election results were ratified by the membership and we are starting off with a larger more active board. As the old board, we tried to clear the way for such a board, and I hope we'll be able to continue to increase...Even though we had some issues with cleaning up our membership roster, we luckily got it all cleared up during the meeting. The election results were ratified by the membership and we are starting off with a larger more active board. As the old board, we tried to clear the way for such a board, and I hope we'll be able to continue to increase...
I'm on the board of the Zope Foundation. In fact, until thursday this week, when hopefully the new board gets seated, I'm its chairman.I'm on the board of the Zope Foundation. In fact, until thursday this week, when hopefully the new board gets seated, I'm its chairman. The old bylaws of the Zope Foundation sucked. We were burdened with them from the start; we inherited them as the board from the startup phase. We tried to work with them but they didn't work, and then we decided to go with new bylaws.The old bylaws of the Zope Foundation sucked. We were burdened with them from the start; we inherited them as the board from the startup phase. We tried to work with them but they didn't work, and then we decided to go with new bylaws. So we painstakingly work on them. We finally had a big meeting in december trying to...So we painstakingly work on them. We finally had a big meeting in december trying to...
Chris McDonough just posted a capsule criticism of the Zope project and culture to zope-dev in a discussion I started. I believe Chris and I have been "violently" agreeing on most many issues in this discussion... I thought this characterization is quite interesting and I'd like to share it with the wider world. I agree with it so much and disagree so much at the same time.Chris McDonough just posted a capsule criticism of the Zope project and culture to zope-dev in a discussion I started. I believe Chris and I have been "violently" agreeing on most many issues in this discussion... I thought this characterization is quite interesting and I'd like to share it with the wider world. I agree with it so much and disagree so much at the same time. Even though I disagreed with the decision to include underwear as a logo on a (now...Even though I disagreed with the decision to include underwear as a logo on a (now...
This week a bunch of us (myself, Christian Theune, Wolfgang Schnerring, Brandon Rhodes, Jan-Wijbrand Kolman and Sylvain Viollon) have been sprinting in my house at the "Grok Cave sprint". We've been working on cleaning up Zope 3's dependency structure, which in places is very hairy. This meant that you could often pull in one fairly innocent looking Zope 3 package and as a result pull in almost all of them. This makes it difficult to reuse packages and upgrade code....This week a bunch of us (myself, Christian Theune, Wolfgang Schnerring, Brandon Rhodes, Jan-Wijbrand Kolman and Sylvain Viollon) have been sprinting in my house at the "Grok Cave sprint". We've been working on cleaning up Zope 3's dependency structure, which in places is very hairy. This meant that you could often pull in one fairly innocent looking Zope 3 package and as a result pull in almost all of them. This makes it difficult to reuse packages and upgrade code....
I've been following with interest a number of posts that talk about creating a simple REST-based web application that persists the number of plays various songs have had. Here's the history:I've been following with interest a number of posts that talk about creating a simple REST-based web application that persists the number of plays various songs have had. Here's the history: A pure WSGI application: A pure WSGI application: http://www.eflorenzano.com/blog/post/writing-blazing-fast-infinitely-scalable-pure-wsgi/http://www.eflorenzano.com/blog/post/writing-blazing-fast-infinitely-scalable-pure-wsgi/ A easier to read but slower...A easier to read but slower...
There has been a recent discussion on how packaging of Python libraries should be done. As frequently happens, the Zope community sometimes encounters problems before many other communities do, and I think we have an example of that here.There has been a recent discussion on how packaging of Python libraries should be done. As frequently happens, the Zope community sometimes encounters problems before many other communities do, and I think we have an example of that here. James Bennett James Bennett wrotewrote:: "Please, for the love of Guido, stop using setuptools and easy_install, and use distutils and pip..."Please, for the love of Guido, stop using setuptools and easy_install, and use distutils and pip...
It seems to be a recent trend to point out things you don't like about doctests. There are It seems to be a recent trend to point out things you don't like about doctests. There are twotwo articlesarticles by Andrew (? - see update below) and by Andrew (? - see update below) and oneone by Ned Batchelder. There's... by Ned Batchelder. There's...
In In my previous blog entrymy previous blog entry I tried to make the case for Plone adopting Grok technology. I gave some background on Grok and talked about some of the pain points that I think Plone has and that Grok has been trying to tackle. My goal was to explain where Grok is coming from, and why it's a good fit for Plone. I tried to make the case for Plone adopting Grok technology. I gave some background on Grok and talked about some of the pain points that I think Plone has and that Grok has been trying to tackle. My goal was to explain where Grok is coming from, and why it's a good fit for Plone. Martin Aspeli, in a comment, wrote the...Martin Aspeli, in a comment, wrote the...
Let me start off by saying that I'm not a Plone developer. I've got a lot of experience with Zope 2 development though, and I keep an eye on the Plone community. I hope the Plone developers will not mind a relative outsider's observations and suggestions.Let me start off by saying that I'm not a Plone developer. I've got a lot of experience with Zope 2 development though, and I keep an eye on the Plone community. I hope the Plone developers will not mind a relative outsider's observations and suggestions. I understand that many of the people developing with Plone, or learning Plone, are frustrated. Now this is nothing unusual - I think fundamentally it's pretty difficult to extend and customize such...I understand that many of the people developing with Plone, or learning Plone, are frustrated. Now this is nothing unusual - I think fundamentally it's pretty difficult to extend and customize such...
Grok the codebase is 2 years old this week. Two years ago we had the first Grok sprint in Halle, Germany, at the Gocept offices. A lot has happened since then. For me personally Grok is my development workhorse now and has been since early 2007. It's something I use during development every day.Grok the codebase is 2 years old this week. Two years ago we had the first Grok sprint in Halle, Germany, at the Gocept offices. A lot has happened since then. For me personally Grok is my development workhorse now and has been since early 2007. It's something I use during development every day. Let's review some of the highlights of whave happened since Let's review some of the highlights of whave happened since last...last...
It already happened last week, but I thought I'd mention our Grok 0.14 release. It already happened last week, but I thought I'd mention our Grok 0.14 release. GrokGrok 0.14 is the first release of Grok that officially works with Python 2.5, though unofficially Grok has worked with Python 2.5 for a while on many platforms. There is already a 0.14 is the first release of Grok that officially works with Python 2.5, though unofficially Grok has worked with Python 2.5 for a while on many platforms. There is already a reportreport of Grok working with Python 2.6! of Grok working with Python 2.6! The other major change in this release is the spin-off of three...The other major change in this release is the spin-off of three...
So we've had So we've had what Django can learn from Zopewhat Django can learn from Zope, , what Zope can learn from Mozillawhat Zope can learn from Mozilla, and a few years ago already we had , and a few years ago already we had what...what...
Jasper Op de Coul and I worked on megrok.rdf during the post-europython Jasper Op de Coul and I worked on megrok.rdf during the post-europython GrokGrok sprint a few weeks ago. We had a few logistical problems concerning access to svn.zope.org, but yesterday Jasper finally managed to check in megrok.rdf: sprint a few weeks ago. We had a few logistical problems concerning access to svn.zope.org, but yesterday Jasper finally managed to check in megrok.rdf: http://svn.zope.org/megrok.rdf/trunk/http://svn.zope.org/megrok.rdf/trunk/ megrok.rdf is far from finished, and should be classified as...megrok.rdf is far from finished, and should be classified as...
This is a report on the This is a report on the GrokGrok sprint that followed EuroPython. Thanks to the EuroPython organizers for giving us the space! sprint that followed EuroPython. Thanks to the EuroPython organizers for giving us the space! At EuroPython I was thrilled to meet Laurence Rowe. Laurence is the author of zope.sqlalchemy, the low-level integration layer between Zope 3 (and therefore Grok) and SQLAlchemy's transaction machinery. Also thanks to a lot of communication with Laurence in the last few months, I was...At EuroPython I was thrilled to meet Laurence Rowe. Laurence is the author of zope.sqlalchemy, the low-level integration layer between Zope 3 (and therefore Grok) and SQLAlchemy's transaction machinery. Also thanks to a lot of communication with Laurence in the last few months, I was...
Mark Ramm-Christensen of the TurboGears project starts what looks like it will be a great Mark Ramm-Christensen of the TurboGears project starts what looks like it will be a great commit count pissing matchcommit count pissing match . I know that wasn't his intent. He just wanted to show the TurboGears project is active. But nevertheless, this kind of thing tends to get rather silly rather quickly, so we certainly can't leave Zope out! . I know that wasn't his intent. He just wanted to show the TurboGears project is active. But nevertheless, this kind of thing tends to get rather silly rather quickly, so we certainly can't leave Zope out! Amounts of commits on a...Amounts of commits on a...
Grok 0.13 was released yesterday. Grok 0.13 was released yesterday. GrokGrok, of course, is the powerful web application development framework. See the details in the release notes here:, of course, is the powerful web application development framework. See the details in the release notes here: http://grok.zope.org/project/releases/0.13/http://grok.zope.org/project/releases/0.13/ The really involved details are in the changelog here:The really involved details are in the changelog here:
The ZODB is a powerful object database for Python objects. It's very mature - it's been around for more than a decade. It is transactional, has advanced features like clustering (ZEO), blob support, and yes, it can be used independently from Zope. Zope 2, Zope 3 and Grok all use the ZODB as its default data storage, and it's seen a lot of battle testing.The ZODB is a powerful object database for Python objects. It's very mature - it's been around for more than a decade. It is transactional, has advanced features like clustering (ZEO), blob support, and yes, it can be used independently from Zope. Zope 2, Zope 3 and Grok all use the ZODB as its default data storage, and it's seen a lot of battle testing. As a result of various discussions in the past, I realized that some smart,...As a result of various discussions in the past, I realized that some smart,...
Lots more is going on in the Grok world, so the Grok Status Update has received a part 3. See also Lots more is going on in the Grok world, so the Grok Status Update has received a part 3. See also part 1part 1 and and part 2part 2.. grok.OrderedContainergrok.OrderedContainer Thanks to work at the Grokkerdam sprint, Grok 0.13 will contain an Thanks to work at the Grokkerdam sprint, Grok 0.13 will contain an IOrderedContainerIOrderedContainer implementation besides... implementation besides...
I continue yesterday's I continue yesterday's status updatestatus update with some more topics. Lots of stuff is going on in the Grok world! with some more topics. Lots of stuff is going on in the Grok world! grokproject improvementsgrokproject improvements Maurits van Rees, Tim Terlegård, Reinout van Rees and others at the Grokkerdam sprint worked on improving grokproject in many ways:Maurits van Rees, Tim Terlegård, Reinout van Rees and others at the Grokkerdam sprint worked on improving grokproject in many ways: improve paster integrationimprove paster integration less questions asked and better...less questions asked and better...
Time for a Time for a GrokGrok status report. I thought the Grokkerdam sprint was very successful. It is now a few weeks behind us. A fun time was had by the participants and we got a lot of work done. What's more we've had followup on many of the projects started there - people have continued the work started at the sprint. status report. I thought the Grokkerdam sprint was very successful. It is now a few weeks behind us. A fun time was had by the participants and we got a lot of work done. What's more we've had followup on many of the projects started there - people have continued the work started at the sprint. Meanwhile our release mill is churning along: last week Grok 0.12.1, a bugfix release, was...Meanwhile our release mill is churning along: last week Grok 0.12.1, a bugfix release, was...
This is a rather unusual blog entry. I sincerely hope I don't have to write blog entries like this very often. I usually write about technology, and the community surrounding it. This community is, of course, composed of people. Yesterday I heard that Joachim Schmitz, long-standing member of the Zope and Python communities, had died suddenly last weekend. He was a regular presence at Zope-related events, and I have met him often. I feel that his passing should not go...This is a rather unusual blog entry. I sincerely hope I don't have to write blog entries like this very often. I usually write about technology, and the community surrounding it. This community is, of course, composed of people. Yesterday I heard that Joachim Schmitz, long-standing member of the Zope and Python communities, had died suddenly last weekend. He was a regular presence at Zope-related events, and I have met him often. I feel that his passing should not go...
It happened a few days already, but I hadn't mentioned it here yet: It happened a few days already, but I hadn't mentioned it here yet: Grok 0.12Grok 0.12 has been released! Thanks go to Jan-Wijbrand Kolman for again playing the role of release manager, and to all contributors that made this release possible! has been released! Thanks go to Jan-Wijbrand Kolman for again playing the role of release manager, and to all contributors that made this release possible! Grok 0.12 is a release that brings two new features:Grok 0.12 is a release that brings two new features: z3c.autoinclude. At the snow sprint last january I worked with Ethan Jucovy and Robert...z3c.autoinclude. At the snow sprint last january I worked with Ethan Jucovy and Robert...
The Zope Foundation is very happy to announce it has five projects accepted by the Google Summer of Code. Thank you Google! In this article, I will introduce the projects, students and mentors.The Zope Foundation is very happy to announce it has five projects accepted by the Google Summer of Code. Thank you Google! In this article, I will introduce the projects, students and mentors. Zope2 on Python2.5Zope2 on Python2.5 student: ranjith babu kannikarastudent: ranjith babu kannikara mentor: Sidnei da Silvamentor: Sidnei da Silva This project is a followup of the Zope 3 on Python 2.5 project that was successfully completed in last year's summer of code by another student from the same...This project is a followup of the Zope 3 on Python 2.5 project that was successfully completed in last year's summer of code by another student from the same...
My friend Lennart's blog entry My friend Lennart's blog entry Zope 3 rocks and rollsZope 3 rocks and rolls is fascinating, not least as it has one of the most misleading titles I've ever seen. Reading that title, you'd be surprised Lennart talks mostly about a series of difficulties encountered with Zope 3 and decision to switch to Plone for a project instead. is fascinating, not least as it has one of the most misleading titles I've ever seen. Reading that title, you'd be surprised Lennart talks mostly about a series of difficulties encountered with Zope 3 and decision to switch to Plone for a project instead. Only the first paragraph has positive things to say about Zope...Only the first paragraph has positive things to say about Zope...
In my In my previous articleprevious article on the on the GrokkerdamGrokkerdam sprint, I discussed various topics people may want to work on during the sprint. This blog entry is dedicated to some more topics, all security-related. sprint, I discussed various topics people may want to work on during the sprint. This blog entry is dedicated to some more topics, all security-related.
Zope has been under development since 1996. It wasn't called Zope back then yet: it was called bobo, and later pieces were called Principia, and only in 1998 did it become Zope.Zope has been under development since 1996. It wasn't called Zope back then yet: it was called bobo, and later pieces were called Principia, and only in 1998 did it become Zope. When Zope was born, there was just one Python implementation: CPython. CPython is important. It's the main line of Python evolution, has the most libraries available to it, and can integrate with all sorts of C and C++ libraries, and even other languages such as Java can be integrated...When Zope was born, there was just one Python implementation: CPython. CPython is important. It's the main line of Python evolution, has the most libraries available to it, and can integrate with all sorts of C and C++ libraries, and even other languages such as Java can be integrated...
There is a PyCon UK. There is a PyCon Italy. Just now I saw the announcement of a PyCon France. I understand why these conferences happen - local user communities will want to see conferences where most talks are in their own language and have a bigger selection of talks relevant to the local community.There is a PyCon UK. There is a PyCon Italy. Just now I saw the announcement of a PyCon France. I understand why these conferences happen - local user communities will want to see conferences where most talks are in their own language and have a bigger selection of talks relevant to the local community. But, being Dutch, these country-specific conferences are typically not things I'd go to, as I'm not based in these countries. I don't speak French or Italian....But, being Dutch, these country-specific conferences are typically not things I'd go to, as I'm not based in these countries. I don't speak French or Italian....
The The GrokkerdamGrokkerdam sprint is coming up in a few weeks. I've put some topics people may want to work on during the sprint on the wiki page. Since those topics are just one-liners, I figured I might expand a bit on them here. The sprinters are not required to pick these tasks of course, and can choose something else entirely. If you have ideas, pleases expand the list of tasks! sprint is coming up in a few weeks. I've put some topics people may want to work on during the sprint on the wiki page. Since those topics are just one-liners, I figured I might expand a bit on them here. The sprinters are not required to pick these tasks of course, and can choose something else entirely. If you have ideas, pleases expand the list of tasks! This blog post...This blog post...
Grok needs a great relational database integration story. Grok already has a great database story: by default, we use an object database: the ZODB. The ZODB is great as you can just store normal Python objects. You can persist complicated nested structures easily. But this entry isn't about the ZODB. Relational databases are also great. You can query tables every which way very easily. You can manage your data in a RDMS, a familiar system for many, and integrate with...Grok needs a great relational database integration story. Grok already has a great database story: by default, we use an object database: the ZODB. The ZODB is great as you can just store normal Python objects. You can persist complicated nested structures easily. But this entry isn't about the ZODB. Relational databases are also great. You can query tables every which way very easily. You can manage your data in a RDMS, a familiar system for many, and integrate with...
This This blog entryblog entry on picking web frameworks is quite interesting. It doesn't give a lot of detail, and it acknowledges this, but it does show the struggles someone goes through trying to pick the right framework for the job (and one that fits his mind). Wyatt Baldwin considered, among other frameworks, Zope, and had the following to... on picking web frameworks is quite interesting. It doesn't give a lot of detail, and it acknowledges this, but it does show the struggles someone goes through trying to pick the right framework for the job (and one that fits his mind). Wyatt Baldwin considered, among other frameworks, Zope, and had the following to...
This post was, of course, an April Fool's jokeThis post was, of course, an April Fool's joke Grok has been using patterns like "Don't repeat yourself" and "Convention over configuration" to make it more easy to work with Zope 3 code. It is now time to admit that this experiment has been a failure. Explicit is better than implicit, after all, and we'll put up with repeating ourselves a few times if we need to.Grok has been using patterns like "Don't repeat yourself" and "Convention over configuration" to make it more easy to work with Zope 3 code. It is now time to admit that this experiment has been a failure. Explicit is better than implicit, after all, and we'll put up with repeating ourselves a few times if we need to. Consider the following example of Grok code in the module...Consider the following example of Grok code in the module...
Are you a student and are you interested to hack on Zope, the ZODB or Grok for the summer? Do you want to be helped by an expert mentor? And get money and a t-shirt? The Zope Foundation is participating in the Google Summer of Code for the second time this year, and the time for you to apply is now! The applications just opened yesterday, but deadline for student applications is monday, march 31, so there isn't a lot of time. We're really excited to be part of this...Are you a student and are you interested to hack on Zope, the ZODB or Grok for the summer? Do you want to be helped by an expert mentor? And get money and a t-shirt? The Zope Foundation is participating in the Google Summer of Code for the second time this year, and the time for you to apply is now! The applications just opened yesterday, but deadline for student applications is monday, march 31, so there isn't a lot of time. We're really excited to be part of this...
By Martijn FaassenBy Martijn Faassen • • 2008-03-182008-03-18 • • Tags: Tags: zope foundationzope foundation The Zope Foundation is happy to announce it was accepted in Google's Summer of Code program in 2008!The Zope Foundation is happy to announce it was accepted in Google's Summer of Code program in 2008! Students interested in a Zope (or Grok) related project, please sign up to our summer of code mailing list and introduce yourself and...Students interested in a Zope (or Grok) related project, please sign up to our summer of code mailing list and introduce yourself and...
It was planned for a long time, but at last we are going to hold a It was planned for a long time, but at last we are going to hold a GrokGrok sprint in the Netherlands. To be more precise, in Rotterdam. Rotterdam will be "Grokkerdam" for the duration of the sprint! sprint in the Netherlands. To be more precise, in Rotterdam. Rotterdam will be "Grokkerdam" for the duration of the sprint! WhereWhere: Rotterdam, the Netherlands: Rotterdam, the Netherlands WhenWhen: 30 april - 5 may 2008: 30 april - 5 may 2008 WhoWho: hopefully, you!: hopefully, you! A number of experienced Grokkers will be attending. People of...A number of experienced Grokkers will be attending. People of...
UpdateUpdate: Guido appears to : Guido appears to share my opinion on thisshare my opinion on this.. I've heard murmurs from a bunch of projects over time concerning their transition plans to Python 3.0. These transition plans are naturally vague at this stage. There's one theme I've heard a few times in these murmurs that worries me enough to speak out on it.I've heard murmurs from a bunch of projects over time concerning their transition plans to Python 3.0. These transition plans are naturally vague at this stage. There's one theme I've heard a few times in these murmurs that worries me enough to speak out on it. People sometimes reason that since Python...People sometimes reason that since Python...
Last year the Zope Foundation participated in the Google Summer of Code. We had four students, all of whom are still active in the Zope community, so we can declare this a success. We hope to participate in 2008 again, and we're looking for mentors and project ideas.Last year the Zope Foundation participated in the Google Summer of Code. We had four students, all of whom are still active in the Zope community, so we can declare this a success. We hope to participate in 2008 again, and we're looking for mentors and project ideas. We need to show a list of mentors to Google soon, and the bigger that list the better, so if you do want to mentor, please sign up here:We need to show a list of mentors to Google soon, and the bigger that list the better, so if you do want to mentor, please sign up here:
This weekend I'm off to FOSDEM, a large free software/open source event in Brussels. For years I intended to go but for years I didn't make it. But this weekend I'll be there, taking the train later today!This weekend I'm off to FOSDEM, a large free software/open source event in Brussels. For years I intended to go but for years I didn't make it. But this weekend I'll be there, taking the train later today! This year there unfortunately seem to be precious few Python (or Zope, or Plone) related events at FOSDEM. Lots of other languages and web frameworks are there, so what's wrong with us? If this FOSDEM is a success, perhaps next year I can help organize some of...This year there unfortunately seem to be precious few Python (or Zope, or Plone) related events at FOSDEM. Lots of other languages and web frameworks are there, so what's wrong with us? If this FOSDEM is a success, perhaps next year I can help organize some of...
Jesse Noller Jesse Noller wrotewrote:: I hate slashdot: Python 3000 is incompatible?!!!I hate slashdot: Python 3000 is incompatible?!!! and then says:and then says: A sensationalist title, summary and normal slashdot commenters: "Python 3.0 To Be Backwards Incompatible"A sensationalist title, summary and normal slashdot commenters: "Python 3.0 To Be Backwards Incompatible" I don't see how the title is sensationalist. Python 3.0 I don't see how the title is sensationalist. Python 3.0 isis backwards incompatible... backwards incompatible...
Five, the system to use Zope 3 within Zope 2, is a pain sometimes. Five is full of hacks to ensure backwards compatibility with Zope 2. This stops developers from using full-fledged Zope 3 strategies in places.Five, the system to use Zope 3 within Zope 2, is a pain sometimes. Five is full of hacks to ensure backwards compatibility with Zope 2. This stops developers from using full-fledged Zope 3 strategies in places. How could we make this pain go away?How could we make this pain go away? The main reason these hacks in Five are necessary is acquisition. Acquisition in turn is necessary to support the construction of URLs, and most importantly, to look up security information. There has...The main reason these hacks in Five are necessary is acquisition. Acquisition in turn is necessary to support the construction of URLs, and most importantly, to look up security information. There has...
Malthe Malthe startedstarted an an interestinginteresting discussiondiscussion on the possibility to rewrite Plone from scratch. I have some thoughts on the topic of rewrites,... on the possibility to rewrite Plone from scratch. I have some thoughts on the topic of rewrites,...
This year, like last year, will be a year of This year, like last year, will be a year of GrokGrok for me. Grok has given me real hope that Zope technologies can compete, and compete well, with other Python-based web frameworks. In the Zope community, as well as outside it, we are well aware of Zope's flaws, both technology and community-wise. We sometimes think too little about Zope's assets, which are huge. Zope 3 is for me. Grok has given me real hope that Zope technologies can compete, and compete well, with other Python-based web frameworks. In the Zope community, as well as outside it, we are well aware of Zope's flaws, both technology and community-wise. We sometimes think too little about Zope's assets, which are huge. Zope 3 is greatgreat technology, years ahead of the... technology, years ahead of the...
Some years ago, in 2004, I came up with the following quote to promote the Five project, which was the first step towards the inclusion of Zope 3 technologies in Zope 2. Zope 3 technologies are now heavily used in Zope 2 projects, and Zope 3 code has been part of Zope 2 for a while now, but back then we were just at the start of this process. The quote itself was creatively adapted from the first season intro of Babylon 5, a 90s scifi TV show:Some years ago, in 2004, I came up with the following quote to promote the Five project, which was the first step towards the inclusion of Zope 3 technologies in Zope 2. Zope 3 technologies are now heavily used in Zope 2 projects, and Zope 3 code has been part of Zope 2 for a while now, but back then we were just at the start of this process. The quote itself was creatively adapted from the first season intro of Babylon 5, a 90s scifi TV show: "It was the..."It was the...
I just ran into a post in a series called "Tools of The Effective Developer". This one is called I just ran into a post in a series called "Tools of The Effective Developer". This one is called Make It Work - First!Make It Work - First!.. The posting contains very good advice. I call the two extremes described "under-engineering" and "over-engineering". It's in part a personality trait as the original posting says, but in part it's also something that changes...The posting contains very good advice. I call the two extremes described "under-engineering" and "over-engineering". It's in part a personality trait as the original posting says, but in part it's also something that changes...
Grok the codebase is 1 year old this week! One year ago, from the 12th of october until the 17th of october 2006, we started the Grok project in Halle, Germany. The design discussions for Grok are older - they go back to EuroPython. And the Zope 3 project, the base without which Grok would be nothing, started development in 2001.Grok the codebase is 1 year old this week! One year ago, from the 12th of october until the 17th of october 2006, we started the Grok project in Halle, Germany. The design discussions for Grok are older - they go back to EuroPython. And the Zope 3 project, the base without which Grok would be nothing, started development in 2001. But one has to start somewhere, and in that sprint Grok really came together. Four hackers sat together. A...But one has to start somewhere, and in that sprint Grok really came together. Four hackers sat together. A...
Hello from the fourth Hello from the fourth GrokGrok sprint! I wanted to write this report tuesday but didn't get around to it. The sprint! I wanted to write this report tuesday but didn't get around to it. The Neanderthal Grok sprintNeanderthal Grok sprint is now more than halfway over: monday and tuesday were full sprint days. Wednesday was our day off visiting Neanderthal itself, but we did do some more sprinting in the evening at the... is now more than halfway over: monday and tuesday were full sprint days. Wednesday was our day off visiting Neanderthal itself, but we did do some more sprinting in the evening at the...
Zope 3, and Zope 3, and GrokGrok in the last few months have been switching to a brave new eggified world of installation. The idea is that you compose your Zope application from a large amount of smaller packages, each providing their own components. I've sometimes described this Zope as an in the last few months have been switching to a brave new eggified world of installation. The idea is that you compose your Zope application from a large amount of smaller packages, each providing their own components. I've sometimes described this Zope as an integrated megaframeworkintegrated megaframework. Zope is an . Zope is an integratedintegrated framework where packages follow common coding conventions, and the component... framework where packages follow common coding conventions, and the component...
Well-kept secrets of Zope Well-kept secrets of Zope Zope is a web framework that comes equipped with powerful, apparently secret, features. Some of the things Zope has had for literally years other web frameworks are only evolving today. And in other cases, Zope comes equipped with features that other web framework communities...Zope is a web framework that comes equipped with powerful, apparently secret, features. Some of the things Zope has had for literally years other web frameworks are only evolving today. And in other cases, Zope comes equipped with features that other web framework communities...
It has been made abundantly clear to me that some core developers did not appreciate It has been made abundantly clear to me that some core developers did not appreciate mymy previousprevious communicationscommunications concerning my worries surrounding transition to... concerning my worries surrounding transition to...
Collin Winter Collin Winter writeswrites:: "I’m getting pretty sick of seeing blog posts and mailing lists threads endlessly bemoaning that, “the core developers…are causing a huge risk to the Python community by splitting it asunder for a period of years“. Gloom, doom, pox and peril, blah blah blah.""I’m getting pretty sick of seeing blog posts and mailing lists threads endlessly bemoaning that, “the core developers…are causing a huge risk to the Python community by splitting it asunder for a period of years“. Gloom, doom, pox and peril, blah blah blah." Collin's quoting me, so that means he's getting pretty sick of me, among others. I don't think...Collin's quoting me, so that means he's getting pretty sick of me, among others. I don't think...
I've received a lot of feedback to I've received a lot of feedback to my previous blog entrymy previous blog entry. I stated there that I'm worried about the costs of breaking backwards compatibility in Python 3, and its cost to the Python community. I'm glad I received this feedback, because the topic bears a bit of attention.. I stated there that I'm worried about the costs of breaking backwards compatibility in Python 3, and its cost to the Python community. I'm glad I received this feedback, because the topic bears a bit of attention. There was a whole series of comments saying the transition cost wouldn't be as high as I estimated....There was a whole series of comments saying the transition cost wouldn't be as high as I estimated....
Briefly, some of my Python 3000 thoughts. I see quite a bit of enthusiasm in some other blogs. I'm not very enthusiastic. While I understand the need to be able to break backwards compatibility, I am worried about Python forking into two parallel versions (2.x and 3.x) for many, many years. Such a fork can't be good for the Python community.Briefly, some of my Python 3000 thoughts. I see quite a bit of enthusiasm in some other blogs. I'm not very enthusiastic. While I understand the need to be able to break backwards compatibility, I am worried about Python forking into two parallel versions (2.x and 3.x) for many, many years. Such a fork can't be good for the Python community. Why do I worry about Python forking? Because porting code to Python 3 will be hard. The porting instructions discuss the...Why do I worry about Python forking? Because porting code to Python 3 will be hard. The porting instructions discuss the...
I've been writing software for quite a while now, but the software I write still has bugs. One uses various strategies to avoid bugs, but bugs still creep in. Bugs happens all the time. I sometimes believe only programmers are truly aware how flawed human reasoning really is and how many mistakes a person can make without even noticing. Us programmers are confronted with our own mistakes every day. The real world tends to be more forgiving of slight mistakes than the...I've been writing software for quite a while now, but the software I write still has bugs. One uses various strategies to avoid bugs, but bugs still creep in. Bugs happens all the time. I sometimes believe only programmers are truly aware how flawed human reasoning really is and how many mistakes a person can make without even noticing. Us programmers are confronted with our own mistakes every day. The real world tends to be more forgiving of slight mistakes than the...
By Martijn FaassenBy Martijn Faassen • • 2007-03-152007-03-15 • • Tags: Tags: zope foundationzope foundation I'm happy to announce that the Zope Foundation was accepted by Google as mentoring organization in the I'm happy to announce that the Zope Foundation was accepted by Google as mentoring organization in the Google Summer of CodeGoogle Summer of Code! This means we're looking for students and more mentors who would...! This means we're looking for students and more mentors who would...
Yesterday I returned from "Grok Sprint Zwei", the second grok sprint, hosted by Philipp von Weitershausen in Dresden, Germany (and partially at Gocept for the warming up). Grok is a project to make Zope 3 safe, easy and fun for cavemen and other hominids like ourselves. Zope 3 of course is the powerful and flexible framework for the construction of web applications. See Yesterday I returned from "Grok Sprint Zwei", the second grok sprint, hosted by Philipp von Weitershausen in Dresden, Germany (and partially at Gocept for the warming up). Grok is a project to make Zope 3 safe, easy and fun for cavemen and other hominids like ourselves. Zope 3 of course is the powerful and flexible framework for the construction of web applications. See
Yesterday night I experimented with getting Zope 3/Grok to work CherryPy, through WSGI. This led to all kinds of interesting adventures and opportunities. Follow the path I took:Yesterday night I experimented with getting Zope 3/Grok to work CherryPy, through WSGI. This led to all kinds of interesting adventures and opportunities. Follow the path I took: This started as I had been doing some work with This started as I had been doing some work with CherryPyCherryPy recently. I like what I see of CherryPy so far; a nice, Pythonic and powerful web server. recently. I like what I see of CherryPy so far; a nice, Pythonic and powerful web server. Currently Zope 3 uses Currently Zope 3 uses
I will use this blog entry to talk talk a bit about my holiday in Germany a few weeks ago. I went to a mini sprint at I will use this blog entry to talk talk a bit about my holiday in Germany a few weeks ago. I went to a mini sprint at GoceptGocept, in Halle. I had a great time! (yes, I am a geek) This sprint showed that good sprints aren't necessarily the ones with many people participating; we just had 4 sprinters (and less much of the time), and this was one of the most productive sprints I've been at for years. I left the sprint..., in Halle. I had a great time! (yes, I am a geek) This sprint showed that good sprints aren't necessarily the ones with many people participating; we just had 4 sprinters (and less much of the time), and this was one of the most productive sprints I've been at for years. I left the sprint...
I've created what's called a "buildout" for lxml, and I figured I'd let everybody know how cool that is.I've created what's called a "buildout" for lxml, and I figured I'd let everybody know how cool that is. Buildout is a new system for constructing Python applications and its constituent parts, based on setuptools and eggs. Much more information can be found here:Buildout is a new system for constructing Python applications and its constituent parts, based on setuptools and eggs. Much more information can be found here: http://cheeseshop.python.org/pypi/zc.buildout/http://cheeseshop.python.org/pypi/zc.buildout/ Now before you read all that (it's pretty technical), let me...Now before you read all that (it's pretty technical), let me...
Zope 3.3Zope 3.3 is is releasedreleased!! Thanks to the hard work by many contributors, but especially by Jim Fulton and Philipp von Weitershausen to get the release out, we now have a fresh Zope 3.3 waiting for us.Thanks to the hard work by many contributors, but especially by Jim Fulton and Philipp von Weitershausen to get the release out, we now have a fresh Zope 3.3 waiting for us. Besides many bugfixes, one of the most important new feature additions is a much simpler...Besides many bugfixes, one of the most important new feature additions is a much simpler...
Jean-Marc Orliaguet is rewriting CPSSkins again, this time in Java, as Nuxeo is Jean-Marc Orliaguet is rewriting CPSSkins again, this time in Java, as Nuxeo is switching their CPS platform from Python and Zope to the Java languageswitching their CPS platform from Python and Zope to the Java language . The reasons for this switch are detailed in the FAQ. I'm not going to debate them here. . The reasons for this switch are detailed in the FAQ. I'm not going to debate them here. Jean-Marc, part of the community around Nuxeo making the switch, now posted Jean-Marc, part of the community around Nuxeo making the switch, now posted
I was honoured to be asked to give a keynote talk at the recent DZUG conference in Sankt Augustin near Bonn, Germany. Even though DZUG is the German speaking Zope User Group, I was allowed to speak in English. :) My talk was titled "Zope in Perspective". Christian Scholz was kind enough to film it, also wrote a I was honoured to be asked to give a keynote talk at the recent DZUG conference in Sankt Augustin near Bonn, Germany. Even though DZUG is the German speaking Zope User Group, I was allowed to speak in English. :) My talk was titled "Zope in Perspective". Christian Scholz was kind enough to film it, also wrote a blog entryblog entry about , and put the video online! This way I... about , and put the video online! This way I...
Since these components are little known I'd like to give a brief introduction of the great set of open source OAI-PMH components that Since these components are little known I'd like to give a brief introduction of the great set of open source OAI-PMH components that InfraeInfrae has developed. has developed. What is OAI-PMH? It's the Open Archives Initiative Protocol for Metadata Harvesting. This is an XML and HTTP based protocol for harvesting large amounts of metadata from so-called data providers. Data providers are sites on the web that are interested in...What is OAI-PMH? It's the Open Archives Initiative Protocol for Metadata Harvesting. This is an XML and HTTP based protocol for harvesting large amounts of metadata from so-called data providers. Data providers are sites on the web that are interested in...
I just ran into a rather misleading I just ran into a rather misleading articlearticle claiming to compare Ruby and Python. Let's please be done with some of these misconceptions: claiming to compare Ruby and Python. Let's please be done with some of these misconceptions: Python 1.5.2 was released in april 1999. Talking about supposed design flaws in a version released in 1999 is a bit misleading. We're Python 1.5.2 was released in april 1999. Talking about supposed design flaws in a version released in 1999 is a bit misleading. We're seven yearsseven years past april 1999. Maybe the referenced article was written... past april 1999. Maybe the referenced article was written...
A bit late, but still worth a blog entry: lxml 0.9.1 was released last week! This is a bugfix release following up on the great 0.9 release done a bit before.A bit late, but still worth a blog entry: lxml 0.9.1 was released last week! This is a bugfix release following up on the great 0.9 release done a bit before. With the 0.9 release, lxml is really shaping up. It has a ton of features resulting from the input from many people, and most importantly includes a lot of work done by the extraordinarily cool Stefan Behnel who has been driving a lot of lxml development for a while.With the 0.9 release, lxml is really shaping up. It has a ton of features resulting from the input from many people, and most importantly includes a lot of work done by the extraordinarily cool Stefan Behnel who has been driving a lot of lxml development for a while. lxml 0.9 contains a lot of new...lxml 0.9 contains a lot of new...
I saw a I saw a blog entry by Julien Anguenotblog entry by Julien Anguenot praising the ElementTree+ (and cElementTree in particular) XML processing library, and also contrasted it with praising the ElementTree+ (and cElementTree in particular) XML processing library, and also contrasted it with lxmllxml, as in "why didn't I use lxml?". Since I created lxml, I thought I'd chip in and give my perspective on how..., as in "why didn't I use lxml?". Since I created lxml, I thought I'd chip in and give my perspective on how...
I think Guido's I think Guido's post on XMLpost on XML is a good occasion to point again to my rant is a good occasion to point again to my rant about the disdain for XML among Python programmersabout the disdain for XML among Python programmers, posted almost exactly a year ago on this blog., posted almost exactly a year ago on this blog. I don't think Guido is right on the no XML in my template issue. I don't think he's wrong...I don't think Guido is right on the no XML in my template issue. I don't think he's wrong...
Paul Everitt Paul Everitt writeswrites:: In the early days of Zope, you could design content "TTW" (through the web). You could answer questions about structure and suddenly, you had new kinds of content -- YOUR content -- that could be added to folders in the system. No programmers were involved, no special login permissions on the server, no database...In the early days of Zope, you could design content "TTW" (through the web). You could answer questions about structure and suddenly, you had new kinds of content -- YOUR content -- that could be added to folders in the system. No programmers were involved, no special login permissions on the server, no database...
In In my last articlemy last article I talked about the problems that occur on the borderland between content and software, but didn't give enough examples. I figured I'd add some more text about this very important topic. I talked about the problems that occur on the borderland between content and software, but didn't give enough examples. I figured I'd add some more text about this very important topic. One response to the problem I describe is to treat this as an either/or choice. You could say: either give someone all the...One response to the problem I describe is to treat this as an either/or choice. You could say: either give someone all the...
Last summer the Last summer the FiveFive project pulled Zope 3's i18n architecture into the Zope 2 world, thanks to work done by project pulled Zope 3's i18n architecture into the Zope 2 world, thanks to work done by Philipp von WeitershausenPhilipp von Weitershausen, , Lennart RegebroLennart Regebro and others (please forgive me if I forget someone!). and others (please forgive me if I forget someone!). And yesterday, Philipp posted And yesterday, Philipp posted
At the Plone conference 2005 I gave a lightning talk about tramline, a lightweight up and download accelator for web applications. Now at last I've found some time to put the source code online. This is not a proper release yet, but it's there for interested people to take a look at it.At the Plone conference 2005 I gave a lightning talk about tramline, a lightweight up and download accelator for web applications. Now at last I've found some time to put the source code online. This is not a proper release yet, but it's there for interested people to take a look at it. What is tramline about? From the readme:What is tramline about? From the readme: Tramline is a upload and download accelerator that plugs into Apache, using mod_python. Its aim is to make...Tramline is a upload and download accelerator that plugs into Apache, using mod_python. Its aim is to make...
Ian Bicking Ian Bicking postsposts about what he percieves is a focus of Zope 3 on modeling up-front: about what he percieves is a focus of Zope 3 on modeling up-front: Good development in the beginning means deferring choices as much as possible and focusing on results instead of abstractions. Abstractions should emerge from your functional goals, and if you spend a lot of time modeling in the beginning then you've made premature choices and designed...Good development in the beginning means deferring choices as much as possible and focusing on results instead of abstractions. Abstractions should emerge from your functional goals, and if you spend a lot of time modeling in the beginning then you've made premature choices and designed...
Quite a few Zope 3 extensions are starting to appear. This is great. There is all the great work done within the Quite a few Zope 3 extensions are starting to appear. This is great. There is all the great work done within the Z3ECM svn repositoryZ3ECM svn repository. There's Infrae's . There's Infrae's hurryhurry library of little Zope 3 odds and ends. Then there are various Zope 3 extensions written by Zope corporation, such as library of little Zope 3 odds and ends. Then there are various Zope 3 extensions written by Zope corporation, such as
Benji YorkBenji York, a relatively recent Zope Corporation employee, first appeared on my "does interesting stuff" radar due to his work with Zope 3 testing: zope.testbrowser, which promises to bring to Zope 3 testing something I played with before in the context of Silva but never really made very usable: functional testing of the web frontend of code on the server side (utilizing , a relatively recent Zope Corporation employee, first appeared on my "does interesting stuff" radar due to his work with Zope 3 testing: zope.testbrowser, which promises to bring to Zope 3 testing something I played with before in the context of Silva but never really made very usable: functional testing of the web frontend of code on the server side (utilizing
Thank you Phillip Eby for giving credit where's credit's due in your comment on this Thank you Phillip Eby for giving credit where's credit's due in your comment on this articlearticle.. Zope's ancestor Bobo could do something almost a decade ago that's getting popular now: object publishing. Jim Fulton deserves a lot of credit for that. This also makes me wonder whether there are things in Zope 3 that will become popular about a...Zope's ancestor Bobo could do something almost a decade ago that's getting popular now: object publishing. Jim Fulton deserves a lot of credit for that. This also makes me wonder whether there are things in Zope 3 that will become popular about a...
Since various people were curious to see especially the little query language we wrote on top of the Zope 3 catalog, I've just put up the generic libraries we developed for documentlibrary project online, at least in svn in the Since various people were curious to see especially the little query language we wrote on top of the Zope 3 catalog, I've just put up the generic libraries we developed for documentlibrary project online, at least in svn in the Zope 3 baseZope 3 base at codespeak, here: at codespeak, here: http://codespeak.net/svn/z3/hurry/trunkhttp://codespeak.net/svn/z3/hurry/trunk I've done this in the "tradition"...I've done this in the "tradition"...
Practical experience with Zope 3 Practical experience with Zope 3 Jeff Shell has posted Jeff Shell has posted a very interesting blog entry on his experiences with Zope 3a very interesting blog entry on his experiences with Zope 3. Here at Infrae we've also been working with Zope 3 for a few.... Here at Infrae we've also been working with Zope 3 for a few...
Originally this was buried in a comment to an Originally this was buried in a comment to an articlearticle on Uche's weblog, but he suggested I post it on my own weblog, here goes. The history of this long running discussion is on Uche's weblog, but he suggested I post it on my own weblog, here goes. The history of this long running discussion is herehere.. I think for PJE I think for PJE
What the heck does "pythonic" mean?What the heck does "pythonic" mean? This was a question asked a few months ago, on, of all places, the EuroPython mailing list, which is mainly used to plan the EuroPython conference. It was an interesting question though. I realized I've seen the word been used a lot, but that I've hardly seen any attempts to explain what it means. In the thread that ensued, different people, including myself, gave their own answers. I rewrote my answer for my weblog,...This was a question asked a few months ago, on, of all places, the EuroPython mailing list, which is mainly used to plan the EuroPython conference. It was an interesting question though. I realized I've seen the word been used a lot, but that I've hardly seen any attempts to explain what it means. In the thread that ensued, different people, including myself, gave their own answers. I rewrote my answer for my weblog,...
Today I read Today I read an article about libxsltan article about libxslt on O'Reilly's xml.com. It demonstrates the power of libxslt; it's a cool library. It also demonstrates why I wrote on O'Reilly's xml.com. It demonstrates the power of libxslt; it's a cool library. It also demonstrates why I wrote lxmllxml: writing Python code that correctly uses libxml2/libxslt's bindings directly is difficult.: writing Python code that correctly uses libxml2/libxslt's bindings directly is difficult. The example in the article goes like this:The example in the article goes like this: # xsltprocs.py:...# xsltprocs.py:...
Ian Bicking Ian Bicking complains about unicode in Pythoncomplains about unicode in Python and wants to and wants to change the default encodingchange the default encoding in his Python application, and wonders why Python makes it so hard to change it. in his Python application, and wonders why Python makes it so hard to change it. It's very tempting to change the default encoding, and I messed around with it too when I first explored...It's very tempting to change the default encoding, and I messed around with it too when I first explored...
JSR-170JSR-170 or the Java Content Repository API, appeared on my radar somewhere early in 2004. JSR-170 is interesting to creators of content management systems because it promises a common API for accessing and manipulating CMS content. Implementing this API in a CMS could bring a number of potential benefits to it, such as interoperability, learnability, not reinventing the wheel, and so on. I go deeper... or the Java Content Repository API, appeared on my radar somewhere early in 2004. JSR-170 is interesting to creators of content management systems because it promises a common API for accessing and manipulating CMS content. Implementing this API in a CMS could bring a number of potential benefits to it, such as interoperability, learnability, not reinventing the wheel, and so on. I go deeper...
Yesterday I managed to build something in just a few hours in Zope 3 that I wouldn't have been able to build so easily in Zope 2. What I've built is an extended query system for the Zope 3 catalogs.Yesterday I managed to build something in just a few hours in Zope 3 that I wouldn't have been able to build so easily in Zope 2. What I've built is an extended query system for the Zope 3 catalogs. A sample query looks like this:A sample query looks like this: q = zapi.getUtility(interfaces.IExtendedQuery) q = zapi.getUtility(interfaces.IExtendedQuery) t1 = ('catalog', 'fulltext') t1 = ('catalog', 'fulltext') a1 = ('catalog', 'a1') a1 = ('catalog', 'a1') r = q.searchResults(And(Text(t1, 'foo'),...r = q.searchResults(And(Text(t1, 'foo'),...
Dear anonymous Network World writers claiming to speak for corporate IT executives,Dear anonymous Network World writers claiming to speak for corporate IT executives, I read your recent I read your recent open letteropen letter to the open source community with interest. You say that before free software can take on a higher profile in big IT departments you need to see the following things from us in the open source community: to the open source community with interest. You say that before free software can take on a higher profile in big IT departments you need to see the following things from us in the open source community: more enterprise-class...more enterprise-class...
I had a terribly good time at EuroPython 2005. The quality of talks was better than ever, with a nice diverse and big selection. I gave two of them. I also was on two panels, and just shouted out comments through other talks :). If you missed it, you missed quite the event.I had a terribly good time at EuroPython 2005. The quality of talks was better than ever, with a nice diverse and big selection. I gave two of them. I also was on two panels, and just shouted out comments through other talks :). If you missed it, you missed quite the event. Next year's conference is at CERN, the place with the giant particle accelerator. We're already planning on using it to create transphasic mesonic resonance rays to make the world Safe for...Next year's conference is at CERN, the place with the giant particle accelerator. We're already planning on using it to create transphasic mesonic resonance rays to make the world Safe for...
Recently I started getting reports that lxml does not compile with gcc 4.0. Investigating this an issue with Pyrex was quickly identified -- it generates C code that is in fact illegal, was accepted by older gcc versions, but gcc 4.0 refuses to.Recently I started getting reports that lxml does not compile with gcc 4.0. Investigating this an issue with Pyrex was quickly identified -- it generates C code that is in fact illegal, was accepted by older gcc versions, but gcc 4.0 refuses to. Now we're going to see open source cooperation in action. The issue with gcc 4.0 was first reported by Mikhail Sobolev, who is bravely running Ubuntu Breezy, which apparently switched over to using gcc 4.0 for its build...Now we're going to see open source cooperation in action. The issue with gcc 4.0 was first reported by Mikhail Sobolev, who is bravely running Ubuntu Breezy, which apparently switched over to using gcc 4.0 for its build...
I'm happy to announce I've released lxml 0.7 earlier today! It contains quite a bit of important work, from XInclude and XML Schema support to a better implementation of tostring(). See the I'm happy to announce I've released lxml 0.7 earlier today! It contains quite a bit of important work, from XInclude and XML Schema support to a better implementation of tostring(). See the changelogchangelog for more information. for more information. You can get more information and a download You can get more information and a download herehere:: Unfortunately there seem to be some problems compiling...Unfortunately there seem to be some problems compiling...
lxml has undergone quite a bit of development since lxml 0.6. While 0.7 is not yet released, this release should be coming soon, and to whet your appetites here's a partial list of new features:lxml has undergone quite a bit of development since lxml 0.6. While 0.7 is not yet released, this release should be coming soon, and to whet your appetites here's a partial list of new features: XMLSchema validator supportXMLSchema validator support XInclude supportXInclude support more control over namespace prefixes when generating XMLmore control over namespace prefixes when generating XML I'll talk about the least spectacular sounding feature that in fact cost me the most time to implement: control over namespace...I'll talk about the least spectacular sounding feature that in fact cost me the most time to implement: control over namespace...
I've released lxml 0.6. lxml is an alternative, more Pythonic binding for the libxml2 and libxslt XML processing libraries.I've released lxml 0.6. lxml is an alternative, more Pythonic binding for the libxml2 and libxslt XML processing libraries. lxml 0.6 contains important bugfixes, in particular better namespace support while handling attributes, as well as a fix for what turned out to be totally broken behavior for etree.tostring(). An upgrade is recommended.lxml 0.6 contains important bugfixes, in particular better namespace support while handling attributes, as well as a fix for what turned out to be totally broken behavior for etree.tostring(). An upgrade is recommended. A great new development is that the tests that helped expose these bugs were contributed by people working with...A great new development is that the tests that helped expose these bugs were contributed by people working with...
I'm happy to have released today a new Silva extension, I'm happy to have released today a new Silva extension, Silva Flexible XMLSilva Flexible XML. Silva Flexible XML combines a lot of the interests and themes of my technical life in a single package. It's an extension to the Silva CMS that allows the user to create and manage XML content. The important part is XML standards support: the XML content can be configured to be checked by a Relax NG schema or.... Silva Flexible XML combines a lot of the interests and themes of my technical life in a single package. It's an extension to the Silva CMS that allows the user to create and manage XML content. The important part is XML standards support: the XML content can be configured to be checked by a Relax NG schema or...
The last couple of months I've been heavily involved in a cool Zope +
Five based project involving calendaring, about which more will be
announced shortly. As part of this project I've had the opportunity to
improve The last couple of months I've been heavily involved in a cool Zope +
Five based project involving calendaring, about which more will be
announced shortly. As part of this project I've had the opportunity to
improve FiveFive. The project also needed
support for the . The project also needed
support for the iCalendar RFCiCalendar RFC,
and this lead to me to become the janitor of the awesome Python
,
and this lead to me to become the janitor of the awesome Python
Yesterday I've released the one dot oh version of Yesterday I've released the one dot oh version of FiveFive, the Zope 2 product that allows you to use Zope 3 technology in Zope 2, today., the Zope 2 product that allows you to use Zope 3 technology in Zope 2, today. This release has been the effort of a bunch of very smart developers from all over. I think it's great that in about a year's time, it turned from a few experiments of mine into a truly open source, multi-person project with huge contributions from many others. Check out...This release has been the effort of a bunch of very smart developers from all over. I think it's great that in about a year's time, it turned from a few experiments of mine into a truly open source, multi-person project with huge contributions from many others. Check out...
The The ClearSilverClearSilver templating language does not have a very pleasant syntax for people familiar with the TAL notation of Zope Page Templates. That's not to say ClearSilver's syntax is awful; it's deliberately simple, and I'm sure one could get used to it pretty quickly. Still, I started wondering what ClearSilver syntax would look like if it were more like TAL. Let's call such a theoretical TAL-like ClearSilver... templating language does not have a very pleasant syntax for people familiar with the TAL notation of Zope Page Templates. That's not to say ClearSilver's syntax is awful; it's deliberately simple, and I'm sure one could get used to it pretty quickly. Still, I started wondering what ClearSilver syntax would look like if it were more like TAL. Let's call such a theoretical TAL-like ClearSilver...
I've just checked in a new package into the Zope 3 base subversion repository called Clarity. What it does is integrate ClearSilver templating into Zope 3 (trunk, though I expect Zope X3.0 or even Five support should be easy enough). It's all still rough, but initial tests show ClearSilver templates can be quite a bit faster than ZPT, and they have other possible benefits. In my simplistic experiments I got transaction rates about 2 to 5 times higher than you can reach...I've just checked in a new package into the Zope 3 base subversion repository called Clarity. What it does is integrate ClearSilver templating into Zope 3 (trunk, though I expect Zope X3.0 or even Five support should be easy enough). It's all still rough, but initial tests show ClearSilver templates can be quite a bit faster than ZPT, and they have other possible benefits. In my simplistic experiments I got transaction rates about 2 to 5 times higher than you can reach...
By Martijn FaassenBy Martijn Faassen • • 2005-04-092005-04-09 • • Tags: Tags: lxmllxml I've just released version 0.5.1 of lxml, the Pythonic binding to the libxml2 and libxslt libraries. This because I got feedback to 0.5 which pointed to a critical bug in the way unicode was handled. This kind of feedback is why I should've released lxml long...I've just released version 0.5.1 of lxml, the Pythonic binding to the libxml2 and libxslt libraries. This because I got feedback to 0.5 which pointed to a critical bug in the way unicode was handled. This kind of feedback is why I should've released lxml long...
I've finally found the time to release lxml. So here then is I've finally found the time to release lxml. So here then is lxmllxml, release 0.5!, release 0.5! The very brief lxml FAQThe very brief lxml FAQ Q: What is lxml?Q: What is lxml? A: It's a Pythonic wrapping for libxml2 and libxsltA: It's a Pythonic wrapping for libxml2 and libxslt Q: What does that do?Q: What does that do? A: It does XML, parsing it, writing it, manipulating it, searching in it (XPath), transforming it (XSLT), and validating it (Relax NG), plus more.A: It does XML, parsing it, writing it, manipulating it, searching in it (XPath), transforming it (XSLT), and validating it (Relax NG), plus more. Q: But doesn't...Q: But doesn't...
Ian Bicking just posted an Ian Bicking just posted an insightful analysisinsightful analysis of what makes Ruby on Rails work. What struck me most was the following: of what makes Ruby on Rails work. What struck me most was the following: Zope is also unique among web frameworks, and maybe even among Python projects, in that it's something where people choose Zope first, then Python comes along. With most other projects a developer chooses Python...Zope is also unique among web frameworks, and maybe even among Python projects, in that it's something where people choose Zope first, then Python comes along. With most other projects a developer chooses Python...
Jim Fulton, today, on the Zope-3 dev list:Jim Fulton, today, on the Zope-3 dev list: Now that that the decision has been made to include Zope 3 in Zope 2.8, I'd really prefer that Zope 2.8 use X3.1 code, not X3.0 code. In general, having code shared by Zope 2 and Zope 3 will complicate deprecation, probably increasing the length of time we must keep backward-compatibility code. I'd like to try to keep the Zope 3 code used in Zope 2 and the Zope 3 code used in Zope 3 in sync as much...Now that that the decision has been made to include Zope 3 in Zope 2.8, I'd really prefer that Zope 2.8 use X3.1 code, not X3.0 code. In general, having code shared by Zope 2 and Zope 3 will complicate deprecation, probably increasing the length of time we must keep backward-compatibility code. I'd like to try to keep the Zope 3 code used in Zope 2 and the Zope 3 code used in Zope 3 in sync as much...
Fixing the Zope release process Fixing the Zope release process In this article, I will identify problems with the Zope release strategy, attribute blame, propose solutions, and offer some hope for the future.In this article, I will identify problems with the Zope release strategy, attribute blame, propose solutions, and offer some hope for the future. While this article contains criticism, I have great faith in the Zope developers, and I hope the criticsm will...While this article contains criticism, I have great faith in the Zope developers, and I hope the criticsm will...
Paul Everitt asks Paul Everitt asks Should Zope 3 support XML?Should Zope 3 support XML?. The answer is of course, . The answer is of course, yes, it shouldyes, it should, and, what's more, , and, what's more, yes it willyes it will, and , and InfraeInfrae will be one party working on it. In fact, we've will be one party working on it. In fact, we've already worked on italready worked on it.. Paul is right in that many Zope 3 developers,...Paul is right in that many Zope 3 developers,...
By Martijn FaassenBy Martijn Faassen • • 2005-03-112005-03-11 • • Tags: Tags: zopezope I'm happy to announce the release of Five 0.3 today, the Zope 3 in Zope 2 integration component. This release has great new features, including edit forms and add forms based on Zope 3 schemas. See I'm happy to announce the release of Five 0.3 today, the Zope 3 in Zope 2 integration component. This release has great new features, including edit forms and add forms based on Zope 3 schemas. See the...the...
Paul Everitt and I have long been communicating about the role of XML in the CMS world. Recently, he posted the following Paul Everitt and I have long been communicating about the role of XML in the CMS world. Recently, he posted the following blog entryblog entry and asked for my opinions per email. I started writing a mail back to him, but then I realized I have a blog now too... and asked for my opinions per email. I started writing a mail back to him, but then I realized I have a blog now too... Firstly, I want the UdellCMS too. :) Infrae has been trying to Firstly, I want the UdellCMS too. :) Infrae has been trying to
As Andrew Tannenbaum said, "The nice thing about standards is that there are so many to choose from." Apparently he followed this up by: "And if you really don't like all the standards you just have to wait another year until the one arises you are looking for."As Andrew Tannenbaum said, "The nice thing about standards is that there are so many to choose from." Apparently he followed this up by: "And if you really don't like all the standards you just have to wait another year until the one arises you are looking for." So how does one choose? Why adopt one specification and not another? There are many possible reasons, and this article is an attempt to catalog some of them.So how does one choose? Why adopt one specification and not another? There are many possible reasons, and this article is an attempt to catalog some of them. In the...In the...
Last december Phillip Eby (PJE) posted a Last december Phillip Eby (PJE) posted a a nice ranta nice rant. It was . It was widelywidely quotedquoted in other Python-oriented weblogs; people liked especially the rant against XML. It was indeed a very nice rant. It still... in other Python-oriented weblogs; people liked especially the rant against XML. It was indeed a very nice rant. It still...
The Relax NG support seemed to be working for lxml, until I tried it with a complicated case: a modularized XHTML Relax NG schema.The Relax NG support seemed to be working for lxml, until I tried it with a complicated case: a modularized XHTML Relax NG schema. Turns out the approach I was taking of turning an ElementTree tree into a Relax NG schema is only of limited use. Relax NG schemas often use Turns out the approach I was taking of turning an ElementTree tree into a Relax NG schema is only of limited use. Relax NG schemas often use includeinclude to load other schemas from the filesystem or URLs as well, and that wouldn't happen as by then any information of where the original XML document was is lost. I could find... to load other schemas from the filesystem or URLs as well, and that wouldn't happen as by then any information of where the original XML document was is lost. I could find...
The recent cElementTree release is causing some waves in the Python/XML community. It started when Uche Ugbuji posted The recent cElementTree release is causing some waves in the Python/XML community. It started when Uche Ugbuji posted The Python Community has too many deceptive XML benchmarksThe Python Community has too many deceptive XML benchmarks to his blog. to his blog. The effbot was not amused, as could be witnessed by his comment on it, and the blog entries:The effbot was not amused, as could be witnessed by his comment on it, and the blog entries:
Some progress over the last few days:Some progress over the last few days: 've added basic Relax NG support to lxml.'ve added basic Relax NG support to lxml. lxml.etree introduces a new class, lxml.etree.RelaxNG. The class can be given an ElementTree object to construct a Relax NG validator:lxml.etree introduces a new class, lxml.etree.RelaxNG. The class can be given an ElementTree object to construct a Relax NG validator: >>> f = StringIO(''' >>> f = StringIO(''' ... <element name="a"; xmlns="http://relaxng.org/ns/structure/1.0" ... <element name="a"; xmlns="http://relaxng.org/ns/structure/1.0" ... <zeroOrMore> ... <zeroOrMore> ... <element...... <element...
Today I merged the backpointer branch with the lxml trunk, and have been cleaning up a bit more. In particular I've cleaned up some useless extra subclasses that were only necessary to introduce weak reference support to the various classes. I've now removed these subclasses, which cleans things up a bit more.Today I merged the backpointer branch with the lxml trunk, and have been cleaning up a bit more. In particular I've cleaned up some useless extra subclasses that were only necessary to introduce weak reference support to the various classes. I've now removed these subclasses, which cleans things up a bit more. This also resulted in some performance gains! Not very spectacular ones, but still noticable:This also resulted in some performance gains! Not very spectacular ones, but still noticable: nodereg backptr ...nodereg backptr ...
Such progress a few days can bring. Just last week the lxml.etree performance figures on ElementTree operations like Such progress a few days can bring. Just last week the lxml.etree performance figures on ElementTree operations like findallfindall lost out badly to pure Python code. So badly, it was pretty embarassing: lost out badly to pure Python code. So badly, it was pretty embarassing: findall('//v') on ot.xml findall('//v') on ot.xml ElementTree: 0.13 s ElementTree: 0.13 s cElementTree: 0.11 s cElementTree: 0.11 s lxml.etree: 1.9 s lxml.etree: 1.9 s All three here are using the same All three here are using the same findallfindall implementation (in... implementation (in...
Since some people seem to be actually reading this and some progress has been made, I thought I'd give a report of what's been happening with lxml.Since some people seem to be actually reading this and some progress has been made, I thought I'd give a report of what's been happening with lxml. Since last week, I've added a lot more of the ElementTree API, such as the .find() function and friends, by directly using the code from ElementTree.Since last week, I've added a lot more of the ElementTree API, such as the .find() function and friends, by directly using the code from ElementTree. I actually am running the ElementTree and cElementTree test suites now. I still need to disable some tests, but...I actually am running the ElementTree and cElementTree test suites now. I still need to disable some tests, but...
Update: lxml got quite a bit faster since this entry, see Update: lxml got quite a bit faster since this entry, see herehere.. I've been testing I've been testing findall()findall() performance on etree versus ElementTree/cElementTree. cElementTree and even ElementTree are quite a bit faster than lxml.etree at this stage. Possible causes of performance loss: performance on etree versus ElementTree/cElementTree. cElementTree and even ElementTree are quite a bit faster than lxml.etree at this stage. Possible causes of performance loss: lxml.etree has to maintain proxy objects over the underlying libxml2...lxml.etree has to maintain proxy objects over the underlying libxml2...
In a discussion with Fredrik Lundh about his (c)ElementTree parser performance benchmarks on the lxml.etree implementation.In a discussion with Fredrik Lundh about his (c)ElementTree parser performance benchmarks on the lxml.etree implementation. On my work linux/athlon box, with Python 2.3, I get the following figures:On my work linux/athlon box, with Python 2.3, I get the following figures: library time space library time space ------------------------------------- ------------------------------------- ElementTree 1.2.4 1.3 s 14000k ElementTree 1.2.4 1.3 s 14000k cElementTree 0.8 0.12 s 5500k cElementTree 0.8 0.12 s 5500k etree (trunk) 0.12 s ...etree (trunk) 0.12 s ...
The lxml.etree implementation of ElementTree, on top of libxml2, is getting there now. It features automatic memory management and quite a bit of ElementTree compatibility. Not all of the ElementTree API has been implemented yet, but enough for many use cases.The lxml.etree implementation of ElementTree, on top of libxml2, is getting there now. It features automatic memory management and quite a bit of ElementTree compatibility. Not all of the ElementTree API has been implemented yet, but enough for many use cases. I did discover in the process of debugging that you need a recent version of libxml2 to make it all work without memory errors; apparently earlier ones, like the version in my debian unstable (2.6.11),...I did discover in the process of debugging that you need a recent version of libxml2 to make it all work without memory errors; apparently earlier ones, like the version in my debian unstable (2.6.11),...