<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OtherNotes on 孤筝の温暖小家</title><link>https://www.guzhengsvt.cn/en/categories/othernotes/</link><description>Recent content from 孤筝の温暖小家</description><generator>Hugo</generator><language>en</language><managingEditor>lvbowen040427@163.com (孤筝)</managingEditor><webMaster>lvbowen040427@163.com (孤筝)</webMaster><copyright>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</copyright><lastBuildDate>Tue, 11 Nov 2025 18:44:15 +0800</lastBuildDate><atom:link href="https://www.guzhengsvt.cn/en/categories/othernotes/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting into Amateur Radio from Scratch</title><link>https://www.guzhengsvt.cn/en/post/othernotes/the-path-to-amateur-radio-from-scratch/</link><pubDate>Tue, 03 Jun 2025 20:44:15 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/the-path-to-amateur-radio-from-scratch/</guid><description>
<![CDATA[<h1>Getting into Amateur Radio from Scratch</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="getting-the-class-a-operator-certificate">
<a class="header-anchor" href="#getting-the-class-a-operator-certificate"></a>
Getting the Class A Operator Certificate
</h2><p>Last year, in 2024, I took the exam in Xi&rsquo;an and got my Class A certificate. I bought a Quansheng UV-K6 handheld, and the first time I formally listened to an amateur radio contact was on the balcony of Dorm Hai-8 at XDU on $483.100 \text{MHz}$. Since I did not yet have a call sign at the time, transmitting would have been illegal, so I neither chatted nor logged the contact.</p>
<p>The A-class exam itself is not difficult. The hardest part is getting a seat. In Xi&rsquo;an, Class A exams are held only about once every six months, and registration is basically first-come, first-served with no mercy. The sign-up system also breaks quite often. If you are serious about taking it, I would suggest first following the radio society in either your registered hometown or your place of long-term residence, and booking somewhere that runs exams more often, has more seats, and processes certificates faster.</p>
<p>For students who simply want to get the A certificate quickly, setting aside about three days in advance for question drilling is already more than safe, honestly even one day can be enough. You can use platforms like the Zhipu app or HAM mini-programs for practice and mock tests. I would recommend first reading this 2018 <a href="https://www.jimmytian.com/archives/crac-aro-licence-a-review-guide.html">blog post</a>.</p>
<p><strong>==Waring==</strong>: The question bank was updated in 2025, so the blog post above may no longer fully apply. Still, it remains useful for getting a feel for the questions.</p>
<h2 id="getting-a-call-sign-and-a-station-license">
<a class="header-anchor" href="#getting-a-call-sign-and-a-station-license"></a>
Getting a Call Sign and a Station License
</h2><p>Once you have the operator certificate, you can buy or build equipment, apply to set up a station, and obtain a call sign. As a beginner, I went with the very popular 5 W handheld Quansheng UV-K6. A brand-new one only costs a bit over a hundred RMB, and that is enough to get started. After getting a B certificate, I can move on to better equipment and antennas for HF.</p>
<p>Xi&rsquo;an really is slow when it comes to administration. I went to the society in early March to apply for my station, and I did not receive my station license until the end of May, almost three months later.<br>
Judging from the stamped date on the license, it had already been approved on May 8. I honestly have no idea why they could drag it out that long, apparently only issuing them once a month.</p>
<p>With a call sign, you can legally conduct RTT. With a station license, you can use your registered equipment to transmit and receive on the legal bands.</p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/%E7%94%B5%E5%8F%B0%E6%89%A7%E7%85%A7-%E6%AD%A3%E9%9D%A2.jpeg" alt="电台执照-正面.jpeg"></p>
<h2 id="on-designing-qsl-cards-and-call-sign-stamps">
<a class="header-anchor" href="#on-designing-qsl-cards-and-call-sign-stamps"></a>
On Designing QSL Cards and Call Sign Stamps
</h2><p>Strictly speaking, QSL cards and call sign stamps are part of amateur radio culture rather than actual necessities. But when in Rome, making meaningful or good-looking QSL cards and stamps is a nice way to preserve a record and a memory of a contact for both yourself and the other operator.</p>
<p>Naturally, both have a few accepted &ldquo;industry standards.&rdquo;</p>
<h3 id="qsl-cards">
<a class="header-anchor" href="#qsl-cards"></a>
QSL Cards
</h3><p>For mailing convenience, QSL cards are usually postcard-sized, about $14 \text{cm} \times 9 \text{cm}$. Since printing requires trimming, some extra margin is needed. For example, the Taobao shop run by BG9GXM advised me to set the canvas to $14.4\text{cm} \times 9.4\text{cm}$, add $3 \text{mm}$ guide lines around the edges for trimming, and keep all content except the background image inside the safe area.</p>
<p>I use Krita, which is free and open source. Most people probably still use Photoshop. Exporting a PSD file also makes it easier for the printer to tweak things if necessary.</p>
<p>QSL cards can be single-sided, double-sided, or even folded, as long as the required information is present. You can look at the <a href="https://forum.hamcq.cn/qslCardShow">QSL card gallery</a> on the HamCQ community, as well as the following posts:</p>
<ul>
<li><a href="https://forum.hamcq.cn/d/1882">设计自己的 QSL 卡片 —— 来自广告从业者的分享 - HamCQ 社区</a></li>
<li><a href="https://www.hellocq.net/forum/read.php?tid=207871">哈罗CQ火腿社区 - QSL卡展板 - QSL卡片制作【新手必看Q&amp;A】</a></li>
<li><a href="https://forum.hamcq.cn/d/418">分享一版自己设计的 QSL 卡片背面模板 - HamCQ 社区</a></li>
</ul>
<p>Or you can simply ask 久美印业, BG9GXM&rsquo;s Taobao shop. That was where I printed my first batch of cards. The print quality was clear, and communication was patient.</p>
<p>Below is the first QSL card I designed:</p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/QSL-%E6%A0%87-1.jpeg" alt="QSL-标-1.jpeg"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/QSL-%E6%A0%87-2.jpeg" alt="QSL-标-2.jpeg"></p>
<p>Problems:</p>
<ol>
<li>The BA-style call sign logo on the front was scaled too small. The black part is hard to make out unless you stare at it. Next time I need to pay more attention to placement and contrast with the background.</li>
<li>I wanted the text on the window to look like Noa had handwritten it directly on the glass, but the font still did not feel handwritten enough. I could not find a better one in Krita, so I need to revise that later.</li>
<li>Once the background was added on the back, I could only really choose double-sided coated paper or expensive art paper. Coated paper takes oil-based ink better than water-based ink, so gel pens write poorly on it. After testing, a ballpoint pen actually worked quite well and did not smudge easily.</li>
<li>The background opacity on the back was set to 80 percent, which was still too high. I should probably try 60 percent next time. In the actual print, the small black text is hard to read.</li>
<li>The reserved writing height after &ldquo;To Radio:&rdquo; is too small, with too little room between the top blank margin and the form below.</li>
<li>$300 \text{g}$ coated business-card stock is still too soft. A stiffer card stock would be better.</li>
</ol>
<h3 id="call-sign-stamp-and-eyeball-stamp">
<a class="header-anchor" href="#call-sign-stamp-and-eyeball-stamp"></a>
Call Sign Stamp and EyeBall Stamp
</h3><p>Custom stamp shops usually make stamps with a diameter of about $40 \text{mm}$. If you design one yourself, you can simply create a $40\text{mm} \times 40\text{mm}$ canvas and then refer to existing call sign stamp designs for the rest. Of course, designing call sign stamps does not necessarily require Photoshop-type software. Vector tools may be better. <a href="https://forum.hamcq.cn/d/5865">使用 Visio 制作呼号章的手把手教学 - HamCQ 社区</a></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/%E5%91%BC%E5%8F%B7%E7%AB%A0.png" alt="呼号章.png"></p>
<p>The stamp above is my own design, and I included the following elements:</p>
<ol>
<li>A gear decoration on the outer ring, representing workers and also a bit of engineering flavor.</li>
<li>The Chinese and English wording for &ldquo;Chinese Amateur Radio Station,&rdquo; the call sign itself, and &ldquo;Shaan Xi&rdquo; to indicate the province.</li>
<li>A five-pointed star decoration.</li>
<li>A radio set and radio waves on the screen, a BeiDou satellite for satellite operation, an arrow representing rockets and aircraft, a ground signal station for antennas, and a signal icon representing radio waves in space.</li>
</ol>
<p>I personally pay a lot of attention to aerospace, so I am especially fond of that arrow motif. Our school and our school&rsquo;s science association both use arrows in their logos as well. I originally thought about adding a few stars to suggest the night sky, but then I reconsidered. If I someday also get into &ldquo;plane spotting&rdquo; in the sense of monitoring airport towers and aviation bands, then a purely rocket-like arrow would feel too narrow.<br>
So in the end I went with something more general: the arrow can represent either a space rocket or an aircraft, with an angle somewhere between vertical launch and level flight.</p>
<p>Compared with QSL cards, call sign stamps are not really bound by strict content requirements, nor do they have to be stamped onto QSL cards at all. In the end, stamping is simply a cultural habit and a way to show personality.</p>
<p>An EyeBall QSO stamp is used for <strong>non-radio contacts</strong>, such as meeting in person or exchanging cards on a forum.</p>
<p>Sometimes, if you have too many cards to send, signing them one by one is also a pain, and in that case a signature stamp can help.</p>
<p>As I see it, <strong>the essence of amateur radio lies in exchanging technical knowledge, improving one&rsquo;s skills, and serving society. Whether cards or stamps, they are there to support the culture of the community, not to become the main thing.</strong></p>
<h2 id="contact-logging">
<a class="header-anchor" href="#contact-logging"></a>
Contact Logging
</h2><p>After each contact, the following information should be logged promptly:</p>
<ul>
<li>Requird:
<ol>
<li>Start and end time of the QSO, with attention to the time zone</li>
<li>Both call signs</li>
<li>Both QTHs</li>
<li>Both signal reports</li>
<li>Operating mode</li>
<li>Frequency, including repeater and tone information if applicable</li>
</ol>
</li>
<li>Optional:
<ol>
<li>Equipment</li>
<li>Antenna</li>
<li>Transmit power</li>
<li>Local weather</li>
<li>Whether cards will be exchanged</li>
</ol>
</li>
</ul>
<p>If these logs are kept properly, they can later be uploaded to platforms such as LoTW, Logbook of The World.</p>
<h2 id="sending-and-receiving-qsl-cards">
<a class="header-anchor" href="#sending-and-receiving-qsl-cards"></a>
Sending and Receiving QSL Cards
</h2><h3 id="mainland-china">
<a class="header-anchor" href="#mainland-china"></a>
Mainland China
</h3><p>Within the same province or city in mainland China, an ordinary letter costs 0.8 RMB in postage, while a registered letter costs 3.8 RMB, meaning 3 + 0.8.<br>
Across provinces or municipalities, ordinary mail costs 1.2 RMB and registered mail costs 4.2 RMB, meaning 3 + 1.2.<br>
The first weight bracket is 20 g. For every additional 20 g, or any fraction thereof, postage increases by 0.8 RMB within the province or 1.2 RMB across provinces.</p>
<p>There are three main ways to pay postage:</p>
<ol>
<li>Go to the post office and hand it directly to the staff, who will charge you and apply the stamps.</li>
<li>Buy stamps yourself and attach them to the envelope or postcard.</li>
<li>Buy a <strong>prepaid envelope</strong>, meaning the envelope already carries postage.</li>
</ol>
<h3 id="buying-stamps">
<a class="header-anchor" href="#buying-stamps"></a>
Buying Stamps
</h3><ol>
<li>Local post offices: usually limited selection, face value</li>
<li>Specialty postal branches: more varieties, sometimes themed stamps, face value</li>
<li>Postal website or app: broad selection, face value</li>
<li>E-commerce platforms: ordinary stamps often sold at 50 to 90 percent of face value, good for regular mailing</li>
<li>Private sales: Xianyu and individual sellers, with higher risk</li>
</ol>
<p><strong>Warning:</strong> When buying from unofficial postal channels, be careful about authenticity. I do not recommend stamps sold below half price.<br>
I usually buy discounted stamps from high-volume Taobao shops and check them with a UV light.</p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/%E9%B9%B0%E7%A5%A8.JPG" alt="一张很帅的老鹰，紫外灯照射后会显示红色荧光骨架"></p>
<h2 id="getting-the-class-b-certificate">
<a class="header-anchor" href="#getting-the-class-b-certificate"></a>
Getting the Class B Certificate
</h2><p>The Shaanxi Class B operator exam in 2025 was held on November 8, and my station license was issued on May 8, which meant I had just barely crossed the required six-month mark. Otherwise I would have missed this once-a-year exam.<br>
This was also the first exam after the question bank revision. Compared with Class A, the old B bank had a bit over 600 questions, while the new B bank has over 1100, almost doubling in size. The difficulty naturally increased as well.</p>
<p>Still, the revision was not entirely a bad thing. Being among the first batch to sit the new exam, I found the actual paper surprisingly easy.<br>
While practicing, all the frequency questions and calculation questions were a headache, especially the frequency questions, which are all numbers and much harder to memorize than plain-language items. On top of that, there were topics like antenna-feed systems, signal modulation and demodulation, and radio-wave theory, which forced me to revisit the Electromagnetic Fields and Waves course I had taken two years ago, and even learn a bit of Communication Principles that I had never properly studied.<br>
I went through the whole bank in random order, marked the hard ones, drilled them again and again until I could tell the answer from the first line, and then redid the wrong questions. Even so, time was tight, and I never even did a full mock exam, so I still felt uncertain inside.</p>
<p>After all that preparation, the real paper turned out not to contain a single truly difficult question. I finished the 60 questions in a bit more than ten minutes, checked them once more, and honestly spent longer filling in the answer sheet than solving the paper itself.<br>
I handed it in after half an hour, then waited downstairs for over an hour before the results came out. I got 58 out of 60 without much trouble. Even classmates who had only finished about 700 questions in the bank still scored above 50. There was no helping it, almost none of the later questions in the bank showed up at all.</p>
<p>Now I just have to wait for the certificate to be issued. I have no idea whether it will come in the new Class B format or the older-looking one. By &ldquo;old&rdquo; here I mean the appearance, not the truly old B license from before the new regulations, the one that still allowed 100 W HF operation.<br>
To take the Class C exam, one must have had an HF station established for 18 months. I would really like to set one up as soon as possible, but money is the problem. HF stations often cost several thousand or even more, and antennas and feed lines are not cheap either.<br>
Maybe I will save up for a Xiegu, or perhaps build a μSDX myself.</p>

        
        <hr><p>Published on 2025-06-03 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2025-11-11</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Building a NAS with an Old Computer and fnOS</title><link>https://www.guzhengsvt.cn/en/post/othernotes/use-old-computers-and-fnos-to-build-your-own-nas/</link><pubDate>Thu, 16 Oct 2025 23:04:15 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/use-old-computers-and-fnos-to-build-your-own-nas/</guid><description>
<![CDATA[<h1>Building a NAS with an Old Computer and fnOS</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="preface">
<a class="header-anchor" href="#preface"></a>
Preface
</h2><p>Ever since I canceled my NetEase Cloud Music subscription, every time I open the app to listen to music I have to endure five or more VIP pop-ups, and a huge chunk of my playlists has gone gray.<br>
So does paying money to capital actually solve the problem? Not really. Even when I still had VIP, it was constantly throwing SVIP ads at me anyway, and the splash ads never became any fewer. It is not that I cannot afford the fee. It is that I am paying, still getting ads, and still watching the licensing catalog shrink. What exactly am I paying for?<br>
As an Apple user, I also tried the 5 RMB student plan for Apple Music, but too much of the music I actually listen to is locked up by domestic streaming platforms. Downloading everything myself and importing it into Apple Music is just too much trouble.<br>
As a spiritually tech-obsessed Virgo, I absolutely refuse to accept ads shoved in my face inside software and devices I already paid for. I had been too lazy to build my own music library before, and the third-party music services floating around online, especially the ones without proper licenses, are unstable anyway. At this point I really have no choice but to start cleaning up the mess myself.</p>
<p>There are many ways to build a personal music library, but since I have already decided to clean house, I might as well do it thoroughly.<br>
This is not only about music. I used to sync photos with Aliyun Drive and left some in Baidu Netdisk. As for movies and TV shows, storage on my everyday devices was limited, so only my Mac mini M4 had a few hundred gigabytes from PT, and even that was not much. My books were even worse, scattered between cloud drives and local folders with no real synchronization, amounting to several hundred volumes.</p>
<p>As it happened, I had an old laptop lying around: a Thinkbook 16+ 2022 with an i5-12500H, RTX 2050, 512 GB SSD, and 2 TB SSD. It felt almost wasteful not to turn it into an all-flash NAS.<br>
As for the NAS system, fnOS was the obvious choice. It is currently very popular, has an active community, and even offers 2 Mb of free relay service.</p>
<h2 id="system-installation">
<a class="header-anchor" href="#system-installation"></a>
System Installation
</h2><p>Installing fnOS is actually simple. If you follow the official guide, there is usually no problem.<br>
The issue I ran into was this: my USB drive had already been turned into a multi-boot drive with Ventoy. Since fnOS is based on Debian, in theory I should have been able to just drop the ISO into it. But after plugging in the USB stick and selecting the fnOS installer through Ventoy, it kept saying that no hard drive could be found, and changing modes did not help. In the end I followed the official guide, rebuilt the boot disk with Rufus, and it worked on the first try.</p>
<h2 id="special-reminder">
<a class="header-anchor" href="#special-reminder"></a>
Special Reminder
</h2><p>When running Docker, make sure to configure storage paths properly. Map your data folders, such as your music folder, into the container storage space, and set file permissions in the file manager so they apply to child items as well.</p>
<h2 id="building-a-music-library-with-navidrome">
<a class="header-anchor" href="#building-a-music-library-with-navidrome"></a>
Building a Music Library with Navidrome
</h2><p>Navidrome is a web-based open-source music collection server and streaming service.</p>
<p>In system settings, under app settings, add the music folder so Navidrome is allowed to access it. The default port is 4533.<br>
After setting up the account and password, open the web interface. In most cases Navidrome can directly scan accessible folders and import your music.</p>
<h3 id="music_tag_web">
<a class="header-anchor" href="#music_tag_web"></a>
music_tag_web
</h3><p>This is a Docker-based multifunction music tag editor with a web interface. Common features include metadata scraping, library organization, duplicate checking, and format conversion.<br>
Its most important background scraping feature requires version 2, which is paid. I paid 10 RMB on Aifadian for a one-month activation code just to try it out first.</p>
<p>Most of my music files came from NetEase Cloud Music. Because I never had any real sense of organization before, the filenames were a mess. There were duplicates all over my iPhone, Redmi, Mac, and Baidu Drive, and a lot of songs existed in multiple versions or multiple cover versions, such as 《アイロニ (双声道版)》 by 鹿乃 and *菜乃. Many songs I used to listen to years ago have already gone gray on NetEase, such as 双笙&rsquo;s old version of 道姑 or 封茗囧菌&rsquo;s 《静悄悄》.</p>
<p>The first step is to choose the music files you want to scrape and organize the file structure into artist - album - track.<br>
For automatic scraping, I usually start with standard mode, matching title, artist, and album. For the data source, I choose the platform the song mostly came from, for example NetEase Cloud Music in my case. I restrict modifications to cover art, lyrics, and lyric files. If title and artist information were not already messed up, most tracks match perfectly.</p>
<p>For songs that cannot be scraped normally, such as very obscure tracks or tracks that have gone unavailable, I switch to loose mode and enable several sources at once, such as NetEase, QQ Music, Kugou, and iTunes, while keeping the modification scope unchanged.<br>
If you let the software modify the artist field as well, it can easily replace lesser-known cover singers with the original performer.<br>
Sometimes the same piece of music exists in different albums. In some cases the actual audio file is identical, such as Merry Christmas Mr. Lawrence; in others it is not, such as TV-size anime inserts versus full-length versions. If album data is also allowed to change, this can easily lead to bad matches.</p>
<p>After scraping everything, I organize the files once more and delete empty folders.<br>
If there are duplicates, I run duplicate checking and strongly recommend enabling acoustic fingerprint comparison. When the fingerprints match, the files are usually just the same song in different formats, such as mp3 and flac, and I normally keep the larger-bitrate or otherwise preferred version and delete the smaller one.<br>
Then I organize the files again and clean up the empty folders one last time.</p>
<p>Once paid for, music_tag_web can also function as the music library itself. It comes with a built-in Subsonic server, and its interface looks more modern and polished than Navidrome.<br>
That said, I am still cautious about the long-term operational reliability of a solo developer project, so for now I am just watching.</p>
<h3 id="playlist-matcher">
<a class="header-anchor" href="#playlist-matcher"></a>
Playlist Matcher
</h3><p>Someone on LINUX DO made a Windows tool for importing playlists from streaming platforms into Navidrome: <a href="https://linux.do/t/topic/757204">分享一个适配Navidrome的歌单匹配器</a>.<br>
It supports importing playlists from NetEase Cloud Music, QQ Music, and Apple Music into Navidrome, and also outputs a list of unmatched tracks.</p>
<h3 id="clients">
<a class="header-anchor" href="#clients"></a>
Clients
</h3><p>After the music library is built, the next question is how to listen on mobile and desktop devices.<br>
There are many clients that support Navidrome, and they are easy enough to find online.</p>
<p>I am currently using 音流 (1.3.9), which supports most of the platforms I care about, including Android, iOS, iPadOS, Windows, and macOS. It costs under 60 RMB as a one-time purchase and supports up to seven devices at once.<br>
As a player, it basically meets my needs: a fairly decent-looking interface, the ability to download songs from the NAS for local playback, desktop lyrics, playlists, likes, ratings, and shuffle playback.</p>
<p>There are still issues. It crashes sometimes. Background playback occasionally fails to move on to the next track after finishing one song, though not in a reliably reproducible way. Connection to the NAS can feel slow. And when the client cannot connect to the NAS, it only shows already-downloaded tracks and downloaded playlists. If one song appears in multiple playlists, offline it will appear only in the playlist through which it was originally downloaded.<br>
Since it is a non-open-source app by an individual developer, I would still recommend caution before paying. Try the regular version first.</p>
<h2 id="building-a-book-library-with-talebook">
<a class="header-anchor" href="#building-a-book-library-with-talebook"></a>
Building a Book Library with talebook
</h2><p>talebook is a Docker-based open-source project and a compact but powerful private book management system. It is built on calibre and offers book management, online reading and delivery, user management, SSO login, and metadata fetching from Baidu and Douban.</p>
<p>Most configuration is straightforward if you just go through the talebook web admin page item by item. The one thing worth noting is the set of user permissions. Some clients cannot log in normally, and in those cases you need to enable &ldquo;allow arbitrary download&rdquo; so that downloads will work.</p>
<p>In book management, you can manually edit some metadata and add tags. My reading is all over the place, so I prefer to classify both the physical folders and the tags according to the <a href="https://www.clcindex.com/"><strong>Chinese Library Classification</strong></a>.</p>
<h3 id="douban-api-rs">
<a class="header-anchor" href="#douban-api-rs"></a>
douban-api-rs
</h3><p>This is the Douban plugin for talebook, and there is an image for it in fnOS. After running the Docker container, copy the corresponding API address into talebook&rsquo;s &ldquo;internet book metadata source&rdquo; setting. Only then will the automatic metadata update function in book management work properly.<br>
For most well-known literary books, Douban scraping works well. But for unpublished materials such as 《业余无线电爱好者的道德和操作守则》 or very obscure or older books such as 《中国的野菜》 from Hainan Publishing House in 2008, Douban either cannot find anything or matches the wrong thing.</p>
<p>I even have a whole pile of &ldquo;barefoot doctor manuals, militia training guides, martial arts collections, and transmigrator survival texts&rdquo; sitting in Baidu Drive, a full 120 GB plus.<br>
Most of the martial arts and military manuals are impossible to scrape properly, but historical and literary works fare much better.</p>
<h3 id="clients-1">
<a class="header-anchor" href="#clients-1"></a>
Clients
</h3><p>For talebook, or rather OPDS clients in general, genuinely good and modern apps are surprisingly rare.</p>
<p>On Android, I currently download books through the fnOS Android client and then read them locally in eBoox, which can still sync through Google.<br>
tachiyomi is dead because of copyright issues, and its successor Mihon, or similar tools, are much better suited to manga than to books. Their design logic just is not built for ordinary reading. I even ran into a problem where the address could not be set at all when trying to import my self-hosted Komaga source through the komaga plugin.</p>
<p>That said, Kahon, which is derived from Mihon, becomes almost hilariously useful for R18 image sources after you import plugin libraries. As a no-ad way to browse porn, it is honestly pretty great.</p>
<p>On iOS and iPadOS, it is hard for any reading app to beat the built-in iBooks experience. Right now I am trying KyBook 3, though it does not support account login.<br>
When entering the OPDS address, be sure to include both the correct port and the <code>/opds/</code> path.</p>
<h2 id="building-a-video-library">
<a class="header-anchor" href="#building-a-video-library"></a>
Building a Video Library
</h2><p>For me, the built-in fnOS media app is already good enough. It can scrape metadata and classify content. There are clients for Android, iOS, iPadOS, macOS, and Windows. It can also import video resources from Baidu Drive and remotely mounted disks, such as an external drive connected to a Mac and then imported into the fnOS media library over the LAN. Subtitle matching also works online.<br>
If it could also connect to the Bangumi API and the Douban API, that would be even better.</p>
<h2 id="pt">
<a class="header-anchor" href="#pt"></a>
PT
</h2><p>When it comes to acquiring resources, PT is still king. My first recommendation remains qBittorrent from the fnOS app center.<br>
As for how to use the software and where to find torrents, that is left to your own exploration. In any case, it is best to maintain a decent share ratio and seeding time.<br>
One for all, all for one.</p>
<h2 id="photos">
<a class="header-anchor" href="#photos"></a>
Photos
</h2><p>Image management is even easier.<br>
Upload or download photos from all your cloud drives and local devices into the NAS Photos folder. There is no need to carefully organize physical folders beforehand. Once you open the album, it can scan and import automatically. You can also add other local or externally mounted folders under Album - Settings - Folder Management.<br>
In the AI album settings, download the required models first, then run analysis on the unrecognized photos and videos. Classification will happen automatically in the background. All of this runs locally, so if privacy matters more, you can simply leave it disabled.<br>
If you enable GPU acceleration, recognition becomes significantly faster, though that does require installing the proper graphics driver.</p>
<p>I backed up photos from my iPhone, Redmi, and iPad at the same time, which left me with a huge number of duplicates under different filenames. After AI-based recognition and then reviewing similar photos for deduplication, the results were excellent.</p>
<h2 id="other-handy-small-tools">
<a class="header-anchor" href="#other-handy-small-tools"></a>
Other Handy Small Tools
</h2><h3 id="hivisionidphoto">
<a class="header-anchor" href="#hivisionidphoto"></a>
HivisionIDPhoto
</h3><p>For making your own ID photos. Available as a Docker app in the app center.</p>
<h3 id="peazip">
<a class="header-anchor" href="#peazip"></a>
peazip
</h3><p>Compression and decompression through Docker. The built-in archive tool in fnOS file management is currently extremely bare-bones and does not even support split archives properly.</p>
<h3 id="singbox">
<a class="header-anchor" href="#singbox"></a>
singbox
</h3><p>Docker-based. An occasionally necessary little miraculous tool.</p>
<h3 id="fnos-sync">
<a class="header-anchor" href="#fnos-sync"></a>
fnOS Sync
</h3><p>Synchronizes folders from other devices to the NAS. Supports bidirectional sync, download-only, and upload-only.<br>
You need to install the matching client on the other devices first.</p>
<h3 id="text-editor">
<a class="header-anchor" href="#text-editor"></a>
Text Editor
</h3><p>After installing it, you can open txt, yml, log, html, js, md, nfo, and other plain-text files directly from the file manager.</p>
<h3 id="office-preview">
<a class="header-anchor" href="#office-preview"></a>
Office Preview
</h3><p>Lets you open Office files up to 500 MB directly inside the file manager.</p>
<h3 id="omnitools">
<a class="header-anchor" href="#omnitools"></a>
OmniTools
</h3><p>A toolbox that bundles more than ten small utilities together.</p>
<h3 id="baidu-netdisk-for-fnos">
<a class="header-anchor" href="#baidu-netdisk-for-fnos"></a>
Baidu Netdisk for fnOS
</h3><p>&ldquo;Almost&rdquo; ad-free, fairly clean, but you cannot copy file URLs, there is no proper file or folder details page, and it does not seem to show folder sizes either.<br>
Selling the NAS membership separately is terrible.</p>
<h3 id="not-recommended-the-browser-in-the-app-center">
<a class="header-anchor" href="#not-recommended-the-browser-in-the-app-center"></a>
Not Recommended: the Browser in the App Center
</h3><p>This is basically a Dockerized Google Chrome. The web image is blurry because it is streaming the interface instead of rendering pages directly. Chinese input methods do not work properly, downloaded files have to be moved out manually from the app folder, the default Google search engine requires a proxy, though you can switch it to Bing, and download speed is still poor.</p>
<p>So if you need to download something, I strongly recommend first finding the direct link in your local browser, then adding the download task through the fnOS client instead.</p>
<h2 id="summary">
<a class="header-anchor" href="#summary"></a>
Summary
</h2><p>After several days of initial tinkering, this laptop &ldquo;NAS&rdquo; can already manage video, music, photos, and books, while also backing up critical files such as manuals, documentation, manuscripts, PCB files, code, certificates, and passwords.<br>
The next things I want to play with are dashboards, domain names, reverse proxying, IPv6, RSSHub, and an off-site triple-backup setup.</p>
<p>And finally, NetEase Cloud Music can go to hell.</p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/Soyo.JPG" alt="无语"></p>

        
        <hr><p>Published on 2025-10-16 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2025-10-16</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>QSL Card Gallery</title><link>https://www.guzhengsvt.cn/en/post/othernotes/qsl-card-exhibition/</link><pubDate>Thu, 21 Aug 2025 18:44:15 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/qsl-card-exhibition/</guid><description>
<![CDATA[<h1>QSL Card Gallery</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="1-noa-1">
<a class="header-anchor" href="#1-noa-1"></a>
1. Noa-1
</h2><p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/QSL-%E6%A0%87-1.jpeg" alt="Noa-1"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/QSL-%E6%A0%87-2.jpeg" alt="Noa-2.jpeg"></p>
<h3 id="design-notes">
<a class="header-anchor" href="#design-notes"></a>
Design Notes
</h3><p>This one is based on 生盐诺亚 from <em><strong>Blue Archive</strong></em>, one of my favorite characters.</p>
<ul>
<li>The front uses a screenshot from Noa&rsquo;s memorial lobby. She is writing by hand on the floor-to-ceiling window a line from <em>Le Spleen de Paris</em>, specifically &ldquo;The Stranger,&rdquo; by the nineteenth-century French modernist poet Charles Pierre Baudelaire.</li>
</ul>
<blockquote>
<p>Qui aimes-tu le mieux, homme énigmatique, dis?<br>
Enigmatic man, tell me, whom do you love best?</p>
</blockquote>
<p>After that line, I added the ITU zone, CQ zone, and Maidenhead grid. I tried to use a handwriting-style font and stretch it with perspective so the text would look like it had really been written on the glass.</p>
<ul>
<li>On the back, besides the standard QSO information fields, I added a QR code linking to my blog. The background image is a screenshot from an official BA Noa video.</li>
<li><strong>Warning:</strong> I accidentally wrote <em>UCT</em> instead of <em>UTC</em> in the time-zone field. I did not notice it until the next card was already printed. If I ever print a second batch, I will fix it.</li>
</ul>
<h3 id="print-batch">
<a class="header-anchor" href="#print-batch"></a>
Print Batch
</h3><ul>
<li>Batch 1: 200 cards on 300g coated business-card stock, with rounded corners, printed by 久美印业 on Taobao.
<ul>
<li>The cards are not stiff enough, and the back side is hard to write on.</li>
<li>Still plenty left.</li>
</ul>
</li>
</ul>
<h2 id="2-dfh">
<a class="header-anchor" href="#2-dfh"></a>
2. DFH
</h2><p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/%E4%B8%9C%E6%96%B9%E7%BA%A2%E7%9A%84%E5%BF%83%E8%84%8F-1.png" alt="DFH-1"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media//photo/%E4%B8%9C%E6%96%B9%E7%BA%A2%E7%9A%84%E5%BF%83%E8%84%8F-2-%E6%9B%B4%E6%AD%A3.png" alt="DFH-2"></p>
<h3 id="design-notes-1">
<a class="header-anchor" href="#design-notes-1"></a>
Design Notes
</h3><p>The whole design draws from the space-history lyric adaptation song <a href="https://www.bilibili.com/video/BV129mGY3Efe/">《东方红的心脏》</a> by the BiliBili creator <strong>炙弹冰</strong>, itself based on <strong><a href="https://music.163.com/#/song?id=1907751320">シリウスの心臓(天狼星的心脏)</a></strong> by <a href="https://music.163.com/#/artist?id=51020133">ヰ世界情緒</a>.</p>
<ul>
<li>The girl on the right side of the front is the illustration used for 《东方红的心脏》, a personified version of the Dong Fang Hong satellite.</li>
<li>On the left side of the front are two overlapping satellites. The solid one on the left is a screenshot of a 3D model of Dong Fang Hong 1. The colorful one on the right was generated from that image using the <a href="https://lab.magiconch.com/one-last-image/">One Last Image Louvre Generator</a>, producing a gradient look reminiscent of the <em><strong>One Last Kiss</strong></em> cover.</li>
<li>The red and blue elliptical rings around the satellite are written in Morse code. The red one says &ldquo;Long live the People&rsquo;s Republic of China,&rdquo; and the blue one says &ldquo;Long live the great unity of the people of the world,&rdquo; following the wording in the 1955 <em>Standard Telegraph Codebook</em>.</li>
<li>The date on the solid satellite marks the launch of Dong Fang Hong 1 on April 24, 1970, and the day it stopped broadcasting &ldquo;The East Is Red&rdquo; on May 14. That was the satellite&rsquo;s brief life, but also the beginning of China&rsquo;s rise in space.</li>
<li>The date on the colored satellite refers to the British bombardment of Macau on June 21, 1840, which opened the First Opium War, and extends to the founding of the People&rsquo;s Republic of China on October 1, 1949, when the Chinese people finally stood up. It carries not only the humiliation of China&rsquo;s modern history, but also the broader anti-imperialist struggles of many Third World countries seeking independence.</li>
<li>The satellite and the girl are separated by two sine curves symbolizing radio waves.</li>
<li>Compared with <a href="/en/post/othernotes/qsl-card-exhibition/#1-noa-1">Noa-1</a>, this design adds an NFC mark on the back. I plan to add NFC tags to future cards so they can store card data, QSO data, or even trigger music and video playback automatically.</li>
<li>The line below the email on the back, &ldquo;How is one to live through a life wrapped in haze? Cast off hesitation, for the morning sun is both you and me,&rdquo; is a lyric from 《东方红的心脏》 that I love very much.</li>
<li>In the lower-right corner on the back, I added a short numbered score of <em>The East Is Red</em> to echo the Dong Fang Hong 1 theme of the card.</li>
</ul>
<p>I also designed a PCB version of this card. It includes an NFC chip and antenna coil, and I placed a red LED at the chest of the figure on the front. When a phone scans it at close range, the LED lights up, which fits the &ldquo;Heart of Dong Fang Hong&rdquo; theme perfectly.<br>
Because the cost is high, I plan to give the PCB version only to the first station I work in each call area, or to the first station contacted through a given operating mode.</p>
<p>The inscription on the Monument to the People&rsquo;s Heroes reads:</p>
<blockquote>
<p>Eternal glory to the people&rsquo;s heroes who laid down their lives in the People&rsquo;s Liberation War and the people&rsquo;s revolution over the past three years!<br>
Eternal glory to the people&rsquo;s heroes who laid down their lives in the People&rsquo;s Liberation War and the people&rsquo;s revolution over the past thirty years!<br>
Going back further to 1840, eternal glory to the people&rsquo;s heroes who laid down their lives in every struggle against internal and external enemies, for national independence and for the freedom and happiness of the people!</p>
</blockquote>
<p>Even today, the Dong Fang Hong satellite is still in orbit, quietly witnessing seas turn into mulberry fields.</p>
<h3 id="print-batch-1">
<a class="header-anchor" href="#print-batch-1"></a>
Print Batch
</h3><p><strong>Paper version:</strong></p>
<ul>
<li>Batch 1: 150 cards on 350g pearlescent paper, rounded corners, printed via 未来既是未来 on Xianyu
<ul>
<li>Plenty left</li>
</ul>
</li>
</ul>
<p><strong>PCB version:</strong></p>
<ul>
<li>Batch 1: 50 cards with colored silkscreen from JLCPCB, NT3H2111W0FHKH XQF, rounded corners
<ul>
<li>Plenty left</li>
</ul>
</li>
</ul>

        
        <hr><p>Published on 2025-08-21 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2025-08-21</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Typecho Comments Import to Waline</title><link>https://www.guzhengsvt.cn/en/post/othernotes/typecho%E8%AF%84%E8%AE%BA%E5%AF%BC%E5%85%A5waline/</link><pubDate>Sat, 19 Apr 2025 16:56:24 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/typecho%E8%AF%84%E8%AE%BA%E5%AF%BC%E5%85%A5waline/</guid><description>
<![CDATA[<h1>Typecho Comments Import to Waline</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <p>A couple of days ago, I migrated my blog posts from Typecho to Hugo. Just setting up the Front Matter parameters and reconfiguring image links took considerable effort.<br>
The value of a blog lies first in its articles, followed closely by its comments. Comments are proof that the blog has made an impact in both the digital and real worlds, carrying the interactions between people. More personally, comments from all corners of the globe are precious memories and a part of what makes &ldquo;me&rdquo;.<br>
Thus, it&rsquo;s essential to copy the original comments to the corresponding articles on the new site.</p>
<h2 id="configuring-waline">
<a class="header-anchor" href="#configuring-waline"></a>
Configuring Waline
</h2><p>Unlike dynamic blogs like WordPress or Typecho, static blogs can only rely on external comment systems. There are many options, each with its pros and cons. After referring to <a href="https://cloud.tencent.com/developer/article/2196035">this article</a> and checking the official websites of various comment systems, I ultimately chose <a href="https://waline.js.org">Waline</a>.<br>
Waline&rsquo;s <a href="https://waline.js.org/guide/get-started/">Chinese documentation</a> is detailed and comprehensive. After setting up the <a href="https://leancloud.app">LeanCloud</a> database and <a href="https://vercel.com/">Vercel</a> server, you can access the comment management dashboard at <code>https://&lt;your-server-domain&gt;/ui/</code>. Register as an administrator for the first time, where you can manage comments and users.</p>
<h2 id="exporting-typecho-comments">
<a class="header-anchor" href="#exporting-typecho-comments"></a>
Exporting Typecho Comments
</h2><p>Typecho is quite old, with a smaller user base compared to more active communities like Hexo or WordPress. There&rsquo;s also very little documentation available online.<br>
The only solution I found was a plugin called <a href="https://github.com/lizheming/typecho-export-valine">Export2Valine</a> (also mentioned in Waline&rsquo;s documentation) by <a href="https://imnerd.org">Yi Hong Yuan Luo</a>, which exports Typecho comments to Valine.<br>
However, it hasn&rsquo;t been updated in three years, and testing showed it only imports the first comment. Looking at the exported <code>jsonl</code> file, it&rsquo;s clear that all comment data was fully exported.</p>
<p>First, install the plugin in Typecho (make sure to rename the plugin folder to &ldquo;Export2Valine&rdquo;!).</p>
<p>Referencing <a href="https://www.imwxz.com/posts/74f52ab0.html">this article</a> about migrating from Typecho to Hexo, the plugin is outdated and requires some modifications.<br>
Locate <code>Action.php</code> in the plugin folder and modify lines 42 onwards as follows (to track parent comments):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nv">$arr</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;objectId&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;coid&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;QQAvatar&#34;</span> <span class="o">=&gt;</span> <span class="s2">&#34;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;comment&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;text&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;insertedAt&#34;</span> <span class="o">=&gt;</span> <span class="k">array</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;__type&#34;</span> <span class="o">=&gt;</span> <span class="s2">&#34;Date&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;iso&#34;</span> <span class="o">=&gt;</span> <span class="nv">$time</span>
</span></span><span class="line"><span class="cl">  <span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;createdAt&#34;</span> <span class="o">=&gt;</span> <span class="nv">$time</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;updatedAt&#34;</span> <span class="o">=&gt;</span> <span class="nv">$time</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;ip&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;ip&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;link&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;url&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mail&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;mail&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;nick&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;author&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;ua&#34;</span> <span class="o">=&gt;</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;agent&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;url&#34;</span> <span class="o">=&gt;</span> <span class="s2">&#34;/</span><span class="si">{</span><span class="nv">$slug</span><span class="si">}</span><span class="s2">.html&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span><span class="p">(</span><span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;parent&#34;</span><span class="p">])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nv">$arr</span><span class="p">[</span><span class="s2">&#34;pid&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;parent&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="nv">$arr</span><span class="p">[</span><span class="s2">&#34;rid&#34;</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">getRootId</span><span class="p">(</span><span class="nv">$comment</span><span class="p">[</span><span class="s2">&#34;coid&#34;</span><span class="p">]);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>No other changes are needed.<br>
Next, go to Typecho&rsquo;s admin panel → Console → Export Comments. Open the downloaded <code>jsonl</code> file and delete the header line:<br>
<code>#filetype:JSON-streaming {&quot;type&quot;:&quot;Class&quot;,&quot;class&quot;:&quot;Comment&quot;}\n\n</code>.<br>
Save the file, close it, and change the file extension to <code>.json</code>.</p>
<h2 id="fixing-the-json-format">
<a class="header-anchor" href="#fixing-the-json-format"></a>
Fixing the JSON Format
</h2><p>The exported <code>jsonl</code> file contains escaped Chinese characters and is a single line, making it hard to read.<br>
To convert it into a more readable, editable, and importable <code>json</code> format, use your editor&rsquo;s <strong>Find and Replace</strong> feature to replace <code>}\n{</code> with:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="err">},</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span></code></pre></div><p>In Xcode, you can insert line breaks by clicking the small magnifying glass icon on the left.</p>
<p>Now, each line represents one comment object.</p>
<p>Similarly, to separate the fields within each comment object, replace <code>&quot;,&quot;</code> with:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;</span>
</span></span></code></pre></div><p>Now, each comment object contains multiple data fields, structured like this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span><span class="nt">&#34;objectId&#34;</span><span class="p">:</span><span class="s2">&#34;3&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;QQAvatar&#34;</span><span class="p">:</span><span class="s2">&#34;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;comment&#34;</span><span class="p">:</span><span class="s2">&#34;\u6d4b\u8bd5\u4e00\u4e0b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;insertedAt&#34;</span><span class="p">:{</span><span class="nt">&#34;__type&#34;</span><span class="p">:</span><span class="s2">&#34;Date&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;iso&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:37:07.000Z&#34;</span><span class="p">},</span><span class="nt">&#34;createdAt&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:37:07.000Z&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;updatedAt&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:37:07.000Z&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;ip&#34;</span><span class="p">:</span><span class="s2">&#34;223.104.150.16&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;link&#34;</span><span class="p">:</span><span class="kc">null</span><span class="p">,</span><span class="nt">&#34;mail&#34;</span><span class="p">:</span><span class="s2">&#34;2868301418@qq.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;nick&#34;</span><span class="p">:</span><span class="s2">&#34;2868301418&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;ua&#34;</span><span class="p">:</span><span class="s2">&#34;Mozilla\/5.0 (Linux; Android 13; V2171A Build\/TP1A.220624.014; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/109.0.5414.86 MQQBrowser\/6.2 TBS\/046605 Mobile Safari\/537.36 V1_AND_SQ_8.9.63_4190_HDBM_T QQ\/8.9.63.11380 NetType\/4G WebP\/0.3.0 Ap&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;url&#34;</span><span class="p">:</span><span class="s2">&#34;\/\u4ea4\u53cb\u6807\u51c6-\u548c\u5e73\u5171\u5904\u4e94\u9879\u539f\u5219.html&#34;</span><span class="p">}</span><span class="err">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span><span class="nt">&#34;objectId&#34;</span><span class="p">:</span><span class="s2">&#34;4&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;QQAvatar&#34;</span><span class="p">:</span><span class="s2">&#34;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;comment&#34;</span><span class="p">:</span><span class="s2">&#34;\u600e\u4e48ip\u4e0d\u5bf9&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;insertedAt&#34;</span><span class="p">:{</span><span class="nt">&#34;__type&#34;</span><span class="p">:</span><span class="s2">&#34;Date&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;iso&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:38:15.000Z&#34;</span><span class="p">},</span><span class="nt">&#34;createdAt&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:38:15.000Z&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;updatedAt&#34;</span><span class="p">:</span><span class="s2">&#34;2023-06-27T09:38:15.000Z&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;ip&#34;</span><span class="p">:</span><span class="s2">&#34;223.104.150.16&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;link&#34;</span><span class="p">:</span><span class="kc">null</span><span class="p">,</span><span class="nt">&#34;mail&#34;</span><span class="p">:</span><span class="s2">&#34;2868301418@qq.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;nick&#34;</span><span class="p">:</span><span class="s2">&#34;2868301418&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;ua&#34;</span><span class="p">:</span><span class="s2">&#34;Mozilla\/5.0 (Linux; Android 13; V2171A Build\/TP1A.220624.014; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/109.0.5414.86 MQQBrowser\/6.2 TBS\/046605 Mobile Safari\/537.36 V1_AND_SQ_8.9.63_4190_HDBM_T QQ\/8.9.63.11380 NetType\/4G WebP\/0.3.0 Ap&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;url&#34;</span><span class="p">:</span><span class="s2">&#34;\/\u4ea4\u53cb\u6807\u51c6-\u548c\u5e73\u5171\u5904\u4e94\u9879\u539f\u5219.html&#34;</span><span class="p">}</span><span class="err">,</span>
</span></span></code></pre></div><h3 id="common-field-descriptions">
<a class="header-anchor" href="#common-field-descriptions"></a>
Common Field Descriptions
</h3><ol>
<li><strong>objectId</strong>: Unique identifier for the comment (e.g., &ldquo;4&rdquo; or &ldquo;5&rdquo;)</li>
<li><strong>QQAvatar</strong>: QQ avatar link (currently empty)</li>
<li><strong>comment</strong>: Comment content (contains Unicode escape sequences, e.g., <code>\u600e\u4e48</code> means &ldquo;how&rdquo;)</li>
<li><strong>insertedAt/createdAt/updatedAt</strong>: Timestamp (ISO 8601 format)</li>
<li><strong>ip</strong>: Commenter&rsquo;s IP address</li>
<li><strong>link</strong>: Link provided by the commenter (may be <code>null</code>)</li>
<li><strong>mail</strong>: Commenter&rsquo;s email address</li>
<li><strong>nick</strong>: Commenter&rsquo;s nickname</li>
<li><strong>ua</strong>: User agent (browser/device info)</li>
<li><strong>url</strong>: Relative path of the commented post</li>
</ol>
<h3 id="special-fields">
<a class="header-anchor" href="#special-fields"></a>
Special Fields
</h3><ol start="11">
<li><strong>pid</strong>: Parent comment ID</li>
<li><strong>rid</strong>: Root comment ID</li>
</ol>
<p>If <code>&quot;link&quot;</code> is <code>null</code>, there&rsquo;s no line break between <code>&quot;link&quot;</code> and <code>&quot;mail&quot;</code>. JSON is insensitive to line breaks, so this can be ignored.<br>
Now, wrap the entire content in <code>[ ]</code> at the beginning and end of the file, then save it.</p>
<h2 id="modifying-comment-attributes">
<a class="header-anchor" href="#modifying-comment-attributes"></a>
Modifying Comment Attributes
</h2><p>The file can now be imported into LeanCloud, but some adjustments are still needed.</p>
<p><code>Export2Valine</code> sets the URL for comment associations as <code>\/slug</code>, e.g., <code>&quot;url&quot;: &quot;\/Summary-of-the-First-Semester-of-Junior-Year.html&quot;</code>, where <code>\/</code> is an escaped <code>/</code>.</p>
<p>To link comments to the new blog&rsquo;s posts, manually update the <code>url</code> to match the new blog&rsquo;s post links.</p>
<p>For example, my Hugo-generated site has folders like <code>zh-cn</code>, <code>zh-tw</code>, <code>en</code>, and <code>ja</code> (due to multi-language support). Chinese posts are under <code>/zh-cn/post/category/</code>.<br>
In my local blog source files, posts are organized into folders by category, e.g., <code>/content/post/Thoughts/最近写的诗.md</code> generates a relative URL like <code>zh-cn/post/thoughts/最近写的诗</code>.</p>
<p>If your new blog&rsquo;s posts are in the root directory with unchanged names, no URL modifications are needed.<br>
If they&rsquo;re all under <code>/post/</code>, use Find and Replace to change:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;url&#34;</span><span class="err">:&#34;\/</span>
</span></span></code></pre></div><p>to:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;url&#34;</span><span class="err">:&#34;\/post\/</span>
</span></span></code></pre></div><p>For my case, I temporarily replaced it with:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;url&#34;</span><span class="err">:&#34;\/zh-cn\/post\/</span>
</span></span></code></pre></div><p>Similarly, comments on standalone pages like &ldquo;Friends&rdquo; or &ldquo;Thoughts&rdquo; should be updated to their new relative URLs.<br>
For example, the Friends page:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;url&#34;</span><span class="err">:&#34;\/links.html</span>
</span></span></code></pre></div><p>should be replaced with:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;url&#34;</span><span class="err">:&#34;\/zh-cn\/friend\/</span>
</span></span></code></pre></div><p>First, apply bulk replacements for <code>post</code> and standalone pages where possible. Otherwise, it&rsquo;ll be tedious to modify them after import.</p>
<p>When using Find and Replace, try to target the largest common segments to avoid accidental changes.<br>
<em><strong>Remember to escape <code>\/</code>!!!</strong></em></p>
<h2 id="importing-to-leancloud">
<a class="header-anchor" href="#importing-to-leancloud"></a>
Importing to LeanCloud
</h2><p>In LeanCloud&rsquo;s console → Data Storage → Import &amp; Export, select the modified JSON file, set <code>Class</code> to <code>Comment</code>, and import.</p>
<p><em><strong>Note</strong></em>: If you&rsquo;ve previously tested Waline comments or attempted to import <code>Comment</code>, Waline may have already created the <code>Comment</code> class. Subsequent imports will fail silently (LeanCloud may claim success, but no new data appears).</p>
<p>To fix this, go to the console → Structured Data, delete the <code>Comment</code> class, and try importing again. The LeanCloud page may not refresh immediately—use <code>Ctrl+F5</code> to force a cache refresh.</p>
<p>After a successful import, manually adjust the <code>url</code> for each comment.<br>
For example, my posts need to be categorized under <code>&quot;url&quot;:&quot;\/zh-cn\/post\/category\/</code>. Use LeanCloud&rsquo;s <strong>batch operations</strong> and <strong>filtering</strong> features to streamline this process.</p>
<h2 id="afterword">
<a class="header-anchor" href="#afterword"></a>
Afterword
</h2><p>Organizing comments didn&rsquo;t take too long—120 comments, mostly my own musings on the &ldquo;Thoughts&rdquo; page, allowed for bulk URL fixes. The handful of reader comments were scattered across just a few posts, making them easy to update via filtering. Whether that&rsquo;s a good or bad thing, I’m not sure (laughs).</p>
<p>Whether they&rsquo;re my soliloquies or others&rsquo; remarks, each comment holds unique significance. Revisiting them periodically brings new reflections.<br>
As I said at the beginning, they&rsquo;re traces of my growth, proof of my existence, and part of &ldquo;me&rdquo;.</p>
<p>And you, dear reader, are the one who gives me value.</p>
<p>If you have time, please leave a comment—it’ll genuinely make my day (as long as it’s kind, of course).</p>
        
        <hr><p>Published on 2025-04-19 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2025-04-19</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Common Hugo Blog Resources</title><link>https://www.guzhengsvt.cn/en/post/othernotes/hugo%E5%8D%9A%E5%AE%A2%E5%B8%B8%E7%94%A8%E8%B5%84%E6%96%99/</link><pubDate>Tue, 15 Apr 2025 16:42:35 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/hugo%E5%8D%9A%E5%AE%A2%E5%B8%B8%E7%94%A8%E8%B5%84%E6%96%99/</guid><description>
<![CDATA[<h1>Common Hugo Blog Resources</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="hugo-common-commands">
<a class="header-anchor" href="#hugo-common-commands"></a>
Hugo Common Commands
</h2><table>
  <thead>
      <tr>
          <th>Command</th>
          <th>Function</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>hugo version</code></td>
          <td>Check version</td>
          <td>Displays the currently installed Hugo version</td>
      </tr>
      <tr>
          <td><code>hugo new site &lt;project_name&gt;</code></td>
          <td>Create new site</td>
          <td>Generates Hugo&rsquo;s directory structure</td>
      </tr>
      <tr>
          <td><code>hugo new post/&lt;filename.md&gt;</code></td>
          <td>Create new post</td>
          <td>Generates an article under <code>content/post/</code> with default Front Matter</td>
      </tr>
      <tr>
          <td><code>hugo server</code></td>
          <td>Start local server</td>
          <td>Launches local preview at <code>http://localhost:1313</code> by default</td>
      </tr>
      <tr>
          <td><code>hugo server -D</code></td>
          <td>Start with drafts</td>
          <td><code>-D</code> parameter shows articles marked <code>draft: true</code></td>
      </tr>
      <tr>
          <td><code>hugo</code></td>
          <td>Build website</td>
          <td>Generates static files from Markdown content to <code>public/</code> directory</td>
      </tr>
      <tr>
          <td><code>hugo -D &lt;output_dir&gt;</code></td>
          <td>Build including drafts</td>
          <td>Full site build (including drafts) for pre-publishing</td>
      </tr>
      <tr>
          <td><code>hugo --minify</code></td>
          <td>Minify build files</td>
          <td>Compresses HTML/CSS/JS during build to reduce size</td>
      </tr>
      <tr>
          <td><code>hugo config</code></td>
          <td>View configuration</td>
          <td>Displays current site configuration</td>
      </tr>
      <tr>
          <td><code>hugo list drafts</code></td>
          <td>List drafts</td>
          <td>Shows all articles marked <code>draft: true</code></td>
      </tr>
      <tr>
          <td><code>hugo list future</code></td>
          <td>List future posts</td>
          <td>Articles with <code>date</code> set after current time</td>
      </tr>
      <tr>
          <td><code>hugo list expired</code></td>
          <td>List expired posts</td>
          <td>Articles where <code>expiryDate</code> has passed</td>
      </tr>
      <tr>
          <td><code>hugo --gc</code></td>
          <td>Garbage collection</td>
          <td>Cleans outdated resources like thumbnail caches</td>
      </tr>
  </tbody>
</table>
<h2 id="reimu-theme-icon_font">
<a class="header-anchor" href="#reimu-theme-icon_font"></a>
reimu Theme icon_font
</h2><table>
  <thead>
      <tr>
          <th>Icon Class</th>
          <th>Hex Code</th>
          <th>Chinese Meaning</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>.tag-wrap</code> / <code>.article-tag-list-link</code></td>
          <td><code>\e622</code></td>
          <td>Tag</td>
      </tr>
      <tr>
          <td><code>.category-wrap</code> / <code>.article-category-link</code></td>
          <td><code>\e604</code></td>
          <td>Category</td>
      </tr>
      <tr>
          <td><code>.article-date-link</code></td>
          <td><code>\e606</code></td>
          <td>Date</td>
      </tr>
      <tr>
          <td><code>.article-comment-link</code></td>
          <td><code>\e608</code></td>
          <td>Comment</td>
      </tr>
      <tr>
          <td><code>.icon-copyright</code></td>
          <td><code>\e60a</code></td>
          <td>Copyright</td>
      </tr>
      <tr>
          <td><code>.icon-brush</code></td>
          <td><code>\e618</code></td>
          <td>Brush / Beautify</td>
      </tr>
      <tr>
          <td><code>.icon-coffee</code></td>
          <td><code>\e607</code></td>
          <td>Coffee</td>
      </tr>
      <tr>
          <td><code>.icon-eye</code></td>
          <td><code>\e60f</code></td>
          <td>View / Browse</td>
      </tr>
      <tr>
          <td><code>.icon-user</code></td>
          <td><code>\e628</code></td>
          <td>User</td>
      </tr>
      <tr>
          <td><code>#main-nav-toggle</code></td>
          <td><code>\e62f</code></td>
          <td>Navigation menu toggle</td>
      </tr>
      <tr>
          <td><code>#nav-rss-link</code></td>
          <td><code>\e61f</code></td>
          <td>RSS subscription</td>
      </tr>
      <tr>
          <td><code>#nav-search-btn</code> / <code>.reimu-search-input-icon</code></td>
          <td><code>\e631</code></td>
          <td>Search button</td>
      </tr>
      <tr>
          <td><code>#nav-sun-btn</code></td>
          <td><code>\e621</code></td>
          <td>Sun icon (light theme)</td>
      </tr>
      <tr>
          <td><code>#nav-moon-btn</code></td>
          <td><code>\e617</code></td>
          <td>Moon icon (dark theme)</td>
      </tr>
      <tr>
          <td><code>#nav-circle-half-stroke-btn</code></td>
          <td><code>\e641</code></td>
          <td>Half-circle (theme toggle)</td>
      </tr>
      <tr>
          <td><code>.icon-copy</code></td>
          <td><code>\e60c</code></td>
          <td>Copy</td>
      </tr>
      <tr>
          <td><code>.icon-chevron-down</code></td>
          <td><code>\e609</code></td>
          <td>Down arrow</td>
      </tr>
      <tr>
          <td><code>.icon-check</code></td>
          <td><code>\e636</code></td>
          <td>Checkmark / Confirm</td>
      </tr>
      <tr>
          <td><code>.icon-times</code></td>
          <td><code>\e637</code></td>
          <td>Cross / Close</td>
      </tr>
      <tr>
          <td><code>.icon-calendar</code></td>
          <td><code>\e605</code></td>
          <td>Calendar</td>
      </tr>
      <tr>
          <td><code>.icon-pencil</code></td>
          <td><code>\e61b</code></td>
          <td>Pencil / Edit</td>
      </tr>
      <tr>
          <td><code>.icon-clock</code></td>
          <td><code>\e613</code></td>
          <td>Clock</td>
      </tr>
      <tr>
          <td><code>.post-sticky</code></td>
          <td><code>\e627</code></td>
          <td>Pinned</td>
      </tr>
      <tr>
          <td><code>.reimu-popup .popup-btn-close</code></td>
          <td><code>\e626</code></td>
          <td>Popup close</td>
      </tr>
      <tr>
          <td><code>.ais-pagination--item__previous</code></td>
          <td><code>\e601</code></td>
          <td>Previous page</td>
      </tr>
      <tr>
          <td><code>.ais-pagination--item__next</code></td>
          <td><code>\e630</code></td>
          <td>Next page</td>
      </tr>
      <tr>
          <td><code>.icon-github</code></td>
          <td><code>\e619</code></td>
          <td>GitHub icon</td>
      </tr>
      <tr>
          <td><code>.icon-google</code></td>
          <td><code>\e611</code></td>
          <td>Google icon</td>
      </tr>
      <tr>
          <td><code>.icon-facebook</code></td>
          <td><code>\e60e</code></td>
          <td>Facebook icon</td>
      </tr>
      <tr>
          <td><code>.icon-twitter</code></td>
          <td><code>\e62a</code></td>
          <td>Twitter icon</td>
      </tr>
      <tr>
          <td><code>.icon-instagram</code></td>
          <td><code>\e615</code></td>
          <td>Instagram icon</td>
      </tr>
      <tr>
          <td><code>.icon-linkedin</code></td>
          <td><code>\e614</code></td>
          <td>LinkedIn icon</td>
      </tr>
      <tr>
          <td><code>.icon-pinterest</code></td>
          <td><code>\e61a</code></td>
          <td>Pinterest icon</td>
      </tr>
      <tr>
          <td><code>.icon-youtube</code></td>
          <td><code>\e62d</code></td>
          <td>YouTube icon</td>
      </tr>
      <tr>
          <td><code>.icon-vimeo</code></td>
          <td><code>\e629</code></td>
          <td>Vimeo icon</td>
      </tr>
      <tr>
          <td><code>.icon-flickr</code></td>
          <td><code>\e612</code></td>
          <td>Flickr icon</td>
      </tr>
      <tr>
          <td><code>.icon-dribbble</code></td>
          <td><code>\e610</code></td>
          <td>Dribbble icon</td>
      </tr>
      <tr>
          <td><code>.icon-behance</code></td>
          <td><code>\e602</code></td>
          <td>Behance icon</td>
      </tr>
      <tr>
          <td><code>.icon-bilibili</code></td>
          <td><code>\e603</code></td>
          <td>Bilibili icon</td>
      </tr>
      <tr>
          <td><code>.icon-weibo</code></td>
          <td><code>\e62c</code></td>
          <td>Weibo icon</td>
      </tr>
      <tr>
          <td><code>.icon-zhihu</code></td>
          <td><code>\e62e</code></td>
          <td>Zhihu icon</td>
      </tr>
      <tr>
          <td><code>.icon-reddit</code></td>
          <td><code>\e61c</code></td>
          <td>Reddit icon</td>
      </tr>
      <tr>
          <td><code>.icon-tumblr</code></td>
          <td><code>\e625</code></td>
          <td>Tumblr icon</td>
      </tr>
      <tr>
          <td><code>.icon-medium</code></td>
          <td><code>\e616</code></td>
          <td>Medium icon</td>
      </tr>
      <tr>
          <td><code>.icon-deviantart</code></td>
          <td><code>\e60b</code></td>
          <td>DeviantArt icon</td>
      </tr>
      <tr>
          <td><code>.icon-stackoverflow</code></td>
          <td><code>\e620</code></td>
          <td>StackOverflow icon</td>
      </tr>
      <tr>
          <td><code>.icon-keybase</code></td>
          <td><code>\e61e</code></td>
          <td>Keybase icon</td>
      </tr>
      <tr>
          <td><code>.icon-telegram</code></td>
          <td><code>\e623</code></td>
          <td>Telegram icon</td>
      </tr>
      <tr>
          <td><code>.icon-discord</code></td>
          <td><code>\e60d</code></td>
          <td>Discord icon</td>
      </tr>
      <tr>
          <td><code>.icon-steam</code></td>
          <td><code>\e624</code></td>
          <td>Steam icon</td>
      </tr>
      <tr>
          <td><code>.icon-email</code></td>
          <td><code>\e63c</code></td>
          <td>Email</td>
      </tr>
      <tr>
          <td><code>.sidebar-toc-btn</code></td>
          <td><code>\e633</code></td>
          <td>Table of Contents button</td>
      </tr>
      <tr>
          <td><code>.sidebar-common-btn</code></td>
          <td><code>\e632</code></td>
          <td>Sidebar common button</td>
      </tr>
      <tr>
          <td><code>.sidebar-top .arrow-up</code></td>
          <td><code>\e634</code></td>
          <td>Up arrow</td>
      </tr>
      <tr>
          <td><code>.icon-link</code></td>
          <td><code>\e639</code></td>
          <td>Link</td>
      </tr>
      <tr>
          <td><code>.icon-globe</code></td>
          <td><code>\e638</code></td>
          <td>Globe / Multilingual</td>
      </tr>
      <tr>
          <td><code>.icon-creative-commons</code></td>
          <td><code>\e63a</code></td>
          <td>Creative Commons license</td>
      </tr>
      <tr>
          <td><code>.icon-taichi</code></td>
          <td><code>\e62b</code></td>
          <td>Taichi (dark mode)</td>
      </tr>
      <tr>
          <td><code>.icon-weixin</code></td>
          <td><code>\e640</code></td>
          <td>WeChat icon</td>
      </tr>
      <tr>
          <td><code>.icon-qq</code></td>
          <td><code>\e63e</code></td>
          <td>QQ icon</td>
      </tr>
      <tr>
          <td><code>.icon-image</code></td>
          <td><code>\e63f</code></td>
          <td>Image icon</td>
      </tr>
  </tbody>
</table>

        
        <hr><p>Published on 2025-04-15 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2025-04-15</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Windows Customization Journey</title><link>https://www.guzhengsvt.cn/en/post/othernotes/windows%E7%BE%8E%E5%8C%96%E5%8E%86%E7%A8%8B/</link><pubDate>Sat, 07 Sep 2024 21:12:17 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/windows%E7%BE%8E%E5%8C%96%E5%8E%86%E7%A8%8B/</guid><description>
<![CDATA[<h1>Windows Customization Journey</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="preface">
<a class="header-anchor" href="#preface"></a>
Preface
</h2><p>As the saying goes, <strong>the pinnacle of customization is the default</strong>.</p>
<p>While the default Windows setup can efficiently handle all tasks, it’s undeniably <em>ugly</em>.</p>
<p>With a performance-overkill PC at hand, it’s entirely justified to pursue some aesthetic refinements and simplifications to satisfy my <del>high-end taste</del> (lol).</p>
<p>Below, I’ll share the customization software/solutions I’m currently using or have tried.</p>
<h2 id="current-desktop-setup">
<a class="header-anchor" href="#current-desktop-setup"></a>
Current Desktop Setup
</h2><ul>
<li><strong>TranslucentTB</strong>: Transparent/acrylic taskbar effects</li>
<li><strong>Sapphire</strong>: Desktop icon interaction optimization</li>
<li><strong>Wallpaper Engine</strong>: To minimize GPU and memory usage, I’ve chosen a 4K video of Noa’s memory lobby from <em>Blue Archive</em> as the wallpaper. The entire Wallpaper Engine process consumes about 100 MB of RAM.</li>
<li><strong>Rainmeter</strong>: Only using an audio visualizer for aesthetics because Noa is already beautiful enough 😋.<br>
Previously tried hardware monitoring widgets but found them useless except for inducing anxiety—so I ditched them.</li>
<li><strong>QQ customization</strong>, <strong>NetEase Cloud Music customization</strong>, <strong>cursor customization</strong>, <strong>Obsidian themes and plugins</strong>, plus <strong>Edge browser’s iTab new tab page</strong> and various practical extensions. My current workflow is perfectly comfortable.</li>
</ul>
<p>Here are some screenshots:<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/4189283242.png" alt="Desktop Showcase 1.png"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/1078908045.png" alt="Desktop Showcase 2.png"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/2569059367.png" alt="QQ Customization Showcase.png"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/2176031375.png" alt="Edge Showcase.png"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/994680139.png" alt="Obsidian Showcase.png"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/130206377.png" alt="Task Manager Showcase.png"></p>
<p>Under this workflow, the browser consumes the most memory, while Wallpaper Engine is the primary GPU load. From login to full autostart, it takes under 10 seconds, all within acceptable performance limits.</p>
<p><strong>Specs:</strong></p>
<ul>
<li>12400 F</li>
<li>7700 XT</li>
<li>32G DDR4</li>
<li>2K 180Hz HDR display</li>
<li>Windows 11 Pro 23H2</li>
</ul>
<h2 id="qq-customization">
<a class="header-anchor" href="#qq-customization"></a>
QQ Customization
</h2><p>==Highly recommended!==<br>
QQ is something most Chinese people are forced to use yet despise—ads, pop-ups, unwanted entertainment pages, and a cluttered, dysfunctional interface.<br>
The Windows client improved somewhat with QQ 9, but the annoying elements are creeping back. Old habits die hard.<br>
To avoid enduring this daily torture, the great open-source-minded tinkerers of the Chinese internet have launched QQ overhaul projects. Today, I’ll introduce one such masterpiece: <strong>LiteLoaderQQNT</strong>.</p>
<p>LiteLoader is a plugin platform for QQNT. After installation, you can download numerous plugins.<br>
GitHub project: <a href="https://github.com/LiteLoaderQQNT/LiteLoaderQQNT">LiteLoaderQQNT: QQNT Plugin Loader: Lightweight · Minimalist · Open-Source · Furry</a></p>
<p>Recommended plugins:</p>
<ol>
<li><a href="https://github.com/xinyihl/LiteLoaderQQNT-PluginInstaller/tree/main">PluginInstaller</a>: LiteLoaderQQNT plugin installer for easy updates and one-click install/restart. Install this first to simplify adding other plugins.</li>
<li><a href="https://github.com/ltxhhz/LL-plugin-list-viewer/tree/main">LL-plugin-list-viewer</a>: Browse, install, and update LiteLoaderQQNT plugins. Lists most plugins with direct GitHub links. Installation is buggy—some plugins require manual setup, or QQ may fail to start. Best used as a plugin/theme viewer.</li>
<li><a href="https://github.com/xiyuesaves/LiteLoaderQQNT-lite_tools/tree/v4">Lite Tools</a>: A multi-functional toolbox to avoid hunting for plugins. Key features:
<ul>
<li><strong>Chat interface美化</strong> (Telegram-style: avatars, timestamps, left-aligned messages)</li>
<li>Remove badges, VIP tags, and other clutter.</li>
<li>Right-click quick search for text/images, message-to-image conversion.</li>
<li>Highlight options and special messages.</li>
<li><strong>Mini-program links → URL cards</strong>, remember last position, quick &ldquo;+1&rdquo; (repeater).</li>
<li><strong>Message preview</strong>: Generates Telegram-like preview cards from the first link in a message.</li>
<li>Local emojis.</li>
<li>Message suffixes.</li>
<li><strong>Cache and highlight recalled messages</strong>.</li>
<li><strong>Custom backgrounds</strong> with brightness, transparency, and blur effects.</li>
<li><strong>Simplify sidebar</strong> (all features toggleable).</li>
<li>Input box and message box toggles.</li>
<li>…and more.</li>
</ul>
</li>
<li><a href="https://github.com/xh321/LiteLoaderQQNT-QR-Decode/tree/master">QR Decode</a>: Decodes QR codes in QQNT chat images.</li>
<li><a href="https://github.com/xh321/LiteLoaderQQNT-Directly-Jump/tree/master">Directly Jump</a>: Skips QQ’s link warning page.</li>
<li><a href="https://github.com/MUKAPP/LiteLoaderQQNT-DeepL/tree/main">DeepL for QQNT</a>: Integrates DeepL translation.</li>
<li><a href="https://github.com/d0j1a1701/LiteLoaderQQNT-Markdown/tree/v4">Markdown</a>: Adds Markdown support. Only renders for other QQNT users with this plugin, so mostly useless.</li>
<li><a href="https://github.com/xh321/LiteLoaderQQNT-Kill-Update/tree/master">Kill-Update</a>: Blocks QQ update prompts (some plugins lag behind QQ updates).</li>
<li><a href="https://github.com/mo-jinran/window-on-top/tree/v4">Window On Top</a>: Adds window pinning.</li>
</ol>
<p>Themes aren’t covered here—a decluttered QQNT is already decent-looking.<br>
There are also AI plugins (e.g., ChatGPT), but I’m too lazy to set up APIs (<del>no money</del>).</p>
<h2 id="netease-cloud-music-customization">
<a class="header-anchor" href="#netease-cloud-music-customization"></a>
NetEase Cloud Music Customization
</h2><p>==Highly recommended!==<br>
China’s music platforms love bloat: communities, short videos, VIP spam.<br>
A music app needs just a few core features. While standalone players exist, they lack platform perks like song searches, comments, and collaborative listening. Sunk costs (playlists, artist follows, purchases) trap users in these ecosystems.</p>
<p>Thankfully, NetEase Cloud Music has plugins. Here’s the loader: <strong>BetterNCM</strong></p>
<ul>
<li>Official site: <a href="https://microblock.cc/betterncm">MicroBlock | BetterNCM</a></li>
<li>GitHub: <a href="https://github.com/MicroCBer/BetterNCM">GitHub - MicroCBer/BetterNCM</a></li>
<li>Community guide: <a href="https://v2e2npdz15.feishu.cn/docx/UZkSd9d46o4fVOxaPNBcGXSenme">Feishu Doc</a></li>
</ul>
<p>BetterNCM lets you download/update themes and plugins in-app—no GitHub scavenger hunts.</p>
<p><strong>Recommended themes:</strong></p>
<ul>
<li><strong>Materia You</strong>: Minimalist, solid-color backgrounds. Multiple color schemes.<br>
<img src="https://guzhengsvt.top/usr/uploads/2024/09/1596889912.png" alt="Materia You.png"></li>
</ul>
<p><strong>Recommended plugins:</strong></p>
<ol>
<li>
<p><strong>RoundCornerNCM</strong>: Rounded corners (Windows 11 only).</p>
</li>
<li>
<p><strong>MikuPlugin</strong>: Toggles UI elements (e.g., hide videos/livestreams).<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/439024086.png" alt="MikuPlugin.png"></p>
</li>
<li>
<p><strong>Apple-Style Lyrics</strong>: Apple Music-like layout + lyric source switching.<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/663279809.png" alt="Apple Lyrics.png"></p>
</li>
<li>
<p><strong>What’s This Cover?</strong>: Adds thumbnails to song lists (may cause lag).<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/1807448404.png" alt="Cover Plugin.png"></p>
</li>
<li>
<p><strong>RuLyrics</strong>: Desktop lyrics (word-by-word, dual-line). Custom fonts/colors. Taskbar embedding (may conflict with TranslucentTB).<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/09/285235071.png" alt="Desktop Lyrics.png"></p>
</li>
<li>
<p>Explore more plugins—but check GitHub Issues for conflicts/dependencies.</p>
</li>
</ol>
<h2 id="wallpaper-engine">
<a class="header-anchor" href="#wallpaper-engine"></a>
Wallpaper Engine
</h2><p>==Essential!==<br>
The legendary <em>Steam小红车</em>.</p>
<p>Pros:</p>
<ul>
<li><strong>Vast library</strong>: Steam Workshop offers endless free wallpapers.</li>
<li><strong>Diversity</strong>: Videos, GIFs, web pages, etc. Many include extras like music visualizers.</li>
<li><strong>Easy discovery</strong>: Filter by resolution, type, age rating, etc.</li>
<li><strong>User-friendly</strong>: Steam integration means no VPNs. Most wallpapers are plug-and-play.</li>
<li><strong>Mobile sync</strong>: Android app mirrors PC wallpapers.</li>
</ul>
<p><strong>Warning</strong>: Complex web/4K wallpapers can hog GPU/VRAM. Tweak FPS/effects in settings.</p>
<p>Only con: Costs 19 RMB on Steam—a fair price.</p>
<p><a href="https://store.steampowered.com/app/431960/Wallpaper_Engine/">Steam Store Page</a></p>
<h2 id="translucenttb">
<a class="header-anchor" href="#translucenttb"></a>
TranslucentTB
</h2><p>==Highly recommended!==<br>
Tiny tool for transparent/acrylic taskbars. Minimal resource usage.</p>
<p>GitHub: <a href="https://github.com/TranslucentTB/TranslucentTB">TranslucentTB</a><br>
Chinese localization: <a href="https://github.com/kasuganosoras/TranslucentTB-CN">TranslucentTB-CN</a></p>
<h2 id="rainmeter">
<a class="header-anchor" href="#rainmeter"></a>
Rainmeter
</h2><p>==Highly recommended!==<br>
The OG desktop widget tool. Create or import <strong>skins</strong> for:</p>
<ul>
<li>Hardware monitors (CPU/GPU/RAM)</li>
<li>Audio visualizers</li>
<li>Media players</li>
<li>Anime trackers</li>
<li>Image galleries</li>
<li>etc.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Too many widgets = lag</li>
<li>Some skins are resource-heavy</li>
<li>Requires tinkering</li>
</ul>
<p>Official site: <a href="https://www.rainmeter.net/">Rainmeter</a><br>
Chinese site: <a href="https://rainmeter.cn/">Rainmeter.cn</a><br>
GitHub: <a href="https://github.com/rainmeter/rainmeter">Rainmeter</a><br>
Chinese forum: <a href="https://bbs.rainmeter.cn/">BBS</a></p>
<h2 id="start11">
<a class="header-anchor" href="#start11"></a>
Start11
</h2><p>Start menu/taskbar customizer:</p>
<ul>
<li>Revert to Win7/10 styles. Adjust colors, transparency, spacing, alignment.</li>
<li><strong>Enhanced search</strong>: Integrates Edge tabs into results. Option to hide web content!</li>
<li>Custom start button icons, menu backgrounds, taskbar textures.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Paid (35 RMB lifetime, 30-day trial).</li>
<li>Felt sluggish for me.</li>
<li>Conflicts with TranslucentTB.</li>
</ul>
<p>Official site: <a href="https://stardock-start11.com/">Start11</a><br>
Chinese site: <a href="https://www.start11.cn/">Start11.cn</a><br>
Steam (mixed reviews): <a href="https://store.steampowered.com/app/1694750/Start11_v2/">Start11 v2</a></p>
<h2 id="maple-customization-toolbox">
<a class="header-anchor" href="#maple-customization-toolbox"></a>
Maple Customization Toolbox
</h2><p>File Explorer/Start menu/window美化:<br>
Features:</p>
<ul>
<li>Custom fonts, light/dark modes (experimental).</li>
<li><strong>Background images</strong> for Explorer/Start Menu/Settings.</li>
<li>Color schemes (title bars, headers, progress bars).</li>
<li>Icon packs (desktop/Explorer).</li>
<li><strong>Window effects</strong>: Transparency, blur, acrylic, Mica.</li>
<li><strong>Title bar buttons</strong>: macOS-style, rounded tabs, scrollbars.</li>
<li>Preset sharing.</li>
<li>Plugins for extended functionality.</li>
</ul>
<p>Evaluation:</p>
<ul>
<li>Easy to use, moderate resource usage.</li>
<li>Plugins/configs add replayability.</li>
<li><strong>Incompatible with TranslucentTB</strong>.</li>
<li>Explorer crashes, missing backgrounds, unthemed toolbars (may be fixed).</li>
<li>Low-res backgrounds. Dark mode images can obscure text.</li>
<li>Free but not fully open-source (account required).</li>
</ul>
<p>Download: <a href="https://winmoes.com/tools/12948.html">枫の主题社</a></p>
<h2 id="sapphire">
<a class="header-anchor" href="#sapphire"></a>
Sapphire
</h2><p>==Highly recommended!==<br>
Desktop icon/layout overhaul. <strong>Revamps interaction</strong>:</p>
<ul>
<li>Adjust grid spacing.</li>
<li><strong>Folders-as-grids</strong> (phone-style).</li>
<li>Custom icon/grid size, rounding, transparency.</li>
<li>Font changes.</li>
<li><strong>Minimal mode</strong> (hide filenames).</li>
<li>Animations.</li>
<li><strong>Dock栏</strong> (Mac/phone-style, vertical/horizontal).</li>
<li><strong>Folder previews</strong> (hover to peek, click to expand in-place).</li>
<li><strong>Steam shortcut optimization</strong>.</li>
<li><strong>Double-click to hide icons</strong> (per-item toggle).</li>
<li>~100 MB RAM, negligible GPU.</li>
<li>Custom wallpapers (partial Wallpaper Engine support).</li>
<li>Multi-monitor.</li>
</ul>
<p>Cons:</p>
<ul>
<li><strong>Advanced folder preview crashes with many files</strong> (awaiting fixes).</li>
<li>No layout saving (though crashes don’t reset it).</li>
<li>Windows 11 only.</li>
<li>Overrides desktop right-click (no customization yet).</li>
</ul>
<p>GitHub: <a href="https://github.com/hymnly133/Sapphire-EnhancedDesktop">Sapphire-EnhancedDesktop</a></p>
<h2 id="cursor-customization">
<a class="header-anchor" href="#cursor-customization"></a>
Cursor Customization
</h2><p>Many cursor packs are shared online. Pick your vibe. Installation is simple.</p>
<p>Two recommendations (subtle yet unique):</p>
<ol>
<li><strong>Genshin Nahida cursor</strong>: <a href="https://www.bilibili.com/video/BV14P411c7ap/">Bilibili video</a></li>
<li><strong>Blue Archive Millennium cursor</strong> (simple/cute, currently using):<br>
GitHub: <a href="https://github.com/makipom/BlueArchive-Cursors">BlueArchive-Cursors</a></li>
</ol>
        
        <hr><p>Published on 2024-09-07 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2024-09-07</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Automatic Dial-up Internet Connection and Task Scheduler</title><link>https://www.guzhengsvt.cn/en/post/othernotes/%E8%87%AA%E5%8A%A8%E6%8B%A8%E5%8F%B7%E4%B8%8A%E7%BD%91%E4%B8%8E%E4%BB%BB%E5%8A%A1%E8%AE%A1%E5%88%92%E7%A8%8B%E5%BA%8F/</link><pubDate>Wed, 12 Jun 2024 19:34:52 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/%E8%87%AA%E5%8A%A8%E6%8B%A8%E5%8F%B7%E4%B8%8A%E7%BD%91%E4%B8%8E%E4%BB%BB%E5%8A%A1%E8%AE%A1%E5%88%92%E7%A8%8B%E5%BA%8F/</guid><description>
<![CDATA[<h1>Automatic Dial-up Internet Connection and Task Scheduler</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <h2 id="annoying-network-shenanigans">
<a class="header-anchor" href="#annoying-network-shenanigans"></a>
Annoying Network Shenanigans
</h2><p>My desktop connects to the campus network via Ethernet but requires dial-up to get online. <strong>Hilariously</strong>, Tencent’s ancient, never-updated TIM client throws an error popup if it tries to log in without an internet connection.<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/06/2343467847.png" alt="TIM Error"></p>
<p>Every time I boot up, I have to manually enable dial-up in the settings. TIM’s auto-start feature kicks in first, triggering the error and making the auto-start function look <strong>comically</strong> useless.</p>
<p>So, I wrote a batch script to auto-connect and set it to run at startup via Task Manager. But it launches at the same priority as TIM, often failing to establish the connection before TIM auto-logins and throws the error.</p>
<p>The workaround? Using Task Scheduler to delay TIM’s launch by 15 seconds after the auto-connect script runs.<br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/06/2593746197.png" alt="Delayed TIM Startup"></p>
<p><img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/06/2438765248.png" alt="Reconnect Script"><br>
<em>(For convenience, I placed the batch file in the Startup folder. The hidden, highest-priority Task Scheduler job kept failing because <strong>brilliant</strong> Huorong security blocked undetectable scheduled tasks. After several debugging attempts where the script only ran after login, I almost thought my settings were wrong.)</em><br>
<img src="https://cdn.jsdelivr.net/gh/GuZhengSVT/Hugo-media/2024/06/2362191046.png" alt="Hilarious Huorong"></p>
<p>Now, my ¥68 fingerprint reader feels <strong>utterly pointless</strong>.<br>
Wondering if any tech-savvy folks in my contacts have a better solution.</p>
<p>I do have a wireless card, but it’s unreliable. The campus network often requires web authentication. My VPN auto-start clashes with this—I have to:</p>
<ol>
<li>Disable VPN → 2. Complete web auth → 3. Re-enable VPN → 4. Close TIM’s error → 5. Restart TIM.<br>
Infuriating doesn’t even begin to cover it.</li>
</ol>
<hr>
<h2 id="dial-up-script">
<a class="header-anchor" href="#dial-up-script"></a>
Dial-Up Script
</h2><p>Create a text file (<code>.txt</code>), paste the following, <strong>save it</strong>, then rename with a desired title (e.g., <code>reconnect_internet</code>, preferably in English) and change the extension to <code>.bat</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bat" data-lang="bat"><span class="line"><span class="cl">rasdial <span class="s2">&#34;Your_Connection_Name&#34;</span> <span class="s2">&#34;Username&#34;</span> <span class="s2">&#34;Password&#34;</span>
</span></span></code></pre></div><h2 id="auto-dial-on-boot--reconnect">
<a class="header-anchor" href="#auto-dial-on-boot--reconnect"></a>
Auto-Dial on Boot &amp; Reconnect
</h2><ol>
<li>Right-click Windows icon (Start) → <strong>Computer Management</strong> → <strong>Task Scheduler</strong> → <strong>Task Scheduler Library</strong>.</li>
<li><strong>Create Task</strong> → Set name (e.g., &ldquo;Reconnect&rdquo;) →
<ul>
<li>Run whether user is logged on or not →</li>
<li>Run with highest privileges (optional) →</li>
<li><strong>DO NOT HIDE!</strong> →</li>
<li>Configure for your OS (e.g., Windows 11 users select Windows 10).</li>
</ul>
</li>
<li><strong>Triggers</strong> → New →
<ul>
<li>At startup (for auto-connect).</li>
<li>New → On event →
<ul>
<li>Log: <strong>Application</strong> (scroll to second-last) →</li>
<li>Source: <strong>RasClient</strong> → OK (for auto-reconnect).</li>
</ul>
</li>
</ul>
</li>
<li><strong>Actions</strong> → New → Start program → Browse to select your <code>.bat</code> → OK.</li>
</ol>
<p>Confirm (requires entering your Microsoft account password, not PIN. If errors persist, check the &ldquo;General&rdquo; tab for correct user account matching.)</p>

        
        <hr><p>Published on 2024-06-12 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2024-06-12</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item><item><title>Obsidian Basics</title><link>https://www.guzhengsvt.cn/en/post/othernotes/obsidian%E5%9F%BA%E7%A1%80/</link><pubDate>Tue, 27 Jun 2023 00:41:26 +0800</pubDate><author>lvbowen040427@163.com (孤筝)</author><guid>https://www.guzhengsvt.cn/en/post/othernotes/obsidian%E5%9F%BA%E7%A1%80/</guid><description>
<![CDATA[<h1>Obsidian Basics</h1><p>Author: 孤筝(lvbowen040427@163.com)</p>
        
          <p><a href="https://publish.obsidian.md/help-zh/%E7%94%B1%E6%AD%A4%E5%BC%80%E5%A7%8B">Obsidian Chinese Help</a></p>
<h2 id="interface">
<a class="header-anchor" href="#interface"></a>
Interface
</h2><p><a href="https://zhuanlan.zhihu.com/p/428519519">Want to master Obsidian in one hour? This guide is all you need. [Complete Step-by-Step Obsidian Tutorial] - Zhihu</a><br>
Create vault folder → Create note category folders within vault → Organize notes<br>
Obsidian Help<br>
Top bar of notes → Vertical three-dot menu → Split view<br>
<a href="https://zhuanlan.zhihu.com/p/409409946">Wyatt: Building Your Workspace [Complete Step-by-Step Obsidian Tutorial] 216 upvotes · 7 comments<img src="https://pic1.zhimg.com/v2-2323eabf712e3ebaae40c322ec18dde0_180x120.jpg" alt=""></a><br>
View outline in top-left corner</p>
<h2 id="plugins-to-be-explored">
<a class="header-anchor" href="#plugins-to-be-explored"></a>
Plugins (To Be Explored)
</h2><p><a href="https://zhuanlan.zhihu.com/p/403001135">Wyatt: How to Install Plugins? [Complete Step-by-Step Obsidian Tutorial] 264 upvotes · 63 comments<img src="https://pic2.zhimg.com/v2-51f1cdbc1b5891f62958cdb379dc5561_180x120.jpg" alt=""></a></p>
<h2 id="text-formatting">
<a class="header-anchor" href="#text-formatting"></a>
Text Formatting
</h2><p>Use <code># + space</code> for headings. More <code>#</code> = lower heading level.</p>
<h4 id="emphasis">
<a class="header-anchor" href="#emphasis"></a>
Emphasis
</h4><p><em>Italic</em><br>
<em>Alternative italic syntax (English underscores)</em></p>
<h4 id="bold">
<a class="header-anchor" href="#bold"></a>
Bold
</h4><p><strong>Bold example (double asterisks)</strong><br>
<strong>Or double underscores</strong></p>
<h4 id="combined-usage">
<a class="header-anchor" href="#combined-usage"></a>
Combined Usage
</h4><p><em>This is <strong>italic + bold</strong></em></p>
<h4 id="strikethrough">
<a class="header-anchor" href="#strikethrough"></a>
Strikethrough
</h4><p><del>Since we&rsquo;re pursuing excitement, let&rsquo;s go all the way</del></p>
<h4 id="highlight">
<a class="header-anchor" href="#highlight"></a>
Highlight
</h4><p>==Sparse shadows slant across clear shallow water; subtle fragrance wafts under moonlit dusk==</p>
<h4 id="footnotes">
<a class="header-anchor" href="#footnotes"></a>
Footnotes
</h4><p>Text<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>Text</p>
<h4 id="comments">
<a class="header-anchor" href="#comments"></a>
Comments
</h4><ul>
<li>Inline comments<br>
%%This is an inline comment%%</li>
<li>Multi-line comments<br>
%%<br>
You are the mist of an April dawn<br>
Twilight carries the softness of wind<br>
Stars twinkle unintentionally<br>
Fine rain dots the flowers<br>
%%</li>
</ul>
<h2 id="lists">
<a class="header-anchor" href="#lists"></a>
Lists
</h2><ul>
<li>Unordered list
<ul>
<li>Hyphen + space</li>
<li>Tab + hyphen + space to indent as sub-item</li>
</ul>
</li>
<li>Ordered list
<ol>
<li>Number + period + space</li>
<li>Similarly, tab + number + period + space for indentation</li>
<li></li>
</ol>
</li>
</ul>
<h2 id="images">
<a class="header-anchor" href="#images"></a>
Images
</h2><ul>
<li>
$$![Engelbart](image_URL)$$</li>
<li>![[Pasted image 20230625203344.png]]</li>
<li>Adjust width
<ul>
<li>
$$![Engelbart|100](image_link)$$</li>
<li>![[Pasted image 20230625203536.png]]</li>
</ul>
</li>
</ul>
<h2 id="external-links">
<a class="header-anchor" href="#external-links"></a>
External Links
</h2><h4 id="linking-to-notesimages-in-vault">
<a class="header-anchor" href="#linking-to-notesimages-in-vault"></a>
Linking to notes/images in vault
</h4><ul>
<li>$http://obsidian.md - automatic!$
<ul>
<li><em>Web link (URL displayed as-is, $ for formatting only)</em></li>
</ul>
</li>
<li>$[obsidian](http://obsidian.md)$
<ul>
<li><em>Web link (display text in brackets)</em></li>
</ul>
</li>
</ul>
<h4 id="obsidian-url">
<a class="header-anchor" href="#obsidian-url"></a>
Obsidian URL
</h4><p>Obsidian URIs typically follow this format:<br>
</p>
$$obsidian://action?param1=value&param2=value$$<p><br>
Where <code>action</code> specifies the operation and <code>value</code> are parameters.<br>
Example for opening a note:<br>
</p>
$$[Note name alias](obsidian://open?path=absolute_note_path)$$<p><br>
<strong>Note: Use correct brackets/colons (Chinese/English)</strong><br>
Example:<br>
<a href="#ZgotmplZ">Open Calculus</a><br>
Here, <code>path</code> requires absolute file path.</p>
<ul>
<li><em>Open vault (folder only, no specific file)</em><br>

$$[name](obsidian://open?vault=vault_name/vault_ID)$$<br>
<a href="#ZgotmplZ">Open Notes Folder</a></li>
<li><em>Open Calculus under Math folder (<strong>.md</strong> extension optional)</em><br>
<a href="#ZgotmplZ">Calculus</a></li>
</ul>
<h4 id="others">
<a class="header-anchor" href="#others"></a>
Others
</h4><ul>
<li>
<p>Escape spaces in URLs as <code>%20</code></p>
<ul>
<li>The <code>%</code> in <code>%20</code> must be escaped as <code>\%</code></li>
</ul>
</li>
<li>
<p>Alternatively, wrap space-containing content with <code>&lt;&gt;</code></p>
</li>
<li>
<p>Blockquote<br>
</p>
$$> Quoted content$$<p><br>
</p>
$$\ Source$$<p><br>
Example:</p>
</li>
</ul>
<blockquote>
<p>Time is a one-way journey; both good and bad are scenery.<br>
\ — &ldquo;Time Thief&rdquo; by Jin Wenqi</p>
</blockquote>
<ul>
<li>
<p>Inline code<br>
<code>#include&lt;stdc++.h&gt;</code></p>
</li>
<li>
<p>Code block<br>
<em>Obsidian recognizes content wrapped in six backticks as code blocks and formats them accordingly. Code blocks support syntax highlighting—declare the language on the first line (after opening backticks) for specific highlighting.</em></p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-C++" data-lang="C++"><span class="line"><span class="cl"><span class="cp">#include&lt;stdc++.h&gt;  
</span></span></span><span class="line"><span class="cl"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>  
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(){</span>  
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span>  
</span></span><span class="line"><span class="cl">    <span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">b</span><span class="o">=</span><span class="mi">2</span><span class="p">;</span><span class="n">b</span><span class="o">&lt;</span><span class="mi">10</span><span class="p">;</span><span class="n">b</span><span class="o">++</span><span class="p">){</span>  
</span></span><span class="line"><span class="cl">        <span class="n">a</span><span class="o">+=</span><span class="n">b</span><span class="p">;</span>  
</span></span><span class="line"><span class="cl">        <span class="n">cout</span><span class="o">&lt;&lt;</span><span class="n">a</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>  
</span></span><span class="line"><span class="cl">    <span class="p">}</span>  
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>  
</span></span><span class="line"><span class="cl"><span class="p">}</span>  
</span></span></code></pre></div><p><a href="https://en.wikipedia.org/wiki/Percent-encoding">More encoding standards</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Corresponding footnote<br>
Footnotes can span multiple lines using indentation&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>

        
        <hr><p>Published on 2023-06-27 at <a href='https://www.guzhengsvt.cn/'>孤筝の温暖小家</a>, last modified on 2023-06-27</p><p>All articles on this blog are licensed under the BY-NC-SA license agreement unless otherwise stated. Please indicate the source when reprinting!</p>]]></description><category>OtherNotes</category></item></channel></rss>