我的 2023

2023 总结

学习和工作

学校

随着疫情管控的全面放开,大一下我都在线下上课。学校离家很远所以住宿,认识了新的舍友。整天窝在寝室里睡觉刷手机玩电脑,经常翘课,根本认识不到几个同学,评优什么的跟自己毫无关系,从来不去图书馆,到了期末才开始翻书看课件运气好就少挂几门,几年里什么都没学到。大一上线上教学的期末考试放在了大一下的期初线下考试,高数挂科了(重修费好贵,我上课又不听,能不能不付钱(x))我还是喜欢线上上课考试。感觉早八好困难,不知道我高中是怎么活过来的(x

让我看看大一学生都在学些啥?高等数学,线性代数,思政,近代史,金工,英语,体育,军事理论,军事技能,大学物理,机械制图,心理健康,生涯规划。还有我们亲爱的计算机相关课程:C 语言。 使用 VC6 的 C 语言,变量声明位置换一换就不工作了,我除了考试都自带笔记本用自己环境,没有 OJ,作业代码要打印在纸上,无语了。

work-machine
work-laser-print

金工实习还安排在周末(流汗黄豆)

体育课有校园跑要求,对高校体育 APP 抓包作弊把号玩没了()

rewiring

学校宿舍晚上会熄灯,除了空调线路不断电,插座会断电,晚上会没电没网。我第一次尝试改接强电线路并成功了,宿管也没查出来。

我加入了学校的动漫社、网络安全社团、电子设计竞赛实验室、日语角,并尝试在学校组建 Linux 用户组。

和学校网络安全社团的同学组队参加了两次市级或赛区级 CTF 比赛,拿了两个二等奖。第一次拿奖金 & 第一次吃茶歇(x

在电子设计竞赛实验室的培训作业中略微学习了一些 STM32 的皮毛。我自学了 KiCAD,贡献了一些中文翻译。实验室主要使用嘉立创 EDA,我在 AUR 维护了一年有余,也很高兴能看到 @taotieren 在今年将其加入 archlinuxcn 软件源中。

在机械制图课程的启发下学了一些 FreeCAD。相较我以前用的 Fusion360 它免费开源更流畅,特色是通过限定条件来建模,工作流清晰,开源拖拉机,界面略丑,偶尔崩溃。需要在建模前有大致想法,如果对前几步的某个参数调整了有可能后续的步骤都需要重做。不支持两个及以上实体。

写了一些和学校有关的匿名开源脚本。学校的 Linux 用户组从泰晓拿到了 Milk-V Duo,第一次接触到了 RISC-V,不是很会玩,尝试 swap 个 archlinux 上去失败了,看到了 @Blockcity 的点灯,比我玩的成功。

大二换了校区和宿舍分配,由于离家较近我决定走读,还是家里舒服。

考试

我的 2022 提到了我参加 CET 4 和 JLPT N2 的考试,在今年出了成绩。

  • CET 4:525/710(听力 200 + 阅读 176 + 写作和翻译 149)
  • JLPT N2:180/180 意料之外,早知道就直接考 N1 了(余额-550)

在 2023 年,我参加了 CET 6 和 JLPT N1 的考试。

  • CET 6:445/710(听力 146 + 阅读 174 + 写作和翻译 125) 好险,勉强合格,英语是废了
  • JLPT N1:127/180(语言知识 35 + 阅读 43 + 听力 49)(余额-550)
    我觉得是偏低了(不过我也没学什么()),JLPT 没有考察到的写作和口语还是很菜。

我还参加了上海市高等学校信息技术水平考试(SCITE),我选择的科目是四级网络与信息安全,96/100,考了没什么用,机考,我把考试题偷出来并使用 Access PassView 解密了 (什么叫网络与信息安全啊) ,没有正确答案,有兴趣的话可以下载查看(题目附件报毒,不过全是 asp php 之类的文件,没有可执行二进制文件,问题不大)。

我在暑假学习了小型汽车的驾驶,尽管驾校的教学质量并不好,我拿到了 C1 机动车驾驶证。虽然只是勉强会开()

线上

  • 参加了 Hackergame 2023,总排名没有去年好,有点摆烂。
  • 尝试了更换桌面操作系统为 NixOS,没有成功。我觉得它的理念是好的,但是文档(考虑到配置方法与大部分发行版不同)和大多数人在用的实验性功能(flake、home manager…)还需要再完善一段时间,也许我明年会再尝试一次?非官方文档里我觉得 ryan4yin 的教程比较好用,官方文档我觉得太抽象了,不是像 Arch Wiki 那样的手把手教学。
  • NixOS/nixpkgs 添加了一些包,目标是完成 NixOS for Pentesting,如果我再尝试 NixOS 的话会再看看有没有我能打的新包。
  • 全年继续使用我最爱的 Linux 发行版 Arch Linux。我维护的 AUR 包数量从去年的 16 个增长到 41 个,其中 mastodon-twitter-syncpython-pem相关 bug) 被收录进了官方源。
  • 创建了我自己的 Arch Linux 软件源谢谢 @Clansty)。
  • 参与了 DIYgod/RSSHub RSS 路由的开发,谢谢 @TonyRL 每次 review 时的悉心指导。
  • 第一次实现了 GitHub 每周全勤(虽然不知道在忙什么(x))

