Projects

Here are the projects I have worked on in the past, or are currently working on - mostly software, mostly open source. You can filter them by the technologies they each use if needed, or click on them to get more details.

#python
#library
#bioinformatics
#javascript
#react
#django
#tailwindcss
#nextjs
#nextflow
#graphql
FEATURED
atomium

atomium

A lightweight, fast, modern parser of protein structure files.

Structural biology is the study of molecular structures - usually 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.

#python
#library
#bioinformatics
election19

election19

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.

#javascript
#python
#django
FEATURED
nf-diffuser

nf-diffuser

A nextflow pipeline which generates images and video using diffusion generative AI models.

This pipeline is an implementation of (for the most part) stable diffusion as a Nextflow pipeline. It currently supports images, with video to be added soon.

Diffusion models generate media by starting from pure noise, and learning how to guide the image to something that looks like it could have formed part of the distribution that generated its training set, guided by text conditioners. In the case of stable diffusion and related models, this is done on a 'latent' image - a lower resolution representation - which makes it feasible to run without enormous computational resources.

#nextflow
#python
molstar-react

molstar-react

A react library for adding the molstar protein viewer to a web app.

Molstar is a WebGL-based protein viewer, which can be used to display and interact with protein structures in a web browser. It is a very powerful tool, but it is also very complex, and so this library aims to make it easier to use.

#javascript
#react
#library
#bioinformatics
FEATURED
nextflow.py

nextflow.py

nextflow.py is a Python wrapper around the Nextflow pipeline framework. It lets you run Nextflow pipelines from Python code.

Nextflow is a pipeline workflow language for creating large, resource-intensive data processing pipelines, particularly in the life sciences. The pipelines are run from the command line.

This library is a Python wrapper around that, allowing the pipelines to be called from a Python script. It also provides abstractions for many of the outputs of these pipelines.

nextflow.py powers Goodwright's analysis platform, Flow.

#python
#library
#bioinformatics
#nextflow
Penumbra

Penumbra

Penumbra is a simple, secure, and private note-taking app. It runs entirely in your browser, and your notes are encrypted locally without being sent to any server. You can even use it offline as a progressive web app.

#tailwindcss
#react
#nextjs
FEATURED
ZincBind

ZincBind

ZincBind is a database of zinc binding sites, automatically generated from the Protein Data Bank.

This project formed the core of my PhD research, which was an investigation into the properties of zinc binding sites in proteins, and how these might be used to train machine learning classifiers to predict them.

This resourcre contains all the identifiable zinc binding sites in known protein structures, as well as a prediction tool which uses the developed models to predict zinc binding in novel protein structures or sequences.

#graphql
#javascript
#python
#react
Lytiko

Lytiko

A general purpose self-analytics app. It lets you track all kinds of things about yourself and tries to find correlations. It is currently being rebuilt as a comprehensive, end-to-end quantified-self platform.

Personal analytics is one of my core passions, and this app is the manifestation of that.

#javascript
#tailwindcss
#python
#react
#django
pdbsearch

pdbsearch

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

The RCSB is one of the organisations that maintains the central repository of all publicly available 3D protein structures. You can search through these via a complex advanced search page on their website, and the same functionality for searching structures is exposed via a web API.

This library is a Python wrapper around that API.

#python
#library
#bioinformatics
reddit-save

reddit-save

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

reddit-save will backup saved posts, saved comments, and upvoted posts. 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.

#python
samireland.com

samireland.com

Originally a static website, then a PHP website, then a django templates site from 2016, and now built with wagtail (django) and next.js (react). Most of the things I have learned how to do in django were experimented with first on samireland.com.

#javascript
#tailwindcss
#python
#react
#nextjs
#django
kirjava

kirjava

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

It also fully implements the GraphQL multipart request specification, allowing files to be uploaded with it.

#graphql
#python
#library
django-random-id-model

django-random-id-model

This module provides a base class for Django models that gives them a random primary key id.

By default, database primary keys tend to just increment - the first will be 1, the second 2, etc.

This is not ideal - sometimes you want a random integer. This library handles that for you.

#python
#library
#django
slack-save

slack-save

A tool for exporting all your Slack conversations to JSON, using browser session credentials.

Useful for creating a one-time record of your activity on leaving a workspace, for example.

#python
tiktok-save

tiktok-save

A Python utility for backing up your liked and bookmarked videos on TikTok. It will download the videos themselves as mp4 files, and associated metadata for each video as JSON.

The rationale behind this, as with reddit-save, is to preserve content you have previously shown you like, without having to rely on the whims of whether a company continues to host it, or whether the uploader decided to delete it.

#python
BBC News Archiver

BBC News Archiver

This website takes a screenshot of the BBC News frontpage every 2 hours, and presents them in a searchable, paginated form on a simple Next.js website.

I've always wished there was a way to see what the website looked like at a particular point in time, and while the Internet Archive exists, it is sporadic, slow, and stores the full HTML. I just want to know what the page looked like.

#tailwindcss
#python
#react
#nextjs
PetRank

PetRank

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

The user is 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.

#javascript
#python
#django
pygtop

pygtop

A Python library that uses the Guide to Pharmacology API to present a Python interface to that data. The Guide is an expert-curated resource of pharmacological targets and the substances that act on them, and this library allows programmatic access to its data.

#python
#library
#bioinformatics
hoi4.py

hoi4.py

hoi4.py is a Python library for parsing Hearts of Iron 4 save files (whether binary or plain text) and for plotting useful information from them.

#python
#library
pdb2json

pdb2json

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.

#python
#django
#bioinformatics