普通视图

发现新文章,点击刷新页面。
昨天以前Lao_Liu's Blog

パソコンをアップグレードした

2026年1月18日 21:30

お久しぶりだよね。去年はとても忙しいくて、一年間ほとんど何も書けなかった。

今回は初めて日本語で文章をまとめてみた。きっとあちこちに問題があると思うので、文法の部分は ChatGPT さんにお願いすることにする。


二週間前、友達が「それからグラフィックカードの値段はどんどん上がっていくんじゃない?」と言っていた。最近メモリーの値上がりに伴って、グラフィックカードの値段も上昇するだろう。メモリー不足の解消されるのは 2028 年ごろと聞いたが、実際にグラフィックカードが値下がりするのもその頃かもしれない。

そう考えると、新しいグフラィックカードに交換したくなってきた。

最初の構成

  • CPU - AMD R7 5800
  • GPU - Nvidia RTX 3070
  • メモリー - DDR4 3200MT/s 8G x 4 (32G)
  • 電源 - 650W

GPU と電源のアップグレード

まもなく、AMD の RX 7900XTX を購入することにした。NVIDIA と比べて、ほぼ同じ計算性能と VRAM を持ちながら、値段は6〜7割ほど安い。

電源も合わせて 850W のものをアップグレードした。

XFX - RX 7900XTX

購入前にカードの長さとケース内部のスペースを測って、「ギリギリ入るだろう」と思っていたが、実際全く足りなかった。

今夜こそ絶対に完成させたいと思い、手ノコでケースを切ることにした。

切ったケース

ケースは決して綺麗とは言えない仕上がりになったが、カードはちょうど収まった。

ちょうど入れる

電源シュラウドからファンの厚さの距離しかない

期待して電源を入れてみたが、PC が起動しなかった。

マザーボードのスピーカーが「ピピ」と短く2回鳴った。POST チェックでエラーが発生したという意味だ。

メモリーの故障を疑い、4枚のメモリーを A2 スロットに一枚ずつ挿して試したが、起動しない。

最小構成も組み直し、電源・メモリー・GPU・ CPU ・ BIOS も全て確認した。

最小構成

その結果、マザーボードが故障していると判断した。

閉じ込められているかりんちゃん

原因ははっきりしないが、おそらくケースを切断した時の金属粉がマザーボードに飛び散ったこのかもしれない。

仕方ないので、マザーボードも交換することにした。

マザーボードの交換

AM4 はすでに古いプラットフォームなので、できるだけ安いマザーボードでようと思った。

そこで、中古の ASUS B550M-K を購入した。

ASUS B550M-K

このマザーボードの PCIe スロットの位置が以前のものよりも下側にあり、切り取ったケースの口と合わなくなった。この機会にケースも新しくすることにした。

中古のマザーボードを取り付けて前所有者の設定をクリアすると、すぐに映像が出た。

いよいよできた

これで今回のトラブル続きの旅も、ようやく終わる……はずだった。

GPU の本気を出してくれない

AMD R7 5800(中国 Lenovo の OEM 版、X 無し)の PBO とメモリーのオーバークロックを設定して VRChat に入ってみた。

あれ、なぜか FPS が伸びない。

結構低いスコア

ネット上のチュートリアルを参考にしてゲームやシステムの設定を調整したが、大きくは変わらない。

HWInfo64 でデータを集めて分析した結果、CPU がボトルネックになっており、GPU の性能が全く発揮できていないことがわかった。

半日ほど悩んで末、CPU も交換することにした。つまり、プラフォーム全体のアップグレードに踏み切ることになった。

プラフォームアップグレード

選んだのは MSI B850M GAMING PLUS WIFI6E と AMD R7 7800X3D のセット。

白いマザーボードと強い CPU

メモリーもアップグレードが必要だが、この時期の価格は本当に厳しい。ただ、フリマアプリでちょうど良い値段の Asguard DDR5 5200 16GB x 2 を見つけ、すぐに購入した。

新しいマザーボードの設計がとても親切で、取り付けが非常に楽だった。基板上の表示や、NVMe SSD を固定しやすくするロック式ネジなど、細部にこだわりが感じられた。

ハードウェアの組み立ては1時間ほどで終わり、その後のオーバークロック設定に2〜3時間かかった。

最終結果

スコアが高くなった

努力は裏切らず、VRCMark v2 のスコアは大幅に向上した。デスクトップの FPS は約3倍、VR の FPS は約2倍に上がった。

アバター軽量化

新しいプラットフォームを待つ間も、VRChat の性能観察を続けていた。

より軽いアバター(ここではネコチャン)を使うと、R7 5800 でも 90FPS が出る。しかし結構重いアバター(大好きなかりんちゃん)だと FPS が 40 前後まで落ちた。

この2つの状況と VRMark v2 の性能データを基に ChatGPT に相談したところ、重いアバターは CPU の負担が大きく、CPU Wait 時間が高いことが原因と判明した。

Unity の Avatar Dynamics やステートマシンなどが CPU に負担をかけている可能性が高いとのことだった。

その分析をもとに、アバターのギミックを多く無効化したところ、実際に FPS が向上した。

最終の構成

  • CPU - AMD R7 7800X3D
  • GPU - AMD RX 7900XTX
  • メモリー - DDR5 5200MT/s 16G x 2 (32G)
  • 電源 - 850W

最初の構成と比べて、変わらず使っているのは CPU クーラーと NVMe SSD くらいになった。

我再也不能不假思索

2024年11月12日 23:30

正值下班时间,你拖着疲惫的身体漫步街头。地铁站的入口熙熙攘攘,那是回家的方向。

正要走下地铁站路口的阶梯时,你发现了一个小孩子正朝着上行方向的电动扶梯走去。那是个连路都还走不清楚的孩子。

他的父母呢?你正张望着,希望能找到那个冒失的,或许正在专心看着手机而放松了警惕的父亲或母亲。

孩子朝着电梯摇摇晃晃地走了几步。想从上行的电梯往下走,这对于成年人都不是一件容易的事情,何况是小孩子。他大概刚踩上运行着的扶梯就会摔倒吧,真危险。你这么想着,稍微放慢了一些脚步,继续观察着孩子,也在观察着是否有人会出手拦住他。

你看到一个上了些年纪,头发有些发白的老人。他双手都拎着东西,是柴米油盐,重量拉低了他的双肩。他会帮忙吗?

你想起了上周,也是在下班的时间点,与即将乘坐的是同一个班次的地铁上,你幸运地找到了车厢里的最后一个座位。椅背上有没有贴着“爱心座位”的标志,你已经不记得了。你和今天一般疲惫,正在漫无目的地滑着手机屏幕,打发着无聊的通勤时间。视线越过手机屏幕,你瞥见一个老人,头发有些发白,双手都拎着重物,站在你的面前。

要让出座位吗?你一边滑动手机,一边思考着。“刚下班,大家都很辛苦”,你想起了在食堂偶然间听到的同事间的对话,“虽然我怀孕了,很需要一个座位。不过看到大家都这么累,我也不好说些什么了”。是啊,刚刚完成了一天工作的你,正需要充分的休息,哪怕是在地铁里坐下十几分钟对你也是无比的重要。想到这里,你底下了头,继续看起了手机……

也许是双手的重物让老人无暇顾及他人,迫使他加快步伐向下走去,他并没有发现那个正朝着上行扶梯走去的小孩子。此时孩子又向着扶梯迈出了几步。再往前几步,就踏上扶梯出口的金属盖板了。接下来会发生的事情难以想象。

会有人帮忙的吧?你继续张望着,同时心中也在盘算着——拦住了这个孩子,就意味着得守着他,直到那个粗心的父母匆匆赶来。谁知道要等多久,绝对是赶不上马上要到站的地铁了。你尝试把目光瞥向其他地方,似乎不再去看那个孩子,他就会安然无恙。但你做不到。

有一个阿姨快步走上前来,是要来帮忙的吗?你有一些即视感,仿佛之前在哪里见过这位大约四十岁出头,看上去有些憔悴的阿姨。

那是前几个月的一个早晨,你刚入职公司不久。向来遵守规矩的你今天也准时来到地铁站,乘上与昨天、前天、大前天都是同一时刻到站的地铁,这样就能准时到达公司,给大家留下一个好印象。地铁缓缓驶入站台,车门在悦耳的提示声中打开。此时,隔壁车门处却传来不和谐的声音。你循声望去,有人摔倒在列车与站台的间隙处,是一个看着四十岁左右的女性。是不小心绊倒了吗?还是没有吃早饭,有些低血糖了?不管怎样,她瘫坐在门口,久久没有起身。

要去扶一下吗?你迟疑了一会儿,没有上车。地铁站里有那么多保安,他们应该会处理好吧。扶起来之后,肯定得陪着她,直到有工作人员来照看才能离开吧,那今天早上要迟到了。你思考片刻,还是踏上了地铁,但还是转过身来,透过车窗继续观察。你看到有人和地铁站的保安一同将这位女性搀扶至阶梯边,地铁的门得以关闭,你可以准时到达公司了。想到这里,你的心安定了一些……

可惜的是,阿姨也没有注意到一个孩子正全然无知地朝着危险走去,就走下了楼梯。孩子摇摇晃晃地向前迈步,顷刻间,一只脚已经踏上了扶梯的盖板,再向前几步,就到了不断运转着的扶梯。

这样下去那个孩子肯定会摔下去的,你稍稍将行走的方向朝扶梯偏移了些许,做好了冲刺、抓住孩子的准备。同时,你也祈祷着能有人抢先你一步出手,并收拾剩下的残局。

一步、又一步,真的没有人肯帮忙一下吗?或许此刻真的只有我一个人注意到了这个孩子?你的视线游离,大步朝着扶梯走去,却被一个飞跃而过的身影叫停了步伐。

“小朋友,等一下。你的爸爸妈妈呢?”是一个年轻人,背着皮包,打扮时髦。他拦住了孩子,一只大手挡住了孩子前往扶梯的路,将孩子推离了危险。

看到这里,悬在空中的石头落地,你便也随着大流走下了阶梯。只不过,在那之后,在等候地铁时、坐在地铁中、或是淋浴、发呆之际,你都会回忆起过去的你,那个会毫不犹豫拾起地板上的垃圾、主动让出座位、扶起摔倒的人、给予他人帮助的你。你会不由自主地问自己:

我从什么时候开始,再也不能不假思索地做一件事情?

Soundcore C30i 耳机

2024年6月13日 14:40

我目前在使用的耳机是 Sony LinkBuds,就是那款中间带了个孔的奇怪耳机。

它本是为了商务人士在办公场所使用而设计,收听耳机中声音的同时不会影响听取他人的谈话。它却被我这个耳道经常发炎的人看上了。

我想,中间带了个孔,那耳道内外的空气就是完全流通的,那耳道内肯定不会闷了吧!为了验证这一点,我特地去 Sony 的线下店体验这款耳机。佩戴上 LinkBuds,确实完全没有耳道被封闭的感觉,我便在网上欣然下单了。

然而,经过一段时间的佩戴,才发现我的想法过于天真:看似畅通无阻的气流,在直径不够大的圆环处有阻塞。内部产生的水蒸气无法排出,导致耳道仍然会有潮湿感。佩戴20分钟以上,摘下耳机放入耳机舱,一段时间后取出,会发现耳机舱内有冷凝水。

Sony LinkBuds 仍然不能解决我耳朵发炎的困扰。我便又踏上了寻找新耳机的旅途。

今天便是要介绍我找到的其中一款,有望成为最终解决方案的耳机 —— SoundCore C30i。

外包装

设计

充电盒外观

充电盒开盖

耳机充电盒的外观,以及开盖后的样子如上图所示,就不多介绍了。

