Wednesday, April 16, 2014

Install Plone in under 5 minutes on

I was introduced to by +Rok Garbas. It turns out to be a very nice platform for developing Plone projects. So far what I like is that every Codio box pretty much ships with all the Plone dependencies while at the same time having a full suite of Node based tools (important for modern Javascript development), this is a great time saver on new projects.

These are still early days so I can't say much more about the platform but I do love that offers unlimited projects. The system feels like a good cross between and Cloud9 IDE.

Here's a script (based on my Plone installer) that will get you up and running on in less than 5 minutes.

Once you've opened an account at do the following:

Step 1 - create a new blank project

Step 2 - Open the terminal and run the script

Open a terminal by going to "Tools" > "Terminal".

Then paste the following command into the terminal.
curl -L | bash
You will see output similar to this:

Step 3  - Customize your Codio Project

Next to the help menu you should see the "Configure" option, if you don't see it click the little arrow near the end and then select "Configure".

This opens a .codio file which you can customize. Replace the existing text with the text below:
// Configure your Run and Preview buttons here.
// Run button configuration
  "commands": {
       "Start Plone":"",
       "Stop Plone":"",
       "Debug Plone":"",
      "Admin Password": "cat $HOME/workspace/zeocluster/adminPassword.txt"
// Preview button configuration
  "preview": {
        "Dynamic Site": "http://{{domain}}:8080/",
        "Static Index (static)": "https://{{domain}}/{{index}}",
        "Current File (static)": "https://{{domain}}/{{filepath}}"

Now you're all set, you can manage Plone from the Codio menu.

Start and Set up of Plone

You can start Plone using the Codio menu. You should now see options such as:
Start Plone, Stop Plone, Debug Plone and Admin Password. 

To setup your first site "Start Plone" and wait about 20 seconds, make a note of your "Admin Password" and then select the "Dynamic Site" menu entry and click "Create a new Plone site". 

You should be good from there.

Monday, March 3, 2014

Video on getting a Plone Development Box up and running with

This week at the March Jamaica Plone Meetup will be focused on learning about using the Robot Framework. This is a video designed to get participants up to speed before the event.

I've also prepared some slides and a github gist

The Gist

Sunday, March 2, 2014

After Digital Jam 3 - Take aways and next steps

Just a few photos from the recent "unofficial" After Digital Jam 3 meetup. This is not meant to be a faithful or exhaustive transcription of the meetup. Funny how this post echoes the idea from 2012 post that discusses how to figure out how we create "Digital Craftsmen".

The "unofficial" After Digital Jam 3 Meetup was small but worthwhile. We were able to put the events of Digital Jam 3 Day 1 into some perspective and discuss how members of the Jamaican developer community could act upon some of the initiatives that were indicated by the various speakers.


We actually spent a lot of time in just introductions around the table. Present at the meetup were:
Rohan Smith a developer who has recently moved to Trindidad and Tobago pitched his new project Rastival, a "hear it later" app (my words), Rastival is a mobile app and chrome extension which will allow users to hear rather than read articles of their choice from around the web. 

Damien Harris - Managing Director at Unique Media Designs, his company is known for for Virtual Mall Jamaica and their online marketing services. They also also develop eCommerce websites for businesses in Jamaica including a payment gateway that works via National Commercial Bank.

Kaiton Williams - Technology Anthropologist, he's interested in understanding how Jamaicans are interacting with technology, previous to this he spent a decade working at Microsoft and has also worked with companies her in Jamaica including Pan Media and Jamaica Online, when it was around. 

Ramon McLaren - Software developer who has worked in media. He's now at the University of the West Indies as the coordinator for final projects in the Computer based management information systems programme (CBMIS) at the Mona School of Business and Management (MSBM). While he declares himself to be an "AntiSocial", he doesn't do Facebook or Twitter, he certainly can keep up a conversation.

Allistaire Mclaren - An engineer at CARIMAC and is wrapping up the CBMIS programme, he's working with a team to convert their final project into a software product. 

Daryl Baugh - An entrepreneur who works with web metrics, web design and building internet companies. There is lots more to say about Daryl like his ability to draw on obscure statistics to match every point he makes but we'll stop here for now.

General Discussion

From the days' proceedings I personally singled out a comment by Chris Zacca who pointed out that investors are looking for alternatives to government paper and may be more willing than previously to invest in tech businesses. I think we're all waiting to see what happens with "Startup Jamaica" the incubator that Julian Robinson says will become a reality in the near future.

We spent time listening to Rohan's pitch for his new app which will help you to "hear the internet".

Take Aways

It would be impossible to curtail the discussion to things related to Digital Jam 3, some take aways from the meetup:
  • Persons liked the idea of meetups where we actually get to build stuff (less talk more action), the actual implementation details will need to be decided upon. 
  • There is a need for a more accessible community of coders/mentors. While there are systems, even informal that mentor musicians and athletes but no equivalent at any significant scale exists for up and coming developers. Rohan shared how in his early days he wanted to code but had no idea where to go to or who to speak to.
  • Mobile money could be a good thing but there was a fear of silos, we think that the best possible outcome would be interoperability standards so that you don't get locked into XYZ's mobile cash that can't be exchanged with ABC's own.

Most people at this meetup weren't as impressed with the Crowdflower, crowd working thing. Perhaps we weren't the right audience. The Crowdflower type model does make room for those who may not be higher level information workers to begin to tap into an internet based revenue but it's likely to be dull and repetitive tasks.

Where do we go from here?

Echoing a question that was raised at the Digital Jam 3.0 event, we started to discuss where we might want to take things. In terms of value to the developer community there seem to be two things to deal with:
1. A way for newbies to connect with mentors
2. A community where developers can grow their skills and learn best practices

Kaiton suggested that we look at a simple model where developers meet to code on and learn about interesting problems, similar to Kitchen Table Coders.  I think spaces like what "Startup Jamaica" will hopefully be will help towards this. In the meantime, I'm off to scheme to see how I can begin to contribute to some of this.

Saturday, February 1, 2014

Plone Newbie Advice 2014 - Learn the big picture, Trust the blackbox

If I had just 20 minutes with a Plone newbie, eager to become a competent Plone developer, this is the advice that I would give to them today. I strongly believe that after the release of Plone 5, later this year, the specifics of this advice will be slightly different as projects like Mockup become the standard, but hopefully the general advice will hold true.

I'm assuming that you've already installed and played around a bit with Plone. If not start by doing a quick cloud installation of Plone.

Fundamentals are assumed so make sure you understand them

In my experience persons trip up on things like Unix fundamentals, Networking and Protocols. So before you invest time in Plone make sure you know your basic web technology.

The Plone stack touches many pieces and the deeper you go the more you learn. The good news is that understanding these things will benefit you with other projects.

My checklist of fundamentals that you'll want to be comfortable with include:

  • HTML
  • CSS
  • XML
  • Linux/Unix Command line
  • Basic Python
  • Networking Fundamentals (TCP/IP, Application Protocols, Browsers)

As an example, recently I prototyped a system that relied on both Heroku and Google App Engine, the development was done using webapp2 for App Engine and Flask on Heroku. It involved  XML, Javascript and required becoming familiar with a couple APIs. My experience with Plone's Dexterity Framework and even the buildout system was a useful reference point. The system will eventually integrate back into an enterprise Plone deployment AFTER I'm comfortable that the parts all work.

Be an expert in your core

Being able to learn new technology quickly is not an excuse for learning things superficially. For Plone the core includes understanding things like user permissions, roles, content type schemas, browser views, templates and ZCML.

My checklist of Plone fundamentals

  • Page Templates
  • Content Type Schemas with Dexterity
  • Generic Setup Configuration with XML
  • ZCML
  • Browser Views
  • User permissions
  • Roles

Learn these well and you won't regret it.

Be systematic about your development process

My recommended posture would be the same no matter the technology stack. I'll explain them in more detail below:
  • Learn the big picture: learn about the tools available in your toolbox.
  • Trust the blackbox: learn only what you need to know.
  • Organically absorb the stack.

In general I've observed a mind-set in the Plone community that aims for systems that are "team scale" (not just "works for me"). I try to follow the following three rules as I develop, (not that I'm following them very well but...):
  • Aim to support iterating quickly 
  • Aim to support deploying reliably 
  • Aim to make your project so well documented and predictable that a knowledgeable Plone developer could pick up from you in less than 30 minutes

Learn the big picture

Find out what is available in your toolbox. I recommend these articles: - An overview of what Plone does out of the box - A non-exhaustive summary of the pieces of Plone - Gives a realistic picture of Plone - This is really a table of contents, but gives an idea of what's possible

Trust the blackbox

You don't need to understand the plumbing of your house in order to take a shower, the same is true with Plone. While there's a lot of plumbing going on you need only focus on how to connect your hose to the system. Some personalities find this difficult as they need to understand everything before proceeding but you'll need this approach to become productive quickly.  If you just want to use Plone as it was designed to be used (as a content management application and framework) then just grab some good examples and copy them.

Organically Absorb the stack

As you advance you will begin to discover that you need more parts of the stack. Learn these parts as you need to. Remember you can always dig deeper into more features of Plone and it certainly makes sense if you intend to become a core contributor to the project.

Wednesday, January 15, 2014

Continuous Documentation with Sphinx + AppEngine

Bitbucket is a great choice when you need to host a private code repository and have a small number of collaborators. Sphinx is excellent for developers who want to manage documentation, it is used by many Python projects including the Plone community and has been adopted by some in the Ruby and Java communities.

There are workflows that support public documentation of projects using these tools, but what if you want to also have a private documentation site?

I decided to see what was possible if my needs were as follows:
  • Private documentation
  • Continuous documentation
  • Needs to work with bitbucket
For public facing documentation I recommend However, because I wanted to keep a private repository and private documentation, I decided to host my documentation on Google App Engine. There's a way to do something similar on Heroku, but I like what I was able to "stitch" together with App Engine.


I'll start with the assumption that you know enough about git and bitbucket to create a git repository at bitbucket and do checkouts, commits and pushes to the repository. If you're unfamiliar with this then you'll need to go and learn that first, then come back here.

I also assume that you have the python app  engine SDK installed and available in your path (meaning that it you can run the '' command as a standalone command on the terminal.

The Pieces

Step 1 - Setup Sphinx

In your git checkout create your Sphinx documentation using the following command:

Accept the defaults for the first 3 options (Root path, Seperate source and build directories, Name prefix) presented:

Step 2 - Configure the repository for app engine deployment

Add the following app.yaml file to your repository (change the app engine id to match your own).

Note: If you don't want to force logins then change the lines that say 'login: admin' to 'login: optional'

You can now try a deployment by running the following command: update . --oauth2 --oauth2_refresh_token=`cat .token`
If all went well, add that command to the .git/hooks/post-commit file in your repository ( I use post-commit because it is a client side hook, bitbucket isn't going to work for server side hooks in this use case) update . --oauth2 --oauth2_refresh_token=`cat .token`
This will ensure that after each commit the documentation will be pushed to app engine, just before you do your next commit ensure that the command is executable:
chmod +x .git/hooks/post-commit

Step 3 - Enjoy

After your next commit you should be able to visit your shiny new app engine powered documentation site located at <your-app-id>

Invite Collaborators

Now that you know that it's working, go to your app engine dashboard ( and visit the app that you're using for documentation. Then in the permissions section invite new collaborators using their gmail or google apps email address.

They will receive a link to an authorization page that looks something like this:

Once they accept they will be able to view the documentation.

Possible Improvements

I'd like to make this into a script so that it is even faster to get going. Using the admin permissions and forcing is a bit of a work around. There are cases when this is not ideal, for example if the documentation needs to be shared with less trusted users.

Thursday, January 2, 2014

Scrumban - Knowing the BTTWON

BTTWON stands for the Best Thing To Work on Next and I'm surprised that no-one has coined the acronym before this. Show me a team where each team member can determine their BTTWON over the course of a project without needing to consult a manager, and I'll show you an efficient team.

This leads me to Scrumban which, I hope I'm not missing the point, seems to have an underlying goal of making it easy for team members to determine their BTTWON. Inspired by this idea I've decided to dive head first into Scrumban in 2014.

Scrumban takes ideas from the the Scrum approach and applies Kanban "pull" principles to them. I'm vaguely familiar with both methodologies, having worked on one project that used the Scrum approach and then loosely following ideas from Kanban for most of 2013. Scrumban seems to be a refinement that builds on the two others and I'm looking forward to experimenting with it.

The tools and methodologies

The overall goal is to settle on a process for managing software development and integration projects and it looks like we'll be building a hybrid based on a few sources of influence. The first is a blog post on using Trello and Google Docs by +Richard White at User Voice, the second is a useful project resource allocation spreadsheet borrowed from the Penelope project and the third, from the Deloitte Digital blog is entitled Scrumban: a different way to be Agile.

Scrum for TrelloBurndown for Trello and Boards for Trello are add-ons for Trello I plan to put through their paces this year.

Additional Reading:

These articles will help to give a quick comparison of the approaches.

A Howto on the Scrumban methodology from
A Quick Comparison of Scrumban, Kanban and Scrum
Scrum, Kanban and Scrumban - A Fast Overview
Why Stretched Teams do Scrumban

Parting Thoughts

I think this approach should be applicable to non-software and non-technical teams as well, but I haven't done much reading in that direction.

Saturday, December 28, 2013

Diazo theming is great, now we need a snippets library

TL;DR: Diazo is how theming should be done, you can even integrate new functionality into your site via a Diazo theme but be responsible and aware when doing so. XSLT makes Diazo more powerful but can be complex, a library of useful Diazo snippets could go a long way in making Diazo more approachable.

Just checked out +Nathan Van Gheem's rethemed site. His blog post is worth reading. He basically purchased a theme and used a few Diazo rules to make it work with Plone. He even went as far as integrating Disqus into his site using only Diazo rules, no touching of the underlying CMS code.

I like.

Adding functionality to your site via Diazo is a powerful thing but be careful, if you need to switch themes you'll need to add the functionality again or risk "breaking" your site. Diazo does leave your site vulnerable to sins of omission. Leave something out of your new theme that was previously in your old theme and you've lost it (until you put it back). One possible solution is to have themes that promise a minimum implementation, e.g. all valid themes might promise to include footers, menus, themed portlets and breadcrumbs.

Diazo is really a wrapper around an XSLT engine (I hope I'm understanding it correctly), the Diazo directives hide a lot of the underlying XSLT and generally make transforming your site more friendly. However, like Nathan, I've found that taking advantage of "raw" XSLT in my Diazo themes gives me more power, the price I pay is a more verbose file. Though raw XSLT is powerful I think it adds a barrier of entry to the average CSS guy. One way to lower the barrier is to document how common transformations are achieved using  Diazo and XSLT through some kind of snippets repository.

Below is a simple example of transforming a portlet using XSLT into markup suitable for a Bootstrap 3.x based template.

Before and After: The portlet on the left has been transformed using XSLT with Diazo

And here's the Diazo rule (with lots of XSLT) used to achieve it. The resulting transformation is elegant but requires a understanding XSLT and the related XPATH if you needed to construct it from scratch.
<!-- transform all portlets -->
<replace css:content=".portletWrapper">
<div class="pWwrapper">
<div class="portletWrapper">
<xsl:attribute name="data-portlethash"><xsl:value-of select="@data-portlethash"/></xsl:attribute>
<div class="panel panel-default">
    <xsl:for-each css:select=".portletWrapper > dl">
        <div class="panel-heading">
          <xsl:copy-of select="dt/node()"/>
      <div class="panel-body">
       <xsl:for-each css:select="dd">
            <xsl:if test="@class[contains(.,'portletFooter')]">
              <xsl:attribute name="class">panel-footer footer</xsl:attribute>
          <xsl:copy-of select="node()"/>

Diazo is how theming should be done. I now feel that Diazo as a theming framework is almost there*. It's good enough for persons willing to invest in understanding XSLT but will be helped along the way with a good snippets library.
* I'm aware that in some way, passing judgement like this, may oblige me to contribute somehow to the improvement of the Diazo ecosystem.