Software Engineer Hi there! I'm a software engineer in London, currently working remotely, with a growing passion for pure functional programming in the likes of Haskell.
Quality is pride of workmanship.— W. Edwards Deming
Jobs
Adaptavist
December 2018 - Present
At Adaptavist I've spent considerable time refactoring the untyped codebase to strict TypeScript, improving quality, safety, and maintainability along the way. I'm a strong voice for best practices within my team, and am a positive proponent of pure functional programming to the wider department. I've also begun leading the way on testing, introducing property-based testing to our unit tests and integration testing to our React components. I regularly pair with and mentor teammates.
Oddschecker
February 2017 - December 2018
At Oddschecker I pioneered a greenfield B2B project utilising React and D3 on the frontend and Node on the backend. I was introduced to static typing via TypeScript, something I now can't see myself ever leaving behind. I was, as ever, perennially focused on code quality and long-term maintainability, and I matured significantly as a developer as it pertains to balancing overt business interests against tech debt. I also began to mentor more junior members of the team.
Impero
December 2015 - February 2017
My work at Impero was predominantly frontend-heavy and really challenged me to get to grips with the wonderful disaster that is CSS, as well as more importantly level up my JavaScript ability. By the end of my time here I was proficient in vanilla JavaScript and beginning to enter the world of functional reactive programming with Vue.
Perspective Publishing
March 2014 - December 2015
I designed and implemented the majority of Perspective's websites. Additionally I began the rewrite of the internal company CMS, converging dozens of legacy systems into a single unified experience. Prior to leaving I lobbied for a change from archaic FTP uploads to a version control system.
Open Source Projects
tshm
December 2020 - Present
tshm is a parser and formatter for TypeScript declarations that outputs HM-style type signatures. The parser is implemented as a recursive descent parser.
terpod
August 2020 - Present
terpod is a terminal podcast manager written in Haskell. It allows the user to sync feeds, list feed episodes, and download episodes on demand.
fp-ts-std
October 2020 - Present
fp-ts-std is a library targeting the fp-ts ecosystem, aiming to be something of a pseudo-standard library, fill in the gaps between fp-ts and Ramda, and generally flesh out what's missing in the parent library.
Bukubrow
February 2017 - Present
Bukubrow is a WebExtension for Buku, a command-line bookmark manager. It includes a native binary written in Rust that interfaces with the Buku database. As of time of writing, analytics from Firefox and Chrome suggest that this WebExtension is being actively used by several hundred people. There is a work-in-progress branch in which the frontend is being rewritten in PureScript with Halogen.
bangin
September 2020 - Present
bangin is a deliberately small, thoughtfully-designed shell script which replicates the behaviour of DuckDuckGo's bangs on the command-line.
samhh.com
February 2019 - Present
This is the site you're viewing right now! I've strived to make it maintainable above all else; it produces static files with Gatsby and can be easily deployed to countless service providers without any hassle.
Open Source Contributions
Aura
Aura is a command-line AUR (Arch User Repository) helper. My contribution was aimed at adhering the configuration of Aura to the XDG standard.
fp-ts-contrib
fp-ts-contrib is a community-driven utility package for fp-ts, a library which enables typed functional programming in TypeScript. My contribution added the filterA module, which enables filtering an array with an applicative predicate.
Hobbies
Mathematics
Functional programming has reintroduced me to mathematics, the subject I always felt an affinity for. I'm working my way through Khan Academy at the moment.
Linux
Perhaps unsurprisingly as a software engineer I enjoy working with computers. I've built my own PC on which I run Arch Linux, and even game on it for everything not in VR. I use xmonad, configured in Haskell, as my tiling window manager, and (n)vim is my preferred modal editor. I live on the command-line.
Running & Self-Improvement
I've found that working remotely enables me to run more frequently. I'm still not very fast over long distances, but I'm getting there, recently hitting the beginner's milestone of 5km in 30 minutes. Self-improvement in all aspects of life is very important to me; there is nothing worse than stagnation.
Gaming
I'm an avid gamer, currently predominantly spending my time with Deep Rock Galactic and Half-Life: Alyx. I hit Grand Champion in Rocket League a while back and decided that was the right time to take it out of my regular rotation, but feel free to hit me up for a game!