<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>wolfyzhang&apos;s blog</title><description>行则将至，重要的是玩开心！</description><link>https://blog.wolfyzhang.com/</link><item><title>自建私有云</title><link>https://blog.wolfyzhang.com/self-built-private-cloud/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/self-built-private-cloud/</guid><pubDate>Sun, 09 Aug 2026 20:15:53 GMT</pubDate><content:encoded>我目前持有着：

1. 有公网 IP 的 VPS 若干
2. 安装 PVE 的常在线小主机一台，其中安装有一系列的 LXC 和 VM
3. ~~待购的常在线 Mac mini 一台~~

不论 VPS 还是物理小主机，运行的都是 Ubuntu/Debian，统称为节点，按属性来看：

| 节点 | 公网 IP | 虚拟化 | 存储 | 算力 | 下线风险 |
|---|---|---|---|---|---|
| VPS | 有 | 基本没有 | 小而贵 | 虚拟核，较弱 | 低 |
| PVE 小主机 | 无 | 有 | 大而便宜 | N100，较强 | 较低，过去 1 年下线小于 1 周 |

那么这些节点资源如何使用呢？换句话说，怎么构建对应的软件能力？这就是本文要回答的问题。

我需要的说到底是一些自部署的服务，**根据场景又延伸出不同的形态**：

| 形态 | 访问者 | 需要的粒度 | 约束 |
|---|---|---|---|
| 公开 Web | 任意人 | 一个 HTTP 端点 | 公网可达、要 HTTPS |
| 私有 Web | 我，但在不同地点的不同设备上 | 一个 HTTP 端点 | 不暴露到公网，且不限于物理局域网 |
| Agent 宿主 | Agent，我偶尔介入 | 完整 OS / 容器，有算力要求 | 常在线、可快照回滚、能自由出网、爆炸半径可控 |

**形态尤其是约束清楚之后，方案也就自己浮现了**：

- 公开 Web 要公网可达，是最普适的需求，VPS 天然满足，配置一个域名解析和反向代理即可
- 私有 Web 要不上公网且不限物理局域网，VPS 和 PVE 共同缺失的是一个覆盖全设备的私有网络层，一套虚拟局域网，这也是有成熟技术方案的问题，搭建一套 tailscale 或 wireguard 网络即可
- Agent 宿主要完整 OS + 快照回滚 + 大存储，再综合上算力指标，PVE 天然满足，开一个 VM 即可

最后，具体说一下 Agent 宿主：运行 Hermes Agent，搭配 DeepSeek V4 Flash，再接入飞书等「一等公民」终端，来实现远程交互。本身 PVE 是有网的，所以搜索和请求等能力也都具备。向外暴露的 Hook 接口，目前为止都只被自有设备/服务调用，也就是不需要公网入口，万一需要，tailscale tunnel 即可满足。目前完全具备 CLI 下的 Agent 能力，同时缺失了 GUI 的 Agent 能力，例如 Computer Use，不过后者用到的频次很低。

小主机是我在 2025Q2 购入的，全套大概 ¥800，已经稳定运行 1 年有余，算得上是最近几年回报率最高的投资之一了。</content:encoded></item><item><title>用AI升级了Blog</title><link>https://blog.wolfyzhang.com/upgraded-blog-with-ai/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/upgraded-blog-with-ai/</guid><pubDate>Thu, 30 Jul 2026 20:28:38 GMT</pubDate><content:encoded>最近用 AI 对这个 Blog 网站做了一系列可以称得上「重大」的更新：

- 想清楚了不同内容阵地里发什么东西。这一点不展开。

- 生成器从 Hexo 迁移到了 Astro，并将引用的 Hexo 生态插件在 Astro 语境下重新实现了一遍，保证迁移前后效果对齐。

Hexo 已经用了好几年，其实也没什么功能上的缺失，只是有些插件已经很久没更新，例如 encrypt，同时我自己实现的主题中也有几个 deprecated 的依赖，前 AI 时代下可能就小修小补（插件不更新就继续用、依赖手动升级再解决一下兼容性问题），可在现在的时代语境下，实现一份效果对齐的 Astro 主题的成本已经很低了，所以干脆迁移到生态上更活跃、技术上也更面向未来的 Astro 好了，作为一个长期迭代的基线大概率比 Hexo 要好一些。

同时，对于一些安全性和性能等代码质量问题，在当下，我其实更乐意*相信* GPT-5.6 Sol 实现的代码，而非一份 n 年未更新的人类作者仓库。这个网站的项目规模也很小，自己用 AI 实现确实增加了维护面，但极大提升了可控性，我觉得在我的场景下显然这笔账算下来是值得的。

- 实现了内容管理的后端服务，以及配套的 iOS、macOS App。

写内容对我来说属于一种本能的情绪性的精神输出，但**摩擦力也确实会影响产出**，例如有不少念头其实值得展开成文，却由于没有短平快的入口而逐渐耗散了，尤其是情绪被时间消解之后很难再去书写什么。

前两年我就有构建一份移动端 Blog 写作方案的念头，一直在尝试寻找 or 组合符合需求的产品，但可能我的场景稍微有些小众（需要对我自建主题的一些 feature 做支持，一些 .md 文件内 metadata 驱动的条件内容渲染功能），没特别满意的。例如试过用 Obsidian 管理 Blog 内容的 Git 仓库（生成器或者说主题仓库是单独的），也试过一些例如 Qexo 的 Web CMS 方案，但效果都不是特别好。

主要是 Obsidian 本身不是为 Hexo 类发布流水线设计的产品，在写作场景下使用它，第一会显得很臃肿，第二在进度保存、版本发布方面也存在诸多问题，所以体验一直不是很好；另外 iOS 上对本地 Git 仓库的管理也天然不便。

所以，在成本可以接受的前提下，自建一套 Markdown 写作 + commit push 驱动部署的管理工具，也就值得去动手了。</content:encoded></item><item><title>2024 年终总结</title><link>https://blog.wolfyzhang.com/summary-of-2024/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/summary-of-2024/</guid><pubDate>Sun, 02 Feb 2025 04:02:47 GMT</pubDate><content:encoded>看着公狗在笼子里腾挪跳跃，我想，我知道我今年的这篇东西该怎么写了。

年初我家抱来两只狗，一母同胎，不知道哪个大点，一公一母；公的是灰的，母的是黄的，都是土狗，没品种。俩狗或许是天性，喜欢围人，土狗个头本来就小，膝盖高都没有，成了呼来跳去，前爪不着地。冬天下小雪，晚上灯照着，雪地里亮晶晶，狗眼睛也亮晶晶，有反光。我家院子的水泥地没俩狗的地方，它们就自己在角落里找到个破门帘，互相靠着，白天休息，晚上睡觉。

两只狗我家养不下，在我妈坚持下，把公狗送给了一个亲戚，亲戚住得离我家很近，也就几百米，我自告奋勇，亲手抱过去了。亲戚家孩子见了狗，惊喜得了不得，当天就动手用一堆纸板海绵给狗做了个挺坚固的窝。

节后我回北京，年中回家不多，见狗也不多；我家的母狗见得还多一点，公狗基本没见过。这次过年，我近距离看了公狗一眼。

你很难说狗在哪家更幸福。

母狗在我家，大部分时候放在笼子里，偶尔会放出来在院子里跑几天，很亲人，不过平时吃得很一般，一些淀粉为主的剩饭剩菜而已，间或掺点狗粮，作用像是人做菜的味精。

公狗在我亲戚家，大半年，一直都放笼子里头，亲戚家生意更忙，没人放它出来，也没人陪狗玩，但平时吃得比我家好，动物性的剩饭剩菜多，狗粮没有，骨头剩肉管够。

秋天的时候闹犬瘟热，死了不少狗。母狗扛得很吃力，我爸带着它连续打了一周的点滴才勉强恢复过来，还不确定有没有后遗症；公狗，我和亲戚家另一个孩子说（搭狗窝的孩子在外地上学）如果有症状可以和我爸说一声，一起带去看病，孩子回答我没事，不用管，有症状让它自己扛一扛就行，我也没再多说什么，但公狗扛住了，活了。

可能是因为我家的是母狗，平时安静很多，围人身边，或者人凑去笼子边逗它，充其量也就是跳一跳，舔舔人的手，在人脚边扭来扭去。可公狗不这个样子，我一共见它三两次，每次都发了疯，在笼子里从这头闪转到那头，狗头从笼子的铁丝网缝里伸出来，直到遇到前爪再伸不动，伸不动就再回去，把前爪往上面扒，呼哧呼哧喘气，激动得了不得。

有朋友说我写的东西「苍凉」，我感觉这个词很准确。我幼时接触的农村环境充满了现实和无奈，人的情感或者说天性很大程度上被压制，让渡于可以带来更大物质意义的规则——生存规则、社会规则。这种现实和无奈，投射到生存在农村环境——不如说是人类社会——中的动物身上，就是一种冷淡的难以言说的「苍凉」。只是我选择以一种近乎白描的手法来表现它而已。

你很难对某些规则直接加以正面或负面的取向，它们是环境的二次产物，一次产物，是人。

我的2024年谈不上多顺利，不过也谈不上多不顺利。我不太想用线性的叙事方式再重新讲一遍这一年的故事，我希望用另外一种手法来表现出来它更本质的一些东西——很模糊的一团混沌。狗不知道明天等待它的会是什么，也许是继续依偎着睡破门帘，也许是其中一只被送人——你又是哪一只？也许是去住了更好的纸板房，吃了更美味的鸡骨头，或者被送进笼子——你是大半年不曾出来过的那一只，还是每隔一段时间就会被放出来稍微跑一跑的那一只？这些东西站在狗的角度是难以预料的，人比狗也强不了多少。

上半年的那些经历究竟是黑暗还是蛰伏，下半年遇到的团队究竟是幸运还是转折，你在当下的视角来看给不出什么有实际意义的判断，环境的力量太强大了，人：或者说狗，能做的事情很少，但又极其关键，以至于能够影响生死。

我可以把自己当作那只还没有进笼子的狗，说一句：这一年了解了很多业务上的东西，学习了很多技术上的细节，积累了很多人生素材，但我还没进笼子呢，未来的2025年要做的事情比2024要多得多，一些精神上的煎熬也比2024要多得多。我要向公狗学习，我也要向母狗学习。

来年再写总结的时候，回过头来看这篇东西，不知道我会不会觉得，我就像是在笼子里呆了大半年的公狗看它小时候睡在破门帘上一样幼稚和可笑。

---

补：这部分内容和主题关系不大，但本着尊重生命的考虑，我还是写下。

在公狗母狗一起来我家的那个冬天，在距离我家几十米的一个路口，有依偎在一起的两只小狗，薄雪盖着，冻死的。

在把公狗送走后，我家又来了另外一只小母狗，两只母狗一起养。新的小母狗体型很小，但和原来的母狗并不见生，两只狗在一起生活了小半年时间。犬瘟热的时候，小母狗第一天就没扛住，用我妹的话说「早上过去看的时候都招苍蝇了」。</content:encoded></item><item><title>异国点外卖</title><link>https://blog.wolfyzhang.com/ordering-takeout-abroad/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/ordering-takeout-abroad/</guid><pubDate>Thu, 07 Nov 2024 00:57:59 GMT</pubDate><content:encoded>我在北京，妹子在新加坡，试了试跨国点外卖。

国内的生活服务平台都还没开展新加坡（或者说东南亚）的业务，所以首先是选什么平台的问题。

想起来之前网上冲浪的时候经常听到个港区广告，FoodPanda，隐约记得是个食品相关的生活服务平台，就先入为主地去App Store下了一个试试看。

实际上手，IP设计得挺不错，但是看支付方式发现只支持银行卡支付，有Visa、MasterCard还有银联等等，我手头确实有匹配的信用卡和借记卡，但是我还没试过用信用卡刷境外的消费账单，借记卡里面也没新币，单独买一点这一次也花不完，同时我也不太想直接把银行卡绑上去，也就不了了之了。

后面去小红书上查了一下怎么在新加坡点外卖，发现Grab更常用，而且支持国内支付宝。同时小红书上还存在着大量的私信代点外卖的帖子……

简单看了看背景，发现是一个主打东南亚市场的生活服务平台，核心业务就是网约车和外卖。论App的设计风格，Grab比美团要简洁多了，但是能提供的服务也比美团少得多。之前Steam买游戏就没少直接支付宝付款，能按实时汇率来计算账单，付人民币。下载上手过程略过不提，下面着重说几个下单过程里值得展开的点。

