Recent Content

Chapter four discusses detaching and joining threads, passing the return value to the parent, and dynamic initialization of data used concurrently by groups of threads.

In part three, we deal with synchronizing access to shared resources. As you know, bad things happen when multiple threads write to the same memory. We will implement basic mutexes using atomic operations on memory and futex syscalls for sleep management.

Typically, all the tutorials on building and debugging software for the Tiva microcontroller use Windows and clickable GUI IDEs. We can achieve the same with open source tools and eliminate all the useless fluff.

In the second chapter of the threading saga, we need to find a way to store and retrieve the pointer to the current thread by calling a function. It will be necessary for various internals and the thread-local storage. We can keep it in the Segment Register typically not used in x86_64 long mode but still taken care of during the context switch.

This is the first in a series of posts describing a threading library I built on top of Linux syscalls without Glibc. This post describes how to call syscalls, manage heap memory with custom-built malloc, and use the clone syscall to create a thread.

I wanted to learn basic electronics, but it's dead boring to do it on paper, so I decided to build a robot. It can follow the light and reacts to sound.

Paper summary: Finding a needle in Haystack: Facebook's photo storage by D. Beaver et al. It describes how they deal with the long tail of requests that are not cached by the CDNs.

It would be cool to write webapps in Common Lisp. To do that, you typically need to perform some magic on the server-side. FastCGI is a fairly convenient way to do it and it also works with Common Lisp, albeit, as always, it takes some deciphering.

This blog is built using a customized version of Coleslaw - a static Common Lisp blogware. This post shares some insight into how it is done.

Set up a virtual machine with 4KB of RAM by calling magic IOCTLs on /dev/kvm and make it run a program that writes to an IO port that is then intercepted by the hypervisor.