<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="rss-style.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>醒石</title><link>https://leonscave.com/</link><description>Recent content on 醒石</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>leon.its@outlook.com (leon)</managingEditor><webMaster>leon.its@outlook.com (leon)</webMaster><lastBuildDate>Thu, 31 Jul 2025 15:39:52 +0800</lastBuildDate><atom:link href="https://leonscave.com/index.xml" rel="self" type="application/rss+xml"/><item><title>终于辞职</title><link>https://leonscave.com/p/2025/zhong-yu-ci-zhi/</link><pubDate>Thu, 31 Jul 2025 15:39:52 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/zhong-yu-ci-zhi/</guid><description>&lt;p>今天是我在这家公司的最后一天，心理反而生出些不舍。辞职的念头很早就有了，许多人劝我不要离职。五月份时我跟 leader 说了我的想法，leader 也劝我多想想，离开了这里，以后可能再也找不到这样的工作。这里工作很轻松，薪资也很不错，但我依旧觉得自己病了，是闲出来的病。我是一个很需要外部驱动的人，之前也想着在空闲的时间里做做自己的事情，但最后还是发现，我不适合这里。&lt;/p>
&lt;p>在这里工作消磨了我的热情，努力和想法永远得不到认可，稳定永远摆在第一位。周围的人也是做一天和尚撞一天钟，我也受到这样的影响。许多人说工作只是一份工作，养家糊口而已，何必这么认真？我也不知道我将来会不会后悔，只是我还年轻，没受过什么毒打，不想被困在牢笼里。&lt;/p>
&lt;p>回望两年前自己第一次踏进这家公司时，踌躇满志，离开时双目无神，也是唏嘘。&lt;/p>
&lt;p>久在樊笼里，复得返自然。辞职以后去干什么，暂时也没想好，我也不是很需要工作，只想好好休息一会。&lt;/p>
&lt;p>博客也很久没有更新了，上一篇还是一个月前，很多朋友关心我，在这里表示抱歉与感谢，接下来还是会回归更新，多写点文字。&lt;/p></description></item><item><title>最近重新陷入到无明的状态中</title><link>https://leonscave.com/p/2025/lost-in-confusion-again/</link><pubDate>Mon, 23 Jun 2025 21:36:20 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/lost-in-confusion-again/</guid><description>&lt;p>不知是不是之前的熬夜通宵，让我这本就破败的身体发出了抗议。我重新陷入了无明的状态，感觉自己很混沌，做什么都没有心思，焦虑，苦闷写满了每一天的日记本。唯一取乐我的内容是短视频和酒精。&lt;/p>
&lt;p>博客也许久没有更新了，有一篇文章胎死腹中，因为太难写了，不得不停笔。我的完美主义障碍重新复辟，写不出来，那就不写了，这种摆烂的心态笼罩了我。我知道这样不对，告诉自己要克服，可是举步维艰。&lt;/p>
&lt;p>我每隔一段时间就要陷入这样的无明。觉得自己无所事事，但又不知所措，每天都过的浑浑噩噩，事情在摆在眼前，却不愿意行动。时钟转的飞快，眼睛一睁一闭，一天就过去了，不知道自己做过什么。&lt;/p>
&lt;p>前几天生了一场大病，好几天夜里高烧快到 40 度，跑了好几次急诊，很煎熬。好在还是有 Lena 照顾我，很感激她。&lt;/p>
&lt;p>我尝试了一下打坐。冥想了一会，只觉得想睡觉。能助眠，倒也挺好。&lt;/p></description></item><item><title>GTA V：谈谈我心里的崔佛</title><link>https://leonscave.com/library/games/talking-about-the-trevor-in-me/</link><pubDate>Mon, 02 Jun 2025 18:42:35 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/library/games/talking-about-the-trevor-in-me/</guid><description>&lt;p>GTA V 里有三个主角可以操控，分别是富兰克林、麦克和崔佛。&lt;/p>
&lt;p>我最喜欢的角色是崔佛，游玩他的时间也是最多。这很奇怪，因为在大部分人眼里，崔佛总是被描绘成一个疯子。他无恶不作，是个恶魔。&lt;/p>
&lt;p>有一句话叫做 &lt;strong>如果你看到一个人很奇怪，那他一定在忍受某种痛苦&lt;/strong>。在我眼里崔佛亦是。&lt;/p>
&lt;h2 id="创伤根源">创伤根源&lt;/h2>
&lt;p>崔佛有很严重的精神疾病，这和他悲惨的成长经历脱不开关系。他童年时长期被父亲家暴虐待，而母亲沉迷毒瘾，对他实行精神控制，让他对母亲言听计从。这使得他自卑、敏感、性格乖戾，以及产生了严重的恋母情节。在游戏里，崔佛不允许有人拿他的出生开玩笑，以及侮辱他的母亲（听到 mother fucker 等词汇会暴怒），否则就大开杀戒。而在游戏剧情中，崔佛绑架并爱上了大自己十几岁黑帮老大的女人，还被她管的服服帖帖，表现的像个孩子。&lt;/p>
&lt;p>由于缺乏照顾，崔佛小时候还遭到一位小丑扮演者的性侵，导致他成年后一直惧怕小丑这角色。&lt;/p>
&lt;p>青年时期，崔佛对成为飞行员有很大的兴趣，刻苦考上了军事学院（可能是 GTA 历代主角里学历最高的）。结果在预备役的心理测评中与辅导员产生冲突，被学院开除，断送了大好的前途。&lt;/p>
&lt;p>往后崔佛过得浑浑噩噩，他的父亲失踪，母亲吸毒进了监狱，人生没有了方向。直到遇见了麦克。麦克高超的犯罪技巧令崔佛折服，从此走上了成为罪犯的不归路。&lt;/p>
&lt;h2 id="忠诚与背叛">忠诚与背叛&lt;/h2>
&lt;p>崔佛虽然疯癫，但是却很有原则，他只朝那些惹怒他的人开火。出乎我意料的是，崔佛还会同情弱者。在任务“依计行事”里，他放了被政治斗争卷入而受尽折磨的 K 先生一条生路。在前往“失落摩托帮”火拼的路上，同行的韦德问他怎么不把女人也处理掉，崔佛反而驳斥道：怎么，难道你没有母亲、姐妹吗？&lt;/p>
&lt;p>在我眼里，崔佛其实是一个很单纯的人。他的价值体系很简单，那就是谁对我好，我就对谁好；谁伤害我，我就让他知道什么叫地狱。他不假装道德，不虚伪，也从不粉饰自己。他活的很直接，很赤裸，很自由。&lt;/p>
&lt;p>但是社会不欢迎这样的人，崔佛是在现代社会失语的人。他无法被系统接受，也不想接受系统。他只想随心所欲的活着，与朋友们浪迹天涯便是最大的快活。麦克在黑白两道的沉浮中学会了伪装，但崔佛从未学会。&lt;/p>
&lt;p>崔佛是缺爱长大的孩子，家庭和社会都没有带给他温情，但是朋友的出现让他的世界从此不一样。他的世界里只有朋友，也只剩下朋友。哪怕最后知晓麦克背叛了他、在游戏结局分支 B 中富兰克林要杀死麦克，他也无法对朋友痛下杀手。他的暴烈，是痛苦的壳，他对他人的狂怒，是一种无法被爱的绝望表达。&lt;/p>
&lt;h2 id="真小人与伪君子">真小人与伪君子&lt;/h2>
&lt;p>崔佛和麦克的人物画像很像是水浒传里的李逵与宋江。李逵快意恩仇，为兄弟两肋插刀，而宋江城府深厚，不惜牺牲兄弟也要招安上岸。游戏剧情里麦克也为了安稳的生活，出卖了自己的朋友。一个是“真小人”，一个是“伪君子”。金圣叹评价李逵“赤子之心，天真浪漫”，我想这个评价也适用于崔佛。&lt;/p>
&lt;p>原生家庭与环境对人的影响是巨大的。如果老崔能有个更温柔的母亲，更负责任的导员，更正义的朋友。或许这个世界上就会少一个大毒枭，多一位出色的飞行员。&lt;/p>
&lt;details>
 &lt;summary>
 &lt;h4 style="display: inline-block">
 附录：一些游戏截图
 &lt;/h4>
 &lt;/summary>
 
&lt;div class="gallery">
 
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_1.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_1.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_2.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_2.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_3.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_3.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_4.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_4.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_5.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_5.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_6.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_6.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_7.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_7.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_8.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_8.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_9.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_9.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_10.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/GTAV_10.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>

&lt;/div>

&lt;style>
 .gallery {
 column-count: 2; 
 column-gap: 8px; 
 width: 100%;
 margin: 0 auto;
 }

 .gallery figure {
 break-inside: avoid; 
 margin: 0 0 10px 0; 
 width: 100%; 
 }

 .gallery img {
 width: 100%; 
 height: auto; 
 object-fit: cover; 
 object-position: center; 
 display: block;
 }

 
 @media (max-width: 768px) {
 .gallery {
 column-count: 2; 
 }
 }

 @media (max-width: 480px) {
 .gallery {
 column-count: 1; 
 }
 }
&lt;/style>

P.S. 崔佛默认的地中海造型实在太邋遢，建议换个发型和胡子，再戴顶帽子，打扮一下帅气多了。

&lt;div class="gallery">
 
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/b8bd956f6ee9f5d8-2.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/b8bd956f6ee9f5d8-2.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/1.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/1.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/2.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/2.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>

&lt;/div>

&lt;style>
 .gallery {
 column-count: 2; 
 column-gap: 8px; 
 width: 100%;
 margin: 0 auto;
 }

 .gallery figure {
 break-inside: avoid; 
 margin: 0 0 10px 0; 
 width: 100%; 
 }

 .gallery img {
 width: 100%; 
 height: auto; 
 object-fit: cover; 
 object-position: center; 
 display: block;
 }

 
 @media (max-width: 768px) {
 .gallery {
 column-count: 2; 
 }
 }

 @media (max-width: 480px) {
 .gallery {
 column-count: 1; 
 }
 }
&lt;/style>


