-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
1042 lines (1025 loc) · 98.6 KB
/
index.xml
File metadata and controls
1042 lines (1025 loc) · 98.6 KB
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" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ECWUUUUU</title><link>https://ecwuuuuu.com/</link><description>Recent content on ECWUUUUU</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 08 Apr 2026 18:10:00 +0100</lastBuildDate><atom:link href="https://ecwuuuuu.com/index.xml" rel="self" type="application/rss+xml"/><item><title>手动启用 Codex Computer Use 插件</title><link>https://ecwuuuuu.com/post/enable-codex-computer-use-plugin-outside-us/</link><pubDate>Thu, 16 Apr 2026 22:00:00 +0100</pubDate><guid>https://ecwuuuuu.com/post/enable-codex-computer-use-plugin-outside-us/</guid><description><h2 id="背景">背景</h2>
<p><a href="https://openai.com/index/codex-for-almost-everything/">Codex 随着新版本推出了 Computer Use 功能</a>,但它并没有在 UK 和欧洲地区正式开放。</p>
<p>具体表现是:打开 Codex 的设置页面,在 <strong>Computer use</strong> 一栏里会直接显示 <strong>Computer Use plugin unavailable</strong>,因此无法宣传里直接安装和使用这个插件。</p></description></item><item><title>Wicklow</title><link>https://ecwuuuuu.com/photography/wicklow/</link><pubDate>Thu, 26 Feb 2026 16:53:20 +0800</pubDate><guid>https://ecwuuuuu.com/photography/wicklow/</guid><description><p>I’d never imagined taking one of those pack-up-and-go trips—until it happened. A close friend came to visit me in Ireland, rented a car, and really wanted to drive somewhere a bit farther out. His first proposal was Galway. It’s only about a two-hour drive, but winter weather here is always a gamble, and no one really knows what conditions will be like once you get there. In the end, I suggested hiking in Wicklow Mountains National Park instead.</p></description></item><item><title>关于智能体的实验 1.5 - 讨论式多智能体系统</title><link>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-1.5-cn/</link><pubDate>Thu, 29 Jan 2026 22:50:00 +0000</pubDate><guid>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-1.5-cn/</guid><description><h2 id="tldr">TL;DR</h2>
<p>这篇文章关注我在 SciRead 中实现的&quot;讨论式多智能体&quot;。不同于单智能体的线性推理,这个系统让四个具有不同分析视角的&quot;专家&quot;通过&quot;洞察生成 → 提问 → 回答 → 收敛评估 → 共识整合&quot;的循环讨论论文,最终产出显式记录推理过程、标注分歧、量化共识度的报告。我会说明这种设计的动机、其核心架构、以及相比单智能体方案的权衡。</p></description></item><item><title>Authentik - OIDC M2M 认证</title><link>https://ecwuuuuu.com/page/gist/authentik-oidc-m2m-authentication/</link><pubDate>Fri, 02 Jan 2026 12:30:00 +0000</pubDate><guid>https://ecwuuuuu.com/page/gist/authentik-oidc-m2m-authentication/</guid><description><p>FRP 是一款非常流行的反向代理工具,除了常规的密钥认证方式外,FRP <a href="https://gofrp.org/zh-cn/docs/features/common/authentication/">也支持 OIDC 认证</a>。</p>
<p>在使用 Authentik 作为 OIDC 提供者时,FRP 作为 M2M 客户端应用程序进行认证的配置如下:</p>
<p>在 Authentik 中创建一个 OIDC 应用和对应的 Provider。</p></description></item><item><title>Authentik - 禁止外部用户进行 SSO 注册</title><link>https://ecwuuuuu.com/page/gist/authentik-ban-external-user-for-sso-enrollment/</link><pubDate>Wed, 24 Dec 2025 18:00:00 +0000</pubDate><guid>https://ecwuuuuu.com/page/gist/authentik-ban-external-user-for-sso-enrollment/</guid><description><p>默认情况下,注册了 Social Login Source 并绑定到 Default-identification-stage 的 Authentik 实例允许任何拥有该 Social Login 账户的用户注册为 Authentik 用户。</p>
<p>虽然这个过程,default-source-enrollment 中的 <a href="https://docs.goauthentik.io/add-secure-apps/flows-stages/stages/user_write/">write stage</a> 默认创建的是 External 用户,他们默认是无法访问 Authentik 应用列表界面的 (<a href="https://github.com/goauthentik/authentik/discussions/11658#discussioncomment-11238293">source</a>)。</p></description></item><item><title>Authentik 教程系列:社交登录</title><link>https://ecwuuuuu.com/post/authentik-tutorial-6-federation-and-social-login/</link><pubDate>Sun, 21 Dec 2025 22:19:29 +0000</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-6-federation-and-social-login/</guid><description><p>今天我们来讲讲<strong>社交登录</strong>(Social Login),也就是允许用户使用第三方账号(如 Google、GitHub、Facebook 等)登录到我们的 Authentik 系统中。随着教程的深入,要实现这些功能不再有简便的系统预设/流程可用,会涉及:
<strong>Source 的概念,Flow 流程的详细配置,以及 Policy 策略的使用。</strong></p></description></item><item><title>找到人工客服=把问题解决?</title><link>https://ecwuuuuu.com/post/looking-for-human-customer-service/</link><pubDate>Thu, 11 Dec 2025 23:40:00 +0000</pubDate><guid>https://ecwuuuuu.com/post/looking-for-human-customer-service/</guid><description><p>这几天看到了<strong>差评</strong>发布的公众号文章:<a href="https://mp.weixin.qq.com/s/O3KiHjm8ywSGve9n7q4EqQ">找到人工客服的最好方法,除了发疯还有什么?</a>。里面提到了(摘要,非原文):</p>
<blockquote>
<p>公司为了节省成本,越来越多地使用机器人客服和外包客服,并将他们放在客户服务的第一线。结果是用户很难找到能解决问题的高权限人工客服,问问迟迟无法解决。</p></description></item><item><title>关于智能体的实验 1 - 三种阅读理解学术文献的智能体框架</title><link>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-1-cn/</link><pubDate>Wed, 03 Dec 2025 17:00:00 +0000</pubDate><guid>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-1-cn/</guid><description><blockquote>
<h2 id="tldr">TL;DR</h2>
<p>本文介绍了三种不同复杂度的智能体系统设计:单体 Agent、ReAct Agent 和协调多智能体系统。每种设计都有其适用场景和优势。</p>
</blockquote>
<h2 id="单体-agent-single-agent">单体 Agent (single-agent)</h2>
<p>我打算实现的第一个智能体系统是一个单体智能体,直接复刻我之前在 Cherry Studio 中实现的效果:让一个智能体阅读一篇学术文章,并生成一份详细的报告。使用 PydanticAI 实现 Agent 很简单。创建对象时定义好使用的模型,系统提示词和任务指令,调用 <code>run</code> 方法传入文章内容就可以了:</p></description></item><item><title>关于智能体的实验 0 - 学术文献阅读理解</title><link>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-0-cn/</link><pubDate>Wed, 03 Dec 2025 11:11:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/agentic-academic-literature-understanding-0-cn/</guid><description><blockquote>
<p>本文记录我在尝试构建智能体和多智能体系统的过程,探索其应用潜力。这会是一个系列文章,这一章节关注的是智能体的构建与多智能体动态交互行为的实现。最后会给出各类学术文章生成的报告示例。</p></description></item><item><title>Blog Theme: ecwu-theme</title><link>https://ecwuuuuu.com/post/blog-theme-ecwu-theme/</link><pubDate>Sun, 26 Oct 2025 21:00:00 +0000</pubDate><guid>https://ecwuuuuu.com/post/blog-theme-ecwu-theme/</guid><description><h2 id="introduction">Introduction</h2>
<p>Every developer who maintains a blog eventually faces the question: <strong>Should I use an existing theme or build my own?</strong> For me, this wasn&rsquo;t just about aesthetics - it was about creating the perfect reading experience for both technical tutorials and personal reflections.</p>
<p>After years of blogging on various platforms and using different Hugo themes, I found myself constantly wanting just one more feature, a slightly different margin, or better typography for code blocks. Rather than continuing to patch someone else&rsquo;s theme, I decided to build <strong>ecwu-theme</strong> from the ground up.</p></description></item><item><title>探索爱尔兰巴士实时交通数据</title><link>https://ecwuuuuu.com/post/ireland-gtfs-api/</link><pubDate>Sun, 24 Aug 2025 12:00:00 +0100</pubDate><guid>https://ecwuuuuu.com/post/ireland-gtfs-api/</guid><description><p>直到最近才发现<a href="https://www.nationaltransport.ie">爱尔兰交通管理局</a>有一个公开的交通数据。之前我是在使用 <a href="https://transitapp.com/">Transit App</a> 来查询时刻表和车辆位置(也是才知道 TFI Live 也可以看到很详细的数据),但有时候这些应用并不能完全满足我的需求(可能只是我个人想要更多的数据,但它们本身是相当不错的软件)。</p></description></item><item><title>How I Rebuilt a 2018 Project in 2025</title><link>https://ecwuuuuu.com/post/revisit-uiccourse/</link><pubDate>Sat, 05 Jul 2025 14:10:00 +0100</pubDate><guid>https://ecwuuuuu.com/post/revisit-uiccourse/</guid><description><h2 id="prelude-the-django-and-jquery-days">Prelude: The Django and jQuery Days</h2>
<p>In 2018, I was self-studying the Django web framework for a college course. To apply what I was learning, I decided to build a project to solve a real problem: our school&rsquo;s course information system.</p>
<p>All official course information was contained within a single, large PDF file. And course details contains in more individual handbooks PDF files. Finding a specific course was a time-consuming process that required extensive scrolling and text searches. I believed I could create a more efficient and user-friendly solution.</p></description></item><item><title>Cinestill 800T & Expired Kodak Portra 400</title><link>https://ecwuuuuu.com/photography/new-film-stock-new-thoughts/</link><pubDate>Sat, 18 Jan 2025 18:00:00 +0000</pubDate><guid>https://ecwuuuuu.com/photography/new-film-stock-new-thoughts/</guid><description><p>My New Year trip to Shenzhen was another photography trip. Alongside catching up with friends on a tight schedule, testing my first roll of CineStill 800T became a side mission. I also brought along a roll of expired Kodak Portra 400 and ILFORD HP5 Plus, as they had been sitting in my fridge for quite some time.</p>
<h2 id="cinestill-800t">Cinestill 800T</h2>
<p>The film isn’t a brand-new release; I heard about its big name from lots of film photograph KOLs at least 3 years ago. This film is basically Kodak&rsquo;s Vision 3 5219 (500T) movie film. A distinctive feature of movie film is it comes with a Remjet layer, a black carbon coating designed to prevent light halation. which is a layer of black carbon coating (calls remjet) on the back of the film to prevents light halation. Traditionally, the film with a remjet layer require one extra step during develop process to remove it.</p></description></item><item><title>服务器新装 GPU 的容器化配置笔记</title><link>https://ecwuuuuu.com/post/gpu-container-setup-note/</link><pubDate>Sun, 24 Nov 2024 14:54:00 +0000</pubDate><guid>https://ecwuuuuu.com/post/gpu-container-setup-note/</guid><description><h2 id="前言">前言</h2>
<p>最近需要给一台以前配置的 CPU 服务器装上 GPU,这台机器之前已经配置好了存储和基于 Docker 和 JupyterHub 的计算环境。这里就记录一下装上 GPU 后的配置过程。本文只涉及系统和软件层面的调整。也就是新增的显卡已经安装到设备内,且设备已经能够被系统识别。可以通过 <code>lspci | grep &quot;NVIDIA&quot;</code> 命令查看设备是否被识别。</p></description></item><item><title>Guangzhou, Shenzhen, Hong Kong, and Kodak Gold</title><link>https://ecwuuuuu.com/photography/gz-sz-hk-and-kodak-gold/</link><pubDate>Thu, 03 Oct 2024 23:59:00 +0100</pubDate><guid>https://ecwuuuuu.com/photography/gz-sz-hk-and-kodak-gold/</guid><description><p>After completing my master’s degree following the COVID-19 outbreak, I transitioned into full-time work. Life became busy, and I gradually set aside my film camera. Recently, I purchased Kodak Gold 200 in 120 format—Kodak’s latest film—during a visit to Guangzhou (新丽照相器材商店). I had planned to capture a few moments before leaving China. I took the film along on a three-day trip to Guangzhou, Shenzhen, and Hong Kong. Eventually, I had the film developed at GZNow Lab in Guangzhou.</p></description></item><item><title>Authentik 教程系列:服务的迁移</title><link>https://ecwuuuuu.com/post/authentik-tutorial-5-setup-migration/</link><pubDate>Sun, 08 Sep 2024 22:20:00 +0100</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-5-setup-migration/</guid><description><div
class=" flex px-4 py-3 rounded-md bg-gray-100 dark:bg-slate-800"
>
<span
class="text-primary-400 pe-3 flex items-start mt-0.5"
>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pen-line-icon lucide-pen-line"><path d="M13 21h8"/><path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/></svg>
</span>
<span
class="dark:text-neutral-300"
>
<div style=""><strong>因为迁移涉及数据的操作,操作前请提前做好研究,做好备份!!!</strong></div>
</span>
</div>
<h2 id="引入和备份操作">引入和备份操作</h2>
<p>这应该是 Authentik 系列的最后一部分,最近暂时没有时间录制视频所以先记录成文字。生产环境的 Authentik 的需要迁移,正好在几天折腾了一下,搞清楚了流程。</p></description></item><item><title>Authentik 视频教程 - 合集</title><link>https://ecwuuuuu.com/post/authentik-tutorial-video/</link><pubDate>Thu, 08 Aug 2024 17:11:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-video/</guid><description><p>我制作的的 Authentik 系列教程已经更新了 11 集。目前已经覆盖了部署安装,通过各种协议接入应用,具体的高级功能和流程的配置方法。目前在这里做一下汇总。</p>
<table>
<thead>
<tr>
<th style="text-align: center">No.</th>
<th style="text-align: left">Topic</th>
<th style="text-align: center">BV</th>
<th style="text-align: center">YouTube</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">1</td>
<td style="text-align: left">介绍、安装和配置</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1pm41167WK">BV1pm41167WK</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=KdprVtJmfrs">KdprVtJmfrs</a></td>
</tr>
<tr>
<td style="text-align: center">2</td>
<td style="text-align: left">配置反向代理(Traefik 为例)</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1VE42137Vi">BV1VE42137Vi</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=7eUDOPYv15c">7eUDOPYv15c</a></td>
</tr>
<tr>
<td style="text-align: center">3</td>
<td style="text-align: left">OAuth 协议应用接入 - 以 Gitea 和 Grafana 为例</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1QC41157pX">BV1QC41157pX</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=_KGznY5dE90">_KGznY5dE90</a></td>
</tr>
<tr>
<td style="text-align: center">4</td>
<td style="text-align: left">SAML 协议应用接入 - 以 Cloudflare Zero Trust 和 GitLab 为例</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1um411B7kE">BV1um411B7kE</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=RuGA-Sm3PYo">RuGA-Sm3PYo</a></td>
</tr>
<tr>
<td style="text-align: center">5</td>
<td style="text-align: left">LDAP 协议应用接入 - 以 EMBY 为例</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV12z421C7hU">BV12z421C7hU</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=eXcPcwNoNKw">eXcPcwNoNKw</a></td>
</tr>
<tr>
<td style="text-align: center">6</td>
<td style="text-align: left">邮件发送和界面自定义配置</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1iE421T7me">BV1iE421T7me</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=86udpF3OXMw">86udpF3OXMw</a></td>
</tr>
<tr>
<td style="text-align: center">7</td>
<td style="text-align: left">管理用户,组和应用访问权限</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1Am41127Yy">BV1Am41127Yy</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=IJMVnHn-90g">IJMVnHn-90g</a></td>
</tr>
<tr>
<td style="text-align: center">8</td>
<td style="text-align: left">配置流程和阶段实现:自助注册 找回密码 邀请链接注册</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1Vp421Q7Qz">BV1Vp421Q7Qz</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=bRmKUN7XcO0">bRmKUN7XcO0</a></td>
</tr>
<tr>
<td style="text-align: center">9</td>
<td style="text-align: left">ForwardAuth 配置接入任意应用</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1Mb421a7fF">BV1Mb421a7fF</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=HUB0aOVCo1M">HUB0aOVCo1M</a></td>
</tr>
<tr>
<td style="text-align: center">10</td>
<td style="text-align: left">配置多因素身份验证</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1sJ4m1u7Rq">BV1sJ4m1u7Rq</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=Ol7wF8AsrVA">Ol7wF8AsrVA</a></td>
</tr>
<tr>
<td style="text-align: center">11</td>
<td style="text-align: left">配置 Passwordless 登录</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1tE421P7o1">BV1tE421P7o1</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=p13W__HVDI8">p13W__HVDI8</a></td>
</tr>
<tr>
<td style="text-align: center">12</td>
<td style="text-align: left">服务的迁移</td>
<td style="text-align: center"><a href="https://www.bilibili.com/opus/1003423588679680017">Bilibili 图文</a></td>
<td style="text-align: center">N/A</td>
</tr>
<tr>
<td style="text-align: center">13</td>
<td style="text-align: left">RAC 远程访问控制 配置</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1Bh9bYXEqF">BV1Bh9bYXEqF</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=VSZIoAqJRLQ">VSZIoAqJRLQ</a></td>
</tr>
<tr>
<td style="text-align: center">14</td>
<td style="text-align: left">社交登录配置</td>
<td style="text-align: center"><a href="https://www.bilibili.com/video/BV1uDBJBeEbp">BV1uDBJBeEbp</a></td>
<td style="text-align: center"><a href="https://www.youtube.com/watch?v=h3_87ZRoMJ0">h3_87ZRoMJ0</a></td>
</tr>
</tbody>
</table>
<p>另外,我还有一些 Authentik 相关的 Gist 文章,记录了一些小技巧和配置方法,欢迎到<a href="https://ecwuuuuu.com/series/gist/">我的 Gist 专栏</a>查看。</p></description></item><item><title>Authentik 教程系列:通过反向代理和 ForwardAuth 接入任何应用</title><link>https://ecwuuuuu.com/post/authentik-tutorial-4-setup-forwardauth/</link><pubDate>Wed, 01 May 2024 21:53:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-4-setup-forwardauth/</guid><description><h2 id="简介">简介</h2>
<p>如果应用不支持统一登录,或者应用比较的简单没用用户系统。想要将它们纳入自己的统一登录体系是比较麻烦。这种情况下 Authentik 提供了一种配合反向代理的鉴权方法:Forward Authentication (没找到中文翻译,我觉得可以译作<code>转发验证</code>)。</p></description></item><item><title>Authentik 教程系列:将应用通过 OIDC,SAML,LDAP 协议接入</title><link>https://ecwuuuuu.com/post/authentik-tutorial-3-setup-oidc-saml-ldap/</link><pubDate>Sun, 21 Apr 2024 14:29:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-3-setup-oidc-saml-ldap/</guid><description><p>搭建了统一登录平台之后,最重要的事情就是将应用接入。Authentik 支持五种协议接入,分别是 <a href="https://en.wikipedia.org/wiki/SAML_2.0">SAML 2.0</a>, <a href="https://openid.net/developers/how-connect-works/">OAuth 2.0/OpenID Connect (OIDC)</a>, <a href="https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol">LDAP</a>, <a href="https://scim.cloud">SCIM</a>,和 <a href="https://en.wikipedia.org/wiki/RADIUS">RADIUS</a>,其中 OIDC,SAML,和 LDAP 能覆盖我们大多数的接入需求。在这篇文章我将用具体应用示例的方式演示如何将应用接入 Authentik。</p></description></item><item><title>Authentik 教程系列:反向代理的配置</title><link>https://ecwuuuuu.com/post/authentik-tutorial-2-setup-reverse-proxy/</link><pubDate>Mon, 08 Apr 2024 19:55:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-2-setup-reverse-proxy/</guid><description><p>将服务进行反向代理,我们可以配置通过域名来访问 Authentik。因为 Authentik 实现上不会通过配置写死 URL,所以反向代理的配置非常方便。</p>
<p>根据官方的文档,如果要使用反向代理,以下 header 必须传给 upstream。</p></description></item><item><title>Authentik 教程系列:简介和安装配置</title><link>https://ecwuuuuu.com/post/authentik-tutorial-1-introduction-and-install/</link><pubDate>Mon, 08 Apr 2024 01:25:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/authentik-tutorial-1-introduction-and-install/</guid><description><p>如果你也像我一样喜欢折腾 HomeLab,我们可能有个共同的乐趣就是寻找各种需求的自部署方案;但当我们这些自部署的服务越来越多,去访问每一个服务都需要单独的账号和密码;如果用户不止你一人,多账号管理也会成为一个麻烦的事情。</p></description></item><item><title>PyTorch Tutorial</title><link>https://ecwuuuuu.com/post/pytorch-tutorial/</link><pubDate>Fri, 05 Jan 2024 00:25:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/pytorch-tutorial/</guid><description><blockquote>
<p>A little bit of context</p>
<p>This is the tutorial material I prepared in fall 2023, for people with basic foundation of machine learning to get hands-on PyTorch quickly.</p>
<p>My idea behind the whole document is to teach the reader how to do full model training from the ground up and introduce each component alongside the process.</p>
</blockquote>
<h2 id="introduction-to-pytorch">Introduction to PyTorch</h2>
<p><figure class="l-body"><img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="PyTorch"
src="https://pytorch.org/assets/images/logo-white.svg"
></figure>
</p>
<ul>
<li>PyTorch is an open-source deep learning framework that provides a flexible and dynamic approach to building and training neural networks.</li>
<li>Its popularity and widespread adoption by the research and industry communities.</li>
<li>PyTorch is widely known for its ease of use, Pythonic interface, and excellent support for research-oriented tasks.</li>
</ul>
<h3 id="key-technology">Key Technology</h3>
<h4 id="dynamic-computational-graph">Dynamic computational graph</h4>
<p>A <strong>computational graph</strong> represents the flow of data through a computational model in the form of a directed acyclic graph (DAG). It serves as a visual representation of the mathematical operations performed on input data to produce the desired output.</p></description></item><item><title>Homelab:我的赛博积木 - 展望</title><link>https://ecwuuuuu.com/post/homelab-journey-future/</link><pubDate>Sat, 07 Oct 2023 02:20:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-future/</guid><description><p>从“赛博积木”系列第一篇文章到现在,已经过了两年的时间。受自己需求、实际体验后的感受等多重因素的影响。现有的架构和最初的设计已经有了很大的变化。其中最大的变化应该是在 23 年 6 月新组装的个人服务器,直接影响了我许多服务的部署形式。</p></description></item><item><title>Homelab:我的赛博积木 - 访问</title><link>https://ecwuuuuu.com/post/homelab-journey-accessing/</link><pubDate>Sat, 25 Feb 2023 02:20:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-accessing/</guid><description><p>前面已经介绍了基础设施和已经部署的服务。对于部署在<a href="https://ecwuuuuu.com/post/homelab-journey-internet/">公网的服务</a>,访问是方便的。在 Nginx 中通过反向代理将容器服务绑定在域名上,再配上 SSL 证书就可以实现安全方便的服务访问体验。真正让人头疼的是内网服务的访问和访问控制。</p></description></item><item><title>使用 input-overlay 工具在 OBS Studio 中展示鼠标和按键操作</title><link>https://ecwuuuuu.com/post/obs-studio-show-keyboard-and-mouse-activity/</link><pubDate>Tue, 31 Jan 2023 00:16:08 +0800</pubDate><guid>https://ecwuuuuu.com/post/obs-studio-show-keyboard-and-mouse-activity/</guid><description><blockquote>
<p>最近折腾了下 OBS Studio 的 <a href="https://github.com/univrsal/input-overlay">input-overlay</a> 插件,考虑到该插件的中文教程不多,特将折腾过程记录为本文。</p>
</blockquote>
<h2 id="什么是-input-overlay">什么是 input-overlay</h2>
<p><figure class="l-body"><img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="input-overlay 使用中的效果"
src="https://github.com/univrsal/input-overlay/blob/master/docs/io.png?raw=true"
></figure>
</p>
<p><a href="https://github.com/univrsal/input-overlay">input-overlay</a> 是由 <a href="https://vrsal.xyz/">Alex (univrsal)</a> 开发的一个 OBS Studio 插件。安装后,可以在 OBS Studio 中增加新的来源(source)用于展示鼠标、键盘、甚至是各种游戏手柄的操作。可以在游戏操作教学、软件教程类直播中提升直播时的效果。</p></description></item><item><title>Homelab:我的赛博积木 - 组成与架构</title><link>https://ecwuuuuu.com/post/homelab-journey-architecture/</link><pubDate>Sun, 08 Jan 2023 23:17:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-architecture/</guid><description><h2 id="架构概览">架构概览</h2>
<p>经常能在 r/homelab 上看到 &ldquo;<a href="https://www.reddit.com/r/homelab/?f=flair_name%3A%22LabPorn%22">LabPorn</a>&rdquo; 里其他大佬的机架。虽然很眼红,但目前自己的 HomeLab 只是几个简单的独立设备/资源组成。包括腾讯轻量云实例,群晖 NAS 和工控机。</p>
<h2 id="内网">内网</h2>
<p>我的地址在粤港澳大湾区,并在常住的广州,中山,和珠海配有三台设备。</p></description></item><item><title>Self-Host Projects</title><link>https://ecwuuuuu.com/page/keep/selfhost-project/</link><pubDate>Sun, 01 Jan 2023 22:55:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/keep/selfhost-project/</guid><description/></item><item><title>Homelab:我的赛博积木 - 公网服务</title><link>https://ecwuuuuu.com/post/homelab-journey-internet/</link><pubDate>Fri, 30 Dec 2022 00:20:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-internet/</guid><description><p>与<a href="https://ecwuuuuu.com/post/homelab-journey-intranet/">内网服务</a>不一样,部署在公网的服务目的性明确:希望能随时随地能访问到。这些服务部署在腾讯云轻量服务器,机房位于广州和香港。</p>
<h2 id="身份鉴权-ssoauthentik">身份鉴权 (SSO):Authentik</h2>
<blockquote>
<p>涉及的服务:Authentik</p>
</blockquote>
<p>部署在公网的服务,身份鉴权是很重要的一部分:有些资源、计算资源有必要授权后才可以访问。但如果各个系统的账号都分开控制,账号管理肯定非常麻烦。</p></description></item><item><title>Selected Music List</title><link>https://ecwuuuuu.com/page/keep/music-list/</link><pubDate>Tue, 27 Dec 2022 23:52:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/keep/music-list/</guid><description/></item><item><title>Homelab:我的赛博积木 - 内网服务</title><link>https://ecwuuuuu.com/post/homelab-journey-intranet/</link><pubDate>Sat, 15 Oct 2022 12:07:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-intranet/</guid><description><p>我的计算设施中,云服务器和本地设备各占一半,本地设备无公网 IPv4。这样的情况使得我的服务是分地部署、内外网隔离的(但不是做到严格隔离,这部分细节会在外网服务中提到。)</p></description></item><item><title>Homelab:我的赛博积木</title><link>https://ecwuuuuu.com/post/homelab-journey-intro/</link><pubDate>Tue, 04 Oct 2022 22:43:40 +0800</pubDate><guid>https://ecwuuuuu.com/post/homelab-journey-intro/</guid><description><p>HomeLab 直译是在家里的实验室,赛博语境下指网络、计算设备组成的实验沙盒。可以用来学习计算机技术和部署自用的服务。个人感觉 HomeLab 这个概念更多是在国外使用,许多的爱好者集中在 Reddit 频道 <a href="https://www.reddit.com/r/homelab/">r/homelab</a> 分享、交流项目和问题;在 YouTube 上也有不少博主提供手把手教学视频。这个应对国内的概念应该是 NAS 和 All in One (All in Boom 😀),许多教程能在什么值得买和哔哩哔哩找到。</p></description></item><item><title>自建 GitLab 配置 SSH 和后续</title><link>https://ecwuuuuu.com/post/gitlab-updates/</link><pubDate>Wed, 13 Jul 2022 09:17:36 +0800</pubDate><guid>https://ecwuuuuu.com/post/gitlab-updates/</guid><description><blockquote>
<p>整体比较流水账,只做记录。</p>
</blockquote>
<h2 id="配置-ssh">配置 SSH</h2>
<p>部署了 GitLab 之后,一直在使用 HTTPS,体验不错。但是当时没有将 GitLab 的 SSH 访问成功配置。</p>
<p>当初的配置尝试过:1. 将 SSH 与服务器的 SSH 的端口共用。 2. 单独设置一个 SSH 端口并暴露出来。我的操作是直接在域名后面加端口号进行访问:<code>git.ecwuuuuu.com:&lt;port&gt;</code> 但进行 Git 操作都没有成功过。在排查 Log 发现是链接失败后,对域名执行了 nslookup,发现 IP 并不是预期的服务器 IP,这里是因为我使用了 Cloudflare 的解析服务,真实的 IP 被隐藏了。所以操作行不通。</p></description></item><item><title>自建 GitLab 踩坑实录</title><link>https://ecwuuuuu.com/post/self-host-gitlab-instance/</link><pubDate>Fri, 06 May 2022 11:45:36 +0800</pubDate><guid>https://ecwuuuuu.com/post/self-host-gitlab-instance/</guid><description><p>之前自建了一个 Git 服务来托管自己的非公开代码。考虑要轻量,所以选择了 <a href="https://gitea.io/en-us/">Gitea</a> 并通过 Docker + Nginx 的方式进行部署。</p>
<p>前段时间腾讯云免费提供了轻量服务器配置升级的活动,配置提升到了 4 核心 + 4G 内存。机器性能是一个过剩的状态,为了充分利用,所以我考虑将服务从 Gitea 换到 <a href="https://about.gitlab.com/install/">GitLab</a>。这里把我的部署过程进行记录。</p></description></item><item><title>500 Hours in 307</title><link>https://ecwuuuuu.com/photography/500hrsin307/</link><pubDate>Thu, 07 Apr 2022 16:07:13 +0800</pubDate><guid>https://ecwuuuuu.com/photography/500hrsin307/</guid><description><p>This work is the final project of the Photography FE (Free Elective) Course. It shows how I am &ldquo;living&rdquo; in classroom 307 of the laboratory building.</p>
<p>In June 2019, about to be my senior year, I started my graduation project. Academic research requires long-term devotion, so classroom 307, as our stronghold, became where I spent the longest time in my last year of college (since COVID-19 destroyed the second semester). I spent more than 500 hours staying in that place. To study, do experiments, rest, and entertain.</p></description></item><item><title>Finding the Name for Color</title><link>https://ecwuuuuu.com/post/finding-the-name-for-color/</link><pubDate>Wed, 23 Feb 2022 20:44:55 +0800</pubDate><guid>https://ecwuuuuu.com/post/finding-the-name-for-color/</guid><description><p>This topic first came to my mind when I was in college as a freshman. I don&rsquo;t quite remember what application I am going to embed this. But the goal is clear: for color in HEX or RGB format, find a name to describe it accurately.</p>
<p>Recently, I saw a forum thread. A color-blind person is looking for a solution to identifying the color. I immediately recall the experience I had almost five years ago.</p></description></item><item><title>More on IPv6 Firewall - EUI-64</title><link>https://ecwuuuuu.com/post/more-on-ipv6-firewall/</link><pubDate>Sun, 13 Feb 2022 14:42:23 +0800</pubDate><guid>https://ecwuuuuu.com/post/more-on-ipv6-firewall/</guid><description><h2 id="background">Background</h2>
<p>In the <a href="https://ecwuuuuu.com/post/nas-ipv6-ddns/">Synology DDNS Tutorial</a>, I have a <a href="https://ecwuuuuu.com/post/nas-ipv6-ddns/#a-firewall">section</a> on setting up firewall on an ASUS AC68U Router.</p>
<p>For a recent update on my home network, the Asus router has been replaced with two Linksys WI-FI 6 tri-band mesh routers (two <a href="https://www.linksys.com/hk/whole-home-mesh-wifi/linksys-mx5-velop-ax-whole-home-wifi-6-system/p/p-mx5300/">MX5300</a> or it&rsquo;s SKU MX10600-CN)。</p>
<p>I thought it will be easy to set up since I already have some experience and documentation, but the firewall is not working as intended.</p>
<h2 id="my-attempts">My Attempts</h2>
<p><figure class="l-body"><img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt=""
src="https://www.linksys.com/support/images/KB25634-011_EN_v1.png"
></figure>
</p></description></item><item><title>Algorithm Completion Project</title><link>https://ecwuuuuu.com/post/algorithm-completion-project/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/algorithm-completion-project/</guid><description><p>Checkout <a href="https://ecwuuuuu.com/series/algorithm">Algorithm Series</a>, questions are arranged by categories (-)</p>
<h2 id="problem-list">Problem List</h2>
<blockquote>
<p>Retrived from <a href="https://leetcode-cn.com/problemset/all/?listId=2cktkvj&amp;page=1">Leetcode Top 100 Liked</a> (2022.01.25)</p>
</blockquote>
<table>
<thead>
<tr>
<th><strong>编号</strong></th>
<th style="text-align: center"><strong>难度</strong></th>
<th><strong>标签</strong></th>
<th style="text-align: center"><strong>题解</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://leetcode-cn.com/problems/two-sum">1. 两数之和</a></td>
<td style="text-align: center">简单</td>
<td>数组</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#1-%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/add-two-numbers">2. 两数相加</a></td>
<td style="text-align: center">中等</td>
<td>链表 / 递归</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/linked-list/#2-%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/longest-substring-without-repeating-characters">3. 无重复字符的最长子串</a></td>
<td style="text-align: center">中等</td>
<td>字符串</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/string/#3-%E6%97%A0%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%E7%9A%84%E6%9C%80%E9%95%BF%E5%AD%90%E4%B8%B2">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/median-of-two-sorted-arrays">4. 寻找两个正序数组的中位数</a></td>
<td style="text-align: center">困难</td>
<td>数组</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#4-%E5%AF%BB%E6%89%BE%E4%B8%A4%E4%B8%AA%E6%AD%A3%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E4%B8%AD%E4%BD%8D%E6%95%B0">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/longest-palindromic-substring">5. 最长回文子串</a></td>
<td style="text-align: center">中等</td>
<td>字符串</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/string/#5-%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/regular-expression-matching">10. 正则表达式匹配</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/container-with-most-water">11. 盛最多水的容器</a></td>
<td style="text-align: center">中等</td>
<td>数组</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#11-%E7%9B%9B%E6%9C%80%E5%A4%9A%E6%B0%B4%E7%9A%84%E5%AE%B9%E5%99%A8">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/3sum">15. 三数之和</a></td>
<td style="text-align: center">中等</td>
<td>数组</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#15-%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number">17. 电话号码的字母组合</a></td>
<td style="text-align: center">中等</td>
<td>字符串 / 回溯</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/string/#17-%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list">19. 删除链表的倒数第 N 个结点</a></td>
<td style="text-align: center">中等</td>
<td>链表</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/linked-list/#19-%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E7%9A%84%E5%80%92%E6%95%B0%E7%AC%AC-n-%E4%B8%AA%E7%BB%93%E7%82%B9">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/valid-parentheses">20. 有效的括号</a></td>
<td style="text-align: center">简单</td>
<td>字符串 / 栈</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/string/#20-%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/merge-two-sorted-lists">21. 合并两个有序链表</a></td>
<td style="text-align: center">简单</td>
<td>链表</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/linked-list/#21-%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%9C%89%E5%BA%8F%E9%93%BE%E8%A1%A8">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/generate-parentheses">22. 括号生成</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/merge-k-sorted-lists">23. 合并 K 个升序链表</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/next-permutation">31. 下一个排列</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/longest-valid-parentheses">32. 最长有效括号</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/search-in-rotated-sorted-array">33. 搜索旋转排序数组</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array">34. 在排序数组中查找元素的第一个和最后一个位置</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/combination-sum">39. 组合总和</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/trapping-rain-water">42. 接雨水</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/permutations">46. 全排列</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/rotate-image">48. 旋转图像</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/group-anagrams">49. 字母异位词分组</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/maximum-subarray">53. 最大子数组和</a></td>
<td style="text-align: center">简单</td>
<td>数组 / 动态规划</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#53-%E6%9C%80%E5%A4%A7%E5%AD%90%E6%95%B0%E7%BB%84%E5%92%8C">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/jump-game">55. 跳跃游戏</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/merge-intervals">56. 合并区间</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/unique-paths">62. 不同路径</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/minimum-path-sum">64. 最小路径和</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/climbing-stairs">70. 爬楼梯</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/edit-distance">72. 编辑距离</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/sort-colors">75. 颜色分类</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/minimum-window-substring">76. 最小覆盖子串</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/subsets">78. 子集</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/word-search">79. 单词搜索</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/largest-rectangle-in-histogram">84. 柱状图中最大的矩形</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/maximal-rectangle">85. 最大矩形</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/binary-tree-inorder-traversal">94. 二叉树的中序遍历</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/unique-binary-search-trees">96. 不同的二叉搜索树</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/validate-binary-search-tree">98. 验证二叉搜索树</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/symmetric-tree">101. 对称二叉树</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/binary-tree-level-order-traversal">102. 二叉树的层序遍历</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/maximum-depth-of-binary-tree">104. 二叉树的最大深度</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal">105. 从前序与中序遍历序列构造二叉树</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list">114. 二叉树展开为链表</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock">121. 买卖股票的最佳时机</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/binary-tree-maximum-path-sum">124. 二叉树中的最大路径和</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/longest-consecutive-sequence">128. 最长连续序列</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/single-number">136. 只出现一次的数字</a></td>
<td style="text-align: center">简单</td>
<td>数组 / 位运算</td>
<td style="text-align: center"><a href="https://ecwuuuuu.com/page/algorithm/array/#136-%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%E7%9A%84%E6%95%B0%E5%AD%97">Py</a></td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/word-break">139. 单词拆分</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/linked-list-cycle">141. 环形链表</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/linked-list-cycle-ii">142. 环形链表 II</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/lru-cache">146. LRU 缓存</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/sort-list">148. 排序链表</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/maximum-product-subarray">152. 乘积最大子数组</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/min-stack">155. 最小栈</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/intersection-of-two-linked-lists">160. 相交链表</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/majority-element">169. 多数元素</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/house-robber">198. 打家劫舍</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/number-of-islands">200. 岛屿数量</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/reverse-linked-list">206. 反转链表</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/course-schedule">207. 课程表</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/implement-trie-prefix-tree">208. 实现 Trie (前缀树)</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/kth-largest-element-in-an-array">215. 数组中的第 K 个最大元素</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/maximal-square">221. 最大正方形</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/invert-binary-tree">226. 翻转二叉树</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/palindrome-linked-list">234. 回文链表</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree">236. 二叉树的最近公共祖先</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/product-of-array-except-self">238. 除自身以外数组的乘积</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/sliding-window-maximum">239. 滑动窗口最大值</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/search-a-2d-matrix-ii">240. 搜索二维矩阵 II</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/meeting-rooms-ii">253. 会议室 II</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/perfect-squares">279. 完全平方数</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/move-zeroes">283. 移动零</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/find-the-duplicate-number">287. 寻找重复数</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree">297. 二叉树的序列化与反序列化</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/longest-increasing-subsequence">300. 最长递增子序列</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/remove-invalid-parentheses">301. 删除无效的括号</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown">309. 最佳买卖股票时机含冷冻期</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/burst-balloons">312. 戳气球</a></td>
<td style="text-align: center">困难</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/coin-change">322. 零钱兑换</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/house-robber-iii">337. 打家劫舍 III</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/counting-bits">338. 比特位计数</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/top-k-frequent-elements">347. 前 K 个高频元素</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/decode-string">394. 字符串解码</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/evaluate-division">399. 除法求值</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/queue-reconstruction-by-height">406. 根据身高重建队列</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/partition-equal-subset-sum">416. 分割等和子集</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/path-sum-iii">437. 路径总和 III</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/find-all-anagrams-in-a-string">438. 找到字符串中所有字母异位词</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array">448. 找到所有数组中消失的数字</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/hamming-distance">461. 汉明距离</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/target-sum">494. 目标和</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/convert-bst-to-greater-tree">538. 把二叉搜索树转换为累加树</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/diameter-of-binary-tree">543. 二叉树的直径</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/subarray-sum-equals-k">560. 和为 K 的子数组</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray">581. 最短无序连续子数组</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/merge-two-binary-trees">617. 合并二叉树</a></td>
<td style="text-align: center">简单</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/task-scheduler">621. 任务调度器</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/palindromic-substrings">647. 回文子串</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td><a href="https://leetcode-cn.com/problems/daily-temperatures">739. 每日温度</a></td>
<td style="text-align: center">中等</td>
<td>-</td>
<td style="text-align: center">-</td>
</tr>
</tbody>
</table>
<h2 id="题解形式">题解形式</h2>
<h3 id="888-题目昵称">888. 题目昵称</h3>
<p><a href="https://leetcode-cn.com/problems/">https://leetcode-cn.com/problems/</a>题目的Leetcode链接</p></description></item><item><title>Array</title><link>https://ecwuuuuu.com/page/algorithm/array/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/array/</guid><description><h2 id="1-两数之和">1. 两数之和</h2>
<p><a href="https://leetcode-cn.com/problems/two-sum">https://leetcode-cn.com/problems/two-sum</a></p>
<p>给定一个整数数组 <code>nums</code>,目标是找出数组中的两个整数,算数和为 <code>target</code>,返回数组下标(只有一个答案,不能元素重复使用)。<strong>其中最简单直接的方法就是暴力遍历</strong>,得到所有二元素数组的组合(但需要注意储存下标)。</p></description></item><item><title>Binary</title><link>https://ecwuuuuu.com/page/algorithm/binary/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/binary/</guid><description><p>TBA</p></description></item><item><title>Dynamic Programming</title><link>https://ecwuuuuu.com/page/algorithm/dynamic-programming/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/dynamic-programming/</guid><description><p>TBA</p></description></item><item><title>Graph</title><link>https://ecwuuuuu.com/page/algorithm/graph/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/graph/</guid><description><p>TBA</p></description></item><item><title>Heap</title><link>https://ecwuuuuu.com/page/algorithm/heap/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/heap/</guid><description><p>TBA</p></description></item><item><title>Interval</title><link>https://ecwuuuuu.com/page/algorithm/interval/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/interval/</guid><description><p>TBA</p></description></item><item><title>Linked List</title><link>https://ecwuuuuu.com/page/algorithm/linked-list/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/linked-list/</guid><description><h2 id="2-两数相加">2. 两数相加</h2>
<p><a href="https://leetcode-cn.com/problems/add-two-numbers">https://leetcode-cn.com/problems/add-two-numbers</a></p>
<p>给两个非空链表,每个节点储存一位数字,按逆序排序。返回一个相同形式的链表,表示两个链表的和。</p>
<p>数据在链表中是倒序的,这非常的便于处理计算时出现的进位。那最简单的方式就是从两个链表的入口开始计算,直到两个链表走到末尾。</p></description></item><item><title>Matrix</title><link>https://ecwuuuuu.com/page/algorithm/matrix/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/matrix/</guid><description><p>TBA</p></description></item><item><title>Misc</title><link>https://ecwuuuuu.com/page/algorithm/misc/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/misc/</guid><description><p>TBA</p></description></item><item><title>String</title><link>https://ecwuuuuu.com/page/algorithm/string/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/string/</guid><description><h2 id="3-无重复字符的最长子串">3. 无重复字符的最长子串</h2>
<p><a href="https://leetcode-cn.com/problems/longest-substring-without-repeating-characters">https://leetcode-cn.com/problems/longest-substring-without-repeating-characters</a></p>
<p>给定一个字符串 <code>s</code> ,请你找出其中不含有重复字符的<strong>最长子串</strong>的<em>长度</em>。</p>
<p>这个得出的字符串中不能存在存在的字符,且返回只需要返回最长的长度,所以我们可以使用双指针,来指向不含重复字符的字串。其中:</p></description></item><item><title>Tree</title><link>https://ecwuuuuu.com/page/algorithm/tree/</link><pubDate>Wed, 09 Feb 2022 15:30:00 +0800</pubDate><guid>https://ecwuuuuu.com/page/algorithm/tree/</guid><description><p>TBA</p></description></item><item><title>【记录】智能门锁 - Introduction to Robotics 课程项目</title><link>https://ecwuuuuu.com/post/robotics-project/</link><pubDate>Fri, 21 Jan 2022 22:44:00 +0800</pubDate><guid>https://ecwuuuuu.com/post/robotics-project/</guid><description><h2 id="整体构思">整体构思</h2>
<p>项目构思时浏览了很多网络上的 Arduino 项目建议。但列表中大多不够有趣,或时太复杂不容易实现。但其中遇到了一篇来自 Grathio Labs 的文章描述了使用敲门节奏驱动的智能门锁<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p></description></item><item><title>YouTube Channels</title><link>https://ecwuuuuu.com/page/keep/youtube-channel/</link><pubDate>Tue, 11 Jan 2022 21:58:05 +0800</pubDate><guid>https://ecwuuuuu.com/page/keep/youtube-channel/</guid><description/></item><item><title>Figure: Hinata Shoyo</title><link>https://ecwuuuuu.com/photography/hinata-shoyo/</link><pubDate>Mon, 10 Jan 2022 22:04:44 +0800</pubDate><guid>https://ecwuuuuu.com/photography/hinata-shoyo/</guid><description><p>Note:</p>
<ul>
<li>Product Name: Good Smile Company <a href="https://www.goodsmile.info/en/product/11123/POP+UP+PARADE+Shoyo+Hinata.html">POP UP PARADE Shoyo Hinata</a></li>
<li>Two flashes used.</li>
</ul>
<div class="gallery-breakout not-prose l-screen-right hinata">
<div class="gallery-hint flex space-x-2 mb-4">
<svg class="flex-none w-5 h-5" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="m9.813 9.25.346-5.138a1.276 1.276 0 0 0-2.54-.235L6.75 11.25 5.147 9.327a1.605 1.605 0 0 0-2.388-.085.018.018 0 0 0-.004.019l1.98 4.87a5 5 0 0 0 4.631 3.119h3.885a4 4 0 0 0 4-4v-1a3 3 0 0 0-3-3H9.813Z" class="stroke-slate-800 dark:stroke-slate-300"></path>
<path d="M3 5s.35-.47 1.25-.828m9.516-.422c2.078.593 3.484 1.5 3.484 1.5" class="stroke-slate-400 dark:stroke-sky-400"></path>
</svg>
<p class="text-slate-700 text-sm font-medium dark:text-slate-200"><kbd class="px-2 py-1 text-sm font-semibold dark:text-gray-200 dark:bg-gray-600 border dark:border-gray-400 rounded-md shadow-outer">Shift</kbd> + mouse scroll in the grid of images to see the rest.</p></description></item><item><title>Cleaning Up Git Repo For My Blog</title><link>https://ecwuuuuu.com/post/cleaning-up-git-repo-for-my-blog/</link><pubDate>Mon, 10 Jan 2022 15:54:37 +0800</pubDate><guid>https://ecwuuuuu.com/post/cleaning-up-git-repo-for-my-blog/</guid><description><h2 id="what-i-have-done">What I have done</h2>
<p>When creating the theme announced in the post <a href="https://ecwuuuuu.com/post/new-theme-for-blog/">Switching to a new theme &hellip; I guess</a>. I set up a new branch in the original <a href="https://github.com/ecwu/ecwu.github.io.source">source repository</a> and uses Cloudflare pages to build the previews for the site. This can make sure all the original Github actions for the main site working normally.</p>
<p>Since the new branch <code>new-theme</code> was created using attribute <code>--orphan</code>, it will be impossible to do pull requests to the original default branch <code>master</code>. So I did a workaround.</p></description></item><item><title>Changelog</title><link>https://ecwuuuuu.com/page/changelog/</link><pubDate>Sun, 09 Jan 2022 14:49:18 +0800</pubDate><guid>https://ecwuuuuu.com/page/changelog/</guid><description><h2 id="about-this-site">About this site</h2>
<ul>
<li>Write in <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a> with <a href="https://code.visualstudio.com/">Visual Studio Code</a>.</li>
<li>Site generates with <a href="https://gohugo.io/">Hugo</a> static site generator (version 0.152.2+extended as of Jan 2026).
<ul>
<li>Uses <a href="https://github.com/ecwu/ecwu-theme">ecwu-theme</a> from Jan 2022, Theme introduction: <a href="https://ecwuuuuu.com/post/blog-theme-ecwu-theme/">Blog Theme: ecwu-theme</a></li>
<li>Previous theme: <a href="https://github.com/shawnohare/hugo-tufte">hugo-tufte</a></li>
</ul>
</li>
<li><a href="https://glossary.cncf.io/continuous-integration/">Continuous integration</a> via <a href="https://github.com/features/actions">GitHub Actions</a>.</li>
<li>Staging previews deployed with <a href="https://pages.cloudflare.com/">Cloudflare Pages</a>.
<ul>
<li><a href="https://ecwu-github-io-source.pages.dev/">https://ecwu-github-io-source.pages.dev/</a></li>
</ul>
</li>
<li>Hosted at <a href="https://pages.github.com/">GitHub Pages</a>.</li>
<li>Uses <a href="https://www.cloudflare.com/">Cloudflare</a> &amp; <a href="https://www.qiniu.com/">Qiniu 七牛</a> for CDN &amp; Asset Hosting.</li>
<li>Styled with <a href="https://tailwindcss.com/">Tailwind CSS</a> (v4.1.+ as of Oct 2025).</li>
<li>Implements <a href="https://github.com/giscus/giscus">giscus</a> for comments.</li>
<li>Analytics provided by <a href="https://support.google.com/analytics/answer/10089681?hl=en">Google Analytics v4</a> &amp; <a href="https://www.cloudflare.com/web-analytics/">Cloudflare Web Analytics</a>.</li>
<li>LLaTeX equations rendered with <a href="https://katex.org">KaTeX</a>.</li>
</ul>
<h2 id="changelog">Changelog</h2>
<h3 id="2026">2026</h3>
<h4 id="april-2026">April 2026</h4>
<ul>
<li>Reimplement gallery breakout layout in CSS so galleries can extend to the right edge of the content area without manipulating the outer <code>&lt;article&gt;</code> structure. The gallery shortcode is now a paired shortcode.</li>
</ul>
<h4 id="january-2026">January 2026</h4>
<ul>
<li>Attempt to fix the issue where the full-width feature image slightly exceeds the screen width when the vertical scrollbar is present. (Possible cause: the mixed use of <code>vw</code> and <code>%</code> units, which the scrollbar affects the <code>vw</code> calculation)</li>
</ul>
<h3 id="2025">2025</h3>
<h4 id="october-2025">October 2025</h4>
<ul>
<li>Update the Tailwind CSS to v4 (v4.1.+)</li>
<li>Adding Mermaid diagram support</li>
<li>Restore Sidenote and Marginnote support with new implementation</li>
<li>Update KaTeX to v0.16.21</li>
</ul>
<h4 id="april-2025">April 2025</h4>
<ul>
<li>Adding a new &ldquo;no-dark-invert&rdquo; class for dark mode to prevent dark mode inversion for some images (removed in October 2025)</li>
</ul>
<h4 id="february-2025">February 2025</h4>
<ul>
<li>Update the Tailwind CSS to v4</li>
<li>Update the KaTeX to v0.16.21</li>
<li>Adjust the style for homepage card to match the design system</li>
<li>Adding support for youtube and bilibili embeds</li>
</ul>
<h3 id="2024">2024</h3>
<h4 id="october-2024">October 2024</h4>
<ul>
<li>Update the build pipeline with Hugo 0.134.2</li>
<li>Change the tag for site logo/title from <code>&lt;h1&gt;</code> to <code>&lt;div&gt;</code> for better SEO</li>
</ul>
<h4 id="may-2024">May 2024</h4>
<ul>
<li>Refreshing the design and layout for friends page, adding avatar for each item.</li>
</ul>
<h3 id="2022">2022</h3>
<h4 id="october-2022">October 2022</h4>
<ul>
<li>Warp the main content with <code>&lt;main&gt;</code> tags, improving RSS scraping results.</li>
</ul>
<h4 id="april-2022">April 2022</h4>
<ul>
<li>Replace comment plugins: <a href="https://utteranc.es">utterances</a> -&gt; <a href="https://github.com/giscus/giscus">giscus</a></li>
<li>Migrate legacy comments from GitHub Issues to GitHub Discussion</li>
</ul>
<h4 id="february-2022">February 2022</h4>
<ul>
<li>Adding shortcode for PDF (Tailwind Aspect-ratio plugin)</li>
<li>Refines and adding labels for Draft post</li>
<li>Adding shortcode for embeds html file</li>
<li>Adding video looping args for video shortcode</li>
<li>Fix a bug in article time and read time metadata display</li>
</ul>
<h4 id="january-2022">January 2022</h4>
<ul>
<li>Enable the new <a href="https://github.com/ecwu/ecwu-theme">ecwu-theme</a>, Written in <a href="https://tailwindcss.com/">Tailwind CSS 3</a></li>
<li>Adding Comment Plugin <a href="https://utteranc.es">utterances</a></li>
<li>Adding Site Analytics <a href="https://support.google.com/analytics/answer/10089681?hl=en">Google Analytics v4</a></li>
<li>New <code>Terms</code>, <code>Series</code> View and Pages.</li>
<li>New Article Info Card</li>
<li>New Gallery Implementation with JS.</li>
<li>Remove Sidenote (bring backed in Oct 2025)</li>
<li>Adding shortcode for video (via CDN)</li>
</ul>
<h3 id="pre-2022">Pre 2022</h3>
<ul>
<li>Using <a href="https://github.com/shawnohare/hugo-tufte">hugo-tufte</a> theme with custom modifications</li>
</ul></description></item><item><title>(Switched!) Switching to a new theme ... I guess</title><link>https://ecwuuuuu.com/post/new-theme-for-blog/</link><pubDate>Wed, 22 Dec 2021 16:35:45 +0000</pubDate><guid>https://ecwuuuuu.com/post/new-theme-for-blog/</guid><description><p>This blogsite has been using <a href="https://github.com/shawnohare/hugo-tufte">hugo-tufte</a> theme (with some customization) for a while. I choose the theme because I appreciate the aesthetic look of the original Tufte $\LaTeX$ template. Using a dedicated area on the right side of the page for sidenotes, supplements images, or thoughts. Diversify the layout of an article, and make the article fun to read.</p>
<p>A couple of months ago, under my willingness of making enhancements to the theme. And I start to do some research on how other people are doing sidenote on their blog (Like the <a href="https://www.gwern.net/Sidenotes">great article</a> by Gwern Branwen). With some &ldquo;deep thinking&rdquo;. I start to realize. Maybe it is not a good idea to use footnotes on the Internet pages.</p></description></item><item><title>I am initiating a new domain!</title><link>https://ecwuuuuu.com/post/new-domain/</link><pubDate>Wed, 01 Sep 2021 14:40:01 +0800</pubDate><guid>https://ecwuuuuu.com/post/new-domain/</guid><description><p>Starting from Aug 11, 2021. I am starting a new domain name for my website.</p>
<blockquote>
<p><a href="https://ecwu.xyz">ecwu.xyz</a></p>
</blockquote>
<p>Personally, the old domain name (ecwuuuuu.com) is good but is it a little bit longer in length and maybe difficult for people to memorize and use. So, I register this domain name to create some convenience for others (but mostly for myself :)).</p>
<p>Currently, I am don&rsquo;t have a concrete plan for how to utilize these two domains. But I will probably migrate all my info page and service to the new domain. The domain email and blog will still keep in the old one. I will keep thinking about this, and sync the progress on this page in the future.</p></description></item><item><title>Drag</title><link>https://ecwuuuuu.com/photography/drag/</link><pubDate>Tue, 20 Jul 2021 13:57:20 +0800</pubDate><guid>https://ecwuuuuu.com/photography/drag/</guid><description><p>Hang out with friends in Shenzhen. In the evening, we saw a nice sunset in <a href="http://en.sasac.gov.cn/2020/10/09/c_5587.htm">OH BAY</a>.</p>
<p>On the way back home, I saw more breathtaking scenery. And I captured it with my camera.</p>
<p>The images are shot using a slow shutter speed, and the shape of the objects is dragged by the movement of the cabin. I arrange the image in a linear (both in time and space) manner. Along with intertwined artificial lights, urban buildings, and twilight sky in the frame. I try to create an emotional transition from active to calm with these four images.</p></description></item><item><title>Sigmoid or Softmax for Binary Classification</title><link>https://ecwuuuuu.com/post/sigmoid-softmax-binary-class/</link><pubDate>Mon, 07 Jun 2021 13:06:14 +0800</pubDate><guid>https://ecwuuuuu.com/post/sigmoid-softmax-binary-class/</guid><description><p>Recently, been asked a question on using neural networks for binary classification.</p>
<blockquote>
<p>The output layer of the network can be &hellip; <strong>One output neuron with sigmoid activation function</strong> or <strong>Two neurons and then apply a softmax activation function</strong>. But what is the difference between these two?</p>
</blockquote>
<p>Let start with the equations of the two functions.</p>
<p>Sigmoid Activation Function
$$
S(x) = \frac{1}{ 1+e^{-x}}
$$</p>
<p>We input the value of the last layer $x$, and we can get a value in the range 0 to 1 as shown in the figure. If the value is greater than 0.5, we consider the model output as one class, or the other class if the value is less than 0.5.
<figure class="l-body side">
<img src="https://upload.wikimedia.org/wikipedia/commons/8/88/Logistic-curve.svg" alt="The logistic sigmoid function" class="rounded-lg" loading="lazy" decoding="async">
<figcaption>
<strong>The logistic sigmoid function </strong>
<a href="https://upload.wikimedia.org/wikipedia/commons/8/88/Logistic-curve.svg">
Wikimedia Commons
</a>
</figcaption>
</figure>
</p></description></item><item><title>My Past NLP Projects</title><link>https://ecwuuuuu.com/post/nlp/</link><pubDate>Fri, 07 May 2021 00:13:30 +0800</pubDate><guid>https://ecwuuuuu.com/post/nlp/</guid><description><p>I started to learn NLP-related stuff in mid-2018. And gradually start to some serious research. My focus mainly on Natural Language Generation (NLG).</p>
<h2 id="beginning-semeval2019">Beginning: SemEval2019</h2>
<p>By the end of 2018, members of the AI learning group <label for="sidenote-0" class="sidenote-number"></label>
<input type="checkbox" id="sidenote-0" class="sidenote-checkbox"/>
<span class="sidenote">Lead by <a href="https://dst.uic.edu.cn/en/faculty/faculty.htm#/wfsu/en">Prof. Weifeng Su</a></span> decide to take part in the SemEval 2019. To study and learning more about NLP.</p>
<p>Our group chose task 6: Identifying and Categorizing Offensive Language in Social Media (OffensEval). Which the input text is users&rsquo; tweets and we need to classify it.</p></description></item><item><title>Making Synology NAS accessible from the Internet using IPv6 and DDNS</title><link>https://ecwuuuuu.com/post/nas-ipv6-ddns/</link><pubDate>Sun, 04 Apr 2021 10:01:01 +0800</pubDate><guid>https://ecwuuuuu.com/post/nas-ipv6-ddns/</guid><description><blockquote>
<p>Although I majored in computer science, my blog is filled with photography-related content. For balance, I take the opportunity of a recent explore and write down this note. :-)</p>
</blockquote>
<blockquote>
<p>Spoiler alert: This is not the way I currently using to exposed my NAS to the WWW.</p>
</blockquote>
<h2 id="some-background">Some Background</h2>
<p>I own a Synology DS918+ NAS, which was purchased in 2020. Both ports on the NAS are connected to my ASUS AC68U router for redundancy. The ISP in my house is CMCC <label for="sidenote-0" class="sidenote-number"></label>
<input type="checkbox" id="sidenote-0" class="sidenote-checkbox"/>
<span class="sidenote">
China Mobile Limited; Chinese: 中国移动通信集团有限公司</span>, so no dedicated IPv4 address.</p></description></item><item><title>Outside Windowsill</title><link>https://ecwuuuuu.com/photography/outside-windowsill/</link><pubDate>Fri, 25 Dec 2020 21:30:01 +0800</pubDate><guid>https://ecwuuuuu.com/photography/outside-windowsill/</guid><description><p>The window of my room is facing west. Clear view, not blockage. A perfect place for seeing the gorgeous sunset.</p>
<p>I can’t really remember when and why I start taking photos from the window. Maybe because of the breathtaking scenery, or just some casual shots. But the first one I can find on my Instagram is taken in March 2014.</p>
<p>Haven’t thought about making it into a series or project since the beginning. But I have shot a lot of these since 2014 and I think it will be interesting to make it into a series. And this is the result, hope you enjoy it.</p></description></item><item><title>Beijing Daxing International Airport</title><link>https://ecwuuuuu.com/photography/pkx-airport/</link><pubDate>Thu, 16 Jul 2020 15:20:01 +0800</pubDate><guid>https://ecwuuuuu.com/photography/pkx-airport/</guid><description/></item><item><title>UIC night</title><link>https://ecwuuuuu.com/photography/uic-night/</link><pubDate>Mon, 13 Jul 2020 21:43:01 +0800</pubDate><guid>https://ecwuuuuu.com/photography/uic-night/</guid><description/></item><item><title>Larger format, heavier body</title><link>https://ecwuuuuu.com/post/120-film-and-rb67/</link><pubDate>Tue, 09 Jun 2020 17:44:45 +0800</pubDate><guid>https://ecwuuuuu.com/post/120-film-and-rb67/</guid><description><p>In my last photography-related post: <a href="https://ecwuuuuu.com/post/try-the-film-for-the-first-time/">Try the Film For the First Time</a>. I have lots of fun with negatives. This makes me want to have my own camera to experience this medium that has existed for nearly 200 years. <label for="sidenote-1" class="sidenote-number"></label>
<input type="checkbox" id="sidenote-1" class="sidenote-checkbox"/>
<span class="sidenote">The film we are still using today was invented by Kodak in 1888, but photosensitive material that uses in photography can date back to 1835.</span>
<figure class="l-gutter">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/View_from_the_Window_at_Le_Gras_colorized_2020_new.png/1600px-View_from_the_Window_at_Le_Gras_colorized_2020_new.png" alt="View from the Window at Le Gras" class="rounded-lg" loading="lazy" decoding="async">
<figcaption>
<strong>View from the Window at Le Gras </strong>