-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.xml
264 lines (264 loc) · 254 KB
/
index.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
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Hikaru's Blog</title>
<link>https://www.zhhuu.top/</link>
<description>Recent content on Hikaru's Blog</description>
<generator>Hugo</generator>
<language>zh-CN</language>
<lastBuildDate>Mon, 27 Jan 2025 20:23:54 +0800</lastBuildDate>
<atom:link href="https://www.zhhuu.top/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>杂谈:调整心态和怎么做</title>
<link>https://www.zhhuu.top/posts/thoughts2024/</link>
<pubDate>Mon, 27 Jan 2025 20:23:54 +0800</pubDate>
<guid>https://www.zhhuu.top/posts/thoughts2024/</guid>
<description><p>在意气风发的时候容易展现锐气,在失魂落魄的时候容易多愁善感。我发现我不太喜欢各种容易存在比较的活动,特别是在我容易失败或落下风的活动中,也许是我害怕失败。但我现在还有一个想法,我想尽量避免比较,因为比较会带来输赢,赢多了让人自大,输多了容易影响心情,让人产生嫉妒、甚至让人抓狂。而相反地,避免比较能够减少这些不好的情感产生,让注意力回归到自己身上,专注于自己的进度和计划;而不是将目光放到别人身上,不停地比较,让自己焦虑。做好自己就很好了。</p>
<h1 id="面对比较心理寻找平衡之道">面对比较心理:寻找平衡之道</h1>
<p>研究生阶段的学术环境与本科时期有着显著的不同。在本科和之前的阶段,分数与排名构成了评价体系的核心,这种以分数和排名为中心的体系在无形之中塑造了一种竞争意识,所以这么多年下来形成的潜意识就是追赶,特别是排名上的追赶。</p>
<p>然而,进入研究生阶段,研究方向的细化以及学术圈子的缩小,使得原本以排名为导向的竞争模式逐渐失效。我相信在这种体系下,我已经逐步构建了一套适合自身发展的模式,并尽可能地融入了有意义的内容。但是因为总体的评价体系发生了变化,所以使得这套自驱体系随之失效/崩溃。</p>
<p>而由于这么多年的惯性,身处人数有限的研究小组,与同门进行比较的心理便容易滋生。特别是当同门进展迅速,而自身进度相对滞后时,压力与自我怀疑也随之而来。不得不承认,这种比较所带来的负面影响是不容忽视的。在之前的经历中,我一直奉行“合适才是最好的”和“宁做虎头不做凤尾”的原则,这样不仅巧妙地避开了困境,还能依靠环境建立驱动力。另一方面,这也表明容错率其实很高,只要不是太差,都有可能需要处理 underqualified 的问题,所以也总是要学会怎么处理这种情况,调整心态。</p>
<p>前些日子,我在小红书上偶然看到一篇探讨内驱力的帖子,大意是“自驱力强的人关注自己的进步,而不是关注他人”。这句话点明了比较的弊端:过度关注他人,本质上是一种比较,而比较往往会导致负面情绪。每个人的学习节奏与进程不尽相同,有人擅长快速突破,也有人更适合稳扎稳打。倘若一味地将自身的不足与他人的长处相比,眼里就看的永远都是最好的别人们,看到是最差的自己,则很容易陷入自我否定的循环之中。所以更好的一个状态还是达到关注于 inner attention,尽管道理如此,但在实践中却难以完全避免比较。长久以来的竞争惯性使得人们习惯于关注周围人的动态,并试图从中获取信息与动力。</p>
<p>这就产生了一个矛盾:比较一方面会引发焦虑与压力,另一方面却也能在一定程度上提供前进的动力。特别是对于那些在学习后期容易动力不足的人而言,彻底摒弃比较或许会导致松懈。那么,如何在研究生阶段找到一个平衡点呢?是彻底告别比较,专注于自身,还是适度保留比较,将其作为一种激励?这个问题,恐怕没有一个普适的答案,还是根据自身的实际情况进行摸索与调整,不断尝试,才能找到最适合自己的前进方式。虽然时间上可能也有压力,但是我觉得还是维持好的心态和心理健康比较重要。意识到问题的时候就已经迈出了解决问题的第一步。</p>
<p>总之,研究生阶段的学习,不仅仅是知识的积累,更是一种心态的调整,是一种自我认知的提升。在这个过程中,不断地调整自己的心态,找到适合自己的学习方式,才能在这个阶段走得更远。(谢谢 GPT,这段结尾写得真好 😘)</p>
<h1 id="隐形的财富成绩之外的能力与多元发展的力量">隐形的财富:成绩之外的能力与多元发展的力量</h1>
<p>在传统的评价体系中,成绩往往被视为衡量个人能力的核心指标。然而,在成绩之外,还存在着许多隐形的财富——那些难以被量化却同样重要的能力。这些能力也参与构成了一个人的综合实力,并且我认为它们在很多时候至关重要。</p>
<p>记得高中时期,我们曾做过一次职业优势测评(似乎是霍兰德职业兴趣测试)。测试结果表明,兴趣类型相近的人可以形成合力,在职业发展上更具优势。对于这个观点,我至今仍持保留态度。当一个人在职业方面表现突出时,往往锐气十足;而当他在职业上遭遇挫折时,如果没有其他兴趣作为精神的避风港,又缺乏良好的自我调节能力,那么他很可能更容易崩溃。相反,我认为分散的兴趣具有其独特的价值。比如,一个理工科背景的人如果拥有良好的审美,这在另一个维度上将构成巨大的优势,而这种优势是其他人难以轻易弥补的(例如,许多理工科学生甚至缺乏基本的美术素养,连排版都一塌糊涂)。此外,当遇到挫折时,多元的兴趣爱好可以提供有效的缓冲,帮助个体更快地调整状态,或者更好地承受持续的压力。当然,这也可能意味着在某些时候难以与他人找到共同话题,就像他们在热烈讨论着英雄联盟,而你却在思考平面设计和排版;他们随口哼唱着流行歌曲,而你却不知道刘德华是歌手还是演员(查了一下好像都是)。</p>
<p>另一方面,即使身处逆境,也要注重经验的积累,并将所学所做进行有效的固化——建立属于自己的知识索引。这既方便自己日后学习、参考、整理和归类,也便于快速回顾和上手使用。让时间的投入更高效地转化为自身的资产和财富。</p>
<h1 id="从一次做对到反复修正实践中的调整">从“一次做对”到“反复修正”:实践中的调整</h1>
<p>运营管理里面通常强调一次就做对,认为这样最节省时间。学习了这个理论后,我也尽可能多地在工作和学习中去用,希望能提高效率。但是在实际的项目工作中,却往往存在一个多方不断“battle”,交换信息、来回修正的过程,有点类似德尔菲法。通过不断地改,最后才能得到一个多方比较认可的方案。这就和之前运营管理里面强调的 “一次做对” 的原则有些冲突。因为第一次做得再好,其实在后续的 “battle” 过程中还是免不了要改。所以这是一个会让人感到困惑和迷茫的地方。所以感觉读研的心态和本科大作业/考试一次就做好的这种心态就不太一样,因为项目涉及到多个人,而不再是自己一个人的工作,而且还包含多方面的不确定性。</p>
<p>其实,不只是团队项目,我逐渐发现自己的事情也是这样。在现实中,越复杂的事情越难保证一次就能全做对,总是要改来改去。如果改得不多还好,一旦需要大改,那之前做得太认真也可能白费。所以,倒不如先粗略地做一下,把整体先跑起来,然后有时间再慢慢改。(如果实在没时间也就罢了,天好像也塌不下来。这点有待验证,但我目前相信是这样的 ✅)</p>
<p><img src="./upsidedown_olympic_flag.webp" alt="巴黎奥运会开幕式旗升反了"></p>
<blockquote>
<p>巴黎奥运会开幕式上,由于工作人员操作失误,奥运会旗帜被反挂</p>
</blockquote>
<p>因此,有必要重新考虑工作量、时间限制,重新决定内容的质量要求,而不是一味要求自己做到完美。</p></description>
</item>
<item>
<title>梯度下降</title>
<link>https://www.zhhuu.top/posts/gradient-descent/</link>
<pubDate>Mon, 09 Dec 2024 11:42:28 +0800</pubDate>
<guid>https://www.zhhuu.top/posts/gradient-descent/</guid>
<description><h1 id="梯度下降的过程">梯度下降的过程</h1>
<ol>
<li>挑选一个初始值 $w_0$</li>
<li>重复迭代参数 $w_{t+1}=w_t-\eta \frac {\partial L(w_t)}{\partial w_t}$,其中:
<ul>
<li>$w_t$ 是第 t 次迭代的参数</li>
<li>$\eta$ 是学习率</li>
<li>$\frac {\partial L(w_t)}{\partial w_t}$ 是损失函数 $L(w)$ 对参数 $w$ 的梯度</li>
</ul>
</li>
<li>沿梯度方向将增加损失函数值,因此需要取负梯度方向,即变化量为 $-\eta \frac {\partial L(w_t)}{\partial w_t}$</li>
</ol>
<p>学习率 $\eta$:步长的超参数。</p>
<h1 id="示例">示例</h1>
<h2 id="优化-x">优化 x²</h2>
<p>💡 以函数求极值的视角来看</p>
<p>假设损失函数为 $L(w)=w^2$,则 $\frac {\partial L(w)}{\partial w}=2w$。</p>
<ol>
<li>初始值 $w_0=5$</li>
<li>学习率 $\eta=0.2$</li>
<li>迭代次数 5 次</li>
<li>求解 $w_5$</li>
</ol>
<p>这里还默认设置了一个停止条件,即当 $|w_{t+1}-w_t|&lt;0.01$ 时认为已经收敛,停止迭代。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">def</span> <span style="color:#89b4fa">gd</span>(w, lr):
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span> <span style="color:#cba6f7">while</span> <span style="color:#89dceb">abs</span>(w <span style="color:#89dceb;font-weight:bold">-</span> lr <span style="color:#89dceb;font-weight:bold">*</span> <span style="color:#fab387">2</span> <span style="color:#89dceb;font-weight:bold">*</span> w) <span style="color:#89dceb;font-weight:bold">&gt;</span> <span style="color:#fab387">0.01</span>:
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> w <span style="color:#89dceb;font-weight:bold">=</span> w <span style="color:#89dceb;font-weight:bold">-</span> lr <span style="color:#89dceb;font-weight:bold">*</span> <span style="color:#fab387">2</span> <span style="color:#89dceb;font-weight:bold">*</span> w
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span> <span style="color:#89dceb">print</span>(w)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>gd(<span style="color:#fab387">5</span>, <span style="color:#fab387">0.2</span>) <span style="color:#6c7086;font-style:italic"># 初始值 5,学习率 0.2</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span>3.0
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span>1.7999999999999998
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span>1.0799999999999998
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span>0.6479999999999999
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span>0.3887999999999999
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span>0.23327999999999993
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span>...
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span>0.0005077997833420796
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span>0.0003046798700052478
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span>0.00018280792200314866
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span>0.0001096847532018892
</span></span></code></pre></div><h2 id="yaxb-拟合">y=ax+b 拟合</h2>
<p>📄<a href="gd_test.ipynb">代码附件</a></p></description>
</item>
<item>
<title>启用新主题</title>
<link>https://www.zhhuu.top/posts/new-theme/</link>
<pubDate>Sun, 21 Jul 2024 14:00:00 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/new-theme/</guid>
<description><h1 id="缘由">缘由</h1>
<p>旧主题来源于 2017 年的<a href="https://github.com/iblh/hexo-theme-material">hexo-theme-material</a>,但是作者很早已经停止维护。后来我自己修改了一些样式,虽然观感有点提升,但是还是有很多问题,比如我一直没有找到一个很好的文字排版显示样式,代码高亮、数学公式显示等等都多少有点问题。而且之前的网站维护经验不足,添加了一堆有的没的 CDN 外链,不知道什么时候就会失效,维护起来有点费力。所以我决定换一个新的主题,降低维护难度,把需要的资源和链接全部迁移到 GitHub Page 和 Cloudflare 上,顺便尝试一下 Hugo。</p>
<h2 id="旧主题样式">旧主题样式</h2>
<p><img src="old-theme-1.webp" alt="旧主题-主页">
<img src="old-theme-2.webp" alt="旧主题-banner"></p>
<blockquote>
<p>其实旧主题整体上还是很好看的,但是加载上也是莫名其妙有点慢</p>
</blockquote>
<h2 id="新主题样式">新主题样式</h2>
<p><img src="new-theme.webp" alt="新主题-主页"></p>
<p>换的另一个原因是在 Hugo theme 上逛了一圈好不容易看中了一个主题,<a href="https://github.com/fauzanmy/pehtheme-hugo">pehtheme-hugo</a></p>
<h1 id="过程">过程</h1>
<p>hexo 换成 hugo 还是有一些区别,比如帖子格式得重新设置,图片存放位置等都要做相应调整,全部放到文章对应的文件夹下面等。费了一点力气,好在不多,顺便也删除了一些没有什么作用的历史文章,留下的要么感觉比较实用,要么留作纪念。</p>
<p>换这个主题也是花费了一些时间的,主要是在我手上压了一段时间。一方面是最近比较忙,另一方面是时间主要花在调整主题功能上面了。用惯了 VuePress 后感觉这个主题功能缺失有点多,比如目录、评论、搜索、数学公式显示这些都没有,感觉比较塑料。</p>
<p>但是这个主题的优点是简洁好看,和其他人的主题看上去也不太一样(比如经典的 Hexo Next 系列及其衍生主题,以及屏幕樱花乱飘、点击还会跳出来彩色字的那种),而且还是 Material Design 3 的设计,所以还是没有办法,选择了这个(我之前爆改 Hexo 主题也是因为有的地方看着不合适)。</p>
<p>在迁移的过程中非常感谢自己之前抽空学了 Git 和 PowerShell 的一些基本操作,省下了很多“体力劳动”耗费的时间,如通过命令行批量将文件设置为指定格式,逐步记录对于新主题的修改。说明<a href="https://missing-semester-cn.github.io/">《计算机教育中缺失的一课》</a>还是非常实用的(可以把 PowerShell 看成 Bash)。还有以前自己学的 TailwindCSS 在快速修改了主题的一些样式上也起到了一些作用,不过其实大多都还要归功于 ChatGPT,它确实是一个很好的帮手(工具人)。</p>
<p>当然现在有的功能还是没来得及添加,比如评论,也不知道以后加不加,看情况吧。</p>
<h1 id="规划">规划</h1>
<p>其实最近不是很想动 Blog 这边了,感觉时间也不是很多,可以看到我 2022 年左右就已经断更了。一是感觉没有什么很特别的东西可以共享出来,一些碎碎念都放到伊龙马的平台上了;二是这段时间虽然也有在写,但是主要都放上 Obsidian 上面变成了自己的知识库,大多是课程笔记之类的东西(比如 6.0001、6.0002 之类的学习笔记),虽然比较实用,但是和网上太多重复感觉再放上来也没什么意义。</p>
<p>不过具体也再看吧,也许以后有的 Obsidian 内容会想着放上来,作为某种知识的整理。</p></description>
</item>
<item>
<title>本科学习生活工作流</title>
<link>https://www.zhhuu.top/posts/undergraduate-workflow/</link>
<pubDate>Fri, 03 Feb 2023 23:00:00 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/undergraduate-workflow/</guid>
<description><blockquote>
<p>最后更新于 2025/2/2</p>
</blockquote>
<p>写这篇文章总结的想法很早就有了,但是一直没有动笔写,也不知道应该以什么形式写下来。也就是晚上 11 点有动力和灵感写一篇这样的文章,总结一下大学两年半使用电子产品(硬件和软件)进行学习和生活的状态。探索并梳理工作流的新鲜感让我觉得很爽,这样的折腾可能也是一直促进我学习的因素之一。</p>
<p>而且像我这样买 Surface Pro 还用了那么久的人估计也不多,到了大学教室里面一个专业也很难见到一个用 Surface 的人,更别说我这种把它当平板用的了,就像当年 Windows Phone 的 1%🤣。因此,也顺便分享一下大学过程中随着 Windows Update 为 Windows 带来日新月异的体验(bug)后我使用 Surface 的感受。</p>
<p>此外,学习过程中也积累了一些比较好用的软件 🤣 我的专业是物流工程,虽然后面介绍的软件有一部分可能是计算机相关专业同学比较熟悉的软件,但并不影响使用和享受其带来的便捷。所以,虽然介绍的方向可能偏工科专业,但是我认为其实也适合很多其他专业的同学。毕竟,在如今这个时代,什么都离不开电脑、手机和云计算。特别是上云这件事,有时候能减少很多麻烦。</p>
<h1 id="环境">环境</h1>
<p>下面我介绍一下我在大学前三年中使用的 EDC(硬件)和日常生活和学习中使用到的软件。</p>
<h2 id="硬件设备">硬件设备</h2>
<p>按照购买时间排序:</p>
<ul>
<li>平板:Surface Pro 6,高三的时候买的。升级了 Windows 11,耗电多了、速度慢了,但是 Win11 的触控优化对于 Win10 是质的飞跃。升级了 Win11 以后,随着触控键盘可以缩小尺寸等针对平板的优化,能够脱离 Surface Type Cover 使用的场景变多了。虽然很多场景还是必须要键盘鼠标,但是对于看视频看资料写写画画之类的场景确实已经能够脱离 Type Cover 了。(不过现在已经刷回 Windows 10 了)</li>
<li>手机:小米 10,资本弃舰不多说。</li>
<li>电脑:ROG 幻 15,大一下学期买的,当时正好显卡荒,本子都被挖矿的抢走了,笔记本加价都不一定能买到,拯救者被抢疯了。当时 10999 抢到 R9+16G+1T+3060 还是很幸运的。</li>
</ul>
<h2 id="软件">软件</h2>
<p>高频使用的学习软件:</p>
<ul>
<li>
<p>OneNote:笔记软件,功能很丰富,我在电脑、平板、手机(以下简称“全平台”)上都有安装,方便各种场合使用。具体场景包括:考试前没带平板拿手机多看两眼笔记、在上高年级课程的时候老师突然提问高数概率论相关知识,迅速查找相关笔记。电脑上主要往上面记录打字类型的笔记、平板主要往上写、手机主要在没带平板或电脑的时候看,这样就全平台任意时候都能直接参考记录下来的笔记。电脑版 OneNote(非 OneNote for Windows10,是 Office 版本的 OneNote)可以将笔记保存到本地,方便进行备份,不用担心巨硬跑路。</p></description>
</item>
<item>
<title>MicroCity内置的LUA函数</title>
<link>https://www.zhhuu.top/posts/lua-microcity/</link>
<pubDate>Fri, 23 Sep 2022 16:20:36 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/lua-microcity/</guid>
<description><p>物流信息管理课程MicroCity学习笔记</p>
<h1 id="lua的小特性集合">Lua的小特性:集合</h1>
<p>虽然Lua里面把它自己的数组称作<code>table</code>,但是我认为这个数据结构更类似于Python的集合或者json,里面可以存储任何东西,不受结构约束。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-lua" data-lang="lua"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>collection <span style="color:#89dceb;font-weight:bold">=</span> {{<span style="color:#a6e3a1">&#34;a&#34;</span>, <span style="color:#fab387">1</span>, <span style="color:#fab387">2</span>}, <span style="color:#a6e3a1">&#34;abc&#34;</span>, {<span style="color:#fab387">2</span>, <span style="color:#fab387">3</span>}}
</span></span></code></pre></div><p>如果需要查询数组的长度,只需要在数组名前面添加<code>#</code>即可得到</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-lua" data-lang="lua"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>list <span style="color:#89dceb;font-weight:bold">=</span> {<span style="color:#fab387">1</span>, <span style="color:#fab387">2</span>, <span style="color:#fab387">3</span>, <span style="color:#fab387">4</span>, <span style="color:#fab387">5</span>}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span><span style="color:#cba6f7">for</span> i<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#fab387">1</span>,<span style="color:#89dceb;font-weight:bold">#</span>list <span style="color:#cba6f7">do</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> print(list[i])
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span><span style="color:#cba6f7">end</span>
</span></span></code></pre></div><p>Lua的数组(集合)下标从<code>1</code>开始,不同于C类语言的<code>0</code></p>
<h1 id="microcity的内置函数">MicroCity的内置函数</h1>
<p>为什么要写这个?因为MicroCity自带的编辑器相比较于“现代”的编辑器来说还是不够好用(如VSCode等)。我已经遇到了很多同学自己无法解决,找我排除代码中存在的问题。而这些问题98%都是由于语法问题,如缺少关键字(如<code>end</code>、<code>then</code>等)。但是我用VSCode,Lua插件一般都会直接给我自动补全。就算有什么问题也会高亮,或者使用快捷键格式化代码的时候也能看出问题。</p>
<p>我认为,相比于更加现代的编辑器,MicroCity自带的编辑器“ScriptEditor”由于语法问题的标示不明显、格式化代码功能缺失等使用便利性上的问题,特别是对于Lua语言不熟练的新手,造成代码编写的错误率更高。</p>
<blockquote>
<p>说明:也许其中提到的功能存在于内在编辑器中,但是我反正是没有找到。</p>
</blockquote>
<p>对于我个人来说,VSCode的操作快捷键和各种特性我已经很熟悉,所以我也更倾向于使用VSCode编写Lua语言的脚本。但是对于使用VSCode编写适用于MicroCity运行的Lua脚本(<code>.mcs</code>)而言,由于MicroCity内置了一些函数,无法在VSCode上高亮显示,因此需要特别整理出来方便日后使用。</p>
<h2 id="常用函数">常用函数</h2>
<p>这里的函数不是全集,只是我用了多少就写多少😂
全部图形函数及使用方法参见 <a href="https://github.com/microcity/microcity.github.io/blob/main/docs/4.3_shapes_and_tables.md">MicroCity文档(英文) 4.3 Shapes And Tables</a></p>
<blockquote>
<p>在本页中浏览可以使用右上角的目录列表快速转到对应函数。</p>
</blockquote>
<h3 id="图形">图形</h3>
<table>
 <thead>
 <tr>
 <th>函数</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><a href="#Open"><code>Open</code></a></td>
 <td>打开图形文件,并获取图形文件对象</td>
 </tr>
 <tr>
 <td><a href="#Update"><code>Update</code></a></td>
 <td>刷新图形</td>
 </tr>
 </tbody>