新加坡的外卖商品相当贵。之前听妹子说线下「食阁」一份盖饭的价格大概是5新币，合大概30人民币，和国内类似的地下美食城比稍微贵点，但是外卖价格就上天了。一个有主食有菜有饮料的套餐，Grab上要20多新币，大约130人民币，北京美团上大概30人民币。这还只是餐品本身的价格，配送费是另外算的，当然，也有店搞活动会把配送费给免掉。

对「外卖员」的称呼也有不同。美团饿了么都称「骑手」，我们口语里一般也是会叫「外卖小哥」，语境下从事该职业的人相对比较年轻，且交通工具基本都是电动车和/或摩托车；但Grab的称呼是「司机」，从真人头像来看人也很显老，大约50多岁，且交通工具注明了是自行车。

再放一点数据。我给妹子点了一份凉皮、肉夹馍和奶茶套餐，价格20.15新币，普通时效（1km；25分钟）的服务费3.19新币，平台首单优惠10新币，我实际支出13.34新币，合人民币70出头。

服务费里，App明确给出了抽成是0.4新币，司机拿到了2.4新币，另外支付宝支付还有0.39新币的手续费。下单时，也可选择时效性不同的三个等级的服务，最快是十几分钟送到，最慢是45分钟送到，价格和默认选择的普通时效比分别差了1新币多点。

也就是说，这位骑着自行车的中老年「骑手」，在妹子这一单上花费了大约30分钟的时间，付出了骑行1km、电梯到十几楼强度的劳动，获得了相当于「食阁」半顿饭的收入，以国内购买力类比，大约10人民币。餐品的包装上，基本也是和国内类似的普通塑料袋，甚至都不是无纺布的手提包。

记录一下异国点外卖的这件事情。</content:encoded></item><item><title>威海是咸的</title><link>https://blog.wolfyzhang.com/weihai-is-salty/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/weihai-is-salty/</guid><pubDate>Wed, 26 Jun 2024 23:29:21 GMT</pubDate><content:encoded>对我这么一个还没见过海的人来说，盛夏大太阳暴晒了一整天的海水，到下午还是凉的，冰脚，这是极出乎意料的。河水，湖水，都不像海水这么多。

![star](images/star.jpeg)

沙滩上有孩子在堆沙堡，但我已经过了玩这个的年纪，我该玩点我应该玩的东西。恰好有个裂了缝的铁锨，巧了。我从水里淘到一只死了的海星，我把它铲在铁锨上拍照片，远处有个女人，我本意是想把她拍出画外的，奈何没有成功。可出图来看效果，有这个女人又恰是这图的妙处了。

威海的海岸线不长，稍凸出，像是皮肤上起了个脓包。这脓包被蓝色的天际线包裹住就显得可爱了起来。蓝色透过礁石，蓝色透过滨海大道，蓝色透过淅沥了一路的滨海公园，又和挟着韩国文字的充盈着水汽的风一起，在这座城的每个老小区和新别墅的房顶上都打了一个大大的喷嚏。小城市勉强受得住，再大一点，人再多一点，这蓝色的喷嚏就要被鼎沸的人声给顶远吓跑。

![house](images/house.jpeg)

旅游城市是把对游客的稀罕写在了脑门上的，可惜我脑门上没法写我对什么最稀罕，很惭愧，就只能带着妹子为当地经济发展做一点微小的工作，找酒店楼下大哥租个当地特色电动车，不辜负市政部门沿海岸线专门划出来的电动车专用道。大哥几个人露天盯店，摆张桌子几个人打牌听歌玩手机，树荫下说热也凉快，说凉快也热。

刚到的那天，依了我的意见，和妹子找了一家开在路边在门外就有饭店味儿的饭店。我到威海第一餐就吃海鲜，但奇怪的是并没有各种鱼，反倒是有各种贝类和软体动物，还有蚕蛹。点个炒蛭子，问辣不辣，老板娘说我们海鲜就是鲜味，清炒，新鲜的不加那些辣椒什么乱七八糟的东西。上桌之后我惊呼鲅鱼饺子的个是真大，加了点香菜的味道是真鲜。

吃就不能只吃一顿，也不能只吃一样。威海和大连隔一条渤海湾，山东人天生和东北关系近，哪怕我这个鲁西腹地长大的人也如此。我说找环境一般人气旺盛的本地夫妻店来吃，妹子又带我去了一家红底白字招牌的——旁边就是韩式餐点，老板娘东北口音，点完俩菜妹子说够不够要不要加，大姐爽利得很，菜量大，两个人够，来点完给姐就行。

大学生最能体现一条街的生命力，而如果这条街再是美食街，尤其是夜市，恐怕这个生命力就得叫革命气势了！有烤生蚝，还有烤鸡腿；有炒面，还有锅包肉！</content:encoded></item><item><title>落定</title><link>https://blog.wolfyzhang.com/settle-down/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/settle-down/</guid><pubDate>Fri, 21 Jun 2024 03:57:49 GMT</pubDate></item><item><title>连锁店的标准化</title><link>https://blog.wolfyzhang.com/standardization-of-chain-stores/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/standardization-of-chain-stores/</guid><pubDate>Thu, 04 Apr 2024 19:58:48 GMT</pubDate><content:encoded>今天晚饭和妹子吃美团鼎城楼下的喜家德，凑巧店员在聊天。

一个东北大姐说，「我二次入职喜家德的时候，都没考试，我直接定的级，反正这活也会干，那时候进后厨全凭自学，从理论到实践」，旁边有年轻小伙问说考试这事，大家都大差不差，反正活都是那个干法。

大姐有点不乐意，说人家考试的时候，就一个土豆丝，切丝洗净之后要控水五到八秒，人家考官就卡你，你不到时间人就不给你过。干嘛这样啊？因为你一份土豆丝里酱料都是一定的，水多了味就淡了，人家要的就是你这个标准。人家研发部的成天别的事也不干，人家就研究你这个菜怎么保证口感。

「啥叫考试啊，大家都差不多的干法，卡的可不就是你这些小地方。」

想起来之前剪头发，去连锁店藤野，和洗头小哥聊天。我故意没话找话说你们藤野干得挺大的，这么多连锁店，老板不一般，小哥笑笑，说他们都是产学一条龙，藤野都自己办学校，学出来就给安排工作，定职级，不一样的人剪不一样的价钱。

之前还有一次，我和妹子说要去剪头发，妹子说她在西安办了卡，也是连锁店，叫永琪。她电话打过去，店家说会员卡跨省不能用——所以这又是为什么呢？</content:encoded></item><item><title>狗这动物</title><link>https://blog.wolfyzhang.com/the-dog/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/the-dog/</guid><pubDate>Sun, 31 Mar 2024 21:36:09 GMT</pubDate><content:encoded>我家养过不少狗，有狼青这样有名有姓有品种的，也有无名无姓找不到爹妈只能叫土狗来一以概之的。我也见过不少死狗，省道上被过路卡车碾爆胸腔腹腔内脏流了一地的，被喝醉了酒的主人一斧子砍掉狗头下锅煮了吃的。

华北平原，人多了去了，狗也多了去了。

难说对狗来说什么才叫善终，毕竟始都不怎么清楚：没准哪家油光水滑的德牧跟着主人到另一家借个钱喝个酒，顺便就把那家拴在茅厕旁的小母狗给配了。过几个月下一窝狗，又养不了那么多，就得送，哪天又来个借铁锨的，顺手拿个喝空了的白酒箱子，就算最后送这狗的嫁妆，缘就到此，剩下的，就看狗的造化了。

我家最近两只狗——实际上是三只——就是这么来的。一个村，几百口人，多说上千口，谁待见狗，喜欢喂，住这么多年了大家都清楚，我爸是其中一个。喜欢狗也分不一样的流派，有的年轻人稀罕藏獒马犬，越高大越凶猛越好，有气势！把地里种了小半年的粮食一卖，花个几千块钱买一只也心甘，图的是个开心，土狗看不上眼。我爸喜欢狗但不花大钱，这么多年养这么多狗，抱来送去，也不讲究品种，有一只就算一只。

去年冬天，两只狗，一公一母，一胎下来的。那时候冷，狗又小，放外面养不活，就把两只狗丢一个桶里放桌子下面让它们偎着睡，狗可不像人类婴儿那个样子，才出生几天，就会互相骑在对方身上啃狗头，用爪子掏对方狗脸；平时也不叫唤，要么饿了要吃，要么吃多了要拉，这才会叫几声，不然窸窸窣窣两只狗你蹭蹭我我蹭蹭你除了睡就是闹。没狗奶喝，吃的是馒头泡水，但不妨碍狗长大。稍微大点，冬天的话出个满月，夏天的话稍微能站，就把它们坚决撒院子里，不能让狗和人在同一个屋檐下待太久，再聪明的狗也不行，这是原则问题。

我也邪门，狗这东西是怎么在那么冷的冬天活下来的？那么小一点东西，自己找个破布破被子什么的垫着的角落，一蜷，狗脖子垫在狗腿上，狗下巴放狗屁股上，外面零下十几度的温度，文艺点叫寒风怒号，大老粗一点叫邪风刮得铁皮房顶咣咣响，它就能活！一天吃那么一点凉水泡馒头，运气好有点剩菜汤吃点滋味，毛茸茸的一团东西，摸起来还热乎乎的。我喜欢用两只手的虎口卡住狗的两只前爪，把它举起来，对着太阳，吹着冷风，感受那来自心脏搏动的温度，感受自然的生命的张力。</content:encoded></item><item><title>农民工</title><link>https://blog.wolfyzhang.com/migrant-worker/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/migrant-worker/</guid><pubDate>Sun, 31 Mar 2024 20:48:52 GMT</pubDate><content:encoded>我爸做建筑活，我是农村长大的。

冬天冷，水结冰，水泥洋灰沙子什么的没法拌水，活就没法干。到这时候，几个同村的人，拉帮结派就出去打工，一干一个冬天。

外面冬天也能继续干建筑活。

# 还以为他是想要我手里的瓶子

今天下午和妹子一起去公交站等公交，天气热就买两瓶水边喝边走。到地方，刚站定，一个人也走过来。

那人背一个蛇皮袋，里面的东西像是衣服被褥，手里还拎个袋子，看起来沉甸甸，他弯着腰。过来路上其实我们就碰到他，背个袋子边走边张望，身上也不是很干净，我第一反应还以为他是拾荒的。

他个子不高，眼窝深陷，头发不长，花白，穿着个条纹裤子掉档掉得厉害，像小丑，像是刚从沙尘暴里出来。

他盯着我看，直截了当向我走过来，我还以为他看中了我手里的瓶子，正犹疑的时候他出了声：「400路是在这里坐吧，到四惠咋走，长途汽车站，他们说在这坐400路」，伴随而来的还有一股并不好闻的味道。我颇有点措手不及，「我给你看看」，手机打开导航软件，是坐400路外，这站是400内。

「您这个站不对，您去那边」，我指指四环路对面的那个公交站，「那个站坐，这边反了，您从那个蓝色牌子那个天桥过去，那边那个站见400路上车就行」。他顺着我手指的方向望过去，眼神中仍有些张皇，「就那边那个，那边那个」，他似乎对我说的天桥并不很感兴趣。

稍微用点力，把蛇皮袋子甩到背上，他继续弯着腰，转身离开了。

没走出两步，公交站旁的辅路上呼啸而过好几辆奔驰大G。

# 他是不是要坐电梯

我对农民工有天然的一种亲切感，至少绝不排斥。

那人往远了走，我目送着他，他走出去二三十米又停下，把袋子放下，换了个肩膀重新背上。我听他的口音，感觉应该是中原豫皖周边的人，他的行为举止在北京这样一座城市里仿佛很不协调，甚至不伦不类。他眼神里充满了对钢筋水泥森林的不适应，车辆呼啸而过的巨大噪音仿佛也是在向他示威，我猜他可能都不识字，路牌对他来说也没有任何意义——除了向他宣示他并不属于这里。

他到我指给他的天桥入口台阶时，居然没停下，我说他是不是走错了去前面几百米远的那个高架路口去了，又一想不对，他可能是去坐电梯了。

但都不是。他径直走到天桥下的辅路路口处，左右张望一下，扎进了北四环的钢铁洪流中。

这个时候我们的车到了，我说我们等等他，看着他过去，等下一班再坐吧。

再看他，他走几步，停下，没车了再走，但这是北四环，他停在路中间的虚线上好几次。

横跨北四环，他走了五六分钟。

