C# is my current general-purpose language of choice. I enjoy building both web and native applications using it due to the huge feature set and uncompromising design. As a Linux user, I particularly like using C# with .NET Core thanks to the cross-platform support.
About Me
I am a University of Warwick Computer Science alumni, with a keen interest in developing a variety of different applications, particularly web applications. I enjoy using technology in general, and I pursue this in my spare time through personal projects and hobbies.
I have experience in a variety of languages and technologies. I enjoy learning new technologies and I am usually able to become proficient in almost any language or framework quickly. I particularly enjoy working with modern web frameworks such as ASP.NET Core and React in Linux environments using containers.
Skills & Experience
I am always keen to learn new technologies and skills, see the lists below for some of my existing skills and how confident I am with them. Click a skill to read more about my experience.
Languages
C#
HTML & CSS
I am fluent in HTML and CSS, and feel very confident working with them. I pride myself in building pages accurately to concepts and implementing best practices to ensure good UX and accessibility.
I used HTML & CSS for Bill Ninja and jtattersall.net.
JavaScript & TypeScript
I enjoy writing modern JavaScript (or preferably TypeScript) for modern frameworks such as React. I prefer to use TypeScript as types allow the code to be more self-documenting, and the compile-time type checking helps to reduce bugs.
I used JavaScript & TypeScript for Bill Ninja and OpenLD.
SQL
I am able to write and understand complex SQL queries, and I have worked with all the major databases, including PostgreSQL, MySQL, SQL Server and SQLite. I particularly enjoy writing SQL queries to optimise for speed and efficiency
I used SQL for Bill Ninja, JobHunt and OpenLD.
Java
I have experience using Java in a variety of applications, including simple web and Android apps.
I used Java for NightLightDarkroom and Robot Maze.
PHP
I have experience writing web applications using PHP, both with and without frameworks. Although the language is not my favourite by design I appreciate how fast it is to create web applications, and newer language versions are improving it.
I used PHP for Bill Ninja.
Python
I have experience using Python to write simple applications, including web apps using Django. I mainly use Python for writing simple scripts/utilities for tasks such as web scraping and automation.
C
I have used C to create non-trivial programs as part of university modules. I have experience implementing techniques such as multithreading using POSIX threads, and vectorisation using AVX.
I used C for Intrusion Detection System and Scientific Code Optimisation.
C++
I have some experience writing in C++ from university coursework. I enjoy the potential speed and extra features over C, but I found it quite difficult to learn due to the many nuances and rabbit hole of features and best practices.
I used C++ for Mini-C Compiler.
Technologies
ASP.NET Core
Entity Framework
Entity Framework is my preferred method for interacting with databases from C#. I have used Entity Framework Core in several applications, and the older Entity Framework 6 in my day job. I like how queries can be written entirely in C#, and the powerful features available, though at the expense of some performance.
React
React is my current front-end framework of choice. I have used it to build several applications, most notably the front-end for my final year project. I like how it reduces the amount of boilerplate code significantly, and avoids tedious and error-prone manual DOM manipulation.
Vue
I have some experience using Vue in my day job, where I have used to implement complex interactive features in web apps. I like it for the same reasons as React - reduced boilerplate and avoiding DOM manipulation. I particularly like the input binding features, which are very useful for further eliminating boilerplate in simple forms.
Other
Git
Git is my version control system of choice. I have used Git for almost every project since first learning about it in my first year at university. I like the speed, reliability and complete flexibility, especially compared to competing solutions such as Microsoft TFVC, which I find to be very slow and unreliable.
Linux
Linux is my daily operating system for my personal devices, so I also prefer to work with it on projects. I like the speed, customisability, stability, and far superior command line environment compared to Windows.
Since I use it every day on my personal machine and file server I am experienced in administering Linux servers.
Agile Development
I worked with a team that wholly embraced Agile and Lean principles during my internship in summer 2019. This showed me how well it can work, and how it supports developers in their work by creating a more stable work environment.
Docker
I have used Docker on a few projects involving web apps. I find it to be extremely useful for both deployment and development as the containers allow dependencies to be built-in and preconfigured, avoiding the need for manually configuring dependencies wherever a project needs to be run. I would like to gain more experience using Docker for larger projects, and utilising it in Continuous Integration.
Azure
I have used Azure in my day job, where it is used for hosting. I have experience with basic networking and virtual machine management in Azure, and experience with other areas such as Azure Maps, Logic Apps and Active Directory.
Projects
This is a selection of my biggest and most recent projects. Click a project to read more.
You can find more of my older and smaller projects in the archive.
ODataGrid
November 2021 - Present
An advanced React component for building OData queries and integrating OData APIs with the MUI Data GridJobHunt
April 2021 - Present
A self-hosted web-app for collecting and collating job advertisementsOpenLD
October 2019 - May 2020
A web-based system for creating lighting designs collaboratively with live-editing functionality. Created as my final year project at the University of Warwick.Mini-C Compiler
October - November 2019
A compiler for a subset of the C language created using the LLVM compiler framework. Coursework for CS325 Compiler Design.Scientific Code Optimisation
February - March 2019
Optimising an N-body simulation program using various techniques. Coursework for CS257 Advanced Computer Architecture.AutoTag
August 2018 - Present
A C# application for automatically tagging and renaming TV episodes and films based on the filename.