Win a copy of the Definitive Guide to Plone (2nd Ed.)

Over on Arecibo, we are running a competition to win a copy of the Definitive Guide to Plone (2nd Ed.). Details are over here.

Definitive Guide to Plone (2nd Ed)

The day the first edition of the Definitive Guide to Plone arrived, my brand new baby Emily was pictured with the book. Here she is at 5 with her sister Samantha holding the second edition. I can't claim any credit for the second book, it was all done by the fine people at Redomino.

I had a quick glance through and it looks really good, I hope it does well - Buy from Amazon.

It's amazing to think what has happened in my life since that book came out and this picture sums it all up for me.

Vancouver Plone User Group

After a lengthy absence the Vancouver Plone User Group is meeting for a get together. We'll be meeting at Workspace on the 20th at 7pm. Details here. See you then.

Putting weather onto a site

Just following on from the last post about Cleartrain, someone asked in irc which product to use to put the weather onto their Plone site. There's a bunch of old ones out there. The simple answer is, don't. Just do it in Javascript, for example:

    <div id="weather-feed" />
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
    
    google.load("feeds", "1");

    var rss = new Object();

    rss.url = "http://weather.yahooapis.com/forecastrss?p=";
    rss.node = "CAXX0518";  // vancouver

    function initialize() {
        var feed = new google.feeds.Feed(rss.url + rss.node);
        feed.load(function(result) {
          if (!result.error) {
            var msg = document.getElementById("weather-feed");
            msg.innerHTML = msg.innerHTML + '<div>' + result.feed.title + '</div>';
            for (var i = 0; i < result.feed.entries.length; i++) {
              var entry = result.feed.entries[i];
              var link = '<a href="' + entry.link + '">' + entry.title + '</a>';
              var para = '<p>' + entry.content + '</p>';
              msg.innerHTML = msg.innerHTML + '<di >' + link + para + '</div>';
            };
          }
        });
    };

    google.setOnLoadCallback(initialize);
    
    </script>

This pulls in the weather from Yahoo, via Google. See http://developer.yahoo.com/weather/#request for more.

Example:

Plone Bootcamps

Been a couple of months since we've heard from Joel, but he's back. The best trainer I've seen has got a new bootcamp in San Francisco in April. If you want to learn about Plone it's probably the best training you can get: Plone Bootcamp.

Content Mirror

Had the pleasure of heading down to Seattle yesterday to talk at the Seattle Plone User Group. Lovely group of people I seem to be knowing well, but was still a pleasure to put a few new faces to names. I had a talk about Content Mirror prepared. Unfortunately some people did come to hear about jquery, that was going to be the topic of my talk, but to be honest doing cross-domain work in JSONP in Plone is cool but only a 5 minute talk.

Anyway the talk went really well. I have to say I was quite pumped afterwards, I've had a string of bad talks. One lesson there is talk about what you feel passionately about. I do think Content Mirror is pretty cool and would love to use it on sites. Or perhaps just Plone as the new uber-Django admin interface.

The talk is here: Content Mirror

Plango, my quick Django front end for it is in: SVN, although this might get moved over to the Content Mirror repository.

People then kindly put up with me talking about the next version of Arecibo and that seemed to go down well too. Short on time right now, so I'll get a more coherent post together when I have time.

Afterwards a nice Thai dinner. Thanks for looking for after me folks.

Cleartrain improvements

Got a nice email from Joel Davis with some great improvements for Cleartrain. These included:

  • Not showing all the past trainings, I checked my view and I had the query going back 20 days, that was silly.
  • Showing past trainings a little differently.
  • Making it clear you can do and then remove multiple filters.

One nice feature that isn't clear is that the RSS, Atom and iCal feeds all alter depending upon your filters. So a list of all say Python or Django training, is pretty easy. I need to find a nice UI way of improving that. Anyway thanks for the feedback on Cleartrain, it's been good so far, let's keep the trainings rolling in.

Another thing I found interesting is the number of trainings on Plone. Although Plone isn't necessarily the most popular project out there, plone.org does provide a very good platform for providing information on training. Something that some other projects (eg. Django) do quite differently.

New plone book

The new book Practical Plone 3: A Beginner's Guide to Building Powerful Websites is out. Haven't read it, but it sounds like it fills an excellent need - beginners who need to know how to use Plone. If you are new to Plone, read this first and then Professional Plone Development second.

Probably something I should go and read.

GloWorm 1.0

A big round of applause to the WebLion team, version 1.0 of GloWorm has been released. Anyone who develops skins for Plone should go and get that installed now.

Download from PyPi, original announcement here and the movie is here.

He's back

Shane Hathaway is a great Zope developer from many years ago - well respected for great code. After four years of doing other stuff, he's just posted that he's back doing Python, Zope and Plone, that's great news.

Clouseau 0.8.3

Last week a new version of Clouseau came out that fixes issues that occurred with using Clouseau with buildout, namely a locals directory didn't exist and users didn't have permissions to save to the local directory. These should both be fixed and hopefully the python setup.py incantation worked so it's on Pypi correctly.

Clouseau on Plone.org

Code swarm

Plone star Chris Calloway has been devoting time and lots of CPU time to generating code swarms for Plone and the Collective. It's been kinda fun to watch them and I confess look out for my own name. If you watch the Collective one, it's crazy with so many people. But I did spot an interesting one, bobbling around in the middle of the Collective for a while is troberts, that Toby Roberts of Enfold Systems to you and me. No-one is probably more surprised than Toby - a non-programmer and the Plone Foundation treasurer - to see himself in there. Go Toby!

Moving from Django to Plone

Just found John DeRosa's blog: another Seattle person who's going for Plone. I single him out because he's going from Django to Plone and provides lots of insight. Since I've specifically gone the other way, there's some interesting things in there.

I swear blind I've chatted and worked with John in the past (anyone who has met me realises I have the people and face recognition skills of a goldfish) - after a glass of wine, I'll remember. Anyway it was surprising to read the blog posts and then figure out who it was. Some comments:

Inventing a word that’s vague, and confined to just your knowledge domain, is never betterish than using a realish word.

+10. He was talking about "folderish", but at the Plone conference in Naples I was complaining about the profusion of silly terminology in Plone. And yes "folderish" is used throughout my book, I followed the herd, what can I say? One of the few things I thought Moodle got right was that it didn't have portlets, viewlets, mambots (mambo) it had "HTML Blocks". Might not be 99% accurate but I got what it was first time.

Regarding buildout, XML and other configurations:

The problem with these other formats, aside from inherent syntactic problems, is the required mental context-switch when you move from one to the other. One moment your brain is in Python mode, and the next moment it must switch to XML mode. And some moments later, it has to switch to [insert idiosyncratic format here] mode

Lot's more on his site and one more to add to my RSS reader.

WebGUI compared to Plone

Donna Snow is implementing a WebGUI site and going to be blogging about it. I'm interested in this because Donna is a really nice person, but also because Donna is in interesting position in the Plone hierarchy.

