中文圈程序员的碎碎念
509 subscribers
3.52K photos
21 videos
129 files
28.7K links
嘿!你也来看码农又在写啥BUG了吗
Download Telegram
血谜拼图

报复暴力拆迁的连环杀人犯罪悬疑韩剧

via Lei Mao's Log Book
我关注的项目这周更新了什么-20251128

简介

每周五更新,所有的更新也会发送到我的频道

https://t.me/bboyapp

规则

pre release的不记录
只记录重要的更新
上一版本版本的bugfix不记录,比如某一个项目最新版本是7.0.0 上一个版本6.0.0发布了一个bugfix 6.0.1 那么不会记录
比如lens发布了一个新版本,那么openlens也会发布一个新版本,此时只会记录lens发布的信息,不会记录openlens发布的信息

via Bboysoul's Blog
欧陆风云5的游玩笔记

最近一个月共玩了 270 小时的欧陆风云5 ,这两天打算停下来。最近在游戏后期打大战役时,交互已经卡得不行。我已经是 i9-14900K 的 CPU ,估计升级硬件已经无法解决这个问题,只能等版本更新优化了。

ps. 其实只要把游戏暂停下来立刻就不卡了。虽然我直到这个游戏需要的计算量非常大,但是卡交互操作肯定是实现的不对。因为这并不是因为渲染负荷造成的卡顿,可以让游戏时间流逝更慢一些,也不应该让鼠标点击后的界面弹出时间变长。

在暂置游戏前,我先把一些关于游戏设计上的理解先记录下来。也是对上一篇的补充

在最初几十小时的游戏时间里,我一直想确认游戏经济系统的基础逻辑。和很多类似策略游戏不同,欧陆风云5 在游戏一开始,展现给玩家的是一个发展过(或者说是设定出来)的经济系统版图。玩家更需要了解的是他选择扮演的国家在当下到底面临什么问题,该怎样解决。这不只是经济,也包括政治、文化和军事。而很多游戏则是设定好规则,让玩家从零开始建设,找到合适的发展路径。

大多数情况下,EU5 玩家一开始考虑的并不是从头发展,所以在游戏新手期也没有强烈的理解游戏底层设计细节的动机。不过游戏也有开荒玩法,在游戏中后期势必会在远方殖民、开拓新大陆;甚至游戏还设计了让玩家直接转换视角以新殖民地为核心来继续游戏。但即使的重新殖民,在四周鸟无人烟的地方开荒,和在已有部分发展的区域附近拓展也完全不同。

我十分好奇这样一个复杂的经济系统是怎样启动起来的,所以仔细做了一点归纳笔记。不一定全对,但很多信息在游戏内的说明和目前的官方 wiki 都不完整,只能自己探索。

----------------------

游戏中的一切来源于“原产”,官方称为 ROG ,比较类似异星工厂里的矿石。上层的一切都是从原产直接或间接获得。版图上的任何一个最小单位的地块,只要上面有人口,就会不断生产出唯一品种的原材料进入这个世界。它和国家控制力、市场接入度都无关系。比原材料更高级的产品都是由原产直接或间接转换而来。

货币本身在世界中不以资源形式存在,货币本身也没有价值。货币的存在在于推动包括原产在内的原材料和产品等在世界中的流动。所以,世界中即使不存在经济活动、没有货币,亦或是货币急剧膨胀,这些因为国家破产而债务消失等让货币总值急剧变化的行为也不会直接影响这个世界中的物资变化。即没有很多游戏中直接用钱凭空兑换成物资的途径。

换句话说,如果整个世界缺铁,那么只能通过生产手段慢慢的产出,再多的钱也无法变出铁来。但分配更多的人力去生产、更高的科技水平可以获得铁产量的提升、使用更高效的配方、各种提升生产率的增益等等都可以加快铁的产出速度。

从一个世界的局部看(这是一般玩家的视野),获得原材料的方式有三种:

1. 养活更多的劳工或奴隶开发对应原产。
2. 在合适的地理位置上用劳动或奴隶生产。
3. 从附近的市场进口。

第一种方式,玩家拥有对应原产地,然后在地皮上增加人口。但新增人口是农民,还需要从农民升级成劳工。国家 buf 中,默认只有原住民满意度对产量有轻微的增益。

第二种方式,玩家有更大的自主性。以铁为例,只要是湿地地形或者地皮邻接湖泊,就可以主动产铁。这种生产除同样需要劳工外,还有原料开销:把炭转换为铁。这种生产方式直接被市场接入率打折,即离市场越远的地方单位人口的生产效率越低,但同时有更多增加生产率的增益途径:最基本的就有当地劳工识字率和市民满意度。和虽然和第一种方式一样需要劳工,但游戏似乎会先满足原产需求的劳工,多出部分才进行建筑生产。所以在劳工不足时,若需进行建筑生产,需要主动减少原产等级。因为生产建筑可以由玩家主动关闭,但原产似乎不行。

第三种方式,通常需要在本地市场拥有一定的市场容量。在不考虑成本时,甚至可以亏本进货。对开荒来说,进口原料比进口成品的优势就在于占用更少的贸易容量。

为什么上面以铁举例,因为铁是开荒时最重要的资源。虽然木头和石头也很重要,但游戏把木材、粘土、沙、石头设定为一般物资,所有地块都有一个很低的默认产能,从市场角度看,根据市场规模,每个市场总有一定量的供给。但铁不属于这种物资。

