Throughout my 15 years there, I gained a significant amount of experience
across many different aspects of software development. Beyond programming
in many different languages, I have also had experience with UX / UI design,
requirements gathering, documentation, project management and so much more.
I have personally overseen all aspects of a project, from initial client meetings
and discovery, through design and clarification, front-end and back-end development,
all the way through to DevOps, deployment and user acceptance testing. I've worked
with and alongside businesses from many different disciplines including
international architecture and construction companies as well as entrepeneurs
needing technical assistance to see their idea through and small businesses who
just need an online presence.
I'm a tinkerer by nature. I have many personal side project ideas and things
I am interested in. I've done quite a bit of work in the early days of
Obsidian,
building in CSS tweaks and new functionality before themes and plugins were
officially supported; helping shape the direction of some of those features.
Also, check out my LinkedIn
for endorsements and such. (I'm not very good at LinkedIn, tbh)
Below I have listed some of the projects I have been involved with, both with
Aerion and in my own free time. This list isn't exhaustive, but does represent
a cross-section of my varied experience and skills. (I'm still working on
populating this)
Nostalgia inducing, 8-bit style, side scrolling tetrominos, ON A TRAIN!
I've always wanted to get into game development. It's not easy, though. For this
project I decided to try and learn something completely new. I didn't have much
experience with Ruby as a programming language, but here was the DragonRuby Game
Toolkit and a tutorial on how to make a
simple Tetris-like game.
However, I couldn't just follow a tutorial then slap a price tag on it, so I took
things further. I combed through various asset and sound libraries I'd purchased
over the years through Humble Bundles and brainstormed ideas. I eventually came
up with "Cube Tube", a variation of Tetris where you load cargo on a train.
I adjusted and tweaked and flipped everything on its side. I opened up MagicaVoxel
and created a subway station and a voxel train, using those to generate my 2D art.
I also found some music I kinda liked in my packs and tweaked and chopped it up
to make a new soundtrack. I spent way too much time trying to make the music more
dynamic; I initially wanted it to get faster and faster and the speed of the game
increased. Unfortunately, it just ended up beyond my capabilities. People still
like the music though, so that's cool.
I look at the code base now, and I wonder how much of it was actually in that
original tutorial. Probably not much, anymore. I also tweaked the game for touch
controls, and built and tested a mobile version, for both Android and iOS. It's
also available on Windows, Mac and Linux.
It's not perfect, but I'm proud of it. It's a fun little time-waster. It plays
well and it sounds great. And I did it all by myself. pats own back
A .NET library for communicating with the LEGO Dimensions toypad
This was a little bit more of a hack to see if I could, rathen than it being
something truly useful, but it is still pretty cool. I found other attempts to
do the same thing in other languages, but couldn't get anthing actually working.
Through a lot of reading, and some trial and error, I worked out how to communicate
with the toypad, and then wrote up a library that allows me to connect to it,
change the lights, and most importantly, read the physical tags placed on it.
The reason for doing this is to automate some things on my computer. As a proof
of concept, I made myself a little app that sits in the system tray. When I
place my Batman minifigure on the right panel of the toypad, my computer switches
to another remote desktop. Place him on the left, and I go back to the original
desktop. I also set up a custom Joker minifigure tag which, when placed in the
middle sport, will hibername my computer.
It's fun, but I've never gotten used to multiple desktops, so I rarely used it.
I ought to come up with some better ideas and hook it back up one of these days...
In early 2020, I found myself inspired to try and collect my thoughts in a
collection of linked notes. I was mostly inspired by Andy Matuschak
and the way his notes website opened linked notes in columns, so you could see
where you'd been.
I did attempt to create my own similar thing for a bit, but then I discovered
Obsidian. It was pretty new at the time, but seemed to do
what I wanted in terms of linking notes together.
However, it didn't have the cool horizontal stacked notes thing that Andy Matuschak's
website had. However, based on my experiments with building a similar thing myself,
I thought I could modify the internal CSS of Obsidian to present notes in a similar
format. And it worked! Not only that, it was pretty popular with others!
Later in the year, the Obsidian team opened up their plugin API (which I helped
discuss with the devs) and I migrated my fun CSS tweak into a full-blown JavaScript
plugin. Doing so won me the inaugural Best Plugin
of the year in 2020.
The functionality has been since incorporated into the core of Obsidian. By using
the "stack tabs" option, you get vertically stacked notes that slide over each other,
just like I'd envisioned from Andy Matuschak's website.
An interactive educational game which simulates a Robotic Mission to Mars, including control of a real-life robot!
This was one of my favourite projects to work on, despite the frustrations.
A cloud-based application for the Victorian Space Science Education Center (VSSEC),
which would allow a class of secondary school children log in, be assigned various
mission roles and run a simulated Mars Rover mission.
The kicker: students actually ended up controlling a physical rover robot that would
drive around VSSEC's on-site Mars simulation area.
It was a technical challenge to run 12+ users concurrently viewing the same set of
data, and issuing requests and instructions to each other. Data was partially plotted
in advance, and partially randomised. There were also random events like dust storms
or electromagnetic interference, which the students would have to cooperate and
coordinate to overcome.
Plus the added technical challenge of interfacing with VSSEC's rover, as well as
computer vision data to track its physical location on the ground. It would've been
so much easier to simulate that data along with the rest, but you can't beat the
coolness factor of driving a real robot and seeing the live feed from its camera.
Also, once development was almost complete, we recieved graphic designs from a
design agency, which required a lot of re-working to the front-end to make it fit
the final design. It ended up looking great, though.
A platform for digital marketing in the retail sector
This was a big project.
It started small enough. A system to print shelf tickets for a group of pharmacies.
Of course, that had its own technical challenges. Not least of which was printing
from a browser in such a way that it would be consistent with pre-printed and/or
pre-perforated paper. We ended up developing an unobtrusive background application
for windows that would handle communication with the printer, and a separate web
system for creating the print jobs.
This expanded a lot. We built an entire visual editor for printible tickets with
multiple dynamic labels and layouts of those labels. We also expanded the management
side of the system to handle promotional periods and other forms of marketing.
The idea became for marketing departments to create and upload assets and product
pricing details, and the stores just had to log on and print what was relevant to
them.
With nearly a thousand stores using the system, there was a lot of iteration around
the UI/UX of the system, especially about making life easier for the store users.
We also started handling support tickets and calls (myself included) in order to
better assist the stores. This helped me put an emphesis on the UX design, as I
got to know the kinds of people that were using the system (and designing things
so I had less support tickets to attend do :P ).
Before I left, I was part of the management of the product as a whole, and was
working on a big redesign and re-branding. Partially in an attempt to simplify
the entire system, and to reach out to more non-pharmacy retail chains and outlets.