Donna (and please correct me here if I'm wrong) runs a small consultancy producing web sites for customers. She doesn't have a huge army of technical programmers behind her. She focuses on finding a solution for a client mostly using existing tools that can be customised to her user. At the Planning sprint we she was placed in a category called "integrators".

This area was one of the reasons Plone became successful. Nothing raises the profile of a product like a small band of vocal integrators producing large numbers of excellent sites. This large number of small companies is a boon and contrasts strongly to say Alfresco.

A large number of competent and happy integrators is key to Plone, without them it will wither at either end as it slips into the domain of more and more technical obscurity know only to a few. They are one of the key bridges between the techies and customers.

But she's been feeling the pain with Plone 3 (she singles out viewlets).

As someone who works directly with clients in determining their requirements, there hasn’t been a single theme that we’ve done that didn’t require extensive changes to the viewlets (including different banners on inside sections and changes to drop downs in horizontal nav based on where you are located, etc etc). The fact that we have to turn off viewlets first, then add the new one and have to change at least 4 files to do that?? configure.zcml, viewlets.xml, viewlets.py and umm there was one more.

I've been feeling the pain with Plone 3. I took a step back at my Plone 3 product created by paster and the amount of stuff in there is absolutely mind boggling. From the sheer size of and number of files to the multiple concepts in there. Compared to Django, it is just shocking.

Anyway I'll be interested to see how that goes, what things she learns and hopefully the community will listen.

Forgive me Plone

Dear Plone,

I'm sorry what I said about you today and I wanted to write a note to apologise. Perhaps it's just me, in fact I know it's me. It's not you, I'm just not good enough for you.

I know recently I've been flirting a bit with Rails, but that's over now, we won't be seeing each other again. Yes you've found out I've been seeing Django and I have to admit, it will always have a special place for me. I like to think that we are big enough to able to allow others into our relationship and from this we can grow.

You've taken me many places. When it's good, it's good. It's like a dance, we fly together across the dance floor in harmony, creating beautiful things whilst other frameworks look on with envy from the sides.

But then today, we had a bad day and it's my fault. I had no idea that fiddling with setup was so fragile. Sometimes I wish you would complain and let me know what the problem was, a relationship thrives on communication. If you don't tell me the problem, how can I help? And when do you complain, can you make it a little clearer? What's with this bizarre error about getActionObject of DynamicViewTypeInformation being marked as private and why can't I put .cpt's in browser views and why is my Zope 3 style content type about 20x the size of my old one and why when I pdb into eggs do I get sent into /home/steve which doesn't exist and...

I'm sorry, I'm off again.

I hope you can forgive me for the neglect I've given you over the last year or so. It's been a while since we've done anything new and exciting together. I'll try to be a better person and get things right more often. We can save this relationship if we both work at it and I'll keep trying.

Hugs and see you in the morning.

Update: the next day was a good one.

Getting out of the Plone sink

For a long time I've been doing Plone, recently it's been some other stuff. Coal face web development with Rails, a bit of management, and now back to Zope 2. Before Plone it was Zope 2, Perl and ASP (in that order going back a while).

Brief aside, recently I noticed ActiveState has moved to upgrade and move to a new platform one of my old applications, the ASPN Cookbooks. The new one is Django (I think). But that Zope 2, MS SQL application lasted around 7 years, not bad in our highly transient world.

A while ago I left Enfold and announced I was looking for the next thing to do. There were quite a few opportunities offered to me, all but two were essentially Plone consulting. A colleague who just moved to Google, said "What's it with you and Plone?". Indeed.

Going back further in time I had the, now dead, ZopeZen site and that had a fabulous Google ranking. Well it did for Zope. Since then my Google ranking has been steadily dropping, probably due to the quality of my rambling posts. This all contributed to me being known as a Zope and Plone expert. Part of the reason for moving on from that was that I really wanted to get away from being a Zope expert?

The result: lower Google rankings, low traffic, a small (but nice and helpful subscriber base) and less exposure.

I now face this challenge again and what happened with my blog, will be happening with my career. In 2009 I'll be starting up some new projects and trying to move away from focusing on the Plone world. That's going to be an interesting challenge.

We need more developers

One common things I've heard in the Plone community, is that people are always struggling to find developers. This is often seen as a real problem not only for the consulting companies but also for Plone itself. This problem is common to many development areas, but the unique nature of Plone means that it's situation is rather exacerbated.

For quite a while I've had an opinion that people often jump on the "we need more developers" mantra when they don't need to. The term developer does mean an awful lot of different things to different people. To me a developer is a skilled professional that can solve complicated technical problems by developing solution. Alright that's a broad definition, would just programmer be better?. In the past I've worked with many people I would call good or even bloody great developers (thinking specifically here of Mark Hammond and Sidnei da Silva). I've also worked with some bloody incompetent ones and fired them.

There's a few things that I think are true about good developers:

  • They are hard to find.
  • They are hard to keep.
  • They can be hard to manage.
  • They can be productive.
  • They can solve problems others can't.

Given that, I do try and approach the problem of finding more developers a different way. Instead by focusing on the developers you have got, more productive. A developer cannot hold a company to ransom and has to be reasonable, but likewise the company has to recognise that once you've got that person, hold onto them and keep them productive.

How can you make a developer more productive? Well first off I'm making an assumption that lots of people are cheaper than those good key developers we all need. If that is the case, the main way is push work off on to other people.

System administration is absolutely crucial. The other day one of my virtual machines stopped working whilst I was on a tight deadline. After looking in despair at that virtual machine, I wandered over to a sys. admin. and ten minutes later it was fixed. That saved me around 4-8 hours of work. Time and time again I've seen developers pulled into things I would classify as system administration.

One example is (from what I gather) at Google where allegedly there's a technical support centre's all throughout the office. Laptop's broken? Pop on over and we'll give you a new one. At ActiveState I remember that new servers were not a problem. The cost of a new server compared to the cost of a developer sitting and waiting for something to compile makes the decision clear, get the server.

Testing is a crucial part of the development cycle. Yet testing in small companies is often left to the developer or project manager. Testing is a discipline in it's own right and beyond unit tests can easily be pushed off on to testers.

User interface creation is an annoying one to me. Time and time again I've had designers plonk a few photoshop designs on me leaving me to figure how its possible to create those designs in HTML and CSS or whatever we are building it in. Or I've got to spend hours and hours creating forms or other things. Things that could be done by a quite junior developer who knows how to code HTML.

Specifications may or may not need a developer to write. Finding the right line between specifying too much and doing too little is something that I've been called on in the past. However, I still feel that 90% of the time, specifications I am given as a developer have just not faced a technical or critical eye. What if X isn't working what happens? What fields are you wanting on that page, how long are they, what are the validations. Simple things that are taught in most design courses.

The more of the specification work that can be done prior to a developer looking at and starting coding, simply eliminate more of the developers time and reduce the developer - project manager - client cycle. It still will happen, but it will happen less.

Administration is harder, but sometimes there's clear things that can be done by others, this one should be reasonably obvious.

Tools that they want to use. Everywhere I've worked has been really good on this, although I do think that many places need to focus more on training. If you are spending all this money and time on a developer and they want a Mac? Get them one. They want a big monitor? Come on how much do these things cost in the big picture.

This is all hard to measure of course, but I'm curious on other opinions. When people say they are short of Plone developers, who are they looking for gods like Martin Aspelli? If you were able to prise them away from their job, would you be able to keep them happy? Would they stay? Would it make sense to have them spend all their time reading crap specifications (if they get any), chasing stupid system administration problems or coding HTML? Or would you want them solving the hard problems?

Gloworm rocks

Move over Clouseau there's a new tool on the development block. Gloworm provides a:

poke-that-thing-on-the-page-and-tell-me-more-about-it-style

interface that allows you to poke and play with objects right in the user interface, a la Firebug.

Congratulations and good luck getting this out the door. Then once that is done we should take Clouseau and mash the two together (including Gloworm's much nicer style) to provide some serious kick ass development tools. Great job Eric!

Plone File Uploader first release

The Plone File Uploader is a little experimental product I wrote using Adobe Air. It's designed to all you to just easily drag and drop multiple files into your Plone site. After installing, tell it where you want files to go and then just drag and drop files in, it queues them up and sends them to your server as HTTP PUT's (with all the problems that involves in Plone).

It's in it's beta stages and done more for fun than anything else. It doesn't recurse folders - if it you drag in a folder it just grabs the files from that folder and uploads them. It ignores sub folders, shortcuts etc. If you want a super duper upload tool, go look at Enfold Desktop.

Note: A few people tried it on Windows and Plone 3 including Kaell in irc (thanks) and we got differing responses, including this bug. So it looks like some Plone or Zope combo's might need patching to allow PUT's.

Requires
Adobe Air installed on your computer and access to a Plone site.
Tested on
Plone 2.5, OS X.
Download
uploader.0.2.2.air

New words for the dictionary

plu·zzy

  • The warm fuzzy feeling you get on navigating to a web site, only to find unexpectedly that it is in fact built in Plone. The opposite of ploop.

pl·oop

  • Normally felt after encountering pluzzy. The slight let down felt, when you realize that the site in question is not in fact Plone. Usually felt when you realise the web site is in fact using Drupal, Typo 3 or something else PHP.

Sadistic cooks

Never seen this before or since, but I think someone at Whole Foods was having a joke. They provided otherwise excellent food for the planning summit, but come on cold brussel sprout salad? I tried valiantly to eat it, honest.

Plone Planning Summit

Just got back from the planning summit in California. I have to admit I did come into the summit unsure what would happen. Most sprints that I've been too involve a bunch of people sitting around staring at laptops and doing code. In fact I generally find them quite unproductive (the best sprint ever was the Vancouver sprint that produced Clouseau and had 3 attendees).

This summit started out with some great requests, no laptops and please pay attention to each other. Looking around the room there was a very good selection of people from the community, integrators, core developers, implementors, trainers and companies. The summit then went through a bunch of exercises, focusing on who Plone's users are, specifically focusing on what organisations categories there and what Plone provides for them.

Then came some really useful help from Mark Corum who provided marketing help and advice to all the Plone people there, thinking of specific tasks like "elevator pitches" for selling Plone in sixty seconds. Finally there was a review of competing systems, including Drupal, Sharepoint and Alfresco.

The only real problem on the first day was its length, starting at 8am and finishing around 9pm, that caused most of the Europeans (me included) to be falling asleep over the last hour or so. It's not easy being 8 or 9 time zones out, and having a 16 hour trip there the day before and then staying awake through that.

The second day focused on what I think a lot of people where there for, discussing developer issues. This was for me was a really interesting part because I have real specific views about certain things. Others have different opinions and it was fascinating to see how often, or not, people agreed with my opinions. We did this through SWOT analysis of the various components and lots of sticky dots to go with the analysis.

I often got to control the pen, so wrote down lots of things in the analysis. Things that surprised me, things I've worked on the past include: replacements of the ZODB, fixing portal transforms, external editing in Word just weren't rated that much by other people. The product vs framework didn't get discussed apart from one meeting which I sadly missed, sounds like there will be a proposal from Paul and Wiggy soon. Things that cropped up all over the place include: buildout (overwhelmingly positive, but a few problems), a need to have a consistent and standard way to push Plone to cheap web hosts and the need to keep working on documentation (Jon will be posting full details of this analysis at a later date).

Socially of course there were a few good things: a few good games of pool, some fine scotch from Geir, a bit of drinking with colleagues and I got see my old friend Neil Kandalgaonkar who now works at Yahoo. I managed to get some good sushi and there was a bit of drinking with plans for more drinking. Every Plone sprint or get together like this reminds me how damn good the Plone community and how much I really do miss working regularly with those people.

The last day was a little quieter with formulation of the analysis, to plans for action which various people can take out to the community and see if we can move things forward. I got there a little late for one, so managed to miss myself being nominated for a few things.

As it turned out the goal wasn't really to come out of this meeting with a firm plan and the developer in me always want's something concrete. However what happened was very important, we all got a chance to listen to each other, understand other people's viewpoints and come to some consensus about what things are important. Which then provides more of a consensus for moving forward in the future with the community.

Thanks to: sponsors who were able to send me to the summit. Jon Stahl for doing a great, great job of running the summit. Google for providing food, facilities and a great toilet.

Best quotes from the summit:

"We don't twinkle much in Kentucky", Kurt Bendl's reaction when Jon Stahl explains the process of twinkling to express agreement.

"You know how to do sticky dot voting right?", blank stares and shakes of the head, "No way" exclaims Jon Stahl.

Planning summit pt. 2

Looking forward to flying off to the Plone planning summit tomorrow. Following on from my previous post, what's the one thing I'm hoping we can come up with? A list of values by which all other decisions can be based upon. With those set of values, we can move forward making key decisions based on agreed criteria.

Quite a few people have sponsored me for going to the summit. Firstly Blue Fountain and secondly a host of people who sponsored the summit and then was able to help me out with some of the costs, namely: CIGNEX, Alexander Pilz, John Habermann, George Bray, Christopher Johnson, Aleksandr Vladimirskiy, Boussard Youenn, Headnet, Jean-Pascal Houde, Jesse Snyder, Florian Schulze, Graham Perrin, Virginio Fanelli, Denis Mishunov, Totsie Marine, Pompilio Fanelli, Jennifer Crandall, Thomas Zeleny, Tannic, Inc., Tobias Ahlers, Yves Moisan, Matthew Latterell, Jon Stahl, Patrick Shaw, William Murphy, Eric Steele, Scott Paley, Vincenzo Barone, Niels Steen Krogh

And finally there's a bunch of people who organised this who need thanking: Alexander Limi and Jon Stahl. Especially Jon Stahl, who once again is demonstrating that he is able to contribute a huge amount more to Plone than most people who do write code.

But let's face it there's one real question we are all curious about for the sprint.

...given that about 75% of Plone developers use Macs, how many people will be showing off a new Macbook Air at the summit?

Product or Framework

I'm heading off to the Plone summit next week and a few people have sent me their opinion on what they'd like to see change. Personally it comes down to one simple thing for me.

Every time I hear Paul Everitt at a Plone conference, he asks a question "Is Plone a product or a framework?". A whole bunch of people raise their hand and it rarely ends up being a product. I've always wanted to jump and ask the questions this way: "Is Plone currently a product or a framework?" and "Should Plone be a product or framework in the future?".

For me this is a key question because it then provides a reference to allow decision making. Products focus on easy install, ease of use, documentation. Frameworks tend to focus providing a base for solutions to be built on top of. As consultant I've seen lots of the latter, such as, building large numbers of archetypes for collecting highly stuctured content, something that would be a doddle in say Django. I've seen them because people struggle and come to me for help.

There is a fundamental problem here in that technical computer consultants and specifically the ones providing Plone solutions sell their time. There is little recognition of the time spent setting up and installing Plone, that's so easy. So the money comes from selling the customisations. Making Plone more of a product, alters the source of customisation revenue. It doesn't mean there's no money, it just to be made in different sources such as - analysing a clients needs configuring Plone correctly, maintenance and the like. But the people most keen to make a change, maybe have the most to lose.

Once we've got a focus of which we want to pick, we can then provide a base for questions I would have like:

The web based customisation story for Plone has been a great success. And a great failure.

If it's a product how much web based customisation should be allowed?

If it's a framework that requires a set skill level to go near Plone, how much skill level is needed.

As an example (and this is heresay, I haven't done this in Plone 3) I believe making a portlet in Plone 3 is now a lot more involved. Which way does this move Plone? It's easy to manipulate and configure portlets through the web so score one for a product. It's a saner setup for a backend, so score one for the developers, but I think it's a minus one for a framework. Consultants have a much harder time making portlets (well at least till its figured out). So perhaps portlets have been a win for Plone and moving it to a product.

If we know where we want Plone to go we can start to frame technology decisions. And for the record for many years I've thought of Plone as framework that is getting closer and closer to being a product.

If you have opinions you want me to voice there like, moving it all to JavaScript, then let me know.

Update: changed the sentence "Making Plone more of a product, reduces the customisation money", to "Making Plone more of a product, alters the source of customisation revenue".

Open Source CMS FUD

The other day I received this email about why open source CMS's are not being considered for a project. Honestly I just laughed when I saw them, but here goes. This is the list of things a closed source CMS is meant to bring:

It is likely to have a number of features built in already

What open source CMS's don't? If you go to CMS Matrix site and compare them you'll find Plone compares very well. In fact, if you look at the list, there are far too many features in some of those products.

This also doesn't consider a simple point, what if the feature doesn't do what you want? A term like "Groupware" which Vignette (for example) has is meaningless to since its so vague. How do you propose to change that in a closed source CMS? It would likely be easier in an open source CMS. Before you choose a CMS pick those features you really need and then research how those are done in depth on your platform.

It is likely to be more reliable and faster to implement

Really? What is that based on? If I remember a Tony Byrne talk a while back, the majority of closed source vendor money is made off of consulting dollars. It's likely to be more expensive. The implementation all depends upon the skill of the people implementing it. Some are incredibly easy to simple installs. There are a whole bunch of very bright people out there who can install an open source CMS. Shockingly enough, there's a whole bunch of cowboys in the open source and closed source world who can make a mess of it. At least in the open source world you can pick your implementor.

Documentation and training are usually significantly stronger

This is the only one I'll partially agree with here. Plone is the exception here, there's lots of training and documentation available for Plone it. But for most open source projects it's not great. Again though this creates a common fallacy, that documentation in closed source projects is better . And rarely is it great, in fact time again I've heard "I paid $50k for this system and all I got was this PDF, if i'd used Plone I would have 3 books and plone.org". Before you pick a closed source vendor, ask about this.

It is easier to find developers trained in a particular closed source CMS

I don't buy that. Yes finding Plone developers can be a challenge, but that's because Plone is doing very well and most people who know Plone are gainfully employed. But I can take Drupal off the shelf and then find any PHP programmer which are as common as muck and have them work on it. A few months ago I was configuring Moodle quite successfully.

Of course, if it's a closed source CMS, you are assuming it as at least configurable or can be changed. That's not always the case. Open source CMS's have all the code available and the API's apparent to you. That is far, far more power than you will ever need.

Conclusion

Minor point: the original comments said commercial not closed source. I use closed source since there's an implicit assumption from the here that commercial == closed source. I don't like that - Plone, Drupal, Alfresco and other CMS's are clear big commercial successes.

These comments are quite sweeping statements and seem to be based on belief that "commercial" is better. Perhaps its based on the idea that if you buy something, you will get everything you need and if not you'll have someone to complain to. Or perhaps its that all open source projects have terrible marketing.

I was pleasantly surprised to note that the list did not mention price. No where does it mention this and I 'm glad because I don't believe a good open source implementation is a huge amount cheaper. Just because you don't pay licensing fees doesn't mean you shouldn't expect to pay for implementation, analysis, development and training. Paying for this from a good company will make all the difference.

Moodle technical choices

Had the pleasure of meeting Martin Dougiamas the other day. A thoroughly nice chap and had a brief chat with Martin about Moodle. I confessed I had problems with Moodle, being used to an object model like Zope. A few interesting things:

  • Many years ago Martin tried his first prototype in Zope, he likes Python and thought it would be a good fit. He got ZODB corruptions (this was about 2001-2) and gave up on the ZODB and Zope.
  • Having it in PHP makes it very easy and accesible for new users.
  • By not needing root access Moodle has been installed on lots of hosts and often cheap hosts with little hassle.

All good points and certainly Moodle is a roaring success.

What Plone can learn from Rails

This was a talk given to the Plone conference in Naples 2007. Rather than just plonk slides online that don't say much here's the talk as a blog post with detail added.

Lennart's and Phillips excellent talk
Before going any further, refer to Philip and Lennart's excellent talks, these cover the areas slightly differently and focus on different things. All going down the same path though.
Why am I doing Rails?
Because it completely suits the model of sites we are building at Blue Fountain, factory automation. In a factory spitting out widgets it's perfect for a relational database, it's not content management.
Comparing apples and oranges
Yes they are different and solve different problems but do share a similar space.
Easy to be envious of Rails
Rails has done well shooting up in terms of hype and use. It's got a large following and crowd and is generally doing very well. It's much more popular than Plone, how did it get there?
Really hit a new audience
It caught all the people do LAMP, Struts, ASP and so on. All those technologies that don't really provide any infrastructure at all for a complicated site, just ability to hook code up to databases. Those are hard tools and a move to Rails make sense to them. We moved to Zope, those people moved to Rails. Zope provided too many barriers and problems to people so they dropped off.
The Gartner Hype Cycle
Just a brief note that I believe Rails is hitting "The trough of disenchantment". It's had the hype and it's coming down into the trough. There's been some FUD about Rails and some problems, but it's solving them and moving on, it's a natural cycle.
For me Plone is coming out to the "The slope of enlightment" and is moving forward. It's had the rough time and the FUD and it's only getting better. This might be a personal statement rather than have any real backing.
Plone: The best is yet to come
It really is. Plone 3 and the future is bright.
A shallow learning curve
Back to Rails, it has a shallow, simple learning curve. Bite off what you want and move onwards and upwards, being more productive. There are new things to learn but most of them can be bitten as you need to.
The Z shaped learning curve
Need we say more, we know it's possible to go badly.
Keep the learning curve shallow
To get the hype, to win developer's hearts, to get the mind's we have to keep the learning curve shallow. Allow people to bite off what they can. Keep moving forward, keep getting productive. With this in mind, here's a few things that can really make a difference...
1. Product refresh is damn helpful
You have to be able to make a change and see it happen instantly. If it doesn't it's too slow. Rails, Django, Jboss they all do it. We have to keep it. It's kind of gone away until Andreas wrote RefreshNG (to confirm this), this should be required and maintained by us. Without it we make it really hard for new people.
2. New terms are confusing
We love making up new terms for everything. We have an overwhelming array of these. Rails has some but it's kept them followable and understandable (mostly). Let's do the same.
I don’t know what a portlet is. Or a component, module, block, or snippet. The last system I evaluated had something called "mambots" which, to me, sounded like robotic assistance for breast-feeding.
http://adaptivepath.com/ideas/essays/archives/000365.php. We've already got enough barriers as it is, for example ZODB etc... let's stop throwing more up.
3. Every new technology introduced is a barrier
We've got lots of new technologies in Plone. Mostly kept internal to Plone and not used elsewhere and that starts to create problems for people coming in. Ask the people who do training or write books there's soooo much there. Do we really need it all? Can we ditch DTML in our CSS and just use Python string replacement? We all worry about the Zope 3 learning curve, add in Plone and it's very, very tough.
Rails has things like .rxml and .rjs and quite frankly every time I've seen them used I've thrown them out in favour of Ruby libraries or just straight Javascript. These things don't help although they keep developers happy in writing them.
Keeping things to ourselves (eg Clouseau) is bad. If we've got something new going into Plone would it make sense to try and make it a standard say: if it's going into core it must be used in one or two other places first. It might not last but at least we haven't kept ourselves isolated.
4. Is Zope 2 a barrier?
It's getting to the point where we can say all the wonderful goodness over the last few years is on the one hand making it possible and the other taking it away. Rails appealed to the crowd by doing a few things. It didn't try to do all the things Zope 2 does (application server, database, web server) and that stuck in people's brains. Philip and Paul showed of running Zope 2 with WSGI this is an important step in the right direction.
A quick rummage around the ZMI and things become apparent. Ever had anyone look in *Control Panel* > *Products*. Why do we still have all Script (Python) and External Methods? Cruft and it's time to look at Zope 2 and find a way to get past the ZMI and the all in one mentality.
Fun text on button in moodle
I thought this was really bad in Moodle
Use carefully -- it can make Apache/PHP crash ...[snip]
and then I thought of the ZMI and the terrible messages text and things that can happen in there.
Can we live without the ZODB?
This is where most of the chatter ended up at. I'm not smart enough to solve this but people out there can. In the last few years SQL Alchemy and other tools have really come along and provided a huge amount of good code for us to build off. Rumour has it Jim said that the ZODB in Zope 3 is optional. That would be great.
So much work by so many people has gone into solving the whole ZODB thing. Currently you have two choices, love it and use it or don't use Plone. Trying to bend a RDBMs in there is not possible without pain or lots of knowledge. Continually justifying the ZODB to enterprise customers is a pain. Continually justifying to new developers is a pain. It's a barrier that slows the adoption down. I do like the ZODB I use it a heck of a lot. Plone with an RDBMs will still be Plone, it won't be any different, you won't be writing SQL much. But you will walk into a client and not have to justify it again and again.
Rails uses SQL and using something that everyone knew and could grok instantly gave them a huge leg up.
5. TTW got us here and must continue
Rails doesn't have through the web development, so this might be a little off course. But Rails is aimed at a different market than us. Through the web development is fast, easy and accessible for new people. They love it. It's the ZODB persistence of code, the restricted python and other things that are the problem.
ZODB persistence, Restricted Python sucks
If we remove these items so that through the web means just editing file system stuff through the web AND can easily be turned on and off (eg. Django's admin interface) we might just have something that meets all the worlds.
6. Trying to separate presentation is good
It is hard, it is a struggle and it's something I got wrong in the past. I used to believe that allowing people to write Python write in a template is the only way to go. I was wrong. You can see this in lots of Rails code, Rails preaches not doing this but it happens and it sucks. Learn from Rails and fight the good fight, keep as much Python out of templates as you can.
7. Community is a huge difference
Rails has a very big community. But what I've seen of it has not been as nice and helpful as Plone and this experience has been shared by others. Keep it friendly guys, it's the secret weapon over most other projects and over every single closed source CMS.
No matter how fun Rails is I will always miss #plone
Geoff Davis.
8. Avoid making Plone do everything
Rails doesn't try and do much at all so again slightly off topic. But the rise of Django, Turbo Gears, Pylons and Rails helps Plone. It stops us trying to do everything in Plone, we shouldn't be. Know when to say no. Plone is now a framework, but it is going to become a product, it has to.
9. Keep unit tests easy to write
Rails creates them for you (via rake) and runs them for you quickly and easily. I really like the fixtures in Rails, they are so damn helpful. Haven't spotted anything like that in Plone yet.
10. Scaffold code generation
Most people I asked mentioned this as a huge win. The scaffold generation creates a convention that is easy to follow. Going and grabbing someone else's code is easy to track down where things are. You can look at the URL and go find the controller or model that is relevant in no time. It might be hell when you get there but at least you can easier than Plone. Philip mentioned this as something he would like to see happen in Plone, I agree.
11. Marketing really does help
Seen those Rails "20 minutes build a whole site" demo? Really they do scaffold and end up with nothing useful in terms of HTML. If I die without writing another HTML form I will be a happy man. So Rails ends up with a bunch of projects for creating forms for you. Once you've gotten past that 20 minute quick hit, it is pretty easy to look at the scaffold HTML and move on, bite the next bit.
Yet I (and many others) came into Rails thinking it would do it all magically for me and it didn't. We've got to explain to people that Plone can be extremely fast and productive and market it. If we could get Sean Kelly to sit down and just do screencasts all the time we would be doing great, help the foundation fund this effort.
12. More through one command
Although I've sworn at rake a few times when it did the wrong thing, having one command to go and do everything is nice. It could be zopectl or paster or whatever as long as it is all in one place.
13. Maintenance
Can be easy to find code in Rails due to scaffold as noted. Does this make Rails easier to maintain, probably. However let's point out that Rails has been around for less than Plone and does generally a simpler job.
14. We need a 37 signals
37 Signals get's lots of attention and press. Lots of people use backpack and other things. They've done well at selling themselves and selling Rails. The Plone world is full of lots of brilliant people and companies - on par with any other company out there. But none of the Plone companies get recognition outside of the Plone community. That's a shame.
If we could get a company getting that recognition and getting people into Plone without them knowing it's Plone until they have chance to build any prejudices, we can get a win. This will increase the buzz and energy about Plone as they realise it can do lots of useful things.
What Rails can learn from Plone
In the end I think this would be a good talk, Plone has done a lot of things well.
And by the way if you are thinking of using Rails...
Don't* ... use *Django* instead. Or *Grok*. Long live Python.

Plone Conference in Naples

Spent the last few days at the Plone conference in Naples.

The conference was run very well, it had a very good set of talks and everyone I spoke to about the talks found they had a good mix of talks. It's probably one of the strongest sets I've seen at a Plone Conference. Some of the talks I saw were:

  • Lennart's talk on what Zope did wrong and where to go next.
  • Philip's talk on opening up Zope and Plone to other Python programmers.
  • Veeda's talk on project management.
  • Matt's talk on testing workflow.
  • Duncan's talk on testing workflow.

Without exception they were good talks. Matt's was interesting from a technical point of view because they covered the exact thing I had to do about 9 months ago. Testing workflow resulting in a huge amount of test to test all the possible variants. Matt takes a table outlining workflow permissions and builds test out of it. My next steps from that I had planned all those months ago was to then build another table outlining transitions. Take the two and you can build a workflow.

On that point a while back I wrote a patch of testrunner.py that outputs the results as xml, so then you can send the data to a database. Buildbot can track this, but I wanted something that I can run repeatedly and record what happens (and use the same xml to record Selenium, Rails and Django unit test results). I asked around but no-one knew, is there a -xml or some other magic flag that already does this?

Last day I had my talk and I completely flubbed it. Apologies to everyone, I had in my head that it was starting at 4pm, not 4.15pm. I waited for a few more people to come and started around 4.05pm. I'm really sorry that was just a stupid mistake. I think I need to start using Keynote a lightning talk is working well in S5 but I'm struggling with notes to stay on focus. To make up for all those people who missed it, I've turned the talk into a blog post (once I've got it linked up I'll post in the next day or so). Sigh I swear I had the talking foo once, but this time I lost it.

The conference was very well run, although I always had problems figuring out the agenda (see previous paragraph) and the lunch queues were very long. A credit to all involved, well done and have a good rest. Thank you, I'm glad Liverpool didn't win :)

For us the only downside was Naples is not for quiet space loving law abiding Canadians. Trying to get 2 kids down a street whilst kids on mopeds using cell phones ride down the sidewalk is not good for the blood pressure. Never, ever, ever, drive in Naples. Unless you are in tank. Preferably don't walk either.

Clouseau at the Plone Conference

Just about to leave for a weeks holiday prior to the Plone conference in Naples. I'll be there and I'm still touting Clouseau as my fun project. So I'll probably run a birds of a feather session on Clouseau during the conference, but if anyone is interested in a few "corridor sprints" during the conference, then let me know. I'm game for any new features I don't have to write :).

See you there.

Clouseau 0.8.1

Clouseau 0.8.1 fixes a few things like up and down histories in Safari and autocomplete which weren't triggering at just the right point. Mostly looking after Safari users, this should feel a little nicer for you. Tested in Plone 3.0.1 and seems to work ok.

Download: Clousea.0.8.1.zip

Plone and the Google summer of code

Read/Write Web, a excellent blog I follow had a post which excited me "SilverStripe - Open Source CMS Has Support From Google". For a moment I thought wow, that's unusual for Google to support a CMS, whats going on until I found out it meant:

Another interesting thing about SilverStripe is that it recently got support from Google, in the form of being a part of the Google Summer of Code project

Oh is that it? Bear in mind that Plone has participated in the the Summer of Code for at least 2 years and has had quite a few contributions. So has Django. In fact the list is quite long and among the CMS's in there includes: Plone, SilverStripe, Joomla, Drupal and probably a whole bunch of other one's I've never heard of.

So calm down everyone, nothing much has changed. If you want to talk about CMS's take a look at Plone which in maturity is far beyond most of the other CMS's you've seen in the comments.

Plone 3 user manual

Yay! Plone 3 user manual. Congratulations to those involved and long may it be updated.

Generating Archetypes

Go back about 4 years to the first Vancouver Python and Zope Conference. Jim Roepcke, Joel Burton and I are on the beach looking out the mountains. I'm arguing what I really want is to be able to write content types in XML. None of this messing about with Python. Have something that is simple to jump into, easy to maintain and can allow tech savvy users easily get into Plone.

As ever, with great dignity and grace Joel kindly beat me down. What happens when you want to do something not covered in the XML, those custom methods to do processing can't be expressed in Python. My response was something about making CDATA blocks containing Python, not very convincing.

It seems Vidar has done something like this: http://svansson.org/articles/Generating-Plone-Products-without-UML. Congratulations to Vidar for that, it's very cool and I was quite excited by it. Well done.

But I have confess I've still got this nagging problem. It's not XML or Python. It's a whole new syntax. That worries me for a few reasons:

  • Support of the syntax is always up to us.
  • Creating and supporting any tools for it are up to us.
  • It's another barrier to newbies, a new syntax, a new acronym.
  • My brain is full. I can keep Python, SQL, Ruby, PHP (yes don't ask), Javascript, Page Templates and bash in my head, but my brain is mostly mush and I can't keep it all up there.

If you look at the syntax my first thought it looks kinda like Python. Why aren't we doing it in Python? That's mostly because the Python generating a content type sucks. It's long and hard and fraught with syntax errors and boilerplate code. But wait why are we doing code generation at all? Philip hit this point on the head:

Why do we actually have to generate all that code? I mean, it's ok to use paster for creating the absolute bare minimum boiler plate (directories, setup.py, etc.). But why is all the rest so verbose? Shouldn't we perhaps reduce all that verbosity? Shouldn't the common case simply be less to type so that we need less tools to get us there?
http://www.nabble.com/Re%3A-Gems-of-GSoC-p12486755.html

That .wsl code is not very removed from Python. Is that easier or harder to write than Python? One of the success of things like Django and Rails is that the code is actually pretty simple and hence not all scary to look at. A sample model for Django on that would look like this... first create the project:

django-admin.py startproject contactbook
cd contactbook
manage.py startapp contacts 

Model code is simple:

from django.db import models

class Contact(models.Model):
    homephone = models.PhoneNumberField()
    address = models.TextField()    
    
    class Admin:
        pass

Don't forget to turn on the admin interface in urls.py (uncomment one line) and you are done. This isn't a who can write the application in the least lines of code competition, but it is interesting when I look at the power I can get from Django with way less than Archetypes.

I can give up on the XML, it's not the answer to everything. But simple and easy to write Python code allows:

  • Lower barrier to entry, if you are using Plone you need to know Python anyway.
  • We don't have to maintain any tools, parsers etc.
  • One less acronym and tool for new people to worry about.

With simple code, removing the boiler plate you have something that hopefully is easy to get into and easy to use. But once again, congratulations Vidar on a very good development that hopefully gets some traction behind it.

Plone 3 tiny changes #3

This looks like a tiny change in the user interface, but represents a larger change behind the scenes, adding in locking. When you hit the edit page a WebDAV lock is placed on the page. When the browser leaves the page the lock is removed. If the user just closes the browser the lock times out. Having the page locked means it cannot be edited by anyone else.

The lock is visible in the Zope Control Panel under WebDAV locks. I haven't spotted anywhere else in Plone that shows the locks and allows you to clear them or see what's locked when, if anyone does, let me know.

Plone 3 tiny changes #2

Quite often in applications I've wanted to show just a warning or some information back to the user. In older Plone's there was one choice, that bright orange box that screamed "idiot!". Now you can give your status message a level and there will a suitably bold message.

addStatusMessage(_(u"Changes saved."), type='info')

Choices are: info, warning or error.

Plone 3 tiny changes #1

There's talk about some of the big changes in Plone 3, but lots of little things that were changed in the UI as well.

In Plone 2 there was drag and drop re-ordering on the folder contents page. That was implemented by clicking and holding on the item. To access the item you just clicked. That was the theory but in at least one release of Plone IE had a real problem with this, meaning the click to access the item didn't work. Plone 3 makes this much more obvious by clearly seperating out the click to access from the drag to order. The latter is now those 2 colon's on the right.

Clouseau for Plone 3

Just released Clouseau for Plone 3. Most of the changes had happened during the beta, with thanks to roeder and wiggy for those. There's still of course a few long running bugs that need to be solved, but on the whole little change.

Download: Clouseau.0.8.zip

Plone 3 is released

Plone is released. This is probably the biggest release in a long time and from an end user point of view, the largest number of visible changes and tweaks. Well done to all the team involved.

On the top end most visible are the ajaxification of most of the content editing and the addition of versioning. Behind the scenes its all the Zope 3 stuff and rewriting of all the architecture. I don't understand most of that stuff, so I can just hope its all a good thing. But if you haven't tried Plone in a while, should take another quick peek at it.

Plone 3.0 is coming

It's all tagged in SVN and ready to roll out on Tuesday, once all the installers and press releases are done. I know its a cliche, but this truly is the biggest and best Plone ever with lots of new features that absolutely rock if you haven't seen it in a while.

Six Feet Under

At the recommendation of Calvin, I started watching Six Feet Under a while back. We haven't got through season one yet, since Blockbuster's postal movie system is now grinding to a crawl taking us days to get DVD's (oi wake up Blockbuster). But we have really enjoyed this show, it's great fun. Calvin formed Six Feet Up, legend has it the name is related to the show.

Thanks Calvin, and if you haven't watched it, I recommend giving it a try.

Addendum: as noted by a few people my original post had a fantastic typo "Sex Feet Under". The show is mostly about sex, must have had that on the brain. Calvin mailed me to say the name "Six Feet Up" was before the show and came from his mother's family.

Google application server musings

I've been using Google Calendar and Google Spreadsheets a lot recently. For a while now I've been wiating for Google comes out with a box, just like the Google search appliance, that does all that. Go to your company place this box in the rack and you'll have an internal copy of these applications.

It won't be free of course, but it will work easily and it will be good. It will easily compete with offers from Microsoft and the like. It will completely change the course of CMS's in an intranet environment. This is still an area where Plone does rather well of course. With Plone you can get a very sophisticated intranet quickly. There are differences, but if you throw together Docs, Spreadsheets, Calendar and Search - add in a home page that pulls all the information together and you've got something pretty sophisticated.

Which then begs the question, could you take all that and then spit it out as an external website. Would it make sense to ditch trying to write our own beautiful UI's and find someway of taking documentation out of these areas and pulling it together into one site. At its very simplest it could be a script that say:

  • Grabs all events in a certain calendar.
  • Grabs all documents in a certain folder.

Then applies a nice template to the output and spits out a static site, you'd have a site as good as most of the static sites out there. What you'd struggle on is things like teaser or snippets or complicated pages. But this could start to be a compelling replacement to systems like Plone. Maybe. It's certainly a curious idea. But once that Google Office Appliance comes out, if I was a big intranet or office vendor, I'd have a plan.

Addendum: I'm waiting for someone to tell me the box exists and I'm idiot for missing it.

ClearSpell 1.1 Released

Just spent some time hacking on ClearSpell 1.1, getting spell checking working on Kupu was frustrating me so I went back to this code. Once I got accessing the DOM of an iframe sorted it was pretty straightforward. So it now works with Kupu and the spell check links are now much more unobtrusive. Would need some testing before it goes in the wild, still prototype code, but getting there.

Download: ClearSpell.1.1.zip

Plone WebDAV

Come up a few times on the list. The difference between using WebDAV and not is that in a WebDAV client when you get a page, you want to get the source to edit the page, not the HTML with the rendered template. To do this Plone tries to determine if you are using WebDAV or not, one way is to use port 1980, the WebDAV source port in zope.conf.

An easier way I prefer is adding your client to the zope.conf so that it recognises your client as WebDAV. This makes a simple change for Zope's sitting behind a proxy. To use finder with Plone add the following webdav-source-clients line and then restart:

<http-server>
   webdav-source-clients WebDAVFS
   address 8080
</http-server>

Debug in Script (Python)

Golly completely missed this one, thanks Daniel Nouri.

It allows pdb.set_trace() inside Script (Python) objects.
enablesettrace

When it's only two lines of code, you have to bang your head and say, why did I think putting a pdb.set_trace() in a Script (Python) would be any harder.

LookRSS

Kamal just released LookRSS, which uses XSL to format Plone's RSS into something pretty. If you are looking for a really ancient and crotchety version of this, try PloneRSSNG, which did this as well. Just a few years older and probably way worse.

The reason I didn't check it all in to Plone then was I based it on 3rd party code and so as such couldn't agree with the letter of the Plone contributor agreement. Since then the Plone 3rd party area in SVN was created, a place to contribute anything that you didn't write (eg: I recently threw some of PloneS5 in there) and the whole situation cleared up.

I would really like to see LookRSS, PloneRSSNG or something similar go into Plone. Something needs to be improved with the user experience for clicking on RSS links, my mother can't understand it right now. Would be nice little PLIP for someone to get started in Plone.

Clouseau SVN moved

To having a trunk and tags, each release will now get tagged. If you've got svn:externals or other pointing at Clouseau's repository, give it a tweak.

PloneSilverCity 2.0

Almost 3 years ago I wrote that thing for the book, PloneSilverCity. I've started to rewrite that for 2006 and update it a bit. From the readme:

This is a complete rewrite of PloneSilverCity from the original version of Definitive Guide to Plone. Thats about three years old, so I wanted to rewrite it to ensure that - we use best practices including unit and functional tests - we use archetypes as opposed to CMF types I'm retaining the name, although we'll no longer use SilverCity, instead we'll use dpSyntaxHighligher, a javascript solution. This allows for zero dependencies. If you have Zelenium installed, when you install this product it will create a set of Zelenium tests that you can run pointing at the tests/selenium directory. To run those tests go to http://yoursite/zelenium/silvercity, but note you must have a user name and password admin/admin.
Got to fix up that Zelenium stuff. When it's done I'll plonk on plone.org, for now... SVN: http://svn.clearwind.ca/public/plone/PloneSilverCity (svn co http://svn.clearwind.ca/public/PloneSilverCity)

To everyone who's tried to figure out Zope 2

Sorry. It's been about 6 years (eek) since I first went to Zope so it's hard to remember. These last few days I've been fixing up a Ruby on Rails application. More on that in later posts. Of course fixing up a complicated app as your first dive into any framework is the worst thing that you can do. Unfortunately I think this is what commonly happens to most developers. I've spent ages fighting my way through implicit variables, variables that don't exist in any source file but magically appear, Ajax that will never work in IE, badly thought out solutions relating to performance, lack of documentation, multiple ways of defining the same thing and well, Ruby. I can sympathise with new Zope users who probably say the exact same thing. It will get better, everyone's learning these lessons. Zope 2 get's better as you learn more, I'm sure Ruby on Rails will too. Stick with it.

Clouseau 0.3 released

Now features context sensitive Python prompt. Not sure about the API of an object? Just click the little Clouseau button and a Python prompt will appear with context mapped to the actual object you are looking at. Other changes:

  • Add in utils library, for things like utils.commit()
  • Cleaned up tooltips, no longer raise an error
  • New tooltips code from pyShell
  • Changed icons
Note: because I have no Windows computers anymore this is not tested on IE. May work, help needed for that. Upgrades: do an install and uninstall from the add/remove products section of the Plone control panel to get the context sensitive help. Download: Clouseau.0.3.zip

Handling dir in Clouseau

I was playing with dir in Clouseau today. The problem is that in all tools this useful function returns around 600-900 when run on a Zope object. The reason I thought was acquistion and then I realised it wasn't its just Zope 2's huge inheritance tree. So how can this be more useful?

  • Integration with DocFinderTab to find say the dir of the top 4-5 or five classes, most of the time you don't need to go too deep.
  • Easy introspection of an objects Schema for example:
    
    
Any other things that are possible to do? ie: give me code or sane ideas please

Conference donation

I just completed the accounts for the the conference and sent the money to the PSF. As per the blog post:

The Vancouver Python Zope User Group has donated the proceeds of the 2006 Vancouver Python Workshop, amounting to CAD$5770, to the Python Software Foundation. The PSF thanks the user group for their support.
Thank you to everyone for coming. After two conferences, we are now totalling almost $10,000 in donations to the PSF.

Deprecation warnings under control - almost

Thanks to a helpful post from Sidnei, I'm almost there. I've got two zope.conf files now, a zope.conf and a zope-full.conf. The former has logging minimised, and deprecation warnings blocked.

<warnfilter>
    action ignore
    category exceptions.DeprecationWarning
</warnfilter>
<warnfilter>
    action ignore
    category exceptions.Warning
</warnfilter>

<eventlog>
  level error
  <logfile>
    path $INSTANCE/log/event.log
    level error
  </logfile>
</eventlog>
The latter is the default zope configuration file. I then copied runzope to runzope-full and pointed it to the new config file.
CONFIG_FILE="/opt/Plone-2.5/Instance/etc/zope-full.conf"
...
exec "$PYTHON" "$ZOPE_RUN" --configure=$CONFIG_FILE "$@"
So now I can:
  • Do runzope and get only errors when the occur, here's a sample:
    /opt/Plone-2.5/zope/etc $ ~/plone-bin/runzope
    2006-09-14 10:33:54 ERROR Zope.SiteErrorLog http://localhost:8080/test/sampleError
    Traceback (innermost last):
      Module ZPublisher.Publish, line 115, in publish
      Module ZPublisher.mapply, line 88, in mapply
      Module ZPublisher.Publish, line 41, in call_object
      Module Shared.DC.Scripts.Bindings, line 311, in __call__
      Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec
      Module Products.PythonScripts.PythonScript, line 323, in _exec
      Module None, line 1, in sampleError
       - 
       - Line 1
    ZeroDivisionError: integer division or modulo by zero
  • Do runzope-full and get all the errors, useful for testing before a release or debugging.
However one left on the plate: zopectl debug does the latter:
~/plone-bin/zopectl debug
Starting debugger (the name "app" is bound to the top-level Zope object)
2006-09-14 10:52:07 WARNING Init Class Products.ATContentTypes.content.base.ATCTFolderMixin has a security declaration for nonexistent method 'manage_copyObjects'
2006-09-14 10:52:08 WARNING Plone Deprecation Warning 
The CMFPlone.MemberData class will be removed in Plone 3.0
2006-09-14 10:52:08 WARNING Plone Deprecation Warning 
CustomizationPolicies are deprecated and will be removed in Plone 3.0. Please use GenericSetup extension profiles instead.
2006-09-14 10:52:08 WARNING Plone Deprecation Warning 
registerSetupWidget is deprecated and will be removed in Plone 3.0.
2006-09-14 10:52:08 WARNING Plone Deprecation Warning 
registerSetupWidget is deprecated and will be removed in Plone 3.0.
2006-09-14 10:52:09 WARNING Init Class Products.PloneMultisite.MultisiteTool.MultisiteTool has a security declaration for nonexistent method 'inheritDefaultSubscriptions'
2006-09-14 10:52:09 WARNING Init Class Products.PloneMultisite.MultisiteTool.MultisiteTool has a security declaration for nonexistent method 'inheritDefaultSubscriptions'
2006-09-14 10:52:10 WARNING Plone Deprecation Warning 
CustomizationPolicies are deprecated and will be removed in Plone 3.0. Please use GenericSetup extension profiles instead.
2006-09-14 10:52:10 WARNING Plone Deprecation Warning 
registerSetupWidget is deprecated and will be removed in Plone 3.0.
>>> 
...and the same with zopectl run. Still needs a bit more work.

Deprecation warning: deprecations need to deprecated

I don't know about you, but the deprecation warnings when Plone starts up are getting kind of annoying. Here's the trimmed down version:

2006-09-11 22:44:25 WARNING Init Class Products.ATContentTypes.content.base.ATCTFolderMixin has a security declaration for nonexistent method 'manage_copyObjects' 2006-09-11 22:44:28 WARNING Plone Deprecation Warning The CMFPlone.MemberData class will be removed in Plone 3.0 2006-09-11 22:44:30 WARNING Plone Deprecation Warning CustomizationPolicies are deprecated and will be removed in Plone 3.0. Please use GenericSetup extension profiles instead. 2006-09-11 22:44:30 WARNING Plone Deprecation Warning registerSetupWidget is deprecated and will be removed in Plone 3.0. 2006-09-11 22:44:30 WARNING Plone Deprecation Warning registerSetupWidget is deprecated and will be removed in Plone 3.0. 2006-09-11 22:44:37 WARNING Plone Deprecation Warning CustomizationPolicies are deprecated and will be removed in Plone 3.0. Please use GenericSetup extension profiles instead. 2006-09-11 22:44:38 WARNING Plone Deprecation Warning registerSetupWidget is deprecated and will be removed in Plone 3.0. .. and a few removed (see below)
Further if you set etc/zope.conf to only show errors and above you still get a few:
/opt/Plone-2.5/lib/python/ZServer/utils.py:33: DeprecationWarning: The zLOG package is deprecated and will be removed in Zope 2.11. Use the Python logging module instead. LOG('ZServer', severity[type], message) /opt/Plone-2.5/Instance/Products/Marshall/handlers/__init__.py:38: UserWarning: libxml2 not available. Unable to register libxml2 based marshallers warnings.warn('libxml2 not available. Unable to register libxml2 based ' /opt/Plone-2.5/Instance/Products/CMFSquidTool/Permissions.py:19: DeprecationWarning: The module, 'Products.CMFCore.CMFCorePermissions' is a deprecated compatiblity alias for 'Products.CMFCore.permissions'; please use the new module instead. from Products.CMFCore.CMFCorePermissions import ManagePortal /opt/Plone-2.5/Instance/Products/CMFSquidTool/__init__.py:38: DeprecationWarning: The product_name parameter of ToolInit is deprecated and will be ignored in CMF 2.0: CMFSquidTool icon="tool.gif", /opt/Plone-2.5/Instance/Products/CacheSetup/config.py:23: DeprecationWarning: The zLOG package is deprecated and will be removed in Zope 2.11. Use the Python logging module instead. LOG(PROJECT_NAME, INFO, msg) /opt/Plone-2.5/lib/python/OFS/Application.py:835: DeprecationWarning: __init__.py of Products.ExternalEditor has a long deprecated 'methods' attribute. 'methods' will be ignored by install_product in Zope 2.10. Please use registerClass instead. DeprecationWarning) /opt/Plone-2.5/Instance/Products/MemcachedManager/__init__.py:8: DeprecationWarning: The zLOG package is deprecated and will be removed in Zope 2.11. Use the Python logging module instead. LOG('MemcachedManager', log_level, summary, text) /opt/Plone-2.5/Instance/Products/kupu/plone/__init__.py:32: DeprecationWarning: The product_name parameter of ToolInit is deprecated and will be ignored in CMF 2.0: kupu icon="kupu_icon.gif", /opt/Plone-2.5/lib/python/Signals/SignalHandler.py:39: DeprecationWarning: The zLOG package is deprecated and will be removed in Zope 2.11. Use the Python logging module instead. zLOG.LOG('Z2', zLOG.BLATHER, "Installed sighandler for %s" % ( /opt/Plone-2.5/lib/python/OFS/subscribers.py:74: DeprecationWarning: Products.CMFPlone.QuickInstallerTool.QuickInstallerTool.manage_afterAdd is deprecated and will be removed in Zope 2.11, you should use event subscribers instead, and meanwhile mark the class with DeprecationWarning) /opt/Plone-2.5/lib/python/OFS/subscribers.py:74: DeprecationWarning: Products.PluggableAuthService.PluggableAuthService.PluggableAuthService.manage_afterAdd is deprecated and will be removed in Zope 2.11, you should use event subscribers instead, and meanwhile mark the class with DeprecationWarning) /opt/Plone-2.5/Instance/Products/PluggableAuthService/plugins/BasePlugin.py:71: DeprecationWarning: isImplementedBy has been renamed to providedBy return interface.isImplementedBy( self ) /opt/Plone-2.5/lib/python/OFS/subscribers.py:74: DeprecationWarning: Products.PlonePAS.plugins.cookie_handler.ExtendedCookieAuthHelper.manage_afterAdd is deprecated and will be removed in Zope 2.11, you should use event subscribers instead, and meanwhile mark the class with DeprecationWarning) /opt/Plone-2.5/lib/python/OFS/subscribers.py:74: DeprecationWarning: Products.PlonePAS.plugins.role.GroupAwareRoleManager.manage_afterAdd is deprecated and will be removed in Zope 2.11, you should use event subscribers instead, and meanwhile mark the class with DeprecationWarning) /opt/Plone-2.5/lib/python/OFS/subscribers.py:74: DeprecationWarning: Products.kupu.plone.plonelibrarytool.PloneKupuLibraryTool.manage_afterAdd is deprecated and will be removed in Zope 2.11, you should use event subscribers instead, and meanwhile mark the class with DeprecationWarning) /opt/Plone-2.5/Instance/Products/Marshall/config.py:33: DeprecationWarning: The zLOG package is deprecated and will be removed in Zope 2.11. Use the Python logging module instead. LOG('Marshall', level, msg)
So first off, how do we supress these errors that are presumably using the logging module? Secondly how about using the power of the internet and making a web page that describes what to do. I don't know what marking the class actually means, but I'm sure if someone put up a page explaining it, and a link we could figure it out eg:
Products.kupu.plone.plonelibrarytool.PloneKupuLibraryTool.manage_afterAdd is deprecated see http://blogs.nuxeo.com/sections/blogs/florent_guillaume/2005_11_08_events-in-zope-2-9
(which btw the way is a useful blog post on the subject, hiding down there in the Google results) Do I really need to see all this? Can we put this into a unit test that will do something like test --show-deprecations? Deprecation warnings in products I develop are useful, but I fear, I like most or just ignoring these logs. If that's the case we are losing the battle.

Ajax services

A while back I posted on the end of web services. In this post I was proposing that Web Services as traditionally represented are dead and a new batch of Ajax based web services will arise. The thing is most people don't actually do "Web services". Most of the time it's used to improve the UI experience locally for users and the idea of consuming remote data doesn't happen. This is because of a technical problem. A client can't make a request to a remote server in Ajax. There are many ways around this on the client, including using form posts and some toolkits Dojo abstract that out. There is a way to do this at the server as well, using say Apache's Proxy pass. That allows the request to still appear in the local domain, but behind the scenes Apache is doing the forwarding for you. Once you've got this done you are opened up to the world of web services. Any server that provides a datasource or interaction via Ajax or XML is open to be used on your client. For example:

  • Want to show an RSS feed in your site? Well if you don't want to actually parse the data on the server, why not parse it on the client, using an Ajax RSS reader (example)
  • Want to show the weather on your site? You don't want to store that on the server, you just want a pretty graphic, pull it using one of these (example 1, example 2)
  • Want a spell checker in Plone, but don't want to install the spell checking libraries on your server because its a pain? Then get the spell checker from ClearWind.
This approach is more akin to the Web services of old, it abstracts away services into other servers and allows you to re-use both ends of the equation. Clients for displaying widgets can be used in multiple places and the servers can be re-used in a service model. That's why I'm calling it Ajax Services. An Ajax Service is a:
  • An Ajax based client that can be re-used in multiple different sites.
  • A server side service that can be consumed by an web site using the client, not just the local site the site was intended for. The service uses REST for incoming requests and XML for responses, allowing easy Ajax integration in a client.
One example is the Ajax Proxy for Plone. This is a server side proxy that lives inside Plone. It takes incoming requests from the client and proxies them on. There are a few nice things this gives you: caching, security, transformations and load balancing to name a few. Once you've got a generic proxy for your server you can load up your client with services pointing to multiple places and get true web services back to your client. Here's an example:
  • The browser fires off the Ajax request, normally a GET or other HTTP verb.
  • The request comes into your local server (for example Plone) on the same domain.
  • The local server does some processing of the payload (for example caching) and figure's out where to send it on to.
  • The local server forwards the request on to the remote server and waits for a response.
  • The response is received and processed.
  • The response is then passed back upstream to the browser and the user gets the data.
Apologies for the ramble, I'll try to be more coherent and release more code soon. For the moment here's two releases: AjaxProxy is a tool for Plone that acts as a generic Ajax proxy allowing you to proxy any request on through Plone. ClearSpell is a spelling tool for Plone that provides spell checking on any input or textarea. Unlike previous spell checking, there is no dependencies other than AjaxProxy, the ClearWind spell checking service provides the spell checking libraries. More to come...

Clouseau testers?

Any chance I could get some testers for Clouseau? I think I'm ready for a first release and want to check it works. During the sprint we had IE, FF on Linux and Safari testing it... I made a few changes and heard rumours that "it didn't work" without anyone providing any feedback on what that meant. Recent builds are only tested on OS X though. So if you've got 5 minutes and can throw it in your test environment that would be great. (And if that instance is publicly accessible, great, then I can test too). Zip file: http://www.agmweb.ca/files/Clouseau.0.1.zip (or from the collective) Update: requires Zope 2.9+. Tested on Plone 2.5. Update: what's Clouseau?.

Vancouver Python Workshop (Day two)

For me the second day started with a nice hang over. It quickly subsided but, ouch. One nice thing about having the Friday night key note is that we can use that to give out over 80% of the badges, making the next day an easy run for registration. Any payment problems, or new registrations just shove off till the Saturday morning. It gave me a chance to chase down paypal questions, re-print badges and so on. 


The morning started off with Guido's keynote and a preview. Again I missed it all for 2 reasons, 1) Paul left the projector at his house, so I went to get it and 2) the great mini-DVI saga. The great mini-DVI saga involved me bitching about Apple a heck of a lot. Briefly: Macbook comes with a mini-DVI port and no connector (btw, the MacBook Pro comes with one). I figured I'd pop in and get one prior to the conference. But wait, my local Mac store didn't have any for the 1.5 weeks prior to the conference. They did have a mini-DVI to DVI cable, so I thought I'd grab the DVI to VGA connector off my Mac Mini. But wait the DVI pins on the mini-DVI to DVI are different, they don't fit. What! I found one cable in all of Vancouver, it was being used in a demo in London Drugs and I begged the guy to sell it to me. 

Why do you do try and screw us like this Apple?

 I mostly got to look after the web track of course. This track was actually not as well as attended as I'd hoped. I think a few things worked against us here. The proximity of the Plone conference didn't help, along with Andrew Burkhalter's wedding. Andrew is one of the main movers and shakers in the Seattle user group and had his wedding the same weekend. Congratulations to Andrew by the way. The talks were good focusing on what people did, not theoretical bits. One peice of advice to a few talkers though, we are at a Python conference, we all know Python kicks ass so don't repeat that. Bashing other languages is fine and good source of amusement though :) 

