Google Summer of Code 2017- Wrap Up

Oshane Bailey
Aug 28, 2017 · 6 min read

This summer, in the year 2017, I got an opportunity to work on a large-scale open source project through Google Summer of Code (GSoC). It is the first time I’ve worked on an open source project at this magnitude and contributed to the core of the project. This is the first time I’ve entered Google Summer of Code and I’ve of met a number of brilliant individuals in the field. I can say without a doubt that it was a fun and worthwhile experience. However, this blog is not about my personal experience during GSoC but a summary of my project, tasks accomplished and outstanding tasks.

Firstly, Google Summer of Code is a global internship program that focuses on introducing students to open source software development. Students work on a three months programming project with an open source organization during their break from university. For me, I am working with the Plone Foundation.

The Organisation

Plone is a free and open source content management system built on top of the Zope application server. It is written mostly in Python. Plone is positioned as an “Enterprise CMS” and is most commonly used for intranets and as part of the web presence of large organizations.

My Project — Improving the Plone Theme Editor

Plone by default comes with a theme editor, where by designers and editors of themes can customize the look and feel of Plone directly through the web (TTW) without having to reload or restart the application server. My project for GSoC aims to improve the user experience of the Plone Theme Editor by making it easier for designers and theme editors to work with. This involves making the experience more like an online IDE, similar to Cloud 9 IDE (C9).

Objectives and Accomplishments

In my for GSoC, I stated a timeline and the task to be completed, as seen in the table below.

TimelineTaskStatusJune 1stto June 18thImplement the searching for files and text within filesCompletedJune 18th to June 26thImplement the drag and drop feature for uploading and moving files and foldersCompletedJune 27th to July 8thImplement the new look of the theme editorCompleted for features implemented thus far. July 9thto July 20thImplement the importing and exporting of rapido apps.Partially Completed — Rapido apps can be imported and exported from other themes on the site but not from or to an external rapido store.July 21st to August 15thBuild automated tests and documentationCompleted for the code that has been committed thus far.

In addition to the tasks mentioned above, I’ve also added couple other enhancements such as:

  • Shortcut keys for creating files and folders, searching for files and text within files, and refreshing the file tree
  • Context menu to delete, rename, upload and create new files and folders.

Challenges and Unaccomplished Objectives

When I started this project, I thought I had to do mostly JavaScript coding to little to no python coding. As it turned out, that assumption was almost on point. However, the majority of my time was not spent on coding but managing dependencies and integrating the various packages that are associated with the plone.app.theming package during testing and development. There was a constant back and forth updating the following four packages to ensure that the changes are ported to both Plone 5.0 and 5.1:

Even though, I updated the to support the migration of rapido apps between local themes. I did not complete the rapido external store feature to import and export rapido apps from and to an external repository similar to bower. Furthermore, I did not add all the changes I wanted to the look and feel of the Theme Editor.

Demo of the site with all the changes during GSoC can be found at .

Preview the site without any of the changes during GSoC at

Credentials for both sites:

username: themer

password: themerpass

Contribution Activity

Currently, on 28th of August, there are 10 pull requests closed and 1 open. The list below contains the link for each pull request per package.

Pull requests for plone.mockup

Pull requests for Products.CMFPlone

Pull requests for plone.app.upgrade

Pull requests for plone.resourceeditor

Pull requests for rapido.plone

I have not yet created a pull request for plone.app.theming due to the fact that the open pull requests above need to be merged before I can release the new version of the Theme Editor.

Evaluation of GSoC and Mentors

My mentors for GSoC are quite knowledgeable and very supportive. I’m glad that I was given Asko Soukka and David Bain to guide me. David is in close proximity; therefore, I can call him during the day. Asko is great. Even though Asko lives in Finland and there’s a great time zone difference, he’s quite responsive. He tends to know all the directions I should go. It almost seems like my project is something he already conceived to do but didn’t get around to do it. The only issue I have with the development cycle is how components are tightly integrated. It feels like someone might get lost without prior knowledge. Luckily for me, Asko and David are geniuses, and they’ve told me on few occasions that I must update package B, C, and D before I can update A. This saved me few hours of work since I would have to debug and trace co-dependencies from both frontend and backend. The Plone community is quite supportive as well. Someone is almost always on standby to answer someone’s question. I truly like the atmosphere.

I have learnt a lot during 2017 GSoC season and hoping I will continue to strive and learn more as I continue to work on improving Plone’s Theme Editor outside of GSoC. Sadly, I will not be able to do GSoC 2018 since this is my final year at the University of the West Indies, Mona campus. However, I will definitely encourage others to participate in the upcoming GSoC to gain some insight on developing open source projects. Lastly, I thank my mentors, Asko and David, the Plone Foundation and Google for all the support they’ve given me.

Currently, David Bain (my mentor) and I are running a crowd funding campaign for the trip to Barcelona.