<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CLB 的手记</title><link>http://124.222.44.178/</link><description>Recent content on CLB 的手记</description><generator>Hugo</generator><language>zh-CN</language><copyright>© 2026 CLB-Blog</copyright><lastBuildDate>Wed, 07 Oct 2026 17:27:00 +0800</lastBuildDate><atom:link href="http://124.222.44.178/index.xml" rel="self" type="application/rss+xml"/><item><title>说说</title><link>http://124.222.44.178/sayings/s202610071727-hdo/</link><pubDate>Wed, 07 Oct 2026 17:27:00 +0800</pubDate><guid>http://124.222.44.178/sayings/s202610071727-hdo/</guid><description>&lt;p&gt;最近一口气上传了多个用ai开发打磨过的工具和软件 希望大家能喜欢多多来给我的点赞！&lt;/p&gt;</description></item><item><title>Easy-Bow</title><link>http://124.222.44.178/works/easy-bow/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/easy-bow/</guid><description/></item><item><title>Easy-IDE</title><link>http://124.222.44.178/works/easy-ide/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/easy-ide/</guid><description/></item><item><title>Easy-MD</title><link>http://124.222.44.178/works/sample-project/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/sample-project/</guid><description/></item><item><title>Easy-MD-Assistant</title><link>http://124.222.44.178/works/easy-md-assistant/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/easy-md-assistant/</guid><description/></item><item><title>easy-publish-check</title><link>http://124.222.44.178/works/easy-publish-check/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/easy-publish-check/</guid><description/></item><item><title>easy-web-builder</title><link>http://124.222.44.178/works/easy-web-builder/</link><pubDate>Wed, 07 Oct 2026 12:00:00 +0800</pubDate><guid>http://124.222.44.178/works/easy-web-builder/</guid><description/></item><item><title>Easy-Blog</title><link>http://124.222.44.178/works/easy-blog/</link><pubDate>Wed, 07 Oct 2026 09:54:36 +0800</pubDate><guid>http://124.222.44.178/works/easy-blog/</guid><description/></item><item><title/><link>http://124.222.44.178/sayings/hello-world/</link><pubDate>Mon, 05 Oct 2026 09:30:00 +0800</pubDate><guid>http://124.222.44.178/sayings/hello-world/</guid><description>&lt;p&gt;新家终于搭好了！整站静态化，首页 gzip 后不到 15KB。来都来了，点个赞再走（点赞按钮还没做，先欠着）。&lt;/p&gt;</description></item><item><title>把博客塞进 2 核 2G：性能压榨实录</title><link>http://124.222.44.178/posts/blog-in-2c2g/</link><pubDate>Sun, 04 Oct 2026 00:00:00 +0000</pubDate><guid>http://124.222.44.178/posts/blog-in-2c2g/</guid><description>&lt;p&gt;朋友都说我这博客快得不像话。没什么魔法，就是舍得砍。&lt;/p&gt;&#10;&lt;h2 id="起点一个-5-秒才开屏的站"&gt;起点：一个 5 秒才开屏的站&lt;/h2&gt;&#10;&lt;p&gt;最早我用的是某动态博客系统：Java 后端 + 前端 SPA + 全文检索，功能确实全，但首屏要等 40 多个请求、两兆多的 JS 下载执行完。2 核 2G 的小机器，CPU 直接拉满。&lt;/p&gt;&#10;&lt;p&gt;痛定思痛，我列了个清单，把「访客真正需要的东西」圈出来——其实只有三样：&lt;strong&gt;看文章、找文章、留句话&lt;/strong&gt;。其他全是给站长自己的仪式感。&lt;/p&gt;&#10;&lt;h2 id="第一刀动态改静态"&gt;第一刀：动态改静态&lt;/h2&gt;&#10;&lt;p&gt;动态系统的每一毫秒，都在为「此刻没有发生的事情」买单。评论？一年没几条。在线发文？我又不是随时随地写稿。&lt;/p&gt;&#10;&lt;p&gt;于是换成 Hugo：写 Markdown，本地一条命令，全站秒级生成纯静态 HTML。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 写完一篇文章之后，我的全部发布流程&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo --minify &lt;span class="c1"&gt;# 生成 + 压缩，1 秒出全站&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsync -az public/ root@my-server:/var/www/clblog/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;服务器上只剩 nginx，CPU 占用常年 0.x%。&lt;/p&gt;&#10;&lt;h2 id="第二刀把首屏压进三个请求"&gt;第二刀：把首屏压进三个请求&lt;/h2&gt;&#10;&lt;p&gt;打开开发者工具的 Network 面板，对着列表逐个审问：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt;：一个，CSS 内联？不——全站共享的样式单独一个文件，强缓存后回访零流量&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt;：一个，gzip 后 9KB&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;字体&lt;/strong&gt;：中文字体动辄 5MB，直接用系统字体，零下载；英文展示字体只要拉丁子集，18KB&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;图片&lt;/strong&gt;：插画全用 SVG，7KB 矢量不发糊&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# nginx 的三行关键配置&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;gzip&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;gzip_types&lt;/span&gt; &lt;span class="s"&gt;text/css&lt;/span&gt; &lt;span class="s"&gt;application/javascript&lt;/span&gt; &lt;span class="s"&gt;image/svg+xml&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/assets/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;1y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;public,&lt;/span&gt; &lt;span class="s"&gt;immutable&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="第三刀动画也要抠"&gt;第三刀：动画也要抠&lt;/h2&gt;&#10;&lt;p&gt;滚动卡顿的站，再快也显得慢。全部动画只用两个属性：&lt;/p&gt;</description></item><item><title>说说</title><link>http://124.222.44.178/sayings/s202609282210-wp1/</link><pubDate>Mon, 28 Sep 2026 22:10:00 +0800</pubDate><guid>http://124.222.44.178/sayings/s202609282210-wp1/</guid><description>&lt;p&gt;马上就要放假了 好耶&lt;/p&gt;</description></item><item><title>uTools</title><link>http://124.222.44.178/treasure/utools/</link><pubDate>Tue, 22 Sep 2026 10:00:00 +0800</pubDate><guid>http://124.222.44.178/treasure/utools/</guid><description/></item><item><title>Excalidraw</title><link>http://124.222.44.178/treasure/excalidraw/</link><pubDate>Sun, 20 Sep 2026 10:00:00 +0800</pubDate><guid>http://124.222.44.178/treasure/excalidraw/</guid><description/></item><item><title>游戏设计艺术</title><link>http://124.222.44.178/treasure/art-of-game-design/</link><pubDate>Fri, 18 Sep 2026 10:00:00 +0800</pubDate><guid>http://124.222.44.178/treasure/art-of-game-design/</guid><description/></item><item><title>Docker 踩坑记：从删库跑路到从容回滚</title><link>http://124.222.44.178/posts/docker-pitfalls/</link><pubDate>Fri, 18 Sep 2026 00:00:00 +0000</pubDate><guid>http://124.222.44.178/posts/docker-pitfalls/</guid><description>&lt;p&gt;先说结论：Docker 本身不坑，坑的是「反正有容器兜底」的侥幸心理。&lt;/p&gt;&#10;&lt;h2 id="坑一数据在容器里"&gt;坑一：数据在容器里&lt;/h2&gt;&#10;&lt;p&gt;第一次部署 MySQL，&lt;code&gt;docker run&lt;/code&gt; 一把梭，半年后容器一删——&lt;strong&gt;数据跟着陪葬&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;现在我的第一原则：有状态的東西，必须挂 volume。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;mysql&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysql:8&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./data/mysql:/var/lib/mysql &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 数据落到宿主机&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./backups:/backups &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 备份目录单独挂&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="坑二升级靠记性"&gt;坑二：升级靠记性&lt;/h2&gt;&#10;&lt;p&gt;「上次改了配置」这种话，说出口的瞬间就该报警。我的解法是把所有东西塞进一个 &lt;code&gt;docker-compose.yml&lt;/code&gt;，版本控制起来：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;blog-db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mysql:8&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;unless-stopped&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;env_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;.env &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 密码不进 git&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./data/mysql:/var/lib/mysql&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改完 &lt;code&gt;docker compose up -d&lt;/code&gt;，变化一目了然，回滚就是 &lt;code&gt;git revert&lt;/code&gt;。&lt;/p&gt;&#10;&lt;h2 id="坑三容器里没有-vim也救不了你"&gt;坑三：容器里没有 vim，也救不了你&lt;/h2&gt;&#10;&lt;p&gt;半夜排障进容器，发现连 &lt;code&gt;curl&lt;/code&gt; 都没有，是每个运维人的成人礼。&lt;/p&gt;</description></item><item><title>Hello，算法</title><link>http://124.222.44.178/treasure/hello-algo/</link><pubDate>Wed, 16 Sep 2026 10:00:00 +0800</pubDate><guid>http://124.222.44.178/treasure/hello-algo/</guid><description/></item><item><title/><link>http://124.222.44.178/sayings/rust-fight/</link><pubDate>Mon, 14 Sep 2026 01:20:00 +0800</pubDate><guid>http://124.222.44.178/sayings/rust-fight/</guid><description>&lt;p&gt;和 Rust 的 borrow checker 大战三百回合。它说的每一句都对，但我就是想哭。&lt;/p&gt;</description></item><item><title>为什么我又开始写博客了</title><link>http://124.222.44.178/posts/why-blog-again/</link><pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate><guid>http://124.222.44.178/posts/why-blog-again/</guid><description>&lt;p&gt;这是我的第三个博客。&lt;/p&gt;&#10;&lt;p&gt;第一个在大学，写了两周，死于「没人看」。第二个在工作的第一年，写了半年，死于「没时间」。这是第三个，我不想让它死于任何理由。&lt;/p&gt;&#10;&lt;h2 id="写博客到底图什么"&gt;写博客到底图什么&lt;/h2&gt;&#10;&lt;p&gt;想明白一件事之后，就写得动了：&lt;strong&gt;博客首先是写给自己的&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;半年后搜「当时那个坑怎么解决的」，自己的文章比论坛靠谱&lt;/li&gt;&#10;&lt;li&gt;把模糊的理解写成文字，漏洞立刻现形&lt;/li&gt;&#10;&lt;li&gt;等我老了，这里就是我的记录仪&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;有人看？很好。没人看？也不亏。&lt;/p&gt;&#10;&lt;h2 id="这次的不同"&gt;这次的不同&lt;/h2&gt;&#10;&lt;p&gt;前两次都倒在「仪式感太重」上：先挑主题、再调样式、再纠结排版，写作本身反而排最后。&lt;/p&gt;&#10;&lt;p&gt;这次把仪式感降到最低：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;打开编辑器，新建一个 &lt;code&gt;.md&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;写完，一条命令发布&lt;/li&gt;&#10;&lt;li&gt;完事&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;样式？写文章的时候根本不用管，模板都定好了。&lt;/p&gt;&#10;&lt;h2 id="一点点野心"&gt;一点点野心&lt;/h2&gt;&#10;&lt;p&gt;希望十年后回头看，这里攒下几百篇手记，记录一个普通程序员怎么慢慢变老。&lt;/p&gt;&#10;&lt;p&gt;就这么写吧，一篇一篇来。&lt;/p&gt;</description></item><item><title>关于</title><link>http://124.222.44.178/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://124.222.44.178/about/</guid><description>&lt;p&gt;白天上班当java工程师，晚上写研究学习ai。写了七年后端，一年全栈，主力 &lt;strong&gt;Spring 全家桶&lt;/strong&gt;，副业修服务器——自己的服务器自己救，玩玩游戏给朋友装装电脑。&lt;/p&gt;&#10;&lt;p&gt;技术口味偏朴素：能用一个文件解决的事，绝不上一套框架。这个站就是证据，你看源代码就一屏。&lt;/p&gt;&#10;&lt;p&gt;不写代码的时候在带娃、打游戏、vibe coding。这里放我的手记，和私藏的好东西。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;这个站的哲学：&lt;/strong&gt; 不追踪、不弹窗、不放广告。打开即读完，读完即关掉，不占你一秒多余的时间。&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item><item><title>友链</title><link>http://124.222.44.178/links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://124.222.44.178/links/</guid><description/></item><item><title>归档</title><link>http://124.222.44.178/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://124.222.44.178/archives/</guid><description/></item><item><title>搜索</title><link>http://124.222.44.178/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://124.222.44.178/search/</guid><description/></item><item><title>留言板</title><link>http://124.222.44.178/board/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://124.222.44.178/board/</guid><description>&lt;p&gt;随便聊：对站点的建议、想看的选题、或者单纯打个招呼都行。&lt;/p&gt;&#10;&lt;p&gt;评论区用的 GitHub Discussions，登录 GitHub 账号即可留言——不做注册表单，不收集邮箱，老派但省心。&lt;/p&gt;&#10;&lt;p&gt;嫌麻烦也可以直接&lt;a href="mailto:hi@clblog.dev"&gt;发邮件&lt;/a&gt;，我看到都会回。&lt;/p&gt;</description></item></channel></rss>