Hearing that Python is winning over departments in major companies like Ford is good. Another real highlight was Ian Bicking's talk on WSGI. Unfortunately I had to do deposits of all the money collected at the conference and such so missed quite a bit of it. Ian prepared his own hand outs and gave a great talk with lots of detail. 

Next up I gave my talk to the beginner track. Really it was a talk from Joel Burton and his excellent bootcamp series. There were lots of questions that were fantastic and let me go off the beaten path. As is ever the case with good slides, they seemed to predict many people's questions. Then it was off to the barbeque once again at Locarno Beach, an absolutely beautiful location. 

A few people still complained that the price was steep, my only complaint is the theoretical cost for the kids, having 2 kids who came, it would seem absurd to charge them $10 each when all they ate were about 5 chips and small bit of burger. Next time we'll chat about that one before hand. Given the cost of food, renting the location, the bbq's and the other amenities, I think its a fair price. Either way the food (wild salmon) was excellent. Once again thank you to Brian Quinlan's family that gave up many hours to help make the BBQ happen and cooked the food. 

The 6 people staying at my house, then dragged me off for drinks in my neck of the woods. We got to see the fireworks in English Bay from the deck of the Rusty Gull in North Van. After that there were more drinks and good night was had by all. I think it was about 3 am when I hit the bed. Ugh.

