diff --git a/content/blog/ai-tools-2026.md b/content/blog/ai-tools-2026.md index def4c2c..17bea19 100644 --- a/content/blog/ai-tools-2026.md +++ b/content/blog/ai-tools-2026.md @@ -5,7 +5,7 @@ draft: false poet: | The mind is its own place, and in itself Can make a Heaven of Hell, a Hell of Heaven. - ——John Milton,英国,1608–1674 + — John Milton, UK, 1608–1674 description: "2026 年 AI 工具进入务实阶段。实测 DeepSeek V4 Flash 和 Pro 模型的不同场景表现,Agent 智能体的四个落地方向,以及怎么用更少 token 做更多事。" tags: - AI diff --git a/content/blog/go-concurrency.md b/content/blog/go-concurrency.md index df150ff..05efe52 100644 --- a/content/blog/go-concurrency.md +++ b/content/blog/go-concurrency.md @@ -5,7 +5,7 @@ draft: false poet: | To see a World in a Grain of Sand And a Heaven in a Wild Flower - ——William Blake,英国,1757–1827 + — William Blake, UK, 1757–1827 description: "Go concurrency beyond the basics. Worker pools for bounded parallelism, context propagation for cancellation, select loops for channel coordination — three patterns that hold up in production." tags: - Go diff --git a/content/blog/linux-customization.md b/content/blog/linux-customization.md index a8ab57e..ab2068b 100644 --- a/content/blog/linux-customization.md +++ b/content/blog/linux-customization.md @@ -5,7 +5,7 @@ draft: false poet: | My house, my house, though you are small, You are a mansion to me after all. - ——Robert Herrick,英国,1591–1674 + — Robert Herrick, UK, 1591–1674 description: "从默认 Gnome 到一套顺手的桌面环境。GTK 主题、图标包、终端配色、窗口管理器的选择与配置思路。不追求花哨,追求每天盯着看不累。" tags: - Linux diff --git a/content/blog/python-async-guide.md b/content/blog/python-async-guide.md index c4e143f..4a1170a 100644 --- a/content/blog/python-async-guide.md +++ b/content/blog/python-async-guide.md @@ -4,7 +4,7 @@ date: 2026-05-12T11:00:00+08:00 draft: false poet: | They also serve who only stand and wait. - ——John Milton,英国,1608–1674 + — John Milton, UK, 1608–1674 description: "Understanding the event loop, writing proper async context managers, and avoiding the most common pitfalls with asyncio.gather and cancel scopes." tags: - Python diff --git a/content/blog/rest-api-design.md b/content/blog/rest-api-design.md index ce5dcbf..2e35553 100644 --- a/content/blog/rest-api-design.md +++ b/content/blog/rest-api-design.md @@ -4,7 +4,7 @@ date: 2026-05-13T09:00:00+08:00 draft: false poet: | Form follows function. - ——Louis Sullivan,美国,1856–1924 + — Louis Sullivan, US, 1856–1924 description: "Lessons from real-world API design. Why version early, paginate everything, standardize error responses, and add idempotency keys. Plus a practical deprecation strategy with Sunset headers." tags: - API diff --git a/content/blog/rust-error-handling.md b/content/blog/rust-error-handling.md index 4a12d85..9e5d63b 100644 --- a/content/blog/rust-error-handling.md +++ b/content/blog/rust-error-handling.md @@ -5,7 +5,7 @@ draft: false poet: | If you can meet with Triumph and Disaster And treat those two impostors just the same; - ——Rudyard Kipling,英国,1865–1936 + — Rudyard Kipling, UK, 1865–1936 description: "The journey from panic-driven development to proper error types. When to use thiserror for library crates and anyhow for applications." tags: - Rust diff --git a/content/blog/svelte-first-look.md b/content/blog/svelte-first-look.md index bcccc3f..10aecac 100644 --- a/content/blog/svelte-first-look.md +++ b/content/blog/svelte-first-look.md @@ -5,7 +5,7 @@ draft: false poet: | Do not go gentle into that good night. Rage, rage against the dying of the light. - ——Dylan Thomas,英国,1914–1953 + — Dylan Thomas, UK, 1914–1953 description: "试用了 Svelte 5 的 runes 语法和 SvelteKit 框架。没有虚拟 DOM,编译时直接把组件转成 DOM 操作代码,打包体积小得惊人。" tags: - Svelte diff --git a/content/blog/terraform-aws-ecs.md b/content/blog/terraform-aws-ecs.md index d6cff0a..6493dc0 100644 --- a/content/blog/terraform-aws-ecs.md +++ b/content/blog/terraform-aws-ecs.md @@ -7,7 +7,7 @@ poet: | your work need not be lost; that is where they should be. Now put the foundations under them. - ——Henry David Thoreau,美国,1817–1862 + — Henry David Thoreau, US, 1817–1862 description: "Infrastructure as code from scratch: VPC, subnets, security groups, ECR repository, ECS service with Fargate, and an ALB in front. Every resource explained." tags: - AWS diff --git a/content/blog/vim-motions.md b/content/blog/vim-motions.md index 07bba1e..41bc1fa 100644 --- a/content/blog/vim-motions.md +++ b/content/blog/vim-motions.md @@ -5,7 +5,7 @@ draft: false poet: | Practice does not make perfect. Only perfect practice makes perfect. - ——Vince Lombardi,美国,1913–1970 + — Vince Lombardi, US, 1913–1970 description: "Which Vim motions are worth the muscle memory investment? A practical three-tier ranking from non-negotiable (ci, %, dot) to nice-to-have (macros, jump list), based on three years of daily use." tags: - Vim diff --git a/layouts/blog/single.html b/layouts/blog/single.html index 47dde23..3314061 100644 --- a/layouts/blog/single.html +++ b/layouts/blog/single.html @@ -1,82 +1,154 @@ {{ define "main" }} -
- {{ partial "sidebar.html" (dict "context" . "disableSidebar" true "displayPlaceholder" true) }} - {{ partial "toc.html" . }} -
-
- {{ partial "breadcrumb.html" (dict "page" . "enable" true) }} - {{ if .Title }} -
-

