Hello World

Welcome to heaton.dev!

I work on technology of all kinds and I try to aggregate what I learn here!

► Me, {Linux, HPC, Cloud} Engineer, tinkerer of things. 🌍🇺🇳🇬🇧🥐☕️\n

Opinions are my own, not an endorsement, etc..

Folding@Home HPC for COVID-19

March 2020, news was spreading of a rapidly evolving pandemic with potentially deadly concequences and societies were struggling to slow the tide. Less than a week before working remotely was made mandatory, in an effort to reduce human contact nationwide, I saw the news Folding@home update on SARS-CoV-2 (10 Mar 2020) the Folding@Home project was rapidly onboarding COVID-19/SARS-COV-2 protein folding projects to aid with early understanding of the virus in hopes of discovering ways to block the virus from interacting with human cells, preventing infection....

July 25, 2023 · 3 min · 639 words

MacOS adaption

New role, new laptop, new Operating system — Having come from Windows & Linux desktops, I found MacOS to be extremely jarring when it came to a number of simple but crucial tasks, it was time-consuming to find the equivalents and workarounds for many typicalß developer tools. I’ll summarise my approach here and update as and when I find improvements. A quick summary on what I need; Git, Code editors, Linux CLI, Linux containers, productivity shortcuts....

June 7, 2023 · 5 min · 989 words

WSLg - Graphical Apps on Windows Subsystem for Linux

Windows Subsystem for Linux supports displaying graphical Linux apps, it implements this via transparent RDP which forwards the visuals to Windows. ...

February 21, 2023 · 1 min · 202 words

Git config per directory

I discovered gitconfig’s includeIf feature can change your global Git config depending on which directory you are working in. This is super useful if you have different identities for different project, or you need to specify the SSH key to use, etc.. in my case I want to use my personal email address for personal projects and work email for work projects. So let’s assume a directory layout like this:...

February 9, 2023 · 1 min · 184 words

Split Audio for Streaming via OBS

Streaming from your PC can be tricky, your computer makes a lot of sounds that you don’t want to be broadcast; Whether that be a video tutorial playing in the background, chat notification sounds, or even your voice calls. This setup uses VB-Audio’s VB-CABLE Virtual Audio Device, you can download it for free at vb-audio.com/Cable . For more complex setups you can incorporate multiple virtual audio adapters, up to four extra are available on the same website as donationware....

February 5, 2023 · 2 min · 362 words

Git Commands

Some of my most visited Stack Overflow answers are on how to use Git! We all remember how to add, commit, push, but how often to do you rebase, resolve merge conflicts, modify old commits? Here I’m going to list out all the Git commands I usually look-up! Including any relevant updates, since Git and the way we use Git is always evolving! Commands Git config for a directory full of repositories When you have sets of git repositories with different credentials it can be useful to manage shared git configuration across them....

February 2, 2023 · 5 min · 860 words

Ansible via Google Cloud IAP Tunnel

Ansible is a great tool for managing configuration across a fleet of compute resources, but it struggles with dynamic sets of compute that are constantly being destroyed and spawned since it the user has to maintain a static list of hostnames. ...

September 23, 2022 · 2 min · 214 words

Terraform init-validate-plan-apply Bash function

Tired of typing Terraform init, validate, apply? I’ve written this bash function to speed this up and implement some good practices. ...

July 14, 2022 · 3 min · 601 words

Google Cloud CLI 'gcloud' Variables

I find it useful to frontload my terminals with context about my environment; You wouldn’t want to deploy to the wrong environment now would you? Here I extract information from Google Cloud CLI and print it at the start of every new terminal tab in order to understand exactly where my Google Cloud API requests will go by default. ...

June 21, 2022 · 2 min · 292 words

Understand MermaidJS; Concepts & Syntax

MermaidJS is great because it brings graphs-as-code to the web! No longer do we need to run graphviz from the commandline to generate static image files each time we make a change; Now we see changes instantly, embed graphs with ease in source repositories and track their changes, etc.. The trouble I’ve had with Mermaid is figuring out the syntax, there are quite a few gotchas which don’t advertise themselves very clearly, such as it not tolerating blank lines, or spaces are comma-deliminated lists.. I’ll list these here so you can get graphing quicker than I did! ...

May 17, 2022 · 2 min · 365 words

Styling MermaidJS

What’s better than a graph? A graph with style! Using Mermaid’s class definitions we can style blocks and subgraphs to reflect the ecosystem they belong to; In this case I want to style my infrastructure diagrams to Google’s branding. ...

May 13, 2022 · 2 min · 296 words

Use Terraform Graph in MermaidJS

Terraform has a built-in command to generate a Graphviz digraph representing the output of terraform plan, but this output is pretty messy and can’t render in MermaidJS. ...

May 11, 2022 · 2 min · 356 words

My VSCode

