SyholSimon Holloway


(new Developer('Simon', 'Holloway'))
    ->setEmail('simon@syhol.io')
    ->setGithubUrl('http://github.com/syhol')
    ->save();

What Am I?

Server Side

Since picking up PHP during my BTEC I've been using it as my primary language for the last 4 years. I started writing all my own code doing procedual CRUD, then moved on to WordPress themes and plugins shortly after.

While at Hutchhouse I started learning Laravel, Object Oriented programming, and testing with PHPUnit. Recently I've been experementing with functional programming ideas in PHP.

Web applications like SDM have allowed me to work with ElasticSearch and MongoDB. Building web apps is a passion of mine and I'm interested in working on them in the future using PHP, Ruby, Python, Node and other languages.

Client Side

I think HTML and CSS have become incredibly powerful over the last few years, and I like to keep up to date with the latest trends, but my real interest lies in JavaScript, especially the shiney new ES6/ES2015.

Starting with jQuery in 2011 I've since learned how to interact with the native DOM API and a set of frameworks from Backbone, Knockout and Knockback to Angular and ReactJS. Throughout this journey, I have discovered that its better to invest your time learning vanilla JavaScript.

I've really learned to appreciate the simplicity of Javascript, especially the prototypical OOP features, and lexical scoping closures. I've created numerous front end build pipelines with Gulp, and love to use features like Babel and SASS.

Other

In my spare time I'll either be down the pub with an ale in hand, working on my open source projects, or kicking ass and taking names on the Xbox.

The power users favorite tool is the Terminal, and I'm determined to become a master! Using ZSH, GNU tools and the Git CLI, I feel like Zero Cool from the 1988 film Hackers.

I do my best to read blogs and forms for the languages im currently practicing to keep up with the trends, but I also love to research other languages, and I've dabbled with Dart, Java, Haskell, Closure, Python and Ruby.

Employment History

Hutchhouse

2012 - Present

At Hutchhouse I spent my first year building bespoke highly customisable WordPress themes. After my first few months I extended the inhouse development tools that are still being used to this day. Around this time I was building ATG Oxford and Marston Group.

During my second and third year I continued working on WordPress sites like Tessella, but also started working on web apps including Rocado and Street Dance Mixes.

The projects listed on this site are only a fraction of what I worked on at Hutchhouse.

Contracting

2011 - 2012

After my education I contracted for a year doing small sites, WordPress plugins, themes and some E-commerce scripts.

During this time I was teaching myself PHP, WordPress and how to interact professionally with clients.

Education

BETC National Diploma
for Software Development
and Web Design

I completed this two year course at New College in Swindon. It's a level 3 (equivalent to 3 A Levels), qualification and I received one distinction and two merits represented as "DMM". I excelled most in the practical assignments, and loved to go above and beyond when building programs, and the friendly competition in the group helped encourage self learning.

The course had 15+ modules, but I'll just go over the ones that stuck in my mind.
We learned about:

  • Microsoft Access, relational databases, how to form relationships with primary and forign keys and how to normalize/denormalize data.
  • The basics of Object Oriented Programming, with composition, aggregation, inheritance and association.
  • Building websites with HTML, CSS and PHP. Creating forms, validating them, sending them to a server, and saving them in a database.
  • How to design a computer game and what it would take to build it.

My education gave me a foundation to then teach myself what i needed to know. The main language of this BTEC was VB.net, and I have applied that knowledge when experementing with staticlly typed languages like Java and C++.

GCSE Maths: B

Maths and programming are a natural fit. Algebra is the use of variables, geometry is drawing shapes and data structures in maths can be applied to programming. I really enjoy the subject and would like to pursue it further.

GCSE English: C

English skills can be helpful when reading and writing documentation, conversing with clients and collaborating with colleagues. I love to read fiction but recently haven't made the time for it.

GCSE Media: C

Media studies really helped me understand how people consume media. This has given me skills for building layouts and application prototypes that i used while at Hutchhouse.

Street Dance Mixes

Street Dance Mixes is a music E-commerce platform for DJ's and street dance crews. Designed and built by Hutchhouse.

The project is split into 2 codebases. The first codebase is a REST API written in PHP and Laravel that talks to MongoDB as the primary database and ElasticSearch for superpowered full text searching, using ngrams, weighted fields and case insensitive search using multi fields. The second codebase is an angular app built with gulp and sass.

My responsibilities on this project were:

  • Design the API stack, interface and architecture.
  • Adapt acceptance criteria in agile stories into actionable tasks.
  • Implemented the API design.
  • Install system requirments on development, demo and production boxes.

Rocado

Rocado is a search service for buying and valuing agricultural machinery. Designed and built by Hutchhouse.

We were tasked with creating the client side of the application while designing the server REST API interface that was going to be implemented by a third party. This is my first project where i used Angular JS.