AOSCC

暑假的时候家人计划去旅游,日程与 AOSCC 2023 冲突,我选择了去参加 AOSCC,同时也拿到了旅游经费用来搭建我的 HomeLab

我与大学刚组建不久的 LUG 的同学一起参加了 AOSCC,这是我第一次参加线下聚会。

meetup

meetup-blockcity-cronfox
meetup-blockcity-horo

谢谢 @Blockcity 的邀请,借 @Blockcity 同时 meetup 了 @Cronfox 和 @Horo。

meetup-miaotony
meetup-aoscc

还 meetup 了 @Camber、@Ciel、@Milkice、@MiaoTony,谢谢你们关注到我。

Key Signing Party

参加了 AOSCC 2023 Key Signing Party,谢谢以下 PGP 使用者为我签名。

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
$ gpg --fingerprint --with-subkey-fingerprint --list-signatures 293B93D8A471059F85D716A65BA92099D9BE2DAA | sed -e 's/@/ at /g' -e 's/\./ dot /g'
pub ed25519 2023-01-01 [SC] [expires: 2030-01-01]
293B 93D8 A471 059F 85D7 16A6 5BA9 2099 D9BE 2DAA
uid [ultimate] Misaka13514 <Misaka13514 at gmail dot com>
sig 3 5BA92099D9BE2DAA 2023-01-01 [self-signature]
sig 3 189BB387CF3AD95F 2023-01-01 欠陥電気RadioNoise (御坂13514号のECC鍵) <Misaka13514 at gmail dot com>
sig 3A1F06DFCA34ECE5 2023-07-17 CharlieYu4994 <charlieyu4994 at lassi-cat dot cn>
sig BF2CA8CDB1722943 2023-07-17 Canarypwn (Canarypwn) <canarypwn at aosc dot io>
sig 1 6F4C5AF537D3C301 2023-07-17 Mike Yuan (YHNdnzj) <me at yhndnzj dot com>
sig C111949073FC0F67 2023-07-17 Jiaxun Yang <jiaxun dot yang at flygoat dot com>
sig 2 15F4180E73787863 2023-07-18 Coelacanthus <CoelacanthusHex at gmail dot com>
sig 2 BFF89D4FFF7FAD1C 2023-07-20 Xinhui Yang <cyan at cyano dot uk>
sig 2 020921FE312A15B1 2023-07-20 MiaoTony (MiaoTony's Outlook) <miaotony at outlook dot com>
sig 3 12FC7165238A4CB1 2023-07-23 柏园猫猫 <i at nekomoe dot xyz>
sig 1 530163CFEC309530 2023-07-23 liang yongxiang <tanekliang at gmail dot com>
uid [ultimate] Misaka_0x34ca <admin at atri dot tk>
sig 3 5BA92099D9BE2DAA 2023-01-01 [self-signature]
sig 3 189BB387CF3AD95F 2023-01-01 欠陥電気RadioNoise (御坂13514号のECC鍵) <Misaka13514 at gmail dot com>
sig 3A1F06DFCA34ECE5 2023-07-17 CharlieYu4994 <charlieyu4994 at lassi-cat dot cn>
sig BF2CA8CDB1722943 2023-07-17 Canarypwn (Canarypwn) <canarypwn at aosc dot io>
sig 1 6F4C5AF537D3C301 2023-07-17 Mike Yuan (YHNdnzj) <me at yhndnzj dot com>
sig C111949073FC0F67 2023-07-17 Jiaxun Yang <jiaxun dot yang at flygoat dot com>
sig 2 15F4180E73787863 2023-07-18 Coelacanthus <CoelacanthusHex at gmail dot com>
sig 2 BFF89D4FFF7FAD1C 2023-07-20 Xinhui Yang <cyan at cyano dot uk>
sig 2 020921FE312A15B1 2023-07-20 MiaoTony (MiaoTony's Outlook) <miaotony at outlook dot com>
sig 3 12FC7165238A4CB1 2023-07-23 柏园猫猫 <i at nekomoe dot xyz>
sig 1 530163CFEC309530 2023-07-23 liang yongxiang <tanekliang at gmail dot com>
sub cv25519 2023-01-01 [E] [expires: 2030-01-01]
60B8 CFF2 C1E8 2F6B 2627 A1D7 6B71 F8EC 272C FDCF
sig 5BA92099D9BE2DAA 2023-01-01 [self-signature]
sub ed25519 2023-01-01 [A] [expires: 2030-01-01]
64EB C7BB 5FCB 344C 088D 8E11 FB30 5A67 8861 3226
sig 5BA92099D9BE2DAA 2023-01-01 [self-signature]
sub ed25519 2023-01-01 [S] [expires: 2030-01-01]
D633 F658 4ECB 7AD7 6216 6144 B4F6 D57F 0FC9 507E
sig 5BA92099D9BE2DAA 2023-01-01 [self-signature]

我写了一个程序绘制有向图用来可视化这次 Signing Party 参与者的信任关系。在第一张图中 sig0 和 sig1 不显示。

gpg-sign-party-1
gpg-sign-party-2
gpg-sign-party-3

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
import subprocess
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image


# 执行GnuPG命令并获取输出
def run_gpg_command(args):
return subprocess.check_output(['gpg'] + args, text=True)


# 读取GnuPG密钥环
gpg_output = run_gpg_command([
'--homedir', '~/AOSCC-Sign/gpg/', '--list-signatures',
'--with-colons'
])
gpg_data = gpg_output.strip().split('\n')

# 创建有向图
graph = nx.MultiDiGraph()

key_id = None
# 解析信任网络并添加边
for line in gpg_data:
if "User ID not found" in line:
continue

parts = line.split(':')
record_type = parts[0]

if record_type == 'pub':
key_id = parts[4]
graph.add_node(key_id) # 添加节点(GnuPG密钥)
elif record_type == 'sig':
signer_key_id = parts[4]
if signer_key_id != key_id:
if not graph.has_edge(signer_key_id, key_id):
trust_level = int(parts[10][1])
if trust_level < 2:
continue
graph.add_edge(signer_key_id, key_id,
trust_level=trust_level) # 添加边(签名关系)
print(f"{signer_key_id} -> {key_id} ({trust_level})")

# 去除孤立节点
graph.remove_nodes_from(list(nx.isolates(graph)))

# 设置节点的图标并在节点下方标注节点ID
avatars_directory = "avatars/"

for node_id in graph.nodes:
avatar_path = avatars_directory + f"{node_id}.jpg"
avatar_image = Image.open(avatar_path)

graph.nodes[node_id]["image"] = avatar_image # 设置节点图标
graph.nodes[node_id]["label"] = node_id # 在节点下方标注节点ID

# 使用Kamada-Kawai布局设置节点位置
pos = nx.kamada_kawai_layout(graph)


# 添加微小的随机偏移,以避免节点图标的重叠
def add_random_noise(pos, scale=0.01):
noisy_pos = {}
for node, (x, y) in pos.items():
noise_x = np.random.uniform(-scale, scale)
noise_y = np.random.uniform(-scale, scale)
noisy_pos[node] = (x + noise_x, y + noise_y)
return noisy_pos


# 判断节点图标是否重叠
def has_overlapping_labels(pos, labels, threshold=0.03):
for u, p1 in pos.items():
for v, p2 in pos.items():
if u != v and np.linalg.norm(np.array(p1) -
np.array(p2)) < threshold:
if labels[u] != labels[v]:
return True
return False


# 迭代调整节点位置,直到没有图标重叠
iteration = 0
while has_overlapping_labels(pos, graph.nodes()):
pos = add_random_noise(pos, scale=0.02) # 调整的幅度可以根据实际情况调整
iteration += 1

if iteration >= 100:
print("无法消除图标重叠,退出迭代。")
break

# 提升图片分辨率
plt.figure(figsize=(16, 16), dpi=300)

# 绘制节点图标
for node, (x, y) in pos.items():
image = graph.nodes[node]["image"]
delta = 0.05
plt.imshow(image, extent=[x - delta, x + delta, y - delta, y + delta])

# 绘制节点ID
node_labels = {node: node for node in graph.nodes}

# 设置节点标签的位置偏移量,以避免标签与节点图标重叠
label_pos = {node: (x, y - 0.08) for node, (x, y) in pos.items()}

# 根据trust_level选择边的颜色
edge_colors = dict(zip(list(range(4)), ['lightgray', 'gray', 'darkgray', 'black']))

for u, v, data in graph.edges(data=True):
trust_level = data['trust_level']
edge_color = edge_colors.get(trust_level, 'gray')

# 绘制曲线边,通过设置connectionstyle参数来实现
connection_style = f"arc3,rad=0.2"
# 设置线条粗细为1.0
nx.draw_networkx_edges(graph,
pos,
edgelist=[(u, v)],
edge_color=edge_color,
width=1,
alpha=0.7,
arrowsize=15,
connectionstyle=connection_style)

# 使用offset_text来避免标签在边缘被截断
for node, label in node_labels.items():
x, y = label_pos[node]
plt.text(x, y, label, fontsize=10, ha='center', va='center', zorder=10)

# 调整绘图区域大小,添加边距以防止标签在边缘被截断
plt.xlim(-1.1, 1.1)
plt.ylim(-1.1, 1.1)

plt.axis('off')
plt.savefig('gpg-graph.png', bbox_inches='tight', pad_inches=0, dpi=300)
plt.show()

stickers

sticker-aoscc
sticker-jlu

拿到了 AOSCC、JLU、SHLUG 发放的贴纸和买菜兜。

今年拿到的一些其它东西

YubiKey

yubikey

收到了 Cloudflare Yubikey 打折活动时与群友拼车购买的 YubiKey。谢谢 @Edison,帮助我从韩国低价转运 YubiKey,还送了小零食和明信片,爱了。

今年我更换了新的 PGP 密钥,并开始使用 YubiKey,在这一年里,我使用 YubiKey 创建了多达 578 个 PGP 签名。今年和 @baiyuanneko 互签了 sig3。

Hacktoberfest 2022

sticker-hacktoberfest

收到了 Hacktoberfest 2022 赠送的 T 恤和贴纸。虽然今年的活动不送实体奖品了,但我仍然参加了。

CMU 问卷

有一天邮箱里多了个 CMU 发的问卷,看着不像钓鱼就填了,然后 win 了 1 of 4 $100 Amazon gift cards,也许是全年唯一的 lucky moment?总之谢谢 CMU 了。我把它用在买 SAMSUNG 980 PRO 2TB 上了,这下笔记本的最后一片也完整了,原来的旧硬盘给我的 HomeLab 用了。

@baiyuanneko 的礼物

是我平时不舍得买的一些二次元周边,但是收到会很开心,谢谢 @baiyuanneko。

@novule 的礼物

同笔记本型号 Linux 用户,帮忙买了个编程器提取了个 BIOS 救砖,收到了 ¥100 的京东卡,谢谢你在这个机器的使用(折腾)上带领着我。

ACGN

anime-tier-list

今年看了很多番,就不一一点评了,使用 aisuneko/AnimeTierList 生成了一张我的评分等级图,谢谢 @aisuneko。

syncplay

今年开始尝试与香子兰群友使用 syncplay 同步看番,谢谢 @baiyuanneko 和 @scientificworld,很喜欢实时聊天。

minecraft-1
minecraft-2

对不起香子兰群友,我要退游了。感觉 Minecraft 越来越没意思,玩来玩去也就那么些玩法,对它的热情也慢慢消退了。最后再玩一天,今年就不玩了。

其它今年玩过的游戏有

  • ふゆから、くるる。 7/10
  • 天使 ☆ 騒々 RE-BOOT! 8/10
  • Cyberpunk 2077 8/10

因为 Twitter 不给继续免费用 API,插画收藏受的影响比较大,没有做统计数据。

未来计划

想润日本,金币不多,专业课成绩不是很好,还没有决定继续 EE 还是转 CS,希望得到有经验的读者的指导。润其它地方也可以,就是没什么信心。


谢谢你读到这里,祝你新年快乐,明年见。