Projects

Here are the projects I have worked on in the past, or are currently working on. You can filter them by the technologies they each use if needed, or click on them to get more details.
python
nginx
django
gunicorn
javascript
bioinformatics
graphql
SASS
graphene
postgresql
react
apollo
docker
jquery
scikit-learn
supervised learning
bulma
bootstrap

atomium

python
bioinformatics

A lightweight, fast, modern parser of protein structure files. atomium is a Python 3 library that models macromolecules, and makes analysing them easy and straightforward.

Structural biology is the study of molecular structures - usually big molecules like proteins, with hundreds or thousands of atoms. When analysed computationally they are stored in files such as the PDB file format, or mmCIF.

atomium parses these, and creates models of the molecules from them. These can be analysed, queried by atom type, rotated, transformed, or a variety of other operations.

This is the project where optimisation of speed has been most important. Often many hundreds of structures have to be opened and then processed in series, so any hundredths of a second that can be shaved off the time taken to parse per atom is important. I use the SnakeViz profile visualiser to do this, which is useful for finding bottlenecks.

ZincBindDB

python
django
bioinformatics
nginx
gunicorn
graphql
graphene

A database of zinc binding sites created as part of my PhD. They are searchable, viewable, and accessible via a GraphQL API.

For my PhD I am trying to create predictive models that can predict zinc binding in proteins. As part of this I created ZincBind, which queries the RCSB web services to identify all proteins with zinc in, finds the zinc binding site(s) in the protein, and saves the details to this database. The data is then accessible via a django app and graphql server.

LabTab

python
django
javascript
react
graphql
nginx
gunicorn
SASS
postgresql
graphene
apollo

Research/project management for scientists.

Made as part of Goodwright with Alex Harston, LabTab is a service for helping Principal Investigators (PIs - scientists who run their own lab) to manage the research their lab is working on.

lytiko

python
django
graphql
graphene
SASS
javascript
react
apollo
nginx
postgresql
gunicorn

A general purpose self-analytics app. It lets you track all kinds of things about yourself and tries to find correlations.

This is in the relatively early stages right now but it is one of the projects I am most excited about. The aim is for this app to track any metric about yourself you like, from any aspect of your life - and then visualise trends, find correlations, and offer insights.

Very much a long term project.

ZincBindPredict

python
django
scikit-learn
supervised learning
graphql
graphene
gunicorn
nginx

Machine learning models for predicting zinc binding sites in proteins, with a GraphQL API serving them.

goodwright.org

python
django
SASS
gunicorn
nginx

The official website for goodwright.org.

Largely designed by Alex Harston, mostly implemented by me, this website is the official website for our shared company Goodwright.

pdb2json

python
django
bioinformatics
docker
nginx
gunicorn

A simple web API for returning protein structures in JSON form. It uses atomium on the backend, and draws from any of the three atomium filetypes.

Protein structure files need complicated parsers to be able to access them, as they are stored in very specific file formats like .pdb or .cif. With pdb2json however, all you need is a browser and you can get those same structures in the universally understood JSON.

This is really just a thin django wrapper around atomium.

election19

python
django
javascript
SASS
docker
gunicorn
nginx

A tool for running simulations of alternative versions of the 2019 UK general election.

election19 lets you define rules such as 'if 10% of Green voters had voted for Labour' and apply them to the result to see how this would affect individual constituencies, and therefore the overall election result.

One of my most rapidly deployed projects, built over a single weekend immediately after the election.

ZincBindWeb

javascript
react
SASS
graphql
apollo
nginx

The web frontend to ZincBind - a react app which uses the ZincBindDB and ZincBindPredict APIs to allow a user to easily browse, search and predict all kinds of zinc binding sites.

PetRank

python
django
javascript
jquery
bulma
nginx
gunicorn
postgresql

A website created with Alex Harston to determine which pet is, objectively speaking, the best pet in the world.

When a user goes to PetRank they are provided with two images of pets that other users have uploaded, and are invited to pick the 'best'. The chess ranking algorithm ELO is then used to turn these votes into a score, which is used to rank the animals.

The history of each pet is tracked and visualised.

docupy

python

A lightweight Python markdown-to-HTML engine.

Originally intended to be a general purpose document interconverter, it is currently functioning very nicely as a simple markdown parser.

The text you are reading at this very moment was converted from markdown using docupy.

kirjava

python
graphql

A Python client for accessing GraphQL APIs. Initially just a thin wrapper around the requests library, this is intended to be a sophisticated but intuitive means of using Python to access modern web services.

This started out as a learning exercise to learn how the GraphQL syntax worked, but over time it has evolved into a stable client capable of talking to any GraphQL server.

reddit-save

python
javascript

A Python tool for backing up your reddit saved/upvoted stuff locally.

Browsing through the stuff you've liked or saved on reddit is really enjoyable and, depending on the reason you saved something, can be a great way to recap stuff you once thought important. It is a personalised feed of posts and comments by the one person guaranteed to know what you like - past you.

However over time more and more of the older posts will be deleted or missing, and the historical record atrophies. Use this tool to back up those posts and comments to your computer where you can browse them offline, and where they are safe forever.

reddit-save will backup saved posts, saved comments, and upvoted posts. It can't do upvoted comments because the reddit API doesn't expose them. Crucially, when it is run again on the same location it will ignore any posts/comments previously archived - once something is saved, it's saved permanently.

Each post will have its top-level comments saved, as well as each of their immediate child comments (but no further). Linked media files (images, videos etc.) will be saved locally where possible, though imgur is currently not well supported in all cases.

pdbsearch

python
bioinformatics

A library for searching for PDBs via the RCSB web services.

valerius

python
bioinformatics

Basic biological sequence tools - useful for analysing protein or DNA sequences in Python.

This one isn't quite as developed as atomium, but it has the same basic premise - that Python libraries should be lightweight, well tested, and focusing on one thing only. And ideally with minimal dependencies.

valerius currently lets you get GC content, and do basic alignments.

PulseHack

javascript
jquery
bootstrap
python
django
docker
gunicorn
nginx

PulseHack was the UCL MedTech Hackathon in January 2019, and this is the official website for it which I created.

It was basically a template that I converted into a Django app so that the contact form would work.

fuzz

python

A very lightweight Python library for representing numbers with an associated uncertainty - numbers which are 'fuzzy'.

It provides methods for adding them and multiplying them, making the neccessary changes to their uncertainty values.

pyGtoP

python
bioinformatics

A Python library that uses the Guide to Pharmacology API to present a Python interface to that data.

samireland.com

python
django
javascript
SASS
nginx
postgresql
gunicorn

This website! A django app that has been rebuilt many times.

Originally a static website, then a PHP website, it has been built in django from 2016, and was my first django project in fact. Most of the things I have learned how to do in django were experimented with first on samireland.com.

I've never really been able to decide exactly what this website is for, and it has changed quite a bit over the years.