<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Jack</title><description>当坚冰还盖着北海的时候，我看到了怒放的梅花</description><link>https://blog.masteryang.workers.dev/</link><language>zh_CN</language><item><title>20260830</title><link>https://blog.masteryang.workers.dev/posts/diary-2026-08-30/</link><guid isPermaLink="true">https://blog.masteryang.workers.dev/posts/diary-2026-08-30/</guid><description>二十六岁的一个周日，关于时间、游戏和跳槽的一些胡思乱想。</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今天是 2026 年 8 月 30 号，这个博客网站终于搭建起来了，这也是我本人写的第一篇内容，前面几篇都是 Claude 写的。为什么想要写博客呢？其实很早就打算写了，主要是为了记录一下东西，自己的想法，开心的事情，不开心的事情都记录一下。博客虽然能够在线访问，但是根本没有人知道这个地址，所以我想说什么就说什么吧。具体想说什么？今天是周天，还是像往常一样，一个人呆在出租屋，啥事都不想干，就搁着床上那么一躺，但是发现好无聊，能够感受时间的流逝。不知不觉已经二十六岁了，但是按照父母的计算方式，其实我已经满 26 周岁了，现在应该是 27 岁。上班之后人生就像按了加速键——高中三年我感觉过的好慢，大学四年快一点，工作四年更快了。不知道是不是重复的事情做多了，就导致时间过得其实很快。看网上有人说，其实年龄只是一个时间概念，最重要的是经历。有些人的经历很丰富，看过很多的书，去过很多的地方，认识过很多的人，完成过很多挑战，击败过无数的竞争对手等等……导致心理的年龄成长的很快。对，心理年龄！好像人生就是一个地球 online 游戏。有些人通过自己不断的打怪，吃了很多的经验，入坑的时间很短但是游戏等级已经非常的高；有些人或许入坑的时间很长，不想去打怪，等级经验很少，但是没什么关系。有些人在推进主线任务，有些人在玩种田游戏。正如我玩的两款游戏。有些人喜欢空洞骑士那样的，主角前期很弱小，可能遇到一个精英怪都打不过，很难玩，很想放弃，但是坚持玩下去你打赢了，战斗经验得到了提升，可能还会获取技能能力，当你一路去挑战，最终你可以挥剑向神，完成弑神。有些人或许在玩荒野大镖客，不用去推进主线任务，天天在游戏里面闲逛，去玩玩支线也还不错。人生只有一种成功的方式，就是按照自己的意愿去过完这一生，做一个有内部计分卡的人，不要受到外部的影响。在这个 26 的年纪我想要去做什么？我想要一场世俗意义上的成功。这个成功可以是赚很多的钱，找一份薪资更高的工作，最想要的是找到一群志同道合的人去创业，努力去创建一个商业模式，然后体验暴富的感觉，哈哈哈哈……但是现在我只想要离开目前这个公司，我想要跳槽。为什么想要跳槽？最重要的原因是钱太少。还有一点，我想去体验不同公司的商业模式，看看别的公司是如何赚钱的。现在我的公司是 to B 企业，去年读了查理·芒格的问答录，芒格最后是在每日期刊担任董事长，这种面向企业、政府单位的业务稳定，但是利润少——这是优势同时也是劣势，不过越来越感觉和我的职业规划不符合了。每次周末都想要写简历，但是每次周末都没写，哈哈哈哈……为什么不想写？人总是有惰性啊，还在公司就混吃等死，直到自己失业才去找工作。其实不应该是这样的。记得之前看到过视频，雷军说投资应该在你公司发展有钱的时候去融资，而不是困难的时候去融资，那个时候其实你没有任何议价权。所以我要强迫我自己去做。投什么公司呢？我想去深圳，毗邻香港，离家近，南方，出海企业，面向 C 端。其实不管大公司还是小公司，应该判断这个公司商业模式好不好，把我自己的精力、时间、技能当作资本去投资一家公司，除了上市公司我都可以去投资，或许我可以拿到原始股呢。OK，现在开始写简历吧，多完善自己的简历。&lt;/p&gt;
</content:encoded></item><item><title>折腾了两天，博客总算上线了</title><link>https://blog.masteryang.workers.dev/posts/building-this-blog/</link><guid isPermaLink="true">https://blog.masteryang.workers.dev/posts/building-this-blog/</guid><description>一个后端开发从零搭起个人博客的过程记录：Astro、GitHub、Cloudflare Workers。</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;一直想有个地方把工作里踩的坑记下来。做后端这些年，很多问题都是查完、解决完就过去了，隔段时间再遇到还得重新查一遍。这次总算动手了。&lt;/p&gt;
&lt;h2&gt;选了个现成的主题&lt;/h2&gt;
&lt;p&gt;前端我是真不会。所以没打算自己写，直接从 GitHub 上 clone 了一个叫 Fuwari 的博客主题，基于 Astro 做的。&lt;/p&gt;
&lt;p&gt;Astro 这东西，用后端的话理解就是：它把 Markdown 文件编译成一堆静态 HTML，最后产物是个纯静态站点，没有后端也没有数据库。&lt;code&gt;package.json&lt;/code&gt; 相当于 &lt;code&gt;pom.xml&lt;/code&gt;，&lt;code&gt;pnpm&lt;/code&gt; 相当于 Maven，&lt;code&gt;node_modules&lt;/code&gt; 相当于 &lt;code&gt;.m2&lt;/code&gt; 仓库——只不过它是放在项目目录里的。&lt;/p&gt;
&lt;p&gt;跑起来只要一条命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本地 4321 端口就能看到了。改文件自动热更新，这点比后端调试舒服。&lt;/p&gt;
&lt;h2&gt;把别人的东西改成自己的&lt;/h2&gt;
&lt;p&gt;clone 下来的是人家的 demo 站，到处都是原作者的信息。挨个改：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;界面语言换成中文（主题自带 &lt;code&gt;zh_CN&lt;/code&gt; 翻译，改一行配置的事）&lt;/li&gt;
&lt;li&gt;站点标题、昵称、简介、头像&lt;/li&gt;
&lt;li&gt;导航栏和侧边栏的 GitHub 链接指向自己&lt;/li&gt;
&lt;li&gt;「关于」页重写&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;页脚那句 &quot;Powered by Astro &amp;amp; Fuwari&quot; 留着了。项目是 MIT 协议，删掉也不违规，但人家开源出来给你用，署个名是应该的。&lt;/p&gt;
&lt;h2&gt;一个意外发现&lt;/h2&gt;
&lt;p&gt;推代码到自己仓库的时候卡住了，SSH 连不上 GitHub。翻 &lt;code&gt;~/.ssh/config&lt;/code&gt; 一看：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host github.com
    IdentityFile /home/node/.ssh/id_ed25519
    IdentitiesOnly yes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/home/node/&lt;/code&gt; 是 Linux 容器里的路径。我这是 macOS，家目录是 &lt;code&gt;/Users/&lt;/code&gt;，这文件压根不存在。应该是之前哪次从 devcontainer 里把配置复制过来了，一直没发现。而 &lt;code&gt;IdentitiesOnly yes&lt;/code&gt; 意味着&quot;只准用这个密钥&quot;，把本机真实的密钥全挡在外面了。&lt;/p&gt;
