<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>教程 on 红旗下的蛋</title><link>https://blog.fallleaf.net/tags/tutorial/</link><description>Recent content in 教程 on 红旗下的蛋</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>fallleaf</copyright><lastBuildDate>Sun, 31 May 2026 12:52:00 +0800</lastBuildDate><atom:link href="https://blog.fallleaf.net/tags/tutorial/index.xml" rel="self" type="application/rss+xml"/><item><title>酒店房间HIIT训练指南：20分钟高效燃脂，出差也能坚持锻炼</title><link>https://blog.fallleaf.net/p/hiit20/</link><pubDate>Sun, 31 May 2026 12:52:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/hiit20/</guid><description>&lt;img src="https://blog.fallleaf.net/p/hiit20/cover.webp" alt="Featured image of post 酒店房间HIIT训练指南：20分钟高效燃脂，出差也能坚持锻炼" /&gt;&lt;h2 id="引言"&gt;引言
&lt;/h2&gt;&lt;p&gt;出差和旅行常常打乱我们的健身节奏。酒店健身房要么关闭、要么器械有限，加上白天紧凑的工作安排，很难抽出时间去锻炼。&lt;/p&gt;
&lt;p&gt;但好消息是： &lt;strong&gt;你只需要20分钟、一块浴巾大小的空间，以及自身体重，就能完成一次高效的燃脂训练。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;高强度间歇训练（High-Intensity Interval Training，简称HIIT）正是为这种场景设计的解决方案——短时、高效、无需器械。多项研究证实，20分钟的HIIT在减脂效果上可以媲美甚至超过45-60分钟的传统有氧运动，并能触发持续数小时至24小时的“后燃效应”（EPOC），让你在训练结束后仍在消耗热量。&lt;/p&gt;
&lt;p&gt;本文将从科学原理出发，结合多套经过验证的实操方案，帮你打造属于自己的“移动健身房”。&lt;/p&gt;
&lt;h2 id="hiit的核心科学原理为什么20分钟就够了"&gt;HIIT的核心科学原理：为什么20分钟就够了？
&lt;/h2&gt;&lt;h3 id="后燃效应epoc"&gt;后燃效应（EPOC）
&lt;/h3&gt;&lt;p&gt;HIIT之所以高效，关键在于 &lt;strong&gt;运动后过量氧耗（Excess Post-Exercise Oxygen Consumption，EPOC）&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;高强度训练会让你的身体进入“缺氧”状态，训练结束后，身体需要额外的氧气来恢复体内平衡——包括补充肌酸磷酸、清除乳酸、修复受损肌纤维、恢复体温和心率等。这个过程需要消耗大量能量，即 &lt;strong&gt;后燃效应&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;科学数据&lt;/strong&gt; ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HIIT的EPOC效应 &lt;strong&gt;可持续数小时至24小时&lt;/strong&gt; ，在此期间基础代谢率持续提升。&lt;/li&gt;
&lt;li&gt;研究表明，HIIT的EPOC效应比中等强度持续训练（MICT）高出数倍。&lt;/li&gt;
&lt;li&gt;训练后全天基础代谢率可提升约 &lt;strong&gt;15%&lt;/strong&gt; ，相当于额外消耗可观的热量。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="减脂效率对比"&gt;减脂效率对比
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;训练类型&lt;/th&gt;
&lt;th&gt;单次时长&lt;/th&gt;
&lt;th&gt;后燃效应持续时间&lt;/th&gt;
&lt;th&gt;脂肪氧化效率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;稳态有氧（慢跑）&lt;/td&gt;
&lt;td&gt;45-60分钟&lt;/td&gt;
&lt;td&gt;1-2小时&lt;/td&gt;
&lt;td&gt;中等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HIIT&lt;/td&gt;
&lt;td&gt;20-30分钟&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;数小时至24小时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;显著更高&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;核心结论&lt;/strong&gt; ：减脂的核心不在于你运动了多久，而在于你的 &lt;strong&gt;强度是否足够&lt;/strong&gt; 。20分钟高质量的“真HIIT”，远好于40分钟因体力不支而妥协的“伪HIIT”。&lt;/p&gt;
&lt;h2 id="如何判断强度是否足够"&gt;如何判断强度是否足够？
&lt;/h2&gt;&lt;p&gt;使用 &lt;strong&gt;主观疲劳评分（RPE）&lt;/strong&gt; ：训练时感觉“很吃力，呼吸急促，只能说出几个单词”即为合适强度（对应 RPE 8–9/10）。无需任何监测设备，全凭身体感受。&lt;/p&gt;
&lt;h2 id="酒店hiit的三大设计原则"&gt;酒店HIIT的三大设计原则
&lt;/h2&gt;&lt;p&gt;在酒店房间这种狭小、紧凑的空间里设计HIIT，有三个核心原则：&lt;/p&gt;
&lt;h3 id="1-短时20分钟以内"&gt;1️⃣ 短时（20分钟以内）
&lt;/h3&gt;&lt;p&gt;酒店训练最大的敌人是 &lt;strong&gt;时间碎片化&lt;/strong&gt; 。20分钟是一个心理上容易接受的时长，不易产生畏难情绪。且研究表明，20–30分钟的HIIT足以引发可观的EPOC效应。&lt;/p&gt;
&lt;h3 id="2-高强强度决定效果"&gt;2️⃣ 高强（强度决定效果）
&lt;/h3&gt;&lt;p&gt;减脂效果取决于 &lt;strong&gt;冲刺期的强度是否足够&lt;/strong&gt; 。训练时主观感觉应达到“很吃力、无法说完整句子”（RPE 8–9/10）。&lt;/p&gt;
&lt;h3 id="3-低噪不影响他人"&gt;3️⃣ 低噪（不影响他人）
&lt;/h3&gt;&lt;p&gt;避免跳跃动作（如深蹲跳、开合跳），选择低冲击版本。利用墙壁、床沿、椅子等家具辅助。&lt;/p&gt;
&lt;h2 id="五三套酒店hiit实操方案"&gt;五、三套酒店HIIT实操方案
&lt;/h2&gt;&lt;h3 id="方案a入门tabata循环适合初学者"&gt;方案A：入门Tabata循环（适合初学者）
&lt;/h3&gt;&lt;p&gt;采用经典Tabata协议： &lt;strong&gt;20秒全力运动 + 10秒休息&lt;/strong&gt; ，重复8组（共4分钟）。本方案用4个动作循环两遍来完成一轮。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;阶段&lt;/th&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;时长&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔥 热身&lt;/td&gt;
&lt;td&gt;原地慢跑、手臂绕环、躯干扭转&lt;/td&gt;
&lt;td&gt;3分钟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💪 正式训练 ×4轮&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;一轮训练结构（共4分钟）：&lt;/strong&gt; ① 靠墙静蹲：20秒+10秒休息 ② 跪姿俯卧撑：20秒+10秒休息 ③ 登山跑：20秒+10秒休息 ④ 深蹲：20秒+10秒休息 &lt;strong&gt;然后立即从动作①开始，再做一遍①→②→③→④。&lt;/strong&gt; （即：4个动作各做2组，共8组，耗时4分钟）&lt;/td&gt;
&lt;td&gt;每轮4分钟，共16分钟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧘 拉伸&lt;/td&gt;
&lt;td&gt;大腿前侧、胸肩、腹部拉伸&lt;/td&gt;
&lt;td&gt;1分钟&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;总计&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20分钟&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;差异化调整&lt;/strong&gt; ：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;降阶&lt;/strong&gt; ：静蹲角度减小、俯卧撑改为推墙、登山跑放慢速度。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进阶&lt;/strong&gt; ：深蹲最后10秒加入脉冲、俯卧撑抬脚、登山跑加快频率。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="方案b4020经典结构适合有运动基础者"&gt;方案B：40/20经典结构（⚠️适合有运动基础者）
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt; ：本方案对心肺耐力有一定要求。初学者可先练习方案A 2~4周，或采用文末的“简化版”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;采用 &lt;strong&gt;40秒运动 + 20秒休息&lt;/strong&gt; 节奏，分三大组，每组4个动作。&lt;/p&gt;
&lt;h4 id="-热身3分钟"&gt;🔥 热身（3分钟）
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;时间&lt;/th&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0:00-1:00&lt;/td&gt;
&lt;td&gt;开合步（无跳跃版本）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:00-2:00&lt;/td&gt;
&lt;td&gt;徒手深蹲（慢下快上）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2:00-3:00&lt;/td&gt;
&lt;td&gt;站姿屈髋（Good Morning）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="-大组一下肢爆发与心率轰炸4分钟"&gt;💪 大组一：下肢爆发与心率轰炸（4分钟）
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① 静音波比跳&lt;/td&gt;
&lt;td&gt;双手撑地→双脚依次后迈→收回→站立踮脚尖&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② 囚徒深蹲提踵&lt;/td&gt;
&lt;td&gt;双手抱头深蹲，起身时爆发踮脚尖&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ 后弓步+提膝&lt;/td&gt;
&lt;td&gt;向后迈步下蹲，起身顺势提膝（左右各20秒）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④ 拳击阴影步&lt;/td&gt;
&lt;td&gt;微屈腿，快速出直拳，脚下细碎移动&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;→ 组间休息1分钟&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="-大组二核心上肢与抗阻4分钟"&gt;💪 大组二：核心上肢与抗阻（4分钟）
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① 慢速攀爬者&lt;/td&gt;
&lt;td&gt;俯卧撑姿势，有控制地将膝盖贴近胸口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② 爬行俯卧撑&lt;/td&gt;
&lt;td&gt;站姿→双手爬至平板→俯卧撑→爬回站立&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ 侧支撑提臀&lt;/td&gt;
&lt;td&gt;单肘支撑，臀部上下摆动（每侧20秒）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④ 俯卧W-T伸展&lt;/td&gt;
&lt;td&gt;趴姿，上肢微抬，做W和T字收缩&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;→ 组间休息1分钟&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id="-大组三终极全身力竭4分钟"&gt;💪 大组三：终极全身力竭（4分钟）
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;做法&lt;/th&gt;
&lt;th&gt;降噪/替代提醒&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① 滑冰者左右迈步&lt;/td&gt;
&lt;td&gt;大幅度左右跨步，保持低重心&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② 死虫式硬核版&lt;/td&gt;
&lt;td&gt;仰卧，手肘与对侧膝盖对推&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ 深蹲静止&lt;/td&gt;
&lt;td&gt;90度静蹲定住，感受大腿灼烧&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④ 高抬腿垫步&lt;/td&gt;
&lt;td&gt;原地快速高抬腿，前脚掌着地&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;如地板传声明显，改为原地摆臂快走&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="-拉伸冷身4分钟"&gt;🧘 拉伸冷身（4分钟）
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;时长&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;大腿前侧拉伸（扶墙抓脚踝）&lt;/td&gt;
&lt;td&gt;每侧45秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;小腿与下背拉伸（下犬式）&lt;/td&gt;
&lt;td&gt;60秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;臀部拉伸（鸽子式）&lt;/td&gt;
&lt;td&gt;每侧45秒&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;简化版（体能不足时）&lt;/strong&gt; ：将每个大组减少为3个动作（跳过第4个），组间休息延长至90秒。&lt;/p&gt;
&lt;h3 id="方案c全身体验hiit适合进阶训练者"&gt;方案C：全身体验HIIT（⚠️适合进阶训练者）
&lt;/h3&gt;&lt;p&gt;40秒运动 + 15-20秒休息，8个动作循环2-3轮。 &lt;strong&gt;一轮约5分20秒（按休息20秒计），完成2轮约11分钟，3轮约16分钟。&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;th&gt;关键要点与安全提示&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;① 靠墙静蹲&lt;/td&gt;
&lt;td&gt;背部贴墙，大腿与地面平行，和小腿成90度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;② 椅子辅助臂屈伸&lt;/td&gt;
&lt;td&gt;⚠️ &lt;strong&gt;必须使用靠墙固定的实木椅或床沿，避开带轮办公椅。下降至肘约90度，肩部若感不适立即停止。&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;③ 平板支撑肩胛推起&lt;/td&gt;
&lt;td&gt;吸气肩胛后缩，呼气推起。保持核心收紧。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;④ 后撤步箭步蹲&lt;/td&gt;
&lt;td&gt;后撤一大步下蹲，前膝不过脚尖。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑤ 宽距深蹲&lt;/td&gt;
&lt;td&gt;脚宽于肩，臀部主动发力。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑥ 仰卧交替抬腿&lt;/td&gt;
&lt;td&gt;仰卧，双腿约45度交替摆动，下背部贴地。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑦ 俯身登山跑&lt;/td&gt;
&lt;td&gt;核心收紧，快速交替提膝。 &lt;strong&gt;若地板声响大，可替换为慢速攀爬者。&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⑧ 动态臀桥&lt;/td&gt;
&lt;td&gt;仰卧屈膝，臀部发力上顶，在顶点收缩1-2秒。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="酒店训练实操贴士"&gt;酒店训练实操贴士
&lt;/h2&gt;&lt;h3 id="-空间准备"&gt;🏨 空间准备
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;清理出约 &lt;strong&gt;2米见方&lt;/strong&gt; 的空间，床尾或窗前均可。若房间实在狭小，可优先使用方案A，或将站立动作改为原地静态版本。&lt;/li&gt;
&lt;li&gt;铺上酒店 &lt;strong&gt;大浴巾&lt;/strong&gt; 代替瑜伽垫，防滑隔脏、吸汗。若房间为木地板，建议将浴巾铺在摩擦力较大的地毯区域；若直接铺在木地板上，可在浴巾四角少许拍点水以增强抓地力，或赤脚训练。&lt;/li&gt;
&lt;li&gt;善用 &lt;strong&gt;墙壁、床沿、椅子&lt;/strong&gt; 辅助（椅子必须稳固并靠墙）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-防噪音技巧"&gt;🔊 防噪音技巧
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;核心原则&lt;/strong&gt; ：全程避免跳跃动作，选择低冲击版本。&lt;/li&gt;
&lt;li&gt;铺厚毛巾缓冲脚步声。&lt;/li&gt;
&lt;li&gt;最佳时间： &lt;strong&gt;下午16:00-19:00&lt;/strong&gt; （不仅运动表现好，也不会影响楼下休息）。&lt;/li&gt;
&lt;li&gt;文中已为高抬腿垫步、俯身登山跑等动作提供了低噪替代选项，请根据房间隔音条件灵活选用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-通风与补水"&gt;💧 通风与补水
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;训练前打开外窗或新风系统调至最大，保证氧气充足。&lt;/li&gt;
&lt;li&gt;房间内常备水杯， &lt;strong&gt;少量多次&lt;/strong&gt; （每次约50-100ml）补充水分。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;训练后1小时内补充蛋白质+碳水&lt;/strong&gt; （如一根香蕉+一小盒酸奶），帮助身体恢复。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-计时与监控"&gt;⏱️ 计时与监控
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;手机播放HIIT跟练视频或使用HIIT计时器App（推荐“Tabata Timer”或“Seconds”）。&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;RPE主观疲劳评分&lt;/strong&gt; （1-10分，目标8-9分，即“很吃力但能坚持”）。&lt;/li&gt;
&lt;li&gt;记录训练日期和感受，维持动力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="-安全第一"&gt;⚠️ 安全第一
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;穿抓地力好的运动鞋防止打滑。&lt;/li&gt;
&lt;li&gt;确保训练区域无障碍物、地毯无卷边。&lt;/li&gt;
&lt;li&gt;如果感到头晕、胸闷、关节刺痛， &lt;strong&gt;立即停止&lt;/strong&gt; 。&lt;/li&gt;
&lt;li&gt;初学者从低强度或较短时间开始，逐步适应。 &lt;strong&gt;永远优先保证动作质量，而非速度或次数。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;在酒店房间，没有器械绝不是懈怠的理由。抓住 &lt;strong&gt;短时、高强、低噪&lt;/strong&gt; 三个原则，你完全可以在方寸之间完成一次高质量的燃脂训练。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;记住&lt;/strong&gt; ：减脂的核心不在于你在HIIT中“坚持了多久”，而在于冲刺期“强度是否足够”。同时， &lt;strong&gt;训练与饮食必须结合&lt;/strong&gt; ，保持适度的热量缺口才能让减脂效果最大化。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;坚持每周3-4次，让身体习惯这种高代谢的节奏，就能最大程度地发挥HIIT的后燃效应，让出差不再是健身的“空窗期”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料&lt;/strong&gt; ：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Gibala, M. J., Little, J. P., Macdonald, M. J., &amp;amp; Hawley, J. A. (2012). Physiological adaptations to low-volume, high-intensity interval training in health and disease. &lt;em&gt;The Journal of Physiology&lt;/em&gt;, 590(Pt 5), 1077-1084.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支撑内容&lt;/strong&gt; ：HIIT在短时间内可达到与长时间传统有氧相当的健康和代谢效益，包括减脂和EPOC效应。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Laforgia, J., Withers, R. T., Shipp, N. J., &amp;amp; Gore, C. J. (1997). Excess post-exercise oxygen consumption: magnitude and mechanisms. &lt;em&gt;Journal of Sports Sciences&lt;/em&gt;, 15(4), 437-451.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支撑内容&lt;/strong&gt; ：EPOC的持续时间（数小时至24小时）及生理机制。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Børsheim, E., &amp;amp; Bahr, R. (2003). Effect of exercise intensity, duration and mode on post-exercise oxygen consumption. &lt;em&gt;Sports Medicine&lt;/em&gt;, 33(14), 1037-1060. (综述文章)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支撑内容&lt;/strong&gt; ：运动强度是影响EPOC效应的关键因素，HIIT的EPOC效应显著高于中等强度持续训练（MICT）。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Vella, C. A., &amp;amp; Kravitz, L. (2004). What is the optimal exercise intensity for maximizing EPOC? &lt;em&gt;IDEA Fitness Journal&lt;/em&gt;, 1(5), 32-36. (行业期刊科普文章)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支撑内容&lt;/strong&gt; ：20-30分钟的HIIT足以引发可观的EPOC效应，为短时训练方案提供依据。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Borg, G. (1998). &lt;em&gt;Borg&amp;rsquo;s Perceived Exertion and Pain Scales&lt;/em&gt;. Human Kinetics.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支撑内容&lt;/strong&gt; ：RPE主观疲劳量表的权威定义与使用方法（CR10量表对应8-9分为高强度）。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>让清爽酸味常伴左右-发酵酸黄瓜制作秘籍</title><link>https://blog.fallleaf.net/p/life-fermented-pickles-guide/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/life-fermented-pickles-guide/</guid><description>&lt;img src="https://blog.fallleaf.net/p/life-fermented-pickles-guide/cover.webp" alt="Featured image of post 让清爽酸味常伴左右-发酵酸黄瓜制作秘籍" /&gt;&lt;h2 id="酸黄瓜的好处"&gt;酸黄瓜的好处
&lt;/h2&gt;&lt;p&gt;经常中午出差，在候车室随便买个汉堡对付午饭是常有的事。但时间久了，反倒是汉堡里那几片酸黄瓜让我产生了“依赖”——那种清爽解腻的酸味，真是回味无穷。后来研究了一通，查了一些网上信息，索性自己在家捣鼓，试下来发现，味道和外面买到的还真有得一拼。&lt;/p&gt;
&lt;p&gt;我做的不是那种用醋直接泡的速成货，而是靠 &lt;strong&gt;自然乳酸发酵&lt;/strong&gt; 。原理特别简单：就是利用黄瓜表面自带的乳酸菌，把黄瓜里的糖分（主要是葡萄糖）慢慢转化成乳酸，酸味自然就出来了。&lt;/p&gt;
&lt;p&gt;这种发酵过程的好处可不少：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pH值自然降低：&lt;/strong&gt; 乳酸不断积累，环境会越来越酸。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;杂菌被压制：&lt;/strong&gt; 低pH值加上盐分，腐败菌就很难生存了，反倒是耐酸的乳酸菌占了上风。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;风味更丰富：&lt;/strong&gt; 发酵过程中除了乳酸，还会产生少量酒精、醋酸等，味道比单纯的“酸”要丰富得多。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;营养更容易吸收：&lt;/strong&gt; 一些大分子物质会被分解成更容易被身体吸收的小分子。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;额外补充乳酸菌：&lt;/strong&gt; 这一点就算是个额外收益吧。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="制作方法和几个关键点"&gt;制作方法和几个关键点
&lt;/h2&gt;&lt;p&gt;制作流程其实就三步：“清洗-杀青-发酵”。&lt;/p&gt;
&lt;p&gt;选择短小一点的黄瓜，洗干净，然后 &lt;strong&gt;杀青24小时&lt;/strong&gt; ，所谓杀青就是把黄瓜浸泡到2%的盐水里。接着，放入玻璃瓶中， &lt;strong&gt;发酵一个月左右&lt;/strong&gt; 就可以开吃了。记住，发酵时间不能少于一个月，这样才能避免亚硝酸盐残留的风险。另外，根据个人喜好，可以放点香草、大料进去。&lt;/p&gt;
&lt;h3 id="关键点1一定要尽量无氧"&gt;关键点1：一定要尽量无氧
&lt;/h3&gt;&lt;p&gt;这一点是成败的关键，因为乳酸菌是厌氧菌。&lt;/p&gt;
&lt;p&gt;我只用玻璃瓶，千万别用塑料或者金属容器，因为酸性物质可能会和它们产生化学反应。陶罐或瓷罐也可以，但一定要保证密封性。封口的时候，我会垫上一层食品级的塑料袋，目的只有一个： &lt;strong&gt;让黄瓜始终处在没有弱氧的环境里&lt;/strong&gt; 。&lt;/p&gt;
&lt;h3 id="关键点2盐是稳定器不是调味品"&gt;关键点2：盐是“稳定器”，不是调味品
&lt;/h3&gt;&lt;p&gt;我用的是 &lt;strong&gt;不含碘的粗盐或海盐&lt;/strong&gt; 。含碘盐容易让腌制品颜色发灰甚至发黑，影响卖相和口感。盐的主要作用是：降低水活性，抑制杂菌，同时为乳酸菌创造一个相对安全的生存区间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用量控制：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;杀青时&lt;/strong&gt; ：用量是水重量的 &lt;strong&gt;2%&lt;/strong&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发酵时&lt;/strong&gt; ：用量是黄瓜重量的 &lt;strong&gt;2%&lt;/strong&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;发酵的这个比例一般比较合适，但你也可以根据自己对安全性和口味的要求适当减少用量。&lt;/p&gt;
&lt;h3 id="关键点3关于杀青"&gt;关键点3：关于“杀青”
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用凉水：&lt;/strong&gt; 不要用热水，免得把乳酸菌直接“烫死”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;杀青水盐度：&lt;/strong&gt; 按水重量的 &lt;strong&gt;2% 加盐&lt;/strong&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时间：&lt;/strong&gt; 不少于 &lt;strong&gt;24 小时&lt;/strong&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;杀青主要是为了抑制有害细菌，促进乳酸菌生长，同时减少黄瓜的水分，让口感更脆。&lt;/p&gt;
&lt;h3 id="关键点4关于发酵"&gt;关键点4：关于“发酵”
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不要加水：&lt;/strong&gt; 杀青后的黄瓜稍微沥一下水，直接放入玻璃容器即可，不用额外添加卤水或醋。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;让盐均匀：&lt;/strong&gt; 加盐封盖后，要摇晃几下容器，让盐均匀分布，这样能更好地抑制有害细菌，加快乳酸菌发酵。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;确保黄瓜浸没：&lt;/strong&gt; 加盐发酵几天后，黄瓜会自然出卤水。记得每天轻轻摇晃几次，让卤水均匀覆盖黄瓜，也可以用重物压着，开采用食品级塑料袋装入适量水分，放入瓶中压实。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="我的成功总结"&gt;我的成功总结
&lt;/h2&gt;&lt;p&gt;总的来说，发酵酸黄瓜的成功秘诀就那么几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用黄瓜自带的乳酸菌发酵，不用其他卤水。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制好盐量（2% 或略低）。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全程尽量无氧。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;确保黄瓜始终接触到卤水。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记得用不含碘的盐，而非含碘盐。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;杀青时间不小于24小时，发酵时间不小于1个月。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;遵循这几点，你也能做出清爽可口的发酵酸黄瓜了！怎么样，简单吧，赶快去买黄瓜（白菜、包菜、甘蓝、红萝卜、洋葱都行）试试吧。&lt;/p&gt;</description></item><item><title>驾驭你的LLM：从提示词新手到“指令设计师”的极简指南</title><link>https://blog.fallleaf.net/p/growth-llm-prompt-to-instruction-guide/</link><pubDate>Tue, 07 Oct 2025 08:15:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/growth-llm-prompt-to-instruction-guide/</guid><description>&lt;img src="https://blog.fallleaf.net/p/growth-llm-prompt-to-instruction-guide/cover.webp" alt="Featured image of post 驾驭你的LLM：从提示词新手到“指令设计师”的极简指南" /&gt;&lt;h2 id="为什么llm总跑偏先搞清它其实不会懂你"&gt;为什么LLM总“跑偏”？先搞清它其实不会“懂你”
&lt;/h2&gt;&lt;p&gt;你有没有遇到过这样的情况：问LLM一个问题，有时候它回答得像个专家，精准又到位；有时候它就好像刚学会说话的小孩，答非所问，甚至自说自话。难道LLM在“抽风”？其实不完全是。&lt;/p&gt;
&lt;p&gt;LLM的本质其实是个超级“猜词机器”：它并不真正理解你说话的深意，而是在它庞大的学习数据中，预测“下一句最可能出现的词”是什么。换句话说，它靠概率输出内容。&lt;/p&gt;
&lt;p&gt;当你给它的提示话很模糊时，它只能在无数的可能中猜答案，自然容易“跑偏”。&lt;/p&gt;
&lt;p&gt;所以，想让LLM表现得聪明，关键不在问得多，而在于问得 &lt;strong&gt;准&lt;/strong&gt; 。你的问题越模糊，LLM就越容易瞎猜；问题越精准，它就越能给你想要的答案。说白了，提示词就是你手里的方向盘，你指的方向越清楚，LLM这辆车才越不会跑偏。&lt;/p&gt;
&lt;h2 id="dice-框架提示词的四个核心组成"&gt;D.I.C.E. 框架：提示词的四个核心组成
&lt;/h2&gt;&lt;p&gt;给LLM下指令（提示词），就跟让新同事帮你办事一样。你要是只说“把这个弄一下”，他肯定一头雾水，办事的结果也不如你所愿。你得告诉他前因后果、他该扮什么角色、具体要做什么、最后交出什么成果，这样才能达到你预期的目的。这里有个特别好用的方法，是美国人 Michael Blank 提出了一个超实用的D.I.C.E.方法，将任务拆成四个重点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;D — 背景信息（DATA）&lt;/strong&gt;
告诉LLM，你要做什么，为什么要做。帮助它把任务放在正确的“道路”上。
例：“我运营一家B2B软件公司，每月接触200个潜客，转化率只有8%，我想提高销售效率。”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I — 角色定位（IDENTIFY）&lt;/strong&gt;
给LLM戴上“专业帽”，限定它的身份和专业方向。
例：“请你扮演一位有10年经验的SaaS资深销售顾问，专长是优化中小企业销售流程。”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C — 澄清细节（CLARIFY）&lt;/strong&gt;
别急着一次给完全部信息。最好让LLM先提一个问题，确认重点，避免误解。
例：“开始分析前，请先问我一个关键的销售环节问题。”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E — 明确交付（EXECUTE）&lt;/strong&gt;
告诉LLM你想要什么样的结果，输出格式、风格、长度等都要明确。
例：“在我答复后，请给我一份30天销售改进计划，格式为一步步执行的清单。”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用了这样的方式提示，LLM才不会给你泛泛而谈的建议，而是一份专业且可执行的行动方案。&lt;/p&gt;
&lt;h2 id="clear-原则判断提示词质量的五个标准"&gt;C.L.E.A.R. 原则：判断提示词质量的五个标准
&lt;/h2&gt;&lt;p&gt;如果说D.I.C.E.给提示词搭起了“骨架”，那么Lovable公司提出的C.L.E.A.R.原则就是帮你把骨架的“肌肉和皮肤”打磨完整，让任务说明干净、有效、有活力。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;原则&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;实践要点&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C 简洁（Concise）&lt;/td&gt;
&lt;td&gt;去掉多余客套和废话，直奔重点&lt;/td&gt;
&lt;td&gt;不说“谢谢”“麻烦了”这类无关紧要的话&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L 有逻辑（Logical）&lt;/td&gt;
&lt;td&gt;任务分解清楚，步骤合理&lt;/td&gt;
&lt;td&gt;任务执行顺序是否合理，比如先分析再建议&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E 明确（Explicit）&lt;/td&gt;
&lt;td&gt;明确说明要什么和不要什么&lt;/td&gt;
&lt;td&gt;指定风格、字数限制，禁止内容&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A 可调（Adaptive）&lt;/td&gt;
&lt;td&gt;支持后续调整和优化&lt;/td&gt;
&lt;td&gt;留有调整空间，不要锁死边界&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R 可反思（Reflective）&lt;/td&gt;
&lt;td&gt;鼓励LLM总结反馈，提升提示词&lt;/td&gt;
&lt;td&gt;让LLM指出哪里还能更明确或优化&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="提示词的框架与准则"&gt;提示词的框架与准则
&lt;/h2&gt;&lt;p&gt;D.I.C.E. 是提示词的结构框架，它定义了一个提示词该“长成什么样”； C.L.E.A.R. 是质量准则，它确保这个结构内部的逻辑、语言与目标保持清晰一致。&lt;/p&gt;
&lt;p&gt;在实际提示词设计中，我们先用 D.I.C.E. 打底——明确目标、设定角色、补充上下文、定义评估标准； 再以 C.L.E.A.R. 打磨——检视表达是否清晰（Clear）、逻辑是否连贯（Logical）、依据是否可验证（Empirical）、行动是否可执行（Actionable）、反思是否充分（Reflective）。&lt;/p&gt;
&lt;p&gt;这种“两层式”方法能显著提升提示词的稳定性与可复用性： 结构清晰使大模型“理解你要什么”， 质量准则则让输出更贴近“你真正需要的”。&lt;/p&gt;
&lt;h2 id="你是-llm-的导航员帮它锁定方向提升效率"&gt;你是 LLM 的“导航员”：帮它锁定方向，提升效率
&lt;/h2&gt;&lt;p&gt;LLM不会主动“懂”你，它只能根据你给的信息猜测答案。你设计的提示词就像导航系统，帮它锁定正确方向，避免它在海量的可能中胡乱“试探”。&lt;/p&gt;
&lt;p&gt;每一次清晰、有结构的提示输入，都是在缩小它自由发挥的范围，以带来更精准有效的回应。掌握了D.I.C.E.框架和C.L.E.A.R.原则，就让你能更好使用LLM，从“使用者”升级为“驾驭者”，彻底释放LLM的生产力。&lt;/p&gt;
&lt;h2 id="diceclear示范模板"&gt;D.I.C.E.+C.L.E.A.R.示范模板
&lt;/h2&gt;&lt;h3 id="自驾游计划"&gt;自驾游计划
&lt;/h3&gt;&lt;p&gt;生成一份适合一家三口的国庆假期自驾游计划，涵盖路线、每日安排、住宿建议与注意事项。&lt;/p&gt;
&lt;h4 id="dice-框架提示词可粘贴到大模型里看看输出"&gt;D.I.C.E 框架提示词（可粘贴到大模型里看看输出）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#DATA#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;我们是一家三口（两位成人，一位10岁孩子），计划在2025年10月2日至10月7日国庆假期期间自驾从郑州前往重庆旅游。希望行程轻松、有趣，适合家庭出行。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#IDENTIFY#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;请你扮演一位经验丰富的国内亲子旅行规划师，熟悉中西部城市间自驾路线、家庭友好型景点与节假日出行建议。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#CLARIFY#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;你可以先问我一个问题，以确认我们对住宿预算、每日驾驶时长或景点偏好的具体要求。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#EXECUTE#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;请根据我们的时间安排，生成一份6天的行程计划，包括：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每日路线与预计行驶时间；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 推荐景点（适合孩子）与活动安排；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 住宿建议（中等价位，安全舒适）；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每日注意事项（如交通、天气、节假高峰）。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;输出格式为分日条列，每日标题为“Day X：城市名”，语言使用简体中文。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="clear-原则优化"&gt;C.L.E.A.R. 原则优化
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;原则&lt;/th&gt;
&lt;th&gt;应用说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简洁（Concise）&lt;/td&gt;
&lt;td&gt;去除冗余描述，直接说明时间、地点、人数、目标。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;有逻辑（Logical）&lt;/td&gt;
&lt;td&gt;明确起止时间、路线方向、每日安排，避免“重庆周边推荐”这类模糊任务。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;明确（Explicit）&lt;/td&gt;
&lt;td&gt;指定输出格式（分日条列）、语言（简体中文）、住宿类型（中等价位）、人群（亲子）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可调（Adaptive）&lt;/td&gt;
&lt;td&gt;通过 CLARIFY 模块引导 LLM 提问，便于后续补充预算、偏好等信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可反思（Reflective）&lt;/td&gt;
&lt;td&gt;可在输出后追加一句：“如需调整行程节奏或加入特定景点，请告诉我，我可以重新规划。”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="学术论文写作辅助"&gt;学术论文写作辅助
&lt;/h3&gt;&lt;p&gt;撰写一篇关于人工智能伦理的学术论文，目标是投稿至国际期刊。希望获得结构优化建议与引用规范指导，强调逻辑严密、表达规范、支持多轮修订。&lt;/p&gt;
&lt;h4 id="dice-框架提示词可粘贴到大模型里看看输出-1"&gt;D.I.C.E 框架提示词（可粘贴到大模型里看看输出）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#DATA#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;我正在撰写一篇关于人工智能伦理的学术论文，主题聚焦于算法偏见与责任归属问题。目标是投稿至国际科技伦理期刊，要求逻辑清晰、论证严密、引用格式符合国际标准（如 APA 或 IEEE）。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#IDENTIFY#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;请你扮演一位资深学术编辑，熟悉科技伦理领域，具备国际期刊审稿经验，了解常见结构问题与引用规范。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#CLARIFY#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;在开始修改前，请先提出一个关于文章论点结构的关键问题，以确认我是否已建立清晰的中心论点与支持层次。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#EXECUTE#
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;请根据我的主题与目标，提出具体的章节重组建议，包括：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 推荐的章节划分与标题；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每章应承担的论证任务；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 引用格式建议（如文内引用、参考文献排列方式）；
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 总结建议不超过 500 字，使用中文表达，风格正式、学术。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="clear-原则优化-1"&gt;C.L.E.A.R. 原则优化
&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;原则&lt;/th&gt;
&lt;th&gt;应用说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;简洁（Concise）&lt;/td&gt;
&lt;td&gt;去除口语化表达，直接说明论文主题、目标期刊、引用要求。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;有逻辑（Logical）&lt;/td&gt;
&lt;td&gt;明确任务流程：先澄清论点结构，再提出章节建议与引用规范。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;明确（Explicit）&lt;/td&gt;
&lt;td&gt;指定输出格式（中文总结、500 字以内）、引用风格（APA 或 IEEE）、角色设定（学术编辑）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可调（Adaptive）&lt;/td&gt;
&lt;td&gt;通过 CLARIFY 模块引导模型提问，支持后续补充论文摘要、章节草稿等内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可反思（Reflective）&lt;/td&gt;
&lt;td&gt;鼓励模型在输出后提供“如需进一步细化章节内容或补充文献引用，请继续提供草稿内容”之类的反馈建议。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.entrepreneur.com/leadership/i-used-chatgpt-to-transform-my-business-with-these-prompts/497180" target="_blank" rel="noopener"
&gt;D.I.C.E.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.lovable.dev/prompting/prompting-one" target="_blank" rel="noopener"
&gt;C.L.E.A.R.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>国庆中秋最暖的礼物：陪父母练三组“腿力保养操”</title><link>https://blog.fallleaf.net/p/life-parent-leg-strength-workout/</link><pubDate>Sun, 05 Oct 2025 00:00:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/life-parent-leg-strength-workout/</guid><description>&lt;img src="https://blog.fallleaf.net/p/life-parent-leg-strength-workout/cover.webp" alt="Featured image of post 国庆中秋最暖的礼物：陪父母练三组“腿力保养操”" /&gt;&lt;blockquote&gt;
&lt;p&gt;团圆，不只是吃饭合影，
更是守护父母的健康。
让他们站得稳、走得远，
是我们能送出的最好“健康礼物”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="为什么要关注父母的腿"&gt;为什么要关注父母的腿？
&lt;/h2&gt;&lt;p&gt;很多人觉得，父母老了，是因为 &lt;strong&gt;器官衰退&lt;/strong&gt; 、 &lt;strong&gt;记忆变差&lt;/strong&gt; 。
但真正让老人生活质量下降的“第一杀手”，其实是—— &lt;strong&gt;腿没力气了&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;肌力流失的隐性危害&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上下楼变得吃力，容易摔倒；&lt;/li&gt;
&lt;li&gt;走路速度变慢，活动减少；&lt;/li&gt;
&lt;li&gt;代谢下降，引发肥胖、糖尿病、高血压；&lt;/li&gt;
&lt;li&gt;活动减少后，心肺功能进一步恶化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以， &lt;strong&gt;保腿力 = 保独立生活能力&lt;/strong&gt; 。
真正的孝顺，不只是陪伴，而是帮他们守住行动力。&lt;/p&gt;
&lt;h2 id="国庆中秋假期比送礼更实在的陪伴"&gt;国庆中秋假期：比送礼更实在的陪伴
&lt;/h2&gt;&lt;p&gt;聚餐、旅行、拍照固然重要，
但更值得我们花 10 分钟的事——
就是陪父母做几组简单、安全的腿力训练。&lt;/p&gt;
&lt;h2 id="三组基础动作从坐得稳到走得远"&gt;三组基础动作：从“坐得稳”到“走得远”
&lt;/h2&gt;&lt;h3 id="坐到站chair-squat"&gt;坐到站（Chair Squat）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;/strong&gt; ：增强大腿、臀部力量，帮父母起身更轻松&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;做法&lt;/strong&gt; ：坐在椅子上 → 双脚与肩同宽 → 慢慢站起（3-5秒） → 慢慢坐下（3-5秒）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示&lt;/strong&gt; ：初学可扶膝或椅子扶手&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="垫脚尖calf-raise"&gt;垫脚尖（Calf Raise）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;/strong&gt; ：强化小腿肌肉，提升踝关节稳定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;做法&lt;/strong&gt; ：扶墙或椅背 → 脚跟慢慢抬起到最高 → 停3秒 → 放下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示&lt;/strong&gt; ：逐步减少手部支撑，更能锻炼平衡&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="侧向蹲side-squat"&gt;侧向蹲（Side Squat）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;/strong&gt; ：锻炼臀部外侧肌群，提升平衡，防止侧摔&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;做法&lt;/strong&gt; ：双脚并拢 → 侧迈小步、微屈膝 → 感受臀部发力 → 回到起点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提示&lt;/strong&gt; ：熟练后可尝试大步，或轻触对侧脚踝增加难度&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="训练建议循序渐进重在坚持"&gt;训练建议：循序渐进，重在坚持
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;周次&lt;/th&gt;
&lt;th&gt;每次训练时间&lt;/th&gt;
&lt;th&gt;每个动作组数&lt;/th&gt;
&lt;th&gt;每周频率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;第1周&lt;/td&gt;
&lt;td&gt;10分钟&lt;/td&gt;
&lt;td&gt;每动作1组&lt;/td&gt;
&lt;td&gt;每周3次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第2-3周&lt;/td&gt;
&lt;td&gt;15分钟&lt;/td&gt;
&lt;td&gt;每动作2组&lt;/td&gt;
&lt;td&gt;每周4次&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第4周后&lt;/td&gt;
&lt;td&gt;20分钟&lt;/td&gt;
&lt;td&gt;每动作3组&lt;/td&gt;
&lt;td&gt;每周4～5次&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;小贴士&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;• 若父母膝盖或腰不适，可缩小动作幅度；&lt;/li&gt;
&lt;li&gt;• 若感觉吃力，可分早晚两次完成；&lt;/li&gt;
&lt;li&gt;• 每次结束后，轻揉双腿或走动 3 分钟，帮助放松。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="陪他们练腿比补品更长久"&gt;陪他们练腿，比补品更长久
&lt;/h2&gt;&lt;p&gt;你希望父母在日常生活里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;能轻松上楼梯，&lt;/li&gt;
&lt;li&gt;能独立外出买菜，&lt;/li&gt;
&lt;li&gt;能自己开门迎接你。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些，比一次旅行、一次贵重礼物，都更能延长他们的自立年华。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“一个人能走多远，不看心脏，而看腿。” ——老年医学专家&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="让爱落在行动力上"&gt;让爱落在“行动力”上
&lt;/h2&gt;&lt;p&gt;国庆，你也许会带父母旅行、拍合照、吃团圆饭。
但最温暖的一刻，也许是：
你轻声说——&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“爸妈，来，我们一起练一下腿。”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那一刻，
不仅是动作的传递，
更是爱的延续。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;让他们站得稳，就是最好的团圆。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>【人工智能+】系列（二）：从概念到落地，30分钟搭建你的“战略型第二大脑”</title><link>https://blog.fallleaf.net/p/tech-second-brain-with-n8n/</link><pubDate>Thu, 04 Sep 2025 10:45:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-second-brain-with-n8n/</guid><description>&lt;img src="https://blog.fallleaf.net/p/tech-second-brain-with-n8n/cover.webp" alt="Featured image of post 【人工智能+】系列（二）：从概念到落地，30分钟搭建你的“战略型第二大脑”" /&gt;&lt;p&gt;这篇文章，主要是介绍如何在 n8n 上建立一个&amp;quot; 第二大脑&amp;quot; 的工作流，内容比较枯燥，如果想立即尝试，见文章最后的📎&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;这篇文章，主要是介绍如何在 n8n 上建立一个&amp;quot; 第二大脑&amp;quot; 的工作流，内容比较枯燥，如果想立即尝试，见文章最后的📎 配套资源 ，获取一键导入的 n8n 配置文件。在导入之前，确保 n8n、ollama 和 Qwen 都正常运行，相关安装方法，见网上教程。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="引言我们为什么需要第二大脑"&gt;引言：我们为什么需要“第二大脑”？
&lt;/h2&gt;&lt;p&gt;在通信行业，每一份战略规划都承载着对未来的判断。它不仅要基于历史经验、试点反馈，更要精准对齐高层意图，并洞察竞争格局。&lt;/p&gt;
&lt;p&gt;然而，信息散落在 OA、本地磁盘、会议纪要中，专家常常陷入“找资料比写方案还累”的困境。&lt;/p&gt;
&lt;p&gt;而我们在上篇提出的解决方案是：打造一个能“ &lt;strong&gt;感知任务、融合知识、生成框架&lt;/strong&gt; ”的“战略型第二大脑”。&lt;/p&gt;
&lt;p&gt;现在，是时候兑现承诺了。&lt;/p&gt;
&lt;p&gt;本文将带您 &lt;strong&gt;从零开始，用开源工具本地搭建一个可用的“第二大脑”&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;一个基于 n8n + Ollama + Qwen 的智能系统，流程如下图：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;战略生成流程知识库模块读取目录文件切分文本Ollama 向量化存入 Simple Vector Store任务输入感知模块融合模块查询 Vector Store Tool生成模块输出初稿专家介入
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;知识库模块&lt;/strong&gt; ：构建企业“战略记忆中枢”，将散落的文档转化为可检索、可追溯、可进化的智能资产。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;感知模块&lt;/strong&gt; ：听懂任务背后的“弦外之音”，解析出关键词与战略意图。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;融合模块&lt;/strong&gt; ：激活企业“沉睡的知识资产”，实现跨文档、跨时间的语义关联。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;生成模块&lt;/strong&gt; ：基于上下文，自动生成逻辑清晰、结构完整的方案初稿。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;专家介入&lt;/strong&gt; ：最终决策与洞见注入，人机协同产出真正有价值的方案。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套系统能否成功，80% 取决于知识库的质量，20% 取决于技术实现的合理性。接下来，我们就来一步步构建它。&lt;/p&gt;
&lt;h2 id="步骤-1打造可进化的战略知识库"&gt;步骤 1：打造可进化的“战略知识库”
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;🎯 目标：将分散的 &lt;code&gt;.txt&lt;/code&gt; 文件自动转化为结构化、可语义检索的知识资产。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="1-节点-1读取指定目录下的所有文本文件readwrite-file"&gt;1. 节点 1：读取指定目录下的所有文本文件（Read/Write File）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;资料输入&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;节点类型&lt;/strong&gt; ： &lt;code&gt;n8n-nodes-base.readWriteFile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;配置&lt;/strong&gt; ：
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;fileSelector&amp;#34;: &amp;#34;d:\\\\second_brain_demo\\\\*&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;options&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;fileExtension&amp;#34;: &amp;#34;.txt&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;功能&lt;/strong&gt; ：扫描 &lt;code&gt;d:\second_brain_demo\&lt;/code&gt; 目录下所有 &lt;code&gt;.txt&lt;/code&gt; 文件，支持通配符。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;输出&lt;/strong&gt; ：以二进制形式返回每个文件内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 可扩展支持 &lt;code&gt;.pdf&lt;/code&gt; 、&lt;code&gt;.docx&lt;/code&gt; ，但需确保 Ollama 支持解析。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="2-节点-2文本切分recursive-character-text-splitter"&gt;2. 节点 2：文本切分（Recursive Character Text Splitter）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;Recursive Character Text Splitter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;配置&lt;/strong&gt; ：
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;chunkSize&amp;#34;: 100,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;chunkOverlap&amp;#34;: 20
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;作用&lt;/strong&gt; ：将长文本按字符递归切分为小片段，避免超出模型上下文。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;切分逻辑&lt;/strong&gt; ：优先按 &lt;code&gt;\n\n&lt;/code&gt; 、 &lt;code&gt;\n&lt;/code&gt; 、 、&lt;code&gt;.&lt;/code&gt; 分割。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ 注意：当前版本中，切分由该节点控制，而非 &lt;code&gt;Simple Vector Store&lt;/code&gt; 内置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="3-节点-3调用-ollama-进行向量化embeddings-ollama"&gt;3. 节点 3：调用 Ollama 进行向量化（Embeddings Ollama）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;Embeddings Ollama&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;配置&lt;/strong&gt; ：
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;model&amp;#34;: &amp;#34;dengcao/bge-large-zh-v1.5:latest&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;功能&lt;/strong&gt; ：调用本地 Ollama 服务，使用中文优化的 &lt;code&gt;bge-large-zh&lt;/code&gt; 模型生成向量。&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;优势&lt;/strong&gt; ：专为中文语义设计，在“领导讲话”“试点报告”等场景表现优异。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ 需提前运行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama pull dengcao/bge-large-zh-v1.5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="4-节点-4存入向量数据库simple-vector-store"&gt;4. 节点 4：存入向量数据库（Simple Vector Store）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;Simple Vector Store&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;配置&lt;/strong&gt; ：&lt;/li&gt;
&lt;li&gt;• Mode: &lt;code&gt;insert&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;• Memory Key: &lt;code&gt;vector_store_key&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;连接&lt;/strong&gt; ：&lt;/li&gt;
&lt;li&gt;• 输入文档 → &lt;code&gt;Default Data Loader&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;• 切分器 → &lt;code&gt;Recursive Character Text Splitter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• 嵌入模型 → &lt;code&gt;Embeddings Ollama&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ 数据将持久化在内存中，供后续查询使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="-知识库构建流程总结"&gt;✅ 知识库构建流程总结
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;节点&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;资料输入&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;扫描目录，读取 &lt;code&gt;.txt&lt;/code&gt; 文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Recursive Character Text Splitter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;按设定规则切分文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Embeddings Ollama&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;使用 &lt;code&gt;bge-large-zh&lt;/code&gt; 生成中文向量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Simple Vector Store&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;存储为可检索的知识片段&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;🔄 此流程可绑定 &lt;code&gt;Cron Trigger&lt;/code&gt; ，实现 &lt;strong&gt;每日自动更新知识库&lt;/strong&gt; 。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="步骤-2构建懂战略的-ai-生成引擎"&gt;步骤 2：构建“懂战略”的 AI 生成引擎
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;🎯 目标：用户输入任务，AI 自动调用知识库，生成专业方案初稿。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="1-节点-1任务输入chat-trigger"&gt;1. 节点 1：任务输入（Chat Trigger）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;任务输入&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;类型&lt;/strong&gt; ： &lt;code&gt;@n8n/n8n-nodes-langchain.chatTrigger&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;作用&lt;/strong&gt; ：接收用户输入的任务指令，如：
“请基于历史方案和试点反馈，制定县乡传输网低成本演进路径”&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="2-节点-2感知模块ai-agent--知识检索"&gt;2. 节点 2：感知模块（AI Agent + 知识检索）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;感知模块&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;类型&lt;/strong&gt; ： &lt;code&gt;@n8n/n8n-nodes-langchain.agent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;核心配置&lt;/strong&gt; ：&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-使用的模型"&gt;📌 使用的模型
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;语言模型&lt;/strong&gt; ： &lt;code&gt;Qwen Turbo&lt;/code&gt; （通过 API 调用）&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;嵌入模型&lt;/strong&gt; ： &lt;code&gt;Ollama&lt;/code&gt; （用于检索）&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;记忆机制&lt;/strong&gt; ： &lt;code&gt;Window Buffer Memory&lt;/code&gt; （保留上下文）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="-系统提示词system-message"&gt;📌 系统提示词（System Message）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;你是一名通信网络战略规划专家以及专业的任务分析助手。你的职责是分析用户的要求：&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chatInput&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="err"&gt;，根据查询知识库&lt;/span&gt; &lt;span class="n"&gt;company_documents_tool&lt;/span&gt; &lt;span class="err"&gt;中的相关内容&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;输出框架大纲。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;请严格遵守以下规则：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;1.&lt;/span&gt; &lt;span class="err"&gt;内容从知识库&lt;/span&gt; &lt;span class="n"&gt;company_documents_tool&lt;/span&gt; &lt;span class="err"&gt;获取&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="err"&gt;输出内容只包含“需要做什么”，不得加入额外解释&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;3.&lt;/span&gt; &lt;span class="err"&gt;输出格式为&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="err"&gt;，必须包含：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;task&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;一句话说明要完成的具体任务&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;requirements&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;要求1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;要求2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="-工具绑定"&gt;📌 工具绑定
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;Vector Store Tool&lt;/strong&gt; ： &lt;code&gt;company_documents_tool&lt;/code&gt; ，用于检索知识库&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ 该模块将：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;• 解析用户意图&lt;/li&gt;
&lt;li&gt;• 自动调用知识库检索相关资料&lt;/li&gt;
&lt;li&gt;• 输出结构化任务框架&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="3-节点-3生成模块ai-agent--文档生成"&gt;3. 节点 3：生成模块（AI Agent + 文档生成）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;节点名称&lt;/strong&gt; ： &lt;code&gt;生成模块&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;类型&lt;/strong&gt; ： &lt;code&gt;@n8n/n8n-nodes-langchain.agent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;系统提示词&lt;/strong&gt; ：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;你是一名通信网络战略规划专家。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;你是一个专业的文档编写助手。你的任务是根据任务要求，仅使用知识库&lt;/span&gt; &lt;span class="n"&gt;company_documents_tool&lt;/span&gt; &lt;span class="err"&gt;提供的内容，生成最终文档。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;请严格遵守以下规则：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;1.&lt;/span&gt; &lt;span class="err"&gt;所有内容必须来自知识库，不得引入外部信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="err"&gt;可以在知识库范围内进行归纳、整合，但不得编造&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;3.&lt;/span&gt; &lt;span class="err"&gt;如果某项信息未找到，请写“相关信息未在知识库中找到”&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;4.&lt;/span&gt; &lt;span class="err"&gt;文风：简洁、正式、专业&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;✅ 输入来自“感知模块”的结构化任务框架，输出完整方案初稿。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="-战略生成流程总结"&gt;✅ 战略生成流程总结
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;节点&lt;/th&gt;
&lt;th&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;任务输入&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;接收用户指令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;感知模块&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;解析意图，调用知识库，输出任务框架&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;生成模块&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;基于框架与知识，生成专业文档&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;🔁 整个流程无需人工干预，AI 自主完成“理解 → 检索 → 生成”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="三关键连接模块如何协同工作"&gt;三、关键连接：模块如何协同工作？
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;连接&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;资料输入&lt;/code&gt; → &lt;code&gt;Simple Vector Store&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;触发知识入库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Embeddings Ollama&lt;/code&gt; → &lt;code&gt;Simple Vector Store&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提供中文向量能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Vector Store Tool&lt;/code&gt; ←→ &lt;code&gt;感知模块&lt;/code&gt; &amp;amp; &lt;code&gt;生成模块&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;提供语义检索能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Qwen&lt;/code&gt; ←→ 所有 AI Agent 节点&lt;/td&gt;
&lt;td&gt;提供大模型推理能力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Window Buffer Memory&lt;/code&gt; ←→ 两个 Agent&lt;/td&gt;
&lt;td&gt;支持多轮对话上下文&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;✅ 所有 AI 能力通过标准接口连接，模块化、可替换、可扩展。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="-知识库演示内容"&gt;📁 知识库演示内容
&lt;/h2&gt;&lt;p&gt;为确保 AI 能生成高质量方案，建议知识库包含以下五个测试文件, 均由 LLM 生成：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文件名&lt;/th&gt;
&lt;th&gt;内容重点&lt;/th&gt;
&lt;th&gt;示例片段&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;白皮书摘要.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;战略目标、技术路径&lt;/td&gt;
&lt;td&gt;“2027 年实现县乡 100% 光缆覆盖”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;试点报告.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;成功/ 失败经验&lt;/td&gt;
&lt;td&gt;“FgOTN 设备成本高达 45 万元”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;领导讲话.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;战略偏好&lt;/td&gt;
&lt;td&gt;“要注重投资效益，避免重复建设”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;友商应用情况.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;竞争情报&lt;/td&gt;
&lt;td&gt;“B 运营商采用 DCI-BOX，部署效率提升”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;设备对比资料.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;技术依据&lt;/td&gt;
&lt;td&gt;“DCI-BOX 成本比 OTN 低 30%-50%”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="-重要说明与边界"&gt;⚠️ 重要说明与边界
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama 必须运行&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ollama serve&lt;/code&gt; 需常驻后台&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;嵌入模型必须加载&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ollama pull dengcao/bge-large-zh-v1.5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen Turbo 需 API 密钥&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过阿里云百炼平台获取&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;向量库存储在内存中&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;如需持久化，建议升级为 ChromaDB 或 FAISS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;必须人工审核&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ AI 输出仅作参考，不可直接用于决策&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="实战演示以县乡传输网演进为例"&gt;实战演示：以“县乡传输网演进”为例
&lt;/h2&gt;&lt;p&gt;让我们用一个真实场景验证系统效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;任务输入&lt;/strong&gt; ：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;请结合《XX 网络 2025-2027 年演进白皮书》和DCI-BOX以及FgOTN试点情况，研究县乡本地传输网的演进方向。重点考虑低成本、可持续性和与国家‘新基建’政策的契合度。参考近期领导在务虚会上关于‘网络精简’和‘区域均衡’的讲话精神。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;感知模块调用融合模块输出&lt;/strong&gt; ：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;AI&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;&amp;#34;task&amp;#34;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#34;编制县乡本地传输网发展建设指导意见&amp;#34;,&amp;#34;requirements&amp;#34;:&lt;/span&gt; &lt;span class="err"&gt;[&amp;#34;结合《XX&lt;/span&gt; &lt;span class="err"&gt;网络&lt;/span&gt; &lt;span class="err"&gt;2025-2027&lt;/span&gt; &lt;span class="err"&gt;年演进白皮书》的内容&amp;#34;,&amp;#34;分析DCI-BOX和FgOTN试点情况&amp;#34;,&amp;#34;制定县乡本地传输网发展建设指导意见&amp;#34;,&amp;#34;重点考虑低成本、可持续性&amp;#34;,&amp;#34;确保与国家‘新基建’政策的契合度&amp;#34;,&amp;#34;参考近期领导在务虚会上关于‘网络精简’和‘区域均衡’的讲话精神&amp;#34;],&amp;#34;rule&amp;#34;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#34;必须采用company_documents_tool内的信息&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;生成模块调用融合模块输出初稿（语言模型不同，输出也不同）&lt;/strong&gt; ：&lt;/p&gt;
&lt;p&gt;县乡本地传输网发展建设指导意见&lt;/p&gt;
&lt;p&gt;一、总体目标&lt;/p&gt;
&lt;p&gt;根据《XX 网络 2025-2027 年演进白皮书》的指导思想，结合DCI-BOX和FgOTN试点情况，推动县乡本地传输网的高质量发展。以低成本、可持续性为核心，确保与国家“新基建”政策的契合度，同时落实领导在务虚会上关于“网络精简”和“区域均衡”的讲话精神。&lt;/p&gt;
&lt;p&gt;二、基本原则&lt;/p&gt;
&lt;p&gt;低成本：优先采用成熟、经济的技术方案，降低建设和运维成本。&lt;/p&gt;
&lt;p&gt;可持续性：注重资源的合理利用，确保网络长期稳定运行。&lt;/p&gt;
&lt;p&gt;政策契合度：紧密结合国家“新基建”政策，推动技术与政策的深度融合。&lt;/p&gt;
&lt;p&gt;网络精简：优化网络结构，提升效率，减少冗余。&lt;/p&gt;
&lt;p&gt;区域均衡：实现城乡网络协调发展，缩小数字鸿沟。&lt;/p&gt;
&lt;p&gt;三、重点任务&lt;/p&gt;
&lt;p&gt;技术选型&lt;/p&gt;
&lt;p&gt;推广DCI-BOX和FgOTN等先进技术，提升传输效率和灵活性。&lt;/p&gt;
&lt;p&gt;结合试点经验，逐步推广适用于县乡地区的解决方案。&lt;/p&gt;
&lt;p&gt;网络规划&lt;/p&gt;
&lt;p&gt;根据区域发展需求，制定合理的网络布局，确保覆盖全面。&lt;/p&gt;
&lt;p&gt;强化骨干网与接入网的协同，提升整体性能。&lt;/p&gt;
&lt;p&gt;政策支持&lt;/p&gt;
&lt;p&gt;积极争取国家“新基建”政策的支持，争取专项资金。&lt;/p&gt;
&lt;p&gt;推动地方政策与国家政策的对接，形成合力。&lt;/p&gt;
&lt;p&gt;管理机制&lt;/p&gt;
&lt;p&gt;建立健全网络维护和管理机制，确保网络运行的稳定性。&lt;/p&gt;
&lt;p&gt;加强人才培训，提升运维水平。&lt;/p&gt;
&lt;p&gt;四、实施步骤&lt;/p&gt;
&lt;p&gt;调研分析：深入调研县乡地区网络现状及需求，形成详细报告。&lt;/p&gt;
&lt;p&gt;方案设计：基于调研结果，制定具体实施方案。&lt;/p&gt;
&lt;p&gt;试点推进：选择典型区域进行试点，积累经验。&lt;/p&gt;
&lt;p&gt;全面推广：总结试点经验，逐步推广至全县乡范围。&lt;/p&gt;
&lt;p&gt;五、保障措施&lt;/p&gt;
&lt;p&gt;组织保障：成立专项工作组，明确责任分工。&lt;/p&gt;
&lt;p&gt;资金保障：多渠道筹措资金，确保项目顺利实施。&lt;/p&gt;
&lt;p&gt;监督评估：建立监督评估机制，定期检查项目进展。&lt;/p&gt;
&lt;p&gt;六、结语&lt;/p&gt;
&lt;p&gt;县乡本地传输网的发展是推动乡村振兴和数字化转型的重要基础。通过科学规划、技术创新和政策支持，努力构建一个高效、经济、可持续的县乡传输网络，为实现“网络强国”目标贡献力量。&lt;/p&gt;
&lt;p&gt;相关信息未在知识库中找到&lt;/p&gt;
&lt;h2 id="结语从建力到用智通信人的-ai-新使命"&gt;结语：从“建力”到“用智”，通信人的 AI 新使命
&lt;/h2&gt;&lt;p&gt;在上一篇文章的结尾，我们提到：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“在下一篇中，我将分享如何利用开源工具，在本地环境中一步步搭建起这套能解码战略的智能系统。”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;今天，我们兑现了这个承诺。&lt;/p&gt;
&lt;p&gt;这套系统原型，还不能真正的实用,仅仅是一个最小的简单RAG系统 ， 但让我们认识到：人工智能，不再遥远，而是每一位战略规划专家都 &lt;strong&gt;用得上、用得起、用得安心&lt;/strong&gt; 的生产力工具。&lt;/p&gt;
&lt;p&gt;它让我们：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;• 从 “信息搬运工” 转变为 “战略架构师” ；&lt;/li&gt;
&lt;li&gt;• 从 “被动响应” 升级为 “主动洞察” ；&lt;/li&gt;
&lt;li&gt;• 从 “经验驱动” 迈向 “数据+ 智能驱动” 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更重要的是，它提醒我们：
作为通信人，我们不仅是 &lt;strong&gt;算力的建设者&lt;/strong&gt; ，更应成为 &lt;strong&gt;智能的应用者&lt;/strong&gt; 。
国家推动“人工智能+”，不仅是让我们建更多的数据中心，更是鼓励我们 &lt;strong&gt;率先在自身业务中实践 AI 的价值&lt;/strong&gt; 。&lt;/p&gt;
&lt;h2 id="-配套资源"&gt;📎 配套资源
&lt;/h2&gt;&lt;p&gt;关注公众号，回复“ &lt;strong&gt;第二大脑&lt;/strong&gt; ”（不是文章留言!），获取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;• &lt;strong&gt;本文对应的工作流 JSON 文件（可直接导入）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;5 份示例资料（.txt）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;示例资料默认存储在&amp;quot;D:\second_brain_demo&amp;quot; 目录下&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;• &lt;strong&gt;由于笔记本算力不足, 语言模型用阿里的免费 Qwen 模型，可以去申请免费 API_KEY&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>ZEROTIER内网穿透实践</title><link>https://blog.fallleaf.net/p/tech-zerotier-nat-traversal-practice/</link><pubDate>Wed, 30 Dec 2020 20:59:15 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-zerotier-nat-traversal-practice/</guid><description>&lt;p&gt;内网和外网计算机组成一个局域网，相互能访问，并能访问内网资源。&lt;/p&gt;
&lt;h3 id="应用环境"&gt;应用环境
&lt;/h3&gt;&lt;p&gt;公司内网：一台运行linux的NAS,一台win10笔记本电脑&lt;/p&gt;
&lt;p&gt;外网：linux的VPS&lt;/p&gt;
&lt;p&gt;家：Win10一台电脑&lt;/p&gt;
&lt;p&gt;个人：Android手机&lt;/p&gt;
&lt;h3 id="需求"&gt;需求
&lt;/h3&gt;&lt;p&gt;在外网，笔记本电脑、家中的电脑和手机均能访问内网NAS上的云存储，在外网能通过NAS访问内网资源。&lt;/p&gt;
&lt;h3 id="方案"&gt;方案
&lt;/h3&gt;&lt;p&gt;在各个终端上安装zerotier，设置VPS为moon，在NAS开启转发。&lt;/p&gt;
&lt;p&gt;zerotier的设置可上网查询，记录一下NAS设置转发的命令（网卡名称据实更改）:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;设置/etc/sysctl.conf中的net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o enp123s0f0(物理网卡) -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i zt7u3fcxwr(zerotier虚拟网卡) -o enp123s0f0(物理网卡) -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果访问内网资源需要用内部域名，需对访问设备的虚拟卡配置dns地址&lt;/p&gt;</description></item><item><title>V2ray的WebSocket+TLS+Web安装记录</title><link>https://blog.fallleaf.net/p/tech-v2ray-websocket-tls-web-installation/</link><pubDate>Sat, 28 Sep 2019 15:41:27 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-v2ray-websocket-tls-web-installation/</guid><description>&lt;p&gt;一些vpn或代理的特征比较明显容易被识别，虽然是加密的，看不到内容，但知道是vpn，容易被block，采用websoket+tls+web，虽然也是加密的，但和正常web访问类似，不易被block。&lt;/p&gt;
&lt;p&gt;整个过程比较简单，前提是要有一个墙外的VPS。&lt;/p&gt;
&lt;h2 id="1-vps安装v2ray服务端"&gt;1. vps安装v2ray（服务端）
&lt;/h2&gt;&lt;p&gt;root权限下执行：&lt;/p&gt;
&lt;p&gt;bash &amp;lt;(curl -L -s &lt;a class="link" href="https://install.direct/go.sh" target="_blank" rel="noopener"
&gt;https://install.direct/go.sh&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id="2-修改服务器端配置"&gt;2. 修改服务器端配置
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;inbounds&amp;#34;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;port&amp;#34;: xxxxx, //端口
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;Listen&amp;#34;: &amp;#34;127.0.0.1&amp;#34;, //本机环回地址，防止外部访问
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;protocol&amp;#34;: &amp;#34;vmess&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;settings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;clients&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;id&amp;#34;: &amp;#34;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;#34;, //uuid，客户端一致
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;level&amp;#34;: 1,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;alterId&amp;#34;: 64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;streamSettings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;network&amp;#34;: &amp;#34;ws&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;wsSettings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;path&amp;#34;: &amp;#34;/ray&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;outbounds&amp;#34;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;protocol&amp;#34;: &amp;#34;freedom&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;settings&amp;#34;: {}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;protocol&amp;#34;: &amp;#34;blackhole&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;settings&amp;#34;: {},
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;tag&amp;#34;: &amp;#34;blocked&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;routing&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;rules&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;type&amp;#34;: &amp;#34;field&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;ip&amp;#34;: [&amp;#34;geoip:private&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;outboundTag&amp;#34;: &amp;#34;blocked&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="3-安装caddy"&gt;3. 安装caddy
&lt;/h2&gt;&lt;p&gt;wget -N &amp;ndash;no-check-certificate &lt;a class="link" href="https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh" target="_blank" rel="noopener"
&gt;https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh&lt;/a&gt; &amp;amp;&amp;amp; chmod +x caddy_install.sh &amp;amp;&amp;amp; bash caddy_install.sh install&lt;/p&gt;
&lt;h2 id="4-修改caddy配置"&gt;4. 修改caddy配置
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;域名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tls&lt;/span&gt; &lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;修改为邮箱&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;caddy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ray&lt;/span&gt; &lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;xxxx&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="err"&gt;和&lt;/span&gt;&lt;span class="n"&gt;v2ray的端口好对应&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;websocket&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;header_upstream&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Origin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="5-重启动服务端"&gt;5. 重启动服务端
&lt;/h2&gt;&lt;p&gt;service caddy restart
service v2ray restart&lt;/p&gt;
&lt;h2 id="6-客户端安装v2ray"&gt;6. 客户端安装v2ray
&lt;/h2&gt;&lt;p&gt;见网络教程&lt;/p&gt;
&lt;h2 id="7-修改v2ray客户端配置"&gt;7. 修改v2ray客户端配置
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;inbounds&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;port&amp;#34;: 1080,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;listen&amp;#34;: &amp;#34;127.0.0.1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;protocol&amp;#34;: &amp;#34;socks&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sniffing&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;enabled&amp;#34;: true,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;destOverride&amp;#34;: [&amp;#34;http&amp;#34;, &amp;#34;tls&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;settings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;auth&amp;#34;: &amp;#34;noauth&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;udp&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;outbounds&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;protocol&amp;#34;: &amp;#34;vmess&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;settings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;vnext&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;address&amp;#34;: &amp;#34;xxx.xxx.xxx&amp;#34;, //v2ray服务器域名
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;port&amp;#34;: 443,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;users&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;id&amp;#34;: &amp;#34;xxxxxxxxx-xxxx-xxxx-xxxxxxxx&amp;#34;,//和服务器uuid一致
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;alterId&amp;#34;: 64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;streamSettings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;network&amp;#34;: &amp;#34;ws&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;security&amp;#34;: &amp;#34;tls&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;wsSettings&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;path&amp;#34;: &amp;#34;/ray&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="8-上网"&gt;8. 上网
&lt;/h2&gt;&lt;p&gt;启动客户端v2ray，上网设置为socks，地址127.0.0.1，端口1080&lt;/p&gt;</description></item><item><title>Wireguard的分流方法</title><link>https://blog.fallleaf.net/p/tech-wireguard-split-tunneling/</link><pubDate>Sat, 07 Sep 2019 15:45:22 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-wireguard-split-tunneling/</guid><description>&lt;p&gt;Wireguard开启后，由于默认采用的全局路由，所有流量都通过Wireguard隧道，造成不必要的流量浪费，有必要进行流量分流。&lt;/p&gt;
&lt;p&gt;分流的一种方法主要利用路由方式，让特定的IP包转发到Wireguard隧道中，可参见这篇：WireGuard —— Windows 客户端国内外IP分流教程。这种方式是将国内地址段以路由方式不走隧道，但需要不时维护国内地址段，同时一些常规状态下能访问的国外IP地址也走了隧道。&lt;/p&gt;
&lt;p&gt;用Wireguard，主要就是要科学上网，不能直接访问的毕竟是少数，因此就有了另外一种方式，见这一篇：wireguard+ss/v2ray/brook等实现域名分流。方法是先利用Wireguard建立隧道，再开启Brook等服务，然后利用Wireguard的AllowIPs功能，限定Brook通过隧道建立连接，利用SwitchOmega等代理插件的PAC列表，实现域名分流。&lt;/p&gt;
&lt;p&gt;在Win10和Linuxmint设置了一下，效果不错。手机上因为Wireguard可以设置某些App通过Wireguard，也就不用考虑了。&lt;/p&gt;</description></item><item><title>斜线图（Slopegraph）：一种用于比较变化结构的可视化方法</title><link>https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/</link><pubDate>Sun, 21 Jul 2019 00:00:00 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/</guid><description>&lt;h2 id="什么是斜线图"&gt;什么是斜线图
&lt;/h2&gt;&lt;p&gt;斜线图（Slopegraph）是一种用于展示同一组观测对象在两个固定状态之间变化关系的数据可视化形式。
这两个状态可以是不同时间（如今年与去年、事件前后），也可以是不同维度（如总体与子群体），其度量可以是排名、比例或数值。&lt;/p&gt;
&lt;p&gt;从表现形式上看，斜线图属于折线图的一个特例，但其设计目标并不是描绘连续变化过程，而是强调两个状态之间的相对变化结构。因此，无论是 Excel、Tableau 还是 R，只要支持折线图的工具都可以绘制斜线图。&lt;/p&gt;
&lt;p&gt;Edward Tufte 在 1983 年出版的《The Visual Display of Quantitative Information》中首次系统性讨论了这种表达方式，并在 2011 年 6 月 1 日的论坛中正式将其命名为 slopegraph。早期应用并不广泛，但随着数据新闻和分析型可视化的发展，斜线图近年来逐渐成为常用工具。&lt;/p&gt;
&lt;p&gt;下面是几个典型的斜线图示例。
&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_boycott.webp"
width="1080"
height="965"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_boycott_hu_a3e4ab5f789f691d.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_boycott_hu_59b7c3e89008846a.webp 1024w"
loading="lazy"
alt="FT图例"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="268px"
&gt;&lt;/p&gt;
&lt;p&gt;这是《Financial Times》绘制的一个斜线图，用于展示中国消费者对美国品牌商品抵制态度的变化情况。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_time.webp"
width="404"
height="634"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_time_hu_20e05bf5a266a1df.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_time_hu_264cc8b81c03f11f.webp 1024w"
loading="lazy"
alt="网易图例"
class="gallery-image"
data-flex-grow="63"
data-flex-basis="152px"
&gt;&lt;/p&gt;
&lt;p&gt;这张图来自网易，X 轴为 1990 年和 2017 年两个时间点，Y 轴为慢性病伤残调整寿命年（DALY）的排名。通过斜线的交叉和排序变化，可以直观看出哪些慢性病在这 27 年间上升为主要死因，以及不同病种之间地位的变化。这种跨时间跨度较大的对比，正是斜线图&lt;strong&gt;最典型&lt;/strong&gt;的应用场景。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_group.webp"
width="376"
height="443"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_group_hu_dd48f3d75baea9b2.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph_group_hu_64d89214951880a0.webp 1024w"
loading="lazy"
alt="Employee Feedback"
class="gallery-image"
data-flex-grow="84"
data-flex-basis="203px"
&gt;&lt;/p&gt;
&lt;p&gt;该图引自 storytellingwithdata 网站的文章 More on slopegraphs。X 轴表示两个分组（Company 与 Team X），Y 轴表示调查指标得分。斜线图在这里用于展示同一指标在&lt;strong&gt;总体与子群体&lt;/strong&gt;中的相对位置与变化情况。&lt;/p&gt;
&lt;h2 id="什么时候用斜线图"&gt;什么时候用斜线图
&lt;/h2&gt;&lt;p&gt;Edward Tufte 在 6 月 1 日的帖子中对斜线图的用途做了高度概括：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Slopegraphs compare changes over time for a list of nouns located on an ordinal or interval scale.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;即：斜线图用于比较&lt;strong&gt;一组可排序或可度量对象在不同状态之间的变化&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;因此，在原本会使用柱状图或折线图进行“两点对比”的场景中，斜线图往往是更高效的表达方式。例如，以下是用柱状图表示四家公司 2018 年和 2019 年收入的情况。
柱状图表示：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar1-1.webp"
width="960"
height="960"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar1-1_hu_4220d2c8b959ef73.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar1-1_hu_d7f2463eaa4adb43.webp 1024w"
loading="lazy"
alt="柱状图示例"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;&lt;/p&gt;
&lt;p&gt;或者：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar2-1.webp"
width="960"
height="960"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar2-1_hu_39414b2dd2fbf857.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/bar2-1_hu_8fb406bedf84b6d0.webp 1024w"
loading="lazy"
alt="另一种柱状图示例"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;&lt;/p&gt;
&lt;p&gt;用斜线图表示，如下&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph-1.webp"
width="1344"
height="960"
srcset="https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph-1_hu_2412b24114d9707.webp 480w, https://blog.fallleaf.net/p/tech-slopegraph-comparing-change-structure/slopegraph-1_hu_fb2506ae2fd5ba04.webp 1024w"
loading="lazy"
alt="斜线图示例"
class="gallery-image"
data-flex-grow="140"
data-flex-basis="336px"
&gt;&lt;/p&gt;
&lt;p&gt;对比这三种表达方式可以发现：
柱状图只能呈现绝对数值，而斜线图能够在同一视图中同时表达收入水平、排名以及变化幅度。读者不需要额外计算或比较，就可以理解企业之间的相对变化。&lt;/p&gt;
&lt;p&gt;柱状图与斜线图在设计上的一个关键差异在于：柱状图的 Y 轴必须从 0 开始，否则会夸大差异；而斜线图的 Y 轴并不要求从 0 开始，因此更适合用来比较排名变化或相对变化结构，而不是绝对规模。&lt;/p&gt;
&lt;h2 id="怎么用r语言作斜线图"&gt;怎么用R语言作斜线图
&lt;/h2&gt;&lt;p&gt;由于斜线图就是折线图的一种变形，所以，只要能够制作折线图的软件都能制作斜线图，这里介绍一下在R语言环境下制作斜线图的方法。&lt;/p&gt;
&lt;p&gt;GitHub有一个R语言库项目：CGPfunctions，提供了制作斜线图的函数newggslopegraph()。上面的斜线图就是用这个函数做出来的。&lt;/p&gt;
&lt;p&gt;库文件的安装详见网页说明，最新版本是0.5.8，包含了新增加的一些函数参数，这里只把这个函数的参数用中文解释一下。&lt;/p&gt;
&lt;p&gt;用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;newggslopegraph(
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dataframe, Times, Measurement, Grouping,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Title = &amp;#34;No title given&amp;#34;, SubTitle = &amp;#34;No subtitle given&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Caption = &amp;#34;No caption given&amp;#34;, XTextSize = 12, YTextSize = 3,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TitleTextSize = 14, SubTitleTextSize = 10, CaptionTextSize = 8,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TitleJustify = &amp;#34;left&amp;#34;, SubTitleJustify = &amp;#34;left&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CaptionJustify = &amp;#34;right&amp;#34;, LineThickness = 1, LineColor = &amp;#34;ByGroup&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataTextSize = 2.5, DataTextColor = &amp;#34;black&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataLabelPadding = 0.05, DataLabelLineSize = 0,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataLabelFillColor = &amp;#34;white&amp;#34;, WiderLabels = FALSE,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ReverseYAxis = FALSE, ReverseXAxis = FALSE, RemoveMissing = TRUE,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ThemeChoice = &amp;#34;bw&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;dataframe：一个数据框类型的数据组，tidy data格式。会检查一些基本的错误，如检查是否存在列名称。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Times：数据框中的一列数据名，表示X轴上不同分组，比如时间或类别，可以是一个有序的class，因子或字符。注意，如果这列数据是日期类型，则需用as.character()转换成字符类型。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Measurement： 数据框中的一列数据名，表示Y轴上不同的数值。一般为百分比、名次等，也可为数值，可接受的类型为整数或数值。如果数值不那么离散或集中，斜线图的表达会更完美。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grouping：分组名，数据框中的一列数据，表示不同的分组&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如上面例子中用的数据框为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;data
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## company year income
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 1 CompanyA 2018年 232
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 2 CompanyA 2019年 261
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 3 CompanyB 2018年 111
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 4 CompanyB 2019年 425
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 5 CompanyC 2018年 266
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 6 CompanyC 2019年 217
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 7 CompanyD 2018年 431
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## 8 CompanyD 2019年 329
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这是一个带列名称的数据框data，第一列就是Grouping，表明每个斜线的类别，第二列是Times，表明X轴上的两个时间点，第三列是“Measurement”，表明每列别对应X轴在Y轴上的位置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Title：标题，可选，当Title = NULL时，没有标题，当Title = “”时，一个空标题，但在图形中占据位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SubTitle：副标题，可选，当SubTitle = NULL时，没有标题，当SubTitle = “”时，一个空标题，但在图形中占据位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Caption：说明文字，可选，当Caption = NULL时，没有标题，当Caption = “”时，一个空标题，但在图形中占据位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;XTextSize：X轴分组的文字大小，可选，缺省大小为12，和Y轴的分组文字大小有不同比例。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;YTextSize：Y轴分组的文字大小，可选，缺省大小为3，和X轴的分组文字大小有不同比例。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TitleTextSize：标题文字大小，可选，缺省大小为14。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SubTitleTextSize：副标题文字大小，可选，缺省大小为10。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CaptionTextSize：说明文字大小， 可选，缺省大小为8。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TitleJustify：标题位置，为“L”, “R” or “C” or use the hjust = notation from ggplot2 with a numeric value between ‘0’ (left) and ‘1’ (right)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SubTitleJustify：副标题位置，为“L”, “R” or “C” or use the hjust = notation from ggplot2 with a numeric value between ‘0’ (left) and ‘1’ (right)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CaptionJustify：说明文字位置，为“L”, “R” or “C” or use the hjust = notation from ggplot2 with a numeric value between ‘0’ (left) and ‘1’ (right)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LineThickness：斜线线宽，可选，缺省值为1。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LineColor：斜线颜色。可以用一个向量给每个分组设置颜色，向量的长度应和分组的分类数相等，如果不足，则循环设置，如c(“gray”, “red”, “green”, “gray”)或者时带分组名称的向量 c(“CompanyA” = “gray”, “CompanyB” = “red”, “CompanyC” = “green”, “CompanyD” = “gray”)，利用这一特性，可以绘制出不同颜色的斜线。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataTextSize：Y轴数值字符大小，可选，缺省值为2.5。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataTextColor：Y轴数值颜色，可选，缺省为黑色“black”，可以是“colors()”中颜色或16进制数“#FF00FF”。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataLabelPadding：Y轴数值和外框的间距，缺省值为0.05。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataLabelLineSize：Y轴数值外框的线宽，缺省值为0，即没有框。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataLabelFillColor：Y轴数值框内的颜色，缺省值为“white”，可以是“colors()”中颜色或16进制数“#FF00FF”。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WiderLabels：logical, set this value to TRUE if your “labels” or Grouping variable values tend to be long as they are in the newcancer dataset. This setting will give them more room in the same plot size.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ReverseYAxis：反转Y轴，逻辑值，如果想改变Y轴的排序方式，可设置为TRUE，可以把第一名调整在顶层。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ReverseXAxis：反转X轴，逻辑值，想改变factor levels时，可设置为TRUE。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RemoveMissing：逻辑值，如果设置为TRUE，如果缺少一些数值，则响应的分组也会移除不显示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ThemeChoice：主题选择，缺省主题为“bw”,其他的是“ipsum”, “econ”, “wsj”, “gdocs”, and “tufte”。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面展示一个完整的函数参数以及创建的图形，注意，X轴和Y轴均倒置了。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;newggslopegraph(
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; data, year, income, company,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Title = &amp;#34;This is Title&amp;#34;, SubTitle = &amp;#34;This is subTitle&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Caption = &amp;#34;This is Caption\nSecond line&amp;#34;, XTextSize = 14, YTextSize = 4,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TitleTextSize = 14, SubTitleTextSize = 12, CaptionTextSize = 10,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TitleJustify = &amp;#34;L&amp;#34;, SubTitleJustify = &amp;#34;R&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CaptionJustify = &amp;#34;C&amp;#34;, LineThickness = 2,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; LineColor = c(&amp;#34;CompanyD&amp;#34; = &amp;#34;seagreen&amp;#34;,&amp;#34;CompanyA&amp;#34; = &amp;#34;green&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;CompanyB&amp;#34; = &amp;#34;tomato&amp;#34;,&amp;#34;CompanyC&amp;#34; = &amp;#34;orange&amp;#34;),
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataTextSize = 4, DataTextColor = &amp;#34;red&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataLabelPadding = 0.2, DataLabelLineSize = 0.5,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DataLabelFillColor = &amp;#34;gray&amp;#34;, WiderLabels = FALSE,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ReverseYAxis = TRUE, ReverseXAxis = TRUE, RemoveMissing = TRUE,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ThemeChoice = &amp;#34;tufte&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.fallleaf.net/demo-1.png"
loading="lazy"
alt="斜线图"
&gt;&lt;/p&gt;
&lt;p&gt;一般而言，斜线图最适合用于比较两个时间点或两个分组的数据，也可以扩展到三至四个时间点，但不宜过多，否则应改用传统折线图。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/chinaunicom-1.png"
loading="lazy"
alt="中国联通"
&gt;&lt;/p&gt;
&lt;p&gt;中国联通2018年四季度，2019年一、二季度业务数据的斜线图。&lt;/p&gt;</description></item><item><title>色子肖像--Python程序</title><link>https://blog.fallleaf.net/p/tech-dice-portrait-python/</link><pubDate>Thu, 28 Dec 2017 15:49:14 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-dice-portrait-python/</guid><description>&lt;p&gt;上一篇色子肖像介绍了把图像变成色子点阵图的基本思路，用python语言采用PIL库写了一个程序，后来发现opencv更加简便合适，就采用numpy以及opencv库，进行了优化。
这是我第一次开始用python语言编写稍微复杂些的程序。对于有一定编程经验的人，采用实现一个功能的方式编程能够很快熟悉该语言，是一种很好的学习方式。&lt;/p&gt;
&lt;p&gt;以下是我编写的程序以及简单的注释。&lt;/p&gt;
&lt;p&gt;由于要对图像进行数值处理，所以采用opencv以及numpy库。首先是加载库，datetime是用于计算程序运行时间，os是用于获得文件路径，sys是用于获得命令行参数，cv2是opencv库，numpy是python的数组库。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import datetime
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import os
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import sys
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import cv2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import numpy as np
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;保证程序本身直接执行，而不是被调用，如果直接执行，则调用main()函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if __name__ == &amp;#34;__main__&amp;#34;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; main()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一个python文件就可以看作是一个python的模块，这个python模块（.py文件）有两种使用方式：直接运行使用和作为模块被其他模块调用。 每一个模块都有一个内置属性__name__。而__name__的值取决与python模块（.py文件）的使用方式。如果是直接运行使用，那么这个模块的__name__值就是“main”；如果是作为模块被其他模块调用，那么这个模块（.py文件）的__name__值就是该模块（.py文件）的文件名且不带路径和文件扩展名，如果dice_portrait_cv.py被其他python程序import dice_portrait_cv，则__name__为dice_portrait_cv。 main()函数，主要功能流程的执行，分别是：&lt;/p&gt;
&lt;p&gt;1.初始化文件路径&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def main():
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; start_time = datetime.datetime.now() #设置程序运行开始时间
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #初始化文件路径
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; EXEC_PATH = os.getcwd()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DICEPATH = EXEC_PATH + &amp;#39;\\dice_image\\&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OUTPUTPATH = EXEC_PATH + &amp;#39;\\output\\&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if not (os.path.exists(OUTPUTPATH)):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; os.mkdir(OUTPUTPATH)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;2.获得命令行参数，调用自定义函数getvalue()，返回输入图片文件名，色子列数，是否旋转&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imagefile, DICE_WIDTH, ROTATE = getvalue()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;3.读取要渲染的图片及色子图片&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; im = cv2.imread(imagefile, 0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice = getDice(DICEPATH)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;4.调用自定义函数，调整图片大小，返回图片数组&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; im = AjustImage(DICE_WIDTH, im)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;5.定义灰色度数值对应色子1-6点的分组，用了list，也可以用numpy的数组&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; p = [60, 80, 110, 150, 190, 220]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #使用numpy数组
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; p = np.array([60, 80, 110, 150, 190, 220])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;6.对图像进行16x16图块分割，并计算灰度，对应色子1-6，并将图片转换成色子点阵图，调用自定义函数，获得处理后的图像以及色子点数文件。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; im, dice_data = calculateDice(im, imagefile, p, dice, ROTATE)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;7.保存图片及色子点数文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; write_Dice(im, OUTPUTPATH, imagefile, dice_data)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;8.打印运行时间以及色子图片，按任意键退出&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; end_time = datetime.datetime.now()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;程序运行时间:&amp;#39;, end_time - start_time,&amp;#39;秒&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.imshow(imagefile, im)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.waitKey(0)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;下面是自定义函数。 1.获得命令行变量，返回变量：imagefile（输入文件名）, DICE_WIDTH（色子列数）, ROTATE（色子2，3，6是否旋转） def getvalue():&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (len(sys.argv) &amp;lt; 2 or len(sys.argv) &amp;gt; 4):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;Error, invalid arguments!&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;Call with &amp;#34; + sys.argv[0] + &amp;#34; inputimage [tile-size] &amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ROTATE = False
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DICE_WIDTH = 50
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if len(sys.argv) == 2:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imagefile = sys.argv[1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif len(sys.argv) == 3:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imagefile = sys.argv[1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DICE_WIDTH = int(sys.argv[2])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (DICE_WIDTH &amp;gt; 150 or DICE_WIDTH &amp;lt; 30):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;色子列数不正确，应在30-150之间&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imagefile = sys.argv[1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DICE_WIDTH = int(sys.argv[2])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (DICE_WIDTH &amp;gt; 150 or DICE_WIDTH &amp;lt; 30):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;Dice quality not avialiabe. It betweet 30 and 150&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (sys.argv[3] == &amp;#39;0&amp;#39; or sys.argv[3] == &amp;#39;1&amp;#39;):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ROTATE = bool(int(sys.argv[3]))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;1:色子旋转, 0:色子不旋转&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return imagefile, DICE_WIDTH, ROTATE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;2.调整图片，图片宽度为色子列数*16，返回调整后的图像数组，自定义函数输入变量为DICE_WIDTH（色子列数），image（输入的图像数组）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def AjustImage(DICE_WIDTH, image): # 调整图片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hight, width = image.shape[:2]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ratio = DICE_WIDTH * 16 / width
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; width = int(width * ratio)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hight = int(hight * ratio)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image = cv2.resize(image, (width, hight))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return image
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;3.读入色子图形&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def getDice(DICEPATH): # 读入色子图形文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice = np.zeros((9, 16, 16),dtype=&amp;#39;u8&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(9):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice[i] = cv2.imread(&amp;#39;./dice_image/&amp;#39; + str(i + 1) + &amp;#39;w.png&amp;#39;, 0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return dice
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;4.对图像进行处理，输入参数：im（图像数组）, imagefile（图片文件名）, p（灰色度分组数组）, dice（色子图片数组）, ROTATE（色子2，3，6是否旋转），返回处理后的图片数组im，以及色子点数数组image_data&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def calculateDice(im, imagefile, p, dice, ROTATE): # 处理图片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x_max = int((im.shape[1]/16))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; y_max = int((im.shape[0]/16))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice_data = np.arange(y_max * x_max, dtype=&amp;#34;u8&amp;#34;).reshape(y_max, x_max)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice2_rotate = False
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice3_rotate = False
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice6_rotate = False
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.namedWindow(imagefile, 0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.resizeWindow(imagefile, 640, int(640 * y_max / x_max))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for j in range(y_max):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for i in range(x_max):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 获得16x16图片的色度平均值mean或中位数median
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; image_data = int(np.mean(im[j * 16:(j + 1) * 16, i * 16:(i + 1) * 16]))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 根据色度值确定色子点数
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (image_data &amp;lt; p[0]):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (ROTATE):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice6_rotate = not (dice6_rotate)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (dice6_rotate):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif (image_data &amp;gt;= p[0]) and (image_data &amp;lt; p[1]):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif (image_data &amp;gt;= p[1]) and (image_data &amp;lt; p[2]):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif (image_data &amp;gt;= p[2]) and (image_data &amp;lt; p[3]):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (ROTATE):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice3_rotate = not (dice3_rotate)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (dice3_rotate):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; elif (image_data &amp;gt;= p[3]) and (image_data &amp;lt; p[4]):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (ROTATE):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice2_rotate = not (dice2_rotate)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (dice2_rotate):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; else:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n = 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #将色子图片写入原图片
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; im[j * 16:(j + 1) * 16, i * 16:(i + 1) * 16] = dice[n]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dice_data[j, i] = n + 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #显示色子覆盖原图片步骤
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.imshow(imagefile, im)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.waitKey(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return im, dice_data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;5.保存图片及色子点数文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;def write_Dice(im, OUTPUTPATH, imagefile, dice_data): # 将色子点数写入文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; y_max, x_max = np.shape(dice_data)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DICE_WIDTH = x_max
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#34;色子数量&amp;#34;, y_max, &amp;#39;*&amp;#39;, x_max, &amp;#39;=&amp;#39;, x_max * y_max)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cv2.imwrite(OUTPUTPATH + str(DICE_WIDTH) + &amp;#39;_hist_&amp;#39; + imagefile, im)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f = open(OUTPUTPATH + str(DICE_WIDTH) + &amp;#39;_hist_&amp;#39; + imagefile + &amp;#39;.txt&amp;#39;, &amp;#39;wt&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for y in range(y_max):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f.write((str(y + 1) + &amp;#39;:&amp;#39;))
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for x in range(x_max):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f.write(str(dice_data[y, x]) + &amp;#39;,&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f.write(&amp;#39;\n&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f.close()
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; print(&amp;#39;文件保存完毕!&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;采用numpy，对数组进行运算非常方便。&lt;/p&gt;
&lt;p&gt;程序放到了GitHub上，也可以直接用&lt;/p&gt;
&lt;p&gt;git clone &lt;a class="link" href="https://github.com/fallleaf/dice_portrait.git" target="_blank" rel="noopener"
&gt;https://github.com/fallleaf/dice_portrait.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;图框和色子都准备好了，这将是18年的第一个项目。&lt;/p&gt;</description></item><item><title>预防RSI的利器</title><link>https://blog.fallleaf.net/p/life-rsi-prevention-tools/</link><pubDate>Wed, 06 Dec 2006 15:58:05 +0800</pubDate><guid>https://blog.fallleaf.net/p/life-rsi-prevention-tools/</guid><description>&lt;p&gt;RSI，英文全名叫Repetitive Strain Injury或者为Repetitive Stress Injury，中文意思为重复性压迫损伤。它是由于从事重复性活动或不良姿势而造成的对腱、神经、肌肉和其它软组织的损伤，它的损害可归结为肌肉纤维的结构性变化和血流量减少，神经也不幸被牵扯其中，不活动的组织和周围的炎症压迫着神经，能够引起肢体失去知觉和酸麻，在神经损坏严重时最终变得脆弱。RSI 不是一种特定症状的名称，它是一类具有相同特点的症状的集合，如腕管综合征（CTS，Carpal tunnel syndroma），俗称“鼠标手”，腱鞘炎，奎缅综合征（DeQuervain’s syndrome），肘管综合症（cubital tunnel syndrome），胸廓出口综合征（thoracic outlet syndrome)等。它是一种职业性疾病，经常发生在从事重复性劳动的人群中，如流水线上的工人、IT行业人士、键盘手以及短信狂等。典型症状如颈部、四肢和背部的疼痛，手腕无力、手指麻木、疼痛，无法举双肩，眼睛模糊、酸疼等，对于从事计算机行业的人群中，以腕管综合征（CTS）最普遍。&lt;/p&gt;
&lt;p&gt;对于长时间进行计算机操作的人员，预防RSI，可参照以下的方法：&lt;/p&gt;
&lt;p&gt;－ 每工作 30－45 分钟，至少休息 5 分钟。可以借助一些预防RSI的软件，帮助提醒你按时休息；&lt;/p&gt;
&lt;p&gt;－ 在休息时伸展放松你的身体，做些体操，眼保健操之类的活动；&lt;/p&gt;
&lt;p&gt;－ 时常注意正确的身体姿态，如不要躺着使用笔记本电脑，不要斜躺在桌椅上；&lt;/p&gt;
&lt;p&gt;－ 时常调整桌椅、显示器、键盘、鼠标的位置，不要总固定在一个位置上；&lt;/p&gt;
&lt;p&gt;－ 不要沉湎于上网；&lt;/p&gt;
&lt;p&gt;－ 如果开始觉得疼痛或疼痛持续，应及早治疗。&lt;/p&gt;
&lt;p&gt;采用软件来帮助预防RSI，是一种有效的方法。常见的付费软件有WorkPace、fit@work、RSIguard和A.R.M.S（Avoid Repetitive Motion Syndrome），免费开源的软件有Workrave、type-break-mode等。这里要介绍的软件是Workrave。&lt;/p&gt;
&lt;p&gt;Workrave是一个预防和消除RSI的软件，它遵循遵循GPL规定，可在Microsoft Windows以及Linux下运行。它的网站地址为http://www.workrave.org ，可到去http://www.workrave.org/download/ 下载程序和代码，截至2006年12月6日，当前的版本是1.8.3。它可根据你设定好的时间间隔，让你小憩（micro-pauses）、休息 （rest breaks）以及工作时间（daily limit），并且可以弹出画面指导你进行运动。它具有统计功能，可以统计你每天的休息的情况、鼠标点击的次数、移动的距离以及敲击键盘的次数等。它还具有联网功能，使在网上的计算机都具有相同的设置，方便你在其他计算机上工作时，仍能够依照原来的设置进行休息。&lt;/p&gt;
&lt;p&gt;下图是Workrave的设置页面，包括定时器的设置，用户界面的设置，以及网络设置。
&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/preferences.gif"
width="616"
height="364"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/preferences_hu_5c16d250cac9b2e8.gif 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/preferences_hu_4ae1eea7193b77d2.gif 1024w"
loading="lazy"
alt="Preferences"
class="gallery-image"
data-flex-grow="169"
data-flex-basis="406px"
&gt;&lt;/p&gt;
&lt;p&gt;定时器设置包括小憩、休息和工作时间的设置，以小憩为例，可设置小憩间的时间间隔（time before break)，小憩的持续时间（pause duration），延后时间（post-pone time），还可设置时候显示取消或延后按钮（show “post－pone” and “skip” button），这个选项可防止不遵守设置时间的行为，另外，还可设置是否扣除不活动的时间（suspend timer when inactive），此项避免人不在的时候仍然计时，一般当键盘或鼠标5－6秒没有动作的时候才停止计时。&lt;/p&gt;
&lt;p&gt;下面的图形是Workrave的主窗口，手型图案为小憩的图标，茶图案为休息的时间，退出图案为剩余工作时间。也可将该窗口关闭，显示在工具栏中。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/main-window.png"
width="90"
height="105"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/main-window_hu_b7c6e67eb9da1809.png 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/main-window_hu_1d41653d9d95f798.png 1024w"
loading="lazy"
alt="Main window"
class="gallery-image"
data-flex-grow="85"
data-flex-basis="205px"
&gt;&lt;/p&gt;
&lt;p&gt;Main window&lt;/p&gt;
&lt;p&gt;这个闪烁的窗口提醒你该小憩了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/prelude.gif"
width="250"
height="78"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/prelude_hu_a1b6f3bcc4ac12a.gif 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/prelude_hu_937e8527ec329e78.gif 1024w"
loading="lazy"
alt="Prelude window"
class="gallery-image"
data-flex-grow="320"
data-flex-basis="769px"
&gt;&lt;/p&gt;
&lt;p&gt;Prelude window&lt;/p&gt;
&lt;p&gt;这是小憩时间的窗口，你可以去到杯水，或闭上眼，这个窗口有取消(skip)和延时(postpone)两个按钮，当然，你也可以在设置页中取消它，这样你就不得不遵守这些时间了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/micro-pause.png"
width="247"
height="157"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/micro-pause_hu_bb51db2e7f987aac.png 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/micro-pause_hu_37eab97c7f328a3e.png 1024w"
loading="lazy"
alt="Micro-pause"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="377px"
&gt;&lt;/p&gt;
&lt;p&gt;Micro-pause&lt;/p&gt;
&lt;p&gt;下图告诉你该好好休息了，可以去做操，散步，去喝杯咖啡，嫌时间不够吗，可以在设置页中增加。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/rest-break.png"
width="352"
height="170"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/rest-break_hu_98eade2ac74c9ebe.png 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/rest-break_hu_8fdd89f2ed9ab76.png 1024w"
loading="lazy"
alt="Rest break"
class="gallery-image"
data-flex-grow="207"
data-flex-basis="496px"
&gt;&lt;/p&gt;
&lt;p&gt;Rest break&lt;/p&gt;
&lt;p&gt;呵呵，今天工作时间结束了，如果你还想工作，不如远离计算机，看看其他文件什么的。注意，时间可别设置的太短了，不然，还得重启计算机才行。也别设置的太长了，要防止”过劳死“。！）&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/daily-limit.png"
width="367"
height="138"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/daily-limit_hu_8550708f53428dde.png 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/daily-limit_hu_5685d62fc9b0ffc3.png 1024w"
loading="lazy"
alt="Daily limit"
class="gallery-image"
data-flex-grow="265"
data-flex-basis="638px"
&gt;&lt;/p&gt;
&lt;p&gt;Daily limit&lt;/p&gt;
&lt;p&gt;跟着一起做操吧。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/life-rsi-prevention-tools/exercises.gif"
width="574"
height="358"
srcset="https://blog.fallleaf.net/p/life-rsi-prevention-tools/exercises_hu_94d0041999dce0a5.gif 480w, https://blog.fallleaf.net/p/life-rsi-prevention-tools/exercises_hu_be4fc4adf85d3739.gif 1024w"
loading="lazy"
alt="Exercises"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
&gt;&lt;/p&gt;
&lt;p&gt;Exercises&lt;/p&gt;
&lt;p&gt;在时间的设置上，我一般设置10分钟间隔一小憩，小憩时间2分钟，60分钟一休息，休息时间为10分钟，这个是参照“用(10+2)*5法来对付惰性”进行设置的，你也可以根据你的习惯设置。&lt;/p&gt;
&lt;p&gt;刚开始用这个软件，可能你感觉不适应，总觉的时间间隔太短或着打扰你工作的劲头，不过，这是防止RSI的重要的方法，想想吧，身体和工作，哪个更重要些。&lt;/p&gt;</description></item><item><title>电源头柜电力线径的计算方法</title><link>https://blog.fallleaf.net/p/tech-power-cabinet-wire-sizing-method/</link><pubDate>Mon, 27 Mar 2006 16:27:04 +0800</pubDate><guid>https://blog.fallleaf.net/p/tech-power-cabinet-wire-sizing-method/</guid><description>&lt;p&gt;查询了网站的统计信息，发现搜索电力线缆计算方法的还不少，我根据以往经验，参照其他人写的文章，归纳了一下，供大家参考。&lt;/p&gt;
&lt;p&gt;对于小工程来说，或者一个工程的配套部分，电源头柜至电源分支柜或直流屏这段导线的线径可按照固定压降发，根据以下公式计算，其计算公式如下：&lt;/p&gt;
&lt;p&gt;S=(ΣIL)/(rΔU)&lt;/p&gt;
&lt;p&gt;上式中： - S — 导线截面面积(mm2)，&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ΣI — 流过导线的电流(A)，实际上是头柜允许的最大电流，
L — 导线回路长度(m),注意，是回路，即一来一回的长度，
r — 导体导电系数(m/Ω·mm2)，一般铜取57，铝取34，
ΔU — 除掉配电设备等压降后在导线上允许的压降(V)。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;现在要确认的是ΔU的数值，ΔU根据不同的电源系统设计，取值也不同，需向电源专业了解ΔU的取值，如果了解不到，可以按以下直流放电回路全程压降分配的情况取定。（要注意的是，这种分配方法只是其中的一种，还有其他的方法）&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.fallleaf.net/p/tech-power-cabinet-wire-sizing-method/105_1.jpg"
width="500"
height="172"
srcset="https://blog.fallleaf.net/p/tech-power-cabinet-wire-sizing-method/105_1_hu_a455c9aedc6b0d91.jpg 480w, https://blog.fallleaf.net/p/tech-power-cabinet-wire-sizing-method/105_1_hu_74ba8459562556ff.jpg 1024w"
loading="lazy"
alt="压降分配"
class="gallery-image"
data-flex-grow="290"
data-flex-basis="697px"
&gt;&lt;/p&gt;
&lt;p&gt;按此算出电力线线径，并向上取相近的电缆规格，保护地可取小一号线径。&lt;/p&gt;
&lt;p&gt;在不同机房之间选用铜芯聚氯乙烯绝缘聚氯乙烯护套电力电缆（阻燃）（RVVZ系列），在同一机房内选用铜芯聚氯乙烯绝缘电力电缆（阻燃）（RVZ系列）。&lt;/p&gt;
&lt;p&gt;设计中常见的直流用电力线按截面分有如下几种：1×6、1×10、1×16、1×35、1×50、1×70、1×95、1×120、1×150、1×185、1×240（mm2）。&lt;/p&gt;</description></item></channel></rss>