</table>
<h4 id="open">Open</h4>
<p><code>Open(&quot;路径&quot;)</code>,返回图形文件对象。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-lua" data-lang="lua"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>countryObject <span style="color:#89dceb;font-weight:bold">=</span> Open(<span style="color:#a6e3a1">&#34;countries.shp&#34;</span>)
</span></span></code></pre></div><h4 id="update">Update</h4>
<p><code>Update([图形对象])</code>,刷新图形对象,显示最新的图形。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-lua" data-lang="lua"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>Update(countryGRD)
</span></span></code></pre></div><h3 id="矢量图">矢量图</h3>
<table>
 <thead>
 <tr>
 <th>函数</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><a href="#GetRecCount"><code>GetRecCount</code></a></td>
 <td>获取图形文件中记录的图形对象个数</td>
 </tr>
 <tr>
 <td><a href="#GetShape"><code>GetShape</code></a></td>
 <td>从图形文件对象中获取图形对象</td>
 </tr>
 <tr>
 <td><a href="#GetPartCount"><code>GetPartCount</code></a></td>
 <td>获取对应图形对象分为多少个部分</td>
 </tr>
 <tr>
 <td><a href="#GetPointCount"><code>GetPointCount</code></a></td>
 <td>获取对应图形对象(部分)有多少个点</td>
 </tr>
 <tr>
 <td><a href="#GetPointXY"><code>GetPointXY</code></a></td>
 <td>获取图形对象指定部分、指定点编号的XY坐标</td>
 </tr>
 <tr>
 <td><a href="#GetValue"><code>GetValue</code></a></td>
 <td>获取图形对象的属性值</td>
 </tr>
 <tr>
 <td><a href="#SetValue"><code>SetValue</code></a></td>
 <td>设置图形对象的属性值</td>
 </tr>
 <tr>
 <td><a href="#GetShapeLen"><code>GetShapeLen</code></a></td>
 <td>获取图形对象的长度</td>
 </tr>
 <tr>
 <td><a href="#GetDistance"><code>GetDistance</code></a></td>
 <td>获取坐标点之间的距离</td>
 </tr>
 </tbody>
</table>
<h4 id="getreccount">GetRecCount</h4>
<p><code>GetRecCount([图形文件对象])</code>,返回图形文件中记录的图形对象个数。</p></description>
</item>
<item>
<title>使用Python编写遗传算法</title>
<link>https://www.zhhuu.top/posts/ga/</link>
<pubDate>Wed, 13 Jul 2022 12:07:30 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/ga/</guid>
<description><p>算法设计,附源码</p>
<h1 id="概述">概述</h1>
<p>当涉及非线性规划问题或者难以在短时间内求得满意解的线性规划问题,可以通过求其近似解(或满意解)而非精确解。使用遗传算法求解近似解所消耗的时间远少于求解精确解,多数时候近似解的效果都可以接受。
遗传算法的优势体现在:在小规模问题上,遗传算法求解得到的通常是精确解;而在大规模问题上,遗传算法通常可以通过较短的时间求得精确解。
<img src="ga1.webp" alt="ga"></p>
<blockquote>
<p>同样的问题通过遗传算法求解近似解和线性规划求解精确解,遗传算法花费的时间显著短于精确算法。</p>
</blockquote>
<table>
 <thead>
 <tr>
 <th>算法</th>
 <th>时长</th>
 <th>结果(此处结果越小越好)</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td>遗传算法</td>
 <td>123s (2m03s)</td>
 <td>371.06</td>
 </tr>
 <tr>
 <td>精确算法</td>
 <td>201s (3m21s)</td>
 <td>367.07</td>
 </tr>
 </tbody>
