<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"><channel><title>Swayopus</title><description>A personal blog about technology, engineering, and creative pursuits.</description><link>https://swayopus.space</link><language>zh-Hans</language><lastBuildDate>Thu, 25 Jun 2026 00:00:00 GMT</lastBuildDate><atom:link href="https://swayopus.space/rss.xml" rel="self" type="application/rss+xml"/><item><title>Obsidian Callout 全功能展示</title><link>https://swayopus.space/posts/callout-showcase.md</link><guid isPermaLink="true">https://swayopus.space/posts/callout-showcase.md</guid><description>测试 remark-obsidian-callout 插件的所有类型：基础、自定义标题、空标题、折叠、嵌套。</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 基础类型

&gt; [!note] Note
&gt; 这是一个 note callout，蓝色竖线。

&gt; [!tip] Tip
&gt; 这是一个 tip callout，绿色竖线。

&gt; [!info] Info
&gt; Info 和 note 共用蓝色系。

&gt; [!warning] Warning
&gt; 这是一个 warning callout，橙色竖线。

&gt; [!danger] Danger
&gt; 这是一个 danger callout，红色竖线。

&gt; [!success] Success
&gt; 这是一个 success callout，绿色竖线。

&gt; [!question] Question
&gt; 这是一个 question callout，橙色竖线。

&gt; [!example] Example
&gt; 这是一个 example callout，紫色竖线。

&gt; [!quote] Quote
&gt; 这是一个 quote callout，灰色竖线。

&gt; [!bug] Bug
&gt; 这是一个 bug callout，红色竖线。

&gt; [!todo] Todo
&gt; 这是一个 todo callout，蓝色竖线。

&gt; [!abstract] Abstract
&gt; 这是一个 abstract callout，青色竖线。

&gt; [!failure] Failure
&gt; 这是一个 failure callout，红色竖线。

## 自定义标题

&gt; [!note] 这是我自定义的笔记标题
&gt; 蓝色竖线，标题文字可以随便写。

&gt; [!tip] 小技巧：使用 Ctrl+K 打开搜索
&gt; 绿色竖线，自定义标题用来描述具体用途。

&gt; [!warning] 注意：此操作不可逆
&gt; 橙色竖线，自定义标题让 warning 更有指向性。

## 空标题（只有图标，没有文字）

&gt; [!note]
&gt; 没有标题，只有图标和内容。

&gt; [!tip]
&gt; 这也是空标题，图标 + 内容。

&gt; [!warning]
&gt; 空标题的 warning。

## 可折叠 Callout

&gt; [!faq]- 点击展开查看答案
&gt; 这是默认收起的 FAQ。`-` 表示默认收起。

&gt; [!example]+ 默认展开的示例
&gt; 这是默认展开的 example。`+` 表示默认展开。点击标题可以收起。

&gt; [!note]- 折叠的笔记
&gt; 这个笔记默认是折叠的。
&gt; 可以包含多行内容。
&gt; 点击标题展开查看。

&gt; [!info]+ 展开的 Info
&gt; 这个 info 默认展开，点击标题可以折叠。

## 嵌套 Callout

&gt; [!question] 第一层：Question
&gt; 外层是一个 question callout。
&gt;
&gt; &gt; [!todo] 第二层：Todo
&gt; &gt; 这是嵌套在 question 里面的 todo callout。
&gt; &gt;
&gt; &gt; &gt; [!example] 第三层：Example
&gt; &gt; &gt; 这是第三层嵌套，example callout。

&gt; [!note] 外层 Note
&gt; 外层 note callout。
&gt;
&gt; &gt; [!tip] 内层 Tip
&gt; &gt; 嵌套的 tip，绿色竖线在蓝色竖线里面。
&gt; &gt; 两个 callout 的竖线颜色各自独立。
&gt; &gt;
&gt; &gt; &gt; [!warning] 最内层 Warning
&gt; &gt; &gt; 三层嵌套，蓝绿橙竖线都有。

## 混合：折叠 + 嵌套

&gt; [!question]- 折叠的问题（点击展开）
&gt; 这个 callout 既是折叠的，又包含嵌套内容。
&gt;
&gt; &gt; [!note] 嵌套的笔记
&gt; &gt; 折叠的外层 + 嵌套的内层。
&gt; &gt; 展开外层的 question 之后可以看到嵌套的 note。

## 普通引用对比

下面是一条普通 Markdown 引用（`&gt;` 语法），用于和 callout 对比竖线宽度：

