Mudkip Mud Sport

Mudkip's Mud Sport Journal

Inspired by マリウス and Tao of Mac, I’d like to share some tech staff I did and learned recently.

Home System

My Homelab is composed of a Synology NAS, a Intel NUC and a Raspberry Pi 4. The NUC runs a free version of VMware ESXi. Before this quarter, it hosts an Arch Linux box for remote development, a Windows 10 VM runs Plex Media Server and Calibre-web, a Debian server works as a network gateway, as well as 3 K3OS nodes for most self-hosted workloads.

My Raspberry Pi mostly worked as a duplication of the NUC for some workload, such as network gateway and code-server and my Synology stores everything.

While K3S is my favorite Kubernetes distribution, K3OS hasn’t received any update since SUSE’s acquisition of Rancher, it is now an abandoned project and I’ve been thinking about replacing it.

Talos is a distribution got a lot love in the home Kubernetes community. I tried creating a cluster with one control plane and one worker node and put some workload on it but it didn’t work for me. The internal DNS server (coredns) stopped responding after I randomly tweaked a few settings, started a few pods or just restarted the host several times. I failed to bring Synology CSI up following Talos’s guide, though I did set up democratic-csi successfully.

I guess the DNS issue is related to the network configuration of my home environment but couldn’t figure out what when wrong exactly. So eventually I took the clumsy way and manually set up 4 Ubuntu Server VMs and installed k3s manually. It didn’t take long and after a dozen minutes my home Kubernetes cluster is up again.

The Raspberry Pi 4 is more valuable than ever due to its skyrocketing price. Since it boots with a 500GB USB SSD, it’s actually very fast to run lots of workload. It’s now working as a network gateway for my home devices, a remote development server and a Home Assistant box.

With GPU price back to normal, I built a desktop workstation with Intel Dragon Canyon i9 NUC, WD SN750 NVMe SSD, 64GB RAM and a lucky to find 2-slot size RTX 3080 GPU. It’s dual-booting with Windows 11 and EndeavourOS i3. I’m very satisfied with its performance which can cargo install anything instantly and run any games in 4K 60fps.

52Poké

I’ve done some underlying refactoring with klinklang (a.k.a. 52Poké Wiki Utilities). It’s a small project to do automation on 52Poké Wiki. For example, it can trigger update to MediaWiki:Common.css when 52W:层叠样式表 is updated. It can also be a glossary translator and sync with various lists on the wiki.

The tech stack now includes modern JavaScript/TypeScript frameworks such as fastify, Prisma, Vite and pnpm. Particularly I like the dependency injection implementation of awilix. The refactoring is a step to something I planned many years ago: a workflow engine for MediaWiki, which let wiki editors write automation tasks with Amazon States Language.

On the infrastructure side, the LKE cluster had went through two Kubernetes upgrade smoothly. I’m planning some major updates along with MediaWiki 1.39 release, and 52Poké Wiki will have higher availability and cost much less.

52Poké Homepage and Forums is stagnated for a long time but I do wish to bring them back to life. There’s not much to say yet.

Other Side Projects

Throughout the past few years I’ve been tweaking my digital life to give myself full control over my data and host the services I rely on at home. On the other side, I‘ve been suffering from burnout and I feared losing passion for programming.

In September I figured out what I can do in a relatively short time to give myself a feeling of satisfaction, a mobile app for a self-hosted memo hub allowing me to capture ideas on the go. I spent a few nights and weekends building it with SwiftUI. It was a good experience and it’s ready after a dozen days. I put it on TestFlight and the initial feedback was positive.

However Apple took me down with a dubious message: We need additional time to evaluate your submission and Apple Developer Program account. Your submission status will appear as “Rejected” in App Store Connect while we investigate.

It gave me an opportunity to learn and try modern Android development and I took another dozens of hours to build the Android counterpart with Jetpack Compose and Material You. After 44 days Apple finally approved this app and In the end I’m grateful I had this experience.

So here’s Moe Memos. It’s open source and I had fun creating it. I wish to build features like home screen widgets and offline support in next few months.

