It’s been a few weeks since the conclusion of the Emerald Sprint.  Steve has already provided an excellent account of the work we did and I just want to add a little to that. 

First, I have to say sprinting is awesome. So much goes on at a sprint beyond straight up coding: friendship, mentorship, and knowledge percolate and take hold in no other fashion I’ve experienced before. If you have an opportunity to join a sprint, do so as you won’t regret it!

Working with Ian Anderson and Steve McMahon was great. We were able to take and re-factor the existing work done to make user data schema editable through the web, and allow it to be updated via Generic Setup with package installation. But there is still some work to be done: 

  • Currently, image and file fields do not properly store or reference their file objects. 
  • We need the ability to break the required fullname into a computed field based on firstname, middlenames and lastname fields (which also need to be reorderable due to regional differences).

Before signing off, I’d like to take a moment to thank Fulvio for bearing the brunt of organizing and managing the sprint. Sally also deserves a round of applause for taking charge of the dining logistics and to those that provided their expertise in the kitchen (Sally, Ross, Spanky, Liz, Fulvio, Cris, and Franco) to sustain the sprinters. Just ask any of the sprinters about Franco’s Tuco sauce, Sally’s oyster pasta, Spanky’s salsa and guacamole, or Ross’ fabled Aviation.  There really needs to be a Sprinter’s Cookbook for future endeavors.

Filed March 27th, 2014 under Uncategorized

I worked with Franco Pellegrini, Chris Calloway, Cris Ewing, Eric Steele, and Liz Leddy to move Plone’s login to a more modern z3c.form based implementation. The first part of this process was to discover and document the parts that needed to be updated. From this, we decided to create a html based prototype before actually getting down to coding. This planning allowed us to determine what the major tasks were, and what could be done later. 



Note that we’ve included external auth sources right on the login view. Additionally, links for help and new account sign up are easy to find. External auth is not yet implemented. The login implementation is working, but may not handle all the cases that the current login functionality has.




Two things to note is the ability to use an external source for your registration and the gray bars at the bottom is the password strength indicator. Both of these are not yet implemented.  

Login Help:


 The login help form has been stubbed out but needs a full implementation.

Logout, Insufficient Privileges, Request Access have all been implemented, but require further attention. Desired improvements to the login system include a way for integrators to easily include their own organization’s custom password policy.


To see it in action follow the instructions to get the Plone 5 cordev buildout working, then run  

./bin/buildout -c  plips/plipNNNN-new-login-flow.cfg









Filed March 27th, 2014 under Sprint, Plone

I’m back from another successful annual West Coast Plone sprint: the Emerald Sprint on Whidbey Island near Seattle. Don’t miss Trish’s lovely video montage of our weekend:


I worked with Ross Patterson and Fulvio Casali on the users & groups control panel. The plan is to make it look and work similarly to the new folder contents UI, with the data getting loaded as JSON and manipulated by javascript:

New users control panel 

Compared to the existing control panel, the new one shows more information about each user, including join date, last login date, whether the user is allowed to log in, and whether the user has confirmed their email address. It also will make it easier to apply some actions in bulk, such as adding a many users to a group or adding a role to many users at once.

So far our implementation uses the same mockup pattern as the folder contents UI (the “structure” pattern), but with different columns and actions. There’s still quite a bit of work to be done:

  • Implementing the JSON view for fetching user and group data. Ross has started on this but it’s complicated because of fetching roles inherited from groups, etc
  • Implementing the various actions that can be performed on a user or set of selected users
  • Using a simple search instead of the query builder, which is intended for content indexed in the catalog. 
  • Integrating the pattern into Plone’s control panel.

On the final day of the sprint, I worked instead on the user preferences form. Our master plan is:

  1. Rename the “author” page to be the user’s Profile. Link to it from the user’s personal menu instead of to the preferences or user information form
  2. When a user views their own profile, it will include an Edit button which goes to the Edit Profile form, which is a combination of the current user information and user preferences forms.

New profile view 

We haven’t built most of that yet though. I worked on paving the way by removing a couple of preferences that aren’t needed any more: the external editor setting (the sitewide setting should be good enough) and the “visible ids” setting (whether a user can edit the id of an item from its edit form).