Vancouver Python Workshop (Day one)

So after the sprint and after my anniversary (see previous posts), next day was the start of the Vancouver Python Workshop. As with last time, the organisers were Paul Prescod, Brian Quinlan, myself and we added Jean-Luc Peyret. I handled all money and registration again. As with last time it was held on a bank holiday in the summer. I still argued that it's a bad time to have it, I'm much rather not be in Vancouver. However for many people travelling here, I know it's the best time to see Vancouver and take a holiday.


For the organisers there were a few key differences this time. The first and seemingly stupid one was that this was the second time we had done this, so we knew what everyone was actually doing, which was nice. The second was that the space at ActiveState was no longer available so we had to get a hotel and hence pony up more money. In the end this turned out to be fine but at one point there was that real stress for about 1 week when we didn't have enough numbers. 

As the organisers (and mostly ClearWind) was bank rolling the conference (that's a great deal, if there's a loss we swallow it, if there's a profit it goes to the PSF) we were stressed. Of course that didn't happen and just before the early bird ended tons of registrations rolled in. That's one to remember for all you organiser's out there, the distribution of registration is not even. A huge amount roll in before early bird ends about 1 month before the end of early bird. You then get another peak the week before the conference. 

Being organised I closed off registration and did all the badges on the Wednesday, two days before the conference. Of course as I predicted the simple mail merge to produce badges took 3 hours as we fought again and again with printers that didn't want to work with computers. Always something. Once they were all organised alphabetically (yes I've seen several conferences with badges not done that way, was able to sit back and do all the last minute panic Friday things. There weren't any fortunately. Friday came and went smoothly, giving out the badges and t-shirts at the beginning worked well. 

As ever the bbq tickets pose a logisitical pain as people alter and change, but I can cope with that. Of course I didn't actually get to hear the keynotes, since I was outside doing the registration for the half a dozen people that showed up late. I hear they went well with Guido van Rossum talking about Python's future and Jim Hugunin talking about Python.NET. A thanks to Toby Donaldson of SFU for organising space for us at the downtown campus as part of the computing science departments commitment to Python. Next it was the Steamworks for a beer and some food. I never made Steamworks last time and it's a nice venue.

All in all the Friday night went well. I had a gaggle of people crashing on my floor and so there was the occasional beer in the back garden until past 2 in the morning. Ugh, didn't everyone know I had to be in Burnaby at 8 the next day?

Browser based Python prompt for Plone (almost)

We've almost got Clouseau's first release out. This is the product of the Vancouver Tool Sprint, which we held just before the Vancouver Python Workshop. Yes, I'm pretty far behind on my blog postings. Unfortunately for this blog I'm off to Vancouver Island and Long Beach for a few days of surfing and relaxation. It's been a hectic week and time for some down time. Anyway at the tools sprint we wanted to improve the state of tools in Plone for developers and focused in on my favourite, PloneShell. The sprint consisted of Richard Amerman , Leonardo Almeida Rochael and yours truly. However PloneShell has a few problems:

  1. It uses wxPython
  2. It takes 10 minutes (seems like it anyway) every time you want to start it up
  3. I couldn't get wxPython installed on my Mac because the new Plone installer now doesn't seem to include it
  4. It needs ZEO
  5. The code goes into many wxPython layers and gets pretty convoluted
So we got sidetracked and wrote a new tool for inspecting your Plone site. Inspecting > Clouseau - got it? So its a browser based, Ajax powered, Python prompt. Inside your Plone site. Install as a product, run Plone in debug-mode and go to site setup > Zope inspector and then you get a Python prompt in your browser. You can inspect, alter, commit changes and do everything you'd do in zopectl on an platform. So before you get too upset yes it is a security hole, we know that, it's a development tool.
  1. It will only run in debug mode (unless you change a file system config variable), so by default it will only work on your development site.
  2. It requires Zope Manager access to use it.
  3. There is a config variable on the file system to disable it.
So you've got past that? Good. What are some of the advantages of this?
  • Collaborative debugging. Wait oh my golly. Two or more people can now share the same session. I opened Safari and Firefox at the conference and had two people working on the same Python prompt, that went down well. Imagine debugging those #plone questions now!
  • No dependencies. None, zero, zippo. Easy install.
  • No platform problems. Tested on Linux, Windows, OS X and Safari, Firefox and IE.
  • No ZEO. Will work out of the box in any install.
  • (Not implemented yet) A prompt in the context of objects.... looking at an object in Plone and want to see methods on it?
  • (Not implemented yet) Namespace variables browsable in a portlet....
  • And so on....
Clouseau is currently in the collective and we'd like any feedback on this. You can get it here: http://svn.plone.org/svn/collective/Clouseau. Product page has been made and when that release is ready it will go there. What needs to be fixed for a full release, so don't mail us yet: multi-line support and return values (noticed a few Nones can appear in the UI). What we need to do for the next release: auto-complete, tool tips, easy multi-line entry. This is not a sprint to write something then forget about it. All of the sprint members were excited to be working on this tool, it is pretty damn cool and we were all pumped to be working on it. For one I will definitely be working on this tool. Next week - after the surfing. Many thanks to Leonardo who did the server side magic and Richard who did a lot of the UI and product boiler plate. And I think Alan Runyan does get some credit because I do remember a conversation over a beer or 6 about 5 years ago that included this topic. It might have been him once again who sowed the seed.

Don't use properties

Was helping a person on irc the other day. The problem was they were including a string into a template. The string was coming from a property on an object, that property was being acquired through acquisition. The code was something like this: So the what's the problem here?

  • What's the chance you will remember in 6 months what getSectionText is? Go away for a day then try to remember (ok, perhaps I'm just getting old). But you'll never remember that is a property on an object and there is no easy way of finding that out.
  • There is no easy way to change it.
  • There is no easy way to list them all - short of waking up every object and examining it.
  • You could conceivably get hit by security when someone workflows the object with the property for you (admittedly perhaps less of a concern).
