Kin Hong NGhttp://kincodes.com/Recent content on Kin Hong NGHugoen-UsMon, 23 Feb 2026 00:00:00 +0000Kinho's Homelab Series - GitOps, Secrets, and First Applicationshttp://kincodes.com/posts/kinhos-homelab-series-gitops-secrets-and-first-applications/Mon, 23 Feb 2026 00:00:00 +0000http://kincodes.com/posts/kinhos-homelab-series-gitops-secrets-and-first-applications/<p>Welcome to another entry in <strong>Kinho&rsquo;s Homelab Series</strong>! In the last <a href="proxy.php?url=http://kincodes.com/posts/kinhos-homelab-series-orchestration-platform-and-networking-k3s--cilium/">entry</a>, we set up our orchestration platform with K3s and solidified our network stack with Cilium. However, at this point we have built a whole Kubernetes cluster whose only job is to exist. It has no apps, no workloads, just vibes.</p> <p>On top of that, Helm charts such as the one for Cilium were installed by hand, which means there&rsquo;s no structure, no repeatability, and no easy way to rebuild. Before we can run real workloads, we need a proper, automated way to manage how all of our Kubernetes objects are installed and configured. It&rsquo;s finally time to adopt the <strong>GitOps workflow</strong>!</p>Building a CI Pipeline for Container Images with Dagger and GitHub Actionshttp://kincodes.com/posts/building-a-ci-pipeline-for-container-images-with-dagger-and-github-actions/Sun, 08 Feb 2026 00:00:00 +0000http://kincodes.com/posts/building-a-ci-pipeline-for-container-images-with-dagger-and-github-actions/<p>Recently, I&rsquo;ve been hacking away in my <a href="proxy.php?url=https://kincodes.com/tags/homelab-series/"target="_blank" class="inline-flex items-center gap-1" >homelab<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>, and when it came time to deploy my blog, one thing became essential: <strong>having a reliable pipeline for building, scanning, and publishing container images</strong>. Whether you&rsquo;re developing custom applications from scratch or creating hardened versions of existing images to strengthen their security posture, you need a robust build process you can trust.</p>Kinho's Homelab Series - Orchestration Platform and Networking (K3s + Cilium)http://kincodes.com/posts/kinhos-homelab-series-orchestration-platform-and-networking-k3s--cilium/Mon, 12 Jan 2026 00:00:00 +0000http://kincodes.com/posts/kinhos-homelab-series-orchestration-platform-and-networking-k3s--cilium/<p>Welcome to another entry in the <strong>Kinho&rsquo;s Homelab Series</strong>. We&rsquo;re picking up where we left off in the previous entry <a href="proxy.php?url=http://kincodes.com/posts/kinhos-homelab-series-securing-my-network-with-tailscale/"><strong>Securing my Network with Tailscale</strong></a>, and today we continue by installing the Greek engineering helmsman ⎈, the almighty <a href="proxy.php?url=https://kubernetes.io/"target="_blank" class="inline-flex items-center gap-1" ><strong>Kubernetes</strong><svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>. This will serve as our main orchestration platform to run all the applications we want in our lab throughout the series.</p>Byte Size Series - What is CIDR?http://kincodes.com/posts/byte-size-series-what-is-cidr/Wed, 07 Jan 2026 00:00:00 +0000http://kincodes.com/posts/byte-size-series-what-is-cidr/<p>If you are perusing through some DevOps articles or documentation, chances are you might have encountered the acronym <strong>CIDR</strong>, but what the heck is it? and why is it a fundamental concept in modern-day networking?</p> <h2 id="we-had-abcs">We had ABCs</h2> <p>An IP address consists of a <strong>network portion</strong> and a <strong>host portion</strong>. Before CIDR existed, IP address allocation was based on a classful system<sup id="fnref:1"><a href="proxy.php?url=#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> such as <strong>Class A (8 network prefix bits)</strong>, <strong>Class B (16 network prefix bits)</strong>, and <strong>Class C (24 network prefix bits)</strong>.</p>Kinho's Homelab Series - Securing my Network with Tailscalehttp://kincodes.com/posts/kinhos-homelab-series-securing-my-network-with-tailscale/Mon, 05 Jan 2026 00:00:00 +0000http://kincodes.com/posts/kinhos-homelab-series-securing-my-network-with-tailscale/<p>This year I want to really up my <strong>DevOps</strong>/<strong>Platform Engineering</strong> skills to the next level, as it is an area I am very interested in. After having such a great experience diving into <strong>Kubernetes</strong> for the <a href="proxy.php?url=https://nationalsciencedatafabric.org/nsdf-intersect"target="_blank" class="inline-flex items-center gap-1" >NSDF Intersect<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a> project, I thought that it is finally time go full throttle into building my own <strong>mini homelab playground</strong>.</p>Byte Size Series - Limiting CPU and Memory Usage with cgroupshttp://kincodes.com/posts/byte-size-series-limiting-cpu-and-memory-usage-with-cgroups/Mon, 03 Nov 2025 00:00:00 +0000http://kincodes.com/posts/byte-size-series-limiting-cpu-and-memory-usage-with-cgroups/<p>The rise of containers and their adoption across the industry with technologies like <strong>Docker and Kubernetes</strong> has been remarkable, and with the advent of AI, these technologies are poised to become fundamental not only for training and inference of AI models but also for hosting AI services themselves. Beneath these abstractions lies the fundamental idea that allows us to start a Linux process while <strong>limiting its CPU and memory resources</strong> using <a href="proxy.php?url=https://man7.org/linux/man-pages/man7/cgroups.7.html"target="_blank" class="inline-flex items-center gap-1" ><strong>Control Groups</strong><svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>, also know as <strong>cgroups</strong>. In this entry of the byte size series, we&rsquo;ll explore how we can use <a href="proxy.php?url=https://systemd.io/"target="_blank" class="inline-flex items-center gap-1" >systemd<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>, one of the most used init systems in many Linux distros, to configure and add a process to a cgroup.</p>Automating my RSS Feed with Daggerhttp://kincodes.com/posts/automating-my-rss-feed-with-dagger/Wed, 22 Oct 2025 00:00:00 +0000http://kincodes.com/posts/automating-my-rss-feed-with-dagger/<p>After finally updating my blog to be a standalone site, I decided to start writing more about the different concepts I learn and the projects I build along the way, in order to form a more concrete <strong>note-making system</strong><sup id="fnref:1"><a href="proxy.php?url=#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. A while back, I had set up a GitHub Action to scrape both <a href="proxy.php?url=https://dev.to/"target="_blank" class="inline-flex items-center gap-1" >dev.to<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a> and <a href="proxy.php?url=https://medium.com/"target="_blank" class="inline-flex items-center gap-1" >medium.com<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>, the platforms where I previously hosted the few articles I had written back in the day.</p>Create Beautiful Documentation with Mkdocs Materialhttp://kincodes.com/posts/create-beautiful-documentation-with-mkdocs-material/Mon, 13 Oct 2025 00:00:00 +0000http://kincodes.com/posts/create-beautiful-documentation-with-mkdocs-material/<p>Documentation is one of the most important pieces in any software project. Without documentation, it becomes harder to onboard new developers or gather community feedback, since there is no clear understanding of what the project is about or how to use it. On the other hand, documentation might exist, but it can sometimes be a nightmare to find the actual information due to a lack of search functionality, and aesthetically, it might just not be pleasing to look at.</p>A 100 Days in Open Source: Key Lessons That Will Help You Get Started 🚀http://kincodes.com/posts/a-100-days-in-open-source-key-lessons-that-will-help-you-get-started/Mon, 20 Nov 2023 00:00:00 +0000http://kincodes.com/posts/a-100-days-in-open-source-key-lessons-that-will-help-you-get-started/<p>October 31st marked the end of the 100 days of open source software (OSS) challenge by <a href="proxy.php?url=https://opensauced.pizza"target="_blank" class="inline-flex items-center gap-1" >Open Sauced<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>. This challenge aimed to unite newcomers, dedicated contributors, and maintainers within OSS projects to foster active involvement, learn new skills, and enhance community interaction by engaging in OSS for 100 days. As a participant of this challenge, I will share three significant lessons I learned from this experience to help newcomers in getting started with OSS and making meaningful contributions.</p>You Might Be Overlooking the PUT Method in your REST APIhttp://kincodes.com/posts/you-might-be-overlooking-the-put-method-in-your-rest-api/Tue, 08 Aug 2023 00:00:00 +0000http://kincodes.com/posts/you-might-be-overlooking-the-put-method-in-your-rest-api/<p>So, you’re building your first or maybe your hundredth REST API, or perhaps you’re following along with a tutorial, and you’re about to implement the PUT HTTP method for an endpoint. To demonstrate a simple workflow for implementing a PUT endpoint, let’s take a look at the following code snippets. In this article, I will be using Golang, but you can follow along with the language of your choice. Consider the following schema for a Pokemons table.</p>Winning a Gamejam in 24 hours: The Creation of Princess Okokuhttp://kincodes.com/posts/winning-a-gamejam-in-24-hours-the-creation-of-princess-okoku/Sat, 08 Apr 2023 00:00:00 +0000http://kincodes.com/posts/winning-a-gamejam-in-24-hours-the-creation-of-princess-okoku/<p>I recently participated in Rosebud.ai game jam, its 3rd entry focused on the extra cute theme. I ended up winning the game jam and in this post, I would like to take you on a journey from concept to creation of Princess Okoku, the game I created using the amazing asset generator PixelVibe , ChatGPT, and React.</p> <h2 id="react-for-game-development-">React for Game Development ?</h2> <p>Hey don&rsquo;t start throwing the tomatoes! I am not a game developer, but I always have been a huge game fan, specially of rpgs, strategy and <a href="proxy.php?url=https://en.wikipedia.org/wiki/Gacha_game"target="_blank" class="inline-flex items-center gap-1" >gacha games<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>. In fact, one of my first tries of dabbling into game development dates back to almost 2–3 years ago (<a href="proxy.php?url=https://github.com/k1nho/gacha-game"target="_blank" class="inline-flex items-center gap-1" >The Programming Isekai Adventure<svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/></svg> </a>) with a console based gacha game. When I saw that Rosebud open their 3rd game jam with the extra cute theme, I decided to give it a shot with my new skills. However, my expertise is on web, so I had to make a choice.</p>Kin Hong NGhttp://kincodes.com/about/Mon, 01 Jan 0001 00:00:00 +0000http://kincodes.com/about/<h2 id="about">About</h2> <p>Hi! I&rsquo;m <strong>Kin</strong>, I am a <strong>software engineer</strong> working in the processing, containerization, and visualization of scientific workflows. I have worked across multiple domains, from cybersecurity, developing advanced email phishing detection, to open source, enhancing repository insights, and accessibility.</p> <p>My main interest is in <strong>cloud-native infrastructure and DevOps tooling</strong>, with a focus on <strong>Kubernetes</strong>, <strong>Docker</strong>, and <strong>CI/CD</strong> pipelines. I also enjoy contributing to open source (<strong>OSS</strong>) projects and working with tools that help improve and support the cloud-native community.</p>