开放式耳机相对于入耳式、半入耳式耳机,设计上花样多了不少。我看到的所有款式中,大致可以分为两类:

  • 使用挂钩悬挂在耳朵之后,将扬声器覆盖于耳道口,通过空气传导声音进入耳道的;
  • 夹在耳垂上,耳机本身不覆盖或仅部分覆盖耳道口,通过侧向开口将声音导向耳道的。

SoundCore C30i 属于后者。

耳机本体

我选择的是透明外壳的款式,耳机内部结构清晰可见。

左边耳机的扬声器处有一个开口,这便是朝向耳道的声音出口。

右耳朝上的是耳机背面,金色的圆片是触控传感器。

佩戴感

夹耳的耳机其实还可以再分类。一种是本体柔软、有弹力,有点像悬挂在耳朵上的,将扬声器更多地覆盖于耳道口,以提升传音效率的耳机。

C30i 本体则不可以弯曲,采用虎口般的结构卡在耳垂上。在佩戴时需要找到耳垂比较薄的部分,将耳机从那里套入耳垂,再将耳机推向耳垂较厚的地方,就能牢固固定。看似还是有些松松垮垮,但因为耳机足够轻,不容易被甩掉。

我的感觉是,佩戴上没有什么异物感,但难以做到所谓“戴久了会忘记它的存在”这么夸张。

我尝试连续佩戴了两个多小时,期间耳朵没有任何被堵塞的感觉,且取下后耳朵没有丝毫的潮湿感。确实是完全的开放了!

音质

我的评价是:出奇的好。

因为是一种妥协,我对耳机的音质便不抱任何希望。实际听起来,虽然也有这非封闭式耳机缺乏低音等问题,其实音质相当不错。

EQ 方案

通过调整 EQ 配置,将高低频都拉高(经典两头高调法),效果更是好了许多!

我也听了一段博客,听清说话人的语音也没有任何困难。

多设备连接

我原本买的是飞利浦的一款开放式耳机,到手之后才发现耳机没有双设备连接的功能。我平常有在手机和电脑之间切换使用的需求,少了这个功能实在不能接受。

C30i 支持同时连接两台设备,可以在两台设备间无缝切换。

续航

商品说明上标明了耳机单次续航是 10 个小时,这应该是相当厉害的了。加上充电盒,总共可以提供 30 个小时的续航。

实际用下来,在 2 小时的使用后,耳机的电量没有明显的减少。续航应当是很强劲的。

缺点

目前我看到的一个缺点是,耳机缺少自动休眠功能。将充电盒打开,耳机便会连接所有设备,摘下后仍保持着连接。直到耳机放回充电盒,并盖上盖子后,耳机才会关机。

且耳机缺少佩戴检测,摘下后不会停止音乐播放。似乎耳夹式耳机比较少有这个功能。

这可能会抢占了一些设备的音频输出,不过不算是很大的缺点。

总结

SoundCore C30i 有效解决了我耳道容易发炎的痛点,音质不错,且有多设备连接的功能,满足了作为我主力使用的耳机的所有需求。

日本之行-第二站-奈良

2024年3月11日 00:30

写在前面

23年12月底,我踏上了前往日本的旅途。这是我第一次去日本,是我第一次出国旅行,且只身一人。

本次旅行为14天,我将分多个章节完成所有的游记,记录下我旅行中的点点滴滴、各种感想。这是第二章节,奈良之旅。

近铁、巴士与鹿

使用 Suica 乘坐近铁

奈良距离大阪仅有 30km,乘坐近铁奈良线,摇摇晃晃一个多小时便能到达奈良。

这条线路有分区间准急、准急、急行、快速急行四个速度,每个速度停靠的站点数量不同,票价都相同的。如果想尽快到达奈良,乘坐快速急性是最好的选择。

这天,我纯凭心情来到近铁难波站,坐上了最近一班开往奈良的近铁,似乎是急行。

近铁的运行速度不是很快,叮叮当当地在楼房间穿行着。

在近铁奈良站,奈良线的终点站下了车,距离旅馆所在的奈良公园还有一段距离。由于拖着行李,我选择搭乘公交车。

公交车到站后会向站台一侧倾斜车身,方便乘客上下;上车的门并不固定,可以看车身的贴纸判断;司机会很耐心地等待所有人上车、落座之后才摆正车身、继续前进。

有一些线路是分段计费的,就需要在上车的时候领取一张整理卷,或者先刷一下卡,在下车的时候将钱和整理券一起投入投币机,或者刷一下公交卡就可以了。

在每一个座位的旁边都有一个按钮,如果下一站要下车,按一下就会提醒司机,并且在车头的显示屏上也会显示,车上的所有按钮都会亮起。在公交车到站停稳之前无需先起身,车子停稳后司机也会很耐心地等大家付钱、下车,还会一个一个道谢哦。

相比于地铁,公交的到站时间显得没有那么准确,但不会差太多。在地面运行的公交会受到交通的影响,等候乘客上下车、付钱有时候也会用掉不少的时间,能做到按照时间表运行已经相当厉害了。

路边的鹿

虽然在车上就有看到,果然很多啊 —— 奈良的鹿。

奈良的鹿是散养的,主要集中在奈良公园和春日大社。在奈良设有鹿苑,将受伤或者发情的鹿收养,待它们恢复正常再放回乡中散养。

从车站走到旅馆,一路上都有鹿儿好奇地打量着来自异国他乡的我。

每走一段距离,能看到提示观光客不要“挑逗”鹿儿的提示牌,有些鹿的性格比较差,会用头顶你,追着你不放的。好在大部分鹿都去掉了角,不至于顶伤人。

鹿园宾馆

今天的旅馆确实有些简陋 —— 私人活动空间仅有这么一小间,洗浴和方便都是公用的。不过旅店的氛围很好,有一个共用的客厅,客人们可以在这里吹暖气(冬天还是挺冷的)、喝饮料、聊天。

旅店的工作人员非常热情,替我办理好入住手续后,立刻拿出一张奈良公园的地图,用简单的中文(很厉害哦!)告诉我这附近有哪些好玩的地方。奈良一天的行程就是参考着这张地图安排的。

整理好行装,已是傍晚五点多。按照旅店工作人员以及 Google Maps 的说法,奈良公园里的大部分饮食店都要下班了!遂立刻出门,寻找晚饭的地点。

因为今天是周五吗,明明还有一些旅客在此游玩的,旅店对面的旅游纪念品店已经关门了!沿街打量了几家店铺,也都在收拾着大堂,准备打烊了,完全不像是会接客的样子。大危机,要没晚饭吃了,得走个几公里处了奈良公园,到达奈良市区才有便利店。

路过了一家同样是卖纪念品的商店,发现店内的空间还挺宽敞,也摆着一些桌椅,便问了一下老板还有没有饭吃。运气很好,这家店还没有打烊。

親子丼

可以选择的菜品并不是很多,大多数都是日本的家常菜。我选择了这道绝大部分和食餐馆都会有的家常菜 —— 親子丼。

从厨房门帘的缝隙向里望去,可以隐约看见老板在烹饪着饭菜。明明用得都是同样的工具和食材,有技艺的人做出来的东西就能端上桌卖钱呢。

蛋是我们所谓“半熟”的柔滑状态,鸡肉有一些小烧焦,主要的风味是自古以来人们就离不开的味道 —— 咸味。风味不能说突出,却很平和。它就是一碗很普通、很平常,此时此刻会出现在任意一张餐桌上的饭。

饱饭后,我根据地图的指引,前往东大寺的二月台,观赏日落之景。

二月台的日落1

二月台的日落2

二月台的日落3

二月台的日落4

只用手机相机无法捕捉暗光下的美景。

夕阳柔和而昏暗地照着二月台,四周一片静寂,只能听见洗手亭的潺潺水声。在日落后还停留在奈良公园的游客寥寥,大家都保持着绝对的安静,共享这片难得的静谧。

在台上驻足数分钟,我轻轻踏着脚步走下楼梯,沿着寺院的小路漫步着,离开了东大寺。

此时天已完全黑了,不论是寺院还是神社都已关门,我就这么在奈良公园里漫步着。时不时碰见一群鹿,便从口袋中掏出一块鹿仙贝,掰给鹿儿吃。

果汁

会旅店前在路边的售货机买了一瓶果汁饮料,是不二家的。日本的饮料会标注果汁含量,我觉得很神奇。

春日大社

第二天,去参观了十分出名的春日大社。不过不恰巧,主殿正在维修,将赛钱箱设置在了原处,只能眺望主殿。

在巫女那儿买了点纪念商品,是两只鹿型的小玩偶。一只是木质的,一只是陶制的,鹿儿的嘴中叼着签。忘记留下照片了。

林间小道

离开主殿,走上铺着碎石的小道。

路旁的神社

每走几步,便会出现一间迷你神社,感觉十分奇妙。在这片林海中不知道供奉着多少的神明。

有些人也许是提前来做新年参拜,途中遇到的神社都会十分虔诚地参拜。

在林间漫步了将近一个小时,吸饱了新鲜的空气,我振奋精神,回旅馆取了行李,准备离开奈良。

若草山

拖着行李箱漫步在奈良公园里,我又一次路过了若草山。

若草山也不高,在满是丘陵的福建甚至都算不上山,只是个小土坡。山上的草长得格外整齐,是一座越看越顺眼的山呢。

若草山每年12月初开始封山,直到第二年三月举行烧山仪式后才重新开放。没能上去走走真是可惜。

柿叶寿司 set

在前往近铁奈良站离开奈良前,我路过了一家在网上有着不少讨论的柿叶寿司店,便决定在这里解决午饭。

柿叶寿司其实就是用柿子叶将寿司包起来烹饪。据说柿子叶不仅可以杀菌消毒,还能给寿司提升风味。

想着,既然是奈良的特色菜,肯定要好好品尝一下。我点了一份 2500円 的大套餐,奢侈一下~

左下角的五枚寿司,上方两枚便是柿叶寿司了。下方三角形的寿司也是用不能吃的叶子包着,但好像不是柿子叶;右侧是用腌制过的紫苏叶包的寿司,紫苏叶是可以吃的,风味很独特,我很喜欢;左侧是茶味的卷寿司,也是第一次吃。

柿叶寿司用的是腌制过的鱼,确实带有叶子的香味,很有特色!

除此之外,套餐内还有精致的小菜、一份天妇罗拼盘和一碗素面。吃的我好饱~

线上买的特急卷

乘坐上前往京都的特急电车时还发生了一些小插曲。

坐上车后我才意识到自己坐的是特急的电车,进站时我只刷了基本票,没有购买特急卷。

好在列车上有通过扫描二维码购买特急卷的渠道,也支持借记卡付款。在等待列车发车时,我赶紧买了特急卷,带着行李移动到了指定座位,正式踏上前往京都的旅途。

被我整坏的路由器和服务器

2024年2月12日 18:00

为了搭建 PalWorld 的私服,我又一次踏上了折腾之旅,并成功将路由器和家里的服务器都搞崩了。

好在最后两台设备都恢复如初。我就想来做一下这次“事故”的复盘。

我的设备

本次操作的有两台设备,一台是 x86 软路由,运行 Openwrt;一台是配置比较奇怪的 x86 服务器,运行 PVE。

Openwrt 的网络隔离配置

说在前头,我对 Openwrt 的操作真的是一窍不通。网络相关的知识兴许懂一些,但一到实操环境就纰漏百出了。

由于 PalWorld 服务端启动后便会在游戏的服务器列表公开自己的 IP,且无法关闭这个功能,有比较大的安全隐患。在配置好 PalWorld 服务端所运行的虚拟机后,我决定将这台虚拟机的网络与局域网内其他设备隔离。这也是所有折腾的起源。

配置 VLAN 导致的失联

我能想到的第一个方案便是,给这台虚拟机分配一个与当前局域网不同的网段,并将两个网段隔离。

VLAN 我还是知道的,便着手开始创建新的 VLAN,并保存…连不上路由器了。

