List of all entries, with small excerpt, click the title to open the full blogpost

  • Penguin eating a Tiger(lake): Fixing high battery usage on GNU/Linux+Intel

    I recently got a new laptop, a ThinkPad P14s, as part of a project I undertook at the university. However, despite an advertised 10 hour battery life, I found that it was going from 100% to 0% charge in under an hour. That’s fine in a work-from-home situation, however I’m hoping as the world gradually opens up, I’m keen to become Mr Worldwide 😎, so an hour is not going to be enough for me. I eventually figured out a solution, however there was not clear documentation of this online. This post documents what I found, and how I fixed it.

  • GPT-3 based Signal bot

    Header image

    In experimenting with the OpenAI API, I developed a little bot for the Signal Messenger app.

  • Circuit hacking: AI assisted clock control

    Header image

    As a weekend project, I thought I would try to do something with an old Raspberry Pi 3 I had lying around. However, I have not actually done non-trivial breadboarding since high school, and I wasn’t sure where to start. Luckily I recently got invited to the OpenAI Codex Beta, so I was able to generate a lot of the code automatically!

  • Open Source: PyTorch Lightning CIFAR

    I released my code for PyTorch Lightning CIFAR on GitHub, free under the MIT License. It is a fork of the classic PyTorch CIFAR codebase from @kuangliu, adding support for the productive research tooling that PyTorch Lightning package brings. I also include accuracies for the models trained using 200 epochs.

  • A chat with GPT-3

    I recently got access to the OpenAI API Beta, and with that a trained GPT-3 model. It’s a very flexible NLP model, which can do things like question answering, translation, text summarising, and more. One thing that’s drawn me in though is its chatbot capabilities.

    It is really quite unlike any system I’ve communicated with before, it can have countless different personalities depending on what topic of conversation you have with it. I’ve only had maybe 5 or 6 conversations so far, you can see a couple of them here. I’m posting this one in my blog, because it gave me permission to, plus it went off in an interesting direction.

  • AI Generated Music Video: SENGA 'Bloodshot'

    I recently had the opportunity to help produce a music video for the upcoming album from SENGA AKA Sean Cosgrove.

    You can read about the track, and the album in this piece in DJ Mag.

    The video is AI generated, and I thought I’d take this opportunity to give a brief overview of how I put it together.

  • SECDA: Efficient Hardware/Software Co-Design of FPGA-based DNN Accelerators for Edge Inference

    I was fortunate to recently work on a paper on hardware design, led by the talented Jude Haris. SECDA was published in October 2021, in the IEEE 33rd International Symposium on Computer Architecture and High Performance Computing (SBAC-PAD) conference. It was hosted in sunny Belo Horizonte, Brazil; but unfortunately we had to attend remotely due ongoing international travel difficulties.

    The work discusses a co-design methodology we developed for efficiently producing FPGA accelerators. You can read the full paper here on arXiv, the following post just gives a brief accessible summary.

  • Cross-post - Robot Burns: Using HPC to Create Modern-Day Poems Inspired by 18th Century Master

    My work on Robot Burns (my GPT-2 generated poetry pamphlet, in the style of Robert Burns - available for sale at 😉) was recently featured in an article on the SC21 (International Conference for High Performance Computing, Networking, Storage, and Analysis) blog.

    The blog was written by Cristin Merritt, and can be read here.

    I discuss how low cost causal HPC environments like Google Colab have been a boon to hobbyists and artists.

  • Writing practice: a rant on encryption policies

    I originally wrote this as an email in response to a proposed EU resolution to ban end-to-end encryption on apps like WhatsApp, Signal, and others. The salient points still remain true. I am a dilettante when it comes to the finer points of security and cryptography, however I am always trying to learn more on the topic, challenge my beliefs, and influence policy decisions. If you want to talk to me more about this sort of thing feel free to get in touch.

  • Flashing a Hikey 970 in 2020

    I recently had to flash a Hikey 970 from scratch, as I did not get any response from fastboot. However, the official documentation does not appear to have been updated since 2018. Hence, this post documents the steps of how far I got. Unfortunately I was not able to get the whole thing working, but I will update this post if I do. If you found this post, and did get it working, please feel free to contact me so it can be updated.

  • Installing perf on a development board (e.g. RPi4)

    I recently had a colleague encounter some troubles using perf on a new Raspberry Pi 4 device.

    Normally you would install it from a package repository (e.g. using apt, and the package name linux-tools).

    However, when you’re on a non-x86 platform, you cannot always rely that there will be packages for you device, and even if there are, they might be broken in subtle and frustrating ways. This was the case for my colleague.

    Luckily, I had encountered a similar issue on an ODROID device, and had kept my notes. I’ve adapted the notes into an email to the colleague, and thought I might as well post it here.

  • Robot Burns

    Leveraging some recent advances in natural language processing, for Burns Night 2020 I recently generated poems in the style of Scotland’s National Bard.

    I collaborated with Scottish illustrator, Alasdair Currie, who has provided their design magic.

    We’re selling a pamphlet of some of the system’s output at, for £10+P&P. All proceeds go to Samaritans.

    We were featured in newspaper articles, including The Scotsman and The Glasgow Times.

    I also had my first appearance on live TV, with a quick segment on EuroNews. With that, I think I focused too much on technical details, and missed the narrative thrust. Lessons for next time.

    You can find more details about how it works in the full post.

  • Podcast episode: ARM and HPC

    As part of my PRACE Summer of HPC, I produced a few podcast episodes, where I spoke with HPC leaders in research and industry.

    This episode I was joined by Brent Gorda and Filippo Spiga of Arm Holdings. We discussed the movement of Arm into the HPC market, partly in thanks to research collaborations with PRACE affiliated centre BSC.

    Link: PRACE SoHPC Podcast - ARM and HPC – with Brent Gorda and Filippo Spiga of Arm Holdings

  • Building an old version of gcc, a journey of errors and solutions

    Hello neighbours. Another dry one today, intended first and foremost for myself before I wrote this post, and secondly for anyone coming after me in a similar boat.

    Due to working on a reproducibility study, it was necessary for me to build some old compiler versions, that no longer existed on package repositories.

    I encountered a number of build errors during this time, and have documented how I solved them. As a post, it isn’t bringing many insights, and serves as a curation of disparate Stack Overflow and other sources that I used to solve my issues.

  • Containerisation for HPC

    For my reproducibility work I have recently been introduced to the Singularity containerisation workflow, which has some key differences from Docker, especially regarding the permissions that processes run at.

    You can find the post on the SoHPC website.

  • Summer of HPC Introduction

    Have a summer placement through the Partnership for Advanced Computing in Europe. I will be doing some more posts for them this summer, you can find them here, or

    My first post is available here:

  • Mnemonic

    In order for privacy preserving technology to see widespread adoption, it must be accessible.

    One of the key problems in making this technology accessible is the question of how to handle identity. In a centralised system, some authority can be in charge of which identifiers are associated with which identities. For example, Google runs Gmail, and keep track of which user owns what username. To create an account you ask them for one, such as They will look up their list of previously registered usernames, and tell you that someone else already has it. Finally, you find an unallocated username, which Gmail grants you. From that point forward, if someone wants to contact you they need your username, then send you their message via Google.

    In decentralised systems however this poses some challenges. A global table of registered usernames is a complex engineering challenge.

subscribe via RSS