I blog therefore I am

Welcome to my blog. I do Plone content management applications, web development with Repoze, BFG, Grok and other Python technologies.

Just call it BFG: repoze.bfg web site goes live

written by cguardia, on Apr 23, 2009 1:35:00 PM.

During the last two days of the PyCon 2009 sprints at the start of this month, I worked on creating a simple web application for the repoze.bfg web framework site. The idea was to have a home page, links to existing Sphinx documentation (which is abundant and up to date), a paste bin and an easy way to add simple tutorials.

I’m no web designer, so I went to free-css.com and grabbed a theme by Robobuilder which appealed to me. I modified the theme a bit and made a very rough application using BFG itself. Chris McDonough took it from there and added search, authentication and Trac integration. Jim Penny contributed a logo and helped out with CSS adjustments.

We are happy enough with the result to call it the “official” BFG web site. One of its goals is to differentiate BFG from the main Repoze project, which has the objective of making Zope and related technologies play nice with WSGI. While BFG uses Zope technologies, it doesn’t require users to do it and doesn’t depend on the many Zope packages available. If you are into Python web application development, you should try it. It’s very simple to get started, it’s well documented and tested. Oh, and it’s also fast. Please visit the web site to find out more.

Quick review of Practical Plone 3

written by cguardia, on Apr 15, 2009 6:07:00 PM.

I received a free copy from Packt Publishing to review Practical Plone 3, the newest Plone book out there (for the moment, a couple coming up in the next few weeks). It took more time than I expected to get around to it, so I apologize to Packt for the delay. Here is the review, at last.

This is a book which is aimed at beginners, tough I dare say that the term beginner in this case is stretched a bit. That is because the book is divided in four parts and I think that the reader of parts one and two might not be the kind of reader that will ever get to parts three and four, because the skill levels required are so wide apart. I guess the idea was to cover the basics and then keep at hand the required knowledge for people who might want to learn more, but I’m not sure it works.

Even so, the material in the book does cover beginner and intermediate levels, which fits nicely with the advanced profile of Packt’s other Plone 3 book, Professional Plone Development, by Martin Aspeli. In those two books, we have close to 1,000 pages of Plone 3 knowledge combined. This is really a very good thing for the Plone community.

Speaking of community, the book is a real community effort, as 13 different persons wrote at least one chapter. I think both the authors and editors did a good job at making the text flow without abrupt style changes, so overall I think this idea worked pretty well.

As for the content of the book, I find the authors did a good job too. The book is well written and covers the material aptly. In fact, I feel the parts where the reader is more likely to get lost or find some difficulty understanding the concepts, are more the result of Plone’s shortcomings than of the author’s skills.

Part one is a short introduction to Plone, including installation and a tour full of screen shots that show each part of the user interface. It’s a good introduction for someone who has never been near Plone before.

Part two focuses on what you can do with Plone out of the box. Every feature of Plone 3 is described and explained with heavy use of screen shots. The features are covered pretty thoroughly and the explanations are well written. The only chapter where I think the reader may have problems is the one on workflows. That’s not because it’s badly written, but because for the first time in the book, the reader is forced to abandon the nice confines of the Plone UI and use the Zope Management Interface directly for creating a workflow. As I commented before, this is really a Plone shortcoming, since there is no mechanism to create workflows from its UI. This made Matt Bowen’s task a lot harder and even though he explains it well, I feel a beginner will not get it.

Part three abandons the comfortable beginner pace and lets the reader dive into more advanced topics. The reader is shown how to create repeatable deployments, install add-on products, build forms, create simple content types, customize Plone and change its look and feel. In the preface, the authors state that no programming skills are expected, but the chapters about customizing Plone and changing the look and feel really go beyond that promise. I see no way that the audience described in the preface will be able to successfully get through these chapters without putting a lot of time and effort on them, to say the least.