&lt;p&gt;顺手还发现本机两把密钥不一样：一把是某个仓库的 Deploy Key（只能访问那一个仓库），另一把才是账号密钥。测试的时候能看出来：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T git@github.com
# Deploy Key 回:  Hi 用户名/仓库名!
# 账号密钥回:      Hi 用户名!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;改对路径就通了。这种从别的环境带过来的配置残留，不出事的时候完全不知道。&lt;/p&gt;
&lt;h2&gt;部署踩的一个认知坑&lt;/h2&gt;
&lt;p&gt;本来想用 Cloudflare Pages，结果部署完发现域名是 &lt;code&gt;xxx.workers.dev&lt;/code&gt; 而不是 &lt;code&gt;xxx.pages.dev&lt;/code&gt;——才知道自己用的是 Workers。&lt;/p&gt;
&lt;p&gt;查了下才搞明白：Cloudflare 这两年在把 Pages 往 Workers 上合并。Workers 原本是跑 Serverless 函数的，后来加了托管静态资源的能力，现在官方文档明确写着&lt;strong&gt;新项目请用 Workers&lt;/strong&gt;，Pages 只是还能用而已。&lt;/p&gt;
&lt;p&gt;对纯静态博客来说两者没区别，都是 push 代码自动构建部署。就是给的免费域名后缀不一样。&lt;/p&gt;
&lt;p&gt;顺便看了下免费额度，比想象中大方：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;服务&lt;/th&gt;
&lt;th&gt;免费额度&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workers 请求&lt;/td&gt;
&lt;td&gt;10 万次/天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D1（SQLite）&lt;/td&gt;
&lt;td&gt;读 500 万行/天，5 GB 存储&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KV&lt;/td&gt;
&lt;td&gt;读 10 万次/天&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R2（对象存储）&lt;/td&gt;
&lt;td&gt;出流量免费&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;也就是说计算、数据库、缓存、对象存储都齐了。以后想给博客加个评论系统或者访问统计，不用另找服务器。&lt;/p&gt;
&lt;h2&gt;最后一个乌龙&lt;/h2&gt;
&lt;p&gt;改完子域名，浏览器打不开新地址，以为部署挂了。命令行测了一下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -I https://blog.masteryang.workers.dev/
# HTTP/2 200
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;服务端好好的。是本机代理软件的 DNS 缓存问题——域名被解析到了 &lt;code&gt;198.18.x.x&lt;/code&gt; 这种虚拟地址段。虚惊一场。&lt;/p&gt;
&lt;p&gt;排查问题还是得先分清是服务端还是客户端，凭感觉容易跑偏。&lt;/p&gt;
&lt;h2&gt;现在的状态&lt;/h2&gt;
&lt;p&gt;从改 Markdown 到线上生效，整条链路是通的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;写 .md 文件 → git push → Cloudflare 自动构建 → 约 2 分钟上线
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;内容还很空，就先这样。慢慢写。&lt;/p&gt;
</content:encoded></item><item><title>Markdown Extended Features</title><link>https://blog.masteryang.workers.dev/posts/markdown-extended/</link><guid isPermaLink="true">https://blog.masteryang.workers.dev/posts/markdown-extended/</guid><description>Read more about Markdown features in Fuwari</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;GitHub Repository Cards&lt;/h2&gt;
&lt;p&gt;You can add dynamic cards that link to GitHub repositories, on page load, the repository information is pulled from the GitHub API.&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;Fabrizz/MMM-OnSpotify&quot;}&lt;/p&gt;
&lt;p&gt;Create a GitHub repository card with the code &lt;code&gt;::github{repo=&quot;&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&quot;}&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;Masteryang123/blog&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Admonitions&lt;/h2&gt;
&lt;p&gt;Following types of admonitions are supported: &lt;code&gt;note&lt;/code&gt; &lt;code&gt;tip&lt;/code&gt; &lt;code&gt;important&lt;/code&gt; &lt;code&gt;warning&lt;/code&gt; &lt;code&gt;caution&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;:::note
Highlights information that users should take into account, even when skimming.
:::&lt;/p&gt;
&lt;p&gt;:::tip
Optional information to help a user be more successful.
:::&lt;/p&gt;
&lt;p&gt;:::important
Crucial information necessary for users to succeed.
:::&lt;/p&gt;
&lt;p&gt;:::warning
Critical content demanding immediate user attention due to potential risks.
:::&lt;/p&gt;
&lt;p&gt;:::caution
Negative potential consequences of an action.
:::&lt;/p&gt;
&lt;h3&gt;Basic Syntax&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;:::note
Highlights information that users should take into account, even when skimming.
:::

