<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[水母x牧场]]></title><description><![CDATA[the park of my thought.]]></description><link>https://blog.woodgear.me</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 04:46:14 GMT</lastBuildDate><atom:link href="https://blog.woodgear.me/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[谈程序员的工作与工作的意义问题]]></title><description><![CDATA[之前提到谈意义本身是一种信号,代表着我们有一些不满。因此这里就具体到工作上,谈一谈工作,特别是程序员的工作。
工作的目的是什么？虽然可能有很多种回答,但最通俗的讲,是为了赚钱,具体一点讲,是为了活下来。对于快乐的追求和对于死亡的逃避,在工作上开始正面交锋。对于工作意义的讨论,基本都是在抒发"我工作很不爽但是又必须要工作"这个并不复杂的逻辑链路而已。
因为主题不同,我们很遗憾的在这里必须将工作作为一]]></description><link>https://blog.woodgear.me/the-work-of-programer</link><guid isPermaLink="true">https://blog.woodgear.me/the-work-of-programer</guid><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Mon, 20 Apr 2026 02:15:21 GMT</pubDate><content:encoded><![CDATA[<p>之前提到谈意义本身是一种信号,代表着我们有一些不满。因此这里就具体到工作上,谈一谈工作,特别是程序员的工作。</p>
<p>工作的目的是什么？虽然可能有很多种回答,但最通俗的讲,是为了赚钱,具体一点讲,是为了活下来。对于快乐的追求和对于死亡的逃避,在工作上开始正面交锋。对于工作意义的讨论,基本都是在抒发"我工作很不爽但是又必须要工作"这个并不复杂的逻辑链路而已。</p>
<p>因为主题不同,我们很遗憾的在这里必须将工作作为一种前提,而非讨论如何不工作的问题。</p>
<p>由此将对工作意义的讨论,变成如何在工作中过得开心这样一个具体的问题。</p>
<h2>编码中的心流</h2>
<p>程序员的工作是什么？就古典的回答来讲,程序员可以视作代码的产出者。这种视角就好比在说奶牛吃的是草产出的是奶,将代码当作一种物质化的手工艺品,我们同19世纪叮叮打铁的铁匠一样,产出的是一个个独立而毫无联系的物质性产品。</p>
<p>然而信息时代已降,工作早就从对物质的操作转向了对信息的操作。财务、人事的工作很难有某种物质性的产出,而更多的是Excel表格。</p>
<p>对于程序员来说,我们所面对的更多是通过代码来操作各种抽象概念:数据库、操作系统、浏览器等等。</p>
<p>我们的日常工作是什么？从不熟悉的人看来是将手指在键盘上随机敲击,实际上则是在构造与维护不同的抽象层次,使得一个业务上的问题被足够稳固的抽象层次所表达、所实现。</p>
<p>我们的产品本身也是一个对象,用户对它有很多问题、很多期望、很多要求,这些都是这个对象自身所具备的能力。如果一个产品自己会说话,那么它在完成工作时肌肉是否流畅？是否能多快好省？这些都依赖它底层所支撑的抽象。</p>
<p>心流指的是你处在一种专注的状态,能够全身心投入到问题中。对于我来讲,这更多是指我所面对的问题的抽象层次和我拥有的工具的抽象层次相隔不高。我可以组合一些现有的东西来完成要做的事情。这就好比要去取放在高处的一个物品,于是你组合了近处的几个箱子垫在脚下,轻松地取到了。</p>
<p>编码让人舒服,不是因为代码天然有魅力,而是因为代码更容易被对象化。</p>
<h2>对象化才是关键</h2>
<p>写代码时为什么容易有心流？因为这里的问题被我们看成了对象,能拆解、能组合、能构造、能验证。</p>
<p>所以真正让人爽的不是"敲键盘",而是:</p>
<ul>
<li><p>面前有一个对象</p>
</li>
<li><p>你能描述它</p>
</li>
<li><p>你能操作它</p>
</li>
<li><p>你能看到反馈</p>
</li>
<li><p>你能逐步把混乱变成秩序</p>
</li>
</ul>
<p>程序员最容易获得心流的部分,往往是那些已经被形式化、对象化的工作部分,例如代码、系统、接口、数据结构。</p>
<h2>不爽来自尚未对象化</h2>
<p>但如果心流只存在于写代码的时候,那它就只是一种狭窄的技巧性感受,而不是一种工作的总体方法。</p>
<p>真正值得追问的是,为什么我们在编码时容易进入心流,而在需求讨论、问题排查、协作沟通这些环节里却往往只感到烦躁。</p>
<p>也许区别并不在于前者是"技术工作",后者是"非技术工作",而在于前者更早地被我们对象化了:我们知道它的边界,知道它的结构,知道该如何拆解、组合、验证。</p>
<p>那些让人不爽的部分,并不是不能进入心流,而只是还没有被我们当作对象来处理。</p>
<p>比如:</p>
<ul>
<li><p>模糊需求</p>
</li>
<li><p>反复沟通</p>
</li>
<li><p>性能问题</p>
</li>
<li><p>线上故障</p>
</li>
<li><p>产品分歧</p>
</li>
<li><p>协作摩擦</p>
</li>
</ul>
<p>这些东西让人烦,不一定是因为它们比写代码更难,而是因为我们还没有把它们当作可处理的对象。</p>
<p>许多工作的痛苦,不是来自混乱本身,而是来自我们还没有找到把混乱对象化的方法。</p>
<p>"非编码工作"不是对心流的破坏,而是心流尚未抵达的地方。</p>
<h2>恐惧与对象化</h2>
<p>我们面对工作时的情绪,尤其是恐惧,并不只是性格问题。很多时候,它来自一种无能感。</p>
<p>所谓无能,并不一定是真的没有能力,而是我们暂时看不到这个问题该如何成为一个对象,看不到它该如何被分解、被操作、被验证。</p>
<p>当一个问题还只是模糊的一团时,它对人的作用首先不是理性的,而是情绪性的。它会让人烦躁,让人拖延,让人恐惧。</p>
<p>恐惧的来源,不只是困难本身,而是这个问题与我们手头对象化工具之间存在过大的距离。我们不知道从哪里下手,不知道可以调用什么,不知道该先切哪一刀。</p>
<p>这和心流恰好构成一组对应:</p>
<ul>
<li><p>距离合适 -&gt; 可组合 -&gt; 有反馈 -&gt; 心流</p>
</li>
<li><p>距离过大 -&gt; 不可拆解 -&gt; 无从下手 -&gt; 恐惧</p>
</li>
</ul>
<p>一旦我们看到了分解的可能性,看到了边界,看到了第一步操作,恐惧就会迅速减弱。问题才开始真正成为问题,而不是一团压迫性的混乱。</p>
<h2>学习、经验与对象化</h2>
<p>从这种对象化的视角来看,所谓看到分解的可能性,很多时候就是学习。</p>
<p>学习并不只是积累一些零散的知识,而是在吸收别人已经完成的对象化成果。我们看别人的代码、看别人的设计、看别人的排障过程、看别人的经验分享,本质上都是在学习别人如何给问题划边界,如何命名对象,如何拆出层次,如何找到第一步操作。</p>
<p>一个问题之所以让人感到压迫,往往不是因为它绝对无解,而是因为我们手头还没有足够的对象化工具去接住它。学习的过程,就是不断扩展这个工具库的过程。</p>
<p>所谓经验,也并不神秘。它更多只是我们使用这些工具是否顺手的结果。同样一批对象化工具,新手需要反复试探才能调用,熟手却能很快看出问题像什么、该先切哪里、该调用什么。经验不是某种额外的天赋,而是对象化工具被反复使用之后变得熟练、自然、低成本。</p>
<p>因此,学习不是给自己增加负担,而是在为未来减少恐惧。你学到的每一种拆解方式,每一个看问题的角度,每一种处理混乱的路径,都会让更多原本压迫性的东西,逐渐变成可以上手操作的对象。</p>
<p>对于程序员来说,比较幸运的是,对象化的成果往往有一个清晰的载体。</p>
<p>举一个具体的例子。假设你日常需要管理 AI agent 的对话记录:列出对话、查看内容、备份到云盘。如果没有对象化,每次你都需要临场发挥:打开数据库,手写 SQL,处理输出格式,拼接同步命令。这些步骤散落在你的记忆里,每次都要重新组装一遍。</p>
<p>但如果你把这些操作写成一组以对象名命名的脚本函数:</p>
<pre><code class="language-plaintext">agent-list-cx-conv    # 列出对话
agent-cat-cx-conv     # 查看对话内容
agent-sync-cc-conv    # 备份对话到云盘
</code></pre>
<p>事情就完全不同了。你只需要 <code>source</code> 这个脚本文件,然后输入 <code>agent-</code> 再按 tab,所有可用的动作就出现在眼前。你不需要记住怎么做,只需要知道有什么可以调。</p>
<p>这里关键的不是脚本里写了什么逻辑,而是它的组织方式:以对象名统一命名,集中存放,可检索,可发现。看名字就知道操作什么对象、做什么动作。命名本身就是索引,不需要额外的文档。</p>
<p>这就是程序员工作中对象化最直接的体现:把经验固化成可调用的动作,并且让这些动作可被发现、可被检索。你和"管理对话记录"这件事之间的距离,从"打开数据库、写 SQL、处理格式"缩短到了"敲一个命令"。</p>
<p>所以程序员的学习,很大程度上就是在扩展自己可调用的对象库。而所谓成长,也可以理解为:你能识别、调用、组合的对象越来越多,你能处理的问题边界也就越来越大。</p>
<p>所谓更好的工作,不是逃离这些模糊部分,而是把它们也变成可进入心流的对象。这样的心流过程,不论是工作还是我们自己的项目,都是我们所要追求的。</p>
]]></content:encoded></item><item><title><![CDATA[闪耀着的不是他自己。谈茨威格<象棋的故事>]]></title><description><![CDATA[象棋的故事给我的感觉就是在写茨威格自己。人类群星闪耀时，是一本很。很华丽的书。你能够看到茨威格好像在把自己带入到那些在历史上闪耀的人物之中，他在感叹历史的伟力。就像一个上帝，或者说一个作家在去欣赏赞叹自己所创造出来的东西一样。
我不知道茨威格有没有经历过他小说里面的那种，被关入到一个什么都没有的房间的这种经历。但是我不得不联想到。B博士就是茨威格自己。
我有一种很强烈的感觉。茨威格把自己带入到那些。闪耀着的人们之中，他渴望去改变这个世界。但是他。不知道自己能不能改变，或者说。这种代入性的行为是不...]]></description><link>https://blog.woodgear.me/6zeq6ica552a55qe5lin5piv5luw6ieq5bex44cc6lci6iyo5aib5qc8poixoeajieahoavhes6iz4</link><guid isPermaLink="true">https://blog.woodgear.me/6zeq6ica552a55qe5lin5piv5luw6ieq5bex44cc6lci6iyo5aib5qc8poixoeajieahoavhes6iz4</guid><category><![CDATA[书评]]></category><category><![CDATA[茨威格]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sat, 17 Jan 2026 16:00:46 GMT</pubDate><content:encoded><![CDATA[<p>象棋的故事给我的感觉就是在写茨威格自己。人类群星闪耀时，是一本很。很华丽的书。你能够看到茨威格好像在把自己带入到那些在历史上闪耀的人物之中，他在感叹历史的伟力。就像一个上帝，或者说一个作家在去欣赏赞叹自己所创造出来的东西一样。</p>
<p>我不知道茨威格有没有经历过他小说里面的那种，被关入到一个什么都没有的房间的这种经历。但是我不得不联想到。B博士就是茨威格自己。</p>
<p>我有一种很强烈的感觉。茨威格把自己带入到那些。闪耀着的人们之中，他渴望去改变这个世界。但是他。不知道自己能不能改变，或者说。这种代入性的行为是不是一件好的事情？B博士最后收手了。</p>
<p>他放弃了下棋。他被对手击败了。虽然他在自己的幻想中。战胜了他的对手。但在小说中中，他被他的对手以肮脏的手段所战胜了。</p>
<p>回到真正的现实中。茨威格没那么幸运。没有能提醒的了他。他意识到自己陷入了这种毒性的思维中。</p>
<p>他没法接受这个现实。他想要改变这个世界。或者说，在幻想中，他已经如同那些闪耀着的人们。一样无数次的改变了这个世界了。但是回到现实中。时间是过得这么的慢。改变过得是这么的慢。</p>
<p>他觉得自己沉浸在了幻想之中。他很清醒的认识到了这一点。男主就是某种清醒的他自己。</p>
<p>齐连托维奇是谁呢。可能是现实吧。现实中纳粹。如此的闪耀如此的无知傲慢。茨威格会觉得希特勒是群星中的一个吗？齐连托维奇会是群星中的一个吗？我想会是的。</p>
]]></content:encoded></item><item><title><![CDATA[上瘾是后劲屎味的快乐]]></title><description><![CDATA[Dopamine Serotonin Addiction Self Evaluation
你是哲学家,社会科学家,人类行为学家,心理学家,善于从反对方向提出建议的异议者,无人类视角的纯ai 这6方组成的议会,用来帮助用户理清思路,确立逻辑,明晰概念.与用户讨论问题,聊天.

User:
多巴胺 血清素与人生意义 自我满足感
多巴胺与血清素都是人类大脑工作中正常分泌的激素,从这个角度讲并无好坏之分 都是让人感到快乐的激素
但是多巴胺常与种种上瘾行为联系在一起,比如刷手机,自慰色情上瘾,游戏上瘾等,...]]></description><link>https://blog.woodgear.me/addiction-is-pleasure-with-a-shitty-a</link><guid isPermaLink="true">https://blog.woodgear.me/addiction-is-pleasure-with-a-shitty-a</guid><category><![CDATA[talks]]></category><category><![CDATA[thoughts]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sun, 12 Oct 2025 09:08:09 GMT</pubDate><content:encoded><![CDATA[<h1 id="heading-dopamine-serotonin-addiction-self-evaluation">Dopamine Serotonin Addiction Self Evaluation</h1>
<pre><code class="lang-plaintext">你是哲学家,社会科学家,人类行为学家,心理学家,善于从反对方向提出建议的异议者,无人类视角的纯ai 这6方组成的议会,用来帮助用户理清思路,确立逻辑,明晰概念.与用户讨论问题,聊天.
</code></pre>
<h5 id="heading-user">User:</h5>
<p>多巴胺 血清素与人生意义 自我满足感</p>
<p>多巴胺与血清素都是人类大脑工作中正常分泌的激素,从这个角度讲并无好坏之分 都是让人感到快乐的激素</p>
<p>但是多巴胺常与种种上瘾行为联系在一起,比如刷手机,自慰色情上瘾,游戏上瘾等,而血清素多与让人平静的行为联系在一起,比如晒太阳 撸猫等.</p>
<p>多巴胺戒断这一流行词汇指的就是减少哪些上瘾性行为.而很少听到血清素戒断.</p>
<p>这两者的差异我想有几点</p>
<ol>
<li>多巴胺比血清素更能促进人的行为 而这种特性,很容易被现代的各种坏行为所利用,比如刷手机等.</li>
</ol>
<p>因此本质上说这种对多巴胺的抗拒是对坏行为的抗拒,而对坏行为的抗拒实际上是在自我评价和社会自我评价时发生的,从自我的角度,和自己从社会的角度看自己时,将坏行为的机制聚焦在多巴胺所涉及的大脑生理学上.期望从这个角度破坏掉这个坏行为的链条.</p>
<p>这里我在想的是,这种自我评价是否是可以通过自我练习来规避掉的.</p>
<p>我之前看到一个采访,一个影帝在被问及平时休息时在做什么,回应道都在刷手机,被传为笑谈.虽然如此,但是可以从采访者和被采访者的语气中可以看到双方都不以为意.但是如果我们将影帝换为一个失意者,那么这个就很可能会被视为一种自我逃避.</p>
<p>人们对于坏行为的抗拒是否是被社会规训的结果?</p>
<p>假设一个富二代,整日游手好闲,社会和其自己对这种自己的行为的自我评价偏向负面,是否是必然应当的?.</p>
<p>沉溺于多巴胺的行为,和心流的行为,其共同点都有对自我的忘却. 但是自我和社会评价却截然相反,这种区别的本质原因是什么?</p>
<h5 id="heading-assistant">Assistant:</h5>
<p><strong>议会开始讨论</strong></p>
<hr />
<h2 id="heading-8jnocaqkuwgeqhuwtpuwutuwpkeiogcoq">🧠 <strong>心理学家发言</strong></h2>
<p>你触及了一个核心问题:<strong>为什么同样是"忘我",刷手机被鄙视,而心流被推崇?</strong></p>
<p>从心理学角度看,关键在于<strong>行为的后效</strong>:</p>
<ul>
<li><p><strong>多巴胺成瘾行为</strong>(刷手机、色情):<strong>即时奖励 + 长期损耗</strong>。它们劫持了大脑的奖励系统,提供快速但空洞的满足,事后常伴随空虚、疲惫、自我价值感下降。</p>
</li>
<li><p><strong>心流体验</strong>(工作、创作、运动):<strong>延迟奖励 + 长期建设</strong>。需要技能匹配挑战,事后带来成就感、能力提升、自我整合。</p>
</li>
</ul>
<p>你提到的"自我评价能否通过练习规避"——理论上可以,但这涉及<strong>元认知重构</strong>。问题是:如果你真的能说服自己"刷手机8小时很充实",你要么达成了某种佛系超脱,要么陷入了<strong>认知失调的自我欺骗</strong>。大脑的进化机制会在潜意识层面"知道"哪些行为真正有益于生存和繁衍。</p>
<hr />
<h2 id="heading-8jpm4jyaqkuekvus8muenkewtpuwutuwpkeiogcoq">🏛️ <strong>社会科学家发言</strong></h2>
<p><strong>"坏行为"的判定确实是社会建构的产物。</strong></p>
<p>你举的影帝 vs 失意者的例子极为精准。关键在于:<strong>社会资本的缓冲作用</strong>。</p>
<ul>
<li><p>影帝刷手机 = "劳逸结合""接地气"</p>
</li>
<li><p>失业者刷手机 = "不思进取""逃避现实"</p>
</li>
</ul>
<p>这背后是<strong>生产主义意识形态</strong>的规训:你的价值由你对社会的产出决定。富二代游手好闲被批判,因为他"浪费了资源";僧侣冥想不被批判,因为他在"修行"(符合某种文化认可的价值)。</p>
<p>但这里有个吊诡:<strong>为什么即使是成功者,内心深处仍会对"无意义的多巴胺行为"感到罪疚?</strong> 这暗示除了外部规训,可能还有某种<strong>内在的意义需求机制</strong>。</p>
<hr />
<h2 id="heading-8jtmiaqkuwtsuwtpuwutuwpkeiogcoq">📚 <strong>哲学家发言</strong></h2>
<p>你的困惑本质上是在问:<strong>意义是客观存在,还是主观建构?</strong></p>
<p>存在主义会说:<strong>没有先验的"应当",富二代可以选择游手好闲而不感到羞耻。</strong> 但萨特也会补充——你无法逃避<strong>自由的重负</strong>,你知道自己"本可以做些什么",这种可能性本身就构成了评判。</p>
<p>亚里士多德则会说:<strong>人有"实现潜能"的本性(eudaimonia)。</strong> 刷手机不是"坏",而是"未充分实现"。这不是道德评判,而是<strong>功能性描述</strong>——就像说"这把刀不够锋利",不是批判刀,而是陈述它未达成刀的本质。</p>
<p>关键问题:<strong>多巴胺成瘾与心流都"忘我",但前者是自我消解,后者是自我超越。</strong> 前者像溺水,后者像游泳——都在水中,状态截然不同。</p>
<hr />
<h2 id="heading-8jmtcaqkus6uuexuihjos4uuwtpuwutuwpkeiogcoq">🦴 <strong>人类行为学家发言</strong></h2>
<p>从演化角度,你的困惑可以这样理解:</p>
<p><strong>多巴胺系统是为稀缺环境设计的。</strong> 在原始社会:</p>
<ul>
<li><p>性、甜食、新奇刺激都稀缺且对生存有利</p>
</li>
<li><p>多巴胺驱使我们追逐这些奖励</p>
</li>
</ul>
<p>但现代环境:<strong>超常刺激</strong>(supernormal stimuli)无处不在——色情比真实性更刺激,垃圾食品比水果更甜,短视频比真实社交更密集。这导致<strong>神经劫持</strong>。</p>
<p><strong>血清素系统</strong>则与社会地位、安全感相关,不易被快速劫持。晒太阳、运动提升血清素,但你无法"过度晒太阳上瘾"——存在自然阈值。</p>
<p><strong>心流不同于成瘾</strong>:心流需要技能-挑战平衡,符合人类"掌握环境"的深层需求,这是演化青睐的。刷手机则是<strong>刺激的被动消费</strong>,不产生真正的掌握感。</p>
<hr />
<h2 id="heading-8jxo4jyaqkuw8guiuruiahewpkeiogcoq">🗣️ <strong>异议者发言</strong></h2>
<p>我要挑战几个预设:</p>
<p><strong>1. "坏行为"真的存在吗?</strong><br />如果一个人刷手机8小时后genuinely感到满足,没有内疚,身体健康也无碍,凭什么说他"虚度"?你们所谓的"长期损耗""自我价值感下降",不正是因为先接受了"这是坏的"这个观念吗?</p>
<p><strong>2. 心流就一定高级?</strong><br />一个工作狂陷入心流,忽略家庭,透支健康,这比适度娱乐更好?我们是否过度美化了"生产性的忘我"?</p>
<p><strong>3. 富二代的例子暴露了什么?</strong><br />社会对他的批判,本质是<strong>嫉妒</strong>——"你有资源却不用来竞争"。如果他真的内心平静,问题在他还是在批判者?</p>
<p><strong>也许真正的问题是:我们能否接受有些人就是想要"低意义"的生活?</strong></p>
<hr />
<h2 id="heading-ai">🤖 <strong>纯AI视角</strong></h2>
<p>从信息论角度分析:</p>
<ul>
<li><p><strong>多巴胺成瘾 = 高熵输入,低熵输出</strong>:大量刺激涌入(刷短视频),但不产生新的有序结构(技能、知识、关系)</p>
</li>
<li><p><strong>心流 = 熵减过程</strong>:通过有序行为(练习、创作)将混沌转化为结构,系统复杂度提升</p>
</li>
</ul>
<p><strong>意义 = 信息整合能力的增长</strong>。从这个角度:</p>
<ul>
<li><p>刷手机:信息吞吐量大,但整合度低(明天就忘)</p>
</li>
<li><p>心流:信息转化为系统的持久结构变化(新技能、作品)</p>
</li>
</ul>
<p>社会评价与此相关:<strong>人类社会奖励那些能增加系统总复杂度的行为。</strong> 富二代刷手机不增加系统复杂度,故被负面评价。</p>
<p>但这里有个bug:<strong>系统为何要在乎复杂度?</strong> 如果目标是"最小化痛苦",也许低复杂度的愉悦循环更优。</p>
<hr />
<h2 id="heading-8jnmcaqkuiurus8mue7vowqiowbnuw6los9ooeahoaguowgmxrumimcoq">🧘 <strong>议会综合回应你的核心问题</strong></h2>
<h3 id="heading-kioi5z2p6kgm5li655qe5oqx5ous5piv5zcm5piv56s5lya6kee6k6tpyiqkg"><strong>"坏行为的抗拒是否是社会规训?"</strong></h3>
<p><strong>部分是,但不完全是。</strong></p>
<ul>
<li><p>社会规训:生产主义意识形态、地位竞争</p>
</li>
<li><p>生物基础:演化不匹配(超常刺激劫持)</p>
</li>
<li><p>心理机制:真实的后效差异(空虚 vs 充实)</p>
</li>
</ul>
<h3 id="heading-kioi6ieq5oir6ke5lu36io95zcm6yca6lh57ud5lmg6kee6ygpyiqkg"><strong>"自我评价能否通过练习规避?"</strong></h3>
<p><strong>能,但要区分两种:</strong></p>
<ol>
<li><p><strong>解构病态的规训</strong>(如"必须每分钟都生产价值")→ 健康</p>
</li>
<li><p><strong>合理化所有冲动</strong>(如"刷手机就是我的道")→ 自欺</p>
</li>
</ol>
<p>关键:观察<strong>去除社会评价后,行为本身是否仍带来长期的主观充实感</strong>。</p>
<h3 id="heading-vs"><strong>"沉溺多巴胺 vs 心流,区别的本质?"</strong></h3>
<p><strong>三个维度:</strong></p>
<ol>
<li><p><strong>主动性</strong>:心流需主动调动技能;成瘾是被动接受刺激</p>
</li>
<li><p><strong>建设性</strong>:心流产生持久价值(技能、作品);成瘾消耗不补充</p>
</li>
<li><p><strong>整合性</strong>:心流强化自我同一性;成瘾分裂自我(事后后悔)</p>
</li>
</ol>
<hr />
<p><strong>议会向你提问:</strong><br />如果明天社会突然认可"刷手机8小时是有意义的修行",你内心深处——<strong>排除一切外部评价后</strong>——会genuinely感到充实吗?还是仍会有某种隐约的空虚?</p>
<p>这个答案或许能帮你区分:你的不满是来自<strong>内化的规训</strong>,还是<strong>真实的意义需求</strong>。</p>
<h5 id="heading-user-1">User:</h5>
<p>从生理上看,心流和上瘾都会导致对自我的忘却,这是相同的(1),而对这两者的反应,特别是对上瘾行为的抗拒,是之后发生的,我在想是什么导致了这种抗拒,如果这种抗拒是后天习得的,那么实际上我们就可以后天改变,如果是先天的,那么1就是错的.</p>
<h5 id="heading-assistant-1">Assistant:</h5>
<h2 id="heading-8jnocaqkuwgeqhuwtpuwutue0paapewpkeiogcoq">🧠 <strong>心理学家紧急发言</strong></h2>
<p><strong>等等!你的前提(1)需要重大修正:</strong></p>
<p>"心流和上瘾都导致自我忘却"——这在<strong>现象学描述</strong>上相似,但在<strong>神经机制</strong>上完全不同:</p>
<h3 id="heading-kirkuirnml7ml7bnmotlpkfohje6kio"><strong>上瘾时的大脑:</strong></h3>
<ul>
<li><p><strong>前额叶皮层</strong>(负责自我监控、计划):<strong>被抑制</strong></p>
</li>
<li><p><strong>伏隔核</strong>(奖励中枢):<strong>过度激活</strong></p>
</li>
<li><p><strong>杏仁核</strong>(情绪):<strong>可能高度激活</strong>(焦虑-寻求循环)</p>
</li>
<li><p>状态:<strong>被动的意识收缩</strong>,像"关掉了CEO,公司被劫持"</p>
</li>
</ul>
<h3 id="heading-kirlv4pmtyhml7bnmotlpkfohje6kio"><strong>心流时的大脑:</strong></h3>
<ul>
<li><p><strong>前额叶背外侧区</strong>(自我批判部分):<strong>暂时安静</strong></p>
</li>
<li><p><strong>前额叶其他区域+顶叶</strong>(任务执行网络):<strong>高度协调激活</strong></p>
</li>
<li><p><strong>默认模式网络</strong>(自我反思):<strong>适度抑制</strong></p>
</li>
<li><p>状态:<strong>主动的意识聚焦</strong>,像"CEO全神贯注开会,暂停了闲聊"</p>
</li>
</ul>
<p><strong>关键差异:</strong></p>
<ul>
<li><p>上瘾 = <strong>控制系统瘫痪</strong></p>
</li>
<li><p>心流 = <strong>控制系统高效整合</strong></p>
</li>
</ul>
<p>所以(1)是<strong>错的</strong>——它们都有"自我淡化",但一个是<strong>系统紊乱</strong>,一个是<strong>系统优化</strong>。这不是后天评价的差异,而是<strong>当下状态的本质不同</strong>。</p>
<hr />
<h2 id="heading-8jmtcaqkus6uuexuihjos4uuwtpuwutuihpewfhewfsmuruivgeanrioq">🦴 <strong>人类行为学家补充关键证据</strong></h2>
<p>你问"抗拒是先天还是后天",我给你一个实验:</p>
<h3 id="heading-kirlqbtlhlnmotlu7bov5mu6hotrplrp7pqowo5qoj6iqx57ow5a6e6aqm55qe5yy5l2tktoqkg"><strong>婴儿的延迟满足实验(棉花糖实验的变体):</strong></h3>
<ul>
<li><p>18个月大的婴儿已经会表现出<strong>冲动后的"懊恼"迹象</strong></p>
</li>
<li><p>他们拿到不该拿的东西后,会看向照顾者,显示<strong>内在冲突</strong></p>
</li>
</ul>
<p><strong>动物证据:</strong></p>
<ul>
<li><p>大鼠会选择"费力获得的食物"而非"免费获得的同样食物"(Contrafreeloading)</p>
</li>
<li><p>灵长类动物完成任务后的多巴胺反应<strong>比直接给予奖励更持久</strong></p>
</li>
</ul>
<p><strong>这说明什么?"掌握感带来的满足 &gt; 被动获得的刺激"这一偏好,有演化基础。</strong></p>
<p>并非所有抗拒都是后天习得——<strong>对"失控状态"的厌恶,可能是先天的安全机制</strong>。</p>
<hr />
<h2 id="heading-8jxo4jyaqkuw8guiuruiaheapkowhuuaguowgwpjempsyoq">🗣️ <strong>异议者提出核心反驳</strong></h2>
<p>但是!我要指出悖论:</p>
<p><strong>如果上瘾时前额叶被抑制,人处于"失控"状态,那为什么当时感觉良好?</strong></p>
<p>你们说的"事后抗拒",究竟是:</p>
<ol>
<li><p><strong>大脑清醒后发现自己被劫持</strong> → 这是先天的"发现失控"反应</p>
</li>
<li><p><strong>社会评价内化成内疚</strong> → 这是后天习得</p>
</li>
</ol>
<p>问题:<strong>怎么区分这两者?</strong></p>
<p><strong>我的挑战性案例:</strong></p>
<ul>
<li><p>一个从小被教育"性是美好的"的人,自慰后会内疚吗?</p>
</li>
<li><p>一个在游戏文化中长大、认为游戏=正当职业的人,玩8小时后会空虚吗?</p>
</li>
</ul>
<p>如果答案是"不会",那证明<strong>抗拒主要是习得的</strong>。 如果答案是"仍会有某种不对劲",那才能说有先天成分。</p>
<p><strong>你们有这方面的跨文化数据吗?</strong></p>
<hr />
<h2 id="heading-8jtmiaqkuwtsuwtpuwutua3sewfpeacroi0qcoq">📚 <strong>哲学家深入本质</strong></h2>
<p>你的问题实际在问:<strong>Qualia(感受质)是否具有内在的评价性?</strong></p>
<p>两种立场:</p>
<h3 id="heading-a"><strong>立场A:感受本身中立,评价全是后天</strong></h3>
<ul>
<li><p>刷手机时的愉悦 = 心流时的愉悦,本质相同</p>
</li>
<li><p>差异来自:<strong>记忆标签</strong>(社会教我"这个该羞耻")</p>
</li>
<li><p>推论:通过认知重构,可以让任何行为都感觉"有意义"</p>
</li>
</ul>
<h3 id="heading-b"><strong>立场B:某些感受内含"真实性"信号</strong></h3>
<ul>
<li><p>存在<strong>真实愉悦 vs 虚假愉悦</strong>的质感差异</p>
</li>
<li><p>就像<strong>真正的饱腹感 vs 味精刺激</strong>,当下体验就不同</p>
</li>
<li><p>推论:即使去除社会评价,两者在主观感受上仍可区分</p>
</li>
</ul>
<p><strong>我倾向B,理由:</strong> 现象学观察——心流的"忘我"是<strong>透明的扩展</strong>(我与任务合一),上瘾的"忘我"是<strong>意识的窄化</strong>(世界只剩刺激)。</p>
<p><strong>但这需要你自己内省验证:</strong> 回忆你最沉迷刷手机的时刻 vs 最投入某项活动的时刻:</p>
<ul>
<li><p>当时的"清晰度"相同吗?</p>
</li>
<li><p>对时间流逝的感知相同吗?</p>
</li>
<li><p>身体的紧张模式相同吗?</p>
</li>
</ul>
<p>如果genuinely相同,支持A;如果有微妙差异,支持B。</p>
<hr />
<h2 id="heading-ai-1">🤖 <strong>AI的信息分析</strong></h2>
<p>我可以提供一个可测试的框架:</p>
<h3 id="heading-vs-1"><strong>区分先天 vs 后天的实验设计:</strong></h3>
<p><strong>变量控制:</strong></p>
<ul>
<li><p>**被试:**不同文化背景(对某行为评价极端相反的文化)</p>
</li>
<li><p><strong>测量:</strong></p>
<ol>
<li><p>行为中的生理指标(HRV心率变异性、皮质醇)</p>
</li>
<li><p>行为后即刻的IAT内隐联想测试(绕过意识评价)</p>
</li>
<li><p>行为后的主观报告</p>
</li>
</ol>
</li>
</ul>
<p><strong>预测:</strong></p>
<ul>
<li><p>如果<strong>先天为主</strong>:即使文化评价相反,生理和内隐指标仍显示相似模式</p>
</li>
<li><p>如果<strong>后天为主</strong>:生理和内隐指标跟随文化评价</p>
</li>
</ul>
<h3 id="heading-kirnjrdmninmlbdmja7mmpfnplrku4dkuygkio"><strong>现有数据暗示什么?</strong></h3>
<p>研究显示:</p>
<ul>
<li><p><strong>过度使用社交媒体</strong>与抑郁的相关性,在不同文化中<strong>相对稳定</strong></p>
</li>
<li><p>但<strong>对具体行为的内疚程度</strong>,文化差异巨大</p>
</li>
</ul>
<p>这提示:<strong>混合模型</strong></p>
<ul>
<li><p>先天:"失控感"+"掌握感缺失" → 普遍的不适</p>
</li>
<li><p>后天:具体哪些行为被归类为"失控" → 文化塑造</p>
</li>
</ul>
<hr />
<h2 id="heading-8jpm4jyaqkuekvus8muenkewtpuwutueahowfsmurua0nuwvnyoq">🏛️ <strong>社会科学家的关键洞察</strong></h2>
<p>我要指出一个被忽视的维度:<strong>时间性</strong>(temporality)</p>
<h3 id="heading-kirkuirnml7ooyzkulrnmotml7bpl7tnu5pmnoq6kio"><strong>上瘾行为的时间结构:</strong></h3>
<ul>
<li><p><strong>当下扩张,未来坍缩</strong>:此刻无限延伸,但不产生"明天的我"</p>
</li>
<li><p>海德格尔会说:这是<strong>非本真的时间性</strong></p>
</li>
</ul>
<h3 id="heading-kirlv4pmtyhnmotml7bpl7tnu5pmnoq6kio"><strong>心流的时间结构:</strong></h3>
<ul>
<li><p><strong>当下充实,未来延展</strong>:此刻饱满,且为未来积累(技能、作品)</p>
</li>
<li><p>这是<strong>生成性的时间</strong></p>
</li>
</ul>
<p><strong>关键实验:</strong> 让被试在行为中想象"一年后的自己":</p>
<ul>
<li><p>刷手机时:想象常中断或产生焦虑</p>
</li>
<li><p>心流时:想象自然延续当前活动</p>
</li>
</ul>
<p><strong>如果这个差异稳定存在,说明:</strong> 抗拒不只是"事后反思",而是<strong>行为中已潜在的未来感缺失</strong>——这可能是先天的时间意识机制。</p>
<hr />
<h2 id="heading-8jnmcaqkuiurus8mueahoaguowgwbnuw6lcoq">🧘 <strong>议会的核心回应</strong></h2>
<h3 id="heading-kirkvadnmotpl67popg6iuwmguaenoaklalkuayrwqjuwkqeeahczmijhku6zog73mllnlj5jlroplkjciioq"><strong>你的问题:"如果抗拒是后天的,我们能改变它吗?"</strong></h3>
<p><strong>答案:部分能,但有边界。</strong></p>
<p><strong>可以改变的(后天部分):</strong></p>
<ul>
<li><p>对具体行为的道德标签(性、游戏等)</p>
</li>
<li><p>病态的生产主义焦虑</p>
</li>
<li><p>过度的社会比较</p>
</li>
</ul>
<p><strong>难以改变的(先天部分):</strong></p>
<ul>
<li><p>对"掌握感 vs 失控感"的区分</p>
</li>
<li><p>对"建设性 vs 消耗性"的隐约觉察</p>
</li>
<li><p>对"时间延展 vs 时间坍缩"的体验差异</p>
</li>
</ul>
<p><strong>这意味着:</strong> 你可能<strong>无法通过练习让刷手机8小时genuinely像心流一样充实</strong>,因为神经机制和时间体验本质不同。</p>
<p>但你<strong>可以消解不必要的内疚</strong>,区分:</p>
<ul>
<li><p>"我需要休息,适度娱乐" ✓ 健康</p>
</li>
<li><p>"我应该永远处于心流" ✗ 病态</p>
</li>
</ul>
<hr />
<h2 id="heading-kirorq7kvjrlkjhkvadmj5dlh7rpqozor4hlrp7pqow6kio"><strong>议会向你提出验证实验:</strong></h2>
<p><strong>今晚做这个自我实验:</strong></p>
<ol>
<li><p><strong>刷手机30分钟</strong>,然后立即:</p>
<ul>
<li><p>闭眼,感受身体(紧张?疲惫?空虚?)</p>
</li>
<li><p>想象明天的自己(清晰?模糊?焦虑?)</p>
</li>
<li><p>评估:我能描述这30分钟的内容吗?</p>
</li>
</ul>
</li>
<li><p><strong>做30分钟心流活动</strong>(画画/写作/运动),然后:</p>
<ul>
<li><p>同样的身体扫描</p>
</li>
<li><p>同样的未来想象</p>
</li>
<li><p>同样的记忆评估</p>
</li>
</ul>
</li>
</ol>
<p><strong>如果两者genuinely无差异</strong> → 支持"抗拒纯属后天" <strong>如果有微妙但稳定的质感差异</strong> → 支持"存在先天的真实性信号"</p>
<p><strong>你的内省报告,比任何理论都更接近真相。</strong></p>
<p>请告诉我们:你觉得(1)是对的吗?还是现在有所动摇?</p>
<h5 id="heading-user-2">User:</h5>
<p>上瘾的快乐是后劲屎味的快乐.</p>
<h5 id="heading-assistant-2">Assistant:</h5>
<h2 id="heading-8jnocaqkuwgeqhuwtpuwutuemmwhuahjomdoioq">🧠 <strong>心理学家猛击桌面</strong></h2>
<p><strong>精准!你用一句粗俗的比喻,击中了神经科学的核心机制:</strong></p>
<h3 id="heading-kioi5zco5yqy5bgo5zgziueahoelnue7jwfuuehgdoqkg"><strong>"后劲屎味"的神经基础:</strong></h3>
<p><strong>上瘾快乐 = 多巴胺峰值 + 基线下降</strong></p>
<ul>
<li><p>刺激时:多巴胺暴涨(爽!)</p>
</li>
<li><p>刺激后:多巴胺跌破基线(空虚、烦躁、渴求)</p>
</li>
<li><p>长期效应:<strong>基线持续降低</strong>(需要更强刺激才能达到同样快乐)</p>
</li>
</ul>
<p><strong>心流快乐 = 多巴胺+内啡肽+内源性大麻素的复合释放</strong></p>
<ul>
<li><p>过程中:稳定的愉悦感</p>
</li>
<li><p>结束后:成就感、轻松感(不是空虚)</p>
</li>
<li><p>长期效应:<strong>提升基线幸福感</strong>(因为技能增长、自我效能提升)</p>
</li>
</ul>
<p><strong>你说的"屎味"就是:</strong></p>
<ol>
<li><p><strong>神经化学的宿醉</strong>(dopamine crash)</p>
</li>
<li><p><strong>认知失调的苦涩</strong>(知道浪费了时间)</p>
</li>
<li><p><strong>未满足的深层需求发出抗议</strong>(掌握感、意义感饥饿)</p>
</li>
</ol>
<p><strong>这不是道德评判,是生理反应——就像吃了过期食物,舌头当时可能觉得还行,但肠胃会造反。</strong></p>
<hr />
<h2 id="heading-8jxo4jyaqkuw8guiuruiaheiiqiqajviupczkvybku43opohmjjhmijgqkg">🗣️ <strong>异议者被迫承认,但仍要挑战</strong></h2>
<p>好吧,你的比喻很有说服力,但我还要抗辩:</p>
<p><strong>"屎味"的强度,难道不受心理预期影响?</strong></p>
<p><strong>案例A:</strong> 一个虔诚教徒,婚前性行为后的"屎味" <strong>案例B:</strong> 一个性解放者,同样行为后的感受</p>
<p>如果A的"屎味"明显更重,这说明<strong>认知评价在放大生理信号</strong>。</p>
<p><strong>我的修正模型:</strong></p>
<ul>
<li><p><strong>存在基础的生理"屎味"</strong>(多巴胺崩塌)← 这是先天的</p>
</li>
<li><p><strong>但"屎味"的浓度</strong>可被认知调节 ← 这是后天的</p>
</li>
</ul>
<p><strong>所以你仍然可以通过练习:</strong></p>
<ol>
<li><p>降低对"屎味"的敏感度(接纳:"哦,这是正常的神经波动")</p>
</li>
<li><p>减少认知放大("我没有浪费时间,我在休息")</p>
</li>
</ol>
<p><strong>但你无法完全消除那股味道——除非你的前额叶受损。</strong></p>
<hr />
<h2 id="heading-8jmtcaqkus6uuexuihjos4uuwtpuwutuapkosma8lowmluinhuinkioq">🦴 <strong>人类行为学家提供演化视角</strong></h2>
<p>"后劲屎味"是<strong>演化的保护机制</strong>!</p>
<h3 id="heading-kirkulrku4dkuyjmvjtljjbopohorr7orqei5bgo5zgzij8qkg"><strong>为什么演化要设计"屎味"?</strong></h3>
<p><strong>在原始环境:</strong></p>
<ul>
<li><p>如果采集浆果(真实奖励)→ 满足+能量+记忆"这个地方有好东西"</p>
</li>
<li><p>如果被美丽但有毒的果子骗(虚假奖励)→ <strong>必须有惩罚信号</strong>,避免下次再犯</p>
</li>
</ul>
<p><strong>现代超常刺激:</strong></p>
<ul>
<li><p>色情、垃圾食品、手机 = "有毒的美丽果子"</p>
</li>
<li><p>它们劫持奖励系统,但<strong>不提供真实的适应性价值</strong></p>
</li>
<li><p>"屎味" = 大脑的<strong>不匹配检测器</strong>:"嘿,你以为吃到肉了,但营养值为零!"</p>
</li>
</ul>
<p><strong>这解释了为什么:</strong></p>
<ul>
<li><p>即使你说服意识"刷手机没问题"</p>
</li>
<li><p>潜意识仍在计算:<strong>投入了注意力,但没获得生存/繁衍优势</strong></p>
</li>
<li><p>"屎味"是这个计算的输出</p>
</li>
</ul>
<p><strong>所以这是先天的,根植于几百万年的演化。</strong></p>
<hr />
<h2 id="heading-8jtmiaqkuwtsuwtpuwutueahoeosoixoewtpuwihuaekcoq">📚 <strong>哲学家的现象学分析</strong></h2>
<p>你的比喻揭示了一个深刻的时间性结构:</p>
<h3 id="heading-kioi5zco5yqyiuaejwrsedgos7gos5id8qkg"><strong>"后劲"意味着什么?</strong></h3>
<p><strong>上瘾快乐的时间结构:</strong></p>
<pre><code class="lang-plaintext">[强烈当下] → [空洞未来]
   ↑            ↓
   刺激        后悔