In this case I prefer a Python script that searches the objects location and returns a value. Here's an example that I pulled from Enfold Systems that displays a different image on the top of every folder.

Next we add this into the skin. In this case this is called getSectionImage and the template reads: Not the worlds most sophisticated peice of code but...
  • It's easy to remember, when looking in our templates and I spot the line getSectionImage, its easy for me to look in the skin and remember there is a script called getSectionImage even now two years later.
  • I can easily see what all the images are and alter them.
  • Never any security to worry about.
The only real problem you have is that for complicated requirements, that script can get complicated, but that's true of properties too.

Vancouver Workshop gearing up

The Vancouver Python Workshop is really gearing up. We are just about to announce the speakers and that should be a good line up, we'll be featuring a bunch of good speakers including people from Europe and Brazil. For me now its time to get down to the nitty gritty of doing all the budgets in detail, finance, registration and the like. It's a pretty thankless task, but all worked out ok last time, so should go through well this time too. I remember a chat with someone after the last conference and I'll have to get permission before I use his name, but his feeling was:

Better than PyCon
If you haven't checked it out do so: http://www.vanpyz.org/conference More the merrier.

Agendaless Consulting

Paul, Tres and Chris formed Agendaless Consulting:

We are specialists in building large, custom web applications using a collection of technologies, centered around Zope and Plone.
Good luck to the three of you. I know with the talent, skills and abilities of those three that Agendaless will be a premier consulting company.