建造建筑需要的基本材料是砖头,砖头可以通过基础建筑,从粘土或石头转换。

开发原产需要的基本材料是木头或工具。大多数基础建筑的生产配方里都需要工具。而工具在非城市生产建筑中,只有乡村市场可以把铁转换为工具。所以、如果开荒时的市场中缺铁,就只能通过进口。进口制造工具的铁比进口工具更能利用上贸易容量(铁和工具的单位贸易容量相同,但铁到工具以 4:5 转换)。

铁矿在版图上相对其它资源更少,所以一般开荒需更关注市场覆盖下有无湿地地形或有无湖泊,同时需要用充足的木材供应,可以把木材转换为炭再转换为铁。

一旦单一地块上的人口超过 5000 ,就可以升级为城镇,这种生产就有更多选择。以工具制造来说,城镇里就多出了用石头或铜转换为工具的配方。尤其是石制工具的途径,虽然效率很低,通常利润也很低,但贵在石头有保底产出。城镇的升级需要砖头和玻璃,玻璃可通过沙子转换,而沙子有保底产出或通过工具加木材转换。

开荒期间,解决了木头、砖头、玻璃、工具这四种基本货物(前三种是各种基础建筑建设需求,最后是大部分生产转换配方的必须)后,就要考虑提高产能的问题,这里的核心之一是纸。因为劳工识字率影响着生产率。纸是印书的原料、书是图书馆的维持品,而图书馆以及更多提高识字率相关的建筑都需要书。

造纸术需要纤维作物或皮革或布匹。纤维作物的基本生产方法是在对应农场通过牲畜木材工具制造;而牲畜则在耕种村落通过工具加粘土转换;皮革则可以在森林村落通过沙加焦油和野味转换,其中焦油在一般木材产区都可以通过木材转换得到。

另一个重要的资源是人口。它在游戏中和钱一样重要、甚至更重要。因为一切的生产行为都需要人。对开荒而言,升级到城市对效率影响最大,这里的硬性要求就是 5000 基础人口。除了主动殖民,就是本地土著转换、周边迁移(集中)以及自然生长率。这些都可以通过内阁行为略微加速,同样关键是修定居点(同时加移民吸引度和自然生长率)。定居点除了 250 农民外的维持成本是石头、木头、羊毛、野味。前两个一定有保底产出,后两个不是必须,缺少只会让效率打折,但供应充足可以发挥全部性能。定居点和乡村市场都占用农民,在最初阶段,我感觉乡村市场更重要一些,毕竟可以制造工具,还能提供宝贵的贸易容量。

不同阶层人口除了产生固定需求(吃掉本地市场的部分产出)外,更基本的需求是食物。EU5 中的食物系统设计,我觉得也是很巧妙的。

食物并不是货物的一种,而是和钱一样,表示为一个单一值。最主要的食物来源是生产带食物属性的货物(被称为食物原料)的副产品。属于食物原料的货物,被设定了不同的食物倍率,这就让有些食物原料产生食物的效率更高。不工作的劳工默认会以一个较低的产能生产食物,所以不必担心多出来的劳动力被浪费。另外,农民在森林村落里,虽然产品皮革并非食物原料,但生产行为本身被设定了食物产能。另外,农村相对城市有额外的食物产能的乘数增益。

食物的仓储按省份为单位计算,省份归属的若干地块共享一个食物仓库。在每个省份会优先填满仓亏,多出的部分卖给了所属市场,这里是不计市场接入度的。而一旦仓库有空间,就会从所属市场购买。战争是影响它的一个变数。因为军队也会从这个仓库中获取食物,围攻会阻止市场上的食物交易。

食物在本地市场上的交易行为会影响到本地食物价格,购买食物的开销和销售食物的收入是分开计算的,全部通过国库完成。市场间并不能单独交易食物,但通过对有食物原料属性的商品的交易,会产生附带的食物流通(但并不会产生额外的货币流动)。我觉得理论上会出现市场仓库中的食物储量为 0 ,但依然出口食物原料的情况,但实际玩的时候并没有发现,所以不清楚游戏怎样处理。但我猜测,食物流通是在单独层面计算的。既然超出市场食物容量的食物似乎就消失了,那么也可以接受万一食物储量为 0 却继续出口的情况,把储量设为 0 即可。

----------------------

最后,写写我对税收的看法。

简单说,游戏里的经济活动产生了税基。税基中按王室影响力直接把钱进入国库,另外的钱按阶层影响力分到了各阶层。但玩家可以对阶层分得的钱征税,让这些钱进入国库。

看起来,在不造成阶层不满的前提下,税率越高,国库收入就越高。但实际我玩的感觉是,其实税基才是整个国家的收入,国库仅仅是玩家可以主动调配的部分。阶层保留更多的收入,也会投入到国家发展中去,只不过有时不是玩家想要的方向,甚至是负方向。例如当玩家想削弱某个阶层的影响力时,阶层把钱投入都修建扩大本阶层影响力的建筑上。但总的来说,如果国库钱够用,更低的税收更好。因为税基相同时,税收影响的是分配。低税收必定增加阶层满意度,带来的正面增益是额外的。正所谓藏富于民。

而影响税基最重要的是地区控制度。当然地区控制度不仅仅影响税基,还影响了更多建筑的效率。从这个意义上来说,地方分权比中央集权更有利于经济发展。分封属国,尤其是朝贡国,比大一统国家会获得更好的经济局面。

