CURRICULUM VITAE OF DUDLEY CRAIG
Contents
Personal Details
Education
Character
Career Objectives
Employment History
Development Experience
Administration / Support Experience
Installations Experience
Portfolio
Skills Matrix
Personal Details
FULL NAME
DATE OF BIRTH
ID NUMBER
LOCATION
LANGUAGES
CELL
EMAIL
WEBSITE
AA/EE DESIGNATION
REGISTERED DISABLED
Dudley Craig-
Sea Point, Capetown
English, Afrikaans--functional.org.za
white, male
no
Education
1995 Electrical Engineering - Westlake Tech
Maths N4 65%
Eng Science N4 52%
Electrotechnics N4 56%
Electrical Trade Theory N4 46%
1993 Matric - Huguenot High School
English 1st HG 53%
Afrikaans 2nd HG 41%
Maths SG 68%
Science SG 49%
Agricultural Science SG 43%
Art SG 52%
Character
General
Creative, logical, flat-footed.
Sports
I’ve participated in the Argus cycle tour, gun run, 5fm triathlon and SA champs life saving.
At present I keep fit with swimming (well less of this at the moment) and hiking.
Hobbies
Electronics/3d Printing, Blender/Inkscape/Gimp digital art, photography and an occasional
game of pool ;)
Career Objectives
I've got years of experience with linux and developing within its console (VIM).
I've got years of experience with linux based CLI source code management (GIT).
I've got years of experience with linux based CI tools.
I wish to remain specialized in one language, javascript.
I would welcome utilizing my backend language experience (clojure, php, java) within
support (sysops) if required.
I would welcome utilizing my backend environment experience within support (sysops) if
required.
Employment History
03/2018 – 09/2018 Freelance/Addhoc
Remote eCommerce (b2b) development for Nutritional Supplements based off of a java
Hybris api.
Client and Admin facing, interfaces utilizing oAuth (hmac JWT’s) for authentication and
authorization.
My role was to re-implement address and payment methods management on client and
administration panels and addhoc work debugging authentication/authorization.
Tools and libraries used being React, Redux, JWT’s, Bootstrap, Axios and react-redux-form.
Ticketing and source handled via Atlassian (jira, bitbucket).
12/2017 – 03/2018 Cognician
White labelled content management for business oriented coaching.
My role being the development of stateless, idiomatic web applications utilizing
Clojure/ClojureScript and Datomic.
I picked up a love for Clojure (Compojure, Hiccup, Specs)/ClojureScript (Figwheel, Reagent
(based off of react.js)/Rum), REPL development, and Emacs (Evil mode)/VIM.
Systems based off of Amazon Web Services, Clojure/ClojureScript and Datomic.
Ticketing and source handled via Asana and Github.
12/2015 – 12/2017 InventCommerce
eCommerce work based off of Hybris framework (spring, hibernate, solr, jstl/jsp within a
distributed environment) application framework and frontend being react.js and jquery built
off of webpack.Implementing new features, maintenance of existing systems and
deployments. Work encompassing backend (restful json web services, soap web services,
spring (dao’s, dto’s, services, facades) and frontend (jquery, react,.js, bootstrap, node.js (only
as tooling env), webpack, mocha, eslint).
Typical software lifecycle starts with knocking out a BRD, writing tests and code to match
(TDD), pushing code and peer reviews, merging and release notes, containerized (Docker),
QA and deployment via CI tools (Jenkins).
Most of our interaction with clients and other developers is via video streaming, messaging
applications, ticketing and email.
The primary clients thereof being clicks.co.za, glanbia and drmartens.com.
Build/Development environment being both eclipse or console (vim) with ant/maven on a
containerized (docker) environment.
Technologies being java (j2ee 7, 8), hybris, ant, maven, spring, hibernate (tho mostly
abstracted away), solr, jquery, responsive bootstrap, soap, docker, jenkins, aws/ec2, sonar.
Ticketing and source handled via Atlassian (jira, bitbucket).
12/2012 – 11/2015 Indaba Mobile
Indaba's business model revolved around a white labelled, multi tenanted mobile chat
application consisting of a client (mobile device) and a backend stack (concurrent,
distributed, scalable microservices hosted on linux based amazon web services).
My responsibilities were originally the architecture and development of version 7's relational
data (mysql), the interface thereof (php, react.js, node.js (only as tooling env), webpack), the
exporting of data from a relational structure to a distributed database (cassandra) and
debugging on multiple concurrent (distributed) nodes on AWS for both virtual machine and
RDS instances.
Other responsibilities included aggregating, debugging/maintenance, and client facing
interface for survey data, resolving/profiling stack issues(load balancers, activemq
messaging, akka message queues, internal traffic analysis, tomcat), maintenance of legacy
software and identification(wurfl) and distribution of client applications.
Later this was expanded to include java development with spring, hibernate, camel, jersey,
mina and drools.
Technologies used being zend 2, react.js, jquery, jquery-ui, spring, tomcat, activemq, apache,
mysql and cassandra.
As a company, it was going insolvent, which is why I left.
References:
Ray - was technical director till December 2014 (no replacement)
Heath - was system operations till October 2014 (no replacement)
Nelson - was project manager till December 2015
01/2012 – 01/2013 Zapop
Although billed as a digital media company, Zapop developed prototype systems.
By far my most exciting project was an autonomous robot. The robot would take panoramic
images every few meters, pass the image through object recognition software and catalogue
the results. My part came in with the user web interface which took the panoramic image
and created a 3d environment whereby the user could browse the catalogued objects and get
visual information of the state as when the panoramic image was taken.
Other projects included a touch-screen notifications panel for varying devices displaying
alerts according to sensor data (temperature, database irregularities, no power, etc), and an
e-learning/learning-management-system platform based on moodle.
Technologies used being Cakephp 1.3, MoSync, jquery, bash, html5, REST, GIT, Redmine.
Unfortunately transport became an issue (2 hours by car, 5 hours by public transport) and it
was with regret that i left the company.
09/2011 - 01/2012 Freelance
The aim was to get my own mobile development project off of the ground while doing small
local projects and online freelance projects.
My mobile project consisted of an android application encompassing public transit times
and up-to-date notifications fed via a REST server built on zend framework. The Android
client was written in Java using the Android libraries.
The project was abandoned since the freelance work was not keeping me afloat.
11/2008 - 09/2011 Finassets
Finassets, a subsidiary of TrinityAssetManagement, is a financial portfolio management
company.
Responsibilities here consisted of
setting up development environment (subversioning, bug ticketing system/tracking, wicki
documentation and development/testing/failover server management),
project management (scrum),
and finally software development process (requirements specifications documents, writing
code, subversioning, debugging/stress testing, etc).
I was retrenched due the portfolio component of the company coming into trouble.
07/2007 - 11/2008 ViaMedia
Viamedia (WASP), a structured, technical environment, catering towards mobiles devices.
Here I built in-house web interfaces for data loading, C++ application interfacing, and WAP
portals via a rigid software development cycle ... requirements specifications documents,
writing code, subversioning, debugging/stress testing, packaging(rpm/make), and finally
documentation/release notes.
10/2005 - 07/2007 LiquidLimeStudios
A close, personal, web development company. LiquidLimeStudios focused on small to
medium websites.
Started out by creating a more client friendly/orientated cms for small to medium websites,
employing traditional php/html templating. With the advent of Adobe (LiquidLimes
flagship project) a more complex structure was used, requiring XML/XSL templating.
The project itself involved students submitting digital media, whereupon a judging panel
would asses and rate these submissions. The site had some challenging requirements, such
as support for 8 languages (managed content), differing media formats, and heavy loads.
Left since I needed to expand on my career.
10/1999 - 10/2005 Cybersmart (isp)
Joined Cybersmart when the company just started (1999), building physical part of the
network (copper cabling). Since Cybersmart was still small, i was taken into other parts of
the ISP, from dialup/desktop support (servers, routers), administration, to web development.
The company was pursuing primarily administration and my direction was moving towards
development, so left to pursue development.
10/1995 - 10/1999 Electrepairs (building and industrial maintenance
Completed as a qualified Industrial Electrician
01/1995 - 10/1995 All Security (Alarm Installations)
Installation of alarm systems, intercom systems, and access control
12/1993 - 01/1995 Macs sports bar (barman)
Development Experience
Javascript
Working with javascript almost as long as with HTML (1999/2000) so i've been around the
block of javascript frameworks with mootools, moving over to jquery for a couple years,
jumping between backbone, angular and now (primarily) react/redux/jsx in both prototypal
object oriented and functional patterns (primarily ES6) influenced by clojurescript
(idiomatic, stateless/immutable, agile REPL development).
Projects range from spatial google map interfaces, 3d interfaces (panolens), eCommerce (on
Hybris/Spring, oAuth JWT’s), broker portfolio management, mobile chat applications (both
websocketted, peer to peer and via server api’s) incl content management, administration
consoles and graphs/reporting.
Predominant libraries being React, Redux, Bootstrap (with Sass) for building service
oriented (incl websockets), SPA’s and multi page, responsive applications which run on a
range of platforms.
Development, packaging, integration and deployment tools via Eslint, Jest, Webpack, Node,
Sonar, GIT, Jenkins, AWS/Buildkite, ZSH, and Bash.
Primary editor being vim with linting via eslint and REPL integration via tmux/slime.
Clojure
It took me a while to shake off the imperative world, and learn to change perspective to an
immutable state. Though this is still a very new language to me, it’s fast become my
favourite with the whole idea of REPL development, it’s a lisp, idiomatic, functional … all
the awesomeness packed into one language!!!
My flow jumps between a terminal emacs environment married with tmux and a headed
REPL relying on evil-lispy, eastwood, helm, projectile, magit, … to one of VIM based off of
fireplace, vim-slime and sexp.
ClojureScript
Much the same as Clojures’ story except my flow works around a figwheel repl and react
(reagent/rum).
Java
Spring being the predominant framework in conjunction with hybernate/jpa.
Tools have been primarily handled via a hybrid of eclipse and vim (eclim) using maven and
ant, code quality via Sonar, deployment via Jenkins/Docker.
Experience is built up between ecommerce (Hybris, Spring/Solr/Hibernate) and custom
microservice architectures based off of Akka, hosted on AWS.
Source being managed by svn and git via both bitbucket and cli.
PHP
This was my primary language since 2005, due a large support base. Predominant servers
being linux/BSD based on both apache and nginx.
Frameworks I'm most experienced with being Zend2 followed by CakePHP and Yii.
Commonly employed patterns being MVC integrating ORM, Factory, Singleton, etc.
Currently exploring Symfony and Laravel.
Tools range from Compojure, the linux CLI (Bash/Zsh), xDebug, kCacheGrind, jMeter,
PHPUnit and Sonar for code quality.
VIM being preferred editor/project manager on top of Docker.
MySQL
I'm well versed in the design/architecture, backup, replication and of course general
querying.
Tools used being the cli, workbench and sqldeveloper.
Cassandra
Very basic work, exporting/restructuring from relational data to distributed data.
Tools used being the cli, kdm and cql data modeler.
Datomic
Building of basic queries off of existing data structures within restful api’s.
Tools used being a clojure repl.
Postgresql
Designed user authentication/authorization scheme’s and content management in much the
same way as I do mysql without any major hiccups.
Tools used being the cli, pgadmin, sqldeveloper and mysql workbench.
GraphQL
Only worked with it in a purely experimental/personal capacity.
HTML/CSS
Been using html/css since 2001, xhtml-strict since 2007. Using a range of tools supplied by
firefox for validity checks, useragent switching and of course profiling with firebug. Styles
predominently from bootstrap and on personal projects, jquery-ui.
Pre-processing being SASS via LESS parser.
Tooling used primarily derived from node.js being a webpack build environment auto
bundling via less/scss parsers.
Either Eclipse or VIM being the two major editors used.
XML/XSL/XHTML/WAP/SOAP
I've used SimpleXML, DOMDocument, Javas' SAX parser back in the day and javascripts'
native libraries for parsing rss, atom, soap, configurations and html.
Structured usage of XML ranging from XHTML, WAP/WML, SOAP and XSL/XSLT
transforms with DOM navigation/searching with either 3rd party libraries or xpath querying,
including namespace definitions/dtd's.
Image Editing/Design
Image editing/SVG/engineering drawing/3d sculpting skills with Blender, Inkscape and
Gimp.
Bash
Writing an assortment of admin tasks ranging from database implementations, application
deployment (CI), restful api testing suites (curl), scheduled crontab data ftp'ing, text
processing and debug/profiling tools, radio station streaming (for the love of cricket), cli
bitcoin tickers, cli cricket score tickers, cli tv remote, rc api for arduino based robotics (toys
tbh).
Perl
Web applications development between 2000 and 2005 before moving over to PHP.
Python
Adjustments to existing code, extending libraries … ad hoc where required.
SQLite
A few personal projects linked with Google Maps, Android and Java.
C++
In the passed i've worked with C++ on the MoSync framework to develop mobile
applications for multiple devices though this skill is once more dormant.
Very basic (more C than C++) work with the MySQL++ library for internet café billing
systems using Vcc and GNU’s Gcc back in 2004.
Arduino C
Prototyping of CNC (grbl and RAMPS) 3d printer/laser engraver, hydroponics automation,
GPS tracking with spatial services integration.
Utilizing ioc (incl Amazons Alexa), bluetooth, and RC integration shields.
Administration/Support Experience
Servers
Main platform being RedHat based distros and others to a lesser degree being FreeBSD
and SBS 2003 with more recent (as in 2011) work on Mikrotik routers.
Tasks performed being:
Managing bandwidth allocation (2004)
DNS routing between different gateways (current)
VPNs/Bridging (current)
Domain registrations and setup. (current)
WWW user accounts administration. Apache (current), IIS (2009)
FTP access. (2009)
MySQL DBMS. (current)
DNS administration. DJBDNS, BIND, Shell scripts (2004)
Mail accounts administration. Sendmail, Postfix, and Exchange (2004/2011)
ADSL accounts administration. (Customized application for Cybersmart, 2004)
File Shares. Samba (current)
On and Off site backups, commercial software dependant (2011)
PABX system management (2011)
Desktop/Dialup Support
Callout support for Network Administration on Unix systems (FreeBSD), routers(custom
ADSL/wireless, Cisco), and general client systems (Win32 and Apple OS ’X’), included
software being MS Office and OpenOffice.
Support for technical queries regarding Email accounts, ADSL, ISDN, and Dialup accounts.
Installations Experience
Servers/Desktop Machines
Building/Maintenance of standard client machines and servers including RAID arrays.
Ethernet/Wi-Fi Networks
Installation of telkom lines, cat 5e networks incorporating telephone/intercom systems
(cabinet, patch panels, switches, routers, and PABX system), and servers (UNIX/Win32).
UPS Systems
Installation and management of power systems (<=10kVA) for the server room, including
smaller solutions for select clients.
Portfolio
2018 - current cognician.com, white labelled client systems. (http://www.ey.com)
2017 - 2017 glanbia.com, b2c ecommerce
2015 - 2017 clicks.co.za/health, b2c ecommerce pharmacy integration
2013 - 2015 in-house development, screenshots available on request
2012 - 2013 in-house development, screenshots available on request
2010 - 2011 finassets.trinityam.co.za
2008 - 2009 http://www.seeff.co.za
2008 - 2009 http://www.etv.co.za
2008 - 2009 http://www.rcs.co.za
2008 - 2009 http://www.player23.co.za
2008 - 2009 http://www.andbeyond.com
2007 - 2008 www.viamedia.co.za
2005 - 2007 www.viridian.co.za
2005 – 2007 www.adaaentry.com
2005 - 2007 www.totalawarenesscoaching.com
2005 - 2007 www.369designs.co.za
2005 - 2007 www.stevenhummel.com
2000 - 2005 www.thunda.com
2000 - 2005 www.businessweb.co.za
Skills Matrix
Database Skills
Skill
Datomic
MySQL Server
SQLite
Cassandra
PostgreSql
Database Tools
Skill
MySQL CLI
MySQL Server
MySQL Client
MySQL Workbench
(Visual Database
Schema Design)
Cassandra
PHPMyAdmin
SQLite Designer
Development Skills
Skill
Clojure
ClojureScript
Java
JavaScript
Bash/SH
PHP
Python
Perl
Months Used
6
>-
Proficiency
Beginner
Advanced
Beginner
Beginner
Beginner
Last Used
current-
current
Months Used
> 120
> 120
> 120
72
Proficiency
Advanced
Intermediate
Intermediate
Intermediate
Last Used-
36
84
6
Intermediate
Intermediate
Beginner
-
Months Used
6
6
36
> 120
>-
Proficiency
Intermediate
Intermediate
Intermediate
Expert
Advanced
Advanced
Introductory
Intermediate
Last Used-
current
current-
C (arduino based)
ActionScript
HTML/XHTML
HTML5
WAP
XML
CSS/SASS
XSL
24
12
>-
> 120
36
Introductory
Beginner
Expert
Intermediate
Intermediate
Advanced
Expert
Beginner
current
2007
current
current
2008
current
current
2008
Proficiency
Beginner
Beginner
Intermediate
Advanced
Intermediate
Intermediate
Intermediate
Beginner
Intermediate
Intermediate
Beginner
Intermediate
Intermediate
Beginner
Beginner
Last Used
current
current-
current
current-
Months Used
>-
> 120
36
Proficiency
Advanced
Intermediate
Beginner
Intermediate
Intermediate
Beginner
Intermediate
Advanced
Beginner
Last Used
current-
current-
current
2017
-
Advanced
Intermediate
Intermediate
-
Proficiency
Intermediate
Intermediate
Last Used
2017
current
Development
Frameworks/Librari
es
Skill
Months Used
Compojure
6
Reagent
6
Spring
36
jQuery
> 120
Composer (PHP)
36
Zend 2
36
Cakephp
20
Yii
4
React
24
Redux
8
Angular
6
jQuery-UI
12
Backbone
12
MoSync
6
Android SDK
12
Development Tools
Skill
VIM
Eclipse
Emacs
GIT CLI
XDebug
kCacheGrind
jMeter
Firebug
RPM Tools (make,
tar)
Subversion CLI
Subversion tortoise
Dreamweaver
Operating Systems
Skill
Months Used
Docker
24
Ubuntu
60
Centos
Fedora
FreeBSD
Cygwin
Windows SBS 2003
Windows NT
Windows
95/98/2000/XP/Vista
Windows 7
Windows 8
Windows 10
-
> 144
Intermediate
Advanced
Intermediate
Intermediate
Beginner
Beginner
Advanced
current-
current-
12
0
0
Advanced
Introductory
Introductory
current
2013
current
Proficiency
Intermediate
Last Used
current
Intermediate
current
Intermediate
current
Other Skills
Skill
Months Used
Documentation –
60
Manuals (Users,
System, Operational)
Image Design/Editing > 120
(Gimp)
SCRUM/Agile
60
processes
Updated 15/01/27, Page PAGE 7