</table>
<h1 id="模型描述">模型描述</h1>
<h2 id="目标函数">目标函数</h2>
<p>$minf=P\sum_{k=1}^K\sum_{i=1}^N\sum_{j=1}^Nx_{kij}d_{ij}+\frac{P_a}{Q}\sum_{i=1}^N\sum_{j=1}^N(y_{ij}+z_{ij})x_{kij}d_{ij}+P_m\sum_{k=1}^K\sum_{i=1}^N\sum_{j=M}^Nx_{kij}q_j$</p>
<h2 id="约束方程">约束方程</h2>
<div>
$$
s.t.\left\{ 
\begin{array}{**lr**} 
\sum_{k=1}^K\sum_{i=1}^Nx_{kij}=1 & j=2,3,...,N \\ 
\sum_{j=1}^Nx_{kij} = \sum_{j=1}^Nx_{kij} & i=1,2,...,N;k=1,2,...,K \\
\sum_{j=1}^Nx_{k1j} \le 1 & k=1,2,...,K \\
y_{ij}+z_{ij} \le Q\sum_{k=1}^Kx_{kij} & i,j=2,3,...,N \\
\sum_{i=1}^N\sum_{j=1}^Nx_{kij}d_{ij} \leq D & k=1,2,...,K \\
\sum_{j=1}^Nz_{ij}-\sum_{j=1}^Nz_{ij}=p_i & i=2,3,...,N \\
\sum_{i=1}^Nx_{kii}=0 & j=1,2,...,N \\
\sum_{i=2}^N\sum_{j=1}^Nx_{kij} \le V & k=1,2,...,K \\
y_{ij} \ge 0 ,z_{ij} \ge 0 & i,j=1,2,...,N
\end{array} 
\right.
$$
</div>
<h1 id="遗传算法设计">遗传算法设计</h1>
<p>经过本次从0开始编写遗传算法求解模型,我将遗传算法划分为几个模块(步骤)</p></description>
</item>
<item>
<title>优化软件语法</title>
<link>https://www.zhhuu.top/posts/optimization-code/</link>
<pubDate>Tue, 12 Jul 2022 22:22:54 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/optimization-code/</guid>
<description><p>最近上课自学了CPLEX,感觉和之前浅浅接触过的LINGO的语法很像。记录一下以免以后忘了怎么用。此外,还在其中记录一下本次自学的遗传算法。</p>
<h1 id="概述">概述</h1>
<p>求解大规模线性优化问题的时候不可能使用单纯形算法一个个地列单纯形表去手算,必须借助计算机求解才能使求解精确解的求解速度在可接受的范围内。可接受的求解时间范围根据每个人的接受情况不同大多分布于3小时或1天之内。此处记录一下之前稍微了解到的LINGO软件的语言、这次自学的CPLEX软件的OPL语言,这两个软件都可以用于求解线性规划问题。</p>
<h1 id="lingo语法">LINGO语法</h1>
<p>LINGO的整个线性规划模型大致可以描述为:</p>
<ul>
<li><a href="#LINGO%E9%9B%86%E5%90%88">集合(Sets)</a></li>
<li><a href="#LINGO%E7%9A%84%E5%8F%98%E9%87%8F">变量(Data)</a></li>
<li><a href="#LINGO%E7%9A%84%E6%A8%A1%E5%9E%8B">模型(Model)</a></li>
</ul>
<h2 id="lingo的集合">LINGO的集合</h2>
<p>先上一段代码</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>sets:
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>	S/1..6/: a, b, d ; // S为1~6的集合,a有6个分量(a1~a6),b、d、e等同理
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>	T/1,2/: e, x, y; // T为1和2组成的集合,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>	U(S,T): c ; // 定义了双下标的集合(c为双下标变量c_ij)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>endsets
</span></span></code></pre></div><p>第2行描述了三个变量<code>abd</code>各自都有6个分量,如<code>a</code>可以看成<code>a1,a2,...,a6</code>,在LINGO里面引用就是<code>a(1),a(2),...,a(6)</code>,剩下两个变量<code>b</code>和<code>d</code>同理。
第四行定义了U为双下标集合,如果将U的每个元素看作U<sub>ij</sub>,那么i的范围为[1,6],整数;j的范围为{1,2}。在LINGO里面引用就是<code>U(i,j)</code>。根据定义的集合,<code>U(i,j)</code>共有12个变量。</p>
<h2 id="lingo的变量">LINGO的变量</h2>
<p>代码</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>data:
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>	a=1 2 3 4 5 6; // 定义a(n)的值
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>	b=1 2 3 4 5 6;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>	x=5 2;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>	y=1 7;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>enddata
</span></span></code></pre></div><p>第2行表示<code>a(1)</code>到<code>a(6)</code>的值分别为1、2、3、4、5、6。</p></description>
</item>
<item>
<title>SQL入门</title>
<link>https://www.zhhuu.top/posts/sql-basics/</link>
<pubDate>Sun, 27 Mar 2022 11:52:50 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/sql-basics/</guid>
<description><div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">SELECT</span> <span style="color:#89dceb;font-weight:bold">*</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span><span style="color:#cba6f7">FROM</span> <span style="color:#cba6f7">table</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span><span style="color:#cba6f7">WHERE</span> <span style="color:#cba6f7">column</span> <span style="color:#cba6f7">LIKE</span> <span style="color:#a6e3a1">&#39;条件&#39;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span><span style="color:#cba6f7">Order</span> <span style="color:#cba6f7">by</span> <span style="color:#fab387">1</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span><span style="color:#cba6f7">LIMIT</span> <span style="color:#fab387">100</span>
</span></span></code></pre></div><h1 id="基本语法">基本语法</h1>
<h2 id="注释">注释</h2>
<p><code>--</code>后面是注释内容。<code>--</code>是sql的注释标志</p>
<h2 id="运算符">运算符</h2>
<table>
 <thead>
 <tr>
 <th>运算符</th>
 <th>说明</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>AND</code></td>
 <td>和,AND的优先级一般会高于OR</td>
 </tr>
 <tr>
 <td><code>OR</code></td>
 <td>或者</td>
 </tr>
 <tr>
 <td><code>NOT</code></td>
 <td>非</td>
 </tr>
 <tr>
 <td><code>()</code></td>
 <td>括号,提高优先级。</td>
 </tr>
 </tbody>
</table>
<h2 id="条件">条件</h2>
<table>
 <thead>
 <tr>
 <th>符号</th>
 <th>含义</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>%</code></td>
 <td>n个任意字符</td>
 </tr>
 <tr>
 <td><code>_</code></td>
 <td>1个任意字符</td>
 </tr>
 </tbody>
</table>
<h2 id="正则表达式">正则表达式</h2>
<p>REGEXP(Regular Expression)</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">WHERE</span> <span style="color:#cba6f7">column</span> REGEXP <span style="color:#a6e3a1">&#39;表达式&#39;</span>
</span></span></code></pre></div><table>
 <thead>
 <tr>
 <th>符号</th>
 <th>意义</th>
 <th>例子</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>^</code></td>
 <td>以..开头</td>
 <td><code>^field</code></td>
 </tr>
 <tr>
 <td><code> $</code></td>
 <td>以..结尾</td>
 <td><code>field$</code></td>
 </tr>
 <tr>
 <td><code>\</code></td>
 <td>或者</td>
 <td><code>^field|mac|rose</code></td>
 </tr>
 <tr>
 <td><code>[]</code></td>
 <td>匹配中括号内的所有字符</td>
 <td><code>[gim]e</code>,匹配ge、ie、me,<br><code>[a-c]d</code>,匹配<br>ad、bd、cd,<br><code>[1-3]</code>同理</td>
 </tr>
 </tbody>
</table>
<blockquote>
<p>注意:由于我使用的markdown编译器无法将表格中的代码中的<code>|</code>识别为符号,以上的<code>|</code>为全角符号</p>
</blockquote>
<h2 id="null">NULL</h2>
<table>
 <thead>
 <tr>
 <th>表达式</th>
 <th>含义</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>IS NULL</code></td>
 <td>值为<code>null</code></td>
 </tr>
 <tr>
 <td><code>IS NOT NULL</code></td>
 <td>值不为<code>null</code></td>
 </tr>
 </tbody>
</table>
<h2 id="as">AS</h2>
<p>在原有数据基础上新建一列数据,或者理解为处理完原有列数据填入新一列中</p></description>
</item>
<item>
<title>C# Task</title>
<link>https://www.zhhuu.top/posts/csharp-task/</link>
<pubDate>Fri, 25 Mar 2022 11:56:41 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/csharp-task/</guid>
<description><h1 id="task">Task</h1>
<p>线程的问题:线程(Thread)是用来创建并发的一种低级别工具,尤其在于以下方面有一些限制:</p>
<ul>
<li>虽然开始线程的时候可以方便地传入数据,但是当<code>Join</code>(等待)的时候,很难从线程获得返回值。
<ul>
<li>可能需要设置一些共享字段</li>
<li>如果抛出异常,捕获和传播该异常都很麻烦</li>
</ul>
</li>
<li>无法告诉线程在结束时开始做另外的工作,必须进行<code>Join</code>操作,在进程中阻塞当前的进程,等待线程结束。</li>
<li>对手动同步的更大依赖以及随之而来的问题
<code>Task</code>类可以很好地解决上述问题。<code>Task</code>是一个相对高级的抽象,它代表了一个并发操作(concurrent),该操作可能由Thread支持,或不由Thread支持。并且,Task是可组合的。</li>
<li><code>Tasks</code>可以使用线程池来减少启动延迟</li>
<li>使用<code>TaskCompletionSource</code>,Tasks可以利用回调的方式在等待I/O绑定操作是完全避免线程。</li>
</ul>
<h2 id="开始一个task">开始一个Task</h2>
<p>开始一个Task最简单的方法就是使用<code>Task.Run</code>这个静态方法。(.NET4.5开始,.NET4.0的时候是<code>Task.Factory.StartNew</code>这个静态方法) 使用方法:传入一个Action委托即可。</p>
<p>Task默认使用线程池,也就是后台线程。当主线程结束时,创建的所有任务都会结束。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> Main(<span style="color:#f38ba8">string</span>[] args)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> Task.Run(() =&gt; Console.WriteLine(<span style="color:#a6e3a1">&#34;Foo&#34;</span>));
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span> Console.ReadLine(); <span style="color:#6c7086;font-style:italic">// 可以达到阻塞线程的效果。</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span> <span style="color:#6c7086;font-style:italic">// 如果程序运行完了,由于Task是后台线程,Task也会被关闭。</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>}
</span></span></code></pre></div><p><code>Task.Run</code>返回一个Task对象,可以使用它来监视其过程。<code>Task.Run</code>之后没有调用<code>Start</code>,因为该方法创建的是“热”任务(hot task);可以通过Task的构造函数创建“冷”任务(cold task),但很少这样做。</p>
<h2 id="wait">Wait</h2>
<p>调用Task的Wait方法会进行阻塞直到操作完成(相当于调用Thread上的Join方法)</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> Main(<span style="color:#f38ba8">string</span>[] args)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span> Task task = Task.Run(() =&gt;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span> Thread.Sleep(<span style="color:#fab387">3000</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span> Console.WriteLine(<span style="color:#a6e3a1">&#34;Foo&#34;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span> }); <span style="color:#6c7086;font-style:italic">//创建一个“热任务”</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span> Console.WriteLine(task.IsCompleted); <span style="color:#6c7086;font-style:italic">//False</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span> task.Wait(); <span style="color:#6c7086;font-style:italic">//阻塞至task完成操作</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span> Console.WriteLine(task.IsCompleted); <span style="color:#6c7086;font-style:italic">//True</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">14</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">15</span><span> <span style="color:#6c7086;font-style:italic">// False</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">16</span><span> <span style="color:#6c7086;font-style:italic">// Foo</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">17</span><span> <span style="color:#6c7086;font-style:italic">// True</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">18</span><span>}
</span></span></code></pre></div><p>Wait也可以指定一个超时时间和取消令牌来提前结束等待。</p></description>
</item>
<item>
<title>C# 线程</title>
<link>https://www.zhhuu.top/posts/csharp-thread/</link>
<pubDate>Fri, 25 Mar 2022 11:31:09 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/csharp-thread/</guid>
<description><h1 id="thread-线程">Thread 线程</h1>
<p>一个可执行路径,独立于其它线程执行。</p>
<h2 id="线程被抢占">线程被抢占</h2>
<p>线程的执行与另外一个线程上代码的执行交织的那一点。</p>
<h2 id="线程的属性特性">线程的属性&amp;特性</h2>
<ul>
<li>线程一旦开始执行,<code>IsAlive</code>为<code>true</code>;线程结束变成<code>false</code></li>
<li>线程结束的条件:线程构造函数传入的委托执行结束</li>
<li>线程一旦结束,无法重启</li>
<li>每个线程都有<code>Name</code>属性,通常用于调试。<code>Name</code>只能设置一次,更改会抛出异常。</li>
<li>静态的<code>Thread.CurrentThread</code>属性返回当前执行的线程。</li>
</ul>
<h2 id="join">Join</h2>
<p>调用<code>Join</code>方法,可以<strong>等待另一个线程结束。</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span>Thread t = <span style="color:#cba6f7">new</span> Thread(Go);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span>t.Start(); <span style="color:#6c7086;font-style:italic">//开始线程</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span>t.Join(); <span style="color:#6c7086;font-style:italic">//等待线程执行完成</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span>Console.WriteLine(<span style="color:#a6e3a1">&#34;Thread t has ended!&#34;</span>); <span style="color:#6c7086;font-style:italic">//线程结束</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span><span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> Go() <span style="color:#6c7086;font-style:italic">//线程构造函数传入的委托</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span> <span style="color:#cba6f7">for</span> (<span style="color:#f38ba8">int</span> i = <span style="color:#fab387">0</span>; i &lt; <span style="color:#fab387">1000</span>; i++)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span> Console.Write(<span style="color:#a6e3a1">&#39;y&#39;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span>}
</span></span></code></pre></div><h3 id="添加超时">添加超时</h3>
<p>调用<code>Join</code>的时候,可以设置一个超时,可以使用毫秒或者<code>TimeSpan</code>
如果返回<code>true</code>,线程结束;如果超时,返回<code>false</code></p></description>
</item>
<item>
<title>进程管理(操作系统)</title>
<link>https://www.zhhuu.top/posts/multi-threading-hardware/</link>
<pubDate>Tue, 22 Mar 2022 23:13:13 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/multi-threading-hardware/</guid>
<description><p>操作系统方面的进程管理</p>
<h1 id="进程">进程</h1>
<p>进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,是操作系统进行<strong>资源分配和保护的基本单位</strong>。进程是程序在处理机上的一次执行过程。</p>
<ul>
<li>动态性:创建👉产生;调度👉执行;得不到资源👉阻塞;撤销👉消亡</li>
<li>并发性:多个进程可同时存在于内存中,在一段时间内<strong>同时运行</strong>。</li>
<li>独立性:独立获得资源的基本单位</li>
<li>异步性:各进程按各自独立的不可预知的速度执行</li>
<li>交往性(制约性):进程至今啊相互制约,互斥地使用某些资源、相关进程之间同步、通信等。</li>
</ul>
<h2 id="进程的静态描述">进程的静态描述</h2>
<ul>
<li><a href="#%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%9D%97">进程控制块</a>:反映了进程的动态特征。</li>
<li>程序段:能被调度程序选中,并在CPU上执行的程序代码段</li>
<li>数据段:进程对应的原始数据、中间或最终数据</li>
</ul>
<h2 id="进程控制块">进程控制块</h2>
<p>进程控制块 PCB(Process Control Block)</p>
<ul>
<li>是操作系统为了管理进程设置的一个数据结构,用于记录和描述进程。</li>
<li>系统利用PCB控制和管理进程。一个进程只有一个PCB,PCB是进程是否存在的唯一标记,是系统感知进程存在的唯一标志。</li>
<li>进程与PCB一一对应。</li>
</ul>
<p>PCB包含如下信息:</p>
<ul>
<li>描述信息:ID、进程组关系(父进程、子进程)</li>
<li>控制信息:状态、优先级、外存地址、运行同级信息等</li>
<li>资源管理信息:指针、占用内存大小等</li>
<li>CPU现场保护结构:当前进程的执行被打断,储存进程现场数据</li>
</ul>
<p>PCB组织方式:线性、链接(链表)、索引</p>
<h2 id="进程上下文">进程上下文</h2>
<p>操作系统中,把<strong>进程物理实体</strong>和<strong>支持进程运行的环境</strong>合称为进程上下文。
系统调度新进程时,新老进程的上下文将进行切换。</p>
<h2 id="进程的状态">进程的状态</h2>
<p>进程的三种基本状态</p>
<ul>
<li>就绪态:已经得到除了CPU以外的其它资源</li>
<li>运行态:占用CPU</li>
<li>阻塞态:正在等待某一事件发生</li>
</ul>
<h2 id="进程的控制">进程的控制</h2>
<ul>
<li><code>fork()</code>:进程创建。调用者用<code>fork()</code>建立一个子进程和自己独立并发地运行。创建的子进程基本拷贝父进程的上下文(正文段(代码)共享)
<ul>
<li><code>fork()</code>返回值为-1:进程创建不成功</li>
<li><code>fork()</code>返回值大于0:在父进程的上下文中,<code>fork()</code>返回值为子进程标识号</li>
<li><code>fork()</code>返回值等于0:在子进程的上下文中。</li>
</ul>
</li>
<li><code>wait()</code>:进程挂起等待(封锁)。调用者进入封锁状态等待它的子进程终止。</li>
<li><code>exit()</code>:进程终止。调用者将终止自己,并解除父进程的封锁(<code>wait()</code>)。</li>
<li><code>execvp(filename,argp)</code>:进程上下文更换。用文件名<code>filename</code>所指定的可执行文件来替换当前进程上下文中的程序和数据部分,并转入执行。</li>
</ul>
<h3 id="常见代码段">常见代码段</h3>
<p>循环创建线程。如果创建不成功(返回值为1),则执行<code>;</code>语句</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C" data-lang="C"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">while</span>((i<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#89b4fa">fork</span>()) <span style="color:#89dceb;font-weight:bold">==</span> <span style="color:#89dceb;font-weight:bold">-</span><span style="color:#fab387">1</span>);
</span></span></code></pre></div><p>创建子线程。父线程和子线程将(将开始)同时在这里执行。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C" data-lang="C"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>i<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#89b4fa">fork</span>();
</span></span></code></pre></div><p>判断现在执行的是父线程还是子线程</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C" data-lang="C"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">if</span> (i<span style="color:#89dceb;font-weight:bold">==</span><span style="color:#fab387">0</span>) <span style="color:#6c7086;font-style:italic">// 子线程
</span></span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span><span style="color:#6c7086;font-style:italic"></span><span style="color:#cba6f7">else</span> <span style="color:#6c7086;font-style:italic">// 父线程(i为大于0的进程id)
</span></span></span></code></pre></div><h1 id="线程">线程</h1>
<h2 id="线程和进程的区别和联系">线程和进程的区别和联系</h2>
<ol>
<li>线程是进程的一部分,它是进程内的一个执行体。</li>
<li>引入线程的操作系统中,<strong>资源分配的对象是进程,而不是线程。</strong></li>
<li>引入线程的操作系统中,调度的基本单位是线程而不是进程。</li>
<li>进程之间可以并发执行,而一个进程中的这些线程之间亦可以并发执行。</li>
<li>进程调度,系统需要进行进程上下文的切换,需要大量的系统开销。</li>
<li><strong>线程切换比进程切换快得多。</strong></li>
<li>从一个进程的线程向另一个进程的线程切换,<strong>将引起线程的上下文切换。</strong></li>
<li>从安全的角度来看,线程不如进程安全。</li>
</ol>
<h2 id="线程控制块">线程控制块</h2>
<p>在管理线程的时候,同样也使用一种数据结构,称之为<strong>线程控制块TCB(Thread Control Block)</strong>
线程控制块包含如下信息:</p></description>
</item>
<item>
<title>Xaml学习小结</title>
<link>https://www.zhhuu.top/posts/xaml-summary/</link>
<pubDate>Wed, 16 Mar 2022 22:08:15 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/xaml-summary/</guid>
<description><p>主要是Xaml的“绑定”和“资源”</p>
<h1 id="xaml静态资源绑定">Xaml静态资源绑定</h1>
<p>需要绑定一个resource的时候,需要的表达式就是大括号里面有“StaticResource”,再加上resource的名字。这种绑定只在App运行的时候进行一次,因为是静态资源,所以它就不会变了。
如:</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">&lt;TextBlock</span> <span style="color:#89b4fa">Foreground =</span> <span style="color:#a6e3a1">&#34;{StaticResource MyBrush}&#34;</span> <span style="color:#cba6f7">/&gt;</span>
</span></span></code></pre></div><p><code>StaticResource</code>表明了我们所绑定的资源的类型</p>
<h2 id="单个属性的绑定">单个属性的绑定</h2>
<p>可以创建单个属性的资源绑定,如:</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">&lt;Page.Resources&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span> <span style="color:#cba6f7">&lt;SolidColorBrush</span> <span style="color:#89b4fa">x:Key=</span><span style="color:#a6e3a1">&#34;MyBrush&#34;</span> <span style="color:#89b4fa">Color=</span><span style="color:#a6e3a1">&#34;Brown&#34;</span><span style="color:#cba6f7">/&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span><span style="color:#cba6f7">&lt;/Page.Resources&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span><span style="color:#6c7086;font-style:italic">&lt;!-- 使用 --&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span><span style="color:#cba6f7">&lt;TextBlock</span> <span style="color:#89b4fa">Text=</span><span style="color:#a6e3a1">&#34;Hello World&#34;</span> <span style="color:#89b4fa">Foreground=</span><span style="color:#a6e3a1">&#34;{StaticResource MyBrush}&#34;</span><span style="color:#cba6f7">/&gt;</span>
</span></span></code></pre></div><p>还可以创建值绑定,如将<code>Slider</code>的值绑定到<code>ProgessBar</code>中:</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#cba6f7">&lt;ProgressBar</span> <span style="color:#89b4fa">Maximum=</span><span style="color:#a6e3a1">&#34;100&#34;</span> <span style="color:#89b4fa">Value=</span><span style="color:#a6e3a1">&#34;{x:Bind MySlider.Value, Mode=OneWay}&#34;</span><span style="color:#cba6f7">&gt;</span>
</span></span></code></pre></div><h2 id="多个属性的绑定style">多个属性的绑定(Style)</h2>
<p>也可以创建多个值类型的绑定,如设置背景、字体、字号等属性,如:</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#cba6f7">&lt;Page.Resources&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span> <span style="color:#cba6f7">&lt;Style</span> <span style="color:#89b4fa">TargetType=</span><span style="color:#a6e3a1">&#34;Button&#34;</span> <span style="color:#89b4fa">x:Key=</span><span style="color:#a6e3a1">&#34;MyButtonStyle&#34;</span><span style="color:#cba6f7">&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span> <span style="color:#6c7086;font-style:italic">&lt;!-- 定义了目标类型、样式(资源)名称 --&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span> <span style="color:#6c7086;font-style:italic">&lt;!-- 下面是各个属性值的设置 --&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span> <span style="color:#cba6f7">&lt;Setter</span> <span style="color:#89b4fa">Property=</span><span style="color:#a6e3a1">&#34;Background&#34;</span> <span style="color:#89b4fa">Value=</span><span style="color:#a6e3a1">&#34;Blue&#34;</span><span style="color:#cba6f7">/&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span> <span style="color:#cba6f7">&lt;Setter</span> <span style="color:#89b4fa">Property=</span><span style="color:#a6e3a1">&#34;FontFamily&#34;</span> <span style="color:#89b4fa">Value=</span><span style="color:#a6e3a1">&#34;Arial Black&#34;</span><span style="color:#cba6f7">/&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span> <span style="color:#cba6f7">&lt;Setter</span> <span style="color:#89b4fa">Property=</span><span style="color:#a6e3a1">&#34;FontSize&#34;</span> <span style="color:#89b4fa">Value=</span><span style="color:#a6e3a1">&#34;36&#34;</span><span style="color:#cba6f7">/&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span> <span style="color:#cba6f7">&lt;/Style&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span><span style="color:#cba6f7">&lt;/Page.Resources&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span><span style="color:#cba6f7">&lt;Button</span> <span style="color:#89b4fa">Content=</span><span style="color:#a6e3a1">&#34;My Button Style Example&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span> <span style="color:#89b4fa">Height=</span><span style="color:#a6e3a1">&#34;100&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span> <span style="color:#89b4fa">Style=</span><span style="color:#a6e3a1">&#34;{StaticResource MyButtonStyle}&#34;</span> <span style="color:#cba6f7">/&gt;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">14</span><span> <span style="color:#6c7086;font-style:italic">&lt;!-- 资源的名称是“MyButtonStyle” --&gt;</span>
</span></span></code></pre></div><h2 id="属性的继承">属性的继承</h2>
<p>使用<code>BasedOn</code>属性
如<code>HeaderTextBlockStyle</code>就是继承自<code>BaseTextBlockStyle</code>
原文引用:</p></description>
</item>
<item>
<title>LINQ笔记&实例</title>
<link>https://www.zhhuu.top/posts/linq/</link>
<pubDate>Sat, 12 Mar 2022 16:29:27 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/linq/</guid>
<description><p>LINQ:语言继承查询</p>
<h1 id="限制运算符-where">限制运算符 Where</h1>
<p>where语句的基本示例</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#f38ba8">int</span>[] numbers = {<span style="color:#fab387">5</span>,<span style="color:#fab387">4</span>,<span style="color:#fab387">1</span>,<span style="color:#fab387">3</span>,<span style="color:#fab387">9</span>,<span style="color:#fab387">8</span>,<span style="color:#fab387">6</span>,<span style="color:#fab387">7</span>,<span style="color:#fab387">2</span>,<span style="color:#fab387">0</span>};
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span><span style="color:#f38ba8">var</span> lowNums = <span style="color:#cba6f7">from</span> num <span style="color:#cba6f7">in</span> numbers
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> <span style="color:#cba6f7">where</span> num &lt; <span style="color:#fab387">5</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span> <span style="color:#cba6f7">select</span> num; <span style="color:#6c7086;font-style:italic">// 只选择小于5的数字</span>
</span></span></code></pre></div><p>筛选符合属性条件的元素</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#f38ba8">var</span> soldOutProducts = <span style="color:#cba6f7">from</span> prod <span style="color:#cba6f7">in</span> products
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span> <span style="color:#cba6f7">where</span> prod.UnitsInStock == <span style="color:#fab387">0</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> <span style="color:#cba6f7">select</span> prod; <span style="color:#6c7086;font-style:italic">// 从集合中选出符合属性的元素</span>
</span></span></code></pre></div><p>用多个条件筛选元素</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-C#" data-lang="C#"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#f38ba8">var</span> expensiveInStockProducts = <span style="color:#cba6f7">from</span> prod <span style="color:#cba6f7">in</span> products
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span> <span style="color:#cba6f7">where</span> prod.UnitsInStock &gt; <span style="color:#fab387">0</span> &amp;&amp; prod.UnitPrice &gt; <span style="color:#fab387">3.00</span>M
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> <span style="color:#cba6f7">select</span> prod; <span style="color:#6c7086;font-style:italic">// 从集合中选出符合上述两个条件的元素</span>
</span></span></code></pre></div><p>基于元素在列表中位置的筛选</p></description>
</item>
<item>
<title>VSCode多光标输入</title>
<link>https://www.zhhuu.top/posts/vscode-multicursor/</link>
<pubDate>Sun, 11 Jul 2021 15:00:42 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/vscode-multicursor/</guid>
<description><p>VSCode多行光标功能的使用</p>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://code.visualstudio.com/docs/editor/codebasics">Visual Studio Code Basics</a>: This topic takes you through the basics of the editor and helps you get moving with your code</li>
<li><a href="https://stackoverflow.com/questions/30037808/multiline-editing-in-visual-studio-code">StackOverflow</a>: Multiline editing in Visual Studio Code</li>
</ul>
<h1 id="多行光标的使用">多行光标的使用</h1>
<h2 id="用键盘使用多行光标">用键盘使用多行光标</h2>
<table>
 <thead>
 <tr>
 <th>快捷键</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><kbd>Ctrl+D</kbd></td>
 <td>选择下一个匹配的内容</td>
 </tr>
 <tr>
 <td><kbd>Ctrl+U</kbd></td>
 <td>撤销上一个光标操作</td>
 </tr>
 <tr>
 <td><kbd>Esc</kbd></td>
 <td>取消多行选择</td>
 </tr>
 <tr>
 <td><kbd>Ctrl+Backspace</kbd></td>
 <td>智能删除</td>
 </tr>
 </tbody>
</table>
<p><img src="1.webp" alt="">
使用 <code>Ctrl+D</code> 时,右上角的小部件,从左到右依次是:
区分大小写 <kbd>Alt+C</kbd>、全字匹配 <kbd>Alt+W</kbd>、使用正则表达式 <kbd>Alt+R</kbd></p>
<p><kbd>Ctrl+Shift+P</kbd> 能够呼出万能指令窗口</p>
<table>
 <thead>
 <tr>
 <th><kbd>Ctrl+Shift+P</kbd> 指令</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td>Cursor Undo</td>
 <td>撤销光标操作</td>
 </tr>
 <tr>
 <td>Cursor Redo</td>
 <td>重做光标操作</td>
 </tr>
 </tbody>
</table>
<h2 id="用鼠标使用多行光标">用鼠标使用多行光标</h2>
<p><img src="2.webp" alt="">
有时候可能会想要跳过某一个位置,这时使用<code>Ctrl+D</code>就难以做到。使用鼠标控制会令多行光标的使用更灵活。(比如说跳过注释部分的“:”)</p>
<p>使用方法
按住 <kbd>Alt</kbd> 并点击</p>
<h1 id="多行光标特性">多行光标特性</h1>
<h2 id="合并">合并</h2>
<p>当两个光标移动到重合时,会自动合并。例如下面的删除:
<img src="3.webp" alt="">
<img src="4.webp" alt=""></p></description>
</item>
<item>
<title>npm快速上手</title>
<link>https://www.zhhuu.top/posts/npm-overview/</link>
<pubDate>Sat, 10 Jul 2021 19:13:03 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/npm-overview/</guid>
<description><p>在npm中,包(package)、模块(module)、依赖(dependency)都是一个东西。</p>
<h1 id="npm常用操作">npm常用操作</h1>
<h2 id="npm配置项">npm配置项</h2>
<p>初始化 <code>npm init</code>(其实就是创建一个<code>package.json</code>文件),之后让你填入许多信息(package name, version, description, entry point, test command, git repository, key words, author)
<code>npm init -y</code>相当于<code>npm init</code>但信息都为空,初始化后npm会认为你的项目是一个包</p>
<h2 id="npm搜索">npm搜索</h2>
<p><code>npm search &lt;包名&gt;</code> 如:<code>npm search jquery</code></p>
<h2 id="包安装">包安装</h2>
<table>
 <thead>
 <tr>
 <th style="text-align: left">操作</th>
 <th style="text-align: left">命令</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left">直接安装</td>
 <td style="text-align: left"><code>npm install &lt;包名&gt;</code>,简写为<code>npm i &lt;包名&gt;</code></td>
 </tr>
 <tr>
 <td style="text-align: left">安装指定版本/旧版本</td>
 <td style="text-align: left"><code>npm install &lt;包名&gt;@&lt;版本号&gt;</code></td>
 </tr>
 <tr>
 <td style="text-align: left">安装指定tag的包</td>
 <td style="text-align: left"><code>npm install &lt;包名&gt;@&lt;tag&gt;</code></td>
 </tr>
 <tr>
 <td style="text-align: left">参数 <code>-g</code></td>
 <td style="text-align: left">安装到全局环境下,这样在任何一个目录下都能识别,比如 <code>npm install npm@latest -g</code></td>
 </tr>
 <tr>
 <td style="text-align: left">参数 <code>--save-dev</code>或者<code>-D</code></td>
 <td style="text-align: left">表明是开发环境下的依赖,不会在生产环境中出现</td>
 </tr>
 </tbody>
</table>
<h2 id="包卸载">包卸载</h2>
<ul>
<li><code>npm uninstall &lt;包名&gt;</code></li>
<li><code>-D</code> 卸载包,并从<code>package.json</code>的<code>devDependencies</code>中删除。</li>
</ul>
<blockquote>
<p>老版本的npm中卸载包要加<code>--save</code>才能保存到<code>package.json</code>中</p>
</blockquote>
<h2 id="常用操作">常用操作</h2>
<table>
 <thead>
 <tr>
 <th>操作</th>
 <th>命令</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td>更新包</td>
 <td><code>npm update &lt;包名&gt;</code>,局部更新。加<code>-g</code>全局更新</td>
 </tr>
 <tr>
 <td>列出已安装包</td>
 <td><code>npm list</code>默认列出局部依赖。加<code>-g</code> 列出已安装的全局依赖。</td>
 </tr>
 <tr>
 <td>检查过期包(依赖)</td>
 <td><code>npm outdated</code></td>
 </tr>
 <tr>
 <td>查看依赖安装路径</td>
 <td><code>npm root</code>,也就是node_modules的路径,加<code>-g</code>查看全局安装路径</td>
 </tr>
 <tr>
 <td>查看模块的注册信息</td>
 <td><code>npm view &lt;包名&gt; versions</code>,列出所有版本。<br> <code>npm view &lt;包名&gt; dependencies</code>,列出所有依赖</td>
 </tr>
 </tbody>
</table>
<h1 id="使用npm的优势">使用npm的优势</h1>
<p>以引用jQuery为例,先新建html文件。</p></description>
</item>
<item>
<title>利用Gitkraken了解Git</title>
<link>https://www.zhhuu.top/posts/git-basic/</link>
<pubDate>Fri, 09 Jul 2021 20:56:37 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/git-basic/</guid>
<description><p>git是版本控制系统。应用最为广泛,适用于中小项目。本身是命令行工具。
GitKraken图形化客户端,界面漂亮,功能全面。</p>
<p>🔗链接</p>
<ul>
<li><a href="https://www.gitkraken.com/">GitKraken</a></li>
</ul>
<h1 id="git的基本概念和操作">Git的基本概念和操作</h1>
<h2 id="代码仓库repository">代码仓库(Repository)</h2>
<p>创建一个<strong>代码仓库(Repository)</strong>,可以是本地仓库,也可以是保存在远程服务器上的仓库。仓库之间可以相互同步。
<img src="1.png" alt="">
显示代码的所有提交历史,其中每项代表一个<strong>提交(Commit)</strong>,提交相当于检查点或者快照。对代码作出修改后可以提交这次修改,Git会保存当前的代码快照,之后可以轻松回溯到这里。
新建代码仓库的时候会自动创建一个提交。
选中提交后可以看到所有修改的文件。</p>
<blockquote>
<p>GitKraken 中打开git目录可以点击“文件”-“在文件浏览器中打开”,找到代码仓库在本地计算机上存放的位置</p>
</blockquote>
<p>作出更改后文件历史中多出 <code>//WIP</code> (Work In Progress),代表这个提交正在施工中。
Git要求在提交修改的文件前要对它们先 <strong>Stage</strong>,点击Stage。Stage可看作提交前防止误操作。其中必填本次提交的描述。最后&quot;Commit&quot;完成提交,这里的提交还是在本地计算机的提交。
如果要远程提交到代码仓库,就需要 <strong>&ldquo;Push&quot;s</strong>,推送提交即可。</p>
<h2 id="拉取pull">拉取(Pull)</h2>
<p>从远程服务器 <strong>拉取(Pull)</strong> 提交
<img src="2.png" alt="">
提交历史会多出来一条。master和电脑图标的标签表示本地仓库的提交,上面的表示Github上的远程仓库提交(master是分支)。(origin通常代表远程仓库)。如果想把远程提交同步到本地仓库只需要点击**&ldquo;Pull&rdquo;**。点击后两个图标重合在一起,代表远程仓库和本地仓库的提交历史已经完全相同。</p>
<h2 id="合并merge">合并(Merge)</h2>
<p>两边同时作出了修改后提交历史会产生分叉
<img src="3.png" alt="">
如果想要将两个修改同时应用在本地仓库中,需要合并。Pull的时候会自动合并远程提交到本地的提交中。Pull后Git会自动生成一个新提交。
<img src="4.png" alt="">
如果同时修改代码的同一处位置,再次Pull的时候,会自动合并失败,需要手动合并冲突(Conflict)的部分。
<img src="5.png" alt="">
<img src="6.png" alt="">
下面的窗口用于手动解决冲突
<img src="7.png" alt="">
最终完成提交
<img src="8.png" alt=""></p>
<h2 id="提交改写amend">提交改写(Amend)</h2>
<p>用于提交代码有误或者提交信息出错,对已提交的文件和信息进行修改。在提交前勾选Amend后正常提交。这个操作只会修改已经存在的提交。但是最好本地使用。</p>
<h2 id="分支branch">分支(Branch)</h2>
<p>创建一个新分支,点击Branch按钮。创建好后分支的提交历史和原来相同,但是往后的提交会相互独立。默认只会推送master分支到远程服务器,如果要推送其他分支,点右键然后选择Push。</p>
<h2 id="合并分支merge-branches">合并分支(Merge Branches)</h2>
<p>将test合并到master上,先双击切换到master分支,在test分支上右键点“合并test分支到master分支”。(可能需要手动解决代码冲突)</p>
<h2 id="暂存stash">暂存(Stash)</h2>
<p><img src="9.png" alt="">
暂存当前的修改,源代码会被还原到之前的状态,可以进行其他操作。
<img src="10.png" alt="">
最后可以通过Pop将暂存的代码恢复出来,甚至可以切换到很老的版本将暂存的修改恢复出来。</p>
<h2 id="变基rebase">变基(Rebase)</h2>
<p><img src="11.png" alt="">
在合并分支的过程中,会将整个分支摘取下来,嫁接到另一个分支上(改变了原有的基底)。相比Merge,Merge的优点在于原先的提交历史会被完整地保留下来。
比如将test分支变基到master分支,先选择test分支,右键选择“将test分支变基到master分支上”,完成操作。最后将master分支指向最新的提交,这样master分支的内容才是最新的。(用到Fast Forward)</p>
<h2 id="快进fast-forward">快进(Fast Forward)</h2>
<p>直接让master的指针快进到test分支。</p>
<h2 id="签出checkout">签出(Checkout)</h2>
<p>回退到早期的版本完成一些bug的修复。在想要回到的节点上右键点击签出,此时Head标签指向当前提交。
<img src="12.png" alt="">
修改完后提交是基于早期的提交,最后可以将其变基到当前的提交上,变基完成后提交会变成一条直线。</p>
<h2 id="撤销操作undoing">撤销操作(Undoing)</h2>
<p>常用于在Git中错误提交了代码或者错误合并了一个分支。得益于每次的操作都记录在Reflog的类似日志的文件里,能够帮你轻松回退之前的状态。GitKraken中就是状态栏中的undo操作。包括分支切换、合并、修改甚至删除等等。</p>
<h2 id="恢复revert">恢复(Revert)</h2>
<p>常用于撤销已提交的代码(远程)。在GitKraken中在提交上点右键,Git会创建一个完全相反的提交以恢复。</p>
<h1 id="图形化界面对应的命令行命令">图形化界面对应的命令行命令</h1>
<h2 id="第一部分常用基础部分">第一部分(常用基础部分)</h2>
<p>配置基本用户信息
<code>git config --global user.name &lt;用户名&gt;</code>
<code>git config --global user.email &lt;邮箱地址&gt;</code></p></description>
</item>
<item>
<title>两种设计风格</title>
<link>https://www.zhhuu.top/posts/two-design-style/</link>
<pubDate>Thu, 20 May 2021 12:21:56 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/two-design-style/</guid>
<description><p>简单介绍下两种设计风格:<a href="#%E6%B3%A2%E6%99%AE%E9%A3%8E%E6%A0%BC">波普(POP)风格</a>和<a href="#%E5%AD%9F%E8%8F%B2%E6%96%AF%E9%A3%8E%E6%A0%BC">孟菲斯风格(Memphis)</a></p>
<h1 id="波普风格">波普风格</h1>
<p>波普艺术被定义为:大众传播媒介的形式与技巧,并以人们日常生活中随处可见的广告、大众传媒与通俗文化中的形象为主题的艺术创作。</p>
<p><img src="pop.jpg" alt=""></p>
<h2 id="特征">特征</h2>
<p>波普本身颠覆了人们对艺术的印象,而总结波普的特点,可以归纳为以下三个:</p>
<ol>
<li>
<p>通俗化
波普模糊了艺术和非艺术、现存品和艺术品、精英文化与大众文化、高雅与低俗之间的界限,把艺术从神坛上拉下来,成为所有人都可享受之物。</p>
</li>
<li>
<p>商业化
波普艺术的重要特点就是将着眼于日趋发达的商业流行文化,用极为通俗化的方式直接表现物质生活,强调消费主义与物质主义。</p>
</li>
<li>
<p>形式主义
波普艺术的作品追求别具一格外形,装饰,追求纯粹的视觉快感,希望新颖多样的艺术表现形式来反抗现代主义的“无趣、无聊、一成不变”。</p>
</li>
</ol>
<h2 id="表现手法">表现手法</h2>
<h3 id="元素借用大众传媒和日常生活物品">元素:借用大众传媒和日常生活物品</h3>
<p>在波普艺术中,常常会借用广告、商业、流行文化图像,以及名人或者虚构人物形象来作为主要视觉资源,因此来呈现消费型社会具有的各种杂乱表象。</p>
<p><img src="p1_2.jpg" alt="Andy Warhol"></p>
<p><img src="p1_1.jpg" alt="Andy Warhol"></p>
<blockquote>
<p>Andy Warhol的金宝汤(Campbell&rsquo;s Soup Cans)</p>
</blockquote>
<h3 id="手法拼接覆盖粘贴重复">手法:拼接、覆盖、粘贴、重复</h3>
<p>波普的重要特质之一就是能够通过不同的载体和复制形式体现出趣味。
<img src="p2.jpg" alt="Tom Wesselmann"></p>
<blockquote>
<p>Tom Wesselmann的静物拼贴作品</p>
</blockquote>
<h3 id="色彩">色彩</h3>
<p>波普的作品中通常更注重色彩表现的刺激性效应。例如使用高度饱和的色彩,以及强化无彩色系(黑白灰)与有彩色系之间的对比张力,营造一种强烈而廉价的色彩感,并同时用来暗示物质主义对人们的诱惑。
<img src="p3_1.jpg" alt="Keith Haring"></p>
<p><img src="p3_2.jpg" alt="Keith Haring"></p>
<blockquote>
<p>Keith Haring</p>
</blockquote>
<p><img src="p4.jpg" alt="Roy Lichtenstein"></p>
<p><img src="p5.jpg" alt="Roy Lichtenstein"></p>
<h2 id="美国波普代表艺术家">美国波普代表艺术家</h2>
<ol>
<li>安迪·沃霍尔(Andy Warhol):色彩组合、质感</li>
<li>凯斯·哈林(Keith Haring):涂鸦风格</li>
<li>罗伊·里奇特斯坦(Roy Lichtenstein):漫画风格</li>
</ol>
<h1 id="孟菲斯风格">孟菲斯风格</h1>
<p><img src="memphis.jpg" alt=""></p>
<h2 id="风格介绍">风格介绍</h2>
<p>孟菲斯风格最早形成于1981年,是由一群意大利籍家具设计师探索出来的一种装饰艺术的设计风格。他们反对单调冷峻的现代主义,提倡装饰,强调手工艺方法制作的产品,并积极从波普艺术、东方艺术、非洲拉美的传统艺术中寻求灵感。</p>
<p>上个世纪70年代,非常流行极简主义和现代主义,物极必反,不会有一种设计风格永远流行,总有人看多了没有装饰性、没有个性化的设计风格,厌倦了单调冷峻的现代主义,所以才有了孟菲斯风格的诞生。孟菲斯的兴起可以说是“装饰主义”的复苏。</p>
<h2 id="特点">特点</h2>
<p>而要追究到底是什么造就了这种引人注目的设计风格,则必须追溯到孟菲斯设计师们的设计主张:</p>
<ul>
<li><strong>反对“功能主义”的设计理念</strong></li>
<li><a href="#%E6%97%A0%E9%99%90%E5%88%B6%E7%9A%84%E6%9D%90%E6%96%99%E4%BD%BF%E7%94%A8"><strong>无限制的材料使用</strong></a></li>
<li><a href="#%E5%BC%BA%E8%B0%83%E4%B8%AA%E6%80%A7%E5%8C%96%E7%9A%84%E8%A3%85%E9%A5%B0"><strong>强调个性化的装饰</strong></a></li>
</ul>
<h3 id="无限制的材料使用">无限制的材料使用</h3>
<p>孟菲斯设计师们认为材料是一种积极交流感情的媒介,因此孟菲斯对于材料的态度是感性而非理性的,他们不考虑材料的真实感,不管是大理石、木材还是塑料像,在孟菲斯设计师看来都无区别。他们看重的是材料的表现力,例如材料的肌理、花纹、色彩、浓度、透明度、发光度、反光率等等。例如孟菲斯很喜欢当时被认为很“俗气”的材料——三聚氰胺塑料胶合板,用表达朝气蓬勃,活泼向上的生活态度。</p>
<p><img src="m1.jpg" alt=""></p>
<h3 id="强调个性化的装饰">强调个性化的装饰</h3>
<p>在装饰方面,孟菲斯一直抵制现代主义的“装饰即罪恶”、“少即是多”理论,总是在设计中表现富有个性的设计形式和文化涵义。</p>
<p>孟菲斯的美学灵感主要汲取自装饰艺术和波普艺术,在设计中通常采用抽象图案来作为装饰元素,使它布满产品表面,变产品的静态为活跃的动态结构。而且在色彩方面,反现代主义设计规定的色彩学法则和配色规律而行,喜欢采用色调差别很大的色块并列,产生一种颤动的视觉效果,甚至不惜互相干扰,以创造一种风趣、滑稽、诙谐、戏谑的后现代情调,造成亦庄亦谐的效果。</p>
<p><img src="m2.jpg" alt=""></p>
<p>现代孟菲斯的特征:</p>
<ul>
<li><strong>高饱和度的颜色</strong></li>
<li><strong>重复的几何图形</strong></li>
<li><strong>黑色粗描边</strong></li>
</ul>
<p><img src="m3.jpg" alt="高饱和度的颜色"></p>
<p><img src="m4.jpg" alt="重复的几何图形"></p>
<p><img src="m5.jpg" alt="黑色粗描边"></p></description>
</item>
<item>
<title>鲁迅名言</title>
<link>https://www.zhhuu.top/posts/luxun-sayings/</link>
<pubDate>Fri, 05 Mar 2021 23:13:51 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/luxun-sayings/</guid>
<description><p>迅哥儿快被踢出课本了,这都是各种鲁迅名言的摘抄🤣</p>
<h1 id="沉默和孤独">沉默和孤独</h1>
<ul>
<li>
<p>惟沉默是最高的轻蔑。——《且介亭杂文附集》</p>
</li>
<li>
<p>猛兽总是独行,牛羊才成群结队。</p>
</li>
<li>
<p>当我沉默的时候,我觉得很充实,当我开口说话,就感到了空虚。</p>
</li>
<li>
<p>楼下一个男人病得要死,那间隔壁的一家唱着留声机,对面是弄孩子。楼上有两人狂笑;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹。——《而已集•小杂感》</p>
</li>
</ul>
<p>这4句是鲁迅说沉默和孤独的,嗯,我们迅哥儿还是有点傲娇的。因此愿意独行,不想像新月派、鸳鸯蝴蝶派的“牛羊”一样成群结队。</p>
<h1 id="工作">工作</h1>
<ul>
<li>
<p>哪里有什么天才,我只是把别人喝咖啡的时间用在工作上了。</p>
</li>
<li>
<p>伟大的成绩和辛勤劳动是成正比例的,有一分劳动就有一分收获,日积月累,从少到多,奇迹就可以创造出来。</p>
</li>
</ul>
<p>这两句说明,鲁迅其实也是工作狂,每周996,相信一分耕耘一分收获,把喝咖啡的时间都用在了写作上,所以才著作等身,成为近现代作家中的第一大咖(或许只有胡适才能齐名)</p>
<h1 id="情">情</h1>
<ul>
<li>
<p>待我成尘时,你将见我的微笑。</p>
</li>
<li>
<p>无情未必真豪杰,怜子如何不丈夫。</p>
</li>
<li>
<p>渡尽劫波兄弟在,相逢一笑泯恩仇。</p>
</li>
<li>
<p>友谊是两颗心真诚相待,而不是一颗心对另一颗心的敲打。</p>
</li>
<li>
<p>人生得一知已足矣,斯世当以同怀视之。</p>
</li>
<li>
<p>我寄你的信,总要送往邮局,不喜欢放在街边的绿色邮筒中,我总疑心那里会慢一点。</p>
</li>
</ul>
<p>这6句话可以归为一类:迅哥儿看感情——儿女之情、兄弟之情和朋友之情。我们的教材,经常把鲁迅塑造成头发如钢针、横眉冷对千夫指的刚毅硬汉,其实迅哥儿也有自己温柔的一面。上面5句话,就表达了迅哥儿作为暖男的一面,不管是对朋友、兄弟还是妻儿,都有无限柔情。</p>
<h1 id="责任和担当">责任和担当</h1>
<ul>
<li>
<p>无穷的远方,无数的人们,都与我有关。</p>
</li>
<li>
<p>必须敢于正视,这才可望敢想,敢说,敢做,敢当。</p>
</li>
<li>
<p>我们自古以来,就有埋头苦干的人,有拼命硬干的人,有为民请命的人,有舍身求法的人。虽是等于为帝王将相作家谱的所谓“正史”,也往往掩不住他们的光辉,这就是中国的脊梁。</p>
</li>
<li>
<p>愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。能做事的做事,能发声的发声。有一分热,发一分光,就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。此后如竟没有炬火:我便是唯一的光。倘若有了炬火,出了太阳,我们自然心悦诚服的消失,不但毫无不平,而且还要随喜赞美这炬火或太阳;因为他照了人类,连我都在内。</p>
</li>
<li>
<p>中国的孩子,只要生,不管他好不好,只要多,不管他才不才,生他们的人,不负教他的责任。虽然“人口众多”这一句话,很可以闭了眼睛自负,然而这许多人口,便只在尘土中辗转,小的时候,不把他当人,大了以后也做不了人。——《随感录廿五》</p>
</li>
</ul>
<h1 id="杂谈">杂谈</h1>
<ul>
<li>
<p>谣言世家的子弟是以谣言杀人,也以谣言被杀的。</p>
</li>
<li>
<p>讽刺和冷嘲只隔一张纸,有趣和肉麻也一样。</p>
</li>
<li>
<p>悲剧将人生的有价值的东西毁灭给人看,喜剧将那无价值的撕破给人看。</p>
</li>
<li>
<p>若举世唯科学是崇,则人生必将归于枯寂。</p>
</li>
<li>
<p>我之所谓生存,并不是苟活,所谓温饱,不是奢侈,所谓发展,也不是放纵。</p>
</li>
<li>
<p>面具戴太久,就会长到脸上,再想揭下来,除非伤筋动骨扒皮。</p>
</li>
<li>
<p>人生最苦痛的是梦醒了无路可走,做梦的人是幸福的;倘没有看出可走的路,最要紧的是不要去惊醒他。</p>
</li>
<li>
<p>有缺点的战士终竟是战士,完美的苍蝇也终竟不过是苍蝇。 ——《战士和苍蝇》</p>
</li>
</ul>
<p>这些话不太好归类,干脆就全放一起,就叫鲁迅杂谈吧。迅哥儿杂文写得多,这些名言就算迅哥儿杂谈好了。</p>
<h1 id="创新">创新</h1>
<ul>
<li>
<p>从来如此,便对么?</p>
</li>
<li>
<p>其实地上本没有路,走的人多了,也便成了路。</p>
</li>
<li>
<p>同是不满于现状,但打破现状的手段却不同:一是革新,一是复古。</p>
</li>
<li>
<p>从原虫到人类,从野蛮到文明,就因为没有一刻不在革命。</p>
</li>
<li>
<p>既然像螃蟹这样的东西,人们都很爱吃,那么蜘蛛也一定有人吃过,只不过后来知道不好吃才不吃了,但是第一个吃螃蟹的人一定是个勇士。</p>
</li>
</ul>
<p>这一类名言,主题都指向了一个点:创新(不守旧)。</p>
<h1 id="抨击黑暗">抨击黑暗</h1>
<ul>
<li>
<p>中国人的性情是总喜欢调和折中的,譬如你说,这屋子太暗,须在这里开一个窗,大家一定不允许的。但如果你主张拆掉屋顶他们就来调和,愿意开窗了。</p>
</li>
<li>
<p>我独不解中国人何以于旧状况那么心平气和,于较新的机运就这么疾首蹙额;于已成之局那么委曲求全;于初兴之事就这么求全责备?
——《这个与那个》</p>
</li>
<li>
<p>一见短袖子,立刻想到白臂膊,立刻想到全裸体,立刻想到生殖器,立刻想到性交,立刻想到杂交,立刻想到私生子。中国人的想象惟在这一层能够如此跃进。</p>
</li>
<li>
<p>一部《红楼梦》,单是命意,就因读者的眼光而有种种:经学家看见《易》,道学家看见淫,才子看见缠绵,革命家看见排满,流言家看见宫闱秘事。</p>
</li>
<li>
<p>我翻开历史一查,这历史没有年代。歪歪斜斜的每页上都写着“仁义道德”几个字,我横竖睡不着,仔细看了半夜,才从字缝里看出来,满本上都写着两个字“吃人”!</p>
</li>
<li>
<p>中国一向就少有失败的英雄,少有韧性的反抗,少有敢单身鏖战的武人,少有敢抚哭叛徒的吊客;见胜兆则纷纷聚集,见败兆则纷纷逃亡。</p>
</li>
<li>
<p>他们这群人,又想吃人,又是鬼鬼祟祟,想法子遮掩,不敢直截下手,真要令我笑死。我忍不住,便放声大笑起来,十分快活。自己晓得这笑声里面,有的是义勇和正气。——《狂人日记》</p>
</li>
<li>
<p>但究竟是夷人可恶,偏要讲什么科学。科学虽然给我们许多惊奇,但也搅坏了我们许多好梦。——《春末闲谈》</p>
</li>
<li>
<p>群众,尤其是中国的——永远是戏剧的看客。牺牲上场,如果显得慷慨,他们就看了悲壮剧;如果显得觳觫,他们就看了滑稽剧。北京的羊肉铺常有几个人张嘴看剥羊,仿佛颇为愉快,人的牺牲能给他们的益处,也不过如此。而况事后走不几步,他们并这一点也就忘了。 ——《娜拉走后怎样》</p>
</li>
<li>
<p>真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血。这是怎样的哀痛者和幸福者?然而造化又常常为庸人设计,以时间的流驶,来洗涤旧迹,仅使留下淡红的血色和微漠的悲哀。在这淡红的血色和微漠的悲哀中,又给人暂得偷生,维持着这似人非人的世界。我不知道这样的世界何时是一个尽头!——《纪念刘和珍君》</p>
</li>
</ul>
<p>这一类就不用我多说了,作为成天怼天怼地怼空气的迅哥儿,最喜欢怼的就是民族劣根性了。以上,都是怼民族劣根性的。虽然当下也有很多粪青,但,这些粪青只是“愤”,却不知“情”,也就是不能从根子里了解问题所在。像迅哥儿这般,既“愤”,又能鞭辟入里,直指要害的,太少了。所以,大师永远是大师,路人甲只是路人甲。</p>
<h1 id="结尾">结尾</h1>
<p>于浩歌狂热之际中寒;于天上看见深渊。于一切眼中看见无所有;于无所希望中得救。——鲁迅</p></description>
</item>
<item>
<title>Hexo升级记录</title>
<link>https://www.zhhuu.top/posts/hexo-update/</link>
<pubDate>Sun, 21 Feb 2021 23:25:49 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/hexo-update/</guid>
<description><p>hexo版本太旧,将hexo从3.9.0升级到5.4.0
以前尝试了几次,这次终于成功了(把所有问题都解决了)</p>
<h1 id="升级前后版本变化">升级前后版本变化</h1>
<p>升级前</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>hexo: 3.9.0
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>hexo-cli: 4.2.0
</span></span></code></pre></div><p>升级后</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>hexo: 5.4.0
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>hexo-cli: 4.2.0
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>uv: 1.33.1
</span></span></code></pre></div><h1 id="升级操作">升级操作</h1>
<p>先运行了<code>npm update</code>查看了一下有没有需要升级的软件,我这边提示有需要升级的软件,所以手动升级了一下</p>
<p>然后是正经的检查更新</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>npm install -g npm-check
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>npm install -g npm-upgrade
</span></span></code></pre></div><p>后面看来好像还是npm-check更有用一点🤣
分别执行</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>npm-check
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>npm-upgrade
</span></span></code></pre></div><p>其中npm-check占用资源比较多,耗时比较久。最后是通过提示的
<code>npm-check -u</code>
完成升级</p>
<h1 id="问题解决">问题解决</h1>
<p>由于主题比较老旧,多年没有更新,但是又很喜欢,所以我一直都在魔改并解决问题。</p>
<h3 id="遇到的问题">遇到的问题</h3>
<ol>
<li>
<p>在执行hexo操作的时候总会弹出错误</p>
<blockquote>
<p>WARN Deprecated config detected: &ldquo;external_link&rdquo; with a Boolean value is deprecated. See <a href="https://hexo.io/docs/configuration">https://hexo.io/docs/configuration</a> for more details.</p></description>
</item>
<item>
<title>初探Docker</title>
<link>https://www.zhhuu.top/posts/docker-startup/</link>
<pubDate>Sat, 23 Jan 2021 17:34:33 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/docker-startup/</guid>
<description><p>尝试了 docker 的一些常用操作</p>
<h1 id="查看正在运行的容器">查看正在运行的容器</h1>
<h2 id="查看正在运行的容器-1">查看正在运行的容器</h2>
<p><code>docker ps</code></p>
<blockquote>
<p>如果 docker 没有运行,则会显示错误</p>
</blockquote>
<h2 id="查看所有容器">查看所有容器</h2>
<p><code>docker ps -a</code></p>
<h1 id="建立容器">建立容器</h1>
<p><code>docker run ubuntu -it</code></p>
<table>
 <thead>
 <tr>
 <th style="text-align: left">参数</th>
 <th style="text-align: left">作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left"><code>-i</code></td>
 <td style="text-align: left">与容器互动(类似 ssh,可以输入指令)</td>
 </tr>
 <tr>
 <td style="text-align: left"><code>-t</code></td>
 <td style="text-align: left">创造一个终端</td>
 </tr>
 </tbody>
</table>
<h1 id="容器常用操作">容器常用操作</h1>
<h2 id="本地容器操作容器">本地容器操作容器:</h2>
<p>运行但不进入:
<code>docker start [容器ID/容器ID开头的几个字]</code></p>
<p>进入容器:
<code>docker attach [容器ID/容器ID开头的几个字]</code></p>
<p>离开容器:
<kbd>Ctrl+P</kbd> <kbd>Ctrl+Q</kbd></p>
<p>停止容器:
<code>docker stop [容器ID/容器ID开头的几个字]</code></p>
<p>查看已经下载到本地的容器:
<code>docker image ls </code></p>
<p>移除本地容器:
<code>docker rm [容器名称]</code></p>
<p>移除本地镜像:
<code>docker rmi [镜像名称]</code></p>
<blockquote>
<p>镜像名称在 REPOSITORY 下</p>
</blockquote>
<h2 id="新建容器">新建容器</h2>
<p>搜索镜像从 <a href="https://hub.docker.com">Docker Hub</a> 下载</p>
<p><code>docker run (参数) [容器名称]</code></p>
<table>
 <thead>
 <tr>
 <th style="text-align: left">参数</th>
 <th style="text-align: left">作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left"><code>--name [name]</code></td>
 <td style="text-align: left">更改容器名称</td>
 </tr>
 <tr>
 <td style="text-align: left"><code>-d</code></td>
 <td style="text-align: left">运行成 Detached 模式</td>
 </tr>
 <tr>
 <td style="text-align: left"><code>-p [端口]:[容器端口]</code></td>
 <td style="text-align: left">端口映射</td>
 </tr>
 <tr>
 <td style="text-align: left"><code>-v [路径]:[容器路径]</code></td>
 <td style="text-align: left">文件映射。将电脑的文件映射入容器</td>
 </tr>
 </tbody>
</table>
<p>第一次使用的镜像会自动从 Docker Hub 下载</p></description>
</item>
<item>
<title>树莓派安装设置</title>
<link>https://www.zhhuu.top/posts/raspi-setup/</link>
<pubDate>Wed, 20 Jan 2021 10:02:05 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/raspi-setup/</guid>
<description><p>重新刷入系统进行各项设置安装</p>
<h1 id="系统下载安装">系统下载安装</h1>
<p>有3个系统可以选择</p>
<ul>
<li><a href="https://www.raspberrypi.org/software/operating-systems/">Raspbian</a></li>
<li><a href="https://ubuntu.com/download/raspberry-pi">Ubuntu</a>:默认账号ubuntu,密码ubuntu,进入后会要求修改密码</li>
<li><a href="https://gitee.com/openfans-community/Debian-Pi-Aarch64">OPENFANS Raspbian</a>:一个由Debian重新构建的系统</li>
</ul>
<h1 id="软件源">软件源</h1>
<h2 id="修改apt软件源">修改apt软件源</h2>
<p>备份软件源后对其进行修改
<code>sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak</code></p>
<p>在这里使用清华tuna源
在 ARM(arm64, armhf)、PowerPC(ppc64el)、RISC-V(riscv64) 和 S390x 等架构的设备上(对应官方源为ports.ubuntu.com)使用 ubuntu-ports 镜像。</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#6c7086;font-style:italic"># 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span><span style="color:#6c7086;font-style:italic"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span><span style="color:#6c7086;font-style:italic"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span><span style="color:#6c7086;font-style:italic"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span><span style="color:#6c7086;font-style:italic"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span><span style="color:#6c7086;font-style:italic"># 预发布软件源,不建议启用</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span><span style="color:#6c7086;font-style:italic"># deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span><span style="color:#6c7086;font-style:italic"># deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse</span>
</span></span></code></pre></div><h2 id="修改pippip3源">修改pip/pip3源</h2>
<p>这里发现清华源好像就不太好用了,下载安装的时候我看都用的是阿里的源。但是可以先配置上:
1.创建<code>.pip</code>文件夹</p></description>
</item>
<item>
<title>正则表达式笔记</title>
<link>https://www.zhhuu.top/posts/regular-expression/</link>
<pubDate>Thu, 31 Dec 2020 19:32:35 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/regular-expression/</guid>
<description><p>🔗 链接</p>
<ul>
<li><a href="http://c.runoob.com/front-end/854">正则表达式在线测试 | 菜鸟工具</a></li>
</ul>
<h1 id="标记">标记</h1>
<table>
 <thead>
 <tr>
 <th>表达式</th>
 <th>作用</th>
 <th>示例</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>^</code></td>
 <td>匹配行首</td>
 <td><code>^a</code></td>
 <td>匹配 a 在行首的情况</td>
 </tr>
 <tr>
 <td><code>$</code></td>
 <td>结匹配行尾</td>
 <td><code>a$</code></td>
 <td>匹配 a 在行尾的情况</td>
 </tr>
 </tbody>
</table>
<h1 id="普通字符大小写敏感">普通字符(大小写敏感)</h1>
<table>
 <thead>
 <tr>
 <th>表达式</th>
 <th>作用</th>
 <th>示例</th>
 <th>作用</th>
 <th></th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>[]</code></td>
 <td>只能匹配中括号中的字符</td>
 <td><code>[ABC]</code></td>
 <td>匹配字符串中的所有 A、B、C</td>
 <td></td>
 </tr>
 <tr>
 <td><code>[^A]</code></td>
 <td>除去</td>
 <td><code>[^ABC]</code></td>
 <td>得到除了 ABC 以外的所有字符</td>
 <td></td>
 </tr>
 <tr>
 <td><code>[A-Z]</code></td>
 <td>某一个区间(可以是大写区间、小写区间、数字区间)</td>
 <td><code>[A-C]</code></td>
 <td>匹配 A-C 的区间</td>
 <td></td>
 </tr>
 <tr>
 <td><code>.</code></td>
 <td>匹配 除换行符的所有单个字符,相当于<code>[^\n\r]</code></td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>[\s]</code></td>
 <td>匹配 空白字符(空格、换行)</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>[\s]</code></td>
 <td>匹配 非空白字符(包括换行)</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>[\w]</code></td>
 <td>匹配 字母、数字、下划线,相当于<code>[A-Za-z0-9]</code></td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 </tbody>
</table>
<h1 id="非打印字符">非打印字符</h1>
<table>
 <thead>
 <tr>
 <th>符号</th>
 <th>作用</th>
 <th>示例</th>
 <th>作用</th>
 <th></th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td>\ca</td>
 <td>匹配 control+a 的快捷键(\c 是表示 c,\为转义)(\cx 的 x 必须是 A-Z 或者 a-z)</td>
 <td>\cv</td>
 <td>匹配 ctrl+v 的快捷键</td>
 <td></td>
 </tr>
 <tr>
 <td><code>\f</code></td>
 <td>换页符</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\n</code></td>
 <td>换行符</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\r</code></td>
 <td>回车</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\s</code></td>
 <td>空白字符,包括空格、制表符、换页符等等</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\S</code></td>
 <td>非空白字符,包括回车</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\t</code></td>
 <td>制表符(Tab)</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\v</code></td>
 <td>垂直制表符(Vertical Tab)</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\d</code></td>
 <td>数字字符,等价于<code>[0-9]</code></td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\D</code></td>
 <td>非数字字符,等价于<code>[^0-9]</code></td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\w</code></td>
 <td>单词(word)</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\W</code></td>
 <td>非单词</td>
 <td></td>
 <td></td>
 <td></td>
 </tr>
 </tbody>
</table>
<h1 id="特殊字符">特殊字符</h1>
<table>
 <thead>
 <tr>
 <th>符号</th>
 <th>作用</th>
 <th>示例</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code> $</code></td>
 <td>匹配字符串的结尾位置</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>()</code></td>
 <td>标记一个子表达式开始和结束的位置</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>*</code></td>
 <td>匹配前面的子表达式 0 次或多次</td>
 <td>go*gle</td>
 <td>可以匹配 ggle,google,gooooogle 等</td>
 </tr>
 <tr>
 <td><code>+</code></td>
 <td>匹配前面的子表达式 1 次或多次(1+)</td>
 <td>go+gle</td>
 <td>可以匹配 gogle,goooogle 等</td>
 </tr>
 <tr>
 <td><code>.</code></td>
 <td>匹配除换行符之外的任何单字符</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>[</code></td>
 <td>标记一个中括号表达式的开始</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>?</code></td>
 <td>匹配前面的字符可有可无,或指明一个非贪婪限定符</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>\</code></td>
 <td>转义符</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>^</code></td>
 <td>匹配输入字符串的开始位置</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>{</code></td>
 <td>标记限定符表达式的开始</td>
 <td></td>
 <td></td>
 </tr>
 <tr>
 <td><code>|</code></td>
 <td>或(两项之间的选择)</td>
 <td><code>a|b</code></td>
 <td>匹配 a 或 b</td>
 </tr>
 </tbody>
</table>
<h1 id="限定符">限定符</h1>
<table>
 <thead>
 <tr>
 <th>符号</th>
 <th>作用</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td><code>{n}</code></td>
 <td>匹配 n 次</td>
 </tr>
 <tr>
 <td><code>{n,}</code></td>
 <td>匹配 n 次及以上</td>
 </tr>
 <tr>
 <td><code>{n,m}</code></td>
 <td>至少匹配 n 次,至多匹配 m 次</td>
 </tr>
 </tbody>
</table>
<h1 id="高级匹配">高级匹配</h1>
<ul>
<li><strong>贪婪匹配:</strong> 匹配到最后
<code>&lt;.+&gt;</code>默认贪婪匹配任意字符</li>
<li><strong>懒惰匹配:</strong> 匹配到就停止
<code>&lt;.+?&gt;</code>懒惰匹配任意字符</li>
</ul></description>
</item>
<item>
<title>PythonNote1</title>
<link>https://www.zhhuu.top/posts/python-note-1/</link>
<pubDate>Thu, 08 Oct 2020 09:25:58 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/python-note-1/</guid>
<description><h1 id="删除对象">删除对象</h1>
<p>类似C#中的 <code>=null</code></p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>var1 <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#fab387">1</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>var2 <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#fab387">10</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span><span style="color:#cba6f7">del</span> var1,var2 <span style="color:#6c7086;font-style:italic">#关闭</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span><span style="color:#89dceb">print</span>(var1)
</span></span></code></pre></div><h1 id="字符串截取">字符串截取</h1>
<p>字符串的截取的语法格式:
&lsquo;变量[头下标:尾下标:步长]&rsquo;
头下标从0开始,尾下标从-1开始
某一下标后的所有内容 &lsquo;str[1:]&rsquo;</p>
<blockquote>
<p>列表同理,将str替换为list</p>
</blockquote>
<blockquote>
<p>都是闭区间</p>
</blockquote>
<ul>
<li>步长:间距截取,默认间隔为1,为-1时表示逆向读取</li>
</ul>
<h2 id="join">join()</h2>
<p>str.join() 方法用于将序列中的元素以<strong>指定的字符(str)连接</strong>生成一个新的字符串。
<code>list</code> → <code>string</code></p>
<h2 id="split">split()</h2>
<p>split() 通过<strong>指定分隔符(str)<strong>对字符串进行</strong>切片形成列表</strong></p>
<h1 id="数据类型">数据类型</h1>
<ul>
<li>Number(数字)</li>
<li>String(字符串)</li>
<li>List(列表) <code>[]</code>:元素可以修改</li>
<li>Tuple(元组)<code>()</code>:元素不可修改,也可以用<code>+</code>进行拼接
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>tup1 <span style="color:#89dceb;font-weight:bold">=</span> () <span style="color:#6c7086;font-style:italic"># 空元组</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>tup2 <span style="color:#89dceb;font-weight:bold">=</span> (<span style="color:#fab387">20</span>,) <span style="color:#6c7086;font-style:italic"># 一个元素,需要在元素后添加逗号</span>
</span></span></code></pre></div></li>
<li>Set(集合)<code>{}</code>: 可以进行集合运算
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>a <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#89dceb">set</span>(<span style="color:#a6e3a1">&#39;abracadabra&#39;</span>)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>b <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#89dceb">set</span>(<span style="color:#a6e3a1">&#39;alacazam&#39;</span>)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span><span style="color:#89dceb">print</span>(a <span style="color:#89dceb;font-weight:bold">-</span> b) <span style="color:#6c7086;font-style:italic"># a 和 b 的差集</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span><span style="color:#89dceb">print</span>(a <span style="color:#89dceb;font-weight:bold">|</span> b) <span style="color:#6c7086;font-style:italic"># a 和 b 的并集</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span><span style="color:#89dceb">print</span>(a <span style="color:#89dceb;font-weight:bold">&amp;</span> b) <span style="color:#6c7086;font-style:italic"># a 和 b 的交集</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">7</span><span><span style="color:#89dceb">print</span>(a <span style="color:#89dceb;font-weight:bold">^</span> b) <span style="color:#6c7086;font-style:italic"># a 和 b 中不同时存在的元素</span>
</span></span></code></pre></div>创建空集合<code>set()</code></li>
<li>Dictionary(字典)<code>{a:b}</code>:内容写法与集合不同
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#89dceb">dict</span> <span style="color:#89dceb;font-weight:bold">=</span> {}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span><span style="color:#89dceb">dict</span>[<span style="color:#a6e3a1">&#39;one&#39;</span>] <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#a6e3a1">&#34;1 - 菜鸟教程&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span><span style="color:#89dceb">dict</span>[<span style="color:#fab387">2</span>] <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#a6e3a1">&#34;2 - 菜鸟工具&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span>tinydict <span style="color:#89dceb;font-weight:bold">=</span> {<span style="color:#a6e3a1">&#39;name&#39;</span>: <span style="color:#a6e3a1">&#39;runoob&#39;</span>,<span style="color:#a6e3a1">&#39;code&#39;</span>:<span style="color:#fab387">1</span>, <span style="color:#a6e3a1">&#39;site&#39;</span>: <span style="color:#a6e3a1">&#39;www.runoob.com&#39;</span>}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span><span style="color:#89dceb">print</span> (<span style="color:#89dceb">dict</span>[<span style="color:#a6e3a1">&#39;one&#39;</span>]) <span style="color:#6c7086;font-style:italic"># 输出键为 &#39;one&#39; 的值</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span><span style="color:#89dceb">print</span> (<span style="color:#89dceb">dict</span>[<span style="color:#fab387">2</span>]) <span style="color:#6c7086;font-style:italic"># 输出键为 2 的值</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span><span style="color:#89dceb">print</span> (tinydict) <span style="color:#6c7086;font-style:italic"># 输出完整的字典</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span><span style="color:#89dceb">print</span> (tinydict<span style="color:#89dceb;font-weight:bold">.</span>keys()) <span style="color:#6c7086;font-style:italic"># 输出所有键</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span><span style="color:#89dceb">print</span> (tinydict<span style="color:#89dceb;font-weight:bold">.</span>values()) <span style="color:#6c7086;font-style:italic"># 输出所有值</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span>tinydic2 <span style="color:#89dceb;font-weight:bold">=</span> <span style="color:#89dceb">dict</span>(Runoob<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#fab387">1</span>, Google<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#fab387">2</span>, Taobao<span style="color:#89dceb;font-weight:bold">=</span><span style="color:#fab387">3</span>)
</span></span></code></pre></div></li>
</ul>
<h2 id="数据类型转换">数据类型转换</h2>
<p>数据类型的转换,你只需要将<strong>数据类型作为函数名</strong>即可</p></description>
</item>
<item>
<title>Word排版技巧</title>
<link>https://www.zhhuu.top/posts/word-typesetting/</link>
<pubDate>Thu, 16 Jul 2020 22:12:31 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/word-typesetting/</guid>
<description><p>Word的一点小技巧</p>
<h1 id="快捷键按键">快捷键/按键</h1>
<table>
 <thead>
 <tr>
 <th style="text-align: left">快捷键</th>
 <th style="text-align: left">功能</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left"><kbd>Del</kbd></td>
 <td style="text-align: left">向后删除</td>
 </tr>
 <tr>
 <td style="text-align: left"><kbd>Backspace</kbd></td>
 <td style="text-align: left">向前删除</td>
 </tr>
 <tr>
 <td style="text-align: left"><kbd>Ctrl</kbd> + <kbd>Enter</kbd></td>
 <td style="text-align: left">插入分页符</td>
 </tr>
 </tbody>
</table>
<h1 id="单位">单位</h1>
<ul>
<li>单位可以直接输入,例如“50磅”</li>
<li>修改默认单位可以在“文件-选项-高级-显示-度量单位”修改</li>
</ul>
<h1 id="格式">格式</h1>
<ul>
<li>粘贴时可以只粘贴文本而不粘贴格式:<strong>“右键-只保留文本”</strong>,修改默认粘贴方式可以在 <strong>“文件-选项-高级-剪切、复制和粘贴”</strong> 处修改默认值(从其他程序粘贴-&gt;“仅保留文本”)</li>
<li>定制功能区提高效率(高级选手)【Word选项-自定义功能区】</li>
</ul>
<p>参考:<a href="https://space.bilibili.com/2878969">元卅的B站主页</a></p>
<h1 id="个人信息排版">个人信息排版</h1>
<ul>
<li>用表格排版,防止改字体改信息以后引起排版问题</li>
<li>表头可以使用分散对齐,点击表格左上角的控制柄后设置居中可以使表格内容竖直和水平居中</li>
<li>最后去掉表格框线,再加下框线达到下划线的效果</li>
</ul>
<h1 id="设置目录">设置目录</h1>
<ul>
<li><strong>引用选项卡-插入</strong>(插入目录)</li>
<li>使用 <strong>“样式”</strong> 让Word软件知道你的文章结构(标题等),软件可以以此自动生成目录</li>
<li>右键 <strong>“样式”</strong> 中的样式可以修改样式</li>
<li>更改 <strong>“正文”</strong> 的样式会改变后面所有自带样式</li>
</ul>
<h1 id="分隔符">分隔符</h1>
<ul>
<li><strong>文件-选项-显示-显示所有格式标记</strong> 显示特殊排版符号</li>
</ul>
<table>
 <thead>
 <tr>
 <th style="text-align: left">符号</th>
 <th style="text-align: left">使用方法</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left">分页符</td>
 <td style="text-align: left"><code>Ctrl+Enter</code> 插入分页符</td>
 </tr>
 <tr>
 <td style="text-align: left">分节符</td>
 <td style="text-align: left"><strong>“布局-分隔符-分节符”</strong></td>
 </tr>
 </tbody>
</table>
<ul>
<li>再页眉页脚插入分节符可以达到每一页页眉页脚不同/数字不同的效果,点击<code>与上一页相同</code>取消内容与上一页相同</li>
<li>有<code>奇偶页不同</code>的选项</li>
</ul>
<h1 id="公式">公式</h1>
<ul>
<li>插入公式:<strong>“插入-公式”</strong> 或者 <code>Alt</code> + <code>=</code></li>
<li>公式分为 <strong>行内公式(嵌入)</strong> 和 <strong>单行公式(显示)</strong></li>
<li>鼠标悬停在公式的符号上就可以看到字符的转义代码</li>
</ul>
<table>
 <thead>
 <tr>
 <th style="text-align: left">符号</th>
 <th style="text-align: left">特殊字符/用法</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <td style="text-align: left">上标</td>
 <td style="text-align: left">^</td>
 </tr>
 <tr>
 <td style="text-align: left">下标</td>
 <td style="text-align: left">_</td>
 </tr>
 <tr>
 <td style="text-align: left">×(叉乘号)</td>
 <td style="text-align: left">\times</td>
 </tr>
 <tr>
 <td style="text-align: left">·(点乘号)</td>
 <td style="text-align: left">\cdot</td>
 </tr>
 <tr>
 <td style="text-align: left">矢量</td>
 <td style="text-align: left">\vec</td>
 </tr>
 </tbody>
</table>
<ul>
<li>写方程组时加&amp;可以上下对齐</li>
<li>插入域:Seq</li>
<li><code>Alt</code> + <code>F9</code> , SEQ后面加序列名字,再按<code>Alt</code> + <code>F9</code>退出,光标点到标号按<code>F9</code>更新序号,自动标号</li>
<li><code>F9</code>自动更新文档内数据内容</li>
<li>图片显示不全时,改行距(单倍/多倍行距)</li>
</ul></description>
</item>
<item>
<title>为本站添加A2HS</title>
<link>https://www.zhhuu.top/posts/a2hs/</link>
<pubDate>Sat, 27 Jul 2019 15:45:10 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/a2hs/</guid>
<description><p>终究止不住折腾,终于还是把卡住很久的这个功能做出来了。</p>
<p>🔗参考链接</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Add_to_home_screen">Mozilla A2HS</a></li>
<li><a href="https://mdn.github.io/pwa-examples/a2hs/">Mozilla A2HS demo</a></li>
<li><a href="https://developers.google.com/web/fundamentals/app-install-banners/">Google A2HS | App install banners</a></li>
<li><a href="https://developers.google.com/web/fundamentals/web-app-manifest/?utm_source=devtools">Google A2HS | Web app manifest</a></li>
</ul>
<h1 id="manifest的设置">manifest的设置</h1>
<p>一开始的时候瞎瞄两眼介绍,就天真地以为只要<code>manifest.json</code>或者<code>manifest.webmanifest</code>这个文件存在就好了,结果后来慢慢了解发现还有事呢..反正让它跑起来再说&hellip;</p>
<p>不管怎么说,先把<code>manifest.webmanifest</code>写好 <em>(当然你写<code>manifest.json</code>也是可以的,只不过时改了一下后缀名而已,内容相同,看哪个顺眼就用哪个)</em>
那既然要这个文件,就先找最简单的抄了一个,内容如下(来自Mozilla A2HS demo)</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span> &#34;background_color&#34;: &#34;purple&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span> &#34;description&#34;: &#34;Shows random fox pictures. Hey, at least it isn&#39;t cats.&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span> &#34;display&#34;: &#34;fullscreen&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span> &#34;icons&#34;: [
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span> &#34;src&#34;: &#34;icon/fox-icon.png&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span> &#34;sizes&#34;: &#34;192x192&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span> &#34;type&#34;: &#34;image/png&#34;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span> }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span> ],
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span> &#34;name&#34;: &#34;Awesome fox pictures&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span> &#34;short_name&#34;: &#34;Foxes&#34;,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">14</span><span> &#34;start_url&#34;: &#34;/pwa-examples/a2hs/index.html&#34;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">15</span><span>}
</span></span></code></pre></div><p>反正这些属性会英文的都看得懂,照着改就是了。值得一提的有两个属性:</p></description>
</item>
<item>
<title>更快地部署Office</title>
<link>https://www.zhhuu.top/posts/deploy-office-faster/</link>
<pubDate>Sat, 25 May 2019 18:00:00 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/deploy-office-faster/</guid>
<description><p>每次新安装Office诚然是一件很头疼地事情。这里介绍可以快速在电脑上安装Office的方法。</p>
<h1 id="office-tool-plus">Office Tool Plus</h1>
<p>如果你想深入了解Office Tool Plus,也请访问<a href="https://otp.landian.vip/zh-cn/">官方网站</a>。
<img src="OfficeToolSite.webp" alt=""></p>
<p>打开网站以后,点击<strong>立即下载</strong>,并打开<strong>Office Tool Plus</strong>。打开以后可能会进行自动更新。更新完之后进入软件界面
<img src="DeployOffice_1.webp" alt=""></p>
<h1 id="个人快速安装office">个人快速安装Office</h1>
<p>如果仅在一台电脑上安装,你可以直接转到<code>安装</code>选项卡进行安装。
<img src="DeployOffice_2.webp" alt=""></p>
<p>1、选择你需要的Office套件。</p>
<blockquote>
<p>Win10推荐使用Office2019,Win7推荐使用Office2016
建议安装零售版,即<strong>Retail</strong></p>
</blockquote>
<p><img src="DeployOffice_3.webp" alt=""></p>
<p>2、根据你需要的Office软件勾选应用程序。</p>
<blockquote>
<p>完整版Office安装的项目为<strong>Excel Powerpoint Word Access Publisher</strong>。大学生建议勾选完整版Office的安装项目。</p>
</blockquote>
<p><img src="DeployOffice_4.webp" alt=""></p>
<p>3、安装设置:
根据系统,设置<code>体系结构</code>。为了获取较新的Office版本,建议把<code>通道</code>设置为&quot;每月通道&quot;。<code>安装方式</code>无需更改。
<img src="DeployOffice_5.webp" alt=""></p>
<p>设置<code>可选设置</code>下的<code>更新设置</code>。
<img src="DeployOffice_6.webp" alt=""></p>
<p>注意其中的<strong>禁用Office更新</strong>和<strong>使用配置管理器管理更新</strong>,建议取消勾选。
<img src="DeployOffice_7.webp" alt=""></p>
<p><code>更新通道</code>建议更改为&quot;每月通道&quot;
<img src="DeployOffice_8.webp" alt=""></p>
<p><code>激活设置</code>中,按需要进行勾选。
<img src="DeployOffice_9.webp" alt=""></p>
<p>4、以上设置完毕后,即可点击<strong>开始安装</strong>。等待安装完毕即可使用。</p>
<h1 id="批量快速安装office">批量快速安装Office</h1>
<p>这种情况适用于多台设备需要安装Office。首先需要在一台机器上完成配置设置。</p>
<ol>
<li>
<p>转到<code>下载</code>选项卡。点击<code>版本号</code>,<code>查询版本号</code>。
<img src="DeployOffice_10.webp" alt=""></p>
</li>
<li>
<p>设置<code>常规设置</code>中的<code>通道</code>、<code>体系结构</code>以及<code>版本</code>。
<img src="DeployOffice_11.webp" alt=""></p>
</li>
<li>
<p>点击上方的<strong>开始</strong>按钮。</p>
</li>
<li>
<p>下载完成后,转到<code>安装</code>选项卡,参照上文<strong>个人快速安装Office</strong>的前三个步骤。不同的是,<code>安装设置</code>中的<code>安装方式</code>应设置为<strong>离线安装</strong>。
<img src="DeployOffice_12.webp" alt=""></p>
</li>
<li>
<p>点击开始安装旁边的三角形,选择<strong>保存配置为XML</strong>。</p>
</li>
<li>
<p>找到并打开你保存的XML文件,转到其中<code>SourcePath</code>所指的目录,复制整个文件夹到你的U盘。
<img src="DeployOffice_13.webp" alt=""></p>
</li>
<li>
<p>把你保存的XML文件也复制到U盘下的同一个文件夹。</p>
</li>
<li>
<p>当你需要在其他电脑上从U盘安装Office时,修改其中<code>SourcePath</code>所指的目录为你的U盘所在的同文件夹目录,打开<strong>Office Tool Plus</strong>,进入<code>安装</code>选项卡,点击开始安装旁边的三角形,选择<strong>选择XML文件</strong>,选择你的XML文件,点击<strong>开始安装</strong>。或者使用微软的<strong>Office Deployment Tool</strong>,用CMD的方式进行安装。这里不再介绍这种方法,请百度。</p>
</li>
</ol></description>
</item>
<item>
<title>把自己的城市地图设置为壁纸</title>
<link>https://www.zhhuu.top/posts/city-phone-background/</link>
<pubDate>Sun, 19 May 2019 20:00:00 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/city-phone-background/</guid>
<description><blockquote>
<p>说明:经查,网站已经失效,本文仅作存档</p>
</blockquote>
<p><a href="https://alvarcarto.com/phone-background/generator/">这个网站</a>可以把自己的城市设置为壁纸。具体步骤如下:</p>
<p>你会看到如下界面
<img src="PhoneBackground_1.webp" alt=""></p>
<p>可以在 <strong>Map Location</strong> 那一栏输入自己想要的城市。我输入的是深圳。
<img src="PhoneBackground_2.webp" alt=""></p>
<p>同时,你也可以更改地图颜色。共有4种颜色可选。
<img src="PhoneBackground_3.webp" alt=""></p>
<p>还可以选图片大小。部分热门机型已经有预设了,可以直接选择。
<img src="PhoneBackground_4.webp" alt=""></p>
<p>如果没有,可以手动设置图片大小。我这里设置1080P。
<img src="PhoneBackground_5.webp" alt=""></p>
<p>最后点击 <strong>蓝色按钮 Generate</strong>,<strong>Download</strong> 下载即可。</p></description>
</item>
<item>
<title>使用Powershell自动设置壁纸</title>
<link>https://www.zhhuu.top/posts/powershell-wallpaper/</link>
<pubDate>Fri, 15 Mar 2019 19:00:08 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/powershell-wallpaper/</guid>
<description><p>发现CMD不能达到此目的,更换更高级的Powershell来执行这个任务~</p>
<p>最近有的人经常更换电脑桌面壁纸,而且壁纸我觉得也不算好看(很难看),基本上就是起到哗众取宠的目的,所以我打算利用脚本自动定时更换电脑壁纸,达到锁定电脑壁纸的目的。</p>
<h1 id="准备工作">准备工作</h1>
<p>学校的电脑系统是Win7,默认设置不允许执行脚本(不知道是不是Ghost系统的人设置的),所以第一步要解除限制。
Powershell中执行命令如下:
<code>Set-ExecutionPolicy Unrestricted</code>
执行完毕之后就能运行<code>.ps1</code>脚本了。</p>
<h1 id="自动更换壁纸的函数方法">自动更换壁纸的函数方法</h1>
<p>保存如下代码到一个<code>.ps1</code>文件中。(可以用记事本编辑再更改文件拓展名)</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span><span style="color:#f38ba8">Function</span> <span style="color:#89dceb">Set-WallPaper($Value</span>)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span> <span style="color:#89dceb">Set-ItemProperty</span> -path <span style="color:#a6e3a1">&#39;HKCU:\Control Panel\Desktop\&#39;</span> -name wallpaper -value <span style="color:#f5e0dc">$value</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span> rundll32.<span style="color:#fab387">exe</span> user32.dll, UpdatePerUserSystemParameters <span style="color:#fab387">1</span>, True
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">7</span><span><span style="color:#89dceb">Set-WallPaper</span> -value <span style="color:#a6e3a1">&#34;C:\Windows\Web\Wallpaper\Homes_Background.bmp&#34;</span>
</span></span></code></pre></div><p>将其中<code>C:\Windows\Web\Wallpaper\Homes_Background.bmp</code>更改成壁纸所在处,执行脚本即生效。</p>
<h1 id="添加到计划任务">添加到计划任务</h1>
<p>计划任务的位置在 <strong>&ldquo;控制面板&rdquo;-(&ldquo;系统和安全&rdquo;)-&ldquo;管理工具&rdquo;-&ldquo;计划任务&rdquo;</strong>
打开后点击 <strong>&ldquo;添加基本任务&rdquo;</strong> ,之后就可以跟着向导走了。执行文件填写 <strong>powershell</strong> ,参数填写刚刚保存的脚本文件位置即可。
<img src="planned-task.png" alt=""></p>
<h1 id="还可以">还可以</h1>
<p><strong>每日获取Bing图片并设为壁纸</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#f38ba8">function</span> <span style="color:#89dceb">Save-BingTodayImage</span>()
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span> <span style="color:#6c7086;font-style:italic">#必应图片故事API</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span> <span style="color:#f5e0dc">$bingImageApi</span> =<span style="color:#a6e3a1">&#39;http://www.bing.com/HPImageArchive.aspx?format=xml&amp;idx=0&amp;n=1&amp;mkt=zh-cn&#39;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span> <span style="color:#f5e0dc">$bingUri</span> = <span style="color:#a6e3a1">&#39;http://www.bing.com/&#39;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span> <span style="color:#6c7086;font-style:italic"># 获取图片链接</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span> [<span style="color:#f9e2af">xml</span>]<span style="color:#f5e0dc">$bingImageXml</span> = (<span style="color:#89dceb">Invoke-WebRequest</span> -Uri <span style="color:#f5e0dc">$bingImageApi</span>).<span style="color:#fab387">Content</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span> <span style="color:#89dceb">Write-Host</span> <span style="color:#a6e3a1">&#34; 今日图片故事: </span>$( <span style="color:#f5e0dc">$bingImageXml</span>.<span style="color:#fab387">images</span>.<span style="color:#fab387">image</span>.<span style="color:#fab387">copyright</span> )<span style="color:#a6e3a1"> &#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span> <span style="color:#f5e0dc">$imgLink</span> = <span style="color:#a6e3a1">&#39;{0}{1}&#39;</span> <span style="color:#89dceb;font-weight:bold">-f</span> <span style="color:#f5e0dc">$bingUri</span> , <span style="color:#f5e0dc">$bingImageXml</span>.<span style="color:#fab387">images</span>.<span style="color:#fab387">image</span>.<span style="color:#fab387">url</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span> <span style="color:#6c7086;font-style:italic"># 下载和保存图片</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span> <span style="color:#f5e0dc">$imageDir</span> = <span style="color:#a6e3a1">&#34;</span><span style="color:#f5e0dc">$HOME</span><span style="color:#a6e3a1">\Pictures\Bing\&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">14</span><span> <span style="color:#cba6f7">if</span>( <span style="color:#89dceb;font-weight:bold">-not</span> (<span style="color:#89dceb">Test-Path</span> <span style="color:#f5e0dc">$imageDir</span>) )
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">15</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">16</span><span> mkdir <span style="color:#f5e0dc">$imageDir</span> | <span style="color:#89dceb">Out-Null</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">17</span><span> }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">18</span><span> <span style="color:#f5e0dc">$imageFile</span> = <span style="color:#89dceb">Join-Path</span> <span style="color:#f5e0dc">$imageDir</span> ( <span style="color:#a6e3a1">&#39;{0}.jpg&#39;</span> <span style="color:#89dceb;font-weight:bold">-f</span> <span style="color:#f5e0dc">$bingImageXml</span>.<span style="color:#fab387">images</span>.<span style="color:#fab387">image</span>.fullstartdate)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">19</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">20</span><span> <span style="color:#89dceb">Invoke-WebRequest</span> -Uri <span style="color:#f5e0dc">$imgLink</span> -OutFile <span style="color:#f5e0dc">$imageFile</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">21</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">22</span><span> <span style="color:#cba6f7">return</span> <span style="color:#f5e0dc">$imageFile</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">23</span><span>}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">24</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">25</span><span><span style="color:#f38ba8">Function</span> <span style="color:#89dceb">Set-DesktopWallPaper($imagePath</span>)
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">26</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">27</span><span> <span style="color:#89dceb">Set-ItemProperty</span> -path <span style="color:#a6e3a1">&#39;HKCU:\Control Panel\Desktop\&#39;</span> -name wallpaper -value <span style="color:#f5e0dc">$imagePath</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">28</span><span> RUNDLL32.<span style="color:#fab387">EXE</span> USER32.<span style="color:#fab387">DLL</span> UpdatePerUserSystemParameters ,<span style="color:#fab387">1</span> ,True
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">29</span><span>}
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">30</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">31</span><span><span style="color:#6c7086;font-style:italic"># 获取今日必应背景图片</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">32</span><span><span style="color:#f5e0dc">$image</span>=<span style="color:#89dceb">Save-BingTodayImage</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">33</span><span> 
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">34</span><span><span style="color:#6c7086;font-style:italic">#设置为桌面墙纸</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">35</span><span><span style="color:#89dceb">Set-DesktopWallPaper</span> -imagePath <span style="color:#f5e0dc">$image</span>
</span></span></code></pre></div></description>
</item>
<item>
<title>PPT设计指南</title>
<link>https://www.zhhuu.top/posts/ppt-design-guide/</link>
<pubDate>Fri, 23 Nov 2018 20:09:45 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/ppt-design-guide/</guid>
<description><p>其实做了这么多的 PPT 以后,慢慢摸索出了一种做 PPT 的方式技巧。但其实下面包括的也不仅仅是技巧,还包含了一套我认为比较成熟的设计系统(借鉴+创新),目的是为了使演示过程更加流畅。当然,要制造出这样的 PPT,达到这样的效果是肯定要花费一些时间的。可能只有像我这种对美有变态追求的人可能才会花费如此多的时间做 PPT,如果您有兴趣的话,可以继续看下去。</p>
<blockquote>
<p>所需:
Microsoft PowerPoint 2016 或以上
耐心</p>
</blockquote>
<h1 id="引言">引言</h1>
<p>Microsoft Office 2016 中新引进了“变体”的切换效果。通过这个全新的切换效果能更准确地实现<strong>Material Design</strong>和<strong>Microsoft Fluent Design System</strong>中的一些内容,使整个幻灯片的设计更加系统化。</p>
<p>🔗 链接</p>
<ul>
<li><a href="https://material.io/">Material Design</a></li>
<li><a href="https://www.microsoft.com/design/fluent/">Microsoft Fluent Design System</a></li>
</ul>
<h2 id="变体的简单应用">变体的简单应用</h2>
<p>&ldquo;变体&quot;是 Office 2016 中新增加的一种切换效果。它可以自动识别两张相邻的幻灯片之间的变化并自动插补动画。下面通过两个例子介绍这种切换动画的使用方法。</p>
<h3 id="精确的位移">精确的位移</h3>
<ol>
<li>
<p>在第一张幻灯片中创建一个正方形。
<img src="%E5%8F%98%E4%BD%93%E4%BD%8D%E7%A7%BB1.webp" alt="创建正方形(变体位移1)"></p>
</li>
<li>
<p>在第二张幻灯片中创建一个正方形,并移动到你想要的位置。
<img src="%E5%8F%98%E4%BD%93%E4%BD%8D%E7%A7%BB2.webp" alt="变体位移2"></p>
</li>
<li>
<p>选中第二张幻灯片,在顶栏的&quot;切换&quot;中选择&quot;变体&rdquo;。
<img src="%E5%8F%98%E4%BD%93%E4%BD%8D%E7%A7%BB3.webp" alt="变体位移3"></p>
</li>
<li>
<p>放映幻灯片,正方形从第一张幻灯片的位置移动到第二张幻灯片的位置。</p>
</li>
</ol>
<h3 id="精确地位移并更改大小">精确地位移并更改大小</h3>
<p>在上述的操作的基础上您可以尝试改变第二张幻灯片中正方形的形状和大小,您可以发现放映幻灯片的时候原来的正方形自动变成了第二张幻灯片中的样式(大小,位置,甚至颜色,形状的改变)。</p>
<p>因此,您可以利用变体的这一特性实现后文中卡片的大小,位置甚至深度(阴影大小)的变化。</p>
<h3 id="多动画连续播放和延迟">多动画连续播放和延迟</h3>
<p><img src="%E9%A1%BA%E6%AC%A1%E6%B7%A1%E5%87%BA1.webp" alt="顺次淡出1"> 1.创建矩形若干个,并纵向排列。</p>
<p><img src="%E9%A1%BA%E6%AC%A1%E6%B7%A1%E5%87%BA2.webp" alt="顺次淡出2"> 2.拖动鼠标选中所有创建的矩形,在顶栏的&quot;动画&quot;选项卡中选择&quot;淡出&quot;动画。此时,选中的所有矩形在幻灯片放映时会同时淡出。</p>
<p><img src="%E9%A1%BA%E6%AC%A1%E6%B7%A1%E5%87%BA3.webp" alt="顺次淡出3">
<img src="%E9%A1%BA%E6%AC%A1%E6%B7%A1%E5%87%BA4.webp" alt="顺次淡出4"></p>
<p>3.为了遵循 Material Design 中的&quot;有层次的时序&quot;的原则,我们将每个矩形相对其上层的矩形延迟 0.1 秒钟淡出,直至最后一个矩形。</p>
<blockquote>
<p>建议使用&quot;缩放&quot;动画实现矩形的顺次进入屏幕,这么做的依据是下文中所提将到的&quot;视觉连贯性&quot;原则。缩放在大部分情况下是最适合<strong>几何形状</strong>进入屏幕的方式,而顺次淡出则适合<strong>文字</strong>进入屏幕。
<em>上文使用矩形是为了简化演示过程。</em></p>
</blockquote>
<h3 id="圆的场景切换的实现">圆的场景切换的实现</h3>
<p><img src="%E5%9C%86%E5%BD%A2%E5%88%87%E6%8D%A21.webp" alt="圆形切换1"> 1.您将在第一张幻灯片中创建这个场景切换。这意味着这一张幻灯片将包含两章节的内容(前一章节的结束部分和后一章节的开头部分)。<strong>这里用&quot;标题&quot;二字表示上一章节的结束部分。</strong></p>
<p><img src="%E5%9C%86%E5%BD%A2%E5%88%87%E6%8D%A22.webp" alt="圆形切换2"> 2.创建一个与演示区域大小相当的正圆,并将其移动到演示区域的中心。</p>
<p><img src="%E5%9C%86%E5%BD%A2%E5%88%87%E6%8D%A23.webp" alt="圆形切换3"> 3.选中刚才创建的圆形,给所选圆形添加**&ldquo;缩放&rdquo;**动画(在顶栏的&quot;动画&quot;中找到&quot;缩放&quot;,并点击)。从含圆的那张幻灯片开始放映幻灯片,您就能观察到&quot;圆形场景切换&quot;。</p>
<h1 id="元素">元素</h1>
<h2 id="卡片cards">卡片(Cards)</h2>
<blockquote>
<p>分隔各组不同的内容,并归类。</p>
</blockquote>
<p>卡片是包含一组特定数据集的纸片,数据集含有各种相关信息,例如,关于单一主题的照片,文本,和链接。卡片通常是通往更详细复杂信息的入口。卡片有固定的宽度和可变的高度。最大高度限制于可适应平台上单一视图的内容,但如果需要它可以临时扩展(例如,显示评论栏)。卡片不会翻转以展示其背后的信息。</p>
<p>显示这些内容时使用卡片布局:</p>
<ul>
<li>为一个集合,由多种数据类型组成(例如,卡片集包含照片,电影,文本,图像)</li>
<li>不要求直接比较(观看者不直接与图像或字符串比较)</li>
<li>包含可变长度内容,例如评论</li>
<li>如果使用列表需要显示超过三行文本</li>
</ul>
<h3 id="制作卡片">制作卡片</h3>
<p><img src="%E5%88%B6%E4%BD%9C%E5%8D%A1%E7%89%871.webp" alt="制作卡片1"> 1.在顶栏的&quot;插入&quot;选项卡中选择&quot;形状&quot;,选择矩形。</p></description>
</item>
<item>
<title>FileGetter使用说明</title>
<link>https://www.zhhuu.top/posts/file-getter-instructions/</link>
<pubDate>Sun, 29 Apr 2018 19:13:31 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/file-getter-instructions/</guid>
<description><h1 id="file-getter使用说明">File Getter使用说明</h1>
<h2 id="功能">功能</h2>
<p>启动后持续扫描电脑上盘符数,当盘符数量有变更时检索新增盘符内文件。当检索到指定文件时复制到电脑中指定目录(C:/got)下。</p>
<h2 id="使用方法">使用方法</h2>
<p>直接打开(建议存入电脑C盘中某个位置再打开),当你程序成功开始运行后发出短暂(哔)声。当有新盘符插入时,扫描盘符内文件,若有指定类型文件则复制。当扫描完成后程序发出长(1s,哔)声,并自动退出。</p>
<h2 id="使用技巧">使用技巧</h2>
<p>当你在程序运行目录下新建以下文件程序运行逻辑会发生改变:</p>
<p><strong>debug.txt</strong>
当程序运行时,只要检测到运行目录下有此文件,日志窗口会显示出来。当检测到此文件被删去,窗口则会被隐藏。
<em>注意:此操作在程序运行时是实时的,命令即刻执行(在下一个循环时)</em></p>
<p><strong>keeprunning.txt</strong>
当程序完成扫描新磁盘(不管有没有复制)后,若检测到此文件则会继续运行下去。终止程序运行方法参见下文。</p>
<p><strong>exit.txt</strong>
当程序在运行时检测到此文件后则立刻终止运行。</p>
<h2 id="支持的指定类型文件">支持的指定类型文件</h2>
<p>.xls .xlsx</p>
<h2 id="其他说明">其他说明</h2>
<p>本程序仅供学习用途使用。</p></description>
</item>
<item>
<title>Visual Studio 快捷键</title>
<link>https://www.zhhuu.top/posts/visual-studio-hotkey/</link>
<pubDate>Sun, 29 Apr 2018 18:07:34 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/visual-studio-hotkey/</guid>
<description><p>Visual Studio 快捷键整理</p>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mdui@1.0.1/dist/css/mdui.min.css"
 integrity="sha384-cLRrMq39HOZdvE0j6yBojO4+1PrHfB7a9l5qLcmRm/fiWXYY+CndJPmyu5FV/9Tw"
 crossorigin="anonymous"/>
<div class="mdui-typo">
<h1 id="窗口快捷键">窗口快捷键</h1>
<p>记忆诀窍:</p>
<p>凡跟窗口挂上钩的快捷键必有一个W(Windows);
<kbd>Ctrl+W,W</kbd>: 浏览器窗口 (浏览橱窗用有道的翻译是window shopping)</p>
<p><kbd>Ctrl+W,S</kbd>: 解决方案管理器 (Solution)</p>
<p><kbd>Ctrl+W,C</kbd>: 类视图 (Class)</p>
<p><kbd>Ctrl+W,E</kbd>: 错误列表 (Error)</p>
<p><kbd>Ctrl+W,O</kbd>: 输出窗口(输出Output;输出程序的的编译信息 ;可在vs中“工具”—-“选项”—-“调试”—-“输出窗口”进行配置需要查看哪些信息)</p>
<p><kbd>Ctrl+W,P</kbd>: 属性窗口 (属性 Property)</p>
<p><kbd>Ctrl+W,T</kbd>: 任务列表 (任务Task)</p>
<p><kbd>Ctrl+W,X</kbd>: 工具箱 (事实上工具应该是Tool 但t已被任务列表占用了 ;参照一些大神的记忆方法:“X”长得四通八达,而工具就有这样一个特点,所以属性的快捷键是“X”)</p>
<p><kbd>Ctrl+W,B</kbd>: 书签窗口 (书签 Bookmark 书签非常好用,如果有几千行代码,在寻找代码的时候添加书签找起来要快很多)</p>
<p><kbd>Ctrl+W,U</kbd>: 文档大纲 (OutLine;使用第二个字母U)</p>
<p><kbd>Ctrl+D,B</kbd>: 断点窗口 (breakpoint)</p>
<p><kbd>Ctrl+D,I</kbd>: 即时窗口 (immediately)</p>
<h1 id="项目功能快捷键">项目功能快捷键</h1>
<blockquote>
<p>规律:
<kbd>Ctrl</kbd> 是强制功能键
<kbd>Shift</kbd> 有给项目增加功能</p>
</blockquote>
<p><kbd>CTRL + F6 /CTRL + TAB</kbd> 下一个文档窗口即活动窗体切换 (windows操作系统是alt+tab表示在任务之间切换</p>
<p><kbd>CTRL + SHIFT + F6 /CTRL + SHIFT + TAB</kbd> 上一个文档窗口 (在windows系统操作中 相信大家都知道shift有相反的功能 哈哈 在这里体现了)</p></description>
</item>
<item>
<title>C#异步介绍</title>
<link>https://www.zhhuu.top/posts/csharp-async/</link>
<pubDate>Sun, 08 Apr 2018 21:14:06 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/csharp-async/</guid>
<description><p>创建多线程?太麻烦了!来试试更快更便捷的异步。程序无须按照代码顺序自上而下的执行。</p>
<h1 id="什么是异步编程">什么是异步编程</h1>
<p>什么是异步编程呢?举个简单的例子:</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 1</span><span><span style="color:#cba6f7">using</span> <span style="color:#fab387">System.Net.Http</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 2</span><span><span style="color:#cba6f7">using</span> <span style="color:#fab387">System.Threading.Tasks</span>;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 3</span><span><span style="color:#cba6f7">using</span> <span style="color:#fab387">static</span> System.Console;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 4</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 5</span><span><span style="color:#cba6f7">namespace</span> <span style="color:#fab387">Core</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 6</span><span>{
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 7</span><span> <span style="color:#cba6f7">class</span> <span style="color:#f9e2af">Async</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 8</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c"> 9</span><span> <span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> Main()
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">10</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">11</span><span> Start();
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">12</span><span> End();
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">13</span><span> }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">14</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">15</span><span> <span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> Wait()=&gt;WriteLine(<span style="color:#a6e3a1">&#34;waiting...&#34;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">16</span><span> <span style="color:#f38ba8">static</span> <span style="color:#cba6f7">void</span> End()=&gt;WriteLine(<span style="color:#a6e3a1">&#34;end...&#34;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">17</span><span> <span style="color:#f38ba8">static</span> <span style="color:#f38ba8">int</span> Start()
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">18</span><span> {
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">19</span><span> WriteLine(<span style="color:#a6e3a1">&#34;start...&#34;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">20</span><span> HttpClient client = <span style="color:#cba6f7">new</span> HttpClient();
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">21</span><span> Waiting();
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">22</span><span> <span style="color:#f38ba8">var</span> result = client.GetStringAsync(<span style="color:#a6e3a1">&#34;https://www.visualstudio.com/&#34;</span>);
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">23</span><span> <span style="color:#f38ba8">string</span> str = result.Result;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">24</span><span> <span style="color:#cba6f7">return</span> str.Length;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">25</span><span> }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">26</span><span> }
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">27</span><span>}
</span></span></code></pre></div><p>上面这段代码中,Main方法中的代码是按照自上而下的顺序执行的。网络状况不佳时,<strong>Start()</strong> 方法是比较耗时 <em>(注意,这里在Start方法中调用了异步方法GetStringAsync,但该方法在此处是以同步方式执行的,具体原因下文会进行说明)</em> ,在 <strong>Start()</strong> 方法执行完毕之前,整个程序处于阻塞状态。而异步编程可以很好的解决这个问题,<strong>一句简单的话来概括异步编程就是,程序无须按照代码顺序自上而下的执行。</strong></p></description>
</item>
<item>
<title>GPT分区是啥?</title>
<link>https://www.zhhuu.top/posts/gpt-partition/</link>
<pubDate>Sat, 07 Apr 2018 13:01:03 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/gpt-partition/</guid>
<description><p>UEFI BIOS可以说是legacy BIOS的继承者,也就是传统BIOS的后代。以后的主流模式。</p>
<h1 id="gpt">GPT</h1>
<h2 id="mbr与gpt的区别">MBR与GPT的区别</h2>
<p>传统的MBR最大支持2TB的单分区,最多能设置4个主分区;GPT支持2TB以上的单分区,理论上能设置128个主分区(硬盘的4k对齐与GPT无关联,AHCI和GPT无关联)</p>
<p>MBR分区表:Master Boot Record,即硬盘主引导记录分区表,只支持容量在 2.1TB 以下的硬盘,超过2.1TB的硬盘只能管理2.1TB,最多只支持4个主分区或三个主分区和一个扩展分区,扩展分区下可以有多个逻辑分区。
GPT分区表:GPT,全局唯一标识分区表(GUID Partition Table),与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但Windows最大仅支持128个GPT分区,GPT可管理硬盘大小达到了18EB。只有基于UEFI平台的主板才支持GPT 分区引导启动。</p>
<h3 id="gpt-esp">GPT-ESP</h3>
<p>ESP分区:EFI system partition,该分区用于采用了EFI BIOS的电脑系统,用来启动操作系统。分区内存放引导管理程序、驱动程序、系统维护工具等。如果电脑采用了EFI系统,或当前磁盘用于在EFI平台上启动操作系统,则应建议ESP分区。如果只是作为仓库盘,就没必要设置这个分区了。</p>
<h3 id="gpt-msr">GPT-MSR</h3>
<p>ESP分区:EFI system partition,该分区用于采用了EFI BIOS的电脑系统,用来启动操作系统。分区内存放引导管理程序、驱动程序、系统维护工具等。如果电脑采用了EFI系统,或当前磁盘用于在EFI平台上启动操作系统,则应建议ESP分区。如果只是作为仓库盘,也同样没必要设置这个分区。</p>
<h3 id="secure-bootwindows8">SECURE BOOT(Windows8+)</h3>
<p>SECURE BOOT功能:Windows 8中增加了一个新的安全功能,Secure Boot内置于UEFI BIOS中,用来对抗感染MBR、BIOS的恶意软件, Windows 8 缺省将使用Secure Boot,在启动过程中,任何要加载的模块必须签名(强制的),UEFI固件会进行验证, 没有签名或者无法验证的,将不会加载。</p>
<h1 id="uefi">UEFI</h1>
<p>UEFI全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。</p>
<h2 id="uefi的优点">UEFI的优点</h2>
<p> 1.纠错特性:与BIOS显著不同的是,UEFI是用模块化、C语言风格的参数堆栈传递方式、动态链接的形式构建系统,它比BIOS更易于实现,容错和纠错特性也更强,从而缩短了系统研发的时间。更加重要的是,它运行于32位或64位模式,突破了传统16位代码的寻址能力,达到处理器的最大寻址,此举克服了BIOS代码运行缓慢的弊端。</p>
<p> 2.兼容性:与BIOS不同的是,UEFI体系的驱动并不是由直接运行在CPU上的代码组成的,而是用EFI Byte Code(EFI字节代码)编写而成的。Java是以“Byte Code”形式存在的,正是这种没有一步到位的中间性机制,使Java可以在多种平台上运行。UEFI也借鉴了类似的做法。EFI Byte Code是一组用于UEFI驱动的虚拟机器指令,必须在UEFI驱动运行环境下被解释运行,由此保证了充分的向下兼容性。</p>
<p> 3.鼠标操作:UEFI内置图形驱动功能,可以提供一个高分辨率的彩色图形环境,用户进入后能用鼠标点击调整配置,一切就像操作Windows系统下的应用软件一样简单。</p>
<p> 4.强大的可扩展性:UEFI将使用模块化设计,它在逻辑上分为硬件控制与OS(操作系统)软件管理两部分,硬件控制为所有UEFI版本所共有,而OS软件管理其实是一个可编程的开放接口。借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过UEFI加以实现,主板或固件厂商可以将它们作为自身产品的一大卖点。UEFI也提供了强大的联网功能,其他用户可以对你的主机进行可靠的远程故障诊断,而这一切并不需要进入操作系统。</p>
<p> 5.图形界面:目前UEFI主要由这几部分构成:UEFI初始化模块、UEFI驱动执行环境、UEFI驱动程序、兼容性支持模块、UEFI高层应用和GUID磁盘分区组成。</p>
<h1 id="在什么情况下能使用uefigpt模式来装系统呢">在什么情况下能使用UEFI+GPT模式来装系统呢?</h1>
<p>win7/8 64位系统+UEFI才能在GPT中引导哦。但是现在使用传统legacy+MBR模式装系统的,还是比较多的。</p>
<h1 id="ahci">AHCI</h1>
<p>AHCI(Serial ATA Advanced Host Controller Interface)串行ATA高级主控接口/高级主机控制器接口),是在Intel的指导下,由多家公司联合研发的接口标准,它允许存储驱动程序启用高级串行 ATA 功能,</p>
<p>AHCI本质是一种PCI类设备,在系统内存总线和串行ATA设备内部逻辑之间扮演一种通用接口的角色(即它在不同的操作系统和硬件中是通用的)。这类设备描述了一个含控制和状态区域、命令序列入口表的通用系统内存结构;每个命令表入口包含SATA设备编程信息,和一个指向(用于在设备和主机传输数据的)描述表的指针。
AHCI通过包含一个PCI BAR(基址寄存器),来实现原生SATA功能。由于AHCI统一接口的研发成功,使得支持串行ATA产品的开发工作大为简化,操作系统和设备制造商省去了单独开发接口的工作,取而代之的是直接在统一接口上进行操作,可以实现包括NCQ(Native Command Queuing)在内的诸多功能。
AHCI模式则与IDE模式相反,装系统时需要安装SATA驱动(而且貌似只有这个模式能打开NCQ功能)。</p></description>
</item>
<item>
<title>如何唤醒在硬盘中的hexo</title>
<link>https://www.zhhuu.top/posts/wakeup-hexo/</link>
<pubDate>Mon, 28 Aug 2017 23:05:40 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/wakeup-hexo/</guid>
<description><p>昨天重新灌了电脑的系统,发现 hexo 不能用了</p>
<h2 id="安装基本软件">安装基本软件</h2>
<ul>
<li><a href="https://git-for-windows.github.io/">Git</a></li>
<li><a href="http://nodejs.cn/download/">Node.js</a></li>
</ul>
<blockquote>
<p>注意:必须使用 <a href="https://nodejs.org/en/blog/release/v12.14.0/">Node v12.14.0</a> 旧版 Hexo 才不会报错</p>
</blockquote>
<p><strong>注:Node.js(中文网站)没有使用 https,原因是使用后可能导致无法打开此网页</strong></p>
<h2 id="步骤">步骤</h2>
<p><strong>假使 hexo 目录为 D:/hexo</strong></p>
<ul>
<li>打开 CMD [按下**(win+r)**组合键,输入 cmd]</li>
<li>输入 npm:如果没有 npm 的详细信息,请重装 Node.js</li>
<li>CMD 中定位到 hexo 目录</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-batch" data-lang="batch"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>d:
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span><span style="color:#cba6f7">cd</span> hexo
</span></span></code></pre></div><ul>
<li>安装 hexo:在 CMD 中输入<code>npm install -g hexo</code></li>
<li>安装完成后关闭 CMD</li>
<li>打开 Git,定位到 hexo 的目录<code>cd d:/hexo</code></li>
<li>可以使用啦!</li>
</ul>
<h2 id="密钥问题">密钥问题</h2>
<p>打开 Github,转到你的设置
找到<strong>SSH and GPG keys</strong>,添加新的密钥</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-batch" data-lang="batch"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>git config --global user.name <span style="color:#a6e3a1">&#34;用户名&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>git config --global user.email <span style="color:#a6e3a1">&#34;邮箱&#34;</span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>ssh-keygen -t rsa -C <span style="color:#a6e3a1">&#34;邮箱&#34;</span>
</span></span></code></pre></div><p>你的 windows 账户文件夹内,会有.ssh 的文件夹,找到里面的<strong>id_rsa.pub</strong>文件。将其内部所有内容复制到 github 的密钥框中,确定即可。</p></description>
</item>
<item>
<title>Hexo书写语法</title>
<link>https://www.zhhuu.top/posts/hexo-grammer/</link>
<pubDate>Tue, 08 Aug 2017 09:30:38 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/hexo-grammer/</guid>
<description><p>介绍如何用Markdown语法在hexo上写文章,发现自己对这类东西还不是很熟悉233&hellip;</p>
<h1 id="markdown语法">Markdown语法</h1>
<h2 id="粗体">粗体</h2>
<p><strong>样式</strong>
<code>**样式**</code></p>
<h2 id="斜体">斜体</h2>
<p><em>样式</em>
<code>*样式*</code></p>
<h2 id="删除线">删除线</h2>
<p><del>样式</del>
<code>~~样式~~</code></p>
<h2 id="分割线">分割线</h2>
<p>样式</p>
<hr>
<hr>
<p>细线:<code>---</code>
粗线:<code>***</code></p>
<h2 id="外链">外链</h2>
<p><a href="https://huuhghhgyg.github.io">样式</a>
<code>[描述](链接地址) </code></p>
<h2 id="代码行">代码行</h2>
<p><code>样式</code>
`样式`</p>
<p>##代码块</p>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>@Echo off
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>Echo &#34;Hello World!&#34;
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>Pause
</span></span></code></pre></div><p>```
@Echo off
Echo &ldquo;Hello World!&rdquo;
Pause
```</p>
<h3 id="引用">引用</h3>
<blockquote>
<p>样式</p>
</blockquote>
<p><code>&gt; 样式</code></p>
<h3 id="插入图片">插入图片</h3>
<p><code>![描述](图片链接地址)</code></p>
<h3 id="分级标题">分级标题</h3>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>H1 : # Header 1
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>H2 : ## Header 2
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>H3 : ### Header 3
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>H4 : #### Header 4
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>H5 : ##### Header 5
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>H6 : ###### Header 6
</span></span></code></pre></div><h1 id="我是一级标题">我是一级标题</h1>
<h2 id="我是二级标题">我是二级标题</h2>
<div class="highlight"><pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">1</span><span>我是一级标题
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">2</span><span>====
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">3</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">4</span><span>
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">5</span><span>我是二级标题
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f849c">6</span><span>----
</span></span></code></pre></div><h3 id="无序列表">无序列表</h3>
<p>可以用<code>+</code>或<code>-</code>或<code>*</code></p></description>
</item>
<item>
<title>HCalculator</title>
<link>https://www.zhhuu.top/posts/hcalculator/</link>
<pubDate>Mon, 26 Jun 2017 08:51:34 +0000</pubDate>
<guid>https://www.zhhuu.top/posts/hcalculator/</guid>
<description><p>A calculator was written by huuhghhgyg
[2022-03-02]:该项目已被归档,只是留作纪念。</p>
<h1 id="链接">链接</h1>
<p><a href="https://github.com/huuhghhgyg/HCalculator">View on Github 在Github查看</a>
<a href="https://github.com/huuhghhgyg/HCalculator/zipball/master">Download .zip 下载.zip文件</a>
<a href="https://github.com/huuhghhgyg/HCalculator/tarball/master">Download .tar.gz 下载.tar.gz文件</a></p>
<h1 id="说明">说明</h1>
<p>若要访问原网页点击<a href="https://huuhghhgyg.github.io/HCalculator">&gt;这里&lt;</a></p>
<p>嗯,就只是一个计算器嘛没什么好看的….要下赶快下XDD</p>
<h1 id="历代大版本更新">历代大版本更新</h1>
<h2 id="计算器10最初版本">计算器1.0(最初版本)</h2>
<p><img src="Calculator1.0.png" alt="">
基本的傻瓜计算器功能,差不多支持键盘乱弹。</p>
<h2 id="计算器20已遗失-作为向material-design的过渡">计算器2.0(已遗失) 作为向Material Design的过渡</h2>
<h2 id="计算器30">计算器3.0</h2>
<p><img src="Calculator3.0.png" alt="">
拥有更好的界面,Material Design设计标准,更多的功能。支持生成随机数,计算日期之间的间隔等新功能。</p>
<h2 id="计算器40当前版本">计算器4.0(当前版本)</h2>
<p><img src="Calculator4.0.png" alt="">
新增了科学计算器。改进了科学计算器的界面。持续改进!</p></description>
</item>
</channel>
</rss>