A Computing Science PhD student at Glasgow University
Following on from my earlier research on computational responsibility and sociotechnical modelling --- discussed below --- I am beginning a PhD at Glasgow University within the realm of sociotechnical systems modelling. The specific research area is still undefined, but I am interested in modelling real-world systems, with a particular interest on modelling behaviours within sociotechnical systems.My PhD is part-sponsored by Obashi.
As a masters student, I spent most of my time developing a computational model for responsibilityRelated work would be Marsh's early computational model of Trust, some of which has inspired my own model -- you can read the paper on that here.. The work formalised what responsibility is, as well as what it means for an agent to be responsible, and used that formalism to create agents which exhibit properties of responsibility for task scheduling, dependable systems, and resilience engineering among other application areas.The dissertation on this work is available here. This work, as well as my earlier research in variability modelling in sociotechnical systems, is what lead me into my PhD!Applications of the model might include more advanced security systems through social reactions to the actions of other agents, creation of friendly AI by limiting their space of minds, infrastructure management, and others.
This project is still in development; a current version can be found here.In the past, my research has been on sociotechnical systems analysis. With Tim Storer at Glasgow University, I developed a system called Fuzzi Moss, a code mutation library which replaced functions in Python programs with versions of the original which executed random mutations when called. Together with a semantics system for developing workflow models from UML activity diagrams which I also developed, the project simulated human workers in an arbitrary environment and injected human-like faults into that system, to create simple workflow models with human-like variance. The project was awarded an A2, and won the prize for best software product.An in-progress paper on the work can be found here.
Currently, I am an intern at Obashi, my PhD co-sponsor, where I am helping to engineer a platform-oriented version of their modelling systems. This engineering primarily involves Go development. I also assist in considering sociotechnical applications of their modelling systems, and am working to better understand the technical details of their platform for my upcoming PhD work.
During my masters year at Glasgow University, I worked part-time as a consultant, for progressing a fintech startup's ERP integration system,This company was an employer for my Python development, listed below, who employed me on a consultancy basis after an internship. as well as some project management and python software development. My consulting experience involved 100% remote work, with equal parts engagement with other companies/industrial partners, and team management.
My experience in Python development is twofold. Firstly, all of my research code for honours and masters years has been in Python; I have used it to build novel code mutation techniques, model sociotechnical variance, and demonstrate an anthropomorphic algorithm for computational responsibility.
At a fintech startup in London (EC2), I helped to create vast swathes of the first working prototype of an invoice factoring system in Python. This involved architectural decisions, as well as utilising technologies such as message queueing,A result of this work was that I became an official contributor to a Python message queueing system based on Redis RESTful API endpoints, and large-scale, sustainable systems engineering.
I am comfortable with Python engineering at scale, and capable of producing high-quality, idiomatic code which leverages Python's strengths. I am also capable of using this engineering expertise to implement out-of-the-box solutions to problems, which I am capable of constructing as a result of my research expertise.
Personal projects I update when university and work don't take over
The Project Albert homepage can be found here. Project Albert is a research project in experimental storytelling. Specifically, it is an attempt to simplify the improvisation of children's bedtime stories, for parents and carers who do not necessarily have improvisation training. Albert achieves this by breaking down the structure and properties of the improvised story into simple rules, called design patterns. An in-progress essay on Project Albert can be found here.Using design patterns, it remains simple while becoming as complex or involved as the storyteller requires, without becoming difficult to create or difficult for the audience to understand. A full suite of design patterns have been produced, and sample stories using the patterns made available on its homepage.
The homepage for the project, detailling all of the patterns, can be found here Developed at the CREATe hackathon 2016, this project developed a series of design patterns which could be used to help in data analysis to detect piracy, and to detect negative and illegal activity online. It was used to graph connections between torrent networks and social networks using data provided by the University of Glasgow and CREATe.
Things I'm interested in but not currently actively working on
Literate ProgrammingA technique by Donald Knuth. Read more here is a technique to develop readable, self-documenting code by having the code interspersed through documentation which describes it. While I believe the approach has some flaws for some use cases, it's a fascinating idea, particularly as a tool for education. Being able to hand out a document which can be executed, and seeing the code being written as it's being described, is a clever way to introduce source code to aspiring programmers. I've written a small Python library which performs ordinary Markdown compilation, but when it approaches code blocks, can execute the code and replace the block with what the code returns. While the project is written in Python, it is designed on a plugin architecture allowing multiple languages to be evaluated.You can find the source code for the project here The project has some bugs -- particularly involving global Python environment when inserting evaluated Python code -- but is meant as a proof of concept for markdown-based literate programming for any language.
Organism Calculus is an idea which tried to generalise the mathematics underlying evolutionary theory as it pertains to any fundamental units which come together to create emergant phenomena in the form of an organism. An example of this is economics, where individual people and technologies interface together to produce one larger company which appears to make decisions "of its own". Similarly, companies interact in ways which indicate their own cellular interaction within markets: some forms of hostile takeover being analogous to the operation of a macrophage consuming a bacterium. Similar behaviours can be found in algorithm interactions, sociotechnical systems, politics, artificial intelligence and more. Of particular interest is applying this work to the study of ideas and their spread, as ideas spreading like genes was Dawkins' original definition of a Meme. When the spread of ideas is taken in this light, culture might be defined as a person's memetic "genome". Some work touching on this idea has already been attempted.I am aware that some work in economics and genetics is being done to mathematically formalise what the gene-like components of their respective organisms produce in terms of emergant phenomena; however, my proposal is to generalise the behaviour of self-reproducing fundamental units (gene-like systems) and to define how (and potentially what) their emergant phenomena might be. I'm also interested in exploring the philosophical implications of this work; particularly as it relates to modelling catastrophic failure of civilisation-critical problems, like AI safety, global political collapse, and other existential risks.
I quite enjoy managing linux servers in my spare time. I write my code in Vim, and this website is being served from a Dell T20 in my bedroom. Personal server management is an interesting hobby -- particularly as one realises the complexities that would prevent the layperson from operating their own server. Owning one's own server, and understanding some basic technologies one can run on it can have lots of benefits the ordinary person would benefit from. For example, a small home server might allow a person to operate a VPN, keeping their traffic encrypted on unsafe open networks when in public. A family might want to run a media server to host various books and films that they've accumulated over the years -- not unlike a regular family's bookcase today. However, running these servers is difficult, and most families simply pick up a Netflix subscription instead. I'm interested in learning about server management, so that I might contribute back to the layperson community in the future.