但权力分配在游戏中也相当重要,因为它直接影响调配价值观的能力。价值观在一盘游戏进程中必须配合时代发展而演变才能更好的发展经济。而集权以及王室影响力是权利分配能力的来源。

所以说,最终玩整个游戏的体验还是在和面,只是多出了一份历史感。有了真实历史这种后验知识,才更为有趣。

via 云风的 BLOG
欧陆风云5的游玩笔记

最近一个月共玩了 270 小时的欧陆风云5 ,这两天打算停下来。最近在游戏后期打大战役时,交互已经卡得不行。我已经是 i9-14900K 的 CPU ,估计升级硬件已经无法解决这个问题,只能等版本更新优化了。

ps. 其实只要把游戏暂停下来立刻就不卡了。虽然我直到这个游戏需要的计算量非常大,但是卡交互操作肯定是实现的不对。因为这并不是因为渲染负荷造成的卡顿,可以让游戏时间流逝更慢一些,也不应该让鼠标点击后的界面弹出时间变长。

在暂置游戏前,我先把一些关于游戏设计上的理解先记录下来。也是对上一篇的补充

在最初几十小时的游戏时间里,我一直想确认游戏经济系统的基础逻辑。和很多类似策略游戏不同,欧陆风云5 在游戏一开始,展现给玩家的是一个发展过(或者说是设定出来)的经济系统版图。玩家更需要了解的是他选择扮演的国家在当下到底面临什么问题,该怎样解决。这不只是经济,也包括政治、文化和军事。而很多游戏则是设定好规则,让玩家从零开始建设,找到合适的发展路径。

大多数情况下,EU5 玩家一开始考虑的并不是从头发展,所以在游戏新手期也没有强烈的理解游戏底层设计细节的动机。不过游戏也有开荒玩法,在游戏中后期势必会在远方殖民、开拓新大陆;甚至游戏还设计了让玩家直接转换视角以新殖民地为核心来继续游戏。但即使的重新殖民,在四周鸟无人烟的地方开荒,和在已有部分发展的区域附近拓展也完全不同。

我十分好奇这样一个复杂的经济系统是怎样启动起来的,所以仔细做了一点归纳笔记。不一定全对,但很多信息在游戏内的说明和目前的官方 wiki 都不完整,只能自己探索。

----------------------

游戏中的一切来源于“原产”,官方称为 ROG ,比较类似异星工厂里的矿石。上层的一切都是从原产直接或间接获得。版图上的任何一个最小单位的地块,只要上面有人口,就会不断生产出唯一品种的原材料进入这个世界。它和国家控制力、市场接入度都无关系。比原材料更高级的产品都是由原产直接或间接转换而来。

货币本身在世界中不以资源形式存在,货币本身也没有价值。货币的存在在于推动包括原产在内的原材料和产品等在世界中的流动。所以,世界中即使不存在经济活动、没有货币,亦或是货币急剧膨胀,这些因为国家破产而债务消失等让货币总值急剧变化的行为也不会直接影响这个世界中的物资变化。即没有很多游戏中直接用钱凭空兑换成物资的途径。

换句话说,如果整个世界缺铁,那么只能通过生产手段慢慢的产出,再多的钱也无法变出铁来。但分配更多的人力去生产、更高的科技水平可以获得铁产量的提升、使用更高效的配方、各种提升生产率的增益等等都可以加快铁的产出速度。

从一个世界的局部看(这是一般玩家的视野),获得原材料的方式有三种:

1. 养活更多的劳工或奴隶开发对应原产。
2. 在合适的地理位置上用劳动或奴隶生产。
3. 从附近的市场进口。

第一种方式,玩家拥有对应原产地,然后在地皮上增加人口。但新增人口是农民,还需要从农民升级成劳工。国家 buf 中,默认只有原住民满意度对产量有轻微的增益。

第二种方式,玩家有更大的自主性。以铁为例,只要是湿地地形或者地皮邻接湖泊,就可以主动产铁。这种生产除同样需要劳工外,还有原料开销:把炭转换为铁。这种生产方式直接被市场接入率打折,即离市场越远的地方单位人口的生产效率越低,但同时有更多增加生产率的增益途径:最基本的就有当地劳工识字率和市民满意度。和虽然和第一种方式一样需要劳工,但游戏似乎会先满足原产需求的劳工,多出部分才进行建筑生产。所以在劳工不足时,若需进行建筑生产,需要主动减少原产等级。因为生产建筑可以由玩家主动关闭,但原产似乎不行。

第三种方式,通常需要在本地市场拥有一定的市场容量。在不考虑成本时,甚至可以亏本进货。对开荒来说,进口原料比进口成品的优势就在于占用更少的贸易容量。

为什么上面以铁举例,因为铁是开荒时最重要的资源。虽然木头和石头也很重要,但游戏把木材、粘土、沙、石头设定为一般物资,所有地块都有一个很低的默认产能,从市场角度看,根据市场规模,每个市场总有一定量的供给。但铁不属于这种物资。

建造建筑需要的基本材料是砖头,砖头可以通过基础建筑,从粘土或石头转换。