:::tip
Optional information to help a user be more successful.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Custom Titles&lt;/h3&gt;
&lt;p&gt;The title of the admonition can be customized.&lt;/p&gt;
&lt;p&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[MY CUSTOM TITLE]
This is a note with a custom title.
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GitHub Syntax&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
&lt;a href=&quot;https://github.com/orgs/community/discussions/16925&quot;&gt;The GitHub syntax&lt;/a&gt; is also supported.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; [!NOTE]
&amp;gt; The GitHub syntax is also supported.

&amp;gt; [!TIP]
&amp;gt; The GitHub syntax is also supported.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Spoiler&lt;/h3&gt;
&lt;p&gt;You can add spoilers to your text. The text also supports &lt;strong&gt;Markdown&lt;/strong&gt; syntax.&lt;/p&gt;
&lt;p&gt;The content :spoiler[is hidden &lt;strong&gt;ayyy&lt;/strong&gt;]!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The content :spoiler[is hidden **ayyy**]!

&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Markdown Example</title><link>https://blog.masteryang.workers.dev/posts/markdown/</link><guid isPermaLink="true">https://blog.masteryang.workers.dev/posts/markdown/</guid><description>A simple example of a Markdown blog post.</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;An h1 header&lt;/h1&gt;
&lt;p&gt;Paragraphs are separated by a blank line.&lt;/p&gt;
&lt;p&gt;2nd paragraph. &lt;em&gt;Italic&lt;/em&gt;, &lt;strong&gt;bold&lt;/strong&gt;, and &lt;code&gt;monospace&lt;/code&gt;. Itemized lists
look like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;this one&lt;/li&gt;
&lt;li&gt;that one&lt;/li&gt;
&lt;li&gt;the other one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that --- not considering the asterisk --- the actual text
content starts at 4-columns in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Block quotes are
written like so.&lt;/p&gt;
&lt;p&gt;They can span multiple paragraphs,
if you like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., &quot;it&apos;s all
in chapters 12--14&quot;). Three dots ... will be converted to an ellipsis.
Unicode is supported. ☺&lt;/p&gt;
&lt;h2&gt;An h2 header&lt;/h2&gt;
&lt;p&gt;Here&apos;s a numbered list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;first item&lt;/li&gt;
&lt;li&gt;second item&lt;/li&gt;
&lt;li&gt;third item&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note again how the actual text starts at 4 columns in (4 characters
from the left side). Here&apos;s a code sample:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Let me re-iterate ...
for i in 1 .. 10 { do-something(i) }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you probably guessed, indented 4 spaces. By the way, instead of
indenting the block, you can use delimited blocks, if you like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define foobar() {
    print &quot;Welcome to flavor country!&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(which makes copying &amp;amp; pasting easier). You can optionally mark the
delimited block for Pandoc to syntax highlight it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import time
# Quick, count to ten!
for i in range(10):
    # (but not *too* quick)
    time.sleep(0.5)
    print i
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;An h3 header&lt;/h3&gt;
&lt;p&gt;Now a nested list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First, get these ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;carrots&lt;/li&gt;
&lt;li&gt;celery&lt;/li&gt;
&lt;li&gt;lentils&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boil some water.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dump everything in the pot and follow
this algorithm:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; find wooden spoon
 uncover pot
 stir
 cover pot
 balance wooden spoon precariously on pot handle
 wait 10 minutes
 goto first step (or shut off burner when done)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not bump wooden spoon or it will fall.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Notice again how text always lines up on 4-space indents (including
that last line which continues item 3 above).&lt;/p&gt;
&lt;p&gt;Here&apos;s a link to &lt;a href=&quot;http://foo.bar&quot;&gt;a website&lt;/a&gt;, to a &lt;a href=&quot;local-doc.html&quot;&gt;local
doc&lt;/a&gt;, and to a &lt;a href=&quot;#an-h2-header&quot;&gt;section heading in the current
doc&lt;/a&gt;. Here&apos;s a footnote [^1].&lt;/p&gt;
&lt;p&gt;[^1]: Footnote text goes here.&lt;/p&gt;
&lt;p&gt;Tables can look like this:&lt;/p&gt;
&lt;p&gt;size material color&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;9 leather brown
10 hemp canvas natural
11 glass transparent&lt;/p&gt;
&lt;p&gt;Table: Shoes, their sizes, and what they&apos;re made of&lt;/p&gt;
&lt;p&gt;(The above is the caption for the table.) Pandoc also supports
multi-line tables:&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;keyword text&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;red Sunsets, apples, and
other red or reddish
things.&lt;/p&gt;
&lt;p&gt;green Leaves, grass, frogs
and other things it&apos;s
not easy being.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A horizontal rule follows.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Here&apos;s a definition list:&lt;/p&gt;
&lt;p&gt;apples
: Good for making applesauce.
oranges
: Citrus!
tomatoes
: There&apos;s no &quot;e&quot; in tomatoe.&lt;/p&gt;
&lt;p&gt;Again, text is indented 4 spaces. (Put a blank line between each
term/definition pair to spread things out more.)&lt;/p&gt;
&lt;p&gt;Here&apos;s a &quot;line block&quot;:&lt;/p&gt;
&lt;p&gt;| Line one
| Line too
| Line tree&lt;/p&gt;
&lt;p&gt;and images can be specified like so:&lt;/p&gt;
&lt;p&gt;Inline math equations go in like so: $\omega = d\phi / dt$. Display
math should get its own line and be put in in double-dollarsigns:&lt;/p&gt;
&lt;p&gt;$$I = \int \rho R^{2} dV$$&lt;/p&gt;
&lt;p&gt;$$
\begin{equation*}
\pi
=3.1415926535
;8979323846;2643383279;5028841971;6939937510;5820974944
;5923078164;0628620899;8628034825;3421170679;\ldots
\end{equation*}
$$&lt;/p&gt;
&lt;p&gt;And note that you can backslash-escape any punctuation characters
which you wish to be displayed literally, ex.: `foo`, *bar*, etc.&lt;/p&gt;
</content:encoded></item></channel></rss>