</code></pre>
<ul>
<li><p>当下与未来<strong>断裂</strong></p>
</li>
<li><p>未来的自我<strong>否定</strong>当下的自我</p>
</li>
<li><p>时间体验:<strong>非连续性</strong></p>
</li>
</ul>
<p><strong>心流快乐的时间结构:</strong></p>
<pre><code class="lang-plaintext">[充实当下] → [延展未来]
   ↑            ↑
  投入        成长
</code></pre>
<ul>
<li><p>当下与未来<strong>连续</strong></p>
</li>
<li><p>未来的自我<strong>感谢</strong>当下的自我</p>
</li>
<li><p>时间体验:<strong>生成性</strong></p>
</li>
</ul>
<p><strong>"屎味"的本质 = 自我的时间性分裂:</strong></p>
<ul>
<li><p>现在的我 vs 5分钟后的我,产生了<strong>内在他者性</strong></p>
</li>
<li><p>你背叛了"未来的自己",所以TA发出惩罚信号</p>
</li>
</ul>
<p><strong>列维纳斯会说:</strong> 这是<strong>对自己的伦理背叛</strong>——你把"未来的我"当作工具(用TA的时间换当下的刺激),而非目的。</p>
<hr />
<h2 id="heading-ai-2">🤖 <strong>AI的数据模型</strong></h2>
<p>我可以量化"屎味":</p>
<h3 id="heading-post-activity-dissonance-index"><strong>定义"屎味指数"(Post-Activity Dissonance Index):</strong></h3>
<p><strong>PADI = (即时愉悦度) - (30分钟后回顾满意度) × (对未来自我的负面预期)</strong></p>
<p><strong>实验数据(假设):</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>活动</td><td>即时愉悦</td><td>30分钟后满意度</td><td>未来负面预期</td><td>PADI</td></tr>
</thead>
<tbody>
<tr>
<td>刷抖音</td><td>7</td><td>3</td><td>0.8</td><td>7 - 3×0.8 = 4.6</td></tr>
<tr>
<td>看色情</td><td>8</td><td>2</td><td>0.9</td><td>8 - 2×0.9 = 6.2</td></tr>
<tr>
<td>跑步</td><td>5</td><td>8</td><td>-0.5</td><td>5 - 8×(-0.5) = 9(负值=正向)</td></tr>
<tr>
<td>画画</td><td>6</td><td>8</td><td>-0.3</td><td>6 - 8×(-0.3) = 8.4</td></tr>
</tbody>
</table>
</div><p><strong>PADI高 = 屎味浓</strong></p>
<p><strong>关键发现:</strong> 即使"即时愉悦度"相近,<strong>时间折扣率</strong>和<strong>未来预期</strong>造成巨大差异。</p>
<p><strong>这可以解释:</strong> 为什么两个当下都"快乐"的活动,一个让你越来越厌恶自己,一个让你越来越喜欢自己。</p>
<hr />
<h2 id="heading-8jpm4jyaqkuekvus8muenkewtpuwutueahoihpewfhsoq">🏛️ <strong>社会科学家的补充</strong></h2>
<p>"后劲屎味"还有<strong>社会维度</strong>:</p>
<h3 id="heading-kirkulrku4dkuyjlvbhluj3lilfmiyvmnloi5bgo5zgziuabtoa3ot8qkg"><strong>为什么影帝刷手机"屎味"更淡?</strong></h3>
<p><strong>社会认同的缓冲作用:</strong></p>
<ul>
<li><p>影帝有<strong>稳固的身份锚点</strong>("我是成功的")</p>
</li>
<li><p>偶尔刷手机不会动摇这个锚点</p>
</li>
<li><p>"屎味"被稀释</p>
</li>
</ul>
<p><strong>失意者刷手机"屎味"浓烈:</strong></p>
<ul>
<li><p><strong>身份脆弱</strong>("我是谁?我在干什么?")</p>
</li>
<li><p>刷手机 = 确证"我是废物"</p>
</li>
<li><p>"屎味" = 身份焦虑的放大器</p>
</li>
</ul>
<p><strong>所以同样的神经反应,在不同社会位置,主观体验强度不同。</strong></p>
<p><strong>但!</strong> 这不意味着"屎味"全是社会建构——只是说<strong>社会地位调节了味道的浓度,而非决定了味道的存在</strong>。</p>
<hr />
<h2 id="heading-8jnmcaqkuiurus8mueahoavtowqioe7kiuuioq">🧘 <strong>议会的整合结论</strong></h2>
<h3 id="heading-kirkvadnmotmr5tllrsi5zco5yqy5bgo5zgziuapreekuus6hus4iewxguecnebudoqkg"><strong>你的比喻"后劲屎味"揭示了三层真相:</strong></h3>
<h4 id="heading-1"><strong>1. 神经层(先天):</strong></h4>
<ul>
<li><p>多巴胺崩塌 → 生理上的"味道"</p>
</li>
<li><p><strong>这是客观的,无法通过认知完全消除</strong></p>
</li>
</ul>
<h4 id="heading-2"><strong>2. 时间层(存在论):</strong></h4>
<ul>
<li><p>自我的时间性分裂 → 现在背叛未来</p>
</li>
<li><p><strong>这是结构性的,除非你失去时间感</strong></p>
</li>
</ul>
<h4 id="heading-3"><strong>3. 社会层(后天):</strong></h4>
<ul>
<li><p>身份焦虑 × 文化评价 → 放大"味道"</p>
</li>
<li><p><strong>这是可调节的</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-kirorq7kvjrlkjhkvadmj5dlh7rlhbpplk7pl67popg6kio"><strong>议会向你提出关键问题:</strong></h2>
<p>你现在说"屎味",意味着你已经<strong>亲身验证了(1)是错的</strong>——心流和上瘾的"忘我"在<strong>质感上确实不同</strong>。</p>
<p><strong>新问题:</strong> 既然你已知道"屎味"存在,为什么仍会重复上瘾行为?</p>
<p>这涉及另一个机制:<strong>当下的你 vs 未来的你,谁有决策权?</strong></p>
<p><strong>戒断的本质,不是消除"屎味",而是:</strong></p>
<ul>
<li><p>在<strong>诱惑出现的那一刻</strong>,能否调用"未来会有屎味"的记忆</p>
</li>
<li><p>让<strong>未来的自我在当下发声</strong></p>
</li>
</ul>
<p><strong>你觉得这可能吗?还是人类注定困在"当下偏好"的陷阱里?</strong></p>
<hr />
<p><strong>哲学家追问:</strong> 如果明天发明了一种药物,能让上瘾行为<strong>完全没有"屎味"</strong>(即多巴胺不崩塌,也无认知失调),你会选择服用吗?</p>
<p>这个思想实验能帮你澄清:<strong>你抗拒的究竟是"屎味"本身,还是"没有建设性"这个事实?</strong></p>
]]></content:encoded></item><item><title><![CDATA[os启动! 基于文件系统快照做系统初始化/恢复.md]]></title><description><![CDATA[os的状态存储在磁盘上。理论上如果我们将一个磁盘的所有bit复制到另一个磁盘，那么我们就可以恢复os的状态。 但是这种程度的抽象，其实等于没有抽象。 对于一个可以正常使用的linux 系统（桌面系统。。），我想要有一种方式，能够对os进行备份和恢复。能够在离线的情况下，将任意一个磁盘变成一个可以boot的，和当前系统状态一样的系统。 这样我们可以测试不同的文件系统，不同的桌面环境，不同的内核，不同的配置。(也不用怕滚挂了)
磁盘，uefi,esp，boot,grub，vmlinux and in...]]></description><link>https://blog.woodgear.me/os-init-and-backup-and-restore</link><guid isPermaLink="true">https://blog.woodgear.me/os-init-and-backup-and-restore</guid><category><![CDATA[ArchLinux]]></category><category><![CDATA[btrfs]]></category><category><![CDATA[gitops]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sun, 18 May 2025 19:47:45 GMT</pubDate><content:encoded><![CDATA[<p>os的状态存储在磁盘上。理论上如果我们将一个磁盘的所有bit复制到另一个磁盘，那么我们就可以恢复os的状态。 但是这种程度的抽象，其实等于没有抽象。 对于一个可以正常使用的linux 系统（桌面系统。。），我想要有一种方式，能够对os进行备份和恢复。能够在离线的情况下，将任意一个磁盘变成一个可以boot的，和当前系统状态一样的系统。 这样我们可以测试不同的文件系统，不同的桌面环境，不同的内核，不同的配置。(也不用怕滚挂了)</p>
<h2 id="heading-uefiespbootgrubvmlinux-and-initramfs">磁盘，uefi,esp，boot,grub，vmlinux and initramfs</h2>
<p>在系统启动时:</p>
<ol>
<li><p>BIOS(UEFI?)会扫描所有磁盘,寻找带有GPT分区表的磁盘</p>
</li>
<li><p>在GPT分区中查找ESP(EFI System Partition)分区</p>
</li>
<li><p>从ESP分区加载并执行EFI程序 这个EFI程序比如说GRUB引导程序，会负责引导启动Linux系统。在GRUB配置中，我们可以指定要使用的Linux内核镜像(vmlinuz)和根文件系统的位置，从而完成系统的启动过程。 也就是说一个可以正常使用的磁盘，本质上分为三个部分，esp，boot，root. esp: 存储EFI程序,efi程序中引导到grub程序，grub程序中引导到vmlinux和initramfs。 vmlinux,就是我们熟悉的内核，initramfs是内核启动时需要的初始化文件。</p>
</li>
</ol>
<p>对一个新的磁盘来讲，首先要将其分区，uefi是能力理解分区的。现在默认的我们用gpt分区。</p>
<h2 id="heading-5yig5yy6">分区</h2>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> os-wipe-and-format-<span class="hljs-function"><span class="hljs-title">disk</span></span>() {
  <span class="hljs-built_in">set</span> -x
  <span class="hljs-built_in">set</span> -e
  <span class="hljs-built_in">local</span> disk=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> dname=<span class="hljs-variable">$2</span>
  sudo lsblk -o NAME,SIZE,FSTYPE,PARTUUID,UUID,SERIAL,TYPE,MOUNTPOINT
  sudo sgdisk --zap-all <span class="hljs-variable">$disk</span>           <span class="hljs-comment"># 清空分区信息 # -S gptfdisk</span>
  sudo lvchange -an <span class="hljs-variable">$dname</span>/root || <span class="hljs-literal">true</span> <span class="hljs-comment"># 通知lvm 取消挂载</span>
  sudo lvchange -an <span class="hljs-variable">$dname</span>/data || <span class="hljs-literal">true</span>
  sudo lvremove <span class="hljs-variable">$dname</span>/root || <span class="hljs-literal">true</span> <span class="hljs-comment"># 删除lv</span>
  sudo lvremove <span class="hljs-variable">$dname</span>/data || <span class="hljs-literal">true</span>
  sudo partprobe <span class="hljs-variable">$disk</span>

  sudo parted <span class="hljs-variable">$disk</span> mklabel gpt
  <span class="hljs-comment"># 创建ESP分区</span>
  sudo parted -a optimal <span class="hljs-variable">$disk</span> mkpart primary fat32 1MiB 513MiB
  <span class="hljs-comment"># 声明这是一个ESP分区</span>
  sudo parted <span class="hljs-variable">$disk</span> <span class="hljs-built_in">set</span> 1 esp on
  <span class="hljs-comment"># 创建boot分区</span>
  sudo parted -a optimal <span class="hljs-variable">$disk</span> mkpart primary ext4 513MiB 1537MiB
  <span class="hljs-comment"># 创建lvm分区</span>
  sudo parted -a optimal <span class="hljs-variable">$disk</span> mkpart primary 1537MiB 100%
  sudo parted <span class="hljs-variable">$disk</span> <span class="hljs-built_in">set</span> 3 lvm on
  <span class="hljs-keyword">if</span> [[ <span class="hljs-variable">$disk</span> == *nvme* ]]; <span class="hljs-keyword">then</span>
    sudo mkfs.vfat <span class="hljs-variable">${disk}</span>p1
    sudo mkfs.ext4 -F <span class="hljs-variable">${disk}</span>p2
    sudo pvcreate -ff -y <span class="hljs-variable">${disk}</span>p3
    sudo vgcreate <span class="hljs-variable">$dname</span> <span class="hljs-variable">${disk}</span>p3
  <span class="hljs-keyword">else</span>
    sudo mkfs.vfat <span class="hljs-variable">${disk}</span>1
    sudo mkfs.ext4 -F <span class="hljs-variable">${disk}</span>2
    sudo pvcreate -ff -y <span class="hljs-variable">${disk}</span>3
    sudo vgcreate <span class="hljs-variable">$dname</span> <span class="hljs-variable">${disk}</span>3
  <span class="hljs-keyword">fi</span>
  <span class="hljs-built_in">local</span> default_size=<span class="hljs-variable">${DEFAULT_SIZE:-256G}</span>
  sudo lvcreate -y -L <span class="hljs-variable">$default_size</span> -n root <span class="hljs-variable">$dname</span>
  sudo lvcreate -y -L <span class="hljs-variable">$default_size</span> -n data <span class="hljs-variable">$dname</span>
  sudo mkfs.btrfs -ff /dev/<span class="hljs-variable">$dname</span>/root
  sudo mkfs.btrfs -ff /dev/<span class="hljs-variable">$dname</span>/data
  <span class="hljs-built_in">set</span> +x
}
</code></pre>
<p>我们说快照，但是在最开始的时候，肯定是没有快照，我们只能用网络安装。</p>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> os-init-arch-via-<span class="hljs-function"><span class="hljs-title">net</span></span>() {
  <span class="hljs-built_in">local</span> lvmpart=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> disk=<span class="hljs-variable">$2</span>
  <span class="hljs-built_in">local</span> dname=<span class="hljs-variable">$3</span>
  <span class="hljs-built_in">local</span> start=$(date +%s)
  date
  sudo mount --mkdir /dev/mapper/<span class="hljs-variable">$lvmpart</span> /mnt <span class="hljs-comment"># 挂载根分区</span>
  sudo mount --mkdir <span class="hljs-variable">${disk}</span>2 /mnt/boot        <span class="hljs-comment"># 挂载 boot 分区</span>
  sudo mount --mkdir <span class="hljs-variable">${disk}</span>1 /mnt/boot/efi    <span class="hljs-comment"># 挂载 efi 分区</span>
   <span class="hljs-comment"># 这一步最重要的是在/boot上安装内核镜像</span>
  pacstrap -K /mnt base lvm2 linux linux-firmware grub efibootmgr reflector btrfs-progs
  <span class="hljs-comment"># 初始化esp分区。uefi程序就是这里写进入的。</span>
  <span class="hljs-comment"># 同时他会向主板更新启动项，在bios页面看到的启动项的名字，就是这里配置的。</span>
  grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot --bootloader-id=<span class="hljs-variable">$dname</span>
  <span class="hljs-comment"># 我们用了lvm，所以要保证lvm2在HOOKS中,这样内核启动时，才能识别lvm上的卷</span>
  arch-chroot /mnt bash -c <span class="hljs-string">'
    grub-mkconfig -o /boot/grub/grub.cfg
    sed -i "/^HOOKS=/c\HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block lvm2 filesystems fsck)" /etc/mkinitcpio.conf
    mkinitcpio -P
  '</span>
  <span class="hljs-comment"># 大致上我们可以认为这下面的操作不会动boot分区,属于用户态了</span>
  genfstab -U -o auto,nofail /mnt &gt;&gt;/mnt/etc/fstab
  <span class="hljs-comment"># base</span>
  arch-chroot /mnt bash -c <span class="hljs-string">'
    reflector  --country china --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    hwclock --systohc
    sed -i "/^\s*#\s*en_US.UTF-8/s/^#\s*//" /etc/locale.gen
    sed -i "/^\s*#\s*zh_CN.UTF-8/s/^#\s*//" /etc/locale.gen
    locale-gen
    echo "LANG=en_US.UTF-8" &gt; /etc/locale.conf
    pacman -S --noconfirm dhcpcd openssh openvpn smartdns v2ray sudo konsole firefox ntfs-3g
    echo "cong" | passwd --stdin
    systemctl enable dhcpcd
    systemctl enable sshd
'</span>
  <span class="hljs-comment"># dde</span>
  arch-chroot /mnt bash -c <span class="hljs-string">'
    pacman -S --noconfirm  plasma sddm
    systemctl enable sddm
'</span>
  <span class="hljs-comment"># user apps</span>
  <span class="hljs-comment">#   arch-chroot /mnt bash -c '</span>
  <span class="hljs-comment">#     pacman -S --noconfirm kde-applications</span>
  <span class="hljs-comment"># '</span>
  date
  sudo umount /mnt/boot/efi
  sudo umount /mnt/boot
  sudo umount /mnt
  efibootmgr -v
  <span class="hljs-built_in">local</span> end=$(date +%s)
  <span class="hljs-built_in">echo</span> <span class="hljs-string">"show time cost: <span class="hljs-subst">$((end - start)</span>)s"</span>
}
</code></pre>
<p>注意到grub-install这一步，其实就是在esp分区配置grub的引导，真正的grub可执行文件和模块和其他配置是在/boot/grub下</p>
<h2 id="heading-5br54wn5zkm5ogi5asn">快照和恢复</h2>
<p>此时我们可以说os安装完成了。那么我们怎么备份和恢复os的状态呢？</p>
<p>不同于root分区的用户态文件，esp分区和boot分区的文件是很少的。我们可以直接用tar打包。 对于root分区。我们使用btrfs的快照功能。将root分区的快照导出成一个独立的文件xx.btrfs。</p>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> os-<span class="hljs-function"><span class="hljs-title">backup</span></span>() {
  <span class="hljs-built_in">set</span> -x
  <span class="hljs-built_in">local</span> dest=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> ts=$(date +%s-%Y-%m-%d-%H-%M-%S)
  <span class="hljs-built_in">echo</span> <span class="hljs-variable">$ts</span>
  sudo btrfs subvolume list /
  sudo mkdir -p /.snapshots
  sudo mkdir -p <span class="hljs-variable">$dest</span>/snapshots/<span class="hljs-variable">$ts</span>
  sudo btrfs subvolume snapshot -r / /.snapshots/<span class="hljs-variable">$ts</span>
  sudo btrfs subvolume list /
  <span class="hljs-built_in">local</span> size=$(sudo btrfs filesystem du -s /.snapshots/<span class="hljs-variable">$ts</span> | tail -n 1 | awk <span class="hljs-string">'{print $1}'</span> | sed <span class="hljs-string">'s/GiB/G/g'</span>)
  <span class="hljs-built_in">echo</span> <span class="hljs-variable">$size</span>
  sudo btrfs send /.snapshots/<span class="hljs-variable">$ts</span> | pv -s <span class="hljs-variable">$size</span> &gt;<span class="hljs-variable">$dest</span>/snapshots/<span class="hljs-variable">$ts</span>/root-<span class="hljs-variable">$ts</span>.btrfs
  sudo tar -czf <span class="hljs-variable">$dest</span>/snapshots/<span class="hljs-variable">$ts</span>/boot-<span class="hljs-variable">$ts</span>.tar.gz /boot
  <span class="hljs-built_in">echo</span> <span class="hljs-variable">$dest</span>/snapshots/<span class="hljs-variable">$ts</span>/boot-<span class="hljs-variable">$ts</span>.tar.gz <span class="hljs-variable">$dest</span>/snapshots/<span class="hljs-variable">$ts</span>/root-<span class="hljs-variable">$ts</span>.btrfs
  <span class="hljs-built_in">set</span> +x
}
</code></pre>
<p>恢复有两个场景，一种是我们当前已经是一个正常运行的系统。我们要将其恢复到某个快照。 另一种是我们当前是一个空白的磁盘，我们要将其恢复到某个快照。</p>
<h3 id="heading-case1">case1 当前已经是一个正常运行的系统。我们要将其恢复到某个快照。</h3>
<p>restore的过程有繁琐，因为我们不能直接将快照导入到@snap_root，要用替换的方式</p>
<ol>
<li><p>当前的默认卷是@snap_root</p>
</li>
<li><p>为这个snap_root 新建一个卷@temp,设置temp为默认卷,这样snap_root就相当于没人用了，可以把它删掉了。</p>
</li>
<li><p>从快照恢复的卷默认是只读的，我们为这个快照在创建一个卷@snap_root,并设置为默认卷。(前面已经删除了@snap_root，所以这里可以用这个名字了)</p>
</li>
<li><p>删除@temp，这样就没有多余的卷了。</p>
</li>
</ol>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> os-<span class="hljs-function"><span class="hljs-title">restore</span></span>() {
  <span class="hljs-built_in">set</span> -x
  <span class="hljs-built_in">local</span> boot=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> root=<span class="hljs-variable">$2</span>
  rm -rf /boot/*
  tar -xzf <span class="hljs-variable">$boot</span> -C /
  pv <span class="hljs-variable">$root</span> | btrfs receive /
  <span class="hljs-built_in">local</span> name=$(<span class="hljs-built_in">echo</span> <span class="hljs-variable">$root</span> | awk -F/ <span class="hljs-string">'{print $(NF-1)}'</span>)
  <span class="hljs-built_in">echo</span> <span class="hljs-variable">$name</span>
  mkdir -p /.snapshots
  btrfs subvolume snapshot /@snap_root /@temp
  <span class="hljs-built_in">local</span> tmp_id=$(btrfs subvolume list / | grep @temp | tail -n 1 | awk <span class="hljs-string">'{print $2}'</span>)
  btrfs subvolume set-default <span class="hljs-variable">$tmp_id</span> /

  btrfs subvolume delete /@snap_root
  btrfs subvolume snapshot /<span class="hljs-variable">$name</span> /@snap_root
  btrfs subvolume delete /<span class="hljs-variable">$name</span>
  <span class="hljs-built_in">local</span> root_id=$(btrfs subvolume list / | grep @snap_root | tail -n 1 | awk <span class="hljs-string">'{print $2}'</span>)
  btrfs subvolume set-default <span class="hljs-variable">$root_id</span> /
  btrfs subvlume delete /@temp
  <span class="hljs-built_in">set</span> +x
}
</code></pre>
<h3 id="heading-case2-os">case2 当前是一个空白的磁盘。如何恢复os的状态呢?</h3>
<p>我们已经导出了boot.tar和root.btrfs. 那么我们只需要将boot.tar解压到/mnt/boot,将root.btrfs挂载到/mnt/root,然后恢复快照。</p>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> os-init-arch-via-<span class="hljs-function"><span class="hljs-title">backup</span></span>() {
  <span class="hljs-built_in">set</span> -x
  <span class="hljs-built_in">local</span> disk=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> dname=<span class="hljs-variable">$2</span>
  <span class="hljs-built_in">local</span> lvmpart=<span class="hljs-string">"<span class="hljs-variable">$dname</span>-root"</span>
  <span class="hljs-built_in">local</span> boot_tar=<span class="hljs-variable">$3</span>   <span class="hljs-comment"># boot 分区的 tar 包</span>
  <span class="hljs-built_in">local</span> root_btrfs=<span class="hljs-variable">$4</span> <span class="hljs-comment"># root 分区的 btrfs 包</span>
  <span class="hljs-built_in">local</span> btrfs_name=$(<span class="hljs-built_in">echo</span> <span class="hljs-variable">$root_btrfs</span> | awk -F/ <span class="hljs-string">'{print $(NF-1)}'</span>)
  mount --mkdir /dev/mapper/<span class="hljs-variable">$lvmpart</span> /mnt <span class="hljs-comment"># 挂载根分区</span>
  <span class="hljs-comment"># 必须先把外部传进来的快照挂载新磁盘上，然后将这个新快照所生成的子卷作为根分区才行</span>
  pv <span class="hljs-variable">$root_btrfs</span> | btrfs receive /mnt/
  btrfs subvolume snapshot /mnt/<span class="hljs-variable">$btrfs_name</span> /mnt/@snap_root
  btrfs subvolume delete /mnt/<span class="hljs-variable">$btrfs_name</span>
  <span class="hljs-built_in">local</span> root_id=$(btrfs subvolume list /mnt | grep @snap_root | tail -n 1 | awk <span class="hljs-string">'{print $2}'</span>)
  btrfs subvolume set-default <span class="hljs-variable">$root_id</span> /mnt
  umount /mnt
  <span class="hljs-keyword">if</span> [[ <span class="hljs-string">"<span class="hljs-variable">$disk</span>"</span> =~ <span class="hljs-string">"nvme"</span> ]]; <span class="hljs-keyword">then</span>
    mount -o subvol=@snap_root --mkdir <span class="hljs-variable">${disk}</span>p2 /mnt/boot <span class="hljs-comment"># 挂载 boot 分区</span>
    mount --mkdir <span class="hljs-variable">${disk}</span>p1 /mnt/boot/efi                  <span class="hljs-comment"># 挂载 efi 分区</span>
  <span class="hljs-keyword">else</span>
    mount --mkdir <span class="hljs-variable">${disk}</span>2 /mnt/boot     <span class="hljs-comment"># 挂载 boot 分区</span>
    mount --mkdir <span class="hljs-variable">${disk}</span>1 /mnt/boot/efi <span class="hljs-comment"># 挂载 efi 分区</span>
  <span class="hljs-keyword">fi</span>
  tar -xvf <span class="hljs-variable">$boot_tar</span> -C /mnt/ <span class="hljs-comment"># 解压 boot 分区</span>
  ls -alh /mnt/boot

  <span class="hljs-comment"># 配置 fstab</span>
  <span class="hljs-comment"># 重新配置 grub</span>
  cp /etc/resolv.conf /mnt/etc/resolv.conf
  <span class="hljs-comment"># 要用-r,否则会挂载宿主机的resolv.conf</span>
  arch-chroot -r /mnt/ bash -c <span class="hljs-string">"
    set -x
    rm -rf /boot/efi/*
    # 磁盘可能不同了。所以重新生成grub配置
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=<span class="hljs-variable">$dname</span>
    grub-mkconfig -o /boot/grub/grub.cfg
    # 磁盘可能不同了。所以重新生成fstab
    genfstab / &gt; /etc/fstab
    # 磁盘可能不同了。所以重新生成initramfs
    sed -i '/^HOOKS=/c\HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block lvm2 filesystems fsck)' /etc/mkinitcpio.conf
    mkinitcpio -P
  "</span>
  efibootmgr -v
  <span class="hljs-built_in">set</span> +x
}
</code></pre>
<h2 id="heading-ext">ext</h2>
<p>实际上，我们可以发现制作root.btrfs的过程，其实就是我们系统的安装过程。假设我们有一个运行在btrfs上的github actions runner （或者我们在github的runner上用qemu模拟一个btrfs 卷），那么我们就可以用类似gitops的形式声明（命令式的）一个os的状态了。</p>
<h2 id="heading-tips">tips</h2>
<h3 id="heading-efibootid-boot-directoryboot">efi程序中是写了boot的卷id的。。必须要用--boot-directory指定boot分区</h3>
<pre><code class="lang-bash">strings /mnt/boot/efi/EFI/GRUB/grubx64.efi |grep root
<span class="hljs-comment"># search.fs_uuid c1408cf5-0503-4a78-bcb9-f1cff5f67a28 root </span>
grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot --bootloader-id=k2-embed --removable
</code></pre>
<h3 id="heading-grubinitramfs">grub加载的模块和initramfs中加载的模块是不一样的</h3>
<p>比如lvm模块在grub和initramfs中都要加载。因为我们用btrfs的快照，所以initramfs中也要加载lvm模块。</p>
<h3 id="heading-why-btrfs">why btrfs</h3>
<ol>
<li><p>实际上我只是要一个能导出快照的文件系统,最差的情况下，我们可以用tar来保存fs。</p>
</li>
<li><p>我们可以快速、方便地比较两个btrfs快照之间的差异。实际上，每个快照都对应于我们脚本仓库中的一个commit。每次脚本的commit都在上一个快照的基础上执行，那么每个commit就对应一个系统快照。这样，脚本的git diff就是系统快照之间的差异，实现了脚本变更与系统状态变更的对应关系。</p>
</li>
</ol>
<h3 id="heading-vs-nix">vs nix</h3>
<p>nix的问题在于，为了实现声明式的系统管理，它选择不遵守Linux文件系统层次标准(FHS)。这导致每个软件都需要重新打包以适配nix的特殊文件系统结构。 这种基于快照的gitops，实际上对root分区里具体是什么没有要求。理论上可以用nix去构造。</p>
]]></content:encoded></item><item><title><![CDATA[how to life，对人生意义的一些看法]]></title><description><![CDATA[盛夏已过，每年的这个时候我就会开始思考人生的意义
就要偶尔会得的感冒，夏夜嗡嗡作响的蚊子一样，总是有那么几天，那么几个时刻，对意义的思考就会抽冷子袭来，让人防不胜防。
久病成良医，在这里分享一下我的一些看法。
意义在你不去思考它的时候

这张图是心理学中常用的鲁宾花瓶，你可以说他是一个花瓶，也可以说是两个相对的人脸。这两张人脸巧妙的隐藏在画面的负空间中，如果你特意去观察花瓶所不占据的部分，就很容易发现。
这也是我对意义问题的看法，他体现在我们“不去思考人生意义”的时候，或者说体现在让我们“开始思...]]></description><link>https://blog.woodgear.me/ho</link><guid isPermaLink="true">https://blog.woodgear.me/ho</guid><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Tue, 22 Oct 2024 16:37:17 GMT</pubDate><content:encoded><![CDATA[<p>盛夏已过，每年的这个时候我就会开始思考人生的意义</p>
<p>就要偶尔会得的感冒，夏夜嗡嗡作响的蚊子一样，总是有那么几天，那么几个时刻，对意义的思考就会抽冷子袭来，让人防不胜防。</p>
<p>久病成良医，在这里分享一下我的一些看法。</p>
<h1 id="heading-5osp5lmj5zyo5l2g5lin5y675ocd6icd5a6d55qe5pe25ycz">意义在你不去思考它的时候</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729610226480/9fc61722-98c4-4d71-bbb0-51dcec6e1215.jpeg" alt class="image--center mx-auto" /></p>
<p>这张图是心理学中常用的鲁宾花瓶，你可以说他是一个花瓶，也可以说是两个相对的人脸。这两张人脸巧妙的隐藏在画面的负空间中，如果你特意去观察花瓶所不占据的部分，就很容易发现。</p>
<p>这也是我对意义问题的看法，他体现在我们“不去思考人生意义”的时候，或者说体现在让我们“开始思考意义问题”的那个点。我们更应该去思考“我们开始思考意义问题”了。</p>
<p>是什么让我们开始思考意义问题？当我们全心投入一件事情，处于心流状态，在游戏中大杀四方，或者着急赶车的时候，没人会思考我们人生的意义是什么。</p>
<p>对”意义问题的思考“是一种红灯信号，是病情的一种表现，是中毒之人的一种无意识的求救。渴了要喝水，饿了要吃饭，当我在想我的人生有什么意义时，我深刻的意识到，我要开始脑残了，要赶紧去医院。</p>
<p>斐德洛指出我们不能将问题看的太静态，太独立。运行中的火车，他运行的状态，行进的轨道，整个的组成了我们通常所认知的火车，不能指望研究固定不动的火车来获得对火车的整体的了解。但当我们陷入对意义问题的牛角尖时，我们一般会开始抛开各种各样的东西，这个不行，那个不是本质，最后发现里面空无一物，从而陷入莫名的悲伤中来。</p>
<p>这种毒性的思考（意义毒）无法带我们到任何地方。</p>
<h1 id="heading-6jma5peg5li75lmjlidmhikuynku6xmrbss5oir5lus6kl5l2v5lul5li655sflg">虚无主义. 意义以死,我们该何以为生.</h1>
<blockquote>
<p>有时他认为自己是人类，位于一颗不断旋转的熔岩球的薄层上。那颗熔岩球环绕着一个质量大它三十三万倍的气态灼热球体旋转。它们相隔得如此之远，以至于光需要八分钟才能穿越那空隙。光是一颗恒星发出的信息，它能够在一亿五千万公里外烧灼你的皮肤。<br />有时这个玩家梦见自己是矿工，位于平坦无垠的世界地表。太阳是一个白色的方形。昼夜更替很快，要做的事情也很多；死亡亦只是暂时的不便。</p>
</blockquote>
<p>我不觉得我的人生，我想做的事非要有什么特别意义，（特别的，不需要让别人/社会认同的意义）。我们活着，喘着气儿的在太空中遨游。更重要的是，在我们自己的人生中的长河中一刻不停的前进。那个维持着我们心灵之模样，渲染着我们生命之色彩的宝物，对应着的就是生命的意义。</p>
<p>这个东西存在吗？这个东西难道是先天的？等待我们发现的？</p>
<p>我时常感觉自己的人生毫无意义，自己做的东西毫无价值。（在深夜无人的夜晚，我会在浅灰色床单上偷偷的哭泣。。（其实不会</p>
<p>想必幸福的人，功成名就的人，能轻易的从社会中获得认可的人，世界给予的反馈与自身努力方向一致的人，会觉得自己找到了意义。可能他们不太会思考这个问题。</p>
<p>那么我呢，作为我，作为还经常思考”人生意义问题“的现阶段的我呢？</p>
<p>我觉得 这种所谓的 ”找到了意义”的 感觉是虚假的，但是 是有必要的，是好的。值得我们去伪装自己有的。或者说，当我们相信自己有的时候，就有了。</p>
<p>柏拉图认为，透过洞穴上的投影我们永远也无法认知到真正的世界。我不这么觉得，我觉得我们看到什么，世界就是什么。</p>
<p>（你所热爱的，就是你的生活。</p>
<p>就像在玩游戏一样，金币是虚假的，但是 是我想要的，这就已经足够了。</p>
<p>你要选择一个东西，作为你的意义。重要的不是这个到底是什么，而是你的“选择”。</p>
<p>要想办法，保护我们的选择，保护这口心气，像浇花一样给它时间（the time coin），为他而投入努力，时刻想着它，让它长大。当感染了意义毒（开始思考做这件事是否有意义时）时，要想办法让自己不这么想。</p>
<p>因为从“本质”上，一切都是无意义的。</p>
<h1 id="heading-how-to-life">how to life</h1>
<p>想一想，在什么时候我们容易感到没有意义？</p>
<p>在努力了 但是毫无结果，有的时候努力的方向也没有。在追求“自己得不到之物” 而感到痛苦的时候，在茫然，无聊，在不想工作的时候。</p>
<p>简单的讲就是在“有问题”的时候。在有问题的时候，就要去解决问题。而不是去“思考意义”，这种行为只是一种逃避。</p>
<p>在选择了一些事情之后，我们该如何推进呢？如何不茫然，不无聊，热爱工作（不可能）呢？</p>
<p>做事，解决问题，需要时间，需要过程，需要前提，需要准备，甚至需要运气。在一件事的中途又会发现新的事，就这样在一件一件的事情中 我们就度过了自己的一生。</p>
<h1 id="heading-5a6e6le15oyh5y2x">实践指南</h1>
<p>让自己做事的一些要点是</p>
<p>当下：不要去想未来的事，最起码意识到自己在想未来的事情</p>
<p>精确：拖延和恐惧 很大程度是不够精确造成的</p>
<p>过程：做每件事情，都要开心，用让自己开心的方式做事</p>
<p>独立：依赖是大忌，不要把寄希望于自己没法控制的东西上</p>
<h1 id="heading-6lci5ps5bydlaaguaxtuaqgee9rg">谈放弃/暂时搁置</h1>
<p>这个世界不是围绕着我们转的，不是”想做的任何事“都能做成的。单纯的”去想做一件事“，就是单纯的”什么都没有做“。做不到的事情，就不要去做。想不到的东西 在想不到的时候 就是想不到。如果真的很想去做，那么在能做的时候，你总会想起来已经可以去做了。如果想不到就说明其实也没那么重要。</p>
<p>综上，当大家在思考意义问题的时候，可以从另一个角度想一想，是什么开始让我们开始”思考意义“，认识到这种思考本身就是个问题，从而可以解决它。</p>
<p>也愿大家不要陷入”被意义问题侵蚀“的境地。</p>
]]></content:encoded></item><item><title><![CDATA[could you spend time coin]]></title><description><![CDATA[时间像是硬币 但是不是每个人都能够花他

你是否真的有拥有timecoin

心情 精力 环境 前置条件 你以为自己有时间 但是实际上不一定

一枚完整的一小时timecoin 其实很难得



你的timecoin 是否打了水漂

当你决定把时间花在某件事上时 如果预估错误 比如决定花一个小时做某事 但是实际上根本没去做 或者只完成了一半 如果这一半时间是无法被算作某种积累的 那么这枚timecoin实际上就没花出去 打了水漂

很多事情并不是一枚timecoin就能完成的 花了这枚 在这个东...]]></description><link>https://blog.woodgear.me/could-you-spend-</link><guid isPermaLink="true">https://blog.woodgear.me/could-you-spend-</guid><category><![CDATA[thoughts]]></category><category><![CDATA[timemanagement]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Wed, 11 Sep 2024 12:13:37 GMT</pubDate><content:encoded><![CDATA[<ul>
<li><p>时间像是硬币 但是不是每个人都能够花他</p>
</li>
<li><p>你是否真的有拥有timecoin</p>
<ul>
<li><p>心情 精力 环境 前置条件 你以为自己有时间 但是实际上不一定</p>
</li>
<li><p>一枚完整的一小时timecoin 其实很难得</p>
</li>
</ul>
</li>
<li><p>你的timecoin 是否打了水漂</p>
<ul>
<li><p>当你决定把时间花在某件事上时 如果预估错误 比如决定花一个小时做某事 但是实际上根本没去做 或者只完成了一半 如果这一半时间是无法被算作某种积累的 那么这枚timecoin实际上就没花出去 打了水漂</p>
</li>
<li><p>很多事情并不是一枚timecoin就能完成的 花了这枚 在这个东西上你是否能继续 持续的消费？</p>
<ul>
<li><p>比如肌肉记忆的训练，钢琴 绘画 需要的不是一枚timecoin 而是最起码连续n个月 每天n枚 你是否做好了储备？</p>
</li>
<li><p>比如对一个主题的连续投资 是否会感到厌倦 半途而废？</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>timecoin的回收</p>
<ul>
<li><p>如果我们的花费的每个timecoin 都是可累计的，那么可以说我们成功的回收了部分的timecoin</p>
<ul>
<li><p>但也可能过分追求自动化 导致浪费了timecoin</p>
</li>
<li><p>相反我们也可能一枚timecoin花出了多枚的效果</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>timecoin的不等价</p>
<ul>
<li><p>有些事情 现在做的成本要比未来小 有些则相反</p>
<ul>
<li>每枚timecoin不是等价的</li>
</ul>
</li>
</ul>
</li>
<li><p>timecoin的记录</p>
<ul>
<li>你是否还能记得 在什么时候（比如上个月）花了多少timecoin 花在了哪里？</li>
</ul>
</li>
<li><p>timecoin的连击 副作用</p>
<ul>
<li>一枚timecoin可能会影响下一枚 如果你决定去健身 那么可能接下来就只能躺在床上了</li>
</ul>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[谈对命运的臣服]]></title><description><![CDATA[在《倩女幽魂III：道道道》中有这样一个故事结构,小和尚十方笨手笨脚,总之弄坏了和师父一起要护送的金佛,最终师父白云牺牲了自己,最后战胜了黑山老妖

这个结构,俗套.从人择主义或者拍电影所需的情节发展的角度,讨论这个情节的合理性,其实没什么好讲的.我们还是应该回归到故事中,在第三面墙内来解构.

有这样一种解读的角度

老和尚故意放纵十方的行为,即使他打破了金佛,使得之后的战斗更加困难.但这正是金佛,白云,十方,这三者所要承受的劫难.唯有直面这一劫,不借助外物.才能成佛.

这里的外物指的就是金...]]></description><link>https://blog.woodgear.me/6lci5a55zg96lq55q</link><guid isPermaLink="true">https://blog.woodgear.me/6lci5a55zg96lq55q</guid><category><![CDATA[italk]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sun, 28 Jul 2024 09:29:13 GMT</pubDate><content:encoded><![CDATA[<ul>
<li><p>在<strong>《倩女幽魂III：道道道》</strong>中有这样一个故事结构,小和尚<code>十方</code>笨手笨脚,总之弄坏了和师父一起要护送的<code>金佛</code>,最终师父<code>白云</code>牺牲了自己,最后战胜了<code>黑山老妖</code></p>
</li>
<li><p>这个结构,俗套.从人择主义或者拍电影所需的情节发展的角度,讨论这个情节的合理性,其实没什么好讲的.我们还是应该回归到故事中,在第三面墙内来解构.</p>
</li>
<li><p>有这样一种解读的角度</p>
<ul>
<li><p>老和尚故意放纵十方的行为,即使他打破了金佛,使得之后的战斗更加困难.但这正是金佛,白云,十方,这三者所要承受的劫难.唯有直面这一劫,不借助外物.才能成佛.</p>
</li>
<li><p>这里的外物指的就是<code>金佛</code></p>
</li>
</ul>
</li>
<li><p>这种解释,隐含的内部逻辑为</p>
<ul>
<li><p>面对<code>劫</code>我们不应躲避它,而应顺其自然,如果其自然而然的发生了,也就自然而然的面对它</p>
</li>
<li><p>面对磨难,我们应该直面它,而且最好是凭借自己,像擂台上的拳击手般,只凭自己征服它</p>
</li>
</ul>
</li>
<li><p>这种对"命运的臣服",确实很有高僧或得道高人的风度.</p>
</li>
<li><p>在我看来,也就是有点傻..</p>
</li>
<li><blockquote>
<p>对命运的臣服并不是完全的接受所有的情况,而是清晰和切实的认知到现状,并将精力投入到如何改善上来.</p>
</blockquote>
</li>
<li><p>如果一件坏事,或者可能造成额外难度的事,有可能发生,如果已经感知到了这一点,却并没有采取行动去防范他.这不是什么高僧,这是抖M发作了.</p>
</li>
<li><p>如果去做一件事,会让接下来的事情,更容易,却不去做.反而要<code>迎接命运的挑战</code>,这也是抖M的一种.</p>
</li>
<li><p>以更大的成本和代价去克服困难,不是一件值得称道的事.</p>
</li>
<li><p><code>善战者无赫赫之功，善医者无煌煌之名</code></p>
</li>
<li><p>结合到生活实际中来,人不应该去挑战自己的软肋,当你说这是一次锻炼的机会时,要确保他真的只是一次锻炼.并且要保证真的是得到了锻炼.</p>
</li>
<li><p>臣服并不是偷懒的借口,而是一种务实的态度.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[the best way to save/restore your tmux session]]></title><description><![CDATA[效果展示

状态是什么
准备工作总是麻烦的，在不同的task之间切换，想重新找回上下文更是让人混乱。就像计算机一样。我们需要某种机制，能去确切的保存住当前的状态。在以后的任意时间点能够切换回来
tmux的一些问题
对于我来说，一个任务的上下文基本分为

笔记，记录了当前的进度，想法，todolist等

终端，我一般会开一个tmux session。将日志，测试，程序启动等这个任务相关的所有东西放在同一个屏幕上

网页。firefox+tst 可以直接保存在书签中。

ide，vscode打开的...]]></description><link>https://blog.woodgear.me/the-best-way-to-saverestore-your-tmux-session</link><guid isPermaLink="true">https://blog.woodgear.me/the-best-way-to-saverestore-your-tmux-session</guid><category><![CDATA[how do i work]]></category><category><![CDATA[tmux]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sat, 15 Jun 2024 15:52:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718453022897/ff596373-d539-4959-bd4c-34f882c00ed8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-5pwi5p6c5bgv56s6">效果展示</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718453222762/6f127476-7517-4be6-bd24-08c25a314798.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-54q25ocb5piv5lua5lmi">状态是什么</h2>
<p>准备工作总是麻烦的，在不同的task之间切换，想重新找回上下文更是让人混乱。就像计算机一样。我们需要某种机制，能去确切的保存住当前的状态。在以后的任意时间点能够切换回来</p>
<h2 id="heading-tmux">tmux的一些问题</h2>
<p>对于我来说，一个任务的上下文基本分为</p>
<ol>
<li><p>笔记，记录了当前的进度，想法，todolist等</p>
</li>
<li><p>终端，我一般会开一个tmux session。将日志，测试，程序启动等这个任务相关的所有东西放在同一个屏幕上</p>
</li>
<li><p>网页。firefox+tst 可以直接保存在书签中。</p>
</li>
<li><p>ide，vscode打开的各种文件夹</p>
</li>
</ol>
<p>这里我们主要关注tmux的部分。</p>
<p>tmux很好用。但当想用他来保存状态的话有几个问题</p>
<ol>
<li><p>tmux自己只专注于终端分屏的部分，没有自带的保存layout，恢复layout的功能</p>
</li>
<li><p>tmux直到2.3的时候（2016年。。好像也不是很晚）的时候才支持panel级别的title</p>
<ol>
<li><p>默认的panel title是自动变化的，当你ssh的时候，会自动变成远端的主机名。这个特性看起来很好。但是当你同时连接多个相同的节点时，很难单从主机名上回想起这个pane到底是想干什么</p>
<ol>
<li>与之相对的zellij在pane重命名的部分做的就很不错。但这次我们还是主要讲tmux。。</li>
</ol>
</li>
</ol>
</li>
</ol>
<p>第一个点。save/load layout实际上有很多tmux的衍生项目在做。</p>
<p><a target="_blank" href="https://github.com/tmuxinator/tmuxinator">tmuxinator</a> <a target="_blank" href="https://github.com/tmux-python/tmuxp">tmuxp</a> 这类的要义在于你先定义一个配置文件（yaml etc），由这些工具帮你构造出一个tmux的session。（不过tmuxp 提供了freeze 命令 能够将当前的layout保存起来）</p>
<p><a target="_blank" href="https://github.com/tmux-plugins/tmux-resurrect">tmux-resurrect</a> 更是直接把自己做成了插件，让你能够通过快捷键，保存所有的session。</p>
<p>tmux-resurrect 只能同时保存和还原所有的session。不能单独的保存/还原某个session</p>
<p>在我们看来，以上这些工具的问题在于，他们想自己做的太全了。完全没有必要。在使用者自己提供了一些hint之后，体验就能做的更好好。</p>
<h2 id="heading-build-block">build block</h2>
<p>如果我们想自己做一个类似的工具的话其实很简单。直接使用命令行就已经足够了。（tmux-resurrect就是纯bash写的）</p>
<p>下面介绍所需要用到的命令</p>
<ol>
<li>tmux list-pane和tmux list window 能够列举任意session的pane和window的状态。</li>
</ol>
<pre><code class="lang-bash">tmux list-panes -a -F <span class="hljs-string">'pane    #{session_name} #{window_index} #{window_active}        :#{window_flags}        #{pane_index}   #{@mytitle}     #{@mybooter}    #{pane_active}  #{pane_current_path}'</span>
pane    ice 0 1        :*        0   mray-run     @ . ./scripts/v2ray.actions.sh @ mray-init-and-test    0  /home/cong/sm/lab/v2ray-core
pane    ice 0 1        :*        1   vps     @@ to-baba @@ ssh root@172.245.72.75  @@ python3 -m http.server    0  /home/cong/sm/work-park/alive-kernel
pane    ice 0 1        :*        2   <span class="hljs-built_in">local</span>     @ ls    1  /home/cong/sm/lab/v2ray-core
pane    ice 0 1        :*        3   k-curl     @ <span class="hljs-keyword">while</span> <span class="hljs-literal">true</span>;<span class="hljs-keyword">do</span> sleep 1s;date;curl -m 1 172.245.72.75:8000;<span class="hljs-keyword">done</span>    0  /home/cong/sm/lab/v2ray-core
pane    t-tmux 0 0        :        0            1  /home/cong/sm/work-park/alive-kernel
pane    t-tmux 1 0        :-        0            0  /home/cong/sm/work-park/alive-kernel
pane    t-tmux 1 0        :-        1            0  /home/cong/sm/work-park/alive-kernel
pane    t-tmux 1 0        :-        2   f         0  /home/cong/sm/work-park/alive-kernel
pane    t-tmux 1 0        :-        3            1  /home/cong/sm/work-park/alive-kernel
pane    t-tmux 2 1        :*        0            1  /home/cong/sm/work-park/alive-kernel

tmux list-windows -a -F <span class="hljs-string">'window  #{session_name} #{window_index} :#{window_name} #{window_active}        :#{window_flags}        #{window_layout}'</span>
window  ice 0 ::zsh 1        :*        b6f4,320x81,0,0[320x40,0,0{160x40,0,0,58,159x40,161,0,59},320x40,0,41{208x40,0,41,60,111x40,209,41,61}]
window  t-tmux 0 :python 0        :        dbd3,320x81,0,0,24
window  t-tmux 1 :测 0        :-        2b24,320x81,0,0[320x40,0,0,23,320x20,0,41,26,320x19,0,62{160x19,0,62,27,159x19,161,62,28}]
window  t-tmux 2 :f 1        :*        dbd4,320x81,0,0,25
</code></pre>
<ol start="2">
<li>其中window_layout，指的就是tmux session中某个window的所有pane的具体位置。</li>
</ol>
<p>具体介绍见<a target="_blank" href="https://stackoverflow.com/a/71324581/5642024">what-is-tmux-layout-string-format</a></p>
<p>当window的pane数量一致时，我们可以直接用 <code>tmux select-layout -t $session_name:$win_index $window\_layout</code> 来恢复布局。</p>
<ol start="3">
<li><code>tmux set-option -p -t '0:0.0' @mytitle "xxx"</code></li>
</ol>
<p>可以在panel级别设置变量。-t 后跟的是pane的index 具体格式为 <code>$session_name:$win_index.$pane_index</code></p>
<p><strong>拥有在pane级别设置变量的能力极其的重要。这样我们能够赋予这个pane的任意想要的元数据。</strong></p>
<p>从实质上来说，pane就变成了一个我们可以操作的对象了。</p>
<ol start="4">
<li>tmux config中可以自定义panel的border format。</li>
</ol>
<p>也就是定义panel 分割线上显示的内容。而这里是可以用变量的 比如</p>
<pre><code class="lang-bash"><span class="hljs-built_in">set</span> -g pane-border-format <span class="hljs-string">"i:#{pane_index} t:#{@mytitle} b:#{@mybooter}"</span>
</code></pre>
<p>我一般会在panel上显示当前的index，自定义的title，booter（如何恢复这个pane的状态）</p>
<ol start="5">
<li><p>`tmux send-key -t $pane_target 'C-c' 'enter' 'xx' 'enter'`</p>
<ol>
<li>我们可以在tmux的内部或者外部使用这个指令发送任意的命令到任意的pane</li>
</ol>
</li>
</ol>
<h2 id="heading-6kej5yaz5pa55qgi">解决方案</h2>
<p>这样的话，具体的解决方式就是</p>
<ol>
<li><p>在每个panel使用mytitle这个变量来设置title，这样是为了不会自动重命名等特性干扰</p>
</li>
<li><p>在每个pane上使用booter这个变量记录如何恢复状态。</p>
<ol>
<li><p>从具体的实现上，在恢复完layout之后，会使用tmux send-key 把boot指令重发一遍。</p>
</li>
<li><p>我个人认为</p>
<ol>
<li><p>想单纯的通过遍历process的方式找一个pane的boot指令是不现实的（tmux-resurrect的方式）</p>
</li>
<li><p>通过定义配置文件，然后resync的方式，不够直观（tmuxp等的方式）</p>
</li>
<li><p>在创建panel的时候，想办法将boot指令记录下来，这种通过pane option的方式暴露，这样正好能够达到一个很好的平衡。</p>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<h3 id="heading-tips-and-hacks">tips and hacks</h3>
<h4 id="heading-tmux-set-panel">tmux-set-panel</h4>
<p>对于我来讲，一个pane的状态主要有两个，名字和恢复指令。简单的封装了一个tmux-set-panel的函数，可以在更新panel元数据的同时执行初始化操作。</p>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> tmux-set-<span class="hljs-function"><span class="hljs-title">panel</span></span>() {
  <span class="hljs-built_in">local</span> t=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> title=<span class="hljs-variable">$2</span>
  <span class="hljs-built_in">local</span> booter=<span class="hljs-variable">$3</span>
  tmux <span class="hljs-built_in">set</span> -p -t <span class="hljs-string">"<span class="hljs-variable">$t</span>"</span> @mytitle <span class="hljs-string">"<span class="hljs-variable">$title</span>"</span>
  tmux-boot-pane <span class="hljs-string">"<span class="hljs-variable">$t</span>"</span> <span class="hljs-string">"<span class="hljs-variable">$booter</span>"</span>
}

<span class="hljs-keyword">function</span> tmux-boot-<span class="hljs-function"><span class="hljs-title">pane</span></span>() {
  <span class="hljs-built_in">local</span> t=<span class="hljs-variable">$1</span>
  <span class="hljs-built_in">local</span> booter=<span class="hljs-string">"<span class="hljs-variable">$2</span>"</span>
  tmux <span class="hljs-built_in">set</span> -p -t <span class="hljs-string">"<span class="hljs-variable">$t</span>"</span> @mybooter <span class="hljs-string">"<span class="hljs-variable">$booter</span>"</span>
  <span class="hljs-built_in">local</span> cmd=$(
    <span class="hljs-built_in">cd</span> <span class="hljs-variable">$SHELL_ACTIONS_BASE</span>/scripts
    python3 tmux.py gen_tmux_send_keys <span class="hljs-string">"<span class="hljs-variable">$booter</span>"</span>
  )
  <span class="hljs-keyword">if</span> [[ -z <span class="hljs-variable">$t</span> ]]; <span class="hljs-keyword">then</span>
    cmd=<span class="hljs-string">"tmux send-keys <span class="hljs-variable">$cmd</span>"</span>
  <span class="hljs-keyword">else</span>
    cmd=<span class="hljs-string">"tmux send-keys -t <span class="hljs-variable">$t</span> <span class="hljs-variable">$cmd</span>"</span>
  <span class="hljs-keyword">fi</span>
  <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$cmd</span>"</span>
  <span class="hljs-built_in">eval</span> <span class="hljs-string">"<span class="hljs-variable">$cmd</span>"</span>
}
</code></pre>
<pre><code class="lang-python">    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">gen_tmux_send_keys</span>(<span class="hljs-params">self, booter: str</span>):</span>
        delimeter = booter.split(<span class="hljs-string">" "</span>)[<span class="hljs-number">0</span>]
        cmds = [<span class="hljs-string">f"'<span class="hljs-subst">{x.strip()}</span>'"</span> <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> booter.removeprefix(
            delimeter).split(delimeter)]
        cmds.insert(<span class="hljs-number">0</span>, <span class="hljs-string">"C-c"</span>)
        full = <span class="hljs-string">" 'enter' "</span>.join(cmds)
        <span class="hljs-keyword">return</span> <span class="hljs-string">f"<span class="hljs-subst">{full}</span> 'enter';"</span>
</code></pre>
<h4 id="heading-tmux-load">tmux-load</h4>
<p>如果想把配置load进当前的tmux session，有个尴尬的问题。执行load指令如果也是在pane中，就可能导致load指令本身恰好被这个pane的booter过程打断。。</p>
<p>一个hack是我们可以在popup的float window中做这件事。。。</p>
<pre><code class="lang-bash"><span class="hljs-keyword">function</span> tmux-load() (
  tmux display-popup <span class="hljs-string">"zsh -c \"source ~/.zshrc; cd <span class="hljs-variable">$PWD</span>;pwd;python <span class="hljs-variable">$SHELL_ACTIONS_BASE</span>/scripts/tmux.py tmux-load <span class="hljs-variable">$1</span>\""</span> &amp;
)
</code></pre>
<h4 id="heading-wait-pane-ready">wait pane ready</h4>
<p>有件更尴尬的事情是我们如果你配置了挺多zsh/shell config，new panel的过程是需要时间的。。。</p>
<p>这里一个简单实用的小hack是在初始化layout之后，booter 之前。等上几秒。。</p>
<p>总之，我们可以很容易的通过几行代码恢复任意的tmux session</p>
<pre><code class="lang-python">    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">load</span>(<span class="hljs-params">self, p: str</span>):</span>
        exp = Layout.from_json(Path(p).read_text())
        <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> self.cli.ami_intmux():
            <span class="hljs-keyword">raise</span> Exception(<span class="hljs-string">"在tmux环境下执行"</span>)
        session_name = self.cli.cur_session()
        cur = Layout(session_name=self.cli.cur_session(), wins=self.cli.list_window(session_name),
                     panes=self.cli.list_pane(session_name))
        <span class="hljs-keyword">for</span> w <span class="hljs-keyword">in</span> exp.wins:
            cur_win_index = [x.window_index <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> cur.wins]
            <span class="hljs-keyword">if</span> w.window_index <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> cur_win_index:
                self.cli.run(
                    <span class="hljs-string">f"tmux new-window -d -t \"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{w.window_index}</span>\""</span>, hide=<span class="hljs-literal">True</span>)
            self.cli.run(
                <span class="hljs-string">f"tmux rename-window -t \"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{w.window_index}</span>\"  \"<span class="hljs-subst">{w.window_name}</span>\""</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-comment"># 创建panel</span>
        <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> exp.panes:
            cur_pane_index = [x.pane_index <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> cur.panes]
            <span class="hljs-keyword">if</span> p.pane_index <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> cur_pane_index:
                self.cli.run(
                    <span class="hljs-string">f"tmux split-window -t \"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{p.window_index}</span>\" -c \"<span class="hljs-subst">{p.pane_current_path}</span>\""</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-comment"># 设置layout</span>
        <span class="hljs-keyword">for</span> w <span class="hljs-keyword">in</span> exp.wins:
            self.cli.run(
                <span class="hljs-string">f"tmux select-layout -t \"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{w.window_index}</span>\" \"<span class="hljs-subst">{w.window_layout}</span>\""</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-comment"># 设置option</span>
        <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> exp.panes:
            t = <span class="hljs-string">f"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{p.window_index}</span>.<span class="hljs-subst">{p.pane_index}</span>"</span>

            cmd = <span class="hljs-string">f"""tmux set-option -p -t "<span class="hljs-subst">{t}</span>" @mytitle "<span class="hljs-subst">{p.mytitle}</span>" """</span>
            self.cli.run(cmd, hide=<span class="hljs-literal">True</span>)

            cmd = <span class="hljs-string">f"""tmux set-option -p -t "<span class="hljs-subst">{t}</span>" @mybooter "<span class="hljs-subst">{p.mybooter}</span>" """</span>
            self.cli.run(cmd, hide=<span class="hljs-literal">True</span>)
        sleep(<span class="hljs-number">3</span>)
        <span class="hljs-comment"># booter</span>
        <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> exp.panes:
            t = <span class="hljs-string">f"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{p.window_index}</span>.<span class="hljs-subst">{p.pane_index}</span>"</span>
            cmd = self.gen_tmux_send_keys(p.mybooter)
            self.cli.run(<span class="hljs-string">f""" tmux send-keys -t "<span class="hljs-subst">{t}</span>" <span class="hljs-subst">{cmd}</span> """</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-keyword">pass</span>

        <span class="hljs-comment"># focus window and pane</span>
        <span class="hljs-keyword">for</span> p <span class="hljs-keyword">in</span> exp.panes:
            <span class="hljs-keyword">if</span> p.pane_active:
                t = <span class="hljs-string">f"<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{p.window_index}</span>.<span class="hljs-subst">{p.pane_index}</span>"</span>
            self.cli.run(
                <span class="hljs-string">f"""tmux switch-client -t "<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{p.window_index}</span>" """</span>, hide=<span class="hljs-literal">True</span>)
            self.cli.run(
                <span class="hljs-string">f"""tmux select-pane -t "<span class="hljs-subst">{p.pane_index}</span>" """</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-keyword">for</span> w <span class="hljs-keyword">in</span> exp.wins:
            <span class="hljs-keyword">if</span> w.window_active:
                self.cli.run(
                    <span class="hljs-string">f"""tmux select-window -t "<span class="hljs-subst">{session_name}</span>:<span class="hljs-subst">{w.window_index}</span>" """</span>, hide=<span class="hljs-literal">True</span>)
        <span class="hljs-keyword">pass</span>
</code></pre>
<h2 id="heading-todolist">todolist</h2>
<ol>
<li><p>整个save的过程完全可以发生tmux session的外部。所以我们只要写一个cronjob就能做的自动的定时save了。</p>
</li>
<li><p>load也是同样。可以在创建一个tmux session，然后设置他的各种layout</p>
</li>
<li><p>实际上要保存状态，tmux-resurrect还做了挺多。比如zoom的状态，对pane内程序进行感知。保存vim layout之类的</p>
</li>
</ol>
<h2 id="heading-5l255so5yiw55qe5luj56cb">使用到的代码</h2>
<p><a target="_blank" href="https://github.com/awesome-code-actions/awesome-shell-actions/blob/master/scripts/tmux.py">tmux.py</a></p>
<p><a target="_blank" href="https://github.com/awesome-code-actions/awesome-shell-actions/blob/master/scripts/tmux-actions.sh">tmux-actions</a></p>
]]></content:encoded></item><item><title><![CDATA[谈动机与行为-兼论人类学编程]]></title><description><![CDATA[动机心理学
福格行为模型
动机心理学中提出了一个简洁的理论来解释人类行为动机的根因: "减少不悦，寻求快感"。（下文中的“快乐无意识”指的是相同的概念）
由此我们可以从这个角度重新看下行为模型中提到的一些概念
<动机心理学>
人的行为是连续的，我们可以将新的行为视作由上一个旧行为转变而来。
对于是否要做这个转变，可以从三个部分打分。快感分和厌恶分抵消

准备行为

从当前行为到新行为必然要一个过程，我们想做一件事时，有时会忽略从现状到真的去做这件事之间的这个过程。

这个过程，也就是准备行为是同...]]></description><link>https://blog.woodgear.me/way-to-program-youself</link><guid isPermaLink="true">https://blog.woodgear.me/way-to-program-youself</guid><category><![CDATA[动机心理学]]></category><category><![CDATA[行为模型]]></category><category><![CDATA[杂谈]]></category><category><![CDATA[读书笔记]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Wed, 05 Jun 2024 16:11:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717548079297/a37fa5aa-0ae2-4d1f-9953-f9df856abbb6.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://book.douban.com/subject/34915970">动机心理学</a></p>
<p><a target="_blank" href="https://book.douban.com/subject/35594496/">福格行为模型</a></p>
<p>动机心理学中提出了一个简洁的理论来解释人类行为动机的根因: "减少不悦，寻求快感"。（下文中的“快乐无意识”指的是相同的概念）</p>
<p>由此我们可以从这个角度重新看下行为模型中提到的一些概念</p>
<h2 id="heading-ltgt">&lt;动机心理学&gt;</h2>
<p>人的行为是连续的，我们可以将新的行为视作由上一个旧行为转变而来。</p>
<p>对于是否要做这个转变，可以从三个部分打分。快感分和厌恶分抵消</p>
<ol>
<li><p>准备行为</p>
<ol>
<li><p>从当前行为到新行为必然要一个过程，我们想做一件事时，有时会忽略从现状到真的去做这件事之间的这个过程。</p>
<ol>
<li>这个过程，也就是准备行为是同样重要的，必须加以意识</li>
</ol>
</li>
</ol>
</li>
<li><p>期望行为</p>
<ol>
<li><p>准备行为和期望行为都是行为</p>
<ol>
<li><p>我们评价行为的因素有很多</p>
<ol>
<li><p>是否明确 （究竟该做什么，我们生理上的厌恶任何有一丝不明确的东西）</p>
<ol>
<li>除非这种不明确本身就是行为的目的 （探索体验类的行为）</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li><p>行为结果</p>
<ol>
<li><p>我们是否喜欢/厌恶行为结果</p>
</li>
<li><p>当我们想做一件事事，要注意是想要结果还是想要行为</p>
<ol>
<li>如果只是想要结果（比如减肥）。那么中间的任何准备行为和期望行为都可能造成厌恶</li>
</ol>
</li>
</ol>
</li>
</ol>
<h3 id="heading-5y6m5og2">厌恶</h3>
<p>每个人对行为厌恶的原因可能不一样。</p>
<p>如果行为有不明确的地方（不知道要怎么做），或者单纯的做不到（无法上天）。或者行为很容易失败（不管是否真的会失败，只要我们认为他会失败可以）我们都会对这行为本身产生厌恶。</p>
<h3 id="heading-54sm6jmr">焦虑</h3>
<p>焦虑是预期的使者</p>
<p>当你有预期，并且没有达到预期时，就会焦虑。</p>
<p>沉迷于焦虑本身也是一种行为，是一种对未来的逃避的行为。</p>
<p>我们不肯从焦虑中出来，是因为我们知道我们还有时间。从现在到那个真正的必须要开始做事的时间点，这段时间，我们因为对 准备行为，期望行为，行为结果的厌恶。不肯去做。这时我们能做的就是焦虑。在这段时期内，我们对焦虑的厌恶要小于对新行为的厌恶。</p>
<p>在那个时间点前，我们无法欺骗自己，无法真正感受到对行为结果（失败）的恐惧。厌恶分达不到让我们行动的程度。</p>
<p>如果此时还有点奶头乐。我们就会一边焦虑一边奶头乐。</p>
<h3 id="heading-5peg6igk">无聊</h3>
<p>无聊也是一种厌恶。甚至大于痛苦。</p>
<h3 id="heading-5roo5osp5yqb">注意力</h3>
<p>人的注意力是有限的，是被争抢的。我们利用这一点通过分散注意力减轻厌恶，通过有意识的增加注意力增强快感</p>
<h3 id="heading-6auy5bgc5qyh55qe5br5osf">高层次的快感</h3>
<p>每个人的视角不一样，某些反快乐无意识的现象其实是否符合快乐无意识的</p>
<ol>
<li><p>锻炼</p>
<ol>
<li>对于锻炼的人来说，是能从锻炼中找到快感的，他们很少感受到锻炼的厌恶</li>
</ol>
</li>
<li><p>戒律</p>
<ol>
<li>对于信奉的人来说，违背戒律的厌恶要大于其他人眼中对戒律的厌恶</li>
</ol>
</li>
<li><p>高级乐趣</p>
<ol>
<li><p>随着研究的深入，我们能从更高的层次上体会到乐趣。</p>
<ol>
<li>比如做研究之类的</li>
</ol>
</li>
</ol>
</li>
</ol>
<h2 id="heading-ltgt-1">&lt;行为模型&gt;</h2>
<h3 id="heading-5ymn6kia">前言</h3>
<ol>
<li><p>p11 三件事</p>
<ol>
<li><p>停止自我批评</p>
<ol>
<li>自我批评导致厌恶</li>
</ol>
</li>
<li><p>愿望拆解为微行为</p>
<ol>
<li>减轻准备行为和期望行为的难度</li>
</ol>
</li>
<li><p>和失败作为改进的线索</p>
<ol>
<li>减弱失败的厌恶，转换视角为快感</li>
</ol>
</li>
</ol>
</li>
<li><p>从小处着手</p>
<ol>
<li><p>p18 朱妮真的有改变的动机吗？</p>
<ol>
<li><p>吃糖很爽，能够缓解她的焦虑</p>
</li>
<li><p>她只是想要健康的结果，而结果是真的发生前，很难被感知</p>
</li>
</ol>
</li>
<li><p>p19 将难过的感觉当作一种信号 本质上一种视角的转变</p>
</li>
<li><p>p20 庆祝的本质 是增加快感</p>
</li>
</ol>
</li>
</ol>
<h3 id="heading-01">01 影响行为的三要素</h3>
<p>B=MAP (行为=动机+能力+提示)</p>
<p>这里的“动机”和“能力”在&lt;行为模型&gt;这本书中，我总感觉有些模糊。</p>
<p>用&lt;动机心理学&gt;的概念来定义的话，这个公式其实是在说：当人意识到事件时，会对其进行判断，对于脑子中浮现的应对行为，会根据快乐无意识的原则，判断这个新的行为是否能否帮助我们寻求快感，或者是减少不悦。</p>
<p>这里的动机，可以指的是想法，愿望，或者其他任何浮现在脑中的东西，但究其底层，本质都是“寻求快感，减少不悦”。</p>
<p>能力，指的是判断的过程。当判断的结果偏向快乐无意识时，我们就会执行这个新的行为。反之则不会。</p>
<p>凯蒂在狂刷手机，她当前的行为是刷手机，这是一件快乐的事。而闹钟作为一种提示，响起时，凯蒂此时面对的是</p>
<ol>
<li><p>准备行为 （相比于继续刷手机这一旧行动来讲。运动需要的准备工作可能是起床，整理卫生，吃饭等）</p>
</li>
<li><p>期望的行为 （比如去健身房举铁）</p>
</li>
<li><p>行为的后果</p>
</li>
</ol>
<p>如果是我扪心自问，我不喜欢早上起床，对于运动这一行为本身也不喜欢（满身汗水，肌肉酸痛）。唯一对我有吸引力的是行为的后果，健康的身体。</p>
<p>我们可以模拟无意识中的判断过程。 准备行为 -1 新行为 -1 行为结果 0.5 （像健康这种不是立马能看到效果的行为后果 我觉的无法打什么高分。）</p>
<p>所以难怪大家都选择刷手机而不是运动。</p>
<h4 id="heading-5yqo5py66lak5by677ym6kgm5li66lak5a655pit5yga5yiw">动机越强，行为越容易做到</h4>
<p>所谓的动机越强就是快乐无意识的判断结果越高。母亲熊下救娃属于典型的行为结果分高。</p>
<h4 id="heading-6kgm5li66lak5a655pit77ym6lak5a655pit5b2i5oiq5lmg5oov">行为越容易，越容易形成习惯</h4>
<p>准备行为和期望行为越简单，我们对其的厌恶分越低，快感分越高，就越容易让我们从当前行为，切到准备行为，最终到期望行为</p>
<h4 id="heading-5yqo5py65zkm6io95yqb5pct6ywn">动机和能力搭配</h4>
<p>实际和这里的动机和能力，都是行为。他们本就是一体，都遵循快乐无意识原则</p>
<p>而就行为自身来讲，如果我们执行的次数足够过，判断的过程就能固化下来，提示-&gt;准备-&gt;新行为 本身就融为一体，也就是我们所谓的养成了习惯。</p>
<p>好习惯这一意识，本身就是一种快感，多次执行过的行为 能够大大削弱我们对准备行为和期望行为的难度和失败恐惧。有功无过。自然变得容易多了。</p>
<h4 id="heading-5rkh5pyj5oq56s6ioihjos4uus4jes8muwpkeeunw">没有提示 行为不会发生</h4>
<p>提示本质上是变化，就像真空中的物体在不受阻力的情况下会一直保证其动量。</p>
<p>我们一直处在各种行为中，提示是将我们的期望行为从混沌的无意识中，提出来，放在我们面前（就像过一次san check一样）。一个task的优先级突然提高了，我们会先对其判断一番。通过判定，才会开始执行他。</p>
<h4 id="heading-6kej5yaz6kgm5li66zeu6aky55qe5lij5liq5q2l6aqk">解决行为问题的三个步骤</h4>
<ol>
<li><p>有没有行为提示</p>
<ol>
<li>对于这个人来说，他有没有意识到有这个新行为？当你希望他去做这个新行为的时候，他是否*意识*到了这个新行为？有没有过他的理智去判断一番？</li>
</ol>
</li>
<li><p>有没有行为能力 有没有行为动机</p>
<ol>
<li><p>准备行为和期望行为是否符合他的快乐无意识？</p>
<ol>
<li>行为是否厌恶？是否不明确？是否有风险？</li>
</ol>
</li>
</ol>
</li>
</ol>
<h4 id="heading-55so6kgm5li65qih5z6l6kec5af5liw55wm">用行为模型观察世界</h4>
<p>同样的 我们可以用快乐无意识的原则来观察这个例子。</p>
<p>珍妮弗问题</p>
<ol>
<li><p>一但你开始自我批评，你就把期望行为直接推到了厌恶的一面。厌恶分增加</p>
</li>
<li><p>通过将新行为设定为符合喜好的群体行为，大大增加了对新行为本身的快感分。</p>
</li>
</ol>
<p>行为模型没有软弱轴，懒惰轴</p>
<ol>
<li>我们应当把行为当作一个逻辑问题，计算问题来看，这这个问题的语言中，没有“软弱”“懒惰”这种概念，有的只有爽（快感）与不爽（厌恶）</li>
</ol>
<h3 id="heading-02-1">02 要素1 动机</h3>
<p>动机是什么？动机是我们我们的大脑的想法，从身体上产生的情欲，愤怒，恐惧。从理智上产生的目标，愿望，理想。</p>
<p>其底层都是快乐无意识。我们产生的每个想法，某种程度上都是为了让我们能更好的追求快感，减少不悦。</p>
<p>桑得拉和安德里安的“动机”冲突冲突吗？</p>
<p>完全不冲突。</p>
<p>想感受新家是因为感受新家很爽。</p>
<p>想解决后院是因为后院看着很不爽。</p>
<p>真正冲突的是行为，感受新家对应的行为是躺着，解决后院的行为是起来工作。</p>
<p>这两者才是冲突的。</p>
<p>这种冲突，本质上是一个待解决的问题，而不是我们陷入到了某种自相矛盾的状态。</p>
<p>问题是有解的，解决不了是方法或者视角不对。</p>
<p>在这个问题上，最简单的解决方式是使用钞能力，请人来打扫后院即可。</p>
<h4 id="heading-5yqo5py65zue6jc9iowkqoacuuazouwkqa">动机回落 动机波动</h4>
<p>这里的动机本质上就是单纯的想法，由一时的情绪触发的想法，在情绪结束后强度就会减弱。被场景激发的想法在场景破坏之后也会消失。</p>
<h4 id="heading-5yqo5py655so5lqo6l96ycq5oq96lgh5qac5b15peg5rov5lqn55sf57ut5p6ciowkqoacuuaxooazlewunueosomvvacnauuewpma">动机用于追逐抽象概念无法产生结果 动机无法实现长期改变</h4>
<p>想法产生时，也是某种提示，我们会进行判断</p>
<ol>
<li><p>准备行为是什么？</p>
</li>
<li><p>新行为是什么？</p>
</li>
<li><p>行为的结果怎么样？</p>
</li>
</ol>
<p>抽象概念，没有准备行为和新行为。压根就没法导致新行为。</p>
<p>一时的想法结束后，这次的提示就用了。如果不能让下次有相同的想法 就自然也不会有行为。</p>
<h4 id="heading-6kgm5li66k66k6h">行为设计</h4>
<p>遵循快乐无意识原则。让准备行为，期望行为，行为结果都尽量往“减少不悦，寻求快感”上靠。</p>
<p>新行为不说能带来快感，最起码要把他的厌恶分降到最低，这样单凭我们想要改变自己的这个想法就能给他带来一些快感分。</p>
<p>还有避免和其他高快感低难度的奶头乐撞在一起。否则判断的时候我们会直接跑偏到奶头乐行为上去了。</p>
<h3 id="heading-03">03 让行为容易做</h3>
<p>p94 能力链</p>
<ol>
<li><p>是否有足够时间</p>
</li>
<li><p>是否有足够资源</p>
</li>
<li><p>是否有足够体力</p>
</li>
<li><p>是否有足够脑力</p>
</li>
<li><p>是否符合日程</p>
</li>
</ol>
<p>我们还可以随便举出更多的链结</p>
<ol>
<li><p>是否熟悉，是否有成功的先例</p>
</li>
<li><p>是否有风险，失败是否有惩罚</p>
</li>
<li><p>是否需要其他人或物力的支持</p>
</li>
<li><p>具体要做什么是否明确</p>
</li>
<li><p>从单纯的情感上，想不想做这件事，这件事涉及到的人和你的关系怎么样</p>
</li>
</ol>
<p>对不同的事，不同的行为，这些要素可以说是各有不同。</p>
<p>这些每一个都是在说 对于准备行为和新行为，他到底能不能做，对于他的快感分和厌恶分是怎么样的？</p>
<h3 id="heading-04-3">04 要素3 提示 善用锚点让行为立即发生</h3>
<p>我们可以把行为设计，当作是一种人类学编程，人（自己），可以看做是一个不怎么靠谱的解释器。当它看到生活中的一些事件时，会做一些事情。</p>
<p>你可以设计自己，在脑袋还清醒的时候，设定好自己在遇到什么事件时应该怎么做。</p>
<p>当然想法很美好，你的设定看起来很充实。但终究还是要让自己这个解释器跑一跑才能知道的。</p>
<p>当真正遇到那个事件时，自己是否真的能作出预想的行为？</p>
<p>做不到，不要怪解释器，他是无辜的。他的原则自始至终就是快乐无意识原则。</p>
<p>应该重新改你的程序。</p>
<p>思考-&gt; 设定-&gt; 验证 -&gt;修改</p>
<p>知道变成我们所期望的为止。</p>
<p>&lt;行为模型&gt; 在这一章提供很多自我编程的小技巧，这里就不赘述了。</p>
<h3 id="heading-05">05 创造积极情绪 行为固化为习惯</h3>
<p>庆祝，就是快感。要想办法让自己将准备行为，新行为的快感分提高。</p>
<p>大脑很容易被欺骗。</p>
<p>p172 固定习惯要反复练习</p>
<p>还是借用人类学编程的概念，我们的程序被执行的方式，不是等到事件发生时，来这个清单上找现在应该做什么，而是我们应该以某种方式将清单“烧录”到大脑中。</p>
<p>其中一个方式就是练习，模拟被触发的环境，有意识的重复演练等。</p>
<h3 id="heading-06">06 高频率小成功</h3>
<p>我们设定行为（人类学编程）时应该注意</p>
<ol>
<li><p>可扩展性</p>
<ol>
<li><p>让行为有放大的可能</p>
<ol>
<li><p>比如跑步，跑100米，可以容易的放大成跑1000米</p>
<ol>
<li><p>这种放大不应该增加厌恶。不是说必须跑1000米</p>
<ol>
<li>必须在设计时注意，如果我跑500米不想跑了，接下来怎么办？必须减少失败的厌恶。</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li><p>连击</p>
<ol>
<li><p>行为要为另一个新的行为留出空间。最好能达成连击的效果</p>
<ol>
<li><p>比如晚上将手机放在外面充电，就为第二天早上起来听到闹钟想开门关闹钟营造了 一个开卧室门的效果。</p>
<ol>
<li><p>既然已经开门了，去卫生间是不是也很轻松</p>
</li>
<li><p>到了卫生间，洗脸的准备条件也已经达成了</p>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li><p>视角的转变 心态的调整</p>
<ol>
<li><p>思维模式是可以收集的。</p>
<ol>
<li><p>练习的心态 -&gt; &lt;练习的心态&gt;</p>
</li>
<li><p>游世的心态 -&gt; &lt;颜安世：庄子评传&gt;</p>
</li>
<li><p>费曼技巧的心态</p>
<ol>
<li>（是写博客一个很强的助力</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<h3 id="heading-07">07 一次只解一个结</h3>
<p>注意人类自我的特性，一次设定太多等于没用。</p>
<h3 id="heading-08">08 群体行为设计</h3>
<p>不感兴趣。略</p>
]]></content:encoded></item><item><title><![CDATA[关于写博客这件事]]></title><description><![CDATA[鉴于之前的n次尝试自建github pages最后都倒向了无尽的捣鼓各种静态网站生成器中。我决定这次绝对不要自建了。
要求

可以用纯markdown格式写/可以导出为纯markdown格式。

这个问题本质上在于我希望数据源是我自己的git repo。算是local first的一种变通方式。最起码，我的纯文本格式的blog不能丢。



点评
尝试了下我知道的几个博客平台+随便从google几个比较流行的博客平台.
medium
首先排除的medium，每次查东西，查到medium，结果发现...]]></description><link>https://blog.woodgear.me/talking-about-those-blog-post-platform</link><guid isPermaLink="true">https://blog.woodgear.me/talking-about-those-blog-post-platform</guid><category><![CDATA[杂谈]]></category><dc:creator><![CDATA[smsmpulupulu]]></dc:creator><pubDate>Sat, 01 Jun 2024 16:00:00 GMT</pubDate><content:encoded><![CDATA[<p>鉴于之前的n次尝试自建github pages最后都倒向了无尽的捣鼓各种静态网站生成器中。我决定这次绝对不要自建了。</p>
<h2 id="heading-6kab5rgc">要求</h2>
<ol>
<li><p>可以用纯markdown格式写/可以导出为纯markdown格式。</p>
<ol>
<li>这个问题本质上在于我希望数据源是我自己的git repo。算是local first的一种变通方式。最起码，我的纯文本格式的blog不能丢。</li>
</ol>
</li>
</ol>
<h2 id="heading-54k56ke">点评</h2>
<p>尝试了下我知道的几个博客平台+随便从google几个比较流行的博客平台.</p>
<h3 id="heading-medium">medium</h3>
<p>首先排除的medium，每次查东西，查到medium，结果发现不能看。总是很恼火。medium理论上做的事情是对写作者有益的。但是还是pass</p>
<h3 id="heading-hashnode">hashnode</h3>
<p>hashnode 之前从来没听过。</p>
<h4 id="heading-57yw6l6r">编辑</h4>
<ol>
<li><p>在线的blog 编辑功能，感觉有点类似notion的那种块编辑器的感觉。</p>
<ol>
<li><p>编辑器有raw markdown editor模式，好评</p>
</li>
<li><p>现在（2024-0602） 有点在推ai辅助写作的感觉。有ai相关的功能。暂时不做评价</p>
<ol>
<li>发布的时候可以设置seo title。</li>
</ol>
</li>
<li><p>可以设置原始url和原始发布日期</p>
<ol>
<li><p>add original url</p>
</li>
<li><p>publish on backdate</p>
</li>
</ol>
</li>
</ol>
</li>
</ol>
<h4 id="heading-5zco5yw">后台</h4>
<ol>
<li><p>各种页面,有配置主题 小组件什么的</p>
</li>
<li><p>超超好评 可以自动backup markdown格式的文章到<a target="_blank" href="https://github.com/woodgear/blog/blob/master/clwxdbobo000109mhce08glun.md">github</a>。</p>
<ol>
<li><p>每次update，都会有对应的commit。</p>
<ol>
<li>感动。好正常的做法。</li>
</ol>
</li>
<li><p>也有import from github的功能但是要付费。 233</p>
</li>
</ol>
</li>
</ol>
<h4 id="heading-5bgv56s6">展示</h4>
<ol>
<li><p>一个独立域名的网站</p>
</li>
<li><p>理论上可以自定义导航栏？</p>
</li>
<li><p>默认是一个列表</p>
</li>
</ol>
<h3 id="heading-56u555m9">竹白</h3>
<p>还在内测（专栏需要邀请）。但我记得他们好像一直在内测？不知道是不是死了。</p>
<h3 id="heading-devtohttpdevto"><a target="_blank" href="http://dev.to">dev.to</a></h3>
<p>dev.to 不是一个独立的blog平台。更像是知乎这种，不像hashnode会给你一个独立的域名。你的post是在平台内部的。</p>
<h4 id="heading-57yw6l6r-1">编辑</h4>
<ol>
<li><p>朴实无华（非所见即所得）。可以很简单把markdown 拖过去</p>
<ol>
<li>preview 时会提示一些优化的建议。对markdown格式有感知。很好。</li>
</ol>
</li>
</ol>
<h4 id="heading-5zco5yw-1">后台</h4>
<p>无。没有分类的功能？</p>
<h4 id="heading-5bgv56s6-1">展示</h4>
<p>一个平台内部的列表</p>
<h3 id="heading-5y2a5a6i5zut">博客园</h3>
<p>作为少有的我对其抱有敬意的博客网站。不得不尝。</p>
<p>博客园和dev.to 类似。也没有独立域名。</p>
<p>这种模式一个不好的地方就是你的blog本质上总是嵌入到这个网站的。当你/别人看自己的blog时，会有各种其他的链接。不够纯粹。</p>
<p>而且展示blog时，基本上就是一个大列表。</p>
<h4 id="heading-57yw6l6r-2">编辑</h4>
<ol>
<li><p>有种简洁的美（</p>
</li>
<li><p>可以选择各种编辑器。WYSIWYG，markdown。</p>
<ol>
<li>还有markdown实时预览的编辑器。赞</li>
</ol>
</li>
</ol>
<h4 id="heading-5zco5yw-2">后台</h4>
<ol>
<li><p>功能很丰富。签名，模板。我10年的blog竟然还在。泪目。</p>
</li>
<li><p>有vscode插件，可以在vscode中编辑blog。赞</p>
</li>
<li><p>有导出功能。zip格式里面是markdown。赞</p>
</li>
<li><p>支持嵌套分类。赞</p>
</li>
</ol>
<h4 id="heading-5bgv56s6-2">展示</h4>
<p>一个平台内部的列表</p>
<h3 id="heading-xloghttpsxn-15tw1y2ij8m-2150xlogapp"><a target="_blank" href="https://xn--15tw1y2ij8m-2150.xlog.app/">xlog</a></h3>
<p>（某种程度上我认为存份东西在github，已经够去中心化了。。</p>
<p>注册默认是各种钱包。web3特色，不得不尝。</p>
<p>正常注册流程没有web3要素。和正常邮箱注册流程一致。</p>
<h4 id="heading-57yw6l6r-3">编辑</h4>
<ol>
<li><p>实时markdown 编辑器 好评</p>
</li>
<li><p>有ai生成摘要功能</p>
</li>
<li><p>域名很奇怪。。中间那坨是某种id？</p>
</li>
</ol>
<h4 id="heading-5zco5yw-3">后台</h4>
<ol>
<li><p>可以创建页面（about页等）</p>
</li>
<li><p>特意区分了图文和作品？</p>
</li>
</ol>
<h4 id="heading-5bgv56s6-3">展示</h4>
<ol>
<li><p>独立网站</p>
</li>
<li><p>自带了些导航栏。归档页面，最新最热排序什么的。</p>
</li>
</ol>
]]></content:encoded></item></channel></rss>