Blog
Thoughts on programming, systems, robotics, and everything in between, sharing what I learn and build.

Always Moving: 6D Poses for a Wearable Fisheye Rig
In the last post I calibrated eight ZED cameras bolted to a room’s walls so OptiTrack’s 3D positions could be projected onto each image. Those cameras never moved: one 6-DOF pose per camera is the whole answer. This post is the opposite case: a rig worn on a person, moving every frame. The goal is the same, but “the pose” is now a trajectory recovered at 20 Hz for the entire take, which changes which tools work. The rig is Homie, Ropedia’s four-camera egocentric setup for recording manipulation data: a person wears it, does a task with their hands, and we want every tracked object and finger marker to land on the right pixel.
The Missing Link: Calibrating a Sparse RGB Rig with OptiTrack
It has been a long time since I last wrote a blog post. Honestly, I almost stopped. In the age of LLMs, writing about technical topics feels pointless. Whatever you want to know, an AI will explain it more clearly and faster than any blog. So why bother? What changed my mind was running into a problem where AI could tell me the theory perfectly well but couldn’t tell me what actually went wrong when I tried it. That gap only gets filled by doing it: wiring two physical sensor systems together, watching them disagree, and working out why. That kind of experience doesn’t live in training data yet. Physical AI is full of it.
Setup 802.1X Authentication on Arch Linux
Over the past few days, I attempted to set up 802.1X authentication on Arch Linux, a wired identity authentication protocol widely used in enterprise environments and well-supported on Windows and Ubuntu. However, when it came to Arch Linux, a series of strange issues emerged. To make matters more interesting, the machine in question has two onboard NICs, a Realtek r8169 and an Intel e1000e, and each ended up causing a different kind of trouble: the former during authentication, the latter during DHCP. This post will detail the problems I encountered and the debugging process.
Migrating from WordPress to Hugo
I recently switched from WordPress to Hugo. This post outlines the reasons behind my migration and provides a step-by-step guide on how to make the transition. Rethinking Why Use WordPress I began using WordPress in 2009 when static site generators were not prevalent, and WordPress was the go-to CMS for nearly everyone. However, since my blog had infrequent updates but high readership, I started reconsidering the use of WordPress. Five years ago, I decided to convert the WordPress site into static HTML and uploaded it to a CDN to accelerate access speed for users in mainland China.
Enable Microsoft Remote Desktop (RDP) on Linux
Gnome 42 has a fantastic new feature that allows Linux users to share their desktops with Microsoft’s Remote Desktop Protocol remotely, namely GNOME remote desktop. In this tutorial, we’ll show you how you can use this great new feature. Without this feature, an alternative solution is xrdp. However, xrdp cannot provide a consistent desktop environment as used in current Linux. Enable Automatic Login and Disable Screen Lock For the remote desktop to work on GNOME, we have to enable automatic login and disable automatic screen lock. Otherwise, it is unable to connect to the Linux PC remotely from Windows 10/11 using the Remote Desktop Connection app.
Arch Linux ARM on an M1 Mac with VMware Fusion
Arch Linux ARM is a simple and lightweight Linux distribution that is actually the official port of the Arch Linux operating system. It’s built especially for processors that support ARM architecture. With its use, the users can have full control of the system and shape their system according to their needs. In this tutorial, we provide the detailed procedure to install Arch Linux ARM on a Macbook Pro (with Apple M1 Pro) running VMware Fusion 13.0.
Build an iOS App from Scratch with SwiftUI
Background On Valentine’s day 2021 I put together a small static website, Infinite Love, to hold a handful of pictures. Because it is static, adding a new photo means editing the source and redeploying, not something you want to do from your phone. So I set out to wrap it in an iOS app with a proper “new post” button. I had done plenty of web development, but this was my first time writing anything for iOS. What follows is the walkthrough I wish I’d had: taking an empty Xcode project all the way to an app running on a real iPhone.
Use Internet Explorer in Windows 11
Background With Windows 11, Microsoft has removed several outdated apps and features, including the long-hated Internet Explorer. However, some proprietary apps and legacy sites still require Internet Explorer functionality to run. Several posts suggest using the IE mode in Microsoft Edge. However, it does not work for some websites: a few government service portals, for instance, still fail to load correctly in Edge’s IE mode. Solution Step 1. Create a VB script, named ie.vbs with the following content.