[{"content":"四月平淡无波，我的状态和天气一样阴晴不定。\n学习的时间大部分是打比赛，也许是因为比赛时间过长，又或者是当了队长的缘故，非常疲惫。有时候也会想为了所谓的毕业条件来打比赛真的值得吗？应该不会再尝试周期较长的比赛了。 娱乐时长大幅度增加，上个月才占 13%。有大半时间耗在玩洛克王国，这个游戏的剧情方面完全不感兴趣基本都跳过了，大部分的时间用在了过剧情以及刷异色精灵概率抽奖上。抽奖的准备操作包括不限于：种地，跑图锄大地，抓精灵孵蛋。和其它人对全收集执念不同，我只刷贵的精灵，这样理论上我不需要更多的资源就一直抽奖。 工作方面没什么大的进展，画的实验块加工出来了，但扫出来的效果并不好。 本月摘要 毛线：完成两个织片并组合起来了。一开始还很担心松紧不一致合不上，组合后还是高兴早了，最后马鞍尺寸大了(也有可能是方向错了)，已经重新钩了小号的主体部分。我发誓下一个项目一定做点大的不费脑子看图解的项目。 观鸟：连着三周没有出去观鸟，在放假前出去看了看，又有了新的爱鸟——东亚石鵬。放假后又和好久没有见面的鸟友约了约。\n运动：跟练四十分钟左右的举铁视频，有些动作跟不下来。去了今年的彩虹跑，还挺好玩，顺便去集章玩了一下午，脑子很好地放松了。依旧希望能规律运动，五月争取学会游泳。\n娱乐：在每个白天被占用的晚上熬夜看小说，最近两周肝洛克王国有些上头，但没有全图鉴的执念，随缘刷刷钱和异色。\n又年长一岁，但没有什么太大的变化。\n总体来说这个月除了第一周刚放假还算快活，剩下的三周完全不符合我对生活状态的期待，总是感到疲惫又不好好休息，经常脑子不想动只想品尝即时的多巴胺，甚至没有感到快乐只是为了玩而玩，人真的很奇怪。和姐姐聊了聊，她说她的话大概是被焦虑影响，而我好像没什么焦虑的地方，但这种行为模式似曾相似，上个月雅思刷题刷多了也会报复性熬夜，尽管不是很明白到底为什么会这样，但对自己的认识又深了一点点。\n影像 食 压力一大开始乱吃。狂吃很多了垃圾食品，炸鸡汉堡，零食小吃\u0026hellip;\n西塔这个土豆泥神中神，非常好吃，淡淡的土豆香和甜味，里面还加了配料。烤肉有人助烤确实味道更好，但有两种肉味道太重不喜欢，其它都可以 披萨自助，吃得很撑，解压餐 拌面感觉都不错，什么时候能再多一些新的面食就好了 土豆泥拌饭，好吃，饭里面似乎加了腐乳，单吃不太喜欢拌饭倒是意外合适 鸟 大摇大摆的红嘴蓝鹊回来了！ 夜鹭一如既往 带崽中的乌鸫 白鹭比心 喜加新： 1.很瞩目的东亚石鵬，两种配色都很喜欢，鹟科怎么都眉清目秀的，可爱 2.直到遇到一群长枪短炮的才知道原来都是来拍黄胸鹀的，但一开始没认出来。此鸟也是鸟生不易被人吃以及杀得濒危才成国一的\u0026hellip; 3.差点认成某种伯劳的中华攀雀(?\n事 第一次占卜偶遇阿蒙信徒。占卜的问题是：⌈十年后是否能过上理想的生活？⌋ 牌面依次是：星币侍从逆位，恶魔逆位，权杖五正位\n老师给我的解读大概是：我现在很可能处于想要不劳而获的状态，需要放弃现在坚持的某些东西才可能达到目的，而且我当前追求的生活和未来追求的可能会发生变化\n下面是 C 老师的补充\n星币侍从逆位：理想生活的基础还不稳 星币侍从通常与学习、技能、金钱规划、现实基础、长期积累有关。逆位时，常见含义是： 学习或行动不够稳定；\n有想法，但落地不足；\n容易三分钟热度；\n对未来有期待，但缺少长期计划；\n财务、职业或能力建设还没有形成扎实路径。\n恶魔逆位：关键在于摆脱束缚 恶魔正位常指欲望、依赖、成瘾、恐惧、被物质或关系控制、明知不好却难以脱身。逆位通常比正位积极，代表： 意识到束缚；\n开始挣脱不健康模式；\n减少依赖；\n摆脱消耗型关系、习惯或环境；\n从“被控制”走向“重新掌控自己”。\n权杖五正位：过程中会有竞争、冲突和混乱 权杖五代表竞争、争执、分歧、混乱、多人意见拉扯，也可以代表一种“训练场式”的冲突。它不一定是坏牌，但说明过程不会平顺。 放在未来十年的问题里，它暗示： 你会面临竞争压力；\n目标之间可能互相冲突；\n身边环境容易干扰你；\n你可能会反复比较、焦虑、被外界节奏影响；\n实现理想生活的过程需要不断调整方向。\n好羡慕咪的状态，每次见到时都及其松弛 (左天我会想你的，已经找好铲屎官住大房子了) ","date":"2026-04-30T21:41:00+08:00","permalink":"/p/%E4%BA%94%E4%B8%80%E5%A5%BD%E5%A5%BD%E6%94%BE%E5%81%87/","title":"五一|好好放假"},{"content":"有人说三月漫长是没有什么假期，熬过了三月就又有了盼头。\n本月活动时间的不完全统计。\n学习的时间看似长，但很可能包含了我摸鱼和走神的时间。娱乐的时间看似短，实则真玩起来都没有记录。突然立下爱学习爱工作的上进人设。 运动时长占比少得可怜，我还加上了骑行（4h），下个月能不能动起来还是个问号。 一个月里记录的毛线时间达到了 33h+，几乎每周完成一个小项目，算是高产。 生活记录观鸟、社交和自己做饭之类的事情，比想象中的更多。 工作时长应该是最不真实的，记录组会和在工位的时间段。 活动总结 近几年第一次在家过元宵，还是和姐姐家一起过的，我妈难得做了五菜一汤，那天她挺开心。 运动：健身房入门到放弃只花了两周不到。周卡去了四次，后面试的一个健身房太垃圾只去了一次。一方面是觉得人好多，另一方面在跑步机上的每秒都感到无聊，后面全靠意志力在坚持。最近的一周里只举过一次铁，姐建议我每天 20 min 。 雅思暂停：在猛学的两周里（几乎每天至少听阅个一篇），某个晚上突然放纵熬夜 ，直接影响接下来几天的精神状态。于是放弃变得理所当然，我没有再规定每天练习题目，只是偶尔练习打字，口语。周末完成了和人实时交流的挑战。开口的第一句话对我来说极其困难，恐惧和怯懦让我无法发声。交流本身就是一项不简单的事情，更何况是用不熟悉的语言呢？但在以紧绷的心情说些什么之后，后面的出声就变得容易起来，哪怕语无伦次，或者忘记单词，不知道如何表达也不会有被无形之物控住心脏和喉咙的可怕感受。 博客：把博客换成 Cloudflare Pages ，免费支持私有仓库。期间 Neodb 的仓库出现工作流不活跃的问题，最后新增一个步骤 来维持仓库的活跃性（暂时不知道是否有效）。 学习：简单了解 agent 相关的知识后，就开始应用。给 CC 换上游戏提示音。Vibe 一个单词打字练习的 app —— Typelex，日历活动汇总工具，用来复盘——CalendarReview。 C 语言复习一小部分后也暂停，不知道是否算实操：用单片机实现推杆控制，用到串口但很死板，后面看会不会改进。 学了一点 ROS基础知识。 观鸟：加新乌灰鸫和领雀嘴鹎！本月观鸟共 5 次，仍需再接再厉。收假前想去看铜蓝鹟但只是犹豫就完全错过。另外在小吃街看到了好久没见过的家燕（？） 毛线 为钩针小物件买了胶枪，没有想象中好用，很容易就粘到不该粘的地方，而且冷却固定的好快，只在花托用过一次。后面看看有没有合适的项目适合使用。\n由第一个棒针冷帽上手环形针，头围又双叒叕小了，能带但不是我想要的感觉，预计天冷了再织一个。 钩了引我入坑的项目——小山雀。钩完不知道怎么的有点不知怎么的。除了眼睛方向错了，翅膀也乱飞，后面可能会再钩一个。 文娱 追完《血条》，弃掉《不眠》。《黑白厨师》看到集体赛就有点没意思了。在听《我在异界封神》，大概是每个小单元破鬼案。看了三部电影，观感都还不错。 河狸变身计划 2026 年 03 月 29 日 看过 跳脑装置这个设定真的很妙，完全是我抗拒不了的能力，阿尼马格斯只是化形，跳脑则真的可以让人接近其它物种的生活。当儿童动画看，不用带脑子，如果要深究人与动物的关系会让人失望。\n两种视角转换出了许多笑点，但梅宝和姥姥的片段的闪回又让我想哭\nmovie 我，许可 2026 年 04 月 07 日 看过 整个观影过程里时不时被触动，尤其是女主和她妈妈的互动，两个演员演得非常好。无法沟通的时候，温情互相理解的时刻，让我又哭又笑。当然作为电影导演编辑必然是将人物的某些特质强化了，有人认为这是不够好的地方，但我依旧认为它值得满分。女主崩溃地大笑，或是困扰许久的问题突然被轻易解决的狂笑。作为观众可能难以理解拍摄者的用意。忍不住问为什么？这些笑表达的似乎都不是喜悦的情绪。 movie 福尔摩斯小姐：失踪的侯爵 2026 年 04 月 06 日 看过 女主是演过ele的演员，这部电影看到了完全不同的角色，很有魅力。但剧情本身还是很一般，不带脑子看看。 movie 生活 吃了很多好吃的。\n复购 n 次的孜然土豆牛肉和番茄麻辣烫 其貌不扬的黑豆腐，吃起来有鸡蛋的香气很好吃~ 排队很久才买到的里脊鸡蛋灌饼 姐姐推荐的鸡汤面，汤底很香 躺着看树，下次记得要找块平整的地躺 夜晚与花。某人被win11整奔溃，在来找我的路上买了一束花 ","date":"2026-04-06T11:35:59+08:00","permalink":"/p/%E6%B8%85%E6%98%8E%E6%BC%AB%E9%95%BF%E7%9A%84%E4%B8%89%E6%9C%88/","title":"清明|漫长的三月"},{"content":"你的 Claude code 提示音是什么? Quote 有个提示音让 coding agent 在背景里工作，任务结束、需要人类注意、批准和 review 的时候播放音效，能让人更放心地去摸鱼。\n看到了这篇教程 里用的是 「帝国时代」，甚合我意。\n既然刷到了，且刚好最近开始用 CC，立马也打算换一个。\n先下载几个喜欢的音频（.mp3）\n接着在 C:\\Users\\你的用户名\\.claude 中创建 sounds 文件夹，将音频文件并放入 在该路径下新建 play_sound.ps1 ，并粘贴下面的代码\n1 2 3 4 5 6 param([string]$SoundPath) Add-Type -AssemblyName presentationCore $player = New-Object System.Windows.Media.MediaPlayer $player.Open($SoundPath) $player.Play() Start-Sleep -Seconds 3 最后在 Claude Code 配置文件 C:\\Users\\你的用户名\\.claude\\settings.json 下追加（这个部分让 G 老师改了好几遍，涉及一些转义的错误）\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 \u0026#34;hooks\u0026#34;: { \u0026#34;SessionStart\u0026#34;: [ { \u0026#34;matcher\u0026#34;: \u0026#34;startup|clear\u0026#34;, \u0026#34;hooks\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;command\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;powershell.exe -NoProfile -WindowStyle Hidden -Command \\\u0026#34;Start-Process powershell.exe -WindowStyle Hidden -ArgumentList \u0026#39;-NoProfile -STA -ExecutionPolicy Bypass -File C:/Users/用户名/.claude/play_sound.ps1 C:/Users/23947/.claude/sounds/drum.mp3\u0026#39;\\\u0026#34;\u0026#34; } ] } ], \u0026#34;UserPromptSubmit\u0026#34;: [ { \u0026#34;hooks\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;command\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;powershell.exe -NoProfile -WindowStyle Hidden -Command \\\u0026#34;Start-Process powershell.exe -WindowStyle Hidden -ArgumentList \u0026#39;-NoProfile -STA -ExecutionPolicy Bypass -File C:/Users/23947/.claude/play_sound.ps1 C:/Users/用户名/.claude/sounds/horn.mp3\u0026#39;\\\u0026#34;\u0026#34; } ] } ], \u0026#34;Stop\u0026#34;: [ { \u0026#34;hooks\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;command\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;powershell.exe -NoProfile -WindowStyle Hidden -Command \\\u0026#34;Start-Process powershell.exe -WindowStyle Hidden -ArgumentList \u0026#39;-NoProfile -STA -ExecutionPolicy Bypass -File C:/Users/23947/.claude/play_sound.ps1 C:/Users/用户名/.claude/sounds/relic.mp3\u0026#39;\\\u0026#34;\u0026#34; } ] } ], \u0026#34;PreCompact\u0026#34;: [ { \u0026#34;hooks\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;command\u0026#34;, \u0026#34;command\u0026#34;: \u0026#34;powershell.exe -NoProfile -WindowStyle Hidden -Command \\\u0026#34;Start-Process powershell.exe -WindowStyle Hidden -ArgumentList \u0026#39;-NoProfile -STA -ExecutionPolicy Bypass -File C:/Users/用户名/.claude/play_sound.ps1 C:/Users/23947/.claude/sounds/workshop.mp3\u0026#39;\\\u0026#34;\u0026#34; } ] } ] } 路径中的 用户名 替换为实际的 Windows 登录用户名。 音频文件名替换为对应文件。\n","date":"2026-03-26T13:02:25+08:00","permalink":"/p/%E6%91%B8%E9%B1%BC%E5%B0%8F%E8%AE%B0%E6%9B%B4%E6%8D%A2claude-code%E6%8F%90%E7%A4%BA%E9%9F%B3win/","title":"摸鱼小记|更换Claude code提示音（Win)"},{"content":"TLDR:因某 web 应用拉胯（广告弹窗，服务器故障，生词本删除后就不能重添加），于是我用 ai 做了更符合我需求的应用。（ps：还有姐妹跟我避雷它用的例句有性别歧视问题）\n前段时间有考雅思的打算，在看了很多经验贴后，大致规划了机考学习方向。\n一个 up 的经验是每天用听写来练打字。我觉得很好，就效仿了几天，她用的 word，我用的 excel。但我总觉得还是有点麻烦。\n后面因为某网站软广很多推送到我脸上，就试了试用 web 应用听写，很符合我的需求。但让人反感的是开屏各种广告让你试用它们的会员，我就这样忍着用了一段时间。直到最后一次听写的中途，弹出故障让我被迫中断听写，生词本（我用来记录错词）也出了问题，被我除删掉且无法复原。\n于是当天下午我就开始尝试做贴合我的需求来做一个类似的 app，大概下午到晚上的时间，我用 ai 搓出来一个能运行，勉强可用的版本。后面的四天里，一天学习 api 抓包，获取需要的单词书，其余的几天里，我但凡有空就在改这个 app 里让人使用体验差的地方。\n这么一算，仅仅第五天后（3.26），我就得到了可以令我满意使用的个人应用。整个过程我没有写任何代码，第一次这么直观的感受到现在的 ai agent 写前端代码的能力\u0026hellip;\n可以在电脑端开魔法进行体验 也可克隆 TypeLex 到本地运行 ","date":"2026-03-26T09:51:00+08:00","permalink":"/p/%E6%B5%85%E6%B5%85%E5%B0%9D%E8%AF%95vibe%E4%B8%AA%E4%BA%BA%E5%BA%94%E7%94%A8/","title":"浅浅尝试vibe个人应用"},{"content":"API 抓包 / 接口分析的初步尝试 主要在 ai 的辅助下进行。\n网站是如何工作的 ？ 想象一个餐厅的场景：\n顾客 = 浏览器 服务员 = 前端页面（我看到的界面） 厨房 = 后端服务器（真正存数据的地方） 菜单上的菜 = 数据 假设现在我们点击按钮/翻页（点菜）→ 浏览器会向服务器发 API 请求（服务员通知厨房）→ 服务器返回数据（厨房做好菜端出来）→ 前端渲染页面（服务员摆盘给你看）\n因此可以发现在网页上看到的文字或图像，并不是\u0026quot;刻在网页上的\u0026quot;，而是页面实时去服务器要的。这个\u0026quot;要\u0026quot;的过程，就叫做 API 请求。\nAPI 请求的格式\n1 2 3 收件人：/api/study/lexicon/v1/list ← 接口地址 发送方式：POST ← POST = 附带内容发送 信的内容：{ c_id: 438343, pagesize: 9999 } ← 要什么 用户在浏览器里能看到服务器返回的数据——这就是 F12 开发者工具的作用。打开 Network（网络）标签，就能看到页面在偷偷发了哪些请求、收到了什么数据。\n为什么不能直接发请求？——签名机制 你可能会想：既然知道地址和参数，我直接发请求不就行了？于是一个问题来了：厨房怎么知道信息是真人发送的，而步是有人冒充的？\n一种解决方案是：在每封信上盖一个防伪印章，叫做 sign（签名）。\n这个印章的制作方式：\n1 把信的所有内容 → 按字母顺序排好 → 用一个\u0026#34;秘密配方\u0026#34;加密 → 生成一串数字 \u0026ldquo;秘密配方\u0026quot;就是 idictation_2024 这个密钥。\n简单脚本做了什么 ？ ① 补字段\n1 2 3 4 5 6 7 8 原始请求：{ c_id: 438343 } 补完后变成： { c_id: 438343, api_key: \u0026#34;%2Fapi%2Fstudy...\u0026#34;, ← 接口地址编码后 timestamp: 1748000000, ← 当前时间戳 nonce: \u0026#34;a3f9k2m8xz\u0026#34;, ← 随机字符串（防重放攻击） } ② 生成 sign\n1 2 3 把上面所有字段 → 按 key 字母顺序排列 → 拼成一行字符串 → 用 HMAC-SHA256 算法 + 密钥\u0026#34;idictation_2024\u0026#34;加密 → 得到一串 hex 字符串 → 这就是 sign ③ 发出去拿数据\n1 2 3 把补好字段+sign 的完整请求体 → POST 发到服务器 → 服务器验证 sign 合法 → 返回数据 → 脚本取出 json.values 里的内容 换一本词书怎么办 ？ 只需要找到一个参数：** g_id ** 方法：\n登录后打开你想要的那本词书 按 F12 → 切到 Network 标签 在词书页面点击任意章节或刷新 在 Network 里找到发往 /api/study/lexicon/ 的请求 点进去看请求内容，找 g_id 的值 然后把脚本里的 115172 换成你找到的数字就行。 实战 步骤 做什么 工具 1 找到数据从哪个接口来 F12 → Network 2 看请求参数有哪些字段 Network →目标请求的载荷（Payload） 3 判断有没有签名字段（sign/token 等） 同上 4 如果有签名，找签名逻辑 F 12 → Sources → 搜索密钥关键词 5 复现签名 + 发请求 Console 写脚本 第一步：先制造一个请求 Network 标签只记录你操作时发生的请求，所以要先有动作才有东西看。\n打开 https://www.idictation.cn 并登录 按 F12 打开开发者工具 点击顶部的 Network 标签 然后在网页上点击任意一个词书或章节 第二步：筛选请求 Network 面板顶部有一排过滤按钮，找到 Fetch/XHR 。只看\u0026quot;页面偷偷发出去拿数据的请求\u0026rdquo;，过滤掉图片、CSS 等干扰项。\n第三步：找到目标请求 过滤后，左边会出现一个列表。找名字里包含 list 或 chapter 的条目，打开它。\n第四步：找 Payload 点击请求后，右边会出现几个子标签：\nHeaders（表头） Payload（载荷）← 这个 Preview / Response（返回的数据） 第五步：判断有没有 sign/token 字段\n1 2 3 4 5 6 {g_id: 115172, api_key: \u0026#34;%2Fapi%2Fstudy%2Flexicon%2Fv2%2Fchapter%2Flist\u0026#34;, timestamp: 1774249435,…} api_key: \u0026#34;%2Fapi%2Fstudy%2Flexicon%2Fv2%2Fchapter%2Flist\u0026#34; g_id: 115172 nonce: \u0026#34;614fjqnlce\u0026#34; sign: \u0026#34;21fbabe524875399c8a547a19b2a1517970c1d66f5078269cac14f1c57324be8\u0026#34; timestamp: 1774249435 第六步：找签名逻辑 在 Network 里把过滤从 Fetch/XHR 改成 JS 。接下来会看到几个 .js 文件，找名字最大的那个（通常叫 index-xxxxxxxx.js）。点进去，切到 Response 标签，能看到一堆压缩的代码\n点顶部 \u0026ldquo;源代码/来源\u0026rdquo;（Sources）标签，用 Ctrl + Shift + F（全局搜索）， secret 或 sign。\n结果会很多，但你要找的是赋值语句，也就是长这样的：\n1 2 e.data.sign = ... xxx.sign = ... 找到赋值的地方，往上看几行，就能看到 sign 是怎么算出来的，密钥自然就露出来了。\n我是如何使用 AI 的 原文摘录 当开始一个新的功能开发/需求时，我会首先定位到这个需求是基于哪个仓库开发，并同时打开 Claude Code 与 Codex 进行初始化，形成各个 Agent 对项目代码仓库的基础的文档沉淀。\n如果是需要协同多个仓库开发的场景，可以定义一个外部的例如 feat-xxx/ 文件夹，并将相关的 git repo 都置于这个文件夹目录下，并进行初始化，后续 agent 都会在这个项目目录下执行，要注意的是，需要将每一个 repo 都切换到对应 feat 分支进行开发，以免后续代码版本管理混乱。接着向 codex 描述清楚相应的需求，让 codex 总结成详细的 feature 描述，并根据实际需求让 codex 进行调整，如果需求相对清晰简单，可以直接让 codex 执行即可。\n如果牵扯到代码复杂度较高，可以采用 Claude Code 的自定义命令 ，生成较为详细的 PRPs/ 文档，主要流程为：\n在 Claude Code 中执行 /generate-prp 命令，在命令之后输入 codex 生成的 feature 描述 Claude Code 命令会根据模板和提供的功能需求生成一份详尽的需求文档，会在 PRPs/feat-xxx.md 中，可以继续在对话中进行修改调整，需求完成后， 调用 /clear 命令来清理当前上下文 通过 Claude Code 执行 /execute-prp PRPs/feat-xxx.md 命令来完成需求，时间相对比较长，如因网络等问题中断，可以重复执行命令（进度与 TODO 会在文档中标注） PRP 大体框架如下：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # Product Requirements Document (PRD) ## Objective - [Clearly defined, measurable feature goals] ## Technical Constraints - [Non-negotiable technical decisions] - [Architectural principles that must be followed] ## Quality Standards - [Performance benchmarks] - [Maintainability requirements] - [Test coverage criteria] ## Integration Requirements - [External dependencies inventory] - [Interface specifications] ## Deliverables Definition - [Code organization patterns] - [Documentation requirements] 思考 没有实际开发经验就没有这种自上而下的经验模式\n","date":"2026-03-23T13:30:11+08:00","permalink":"/p/%E6%91%B8%E9%B1%BC%E5%B0%8F%E8%AE%B0api-%E6%8A%93%E5%8C%85%E7%9A%84%E5%88%9D%E6%AD%A5%E5%B0%9D%E8%AF%95/","title":"摸鱼小记|API 抓包的初步尝试"},{"content":" 喜欢春天的温度，但讨厌下雨的天气。考虑以后进行半月或者整月汇总，这样内容更丰富而不会令人不知道写什么。\n本周摘要 毛线：完成第一个棒针帽子！ 观鸟：加新了乌灰鸫，新地点水杉（林）看到黑脸洗澡，各种鸟觅食\u0026hellip; 学习：系统整理了 C 语言与嵌入式学习路线，新增 Obsidian Map、Claude Code、Antigravity Skills 等工具笔记。Obsidian 的 Map 视图暂时不知道有什么妙用。Vibe 了一个单词拼写 app。 运动：因为新健身房的体验很差已经有点放弃去健身房，尝试在宿舍练哑铃以及骑车，游泳还未确定。 娱乐：在看《黑白厨师：料理阶级战争 第二季》以及新开一本小说，播客听了关于中东地区的科普节目和电影相关讨论。 令人悲伤的：前两周偶然拍到的猫离开了。帖子令人泪目，即使我和这个生命没有太多的交集。 令人开心的：收到朋友送的礼物，支持多设备互连的运动耳机！感谢我 M 姐，助力我工位摸鱼更有高效。 为什么难受也要熬夜？ ^07a066\n我想不通这个问题，于是和 G 老师简单聊了聊。\n我：明明知道熬夜会睡不好觉，我还是熬夜看小说到一点，即使那个小说不好看，文笔一般。难以理解自己的行为，我像是完全被潜意识控制。\nG：当我们在做这种违背理智的决定时，通常是大脑在寻求一种低成本的刺激，或者是试图夺回对时间的控制权。你真正需要的不是这本小说，而是那个“我终于可以不用做正事，可以随意挥霍时间”的绝对掌控感。这是一种典型的报复性睡前拖延，你是在补偿白天那个极度自律、辛苦付出的自己。真正的深度放松，核心在于减少感官输入。比如单纯地发呆、散步、闭目听轻音乐，或者仅仅是安静地只玩毛线（不看屏幕），让大脑的默认模式网络接管，进入一种漫游和自我修复的状态。\n有点道理，于是我心安理得地在接下来的几天躺平和休息\u0026hellip;也许下周能慢慢恢复一些。\n让 Claude/Codex 接管浏览器？ 算是初步尝试 Claude Code 的各种功能，可以让它帮忙处理各种人来做很麻烦的事情。在用上 CC 后不巧遇上：单词听写网站出故障；默认生词本还出问题（删掉后就必须付费新建）。一怒之下 Vibe 了一个功能差不多的 app。\n文娱 白丁路书 2026 年 01 月 26 日 在听 podcast 听了两集关于中东地区的科普节目。\n中东三强：沙特（阿拉伯，逊尼派），伊朗（波斯，什叶派伊斯兰），土耳其。沙特更大众，伊朗是小众，它们一直打擂台不对付。叙利亚，伊拉克人都是阿拉伯人。\n影像 挑了一天阳光好的下午去寻找上次在阴暗灌木里发现的新鸟。出发的时间有点晚，至少已经四五点了。我走在一条坡度起伏很大的路上，一开始，刚路过池塘时，有几个小黑点灵敏地窜出来，连忙举起望远镜找了半天才发现是一群红头！可惜我相机还没来得及举起，它们就不知道飞到哪去了。后面走了很长一段路，基本一无所获，连常见鸟都不是很多。直到我快走到正门附近，在那个路口稍稍停留，一只鸟突然蹦到我眼前。第一眼我就看出它的身形十分熟悉，某种鸫！这就是我的目标鸟！我心理狂喜，动作情而迅速地留下了此鸟的影像。回来后才知道它的名字-乌灰鸫。再和之前的鸟对比，又不太像了，上次遇见的到底是什么鸟？——这仍是未解之谜。\n学棒针果然没错，这个帽子比钩针勾出来的更轻薄。当然，依旧在尺寸上翻车，可以带但还是有点小。 增加植物和美食浓度^ ^。\n资源 ROS2入门指南 Nav2 - 如何在仿真环境中设置新机器人的详细文档 视频教程 ","date":"2026-03-22T17:23:09+08:00","permalink":"/p/%E5%A4%9A%E9%9B%A8%E7%86%AC%E5%A4%9C%E6%9C%89%E4%B8%80%E7%A7%8D%E6%83%AF%E6%80%A7/","title":"多雨|熬夜有一种惯性"},{"content":"让 Claude/Codex 接管浏览器？ Google Chrome 团队刚发布了一个官方工具，能让 Claude/Codex 直接接管你正在用的浏览器。\nNotion 同步飞书、整理 GitHub star、查 Analytics 数据、删 Twitter 帖子……这些操作在你眼前的真实浏览器窗口里实时发生。\n\u0026hellip;\n现在你日常 80% 的浏览器重复操作，其实都可以扔给 AI 了。\n水群时看到一个工具。Gooogle官方说明应该是这个 ，最新发布时间2025-12-16。\nChrome 地址栏输入：chrome://inspect/ #remote -debugging。勾选 Allow remote debugging。 添加 chrome-devtools 工具到 Claude Code/Codex 1 2 3 4 # Claude Code claude mcp add chrome-devtools -- npx chrome-devtools-mcp@latest --autoConnect # Codex codex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest 重启 Claude Code/Codex，下达指令。 第一次使用可以用下面的命令测试。浏览器会有一个弹窗提醒。 1 Check the performance of https://developers.chrome.com 1 open the google clander,and sum the total time for each activity in the last week. 提示词有一些不足，实际上我提前打开了 google 日历，并不需要它自己打开。实测效果是它自己打开的并没有我的登录信息，最后还是用我打开的页面执行了后续操作。 可以发现本人的记录很混乱，有些活动项重合了。 于是我让 CC 帮我去除一些无关项，合并同类项，并且让它给我生成一个 md 表格。到这一步为止还挺顺利。\n进一步地，我想试试 CC 对网页的实际操作能力，于是我让它在我的日历中将合并项的名字修改。可以看到 CC 在调用各种工具，click、take_snapshot、 press_key、fill、evaluate_script。但最后并没有成功执行任务。\n和 C 老师交流了一下，它给出的结论是：Google Calendar 的前端框架阻止了直接修改 DOM 的方式生效（）。解决方法是需要用模拟真实键盘输入来替代直接赋值。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 我有一个未完成的 Google Calendar 重命名任务。 目标：在 Google Calendar 的 **2026年3月9日至15日** 这周，把以下事件名称改掉（课程类事件不动）： - `钩针` → `毛线`（共2个） - `棒针` → `毛线`（共1个） - `工位` → `工作`（共2个） - `小吃街觅食` → `生活`（共1个） - `吃饭` → `生活`（共1个） 之前的尝试用 `element.value = \u0026#39;新名字\u0026#39;` 直接修改 DOM 失败了，因为 Google Calendar 是 React 应用，框架内部状态没有更新，保存时仍提交旧值。 请用浏览器自动化的方式完成这个任务。对每个事件： 1. 打开该事件的编辑页面 2. 用**模拟真实键盘输入**的方式修改标题（全选后用 `keyboard.type()` 或等效方式逐字符输入），而不是直接赋值给 input.value 3. 点击 Save 保存 4. 回到周视图确认事件名称已更新，再处理下一个 用到的工具\n1 2 3 4 5 6 7 8 9 10 list_pages select_page navigate_page resize_page take_snapshot click press_key type_text evaluate_script wait_for 改三个活动就花了几分钟，token 也花的很快。是太夸张了。\n","date":"2026-03-19T14:19:50+08:00","permalink":"/p/%E6%91%B8%E9%B1%BC%E5%B0%8F%E8%AE%B0%E8%AE%A9-claude/codex-%E6%8E%A5%E7%AE%A1%E6%B5%8F%E8%A7%88%E5%99%A8/","title":"摸鱼小记|让 Claude/Codex 接管浏览器？"},{"content":" 随手拍的郁金香，阳光好拍什么都漂亮！\n本周摘要 博客小更新：跟着云五老师的脚步 把博客换成 Cloudflare Pages ，免费支持私有仓库。 运动：买健身房周卡体验了一周，去了四天，应该会继续练。终于出去骑车，来回十几公里，腿完全不累，手腕一直紧绷有些痛，附近的路况实在太差，有了这次经验于是自信和人约了下下周出去骑车。 毛线：本天才只花了半小时就上手了环形针，现在是 crochet 和 knitting 双修啦。没想到真的在快要热起来的季节开始织冷帽，不过刚好又降温了很适合窝着玩毛线。 学习：简单了解了一些 agent 相关的知识，包括 rule、workflow、skill，当然还有最近很火的 openclaw，个人感觉还没有特别吸引我的地方。又开始复习 C 语言，有热心好友给我分享了付费网课，但进度缓慢，甚至边玩毛线边听课。最近一周里有六天都在练习听力和阅读，听力似乎已经小有感觉，最好的情况基本都能听到（S1)。 娱乐：终于追完《血条》，还看了一部英剧，暂时没找到下一部看的。降温的周天又玩起饥荒。 让 CC 给我总结了一下本周的活动时间。\nActivity Total time 学习 17h 44m 工作 13h 55m 毛线 7h 43m 观影 4h 49m 骑行 4h 00m 娱乐 3h 50m 运动 3h 44m 生活 3h 25m 观鸟 1h 06m 写作 53m 文娱 不眠 第一季 2026 年 04 月 03 日 看过 探案剧能不能不要搞这么多感情线啊\u0026hellip;及其拧巴 tv 敢露血条就杀给你看 2026 年 03 月 10 日 读过 推荐，阅读体验极其舒适，主角全为女性，每个故事都与她们相关。\n另外是成长型作者，入股不亏。\nbook 为什么需要技能？ 在深入探讨技能及其背后的原因之前，让我们先了解一下我们是如何走到这一步的？\n谷歌的 Antigravity 和类似的 AI Agent平台不仅仅是执行严格命令的监听器，而且是能够解释意图、规划多步骤工作流程以及以一定程度的自主性执行复杂任务的推理器。\n为此，它需要所谓的上下文。上下文需要包含本地文件系统、项目结构，并代表用户执行命令。通过集成 MCP 服务器（提供各种工具）可以扩展这些 Agentic 平台的功能，让 Agent 可以基于用户的私有数据来生成响应，并实际操作外部工具和服务，而不仅仅是生成文本。\n这就引出了上下文饱和的问题 。如果将整个代码库、文档库和工具集不加区分地加载到模型的活动内存中会造成显著的延迟和经济开销，这会导致模型混乱，从而产生次优结果。\n假如我们给代理加载了一堆工具，GitHub MCP 服务器（50 个工具）、Playwright MCP 服务器（24 个工具）和 Chrome DevTools MCP 服务器（26 个工具）。 问题在于，我们给代理加载了数百个工具，消耗了 4 万到 5 万个 Token，而最终可能只会用到一个工具。 为了解决这个问题，Anthropic 提出了一个新标准： 智能体技能 。根据定义：\nAgent Skills 是一种轻量级的开放格式，可通过专业知识和工作流扩展 AI agent的功能。\nSkills 代表着从单一上下文加载到渐进式披露的转变。技能不再强制模型在会话开始时“记忆”所有可能的功能，而是允许开发人员将专业知识（例如数据库迁移协议、安全审计工作流程或特定代码审查标准）打包成模块化的、可发现的单元（技能）。\n模型仅向用户展示这些功能的轻量级“菜单”（元数据），并且仅在用户意图与特定技能匹配时才加载复杂的程序知识（指令和脚本）。这避免了工具臃肿，将上下文信息保持在最低限度，并且也具有良好的经济效益。\n影像 ","date":"2026-03-09T18:26:47+08:00","permalink":"/p/%E7%AC%AC%E4%BA%8C%E5%91%A8%E6%97%B6%E9%97%B4%E7%A2%8E%E6%88%90%E5%BE%88%E5%A4%9A%E7%89%87/","title":"第二周|时间碎成很多片"},{"content":"跟着云五老师的脚步 把博客换成 Cloudflare Pages ，免费支持私有仓库！后面发现搜索页面出现了小问题：可以搜索到关键字，但无法打开对应文章，似乎还是指向GitHubPages。最后让 AI 给我解决了，修改了 hugo 设置里的 baseline 以及把搜索使用的路径改为相对路径。\n登录 Cloudflare Pages 首先确保 Hugo 博客已经在本地正常运行，并且推送到 GitHub 的私有仓库（如果已经有就修改设置即可）。\n登录 Cloudflare Dashboard 。选择右上角的Add → Pages → Import an existing Git repository ，选择对应的仓库。\nSet up builds and deployments","date":"2026-03-09T16:45:00+08:00","permalink":"/p/blog%E6%9B%B4%E6%96%B0%E4%BD%BF%E7%94%A8-cloudflare-pages-%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E9%83%A8%E7%BD%B2/","title":"Blog更新：使用 Cloudflare Pages 自动构建部署"},{"content":"跟着云五老师的脚步 把博客换成 Cloudflare Pages ，免费支持私有仓库！后面发现搜索页面出现了小问题：可以搜索到关键字，但无法打开对应文章，似乎还是指向GitHubPages。最后让 AI 给我解决了，修改了 hugo 设置里的 baseline 以及把搜索使用的路径改为相对路径。\n登录 Cloudflare Pages 首先确保 Hugo 博客已经在本地正常运行，并且推送到 GitHub 的私有仓库（如果已经有就修改设置即可）。\n登录 Cloudflare Dashboard 。选择右上角的Add → Pages → Import an existing Git repository ，选择对应的仓库。\nNote 配置项 值 Production branch main Framework preset Hugo Build command hugo Build output directory public 设置环境变量 HUGO_VERSION = 0.137.0），否则可能默认旧版本。\nSave and Deploy Cloudflare 会自动拉取代码、构建并部署。完成后你会获得一个 xxx.pages.dev 的域名。\n迁移完成后，可以把原仓库里的工作流禁用掉。\n配置自定义域名 （可选） 如果有自己的域名：\n在 Cloudflare Pages 项目 → Custom domains → Set up a custom domain 输入你的域名，Cloudflare 会自动添加 DNS 记录 自动颁发 SSL 证书（通常几分钟内完成） ","date":"2026-03-09T16:45:00+08:00","permalink":"/p/blog%E6%9B%B4%E6%96%B0%E4%BD%BF%E7%94%A8-cloudflare-pages-%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E9%83%A8%E7%BD%B2/","title":"Blog更新：使用 Cloudflare Pages 自动构建部署"},{"content":" 练手版包挂，和春天挺搭——\n本周摘要 在家和姐姐家一起过的元宵，我妈难得做了五菜一汤，美美吃了两顿，光吃菜就饱了（喜欢我妈的卤牛肉、丸子和青菜）。 第一次去健身房，刚进去还是有点茫然的，学会用跑步机后又感觉没那么难。希望能坚持练练，运动完真的好饿。另外基本都在练有氧，我想练手臂力量但小重量哑铃只有一对而且对我来说也偏重了\u0026hellip; 开始缓慢地备考雅思，这个阶段（见题期）的目标是熟悉各种题型和把能通过熟练度拿到的分拿下，还清理了收藏各种的方法论。测试模考真的做得稀烂，现在老老实实地从早期剑雅开始练听力 S1S4。 为钩针小物件买了胶枪（真好用），钩好满意的包挂也许会启动冷帽项目（怎么会有人春天勾冷帽） 文娱 用\u0026quot;古典\u0026quot;机器学习检测 LLM 生成的网文 (AIGC 文本检测) 一篇关于网文（ Lofter 上的同人文 ）的AIGC 检测的文章，有点意思，收藏了关于机器学习算法的网站 。\n【伊朗變天】伊朗神權政治由來：從上世紀的卡扎爾王朝說起 | 即食歷史 Cuphistory 原文摘录 二十世纪初，当时统治伊朗的卡扎尔王朝（Qajar Dynasty）十分腐败，国王穆扎法尔丁．沙．卡扎尔（Mozaffar ad-Din Shah Qajar）生活奢华，国家赤字一年比一年多。\n一九○五年，伊朗人终于忍无可忍，当时神职人员、商人与知识分子首次团结起来，共同反对国王专制统治、西方影响以及失衡的现代化社会，伊朗由君主专制变成君主立宪制。这场革命触动了英俄在伊朗的利益，英俄直接出兵干涉，卡扎尔王朝权威尽失.伊朗进入巴列维王朝时期。\n穆罕默德．摩萨台（Mohammad Mosaddegh）是巴列维王朝时期的伊朗首相，是个民族主义者。他大刀阔斧地实行了大量改革，却被英美视为眼中钉。美英支持的一场政变中推翻了摩萨台，重新巩固了伊朗国王权力，伊朗又再次从君主立宪制走了回头路。\n为了重整分崩离析的社会，巴列维王朝国王穆罕默德—礼萨（Mohammad Reza）实行了一次翻天覆地的改革，称为「白色革命」（White Revolution），以推行土地改革、工业化与西化为重点。可是，这场改革来得过分剧烈，传统精英被边缘化、农村经济遭到破坏。伊朗社会不但没有改善，反而比之前更加失衡。\n巴列维王朝实施高压统治，国王与美国及以色列的密切关系更激起了民愤。被逼害并流亡的什叶派神学者鲁霍拉．高美尼（Ruhollah Khomeini）谴责政权腐败及对信仰不敬，他不断透过演讲激励群众。\n德黑兰报纸公开侮辱高美尼，随即引发了学生示威和工人罢工，经济遭到瘫痪，后来更演变成流血冲突，数百万人走上街头。次年，穆罕默德—礼萨逃离伊朗。同年四月，伊朗全民公投确立伊朗成立共和制，延续数千年的波斯—伊朗君主制自此结束。\n一九七八年的伊朗伊斯兰革命彻底改变了伊朗，将其由君主制转变为神权体制，并持续影响区域与全球政治。\n概述 伊朗在1978以前，伊朗的统治制度在君主专制和君主立宪摇摆。20 世纪初的革命曾确立立宪制，但巴列维王朝建立后，尤其是 1953 年英美干涉推翻反西方的摩萨台首相后，国王走向全面专制。\n巴列维王朝的高压统治与腐败引发不满，流亡的神职人员高梅尼通过磁带与讲道文稿传播反抗思想。1978 年 1 月，伊朗官方报纸对高梅尼的侮辱成为导火索，引发学生示威和工人罢工和流血冲突。1979 年初国王逃跑，高梅尼凯旋，数日后军方宣布维持中立，巴列维王朝灭亡。这就是伊朗伊斯兰革命。（早晨阅读报纸是一种世俗仪式。——《想象的共同体》\n1979 年 4 月公投成立伊斯兰共和国，延续数千年的君主制终结。随后，神职人员排挤世俗盟友，废除妇女权利法案，并利用 11 月爆发的美国使馆人质危机巩固神权，确立了“法基赫监护”理论。根据新宪法，高梅尼作为最高领袖拥有绝对权力，并依靠新成立的革命卫队镇压异议。1989 年高梅尼逝世，哈梅内伊通过宪法修正案继任，将这一神权专制体系延续至今。\n2026年 2月 28日，哈梅内伊长达三十七年的统治以一种极其剧烈的方式结束。美国与以色列联合发动了代号为“史诗怒火”的大规模精确空袭，目标直指哈梅内伊在德黑兰的官邸。在此次行动中，八十六岁的哈梅内伊及其多名核心家属、包括国防部长和革命卫队总司令在内的约四十名高级官员共同遇难。\n三月一日，伊朗政府正式证实了这一死讯，并宣布全国进入为期四十天的哀悼期。这一事件不仅是自一九七九年革命以来伊朗统治层遭受的最沉重打击，也标志着“法基赫监护”体制失去了其最重要的政治支柱。由于哈梅内伊在生前并未明确指定具有绝对威望的继任者，权力交接瞬间陷入巨大的不确定性。目前，由伊朗总统佩泽希齐扬、司法总监及其他高层组成的临时领导委员会已接管国家事务，试图在战争威胁与国内动荡的双重压力下维持政权稳定。\n思考 如果套用《想象的共同体》的理论，这个过程是这样的：报纸这种媒介创造了一种“同时性”。当千万人都在同一天清晨阅读到那篇侮辱高梅尼的文章时，尽管读者彼此并不认识，但他们意识到成千上万的同胞正处于完全相同的时刻、面对完全相同的信息。\n官方原本试图通过报纸这种“世俗仪式”来解构高梅尼的神圣性，但结果适得其反：它为所有反对者提供了一个高度同步的“愤怒时刻”。这种同步感让人们在走上街头时，确信自己不是孤身一人，而是一个巨大且统一的“反抗共同体”的一部分。\n文章将高梅尼描述为“外国间谍”或“落后势力”，这在客观上逼迫所有对现实不满的民众——无论是知识分子、商人还是宗教人士——不得不做出选择。通过攻击一个具有象征意义的核心人物，官方报纸反而帮助民众完成了一次身份的重新认同：他们不再将自己想象为巴列维治下的“世俗臣民”，而是想象为被侮辱、被损害的“正义捍卫者”。报纸在这里充当了催化剂，将零散的经济不满和政治诉求，统一编织进了一套以宗教和民族自尊为核心的宏大叙事中。\n影像 鸟 上周的观鸟时间很不幸，阴天还下雨，其实开学前一直想去某公园看铜蓝鹟，现在不知道在不在了。今天天气一般，逛了逛学校，在阴暗的灌木发现了新鸫西（此鸟一直在阴暗地行走，照片实在看不出来是什么） 下面是小鸟吃辣条三连。 花 看到花开了，光秃秃的树枝冒芽了才恍惚意识到：春天好像来了。\n猫 真的遍地是猫，坐在杆子上的那只好惬意，我靠近都懒得睁开眼睛。\n两周后，下面的小猫去世了 TT。\n","date":"2026-03-08T21:25:14+08:00","permalink":"/p/%E5%8D%81%E4%BA%94%E6%98%A5%E5%A4%A9%E8%BD%BB%E8%BD%BB%E5%9C%B0%E6%9D%A5/","title":"十五|春天轻轻地来"},{"content":"是我，我又回来了，这一次，我要夺回属于我的假期！\n本周摘要 在家文娱时间显著增加，边看剧边钩毛线的时间过得飞快啊，怪奇物语在上周看完了TT，这周完成一顶护耳帽并送给姥姥。并激情下单了毛线，想要自己混线用棒针织帽子。 和姐姐玩上了胡闹厨房，第一次联机的网络竟然挺不错的。换完键位脑子和手指打架最后某关两星遗憾离场。 在不干正事方面依旧保留热情，为了更好地摸鱼用上了新的摸鱼模板。另外想到明天就开学就有点悲伤，不想上课，不如在工位摸鱼。 摸鱼小记模板 这两天想到要回到工位了又燃起整理信息源的热情，打算重新启用 inoreader ，并用 instapaper 作为稍后再看的聚合平台。网络摘录方案：使用 Obsidian 官方的浏览器扩展 Obsidian Web Clipper ，可以把带有特定 Callout 风格（比如带有半透明背景和 Lucide 图标的格式）的模板直接写进 Clipper 里。\n右键点击 Obsidian Clipper 图标，选项 - \u0026gt;新建模板，在笔记内容里填入下面的模板。\n1 2 3 4 5 6 7 8 9 ## [{{title}}]({{url}}) \u0026gt; [!quote]+ 原文摘录 \u0026gt; {{content}} \u0026gt; [!note]+ 我的思考 \u0026gt; {{note}} --- 修改设置 模板名称：网络摘录 笔记名称：摸鱼小记 {{date|date:\u0026ldquo;YYYY.MM.DD\u0026rdquo;}} 笔记位置：00-周期笔记/Daily/ {{date|date:\u0026ldquo;YYYY\u0026rdquo;}} / {{date|date:\u0026ldquo;MM\u0026rdquo;}}\n高亮-\u0026gt;保存方式，修改为 替换页面内容。这样就可以在支持高亮的页面只保存高亮内容。\n文娱 思想验证区域：The Community 2026 年 02 月 22 日 看过 看到表演性质淘汰人的剧情弃了，我讨厌的人设还挺多，很多情节剧本太明显很不适。\u0026gt;!另外很可惜河马第一个就离开了!\u0026lt; tv 迁徙的鸟 2026 年 02 月 24 日 看过 画质一般，但总的来说看的很开心。鸭雁类的非常多，飞行的拍摄视角很奇妙，让我很想知道那个时候是怎么拍的。 movie And the winner for best WBD takeover offer is…Paramount 原文摘录 昨天，华纳兄弟从与 Netflix 达成收购协议，变成了与新买家 派拉蒙天空之舞影业达成收购协议。\n当天下午，华纳兄弟董事会宣布，派拉蒙天空之舞公司最新的恶意收购报价优于 此前与 Netflix 达成的协议，并启动了为期四天的反收购倒计时，要求这家流媒体巨头提出反收购方案。然而，到了傍晚，Netflix 却突然退出，拒绝提高报价，最终派拉蒙的报价胜出。\n以下是具体步骤：\n派拉蒙的报价为每股 31 美元，而 Netflix 对华纳兄弟的流媒体和工作室资产的报价为每股 27.75 美元。 派拉蒙的收购报价总价值约为 1110 亿美元，而 Netflix 的报价约为 830 亿美元。 宏观来看：如果交易完成，合并后的派拉蒙、天空之舞、华纳兄弟和探索频道将掌控两大流媒体平台、两家主要新闻网络和两家好莱坞制片厂。——HVL\n思考 好奇这三方到底是什么关系。三家企业分别是华纳兄弟探索、派拉蒙全球以及 Skydance Media。\n华纳兄弟探索是业务涵盖电影制片、电视网络和流媒体服务的全球媒体娱乐巨头。 派拉蒙全球同样是顶尖的多媒体制作公司，运营着派拉蒙影业、CBS 及相关的流媒体平台。Skydance Media 则是一家制片公司，在与派拉蒙合并后，目前由大卫·埃里森领导。\n所以它们之间的关系是：Netflix 先准备收购华纳兄弟探索，后来派拉蒙 Skydance 用大概 1110 亿美元竞标，Netflix 没有加价，所以派拉蒙将收购华纳兄弟探索。\nPills Are Becoming Machines That Work Inside the Gut 原文摘录 不久的将来，医生可能会开出一种药丸，它不仅可以输送药物，还可以报告它在你体内发现的情况——然后根据这些发现采取相应的措施。\n无需预约内窥镜检查或，==只需吞服一颗比复合维生素还小的电子胶囊。胶囊在消化系统中运行期间，可以检查组织健康状况，寻找癌变迹象，并将数据发送给医生。它甚至可以在排出体外前，将药物精准释放到所需部位，或采集微小的活检样本。==\n胃肠道疾病影响着全球数千万人，包括炎症性肠病 、 乳糜泻 和小肠细菌过度生长等疾病。诊断过程通常需要经历一系列令人沮丧的血液检查、影像学检查和侵入性内窥镜检查。与此同时，治疗也可能带来严重的副作用，因为药物会影响全身，而不仅仅是患病的肠道。\n==如果胶囊能够承担大部分工作——简化诊断流程、提供靶向治疗、避免患者反复接受侵入性手术——它们将彻底改变医疗保健。==过去 20 年间，研究人员开发了一系列可摄入式设备，其中一些已投入临床应用。这些胶囊状设备通常包含传感器、电路、电源，有时还包含通信模块，所有组件都封装在生物相容性外壳中。但下一个飞跃仍在研发中：能够感知并执行操作的自主胶囊，例如释放药物或采集组织样本。\n思考 肠胃脆弱人士非常需要，但这种技术即使开发有生之年也很难普及吧。\n影像 毛线项目 由于经验不足，照图解勾出来帽顶很小，还好姥姥头小能带上。 某书一直给我推冷帽，弄得人心痒痒，最后参考了猕猴桃配色选了线。 感谢室友馈赠的牛肉，非常美味~ 资源 一个 OB 插件 —— 可以复制文档到微信公众号，参考文档 。试用后感觉排版一言难尽。\nopenhare —— 基于 Flutter 的跨平台桌面 SQL 查询工具，支持多种数据库，可以 AI 生成 SQL 查询和数据分析。\nWispr Flow —— 刚刚在安卓平台上线。Flow 能将你的语音转换成清晰、可发送的文本，适用于任何应用。\n","date":"2026-02-27T12:30:54+08:00","permalink":"/p/%E5%A4%8D%E5%B7%A5%E5%89%8D%E5%A4%95%E4%B8%80%E5%8E%BB%E4%B8%8D%E5%9B%9E%E7%9A%84%E5%81%87%E6%9C%9F/","title":"复工前夕|一去不回的假期"},{"content":" 非常碰巧拍到它伸展翅膀，一直在沉浸式干饭。\n本周摘要 周末终于结束了长达两周看护老人生活，基本每天我都有鸡零狗碎的事情可以记录。我妈回来之后家里油烟机突然坏掉，快递基本停运，安装的也准备过年去了，只能吃水煮菜或者火锅。 钩好一只鲲，但由于歪歪扭扭太丑，已被我回收，打算重新勾。 Blog 大装修，比较喜欢的是 callout 的样式和折叠功能，以及 neodb 的卡片展示~ 整理我的电子衣柜，发现我总喜欢买裤子哪怕裤子很多。 文娱 看完《怪奇物语》第四季，不是很喜欢这一季的剧情设置。有的人死了又活了又死了。 怪奇物語 (怪奇物语 第四季) 2026 年 02 月 10 日 看过 感情线能不能叉出去，Joyce和hop真的很尴啊，虽然是剧情需要但还是觉得大人线好烂。\nNancy依然是战神，太帅了。收获max的歌单，战歌真的很燃。\ntv 悠游长风 2026 年 02 月 15 日 读过 易读的短篇合集，来自《蜜獾吃书》的推荐，可以当睡前故事看。喜欢里面的插画，每一个都好像是在对应一小段文字。 book 影像 在老地方发现新鸟种。一是小区里出现了一小群红头长尾山雀和灰椋鸟（丝瓜被替代），二是在公园见到超级近的白鹡鸰，加新了黄腹鹨、纯色山鹪莺、棕头鸦雀！\n这次到这个公园完全是碰巧，虽然我本来也准备出门观鸟。在前一天我认识了一个本地的新鸟友，她告诉我另一个公园里有斑鱼狗，旁边的一个有很多小翠，也有大翠！我一听立马决定明天天气好就去看，没想到第二天被姨妈家带去了远一点的公园，收获不错，这个公园的人更少，鸟类更丰富。\n","date":"2026-02-15T11:46:51+08:00","permalink":"/p/%E5%B0%8F%E5%B9%B4%E5%AF%B9%E8%BF%87%E5%B9%B4%E6%AF%AB%E6%97%A0%E5%85%B4%E8%B6%A3/","title":"小年|对过年毫无兴趣"},{"content":"装修参考第三夏尔的装修笔记 ，并依靠 ai 的大力支持。\n折叠功能 callout 样式与折叠 主要靠 vibe，参考 obsidian 的色系，并支持嵌套列表之类的功能。折腾半天最后通过下面的代码块加 quickadd 的捕获功能来同时兼容 obsidian-callout 折叠和博客折叠。\n1 2 3 4 \u0026gt;[!note]- \u0026gt;{{\u0026lt; details title = \u0026#34;{{value:请输入标题}}\u0026#34; \u0026gt;}} \u0026gt;{{value:输入内容}} \u0026gt;{{\u0026lt; /details \u0026gt;}} Note hugo 官方提供展示短代码的方式，在两层大括号里使用 \u0026lt;/* */\u0026gt; 包裹代码，被包裹的部分不会执行。\n样式清单 点击展开 [!NOTE] / [!INFO] — 蓝色注释 / 信息 [!TIP] / [!ABSTRACT] — 青色提示 / 摘要 [!SUCCESS] / [!DONE] — 绿色成功 / 完成 [!WARNING] / [!CAUTION] — 橙色警告 / 注意 [!QUESTION] — 橙色问题 [!FAILURE] / [!DANGER] / [!BUG] — 红色失败 / 危险 / 错误 [!IMPORTANT] — 红色重要 [!EXAMPLE] — 紫色示例 [!QUOTE] — 灰色引用 普通折叠块 来自 Stackoverflow ，效果为简单的黑色箭头。\n创建 \\layouts\\shortcodes\\details.html\n代码 1 2 3 4 5 6 \u0026lt;details {{ if .Get \u0026#34;open\u0026#34; }}open{{ end }}\u0026gt; \u0026lt;summary\u0026gt;{{ .Get \u0026#34;title\u0026#34; | default \u0026#34;点击展开\u0026#34; }}\u0026lt;/summary\u0026gt; \u0026lt;div class=\u0026#34;details-content\u0026#34;\u0026gt; {{ .Inner | markdownify }} \u0026lt;/div\u0026gt; \u0026lt;/details\u0026gt; 样式设置 assets/scss/custom.scss\n代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* 简单的 details 美化 */ details { margin: 1rem 0; padding: 1rem; border: 1px solid var(--card-border); /* 适配 Stack 主题的边框颜色 */ background-color: var(--card-background); /* 适配 Stack 主题的背景 */ border-radius: var(--card-border-radius); summary { cursor: pointer; font-weight: bold; outline: none; } .details-content { margin-top: 1rem; } } 使用方法如下 1 2 3 4 \u0026lt;details\u0026gt; \u0026lt;summary\u0026gt;标题\u0026lt;/summary\u0026gt; 内容 \u0026lt;/details\u0026gt; 页面 在 content 文件夹中修改关于、主页和搜索页，配置图标。 content/home/_index.md\nyaml 1 2 3 4 5 6 7 8 9 10 11 12 --- title: \u0026#34;主页\u0026#34; slug: \u0026#34;home\u0026#34; layout: \u0026#34;home-posts\u0026#34; menu: main: identifier: home url: /home/ weight: 10 params: icon: bubble --- layouts/home/home-posts.html\nyaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 {{ define \u0026#34;main\u0026#34; }} {{ $pages := where .Site.RegularPages \u0026#34;Type\u0026#34; \u0026#34;in\u0026#34; .Site.Params.mainSections }} {{ $filtered := where $pages \u0026#34;Params.hidden\u0026#34; \u0026#34;!=\u0026#34; true }} {{ $pag := .Paginate ($filtered) }} \u0026lt;section class=\u0026#34;article-list\u0026#34;\u0026gt; {{ range $index, $element := $pag.Pages }} {{ partial \u0026#34;article-list/default\u0026#34; . }} {{ end }} \u0026lt;/section\u0026gt; {{- partial \u0026#34;pagination.html\u0026#34; . -}} {{- partial \u0026#34;footer/footer\u0026#34; . -}} {{ end }} {{ define \u0026#34;right-sidebar\u0026#34; }} {{ partial \u0026#34;sidebar/right.html\u0026#34; (dict \u0026#34;Context\u0026#34; . \u0026#34;Scope\u0026#34; \u0026#34;homepage\u0026#34;) }} {{ end }} content/search/index.md\nyaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --- title: \u0026#34;搜索\u0026#34; slug: \u0026#34;search\u0026#34; layout: \u0026#34;search\u0026#34; type: \u0026#34;page\u0026#34; outputs: - html - json menu: main: identifier: search url: /search/ weight: 40 params: icon: search --- 图标可以在 Tabler Icons 中下，并放到主题文件夹的 assets/icons 下，就能在 yaml 中直接设置了。\n页脚 建站计时\u0026amp;字数统计 样式和代码参考自[第三夏尔的装修博客][(https://rwtx.cc/04/2260/uncategorized/) ] 。\n计时逻辑修改 layouts/partials/footer/custom.html。\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \u0026lt;!-- Add blog running time --\u0026gt; \u0026lt;script\u0026gt; let s1 = \u0026#39;2023-3-18\u0026#39;; //website start date s1 = new Date(s1.replace(/-/g, \u0026#34;/\u0026#34;)); let s2 = new Date(); // Calculate the difference let diffInMilliseconds = s2.getTime() - s1.getTime(); let totalDays = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24)); // Create a new date object starting from the initial date let years = s2.getFullYear() - s1.getFullYear(); let months = s2.getMonth() - s1.getMonth(); let days = s2.getDate() - s1.getDate(); // Adjust months and years if necessary if (days \u0026lt; 0) { months -= 1; let prevMonth = new Date(s2.getFullYear(), s2.getMonth(), 0); // Get the last day of the previous month days += prevMonth.getDate(); } if (months \u0026lt; 0) { years -= 1; months += 12; } // Format the result let result = `${years}年${months}月${days}天`; document.getElementById(\u0026#39;runningdays\u0026#39;).innerHTML = result; \u0026lt;/script\u0026gt; 页脚内容修改 layouts/partials/footer/footer.html。发现这个文件会覆盖主题默认的内容，手动加了版权和主题信息。\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \u0026lt;div class=\u0026#34;footer-layout\u0026#34;\u0026gt; \u0026lt;!-- Add blog running time --\u0026gt; \u0026lt;section class=\u0026#34;running-time\u0026#34;\u0026gt; 本博客已稳定运行 \u0026lt;span id=\u0026#34;runningdays\u0026#34; class=\u0026#34;running-days\u0026#34;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/section\u0026gt; \u0026lt;!-- Add copyright notice --\u0026gt; \u0026lt;section class=\u0026#34;copyright-notice\u0026#34;\u0026gt; © 2024 - 2026 新喀鸦006 All rights reserved. 禁止转载。如需引用，请注明文章链接。 \u0026lt;/section\u0026gt; \u0026lt;!-- Add total page and word count time --\u0026gt; \u0026lt;section class=\u0026#34;totalcount\u0026#34;\u0026gt; {{$scratch := newScratch}} {{ range (where .Site.Pages \u0026#34;Kind\u0026#34; \u0026#34;page\u0026#34; )}} {{$scratch.Add \u0026#34;total\u0026#34; .WordCount}} {{ end }} 发表了{{ len (where .Site.RegularPages \u0026#34;Section\u0026#34; \u0026#34;post\u0026#34;) }}篇文章 · 总计{{ div ($scratch.Get \u0026#34;total\u0026#34;) 1000.0 | lang.FormatNumber 2 }}k字 \u0026lt;/section\u0026gt; \u0026lt;section class=\u0026#34;footer-credits\u0026#34;\u0026gt; 使用 Hugo 构建 \u0026lt;/section\u0026gt; \u0026lt;section class=\u0026#34;footer-credits\u0026#34;\u0026gt; 主题 Stack 由 Jimmy 设计 \u0026lt;/section\u0026gt; \u0026lt;/div\u0026gt; 样式修改 assets/scss/partials/footer.scss。\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 // 底部距离 main.main { padding-bottom: 4rem; } .footer-layout { display: flex; flex-direction: column; gap: 5px; } .running-time { color: var(--card-text-color-secondary); font-weight: normal; font-size: 14px; .running-days { font-weight: bold; color: var(--emphasize-text-color); } } .totalcount { color: var(--card-text-color-secondary); font-weight: normal; font-size: 14px; } .copyright-notice { font-weight: bold; color: #8fbc8f; font-size: 14px; } .footer-credits { color: #a0a0a0; font-size: 12px; font-weight: normal; } 页脚分割符 在 assets/scss/partials/footer.scss 的 .running-time 类中添加了 ::before 伪元素实现的视觉分隔符。\nNote 1 2 3 4 5 6 7 8 9 10 11 12 13 .running-time { color: var(--card-text-color-secondary); font-weight: normal; font-size: 14px; \u0026amp;::before { content: \u0026#34;\u0026#34;; display: block; width: 50px; height: 3px; background: #B0B0B0; margin: 0 0 20px; // 左对齐，下边距 20px } 链接 外部链接显示图标 创建 layouts/_default/_markup/render-link.html 。\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 \u0026lt;a class=\u0026#34;link\u0026#34; href=\u0026#34;{{ .Destination | safeURL }}\u0026#34; {{ with .Title}} title=\u0026#34;{{ . }}\u0026#34;{{ end }}{{ if strings.HasPrefix .Destination \u0026#34;http\u0026#34; }} target=\u0026#34;_blank\u0026#34; rel=\u0026#34;noopener\u0026#34;{{ end }}\u0026gt;{{ .Text | safeHTML }} {{- if strings.HasPrefix .Destination \u0026#34;http\u0026#34; }} \u0026lt;span style=\u0026#34;white-space: nowrap;\u0026#34;\u0026gt;\u0026lt;svg width=\u0026#34;.7em\u0026#34; height=\u0026#34;.7em\u0026#34; viewBox=\u0026#34;0 0 21 21\u0026#34; xmlns=\u0026#34;http://www.w3.org/2000/svg\u0026#34;\u0026gt; \u0026lt;path d=\u0026#34;m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z\u0026#34; fill=\u0026#34;currentColor\u0026#34; /\u0026gt; \u0026lt;path d=\u0026#34;M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z\u0026#34; fill=\u0026#34;currentColor\u0026#34; /\u0026gt; \u0026lt;/svg\u0026gt;\u0026lt;/span\u0026gt; {{- end -}} \u0026lt;/a\u0026gt; 内部链接支持Obsidian 链接 格式为： [Link Text](Filename.md)\nlayouts/_default/_markup/render-link.html\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 {{- $dest := .Destination -}} {{- $isRemote := or (strings.HasPrefix $dest \u0026#34;http\u0026#34;) (strings.HasPrefix $dest \u0026#34;mailto\u0026#34;) -}} {{- if not $isRemote -}} {{- $urlParts := split $dest \u0026#34;#\u0026#34; -}} {{- $path := index $urlParts 0 -}} {{- $anchor := \u0026#34;\u0026#34; -}} {{- if gt (len $urlParts) 1 -}} {{- $anchor = printf \u0026#34;#%s\u0026#34; (delimit (after 1 $urlParts) \u0026#34;#\u0026#34;) -}} {{- end -}} {{- $page := .Page.GetPage $path -}} {{- if $page -}} {{- $dest = printf \u0026#34;%s%s\u0026#34; $page.RelPermalink $anchor -}} {{- else -}} {{- /* Attempt to find by filename (Obsidian style) */ -}} {{- $filename := path.Base $path -}} {{- $name := $filename | strings.TrimSuffix (path.Ext $filename) -}} {{- range site.RegularPages -}} {{- if or (eq .File.LogicalName $filename) (eq .File.ContentBaseName $name) -}} {{- $dest = printf \u0026#34;%s%s\u0026#34; .RelPermalink $anchor -}} {{- break -}} {{- end -}} {{- end -}} {{- end -}} {{- end -}} \u0026lt;a class=\u0026#34;link\u0026#34; href=\u0026#34;{{ $dest | safeURL }}\u0026#34; {{ with .Title}} title=\u0026#34;{{ . }}\u0026#34; {{ end }}{{ if strings.HasPrefix .Destination \u0026#34;http\u0026#34; }} target=\u0026#34;_blank\u0026#34; rel=\u0026#34;noopener\u0026#34; {{ end }}\u0026gt;{{ .Text | safeHTML }} {{- if strings.HasPrefix .Destination \u0026#34;http\u0026#34; }} \u0026lt;span style=\u0026#34;white-space: nowrap;\u0026#34;\u0026gt;\u0026lt;svg width=\u0026#34;.7em\u0026#34; height=\u0026#34;.7em\u0026#34; viewBox=\u0026#34;0 0 21 21\u0026#34; xmlns=\u0026#34;http://www.w3.org/2000/svg\u0026#34;\u0026gt; \u0026lt;path d=\u0026#34;m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z\u0026#34; fill=\u0026#34;currentColor\u0026#34; /\u0026gt; \u0026lt;path d=\u0026#34;M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z\u0026#34; fill=\u0026#34;currentColor\u0026#34; /\u0026gt; \u0026lt;/svg\u0026gt;\u0026lt;/span\u0026gt; {{- end -}} \u0026lt;/a\u0026gt; macOS 风代码块 修改主题文件夹下 assets/scss/partials/layout/article.scss 中的 .highlight 部分。\n1 2 3 4 5 6 7 8 9 .highlight { background-color: var (--pre-background-color); padding: var (--card-padding); position: relative; border-radius: 10px; max-width: 100% !important; margin: 0 !important; box-shadow: var (--shadow-l1) !important; ...} 在根目录创建 static/img/code-header.svg 。\n1 2 3 4 5 \u0026lt;svg xmlns=\u0026#34;http://www.w3.org/2000/svg\u0026#34; version=\u0026#34;1.1\u0026#34; x=\u0026#34;0px\u0026#34; y=\u0026#34;0px\u0026#34; width=\u0026#34;450px\u0026#34; height=\u0026#34;130px\u0026#34;\u0026gt; \u0026lt;ellipse cx=\u0026#34;65\u0026#34; cy=\u0026#34;65\u0026#34; rx=\u0026#34;50\u0026#34; ry=\u0026#34;52\u0026#34; stroke=\u0026#34;rgb(220,60,54)\u0026#34; stroke-width=\u0026#34;2\u0026#34; fill=\u0026#34;rgb(237,108,96)\u0026#34;/\u0026gt; \u0026lt;ellipse cx=\u0026#34;225\u0026#34; cy=\u0026#34;65\u0026#34; rx=\u0026#34;50\u0026#34; ry=\u0026#34;52\u0026#34; stroke=\u0026#34;rgb(218,151,33)\u0026#34; stroke-width=\u0026#34;2\u0026#34; fill=\u0026#34;rgb(247,193,81)\u0026#34;/\u0026gt; \u0026lt;ellipse cx=\u0026#34;385\u0026#34; cy=\u0026#34;65\u0026#34; rx=\u0026#34;50\u0026#34; ry=\u0026#34;52\u0026#34; stroke=\u0026#34;rgb(27,161,37)\u0026#34; stroke-width=\u0026#34;2\u0026#34; fill=\u0026#34;rgb(100,200,86)\u0026#34;/\u0026gt; \u0026lt;/svg\u0026gt; 在根目录下的 assets/scss/custom.scss 添加代码块的样式：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 为代码块顶部添加 macos 样式 .article-content { .highlight:before { content: \u0026#34;\u0026#34;; display: block; background: url(/img/code-header.svg); height: 25px; width: 100%; background-size: 52px; background-repeat: no-repeat; margin-top: -10px; margin-bottom: 0; } } 首页标签云显示数目 layouts\\partials\\widget\\categories.html\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 {{- $context := .Context -}} {{- $limit := default 10 .Params.limit -}} \u0026lt;section class=\u0026#34;widget tagCloud\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;widget-icon\u0026#34;\u0026gt; {{ partial \u0026#34;helper/icon\u0026#34; \u0026#34;categories\u0026#34; }} \u0026lt;/div\u0026gt; \u0026lt;h2 class=\u0026#34;widget-title section-title\u0026#34;\u0026gt;{{ T \u0026#34;widget.categoriesCloud.title\u0026#34; }}\u0026lt;/h2\u0026gt; \u0026lt;div class=\u0026#34;tagCloud-tags\u0026#34;\u0026gt; {{ range first $limit $context.Site.Taxonomies.categories.ByCount }} \u0026lt;a href=\u0026#34;{{ .Page.RelPermalink }}\u0026#34; class=\u0026#34;font_size_{{ .Count }}\u0026#34;\u0026gt; {{ .Page.Title }} \u0026lt;span class=\u0026#34;count\u0026#34;\u0026gt;{{ .Count }}\u0026lt;/span\u0026gt; \u0026lt;/a\u0026gt; {{ end }} \u0026lt;/div\u0026gt; \u0026lt;/section\u0026gt; layouts/partials/widget/tag-cloud.html\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 {{- $context := .Context -}} {{- $limit := default 10 .Params.limit -}} \u0026lt;section class=\u0026#34;widget tagCloud\u0026#34;\u0026gt; \u0026lt;div class=\u0026#34;widget-icon\u0026#34;\u0026gt; {{ partial \u0026#34;helper/icon\u0026#34; \u0026#34;tag\u0026#34; }} \u0026lt;/div\u0026gt; \u0026lt;h2 class=\u0026#34;widget-title section-title\u0026#34;\u0026gt;{{ T \u0026#34;widget.tagCloud.title\u0026#34; }}\u0026lt;/h2\u0026gt; \u0026lt;div class=\u0026#34;tagCloud-tags\u0026#34;\u0026gt; {{ range first $limit $context.Site.Taxonomies.tags.ByCount }} \u0026lt;a href=\u0026#34;{{ .Page.RelPermalink }}\u0026#34;\u0026gt; {{ .Page.Title }} \u0026lt;span class=\u0026#34;count\u0026#34;\u0026gt;{{ .Count }}\u0026lt;/span\u0026gt; \u0026lt;/a\u0026gt; {{ end }} \u0026lt;/div\u0026gt; \u0026lt;/section\u0026gt; assets\\scss\\custom.scss\n1 2 3 4 5 6 7 8 9 10 .tagCloud .tagCloud-tags a { display: flex; align-items: center; justify-content: space-between; .count { color: var(--card-text-color-tertiary); margin-left: 0.5rem; } } Neodb 短评卡片 hugo 版本为 v0.154.3, 参考这里中Hugo v0.123.0 及之后的版本。不知道为什么直接使用有一些问题，让 ai 修改了一下。\n1 {{\u0026lt; neodb-review \u0026#34;https://neodb.social/...\u0026#34; \u0026gt;}} 注意获取的 token 只给可读权限。\nlayouts/shortcodes/neodb-review.html","date":"2026-02-10T12:01:00+08:00","permalink":"/p/blog%E8%A3%85%E4%BF%AE%E5%85%B6%E4%B8%80/","title":"Blog装修其一"},{"content":" 带上新年围巾的咪~\n本周摘要 完完全全在家里待了一周，充满了鸡零狗碎的事情，没有任何时间静下来学习，休息也只想脑袋空空地玩游戏或者钩针追剧，没有看书或者学习的心思\u0026hellip; 慢慢适应家里的温度，口腔溃疡快好了，头也没那么痛，下周开始学习。 给家里大更新，丢了旧东西换了新东西，厨房一个大置物架，调料置物架，墙壁挂钩。厕所的水箱和浴霸，清洁用品（马桶刷、垃圾夹、魔术扫把）。换了浴霸暖和多了，即使水温不稳定（可能是因为我总动开关）也不会太冷，洗澡自由。 钩针完成给灰的围巾，本来想给另一个朋友做个小东西作为见面礼物，结果来不及做好了，这个小物件的要点是无痕换线，现在已经可以很熟练了。 怪奇物语看到第四季觉得有点没意思，不如前面看起来有感触。 好像是第一次在超市里选肉买肉，跟着别人挑了猪前腿，颜色鲜红，应该是新鲜的。 图 上周就钩好了，回家缝了眼睛，可以绑在包带之类的地方。 ","date":"2026-02-08T19:50:00+08:00","permalink":"/p/%E7%AB%8B%E6%98%A5%E5%B1%85%E5%AE%B6%E5%B0%8F%E8%AE%B0/","title":"立春|居家小记"},{"content":" 姐姐送的小礼物，她说忍不住修剪我还以为是盆栽呢，完全没猜到。还没观到猫就拥有了手工猫，希望今年能遇到猫头鹰~\n本周摘要 周中开始看怪奇物语，回家更是猛猛看，周六就看完第二季，个人更喜欢第二季合作打 boss。观影过程中很不幸地发现电脑喇叭开始出现杂音，重启好了一会又会出现，希望有救。本来想和我姐一起看来着，这下好了，已经甩了她两季。 本周观鸟在学校加新了星头啄木鸟（！），很久之前特意找反而没有任何结果。似乎又遇见上周的普通鵟，而且看到了正脸，超级好奇的一直盯着我的镜头。另外很开心，继续在熟悉的地点和老朋友们不期而遇。下周想要找个好天气去附近的湖或者公园探索。 这次回家坐了新线路，比之前要方便很多，不需要过马路。到家又需要重建我的生活秩序，回家除了先休息就是清理垃圾做卫生\u0026hellip; 还要对抗寒冷，无法适应，我的房间比学校宿舍要冷得多。放假前还想回来干点活，现在 os：下次回家再想吧。 钩了一只组装鹅，参考了三份图解。不得不说钩针也需要一点点数学能力，现在我都能发现图解的问题，比如很明显的针数错误\u0026hellip; 给灰灰的礼物进展不是很顺利，等我勾到第三排（100 /row），发现第一排短针都歪歪的，于是拆完重新勾，绝望地发现还是直不了。 给博客装修了书影游页面，不知道有什么用，但弄的时候挺有热情，弄完又觉得累赘。这个人是不是有毛病。另外在更新博文的时候遇到了时区的问题，好像是：本地的设置没有带时区信息，导致被解析成未来的时间没有成功发布。 发散碎片 Cite 虽然觉醒，但却没有觉悟。 虽然想改变现状，但是又不想付出代价。\nCite 这可能是目前最好的相处方式：冷淡有礼、看重对方，却又无法接受对方的生活方式。\n图 ","date":"2026-02-01T12:00:00+08:00","permalink":"/p/%E8%85%8A%E5%85%AB%E5%9B%9E%E5%AE%B6%E4%B8%8E%E7%A7%A9%E5%BA%8F%E6%84%9F/","title":"腊八|回家与秩序感"},{"content":"数据同步选用方案B，单独数据仓库。\n然后是前端界面。顶部tag：最近 / 文 / 影 / 听/ 游，Tab 内支持排序与筛选（最近、评分、完成时间），最近tag显示过去几个月的混合流。\n本笔记是和 AI 交流得出的方案，可以先聊好需求，再最小化实践。\n不知道为什么数据仓库没有活动但这个页面的数据却在更新（2026.4.3），可能是因为我用了 cloudfare?\n展示样式 Tabs\n最近：显示过去 N 天（默认 90）的混合流（book+movie+tv+podcast+game） 文：book 影：movie + tv（卡片角标区分） 听：podcast 游：game 排序\n最近：created_time desc 评分：rating desc（null 放最后） 筛选（建议最小可用集）\n时间范围（仅“最近”Tab）：30/90/180 天 子类型（仅“影”Tab）：电影/剧集 仅有短评：开关 标签：下拉多选（从 index 里聚合 tags） Drawer（不跳页 + 支持可分享 URL） 实现“打开抽屉但不刷新页面”的同时，把状态写进 URL：\n/media/?tab=ying\u0026amp;id=\u0026lt;uuid\u0026gt;\u0026amp;sort=recent\u0026amp;days=90\n用 history.pushState，关闭抽屉时移除 id。 抽屉展示：\n你的评分 + 你的短评（来自 index） “在 NeoDB 打开”链接 数据仓库 新建一个github repo neodb-media-data\n获取 Neodb Token 点击头像-设置，下滑到底部，点击查看已授权的应用程序 ，创建新的Personal Token 并记录。\n在数据仓库的 Settings → Secrets and variables → Actions 的 Repository secrets 创建：\nName：NEODB_TOKEN Secret：你的 token 在Settings → Pages → Build and deployment → Source：选择 GitHub Actions\n下一步用最小 Workflow podcast complete 输出 index.json，看是否能成功读取数据。\nWorkflow 逻辑—— 参考AsyncX 博客 每天跑一次 + 支持手动触发：\n分别拉：book / movie / tv / podcast / game 的 complete 列表（分页拉完） 生成/更新 index.json 找出 index 里新出现的 uuid（或 detail 缺失的 uuid） 对这些 uuid 调用条目详情接口，写入 detail/{type}/{uuid}.json 若 index.json 或 detail 有变化才 commit 创建 .github/workflows/neodb-sync-and-pages.yml\nNote 点击展开 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 name: Sync NeoDB Podcast (complete) on: workflow_dispatch: schedule: - cron: \u0026#34;23 2 * * *\u0026#34; # 每天 UTC 02:23 跑一次 permissions: contents: write jobs: sync: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: \u0026#34;3.11\u0026#34; - name: Install deps run: | python -m pip install --upgrade pip pip install requests - name: Fetch NeoDB shelf (podcast complete) -\u0026gt; index.json env: NEODB_TOKEN: ${{ secrets.NEODBTOKEN }} NEODB_BASE: https://neodb.social run: | python - \u0026lt;\u0026lt;\u0026#39;PY\u0026#39; import os, json, time import requests from datetime import datetime, timezone base = os.getenv(\u0026#34;NEODB_BASE\u0026#34;, \u0026#34;https://neodb.social\u0026#34;).rstrip(\u0026#34;/\u0026#34;) token = os.environ[\u0026#34;NEODB_TOKEN\u0026#34;] # 抓 podcast + complete url_tpl = f\u0026#34;{base}/api/me/shelf/progress?category=podcast\u0026amp;page={{page}}\u0026#34; headers = { \u0026#34;Authorization\u0026#34;: f\u0026#34;Bearer {token}\u0026#34;, \u0026#34;Accept\u0026#34;: \u0026#34;application/json\u0026#34;, \u0026#34;User-Agent\u0026#34;: \u0026#34;neodb-sync-github-actions\u0026#34; } items = [] page = 1 while True: url = url_tpl.format(page=page) r = requests.get(url, headers=headers, timeout=30) if r.status_code != 200: raise SystemExit(f\u0026#34;Request failed: {r.status_code} {r.text[:2000]}\u0026#34;) data = r.json() # NeoDB 常见返回：{\u0026#34;data\u0026#34;:[...], \u0026#34;count\u0026#34;:..., ...} page_items = data.get(\u0026#34;data\u0026#34;) or [] if not page_items: break items.extend(page_items) page += 1 time.sleep(0.2) # 轻微限速，避免打太快 out = { \u0026#34;generated_at\u0026#34;: datetime.now(timezone.utc).isoformat(), \u0026#34;source\u0026#34;: { \u0026#34;base\u0026#34;: base, \u0026#34;shelf\u0026#34;: \u0026#34;complete\u0026#34;, \u0026#34;category\u0026#34;: \u0026#34;podcast\u0026#34;, }, \u0026#34;count\u0026#34;: len(items), \u0026#34;items\u0026#34;: items, } with open(\u0026#34;index.json\u0026#34;, \u0026#34;w\u0026#34;, encoding=\u0026#34;utf-8\u0026#34;) as f: json.dump(out, f, ensure_ascii=False, indent=2) print(f\u0026#34;Wrote index.json with {len(items)} items\u0026#34;) PY - name: Commit \u0026amp; push if changed run: | if git diff --quiet -- index.json; then echo \u0026#34;No changes in index.json\u0026#34; exit 0 fi git config user.name \u0026#34;github-actions[bot]\u0026#34; git config user.email \u0026#34;github-actions[bot]@users.noreply.github.com\u0026#34; git add index.json git commit -m \u0026#34;chore: sync neodb podcast complete\u0026#34; git push 做完这一步，可以把 index.json 的公开地址发给 AI，让它给出之前讨论好方案的完整版。\nHugo 仓库 本地测试 先在本地修改到满意, 最后的版本是 AI 写的也没细看，有些 bug 但暂时没管，推到线上和本地效果一致\n新增页面 content/media/index.md\n1 2 3 4 --- title: \u0026#34;影音\u0026#34; layout: \u0026#34;media\u0026#34; --- 新增 layout layouts/_default/media.html\n1 2 3 4 5 6 7 8 9 10 11 12 {{ define \u0026#34;main\u0026#34; }} \u0026lt;h1\u0026gt;{{ .Title }}\u0026lt;/h1\u0026gt; \u0026lt;div id=\u0026#34;media-app\u0026#34;\u0026gt; \u0026lt;p\u0026gt;Loading media data…\u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;script\u0026gt; window.NEODB_DATA_URL = \u0026#34;https://yohakuo.github.io/neodb-media-data/index.json\u0026#34;; \u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;/js/neodb-media.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; {{ end }} 新建 JS static/js/neodb-media.js\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 (async function () { const root = document.getElementById(\u0026#34;media-app\u0026#34;); const url = window.NEODB_DATA_URL; try { const res = await fetch(url); if (!res.ok) throw new Error(res.status); const data = await res.json(); root.innerHTML = ` \u0026lt;p\u0026gt;Items: ${data.count}\u0026lt;/p\u0026gt; \u0026lt;ul\u0026gt; ${data.items.slice(0, 10).map(it =\u0026gt; ` \u0026lt;li\u0026gt; ${it.item?.display_title || \u0026#34;Untitled\u0026#34;} (${it._category}, ${it._shelf}) \u0026lt;/li\u0026gt; `).join(\u0026#34;\u0026#34;)} \u0026lt;/ul\u0026gt; `; } catch (e) { root.innerHTML = `\u0026lt;pre\u0026gt;Failed to load data: ${e}\u0026lt;/pre\u0026gt;`; } })(); ","date":"2026-01-26T10:52:00+08:00","permalink":"/p/blog%E6%96%B0%E5%A2%9E%E4%B9%A6%E5%BD%B1%E6%B8%B8%E9%A1%B5/","title":"Blog新增书影游页"},{"content":" 一周没好好记录，导致这周启动困难\n本周摘要 感冒好了，再也不想感冒！周二下了初雪，积了一层，没过几天就化完了，不知道还会不会再下 钩针入门第四周，买了新针，勾好第二个小包。两个包学到一些基础花样的织法，陪我度过很长的原本无聊的时间。下一个作品挑战一下小的装饰物，勾个长脖白鹭，还有夜鹭，另外还要给灰灰的小围巾和项圈没开始\u0026hellip; 清单列得满满的 新钩针虽然摸起来舒服，但容易手滑\u0026hellip; 收到观鸟入门机，狂拍一下午，多图预警 好像加新了普通鵟\n不叫的时候非常萌的鸟，也有人说是武汉市鸟\n第一次看到这么细节的小䴙鹈\n拍了最久也没拍清楚的某种柳莺，无法战胜\n完全意料之外的北红尾鸲，太可爱了\n留下苍师傅和白师傅的证件照片\n坚强开着的花\n非常亲人的咪，可惜我没有猫粮（莫名愧疚）\n和老师讨论实验方案，找到好几篇论文看思路，打算参考其中一篇的指标做初步的计划，打算下周和老师继续聊 下周就放假啦！期待今年和姐姐回老家的探险计划 ","date":"2026-01-25T21:07:00+08:00","permalink":"/p/%E5%88%9D%E9%9B%AA%E9%98%B3%E5%85%89%E6%98%8E%E5%AA%9A%E7%9A%84%E6%98%9F%E6%9C%9F%E5%85%AD/","title":"初雪|阳光明媚的星期六"},{"content":"从hexo到hugo博客的迁移，保留原工作流——由Obsidian Enveloppe 插件上传到仓库，然后由 GitHub 工作流构建和部署。\n有想换 hugo 的想法很久了，出怕麻烦的心理一直没有行动，总的来说还算成功， hugo 真的很快！\n安装与启动 Windows 安装步骤\n1 2 3 4 # 使用 Chocolatey,记得开管理员权限 choco install hugo-extended # 或者直接下载：https://github.com/gohugoio/hugo/releases 本地搭建 Hugo + Stack，熟悉结构\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 1. 创建新站点 hugo new site my-blog # 2. 进入站点目录 cd my-blog # 3. 初始化 Git 仓库 git init # 4. 添加 Stack 主题作为子模块 git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack # 5. 复制示例配置 copy themes\\hugo-theme-stack\\exampleSite\\hugo.yaml hugo.yaml 1 2 # 创建文章目录，把测试文章放进去 mkdir -p content/post 1 2 # 启动本地服务器 hugo server -D 1 hugo server -D --baseURL http://localhost:1313/ --appendPort=false 基本设置 详情参考 hugo官方文档 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 baseurl = \u0026#34;http://用户名.github.io/\u0026#34; languageCode = \u0026#34;zh-cn\u0026#34; theme = \u0026#34;hugo-theme-stack\u0026#34; title = \u0026#34;\u0026#34; description = \u0026#34;\u0026#34; copyright = \u0026#34;新喀鸦006\u0026#34; DefaultContentLanguage = \u0026#34;zh-cn\u0026#34; # 中文需要打开 hasCJKLanguage = true [author] name = homepage = \u0026#34;\u0026#34; # 分页设置 [pagination] pagerSize = 10 [permalinks] post = \u0026#34;/p/:slug/\u0026#34; page = \u0026#34;/:slug/\u0026#34; 主题配置 在 hugo.toml 中修改，下面的笔记也都是toml stack主题配置说明 全站设置 [Params] 下的字段\n1 2 3 4 5 6 7 8 9 [params] # 首页和存档页面显示的内容 mainSections = [ \u0026#34;post\u0026#34; ] # 获取页面的特色图片的 Front Matter 字段 featuredImageField = \u0026#34;image\u0026#34; # 将页面完整内容输出为 RSS rssFullContent = true # 网站图标路径 favicon = \u0026#34;favicon.png\u0026#34; Note Hugo 在生成网站时，会将 static目录下的所有内容直接复制到网站的根目录下。\n自定义菜单 该主题包含两个菜单：主菜单（ menu.main ）和社交菜单（ menu.social ，仅显示图标）。它们的配置方式类似。\n如果该菜单是一个独立页面，建议直接在新建的 content/media/index.md 中添加 menu 字段\n1 2 3 4 5 6 menu: main: name: title (optional) weight: -90 params: icon: icon-name 如果该菜单不是页面建议修改 hugo.toml\n1 2 3 4 5 6 7 8 [menu] main = [ ] [[menu.social]] identifier = \u0026#34;github\u0026#34; name = \u0026#34;GitHub\u0026#34; url = \u0026#34;https://github.com/whiths600\u0026#34; [menu.social.params] icon = \u0026#34;brand-github\u0026#34; 主题附带了一些来自 Tabler Icons 的 SVG 图标。可以在主题文件夹的 assets/icons 下找到它们。加入更多图标，只需下载并放入 assets/icons 文件夹里。\n日期格式 1 2 3 [params.dateFormat] published = \u0026#34;Jan 02, 2006\u0026#34; lastUpdated = \u0026#34;Jan 02, 2006 15:04 MST\u0026#34; 侧边栏 与左侧侧边栏相关的设置。\n1 2 3 4 5 6 7 8 [params.sidebar] emoji = \u0026#34;\u0026#34; subtitle = \u0026#34;\u0026#34; # 网站标题下方 compact = false #侧边栏的精简版 [params.sidebar.avatar] enabled = true local = true src = \u0026#34;avatar.png\u0026#34; 文章页 1 2 3 4 5 6 7 8 [params.article] math = false toc = true readingTime = true headingAnchor = true [params.article.license] enabled = true default = \u0026#34;Licensed under CC BY-NC-SA 4.0\u0026#34; headingAnchor 开启用 # 显示标题等级\n评论 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [params.comments] enabled = true provider = \u0026#34;disqus\u0026#34; [params.comments.disqusjs] [params.comments.utterances] issueTerm = \u0026#34;pathname\u0026#34; [params.comments.beaudar] issueTerm = \u0026#34;pathname\u0026#34; [params.comments.remark42] [params.comments.vssue] autoCreateIssue = false [params.comments.waline] emoji = [ \u0026#34;https://unpkg.com/@waline/emojis@1.0.1/weibo\u0026#34; ] requiredMeta = [ \u0026#34;name\u0026#34;, \u0026#34;email\u0026#34;, \u0026#34;url\u0026#34; ] [params.comments.waline.locale] admin = \u0026#34;Admin\u0026#34; [params.comments.twikoo] [params.comments.cactus] defaultHomeserverUrl = \u0026#34;https://matrix.cactus.chat:8448\u0026#34; serverName = \u0026#34;cactus.chat\u0026#34; siteName = \u0026#34;\u0026#34; [params.comments.giscus] reactionsEnabled = 1 emitMetadata = 0 [params.comments.gitalk] [params.comments.cusdis] 小工具 放置在博客的右侧边栏。它们用于显示一些信息，如分类、标签等。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [[params.widgets.homepage]] type = \u0026#34;search\u0026#34; [[params.widgets.homepage]] type = \u0026#34;archives\u0026#34; [params.widgets.homepage.params] limit = 5 [[params.widgets.homepage]] type = \u0026#34;categories\u0026#34; [params.widgets.homepage.params] limit = 10 [[params.widgets.homepage]] type = \u0026#34;tag-cloud\u0026#34; [params.widgets.homepage.params] limit = 10 [[params.widgets.page]] type = \u0026#34;toc\u0026#34; archives/search 页使用前需要创建，并设置元数据为：layout: archives/search\n图像处理 主题使用 Hugo 内置的图像处理功能来调整和优化本地图像大小（包含页面捆绑功能）。\n默认是开启的，如果速度很慢可以考虑关闭。\n工作流 这个和本地的版本有一些差距可能会各种报错\u0026hellip; 改了几个工具的版本才成功\n创建 .github/workflows/hugo.yml\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 name: Deploy Hugo Blog to Pages on: push: branches: - main workflow_dispatch: # 设置 GitHub Pages 部署权限 permissions: contents: read pages: write id-token: write # 避免并发部署 concurrency: group: \u0026#34;pages\u0026#34; cancel-in-progress: false defaults: run: shell: bash jobs: build: runs-on: ubuntu-latest env: HUGO_VERSION: 0.139.3 steps: - name: Install Hugo CLI run: | wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \\ \u0026amp;\u0026amp; sudo dpkg -i ${{ runner.temp }}/hugo.deb - name: Checkout uses: actions/checkout@v4 with: submodules: recursive # 拉取主题 submodule fetch-depth: 0 - name: Setup Pages id: pages uses: actions/configure-pages@v4 - name: Build with Hugo env: HUGO_ENVIRONMENT: production HUGO_ENV: production run: | hugo \\ --gc \\ --minify \\ --baseURL \u0026#34;${{ steps.pages.outputs.base_url }}/\u0026#34; - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: ./public deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 创建.gitignore\n1 2 3 4 5 6 7 8 # 忽略生成的静态网站目录 public/ resources/_gen/ # 忽略系统和编辑器生成的临时文件 .hugo_build.lock .DS_Store Thumbs.db GitHub 配置 新建一个仓库命名为 用户名.github.io （可选）\n1 2 # 添加远程仓库 git remote add origin https://github.com/用户名/用户名.github.io.git 如果电脑保存过其它账号\n1 git remote set-url origin https://用户名@github.com/用户名/用户名.github.io.git 推送到 GitHub\n1 2 3 4 5 6 git add . # 提交 git commit -m \u0026#34;Migrate from Hexo to Hugo with Stack theme\u0026#34; git push -u origin main 进入 GitHub 仓库，点 Settings → Pages，Source 选择 \u0026ldquo;GitHub Actions\u0026quot;。\n配置 Obsidian Enveloppe 插件（可选） 插件的作用是将指定笔记推送到 github 仓库\n点击 github 头像里面的 Settings - Developer Settings 选择 Token (classic)，创建一个 Personal Access Token (classic)，勾选 repo 权限。\n下面是 Envelope配置的部分。\nGitHub config\nAPI Type：Free/Pro/Team (default) GitHub username：用户名 Repository name ：用户名.github.io GitHub token：Token Main branch：main Automatically merge pull requests：True 设置为 False 需要到仓库手动 merge Commit message：Publish blog post\nFile paths File tree in repository：Fixed folder Default folder ：content/post Property key：dir\nAttachment \u0026amp; embeds Default attachment folder：static/images\n问题解决 git 推送 删除 .git 文件夹\n1 2 3 4 5 6 7 8 git init # 进入博客目录 cd /path/to/your/blog # 为这个仓库设置用户名和邮箱 git config user.name \u0026#34;whiths600\u0026#34; git config user.email \u0026#34;whiths600@email.com\u0026#34; git remote add origin https://whiths600@github.com/whiths600/whiths600.github.io.git 1 2 3 4 5 git add . git commit -m \u0026#34;backup\u0026#34; git branch -M main # 强制推送（会覆盖远程历史） git push origin main --force ","date":"2026-01-10T21:43:00+08:00","permalink":"/p/%E4%BB%8Ehexo%E5%88%B0hugo%E5%8D%9A%E5%AE%A2%E7%9A%84%E8%BF%81%E7%A7%BB/","title":"从hexo到hugo博客的迁移"},{"content":" 沉迷抠图和描边，好想把所有鸟都粘上去\u0026hellip; 借用了鸟友的两张图^^\n本周摘要 完全在意料之外和姐姐一起跨年（熬夜），起因是她来找我玩且好巧不巧地在 12 月的最后一天，晚上准备回家的时候才发现下雨还打不到车，我俩在寒风和大雨中等了半个小时\u0026hellip; 周记从去年的 22 周开始记录，基本每周一记。也有流水账也记不了的时候。无意中以另一个维度“验证”习惯的 21 天养成法，现在记录起来没有以前困难。 某次开始折腾 dataview 插件的 js 脚本用法，成果是把一些不必要的插件极简掉。 本周高强度钩针，没事就织，现在终于能控住线，比较少勾分岔，正在织一个小包~ 有声书软件会员到期后被我毫无留念地卸载掉。我又回归了播客，这周听了好几期案子，每一个都有不少可以思考的部分。 最有名的是辛普森案，大概是黑人橄榄球运动员杀害了他的白人妻子和其朋友，这个凶手因为种族、政治等等因素没有被审判，但大众都心知肚明。之前我看到很多引用该案的人表达的意思是辛普森有钱，请的律师足够厉害就能胜诉\u0026hellip; 还有一个让我印象很深刻的案子，它能在几十年后结案完全归功于受害者大学室友兼朋友的坚持。该案发生时DNA 检测技术没有被发明，受限于没被侦破并且后因缺少关注度变成冷案，这位朋友坚持给警局打百通电话也没有被重视，于是患有文字障碍的她做出了脱离原来人生轨道的选择。她成功考到私家侦探证，并在这个过程让很多人知道了她的心愿。最后也因为有公众关注，警方终于重新处理此案，拿着留存的证据在犯罪记录库一比对，很快就找到了真正的凶手（ps: 在此之前警方甚至欺骗她说证据没了）。 以我每日不一定写一道题的速度题量缓慢步入两位数，目前体会是简单和中级题没有第一次写起来那么难，多写写就有思路，没思路可能是没学过。 沉湖：新年第一鹳 趁着记忆还热乎，写写第一次去沉湖——\n出发前，沉湖于我而言只是“遥远”与“湿地”的代名词。经鸟组乌鸫老师科普，才知其前世今生：沉湖是云梦泽的遗存，生活着 277 种鸟类（据说实际记录有三百多种），包括东方白鹳、白鹤、黑鹳、青头潜鸭等 14 种国家一级保护野生鸟类。\n去程路上，播客里聊着香格里拉冬季观鸟，里面提到全球八大候鸟路线里有两条交汇香格里拉，彼时我对“交汇”的含金量尚无实感，直到置身于这片“东亚-澳大利西亚”环线上的重要驿站。短短数小时里，十几种新鸟接连解锁，这种切身的丰饶令我惊叹——这里已然如此，那迁徙季的香格里拉会不会更加壮观？\n这次观测点在山坡上的一条单行道上，一侧是保护站，另一侧是茂密的植被和宽阔的水域，我们距鸟群足有几十甚至上百米远。听鸟组老师说，水线还在逐年在后移。在这样远的距离下，我的望远镜里多是模糊的像素块：游动或展翅时，是黑白灰交织的鸟形生物；休憩时，它们把脖子盘起，缩成水面上一团静止的黑白剪影。觅食的姿态则丰富得多，得靠超大的单筒望远镜才能看清。借着小吴老师调好的单筒望远镜，我们看了很多远处的水鸟，包括不限于：白鹤、大红鹳、赤麻鸭、琵嘴鸭，小天鹅，灰雁\u0026hellip;最佳视角是能瞧见大半截身子，看着它们缓慢地行动，把脖子探入水中找食物。半天找不对目标也是常事：有时鸟忽然转向，埋头于水中，只剩屁股露在水面；有时挪到芦苇丛边，身影被遮蔽大半，隐约露出细长的脖子和脑袋（ps：白鹤说的就是你！）。\n除了水鸟外，我们在开阔的草地上也遇见了不少雀形目的小鸟，加新了鸦雀科和鹀科，后者的保护色使它们并不怎么起眼，随行的朋友还以为是麻雀呢！最惊喜的是邂逅了‘人生第一猛’——白尾鹞! 感谢我的朋友白尾鹞，至少出来盘旋过三次，给足了观察的机会。临近尾声的时候，鲯鳅老师眼尖地发现了树枝上有戴胜，手忙脚乱之中我终于对上，留下可以分辨特征的照片。至于没有影像的部分，看到就是赚到^^\n下面是题外话。冬日湖边的水汽非常狠毒，即使是在较为封闭的室内稍站一会，寒气也会迅速渗透四肢。若有鸟看尚可忍耐，其余时间简直是一种无法忽视的折磨。摄影章老师看随行的一个朋友没手套，便把自己的递给她，好在还有备用手套，大家都不用挨冻，鸟组的老师都好好！如果下次再有类似的情况，我一定会穿上我厚厚的保暖裤，帽子口罩手套全副武装出发。\n","date":"2026-01-04T17:14:00+08:00","permalink":"/p/%E6%96%B0%E5%B9%B4%E7%AC%AC%E4%B8%80%E9%B9%B3/","title":"新年第一鹳"},{"content":" 带来好运的小翠~\n本周摘要 下单了毛线终于到手了!!! 立马上手体验了一番，感觉博主的手和我的手是两个器官。不仅不怎么灵活，甚至有点“肌无力”。我像是第一次操控我的手一样学习拿线的姿势，以及勾线的动作。什么时候能入门就可以沉浸式编织了，好期待—— 上周的心情很糟糕，低落潮湿，好像被黑夜笼罩了\u0026hellip;即使和朋友见面也无法缓解，最开心的事情应该是看了一上午小说。难道是因为我没有吃维 D？ 本周干了一些\u0026quot;正事\u0026quot;。学习了 SQL 的 基础课, 以及通过 leetcode 学 python, 目前的进度为刚刚写完数组的基础题, 但很多东西都不知道, 做题思路仅有暴力解\u0026hellip; 随缘观鸟半年，现在算是可以靠特征识别几十种鸟类了！现在困扰我的一点是没什么好的方法能记住鸟鸣。 观鸟半年小结 有时候会遇到鸟友善意的提问，类似⌈你是怎么开始观鸟的⌋？之前的我会套公式一样告诉她们，是因为玩了一款名为 Wingspan 的游戏，别名小鸟牌，觉得很有意思于是\u0026hellip;\n实际上，这个答案我自己都不知道是否准确，因为它有真实的部分，但也夹杂着想象的成分。本科毕业的暑假有很长很长的时间，我有大把的时间可以玩和探索新东西，可惜的是我当时的记录方式非常敷衍，很多事情都没有写下来。\n翻了翻聊天记录，我竟然真的在玩了小鸟牌后和朋友说⌈想要入门观鸟⌋。但在回答问题的时候，我早忘了还和朋友有过这样的对话，完全在无意识中将它们做了因果关联。现在想来还是当时太闲，想给自己找点事情做。在入手望远镜之前，我还尝试了木雕，嗯\u0026hellip; 至今有惊人的——2个作品\u0026ndash;一只潦草的鸟和一只被我爸认为是企鹅的熊。在尝试之前，我其实没想到木雕入门会那么辛苦，包括不限于用锯子下料半天得到一个坑坑洼洼的截面，雕刻刀削着削着卡住了，木末木屑并不是很听话地待在垫子上\u0026hellip;\n从我萌生观鸟的想法，到带上望远镜去公园，中间至少隔了一个月。刚把望远镜拿到手，我便找机会揣着它直奔附近的公园。刚到没多久，天上就被黑云笼罩，没过几分钟雨就落了下来。不过幸运的是，乌云散得也快，丝毫没有打击到我第一次外出观鸟的热情。\n在假期剩余的时间里，我偶尔会去附近的公园，不过大部分的时间还是在小区里观鸟，自诩为 “小院观鸟人”。这段经历里，还发生了不少有意思的小插曲：我认识了每天早上七点在窗前吵闹的丝光椋鸟，就算被吵醒了也不烦躁，还能顺便起身看看清晨里还有哪些鸟儿；在某截烟囱管道和空调排水口发现雏鸟的影子；偶遇过同一只“低调”的鹊鸲，总在同一块草地觅食；摸清了一棵白头鹎偏爱的树；循声找到了在小区另一侧树上叫个不停的喜鹊；发现谷咕古很喜欢在房顶发呆\u0026hellip;\n在摸清大半个小区的鸟种分布后，我惊讶地发现，原来小区里至少栖息着八种鸟类。而在入门观鸟以前，我只认识麻雀，既看不见藏在枝叶间的鸟影，也听不出混杂在风声里的鸟鸣。\n观鸟不该只是一项爱好，更应该成为我们生活的一部分。心情不好去观鸟，心情好也观鸟。喜欢观鸟的理由有千千万：\n观鸟是一场沉浸式的体验，只管去看、去听、去寻找。世俗烦恼都与我无关！ 观鸟的启动门槛极低，只要带上眼睛和耳朵，再储备一点相关知识，随时随地都能开始。 观鸟能让人收获丰富的知识。中国目前记录在册的鸟类有 1000 多种，当你认识其中几百种时，怎么不算得上是一位业余专家呢？ 观鸟能让人更亲近自然。 观鸟能顺带锻炼身体。 观鸟\u0026hellip; 目前我观鸟的频率是一周一次或两周一次。据不完全统计，我 12 月的观鸟记录，比之前五个月的总和还要多。很多时候，与其说是我在观鸟，不如说是我需要被观鸟 “拯救”。\n图 一群老头驾着相机拍，问我认不认识这个鸟，我说不认识他说是金丝雀，我差点就信了\u0026hellip; 后面查了下似乎是金翅雀 睡了的苍鹭 柳莺大魔王，脖子看痛了也没看到头顶有没有斑纹 山咕咕 严重怀疑是学校池塘逃逸的鸭 ","date":"2025-12-28T19:18:00+08:00","permalink":"/p/%E8%A7%82%E9%B8%9F%E5%8D%8A%E5%B9%B4%E5%B0%8F%E7%BB%93/","title":"观鸟半年小结"},{"content":"跟着 datacamp 学完了 SQL 中级课程（使用 PostgreSQL）。下面是出现过的子句写法。\n在开始前 SQL 并不是按书写顺序来执行的。可以先对执行顺序有所了解。\n1 FROM-\u0026gt;WHERE-\u0026gt;GROUP BY-\u0026gt;HAVING-\u0026gt;SELECT-\u0026gt;ORDER BY-\u0026gt;LIMIT 选择和过滤 SELECT\n1 2 3 4 SELECT * SELECT currentDatabase();查看当前所在的数据库。 -- DISTINCT 用于返回唯一不同的值。 SELECT DISTINCT col1,col2 WHERE 过滤数据（作用于单行）\n1 2 3 4 5 6 --使用AND、OR可以连接多个筛选要求。AND后的句子过长可以用括号 WHERE col \u0026gt; 1 AND col = \u0026#39;\u0026#39; -- BETWEEN ... AND 用于快速选择时间段 WHERE col BETWEEN a AND b -- 可以是字符或数字 WHERE col in (\u0026#39;\u0026#39;,\u0026#39;\u0026#39;) LIKE\\NOT LIKE 用于过滤字符串。% 匹配多个字符，_ 匹配一个字符\n1 WHERE col like \u0026#39;A%\u0026#39; IS NULL\\IS NOT NULL 用于过滤空值\n1 WHERE col IS NULL 总结特点 主要是聚合函数\nCOUNT() 的作用是“计数”\n1 2 3 4 5 -- 包含NULL SELECT COUNT(*) -- 不包含NULL SELECT COUNT(col) SELECT COUNT(DISTINCT col) MIN()和MAX()\n1 2 select MIN(time) AS min_time,MAX(time) AS max_time FROM table_name ROUND() 四舍五入, 参数可以为负数，表示整数取整\n1 2 -- 表示取整到个位 ROUND(AVG(col),-1) 分组、排序 GROUP BY column 对列操作 没有分组的列不能被 SELECT，但可以选择用聚合函数\n1 2 3 SELECT col1, aggregate_function(col2) FROM table_name GROUP BY column_name; HAVING 在 分组后 过滤数据（作用于整个组）\n1 2 3 4 SELECT col1,count(col) FROM table_name GROUP BY column_name HAVING count(col) \u0026gt; num ORDER BY 默认从小到大排序。搭配 ASC 表示升序，DESC 表示降序。可以用 SELECT 里的别名\n1 ORDER BY column_name ASC 视图 Create VIEW 创建视图，视图和真实的表很相似，但它只存储查询代码\n1 2 3 4 Create VIEW view_name AS \u0026lt;Query\u0026gt; --用法 SELECT * from view_name ","date":"2025-12-23T21:45:00+08:00","permalink":"/p/sql%E4%B9%8Bquery%E5%9F%BA%E7%A1%80/","title":"SQL之Query基础"},{"content":"本周摘要 高频做饭吃的一周，猛猛摄入蔬菜（特指菠菜）和水果，顺利排便后觉察到自己完全不记得上次是什么时，打算关注一下排便健康 高强度使用 ai agent 的一周，尝试了上周的一些想法，跑了跑发现运行可能没有那么难，难的是如何改进和让自己满意。cursor 试用了一下，最显著的感受是快，但用到后面感觉有点傻，可能是被降智了 逛了附近的小吃街，买了四五种小吃，味道上基本都没有踩雷！还在街边发现了卖寄居蟹的小贩（这玩意以前只在视频里见过），摊主慷慨地让我放进手心，观察了一会，它就在我的手上试探地爬出壳又缩回去，总感觉快要出来了，非常可爱 这周重开游戏时间，《风暴之城》还挺好玩，沉浸式当总督指挥手下布局，完成姨妈的任务，让移民定居。就是每次都玩得有点久，身体疲惫 用日历来做记录 最近的一项新尝试是用日历来记录活动，从有想法到落实再到稳定的记录，本 P 人花了好几周适应。放出截图会让不知情的朋友大惊失色的程度：\nps：拉屎并不是需要打勾的任务，而是灵机一动，新增的健康记录\n我以前也确实有尝试用日历做计划，或用 todolist 类的应用来安排生活，但无一例外地失败了。于我而言最大的阻力是，我很难按照计划的开始时间去进行一项活动，同时也非常讨厌在执行计划的时候被其它事情打断（实际上很多时候是自己很爱分心）。\n制定一个注定失败的计划不但没有任何正反馈，反而会让我感到焦虑和挫败\u0026ndash;为什么别人可以制定出适合自己的计划并顺利执行，而我却总是半途而废呢？是我不会规划吗？是我执行力不够吗？\n痛定思痛，我不再继续用这些方式做计划。目前方案依赖于 Google 日历（应该任意的日历都可以），它可以创建三类事件-活动、任务、预约（未使用）。下面式具体用法：\n一是创建活动记录。在每次活动开始的时候记录开始时间和活动名，期间如果有任何想法可以在描述里写下，在活动结束的时候记录结束时间。这样做非常灵活，对我来说也不困难，因为我确实需要一个东西来记录事件，不然以我糟糕的记性，到了周末写周记只能看着空白的文档发呆\u0026hellip; 我这周干啥了？好像也没什么特别的事情发生啊？\n然后是创建任务。我主要用它来管理 ddl 和一些重复性任务，当然，也可以放置一些临时起意的小任务。对于明确 ddl 的任务，我会标注出时间，其它任务会设置默认时间为全天。比如每周一次的任务\u0026ndash;清洁（打扫房间，洗衣服、水杯、眼镜等等），可以固定在周末的一天，设置为重复任务。类似的，如果需要提醒自己吃水果，做运动，去户外也可以安排在固定的某一天。\n你生命中的每一个星期 我总想多利用一些（辛苦）记录下来的活动数据，做了简单的可视化，但不是很满意。随机用一些关键词搜索，偶然由 life in weeks 关键词顺藤摸瓜找到一篇发表于 2014 年的博文 。作者在文章做了一个很妙的比喻：假设每一周都是一颗 2mm、0.05 克拉的钻石，按 90 年的周数（4690）来算，所有钻石的总体积还不到一汤匙。\n我们的人生是一场有限游戏。\n下面是人生周数图的一个实例，每一个方块都代表一周，而一行方块构成一年。文中有提到一些使用周数图方法，什么典型美国人的一生、名人过失记录、体育明星大满贯记录、爱因斯坦和牛顿的早年成就。感兴趣的话可以阅读原文。另外有人基于下图做了体验网站 ，输入生日就可以看自己的人生周（月、年）视图。\n图 逛小吃街\n偷懒餐，在食堂买了两个菜拌面\n炼金中\u0026hellip; 煮了菠菜和香菇！\n以为显示器出现了坏点，实际是截图像素点，虚惊一场\n","date":"2025-12-14T21:10:00+08:00","permalink":"/p/%E4%BD%A0%E7%94%9F%E5%91%BD%E4%B8%AD%E7%9A%84%E6%AF%8F%E4%B8%80%E4%B8%AA%E6%98%9F%E6%9C%9F/","title":"你生命中的每一个星期"},{"content":" 鸟友送的小鸟豆镇楼！这周的前半段过得紧张刺激（指突击考试），后半段就完全自由，玩和躺了几天，周末的时光好短暂。\n本周摘要 和好朋友见面啦——但时间很短暂，她只在我考前和考试当天有空。我和她吃了饭，逛了半个学校，顺路捡了一些树叶做书签，后面她说陪我复习但实在无心学习 （现在看是完全正确选择） 一直忘记吐槽\u0026hellip; 直到一加 13 的便签弄丢了我的笔记，不知道是不是因为开了自动同步，垃圾软件！！有风险的功能不如没有 这周组会最大的收获是——知道了放假时间 近几周都没有打游戏的动力，买了新的策略游戏，但玩了一会就疲惫，这个天气就适合躺在被窝 第一次跑很远去观鸟，去之前还为没有记录发愁，去了以后发现想得太多。对于新鸟人来说，遍地可加新，没见着候鸟也不算白跑 有了几个新的 idea，下周或许可以开始行动 后官湖观鸟 收获：某种鸥（可能是红嘴鸥）、白鹡鸰、黑水鸡、小䴙鹈、某种柳莺、某种伯劳（感觉是棕背伯劳）、灰喜鹊、鹊鸲、凤头䴙鹈、白骨顶。\n我从园区的正面进，选择了右边的小路，来的一个可以看到大片水域的观景台。刚接近水面就被某种鸥和鹡鸰吸引住，前者有时在水面绕大圈滑翔，后者则在杆子上迈着小碎步跑动。往远处看，看到一个小白点，用望远镜观察又拍了照片，脖子是雪白的，头大概是黑色的，感觉是没见过的鸟。近处一扫而过，有黑水鸡和小䴙䴘的身影。\n和鸟友们汇合后，继续沿着右手边的小道走，往左是与刚才连通的水域，路边的大小树上时不时传来灰喜鹊、白头鹎、乌鸫、噪鹛等的鸣声。有成群的黑水鸡聚集在近处觅食，但在我们豪无知觉地靠近时它们便敏捷地往远处游去了。在枯萎的荷叶杆中，有一个显眼的影子，我举起望远镜发现确实是只鸟，它正在梳理自己的毛发，通体黑色夹杂一抹白（应该是小黑水鸡）。\n再往深处走便开始远离水，路的两侧都是树，抬头一看发现头顶有鸟，用望远镜看尾巴是圆润的鱼尾形状，颈部有棕黄色的一圈。可能是我们的到来惊扰了燕雀，过了一会儿，我看到一群燕雀在不出声的情况下默契地飞到对面的树上去了。\n还没走几步，又在路边的一棵矮树上看到一只体型很小的鸟，它似乎闲不住，几乎一刻不停地跳动，立马举起望远镜开始找，可废了点力气。好在它很给面子地在这棵树上呆了很久，我美美地记录了它灵动的身形。遗憾的是现在还不确定它是哪位柳莺。\n再往这个方向走便没有更多收获了。我听到了很多陌生的叫声，大合唱一样，一波接着一波，或是这边唱那边和地配合。其中有一个低低但规律的声音就在附近，循声而去，感觉就在眼前，但眼前只有低矮的灌木丛。我们在灌木里绕了几圈，无果。看向水域，已经被密密麻麻的枯萎荷叶覆盖了。便准备往回来时的地方去。\n我们原路返回，走过来时的观景台，又是一条小路，左侧是各式各样的植被，后手边靠着湖，栽着一排柳树。此时太阳已经收敛它的光辉，我挂念着来时看到的鹡鸰，再往水面看，还是能看到一个灵活的影子在活动，此时的光线正好，透过目镜便能看得很清：它通体白色的羽毛，胸前有标志性的黑色花纹，是白鹡鸰！正想拍照，等我手忙脚乱地连上望远镜，它已经迈开两只腿，不知跑到哪里去了。但我得感谢此时的停留。在右侧的柳树枝上，我又注意到一个不同寻常的身影，它正停在低垂柳树的一根枝桠上，在稀疏的树影间格外明显，我连忙举起望远镜开始观察，只见一只伯劳沉稳地站在那里，小幅度地转动脑袋，上下摇摇尾巴，像是在观察四周的情况，比如奇怪的两脚兽。过了会它飞到了附近的警告牌附近，没有了遮挡物，我得以拍到更清晰的影像，甚至和它对望了半分钟。\n告别慷慨的某种伯劳，接着向前。仰着头走了一段路，在光秃秃的树枝间看到了两只小白头鹎（这个季节竟然这么多亚成鸟）。再看地面，时不时会有灰喜鹊飞离树梢，等我走近些，才意识到它们正在享用一处天然的小水洼，饮水或是洗澡（此处有小剧场，一只洗澡被另一只打跑了）。这条路本该通往更靠近湖中央的桥，或许是年久失修，便把路封了。我们只好在岸边观察开阔水域，在这里只能看到某种鸟在水中移动像是一艘迷你快艇，会留下移动的水痕，会时不时潜入水中消失不见。\n继续沿着湖走，我们惊喜地发现这边的视野更开阔，而且可以更近观察刚刚那种鸟。这个距离我得以看清它的头顶多出尖尖的弧度，两侧对称，这时才确定刚来时看到的白点就是凤头䴙䴘（冬羽版）。在这里观察了一会它们潜水捕鱼，不知道收获如何，回来翻相册发现对岸还有两个钓鱼佬，淡淡地羡慕了一秒（等鱼上钩的时候还能看鸟捕鱼）。\n接下来环湖小半段，拍到了更清晰的风头䴙䴘，长满鹎的树，长满某种柳莺的树，还被强脚树莺溜了两圈（就是前文在灌木丛里狂叫的鸟），还发现了白骨顶（似乎和黑水鸡各自划分了水域）。\n夕阳西下，这次观鸟就此落幕。\n图 很美味的鱼，虾也好吃 标准鸭子坐 一些植物 太亮了！拍出来都有光圈 ","date":"2025-12-07T15:18:00+08:00","permalink":"/p/%E5%A4%A7%E9%9B%AA%E5%90%8E%E5%AE%98%E6%B9%96%E5%8F%A4%E6%B3%95%E8%A7%82%E9%B8%9F/","title":"大雪|后官湖古法观鸟"},{"content":"本篇是对 2025-11-24 到 2025-11-30 这一周生活部分事件的记录。\n写周记后时间像开了倍速，一个月最多四篇，一年也才五十多篇。虽然颗粒度大了些，但记录总比没有强上几分，它们是我的锚点。\n日子经常过得一成不变，而天气难以捉摸，也算添了几分变化。上周一夜入冬，穿保暖的羽绒服，等我以为轻薄的衣服可以压箱底，这周又晴空万里仿佛是在暖秋，二十多度阳光刺的我睁不开眼。这学期的课结的差不多，本月也接近尾声，许个愿吧：下个月会发生一些好事，我的朋友们会一切顺利~\n快速总结💭 这两周因为考试没能能好好生活（其实也不想复习），考完就给自己放了假，出门转转，还捞发小出来吃饭 对电煮锅的热度持续了三周，但本周很糊弄，下周课少应该可以自己煮东西吃 两周没有正经观鸟，忏悔几秒，和鸟友两次都没约上（天杀的考试 ）。买了赛博观鸟小游戏，玩了玩觉得很容易变成无情地做任务和集邮机器。又新借了一本图画丰富的手册，补充了一点鸟类学分类的知识 我很喜欢的一个博主发了织毛球的入门blog，大致看了一下有两种技法，一是棒针，另一个是钩针，狠狠心动了！但没想好学哪种 出门见个面 P1 是她在学校门口收到的\u0026quot;见面礼\u0026quot;，她问这是我们学校的特色吗，我笑了笑答这大概是每个学校的特色。本来这也没什么，不值得再说一嘴。可能是我发小性子软，一扫扫了三，被判定为好说话的人，等我出来又拦着我让我也扫，我先是拒绝，拉着她就走，中途一直明确地拒绝，但发传单的人不依不挠半天，弄得我很恼火。\nP2 是真正的意外收获，超级大的一颗松果，一手放不下，长得也很端正，放进我包里的时候她还嘱咐我注意点。等下次再想起它，她刚在车车上坐稳，含泪让我好好保存下次带给她。\n下面是对光谷步行街的吐槽，建的结构很混乱，指引基本没有。出发前我问了室友影院的大致位置，因为没有规划时间电影马上开场我们才打车到附近，挑了个电梯上了楼，在外圈转了半圈毫无头绪，最后问了几个人才找对方向。这影院在内圈的一个角落，但我先看到了走廊对面的牌子便下意识以为在对面，走到一半发现地上的指引，全程盯着地才找到它\u0026hellip; 等我们到场时电影大概已开场半小时，边上的观众都以为我们不来默默给我们让了座。\n观影过程挺放松，全程没有走神。彩蛋和笑点多，她还穿插剧情给我补充了不少剧情。挺喜欢河狸这个角色（第一眼还以为是土拨鼠），热情话多也很有趣，贡献了与湿地动物互动的笑点^^ ,中间越狱那段让我很意外（当时没发现是从扫把啃出了钥匙），她被毒牙刺到的时候我还挺担心她就这样下线。欢乐的一个多小时，各种巧合的设计都刚刚好，最后为大团圆结局打上四颗星。\n出门散步去 之前荷叶过于密集的池塘如今一片衰败，但枯萎的叶杆依然是完美的掩体。路过时听到响亮的叫声，定睛一看发现是黑水鸡，之前鸟影是一点都看不见的。即使没有荷叶的遮挡，想要观察它们活动也不容易，往往是眼睛看到动静，手忙脚乱半天望远镜对不上，视野里全是折了腰的叶杆（想要挑战眼力可以试试下图）\n银杏树好多，忍不住捡了几片回来做书签。比起红枫，银杏的叶子要更干净些，没有明显虫害，但红枫胜在颜色够亮眼，一眼过去也不会注意到它的瑕疵。\n资源 prompt-genie 提示词插件 世界鸟类图鉴 鸟鸣资源 ","date":"2025-11-30T19:28:00+08:00","permalink":"/p/%E6%9C%88%E6%9C%AB%E5%A4%A7%E6%A6%82%E4%B9%9F%E6%98%AF%E6%9C%9F%E6%9C%AB/","title":"月末|大概也是期末"},{"content":"本篇是对 2025-11-17 到 2025-11-23 这一周生活部分事件的记录。\n快速总结💭 这周天气阴晴不定，一夜入冬，没太注意便着凉\u0026lt;(＿　＿)\u0026gt; 一周周数着日子，大概还有六周课，上完了时间就能自由些吗？真自由了又能如我所愿地学习吗？总有点不好的预感，目前的学习进度并不顺利。学期开始之前我还想着有时间可以多打比赛，找到自己的课题写写小论文之类。前者有点进度，参加了一个比赛，但不足以作为毕业成果，后者完全没着落\u0026hellip; 下周就要考试，但偶然看到 datawhale 线下的活动，报名并录上就不想错过，去了还是有些失望，到场的大部分是男性，也没有非常开放的交流活动，和学校里举办的活动大差不差。本以为收获仅为拼手速抢到的水杯（下图 po 出），没想到在活动结束后我的好运才刚刚开始。离开场地后，我注意到和一同领奖过的一个女生，鼓起勇气和她搭讪，没想到非常投缘。聊着聊着又发现她是我大学同学的发小，世界真小，而我好幸运！如果以后有时间一定要多多去线下活动！ 再也不乱买耳机！头戴式我真的带不了，太紧太勒，还压眼镜腿，拆了包装就不能退，最后亏了 70 多某鱼出给一个女生，也算回了血，心疼我的钱包。 疼痛 作为人类，我有丰富的主观感觉的体验-听味嗅感。我会会对低频或高频的声音敏感，即使在静到极致的深夜里，也能听到一些日常活动完全听不到的细微声响。食材炒出来独特气味和入口时的酸甜咸香让另外两大感官努力工作。这些感觉的存在感往往不太强，和身体里正常工作的器官一样，我很少意识到我在使用它们。而当我察觉到它们时，往往大事不妙。突然被疾病找上门，连叫苦的地方都没有，感官或器官开始罢工抗议，让我深刻地认识到它们的存在。\n我总感到难以忍受疼痛，却在读书的这些年里常常遭遇意料之外的病痛。疼痛，它没有实体，也不知道定义，我连描述它都有些力不从心。在无数次被疼痛打击后，我也想在事后好好了解一下这位无法摆脱的敌人。\n首先是定义。维基百科里说，身体的疼痛是由疾病、创伤、外在伤害性刺激，伴随现有的或潜在的组织损伤，所引起在知觉上或情绪上难受的、不愉快的感觉 。\n这里其实清晰地说明了起因——疼痛来自身体的损伤。而我总以为这病痛是突然来的，没有征兆。现在反省一下，最近两次的病痛都能找到一些关联因素。前者是搬到全新的环境里，天气不好还下了雨，睡眠也差，便病了。后者因天气多变，一夜大降温，我起夜没太注意加衣服，床上也没有换厚被子。终归是自己不会照顾身体，可怜了我的这副肉体跟了我这么个不讲究的主子。另外给一些新认识的人留下了“容易生病”的印象，真是郁闷。\n然后是对疼痛的分类，只做了解。痛觉感受器引起的疼痛可细分为三种：表面躯体疼痛（或皮肤疼痛）、深层躯体疼痛（如扭伤、断骨）、内脏疼痛（来自身体器官，内脏痛觉感受器的分布疏，产生的痛感可转化为体腔壁痛、牵涉痛）。\n我很难在疼痛袭击的时刻去干其它的事情，大脑都被强烈的痛占据，无法思考，痛得厉害了连行走都困难。又因为我肠胃是老毛病，时不时犯病，非常让人憋屈。内脏像是在用这种方式来控诉我不好好爱护她，我只能受着这折磨，说不准在哪，也描述不出那痛是什么滋味，但经历得多了也能猜到是哪位出了问题。也难怪文学作品里很少出现关于身体疼痛的写实描述，实在是强人所难。（题外话：健康情况下我想写点流水账都感到困难，看着空空的文档憋不出来几个字，写了几个字又觉得要么啰嗦要么没有逻辑，完全是在胡扯。好在我现在写周记也算一种能坚持的输出，也不用都给其它人看，不怕丢脸）\n资源 java入门项目 Nano Banana Pro ","date":"2025-11-23T19:23:00+08:00","permalink":"/p/%E5%B0%8F%E9%9B%AA%E7%96%BC%E7%97%9B/","title":"小雪|疼痛"},{"content":"本篇是对 2025-11-03 到 2025-11-09 这一周生活部分事件的记录。封面是一只膨胀的乌鸫。\n快速总结💭 学习了 JSON Schema 是什么，一般如何定义。 好讨厌学习通这个平台\u0026hellip; 为什么不能直接下载课件？其它鸡肋的功能倒是爱折腾，不小心更到新版本问客服还不让我退回。目前凑合用一个脚本 下载课件，大致的原理可能是：通过网页的响应找到 pdf 的下载链接。缓慢地复习数学中。 本周工作和学习的效率都一般，不太明白+1+2 的需求\u0026hellip; 他们一个说东一个说西，不知道听谁的。 买了电煮锅!!! 受够了难吃的食堂，调料还没买，开锅煮了泡面 (^▽^)。 新借的两本小说进度缓慢，前两个短篇故事都不怎么喜欢，虽然名字起的好听。还有一个可能是被有声书迷住，有点不可自拔，目前也就听了 30 个 h\u0026hellip; 6 天前我还在说要睡前看纸质书抵手机，还是被科技打败了。 这周只有两天骑了回车，周末在学校转了转，拍了会小鸟的冬装。 经过并不严谨的测试，下午三四点喝咖啡也不会失眠，但茶我上午都不敢喝。 提示词入门 视频介绍 原则一：写清楚和具体的提示 可以使用分隔符 要求结构化输出 检查是否满足完成任务的条件 给模型提供完成任务的示例 原则二：给模型思考的时间 明确完成任务的步骤 让模型先自己解决问题 减少幻觉：让模型从文本中查找相关引文，然后基于这些引文回答问题，提供追根溯源的方法。 例子如下：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 text = f\u0026#34;\u0026#34;\u0026#34; You should express what you want a model to do by \\ providing instructions that are as clear and \\ specific as you can possibly make them. \\ This will guide the model towards the desired output, \\ and reduce the chances of receiving irrelevant \\ or incorrect responses. Don\u0026#39;t confuse writing a \\ clear prompt with writing a short prompt. \\ In many cases, longer prompts provide more clarity \\ and context for the model, which can lead to \\ more detailed and relevant outputs. \u0026#34;\u0026#34;\u0026#34; prompt = f\u0026#34;\u0026#34;\u0026#34; Summarize the text delimited by triple backticks \\ into a single sentence. ```{text}``` \u0026#34;\u0026#34;\u0026#34; response = get_completion(prompt) print(response) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 prompt_2 = f\u0026#34;\u0026#34;\u0026#34; Your task is to perform the following actions: 1 - Summarize the following text delimited by \u0026lt;\u0026gt; with 1 sentence. 2 - Translate the summary into French. 3 - List each name in the French summary. 4 - Output a json object that contains the following keys: french_summary, num_names. Use the following format: Text: \u0026lt;text to summarize\u0026gt; Summary: \u0026lt;summary\u0026gt; Translation: \u0026lt;summary translation\u0026gt; Names: \u0026lt;list of names in summary\u0026gt; Output JSON: \u0026lt;json with summary and num_names\u0026gt; Text: \u0026lt;{text}\u0026gt; \u0026#34;\u0026#34;\u0026#34; 键盘快捷键 网页浏览 有和 windows 共用的\nCtrl+R——刷新页面 Backspace——返回上一个页面 Ctrl+tab——切换到多文档界面程序的下一个子窗口 Ctrl+L——定位到地址栏并选中其中的文本 Ctrl+H——历史记录 Tab——在页面上的链接、按钮和输入框等元素之间向前切换焦点。 F6——将焦点向前移动到地址栏、书签栏和页面内容之间。 F11——全屏\nChrome扩展插件：Vimium yt——创建当前页面的一个副本 x——关闭当前标签，X恢复最近关闭的标签 j——向下滚动页面，k 向上滚动页面, G(shilft+g)到页面底部，gg定位到页面顶部 f——显示页面所有链接的按键分配，点击相应按键后打开链接 shift+/ ——来调出帮助菜单\nWindows快捷键 常见的几个 Ctrl 组合就不复述了。 Win+E——打开资源管理器 Win+I——打开设置 Win+X——打开一个快捷窗口，有设备、磁盘、任务管理器，终端，还可以关机 Alt+Tab——切换窗口 Win+R——通过名字快捷打开工具 cmd、calc、dxdiag、taskmgr Win+B——将焦点移到任务栏托盘区 Win+Tab——以时间线显示活动页面 Win+D——显示桌面 Ctrl+w——关闭当前标签 Alt+F4——关闭窗口 Shift+鼠标右键（或上下文键）——在当前文件夹打开终端\n资源 gpt-embeddings ，虽然是旧文但扫盲很好，内容深入浅出。作者写了很多 AI 相关的科普文章，除了这篇还看了向量数据库和 AI 编程工具。 java 的学习路线，卷不过科班。 Quartz4 静态站点生成器，可将 Markdown 内容转换为功能齐全的网站。没试过目前还是用的 gitbhub Pages。 AI 智能体简史 ，下周再看。 Vimium 浏览器的快捷键工具，但不是所有页面都支持。补充了小键盘没有方便的向上下滚动的快捷键。 ","date":"2025-11-09T20:39:00+08:00","permalink":"/p/%E7%AB%8B%E5%86%AC%E5%AF%BB%E6%89%BE%E9%B8%9F%E7%90%83/","title":"立冬|寻找鸟球"},{"content":"本篇是对 2025-10-20 到 2025-10-26 这一周生活部分事件的记录。\n快速总结💭 第一次去学校图书馆借书，检索系统做得很烂。图书馆一楼只有两台检索的机器，而且仅触屏搜索，时不时自动返回首页，刚刚搜到还没记下位置就白搜了。在某书找了一下，还有一个办法是手机连校园网在浏览器找官网，网速很慢，但比机器要省心一点。库存不是特别足，很多不感兴趣的新书（关键字 AI），感兴趣的一搜一个无，好不容易搜到的被借走了\u0026hellip; 最后拿了两本小说。一本韩女写的小说，很易读；一本阿加莎，还没看。 暂时放弃买相机，想要轻便又能拍清楚飞鸟的相机太贵了。 线上配眼镜安全下车, 确实便宜\u0026hellip; 这个暴利的行业 早上十点多面包配咖啡直接晕到下午一点多，再也不这样吃了。 周五好像被诅咒了。先是爱车被一只柴犬尿了..周围一群人逗狗，根本找不到主人，无人在意我的愤怒..然后从来不点名的课点名了，而我在工位赶进度上头，勉强凑合干完了。 找到一处自留地，有人在那里露营野餐，而我好想躺在草坪看天空，光是想象就令人满足。 配镜记录 很早就看到过网上配镜的经验贴，但一直没试过，今年验光度数突然长了很多（感觉是一年之内涨的），又要换眼镜了，索性试试。\n第一件事是验光，开配镜处方，我去的机器比较全的宝岛，买的 60 多的团购。得到了比较详细的严格结果，包括机器的数据，验光师手写单，以及插片度数的图片。最后插片体验且调整后的结果才是配镜处方，按配镜处方配。\n然后是线下挑选镜框，注意瞳距（验光单上的 PD，要加起来），再然后就是形状颜色啦。 线下选好可以在网上买同款，我比较懒试了一家别人推荐的店一起配了镜框和镜片，选了相似款参数一致的镜框。\n加上验光总共花费 773。另外习惯了金属鼻托把旧镜的洗洗换上了。\n数据如下 镜框：SP841 C1（165） 镜片：依视路膜岩 1.67（510） R：-3.50/-1.25*25 L：-3.25/-1.00*155 PD：59\n自留地 和一位鸟友见面，爬了一座小山，跟着鸟会的老师一起碰运气，因为时间仓促没有太多收获，只看见了一闪而过的北红尾鸲（老师她们上山看见了很近的隼），叫声短促尖细，尾音有时像敲击声。\n不甘心就这样结束，我又回学校四处转，运气很不错，加新了好几种小鸟! 先是环湖骑车的时候被水面的漂浮物吸引（以为是什么水鸟），停下车，然后一只鸟就从我眼前飞过，落到水面的鱼排上面，上身灰黑，下身白夹杂着黄色，尾羽很长，在鱼排上走动，头会跟着脚有规律地活动，回去查了下应该是灰鹡鸰。重新逛了一个园子，上次去不知道是时间选的不好还是其它原因，没见到过鸟的影子，连鸟的声音的听不到。这次下午去还能听到很多鸟叫，循声而去，就看到了红黑配色的一只小鸟混在红绿色的灌木丛上，不仔细看很难发现。不知道这种鸟是不是钟爱和自己配色相近的环境，后面发现这簇灌木里面藏了好多只鸟，它们躲在灌木中间，也不知道是在睡觉还是在观察。我就这样被鸟声操控着走来走去，突然一个灰褐色的身影窜到我眼前，她不声不响，理我只有几米的距离，个头小巧，只有 12 到 13 厘米左右。一开始我以为是北红尾鸲的雌鸟，问了一些懂鸟的老师才知道是鸲姬鹟，借此搜了一些它们的叫声，有一连串响亮的颤声，还有非常婉转动听的吟唱（可惜没听到）。\n观鸟的体验当然也有不好的。过度使用动态视力以后，本近视加散光人士看什么都晕晕的，特别是在树林子里，有什么动静我都很难捕捉到，让人有点泄气。逛了两三个小时以后，肩膀也开始不堪重负，尖锐的酸痛，当然如果不是眼睛看处于半瞎的状态，我的体力还能接着撑一撑。现在来看才发现我也没有天天低精力，做想做的事情才会让我看到自己的生命力。有时候我也会自愿加班，拖延饭点来干活。这种事情看起来吃力不讨好，但是我却在精神上感觉很愉悦。\n资源 tiny11builder , 精简win11 的脚本，可以删掉很多无用的组件，还没试。 roadmap ，目前学习路线进度为 0，打算下周找 python 的网课看看，补补基础，另外也想尝试自己写代码。 每日英语听力 ，可以把notebooklm 生成的英文语料传上去，方便自己听。绝望的是我听两分钟的内容听了几节课也没听清楚\u0026hellip; 网页UU远程 ，可以远程操控实验室的主机，主机要常亮不能锁屏\u0026hellip; 打卡💪 终于把码表用上了。一共骑了六天车，26.93km, 大部分是在通勤路上，偶尔在四处转。 上次英语打卡还是 41 周的英语话题，现在还是练练听力，12 月的考试肯定来不及准备了，打算报 3-4 月份的，预计备考时间 2-3 个月，等这学期课上完了大块的时间更多。 打算下周开始上python网课，基础不扎实很难受，好想自己写简单通用的脚本。 ","date":"2025-10-26T17:48:00+08:00","permalink":"/p/%E9%9C%9C%E9%99%8D%E6%89%BE%E5%88%B0%E4%B8%80%E5%A4%84%E8%87%AA%E7%95%99%E5%9C%B0/","title":"霜降|找到一处自留地"},{"content":"本篇是对 2025-09-22 到 2025-09-28 这一周生活部分事件的记录。\n快速总结💭 这周遇到不少在外面饭店抽烟的烟人\u0026hellip; 很影响吃饭体验。 周二还是周三做了一个梦，梦到了我奶奶在医院里\u0026hellip; 自行车被人移动还总是被动了变速档位，过了几天就开始响，去车行修的时候发现是螺丝松了，好想自己学会修车。目前遇到的都是螺丝的问题，就是不知道怎么调算调好。 宿舍里面潮湿的难受，怎么睡都不舒服，每天醒来都会鼻塞，现在已经确定感冒了。鼻塞好难受\u0026hellip; 数模完赛，已满足！ 周末两天也好好利用了。去了东湖，还尝试了新鸟点，收获不多（可能是因为去的时间不够早），但运动量拉满。 数模流水账 这次比赛一共五道题，其中 B 题单独一个文件。理论上在拿到题目的解压码时候，第一件要做的事情就是先把所有的题目都过一篇，再从这些题目中挑选一个题目来作为自己的题目。但是我们实际上都没下载 B 题，略过了。A 题好像是计算机方向熟悉一点的，CD 里面有一题是计算机视觉相关，数据是二位图片，E 题的数据最简单，是采样的轴承振动数据。F 题非常开放，背景主要是苏州园林之类的，要求对一些概念（趣味性）建模\u0026hellip; 最后我们选了数据看上去最简单的 E。\n这次比赛并没有清晰的分工，队友们认为没必要分，然后提出了一个理想的模式：谁有空就谁干活。比如第一个人做问题一，做完把结果给第二问的人，然后去写第一问的论文。但现实是我们前两天完全是各做各的。\n第一天我有些思路，上午就把第一题大概做了一下。然后后面队友一开始重新做任务一，下午弄了一个数据丰富的版本。我一直想做后面的问题三，因为认为这个是重点内容，所有一直赶进度，晚上把问题二做了一个版本。队友二晚上也做了第二问，但是基于队友一的数据。为了看到迁移后是什么情况，我当晚开始把第二问的模型用在了第三问，但是效果非常差。\n第二天早上队友一开始做可视化，把能跑出来的图都跑了一遍。我和队友二现在还在思考第二问，我这个时候其实有点茫然了，还用不筛选的数据又跑了一下任务二，但似乎和她们得到的数据不太一样。中午的时候我还是感觉不对劲，因为第一问明确说了要对数据筛选，但是队友的数据并没有做这个。下午队友一开始更新数据字段，问题一的数据更新了。我和队友二互通第二问，这次用了筛选的数据，我得到了第二问训练好的模型和训练集数据。晚上我就开始用队友给的几个模型跑了一下第三问，此时只是初步比对了几个模型的结果。\n第三天凌晨队友一通宵赶论文进度，并且又对特征进行了筛选，并告诉我应该用筛选后的来做。我醒来跟她反馈我需要第二问训练了的模型的数据才行。队友二说她把保存文件的代码删掉了，于是我只能用未筛选字段的版本来做问题三和四。上午我整合了问题三的代码，跑了一下任务四，得到了一些图表。下午队友一把问题一和一些处理写完，队友二在补问题二。晚上又开始分工，因为还有问题四，队友二接了问题四的论文部分。\n第四天上午我在补问题三，大概写到下午才写完这部分。队友二在同步补问题四。晚上我和队友一开始补其它部分，包括参考路线和图表。队友二通宵写问题四并且改了一些格式，并遗留了一些问题，我早上醒来继续改格式，改到十点多，一直到提交。实际上我根本没有脑子通读全文了。队长挺狠的，熬了大通宵，我早上六点醒还看到她还在，于是就对接上了。\n很混乱的赛况，但队友都挺靠谱，终于结束了。\n资源 经济指标网站 会实时更新很多指标。\n鸟类迁徙相关网站 感觉更适合在国外的鸟友，下面是网站的简介。 鸟类迁徙探险家通过一系列采用最新、最佳的迁徙和保护科学构建的交互式地图捕捉鸟类的乐趣和迁徙的奇妙。\n通过这个独特的数字平台，鸟类迁徙探索器的参观者可以了解 458 种候鸟的全年周期，这些候鸟定期在美国和加拿大繁殖，并在一年中的其他时间迁徙到拉丁美洲和加勒比地区。\n您可以使用物种迁徙地图仔细观察您最喜欢的鸟类完成其年度迁徙的过程，在位置地图上发现哪些候鸟使用给定的位置以及它们如何将其与西半球的其他地方连接起来，并使用保护挑战地图了解候鸟在一年中面临的许多挑战。\n候鸟每年以令人惊叹的迁徙之旅，激励并吸引着西半球无数的人们。通过了解更多关于候鸟的信息，我们可以更好地保护它们以及它们全年所需的栖息地。“鸟类迁徙探索器”将世界上的自然现象之一，直接呈现在您的屏幕上，供数百种候鸟观赏。\n之前一直在用观鸟记录中心的小程序，今天搜了一下 PC 端 。体验了一下查看或者修改自己的数据挺卡的，不如小程序。\n打卡💪 骑行 11.3k, 集中在周末两天里面，出去玩还是很有运动量的。\n","date":"2025-09-28T12:40:00+08:00","permalink":"/p/%E4%B8%B0%E6%94%B6%E8%8A%82%E6%95%B0%E6%A8%A1%E6%B5%81%E6%B0%B4%E8%B4%A6/","title":"丰收节|数模流水账"},{"content":"本篇是对 2025-09-08 到 2025-09-14 这一周生活部分事件的记录。\n快速总结💭 终于在 zotero 试用了坚果云的同步，嗯，免费的很香 保持上四休三的工作效率，在周四前在组里干活，看了这篇文章 受启发，于是重构了我的代码结构，用上了工具 探索了游泳馆，水挺好玩的 骑车被学校的门禁暗算，夹的我痛了一天 关于游泳一事 也是一时兴起，先是买好装备，问了学校报班的价格，然后在 xhs 上捞到一个搭子，是一个话很密（褒义）的广西人。说到这里，之前挺喜欢一个广西 up, 视频内容基本上是讲述生活里面的事情与自己的思考，但是她的表达就很流畅，让我听得很开心，现在对广西人的影响就是：很会讲故事，很会吃！\n转回正题。我基本上没怎么接触水，小时候在泳池玩过，家里人想让我爸教我游，但什么也没学，反而提前感受到溺水的滋味\u0026hellip; 后来我就再也没接触过水，可以说这是我很多年后第一次去泳池。说不担心的是不可能，在等装备到的间隙，我偶尔会刷 xhs 帖子看看有哪些需要注意的。这次去我带了不少东西，包括：泳衣、泳帽、泳镜、速干毛巾、拖鞋、吹风机、水杯、校园卡。但就我个人而言：水杯完全不需要带，拖鞋也有点麻烦，最好能直接穿一双游泳用的，这样出水换的时候更方便。\n刚进去有点不知所措，除了不熟悉场地之外，还对自己先要做什么很懵。我们买了单次的游泳卡，管理员会发一个密封的小牌子，除了可以进出门禁外，还有一个对应的柜子存放东西。我们放了东西，然后先去上了厕所，接着就换衣服。这里搭子很尴尬，因为大家会在放东西的地方直接换，她似乎很害羞。换好衣服我们安装教程去淋浴间把皮肤打湿，简单的热身（基本没做）后就前往了泳池。\n掀开帘子我们才发现似乎不需要去淋浴间打湿，进场前有一个水帘子。泳池的水看起来挺干净，靠着泳镜模糊的视野，我们找到了浅水区，脱掉鞋，顺着梯子一步步进去水中。每一步往下，水对我的托举就更强几分。\n第一次下水也没学什么动作，参考教程练习了呼吸和找漂浮的感觉，目前会用嘴吸气鼻子吐气，持续十几秒，但是不太会闭气（进水攻击）。我的练习还挺顺利，不知道是不是因为我用脸盆试过一次，发现这样确实不会吸水就放心大胆的练了。至于漂浮，我能双脚离地，但是不知道要如何头朝下，当耳朵没入水中的时候，我第一次用耳朵直接听到水里的白噪声（而不是耳机），在水中似乎能和外面的世界隔开。\n当然，这次体验也有不好的地方，除了带的东西过多，在水里泡久以后皮肤会因为吸水起褶皱，再加上水里消毒成分含量高，还有点刺痛感。另外，我也不习惯戴泳镜，时间久了感觉被吸得难受，于是时不时想松一下，结果进水了\u0026hellip;\n但总的来说，这次游泳体验还是很满意的。不知道下次去是什么时候，希望能在读研期至少学会蛙泳！\n资源 免费在线网站截图与视频录制工具 ，试了下带门禁的网站只能截到登录页 初学python者的分享（英） 作者推荐一个适合数据科学初始化库的工具 打卡💪 爬楼 骑行 14.27km 换了 strava，但码表没买到 英语打卡：更新了纸笔听写（是的本人终于有纸了） ","date":"2025-09-14T21:38:00+08:00","permalink":"/p/%E5%BC%80%E5%AD%A6%E5%89%8D%E7%9A%84%E4%B8%80%E5%91%A8%E7%8E%A9%E6%B0%B4%E5%88%9D%E5%B0%9D%E8%AF%95/","title":"开学前的一周|玩水初尝试"},{"content":"参考 本文在 简单工作流的搭建 搭建了最简单的工作流（存在缺陷）。如果想要动手尝试，先到快速启动 下载必要引擎，然后可以直接跳到 使用已有的工作流。\nn8n 版本： 1.106.3\n快速启动 下载 Docker Desktop 测试模式，不要关闭终端\n1 docker run -it --rm --name n8n -p 5678:5678 -e \u0026#34;HTTP_PROXY=http://127.0.0.1:7890\u0026#34; -e \u0026#34;HTTPS_PROXY=http://127.0.0.1:7890\u0026#34; -v ~/.n8n:/home/node/.n8n n8nio/n8n 稳定版\n1 docker run -d --name n8n -p 5678:5678 -e \u0026#34;HTTP_PROXY=http://127.0.0.1:7890\u0026#34; -e \u0026#34;HTTPS_PROXY=http://127.0.0.1:7890\u0026#34; -v ~/.n8n:/home/node/.n8n -v ~/.n8n_database:/database n8nio/n8n 如果想稳定代理的话应该考虑在本地存储代理信息，这样删容器代理不受影响。\n然后初始化 n8n 。访问 http://localhost:5678 进行注册，需要邮箱验证。\n简单工作流的搭建 创建 Telegram Bot 并连接到 n8n 这个部分的群组可以不创建，我目前把这个群组作为 log。\n创建一个 Telegram Bot\n打开 Telegram 客户端，在搜索框里搜索 @BotFather (注意核对官方认证的蓝色√图标)，然后点进去开始聊天。 发送 /newbot 给 BotFather。 给机器人起名字以及用户名 (username，后面查找机器人用)，这个必须以 bot 结尾。 创建成功后，BotFather 会给你一长串API Token。请立即复制并保存好这个 Token。 创建一个用于接收信息的频道 (Channel)\n在 Telegram 里，创建一个新的频道。给它起个名字。 重要：将频道类型设置为私有。 然后把刚刚创建的机器人添加到这个频道作为管理员，设置权限。 完成到这里可以跳到 使用已有的工作流\n创建并获取群组的 Chat ID（选做）\n将你刚刚创建的机器人临时添加到一个普通的群组里，并且打开权限，然后在这个群组里随便发一条消息。 打开浏览器，访问以下网址 : https://api.telegram.org/bot{YOUR_BOT_TOKEN}/getUpdates 你会看到一些 JSON 格式的文字。找到 chat 部分，里面有一个 id，它通常是一个以 -100 开头的数字，请复制并保存好它。 在 n8n 中配置 Telegram（选做）\n打开 n8n 界面 (http://localhost:5678)。 点击 \u0026ldquo;Add workflow\u0026rdquo; 创建一个新工作流。 点击屏幕中央的 + 号，在搜索框里输入 Telegram，然后选择在 action 里面找到 send message。 在右侧的配置栏中： Credential for Telegram API: 点击 \u0026ldquo;Create New\u0026rdquo;。 Credential Name: 随便起个名字。 Access Token: 粘贴你从 BotFather 那里得到的 API Token。 点击 \u0026ldquo;Save\u0026rdquo;。 Chat ID: 粘贴你刚刚获取的以 -100 开头的频道 Chat ID。 Text: 输入 Hello from n8n!。 点击节点下方的 \u0026ldquo;Execute node\u0026rdquo; 按钮。 添加第一个信息源 - RSS（选做） 从最简单的 RSS 开始，订阅一个你喜欢的博客。 1. 找到 RSS 链接 2. 在 n8n 中配置 RSS 工作流\n点击 + 号，添加一个 Schedule 节点。在弹出的配置中，可以设置每小时 (Every Hour)、每天 (Every Day) 等。 点击 Schedule 节点右侧的 + 号上，在弹出的搜索框里输入 RSS，选择 RSS Read 节点，配置 URL 即可。 Note 这里可能会遇到网站有安全设置，可以试试这个 RSS 转换 ，登录之后把博客主页地址输入，生成 RSS\nRSS Read 连接到我们之前创建的 Telegram 节点。 然后需要修改 Telegram 节点的 Text 内容，让它发送 RSS 的标题和链接。 在 Text 输入框右边，点击 \u0026ldquo;Add Expression\u0026rdquo;。 在表达式输入框里输入： 1 2 3 标题：{{ $json.title }} 链接：{{ $json.link }} 返回主界面点击右下角的 \u0026ldquo;Execute workflow\u0026rdquo; 按钮来测试整个流程。运行成功你会在 telegram 群聊看到推送的 10 条新消息（默认情况）。 这个基础简单的工作流如下图。功能是每 5 分钟自动检查指定网站是否有新文章发布，并将所有新文章的标题和链接，逐条发送到指定 Telegram 频道。如果重复执行会发现每次都会发送 10 条信息，如果在推送前进行比对可以在 RSS 后加一个 function 模块。 可以重复这个流程来订阅其它 RSS ，但不要忘记以上步骤是在一个测试群聊里进行的，如果想要把信息送到频道，需要把上面配置的 Chat ID 修改为频道 id，这里使用一个简单的方法获得 id：\n在 Telegram 里，搜索并关注一个叫做 @userinfobot 的机器人，或点击链接 。 进入接收消息的那个频道，并转发任意一条消息，发送给刚刚那个 @userinfobot。 @userinfobot 会立刻回复你一条信息，找到 Id 后面跟着的那个以 -100 开头的数字，即你频道的唯一 ID。 Note 有好奇心的朋友可能会用这个机器人来试一试之前那个群聊的 id，你会发现这个得到的 id 并不是-100 开头的那个 id 了。\n这是因为 Telegram 建群时默认的类型是普通群组（功能有限），而-100 开头的是拥有更强大的功能的超级群组。为了让 n8n 就能稳定地发送消息， Chat ID 需要用 -100 开头的。私人频道可以满足个人信息聚合的要求。如果想把信息发到一个群里和朋友分享，可以自行搜索手动将那个群升级。\n使用已有的工作流 当然，如果也可以直接使用别人的成果\u0026ndash; reorx的工作流合集 ，博主有简单说明逻辑。\n以 RSS 的工作流为例，先进入仓库 ，复制 json 文件。回到 n8n 后台新建工作流，直接粘贴。然后修改 RSS 的链接，以及 telegram 的 chatid 。最后点击执行工作流测试一下是否连通。如果没问题的话，会在频道收到一条最新的推文。\nchatid 的获取\n在 Telegram 里，搜索并关注一个叫做 @userinfobot 的机器人，或点击链接 。 进入接收消息的那个频道，并转发任意一条消息，发送给刚刚那个 @userinfobot。 @userinfobot 会立刻回复你一条信息，找到 Id 后面跟着的那个以 -100 开头的数字，即你频道的唯一 ID。 进阶玩法-订阅多个 RSS 从头搭建一个工作流来处理多个 RSS 源。\nCode 节点（订阅管理） 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 const myRssFeeds = [ { name: \u0026#34;douchi\u0026#34;, url: \u0026#34;https://rss.app/feeds/hZVUbnIx3yBAbKMU.xml\u0026#34; }, { name: \u0026#34;yukieyun\u0026#34;, url: \u0026#34;https://yukieyun.net/index.xml\u0026#34; }, { name: \u0026#34;thirdshire\u0026#34;, url: \u0026#34;https://thirdshire.com/index.xml\u0026#34; }, { name: \u0026#34;yitaoli\u0026#34;, url: \u0026#34;https://yitaoli2023.github.io/yitaoli/index.xml\u0026#34; }, { name: \u0026#34;bamboobone9\u0026#34;, url: \u0026#34;https://bamboobone9.com/index.xml\u0026#34; }, { name: \u0026#34;pursuitus\u0026#34;, url: \u0026#34;https://blog.pursuitus.com/feed\u0026#34; }, { name: \u0026#34;wraith615\u0026#34;, url: \u0026#34;https://blog.wraith615.xyz/rss.xml\u0026#34; }, { name: \u0026#34;gigigatgat\u0026#34;, url: \u0026#34;https://www.gigigatgat.ca/index.xml\u0026#34; }, { name: \u0026#34;ignativssss\u0026#34;, url: \u0026#34;https://ignativssss.github.io//index.xml\u0026#34; }, { name: \u0026#34;asyncx\u0026#34;, url: \u0026#34;https://blog.asyncx.top/zh.xml\u0026#34; }, { name: \u0026#34;birds\u0026#34;, url: \u0026#34;https://moresci.sale/@birds.rss\u0026#34; }, { name: \u0026#34;shyrz\u0026#34;, url: \u0026#34;https://shyrz.me/rss/\u0026#34; }, { name: \u0026#34;douchiBook\u0026#34;, url: \u0026#34;https://bamboobone9.com/index.xml\u0026#34; }, { name: \u0026#34;ruanyifeng\u0026#34;, url: \u0026#34;https://feeds.feedburner.com/ruanyifeng\u0026#34; }, { name: \u0026#34;decohack\u0026#34;, url: \u0026#34;https://decohack.com/feed/\u0026#34; } ]; return myRssFeeds.map(feed =\u0026gt; ({ json: { feedName: feed.name, feedUrl: feed.url } })); RSS Read 节点 Feed URL ： {{ $json.feedUrl }}\nCode 节点（剪切） 只保留最新 3（n） 条，不确定是否能提高效率。\n1 2 3 4 5 6 7 8 9 const items = $input.all(); items.sort((a, b) =\u0026gt; { const dateA = new Date(a.json.pubDate || 0).getTime(); const dateB = new Date(b.json.pubDate || 0).getTime(); return dateB - dateA; }); return items.slice(0, 3); Edit Fields (Set) 节点 点击 Add Value (添加值)。 Name (名称): 输入 feedName Value (值): 输入下面的表达式。 1 {{ $(\u0026#39;list\u0026#39;).item.json.feedName }} 并打开最下面的一个开关\u0026ndash; Include Other Input Fields。\n在 RSS Read 抓取完文章后，Set 节点会把 feedName 附加到每一篇文章数据上。\nCode 节点（精选最新） 在所有新文章里，每个来源只挑出最新的一篇。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 {% raw %} const items = $input.all(); const latestByFeed = {}; // 用对象保存每个源的最新文章 for (const item of items) { const feed = item.json.feedName || \u0026#39;unknown\u0026#39;; const pubDate = item.json.pubDate ? new Date(item.json.pubDate).getTime() : 0; if (!latestByFeed[feed]) { latestByFeed[feed] = item; } else { const existingDate = latestByFeed[feed].json.pubDate ? new Date(latestByFeed[feed].json.pubDate).getTime() : 0; if (pubDate \u0026gt; existingDate) { latestByFeed[feed] = item; } } } // 把对象里的结果转成数组返回 return Object.values(latestByFeed); {% endraw %} Remove Duplicates 节点 防止文章重复。 operation：Remove Items Processed in Previous Executions value ： {{ $json.guid || $json.link }} Send a text message（Telegram） 1 2 3 📝{{$json[\u0026#34;title\u0026#34;]}} #blog {{$json[\u0026#34;link\u0026#34;]}} 解析模式为 HTML。\n工作流问题 第三方服务不能成功\n本地代理设置 报错 The service refused the connection - perhaps it is offline\n检查容器代理情况\n1 docker inspect n8n | Select-String -Pattern \u0026#34;PROXY\u0026#34; 输出是走代理的，核心问题是 127.0.0.1:7890 在容器里访问不到宿主机代理，最后修改了一下启动命令可以成功。\n1 docker run -d --name n8n -p 5678:5678 -e \u0026#34;HTTP_PROXY=http://host.docker.internal:7890\u0026#34; -e \u0026#34;HTTPS_PROXY=http://host.docker.internal:7890\u0026#34; -v ~/.n8n:/home/node/.n8n -v ~/.n8n_database:/database n8nio/n8n 为了不再出这个问题，删了容器重新在本地直接存下配置，\u0026quot;C:\\n8n-data\\docker-compose.yml\u0026quot;\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 version: \u0026#34;3.8\u0026#34; services: n8n: image: n8nio/n8n container_name: n8n ports: - \u0026#34;5678:5678\u0026#34; environment: # 代理配置（写死） HTTP_PROXY: http://host.docker.internal:7890 HTTPS_PROXY: http://host.docker.internal:7890 NO_PROXY: localhost,127.0.0.1 volumes: # 数据卷（写死路径，防止丢配置） - ./n8n_data:/home/node/.n8n - ./n8n_database:/database restart: unless-stopped 然后进入文件夹创建数据卷\n1 docker compose up -d 启动 docker compose up -d 停止 docker compose down 查看日志 docker compose logs -f 更新 docker-compose pull docker-compose down docker-compose up -d ","date":"2025-08-15T19:51:00+08:00","permalink":"/p/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%81%9A%E5%90%88%E4%BF%A1%E6%81%AF%E5%88%9D%E5%B0%9D%E8%AF%95n8ntelegram/","title":"自动化工作流聚合信息初尝试（n8n,telegram）"}]
