An Introduction to OpenBSD [video]
A talk on OpenBSD for beginners
Writing a RISC-V OS in Rust: System Calls
System calls are a way for unprivileged, user applications to request services from the kernel. In the RISC-V architecture, we invoke the call using the ecall instruction. This will cause the CPU to halt what it's doing, elevate privilege modes, and then jump to whatever function handler is stored in the mtvec…
Performance Testing HTTP/1.1 vs. HTTP/2 vs. HTTP/2 and Server Push for REST APIs
When building web services, a common wisdom is to try to reduce the number of HTTP requests to improve performance.
Loading CSV File at the Speed Limit of the NVMe Storage
I plan to write a series of articles to discuss some simple but not embarrassingly parallel algorithms. These will have practical usages and would most likely be on many-core CPUs or CUDA GPUs. Today’s is the first one to discuss a parallel algorithm implementation for CSV file parser.
Intel Virtualisation: How VT-X, KVM and QEMU Work Together
VT-x is name of CPU virtualisation technology by Intel. KVM is component of Linux kernel which makes use of VT-x. And QEMU is a user-space application which allows users to create virtual machines.…
Running a full desktop environment on a Kindle (2019)
Ethical Hacking and Cybersecurity Blog
Cost of a thread in C++ under Linux
Almost all our computers are made of several processing cores. Thus it can be efficient to "parallelize" expensive processing in a multicore manner. That is, instead of using a single core to do all of the work, you divide the work among multiple cores. A standard way to approach this problem is to create threads. ……
In search of 2.11BSD, as originally released
In Search of 2.11BSD, as released Almost all of the BSD releases have been well preserved. If you want to find 1BSD, or 2BSD or 4.3-TAHOE BS...
Where do argc and argv come from?
Continuing on from our tiny snake game , let's explore more into how binaries work on Unix. Let's figure out how our programs come to obtain their argc and argv parameters.
Bare-Metal Kubernetes with K3s
Learn how to configure K3s on bare-metal to run a Kubernetes cluster with just as much resilience and fault tolerance as a managed service.
Why software ends up complex
Complexity in software, whether it’s a programming languages, an API, or a user interface, is generally regarded as a vice. And yet complexity is exceptionally common, even though no one ever sets out to build something complex. For people interested in building easy to use software, understanding the causes of…
Why is Wednesday, November 17, 1858 the base time for OpenVMS?
The URL you requested is no longer available. Please contact the site owner directly if you need to access their files. They are responsible for migrating their content to another site.
Microservices Considered Harmful (2019)
A recent trend in our industry is the software architecture move from a monolith app to microservices, often with a related blog post explaining how much better everything is after. A recent blog post by neo-bank Monzo explains that they have reached the crazy amount of 1500 microservices (a ratio of ~10 microservices…
Libinput's bus factor is 1 (2019)
A few weeks back, I was at XDC and gave a talk about various current and past input stack developments (well, a subset thereof anyway). On...
Rust concurrency: the archetype of a message-passing bug
Whenever I have a chance, I extol the virtues of message-passing and event-loops in structuring concurrent workflows in Rust. However, in…
Gocker: Docker implemented in 1.3k lines of Go
They are popular and they are misunderstood. Containers have become the default way applications are packaged and run on servers, initially popularized by Docker. Now, Docker itself is misunderstoo…
How did software get so reliable without proof?
In 1996, the Turing-award-winning computer scientist C.A.R. Hoare wrote a paper with the title How Did Software Get So Reliable Without Proof? In this paper, Hoare grapples with the observation tha…
Improved vacuum in PostgreSQL 13
Vacuum is one of the sub-systems in PostgreSQL which gets improved with each release. I have checked past five releases and each has qu...
Io_uring By Example: cat, cp and a web server with io_uring
io_uring is a clever new, high-performance interface for asynchronous I/O for Linux without the drawbacks of the aio set of APIs. In this 3-part article series, we look at how to use io_uring to ge…
OpenBSD on the Microsoft Surface Go 2
I used OpenBSD on the original Surface Go back in 2018 and many things worked with the big exception of the internal Atheros WiFi. This meant I had to keep it tethered to a USB-C dock for Ethernet or use a small USB-A WiFi dongle plugged into a less-than-small USB-A-to-USB-C adapter.
Some Git internals
Here is my test file tree. There are two files and a "src" subdirectory, where another two files are stored:
The surprising impact of medium-size texts on PostgreSQL performance
Why TOAST is the best thing since sliced bread
A Software Engineer’s Guide to Cybernetics
Before ‘cyber’ was a prefix for everything internet and computers, it was how mathematicians were going to conquer the world.