Hi there 😼

Welcome to my blog

Hosting Blog powered by Obsidian and Hugo

Since I started using Obsidian as my knowledge management and writing tool, it is a pain for me to manage my posts for my blog. I used to write it in the Obsidian and copied it over to the repo of my blog. If I make changes, I need to update it twice which is very tedious and error-prone. So I started to find a solution allowing me to write and store my posts at one place and continue to use Hugo to build my blog. ...

February 1, 2025 · 3 min · 627 words · Me

Expose Containerized Services With SSL via Tailscale

Normally we don’t have to use SSL when we connect to the services via Tailscale as all connections are end-to-end encrypted and only allowed users could access your network. But there are always exceptions like you want put your tailscale domain behind a public domain or you have to use SSL for internal connections. For example, horader on ios requires the SSL and it won’t work when we host hoarder using docker even we enable HTTPS on tailscale DNS and add cert to the NAS. When I access hoarder via the tailscale of the NAS, it always returns insecure connection. I tried created the SSL cert using tailscale cert and make it the default cert of my Synology, it still fails as tailscale cert only cover the port 443 so the services running at other ports are not covered. ...

January 27, 2025 · 3 min · 596 words · Me

Remote Accessing NAS using Tailscale

Remote Accessing NAS using Tailscale Simply put, Tailscale is a private VPN built on the WireGuard protocol, designed to support a Zero Trust architecture for managing devices within a subnet. As a mesh network, Tailscale enhances connectivity when accessing NAS services remotely. Compared to traditional VPNs and firewalls, WireGuard and Zero Trust offer significantly better security since every device requires authentication to communicate with others. This granular access control minimizes risk—even if an attacker compromises one device, they won’t automatically gain access to the entire private network. Unlike conventional firewalls, which often have a hardened exterior but a vulnerable core, Tailscale ensures both outer and inner security. ...

January 25, 2025 · 3 min · 464 words · Me

Life Wiki Selfhosted on Your NAS

Introduction I used Notion for a couple of years and found it to be one of the best tools for note-taking and building a personal wiki. Why did I stop using it? It wasn’t about the cost—Notion’s freemium plan is perfectly sufficient for personal use. Instead, there were two main issues that drove me away. First, typing math equations in Notion is cumbersome because you have to use a dedicated “Block” for them. Second, it’s difficult to export or migrate your data to other platforms, which, while not entirely Notion’s fault, still concerns me. Most importantly, I realized I should make better use of my Synology NAS. That’s why I decided to explore open-source, self-hosted alternatives. ...

January 10, 2025 · 7 min · 1338 words · Me

Building a Single Page Application (SPA) with Quarkus and Quinoa

Quarkus is an exciting framework for building modern Java applications, and Quinoa takes it up a notch by streamlining Single Page Application (SPA) development. Together, they enable a seamless workflow for both frontend and backend developers. This guide walks through setting up a Quarkus-based SPA using React as an example, although the process works just as well for other frameworks. Why Quinoa Matters Quinoa elegantly integrates frontend development into Quarkus projects. Here’s why you should care: ...

December 21, 2024 · 3 min · 479 words · Me

How to Sideload and Unlock Premium Apps for Free

Google, like many large tech companies, has tightened its grip on profits, making it increasingly difficult for customers to find affordable workarounds. The days of using a VPN to pay for discounted YouTube or Spotify Premium are mostly over. Without a locally issued card, paying for premium services remotely is nearly impossible, with Kazakhstan being the sole exception. While virtual cards like Wise and Revolut can bypass some checks, the process is cumbersome and carries its own risks. ...

December 21, 2024 · 2 min · 319 words · Me

How I Upgraded My Mac Mini Storage with an External SSD and Solved the Home Directory Issue

A couple of months ago, I had the brilliant idea to upgrade my Mac mini M2 by installing MacOS on an external M.2 SSD. For under 200 bucks, I went from a measly 250GB to a whopping 2TB. I was on cloud nine, reveling in my newfound digital real estate, until the other weekend when the system decided to crash my party by refusing to download upgrades due to a lack of space. Wait, what? ...

July 9, 2024 · 2 min · 390 words · Me

How to Build an Amazing and Productive Terminal

Everyone wants a cool terminal and WezTerm is the coolest one in my opinion. It is easy to manage and we can setup a new environment with minutes in association with GNS stow - a symlink manager. WezTerm is easy to configure since it is using lua and very friendly to read and learn. I am dumb at iTerm2 and Tmux, but it only took me 30 mins to start tweaking the config. Everyone wants a cool terminal, and WezTerm is the coolest one in my opinion. It’s easy to manage and we can set up a new environment within minutes using GNU Stow - a symlink manager. ...

July 9, 2024 · 5 min · 938 words · Me

Building a WebApp using React and Quarkus

My first website was an adventure straight out of 2014, built with Dreamweaver and some basic HTML and CSS. Picture a static site, lovingly crafted to display the research and papers from our lab. The end product was, well, let’s just say not exactly internet-breaking. But hey, it was my first foray into the wild world of web development! Fast forward 10 years, after diving deep into data science, machine learning, and platform engineering, I realized something horrifying: I was still a web development noob. Cue the dramatic music. This simply would not do! So, armed with determination and copious amounts of coffee, I embarked on a quest to master web app development and fill in the gaping holes in my skill set. ...

July 5, 2024 · 4 min · 652 words · Me

Coding Pattern: Kadane's Algo

Imagine you’re walking along a path that has treasure chests and traps. Some chests have gold coins, and some traps take away coins. You want to find the part of the path where you can get the most coins. The key idea: It is a dynamic programming algorithm for finding the maximum contiguous sum subarray in a given array. It is a simple and efficient algorithm that works by maintaining two variables: ...

November 30, 2023 · 3 min · 476 words · Me