The rumours are true - a book about Plone 3!
Buy it, will you?
It feels weird writing this post, having spent so long keeping it a secret (not terribly well, mind), but the time is right now, I feel, with Plone 3 RC1 just around the corner.
For the past six months or so, I’ve been writing a book which will (most likely) be entitled Professional Plone Development, published by Packt Publishing, the people behind Building Websites with Plone. It will take another month or two (or thereabouts) for it to hit the shelves, but I am scheduled to deliver the final drafts to the publisher at the end of July.
About the book
As the title suggests, this is a book for developers who want to build robust content-centric web applications on top of Plone. The ideal reader knows Python and web programming concepts in general, and has used Plone before, perhaps as a power user or site administrator. Some prior experience with Plone customisation and programming may be helpful, but shouldn’t be necessary. If you’re brand new to Plone, you should be able to pick up what you need, but spending some time playing with a standard Plone site may help you get familiar with the terminology and concepts.
This is not a book for site administrators or end users who want to use “vanilla” Plone.
It is a book about best practice. I wanted to convey the way I feel development should be done with Plone 3, without being burdened with too many legacy techniques. To my knowledge, this is the first book to actively encourage Zope 3-style patterns in Plone development and downgrade legacy concepts such as ZSQL methods and developing new persistent CMF tools.
Among other things, the book covers:
Setting up a development environment with zc.buildout.
Creating packages as Python eggs.
Encapsulting site policy into a “policy product”, using GenericSetup and Python code to enable repeatable and testable deployments.
Customising security and workflow.
Safely incorporating third-party products into a site policy.
Creating a new theme for Plone, customising the appearance of viewlets, portlets, Zope 3 views and page templates.
A reference chapter outlining “Zope development concepts in a nutshell”, with runnable doctests to explain key concepts. Here’s where you’ll learn about adapters and utilities and acquisition.
Building content types with Archetypes, demonstrating modern techniques such as using GenericSetup for configuration and keeping presentation logic in separate view classes.
Creating standalone pages and forms with zope.formlib and Zope 3 views.
Creating Zope 3 viewlets and Plone 3 portlets.
Connecting to relational databases using SQLAlchemy.
Dealing with members and member properties through PAS.
Using KSS, Plone 3’s new AJAX framework to build dynamic pages.
Setting up a production server with ZEO.
Configuring caching for robust site performance.
Connecting to an LDAP repository for authentication and member data.
There is an emphasis on proper testing, documentation, and other good practices. As far as possible, I try to explain underlying concepts and rationale - the “why” in addition to the “how”. I don’t believe in frivolous or abstract examples that skip one concept to demonstrate another. I want readers to have something they can build upon, examine and learn from, not something they have to piece together themselves. Throughout the book, a semi-realistic case study is used to build a robust application demonstrating each concept being introduced.
On writing the book
This is my first book, and it’s been a very interesting experience. First of all: it’s a lot of work. Philipp von Weitershausen, author of Web Component Development with Zope 3, warned me. I didn’t listen. In particular, developing the examples took a long time. Still, it’s pretty rewarding work, and has given me the chance to write a lot of “fun” code.
Writing a book against a pre-release version of Plone provided some particular challenges. More than once (and at least once more to come) I’ve had to make major changes to my code as something in Plone (or more often it seems, CMF) changed. I’m very grateful to the various people I’ve nagged about completing parts of Plone 3 (in particular David Convent and Wichert Akkerman) that I needed to write a particular chapter.
I’m quite convinced that Plone 3 is a lot better off because I wrote this book. For a while, I was probably the only person developing for it in anger. I’ve fixed a lot of bugs and introduced numerous small features and improvements over the past few months, as I found things that were too difficult or plain impossible to do. I found (and fixed or harassed others into fixing) a few issues with Zope and CMF as well.
Having to explain (or justify) the way something works to a reader really made me think about how good our story was in each particular area. Sometimes, it was less work to improve Plone and have a compelling story to tell, than to write about the way it worked previously.
I owe several people a debt of gratitude for being able to do this at all. Wichert Akerman (wiggy), the Plone 3 release manager, has been an amazing help: as a technical reviewer, in being forthcoming with the Plone release schedule, in discussing issues I felt important to address, and most recently, in teaching me about LDAP and deployment strategies, and developing tools for Plone that made these chapters much easier to write.
Jon Stahl and Andrew Burkhalter have been great reviewers as well, mercilessly coming down on my rambling style and overlong sentences. They have also been great encouragement and fed back points that they felt their clients and users may want to know more about.
Marco DeVitis has been a sharp critic (in the constructive sense) and the perfect “guinea pig” for my chapters. Chapter 3 had about 10 revisions thanks to Marco not giving up on me.
Philipp von Weitershausen provided some invaluable advice at the beginning of the project, as did Paul Everitt and Alexander Limi.
And finally, thank you to all the Plone developers who helped make Plone 3 such an incredible release. I want to work with nothing else these days.