急了啊,创建了 VLAN 就代表开启网桥的 VLAN 过滤。目前这个 VLAN 没有分配给任何一个接口,自然是啥都连不上了。好在 Openwrt 有自动回滚的功能,90 秒若设备连不上路由器,便会将刚刚的更改回滚…但不是每次都能成功。

有反复折腾了几次:创建 VLAN、创建接口、创建防火墙的 Zone,分配来分配去,中途也搞砸了几次,配置也都回滚了,直到最后一次尝试,luci 弹出了令人感到安心的“正在回滚配置”的提示,然后就…卡住了。

考虑到 Openwrt 使用的是 squashfs,怀疑是设备上的设置确实回滚了,但内存中的配置没能正确地回去,我将设备断电重启。果不其然,配置回到了应用前的样子。

在尝试配置 VLAN 数次后,我放弃了。即使给虚拟机分配了新网段,也设置好了防火墙规则,虚拟机依旧可以访问到内网网段的设备。

目前我还没有闲心思慢慢研究 Openwrt 的种种配置,便打算换一个方式实现。

配置 PVE 防火墙

第二个方案便是,在 PVE 的防火墙中禁止虚拟机连接内部网段的其他设备了。

启动 Datacenter 防火墙但没有添加允许规则导致的失联

我启用了虚拟机的防火墙,发现配置并没有生效。简单查询后发现,需要将 Datacenter 的防火墙启用,VM 防火墙才有效果。我便看也没看地就开启了 Datacenter 防火墙,发现管理后台页面无法刷新了。此时我才看到屏幕上 Datacenter 防火墙的默认配置 —— IN: DROP.

这下好了,外部连接统统被阻断,也就无谈通过控制面板将防火墙再关闭。

这台服务器是无头的,安装有一张 P100 显卡,但没有显示输出。所以在不动硬件的情况下,我没法通过显示器访问终端的。

通过检索,我了解到了好几种奇技淫巧来关闭 PVE 的防火墙。

挂载并修改 crontab

正好手上有一个硬盘盒,我就将系统盘取下,通过硬盘盒连接到了软路由,尝试修改系统盘里的文件。

使用 fdisk 查看这块系统盘的分区情况,但没有看到熟悉的 ext4 字样。取而代之的是 Linux LVM。LVM 相当于是 Linux 对磁盘进行了再一次的分区,因此挂载就不能是简单的 mount,得用 lvm2 工具。

再敲了几个命令后,我成功将 PVE 分区的 root 文件夹挂载,并在 crontab 中添加了关闭 PVE 防火墙相关的命令。

umount,取下系统盘并装回服务器,开机…没有任何反应,依旧打不开管理面板。是教程给的方法有误吗?

遂又取下盘,挂载到软路由上,却提示该分区忙…我是相当忌惮挂载并修改分区的,生怕损坏了分区,服务器的数据可就全丢了。不敢再继续操作,我得另想出路。

连接显示器,但还是个瞎子

现在能做的就是在服务器上通过 PVE 的 rescue terminal,来修改防火墙的配置了。

我关闭了服务器,取下 P100,换上了 R7 240 这张十年老兵,插上了便携显示器…

error: No suitable video mode found. Booting in blind mode.

你这不是输出字了吗,怎么就进瞎子模式了???

经过查询,我了解到系统正在寻找到显示模式,正是古早电脑终端使用的 80-Column 这样的显示模式。

至于什么是 Blind Mode,我尝试在 GRUB 和 Linux 源码中搜索,都没有结果;为什么 PVE 系统找不到我的 R7 240,可能是缺少驱动吧,现在也无处知晓。

按照网上的教程尝试在 GRUB 引导系统启动时添加显示模式的支持,并没有效果;当我尝试打印支持的显示模式时,发现根本不存在正常的显示模式,故只能放弃直接启动 PVE 的 rescue terminal.

还是得靠救援盘

给服务器插上救援盘,我先是打开了基于 Windows 的 PE 系统,发现显卡是有输出的,但分辨率非常低,且只有黑白画面。看来这张老显卡与这块寨板的相性真的不大好。

在确认 Windows PE 系统下什么都做不了,操作还及其不便,我便退出了 PE 系统,打开了 Ubuntu LiveCD。

这回,显卡倒是可以正常运行。以 80-Column 模式输出文字还是可以轻松办到的。有了命令行,操作也简单了不少。

同为 Linux,操作 LVM 就简单了许多。使用 lvm2 挂载 PVE 的系统分区,并用 chroot 将用户空间切换至 PVE 系统,直接用 systemctl disable pve-firewall 把防火墙关了。

再次进入 PVE,这下开机防火墙就不会启动,赶紧进 Datacenter 防火墙设置里还原误操作的配置。

事后的反思

VLAN 配置的失误

我对 VLAN 配置没有经验,便想着参考网上其他人的配置方法来做。但我查到的都是创建访客 Wi-Fi 这类的配置教程。与我的网络环境的差异在于,访客 Wi-Fi 用的 Interface 与 LAN 不一样,而我需要在 LAN 下配置两个 VLAN,配置方法就有些不同,不能直接搬配置。

我应当要找的是较为通用的,同一个 Interface 下 VLAN 的配置教程(可能单臂路由配置和这个就有些像),再迁移到 Openwrt 上进行配置。

由于软路由只有两个网口,也没法像有四五个网口的路由器一样留下一个作为”不死“的管理口,以降低把路由器配置挂掉的风险。

PVE 原本可以修得更快

原本在将 PVE 系统盘挂载到软路由时,便可以用 systemd 停掉 pve-firewall 但当时我看到 PVE 论坛里有人说在 crontab 里加上 PVE 关闭防火墙的指令便能访问控制面板了,也有人附和说可以用。但我实际操作后发现并没有效果。

而再次尝试挂载 LVM 时,提示分区忙让我不敢继续操作。虽然在服务器上用 LiveCD 直接挂载并没有出现分区忙的情况。

日本之行-第一站-大阪

2024年1月21日 23:00

写在前面

23年12月底,我踏上了前往日本的旅途。这是我第一次去日本,是我第一次出国旅行,且只身一人。

本次旅行为14天,我将分多个章节完成所有的游记,记录下我旅行中的点点滴滴、各种感想。这是第一章节,出境与大阪之旅。

第一次出境

我从上海浦东机场出境。

航班预计上午 9:40 起飞,根据网上的经验教训,国际航班建议提早三个小时到达机场办理值机手续。我早早地起了床,搭上了第一班磁浮列车,在六点五十分左右到达了机场。

拖着行李箱直奔值机柜台,发现队伍已经很长。排了一个多小时的队才轮到我。

我提前在网上进行了值机选座,现场只需要将行李箱托运,打印一下登机牌。工作人员会确认护照和日本 eVisa(电子签证)。

我提前将电子产品和需要独立安检的物品取出,安检也十分顺利。

不过在过海关的时候,工作人员看到我护照崭新,又是独自一人,不免有些担心,向我索取了酒店预订记录和行程单。酒店预订记录只要出示订购软件的订单界面即可;我没有做行程单,就将记事本里的旅行计划给工作人员看,第一天在哪里啊,过两天又跑去哪里玩…得知我全程的酒店都已订好,行程也安排清楚,便允许我出境了。

在候机厅的长椅上坐下时,距离飞机的预定起飞时间只有半个小时了。看来国际航班确实需要早点来机场办手续(虽然最后延误了两个小时)。

这是我第二次坐飞机。上一次是我还在读小学的时候,不明不白地上了飞机、又下了飞机,除了耳朵有些不舒服。没有其他的感想。

这次,我特地选择了靠窗的位置,仔细观察着飞机的起降与飞行时的动作。看到了起飞和降落时襟翼的展开,看到了遇到乱流时机翼“夸张”的摆动,感叹着这种看似“简易”的机器是如何将一机人送上天。

日本上空

飞机餐的话…上一次坐飞机是国内航线,没有在饭点所以没有供餐,这是我第一次体验飞机餐。

鱼肉米饭套餐

没有选择的余地,大家统一都是鱼肉米饭套餐。和我能想象到的飞机餐没有太多区别 —— 一般咸味的鱼肉,煮得软烂的米饭(也可能是再加热的缘故)与味道平平的配菜。坐的毕竟是经济舱,不能期待太高~

鱼肉米饭的特写

经过两个半小时的飞行,飞机平稳降落在了关西国际机场。飞机缓慢驶向空桥的途中,我更换了日本的流量卡,给手表切换了时区。

入境相对出境更加简单。出发前我就在网页中预先填写好了入境信息表与海关申报表,在对应的窗口或机器扫码即可完成申报。在入境窗口只需出示一下 eVisa,录入一下人脸和指纹就可以了。

工作人员会用英语引导你操作,录入机器上也有中文提示。机场的指示牌都是四语的(日语、英文、中文和韩文),按照指示牌走就没有问题。

大阪之行

Day 1 - 舒适的酒店与海游馆之旅

APA 酒店

起飞延迟了两个小时,降落也迟了一个多小时。达到关西国际机场已是下午 3:30(这之后都是 UTC+9 时间)。我乘坐南海机场线前往难波站附近的 APA 酒店。

插一嘴,在日本用 Google Maps 相当方便,交通工具的规划和信息展示都做得很棒。“通勤案内”这款官方推荐的交通软件我也有下载,不过用的最多的还是 Google Maps。

等地铁、电车、新干线时,只要看 Google Maps 上的到站时间,到了哪辆车就上哪辆车。除非两个方向的车同时到站,否则是绝对不会坐错方向的。

APA酒店大楼

APA 酒店大楼的装修很有特色,在远处就能看到橙色的屋顶和 APA 的标志,而且在全国的风格都是统一的。

APA酒店房间

内部的装横令我十分惊喜:房间不是很大,但各种设施一应俱全,在床铺正对的墙上甚至有一台大屏电视。浴室毫不意外地配备了浴缸,还有定量放水系统,不用盯着浴缸有没有水漫金山了。寝具也相当的舒服,那两晚都睡得很好。

对于一间一晚 300CNY 左右的旅馆,能有这样的体验我十分满意。

咖喱与牛排

办好入住手续,放下行李,已是五点多。飞机餐的显然填不饱我的肚子,我早已饥肠辘辘,是时候出门觅食了。

大阪海游馆是我计划中必去的一站,但它位于海港村,和其他景点在相反的方向,便安排在今晚游玩了。

日本人很奇特的一个习惯出现了:有些店铺傍晚 6:00 到 6:30 就收摊了,最晚的会开到七点八点左右,再迟就只剩下营业到深夜的家庭餐厅与居酒屋。

用“食べログ (tabelog)”这款软件在海游馆附近搜索评价比较高的店铺。

在海游馆隔壁有一个小小的综合体,里面有一些店铺还有在营业。我选择了这家评价很高的牛排咖喱餐馆。

牛排咖喱

一份牛排咖喱饭、一碟酱菜、一碗味增汤。价格有些忘记了,在 1500円 左右。

日本人很喜欢吃这种细长的青椒,不会辣,在天妇罗中也会出现。

咖喱的甜口的,味道自然比百梦多咖喱块要好上数倍。牛肉很嫩,没有怎么调味,展现的是肉本身的鲜味。总之,相当的美味。

对了,需要使用现金哦~ 商家没有准备 POS 机。

大阪海游馆

已经记不清上一次去水族馆是多少年前。听说大阪海游馆的设施很棒,场馆也很大,我就来体验一下。

门票的价格是 2600 円,入场有分时段,我就在售票处购买了当前时段的票。

海游馆很大,步行参观的总距离在 1km 左右,按照地理位置划分成了好几个区域。

趴在水箱顶的鳐鱼

进入场馆便是一个巨大的拱形水箱。是玻璃比较薄吗,还是用了什么技术,几乎看不见玻璃带来的重影,鱼仿佛真的在空中悬浮。

正在睡觉的海狮

一群正在睡觉的海狮。抬着头睡觉不会落枕么。