Again, the problem is not the writing. Veda Williams makes a valiant effort, but there’s no way around the truth: Plone’s theming story is just awful. There are two very different ways of working with themes and Plone 3 is built in such a way that you need to learn both to do this. In addition to the ideas behind old style skins, which most readers will understand easily, the Plone 3 would-be themer has to learn about concepts which come from Zope 3 and are not that easy to grasp (for example views, layers, resources, viewlets, viewlet managers and more). Simply put, it’s a lot harder to theme a site than to do anything else explained in this book. I’m not going into much detail here because this is not the subject of this post, but I will silently show you this table:

ChapterPages
Building forms22
Creating new content types28
Deploying a site (part four)24
Speeding up the site (part four)31
Theming plus required concepts (half of chapter 17 and chapter 18)109

By the way, Veda Williams is working on a new book about Plone theming that will explain all this in much more detail and even show a way around it. Since her book is focused on this subject, I’m pretty sure it will find the right audience. It’s just around the corner, coming in May.

Going back to the subject at hand, part four of the book explains some advanced tasks, like deploying a site, using a caching proxy to speed it up and even connecting Plone to an LDAP/Active Directory server. The chapter on caching alone makes this part useful enough.

Overall, I think that if Plone is used at your workplace this book will be nice to have around. You will find this book most valuable if you are a developer who has never used Plone and your boss came to you and told you to install Plone or assigned you a Plone site to maintain. If you want an introduction to Plone and are considering this book, review the table of contents carefully and decide if you are likely to go into the materials in parts two and three before buying, since at US $49.99 the book is not cheap. Likewise, if you want to go into Plone development but find Martin Aspeli’s book too hard to follow, Practical Plone 3 could help you get there, but you might not find the first part that much useful.

Screencast: manage content with Plone, develop front end web app with your favorite Python framework

written by cguardia, on Feb 4, 2009 12:01:00 AM.

I have been working in a project for the Library of Congress of Chile, where they needed one single instance of Plone to manage multiple web sites. All of those are high traffic site, so serving them from Plone was not an option.

Right around the time when we were designing a solution, the ContentMirror product was released. This product allows us to mirror the content from a Plone site into a relational database and is a key piece of the system we have developed, which uses that relational database to pull the content for use by an independent web framework.

On the Plone side, the system consists of several parts:

  • The plone content management backend site.
  • ContentMirror configured to mirror all published content.
  • A web site definition product for Plone to create sites and assign content to them from a content area on the Plone instance.
  • JQuery and CSS grid based layout tools for defining visual site layouts in Plone, independent of the Plone layout.
  • A new JQuery page composition tool to interactively build front pages using tiles. This tool can be easily extended with independent packages.
  • A simple theming strategy that allows the site managers to register themes using simple packages that consist mostly of images and a CSS stylesheet.

It's worth noting that the page composition tools will be available separately so that they can be used independently of the whole system.

Once the webistes are mirrored into the database, any framework can be used to present the content. We developed a simple Python library that uses SQLAlchemy to help developers access the content and another one that helps assembling the pages, with hooks for adding content from other sources.

For our first front end implementation we decided to use repoze.bfg, which is a very lightweight framework that uses many familiar Zope concepts. It's also very fast. Our benchmarks show that serving the same Plone content out of the repoze.bfg application is almost 100 times faster than with Plone (and it's still dynamic).