&lt;/details></description></item><item><title>导致佛教分裂的“狠人”大天</title><link>https://leonscave.com/p/2025/datian-buddhist-schism/</link><pubDate>Tue, 20 May 2025 10:09:30 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/datian-buddhist-schism/</guid><description>&lt;h2 id="分裂的种子">分裂的种子&lt;/h2>
&lt;p>释迦牟尼在世时，不立文字，所有佛法都是口传心授（吐槽一下，古印度没有记录文字的习惯，导致现在古印度的历史一部分靠推测，一部分依据《大唐西域记》等唐代高僧游记）。&lt;/p>
&lt;p>由于是口耳相传，传播过程中难免出现偏差。佛陀灭度后，时任首席长老大迦叶担忧比丘（即出家人）会松懈纪律，由此召集 500 位“高级骨干”，规范了佛法，史称佛教的“第一次集结”。&lt;/p>
&lt;p>这 500 人由大迦叶亲自挑选。起初，连释迦牟尼的堂弟、也是他长期贴身侍者的阿难，都被排除在外，因为大迦叶认为他“水平不行”。最后是众僧据理力争，才让阿难参加了这次会议。&lt;/p>
&lt;p>佛陀初转法轮时（弘法），是没有制定戒律的。然而随着僧团人数的扩张，戒律逐渐增多，围绕戒律的争执也随之增加。佛陀晚年应该也意识到过于纠结戒律，会影响到佛教关于解脱这一“哲学”的本质。因此入灭前特地交代阿难“小小戒可舍”，即一些微小的戒律可以废除。&lt;/p>
&lt;p>会议上，阿难交代了佛陀这一遗命，然而引起轩然大波。大迦叶反问到，什么是小小戒？阿难一时语塞，因为佛陀也没说哪些是“小小戒”。大迦叶随即拍板，一切以我听说的为准，即 &lt;code>随佛所说，当奉行之，佛不说者，此莫说也&lt;/code>。&lt;/p>
&lt;p>&lt;strong>佛教分裂的种子就此埋下&lt;/strong>。&lt;/p>
&lt;p>往后还有第二次集结、第三次集结。&lt;/p>
&lt;p>依照现代佛教历史研究的观点，由戒律之争产生的第二次集结，直接导致了佛教分裂为上座部与大众部(精英与群众的区别)。&lt;/p>
&lt;p>限于篇幅原因，本文不再叙述第二次集结的过程。需要知道的是，此时的分裂还只是出于戒律的不同，教义上比丘们还遵循释迦牟尼所说。而发生在第三次集结前后的“大天五事”，则直接导致了佛教教义的分裂。&lt;/p>
&lt;p>而“狠人”大天，便是此次分裂的导火索。&lt;/p>
&lt;h2 id="狠人大天">“狠人”大天&lt;/h2>
&lt;p>这位名叫大天的比丘有多狠？上座部佛教典籍《大毘（pí）婆沙论》是这么记载大天的：&lt;/p>
&lt;blockquote>
&lt;p>“其子长大，染秽于母，后闻父还，心既怖惧，与母设计遂杀其父……彼后遇逢本国所供养阿罗汉苾刍，复恐事彰，遂设方计杀彼苾刍……后复见母与馀交通……于是方便复杀其母。”&lt;/p>&lt;/blockquote>
&lt;p>译文：“（大天）长大后，和自己的母亲发生了不伦的关系。后来听说父亲要回来了，心里非常害怕，就和母亲一起设计杀死了父亲……之后，他又遇到了本国供养的一位阿罗汉比丘，担心事情败露，就又想办法杀死了那位比丘……后来，他发现母亲又和别人有不正当的关系，于是又设法杀死了自己的母亲。”&lt;/p>
&lt;p>与母淫乱、弑父杀母、屠害比丘。好家伙，大天可以说的上是无恶不作了。&lt;/p>
&lt;p>《大毘婆沙论》里还写到，大天逝世后，火化时怎么都无法点燃，浇上狗屎后立马烧成灰烬，骨灰被大风吹散：&lt;code>至第七日彼遂命终……积置一处而焚葬之。持火来烧随至随灭。种种方计竟不能然……宜以狗粪而洒秽之。便用其言火遂炎发。须臾焚荡俄成灰烬。暴风卒至飘散无遗&lt;/code>。&lt;/p>
&lt;p>这描写显然是上座部佛教对大天的抹黑，但也着实有些令人忍俊不禁。&lt;/p>
&lt;p>唐玄奘的弟子窥基大师则认为，大天是被诽谤的，各种罪名都集中到了他一个人身上。因为他提出的观点，是僧团决裂的重要原因：&lt;code>大天名高德大。果證年卑。王貴欽風。僧徒仰道。既而卓牢無侶。遂為時俗所嫉。謗之以造三逆。加之以增五事。&lt;/code>&lt;/p>
&lt;p>那么大天究竟做了什么，才令当时的上座部佛教如此嫉恨？&lt;/p>
&lt;h2 id="大天五事">大天五事&lt;/h2>
&lt;p>大天自觉罪孽深重，机缘巧合后决定出家以洗脱罪名。他天资聪慧，通晓经书，并宣称已证得阿罗汉果位（原始佛教里的最高段位），很快便有了声望。再加上寺院里资深的比丘都相继入灭，大天靠熬资历成了寺院长老。&lt;/p>
&lt;p>一天夜里，大天做了春梦，导致遗精。大天安排弟子去清洗衣物。弟子看到污渍后大惊失色，连忙回来问大天：阿罗汉已经断尽一切烦恼，为何还会遗精？&lt;/p>
&lt;p>大天觉得没什么，说即使是阿罗汉也会受到外魔影响，从而梦遗。不仅如此，他还提出五条事项，认为阿罗汉并非完美，是有漏（缺陷）的。&lt;/p>
&lt;p>这五事分别是：“余所诱、无知、犹豫、他令入、道因声故起。”&lt;/p>
&lt;ul>
&lt;li>余所诱：阿罗汉会受到外在诱惑而不净，比如遗精。&lt;/li>
&lt;li>无知：阿罗汉对某些世俗问题仍有无明。&lt;/li>
&lt;li>犹豫：阿罗汉对某些世俗问题仍有疑惑。&lt;/li>
&lt;li>他令入：阿罗汉需要他人的授记，才能确认道果。&lt;/li>
&lt;li>道因声故起：阿罗汉需要听闻佛陀教诲才能证道。&lt;/li>
&lt;/ul>
&lt;p>这几种说法其实是大天对自己恶行的诡辩。前面说到，大天靠熬资历当上了长老，他便利用职务之便来培养亲信，直接给弟子颁发“阿罗汉毕业证”。被颁发“毕业证”的弟子感到困惑，经书上写阿罗汉烦恼尽除，有大智慧。而自己还有诸多疑惑，怎么就“毕业”了呢？这时大天便用这五事的“歪理”搪塞过去：&lt;code>又彼大天欲令弟子欢喜亲附。矫设方便次第记别四沙门果。时彼弟子稽首白言。阿罗汉等应有证智。如何我等都不自知。&lt;/code>&lt;/p>
&lt;p>大天五事的提出，引起了佛教内部的轩然大波。上座部长老自然是“气炸了”，视其为异端，而大天由于其理念的包容性，在大众部有不少的群众支持。两大僧团发生激烈的辩论，风波愈演愈烈，从夜里辩到天明，士人、百姓乃至大臣前来劝说都无法停息。以至于最后阿育王亲自下场调解。&lt;/p>
&lt;p>但他的调解方式却简单粗暴，哪一派人多，他就判哪一派胜出。大天有着众多群众基础，而上座部虽然占理，但都是些老和尚，结果不言而喻。&lt;/p>
&lt;blockquote>
&lt;p>贤圣朋内耆年虽多而僧数少。大天朋内耆年虽少而众数多。王遂从多依大天众。诃伏馀众。&lt;/p>&lt;/blockquote>
&lt;p>上座部感到失望，决定离开这是非之地。阿育王听闻后大怒，设计屠杀上座部僧众（我个人对这段记述的真实性表示怀疑，阿育王晚年虔诚信佛，应该不会做这种恶行）。&lt;/p>
&lt;blockquote>
&lt;p>时诸贤圣，知众乖违，便舍鸡园，欲往他处，诸臣闻已，遂速白王。王闻既瞋，便敕臣曰：“宜皆引至殑伽河边，载以破船，中流坠溺，即验斯辈是圣是凡。”臣奉王言，便将验试。&lt;/p>&lt;/blockquote>
&lt;p>至此，上座部与大众部彻底决裂，根据教义的不同，分裂成了更多的部派。&lt;/p>
&lt;h2 id="五事为何引发争议">五事为何引发争议？&lt;/h2>
&lt;p>回看整个“大天五事”事件，从一位比丘意外遗精开始，到统治者亲自下场血腥镇压结束，其发展令人咂舌。&lt;/p>
&lt;p>大天五事之所以引起如此巨大的争议，最核心的点在于──&lt;strong>阿罗汉究竟是不是佛教修行的终点？&lt;/strong>&lt;/p>
&lt;p>在释迦牟尼最初说法中，阿罗汉是断尽烦恼、摆脱生死轮回的圣者，象征着绝对的解脱。释迦牟尼本人也是一位阿罗汉。出家修行，清静解脱，到此即可。&lt;/p>
&lt;p>而大天直接动摇了佛教的根基，如果阿罗汉不是终点，那什么是终点？&lt;/p>
&lt;p>从大众部佛教发展而来的大乘佛教，显然受到了大天思想的启发。他们将阿罗汉修行视作“小乘”，修行菩萨乘、成佛成了终极目标。&lt;/p>
&lt;p>上座部长老之所以有如此大的反应，表面上是教义、正法之争，实际上也关乎僧团内部的话语权和权利分配。上座部由资深长老主导，代表着精英阶层的利益，强调教义的纯正性与戒律的严谨性。大迦叶在第一次集结中“一言堂”风格便是这种“精英主义”的体现。&lt;/p>
&lt;p>而大天五事，不仅是对教义的重新解释，也是对上座部长老权威的直接挑衅。群众阶级总是倾向于更包容、更灵活的宗教实践，这也是大天能够获得群众基础的主要原因。&lt;/p>
&lt;h2 id="最后">最后&lt;/h2>
&lt;p>其实不止佛教，许多宗教的发展都有这种“降低门槛”的情况。比如基督教中的新教，废除了天主教中的赎罪券传统，主张人人皆可被救赎。降低了信仰门槛，从而促进了新教的快速传播。&lt;/p>
&lt;p>往后，上座部由于其保守的教义，现如今依旧保留了原始佛教思辨的传统，成为一门哲学学科。而大众部演变而来的大乘佛教，不断革新，朝着神话佛陀，追求成佛的宗教道路上一去不返了。&lt;/p>
&lt;p>这种宗教革新是好是坏，便留给读者自行思辨。&lt;/p>
&lt;h2 id="参考">参考&lt;/h2>
&lt;ol>
&lt;li>《大毘婆沙论》，卷99，玄奘译，维基文库，https://zh.wikisource.org/zh-hans/阿毗达磨大毗婆沙论/卷099 。&lt;/li>
&lt;li>《瑜伽师地论略纂》，卷01，窺基，维基文库，https://zh.wikisource.org/wiki/瑜伽師地論略纂/卷001 。&lt;/li>
&lt;li>“大天五事”，维基百科，https://zh.wikipedia.org/wiki/大天五事 。&lt;/li>
&lt;li>“根本分裂”，维基百科，https://zh.wikipedia.org/wiki/根本分裂 。&lt;/li>
&lt;/ol></description></item><item><title>治疗“电子阳痿”的五个建议</title><link>https://leonscave.com/p/2025/overcome-digital-burnout/</link><pubDate>Tue, 13 May 2025 21:47:08 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/overcome-digital-burnout/</guid><description>&lt;p>我一直自诩是一位资深玩家。在我 5 岁那年，我的父亲为家里购置了 PC 主机，我自此与电子游戏结缘。从 GameBoy 到 Switch，从 Xbox360 到 PS4，这些主机在不同时刻陪伴我成长，成为了我青春里不可或缺的记忆。&lt;/p>
&lt;p>2020 年的天灾让购买实体游戏这件事变得困难，我因此破解了 Switch。本想着无数多的免费游戏可以带给我更多的欢乐，结果却是让我陷入了“电子阳痿”的低谷中。&lt;/p>
&lt;p>我对游戏再也提不起兴趣，还卖掉了自己所有的游戏设备。&lt;/p>
&lt;p>直到去年生日 Lena 送了我一台 PS5，我的“电子阳痿”症状才开始好转。&lt;/p>
&lt;p>截止到今日，我在 PS5 上一共通关了 52 款游戏，其中 21 款游戏获得了白金奖杯（即完成游戏所有成就）。我现在每天仍然花一些时间在游戏上，玩的很开心，也算是彻底告别了“电子阳痿”。&lt;/p>
&lt;p>本文就来分享一下我治疗“电子阳痿”的心得。&lt;/p>
&lt;h2 id="1-不要有太多的选择">1. 不要有太多的选择&lt;/h2>
&lt;p>现在许多游戏厂商都在推广订阅制游戏，比如微软的 XGP，索尼的 PS+。每个月付一些钱，就可以畅玩整个游戏库。&lt;/p>
&lt;p>看似很美好，实际上选择多了，并不是什么好事。你很容易走马观花，浪费大量时间在挑选游戏上。&lt;/p>
&lt;p>人性总是贪婪的，潜意识会暗示你“库里还有更好的”。更何况已经掏出了真金白银来订阅服务，若不多玩几款游戏，岂不是亏了？因此即使挑选到满意的游戏，你也无法沉浸下来玩，很容易烂尾。&lt;/p>
&lt;p>于是最终下载游戏的时间远超玩游戏的时间。&lt;/p>
&lt;p>心理学上把这种现象称作“选择悖论”。过多的选择反而会增加决策疲劳，降低满足感。&lt;/p>
&lt;p>我的建议是减少自己选择的空间，一次只玩一款游戏，通关再换新。以及尽量避免订阅制游戏，改为精挑细选的购买单个作品。长此以往，游戏体验质量得以大幅提升。&lt;/p>
&lt;h2 id="2-寻找游戏之外的动力">2. 寻找游戏之外的动力&lt;/h2>
&lt;p>完成游戏成就是个不错的选择。我现在遇上喜欢的游戏，会认真完成游戏里的每一个成就。追求成就一方面让自己更有动力，另一方面也让自己更加吃透这个游戏，把钱花的更值。&lt;/p>
&lt;p>每次结束一款游戏后，我都会写一些评论、心得，或是游戏攻略。时间久了也收获了一些好评与读者，这样的正反馈促使我更加认真的去品味其他游戏。&lt;/p>
&lt;p>另外，我所处的城市，有一些线下的游戏聚会，我偶尔也会参加一下。聚会时常会举办一些比赛活动，比如街霸比赛、马里奥赛车比赛。多增加自己与其他玩家的交流，提升参与感，也能够有效的缓解“电子阳痿”的症状。&lt;/p>
&lt;h2 id="3-减少碎片化时间让游戏时间变得连贯">3. 减少碎片化时间，让游戏时间变得连贯&lt;/h2>
&lt;p>我一直坚信一个观点，那就是人脑天生不适合多线程任务，同一时刻，人的心智只能专注在一件事上。&lt;/p>
&lt;p>虽然现在的 PC 电脑性能已足够发达，主机平台也日渐式微，但我还是选择在主机平台玩游戏，最重要的原因就是&lt;strong>主机平台只能玩游戏&lt;/strong>。&lt;/p>
&lt;p>这句话看似简单，却至关重要。用 PC 玩游戏，我很容易在等待游戏的过程中打开网页看看帖子，看看直播。抑或是玩游戏的时候，顺手拿起手机刷下抖音、看下微博。等回过神来，游戏的乐趣早已被冲淡（&lt;del>还是刷视频有意思&lt;/del>）。&lt;/p>
&lt;p>一旦分心，游戏就再也玩不下去了。所以每当我玩游戏时，我都会把手机扔的远远的。不让自己受到干扰，才能专注在游戏上。&lt;/p>
&lt;h2 id="4-打造属于自己的游戏空间">4. 打造属于自己的游戏空间&lt;/h2>
&lt;p>澳洲有种文化叫做 Man‘s Cave，直译过来是“男人的洞穴”。那里的男性会打造自己的独立空间，远离喧嚣、专注热爱（这也是本站域名 leonscave 的来源）。&lt;/p>
&lt;p>对于在大城市里打拼的许多人，有一个只属于自己的游戏空间似乎过于奢望。但我也非常建议改善一下自己的游戏环境。我之前一直在用一台淘汰下来的 1080P 显示器玩游戏，后面升级成 4K 32 寸高刷电竞屏，再配一套音响。游戏体验显著上升，也更乐意玩游戏了。&lt;/p>
&lt;p>即便预算有限，你也可以从小处入手：换一张舒适的凳子、整理桌面、调整灯光，都可以让游戏的仪式感倍增。&lt;/p>
&lt;p>不需要多昂贵的设备，只需要一个明确的“属于自己的空间”。&lt;/p>
&lt;h2 id="5-大方的承认自己老了">5. 大方的承认自己“老”了&lt;/h2>
&lt;p>“欲买桂花同载酒，终不似，少年游。”不管是用内驱，还是外力的方法，始终没法改变的一件事实就是我们真的“老”了。&lt;/p>
&lt;p>这份“老”与年龄无关，而是与心态有关。&lt;/p>
&lt;p>生活上有太多的事情需要操心，我们很难理所应当的再给自己大把时间来消遣娱乐。如果一件事情不能快速的获得成效，我们会感到焦虑，感到时间被浪费。&lt;/p>
&lt;p>这个时候，不只会出现“电子阳痿”，也可能会有“阅读阳痿”、“创作阳痿”，或是“其他阳痿”……它们本质上是一种困境。&lt;/p>
&lt;p>这个世界上还有许多比游戏更有乐趣的事情，游戏只是取悦自己的一种方式。&lt;/p>
&lt;p>更重要的是，我们需要理解自己身上的变化，懂得如何取悦自己。&lt;/p>
&lt;p>放下那些“出人头地”的愿望，或许这时我们才能真正的摆脱“电子阳痿”。&lt;/p>
&lt;h2 id="写在最后游戏是通往生活的一种方式">写在最后：游戏，是通往生活的一种方式&lt;/h2>
&lt;p>我想，治愈“电子阳痿”的过程，并非是为了对游戏重新上瘾，而是重新找回热爱、专注与自洽的能力。&lt;/p>
&lt;p>游戏从来不是生活的对立面，相反，它可以是理解生活，重回自我的某种途径。&lt;/p>
&lt;p>在某个无所事事的下午，打开游戏，像小时候那样，沉浸其中，感到快乐──仅此而已，也已足够。&lt;/p></description></item><item><title>五一小记：山中禅影与游戏彼岸</title><link>https://leonscave.com/p/2025/may-holiday-kojima-buddha/</link><pubDate>Sat, 03 May 2025 21:35:03 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/may-holiday-kojima-buddha/</guid><description>&lt;h2 id="弘法寺">弘法寺&lt;/h2>
&lt;p>五一假期留在了深圳，本想着好好在家修养几天，但待久了还是有些烦闷，还是出去走走吧。深圳这个地方，除去商场，能消遣的地方着实不多。想了想仙湖植物园还没有去过，那里还有座弘法寺。我虽然不是什么虔诚的佛信徒，但对参观各种庙宇颇有兴致。于是便出发了。&lt;/p>
&lt;p>仙湖植物园入园需要购买门票，票价 10 元。入园后乘坐专车上山，还需要再花 10 元。排队的队伍一眼望不到头，我还是直接走上去吧。&lt;/p>
&lt;p>徒步上山，一路的风景都特别不错，远山吹来的风，心旷神怡，让我想起了家乡，是同一种风的味道。整个植物园面积很大，展馆错落在各种地方。也不知花馆在什么地方，我沿着弘法寺的方向走，没有看到什么花，倒是有些遗憾。&lt;/p>
&lt;div class="gallery">
 
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/DraggedImage.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/DraggedImage.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/DraggedImage-1.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/DraggedImage-1.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>

