Sam Wright

A little about me and my software projects...

View on GitHub

Bio

email / pgp key

I am currently working as a freelance contractor for Bruker Corporation at SGC Oxford, and have an MSc in computer science from Birkbeck College of the University of London and a masters degree in physics from the University of Oxford. I enjoy working in an interdisciplinary area where I can bring together my understanding of physics and computer science to write some interesting software.

I have experience in machine learning, computer vision, robotics, and tomographic-reconstruction algorithms, and enjoy using OODP principles (ie. software design patterns, SOLID, GRASP) and experimenting with functional paradigms. Most recently I've been programming in Python and Java and a little in Scala and javascript, and have previously used in C and C++.

Recent big projects

X-ray micro-beam controller for protein crystallography (2014 SGC Oxford/Bruker Corp) - in Python

closed source - work in progress

I wrote a software package to position a set of microscopic apertures in an X-ray beam to reduce its profile to the size of the crystal being shot, thereby increasing the signal to noise ratio in the resulting diffraction data. To validate the X-ray beam profile I designed a knife-edge to cut across the beam at 18 discrete angles, and implemented a tomographic-reconstruction algorithm to create a 2D image of the beam. The positions of the apertures and knife-edges are determined automatically through computer vision techniques applied to images taken from an optical camera in-line with the beam.

Improvements to high-throughput robotic sample-handling system (2014 SGC Oxford/Bruker Corp) - in Python

closed source - work in progress

A Mitsubishi robot arm is used to move crystal samples from a liquid nitrogen dewar into an X-ray beam before being shot, before being returned to the dewar. I improved the robot's code (written in MELFA BASIC) to be more reliable in avoiding collisions, and the PC controller's code to improve error detection and notification.

Hand gesture recognition system (2013 MSc project) - in Java

source code / proposal / report / video 1 / video 2 / video 3 / video 4

This project had two main aims - first, to create an extensible workflow editor/engine to allow the user to construct and configure a hand gesture recognition workflow from constituent algorithms (eg. image transformations, hand pose estimation, and hand detection and tracking) with inbuilt testing features. Machine learning was built into the workflow engine to allow for choices to be made (for example, which of a variety of subworkflows to use) based on the performance of similar test data, allowing for transductive learning.

Secondly, once a successful recognition workflow has been created, the user can configure keyboard events to be triggered when each gesture is recognised.

Dominoes AI player (2013 coursework project) - in Java

source code

I created an AI player for the game of dominoes as part of a team project as a coursework. It works by creating a lazily-initialised decision tree of future moves (both of the AI player and its opponent) where each game state has a score associated with it based on the dominoes in both the player's and the opponent's hands. I then implemented a minmax algorithm to find the best possible final game state, and therefore the best possible move. In tests against a short-sighted AI player (which places its highest-valued placeable domino without considering future moves) it won about 82% of the time.

The completed project with all of the team's code can be found here.

Spectroscopy analysis system (2012 MPhys project) - in Python

source code / report

I created a software package to be used in an experiment to be included in the Oxford physics undergraduate teaching course which would investigate semiconductor band gaps, phonons and excitons, specifically by looking at their temperature-dependent behaviour.

Along with some calibration utilities, the main part of the software package interfaces with a spectrascopic sensor and a temperature sensor which allows for spectra to be automatically recorded at specific temperatures. The user can then manipulate spectra in realtime using symbolic algebra to monitor properties such as absorbance and reflectivity.

SGC project (2011 vacation project) - in Python

The mission of the Structural Genomics Consortium (SGC) is to resolve the structures of interesting proteins using X-ray crystallography. The process to do this involves a myriad of programs and choices of which it difficult to gain an informed overview. I started development of an overarching workflow-based management program to add transparency to the process and allow for further computational improvement of it through distributed execution and ultimately transducive machine learning.

Recent smaller projects

Experimenting with OpenGL - in Python

source code - work in progress

I wanted to get accustomed to OpenGL and the way it renders objects (i.e. the model, view and perspective transformations, using quaternions, calculating vertex normals for lighting, etc...). Using pyglet, I wrote a simple (and simplistic) library to help create, manipulate, group, and render 3D objects.

Feedly client for Pebble Smartwatch - in Javascript and C

source code - work in progress

To experiment with programming for the Pebble Smartwatch, I'm creating a Feedly client for it. I don't know how useful it will be to read news articles on a watch, but I'm having fun nonetheless!

Experimenting with Functional Paradigms - in Scala

source code

I went through most of the documentation on the scala website and wrote example code to demonstrate Scala's functionality.

Turing Machine - in Java

source code

For fun, I implemented a Turing machine along with exemplar Turing programs, including an automated Turing machine, and a simple Swing-based GUI.

Artificial Neural Network - in Java

source code

To help understand machine learning I implemented an ANN and the backpropogation algorithm, and tested that it could learn all 2-input, 1-output boolean functions (eg. and, or, xor, etc...).

Experimenting with Hadoop - in Java

source code

I followed a tutorial and implemented some simple MapReduce algorithms, which I tested using MRUnit and also on a local Hadoop server.

Experimenting with Hibernate - in Java

source code

I set up Hibernate with an HSQLDB database and an annotation-defined schema filled with test data, and performed some simple queries.

Working Days Calculator - in Java

source code

Small tool that calculates when someone will have worked a specified number of days (excluding bank holidays and weekends) starting from a specified date, taking into account bank holidays. Uses Joda-Time and JollyDay.

Contact Manager - in Java

source code

This was a coursework project to implement a supplied interface for a contact manager (ie. address book). It was quite a simple project which was intended to demonstrate my ability to write POJO and implement TDD.

Design Patterns - in C++

source code

I implemented some of the software design patterns to familiarise myself with the patterns and to play with C++.

Addendum

Before using this GitHub account, I used @BBK-PiJ-2012-01 as part of my programming in java course at Birkbeck - hence why this account has only very recent activity.