My responsibilities on this project were:

  • Assessing the current codebase, and planning the requirments to complete the project.
  • Building a state manager the kept track of the active and previous queries.
  • Building a url manager that kept the url in sync with the state manager.
  • Building a saved searches module (view and logic) save and load states/searches.

Tessella

Tessellas main site, jobs site and blog site represent the Tessella company. One of Tessellas products "Preservica" has a sales site and a public access browser. Designed and built by Hutchhouse.

Hutchhouse and Tessella have a long running relationship that has allowed me to work on many projects with them. We built content driven sites, where tessella admins could create documents, videos, events, posts and more. Later we build a public access interface for one of their products "Preservica".

My responsibilities on this project were:

  • Applying Tessellas content requirments into WordPress themes.
  • Building a dynamic and overridable nugget system where tagged or recent content is pulled into pages.
  • Creating shielded content functionality that intergrated with Marketo.
  • Working with the Preservica SOAP API to build a browsing interface.

Marston Group

Marston group are the UK's largest judicial services group. We built their main site, an intranet, and a web app for field agents. Designed and built by Hutchhouse.

Marston has used Hutchhouse for a range of web projects. First was the marstons main site where we used raphael JS to build the animated star on the home page, and draw lines between titles and paragraphs on the service pages.

We also built an intranet that hooked into marstons LDAP system for user authentication and division/user directories.

For my first Backbone and MongoDB application I helped build the Marston field web app. The field app cloned data from a SOAP API and stored it in a MongoDB Database, which was synced to local storage in backbone.

My responsibilities on this project were:

  • Assist on syncing the field apps third party database with the local database.
  • Building animations and drawing lines with raphael JS.
  • Using PHP's LDAP module to talk to an LDAP instance.
  • Building an animated interface for the field app.

ATG Oxford

ATG Oxford are a bespoke travel agency. They organise trips and walks throughout europe and asia. Designed and built by Hutchhouse.

For ATG we build a faceted search and custom booking system. The faceted search is built using WordPress Taxonomies along with ajax and HTML5 push state. The custom booking system is made up from a custom built, content managed form wizard with server/client validation and session data.

My responsibilities on this project were:

  • Building the booking system wizard.
  • Integrating with a payment gateway.
  • Building the single trip display pages.

Security Sensor

This project spaned over a year, multiple iterations and included multiple technologies including ZMQ (Zero Messaging Queue), MongoDB, Knockout + Knockback + backbone, WKPDFtoHTML and Websockets via ReactPHP (like node for php).

My responsibilities on some of these project were:

  • Assisting the project lead with building the applications.
  • Intergrating the system with the clients system.
  • Building the ZMQ message receiver that formatted and inserted data into the database.
  • Working in an iterative agile manner, and contributing to retrospectives.

PHP

The language I am most proficient with is PHP. I have a solid understanding of classes, objects, arrays, scala values, closures, closure binding, scopes, magic methods, and the core API's.

I can implement most design patterns in PHP and enjoy using it to discover efficent solutions. I love the simplicity that PHP brings to server script development by only having a short lived state (the request), making topics like memory management less important.

I've used PHP to build E-commerce solutions, intergrate with large bespoke applications and craft custom designed full stack services.

Laravel

Most of my API's are built with Laravel. I've been using laravel sinces its version 3 release, and Iv'e closely followed its development leading up the the version 4 and 5 releases. I have intergrated Laravel's blade templating language into a WordPress plugin, and try to bring Laravel's best practices to WordPress development.

Using Laravel I have built both full stack application, and REST API's for Hutchhouse clients. I have used Laravel's ORM eloquent extensively and I can comfortably build a service layer to validate data, authorize opperations and update relationships within an application.

I almost always use Jenssegers "MongoDB - Laravel" package that allows Laravel to use MongoDB with with hardly any impact to the codebase. I love to depend on well build third party libraries to avoid reinventing the wheel, but im also happy to implement my own code, that can be reused on other projects.

PHPUnit

PHPUnit is part of the xUnit testing framework family. I've used PHPUnit to write large tests suites on my 2 largest projects, Street Dance Mixes and the Security Sensor.

I use PHPUnit to write both end to end (e2e) tests and unit tests to create great test coverage of my code. I use my unit tests for test driven development, and write my e2e tests inline with the projects acceptance criteria to make sure the product is working as expected.

WordPress

WordPress is an open source content managaement system. Although its showing its age by still running code thats of PHP4 standards, it's got a huge ecosystem and in the right situations it's very fast to build on.

I've used wordpress to build:

  • Booking systems
  • Faceted search
  • Intranets
  • A social network (buddypress + woocommerce + lots of custom code)

I've have a good understanding of:

  • The permalink rewrite system
  • The custom post type and taxonomy system
  • The "Loop"
  • Create/Read/Update/Delete in WordPress
  • The user system in WordPress

JavaScript

Javascript is the true language of the web. Running on browsers, and servers, it's currently evolving both in syntax and ecosystem.

