RSSAmplifier

Blog

James McMurray's blog

A technical blog about Rust, Linux and other topics.

jamesmcm.github.ioRSS feed ↗20 posts

Latest posts

Using the Internet without IPv4 connectivity

A few days ago my ISP broke the IPv4 connectivity from my router after a power cut. Fortunately IPv6 connectivity still worked fine, but only a small fraction of websites were accessible. In this post I'll cover how Linux, WireGuard, and Hetzner came to the rescue - keeping the whole internet usable with only an IPv6 connection.

I made an AI Agent take an old Data Engineering test - it scored 92%!

In this post we will use agentic AI (with Cursor and Claude 4 Sonnet) with two MCP servers to complete an old Data Engineering take-home assignment. It's time to put Claude to the test! The Docker environment and notebook used is available in my dataeng_assessment_mcp repo .

Building a Wifi-controlled car with Rust and ESP32

In this post we will create a basic Wifi-controlled car with an ESP32 development board and ESP32-CAM camera module, and all of the code written in Rust. All of the code for this example is available on Github in my esp32_wifi_tank repo .

Beginner Rust ESP32 development - Snake

In this post we will create a basic ESP32 project using Rust and espup. We will write a Snake game to run on an ESP32 development board with a connected OLED display and controlled with a joystick. The code for this example is available on Github in my snake_rust_esp32 repo .

My First Clippy Lint

Recently I wrote my first Clippy lint. It was much easier to implement and test than I had expected. In this post I'll review the process of creating or contributing to a Clippy lint, the implementation itself and how this reflects Rust's values of empowerment.

Writing a simple AWS Lambda Custom Runtime in Rust

I was recently reading more about the lambda_runtime crate and came across this issue where it is mentioned that the #[lambda] procedural macro can be misleading and cause problems if used naively. In this post we will implement our own simple custom runtime for AWS Lambda in Rust, and understand the reasons behind this issue. The code used in this blog post is available on Github in my…

What should I program?

Doing projects is often the best way to get more programming experience and learn about new concepts and problem domains. However, a common issue is finding feasible projects of a reasonable scope that can produce something useful in a few weekends. In this post I will list some classic project ideas for beginner and intermediate programmers (most of which should be achievable in 2-3 weekends),…

My Rust 2021 roadmap: crates, concision, and community

The Rust core team recently released a call for blog posts as part of the 2021 roadmap for Rust. In this post I will detail my own experience with Rust, and areas I'd like to see improved during 2021.

How to fix high CPU usage by the CacheDelete daemon in OS X Catalina

I recently had an ongoing issue with the deleted CacheDelete daemon using huge amounts of CPU time almost constantly. This post covers how I fixed it and a few tips for OS X recovery and performance improvements.

Why governments should adopt and invest in FOSS

This post covers why I believe local and national governments should adopt and invest in Free and Open Source Software (FOSS). This has been in the news recently due to the city of Munich renewing it's LiMux Linux distribution thanks to an agreement between the local SDP and Green politicians, and the efforts of the Public Money, Public Code campaign.

Using ALMA for persistent LiveUSB installations of Arch Linux

ALMA (available as alma-git on the AUR ) is a tool for creating persistent LiveUSB installations of Arch Linux. With one command you can generate a customised installation on a USB stick (or any other removable media) including the packages and config files you want, with full persistence. This is very useful for disk recovery and system maintenance, and a great tool for all Linux users.…

Retrospective of my first useful Rust project

This post is a retrospective of my first "useful" Rust project. vopono is a Linux program to launch applications in temporary network namespaces (managed by vopono), in order to run specific applications through VPN connections, without affecting the rest of your system. vopono is available on Github (and in the AUR on Arch Linux ) and licensed under the GPLv3 license ( see reasoning here ).…

Serverless Data Ingestion with Rust and AWS SES

In this post we will set up a simple, serverless data ingestion pipeline using Rust, AWS Lambda and AWS SES with Workmail. We will handle multiple types of AWS events with one Lambda function, parse received emails with the mailparse crate, and send email with SES and the lettre crate. The complete code for this example is available on GitHub here .

An introduction to Data Oriented Design with Rust

In the post we will investigate the main concepts of Data-oriented Design using Rust. The source code for this example is available on Github .

A practical introduction to async programming in Rust

In this post we will explore a brief example of asynchronous programming in Rust with the Tokio runtime, demonstrating different execution scenarios. This post is aimed at beginners to asynchronous programming. The source code for this example is available on Github . A branch using the async-std runtime is also available (contributed by @BartMassey ).

Data Ingestion with Rust and AWS Lambda

In this post we will set up a very simple data ingestion process with Rust and AWS Lambda. The complete code for this example is available on GitHub here .

The Expectation Maximisation (EM) Algorithm

In this post I will briefly introduce the EM algorithm with two simple examples. The EM algorithm uses an iterative approach to find the Maximum Likelihood estimate for a model with latent variables. Note I will not provide a thorough coverage of the mathematics but rather focus on two examples of Gaussian Mixture Models.

Resources to learn Spanish

In this post I list some resources which have helped me to learn Spanish, I hope that they will help you too! All of the listed resources are (mostly) free, except News In Slow Spanish (and the Latino version), and clearly the textbooks, TV series and films.

Introduction to Mendelian Randomization

Mendelian Randomization is an approach to test for a causal effect from observational data in the presence of certain confounding factors. It uses the measured variation of genes (of known function) to bound the causal effect of a modifiable exposure (environment) on a phenotype (disease). The fundamental idea is that the genotypes are randomly assigned (due to recombination in meiosis under…

First Post

I've started this blog to save resources which have helped me in learning languages, concepts in statistics, and anything else which I think might help others too.