One of the things I’ve been experimenting with when building out my smart home is multi-room audio (the ability to play perfectly synchronized audio from multiple devices). Thankfully there is already a mature solution for routing and synchronizing audio: Snapcast . The only tricky part is getting audio from various sources and feeding it into the Snapcast server. In this article, we will take a…
Note: if you haven’t already read part 1 of the series, I encourage you to quickly read through it before diving into this one. We will be expanding on the example from the article so it helps if you’re at least a little bit familiar with it.
Today, I’m going to be starting a new series exploring the portable executable format. I’ve been working a lot with the format lately, so I decided to document my journey in a series of articles. The series will begin with a fairly broad overview of the format and then subsequent articles will begin a deeper dive into the more complex topics — like imports, exports, debug data, exception handling,…
It has (much to my regret) been several years since I last published something on my blog. This article will hopefully be the first of many more to come in the near future as I find more time to return to writing. I’m writing this article both to act as a reference to others who may be interested in retrocomputing and to serve as a set of notes for myself the next time I need to get a Windows VM…
Qt is an excellent toolkit for developing cross-platform applications in C++ and CMake/CPack is an excellent build system for C++ applications. The two work very well together and I have used them in a number of projects. Deploying the projects on Windows with CPack, however, requires some extra effort. This article will take a look at my approach to this problem.
No, that’s not a typo or a joke. I have created a Docker container containing a single Unix executable with no dependencies that occupies less than 1 KB of space on disk. There are no other files included in the container — not even libc.
Docker is a great way to run web applications and services in a container. With Docker, each container is isolated from the host which encourages composability and greatly improves security. In this article, I will describe how I prepared a number of services to run in Docker on one of my servers.
With CGO_ENABLED=0 set, the Go compiler produces binaries with no runtime dependencies, not even libc. This greatly simplifies deploying the application in Docker since no base image is required. However, there are a few caveats and pitfalls that I would like to address in this article.
In an attempt to better understand the effect of temperature and humidity in weather forecasting, I decided to build a small thermometer with an Arduino and a temperature sensor. In a future article, I will explore some of the data that I capture and the software that analyzes the data. This article will focus on the thermometer.
Yes, you read that right. In this article, I am going to detail the process of getting Debian 0.91 up and running in qemu on an Ubuntu 16.04 host. The adventure promises to be a fun one since Debian 0.91 was released in… 1994.
I have always been a big fan of the Nexus product line. I first wrote about the Nexus 5 back in January of 2014 . It was a truly excellent phone. When the Nexus 6 was released, I grabbed one of those as well and thoroughly enjoyed the increased screen size and turbo charge. That would prove to be the last Nexus phone I purchased.
One of the most confusing aspects of packaging applications on Linux continues to be icon themes. Despite the simplicity of the original concept, getting your application’s icon to display correctly in a broad range of desktop environments continues to challenge even the best of programmers.
Brotli is a new compression algorithm being introduced by Google. It’s gaining traction very quickly - there’s an IETF draft proposal for the data format. There are even plans to include Brotli as an accepted Content-Encoding in Firefox 44:
One of the latest projects I’ve been working on is a simple SMTP client written in Go. I’ve really enjoyed developing applications in Go since it provides concurrency primitives out-of-the-box. In this article, I’m going to describe a technique for sending any number of values on a channel without having the send block.
In a previous article , I took a look at setting up a BuildBot slave on Windows. Today, I’m going to describe the process of creating a BuildBot slave for a Raspberry Pi 2 . The easiest way to do this is by setting up the BuildBot slave as a Docker container.
I recently began setting up a small build farm for a Qt library I was working on. Due to the nature of the library, it was important that the test suite run on as many different platforms and compilers as possible. After some research, I came to the conclusion that BuildBot was the ideal tool for the job.
Phew - it’s been a number of months since my last article. I have been extremely busy with all manner of different projects, including a new Firefox add-on named REST Easy . I apologize for not writing sooner, but you would be surprised at how easy it is to get neck-deep in code for weeks on end. (Then again, you might not be surprised.)
Qt is an excellent framework for developing cross-platform console and GUI applications. I have used the toolkit for developing a number of applications which are listed here on my website. I recently found myself faced with the task of developing a TCP server application which communicated with a set of clients in a secure fashion. Rather than reinventing the wheel, I decided to make use of Qt’s…
One of the exciting new features scheduled to be included in Ubuntu 12.10 (Quantal Quetzal) is the introduction of Web Apps. These consist of a UserScript that bridges the gap between the JavaScript code on the page and the user’s desktop. For example, a script written for Gmail might display a desktop notification when a new message arrives in the user’s inbox. Or perhaps a script written for…