2025-11-18 21:47:00
看到网上很多人都在用AI干大活儿了,我也开始搓了,vibe coding对我这种人菜瘾大的人很友好,自己懒得写就交给AI写。
13年前就有一个想法,做一个在线词典。那个时候还打算白嫖 RedHat 免费的OpenShift。
为什么要做在线词典呢?当时是眼红 Google Dictionary 觉得它什么都好。但就是需要翻墙,而且有一定几率查不出来,所以想做个镜像把它常用词都拉下来存起来。
当然这个想法无可争议的烂尾了。
一直到2023年,ChatGPT出来之后,发现大语言模型这玩意外语天才啊,用来写词典再好不过了。
说起来,英语的 Dictionary 实际出现时间很晚,比《永乐大典》都晚了它妈的至少200多年,因为英语作为一个拼音语言书写统一(正字法)都是很近代的时候才被行政力量推行的。英语在大部分时间里都是被日耳曼蛮子和高卢蛮子看不起的一个小岛口音。
英语词典的发明,是作为乡绅和学者随手一查拿来装逼的,并不是给初学者、外语学习者、特别是中文背景的ESL学生设计的
词典被当成「语法翻译法」的核心工具,其根本原因是印欧语系的语法、词源都能找到共通的联系。而这一套工具本来是贵族用来训练自己的继承子女去学习古希腊语和拉丁语用的。
当讲汉话写中文背景的家长、老师给娃讲英语的时候,就会遇到各种困难或者犯各种啼笑皆非的笑话。
所以想起来通过 ChatGPT 和类似技术做一套「英语」。当时我列举的愿景有:
特别是第五点,过去的词典因为印刷和编辑成本很少这样做,现在电子产品完全有能力生成和遍历所有排列组合。
突破「词典」的固有形态,做一个「英语」的说明书
开始搓这个词典,我也看了下其他在线词典的问题:
搓的时候也陆陆续续解决了一些始料未及的问题:
本来想一个静态页面 .html 放在 Github Pages 万事,结果搓了一套mini后端。
最后成果放在 https://def.est.im/ 。还有很多待完善。当前版本我满意的就是在单独的释义下面放了 同义词 反义词,比混在一起方便清晰得多。
以前纸质的词典把大段意思混杂在一起排版,各种缩写代码人看了都头大,Web时代就应该有更清晰的排版。(虽然我现在的排版也很欠缺)
2025-10-18 21:35:00
每次在一个网页里, F12 或 Cmd+Opt+I 最痛苦的是什么?
/favicon.ico:1 GET favicon.ico 404 (Not Found)
简直逼死强迫症~前段时间折腾SVG,觉得用 xml 写一组 favicon.svg 或许不错。今天撸AI它丫的直接给我个最粗暴简单的:
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://w3.org/2000/svg' viewBox='0 0 19 19'><text y=16>🤣</text></svg>">
预览一下这个SVG:
精简的地方:
1. www.w3.org 去掉 www
2. y=16去掉引号
3. viewBox 为19而 y=16 是因为该死的拉丁字母显示有个 baseline 问题。随便调整下懒得管了。
4. 节约了 font-size="16" 因为 默认就16px
直接用 emoji 作为 favicon。我贴这个版本应该是全网最精简最易读的,挑战有没有大神能进一步缩短这个 favicon 写法。
2025-10-15 21:25:00
回家路上听了个 1小时30分的 podcast ,采访 Hinton 的:
Godfather of AI: They Keep Silencing Me But I’m Trying to Warn Them!
有些亮点,通过这个该死的 transcript API www.youtube.com/youtubei/v1/get_transcript 把JSON搞了下来,然后通过这个恶心的脚本解析成 全文 文本:
with open('stdin-10-01.txt','w') as f: f.write('\n'.join([t['text'] for x in a['actions'][0]['updateEngagementPanelAction']['content']['transcriptRenderer']['content']['transcriptSearchPanelRenderer']['body']['transcriptSegmentListRenderer']['initialSegments'] if (v := x.get('transcriptSegmentRenderer')) for t in v['snippet']['runs']]))
他提到 “AI的危险” 分为两个层面
他说这个 超级智能 是他在Google工作10年间发现的,Google曾经一度尝试制造“模拟电路”代替数字电路来更加逼真拟合人脑,但是他发现 数字 AI更具有竞争力。因为同样的算法和权重,你换一套硬件,也能复现它的能力。你换一个时间、换一个国家,也能差不多复制这个能力。数字化带来一个很恐怖的能力就是低成本迁移学习。一个模型吃掉另一个模型,近乎等于把权重拷贝过来然后求平均一下。要强化某一方面能力,就针对那部分权重做SFT。
数字模型的这一特点直接秒杀了人类。人类就算科技再发达,你能不能把另一个脑袋劈开,看看它神经元怎么连接的,然后复制到自己的大脑里呢?
When you and I transfer information, we're limited to the amount of information in a sentence. And the amount of information in a sentence is maybe a 100 bits. It's very little information. We're lucky if we're transferring like 10 bits a second.
These things are transferring trillions of bits a second. So, they're billions of times better than us at sharing information. And that's because they're digital. And you can have two bits of hardware using the connection strengths in exactly the same way.
We're analog and you can't do that. Your brain's different from my brain. And if I could see the connection strengths between all your neurons, it wouldn't do me any good because my neurons work slightly differently and they're connected up slightly differently. So when you die, all your knowledge dies with you.
他进而得到一个推论,因为模型和模型之间相互学习,相互蒸馏没,那就是数字AI几乎是永生的。。。。
我尼玛。。。这。。。洞大开啊。
他接着又说,为啥 superintelligence 肯定比人类更聪明,他举的例子是,在 gpt4 不能联网的时候,他问, 增肥堆(compost heap)和原子弹有啥相似之处?
答案我就不贴了。有兴趣的可以看原视频 59:00 或者 Ctr+F 我摘的原文。但是注意力结构天生就可以把各种事物的相似之处,转换成类似的 analogy,这样才能压缩信息,才能计算。AI 学习的材料比人类多得多,肯定懂得更多,交叉学科最能创新,所以AI肯定特别能创新
这个访谈又说到 Ilya 在做的 super alignment ,超级对齐,我倒是觉得吧,做模型安全只是一个幌子,Ilya 多半是发现了 AI很容易胡诌“you are absolutely right”,但是如果人类知识本来就是自相矛盾的怎么办?它这个 align 的恐怕不是AI,而是从 metaphysics 对全人类智慧进行归一、一致性的梳理。类似集合论,公理系统和希尔伯特那种地基类的工作。这样的AI训练出来恐怕非常无敌。如果拿来反人类岂不是更可怕?从法统和道统上碳基已死,硅基当立了。。人类怕不是减碳把自己给减没了。2333
回到标题,教育的本质是什么?
教育可以从很多人文,历史,社会等太多方面分析,甚至我见过最天方夜谭的理由是,孩子接受教育是因为工业革命之后,双亲被迫投入全职劳动,不得不设立k12公共教育来集体训练孩子。哈哈哈
Hinton 自称唯物主义(materialism)者,给了我一个晴天霹雳,所谓的教育,就是属于不同肉体长得完全不同的大脑,通过10bit/s 的带宽同步数据 😂
一切都豁然开朗了。那种 “醍醐灌顶” 是不是就是高压缩 .7z 给你当头棒喝?
从唯物的角度来说,谁能高带宽不丢包把数据同步好,谁就是最好的教育。
2025-10-11 15:23:00
国内很多人说两句话就能检测 gzip 炸弹,我翻了一下大概是这样
import gzip
import io
import requests
resp = requests.get(url, stream=True)
decompressed = resp.raw.read()
with gzip.open(io.BytesIO(decompressed), 'rb') as g:
g.seek(0, 2)
origin_size = g.tell()
print(origin_size)
跟 gzip -l xxx.gz
类似,原理是gzip格式在尾部8字节保存了 [CRC32][ISIZE]
,其中 ISIZE = uncompressed_length % 2³²
要反制这个检测很easy嘛,直接返回 Content-Encoding: deflate
不就行了?
况且,我搜了下,ISIZE是可以改的。。。所以更好的办法是:
import zlib
MAX_OUTPUT = 50 * 1024 * 1024 # 50 MB cap
def safe_decompress_gzip_stream(compressed_iterable):
# compressed_iterable yields bytes chunks from incoming request body
d = zlib.decompressobj(16 + zlib.MAX_WBITS) # 16+ for gzip wrapper
total_out = 0
for chunk in compressed_iterable:
out = d.decompress(chunk, 64*1024) # limit per-call output
total_out += len(out)
if total_out > MAX_OUTPUT:
raise ValueError("Exceeded decompression limit")
yield out
# flush remaining
out = d.flush()
total_out += len(out)
if total_out > MAX_OUTPUT:
raise ValueError("Exceeded decompression limit")
if out:
yield out
终归来说,gzip炸的都是内存。我在想,能不能利用LZ77反复横跳,做一个CPU炸弹呢?
比如解压个半天,发现结果是个 1KB 的小文件?压缩率高达 114514% ?
ChatGPT 居然拒绝回答了。但是指了个路:
Many tiny dynamic-Huffman blocks so the decoder rebuilds trees repeatedly (parsing overhead per block).
Constructing distance/length sequences that cause a lot of back-reference copying (expensive repeated copies, especially with overlapping distances).
Interleaving short literal runs with copies to create branch-heavy decode work.
Using many concatenated members/streams (or nested archives) to multiply cost.
OpenAI 真猥琐啊。
2025-10-09 14:49:00
最近又刷到 RSS的一些讨论,然后又说起 Google Reader 这个陈年往事。
Google Reader是谁杀死的呢?准确的说是个三哥 Vic Gundotra。默许这件事的是女高管 Marissa Mayer。(Mayer 后来去 Yahoo 当了CEO,干得最牛逼的事儿就是收购了 Tumblr,后来还有更抽象的从 teen 手上买了一套 Summly)
Mayer这名字让我想起之前看有本讲netflix的书提到过,是OKR推崇者。所以杀死Google Reader的凶器是 不是OKR或者launch culture呢?
我决定探究一下 OKR 的由来。这玩意的鼓吹群体,最后都指向 Intel出身的风投 John Doerr,他写了一本书叫 《Measure What Matters》,书其实不用看了,直接去他家官网,3分钟就能了解OKR的核心理念:
https://www.whatmatters.com/resources/a-typical-okr-cycle
我之前也经历过OKR,再次看这个东西有一些不同的感触:
OKR这一套的的祖师爷 是Intel 老总,匈牙利Holocaust难民 Andy Grove 。我看了下其实老爷子没把这一套说得那么玄乎,就是 8085 处理器当年需要每个季度出货,就搞了一套分摊生产的机制。这也解释了为啥OKR往往都是年度、季度为单位的。因为财报也是这个节奏嘛。他举例说,O是Intel芯片占领中端市场,那么KR就是8085 处理器 10个 新设计。我寻思这也不能必然支撑“占领”这一目标啊?万一市场不认帐怎么办?老爷子又说了,KR可以是 milestone,这一波不行下一波继续加码不就行了🤣 主要是“占领”这一说法是可以argue的,但是10个就是10个,结果只会是达成是否yes/no,可以 measure 的。
这篇讲OKR渊源的文章里,有一句话说得特别好
OKRs overturned the top-down management system. Suddenly, workers were valued by what they accomplished, not by their background, degree, or title. With OKRs, execution is more important than mere ideas,
OKR改变了人们马首是瞻的管理模式。员工的价值衡量以完成目标为准,而不再是背景、学历、职衔。OKR体系下,执行比畅想更重要。
那么话说回来,为啥OKR 杀死了 Google Reader?
因为 Larry Page 给全公司定的 O 是:亿级用户用户,越多越好。要做 google-scale 的产品
Google Reader受众是一小撮核心用户,虽然 engage 很高频,但是小众爱好的增长就是慢。当年 Google+ 势头被三哥吹上天,显然更有前途。Marissa Mayer是G家老人了(工号#20) 做 OKR 有一手,Google Reader显然是一个 business-as-usual 成熟产品了,所以开发团队都被挪用了,人都跑光了,据说它代码还不能跑在新款Google软件架构上(borg之类的),所以越来越没人关心。因为没人能靠Google Reader升职加薪,所以成了弃子。
说 OKR 🔪 了 Google Reader ,不是说 OKR不好,而是OKR作为一个框架,一套工具,它是中立的。
OKRs help you hit every target — except the one that matters.
OKR确保你命中目标,至于是不是重要目标就不得而知了
或许Google Reader真的对于Google不重要。但是反过来,没有 Google Reader 真的对Google那么重要吗?G家还做了那么多 arts project 怎么就不砍掉呢?
所以我琢磨下来,OKR这套工具,在蓝海市场,销售向的行业里是非常有用的。它能聚焦业务,保持各团队对齐,排查执行环节问题是非常有效的
但前提是,你只缺执行吗?
另一个方面,对于 SRE 安全这类部门来说,它们的成功不在于本部门 执行有多好,而是在于其他部门的「下限」有多烂。有哪个敢给自己定一个全年100%不出漏洞不出问题的O?
这类 support, maintanence 和 backoffice 部门,本来就就是降低负收益,处理烂摊子的,它们存在的意义,就是把公司的潜在损失尽可能降低到最小
这个出发点来说,是不是应该把OKR设置成默认 -1.0 分,然后擦屁股得越干净越好?
胡思乱想又水了一篇,大家别当真
2025-10-09 10:30:00
I had a painful slow game load experience during the past few days. In the beginning, I tried everything I can to tweak the Win10 system, cleanup the PC box, but the disk IO was always pegging at 2MB/s to 5MB/s at taskmgr.exe.
The real culprit? The WD ssd I bought some years ago. Turns out if the data was old enough, the firmware had real trouble recognizing the volatile bits and throttles the throughput.
The fix? read the file again and write them back. Since my disk is almost full (another reason here), a inline replace would be prefered.
I spent next few hours vibe coding an HTML5 utility
https://lab.est.im/ssd-warmup/
The code works as intended, however the File System API in Javascript writes a .crswap file instead of the original.
It's a Chromium thing thus makes the JS method completely useless.
I wrote a Python version instead.
https://github.com/est/snippets/blob/master/ssd-warmup/ssd_warmup.py
The AI wrote code using os.path.walk
and I changed it with pathlib.Path
, which was more pleasant with its rglob
method.
You can try it:
python ssd_warmup.py /path/to/fix/
The lesson learned: Don't buy Sandick or WestData. At least the low-end ones.