-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
2996 lines (2974 loc) · 524 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" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Mu Xinqi's Blog]]></title><description><![CDATA[A starter blog demonstrating what Gatsby can do.]]></description><link>https://blog.mxq.im</link><generator>GatsbyJS</generator><lastBuildDate>Sat, 06 Feb 2021 11:01:23 GMT</lastBuildDate><item><title><![CDATA[Surgio上手教程——妥善管理你的机场订阅]]></title><description><![CDATA[有多个机场订阅想合并成一个?提供的分流规则自己不满意?这里或许可以帮到你~]]></description><link>https://blog.mxq.im/archives/surgio-tutorial/</link><guid isPermaLink="false">https://blog.mxq.im/archives/surgio-tutorial/</guid><pubDate>Sat, 06 Feb 2021 00:00:00 GMT</pubDate><content:encoded><h2>前言</h2>
<p>有的时候下载 BitTorrent 会发现被拦截,查看了 Clash 的日志会发现,流量按照分流规则走了机场代理,但是机场是禁止 BT 下载 的,所以需要在 Clash 配置文件中加入一条使 BitTorrent 不走代理(即直连)的规则,但是目前 Clash 的配置文件中<strong>节点</strong>和<strong>规则</strong>以及<strong>配置</strong>是严重耦合在一起的,那么就需要一个工具来帮助我们实现这个需求,研究了一下发现 Surgio 可以胜任。</p>
<br/>
<h2>需求</h2>
<p>现有多个机场订阅以及节点信息:</p>
<ul>
<li>Clash(V2Ray)</li>
<li>Clash(SSR)</li>
<li>Vmess</li>
</ul>
<p>想将其合并成一个 Clash 配置文件,并且自定义一些分流规则。</p>
<br/>
<h2>Surgio</h2>
<p><a href="https://surgio.js.org/" target="_blank" rel="nofollow noopener noreferrer">Surgio</a> 就是一个可以实现(包括但不仅限于)上述需求的好帮手。</p>
<p>关于 Surgio 的详细介绍,还请看 <a href="https://surgio.js.org/" target="_blank" rel="nofollow noopener noreferrer">Surgio官方文档</a> ,文档写的较为全面,对于我这样的小白来说,初次上手确实有些摸不着头脑,网上相关的教程也较少(可能大佬看一看就明白了吧,觉得没啥可以分享的)。</p>
<p>就这样,反反复复研究了小两天,整理出了以下内容,来解决上述需求。</p>
<br/>
<h2>Surgio 环境配置</h2>
<blockquote>
<ul>
<li>以 ’$’ 开头的内容是需要输入至终端的,本教程基于 macOS Catalina 环境,其他平台请参照 <a href="https://surgio.js.org/guide/getting-started.html" target="_blank" rel="nofollow noopener noreferrer">Surgio 快速上手</a></li>
</ul>
</blockquote>
<br/>
<h3>安装 Node.js</h3>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash">$ brew <span class="token function">install</span> node</code></pre></div>
<p>若提示 <code class="language-text">Command not found &#39;brew&#39;</code>,请安装 <code class="language-text">Homebrew</code>后再次执行该命令安装 <code class="language-text">Node.js</code>。</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 安装 Homebrew</span>
$ /bin/bash -c <span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh<span class="token variable">)</span></span>"</span></code></pre></div>
<br/>
<h3>下载 ssr-local 二进制文件</h3>
<p>Surgio 导出 SSR 配置时<a href="https://surgio.js.org/guide/install-ssr-local.html" target="_blank" rel="nofollow noopener noreferrer">需要 ssr-local 的支持</a>,否则后面执行命令时会报错。
(后期可以通过配置 <code class="language-text">binPath</code> 或者删除冗余的 SSR 导出配置等内容来优化)</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 该命令的作用是下载 ssr-local 到指定位置,并为其添加执行权限。</span>
$ <span class="token function">curl</span> -L https://github.com/tindy2013/shadowsocks-static-binaries/raw/master/shadowsocksr-libev/macos/ssr-local -o /usr/local/bin/ssr-local <span class="token operator">&amp;&amp;</span> <span class="token function">chmod</span> +x /usr/local/bin/ssr-local</code></pre></div>
<br/>
<h3>安装 Surgio</h3>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 安装</span>
$ <span class="token function">npm</span> init surgio-store my-rule-store
<span class="token comment"># 或使用国内镜像安装</span>
$ <span class="token function">npm</span> init surgio-store my-rule-store --use-cnpm
<span class="token comment"># 切换到仓库目录</span>
$ <span class="token builtin class-name">cd</span> my-rule-store</code></pre></div>
<p><code class="language-text">my-rule-store</code> 目录如下:</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token builtin class-name">.</span>
├── node_modules
├── package-lock.json
├── package.json
├── provider
├── surgio.conf.js
└── template</code></pre></div>
<p>当前你只需要关注三个东西,他们的作用大致如下:</p>
<blockquote>
<ol>
<li><code class="language-text">provider</code> - 里面包含你的机场订阅和节点信息</li>
<li><code class="language-text">template</code> - 里面包含输出文件的格式与配置</li>
<li><code class="language-text">surgio.conf.js</code> - 里面是你所需要的规则和机场订阅的组合方式等等配置</li>
</ol>
</blockquote>
<br/>
<h2>添加机场订阅和节点信息</h2>
<p>第一步,先将多个机场订阅和一些单独的节点添加到 Surgio 中。</p>
<br/>
<h3>添加机场订阅</h3>
<p>进入 provider 文件夹</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash">$ <span class="token builtin class-name">cd</span> provider</code></pre></div>
<p>你能看到以下内容:</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token builtin class-name">.</span>
├── README.md
├── demo.js
├── ssr_subscribe_demo.js
├── subscribe_demo.js
└── v2ray_subscribe_demo.js</code></pre></div>
<p>首先对 <code class="language-text">subscribe_demo.js</code> 进行修改,将 <code class="language-text">url</code> 中的内容替换成你的机场订阅。</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">module.exports = {
<span class="token deleted-sign deleted"><span class="token prefix deleted">-</span> url: 'https://gist.githubusercontent.com/geekdada/34353d6ae23abd48f6e200b00747a87e/raw',
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> url: 'https://example.com/clash_v2.yaml',
</span><span class="token unchanged"><span class="token prefix unchanged"> </span> type: 'clash',
<span class="token prefix unchanged"> </span> // 定义所有的节点都支持 udpRelay
<span class="token prefix unchanged"> </span> udpRelay: true,
<span class="token prefix unchanged"> </span> // 添加国旗 emoji
<span class="token prefix unchanged"> </span> addFlag: true,
</span>};</code></pre></div>
<p>如果你有多个机场订阅的话,则根据 <code class="language-text">subscribe_demo.js</code> 格式在当前目录下多创建几个文件,以我上面(两个 Clash 订阅链接)的需求为例:</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 拷贝出一份新的文件</span>
$ <span class="token function">cp</span> subscribe_demo.js subscribe_demo_1.js</code></pre></div>
<p>对 <code class="language-text">subscribe_demo_1.js</code> 的内容进行修改:</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">module.exports = {
<span class="token deleted-sign deleted"><span class="token prefix deleted">-</span> url: 'https://example.com/clash_v2.yaml',
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> url: 'https://example.com/clash_ssr.yaml',
</span><span class="token unchanged"><span class="token prefix unchanged"> </span> type: 'clash',
<span class="token prefix unchanged"> </span> // 定义所有的节点都支持 udpRelay
<span class="token prefix unchanged"> </span> udpRelay: true,
<span class="token prefix unchanged"> </span> // 添加国旗 emoji
<span class="token prefix unchanged"> </span> addFlag: true,
</span>};</code></pre></div>
<p>这样 <code class="language-text">subscribe_demo.js</code> 和 <code class="language-text">subscribe_demo_1.js</code> 中就分别保存了 Clash(V2Ray)和 Clash(SSR) 的订阅地址。</p>
<br/>
<h3>添加节点信息</h3>
<p>接下来我们在 <code class="language-text">demo.js</code> 中可以看到一些节点信息填写的模板:</p>
<div class="gatsby-highlight" data-language="js"><pre class="language-js"><code class="language-js"><span class="token string">'use strict'</span><span class="token punctuation">;</span>
module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span>
type<span class="token operator">:</span> <span class="token string">'custom'</span><span class="token punctuation">,</span>
nodeList<span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
nodeName<span class="token operator">:</span> <span class="token string">'🇺🇸US'</span><span class="token punctuation">,</span>
type<span class="token operator">:</span> <span class="token string">'shadowsocks'</span><span class="token punctuation">,</span>
hostname<span class="token operator">:</span> <span class="token string">'us.example.com'</span><span class="token punctuation">,</span>
port<span class="token operator">:</span> <span class="token string">'10000'</span><span class="token punctuation">,</span>
method<span class="token operator">:</span> <span class="token string">'chacha20-ietf-poly1305'</span><span class="token punctuation">,</span>
password<span class="token operator">:</span> <span class="token string">'password'</span><span class="token punctuation">,</span>
obfs<span class="token operator">:</span> <span class="token string">'tls'</span><span class="token punctuation">,</span>
<span class="token string">'obfs-host'</span><span class="token operator">:</span> <span class="token string">'gateway-carry.icloud.com'</span><span class="token punctuation">,</span>
<span class="token string">'udp-relay'</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
nodeName<span class="token operator">:</span> <span class="token string">'🇭🇰HK(Netflix)'</span><span class="token punctuation">,</span>
type<span class="token operator">:</span> <span class="token string">'shadowsocks'</span><span class="token punctuation">,</span>
hostname<span class="token operator">:</span> <span class="token string">'hk.example.com'</span><span class="token punctuation">,</span>
port<span class="token operator">:</span> <span class="token string">'10000'</span><span class="token punctuation">,</span>
method<span class="token operator">:</span> <span class="token string">'chacha20-ietf-poly1305'</span><span class="token punctuation">,</span>
password<span class="token operator">:</span> <span class="token string">'password'</span><span class="token punctuation">,</span>
<span class="token string">'udp-relay'</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre></div>
<p>只需稍作修改即可,结构可参考 <a href="https://surgio.js.org/guide/custom-provider.html#custom" target="_blank" rel="nofollow noopener noreferrer">官方文档:Provider - custom</a> 。</p>
<p>到此为止,我们已经将多个机场的订阅信息和一些节点的信息就添加到了 <code class="language-text">Surgio</code> 的配置中。</p>
<p>接下来添加一些我们所需要的分流规则。</p>
<br/>
<h2>配置分流规则</h2>
<p>在 <a href="https://surgio.js.org/guide/custom-config.html#remotesnippets" target="_blank" rel="nofollow noopener noreferrer">官方文档</a> 中,我们可以了解到 <code class="language-text">Surgio</code> 支持符合 <a href="https://nssurge.zendesk.com/hc/zh-cn/articles/360010038714-Surge-Mac-3-Release-Note" target="_blank" rel="nofollow noopener noreferrer">Surge Ruleset 标准</a>,我们就以添加 <a href="https://github.com/Loyalsoldier/surge-rules" target="_blank" rel="nofollow noopener noreferrer">surge-rules</a> 中的 <strong>RULE-SET: 广告域名列表 reject.txt</strong> 规则为例,在生成的 Clash 文件中拦截该规则下的域名。</p>
<br/>
<h3>添加规则</h3>
<p>对 <code class="language-text">my-rule-store</code> 文件夹下的 <code class="language-text">surgio.conf.js</code> 进行修改:</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">module.exports = {
<span class="token unchanged"><span class="token prefix unchanged"> </span> remoteSnippets: [
<span class="token prefix unchanged"> </span> {
<span class="token prefix unchanged"> </span> name: 'apple', // 模板中对应 remoteSnippets.apple
<span class="token prefix unchanged"> </span> url: 'https://raw.githubusercontent.com/geekdada/surge-list/master/surgio-snippet/apple.tpl',
<span class="token prefix unchanged"> </span> surgioSnippet: true
<span class="token prefix unchanged"> </span> },
</span>
<span class="token unchanged"><span class="token prefix unchanged"> </span> // 省略一些规则
</span>
<span class="token unchanged"><span class="token prefix unchanged"> </span> {
<span class="token prefix unchanged"> </span> name: 'paypal', // 模板中对应 remoteSnippets.paypal
<span class="token prefix unchanged"> </span> url: 'https://github.com/DivineEngine/Profiles/raw/master/Surge/Ruleset/Extra/PayPal.list'
<span class="token prefix unchanged"> </span> },
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> // 添加广告域名列表规则
<span class="token prefix inserted">+</span> {
<span class="token prefix inserted">+</span> name: 'ad-reject',
<span class="token prefix inserted">+</span> url: 'https://raw.githubusercontent.com/Loyalsoldier/surge-rules/release/ruleset/reject.txt'
<span class="token prefix inserted">+</span> },
</span><span class="token unchanged"><span class="token prefix unchanged"> </span> ]
</span>}</code></pre></div>
<p>好,到此 Surgio 已经知道了该去哪里获取规则,接下来我们需要让 Surgio 知道这些规则该应用在哪里。</p>
<br/>
<h3>模板中应用规则</h3>
<p>进入 <code class="language-text">template</code> 文件夹,对其中的 <code class="language-text">clash.tpl</code> 文件进行编辑:</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">rules:
<span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> {{ remoteSnippets.ad-reject.main('REJECT') | clash }}
</span>{{ remoteSnippets.apple.main('🚀 Proxy', '🍎 Apple', '🍎 Apple CDN', 'DIRECT', 'US') | clash }}
{{ remoteSnippets.netflix.main('🎬 Netflix') | clash }}
{{ remoteSnippets.hbo.main('🚀 Proxy') | clash }}
{{ remoteSnippets.hulu.main('🚀 Proxy') | clash }}
{{ youtube_rules.main('🚀 Proxy') | clash }}
{{ us_rules.main('US') | clash }}
{{ remoteSnippets.telegram.main('🚀 Proxy') | clash }}
{{ blocked_rules.main('🚀 Proxy') | clash }}
{{ direct_rules.main('DIRECT') | clash }}</code></pre></div>
<p>在该文件中,我们添加的内容代表,从 <code class="language-text">surgio.conf.js</code> 文件中的 <code class="language-text">remoteSnippets</code> 中找到名字为 <code class="language-text">ad-reject</code> 的规则,将该规则设置为 <strong>拒绝</strong>(<code class="language-text">REJECT</code>) 状态,这样符合该规则的请求就会被拦截,从而达到去除广告的效果。</p>
<p>最开始的需求基本配置完毕,接下来我们需要将多个机场订阅和一些单独的节点合并生成一个 Clash 配置文件,并且其中需要包含刚刚配置的规则。</p>
<br/>
<h2>导出配置</h2>
<p>这一部分需要回到 <code class="language-text">surgio.conf.js</code> 中进行修改:</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">artifacts: [
<span class="token unchanged"><span class="token prefix unchanged"> </span> // 省略一些内容
</span>
<span class="token unchanged"><span class="token prefix unchanged"> </span> /**
<span class="token prefix unchanged"> </span> * Clash
<span class="token prefix unchanged"> </span> */
<span class="token prefix unchanged"> </span> {
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> // 该导出文件包含 Clash(V2Ray)
</span><span class="token deleted-sign deleted"><span class="token prefix deleted">-</span> name: 'Clash.yaml',
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> name: 'clash_v2.yaml',
</span><span class="token unchanged"><span class="token prefix unchanged"> </span> template: 'clash',
<span class="token prefix unchanged"> </span> provider: 'subscribe_demo', // 对应 provider 中的 subscribe_demo.js
<span class="token prefix unchanged"> </span> },
<span class="token prefix unchanged"> </span> {
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> // 该导出文件包含 Clash(SSR)
</span><span class="token deleted-sign deleted"><span class="token prefix deleted">-</span> name: 'Clash_custom_dns.yaml',
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> name: 'clash_ssr.yaml',
</span><span class="token unchanged"><span class="token prefix unchanged"> </span> template: 'clash',
<span class="token prefix unchanged"> </span> provider: 'subscribe_demo_1', // 对应 provider 中的 subscribe_demo_1.js
<span class="token prefix unchanged"> </span> customParams: {
<span class="token prefix unchanged"> </span> dns: true,
<span class="token prefix unchanged"> </span> }
<span class="token prefix unchanged"> </span> },
</span><span class="token inserted-sign inserted"><span class="token prefix inserted">+</span> // 合并节点
<span class="token prefix inserted">+</span> {
<span class="token prefix inserted">+</span> // 该导出文件包含 Vmess + Clash(V2Ray) + Clash(SSR)
<span class="token prefix inserted">+</span> name: 'clash_combine.yaml',
<span class="token prefix inserted">+</span> template: 'clash',
<span class="token prefix inserted">+</span> provider: 'demo', // 对应 provider 中的 demo.js
<span class="token prefix inserted">+</span> combineProviders: ['subscribe_demo', 'subscribe_demo_1'],
<span class="token prefix inserted">+</span> },
</span>
<span class="token unchanged"><span class="token prefix unchanged"> </span> // 省略一些内容
<span class="token prefix unchanged"> </span> ],</span></code></pre></div>
<br/>
<h2>输出代理配置文件</h2>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 切换到项目根目录</span>
$ <span class="token builtin class-name">cd</span> my-rule-store
<span class="token comment"># 生成配置文件</span>
$ npx surgio generate</code></pre></div>
<p>执行成功后,会生成一个 <code class="language-text">dist</code> 文件夹,其中应该包含:</p>
<ul>
<li>clash_v2.yaml</li>
<li>clash_ssr.yaml</li>
<li>clash_combine.yaml</li>
</ul>
<p>将 <code class="language-text">clash_combine.yaml</code> 这个合并之后的 Clash 配置文件拷贝至 ClashX 的配置目录内,然后在 ClashX 中切换配置即可。</p>
<br/>
<p>按照上面的配置,可以实现本文一开始的需求。</p>
<p>但是还是有以下可以优化的地方:</p>
<ul>
<li>每次修改规则配置后,需要重新拷贝配置文件至 ClashX 配置目录下。</li>
<li>机场更新节点订阅后,需要重新生成配置文件。</li>
<li>配置新机器的代理时,需要先在本地配置 Node 和 Surgio 环境。</li>
</ul>
<p>参考了官方文档,发现可以将 Surgio 部署到 SaaS 平台上,例如 Vercel 和 Heroku。</p>
<p>那么就开始吧~</p>
<br/>
<h2>部署 Surgio API</h2>
<p>本地直接部署至 Vercel 的方法请参考 <a href="https://surgio.js.org/guide/advance/api-gateway.html" target="_blank" rel="nofollow noopener noreferrer">官方文档:快速搭建托管 API</a> 。</p>
<p>以下介绍的方法是我常用的流程,将本地项目提交至 GitHub,然后在 Vercel 引如 GitHub 项目并进行部署的方法,不过会略过一些常用操作。</p>
<p>该流程方便后期随时随地在 GitHub 上编辑配置文件,并且 Vercel 自动化部署,无需本地再次配置环境。</p>
<div class="gatsby-highlight" data-language="bash"><pre class="language-bash"><code class="language-bash"><span class="token comment"># 在项目根目录 `my-rule-store` 下安装 `Surgio Gateway`。</span>
$ <span class="token builtin class-name">cd</span> my-rule-store
$ <span class="token function">npm</span> i @surgio/gateway --save
<span class="token comment"># 创建 Vercel 配置文件</span>
$ <span class="token function">touch</span> vercel.json
<span class="token comment"># 创建 Surgio Gateway 配置文件</span>
$ <span class="token function">touch</span> gateway.js</code></pre></div>
<p>在 <code class="language-text">vercel.json</code> 文件中添加如下内容:</p>
<div class="gatsby-highlight" data-language="json"><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>
<span class="token property">"version"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>
<span class="token property">"public"</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
<span class="token property">"builds"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token property">"src"</span><span class="token operator">:</span> <span class="token string">"/gateway.js"</span><span class="token punctuation">,</span>
<span class="token property">"use"</span><span class="token operator">:</span> <span class="token string">"@vercel/node"</span><span class="token punctuation">,</span>
<span class="token property">"config"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">"includeFiles"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token string">"provider/**"</span><span class="token punctuation">,</span>
<span class="token string">"template/**"</span><span class="token punctuation">,</span>
<span class="token string">"*.js"</span><span class="token punctuation">,</span>
<span class="token string">"*.json"</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token property">"routes"</span><span class="token operator">:</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token property">"src"</span><span class="token operator">:</span> <span class="token string">"/(.*)"</span><span class="token punctuation">,</span>
<span class="token property">"dest"</span><span class="token operator">:</span> <span class="token string">"/gateway.js"</span>
<span class="token punctuation">}</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span></code></pre></div>
<p>在 <code class="language-text">gateway.js</code> 文件中添加如下内容:</p>
<div class="gatsby-highlight" data-language="js"><pre class="language-js"><code class="language-js"><span class="token string">'use strict'</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> gateway <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'@surgio/gateway'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
module<span class="token punctuation">.</span>exports <span class="token operator">=</span> gateway<span class="token punctuation">.</span><span class="token function">createHttpServer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></div>
<br/>
<h3>配置接口鉴权(安全考虑,务必配置)</h3>
<p>在 <code class="language-text">surgio.conf.js</code> 添加如下内容</p>
<div class="gatsby-highlight" data-language="diff"><pre class="language-diff"><code class="language-diff">module.exports = {
<span class="token unchanged"><span class="token prefix unchanged"> </span> gateway: {
<span class="token prefix unchanged"> </span> auth: true,
<span class="token prefix unchanged"> </span> accessToken: 'YOUR_PASSWORD',
<span class="token prefix unchanged"> </span> },
</span>}</code></pre></div>
<p>并将 <code class="language-text">YOUR_PASSWORD</code> 进行随意替换。</p>
<br/>
<h3>提交至 GitHub</h3>
<p>略</p>
<br/>
<h3>Vercel 部署</h3>
<p>略</p>
<hr>
<p>略略略:p</p></content:encoded></item><item><title><![CDATA[在疫情期间我坚持下来的事]]></title><description><![CDATA[🏠 宅家这么多天,虽然只有这一件事能拿出来说一说,不过感觉还是蛮开心的!]]></description><link>https://blog.mxq.im/archives/getting-started-with-fitness/</link><guid isPermaLink="false">https://blog.mxq.im/archives/getting-started-with-fitness/</guid><pubDate>Fri, 10 Jul 2020 00:00:00 GMT</pubDate><content:encoded><p>标题说的就是<strong>家庭健身</strong>了。</p>
<br/>
<h2>🎈前情回顾</h2>
<p>过年的那段时间,大概就是全国人民被新冠病毒反复刷屏的日子,同时也是各种隔离措施开始实施并且市场上的口罩见光死的时候。走上街,很少有不戴口罩的身影出现。即使有,那可能是真的买不到口罩了。</p>
<p>我们家这边各种地方的出入都要登记,十分繁琐,而且我是一个非常嫌麻烦的人,要知道一出门就意味着 iPhone 8 以上的用户都面临着解锁难的问题,除非牺牲些安全性让 faceID 记住你的口罩(这时候看着侧面指纹解锁的手机别提有多香了),所以出门的频率渐渐降到了大概一月一次。</p>
<p>加之运动的场馆也关停了,从武汉地区疫情较严重的时候一直到北京这边情况不断,一直也没有机会出门打打球。</p>
<br/>
<h2>🔍健身软件对比</h2>
<h3>Keep与FitTime</h3>
<p>好在家里的电视支持 AirPlay 投屏,就可以不用盯着手机上的健身软件了。说起健身软件,高中的时候我是非常讨厌 Keep 这种教学方式的,可能是因为那个时候有一个叫 <a href="http://www.fit-time.com/index.htm" target="_blank" rel="nofollow noopener noreferrer">FitTime即刻运动</a> 的软件,我觉得它和 Keep 里面的视频最大区别可能就是:</p>
<ul>
<li>FitTime 是教练带着你<strong>一口气</strong>录制一套<strong>完整</strong>的训练。</li>
<li>Keep 是教练录制<strong>单个动作</strong>,然后通过软件来<strong>组合搭配</strong>与<strong>重复播放</strong>来组成完整的视频。</li>
</ul>
<p>FitTime 或许更加的“接地气”,锻炼的同时可以看到教练也在大口喘气,可以切身的感受到教练和你都十分的累、疲惫。但是 ta 没有放弃,所以自己练得也很卖力。</p>
<p>而反观 Keep,在训练的视频中用户自然不会看到教练气喘吁吁的样子,这种录制单个动作的方式倒是可以降低制作成本,通过不同动作的组合,可以搭配出不同效果的训练视频。</p>
<br/>
<h3>健身软件中体现的思想</h3>
<p>仔细一想,这不就是代码复用的实际体现嘛。</p>
<blockquote>
<p>软件复用的主要思想是,将软件看成是由不同功能部分的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具,这样,如果完成各种工作的组件被创建起来以后,编写一特定软件的工作就变成了将各种不同组件组织连接体来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。</p>
<p>via <a href="https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E5%A4%8D%E7%94%A8" target="_blank" rel="nofollow noopener noreferrer">代码复用 - Wikipedia</a></p>
</blockquote>
<p>替换到 Keep 身上就是:</p>
<blockquote>
<p>将 <strong>一套训练</strong> 看做是由不同功能部分的“<strong>单个动作</strong>”所组成的<strong>一个视频</strong>。</p>
</blockquote>
<p>这样大幅降低了训练的制作成本,怪不得 Keep 能拿下市场。</p>
<br/>
<h3>亮点</h3>
<p>由于我目前只用了 Keep 一款软件,所以只能以它的功能为例了。其中有两个我比较喜欢的功能。</p>
<p>第一个是软件里的“<strong>请假功能</strong>”,我感觉这个功能的加入让整个训练更“严肃”了。如果用户无法训练的话,就需要向现实生活中一样去跟 keep 请假,对用户来说这增加了“旷课“后内心的愧疚感(如果用户真的把它当回事的话),对 Keep 来说也增加了用户留存,双赢。</p>
<p>第二个是请假后恢复训练的<strong>渐进过程</strong>。不清楚这个是功能还是碰巧遇到了这样的情况,我就当它是 feature 吧。前些天由于回去看望老人来着,就有两天没有锻炼,第三天恢复训练的时候可以发现当天安排的运动量比往常要小,可能就是一个让身体再次适应锻炼的过渡阶段吧。让人感觉这个设计比较合理。</p>
<br/>
<h2>🏋️入坑健身</h2>
<p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/3acf0/sports-record-screenshots.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 75.31645569620254%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'301\'%20viewBox=\'0%200%20400%20301\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M28%2010c-8%201-10%201-14%205-4%205-4%202-4%20136v128l2%204c2%203%204%205%207%206l4%203h178c198%200%20181%200%20186-7l3-3V22l-2-4c-5-9%2012-8-181-8H28m171%20136a1914%201914%200%2001-119%200c0%202-8%202-29%202H22v65c0%2063%200%2065%202%2066l125%201a795%20795%200%2000134-2c0%203%2091%203%2094%200%202-2%202-3%202-66v-63l-29-1a120%20120%200%2001-32-1l-58%201c-55%200-58%200-60-2h-1\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/e10e9/sports-record-screenshots.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/7600a/sports-record-screenshots.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/d869c/sports-record-screenshots.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/38d5d/sports-record-screenshots.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/4eefe/sports-record-screenshots.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/56b60/sports-record-screenshots.webp 2000w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/ff44c/sports-record-screenshots.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/a6688/sports-record-screenshots.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/828fb/sports-record-screenshots.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/0ede0/sports-record-screenshots.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/3ac88/sports-record-screenshots.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/3acf0/sports-record-screenshots.jpg 2000w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/45fffe3959c8ec94c739fd7456e2ba13/828fb/sports-record-screenshots.jpg"
alt="运动记录截图"
title="运动记录截图"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></p>
<p>这张图算是记录了我入坑家庭健身的过程:</p>
<ul>
<li>2 月初尝禁果 - 因为感觉曾经隐约的腹肌线条不见了</li>
<li>3 月骑虎难下 - 因为Keep会员首月不要钱</li>
<li>4 月走火入魔 - 渐渐习惯</li>
</ul>
<p>所以严格来讲,4、5、6 这三个月是按照「锻炼 6 天,休息1天」的节奏度过的。毕竟是线上授课,省掉了很多花在路程上的“通勤”,每天总会有空出来的时间。</p>
<br/>
<h2>📷记录变化</h2>
<p>除了健身以外,有一件事让我十分感谢过去的自己,那就是记录健身。</p>
<h3>体型</h3>
<p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/4b190/compared-before-and-after-gym.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'400\'%20viewBox=\'0%200%20400%20400\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M361%209l-1%201-15%204-10%202-7%202-8%202c-9%202-11%202-9%203l5%201h3l-3-1c-3-1-3-1-1-1l5%202%201%201-1%201%2013-3%2010-3c-1%200-1-2%201-2h1c-1%203%203%202%206%200l2-3%202%202%203%202c1%200%205-4%204-5V8l-1%201M250%2074c-4%200-12%205-15%2010-5%205-7%2014-7%2022%201%207%200%2013-3%2020-2%204%201%2019%205%2026%203%206%204%206%206%202l5-11c3-4%206-10%207-15l5-10%201-4c-1-1%203-5%206-5l2-1c3-4%2020%200%2019%204l1%201%201%204%202%204c3%201%202%204-2%204l-15%204h14c4%202%204%203-1%204-7%202-13%204-12%205l8%201c6%200%208%201%208%202s-2%202-6%202c-8%201-17%205-17%208%200%202-2%203-4%204-3%200-4%201-4%202%200%202-3%2011-5%2011-4%200-9-2-11-6-4-5-7-5-9-2-1%202-2%203-1%204%201%203-2%2010-11%2029-7%2014-8%2018-9%2031s0%2016%203%2022c3%203%204%206%201%208v2l-1%202-3-4v12l-2-4c-4-8-7-25-5-28v-3l-1-12c0-5%200-8-1-7%200%202-2%200-2-2s-1-3-2%200c-1%201-2%200-4-4-2-6-4-7-10-7-3%200-9-4-16-10l-6-5c-8-6-9-14-3-21l2-3-13-1c-14-1-16-1-17-5%200-2-2-3-5-4-2%200-4-2-4-4l-1-2-1%204v3c0-2-2-1-2%201v5l-1%203%201-3c1-3%203-4%203-2%200%203-1%205-4%205l-2%202-1%202-1-2c0-2%200-2-2-1l-9%201-9%201v1c2%200%203%201%201%203-2%201%201%205%207%2010l6%206%201%201%202%202c2%202%204%201%204-2v-1l1-3v9h4l4%203c0%201%201%203%204%204%202%200%204%202%204%203l6%201%205-1%202-2c2-1%207%200%2013%205l6%203%203%202c0%201%205%202%205%200l4-1%206%201-1%201-1%202-4%204c-3%201-4%202-4%204l-5%207-7%208-3%204-3%2010c0%201%202%200%205-4%206-6%208-6%2012-3%202%203%202%206-2%2010l-3%205-2%203c-2%200-3%202-4%203l-2%204-9%209c-5%201-11%205-12%209%200%202-1%206-3%208l-2%204-4%204c-3%203-4%205-4%208l-3%2011-2%209-1%202-2%202-4%204-3%202-10%204H74c2-1-4-2-11-2h-7l-1-1c1-2-2-6-4-6l-2-1-1-1-4-1-1-1c1-1-1-6-4-8l-3-4-3-4c-2%200-3-2-3-5l-2-2c-2%201-2-10%200-13l3-5c1-3%202-4%205-5l4-1%202-1a666%20666%200%20016%200l-1-3c-2-1-2-15%200-16l1-3%201-2%203-7%204-13%204-12c0-2-4-5-5-4-2%201-2-13%200-20%201-7%201-9-1-7-3%202-4%205-5%208%200%208-3%2019-5%2020l-2%205a57%2057%200%2001-22%2025c-4%200-9%2012-7%2016l-1%202-1%202c0%202-5%2013-8%2016-3%204-3%205-3%2012l1%208%202-5%203-4c2-1%203%201%201%202l-1%202v3l-1%202-2%203-1%202-1%202v3l-1%2042v41h51c46%200%2051%200%2052-2h4l-1-1c-2%200-3-3-1-3l7-23%202-6%204-4h1c0%201%203-1%203-3l3-3%203-4%204-5c4-4%205-4%207-4l5%201c3%200%204%203%202%208l-3%206-4%2010c-1%205%208%209%2013%205l5-10c8-17%2013-28%2013-25l-7%2017-9%2022%206-11c9-20%2013-28%2015-29%202%200%202%200%201%202v4l-7%2015a1864%201864%200%2000-10%2025c0-1%201-2%202-1%203%200%207-8%2017-29%207-15%208-18%2011-20%202-1%204-1%202%201-1%202%202%206%205%207%204%200%205%2018%201%2025l-3%206c0%201%200%202-1%201l-1%202v2l-2%202-1%202-1%202v2l-1%201v1l-2%201h1l1%201-1%203-1-1c-1-2-1-2-1%200%201%201%200%203-1%203l-1%204c0%206%203%203%208-10l8-16%202-3v32h11c10%200%2010%200%2010-2l-1-4-1-4c-2-5-2-5-1-7v-1l-1%201c-1%201-1%200-1-1v-2l-1-2%201-2v-2c-1-2-1-2-1%200s0%202-1-1a528%20528%200%2001-12-46c1%201%203%202%205%201%208-1%209-1%2010%202l1%203v-3c0-3%205%2010%205%2014l1%202%203%208c3%207%203%207%201%208-2%200-3%203-2%205v3l-2%202h1l3-1c2%201%203-1%201-2v-1c1-2%202%201%202%205%200%202%200%202%201%201%202-2%207-3%208-1l-2%204c-2%203-3%204-1%204h1c1%201%200%201-2%201l-4-1h-1c-2%202-2%203-1%203%202-1%203%208%202%2013%200%203%200%203%201%202h5c0%202%2087%201%2095-1a472%20472%200%200166-19l1%2010a2634%202634%200%2000-1-152c-1-2-3-1-3%201h-1v-2c1-2%201-2-1-3l-2-4c0-2-2-4-2-1l-1-1-1-3v-2l-6-9-8-14-5-12c-4-11-12-22-19-25h-31c-15%200-18-1-16-5l1-8c1-6-1-9-5-8s-5-7-2-14c4-8%203-15-3-15-2%200-2-1-3-9l-3-14c-5-11-19-17-38-15m-127%206c-2%201-3%203-3%207%200%205%200%205%204%208%202%202%205%203%207%203s2%200%202%202c-1%202%202%205%203%203v-3c-2%200-1-1%200-2l3-4v-2l-2%202c-8%207-19-4-12-12%202-3%207-3%2010%200%203%202%204%202%202-1s-12-4-14-1m46%2014c-5%203-13%2015-11%2018%200%203%203%202%205%200l1-3%205%202c7%203%2012%202%2017-3l3-4-1-1-4-5c-3-4-11-6-15-4m-14%204l-4%204c-2%200-2%201-1%201%202%200%201%202-1%202-2%201-2%202-2%205s0%203-3%203c-7-2-9-2-8%201%201%2010%201%2010-1%2013l-2%203%203%203%204%202c2%200%202%200%201-4-3-5-1-8%204-10%209-2%2011-4%2011-13l1-11c1-4%200-4-2%201m42%2012v3c-1%203-8%207-11%207-3-1-4%201-2%203v2l-1%201%202%201c5%200%209%205%204%205v1c1%201%203%202%204%201l3%201c1%201%201%201-2%201l-3%202%201%201%202%201v1l-2%202-1%202-2%201c0%201%204%202%207%200l4-1v-18l-1-18-2%201m190%2011l1%204v5c2%202%203%206%202%206l-1-2c-1-1-1-1-2%201v2l1%204a313%20313%200%200011%2050l1-13a87%2087%200%2000-5-36l-4-12-1-3-2-5c0-2-1-2-1-1m-59%2045l1%201c1%201%200%201-1%201-2%200-3%201-3%202l-4%201c-4-1-17%203-19%207l-5%201c-5%200-7%203-8%208%200%205-2%209-5%209-8%202-22%203-25%203-5-1-9%203-5%206l4%206%205%208%204%204%207%205c6%204%2014%2013%2014%2016l3%204%202%204c0%202%205%205%208%205%202%200%203%200%203%202l-1%202c-1%200-2%204-1%206l9%204h3l4%201c2-1%202%200%202%202l-1%203-4%203c-4%203-4%208-1%2010l2%203%202%204%202%201c0%205%2012%204%2017%200%203-4%203-10%200-10l-3%201c0%201-2%207-4%208h-2l-1-1c-1%200-2-1-1-2l-2-1c-2%201-2%201%200-5v-6c-1-1-1-2%201-3%202-3%203-2%203%200s3%203%206%202c2-1%202-2%202-4l-1-5-3-3c-3-2-3-2-6%200-2%202-6%202-6%200%200-1%205-4%206-3%201%200%205-3%206-7%200-4-1-11-3-11s-1-3%201-3c3-1%202-13-1-16-2-2-2-4-1-6l4-8%204-9c2-3%202-2%201-16l-2-3c-2-3%200-5%204-5%206%200%207-2%208-10%200-7%200-7-11-5l-7-1h-1m-99%206l-2%205-2%205c-3%205-4%2012-4%2024%200%209%200%2012-2%2015-1%202-2%204-1%205l-1%201c-2%202-1%203%202%203s7-3%207-5l4-4%204-4%201-1c1%200%205-11%205-14l1-4%203-6%203-11%202-6-3-1-4-1c-4%200-8-1-10-3s-2-2-3%202m160-1l1%206a274%20274%200%20018%2032l2%208v-5l-8-35c-3-10-3-10-3-6M16%20214l-3%203-4%207-5%209-2%204-1%206v5l6-7c5-7%2011-16%2011-19l1-1%202-2%202-3c2%200%201-3-1-3-3-1-3-1-6%201m176%203l-4%203-4%202-3%203-2%205c1%203%207%205%2011%205%202-1%203-1%203%201h2c1-1%201-1%202%201%201%206%202%203%202-6l-1-12c0-3-2-4-2-1%200%204-2%204-3%201l-1-2m-18%2031c-5%205-11%2014-9%2014l3-1%202-1-1%202c-2%201-1%202%202%202%202%200%205%202%205%204l4%204%201%204c0%204%201%205%205%204l2%201c0%202%201%202%204%202%204-1%204%200%204%202l1%202c3%202%203-5%203-28v-9l-4-1-7-4c-6-3-9-3-15%203m-19%2071l-1%201c-2%200-6%205-8%208l-2%201-1%201v2c-3%200%200%202%204%203l5%202%202-6c3-5%206-8%206-6%200%203%203%203%204%201%202-2%202-2%200-3l-1-2-1-1-2-1-2-2-3%202m72%2014l2%207c2%205%202%207%201%209v3l1%205c0%205%200%205%202%205s2-1%202-4c0-5%201-6%203-5l1%203c0%204%202%206%204%206%203%200%203-2%202-3-2-2-2-3%200-6%201-3%201-3-1-3l-1-2-1-1c-2-1-3%200-3%201-1%202-4%203-4%201h1l1-2c0-1-1-2-2-1-2%200-3%200-5-7-2-8-3-10-3-6M16%20354v7h5c6-1%208-3%206-6v-4c1-3-2-5-7-5h-4v8m232-3c-4%203-2%2011%204%2011%204%200%205-2%205-6%200-5-5-8-9-5m-198%201c-2%204%200%208%204%209%204%200%206-1%206-5%200-6-6-8-10-4\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/e10e9/compared-before-and-after-gym.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/7600a/compared-before-and-after-gym.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/d869c/compared-before-and-after-gym.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/8d2ea/compared-before-and-after-gym.webp 800w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/ff44c/compared-before-and-after-gym.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/a6688/compared-before-and-after-gym.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/828fb/compared-before-and-after-gym.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/4b190/compared-before-and-after-gym.jpg 800w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/1154a4c8c7a3b5c35cc1ab20b3a5c384/828fb/compared-before-and-after-gym.jpg"
alt="健身前后对比"
title="健身前后对比"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></p>
<p>虽然不是天翻地覆的变化,但还是能看出来是有训练痕迹的,这就已经让我很开心了,更增添了继续下去的动力。</p>
<h3>体脂与体重</h3>
<p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/e5166/body-fat-rate-comparison-chart.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 107.59493670886076%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'430\'%20viewBox=\'0%200%20400%20430\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M3%20215v212h196V3H3v212m199%200v212h195v-79a866176%20866176%200%20010-322V3H202v212M67%20421c-2%202%202%202%2034%202l35-1c0-2-4-2-34-2l-35%201m198%200c-1%202%203%202%2035%202l35-1c-1-2-70-3-70-1\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/e10e9/body-fat-rate-comparison-chart.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/7600a/body-fat-rate-comparison-chart.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/d869c/body-fat-rate-comparison-chart.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/38d5d/body-fat-rate-comparison-chart.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/68fc1/body-fat-rate-comparison-chart.webp 1200w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/ff44c/body-fat-rate-comparison-chart.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/a6688/body-fat-rate-comparison-chart.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/828fb/body-fat-rate-comparison-chart.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/0ede0/body-fat-rate-comparison-chart.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/e5166/body-fat-rate-comparison-chart.jpg 1200w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/b78b506d4754f7a4182c0a3704bae988/828fb/body-fat-rate-comparison-chart.jpg"
alt="体脂率对比图"
title="体脂率对比图"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></p>
<p>三个月以来体脂下降了接近 2%,这是我意料之外的,做梦也想不到原来降体脂这件事会发生在我身上,而且只是每天跟着锻炼 40 分钟就可以实现的目标。</p>
<p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/e5166/weight-comparison-chart.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 107.59493670886076%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'430\'%20viewBox=\'0%200%20400%20430\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M3%20215v212h196V3H3v212m199%200v212h195v-23a205641%20205641%200%20010-376V3H202v212M22%20312c-2%201-2%202-2%2010%200%2011%201%2012%2012%2012s12-1%2012-12-1-12-12-12c-5%200-8%200-10%202m200-1c-3%201-3%201-3%2011%200%2012%200%2012%2012%2012%2011%200%2012-1%2012-12s-1-12-11-12l-10%201M21%20354l-1%2010c0%2011%201%2012%2012%2012%2012%200%2012%200%2012-12s0-12-12-12c-9%200-10%200-11%202m199-1c-2%202-1%2019%201%2021%203%203%2018%203%2020%200s3-18%201-20-20-3-22-1M67%20421c-2%202%202%202%2034%202l35-1c-1-2-68-3-69-1m198%200c0%202%204%202%2035%202l35-1c-1-2-70-3-70-1\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/e10e9/weight-comparison-chart.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/7600a/weight-comparison-chart.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/d869c/weight-comparison-chart.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/38d5d/weight-comparison-chart.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/68fc1/weight-comparison-chart.webp 1200w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/ff44c/weight-comparison-chart.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/a6688/weight-comparison-chart.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/828fb/weight-comparison-chart.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/0ede0/weight-comparison-chart.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/e5166/weight-comparison-chart.jpg 1200w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/f16380d539ed80901862f21b18170138/828fb/weight-comparison-chart.jpg"
alt="体重对比图"
title="体重对比图"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></p>
<p>在这期间体重的变化微乎其微,四舍五入等于没变,不过这点我倒不是很在意,反正线条的明显程度和体重并不成正比。不过如果按照 BMI 来计算的话,还是需要再减一减重的。</p>
<p>总的来说,这变化我还是十分满意的!</p>
<p>当然,如果数个月前因为“觉得自己一点线条都看不出来”就没有记录的话,那可能现在的喜悦应该会少一些吧。</p>
<p>这让我对记录生活更加珍惜,即使那并不是所谓的高光时刻。</p>
<br/>
<h2>💰相关花销</h2>
<h3>器材</h3>
<p>由于是在家徒手健身,器材主要就是健身垫(¥90)和弹力带(¥130)。</p>
<p>之前家里的健身垫简直就是个小型鞭模拟器,每次练完上面的静电都劈啪作响。</p>
<p>对于弹力带这个东西我是比较抗拒的,担心这东西练着练着万一断了把吸顶灯给打碎了,不过在知乎了解到无乳胶款的弹力带更结实耐用之后还是选择下单了。</p>
<p>还买了个小米手环 5(¥229),虽然买它不全是为了健身,但是能有个东西记录心率啥的总比没有强。</p>
<h3>食材</h3>
<p>都说健身是「三分练七分吃」,买吃的之前就会习惯性的看一看配料表,所以就把老干妈和拌饭酱这些高脂肪的东西给忌了。(<del>然后发现了零度可乐这个好伙伴</del>)</p>
<p>作为一个刚刚入门家庭健身的人,感觉牛奶鸡蛋就是不错的蛋白质摄入来源。</p>
<p>鸡蛋是山上的野鸡蛋(¥200/月),蛋黄贼黄的那种。烹饪方法越简单我越喜欢,常温水下锅十分钟之后浸入冷水,口感就很好。</p>
<p>牛奶从一开始的箱装长保质期奶(¥100 /月)逐渐转到短保奶(¥2/天),据说口感好,但是我尝不出来。</p>
<h3>软件会员</h3>
<p>我选择的是连续包季会员(¥58),主要享受的服务就是Keep给我安排课程,我只需要跟着练就行了。</p>
<p>当然不花这个钱也是可以的,想想就比较气🤦♂️</p>
<p><strong>因为在 Keep 的国际版里面,这些“定制训练计划”都是免费的。</strong></p>
<p>不过国际版的 Keep 貌似已经被放弃了,上次更新是一年之前了。</p>
<br/>
<h2>🚧注意事项</h2>
<p>刚开始健身一定一定要热身,半小时热身都没问题,永远不要嫌热身时间长,然后根据指示把动作做到位,其次就是适度运动,先让自己的身体有个适应的阶段。</p>
<p>还有一些比较主观的观点就是:UGC 的健身内容参考要谨慎。</p>
<p>我在 B 站跟着一个”下颌线训练”的视频做了十天,然后那个视频还被放到了 Keep,又跟着做了几天,之后就感觉在咬合的时候,下颌会响。</p>
<p>歇了两个月之后没事了。</p>
<br/>
<h2>📌总结</h2>
<p>回想起刚开始锻炼的时候,练完第二醒来想从床上坐起来,肚皮酸痛不允许,只能侧身把身体撑起来。</p>
<p>到现在身体比较适应了,练完第二天也没什么感觉。这个过程其实不复杂,只要每天都跟着练就好了。</p>
<p>坚持下来之后感觉对自己的身体更有控制力了,相信也能降低受伤的风险。而且运动会让大脑释放内啡肽,作用跟吗啡差不多,所以每天过的还挺开心的!</p></content:encoded></item><item><title><![CDATA[Android高版本http请求错误]]></title><description><![CDATA[📕 Android 开发中遇到的问题]]></description><link>https://blog.mxq.im/archives/android-high-version-http-request-error-cause/</link><guid isPermaLink="false">https://blog.mxq.im/archives/android-high-version-http-request-error-cause/</guid><pubDate>Sun, 08 Dec 2019 00:00:00 GMT</pubDate><content:encoded><p>在 Android 7(API 24)上正常,但在 Android 10(API 29) 上 Volley 请求 http 失败,所以不显示内容。</p>
<span class="gatsby-resp-image-wrapper" style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; ">
<a class="gatsby-resp-image-link" href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/9ae6c/before-fix.jpg" style="display: block" target="_blank" rel="noopener">
<span class="gatsby-resp-image-background-image" style="padding-bottom: 62.65822784810127%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/svg+xml,%3csvg%20xmlns=\&apos;http://www.w3.org/2000/svg\&apos;%20width=\&apos;400\&apos;%20height=\&apos;251\&apos;%20viewBox=\&apos;0%200%20400%20251\&apos;%20preserveAspectRatio=\&apos;none\&apos;%3e%3cpath%20d=\&apos;M230%2011c-6%204-6%202-6%2074v65h-17l-17%201-7%201h-7l6-1%207-1h-7l-7%201h-1l-2-66c0-71%200-70-7-73-5-3-93-3-97%200-7%204-6%200-7%2075%200%2060-1%2071-2%2060-1-2-1-1-1%202%200%206%200%207-3%206l-1-4c0-3-1-4-2-4-2-1-2-1-2%204l-1%204-1-2v-3H28l-20-1-4-1H0v103h401v-42l-1-62v-19h-4l-4%201-14%202-16%201c-2%200-3%200-3-2-1-2-1-2-1%202v5l-1-4c-1-4-1-4-1-1l-2%204-1%206%201%207h-18v-6a37988%2037988%200%2001-2-122c-3-13%200-12-55-12-44%200-46%200-49%202m-1%20121v84h101V47H229v85M66%2049v85l1%2083h100V48h-50l-51%201M0%20200\&apos;%20fill=\&apos;%23d3d3d3\&apos;%20fill-rule=\&apos;evenodd\&apos;/%3e%3c/svg%3e&apos;); background-size: cover; display: block;"></span>
<picture>
<source srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/e10e9/before-fix.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/7600a/before-fix.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/d869c/before-fix.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/38d5d/before-fix.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/4eefe/before-fix.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/a0280/before-fix.webp 2934w" sizes="(max-width: 630px) 100vw, 630px" type="image/webp">
<source srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/ff44c/before-fix.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/a6688/before-fix.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/828fb/before-fix.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/0ede0/before-fix.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/3ac88/before-fix.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/9ae6c/before-fix.jpg 2934w" sizes="(max-width: 630px) 100vw, 630px" type="image/jpeg">
<img class="gatsby-resp-image-image" src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/27c7eb9d6fd047b1d4b80829a18a296d/828fb/before-fix.jpg" alt="request_http_failed_in_high_version" title="request_http_failed_in_high_version" loading="lazy" style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;">
</picture>
</a>
</span>
<p>查询到 <a href="https://developer.android.com/about/versions/pie/android-9.0-changes-all?hl=zh-cn" target="_blank" rel="nofollow noopener noreferrer">Android Pie 行为变更</a>中提到:</p>
<blockquote>
<p><strong>传输层安全协议 (TLS) 实现变更</strong></p>
<p>系统的传输层安全协议 (TLS) 实现在 Android 9 中经历了若干次变更:</p>
<ul>
<li>如果 <a href="https://developer.android.com/reference/javax/net/ssl/SSLSocket.html?hl=zh-cn" target="_blank" rel="nofollow noopener noreferrer">SSLSocket</a> 的实例在创建时连接失败,系统会引发 <a href="https://developer.android.com/reference/java/io/IOException.html?hl=zh-cn" target="_blank" rel="nofollow noopener noreferrer">IOException</a> 而非 <a href="https://developer.android.com/reference/java/lang/NullPointerException.html?hl=zh-cn" target="_blank" rel="nofollow noopener noreferrer">NullPointerException</a>。</li>
<li><a href="https://developer.android.com/reference/javax/net/ssl/SSLEngine.html?hl=zh-cn" target="_blank" rel="nofollow noopener noreferrer">SSLEngine</a> 类可正常处理出现的任何 <code class="language-text">close_notify</code> 提醒。</li>
</ul>
<p>如需了解有关在 Android 应用中进行安全网络请求的更多信息,请参阅 <a href="https://developer.android.com/training/articles/security-ssl?hl=zh-cn#HttpsExample" target="_blank" rel="nofollow noopener noreferrer">一个 HTTPS 示例</a> 。</p>
</blockquote>
<br/>
<h2>解决方法</h2>
<ol>
<li>改用 https 请求 (推荐)</li>
<li><code class="language-text">targetSdkVersion</code> 改为 <code class="language-text">27</code> 以下</li>
<li>
<p>在 <code class="language-text">AnroidManifest.xml</code> 中的 <code class="language-text">&lt;application&gt;</code> 标签中添加</p>
<p> <code class="language-text">android:usesCleartextTraffic=“true”</code></p>
</li>
<li>
<p>在 <code class="language-text">res/xml</code> 目录下创建 <code class="language-text">network_security_config.xml</code> 文件,</p>
<p>然后在 <code class="language-text">AndroidManifest.xml</code> 中的 <code class="language-text">&lt;application&gt;</code> 标签中添加</p>
<p><code class="language-text">android:networkSecurityConfig=&quot;@xml/network_security_config&quot;</code>。</p>
</li>
</ol>
<div class="gatsby-highlight" data-language="xml"><pre class="language-xml"><code class="language-xml"><span class="token comment">&lt;!--network_security_config.xml--></span>
<span class="token prolog">&lt;?xml version="1.0" encoding="utf-8"?></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>network-security-config</span><span class="token punctuation">></span></span>
<span class="token comment">&lt;!--默认配置,明文通信,使用系统证书--></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>base-config</span> <span class="token attr-name">cleartextTrafficPermitted</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>trust-anchors</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>certificates</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>system<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>trust-anchors</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>base-config</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>network-security-config</span><span class="token punctuation">></span></span></code></pre></div>
<br/>
<h2>按照第三条修改后:</h2>
<span class="gatsby-resp-image-wrapper" style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; ">
<a class="gatsby-resp-image-link" href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/d3e24/after-fix.jpg" style="display: block" target="_blank" rel="noopener">
<span class="gatsby-resp-image-background-image" style="padding-bottom: 64.55696202531645%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/svg+xml,%3csvg%20xmlns=\&apos;http://www.w3.org/2000/svg\&apos;%20width=\&apos;400\&apos;%20height=\&apos;258\&apos;%20viewBox=\&apos;0%200%20400%20258\&apos;%20preserveAspectRatio=\&apos;none\&apos;%3e%3cpath%20d=\&apos;M237%2012c-6%205-6%202-7%2078a3271%203271%200%2001-2%2062v-3l-1%204-1%205v-6c0-6-2-7-2-1v3h-8c-7%200-8%200-8-2l-1-2-1%202c0%202-3%205-4%203l-2-2-1-4%201-3v3c0%204%202%204%202-1%200-3%200-4-2-4s-2%201-2%204v5l-1-5-1-4v4l1%206c1%201%202%202%201%203s-1%201-1-1v-2l-2%202c-1%202-3%202-7%202h-5l5-1%205-1h-6l-5%201h-1c-1-1-1-1-1%201-1%201-1%201-1-1v-2l-1%202-1-66c0-67%200-68-2-72-4-8-2-8-55-8-52%200-51%200-54%207a1180%201180%200%2000-4%20138c0-5-2-5-2%200-1%204-1%203-1-2v-7l-1%207c0%205-1%205-1%202%200-4%200-4-2-4l-3%201-26%201H0v104h401v-42l-1-63v-20h-8c-6%200-8%200-8%202s-16%202-16-1h-1l-1%202-1%204c0%203%200%203-1-2s-1-4-1%205v11h-9c-8%200-8-1-9-3V85c-1-59-1-64-3-68-3-7-2-7-55-7h-47l-3%202m-1%20124v87h103V49H236v87m-167%201v87h103V50H69v87M0%20206\&apos;%20fill=\&apos;%23d3d3d3\&apos;%20fill-rule=\&apos;evenodd\&apos;/%3e%3c/svg%3e&apos;); background-size: cover; display: block;"></span>
<picture>
<source srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/e10e9/after-fix.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/7600a/after-fix.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/d869c/after-fix.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/38d5d/after-fix.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/4eefe/after-fix.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/f50bd/after-fix.webp 2862w" sizes="(max-width: 630px) 100vw, 630px" type="image/webp">
<source srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/ff44c/after-fix.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/a6688/after-fix.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/828fb/after-fix.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/0ede0/after-fix.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/3ac88/after-fix.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/d3e24/after-fix.jpg 2862w" sizes="(max-width: 630px) 100vw, 630px" type="image/jpeg">
<img class="gatsby-resp-image-image" src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/5b2db16bc4abc6cc40d6aab8ad188258/828fb/after-fix.jpg" alt="after" title="after" loading="lazy" style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;">
</picture>
</a>
</span></content:encoded></item><item><title><![CDATA[Android高版本权限问题]]></title><description><![CDATA[📕 Android 开发中遇到的问题]]></description><link>https://blog.mxq.im/archives/notes-of-getting-started-with-android-development/</link><guid isPermaLink="false">https://blog.mxq.im/archives/notes-of-getting-started-with-android-development/</guid><pubDate>Wed, 13 Nov 2019 00:00:00 GMT</pubDate><content:encoded><div class="gatsby-highlight" data-language="java"><pre class="language-java"><code class="language-java">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span><span class="token class-name">FileNotFoundException</span><span class="token operator">:</span> <span class="token operator">/</span>storage<span class="token operator">/</span>emulated<span class="token operator">/</span><span class="token number">0</span><span class="token operator">/</span>video<span class="token punctuation">.</span>mp4<span class="token operator">:</span> <span class="token keyword">open</span> <span class="token namespace">failed</span><span class="token operator">:</span> EACCES <span class="token punctuation">(</span><span class="token class-name">Permission</span> denied<span class="token punctuation">)</span></code></pre></div>
<blockquote>
<p>《第一行代码》书中 8.4.2 播放视频”的代码在书中的 Nougat 版本运行没有问题,但是在 Pie 中会显示如下图所示 <code class="language-text">Can&#39;t play this video.</code></p>
</blockquote>
<p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/b30eb/snapshots.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 65.82278481012659%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'263\'%20viewBox=\'0%200%20400%20263\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M73%2015c-5%201-8%205-9%209v220c1%205%203%207%208%208%203%202%203%202%201%202-3%200-3%200-2%201h2l1%204v5l1-4%201-4v3l1%204%201-4%201-3v7h9v-9l3-1h8l4%201v9h15v-8c1-2%205-2%2011-2l4%201-1%205v4h17v-5c1-5%202-6%2011-4%205%200%205%200%203%201-3%201-3%201-1%201s2%201%202%204v3h16v-53l-2-53a323%20323%200%2001-2-63l-1-34c0-40%200-42-10-45H73m130%201c-7%203-7%204-8%2042a759%20759%200%2001-1%2068c0%2029-1%2031-2%2031-2%200-2%202-2%2019l1%2016c1-3%201-3%201%202v8l-1%2011%201%2012%201%2015v5l-1%205c0%202%200%202%201%201%200-2%201-2%201-1v2l-1%206v5h17v-10h7c5%200%207%201%207%202l-1%201c-1-1-1%200-1%201l1%201c1-1%201%200%201%202%200%203%200%203%203%203s3%200%203-4l1-3v7h10v-10h8c5%200%207%200%205%201l-1%201c1%200%202%201%201%202l-1%201-1%202c0%202%200%202%202%201h1c0%202%201%202%208%202h8v-10h5c5%200%2012%202%208%202-2%200-2%201-2%204v5l1-4%201-4v7h18v-6c0-5%201-7%203-10l2-3v-34a3079%203079%200%20000-151c0-37%200-39-6-43-4-2-93-3-98%200m14%2028h-6c-6%200-6%200-6%202s1%202%206%202l8%201h2l3-1%202-1h3c0%202%207%201%207-1%200-1-1-2-9-1l-9-1h-1m-16%2010a1388%201388%200%20002%2052l1-5v6c0%205%200%205%201%202l1-2%201%201a166%20166%200%20000-40v-1c-1-1%207-1%2024-1l19%201-7%201h9l9-1c-1-1%202-1%207-1s8%200%207%201v3c1%206%200%2026-1%2031-2%205-3%2011-1%208l2-7%203-5c3-1%205-4%202-4l-1-2%204-1c5%200%206%202%203%204l-2%203-1%203-3%205-2%205c-2%203-3%207-2%207l4-3%206-3c7%200%2010-1%2011-4l2-2c2%200%204-3%203-5%200-1-1-1-2%202-2%202-4%202-8%203-3%200-5%200-4-1%204-1%205-10%202-13V81c2-1%201-4-1-5l-1-3c1-1%200-2-1-3v-2l-1-1c-3-1%200-1%207-1h10V53h-51l-51%201m44%2029v3c1%204%200%206-4%209l-4%202v14h-3l28-1h4v-5c0-10-1-15-3-14l-2-1c-2-2-3-1-3%201l-2%203-3%201-1-2-2%202%201%201%201%202c0%202-2%203-2%200-2-3-3%200-3%206%200%205-1%207-3%205-1-1%202-14%205-17s3-4-1-5l-1-2v-3l-2%201m24%2033l-2%206-33%201-33%201v101h102V123h-17l-17-1%201-2%201-2v-5l-2%203M75%20132l1%2014h42l44-1c2%200%202-2%202-13v-13l-45-1H75v14m236%2029l-1%205%202%2074v23h13V157h-14v4\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/e10e9/snapshots.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/7600a/snapshots.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/d869c/snapshots.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/38d5d/snapshots.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/4eefe/snapshots.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/87d09/snapshots.webp 2898w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/ff44c/snapshots.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/a6688/snapshots.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/828fb/snapshots.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/0ede0/snapshots.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/3ac88/snapshots.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/b30eb/snapshots.jpg 2898w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ae0dca2d1ec5078ef23588d6e27d5702/828fb/snapshots.jpg"
alt="can&#39;t_play_this_video"
title="can&#39;t_play_this_video"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></p>
<p>Log 中会显示如下:</p>
<div class="gatsby-highlight" data-language="java"><pre class="language-java"><code class="language-java"><span class="token number">2019</span><span class="token operator">-</span><span class="token number">11</span><span class="token operator">-</span><span class="token number">13</span> <span class="token number">16</span><span class="token operator">:</span><span class="token number">46</span><span class="token operator">:</span><span class="token number">36.273</span> <span class="token number">6238</span><span class="token operator">-</span><span class="token number">6238</span><span class="token operator">/</span>xxx<span class="token punctuation">.</span>xxx<span class="token punctuation">.</span>mainActivity<span class="token operator">/</span><span class="token class-name">VideoView</span><span class="token operator">:</span> <span class="token class-name">Unable</span> <span class="token keyword">to</span> <span class="token keyword">open</span> <span class="token namespace">content</span><span class="token operator">:</span> <span class="token operator">/</span>storage<span class="token operator">/</span>emulated<span class="token operator">/</span><span class="token number">0</span><span class="token operator">/</span>video<span class="token punctuation">.</span>mp4
java<span class="token punctuation">.</span>io<span class="token punctuation">.</span><span class="token class-name">FileNotFoundException</span><span class="token operator">:</span> <span class="token operator">/</span>storage<span class="token operator">/</span>emulated<span class="token operator">/</span><span class="token number">0</span><span class="token operator">/</span>video<span class="token punctuation">.</span>mp4<span class="token operator">:</span> <span class="token keyword">open</span> <span class="token namespace">failed</span><span class="token operator">:</span> EACCES <span class="token punctuation">(</span><span class="token class-name">Permission</span> denied<span class="token punctuation">)</span></code></pre></div>
<p>查询了一圈发现原因是:书中代码直接操作的是根目录下的 video.mp4 文件,但是在 API level 29 之后,软件默认只有操作其自身目录下的内容的权限,当需要对其他内容进行操作时需要获取权限,特别是当 <code class="language-text">targetSdkVersion</code> >= 29 时,需要将<code class="language-text">requestLegacyExternalStorage</code> 更改为 <code class="language-text">true</code> (default: false)</p>
<br/>
<h2>解决方法</h2>
<p>在 <strong>AndroidManifest.xml</strong> 文件中的 <code class="language-text">&lt;application&gt;</code> 中添加</p>
<p><code class="language-text">android:requestLegacyExternalStorage=&quot;true&quot;</code></p></content:encoded></item><item><title><![CDATA[最近的开心事]]></title><description><![CDATA[📝 记录了这些天在网络上、生活中遇到的那些让人回想起来觉得有点甜的点滴瞬间]]></description><link>https://blog.mxq.im/archives/what-made-me-happy-recently/</link><guid isPermaLink="false">https://blog.mxq.im/archives/what-made-me-happy-recently/</guid><pubDate>Thu, 31 Oct 2019 00:00:00 GMT</pubDate><content:encoded><h3>B站投稿 收获过万</h3>
<p><del>咳咳…这里指的是收获过万的播放量…不是钱</del></p>
<p>前些天给宿舍拍了一个几分钟的视频,大概就是介绍了都有啥东西,再围绕着每件物品说一说选择它的理由,就这样。然后发到了B站上,一周内播放量七八万!</p>
<p>对于一个发视频前粉丝数量为 0的人来说,意义非凡!</p>
<p>说实话,我没有想到为什么会有这么多的人会看,会看一个介绍宿舍的视频。而且据我同学的描述,当时最高同时播放有一千多人!OMG !!!</p>
<p>(可能世界上也有很多像我这样“日常无聊”,通过看别人的vlog来充实自己生活的人吧)</p>
<p>惊喜之外,肯定还会有点小开心。假设这些播放量不是为了鼓励新人的虚假播放量。那么,能获得这小小成绩,还是能够说明一些问题的,比如:</p>
<ol>
<li>投稿赶上了国庆放假,可能获得更多播放量。</li>
<li>视频题材是校园生活、宿舍装饰相关,刚开学的新老同学可能感兴趣。</li>
<li>自认为装饰的还行(逃…</li>
</ol>
<br/>
<h3>生活中的小开心</h3>
<p>前几天在去食堂吃饭的时候,买的肉饼和鸡蛋灌饼,让我意外的是,卖灌饼的小姐姐(or阿姨)竟然问了我一句:“还加咸菜么?”</p>
<p>对这人性化服务好感瞬间增加!心想以后肯定多来吃肉饼,我的钱就是你们这家店的钱!</p>
<p>哈哈哈,过了过了</p>
<p>不过,这样的服务真的能给人留下深刻的印象。这种让你感觉自己来这里吃饭能吃出和别人不一样的感觉,吃出来“私人定制”的感觉!</p>
<p>小时候,还记得是初中那会儿,周六日的早晨我常常会去学校操场跑跑步打打球。锻炼完就悠闲的走到不远处的早点摊(一个迷你的城市移动餐车,由一对夫妇经营),买上两个鸡蛋灌饼还有一杯紫米粥,有时候还会给父母带回去早饭。</p>
<p>没错,就是那里的鸡蛋灌饼里面会放咸菜,我吃了好几年。在最开始的几个月,他们还会像对待每一位顾客一样,问上一句:“要辣么?” </p>
<p>后来,我再过去,他们看到我就会问一句:“还是跟以前一样么?”</p>
<p>哇!体验过于舒适!你能感受到那种feel嘛,感觉有一个人,虽然比较“陌生”但是却能记住你喜欢的口味。不仅如此,甚至跟你的家人素未谋面,还能通过你的描述记住你家人喜爱的口味。</p>
<p>我也不太清楚这种感觉该如何形容了。当然这和淘宝那种智能推送的感觉完全不一样啦,那种机器的反馈给人感觉就会是:“你(X宝)是不是监视我???”</p>
<p>Emmm 就宛如有一个人暗恋你,为了能给你留下一个好的印象,背地里做了很多功课,你只说过一次的“喜欢吃什么”、“玩什么”却都被Ta深深的印在脑海里~</p>
<p>说的有点多了,反正这样的体验,只能说一句:“活该他们赚钱多!”</p>
<br/>
<h3>差点赚到外快 但涨了知识</h3>
<p>前几天一个同学冷不丁问我会不会写爬虫,我一惊,根据以往经验,战术性有些脊背发凉。后来问他具体是要爬什么东西,这才得知是他一个不太熟的同学问他认不认识会写爬虫的。</p>
<p>他的同学写论文所以需要收集真实数据,让爬出“xx众筹”上面符合条件的100个商品的信息,他看淘宝上的价格都要四五百,很贵。</p>
<p>“甲方的要求”听上去还行,我顺势打开相关页面,简单看了一下商品信息,都是明摆着的,不需要登陆验证才能看,难度应该不大。</p>
<p>内心OS:“原来是这样,还是蛮开心的能一路问到我这里。既然话都说到这份上了,我打算趁着这个机会顺便入门一下爬虫……”</p>
<p>回了同学一句:“告诉他 我试试” 就去吃饭了(逃…</p>
<p>(我吃饭很快的)回来后,面向Google学习,用了一个半小时,完成了任务的一半,心想另一半应该差不多,就跟我同学说:“可以爬”</p>
<p>后来,同学回复我,他那个同学已经<strong>手动</strong>找出来75个了。</p>
<p>妈耶!这也太硬核了 虽然应该不是很难,但是对于一个不懂编程的人来说,爬虫真的不好入门么?感觉网上资源这么多,这样的页面,爬一下应该难度也不是很大吧。可能你们觉得我可能是站着说话不腰疼……</p>
<p>思考到最后,我对于这件事:最遗憾的并不是没有赚到那外快,而是</p>
<blockquote>
<p>“一个人永远不能停止思考,停止学习。”</p>
</blockquote>
<p>不然,实在是太可怕了。</p></content:encoded></item><item><title><![CDATA[这个夏天-2019]]></title><description><![CDATA[🎈 大二的暑假的一个总结记录]]></description><link>https://blog.mxq.im/archives/this-summer-2019/</link><guid isPermaLink="false">https://blog.mxq.im/archives/this-summer-2019/</guid><pubDate>Mon, 26 Aug 2019 00:00:00 GMT</pubDate><content:encoded><p>2019年的暑假,从七月中旬到八月底,一共四十天左右。</p>
<p>其中的二十余天,我花在了新东方的A2德语课上。</p>
<p>剩下的时间,基本就是在家啦~</p>
<p>过程五味杂陈,有开心、有感动亦有无奈。值得记录一下,我认为。</p>
<br/>
<h1>上课期间</h1>
<p>展春园校区对于我来说可以说是一个完全陌生的校区,还记得第一天从家出发,两个小时的车程之后我意识到时间可能不大够了。低头看了眼时间,还有三十分钟上课。巧的是抬头就看到了熟悉的面孔,那个在 A1 班上的熟悉面孔——Herr 陈,聊了一下知道他上班的公司就在附近,所以跟一个对路十分熟悉的人一起走,总是可以及时到达目的地。</p>
<p>一进教室,我就意识到:“哎呀,来晚了…”。</p>
<p>因为屋子里几乎快坐满了人</p>
<p>欣慰的是,我知道我们这班是<del>007制(零点到零点,每周上七天)</del>,反正就是天天都要上课的,让已经上了两年大学的我联想起了高中时光。从这个时候我就相信,这个班注定会<strong>不平凡</strong>。</p>
<p>老师还是熟悉的原版人马;同学却多了好多新面孔,年龄段上也都不尽相同,从高中到已经毕业一年。来自不同的专业,但有着近乎相同的目标——Deutschland。</p>
<p>为了同一个目标,我们劲头十足,不过后来才感受到,这真的和我的高中学习生涯十分相似,每次开学的时候在老师的一番慷慨陈词之后劲头十足,但是到了后来…你懂的</p>
<p>以下就是翻相册回忆中~</p>
<br/>
<h2>烦恼</h2>
<p>这二十多天,我才对“通勤”有了一些感受,平常总是在学校里面活动或者只是去出去五六站地远的我来说:<strong>每天,三个多小时的通勤,足以让我崩溃了。</strong>我忍受不了的不是坐地铁,而是地铁里面的噪音等等让你无法专注的去做一些事情,每天都会<strong>白白浪费三个小时</strong>是最让我无法接受的</p>
<p>在经历了接近十天的纠结之后,我还是选择用花呗购买了降噪耳机 Sony WF-1000X</p>
<table>
<thead>
<tr>
<th align="center">盒子</th>
<th align="center">主体</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/12609/bluetooth-headset-packag.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 75.31645569620254%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'300\'%20viewBox=\'0%200%20400%20300\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M0%2068v68h2l3%201H0v68h4c4%200%204%200%203-2-2-1-2-1%201-1l4-1%201-2c2-2%203-2%204-1%202%203%204%202%205-2l2-3c0%202%201%202%204%202%204%200%204%200%204-2l1-3%201%201%202%201%201-2%202-1c3%201%209%200%209-1l-4-3-4-2h9l1%201%201%202%201-2%201-2%201%201%202%201v24l-8-1H20l-20-1v8h24l31%201v2c0%202-1%202-28%202H0v81h184a10109%2010109%200%2000189-2l-4-2c1-1%2010%200%2017%201l-1-1c-4-2-4-2-2-3l17%205c1%201%201-66%201-148V0h-29c-22%200-28%200-27%201a139%20139%200%2001-3%2040l-2%202c-3%202-8%201-36-4l-13-3c0%201%205%203%2011%204%2019%203%2036%208%2039%2011l3%202h-4l-34-7c-16-3-16-2-16%203l1%204%2010%203%2013%203c3%200%205-2%205-5%200-4%202-4%2012-1l10%202c3%201%203%201%202%205a168%20168%200%2001-5%2036v2c-2%203-8%202-25%200-22-3-24-3-24-2l5%202a473%20473%200%200144%2010v2l-1%207c0%207-1%2011-2%2011l-1%203c0%206-3%2015-4%2016l-2%203-2%202%201%201c2%201-11%201-31-1l-10%201%204%201%2040%204h3l-3%201c-2%202-2%203%202%203l2%201-3%201c-2%200-2%200-2%202v2l-1%204-1%204-3%204-3%204-2%203-1%204-1-3-1-1c0%204-2%202-6-6l-7-10-3-2h7c9%201%2010%200%209-6v-4h-10l-15-1h-5l-1%205v5h6c9%200%209%201%201%204-7%202-7%202-7%206s-1%204-6%202c-3-2-4-2-21-2h-23c-2-2-1%201%202%203%206%205%2013%207%2034%207h13l-1%2025v28c0%202%200%202%204%203%2010%200%2016%202%2017%204%202%201%202%202%200%202s-3%201-3%202c0%202%205%203%2013%203l4%201-4%201h-4l2%202%2010%204%2012%202c7%203%208%202%204%200l-3-3c0-1%206%200%209%202l8%202c7%200%208%202%203%204l-3%201%205%201c8%203%2015%206%2014%208h-1l-14-1c-22-2-29-3-26-6%202-1%202-1-2-2l-8-2-3-2h3l4-1c2-1-2-2-11-2s-19-2-15-3c3-1%202-2-5-2-4-1-7-3-4-3l-2-1c-5-2-6-2-6%203s-1%205-1%200v-4h-5a1138%201138%200%2000-97%206v16a2463%202463%200%200097-8h6v5l-1%205h-9a6383%206383%200%2001-219%2019l1-12a3487%203487%200%20006-78A6965%206965%200%200175%204l1-4H0v68M191%201l26%207%201-4V0h-15c-9%200-14%200-12%201m-91%208c-4%201%200%206%208%209%205%201%206%202%203%203-2%201-7-1-9-3-2-3-3-2-3%200%200%203%202%204%2011%205%2010%201%209-5-1-9-6-2-8-4-3-4%203%200%208%203%208%204l1%201%201-2c0-3-11-6-16-4m22%206c-4%203-2%209%205%2012%207%202%2012%200%2012-5%200-7-11-11-17-7m20%203l1%201%201%205c0%203-1%204-2%204-2%200%200%202%203%202h3l-1-1-1-4v-3l5%205c6%207%207%207%207%202s1-7%202-6l1-1-6-2v1l1%204c0%202%200%202-4-2-4-5-10-8-10-5m129%2030l-1%202c-1%201%200%202%203%203%205%202%205%203-1%202h-7c-2%200-2%200%202%202l4%202h-4l-4-1-1-2c0-3-2-2-2%201-2%208-2%2010%205%2011l11%204c7%203%207%203%207-11%201-12%201-12-4-12l-6-2-2%201m18%2053l-1%205v4l9%201%2012%202c6%202%208%200%209-5%200-4%201-4-15-6a247%20247%200%2001-14-1m-124%2051c-1%201-2%203-1%204%200%202%200%202-2%202h-3l-3%205c-11%2019-39%2013-43-8-1-3-1-3-3-2h-7c-1-2-1-1-1%203%202%2014%2013%2026%2028%2028h60c5-1%2013-6%2011-7l-1-1-1-1v1l-9%201-6%202c-1%201-5%201-5-1l-6-6-5-9c0-3%200-3-3-3l-2-1h3c5%201%208-3%206-7%200-3-6-2-7%200m177%2083v4l22%208v-6l1-4-9-3c-15-3-14-3-14%201M95%20267c-12%200-15%201-15%203l-1%202-1%205%201%204h10c24-2%2023-2%2023-10v-5h-6l-11%201m245%2014l13%203h3l-3%201c-5%201-5%203-1%205%205%201%2010%201%2018-1%209-2%2024-1%2022%201v1l4%202c4%201%204%201%204-1l-1-2-3-1c-1-2-1-2%201-2%205%200%203-3-3-4l-9-2c-6-2-8-1-4%202l2%202-15-2c-15-3-29-4-28-2\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/e10e9/bluetooth-headset-packag.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/7600a/bluetooth-headset-packag.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/d869c/bluetooth-headset-packag.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/38d5d/bluetooth-headset-packag.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/4eefe/bluetooth-headset-packag.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/09625/bluetooth-headset-packag.webp 3000w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/ff44c/bluetooth-headset-packag.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/a6688/bluetooth-headset-packag.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/828fb/bluetooth-headset-packag.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/0ede0/bluetooth-headset-packag.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/3ac88/bluetooth-headset-packag.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/12609/bluetooth-headset-packag.jpg 3000w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/dbd9b2720a15ab575b6b26ff5a356b4d/828fb/bluetooth-headset-packag.jpg"
alt="headphones_1"
title="headphones_1"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></td>
<td align="center"><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/bd53b/bluetooth-headset.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'400\'%20viewBox=\'0%200%20400%20400\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M0%2066c0%2060%200%2068%202%2064l4-1%206-1c5-2%2014%206%2015%2013l1%203%204-3c6-3%209-5%2021-7%2013-3%2036-3%2040%200l8%203%204%202-7%201c-18%205-1%205%2042%200%209-1%2019%200%2024%203%204%202%2013%208%2014%2010l10%201h9l6-5c11-9%2018-11%2039-9l43%204c15%200%2029%2012%2025%2021-5%2010-18%2014-52%2014-21%200-23%200-34%207-12%207-17%208-32%209-15%200-23-1-32-6-17-9-13-8-45-9a120%20120%200%2001-42-5%20181%20181%200%20001%2041l1%2010c1%2011%201%2012-3%209-8-3-9-8-4-10%204-2%204-1%200-25-3-27-4-34-6-35-2-2-3%203-3%209v5l-10%204-9%204-1%202-3%201-3%202c-2%202-7%205-11%205l-4%202-2%201-4%201c-1%202-2%200-1-2%206-12%2016-37%2016-42v-3l-3%203a570%20570%200%2000-22%2021c-2%201-2%202-2%2018v16l4-5%204-4%203%204%205%208c5%206%205%209-1%2012-2%200-4%201-4%203l-2%202c-1%200-1%201%201%203%203%203%204%204%202%204l-4-4-6-6-2-2v173h18l1-4%203-4c2%200%202-1%202-4%200-4%200-4%201-2l2%202c2%200%204%204%204%209v3h370V0H0v66m232-48A8096%208096%200%200033%2062l-7%202v5l-1%205-1%203c0%203%200%203%204%203h4v4c0%204%200%204-2%204-3%200-3%200-1%204s2%205%205%203h3l1%201c3%200%204%204%203%206l-2%202-1%204%201%204%201-1c0-2%207-1%209%200%201%202%202%204%200%204h-1l-1%203c0%202%200%202%202%202l2-2c1-4%205-4%205%200%200%203%200%203%204%202l4%201-1%201c-3%200-2%202%200%203s3%200%205-2l4-3h-4l-4-1c0-2%208-1%208%201v-4l-1-6-1%202-1-1-1-2-1%202-1%201v-2c0-3%202-5%202-3l1%201%201-7%201-10%204-7c3-7%2012-17%2017-20%208-5%2015-6%2042-6a262%20262%200%200044-3c9-1%2026%200%2027%201l42%203c24%201%2028%201%2036%206h2c-1-3-16-9-23-9-6%200-14-4-14-6l-1-2c-2-1%201-4%203-4l3-3c1-4%201-4-2-5-2-2-3-4%200-4%202%200%201-2-1-4l-2-3-4-1c-3%200-4%200-4-2l-1-2v-1l1-1h-8m59%2073c-1%203-1%203-3%201h-2c-1%201-9%203-15%203-3%200-8%203-17%209s-13%208-24%2010l-12%204-4%203%203%201%2012%201%2014%201h14l7%201h8l-7-1-6-1h6l9%202h3l-3-2c-2-1-1-1%201-1l5%201h2c1-1%201-1-1-3l4%201v-1c0-1-1-2-2-1l1-2%204-2%201-1v-2l1%201%202%201-1-2c-1-2%201-7%202-7V90c-1-1-1-1-2%201m7%208c-1%208-4%2016-10%2022-2%203-4%204-4%203h-1c1%202%200%202-1%202l-2%201c1%200%200%202-2%202-4%202-6%202-3%200l3-1h-3c-6%200-7%200-3-1l5-1h-4l-7%201c-2%200-2%200%200%201v1h-2l2%201c1%201%201%201-1%201l-2-2-1-1v9h1l2-1%208-2c16-5%2027-20%2026-36v-5l-1%206m-219%203l1%202v2l1%202%201%202-1%201h-2l2%201v3c0%202%202%201%201-1l2%202%203%201-1-1-1-2%202%201%201%202-1%202%201%201h6l1%202v1l1-1h3l8%201h6l-5%201c-4%201-4%201-1%201h3l-3%201-5%201-4%201%202%201h1c-1%201-1%201%202%201h1l-2%201h-4c-2%200-2%200-1-1v-1l-6-2-1-1c-1%200-4-2-6-5l-5-4%207%208c7%207%2015%2011%2024%2011l5%202h1l14-1a31996%2031996%200%2000130-2c0-2-1-2-9-2h-8l7-1c6%200%207%200%207-2l1-2v2l1%202v-2c0-1%200-2%202-3a171%20171%200%2000-39%201c5%200%206%200%206%202%200%201%200%202%203%202h4c1%201%202%200%202-2l1-2%201%203v3h-60a1169%201169%200%2001-40-2c20%200%2020%200%2020-2%201-2%201-2%201%200s5%202%206-1c1-1%205-2%205%200l3%201c1%201%202%200%202-1l3-1c1-1-7-1-18-1l-34-1h-13l1%204-1%204c-1%201-1%200-1-1l-2-2v-1c2%200%202-1%202-2-1-3%200-3%202-3l2-1c-1-1%201-1%204-1%204%200%204%200%202%201l18%201%2017-1-4-1h4c8-1%2017-9%2019-17l1-3-5%201c-3%200-5%201-8%203-5%206-12%208-23%205-10-2-21-6-22-7l-32-5c-8%200-9%200-9%202m-1%2066l4%203a439%20439%200%20000-2l-4-1m213%201h-7c-3%200-4%200-3%201l-13%201a594%20594%200%200020%200c5-1%209-3%206-3l-3%201m-109%206l-42%201%206%203%2012%206c10%207%2017%208%2030%207h16c5-1%2014-5%2023-11l7-5%202-1h-54M20%20242l-1%202-2%203c-1%200-1%201%202%204l2%205%203%201c4%200%204%200%205-5%200-6-5-12-9-10m12%2014l-2%2011c0%2010%201%2013%205%208l3-2c2%200%204%206%204%207l1%202c2%201%200%206-3%2011-5%207-8%2015-10%2026s-2%2021%200%2021l1%202%201%202%203%203%203%202%203%202c3%203%2011-1%2014-7%201-3%201-3%201%204l-1%208-1%202-5%205v2l2%202%203%201c1%200%202%200%201%201h-1c-2-1-1%202%201%205l2%202%202-2c3-2%204-6%202-6-2-1%200-4%204-5l3-2%206-3c4-1%205-2%205-4l1-2-1-19c0-1-1-3-3-3l-2-3%204-7%201-1%201-2c2%200-2-13-4-15v-3l2%202c3%207%2019%209%2022%204%202-3%201-16-2-21l-1-6-2-6-8%203-18%208-3-4-4-4-1-2c0-1-6-11-10-15-3-4-8-4-10-1l-2%203-2-3c-2-3-5-4-5-1m205%2040c-7%202-11%205-15%2011-5%208-6%2012-1%2016%203%204%204%204%2012%200%206-2%208-2%2019-2%2013-1%2014-1%2015-6l1-5c1-1-2-6-6-9-7-5-18-7-25-5m-134%2034c-7%201-12%203-13%204-4%206%201%2025%207%2026%207%202%207%202%2019-10l10-8c3%200%203-2%200-2-2%200-3-1-3-2v-3l-1-2c0-6-4-7-19-3m61%209c-8%201-12%206-8%2011l2%207c0%204%203%2010%206%2011l6%206c7%206%208%206%2026%203h7c1%201%205-1%205-2l1-1%206-3c6-4%206-4%202-12-2-4-6-7-9-7s-13-5-15-7c-6-6-16-8-29-6m-142%205l1%208%201%206%201%208v2c-2%200-2%201-2%206v8c-1%203%201%203%202%200%202-4%207-2%207%203l4%203%204%203%203%201h2c-1%201%202%204%202%203v-6a293%20293%200%2000-21-41c-2-5-3-6-4-4\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/e10e9/bluetooth-headset.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/7600a/bluetooth-headset.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/d869c/bluetooth-headset.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/38d5d/bluetooth-headset.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/4eefe/bluetooth-headset.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/d4307/bluetooth-headset.webp 2250w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/ff44c/bluetooth-headset.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/a6688/bluetooth-headset.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/828fb/bluetooth-headset.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/0ede0/bluetooth-headset.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/3ac88/bluetooth-headset.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/bd53b/bluetooth-headset.jpg 2250w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/17fc62ea663bf2fa4d5c13bf1e221979/828fb/bluetooth-headset.jpg"
alt="headphones_2"
title="headphones_2"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></td>
</tr>
</tbody>
</table>
<p>最起码,相较于一进地铁就什么都听不清的 AirPods ,用这个我还可以清楚的听见,比如单词的发音,例句的语音。而且夏天带着也不会像头戴式耳机那么闷热!那么你还在等什么,快吃我一记安利!</p>
<p>到这,我才算是解决了通勤导致的不愉快。嘻嘻</p>
<br/>
<h2>感动</h2>
<p>这些天,我常常被问起自己的年龄。说实话,下意识里我真的对自己的年龄没有什么印象,通常会直接回一句:“我也不知道。”</p>
<p>总是在认真想一想之后,才回过神来,发现自己都这么大了,该成熟一些,懂事一些,让自己的心理年龄配得上自己的生理年龄了。</p>
<p>在那么几天上完课的时候,我原地不动,坐在座位上发呆。</p>
<p>想着:到了这个不大不小的年龄,总会有人跟你说,让你出去闯荡闯荡,见识见识社会是什么样的,是多么残酷、多么现实。他们会看着你的眼睛,然后跟你讲:“你应该更成熟一些了”。</p>
<p>但是很少有这样的让人印象深刻的:</p>
<blockquote>
<p> 在<strong>21岁</strong>的年纪,仍有人愿意<strong>待你如孩子一般</strong></p>
</blockquote>
<table>
<thead>
<tr>
<th align="center">💩 自备 Scheißechen 头套</th>
<th align="center">☠️ 课上为了剧情需要 扮演 Pirat</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/d4eda/wearing-shit-head.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 63.92405063291139%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'256\'%20viewBox=\'0%200%20400%20256\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M147%2025v17l1%2046v31h14c14%200%2015%200%2015-2l-14-1h-13V93l-1-44V29h57l57%201v22l1%2042%201%2020h-15c-15%200-21%201-17%202l18%201h16l-1-17-1-74-118-1m120%2033a671%20671%200%200149%2014c4%201%204%201%204%205%200%203%200%204%201%203v-9l-8-2a1404%201404%200%2000-46-11m-59%205l-2%202-4%201-2%201-1%202v10c1%201%201%201%200%200-2-2-2-2-2%200l1%202v2l-4%201c-3%200-7%204-11%2014-5%2010-5%209-1%2011%202%200%203%202%203%203h1c2-2%203-1%203%201l-2%202c-2%201-3%204%200%204v10l-2%2016-1%2018c-2%208-2%207%201%209l2%203c0%203%202%202%2010-1%203-1%204-2%204-4%200-15%203-19%203-6l1%209%201%2011%202%2014v-5l1-18%203%202h4c0-2%201-2%204-2h4v-5c-2-12-3-50-3-51%201-2%201-2%203%200%202%201%202%201%202-1l3-3c4-2%204-1%200-12-3-12-4-15-7-17-3-1-3-1-1-3%202-1%202-1%201-8-2-6-5-13-6-11l-1-1h-7m-79%203l-28%204-17%203v4l1%205%201-4c0-2-2-2%2032-7%2025-3%2028-4%2028-5%200-2-3-2-17%200m180%2044c2%201%203%203%201%203l-7%202c-6%202-9%205-13%2018-4%2012-4%2011%200%2011%207-1%207-1%207%2011s0%2015%203%2020c2%204%203%2012%202%2012v6l-2-3-2-1h-1c-2-1-3%200-2%203s-1%2014-2%2012v1l-1%207c-1%203-1%204%201%205%202%202%203%2015%203%2027%200%204%200%205%202%205l2-1%201-2a450%20450%200%20013-14l-2%201v-2c-2%201-3-1-3-5%200-2%200-3%202-3l2-1h2l2-1c-1-1%200-2%201-3%202-2%203-3%203-9%201-8%203-9%203%200l1%207%201%204c-1%205%200%205%201%201%201-3%202-3%205-3%205%200%2014-2%2014-3%201-2%200-6-3-31v-31l2%203%202%204-1-3c-1-8-1-9%202-10l2-3-2-8c-3-13-4-16-8-19-5-2-6-3-6%200s-7%203-10%200c-3-2-1-4%202-4%205%202%207%202%207%201l-6-3-5-1-4-1%201%201M85%20126l10%201c4%201%200%204-6%205-5%202-9%200-10-3%200-2%200-2-6-1-6%202-10%205-14%2012l-10%2018c-2%203-2%204%204%207l3%203c0%202%200%202%203%200%203-1%203-2%201%207l-2%2019c0%208-1%2013-3%2015-1%202-2%205-4%2029l-2%2014v4h27l1-5c1-7%202-7%203%201l1%204h25v-20l1-20%202-2v-28l-4%201c-8%202-11%200-9-8%200-4%202-5%204-2s3%203%209-3%2010-7%2012-3c3%204%203%201-1-14-4-20-6-25-13-29l-7-2h-3l-6-1-6%201m61%2013l1%201c1%200%202%205%202%2022l1%2023%203%205%203%205c3%200%207-2%208-4%202-4%207-5%2012-2l4%201-1-2c-3-1-4-3-4-8l-1-5h-11l1%205c2%204%202%204%201%206-3%202-7%201-7-1l-2-4-1-3c1-1%200-2-2-3s-2-1-2-19c0-17-1-18-3-18l-2%201m-75%206v4l11%201h9v-2c0-3%200-3-4-3l-10-1-6%201m116%2050l-1%2012-2%204-1%206v5l3%201c4%200%208-1%208-4v-3c1-1%201-1-1-1v-1c2-2%201-9-1-9-2%201-4-1-4-6l-1-10v6m19%209l-1%204%203%203c3%203%202%204-1%202a1036%201036%200%20014%207l5-1%204-1v-2c1-1%200-3-1-5-2-1-3-4-4-6-2-4-2-4-4-3-2%202-3%202-3%201v-2l-2%203M4%20205l-3%201-1%208v8h7c6%200%2010-1%2014-3l2-7c1-5%201-6-1-7H4m384%2012a4523%204523%200%2001-31%2010l-4-1h-2l-1-3c0-1-2-2-4-1s-4%208-2%2010l1%202c0%201-8%205-29%2014l-19%208h43l18-9c43-23%2042-22%2042-30%200-6%201-6-12%200M9%20228l-9%202v5c0%206%201%206%2011%204%206-1%208-3%208-6l2-4c4-3%201-4-12-1m163%2015l-2%201c-2-1-4%203-4%208%200%202-1%203-3%203-1%201%200%201%203%201l5-1h1l3%201c2%200%202%200%201-6l-2-7h-2\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/e10e9/wearing-shit-head.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/7600a/wearing-shit-head.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/d869c/wearing-shit-head.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/38d5d/wearing-shit-head.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/4eefe/wearing-shit-head.webp 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/84ebd/wearing-shit-head.webp 1878w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/ff44c/wearing-shit-head.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/a6688/wearing-shit-head.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/828fb/wearing-shit-head.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/0ede0/wearing-shit-head.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/3ac88/wearing-shit-head.jpg 1260w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/d4eda/wearing-shit-head.jpg 1878w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/78973c1c60a51658e6251df0ff700735/828fb/wearing-shit-head.jpg"
alt="Scheißechen"
title="Scheißechen"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></td>
<td align="center"><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/47311/cosplay-pirates.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 133.54430379746836%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'533\'%20viewBox=\'0%200%20400%20533\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M380%201a449%20449%200%20016%2059c1%201%201-2-1-22-2-36-2-38-4-38l-1%201m17%2068l-8%202a43%2043%200%2000-10%203%20535%20535%200%2000-35%208%201000%201000%200%2000-80%2018%204541%204541%200%2001-87%2018c-5%201-8%204-6%205l1%2024a2452%202452%200%20000%2073l-3%202c-3%202-7%2010-10%2021-6%2021-6%2025%202%2027%204%201%208%201%2011-1%202%200%202%200%202%205a494%20494%200%2000-5%2057l-2%2030c-1%2014-1%2014%205%2017l5%201-1%2011-1%2012a684%20684%200%2001-59-10l2-1c4%200%202-2-4-3-11-2-11-2-7-3l4-3c1-1%201-1%201%201l2%202c2%200%202-1%202-4l-1-5-2%201c0%203-2%203-4%201-2-3-3-5-1-5%203%200%204-2%203-3v-2c2%200%204-3%203-4l-1-1c1-2-1-11-2-11l-1-2-1-2v2c-1%202-6%203-6%200h-4v2l1%202c-2%201-3-2-3-8%202-19%202-25%200-27-7-6-22-5-40%202-6%203-8%203-9%202l-3-1c-1%200-2%200-1%201l-3%201c-2%200-2%200%200-2v-2l-1-4c0-4%200-4%204-4%203%200%204%200%204%202v-3l1-6c1-1%201%201%201%207v9l1-9%201-12c1-2%201-2-1-2a397%20397%200%2001-45%205H0v4c0%203%200%204%202%204v1c-2%200-2%206-2%20111v110h64v-2l-2-10a167%20167%200%2000-13-65c0-5%205-11%2013-15%204-2%205-3%204-4-1-4-1-5%201-2%201%201%201%202%202%201l-2-3c-2-3%200-3%203%200%203%202%203%202%2010%201l10-2c2-1%202-1-5-48%200-3%200-4%203-5h10a1933%201933%200%20005%2047v4h4c14%200%2026%205%2029%2011%202%203%202%203-2%209l-4%2013a395%20395%200%2001-2%2019l-1%209-1-6v-4l-1%208v5c2-3%202-2%202%203%200%204%200%204%2011-6l13-10%204-3%2011%203%2019%205c22%204%2033%207%2031%208-8%203-10%204-10%206l1%201v1c-1%202%200%204%203%204l10-5%203-2%202-3h2l10%203h-2l-1%201%203%201%202-1v-2c1-1%201-1%201%201%201%202%200%202-1%203-2%200-4%203-5%205l-4%204-1%202-6%2010-6%2010h184V422l-1-107v4h-7c-5%200-6%200-6%202l3%201c9-1%2010%200%2010%204v3h-6l-7%201%207%201h6v14c0%2014%200%2014-2%2014a8842%208842%200%2001-141-7c-3%203-2%202-6%2036a438%20438%200%2001-4%2039c2-17%202-16-4-16s-6%200-5-10c1-9%200-17-1-22-1-2%204-4%208-3v-3l-2-3c0-2%200-2%201%200%201%203%203%204%203%202l2-1c1%201%201%200%201-4v-2l1%204v-4l1-3v-4l-1-2v2l-1%202-2-2-1%201c-1%203-2%200-2-4v7c1%202%201%202%202%201h1c0%203-2%203-4%200l-3-13-1-28c0%203%202%204%203%202l4-1c3-1%205-4%206-11%200-4%200-4%203-4%205%200%206-1%201-3-4-1-4-1-1-1%202%200%202%200%201-1-2-1-2-3-2-7s0-5%201-4c1%202%204-2%203-4%200-2%201-3%2010-6l15-3%2012-1a885%20885%200%200192-3h12v5l1-8-1-8v6h-34l-72%202c-43%201-44%201-44-3l-1-3c-1-1-1-5%201-6l-1-4-4-11a299%20299%200%2000-6-13c0-2-8-14-10-15l-5-1c-9-2-10-3-10-7l-2-10-1-11c-1-8-8-17-12-14-1%202-1%202%201%202l2%202h-1c-2-1-7%200-9%202v-1c0-1%200-2-2-2v-1c3-2%200-2-3-1-5%203-7%209-4%2019l2%209h2v-5c2%200%202%201%202%204l1%208v5l-6%202-7%202v-13a2455%202455%200%20010-80l36-8a6372%206372%200%2000183-39l1%2041c2%2079%203%2084%203%2019%201-69%200-71-3-70M1%20272v13l4%201c3%201%203%202%203%207v5H0l3%201%205%201h6c4%200%205-1%203-1-1-1%200-1%203-1h5l-5-1-4-1h8v-8h-5l-5-1H9v-1c3%200%203%200-2-13-5-16-6-16-6-1m202%2082l-4%2015c-2%207-2%208-1%2015v13c-2%207-2%208%201%209l17%202h7l-3-6c-2-6-4-18-4-26l-2-2-2-3-7-24-2%207m56%206a14467%2014467%200%2001-13%20132l20%204a2063%202063%200%200186%2020c-5%200%201%203%2011%204h3l-1-1-2-1a768%20768%200%200037%206V380l-11-1a3684%203684%200%2000-91-8c3%200%202-1-6-2l-9-1%209%201a2680%202680%200%2001105%208c3%200%203%200%203-4v-4h-6a4095%204095%200%2000-135-9M143%20527l-7%202-7%203%2025%201c15%200%2025%200%2024-1l-7-1c-14%200-19-1-19-4-1-3-4-3-9%200\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/e10e9/cosplay-pirates.webp 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/7600a/cosplay-pirates.webp 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/d869c/cosplay-pirates.webp 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/38d5d/cosplay-pirates.webp 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/64908/cosplay-pirates.webp 1080w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/webp"
/>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/ff44c/cosplay-pirates.jpg 158w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/a6688/cosplay-pirates.jpg 315w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/828fb/cosplay-pirates.jpg 630w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/0ede0/cosplay-pirates.jpg 945w,
https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/47311/cosplay-pirates.jpg 1080w"
sizes="(max-width: 630px) 100vw, 630px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/ba0ca775874c9d0d971180c4fdf9ac4c/828fb/cosplay-pirates.jpg"
alt="Pirat"
title="Pirat"
loading="lazy"
style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;"
/>
</picture>
</a>
</span></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th align="center">🎩 即将讲圣诞节那课之前 给我们准备了 Hütchen</th>
<th align="center">✅ 在这里盖下了人生第一个火漆印章 成就Get</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; "
>
<a
class="gatsby-resp-image-link"
href="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/98bb3a8c81ba7d1d432687b650341525/3acf0/magic-hat.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 75.31645569620254%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\'http://www.w3.org/2000/svg\'%20width=\'400\'%20height=\'300\'%20viewBox=\'0%200%20400%20300\'%20preserveAspectRatio=\'none\'%3e%3cpath%20d=\'M0%20150v150h140l-3-2-4-2-23-14a246%20246%200%2001-31-30c-2-2-4-5-3-6l-1-1c-1%201-7-6-7-9l-1-1c-3-1-15-26-19-38-11-32-8-60%207-79%2014-18%2030-25%2054-25%208%200%2011-1%2012-2s2-2%201-3-1-1%201-1h2l-1-1c-2-1-5-5-5-8%200-1-1-2-3-2l-1-1-3-6-4-4h-2c-2%200-2-1-2-4l-2-2-2-2-1-2c-3-1-2-4%201-5l2-2h-2l-5%202c-4%200-5%200-4-4h-4c-2-1%200-3%203-3l3-1c0-3%203-3%205-1l4%202c1%200%202%201%202%203l2%203%201%201-1%201c-2-1-3%201-1%203l3%201c2%200%204%202%202%203-2%200%200%204%203%205l3%201c-2-3%202-2%206%201%203%202%203%203%202%204s-1%201%201%203l2%203%201%201%201-1h1v1l3%203%203%202c0%202%203%205%204%204l-1-2v-1l2%201a228%20228%200%200027%2029c5%208%207%2010%2010%208%203-1%2010%201%209%202l-2%204c-1%203-2%203-6%203l-4%201h-2c-1-2-10%200-14%203-4%202-6%203-11%203-2%200-2%200-2%203v2l-1-1-4-1-5%201c-1%201%200%201%201%201l3%201%201%203-1%202c-1%200-2%201-1%203l-1%203v1c0%203-2%204-8%204l-4%201c1%202-2%203-4%202h-1l-1%201-2-1%202-1%201-1v-2l1%201h2l-1-2c-2-1-8%201-8%204l-2%201-3%203c0%203-3%206-3%204h-2c-1%201-1%202%201%203l1%202c-1%201%200%201%201%201%203%200%202%202-1%202-2%200-3%200-2%201l2%201h1l1%202v2l1%205%201%201h1c0%202-1%202-4%201-3%200-3%200-2%201l5%201c2%200%203%201%203%202v1c-2-2-12-2-12-1l-3%204-3%204-1%201-1-1%201-2%202-4c1-5-1-9-4-7h-1v-3l-1-1h1l1-1-7-1-7-1c-1-1-1-1%201-1h1c-1%200-1-1%201-2%201-1%201-1-1-2-5-2-9%200-9%205v6c-1%202-1%203%201%204%202%202%200%204-3%204l-2%201h-2l-2-1-6-3c0-2%202-1%202%200l1-1c1-2%201-3-2-5-4-3-6-3-6%202l-1-2-2-8-1-2c-2-2%201%2016%207%2030%207%2019%2015%2032%2028%2046%2013%2015%2026%2026%2036%2032%206%203%207%202%201-1l-4-5c0-3%202-3%203%200%201%201%202%202%203%201%202%200%202%200%202%202-1%202%207%208%2012%209l3%201h-8l2%201%209%204%2011%204c3%200%203%200-1-2l-3-2v-1c0-2-5-3-5-2l-2%201%201-2c1-1%201-1-1-3-2-1-3-3-3-5l-1-2-1%201h-1v-3l-2-6-4-2-3-3c-2%200-2-1-2-3l-1-4c-2%200%200-2%202-2s2%200%201-1-1-1%201-1h3l-3-1c-2-1-2-1%200-3v-3c1-2%202-3%203-2%202%200%202%200%201%201s-1%201%201%201%202%200%202%202v2l1%201%203%204a1850%201850%200%200018%2011l1-1%202-1c2-2%204-3%204-1l-3%203c-4%203-4%205-2%205l1-1v-1c1%200%207%206%206%208l1%201%202%201c0%202%204%205%206%204%201%200%208%207%207%208h-1c-1-1-2-1-2%201-1%202%202%204%203%203v-2c2-2%205-3%204-1l2%201h2c1%201%202%202%205%202%204%200%204%200%203-2l-2-2h-3c-2-1-2-1-1-2%202-2%202-2%200-3s-3-3-3-5-1-2-3-2l-3-3c-1-2-2-3-4-2h-2l-1%202h-1c0-3-3-8-5-8-1%200-1-1%201-2%202-3%202-4%201-6h-5v-5c-1-2-1-2-3%200h-1c0-1-1-2-2-1v-4h-2c-1%202-2%201-1-1s0-3-1-5l-1-3-2-2-1-2-1-2-1-3c1-1%206%202%208%205l4%204c3%200%206%204%204%205l1%203%202%203%201%202%201-1-1-2v-1l3%202c1%202%201%201%201-4%200-6%200-6-3-8-5-3-7-6-6-6l3%201c4%204%205%201%201-3l-2-4v-1h-2l-1-1h-1l-1%201c-2%200-1-3%201-4l1-3c0-2-3-1-3%201l-2-2-4-5c-3-1-3-1-1-2%203%200%202-2-1-2-2%200-2%200%200-1s3-1%205%201l3%202v-3c1-1%202-2%201-3l1-6c0-3%200-3-1-2l-1%206v5l-3-3-3-1c-1%201-5%202-7%201-3-2-1-5%203-5%203-1%203-1%203-5-1-4-1-5-4-3-3%201-3%201-4-1l-3-2%201%202c1%202%201%204-1%203l-2%201c-1%201-6-3-6-6v-2h2l-1-1-1-2%201-2%201%202%202%201%201%201c0%202%207%202%207%200l3-1c1%200%202%200%201%201l1%201c0-1%202%200%203%202s1%202%202%201v-3l-2-2-3-4c-2-2-2-2-2%200v2l-1-4-1-2-1-1%202-1%202-1%202-1%204-2c4-2%205-2%203%201l-2%201-2%201c0%201-1%202-2%201v1c1%202%204%203%203%201-1-1%200-1%201-1%204%200%2011-7%2011-10%200-2%200-2%201-1h3l-7-7%201-2c2-2%204-3%205-2%203%200%205-2%203-4-1-2%205-5%207-4h1c-1-3%200-2%203%201l1%203c-3%203%201%2010%208%2014%203%201%209%2011%209%2014l2%202c2%200%201%200-2-7-4-9-7-12-12-16-5-5-5-10%200-9%201%201%202%200%202-1h3l2-1%202-1c2%201-1%204-3%204l-1%201c0%202-1%202-2%202h-1l2%201%202%202h1l2%202c2%203%202%203%203%202%202-4%209%200%209%205l1%204%201%201v2l1%202c-1%201-1%201%201%201l2-1-1-1-2-8%204%204%205%204c2%200%202%200%201%202v3c0%202%200%202%204%201%202%200%203%200%202%201s0%205%202%205v1c-2%202-3%202-3-1%200-1%200-2-2-1v4c-1%201%200%201%203%201%205%200%206%200%208%203l2%202c0-2%207%206%208%209l21%2026c6%207%207%209%207%2012h1c0-2%201-2%202-1l-1%202v2c0%202-2%205-4%205-1%200-1%201%201%203%201%202%201%202-1%204l-3%203c-3%200-3%202-1%204v2c-3%202-4%202-4%201l-1-1-1%203c0%203%200%203-3%203l-3%201%201%201%204%202c2%202%202%202%201%205s-4%202-4-2l-1-3-1%202-1%202-2%202c0%203-5%203-5%200h-1c-2%202-4%203-4%201l-1-1-1%201v5c0%204%200%204-2%202-1-2-3-3-4%200-1%204-5%207-5%204l2-2v-1c-2-1-6%201-8%203-1%202-1%202%205%202s7%200%207-2l2-2%202%202c0%202%201%202%2026%202h25v-3c0-5%204-8%207-6s4%201%203-1c-3-4-1-12%204-14%203-2%203-1%200%202-4%204-5%205-3%2010%200%202%200%202%201%201s1-1%201%201c0%205%207%208%2010%205%202-2%203-2%203-1%200%202-4%204-7%204l-2%201%206%201c7%200%207-1%200-17l-1-3-1-1-1-2-1-2c-2%200-2%200-1-1%202-1%202-2%200-7-2-10-2-11%206-15s10-6%2010-10v-6c1-4%201-5-1-7-2-3-1-9%202-6%201%201%202%203%201%204%200%203%201%205%202%203h1v3l5%206%204%204%202-3a196%20196%200%200131-16c1-2%209-5%2010-4l2%201%204%205c2%203%202%204%203%203%200-2%201-2%202-1l1%2037%201-115V0H132l-4%208c-7%2010-6%2015%203%2025l4%205-4%205-3%205-6-6A1099%201099%200%200189%206l-5-6H0v150M189%202l-11%202a628%20628%200%2001-17%2026h1l2-1c2-2%202-2%203-1h1l4%202c4%203%204%202%200-3-4-4-3-5%202-1l3%203%203%202%202%203h1l1%201v3l-1%202-1%203c-2%202%200%203%202%200%202-2%206%200%205%202l1%201c1-1%202%200%202%201%201%202%203%201%203-1l2%201c2%202%206%203%204%201h2c3%201%203%203%200%203h-2v4c4%200%206%202%205%204l-1%204v2l-3%203-2%202-1%201c1%202%200%203-2%205l-1%204v1l-2%203c0%201%202%200%204-3l6-5v-2c0-2%201-4%207-8%209-7%2027-25%2026-26l-2-1-1-1c1-2-2-5-7-8-3-2-4-4-3-4%202-1%201-2-16-21-4-4-3-4-19-3m37%205c6%208%209%2010%2010%208s2%200%203%204l1%201c1-1%201%200%201%201l-1%201h-1l2%202%201%201%202%203%203%202%201%201%202%201v2h2v2l1%201%201%201%202%201c2%201%207%201%207-1%201-1-2-7-5-11l-5-7-9-11-4-5h-9l-8-1%203%204M59%2013l3%203c2%201%203%202%202%203l1%202%206%202c1%201%202%202%202%205l1%205c2%202%203%200%202-4%200-2%200-3%202-3l3-2c1-1%201-1%201%201l-1%203c-2-2-2%201%200%203%204%203%204%205%200%205l-2%202h16c3%200%202-2-2-5l-3-2-2-2c-1-1-2-2-1-3l-2-2v-2l-4-4c-5-4-7-5-7-3h-3c-1-1-3-2-5-1l-3-1h-4m81%2038c-5%205-5%205-2%208s5%203%207%201l3-1v-2c3-1%202-2-1-6l-4-4-3%204m136%207l-13%206-11%206c-4%202-4%203%201%203%202%200%203%200%204%202%200%202%202%203%203%200s2-1%200%202c-1%204-1%204%202%204%202-1%202-1%202-3l2-2c3%200%205-3%204-5-2-2-2-5%200-6v-3l6-1%204-1h4c5-3%200-4-8-2m-120%200l-5%202-5%201-2%201%203%203c2%202%202%202%204%201s4-1%204%201l-1%201c-3%200-3%202%200%203%204%203%205%202%202%200-1-2-1-2%201-2%203%201%205-1%202-2-2-1-1-3%201-3s2%200%201-1l-1-4c0-1-1-2-4-1m-58%2046l4%203%204%204c1%203%200%202-2%200l-3-2-3-2-5-2v2l2%202-3-2-3-2c-1%201%201%206%202%206l5%204%204%203c2%200%201-2-1-3s-2-1-1-2c2-1%205%200%205%201%200%203%200%204%204%206h4l6%203c2%201%205%201%205-1l2-1v2l3%202%203%201%202-1c0-2%203-2%204%200l3%201%203%202h8l-2-1c-2%200-2%200-1-1h5l-2-3c0-2-6-2-6%200l1%201h-3c-3%200-3-2%201-2%201-1%202-1%201-2h-2l-4%201%201-2h-1c-1%200-2%200-1-1v-2h-4c-5-1-5-1-3%201l3%202h-3l-3-1c-2%200-1-3%200-3l-2-2-4-3h-2l-6-2c-5-3-7-3-5%200%203%202%202%204%200%202l-2-4c0-2%200-2-1-1-1%202-1%202-1%200l-3-2-3%201m175%205l1%201c2%200%202%202%200%204-1%202%204%208%207%208%201%200%202%201%201%202l1%202c1%200%2012%2014%2014%2019l3%205%207-8c0-3-9-16-16-24-2-3-3-3-7-3s-4%200-3-2c2-2%202-3%200-4h-8M71%20124c-2%200-2%200%200%202%201%201%202%203%201%204%200%201-1%201-2-1-3-3-8-6-8-4l2%202%203%204c2%204%202%206-1%203l-2-2c-1%201-1%200-1-1l-2-2c-1%200-2-1-1-2%201-5-3%201-6%209l-2%204%203%203c5%204%202%2012-3%208h-2c-1%202%201%204%202%203%202-1%203%201%202%203v1c2%200%204-1%204-3%201-4%205-5%2010-3%202%202%204%202%205%202v2h3c-1-1%200-4%202-4%201%200%201-1-1-1l-2-1%202-1c2%200%202-1%200-2l-5-3-3-1-1-1-1-2v-4h6c3%200%204-1%201-3-1-1-2-2-1-3h1c1%202%203%201%203%200-1-1%200-2%201-2l1-1-3-1c-1%201-2%201-3-1l-2-1m88%2011v2h-2l-2-1%202%202c4%203%202%209-2%208-3%200-4-2-3-3%201-2-3-1-4%201l-3%201-2%202-2%201-1%201%201%201%203%202%203%204%202%204h-2c-1-2-1-2-2-1l-2%201c-1-1-2%200-2%201%200%202%201%203%204%203%206%200%208-2%207-5l-1-3-2-2c-2-4%202-2%204%202%202%203%205%206%206%205l-2-3c-4-5-4-8%201-9%203%200%2011-5%208-5l-1-2-1-2-2-2%202-1%203%201v1c-1%202%201%204%203%203%200-1%202%200%203%202%203%202%203%202%204%201s1-1%202%201%201%202%202%201%202-2%203-1l2-1%201-1c2%200%207-5%205-5h-2l-3-1-3-2c-3%200-3%200-3%203s0%203-7%202c-4-1-6-3-3-3l1-1h-3l-4-1c-1-2-5-3-6-1m-30%209c-2%200-4%202-5%204-3%202-7%203-5%201%200-1-4-2-5-1l1%201%201%202c0%203%205%203%208%201%202-2%203-1%202%201-2%203-1%205%201%202l2-1c0%203%202%202%203%200%202-2%202-3%200-3l-4-1c-1%201-1%201-1-1l1-2h1l2-2c1-2%201-2-2-1m-81%202l-3%2017c0%204%200%204%201%202%201-3%201-3%201%202%201%205%204%208%208%2010%201%201%202%201%201%203l1%201c1-1%202%200%202%201h1l-1-4c-3-3-2-4%204-4%204%200%205%200%206%202l2%201c1%200%202-2%200-2l-1-4c-1-5-2-7-3-4-2%201-5%201-5-1l-1-1-4-3-4-3-2-1c0-2-2-1-3%201v-13m290%206l1%201v1c-2%201-2%201%201%202%202%201%202%202%202%208l1%207%201%201c0%202%209%2011%2011%2011l1%201c0%202%209%207%2011%207h2l2%201h2l2%201h2a482%20482%200%2000-39-41m-157%2018c-1%205-1%206%201%206l2%201%201%202-2%202c-4%201-4%203-1%205l2%203%202%203%201%203c-1%202%200%203%201%202%202-1%206%200%206%202l2%201c2%200%202%200%202-2-1-2%201-3%203-2l5%206%204%204%203%203c0%202%201%203%202%203s1%201-1%201l-1%202h2c2-2%202-2%202%200v3l-1%201c0%202%202%200%206-6l4-7v-1l-2%201h-1c0-2%200-2-1%200s-3%203-3%200l-1-1v5c0%203%200%203-1%202-3-3-2-6%200-9l2-2-3-2-3-3-1-2c0-2-2-8-3-7l-2%202c-2%200-2%201-1%201l3%202c2%202%203%204%201%203h-1c0%202-2%201-4-2l-3-3-1%201c1%201-2%203-4%203l-2-1%201-1%201-1-1-2c-1%200-1-1%201-1%202-2%203-2%202%200%200%202%202%201%203%200%202-3%200-7-3-9l-2-4c0-1-3-3-5-3l-3-2-3-2-3-1-2%203m156-1l-3%204c-3%203-9%204-10%202l-2-1v2l1%202c-1%201-2%201-3-1-1-1-1-1-1%201l-1%202-2-2-1-1-2%203c-1%201-1%201-1-1v-3c-3%200-6%2010-4%2012v1l-1%204v2l16-1c11%200%2015%200%2014%201l2%201h3c1-1%201-11-1-20%200-4-4-10-4-7m-92%205l-1%202a363%20363%200%200125%2027%20895%20895%200%200030%2036l7%209%208-4c9-5%2010-6%207-9l-2-4c0-2-3-5-7-10a710%20710%200%2001-25-24l-4-1h-2c0%202%200%202-5%201l-4-2h-1l-2-1c0-1-1-2-2-1-1%200-2%200-1-1l-2-3-3-2v-1c-1-1-2-2-3-1l-1-1-2-4-4-4v-2c-1-2-4-3-6%200M75%20184c-2%201-1%205%201%207l1%205c-1%201-1%202%201%202h7c4%201%206%200%208-1%204-3%204-6%201-5-2%200-3%200-3-2l-1-2c-2%200-2-1-2-2s-1-2-3-2H75m106%2018l-3%201h-2l-1%202%203%201h2c-1%202%202%206%204%206l1%203-1%204c-2%201-1%202%201%202l2%201c-1%201%201%202%202%201h3v5c1-1%202%202%201%203l1%201v2c0%203%203%203%206%201%202%200%203-1%203-2h5c0%202%201%200%202-2l-1-2c-2%201-2%200-1-2v-7l-1%203-1%203v-3c0-3%200-3-1-2l-2%202-2%204-4%205-1%201%202-6%203-5-3-2-3-4c1-1%200-1-1-2l-2-2-2-1v-1c2-1%202-3%202-4-1-3-4-4-5-2s-3%200-3-2h-3m157%204l-5%206-1%204%204%205%207%204h2l7%201-10-24-4%204m-240%204c-5%201-4%2012%202%2017%202%203%205%204%206%202l4-1%204-2%203-2%202-2h-10c-5%200-6%200-5-1v-4c-2%200-3-3-2-4s0-4-1-4l-3%201m-35%206c0%202%204%208%205%208l1%201%201%201%203%202%202%201c0-2%202-1%205%201%203%203%204%202%204-3%200-4-1-5-3-5l-4-2-5-2-6-1-3-1m55%2020v2l-2%203v2l2%203c1%203%208%202%208%200l1-3v-3l-2-3-2-1h-5m-13%2010l-1%201c-1-1-11%209-11%2010%200%205%205%203%207-1%201-2%206-2%206-1l-2%201-2%202-2%202c-3%201-3%202%201%206%203%204%206%205%208%203l1%201c2%203%204%203%204-1l1-6%202-3%201-1c1%200-2-6-5-9-4-4-7-5-8-4m215%2026l3%207c1-1%201%200%201%202l3%209%202-2h4l-1-2-1-4c0-1%200-2-1-1l-1-1-1-2-2-3-1-3h-5\'%20fill=\'%23d3d3d3\'%20fill-rule=\'evenodd\'/%3e%3c/svg%3e'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="https://cdn.jsdelivr.net/gh/muxinqi/blog@v-1610289478273/static/98bb3a8c81ba7d1d432687b650341525/e10e9/magic-hat.webp 158w,