![巨型水箱]/images/2024-01-21/(9.jpeg)

在场馆的中央有一个巨大的水箱,有两头鲸鲨、几头锤头鲨和许多小鱼生活在其中。

花园鳗~

还有好多可爱的花园鳗,黄色的尤其可爱~

除此之外,还有来自各个大洲的鱼、南极的企鹅,在地下还有水母馆。

总共逛了一个多小时,可以说大饱眼福了。

天保山摩天轮

在海游馆的隔壁是天保山摩天轮,夜晚被彩色的灯光照亮特别好看。

此时已是 19:30,经历了一天奔波的我有些劳累,便回到酒店养精蓄然,计划第二天的行程。

Day 2 - 天守阁、天满宫、天筋桥与大阪烧

酒店的自助早餐

在日本的第一顿早餐,在酒店隔壁的参观享用了自助餐。

炒蛋和上次去香港在澳洲牛奶公司吃到的有点像,并没有完全做熟,非常的软嫩~

茶泡饭就很有日本的特色了。

饭后,我就前往难波站附近的旅游中心,购买大阪周游卡。我选择的是二日卡,价格是 3600 円。在两天内,可以免费乘坐大阪地铁与巴士(相较于一日卡,不能乘坐私铁),以及免费参观好多景点。

大阪地铁网络十分发达,基本覆盖了所有想去的地方,这两天我没有搭乘过私铁或者巴士,因此不用担心是否要选择一日卡。

买到卡之后,第一站便是天守阁。

天守阁外围

从外边看,与只狼里的苇名城有几分相像。

天守阁下

天守阁内陈列着许多颇有历史的物件,只可惜我对日本的历史并不熟悉,也看不太懂书法家的笔墨,只是走马观花感受一下文化的氛围。

天守阁顶

最后在楼顶吹了吹风,便离开了天守阁。

一轮彩虹

虽然有些冷,但天气真的很好,万里无云。下一站是天神筋桥,一个商业街。

天神筋桥商业街

日本有很多 OOばし(桥)这样的地名呢。也有很多像天神筋桥这样,上方覆盖着遮雨棚的商业街,天神筋桥是其中最长的一条,从一丁目延伸到七丁目,光是主干就有 2.6 km,更有密密麻麻的小巷。

乘坐堺筋线,在天神筋桥三丁目下了车。我先是去拜访了天满宫。

大阪天满宫

似乎内部在翻修,将赛钱箱放到了外边供大家参拜。

在这里,我给身边参加考研的人做了参拜,希望他们可以拿到好成绩。

接着,我便从二丁目开始,一路边逛边思考着午饭的去处,寻找着吃饭的店铺。

沿途,看到了大排长龙的可乐饼摊子,转了一圈再想回来买,发现已经卖完收摊了。有一家天妇罗的店门口也站着好多人,大排长龙。肚子好饿,肯定排不了这么长的队。

边走边用 食べログ 搜索着。来大阪就得吃些有大阪特色的,那就是大阪烧了。

千草大阪烧

并不在主街,而是藏在小巷子里的千草大阪烧,似乎是 食べログ 23年的百大名店呢。

我选择了以店铺名字所称的招牌菜 —— 千草大阪烧。

核心是一大片厚切的猪肉,在上下两面都倒上面粉与卷心菜混合的泥,便开始煎烤。

接待我的服务员会一些简单的英语,告诉我等着他们来翻面就好了。当地人也许会选择以自己的喜好来摊大阪烧,我作为门外汉只要静静欣赏就好。

当两面都煎至金黄,便会涂上大阪烧酱、沙拉酱和黄芥末酱,撒上不知道是什么的籽,就可以享用。

大阪烧整体的口感是软糯的,夹心的猪肉排很嫩,肉汁十足。

唯一可惜的是,量实在有些少,填不饱我的肚子啊~

鲷鱼烧

饭后继续在天神筋桥闲逛,发现了一家鲷鱼烧店。我还以为鲷鱼烧是软软的,但实际外壳是偏脆的,甜甜的红豆馅十分美味。

今天真的走了好久的路,对于第一次来到异国他乡的人可以说是有些得意忘形。从天神筋桥二丁目逛到六丁目,又折返了回来。中途还去 melonbooks 看了一圈,又跑到周游卡可以免门票的天王寺动物园里逛了逛…还没逛完,人就开始有些不舒服了。

在动物园里稍微休息了一下,我还是决定吃完晚饭就回酒店休息。

大起水产回转寿司

一次比较“失败”的体验。不要误会,寿司还是很好吃的,鱼类十分新鲜,但我一不小心就在 iPad 上点了太多的寿司,都吃进肚子之后已经很饱了,完全没有在回转的转盘上取过寿司!这和普通的寿司店不就没差别了吗!

道顿堀

回转寿司店出门便是热闹的道顿堀,然而我不是喜好这一口的人。路过蟹道乐,周围停着好几台旅游大巴,店门口密密麻麻的全部都是在等待的游客,大约有数百人。真是疯狂呐。

受不住喧嚣,我在附近的药店买了一支体温计和一盒退烧药,便回了酒店。

躺床休息了一阵子再测体温已经正常,看来真的是疲劳导致的体温失调。之后的旅途安排就宽松一些吧。

Day 3 - 梅田蓝天大厦、天空美术馆与一兰拉面

睡了一个好觉,但人还是有些疲劳。前往异国他乡果然不能过于放肆,得做好身体的管理。今天就悠闲地度过吧!

通往观景台的扶梯

在酒店寄存行李后,搭乘地铁来到了梅田蓝天大厦。从三楼有快速电梯可以通往顶楼,然后乘坐扶梯来到屋顶的圆形观景台。

对了,有周游卡门票免费哦~

梅田蓝天大厦楼顶观景台1

梅田蓝天大厦楼顶观景台2

相比于其他观景塔,梅田蓝天大厦不算很高,但好在有开放式的观景台,视野特别棒。今天风有些大,在楼顶不是很站得住,欣赏了几分钟美景便回到了室内,点了一杯咖啡,坐在窗边静静欣赏着窗外景色。

梅田蓝天大厦外侧是镜面玻璃,倒映着天空、与天空融为一体,因此称作蓝天大厦。尼尔:机械纪元的开发公司白金工作室的总部就在这栋大楼里。

天空美术馆1

天空美术馆2

我还顺道参观了另一座楼的天空美术馆,虽然不怎么懂艺术,但画作依旧能感染我。

参观美术馆后,已是正午。该去找吃的了~

一兰拉面的“考试”

百闻不如一见,我来品尝一兰了。

每个人第一次来吃日式拉面都要面临一场“大考” —— 单应该怎么点。(背面有中文,我填完了才发现)

除了在点餐机器上确认要吃东西,在排位时服务员会给你一张纸片,让你选择拉面的喜好。

浓郁度我选择了加浓,确实有些过浓过咸了。吃着相当地过瘾,豚骨的香味充满嘴巴,真的很幸福。如果平常吃得比较清淡,正常的浓郁度可能就有些偏咸了,可以考虑减少一些浓郁度。

油脂的丰富度我也加了一档,但感觉不是特别明显。可能是看到日本有一种表面铺满油渣的拉面,一兰的面在油脂的方面反而显得“寡淡”了吧。

其余的选项便是看个人喜好。一兰的辣椒粉不会很辣,加 1/2 倍感受不出辣味,但可以提升香味。

一兰拉面

交卷后,一碗一兰拉面,四片叉烧和一颗盐味溏心蛋上桌啦。

一兰号称在面出锅后15秒内就会传递到食客的面前,以体验拉面最新鲜的味道。我赶忙用手机拍了张照,便开始享用。

拉面和我之前吃过的感觉都不大一样,特别有筋道,麦香味也很浓。在浓厚的汤汁里蘸一下就有了豚骨的鲜味,没几口就把拉面吃完了,便又加了半份面。

上溏心蛋的时候同时给了个小碟子,如果蛋不好剥或者咸味不合适,可以让服务员帮忙换一个。

一口拉面,配上一口汤汁。再咬一口叉烧、一口糖心蛋,至福啊。

前往奈良

饭后,回酒店取了行李,便是去难波站坐近铁奈良线,前往奈良了。

一点感想

语言不是问题,打招呼、点菜这种比较简单的对话就用手势与塑料日语,更复杂的对话用英语就好了。碰到的酒店前台经理、便利店员工、车站管理员都是会英语的。再不济,就用翻译软件吧,能达意就行~

至于习惯问题,按照当地人的做法来做就好了。在公共场合,例如楼梯应该走哪个方向,等地铁的时候应当怎么站,在地铁上有哪些地方不能使用手机,都有明确的标识和多语言的提示。多留意,照着做,就不会有事儿啦。

深圳-香港三日行

2023年12月19日 22:00

出行原因

其实我很早就有去香港看看的念头,但有时间出游的机会并不多(机会很多,是我比较懒,更喜欢宅家),一直没去成。

前一段时间,在朋友的帮助下我注册了英国 Wise 账户,拿到了两张漂亮的实体卡,但后期如何入金成了个问题。了解到可以通过香港账户低损耗入金 Wise,我便有了前往香港开户的念头。

12 月底我将独自前往日本游玩,但这将是我第一次独自一人出去旅游。第一次单人旅行还是出国旅行,不禁让我有点担心。

在这两个背景的驱使下,我迅速定下了这次深圳-香港的旅行,既可以前去开户,也可以作为出国旅行的预演,提前暴露一些问题。

流水账

Day 1 - Thu - 深圳

第一天中午到的深圳。我在前往酒店的半路上下了地铁,前往名为“臻品鲜粿·粿条世家”的店铺吃午餐。

潮汕粿条

粿条本身没有很特殊,有点细河粉的感觉。不过八成熟的牛肉非常非常的嫩,味道很棒。

炸豆腐

炸豆腐是赠送的,第一眼并太高的期望。但一口咬下,十分软绵的里芯呼之欲出,佐以略微有些咸的沾汁,味道很棒。

像海蛎煎一样的东西

我还点了一份长得有点像海蛎煎的东西,记不得名字了。应该是用油炸的,比海蛎煎更加酥脆。

美美地享用午饭后,我继续登上地铁,前往酒店。

下榻酒店后,我前去参观深圳世界之窗景区…总之就是很后悔。

比起人造景观,我还是更喜欢自然景观一些。世界之窗没有给我带来惊喜,只有满满的失望。今天是周四,许多游乐设施都没有开放,可以参观的仅有一个个微缩复原的建筑物。

在世界之窗转了约两个小时,我悻悻离去,前往凤凰楼食茶点晚餐。

香煎多春鱼

多春鱼的鱼籽很多,非常鲜美。

一个人出来吃饭确实有些不便。有些菜品一次只能点这么一大盘,不过还是美美的享用了。

鲜虾烧麦

鲜虾烧麦就是吃鲜,特别的鲜甜。

牛杂炒肠粉?

菜单上的字看得不是很懂,大概写的是炒肠粉吧,没想到上了这么大一盆长得也不像肠粉的东西。

吃了一下,似乎确实是切成一节一节的肠粉。味道不错,但量好大最后没吃完。

华强电子世界

饭后,我顶着吃撑的肚子徒步前往华强北,这片传说之地。可惜的是,大部分店铺八点就关门了,简单逛了几栋电子市场后我便回酒店计划第二天的行程。

Day 2 - Fri - HK 开户

一大早我便乘上了前往福田口岸的地铁。

7:30 左右的口岸没有什么人,大部分是赴港上学的学生,通关很快。

我在落马洲站选择乘坐 B1 双层巴士前往元朗区,开始了开户之旅。

沿途…说实话没有什么风光,元朗算是比较偏僻的地方,好风景还要等到第二天的香港岛之行。

8:00 我到达了中行门口,发现只有前来上班的员工,还没有来排队的人。如果希望第一个办理业务的朋友可以选择这个点就来等候。时间还早,我就去吃了个早餐,回来发现已经有两个人在排队,便加入了队伍。