Visual Studio Code, “VSCode”, is the hugely featureful successor to projects like Atom & Visual Studio itself, the extensibility of VSCode is key to this success and I’m going to share what I do to make VSCode work for me. ...

May 2, 2022 · 3 min · 489 words

Cray HPC

On the 50th Anniversary of Cray Research Inc.’s founding by Seymour Cray, I thought I’d summarise my brief but intensely interesting experience with the last crop of Cray Supercomputer systems. ...

April 6, 2022 · 3 min · 609 words

Working with Gnome 3

I’m back on Ubuntu with the Gnome 3 desktop environment and here are a few customsations to make it more productive and make moving between Gnome 3 & Windows simple. ...

February 24, 2022 · 3 min · 540 words

Monitor Internet Health with FluentBit & Grafana

I want to keep an eye on my Internet service provider after a series of prolonged outages, to that end I setup a Grafana dashboard to monitor my connectivity to various online services. ...

February 21, 2022 · 2 min · 246 words

Understand Chia Pools and Farming your NFT Plots

Chia (XCH) is a cryptocurrency based on Proof of Space-and-Time rather than the much more familiar Proof of Work that plagues our efforts to decarbonise our energy grid. Chia was initially developed by @BramCohen , known for developing the BitTorrent protocol. ...

July 10, 2021 · 4 min · 705 words

Bash opinions

Everyone has their own preferences when it comes to writing Bash scripts, I prefer very high safety & syntax consistency. A good example of both is variables, ${USER} can be shortened to $USER, but any following characters could be interpreted as part of the variable name. The longer syntax is also more powerful, enabling small conditional checks, which means we’ll likely end up using the longer syntax somewhere in our script, so why not keep it consistent and use it everywhere!...

June 25, 2021 · 2 min · 289 words

Try out Spack on Arm HPC | CP2K

Diverse users running across a diverse set of architectures, it seems Spack was built just for this! I want to share my experiences with Spack, here my focus is on CP2K. My build environment is a Cray XC50 running Thunder X2 Arm CPUs. Spack is a source-based package manager and build system, all builds take place in self-contained environments. Every installed package is defined by a spec, the spec is a string that represents the enabled features, compiler, etc....

June 4, 2021 · 6 min · 1108 words

Automatically set your github.io domain in GitHub Actions

Collaborative websites need to be forked, but if you set a hostname variable, such as baseURL in Hugo, the forked website will load resources from the original.. Not ideal. The fix I applied to my GitHub Actions CI to work around this: ...

April 20, 2021 · 1 min · 97 words

Host Hugo static website on GitHub Pages using Actions and my domain

In a cost-saving exercise I wanted to try host my personal website on a free platform, since the code repository is hosted on GitHub, I decided to look into GitHub pages. ...

March 12, 2021 · 5 min · 871 words

my Vim

This is my .vimrc, I find it benefitial to use this where I do development to normalise my editor across different operating systems, and to enable some useful untapped features to make Vim feel a bit less prehistoric. ...

October 14, 2020 · 3 min · 529 words

Remote PostgreSQL using local PgAdmin inside Docker

PostgreSQL management is a never-ending rabbit hole and in my case I just want to create a user, a database and set up some ownership.. without resorting to SQL or complex configuration frameworks. ...

September 29, 2020 · 2 min · 336 words

SSH port forwarding

The following command connects to our server and forwards a specific port on our local machine to the server. In this case we forward port 5432 which belongs to PostgreSQL, so when we connect to localhost:5432 on the desktop, the connection is forwarded through the secure tunnel to the server. ...

September 29, 2020 · 1 min · 124 words

Dynamically load fonts

I’ve added a Dyslexia accessibility feature to my website which loads a Dyslexia-friendly font, woo! This involved creating a small toggle function to turn the feature on and off, but when I reload the page it’s gone, so I had it bake a cookie so the function could trigger automatically on-reload. This still wasn’t enough I didn’t want every visitor to load the font, only users who click the toggle button, so I added a section to dynamically load the font. ...

August 26, 2020 · 1 min · 182 words

Windows 10 Revamp

My notes on wiping Windows 10, which configuration options to watch out for and a list of useful programs. The whole process of wiping, installing and provisioning with a basic set of programs can be complete in an hour with a fast Solid-State Drive and modern hardware. ...

June 26, 2020 · 3 min · 634 words

Windows Terminal - Change default profile

The new Windows Terminal requires some manual intervention to set the default profile.

February 21, 2020 · 1 min · 93 words

Useful Unixisms

Here’s a list of useful piped commands or just commands for which I need a refresher on which arguments to use. For example, using Awk to print between two known lines, or seleting a line in sed are good examples of infrequently used commands which are really useful. ...

February 17, 2020 · 2 min · 245 words

Package Management for .deb & .rpm for Debian, Ubuntu & Red Hat, CentOS, Suse

A smattering of useful commands for dealing with package managers! ...

February 11, 2020 · 3 min · 476 words