我们想目送他，但根本做不到，来往车匆匆，他像叶子里漏出来的一点光，得捉着看。

当然最终他还是走到对面了，而且还提前我们上了车。

# 后记

这之前和以后，我应该都少不了再在公交、地铁上遇到他们。

我想说什么呢？我又能说什么呢？</content:encoded></item><item><title>研究一下调试器</title><link>https://blog.wolfyzhang.com/the-principle-and-features-differences-of-WinDbg-GDB-and-LLDB-debugging/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/the-principle-and-features-differences-of-WinDbg-GDB-and-LLDB-debugging/</guid><pubDate>Thu, 08 Feb 2024 00:22:24 GMT</pubDate><content:encoded># 1. 三大 Debugger

## 1.1 Linux 下的 GDB

### 1.1.1 原理

GDB（GNU Debugger）是在Unix-like OS上使用的开源debugger，支持多种编程语言，如C、C++和Fortran。其原理是通过Unix-like OS 上的 `ptrace` 系统调用来控制另一个进程的执行、获取和改变其内存中的内容以及其寄存器的状态。

伪代码用于说明GDB的工作原理：

```c
int main(int argc, char **argv) {
    Debugger gdb = initialize_debugger();
    Program program = load_program(argv[1]);

    set_breakpoint(program, line_number);

    while (execute_next_instruction(program)) {
        if (current_instruction(program) == breakpoint) {
            pause_execution(program);

            print_debug_info(program);

            switch (wait_for_user_input()) {
                case CONTINUE: continue_execution(program); break;
                case STEP: step_into(program); break;
                case QUIT: exit(0); break;
                default: handle_other_commands(); break;
            }
        }
    }

    return 0;
}
```

`ptrace` 是 POSIX 兼容的一个系统调用，涉及两个进程：一个是控制进程（GDB），另一个是被控制进程（被调试的程序），可以使得一个进程去观察和控制另一个进程的执行，并能改变其寄存器和内存值。`ptrace` 直接提供了很多请求代码，像是以下操作可以直接返回结果：

- 启动、停止子进程的执行
  
- 读写子进程的内存
  
- 读写子进程的寄存器
  
- 单步执行
  
- 信号处理

给出一个 `ptrace` 使用示例的伪代码：

```c
pid_t child = fork();
if (child == 0) {
    // 子进程: 被调试的进程
    ptrace(PTRACE_TRACEME, 0, NULL, NULL);
    execvp(program, program_args); // 启动目标程序
} else {
    // 父进程: GDB进程
    int status;
    wait(&amp;status); // 等待子进程停止
    ptrace(PTRACE_SETOPTIONS, child, NULL, PTRACE_O_EXITKILL);
    while (WIFSTOPPED(status)) {
        struct user_regs_struct regs;
        ptrace(PTRACE_GETREGS, child, NULL, &amp;regs); // 读取寄存器
        // 分析或修改寄存器
        ptrace(PTRACE_SETREGS, child, NULL, &amp;regs); // 设置寄存器
        ptrace(PTRACE_SINGLESTEP, child, NULL, NULL); // 单步执行
        wait(&amp;status); // 等待子进程下次停止
    }
}
```

不同的操作系统也都提供了类似 `ptrace` 的机制来允许进程之间的调试或者控制：