开发原产需要的基本材料是木头或工具。大多数基础建筑的生产配方里都需要工具。而工具在非城市生产建筑中,只有乡村市场可以把铁转换为工具。所以、如果开荒时的市场中缺铁,就只能通过进口。进口制造工具的铁比进口工具更能利用上贸易容量(铁和工具的单位贸易容量相同,但铁到工具以 4:5 转换)。

铁矿在版图上相对其它资源更少,所以一般开荒需更关注市场覆盖下有无湿地地形或有无湖泊,同时需要用充足的木材供应,可以把木材转换为炭再转换为铁。

一旦单一地块上的人口超过 5000 ,就可以升级为城镇,这种生产就有更多选择。以工具制造来说,城镇里就多出了用石头或铜转换为工具的配方。尤其是石制工具的途径,虽然效率很低,通常利润也很低,但贵在石头有保底产出。城镇的升级需要砖头和玻璃,玻璃可通过沙子转换,而沙子有保底产出或通过工具加木材转换。

开荒期间,解决了木头、砖头、玻璃、工具这四种基本货物(前三种是各种基础建筑建设需求,最后是大部分生产转换配方的必须)后,就要考虑提高产能的问题,这里的核心之一是纸。因为劳工识字率影响着生产率。纸是印书的原料、书是图书馆的维持品,而图书馆以及更多提高识字率相关的建筑都需要书。

造纸术需要纤维作物或皮革或布匹。纤维作物的基本生产方法是在对应农场通过牲畜木材工具制造;而牲畜则在耕种村落通过工具加粘土转换;皮革则可以在森林村落通过沙加焦油和野味转换,其中焦油在一般木材产区都可以通过木材转换得到。

另一个重要的资源是人口。它在游戏中和钱一样重要、甚至更重要。因为一切的生产行为都需要人。对开荒而言,升级到城市对效率影响最大,这里的硬性要求就是 5000 基础人口。除了主动殖民,就是本地土著转换、周边迁移(集中)以及自然生长率。这些都可以通过内阁行为略微加速,同样关键是修定居点(同时加移民吸引度和自然生长率)。定居点除了 250 农民外的维持成本是石头、木头、羊毛、野味。前两个一定有保底产出,后两个不是必须,缺少只会让效率打折,但供应充足可以发挥全部性能。定居点和乡村市场都占用农民,在最初阶段,我感觉乡村市场更重要一些,毕竟可以制造工具,还能提供宝贵的贸易容量。

不同阶层人口除了产生固定需求(吃掉本地市场的部分产出)外,更基本的需求是食物。EU5 中的食物系统设计,我觉得也是很巧妙的。

食物并不是货物的一种,而是和钱一样,表示为一个单一值。最主要的食物来源是生产带食物属性的货物(被称为食物原料)的副产品。属于食物原料的货物,被设定了不同的食物倍率,这就让有些食物原料产生食物的效率更高。不工作的劳工默认会以一个较低的产能生产食物,所以不必担心多出来的劳动力被浪费。另外,农民在森林村落里,虽然产品皮革并非食物原料,但生产行为本身被设定了食物产能。另外,农村相对城市有额外的食物产能的乘数增益。

食物的仓储按省份为单位计算,省份归属的若干地块共享一个食物仓库。在每个省份会优先填满仓亏,多出的部分卖给了所属市场,这里是不计市场接入度的。而一旦仓库有空间,就会从所属市场购买。战争是影响它的一个变数。因为军队也会从这个仓库中获取食物,围攻会阻止市场上的食物交易。

食物在本地市场上的交易行为会影响到本地食物价格,购买食物的开销和销售食物的收入是分开计算的,全部通过国库完成。市场间并不能单独交易食物,但通过对有食物原料属性的商品的交易,会产生附带的食物流通(但并不会产生额外的货币流动)。我觉得理论上会出现市场仓库中的食物储量为 0 ,但依然出口食物原料的情况,但实际玩的时候并没有发现,所以不清楚游戏怎样处理。但我猜测,食物流通是在单独层面计算的。既然超出市场食物容量的食物似乎就消失了,那么也可以接受万一食物储量为 0 却继续出口的情况,把储量设为 0 即可。

----------------------

最后,写写我对税收的看法。

简单说,游戏里的经济活动产生了税基。税基中按王室影响力直接把钱进入国库,另外的钱按阶层影响力分到了各阶层。但玩家可以对阶层分得的钱征税,让这些钱进入国库。

看起来,在不造成阶层不满的前提下,税率越高,国库收入就越高。但实际我玩的感觉是,其实税基才是整个国家的收入,国库仅仅是玩家可以主动调配的部分。阶层保留更多的收入,也会投入到国家发展中去,只不过有时不是玩家想要的方向,甚至是负方向。例如当玩家想削弱某个阶层的影响力时,阶层把钱投入都修建扩大本阶层影响力的建筑上。但总的来说,如果国库钱够用,更低的税收更好。因为税基相同时,税收影响的是分配。低税收必定增加阶层满意度,带来的正面增益是额外的。正所谓藏富于民。

而影响税基最重要的是地区控制度。当然地区控制度不仅仅影响税基,还影响了更多建筑的效率。从这个意义上来说,地方分权比中央集权更有利于经济发展。分封属国,尤其是朝贡国,比大一统国家会获得更好的经济局面。

但权力分配在游戏中也相当重要,因为它直接影响调配价值观的能力。价值观在一盘游戏进程中必须配合时代发展而演变才能更好的发展经济。而集权以及王室影响力是权利分配能力的来源。

