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.
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.
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.
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.
Machine learning models for predicting zinc binding sites in proteins, with a GraphQL API serving them.
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.
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.
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.
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.
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.
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.
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.
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.
A library for searching for PDBs via the RCSB web services.
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 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.
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.
A Python library that uses the Guide to Pharmacology API to present a Python interface to that data.
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.