Mathematics is about approaching any problem, be it every day, technical or even personal by firstly identifying its key features, and then constructing a new problem characterised solely by these features. In doing this we can both learn why the original problem exists and hence solve it, but also generate new tools that can be used as motivation for the creation of wholly new innovative ideas.

My name is Sam Gonshaw, and I'm a Master's of Mathematics and embedded software engineer. I believe in using the ideas of abstraction to create and develop new and innovative solutions to the most intractable of problems.


I have experience in C, C++, Python and HDL development, as well as a passing interest in a host of other languages and computing paradigms for a variety of projects. Please click on the projects below to find out more.


Since my mathematical journey began I have come into contact with varying aspects of the subject and contributed in a variety of ways. Click on the projects below to find out more.


  • Hackster: Comprehensive latest news in embedded development.
  • Hackaday: Novel projects in embedded development.
  • MIT Technology Review: The source of the latest developments in technology.
  • Fano Search: An ongoing project to classify an important family of geometric entities known as Fano varieties.
  • SAGE Project: A suite of open source, Cython based tools for abstract mathematics.
  • GAP Computational Discrete Algebra: A suite of tools for computing with mathematical groups.
  • KefKefKef: An excellent collection of games and activities for use in education.
  • HTML5Up: Provided the css/js templates for this site under a Creative Commons license.

Group Theory

A group is the abstract notion of symmetry, and to me one of the most stunning ideas in mathematics. It was initially conceived as an abstraction and generalisation of symmetry of equations. That is to say that the question of switching variables in a given equation around and still get the same answer. The collection of all switchings, is a group.

On generalising this by focusing on the defining properties of these switchings, the mathematician Galois discovered alongside his colleagues that a whole field of worthy study can grow out of these objects. It turned out that the generalisation captured the idea of symmetry perfectly, and any mathematical discussion of symmetry in any area will use the language of groups.

I have looked into certain groups that describe symmetries of shapes lying in a kind of space with only finitely many points. In particular a collection of symmetries known as the classical groups, important as they are the building blocks of many other groups, and the key to researching symmetry (such as that of chemical structures or physical theories) in general.

Mutations of Fake Weighted Projective Space

The Fano search is an ongoing project at Imperial College London to classify the family of shapes known as Fano varieties. These shapes have great significance to geometry as well as current physical theories.

Classifying these shapes is exceedingly challenging, and the method has taken the form of studying associated objects known as Laurent polynomials. Unfortunately, multiple Laurent polynomials are associated to a single Fano variety, yet it is conjectured that these polynomials are all related by a process known as mutation.

I had the pleasure to work alongside the group studying the effect of mutation on a class of objects known as fake weighted projective spaces. Our results are collated in the paper below.

Mutations of Fake Weighted Projective Spaces (Elec. J. of Comb.)

Error Correcting Codes

An area of mathematics of I have had much contact with even outside my mathematical research is that of codes. Ignore the name for a minute, and you could explore the world pure mathematicians call codes. These are actual spaces, bubbles within a collection of points, with connections to other areas allowing a transfer of knowledge between the interpretation of these bubbles and points, and the raw mathematics behind them, often allowing for interesting forays into statistics.

Yet I have come to know them for another purpose. These points can represent messages, and the bubbles are corrupted messages, that can shrink down onto their correct interpretation. An example would be points being words in English and an example bubble being the words: mathematics, mathmetatics, mthtematics, mathmatics, and so on...

Today, we consume a large quantity of data, but this data is subject to corruption along the way. No wire is perfect, no satellite signal undisturbed. And so codes are chosen to allow mistakes to creep in but the message to still be decoded. And so another use of old mathematics rears its head.

From the use of the 'Golay Codes' for communicating with satellites, to the complex 'BCH codes' for retrieving old data from your hard drives and SSD's, these codes have gone from abstract bubbles, to a part of our lives.

FPGA Solutions

Most compute loads these days are one of three forms.
  1. traditional CPU loads, where simple calculations are performed sequentially,
  2. multithreaded CPU loads where a pool of tasks can be shared between workers
  3. Highly parallelisable workloads such as matrix manipulation for machine learning
However a fourth type of specialised workload exists: A workload that requires either highly accurate timing, single cycle responses, or a speed boost for complex fixed point operations can be redesigned as a logical circuit, and then implemented in hardware descriptor language, HDL for use on FPGA or ASIC. My work firstly with ASIC development where successive generations of work moved intensive tasks from firmware to hardware showed me the power of custom co-processors. My work with large data collection systems showed me the ability of FPGAs to accurately sample and manage data with low jitter and highly predictable timings.

Advent of Code

Practice is the second most important step of learning, after communication. Advent of code provides an annual opportunity for developers to put lesser used skills back into practice, to learn new skills and languages and brush up on old ones. Advent of Code is an annual programming puzzle featuring 25 different daily programming tasks that often utilise fundamental concepts such as graph searches, using "lowest common multiple" methods to reduce cycles, and 3D object representation. I have been involved as a participant for the last four years, working on Python, C++ and Rust solutions.

SAGE Mathematics

SAGE Mathematics

There are many different extant software packages catering to abstract mathematical computation. These include GAP, MAGMA, Cayley, Maple and R to name a few. This gives rise to a number of issues. Each cater to a specific purpose, and integration is lacking. In addition, the licensing governing the various packages is complex which often leads to great financial costs to academic institutions.

SAGE is an open-source, free, Cython based Python syntax wrapper and program that provides access to effectively all the free packages, and allows intergration of paid ones. It additionally incorporates new methods not included in other packages allowing for new ways of tackling old problems.

I have contributed a native implementation of polytope normal form calculation, that is functions that take certain geometric objects and can test for similarity. The project is ongoing and always looking for more contributions.

SAGE Mathematics

Classifying Terminal Weighted Projective Spaces

Weighted projective spaces can be though of as geometric objects describing spaces that have had weights placed on them to cause them curve in on themselves. Terminal spaces are those that have certain conditions placed on any kinks on the space to ensure they are not too irregular. This is described further here.

A combinatorial game can be played to discover the sizes of the weights that can be used to ensure that the kinks are all 'terminal'. This game involves taking initial weights and manipulating them in any way we can to keep the kinks as we want, then iterating all possibilities.

To do this a work queue style script was constructed in C to allow maximal use of resources to tackle generate all possibilities, and check their validity.

Terminal Spaces Work Queue (GPL)


Sudoku is a fine example of a complex mathematical puzzle. The generalisation of Sudoku to a puzzle with \(n\) symbols as opposed to 9 leads to an NP-complete problem, an example of a class of exceedingly challenging problems.

Solving these in general can utilise many techniques, but the fact that this issue is NP-complete suggests that little gain can be made on simple brute force methods. This deduction led to an ability to concentrate on user experience rather than technicalities when building an automated solver.

The Android app demonstrated in the link below implements image processing and OCR to create automated puzzle recognition to give it an edge over other solvers that could never truly improve over a brute force method.

Sudokoer Source (GPL)


Context is a Google Glass based reading app and a 3D printed physical aid designed to ease the reading experience for dyslexia sufferers. Google Glass is a new technology, with a lot of potential. However, many applications currently being developed do not specifically make use of the advantages that only a partially augmented reality interface can provide. Context directly uses the benefits of an unobtrusive screen, providing phonetic translation and contextualisation of difficult words. It also incorporates preexisting physical technologies, leading to an easy transition for the millions of dyslexia sufferers worldwide seeking a helping hand.

Context Main Page