所以说,最终玩整个游戏的体验还是在和面,只是多出了一份历史感。有了真实历史这种后验知识,才更为有趣。

via 云风的 BLOG
Free for Dev Updates on Nov 26, 2025

Generative AI

Arize AX - AI engineering platform that helps AI eng/PMs, evaluate, and observe AI applications and agents with built-in Alyx agent. Free product inlcudes 25k spans and ingestion volume of 1gb per month.

Phoenix (7.8k) - Open source platform for tracing, model evaluators, experiments for AI agents from the team at Arize AI. All features open source under elastic License 2.0 (ELv2).

via Track Free for Dev Updates Daily
20251127

起床吃早餐,发现新荣记就在酒店里面。这次住宿体验挺好,准备把它作为我以后在东艺听音乐会的首选,和老旧的洲际和丽晶说拜拜啦。这里就推荐一下吧,陆家嘴禧玥酒店,当然这次给我升了三级,下次不知有没有这样的好运。

中午约了微信经常讨论小组件技术的工程师吃饭,吃完就一起在星巴克聊天写代码。他给我展示了自己最近在做的项目,我问了他很多问题,学到了不少小技巧。话语间能感受到这是一个理想主义者。没想到小组件都能聊一下午。

音乐会前,L 大哥约我和 W 阿姨一起在东艺楼下的 Press 晚餐。刚认识的时候我给他微信备注是 150 场,这个数字当时让我震惊。而今天,我就要把它改为 200,现在我对他充满好奇,就像 Youtube 有博主经常随机采访法拉利车主,问他们从事什么职业一样,我也特别想问问他,是什么样的职业,可以让他今年在全球听上二百场音乐会。W 阿姨上次是 70,还有和她一起的伙伴 H 阿姨今年已经超过 100。

H 阿姨是老上海,已经听了三十年古典音乐,只要在上海的演出,除非出差,她基本都听。最好笑的是,她说她看着门口的黄牛从青年慢慢变成了中年人,真是看着一个人成长呀。听她娓娓道来每个自己喜欢的指挥,一边说还一边模仿他们独特的指挥动作。能感受到真的是热爱。我真的是特别擅长交比我年纪大很多很多的朋友,和他们聊天我也挺开心的。

今晚的无词指环很精彩,演出九点就结束了。刘师傅已经在门口等我,这个点出发到家还早呢。

via 61’s life
How to imporve english

via Informal's blog
如何降级 cursor-agent /cursor-cli

背景

遇到了新版 cursor-agent(2025.11.06-8fe8a63) 的奇怪 bug:光标总是自动滑到最后一行,导致输入混乱,而且长任务还会卡住。论坛已有反馈:https://forum.cursor.com/t/cursor-cli-input-field-throws-cursor-at-end-of-line-at-every-character-and-freeze-on-long-running-script-task/142385

光标总是自动滑到最后一行这个不能忍,为了恢复可用,只能先降级。折腾了很久,总结出了几条可行路径,分享给同样被坑的老铁们。

0. 官方安装脚本到底干了什么?

日常安装命令是:

curl https://cursor.com/install -fsS | bash

把脚本拉下来可以看到,里面写死了一个版本号,例如:

TEMP_EXTRACT_DIR="$HOME/.local/share/cursor-agent/versions/.tmp-2025.10.28-0a91dc2-$(date +%s)"
DOWNLOAD_URL="https://downloads.cursor.com/lab/2025.10.28-0a91dc2/${OS}/${ARCH}/agent-cli-package.tar.gz"
FINAL_DIR="$HOME/.local/share/cursor-agent/versions/2025.10.28-0a91dc2"
ln -s ~/.local/share/cursor-agent/versions/2025.10.28-0a91dc2/cursor-agent ~/.local/bin/cursor-agent

核心信息:

二进制下载地址格式:https://downloads.cursor.com/lab/<版本号>/&LTOS>/&LTARCH>/agent-cli-package.tar.gz
安装后存放目录:~/.local/share/cursor-agent/versions/<版本号>/
~/.local/bin/cursor-agent 只是指向该版本的 symlink

降级的本质就是:换用旧版本号、重新解压,并把 symlink 指向旧版本。

1️⃣ 方案一:本地已有旧版本时最简单

如果之前装过旧版,它很可能还在本地:

ls ~/.local/share/cursor-agent/versions

若能看到类似:

2025.08.15-dbc8d73
2025.09.18-7ae6800
2025.10.20-f1b214f
2025.10.22-f894c20
2025.10.28-0a91dc2
2025.11.06-8fe8a63

直接把 symlink 指回旧版本即可:

rm ~/.local/bin/cursor-agent
ln -s ~/.local/share/cursor-agent/versions/2025.10.28-0a91dc2/cursor-agent ~/.local/bin/cursor-agent
cursor-agent --version

这是最干净、最不折腾的方式。

2️⃣ 方案二:手工下载旧版本并“仿造安装”

2.1 一些已知可用的旧版本号

社区帖子里还能找到不少历史版本,例如:

2025.10.20-f1b214f
2025.10.22-f894c20
2025.10.28-0a91dc2

下载 URL 模板:

https://downloads.cursor.com/lab/<版本号>/&LTOS>/&LTARCH>/agent-cli-package.tar.gz

&LTOS>linuxdarwin&LTARCH>x64arm64。例如下载 2025.09.18-7ae6800 的 macOS ARM64 包:

