-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
1283 lines (1252 loc) · 253 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://blog.udon.eu.org</id>
<title>カレーうどん屋</title>
<link href="https://blog.udon.eu.org" />
<updated>2024-11-12T15:30:00.000Z</updated>
<category term="教程" />
<category term="随笔" />
<category term="软件" />
<category term="小鸡测评" />
<category term="3D 打印" />
<category term="嵌入式开发" />
<category term="GitHub Actions" />
<category term="Hexo" />
<category term="DIY" />
<entry>
<id>https://blog.udon.eu.org/archives/2c54052d.html</id>
<title>我再也不能不假思索</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/2c54052d.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>正值下班时间,你拖着疲惫的身体漫步街头。地铁站的入口熙熙攘攘,那是回家的方向。</p>
<p>正要走下地铁站路口的阶梯时,你发现了一个小孩子正朝着上行方向的电动扶梯走去。那是个连路都还走不清楚的孩子。</p>
<p>他的父母呢?你正张望着,希望能找到那个冒失的,或许正在专心看着手机而放松了警惕的父亲或母亲。</p>
<p>孩子朝着电梯摇摇晃晃地走了几步。想从上行的电梯往下走,这对于成年人都不是一件容易的事情,何况是小孩子。他大概刚踩上运行着的扶梯就会摔倒吧,真危险。你这么想着,稍微放慢了一些脚步,继续观察着孩子,也在观察着是否有人会出手拦住他。</p>
<p>你看到一个上了些年纪,头发有些发白的老人。他双手都拎着东西,是柴米油盐,重量拉低了他的双肩。他会帮忙吗?</p>
<p>你想起了上周,也是在下班的时间点,与即将乘坐的是同一个班次的地铁上,你幸运地找到了车厢里的最后一个座位。椅背上有没有贴着“爱心座位”的标志,你已经不记得了。你和今天一般疲惫,正在漫无目的地滑着手机屏幕,打发着无聊的通勤时间。视线越过手机屏幕,你瞥见一个老人,头发有些发白,双手都拎着重物,站在你的面前。</p>
<p>要让出座位吗?你一边滑动手机,一边思考着。“刚下班,大家都很辛苦”,你想起了在食堂偶然间听到的同事间的对话,“虽然我怀孕了,很需要一个座位。不过看到大家都这么累,我也不好说些什么了”。是啊,刚刚完成了一天工作的你,正需要充分的休息,哪怕是在地铁里坐下十几分钟对你也是无比的重要。想到这里,你底下了头,继续看起了手机……</p>
<p>也许是双手的重物让老人无暇顾及他人,迫使他加快步伐向下走去,他并没有发现那个正朝着上行扶梯走去的小孩子。此时孩子又向着扶梯迈出了几步。再往前几步,就踏上扶梯出口的金属盖板了。接下来会发生的事情难以想象。</p>
<p>会有人帮忙的吧?你继续张望着,同时心中也在盘算着——拦住了这个孩子,就意味着得守着他,直到那个粗心的父母匆匆赶来。谁知道要等多久,绝对是赶不上马上要到站的地铁了。你尝试把目光瞥向其他地方,似乎不再去看那个孩子,他就会安然无恙。但你做不到。</p>
<p>有一个阿姨快步走上前来,是要来帮忙的吗?你有一些即视感,仿佛之前在哪里见过这位大约四十岁出头,看上去有些憔悴的阿姨。</p>
<p>那是前几个月的一个早晨,你刚入职公司不久。向来遵守规矩的你今天也准时来到地铁站,乘上与昨天、前天、大前天都是同一时刻到站的地铁,这样就能准时到达公司,给大家留下一个好印象。地铁缓缓驶入站台,车门在悦耳的提示声中打开。此时,隔壁车门处却传来不和谐的声音。你循声望去,有人摔倒在列车与站台的间隙处,是一个看着四十岁左右的女性。是不小心绊倒了吗?还是没有吃早饭,有些低血糖了?不管怎样,她瘫坐在门口,久久没有起身。</p>
<p>要去扶一下吗?你迟疑了一会儿,没有上车。地铁站里有那么多保安,他们应该会处理好吧。扶起来之后,肯定得陪着她,直到有工作人员来照看才能离开吧,那今天早上要迟到了。你思考片刻,还是踏上了地铁,但还是转过身来,透过车窗继续观察。你看到有人和地铁站的保安一同将这位女性搀扶至阶梯边,地铁的门得以关闭,你可以准时到达公司了。想到这里,你的心安定了一些……</p>
<p>可惜的是,阿姨也没有注意到一个孩子正全然无知地朝着危险走去,就走下了楼梯。孩子摇摇晃晃地向前迈步,顷刻间,一只脚已经踏上了扶梯的盖板,再向前几步,就到了不断运转着的扶梯。</p>
<p>这样下去那个孩子肯定会摔下去的,你稍稍将行走的方向朝扶梯偏移了些许,做好了冲刺、抓住孩子的准备。同时,你也祈祷着能有人抢先你一步出手,并收拾剩下的残局。</p>
<p>一步、又一步,真的没有人肯帮忙一下吗?或许此刻真的只有我一个人注意到了这个孩子?你的视线游离,大步朝着扶梯走去,却被一个飞跃而过的身影叫停了步伐。</p>
<p>“小朋友,等一下。你的爸爸妈妈呢?”是一个年轻人,背着皮包,打扮时髦。他拦住了孩子,一只大手挡住了孩子前往扶梯的路,将孩子推离了危险。</p>
<p>看到这里,悬在空中的石头落地,你便也随着大流走下了阶梯。只不过,在那之后,在等候地铁时、坐在地铁中、或是淋浴、发呆之际,你都会回忆起过去的你,那个会毫不犹豫拾起地板上的垃圾、主动让出座位、扶起摔倒的人、给予他人帮助的你。你会不由自主地问自己:</p>
<p>我从什么时候开始,再也不能不假思索地做一件事情?</p>
</content>
<category term="随笔" />
<updated>2024-11-12T15:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/95479b1f.html</id>
<title>Soundcore C30i 耳机</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/95479b1f.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>我目前在使用的耳机是 Sony LinkBuds,就是那款中间带了个孔的奇怪耳机。</p>
<p>它本是为了商务人士在办公场所使用而设计,收听耳机中声音的同时不会影响听取他人的谈话。它却被我这个耳道经常发炎的人看上了。</p>
<p>我想,中间带了个孔,那耳道内外的空气就是完全流通的,那耳道内肯定不会闷了吧!为了验证这一点,我特地去 Sony 的线下店体验这款耳机。佩戴上 LinkBuds,确实完全没有耳道被封闭的感觉,我便在网上欣然下单了。</p>
<p>然而,经过一段时间的佩戴,才发现我的想法过于天真:看似畅通无阻的气流,在直径不够大的圆环处有阻塞。内部产生的水蒸气无法排出,导致耳道仍然会有潮湿感。佩戴20分钟以上,摘下耳机放入耳机舱,一段时间后取出,会发现耳机舱内有冷凝水。</p>
<p>Sony LinkBuds 仍然不能解决我耳朵发炎的困扰。我便又踏上了寻找新耳机的旅途。</p>
<p>今天便是要介绍我找到的其中一款,有望成为最终解决方案的耳机 —— SoundCore C30i。</p>
<p><img src="/images/2024-06-13/01.jpeg" alt="外包装"></p>
<h2 id="设计"><a href="#设计" class="headerlink" title="设计"></a>设计</h2><p><img src="/images/2024-06-13/02.jpeg" alt="充电盒外观"></p>
<p><img src="/images/2024-06-13/03.jpeg" alt="充电盒开盖"></p>
<p>耳机充电盒的外观,以及开盖后的样子如上图所示,就不多介绍了。</p>
<p>开放式耳机相对于入耳式、半入耳式耳机,设计上花样多了不少。我看到的所有款式中,大致可以分为两类:</p>
<ul>
<li>使用挂钩悬挂在耳朵之后,将扬声器覆盖于耳道口,通过空气传导声音进入耳道的;</li>
<li>夹在耳垂上,耳机本身不覆盖或仅部分覆盖耳道口,通过侧向开口将声音导向耳道的。</li>
</ul>
<p>SoundCore C30i 属于后者。</p>
<p><img src="/images/2024-06-13/04.jpeg" alt="耳机本体"></p>
<p>我选择的是透明外壳的款式,耳机内部结构清晰可见。</p>
<p>左边耳机的扬声器处有一个开口,这便是朝向耳道的声音出口。</p>
<p>右耳朝上的是耳机背面,金色的圆片是触控传感器。</p>
<h2 id="佩戴感"><a href="#佩戴感" class="headerlink" title="佩戴感"></a>佩戴感</h2><p>夹耳的耳机其实还可以再分类。一种是本体柔软、有弹力,有点像悬挂在耳朵上的,将扬声器更多地覆盖于耳道口,以提升传音效率的耳机。</p>
<p>C30i 本体则不可以弯曲,采用虎口般的结构卡在耳垂上。在佩戴时需要找到耳垂比较薄的部分,将耳机从那里套入耳垂,再将耳机推向耳垂较厚的地方,就能牢固固定。看似还是有些松松垮垮,但因为耳机足够轻,不容易被甩掉。</p>
<p>我的感觉是,佩戴上没有什么异物感,但难以做到所谓“戴久了会忘记它的存在”这么夸张。</p>
<p>我尝试连续佩戴了两个多小时,期间耳朵没有任何被堵塞的感觉,且取下后耳朵没有丝毫的潮湿感。确实是完全的开放了!</p>
<h2 id="音质"><a href="#音质" class="headerlink" title="音质"></a>音质</h2><p>我的评价是:出奇的好。</p>
<p>因为是一种妥协,我对耳机的音质便不抱任何希望。实际听起来,虽然也有这非封闭式耳机缺乏低音等问题,其实音质相当不错。</p>
<p><img src="/images/2024-06-13/05.jpeg" alt="EQ 方案"></p>
<p>通过调整 EQ 配置,将高低频都拉高(经典两头高调法),效果更是好了许多!</p>
<p>我也听了一段博客,听清说话人的语音也没有任何困难。</p>
<h2 id="多设备连接"><a href="#多设备连接" class="headerlink" title="多设备连接"></a>多设备连接</h2><p>我原本买的是飞利浦的一款开放式耳机,到手之后才发现耳机没有双设备连接的功能。我平常有在手机和电脑之间切换使用的需求,少了这个功能实在不能接受。</p>
<p>C30i 支持同时连接两台设备,可以在两台设备间无缝切换。</p>
<h2 id="续航"><a href="#续航" class="headerlink" title="续航"></a>续航</h2><p>商品说明上标明了耳机单次续航是 10 个小时,这应该是相当厉害的了。加上充电盒,总共可以提供 30 个小时的续航。</p>
<p>实际用下来,在 2 小时的使用后,耳机的电量没有明显的减少。续航应当是很强劲的。</p>
<h2 id="缺点"><a href="#缺点" class="headerlink" title="缺点"></a>缺点</h2><p>目前我看到的一个缺点是,耳机缺少自动休眠功能。将充电盒打开,耳机便会连接所有设备,摘下后仍保持着连接。直到耳机放回充电盒,并盖上盖子后,耳机才会关机。</p>
<p>且耳机缺少佩戴检测,摘下后不会停止音乐播放。似乎耳夹式耳机比较少有这个功能。</p>
<p>这可能会抢占了一些设备的音频输出,不过不算是很大的缺点。</p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>SoundCore C30i 有效解决了我耳道容易发炎的痛点,音质不错,且有多设备连接的功能,满足了作为我主力使用的耳机的所有需求。</p>
</content>
<category term="随笔" />
<updated>2024-06-13T06:40:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/adc5a61e.html</id>
<title>日本之行-第二站-奈良</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/adc5a61e.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p>23年12月底,我踏上了前往日本的旅途。这是我第一次去日本,是我第一次出国旅行,且只身一人。</p>
<p>本次旅行为14天,我将分多个章节完成所有的游记,记录下我旅行中的点点滴滴、各种感想。这是第二章节,奈良之旅。</p>
<h2 id="近铁、巴士与鹿"><a href="#近铁、巴士与鹿" class="headerlink" title="近铁、巴士与鹿"></a>近铁、巴士与鹿</h2><p><img src="/images/2024-03-11/00.jpeg" alt="使用 Suica 乘坐近铁"></p>
<p>奈良距离大阪仅有 30km,乘坐近铁奈良线,摇摇晃晃一个多小时便能到达奈良。</p>
<p>这条线路有分区间准急、准急、急行、快速急行四个速度,每个速度停靠的站点数量不同,票价都相同的。如果想尽快到达奈良,乘坐快速急性是最好的选择。</p>
<p>这天,我纯凭心情来到近铁难波站,坐上了最近一班开往奈良的近铁,似乎是急行。</p>
<p>近铁的运行速度不是很快,叮叮当当地在楼房间穿行着。</p>
<p>在近铁奈良站,奈良线的终点站下了车,距离旅馆所在的奈良公园还有一段距离。由于拖着行李,我选择搭乘公交车。</p>
<p>公交车到站后会向站台一侧倾斜车身,方便乘客上下;上车的门并不固定,可以看车身的贴纸判断;司机会很耐心地等待所有人上车、落座之后才摆正车身、继续前进。</p>
<p>有一些线路是分段计费的,就需要在上车的时候领取一张整理卷,或者先刷一下卡,在下车的时候将钱和整理券一起投入投币机,或者刷一下公交卡就可以了。</p>
<p>在每一个座位的旁边都有一个按钮,如果下一站要下车,按一下就会提醒司机,并且在车头的显示屏上也会显示,车上的所有按钮都会亮起。在公交车到站停稳之前无需先起身,车子停稳后司机也会很耐心地等大家付钱、下车,还会一个一个道谢哦。</p>
<p>相比于地铁,公交的到站时间显得没有那么准确,但不会差太多。在地面运行的公交会受到交通的影响,等候乘客上下车、付钱有时候也会用掉不少的时间,能做到按照时间表运行已经相当厉害了。</p>
<p><img src="/images/2024-03-11/01.jpeg" alt="路边的鹿"></p>
<p>虽然在车上就有看到,果然很多啊 —— 奈良的鹿。</p>
<p>奈良的鹿是散养的,主要集中在奈良公园和春日大社。在奈良设有鹿苑,将受伤或者发情的鹿收养,待它们恢复正常再放回乡中散养。</p>
<p>从车站走到旅馆,一路上都有鹿儿好奇地打量着来自异国他乡的我。</p>
<p>每走一段距离,能看到提示观光客不要“挑逗”鹿儿的提示牌,有些鹿的性格比较差,会用头顶你,追着你不放的。好在大部分鹿都去掉了角,不至于顶伤人。</p>
<p><img src="/images/2024-03-11/02.jpeg" alt="鹿园宾馆"></p>
<p>今天的旅馆确实有些简陋 —— 私人活动空间仅有这么一小间,洗浴和方便都是公用的。不过旅店的氛围很好,有一个共用的客厅,客人们可以在这里吹暖气(冬天还是挺冷的)、喝饮料、聊天。</p>
<p>旅店的工作人员非常热情,替我办理好入住手续后,立刻拿出一张奈良公园的地图,用简单的中文(很厉害哦!)告诉我这附近有哪些好玩的地方。奈良一天的行程就是参考着这张地图安排的。</p>
<p>整理好行装,已是傍晚五点多。按照旅店工作人员以及 Google Maps 的说法,奈良公园里的大部分饮食店都要下班了!遂立刻出门,寻找晚饭的地点。</p>
<p>因为今天是周五吗,明明还有一些旅客在此游玩的,旅店对面的旅游纪念品店已经关门了!沿街打量了几家店铺,也都在收拾着大堂,准备打烊了,完全不像是会接客的样子。大危机,要没晚饭吃了,得走个几公里处了奈良公园,到达奈良市区才有便利店。</p>
<p>路过了一家同样是卖纪念品的商店,发现店内的空间还挺宽敞,也摆着一些桌椅,便问了一下老板还有没有饭吃。运气很好,这家店还没有打烊。</p>
<p><img src="/images/2024-03-11/03.jpeg" alt="親子丼"></p>
<p>可以选择的菜品并不是很多,大多数都是日本的家常菜。我选择了这道绝大部分和食餐馆都会有的家常菜 —— 親子丼。</p>
<p>从厨房门帘的缝隙向里望去,可以隐约看见老板在烹饪着饭菜。明明用得都是同样的工具和食材,有技艺的人做出来的东西就能端上桌卖钱呢。</p>
<p>蛋是我们所谓“半熟”的柔滑状态,鸡肉有一些小烧焦,主要的风味是自古以来人们就离不开的味道 —— 咸味。风味不能说突出,却很平和。它就是一碗很普通、很平常,此时此刻会出现在任意一张餐桌上的饭。</p>
<p>饱饭后,我根据地图的指引,前往东大寺的二月台,观赏日落之景。</p>
<p><img src="/images/2024-03-11/04.jpeg" alt="二月台的日落1"></p>
<p><img src="/images/2024-03-11/05.jpeg" alt="二月台的日落2"></p>
<p><img src="/images/2024-03-11/06.jpeg" alt="二月台的日落3"></p>
<p><img src="/images/2024-03-11/07.jpeg" alt="二月台的日落4"></p>
<p>只用手机相机无法捕捉暗光下的美景。</p>
<p>夕阳柔和而昏暗地照着二月台,四周一片静寂,只能听见洗手亭的潺潺水声。在日落后还停留在奈良公园的游客寥寥,大家都保持着绝对的安静,共享这片难得的静谧。</p>
<p>在台上驻足数分钟,我轻轻踏着脚步走下楼梯,沿着寺院的小路漫步着,离开了东大寺。</p>
<p>此时天已完全黑了,不论是寺院还是神社都已关门,我就这么在奈良公园里漫步着。时不时碰见一群鹿,便从口袋中掏出一块鹿仙贝,掰给鹿儿吃。</p>
<p><img src="/images/2024-03-11/08.jpeg" alt="果汁"></p>
<p>会旅店前在路边的售货机买了一瓶果汁饮料,是不二家的。日本的饮料会标注果汁含量,我觉得很神奇。</p>
<p><img src="/images/2024-03-11/09.jpeg" alt="春日大社"></p>
<p>第二天,去参观了十分出名的春日大社。不过不恰巧,主殿正在维修,将赛钱箱设置在了原处,只能眺望主殿。</p>
<p>在巫女那儿买了点纪念商品,是两只鹿型的小玩偶。一只是木质的,一只是陶制的,鹿儿的嘴中叼着签。忘记留下照片了。</p>
<p><img src="/images/2024-03-11/10.jpeg" alt="林间小道"></p>
<p>离开主殿,走上铺着碎石的小道。</p>
<p><img src="/images/2024-03-11/11.jpeg" alt="路旁的神社"></p>
<p>每走几步,便会出现一间迷你神社,感觉十分奇妙。在这片林海中不知道供奉着多少的神明。</p>
<p>有些人也许是提前来做新年参拜,途中遇到的神社都会十分虔诚地参拜。</p>
<p>在林间漫步了将近一个小时,吸饱了新鲜的空气,我振奋精神,回旅馆取了行李,准备离开奈良。</p>
<p><img src="/images/2024-03-11/12.jpeg" alt="若草山"></p>
<p>拖着行李箱漫步在奈良公园里,我又一次路过了若草山。</p>
<p>若草山也不高,在满是丘陵的福建甚至都算不上山,只是个小土坡。山上的草长得格外整齐,是一座越看越顺眼的山呢。</p>
<p>若草山每年12月初开始封山,直到第二年三月举行烧山仪式后才重新开放。没能上去走走真是可惜。</p>
<p><img src="/images/2024-03-11/13.jpeg" alt="柿叶寿司 set"></p>
<p>在前往近铁奈良站离开奈良前,我路过了一家在网上有着不少讨论的柿叶寿司店,便决定在这里解决午饭。</p>
<p>柿叶寿司其实就是用柿子叶将寿司包起来烹饪。据说柿子叶不仅可以杀菌消毒,还能给寿司提升风味。</p>
<p>想着,既然是奈良的特色菜,肯定要好好品尝一下。我点了一份 2500円 的大套餐,奢侈一下~</p>
<p>左下角的五枚寿司,上方两枚便是柿叶寿司了。下方三角形的寿司也是用不能吃的叶子包着,但好像不是柿子叶;右侧是用腌制过的紫苏叶包的寿司,紫苏叶是可以吃的,风味很独特,我很喜欢;左侧是茶味的卷寿司,也是第一次吃。</p>
<p>柿叶寿司用的是腌制过的鱼,确实带有叶子的香味,很有特色!</p>
<p>除此之外,套餐内还有精致的小菜、一份天妇罗拼盘和一碗素面。吃的我好饱~</p>
<p><img src="/images/2024-03-11/14.jpeg" alt="线上买的特急卷"></p>
<p>乘坐上前往京都的特急电车时还发生了一些小插曲。</p>
<p>坐上车后我才意识到自己坐的是特急的电车,进站时我只刷了基本票,没有购买特急卷。</p>
<p>好在列车上有通过扫描二维码购买特急卷的渠道,也支持借记卡付款。在等待列车发车时,我赶紧买了特急卷,带着行李移动到了指定座位,正式踏上前往京都的旅途。</p>
</content>
<category term="随笔" />
<updated>2024-03-10T16:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/a7050149.html</id>
<title>23 年对我影响最大的硬件与软件</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/a7050149.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>原文投稿在自留地频道的新年活动里。</p>
<p>对于我来说,23 年给我带来影响最大的莫过于 Meta Quest 3 与 VRChat 了。</p>
<h2 id="Quest-3"><a href="#Quest-3" class="headerlink" title="Quest 3"></a>Quest 3</h2><p><img src="/images/2024-03-01/01.png" alt="订单截图"></p>
<p>Quest 3 在 23 年 6 月面世,于 9 月 28 日开放预购。我早在数年前就有了尝试 VR 的念头,在经过一天的调查研究后确定了 Quest 3 不会踩坑,便在日亚下了单,直邮回国。日亚上标价为 78k 円,日本商品出口不收税,再加上直邮的运费和中国的关税,最后到手的价格和标价差不多。(顺便一提,现在日亚也可以以相同的价格直邮国内)</p>
<p>外观我就不展示了,网上的图很多。到手第一件事,便是尝试它对于上一代产品相比提升最大的地方——显示与穿透(Pass Through)。</p>
<h3 id="显示效果"><a href="#显示效果" class="headerlink" title="显示效果"></a>显示效果</h3><p>显示效果上,Quest 3 采用了 Pancake 棱镜,甜点位置(Sweet Spot)相对于上一代更大,也就是说仅需简单调整头戴的位置,便能找到画面最为清晰的位置,我的使用体验上感觉也是如此,每次佩戴上头显很快就能调整好画面。</p>
<h3 id="穿透-Pass-Through"><a href="#穿透-Pass-Through" class="headerlink" title="穿透 (Pass Through)"></a>穿透 (Pass Through)</h3><p><img src="/images/2024-03-01/02.jpeg" alt="穿透效果"></p>
<p>穿透方面,由于我没有用过 Quest 2、Quest Pro 等拥有穿透功能的 VR 头显,无法进行比较。图片中看起来比较糊,是因为我用了 Quest 自带的截图功能,分辨率很低。实际观感上,在光线充足的环境中可以毫无压力地辨认各种物体,但细小的字是看不清楚的。戴着 Quest 使用手机并不是很舒服,因为物体距离头显过近会因摄像头视角的问题产生扭曲,看字会很吃力。将手机拿远,又会因为显示清晰度不够而看不清字。不过听说 Quest 2 的穿透是黑白且十分模糊,Quest Pro 也好不了很多,Quest 3 在这个方面应是有十足的进步。(似乎离 avp 还有很大的差距)</p>
<hr>
<p>相比于头显中不带有处理芯片的 VR 眼镜,Quest 可以使用无线串流软件将 PCVR 的画面投影至头显中显示,再也不用担心玩游戏时绊倒数据线了。</p>
<p>总而言之,Quest 3 是一副功能完善,各方面实力均不弱的“六边形战士”,但毕竟定位是廉价头显,也就缺少了 Quest Pro 的自定位手柄、眼部追踪,Valve Index 的基站定位、手部追踪,更没有 Apple Vision Pro 的高 ppi 显示屏、低延迟的穿透与精准的手势识别。但综合来看,Quest 3 的性价比高,适合刚刚步入虚拟世界,想要体验各式各样 VR 游戏的人购买。</p>
<h2 id="VRChat"><a href="#VRChat" class="headerlink" title="VRChat"></a>VRChat</h2><p>谈到 VR 游戏,有人会想到 Half-Life:Alyx,有人会说起(已经凉掉的) Beat Saber。根据 SteamDB 的数据,此刻在线数量最多的 VR 端游戏还得是 VRChat(主要为 PC 端的战争雷霆不算)。</p>
<p>在我看来,VRChat 里有大概有四类人。</p>
<h3 id="第一类人:虚拟世界的旅行家"><a href="#第一类人:虚拟世界的旅行家" class="headerlink" title="第一类人:虚拟世界的旅行家"></a>第一类人:虚拟世界的旅行家</h3><p><img src="/images/2024-03-01/03.jpg" alt="风景大好"></p>
<p>有些人想“逃避现实”,来到虚拟世界欣赏美景、转换心情。在 VRChat 里有各种各样风格的地图:有些风景大好、音乐舒缓,适合在快节奏的生活之余找到一个宁静之地放松紧绷的精神;有的地图灯红酒绿,如果在夜晚你还是激情满满,不妨来这里听听虚拟 DJ 的表演,大家一起蹦迪、饮酒;甚至还有环境昏暗、一片寂静,十分适合睡眠休息的卧室地图,虽然深处异地,也能在虚拟世界里与好友共眠,在清晨醒来的那刻发现自己的眼前并不是早已习惯了的天花板,耳边是仍在熟睡的友人的呼吸声,将会是一种全新的体验。</p>
<h3 id="第二类人:虚拟世界的摄影师"><a href="#第二类人:虚拟世界的摄影师" class="headerlink" title="第二类人:虚拟世界的摄影师"></a>第二类人:虚拟世界的摄影师</h3><p><img src="/images/2024-03-01/04.jpg" alt="人也很美"></p>
<p>也有些人想在虚拟世界里做一个摄影师。美景的照片中怎么能少了美人,如果现实中找不到美人,那就自己来扮吧(心死)。VRChat 中使用的人物模型可以由玩家自行上传,如果你恰巧会使用 Unity 与 Blender,便可以为自己量身定制一个人物模型;如果不会也没有关系,在 Booth 上有许多预制好的人物模型与衣服,只要按照教程将其组合,便可打造出你心目中的理想形象(不管男女)。为了拍出满意的照片,你会主动去学习各种各样的新技能:为了调整照片的后期效果,我就学习了 Lightroom 的使用。</p>
<h3 id="第三类人:人,不过是在虚拟世界里"><a href="#第三类人:人,不过是在虚拟世界里" class="headerlink" title="第三类人:人,不过是在虚拟世界里"></a>第三类人:人,不过是在虚拟世界里</h3><p><img src="/images/2024-03-01/05.png" alt="和朋友聊天"></p>
<p>这或许才是 VRChat 的核心内容 —— 当然是和朋友聊天啦。在 VRChat 中有一些专门用于聊天、交友的地图,例如以中文为主的“中文吧”;也有一些比较热门的地图会聚集起各个语言的人群一起聊天,例如“Japan Shrine[spring]”,一张风景优美的日本神社地图;更有各种各样以个人或小团体主办的咖啡厅、运动吧、跳舞房、游戏房等着你来加入。也许你和我一样有些小“社恐”,在现实生活中不大善于和陌生人交际,不妨试试在 VRChat 中,与素未谋面但已经熟络的朋友,或是围坐在篝火旁闲聊,或是在电闪雷鸣、乌云滚滚的夜空中乘坐飞机探险,相信这对你一定会给你带来从所未有的新鲜感。</p>
<h3 id="第四类人:OOOO"><a href="#第四类人:OOOO" class="headerlink" title="第四类人:OOOO"></a>第四类人:OOOO</h3><p>还有一类是搞色色的,就不多说了。</p>
<p>以上只是从我的眼中看到的 VRChat。一千个人的心中有一千个哈姆雷特,你的 VRChat 又将会是什么样的呢?</p>
<hr>
<p>自从 23 年 10 月 3 日加入 VRChat 以来,我学会了怎么修改模型、如何使用全身追踪让自己在游戏中灵活运动;尝试在跳舞房里学习舞蹈,在 KTV 房里与朋友唱歌,与来自全球的人使用中、英、日闲聊;在 VRChat 中结交了新的朋友,在 X 上发布了拍摄的照片。VRChat 确确实实已经融入了我的生活,仿佛在另一个世界塑造了另一个不同的我。</p>
</content>
<category term="随笔" />
<updated>2024-03-02T12:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/a534d51a.html</id>
<title>旅行与军粮</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/a534d51a.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="军粮的特点"><a href="#军粮的特点" class="headerlink" title="军粮的特点"></a>军粮的特点</h2><h3 id="1-便携"><a href="#1-便携" class="headerlink" title="1. 便携"></a>1. 便携</h3><p>一般来说,军粮都会被较为紧凑地包装,以便于大批量运输与随身携带。如确认将有一餐饭需要在外解决,可以在出发时往包里塞上一份军粮。</p>
<h3 id="2-分量足"><a href="#2-分量足" class="headerlink" title="2. 分量足"></a>2. 分量足</h3><p>军粮的营养构成一般都是按照一个运动量中上的成年男性一餐所需要的卡路里来设计的。因此,即使不能完全饱腹,其所含的营养足够填补在外游玩半天空空的肚子了。</p>
<h3 id="3-便于烹饪"><a href="#3-便于烹饪" class="headerlink" title="3. 便于烹饪"></a>3. 便于烹饪</h3><p>相比于需要加入开水的方便食品、甚至是冻干食品,军粮一般自带加热设备,仅需冷水,甚至不需要水都可以加热食物。若是去荒郊野岭的地方露营,除非有携带便携式汽炉,想获取到热水是比较难的,这时候有自加热的军粮会很方便。</p>
<h2 id="俄罗斯单兵口粮普餐"><a href="#俄罗斯单兵口粮普餐" class="headerlink" title="俄罗斯单兵口粮普餐"></a>俄罗斯单兵口粮普餐</h2><p><img src="/images/2024-02-12/01.jpg" alt="外包装"></p>
<p>这次买到的6号餐谱,包含五包干粮、牛肉丸、牛肉荞麦饭、牛肉炖豆角、牛肝酱、午餐肉、蔬菜丁罐头以及饮料、果酱、零食等散件,还有一套由三个燃料药丸、一个铝制支架和几支防风火柴组成的明火加热套装。</p>
<p><img src="/images/2024-02-12/02.jpg" alt="塞满的盒子"></p>
<p>旅行的第一天是登山,午餐便携带了部分的食物作为午餐。</p>
<p>有些小雨,便找了一处有雨遮的地方开始准备午饭。</p>
<p><img src="/images/2024-02-12/03.jpg" alt="加热装置"></p>
<p>将铝板弯曲成炉子的形状,在炉子的中央放上燃料药丸,再用防风火柴点燃,便是一个功能完备的加热装置。</p>
<p>小贴士,我试着用火柴从上方点燃药丸,尝试了两次都失败了。将火柴放在炉子里,然后将药丸放在火柴上,便能很轻易地将其点燃。</p>
<p><img src="/images/2024-02-12/04.jpg" alt="正在加热的蔬菜丁罐头"></p>
<p>点燃固体燃料后,将盛有食物的铝制罐子放在火上直接加热即可。如果有带铝或者钛制的杯子,也可以直接放在火上烧水,泡些饮料喝。</p>
<p><img src="/images/2024-02-12/05.jpg" alt="干粮、芝士与肝酱"></p>
<p>在等待罐头加热时,我先掏出了干粮与蘸酱。除了照片里的芝士与肝酱,还有一包苹果果酱。</p>
<p>芝士的味道与常见的芝士片如出一辙,在我看来稍微淡了些,因此也比较适合直接吃。</p>
<p>牛肝酱则是特别的腥,单独吃我有些吃不来,和着芝士与果酱吃味道倒是还不错。</p>
<p>拿出一片干粮(其实就是苏打饼干),涂上果酱,挖一勺芝士,再放上一点点牛肝酱,一口塞进嘴里,味道还算不错。</p>
<p>饼干有些干硬,嚼起来有些费劲儿,需要配水。</p>
<p>最后,完吃完了一份饼干、一盒芝士和一包果酱,牛肝酱剩下了一大半。</p>
<p><img src="/images/2024-02-12/06.jpg" alt="牛肉丸"></p>
<p>接下来是牛肉丸。看到红色的外表就能猜到是罗宋汤风味的。</p>
<p>应该是罐藏的缘故吧,牛肉已经泡得很软了,吸收了罗宋汤酸酸甜甜的风味,味道还算不错。就是牛肉味已经不是很浓,能吃得出来是肉,但没有什么特殊的肉的风味。</p>
<p>顺便一提,用这种炉子加热,铝盒子受热举起不均匀,中间已经滚烫,但四周还是冰的,需要多多翻搅。</p>
<p><img src="/images/2024-02-12/07.jpg" alt="蔬菜丁罐头"></p>
<p>从外表看不出来里面有啥,红红的肯定也是罗宋汤的味道。里头的蔬菜主要是胡萝卜,也有青椒、青豆等蔬菜。但这一碗的味道就不好了,青椒的味道和西红柿(或者是甜菜)的酸甜并不搭。</p>
<p>把饼干蘸着牛肉丸的汤汁吃,味道也不错。涂涂果酱、涂涂芝士,饼干便吃完了一包。</p>
<p>又吃了点麻麻那边的自热口粮,便已饱腹,我的食量确实不大啊。</p>
<p><img src="/images/2024-02-12/08.jpg" alt="蔬菜丁罐头上的うさこ"></p>
<p>这一餐其实只吃了整套餐的 1&#x2F;3 左右,剩下的量再吃两次正餐不成问题。</p>
<p>回到家后,又拿出了些零食品尝了一下。</p>
<p><img src="/images/2024-02-12/09.jpg" alt="巧克力棒"></p>
<p>来自俄罗斯的巧克力棒,偏甜,一股代可可脂的廉价感,属于不大好吃的巧克力。</p>
<p><img src="/images/2024-02-12/10.jpg" alt="速溶咖啡、奶与糖"></p>
<p>右上角是速溶咖啡,右下角是奶粉,左边的一大包是糖。糖的量很大,明显不止是一次饮料的量,也可以放在茶里喝。</p>
<p>咖啡很苦,一股烧焦味,不好喝。奶粉大概也是植脂末吧,没什么奶味。</p>
<p>剩下的食品我分成了两餐解决。</p>
<p><img src="/images/2024-02-12/12.jpg" alt="第一餐"></p>
<p>第一餐的搭配是:牛肉荞麦饭、肥肉罐头和干粮(饼干)。</p>
<p><img src="/images/2024-02-12/13.jpg" alt="第一餐的内容"></p>
<p>也许我加热的还不够,但考虑到在野地里使用便携式炉子加热的能力,士兵们能加热到中间完全热乎,周围有些凉是平均水平了。荞麦饭很硬,风味也不是很好,除了咸味和一点牛肉味,尝不出别的滋味了。加了一些套餐内的黑胡椒粉,才改善了一些风味。</p>
<p>不过这一大碗饭确实很能填饱肚子,适合放在午餐食用。</p>
<p>肥肉罐头里自然是盐腌风味的很肥的肉啦。味道我还挺喜欢的,肥肥的肉很好吃,十分下饭。</p>
<p><img src="/images/2024-02-12/14.jpg" alt="第二餐"></p>
<p>第二餐的搭配是:牛肉煮豆子、午餐肉、苹果泥、酱牛肉(来自国产 MRE)和干粮(饼干)。</p>
<p><img src="/images/2024-02-12/15.jpg" alt="第二餐的内容"></p>
<p>牛肉煮豆子用的会是什么豆呢,豌豆吗?啊,原来是黄豆。</p>
<p>并没有延续牛肉丸、蔬菜罐头的罗宋汤风味,只是单纯的咸味,不过味道我还挺喜欢的。</p>
<p>牛肉其实不多,就一大块带筋、软烂的牛肉,剩下都是碎块。除了黄豆外还有一些胡萝卜。</p>
<p>午餐肉很小一罐,但确实是肉泥,淀粉含量并不多,味道也不错。</p>
<p>苹果泥是我整个套餐中最喜欢的一样食物了。口感绵密,酸甜度适中,汁水十足。配合干粮一起吃,很大地改善了干粮过干、过硬的缺点。而且好大一罐,吃得很满足。使得这一餐中我干掉了两袋干粮。</p>
<h2 id="国内的军粮-——-以北戴河的自热口粮为例"><a href="#国内的军粮-——-以北戴河的自热口粮为例" class="headerlink" title="国内的军粮 —— 以北戴河的自热口粮为例"></a>国内的军粮 —— 以北戴河的自热口粮为例</h2><p>09式单兵自热口粮我吃过几份,13式这种两餐包装在一起的也吃过一次。</p>
<p>这次选购的是北戴河生产的自热口粮。虽然不是军品,但北戴河前身是军工厂,产品会比较接近军品吧。包装风格与09式也很相像。</p>
<p><img src="/images/2024-02-12/11.jpg" alt="酒店里的自热口粮"></p>
<p>那天感冒的发烧刚退,人还比较虚弱。住的度假酒店位置比较偏,不想跑太远去吃晚饭,便取了车上的自热口粮回房间吃。</p>
<p>我吃过太多次了,便没有拍照片,下面就口述一下感受。</p>
<p>相比于09式单兵自热口粮,北戴河出品的民用口粮内容少了很多 —— 没有了耐贮蛋糕、糖水黄桃&#x2F;菠萝、调味辣椒酱和固体饮料,只有一份主食,一份配菜(酱牛肉和午餐肉二选一)和一份小菜(榨菜)。</p>
<p>09式的餐谱相当多样,有 12 个餐谱,有炒面也有炒饭,也有一些主食是素食的,满足部分人群的需求。</p>
<p>北戴河的仅有三种餐谱,且都是荤食的炒饭。</p>
<p>主食包外套着加热袋,用注水袋取对应量的水(生水、脏水皆可)倒入加热包即可完成主食的加热。</p>
<p>味道上,我认为北戴河做得是不如当年的09式的。饭总体都偏咸,但肉给的十分足。</p>
<p>但相对于俄罗斯的军粮,不知道是口味上有着主场的优势,还是俄罗斯人烹饪技术真的不佳,还是中国的军粮更胜一筹。</p>
</content>
<category term="随笔" />
<updated>2024-02-12T14:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/7777583b.html</id>
<title>被我整坏的路由器和服务器</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/7777583b.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>为了搭建 PalWorld 的私服,我又一次踏上了折腾之旅,并成功将路由器和家里的服务器都搞崩了。</p>
<p>好在最后两台设备都恢复如初。我就想来做一下这次“事故”的复盘。</p>
<h2 id="我的设备"><a href="#我的设备" class="headerlink" title="我的设备"></a>我的设备</h2><p>本次操作的有两台设备,一台是 x86 软路由,运行 Openwrt;一台是配置比较奇怪的 x86 服务器,运行 PVE。</p>
<h2 id="Openwrt-的网络隔离配置"><a href="#Openwrt-的网络隔离配置" class="headerlink" title="Openwrt 的网络隔离配置"></a>Openwrt 的网络隔离配置</h2><p>说在前头,我对 Openwrt 的操作真的是一窍不通。网络相关的知识兴许懂一些,但一到实操环境就纰漏百出了。</p>
<p>由于 PalWorld 服务端启动后便会在游戏的服务器列表公开自己的 IP,且无法关闭这个功能,有比较大的安全隐患。在配置好 PalWorld 服务端所运行的虚拟机后,我决定将这台虚拟机的网络与局域网内其他设备隔离。这也是所有折腾的起源。</p>
<h3 id="配置-VLAN-导致的失联"><a href="#配置-VLAN-导致的失联" class="headerlink" title="配置 VLAN 导致的失联"></a>配置 VLAN 导致的失联</h3><p>我能想到的第一个方案便是,给这台虚拟机分配一个与当前局域网不同的网段,并将两个网段隔离。</p>
<p>VLAN 我还是知道的,便着手开始创建新的 VLAN,并保存…连不上路由器了。</p>
<p>急了啊,创建了 VLAN 就代表开启网桥的 VLAN 过滤。目前这个 VLAN 没有分配给任何一个接口,自然是啥都连不上了。好在 Openwrt 有自动回滚的功能,90 秒若设备连不上路由器,便会将刚刚的更改回滚…但不是每次都能成功。</p>
<p>有反复折腾了几次:创建 VLAN、创建接口、创建防火墙的 Zone,分配来分配去,中途也搞砸了几次,配置也都回滚了,直到最后一次尝试,luci 弹出了令人感到安心的“正在回滚配置”的提示,然后就…卡住了。</p>
<p>考虑到 Openwrt 使用的是 squashfs,怀疑是设备上的设置确实回滚了,但内存中的配置没能正确地回去,我将设备断电重启。果不其然,配置回到了应用前的样子。</p>
<p>在尝试配置 VLAN 数次后,我放弃了。即使给虚拟机分配了新网段,也设置好了防火墙规则,虚拟机依旧可以访问到内网网段的设备。</p>
<p>目前我还没有闲心思慢慢研究 Openwrt 的种种配置,便打算换一个方式实现。</p>
<h2 id="配置-PVE-防火墙"><a href="#配置-PVE-防火墙" class="headerlink" title="配置 PVE 防火墙"></a>配置 PVE 防火墙</h2><p>第二个方案便是,在 PVE 的防火墙中禁止虚拟机连接内部网段的其他设备了。</p>
<h3 id="启动-Datacenter-防火墙但没有添加允许规则导致的失联"><a href="#启动-Datacenter-防火墙但没有添加允许规则导致的失联" class="headerlink" title="启动 Datacenter 防火墙但没有添加允许规则导致的失联"></a>启动 Datacenter 防火墙但没有添加允许规则导致的失联</h3><p>我启用了虚拟机的防火墙,发现配置并没有生效。简单查询后发现,需要将 Datacenter 的防火墙启用,VM 防火墙才有效果。我便看也没看地就开启了 Datacenter 防火墙,发现管理后台页面无法刷新了。此时我才看到屏幕上 Datacenter 防火墙的默认配置 —— IN: DROP.</p>
<p>这下好了,外部连接统统被阻断,也就无谈通过控制面板将防火墙再关闭。</p>
<p>这台服务器是无头的,安装有一张 P100 显卡,但没有显示输出。所以在不动硬件的情况下,我没法通过显示器访问终端的。</p>
<p>通过检索,我了解到了好几种奇技淫巧来关闭 PVE 的防火墙。</p>
<h3 id="挂载并修改-crontab"><a href="#挂载并修改-crontab" class="headerlink" title="挂载并修改 crontab"></a>挂载并修改 crontab</h3><p>正好手上有一个硬盘盒,我就将系统盘取下,通过硬盘盒连接到了软路由,尝试修改系统盘里的文件。</p>
<p>使用 <code>fdisk</code> 查看这块系统盘的分区情况,但没有看到熟悉的 <code>ext4</code> 字样。取而代之的是 <code>Linux LVM</code>。LVM 相当于是 Linux 对磁盘进行了再一次的分区,因此挂载就不能是简单的 <code>mount</code>,得用 <code>lvm2</code> 工具。</p>
<p>再敲了几个命令后,我成功将 PVE 分区的 <code>root</code> 文件夹挂载,并在 crontab 中添加了关闭 PVE 防火墙相关的命令。</p>
<p><code>umount</code>,取下系统盘并装回服务器,开机…没有任何反应,依旧打不开管理面板。是教程给的方法有误吗?</p>
<p>遂又取下盘,挂载到软路由上,却提示该分区忙…我是相当忌惮挂载并修改分区的,生怕损坏了分区,服务器的数据可就全丢了。不敢再继续操作,我得另想出路。</p>
<h3 id="连接显示器,但还是个瞎子"><a href="#连接显示器,但还是个瞎子" class="headerlink" title="连接显示器,但还是个瞎子"></a>连接显示器,但还是个瞎子</h3><p>现在能做的就是在服务器上通过 PVE 的 rescue terminal,来修改防火墙的配置了。</p>
<p>我关闭了服务器,取下 P100,换上了 R7 240 这张十年老兵,插上了便携显示器…</p>
<blockquote>
<p>error: No suitable video mode found. Booting in blind mode.</p>
</blockquote>
<p>你这不是输出字了吗,怎么就进瞎子模式了???</p>
<p>经过查询,我了解到系统正在寻找到显示模式,正是古早电脑终端使用的 <code>80-Column</code> 这样的显示模式。</p>
<p>至于什么是 Blind Mode,我尝试在 GRUB 和 Linux 源码中搜索,都没有结果;为什么 PVE 系统找不到我的 R7 240,可能是缺少驱动吧,现在也无处知晓。</p>
<p>按照网上的教程尝试在 GRUB 引导系统启动时添加显示模式的支持,并没有效果;当我尝试打印支持的显示模式时,发现根本不存在正常的显示模式,故只能放弃直接启动 PVE 的 rescue terminal.</p>
<h3 id="还是得靠救援盘"><a href="#还是得靠救援盘" class="headerlink" title="还是得靠救援盘"></a>还是得靠救援盘</h3><p>给服务器插上救援盘,我先是打开了基于 Windows 的 PE 系统,发现显卡是有输出的,但分辨率非常低,且只有黑白画面。看来这张老显卡与这块寨板的相性真的不大好。</p>
<p>在确认 Windows PE 系统下什么都做不了,操作还及其不便,我便退出了 PE 系统,打开了 Ubuntu LiveCD。</p>
<p>这回,显卡倒是可以正常运行。以 <code>80-Column</code> 模式输出文字还是可以轻松办到的。有了命令行,操作也简单了不少。</p>
<p>同为 Linux,操作 LVM 就简单了许多。使用 <code>lvm2</code> 挂载 PVE 的系统分区,并用 <code>chroot</code> 将用户空间切换至 PVE 系统,直接用 <code>systemctl disable pve-firewall</code> 把防火墙关了。</p>
<p>再次进入 PVE,这下开机防火墙就不会启动,赶紧进 Datacenter 防火墙设置里还原误操作的配置。</p>
<h2 id="事后的反思"><a href="#事后的反思" class="headerlink" title="事后的反思"></a>事后的反思</h2><h3 id="VLAN-配置的失误"><a href="#VLAN-配置的失误" class="headerlink" title="VLAN 配置的失误"></a>VLAN 配置的失误</h3><p>我对 VLAN 配置没有经验,便想着参考网上其他人的配置方法来做。但我查到的都是创建访客 Wi-Fi 这类的配置教程。与我的网络环境的差异在于,访客 Wi-Fi 用的 Interface 与 LAN 不一样,而我需要在 LAN 下配置两个 VLAN,配置方法就有些不同,不能直接搬配置。</p>
<p>我应当要找的是较为通用的,同一个 Interface 下 VLAN 的配置教程(可能单臂路由配置和这个就有些像),再迁移到 Openwrt 上进行配置。</p>
<p>由于软路由只有两个网口,也没法像有四五个网口的路由器一样留下一个作为”不死“的管理口,以降低把路由器配置挂掉的风险。</p>
<h3 id="PVE-原本可以修得更快"><a href="#PVE-原本可以修得更快" class="headerlink" title="PVE 原本可以修得更快"></a>PVE 原本可以修得更快</h3><p>原本在将 PVE 系统盘挂载到软路由时,便可以用 <code>systemd</code> 停掉 <code>pve-firewall</code> 但当时我看到 PVE 论坛里有人说在 crontab 里加上 PVE 关闭防火墙的指令便能访问控制面板了,也有人附和说可以用。但我实际操作后发现并没有效果。</p>
<p>而再次尝试挂载 LVM 时,提示分区忙让我不敢继续操作。虽然在服务器上用 LiveCD 直接挂载并没有出现分区忙的情况。</p>
</content>
<category term="随笔" />
<updated>2024-02-12T10:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/aca48136.html</id>
<title>日本之行-第一站-大阪</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/aca48136.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p>23年12月底,我踏上了前往日本的旅途。这是我第一次去日本,是我第一次出国旅行,且只身一人。</p>
<p>本次旅行为14天,我将分多个章节完成所有的游记,记录下我旅行中的点点滴滴、各种感想。这是第一章节,出境与大阪之旅。</p>
<h2 id="第一次出境"><a href="#第一次出境" class="headerlink" title="第一次出境"></a>第一次出境</h2><p>我从上海浦东机场出境。</p>
<p>航班预计上午 9:40 起飞,根据网上的经验教训,国际航班建议提早三个小时到达机场办理值机手续。我早早地起了床,搭上了第一班磁浮列车,在六点五十分左右到达了机场。</p>
<p>拖着行李箱直奔值机柜台,发现队伍已经很长。排了一个多小时的队才轮到我。</p>
<p>我提前在网上进行了值机选座,现场只需要将行李箱托运,打印一下登机牌。工作人员会确认护照和日本 eVisa(电子签证)。</p>
<p>我提前将电子产品和需要独立安检的物品取出,安检也十分顺利。</p>
<p>不过在过海关的时候,工作人员看到我护照崭新,又是独自一人,不免有些担心,向我索取了酒店预订记录和行程单。酒店预订记录只要出示订购软件的订单界面即可;我没有做行程单,就将记事本里的旅行计划给工作人员看,第一天在哪里啊,过两天又跑去哪里玩…得知我全程的酒店都已订好,行程也安排清楚,便允许我出境了。</p>
<p>在候机厅的长椅上坐下时,距离飞机的预定起飞时间只有半个小时了。看来国际航班确实需要早点来机场办手续(虽然最后延误了两个小时)。</p>
<p>这是我第二次坐飞机。上一次是我还在读小学的时候,不明不白地上了飞机、又下了飞机,除了耳朵有些不舒服。没有其他的感想。</p>
<p>这次,我特地选择了靠窗的位置,仔细观察着飞机的起降与飞行时的动作。看到了起飞和降落时襟翼的展开,看到了遇到乱流时机翼“夸张”的摆动,感叹着这种看似“简易”的机器是如何将一机人送上天。</p>
<p><img src="/images/2024-01-21/01.jpeg" alt="日本上空"></p>
<p>飞机餐的话…上一次坐飞机是国内航线,没有在饭点所以没有供餐,这是我第一次体验飞机餐。</p>
<p><img src="/images/2024-01-21/02.jpeg" alt="鱼肉米饭套餐"></p>
<p>没有选择的余地,大家统一都是鱼肉米饭套餐。和我能想象到的飞机餐没有太多区别 —— 一般咸味的鱼肉,煮得软烂的米饭(也可能是再加热的缘故)与味道平平的配菜。坐的毕竟是经济舱,不能期待太高~</p>
<p><img src="/images/2024-01-21/03.jpeg" alt="鱼肉米饭的特写"></p>
<p>经过两个半小时的飞行,飞机平稳降落在了关西国际机场。飞机缓慢驶向空桥的途中,我更换了日本的流量卡,给手表切换了时区。</p>
<p>入境相对出境更加简单。出发前我就在网页中预先填写好了入境信息表与海关申报表,在对应的窗口或机器扫码即可完成申报。在入境窗口只需出示一下 eVisa,录入一下人脸和指纹就可以了。</p>
<p>工作人员会用英语引导你操作,录入机器上也有中文提示。机场的指示牌都是四语的(日语、英文、中文和韩文),按照指示牌走就没有问题。</p>
<h2 id="大阪之行"><a href="#大阪之行" class="headerlink" title="大阪之行"></a>大阪之行</h2><h3 id="Day-1-舒适的酒店与海游馆之旅"><a href="#Day-1-舒适的酒店与海游馆之旅" class="headerlink" title="Day 1 - 舒适的酒店与海游馆之旅"></a>Day 1 - 舒适的酒店与海游馆之旅</h3><h4 id="APA-酒店"><a href="#APA-酒店" class="headerlink" title="APA 酒店"></a>APA 酒店</h4><p>起飞延迟了两个小时,降落也迟了一个多小时。达到关西国际机场已是下午 3:30(这之后都是 UTC+9 时间)。我乘坐南海机场线前往难波站附近的 APA 酒店。</p>
<p>插一嘴,在日本用 Google Maps 相当方便,交通工具的规划和信息展示都做得很棒。“通勤案内”这款官方推荐的交通软件我也有下载,不过用的最多的还是 Google Maps。</p>
<p>等地铁、电车、新干线时,只要看 Google Maps 上的到站时间,到了哪辆车就上哪辆车。除非两个方向的车同时到站,否则是绝对不会坐错方向的。</p>
<p><img src="/images/2024-01-21/04.jpeg" alt="APA酒店大楼"></p>
<p>APA 酒店大楼的装修很有特色,在远处就能看到橙色的屋顶和 APA 的标志,而且在全国的风格都是统一的。</p>
<p><img src="/images/2024-01-21/05.jpeg" alt="APA酒店房间"></p>
<p>内部的装横令我十分惊喜:房间不是很大,但各种设施一应俱全,在床铺正对的墙上甚至有一台大屏电视。浴室毫不意外地配备了浴缸,还有定量放水系统,不用盯着浴缸有没有水漫金山了。寝具也相当的舒服,那两晚都睡得很好。</p>
<p>对于一间一晚 300CNY 左右的旅馆,能有这样的体验我十分满意。</p>
<h4 id="咖喱与牛排"><a href="#咖喱与牛排" class="headerlink" title="咖喱与牛排"></a>咖喱与牛排</h4><p>办好入住手续,放下行李,已是五点多。飞机餐的显然填不饱我的肚子,我早已饥肠辘辘,是时候出门觅食了。</p>
<p>大阪海游馆是我计划中必去的一站,但它位于海港村,和其他景点在相反的方向,便安排在今晚游玩了。</p>
<p>日本人很奇特的一个习惯出现了:有些店铺傍晚 6:00 到 6:30 就收摊了,最晚的会开到七点八点左右,再迟就只剩下营业到深夜的家庭餐厅与居酒屋。</p>
<p>用“食べログ (tabelog)”这款软件在海游馆附近搜索评价比较高的店铺。</p>
<p>在海游馆隔壁有一个小小的综合体,里面有一些店铺还有在营业。我选择了这家评价很高的牛排咖喱餐馆。</p>
<p><img src="/images/2024-01-21/06.jpeg" alt="牛排咖喱"></p>
<p>一份牛排咖喱饭、一碟酱菜、一碗味增汤。价格有些忘记了,在 1500円 左右。</p>
<p>日本人很喜欢吃这种细长的青椒,不会辣,在天妇罗中也会出现。</p>
<p>咖喱的甜口的,味道自然比百梦多咖喱块要好上数倍。牛肉很嫩,没有怎么调味,展现的是肉本身的鲜味。总之,相当的美味。</p>
<p>对了,需要使用现金哦~ 商家没有准备 POS 机。</p>
<h4 id="大阪海游馆"><a href="#大阪海游馆" class="headerlink" title="大阪海游馆"></a>大阪海游馆</h4><p>已经记不清上一次去水族馆是多少年前。听说大阪海游馆的设施很棒,场馆也很大,我就来体验一下。</p>
<p>门票的价格是 2600 円,入场有分时段,我就在售票处购买了当前时段的票。</p>
<p>海游馆很大,步行参观的总距离在 1km 左右,按照地理位置划分成了好几个区域。</p>
<p><img src="/images/2024-01-21/07.jpeg" alt="趴在水箱顶的鳐鱼"></p>
<p>进入场馆便是一个巨大的拱形水箱。是玻璃比较薄吗,还是用了什么技术,几乎看不见玻璃带来的重影,鱼仿佛真的在空中悬浮。</p>
<p><img src="/images/2024-01-21/08.jpeg" alt="正在睡觉的海狮"></p>
<p>一群正在睡觉的海狮。抬着头睡觉不会落枕么。</p>
<p>![巨型水箱]&#x2F;images&#x2F;2024-01-21&#x2F;(9.jpeg)</p>
<p>在场馆的中央有一个巨大的水箱,有两头鲸鲨、几头锤头鲨和许多小鱼生活在其中。</p>
<p><img src="/images/2024-01-21/10.jpeg" alt="花园鳗~"></p>
<p>还有好多可爱的花园鳗,黄色的尤其可爱~</p>
<p>除此之外,还有来自各个大洲的鱼、南极的企鹅,在地下还有水母馆。</p>
<p>总共逛了一个多小时,可以说大饱眼福了。</p>
<p><img src="/images/2024-01-21/11.jpeg" alt="天保山摩天轮"></p>
<p>在海游馆的隔壁是天保山摩天轮,夜晚被彩色的灯光照亮特别好看。</p>
<p>此时已是 19:30,经历了一天奔波的我有些劳累,便回到酒店养精蓄然,计划第二天的行程。</p>
<h3 id="Day-2-天守阁、天满宫、天筋桥与大阪烧"><a href="#Day-2-天守阁、天满宫、天筋桥与大阪烧" class="headerlink" title="Day 2 - 天守阁、天满宫、天筋桥与大阪烧"></a>Day 2 - 天守阁、天满宫、天筋桥与大阪烧</h3><p><img src="/images/2024-01-21/12.jpeg" alt="酒店的自助早餐"></p>
<p>在日本的第一顿早餐,在酒店隔壁的参观享用了自助餐。</p>
<p>炒蛋和上次去香港在澳洲牛奶公司吃到的有点像,并没有完全做熟,非常的软嫩~</p>
<p>茶泡饭就很有日本的特色了。</p>
<p>饭后,我就前往难波站附近的旅游中心,购买大阪周游卡。我选择的是二日卡,价格是 3600 円。在两天内,可以免费乘坐大阪地铁与巴士(相较于一日卡,不能乘坐私铁),以及免费参观好多景点。</p>
<p>大阪地铁网络十分发达,基本覆盖了所有想去的地方,这两天我没有搭乘过私铁或者巴士,因此不用担心是否要选择一日卡。</p>
<p>买到卡之后,第一站便是天守阁。</p>
<p><img src="/images/2024-01-21/13.jpeg" alt="天守阁外围"></p>
<p>从外边看,与只狼里的苇名城有几分相像。</p>
<p><img src="/images/2024-01-21/14.jpeg" alt="天守阁下"></p>
<p>天守阁内陈列着许多颇有历史的物件,只可惜我对日本的历史并不熟悉,也看不太懂书法家的笔墨,只是走马观花感受一下文化的氛围。</p>
<p><img src="/images/2024-01-21/15.jpeg" alt="天守阁顶"></p>
<p>最后在楼顶吹了吹风,便离开了天守阁。</p>
<p><img src="/1/images/2024-01-21/6,.jpeg" alt="一轮彩虹"></p>
<p>虽然有些冷,但天气真的很好,万里无云。下一站是天神筋桥,一个商业街。</p>
<p><img src="/images/2024-01-21/17.jpeg" alt="天神筋桥商业街"></p>
<p>日本有很多 OOばし(桥)这样的地名呢。也有很多像天神筋桥这样,上方覆盖着遮雨棚的商业街,天神筋桥是其中最长的一条,从一丁目延伸到七丁目,光是主干就有 2.6 km,更有密密麻麻的小巷。</p>
<p>乘坐堺筋线,在天神筋桥三丁目下了车。我先是去拜访了天满宫。</p>
<p><img src="/images/2024-01-21/18.jpeg" alt="大阪天满宫"></p>
<p>似乎内部在翻修,将赛钱箱放到了外边供大家参拜。</p>
<p>在这里,我给身边参加考研的人做了参拜,希望他们可以拿到好成绩。</p>
<p>接着,我便从二丁目开始,一路边逛边思考着午饭的去处,寻找着吃饭的店铺。</p>
<p>沿途,看到了大排长龙的可乐饼摊子,转了一圈再想回来买,发现已经卖完收摊了。有一家天妇罗的店门口也站着好多人,大排长龙。肚子好饿,肯定排不了这么长的队。</p>
<p>边走边用 食べログ 搜索着。来大阪就得吃些有大阪特色的,那就是大阪烧了。</p>
<p><img src="/images/2024-01-21/19.jpeg" alt="千草大阪烧"></p>
<p>并不在主街,而是藏在小巷子里的千草大阪烧,似乎是 食べログ 23年的百大名店呢。</p>
<p>我选择了以店铺名字所称的招牌菜 —— 千草大阪烧。</p>
<p>核心是一大片厚切的猪肉,在上下两面都倒上面粉与卷心菜混合的泥,便开始煎烤。</p>
<p>接待我的服务员会一些简单的英语,告诉我等着他们来翻面就好了。当地人也许会选择以自己的喜好来摊大阪烧,我作为门外汉只要静静欣赏就好。</p>
<p>当两面都煎至金黄,便会涂上大阪烧酱、沙拉酱和黄芥末酱,撒上不知道是什么的籽,就可以享用。</p>
<p>大阪烧整体的口感是软糯的,夹心的猪肉排很嫩,肉汁十足。</p>
<p>唯一可惜的是,量实在有些少,填不饱我的肚子啊~</p>
<p><img src="/images/2024-01-21/20.jpeg" alt="鲷鱼烧"></p>
<p>饭后继续在天神筋桥闲逛,发现了一家鲷鱼烧店。我还以为鲷鱼烧是软软的,但实际外壳是偏脆的,甜甜的红豆馅十分美味。</p>
<p>今天真的走了好久的路,对于第一次来到异国他乡的人可以说是有些得意忘形。从天神筋桥二丁目逛到六丁目,又折返了回来。中途还去 melonbooks 看了一圈,又跑到周游卡可以免门票的天王寺动物园里逛了逛…还没逛完,人就开始有些不舒服了。</p>
<p>在动物园里稍微休息了一下,我还是决定吃完晚饭就回酒店休息。</p>
<p><img src="/images/2024-01-21/21.jpeg" alt="大起水产回转寿司"></p>
<p>一次比较“失败”的体验。不要误会,寿司还是很好吃的,鱼类十分新鲜,但我一不小心就在 iPad 上点了太多的寿司,都吃进肚子之后已经很饱了,完全没有在回转的转盘上取过寿司!这和普通的寿司店不就没差别了吗!</p>
<p><img src="/images/2024-01-21/22.jpeg" alt="道顿堀"></p>
<p>回转寿司店出门便是热闹的道顿堀,然而我不是喜好这一口的人。路过蟹道乐,周围停着好几台旅游大巴,店门口密密麻麻的全部都是在等待的游客,大约有数百人。真是疯狂呐。</p>
<p>受不住喧嚣,我在附近的药店买了一支体温计和一盒退烧药,便回了酒店。</p>
<p>躺床休息了一阵子再测体温已经正常,看来真的是疲劳导致的体温失调。之后的旅途安排就宽松一些吧。</p>
<h3 id="Day-3-梅田蓝天大厦、天空美术馆与一兰拉面"><a href="#Day-3-梅田蓝天大厦、天空美术馆与一兰拉面" class="headerlink" title="Day 3 - 梅田蓝天大厦、天空美术馆与一兰拉面"></a>Day 3 - 梅田蓝天大厦、天空美术馆与一兰拉面</h3><p>睡了一个好觉,但人还是有些疲劳。前往异国他乡果然不能过于放肆,得做好身体的管理。今天就悠闲地度过吧!</p>
<p><img src="/images/2024-01-21/23.jpeg" alt="通往观景台的扶梯"></p>
<p>在酒店寄存行李后,搭乘地铁来到了梅田蓝天大厦。从三楼有快速电梯可以通往顶楼,然后乘坐扶梯来到屋顶的圆形观景台。</p>
<p>对了,有周游卡门票免费哦~</p>
<p><img src="/images/2024-01-21/24.jpeg" alt="梅田蓝天大厦楼顶观景台1"></p>
<p><img src="/images/2024-01-21/25.jpeg" alt="梅田蓝天大厦楼顶观景台2"></p>
<p>相比于其他观景塔,梅田蓝天大厦不算很高,但好在有开放式的观景台,视野特别棒。今天风有些大,在楼顶不是很站得住,欣赏了几分钟美景便回到了室内,点了一杯咖啡,坐在窗边静静欣赏着窗外景色。</p>
<p>梅田蓝天大厦外侧是镜面玻璃,倒映着天空、与天空融为一体,因此称作蓝天大厦。尼尔:机械纪元的开发公司白金工作室的总部就在这栋大楼里。</p>
<p><img src="/images/2024-01-21/26.jpeg" alt="天空美术馆1"></p>
<p><img src="/images/2024-01-21/27.jpeg" alt="天空美术馆2"></p>
<p>我还顺道参观了另一座楼的天空美术馆,虽然不怎么懂艺术,但画作依旧能感染我。</p>
<p>参观美术馆后,已是正午。该去找吃的了~</p>
<p><img src="/images/2024-01-21/28.jpeg" alt="一兰拉面的“考试”"></p>
<p>百闻不如一见,我来品尝一兰了。</p>
<p>每个人第一次来吃日式拉面都要面临一场“大考” —— 单应该怎么点。(背面有中文,我填完了才发现)</p>
<p>除了在点餐机器上确认要吃东西,在排位时服务员会给你一张纸片,让你选择拉面的喜好。</p>
<p>浓郁度我选择了加浓,确实有些过浓过咸了。吃着相当地过瘾,豚骨的香味充满嘴巴,真的很幸福。如果平常吃得比较清淡,正常的浓郁度可能就有些偏咸了,可以考虑减少一些浓郁度。</p>
<p>油脂的丰富度我也加了一档,但感觉不是特别明显。可能是看到日本有一种表面铺满油渣的拉面,一兰的面在油脂的方面反而显得“寡淡”了吧。</p>
<p>其余的选项便是看个人喜好。一兰的辣椒粉不会很辣,加 1&#x2F;2 倍感受不出辣味,但可以提升香味。</p>
<p><img src="/images/2024-01-21/29.jpeg" alt="一兰拉面"></p>
<p>交卷后,一碗一兰拉面,四片叉烧和一颗盐味溏心蛋上桌啦。</p>
<p>一兰号称在面出锅后15秒内就会传递到食客的面前,以体验拉面最新鲜的味道。我赶忙用手机拍了张照,便开始享用。</p>
<p>拉面和我之前吃过的感觉都不大一样,特别有筋道,麦香味也很浓。在浓厚的汤汁里蘸一下就有了豚骨的鲜味,没几口就把拉面吃完了,便又加了半份面。</p>
<p>上溏心蛋的时候同时给了个小碟子,如果蛋不好剥或者咸味不合适,可以让服务员帮忙换一个。</p>
<p>一口拉面,配上一口汤汁。再咬一口叉烧、一口糖心蛋,至福啊。</p>
<h3 id="前往奈良"><a href="#前往奈良" class="headerlink" title="前往奈良"></a>前往奈良</h3><p>饭后,回酒店取了行李,便是去难波站坐近铁奈良线,前往奈良了。</p>
<h2 id="一点感想"><a href="#一点感想" class="headerlink" title="一点感想"></a>一点感想</h2><p>语言不是问题,打招呼、点菜这种比较简单的对话就用手势与塑料日语,更复杂的对话用英语就好了。碰到的酒店前台经理、便利店员工、车站管理员都是会英语的。再不济,就用翻译软件吧,能达意就行~</p>
<p>至于习惯问题,按照当地人的做法来做就好了。在公共场合,例如楼梯应该走哪个方向,等地铁的时候应当怎么站,在地铁上有哪些地方不能使用手机,都有明确的标识和多语言的提示。多留意,照着做,就不会有事儿啦。</p>
</content>
<category term="随笔" />
<updated>2024-01-21T15:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/2ef8bd61.html</id>
<title>深圳-香港三日行</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/2ef8bd61.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="出行原因"><a href="#出行原因" class="headerlink" title="出行原因"></a>出行原因</h2><p>其实我很早就有去香港看看的念头,但有时间出游的机会并不多(机会很多,是我比较懒,更喜欢宅家),一直没去成。</p>
<p>前一段时间,在朋友的帮助下我注册了英国 Wise 账户,拿到了两张漂亮的实体卡,但后期如何入金成了个问题。了解到可以通过香港账户低损耗入金 Wise,我便有了前往香港开户的念头。</p>
<p>12 月底我将独自前往日本游玩,但这将是我第一次独自一人出去旅游。第一次单人旅行还是出国旅行,不禁让我有点担心。</p>
<p>在这两个背景的驱使下,我迅速定下了这次深圳-香港的旅行,既可以前去开户,也可以作为出国旅行的预演,提前暴露一些问题。</p>
<h2 id="流水账"><a href="#流水账" class="headerlink" title="流水账"></a>流水账</h2><h3 id="Day-1-Thu-深圳"><a href="#Day-1-Thu-深圳" class="headerlink" title="Day 1 - Thu - 深圳"></a>Day 1 - Thu - 深圳</h3><p>第一天中午到的深圳。我在前往酒店的半路上下了地铁,前往名为“臻品鲜粿·粿条世家”的店铺吃午餐。</p>
<p><img src="/images/2023-12-19/01.jpg" alt="潮汕粿条"></p>
<p>粿条本身没有很特殊,有点细河粉的感觉。不过八成熟的牛肉非常非常的嫩,味道很棒。</p>
<p><img src="/images/2023-12-19/02.jpg" alt="炸豆腐"></p>
<p>炸豆腐是赠送的,第一眼并太高的期望。但一口咬下,十分软绵的里芯呼之欲出,佐以略微有些咸的沾汁,味道很棒。</p>
<p><img src="/images/2023-12-19/03.jpg" alt="像海蛎煎一样的东西"></p>
<p>我还点了一份长得有点像海蛎煎的东西,记不得名字了。应该是用油炸的,比海蛎煎更加酥脆。</p>
<p>美美地享用午饭后,我继续登上地铁,前往酒店。</p>
<p>下榻酒店后,我前去参观深圳世界之窗景区…总之就是很后悔。</p>
<p>比起人造景观,我还是更喜欢自然景观一些。世界之窗没有给我带来惊喜,只有满满的失望。今天是周四,许多游乐设施都没有开放,可以参观的仅有一个个微缩复原的建筑物。</p>
<p>在世界之窗转了约两个小时,我悻悻离去,前往凤凰楼食茶点晚餐。</p>
<p><img src="/images/2023-12-19/04.jpg" alt="香煎多春鱼"></p>
<p>多春鱼的鱼籽很多,非常鲜美。</p>
<p>一个人出来吃饭确实有些不便。有些菜品一次只能点这么一大盘,不过还是美美的享用了。</p>
<p><img src="/images/2023-12-19/05.jpg" alt="鲜虾烧麦"></p>
<p>鲜虾烧麦就是吃鲜,特别的鲜甜。</p>
<p><img src="/images/2023-12-19/06.jpg" alt="牛杂炒肠粉?"></p>
<p>菜单上的字看得不是很懂,大概写的是炒肠粉吧,没想到上了这么大一盆长得也不像肠粉的东西。</p>
<p>吃了一下,似乎确实是切成一节一节的肠粉。味道不错,但量好大最后没吃完。</p>
<p><img src="/images/2023-12-19/07.jpg" alt="华强电子世界"></p>
<p>饭后,我顶着吃撑的肚子徒步前往华强北,这片传说之地。可惜的是,大部分店铺八点就关门了,简单逛了几栋电子市场后我便回酒店计划第二天的行程。</p>
<h3 id="Day-2-Fri-HK-开户"><a href="#Day-2-Fri-HK-开户" class="headerlink" title="Day 2 - Fri - HK 开户"></a>Day 2 - Fri - HK 开户</h3><p>一大早我便乘上了前往福田口岸的地铁。</p>
<p>7:30 左右的口岸没有什么人,大部分是赴港上学的学生,通关很快。</p>
<p>我在落马洲站选择乘坐 B1 双层巴士前往元朗区,开始了开户之旅。</p>
<p>沿途…说实话没有什么风光,元朗算是比较偏僻的地方,好风景还要等到第二天的香港岛之行。</p>
<p>8:00 我到达了中行门口,发现只有前来上班的员工,还没有来排队的人。如果希望第一个办理业务的朋友可以选择这个点就来等候。时间还早,我就去吃了个早餐,回来发现已经有两个人在排队,便加入了队伍。</p>
<p>9:00 准时进入了银行,取到了号。在我之前有提前预约的人,我排在了第 5 号。</p>
<p>在工作人员的引导下使用手机填写了信息,然后等待柜员办理剩下的手续。共有三个柜台在同时办理开户,一个人需要 30 - 60 分钟的时间。</p>
<p>11:00 左右,我完成了中行的开户。</p>
<p>我现场就拿到了银行卡,便在 ATM 存入了 500 元人民币,并兑换成了港币。</p>
<p>顺便在同一条路上的南洋商业银行和汇丰银行也完成了开户手续。这两家银行皆需要几个工作日审核信息,审核成功后会将卡片寄至通讯地址。</p>
<p>穿行于各家银行网点的途中,我发现了一家在他人游记上看到过的店铺——胜利牛丸,便暗自定下了午饭的去处。</p>
<p><img src="/images/2023-12-19/08.jpg" alt="牛丸、牛筋、牛腩三合一河粉"></p>
<p>三个愿望,一次满足。</p>
<p>面汤的颜色相当的“可怕”——仿佛是直接将卤水呈上来一般。但实际入口并没有很咸。牛肉们就不一样了,比较重口味的我也觉得有一点点咸。不过风味很棒,牛肉吃透了各种香辛料。</p>
<p>河粉藏在了对得满满的牛丸和牛肉之下,不是我常吃的宽河粉,比较窄。</p>
<p>虽然店名以牛丸冠名,我却没觉得牛丸有多么的美味,反倒是牛筋更胜一筹。</p>
<p>饭后,我在坐满老者的公园里稍稍歇息,并且计划着下午的行程……</p>
<p>此次香港之行除了开户,其实还有另一个目标——碧蓝档案与香港吃茶三千的联动~</p>
<p>在出发前的几天得知了联动的消息,运气真的很好。</p>
<p><img src="/images/2023-12-19/09.jpg" alt="电车"></p>
<p>虽然有更优的路线,我还是选择了体验一下地面上的有轨电车。有轨电车有点像巴士,也是由司机驾驶,也会受到其他车辆与行人的干扰,但行驶路线是沿着铁轨固定的。</p>
<p>随后乘坐地铁,前往金紫荆广场…的对面,星光大道。在这里陈列了许多明星的手印和画像。海港边上的风景大好。</p>
<p>在此稍停,开户还没有结束。大概是因为元朗距离内地太近,许多虚拟银行都需要前往更靠近香港中心一些的地方才可以开户。我在一家星巴克坐下,开通了 ZA Bank 和 livi Bank 的账户。</p>
<p>随后,便是前往海港城的吃茶三千点了一杯联动奶茶,从中心一步步移动回福田口岸——晚上要和群友面基。</p>
<p>我们俩聊得非常尽兴,聊到了十一点才分手,回到了酒店,速速洗漱完毕,预定了第二天早上从福田站前往香港西九龙的火车,便沉沉睡去。</p>
<h3 id="Day-3-Sta-HK-游玩"><a href="#Day-3-Sta-HK-游玩" class="headerlink" title="Day 3 - Sta - HK 游玩"></a>Day 3 - Sta - HK 游玩</h3><p>昨晚火车票订得比较迟,最迟的火车也是 7:45 的,更迟的都被人订光了。我又被迫起了个大早(这三天都是 6:30 之前起床的)坐地铁前往福田火车站,搭上前往香港西九龙站的火车。可能是比较早乘火车的人并不对,这一趟通关流程比较顺利,再迟一点可就不好说了……</p>
<p>到达九龙,我空着肚子在街上漫步,寻找可以填饱肚子的早餐店。打开地图,“澳洲牛奶公司”几个字印入眼帘,这不是前几天看到的网红店吗?我记得这家店只收现金,便前往沿途的便利店,在 ATM 用中银香港的卡取了 100 港币现金。没有注意到我用的是汇丰的 ATM,与银联网络并不互通,被收取了 15 港币的手续费 QAQ。(众安银行的卡在全港 ATM 可以免手续费取现,经常到港玩的话可以办一张实体卡)</p>
<p><img src="/images/2023-12-19/10.jpg" alt="九龙街头漫步"></p>
<p>带着现金,我来到澳洲牛奶公司的门口,果不其然,排起了长队。好在我是一个人,这家店是强制拼桌的,顺利超过了大团的游客,来到了店内。</p>
<p>给我的第一印象嘛…很拥挤,人挤着人,甚至是背贴着背。小小的一张圆桌围坐着四个人,各自享用着早餐。穿着白大褂的服务员在人群缝隙间穿梭着,高效地记录着到店客人的订单,飞速地将菜品传递到桌前。</p>
<p>落座,菜单压在桌子的玻璃之下,写满了粤语,说实话我看不大懂。纠结了几十秒,发现菜单上还写着“早餐”、“下午茶”等套餐,我便对服务员说:“早餐套餐来一份吧。”</p>
<p>话音未落,餐具和一杯茶便着陆在我的桌上。剩下的菜品也并我让我久等。</p>
<p><img src="/images/2023-12-19/11.jpg" alt="火腿通心粉"></p>
<p>首先呈上的是一碗火腿通心粉。味道比较清淡,喝不出黄色的汤底是什么熬制的,不过比较鲜。</p>
<p><img src="/images/2023-12-19/12.jpg" alt="牛油吐司与炒双蛋"></p>
<p>接着呈上的是一个盘子,两片吐司和炒鸡蛋各占半壁江山。牛油烘烤的吐司暖暖的,软软的;这份炒双蛋则是套餐的点睛之笔——调味微咸的鸡蛋并没有炒得很熟,在生与全熟之间掌握了平衡,做到了入口软绵,回味无穷,堪称是绝品。</p>
<p>如果有路过,一定要来尝一下这份炒鸡蛋~</p>
<p>一顿饱餐之后,我继续踏上旅途,前往太平山顶的观景台。</p>
<p><img src="/images/2023-12-19/13.jpg" alt="山顶缆车"></p>
<p>上山的路可以选择用脚走完,不过,还是要体验一下富有特色的山顶缆车~</p>
<p>缆车的斜度估摸着有三四十度,是我见过最陡的。缆车是建在山坡边上的,方便沿路欣赏香港的风景。</p>
<p><img src="/images/2023-12-19/14.jpg" alt="摩天台观景台"></p>
<p>缆车的终点站是太平山的山顶,下车后直接来到了凌霄阁摩天台的二层。沿着盘旋向上的电动扶梯,海拔逐渐升高,走着走着,最终到达了海拔428米的摩天台观景台。</p>
<p>在这里可以俯览香港的景色,听说夜景更美,不过我晚上并不住在香港,也就没有机会亲眼目睹,实在可惜。</p>
<p>摩天台上的风很大,吹着十分舒服。待了大约四十分钟,我便沿着原路返回,坐着缆车回到了山下。</p>
<p><img src="/images/2023-12-19/15.jpg" alt="漫步中环"></p>
<p>早餐吃得有够饱,到了饭点我还不是很饿,便在街道与小巷间漫步,寻找着午饭的好地点。我想找家正宗点的茶餐厅。</p>
<p>跟随地图,我来到了就近的广芳园…可等候的队伍早已排出店外,目测有三四十人在队伍中。因为下午就要坐动车回去了,我无心加入他们,便继续游荡着,寻找着。</p>
<p><img src="/images/2023-12-19/16.jpg" alt="菠萝包与阿华田"></p>
<p>附近的茶餐厅真的不多,跟随地图的指引,我来到了一家街边的小店。店内只收现金,而我身上只剩下不到五十港币,便选择了菠萝油和冰阿华田作为午餐,反正肚子不是特别饿。(冰的阿华田比热的还要贵上几块钱哦)</p>
<p><img src="/images/2023-12-19/17.jpg" alt="City Walk"></p>
<p>饭后,我一时兴起决定走路去西九龙火车站,而非乘坐地铁,便开始一趟 City Walk…差点把我 Walk 没了。</p>
<p>街上好多地方都在施工,地图的数据并没有新到可以帮我绕开因为施工而禁止通行的路段…再加上出海关也需要一些时间,我差点以为要赶不上车。</p>
<p>好在我还是在开始检票前就赶到了,算是有惊无险,顺利踏上了返乡的路,结束了此次旅程。</p>
<h2 id="我都带了些什么"><a href="#我都带了些什么" class="headerlink" title="我都带了些什么"></a>我都带了些什么</h2><p>此次我轻装上阵,只带了一个双肩包。</p>
<p>这次旅行我尝试了内衣、袜子和洗澡用具(浴巾与毛巾)都使用一次性的,省去了携带大量衣物且需要带回大量脏衣物的麻烦,也可以保证洗澡用具足够干净(对酒店不是很信任)。浴巾和毛巾都是压缩的,体积非常小。</p>
<p>其余的,便是两晚更换的衣服和电子产品的充电器了。</p>
<h2 id="开户的那些事"><a href="#开户的那些事" class="headerlink" title="开户的那些事"></a>开户的那些事</h2><p>我挺担心中银香港会开不下来,因为我还是学生也没有带地址证明。在大堂接待客户的小姐姐也询问了我有没有带上地址证明,没有的话只能碰碰运气,弄得我更慌了。</p>
<p>不过真正坐进柜台和柜员大哥开始走流程,直到大堂经理过来刷卡完成审核、将卡递到我手中,都没有向我索取地址证明。不知道是因为得知我是学生,还是因为我身份证上写的是具体住址,反正过了这关,顺利拿到了卡。</p>
<p>而汇丰之行则运气不佳,提交的资料被送至总行审核,当天拿不到账户也无法完成所有流程,只能等卡寄到居住地址,并且等下一次到港签字完成所有开户流程了。</p>
<p>P.S. 在跨境转账到时候一定要填清楚收款人的名字,要与中银香港的账户名称相同。我填反了名字被收了一笔手续费 QAQ</p>
<h2 id="尾声"><a href="#尾声" class="headerlink" title="尾声"></a>尾声</h2><p>这次旅行顺利得可怕(除了差点没赶上返程的火车),在深圳与香港复杂的地铁网中也没有坐错一趟列车,似乎没能暴露出什么问题。希望 12 月底的日本之旅也能一样顺利。</p>
<p>一个人出来玩真的很自由,在出发前先查好可以去哪里玩、去哪里吃,到达之后就随心安排,不用迁就其他人,走累了随时可以停下休息,在咖啡店坐上一两个钟头也不会有人抱怨。</p>
<p>我也许爱上了一个人旅行的感觉,之后也会继续尝试这种旅行的方法。</p>
</content>
<category term="随笔" />
<updated>2023-12-19T14:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/42ec6146.html</id>
<title>My Second Attempt To ARM Servers</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/42ec6146.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>Last weekend, a full month without my Telegram account, I thought I had to do something. I believe I got banned because someone clicked the “spam” button on my messages, but I have nowhere to appeal.</p>
<p>I lost the faith in centralization. This time, I made up my mind to dive into decentralization.</p>
<p>First, I need a server.</p>
<h2 id="Where-To-Purchase"><a href="#Where-To-Purchase" class="headerlink" title="Where To Purchase"></a>Where To Purchase</h2><p>I used to buy servers from distributors of the DC for lower prices, but it always ended up with disappointment. The servers are just not stable and I can not upgrade the hardware configuration on demand.</p>
<p>So this time, I chose Hetzner for my server. Hetzner is a huge IDC in Germany, I must have to pay a fairly high price for the server, am I right?</p>
<p>The following images show the price of Hetzner’s traditional CX series - with x86 CPU.</p>
<p><img src="/images/2023-09-24/01.jpg" alt="Hetzner CX Series"></p>
<p>A 2 CPU and 4GB RAM CX21 can fit my needs, it costs 5.35 EUR per month. By the way, the 40GB disk is far less than my requirement.</p>
<p>The CX series are using Intel Xeon CPU. The GB6 benchmark score of an Intel core is around 850, which is significantly lower than AMD EPYC of around 1200.</p>
<p>However, when I switch to the CAX series…</p>
<p><img src="/images/2023-09-24/02.jpg" alt="Hetzner CAX Series"></p>
<p>I can get the same number of CPU cores and RAM with only 3.79 EUR per month, 30% lower than the x86 one.</p>
<p>The GB6 benchmark score of ARM CPU is around 1050, even higher than the Intel ones.</p>
<p>The disk space is still 40GB, but I can purchase a 3.2EUR&#x2F;month 1TB Storage Box to solve this problem.</p>
<p>With a total of 6.99 EUR per month, I can get a server with 2 CPU cores, 4GB RAM, and 1TB disk. That is a great deal.</p>
<h2 id="Wait-ARM"><a href="#Wait-ARM" class="headerlink" title="Wait, ARM?"></a>Wait, ARM?</h2><p>About a year ago, when Hetzner first released the ARM series, I was interested in it and evaluated its compatibility.</p>
<p>I always use Docker containers to host my ~25 services. It turned out that more than half of the Docker images I was using were only compiled for the x86 CPU.</p>
<p>That means you have to build the image by yourself if you want to run it on an ARM CPU. The time and effort were not worth it, so I gave it up.</p>
<p>However, this time, I found all of the Docker images already supporting the ARM CPU. It is time to give it a try.</p>
<h2 id="The-Experience"><a href="#The-Experience" class="headerlink" title="The Experience"></a>The Experience</h2><p>Here is my final hardware configuration:</p>
<p>I chose the CAX11 server, which has 2 Ampere ARM CPU cores, 4GB RAM, and 40GB disk. I added 2GB swap space to store cached files and reduce the load of the RAM.</p>
<p>I also purchased a 1TB Storage Box to store my data. Mounted to the server with NFS, just like a local disk.</p>
<p>I am using the latest Debian 12 Bookworm and I can’t feel any difference between x86 and ARM. My daily use software from APT source is all compiled for ARM. The installation speed is as fast as x86.</p>
<p>As to the Docker images, I am using Portainer to manage them. What I need to do is just click the “Recover” button on the settings page, Portianer will automatically recover the configuration from CloudFlare R2 storage and all the containers just work as before, with no need to change any settings.</p>
<p>Today, when I am writing this article, My services are running for a week without any problem.</p>
<p><img src="/images/2023-09-24/03.jpg" alt="Portainer"></p>
<h2 id="Well-Still-Not-Perfect"><a href="#Well-Still-Not-Perfect" class="headerlink" title="Well, Still Not Perfect"></a>Well, Still Not Perfect</h2><p>The ARM server just works fine, but I want to share some problems I encountered when building the ARM Docker images.</p>
<p>The official software repositories of Linux distributions can offer full support for ARM CPU, but the repositories of other sources such as PyPi can not.</p>
<p><img src="/images/2023-09-24/04.jpg" alt="Build time difference"></p>
<p>There are still some packages that don’t have prebuilt ARM wheels, and the building process can take a long time on the 2-core ARM machine.</p>
<p>That is not a huge problem, but it makes the experience of ARM arch different from x86.</p>
<p>If you are a developer, try to include ARM in your build pipeline next time, that will be a great help for the ARM community.</p>
<h2 id="Final-Conclusion"><a href="#Final-Conclusion" class="headerlink" title="Final Conclusion"></a>Final Conclusion</h2><p>In my opinion, the ARM server is ready for daily use today. They offer a high quality-price ratio. I didn’t come across any compatibility problems.</p>
<p>Next time when you want to purchase a server, you can consider the ARM ones.</p>
</content>
<category term="随笔" />
<updated>2023-09-24T04:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/8b68ddd6.html</id>
<title>修复 UEFI 引导的 GRUB</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/8b68ddd6.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="问题与解决方法"><a href="#问题与解决方法" class="headerlink" title="问题与解决方法"></a>问题与解决方法</h2><h3 id="环境"><a href="#环境" class="headerlink" title="环境"></a>环境</h3><p>Manjaro Linux x86_64</p>
<p>Kernel: 6.2.10-1-MANJARO</p>
<p>使用 UEFI 引导</p>
<h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><p>在 GRUB 尝试引导 Linux 内核时,出现如下错误:</p>
<figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs smali">error:<span class="hljs-built_in"> sparse </span>file<span class="hljs-built_in"> not </span>allowed.<br><br>452: out of range pointer: xxxxxxxxxx<br><br>Aborted. Press any key to exit.<br></code></pre></td></tr></table></figure>
<p>用户将无法进入系统。</p>
<h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><h4 id="进入恢复系统"><a href="#进入恢复系统" class="headerlink" title="进入恢复系统"></a>进入恢复系统</h4><p>插入 Manjaro LiveCD, 启动 Live 系统。</p>
<h4 id="确定磁盘分区"><a href="#确定磁盘分区" class="headerlink" title="确定磁盘分区"></a>确定磁盘分区</h4><p>在 Live 系统中,使用 <code>fdisk -l</code> 查看磁盘分区情况,找到安装 Manjaro 的磁盘,假设为 <code>/dev/sda</code>。</p>
<p>我的磁盘分区如下:</p>
<figure class="highlight tap"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs tap">设备 起点 末尾 扇区 大小 类型<br>/dev/sda1 <span class="hljs-number"> 2048 </span> <span class="hljs-number"> 821247 </span> <span class="hljs-number"> 819200 </span> 400M EFI 系统<br>/dev/sda2 <span class="hljs-number"> 821248 </span><span class="hljs-number"> 723390463 </span>722569216 344.5G Linux 文件系统<br>/dev/sda3 <span class="hljs-number"> 723390464 </span><span class="hljs-number"> 983437311 </span>260046848 124G Linux 文件系统<br>/dev/sda4 <span class="hljs-number"> 983437312 </span>1000214527 <span class="hljs-number"> 16777216 </span> 8G Linux 文件系统<br></code></pre></td></tr></table></figure>
<p>可以确定,<code>/dev/sda1</code> 是 EFI 系统分区,<code>/dev/sda2</code> 是系统所在分区。</p>
<h4 id="挂载分区"><a href="#挂载分区" class="headerlink" title="挂载分区"></a>挂载分区</h4><p>挂载系统分区:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">mount /dev/sda2 /mnt<br></code></pre></td></tr></table></figure>
<p>将当前系统的工具分区挂载到 <code>/mnt</code> 下:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">mount --<span class="hljs-built_in">bind</span> /dev /mnt/dev<br>mount --<span class="hljs-built_in">bind</span> /proc /mnt/proc<br>mount --<span class="hljs-built_in">bind</span> /sys /mnt/sys<br></code></pre></td></tr></table></figure>
<p>将 EFI 分区挂载到 <code>/mnt/boot/efi</code> 下:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">mount /dev/sda1 /mnt/boot/efi<br></code></pre></td></tr></table></figure>
<h4 id="进入系统"><a href="#进入系统" class="headerlink" title="进入系统"></a>进入系统</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">chroot</span> /mnt<br></code></pre></td></tr></table></figure>
<h4 id="重新安装-GRUB"><a href="#重新安装-GRUB" class="headerlink" title="重新安装 GRUB"></a>重新安装 GRUB</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable<br></code></pre></td></tr></table></figure>
<p>具体参数需要根据实际情况进行修改。</p>
<h4 id="在这之后"><a href="#在这之后" class="headerlink" title="在这之后"></a>在这之后</h4><p>重启,进入通过 GRUB 引导系统。</p>
<p>在系统中使用 <code>sudo grub-install --recheck /dev/sda</code> 命令再次安装 GRUB,确保系统能够正常启动。</p>
<h2 id="一些思考"><a href="#一些思考" class="headerlink" title="一些思考"></a>一些思考</h2><p>接下来的内容是我的整个修复流程,包含了如何在搜索引擎查找问题、根据文章内容调整目标等杂碎的内容,和我在修复过程中的一些感想。</p>
<h3 id="为什么会出现这个问题"><a href="#为什么会出现这个问题" class="headerlink" title="为什么会出现这个问题"></a>为什么会出现这个问题</h3><p>不是很清楚。</p>
<p>在启动 Manjaro 前我不小心打开了电脑里的 Windows 系统,但没有连接移动硬盘。</p>
<p>按照以往的经验,这最多只会导致找不到 GRUB 的位置,手动指定 GRUB 所在分区就可以启动系统。</p>
<p>但这次不大一样。</p>
<p>在打开 GRUB 之后,尝试引导内核,就发现了这个问题。</p>
<h3 id="初步解决思路"><a href="#初步解决思路" class="headerlink" title="初步解决思路"></a>初步解决思路</h3><p><del>立刻格式化磁盘,重新安装 Manjaro。</del></p>
<p>我已经不是曾经那个只会重装的我了,这次我希望可以解决问题,而不是简单地重装。</p>
<p>首先,我 Google 了这个错误,发现了几篇内容相关的文章。</p>
<p><a href="https://forum.artixlinux.org/index.php/topic,4668.0.html">报错与我一致的文章</a>,但没有给出解决方案。</p>
<p><a href="https://www.reddit.com/r/archlinux/comments/x2qb4w/grub_aborts_loading_linux_because_of_an_out_of/">要我删除 GRUB 和 UEFI 所在分区所有内容的文章</a>,有点可怕,不敢这么干。</p>
<p><a href="https://bbs.archlinux.org/viewtopic.php?id=280230">提到应该重新安装 GRUB 的文章</a>,这还有点道理。</p>
<p>于是,我的目标转变为重新安装 GRUB。</p>
<h3 id="重新安装-GRUB-1"><a href="#重新安装-GRUB-1" class="headerlink" title="重新安装 GRUB"></a>重新安装 GRUB</h3><p>在之前遇到找不到 GRUB 分区的问题时,在手动引导然后进入系统后,我会执行 <code>sudo grub-install --recheck /dev/sda</code> 重新安装 GRUB,解决这个问题。</p>
<p>那这次的觉得方案应该是差不多的……吧?</p>
<p>不对啊,这次是在 LiveCD 的系统里操作,怎么能直接安装 GRUB 呢?</p>
<p>这个问题比较难描述。</p>
<p>我先是 Google <code>grub-install 修复 GRUB</code>,中文网站的内容都是关于在可以启动的系统下修复 GRUB 的,没有我需要的内容。</p>
<p>然后我开始求助于 ChatGPT,输入的 Prompts 是:</p>
<figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs livecodeserver">I am <span class="hljs-keyword">using</span> Manjaro <span class="hljs-keyword">with</span> GRUB.<br>When I booted <span class="hljs-keyword">into</span> <span class="hljs-keyword">the</span> <span class="hljs-keyword">system</span>, <span class="hljs-keyword">it</span> says <span class="hljs-string">&quot;sparse file not allowed 452 out of range pointer&quot;</span>. How <span class="hljs-built_in">to</span> fix <span class="hljs-keyword">it</span>?<br></code></pre></td></tr></table></figure>
<p>不难发现,我并没有说明我使用的是 UEFI 引导,这直接影响到了 ChatGPT 回复的准确性。</p>
<p>ChatGPT 给出的修复步骤与上述的相差不大,只是在挂载系统分区和工具分区后,直接尝试执行 <code>grub-install</code> 命令,尝试修复。</p>
<p><code>grub-install</code> 返回错误 <code>this gpt partition label contains no bios boot partition</code> 把我弄得更懵了。</p>
<p>再次 Google 这个问题,发现了 <a href="https://superuser.com/questions/903112/grub2-install-this-gpt-partition-label-contains-no-bios-boot-partition">这篇在长篇大论讲 GRUB 的文章</a>,虽然没有给出解决方案,但它让我意识到 UEFI 和 Legacy BIOS 两种启动方式的区别。</p>
<h3 id="UEFI-和-Legacy-BIOS"><a href="#UEFI-和-Legacy-BIOS" class="headerlink" title="UEFI 和 Legacy BIOS"></a>UEFI 和 Legacy BIOS</h3><p>UEFI 和 Legacy BIOS 是两种启动方式,它们的区别在于,Legacy BIOS 是在 BIOS 中直接加载内核,而 UEFI 是在 BIOS 中加载 EFI 系统,然后由 EFI 系统加载内核。</p>
<p>使用 UEFI 引导的系统一般都有一个 200MB 到 400MB 的 EFI 系统分区,用于存放 EFI 系统。在上述的,我的硬盘分区中可以看到。</p>
<p>使用 <code>findmnt</code> 命令可以查看当前系统的挂载情况,其中 <code>TARGET</code> 列就是挂载点,<code>SOURCE</code> 列就是挂载的分区。</p>
<p>EFI 分区的挂载情况为:</p>
<figure class="highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs gradle">TARGET <span class="hljs-keyword">SOURCE</span> FSTYPE <span class="hljs-keyword">OPTIONS</span><br><span class="hljs-regexp">/boot/</span>efi <span class="hljs-regexp">/dev/</span>sda1 vfat rw,relatime,fm<br></code></pre></td></tr></table></figure>
<p>可以看到,<code>/boot/efi</code> 里的内容正是 EFI 系统分区的内容。(我也是刚学到这个知识的)</p>
<h3 id="解决-UEFI-相关问题"><a href="#解决-UEFI-相关问题" class="headerlink" title="解决 UEFI 相关问题"></a>解决 UEFI 相关问题</h3><p>在修复过程中,我是通过 Google 发现上述的问题。</p>
<p><a href="https://superuser.com/questions/1390428/grub-install-warning-this-gpt-partition-label-contains-no-bios-boot-partition">这篇文章</a> 给了我莫大的帮助。</p>
<p>其中提到了 EFI 分区,也提到了如何正确安装 UEFI 引导的 GRUB:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi<br>sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable<br></code></pre></td></tr></table></figure>
<p>在补充挂载 EFI 分区、切换 Root 目录后,执行第一条命令,发现有错误。尝试执行第二条命令,发现没有错误,代表 GRUB 已经重新安装成功。</p>
<p>此时我想起来,在之前安装 GRUB 时,会提示 <code>正在为 x86_64-efi 平台进行安装</code>,我才意识到前面的修复过程并没有去指定平台。</p>
<h3 id="总结一下"><a href="#总结一下" class="headerlink" title="总结一下"></a>总结一下</h3><p>总之,这就是我此次修复的心路历程。我没有研究过 UEFI 和 Legacy BIOS 的区别,也没有研究过 GRUB 的安装过程,所以在修复过程中,我是通过 Google 和 ChatGPT 的帮助才解决了这个问题。</p>
<p>希望这个探索过程能给你一些启发吧。</p>
<hr>
<p>此文章以 <em>我无所谓 By 不 By 什么 AI,对我有帮助的文章就是好文章</em> 标识发布。</p>
</content>
<category term="教程" />
<updated>2023-04-15T16:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/8b115688.html</id>
<title>使用 Docker Compose 部署音乐服务器 Navidrome</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/8b115688.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="服务介绍"><a href="#服务介绍" class="headerlink" title="服务介绍"></a>服务介绍</h2><p>Navidrome 是一款兼容 Subsonic API 的开源音乐服务器软件,它提供了一个不错的 WebUI,也可以将支持 Subsonic API 的客户端接入。</p>
<p>目前项目正处在活跃开发中,各种各样的新功能正在陆续加入。</p>
<h2 id="我的客户端选择"><a href="#我的客户端选择" class="headerlink" title="我的客户端选择"></a>我的客户端选择</h2><h3 id="电脑端"><a href="#电脑端" class="headerlink" title="电脑端"></a>电脑端</h3><p>自带 WebUI, <a href="https://github.com/jeffvli/sonixd">Sonixd</a> 【跨平台】</p>
<h3 id="iOS"><a href="#iOS" class="headerlink" title="iOS"></a>iOS</h3><p><a href="https://apps.apple.com/us/app/play-sub-music-streamer/id955329386">play:sub</a> 【付费软件 4.99$】</p>
<h2 id="部署方式"><a href="#部署方式" class="headerlink" title="部署方式"></a>部署方式</h2><p>采用 Docker Compose 部署 Navidrome,使用 Nginx 作为反向代理。</p>
<h2 id="Docker-Compose-配置文件"><a href="#Docker-Compose-配置文件" class="headerlink" title="Docker Compose 配置文件"></a>Docker Compose 配置文件</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&quot;3&quot;</span><br><span class="hljs-attr">services:</span><br> <span class="hljs-attr">navidrome:</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">deluan/navidrome:latest</span><br> <span class="hljs-attr">container_name:</span> <span class="hljs-string">navidrome</span><br> <span class="hljs-attr">user:</span> <span class="hljs-number">1000</span><span class="hljs-string">:1000</span> <span class="hljs-comment"># should be owner of volumes</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;127.0.0.1:4533:4533&quot;</span><br> <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br> <span class="hljs-attr">environment:</span><br> <span class="hljs-attr">ND_SCANSCHEDULE:</span> <span class="hljs-string">1h</span><br> <span class="hljs-attr">ND_LOGLEVEL:</span> <span class="hljs-string">info</span> <br> <span class="hljs-attr">ND_SESSIONTIMEOUT:</span> <span class="hljs-string">24h</span><br> <span class="hljs-attr">ND_BASEURL:</span> <span class="hljs-string">&quot;&quot;</span><br> <span class="hljs-attr">ND_SEARCHFULLSTRING:</span> <span class="hljs-literal">true</span><br> <span class="hljs-comment"># Optional: fetch artist images from spotify</span><br> <span class="hljs-attr">ND_SPOTIFY_ID:</span><br> <span class="hljs-attr">ND_SPOTIFY_SECRET:</span><br> <span class="hljs-comment"># Optional: fetch artist information from last.fm</span><br> <span class="hljs-attr">ND_LASTFM_APIKEY:</span><br> <span class="hljs-attr">ND_LASTFM_SECRET:</span><br> <span class="hljs-attr">ND_LASTFM_LANGUAGE:</span> <span class="hljs-string">en</span><br> <span class="hljs-attr">volumes:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;./data:/data&quot;</span> <span class="hljs-comment"># Navidrome data</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;/APTH-TO/navidrome-music:/music:ro&quot;</span> <span class="hljs-comment"># Music folder</span><br></code></pre></td></tr></table></figure>
<p>使用命令 <code>docker compose up -d</code> 启动服务。</p>
<h2 id="Nginx-配置文件"><a href="#Nginx-配置文件" class="headerlink" title="Nginx 配置文件"></a>Nginx 配置文件</h2><p>我建议使用 DigitalOcean 的 Nginx 配置生产工具,示例配置如下:</p>
<p><a href="https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=music.example.com&domains.0.php.php=false&domains.0.reverseProxy.reverseProxy=true&domains.0.reverseProxy.proxyPass=http://127.0.0.1:4533&domains.0.routing.root=false&domains.0.routing.index=index.html&domains.0.routing.fallbackHtml=true&global.app.lang=zhCN%5C">示例配置</a></p>
<p>也可参考下述配置,此为 DigitalOcean 生成配置的简化版:</p>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br> <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">listen</span> [::]:<span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">server_name</span> music.example.com;<br><br> <span class="hljs-comment"># SSL</span><br> <span class="hljs-attribute">ssl_certificate</span> /etc/letsencrypt/live/music.example.com/fullchain.pem;<br> <span class="hljs-attribute">ssl_certificate_key</span> /etc/letsencrypt/live/music.example.com/privkey.pem;<br> <span class="hljs-attribute">ssl_trusted_certificate</span> /etc/letsencrypt/live/music.example.com/chain.pem;<br><br> <span class="hljs-comment"># logging</span><br> <span class="hljs-attribute">access_log</span> /var/log/nginx/access.log combined buffer=<span class="hljs-number">512k</span> flush=<span class="hljs-number">1m</span>;<br> <span class="hljs-attribute">error_log</span> /var/log/nginx/<span class="hljs-literal">error</span>.log <span class="hljs-literal">warn</span>;<br><br> <span class="hljs-comment"># reverse proxy</span><br> <span class="hljs-section">location</span> / &#123;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:4533;<br> &#125;<br>&#125;<br><br><span class="hljs-comment"># subdomains redirect</span><br><span class="hljs-section">server</span> &#123;<br> <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">listen</span> [::]:<span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">server_name</span> <span class="hljs-regexp">*.music.example.com</span>;<br><br> <span class="hljs-comment"># SSL</span><br> <span class="hljs-attribute">ssl_certificate</span> /etc/letsencrypt/live/music.example.com/fullchain.pem;<br> <span class="hljs-attribute">ssl_certificate_key</span> /etc/letsencrypt/live/music.example.com/privkey.pem;<br> <span class="hljs-attribute">ssl_trusted_certificate</span> /etc/letsencrypt/live/music.example.com/chain.pem;<br> <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://music.example.com<span class="hljs-variable">$request_uri</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
<h2 id="音乐管理"><a href="#音乐管理" class="headerlink" title="音乐管理"></a>音乐管理</h2><p>我一直以文件夹分类的方式管理音乐,但 Navidrome 并不支持文件夹分类。它是根据音乐标签来分类的,例如按照歌手、专辑等依据分类歌曲。</p>
<p>因此,若想使用 Navidrome,需要对音乐进行标签管理。</p>
<p>大约两年前,我写了 <a href="https://blog.udon.eu.org/archives/6b40e5ad.html">一篇文章</a> 介绍使用 Music Tag 和 Foobar2000 两款软件来管理音乐。</p>
<p>Music Tag 的标签源是网易云音乐、豆瓣音乐、QQ 音乐等国内音乐平台,说实话,这些平台的音乐标签质量都不是很好,所以我一直在寻找更好的音乐标签源。</p>
<p>直到我发现了 <a href="https://musicbrainz.org/">MusicBrainz</a>,这是一个开源的音乐标签数据库,任何人都可以为它贡献标签。在体验之后,我发现 MusicBrainz 的音乐标签质量要比国内音乐平台的标签质量好很多,所以我决定将 MusicBrainz 作为我的音乐标签源。</p>
<p>我使用 <a href="https://picard.musicbrainz.org/">Picard</a> 这款软件来从 MusicBrainz 获取音乐标签。</p>
<p>将音乐导入 Picard 后,它会自动从 MusicBrainz 获取音乐标签,然后将标签写入音乐文件,十分方便。</p>
<h2 id="开始使用"><a href="#开始使用" class="headerlink" title="开始使用"></a>开始使用</h2><p>不论是使用 Navidrome 自带的 Web 界面,还是使用兼容 Subsonic API 的客户端,只要连接到 Navidrome,便可开始享受你的私人音乐库。</p>
</content>
<category term="教程" />
<updated>2023-01-31T04:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/f9bfe16a.html</id>
<title>使用 Docker Compose 部署 Keycloak 20</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/f9bfe16a.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="部署方式"><a href="#部署方式" class="headerlink" title="部署方式"></a>部署方式</h2><p>采用 Docker Compose 部署,使用 Postgres 作为数据库,使用 Nginx 作为反向代理。</p>
<h2 id="Docker-Compose-配置文件"><a href="#Docker-Compose-配置文件" class="headerlink" title="Docker Compose 配置文件"></a>Docker Compose 配置文件</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&#x27;3&#x27;</span><br><br><span class="hljs-attr">services:</span><br> <span class="hljs-attr">keycloak:</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">quay.io/keycloak/keycloak:latest</span><br> <span class="hljs-attr">environment:</span><br> <span class="hljs-attr">KC_DB:</span> <span class="hljs-string">postgres</span><br> <span class="hljs-attr">KC_DB_URL:</span> <span class="hljs-string">jdbc:postgresql://db:5432/keycloak</span><br> <span class="hljs-attr">KC_DB_USERNAME:</span> <span class="hljs-string">keycloak</span><br> <span class="hljs-attr">KC_DB_PASSWORD:</span> <span class="hljs-string">keycloak</span><br> <span class="hljs-attr">KC_HTTP_ENABLED:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># 开启 HTTP</span><br> <span class="hljs-attr">KC_HOSTNAME_STRICT:</span> <span class="hljs-literal">false</span><br> <span class="hljs-attr">KC_HOSTNAME_STRICT_HTTPS:</span> <span class="hljs-literal">false</span><br> <span class="hljs-attr">KC_HTTP_RELATIVE_PATH:</span> <span class="hljs-string">&#x27;/&#x27;</span> <span class="hljs-comment"># Keycloak 应用的相对路径</span><br> <span class="hljs-attr">KC_HTTP_PORT:</span> <span class="hljs-number">8080</span> <span class="hljs-comment"># HTTP 端口</span><br> <span class="hljs-attr">KEYCLOAK_ADMIN:</span> <span class="hljs-string">MY_USERNAME</span> <span class="hljs-comment"># 管理员账号,仅初始化时使用</span><br> <span class="hljs-attr">KEYCLOAK_ADMIN_PASSWORD:</span> <span class="hljs-string">MY_PASSWORD</span> <span class="hljs-comment"># 管理员密码,仅初始化时使用</span><br> <span class="hljs-attr">PROXY_ADDRESS_FORWARDING:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># 使用反向代理必须开启</span><br> <span class="hljs-attr">KC_PROXY:</span> <span class="hljs-string">edge</span> <span class="hljs-comment"># 反向代理模式,详见文档</span><br> <span class="hljs-attr">entrypoint:</span> <span class="hljs-string">/opt/keycloak/bin/kc.sh</span> <span class="hljs-string">start</span> <span class="hljs-comment"># 第一次运行后可以加上 --optimized 参数,加快二次启动速度</span><br> <span class="hljs-attr">ports:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><span class="hljs-string">:18080:8080</span> <span class="hljs-comment"># Keycloak 应用端口</span><br> <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br> <span class="hljs-attr">db:</span><br> <span class="hljs-attr">image:</span> <span class="hljs-string">postgres:14</span><br> <span class="hljs-attr">restart:</span> <span class="hljs-string">unless-stopped</span><br> <span class="hljs-attr">environment:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">POSTGRES_USER=keycloak</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">POSTGRES_PASSWORD=keycloak</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">POSTGRES_DB=keycloak</span><br> <span class="hljs-attr">volumes:</span><br> <span class="hljs-bullet">-</span> <span class="hljs-string">./postgres-data:/var/lib/postgresql/data</span> <span class="hljs-comment"># 数据库数据保存位置</span><br></code></pre></td></tr></table></figure>
<p>使用命令 <code>docker compose up -d</code> 启动服务。</p>
<h2 id="Nginx-配置"><a href="#Nginx-配置" class="headerlink" title="Nginx 配置"></a>Nginx 配置</h2><p>我建议使用 DigitalOcean 的 Nginx 配置生产工具,示例配置如下:</p>
<p><a href="https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=auth.example.com&domains.0.php.php=false&domains.0.reverseProxy.reverseProxy=true&domains.0.reverseProxy.proxyPass=http://127.0.0.1:18080&domains.0.routing.root=false&global.app.lang=zhCN">示例配置</a></p>
<p>也可参考下述配置,此为 DigitalOcean 生成配置的简化版:</p>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">server</span> &#123;<br> <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">listen</span> [::]:<span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">server_name</span> auth.example.com;<br><br> <span class="hljs-comment"># SSL</span><br> <span class="hljs-attribute">ssl_certificate</span> /etc/letsencrypt/live/auth.example.com/fullchain.pem;<br> <span class="hljs-attribute">ssl_certificate_key</span> /etc/letsencrypt/live/auth.example.com/privkey.pem;<br> <span class="hljs-attribute">ssl_trusted_certificate</span> /etc/letsencrypt/live/auth.example.com/chain.pem;<br><br> <span class="hljs-comment"># logging</span><br> <span class="hljs-attribute">access_log</span> /var/log/nginx/access.log combined buffer=<span class="hljs-number">512k</span> flush=<span class="hljs-number">1m</span>;<br> <span class="hljs-attribute">error_log</span> /var/log/nginx/<span class="hljs-literal">error</span>.log <span class="hljs-literal">warn</span>;<br><br> <span class="hljs-comment"># reverse proxy</span><br> <span class="hljs-section">location</span> / &#123;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Auth-Request-Redirect <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-attribute">proxy_buffer_size</span> <span class="hljs-number">128k</span>;<br> <span class="hljs-attribute">proxy_buffers</span> <span class="hljs-number">4</span> <span class="hljs-number">256k</span>;<br> <span class="hljs-attribute">proxy_busy_buffers_size</span> <span class="hljs-number">256k</span>;<br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:18080;<br> &#125;<br><br> <span class="hljs-section">location</span> /auth/realms &#123;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Auth-Request-Redirect <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:18080;<br> &#125;<br><br> <span class="hljs-section">location</span> /auth/resources &#123;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Auth-Request-Redirect <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:18080;<br> &#125;<br><br> <span class="hljs-section">location</span> /auth/js &#123;<br> <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$host</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br> <span class="hljs-attribute">proxy_set_header</span> X-Auth-Request-Redirect <span class="hljs-variable">$request_uri</span>;<br> <span class="hljs-attribute">proxy_pass</span> http://127.0.0.1:18080;<br> &#125;<br>&#125;<br><br><span class="hljs-comment"># subdomains redirect</span><br><span class="hljs-section">server</span> &#123;<br> <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">listen</span> [::]:<span class="hljs-number">443</span> ssl http2;<br> <span class="hljs-attribute">server_name</span> <span class="hljs-regexp">*.auth.example.com</span>;<br><br> <span class="hljs-comment"># SSL</span><br> <span class="hljs-attribute">ssl_certificate</span> /etc/letsencrypt/live/auth.example.com/fullchain.pem;<br> <span class="hljs-attribute">ssl_certificate_key</span> /etc/letsencrypt/live/auth.example.com/privkey.pem;<br> <span class="hljs-attribute">ssl_trusted_certificate</span> /etc/letsencrypt/live/auth.example.com/chain.pem;<br> <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://auth.example.com<span class="hljs-variable">$request_uri</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
<h2 id="配置-Keycloak"><a href="#配置-Keycloak" class="headerlink" title="配置 Keycloak"></a>配置 Keycloak</h2><h3 id="创建-Realm"><a href="#创建-Realm" class="headerlink" title="创建 Realm"></a>创建 Realm</h3><p>打开 <a href="http://127.0.0.1:18080/">Keycloak 地址</a>,界面如下。</p>
<p><img src="/images/2023-01-22/01.jpg" alt="Keycloak 界面"></p>
<p>选择 <code>Administration Console</code>,进入管理界面。</p>
<p><img src="/images/2023-01-22/02.jpg" alt="管理界面"></p>
<p>选择箭头指向的下拉菜单,选择 <code>Add realm</code>,创建一个新的 Realm。</p>
<p><img src="/images/2023-01-22/03.jpg" alt="创建 Realm"></p>
<p>填写 Realm 名称,点击 <code>Create</code>。</p>
<h3 id="创建-Client"><a href="#创建-Client" class="headerlink" title="创建 Client"></a>创建 Client</h3><p><img src="/images/2023-01-22/04.jpg" alt="管理界面"></p>
<p>选择 <code>Clients</code>。</p>
<p><img src="/images/2023-01-22/05.jpg" alt="Client 管理界面"></p>
<p>点击 <code>Create client</code>。</p>
<p><img src="/images/2023-01-22/06.jpg" alt="创建 Client"></p>
<p>填写 Client 相关信息,点击 <code>Next</code>。</p>
<p><img src="/images/2023-01-22/07.jpg" alt="配置 Client"></p>
<p>按需求选择 Client 的配置,点击 <code>Save</code>。</p>
<p><img src="/images/2023-01-22/08.jpg" alt="Client 创建完成"></p>
<p>至此,Keycloak 配置完成,且创建了第一个测试用 Client。</p>
<h3 id="测试-Client"><a href="#测试-Client" class="headerlink" title="测试 Client"></a>测试 Client</h3><p>可根据 <a href="https://www.keycloak.org/getting-started/getting-started-docker#_secure_your_first_app">官方教程</a> 测试该 Client。</p>
<h2 id="尾声"><a href="#尾声" class="headerlink" title="尾声"></a>尾声</h2><p>上述便是使用 Docker Compose 部署 Keycloak 20 的方法,我们顺利创建了第一个测试用 Client,接下来可以根据自己的需求进行配置。</p>
</content>
<category term="教程" />
<updated>2023-01-22T12:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/9b78ad2a.html</id>
<title>寻梦穿越机 - 入门浅谈</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/9b78ad2a.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>暑假开始之前,我就朦朦胧胧有购入一台穿越机的想法。起因为何?我也不是很清楚。是看到了<a href="https://www.youtube.com/watch?v=b0JZxm7ajcs">酷炫的穿越机航拍视频</a>?还是童年时期的航模魂蠢蠢欲动,将要苏醒?</p>
<p>兴趣,倘若不立刻抓住,很快就会被抛至脑后。为了不让自己后悔,那就立刻开始筹备吧!攥紧并不是特别充盈的钱包,我踏上了寻梦之路。</p>
<h2 id="什么是穿越机"><a href="#什么是穿越机" class="headerlink" title="什么是穿越机"></a>什么是穿越机</h2><p>FPV (First-Person View),是指通过第一人称视角远程控制无人飞行设备 (UAV) 的控制方式,也是一项运动,也指代了一类设备。</p>
<p>FPV 设备包含固定翼 (Fixed Wing) 与多轴 (Multi-rotor) 两种。穿越机多指多轴 FPV (常见为四轴)。</p>
<p><img src="/images/2022-09-05/%E5%9B%BA%E5%AE%9A%E7%BF%BC%E4%B8%8E%E5%A4%9A%E8%BD%B4.jpg" alt="四轴 FPV (上) 与固定翼 FPV (下)"></p>
<h2 id="一盆冷水"><a href="#一盆冷水" class="headerlink" title="一盆冷水"></a>一盆冷水</h2><p>在详细介绍穿越机构成之前,请允许我泼一盆冷水。</p>
<p>穿越机与一些航拍无人机,例如大疆 (DJI) 的四轴航拍机与航拍 FPV 相比,颇有原始人见到现代人的感觉。</p>
<p>大疆无人机上搭载了各种各样的传感器,各系列大都配备了二向 (前后)、四向 (前后左右) 或五向 (增加一个上方) 的视觉避障功能、红外定高悬停功能,以及低电量 GPS 自动返航功能。</p>
<p>上述这些看似是无人机应当“标配”的功能,追求轻量化的穿越机时常一个也没有。一台最小安装的穿越机全机的传感器仅有集成于飞控的陀螺仪和地磁传感器 (电调的电流传感器一般不算在内),飞控仅知道当前机身的朝向、倾斜角度与加速度,无法感知周围的环境,没有实现避障、悬停与自动返航的能力。飞机的运动状态完全取决于飞手的操控,电池的剩余电量甚至需要飞手根据电芯电压来推断。</p>
<p><img src="/images/2022-09-05/%E7%A9%BF%E8%B6%8A%E6%9C%BA%E4%BC%A0%E6%84%9F%E5%99%A8.jpg" alt="穿越机少得可怜的传感器"></p>
<p>再者,为了能获得更大的速度与更高的机动性,穿越机飞行过程一般处于手动模式,对飞机四向的倾斜没有限制,飞行过程中出现危险操作的概率大,事故概率也大。而大疆无人机对飞行速度、角度有严格的限制,能有效地降低炸机的概率。</p>
<p>因此,飞行穿越机的难度将是飞行大疆等航拍无人机的十倍、甚至百倍。请务必不要抱着随便玩一玩、随心飞的态度入坑穿越机,发生事故后轻则炸机提 (遥) 控回家,重则伤到自己或他人。对于喜欢日常随心飞行的玩家,大疆或类似牌子的无人机 (包括航拍机和穿越机) 更为合适。</p>
<hr>
<p>下文将详细介绍入门穿越机所需要的技术知识与穿越机的重要模块。在明白风险之后仍打算入坑穿越机,或对穿越机有兴趣的你,欢迎继续往下阅读。</p>
<h2 id="技术储备"><a href="#技术储备" class="headerlink" title="技术储备"></a>技术储备</h2><p>上文提到了我童年时期的航模魂。我在小学就跟着老师学习无线电和航模知识,练习了焊接技巧和单旋翼的航模直升机的飞行技巧。曾参加某个航模比赛并拿到了铜牌的好成绩 (我好自豪)。</p>
<p>因此,我对我的焊接技术和遥控操控能力比较有信心。而这两个能力恰好是入门穿越机不可或缺的。下面我列举一些入门穿越机需要掌握的技能。</p>
<h3 id="锡焊"><a href="#锡焊" class="headerlink" title="锡焊"></a>锡焊</h3><p> 除了购买真·到手飞套餐 (机子已组装完成,接收机已与遥控器完成配对),其余情况大概率需要焊接一些导线。</p>
<p> 大部分组装机套餐都不包含接收机,因为接收机与遥控器一一对应,一般是和遥控一起购买的。就需要用户自行焊接至飞控上。</p>
<p> 锡焊所用到的工具有电烙铁和焊锡丝,最好能佐以松香,增加焊接成功率。电烙铁推荐购买 T12 或更好的,因为飞控散热设计,很多焊盘为通孔的形式,热量会非常快地传到到全板,导致焊锡较难达到融化的温度。若使用功率太低的电烙铁,可能无法融化焊锡。</p>
<p><img src="/images/2022-09-05/T12%E7%84%8A%E5%8F%B0.jpg" alt="T12 焊台"></p>
<p> 由于飞控比较小巧,焊盘也十分迷你,对焊接技术要求较高。</p>
<h3 id="使用搜索引擎"><a href="#使用搜索引擎" class="headerlink" title="使用搜索引擎"></a>使用搜索引擎</h3><p> 不懂不可怕,不懂得学习才可怕。</p>
<p> 穿越机有关的零碎知识犹如满天星,散布于互联网的每一个角落,需要一定的搜索技巧才能挖掘到有用的知识。</p>
<p> 国内有关穿越机的网站数量比较少,建议使用英文搜索。</p>
<h3 id="编译"><a href="#编译" class="headerlink" title="编译"></a>编译</h3><p> 若想要更新 ELRS 接收机和高频头的固件,需要从源码编译 ELRS 固件。虽然 ELRS 团队提供了一套图形化的编译工具,但难免会遇到一些疑难杂症 (博客中就有 ELRS 固件编译的踩坑记录)。需要对编译有一定的知识,能自行解决简单的问题。或者选择使用出厂固件,不自行升级。</p>
<h3 id="操控能力-协调性"><a href="#操控能力-协调性" class="headerlink" title="操控能力 (协调性)"></a>操控能力 (协调性)</h3><p> 像音游 (音乐游戏) 一样,微操遥控器并不是所有人都能很好地做到。穿越机对遥控指令的反应极为灵敏,需要你能精细地操控遥控器。</p>
<p> 但这项技能可以通过电脑模拟飞行来习得。建议在正式开始飞行前,先在电脑上使用模拟器熟悉飞机的控制。</p>
<h3 id="一颗勇敢的心"><a href="#一颗勇敢的心" class="headerlink" title="一颗勇敢的心"></a>一颗勇敢的心</h3><p> 在飞行穿越机的过程中,不可能不出现炸机 (飞机以异常姿态落地) 的情况,难免会留下一点阴影。</p>
<p> 我在小学时飞过固定翼飞机,曾不慎撞到电线,导致飞机起落架损坏脱落,最后只能由老师操控迫降。此事给我留下了不小的心理阴影,有好几个月我都不敢再飞行固定翼。不过最后还是克服了恐惧,再次拾起了遥控。</p>
<p> 炸机并不可怕,每一次炸机都记录着你的成长。</p>
<h2 id="深入了解"><a href="#深入了解" class="headerlink" title="深入了解"></a>深入了解</h2><p>类似 Linux (比较奇怪的类比),穿越机也分为最小安装和额外拓展两部分。</p>
<p><img src="/images/2022-09-05/%E7%A9%BF%E8%B6%8A%E6%9C%BA%E6%9E%B6%E6%9E%84.jpg" alt="穿越机架构"></p>
<p>最小安装:</p>
<ul>
<li>机架 - 硬连接其他组件,保护脆弱的电路板;</li>
<li>电机 (和桨叶) - 提供飞行动力;</li>
<li>飞控 - 控制飞行状态,是穿越机的大脑;</li>
<li>电调 (电子调速器) - 驱动电机、分隔电路 (防止电机减速时产生的反向电流烧坏其他电子设备);</li>
<li>接收机 - 接受遥控器控制信号 (有 2.4GHz、915MHz、 868MHz 等频段,互不兼容);</li>
<li>图传 - 发送图像信号 (多为 5.8GHz 频段);</li>
<li>摄像头 - 提供第一人称视角;</li>
</ul>
<p>额外拓展:</p>
<ul>
<li>GPS 模块;</li>
<li>BB 响 (蜂鸣器 Beeper,用于寻找飞机);</li>
<li>LED 灯珠、灯带 (好看 XD);</li>
<li>红外避障模块;</li>
<li>运动摄像机 (拍摄更清晰、帧率更高的视频);</li>
</ul>
<p>挑几个比较重要的模块介绍一下:</p>
<h3 id="机架"><a href="#机架" class="headerlink" title="机架"></a>机架</h3><p>穿越机机架一般由碳纤维板制成,质地轻盈且强度极高,可以物理连接不同的模块,并保护脆弱的电子设备 (飞控、图传等裸板)。</p>
<p>挑选时,机架有几个要主要关注的核心参数:</p>
<ul>
<li><p>外形:</p>
<p>机架分为普通式与涵道式 (Duct Propeller) 两种。</p>
<p>普通式机架的螺旋桨桨叶裸露在外,而涵道式机架的螺旋桨外侧有涵道 (类圆筒) 包裹。</p>
<p>有一些普通式机架可以通过额外安装涵道,变身成为涵道机架。</p>
</li>
</ul>
<p><img src="/images/2022-09-05/%E6%9C%BA%E6%9E%B6%E7%A7%8D%E7%B1%BB.jpg" alt="普通机架 (左) 与涵道机架 (右)"></p>
<p> 普通式机架采用开放式的设计,尽可能少地使用材料以减轻重量。由于螺旋桨暴露在外,危险性较大。普通机架可被用于任何竞速与花飞机型。</p>
<p> 涵道式机架通过涵道结构可以提供更好的升力、稳定性和安全性,但额外增添了重量和封阻,一般被用于小型机与花飞机型。</p>
<p><img src="/images/2022-09-05/%E6%9C%BA%E6%9E%B6%E5%A4%96%E5%BD%A2.jpg" alt="机架外形"></p>
<p> 此外,机架还可以再细分为 X 型、H 型等,在此就不多展开,有兴趣的读者可以自行查阅。</p>
<ul>
<li><p>大小:</p>
<p>穿越机大小各异,从最小的一寸机,到体型较大的五寸、六寸机。</p>
<p>二寸以下的机子防风能力较差,但体型轻盈且常使用涵道机架,适合在室内飞行,且不易伤人。</p>
<p>三寸以上的机子动力充沛,飞行速度快,但体型大、螺旋桨裸露,无法在室内飞行。适合在场地广阔的室外进行竞速或花飞 (花样飞行)。</p>
</li>
</ul>
<h3 id="飞控与电调"><a href="#飞控与电调" class="headerlink" title="飞控与电调"></a>飞控与电调</h3><p>飞控与电调 (有时还有图传) 几块板子大小相当,时常纵向堆叠安装,称为飞塔。在多块 PCB 间有硅胶柱减震。</p>
<p><img src="/images/2022-09-05/%E9%A3%9E%E5%A1%94.jpg" alt="双层飞塔"></p>
<p>飞控需要注意的参数不多:</p>
<ul>
<li><p>飞控 SoC:</p>
<p>常见飞控 SoC 的型号有 F405 和 F722,他们的全称应为 STM32F405 和 STM32F722. 差别主要在主频和内存大小上。</p>
</li>
</ul>
<p><img src="/images/2022-09-05/%E9%A3%9E%E6%8E%A7SoC.jpg" alt="飞控 SoC"></p>
<p> 由于穿越机飞行对计算性能不是很敏感 (类似 3D 打印机),一般选择搭载 F405 SoC 的飞控性能就足够使用了。</p>
<ul>
<li><p>串口数量:</p>
<p>新手会用到的串口数量不会超过两个 (外接部分型号的图传和接收机),绝大部分飞控都能满足这个要求。若有需要安装 GPS 和其他传感器,则要注意查看飞控支持的串口数量了。</p>
</li>
</ul>
<p>电调最重要的参数就是最大放电电流了。</p>
<p>电调的电流选择需要根据机身大小、电机和桨叶大小、形状进行估计,通常电机厂家会给出推荐值,按照推荐选购即可。</p>
<h3 id="接收机与图传"><a href="#接收机与图传" class="headerlink" title="接收机与图传"></a>接收机与图传</h3><p><img src="/images/2022-09-05/%E6%8E%A5%E6%94%B6%E6%9C%BA%E4%B8%8E%E5%9B%BE%E4%BC%A0.jpg" alt="接收机 (左) 与图传 (右)"></p>
<p>接收机与图传共享一个重要的特性,协议:</p>
<p>常见的接收机有 ELRS (ExpressLRS) 和黑羊 TBS 两类。应该注意的是,<strong>不同种类的接收机使用的通信协议和频段不同,能与其配对的遥控器和高频头也不同</strong>,因此在挑选接收机的时候一定要看清楚协议和频段。</p>
<p>接收机和飞控的串口通讯协议也各异,有 UART、SBUS 等数种,再购买接收机前需确认飞控有相对应的串口。</p>
<p>图传分数字图传和模拟图传两种。</p>
<p>数字图传以大疆的最为出名,需要使用配套的飞行眼镜;模拟图传大多使用 5.8G 频段通讯,和大部分接收模拟信号的飞行眼镜通用。</p>
<p>图传连接至飞控的串口通讯协议也很多,购买的时候请多加留意。</p>
<p>除此之外,接收机有遥测功率、内&#x2F;外置天线、天线接口等参数,在挑选时都需要多加留意。</p>
<p>图传的另一主要参数则是发射功率。发射功率越大,能稳定接受图传信号的距离一般就越大。小型穿越机一般选择发射功率在 200mW 到 500mW 的图传即可 (部分图传发射功率可调);若有远航要求,也可选择发射功率大于 1W 的图传 (价格较高、发热也较大,一般带有主动散热)。</p>
<h3 id="机子之外的配件"><a href="#机子之外的配件" class="headerlink" title="机子之外的配件"></a>机子之外的配件</h3><p>除了穿越机本体之外,想要拥有完整的飞性体验,还需要遥控器、高频头、电池、平衡充电器、飞行眼镜等配件。</p>
<p>上述的每一种配件都可以写作一篇介绍文章。由于篇幅有限,本文就不再介绍上述的外围配件,请善用搜索引擎,学习相关知识。</p>
<h3 id="配套软件"><a href="#配套软件" class="headerlink" title="配套软件"></a>配套软件</h3><p>除了硬件,穿越机配套的控制软件也尤为重要。目前主流的控制软件是开源的 Betaflight。</p>
<p><img src="/images/2022-09-05/Betaflight.jpg" alt="Betaflight 地面站界面"></p>
<p>Betaflight 分为嵌入端 (安装在飞控中嵌入式系统) 和地面站 (安装在电脑里的软件)。将飞控通过线缆连接至电脑,并打开 Betaflight 地面站软件,即可对飞控参数进行调整。</p>
<p>Betaflight 调参也是一门大课,新手不建议自定义太多的参数。待熟悉飞机之后,才建议调整 PID 等高级控制参数。</p>
<h2 id="新手的第一台飞机"><a href="#新手的第一台飞机" class="headerlink" title="新手的第一台飞机"></a>新手的第一台飞机</h2><p>说了这么多,要上某宝挑选、下单穿越机的种种配件了吗?</p>
<p>我的建议是否定的。</p>
<p>我咨询了一些老玩家,他们建议新手购买他人已完成调参的二手机器,或者购买商家大部分已组装完成套机,以绕过纷繁复杂且状况百出的 DIY 过程,降低还未入坑就弃坑的风险。</p>
<p>此外,自行购买散件的总价常常会高于购买整机的价格。对于钱包不是特别充盈的我,购买整机也是一个省钱的选择。</p>
<p>待熟悉了穿越机的飞行与调试之后,再学习他人经验,设计并组装一台自己心目中的机器也不迟,这才是 DIY 的浪漫。</p>
<h2 id="我的成果"><a href="#我的成果" class="headerlink" title="我的成果"></a>我的成果</h2><p><img src="/images/2022-09-05/%E6%88%91%E7%9A%84%E6%88%90%E6%9E%9C.jpg" alt="我的成果"></p>
<p>我选择购买一位老玩家完成大部分组装工作的“半”整机——包含了机架、电机、飞控和电调。图传、摄像头和接收机则是我自行购买和焊接安装的。</p>
<p>飞机到手、外围装备齐全,只待一飞冲天。</p>
</content>
<category term="随笔" />
<updated>2022-09-04T04:00:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/e74a90f2.html</id>
<title>使用再生龙 Clonezilla 备份操作系统</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/e74a90f2.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>近日购入了一只闪迪的 CZ880 Extreme PRO 固态U盘来装 Manjaro。</p>
<p>虽然U盘本体是终身质保的,但数据无价,配置一遍系统就要花大把的时间。遂有了备份U盘内整个系统的念头。</p>
<p>下面跟着我使用再生龙 Clonezilla 把U盘里的系统备份一下吧!</p>
<h3 id="事先准备"><a href="#事先准备" class="headerlink" title="事先准备"></a>事先准备</h3><p>再生龙是运行在独立操作系统 (Debian&#x2F;Ubuntu) 上的一套软件,因此需要制作启动盘,或使用 Ventoy 等多系统启动方案。(实测 YUMI 无法启动再生龙,故建议使用 Ventoy)</p>
<h4 id="制作启动盘"><a href="#制作启动盘" class="headerlink" title="制作启动盘"></a>制作启动盘</h4><p>前往 <a href="https://rufus.ie/zh/">Rufus 官网</a> 下载 Rufus 启动盘制作工具。</p>
<p>前往 <a href="https://clonezilla.org/downloads/download.php?branch=stable">Clonezilla 官网</a> 下载再生龙映像。</p>
<p>使用 Rufus 将再生龙映像烧写进另一个U盘即可。</p>
<p><strong>U盘内数据将丢失,请做好备份!</strong></p>
<h4 id="使用多系统启动"><a href="#使用多系统启动" class="headerlink" title="使用多系统启动"></a>使用多系统启动</h4><p>前往 <a href="https://www.ventoy.net/">Ventoy 官网</a> 下载安装包(兼容 Windows 与 Linux),将你的另一个U盘制作为 Ventoy 多启动盘。</p>
<p>前往 <a href="https://clonezilla.org/downloads/download.php?branch=stable">Clonezilla 官网</a> 下载再生龙映像。</p>
<p>将再生龙映像拷贝至 Ventoy 多启动盘中。</p>
<p>选择你想存放备份数据的目的地,创建一个存放备份映像的文件夹(注意目录名称中不能带有空格)。</p>
<p>剧透一下,40G 的系统盘备份之后大约占了 16-17G. 请留出足够的空间(建议和待备份的数据等大小)。</p>
<h3 id="开始备份"><a href="#开始备份" class="headerlink" title="开始备份"></a>开始备份</h3><p>瞎眼警告:由于没有合适的截屏方式,我很不愿意地采取了 拍 屏 的方式,敬请谅解。</p>
<h4 id="启动再生龙系统"><a href="#启动再生龙系统" class="headerlink" title="启动再生龙系统"></a>启动再生龙系统</h4><p>确保你的电脑关闭了安全启动,若还打开着,需要在 BIOS 中将其关闭。</p>
<p>插入刚刚制作好的启动盘&#x2F;Ventoy 多启动盘,在电脑启动时猛敲键盘的…某个键,这因电脑型号而异,打开启动菜单。</p>
<p>选择插入的启动盘&#x2F;多启动盘。</p>
<p>启动盘用户若没有太大的兼容性问题,就能看到再生龙的启动菜单。</p>
<p>多启动盘用户还要再多一步,在 Ventoy 菜单内选中再生龙的映像,如下图所示,即可打开再生龙的启动菜单。</p>
<p><img src="/images/2022-08-12/1.jpeg" alt="Ventoy 多启动菜单"></p>
<p>P.S. 我的笔记本兴许和 Ventoy 的 UEFI 模式相性不大好,在 BIOS 中开启了 Lagacy 兼容模式后,使用 Legacy 模式才能开启 Ventoy。</p>
<h4 id="选择再生龙启动方式"><a href="#选择再生龙启动方式" class="headerlink" title="选择再生龙启动方式"></a>选择再生龙启动方式</h4><p><img src="/images/2022-08-12/2.jpeg" alt="再生龙启动菜单"></p>
<p>经典的 GRUB 启动菜单,一般来说选择默认的第一项启动方式即可。</p>
<h5 id="VGA-启动花屏"><a href="#VGA-启动花屏" class="headerlink" title="VGA 启动花屏"></a>VGA 启动花屏</h5><p>我的电脑遇到了在 VGA 800x600 模式下花屏的问题。</p>
<p>最终进入 <code>Other mods of Clonezilla live</code> 菜单,</p>
<p><img src="/images/2022-08-12/3.jpeg" alt="其他启动模式"></p>
<p>选择了上图中的 KVM &amp; To RAM 模式,可以正常启动了。</p>
<h5 id="USB-口不够用的用户"><a href="#USB-口不够用的用户" class="headerlink" title="USB 口不够用的用户"></a>USB 口不够用的用户</h5><p>我这台笔记本只有两个 USB 口,其中一个要给备份源头 CZ880,另一个则要给移动硬盘,故选择了 <code>To RAM</code> 模式,将再生龙载入内存,就可以拔掉多启动U盘,空出 USB 口给移动硬盘了。</p>
<h4 id="语言配置"><a href="#语言配置" class="headerlink" title="语言配置"></a>语言配置</h4><p><img src="/images/2022-08-12/4.jpeg" alt="语言配置"></p>
<p>选择自己想用的语言即可。</p>
<p><img src="/images/2022-08-12/5.jpeg" alt="键盘配置"></p>
<p>保持默认配置即可。</p>
<h4 id="备份配置"><a href="#备份配置" class="headerlink" title="备份配置"></a>备份配置</h4><p><img src="/images/2022-08-12/6.jpeg" alt="功能选择"></p>
<p>我们选 <code>Start Clonezilla 使用再生龙</code>。</p>
<p>命令行可以在熟悉了配置之后使用。</p>
<p><img src="/images/2022-08-12/7.jpeg" alt="备份模式选择"></p>
<p>此处我们选择第一项 <code>device-image 硬盘/分区[存到/来自]镜像文件</code>。</p>
<p>若想进行两盘对拷,可以选择第二项。我还没有尝试过。</p>
<h4 id="挂载存储目录"><a href="#挂载存储目录" class="headerlink" title="挂载存储目录"></a>挂载存储目录</h4><p><img src="/images/2022-08-12/8.jpeg" alt="存储目录选择"></p>
<p>这次我打算使用移动硬盘备份系统,故选择第一项 <code>local dev 使用本机的分区</code>。</p>
<p><img src="/images/2022-08-12/10.jpeg" alt="插入 USB 设备提示"></p>
<p>随后,再生龙会提示插入想要挂载的 USB 设备,按照提示做即可。</p>
<p><img src="/images/2022-08-12/11.jpeg" alt="检测到的存储设备"></p>
<p>此时画面会动态显示系统识别到的存储设备。看到期望的目标设备时,按下 <code>Ctrl-C</code> 停止搜索。</p>
<p><img src="/images/2022-08-12/12.jpeg" alt="分区选择"></p>
<p>在扫描完电脑当前安装的所有硬盘的分区后,你需要选择备份镜像文件存放的那个分区。</p>
<p>如图,我希望备份到大小为 1.8T 的移动硬盘上,故选择最后一项 <code>sdc2</code>。</p>
<p><img src="/images/2022-08-12/13.jpeg" alt="是否检查并修复文件系统"></p>
<p>随后,再生龙询问你是否需要检查并修复挂载的文件系统,我们选第一项否就好了。</p>
<p><img src="/images/2022-08-12/14.jpeg" alt="备份位置选择"></p>
<p>接着,就是选择备份镜像存放的位置。</p>
<p>使用键盘的方向键选择目录,使用 <code>Tab</code> 跳转到下方的选项,选择 <code>Browse</code> 并敲击回车就可以进入到此目录。</p>
<p>若希望在选中目录下存放备份镜像文件(是一个文件夹),就可以选择 <code>Done</code> 选项,回车确认。</p>
<p><img src="/images/2022-08-12/15.jpeg" alt="是否检查镜像可还原性"></p>
<p>系统询问是否检查生成的备份镜像的可还原性,这里我们选是,多花一点时间能确保备份的完整性。</p>
<p><img src="/images/2022-08-12/16.jpeg" alt="是否对镜像加密"></p>
<p>镜像加密,依个人喜好选择。</p>
<p><img src="/images/2022-08-12/18.jpeg" alt="备份模式确认"></p>
<p>待上述配置完成后,系统会向你再次确认备份的内容与目的地。</p>
<p>确认无误后输入 <code>y</code> 并敲击回车继续。</p>
<h4 id="简单模式-高级模式"><a href="#简单模式-高级模式" class="headerlink" title="简单模式&#x2F;高级模式"></a>简单模式&#x2F;高级模式</h4><p>此时应该有一个模式选择,问你想要使用简单模式还是专家模式。</p>
<p>我建议选择 专家模式,简单模式能选择的参数较少。</p>
<p><img src="/images/2022-08-12/20.jpeg" alt="模式选择"></p>
<p>接下来的三个选项,全部保持默认配置即可。</p>
<p><img src="/images/2022-08-12/21.jpeg" alt="高级设置1"></p>
<p><img src="/images/2022-08-12/22.jpeg" alt="高级设置2"></p>
<p><img src="/images/2022-08-12/23.jpeg" alt="高级设置3"></p>
<h4 id="压缩方式选择"><a href="#压缩方式选择" class="headerlink" title="压缩方式选择"></a>压缩方式选择</h4><p><img src="/images/2022-08-12/24.jpeg" alt="压缩方式选择"></p>
<p>此处选择第三项 <code>-z2p 使用并行 bzip2 压缩</code>。</p>
<p>实测 bzip2 压缩速度比较快,产生的备份镜像的体积也不算大。</p>
<p>下图为选择了第一项 <code>-z1p 使用并行的 gzip 压缩</code> 的速度:</p>
<p><img src="/images/2022-08-12/19.jpeg" alt="并行 gzip 压缩速度"></p>
<p>下图为选择了第三项 <code>-z2p 使用并行 bzip2 压缩</code> 的速度:</p>
<p><img src="/images/2022-08-12/26.jpeg" alt="并行 bzip2 压缩速度"></p>
<p>可以看出 bzip2 压缩速度比 gzip 快了8倍。</p>
<p>其他压缩方式的速度,待我测试之后更新文章。</p>
<p><img src="/images/2022-08-12/25.jpeg" alt="分卷大小配置"></p>
<p>分卷大小配置保持默认即可。</p>
<h4 id="备份镜像检查"><a href="#备份镜像检查" class="headerlink" title="备份镜像检查"></a>备份镜像检查</h4><p>待备份完成后,再生龙还会进行一次备份镜像的可还原性检查,如下图:</p>
<p><img src="/images/2022-08-12/27.jpeg" alt="可还原性检查"></p>
<p>若得到下图的提示,则备份镜像生成成功了。</p>
<p><img src="/images/2022-08-12/28.jpeg" alt="可还原性检查完成"></p>
<p>随后,选择按照意愿选择备份结束后的操作即可。</p>
<p><img src="/images/2022-08-12/29.jpeg" alt="备份结束后操作选择"></p>
<p>至此,再生龙 CLonezilla 的基础教学就结束了,你已经学会了如何使用再生龙的图形界面进行备份。</p>
<p>下面是一些再生龙的高阶(大概很高级)使用方法。</p>
<h3 id="高级操作"><a href="#高级操作" class="headerlink" title="高级操作"></a>高级操作</h3><h4 id="使用无线网络备份"><a href="#使用无线网络备份" class="headerlink" title="使用无线网络备份"></a>使用无线网络备份</h4><p>上文中,我的电脑仅有两个 USB 口,为备份的流程增添了不必要的麻烦。</p>
<p>能否使用 Wi-Fi 将备份镜像推送至家中的 NAS 呢?</p>
<p>再生龙内置了许多通过无线&#x2F;有线网络备份的方法,如下图:</p>
<p><img src="/images/2022-08-12/30.jpeg" alt="备份选项"></p>
<p>我们尝试使用 Webdav 来远程备份吧!</p>
<h5 id="利与弊"><a href="#利与弊" class="headerlink" title="利与弊"></a>利与弊</h5><p>使用 Wi-Fi 备份可以摆脱线缆,更加轻松而优雅地进行备份。</p>
<p>然而,由于通过 Wi-Fi 或者一切网络传输数据的速度仍然无法比肩有线传输,备份所消耗的时间将是备份至本地磁盘的 3-4 倍。</p>
<p>备份我U盘中的 40G 的 Manjaro 系统用时 30min 左右。</p>
<p>倘若你有大把的时间,或家中的内网速度足够快,大可使用无线备份。品着咖啡,看着数据上云(笑)。</p>
<h5 id="预先准备"><a href="#预先准备" class="headerlink" title="预先准备"></a>预先准备</h5><p>上文中我们选择了基于 Debian 的 Clonezilla Stable 版本,遗憾的是 Debian 系统中并未携带太多驱动程序,因此识别不到我的 Intel AX200 无线网卡。</p>
<p>经过测试,基于 Ubuntu 的 <a href="https://clonezilla.org/downloads/download.php?branch=alternative">Clonezilla Alternative Stable</a> 版本可以识别到 AX200 网卡。</p>
<p>点击上方链接即可下载 Clonezilla Alternative Stable 版本的映像。</p>
<p>重新烧写启动U盘&#x2F;拷贝映像至多启动U盘即可。</p>
<h6 id="又遇到了启动问题"><a href="#又遇到了启动问题" class="headerlink" title="又遇到了启动问题"></a>又遇到了启动问题</h6><p>使用基于 Ubuntu 的再生龙,上文中使用的 <code>KVM</code> 模式变得无法打开了,且 <code>VGA 800x600</code> 模式是一样的花屏。</p>
<p>在一番尝试之后,我发现藏在更多启动选项菜单里的 <code>VGA 1024x768</code> 模式可以正常显示。看来基于 Debian 的再生龙也可以使用这个模式。</p>
<h5 id="开始备份-1"><a href="#开始备份-1" class="headerlink" title="开始备份"></a>开始备份</h5><p><img src="/images/2022-08-12/31.jpeg" alt="网络管理"></p>
<p>选择了非本地的镜像存储位置后,系统将开启上图的网络管理菜单。</p>
<p>选择第一项 <code>Edit a connection</code>。</p>
<p><img src="/images/2022-08-12/32.jpeg" alt="连接管理"></p>
<p>选择 <code>Add</code> 选项,在弹出菜单中 <code>Wi-Fi</code>。</p>
<p><img src="/images/2022-08-12/33.jpeg" alt="添加 Wi-Fi"></p>
<p><code>Profile name</code> 随意填写;</p>
<p><code>Device</code> 一般填写 <code>wlan0</code>,系统的第一块无线网卡;</p>
<p>接着,按照自己的情况填写图中划线的三个配置即可。</p>
<p><img src="/images/2022-08-12/34.jpeg" alt="连接状态"></p>
<p>保存 Wi-Fi 配置后,就能看到当前配置的连接状态。</p>
<p>若当前配置名前带 <code>*</code>,且右侧选项为 <code>Deactivate</code>,则 Wi-Fi 已连接成功。</p>
<p><img src="/images/2022-08-12/35.jpeg" alt="填写 Webdav 服务器地址"></p>
<p>接着,系统要求填写 Webdav 地址。</p>
<p><img src="/images/2022-08-12/36.jpeg" alt="确认 Webdav 配置"></p>
<p>最后,系统会向你确认 Webdav 是否正确。</p>
<p>若确认无误,即可敲击回车继续。</p>
<p>接下来的步骤和上述初级教程硬盘挂载之后的流程是完全一样的,请参考上文继续配置。</p>
</content>
<category term="教程" />
<updated>2022-08-12T04:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/f82a3103.html</id>
<title>BETAFPV 高频头固件编译 AttributeError</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/f82a3103.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><h2 id="错误原因"><a href="#错误原因" class="headerlink" title="错误原因"></a>错误原因</h2><p>Python 模块 <code>pypandoc</code> 版本过新,1.8.0 及更高版本已移除了 BETAFPV 高频头固件中仍在使用的 <code>convert</code> 函数。</p>
<h2 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h2><p>安装旧版的 <code>pypandoc</code> 模块。</p>
<p><code>pip install pypandoc==1.7.0</code></p>
</content>
<category term="教程" />
<category term="DIY" />
<updated>2022-08-06T04:30:00.000Z</updated>
</entry>
<entry>
<id>https://blog.udon.eu.org/archives/38942a16.html</id>
<title>DIY 显示器音箱</title>
<link rel="alternate" href="https://blog.udon.eu.org/archives/38942a16.html"/>
<content type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="/assets/js/Meting.min.js"></script><p>新买的显示器(LG 27UL500,虽然因为屏幕问题已经退货了)没有内置音箱,虽然大部分时间都在用耳机,但别人有的东西我不能没有嘛,就买了些材料,DIY 一个外接音箱。</p>
<p>写作此文章分享一下制作的过程~</p>
<h3 id="物料清单"><a href="#物料清单" class="headerlink" title="物料清单"></a>物料清单</h3><p><img src="/images/2022-06-03/01.JPG" alt="物料清单"></p>
<ul>
<li>PAM8403 数字功放板 5RMB</li>
</ul>
<p>接受 5V 电压,可以驱动两个 3W 的喇叭。商品详情页面吹的很厉害,确实底噪很小,而且输出的音量非常高。相当 OK 的功放板。</p>
<ul>
<li>8Ω 3W 喇叭两只(带音腔) 2*4RMB + 运费</li>
</ul>
<p>音质很不错,声音很大也不会破音,因为是广告机用的喇叭么?</p>
<ul>
<li>3.5MM 公头 0.5RMB</li>
</ul>
<p>我选的型号是 PJ392,只要是 3.5MM 双声道的公头就行了。</p>
<ul>
<li>Type C 母座 0.4RMB</li>