9:00 准时进入了银行,取到了号。在我之前有提前预约的人,我排在了第 5 号。

在工作人员的引导下使用手机填写了信息,然后等待柜员办理剩下的手续。共有三个柜台在同时办理开户,一个人需要 30 - 60 分钟的时间。

11:00 左右,我完成了中行的开户。

我现场就拿到了银行卡,便在 ATM 存入了 500 元人民币,并兑换成了港币。

顺便在同一条路上的南洋商业银行和汇丰银行也完成了开户手续。这两家银行皆需要几个工作日审核信息,审核成功后会将卡片寄至通讯地址。

穿行于各家银行网点的途中,我发现了一家在他人游记上看到过的店铺——胜利牛丸,便暗自定下了午饭的去处。

牛丸、牛筋、牛腩三合一河粉

三个愿望,一次满足。

面汤的颜色相当的“可怕”——仿佛是直接将卤水呈上来一般。但实际入口并没有很咸。牛肉们就不一样了,比较重口味的我也觉得有一点点咸。不过风味很棒,牛肉吃透了各种香辛料。

河粉藏在了对得满满的牛丸和牛肉之下,不是我常吃的宽河粉,比较窄。

虽然店名以牛丸冠名,我却没觉得牛丸有多么的美味,反倒是牛筋更胜一筹。

饭后,我在坐满老者的公园里稍稍歇息,并且计划着下午的行程……

此次香港之行除了开户,其实还有另一个目标——碧蓝档案与香港吃茶三千的联动~

在出发前的几天得知了联动的消息,运气真的很好。

电车

虽然有更优的路线,我还是选择了体验一下地面上的有轨电车。有轨电车有点像巴士,也是由司机驾驶,也会受到其他车辆与行人的干扰,但行驶路线是沿着铁轨固定的。

随后乘坐地铁,前往金紫荆广场…的对面,星光大道。在这里陈列了许多明星的手印和画像。海港边上的风景大好。

在此稍停,开户还没有结束。大概是因为元朗距离内地太近,许多虚拟银行都需要前往更靠近香港中心一些的地方才可以开户。我在一家星巴克坐下,开通了 ZA Bank 和 livi Bank 的账户。

随后,便是前往海港城的吃茶三千点了一杯联动奶茶,从中心一步步移动回福田口岸——晚上要和群友面基。

我们俩聊得非常尽兴,聊到了十一点才分手,回到了酒店,速速洗漱完毕,预定了第二天早上从福田站前往香港西九龙的火车,便沉沉睡去。

Day 3 - Sta - HK 游玩

昨晚火车票订得比较迟,最迟的火车也是 7:45 的,更迟的都被人订光了。我又被迫起了个大早(这三天都是 6:30 之前起床的)坐地铁前往福田火车站,搭上前往香港西九龙站的火车。可能是比较早乘火车的人并不对,这一趟通关流程比较顺利,再迟一点可就不好说了……

到达九龙,我空着肚子在街上漫步,寻找可以填饱肚子的早餐店。打开地图,“澳洲牛奶公司”几个字印入眼帘,这不是前几天看到的网红店吗?我记得这家店只收现金,便前往沿途的便利店,在 ATM 用中银香港的卡取了 100 港币现金。没有注意到我用的是汇丰的 ATM,与银联网络并不互通,被收取了 15 港币的手续费 QAQ。(众安银行的卡在全港 ATM 可以免手续费取现,经常到港玩的话可以办一张实体卡)

九龙街头漫步

带着现金,我来到澳洲牛奶公司的门口,果不其然,排起了长队。好在我是一个人,这家店是强制拼桌的,顺利超过了大团的游客,来到了店内。

给我的第一印象嘛…很拥挤,人挤着人,甚至是背贴着背。小小的一张圆桌围坐着四个人,各自享用着早餐。穿着白大褂的服务员在人群缝隙间穿梭着,高效地记录着到店客人的订单,飞速地将菜品传递到桌前。

落座,菜单压在桌子的玻璃之下,写满了粤语,说实话我看不大懂。纠结了几十秒,发现菜单上还写着“早餐”、“下午茶”等套餐,我便对服务员说:“早餐套餐来一份吧。”

话音未落,餐具和一杯茶便着陆在我的桌上。剩下的菜品也并我让我久等。

火腿通心粉

首先呈上的是一碗火腿通心粉。味道比较清淡,喝不出黄色的汤底是什么熬制的,不过比较鲜。

牛油吐司与炒双蛋

接着呈上的是一个盘子,两片吐司和炒鸡蛋各占半壁江山。牛油烘烤的吐司暖暖的,软软的;这份炒双蛋则是套餐的点睛之笔——调味微咸的鸡蛋并没有炒得很熟,在生与全熟之间掌握了平衡,做到了入口软绵,回味无穷,堪称是绝品。

如果有路过,一定要来尝一下这份炒鸡蛋~

一顿饱餐之后,我继续踏上旅途,前往太平山顶的观景台。

山顶缆车

上山的路可以选择用脚走完,不过,还是要体验一下富有特色的山顶缆车~

缆车的斜度估摸着有三四十度,是我见过最陡的。缆车是建在山坡边上的,方便沿路欣赏香港的风景。

摩天台观景台

缆车的终点站是太平山的山顶,下车后直接来到了凌霄阁摩天台的二层。沿着盘旋向上的电动扶梯,海拔逐渐升高,走着走着,最终到达了海拔428米的摩天台观景台。

在这里可以俯览香港的景色,听说夜景更美,不过我晚上并不住在香港,也就没有机会亲眼目睹,实在可惜。

摩天台上的风很大,吹着十分舒服。待了大约四十分钟,我便沿着原路返回,坐着缆车回到了山下。

漫步中环

早餐吃得有够饱,到了饭点我还不是很饿,便在街道与小巷间漫步,寻找着午饭的好地点。我想找家正宗点的茶餐厅。

跟随地图,我来到了就近的广芳园…可等候的队伍早已排出店外,目测有三四十人在队伍中。因为下午就要坐动车回去了,我无心加入他们,便继续游荡着,寻找着。

菠萝包与阿华田

附近的茶餐厅真的不多,跟随地图的指引,我来到了一家街边的小店。店内只收现金,而我身上只剩下不到五十港币,便选择了菠萝油和冰阿华田作为午餐,反正肚子不是特别饿。(冰的阿华田比热的还要贵上几块钱哦)

City Walk

饭后,我一时兴起决定走路去西九龙火车站,而非乘坐地铁,便开始一趟 City Walk…差点把我 Walk 没了。

街上好多地方都在施工,地图的数据并没有新到可以帮我绕开因为施工而禁止通行的路段…再加上出海关也需要一些时间,我差点以为要赶不上车。

好在我还是在开始检票前就赶到了,算是有惊无险,顺利踏上了返乡的路,结束了此次旅程。

我都带了些什么

此次我轻装上阵,只带了一个双肩包。

这次旅行我尝试了内衣、袜子和洗澡用具(浴巾与毛巾)都使用一次性的,省去了携带大量衣物且需要带回大量脏衣物的麻烦,也可以保证洗澡用具足够干净(对酒店不是很信任)。浴巾和毛巾都是压缩的,体积非常小。

其余的,便是两晚更换的衣服和电子产品的充电器了。

开户的那些事

我挺担心中银香港会开不下来,因为我还是学生也没有带地址证明。在大堂接待客户的小姐姐也询问了我有没有带上地址证明,没有的话只能碰碰运气,弄得我更慌了。

不过真正坐进柜台和柜员大哥开始走流程,直到大堂经理过来刷卡完成审核、将卡递到我手中,都没有向我索取地址证明。不知道是因为得知我是学生,还是因为我身份证上写的是具体住址,反正过了这关,顺利拿到了卡。

而汇丰之行则运气不佳,提交的资料被送至总行审核,当天拿不到账户也无法完成所有流程,只能等卡寄到居住地址,并且等下一次到港签字完成所有开户流程了。

P.S. 在跨境转账到时候一定要填清楚收款人的名字,要与中银香港的账户名称相同。我填反了名字被收了一笔手续费 QAQ

尾声

这次旅行顺利得可怕(除了差点没赶上返程的火车),在深圳与香港复杂的地铁网中也没有坐错一趟列车,似乎没能暴露出什么问题。希望 12 月底的日本之旅也能一样顺利。

一个人出来玩真的很自由,在出发前先查好可以去哪里玩、去哪里吃,到达之后就随心安排,不用迁就其他人,走累了随时可以停下休息,在咖啡店坐上一两个钟头也不会有人抱怨。

我也许爱上了一个人旅行的感觉,之后也会继续尝试这种旅行的方法。

使用 Docker Compose 部署音乐服务器 Navidrome

2023年1月31日 12:00

服务介绍

Navidrome 是一款兼容 Subsonic API 的开源音乐服务器软件,它提供了一个不错的 WebUI,也可以将支持 Subsonic API 的客户端接入。

目前项目正处在活跃开发中,各种各样的新功能正在陆续加入。

我的客户端选择

电脑端

自带 WebUI, Sonixd 【跨平台】

iOS

play:sub 【付费软件 4.99$】

部署方式

采用 Docker Compose 部署 Navidrome,使用 Nginx 作为反向代理。

Docker Compose 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000 # should be owner of volumes
ports:
- "127.0.0.1:4533:4533"
restart: unless-stopped
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
ND_SEARCHFULLSTRING: true
# Optional: fetch artist images from spotify
ND_SPOTIFY_ID:
ND_SPOTIFY_SECRET:
# Optional: fetch artist information from last.fm
ND_LASTFM_APIKEY:
ND_LASTFM_SECRET:
ND_LASTFM_LANGUAGE: en
volumes:
- "./data:/data" # Navidrome data
- "/APTH-TO/navidrome-music:/music:ro" # Music folder

使用命令 docker compose up -d 启动服务。

Nginx 配置文件

我建议使用 DigitalOcean 的 Nginx 配置生产工具,示例配置如下:

示例配置

也可参考下述配置,此为 DigitalOcean 生成配置的简化版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name music.example.com;

# SSL
ssl_certificate /etc/letsencrypt/live/music.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/music.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/music.example.com/chain.pem;

# logging
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;

# reverse proxy
location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:4533;
}
}

# subdomains redirect
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name *.music.example.com;

# SSL
ssl_certificate /etc/letsencrypt/live/music.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/music.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/music.example.com/chain.pem;
return 301 https://music.example.com$request_uri;
}

音乐管理

我一直以文件夹分类的方式管理音乐,但 Navidrome 并不支持文件夹分类。它是根据音乐标签来分类的,例如按照歌手、专辑等依据分类歌曲。

因此,若想使用 Navidrome,需要对音乐进行标签管理。

大约两年前,我写了 一篇文章 介绍使用 Music Tag 和 Foobar2000 两款软件来管理音乐。

Music Tag 的标签源是网易云音乐、豆瓣音乐、QQ 音乐等国内音乐平台,说实话,这些平台的音乐标签质量都不是很好,所以我一直在寻找更好的音乐标签源。

直到我发现了 MusicBrainz,这是一个开源的音乐标签数据库,任何人都可以为它贡献标签。在体验之后,我发现 MusicBrainz 的音乐标签质量要比国内音乐平台的标签质量好很多,所以我决定将 MusicBrainz 作为我的音乐标签源。

我使用 Picard 这款软件来从 MusicBrainz 获取音乐标签。

将音乐导入 Picard 后,它会自动从 MusicBrainz 获取音乐标签,然后将标签写入音乐文件,十分方便。

开始使用

不论是使用 Navidrome 自带的 Web 界面,还是使用兼容 Subsonic API 的客户端,只要连接到 Navidrome,便可开始享受你的私人音乐库。

使用 Docker Compose 部署 Keycloak 20

2023年1月22日 20:00

部署方式