curl -fSL "https://downloads.cursor.com/lab/2025.10.28-0a91dc2/darwin/arm64/agent-cli-package.tar.gz" -o /tmp/cursor-agent.tar.gz

提醒:部分很旧或特殊 hash 的版本可能已被下架,可能直接 403 / AccessDenied。


2.2 手动“仿造安装流程”

下载成功后,可以用下列精简版安装脚本(支持自定义版本号):

VER="2025.10.28-0a91dc2"
OS="darwin" # 或 linux
ARCH="arm64" # 或 x64

mkdir -p "$HOME/.local/share/cursor-agent/versions"
TEMP_EXTRACT_DIR="$HOME/.local/share/cursor-agent/versions/.tmp-$VER-$(date +%s)"

mkdir -p "$TEMP_EXTRACT_DIR"
curl -fSL "https://downloads.cursor.com/lab/$VER/$OS/$ARCH/agent-cli-package.tar.gz" \
| tar --strip-components=1 -xzf - -C "$TEMP_EXTRACT_DIR"

FINAL_DIR="$HOME/.local/share/cursor-agent/versions/$VER"
rm -rf "$FINAL_DIR"
mv "$TEMP_EXTRACT_DIR" "$FINAL_DIR"

mkdir -p "$HOME/.local/bin"
rm -f "$HOME/.local/bin/cursor-agent"
ln -s "$FINAL_DIR/cursor-agent" "$HOME/.local/bin/cursor-agent"

cursor-agent --version

这基本就是官方脚本的精简可配版。

3️⃣ 方案三:保存官方脚本到本地,改版本号再执行

如果不想手写命令,可以把官方脚本下载到本地、替换版本号后执行:

curl https://cursor.com/install -fsS -o cursor-install.sh

把脚本里所有的 2025.11.06-8fe8a63 改成想降级到的版本号,例如 2025.10.28-0a91dc2,然后:

chmod +x cursor-install.sh
./cursor-install.sh

脚本会自动完成 OS/ARCH 检测与 PATH 提示,但若该版本的 tar.gz 被官方下架,依旧会下载失败。更换版本时也需要重新编辑脚本。

自动更新如何避免?

降级后,cursor-agent 仍可能后台自动下载新版,创建新的 versions/<新版本>/ 目录并重写 ~/.local/bin/cursor-agent。可以通过额外 alias 固定旧版本,例如:

alias cu2="$HOME/.local/share/cursor-agent/versions/2025.10.28-0a91dc2/cursor-agent --force"
echo "alias cu2=\"$HOME/.local/share/cursor-agent/versions/2025.10.28-0a91dc2/cursor-agent --force\"" >> ~/.zshrc
source ~/.zshrc

cu2 --version

cu 继续跟随官方的自动更新(或你手动更新的 symlink)
cu2 永远指向指定旧版本,互不冲突

这样即使自动更新覆盖了默认 symlink,也可以用 cu2 启动稳定的旧版继续干活。

后续

这个 bug 后续有很多人在论坛了讨论,过了几周官方才确认,又过了几个版本,在11月底的版本(2025.11.25-e276529),终于修复了。

via 明明如月成长笔记 (author: lmm333)
近思录 2025-10-18

汪林朋(1968年–2025年7月27日)

跳楼收场的家装巨头在近几年一直推动AI等新技术在家装行业的应用,试图转型自救。然而,覆巢之下,安有完卵,行业的下行最终逼死了他。

R.I.P.

https://www.youtube.com/watch?v=es8l8Ecv9-M

杨振宁(1922年10月1日—2025年10月18日)

R.I.P.

scrutiny

Ymacs

运行在浏览器里的Emacs。可惜的是对移动设备支持不好,而且由于浏览器的限制,很多快捷键,比如C-n,不支持。

via M-x Chris-An-Emacser
近思录 2025-11-11

日本汉字的汉语读音规范

一直没有正式实施。我琢磨,一者,涉及国际关系,太敏感;二者,这是个非常小的点,标准化也影响太小。总之就是搁置了。

WSLg设置分辨率
1
2


export GDK_SCALE=2
export GDK_DPI_SCALE=0.75

不过,比较好的方法是在/usr/lib/systemd/user/emacs.service里设置
1
2


Environment="GDK_SCALE=2"
Environment="GDK_DPI_SCALE=0.75"


Emacs的Abbrev模式支持插入内容后执行函数

https://www.rahuljuliato.com/posts/abbrev-mode

可以实现很多高级应用。

via M-x Chris-An-Emacser
使用 uv 管理 Python 依赖

我有一个运行了好几年的 Django 项目,之前一直在使用默认的 pip 管理和安装依赖,最近切换到了 uv,感觉还不错,在这儿记录一下。

什么是 uv

根据官网的介绍,uv 是一个 Python 包以及项目管理器,非常快,使用 Rust 开发。

安装和管理依赖只是它的功能之一,除此之外,它还可以创建虚拟环境,即可以取代 pip + virtualenv 的功能。

我测试了一下,uv 确实比 pip 快了很多。在使用相同的镜像源,且都是纯净的 docker 环境下,使用 pip 安装项目的依赖花了约 88 秒,但使用 uv 只用了 13 秒。