I have a solid understanding on Javascripts object model, it's prototype system and its lexical scope. I have a working knowledge of using "this" inside functions with apply(), call() and bind(). I can tell whether values will be passed by reference or by value, and can build system using both functional and object oriented methodologies.

Angular

I've used Angular to build responsive web applications using controllers and factories to seperate view logic from data fetching and mutation. While at Hutchhouse I worked on Rocado and Street Dance Mixes, both of which are built on angular.

Using Angular helped me implement seperation of concerns in JavaScript. The two way data binding meant that keeping data in sync accross multiple sources was a breeze, the HTTP service opened up a powerful interface for talking to third party API's and the templating language kept my views lightweight.

Although using angular helped structure my webapps, I felt as though I spent a lot of my time fighting against the digest loop. After the announcement of ReactJS I've been dying to use it in a production app, but it hasn't yet left my sandbox.

Gulp

Gulp is a build system that runs on NodeJS. I've used gulp in quite a few project whether im editing an existing config or create one from a boilerplate or from scratch, I find gulp to be a powerful expressive system.

Using gulp I have:

  • Compiled and and minified SASS
  • Concatenated and minified JavaScript
  • Compile ES6 to ES5 using BableJS
  • Watched files for changes and reloaded the browser with BrowserSync
  • Created Deployment Commands

MongoDB

MongoDB is my database of choice. It's schemaless nature means that I can prototype and itterate quickly without having to create table migrations, and schema adjustments. When I'm ready I can then look at performance and place an index on the fields I know will be queried often. Also no schema means that a wide range of data can be stored with little concern.

Another reason why I choose a document database is the ability to nest documents, and because of this we don't need to seperate relationships into pivot tables. Although we can't do proper joins at the moment, products like RethinkDB are tackling this challenge.

I work with MongoDB using the following tools:

  • The Native PHP MongoDB driver
  • The Jenssegers Laravel MongoDB library
  • The MongoDB CLI
  • The Robomongo GUI

ElasticSearch

While I think that MongoDB is a brilliant database, it lacks a decent full text search. ElasticSearch fills the gap the MongoDB fails to fulfill. Full Text Search.

I used ElasticSearch as a search engine on Street Dance Mixes. The primary database was MongoDB but the text search was not good enough, also the fact that we couldn't propery run an case insensitive sort was an issue.

I setup an ElasticSearch river that pulls data from MongoDB, then I created mappings for each type (document/table) that I need to search, and for each field I created a multi field, one for text search and one for case insensitive sort.

I work with ElasticSearch using the following tools:

  • CURL CLI tool
  • The official ElasticSearch PHP composer package

MySQL

MySQL is the classic web database. I can write schemas, migrations, CRUD queries, and joins.

MySQL is the database for WordPress, and I use the WordPress wpdb class to work with extra tables when I need build extra functionality. I once built an analytics tables to record various actions with multiple entities.

I work with MySQL using the following tools:

  • PhpMyAdmin
  • Laravel's Eloquent
  • PHP PDO
  • PHP MySQLi Extension

Git and Svn

When starting at Hutchhouse in 2012 I was introduced to Svn. Over time I learned about branching and tagging, but in Svn it was pretty awkward.

2013 I started exporing with Git and it came with a little extra complexity, with local repositories and a decentralized structure, but the cheap and fast branching, better CLI and awesome diffing made me fall in love with Git.

Terminal Power

Since using Ubuntu as my main operating system since mid 2014, I've been picking up command line tools. From simple navigation with cd and ls, editing config file with nano, and compression/archiving with zip, tar and gzip.

I've also started to prefer to use the CLI for my version control needs, and I have a good grasp on how to use ssh, identity keys, passwords, authorized_keys and the ssh config file.

I've started to customise to beef up my terminal experence by switching from bash the the Z Shell (or ZSH), installing some shell plugins and using the terminal multiplexer for sessions, panels, and tabs.

Concepts & Methodologies I Follow

S.O.L.I.D

The S.O.L.I.D principles is OOP on steroids, its all about building highly configurable, testable systems.

T.D.D

Test Driven Development helps enforce testing while writing code, so by the end of a project you have a fully tested codebase, ands its easier to detect breaking changes.

D.R.Y

Don't Repeat Yourself tells us not have code that does the same thing multiple times, instead use reusable code, this means when changes need to be made, they only need to be made once.

K.I.S.S

Keep It Simple Stupid is important for matainance, when you come back to a piece of code, you want to be able to understand what it does withough reading a guide.

Agile

Small iterations plan > development > review produce the issues that need to be tackled in projects where there are lots of unknowns.

Refactoring

In the spirit of agile, building code quickly to explain a concept may be necessary, but that code will need to be adapted over time to handle tough situations.

Object Oriented Programming

OOP is a powerful concept that makes developers think in terms of objects properties and responsibilities that interact with each other.

Functional Programming

While OOP is quite a complicated concept, functional programming boiles it down to data and functions, and attempts to remove state from gritty logic.