Introduction

Hi, I'm Francois Geldenhuys, and welcome to my online curriculum vitae. I am a software programmer and enthusiast. I have a BSc Honours Computer Science degree from the University of Pretoria and 9 years of commercial software programming experience. I've worked in a wide variety of fields, including mobile, server, embedded and scientific development. I currently work and live in Pretoria, South Africa.

Education

2002
2005

I did a 4 year computer science degree at the University of Pretoria. I was especially interested in the Artificial Intelligence courses and did related year projects in both final year of CS and in honours year.

Developed a 3D swarm robot simulator as 3rd year project. This had a full client/server architecture, used the ODE library for 3D physics and dynamics, Irrlight for 3D graphics, and supported plugins in C++. It could also control physical Mindstorm Lego robots, and simulate obstacles and environments for these. The project was done with support from the CIRG research group, and won the IBM Open Source prize in 2004.

My honours year project was designing and evaluating a new Ant Colony Optimisation algorithm that worked in real space. It was first implemented and refined in 2D space, and then used in a full 3D simulation. It was done under supervision of Prof. Andries Engelbrecht in the CIRG research group.

Part Time Work

Auto Marking System

2005
2006

I designed and wrote the marking logic and various other pieces of an auto code marking system we used in course practicals at the university. It is still used today and many CS graduates still know this system. It was written in Ruby and C, and can safely compile and execute C++ code submitted to the server. It then marks the output using XML specifications.

Assistant Lecturer at UP

2006

Co-presented C for Engineers to first and second year engineering students in the first semester. I was responsible for half the lectures and running all practicals. In the second semester I assisted with the Data Structures in C++ course presented by Prof Andries Engelbrecht. I was responsible for all the practicals, and for lectures when the Professor was unavailable. During this time I also started working on an MSc, doing research into co-evolution of neural network controllers for robotic navigation, using ensembles of neural networks in layered and subsumption architectures.

C C++

Career

Technical Developer at Datacyte

2007
2009

This company had an in-house developed mass data storage and application engine, and I worked on the backend, which was mostly in C++. This was used to process large amounts of data such as CAT scans, and used for other medical solutions. Amongst other things I worked on the Apache plugin and wrote a full remote debugging IDE.

I had my first commercial experience with mobile development here, when I wrote the mobile app for Rudy Giuliani's 2008 presedential campaign. It was done using J2ME, and you could track his campaign progress, donate money and so on.

I was later moved to an Innovation Fund startup project called Integrated Pricing Solutions. Their product was a robotic electro-mechanical price labeling system. I worked on the software running on a Linux powered handheld device (before the days of Android), and embedded C on the firmware running on the robot. I also helped design the electronics and did hardware prototyping. My biggest job was implementing one-to-many infrared communication from scratch. The solution had to be low latency, very low power consumption, and be able to run under the constraints of a tiny PIC24 microprocessor.

Innoventix Consulting contracting for Denel Dynamics

2010

Implemented targetting algorithms for the Umbani project, involving image processing and 3D spacial positioning. I also worked on flight simulation software used for pilot training, and parts of the the navigation system of the Raptor project.

Here was the first time I developed for Android, writing an app for law enforcement and security companies that could recognise number plates using a phone's camera.

Founder of WMGC Consulting

2011
2013

I started a software company and did a wide range of work, from websites to embedded programming for 3G connected access control systems. At it's biggest it had one permanent employee, and I used a few contractors.

The old Innovation Fund was now incorporated into TIA, and the price label project contacted me again, this time to do the server backend and frontend work, and general technical consulting about the project.

By far the most work was for IT School Innovation and their Integrated Education Platform. I did all the Android development, as well as server backend. We worked with Ericsson to install educational software into poor rural schools, and many private schools now use the system.

Senior Software Engineer at IT School Innovation

2014
2016

After PSG invested in IT School Innovation, I changed to being a full time employee, as I was already exclusively doing work for them. The development team size has more than doubled, and I gained a lot of experience in working with a larger team.

IT Schools' solution supports 3 different mobile platforms, as well as the web, and the Android application alone is used by over 100 000 users. The application supports both EPUB and PDF books - encrypted and automatically distributed, annotations in most media types, highlighting, printing, summary generation etc.

Technology

Languages

C/C++

I have at least 10 years of experience coding C and C++.

Most of my C programming experience has been for embedded systems. I've targetted both PIC and ATMEL processors in C, wrote infrared communications protocols, cellular communication, motor control, access control and more. I taught C to engineers while lecturing at the University of Pretoria, starting from scratch and working our way up to being able to implement linked lists and sorting algorithms.

I've used C++ in a large variety of applications, including application server and database backends, image recognition and processing, mobile applications, desktop applications, 3D graphics programming, networking etc.

Scala

I learned Scala in 2012, and it's the first language where I really started extensively using a functional style of programming. It is the main language I use at the moment and I'm very fluent in using it.

I always use it together with Scalaz, who provides a complete typeclass library, and functional constructs for concurrency (Tasks) which I use extensively.

Java

I've been using Java since 2002, commercially mostly for mobile applications. I contributed to CIlib while busy with research, developed a J2ME application and have done lots of Android development using Java.

Javascript

I've used Javascript for web development, in mobile applications in web views and frameworks like PhoneGap, and for server development using NodeJS.

Lua

Lua is a lightweight but very fast scripting language that is easy to embed and customize. I've embedded it in multiple applications, and once wrote a full remote debugger for it, complete with an IDE with watches, table inspection, breakpoints, stepping etc.

Ruby

I started using Ruby for small scripts and application programming, and only later for web programming using Ruby on Rails. I embedded JRuby which runs on the JVM in CIlib to run AI experiments, and embedded C Ruby in a Qt application to control a 3D simulation I used for ant colony algorithm research.

Others

I love learning new programming languages and styles of coding. I've used the following in the past at some point: Bash, Basic, CoffeeScript, D, Eiffel, Erlang, Objective-C, Perl, PHP, Python. I tinker with hobby projects in Clojure, Haskell and Rust.

Libraries and Platforms

I've used countless libraries during my career, and won't try to create an exhaustive list here. I'm used to having to figure out new libraries and technologies. These are just a few interesting and important highlights.

Android

This is what I currently work with daily, and I know it very well. I've written a support library for Android that I call Cyborg, and use it extensively in my code. I mostly code in Scala, but have also used a lot of Java.

SQLite

This is the database I use most, since it's the one natively available in Android. I have however used SQLite a lot in the past in various situations. It is in my opinion a very underrated database and often the right choice.

OpenGL

I first used OpenGL at university for graphics courses, and then in industry at Denel. There it was used to develop and then demonstrate target finding algorithms to be used on guided missiles.

ODE Physics

I used ODE in 2004 and 2005 for two different 3D simulation projects both for AI research.

OpenCV

OpenCV was used at Denel for image processing while implementing target finding algorithms.

ScalaSTM

I prefer to use Software Transactional Memory for shared memory management.

Apache CouchDB Django jQuery Marmalade MQQT MySQL Node.js PhoneGap RabbitMQ Redis Ruby on Rails Unfiltered

Tools

Linux

I started personally using Linux in 2003, and have learned most of the system administration skills I need. I still need to look up how to create an SSH reverse tunnel each time, but at least I know when I need it...

Git

I use Git every day for source control, and since I started with CVS, then moved to Subversion, and only later to Git, I appreciate it every time.

Atom Eclipse Emacs IntelliJ Idea Vim Visual Studio