不过,安装依赖并不是一个高频操作,多花一点时间一般不是什么痛点,uv 更吸引人的是它简化了很多工作,比如内置了 Python 多版本安装以及虚拟环境管理,且能保证环境的可复现性,这就让 Python 项目的开发和发布工作简单了很多。

uv 的安装和初始化

在 macOS 或 Linux 上,可以使用以下命令安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh

Windows 上的命令如下:
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

安装完成之后,可以使用以下命令初始化一个新项目:
uv init my-project

如果你的项目已经存在,也可以直接进入项目根目录,执行以下命令:
uv init

如果项目中已经有 requirements.txt,想改用 uv 进行管理,可以在项目根目录执行以下命令:
uv pip install -r requirements.txt

也可以直接执行:
uv sync

初始化后,uv 会在项目根目录下生成一个 pyproject.toml 文件,其中包含了项目的基本信息以及依赖项。

可以运行以下命令,锁定依赖项:
uv lock

这个命令将会在项目根目录下生成 uv.lock 文件,类似 Node.js 的 package-lock.json,其中包含了项目依赖的各个第三方库以及版本号,确保下次安装时安装的包相同。

虚拟环境

Python 默认是安装在系统中的,使用 pip 安装依赖时,默认也会全局安装,在很多情况下,尤其是需要维护多个项目时,这显然不是我们期望的,此时可以使用虚拟环境。

在 uv 中使用虚拟环境很简单。

首先,可以使用 uv 安装多个不同版本的 Python:
uv python install 3.10 3.11 3.12

然后,可以通过类似下面的命令安装虚拟环境:
uv venv --python 3.12.0

可以直接在项目根目录下执行这个命令,执行成功之后,项目根目录下会生成一个 .venv 文件夹,包含这个环境的所有信息,之后安装的包也会保存在这个文件夹下,记得将这个文件夹添加到 .gitignore 中。

如果你熟悉 Node.js,会发现这个 .venv 文件夹和 Node.js 的 node_modules 文件夹功能类似,且它更进一步,不仅包含依赖,还能包含当前项目所需的 Python 本身。

使用以下命令可以用虚拟环境中的 Python 执行指定脚本:
uv run example.py

如果你在终端中访问项目,可以使用以下命令激活当前 Python 虚拟环境:
source .venv/bin/activate

激活虚拟环境之后,可以直接用类似 python example.py 的方式来运行项目中的脚本。

使用现代 IDE(比如 PyCharm、VSCode 等)打开这个项目时,IDE 一般都能自动识别项目中的 .venv 虚拟环境。

安装依赖

配置好环境后,就可以使用类似下面的命令安装依赖了:
uv add django

这信命令会下载对应的包并安装在 .venv中,安装成功之后,会修改 pyproject.tomluv.lock 文件。

如果你刚将代码从仓库中拉到本地,项目中已经有了 pyproject.tomluv.lock,那么只需执行以下命令即可安装所有依赖:
uv sync

注意,这个命令会根据 pyproject.toml 解析和下载依赖,有可能会改进 uv.lock。如果是在生产环境,你希望严格按照 uv.lock 中的版本安装依赖,可以使用以下命令:
uv sync --frozen


在 docker 中使用 uv

如果你的项目需要使用 docker 发布,还有一些额外需要注意的事项。

如果你的服务器在国内,那么可能需要使用国内 pypi 镜像,uv 中要指定镜像很简单,设置相应的环境变量即可,例如下面设置使用了阿里云的镜像:
ENV UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
ENV UV_TRUSTED_HOST=mirrors.aliyun.com

在 docker 中安装依赖时,大体上有两种方式,一种是使用 uv sync 命令,如下所示:
WORKDIR /code/
COPY pyproject.toml uv.lock /code/

# 安装依赖
RUN uv sync --frozen --no-dev

ENV PATH="/code/.venv/bin:$PATH"

这种方式会在当前目录下创建虚拟环境,所有依赖都将安装到 .venv 目录下,因此需要将对应的目录加入 PATH。这种方式安装的依赖将严格遵守 uv.lock 中的版本限制,最为可靠。

或者,也可以选择将依赖直接安装到系统环境中:
RUN uv pip install --no-cache-dir --system .

注意那个 --system 参数,这种方式会将各依赖包安装到全局目录,如果你的 docker 中只有这一个 Python 项目,且不想使用虚拟环境,也可以使用这种方式安装。不过,这种方式安装时虽然也会参考 uv.lock,但并不保证各依赖的版本和 uv.lock 中严格相同。

小结

Python 发布迄今已有三十余年,一开始并没有第三方包的安装和管理工具,这和 Node.js 一发布就自带 npm 不同。如果你使用 Python 的时间较早,可能还会记得曾经有一个叫 easy_install 的工具用于安装 Python 的第三方包。

约 2008 年,pip 发布,随后在 2014 年被 Python 官方集成到 3.4 版中(以及 2.7.9 中),Python 这才有了一个官方的依赖管理工具。不过 pip 并不完美,主要是依赖解析能力较弱,无法保证每次安装后的环境完全相同,同时安装速度也有一些慢,因此后续又出现了一些新的依赖管理工具,比如 poetry、uv 等。

目前,开发 Python 项目的最佳实践是为每个项目创建独立的虚拟环境,将项目所需的依赖安装在该环境中,并通过依赖管理文件记录依赖,以确保隔离、可复现和可移植性。这些工作都可以使用 uv 完成,如果你正在开发或维护一个 Python 项目,不妨试试 uv。

