Recent Development

Overview

Over the last five years my client work has focused primarily on using Drupal 6 and 7, but still with a good mix of front-end implementations with pure HTML/JS/CSS and obviously the “obligatory” dependencies and services.

My own personal projects have continued to center very heavily around JavaScript, front and back-end. I've been experimenting, as usual, with some of the recent "crazes" — but tempering that risky cutting-edge with years of "vanilla" knowledge.

Unfortunately, most of my very recent client work has been toward a project I frustratingly cannot show here. However, I can highlight some of the elements I was charged with working on.

Subset

Codelamp v4

Redesigned parallax, and modern tech

My personal website has just be relaunched, rewritten entirely from scratch. You'll be viewing this right now, hopefully it shouldn't need much in the way of introduction.

What you may not know however is the site is constructed from a "Vanilla" CSS/JavaScript parallax framework, designed to work without JavaScript. The content is then handled by a smattering of microsites, each one powered by a different technology (Riot.js, React, and Angular).

This was done purely for the sake of learning, not because I somehow think it is good architectural practice.

You can read a bit more about the parallax journey here on my blog. Which is also powered by a different technology (Jekyll)

Demo reel

I have also taken the time to put together a demo to highlight some of my more favoured pieces of work.

It is still work in progress at the moment, it is also the first video I've put together since Video Production at school — so be kind ;)

Headless CMS, and CMS/Angular Front-end (2016)

Git, and many, many, repos ...

The last client project I was working on for a ticketing company, was actively using 90+ git repositories. This allowed for great modularisation and helped in avoiding conflicts, but became quite a task in terms of management. Especially when we weren’t allowed to use a git management tool like GitHub or BitBucket, and that it took 40 repos to build just one of the two sites we were working on.

To add to the complication, much of the development team were working remotely, with English as a second language, so trying to confirm that all developers were on the same page became a task in itself.

No time had been assigned to this issue, so we needed a quick solution. Some developers were already using a simple bash script to pull down multiple repos (considering there doesn’t seem to be a good tool for managing actions on multiple repos simultaneously).

So I extended the script outside of project time to give us what was required.

Bash, Bats, Oh-My-ZSH and CygWin

The script ended up being the largest bash script I had ever written. It had plugins, tests, a build process, interactive help and autocomplete. All of this was sideline to the main aim of implementing a command to help the team, but each element I added helped speed up development — all enhanced in my own time.

The build process became required because half the team were unfortunately working with CygWin, which constantly had issues with line terminators. The build process sorted this out.

In the end we had a simple-to-use command that could process multiple repos, and could also deploy the site over SSH using rsync.

I was rather proud of this tool and it helped increase my bash knowledge massively. However, in hindsight, I think I would chosen to write it in Python or Node had I been given the task of planning it out.

Casper, Testing and Content generation

I've used Casper in the past to implement tests, but this time, it came in handy for generating site content in Drupal.

The benefit of this, beyond using modules like Migrate, was that the system could be used against any instance of the site from a central location. So the destination Drupal site itself didn't need any changes made to it, in order to import content.

The system happily supported images and WYSIWYG content, and at the same time acted as a test for the Admin UI.

Casper Screen

Google Sheets & App Script

The last project was awash with Spreadsheets.

Prior to this project I had probably worked with about five spreadsheets in my life time... now, I have actually lost count. This led to numerous occasions where the manually edited and offline-stored data (using Excel), had to be converted into something that could be utilised by code. There were also many places where a version of the spreadsheet/documentation had to be kept inline with up-to-the-minute architecture or development changes.

All I can say is thank Darwin for Google Sheets and its Script Editor.

I now have quite extensive knowledge of Google App Script, and how it can vastly help integrate data that may lie outside of the usual development practice. This included:

  • Generating a Drupal module based on information held in a Spreadsheet
  • Keeping multiple tabs up-to-date using abilities that can only be scripted
  • Generating formatted JSON from a Spreadsheet
  • Taking spreadsheet data and converting it into an SVG seating plan

Drupal

I've been using Drupal now since 2009. It is a robust reliable system that can help kickstart and serve as a base for any CMS project.

For the last project I worked on, Drupal was to be used both in a headless manner (powering an API) and to manage the Front-end layout using Paragraphs.

I was mainly working with modules I had used before. The complexity arose from using a number of modules that I'd used individually in combination.

Swagger integration

I hadn't encountered Swagger before this project, but I will continue to use the subtle paradigm shift that it gave me in terms of generating APIs. For the project I developed a Drupal module that followed Swagger best-practices and linked it to Services. This allowed the Swagger JSON to be directly generated from the structure active within the Drupal instance.

The upshot of this was that for any new content or content type added to Drupal, the "CMS API" could automatically serve this content, whilst simultaneously describing itself over Swagger. This meant that clients and servers could be automatically generated (using Swagger Tools), as could documentation (via the Swagger Editor and UI).

The benefit of generating many things from a base-description has been clear to me for a number of years — and is one of the key ideas behind my "Pockets" project. For some reason prior to this project however I didn't apply this thinking to the APIs I built.

Now, the last three APIs I have constructed have all been generated from a base-description — one of which is directly powered by Swagger 2.0 itself.

Paragraphs

I had already used Paragraphs (a Drupal module) briefly on a previous project, but here we really went the whole hog.

The entire front-end was powered by components constructed from Paragraph elements. Considering Paragraphs is a relatively new module, this was always a risk. But in many places it really payed off.

As with any powerful module however, there are always issues when interacting with other major modules — so now I am much more aware of where Paragraphs work well, and when to use a different system.

Tate — Art & Artists, Albums (2015)

Django, Python, Pip and Pep8

Art & Artists was a singularly interesting Tate project because it involved replacing the existing java-powered tate.org.uk/art with a completely new Django/Python back-end. This actually gave me the chance to delve into Python, a language I have always found intriguing... and if I'm honest, I definitely prefer it to PHP.

Django Python

Tate — Main Site (2011 — 2014)

Drupal 7, PHP, JavaScript

Back in 2011 I took on a very interesting contracting role, to help the one and only Tate to revamp their website. My work mainly involved Drupal 6 and 7 development, deployment and maintenance; but also included large amounts of module coding, and module reworking. Not to mention the bespoke Drush and deployment scripts and the client-side interfaces. Mostly working with PHP, MySQL, HTML & JavaScript; along with Git and Linux.

The core site was constructed from scratch in Drupal 7 (PHP/MySQL), which was steadily been upgraded over the years with a number of useful bespoke features (minisite capability, social sign in, audio and video groups, improved landing page support, mobile tours). I was also been involved in a number of sibling projects like Turbine Generation, and more recently Art & Artists (mentioned above).

Drupal Js