SHOWstudio website rebuild
Working with front-end developer Sally Northmore, I built the SHOWstudio website in CakePHP. Notable features include search, a calendar system, online store and a custom-built blog, all manageable through an intuitive admin panel.
I played a key role in the site’s development, having input on issues like how content would be structured and what features would be present. I was solely responsible for the back-end build. As well as coding the site, this included a large data migration effort, pulling nearly a decade's worth of content out of the old site. I also took care of the new site's deployment to a scalable web hosting platform, Amazon EC2.
The site makes heavy use of Cake’s plugin architecture, server-side caching and shell script functionality.View project
Other things I’ve been working on recently
- The Angry Architect, a blog and content management system for an architecture journalist.
- The back-end for Thomas Cooksey Studio.
- Keyword Bookmarks, a site for sharing browser bookmarks.
- I was asked by the team at Notekick to help out with some front-end development on their site.
- Various odds and ends on GitHub.
A very brief CV
Back-End Web Development. 12 years’ experience with CakePHP. 4 years’ commercial experience with Symfony. Understanding of building maintainable, test-driven, scalable web applications using object-oriented code and the MVC pattern. Extensive use of PHP, MySQL, PostgreSQL and Elasticsearch.
DevOps and Systems Administration. 8 years’ experience provisioning and maintaining Linux servers to run high traffic, high availability websites. Solid command-line knowledge. Experience with Git, cron, rsync and related utilities. Ability to administer Nginx, Apache, PHP, MySQL, PostgreSQL, HAProxy, Exim, OpenSSH and other services. Knowledge of cloud platforms such as Amazon EC2 and Rackspace Cloud, and development tools like Vagrant and Jenkins.
Management and Workflow. Long-term experience implementing and using agile workflows. Ability to switch between management and hands-on development roles. Experience of building a development team and meeting business-critical deadlines. A long history of liaising successfully with product owners and stakeholders, both technical and non-technical. Extensive use of Git Flow and continuous integration. An overall focus on pragmatism.
February 2017 — Present, Wireless Logic
Building features for SIMPro, an online platform for managing SIMs and IoT devices. Working with Symfony, RabbitMQ, Solr, MySQL and Angular 2. Building customer-facing APIs. Leading the Development Support team, responsible for bug fixes and maintenance of the platform, as well as general troubleshooting issues arising from the management of millions of SIMs integrating with many third party providers. Responsibility for code review and regular releases to production. Working to agile principles, using pull requests and code review. Helping to establish better testing and the use of tools like SonarQube.
July 2016 — October 2016: PHP Developer (Contract), Adaptive Lab
Developing a RESTful API used by Forevr, a contacts application for Android and iOS. Using Symfony 3, domain-driven design, TDD and BDD, PHPSpec, PHPUnit, Dredd, PostgreSQL and Vagrant. Using PHP 7 for its enhanced language features and working with large denormalised datasets in Elasticsearch. Working closely with iOS and Android developers to establish desired functionality, and using BDD and API Blueprint to help codify this. Liaising with the business founder and other stakeholders. Maintaining load-balanced infrastructure in AWS, and deploying to it using Ansible and Travis. Integrating with the Facebook API and building a feature with SQS to send push notifications to mobile devices.
May 2016 — July 2016: Senior PHP Developer (Contract), Havas Worldwide
Maintaining and improving a Symfony-based crowdfunding platform for a global drinks brand. Deploying with Capistrano to a load-balanced setup in Rackspace Cloud. Working with CDNs, database migrations, unit and functional tests, the Facebook API and multiple translations for the website's worldwide audience. Front-end development with Twig, Sass, Grunt and jQuery.
May 2015 — April 2016: Technical Lead (Contract), MBA & Company
Leading the development team in a total rebuild of this startup's web application and server infrastructure. Ensuring good architecture and a robust product. Hiring a technical team of seven developers and helping establish a productive working environment. Developing using Symfony, Doctrine, MySQL, Twig, Bootstrap and Sass. Scripting data migration and orchestrating the switchover to new infrastructure in Rackspace Cloud. Reporting directly to the COO and attending board meetings to update the company's investors. Working with the Product team to define an MVP for launch, successfully meeting a very tight relaunch deadline, then leading the tech team in iterating rapidly on this. Establishing an agile workflow and test-driven approach. Using Chef to manage infrastructure and Jenkins for continuous integration.
October 2014 — February 2015: Senior PHP Developer (Contract), Amaze
Working on a CakePHP-based social publishing platform for a global hotel company. Working as sole developer, from early prototype to production site used by 22,000 employees. Establishing an agile workflow, coding conventions, Vagrant-based development environment and a focus on unit testing. Co-ordinating with project stakeholders both from the agency and the client company. Integrating with some of the company's existing infrastructure, such as LDAP authentication. Using tools like CakePHP, PHPUnit, Jenkins, Grunt, Sass and jQuery.
May 2014 — September 2014: Senior PHP Developer (Contract), MBA & Company
Acting as the technical lead, working with an in-house Junior Developer and remote teams in India and Russia to improve the application for a funded recruitment startup. Building features and reducing technical debt on the Yii-based platform. Reducing code duplication and establishing coding best practices for the team. Using tools like Backbone, Sass and Elasticsearch. Establishing an agile workflow and regular deployment process using tools like Jenkins.
July 2009 — April 2014: Back End Developer, SHOWstudio
Working alongside a Front End Developer on a total rebuild of the SHOWstudio website using CakePHP. Migrating server infrastructure from a single dedicated machine to AWS, using S3 and Cloudfront for assets and Wowza Media Server for live video broadcasts. Building and maintaining server instances in EC2. Migrating 10 years of editorial content into the new application and orchestrating the switchover to it. Building features from scratch such as a blog, events calendar, project archive, online store integrating with Sage Pay and a content management area used by the editorial staff. Using tools like PHPUnit and HAProxy. Building some 'big data' features such as tracking millions of tweets and Instagram photos to create data visualisations. Managing mailing lists, corporate email and all other infrastructure.
Recent blog posts
Finding a front light for the Brompton
A front light setup that doesn't get in the way of the fold.
The state of USB OTG on the Nexus 5
The Nexus 5 is billed as fully supporting USB On-the-Go, which is exciting. But it doesn't quite work out-of-the-box.
Unlocking the bootloader on the Huawei G510-0100 using OS X
It took some fiddling to do this with my specific model of G510, and using OS X. Here are the steps.
Logging temperature over USB
A cheap USB sensor called the TEMPer1 makes an ideal temperature logging device.
Exploring the Tandy 102
Released in 1983, the Tandy 102 was the Macbook Air of its day.
Battery power for the Raspberry Pi using a Powergen 8400mah pack
You can take the Pi mobile while it's battery powered, then charge the battery from the mains while it simultaneously runs the Pi.