这本书在互联网上的名气非常的大。如果作为读书博主，推荐书单中没有这本书，似乎就不配作为读书博主。我在好多读书博主的推荐书单中都看到这本书，我也很早就将它加入了自己的书单，直到最近才有将它翻开阅读。书中以一个作者的土著朋友的问题开始“为什么是欧洲的白人殖民了我们，而不是我们殖民欧洲？”。很多科学家都想以此来证明欧洲人的种族优势大于非洲土著，但是作者通过一些研究得到完全的不同的结论。作者的结论十分简单，这一切都是地理因素。首先欧亚大陆有明显的四季变化，有适合进行驯化的动植物。所以它们优先从狩猎采集发展出了农业。而同样处于温带气候的美洲为什么没有发展出农业呢？作者给出的答案是，美洲大陆没有合适的进行驯化的植物，也没有能够进行驯化的动物，而动物在农业生产中至关重要。在农业种牲畜可以提供劳动力，可以犁地、帮忙运输物资等等。而美洲大陆缺乏能提供劳动力的牲畜，农业规模无法扩大。农业的产生能供养更多的人口，可以养活不进行农业生产的人口，例如各类专家、政治家、职业军人。农业生产会养活更多的人口，形成复杂的人口社会结构，有利于文明的发展。考古学证明大型水利工程都是在形成大的联邦或者国家之后才有能力组织人力进行修建。人口的聚集有利于发展技术，技术的进步能提高生产力，从而存进农业的发展，人口会进一步增加，形成正向的循环。而发明家、专家这些人促进了技术的进步，他们发展出了冶金、航海、文字、火药、轮子等等技术，从而进一步推动文明的发展。农业驯养的马匹给职业军队提供了极强的战斗力，而航海技术为远洋殖民提供了技术支持。而农业社会人畜长时间待在一起，而农业社会人口密度大，长时间定居，这些都有利于人类和牲畜之间互相感染疾病，有利于微生物的进化。在漫长的人类、动物共存的情况下，都进化出了对于疾病抵抗能力。而美洲和非洲土著世代过着狩猎采集的生活，不与动物混在一起，隔一段就迁移，与疾病接触的机会少，缺乏对疾病的抵抗力，在遇到欧洲殖民者时，殖民者身上的致命病菌给他们带来了灭顶之灾，对他们的伤害不亚于武力。似乎到此逻辑链完整了。因为亚欧大陆适合发展农业-->亚欧大陆发展出了农业-->农业能养活各种人口-->不进行粮食生产的人口多了各种发明创造-->定居让人们有了固定财产-->人口密度大，固定居所，病菌传播-->进化出抵抗力但是作者又提到几个问题，既然农业生产这么多优势，为何其他地区的人们不采用？各个地区都有自己的技术优势，为何亚欧大陆形成了压倒性的优势？首先作者提出，农业社会并不一定比狩猎采集社会有优势，只是基于地理环境的无奈选择，这与《人类简史》中的观点一致。非洲大陆作为人类的起源，野生动物在长时间与人类共存中进化出了怕人这一技能。因此非洲大陆的大型野生动物没有灭据，而其他大陆包括亚欧大陆，大型哺乳动物大量灭据，人类可供捕猎的动物资源减少了。另外就是上面提到的亚欧大陆可供驯化的野生动物数量比其他大陆的都多，牲畜给农业提供了劳动力，有利于农业的发展。另外亚欧大陆是东西走向，维度适合农作物生长，也没有天然的屏障。农作物和农业技术可以很方便的进行传播，亚欧大陆上各族人民技术交流频繁，一个地区发展出来的技术很容易传播到另一个技术，从语言学上可以知道很多民族的语言多多少少都受到了其他名族的影响。周边的狩猎采集部落要么看到农业社会的优势主动转变，要么被征服，驱赶，被动的接受改变。这些可以在短时间内完成，而美洲和非洲因为地理环境的影响，他们看不到远在亚欧大陆的人类社会，也无法被早期亚欧大陆上的农业社会所知晓。造成二者初次见面时巨大的差距整本书的结论十分清楚，亚欧大陆的技术优势并不是人种优势，而是他们恰好位于亚欧大陆。如果将各个人种在各个大陆的位置调换，结果也不会发生变化，仍然是亚欧大陆的技术发展领先欧洲。书中我得到一些启示：任何技术的发展我们都无法清晰的遇见它的未来，就像农业基于狩猎采集，二者是在特定环境下的产物，谁也无法预料当初选择农业生产会对人类文明产生几千年的影响。人类现代文明某种程度上也是基于环境的产物，很多我们认为古来如此的习俗和规矩也是基于环境的最优解，环境变了，规矩也得变环境与生产力是共同作用的，生产力的发展使社会环境产生变化，而这个变化反过来有会影响生产力的发展技术的进步需要与外界的交流碰撞，闭门造车要么会导致技术的退步，要么会跟不上时代的潮流。几万年前因为海洋、高山挡住人类文明的交流导致各个地区发展出不同程度的社会样貌，过去非洲和美洲被殖民并不是人种和文化的落后，而是因为地理环境的限制，限制他们看到外面世界的变化。而现代社会我们有了飞机货轮等交通工具、以及互联网这个交流的平台，这些技术的发展抹平了地理和距离的限制。但是人心中似乎慢慢筑起一道不可逾越的屏障，这个屏障正在阻碍不同地区的贸易、技术等的发展。以此警戒我个人能抛弃偏见，客观的看待社会的发展。
学过历史都知道，在明清时期政府采取闭关锁国的政策，最终导致中国错过了西方的工业革命，造成了近代的落后。这本书告诉我们，虽然政府采取闭关锁国，但是那个时候的中国人并不像想象中那么封闭对外界的事物一无所知，甚至清政府也不像想象中那么完全封闭，这本书从地理大发现开始介绍了鸦片战争过去的300年间中国是如何同外部世界打交道的。开放与封闭的历史明朝时期从朱元璋开始就采取闭关锁国的政策，那个时候外国人来华贸易的主要方式就是参与中国制定的朝贡体系，外国商人与使臣一起带上贸易货物来进行上供，在此期间明朝皇帝会表现出对外国人的宽厚和仁慈，也为了表现天朝上国的示例会赏赐数倍于贡品价值的财物。因为巨大的利益可图，前来朝贡了外国人络绎不绝，为了减轻财政压力，政府不断要求外国人减少朝贡次数，同时要求减少使臣的随行人员。虽然明朝的贸易制度有些另外国人不解，但是当时与中国贸易仍然就巨大的利益可以赚取，因此一些制度上的不便并没有减少贸易的热情。同时因为明朝重视农业而歧视商业，并且对农业征收重税导致许多农名放弃农业转而开始经商。外国人的热情不减，民间商人团体不断扩大，最终明朝政府逐渐开放了一些港口作为通商口岸。在明朝时期因为不重视商业，无法理解海洋的重要性，丢失了澳门并且在葡萄牙人占领澳门后并没有很大的反应。随着明朝军事实力的下降以及对中央政府对地方的控制逐渐的力不从心，民间开始发展起来的与外国的贸易，同时政府因为缺乏资金，为了收取关税补充国库，政府开启了几个港口开始对外贸易。在此期间发生了明朝的士大夫随着与传教士的深交发现西方科技高明和领先之处，同时也见识到了西方火器的厉害，一方面士大夫们掀起了一股学习西方的风气，政府为了战争需要也开始聘请西方传教士制作火炮并训练火炮手。同时民间也发起了翻译西方著作的运动。明末时期中国因为政府控制力度不够罕见了形成了开放的社会风气。在此期间出现了大量涌向东南亚的华人，也因为需要对日贸易形成了新的海上势力，早期是一些海盗团伙，随着海盗团伙的合作和吞并，最终形成了一支庞大的海上势力，势力的领袖就是郑芝龙。清朝顺治时期，郑成功利用父亲郑芝龙留下的班子成功收复台湾。利用与澳门和海外的贸易建立了一个海上贸易帝国。但是这个过程随着康熙收复台湾而结束了。康熙皇帝可以说是清朝皇帝中最开放，也是西学最渊博的皇帝，在位期间他对西方的科学技术十分痴迷，甚至聘请传教士来为自己讲课，计算历法，解决工程问题。他明白西方的强大，为了统治的稳定，他允许甚至鼓励他的皇子皇孙学习西方科技，但是他禁止百姓接触传教士，学习西学。康熙为了解决台湾问题重新颁布了禁海令，在台湾问题解决之后重新开启了4个港口，开始了4口通商的时代。雍正皇帝是一个保守的皇帝，从雍正朝开始，清朝的皇帝不再热衷于学习西学，同时禁止传教士传教，开始了对传教士的迫害。清朝的官员与明朝不同，明朝虽然也是闭关锁国，但是底下官员的自主能动性高，可以自行搞学习西方的运动。清朝的官员经过文字狱的洗礼已经变成只会逢迎皇帝的奴才。皇帝搞闭关锁国底下自然跟着搞，甚至层层加码。此时在中国已经形成了两个并行却不相交的世界：商人和海盗能够看到海外的巨变，但他们无法将看到的一切传达给精英群体。而精英群体已经彻底忘记了西方的知识。到乾隆时期，4口通商已经变成一口通商。广州一家独大并且形成了特色的十三行制度。在此期间清政府两头盘剥，对外向洋人商船收取各种苛捐杂税，对内向十三行收取各种钱财，包括但不限于皇帝过寿要求官商捐款，救灾要求捐款。在此层层盘剥下洋人与十三行都不好过。洋人认为是清朝下面的官员贪得无厌，想要上京告御状，但是皇帝压根就不重视于洋人的贸易。皇帝表面上答应了会处理此事，背地里严查在此期间与洋人有过交流的人员特别是给洋人引路写状子的人。19世纪，英国人占据了对华贸易的主要地位。但是此时十三行已经濒临破产，而国内在极度封闭的情况下形成了自给自足的小农经济。英国想要贸易却无门路，同时国内对英国发生了贸易顺差，大量的白银流入中国。英国人此时动起了歪心思，决定用鸦片挽回这一形式。随着鸦片的输入，清政府开始了不同程度的戒烟运动，以林则徐的虎门销烟最为著名。英国要求清政府承认鸦片贸易合法，同时要求开辟新的通商口岸，并且英国以“保护贸易”为名，派遣军舰封锁广州、武力威胁。清政府认为此举是蛮夷挑衅，清政府认为西方需要与中国贸易才能活下去但是中国地大物博不需要依靠西方贸易，因此为了惩罚蛮夷决定断绝与英国的贸易。双方的矛盾越来越深，最终导致了1840年的鸦片战争。总结封建集权制度的核心任务是维持内部的稳定，并以皇帝为中心来格式化社会上的一切，一切都是皇帝意志的体现。皇帝管制信息的行为最终伤害最大的就是皇帝本人，因为他完全被自己制造的预设立场封闭了。皇帝不喜欢外界变化的社会，不喜欢西方的新思潮，底下的官员自然不会向皇帝报告西方是如何先进，技术是如何又发生了翻天覆地的变化。从历史上看，在地理大发现以及远洋贸易中，中国并不是封闭且独立与远洋贸易之外的。中国从某种程度上是参与了贸易的，甚至明末掀起了大翻译运动学习西方科技和文化。郑成功的海上贸易帝国差点可能就成功了。但中国古代历史上一个困扰了两千年的问题是：不管一个时代采取了多少改革和开放的措施，但到最后，集权主义所产生的稳定需求，最后都会导致权力重归闭塞，将之前的所有成果尽数推翻。中国人并不比西方差，而且早期也有开眼看世界的机会，但是因为封建集权制度陷入封闭错失了一系列的机会。
Emacs折腾日记(三十六)——打造个人笔记系统
在前面我介绍了如何使用 org mode 来实践 gtd 的理念。其实org mode 和其他工具的结合可以打造一个强大的个人笔记系统嵌入 plantuml作为程序员，对 uml 自然不会陌生，虽然时至今日可能有些显老，但是对我来说它仍然是我不可或缺的工具。而 plantuml 是一种将文本转化为图片的工具。我们可以在 plantuml 入门 找到对应的安装步骤。对于archlinux 来说，我需要首先保证java 安装sudo pacman -S jdk21-openjdk根据 plantuml 的官方介绍，只需要jdk8就可以运行，但是我比较喜欢安装最新的版本。plantuml 中某些图需要依赖 graphviz 来生成，所以这里需要再安装一个 graphvizsudo pacman -S graphviz完成了这些基础组件的安装，下面我们就可以下载 程序这个 jar 包放在哪里都可以，既然是Emacs配合，那么我打算将它放置到 ~/.emacs.d/lib 中作为功能的依赖库我们可以使用官网的测试用例来测试一下是否正常@startuml Alice -> Bob: test @enduml将上述文本保存为 test.txt。然后执行 plantuml.jar -jar test.txt。默认在当前目录中生成同名的png图片。如果显示正常，那么我们就可以进行Emacs的改造工作了根据 官方 的文档，针对Emacs，它提供了名为 plantuml-mode 的扩展插件。我们可以通过以下简单的配置来进行org和plantuml 的联动(use-package plantuml-mode :ensure t :mode ("\\.puml\\'" "\\.plantuml\\'") :config (setq plantuml-default-exec-mode 'jar) (setq plantuml-jar-path (expand-file-name "~/.emacs.d/lib/plantuml.jar")) ;; 设置plantuml jar包的位置 ;; 让org代码块能识别plantuml语法 (add-to-list 'org-src-lang-modes '("plantuml" . "plantuml")) (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t))) (setq org-plantuml-jar-path plantuml-jar-path) )我们还是可以用官方给的示例来看看具体的效果#+begin_src plantuml :file demo.png @startuml Alice -> Bob: test @enduml #+end_src这里必须通过 :file 来指定生成图片的链接这里可以为 plantuml 做一个代码片段以便快速进行进入画图的流程。具体细节就不再深入介绍了。各位读者有兴趣可以自行探索。另外关于画图的一些其他技巧和配置，可以参考 面向产品经理的Emacs教程：15. 在Org mode里用纯文本画图构建笔记系统我个人习惯使用双链笔记，简单来说它就像wiki一样随意插入链接，各种知识结构是一个网状的。传统的笔记是树状结构（这里主要是指马克飞象那样的笔记软件对笔记的组织形式），某一条笔记输入某个单元，而这个单元又属于某个父级单元中，就像一本书一样。但我们在学习的过程中，很难在一开始就把知识整理成体系，而是先零散学习，之后随着知识面的增加逐渐形成体系。另外有些跨学科的知识可能会在多个地方被提及到，就像芒格说的跨学科思维。我们无法将某条知识仅仅归于一个大类里面。而当前双链笔记它是没有层级的，它是一个网络结构，任何知识都可以随意引用其他知识。更符合我们的认知习惯，学到新知识了先记下来，未来知识成体系了可以通过链接随意将它放置到任何体系下。在Emacs中可以使用 org-roam 插件来实现(use-package org-roam :ensure t :after org :init (setq org-oram-v2-ack t) :config (org-roam-setup) :custom (org-roam-directory "~/org/roam/") :bind (("C-c n f" . org-roam-node-find) (:map (("C-c n i" . org-roam-node-insert) ("C-c n o" . org-id-get-create) ("C-c n t" . org-roam-tag-add) ("C-c n a" . org-roam-alias-add) ("C-c n l" . org-roam-buffer-toggle)))))在 org-roam 中，一个文件就是一个note，我们可以通过 org-roam-node-find 来打开或者新建一个节点。新建的文件会被保存到我们定义的 org-roam-directory 目录中。在我们编写笔记的时候如果需要关联另一个笔记，可以通过 org-roam-node-insert 在随意位置插入对另一个文件的引用。当我们对知识有了一定的理解之后可以通过 org-roam-tag-add 来添加一些标签方便我们日后查找。另外有些时候我们组织某个知识点时，它下面有一些小的知识点，我将它们作为当前文件中的一个子标题，日后如果希望能链接到这个子标题，我们可以在子标题上使用 org-id-get-create 来创建。请记住在 org-roam中无法直接链接标题和子标题，它实际链接的是一个id，我们在创建新的知识点时使用 org-roam-node-find 本身就完成了创建id的过程。另外我们可以通过 org-roam-ui 来将笔记的节点进行可视化(use-package org-roam-ui :vc (:url "https://github.com/org-roam/org-roam-ui" :rev :newest) :after org-roam :config (setq org-roam-ui-sync-theme t org-roam-ui-follow t org-roam-ui-update-on-save t org-roam-ui-open-on-start t))在Emacs 29及以上版本内置了通过github下载的功能，mepla 本身没有提供org-roam-ui 包，所以这里我使用内置的从GitHub下载的功能。在安装好之后可以通过 org-roam-mode 来开启笔记节点的可视化。它会创建一个web服务并打开浏览器访问 http://127.0.0.1:35901/具体的细节可以查看它的官方文档org-roam-ui因为我的笔记暂时都记录在 obsidian 中，还没有迁移过来，暂时不贴我的截图了。总结到此为止对我来说Emacs已经可以成为日常使用的代码编辑器、笔记管理、日程管理软件了。所以我的折腾就暂时告一段落了。但是这并不意味着这个系列的完结。后续如果当前的配置有问题或者我看到好的点子，又或者自己有什么想法实践之后觉得不错的也会更新到这个系列中。但是这个系列不会像现在这样大规模的更新了。我个人对Emacs的了解并不深入，当前的配置也仅仅是一个可用的状态。但是在编写此系列中仍然受到许多读者的喜爱，在这里感谢各位读者的支持与鼓励。在前面我的博客出现错误或者我有疑惑时也有比我强的读者给出意见，指出我的问题，在这里对他们进行感谢。终于从对Emacs的一知半解到拥有了自己的一套配置，虽然不完美甚至显得幼稚，但是在这个折腾的过程中我收获许多，下一阶段我想实践一下 懒猫说的认真读一读 Elisp reference manual 加深自己的理解。最后列举一下我在这个系列中参考的一些教程专业Emacs入门面向产品经理的Emacs教程21天学会Emacs还有其他一些我引用了但是忘记了具体链接的博客或者教程。
背景随着项目的进程，我们经常面临一个问题：发现之前的代码有bug，但是我不知道当初为什么这么写，如果改了会影响哪些？会不会把原来改好的bug又改出来了。我们可以通过 git 的提交记录来查看当初为什么改的。但是 git 提交记录的增长，一个文件提交记录可能有成千上万，要是从头到尾找一遍不知道要找到什么时候。更糟糕的是，好不容易找到了结果提交记录就一条 update at 2026/01/29。这种情况着实令人抓狂。要防止这种情况，我们可以从两个方面着手：要求整个团队规范git 的提交记录在IDE中能快速找到每行代码对应的提交记录规范提交记录git 原版的提交信息模板提交记录我们可以采取国际通用的 Conventional Commits (约定式提交)。它的格式如下:<类型>(影响范围): 一句话总结 <空行> [正文：详细解释为什么这么做，解决了什么痛点] <空行> [脚注：关联的任务单号 ID]正文部分我希望用 Why、How 这两个关键词，也就是为什么要改，如何改。git本身支持自定义 commit 信息的格式，我们可以将一个模板添加到 ~/.gitmessage。然后通过命令git config --global commit.template ~/.gitmessage来指定使用定义的模板，这里我定义的模板如下:<type>(scope): <subject> # --- 为什么修改 (Why) --- # 描述导致问题的现象，或为什么要增加这个功能 # --- 解决方案 (How) --- # 简述核心算法或处理逻辑 # --- 关联单号 --- # Fixes: #这里的 <type> 可以是修改的类型，这个部分是必须的，我一般喜欢定义这么几种类型bugfix (修改bug)feature (添加新功能)doc (更新文档或者注释)forspell (拼写修改)scope 代表的是影响范围，可以根据项目情况灵活的定义，例如在一个前后端分离的项目中，可以定义范围为UI、数据传输、权限等等模块最后的 subject 就是一句话总结，例如"修改普通用户可以访问其他用户隐私文件的bug"后面我可以通过 git commit 来触发模板，后续通过git 默认的编辑器(一般是vi 或者 nano)。lazygit 的配置lazygit 本身也支持自定义配置，它主要通过 config.yml 文件配置，默认的配置文件位置如下:Windows: %LOCALAPPDATA%\lazygit\config.ymlMacOs: ~/Library/Application Support/lazygit/config.ymlLinux: ~/.config/lazygit/config.yml我们可以通过一个命令快捷键触发一个规范化提交的功能。用户自定义命令的模板可以在这里找到。它以 customCommands 作为根节点。后面接 key，command 和 prompts。各个部分的含义如下:key: 用来触发命令的快捷键command: 真实触发的命令prompts: 触发时的行为prompts 是另一个根节点，用于定义详细的行为。它的子元素如下:type: 输入项的类型，有 menu 表示下拉列表框；input代表输入框；menuFromCommand根据用户提供的外部shell命令来生成一个下拉列表框title: 输入框的标题，提示我们这个框用来输入什么信息key: 在command中，需要填入一些数据，我们暂时利用占位符来表示，key代表的是某个具体占位符，需要与占位符对应如果我们的类型是 menu 的话，还需要利用 options 标签来表示具体的选项。最终我的配置如下:customCommands: - key: 'X' command: "git commit -m '{{.Form.Type}}{{.Form.Scope}}: {{.Form.Subject}}' -m 'Why: {{.Form.Why}}' -m 'How: {{.Form.How}}' -m '用例文档或者jira单: {{.Form.TestCase}}'" context: 'files' description: '规范化提交 (Gitmoji + Scope)' prompts: - type: 'menu' title: '选择提交类型 (Type)' key: 'Type' options: - name: '✨ feat (新功能)' value: '✨' - name: '🐛 fix (修复Bug)' value: '🐛' - name: '🚀 更新流水线或者部署脚本' value: '🚀' - name: '📝 docs (文档修改)' value: '📝' - name: '⚡ perf (性能优化)' value: '⚡' - name: '🎨 style (格式/美化)' value: '🎨' - name: '🍎 修复苹果系统上的问题' value: '🍎' - name: '🐧 修复linux 系统上的问题' value: '🐧' - name: '🏁 修复Windows上的问题' value: '🏁' - name: '🤖 修复安卓上的问题' value: '🤖' - name: '⬆️ 升级依赖' value: '️⬆️' - name: '⬇️ 降低依赖' value: '⬇️' - name: '♻️ 代码重构' value: '♻️' - name: '➕ 添加依赖' value: '➕' - name: '➖ 删除依赖' value: '➖' - name: '⏪ 代码回滚' value: '⏪' - name: '🔀 代码合并' value: '🔀' - name: '👽 因外部API改动而更新代码' value: '👽' - type: 'menu' title: '选择影响范围 (Scope)' key: 'Scope' options: - name: 'layout' value: '(layout)' - name: 'render' value: '(render)' - name: 'data' value: '(data)' - name: 'none (无特定范围)' value: '' - type: 'input' title: '简短总结 (Subject)' key: 'Subject' - type: 'input' title: '为什么修改 (Why)' key: 'Why' - type: 'input' title: '具体做法 (How)' key: 'How' - type: 'input' title: '用例文档或者jira单 (TestCase)' key: 'TestCase'在command 中利用git命令来生成一条记录详细提交信息的内容。{{}} 中包裹的都是占位符， .Form.Type 表示这部分内容来自用户后续提交的表单项 Type 中的内容。后续在 prompts 中某一个key的名称需要为 Type 以便进行对应上述提交的内容我仍然采用 Conventional Commits 的格式，首先 type 部分我采用 gitmoji 中规定的符号来表示提交的类型。影响范围我根据我当前的项目模块暂时定了 layout、render、data 等范围。正文部分我提供了三项，即 Why、How、TestCase表示为什么这么改，可以描述一下bug现象，产生的原因。How 表示如何修改的，可以简短的描述一下算法或者具体修改项。最后加上一个用例或者bug管理系统中的单子，因为我公司采用的是jira，所以这里我可以关联上jira单号IDE 中查看提交记录因为我在公司中主要采用 Visual Studio 和 Visual Studio Code，所以这里主要介绍它们上面可以使用的插件，至于我钟爱的NeoVim 和 Emacs，我还没来得及研究，暂时不介绍它们的配置了Visual Studio 中可以使用 Git Line Blame 插件。Visual Studio Code 上可以使用 GitLens 它们的作用都是显示光标所在行对应的提交记录。它们的效果各位读者可以自行到插件官方文档中找到截图。我们在上面记录了测试用例或者bug 单子的另一个好处时可以根据测试用例和bug单快速查找与之相关的提交记录。可以使用下列命令git log --grep jira-111实际上它就是一个 grep 过滤，如果使用管道加 grep ，它只会找到对应的输出无法关联到具体的提交记录，但是通过git log 提供的grep它会显示匹配上的具体的提交记录到此我觉得已经可以解决我个人的问题了，不知道上述内容对各位读者是否有用。各位读者如果有更好的想法可以在评论区留言，欢迎读者给我介绍新的解决思路
在前几篇文章中，我们经历了 GTD 流程中的收集想法、制定计划、以及执行和记录计划的过程，现在我们继续后续的流程，也就是最后的回顾和归档。当日回顾在我个人实践 GTD 的流程中，前一晚会做这些事情：回顾一下今天完成哪些内容哪些内容未完成的原因是什么？时间利用的效率不够？有其他优先级更高的任务占用了时间？任务划分的颗粒度不够细？今天时间利用的效率如何明天计划要做哪些事针对颗粒度的不够细的问题，我们可以考虑一下将事情分解成几个子任务，子任务又可以再分子任务。也就是加几个子列表的时期。如何查看时间的利用效率呢？我们可以统计各个任务的耗时。如果我们严格按照org-pomodoro 插件的方式来记录时间消耗的话，后续在一天结束时可以利用emacs中的报表功能来统计时间的消耗情况在org-agenda 视图的 Agenda 中，有一个名为 org-agenda-clockreport-mode 的命令可以展示当天的耗时情况。但是默认显示的内容比较简单，我们需要对其进行简单的改造，这里主要通过变量 org-agenda-clockreport-parameter-plist 来完成，我设置的相关代码如下: (org-agenda-clockreport-parameter-plist '(:link t ; 让任务名称可点击，快速跳转到原文 :maxlevel 5 ; 显示到第5级任务（数字可调，越大显示越深） :fileskip0 t ; 跳过耗时0的文件，让报告更简洁 :compact nil ; 设为 nil 以显示完整树状结构，而非紧凑模式 :narrow 80))之后我们可以在 Agenda 视图中按下R 或者直接调用 org-agenda-clockreport-mode 来显示任务耗时。这里因为我测试机器上数据不够，暂时无法显示出好的效果，就不给出图片了。各位读者可以自行实验。归档针对已完成的任务我们需要对它进行归档，将它们从事先定义的位置移动到另一个位置进行保存。每月或者每季度可以根据归档内容做一个总结。首先我们需要定义将归档的内容放到哪个文件中，可以通过 org-archive-location 来实现。(org-archive-location "~/org/archive/%s_archive::")上述代码可以将条目归档到原文件同级目录下以日期命名的归档文件中。我只需要在对应任务条目下执行 org-archive-subtree。但是针对我个人的需求来说，它有两个问题它会无条件的将我光标所在的任务和它的子任务进行归档，不管它是否有未完成的子任务或者它本身是否完成它需要在对应的org 文件中进行，对于任务分散到多个org文件中的场景无法一次性完成归档任务对应多个任务分散在多个文件的情况，我们可以使用 org-agenda 中的搜索功能找到所有的状态为DONE的任务。但是它会显示一些子任务，如果不仔细区分很有可能在主任务未完成的情况下将主任务进行了归档。目前我没有找到合适的方法来过滤这种情况。所以只能根据实际情况来辨别了。在操作上，我们可以通过在 org-agenda 命令面板上输入s 来搜索所有状态为 DONE的任务。然后在显示的任务中寻找需要归档的任务，最后将光标放置到具体任务上按下 $ 即可完成归档操作总结在本篇其实我想做的事情还是有的，但是能力有限现在没有找到有效的办法，我认为在归档方面需要做的改进主要有两个：提供简单的方法可以一键显示需要归档的任务，这个视图只显示主任务，其下的子任务不应该显示回顾当日任务时应该只显示任务名称，我不太关心它来自于哪个文件的哪个分支下哪位读者有相应的解决方案可以给我留言，或者在评论区给出。或者有更好的思路也可以留言评论。最后感谢各位读者的阅读。
故事发生的背景是陨石即将撞击地球日本的地带，大量的人类因为死亡到来而绝望，要么出逃要么崩溃自杀，整个社会完全瘫痪。居民区停水停电，没有信号，缺水少粮，富人寄希望与在撞击的远端建立避难所或者逃到外太空，穷人选择偷渡或者留在原地等死，扛不住即将死亡这种恐惧的提前自杀。书中的主角小春，母亲抛下他们自己逃亡，父亲扛不住压力选择了上吊自杀，她与弟弟相依为命。靠着父亲开小卖部攒下的零食勉强度日。小春有一个愿望就是在最后开车前往心意的地方，因此她选择了去驾校学车。在机缘巧合下遇到了同样没有逃走还在驾校坚守的砂川老师。就这样两位女性开始了这段故事。在一天早上准备练习开高速的时候，小春发现教练车的后备箱中被塞入了一具女性尸体。而在他们向警察局报案之后得知最近有另外两起杀人案件，就此砂川老师决定追随心中的正义，开始调查这几件杀人案。随着调查的深入，他们结识了晓人和小光两兄弟。随着调查的深入真相也渐渐浮出水面.....我个人认为，写推理小说的读书笔记其实不适合将故事描述太详细，读推理小说最爽的就是扑朔迷离的案情在侦探的调查下渐渐清晰明朗直到最后案件告破的过程。一旦在读书笔记里面介绍的太细致了，后续未看过小说的读者在阅读过程中的阅读体验将大打折扣。所以这里我就不详细展开了。这本书看简介应该是作者第一次尝试写的推理小说，比起老练的写手来说，本书的案件缺少扑朔迷离的铺垫，而书中给出的线索又太明显，对于一个经常阅读推理小说的读者来说，很容易猜到犯案的凶手是谁。在推理解密这块缺少了一些爽感。但是在通篇是男性作者，以男性视角展开的故事来说，女性作者，女性侦探的视角让人有一种眼前一亮的感觉。我认为书中女性视角下侦探的特点是温柔。她们总在考虑他人的感受，对情感的捕捉比较细腻。在本书中见识到了在末日来临下，普通人的挣扎，有扛不住压力自杀的，有像小光和晓仁兄弟那样在苦中作乐，关爱他人的，有利用他人弱点为自己牟利的，有关爱他人建立社区靠群众力量度过最后一段时光的，也有像砂川老师那样追随心中正义的，当然也有像凶手那样在最后深刻人性丧失，以杀人为乐的。作者探讨了在末日下人类得以建立起现代文明所依赖的道德和法制崩溃的情况下，迅速回到了原始社会弱肉强食的环境，普通人是如何挣扎生存的。以推理小说来看我觉得它不是我心中理想的推理小说，但是以末日故事来看，它是一部合格的末日小说。最后我要吐槽一下书的封面，封面像一本二流的网络小说，给我一种先入为主的感觉。
曾今我也是从学生过来的，见证过身边的人原来可能成绩不错但是在初中或者高中之后慢慢的跟不上节奏，慢慢的也就退学去了社会或者技校之类的。在毕业之后身边的小辈们也有厌学的，或者说不想上学的，我作为过来人也劝过。我曾今以为厌学的主要是因为吃不了学习的苦，特别高中时期。回忆起曾今的高中，我能记得就是上不完的课，写不完的作业，背不完的单词，记不完的公式。能回忆起来的美好瞬间就是跟朋友插科打诨，互相逗趣。这本书从另一个角度来看问题，这本书提到厌学不是学生个体的问题，而是家庭、学校、社会整个生态系统的问题。本书通过一些孩子的访谈揭露了他们厌学的客观原因。书中根据不同学生的访谈记录，列举了一些原因父母逼的紧父母认为人生需要提前抢跑，全力冲刺。从小学就开始规划，上重点小学，重点中学，再冲刺重点大学，特别是现在55分流的政策更加剧了这种心理和压力。在父母的高压下，孩子没有任何喘息的机会，孩子每天在学校、补习班之间转。并且还有大量的课后作业。父母盯得紧，一旦发现孩子想要休息或者中间出现停止学习的现象就会认为孩子在偷懒并且以好学校才有好未来作为说法不断的灌输给孩子，导致亲子关系出现问题。在这种情况下，厌学会表现出这样的过程：萌芽期：孩子作业拖拉，经常无法完成，成绩大幅下降。对抗期：不管有没有办休学手续，孩子已经完全不去学校了，放弃学习、沉迷手机、日夜颠倒、回避交流、拒绝外出。中、重度焦虑或抑郁的青少年还会出现自残行为和自杀倾向。妥协期：到了这个阶段，父母软硬兼施均告无果之后，被迫妥协修复期：终于要看见曙光了，修复期的父母会更从容，能够尊重孩子，也可以自如地表达自己的想法复学期：孩子有了复学的动向，通常是孩子自己主动提出的在孩子出现厌学时，作为父母要深刻的了解到孩子不是需要被解决的问题，是孩子遇到了无法解决的问题，也就是说，厌学只是表象，我们要问的不是“我该拿孩子怎么办”​，而是要绕到厌学背后去看一看“我的孩子到底怎么了”​。在发现孩子学不进去的时候父母们先把自己“稳”下来，不要唠叨，不要催促逼迫，不要一天到晚地问“你这样下去，你打算怎么办”​。请家长们“稳”下来，稳下来的父母才能让孩子感受到：休息是无罪的；调整是被允许的；我如此这般，天也是不会塌下来的。父母什么时候开始从改造孩子转变成反思自身，便是最为重要的转折点。父母的接纳会带来理解，而理解会带来改变。画重点，这里说的接纳，是发自内心地、全然地接纳孩子，而不是以推动孩子复学为目的的伪装手段。其实，孩子在等两个答案：1.现在的我，看起来一无是处，你们是不是无条件地爱我？2.你们能不能放权，让我成为自己学业和人生的主导者？当孩子能够确信父母的爱和信任，完全不担心父母对自己的失望和管控，他就会被注入新的力量，有了重新出发的动力。需要记住不管孩子状态恢复得有多好，要等，等孩子自己提。一旦父母主动提出复学的事情，那么孩子会敏锐的察觉出过去的体贴与照顾，过去的理解与关心都是装出来的，都是为了孩子能复学。这样会将问题再度退回到对抗期。作为父母，我们除了为孩子兜底，关键时刻还要托举孩子。家长们要不带评判地跟孩子复盘，引导他们不断地优化解决方案，从而帮助孩子提升迎战困难的能力。孩子不想成为父母的提线木偶，而是要感受到“我背后有人”​。现在的学业确实比较辛苦，孩子普遍都有补习班和各种兴趣班要上，在学习的过程中也应该要好好休息。关于学习的问题我想起《龙珠》种龟仙人对小悟空的教导：好好学习、好好锻炼、好好休息、好好玩耍。武道的目的不是为了向人炫耀也不是好勇斗狠，而是拥有一个健康的体魄，度过一个有意义的人生。套用到学习上，我想学习知识，上一个好的学校也是为了未来能过一个更轻松和更有意义的人生。家庭主妇在关爱孩子上过于精细良好的孩子一定来自于良好的家庭环境。有爱心的孩子一定是来自于有爱的家庭。有一些父母，特别是一些全职带娃的母亲，一辈子围着孩子转，不断的向孩子展示我做的一切都为了你，你要好好听我的话。他们会为孩子细致的安排着一切事物，小到今天穿什么出门，几点吃饭等等细节，孩子在他们手中就是提线木偶。完全没有自由可言。他们经常问的就是孩子大了之后怎么不乖了？怎么不听话了？怎么脾气那么大？怎么敢对家长大吼大叫了……其实没有那么多怎么了，就是因为孩子长大了，他们有了独立的思想、自主的意识，他们要“夺权”​。对于这类家长，要明白的一点是如果父母的教养方式特别顺应孩子的成长，他们没有必要叛逆。指望孩子有自驱力，那就请从主驾位置上撤下来，先坐在副驾上，帮孩子看看路况，再换到后排，偶尔提醒，待到他们成年，得体地下车，目送孩子稳稳地行驶在自己人生的大道上。家庭中父母情绪不稳定家庭中父母情绪不稳定，孩子在家战战兢兢，不知道下一步什么行为惹得爸妈不高兴。每一步都小心翼翼，整个家庭环境都很压抑，大家都顺着一个人。孩子来说，父母可以没有高学历，没有高收入，但是不能没有稳定的情绪。一颗种子无法正常生长，全赖种子不好吗？更大的可能会不会是土壤营养不足、缺乏水分或是有虫害？我们单对种子进行“改造”​，不对整个生态系统进行重建，等种子重回原先的土壤时，就真的能茁壮成长吗？我深表怀疑！更直白地说，孩子的很多问题，本身就是父母造成的，当孩子已经发展到无力继续学业的地步，那么首先需要改变的是父母。信奉打压式教育在网上经常看到这类视频，孩子犯错误了，父母会当着所有人的面大声斥责孩子。孩子拿了奖状回来想跟父母分享一下喜悦，父母觉得这是你该做的，没什么值得骄傲的，还有人比你更优秀。他们对孩子的错误无限放大，对孩子取得任何成绩都漠不关心。这类父母觉得太多的夸奖孩子容易滋生自满情绪。他们可能信奉孩子就像弹簧一样越打压将来反弹的成就越高。但是久而久之的，孩子话越来越少了，什么事都瞒在心里。亲子关系是教育的前提。没有正常的亲子关系，什么教诲、指导、引领，一切都免谈。细想想，待到年迈之时，孩子就算功成名就却杳无音信，我们真的会倍感骄傲和幸福吗？至于孩子，有家难回，会不会是一种刻骨的伤痛呢？不值得，真的不值得。抓紧孩子还在身边的时光吧，其实没有几年。让我们成为他们生命里最亲的亲人。夫妻关系不和不成熟的父母会将孩子搅进家庭争端中，不停地向孩子诉苦，让孩子为自己挺身而出。这是一种非常过分的越界行为，颠倒了亲子关系，使得孩子不知不觉成了这个家庭的“拯救者”​。作为父母，请让孩子安心做一个孩子，或者说创造一个良好的家庭氛围，让孩子可以安心做一个孩子，要知道“安心”是孩子们好好学习、健康成长的大前提。和睦的夫妻关系是最好的家庭教育，在潜移默化的日常示范中，让孩子懂得如何与自己相处、如何与他人相处、如何与这个世界相处，这才是一辈子的财富。遭遇校园霸凌这几年关于校园霸凌的新闻越来越多，看的让人揪心，自己也有孩子不免想到自己的孩子是否会遭遇到类似的事情。书中的案例，当孩子面对霸凌时无一例外，他们都曾向父母发出过求助信号，有些是直说，有些是暗示。同样无一例外，父母跟商量好了似的，都让孩子从自己身上找问题：​“你是不是做了啥不对的事？​”​“那么多人，为什么只欺负你呀？​”​“你管好自己，别去惹人家不就行了？​”……这种回复，对孩子无异于二度伤害。真正疼爱孩子的父母，请认真研究一下霸凌的定义，对照孩子的现实处境和身心状态，该维护孩子的时候一定要第一时间挺身而出，这是制止霸凌最快速、最有力的行动。孩子在校园的人际关系出现了问题紧张的师生关系和有隔阂的同学关系是导致孩子厌学的两大重要因素。一直以来，我们把师生关系比喻成园丁与花朵，可不知从何时开始，花朵对园丁产生了“厌恶”与“恐惧”​。教师随意斥责学生，甚至挑起学生间的矛盾，引导学生孤立某些看不顺眼的学生。激发了孩子们的心理反应。胆战心惊的不单是那个被老师当堂斥责的同学，还有身处这个压抑氛围里的其他每一个学生，他们躲过了老师的谩骂，但躲不过伤害。如果在这样的班级里，还找不到能够建立友谊的朋友、进不了能够获得归属感的团体，那就“雪上加霜”了。这样的学校就像一个监狱，出来了就不想再回去。甚至有些家长只信任老师而不信任自己的孩子，怕孩子惹老师不高兴一味的要求孩子给老师道歉。就像旧社会将孩子交给老师后签了生死状，老师可以随意处理学生。孩子在家里，他们需要包容父母；在学校，他们需要包容老师。那么，谁来包容孩子呢？孩子在学校的人际关系出现问题，首先要回到原点，无条件地爱孩子，接纳孩子本来的样子，用我们最大的能量去托举他们，尤其在他们跌到低谷时。总结有些时候孩子厌恶的可能不是学习本身，而是与学习相伴的恶化的亲子关系、紧张的校园人际关系。幸福的家庭总是千篇一律，而不幸的家庭各有各的不幸。什么是最好的家庭教育？和睦的夫妻关系、将孩子看作一个独立的个体、尊重孩子的心理感受、愿意倾听他们的心声、无条件的信任自己的孩子。作为一个孩子的父亲，这本书给我提供了一些爱孩子的建议。我希望我的孩子永远不会遇上书中的案例中的情况，希望她能过一个快乐的，有意义的人生。
在上一篇文章中，我们简单介绍了 gtd 的一些理念，并且也通过org capture 完成了 gtd 中收集的操作。gtd分为收集任务、整理、执行、回顾。本篇我想通过org todo 来聚焦整理和执行这两个步骤整理上一篇文章中，我们通过org capture 收集到了一些任务，针对这些任务我们还需要给每个任务安排优先级并且根据优先级来确定开始执行的时间。显示待办事项我们在前面的模板中，待办任务前面都是以 TODO 开头，这里的TODO就是org 中待办事项的一个标识。我们可以通过 org-agenda 来查看相关的任务。打开该页面之后，它列举出了所有的支持的一些快捷键。例如使用 t 显示所有的待办事项，使用 m 来根据 PROP、TODO、TAGS 来查找任务。但是第一次使用时会发现自己兴冲冲的咔咔一顿添加任务，结果到头来通过 org-ageda 的 t 来列举之前添加的待办任务毛都没看到，顿时好奇兴奋的心情一下跌倒谷底。别着急这是因为我们没有告诉 org-agenda 该去哪里找这些待办事项。我们可以通过 org-agenda-files 来告诉org-agenda 这个信息就像名称显示的那样 org-agenda-files 是一个列表成员，我们指定它去这些文件中查找待办事项； (use-package org-agenda :ensure nil :custom (org-agenda-files (list "~/org/reading.org" "~/org/blog.org" "~/org/working.org")))这里我设置了三个 org 文档，这三个文档分别记录待读书目、需要完成的博客以及工作任务。需要注意的是我们需要这几个文件真实存在否则就会报错。设置好了这个变量之后效果如下:设定优先级列举出所有任务之后，针对每个任务我们可以考虑如何安排这些任务，首先需要的就是考虑给它从那四个维度安排一个优先级。上面说到我们可以使用A、B、C、D 做一个标识，这里我规定优先级的顺序是:A > B > C > D为了达到这个需求，首先我们要解决的是优先级的定义问题，因为Emacs默认只支持A/B/C这三种优先级，我需要它能支持4种。Emacs种有两个变量分别控制优先级最大值和优先级最小值，它们是 org-highest-priority 和 org-lowest-priority。另外还有一个变量可以设置默认的优先级 org-default-priority。理论上它可以设置优先级从A到Z，但是过多的优先级并不适合。我们可以在上面的 :custom 下使用下列的语句进行设置 (org-highest-priority ?A) (org-lowest-priority ?D) (org-default-priority ?D)设置完成之后可以使用 S-UP (Shift + 上箭头)或者 S-Down(Shift+下箭头)来调整优先级设置计划执行时间和结束时间安排好了优先级，我们就需要为每个任务安排时间了，这里可以安排计划开始时间和结束时间。开始时间和结束时间在 org agenda 中分别是命令 org-agenda-schedule 和 org-agenda-deadline。它们被绑定到了快捷键 C-c C-s 和 C-c C-d上面。当我们通过快捷键或者 M-x 调用这两个命令的时候，Emacs会弹出日历菜单供我们选择日期，默认提供了三个月的日期可供选择。如果不够的化，日历下方两个各有一个箭头可以向上或者向下再显示一个月。另外可以在下方 mini-buffer 处输入 +1d 这样的字符表示在当前时间的1天以后，根据这个规律我们可以输入 + 后面跟任意的数字，然后后面加 d/w/m/y 来表示天、周、月、年。设置任务属性和标签有些任务，特别是工作中的任务我们自己可能无法单独完成，例如某个bug需要前端或者后端一起完成又或者这个bug不光前端要改后端也需要改，这个时候我们修改完了自己的部分，这个时候可以显示我们将任务派发给了其他同事。又或者这个bug牵扯到其他bug，又或者有时候需要开会或者整理需求文档，这个时候我们需要记录该任务的场地例如对于会议可以记录一下在 D-01 会议室。这些可以通过设置属性和标签来描述这些信息。我个人认为它们二者在记录任务的额外信息时没有什么大的区别。主要区别在显示方面，标签一般于TODO 信息展示在一行，而属性默认是被折叠起来的，所以对于一些简要的信息，例如任务目前是谁在处理、开会的地点这类信息我习惯放置到标签上、而属性放置一些不那么重要的信息。对于标签，我们可以在设置任务时，在任务后面使用 :TAG1:TAG2: 这种方式添加多个标签。在前面介绍 org-capture 的文章中我给出了一个创建工作任务的模板 * TODO %^{任务描述} :%^{任务类型|dev|bugfix|env|doc|meeting}:\n SCHEDULED: %^t\n PRIORITY: %^{优先级|A|B|C|D}\n %?\n %i"。任务类型部分就是一个标签,这里我只设置了一个标签。我们可以事先使用 org-tag-alist 来规定一组标签以及打上这个标签所需要的快捷键。这个变量是一个列表类型，每个列表包含一个cell，cell的第一个元素是一个标签的名称，第二个元素是对应的快捷键。同时它也可以通过 :groupstart 和 :groupend 来定义一组互斥的标签项。例如针对任务我们可以定义如下的标签 (org-tag-alist `((:startgroup) ("dev" . ?d) ("bugfix" . ?B) ("env" . ?E) ("doc" . ?D) ("meeting" . ?M) ("reading" . ?R) (:endgroup) ("Sendto Tom" . ?T) ("Sendto Jerry" . ?J) ))需要注意这里标签过多的话，我们需要避免出现快捷键重复的情况。设置了标签，我们可以使用 C-c C-q属性是放到 :PROPERTIES: 下的一组键值对，默认情况下是被折叠的。属性相对于标签来说更加灵活，能显示的信息也更加多样化。我们可以使用 C-c C-x p 来设置属性设置子任务有时候一个大的任务分为几个小任务，例如某个bug可能包含几个方面的问题甚至需要不同组的开发人员进行协调。这个时候我们可以将一个任务分解为几个子任务org mode 中对于子任务的表现比较简单。子任务就是任务下的一个次级的 headline。我们可以在主任务后面加上 [/] 或者 [%] 来根据子任务的完成情况自动更新主任务的完成进度从上面的截图上看，关于子任务还有两个问题没有解决，首先在将任务状态由TODO 切换到DONE时，checkbox的状态应该是勾选的。第二个问题就是当所有的子任务都完成之后应该将主任务的状态改为done。这些我暂时没有找到好的解决方案，所以不展开说明了。任务状态切换上面我们看到可以通过 C-c C-t 来切换状态，但是我们只能在TODO|DONE之间进行切换。以我个人的习惯来说，我还需要几个关键字:WAIT: 等待，一般是任务完成需要等待其他人的配合，例如bug的产生可能是多个模块共同作用，需要等待其他人修改完ABORT：终止DOING: 正在执行这里我说的是关键字，但是它并不代表org todo 中任务实际的状态。事实上org todo中只有两种状态，TODO和DONE表示未完成和终结，我们无法在中间插入新的状态，能做的也只有在两种状态之间插入一些新的关键字。插入新的关键字可以通过设置变量 org-todo-keywords。根据Emacs的文档显示，org-todo-keywords 原始的值为 ((sequence "TODO" "DONE"))。因为这里需要一个有序列表，也就是说Emacs会保证状态切换时按照我们定义的顺序进行切换，并且切换到最后一个关键字时会认定任务已经处于终止状态，后续可以针对这个终止状态来进行一些操作。所以这里需要通过 sequence 函数来保证设置的是一个有序的列表这里我们针对终止状态设置了两个关键字DONE和ABORT，我们可以通过在中间插入 | 的方式告知Emacs，| 之前的关键字是未完成的状态，| 之后的是终止的状态。我们可以在 :custom 下加入 (org-todo-keywords '( (sequence "TODO(t)" "DOING(i)" "WAIT(w@/!)" "|" "DONE(d!)" "ABORT(a@)") ))) 这里后面括号中的字母表示可以在 C-c C-t 之后按字母快捷键快速选择状态，@表示需要由用户填写理由，例如针对等待的任务可以写明需要等待某个子模块修改完成。而后面的 !表示会插入一条包括时间戳的记录。至于 / 则是中间的一个分隔符现在它的效果如下:接入番茄工作法前面介绍了关于任务的定义和关键字的切换，现在我们的流程可能就变成了:通过 org-capture 收集任务将分析任务确定任务的优先级以及计划执行和结束时间通过org-agenda 查看当天需要执行的任务执行任务任务完成之后切换状态在执行任务的过程中我们可以采用番茄工作法来保证时间的高效利用。Emacs中可以嵌入有关番茄工作法的插件来做到。这里推荐使用 org-pomodoro 插件(use-package org-pomodoro :ensure t :custom (org-prmodoro-length 25) ;每个番茄钟25分钟 (org-pomodoro-short-break-length 5) ;; 短休5分钟 (org-pomodoro-long-break-length) ;; 长休15分钟 (每4个番茄钟之后) (org-pomodoro-play-sounds-t) ;; 启用提示音 )在使用时我们可以将鼠标放置到需要执行的任务上，然后执行命令 org-pomodoro。如果出现打扰的情况，例如有同事突然找到你，希望你提供帮助或者外卖电话到了要去拿外卖这个时候可以通过再次执行 org-pomodoro 停止计时。我们可以看到在番茄钟启动之后下方的 minibuffer 中有番茄钟的倒计时。到此为止，我们现在自建的任务管理系统已经可以到执行这步了，这个系统后续只剩下如何进行进行归档与回顾了。关于这部分将在下篇文章中给出我的一些实践，谢谢各位读者的关注
故事发生在二战之后的法国，因为戴高乐撤出阿尔及利亚导致部分军官的利益受损，他们组成了秘密军组织，该组织希望通过暗杀戴高乐来达到政变的效果。但是因为错误的计算了日落时间导致对面的杀手没有第一时间看清行动的手势，错了这么几秒钟，原本应该正面短时间内向载着戴高乐的车进行射击变成了从车子屁股后面进行射击，子弹刚好从戴高乐身边飞过。在这次刺杀失败之后参与这场刺杀的秘密军高层被逮捕，同时法国安全局在秘密军组织中派遣大量卧底，导致后续几次暗杀计划失败。此时新的高层罗丹上校决定聘请外国的职业杀手进行，并且计划只在三个高层中被知晓。经过大量的筛选，一个亚麻色头发的英国人进入他们的筛选范围并且最终他们同意聘请这个杀手进行计划。在与杀手交谈中，杀手索要50万美金，并且他们需要预付25万的定金。并且需要保证几个高层不被法国方面逮捕。这件事就这么敲定了并且杀手的代号暂时定为“豺狼”。后续豺狼进行了计划，首先他阅读了大量关于戴高乐的书籍、新闻等资料，确定了戴高乐的个性。认为以他的个性一定会在独立日那天在公众前露面，那个时间就是最佳的暗杀时间。后面他先后制作了一个方便携带和伪装的枪支。伪造了几张护照，分别是一个在2岁就死去的英国人杜根、一个奥地利的牧师、一个美国学生、还制作了一个法国人的身份证件。还单独去了趟法国，以旅游的名义实地考察暗杀的地点。有了这些一手的资料，他脑海中已经有了完整的刺杀以及刺杀后脱身的计划。在回国前他将藏有枪支的行李箱用杜根的名义寄存在法国的行李寄存处。秘密军组织为了配合豺狼的行动，在法国一个高官身边利用美人计安插了一个卧底方便后续获取戴高乐的行程计划。根据豺狼的建议，秘密军组织命令手下大量抢劫法国境内的银行。法国方面他们发现最近秘密军组织大量抢劫银行、并且三个高层的人物一反常态的躲到罗马一间酒店。他们包下酒店的两层，最高层住着三个领袖，下面一层都是保镖，因为政治关系法国方面无法大张旗鼓的去罗马抓人，而安保的严格程度也不存在秘密抓捕的可能。法国方面似乎陷入僵局。法国政府后面发现秘密军组织高层与外界进行通信的方式是由一名叫做科瓦尔斯基的保镖进行，科瓦尔斯基也是当初驻阿尔吉尼亚的一名军官，他誓死追随罗丹上校。但是他唯一的软肋是他的女儿，他的女儿由他的好友代为抚养。法国安全局利用他的好友欺骗他，说他的女儿得了白血病。此时科瓦尔斯基心中涌起强烈的欲望希望去见女儿一面，本以为这次只是利用休息的几个小时加上请个短假，也就花48个小时去见一面不耽误后续工作，完全没想到是法国方面的圈套。终于在连续的审问中，从科瓦尔斯基口中听到豺狼的名字，联系最近大量的抢劫银行，法国方面推测出秘密军组织聘请外国刺客豺狼准备搞新一轮的暗杀，因为这个刺客要价不菲所以需要通过抢劫银行筹钱。有了这些信息，法国的高官们也劝戴高乐停止后续的活动，等抓到刺客之后再进行公开的活动。但是与豺狼猜测一样，戴高乐高傲的性格并不是那种会因为不明刺客的暗杀而惶恐不安的人，另外戴高乐认为如果因为卑鄙的刺杀行为就躲躲藏藏有损法国的形象。就此戴高乐命名法国相关部门秘密调查豺狼，并且不允许告知下属，也不许见诸媒体。法国高层经过开会决定由探长勒贝尔带队秘密搜查豺狼的下落，至此双方的较量正式开始勒贝尔首先求助于其他七国的警察组织帮忙寻找杀手的信息。勒贝尔在于其他国家请求帮助时并没有说明事件的原委并且是以个人名义进行的非正式请求。但是以各个国家的政治嗅觉也很容易猜到是法国总统的安全受到威胁。同时英国人觉得如果刺客是英国人到时候真出了事，外交上会闹的很难看，所以英国首相授权英国全力配合法国。几乎从整个英国寻找符合条件的人几乎是大海捞针，但是事件的转机往往是那么的戏剧性。民间流传两年前多米尼加的总统遇刺身亡，杀手在及刁钻的角度打爆了整个车上唯一小一块非防弹玻璃。从这个点出发，他们找到了两年前前往多米尼加的所有人，在根据日期、年龄、是否熟悉枪支的条件下排除了大部分人，唯一留下了一名叫做查尔斯卡尔斯洛普，他是一个军火公司的推销员，他熟悉枪支，并且在多米尼加总统遇刺时正好在多米尼加境内，同时英国人认为他姓和名的前几个字母凑起来正好是 Jackel 豺狼。根据这个线索他们找到了查尔斯的住所，根据邻居所说查尔斯准备去钓鱼，并且已经出发了，要好久才会回来。英国人在检查查尔斯入住的公寓时发现他的护照正好在家里，这也就证明，豺狼出国用的是假护照。据此英国军情六处开始倒查三个月之前用已死亡公民的信息申请护照并且最近几个月有出国经历的人。经过一个晚上的筛查，查到了豺狼的第一个假身份——杜根。豺狼刚好利用这个身份从意大利租了一辆车，并且特意绕远路从陆上进入法国境内，因为法国之前根据英国的情报通知全境搜查高个子亚麻色头发一个名叫查尔斯卡尔斯洛普的英国人。豺狼在入境时明锐的发现法国边境对亚麻色头发的外国人进行了格外严格的检查。在顺利入境之后，豺狼找到了之前寄存行李的地方，通过一个晚上的改造将枪支藏到车子下方排气管的位置。并且通过卧底的情报得知消息已经暴露，秘密军组织劝豺狼停止计划，不过也明确告知这个建议并不是来自罗丹的命令。豺狼为了这50万美金决定继续干下去。因为豺狼每天都过着精致的生活，要想后半辈子生活质量不下降就必须完成任务得到这笔钱。在意识到杜根这个名字随时可能暴露之后，他又采用了奥地利牧师的身份乘坐火车准备前往巴黎。但是牧师的身份很快也暴露了，书中没有提到警察是怎么识破这份伪装的，但是在警察大肆搜捕这个身份时，豺狼正好抵达巴黎并且利用新的身份入住了酒店。豺狼辗转几次之后又利用美国学生的身份的入住了酒店，在这个酒店里面他认识了一名伯爵夫人并且与之发展成情人关系。在第二天豺狼提前离开了酒店，将车开到郊区并且停在中间花了大量的时间进行改装，主要是换了汽车颜色和车牌。法国警察在对比最近外国人补办护照的相关信息之后确认豺狼身形相貌于一个丢失护照的美国学生类似，因此根据这个身份查到了豺狼入住的酒店，但是因为登记时豺狼是中午退房但是豺狼已经提前离开，警察最终又扑了一个空。在接二连三的失利之后，勒贝尔决定利用他手中的权力窃听所有参加高层会议的高官家中的电话。在豺狼逃脱追捕之后，他意识到不能在入住酒店了，在到底巴黎之前他决定利用之前看到酒店登记的旅客信息前往伯爵夫人的家中。在接近伯爵夫人所在城堡之前他将汽车开进一处写着禁止入内的森林深处，并且小心翼翼的处理了汽车压过的痕迹。在伯爵夫人的住所春宵一刻之后，他利用城堡中的电话得知美国学生这个身份已经暴露了，但是他还有一个更加隐秘的身份。好巧不巧，伯爵夫人通过监听豺狼的通话发现他是一个杀手。豺狼也通过挂断电话的嘟嘟声也意识到自己的电话被监听，在得知是伯爵夫人监听电话之后他毫不犹豫的杀掉了夫人并且伪装成夫人正在睡觉。在安置好现场之后豺狼利用床单从窗户来到楼下偷了一辆汽车离去。在晌午之后，仆人发现夫人身亡报警之后已经过去好几个小时，豺狼早就逃之夭夭了。此时法国警方在报纸上发布夫人身亡的消息并且发动群众力量寻找符合特征的杀人凶手。但是就是这么凑巧，此时豺狼通过勾引同性恋者已经入住同性恋所在公寓。当然豺狼也是在同性恋发现新闻报道上的事之后进行了灭口。就这样靠着在同性恋公寓中的食物和水，时间终于来到了法国独立日庆祝的日子。豺狼此时又装作一个充满荣誉但是命不久矣的老兵博取守卫士兵的同情。为了装的像样豺狼事先吞服了一些火药，在火药的作用下成功骗过了站岗的士兵，准许他进入封闭区域。在封闭区域中他溜进了事先踩好点的公寓，利用这个身份骗取某间房间主人的信任，在主人转身为他倒水的空隙成功制服了房间的主人，并且在此组装了枪支，就等戴高乐进入狙击范围了。而勒贝尔虽然通过监听发现卧底断了豺狼的情报来源，但是仍然无法找到豺狼，而戴高乐又决定必须参与独立日活动，法国警察的压力也是空前巨大，一方面勒贝尔决定利用黑帮的力量继续搜寻豺狼下落，另一方面法国警察全力保卫戴高乐的安全，能进现场的通行证都是在当前换发的新证件，参与保卫的警卫必须经过多位同事担保防止豺狼化妆混进来。在勒贝尔进行巡查时偶尔间向士兵提问，是否有可疑人员，士兵回答只有一个病入膏肓的老兵。勒贝尔意识到这个老兵可能是豺狼的伪装。在勒贝尔赶来的时候，豺狼架好了狙击步枪并且找到了最好的射击角度。在扣下扳机的时候戴高乐突然低头轻吻面前的老兵，就是这一动作是他与死神擦肩而过。在装入下一发子弹等待下一次狙击机会时，勒贝尔破门而入并且发现了豺狼，在一番混战之下守卫的士兵牺牲了，但是勒贝尔成功击毙了豺狼，至此豺狼的日子结束了，这场暗杀阴谋也失败了。豺狼的故事是最好的间谍小说，作者用电影的叙事手法，同时利用多视角给我们阐述了交战双方的情报和进度，为我们展现了一场精彩的猫鼠游戏。我个人的语言无法精彩的描述书中故事，感兴趣的读者应该拿起书本认真阅读，你一定会为精彩的故事折服。
时间过的飞快，转眼间2025年已经过完了，进入了2026年。前几年经济状态一般，有出现工资拖延的，有失业的，大家的日子似乎都不好过。不管怎样还是祝愿各位读者有一个不留遗憾的2025和精彩的2026。2025年回顾我想还是按照惯例从生活、工作、学习的情况来回顾一下。生活今年与去年的一个不同是，下半年我将孩子送回老家去上老家的幼儿园了。这边的幼儿园入学需要年满3岁，我的孩子是2022年9月生的，今年不能入学，所以让她回老家先上学适应适应。送孩子回老家也是一个无奈之举，我跟老婆都需要上班，家里的老人都不愿意长时间待这边带孩子。家里的老人还是喜欢老家那种走家串巷的关系，每天都有人闲聊，在这边人生地不熟每天关屋里，大人孩子都难受，而且老家的人际关系和北京的不太一样，北京这边好像大多数人都把自己和家人关在家里，小区每天看不到多少人，社区儿童区虽然有孩子，但是大多数都没见过，孩子跟其他小孩也玩不开，在老家孩子可能玩伴多点。老婆比较心疼孩子不想以后孩子变成留守儿童，跟我说了一下她想不上班专心在家带孩子，但是作为程序员我也快接近35岁大关了，虽然目前工作还算安稳，但是项目具体还能撑多久谁能知道呢。失业了短时间内可能不太好找同等价位的工作，有一个人上班分担经济压力我回轻松很多。而且我个人认为经济基础决定上层价值，陪伴是建立在经济基础之上的。老家是开小卖部的，我们在老家的小卖部和门口一块孩子经常玩的地方也安装了监控，就是想从监控里面多看看孩子。看着她比在北京这边要开朗的多，她最近也学会了走街串巷，她会邀请她的好朋友来家玩或者去朋友家里玩。这点我觉得比北京好，孩子玩的舒服。我经常问她想不想爸妈，想不想来北京。对于前者她会给肯定的回答，但是就是不想来北京，她说来北京天天在家看电视很无聊。孩子不在身边有时候会感觉空虚，在家无所事事。特别是周末有时候老婆上班去了，我一个人好像特别无聊，虽然一个人是学习一点新东西的好时期，但是有时候就是提不起精神。我躺沙发上刷手机或者看监控，看看孩子在干嘛。虽然也会写博客，尝试着折腾一下Emacs，一旦遇到问题，特别是有些配置报错与预期不符合的时候心里总有一个声音告诉我，上班就够累了，假期就不要看了，而且以后出去面试也没人问Emacs的内容，想到这里有时候就放弃了。但是最后回过头来发现好几个星期都没一点进展，心里又觉得自己虚度光阴。过去这种虚度光阴的罪恶感仅仅是感叹大好年华被虚度，现在有了孩子之后，就觉得有点对不起孩子，孩子还等着我功成名就，陪伴在她身边(虽然她没对我说过，但是我觉得这是我的责任)，我却不求进取，得过且过。虽然现在的社会并不是努力了就有经济报酬而且工资水平不一定跟技术水平挂钩，但是多学点技术总归心里踏实点。工作方面工作方面，今年公司发生了重组，并且拉到了一笔大额的投资，我想这笔钱至少能撑5年。也就我的工资待遇至少能维持5年不变，另外公司给了一部分股票期权，虽然没有上市，但是承诺2年后可以兑现，这也算是一笔额外的收入。工作上我个人承担的任务比起去年要更大了，2025年还是完成了一些比较大的工程量，我个人认为主要的就是：实现了一套可以跨平台的解决方案，并且我将原来的C++17标准的代码改写成了支持 C+11 标准，以便在一些比较老的系统上运行。这也是没有办法的事情，Ubuntu 18.04 已经快被淘汰了，还有些部门使用Ubuntu 16，为了它们上边gcc 只支持C++11/14的情况，我们的代码必须做降级。在这个过程中，我发现自己在C++ 模板方面的知识几乎等于0，也就只会用标准库。这次降级的过程中主要是需要实现C++17以后才会出现的特性例如 optional、variant等等，我发现自己即使找到了一些实现的代码自己完全看不懂，后面慢慢了解了类型推导、萃取、特化和偏特化、SFINAE等等概念。我想今年的要恶补模板元编程相关的内容了。学习方面，从今年开始逐步更新Emacs相关的博客了，我对于Emacs的理解是不如vim的，老实说我在更新的过程中有想过烂尾，但是我内心有一个想法，我不能再重复前几年的状态了，什么都学，但是什么都不愿意深入的学，我想找回自己刚开始那种对技术的好奇和那颗钻研的心。曾今学习汇编语言那个时候通宵调试代码，研究Windows编程时那种专注，对比现在，我好像已经丢失了对技术的敬畏之心，失去了对计算机世界那种纯粹的好奇。我希望自己能慢慢捡起那颗对技术好奇、对技术有敬畏的心。理财方面关系理财方面，今年我看了很多投资理财相关的书籍，总算形成了自己一套投资交易的方案。从历史上看我这套交易模型平均年化收益在10%左右，我想通过未来几年来验证它是否真的有效。今年的收益为 16%2025年的目标实现情况生活目标生活上去年许下的出去旅游的计划已经实现了，今年主要是国内游，在北京周边几个城市跑了一圈。原来计划孩子在这边的时候每周带出去玩，这个计划也完成了，因为孩子大了之后她自己就会带着我往外跑健康上原来计划的饮食习惯也就头一个月坚持了一下，后面随着家里的老人带着孩子来北京住了一段时间，在这期间跟着家人吃饭后面完全没改正过来，结果体检的时候老问题没解决，体重又增加了，还出现了新的问题：尿酸已经快要超过正常值了右肾有颗3mm左右的结实体重偏重，血压也快超过正常值了轻度脂肪肝工作上今年最重要的就是项目支持的标准降级以及跨平台的支持。去年总结时提到的一些提交规范今年很好的遵守了。个人学习方面今年读的最多的就是投资理财相关的书籍；今年算是最近几年阅读量最大的一年了。博客主要在更新Emacs相关的内容。个人娱乐时间今年我又把switch拿了起来，买的游戏卡带不玩感觉有点浪费。王国之泪其实越往后玩起来感觉越有意思，当初可能先入为主了，而且玩的是前期，前期感觉生存都是问题，还没进入到深度体验。2026年的计划生活上首先还是出去旅游一次其次孩子回老家了，今年下半年已经满三岁了，可以在这边办理入学，我希望她能来北京上学健康方面健康饮食，早午餐正常吃，晚餐吃玉米和苹果配合运动，每周至少1小时的运动时间年中做一次体检工作上因为我已经慢慢习惯使用Emacs记笔记，我希望今年能继续保持这个习惯我计划每天早上抽一个小时的时间学习一下C++ 相关的内容，特别是模板编程方便的学习关于博客的更新计划：继续更新Emacs相关博客，计划今年上半年更新完尝试更新一下学到的C++ 模板编程方面的内容后续重新更新PDF相关内容读书方面，继续阅读一些投资理财的书籍，并且根据书中的内容尝试着读一些公司的财报。娱乐周末看一部电影周末继续玩王国之泪本次的总结就到这里了，感谢各位读者的阅读