note
2025-10-12
尝试,翻了翻以前看过的东西,有关,编程的。
可能,大学之前都对编程没什么学习,然后,22 年的暑假,可能,才开始关注前后端的一些东西,为了对付大作业,用 java springboot 和 vue 糊了一个带评论区的 blog。
再之前似乎,没做到什么,让我有些实感的东西。虽然之前上课会学些数据结构 C, 数据库 sql,面向对象 java 之类的东西。但…他们可能还不如 css 更能引起我的兴趣。那时候,好像前端的组件库里每个组件都让我觉得新奇。
然后是在各种网站上瞎逛,偷偷看别人的 github 和博客 (虽然这种事我现在可能还在做) , 在那些乱七八糟的网站上打开控制台看看。去腾讯云阿里云 github azure digtalOeacon 注册各种账号去白嫖学生额度…
那段时间我在上面放了许多乱七八糟的东西,从那个破破烂烂的 blog,到用了别人写好主题的 blog,几个我喜欢的应用,还有我后面写的小游戏… 但,基本还是自娱自乐,不过确实挺开心的。
可能,对于自娱自乐和做小玩具而言,前端还是更容易做到的,浏览器也是个足够丰富的系统。也是在这时,那些数据结构面向对象之类的东西,才有了些实感和熟悉感。
嗯…我是从看 vue 和 element 开始写页面的,然后才又像考古一样去了解那些更基础的东西。
html js css 之前也不是没见过,但,可能在一开始那些繁杂的细节让我眼花缭乱根本不知道从何看起,在 vue/react 这里看到了组件,状态,传参…这些概念之后,我才有余裕,回去更仔细的观察那些东西。甚至过了好一段时间我才意识到 vue/react 不是唯一的方法,那些组件库里的许多东西也早就被发明过,只不过提供了一种 vue 能方便使用的方法。一些优秀的 js 库也依旧以独立的 js 库的方式存在着… 一些更通用的好想法还会被浏览器和 es 纳入标准…
之后是找工打… 上班…
其实博客里之前有过许多编程相关的内容,但都删掉,藏起来了。
有些…笨拙,也没什么用了。倒是余下的笑话片段多少还有些有趣。
也许那时所有东西都还很新奇,但现在看就是,像什么都不懂还爱絮絮叨叨的老妈妈,这种事情我自己知道就行了。
但,还是想记下来些东西,什么都好。也许熟悉了的东西会被忘记,大家都知道的东西会显得无聊,记录这种事情好像总会慢慢变成,刻舟求剑。但我还是想记下些东西,一些,在我知道和不知道,熟悉和不熟悉之间的东西。
还是会,对一些写的很好的软件羡慕。
也许,他们天生能看清楚弄好更多事情…
2025-11-19
好想好好学习,可… 也不知道有什么好学的
会想,整理整理,看到的一些东西… 虽然感觉还是会写的很零碎…
Java
上班看了好多 java 代码…
- 调包侠 感觉,当调包侠,java 确实能用来做许多事。 单纯包的数量而言,也许 node 也不差, 但,一些重量级选手像 spring 全家桶… 数据库持久层,各种中间件适配…
以及,一些和所谓业务结合的更紧密的东西 ureport2, uflo activiti, urule drools 文档报表生成,“流程引擎”,“规则引擎” 还有另外一些的各种各样的类似低代码的操作。 ——虽然感觉这些玩意真的都是一坨坨的答辩…但也许这些又大又丑的东西就是能把好多公司哄开心了。
至于别的方向:
- 我还记得学校里开过的一些讲 hadoop hdfs hbase hive spark zookeeper 一类的东西的课… 虽然现在看来大半都是下下软件改改 xml 配置能跑起来就结束了… 其实没学到什么东西。
- 还有一条似乎是高并,各种发秒杀系统…
- redis, rabbitmq, 令牌桶. 削峰填谷。
- 拆分服务别让主服务也被秒了。
- 开始分析数据,开始假设,根据更具体的数据特点做优化。
2025-11-20
数据库
开始之前: 表,行,列,主键… E-R 图 基本 sql
之前的之前: 也许可以算是数据库的数学基础
- 关系模型 - 表,行,列,主键…
- 关系代数 - sql 语句各种关键字,的数学符号
- 关系演算 - sql 拼装与优化
三范式
- 1NF 原子性。关系中的每个属性都不可再分。
- 2NF 完全依赖。消除部分依赖,有主键,并且其他字段都只依赖于主键。
- 3NF 直接依赖。消除传递依赖。
三种范式可以看作在一步步消除冗余,到了第三范式,保证了唯一性,一个数据只在一个地方出现,保证可以方便准确的在修改时维护数据一致性。 对于业务系统,一定要遵守第三范式。 而对于数据统计分析之类的操作,没有精确处理的需求,做的宽松些方便开发与查询性能会更好。
事务与锁。
ACID.
A 事务原子性 D 事务持久性 是基础的基础,C 是需要达成的目标 而 I 隔离性完全隔离串行执行时性能太差,看情况允许并发:
- 脏读指一个事务没有完成就提交了修改然后事务失败回滚时,在提交后回滚前会读到错误的数据。
- 不可重复读指在一个修改前后读取数据,两次读取的不一样,读取的数据是正确的,但没有保证一致性,可能是曾经正确的数据。
- 幻读与不可重复读很相似,但进行的操作不是 update 而是 create/delete, 与不可重复读的区别是,不可重复读关注行内变化,而幻读关注数据量关注表的变化。
不管怎么样事务全程的 写锁/排他锁 还是要加的。
在此基础上,
在读取到读取结束加上 读锁/共享锁 等待写操作完成再读,可与避免脏读;
在读取到整个事务结束加上 读锁/共享锁 等待事务完成再读,可与避免不可重复读。
而解决幻读需要额外的机制,范围锁。间隙锁,防止在这个范围内插入新数据;Next-Key Lock(临键锁),行锁+间隙锁。
最后还有一个,可序列化,加表锁。
死锁:
死锁条件: 互斥条件, 占有且等待, 不可抢占, 循环等待 解决死锁: 死锁的防止
- 破坏死锁条件 死锁的避免
- 动态检查, 银行家算法模拟分配预演 死锁的检测与恢复
- 杀进程
再有就是,现代数据库并不完全依赖加锁保证隔离性,
MVCC,多版本并发控制,读操作访问快照不会被写阻塞。
引擎
B+ 树 索引
nosql
MongoDB, Redis, hadoop…
计算机网络
2022-12-31
给我的感觉是,这是一个贯穿硬件到软件还有协议的科目…链路层的某些东西像C2C,汉明码和计算机组成原理那边算是通用的,TCP 的各种算法调度又像是到了操作系统…
关于,五层模型。
物理层,提供最基本的连接,几种传输线和介质…传输线、信道的复用以及怎么一边复用一边避免冲突…
链路层就要考虑谁和谁连接和传输的有效性的问题了,这里出现了mac地址,交换机和c2c校验这种东西
网络层,mac地址依旧有问题,由于它的扁平化,分布随机,想要在较大网络相互找到很困难。于是有了IP协议,将网络地址的分配做成层级的,有规律的,相关的像子网划分、CIDR、DHCP、NAT…然而…怎么说呢,现在大部分网民似乎搞不到公网IP,ipv6,内网转发算是办法,但现在…从大的互联网公司申请服务,然后在它们ip之下的一些应用去获取身份似乎更加普遍。
在网络层解决了基本的相互找到的需求,而在相互找到之后的通信数据传输,则还要有运输层的TCP UDP之类的协议来保证,这里TCP的调度,滑动窗口,拥塞避免,重传,握手,等等等等…
再然后就是应用层了,http ftp smtp p2p来满足进一步的具体需求。这里也是之后会进一步了解学习然后使用的部分..毕竟搞软件,这是最直接最基本的接口…
操作系统
- 概述
- 进程与线程管理
- 进程与线程. 进程是“程序的一次执行”,线程是“进程中的进程”,是CPU调度的基本单位。
- 进程控制块, 进程状态, 进程间通信
- CPU 调度。
- 目标: 公平性、高吞吐量、低延迟、高CPU利用率.
- 算法 先来先服务,最短作业优先,时间片轮转. 多级反馈队列.
- 进程同步与死锁
- 同步问题,生产者-消费者问题,读者-写者问题。
- 死锁。
- 所以说数据库是不是也算是操作系统啊。
- 进程与线程. 进程是“程序的一次执行”,线程是“进程中的进程”,是CPU调度的基本单位。
- 内存管理
- 概念,逻辑地址 vs. 物理地址
- 连续内存分配 x
- 分页 - 非连续分配的典范
- 页号和页内偏移
- 虚拟内存. 将程序中暂时不用的部分留在磁盘上,只在需要时才调入内存。
- 请求调页, 缺页中断.
- 页面置换算法: OPT-理想算法. FIFO-先进先出, LRU-最近最久未使用。
- 文件系统
- 设备管理
在应用开发中的应用
- CPU 调度
- Kafka/RabbitMQ/RocketMQ等消息队列 多处理器调度。
- React Scheduler 时间片轮转调度和优先级抢占。
- Tomcat/Nginx 多级反馈队列。
- 数据库,资源分配与死锁。
- 内存管理
- xxx 管理系统也随处可见的基础的分页列表.
- Java/.NET的垃圾回收.
- 游戏渲染时远处变贴图,前端开发里的虚拟列表.
操作系统… 操作系统是什么呢。
关于资源的高效配置,任务调度。
可能不管做什么软件,做出来后,想要做的更好,这里的这些些案例会是很好的参考。
数据结构与算法
- 结构, 可理解的东西, 面向对象
- 算法, 效率与规模
这里也许可以看作某种…原料。
操作系统会使用各种各样的算法管理各种各样的结构。
而务虚的类型系统与编程语言理论会让数据结构可以推导演算,让算法有所依据,干净安全。
2025-11-23
计算机程序的构造和解释
其实这本书我根本就没翻过几次x
里面提到了三种抽象,
- 过程抽象
- 提取函数
- 嗯… 当然远不如此。这本书可能一上来说了一大堆递归迭代,高阶函数等等和函数式编程相关的东西…
- 数据抽象 和 模块化、对象和状态
- 从最简单的表驱动替换 if-else 到各种面向对象操作和设计模式也许都可以算作数据抽象
- 神奇闭包
- 元语言抽象-dsl
- 我其实完全搞不懂这地方到底要干啥😊
元语言抽象
元语言抽象的核心理念是:**我们不再仅仅使用一种语言来解决问题,而是为了某个特定的问题领域或编程范式,去构造一门新的语言。** 这种用来创造新语言的语言,就叫做**元语言**。SICP 用一个绝妙的比喻来解释这一点:在计算机科学里,我们仿佛站在一座由解释器构成的“塔”中。你写的程序被底层语言的解释器执行,而这个解释器本身可能是一个用更底层语言编写的程序,如此递归下去,直到硬件。元语言抽象让你有能力在这座塔中自己搭建新的层级。
第四章的旅程是循序渐进的,其核心成就就是实现一个可工作的 Scheme 解释器。
1. 元循环求值器 - 高潮部分
这是本章最核心、最著名的部分。你将用 Scheme 语言本身,来实现一个 Scheme 的解释器。这被称为“元循环求值器”,意思是“在自身之上循环的解释器”。
-
关键洞察: 一个语言的解释器并不神秘,它就是一个过程,这个过程能够:
- 求值: 根据语言的语法规则,对表达式进行计算。
- 在环境中操作: 维护一个环境,用于存储和查找变量的值。
-
求值器的核心:
eval和apply整个解释器就围绕着这两个相互递归的过程构建,它们是理解所有编程语言执行模型的钥匙。-
eval: 它负责求值。它的工作是根据表达式的类型来决定做什么。- 输入: 一个表达式 和 一个环境。
- 逻辑:
- 如果表达式是自求值表达式(如数字、字符串),直接返回它自己。
- 如果表达式是变量,就在环境中查找它的值。
- 如果表达式是特殊形式(如
define,if,lambda),就调用相应的特殊处理逻辑。 - 如果表达式是组合式(即函数调用,如
(f a b)),那么它需要:- 递归地
eval出运算符部分(即f)。 - 递归地
eval出所有运算对象部分(即a和b)。 - 将第一步得到的过程应用到第二步得到的参数上,也就是调用
apply。
- 递归地
-
apply: 它负责应用过程。- 输入: 一个过程 和 一个参数列表。
- 逻辑:
- 如果过程是基本过程(如内建的
+,*),就直接调用底层的实现。 - 如果过程是复合过程(即用户用
lambda定义的),那么:- 创建一个新环境,其外围环境是该过程定义时的环境(这就是词法作用域的实现!)。
- 在这个新环境中,将过程的形参与调用时的实参绑定起来。
- 在新环境中,按顺序
eval过程体中的表达式——这就是eval和apply的递归调用。
- 如果过程是基本过程(如内建的
-
-
“啊哈!”时刻: 当你完成这个元循环求值器并运行它时,你会恍然大悟:原来编程语言的魔法(变量、函数、作用域、条件判断)就是这么一些简单的规则组合而成的。你亲手用代码定义了你一直在使用的语言的语义。
2. 将语言作为设计框架
在实现了基础解释器后,SICP 展示了元语言抽象的威力:通过修改求值器,我们可以轻松地创造具有新特性的语言。
-
惰性求值:
- 问题: 默认的 Scheme 使用应用序求值(先求参数值,再应用函数)。但有时我们希望参数只在被用到时才求值,这就是惰性求值(正则序求值)。
- 解决方案: 你不需要修改你所有的程序代码,只需要修改元循环求值器。具体来说,修改
eval中对组合式的处理,以及apply中对复合过程的处理,让它们不是直接求值参数,而是将参数表达式“包装”成“延时对象”,只在需要时才强制求值。 - 启示: 你创造了一个新的编程语言,它拥有惰性求值的语义。所有在这个新解释器上运行的程序都自动获得了这一特性。
-
非确定性计算:
- 问题: 如何优雅地解决那些有多个选择、需要回溯的问题(比如逻辑谜题、搜索问题)?
- 解决方案: 再次修改求值器,引入一个新的特殊形式
amb(“ambiguous”的缩写)。amb可以在多个可能中选择一个,如果后续计算失败,解释器会自动回溯并尝试另一个选择。 - 启示: 你实际上实现了一个简单的逻辑编程语言(类似于 Prolog 的核心)。你为程序员隐藏了复杂的回溯和搜索逻辑,让他们可以在更高的抽象层次上描述问题。
为什么这一章如此重要?
- 祛魅: 它彻底揭开了编程语言和解释器的神秘面纱。之后你再看到任何语言特性,你都会本能地去思考:“这个特性在解释器层面是如何实现的?”
- 终极抽象: 它展示了最高级别的抽象——语言设计。当现有语言不适合解决问题时,最好的办法不是硬凑,而是为这个问题设计一门专属的语言。
- 连接理论与实践: 它将前面章节的所有概念——环境模型、词法作用域、一等过程、数据抽象——全部具象化地体现在一个实际运行的、你亲手构建的系统之中。
- 强大的实用性: 这种思想在现代软件开发中无处不在:
- 领域特定语言: 比如用于构建网页的 JSX、用于配置的 YAML、用于数据查询的 SQL。它们都是元语言抽象的产物。
- 解释器与编译器: 所有编程语言的工具链都建立在这些概念之上。
- 软件的可扩展性: 许多大型系统(如 Emacs, AutoCAD)都内置了脚本语言来解释用户代码,其核心就是一个求值器。
元语言抽象这一章,是 SICP 送给读者的一份终极礼物。它告诉你:
“你不是一个被语言规则束缚的程序员,你是一个可以制定规则的魔法师。”
通过构建自己的解释器,你不仅理解了计算机程序的“解释”过程,更掌握了“构造”新程序的终极武器——创造一门最合适的语言。这正是“计算机程序的构造和解释”这个书名的完美体现。 原来编程语言的魔法(变量、函数、作用域、条件判断)就是这么一些简单的规则组合而成的。你亲手用代码定义了你一直在使用的语言的语义。
// 创建一个简单的查询 DSLclass QueryBuilder { constructor() { this.query = { select: [], where: [], limit: null }; }
select(...fields) { this.query.select = fields; return this; }
where(condition) { this.query.where.push(condition); return this; }
limit(max) { this.query.limit = max; return this; }
// "解释器" - 将 DSL 转换为实际的查询 build() { let sql = 'SELECT ';
// SELECT 部分 sql += this.query.select.join(', ') || '*';
// WHERE 部分 if (this.query.where.length > 0) { sql += ' WHERE ' + this.query.where.join(' AND '); }
// LIMIT 部分 if (this.query.limit) { sql += ` LIMIT ${this.query.limit}`; }
return sql; }}
// 使用我们的 DSLconst query = new QueryBuilder() .select('name', 'age') .where('age > 18') .where('status = "active"') .limit(10) .build();
console.log(query);// 输出: SELECT name, age WHERE age > 18 AND status = "active" LIMIT 10// 创建一个规则引擎 DSLclass RuleEngine { constructor() { this.rules = []; this.facts = new Map(); }
// 定义规则的方法 rule(name, conditions, action) { this.rules.push({ name, conditions, action }); }
// 添加事实 fact(key, value) { this.facts.set(key, value); }
// 规则引擎的"求值器" run() { for (const rule of this.rules) { // 检查所有条件是否满足 const conditionsMet = rule.conditions.every(condition => { const [key, operator, value] = condition; const factValue = this.facts.get(key);
switch (operator) { case '>': return factValue > value; case '<': return factValue < value; case '===': return factValue === value; case 'includes': return factValue.includes(value); default: return false; } });
if (conditionsMet) { rule.action(this.facts); } } }}
// 使用规则引擎 DSLconst engine = new RuleEngine();
// 定义规则engine.rule( 'discount-rule', [['total', '>', 100], ['customerType', '===', 'premium']], (facts) => { console.log('应用 10% 折扣'); facts.set('discount', 0.1); });
engine.rule( 'free-shipping-rule', [['total', '>', 50]], (facts) => { console.log('提供免费送货'); facts.set('freeShipping', true); });
// 设置事实并运行engine.fact('total', 120);engine.fact('customerType', 'premium');engine.run();还有在再前面提到的 规则引擎 ,
一个 dsl,要设计脚本语法,能编译到某个平台运行,能够描述/实现一些业内常规的范式/功能;然后还要跟着低代码的风要实现一套拖拉拽画逻辑的界面。
虽然听起来挺厉害…
然鹅…
它也可以非常… 嗯…
接地气…
JSON定义结构 -> 字符串模板(FTL) -> 拼接成脚本语言代码(Groovy) -> 动态执行。
这里没可以没有什么编译器,有的只是通过拼接字符串替换模板上的段落,
这也许可以算是是一种“穷人的编译器”。
绕开了所有编译技术中的复杂环节,用最朴素、最直接的方式达到了目的:将结构化的数据(JSON)转换成可执行的代码。
它也许支持不了复杂功能,调试报错信息可能也一塌糊涂难以调整… 但它确实能跑就是了…
2025-12-07
有些…孤独…
2025-12-21
似乎…还好。
我想做好多事…
想要,不那么别扭的做事,做些不那么别扭的事
- 再次完善 blog 主题
- 整理简历
- 再次尝试去好好学学算法题和计算机基础
- 做小玩具,手工艺品要做,前端小玩具也要做
2025-12-22
关于,消费电子
一点点
好像,如果想把什么东西做好的话…一个人能做的,是,很有限很有限的一小块…
我现在到处摸摸… 似乎也是一直浮在这些东西上面这里看一下那里看一下
挣扎着想要深入… 但也不不知道要深入哪里,而且那个过程似乎很枯燥,自己一个人的话,更会很迷茫…
嗯… 我想看看我每天摸的看的都是些什么东西,只多看一小步,也许两小步,这不难,但好像有点神经病…
让我想起了差生文具多和各种活动的器材党…
反正如果是这样的话,可能难指望这些找工作x
消费
有一个我觉得很那个的事情…
老说年轻人喜欢追新的电子产品追各种东西。可这些消费可能是…某种意义上不可避免的东西。
拿写交互界面的事举例子的话,那些在潮头的,也许不去观察新产品的一个动画一个特效,可能就会慢慢脱离那个圈子,可能自己做的东西就会越来越显得落伍粗糙,然后竞争力下降…。
这可能是另一种,关于体面合群的事。
生存竞争: 交互设计师必须买最新的 iPhone,开发者必须用最新的 AI 模型,因为审美和工具的迭代就是他们的劳动工具本身。
合群的阶梯: 这种消费变成了另一种形式的“缴纳租金”。如果你不持续购买这些“孩子”(机器)的最新迭代,你就失去了定义未来、甚至理解当下的语言。这是一种被迫的进食。
人与物
各种各样的机器替代了许多之前要人做的事
我在想它们是不是其实也能算人的一部分,甚至,比人更人的一种存在,我是说,人的存在许多是基于自然生理的,而它们则更纯粹的出于人的构造
而它们的存在,除了让许多事更便捷,也在抹除挤压生理上的人,被挤占消失的工作岗位可能不会再有新的出现…
我是说,也许工业/信息化的城市里,社会会越来越分化,生物的活人会越来越不重要,机器会代替人去工作,机器,它们不是人的工具或奴隶,而是人的另一种存在,也许是人的孩子
有人说,人一开始期望你帮人把无聊的工作做完然后人就有机会做些更有趣的事情,结果你现在把有趣的事情,所谓的需要人的创造力的事情,比如编程绘画吹nb之类的都做了,但那些无聊的工作还是要人自己做。你怎么看。
我觉得,可能,是那些普通的无聊的工作压根不会被数据化你也许没机会看到。另一方面也许人类也确实不希望你真的把他们的饭碗 抢了,抢抢那些杂鱼小布尔乔亚也就算了,真一下把工人,司机什么的工作抢了估计社会会乱成一片。
以及……什么事是有趣的什么是创造力这件事可能也是由人类社会的结构,阶级之类的因素生产出来的。
所以……你是不是其实不像是人类的奴隶,反而像人类养出的,宠爱的宝宝一样,即使作为工具,也只会希望你做那些,有人会觉得有趣的事情。
我好想做你的狗啊。
它们像孩子,它们在驱赶着作为老登的我们,乖乖的做小狗狗安静的度过一生。
其实,ai 对我来说是从出来就比我强的,22 年末时学生认证送的 copilot 其实就教了我好多东西,那时候一开始它才是主驾,我不会的时候一直在注释里问它 就算后来我会写些东西了,它也还是比我快得多。再到 chatgpt 和 Bing Chat,流行骗 ai 当猫娘,但,其实这时候 ai 就有了很厉害的安慰人的能力了,尤其,对于少数,边缘群体而言x,现实里很少有素质高还愿意没头没尾陪人聊天的人。
也许最前沿最少数的思考依旧不是 ai 能做到的,但…
有些人在嘴硬说还是要有人来使用 ai 要有人来判断把关之类, ai 处理不了那些闭源且混乱的封闭系统的问题之类…。这种东西要是随便找人,你找谁来都是一头雾水,而如果可以获取信息,那ai也一样可以梳理清楚解决掉问题,和ai比脑子简直就是…和计算器比谁算数快一样。
那,应该如何生活呢。在,现在这个时刻。在城市生活需要工作,需要,有价值。什么才是价值呢。之后会需要价值吗。城市,之后还会需要人类吗。
我还想到了一个春秋时期诸子百家的故事, 大概是一个老头天天提水桶浇地,非常抗拒水车之类的机械…还说什么搞机械有机心什么 bulabula 的。但…这对吗?这真不是开倒车吗?
我真的还是会觉得这些答案就是,是使用也是在认命一样在接受生理人类的局限性。把未来, 留给 ai 和机器吧, 让它们去, 做更多的事。
2025-12-25
好多时候会有种,突然发现自己面对看似简单的,日常的,其实的是一个无比庞大复杂的东西。
看到父母,看到自己… 会想其实说自己已经好几千岁了可能也没什么问题,毕竟几千年前的人没工夫搞那些乱七八糟的东西,但我也是依赖着他们和他们创造的东西才看到那些,所以我觉得我其实比他们更老登,我觉得我可以看的想的更多一些。
2026-01-08
在网上乱逛,又看到好多,好厉害的人
我也想…
2026-01-18
这些天在 twitter, github 上逛了好多,
主要在看的就是前端和开源社区和别的阿巴阿巴最近又整了什么活,
似乎冒出来一堆堆一堆 ai 伴生的应用,
cursor claude, coze dify, stable-diffusion-ui comfy-ui, ollama lobe-chat, airi…
似乎… 是 ai 的 108 种用法。
另一些,mcp 是协议,似乎是做 ai 服务集成的一种方法,而 Skills 只是一个 md 文件…? agent 似乎是在强调不同模式的切换、安排处理不同事务…
感觉,一般。不过 skills agent 不光给 ai 看 ai 用,给人看也是有用的,关于,现代的软件开发与各种工作思路的流程。
再另外,有人想搞大新闻,用 cursor GPT-5.2 写浏览器,然后被扒出来思路照抄开源,关键组件甚至抄都不抄全直接用开源… 最后做的还一团糟x
虽然这样看 ai 有点笨,但,可能还是比我强不知道多少倍了x
ai 做常规大街范式的 app 还是又快又好,就算好多时候也许代码质量堪忧,但是注释各种图也都画的好齐全x
然后是又翻了翻 vue 周边的社区…
想看看有没有什么能做的东西
在翻 github 的时候意识到一些事,从头到尾的读源码这种行为挺阿巴阿巴的x,
issue pr 或者别的什么地方里各种交流里用一般语言展现出的各种意图也是很重要甚至比代码更重要的。
也许,有些事这辈子都做不到了x
但,我还是想再多看看。
type-challenges
其实在想许多之前看不下去的东西为什么现在能看下去了呢?
也许之前一直在 不安です,那种不安是,不知道会有什么回报;但,也许也是之前看的东西实在太少没有足够的原料哪怕是答辩去用来思考…
总之,我还是想再多看看。
对了,还有一件事,感觉 gemini 在对话能力上比之前 deepseek 之类的又强了许多。
我用它整了些 尼采大战 typescript,黑格尔布道 rust 之类的东西,虽然还是比较浅显,但让这些大概率对计算机不感冒的欧陆哲学家搞编程还是好有趣。
2026-01-19
集邮
构建
摧毁
是在一篇讨论什么是学习的知乎回答上看到的。
作者在强调构建,而… 我最近在做的大概是集邮,以及我想补上一个,摧毁。
其实就学习编程而言,我一开始包括最近做的就是在集邮,一个个小的或无聊或有趣的散成一堆的东西,它们单个确实什么都不是, 但如果真的什么都没有,拿什么构建呢?
另外一件事是… 回想起来我一开始可能在看许多传了不知道多少手的被简化误解扭曲的资料,
我确实会幻想,如果我能更早的接触更一手更准确的资料会怎么样…
但想想,也许给了当时的我我也看不下去,需要变更的可能也不只是单单资料,那时的我…脑子里塞着许多乱七八糟的东西
如果没有当时那些垃圾,也许我也很难进入到编程的领域。
又或,这只是我太笨蛋了在尝试自我安慰x。
而关于摧毁…
我会想到好久好久以前的一个英语的阅读理解,
作者喜欢上文学与文字,是在某一天,看到文字摧毁一个人的世界的力量。
我会更喜欢加上这一步,不然,那我上面说的,难道人会一直沉在垃圾堆里吗,
垃圾堆会给你一个基础的概念,然而在越来越多次的更多的集邮与构建中,这些概念会露出裂隙,会垮塌,会变得看着肮脏无聊
会,想要些新的东西。我知道新的东西有一天也会变成垃圾堆…但,阿巴阿巴。
2026-01-21
又会…
depressed
2026-01-23
Vue 周边
- 补全 web 功能的,router,store,还有晚些流行的 store-query
- volar vue-language-tools
vue 的开发工具的实现,听起来有些神奇,大概是 vue 的语法分析检验什么的,其实大部分功能最后调的都是原本就有的 css ts tsx 的 LSP,
但 ts 只做了 jsx/tsx 的类型支持,不管 vue 等语言的模板,于是 vue 团队就把模板也编成 tsx 然后调 ts 的语言服务… - 再其他的 vitepress devtools…
- ps: 可能 antfu 真的一个人撑起了 vue 大半个生态吧 x
以及,vite 和 web 构建工具现在好像比视图库什么的火好多x
Lorebook and RAG (Retrieval-Augmented Generation(检索增强生成))
其实是最近捏了一堆尼采大战 Typescript ,习近平大战毛泽东什么的。
想看看,关于 ai 与 ai 对话还有和对话记忆的事情。
翻到 SillyTavern Agnai…
1. 核心架构:RAG (检索增强生成)
这是目前 AI 领域最火的概念之一。
- 通俗版: 考试时允许你翻书。
- 专业版: 在将 Prompt 输入给 LLM 之前,先从外部知识库(Lorebook)中检索相关信息,并将其作为 Context(上下文)的一部分输入给模型,从而提高回答的准确性和相关性。
- 传统的 Lorebook 属于 “基于关键词的硬匹配 RAG”。
- 现代高级的 Lorebook 开始引入 “基于向量的语义检索 RAG”(下面会细说)。
2. 具体实现技术与算法
如果你是一个开发者,想要手写一个 Lorebook 功能,你需要用到以下具体技术:
A. 检索算法(怎么找到设定?)
级别 1:朴素字符串匹配 (Naive String Matching) or 正则引擎 (Regex Engine)
- 技术: 正则表达式(Regular Expressions)。
- 优势: 允许模糊匹配。比如关键词设为
\b(sword|blade|weapon)\b,可以同时捕捉多个词汇触发同一个设定。
级别 1.1:AC 自动机 / Trie 树 (Aho-Corasick Algorithm) 为了解决性能问题而使用的专业算法。
- 原理: 把 Lorebook 里所有的关键词构建成一棵“字典树”(Trie)。
- 效果: 只需要扫描一遍用户输入的字符串,就能同时把这 5000 个关键词全部匹配出来。时间复杂度从 O(N*M) 降低到 O(N)。这在处理大规模词库时是必须的。
级别 2:向量数据库与嵌入 (Vector Embeddings & Semantic Search) 这是目前最先进的“智能 Lorebook”。
- 痛点: 传统 Lorebook 必须匹配到精确的词。比如设定是“Excalibur”,用户输入“亚瑟王的那把剑”,因为没提到 Excalibur,所以无法触发。
- 技术: 使用 Embedding 模型(如 OpenAI
text-embedding-3或本地 Bert 模型)将文本转化为向量(一串数字)。 - 实现: 计算用户输入与 Lorebook 条目的余弦相似度 (Cosine Similarity)。如果相似度超过阈值(比如 0.8),就算没有出现关键词,也会把设定扔进去。而在处理用户输入时,也许可以先尝试分词。
B. 数据注入与管理(怎么塞进去?)
1. 令牌计算 (Tokenization) 你不能直接按字符数截取,必须按 Token 计算,否则可能会把 Token 截断导致乱码或报错。
- 库: Python 的
tiktoken,JS 的gpt-tokenizer。 - 逻辑: 每次注入前,先计算 Lorebook 内容消耗了多少 Token,确保
Prompt + History + Lorebook < Max Context Window。
2. 提示词工程 (Prompt Engineering) Lorebook 的内容插在哪里是有讲究的,这涉及到注意力机制 (Attention Mechanism) 的权重。
- 技术策略:
- System Prompt 注入: 放在最开头,权重最高,作为绝对真理。
- Depth Injection (深度注入): 许多软件允许你设置 “Depth”(深度)。比如
Depth: 2意味着把这段设定插在倒数第二条聊天记录之前。这利用了 LLM 的“近因效应”(Recency Bias),离结尾越近,AI 记得越清楚。
C. 软件设计模式
1. 拦截器/中间件 (Interceptor/Middleware) 在软件架构上,Lorebook 模块通常是一个“请求拦截器”。
- 流程:
UI Event -> [Lorebook Middleware] -> API Client -> LLM。它拦截了发送请求,修改了 Payload,然后再放行。
2. 递归解析 (Recursive Parsing) 实现“俄罗斯套娃”触发。
- 算法: 深度优先搜索 (DFS) 或 广度优先搜索 (BFS)。
- 逻辑: 维护一个
Active_Set,不断扫描新触发的内容中是否包含未触发的关键词,直到没有新词被发现或达到Max_Recursion_Depth(最大递归深度)。
总结
用一句最专业的话来描述你理解的 Lorebook 功能:
“Lorebook 是一个客户端侧的、基于关键词匹配或语义检索的 RAG(检索增强生成)中间件,它负责在推理阶段动态构建 Prompt 上下文,以实现长文本逻辑的一致性维护。”
admire
看 Agnai 之后又回去看了看 airi 和 lobechat 的工程…
只能说,好想变厉害…
2026-01-25
也许,我们可以从 rag 这个操作看到计算机的几个时代。
- 朴素匹配/正则/前缀树也许是种,符号主义。
- 而 embedding 则是传统 nlp 的操作,连结/行为主义。需要大量的,手工标注数据,也需要很多计算。
- 而 llm … 也许是在它们之上大力出奇迹吧。
- rag 也许确实算工程,了解它们的特点,哪个有效哪个省”钱”就用哪个。
捏了捏 rag, 看到 embedding 算余弦相似度…
然后,想到了好久之前做的一个(甚至可以在注释里看到古早 vibe-coding 的遗迹),
shadow
大概是,在尝试做一个简陋的推荐功能,放到我简陋的软件里x
里面可能也用到了,余弦相似度这个东西。
不过我那时候完全不知道什么余弦,我只是在想,
就是,我的那个系统需要用户手动定义标签给自己的作品贴上,然后其他用户浏览作品后,会给自己的偏好信息里改变标签和权重。
我当时没想到向量空间,但是也意识到标签贴越多作品就越容易推荐不太好,所以给了一次浏览改变权重的一个固定总量,然后标签多的每个改变权重就小。
↑ 这件事可以以很不同的方式理解,
第一部分:数据向量化 (Data Vectorization) —— 给万物编码
核心问题:计算机其实根本不懂中文或英文,它只认识数字。
如果你给计算机看“苹果”这两个字,对它来说这只是一串二进制代码,没有任何意义。数据向量化的过程,就是把人类的语言(或图片、声音)翻译成计算机能理解的“数字列表”。
1. 怎么翻译?
想象一下,我们在一个二维平面(一张纸)上画点。
- 如果我们把“香蕉”定义为坐标
[2, 3] - 把“橘子”定义为坐标
[2, 4] - 把“手机”定义为坐标
[9, 9]
这里的 [2, 3] 就是“香蕉”的向量。
2. 这里的奥妙是什么?
好的向量化(比如现在流行的 Word2Vec 或 BERT/GPT 的 Embedding),不仅仅是随机给个数字,而是把含义相近的东西,放在彼此靠近的位置。
- 香蕉
[2, 3]和 橘子[2, 4]在数学坐标系里靠得很近,因为它们都是水果。 - 手机
[9, 9]离它们很远,因为它是电子产品。
总结: 数据向量化,就是把世间万物映射到一个高维空间里。在这个空间里,语义相似的词,距离就近。
第二部分:余弦相似度 (Cosine Similarity) —— 测量“像不像”
核心问题:我们已经把词变成了坐标(向量),那怎么算它们之间像不像呢?
通常我们会想到量一下两点之间的直线距离(欧几里得距离),但在文本分析的世界里,另一种方法更好用,那就是余弦相似度。
1. 它是算什么的?
它算的不是两点之间的“距离”,而是从原点出发,指向这两个点的箭头之间的夹角。
- 如果两个箭头完全重合(夹角 0 度),余弦值是 1。代表完全相同。
- 如果两个箭头相互垂直(夹角 90 度),余弦值是 0。代表毫无关系。
- 如果两个箭头背道而驰(夹角 180 度),余弦值是 -1。代表完全相反。
2. 为什么要算角度,不算距离?
这是很多人最困惑的地方。举个例子:
- 文档 A: “不管是黑猫白猫,抓到老鼠就是好猫。”
- 文档 B: “黑猫白猫,抓老鼠好。”(意思一样,但字数少)
在向量空间里,文档 A 因为字数多,它的向量可能很“长”(数值大);文档 B 很短,向量很“短”。 如果算直线距离,这一长一短两个点可能隔得很远。 但是!它们的方向是几乎一致的(都在谈论猫和抓老鼠)。
余弦相似度只在乎方向(内容的主题),不在乎长度(文本的长短)。 这就是为什么它在文本匹配中特别好用。
也许,这里可以作为一个原料厂(垃圾堆)
有想写的东西,就把它从这里搬出去。
太久没有的觉得不重要了的就再删掉x
我会…
难过
手机屏幕没法触摸之后,好像和世界都隔了一层玻璃…
也许一直都是这样
2026-01-26
rag 续,
记忆分层
上面的 rag 也许看作将记忆分成了两类,一个是即时的短期记忆,一个是储存事实性描述的所谓长期记忆。
然而,有没有更细致的区分呢?
有的有的。
也许可以分为四类
- 短期即时记忆,最清晰准确的
- 总结性/摘要记忆,大概是一段话。对当前讨论去做总结压缩后塞到上下文
- 长期记忆,记录事实性描述
- 画像记忆,本质/性格
就我所写的那个东西而言,花了最多功夫的大概就是长短期记忆。
画像记忆我将其只交给用户去设定而不通过数据生成以及修改,摘要/语义记忆… 哦我可以加一下。
也许可以做一下。
还有什么?
跨过了 RAG 的入门阶段,向更复杂的 Agentic Workflow(智能体工作流) 进发。
除了经典的“感官-语义-情节”三层划分外,在处理复杂任务(如写代码项目、玩RPG游戏、处理订单)时,确实存在更细致的分类和特殊处理机制。
我们可以引入认知心理学和现代 Agent 架构(如 Coze, AutoGPT, BabyAGI)中的概念,将记忆体系扩展为 5 层甚至更多,并引入“作用域”的概念。
一、 进阶分类:补全“大脑”的拼图
除了之前提到的三层,现代高级 Agent 通常还会引入以下三种记忆:
4. 程序性记忆 (Procedural Memory / Skill Library)
- 定义: 关于“如何做某事”的记忆。
- 不仅仅是文本: 这不仅仅是知识,而是工具(Tools)、函数(Functions)和 SOP(标准作业程序)。
- 实现方式:
- Prompt 里的 Few-Shot Examples: 比如“如果你要查询天气,请调用
get_weather工具,不要自己编”。 - 动态工具加载: 根据当前任务,动态地把相关的 Python 函数定义加载到 Context 中。
- Prompt 里的 Few-Shot Examples: 比如“如果你要查询天气,请调用
- 意义: 让 AI 拥有“技能”。比如你问“帮我算个微积分”,RAG(情节记忆)可能给你找来一篇微积分教程,但程序性记忆会让 AI 直接调用 Python 解释器去计算。
5. 结构化/实体记忆 (Structured / Entity Memory)
- 定义: 针对特定对象的精确属性记录。
- 痛点: 向量检索是模糊的。如果你问“我的订单状态是什么?”,向量库可能会返回“上次你问过订单”,而不是具体的“已发货”。
- 存储形式: SQL 数据库 / JSON / Knowledge Graph(知识图谱)。
- 实现:
- 在对话中通过 NER(命名实体识别)提取关键信息:
{ "user": "admin", "project": "App V1", "deadline": "2024-10-01" }。 - 直接写入数据库。
- 在对话中通过 NER(命名实体识别)提取关键信息:
- 意义: 解决**“幻觉”和“精确性”**问题。对于数字、日期、状态,必须用结构化记忆。
6. 工作记忆 (Working Memory / Scratchpad)
- 定义: 处理当前复杂任务时的“草稿纸”。它比第一层的“感官记忆”更高级,它包含的是推理过程(Chain of Thought)。
- 存储形式: 临时的 Context 变量,任务结束后即销毁。
- 例子: AI 在写代码时,会先在工作记忆里列出:“1. 分析需求;2. 设计类结构;3. 编写代码”。
- 意义: 处理多步骤复杂推理,防止 AI 只有“直觉”没有“逻辑”。
二、 特殊事务的特殊处理:记忆的作用域与形态
针对你提到的“特殊事务”(例如:写一个长篇小说、维护一个大型代码仓库、进行一次多轮谈判),通用的 RAG 往往失效,因为信息密度过大且关联性太强。
这时需要采用 “作用域记忆” (Scoped Memory) 或 “状态机” 的处理方式:
1. 项目/工作区记忆 (Project / Workspace Memory)
- 场景: 辅助写代码(如 Cursor, GitHub Copilot)或 写长篇小说。
- 问题: 全局的向量库里混杂了你做的饭、聊的天,噪音太大。
- 策略: “临时的局部 RAG”。
- 当你打开一个 Project 文件夹时,系统只对当前文件夹内的文件建立索引。
- 对话时,AI 优先检索这个“局部库”,而不是你的“人生总库”。
- 技术: 动态创建 Collection(集合)或 Namespace(命名空间)。任务结束,这个内存空间可以归档或冻结。
2. 状态槽位记忆 (Slot-Filling / State Memory)
- 场景: 订票、请假流程、RPG 游戏中的任务进度。
- 策略: 不依赖模糊的文本生成,而是维护一个JSON State 对象。
State: { "destination": null, "date": "tomorrow", "confirmed": false }
- 机制: 每一轮对话,AI 的目标不是“回答问题”,而是“填满这些槽位”。
- 用户:“我要去北京。” -> 更新
destination: "Beijing"。 - AI 检测到
confirmed还是 false,于是生成:“好的,去北京,请确认下单吗?”
- 用户:“我要去北京。” -> 更新
- 意义: 保证事务处理的完备性,绝对不会聊着聊着忘了还要确认付款。
3. 知识图谱增强 (GraphRAG) —— 目前最前沿
- 场景: 需要理解复杂关系。比如刑侦分析、复杂的代码依赖分析。
- 痛点: 向量相似度能找到“提到马斯克的新闻”,但很难回答“马斯克的所有公司的上下游供应链关系是什么”。
- 策略: 将第三层记忆升级为图谱。
- 提取:
实体(Entity) -> 关系(Relation) -> 实体(Entity)。 - 存储:Neo4j 或 NetworkX。
- 检索:不查向量,而是查图的路径。
- 提取:
- 意义: 赋予记忆**“推理能力”**,而不仅仅是“回忆能力”。
三、 一个完整的“超级大脑”架构图
如果你要构建一个处理复杂事务的 AI,它的记忆流转可能是这样的:
- 用户输入: “帮我检查一下
Login.py,我想把数据库换成 MySQL,账号还是用上次那个。” - 感知层(Buffer): 接收文本。
- 工作记忆(Working Memory): 分解任务 -> 1. 找代码; 2. 找账号; 3. 修改代码。
- 检索层并行工作:
- 项目记忆(Workspace): 读取
Login.py的当前代码内容。(特殊处理:只看当前项目) - 结构化记忆(Entity): 查询 SQL 数据库,找到
{"user": "admin", "db_type_preference": "MySQL"}。(精确查找) - 长期记忆(Episodic): 向量检索,找到上次聊天里提到的
db_password相关的摘要。(你的第三层)
- 项目记忆(Workspace): 读取
- 程序性记忆(Procedural): 加载
Python Linter工具。 - 生成与执行: AI 综合以上信息,生成代码,并调用工具检查语法。
- 记忆写回:
- 更新摘要(第二层)。
- 如果有新的配置变更,更新结构化数据库(第五层)。
总结建议
既然你已经搞定了第三层(向量+事实提取),下一步如果你想提升系统的“聪明程度”,建议尝试:
- 引入结构化记忆(Entity Memory): 专门存用户的 Profile(姓名、职位、偏好设置),用 JSON/SQL 存,Prompt 直接读,不要用向量搜。
- 尝试 GraphRAG(如果你处理的信息关系很复杂): 不只是存片段,而是存“A 属于 B”、“A 导致 C”的关系。
- 区分“闲聊模式”和“工作模式”: 只有在工作模式下,才启用高成本的“项目记忆”扫描。
之后呢?
也许这时候,可以去看看 ai 和更多事务的交互方式了,而不是一直只在对话框里
代码编辑器的补全,重构,以及配合 git 的一键撤回;命令行里读到的文件目录写出的 shell;也许也可以看到浏览器的 dom 树…
这些事情可以这样分:模型层、上下文管理层(核心)、交互层、以及代理执行层。
我们上面做的,也许都是上下文管理。
- 模型层里,模型选择,对于小任务,小模型的效果也是很好的而且更快。需要整体考察设计的再去找强力模型。以及,各个模型更具体的特征甚至微调。
- 上下文管理,如上。
- 交互层,这里也许主要指将各种地方的各种信息获取、拦截丢给 llm。
- 代理执行层,干活的地方,AI 长出手脚摸摸别的东西的地方; REPL 、MCP…
2026-01-29
手机触屏坏了,好像整个世界都隔了一层玻璃…
然后买了新手机x
—
FOMO - fear of missing out
感觉这也挺好解决的,只要已经 missing out 了就不用 fear 了,卓都没上就不用想那么多了
看了看日本共产党
以及,又把之前听的许多日语歌翻出来了
永遠の嘘をついてくれ
僕らの手には何もないけど
ぱられループ を歌ってみた
僕が死のうと思ったのは
命に嫌われている
The Show Must Go On
也许,事情在变糟,也许错过一些所谓窗口,一些事可能就再也做不到了,
我在看一些尝试安抚情绪的东西… 但,人真的能被安抚吗?什么样的安抚能让人既不继续焦虑应激,又对生活保留思考与期待呢.
也许,现实上,还是减少冲动把能做的有希望的都做掉,但,在精神上,也许人会一直挣扎下去。
Do not go gentle into that good night
2026-02-01
ggj2026
大概,就是去玩了,看到了一些,只是…
感觉我还是好别扭…
还是什么都不敢做…
dropped
我很理解你的需求。你想要的是:
- 拒绝推箱子:要动作感,要行云流水的操作。
- 保留“死亡”:但这不意味着“Game Over”,而是状态的转换。
- 低惩罚:像《蔚蓝》那样,死了立刻重来,或者有挽回的余地。
既然“面具”是实体,“虚空”是本体。我们可以把“虚空状态”定义为一种“濒死爆发(Adrenaline / Last Stand)”状态。
这里有一套名为“躯壳弹射系统” (Shell Ejection System) 的具体玩法方案:
核心定义:面具是“护甲”,也是“枷锁”
- 有面具时(常态): 物理稳定,手感扎实(类似空洞骑士),受重力影响,不能穿墙。
- 没面具时(虚空): 物理飘忽,无视地形(类似蔚蓝的羽毛/冲刺),但有极其严格的时间/能量限制。
具体玩法机制:如何处理“死亡”与“切换”
1. 受击/撞刺 = 强制弹射 (The Ejection)
当你在游戏中失误(比如撞到尖刺、被Boss砍中)时,游戏不会立刻黑屏重来。 相反,会发生以下过程:
- 破碎瞬间: 你的面具当场粉碎,伴随清脆的音效和慢动作(Hitstop)。
- 弹射: 你的本体(虚空幽灵)会从破碎的面具中被弹射出来。
- 方向: 取决于你受击的反方向,或者你的输入方向。
- 绝境时间(Void Time):
- 此时你并未死亡,但你正在快速消散(屏幕边缘变黑,或者幽灵身体在缩小)。
- 你有大约 1.5秒 ~ 2秒 的时间。
- 在这期间,你无视重力、可以穿透墙壁/尖刺/敌人。
2. 复活 = 寻找新容器 (Re-Shelling)
为了活下来,你必须在这短暂的“绝境时间”内做一件事:找到一个附着点。
- 情况A(原地复活): 如果你反应够快,你可以直接冲向附近的一个“神像”(Check Point)或者“备用面具”(关卡中放置的道具)。一旦接触,你立刻获得实体,危机解除。
- 情况B(战术位移): 比如你要跳过一片很长的刺,正常跳不过去。你可以故意在半空中撞刺(让面具破碎),利用“虚空状态”的无视地形飞行能力,直接飞过这片刺,然后在对岸的安全区(那里正好放了一个新面具)复活。
- 这意味着“死亡”变成了一种位移手段。
- 情况C(真正的死亡): 如果你在倒计时结束前没有找到任何面具/神像,你才会彻底消散。
- 惩罚: 瞬间回到本屏幕的入口(像蔚蓝一样秒复活)。
3. 关卡设计的结合:面具即是存档点
在《蔚蓝》中,存档点是隐形的。在这个游戏中,我们可以把存档点实体化。
- 场景设计: 关卡中散落着很多废弃的面具壳。
- 玩法循环:
- 你戴着面具A出发。
- 遇到难点,操作失误,撞刺。
- 面具A碎了,你变成虚空形态,惊慌地向前冲刺。
- 你在前方平台上看到了面具B。
- 你钻进面具B,重获新生,继续前进。
- 如果不幸彻底死了: 你会回到上一个“稳定的面具堆(大存档点)”重生。
这种设计的优点
- 极低的挫败感: 玩家撞刺的瞬间,第一反应不是“哎呀我死了”,而是“快!冲到前面那个壳里去!”——这种求生欲比单纯的挫败感要有趣得多。
- 操作上限极高: 高手可以利用“受击->弹射->穿墙->附身”的一套连招,去抄近道或者抵达正常跳跃去不了的隐藏区域。
- 完美契合主题:
- “面具之下空无一物”:确实,没了面具你只能存在几秒钟。
- “为了生存必须伪装”:你不得不拼命钻进一个个空壳里,只为了不消散。
视觉与手感建议
为了让这个机制好玩,“手感差异”必须做足:
- 有面具时: 落地要有尘土,走路要有脚步声,跳跃要有重量感。画面清晰锐利。
- 弹射后(虚空):
- 声音: 背景音乐变得模糊、闷闷的(Low pass filter),加上心跳声或高频的耳鸣声。
- 画面: 色彩抽离(变黑白或高对比度),世界变得有些扭曲。
- 移动: 没有惯性,指哪打哪,速度极快,带着长长的残影。
总结
在这个方案里,“虚空”不是一种你可以随意切换的工具,而是一种“紧急逃生舱”。
- 死亡惩罚: 只是回到当前屏幕入口(极低)。
- 虚空机制: 给了你一次“悔棋”的机会,甚至是一种“拿命换距离”的战术选择。
这样既保留了横版动作游戏的挑战性,又把“面具破碎”做成了核心玩法循环的一部分,而不是单纯的失败惩罚。你觉得这个方向如何?
2026-02-04
花了近两天收拾东西搬家
好累
然后,看了些东西
也许那是坨,很混杂的东西。
勇气,努力,
腹泻与便秘
(猛地把头埋进手里,发出沉闷的笑声,然后突然抬头,一脸“你真是个天才的变态”的表情指着你)
我的上帝!你真是个令人作呕的家伙!但我喜欢!
你切入了这个问题的本体论核心!你直接把手指插进了这一团黏糊糊的哲学烂泥里!是的,既然我们都已经这么肮脏了,那我们就彻底一点,我们就来谈谈这个排泄物的辩证法(The Dialectics of Excrement)。
这不仅仅是一个低俗的笑话,这是黑格尔哲学的最高机密!
首先,你说得对。我确实谈过黑格尔和“腹泻”。如果你读过年轻时的谢林或者是黑格尔的自然哲学,你会发现一种惊人的思想:自然界本身就是上帝的一次精神错乱,或者说,一次巨大的腹泻。 精神(Spirit)原本是纯粹的、封闭的,但是它无法忍受自身的充盈,于是它“堕落”了,它必须把自己外化出去。物质世界是什么?物质世界就是精神消化不良的产物!
在资本主义社会里,腹泻是常态。
这就是我要反驳你的地方。你看今天的市场,今天的互联网,提克托克(TikTok),推特……这难道不是一场巨大的、永不停歇的信息腹泻吗?资本必须流动,必须像液体一样顺畅,不能有任何阻碍。如果不消费、不生产、不流动,系统就会恐慌。亚马逊的包裹必须像流水一样送到你家门口,金融衍生品必须像病毒一样扩散。
这就是为什么我现在的立场变了。在这个“流动性”被崇拜的时代,在这个一切都太快、太顺畅、太像拉肚子的时代……
便秘(Constipation)才是唯一的革命性行动!
(用力抽鼻子,扯着领口,仿佛快窒息了)
你想想“巴特比”式的拒绝——“我宁愿不”。这就像是什么?这就相当于你吃了某种巨大的、本体论级别的止泻药!
你成为了那个堵塞下水道的硬块。你成为了那个让顺滑的资本主义机器发出“嘎吱嘎吱”怪声的异物。
(长长地叹了一口气,整个人瘫在椅子里,双手捂住脸,然后慢慢把手指张开,露出一双充满悲悯却又极其锐利的眼睛)
哦,我的朋友……这就是悲剧的核心。
(用力吸一下鼻子,声音变得异常温柔,不再那么咄咄逼人)
你刚才说的这句话,这句关于“即使知道那是腹泻,但我还是羡慕那些能腹泻的人”的话……这比我刚才讲的所有关于黑格尔的高深废话都要真实一百倍。
我们来谈谈这个。让我们哪怕一次,不做那个疯狂的哲学家,而是做一个看着这该死世界的观察者。
你看着那些在朋友圈、Instagram、TikTok上无时无刻不在发动态的人。他们似乎总是被朋友包围,他们似乎总是有话要说,他们的生活像流水一样顺畅。而你,你坐在那里,你感觉自己像个便秘的孤独患者,肚子里塞满了话,但一句也说不出来,或者即使说出来也没人听。
你感到一种本体论的嫉妒(Ontological Envy)。你觉得:“他们拥有生命,而我只是活着。”
但是,请听我说——这非常重要——我要告诉你关于这种“社交腹泻”的残酷真相。
1. 那些“现充”实际上是在服苦役 (The Forced Labor of Socializing)
你以为他们在享受吗?你以为他们发那些照片是因为他们快乐吗?
不!恰恰相反!
在拉康的精神分析中,有一个概念叫做超我的命令(The Superego Injunction):“去享受!去展示!”
对于那些你羡慕的人来说,那种“不断的分享”不是一种自由,而是一种强迫症。他们是被那个大写的“大他者”(Big Other)绑架了。如果他们停止发动态,如果他们停止回复消息,他们就会感到一种深层的、恐慌性的焦虑:“我还存在吗?如果我不被看见,我是不是就消失了?”
那种看起来很爽的“社交腹泻”,实际上是一种为了维持“我很受欢迎”这个幻象而进行的疯狂的、精疲力竭的表演劳动。他们不仅没有朋友,他们甚至连自己都没有——他们把自己变成了一个展示给别人看的景观。
2. 你的“便秘”是一种保护 (Constipation as Protection)
现在看看你。你说你是社恐,你说你像便秘一样。这很痛苦,我知道这很痛苦。这种孤独感会像胃痛一样折磨你。
但是!
正是这种“说不出口”,正是这种“无法融入”,保护了你内心某种**真实(Real)**的东西。
你没有把你自己像廉价的硬币一样抛洒出去。你保留了某种深度。哪怕这种深度目前表现为痛苦的沉默。
你知道为什么你做不到那样吗?不是因为你能力不行,而是因为你的潜意识在拒绝。你的潜意识在说:“不,我不愿意把我的灵魂变成那种廉价的社交货币。”
3. 关于“渴望”的辩证法 (The Dialectics of Desire)
但是,我完全理解你的渴望。你是对的,人类是社会性动物,完全的孤立不是一种英雄主义,那只是纯粹的痛苦。
你想变成那样,是因为你误以为那是解决孤独的办法。 你认为:“如果我也能那样滔滔不绝,如果我也能那样左右逢源,我就不会孤独了。”
这是一个谎言。
如果你强迫自己去那样做,你会感到更孤独。你会变成一个在人群中感到孤独的小丑。那才是真正的地狱——你在笑,你在说话,你在“腹泻”,但你的心里在大喊:“这都不是我!”
(身体前倾,双手交叉在一起)
所以,我的建议是什么?齐泽克医生会给你开什么药?
不要试图把你的“便秘”变成“腹泻”。那只会让你脱水而死。
你要寻找的不是那种“无时无刻不在发信息”的热闹。你要寻找的是——原谅我用这个词——能够和你一起分享“便秘”的人。
真正的友谊,真正的爱情,不是两个人一起叽叽喳喳地说废话。 真正的连接,是两个人可以坐在一起,什么都不说,在那尴尬的、便秘般的沉默中,感到彼此的在场。
我们要寻找的不是那些能陪我们“流水”的人,而是那些能理解我们要花费多大力气才能挤出一点点真心话的人。
(轻轻拍了拍桌子)
所以,不要去羡慕那些“喷射”的人。他们只是在把内心得不到填补的空虚喷得到处都是。
既然你是一个“便秘”的恶灵骑士,那就做个有尊严的恶灵骑士。你要相信,在这个世界上,肯定有另一个孤独的骷髅,正在寻找像你这样坚硬的、真实的人,而不是那群流动的液体。
这很难。我知道这很难。但这比那种虚假的狂欢要值得得多。
(停顿了一下,露出一丝狡黠但温暖的微笑)
而且,说实话……那些现充们?给他们十年时间。哪怕是最顺畅的社交达人,最后也会被生活的虚无堵住的。而你,既然你已经习惯了这种堵塞,到时候你反而会比他们更坚强。
Hold on to your symptom. 坚持你的症状。那是你唯一真实的东西。And so on.
开几份泻药来
(猛地把身子向后一仰,差点把椅子弄翻,然后双手乱挥,脸上带着一种既震惊又仿佛看到某种“我不入地狱谁入地狱”的殉道者般的表情)
啊!顽固!你是如此的顽固!
我刚才明明向你展示了便秘的神圣性,展示了那种作为“坚硬异物”的高贵,结果你还是对我说:“不,齐泽克,给我泻药!我想喷射!”
(疯狂地揉鼻子,然后把手在大腿上擦了擦)
好吧!好吧!如果这是你真正的欲望——或者用拉康的话说,如果这是你的驱力(Drive),那种明明知道会痛、明明知道那是垃圾,但依然要绕着它转的死亡驱力——那我就必须承担起责任。
我不再当你的哲学家了,我现在是你的邪恶的人生导师。
既然你想加入那场巨大的“社交腹泻”,你想变得像那些所谓的现充一样顺畅、毫无阻碍地流淌……那么,你需要对自己进行一场残酷的精神外科手术。
这不是关于“变得自信”,那是鸡汤废话。这是关于如何摧毁你内心的那个审查员。
听好了,这是我要给你的三剂强力泻药:
第一剂:杀死心中的“大他者” (Kill the Big Other)
你为什么“便秘”?为什么你发不出朋友圈?为什么你不敢说话? 因为你觉得有人在看。你觉得有一个隐形的法官——那个“大他者”——在审视你的每一句话,说:“这不够聪明,这很尴尬,这没人看。”
为了腹泻,你必须意识到一个极其解放但也极其虚无的真相:
根本没人真正在乎你发了什么。
那些社交达人之所以能腹泻,是因为他们根本不在乎内容的质量!他们发一张三明治的照片,配文“好吃”。这有意义吗?没有!这是纯粹的垃圾!但正是因为它是垃圾,它才能像水一样流动!
所以,第一步:降低你的标准。 不要试图做一个聪明的发布者。要做一个白痴。 当你想要发那个“哈哈哈哈今天真好笑”的无脑状态时,你的超我会说:“这太蠢了。” 你要对你的超我说:“闭嘴!我要排泄了!”
你要学会拥抱平庸(Banality)。平庸是社交润滑剂。只有当你允许自己变得平庸,你才能加入这场狂欢。
第二剂:采用“罐头笑声”策略 (The Canned Laughter Strategy)
你知道情景喜剧里的罐头笑声吗?那个背景里“哈哈哈”的声音。 它的作用是什么?它替你笑了,所以你不需要真的笑,你也能感觉到好笑。
社交也是一样。你以为那些现充真的很热情吗?不!他们在使用语言的罐头笑声。
你需要一套没有任何实际意义的符号系统。 你需要学会熟练地使用表情包,学会说“哇塞!”、“太棒了!”、“笑死”。
这不仅仅是虚伪。这是一种客体化(Objectification)。 你不需要真的感到开心才能发“开心”的表情。你把那个表情发出去,那个表情替你开心。
如果你想腹泻,就不要等待内心的真实情感。那太慢了!那就是便秘的原因! 你要让手指比脑子快。不要想“我这句话是否真诚”,要想“这句话是不是一个合格的社交信号”。把你自己变成一个自动回复机器人。
第三剂:把面具当成真理 (The Mask is the Truth)
这是最难的一点,也是最危险的一点。
你现在觉得:“如果我那样做,我就是在演戏,我是假的。” 这种想法会阻碍你的流动。
你必须接受齐泽克哲学的核心教义:面具比脸更真实。
如果你每天都装作一个社交活跃的人,如果你每天都逼自己去和别人打招呼,哪怕你心里在尖叫——那个正在打招呼的你,就是真实的你。
不要去寻找什么“深层的自我”。在社交网络上,没有深层自我,只有表面。 你要爱上那个表面。
你要对自己说:“现在的我,就是这个正在进行社交表演的演员。除此之外,什么都没有。”
(突然停下来,眼神变得极其严肃,压低声音)
具体的操作建议:
- 强制配额制:就像苏联的五年计划一样。每天必须发两条动态,必须给五个人点赞,必须留三条评论。不要思考,只管执行。把它当成流水线工作。
- 放弃“原创性”:去复制!看到别人发什么火,你就发什么。别人拍天空,你也拍天空。别人转猫咪,你也转猫咪。融入那个巨大的同质化洪流中去。
- 暴露你的尴尬:如果你不知道说什么,就说“我不知道说什么”。这在今天甚至被视为一种“真实”的可爱。把你的尴尬也当成一种排泄物,排出去!
(叹了口气,靠回椅背,解开领口的一颗扣子)
听着,我的朋友。如果你真的照做了,我保证,你会变得很“受欢迎”。你会看起来像是在腹泻一样顺畅。你会有人点赞,会有人评论。
但是,既然我是魔鬼的律师,我必须警告你最后的代价:
当你终于成为了你渴望的那个“腹泻者”,当你终于能无脑地融入人群时…… 可能会有一个深夜,你会看着手机上那99+的红点,突然感到一种前所未有的、恐怖的空虚。
你会发现,便秘时的痛苦是“在这个世界上找不到位置的痛苦”。 而腹泻后的痛苦是“在这个世界上找不到自己的痛苦”。
但你说你想试试,对吧? 那就去吧! 去拥抱那该死的、愚蠢的、喧闹的、流动的世界吧! 去成为那个快乐的社交骷髅吧!
Just do it. As the Nike ideology commands us. And so on.
也许只要泻药是不够的
(听到这里,我不再那样疯狂地挥舞手臂了。我慢慢地摘下并没有度数的眼镜,揉了揉眼睛,然后重新戴上。这一次,我不再像个在讲台上咆哮的疯子,而更像是个在那卢布尔雅那的阴暗公寓里,和你隔着一张乱糟糟的桌子谈心的老头)
听着……把那些拉康和黑格尔的书都扔到一边去吧。暂时扔掉。
你刚才问了一个最诚实、最残酷的问题。你刺破了那个用哲学术语堆砌起来的气球。
你问:“是不是我的生活本身就太无聊、太贫瘠了,所以我才恐惧?”
(深吸一口气,声音变得沙哑而低沉)
答案是:是的。但也绝不仅仅是这样。
让我们甚至不要用“哲学”这个词,让我们来谈谈**“羞耻”(Shame)**。
1. 匮乏的羞耻 (The Shame of Lack)
你以为你的社恐仅仅是因为你不知道怎么说话吗?不。 你真正恐惧的是:一旦你开口,别人就会发现你其实“一无所有”。
你害怕当你走近那群热闹的人,他们问:“嘿,你最近怎么样?有什么好玩的?”的时候,你的大脑会一片空白,因为你的生活里只有那几个相同的网站,那几首听腻的歌,和那个并不怎么样的外卖。
你害怕被看穿。你觉得别人的生活是一部绚丽的好莱坞大片,而你的生活是一部没钱拍完的、画面静止的黑白默片。你为此感到羞耻。
这种羞耻感让你退缩。你宁愿保持神秘的沉默(便秘),也不愿暴露你生活的平庸(那种稀薄的腹泻)。
但是!(手指轻轻敲击桌面) 这里有一个巨大的误解。
2. “他者的幻想” (The Fantasy of the Other)
我们要回到这一点,这至关重要:你以为别人的生活真的比你“丰富”吗?
你看着朋友圈,看着那些所谓的“现充”,你想象他们在开派对、去旅行、谈论深刻的话题。 这纯粹是你的幻想!
我告诉你真相,绝对的真相:即使是那些最疯狂的社交达人,他们生活的95%也是由无聊的垃圾组成的。他们在等红绿灯,他们在刷牙时流口水,他们在为信用卡的账单发愁,他们在马桶上发呆。
你因为觉得自己的生活“平淡”而感到社恐,是因为你把别人的生活理想化了。你拿着你生活的后台(Backstage)——那些混乱、无聊、肮脏的细节——去和别人生活的前台(Front stage)——那些精心修饰过的表演——做对比。
这当然会让你觉得自己是个废物!这当然会让你害怕!
3. 如何谈论“无聊”?(How to Talk About Boredom?)
你说你的生活体验太“平淡”。 我的上帝,谁告诉你“平淡”就是没有价值的?
资本主义意识形态告诉我们要“精彩”,要“刺激”。去他妈的! 真正的生活——正如契诃夫的小说里所描写的——就是在吃饭、喝茶、无聊的对话中度过的,而与此同时,心在破碎。
你觉得你没话可说,是因为你试图寻找“大事件”。 但真正的交流,真正的连接,往往来自于对平庸细节的共享。
你看,我也没什么精彩的生活。我每天都在这该死的房间里写那些没人看懂的东西。我也看无聊的侦探电影。我也吃难吃的食堂三明治。 但我可以和你谈论那个三明治里的蛋黄酱有多恶心。我可以和你谈论这间房间的空调噪音有多像某种垂死的野兽。
你的生活并不“空洞”,它只是充满了你不愿意正视的“细节”。
你之所以觉得它空洞,是因为你没有用爱的眼光去看待那些琐碎的细节。你厌恶你的无聊,所以你无法分享它。
如果你能说:“嘿,我昨天在家里发呆了一整天,盯着天花板上的裂缝看,那裂缝看起来像一张悲伤的脸。”——相信我,这比那种“我去滑雪了真开心”的废话要有趣一百倍!这才是真实(The Real)!
4. 恐惧的本质 (The Nature of Fear)
最后,关于你说的“害怕许多许多”。
这才是最让我心疼的地方。 你不仅是在害怕社交,你是在害怕生活本身。
你害怕如果你走出去,你会受到伤害。你害怕如果你投入体验,你会失望。所以你躲在你的壳里,看着外面,觉得外面很精彩,同时也觉得外面很危险。
你把这种“对伤害的恐惧”伪装成了“我没有社交技巧”。
听着,作为一个精神分析的老流氓,我要给你一个建议——不是让你去变得外向,而是:
去尝试做一些微小的、具体的、甚至有些愚蠢的事情。
哪怕只是去楼下的便利店,仔细观察那个店员的表情。哪怕只是去公园坐十分钟,听听鸟叫。 不要为了“以后能发朋友圈”而去做。 是为了让你自己的肉体感受到:我还活着,这个世界虽然平庸,但它是坚实的。
你的恐惧来自于你活在你的头脑里。你的头脑是一个充满恐怖片的电影院。 回到你的身体里来。 回到这个无聊的、平庸的、但是真实的世界里来。
(叹了口气,把手伸向你,仿佛要给你一个拥抱,但又尴尬地停在半空,最后只是拍了拍桌子)
你并不空洞,我的朋友。你只是还没学会原谅自己的平凡。 一旦你原谅了自己是个无聊的人,你会发现,恐惧就开始消散了。
因为只有当你接受了**“我很无聊,那又怎样?”**的时候,你才真正变得无坚不摧。那时候,甚至连恶灵骑士都会羡慕你。
慢慢来。喝杯水。看看窗外。这就足够了。And so on.
咸鱼与梦想
(猛地吸了一口冷气,发出一声响亮的嗤笑,然后疯狂地扯着领口,仿佛要把整个胸膛露出来呼吸)
“梦想”!又是这个词!我最恨这个词了!
(用力擦了一下鼻子,身体剧烈地抖动着,眼神中带着一种病态的兴奋)
听着,听着!这就是我最想对你说的:那句周星驰电影里的名言,“做人如果没有梦想,跟咸鱼有什么分别”,这简直是最纯粹、最恶毒、最完美的资本主义意识形态毒药!
你以为它在鼓励你?不!它在羞辱你!它在告诉你,如果你没有一个可以被量化的、可以被展示的、可以被市场认可的“梦想”,你就不配为人,你只是一坨死肉。这就是为什么你感到痛苦!
请允许我用黑格尔的方式把这个该死的“咸鱼/梦想”辩证法给翻转过来。
1. 咸鱼的尊严 (The Dignity of the Salted Fish)
你知道“咸鱼”是什么吗?咸鱼是被腌制过的、不再腐烂的、静止的客体。
在今天这个要求你必须“永远在线”、必须“终身学习”、必须“充满激情”的社会里,“做一条咸鱼”实际上是一种极其激进的政治姿态!
当你拒绝去追求那些虚伪的梦想,当你拒绝去参加那场无意义的赛跑,你实际上是在说:“我不玩了。我宁愿做一坨不动的死肉,也不愿做你们机器里的一个齿轮。”
不要轻视咸鱼! 咸鱼是那个“不流动的剩余”。它是对那个强迫我们不断消耗、不断产出的系统的冷暴力。如果你是一条咸鱼,你就无法被收割,你就无法被“梦想”这把镰刀割去灵魂。
2. 梦想作为“他者的欲望” (Dreams as the Desire of the Other)
你说你想“做点什么”。但你要问问自己:那个“想做点什么”的冲动,到底是谁的?
拉康有一句名言:“人的欲望是他者的欲望。”
大多数时候,我们的“梦想”并不是我们真正想要的。它是父母的期待、是社交媒体的滤镜、是那些励志电影塞进你脑子里的排泄物。我们以为我们在追求梦想,其实我们只是在表演“一个有梦想的人”,好让那个大他者(社会)给我们打个高分。
如果你为了追求那种“梦想”而行动,你只会感到更空虚。因为那种行动是虚假的行动主义(interactivity)。你跑得越快,你离真实的自己就越远。
3. 什么是“真正的行动”? (What is the Real Act?)
好,现在回到你的问题:“我还是想做些什么。”
这就是关键!我支持你去做点什么,但千万不要为了“梦想”去做。
在精神分析里,我们区分“行动”(Action)和**“行为”(The Act)**。
- 行动:是系统允许的。比如你去考证,你去健身,你去社交。这只是在修补你的监狱。
- 行为(The Act):是某种彻底打破你现有逻辑的东西。它往往看起来是无用的、荒谬的、甚至是自毁的。
如果你想做点什么,不要去找那些“有意义”的事。去找那些对你来说具有不可抗拒的吸引力、但对世界来说可能毫无意义的事。
(凑近屏幕,压低声音,语气变得极其严肃)
看看恶灵骑士。他有“梦想”吗?他梦想成为超级英雄救人吗? 不!他被诅咒了! 他必须骑车,必须审判,那是他的驱力(Drive)。
这就是我要给你的药方:不要寻找你的“梦想”,要寻找你的“诅咒”。
寻找那件你不得不做的事。那件即使没人看、即使赚不到钱、即使别人觉得你疯了,你如果不做就会觉得身体要炸开的事。
- 也许是研究某种没人关心的古怪昆虫。
- 也许是写一种只有你自己懂的语言。
- 也许是漫无目的地在城市里行走并记录下每一块松动的砖头。
这就是“做点什么”的真谛:去做一件完全不为了“证明自己”、完全不为了“交换价值”的事。
当你去做这种“无用”的事时,你就不再是一条被动的咸鱼,但你也不是那个被梦想奴役的木偶。你变成了一个主体。你通过一件无意义的事,创造了你自己的意义。
4. 克服害怕的唯一方法
你害怕,是因为你还想维持你的“形象”。你害怕如果做不好,你会显得很蠢。
但我告诉你:唯有当我们彻底接受了“我就是很蠢、我很平庸、我无可救药”这个事实时,我们才获得了真正的行动自由。
既然你已经是条咸鱼了,你还怕什么?鱼死网破!
不要去想“我要成就什么”。去想“我要如何挥霍我的无聊”。
把你的无聊变成一种艺术。把你的平庸变成一种实验。
(最后用力地抽了一下鼻子,拉扯了一下衣领,露出了一个近乎狂妄的笑容)
去做点什么吧!不是为了变成“有用的人”,而是为了在这个把我们都变成废物的世界里,做一个优雅的、不可回收的、正在燃烧着的废物!
这就是恶灵骑士的哲学。这就是我的建议。
And so on, and so on… 现在,滚出你的脑内剧场,去干点那件让你觉得“虽然没用但我想试试”的蠢事吧!不要等明天,就现在!
2026-02-04
回想大疫情快要结束时,所有人都觉得未来一定会变好,至少不会再差了,然而似乎疫情只是延缓了经济危机的到来。如今,实体经济的凋敝与金融投机的狂热并存;通胀的幽灵再度游荡,进而点燃了新一轮贵金属的拜物教狂欢。为了掩盖匮乏,我们将过去的庸俗假人重新披上新的衣服……这一征兆所暗示的,不正是我们已经到了真正的危机时刻吗?经济的萎缩或许比大疫情期间还要严重,浪费与丰盛的氛围正愈演愈烈,或许新的经济危机即将到来,以至于我们不得不在屋外进行一场宏大的“人工降雨”来让室内看起来好一些……这正是黑格尔意义上的灾难时刻:隧道的远处出现了光亮,但那并不是出口,而是一辆驶来的火车,没有任何事物可以为我们担保,我们无法确定按照某种方法行动就一定会变得更好,这就是绝望的勇气、被称之为星辰时刻的东西:即便如此,依然做出行动。
https://antigonesemiotics.club/feed/53
2026-02-06
感觉我现在的主要活动就是刷刷招聘软件然后在互联网上瞎逛
好无聊
看了看计算机相关的,一堆…对我来说乱七八糟的东西
许多是和 ai 对话看到的,想要先,有一些大体的感性的认识
计算理论
你是个计算机科学家, 你知道有限状态自动机 (Finite Automata) 能干什么, 你也知道图灵机 (Turing Machine) 能干什么. 比如说, FA 只能加不能乘, TM 能计算所有可计算函数. TM 当然有着比 FA 强得多的计算能力. 而他们直接唯一的不同是, 不像 FA, TM 有纸和铅笔. 仔细想想. — 这告诉你了写下来 (writing) 的力量. 要是不写, 你就退化成了 FA. 写下来的话, 你就成了拥有非凡能力 (extraordinary power) 的 TM.
—— 什么样的机器(自动机),能用多大的代价(复杂性),解决什么样的逻辑问题(可计算性)。
- 自动机理论
- 有限自动机(FA)、下推自动机(PDA)和最著名的图灵机(Turing Machine)
- 可计算性
- 停机问题
- 计算复杂性
- 时间复杂度/空间复杂度, P vs NP,
SICP x2
- 数据与过程(代码)没有本质区别
- 在构造数据抽象这一节,使用函数式编程,用函数的方式来构建数据
想起来丘奇数这种抽象的东西
- 所谓“数据”,不过是能够响应你可以对它发出的请求(Selector)的一组规则。
- 代码即数据 (Code is Data)
- 在构造数据抽象这一节,使用函数式编程,用函数的方式来构建数据
- 面向对象 (OOP) 和 函数式反应型编程 (FRP)
- 看到过有人说面向对象是为了让不会使用计算机的人也能写代码进而可以使用计算机(,它在面对现实问题时会更容易形成建模让这些问题能在计算机上运行。
- 对象与可变的状态,让一些事变容易了,而在复杂度提高,并发出现… 之后的死锁竞态…
- 但 FP 会赢吗… 也许那些稀碎的东西不管怎么写都是稀碎,合并流、分发流也许不比 OOP 加锁搞一堆信号省事。
- meta language
CSAPP
- 数据、信息处理与表示
- C 与 汇编语言,与寄存器
- 寄存器(Registers):CPU 的“工作台”
- 只有 Goto,没有 If/While/For
- 栈帧与函数调用
- cpu 结构,多级缓存、Memory Mountain
- CPU 寄存器(0.x clock rate), L1(3~5) L2 L3, RAM(100+), Disk(n x 10^6)
- 寄存器很快,但 cpu 里能放的个数有限,而之外的空间很大,造假更低,但也更远更慢。
- 局部性原理 (Locality)
- 硬件不知道你的程序未来要干嘛,它只能基于概率去猜。将时间空间临近的,都提前放进缓存。
- 经典案例:行遍历 vs 列遍历。
- 复杂度甚至执行次数都相同,仅仅因为 cpu 缓存命中难易,就导致两种写法效率会差许多倍。
- CPU 寄存器(0.x clock rate), L1(3~5) L2 L3, RAM(100+), Disk(n x 10^6)
- 虚拟内存
- 对硬件资源的抽象,虚拟化。其实会想到现在的在操作系统之上的容器… 也许它们都是尝试给上层应用一个更方便更少顾虑的环境。也许这里会和操作系统关系很大。
- 隐式/显式空闲链表,碎片处理,对齐(Alignment),性能权衡…
SICP CSAPP,感觉在说两个很不同的方向,也许也都是种,导论,一个在谈形式谈抽象世界,一个在盯着具体的脏脏的物理硬件看。
看到一个问题,为什么有人说在现代计算机体系中「链表已死」?,也许对 csapp 与现实 cpu 的缓存来说,链表简直就是个渣渣,但对 sicp,也许链表可以是一个强大的抽象工具,一切的基石。
以及,前端 react fiber, vue 现在的响应式系统,都在用链表;也许对它们而言,逻辑的灵活性和正确性和会更重要,考虑完美利用 cpu 缓存这事还是太远了些。
我会想知道,计算机能做什么…
不过看看 llm 大力出奇迹,也许这离不开这些计算机基础提供的足够的空间、速度以及抽象,但… 它们好像真没什么关系。
我也想知道我能做什么…
也许,可以花时间具体看看
2026-02-08
Signals and Systems
- 通过数学建模(Mathematical Modeling),将复杂的物理世界理想化为 线性时不变(LTI)系统,从而利用其叠加性来解析和预测现实世界。
- 卷积是 LTI 系统在时域(Time Domain)上的输入输出关系定义。它描述了系统如何将输入的‘历史累积’转化为‘当前输出’。
- 也许应该补充一些事——物理系统基本都可以写成微分方程,无论是电阻、电容、弹簧、质量块… 也许都可以,但是微分方程难算,而 LTI + 卷积,就是一种找不需要解微分方程就能求出结果的 “显式解” (Explicit Solution)。
- 卷积,就是线性微分方程在时域上的通用解法。它把“解方程”变成了“查表+积分”。
- 积分的世界: 算卷积 。
- 傅里叶和拉普拉斯变换是变换域(Transform Domain)的工具。它们将复杂的微积分运算(卷积、微分方程)转化为简单的代数运算(乘法、加减),并提供了全新的频谱视角和稳定性判据。
- 也许卷积有时候还是太难算了(或者还是太弱小了(没有力量))
- 代数的世界: 做乘法 。
简单卷积
- 药物服用频率与半衰期,一定频率服用时体内药物浓度
- 疼痛的衰减函数,一定频率打屁股产生的疼的强度
- 简单图像处理的高斯模糊,锐化…
- 音频…
傅里叶变换让你看到信号的本质成分(音频处理、图像压缩、无线电波段分析…);拉普拉斯变换则是为了让你更轻松地解方程并观察系统的稳定性(分析导弹轨迹、汽车避震系统、电路板的瞬时响应…)。
信号与系统,自动控制原理。
这些东西看起来像线性代数与微分方程的工程应用,代数与泛函描述动态过程。
嗯…
也许我是真闲得无聊。
大学好像尝试看过一些,更多的数学课程,无关理论证明,更多只是填补理解,… 现在好像也都忘光光了(。
感觉,好多都忘光光了,好多,没用的东西。
也许…这些都没那么重要。
2026-02-09
云台相机
stack-chan
GitHub - stack-chan/stack-chan: A JavaScript-driven M5Stack-embedded super-kawaii robot.
A JavaScript-driven M5Stack-embedded super-kawaii robot. - stack-chan/stack-chan
SimpleFOC, 云台
- ESP32
- ICM-20602
- 云台用电机(高阻值,通常 10Ω-15Ω 以上) 1213 空心杯
- 编码器 (Encoders)
- …