&gt; 这是普通引用。左侧蓝色竖线，斜体，有淡灰背景。
&gt; 和 callout 的区别：callout 有图标 + 标题，引用没有。

## 复杂折叠测试

### 外层可折叠 + 内层可折叠

&gt; [!question]- 外层折叠（点击展开）
&gt; 外层是折叠的 question。
&gt;
&gt; &gt; [!faq]- 内层也折叠（点击展开）
&gt; &gt; 内层是折叠的 FAQ，在外层里面。
&gt; &gt; 两个都要能独立折叠/展开。
&gt; &gt;
&gt; &gt; &gt; [!example] 最内层不可折叠
&gt; &gt; &gt; 这是一个普通 example，不可以折叠。

### 外层不可折叠 + 内层可折叠

&gt; [!note] 外层不可折叠
&gt; 外层是普通的 note，不可以折叠。
&gt;
&gt; &gt; [!warning]- 内层可折叠（点击展开）
&gt; &gt; 内层是折叠的 warning，在外层里面。
&gt; &gt; 点击内层标题可以展开。
&gt; &gt; 外层的图标不应该受内层折叠影响。

### 三层嵌套 + 各层独立折叠

&gt; [!question]- 第一层（折叠）
&gt; 第一层是折叠的 question。
&gt;
&gt; &gt; [!note] 第二层（不折叠）
&gt; &gt; 第二层是普通的 note。
&gt; &gt;
&gt; &gt; &gt; [!tip]- 第三层（折叠）
&gt; &gt; &gt; 第三层是折叠的 tip。
&gt; &gt; &gt; 各层图标应该独立旋转，互不影响。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-25T00:00:00.000Z</dc:date><category>工具</category><category>test</category><category>callout</category><category>markdown</category><author>Swayopus</author><comments>https://swayopus.space/posts/callout-showcase.md/#comments</comments></item><item><title>街头摄影入门笔记</title><link>https://swayopus.space/posts/photography-notes.md</link><guid isPermaLink="true">https://swayopus.space/posts/photography-notes.md</guid><description>分享最近学习街头摄影的一些心得，从相机选择到构图技巧。</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 为什么开始拍照

最近买了一台二手富士 X-T3，开始认真学拍照。街头摄影最吸引我的地方在于它的不确定性——你永远不知道下一秒会遇到什么画面。

## 器材选择

新手不用纠结器材。手机也好、卡片机也好、单反也好，重要的是走出去拍。我用 X-T3 配一个 35mm f/2 定焦头，轻便够用。

## 构图心得

- **三分法**：把画面横竖各分三等份，主体放在交叉点上
- **引导线**：利用道路、栏杆、光影引导视线
- **等待时机**：找到好背景后，等人走进画面
- **打破规则**：拍多了自然知道什么时候该打破规则

## 后期处理

Lightroom 调色就够了。富士直出颜色已经很舒服，微调曝光和对比度即可。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-25T00:00:00.000Z</dc:date><category>摄影</category><category>摄影</category><category>入门</category><category>生活</category><author>Swayopus</author><comments>https://swayopus.space/posts/photography-notes.md/#comments</comments></item><item><title>2026 上半年阅读清单</title><link>https://swayopus.space/posts/reading-list-2026.md</link><guid isPermaLink="true">https://swayopus.space/posts/reading-list-2026.md</guid><description>记录今年上半年读过的书，附简短书评和推荐指数。</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 技术类

- **《Designing Data-Intensive Applications》** ★★★★★ — 分布式系统必读，每章都值得反复看
- **《A Philosophy of Software Design》** ★★★★☆ — 薄薄一本，关于复杂性的讨论很透彻
- **《Crafting Interpreters》** ★★★★★ — 手把手教你写解释器，代码清晰，讲解生动

## 文学类

- **《夜晚的潜水艇》** ★★★★★ — 陈春成的短篇集，想象力惊人，文字干净
- **《克拉拉与太阳》** ★★★★☆ — 石黑一雄的 AI 视角小说，温柔又残酷
- **《失明症漫记》** ★★★★★ — 萨拉马戈对人性的刻画让人不寒而栗

## 在读