Run for every updated file

Using inotifywait to watch for file changes recursively in the current directory. I use $CHECK to ignore unwanted directories and filetypes. ...

February 11, 2020 · 1 min · 74 words

Telegraf & OhmGraphite on Windows 10

Download the Telegraf client from influxdata.com , extract the telegraf directory to a sensible place and edit telegraf.conf. ...

February 10, 2020 · 2 min · 243 words

TimescaleDB SQL in Grafana

Grafana supports SQL through MySQL/MariaDB, PostgreSQL & SQL Server. Additionally Grafana supports the PostgreSQL extension TimescaleDB, this database is the best fit of all the SQL databases for Grafana since it is built specifically for large-scale time-series datasets. ...

January 15, 2020 · 1 min · 125 words

SFTP instead of SCP

SCP suffered from weak input validation for decades until CVE-2019-6111 , the maintainers recommended using SFTP until patched versions can be deployed. I, like many others, were reminded SFTP existed! ...

April 23, 2019 · 1 min · 133 words

Git feature branch & merge

Start with your master branch git checkout master git fetch origin If your local master has been modified, you can reset its state. git reset --hard origin/master Checkout a new feature branch. git checkout -b my-feature Make changes in this branch, committing as usual. git add file.txt git commit -m "add my file.txt" You can push your branch to allow others and yourself to evaluate and commit further to it....

April 9, 2019 · 1 min · 210 words

tmux

I find myself working on the move a lot more recently and I often have to deal with poor terminal emulators, iffy connectivity and sometimes I need resume my work on another machine entirely. As such I am trying out tmux as a way of persisting my working environment between sessions, supporting multiple tabs for when my emulator lacks it (Looking at you PuTTY, Git Bash) and lastly allowing me to resume my work on another desktop. ...

April 3, 2019 · 2 min · 247 words

Log monitoring with Elasticsearch - Basic overview

Log monitoring implies using technology to avoid reading every single log message, with the benefit of catching more interesting events than if you were to read every single line! ...

October 8, 2018 · 5 min · 884 words

Robinhood NoSQL - Mixing tables

In Robinhood NoSQL I experimented with porting the Robinhood database from Elasticsearch, it being a commonly-used NoSQL database with specialisation in behaving like a Search Engine. Having ingested the ENTRIES table I now need to augment the records with filepaths from ANNEX_INFO, as I found out previously: ...

September 4, 2018 · 3 min · 435 words

Robinhood NoSQL

Robinhood provides indexing, search and management capabilities to computing centres with massive high-performnace filesystems, namely Lustre. It does this by scanning every file on the filesystem as efficiently as possible to initially populate its MySQL/MariaDB relational database, then it continuously listen for changelogs coming from Lustre to keep its state in-line with reality. ...

August 31, 2018 · 5 min · 898 words

My terminal login message

Following on from bashrc , here is a snapshot and explaination of my .motd ...

July 27, 2018 · 5 min · 916 words

My bash profile

Here’s a snapshot of my .bashrc, I put this together to normalise my environment; which is particularly useful when working across CentOS/RHEL 6/7, SLES11/12 & Debian/Ubuntu. I’ll overexplain some lines and underexplain others, depending on how interesting they are. ...

July 25, 2018 · 9 min · 1834 words

Patching Lustre 2.10 for Linux 4.14

The Lustre community supports recent point-releases of RHEL/CentOS but those patches don’t seem to come back into existing Lustre releases, since those releases don’t officially support later kernels. I installed client 2.10 thinking it had the best chance of working but encountered huge numbers of errors when compiling! ...

July 16, 2018 · 2 min · 243 words

Enjoying GNOME3

Nearly every mildly experienced GNU-like OS user has had to content with the problem of which graphical environment to install, why?, because it’s how we use OS these days, with point and click. People are often perplexed by the choice even existing as the dominent OS of the day hardly allow you to modify your environment at all let-alone replace it all together with another groups systems.

August 4, 2013 · 9 min · 1852 words

Free Software Conundrums

Clients Pidgin or XChat (IRC) These days the users of XChat seem to be migrating to a maintained fork and perhaps MSWindows-centric project named HexChat, a project spawned after development on XChat slowed to a single developer and affectively ended in 2010. Either of these clients is better than the proprietary mIRC client which is free as in free beer and may be refered to as ‘Freeware’ by some, a term which should be no means be mistaken as standing for Freedom for the user....

June 29, 2013 · 3 min · 604 words

Firefox-based browser add-on suggestions

HTTPS Everywhere [GPLv3+] Enforces the use of secure connections where known to be possible through the use of an updated white-list, this means where a website has the ability to deliver it’s bits to you over HTTPS(Secure HTTP) the add-on will tell it to. Browsing over a secure connection is intended to prevent third-parties, parties other than you and the server itself, from being capable of peaking into the connection and spying or tampering with the data....

June 1, 2013 · 2 min · 381 words