{{ .Title }}

- {{ partial "components/page-context-menu" . }} -
- {{ end }} -
- {{- with $date := .Date }}{{ partial "utils/format-date" $date }}{{ end -}} - {{- $lazyLoading := site.Params.enableImageLazyLoading | default true -}} - {{ if and .Date .Params.authors }}·{{ end -}} - {{- with $.Params.authors -}} - {{- range $i, $author := . -}} - {{- if reflect.IsMap $author -}} - {{- if and $i (not $author.image) }},{{ end -}} - + {{ partial "sidebar.html" (dict "context" . "disableSidebar" true + "displayPlaceholder" true) }} {{ partial "toc.html" . }} +
+
+ {{ partial "breadcrumb.html" (dict "page" . "enable" true) }} {{ if + .Title }} +
+

- {{- with $image := $author.image }} - {{- $isLocal := not (urls.Parse $image).Scheme -}} - {{- $startsWithSlash := hasPrefix $image "/" -}} - {{- if and $isLocal $startsWithSlash }} - {{- $image = (relURL (strings.TrimPrefix "/" $image)) -}} + {{ .Title }} +

+ {{ partial "components/page-context-menu" . }} +
+ {{ end }} +
-
- {{ .Content }} + {{- else -}} {{- if $i }},{{ end + -}}{{ $author }} + {{- end -}} {{- end -}} {{- end -}} +
+
+ {{ .Content }} {{- with .Params.poet }} +
+

+
+ - {{- with .Params.poet }} -
-

-
- + {{- end }} +
- {{- end }} -
- - {{- partial "components/last-updated.html" . -}} - {{- if (site.Params.blog.article.displayPagination | default true) -}} - {{- .Store.Set "reversePagination" (.Params.reversePagination | default true) -}} - {{- partial "components/pager.html" . -}} - {{ end }} - {{- partial "components/comments.html" . -}} -
+ {{- partial "components/last-updated.html" . -}} {{- if + (site.Params.blog.article.displayPagination | default true) -}} {{- + .Store.Set "reversePagination" (.Params.reversePagination | default + true) -}} {{- partial "components/pager.html" . -}} {{ end }} {{- + partial "components/comments.html" . -}} +
-
+ {{ end }}