- 《深入理解 Linux 网络》—— 还在啃，笔记待补
- 《重读 20 世纪中国小说》—— 只看了开头几章，今年要读完</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-25T00:00:00.000Z</dc:date><category>阅读</category><category>阅读</category><category>书单</category><category>生活</category><author>Swayopus</author><comments>https://swayopus.space/posts/reading-list-2026.md/#comments</comments></item><item><title>LaTeX 数学公式测试 — KaTeX 渲染示例</title><link>https://swayopus.space/posts/math-examples.md</link><guid isPermaLink="true">https://swayopus.space/posts/math-examples.md</guid><description>测试 Astro + KaTeX 的数学公式渲染支持，包括行内公式、块级公式和复杂表达式。</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 行内公式

质能方程 $E = mc^2$ 可能是物理学最著名的公式。欧拉恒等式 $e^{i\pi} + 1 = 0$ 被称为&quot;最美数学公式&quot;。

勾股定理 $a^2 + b^2 = c^2$ 和求和公式 $\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n$ 也是常见示例。

## 块级公式

### 麦克斯韦方程组

$$
\begin{aligned}
\nabla \cdot \mathbf{E} &amp;= \frac{\rho}{\varepsilon_0} \\
\nabla \cdot \mathbf{B} &amp;= 0 \\
\nabla \times \mathbf{E} &amp;= -\frac{\partial \mathbf{B}}{\partial t} \\
\nabla \times \mathbf{B} &amp;= \mu_0\mathbf{J} + \mu_0\varepsilon_0\frac{\partial \mathbf{E}}{\partial t}
\end{aligned}
$$

### 傅里叶变换

$$
\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\, e^{-2\pi i x \xi} \,dx
$$

### 贝叶斯定理

$$
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
$$

## 矩阵

$$
\begin{pmatrix}
a_{11} &amp; a_{12} &amp; \cdots &amp; a_{1n} \\
a_{21} &amp; a_{22} &amp; \cdots &amp; a_{2n} \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
a_{m1} &amp; a_{m2} &amp; \cdots &amp; a_{mn}
\end{pmatrix}
$$

## 常见公式

**二次方程求根：**

$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$

**柯西-施瓦茨不等式：**

$$
\left|\sum_{i=1}^{n} x_i y_i\right| \leq \sqrt{\sum_{i=1}^{n} x_i^2} \cdot \sqrt{\sum_{i=1}^{n} y_i^2}
$$

**泰勒展开：**

$$
f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n
$$

## 化学方程式

$$
\ce{2H2 + O2 -&gt; 2H2O}
$$

$$
\ce{CO2 + C -&gt; 2CO}
$$

## 中文混合

对于任意实数 $x$，有不等式 $\frac{x^2 + 1}{2} \geq |x|$，当且仅当 $x = \pm 1$ 时取等号。

---

以上是所有常用数学公式类型的测试。KaTeX 渲染的公式在亮色和暗色模式下都能正确显示。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-22T00:00:00.000Z</dc:date><dcterms:modified>2026-06-24T00:00:00.000Z</dcterms:modified><category>工具</category><category>math</category><category>latex</category><category>katex</category><category>demo</category><author>Swayopus</author><comments>https://swayopus.space/posts/math-examples.md/#comments</comments></item><item><title>Hello, World — Welcome to Crepusopia</title><link>https://swayopus.space/posts/hello-world.md</link><guid isPermaLink="true">https://swayopus.space/posts/hello-world.md</guid><description>第一篇博客文章，记录搭建这个博客的初衷与想法。</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 为什么写博客

在 2026 年的今天，互联网上的内容比以往任何时候都要丰富，但真正属于自己的空间却越来越少。社交媒体、短视频、即时通讯——信息流从我们身边呼啸而过，却没有留下什么。

写博客是一种对抗。对抗碎片化，对抗速朽，对抗&quot;看过就忘&quot;。

## 技术选型

这个博客基于 **Astro** 构建，使用了以下技术栈：

- **Astro 5** — 静态站点生成器，极致性能
- **Tailwind CSS v4** — 原子化 CSS，灵活高效
- **STIX + Snell 字体** — 精致的排版体验
- **oklch 色彩空间** — 流畅的亮暗模式切换

### 代码示例

```typescript
// 一个简单的 TypeScript 示例
interface Post {
  title: string;
  published: Date;
  tags: string[];
}

const posts: Post[] = await getCollection(&quot;posts&quot;);
const sortedPosts = posts.sort((a, b) =&gt; b.data.published.getTime() - a.data.published.getTime());
```

## 接下来

这个博客会记录我在技术、工程和创作上的思考。内容可能涵盖：

1. 前端开发与工程化实践
2. 工具链与效率方法论
3. 读书笔记与生活随想