采用 Docker Compose 部署,使用 Postgres 作为数据库,使用 Nginx 作为反向代理。

Docker Compose 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3'

services:
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://db:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak
KC_HTTP_ENABLED: true # 开启 HTTP
KC_HOSTNAME_STRICT: false
KC_HOSTNAME_STRICT_HTTPS: false
KC_HTTP_RELATIVE_PATH: '/' # Keycloak 应用的相对路径
KC_HTTP_PORT: 8080 # HTTP 端口
KEYCLOAK_ADMIN: MY_USERNAME # 管理员账号,仅初始化时使用
KEYCLOAK_ADMIN_PASSWORD: MY_PASSWORD # 管理员密码,仅初始化时使用
PROXY_ADDRESS_FORWARDING: true # 使用反向代理必须开启
KC_PROXY: edge # 反向代理模式,详见文档
entrypoint: /opt/keycloak/bin/kc.sh start # 第一次运行后可以加上 --optimized 参数,加快二次启动速度
ports:
- 127.0.0.1:18080:8080 # Keycloak 应用端口
restart: unless-stopped
db:
image: postgres:14
restart: unless-stopped
environment:
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloak
- POSTGRES_DB=keycloak
volumes:
- ./postgres-data:/var/lib/postgresql/data # 数据库数据保存位置

使用命令 docker compose up -d 启动服务。

Nginx 配置

我建议使用 DigitalOcean 的 Nginx 配置生产工具,示例配置如下:

示例配置

也可参考下述配置,此为 DigitalOcean 生成配置的简化版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name auth.example.com;

# SSL
ssl_certificate /etc/letsencrypt/live/auth.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/auth.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/auth.example.com/chain.pem;

# logging
access_log /var/log/nginx/access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/error.log warn;

# reverse proxy
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass http://127.0.0.1:18080;
}

location /auth/realms {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
proxy_pass http://127.0.0.1:18080;
}

location /auth/resources {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
proxy_pass http://127.0.0.1:18080;
}

location /auth/js {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
proxy_pass http://127.0.0.1:18080;
}
}

# subdomains redirect
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name *.auth.example.com;

# SSL
ssl_certificate /etc/letsencrypt/live/auth.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/auth.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/auth.example.com/chain.pem;
return 301 https://auth.example.com$request_uri;
}

配置 Keycloak

创建 Realm

打开 Keycloak 地址,界面如下。

Keycloak 界面

选择 Administration Console,进入管理界面。

管理界面

选择箭头指向的下拉菜单,选择 Add realm,创建一个新的 Realm。

创建 Realm

填写 Realm 名称,点击 Create

创建 Client

管理界面

选择 Clients

Client 管理界面

点击 Create client

创建 Client

填写 Client 相关信息,点击 Next

配置 Client

按需求选择 Client 的配置,点击 Save

Client 创建完成

至此,Keycloak 配置完成,且创建了第一个测试用 Client。

测试 Client

可根据 官方教程 测试该 Client。

尾声

上述便是使用 Docker Compose 部署 Keycloak 20 的方法,我们顺利创建了第一个测试用 Client,接下来可以根据自己的需求进行配置。

寻梦穿越机 - 入门浅谈

2022年9月4日 12:00

暑假开始之前,我就朦朦胧胧有购入一台穿越机的想法。起因为何?我也不是很清楚。是看到了酷炫的穿越机航拍视频?还是童年时期的航模魂蠢蠢欲动,将要苏醒?

兴趣,倘若不立刻抓住,很快就会被抛至脑后。为了不让自己后悔,那就立刻开始筹备吧!攥紧并不是特别充盈的钱包,我踏上了寻梦之路。

什么是穿越机

FPV (First-Person View),是指通过第一人称视角远程控制无人飞行设备 (UAV) 的控制方式,也是一项运动,也指代了一类设备。

FPV 设备包含固定翼 (Fixed Wing) 与多轴 (Multi-rotor) 两种。穿越机多指多轴 FPV (常见为四轴)。

四轴 FPV (上) 与固定翼 FPV (下)

一盆冷水

在详细介绍穿越机构成之前,请允许我泼一盆冷水。

穿越机与一些航拍无人机,例如大疆 (DJI) 的四轴航拍机与航拍 FPV 相比,颇有原始人见到现代人的感觉。

大疆无人机上搭载了各种各样的传感器,各系列大都配备了二向 (前后)、四向 (前后左右) 或五向 (增加一个上方) 的视觉避障功能、红外定高悬停功能,以及低电量 GPS 自动返航功能。

上述这些看似是无人机应当“标配”的功能,追求轻量化的穿越机时常一个也没有。一台最小安装的穿越机全机的传感器仅有集成于飞控的陀螺仪和地磁传感器 (电调的电流传感器一般不算在内),飞控仅知道当前机身的朝向、倾斜角度与加速度,无法感知周围的环境,没有实现避障、悬停与自动返航的能力。飞机的运动状态完全取决于飞手的操控,电池的剩余电量甚至需要飞手根据电芯电压来推断。

穿越机少得可怜的传感器

再者,为了能获得更大的速度与更高的机动性,穿越机飞行过程一般处于手动模式,对飞机四向的倾斜没有限制,飞行过程中出现危险操作的概率大,事故概率也大。而大疆无人机对飞行速度、角度有严格的限制,能有效地降低炸机的概率。

因此,飞行穿越机的难度将是飞行大疆等航拍无人机的十倍、甚至百倍。请务必不要抱着随便玩一玩、随心飞的态度入坑穿越机,发生事故后轻则炸机提 (遥) 控回家,重则伤到自己或他人。对于喜欢日常随心飞行的玩家,大疆或类似牌子的无人机 (包括航拍机和穿越机) 更为合适。


下文将详细介绍入门穿越机所需要的技术知识与穿越机的重要模块。在明白风险之后仍打算入坑穿越机,或对穿越机有兴趣的你,欢迎继续往下阅读。

技术储备

上文提到了我童年时期的航模魂。我在小学就跟着老师学习无线电和航模知识,练习了焊接技巧和单旋翼的航模直升机的飞行技巧。曾参加某个航模比赛并拿到了铜牌的好成绩 (我好自豪)。

因此,我对我的焊接技术和遥控操控能力比较有信心。而这两个能力恰好是入门穿越机不可或缺的。下面我列举一些入门穿越机需要掌握的技能。

锡焊

除了购买真·到手飞套餐 (机子已组装完成,接收机已与遥控器完成配对),其余情况大概率需要焊接一些导线。

大部分组装机套餐都不包含接收机,因为接收机与遥控器一一对应,一般是和遥控一起购买的。就需要用户自行焊接至飞控上。

锡焊所用到的工具有电烙铁和焊锡丝,最好能佐以松香,增加焊接成功率。电烙铁推荐购买 T12 或更好的,因为飞控散热设计,很多焊盘为通孔的形式,热量会非常快地传到到全板,导致焊锡较难达到融化的温度。若使用功率太低的电烙铁,可能无法融化焊锡。

T12 焊台

由于飞控比较小巧,焊盘也十分迷你,对焊接技术要求较高。

使用搜索引擎

不懂不可怕,不懂得学习才可怕。

穿越机有关的零碎知识犹如满天星,散布于互联网的每一个角落,需要一定的搜索技巧才能挖掘到有用的知识。

国内有关穿越机的网站数量比较少,建议使用英文搜索。

编译

若想要更新 ELRS 接收机和高频头的固件,需要从源码编译 ELRS 固件。虽然 ELRS 团队提供了一套图形化的编译工具,但难免会遇到一些疑难杂症 (博客中就有 ELRS 固件编译的踩坑记录)。需要对编译有一定的知识,能自行解决简单的问题。或者选择使用出厂固件,不自行升级。

操控能力 (协调性)

像音游 (音乐游戏) 一样,微操遥控器并不是所有人都能很好地做到。穿越机对遥控指令的反应极为灵敏,需要你能精细地操控遥控器。

但这项技能可以通过电脑模拟飞行来习得。建议在正式开始飞行前,先在电脑上使用模拟器熟悉飞机的控制。

一颗勇敢的心

在飞行穿越机的过程中,不可能不出现炸机 (飞机以异常姿态落地) 的情况,难免会留下一点阴影。

我在小学时飞过固定翼飞机,曾不慎撞到电线,导致飞机起落架损坏脱落,最后只能由老师操控迫降。此事给我留下了不小的心理阴影,有好几个月我都不敢再飞行固定翼。不过最后还是克服了恐惧,再次拾起了遥控。

炸机并不可怕,每一次炸机都记录着你的成长。

深入了解

类似 Linux (比较奇怪的类比),穿越机也分为最小安装和额外拓展两部分。

穿越机架构

最小安装:

  • 机架 - 硬连接其他组件,保护脆弱的电路板;
  • 电机 (和桨叶) - 提供飞行动力;
  • 飞控 - 控制飞行状态,是穿越机的大脑;
  • 电调 (电子调速器) - 驱动电机、分隔电路 (防止电机减速时产生的反向电流烧坏其他电子设备);
  • 接收机 - 接受遥控器控制信号 (有 2.4GHz、915MHz、 868MHz 等频段,互不兼容);
  • 图传 - 发送图像信号 (多为 5.8GHz 频段);
  • 摄像头 - 提供第一人称视角;

额外拓展:

  • GPS 模块;
  • BB 响 (蜂鸣器 Beeper,用于寻找飞机);
  • LED 灯珠、灯带 (好看 XD);
  • 红外避障模块;
  • 运动摄像机 (拍摄更清晰、帧率更高的视频);

挑几个比较重要的模块介绍一下:

机架

穿越机机架一般由碳纤维板制成,质地轻盈且强度极高,可以物理连接不同的模块,并保护脆弱的电子设备 (飞控、图传等裸板)。

挑选时,机架有几个要主要关注的核心参数:

  • 外形:

    机架分为普通式与涵道式 (Duct Propeller) 两种。

    普通式机架的螺旋桨桨叶裸露在外,而涵道式机架的螺旋桨外侧有涵道 (类圆筒) 包裹。

    有一些普通式机架可以通过额外安装涵道,变身成为涵道机架。

普通机架 (左) 与涵道机架 (右)

普通式机架采用开放式的设计,尽可能少地使用材料以减轻重量。由于螺旋桨暴露在外,危险性较大。普通机架可被用于任何竞速与花飞机型。

涵道式机架通过涵道结构可以提供更好的升力、稳定性和安全性,但额外增添了重量和封阻,一般被用于小型机与花飞机型。

机架外形

此外,机架还可以再细分为 X 型、H 型等,在此就不多展开,有兴趣的读者可以自行查阅。

  • 大小:

    穿越机大小各异,从最小的一寸机,到体型较大的五寸、六寸机。

    二寸以下的机子防风能力较差,但体型轻盈且常使用涵道机架,适合在室内飞行,且不易伤人。

    三寸以上的机子动力充沛,飞行速度快,但体型大、螺旋桨裸露,无法在室内飞行。适合在场地广阔的室外进行竞速或花飞 (花样飞行)。

飞控与电调

飞控与电调 (有时还有图传) 几块板子大小相当,时常纵向堆叠安装,称为飞塔。在多块 PCB 间有硅胶柱减震。

双层飞塔

飞控需要注意的参数不多:

  • 飞控 SoC:

    常见飞控 SoC 的型号有 F405 和 F722,他们的全称应为 STM32F405 和 STM32F722. 差别主要在主频和内存大小上。

飞控 SoC

由于穿越机飞行对计算性能不是很敏感 (类似 3D 打印机),一般选择搭载 F405 SoC 的飞控性能就足够使用了。

  • 串口数量:

    新手会用到的串口数量不会超过两个 (外接部分型号的图传和接收机),绝大部分飞控都能满足这个要求。若有需要安装 GPS 和其他传感器,则要注意查看飞控支持的串口数量了。

电调最重要的参数就是最大放电电流了。

