2025

On a "silent shape bug": A bug goes unnoticed due to broadcasting
  26 Aug 2025

A numerical bug from broadcasting in my algorithm went unnoticed for weeks caused by a wrong call of squeeze(). Instead of an element-wise addition, the operation was silently broadcasted, producing an incorrect but programmatically valid result. The bug was only discovered when an edge case with a zero-valued tensor made the output obviously incorrect... Luckily, I caught it before it is too later.

Read More →
Set up a centralized mail relay with Postfix
  14 Aug 2025

A guide to set up a centralized mail relay using Postfix and then relay all emails from other servers through it.

Read More →
Hosting immich in LXC with iGPU passthrough
  10 Apr 2025

A guide for directly hosting immich inside an LXC. In this way, you do not have to run immich inside a docker container which is in turn inside a VM or privileged LXC. As a bonus point, you can pass through iGPU to multiple LXCs such that you can enjoy accelerations for some ML and transcoding tasks within LXC. Additionally, I wrote a GitHub workflow routinely (or manually) checking new immich release and building the new server with GitHub's runner, which can save lots of efforts on your side.

Read More →

2024

Mounting an NFS Drive at Boot in WSL
  23 Sep 2024

WSL fails to mount a NFS drive defined in /etc/fstab. Here is an easy fix.

Read More →
Fix a 404 error when a folder without index.html is linked on GitHub Pages
  22 Sep 2024

GitHub does not serve root URLs (ending with a "/") unless there is an "index.htm". Good to know!

Read More →
Distributed asynchronous parallelized hyperparameter optimization with Ray
  18 Sep 2024

Hyperparameter optimization is crucial for obtaining an accurate neural network. Typically, this is done through a Bayesian optimization by running a set of trials sequentially. With Ray and Ax, however, we can distribute the optimization across all allocated resources. This approach significantly reduces the wall time required for completing these tasks.

Read More →
Copy location metadata with exiftool
  17 Sep 2024

A shell function to copy the GPS location from one media file to others

Read More →
Export each layer as a file in Photoshop with a script
  14 Sep 2024

A Photoshop script to export each layer as a file using the the layer name as the filename.

Read More →
3D print a QR code for this site for ACS Spring 2024
  13 Mar 2024

I will be attending the ACS Spring meeting in New Orleans next week. I thought it might be useful to make a QR code for this site so that I could use it while networking. Instead of print a 2D image, I decided to make it 3D.

Read More →
Predicting "protein-protein interactions" with neural networks
  08 Mar 2024

Use a convolutional neural network to predict if a pairs of proteins interact with each other, part 3.

Read More →
Predicting "protein-protein interactions" with neural networks
  06 Mar 2024

Use a convolutional neural network to predict if a pairs of proteins interact with each other, part 2.

Read More →
Monitor Nextcloud server with Prometheus and Grafana
  29 Feb 2024

A tutorial to export stats from Nextcloud's server to Prometheus and Grafana

Read More →
Build GitHub Pages locally with Jekyll on Alpine
  28 Feb 2024

The workflow is the largely the same with what is on WSL, but with some Alpine specific things and LXC settings.

Read More →
Host Grafana and Prometheus inside a Alpine LXC
  28 Feb 2024

A tutorial to install and run Grafana and Prometheus on Alpine

Read More →
Build GitHub Pages locally with Jekyll
  26 Feb 2024

When you are working with Github Pages, it is such a pain to test it, especially if you are working on something like this Jekyll-based site. Without setting up a local environment, to view any change, you have to git commit and push, then wait until GitHub to have your site updated. I decided to follow the official tutorial to do it myself.

Read More →
Predicting "protein-protein interactions" with neural networks
  25 Feb 2024

Use a convolutional neural network to predict if a pairs of proteins interact with each other, part 1.

Read More →
SSL certificate and LAN domain resolution with AdGuard Home and Nginx Proxy Manager
  24 Feb 2024

A tutorial to use AdGuard Home and Nginx Proxy Manager to certify self-hosted services and access them without the need of port numbers

Read More →

2023

Show PVE host system load on Homepage LXC
  26 May 2023

A tutorial to resize the system partition of a virtual machine

Read More →

2022

Host Homepage inside a Alpine LXC
  05 Dec 2022

A tutorial to set up the Homepage project for Alpine Linux from scratch

Read More →
(Physically) install my OctoPrint server
  19 Mar 2022

A quick and dirty way to mount the OctoPrint printer under the desk.

Read More →
Enlarge the system partition of my Debian VM
  10 Mar 2022

A tutorial to resize the system partition of a virtual machine

Read More →

2021

Fixing Synology DS2415+
  24 Apr 2021

There is a hardware bug in certain Intel Atom CPUs. These CPUs will degrade over time and eventually the computer will not boot up due to the clock issue of the CPU. Funnily, fixing the problem only need one resistor to be soldered on the motherboard. The only thing is that the CPU will die again and by that time, there is no way to fix it.

Read More →