&lt;/div>

&lt;style>
 .gallery {
 column-count: 2; 
 column-gap: 8px; 
 width: 100%;
 margin: 0 auto;
 }

 .gallery figure {
 break-inside: avoid; 
 margin: 0 0 10px 0; 
 width: 100%; 
 }

 .gallery img {
 width: 100%; 
 height: auto; 
 object-fit: cover; 
 object-position: center; 
 display: block;
 }

 
 @media (max-width: 768px) {
 .gallery {
 column-count: 2; 
 }
 }

 @media (max-width: 480px) {
 .gallery {
 column-count: 1; 
 }
 }
&lt;/style>
&lt;p>特地来参观弘法寺的人群还是挺多的。寺庙入口处有义工免费提供香火，这点挺好，不用再掏钱了。但我没有要，只是报以微笑。自从学佛以后，我就不曾礼佛了。&lt;/p>
&lt;p>这是一座禅寺，整座庙宇都很漂亮，建筑群由外向内、由低到高、层层递进。禅院内树木绿意盎然、错落有致，颇有一番禅意。非常适合观光与摄影。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/a0c7bda4e0af02770d3606d2611eee47.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/a0c7bda4e0af02770d3606d2611eee47.webp" width="90%"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>看了一下寺庙的简介，这座禅寺的开山祖师是本焕长老，106 岁高龄时圆寂，看来有些道行。现任的方丈是顺印法师。此前我研究上座部佛教时，读得许多文章也出自一位号顺印的法师之手。今日到弘法寺拜访，倒也是特别的缘分。&lt;/p>
&lt;p>寺庙的许多房间都用门栏挡住，不允许入内。不知是不是为了防止被午晒侵蚀，佛像都用网布盖住了，而门前的信众依旧在叩拜。这样的场景有些奇妙，颇有些不着“相”的韵味了。&lt;/p>
&lt;p>每个寺庙都有“结缘处”，会免费赠阅一些佛经读本。弘法寺是我见过最慷慨的寺庙。罗列了数十种经书以及通识读本，还有一些佛牌、手链，不愧“弘法”之名。&lt;/p>
&lt;p>这些物资都是免费领取的，如果你有心，亦可捐赠一些财物，俗称“随喜”。我的钱包窘迫，只能随喜赞叹，赞叹这座慷慨的禅院。
我领了《金刚经》和《妙法莲华经》两本。《金刚经》的开本很精美，是少见的折本，很适合收藏。《妙法莲华经》我未曾读过，借这个机会读一读。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/70A4A9E9-A1EA-49F8-9292-B9BF805A264F.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/70A4A9E9-A1EA-49F8-9292-B9BF805A264F.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>返程已经是傍晚六点多了。地铁里全是人，比工作日晚高峰的人还要多。由于列车的起点站是海岸边，此时已经坐满了从那儿返程的人。到了仙湖站，每趟地铁只能堪堪挤上一两个人。&lt;/p>
&lt;p>已经上车的人自然不愿还有人挤上车。于是谩骂与抱怨的喧嚣充斥着车厢。在这里，车上的和未上车的人们从来无法相互理解。&lt;/p>
&lt;p>我感到疲惫，只想快点回家去。&lt;/p>
&lt;h2 id="死亡搁浅">死亡搁浅&lt;/h2>
&lt;p>历时 100 小时，我白金了《死亡搁浅》。&lt;/p>
&lt;p>在我二十余年的游戏生涯中，《死亡搁浅》是唯二令我落泪的游戏。&lt;/p>
&lt;p>游戏里的第一个订单是火化自己的母亲，最后一个订单是火化自己的孩子。幸运的是，孩子最终存活了下来。在磅礴大雨与彩虹的见证中，死与新生重新延续。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/c810445315a9658572e0c63f740d643b.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/c810445315a9658572e0c63f740d643b.webp"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>《死亡搁浅》带给我许多感触，这是一部非常需要用心去感受的游戏。我很少用伟大去形容一部作品，毫不夸张的说，这是应当被收录在第九艺术殿堂前列的作品。&lt;/p>
&lt;p>再多的话语都言不尽我对这部作品的赞美。后续我应该还会再单独写一篇关于《死亡搁浅》的荐文。从音乐、文学、电影这三个角度来谈谈死亡搁浅这部作品的独特之处。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/8fd12c94eb9e4aa265dd4b308d4ee2e4.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/8fd12c94eb9e4aa265dd4b308d4ee2e4.webp" width="60%"
 loading="lazy"
 > &lt;/a>