via oldj's blog
Bensz
Docker系列 WordPress系列 AutoSaleVPS插件

本博客由AI模型商OhMyGPT强力驱动!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容! AutoSaleVPS的Github仓库: 开发和调试不易,希望小伙伴们帮忙给项目点Star、关注我的帐号呀!感谢感谢! 前言 最近恰逢2025年黑色星期五,又到了频繁需要更新VPS信息的时候。由于我的推广页面是一个WordPress页面,手动编辑多有不便,所以我就一直想着,开发一个WordPress插件来自动完成编辑VPS信息的任务。刚好这周六有点空,早上简单地构思了一下,在AI的辅助下花了几个小时搓出了这个项目——AutoSaleVPS。AutoSaleVPS 是一个基于大语言模型(LLM)的WordPress 插件,主要用于辅助WordPress博主进行高效的VPS 推广。它的主要特点包 […]

Bensz

via Bensz
Qwen3-VL技术报告英中对照版.pdf

Qwen3-VL 是阿里推出的最先进多模态基础模型,面向文本、图像、PDF、表格、界面(GUI)与视频的统一理解和推理任务。它具备 256K 原生上下文 的长文能力,能够跨数百页文档、完整教材、长视频进行稳定关联、定位与引用,是面向企业真实场景的全栈多模态引擎。

模型体系覆盖 2B / 4B / 8B / 32B Dense,以及 30B-A3B / 235B-A22B MoE,在延迟、吞吐与精度间提供灵活选择。多模态训练不仅未削弱语言能力,反而在多个 NLP benchmark 上优于纯文本大模型,使其在文本任务上也具备强竞争力。

技术核心升级有三点:

1. Interleaved-MRoPE:将时间/水平/垂直的频率交错排列,解决旧式 MRoPE 在长视频中的频率偏置问题,使视频时空建模更稳定。
2. DeepStack 视觉跨层注入:从视觉编码器的多个层级提取特征并注入 LLM 对应层,融合低层细节与高层语义,大幅提升视觉理解与推理精度。
3. 文本式时间戳:用 &LT3.0 seconds> 这种显式 token 替代复杂的时间编码,为长时间序视频带来更可控、更通用的时间理解能力。

训练采用 四阶段预训练(8K→32K→256K)+ SFT + 强到弱蒸馏 + RL(Reasoning + General) 的完整体系,并提供 Thinking / Non-Thinking 双模式,兼顾推理能力与速度。

数据方面构建了庞大的多模态体系:高质量图文、网页与教材、PDF 解析(HTML/Markdown)、39 语言 OCR、3D/空间理解、动作/事件级视频语义、跨层 grounding、超过 6000 万的 STEM 题目、以及 GUI 与多工具 Agent 行为数据,使其具备高度覆盖现实场景的能力。

性能上,235B-A22B 在多模态推理、长文档理解、视频理解、OCR、空间推理等关键任务中普遍领先,部分任务接近或超过 Gemini 2.5 Pro / GPT-5 / Claude Opus;而 32B 也显著领先 GPT-5-mini 和 Gemini Flash,同等尺寸小模型(2B/4B/8B)在轻量级场景中具有强竞争力。

综合来看,Qwen3-VL 是面向企业场景的 多模态智能底座,可胜任从长 PDF 解析、图表理解、界面自动化、流程 Agent,到视频监控分析、技术文档检索、多模态代码生成等核心任务,覆盖从“理解 → 推理 → 决策 → 自动执行”的全链路智能能力。

附该技术报告英中对照版,仅供学习参考:
Qwen3-VL技术报告英中对照版下载

via 我爱自然语言处理 (author: 52nlp)
发现 Git 仓库中幽灵文件

使用 git-ghosts 拓展
参考链接

在使用 Git 过程中,有时候会遇到这样的情况:某个以前删除的文件,不记得当时删除的 commit message 内容了, 也不记得完整的文件路径,只记得文件部分名称,想要找到是哪一个 commit 删除的,发现比较难。 实际上可以通过下方的命令来时间这一功能,首先使用下面的命令搜索删掉的文件路径包含 src 的文件列表:
git log --diff-filter=D --summary | rg delete | rg src

如果要使用 code-runner.nvim,执行并输出,需要设定 ps 的 runner:
require('code-runner').setup({
runners = {
lua = { exe = 'nvim', opt = { '-l', '-' }, usestdin = true },
ps = { exe = 'powershell.exe', opt = { '-Command', '-' }, usestdin = true },
},
})

快捷键调用 code-runner 输出:
[Running] powershell.exe -Command - STDIN

--------------------
delete mode 100644 src/test/hello.c
delete mode 100644 src/example/delete.c

[Done] exited with code=0, single=0 in 0.916431 seconds

获取到上述文件列表后,通过 git.nvim 执行以下命令,就可以打开 log 列表,列表内回车会分屏展示 commit diff。
:Git log -1 -- src/test/hello.c


使用 git-ghosts 拓展
最近,给 git.nvim 增加了一个 git-ghosts 的 picker.nvim 拓展。其实现的原理就是参考上述的命令执行顺序。 先获取已删除文件的列表,回车获取改文件的最后一次 commit 的哈希值,然后执行:
:Git show &LTcommit_hash>


参考链接

https://www.linux88.com/restore-a-deleted-document-in-git/

via Eric's Blog