Community vs Ecosystem

One of the most powerful and important things about Open Source software is that it brings people together to work on a common goal. This is especially true if the project is setup as a Bazaar instead of a Cathedral.

Usually the groups of people need a framework to communicate to work together in. Initially these were called “communities”, but this isn’t working out so well in some cases, so in this blog post I’ll talk about why an “ecosystem” is better.

Continue reading Community vs Ecosystem

Fun With Apple Multi-Arch Binaries

Apple macOS has for many years supported the ability to have binaries for multiple platforms in one executable. Upon execution the correct binary data is loaded into RAM. This has multiple names such as “Universal”, “fat binary” or “Multi-Architecture Binaries”. These were really useful when Apple was transition from PowerPC to Intel CPUs, a single binary would execute on both platforms. It could be useful in the future if, as many predict, Apple move from Intel to ARM CPUs.

In this post I’ll talk about the m4 script I wrote at HP to use this feature for combined 32bit and 64bit Intel binaries (back when that was relevant).

Continue reading Fun With Apple Multi-Arch Binaries

How I Interview Remote Engineering Candidates

Several of my friends in tech are having a hard time in their career due to everything going on in the world right now. They are being interviewed for new roles and I still see reports of bad tech interviews happening. I thought I would write up how I do interviews for the remote teams I build and maybe give some advice along the way.

Continue reading How I Interview Remote Engineering Candidates

Event Loops and NCurses

Yesterday I wrote a blog post talking about Event Loops, this was a pre-cursor to discussing where I am using them in an application I’m currently developing which uses NCurses at its core.

Unfortunately the application is an R&D project and is not public yet (still very early in development), but it is written in C, has a TUI front end and handles many windows and network connections simultaneously so I am using libuv heavily underneath. For this post I’ll be discussing the integration between libuv and NCurses.

Continue reading Event Loops and NCurses

Event Loop Programming: A Different Way of Thinking

The concept of event loops is not new in programming, but I think it is still a really important technique to learn. They allow a program to send a request for something and carry on doing things rather than waiting on things to happen. It is a great way of multi-tasking in a single thread but there are some gotchas to be aware of.

In this blog post I’ll give a short intro to event loops and how to get the most out of them.

Continue reading Event Loop Programming: A Different Way of Thinking

Socket SO_REUSEPORT and Kernel Implementations

Way back when I was at NGINX I worked with several people on integrating a kernel patch for SO_REUSEPORT in Linux to work with NGINX for something I termed “socket sharding“. In hindsight I should have maybe called it “socket load balancing” but the term “sharding” has stuck with that option across the industry now. Whilst this option is a standard option in many *nix kernels it behaves very differently in them. So I thought I would note some details down in this blog post

Continue reading Socket SO_REUSEPORT and Kernel Implementations

Sanitizers, The Alternative To Valgrind

Valgrind is an incredibly powerful tool which helps find leaks, buffer overflows and many other things. Whilst being extremely powerful it can also be very slow. As an alternative there are little known tools that are available for Clang and GCC which can fulfil similar functions for your C / C++ applications but with much higher performance.

I’ve had several people ask me about the sanitizers recently and how to use them, so I’ll cover some basics here.

Continue reading Sanitizers, The Alternative To Valgrind

My Journey Learning The Go Programming Language

The key to learning anything new is finding a way to engage with the material. Some people learn by reading and some learn by doing. I typically fall into the latter half and I’ve typically been more successful in mentoring people who learn in a more hands-on way.

A recent Tweet I made led to a chat which somehow led to a famous Open Source developer getting me kickstarted into the world of developing in the Go Programming Language. This post tracks some of my journey for the last week (my first week of learning Go).

Continue reading My Journey Learning The Go Programming Language