&gt; &quot;Writing is thinking. To write well is to think clearly. That&apos;s why it&apos;s so hard.&quot;
&gt; — David McCullough

期待在这里与你相遇。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-20T00:00:00.000Z</dc:date><dcterms:modified>2026-06-25T00:00:00.000Z</dcterms:modified><category>随想</category><category>blog</category><category>astro</category><category>intro</category><author>Swayopus</author><comments>https://swayopus.space/posts/hello-world.md/#comments</comments></item><item><title>不如来说说我的第一篇博客吧</title><link>https://swayopus.space/posts/my-first-blog.md</link><guid isPermaLink="true">https://swayopus.space/posts/my-first-blog.md</guid><description>在 Crepusopia 的第一篇文章，聊聊我是谁、为什么写博客。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 不如来说说我的第一篇博客吧

你好，欢迎来到 Crepusopia。

我是 Merrick Jun Ouyang，你也可以叫我 欧阳钧泓。这是我的个人博客，也是我第一次认真搭建一个属于自己的「线上自留地」。

说实话，我写过不少代码，但写一篇「关于自己的文章」反而比写技术文档难得多。既怕写得太正经，又怕写得太随意。犹豫了半天，我决定——不如就像跟朋友聊天一样，说说为什么要做这件事。

## 为什么会有这个博客？

我写博客的念头其实很早就有了，但一直没动手。理由无非是那些老生常谈的借口：没时间、怕写不好、不知道写什么。
后来我想通了一件事：一个博客真正的价值，不是它有多完美，而是它开始了。
所以这个博客的存在本身，就是最重要的意义。
它是我用来记录思考、沉淀经验、练习表达的地方。无论是技术上的摸索，还是生活里的感悟，我都想写下来。不是为了取悦谁，而是为了让未来的自己，能回头看看今天在想什么。

## 这里会写些什么？

我给自己划了三个方向：

- 📝 技术记录
  - 前端、Astro、Tailwind CSS、性能优化——这些东西我会写。但我不追求「教程感」，更像是把自己的踩坑过程和学习笔记分享出来。
- 📖 个人感悟
  - 有些想法在脑子里转了很久，想写下来理一理。可能是关于阅读的、关于成长的、关于折腾的，什么都可能。
- 📆 事件记录
  - 一些值得记住的瞬间，一些有意思的事情。写下来，就不怕忘记了。

## 关于「Swayopus」

这个域名是我起的，没有什么深奥的含义。Sway 是「摇摆、流动」，Opus 是「作品」——合在一起，大概就是「在不断变化中，留下一些作品」的意思吧。听起来有点像给自己的「人生说明书」。
你也可以把它当成一个安静的角落。来读文章也好，点个赞也好，默默路过也好，都欢迎。
那就先这样
第一篇博客，话不多说。接下来我会慢慢写，欢迎你常来看看。
你可以在评论区说点什么，也可以直接给我写邮件——邮箱在页面底部，或者 About 页面里也有。

那么，下次见。

—— Merrick，于 2026 年夏</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-18T00:00:00.000Z</dc:date><dcterms:modified>2026-06-21T00:00:00.000Z</dcterms:modified><category>随想</category><category>随想</category><category>博客</category><category>个人</category><author>Swayopus</author><comments>https://swayopus.space/posts/my-first-blog.md/#comments</comments></item><item><title>Tailwind CSS v4 迁移指南：从 v3 到 v4 的变化</title><link>https://swayopus.space/posts/tailwind-v4-migration.md</link><guid isPermaLink="true">https://swayopus.space/posts/tailwind-v4-migration.md</guid><description>Tailwind CSS v4 带来了全新的 CSS-first 配置方式，本文详细介绍从 v3 迁移的关键步骤和注意事项。</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 最大的变化：CSS-first 配置

Tailwind CSS v4 最根本的变化是**不再需要 `tailwind.config.js`**。所有配置直接写在 CSS 文件中。

### v3 写法 (旧)

```javascript
// tailwind.config.js
export default {
  content: [&quot;./src/**/*.{astro,html,js}&quot;],
  theme: {
    extend: {
      colors: {
        primary: &quot;#3b82f6&quot;,
      },
    },
  },
  plugins: [require(&quot;@tailwindcss/typography&quot;)],
};
```

### v4 写法 (新)

```css
/* app.css */
@import &quot;tailwindcss&quot;;

@theme {
  --color-primary: #3b82f6;
}
```

## 使用 Vite 插件

在 Astro 项目中，v4 通过 Vite 插件集成：