The latter isn’t necessary any more because I added a “Short name” behavior ( to Dexterity, which adds a Short Name field to the Settings tab for any user who is allowed to rename items. If not specified, the id will be obtained automatically in the same manner as before. Hopefully this behavior can be enabled for the default content tyeps in soon.

Editing the id 

There’s still plenty of work to do, but I’m proud of the good planning that happened at this sprint. For some other sprint reports, see these posts:

  1. Redesigning Plone 5’s control panel - Cal Doval
  2. It takes a village - Trish Ang
  3. User Property Frolics on the Sound - Steve McMahon
And then there was a big group of people working on the login and registration process…can we have a report please?

Filed March 21st, 2014 under Sprint, Plone

Hey all!

Back in California now but I was definitely having withdrawals as soon as I walked away from the #airportsprint. Let’s do this again soon! Anyway, I put together a fancy blog post about what I learned during the sprint. I’m pretty sure every time I talked to someone new, I picked up another great Plone tip, but I recapped the top three for starters. —

Also, for posterity, here are the assets for both the login screen mock-ups and the mock-ups. Feel free to remix ‘em if you want to! (Bonus: the Emerald Sprint logo is in there, too.) — 


Til next time,


Filed March 20th, 2014 under Sprint, Plone

Hi Guys, first off thanks for inviting us to Seattle! It was an awesome experience!

Hope to do it again soon.

Here are the assets of what I was working on-

and here is the blog 

thanks again


Filed March 20th, 2014 under Uncategorized

In our upcoming Emerald Sprint we are going to hit the ground running, and a week from now Plone 5 will be much closer to reality.  I hope you all got a chance to go over David’s blog post last week.  Now it’s time to fire up our engines and run the buildout we will be using.  I am posting this on our blog, because thanks to the awesome work done at all previous sprints, the Plone 5 coredev buildout is in the cleanest shape I’ve ever seen a Plone buildout.  And so other Plonistas might enjoy giving our current Plone 5 a whirl.

Sprinters, this is a just a little prep work that will make our Sprint go that much more smoothly.  Please have this buildout ready before you even leave home to come to Seattle.  I had no issue whatsoever when I ran it, and was excited to see Plone 5 running on localhost.  If you run into any problem, let us know, and we’ll sort it out.


First, create a virtualenv (this is something I do every time I start any project, it’s nice to have as much isolation as possible).  The clone buildout.coredev from github, and switch to the 5.0 branch.  Bootstrap it, and run buildout.  That should be it!

> virtualenv emeraldsprint
> cd emeraldsprint
> source bin/activate
> git clone
> cd buildout.coredev
> git checkout -t origin/5.0
> python
> bin/buildout

Now start Zope and bask in the glory of zero warnings!

> bin/instance fg 

 Finally, just a word on our fundraising campaign:  we are only 20% away from our goal!  If every core contributor gave even just $1, I’m sure we would fly well past the goal.  Every donation helps, no matter how small!


Filed March 10th, 2014 under Sprint, Plone

I’m starting to get excited about the 2014 Plone Emerald Sprint which is happening in a couple weeks on lovely Whidbey Island near Seattle.

The focus of the sprint will be doing some work on Plone’s user membership features in preparation for Plone 5. Now, the sprint will be more effective if we all (the sprinters, and the wider community) have an idea of what needs to happen before we arrive. To that end, I just spent some time taking screenshots of the current state of things in Plone 5 (yeah yeah, I know, it’s a job for a robot) and making lists of what I think should happen.

So here goes. Look, there are pictures!

Login form

Login form 

  • This is currently implemented as a bunch of old CMF skin templates and scripts. Should be rewritten using z3c.form. Whoever works on this should start by reviewing the work Gil Forcada already did (
  • Dialog is missing a title
  • Say “username” instead of “login name,” for consistency
  • Fix bug where a user logs out and then logs in again, and is taken to the logged out page.


Password reset

Password reset form 

  • This is also old code using CMF templates. Should be rewritten using z3c.form
  • Say “username” instead of “user name,” for consistency
  • Improve wording of the email that’s sent to the user
  • Liz, you had some bugs related to this, right?
  • After user sets their password, log them in immediately (?)
  • Would be nice to show a checkbox in real time for whether the new password meets the criteria.


Registration form

Registration form 

  • Eric Brehault & co. have done some good work on PLIP 13350, which aims to make it possible to edit the member data schema through the web with the Dexterity schema editor — so you can collect whatever information you want from users! There are a few tasks which need to happen to finish getting this ready to integrate.


Personal information form

Personal information form 

  • This is the form for editing your member info once you’ve already registered. It has already been converted to z3c.form. Integrating PLIP 13350 will also affect it.


Author page

Author page 

  • This is linked from the byline of pages and is the closest thing we currently have to a public user profile. It would be nice to make it possible to select fields from the member data schema to be shown here.
  • It would also be nice to add an ‘edit profile’ button here, for users with sufficient permission.


Preferences Form

Preferences form 

  • I always get confused between this one and the Personal Information form. This has settings that affect one’s use of the CMS, as opposed to information about a person.
  • I think it would make sense to merge this into the Personal Information form, as a separate fieldset.
  • We should remove the per-user external edit preference.
  • We should remove the per-user ‘edit short name’ preference and instead always show the short name field on settings tab of edit forms for anyone who has permission to rename.


User/groups control panel

User control panel 

  • Plenty of room for UI improvement here
  • Hide control panel navigation portlet, or find a better way to show it that doesn’t eat horizontal space.
  • Need to fix the navigation between users and groups
  • The options on the ‘settings’ and ‘member registration’ tabs should be moved to the Security control panel, which should be renamed to something like ‘Member registration’
  • Can we automatically determine when to use the ‘many users’ and ‘many groups’ flags?
  • It would be nice to add a way to mark a user as “inactive” so they can’t log in
  • It would be nice to show a user’s last login time


Sharing tab

Sharing tab 

  • Plenty of room for UI improvement here
  • Folks at the Cathedral sprint recommended renaming this to “Grant access,” since “sharing” tends to mean social media these days.
  • Should this show in an overlay?
  • We should make it clearer that the columns are roles, not permissions, and what exactly they do. 


Other topics

The above pages are the ones that I consider essential to have working well for a Plone 5 release. There are other possible topics related to Plone members, and if someone is super motivated to work on one of those, don’t let me stand in the way. Two that come to mind for me that are each pretty big projects on their own are:

  • It would be nice to add optional support for logging in via an external authentication source (such as google, facebook, etc)
  • It would be nice to modernize FacultyStaffDirectory, convert it to Dexterity, etc.

If you’ve made it this far and are excited about the possibility for improvements to Plone’s member infrastructure, but can’t make it to the sprint yourself, please consider donating to help cover the costs of the sprint.

Filed February 28th, 2014 under Sprint, Plone

I’m just back from a wonderful and productive weekend at the Emerald Sprint, full of sitting in the hot tub overlooking Puget Sound, eating delicious meals, and making some great progress on improving the Dexterity content type system.


Our mission was to tackle a variety of tasks, encompassing both improvements to the through-the-web content type editor and to the capabilities of the tool for developers. On the first morning of the sprint, we spent some time brainstorming possible tasks and voting on them with sticky dots. We then picked tasks that had either lots of green dots (considered important) or a red dot (considered low-hanging fruit, i.e. relatively easy to implement). The full list of tasks was captured on our Trello board which we used to track status as the sprint progressed.

I spent a lot of time helping other participants with their projects, but also tried to get in some time working on improving Dexterity’s overall user experience. It was a real privilege to work with Alice Tseng, who previously helped Martin Aspeli improve the UX for the Diazo theme editor. Alice helped facilitate a user testing session with Wayne Glover and Sally Kleinfeldt, two participants with no previous experience with the Dexterity type editor. It was very enlightening to see people encounter the UI for the first time and try to figure it out while explaining their thoughts. Alice took copious notes which she’s in the process of posting to the sprint wiki. One of the biggest take-aways for me is that while the concept of “behaviors” may make sense to developers, it’s quite difficult for users to understand, and we need to do more to present them in ways that make it clear what functionality they enable.

We also did an exercise where we got about six of us to each sketch multiple ideas of what the UI of the type editor should look like. We then gathered and explained the ideas to each other, again with Alice taking notes. This turned out to be a great way to get lots of ideas out for discussion quickly without the risk of group-think limiting the space of designs that we considered. We ended up deciding to pick two possible directions to use for further user testing work.

Alongside this UX work, we got a lot done:

  • I made some easy adjustments to the type editor based on things that were rough edges in our user testing. For example I added a bit of help text, removed the option to create non-container content types, and made sure that after the user adds a new type they are redirected to the Fields tab for that type. I also made the setting for a field’s default value appear in the field’s edit form, rather than allowing setting defaults from the overview of all fields in the type, which was confusing to everyone. These changes are all on master.
  • I also made progress on some work I started earlier to make it easier to customize attributes of widgets for fields in a Dexterity schema. For example, specifying the number of rows for a text area. This work is in the davisagli-widget-parameters branches of plone.autoform and plone.schemaeditor, and is almost ready to merge.
  • Franco Pellegrini and Fulvio Casali started adding a new page for exporting content types, including a preview of the XML definition of the type’s schema. They are also working toward exporting a full installable Python egg rather than just a GenericSetup profile. This work is currently in the full-egg-export branch of buildout.coredev. 
  • Franco also made it so that a new Dexterity item gets a value for its language field assigned based on the language of its container.
  • Franco also worked on adding URL and Email field types with built-in validation and display widgets that render a link. This is currently in a new package, plone.schema, which needs to be integrated.
  • Luke Brannon and Jesse Snyder worked on migrating code from collective.dexteritytextindexer into Dexterity core. This will add a ’searchable’ toggle for each field to include it in the full text index.
  • Liz Leddy implemented a view that can be used to export a Dexterity item represented as JSON. This is in and depends on some changes in eleddy’s fork of plone.dexterity that I still need to review.
  • Sally Kleinfeldt reviewed the current state of Dexterity documentation and sent me a bunch of notes on how to improve its organization, which I still need to digest.
  • Steve McMahon worked on implementing a widget for choice fields that can switch between radio buttons or a drop down depending on how many items are in the vocabulary (similar to Archetypes).
  • Ross Patterson added a setting to the Overview tab for a type to configure the allowed types that may be contained within the type. And he completed some work that was done earlier by Patrick Gerken to support changing the type restrictions for particular containers (as was already supported for Archetypes).
  • Ross also merged code from collective.dexteritydiff into Products.CMFDiffTool and code from collective.cmfeditionsdexteritycompat into This makes it easier to enable versioning for Dexterity content.
  • Matthew Wilkes started working on some architectural changes needed to support repositioning fields that came from a behavior and moving fields to different fieldsets.
  • Bill Deegan moved all the Dexterity issues from the old Google Code tracker to issue trackers on github. The Google Code tracker has now been turned off and new Dexterity issues should be submitted on github.

Many thanks to our sponsors for contributing to the above work: Plone Foundation, AndersonLeeb, Cris Ewing, Glick Software, Soliton Consulting, Blåstolen, the Seattle Plone Gathering, Chris Calloway, Ryan Foster, Silvio Tomatis, Dan Jacka, Philip Bauer, Roel Bruggink, Asko Soukka, Ian Hood, Ulrich Stockschlaeder, and Jesse Snyder. Also big thanks to Sally Kleinfeldt and Alice Tseng who spent a lot of time in the kitchen preparing some delicious Italian meals.

Filed February 12th, 2013 under Sprint, Plone

Man, I had all these cute NPR pledge-drive-themed references ready, but now I won’t get to use them…  You guys took only 5 days to help us reach our Chipin goal!  Doesn’t it feel good, though? 

Once again the Plone community proves what we’ve known all along, namely how committed its members are to supporting each other in continuously improving its platform.

Thanks to these generous individuals, we have pulverized our goal for Emerald Sprint, and will have all the financial resources we need to make this a sprint for the history books:

  • Christopher Calloway
  • Ryan “Donald” Foster
  • Silvio Tomatis
  • Dan Jacka
  • Philip Bauer
  • Roel Bruggink
  • Asko Soukka
  • Ian Hood
  • Ulrich Stockschlaeder
  • Jesse Snyder
  • Martin Opstad Reistadbakk 

Thank you! 

Filed February 5th, 2013 under Sprint, Plone

I feel like a public radio announcer during pledge drive.  For those of you outside the US who don’t know what a pledge drive is, it’s a ritualistic torture method inflicted on the public radio and tv audience (and on the radio hosts, too) for a week about every couple of months, where all your favorite radio shows are preempted by incessant and brainwashing begging for money.  There is even a Wikipedia article about it (of course):, as well as several related entries in urbandictionary.

But the reality is: many members of the Plone community are unable to join a sprint at the moment, but know how much Plone benefits from the work put forth at each of these events.  Emerald Sprint has been granted the “strategic” designation by the Plone Foundation, and is about to assemble a team of high-caliber contributors.  The goals of the sprint are ambitious:  read David Glick’s previous post on this blog to find out what we are hoping to accomplish and why.

Several sponsors made a significant financial investment in turning this sprint into a success, but we still have a gap to fill before we can cover all the expenses, including supporting some of our sprinters coming from a very long distance with their travel costs.  So, even if you can’t join us this time, there is a simple way to share the glory of the awesomeness that is Dexterity:  Chip in!  There are only a few days left, so if you want to help, do it now!

Your donations to Emerald Sprint are collected directly by the Plone Foundation, a 501(c)(3) non-profit organization, so they are tax-deductible (in the USA).  

The Emerald Sprint team thanks the donors who have already given so generously, and hopes you will consider a chipin, too.

And as they say on National Public Radio, the faster you help us reach our target, the sooner the beggathon will stop!


Filed February 4th, 2013 under Uncategorized
Next Page »