PageSourceSearch

https://yinji.org/about

html yinji.org collected 2026-10-03 19:17:20 UTC 34,876 bytes, 996 lines download raw bytes

1<!DOCTYPE html>
2<html lang="zh-cn">
3
4<head>
5  <meta http-equiv="X-Clacks-Overhead" content="GNU Terry Pratchett" />
6  <meta charset="utf-8">
7  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8<link rel="shortcut icon" href="https://yinji.org/img/favicon.png" />
9<title>About | 印记</title>
10<meta name="title" content="About" />
11<meta name="description" content="2002年出生,江西人。青山,取自辛弃疾词“我见青山多妩媚,料青山见我应如是”,博客原名“青山绿水”,也来自其中。高中选择文科,一直都有写点东西的爱好,便从2018年开始写博客,期间多次更换域名及名字,最后定名为“印记”,记录我的生活和思考。
12兴趣爱好不算多,屈指可数,是一个数码发烧友、摄影爱好者,2025年购买了相机,使用手机(iPhone 15 Pro Max)和相机(Nikon Z5)记录生活的碎片,喜欢阅读,但往往都是“买书如山倒,读书如抽丝”。虽然没学过计算机和编程,但喜欢关注互联网上的各种有趣内容,你正在访问的这个博客,便是我根据网上的教程搭建而成。
13网站使用开源程序 Hugo,运行在 Cloudflare Pages 上,我在 Now 页面记录我的现状,以及当前正在做的事情,在 Notion 维护一个剁手安利库,分享我买过/使用过且值得推荐的产品,在 Quail 写周报,不定期更新,如感兴趣,可以订阅。
14我想建设一个供中文博主交流的平台,便创建了中文博客圈微信群,目前已有100多人,如果你感兴趣,可以阅读《欢迎来到中文博客圈》查看详细内容。同时,我也运营着一个 Telegram 频道,发布任何与博客相关的内容。
15朴素生活,高尚思考。(Plain living and High thinking)
16Self-Hosted
17
18Umami:网站统计工具
19Bitwarden:密码管理工具
20Hugo:目前使用的博客程序
21
22联系我
23
24Email:[email protected]
25Twitter:@huhexian
26Telegram:@huhexian
27
28博客历史
29
302018年3月17日 青山绿水 博客建立
312021年10月12日 青山绿水 博客转让
322021年10月22日 胡言胡语 博客建立,选择 Twenty Twelve 主题
332021年12月16日 将 青山绿水 博客的文章迁移至 胡言胡语 博客
342021年12月26日 主题更换为:Arke
352022年2月9日 主题更换为:Twenty Twelve
362022年4月8日 主题更换为:Sulli
372022年6月1日 主题更换为:Paper
382022年7月15日 主题更换为:Wing
392022年10月12日 博客程序更换为:Hugo
402023年1月6日 博客程序更换为:WordPress,采用 Twenty Twelve 主题
412023年4月9日 博客运行于 CloudCone
422023年5月5日 博客域名更换为:zuofei.net
432023年5月5日 博客名称更换为:今是昨非
442023年9月7日 博客域名更换为:yinji.org
452023年9月7日 博客名称更换为:印记
462024年8月25日 主题更换为:Dear
472025年8月30日 主题更换为:Berry 2.0
482026年8月4日 博客程序更换为:Hugo
49" />
50<meta name="keywords" content="" />
51
52<link rel="canonical" href="https://yinji.org/about.html">
53
54
55<meta property="og:url" content="https://yinji.org/about.html">
56	<meta property="og:site_name" content="印记">
57	<meta property="og:title" content="About">
58	<meta property="og:description" content="2002年出生,江西人。青山,取自辛弃疾词“我见青山多妩媚,料青山见我应如是”,博客原名“青山绿水”,也来自其中。高中选择文科,一直都有写点东西的爱好,便从2018年开始写博客,期间多次更换域名及名字,最后定名为“印记”,记录我的生活和思考。
59兴趣爱好不算多,屈指可数,是一个数码发烧友、摄影爱好者,2025年购买了相机,使用手机(iPhone 15 Pro Max)和相机(Nikon Z5)记录生活的碎片,喜欢阅读,但往往都是“买书如山倒,读书如抽丝”。虽然没学过计算机和编程,但喜欢关注互联网上的各种有趣内容,你正在访问的这个博客,便是我根据网上的教程搭建而成。
60网站使用开源程序 Hugo,运行在 Cloudflare Pages 上,我在 Now 页面记录我的现状,以及当前正在做的事情,在 Notion 维护一个剁手安利库,分享我买过/使用过且值得推荐的产品,在 Quail 写周报ï¼
60Œä¸å®šæœŸæ›´æ–°ï¼Œå¦‚感兴趣,可以订阅。
61我想建设一个供中文博主交流的平台,便创建了中文博客圈微信群,目前已有100多人,如果你感兴趣,可以阅读《欢迎来到中文博客圈》查看详细内容。同时,我也运营着一个 Telegram 频道,发布任何与博客相关的内容。
62朴素生活,高尚思考。(Plain living and High thinking)
63Self-Hosted Umami:网站统计工具 Bitwarden:密码管理工具 Hugo:目前使用的博客程序 联系我 Email:[email protected] Twitter:@huhexian Telegram:@huhexian 博客历史 2018å¹´3月17日 青山绿水 博客建立 2021å¹´10月12日 青山绿水 博客转让 2021å¹´10月22日 胡言胡语 博客建立,选择 Twenty Twelve 主题 2021å¹´12月16日 将 青山绿水 博客的文章迁移至 胡言胡语 博客 2021å¹´12月26日 主题更换为:Arke 2022å¹´2月9日 主题更换为:Twenty Twelve 2022å¹´4月8日 主题更换为:Sulli 2022å¹´6月1日 主题更换为:Paper 2022å¹´7月15日 主题更换为:Wing 2022å¹´10月12日 博客程序更换为:Hugo 2023å¹´1月6日 博客程序更换为:WordPress,采用 Twenty Twelve 主题 2023å¹´4月9日 博客运行于 CloudCone 2023å¹´5月5日 博客域名更换为:zuofei.net 2023å¹´5月5日 博客名称更换为:今是昨非 2023å¹´9月7日 博客域名更换为:yinji.org 2023å¹´9月7日 博客名称更换为:印记 2024å¹´8月25日 主题更换为:Dear 2025å¹´8月30日 主题更换为:Berry 2.0 2026å¹´8月4日 博客程序更换为:Hugo">
64	<meta property="og:locale" content="zh_cn">
65	<meta property="og:type" content="article">
66
67
68
69
70	<meta name="twitter:card" content="summary">
71	<meta name="twitter:title" content="About">
72	<meta name="twitter:description" content="2002年出生,江西人。青山,取自辛弃疾词“我见青山多妩媚,料青山见我应如是”,博客原名“青山绿水”,也来自其中。高中选择文科,一直都有写点东西的爱好,便从2018年开始写博客,期间多次更换域名及名字,最后定名为“印记”,记录我的生活和思考。
73兴趣爱好不算多,屈指可数,是一个数码发烧友、摄影爱好者,2025年购买了相机,使用手机(iPhone 15 Pro Max)和相机(Nikon Z5)记录生活的碎片,喜欢阅读,但往往都是“买书如山倒,读书如抽丝”。虽然没学过计算机和编程,但喜欢关注互联网上的各种有趣内容,你正在访问的这个博客,便是我根据网上的教程搭建而成。
74网站使用开源程序 Hugo,运行在 Cloudflare Pages 上,我在 Now 页面记录我的现状,以及当前正在做的事情,在 Notion 维护一个剁手安利库,分享我买过/使用过且值得推荐的产品,在 Quail 写周报,不定期更新,如感兴趣,可以订阅。
75我想建设一个供中文博主交流的平台,便创建了中文博客圈微信群,目前已有100多人,如果你感兴趣,可以阅读《欢迎来到中文博客圈》查看详细内容。同时,我也运营着一个 Telegram 频道,发布任何与博客相关的内容。
76朴素生活,高尚思考。(Plain living and High thinking)
77Self-Hosted Umami:网站统计工具 Bitwarden:密码管理工具 Hugo:目前使用的博客程序 联系我 Email:[email protected] Twitter:@huhexian Telegram:@huhexian 博客历史 2018å¹´3月17日 青山绿水 博客建立 2021å¹´10月12日 青山绿水 博客转让 2021å¹´10月22日 胡言胡语 博客建立,选择 Twenty Twelve 主题 2021å¹´12月16日 将 青山绿水 博客的文章迁移至 胡言胡语 博客 2021å¹´12月26日 主题更换为:Arke 2022å¹´2月9日 主题更换为:Twenty Twelve 2022å¹´4月8日 主题更换为:Sulli 2022å¹´6月1日 主题更换为:Paper 2022å¹´7月15日 主题更换为:Wing 2022å¹´10月12日 博客程序更换为:Hugo 2023å¹´1月6日 博客程序更换为:WordPress,采用 Twenty Twelve 主题 2023å¹´4月9日 博客运行于 CloudCone 2023å¹´5月5日 博客域名更换为:zuofei.net 2023å¹´5月5日 博客名称更换为:今是昨非 2023å¹´9月7日 博客域名更换为:yinji.org 2023å¹´9月7日 博客名称更换为:印记 2024å¹´8月25日 主题更换为:Dear 2025å¹´8月30日 主题更换为:Berry 2.0 2026å¹´8月4日 博客程序更换为:Hugo">
78
79
80
81
82	<meta itemprop="name" content="About">
83	<meta itemprop="description" content="2002年出生,江西人。青山,取自辛弃疾词“我见青山多妩媚,料青山见我应如是”,博客原名“青山绿水”,也来自其中。高中选择文科,一直都有写点东西的爱好,便从2018年开始写博客,期间多次更换域名及名字,最后定å
83ä¸ºâ€œå°è®°â€ï¼Œè®°å½•我的生活和思考。
84兴趣爱好不算多,屈指可数,是一个数码发烧友、摄影爱好者,2025年购买了相机,使用手机(iPhone 15 Pro Max)和相机(Nikon Z5)记录生活的碎片,喜欢阅读,但往往都是“买书如山倒,读书如抽丝”。虽然没学过计算机和编程,但喜欢关注互联网上的各种有趣内容,你正在访问的这个博客,便是我根据网上的教程搭建而成。
85网站使用开源程序 Hugo,运行在 Cloudflare Pages 上,我在 Now 页面记录我的现状,以及当前正在做的事情,在 Notion 维护一个剁手安利库,分享我买过/使用过且值得推荐的产品,在 Quail 写周报,不定期更新,如感兴趣,可以订阅。
86我想建设一个供中文博主交流的平台,便创建了中文博客圈微信群,目前已有100多人,如果你感兴趣,可以阅读《欢迎来到中文博客圈》查看详细内容。同时,我也运营着一个 Telegram 频道,发布任何与博客相关的内容。
87朴素生活,高尚思考。(Plain living and High thinking)
88Self-Hosted Umami:网站统计工具 Bitwarden:密码管理工具 Hugo:目前使用的博客程序 联系我 Email:[email protected] Twitter:@huhexian Telegram:@huhexian 博客历史 2018å¹´3月17日 青山绿水 博客建立 2021å¹´10月12日 青山绿水 博客转让 2021å¹´10月22日 胡言胡语 博客建立,选择 Twenty Twelve 主题 2021å¹´12月16日 将 青山绿水 博客的文章迁移至 胡言胡语 博客 2021å¹´12月26日 主题更换为:Arke 2022å¹´2月9日 主题更换为:Twenty Twelve 2022å¹´4月8日 主题更换为:Sulli 2022å¹´6月1日 主题更换为:Paper 2022å¹´7月15日 主题更换为:Wing 2022å¹´10月12日 博客程序更换为:Hugo 2023å¹´1月6日 博客程序更换为:WordPress,采用 Twenty Twelve 主题 2023å¹´4月9日 博客运行于 CloudCone 2023å¹´5月5日 博客域名更换为:zuofei.net 2023å¹´5月5日 博客名称更换为:今是昨非 2023å¹´9月7日 博客域名更换为:yinji.org 2023å¹´9月7日 博客名称更换为:印记 2024å¹´8月25日 主题更换为:Dear 2025å¹´8月30日 主题更换为:Berry 2.0 2026å¹´8月4日 博客程序更换为:Hugo">
89	<meta itemprop="wordCount" content="88">
90<meta name="referrer" content="no-referrer-when-downgrade" />
91
92  <style>
93     
94    :root {
95        --width-max: 720px;
96        --font-primary: "Verdana","PingFang SC", sans-serif;
97        --font-secondary: monospace;
98        --font-size-primary: 1em;
99        --font-size-secondary: 0.8em;
100        --bg-color-primary: #fdfdfd;
101        --bg-color-secondary: #f2f4f7;
102        --text-color-primary: #1a1a1a;
103        --text-color-secondary: #444;
104        --text-color-tertiary: #8c8c8c;
105        --link-color: #0066cc;
106        --link-visited-color: #551a8b;
107        --border-color: #d0d7de;
108        --upvoted-color: #fa8072;
109    }
110
111    @media (prefers-color-scheme: dark) {
112         
113        :root {
114            --bg-color-primary: #121212;
115            --bg-color-secondary: #1c1f24;
116            --text-color-primary: #e5e5e5;
117            --text-color-secondary: #b3b3b7;
118            --text-color-tertiary: #a0a0a0;
119            --link-color: #6da6ff;
120            --link-visited-color: #b388ff;
121            --border-color: #30363d;
122            --upvoted-color: #ff6b6b;
123        }
124    }
125
126    body {
127        font-family: var(--font-primary);
128        font-size: var(--font-size-primary);
129        margin: auto;
130        padding: 20px;
131        max-width: var(--width-max);
132        text-align: left;
133        background-color: var(--bg-color-primary);
134        word-wrap: break-word;
135        overflow-wrap: break-word;
136        line-height: 1.5;
137        color: var(--text-color-primary);
138    }
139
140    h1,
141    h2,
142    h3,
143    h4,
144    h5,
145    h6,
146    strong,
147    b {
148        color: var(--text-color-primary);
149    }
150
151    h1,
152    h2,
153    h3,
154    h4,
155    h5,
156    h6 {
157        margin: 16px 0;
158    }
159
160    a {
161        color: var(--link-color);
162        cursor: pointer;
163        text-decoration: none;
164    }
165
166    a:hover {
167        text-decoration: underline;
168    }
169
170    .title {
171        text-decoration: none;
172        border: 0;
173    }
174
175    .title:hover {
176        text-decoration: none;
177    }
178
179    .title span {
180        font-weight: 400;
181    }
182
183    nav a {
184        margin-right: 8px;
185    }
186
187    textarea {
188        width: 100%;
189        font-size: 16px;
190    }
191
192    input {
193        font-size: 14px;
194    }
195
196    content {
197        line-height: 1.6;
198    }
199
200    table {
201        width: 100%;
202        border-collapse: collapse;
203        border: 1px solid var(--border-color);
204        border-radius: 4px;
205    }
206
207    th,
208    td {
209        border: 1px solid var(--border-color);
210        padding: 4px;
211    }
212
213    th {
214        background-color: var(--bg-color-secondary);
215    }
216
217    hr {
218        border: 0;
219        border-top: 1px dashed;
220    }
221
222    img {
223        max-width: 100%;
224        display: block;
225        margin-left: auto;
226        margin-right: auto;
227        border: 1px solid var(--border-color);
228        border-radius: 4px;
229        content-visibility: auto;
230    }
231
232    img[src*="#minipic"] {
233        max-width: 50%;
234        margin-left: 0;
235        margin-right: auto;
236    }
237
238    .image-caption figcaption {
239        text-align: center;
240        font-style: italic;
241        font-size: 0.8em;
242        margin-top: 0.6em;
243        color: var(--text-color-secondary);
244    }
245
246    .image-caption {
247        margin: auto;
248    }
249
250    i {
251        font-style: normal;
252    }
253
254    time {
255        font-family: var(--font-secondary);
256        font-size: 15px;
257    }
258
259    code {
260        font-family: var(--font-secondary);
261        background-color: var(--bg-color-secondary);
262        padding: 2px;
263        border-radius: 4px;
264    }
265
266    pre code {
267        display: block;
268        padding: 16px;
269        white-space: pre-wrap;
270        overflow-x: auto;
271    }
272
273    div.highlight pre {
274        border-radius: 4px;
275    }
276
277    div.highlight code {
278        background-color: var(--bg-color-secondary);
279    }
280
281    blockquote {
282        border-left: 4px solid var(--border-color);
283        color: var(--text-color-secondary);
284        margin: 0;
285        padding-left: 8px;
286        font-style: normal;
287    }
288
289    blockquote p {
290        margin: 0;
291    }
292
293    footer {
294        padding: 25px 0;
295        text-align: center;
296        font-size: var(--font-size-secondary);
297    }
298
299    ul li:has(input) {
300        list-style-type: none;
301        margin-left: -25.5px;
302    }
303
304     
305    ul.blog-posts {
306        list-style-type: none;
307        padding: unset;
308    }
309
310    ul.blog-posts li {
311        display: flex;
312    }
313
314    ul.blog-posts li span {
315        flex: 0 0 130px;
316    }
317
318    ul.blog-posts li span.grouped {
319        flex: 0 0 80px;
320    }
321
322    ul.blog-posts li a:visited {
323        color: var(--link-visited-color);
324    }
325
326     
327    div.toc {
328        position: fixed;  
329        top: 50%;  
330        left: calc(
331            (100vw + var(--width-max)) / 2
332        );  
333        transform: translateY(-50%);  
334        width: calc((90vw - var(--width-max)) / 2);  
335        max-height: 80vh;  
336        overflow-y: auto;  
337        border: none;  
338        padding: 0;  
339        margin: 0;  
340        z-index: 99;  
341
342         
343        -ms-overflow-style: none;  
344        scrollbar-width: none;  
345    }
346
347    div.toc::-webkit-scrollbar {
348         
349        display: none;  
350    }
351
352    .toc-nav {
353         
354        padding: 1.5rem;  
355    }
356
357    .toc-nav ul {
358         
359        list-style: none;  
360        padding: 0;  
361        margin: 0;  
362    }
363
364    .toc-nav li {
365         
366        margin: 8px 0;  
367    }
368
369    .toc-nav a {
370         
371        display: block;  
372        text-decoration: none;  
373        color: transparent;  
374        padding: 0 12px;  
375        transition: all 0.2s ease;  
376        font-size: 0.9rem;  
377        line-height: 1.4;  
378        text-align: left;  
379        white-space: nowrap;  
380        overflow: hidden;  
381        text-overflow: ellipsis;  
382        max-width: 100%;  
383    }
384
385    .toc-nav:hover a {
386        color: var(--text-color-tertiary);  
387    }
388
389    .toc-nav a::before {
390         
391        content: "";  
392        display: inline-block;  
393        width: 16px;  
394        height: 4px;  
395        background-color: var(--text-color-tertiary);
396        border-radius: 16px;  
397        margin-right: 12px;  
398        vertical-align: middle;  
399    }
400
401    .toc-nav ul ul a::before {
402         
403        width: 12px;  
404        margin-right: 16px;  
405    }
406
407    .toc-nav ul ul ul a::before {
408         
409        width: 8px;  
410        margin-right: 20px;  
411    }
412
413    .toc-nav a.active,
414    .toc-nav a:hover {
415        text-decoration: none;
416        color: var(--text-color-primary);
417    }
418
419    .toc-nav a.active::before,
420    .toc-nav a:hover::before {
421        background-color: var(--text-color-primary);
422    }
423
424     
425    button.upvote-btn {
426        margin: 0;
427        padding: 0;
428        border: none;
429        background: none;
430        cursor: pointer;
431        display: flex;
432        flex-direction: column;
433        align-items: center;
434        color: var(--text-color-primary);
435    }
436
437    button.upvoted {
438        color: var(--upvoted-color);
439    }
440
441    span.upvote-count {
442        margin-top: -4px;
443        font-size: smaller;
444    }
445
446     
447    body:has(.image-zoom-toggle:checked) {
448        overflow: hidden;
449    }
450
451    .image-zoom-container {
452        position: relative;
453        display: block;
454    }
455
456    .image-zoom-toggle {
457        display: none;
458    }
459
460    .image-zoom-label {
461        cursor: zoom-in;
462        display: block;
463        position: relative;
464    }
465
466    .image-zoom-label:focus {
467        outline: 2px solid var(--link-color);
468        outline-offset: 2px;
469    }
470
471    .zoomable-image {
472        transition: transform 0.3s ease;
473    }
474
475     
476    .image-zoom-overlay {
477        display: none;
478        position: fixed;
479        top: 0;
480        left: 0;
481        right: 0;
482        bottom: 0;
483        background: rgba(0, 0, 0, 0.9);
484        z-index: 1000;
485        align-items: center;
486        justify-content: center;
487        padding: 20px;
488        margin: 0;
489    }
490
491    .image-zoom-toggle:checked ~ .image-zoom-overlay {
492        display: flex;
493        cursor: zoom-out;
494    }
495
496     
497    .image-zoom-toggle:checked ~ .image-zoom-label {
498        cursor: default;
499    }
500
501    .image-zoom-toggle:checked ~ .image-zoom-overlay .zoomable-image {
502        max-width: 90vw;
503        max-height: 90vh;
504        width: auto;
505        height: auto;
506        transform: scale(1);
507        border: none;
508        border-radius: 8px;
509        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
510        margin-left: auto !important;
511        margin-right: auto !important;
512    }
513
514    .image-zoom-toggle:checked ~ .image-zoom-overlay::before {
515        content: "";
516        position: absolute;
517        top: 20px;
518        right: 20px;
519        width: 32px;
520        height: 32px;
521        background: rgba(255, 255, 255, 0.9);
522        border-radius: 50%;
523        cursor: pointer;
524        z-index: 1001;
525    }
526
527    .image-zoom-toggle:checked ~ .image-zoom-overlay::after {
528        content: "✕";
529        position: absolute;
530        top: 20px;
531        right: 20px;
532        width: 32px;
533        height: 32px;
534        display: flex;
535        align-items: center;
536        justify-content: center;
537        font-size: 18px;
538        font-weight: bold;
539        color: #000;
540        cursor: pointer;
541        z-index: 1002;
542    }
543
544    .image-zoom-toggle:checked ~ .image-zoom-overlay figcaption {
545        position: fixed;
546        bottom: 20px;
547        left: 50%;
548        transform: translateX(-50%);
549        background: rgba(0, 0, 0, 0.8);
550        color: white;
551        padding: 8px 16px;
552        border-radius: 4px;
553        font-size: 14px;
554        z-index: 1001;
555        max-width: 80vw;
556        text-align: center;
557    }
558
559     
560    @media (max-width: 800px) {
561        img[src*="#minipic"] {
562            max-width: 100%;
563            margin-left: auto;
564            margin-right: auto;
565        }
566
567        div.toc {
568            display: none;
569        }
570
571        .image-zoom-label {
572            cursor: pointer;
573        }
574
575        .image-zoom-toggle:checked ~ .image-zoom-overlay {
576            padding: 10px;
577        }
578
579        .image-zoom-toggle:checked ~ .image-zoom-overlay::before,
580        .image-zoom-toggle:checked ~ .image-zoom-overlay::after {
581            top: 10px;
582            right: 10px;
583            width: 28px;
584            height: 28px;
585            font-size: 16px;
586        }
587
588        .image-zoom-toggle:checked ~ .image-zoom-overlay figcaption {
589            bottom: 10px;
590            font-size: 12px;
591            padding: 6px 12px;
592        }
593    }
594
595 
596
597.recent-posts {
598
599    list-style: none;
600
601    padding-left: 0;
602
603    margin-top: 2rem;
604
605}
606
607
608.recent-posts li {
609
610    display: grid;
611
612    grid-template-columns: 120px 1fr;
613
614    margin-bottom: 1.2rem;
615
616    line-height: 1.3;
617
618}
619
620
621.recent-posts time {
622
623    color: #999;
624
625    font-size: 0.95rem;
626
627}
628
629
630.recent-posts a {
631
632    text-decoration: none;
633
634}
635
636
637.recent-posts a:hover {
638
639    text-decoration: underline;
640
641}
642</style>
643<script defer
644  src="https://umami.yinji.org/script.js"
645  data-website-id="814c9be9-342c-48a1-a0e4-d2ff28f6c0a4">
646</script>
646</head>
647
648<body>
649  <header><a href="/" class="title">
650  <h1>印记</h1>
651</a>
652<nav><a href="/">Home</a>
653
654
655
656
657<a href="/about.html">About</a>
658
659
660
661
662<a href="/now.html">Now</a>
663
664
665
666
667<a href="/roll.html">Roll</a>
668
669
670
671<a href="/blog/">Blog</a>
672</nav>
673</header>
674  <main>
675 
676
677<content> <p>2002年出生,江西人。青山,取自辛弃疾词“<strong>我见青山多妩媚,料青山见我应如是</strong>”,博客原名“青山绿水”,也来自其中。高中选择文科,一直都有写点东西的爱好,便从2018年开始写博客,期间多次更换域名及名字,最后定名为“<strong>印记</strong>”,记录我的生活和思考。</p>
678<p>兴趣爱好不算多,屈指可数,是一个数码发烧友、摄影爱好者,2025年<a href="/nikon-z5.html">购买了相机</a>,使用手机(iPhone 15 Pro Max)和相机(Nikon Z5)记录生活的碎片,喜欢阅读,但往往都是“买书如山倒,读书如抽丝”。虽然没学过计算机和编程,但喜欢关注互联网上的各种有趣内容,你正在访问的这个博客,便是我根据网上的教程搭建而成。</p>
679<p>网站使用开源程序 Hugo,运行在 Cloudflare Pages 上,我在 <a href="/now.html">Now</a> 页面记录我的现状,以及当前正在做的事情,在 Notion 维护一个<a href="https://huhexian.notion.site/66a7d139a06b46ccac9236d1e58b9a2a" rel="noopener noreferrer">剁手安利库</a>,分享我买过/使用过且值得推荐的产品,在 <a href="https://letter.yinji.org/" rel="noopener noreferrer">Quail</a> 写周报,不定期更新,如感兴趣,可以订阅。</p>
680<p>我想建设一个供中文博主交流的平台,便创建了<strong>中文博客圈微信群</strong>,目前已有100多人,如果你感兴趣,可以阅读《<a href="/welcome-to-the-chinese-blogosphere.html">欢迎来到中文博客圈</a>》查看详细内容。同时,我也运营着一个 <a href="https://t.me/findblog" rel="noopener noreferrer">Telegram 频道</a>,发布任何与博客相关的内容。</p>
681<p><strong>朴素生活,高尚思考。(Plain living and High thinking)</strong></p>
682<h2 id="self-hosted">Self-Hosted</h2>
683<ul>
684<li><a href="https://github.com/umami-software/umami" rel="noopener noreferrer">Umami</a>:网站统计工具</li>
685<li><a href="https://github.com/bitwarden" rel="noopener noreferrer">Bitwarden</a>:密码管理工具</li>
686<li><a href="https://gohugo.io" rel="noopener noreferrer">Hugo</a>:目前使用的博客程序</li>
687</ul>
688<h2 id="联系我">联系我</h2>
689<ul>
690<li>Email:<a href="/cdn-cgi/l/email-protection#e58880a59c8c8b8f8ccb8a9782"><span class="__cf_email__" data-cfemail="8de0e8cdf4e4e3e7e4a3e2ffea">[email&#160;protected]</span></a></li>
691<li>Twitter:<a href="https://x.com/huhexian" rel="noopener noreferrer">@huhexian</a></li>
692<li>Telegram:<a href="https://t.me/huhexian" rel="noopener noreferrer">@huhexian</a></li>
693</ul>
694<h2 id="博客历史">博客历史</h2>
695<ul>
696<li>2018年3月17日 青山绿水 博客建立</li>
697<li>2021年10月12日 青山绿水 博客转让</li>
698<li>2021年10月22日 胡言胡语 博客建立,选择 Twenty Twelve 主题</li>
699<li>2021年12月16日 将 青山绿水 博客的文章迁移至 胡言胡语 博客</li>
700<li>2021年12月26日 主题更换为:Arke</li>
701<li>2022年2月9日 主题更换为:Twenty Twelve</li>
702<li>2022年4月8日 主题更换为:Sulli</li>
703<li>2022年6月1日 主题更换为:Paper</li>
704<li>2022年7月15日 主题更换为:Wing</li>
705<li>2022年10月12日 博客程序更换为:Hugo</li>
706<li>2023年1月6日 博客程序更换为:WordPress,采用 <a href="https://github.com/huhexian/2012-huhexian" rel="noopener noreferrer">Twenty Twelve</a> 主题</li>
707<li>2023年4月9日 博客运行于 <a href="/cloudcone.html">CloudCone</a></li>
708<li>2023年5月5日 博客域名更换为:zuofei.net</li>
709<li>2023年5月5日 博客名称更换为:今是昨非</li>
710<li>2023年9月7日 博客域名更换为:yinji.org</li>
711<li>2023年9月7日 博客名称更换为:印记</li>
712<li>2024年8月25日 主题更换为:<a href="https://yayu.net/projects/wordpress-dear" rel="noopener noreferrer" title="Dear">Dear</a></li>
713<li>2025年8月30日 主题更换为:<a href="https://fatesinger.com/105431" rel="noopener noreferrer" title="Berry 2.0">Berry 2.0</a></li>
714<li>2026年8月4日 博客程序更换为:Hugo</li>
715</ul>
716 </content>
717
718<p>
719  
720</p>
721
722
723
724
725<div class="upvote-container">
726<small class="upvote">
727  <button class="upvote-btn" id="upvote-btn" aria-label="Upvote this post" aria-pressed="false">
728    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1">
729    <polyline points="17 11 12 6 7 11"></polyline>
730    <polyline points="17 18 12 13 7 18"></polyline>
731    </svg>
732    <span class="upvote-count" id="upvote-count">0</span>
733  </button>
734</small>
735</div>
vendor: 110 bytes, lines 735-737
735
736
737<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
737<script>
738  let hasUpvoted = false;
739  let upvoteBtn;
740  let upvoteCount;
741  
742  
743  const entity = "about.html";
744  const upvoteBaseUrl = "https://kudos.yinji.org".replace(/\/+$/, '');
745
746  function upvoteUrl(action = '') {
747    return `${upvoteBaseUrl}/${encodeURIComponent(entity)}${action}`;
748  }
749
750  async function requestKudos(url, options) {
751    const response = await fetch(url, options);
752    let data;
753    try {
754      data = await response.json();
755    } catch {
756      throw new Error(`Kudos request failed (${response.status})`);
757    }
758    if (!response.ok) {
759      throw new Error(data.error ?? `Kudos request failed (${response.status})`);
760    }
761    return data;
762  }
763
764  function renderUpvote({ count, hasKudos }) {
765    upvoteCount.innerText = count;
766    hasUpvoted = hasKudos;
767    upvoteBtn.classList.toggle('upvoted', hasUpvoted);
768    upvoteBtn.setAttribute('aria-pressed', String(hasUpvoted));
769    upvoteBtn.setAttribute('aria-label', hasUpvoted ? 'Remove your upvote' : 'Upvote this post');
770  }
771
772  
773  
774  document.addEventListener('DOMContentLoaded', function() {
775    upvoteBtn = document.getElementById('upvote-btn');
776    upvoteCount = document.getElementById('upvote-count');
777    loadUpvote();
778
779    upvoteBtn.addEventListener('click', toggleUpvote);
780  });
781
782  async function loadUpvote() {
783    try {
784      const [count, status] = await Promise.all([
785        requestKudos(upvoteUrl()),
786        requestKudos(upvoteUrl('/kudos')),
787      ]);
788      renderUpvote({ count: count.count, hasKudos: status.hasKudos });
789    } catch (error) {
790      console.error('Failed to load upvote:', error);
791    }
792  }
793
794  async function toggleUpvote() {
795    upvoteBtn.disabled = true;
796
797    try {
798      const state = await requestKudos(upvoteUrl('/kudos'), {
799        method: hasUpvoted ? 'DELETE' : 'POST',
800      });
801      renderUpvote(state);
802    } catch (error) {
803      console.error('Failed to update upvote:', error);
804    } finally {
805      upvoteBtn.disabled = false;
806    }
807  }
808</script>
808
809
810
811
812
813 
814<div class="toc">
815
816
817<aside class="toc-nav" role="navigation" aria-label="目录">
818  <nav id="TableOfContents">
819  <ul>
820    <li><a href="#self-hosted">Self-Hosted</a></li>
821    <li><a href="#联系我">联系我</a></li>
822    <li><a href="#博客历史">博客历史</a></li>
823  </ul>
824</nav>
825</aside>
826
827<script>
828document.addEventListener('DOMContentLoaded', function () {
829    const tocNav = document.querySelector('.toc-nav');
830    if (!tocNav) return;
831
832    const tocLinks = Array.from(tocNav.querySelectorAll('a'));
833    if (!tocLinks.length) return;
834
835    
836    const idToLink = new Map();
837    const headings = [];
838    const seen = new Set();
839
840    for (const link of tocLinks) {
841        const hash = link.hash || link.getAttribute('href');
842        if (!hash || hash.charAt(0) !== '#') continue;
843        const id = decodeURIComponent(hash.slice(1));
844        idToLink.set(id, link);
845
846        if (!seen.has(id)) {
847            const h = document.getElementById(id);
848            if (h) {
849                headings.push(h);
850                seen.add(id);
851            }
852        }
853    }
854
855    if (!headings.length) return;
856
857    const OFFSET = 100; 
858
859    
860    let currentActive = null;
861    let currentChain = [];
862
863    function buildChainFromLink(link) {
864        const chain = [];
865        if (!link) return chain;
866        chain.push(link);
867        let li = link.closest('li');
868        while (li) {
869            const parentLi = li.parentElement ? li.parentElement.closest('li') : null;
870            if (parentLi) {
871                const parentLink = parentLi.querySelector('a');
872                if (parentLink) chain.push(parentLink);
873            }
874            li = parentLi;
875        }
876        return chain;
877    }
878
879    function applyActiveChain(newLink) {
880        if (newLink === currentActive) return;
881        const newChain = buildChainFromLink(newLink);
882
883        
884        for (const el of currentChain) {
885            if (!newChain.includes(el)) el.classList.remove('active');
886        }
887        
888        for (const el of newChain) {
889            if (!el.classList.contains('active')) el.classList.add('active');
890        }
891
892        currentActive = newLink || null;
893        currentChain = newChain;
894    }
895
896    
897    tocNav.addEventListener('click', function (e) {
898        const link = e.target.closest('a');
899        if (!link || !tocNav.contains(link)) return;
900
901        const hash = link.hash || link.getAttribute('href');
902        if (!hash || hash.charAt(0) !== '#') return;
903
904        const id = decodeURIComponent(hash.slice(1));
905        const target = document.getElementById(id);
906        if (!target) return;
907
908        e.preventDefault();
909
910        const reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
911        target.scrollIntoView({
912            behavior: reduceMotion ? 'auto' : 'smooth',
913            block: 'start'
914        });
915
916        
917        applyActiveChain(link);
918    });
919
920    
921    function updateActiveLink() {
922        let linkToActivate = null;
923        for (let i = headings.length - 1; i >= 0; i--) {
924            const top = headings[i].getBoundingClientRect().top;
925            if (top <= OFFSET) {
926                linkToActivate = idToLink.get(headings[i].id) || null;
927                break;
928            }
929        }
930        applyActiveChain(linkToActivate);
931    }
932
933    
934    let ticking = false;
935    function onScrollOrResize() {
936        if (!ticking) {
937            requestAnimationFrame(function () {
938                updateActiveLink();
939                ticking = false;
940            });
941            ticking = true;
942        }
943    }
944
945    window.addEventListener('scroll', onScrollOrResize, { passive: true });
946    window.addEventListener('resize', onScrollOrResize, { passive: true });
947
948    
949    updateActiveLink();
950});
951</script>
951
952
953
954</div>
955
956
957
958
959
960
961  </main>
962  <footer>
963
964
965Subscribe via <a href="/feed.xml">RSS</a> or just <a href="/cdn-cgi/l/email-protection#3c51597c455552565512534e5b">say hello</a>.
966<br />
967
968
969
970
971
972
973
974
975Made with
976<a href="https://github.com/rokcso/hugo-bearneo/">Hugo Bear Neo</a>.
977<br />
978
979
980
981
982Copyright © 2018-2026, huhexian.
983
984
985<br>🗺️ <a href="/sitemap.xml">Sitemap</a>.
986<br />
987
988</footer>
vendor: 117 bytes, lines 988-993
988
989
990    
991
992
993<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
993<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"9b67f7b738b648f3825234b327313b83","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 993
993
994<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a44e494a5d546182',t:'MTc5MTA1NTAzOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
994</body>
995
996</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.