<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>nanmu42</title><link>https://nanmu.me/en/</link><description>Recent content on nanmu42</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>i@nanmu.me (nanmu42)</managingEditor><webMaster>i@nanmu.me (nanmu42)</webMaster><copyright>Copyright &amp;copy;{year} LI Zhennan</copyright><lastBuildDate>Sat, 25 Nov 2023 15:00:00 +0800</lastBuildDate><sy:updatePeriod>weekly</sy:updatePeriod><sy:updateFrequency>weekly</sy:updateFrequency><atom:link href="https://nanmu.me/en/index.xml" rel="self" type="application/rss+xml"/><item><title>My DIY NAS Adventure</title><link>https://nanmu.me/en/posts/2023/my-homebrew-nas/</link><pubDate>Sat, 25 Nov 2023 15:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2023/my-homebrew-nas/</guid><description>Preface This post is a casual account intended for my friends, most of whom are not in the IT industry. For the sake of a broader audience&amp;rsquo;s reading pleasure, I feel compelled to briefly explain what NAS (Network-attached storage) is. Essentially, it&amp;rsquo;s a little computer connected to your home router, packed with hard drives (commonly a few TBs in size). With the right software installed, it allows you to back</description><dc:creator>nanmu42</dc:creator><category>NAS</category><category>Development Boards</category><category>ARM</category><category>FriendlyELEC</category><category>Tech Explainer</category><category>Notes and Discussions</category></item><item><title>Quick Dockerfile for Python Poetry Projects</title><link>https://nanmu.me/en/posts/2023/quick-dockerfile-for-python-poetry-projects/</link><pubDate>Sun, 15 Oct 2023 15:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2023/quick-dockerfile-for-python-poetry-projects/</guid><description>Goal Both Poetry and Python work out-of-the-box, dependency-wise especially. No need for entrypoint.sh and stuff. Two images: dev and production. Dockerfile Say we have the following project structure:
. ├── Dockerfile ├── pyproject.toml ├── poetry.lock ├── scripts └── my_awesome_ai_project Copy the following content as your Dockerfile&amp;rsquo;s start point. The usage is in the next section if in need.
Also, a Github Gist is available.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 # syntax=docker/dockerfile:1# Keep this syntax directive!</description><dc:creator>nanmu42</dc:creator><category>Docker</category><category>Python</category><category>Poetry</category><category>Notes and Discussions</category></item><item><title>Bring Your "Own" Gitlab CI Runner</title><link>https://nanmu.me/en/posts/2022/bring-your-own-gitlab-runner/</link><pubDate>Thu, 29 Dec 2022 13:14:15 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2022/bring-your-own-gitlab-runner/</guid><description>Gitlab boasts this nifty feature of using your own Gitlab CI Runner. But what if you&amp;rsquo;re sans a &amp;ldquo;really personal&amp;rdquo; CI Runner? Fear not, we&amp;rsquo;re about to roll up our sleeves and craft one ourselves. []~(￣▽￣)~*
Our DIY Runner&amp;#39;s logo, feels like the project just got serious, right? In this dive, we&amp;rsquo;re going to:
Outline the core duties of a Gitlab Runner; Dissect the interactions between a Runner and Gitlab during operation; Design and implement our very own Runner; Bootstrap: get our Runner to run its own CI jobs.</description><dc:creator>nanmu42</dc:creator><category>Gitlab</category><category>Firecracker</category><category>Notes and Discussions</category></item><item><title>Get Intel AX210 Wireless Adapters Working on Linux</title><link>https://nanmu.me/en/posts/2022/get-ax210-working-on-linux/</link><pubDate>Sat, 29 Oct 2022 15:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2022/get-ax210-working-on-linux/</guid><description>The Intel® Wi-Fi 6E AX210 wireless adapter supports Wi-Fi 6E technology(6 GHz). It&amp;rsquo;s a good fit if you happen to have a Wi-Fi 6E router. However, getting it working(and keeping it working) on Linux might be a little trickier than you think. Before You Purchase the Hardware Intel AX210 depends on the driver named iwlwifi and the minimum supported Linux kernel version is 5.10. Make</description><dc:creator>nanmu42</dc:creator><category>Linux</category><category>Notes and Discussions</category></item><item><title>What Happens on GitLab When You do git push?</title><link>https://nanmu.me/en/posts/2022/what-happens-on-gitlab-when-you-do-git-push/</link><pubDate>Fri, 23 Sep 2022 12:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2022/what-happens-on-gitlab-when-you-do-git-push/</guid><description>Ever curious about how Git and GitLab work behind the scenes? Now&amp;rsquo;s the time to pick up your beloved IDE and embark on a journey to explore the inner workings of these tools with me!
The Basics Before we set off on our journey, let&amp;rsquo;s stock up on some background knowledge in less than five minutes. Ready, set, go!
Inside a Git Repository Projects using Git have a .git folder at their root (hidden), which holds all the information saved by Git.</description><dc:creator>nanmu42</dc:creator><category>git</category><category>GitLab</category><category>Notes and Discussions</category></item><item><title>The Art of Error Handling in Go</title><link>https://nanmu.me/en/posts/2021/error-handling-in-go/</link><pubDate>Sun, 03 Oct 2021 11:07:58 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2021/error-handling-in-go/</guid><description>Error handling in Go can be confusing for beginners and for those accustomed to other programming languages. In this article, we will distinguish between errors (error) and exceptions (panic), discuss what constitutes a &amp;ldquo;good&amp;rdquo; error (one that is easy to check and debug), and present a common method for improving error handling through the use of fmt.Errorf().
By the way, if you&amp;rsquo;re new to Go and come from a different programming language background, I recommend reading my previous post, &amp;ldquo;The Second Language Guide to Golang&amp;rdquo;.</description><dc:creator>nanmu42</dc:creator><category>Golang</category><category>Notes and Discussions</category></item><item><title>Learning Golang as Your Second Programming Language: Learning Paths, Best Practices, and Engineering</title><link>https://nanmu.me/en/posts/2021/way-to-go/</link><pubDate>Wed, 27 Jan 2021 14:21:58 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2021/way-to-go/</guid><description>This article is for those who have some programming background and are considering learning Golang as their second programming language. I hope to provide some direction for your learning journey.
The mascot for the Go language is the Gopher, and enthusiasts of the Go language often refer to themselves as Gophers. Image by Renee French Overview Introduced in 2009 and backed by Google, Go, designed by computing pioneers Robert Griesemer, Rob Pike, and Ken Thompson, is a statically typed, compiled, cross-platform language with concurrency support at the language level, garbage collection, and a syntax within the tradition of the C programming language.</description><dc:creator>nanmu42</dc:creator><category>Golang</category><category>Notes and Discussions</category></item><item><title>Yaesu FT-70DR Handheld Transceiver Crash Course</title><link>https://nanmu.me/en/posts/2020/yaesu-ft-70dr-crash-course/</link><pubDate>Wed, 07 Oct 2020 11:23:18 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/yaesu-ft-70dr-crash-course/</guid><description>It&amp;rsquo;s likely for new users to get lost in the all-inclusive official manuals and here is a task-oriented guide to rescue.
Technical Spec Yaesu FT-70DR is a handheld transceiver suited for amateur radio, which provides both conventional analog FM mode and C4FM digital mode. It comes with 108 MHz - 580 MHz receive coverage(including aircraft bands), broadcasts on 144 -148 MHz and 430 - 440 MHz, and has one 7.4 V 1800 mAh li-ion battery.</description><dc:creator>nanmu42</dc:creator><category>amateur radio</category><category>Yaesu</category><category>Notes and Discussions</category></item><item><title>How to Program Your Robot Car into a Goalkeeper?</title><link>https://nanmu.me/en/posts/2020/build-a-goalkeeper-robomaster/</link><pubDate>Sat, 12 Sep 2020 10:10:10 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/build-a-goalkeeper-robomaster/</guid><description>Programing a robot car can bring a lot of fun. In this post, we are going to discuss how to program a robot car into a goalkeeper: watching the ball, moving to the ball, kicking it, returning to the start point and waiting for the next ball, keeping itself in the field&amp;hellip; What&amp;rsquo;s more, we will walk through the system states and transition between states below these subtasks, and principles and methods of these subtasks.</description><dc:creator>nanmu42</dc:creator><category>OpenCV</category><category>robot car</category><category>DJI RoboMaster</category><category>RoboMasterPy</category><category>PID</category><category>Building Stuff</category></item><item><title>A Practical Guide to Reclaim Disk Space from MongoDB</title><link>https://nanmu.me/en/posts/2020/a-practical-guide-to-reclaim-disk-space-from-mongo-db/</link><pubDate>Sun, 31 May 2020 10:48:05 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/a-practical-guide-to-reclaim-disk-space-from-mongo-db/</guid><description>Dedicated to Ops who are weighed down with worry about high-disk usage of MongoDB.
This post applies to MongoDB 3.2 or better and all following operations run on Mongo Shell. You need to confirm your Mongo&amp;rsquo;s engine is WiredTiger:
1 2 db.serverStatus().storageEngine // expect output: { &amp;#34;name&amp;#34; : &amp;#34;wiredTiger&amp;#34; } Where to start Find the main concern, use show dbs to locate the biggest databases, and then locate the biggest collections after use your_biggest_db:</description><dc:creator>nanmu42</dc:creator><category>MongoDB</category><category>WiredTiger</category><category>Notes and Discussions</category></item><item><title>Walk around Strange HTML Video Tag Behavior in Wechat</title><link>https://nanmu.me/en/posts/2020/strange-html-video-tag-behavior-in-wechat/</link><pubDate>Thu, 02 Apr 2020 18:35:25 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/strange-html-video-tag-behavior-in-wechat/</guid><description>In some Wechat built-in browser, &amp;lt;video&amp;gt; tag in your website always surprisingly goes fullscreen automatically, leaving document flow left below, with &amp;ldquo;related videos&amp;rdquo; suggestions at the end of your video.
As the start point for fixing, you may add those attributes to your video tag:
1 2 3 4 5 6 7 8 9 &amp;lt;!-- irrelevant attributes for solving this problem are omitted --&amp;gt; &amp;lt;video playsinline=&amp;#34;true&amp;#34; webkit-playsinline=&amp;#34;true&amp;#34; x5-playsinline=&amp;#34;true&amp;#34; x5-video-player-type=&amp;#34;h5&amp;#34; x5-video-orientation=&amp;#34;landscape|portrait&amp;#34; x5-video-player-fullscreen=&amp;#34;true&amp;#34; &amp;gt;&amp;lt;/video&amp;gt; Do all versions of Wechat built-in browsers need these attributes?</description><dc:creator>nanmu42</dc:creator><category>Wechat</category><category>browsers</category><category>Notes and Discussions</category></item><item><title>Hugo i18n Automatic Language Redirection</title><link>https://nanmu.me/en/posts/2020/hugo-i18n-automatic-language-redirection/</link><pubDate>Sun, 15 Mar 2020 14:07:48 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/hugo-i18n-automatic-language-redirection/</guid><description>Hugo has really neat support for i18n. Unfortunately, it does not provide a straitforward way to redirect your visitors automatically according to their web browser language preferences. The good news is that Hugo authors leave a window open for solving this problem.
The Problem My site is running on two languages: English and Chinese. I have defaultContentLanguageInSubdir set to true and defaultContentLanguage set to en. When visitors came to root / of my site, their web browsers got following response:</description><dc:creator>nanmu42</dc:creator><category>hugo</category><category>i18n</category><category>multilingual</category><category>Notes and Discussions</category></item><item><title>PostgreSQL Date and Time Data Types Explained</title><link>https://nanmu.me/en/posts/2020/postgresql-date-and-time-data-types-explained/</link><pubDate>Sat, 14 Mar 2020 00:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/postgresql-date-and-time-data-types-explained/</guid><description>PostgreSQL(or Postgres) is a great database. Life would be much easier if its strength is well utilized.
Postgres provides five datetime data types, including timestamp/timestamp with time zone, date, time, interval and time range(tsrange, tstzrange, daterange). This article briefs them, talks about gotchas and recommendations like why not store every datetime in UTC.
Timestamps We are living in a four-dimension space of length, width, height and time. The time is uniquely determined by year, month, day, hour, minute and second, given timezone is specified.</description><dc:creator>nanmu42</dc:creator><category>PostgreSQL</category><category>timezone</category><category>Notes and Discussions</category></item><item><title>Why My Content Served by PWA Service Worker Not Updating?</title><link>https://nanmu.me/en/posts/2020/why-my-content-served-by-pwa-service-worker-not-updating/</link><pubDate>Sun, 16 Feb 2020 15:20:34 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/why-my-content-served-by-pwa-service-worker-not-updating/</guid><description>Have you been in following situations?
Your PWA website console log keeps saying:
New content is available; please refresh.
But refreshing just does not seem to work - old content and the log both stick.
Quick Solution For you who are in a hurry and cares just the solution, close and start your whole web browser, not just tabs, and content should be updated normally.
Why does this happen?</description><dc:creator>nanmu42</dc:creator><category>service worker</category><category>PWA</category><category>browsers</category><category>Notes and Discussions</category></item><item><title>Setup Elasticseach, Kibana and Fluent Bit for Your Kubernetes Cluster Logging</title><link>https://nanmu.me/en/posts/2020/k8s-eck-logging/</link><pubDate>Sat, 15 Feb 2020 00:00:00 +0800</pubDate><author>i@nanmu.me (nanmu42)</author><atom:modified>Tue, 06 Aug 2024 10:39:07 +0800</atom:modified><guid>https://nanmu.me/en/posts/2020/k8s-eck-logging/</guid><description>Goal This walk-through guides you to setup an in-cluster Elasticsearch and Kibana suite, with cluster-level logging data gathered by Fluent Bit. You may access and search logs from every pod in cluster, as long as the workload in pod writes log to stdout or stderr.
Prerequisites Kubernetes 1.11 or higher (minikube not working) Predefined storage class called hdd-ssd (you may change it in eck.yaml) Deployment Steps Clone this repo to get necessary yaml files.</description><dc:creator>nanmu42</dc:creator><category>k8s</category><category>logging</category><category>Elasticsearch</category><category>Fluent Bit</category><category>Kibana</category><category>Notes and Discussions</category></item></channel></rss>