James McMurray's Blog

Rust, Linux and other curiosities

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).

We'll consider the motivation and background to creating vopono, the upsides and downsides of writing it in Rust (and existing issues), and some points about starting new side projects in general. I hope this helps new Rust programmers starting their own first projects, or for other programmers to consider using Rust.


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.





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 certain assumptions), and this allows them to be used as an instrumental variable.


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.