- [Windows 提供了调试API](https://learn.microsoft.com/en-us/windows/win32/api/debugapi/)，其中比如包括函数`DebugActiveProcess` 来附加到一个进程，以及 `WaitForDebugEvent` 和 `ContinueDebugEvent` 来处理调试事件。

- [macOS（BSD系）也提供了 `ptrace`](https://opensource.apple.com/source/xnu/xnu-344.32/bsd/sys/ptrace.h.auto.html)。

### 1.1.2 使用方式

GDB一般在命令行里使用，可以启动GDB附加到一个正在运行的进程，或者加载一个程序的core dump文件。

## 1.2 最强大的（之一）WinDbg

### 1.2.1 原理

WinDbg是微软提供的一个Windows平台的debugger，用于调试Windows内核、驱动程序以及其他程序。[WinDbg使用Windows的调试引擎（dbgeng.dll）作为核心](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools#debugging-environments)，可通过各种协议（如USB、1394、网络等）与目标系统进行通信。WinDbg能够处理复杂的调试任务，包括内存泄漏检测、性能问题分析、代码执行跟踪等。

WinDbg 有着其他调试器很少具备的系统级调试能力，查阅文档发现，是通过与 Windows 操作系统内核的深度集成实现的。

- [内核模式和用户模式](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/getting-started-with-windbg--kernel-mode-)：可在内核模式下运行，可以直接与操作系统内核交互，提供对驱动程序和硬件级别事件的调试能力。

- [符号服务器](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/symbols)：用微软的符号服务器来获取系统和应用程序的符号信息，而在 Linux 下一般需要编译器编译时指定`-g`选项来产生本地的符号信息。微软的做法更方便，但也受其限制。

- [内核调试器协议](https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/remote-debugging-using-windbg)：用专门的协议与目标系统通信，支持调试器在不同的机器上运行，从而调试另一台机器上的系统。

### 1.2.2 使用方式

WinDbg提供了GUI和命令行，语法与GDB不同，但功能相似，还提供了脚本功能，以及与Windows深度集成的特性，如分析kernel mode和dump文件。

## 1.3 跨平台、没用过的 LLDB

### 1.3.1 原理

[LLDB](https://lldb.llvm.org/use/tutorial.html)是一个模块化的debugger，支持C、C++以及其他语言，并且跨平台。LLDB使用LLVM的一些组件作为其后端，比如JIT编译的代码调试等。LLDB的原理同样基于控制和检查进程的执行，但它基于LLVM。

- 用 LLVM 的代码生成工具来优化调试信息的生成和使用。
- 提供了脚本接口，尤其是 Python，可编写脚本来扩展调试器。

### 1.3.2 使用方式

LLDB与GDB相似，但有自己的一套扩展。LLDB还可以集成到IDE中，如Xcode或Visual Studio Code，提供GUI调试的功能。

# 2. Summary

- 都是debugger，基本原理都是通过控制程序的执行，来提供查看和修改内存、寄存器等能力。

- GDB和LLDB是传统的调试模式，而WinDbg提供了更加深入的系统级调试。

- LLDB使用了LLVM的现代架构，在某些方面比GDB有更好一些的性能和现代的特性。</content:encoded></item><item><title>2023年度总结</title><link>https://blog.wolfyzhang.com/2023-annual-summary/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/2023-annual-summary/</guid><pubDate>Sun, 14 Jan 2024 02:05:57 GMT</pubDate></item><item><title>老兽医</title><link>https://blog.wolfyzhang.com/old-veterinarian/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/old-veterinarian/</guid><pubDate>Sat, 09 Dec 2023 01:49:33 GMT</pubDate><content:encoded>我第一次见老兽医还是在小学时候，他是个鳏夫，老伴早就死了，有个闺女。

以前村里还养猪养羊，也有养牛的，少一点。猪羊牲畜除了吃草也吃五谷杂粮，跟人一样也会得病；人得了病拿着绿色的小新农合本，去医院，去卫生所，有医生给瞧病，拿点药，严重一点的打打针，再要不然就挂吊瓶，可牲畜得了病可没地方专门给看——别说没有，就是有那时候也没钱给牲畜看。

这就得叫老兽医。

老兽医黑，瘦，平时戴个绛蓝色的鸭舌帽，显高。他除了下村走街串巷给牲畜看病，平时也不出门，都看不见他。他头些年骑着个大轱辘的电动车，药水码黑色皮包里，挂车把上，针筒放后座的小塑料盒里头，最前面车筐里面再塞点给牲畜口服的药片。车不大，滴里当啷东西不少。一来，他就喊门，说是给小狗打针的来了——实际上他给猪看病也这么喊。

我记事那时候，家里猪病了，母猪下的小猪不吃食，一天不吃，两天不吃，三天不吃就得找老兽医来了，那还没电话，得到他家喊他去。他凑巧还不在家，出门给牲畜看病。他家就一间屋，大门都没有，院子用柴火的栅栏围起来。屋里很黑，没几件家具，半面墙和半个屋顶都被柴火灶冒的烟熏黑了。

白天大人都干活，得等晚上人才有空给猪看病。一开始先开点药，使蒜臼子捣捣，把药末混猪食里让猪吃，有时候管用，有时候不管用。要吃上两三天不管用，还得打针。老兽医把他那个黄色的塑料针管隔热水里烫烫，插上针头，抽点药水，就往猪脖子上的软和肉上打。晚上黑，就拿手电筒照着打。猪本来皮就泛白，手电筒一照就更白了，反光，晃眼。小猪扭来扭去的，眼睛还咕噜咕噜转，边挣扎边叫，小猪一叫老母猪也呼哧呼哧喘粗气，站起来，在猪圈里头一圈一圈走。

要打针还不好，一天不好，两天不好，三天不好也就不再看了。

我高中那时候基本家里就不养猪养羊了，牛更不养，人都出去打工去了，没空伺候这些牲畜，有的人觉得剩饭倒了怪可惜的，就喂只狗，要不然就在院子里跑几只鸡，运气好还能拾几个鸡蛋吃，不过鸡喜欢弄得满院子都是鸡粪，有的人家爱干净就不养鸡。我家那时候有条狗。

狗也病。那年冬天我从学校回来，一进门，狗不叫唤了，趴一堆树叶上不出声。我放下东西走近它看看，还睁着眼。晚上母亲回来我问她狗怎么了，她说狗病了，打电话叫老兽医来，老兽医说冬天有瘟，小狗烂嗓子，吃啥都疼，光能喝点水。我母亲煮了稠稠的面汤，放凉了，喂给狗，狗长那么大可能还没吃过那么好的饭，但它也不肯吃。母亲说还得给它看，她打听到说哪个哪个村有卖这个药的，专治小狗烂嗓子，一顿就好，她给狗买去。

“要不管用呢？”
“那也给它看了，不管用也没法，那你啥办法，看也给它看了。”

等我下回再回家，狗就没有了，说是还有一口气的时候给老兽医了。

我想起来我小时候，有次和俩大人坐在村南头乘凉。村南头是一片玉米地，玉米地前面是条路，路很长，在村头坐着能从视线这头走到那头。我挖土玩，俩大人闲聊天。那时候玉米刚长起来，还不到人膝盖高，远远地，就看到一辆电动车从视线这头开始慢慢走，往那头去。

一个大人说，“那是给猪看病的那个老头吧？”
另一个大人说，“是，那不车把上挂着他的皮包哩。”

“他媳妇死了多少年了，没再找吧，一个人，过着也怪没意思的。”
“没听说找，也是，一个人，回去黑着灯，连个做饭的都没有，怪没意思的。”

那时候我还不懂，不过，现在的我知道，那老兽医和动物打交道这么多年，一定感受到了动物身上那种旺盛的、不可遏制的生命力。那是一种像是野草一样，会发了疯地生长、蔓延、自我修复的生存状态，是有口吃的就能活的面向生活的希望。

暑假里回家，听说老头找了个老伴，他给那老太太的猫看病认识的。</content:encoded></item><item><title>下火车</title><link>https://blog.wolfyzhang.com/take-off-the-train/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/take-off-the-train/</guid><pubDate>Sun, 02 Jul 2023 01:58:36 GMT</pubDate><content:encoded>&lt;!-- abstract: 一次特殊的写作手法的尝试。略丰富些的内容我现在一写起来就大几千字，为了克服重度拖延症，我决定在这篇文章上探索一下“连载式”的滚动更新写作手法。想起来了就立刻写些字。 --&gt;

就这家店了。

现在时间还早，五点多不到六点，去哪里吃早点？和朋友俩人火车上哐当哐当一夜跑了两百多公里，从大明湖到衡水湖，肚儿早就晃荡空空。

![station](station.png)

难说衡水的早晨和济南的有什么额外的不同。出了站，大街上三溜达两转悠，悠悠然之间，世纪初的玉绿色墙面玻璃，不很大的站前广场，探头招徕客人的出租车司机，全都像是从济南和我们一起打包好乘绿皮火车穿越过来的一样。不远处停着几辆卖煎饼果子鸡蛋灌饼的小车，旁边阿姨扭过头看我们，但我不想在车站附近吃东西，也就把这唯一明显的不同给错开了。

车站走出去两条街，一家开着的店都没有，大早晨的。

上次这样觅食，还是在小学跟着出车的时候。在路上一直跑到天渐亮，泛红，就能看到路边早餐店开始竖起来大蒸笼或者大汤锅，但是都还没上火出汽。停下车，问老板有饼有汤没有，都说太早了还没上锅，大早晨的。

这会儿也找个路边小早餐店吃一口算了，大早晨的。

# 第一节 哈，是吗，添汤说话啊

我是标准的农村娃，不是城市孩子，频繁下馆子吃饭那是读大学以后的事。不过，小时候经常和亲戚出车，我也就吃过不少十几块解决温饱问题的路边店。

以我22年的人生经历来看，店大体分两种，一种是我读大学以后经常出入的城市化元素浓厚的以连锁餐厅为代表的现代饭店；另一种则是充满店主个人特色因此上下限均极高的市井小街深处的苍蝇馆子——我口中的这种路边小早餐店就是后者的一个小分支。

跑车拉货的司机出门在外，不一定吃好，但有限的价钱里一定要吃得身暖肚饱。国道省道乡道，大车小辆，365个24小时，每分每秒都有要草草填饱肚子继续赶路的司机：或许还包括他们的老婆孩子。司机跑的是一个江湖路远，今天吃饭的地方可能此生不再见，也有可能间隔几小时再过路打尖，总之是一个捉摸不定的缘聚缘散，熟客新客没什么特别的不一样。

十几块还要身暖肚饱，饼子和热汤就成了性价比最高的东西，一个顶饿，一个暖身。饼不像包子馒头，一般都是死面直接上火烙或者过油煎，少了那些空空洞洞自然瓷实有货。火烧和油饼是最常见的，也是最费口牙的，不好咬，也不好嚼，略微年长一些的司机都得泡汤吃。热汤不比饼，花样多多。一锅羊骨头加上水，咕嘟着几个小时，来客了就盛出一碗，加上一两羊肉或者羊杂，再撒点香菜末，就是所谓羊汤。汤是原味，盐糖味精胡椒粉这类的调味料每张桌子上都有，食客自己按口来加。羊肉换成牛肉，再添点粉丝豆皮，就是牛肉汤。有的还有现沏的胡辣汤、鸡蛋汤，总之是那点热水比货多，货是拿来借个味的。

有的店没支大锅熬汤，只有点寡淡的稀粥，最有味道的也就是鸡蛋汤。这种的，老板往往就会在饼上下点功夫，把烙好的饼切丝再加点胡萝卜丝或者土豆丝下锅炒几下，叫焖饼，有的还给放几片菜叶。焖饼之余还有烩饼，大差不差，熟饼再下锅打个转没汤也好下肚。还有的店干脆把饼汤归一起，给你来一大碗刀削面或者拉面，煮好的面上浇上一勺高汤，不够汤能再续。包子油条豆腐脑反倒是少数了。

司机停车放水，坐店里一顿狼吞虎塞，东西顶到嗓子眼了就停，点上支烟，抬头喊声“算账”，眼睛看来转去，心情好了和旁边人搭几句话——“兄弟哪儿的”，“往哪儿去”，“前面哪儿哪儿路糙（指治安不好）不好走”，或者干脆一边呼噜呼噜喝着面一边和声骂几句，“老娘的！前两天从这儿过，壕里又翻辆大车！这破几把路啥时候修修，罚款呢？”

车跑，但一间或伶仃寂寞或大隐隐于市的门面房却跑得了和尚跑不了庙。

![restaurant](restaurant.jpg)

就这家店了。和朋友进去，大叔正啪啪摔面，大块面团在不锈钢案板上揉过来甩过去。

“老板，这会儿有饼有汤吗？”

“有，都有。你看你吃什么。”

“来一个全羊杂，饼的话……”

“饼我给你免费，喝汤一个烧饼免费。”

“那我们两个就俩全羊杂，再来一瓶饮料。”

“诶好，饮料那边，喝什么自己拿。”

我和朋友坐下，大叔过来给我们送俩杯子，问热吗热的话开风扇，我说没事不热，他就回头继续摔面。除去多出来的偶尔的油煎噼啪声，钢铁案板和富有弹性的面团碰撞出的啪啪声响彻依然。

在车上哐当了一夜，我这会儿又渴又无力，倒了杯饮料仰脖子喉结动两动喝下去以后才有精力环顾四周，打量这家心血来潮选定的小店。

这家店是前面两种的融合。

没有特别的装潢，但桌椅板凳也不凑合，餐具码放整齐，空调没开却有不止一台的风扇。最重要的，桌子上居然贴有桌签，这在我之前的经历中从未见过。

不过，另一方面，桌上的四合一调料盒，没有消毒柜统一分装却散放在桌上的一次性竹筷子，以及桌角零落的剥好的大蒜，还有最重要的，那种大汤锅在早晨散发出来的特有的雾气和味道，都向我诉说着这就是我从小吃到大的那种路边小店。

正犹疑间，我又是一杯饮料进肚，恰好大叔的汤也送到了，还有我和朋友的俩烧饼。

“慢用啊，小心烫，添汤说话啊，汤不够”，说着，穿一身灰黑色衣服、头发略微显白的大叔回过身去拿了什么，又立刻回来，“香菜。”

在我们桌上放了一整碗的香菜。

![soup](soup.jpg)

“我这汤是原味，纯天然熬出来的，你们吃什么口，盐调料自己放啊，味精孜然胡椒，还有香菜。”

我抬头看向大叔，笑说，“嗯好的好的，大叔我也是从小跟家人出车在外面，我也是吃这个长大的，看着这些我也都很熟悉，很亲切。”

“哈，是吗！”大叔面露笑容，“放点韭菜花，这个韭菜花也是内蒙的韭菜花。”

…………

临离开，我过去结帐，大叔正坐在店门口剥蒜，一粒一粒地。

出了门，店门口多立了张小黑板，上书，“8点前喝羊汤赠烧饼”。

# 第二节 俩孩子过去餐车充电了

昨天晚上十点多，我和朋友俩人正在学校操场上瞎溜达。临近毕业，各种离别伤感的情绪涌过来，加之我的特殊经历，我被氛围裹挟着，很上头。

黑暗中，旁人步履匆匆，跑意正浓，我却没什么精神，和朋友说，“现在我就觉得，怎么着都不好，心里空落落的，没个着力的地方，不知道要做什么，要去哪儿，未来会怎么样。加之有些东西有些人毕了业大概这辈子不会再见到，就更惘然。”

沉默中，低头走了半圈，朋友道，“要不然出去走走，在这儿呆着确实氛围挺伤感的。”

我心想干脆今晚就出去，“今晚不回宿舍了？看看现在还有票吗，找一班时间合适的火车，今晚出去转转，明天白天再坐车回来。”

朋友说，“行，我看看。”

“那先回宿舍手机什么的充点电，再拿个身份证就出发！”

朋友说，“上了车就把该想的都想想，下了车就全都丢了。”

晚上没有高铁，也走不远，普速车最近几班发车的基本都在十二点前后，看了看最近几班火车，最后敲定去衡水，五点多钟到站，之后在那儿吃个早餐再转转，八点有回程的高铁。事出匆忙，来得急走得也急，为赶上在楼管大爷门禁之前出宿舍楼，我手机的电其实也没怎么认真充，象征性地插了一会儿就走人了。带上充电器耳机还有必要的证件，叫了辆滴滴就直奔大明湖站。

“师傅，我能不能提个请求，咱别在大明湖北门过去。”

“怎么了，伤心之地啊？失恋了？”

“差不多，咱就尽量别去那儿走，要实在不方便那去那儿也行，不给你出难题。”

路上没什么人，当时不算深夜但也近十二点，灯明星烁，我坐副驾上看着车外的济南城，颇有点像是一百多年前那个在风雨交加的夜晚驾着马车和去世十多年的恋人、岳父一起拉着复仇对象去犯罪地点的杰弗逊·侯波（Jefferson Hope）。那晚过后，侯波通过复仇完成了自我救赎，而我和侯波不同，我是在寻找与自我和解的方式。

氛围有点低沉，车走到经十路，我没话找话和司机说：

“师傅都这么晚了您还出车，也不容易啊。”

司机像是吃了菠菜，突然亢奋起来，话匣子打开了：

“容易？谁容易啊？生存就不易。你就像马云，那不也是谈项目几天几夜不睡觉，他容易吗；那海里的鲸鱼，它容易吗，谁有它大，那不也是让那藤壶长的它满身都是。你就像你们，你们就算有几个亿，那不都这个点了也还在外面奔波吗，容易？哪儿容易了。活着，生存，就都不容易。”

“也是，都不容易。”

“师傅您不是济南本地人吧，听口音。”

司机没搭我的话茬，反问我，“你是济南本地人吧？”

“我不是，我聊城的。”

“那你可没少在济南待啊，说话啊感觉啊什么的，都跟济南人一样，在这儿上学了？”

没等我回答，他接着说：

“我孩子调来济南工作几年，我也跟着来了，跑跑出租。济南这城市啊，真好啊，你看这路，这规划，这大城市，多好啊。”

车下高架，身旁的大明湖北门一晃就过，我刻意不去朝路的两侧去看。司机油门一踩一松，路东头的大明湖站就该减速进站了。

进站发现上次进京赶考坐的D762还没发车，凌晨十二点才过几分，候车大厅里逡巡一番，啃了个鸡腿也就车到站人上车了。

![train](train.jpg)

上车后倒没心思再去惆怅了。车厢里人走人流，找到我们的位置坐下，对面是个正在用报纸蒙头睡觉的大叔，头朝窗，腿蜷着，半个脚悬在过道上。开车前，我们在前后两个车厢里略微走了走，众生百态。一部分人倚头大睡，一部分人刷手机消磨时间，还有抱着surface在加班做表的，人就像他们的穿着一样各不相同。

待到发车，坐定，我开始找周围的电源给没电的手机充电，却惊然发现该车居然没配备电源？！我用仅有的一点电量去查我所在车次车型的电源信息，最后发现只有乘务员休息室和餐车配备了电源，且整个餐车车厢只有一个。

要命。

![liaocheng](liaocheng.jpg)

![cloud-dark](cloud-dark.jpg)

![cloud](cloud.jpg)

# 第三节 十二个小时，又回到济南

![rail](rail.jpg)

![door](door.jpg)

![people](people.jpg)</content:encoded></item><item><title>机场附近听塔台</title><link>https://blog.wolfyzhang.com/go-to-the-airport-tower-to-listen-to-the-control-dialogue/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/go-to-the-airport-tower-to-listen-to-the-control-dialogue/</guid><pubDate>Mon, 03 Apr 2023 01:58:51 GMT</pubDate><content:encoded>我软件无线电的科技树大概是过年的时候点上的，还记得拿快递回来的那天晚上是在亲戚家吃的晚餐，羊肉煮得很不好吃......但大冬天的拍黄瓜很清爽！SDR接收器拿到手其实也没干别的，只和朋友带着设备爬到山上去听了几次广播，天线拉得长长的，有几次还直接把天线搭到了路灯杆上，最后接收效果也还算不错。

那次，听着朝鲜之声，我们头顶上就过去了一架飞机，我开玩笑说我们现在应该能收到ADS-B信号了，接着在朋友的提议下，我们就干脆试着收了收附近机场的塔台信号，不过因为距离太远还有大半个城市的干扰，当然啥都听不着......

也是因为这个引子，31号晚上我心血来潮，和朋友打了声招呼，我们就约了「明天去机场听听塔台」！

我原定计划是我九点钟能起来，十点钟出发，但奈何计划赶不上变化，当晚我发现SDR盒子居然跑不起来了，简直尴尬死，我就又连夜debug，最后从内核日志里找到一点端倪，把驱动的冲突问题搞定了以后机子才能跑，当时快四点钟，广播里还在放音乐，那音乐可真好听。上次这么熬大夜debug貌似还是给前女友写脚本来着......

![debug](images/6401.jpeg)
![debug(1)](images/6402.jpeg)

给朋友发了个消息让他十点钟来宿舍叫我，我就睡下了。一觉醒来，十点十五，他就在我眼前......接下来的事情按下不表，总之我们到了机场。

笔记本预期能用至少一个小时，结果电池老化太严重（毕竟是近十年前的老设备），SDR上位机又很吃古老的标压低能效比CPU，电池坚持了十分钟直接暴毙......当时才刚调到机场的天气广播频率上，电子音还没听几句，差点就坐车三小时单联十分钟了。

![computer](images/6403.jpeg)

赶紧去充电！发现提前在网上找好的餐厅里的插座确实还在，但是前面被放上了一个招财蛙刚好遮住......而且，最奇葩的是，周边的所有公开插座居然都还没电，这不仅是太过分了，简直是太过分了。至于充电桩，啥充电宝能给我这十年前的老ThinkPad充电？两孔插座又能轮得到我用？幸好幸好，未雨绸缪，我提前还带上了旧手机来作备用上位机。话说回来，该说不说，ARM v8的骁龙处理器在能效比上可真是比x86的Ivy Bridge老古董强太多太多了，一直亮屏跑着SDR还坚持了近三个小时。

![phone](images/6404.jpeg)

也就这样，我们一边耳机里听着塔台调度员和飞行员的对话，一边眼睛看着机场的相关图表，一边手拿笔写写画画，最后基本上追踪了一个小时里所有的起降班次，脑补建模了当时机场周边的空域情况。下午三四点钟的阳光透过机场大厅的玻璃直射在我身体上，算不了多和煦，但把我手中的图表照射得那么耀眼。

过程中，我注意到机场管制员用语的一个特点：完全没有当地惯用语中「稍微一等」这个短语，取而代之的是「稍等两到三分钟」甚至是「稍等三十秒」这种特别确切的语言。

最后，在一班兰州飞济南的航班落地后，我们决定转移阵地，到外面去看大飞机！但是捏，新人第一次毕竟没有经验，很容易搞出点奇怪的问题......转了一大圈只在机场外围一个鸟不拉屎的停车场看到了俩正在上客的飞机屁股和三架已经起飞正爬升的窄体客机，我的昂头的大飞机呢？惨。

最后还有个大大的悲报！我录了一个多小时的屏，结果回来后发现全**没音轨......好吧以后有机会再去再录吧。下次的话，笔记本铁定不带了（除非我暴富买台M1 Mac那种的超强能效比机器），手机限于算力上位机软件支持的功能还不太多，还得便携，所以这怎么办？我一开始考虑着去淘一台航空波段的收音机，但市面上的看了看，要么我这个穷鬼买不起要么支持的功能特别孱弱，这可怎么办捏，可编程的硬件玩习惯了再去用单一功能的设备可太非人哉了。想到最后，我决定看能不能用个性能好点的能跑Linux的单片机，也不用第三方GUI上位机了，直接SSH过去通过API操作SDR，用个充电宝供电就行了。这样虽然没了瀑布图，但自定义能力可强太多了。如果非要个方便点的界面的话，有屏幕就最好，还能捣鼓个类似孔雀石的固件，没屏幕就纯命令行，大不了跑个Web服务推到浏览器前端去。当然这都是后话了。

我手头的设备，有个树莓派4B，有个全志D1，有个Zynq7010，还有一堆ESP32，东西不少，但特别适合做这个活的貌似还真没有，我要么找个合适的方式把树莓派的5V3A供电问题解决了，要么交叉编译一套RISC-V的SDR工具链出来，都不太好办......

这篇文章写到这儿该要结束了，这也是我本人十分讨厌的一种文体，全篇都在流水账，完全谈不上什么事件驱动的逻辑和动机，全然是一种根据时间推动的泛泛而谈。至于排版，这次没有排版。

情侣一起出行的可真多啊，真好。</content:encoded></item><item><title>酒后写作尝试：2022 总结</title><link>https://blog.wolfyzhang.com/an-attempt-to-write-after-drinking-my-2022-summary/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/an-attempt-to-write-after-drinking-my-2022-summary/</guid><pubDate>Wed, 25 Jan 2023 19:15:11 GMT</pubDate></item><item><title>Recovery和Fastboot</title><link>https://blog.wolfyzhang.com/analysis-of-Android&apos;s-Recovery-and-Fastboot/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/analysis-of-Android&apos;s-Recovery-and-Fastboot/</guid><pubDate>Fri, 29 Jul 2022 23:19:58 GMT</pubDate><content:encoded>Recovery应该类似于PE系统，是一个简单但是完整的Linux，有文件系统和简单的UI，可单独引导。从硬盘分区上来看，Recovery也是和内核所在的分区隔离开的，除非用户主动进行一些修改的操作，否则内核分区没办法对Recovery分区造成影响，从而侧面达成了「当内核出问题时进Recovery进行修复」的目的。

Recovery本身功能并不复杂，但是架不住这么多技术狂热分子折腾，结果就形成了一方面twrp等第三方Recovery功能强大到飞起另一方面厂商原版Recovery功能极其简陋（甚至不包括Recovery设计之初的恢复系统内核的功能）。用Recovery进行系统修复时，显然我们只需要把镜像或者Google Update格式的升级包放在手机本地存储上然后让本身就是完整OS的Recovery去读取、写入即可，就完成了内核的修复或者更新等工作。

Fastboot本身应该不是一个完整的操作系统，我更倾向于它是一个工具，一种BootLoader的软件模式，作为BootLoader的一部分而存在，使得BootLoader可以和PC进行基于USB串口的数据通信。这也能够解释为什么Fastboot模式必须要用数据线和PC连接而不能像Recovery一样读取手机本地存储内容了。

另外一个角度，我觉得它和某些使用uboot作为BootLoader的开发板上的「连接下载器时短接xx引脚」是一样的东西。现在厂商们基本都给新产品加了BL锁，而解锁就相当于去掉Fastboot指令里的校验模块。

在网上看到另一种观点把Fastboot和BootLoader作为同一事物的不同名称，考虑到有平时口语不严谨的问题，我去Android官方文档上看了一下，找到了如下字句：「You can flash a device when it&apos;s in the `fastboot` bootloader mode. To enter `fastboot` mode when a device is undergoing a cold boot, use the key combinations given in the table below」，我试着翻译一下：你可以在设备处于`fastboot` bootLoader模式下进行刷写操作。当设备处于冷启动状态时，要进入`fastboot`模式，请使用下表中的组合键。所以我最终对Fastboot的理解还是「Android设备BootLoader的一种特殊模式」和「使得BootLoader可以和PC进行串口间通信的一种工具」。

BootLoader的功能就很稀松平常了，无非就是boot负责设备硬件初始化（CPU Clock和Register之类）,Loader负责系统（Recovery或Android）的引导。</content:encoded></item><item><title>几个人的几件小事</title><link>https://blog.wolfyzhang.com/a-few-people-a-few-small-things/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/a-few-people-a-few-small-things/</guid><pubDate>Thu, 28 Jul 2022 23:03:55 GMT</pubDate><content:encoded>这几个人的几件事都是我妈和我姥姥讲给我听的，我感觉有些意思，记下：

# 第一节

有一夫妇在村头开理发店，店面大概七八个平方，男人洗头女人剪发。一般剪头七元人民币；烫染价格不一，不过总体上在几十元这个量级上。房子是亲戚原来荒置的，简单装修了一下，谈不上什么风格。

二人有一孩，成绩不佳。

孩子在店里玩手机有些吵闹，男人骂了几句，孩子哇哇大哭，「你们骂我，你们不能骂我，你们骂我伤害我的自尊心」！

女人嫌聒噪，手上一边干活，一边又骂男人，「你骂他干什么让他哭，烦死人」！

男人还嘴：「我管他还有罪了？那我不管他」？

……

两人倒又吵了起来。

一般来说，在本地，男人如果有能力有资源就会做点生意，女人帮忙打理，往往收入不菲；如果男人没做生意的条件，那会出去做些力气活，一日有一两百元或者更多一些的收入，女人也去打工，一日百元上下；也有女人的事业有声有色男人帮忙打下手的，不过不多。如此，方能在几十年后攒下一些钱，为下一代升学也好结婚也罢的人生大事做好准备。

另外，本地基本没有新开的常青店铺——除非它已经常青，几乎都是铁打的楼盘流水的店，镇上商业街的蛋糕房、拉面馆是这样，村头的小理发店、小超市也是这样。

无数个这样的原子，构成了本地经济底色的一部分；无数个这样的本地经济，构成了……

# 第二节

另有一夫妇，两人各有特色。

丈夫身材不高，较胖，又喜欢剃个光头，整体外形很圆润。

农村如今耕地基本都是雇佣拖拉机进行作业，按亩收费。有一年邻家的地雇佣了同村人的拖拉机，拖拉机手赶进度连夜赶工，不慎把地块交界处的田垄破坏了。第二天丈夫发现后，找到正在施工的同村的拖拉机手，在地头喊那人，「你停下，过来，你来」。身材较高的拖拉机手走到距他三四步远时，他揪住拖拉机手的领子，扯低头，结结实实地打了那人几个耳光。旁边人见状拉开两人，两人争吵一番，没再动手。

另有一次，邻村的杀猪匠下村叫卖猪肉，丈夫买了三斤猪肉，回家一称实际只有两斤。他一手拿刀，另一手提肉，在门外喊住那杀猪匠，「你别走！你看看，给了我多少肉」！走到近前，把肉摔在那人面前的肉案上，夺过那人的秤，折成四段。杀猪匠见势欲还击，但见丈夫开始挥舞手中的刀，只好作罢。

妻子中等身材，穿着朴素，平时话不多，一子一女成绩均佳，常以成绩不错的儿子为荣。

儿媳临盆，妻子作为婆婆去伺候，矛盾颇多。儿媳产下一女，坐月子，妻子因琐事，坐地下撒泼打滚要儿子离婚。后来儿子离婚，向女方支付了为数不少的补偿金，且女儿抚养权归女方所有。

后来儿子再婚，每每和同村人谈起此事，妻子称，「俺儿娶了俩媳妇，一个不要再找一个，这叫有本事」！

# 第三节

一对夫妻，前几年攒了些钱，买了辆小货车，从煤球厂拉煤球下村卖。煤球卖到村里，给买家搬好放好，中间有点差价，基本算是个纯力气活。后来有一天，开车上坡时，不小心溜车了，丈夫的腿被扭断了，残了，妻子开始跟建筑队一起干活。

大太阳下，建筑队有「技工」和「壮工」，妻子没有拎瓦刀砌墙的本事，就只能干「壮工」，搬砖，和泥，扛沙子，扛洋灰。十里八乡的建筑队里，只有男的，没听说过哪里还有女工。

干了一段时间，妻子又买了一台手扶烧柴油的撒化肥机器，钻玉米地给人撒化肥，按亩收钱。冬春时节，麦苗刚出来，最高也就到小腿，地里撒化肥很容易，基本没人找人专门撒；可到了夏秋时候，玉米能长到两三米高，顶着大太阳，人钻进去什么也看不到，这个时候浇地再撒化肥，就有人雇人了。妻子就干这个活。

最近一段时间，本地忽然兴起给小姑送首饰，嫂子想买条项链，妻子说，「我这成天跟盖房班晒着，还钻棒子棵，你看我这胳膊让棒子叶剌的，又黑又不是样，还买项链，我戴啥项链啊，还不如给我买身衣服」，嫂子就去镇上，给妻子买了一身衣服。

裤子花了六十，上衣花了五十，一身衣服一百一十块钱。妻子说，真好，这裤子还能这么薄，准得凉快。

# 第四节

两对夫妻，两代人。

上代有一独子，学而未成，早早归家，旋即婚配，父辈倾尽积蓄，另举债数十万，为其在聊（城）购得房产一套，独子娶一聊地妻。

近时，独子携妻归，见母种丝瓜、茄子、辣椒、豆角等数畦，嗔曰：「种这些干啥」，母答：「吃啊，长了丝瓜豆角炒着吃啊」，儿诘「谁还吃这个」？！餐时，母炒茄豆两菜，儿视，不食，反买火腿两根，切一盘，与妻尽。

家几日，每卧至十时，祖母不悦，母亦不忍醒之。父问，「在聊城出租车开得怎么样」？儿答：「每天跑长途能拉两三个人」；父又问，「你每天睡到几点」？儿复答：「睡到八九点」。父讽之，「你睡到十点人更多」！

既行，祖母语之村人，「咱就看好了，别的咱不说，就俺家小孩，他要能过好了，我倒着走」。</content:encoded></item><item><title>我们的目标是活下去</title><link>https://blog.wolfyzhang.com/our-goal-is-to-live/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/our-goal-is-to-live/</guid><pubDate>Sun, 08 May 2022 03:30:35 GMT</pubDate><content:encoded>从前段时间「铁链女」事件进入视野开始，我就有很强烈的想法，想写一些东西来记载我认识的一个人和我听说过的一些事，但是这个话题涉及到的东西又太多，所以需要长时间的沉淀，在某个合适的契机，再一股脑把想说的东西全倒出来，否则就有「为写而写」的嫌疑，而我只是想单方面地表达一些什么而已。  
很幸运，现在这个契机来到了。

晚上看了卓别林的《the Kid》（中文译名：寻子遇仙记），影片不长，一个小时，情节也颇为简单，大体就是讲述了一个单身汉和一弃婴相依为命后来又和身为明星的弃婴生母相认的故事，但是卓别林却把电影节奏把握得极妙，真正做到了让人笑中带泪。

藉由影片情节，我也来讲讲，一个人的故事。他的故事不是电影，是真实的现实，而且现在也还没有结局。

# 第一节

影片一开始，一个未婚女士怀抱一个婴儿从医院走出，女士是被这个婴儿的艺术家父亲抛弃了，她无法独自养活这个孩子。无奈，女士把孩子放到富人区旁的一辆汽车上，并附上一张纸条，上书：please love and care for this orphan child。

她希望孩子可以被一个富裕人家接纳，过上相对比较好的生活。但是汽车被两个窃贼偷了，而且窃贼发现车上有婴儿之后转手就把他丢到了穷人聚居区的垃圾堆旁边。

此时主人公出现了，他戴着一贯的小圆帽，穿着不合身的西装和大皮鞋，拄着弯头手杖，一路被街旁楼上居民丢的垃圾砸过来，直到看到垃圾堆旁的弃婴。这个男人抱起孩子，四下张望，觉得是不是有人丢了孩子想送回去，却在警察的眼皮子底下阴差阳错有苦说不出地不得不抱着孩子离开。

最后他坐在路旁，掀开下水道挡板，想丢掉孩子，却看到了孩子身上的纸条，也就没舍得丢。

男人把孩子抱回家，而作为单身汉的他丝毫没有带孩子的经验，可他穷人自有穷办法，先是做了个吊篮作为婴儿的摇篮，又在茶壶嘴上加上个胶套当奶瓶，最后还把自己的一张破椅子中间剪开给孩子做坐便器，还真有点养孩子的样呢。

……

转眼孩子5岁了，虽然穿的衣服很破烂，比他爸的可能还破，但是吃饭前他爸却也要求他做祷告，感恩上帝赐给他们食物。

早上吃完饭，他爸背上几块玻璃，他捡起几块石头，两人就开始工作。先是他用石头砸坏其他街区人家的玻璃，然后他爸再恰好背着玻璃作为玻璃匠从那些坏玻璃的人家门前经过——这自然就有了生意。但是很尴尬，有个警察发现这小孩想丢石头砸玻璃，也看到了有个男人在修玻璃，这可坏了。警察过来问话，他爸装不认识这孩子，只管赶紧走，但是孩子不懂，就赶紧追，可一追上他爸他爸就把他踢开，他就再追，他再踢，只留下警察一脸懵。

# 第二节

我爸有个朋友，在他家排行老二，他大名叫金财，我们村就都管他叫「二金财」，他还有个外号，叫「二瞎子」，因为他确实瞎一只眼。我从小就管他叫二瞎子。

二瞎子得有一米八九，二百多斤，跟我爸一起干活，在建筑工地上做「壮工」干点力气活。

我小时候，大概三四岁的时候，二瞎子结过一次婚，我记忆里关于他媳妇最早的印象就是她抱着他们的女儿在街边坐着，也不说话。据说那女人智力有问题，是他买来的还是怎么着，两个人也没领证。

我没有二瞎子父母的概念，估计是死得早，所以也就没什么人替他操办婚事，何况他本身又瞎一只眼，也难找。他和我爸关系好，但也仅限于朋友，他其他亲人应该也就是一些叔叔伯伯这类的，算是「家族」。对他来说，能有个媳妇，可能就是一个无法形容的人生成就吧。

二瞎子和他那个媳妇一起生活，养孩子。大家都说那女人不会说话，有智力障碍，但我觉得她出于本能也还是很爱她的女儿，因为我对她唯一的印象，就是一群孩子向她扔小石子，向她挑衅，而她不说话，只是看看那些孩子，收收脚，然后把女儿圈在怀里。大家也都坐在街上，她和大家坐在一起，穿着上还是比较干净，所以大家也不排斥她，毕竟她除了无边的沉默，也是个几乎正常的母亲。

由于我那个时候实在太小，和他们一家打交道也太少，所以能想到的关于他们一家的信息，也就只有零零碎碎的这些了。

# 第三节

后来弃婴的母亲成了大明星，经常送给身边贫民窟的孩子们一些零食玩具，也包括她的亲生孩子，只是她不知道。

弃婴某日早晨，做好饭之后喊父亲起床吃早餐，餐毕他拿着获赠的玩具下楼玩，却被另一孩子抢走，弃婴和那孩子大打出手，把那孩子打得鼻青脸肿，而他父亲和那孩子的哥哥也从一开始的劝架演变成后来的打架，并获得了胜利。

然而，在打了这次架之后，孩子生病了，有人请来医生给孩子看病，医生发现孩子和男人没有血缘关系，而男人也把纸条交给了医生。医生通知了收容机构，收容机构来人要带孩子走，但是男人坚决不同意，警察便和男人大打出手。镜头快速切换，一面是楼下孩子被放在车斗里向车外伸出双手哭喊，一面是男人被两个警察制服脱不了身。车发动了，要开走了。

不过男人最终还是脱了身，而且从房顶上抄近道赶上了汽车，和警察打斗，最终夺回了孩子。

女明星也和医生在男人家门前偶遇，医生给女明星看了那张纸条，女明星这才发现那孩子就是她曾经丢弃的亲生儿子。她欣喜若狂。

# 第四节

后来，我再有印象，就是听说二瞎子的那媳妇被她家里来的人带走了，女儿丢下了。

我当时还小，体会不到，现在想想，二瞎子得多么无奈，女人又得多么痛苦，而唯一的小女儿，可能也还不明白，她或许要永远见不到她妈妈了。可能在三四岁的她看来，就是她妈妈有一天出了门，离开了，她就等，等啊等，再也没等到，没等到妈妈回来，也没再看到过妈妈，那个曾经不说话却只知道把她圈外怀里的妈妈。

我并不觉得女人家里人强迫女人回家有多么不合适，也不觉得二瞎子以不合法的方式娶妻生子有多么能接受。相反，我对这类涉及到「价值观评判」的问题不做任何具体的判断，因为我只感到无奈和悲哀，很多问题不可能有界限分明的标准答案。社会有规则，但是人生只有一次，没有了母亲就是没有了母亲，没有了女儿就是没有了女儿，这永远不可能有任何弥补的可能。

我只记得，当时人们极穷，穷到雪糕是一毛钱起步一块，两毛钱的是正常价格，五毛钱的橙汁就有些奢侈。二瞎子家里本来也没什么积蓄，只凭他一个男人用力气挣钱，一天几十块。橙汁雪糕那女人和她女儿只有看我们几个小孩子吃的份，不说话，就睁着眼睛，干看着。

女人被带走后，也不知二瞎子在女儿深夜啼哭要母亲时，内心会是何般感受。我不敢设想，也不愿设想。他不明白什么叫三个代表，也不知道什么是科学发展观，更不懂什么是中国梦，他只知道，那些人是大官，和他买来的媳妇被她家里人带走了，他人财两空，他的女儿也没有妈妈了，他未来只能也必须和女儿相依为命了。

关于他和他的女儿，我能想起的，还有几个场景。那大概是小学，二瞎子总会在建筑工地下班之后的午饭时间骑着摩托车，去小学门口接女儿，把女儿放在怀里。他本身懂点电路方面的东西，就在自己摩托车上装了个小音箱，放着流行歌曲，骑起车来方圆几十米都能听得清楚。他颇有点自得其乐的境界。再有，一次在夏天，他又放着音乐带着女儿骑车在街上跑，他女儿穿着彩色的裙子，好像是在哭，要买什么东西，他不给买，他把她女儿抱下车，在吼。

# 第五节

弃婴和父亲不敢再回家，他父亲带他到旅馆过夜，两人合睡一张床。不料半夜老板看到报纸上悬赏1000美元找孩子的广告，偷偷抱走孩子送到警察局。

孩子父亲醒来发现孩子不见了，到处寻找而不得。同时，女明星接到通知赶到了警察局，终于见到了自己的亲生儿子。

失神的男人无处可去，亦步亦趋回到家门口，睡着了。他做了一个梦，梦里是天堂，有很多快乐的天使，也有一些魔鬼，魔鬼们在挑拨天使之间的关系。

睡着睡着，做着梦，他被人摇醒了，原来是警察。警察把他带到一栋豪宅前，一开门发现是女明星和弃婴，孩子抱住他。警察也笑咪咪的。

男人走进那所大房子里，影片结束。

# 第六节

就到了现在。二瞎子现在家里还收拾得很有情调。沙发、吊顶、暖气和瓷砖，一样不少，还都拾掇得挺利索，不说一尘不染，但至少也是亮亮堂堂。

而且他还买了各种他不认识的明星海报，和他认识的习同志与彭夫人招手照，贴了满面墙。

他不喜欢别人叫他「二瞎子」，每每听到别人这么叫他，他都会怼回去，「会说话不？会说话不？你爷爷叫金财」！如果是女人，那他就说「你男人叫金财」！大家听到也哈哈笑，边笑边说，「哈哈哈哈行，金财，二金财」。

他女儿现在读初中，学习成绩特别不好，而且是学校里出了名的小混混。他平时也就干点活，一点不操心他女儿的学习。那天在我家，他和我爸聊天，就说起他女儿找他要手机。

「她说要买苹果的，我说苹果多少钱，她说也就七八千块钱诶，我说不买苹果行不？买西瓜的，西瓜水多，还大，要不梨的也行」，「买这买那，都得多少钱，得干多长时间」？

另外，我听到我村里有人说起，就二瞎子这种情况，现在农村刚好娶媳妇难，他凭他女儿好好要一波彩礼钱，女儿也别嫁太远，就有了棺材本了。有了大病是治不了，但是点小毛病住几天院还是够。

# 尾声

电影里能有结局，而且是大团圆结局，但现实没有结局一说。电影里的女明星丢了孩子，还能找到，但是现实中的小女孩却永远也不可能再有一个有母亲的童年了。

前一两年，二瞎子刷快手，让我帮他看看他怎么没办法关注人了，我一看，他关注了1500人，已经到了关主人数的上限了。同时我还看到了他的私信列表，他给好多「说媒的」开设的账号发了私信，内容大体就是他的情况介绍和希望能再找个人的愿望。绝大部分都石沉大海，很少有回复他的。

前几个月，我听说他又花了一两千块钱买了个抽烟喝酒烫头纹身的女人，我爸知道后骂了他一顿，说他净胡做作，整这不着边的事。后来那女人说回娘家，一去不回。

现实不像电影，他女儿没有发奋学习刻苦读书，他也没有努力工作吸引到肯和他相濡以沫的另一半。未来，未来会怎么样呢？答案在窗外的从西伯利亚吹到华北平原的大风里。

我只希望，二瞎子去世时，不会想到他媳妇、他女儿的母亲被人带走时的无奈，不会想到他又花钱买的媳妇一去不回他人财两空的失落，我希望他想到，我希望他什么也别想到。</content:encoded></item><item><title>Raspico的开发过程</title><link>https://blog.wolfyzhang.com/record-the-development-process-of-Raspico/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/record-the-development-process-of-Raspico/</guid><pubDate>Sun, 07 Nov 2021 18:00:27 GMT</pubDate><content:encoded># 1 v0.1.0 的开发过程

我有一个Raspberry Pi 4b和Raspberry Pico，后者也是树莓派基金会发布的一个微控制器开发板。其中芯片是树莓派基金会自研的RP 2040，可以拿来做控制。

Pico官方给了microPython和C/C++的SDK，一般来说前者对底层硬件的封装更为完备，而后者就暴露了更多的硬件属性，更适合用来做一些高性能开发，我目前偏向于后者。

![pico](images/pico.png)

供电上，Pico可以USB接口供电，亦可通过5v针脚供电。另外，它也引出了为数不少的支持各类通信协议的针脚。Pin 39 VSYS即可5v电压供电，另外Pin 1/2可通过串口进行程序的烧录，底部三个debug针脚可以直接开展相应的调试工作。

Pico支持两种烧录模式，一种是长按BOOTSET按钮后将它插入电脑USB接口中再把编译好的uf2文件拖入到系统挂载的大容量存储设备中，一种是串口用OpenOCD直接命令烧录。前者更适合小白，但是在debug或者其他一些需要频繁烧录的时候就让人很不方便，你要不断的插拔USB线，过程中还要按着BOOTSET按钮；后者相对来说就更方便了，敲敲键盘就好，不必要频繁动手去做一些物理操作。

显然后者更为优雅，我也想要后者那种优雅的开发模式，但这东西连接串口的时候就又会有一堆看起来乱糟糟的杜邦线。

![pi2pico](images/pi2pico.png)

![pi2pico-1](images/pi2pico-1.png)

上图展示了最终比较理想的连接效果，即Rpi 4b为Pico 5v供电，同时二者之间用串口进行程序烧录，SWD进行程序的寄存器级别调试，全流程不需要按什么按钮或者插拔什么线缆，双手可以不离开键盘完成这一切。敏捷调用一些小模块的时候，用杜邦线去简单测试一下这当然没问题，但是串口烧录、供电和debug这种伴随全开发流程的东西居然还要一直连着那种乱七八糟的线，我不希望这样。

PCB什么作用？其中一个不就是搞掉这些乱糟糟的走线的么……那就画个板好了，虽然以前从未正式探索过这棵科技树。

## 1.1 硬件部分

某宝找了一圈，没有我想要的那种东东，只好自己动手做，又喜闻嘉立创可以免费打板，这更坚定了我去薅羊毛的决心没钱。女朋友说立创EDA傻瓜式画PCB，那应该就很适合我这个新手，下好立创EDA，嘉立创下单助手，开始干活。一开始我并不怎么明白PCB的设计流程，就只好对着官方的操作手册边做边看，同时不断问自己「为什么要有这么一个流程？这流程是做什么的」这种问题，还好，最后几个小时就基本明白了。

![schematic](images/schematic.png)

首先是原理图，原理图给出的是各个电子器件之间的逻辑联结关系，它描述了各个器件之间是怎么连接的，或者说，是表达「哪个接口和哪个接口连一起」这个问题的工具。画图的时候，我对最初的想法有了略微的改动：把Pico和Rpi 4b的引脚都引了出来，再按照上述要求把相应的针脚连接到一起，我又额外在Rpi 4b的5v引脚上引出了一对给风扇供电的引脚。这里还有个问题，就是说怎么确定每个模块的封装，我一开始也根本找不到排母和排针在哪儿，怎么办？多试试，反正选错了女朋友也不会分手，大不了删档重开，谁让你是新手，低效率解决问题是应该的（

![pcb](images/pcb.png)

其次是PCB，这个过程中有一个「原理图转PCB」的步骤，图中也明显体现了各个模块之间的逻辑联结关系，这个联结关系即由刚刚的原理图给出。值得说明的是，PCB又分为各种层，名字上叫得天花乱坠让人直呼真看不懂，可简单一想就能理解为什么要这么做了：Photoshop里建立了电子图片中「图层」的概念，即将不同的元素视作不同的图层，每层之间相互独立又互相耦合——独立编辑，耦合呈像。PCB中「层」的概念，我的理解和「图层」类似，即把打印字符、实际布线等等分开考虑，类似于一种「元素组」。至于说多层板，我目前涉及不多，对其理解还简单停留在「有多层布线，之间用过孔连接」的程度。其实简单一想，电源也好信号也罢，之间必然会因为电磁效应而互相影响，高速通信（频率高）时这种影响会更强，导致电路系统不能正常工作也完全是有可能的。这还没涉及到更微观的芯片层面上的考虑，想必到那一步必然会有更多的门道在里面，问题总会有些解决方法的。专业工程师的专业体现在哪儿？不就体现在这儿吗……Pico官方文档上不用针脚供电而用USB供电，我觉得可能也有信号干扰等等这些方面的考虑，只是我现在的知识水平或许还达不到那个层次，而且我也不用Pico去做一些特别高大上的东西，针脚就先用着吧，出了问题以后就再更新个Raspico的版本号。

![layout](images/layout.png)

把相应的元素在PCB上摆放完毕之后，就可以进行布线了——用具体的走线把原有的逻辑关系给落地成实际的导线电路。

布线可以手动布也可以自动布，我当然要先试试自动布线，立创EDA自动布线有云端和离线两种方式，实际下下来发现这玩意儿也就是用Java跑了个本地服务，可能立创EDA再去调相应的接口。当时我身边有个计科的朋友在，我随口问他一句这玩意儿实质上是不是就是个图形学上的路径规划问题，他说是。嗯，或许以后有时间可以研究一下。

![sdk](images/sdk.png)

这里还有个小插曲，我运行的时候本地服务器这货给我报错端口已占用，这更确定了它是个本地服务了，简单看了下它的目录结构，我想扒出来它配置文件然后看看它究竟用了哪个端口，如上图所示，这肯定要打开config文件夹了，打开发现里面又有个local，这和刚刚确定的本地服务器又对应起来了，再进去，main.json人比花娇地就在那儿趴着呢。

![config](images/config.png)

打开，标准的配置文件格式，用了3579端口。cports走一波，发现没有被占用。这就有点懵，同时联想到我另一个软件偶尔会开机端口被强制置0，重启之后恢复正常，感觉这事没这么简单，直接就用了云端布线。这事一直也就搁下了，最近几天我Jetbrains全系IDE也全部GG，又促使我去搞定了这个问题，未来更新记录一下这个搞事的过程。

自动布线完毕！

![copper-clad](images/copper-clad.png)

覆铜这个一开始我确实是没怎么搞明白，后来简单查了一下，有些明白了。覆铜我的理解，它就是把一些引脚给连接上大面积的铜箔，然后这个铜箔基本覆盖在整个电路板上——为什么是基本？因为你不能跨过其他走线。这样一来，自然覆铜范围内的电位就和该引脚时刻保持一致了。作用？大概就是可以屏蔽掉一些无关的电磁干扰之类的吧，这个我不太明白，而且我觉得我这么简单的东西覆不覆说实话对性能来说应该是无所谓的，但是这是追求。我决定是给GND覆铜，选中GND管脚，覆上，感觉还有点好看。

最后加上一些相应管脚的标注，放些相关的注释信息，就搞定了。以下是渲染图：

![shot-1](images/shot-1.png)

![shot-2](images/shot-2.png)

![shot-3](images/shot-3.png)

## 1.2 软件部分

硬件有了，软件也要相应配合。回归初心，我做这个东西的目的就是要优雅地使用OpenOCD和GDB进行烧录和debug，具体配置过程确实挺简单的，不放Shell命令记录了，简单说下流程。具体的细节在官方文档中也都有。

首先下好SDK，配环境变量告诉系统你这玩意儿在哪儿，之后就可以去下OpenOCD了，记得装那一堆必须要用的工具链。OpenOCD下好，初始化编译一下，就可以拿来用了。直接怼命令就好了，一堆参数记得加上，一般就是一些板子的配置文件和elf文件的路径啥的比较重要，最后也别忘了verify reset exit，不然可能引导会出问题。

OpenOCD命令可以直接地、反复地烧录，你全程不必要去碰开发板，只需要在Shell里敲些命令就好了。

树莓派基金会官方也提供了Pico在VSCode上的launch.json和setting.json。再强调一遍，这里的软件部分所有内容在官方文档中都有具体细节，只不过文档是全英文的。

搞定这些之后，就可以用Rpi 4b中的VSCode去十分优雅的开发了（写完代码鼠标点一下按钮就可编译，且编译可选debug、release等等不同模式，编译完毕之后在内置shell中几个命令就可以烧录过去），一般也没啥人去直接插键鼠显示器给Rpi 4b用，大家都远程居多，但是远程就不可避免的带来一个性能问题，而性能问题又是一个工程师不能妥协的问题，所以必须要用笔记本上的IDE或者VSCode开发才行，怎么办？用一些VSCode remote插件就好了，相当于用SSH去连接，性能上没任何问题，但是配置上有问题。可能是CMake配置上出了些什么错，我目前在本地Win11上调用不了远程的VSCode CMake插件，所以只能写写代码，编译的话要用Shell命令，烧录自然也是，而且debug体验基本没有，这些虽然都能够在Rpi远程上补足，但是我不想这么做。

以后解决掉这个问题再在这里更新一次好了，那个时候可能我的水平又更上一层楼了。

下面是全家福。

![photo](images/photo.png)

我本来还有个Rpi第三方外壳，配合有风扇，我把风扇从里面掏出来，放到侧面来散热。注意过程中一些比如Rpi GPIO接口之类数据的测量和布局，所谓机电不分家嘛，何况电又有硬件和软件呢。

GitHub repo地址：https://github.com/wolfyzhang-github/Raspico

&gt; __禅定时刻__
&gt; 
&gt; 今天初冬大雪，昨晚英雄联盟全球总决赛，男生疯狂完了女生欢呼，写作过程中楼下莺歌燕舞连绵不绝，现在我写完了，只有大妈铲雪的声音。
&gt; 
&gt; 这篇文章写了4个小时，手环提醒我好几次久坐，我可是一个追求生活质量的人。下楼，运动，喝水，用膳！ 

# 2 v1.0.0 的开发过程

有了上面第一次设计PCB的经验后，第二次就轻车熟路了，这是订单记录：

![嘉立创订单记录](images/list.png)

第二次的v1.0.0相比第一次的v0.1.0，不管是在PCB布局上还是在实际功能上都有了挺大的变动，列举如下：

| **v0.1.0** | **v1.0.0**          |
|:---------- |:------------------- |
| Pico开发支持   | Raspberry Pi 4b状态屏幕 |
| GPIO引出标注   | GPIO引出标注            |
| 独立风扇电源     | 独立风扇位置及电源           |

新版本的设计并不复杂，不过也有个小遗憾在。Raspberry Pi 4b本身通过软件提供了一个根据CPU温度有电压信号变化的GPIO，但是其电流太小，不足以维持风扇运转，所以需要借助另外的5v恒压源来供电，同时外接一个三极管来实现风扇的开关，可我手头没有合适的三极管，只好作罢，取消这个温控功能。

另外新的状态屏幕功能其实也就是通过GPIO外接了一块0.96寸OLED，然后系统中运行着一个Python进程来获取系统状态并输出到屏幕上，代码也很简单。

如下为PCB预览：

![PCB-1](images/PCB-1.png)

实际上这里有个设计阶段比较难看出来的问题，实物到手之后才发现，我也在想怎么能够设计一个流程去规避类似的问题：

![photo-1](images/photo-1.jpg)

实物图中可以看到，上图中风扇的供电线实际上是和OLED有空间冲突的，这个问题我在设计阶段就没注意到......不过幸好可以直接接到引出的GPIO上，可以将就着挽救一下。

![photo-2](images/photo-2.jpg)

PCB的layout过程中我从Raspberry Pi 4b的CAD图纸上获取到其物理尺寸信息，所以最后我用铜柱把板子固定住了，并加了散热片和硅脂，结合上方直吹的风扇，散热属性算是拉满了。实际上我平时也是把它超频到2.0Ghz用（官方标准是1.5Ghz）。

同样，设计文件也开源至Github：https://github.com/wolfyzhang-github/Raspico</content:encoded></item><item><title>给狗看病的冬夜</title><link>https://blog.wolfyzhang.com/the-winter-night-to-see-a-dog/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/the-winter-night-to-see-a-dog/</guid><pubDate>Sat, 23 Oct 2021 22:12:28 GMT</pubDate><content:encoded>这件事情说来已久，但是印象依旧清晰，像是那个老兽医喊我父亲名字的声音一样具有穿透力。前几天夜里，失眠，看到了微博上某个宠物博主发布的他宠物猫不吃东西的微博，瞬间想起了这件发生已久的事情，感觉值得写下，遂挖坑，现填之。

高中某个冬夜的晚上，我从学校回到阔别月余的家，当时父亲在外地，母亲还没下班，妹妹读小学寄宿在姥姥家，我独自一人，打开灯，躺下熟悉一下家的氛围和感觉。

外面很黑，是一种昏暗的黑，还有雾，就类似一种黑雾一样，甚至可以说是梦境，你完全不知道那种黑暗中能有什么，只觉得它随时可以冒出一些让你不明所以的东西来。我放下行李箱，躺了一小会，可能还没有从在学校的那种紧张高压气氛中缓和出来，我仍旧不怎么适应到家的感觉。

外面有人喊着什么，听起来是个老头子，可能是喊对面邻居家吧，我懒得动，门外又黑又冷，我只想多躺一会。但是这人为什么喊起来没停？昏黑的冬夜，我躺在有着惨白却还不怎么亮的房间里，外面一个老头子的声音在喊一个人的名字，十分规律和有节奏，我心生犹疑，我还是起了身。

我走出房间，发现那人喊的是父亲的名字，「杰」！「杰」！「杰」！我更忐忑。打开大门，一个老头子的脸在白炽灯的暗黄色灯光下出现，他穿着很厚的皮衣，带着帽子和耳罩，又瘦又高，身体后面停着一辆老式电动车。我问他怎么了，找我父亲有什么事，他说给小狗打针，小狗不吃食，我母亲给他打电话让他过来。我一下子认出来了，他是华坤。

农村没有宠物一说，养狗是为了看家护院，养猫是为了捉老鼠，养猪是为了卖肉，养鸡鸭鹅是为了下蛋，而不论什么动物，也同时都拥有一个特殊的作用：解决馊掉的、坏掉的或者人不吃的剩菜和剩饭。动物会生病，每当邻居家的小猪或者我家的狗病了，大人们总会给一个戴着深蓝色鸭舌帽的中年人打电话，那人骑着一辆臃肿的电动车——车头的车篓里是各种药，中间的大梁和车把上挂着几个黑色皮包，皮包里还是药，车尾原本可以坐人的地方，放上了一个塑料盒，里面是一些大号的针管。他一般晚上过来，因为白天大人们要工作，然后在手电筒的照射下，给动物打针。如果运气好，几针下去动物可以恢复健康，运气不好，打几针以后也就不会再打了。打我小时候记事开始，至今，一直都是这样。

我赶紧把华坤迎进门来，他显得好老了啊，佝偻着腰，说话有气无力。我想起了大约小学时候，有一次，几个长辈和我坐在门前聊天，我们面前是一望无际的农田，延伸到地平线，只有中间有一条直来直去的路。远远地，只有一个人孤零零地骑着车从路的这头到那头，单调的农田背景下，构图十分清晰和简洁。有长辈说一句，「那是华坤吧？一个人」，「也是，一个人媳妇死了也没再找个人，过着也挺没意思的」。我面前这个人，就是华坤啊，他刚才一说完，我的记忆立刻被唤醒了，想起了他孤独的一切。

他从车后塑料盒里拿了一个大注射器，不知是不是光线的缘故，感觉发黄，他让我倒点热水，烫烫针头。我这才注意到，我家的那条白狗，自我回家一直都没有出声。我问华坤怎么回事，他说，「它嗓子烂，它也嗓子疼，它不吃食，你喂它它也不吃，它只喝点水，这是今年冬天的瘟疫，前两天旁边村刚死了一个小狗，打针没打好，谁知道呢」。华坤按住狗，他兑好药剂，在白色的暗暗的灯光下，透着雾气，给狗打针。打完以后，他说明天他再来，我和他道别。

老兽医走了以后，我蹲下，摸了摸狗，看着它。它应该还是在我小学的时候，我和姨姨家一个弟弟骑着车牵着它，它跑了十几公里才到我家。它来了以后大人们大多都说它很傻，因为它见到人就疯狂地吠。我记得我曾经特地观察过它湿润的鼻子，它的牙，它的尾巴，它的肚皮。它活蹦乱跳的时候，我一靠近它，它就会主动翻出肚皮，蜷着腿，表示臣服。我相信它不傻，因为有一次没生人过来但是它却也叫个不停，我出去看，发现原来院子里爬进来一条蛇。链子栓着它，它只能无能狂吠，同时身体不停前冲，我不敢想象如果没链子它会怎么样。在我发现蛇以后，它就不再叫了。

后面我就不多说了，我也尝试着喂了它几个饺子，一些泡软的馒头，但是它只喝水。母亲说她再去另外一个地方去买点药，尽力给它治，但是治不好也没办法。父亲听说它病了，说这病叫口蹄疫，不好治。我妹妹，没做表示，只是问我，狗是不是可能要死了，我说是。很久以后，我发现我妹妹手机里有几张狗的照片，我问她这是不是你拍的，她说是，因为狗快死了。

第二天中午我回学校了，等下次再回来，狗没有了，我问母亲怎么处理的，母亲说逐渐就不行了，最后给华坤带走了，走的时候还有一口气。我颓然，但没有落泪。

每当一些动物被放开束缚它们的绳子，我都会惊异于它们面对突如其来的自由的时候的那种惊讶，它们迅速舒展腿脚，跑来跑去，身姿轻盈，仿佛在飞。它们眼睛里那个时候有光。虽然，一般来说，不就它们就又会被重新束缚在一两个平方米之内活动。动物天性喜欢自由，但是对这些被束缚的动物来说，它们的一生就一直有绳子，它们不懂什么是自由，什么是广阔天地，什么叫撒欢狂欢。更有甚者，狗是关在笼子里的，十分逼仄，或许能见阳光都困难——因为它们体型太大，攻击性太强，容易吓到来人，一般的绳子可能束缚不了它们，所以只能用笼子。

我不觉得动物没有它们的意识或者思想。在这条白狗之外，我家还养过另外一条特别可爱的毛茸茸的小狗，我那时六年级，每天下午放学时间它都跑到街口等我，和我一起回家。它还有个玩伴，是另外一家的另外一只小狗，它是深蓝偏黑色的，那只狗是土黄色的，或许俩狗还是异性朋友呢，它们经常在一起玩。它很聪明，晚上比较冷，它知道自己找个毛绒绒的化纤线团里睡觉，我妈早晨起床的时候，偶尔它还在那里睡着呢！我妈一过去，它就醒了，然后跑来。但是，也正是聪明，我爸有一次发现它睡在化纤线团里，提起来就把它丢出去了，落地咚的一声。我妈说，它爬起来之后一开始还会走，但是一会儿以后就慢慢趴下了，再然后就没气了。我过去看的时候，它蜷着腿，侧躺着，和睡着了一样，只是鼻子上有苍蝇。为此，我妈还和我爸大吵了一架，我妈把我爸骂了个狗血淋头，我能感觉得到，我妈眼角有泪花。后来，那只土黄色小狗还过来找过它几次，它在门外汪汪叫，不过来了几次以后也就不来了。我十分讨厌暴戾恣睢的暴力，十分讨厌，更讨厌不问清楚事实就凭情绪化的猜测付诸报复性实施的行为，特别讨厌。

后来，那位博主的猫去了宠物医院，拍了x光片，恢复了健康。我回想那条白狗，回想那位老兽医独自一人在有雾的冬夜里孤独地回到一片黑暗和沉寂的家，脑子里思绪万千。生命是如此之繁茂，它生长在田地里，生长在院落里，人是生命，狗是生命，植物也是生命。生存环境很恶劣，但是大家都在努力活下去，收入或许一天也就十几块钱，买不起更适合自己的三轮电动车，有钱也还要留下来给子孙，留给自己死后买棺材，但这不妨碍老兽医独自活下去，不妨碍他在那样的环境中依然努力工作。我想，他和动物打了那么多年交道，必然也能体会到那种旺盛的、不可遏制的生命力吧。

努力活下去。</content:encoded></item><item><title>相信现代医学，相信现代科技</title><link>https://blog.wolfyzhang.com/believe-in-modern-medicine-and-modern-technology/</link><guid isPermaLink="true">https://blog.wolfyzhang.com/believe-in-modern-medicine-and-modern-technology/</guid><pubDate>Sun, 22 Aug 2021 23:47:50 GMT</pubDate><content:encoded>我现在吃着八宝粥，回想起 60 小时前那碗卧着一个荷包蛋的清汤面，才意识到那是我最近几天吃过的唯一一份不必刻意引流到右侧牙床的食物。

左边的智齿已经消失几十个小时了，它原来所处的空间现在被血凝块填补，也是我亲自带着它进了牙科诊所——放在牙槽骨上。

诊所门面很豪华，但是侧面却不怎么雅观，和普通民房无异。一个大叔问我为什么拔智齿，我说偶尔隐隐作痛，网上查了一下，担心发展下去情况更麻烦，所以想现在尽早拔了它。大叔问我哪个学校，我如实作答，他说，「济南大学的学生，意识挺不一般的」。

「我这儿拔牙可贵啊，一个智齿得七八百，麻药之类的都是进口」，我没说什么，接着问了个专业问题。

咨询完毕，几分钟后进来几个年轻女医生让我躺下，问了一句平时身体健康不吃什么药吧，我酝酿了两秒钟，「没有吃药的习惯」。接着，我还没准备好，甚至没来得及问一句「这就开始了」，医生镊子夹着碘伏棉球，让我张嘴，就开始给麻醉位置消毒。我并不知道那是碘伏，只觉得那种液体的味道很可恶，而且和我小时候看牙医用的一种药剂味道很像。接着开始注射麻药，她们徒手掰开注射针剂的玻璃瓶，抽出液体，推出空气，并在空中用排出的药剂留下一道曲率相当高的曲线，整个过程不过三四秒。我看她们如此云淡风轻，禁不住问一句，「疼吗？我先做个心理准备」，「有一点，不是很疼，没事」。我有点担心，因为这大概是我第一次打麻药，我手抚胸口，放空眼球，心中默念「相信现代医学，相信现代科技」，然后感受着针头扎进我牙龈的深处，大约两三厘米，微微有些异样的涨涨的感觉，麻药就打完了。确实不怎么疼，但是感受十分不好，我感觉整个上身肌肉都是紧绷的。「再来第二针」，「什么还有第二针」？注射完毕，「舌头麻吗」？「不麻，很灵巧」。她又拿一个镊子一样的东西，抵住——实际上可能是扎进——我智齿附近的牙龈，问我疼吗，我说不疼。「再来一针」！

连续三针，最后一针或许因为我牙床肌肉密度太大针管还崩开了，我顺带品尝了一下进口麻药的口感，苦的。过一会儿，麻醉部位的神经细胞不敌进口麻药的效力，开始失能，我感受到从下颌骨到颧骨、从嘴唇到耳朵，另加大半个舌头，全都没有了痛觉。

女医生开始用几个细长的金属工具在我智齿附近忙活，我能感受到她施加的拉扯以及捅刺的力量，我口中的对应部位就是一个工作台，而她在她的工作台上用她的力气进行着金属与肌肉骨骼的加工。拉扯和捅刺的力量相当大，应该是把智齿附近的牙龈组织先割开，再翻开。旁边一个医生用一个中空的管状工具在我口中不定位置地游走，大概是在吸血。早有耳闻，有的智齿要先分解再拔出，而分解的工具应该就是我小时候看牙见识过的那个小金属磨。果然，医生又拿一个小金属磨，开始分解我的智齿。我能感受到工具的末端在喷水降温，但是蛋白质在金属磨的作用下依旧会有比较强烈的烧焦气味，它不断发出摩擦的声音，偶尔还有小小的碎屑飞出。这个时候，我感觉口中积累了不少的液体，或许是分泌的口水，或许是血，我不清楚，不过我必须要把它吞下去或者吐出，不然我就要被它引发呕吐反应了。我决定吞下去，也没什么很特殊的感觉，只是有点黏稠和凉。

保持这种口中相当凉爽，同时又能闻到比较强烈的烧焦气味的状态一会，医生就用镊子夹出了半颗牙，我能看到它的牙根，上面还附着有很多的血浆——为什么不是血液？因为稠。如法炮制，不过我也不清楚具体是什么时候拔完的，直到医生说缝两针吧，我才明白，我的左智齿已经彻底消失了。线看起来很细，且很坚韧，而针就是一个比较短粗的弧形金属条，一端有尖。医生缝针，感受和打麻药类似，十分不好。最让我意想不到的是，医生最后居然用手还打了一个结......没多久医生就开始让我咬棉团了，第一个先咬几秒钟，拿出，再放第二个，咬住，让我起身到休息室休息半小时，时间要求精确到分钟。我起身后摸摸脸，发现我下巴不是一般的圆润，左脸也是出乎意料的饱满，而且没有知觉。

到休息室，看了一会儿喜羊羊，分享一下「你看见，我看见的」，半小时就过去。吐掉棉团和血水，医生说可以了，然后收款，拿药，走人。拔完牙的 24 小时内是隐隐痛的，说话都有影响，而且口中有很多的血水，不能吐，只能吞下。

现在，60 小时过去，血凝块已经大致发展成结缔组织，我的身体已经开始了它的修复程序，左智齿，已经来到末章了。每当对医生未知的操作没有安全感或者感到害怕时，我都会手抚胸口，心中默念，「相信现代医学，相信现代科技」。</content:encoded></item></channel></rss>