```javascript
// astro.config.mjs
import tailwindcss from &quot;@tailwindcss/vite&quot;;

export default defineConfig({
  vite: {
    plugins: [tailwindcss()],
  },
});
```

## 暗色模式

v4 的暗色模式更加直观：

```css
:root {
  --color-bg: oklch(0.985 0.002 106.43);
  --color-text: oklch(0.25 0.01 106.43);
}

.dark {
  --color-bg: oklch(0.18 0.008 260);
  --color-text: oklch(0.9 0.008 260);
}
```

## 总结

v4 的迁移总体上比想象中顺利。关键点：

1. 移除 `tailwind.config.js`，改用 CSS `@theme`
2. 使用 `@tailwindcss/vite` 代替 PostCSS 插件
3. CSS 变量天然支持亮暗模式
4. 构建速度明显提升（得益于 Oxide 引擎）</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-18T00:00:00.000Z</dc:date><dcterms:modified>2026-06-22T00:00:00.000Z</dcterms:modified><category>前端</category><category>css</category><category>tailwind</category><category>frontend</category><category>tutorial</category><author>Swayopus</author><comments>https://swayopus.space/posts/tailwind-v4-migration.md/#comments</comments></item><item><title>Astro 静态博客的极致性能优化</title><link>https://swayopus.space/posts/astro-performance.md</link><guid isPermaLink="true">https://swayopus.space/posts/astro-performance.md</guid><description>从 Lighthouse 评分到实际加载体验，分享 Astro 博客的性能优化实践。Zero JS by default 不是口号。</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 起点：Astro 的默认性能

Astro 的核心理念是 **Zero JavaScript by default**。与 Next.js、Nuxt 等框架不同，Astro 在构建时默认将所有组件渲染为静态 HTML，只在需要交互的地方注入 JS。

这意味着一个 Astro 博客的基线性能已经相当优秀。

## 关键优化点

### 1. 字体加载

字体是最常见的性能瓶颈。使用 `unicode-range` 分段和 `font-display: swap`：

```css
@font-face {
  font-family: &quot;STIX&quot;;
  src: url(&quot;/fonts/STIX-VF.woff2&quot;) format(&quot;woff2-variations&quot;);
  font-display: swap;
  unicode-range: U+0000-00FF;
}
```

### 2. 图片优化

- 使用 AVIF/WebP 格式
- 利用 Astro 的 `&lt;Image /&gt;` 组件自动生成 srcset
- 实现 LQIP (Low Quality Image Placeholders)

### 3. 预加载与预连接

```html
&lt;link rel=&quot;preload&quot; href=&quot;/fonts/STIX-VF.woff2&quot; as=&quot;font&quot; crossorigin /&gt;
&lt;link rel=&quot;dns-prefetch&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;
```

### 4. View Transitions

Astro 的 View Transitions API 让页面导航感觉像 SPA：

```astro
&lt;ClientRouter fallback=&quot;none&quot; /&gt;
```

## Lighthouse 得分参考

| 指标           | 得分   |
| -------------- | ------ |
| Performance    | 99-100 |
| Accessibility  | 100    |
| Best Practices | 100    |
| SEO            | 100    |

## 小结

Astro 让博客达到 100 分 Lighthouse 不再困难。关键是持续关注字体、图片和第三方脚本。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-15T00:00:00.000Z</dc:date><dcterms:modified>2026-06-20T00:00:00.000Z</dcterms:modified><category>工程实践</category><category>astro</category><category>performance</category><category>lighthouse</category><category>optimization</category><author>Swayopus</author><comments>https://swayopus.space/posts/astro-performance.md/#comments</comments></item><item><title>oklch 色彩空间：现代 CSS 的配色新范式</title><link>https://swayopus.space/posts/oklch-color-space.md</link><guid isPermaLink="true">https://swayopus.space/posts/oklch-color-space.md</guid><description>对比 RGB、HSL 和 oklch，理解为什么 oklch 是设计系统和主题切换的最佳选择。</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>## 为什么不用 HSL？

HSL 有一个众所周知的问题：**相同 Lightness 值的不同色相，人眼感知亮度完全不同**。

例如，`hsl(240, 100%, 50%)`（蓝色）和 `hsl(60, 100%, 50%)`（黄色）的 L 都是 50%，但黄色明显比蓝色亮得多。

## oklch 的改进

oklch 使用**感知均匀**的亮度通道：