But of course, a picture is worth a thousand words, so I made a screencast of the whole system in action (it's around 20 minutes long).

Keep in mind that though we use repoze.bfg in this case, any Python framework could use our Python libraries to access and use the content. We are also working on a simple Plone product that will produce a static version of the sites.

This will all be open sourced, of course. We are shooting for a late March release, hopefully in time for PyCon, where I'll be speaking about this project. I hope I see you there.


WSGI songlist application: the repoze.bfg take

written by cguardia, on Jan 14, 2009 12:00:00 PM.

Eric Florenzano started an interesting comparison exercise when he showed how easy it is to create simple and fast web applications using pure WSGI.

The main idea was that this kind of application can be a lot faster than fully featured web frameworks can produce, so for machine to machine communication you have a lot to gain by dumping the web framework and using pure WSGI.

After his posting, it was fun to see a good number of web framework advocates post about how the application could be built using their framework and what advantages over pure WSGI it offered. You can see examples of the very simple songlist application that Eric described developed using CherryPY, Restish, Werkzeug and Grok. It's very educational.

I am a little late to the party, but I would like to show how repoze.bfg can do this. repoze.bfg is inspired by Zope and uses its libraries heavily, but does not require you to know anything about that. I think it's a nice little framework and fun to work with, so that's why I decided to do the songlist application with it. By the way, it would be cool to see Django and Pylons examples as well. Any takers?

On to the repoze,bfg application. First, we create a project:

paster create -t bfg_starter songlist

Next, we replace models.py with this code:

from collections import defaultdict

class SongList(object):
    def __init__(self):
        self.songs = defaultdict(int)

root = SongList()

def get_root(environ):
    return root

And views.py has this content:

from webob import Response
from webob.exc import HTTPMethodNotAllowed

def view_songlist(context, request):
    res = ','.join(['%s=%s' % (k, v) for k, v in context.songs.iteritems()])
    return Response(res)

def clear_songlist(context, request):
    context.songs.clear()
    return Response('OK')

def view_song(context, request):
    song = request.subpath[0]
    return Response(str(context.songs[song]))

def update_song(context, request):
    song = request.subpath[0]
    context.songs[song] += 1
    return Response(str(context.songs[song]))

def method_not_allowed(context, request):
    return HTTPMethodNotAllowed()

Now, if you have that very common ailment know as XML allergy, you will surely hate the part where we connect views with models, but please, don't stop reading yet:

<configure xmlns="http://namespaces.repoze.org/bfg">

  <include package="repoze.bfg.includes" />

  <view
     for="*"
     view=".views.method_not_allowed"
     />

  <view
     for="*"
     request_type="repoze.bfg.interfaces.IGETRequest"
     view=".views.view_songlist"
     />

  <view
     for="*"
     request_type="repoze.bfg.interfaces.IDELETERequest"
     view=".views.clear_songlist"
     />

  <view
     for="*"
     view=".views.view_song"
     request_type="repoze.bfg.interfaces.IGETRequest"
     name="song"
     />

  <view
     for="*"
     view=".views.update_song"
     request_type="repoze.bfg.interfaces.IPOSTRequest"
     name="song"
     />

</configure>

Yes, repoze.bfg uses Zope's XML configuration language, ZCML. We actually like it, but what would you expect from long time Zope users? We freely admit our minds may be warped.

If you can live with that, you'll see it's not that painful, but if you get truly sick by looking at XML or simply like to hear yourself say 'convention over configuration' every now an then, the repoze.bfg.convention package can keep you away from ZCML. Just have someone edit the ZCML in your project to add these lines:

<include file="meta.zcml" package="repoze.bfg.convention">
  <convention package="." />
</include>

There, now you don't have to even acknowledge the .zcml file is in your project. Just change views.py to look like this:

from webob import Response
from webob.exc import HTTPMethodNotAllowed
from repoze.bfg.interfaces import IGETRequest, IPOSTRequest, IDELETERequest
from repoze.bfg.convention import bfg_view

@bfg_view(request_type=IGETRequest)
def view_songlist(context, request):
    res = ','.join(['%s=%s' % (k, v) for k, v in context.songs.iteritems()])
    return Response(res)

@bfg_view(request_type=IDELETERequest)
def clear_songlist(context, request):
    context.songs.clear()
    return Response('OK')

@bfg_view(request_type=IGETRequest, name='song')
def view_song(context, request):
    song = request.subpath[0]
    return Response(str(context.songs[song]))

@bfg_view(request_type=IPOSTRequest, name='song')
def update_song(context, request):
    song = request.subpath[0]
    context.songs[song] += 1
    return Response(str(context.songs[song]))

@bfg_view()
def method_not_allowed(context, request):
    return HTTPMethodNotAllowed()

See? Decorators to the rescue. Now you wouldn't even suspect the framework was inspired by Zope, but a lot of cool features and libraries taken from Zope are there in case you feel adventurous one day.

One of the key points made by Eric in his songlist post is that pure WSGI applications are fast. Using Spawning, for example, his simple app gets 1230 requests per second on my 1.86 Mhz Intel Core 2 Duo.

Many of the framework songlist posts make the point that with the framework you get a lot of power while losing around half the speed, which is a good trade-off in my opinion. Here's the repoze.bfg benchmark, also using Spawning:

cguardia@hal9000:~$ ab -n 10000 http://localhost:6540/song/1
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient) ... Finished 10000 requests
Server Software: Server Hostname: localhost Server Port: 6540
Document Path: /song/1 Document Length: 1 bytes
Concurrency Level: 1 Time taken for tests: 13.857300 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 1160000 bytes HTML transferred: 10000 bytes Requests per second: 721.64 [#/sec] (mean) Time per request: 1.386 [ms] (mean) Time per request: 1.386 [ms] (mean, across all concurrent requests) Transfer rate: 81.69 [Kbytes/sec] received

721 requests per second, not too bad. Incidentally, I used Spawning because that was what the majority of benchmarks used in these posts, but I found the paste http server that repoze.bfg uses as default to be much faster. Using that on my machine, pure WSGI gave me 1780 requests per second and repoze.bfg 1060.

Well, I enjoyed making this post. I like to see different Python web frameworks showing how they do things and learning from each other. It's being said a lot this days, but it really is a great time to be a Python web developer.


Plone, Grok, Repoze fill 2009 plans

written by cguardia, on Jan 4, 2009 3:09:00 PM.

I have not blogged a lot lately, so I'm trying to use the energy the new year provides for getting some rhythm back into my postings. I like blogging, but writing posts takes a lot of time and that's been harder to find lately. I have found my blog and other time sinks like Twitter and IRC to be not only entertaining, but actually useful for my work, but right now I feel one of those has to go. Since blogging is harder, I wonder if this is a lost battle already...anyway, on to my exclusive 2009 preview.

Plone will once again bring home the bacon this year. I already have a couple of projects booked and, despite the economical crisis, it seems like I'll be able to land a couple of outsourcing gigs here and there. It's a great time to be working with Plone, though doing so effectively requires you to keep current on lots of technologies and ideas. Zope 3 libraries and concepts have not yet finished transforming Plone, while at the same time there's a push for simplicity that will bring still more changes to the table as Plone 4.0 comes around.

The effort employed in keeping current is not wasted, as I have usually a couple of chances each year to offer Plone training here in México or in other Spanish speaking countries south of the border. Since we are actively trying to make Plone more popular in México through our newly formed user group, I hope I get a few more training opportunities this year than in 2008.

Speaking of training, allow me to do a little advertising. My friends and colleagues at Jazkarta will be offering a course in Montreal next week, on January 13th. If you live near that area and are thinking about getting into Plone, you should strongly consider taking advantage of the discount that they offer through this link. If you do that, I'll give any referral fees I get straight to the Plone Foundation.

My work in Plone for 2009 will be centered around a project I'm doing for the Library of Congress in Chile. The main objective of this project is to get Plone used as a CMS backend and push the content into a relational database with the help of the remarkable ContentMirror product. This content will be used by several frontends powered by other Python web frameworks. Thus Plone will be used for what it does best and other web development work will be done on the frontend application. The idea is to make Plone the Product a lot more appealing for developers who use other Python web frameworks. The project is in an advanced state and a release will be coming before March, when I will be showing this work at the PyCon in Chicago.

As part of this work I've developed yet another ajaxy page composition tool for Plone, which will also be released near March. This tool uses the Component Architecture for easy extensibility and includes a CSS grid layout generator based on YUI Grids. In previous work for magazines and newspapers I've found that they are always very interested in this kind of solution and even though Plone 4 will be exploring other approaches to solve this problem, at least the use of layouts and tiles give my product something in common with the future of Plone.

For my frontend work I have been using repoze.bfg and I have to say that I really like it. It's simple, flexible and very, very fast. In my tests I've been serving Plone content at around 400 requests per second, before caching (I'm getting 10 or so from Plone, so do the math). One of the nice things about repoze.bfg is that it uses familiar Zope concepts and technologies, so an experienced Plone developer will find it a breeze to get going. It won't force you to use those concepts in your code, though, so Python developers with no Zope experience can also get some productive work done. I highly recommend that you get a look at this framework.

While you are at it take a good look at the repoze project, which is a separate initiative coming from the same guys, the Zope legends at Agendaless Consulting. The objective of this project is to get Zope technologies working with other Python web frameworks using WSGI. So far there's a lot of middleware available and special distributions of Plone, Grok and Zope that work in a WSGI pipeline. I hope I can contribute to the repoze.* projects as part of my open source work in 2009.

One other Python web framework that I will be using a lot in 2009 is Grok, which is the best way right now to take advantage of Zope 3 technologies. A frontend for my Chile project is on the works and I hope I get to use it for other applications throughout the year. There's also a future project with Grok that involves something I have wanted to do for a long time, but I'll write about this when I get to do it.

In all, this is a very promising year, with a lot of work ahead. A lot of things are going on in the Python world and it will be fun to be a part of it. I wish you all a very active and rewarding 2009.


The year of the Python books and an Expert Python Programming Book Review

written by cguardia, on Dec 10, 2008 6:37:00 AM.

2008 has been a good year for Python. We've had Python 3.0 released and the language keeps growing in popularity. It was also a great year for Python books.

Before this year, most Python books used to offer general learning or reference material. That is great, and a fan of the language will usually have a couple of those close at hand, but there's always been an empty space on my bookshelf waiting for more advanced subject matters.

Well, the space has begun to fill up. On my desk at the moment I have Expert Python Programming, by Tarek Ziadé; Python for Unix and Linux System Administration, by Noah Gift and Jeremy M. Jones; and Foundations of Agile Python Development, by Jeff Younker. Recent arrivals to my collection also include Beginning Python, second edition, by Magnus Lie Hetland; and Essential SQLAlchemy, by Rick Copeland. All of these were published in 2008.

For me, the book I had wanted to read as soon as I heard from it is Expert Python Programming. I've benefited from Tarek's work on both the Zope and Plone communities, plus I really liked his book's subjet matter, so I was really happy when Packt Publishing sent me a copy for review.

I'm far from a Python expert, so I'm kind of the audience the book is intended for. The objective is to show the reader how an advanced Python developer goes about his daily work and hopefully send him on the way to become one.

The book is structured around the concepts and processes of agile development. It goes from code writing to module and application organization; carefully considers distribution, code and life cycle management options; continues with testing and documentation practices and finishes up with optimization techniques.

Chapter one may seem a little out of place for an advanced book, since it covers Python installation and setup, but you may find some valuable information in there, like the introductions to Setuptools and iPython, or how to customize the initial Python prompt with a custom module that is imported at startup time.

Chapter two to four cover syntax best practices, PEP 8 programming standards and tips for appropriate naming. I found the sections on iterators and decorators specially useful.

Chapters five to seven show how to create a package and write an application, including using a common pattern for all packages, how to use code templates and preparing you code for distribution from the start. Coming from a deep Zope background, I appreciate the fact that zc.buildout is covered in detail and I hope the book helps Python developers not familiar with this and other Zope related technologies to get to know some of the hidden treasures from our community.

Chapters eight, and nine introduce best practices for code and project life cycle management. Source code control and versioning systems like Subversion and Mercurial are discussed, then Buildbot and Trac are introduced.

Chapter ten is a fairly deep look at documentation, starting not with tools but with writing advice and audience definition. The message is clear: one of the best things you can do for your code and its users is documenting it throughly. Sphinx and reStructuredText are also presented in this chapter.

Chapter eleven explains test-driven development, offering those who don't test sound arguments to begin doing it and those who test some advice and techniques for better testing. Nose is covered in some detail here.

Chapters twelve and thirteen deal with code optimization. The former covers how to profile and find bottlenecks and the latter offers specific help for finding solutions.

Chapter fourteen seems a little out of place with its coverage of useful design patterns in Python, but it's a good read anyway.

Throughout the book, the author does a wonderful job of covering the most recent and popular tools for developers available in the Python world. He doesn't try to be exhaustive, but clearly mentions alternatives to what he covers in detail and liberally points to resources on the net which offer more detail.

What I like about this is the acknowledgement that the book can only cover so much of what is available out there, and in any case may be out of date in that regard soon, but it can stay relevant by explaining why it's good to use some kind of tools and pointing at current examples.

This also means that the book does not go as deep as one would like into some subjects, which could be considered a drawback by some. I think the balance is right in this case as the book does cover a lot of material. If you are really serious about any of these topics, you are going to need to find more resources anyhow.

As it is, the book has 14 chapters and 342 pages. At $45, it's around the same price as similar books from other publishers. The book is of good quality and readability is OK, though the images could use a little work. I have read other books by Packt in the past and consider the topics offered and writing quality above average for this kind of books.

Overall, I sincerely recommend this book to any Python programmer. Right now, there are few books like this one in the market; it fills a need and does it well.


Plone and La Jornada: The story of a newspaper on the web

written by cguardia, on Nov 11, 2008 12:39:00 PM.

We had a very successful Plone gathering tonight at the UNAM. Seven persons from the Plone World Day event joined us for this meeting, surpassing all expectations. Every one of the 20 seats on our small classroom was occupied.

The speaker for the night was Héctor Velarde, who gave a very detailed talk about his experience using Plone at the Mexican newspaper La Jornada. This is one of the most important newspapers in México, the voice of the political left.

La Jornada was the first Mexican newspaper to offer news from their print edition on the web in 1995 (actually, the first recognized communication medium of any kind in México to do that, be it a magazine, radio or TV station). However, until Héctor arrived there in 2004 to direct the web effort, they were happy just putting the contents of the print edition up daily, without any dynamic content or last minute news.

While Héctor was there, La Jornada began adding breaking news and became the first Mexican newspaper to offer RSS feeds for the news. Soon, he began looking for a CMS to help streamline the news production process. Someone recommended either Plone or some forgotten (by him) Perl solution.

It's obvious which one he chose, or I wouldn't be writing this. Thus his very small team of one system administrator, one developer and himself got some Plone training and started to work (disclaimer: I was the person who gave them that express training marathon at the end of 2005).

It wasn't an easy road and there were several false starts (the paper's resources were scarce and there was no Plone México group back then or really almost anybody who could help), but by the time the Mexican presidential elections came in 2006 he had learned enough to put up a very simple site focused on the elections and using just a few tried and true products. This approach worked well and near the end of 2006 the paper set up a Plone site to publish all the news that came throughout the day.

The paper's traffic almost tripled in a couple of months after this site came online and they faced the usual performance problems that this causes, but by this time Héctor was more involved with the International Plone community and help was a lot easier to find.

At this point he was able to start contributing some code to the Plone community and released products like ATGoogleVideo, TagCloud, ATOdeoAudio and nitf4plone, his last work while at La Jornada. By this time, early 2008, both the sysadmin and the developer had left the paper and the pressure of working at the newspaper got to him, so he quit.

His story ended on a kind of sour note, since we learned that La Jornada is now on the process of substituting Plone for Drupal, because the new people in charge thinks Plone is too difficult to learn for developers and they already know PHP.

To look at the bright side, we are hopeful that the existence of our new Plone group can help interested parties in México to avoid the problems that early adopters usually face, or at the very least provide some company and advice for the inevitable bumps on the road that will come. I'd say we seem to have started with the right foot.

Update: fixed product links and corrected wrong date for news site launch.


World Plone Day 2008 In México

written by cguardia, on Nov 8, 2008 10:11:00 AM.

As part of the World Plone Day 2008 event, we had a small gathering at the National Autonomous University of México (UNAM).

27 people came to the "Marcos Moshinski" auditorium at the Nuclear Science Institute, which graciously sponsored the event (thanks a lot to Antonio Ramírez for the fabulous effort). In addition to that, 15 more persons attended the event via videoconference.

I gave a short introduction to Plone and a quick demo, followed by coffee and donuts. Next, Rodrigo Alonso, from Root Technologies, walked us through a case study of a content management project where his company, a Java shop, discovered and used Plone successfully for a high profile client. To complete the day, Sergio Rajsbaum, from the Mathematics Institute at the UNAM, described the work being done at the institute and explained why they chose Plone for their web projects. He finished his presentation by inviting all attendees to the México Plone Group.

Two short highlights from the talks that I think are interesting:

  • In Rodrigo's Talk, he mentioned that Plone has many features out of the box, which took their customer by surprise. They had proposals from other development companies in México to do the job in six to eight months, with less features. Plone allowed them to do it in two months. The thing to note here is, when Plone fits the project objectives fairly well, it's an amazingly powerful and easy to use piece of software.
  • In Sergio's talk, one interesting fact he mentioned is that they chose Plone in part because it's based on Python. Being an academic institution where many graduate students would be working on the development of their CMS systems, they wanted them to do that using an academically respected language.

In all, I'd say for the Mexican Plone community, which a few months ago consisted of three people, the event was reasonably successful.

I think Plone World Day as a whole was very sucessful too. I mean, any event where you can get hundreds of people in 22 countries around the world to coordinate like this necessarily did something right.

That said, I think next year we should start promotion a lot earlier, and perhaps establish some common objectives for the various local events. At least some people that I think we should have reached weren't even aware that there was a Plone Day at all.

These comments in no way are meant to take anything away from the great efforts by People like Roberto Allende, the main organizer for this worldwide event, or Gerry Kirk, who did a great job promoting the event these last few days, but I think we should also learn from the experience and come back stronger for World Plone Day 2009.


Blogging my Plone Conference presentation

written by cguardia, on Nov 6, 2008 6:57:00 AM.

Well, I finally uploaded my presentation for this year's Plone Conference to slideshare last week. However, since it is just a bunch of images with barely any words, I don't imagine it will be very useful to anybody. That's why I decided to do this experiment and blog my presentation, one slide per post, over the next few weeks.

The Big Green Button

My talk was entitled "The big green button - turning Plone into a dynamic site factory". This is in reference to a thought provoking article about the future of Plone by Martin Aspeli (see day 10, right at the bottom of the post), where he dreams about a scenario where deploying a Plone site as a PHP application or as a simple static site is done by pushing a big green button in Plone's control panel.

This subject has been very important to me for some time now and I think that's a feature that would be very, very useful in the Plone World. Which is why, when I was given the chance to lead a project like this by the National Library of Congress in Chile, I jumped at it.

The project's main objective is to have a single Plone site for managing the content of several public sites, which is an scenario many media sites and public organizations may face. The strategy we selected is to use Plone only as a CMS, which is what it does best, and decouple the delivery of the content, allowing a dynamic Python web application to perform this last task.

What I will be blogging about in the following days, is the thought process, tool selection and project progress and benefits which came as a result of pursuing this strategy.


The one list where I'm glad Joomla and Drupal are way ahead of Plone

written by cguardia, on Aug 28, 2008 2:03:00 PM.

IBM recently released its IBM Internet Security Systems X-Force 2008 Mid-Year Trend Statistics report, which takes a look, among other things, at web-application-based security vulnerabilities.

The report has a top ten list of vendors with the most vulnerability disclosures. Can you guess which one of Drupal, Joomla or WordPress shows up on the list?

If you answered 'all of them', you were right on the money. Joomla is at the number two spot, while Drupal and WordPress are 8th and 9th place on the list. Funny that all three of those use PHP, but I'm not saying it has anything to do with this (I'm thinking it, but I'm not saying it).

The reason Plone is not on this list? Well, for one thing, we may be flying below IBM's radar (the word Plone does not appear on this study at all), but I think Zope 2 is indeed more secure. Consider also that one of the most common types of attack according to the study is SQL injection, to which Plone is immune by virtue of not using a relational database at all.

If you can take a look at the report, do so. It's interesting and not that long.