&lt;/figure></description></item><item><title>成仙了的窦唯</title><link>https://leonscave.com/p/2025/dou-wei-immortal-music/</link><pubDate>Wed, 30 Apr 2025 14:53:12 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/dou-wei-immortal-music/</guid><description>&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/image-20250430145528308.webp">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/image-20250430145528308.webp" width="50%"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;!-- raw HTML omitted -->
&lt;p>刷到这么一则帖子，颇有意思。大意是这位听友认为自己听懂了窦唯的音乐，满心期望能与这位传奇音乐人交流。然而窦唯并不对他做出回应，于是他怒不可遏，在社交平台发帖批判窦唯。&lt;/p>
&lt;p>说实话，有点搞笑，我甚至觉的他有些自我意识过剩了，音乐人并没有义务就你购买了专辑而提供情感上的售后服务。&lt;/p>
&lt;p>但这件事折射出一个真相：窦唯早已远离商业化的喧嚣。他甚至关闭了所有能找到他的社交平台，关闭了一切与外界的沟通窗口。&lt;/p>
&lt;p>如果你听中国摇滚乐，也一定知道窦唯这个名字在中国摇滚乐史上的分量。作为中国摇滚乐的先驱者，他却早已离开了摇滚乐，甚至不再开口唱词，音乐表达也与当年全然不同。在我看来，他的那份叛逆在与王菲婚姻破灭后一同消散了。&lt;/p>
&lt;p>现在的他仍然在做音乐，且异常高产。我粗略的估算了一下，这些年他发行了 70 余张专辑（很夸张的数字）。这些作品曲高和寡，绝大多数是器乐、实验音乐和民乐。有些甚至不在流媒体平台发行，只在线下进行专辑售卖。&lt;/p>
&lt;p>你若是在流媒体平台搜索窦唯，收听率最高的还是摇滚时期的那几张专辑，《黑梦》、《艳阳天》。大众还是喜欢 20 几岁的窦唯，而二十年里始终致力于实验音乐的窦唯从未被大众所接纳。&lt;/p>
&lt;p>在我看来，窦唯成仙了，所做的也是仙乐，不轻易被凡人所理解。&lt;/p>
&lt;p>窦唯拒绝标签化，拒绝商业化，音乐里的随性与纯粹只是为了自我表达，又何尝不是一种现代化的出世隐居。&lt;/p>
&lt;p>RadioHead 的主唱 Thom Yorke 其实也带给我这种感觉，他们都在巅峰时选择“叛逃”，与主流期待背离，用音乐对抗商业化，追求更超脱的艺术境界。&lt;/p>
&lt;p>回到开头那位愤怒的听众，我想他并非真的愤怒，而是渴求被理解。但我想窦唯这二十多年的实验性创作生涯已经说明了，想被理解并不容易。沉默，是他对音乐自由表达的坚持；音乐，已是他对世界所有的述说。&lt;/p>
&lt;p>P.S. 如果你是一位古文爱好者，很推荐你听一听窦唯的音乐。他以古籍为灵感，创作了许多具有文化蕴意的作品。譬如我最近在听的《天真君公》，便是他对《世说新语》清旷哲思的音乐再现。&lt;/p></description></item><item><title>当年明月</title><link>https://leonscave.com/p/2025/reflections-on-admiration-and-selfhood/</link><pubDate>Fri, 25 Apr 2025 15:27:59 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/reflections-on-admiration-and-selfhood/</guid><description>&lt;p>无意间刷到一个影片，标题是《所谓龙场悟道，大抵就是这样子吧》&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>，恰好最近我在了解王阳明，有些好奇便点了进去。&lt;/p>
&lt;p>片中是一位有些微胖的年轻人正在接受采访。这位年轻人其貌不扬，但谈吐非凡，我有些诧异，这胖子是谁？后面才发现原来他就是《明朝那些事儿》的作者“当年明月”本尊——难怪如此有才华，失敬失敬。&lt;/p>
&lt;p>他谈吐间的从容与自信，让我想到两位故友：一位已经过世，而另一位也不再联络。离开校园后的日子里，我总是想起这两位朋友，我在他们的身上感受到一种智慧与光辉，以及年轻的热血，这让我望尘莫及。&lt;/p>
&lt;p>出于对逝世者的尊重以及在世者隐私的保护，姑且称呼他们为 A 君与 B 君。&lt;/p>
&lt;h2 id="a-君">A 君&lt;/h2>
&lt;p>A 君的原生家庭并不好，父母离异后由父亲赡养。但父亲常年在外，他自幼跟着祖母长大。他出葬的那一天，生母还来葬礼现场吵着要钱。我虽不能去葬礼吊唁，但每每想到这样的遭遇，还是忍不住叹息。&lt;/p>
&lt;p>A 君是一个非常上进的人，中学时，他的成绩就要比我好的多，学习也很认真。大学学的是小语种，梦想成为外交官，报效祖国，可他的生命永远的停留在了二十多岁。我与 A 君经常讨论历史与政治，但我总是说不过他。&lt;/p>
&lt;h2 id="b-君">B 君&lt;/h2>
&lt;p>B 君是一位很有文采的人，他的身上有一种文人墨客的情怀，写的一手好毛笔字，喜欢读古文与作古诗，我现在偶尔还能在社交平台上看到他发的七言律诗——已经是我读不懂的程度了。&lt;/p>
&lt;p>我与 B 君相处的时间最多，也最志同道合，或者说臭气相投。当时我们在同一个老师家里补课，闲暇的时间就一起吹牛，一起高谈阔论。谈天文，谈地理，谈女生，无所不谈。他懂得很多，我也因此增长不少认知。他第一次高考不太理想，在家人的要求下读了军校，大概半个学期，又重新回来高考，第二次顺利考上了理想的大学。在我这种连本科线都没上，因此复读的人看来也是传奇。他专业读的金融，没准已经是陆家嘴的金融精英。&lt;/p>
&lt;h2 id="我们">我们&lt;/h2>
&lt;p>这两位朋友与我的共性就是都喜欢看书，也都爱玩，我们在一起经常讨论游戏，也讨论书，我是三个人中游戏玩的最好的，也因此而沾沾自喜。A 君身边从不缺女生的喜欢，他时常向我透露些亲身经历后的禁忌话题，让我脸红心跳，但又羡慕。B 君的脑回路清奇，总能在一些事情上有特别的想法，我惊讶于他有这样聪明的大脑。他还是那种随便学习就能有很好成绩的人，我们一起逃课上网，我学习退步，他却不退反进，这让我一度十分羡慕。&lt;/p>
&lt;h2 id="冲突">冲突&lt;/h2>
&lt;p>这两位朋友有过一次交锋，是在中学的辩论赛上。也不知道当时的校长抽了什么疯了，想在校园里推广辩论赛，每个班级都要人参加，有人推举我去，但我一向心高气傲，觉得形式主义而已，不屑参加这样的活动。辩论赛决赛那天，是下午的最后一堂课，校长破天荒地说看辩论赛可以不用上课，于是我就去了。发现台上坐着的赫然就是这两位朋友。&lt;/p>
&lt;p>这场辩论赛很精彩，赛题我已经忘了，但当时的场景与感受我还记得很清楚。没有谁把谁压下一头，当一方提出一个攻击性极强的观点后，另一方总是能巧妙的化解，就像羽毛球场上，一方打出杀球，而另一方巧妙的海底捞月，化解杀球。观众席下的我也在思考如何应对辩手的攻击，A 君总是言辞激烈，有些观点令我卡壳，我不知道该如何应答，这也正常，平时我也总是说不过 A 君，但 B 君转而引经据典，巧妙的化解了，这让我意想不到，他的脑子还是这么好用。比赛结束，掌声雷动，久久不停。&lt;/p>
&lt;p>我陷入到一种巨大的震撼与羞愧之中。震撼于这两位朋友如此优秀的表现与如此的才华，羞愧于自己只是在台下看着，却没有参加比赛。也羞愧于觉得自己不如这两位朋友。&lt;/p>
&lt;p>从那以后，我们渐渐疏远了。我的自卑断送了我们的友谊。我总觉的他们前往了更广阔的天空，而我陷入自己的少年维特之烦恼。早恋与沉迷游戏断送了我的学业，高考落榜，复读后也不过读了一个普通大学。我觉的自己浑浑噩噩，远不如这两位朋友，我想起黑塞的《在轮下》，我们是什么时候拉开如此大的差距呢？&lt;/p>
&lt;h2 id="自卑与超越">自卑与超越&lt;/h2>
&lt;p>A 君死去的消息传来时，我感到深深的无常。深夜里突发心梗，使他丢了性命，留下了那些未竟的梦想。如此优秀的人，竟就此陨落，我感到虚无，也后悔没能和他多说说话。这是我生命中第一次直面朋友的离世，此后虚无的念头总是在我心中环绕，我无法理解死亡，无法理解活着。他的离去对我影响很大，让我重新审视自己的人生，开始思索生命的意义。&lt;/p>
&lt;p>我重新拾起书本，寻找那些想不明白的答案。&lt;/p>
&lt;p>过年回乡与另一老友相聚，一起喝酒。酒过三巡，我们都有些醉了。他说他十分羡慕我，羡慕我洒脱，有思想，事业有成，婚姻美满，不像他，这个年岁还在外游荡，令父母操心。&lt;/p>
&lt;p>我顿时漠然，这又何尝不像我曾经羡慕那两位朋友一样。&lt;/p>
&lt;p>村上春树的小说《没有色彩的多崎作和他的巡礼之年》里，多崎作一直认为自己是一个没有色彩的人，他总觉得自己不如那些五彩斑斓的朋友们，他们的世界绚丽多彩，而自己的世界暗淡如灰。但最后，他发现自己其实早已有了自己的颜色，只是缺乏勇气与自信去辨别属于自己的颜色。&lt;/p>
&lt;p>自卑也好，羡慕也罢，不过是将他人的光彩投射成自己的阴影。我们从来不是什么失色之人，只是尚未分辨出属于自己的光芒。&lt;/p>
&lt;p>A 君的早逝、B 君的远去，并没有从我的生命中剥夺什么。相反，他们以各自的方式，化作我成长道路上的一部分。我永远怀念他们。&lt;/p>
&lt;p>我也拥有了自己的人格，走出了属于自己的道路。我不再羡慕旁人，我就是我自己。&lt;/p>
&lt;p>当年明月已经远去，今之明月，已然升起。&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a href="https://www.bilibili.com/video/BV1nw411U7oC">https://www.bilibili.com/video/BV1nw411U7oC&lt;/a>&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>发烧的幸福</title><link>https://leonscave.com/p/2025/fevers-happiness/</link><pubDate>Thu, 24 Apr 2025 16:54:41 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/fevers-happiness/</guid><description>&lt;p>昨天莫名奇妙的发烧了，不知道是染上了什么流感病毒，我整个人都异常的难受。一个人远离家乡在外工作，最害怕的就是生病。好在有 Lena 照顾我。&lt;/p>
&lt;p>她抚摸我的头，将脸颊贴在我的脸颊上，我感到一种莫大的慰藉。在我孩提的时候，我的母亲也这样照顾我。&lt;/p>
&lt;p>我感到我是幸福的，于是便深深的睡下了。&lt;/p></description></item><item><title>使用 Python 脚本批量下载 macOS 航拍屏保/壁纸</title><link>https://leonscave.com/p/2025/python-script-download-macos-aerial-screensaver/</link><pubDate>Mon, 21 Apr 2025 23:40:04 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/python-script-download-macos-aerial-screensaver/</guid><description>&lt;p>从 macOS Sonoma 版本开始，Apple 为 Mac 提供了新的屏幕保护程序。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-1.png">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-1.png"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>这些屏保都是 4K 航拍视频，可同时设置为壁纸。设置为壁纸后从屏保切回桌面会有一段动态过渡动画。效果非常不错，种类也很多。&lt;/p>
&lt;p>由于是 4K 画质，很占空间，这些屏保并没有预载在系统里。除了预设的几款屏保，其他都需要在设置中点击后等待程序自动下载，但是下载速度非常慢，经常只有十几 kb。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-2.png">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-2.png"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>查了一下资料，这些屏保都存储在 &lt;code>/Library/Application\ Support/com.apple.idleassetsd/Customer&lt;/code> 目录下，而元数据则存储在同目录下的
&lt;code>entries.json&lt;/code> 文件中。&lt;/p>
&lt;p>那事情就好办了，我写了一个 Python 脚本，可以直接批量将这些屏保下载下来。&lt;/p>
&lt;h3 id="脚本代码">脚本代码&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1&lt;/span>&lt;span>&lt;span style="color:#cf222e">import&lt;/span> &lt;span style="color:#24292e">json&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2&lt;/span>&lt;span>&lt;span style="color:#cf222e">import&lt;/span> &lt;span style="color:#24292e">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3&lt;/span>&lt;span>&lt;span style="color:#cf222e">import&lt;/span> &lt;span style="color:#24292e">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4&lt;/span>&lt;span>&lt;span style="color:#cf222e">from&lt;/span> &lt;span style="color:#24292e">argparse&lt;/span> &lt;span style="color:#cf222e">import&lt;/span> ArgumentParser
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5&lt;/span>&lt;span>&lt;span style="color:#cf222e">from&lt;/span> &lt;span style="color:#24292e">pathlib&lt;/span> &lt;span style="color:#cf222e">import&lt;/span> Path
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6&lt;/span>&lt;span>&lt;span style="color:#cf222e">import&lt;/span> &lt;span style="color:#24292e">plistlib&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8&lt;/span>&lt;span>&lt;span style="color:#cf222e">import&lt;/span> &lt;span style="color:#24292e">httpx&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9&lt;/span>&lt;span>&lt;span style="color:#cf222e">from&lt;/span> &lt;span style="color:#24292e">tqdm&lt;/span> &lt;span style="color:#cf222e">import&lt;/span> tqdm
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 10&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 11&lt;/span>&lt;span>BASE_PATH &lt;span style="color:#0550ae">=&lt;/span> Path&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;/Library/Application Support/com.apple.idleassetsd/Customer&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 12&lt;/span>&lt;span>DEST_PATH &lt;span style="color:#0550ae">=&lt;/span> BASE_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">&amp;#34;4KSDR240FPS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 13&lt;/span>&lt;span>ENTRIES_FILE &lt;span style="color:#0550ae">=&lt;/span> BASE_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">&amp;#34;entries.json&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 14&lt;/span>&lt;span>LOCALIZABLE_FILE &lt;span style="color:#0550ae">=&lt;/span> BASE_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">&amp;#34;TVIdleScreenStrings.bundle/zh_CN.lproj/Localizable.nocache.strings&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 15&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 16&lt;/span>&lt;span>&lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">load_localizable_strings&lt;/span>&lt;span style="color:#1f2328">()&lt;/span> &lt;span style="color:#0550ae">-&amp;gt;&lt;/span> &lt;span style="color:#6639ba">dict&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 17&lt;/span>&lt;span> strings &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 18&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> LOCALIZABLE_FILE&lt;span style="color:#0550ae">.&lt;/span>exists&lt;span style="color:#1f2328">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 19&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> LOCALIZABLE_FILE&lt;span style="color:#0550ae">.&lt;/span>open&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;rb&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> f&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 20&lt;/span>&lt;span> plist_data &lt;span style="color:#0550ae">=&lt;/span> plistlib&lt;span style="color:#0550ae">.&lt;/span>load&lt;span style="color:#1f2328">(&lt;/span>f&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 21&lt;/span>&lt;span> strings&lt;span style="color:#0550ae">.&lt;/span>update&lt;span style="color:#1f2328">(&lt;/span>plist_data&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 22&lt;/span>&lt;span> &lt;span style="color:#cf222e">return&lt;/span> strings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 23&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 24&lt;/span>&lt;span>&lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">get_localized_name&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>key&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">str&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> strings&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">dict&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#0550ae">-&amp;gt;&lt;/span> &lt;span style="color:#6639ba">str&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 25&lt;/span>&lt;span> &lt;span style="color:#cf222e">return&lt;/span> strings&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>key&lt;span style="color:#1f2328">,&lt;/span> key&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 26&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 27&lt;/span>&lt;span>&lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">download_asset_sync&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>item&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">dict&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> dst&lt;span style="color:#1f2328">:&lt;/span> Path&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 28&lt;/span>&lt;span> name &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;categoryName&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;assetName&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 29&lt;/span>&lt;span> tqdm&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Downloading: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>name&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 30&lt;/span>&lt;span> &lt;span style="color:#cf222e">try&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 31&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> dst&lt;span style="color:#0550ae">.&lt;/span>open&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;wb&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> download_file&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 32&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> httpx&lt;span style="color:#0550ae">.&lt;/span>stream&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;GET&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span>&lt;span style="color:#1f2328">],&lt;/span> verify&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">False&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> response&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 33&lt;/span>&lt;span> total &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#6639ba">int&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>response&lt;span style="color:#0550ae">.&lt;/span>headers&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Content-Length&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 34&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> tqdm&lt;span style="color:#1f2328">(&lt;/span>total&lt;span style="color:#0550ae">=&lt;/span>total&lt;span style="color:#1f2328">,&lt;/span> unit&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;B&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> unit_scale&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> unit_divisor&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">1024&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> desc&lt;span style="color:#0550ae">=&lt;/span>name&lt;span style="color:#1f2328">,&lt;/span> position&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> leave&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">False&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> progress&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 35&lt;/span>&lt;span> num_bytes_downloaded &lt;span style="color:#0550ae">=&lt;/span> response&lt;span style="color:#0550ae">.&lt;/span>num_bytes_downloaded
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 36&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> chunk &lt;span style="color:#0550ae">in&lt;/span> response&lt;span style="color:#0550ae">.&lt;/span>iter_bytes&lt;span style="color:#1f2328">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 37&lt;/span>&lt;span> download_file&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>chunk&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 38&lt;/span>&lt;span> progress&lt;span style="color:#0550ae">.&lt;/span>update&lt;span style="color:#1f2328">(&lt;/span>response&lt;span style="color:#0550ae">.&lt;/span>num_bytes_downloaded &lt;span style="color:#0550ae">-&lt;/span> num_bytes_downloaded&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 39&lt;/span>&lt;span> num_bytes_downloaded &lt;span style="color:#0550ae">=&lt;/span> response&lt;span style="color:#0550ae">.&lt;/span>num_bytes_downloaded
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 40&lt;/span>&lt;span> &lt;span style="color:#cf222e">except&lt;/span> &lt;span style="color:#1f2328">(&lt;/span>httpx&lt;span style="color:#0550ae">.&lt;/span>RequestError&lt;span style="color:#1f2328">,&lt;/span> httpx&lt;span style="color:#0550ae">.&lt;/span>HTTPStatusError&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> e&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 41&lt;/span>&lt;span> tqdm&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Error downloading &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>name&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>e&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 42&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 43&lt;/span>&lt;span>&lt;span style="color:#cf222e">async&lt;/span> &lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">download_asset_async&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>client&lt;span style="color:#1f2328">,&lt;/span> item&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">dict&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> dst&lt;span style="color:#1f2328">:&lt;/span> Path&lt;span style="color:#1f2328">,&lt;/span> position&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">int&lt;/span>&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 44&lt;/span>&lt;span> name &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;categoryName&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;assetName&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 45&lt;/span>&lt;span> tqdm&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Downloading: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>name&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 46&lt;/span>&lt;span> &lt;span style="color:#cf222e">try&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 47&lt;/span>&lt;span> &lt;span style="color:#cf222e">async&lt;/span> &lt;span style="color:#cf222e">with&lt;/span> client&lt;span style="color:#0550ae">.&lt;/span>stream&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;GET&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span>&lt;span style="color:#1f2328">])&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> response&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 48&lt;/span>&lt;span> total &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#6639ba">int&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>response&lt;span style="color:#0550ae">.&lt;/span>headers&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Content-Length&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 49&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> tqdm&lt;span style="color:#1f2328">(&lt;/span>total&lt;span style="color:#0550ae">=&lt;/span>total&lt;span style="color:#1f2328">,&lt;/span> unit&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;B&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> unit_scale&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> unit_divisor&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">1024&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> desc&lt;span style="color:#0550ae">=&lt;/span>name&lt;span style="color:#1f2328">,&lt;/span> position&lt;span style="color:#0550ae">=&lt;/span>position&lt;span style="color:#1f2328">,&lt;/span> leave&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">False&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> progress&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 50&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> dst&lt;span style="color:#0550ae">.&lt;/span>open&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;wb&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> download_file&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 51&lt;/span>&lt;span> &lt;span style="color:#cf222e">async&lt;/span> &lt;span style="color:#cf222e">for&lt;/span> chunk &lt;span style="color:#0550ae">in&lt;/span> response&lt;span style="color:#0550ae">.&lt;/span>aiter_bytes&lt;span style="color:#1f2328">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 52&lt;/span>&lt;span> download_file&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>chunk&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 53&lt;/span>&lt;span> progress&lt;span style="color:#0550ae">.&lt;/span>update&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>chunk&lt;span style="color:#1f2328">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 54&lt;/span>&lt;span> &lt;span style="color:#cf222e">except&lt;/span> &lt;span style="color:#1f2328">(&lt;/span>httpx&lt;span style="color:#0550ae">.&lt;/span>RequestError&lt;span style="color:#1f2328">,&lt;/span> httpx&lt;span style="color:#0550ae">.&lt;/span>HTTPStatusError&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> e&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 55&lt;/span>&lt;span> tqdm&lt;span style="color:#0550ae">.&lt;/span>write&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Error downloading &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>name&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>e&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 56&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 57&lt;/span>&lt;span>&lt;span style="color:#cf222e">async&lt;/span> &lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">download_asset_concurrent&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>items&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">list&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> max_concurrent&lt;span style="color:#1f2328">:&lt;/span> &lt;span style="color:#6639ba">int&lt;/span> &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#0550ae">5&lt;/span>&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 58&lt;/span>&lt;span> &lt;span style="color:#cf222e">async&lt;/span> &lt;span style="color:#cf222e">with&lt;/span> httpx&lt;span style="color:#0550ae">.&lt;/span>AsyncClient&lt;span style="color:#1f2328">(&lt;/span>verify&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">False&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> timeout&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">30.0&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> client&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 59&lt;/span>&lt;span> tasks &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 60&lt;/span>&lt;span> pending_items &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">[&lt;/span>item &lt;span style="color:#cf222e">for&lt;/span> item &lt;span style="color:#0550ae">in&lt;/span> items &lt;span style="color:#cf222e">if&lt;/span> &lt;span style="color:#0550ae">not&lt;/span> &lt;span style="color:#1f2328">(&lt;/span>DEST_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;id&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">.mov&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>&lt;span style="color:#0550ae">.&lt;/span>exists&lt;span style="color:#1f2328">()&lt;/span> &lt;span style="color:#0550ae">and&lt;/span> item&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 61&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 62&lt;/span>&lt;span> &lt;span style="color:#57606a"># 预留进度条行&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 63&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> i &lt;span style="color:#0550ae">in&lt;/span> &lt;span style="color:#6639ba">range&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">min&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>max_concurrent&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>pending_items&lt;span style="color:#1f2328">))):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 64&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">\033&lt;/span>&lt;span style="color:#0a3069">[K&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> end&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#57606a"># 清除行&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 65&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">()&lt;/span> &lt;span style="color:#57606a"># 预留一行&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 66&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">\033&lt;/span>&lt;span style="color:#0a3069">[&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>&lt;span style="color:#6639ba">min&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>max_concurrent&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>pending_items&lt;span style="color:#1f2328">))&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">A&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> end&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> flush&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#57606a"># 移动光标到第一行&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 67&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 68&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> index&lt;span style="color:#1f2328">,&lt;/span> item &lt;span style="color:#0550ae">in&lt;/span> &lt;span style="color:#6639ba">enumerate&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>pending_items&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 69&lt;/span>&lt;span> position &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">(&lt;/span>index &lt;span style="color:#0550ae">%&lt;/span> max_concurrent&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#0550ae">+&lt;/span> &lt;span style="color:#0550ae">1&lt;/span> &lt;span style="color:#57606a"># 分配行号（1 到 max_concurrent）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 70&lt;/span>&lt;span> tasks&lt;span style="color:#0550ae">.&lt;/span>append&lt;span style="color:#1f2328">(&lt;/span>download_asset_async&lt;span style="color:#1f2328">(&lt;/span>client&lt;span style="color:#1f2328">,&lt;/span> item&lt;span style="color:#1f2328">,&lt;/span> DEST_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;id&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">.mov&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> position&lt;span style="color:#1f2328">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 71&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> &lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>tasks&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#0550ae">&amp;gt;=&lt;/span> max_concurrent&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 72&lt;/span>&lt;span> &lt;span style="color:#cf222e">await&lt;/span> asyncio&lt;span style="color:#0550ae">.&lt;/span>gather&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>tasks&lt;span style="color:#1f2328">,&lt;/span> return_exceptions&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 73&lt;/span>&lt;span> tasks &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 74&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> tasks&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 75&lt;/span>&lt;span> &lt;span style="color:#cf222e">await&lt;/span> asyncio&lt;span style="color:#0550ae">.&lt;/span>gather&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">*&lt;/span>tasks&lt;span style="color:#1f2328">,&lt;/span> return_exceptions&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 76&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 77&lt;/span>&lt;span> &lt;span style="color:#57606a"># 清除进度条区域&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 78&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">\033&lt;/span>&lt;span style="color:#0a3069">[&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>&lt;span style="color:#6639ba">min&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>max_concurrent&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>pending_items&lt;span style="color:#1f2328">))&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">A&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> end&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> flush&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 79&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> _ &lt;span style="color:#0550ae">in&lt;/span> &lt;span style="color:#6639ba">range&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#6639ba">min&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>max_concurrent&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#6639ba">len&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>pending_items&lt;span style="color:#1f2328">))):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 80&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">\033&lt;/span>&lt;span style="color:#0a3069">[K&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> end&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span> &lt;span style="color:#57606a"># 清除行&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 81&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 82&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 83&lt;/span>&lt;span>&lt;span style="color:#cf222e">def&lt;/span> &lt;span style="color:#6639ba">main&lt;/span>&lt;span style="color:#1f2328">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 84&lt;/span>&lt;span> parser &lt;span style="color:#0550ae">=&lt;/span> ArgumentParser&lt;span style="color:#1f2328">(&lt;/span>description&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Download macOS Aerial screensaver assets&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 85&lt;/span>&lt;span> parser&lt;span style="color:#0550ae">.&lt;/span>add_argument&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;--batch&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> nargs&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;?&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> const&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">5&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#6639ba">type&lt;/span>&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#6639ba">int&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> metavar&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;SIZE&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> help&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Use concurrent downloads, 5 tasks by default&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 86&lt;/span>&lt;span> args &lt;span style="color:#0550ae">=&lt;/span> parser&lt;span style="color:#0550ae">.&lt;/span>parse_args&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 87&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 88&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> &lt;span style="color:#0550ae">not&lt;/span> ENTRIES_FILE&lt;span style="color:#0550ae">.&lt;/span>exists&lt;span style="color:#1f2328">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 89&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Error: &lt;/span>&lt;span style="color:#0a3069">{&lt;/span>ENTRIES_FILE&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069"> not found&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 90&lt;/span>&lt;span> sys&lt;span style="color:#0550ae">.&lt;/span>exit&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0550ae">1&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 91&lt;/span>&lt;span> &lt;span style="color:#cf222e">with&lt;/span> ENTRIES_FILE&lt;span style="color:#0550ae">.&lt;/span>open&lt;span style="color:#1f2328">()&lt;/span> &lt;span style="color:#cf222e">as&lt;/span> f&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 92&lt;/span>&lt;span> data &lt;span style="color:#0550ae">=&lt;/span> json&lt;span style="color:#0550ae">.&lt;/span>load&lt;span style="color:#1f2328">(&lt;/span>f&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 93&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 94&lt;/span>&lt;span> localizable_strings &lt;span style="color:#0550ae">=&lt;/span> load_localizable_strings&lt;span style="color:#1f2328">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 95&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 96&lt;/span>&lt;span> categories &lt;span style="color:#0550ae">=&lt;/span> &lt;span style="color:#1f2328">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 97&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> category &lt;span style="color:#0550ae">in&lt;/span> data&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;categories&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#1f2328">[]):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 98&lt;/span>&lt;span> category_name &lt;span style="color:#0550ae">=&lt;/span> get_localized_name&lt;span style="color:#1f2328">(&lt;/span>category&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;localizedNameKey&amp;#34;&lt;/span>&lt;span style="color:#1f2328">],&lt;/span> localizable_strings&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 99&lt;/span>&lt;span> categories&lt;span style="color:#1f2328">[&lt;/span>category&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;id&amp;#34;&lt;/span>&lt;span style="color:#1f2328">]]&lt;/span> &lt;span style="color:#0550ae">=&lt;/span> category_name
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">100&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">101&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> asset &lt;span style="color:#0550ae">in&lt;/span> data&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;assets&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#1f2328">[]):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">102&lt;/span>&lt;span> category_id &lt;span style="color:#0550ae">=&lt;/span> asset&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;categories&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">])[&lt;/span>&lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">103&lt;/span>&lt;span> asset&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;categoryName&amp;#34;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span> &lt;span style="color:#0550ae">=&lt;/span> categories&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>category_id&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#0a3069">&amp;#34;&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">104&lt;/span>&lt;span> asset&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;assetName&amp;#34;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span> &lt;span style="color:#0550ae">=&lt;/span> get_localized_name&lt;span style="color:#1f2328">(&lt;/span>asset&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;localizedNameKey&amp;#34;&lt;/span>&lt;span style="color:#1f2328">],&lt;/span> localizable_strings&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">105&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">106&lt;/span>&lt;span> DEST_PATH&lt;span style="color:#0550ae">.&lt;/span>mkdir&lt;span style="color:#1f2328">(&lt;/span>parents&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> exist_ok&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#cf222e">True&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">107&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">108&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> args&lt;span style="color:#0550ae">.&lt;/span>batch&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">109&lt;/span>&lt;span> asyncio&lt;span style="color:#0550ae">.&lt;/span>run&lt;span style="color:#1f2328">(&lt;/span>download_asset_concurrent&lt;span style="color:#1f2328">(&lt;/span>data&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;assets&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#1f2328">[]),&lt;/span> max_concurrent&lt;span style="color:#0550ae">=&lt;/span>args&lt;span style="color:#0550ae">.&lt;/span>batch&lt;span style="color:#1f2328">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">110&lt;/span>&lt;span> &lt;span style="color:#cf222e">else&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">111&lt;/span>&lt;span> &lt;span style="color:#cf222e">for&lt;/span> item &lt;span style="color:#0550ae">in&lt;/span> tqdm&lt;span style="color:#1f2328">(&lt;/span>data&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;assets&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#1f2328">[]),&lt;/span> desc&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Processing assets&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> position&lt;span style="color:#0550ae">=&lt;/span>&lt;span style="color:#0550ae">0&lt;/span>&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">112&lt;/span>&lt;span> dst &lt;span style="color:#0550ae">=&lt;/span> DEST_PATH &lt;span style="color:#0550ae">/&lt;/span> &lt;span style="color:#0a3069">f&lt;/span>&lt;span style="color:#0a3069">&amp;#34;&lt;/span>&lt;span style="color:#0a3069">{&lt;/span>item&lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#39;id&amp;#39;&lt;/span>&lt;span style="color:#1f2328">]&lt;/span>&lt;span style="color:#0a3069">}&lt;/span>&lt;span style="color:#0a3069">.mov&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">113&lt;/span>&lt;span> &lt;span style="color:#cf222e">if&lt;/span> &lt;span style="color:#0550ae">not&lt;/span> dst&lt;span style="color:#0550ae">.&lt;/span>exists&lt;span style="color:#1f2328">()&lt;/span> &lt;span style="color:#0550ae">and&lt;/span> item&lt;span style="color:#0550ae">.&lt;/span>get&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;url-4K-SDR-240FPS&amp;#34;&lt;/span>&lt;span style="color:#1f2328">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">114&lt;/span>&lt;span> download_asset_sync&lt;span style="color:#1f2328">(&lt;/span>item&lt;span style="color:#1f2328">,&lt;/span> dst&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">115&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">116&lt;/span>&lt;span> &lt;span style="color:#6639ba">print&lt;/span>&lt;span style="color:#1f2328">(&lt;/span>&lt;span style="color:#0a3069">&amp;#34;Done&amp;#34;&lt;/span>&lt;span style="color:#1f2328">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">117&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">118&lt;/span>&lt;span>&lt;span style="color:#cf222e">if&lt;/span> __name__ &lt;span style="color:#0550ae">==&lt;/span> &lt;span style="color:#0a3069">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span style="color:#1f2328">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">119&lt;/span>&lt;span> main&lt;span style="color:#1f2328">()&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;h3 id="使用方法">使用方法&lt;/h3>
&lt;p>首先确保你安装了以下两个 pip 依赖，在终端执行：&lt;/p>
&lt;p>&lt;code>/usr/bin/pip3 install httpx tqdm&lt;/code>&lt;/p>
&lt;p>新建一个 screensaver.py 文件，将代码内容拷贝到 screensaver.py 中，并在终端中执行 &lt;code>sudo /usr/python3 screensaver.py&lt;/code>&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-3.png">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-3.png"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>默认单线程下载，你也可以使用 batch 参数进行批量下载：&lt;/p>
&lt;p>&lt;code>sudo /usr/python3 screensaver.py --batch 5 &lt;/code>&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-4.png">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/python-script-download-macos-aerial-screensaver-4.png"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>所有壁纸下载完成后有 66G，还是挺占空间的。&lt;/p>
&lt;figure>&lt;a
 data-fancybox="gallery"href="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/gh5bq-ma.png">

 &lt;img src="https://leonscave.com/cdn-cgi/image/quality=medium-high,format=auto/https://image.leonscave.com/p/2025/gh5bq-ma.png"
 loading="lazy"
 > &lt;/a>
&lt;/figure>
&lt;p>P.S. 下载完成后可能需要重新登陆用户（或重启）后才能在设置中正常显示。&lt;/p>
&lt;p>P.P.S. 如果需要删除屏保，清除 &lt;code>/Library/Application\ Support/com.apple.idleassetsd/Customer/4KSDR240FPS&lt;/code> 这个文件夹即可。&lt;/p></description></item><item><title>写在我 27 岁的生日</title><link>https://leonscave.com/p/2025/on-my-27th-birthday/</link><pubDate>Tue, 15 Apr 2025 23:59:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/on-my-27th-birthday/</guid><description>&lt;h2 id="今天是我的生日明天也是">今天是我的生日，明天也是&lt;/h2>
&lt;p>今天是我 27 岁的生日，巧的是，明天也是──我的农历生日。我查了查，这种重合的现象大概因人而异，有些人可能每 19 年就会出现一次，而有些人则可能要等上 152 年&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>。这么看来，我还比较幸运，等到 2036 年时，我的公历生日和农历生日就恰好是同一天（完美地解决了年轻人过公历生日而老一辈过农历生日导致的信息差问题）。&lt;/p>
&lt;p>如此巧合，也许是有什么特别的天意。经济学中有一个概念，叫做康波周期。经济总是遵循着衰退-复苏-过热-滞涨-衰退的循环周期。我觉的人生没准也遵循这样的规律。
现在的我已然处在滞涨与衰退的阶段，回望过去的一年，迷茫成为了我 27 岁的主旋律。&lt;/p>
&lt;p>感到如此迷茫，上一次还是在我 18 岁时。那时我高考落榜，半推半就出了社会，不知道自己要前往何方。复读上榜后，重新找到了方向，也总是受到他人赏识。毕业三年后，我又再次站到了这样的迷茫的路口：日复一日过着一样的生活、做同样的工作。不明白自己到底该做什么，不明白自己要通往何方。&lt;/p>
&lt;p>虽然生活平静，但我依旧感受到巨大的压力。这种压力就好像你站在台风眼中。台风眼外狂风怒号，而台风眼中依旧平静。无形的压力笼罩着你，因为你不知道台风何时停止，亦不知台风将往何处去。你不确定台风眼会不会移动，此时的处境并非绝对安全。那究竟是向外寻路，还是原地祈祷，期盼台风离去？&lt;/p>
&lt;p>过去我总是原地祈祷，而现在的我想要向外探寻。&lt;/p>
&lt;h2 id="向外探寻">向外探寻&lt;/h2>
&lt;p>27 岁，我最值得留念的事情或许是去了泰国旅行。这个国度风景宜人，居民和善，我在这里感受到前所未有的松弛，也头一次用上了英语口语。我是和 Lena 一起去的，没有跟团旅行。&lt;/p>
&lt;p>这些年东南亚一直不太平，泰国也蒙受阴影。我也因此感到紧张，再加上是第一次出国，害怕此行会遭遇不测。但落地后这种紧张感随即消失了。&lt;/p>
&lt;p>泰国是一个很适合度假的国家，消费很低，节奏很慢。我们落地去了普吉岛，在一个叫 Kata 的地方住了六天，体验这里的风土人情。我很喜欢这种“躺平式”的旅游，在一个地方常住上一段时间，体验生活，而不是走马观花，跑这跑那。可惜的是假期有限，没能多住几天。&lt;/p>
&lt;p>返程时顺路去了曼谷，一座很繁华的城市。我倒觉得无聊，像是另一个深圳。
接下我还打算去更多地方，下一站想去印尼看看火山，也许是去尼泊尔寻找下原始佛教的踪迹。也许，我不知道。&lt;/p>
&lt;p>泰国旅行回来后，重新回到原初的生活，我感到一种深深的割裂。我这才发现我之所以迷茫的原因──我并未遵循自己的本心去生活。一直以来，我循规蹈矩，按部就班，只为满足其他人：父母的期待、社会的标准、制度的引导。我从未搞明白，自己到底为何而活。我一直在思考，我们是否有决定自己生活方式的权利？我们一定要遵循同一种世俗的评价标准吗？&lt;/p>
&lt;p>循规蹈矩不是不好，事实上，制度保护了许多人，我也在这个框架下受益，只是我受够了被一种价值观胁迫。&lt;/p>
&lt;h2 id="构建意义的世界">构建意义的世界&lt;/h2>
&lt;p>小说《悉达多》里，悉达多的好友葛文达不明白为什么悉达多要背弃佛陀的教义&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>，而是自己去探寻真理。虽然最终他在悉达多的面容中，看见了佛陀般的智慧与宁静──那正是“道”与“涅槃”。&lt;/p>
&lt;p>我曾经和葛文达一样困惑：若修行佛法同样能得道，何必还要舍弃已有的真理，自苦其身去探索？&lt;/p>
&lt;p>现在我大概想清楚了──全盘接受他者的价值体系，得到的是一个被解释、被规定好的“意义世界”。这个世界或许能许诺你一座“天堂”，但失去主动权与自由的“被给予”的世界，最终只能是一个牢笼。&lt;/p>
&lt;p>而怀着困惑去寻求属于自己的“意义世界”，你已经在行使自己的主动权与自由，主体性悄然形成，世界的诸多可能性也随之向你敞开。这个世界是你主动寻求并构建的，从这个过程中获得的力量和智慧，是前者怎么也不能比拟的。说白了，便是“纸上得来终觉浅，绝知此事要躬行”。&lt;/p>
&lt;h2 id="27-岁">27 岁&lt;/h2>
&lt;p>27 岁，我迎来了我人生中的第二个叛逆期。如果说 &lt;strong>18 岁的叛逆是出自对父母权威的抗争，那 27 岁的叛逆来自对社会规训的质疑&lt;/strong>。18 岁时，父母说“你该这样”，我偏不，因此鼻青脸肿。如今，社会告诉我“你必须那样”，我还是偏不。或许会再次头破血流，但我仍然想要知道到底什么是对、什么是错。我一定要亲自体验。&lt;/p>
&lt;p>27 岁过去，属于我的成长锵锵降临。&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a href="https://zh.wikipedia.org/zh-cn/Topic:Vo77wq8s61nssebt">https://zh.wikipedia.org/zh-cn/Topic:Vo77wq8s61nssebt&lt;/a>&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>佛陀的全名是释迦牟尼·悉达多，小说《悉达多》里拆成了两人。&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>半夜</title><link>https://leonscave.com/p/2025/midnight/</link><pubDate>Sun, 06 Apr 2025 06:15:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/midnight/</guid><description>&lt;p>半夜被腹痛和憋尿闹醒，醒了以后就睡不着了。翻来覆去，思绪万千，想想还是起床写写文字吧。&lt;/p>
&lt;p>不知道是不是那天陪 Lena 去医院后感染了流感，现在整个人都不舒服，发烧，再加上治疗幽门螺杆菌带来的肠胃不适，整个人备受煎熬。此前说治疗幽门螺杆菌的过程像是在渡劫，就我现在的体验来说，确实如此。&lt;/p>
&lt;p>我又要度过一段煎熬的时光。我的心态倒是放得很平，困难的日子总是会过去，阳光将会来临。然而，困苦总是短暂的，阳光也是。&lt;/p>
&lt;p>人就是这样活在光与影的两面下，只不过有些人阳光的日子多，有些人阴郁的日子多。回望过去一年到现在，我的生活里遍布乌云。我正在而立之年的边际徘徊，心智与身体都开始向着更高的层级进发，这又何尝不是一种对我的考验呢？&lt;/p>
&lt;p>然而，不管你接不接受，光与影总是会交替的过去，它不被你的个人意志所影响。只是你如何看待、如何行动，会给自己带来不同的结果。应当顺应天理，算上一卦。&lt;/p>
&lt;p>卦上写着，阴雨时潜龙勿用，阳光时飞龙在天。&lt;/p></description></item><item><title>工作是为了什么？</title><link>https://leonscave.com/p/2025/work-is-for-what/</link><pubDate>Thu, 03 Apr 2025 17:04:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/work-is-for-what/</guid><description>&lt;p>今天一天都忙着工作，整个人都头昏脑涨。一个需求搞了三个星期，才勉强完成，真是有够离谱的。&lt;/p>
&lt;p>我也不确定是需求本身难，还是我自身的工作效率降低了，但是在这里工作，真的让我很不舒服：逼仄的工作空间、几乎没有线下交流，每天就像是在远程办公。老实说，我的工作时间里大部分都很轻松，可我依旧觉得自己很累。&lt;/p>
&lt;p>我想要离开。然而短时间里，我又不能离开，我确实很想一走了之，但人总是被各种现实因素裹挟，没得办法。&lt;/p>
&lt;p>想起之前在面试的最后见到各种公司高层领导时，我所见的都是一张写满了疲惫的脸，他们是把所有的时间都献给公司了？我倒是觉得可悲，如此努力，几乎将生命献给公司，真的值得吗？&lt;/p>
&lt;p>我一直在思考工作对我的意义，工作对现在的我来说，仅仅是为了生存，而不是实现个人价值。我想，每个人的个人价值，也并不只有工作这种方式才能实现。人的一天有 24 小时，而工作就要占去 8 小时，除去睡眠的 8 小时，我只能留 8 小时给我自己──&lt;strong>这真是太可怕了&lt;/strong>。&lt;/p>
&lt;p>从学校毕业后，许多人都按部就班的找好了工作，仿佛听从了什么指示。我向来感到困惑，因为从没人告诉你，工作是为了什么？社会需要你去工作，政府出了一系列政策，胁迫你去工作：不工作不能享受社保、医保，许多地方，没有工作甚至不能办储蓄卡、办签证出国等等，生活上使你处处受限，也让你对自己的未来感到焦虑；家人需要你去工作，你有一家老小需要养活，你还有房贷、车贷，还有各种身外之物限制着你，使你无法脱身，不一而足。总之，许多人处在不得不工作的状态，也在工作中消磨了自己的心性，然而，城市里工作者们的悲剧总是相通的：一到假期，想要换个地方放松，景区里却总是挤满了人，无休止的排队甚至比工作还累。大家都秉持着一样的想法、大家都绷紧着一样的心灵。&lt;/p>
&lt;p>生活在中国的社会里，总会有一种很紧绷的感受。前些年流行“松弛感”这个词，也出现许多装作“松弛感”的笑话，归根结底，还是我们的社会太紧绷了。有人说是中国人不会休息，许多人自出社会工作以后直到老去。我想，是社会不鼓励人们休息，在这个连双休制度都没有完全落实、简历稍有几年空档期就会受到企业歧视的国度，想要休息谈何容易。我不确定是不是只有中国人这样，在我去泰国旅行的时候，那儿的经济虽说不上好，但从居民脸上看不到愁容，各种路人都会与我这个异乡人打招呼──这在我们这里是很少见的。&lt;/p>
&lt;p>我能去做一些工作之外的事情吗？现在的我只能靠工作养活自己，我也不知道自己还能做什么赚钱，有句话是这么说的：“月薪是一种毒药”，现在流行考公务员，大概也是为了那一份固定拿月薪的“安稳”。然而，这份安稳的毒药会让人失去前行的动力，我也渐渐的在每个月拿月薪里渐渐失去了斗志。我开始发现了这一点，试图培养自己在工作之外的兴趣爱好，比如写作，只是收效甚微，暂时只能聊以自慰。&lt;/p>
&lt;p>龚自珍的诗词写：“我劝天公重抖擞，不拘一格降人才”，我倒希望反过来，有没有人能识得我这个人才，将我从现在的泥沼里拉出来，携手共创对人类有益之事业。&lt;/p>
&lt;p>呵呵，无非是打工人打出幻觉后的幻想罢了。&lt;/p></description></item><item><title>三十而立，第一个需要正视的是自己的身体</title><link>https://leonscave.com/p/2025/thirty-and-establish-first-need-to-face-own-body/</link><pubDate>Tue, 01 Apr 2025 08:51:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/thirty-and-establish-first-need-to-face-own-body/</guid><description>&lt;h3 id="震颤">震颤&lt;/h3>
&lt;p>大概是去年下半年开始，张开手时，我的手指会莫名的震颤，完全不受肌肉的控制。有朋友建议我去看看甲状腺，再加上体检报告显示我有甲状腺结节、最近也觉得自己相比之前情绪不稳定，很是担忧，于是这周末我又去了趟医院。
幸运的是，我的甲状腺一切正常，但如此一来，反而增添了更多的困惑──我更不明白我的情绪失常、焦躁易怒、手颤的原因究竟从何而来得了。&lt;/p>
&lt;p>医学上关于手颤的成因有三种方向：一种是甲状腺因素导致的甲亢；一种是帕金森病；还有一种是功能性震颤。&lt;/p>
&lt;p>甲状腺的因素已经排除了，帕金森病我估计也不太可能，我的手颤还没有严重到止不住抖动的程度，这种病在年轻人身上也相当罕见，唯一的可能就是功能性震颤了，与神经有关，更直接的说，是抑郁症躯体化的体现。&lt;/p>
&lt;p>我不太愿意相信我会得抑郁症，我一直觉得这种病症离我比较遥远。我自认为自己乐观、阳光、大部分时间心态都不错，可这样的我也会被抑郁缠上吗？我甚至怀疑，是不是自己不够坚强，才会被这些莫名的情绪拖垮？
心理的问题还未解开，身体的问题又接踵而来。&lt;/p>
&lt;h3 id="四联疗法">四联疗法&lt;/h3>
&lt;p>拔完最后一颗智齿后，我开始吃治疗幽门螺杆菌的药，用的是四联疗法，每天都需要吃四种药：两种肠胃药，两种抗生素，坚持十四天。此前我听别人说，副作用很大。据那人所说，整个疗程的感觉就像是渡劫，异常煎熬。我才服用第一天，就感受到了相当大的威力──一上午肚子都有种说不出来的不适感，肠子像是抽筋般的隐隐作痛，还伴随着轻度的恶心。&lt;/p>
&lt;p>四联疗法的威力很大，是因为其治疗过程类似于化疗，无差别地杀死了肠道里的一切细菌，包括益生菌。因此许多人都没法坚持下来，医生也告诫我要坚持，不要中途停药，否则将没有效果。我倒也希望自己能坚持，唉，人生里要坚持的东西真是太多了。&lt;/p>
&lt;h3 id="而立">而立&lt;/h3>
&lt;p>今年我 26 岁，马上要迎来自己 27 岁的生日，距离那不详的数字──30 岁，已来日无多。子曰三十而立，当我无限接近这个年纪时，却不禁怀疑，我真的能够而立吗？&lt;/p>
&lt;p>需要迷茫的事情太多了。生活就像一团迷雾，我还没有找到方向，却马上又要担当成家立业的责任。当我凝视自己的身体，发现到处都是破破烂烂，不是这里不舒服，就是那里有问题。这段时期每个周末都在往医院跑，化验单攒了一茬，却还是没有找到所有的答案。肉体是心灵的圣殿，承载人的所有喜怒哀乐。我的这具肉体陪我走过快 30 年，从未有怨言，如今也开始发出疲惫的信号。&lt;/p>
&lt;p>三十而立，我想，人第一个应当正视的是自己的身体，修好这座圣殿，才能在生活的迷雾中站稳脚跟，重新出发。&lt;/p></description></item><item><title>《某种物质》：用血肉横飞平等的创飞每一个观众</title><link>https://leonscave.com/library/movies/some-substance-blood-flesh-equality-creation-every-audience/</link><pubDate>Tue, 18 Mar 2025 22:21:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/library/movies/some-substance-blood-flesh-equality-creation-every-audience/</guid><description>&lt;p>刚刚看完了 Cult（邪典）电影《某种物质》，给我留下了不小的心理创伤。&lt;/p>
&lt;p>起初，电影的节奏不紧不慢，尺度也算正常，只是时不时的有些香艳画面，但是直到电影的最后半小时，我才领略到什么叫做 “Cult”。前面有多娇艳动人，后面就有多恶心不堪：主人公拖着畸形的肉体，在舞台中央不断旋转着喷洒鲜血，像一朵盛开的蓝莲花，这样的画面实在令我感到不适。导演直接踩死油门，用血腥暴力猎奇的卡车平等的创飞每一个被开头光鲜亮丽与情色画面吸引而来的观众🤮。&lt;/p>
&lt;p>&lt;img src="https://static.quail.ink/media/4r5zgt428z.webp" alt="image-1">&lt;/p>
&lt;p>回到电影本身，剧情其实并不出彩，还有一点硬伤。比如主人公这样看似不事生产的女子，竟然掌握外科手术与木匠工艺；子体与母体的追逐战里，母体拖着衰老的身体却身手矫健，和子体打得有来有回，观感非常出戏。&lt;/p>
&lt;p>在电影主题上，导演似乎是想探讨父权主导的（影片里的权力者都是男性）资本主义制度下，资本选择（观众总是喜欢年轻的）与父权凝视如何毁灭女性。然而，从剧情来看，这场悲剧本身又是主人公自我的贪婪、母体与子体的恶性竞争（雌竞）导致的，所以令人困惑，不是很确定导演的立意在哪里。&lt;/p>
&lt;p>但是抛开这些立意不谈，影片本身在视觉冲击和恐怖氛围上塑造得相当不错，绝对是近几年非常值得一看的 Cult 电影。&lt;/p></description></item><item><title>龙场悟道</title><link>https://leonscave.com/p/2025/longchang-wudao/</link><pubDate>Mon, 17 Mar 2025 15:33:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/longchang-wudao/</guid><description>&lt;p>午时，不知怎么就想起了王阳明，想到了龙场悟道。&lt;/p>
&lt;p>我对王阳明了解不多，但是龙场悟道这四个字的传奇色彩太强了，挺装逼的，于是在 B 站搜了点视频资料来看。龙场悟道的故事，是说王阳明在朝为官被奸人所害，假装投河才侥幸得一条性命。之后便在龙场（贵州的一个道场）里悟道，最终得道，从此成为圣人。&lt;/p>
&lt;p>短视频横行的时代，大多数视频资料都比较浅薄，讲述和二手烟一样的二手知识，信息密度很低，缺乏洞见。我想，还是得亲自读一下《传习录》，研究下心学。虽然只是浮光掠影，但我心里还是有个念头，觉得阳明龙场悟道，跟禅宗的顿悟还挺像的。&lt;/p>
&lt;p>禅宗推崇顿悟，喜欢那种“棒喝式”的启示，在我看来有些极端。弟子向师傅求道时，师傅不是当谜语人，就是打杀弟子。我看过最离谱的禅宗故事，是一位弟子向师傅求道，师傅直接挥刀把他手臂砍了，弟子当场悟道，成佛了。&lt;/p>
&lt;p>看到这样的故事，你肯定跟我一样的想法：我操，什么玩意儿？这也行？&lt;/p>
&lt;p>对于禅宗有许多的批评，上面的故事可见一斑。那位弟子究竟是真的悟道了，还是仅仅被师傅的屠刀下破了胆？我们已无从得知。当今社会许多法师声称自己顿悟了，得道了，以此获得社会地位，但你没法证明他们悟道的真实性，毕竟是顿悟，你也没法实践。&lt;/p>
&lt;p>在我看来，顿悟未必是假的，只是它并非凭空发生，而是量变引起的质变。&lt;/p>
&lt;p>龙场悟道和禅宗的棒喝悟道有异曲同工之处，都是在人经历大劫大难之后，内心处于极端的平静的刹那，才产生的悟。&lt;/p>
&lt;p>对于这些悟道的过程，我很感兴趣。我也很喜欢这些圣人的故事，羡慕他们找寻到了自己的道路。心无二物，只有本心，这或许就是涅槃的状态，佛陀当年在菩提树下感悟的，亦或是如此。内心平和，精神充盈，无喜无悲，我只有在极度专注的时候才能有这样的感受（其实贤者时间也是，我认为这也是藏传密宗“走火入魔”的原因）。那时我的内心充盈，没有恨，没有憎，感恩与感激一切，头脑清醒，不冲动，有条理。但这样的时刻不多，因为 ADHD（多动症） 的缘故，很快我又会重新回到混沌。&lt;/p>
&lt;p>佛陀说，众生是蒙尘的镜子，佛是擦了镜面的众生。我相信每个人身上都有一种佛性，是属于他的悟，这种悟不一定通过佛学这一种哲学思想来表达，它也可以是程朱理学、阳明心学、老庄道学、斯多葛主义、马克思主义，关键还是在于如何践行。凡夫俗子悲哀的根本，可能就在于无法知行合一：想的很多，做的很少；做的很多，却不遵循本心。&lt;/p></description></item><item><title>小王子</title><link>https://leonscave.com/p/2025/little-prince/</link><pubDate>Fri, 14 Mar 2025 13:40:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/little-prince/</guid><description>&lt;p>曾经，我的妹妹很喜欢《小王子》，那时她读六年级，我们还住在河畔的旧宅。我在书店送了她一本《小王子》，她很高兴，因为她的《小王子》在学校弄丢了。&lt;/p>
&lt;p>我儿时并未读过小王子，这是一本很薄的书，以成年后的我的阅读速度，很快便把它读完了。这本书在我看来平平无奇，讲一个很普通的故事，我也没有什么特别的感受。书的扉页赫然写着——“献给一切内心依然保持孩童的人”，好吧，也许是我长大了，无法再与孩子共情。&lt;/p>
&lt;p>春节回去，不再见到小王子的身影。我的妹妹现在迷恋一些我不曾了解的韩国明星，她的抽屉里满是各种明星的周边物品，俨然成为了一位追星族。我感到错愕，继而转变为无奈与不安。我也只能自我安慰：她进入了青春期，自我意识正蓬勃发展，喜欢这些东西再正常不过。我学生时代也有许多女生在追星，或许对于女孩而言，慕强与建立审美是成长的必经阶段。&lt;/p>
&lt;p>我有一种曾经长辈在我身上的担忧，害怕孩子学坏，害怕他们不能走上正途。而那时的我只觉得长辈啰嗦，没有人理解我，过去了许多年，我才理解了他们的心情。&lt;/p>
&lt;p>书中写到：“所有的大人都曾经是小孩，虽然，只有少数的人记得”，我才发现，原来我已经走了这么远，远到成为担忧起别人的大人，远到看不清自己曾经的模样。&lt;/p>
&lt;p>我还是怀念那个小王子，怀念那个美好，单纯的小王子。怀念依赖我亲切叫我哥哥的妹妹，怀念走在路上，对一切充满好奇心的自己。&lt;/p>
&lt;p>或许这就是这么多人喜欢《小王子》的原因吧，我们曾经都是小王子，可后来弄丢了自己心里的小王子。&lt;/p></description></item><item><title>读书、健身，与鬼神之谈</title><link>https://leonscave.com/p/2025/reading-fitness-conversations-with-spirits/</link><pubDate>Tue, 25 Feb 2025 14:52:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/reading-fitness-conversations-with-spirits/</guid><description>&lt;h3 id="kindle">Kindle&lt;/h3>
&lt;p>将 Kindle 从国区迁移到美区之后，我才发现 Kindle 设备上的自有文档笔记支持跨平台同步了。我不确定这是美区特有的功能，还是这些年来我都没用明白 Kindle。总之，这个意外的发现让我挺开心，终于解决了我使用 Kindle 以来的一大痛点。&lt;/p>
&lt;p>此前，记录在 Kindle 上的笔记就像一座孤岛，所有的内容都封存在设备里的一个 txt 文件中，难以管理，更谈不上利用。久而久之，我也不情愿在 Kindle 上做笔记，于是阅读就只剩下了读。&lt;/p>
&lt;p>虽说读书不一定要抱有什么强烈的目的，但我总觉得读书还是要留点什么才好，留下一些笔记，记录下自己当时的想法，才算是和一本书真正建立了联系。我幼时读过很多书，只是当乐趣才读，从未留下任何痕迹。要是现在能翻看儿时的读书笔记，回顾当时的想法，一定会有所触动吧！&lt;/p>
&lt;h3 id="健身">健身&lt;/h3>
&lt;p>昨晚练胸大肌，健身房没有杠铃架，只能拿史密斯机练卧推了，过去我总是讨厌史密斯这种器械，因为它的运行轨迹是固定的，而每个人的身材比例是不同的。使用这样的器械来锻炼，很容易受伤或者姿势错误而不自知，不过没办法，没有条件只好将就。&lt;/p>
&lt;p>许久不练杠铃卧推，才上了 30kg 的配重，便觉得吃力，但是感受真的很棒。我感到我的肌肉被撑开了，身体却在源源不断的提供力量——一个字，爽。&lt;/p>
&lt;p>训练搭子的水平远超于我了，我的内心有点羡慕，刚开始一起健身的时候，我们的差距还没有那么大，现在我各方面都落后于他了。龟兔赛跑不只是小时候的故事，而是现实的写照。刚开始训练的时候，大家都赞美我有训练天赋，短时间就进步飞快，我也因此而自满，但力量训练这件事情，从来不是短跑，而是马拉松，努力在赛道上奔跑的人才能摘得桂冠。&lt;/p>
&lt;p>我之前一直希望自己能推起 100kg 的杠铃，100kg 的卧推对健身者来说是一种考核的象征，通过了，说明你在力量训练这条路上，已经小有成就（按照亚洲成年男子 70kg 的平均体重来算，卧推 100kg 相当于推起了自身 1.4 倍体重，已经算是有水平的训练者了）。此前我已经推到了 90kg，100kg 似乎尽在咫尺，但那以后我陷入瓶颈，也远离了健身。如今， 90kg 的杠铃对我而言仿佛是一座大山。很希望自己找回过去的状态，加油！&lt;/p>
&lt;h3 id="怪力乱神">怪力乱神&lt;/h3>
&lt;p>早上抖音给我推了一个灵异事件的视频，我有些好奇，便搜索了相关内容，看到许多网友分享自己的灵异经历，让我有点惊悚，没办法，我从小就怕这个，但是又爱看。&lt;/p>
&lt;p>对于鬼神，我一直是一种模棱两可的态度，我不屑，是因为我觉得它们于我无用，神不佑世人，世人便不赞神，努力都是我自行的，和你有什么关系？我害怕，是因为我自己也有一些相似的经历，这种亲验的经历，无法用科学来解释，就令人疑惑。20 岁往后，怪力乱神的经历少了（民间传说人在幼时通灵，容易见到鬼神，成年后阳气旺，不容易见鬼神），我倒也想通了，我无需神明的恩赐，若有命运，那我按照命运循规蹈矩，若命运无形，那我便奋发自强自行努力。我素来行善积德，问心无愧，鬼怪若是加害于我，那我便与你斗争个鱼死网破。&lt;/p>
&lt;p>或许是学业压力太大，中学时期我常常有梦魇的经历，也就是俗称的“鬼压床”。梦魇的体验真的不太好受，你的意识清醒，但是手脚却无法动弹，恐惧渗透进每一寸肌肤。如今，这种经历几乎没有了，我却反而有点期待。现实中，这种体验太过稀有，恐怕只有蹦极能够比拟：清醒的意识、失控的肢体、极限挣扎后重新掌控的自我——既可怕，又疯狂。&lt;/p>
&lt;p>《JOJO的奇妙冒险》里说，“人类的赞歌就是勇气的赞歌”，人终究还是要靠自己，没有什么是不能斗争的。若鬼神有眼，就不该让众生受难。若鬼神真的存在，它们恐怕也只是欺软怕硬、沽名钓誉之徒。&lt;/p></description></item><item><title>重返健身房</title><link>https://leonscave.com/p/2025/2025-02-19/</link><pubDate>Tue, 25 Feb 2025 13:34:00 +0000</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/2025-02-19/</guid><description>&lt;p>昨天约了曾经一起健身的好友，重新回到健身房。这次见面，已是我们时隔一年的重逢。我们因为健身房而结缘，也因健身卡到期而各奔东西，彼此的生活轨迹在那之后再无交集。&lt;/p>
&lt;p>离别时人们总是说一些“下次再见”，“有空常聚”之类的祝福话，在我看来有些多余，因为现实的因素，再聚总是遥遥无期，我索性就懒得说这样的话，只希望分别的另一方，生活能够顺利。&lt;/p>
&lt;p>我算是一个边界感比较强的人，不希望别人随意的侵入到我的生活，同样也不会随意的打搅他人。或许正因为如此，我越来越不渴求朋友了，也很少主动维系关系。丽丽曾经问我：“那些朋友你不再联系了吗？不会感到惋惜吗？”，我觉得还行，没有什么惋惜的。常言道，君子之交淡若水，我们随缘而相聚，终因无缘而离别。若缘分未尽，自会再相见。&lt;/p>
&lt;p>从 23 年第一次踏入健身房开始，我的肉体获得了长足的发展，变得健壮有力。以前的我身型瘦削，体质孱弱，每当时过夏末，秋季依始，我往往要生上一场大病。健身以后，反而没生过什么病了，最令人欣慰的是，再也没有人说我瘦了。&lt;/p>
&lt;p>24 年中期新冠病毒重新肆虐，我反复感染了好几次病毒，后面又花了很多时间在驾校，因而荒废了健身。这次重返健身房，希望是好的开始。&lt;/p></description></item><item><title>首页寄语</title><link>https://leonscave.com/p/2025/shouye-jiyu/</link><pubDate>Wed, 01 Jan 2025 15:41:42 +0800</pubDate><author>leon.its@outlook.com (leon)</author><guid>https://leonscave.com/p/2025/shouye-jiyu/</guid><description>&lt;p>鸵鸟将头埋进土里，以此躲避危机。&lt;/p>
&lt;p>我们也需要一个洞穴，暂时藏身，让心灵喘息。&lt;/p>
&lt;p>欢迎来到我的洞穴。&lt;/p></description></item></channel></rss>