Full Stack Ruby on Rails Developer
I'm proud to be an agile web developer and sysadmin with over 3 years experience working in London and Manchester for web startups and established companies alike. Academically speaking, I have gained a BEng(Hons) in Computer Systems Engineering, and also an MSc in Broadband and Mobile Communications Networks.
Things that make me tick include building, deploying and maintaining scalable, efficient web applications, tinkering with operating systems and learning a medley of programming languages, especially mobile application development with Android. I love automation and systems configuration, especially using Ruby-based tools like Puppet and Chef.
I've made some useful tools to solve code issues too. I am the author and maintainer (see my Github profile) of the httpd_redirect_test gem, which provides shoulda style macros, allowing you to test apache mod_rewrite rules from test/unit and the twitter_notifier, a twitter plugin for cruisecontrol.rb to keep you notified of the latest build breaks and fixes.
In the future I'll continue to expand my knowledge, keep up to date, work with great people and solve interesting problems!
I'm also pretty handy in Vim!
I currently work as a developer for one of the largest Ruby on Rails teams in the country helping to develop our large and intertwined collections of applications and services. We develop primarily using Ruby on Rails and the associated languages of the web - HTML, CSS and Javascript. There are also projects existing in Perl and C as well as iPhone and Android apps in various stages from development to published on the App Store
Much of the architecture at OnTheBeach revolves around many small applications passing messages around in a service oriented architecture, as a result of this one of the main technical skills that I've had to learn has been how to effectively build API's, as relatively few of our applications need a user facing front-end.
We work using agile processes, We are broken down into several smaller teams, with some using Scrum and some using a Kanban based approach. Team rotation happens often so I have gained experience in working with both methodologies.
On several occasions I have been required to assume a team leader position to cover for extended holidays and absenses. This taught me a great deal about time management, managing co-workers and how to motivate people around me so we can produce our best work, delivering over and above what was required by some very tight deadlines.
In order to broaden and strengthen my knowledge of web development and embrace my love of programming I became a developer at Reevoo in February 2010 (moving from my previous role as a Systems Administrator). As a developer I have gained significant experience of working on large, high traffic Rails applications. One example is our ReevooMark product which is currently embedded in the sites of high profile retailers and manufacturers, such as Sony UK, Tesco, Ann Summers and Best Buy UK.
I work in a small team using an agile process to develop and maintain a set of distributed Rails apps. Our core offering includes the following: apps that manage data collection (bulk email campaigns and questionnaire response management), services that manage review data aggregation and filtering and front end applications to display the processed review data on Reevoo.com and our customers' sites. I have written libraries and services to display the collected review data in many different ways; from progressively enhanced in-page widgets that open a lightbox, to embedded solutions written in PHP, Java and C#.
Several ancillary services exist to facilitate communication between apps and to process the large amount of data collected from both clients and purchasers. I have written and maintain ruby daemons for large, regular, infrequent background data processing tasks as well as continuously running monitoring tasks and queue management libraries and pollers.
My skills as a systems administrator help me significantly as a developer by giving me an appreciation of the entire application stack from the operating system and web server level all the way to the design and client-side code.
I have practical experience of handling large quantities of data through the entire development and deployment cycle, as well as experience of scalable Rails development, front end development, agile processes (including local and remote pair programming), and working closely as part of a team to maintain and add features to a complex distributed set of applications.
I began working at Reevoo as one of two systems administration focused DevOps. We were responsible for maintaining Reevoo’s server environmen. This consisted of a cluster of servers in a remote data centre running an array of services including Apache, Mongrel, Beanstalk and a complex MySQL replication tree. My colleague and I ran virtualised replicas of this environment in the office to provide QA boxes for the development of Reevoo.com, ReevooMark and their ancillary applications. We also ran several other VM’s providing file stores, backup services and replicated databases for staff. All of these systems were managed by the Ruby-based configuration managemnet framework, Puppet. When I joined Reevoo one of my first tasks was to move data centres which we achieved with no downtime. Later I influenced the decision to switch from Puppet to Chef for our systems management and I shared the writing and construction of the Chef recipes with my colleague.
As part of maintaining the applications my colleague and I were normally the first to discover production issues. Due to this we often programmed in pairs with developers in order to write application code. This required a good understanding of how to program in Ruby, how to build Rails applications, the architecture design decisions required when building commercial Rails apps and an ability to work very closely as part of an agile team.
As part of Reevoo's agile process I introduced the concept of continuous deployment, championing it's use and writing scripts, helpers and tools to allow it to become a fluid part of our development cycle. This meant we could deploy our applications on each completed card and successful test run. This allows us to concentrate on the most important thing that matters; knowing that any changes we make can normally be seen live within one day.
I spent a year as part of a research group in the Computer Science department working on an industry-sponsored project investigating pattern-matching with respect to network intrusion detection. This involved designing a pattern-matching machine in hardware using FPGAs and the software allowing the matcher to be programmed and controlled.
During this position I gained experience in Java, hardware design, FPGAs and other programmable architectures, VHDL, finite automata, regular expression and string pattern-matching engines and algorithms.
I was part of a small development team creating the next version of AKJ's popular CRM system for use by the telecoms industry. In the process we migrated the codebase from Delphi to C# using the .NET 2.0 framework. This position gave me experience of working as part of a team to build high quality software to a deadline and to client specs.
My Masters degree focused on networking and its various implementations. I learned about TCP/IP and packet-based networking, Ethernet, the telecoms network, optical communication, digital video transmission and satellite communications.
The degree also involved a 6 month research project. I researched and built a CAN bus demonstration board, sponsored by an electronics company in Portsmouth. This involved designing and manufacturing the circuit boards required, writing the CAN bus interface software in C and writing a demonstration application for the board to run. This demonstration board was used by the company to sell their CAN bus solution to clients.
During my undergraduate degree I studied a balanced mix of electronics and computer science. I learned different programming languages and paradigms such as OO programming with Java and functional parallel programming with Occam-Pi. I also learnt about micro-controllers, various computer architectures and how they are built. In addition I learned soldering skills, hardware design, analogue and digital electronics, and micro-controller programming in C.
For my final year project I designed and built a PCI expansion card that provided a complete processor prototyping platform. It interfaced using the PCI bus and was based around an FPGA, had inbuilt SDRAM and multiple interfaces for programming the FPGA. It also contained JTAG headers and a separate power supply so that it could be used with or without a PC. I was awarded second place for the Final Year Project Prize by the Institute of Electrical Engineers Kent Centre.
I achieved A-Levels in Biology, Chemistry and Geography, and also have 9 GCSEs at grade C or above, including Information Systems(A*), Maths(B), Combined Science(BB) and English(B).
For fun I pick apart Linux and enjoy testing different distributions. My current distro of choice is ArchLinux, although I'll always have a soft spot for Slackware. I enjoy programming and learning languages; I love Ruby and currently I'm starting to teach myself functional programming using Erlang and Clojure.
I'm completely into music and am always on the look out for new bands to listen to and see. Having been in several bands I play both bass and guitar and currently I am involved in a collaborative internet music project using Git and Audacity.
In the gaps around work and music I enjoy collecting and playing video games (and some board games), reading, watching films, and learning about new technologies.