Blogging is always something I cherish, something I always want to keep doing, however also something I never could keep doing on a regular basis. I registered the domain mudkip.me many years ago. As time goes by, I toggled between various blogging platforms and the most recent one is Tumblr.

I chose Tumblr because it’s convenient, fun and modern in 2011. Tumblr respects the ownership and personality of its users. It does social just right. However Tumblr is no longer great for me as a blog platform today. I have to use ‘display:none’ CSS to hide the banner to promote Tumblr app. I can’t get rid of a lot of tracking scripts. And I want more freedom with the domain I own.

This blog is now powered by Hexo, a powerful static blog framework. It’s hosted on GitHub and updated with Git. I set up a webhook to automatically deploy to GitHub Pages when I push my hexo repository. I’m also building an iOS blog workflow with Ulysses, Working Copy and Workflow. And as always, I love writing and I wish I could write more.

My previous posts is still available at Tumblr. They might be migrated here someday. :)

You’ve always been kind of a brat, Fennekin. But I’m jealous of the way you’re chasing your dreams. --Lombre

Try not to eat too much. Take care. --Raticate

Ven you are feeling lonely, remember ze village. --Hippopotas

A child’s dream can’t be destroyed by adults. Best of luck to you. --Simipour

Let’s see, how can I put this? Even if you were problem children. If you work hard, maybe you won’t be so problematic. And on that note, good luck! --Watchog

Good luck. Feennekin and Swam, I believe in you! --Audino

I was quite surprised when I heard the news yesterday… I’m glad you opened up to me! Good luck! --Farfetch’d

Good luck! Follow your dreams! --Sunkern

School is important, but it’s important to go after what you want in life, too! Take good care of yourselves… and good luck! --Roselia

We have a shop in Lively Town, too. So you have nothing to worry about! Good luck! --Kecleon

Time to let these cute kids fly away on their journey! Hy-krah! --Hawlucha

Be brave and never give up! Take care! And good luck! --Kangaskhan

Go on, Fennekin. See you when you get back. Your adventurous spirit can’t be contained. If you think you’re ready, go see your dreams through to the end. --Carracosta

Good luck to you, Swam. We just happened to meet, and you came to live with me… I reckon it sure enough was fun havin’ you around, Swam. I reckon I can’t help but worry. But I’m cheerin’ for you. Take care. --Nuzleaf

image-1

In Sootopolis City, after the end of the extreme weather event.

Finally, it’s just two of us again.
I’ve got to say…thanks for everything you’ve done for our region, Swam.
You know, I thought we were supposed to have set out from Littleroot together, but…
But you, Swam…
It seems like you just keep getting further and further ahead of me…
I even started to feel like you’d gone somewhere I can’t even reach.
It’s pretty lonely, you know?
Not!
What would you think if I really said something like that?
Hee hee!

My dear May. Do you know what I’m thinking?

I mean, everything I were able to have done, begins with our first battle near the pool of Route 103, just like you said in Lilycove. I were merely a careless boy who knew nothing about Hoenn, but you welcomed me with the most beautiful smiling face on that day, and taught me how to battle, how to creep near Poochyena. You helped me and encouraged me every time.

I never feel I’m ahead of you. When we met at Lilycove, I noticed your Pokédex was nearly completed. You must have made great efforts to achieve this, and that’s the thing I lag behind you a lot. You are my best friend, and you are never alone.

So…When our journey comes to a new chapter, I wish we get back to Littleroot together, and I want we understand everything about each other and our Pokémon and share our journey together.

And…May we be together forever.

It’s not necessary… Separating black from white and humans from Pokémon! If you think in terms of each individual life, this world was in a state that couldn’t divided any further. Possibilities are born out of combining and fusing these different lives! There are some things we can understand only by doing this. It will give form to unseen things. These formulae will restructure the world and make it richer! From their Poké Balls, I can hear the many different feelings Pokémon have about their Trainers. More than anything, I can hear their joy that they met people who need them!

0%