PloneShell features

Ever used PloneShell and want some more features for it? Joel and I are running a sprint in Vancouver and looking for features people want in it. Here's what we have on our list so far:

  • Faster start up
  • Ability to change colours, fonts
  • Easier startup, without having to specify all the paths
  • Mac installer
  • Reset without having to restart
  • Turn off acquisition, only show methods and properties on the current object
  • Easy user switching
  • Easy security testing
Ideas welcome!

Restoring James Bond

Lowry Digital Images get another news item on them:

The company deployed 700 Terabytes of storage to support the project. Company founder John Lowry explained: "This is true frame-by-frame digital restoration. When you have 42 miles of film, there's a lot to clean up."
Ian Caven will be speaking at the upcoming Vancouver Python and Zope user group and will probably have screen shots of this very transformation. Whilst the article mentions that they use a large number of Mac's they also use a huge amount of Python and Zope.

Plone 2.5 experimental installer

Sidnei has been working on an experimental installer of 2.5, please go and download it and give him all the feedback you can. Any help appreciated. In unrelated news, two reasonably hard core Plone and Zope users switch their blogs to Wordpress in the same week. What's with that?

ZopeZen going for grabs

Many moons ago I started ZopeZen as a blog for Zope. It's done well over the last 5 years and it's been a labour of love keeping it up. But the fact is that now I don't post or work on it much anymore - probably because for a while I just haven't been on the ground doing as much Zope or Plone as I used to. This makes me feel guilty, so if anyone out there would like to take ZopeZen up and keep the blog going forward, please yell. I'd love to give it to you. Requirements:

  • Maintain it as a community site.
  • Don't mind how you run it, but there is a lot of useful stuff in archives there, would be nice to keep the old content up.
  • Must be in Plone or Zope.
  • Link back to me here.
Anyone interested?