1. Resume
Name Marcus John O’Brien
Title Senior Online Software Engineer and Team Leader
Location Vancouver, Canada
Telephone (+1) 604 436 4577
Email marcusobrien@yahoo.com
Programming Experience
C++ UNIX/Linux Platform 15 Years
C++ Windows 15 Years
Shell Programming (Linux/Win/Unix/Mac) 15 Years
C# 8 Years
Java 5 Years
SQL (MS and MySQL) 4 Years
XML/JSON/HTML 5 Years
Test Driven Development (Multiple Frameworks) 8 Years
Agile (Scrum) 8 Years
API/SDKs
Microsoft .Net 8 Years
Windows Communication Foundation (WCF) 5 Years
Windows Presentation Foundation (WPF) 3 Years
QT C++ Trolltech (inc Squish Testing) 3 Years
CDT/Swing/AWT/Jface/JDBC/GEF Java 2 Years
Eclipse Plugin API 2 Years
OpenCV 1 Year
Google AI Tensorflow 3 Months
Other key skills
SOAP / RESTful Online development / IIS
MS IoT and AWS IoT (cloud Services)
Arduino/Raspberry Pi/Banana Pro/Robot C
Repositories – Git/Perforce/Subversion/RCS/CVS/SourceSafe
Instrumentation and Code Analysis – NCoverage, Purify, Quantify, Bounds checker
POSIX - Cygwin / Linux / MinGW
Game Console SDKs - PS3/PS4 Toolkit, Xbox 360/1
Mobile – Mac XCode (with Libimobile) - Android ADB (with MADB)
Confluence Wiki, JIRA bug tracker
Testing Frameworks
MBUnit, Junit, Squish, MSTest, JMeter and Gatling Load Testing (via AWS)
Analysis and DesignMethodologies
Unified Modelling Language (Rational Rose)
Education
PhD ResearchArtificial Intelligence – Semantic and Neural Networking, including
natural language processing, inference engines, pattern recognition, image recognition
Degree - BSc Hons 2:1 Computer Systems Nottingham University
2. Employment History
Senior Online Developer EA Games, Vancouver
From April 2013 – Current
I have been working on the new EA Frostbite game engine. All out titles are currently
moving over to this new technology, and my tasks are to re-write our test framework
tool to allow our game teams to be more test driven. This will have huge savings in
our development budgets, and also greatly increase the quality and reliability of all
our software deliverables, from games to tools to web services. The tool is written in
c# and I am currently capturing requirements, designing the system and prototyping
new ideas. This involves working with teams in 10-15 different countries (across
multiple languages and time zones), and with various team sizes with budgets up to
$20 million.
Senior Online DeveloperUFC FreeToPlay Mobile EA Games,
From April 2013 – February 2015 Vancouver
I developed online web services for a free to play UFC game (over 1 million
downloads from Apple Istore and Android store). My responsibilities include
designing, implementing, testing various services for the game progression systems.
After developing these systems I was tasked with making sure the game would scale
for our predicted daily active users and TPS. I had to make sure our test systems
generated enough transactions per second (using JMeter/Gatling through AWS), and
our systems could handle the load. The main iteration cycle involved testing,
rewriting and optimising our c# services, and optimising our MSQL DB.
Optimisations included eliminating joins in SQL, introducing redundancy in the DB,
caching static data, caching dynamic data, adding indexes, simplifying code,
atomising retrieved data , reducing the number of client HTTP calls etc. I personally
successfully optimised our games web services to scale in preparation for our launch.
We are currently supporting 260k PCU (concurrent logged in users).
Senior Online Developer Ubisoft Entertainment, Montreal
From February 2010 – April 2013
I began working for Ubisoft on the online team. I developed backend solutions
available through a C++ SDK that the game clients could integrate. I introduced
functionality that allowed gamers to enter unique key codes that would unlock certain
privileges in the game, e.g. new maps, character skins etc. Code was written in C++
and Python, and interacted with a MySql database. All solutions had to be scalable
and were load tested with JMeter. Game clients such as Assassins Creed were
customers. I was then asked to develop an entirely new system using C# and IIS to
replace some legacy systems. I completed this task on my own over a year, allowing
privileges to become cross platform and cross title. This SOAP solution would unify
and be used by all titles in the Ubisoft range.
For the past year I have been replacing and unifying all legacy online systems with
pragmatic RESTful solutions written on WCF in C# using IIS. These systems must be
backward compatible and all URIs are versioned to support this.
3. Senior Software Engineer EA Games, Vancouver
From March 2008 – November 2009
At EA I was developing games for both the PS3 and the Xbox. As a senior engineer, I
started working in the pipeline team. This central team is responsible for processing
all the artwork, audio and gameplay assets that are created for the game. This was a
challenging role whereby immediate diagnosis and rectification of any problems was
necessary to minimize downtime for the 100+ team. I then moved into different areas
of game development including AI and backend services. My last task at EA was to
integrate web kit into a game, and using asp.net mvc and c#, to develop an in game
web site. I also developed web services using C# that both the game client and the
web browser utilized. In parallel to this I developed our backend database solutions
using MySQL and SQLServer, on both linux and windows platforms.
Senior Software Engineer Cyan Technology Ltd, Cambridge
From July 2005 – March 2008
Cyan is a fabless microcontroller designer. I worked on the main software product
which is an Integrated Development Environment called CyanIDE, this allowed our
customers to write embedded C for our family of microcontrollers. My development
role began implementing software using the Trolltech QT Multi-platform toolkit. I
contributed into the IDE a direct memory editor, breakpoint and bookmark support,
persistent workspace and profile support, integration of a QScintilla text editor, and
various other GUI based functions. I was also responsible for creating a nightly
automated build and test solution, this included checking out all source, creating an
install using InstallShield, booting VMWare virtual machines for Windows XP,
Windows 2000 and Linux, installing the new install into each VM, executing
automated tests written in Python for the Squish environment and emailing all results
to all team members. This helped to alleviate some of the bottlenecks in the
development lifecycle, saving us a great deal of time and money.
During the last 18 months we moved from supplying our own IDE, to extending the
IBM Eclipse IDE using Java. I have implemented the CDT toolchain mechanism for
our toolchain (compiler/linker etc), extended the IDE by adding new views and
editors, as well as written some of the graphical chip configuration code (using GEF).
Senior C++ Software Engineer and Team Leader Eley Metrology Software
From January 2003 – July 2005
I ran the software development team for a company specialising in producing
applications for the metrology (measurement) industry. The 2 main products, were
designed using UML and written in Visual C++(MFC), the graphics routines utilise
OpenGL. My recent development projects include implementing a STEP ISO10303
CAD file reader and displaying the 3D CAD file using the OpenGL development kit,
this included rendering the 3D image using texture mapping, and implementing
various lighting effects.
Senior Software Engineer and Team Leader (1999-2001)Marconi Plc
My last 2 years at Marconi Communications were spent mentoring and leading a team
of 10 software engineers on a project to complete a new version of a telecoms
management system. My responsibilities included implementing new functionality
into the system to very strict deadlines (due to high dependencies), mentoring the
departments other 25 software engineers in ANSI C++ and overseeing design and
implementation reviews. I continued to implement new functionality into the system,
which included a GUI based application to allow remote configuration of equipment
and an object persistency database.
4. Senior Software Engineer and Team Leader (1998 - 1999) Marconi Plc
I was asked to form and recruit a trouble-shooting team to finish and support an
overdue project for a multinational customer (Siemens). This involved running my
team, liaising with Siemens, software fault diagnosis and rectification, patch
deliveries on a live system (controlling an entire telecoms network), and customer
support.
C++ Software Engineer (1994 – 1997) GEC Plessey Telecoms
I began working for GPT as a software engineer on a telecommunication management
project. This large-scale project was distributed over 5 countries, with around 400
software and test engineers contributing to the development. This gave me valuable
experience of the complexities and logistics of development on large-scale projects.
PhD ResearchArtificial Intelligence – Semantic and Neural Networking 1993-1994
I researched the first 18 months of a PhD in the field of Artificial Intelligence. My
research involved developing a new type of semantic network to be used for
knowledge representation, this also included a natural language parser. Other aspects
of my research were concerned with neural networking techniques. I also lectured and
gave seminars at the Nottingham Trent University.
Interests
From 2001 to 2002 I travelled through Central and South America. This wonderful
experience gave me the opportunity to see a beautiful part of the world that I will
never forget. It also provided me with the opportunity to pursue my favourite
activities of trekking and camping, in both the Andes mountain range and the Amazon
rainforest. Since joining EA I have been coaching and captain of an employee soccer
team, I managed to motivate the team to moving up from last position to finishing 4th
in our league. My other hobbies are robotics, electronics, Raspberry Pi and Arduino
project making, fly fishing, classic literature and video games.
Personal Strengths
I have excellent communication skills, both written and verbal. My experience
enables me to commit to deadlines with a high degree of certainty. I am self-
motivated and pro-active, and I also take pride in all my work. I am seeking a new
challenge in a company where I can contribute my skills towards new goals.
Employment Status
I am currently authorised to work in Canada, having received my permanent
residency status. I am living and working in Vancouver.
Shipped Games
EA Games
UFC Free to play mobile – apple and android – all web services and optimisations
Skate 2 – Pipeline/AI/Bug fixing
Skate 3 – Web services for UGC and Blaze configuration for
matchmaking/stats/leaderboards
UFC Gen 4
NHL 15
Ubisoft Games
Assassins Creed 2
Assassins Creed Brotherhood
Driver San Francisco
Assassins Creed 3
Splinter Cell Conviction
5. References – Current Reference Available on request
Harvey Thompson Stephen Page
Pipeline Team Leader Software Group Leader
EA Games Cyan Technology Ltd.
Sanderson Way Buckingway Park
Burnaby Swavesey
BC Cambridge
Canada England
604 456 4400 (44) 1954 234 400
Online publications (Tiny URLs are case sensitive) :
Controlling iOS Devices Via C# Code on Windows OS
http://tinyurl.com/MarcusOBIOSOnWindows
General C# MS Unit Test Tips for a New Development Project
http://tinyurl.com/MarcusOBUnitTesting
Manipulating Android Devices from a Windows C# App
http://tinyurl.com/MarcusOBADB
Giving Your Devices Constant IPAddresses
http://tinyurl.com/MarcusOBConstantIP
Commands for Controlling an iOS device in Windows using libimobile
http://tinyurl.com/MarcusOBIOSCommands
ADB Common Commands (Android Debug Bridge)
http://tinyurl.com/MarcusOBMADB
Combinatorial Explosion – A cautionary tale in OO
http://tinyurl.com/MarcusOBCombinatorial
Const and Read Only in Java,C# and C++ - A Comparison
http://tinyurl.com/MarcusOBConstandReadonly
Virtual Functions in Java, C# and C++ - A Comparison
http://tinyurl.com/MarcusOBVirtualFuncs
Warning Virtual Functions in C# from C++
http://tinyurl.com/MarcusOBC-Warning
Current Home Projects
I am currently building a multi-skilled home robot. At the moment I'm working on the recognition
aspects,and I am using some Arduino embedded boards to track people in a crowded room. The IR
systemdirects the 2 degrees of freedom USB camera systems,these then track people's moving faces
and eyes.Using previously trained models and templates, the visual recognition systemcan recognise
known faces with a 90% degree of certainty, it then uses a semantic network to start a conversation
with that person based on previously discussed topics.My robot's visual software uses Qt and OpenCV
on a Raspberry Pi 3. The otherraspberry pi 3's control the mobility and avoidance system, speech
recognition and simulation system, brain (semantic net and various Dbs), and an entertainment system
(web browser/music/film player).
I am also completing an ant colony simulation application for the Android OS. The App (soon to be
launched), uses distributed ant colony behaviour to find complex solutions to algorithmic problems
such as the travelling salesman problem. These stochastic systems are too complex to solve via brute
force and basic heuristics, so I am am researching the effectiveness of swarm behaviour.
The ant colony lives in an environment that resembles the actual salesman problem to solve. Each city
is represented by a weighted node, with the weight being the distance between the nodes for the
salesman or ant to travel. The ants either have to visit each node only once, or find a food source within
the environment using the minimum distance travelled.
The user can change many environmental and behavioural aspects to the ants and the colony, and study
the effects in terms of how efficiently the colony finds food with the minimum weight/effort.
The ants can act in an individual manner to start with (thus using dynamic stochastic behaviourto
explore and find the quickest food source). But as food sources are found,solutions (the best trails to
the food) are passed on to other ants via pheromone trails. The ants can then form a swarm and explore
more of the problem space using more intelligence “learnt” from the individual successfulpheromone
trails.