Ayke van Laëthem

How the TinyGo playground simulates hardware

The TinyGo playground simulates real hardware, including an e-paper display. How can it do such things? This post explains a bit about how the playground works to make this possible.

LLVM from a Go perspective

A high-level overview of LLVM IR, showing how two simple Go functions can be translated to IR.

Goroutines in TinyGo

TinyGo uses LLVM coroutines to implement goroutines. This post explains what coroutines are and how they're used to implement goroutines.

Interfaces in TinyGo

How TinyGo implements Go interfaces in a radically different way, avoiding most memory allocations and reducing code size.

Defer is complicated

The defer keyword in Go does much more than you might think, leading to performance issues in some cases. Why is this?

Code size optimization for microcontrollers

How to optimize code size for microcontrollers, including compiler options and lots of coding habits that produce smaller and often more efficient code.

Internals of the MBR in Nordic SoftDevices

Nordic BLE chips contain a proprietary SoftDevice implementing the BLE stack. In this post, I will explain how the MBR region works and how to write your own.

Using PvGrub2 on Debian

Using pvgrub2 on Debian is very easy, and there is a little bit of documentation on the 'net, but not enough to cover all needs. I had to do some workarounds to enable pvgrub2 with btrfs.

Enforced STARTTLS for SMTP

While STARTTLS has traditionally been very sensitive to downgrade attacks, there are now two protocols to fix this: DANE and MTA-STS. I will take a look at how they work and how they can be implemented on your own domain.

Understanding modern mail authentication systems: SPF, DKIM and DMARC

Explains how modern email authentication systems work together to protect the "from" header in email. This makes phishing detectable and spamming more difficult.