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.| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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 micro_lambda repository.| James McMurray's blog
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), along with many other project ideas I've had but have never had time to implement (and a few which ...| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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. Especially with the customisation options provided by collections of preset files (such as arch-i3-usb).| James McMurray's blog
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). We'll consider the motivation and background to creating vopono, the upsides and downsides of writing it ...| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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).| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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.| James McMurray's blog
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 certain assumptions), and this allows them to be used as an instrumental variable.| James McMurray's blog
A technical blog about Rust, Linux and other topics.| jamesmcm.github.io
A technical blog about Rust, Linux and other topics.| jamesmcm.github.io
A technical blog about Rust, Linux and other topics.| jamesmcm.github.io