电调的电流选择需要根据机身大小、电机和桨叶大小、形状进行估计,通常电机厂家会给出推荐值,按照推荐选购即可。

接收机与图传

接收机 (左) 与图传 (右)

接收机与图传共享一个重要的特性,协议:

常见的接收机有 ELRS (ExpressLRS) 和黑羊 TBS 两类。应该注意的是,不同种类的接收机使用的通信协议和频段不同,能与其配对的遥控器和高频头也不同,因此在挑选接收机的时候一定要看清楚协议和频段。

接收机和飞控的串口通讯协议也各异,有 UART、SBUS 等数种,再购买接收机前需确认飞控有相对应的串口。

图传分数字图传和模拟图传两种。

数字图传以大疆的最为出名,需要使用配套的飞行眼镜;模拟图传大多使用 5.8G 频段通讯,和大部分接收模拟信号的飞行眼镜通用。

图传连接至飞控的串口通讯协议也很多,购买的时候请多加留意。

除此之外,接收机有遥测功率、内/外置天线、天线接口等参数,在挑选时都需要多加留意。

图传的另一主要参数则是发射功率。发射功率越大,能稳定接受图传信号的距离一般就越大。小型穿越机一般选择发射功率在 200mW 到 500mW 的图传即可 (部分图传发射功率可调);若有远航要求,也可选择发射功率大于 1W 的图传 (价格较高、发热也较大,一般带有主动散热)。

机子之外的配件

除了穿越机本体之外,想要拥有完整的飞性体验,还需要遥控器、高频头、电池、平衡充电器、飞行眼镜等配件。

上述的每一种配件都可以写作一篇介绍文章。由于篇幅有限,本文就不再介绍上述的外围配件,请善用搜索引擎,学习相关知识。

配套软件

除了硬件,穿越机配套的控制软件也尤为重要。目前主流的控制软件是开源的 Betaflight。

Betaflight 地面站界面

Betaflight 分为嵌入端 (安装在飞控中嵌入式系统) 和地面站 (安装在电脑里的软件)。将飞控通过线缆连接至电脑,并打开 Betaflight 地面站软件,即可对飞控参数进行调整。

Betaflight 调参也是一门大课,新手不建议自定义太多的参数。待熟悉飞机之后,才建议调整 PID 等高级控制参数。

新手的第一台飞机

说了这么多,要上某宝挑选、下单穿越机的种种配件了吗?

我的建议是否定的。

我咨询了一些老玩家,他们建议新手购买他人已完成调参的二手机器,或者购买商家大部分已组装完成套机,以绕过纷繁复杂且状况百出的 DIY 过程,降低还未入坑就弃坑的风险。

此外,自行购买散件的总价常常会高于购买整机的价格。对于钱包不是特别充盈的我,购买整机也是一个省钱的选择。

待熟悉了穿越机的飞行与调试之后,再学习他人经验,设计并组装一台自己心目中的机器也不迟,这才是 DIY 的浪漫。

我的成果

我的成果

我选择购买一位老玩家完成大部分组装工作的“半”整机——包含了机架、电机、飞控和电调。图传、摄像头和接收机则是我自行购买和焊接安装的。

飞机到手、外围装备齐全,只待一飞冲天。

使用再生龙 Clonezilla 备份操作系统

2022年8月12日 12:30

近日购入了一只闪迪的 CZ880 Extreme PRO 固态U盘来装 Manjaro。

虽然U盘本体是终身质保的,但数据无价,配置一遍系统就要花大把的时间。遂有了备份U盘内整个系统的念头。

下面跟着我使用再生龙 Clonezilla 把U盘里的系统备份一下吧!

事先准备

再生龙是运行在独立操作系统 (Debian/Ubuntu) 上的一套软件,因此需要制作启动盘,或使用 Ventoy 等多系统启动方案。(实测 YUMI 无法启动再生龙,故建议使用 Ventoy)

制作启动盘

前往 Rufus 官网 下载 Rufus 启动盘制作工具。

前往 Clonezilla 官网 下载再生龙映像。

使用 Rufus 将再生龙映像烧写进另一个U盘即可。

U盘内数据将丢失,请做好备份!

使用多系统启动

前往 Ventoy 官网 下载安装包(兼容 Windows 与 Linux),将你的另一个U盘制作为 Ventoy 多启动盘。

前往 Clonezilla 官网 下载再生龙映像。

将再生龙映像拷贝至 Ventoy 多启动盘中。

选择你想存放备份数据的目的地,创建一个存放备份映像的文件夹(注意目录名称中不能带有空格)。

剧透一下,40G 的系统盘备份之后大约占了 16-17G. 请留出足够的空间(建议和待备份的数据等大小)。

开始备份

瞎眼警告:由于没有合适的截屏方式,我很不愿意地采取了 拍 屏 的方式,敬请谅解。

启动再生龙系统

确保你的电脑关闭了安全启动,若还打开着,需要在 BIOS 中将其关闭。

插入刚刚制作好的启动盘/Ventoy 多启动盘,在电脑启动时猛敲键盘的…某个键,这因电脑型号而异,打开启动菜单。

选择插入的启动盘/多启动盘。

启动盘用户若没有太大的兼容性问题,就能看到再生龙的启动菜单。

多启动盘用户还要再多一步,在 Ventoy 菜单内选中再生龙的映像,如下图所示,即可打开再生龙的启动菜单。

Ventoy 多启动菜单

P.S. 我的笔记本兴许和 Ventoy 的 UEFI 模式相性不大好,在 BIOS 中开启了 Lagacy 兼容模式后,使用 Legacy 模式才能开启 Ventoy。

选择再生龙启动方式

再生龙启动菜单

经典的 GRUB 启动菜单,一般来说选择默认的第一项启动方式即可。

VGA 启动花屏

我的电脑遇到了在 VGA 800x600 模式下花屏的问题。

最终进入 Other mods of Clonezilla live 菜单,

其他启动模式

选择了上图中的 KVM & To RAM 模式,可以正常启动了。

USB 口不够用的用户

我这台笔记本只有两个 USB 口,其中一个要给备份源头 CZ880,另一个则要给移动硬盘,故选择了 To RAM 模式,将再生龙载入内存,就可以拔掉多启动U盘,空出 USB 口给移动硬盘了。

语言配置

语言配置

选择自己想用的语言即可。

键盘配置

保持默认配置即可。

备份配置

功能选择

我们选 Start Clonezilla 使用再生龙

命令行可以在熟悉了配置之后使用。

备份模式选择

此处我们选择第一项 device-image 硬盘/分区[存到/来自]镜像文件

若想进行两盘对拷,可以选择第二项。我还没有尝试过。

挂载存储目录

存储目录选择

这次我打算使用移动硬盘备份系统,故选择第一项 local dev 使用本机的分区

插入 USB 设备提示

随后,再生龙会提示插入想要挂载的 USB 设备,按照提示做即可。

检测到的存储设备

此时画面会动态显示系统识别到的存储设备。看到期望的目标设备时,按下 Ctrl-C 停止搜索。

分区选择

在扫描完电脑当前安装的所有硬盘的分区后,你需要选择备份镜像文件存放的那个分区。

如图,我希望备份到大小为 1.8T 的移动硬盘上,故选择最后一项 sdc2

是否检查并修复文件系统

随后,再生龙询问你是否需要检查并修复挂载的文件系统,我们选第一项否就好了。

备份位置选择

接着,就是选择备份镜像存放的位置。

使用键盘的方向键选择目录,使用 Tab 跳转到下方的选项,选择 Browse 并敲击回车就可以进入到此目录。

若希望在选中目录下存放备份镜像文件(是一个文件夹),就可以选择 Done 选项,回车确认。

是否检查镜像可还原性

系统询问是否检查生成的备份镜像的可还原性,这里我们选是,多花一点时间能确保备份的完整性。

是否对镜像加密

镜像加密,依个人喜好选择。

备份模式确认

待上述配置完成后,系统会向你再次确认备份的内容与目的地。

确认无误后输入 y 并敲击回车继续。

简单模式/高级模式

此时应该有一个模式选择,问你想要使用简单模式还是专家模式。

我建议选择 专家模式,简单模式能选择的参数较少。

模式选择

接下来的三个选项,全部保持默认配置即可。

高级设置1

高级设置2

高级设置3

压缩方式选择

压缩方式选择

此处选择第三项 -z2p 使用并行 bzip2 压缩

实测 bzip2 压缩速度比较快,产生的备份镜像的体积也不算大。

下图为选择了第一项 -z1p 使用并行的 gzip 压缩 的速度:

并行 gzip 压缩速度

下图为选择了第三项 -z2p 使用并行 bzip2 压缩 的速度:

并行 bzip2 压缩速度

可以看出 bzip2 压缩速度比 gzip 快了8倍。

其他压缩方式的速度,待我测试之后更新文章。

分卷大小配置

分卷大小配置保持默认即可。

备份镜像检查

待备份完成后,再生龙还会进行一次备份镜像的可还原性检查,如下图:

可还原性检查

若得到下图的提示,则备份镜像生成成功了。

可还原性检查完成

随后,选择按照意愿选择备份结束后的操作即可。

备份结束后操作选择

至此,再生龙 CLonezilla 的基础教学就结束了,你已经学会了如何使用再生龙的图形界面进行备份。

下面是一些再生龙的高阶(大概很高级)使用方法。

高级操作

使用无线网络备份

上文中,我的电脑仅有两个 USB 口,为备份的流程增添了不必要的麻烦。

能否使用 Wi-Fi 将备份镜像推送至家中的 NAS 呢?

再生龙内置了许多通过无线/有线网络备份的方法,如下图:

备份选项

我们尝试使用 Webdav 来远程备份吧!

利与弊

使用 Wi-Fi 备份可以摆脱线缆,更加轻松而优雅地进行备份。

然而,由于通过 Wi-Fi 或者一切网络传输数据的速度仍然无法比肩有线传输,备份所消耗的时间将是备份至本地磁盘的 3-4 倍。

备份我U盘中的 40G 的 Manjaro 系统用时 30min 左右。

倘若你有大把的时间,或家中的内网速度足够快,大可使用无线备份。品着咖啡,看着数据上云(笑)。

预先准备

上文中我们选择了基于 Debian 的 Clonezilla Stable 版本,遗憾的是 Debian 系统中并未携带太多驱动程序,因此识别不到我的 Intel AX200 无线网卡。

经过测试,基于 Ubuntu 的 Clonezilla Alternative Stable 版本可以识别到 AX200 网卡。

点击上方链接即可下载 Clonezilla Alternative Stable 版本的映像。

重新烧写启动U盘/拷贝映像至多启动U盘即可。

又遇到了启动问题

使用基于 Ubuntu 的再生龙,上文中使用的 KVM 模式变得无法打开了,且 VGA 800x600 模式是一样的花屏。

在一番尝试之后,我发现藏在更多启动选项菜单里的 VGA 1024x768 模式可以正常显示。看来基于 Debian 的再生龙也可以使用这个模式。

开始备份

网络管理

选择了非本地的镜像存储位置后,系统将开启上图的网络管理菜单。

选择第一项 Edit a connection

连接管理

选择 Add 选项,在弹出菜单中 Wi-Fi

添加 Wi-Fi

Profile name 随意填写;

Device 一般填写 wlan0,系统的第一块无线网卡;

接着,按照自己的情况填写图中划线的三个配置即可。

连接状态

保存 Wi-Fi 配置后,就能看到当前配置的连接状态。

若当前配置名前带 *,且右侧选项为 Deactivate,则 Wi-Fi 已连接成功。

填写 Webdav 服务器地址

接着,系统要求填写 Webdav 地址。

确认 Webdav 配置

最后,系统会向你确认 Webdav 是否正确。

若确认无误,即可敲击回车继续。

接下来的步骤和上述初级教程硬盘挂载之后的流程是完全一样的,请参考上文继续配置。

