 Yes, I am standing up. You can see me. I know you can hear me. I hope you can see me. I just always complain about getting stuck with the last presentation on the last day. I got to say the first presentation on a Sunday morning probably sucks a little bit personally. Raise your hand if you're actually in the Zoho or Python or Pong community. We have a few of us here. Any of you who are in the community and know me know that it's very, very funny for me to be giving a developer talk. I'm in the marketing community, but I have a trick for everybody today and you'll love my trick for how I hold this off. As an introduction, I'm Paul Lever from Zia Partners. We are a non-profit business partner network of the people who build, develop, and clone really interesting concepts, organized primarily in Europe. The good fun is why do you say the word for people from Brussels? Do you say, what's the name? What's the name? What's the name? What's the name? What's the name? That's a good name for a project. So any of you from Brussels, Zia Partners is headquartered in Louvain-Lonneau and both wives from that city as well. And Saadiah Hayden, as you might see him today, is the head of Zia Partners. I'm also the president of the Plone Foundation and former co-founder of Zoho Corporation, so although I may not write a lot of code, I get to hang around with people who do. Justin has a little bit of background. How many of you raise your hand if you're awake? Don't give these speakers water, give them coffee, because if the speaker falls asleep during his own presentation, it's a bad sign. How many of you actually do anything with web development? Hey, JavaScript counts as web development. I hope it does. Raise your hand if you're going to do Java. I had a joke written for that, but too many of you raise your hands. I couldn't get away with that. But if you think you need a content management system, so selling such a thing to you just put pictures and wrote down all of your names, you're going to get a buzz later about that. Okay, so for 40 years I lived in France. I moved back to these chill houses. I know I am, because I did no work for the presentation. I had screencasts. We worked at, it will be later on. The hotel had a, it's really fun to wake up the morning of your presentation and put the last finishing touches, you know, the 99% that you write the presentation. And the all-haunch web service inside your hotel takes your credit card transaction. It completed that part, but the part where it actually assigned you an IP address failed on that. So the slides are in the material part. Actually, I'll take the other thing we'll do. In summary, Plone 2.5 is the release version right now. Plone 3 is being worked on. Has a lot of really good and useful user features for content management systems like versioning. Also has some exciting development stuff too. Most of what I'm going to talk about today is the development part. At the end, I'm going to do something really stupid and use the trunk to give a few demos of some user features. The things we're going to talk about are a little bit about the new ways in the world of Plone to a degree in the world of Zopin and Python for how you get a developer sandbox installed, how you do your work, and share it with other people. We're going to talk about Luftwaffe's project for doing AJAX and why I say useful. Also a little bit about portlets to show some of the stuff in our stack that's coming up and then finally a tour through some features. So what's going on with Plone 3? Maybe a new release of the page for the release. What is the roadmap? These are the crack smoking attempts at predicting the future. And these are the clips that go, what's called a clip, a clone improvement proposal where you write down what you plan to do to get somebody to agree with it to schedule for a release. Pretty interesting approach to managing work. Lots of new stuff coming into Plone 3. Let's go ahead and get started and jump right into it. We'll show a demo about getting a sandbox installed and then whenever I demo presentation I pretend that I was listening to the presentation. What would I like to hear as a presentation? I know what you really like is a bunch of slides with 18 bullets and a four point font and the presenter reading them to you as if he was standing in a university lecture hall with whiteboards. But you don't want that, I don't want that. Let me show things to you first and then explain to you later. So the first demo, these are the people involved in the work on getting this part of the presentation working for getting a sandbox built. There's this big thing on top of the United States. What's that thing called? Canada. I like to make fun about the facts as Americans don't really know. Funny enough, we just passed the tipping point of absurdity. 50% of kids in the United States can't find the United States on a globe anymore. Which is 10 years after the Zope application server started coming out. And things are starting to change in our stack. At the Python level, Python is starting to get a system for packaging things up and distributing them to other people and declaring dependencies. These are called eggs and has a system for getting these eggs and installing them that is deceptively called easy install. Things also going on about web applications can work together. The nice thing about Python is it's so easy to write a web application which is also the worst thing about Python is that everybody does write a web application. So in an attempt to try and share some of this stuff, there is a web services gateway interface and this is an attempt to let Python stuff work into these things in the final time. You can send other people and this is build out and working and then finally an attempt to they might use a rail that you can press a couple buttons an entire project to be ready for you and then you can just happily work on invoicing the client scaffolding. And so Python systems are trying to work on that kind of scaffolding primarily with something called a system called PACE which is really nice because you can instead of telling people the 15 things they need to do you can create one of these and install it as an egg and then someone can run a simple command and have it set up for them ready to go including passwords and stuff like that. And with these pre-obvious I'm dumb every time I try to do something I wind up bugging them or developers so instead of me bugging them they just give me one of these scaffolding things I run it, I get a shiny pony I would push it in I can play with my pony and not work on it anymore and so scaffolding is written for people like me. The other benefits are we get to leverage some of the work people a little bit more pythonic leverage some of the advances of pythons and the really cool thing is it's great for hard driving factors because every time when you do well one of these things you get the universe installed and you get the directory on your system 200 megabytes for free. Ok so let me go over and do my demo for this one I'll try to embed this into my presentation but Keynote loves QuickTime doesn't love Flash This is my screencast to show the system I'm using for getting all these bits installed well documented you can run a single command to get all your stuff this is what I'm going to run easy install is a little bit like Seacan or RubyGems or something like that a registry out on the web where people put packages you can run a single command and it will get all the dependencies for you and install them in this case I've already installed it for this system that I'm going to clone in you set a couple of environment variables to point at some of the bits you need after that everything gets done for you this has recipes for getting one of three from a trunk which is a wonderful experience for getting a release and this is the part that I like the most being as dumb as I am and as I'll pause that real quick is that I can run a command and it will start asking me the questions to configure the site just like you would expect for one of these more even projects then it goes, gets whatever tools it needs installs them next thing I'm going to do now that I have an entire self-contained clone environment this is kind of a neat part of it is that without the packaging systems you might be finding like rpm you might be fighting with the systems packages and every time that I would use rpm invariably my libc would get upgraded it would trace the cookie cap all the way back to libc and I thought if I save less than this question I'm going to have an unruly system with this it's a package system that can be completely self-contained so the next thing is to run the scaffolding or install the thing that's going to allow me to run scaffolding oriented projects and now I'm going to actually run the scaffolding command and this paste for create I'm going to choose a template people out there that are making like these that can all create different templates one for clone 3, one that involves archetypes one that involves this, that and the other thing one for a shopping cart, whatever you can get and install these templates and then just answer questions what do each one of you want to do is ask you a set of questions about what you want in order to have something ready to go out of the box that's in a series of questions for example all the meta information that might go into the package index and then I'll just here it goes and then I can do the chance to make this active and then run the server so that will catch up in a second so with all of this work what's happening is more and more people start to adopt these advances in Python and these advances in these web systems to be able to go and get packages all in really easily create packages share them with other people track your dependencies create built-in configurations any of you that like to do customer work this is just awesome because the days where you have to log into their system and do 20 or 30 things in order to get them started you can just send them a recipe hopefully you can still build them for those 30 hours okay so that's the first part of the presentation on packaging exciting stuff in the Plum 3 release Ajax is appearing in lots of web systems these days and in the beginning I describe it as useful and simple because the work that Gauchois and others are doing in Plum is to go after some specific usability issues to reduce prints on the server to have boxes that reflect changes with each other and to also make it simple so that the kinds of people who create valuable things in Plum today can create valuable things that include Ajax the KSS approach is to be declared which I really like they use something that looks exactly like a CSS style sheet and sent to the browser the browser that interprets that and sets up your various Ajax behaviors for you these have a very limited describe the universe of things that you can do those are client actions then they talk to things on the server called server actions the server has a really interesting approach where it will bundle up a unit of work send it back for execution on the client that's what we'll see in the demo look got to put the flip for that do you know what I'm going to put it on okay so onto the demo for this into client action stuff so in this case what we want to do is pause this real quick we want to extend the behavior of Plum so that when you click on the description field that appears on every page something happens and we'll walk through the process of first showing how you get the client set up with the CSS declared in language and then have something happen the first thing that they show you in the KSS team is to get your client environment set up environment these days is the way to send out the debug messages somewhere useful instead of the work class these are some of the debug messages that you get qualified for KSS a little bit chatty so the second thing they tell you to do is to turn all that stuff off for those of you that have never seen ZOPE before ZOPE has this thing called the ZOPE management interface which is a UI that's been there for a long time for configuring the application server in this case we're going to go into the part of Plum that lets you configure all the style sheets that go in your site that get included up for various conditions and we just disable, temporarily disable two of the style sheets the ones that fuel those messages once we get that started, once we get Firebug under control and get the debug messages under control the next thing we're going to do is actually create a little hello world style sheet usually you do this on the file system so that you can just check in this version and send it to people but we're giving a demo you want to do it the fastest way possible once you get something working you'll order it later so with ZOPE you're able to go and create things through the web create templates and files and style sheets in this case I'm going to create a style sheet through the web that has some of this KSS declarative language in it so this is the part in my opinion at least of KSS it it looks like CSS it feels a lot like CSS we're going to CSS identifier to say this column node, the archetypes field name description is going to have what feels like a CSS selector but in this case instead of hover or something like that it's the click event and then it's going to have this configuration information associated with it this stuff in the middle here is obviously unique to KSS it would be considered an invalid normal CSS style sheet once we have the style sheet included we go back over to the thing you just saw the CSS registry and tell okay I've got a new style sheet for you you need to include it in all the pages but in this case the style sheet is a little bit special it's not a normal CSS style sheet it is this type here we're linking to the file name over in the Zope system we just created we put the kind of relationship we want and since we're in debug mode we want to turn on some of this other performance-oriented stuff once that's done and we add this directive to the Zope CSS registry by the way I'm talking in the background on all the screencast stuff so you can listen to me explain all this stuff and we reload the page then I can go and click on the description and see the first thing I do for debugging is go make sure that the stuff I configured works I go look for the style sheet and yes there's the style sheet it is linked in like we just pulled the CSS registry to do I want to go check fire bugs see if I totally worked it up no I didn't it was a little bit of a little bit of a hassle and it actually interpreted those rules if I put a bogus rule in there but it told me I don't know what you're doing close fire bug and now oh what is this work this is what's great about screencast and presentation when I did that when I actually reported that the first 5 times I clicked that it didn't work just went in the screencast debugging through screencast all my presentations go perfectly that's pretty silly we're just putting up a static message let's do something a little more interesting let's put a custom alert message so the idea here is that on each one of these directives in CSS that match up to something in the client side DOM I'm putting some instructions for what's supposed to happen I just added another instruction and there's lots of things we did that's kind of the the easy side from a developer's perspective this is all that silly CSS JavaScript crap what happens on the server because we want these boxes to interact with the server send in information get information update things in the browser that's the next demo this is where we talk about the connection between that client side stuff that we just saw in the server side stuff in this case we want clicking on the description to send a message to the server it does some work and send a result back this is my sandbox setup the entire clone site and Gauntwa told me the easiest way to cheat on this is to go hijack his module instead of creating a brand new product and registering it and all of that so I'm going to go down into the CSS the KSS package the little configuration point hijacking and wiring in this case the configuration point that I'm hijacking is the configuration language for so called ZCML the configuration market language this is what one of those files looks like and I'm going to add in some directives what this directive is doing is adding essentially adding a new URL to so the URL is going to be registered for instances of that content type I say content type but this is the name of the URL and that's the code that is going to run since it points to a Python module we'll open up the Python module paste some stuff into it that Gauntwa told me to paste and not understand what I was doing I'm getting confused between my screens which are working on this side a pretty small amount of code for the amount of stuff that it's doing we get a a subclass from the work work that Gauntwa has done for us a view that handles the client server interaction this is the thing that handles the URL it's past the argument it does a little bit of work and then insert magic here it packages up a it's almost like X a set of instructions back to the X it tells it to do some stuff ok so once we get that code done we restart the server and we go check to see if it works we're going to go and put a new URL on the URL bar to see if we can get a response and we did you see response 1 up there you see the argument I've passed in that Python method and the value for that argument calculates the time on the server and sends the strain back that you are passing on that URL and that's where everything matches on this side that's in the URL that's in the query stream the value as the argument on the query stream gets put in there now we know that the client side works we got the server side works let's wire the two up together and the wiring happens in that CSS language so let's go back to that CSS file maybe we were offering that CSS file through the web browser we're going to go open that thing up again and let's see when I click on this node go and run this action on the server send it this argument get its results back and do something and it took longer to explain that than typing not a very large amount of code for that now once I reload the page and click on it I'll get to your word box first because that was the first directive I had but then the next thing that's executed is pretty interesting it went and found another box on the page the portal actions box and it shoved the results into that portal action and the thing that was saying go find this box and shove stuff into it is actually the pipeline code on the server the pipeline code to a degree took control of the browser and pulled it what to do there you see on line 13 it's saying go find that ID what to do with it so that's the server sign of KSS back to the presentation so the two benefits that you get immediately from KSS the first is that Gauchois and Balash have done most of the work to make clone out of the box take advantage of this I have another screencast I'll put on the site that shows using some of the stuff from KSS for example you can go to the title on a page click in it and the edit box save it and another box on the page will update itself the recent changes box will update itself it will be told to update itself of KSS and if you make a mistake like putting an empty value in the form error will happen without a trip to the server to replace the page the other thing that's nice about it is in addition to having it be more useful out of the box you as clone developers can leverage this to make your own clone applications easier and you can do it with this the clarinus file approach where you don't necessarily have to learn anything about JavaScript okay so that's the HX port on the third part of the presentation about portlets none of my these two guys what we want to show in the box I'll just give you the demo first what we want to show is how plug-in free has been a content management system less of an internet one of the big things for internet is the ability to collect information in the boxes on page and let users manage those boxes to turn them on turn them off whatever and so the portlet system for clone 3 tries to bring some of these internet use cases into the world of clone and do so in an architecturally salad way so rather than writing a portlet from scratch as part of the screencast I'm going to go hijack an example portlet and just make my own application to it so I'm going to check out that package into the products area of my clone developer site and once I get that I'm going to open it up and make a couple changes so here's my product so I'm going to dive down into my portlet the name that I checked out in the configuration language for Zote one of the interesting features is this extensible so instead of making people do a lot of extra work we wrote a very specific directive only for the purpose of configuring a new portlet that is then made available to everybody as the user interface for that portlet pretty simple and here's the code for that portlet how it gathers up information in an actual user interface I'm going to restart my server and go check and see if I can use this portlet for those of you who might have used clone in the past you can see a lot of error messages on startup with deprecation warnings and things a lot in clone 3 we see on the right and the left we have examples of portlets we also have this so the first thing we have to do is that's a new package that I just created we need to make it available to this particular clone site so I'm going to go install that package my portlet package is now available so I can use it in the portlet interface this is one of the first benefits from the portlet work that Martin and Gier did is you have a web based approach that each person or the site administrator can do to change the portlet from the site you can reorder them using the kss ajax stuff moving them up and down or I always turn off the calendar for the first thing I do I like two columns and I can add a new portlet I'll add the portlet that I just created then a load portlet which is the message to this play of this portlet that was determined by the author, the creator of the portlet that portlet is now available on every page of the site I go back to the home page and I'll see you in a little portlet this is a neat thing about their system portlets their system for primary portlets is you can configure a portlet to appear in a certain column based on what group a person is in so not everybody will see the same thing what content type you're looking at so if you're looking at a news item don't show a portlet about announcements and you can also set up per user portlets. Now when I go back to one of the pages in the site I will see the portlet available on the right with the message that I configured it to have so with this approach the world of adding portlets and intradet functionality is a lot more sane usable for humans instead of programmers and gets us into the path that's starting to use some of the new features in the world of ZOPE specifically the ZOPE free computer architecture and finally the world of ZOPE is starting to use this thing called generic setup where you saw in the KSS demo I went and clicked around and added a bunch of stuff really cool but what happens if I want to share it with someone else or recreate a sign later generic setup is a way to do a whole bunch of configurations press the button get everything about your configuration saved to a file for checking in a subversion running a little low on time as far as demos so I will I'll go a little bit quick on this so this is actually running locally and for example this is going to edit one of the pages on the this is KSS acting right there so for example this is the inline editing of KSS I'm going to change that to say welcome to PonsDenon and the page changes somewhat inline but also the recent changes box was also told to change itself and cause something to happen without really changing the entire page the entire URL other things that are available in clone 3 this is by far the big one I'll just show it real quick instead of the whole thing I can make a bunch of changes and then when I save it I have an option to do version control a very important feature for high end content management systems to get end users the ability to do versioning so you see all the versions that I have I can do dip, revert add a new version with the comment message through here this is also configurable so you can do for example auto versioning there's also a system called staging which allows the public to see one site one version of all the content while your content is running other things that you can do clone 3 has a system for link checking and validation I make a link from one page to another if I go try and delete the target of the link I would get a warning that it's linked to from other pages and the confirmation that I should want to delete it if I move the page from one place to another I go to the old URL I'll be redirected to the new URL I can put double friends around phrases and just in the middle of the page not a special content type so what's really nice about this is I could have a purchase order content type that I wrote myself put a rich text field in the middle of it and it will get wiki functionality just because this wiki the wiki system is available for anything that has a rich text field in it also indexing of all this content using the WBWare libraries several other features so that's a little bit of a talk about clone 3 I guess I have about 5 minutes left it's all live the schedule said 10.45 well we're going to be having a long talk sorry the thing I intended earlier so this is a little bit of a run-through for developers for clone 3.0 a little bit of the user features as well what's coming beyond clone 3 the next release clone 3.5 the slave port a little bit later this year a lot more architectural stuff will happen on it same thing as the release page I showed you before there are these clips that are being written and scheduled for that release performance for example is important for clone 3.5 actually some good things happening in clone 3.0 there are also some things happening that I was involved in yesterday that are happening in our community hopefully with other communities for clone 3.0 or future things happening in clone some of us are starting to get involved with some EEU activities based around fall software having to do with quality measurements other kinds of metrics and how this can establish a sense of maturity about open source for governments to make evaluations but also commerce in Europe to make evaluations the projects that were presented yesterday that we were involved with a little bit they're all about collecting metrics, collecting information doing really rigorous analysis of that finding out what are the trends how can we establish the difference between a quality project and a high quality and low quality project what are some of the case studies and all of this I view all of this as important to talk about within our communities because we want to succeed beyond each other we all know that it's good how do we convince other people that it's good unfortunately component architectures are not the best way to convince a decision maker to adopt your software there is unbelievably some skepticism out there about how we do what we do and it just takes a while takes things that we don't know how to do very well in order for us to mature beyond our natural allies how do we reach some of these skeptics and the way I look at it is we involved in these projects we need to make a decision to engage some of these activities that participate in it because it's good for us we alone will never be able to reach these people they hate revolution they like safe measured approaches some of these projects are doing the work for us they want to help us they want to come to us and say let us do it for you you don't have to do anything all you have to do is let us help you so if you get a chance to do a work with some of these projects and talk with them go to presentations like I always do because I think it's the kind of thing that resources are always good at how do we see the big picture how do we do things that make an impact further out these are the people that are doing it for us particularly in the EU it's important if we help them get involved inside of our projects they will do the work to help us explain outside of the philosophy so the on to the best word for any presentation in conclusion you are all for all this material Plum 3 is coming Plum 3 is available now should be in NATO should be released sometime in May you'll note that I didn't say of what year Plum continues with Plum 3 the world of Plum continues to grow up from a future perspective it's growing up with things like versioning and staging which are usually the high end domain of content management systems it's growing up in terms of how it views itself in the larger world of its stack with the zip application server Python programming language we're trying to do work at the right level of the stack getting involved with eggs getting involved with so free trying to grow up a little bit on the legal front Plum Foundation is really interesting because we try to manage the group rights for everyone in Plum protect them from Plum so we have around 92 members board of directors in existence for 4 years have about 35 grand in the bank and we own the copyright for Plum we can speak on behalf of Plum and that is unfortunately the content management world there are so many content management products I swear to God during my presentation somebody wrote the content management system and published it and it might be good but I doubt the world needs the 12,000 in first content management system so as some of the content management systems get bigger and droop rules after me some of the ones at the top you start to see us investigate things more less about code, more about maturity more about legal stuff the people involved with Kruppel and Jula and some of the other systems we all work with each other about sharing information on how to run foundations for example and I view that part as just as important as code because what we do is so good we got to share with other people and those people care about things like that and finally the Plum community continues to grow I got invited to speak in Japan next month so the more it grows the more places I get to go so if you're interested in content management if you're interested in big communities lots of fun a project with a logo that has its own color Norwegian blue and a logo that looks like a Scandinavian lightsight and in content management take a look at Plum ask me any questions afterwards any questions now before we wrap up if you see me tomorrow remember the first speaker of the day gets free beer for the rest of the conference thanks everybody