I am a software engineer and systems administrator with over twenty years' commercial experience, focused on Free Software and open standards. My mission is to improve the world and benefit the common good. I have over a year's experience in the IoT space and working with containerised applications in Kubernetes, as well as seven years' commercial experience developing and maintaining web services in Python (2 and 3), using Django, Restish and Flask frameworks and backed by PostgreSQL, Cassandra, CouchDB, Solr and Elasticsearch and dealing with scalability to serve millions of users worldwide. Prior to these I wrote Java for 10 years, and spent almost two years supporting desktop PCs and Point-of-Sale terminals. I have over twenty years' Linux experience and have been using Ubuntu exclusively on my personal machines since 2006.
The most recent version of this file can always be found at wyrddreams.com/cv.html.
Wyrd Dreams is a freelance IT service provider offering web development, custom application development, systems and network administration, and hardware and software support among other services and specialising in open source and open standards. Predominantly this has been piecemeal part-time work alongside a full-time role, with only a couple of longer-term engagements.
Most recently I was contracted by OpenCraft, working on the Free Software Open edX MOOC platform, and OpenCraft's self-service platform for Open edX instances, OCIM. This was a full-time, fully remote role, with weekly sprint meetings via Zoom, and day-to-day communication via email and Mattermost, as well as asynchronous communication on Jira tickets. The company is small but has a handful of clients for whom it manages dedicated Open edX instances on OpenStack clusters.
Key technologies: Django, Open edX, Git, Docker, Vagrant, Ansible.
I was responsible for devising and implementing the company DevOps strategy, allowing us to meet our 99.9% uptime requirement, providing early warning of non-critical service alerts, and enabling zero-downtime deployments. This multi-faceted role encompassed consolidating, standardising and documenting our various platforms, scripting deployments, implementing Jenkins pipelines and generally making the day-to-day operations less burdensome. I liaised with our developers to learn about the tools of their trade and how best to deploy and manage them in a traditional VM environment, and learned to use Docker and Kubernetes to make our platforms more scalable and reproducible. I introduced system metrics via collectd and application metrics via statsd to aid with monitoring and capacity planning, and logging was centralised using fluentd and used for debugging and service metrics, all feeding into Google Stackdriver. I was responsible for advising on service architecture and performance improvements, mentoring developers and more recently a junior DevOps engineer.
Key technologies: PHP, MySQL, Git, Docker, Kubernetes, Google Cloud Platform, Jenkins.
I also designed and developed a hardware and software solution to receive, store and forward temperature readings from our electronic temperature monitors to our cloud platform. This project started as a messy workaround to overcome the lack of TLS capability in our bespoke hardware, and was expanded to also provide fault tolerance in case of network and service unavailability, elminiating data loss, as well as remote administration of the hardware to reduce the need for site visits.
Key technologies: Python, Celery, SSH.
As part of the Online Services team, née Web & Mobile team, I was responsible for a wide range of Canonical's web services. I was initially brought on board to work on the Ubuntu One file sync service, and was involved in the development of various add-on services including contact synchronisation, music streaming and photo galleries. Remote pair programming featured heavily.
Key technologies: Django, PostgreSQL, Celery, Cassandra, CouchDB, Graphite.
Most recently I was involved in the creation and growth of the Ubuntu Store for Click and Snap packages. I served as tech lead on the Click Package Index search component that is the main Store API entry point for all Ubuntu devices (phones, desktops and IoT devices running Ubuntu Core) when searching for, installing and updating Click and Snap packages.
Key technologies: Django, Restish, Flask, PostgreSQL, Solr, Elasticsearch, ELK, Juju, Grafana.
Leading a core team of two Java EE Developers and a DBA, I was responsible for the development and maintenance of Aeromanager, the Rolls-Royce customer-facing web portal for the management of civil aero engines. I worked with a small team within Rolls-Royce to determine, define and prioritise requirements. I was responsible for scheduling items for development, testing and release, managing the team's workload, mentoring team members and removing impediments to enable the release schedule to be met.
As part of a drive to improve efficiency and customer satisfaction, I initiated and supported the development of a JUnit test suite for the application, and the adoption of Agile processes for development.
Key technologies: Java, BEA WebLogic, WebMethods, SQL Server.
As part of a three-person team, I was responsible for the ongoing development and maintenance of our SMS messaging and billing platforms. Our diverse range of services included wi-fi credentials for The Cloud; PINs for Nokia's music download services; and enabling the mobile banking services of First Direct and HSBC provided by Monilink. I liaised directly with customers and suppliers to establish and prioritise requirements, maintaining an ongoing development roadmap while also providing application support, including out-of-hours work to maintain a 99.5% availability as per our SLAs. I produced and documented our development and deployment processes, based on test-driven development, with a continuous build environment and automated tests run on our staging environment.
I instigated and oversaw the installation of eGroupware within the company as a centralised ticket tracking and project management tool and for its wiki and other collaboration features, as well as the introduction of online meetings via Skype IM to aid with the transition of support staff from their various legacy systems. I also wrote the system startup scripts for our web and application servers to allow all services to start in the correct order after a hardware failure.
Key technologies: Java/J2EE, IBM WebSphere, Struts, Oracle 9i, CruiseControl.
Working as part of a team of around 70 individuals, I was responsible for the development of bespoke applications designed to be tailor-made solutions to the business needs of our clients. I worked closely with several mobile telecommunicatons service providers, helping our applications to attain validation for operation on live service networks. This involved performance of a series of test scripts and analysis of SMPP 3.3, SMPP 3.4 and SEMA OiS traffic as it was transmitted to the SMS Service Centres.
As level 1 staff member, my role was mainly user support. This involved helping with administrative requests such as password resets, username and channel registrations, and general queries. I was also involved in the resolution of user disputes, moderation of undesirable behaviour, and acting as a catalyst for productive, collaborative discussions.
Initially tracing old maps and later uploading and tracing GPS tracks of my own, I have covered large parts of Derby, including the vast majority of Mickleover's coverage. This has been supplemented with remote mapping of crisis areas as part of the Humanitarian OpenStreeMap Team.
Available on request.