DELL 灵越 15 5547 拆解与更换硅脂

2022年5月22日 10:30

DELL 灵越 15 5547,Intel i5-6200U,Nvidia Geforce 630M,8G DDR3-1600 + 256G SATA SSD(后期改装),是我的第一台笔记本。这台笔记本的拆机过程比较繁琐,是我目前遇见的最难拆解的电脑,故作此文章,分享一下如何拆解一台笔记本,并为其更换硅脂。

A面

概述

本次拆机共耗时 1H 30Min,是拆解正常机器所花费时间的两到三倍。

拆解步骤包括:卸下后盖、拆除电池、拆除硬盘、拆除风扇、拆除键盘、卸下基座、卸下散热器、更换硅脂,然后是逆序执行上述拆解步骤,组装电脑。

拆解准备

拆机少不了一套好工具。

为了无伤拆机,需要准备一套好用的螺丝刀防止螺丝滑牙;还需要一套塑料拆机工具,用于撬开后盖。

笔记本的硅脂,我选择了霍尼韦尔 7950 相变硅脂,不容易挥发,不需要经常更换。

开始拆机

怎么拆呢

其实几个月前我就有给这台设备清灰、换硅脂的念头,但拆开机器之后我发现主板被塑料框架罩住了,无法拆下散热器。我研究了半天也没找到拆下框架的方法,便只清理了风扇的灰尘,没有更换硅脂。

而这次,我有备而来:我查到了 DELL 官方的用户手册 ,其中详细记载了拆解这台机器的方法。接下来的拆解步骤就严格按照官方的教程啦。

第一步:卸下后盖

翻到 D 面,拧下两颗固定螺丝,就能将后盖拆下,可以触及无线网卡、内存条、2.5 寸硬盘、电池和散热风扇,日常需要维护的部件都能轻松触及,好评。散热器和主板则在塑料框架之下。

D面后盖之下

第二步:拆除电池

释放主板电荷是电脑拆机中至关重要的一步!

在主板带电的情况下拔插任何端子都是不明智的做法,很可能会将主板上的高电压线路误接入低电压线路(例如拔插屏线时没有正对接口),烧坏一片元件。

这台机子的电池没有排线,直接接入主板。卸下围绕电池的四颗螺丝,手提塑料片,就可将电池卸下。

翻到 C 面,长按电源键 10s,可重复两到三次,确保主板中的电荷完全释放。

电池模块

第一次见这种电池模块,比起长条状的电池可以更好地利用机身空间。

第三到五步:拆除硬盘、散热风扇和键盘

卸下固定硬盘座的螺丝,抽出硬盘,再断开 SATA 与供电二合一的线缆,即可取下硬盘。

拔下主板上散热风扇的端子(位于风扇左侧),卸下固定螺丝,即可取下散热风扇。

翻到 C 面,用手或塑料工具扣出键盘模块,注意不要大力提起键盘!小心地提起一段距离,断开机身上的排线,键盘就取下来了。裸 C 面上还有两条排线,都需要断开。竖直方向排线需从孔洞中穿回 D 面。

裸C面

第六步:卸下基座

这是我第一次见笔记本中的基座,没有手册的指导很难拆下。

首先,确保 C 面两根排线已断开。

翻到 D 面,小心地断开屏幕排线(位于散热风扇左侧)。

再翻到 C 面,按手册图示卸下所有螺丝。

翻回 D 面,同样地卸下一堆螺丝,注意这两面的螺丝都是 M2.5x7 规格,长于主板用螺丝,混用可能会戳穿主板。

DELL 在机身和框架上都有标注螺丝孔对应螺丝的规格,非常好评!

确认卸下所有螺丝后,用塑料工具插入基座与机身的缝隙,划开卡口。

待大部分卡口都解开时,小心提起基座,注意将基座上的线缆和排线取下,基座就彻底与机身分离了。

基座背面

基座的背面,可以看到是 PC + ABS 材料,分量很足。

拆下基座后的机身

拆下基座之后的机身,暴露出了主板和子板。散热器是梦幻单热管,不过压这两个破芯片足够了。

第七步:卸下散热器

散热器共有六颗螺丝,四颗在 CPU 上,两颗在显卡上。

为了使散热器均匀受力,不能一次性直接拧下一颗螺丝,而是平均为每颗螺丝卸力,可以每个螺丝一次转两圈,直到所有螺丝都被卸下。裸晶脆弱,有必要好好保护一下。

CPU的旧硅脂

不难看出,CPU 上的硅脂全部凝固,且裸晶上的硅脂基本流失殆尽(散热器上也没剩多少)。

去除大部分凝固的硅脂,再用酒精片擦拭、用布擦干。

更换硅脂的步骤我就不在此赘述,商家一般会提供详细的视频介绍,按着教程做就可以了。

干净的CPU

i5-6200U 的全貌,右侧长条状的裸晶应该是集成显卡吧。

擦干净的GPU

Geforce 930M 显卡,非常小个。

显存芯片

DDR3 显存,封装方式和 DDR4 不一样,更扁一些。

后续步骤

接下来就是逆序刚刚的拆解步骤,我就不再赘述。

注意几点:

  • 安装散热器时也需保证受力均匀,且不能过分用力,可能会压碎裸晶。
  • 安装基座时注意将线缆与排线置于合适的位置,不要被基座压到了。

拼装完成后,插电,开机,轻松点亮。

总结

拆解一台电脑并没有想象中的那么困难,拆解不同电脑的方式也都大同小异,上述的步骤一般都能适用。

我已拆解了不下 10 台/次 笔记本,目前还未翻过车。

下次清灰、更换硅脂,试着自己动手吧!

Virmach Japan

2022年4月6日 22:15

老朋友 Virmach 最近搞了场日本的预售。上游是 XTom,线路走的 IIJ。配置从 1C 384M 到 2C 2.5G 都有,价格则是 11.11刀/年 起(预售打 8 折, 8.89刀/年起)。

我买的这台是折后 9.7刀/年,1C 768M 20G NVME 2T 双向流量的配置。


直观感受:性能强劲,白天网络不错。晚高峰也能用,不爆炸。

下面放测试数据:

综合测试

CPU 很幸运地抽中了 5900X,可以看到硬盘速度非常 OK。

早上的网络情况很不错,没指望能跑满 G 口,毕竟这么多人分 10G 的口子。

性能测试

不愧是 5900X,单核跑出了部分志强将近3倍的成绩!AMD, YES!

开一台 2C 2G 的机子完全可以当作开发服务器使了。

国内网络测试

白天

三网表现均不错呢。

晚高峰

惊了,晚高峰表现很不错耶。

流媒体解锁

Virmach 只字没提流媒体,就别报多大希望。

不过作为日本的 VPS 自家游戏都不能解锁……这 IP 优化的不大行。

总结

网络不错,性能强劲,如此便宜的价格可以说性价超高。

合宙 EPS32-C3 把玩记录(二):WiFi 与一个 Web 程序

2022年3月27日 00:15

了解一下相关的库

  • 串口通信

这个库是自带的,不需要引入。

据我的理解,单片机的串口就是控制台程序的控制台,可以返回一些信息给上位机。

会用到的几个指令:

1
2
3
4
5
6
7
Serial.begin(Baudrate);	//参数为串口通信的波特率
Serial.end();
Serial.read(); //读取串口收到数据的第一个字节
Serial.peek(); //读取串口数据中下一字节的内容
Serial.flush(); //清空缓冲区
Serial.print/println(); //不用多说
Serial.write(); //写二进制数据
  • WiFi.h

#include <WiFi.h>

AP(接入点) Mode

创建一个接入点。

1
2
3
4
5
WiFi.mode(WiFi_AP);			//设置工作在 AP 模式
WiFi.softAPConfig(local_IP, gateway, subnet);
//定义本机 IP(这个不大确定)、网关 IP 和子网掩码
//IPAddress 数据类型格式:IPAddress local_IP(192,168,4,22);
WiFi.softAP(SSID,PASSWD); //启动 AP,参数不多解释,返回 bool

更多函数见 WiFi.h AP 常用方法说明

STA(站点) Mode

接入一个 AP。

1
2
3
WiFi.mode(WIFI_STA); 		//设置工作在 STA 模式
WiFi.start(SSID,PASSWD) //连接至 AP,参数不多解释
Serial.println(WiFi.localIP()); //打印本机 IP,省的去路由器管理界面看

更多函数见 WiFi.h STA 常用方法说明

  • WebServer.h

#include <WebServer.h>

创建一个简单的网站服务器。真的很简单。

一个个函数讲有点难理解,我放在这节的例程里面说明。

写一个测试程序吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <WiFi.h>
#include <WebServer.h>
//引入所需要的两个库

const char *SSID = "YOUR_SSID";
const char *PASSWORD = "YOUR_PASSWORD";

WebServer server(80); //网站服务器将运行在 80 端口

void handleIndex() //收到 HTTP 请求的回调函数
{
server.send(200, "text/plain", "Hello from ESP32!");
//发送 HTTP 相应,内容分别为:状态码,Content-Type,响应体
}

void setup()
{
Serial.begin(9600); //开启串口,波特率设置为 9600
Serial.println();

WiFi.mode(WIFI_STA); //设置工作在 STA 模式
WiFi.begin(SSID, PASSWORD); //连接至指定 AP
while (WiFi.status() != WL_CONNECTED) //等待网络连接成功
{
delay(500);
Serial.print("."); //将连接信息输出至串口
}
Serial.println("WiFi connected!");

Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //打印本机 IP

server.on("/", handleIndex); //注册链接(类似与注册一个路由),并选择回调函数
//同样的,还可以注册别的链接,如
//server.on("/test", handleIndexTest);

server.begin(); //开启 HTTP 服务器
Serial.println("WebServer begin!");
}

void loop()
{
server.handleClient(); //不断相应 HTTP 请求
}

访问串口返回的 IP,即可看到 Hello from ESP32! 这句话啦。

还有个 Web Server 叫 ESPAsyncWebServer

自带的 WebServer 是同步的,只支持处理一个连接。对于这种体量的机器其实足够了。

顺便学习一下一个第三方库吧。

添加库

对于这款 ESP32,需要下载并导入两个库(源码 ZIP 即可):

me-no-dev/AsyncTCP: Async TCP Library for ESP32

me-no-dev/ESPAsyncWebServer: Async Web Server for ESP8266 and ESP32

在 Arduino 的项目 > 加载库 > 添加 .ZIP 库中导入这两个库。

用 ESPAsyncWebServer 重写刚刚的例程吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
//注意替换为新的库

const char *SSID = "YOUR_SSID";
const char *PASSWORD = "YOUR_PASSWORD";

ESPAsyncWebServer server(80); //同样替换为新的对象

void handleIndex(AsyncWebServerRequest *request) //回调函数有更改
{
request->send(200, "text/plain", "Hello, world!");
//发送 HTTP 相应,内容相同
}

void setup()
{
Serial.begin(9600); //开启串口,波特率设置为 9600
Serial.println();

WiFi.mode(WIFI_STA); //设置工作在 STA 模式
WiFi.begin(SSID, PASSWORD); //连接至指定 AP
while (WiFi.status() != WL_CONNECTED) //等待网络连接成功
{
delay(500);
Serial.print("."); //将连接信息输出至串口
}
Serial.println("WiFi connected!");

Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //打印本机 IP

server.on("/", handleIndex); //注册链接(类似与注册一个路由),并选择回调函数
//同样的,还可以注册别的链接,如
//server.on("/test", handleIndexTest);

server.begin(); //开启 HTTP 服务器
Serial.println("WebServer begin!");
}

void loop()
{
//不用在这儿监听 HTTP 请求了
}

理论上来讲,上面的代码应该是正确的……

但 Arduino 在编译的时候报错,内容是 ESPAsyncWebServer 库中的某些代码。

有待我弄清楚出错的原因。

❌
❌