```css
:root {
  /* 这两个颜色的感知亮度是一致的 */
  --blue: oklch(0.6 0.2 265);
  --yellow: oklch(0.6 0.2 95);
}
```

## 亮暗模式的优雅切换

```css
:root {
  --bg: oklch(0.98 0.002 106); /* 亮色背景 */
  --text: oklch(0.25 0.01 106); /* 亮色文字 */
}

.dark {
  --bg: oklch(0.18 0.008 260); /* 暗色背景 */
  --text: oklch(0.9 0.008 260); /* 暗色文字 */
}
```

## 浏览器支持

oklch 已在所有现代浏览器中得到支持（Chrome 111+, Safari 15.4+, Firefox 113+）。

## 小结

从 HSL 迁移到 oklch 是值得的——更准确的亮度控制、更简洁的实现方式、更好的可访问性。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-06-10T00:00:00.000Z</dc:date><dcterms:modified>2026-06-18T00:00:00.000Z</dcterms:modified><category>设计</category><category>css</category><category>design</category><category>colors</category><category>oklch</category><author>Swayopus</author><comments>https://swayopus.space/posts/oklch-color-space.md/#comments</comments></item><item><title>Markdown 写作的高效工作流</title><link>https://swayopus.space/posts/markdown-workflow.md</link><guid isPermaLink="true">https://swayopus.space/posts/markdown-workflow.md</guid><description>分享我使用 VS Code + Markdown + Git 的写作工具链，以及一些提升效率的插件和技巧。</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>## 核心工具

- **VS Code** — 编辑器，配合 Markdown 插件
- **Prettier** — 统一格式化
- **markdownlint** — 语法规范检查
- **Git** — 版本管理

## 必备 VS Code 插件

1. **Markdown All in One** — 快捷键、TOC、预览
2. **markdownlint** — 规范检查
3. **Code Spell Checker** — 拼写检查
4. **Paste Image** — 快速粘贴图片

## Frontmatter 模板

用脚本自动生成 frontmatter：

```yaml
---
title: &quot;&quot;
description: &quot;&quot;
published: YYYY-MM-DD
tags: []
category: &quot;&quot;
draft: true
---
```

## 小结

好的工具链让写作更专注于内容本身。Markdown + Git 的组合简单而强大。</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2026-05-28T00:00:00.000Z</dc:date><dcterms:modified>2026-06-10T00:00:00.000Z</dcterms:modified><category>工具</category><category>markdown</category><category>workflow</category><category>tools</category><category>writing</category><author>Swayopus</author><comments>https://swayopus.space/posts/markdown-workflow.md/#comments</comments></item><item><title>2025 年度回顾</title><link>https://swayopus.space/posts/2025-review.md</link><guid isPermaLink="true">https://swayopus.space/posts/2025-review.md</guid><description>回顾 2025 年的学习、工作与生活，记录这一年来的成长与收获。</description><pubDate>Sun, 28 Dec 2025 00:00:00 GMT</pubDate><content:encoded>## 学习

2025 年是技术栈快速迭代的一年。从 Rust 入门到 Astro 静态站点生成器，从前端工具链到后端部署，这一年接触了不少新东西。

### 编程语言

- **Rust**：花了三个月时间系统学习了所有权、生命周期和泛型，写了一个小型的命令行工具
- **TypeScript**：从 any 泛滥到严格模式，类型系统终于用得顺手了
- **Python**：在数据处理和自动化脚本方面继续深耕

### 工具与框架

- 从 Webpack 迁移到 Vite，构建速度快了不止一个数量级
- 开始使用 Astro 构建静态博客，享受 Zero JS by default 的极致性能
- Tailwind CSS v4 的 CSS-first 配置方式让人耳目一新

## 工作

这一年参与了几个有意义的项目：

&gt; &quot;The best code is the code you don&apos;t have to write.&quot;

在工程实践中逐渐理解了这句话的含义。过度设计是最大的敌人。

## 生活

保持了每周跑步三次的习惯，读完了 12 本书。最重要的收获是学会了在忙碌中找到平衡。

## 2026 展望

- 深入 Rust 异步编程
- 参与开源项目
- 把这个博客经营好</content:encoded><dc:creator>Swayopus</dc:creator><dc:date>2025-12-28T00:00:00.000Z</dc:date><dcterms:modified>2026-01-05T00:00:00.000Z</dcterms:modified><category>随想</category><category>总结</category><category>年度回顾</category><author>Swayopus</author><comments>https://swayopus.space/posts/2025-review.md/#comments</comments></item></channel></rss>