This blog is rated 🔞, viewer discretion is advised

影视飓风和小米

觉得最近Tim和军儿都着了道了,两个同样都是内容创作者,关注度较高,最近都被“舆论”冲击。为他们可惜。

一开始我不太明白,为啥会有那么极端的傻逼莫名其妙的把原视频曲解成那样?影视飓风这个澄清印证了,这些hater其实本来就拒绝看原视频,它们出于本能的讨厌会加倍传播“掐头去尾”的误解。

上学的时候,注意力涣散和理解偏差的人被认为是“差生”,对个体的人为的分类和教正,在强调“公平”的成年人社会是反过来的。老师给「听众」贴标签的权利是学校赋予的,脱离校园进入社会,是听众给「老师」打分。

平台和舆论很傻逼怎么办?没办法。傻逼的共识也是共识。

网上有句笑谈,傻逼是优质国家资产。启蒙傻逼犯罪。所以,国家需要保护傻逼。作为个体,最优解是想办法盘活这个资产并最大化的从资产身上得到收益;对于Tim和军儿,他们需要处理这部分负资产。

舆论风险不是公平的,谁不掌握言论的「防卫权」,谁就是被审判的人。突然想起来,Elon Musk这招才是绝杀。democrats 当年那个呼风唤雨,直接把 TWTR 买了。甚至都不用删号,直接后台凝视,这些矩阵号都不敢乱来了。

矩阵号,切片传播是不是要故意恶心人呢?在赞美和诋毁之间,它们选择了起号。在输和赢之间它们选择了流量最大的打法。捕风捉影是基操。

军儿本来手上是有“米聊”之类的社交牌的,他自己放弃了。金山、小米都是千亿市值的企业,每年出一点养老的钱维护个app有那么难?

回忆起来,我也一度非常想创业做社交,大部分人都反对,理由担忧监管压力,运营风险。

是的,他们说得没错。现在也看明白了,你不承风险,风险就跑到别的平台上蛐蛐你。

另一方面,这也解释了为什么现在很多 podcast 话题尺度比较大。因为没法截图断章取义。只能一段一段听完。

Posted

stderr

套 Cloudflare Warp 解决IP送中

缘起

网上很多套Cloudflare教程,但是大多数都是在前置作为反向代理,CF的IP如果不挑选,则喜提“减速乐”

我这边的情况是该死的 Google 把我IP送中了,打死不提供 gemini 服务,为了解决锁区问题,本来以为简单用一下 Cloudflare Warp 就行,没想到是个大坑。花了好几天研究。

核心问题是, warp-cli connect 之后就失联了,ssh 都连不上。

warp-cli 网上很多教程都过时了。它命令行改版了。最简单的 warp-cli mode 其实官方教程都不全,它的 warpwarp+ ,改成 tunnel_only 还是不行。寄希望于 proxy 模式,官方博客说 "use the proxy (HTTPS or SOCKS5)",我实际测试,这个默认端口 40000 都是拼凑搜出来的。 然而我打死也没测试成功如何用 HTTP_PROXY 。AI 说只有 win/mac 的桌面版本支持?wtf。

CF一键脚本

没有希望,看下别人怎么解决的,大神给出的解是 一键脚本。

Cloudflare WARP 多功能一键脚本,支持纯IPV4/纯IPV6/双栈V4V6的VPS共9种情况随意切换安装,screen一键手动/自动刷新支持Netflix奈飞的IP(自动识别WGCF与SOCKS5环境,自定义刷新奈飞IP的时间段间隔,自定义奈飞区域国家,自定义仅刷区域国家),支持升级WARP+及Teams账户。

搜到最早的出处应该是 p3terx 的。但是这种一键脚本我都不太敢用,万一写个什么后门之类的你怎么知道。

大概读了下,会执行下面的脚本:

  • curl -fsSL git.io/wgcf.sh
  • curl -fsSL git.io/wireguard-go.sh

git.io 是个第三方短链服务,可能会看人下菜碟?怕怕

看了半天发现回到原点,核心原理还是proxy然后socks5。或者把 wireguard 配置提取出来自己配路由

有没有什么不用第三方复杂配置,用官方的 warp-cli 但是保留几个tcp端口可用呢?

研究

于是同 ChatGPT、gemini 两位老师向 Linux 网络栈 展开了斗智斗勇。真是苦啊。需要在 warp 生效的时候测试不同的方法,就在那个贼难用的 noVNC html5 based VNC client 里一行一行代码试出来的

得到了以下宝贵教训:

  1. iptables 老早就过时了。现在的 iptables 实际上是 nf-tables 的马甲!吃了大亏!翻来覆去在错误的地方检查,AI也不提醒我一下
  2. ip route 路由也不是全部,其实还有 policy based routing 叫 ip rule

其中 warp-cli 会创建一个叫 cloudflare-warp 的 nft,还有一个叫 CloudflareWARP 的 dev。然后在 ip rule 里会添加一条

32765: not from all fwmark 0x100cf lookup 65743

这里学到几个冷知识:

  1. 前面的 32765 是优先级,越低越优先,命令行里可以写成 priority 32765 或者 pref 32765 一回事
  2. 后面的 65743 是内核里的table,可以在 /etc/iproute2/rt_tables 定义一套alias

耍聪明把INPUT流量标记一个 0x100cf 是不行的。以为是配置问题用 tcpdump 发现甚至只有 SYN 包。后来才知道去折腾 nf-tables。

如何给全局 warp 开一个端口

  1. echo "200 inbound" | sudo tee -a /etc/iproute2/rt_tables 或者这一步不做也行,后面所有的 inbound 都替换成 200 就行
  2. sudo ip route add default dev eth0 scope link table inbound 这个是因为我VPS是on-link的。如果是实体 dev 自己换下
  3. 连接 warp-cli connect 这玩意会在所有自定义 ip rule add 前面加一条策略所以记得先连,再加自己的策略
  4. sudo ip rule add from all sport 6666 lookup inbound pref 500 这里的 500必须比默认的 32765 低。所以要先连上 warp
  5. sudo nft insert rule inet cloudflare-warp input tcp dport 6666 accept 入站 接受
  6. sudo nft insert rule inet cloudflare-warp output tcp sport 6666 accept 出站 接受

因为步骤3 执行之后你ssh就掉了,记得做成一个 .sh 脚本。。。

然后每次断开连接 warp-cli disconnet 之后,记得删除第4步里创建的

sudo ip rule del pref 500

否则的话,该死的 warp-cli connect 会创建一个 pref 499 在你前面卡位!

测试

curl -sk https://www.cloudflare.com/cdn-cgi/trace

折腾结束。这应该是全网第一个不动官方 warp-cli 能开端口的方法。

Posted

stdout

学习的方法论

前段时间记录了下 Hinton 一句话总结了教育的本质,有朋友看后说,你这个太幼稚

教育怎么会仅仅是传输,是灌输呢?他说,教育的内涵是建立一套世界观,是一个彼岸。在这个世界里,包含你在成年生活中可能用到的一切知识,有深度,也有广度。你需要去感知、去理解、去体会。

人又不是机器,有主观能动性,所以教育绝不是被动接受数据就完事。教育提供的是一种能力,让后人能够不断超越前人。

面对这浓浓鸡汤味的一番道理,我觉得道理也没错。于是我突发奇想问:“教育,是不是就好比给孩子装一套操作系统?”

朋友懵逼了一会儿。我又接着问:“如果用 10B/s,比软盘还慢的外设来装系统,你不会觉得痛苦吗?”

朋友半天只回了一个:“……”

虽然这个比喻是灵机一动,但人生确实需要安装太多驱动。经典的“学好数理化”就是理工科的内核。而当你真正脱离父母、走出学校时,你还会发现人际交往的 IO 才是最麻烦的驱动。

我还特意在网上搜集了一些类似的陈词滥调:

  • 教育的本质,是对“人”的教育,而非对“任务”的完成。
  • 最有效的教育,永远发生在良好的关系之中。在学校,就是师生关系;在家里,就是亲子关系。
  • 教育的本质是培养能力。应试教育的本质是筛选,而不是培养能力。
  • 教育是上层建筑
  • 苏格拉底:教育的真谛不是灌输而是点燃,一万次灌输不如一次真正的唤醒
  • 知识还在生长过程中时,我们就已经接触到了,我们需要了解它,但了解到的也不是最终的结果。世界和社会变化太快

抛开教育是什么不谈,只说教育的缺点,我看是时效性问题。浪费很多时间学习过时的东西。前段时间我SO在考一个证,习题反复出现的一个考察知识点,数字信息有哪些存储媒介?答案:硬盘软盘,还行;光盘,可以接受;集成电路卡,这……是什么鬼?

我想起来中学还学过Flash。虽然我一直认为Flash技术很先进,但这个技术栈还是避免不了没落。大学有朋友还深入研究过 ASP.NET Atlas技术,后来却被 AJAX 无情地抛弃。很多东西,往往两三年就过时了。

无论你把教育当作安装操作体系,还是世界观和认知,或是什么人文 科学,教育的瓶颈已经凸显了——你都只有 10B/s 的带宽来进行同步。而且在学前教育 义务教育 K12 高等教育里,还存在大量浪费的无用甚至负用教育。

按我说,教育就应该这么办:

  1. 做一套最小规模的 bootstrap
  2. 以压缩技术为突破口
  3. 想一切办法学习带宽

教育说完了,说说学习。

这几天恰好跟娃的成绩着急,前面讲的,后面就忘了。本来白天上班就够焦虑了,晚上给人整崩溃。

恰好刷到别人转的 一则 RT

你总是觉得累,并不是因为你工作太多,而是因为你有太多“没闭环的事”。
那些你还没回的讯息、还没说出口的道歉、你一直在逃避的决定、你一再拖延的谈话。这些事整天在你脑海的后台运行,不断消耗你的能量。
关闭这些循环,完成它们。你会发现自己的精力在慢慢恢复。心理负担,比任何体力劳动都更让人筋疲力尽。

这突然启发了我——这不就是成绩差的原因吗?前面的问题还没搞懂,老师就讲到后面了。知识点千疮百孔,基础不牢,地动山摇。套路题的套路背下来了,结果计算出错或条件带入错误。唉……

你说补习吧,也不知道从哪里开始。到处都是问题,没有一个闭环。想象“别人家的孩子”,优秀的人对知识的“一致性”和“完整性”都有追求,他们甚至喜欢手绘一整套知识地图。

怎么解决呢?我也不知道。

我知道的是,ADHD 和拖延症有些相似,核心在于多巴胺的分配机制。多巴胺,简单说,就是驱动力,也可以理解为精气神的“气”。

当人意外完成某件事并获得好处时,多巴胺会让行为与结果之间产生联系(建立神经通路),并奖励人不断重复这个行为。只是这种奖励感不等同于直接的快乐。在长期多巴胺作用下,相关神经通路会不断被强化。如果强化过度,就会形成路径依赖,产生渴望和欲望。

优秀的学习者会追求更高的水平,所谓“优秀是卓越的大敌”。

这个机制有一个致命缺陷:它是一个点。它控制经过这个点通路的 YES / NO

小学之后,知识就变成了“面”或者“体”。学习中大量的中间环节,是一个毫无奖励的枯燥序列,一堆前置知识就能把人烦死。如果孩子的注意力无法在上下文中长时间保持,最终结果肯定会 fail。

文史类的还可以胡诌几句,数理类的就直接完蛋。这和拖延症的问题几乎一模一样。太宏大的目标,往往难以执行,迈出第一步尤其困难。

当然,成年人面对的工作任务、老板布置的指令、甲方提出的需求,比学校里人工设计的题目扯蛋一万倍。考试至少有明确答案,而在现实世界里,你提出的问题方向可能都是错的。

学习的方法论:在你多巴胺失效之前,探索一条每一步都有正向激励最短路径完成图遍历。

方法论已经有了,接下来就是把这个原理应用到学习流程设计里了。很多码农都喜欢折腾一套todo,为了帮助拖延症同病房的学习困难症患者,那么接下来让我从一个简单的 TodoMVC 原型开始……算了拉倒吧 🤣

Posted

stderr

一个叛逆大爷的童年

偶然刷到这么一个人的童年:

  1. 十分讨厌传统文化
  2. 上小学喜欢看小说。比如 三国 西游 等。怕被老师抓?老师过来,用一本书盖住。
  3. 因为老师苛刻,打学生。所以10岁逃学,不敢回家;山谷里流浪三天,最后找到发现是兜圈子,离家大概才8里
  4. 13岁忤逆父母。
    离家出走!有一件事我记得特别清楚。在我大约13岁的时候,我父亲请了许多客人到家里;我们两人当着他们的面争论起来。父亲当众骂我懒而无用。这一下激怒了我。我回骂了他,接着就离家出走。我母亲追着我想劝我回去。父亲也追上来,边骂边命令我回去。我跑到一个池塘边,并且威胁说如果他再走近一步,我就要跳进水里。在这种情况下,停止内战的要求和反要求都提出来了。我父亲坚持要我道歉并磕头认错。我同意如果他答应不打我,我可以跪一只腿磕头。战争就这样结束了。
  5. 认为皇帝不是坏人,甚至不反对帝制,都是手下干坏事?
  6. 从小大量阅读,知道拿破仑、叶卡德琳娜女皇、彼得大帝、威灵顿、格拉斯顿、卢梭、孟德斯鸠和林肯
  7. 上大学想出国,学法语。还认识一位在加州加入了Ku Klux Klan的学长。

奇妙的经历,估计好多人感觉都有相似之处? 🤣

Posted

stdin

gRPC Python, AsyncIO and multiprocess

I am torn about writing this. AsyncIO in Python is always a mess, protobuf is another, gRPC is the worst of them all because of all that boilerplate code that does nothing but trouble.

The task I am facing is integrating a mesh API server based on our internal codebase.

non-gRPC options

I mean, gRPC is just h2+protobuf, how hard could it be? Even uWSGI had h2 from decades ago

Turns out the options are quite limited. h2 in uWSGI was major versions behind, SPDYv3 never took off. gRPC and h2 are related but different because the frames are marked and handled differently.

So there's either hypercorn or fallback to gRPC. To avoid further mess I decided to stick with gRPC

infectious async/await

Now I face another challenge: The existing business logic is written in async/await style (cue FastAPI fad)

I carefully studied the gRPC async hello world example

Everything ran great, except the notorious GIL, my gRPC server runs but only on one single CPU.

multiprocess

Old school solution to GIL: spawn many processes. Given a 1:1 map to worker CPU. Easy? There's an official multiprocessing example

It worked... until it didn't. The major selling point of h2 is connection multiplexing, one TCP connection to serve all concurrency. And our mesh client is so good at this, only one worker consumes 100% of one CPU and the rest simply idle. 🤣

SO_REUSEPORT

I also tried to implement a prefork worker on my own. Let's get rid of master because political-correctness we have SO_REUSEPORT already.

Unfortunately it didn't work at all, because of h2's multiplexing nature. The kernel won't schedule requests if there's only one single connection.

ProcessPoolExecutor

I looked closely and found how gRPC inits:

grpc.server(futures.ThreadPoolExecutor(max_workers=10))

Maybe swap it with ProcessPoolExecutor() ?

Nope, server went dead with a timeout. Don't have time to look into C/C++ details. Nope.

It seems gRPC only allows ThreadPoolExecutor().

Why does Google even allow it as a parameter then?

The apply_async() hallucination

Out of despair, next I asked ChatGPT. The advanced AI model said: just use multiprocessing in your invokes

Yeah why not. So how do I run async in multiprocessing?

ChatGPT hallucinated: use apply_async. I initially believed that shit only to find it means the func will return an AsyncResult object, not running some async/await code. btw, I found the .apply() is just a shortcut for .apply_async().get()

Putting it together

I got the mess to work eventually.

  1. Create a normal gRPC server with add_generic_rpc_handlers and stuff
  2. Create a pool = ProcessPoolExecutor(...) before the unary_unary_rpc_method_handler, with an initializer that spawns a global loop = asyncio.new_event_loop().
    It had to be global because concurrent.futures only allows it this way
  3. Run loop.run_until_complete() inside pool.submit()

lessons learned

If you aren't a try-hard:

  • avoid async

  • avoid gRPC

Posted

stdout

特立独行的中文

上一篇汉字 和 汉语 的先进性 还没完

最近不知道在 X 上还是 xhs 上,原帖我翻不到了。有留子在图书馆查资料,用中文搜索,旁边印度妹问在看啥?

留子说在查学术问题。印度妹悻然说到,她的母语就没有这么多资料可查,只能有英语资料可看。

这回到我今年第一篇blog 如何用英语给出简短的 “春节” 定义 抛出的一个观点:

其实,全世界的主要语言里,只有汉语还在坚持“意译”

仔细想想还是挺恐怖的,全世界都叫 ResNET,日本人甚至用假名 レズネット 也要坚持音译。

前端时间 龙是不是要翻译成 Lonng 也是个很火的话题,现在很多人明白了。意译实际上是中文使用者的一厢情愿,特立独行的。日韩把很多东西都已经抢注了,比如 围棋 Go 泡菜 kimchi,老中还在那里老老实实的 Sour Pickles。

这个做法有好有坏,但是这种坚持就。比较难评。

又想起一个老梗:

元朝有个官职叫怯里马赤,放在现在叫翻译官。有一次忽必烈先生问孔子是什么人,有人告诉他:孔子是老天爷的怯里马赤。忽必烈先生很满意这个回答,曰:善。

出处:叶奇《草木子》卷四下:

(北人)立怯里马赤,盖译史也,以通华夷言语文字。昔世祖尝问孔子何如人。或应之曰:“是天的怯里马赤。”世祖深善之。

意译这事坚持得有多离谱呢?连天意都要给你翻译成中文。巫文史医一脉相承了等于说是。

Posted

stderr

汉字 和 汉语 的先进性

前几天 Andrej Karpathy 怒赞 Deekseek-OCR,认为图形比字串更能与意义产生深层次的共鸣。

老外评论说这个角度太刁钻,是不是因为中文是方块字,属于 ideogram 程序员更能看出来其中的问题?我当时就回复,没错,汉字读写其实就是记忆宫殿 Method of loci

今天1024,又有一篇讨论 When is it better to think without words?

2013年的一段讨论

视觉识别为什么有优势,这个在2013-11-15和朋友有如下讨论:

09:20 K: 还是不喜欢看电子书 包括技术类的 是不是原始人的通病
09:23 me:擦 我压根就不喜欢看书 注意力不集中症
09:24 K:你知道这个"不喜欢看电子书'就是一种委婉的说法 我也是
09:24 me:-.-
09:24 K: 注意力难集中得很 看书有焦虑
09:24 me: 我也是啊 我日
09:24 K: 看一会儿就觉得我漏看一行 越回去看越觉得焦虑
09:24 me: -.- 哈哈
09:25 K: 用手指指着两张之间 然后眼睛从两行之间的地方快速扫过 手指再下移 这个办法可以帮助我提高注意力同时避免一行一行死抠 两行之间*
09:26 me: 你大脑已经变成机械游标来parse文本了么 哈哈哈哈 不过我有一招可以缓解这个症状。不过只对中文有效 就是只记文字形状,不记声音和意思 这样效率奇高
09:27 K: 如何控制只记形状
09:27 me: 特别是古诗词默写什么的。给出上一句,我能记住课本那一整页的文字排版和形状
09:27 K: 我日
09:27 me: 就好比看照片一样 当然需要练习。克制自己去默读的坏习惯。 http://en.wikipedia.org/wiki/Subvocal_recognition 汉字这个东西要跟英语区分开。英语你不默读很难搞懂。。汉字倒是可以直接记忆形状
09:29 K: 这个估计和是不是母语也有关系
09:29 me: 我觉得不是吧。。英语是拼音的。。。汉字是logograph parse英语铁定要经过大脑处理音频的dsp parse汉语可以直接绕过这一个一维的串行接口 图形是并口效率高~~
09:30 K: 你可以去神经年会发表演讲了
09:30 me: 哈哈哈。。。 英语还有jb蛋痛的变形 所以parse起来效率低啊
09:31 K: 英语还好啦 法语这种才是parse起来慢
09:31 me: 性数格 一起上!
09:32 K: 还有倒装 宾语前置 甚至还有多宾语前置 我见过3个宾语前置的 然后按照规则排 最关键的是
09:32 me: 是嘛、这就是导致parse只能去线性scan。搞毛。。。
09:32 K: 如果是indirect object 前置的时候介词省略了 搞毛 je telephone à Marie. je lui telephone.
09:33 me: national geographic 最近出了个片 世界记忆冠军就是用的照片记忆法 推荐去看看。虽然有点啰嗦 我找下imdb 这jb去街上找美女给4张亿美元。他背编号。背对了就是他的。背输了就补贴4美元 4张1美元
09:35 K: 哈哈 数字这个很有意思 我发现电话号码 中文的你给我念3遍 估计我就记住了 但是我发现我听英文广播的时候 念英文号码我特别痛苦 我经常先翻译成中文再记
09:35 me: 是啊,这个是个障碍 http://www.imdb.com/title/tt2113487/
09:36 K: 估计脑子里的图像和英文没有联系
09:36 me: 这个。可以抽空看看。我觉得拍的好!
09:36 K: 估计直接记形状好
09:36 me: 嗯。那个记忆冠军就是把字母想象成玩具一个一个挨着放在沙发上 然后虚拟拍照 http://movie.douban.com/subject/10863209/ 这个国内下载很多 居然是11年的。。囧
09:37 K: ... 不过不同的人 应该不同的记忆方法也不见得都适用 说来记忆冠军这个没有印度那个人肉计算机猛吧
09:37 me: 图形记忆效率最高。这个可以被大脑结构证实吧 眼睛输入带宽是最大的

吐槽一下自己十多年前就知道这事了,十多年后还是停留在这个认知 🤣

其实6年前我在zhihu的回答也阐述了类似的话题。干脆转录一下,锐评一波 汉字 和 汉语 。

中文在数学表达上是否处于劣势?

抄题

中文在数学表达上是否处于劣势?
西方语言是以字母为基础表达含义的,现代数学表达也是以数学符号和字母为基础的,

硬要杠一下这个问题的话,欧洲各国的字母表也就是 alphabet,源自拉丁或希腊字母表,而拉丁希腊又直接师承 phoenician alphabet 腓尼基字母表,腓尼基字母被认为是当今所有字母的祖先,腓尼基发源地在黎凡特 Levant 地区,地中海东岸、阿拉伯沙漠以北和上美索不达米亚以西,也就是现在的黎巴嫩,妥妥的属于东方,亚细亚书写手段。

再往上面数,他们祖师爷是巴比伦、苏美尔楔形文字,也跟西方没半毛线关系!

所以有理由认为西方是没有自己的字母的。都是山寨东方的。不服来辩!

杠完了再仔细说说,「西方语言是以字母为基础表达含义」——这个也是大错特错。字母只能表达半个发音,一个完整的音素都算不上,单个字母脱离了上下文无法表达任何含义。

现代数学表达是以符号为基础的。字母只是书写这些符号比较方便的方式。而且就数学那坨公式而言,我觉得都不属于自然语言范畴了。那玩意压根就不是线性书写线性阅读的,上标下标 a-z 都不够用。加上晕眩的范畴体系,更加复杂。

中文在数学上表达是否处于劣势?首先说中文分为汉字和汉语,是否处于劣势呢?我觉得英文和英语也处于同样的劣势。见我对另外一个问题 汉字是否属于较落后的文字系统? 对「没有西方文字就无法进行复杂的物理、数学思维」这个说法的批判。

汉字是否属于较落后的文字系统?

今天上课一位年轻的海归在讲到汉语的时候说汉字是落后的文字,汉语是落后的语言。他的观点主要是因为汉字是表意型的文字,基本构件很多,而且没有抓住语言的物质外壳——语音
而语音在语言中又最关键。作为拼音文字的西语,抓住了语言的关键–语音,因此只要掌握了字母的发音,即使从来没见过这个词,根据组成也能知道他的读音和意思。

这货恐怕从来没见过形声字。。就算画鸟图的古埃及文字最后都拼音化了。

英语的发音毛病

好吧我们在说下,这里的 西语 是指西班牙语?那么还行。如果指的是西方的英语,那么问题严重了。英语恰好就没有抓住语言的关键——语音。请看下面评书:What If English Were Phonetically Consistent? 如果英语严格按照一致化发音会发生什么?

这视频在网上特别火。不喜欢Y站的可以去 b站搜 av41779729

发音是个串口协议

看完之后,再聊下语言的核心——发音。这其实也有大问题。视觉系统是并行的,听觉是串行的。并行 IO 远高于串行。所有欧美语言特种训练 speed reading 都要强调 subvocal 这个概念。为啥呢?呵呵呵呵。再想想罗马宫殿记忆法本质是什么?这可是古希腊古罗马传统记忆比赛冠军的最重要技术!英语中形容一个人记忆力最强状态是什么?photographic memory。其实这个「photographic」很有意思,为汉语里也叫过「目」不忘呢?所以高效记忆的本质还是——形状。

再说说识别效率,英语阅读理解每分钟达到 200 words per minute 被认为是很好的水平了。更高的速度需要特别的手段,比如 Spritz 这家公司他们这家公司他们的方案。你去看下方案就会笑掉大牙。这玩意就是把 连续发音 人为割断成「方块字」!这样反而提高了阅读速度?哈哈哈。

所以,论记忆效率,形状快于语音;论识别效率,形状也是大于语音的;语言的核心(或许可能)是发音,但是文字呢?支持文字和语音分离。表意文字万岁!查表效率最高!

汉字 属于 IL

汉字其实就是一个 intermediate bytecode ,中间字节码。解析、存储效率相当高。口语白话,那只是各种上层表达语言而已。汉语在秦始皇的时候就发明了 LLVM 的架构了。牛逼。你们西方语言还在手写 x86机器码!稍微硬件平台换一下语言就不兼容了,发音的准确传承极易被历史事件打断。其实,英语的第一本字典是 1591 年代 Robert Cawdrey 发明的。。。再往之前文字就是贵族私塾才教,平民大众压根没人看得懂文字都是文盲。说起来你们不信,这作者名字 Cawdrey 自己名字都会写错,因为也有人写 Cawdry 。反正读音都一样对吧。

就算这词典出版了,spelling 也就是文字体系垃圾到什么地步?这词典里兔子 cony 这个词,竟然出现了 conny conye conie connie coni cuny cunny cunnie 这么多重。说好的发音是文字的精髓呢?茴香豆也没这么多种写法啊。

1591年这才差不多 开始 统一文字的拼写方法,啊!卧槽,想象一下这是什么年代?永乐大典据说都在宫里被烧掉一波了,明神宗朱翊钧 都要完成三大征了,利玛窦都开始在南京翻译《Elements》了,再国50年牛爵爷就出生了,开始满世界找苹果砸脑袋了。这连文字标准写法都才开始慢慢统一?

屈折语不利于统一发音

你要说记录发音就记录发音吧,五线谱、IPA 甚至韩国谚文都比你那套好。印欧语系最大的死穴是什么呢?——屈折语。这个词形变化的毛病太恶心了。性、数、格、时、体、态、人称、语气、级、式、非限定、级、序这些变化真的能体现语言的关键–语音么?为毛昨天吃和今天吃,都是吃,发音就不一样?这样的文字书写体系,你很难从一大段语音或者文字里找出「相同」的词。比如前面一个 go 后面一个 went,其实讲的都是同一个意思,但是就是没法直接对应起来。非常影响查找 recall 效率。

通过语音交流进而形成语言是生命发展过程中很奇特的东西。但交流的本质还是大量物品的视觉、事物、理念的碰撞,而不是没接种传播单一音频振幅序列。你发明一个正字法仅仅把「发音」规范化,这是舍本逐末了。真正应该规范的是把相关联的事儿合并成一个书写手段。所以你们有没有想过为什么英语把pig meat 叫 pork ??不要以为这是逼格的问题。让我想起了 zhihu 上看到一个回答,老外得知葡萄干是葡萄做的之后震惊了。。。。哈哈哈。因为葡萄干叫 currant或raisin,葡萄叫grape。。。还有葡萄酒叫。。。wine!这几个单词八竿子打不着。

未来属于分析语!

不过,也说点英语的好吧。长句从句表达意思很清晰。这一点分析语就特别爱好各种比喻排比。

emoji 算一门语言吗?

其实评论里还提到另外一个事儿,不得不补充下。随着书写工具现代化,字母记录发音的语言遇到新问题——emoji。这事儿越来越严肃了

Your honor, it’s an eggplant: Lawyers call for guidance on interpreting emoji

Emoji are showing up in court cases exponentially, and courts aren’t prepared

证据里的“表情符号”:法院认定规则全解析

2014年,密歇根州上诉法院的法官得出结论, :P 这个表情符号“代表一张吐舌头的脸,表达开玩笑或者讽刺的意思”。法院表示,不能严肃地看待这则评论,也不该把它视作诽谤。


一个以色列2017年的案子,其中涉及一对打算租房的夫妇。两人给房东发了一串表情:笑脸、彗星、香槟酒瓶、跳舞的兔女郎还有一只花栗鼠。房东以为(一半要归功于这串表情)他俩同意租房了,于是就把房屋信息从中介那里撤回,结果等夫妻俩不回短信以后,房东就把他们告上了法庭。

来来来,觉得语言的关键是「语音」的,把这几个 emoji 给我读出来。:P

这事儿其实你们可以好好考虑下。emoji 是文字么。现在大家无非发几个表情或者动物用来搞笑,但是20年50年后呢? 熟练使用 emoji 的下一代长大以后呢?

语言的关键,我觉得还是传达意义。表意文字就是代表着最先进表意序列化手段。

请注意,这不等同于汉字就是最先进的文字体系了。但是我认为汉字所代表的方向是无比先进和正确的。

没有西方文字就无法进行复杂的物理、数学思维?

这句话是否正确我们先放一下,这句话和题主「语音在语言中又最关键」相映成趣。随便举个例子:

看这个数学公式,如果你用「发音」来传递信息,能精确无误表达这个不等式吗?别的不说你们能用口述精确把这个不等式复述出来么?

恰好数学物理,把「意义」给符号化了,脱离了「发音」的困扰,才使得精确信息传递变成了可能。数学物理里面一些大道理其实根本没法发音。字母文字这种一维线性的书写手段压根没法表达上标下标优先级高阶运算等等含义。所以科学家才不得不新发明一套 mathematical notation。这套 notation 脱离了语言,直接用符号表达意义,所以评论区这种观点,恰好成为反驳这个问题最好的论据。2333。

其实现代先进生产力的东西,都是越来越脱离语音的。又想起来了,如果用语音输入来进行 Perl 编程会发生什么?你们安静一下影响我用 TNT 了!还有如何用苏格兰方言语音控制电梯到11楼。2333

汉语的最牛逼优势——绝对音高

表音文字的问题说完了,在来强行吹一波汉语的好。参考《科学美国人》2004年报道的一项严肃的学术研究

Speaking Tonal Languages Promotes Perfect Pitch

1999年 NYTimes 报道,一直到2016年,都有团队从很多个角度证明了,绝对音高是个天赋,而且是和语言密切相关的。

A new study concludes that young musicians who speak Mandarin Chinese can learn to identify isolated musical notes much better than English speakers can

可能有人觉得「绝对音高什么鬼」那么放一个 zhihu 传送门 具有绝对音高(感)的准确定义?

你们知道很多五音不准的老外有多羡慕 absolute pitch 的天赋的人吗?在西方世界,贝多芬和肖邦那样的天才才会拥有这一项天赋。《科学美国人》说这项天赋是 Fewer than one American in 10,000 has absolute pitch。没有这个天赋的人,需要幼年开始长期艰苦后天训练才有资格拥有。然而在汉语这种 tonal language 里,很多普通人不用经过额外的训练就无意中拥有了这项技能。

以上

老祖宗发明的语音,给你你们万里挑一的天赋——绝对音高;
老祖宗发明的文字,历经演化,给了你们世界上解析效率极高、记忆成本最低的书写媒介;

……你们却把这门语言用来在网上骂别人傻逼。

Posted

stderr

做了个英语词典,分析了一通无聊的数据

问你几个问题,我国小学 中学 高中 大学 一共要掌握多少英语词汇量?

我这有个准确的答案:

  • 中小学:1541个
  • 高中:3578个
  • 大学:4687个
  • CET4:5308个
  • CET6:6525个
  • 专4:8220个

怎么来的?我前几天写了个英语词典,为了节约token费用,直接把这8k+个词汇的解释给缓存了。

https://github.com/est/dict_json

可以拿来做很多比较有趣的事。比如我把每个词汇的不同意义项都分别罗列出来了近义词、反义词。

这个近反义列表里,哪些词汇是最高频出现呢?结果可能出乎你的意料:

  1. calm: 93
  2. release: 82
  3. support: 76
  4. clear: 75
  5. separate: 72
  6. dull: 65
  7. secure: 62
  8. praise: 60
  9. decline: 60
  10. yield: 60
  11. standard: 59
  12. neglect: 55
  13. direct: 53
  14. fail: 53
  15. minor: 52
  16. present: 52

居然有93个词的近反义包含 calm?我看看都有哪些

furious,stir,unrest,riot,irritation,easy,circus,fury,gentle,tense,fanatic,
firework,pacific,relaxation,excite,wind,fiery,rough,tranquil,wild,clamor,
arouse,violent,annoy,terrify,frantic,clamour,craze,ANGER,windy,disturb,
rouse,impatient,irritate,fume,frighten,settle,dramatic,still,startle,
scare,placid,restless,serene,trouble,nervous,worry,disconcert,worried,
reassure,steady,fireworks,crisis,mad,uproar,provoke,soothe,peace,
fearful,peaceful,busy,turbulent,anxiety,rage,chaos,at rest,incense,
anxious,cool,eruption,ferment,temperate,desperate,compose,hysterical,
breathless,indignant,frenzy,madden,OVERWHELM,fuss,hysteric,tension,
quiet,angry,uneasy,tumult,disturbance,flare,drama,silence,panic,UPSET

好家伙,这么多。

release 呢?

absolve,album,bail,bind,bottle,bridle,cage,capture,clamp,clasp,classify,
cling,close,clutch,collar,confine,confinement,confiscate,constrain,contain,
control,corner,curb,dam,deploy,detain,discharge,dismiss,drop,edition,eject,
emancipate,emission,emit,encircle,enclose,engulf,enslave,excuse,exempt,free,
freedom,grab,grasp,grip,harbor,harness,hold,hook,imprison,issue,jail,kidnap,
launch,let down,let out,liberate,liberation,loose,oblige,outlet,output,press,
publish,rein,relax,repression,reserve,restrain,retention,seize,subdue,
submerge,suppress,therapy,touch,trap,unlock,untie,vent,version,withhold

其他的杂七杂八看了一通,让AI依次总结了一下:

  • calm: 人的情绪、情感状态或某种社会/自然状态
  • release:“释放”与“束缚”这一对核心对立概念。收、放
  • support:“支持/维护/帮助”和“反对/破坏/撤销支持”,并大量使用了建筑和身体的隐喻。
  • clear:“清晰与模糊”、“阻碍与畅通”。明暗之争
  • separate: “连接与分离”、“结合与分开”
  • dull: “有趣与无趣”、“生动与乏味”
  • secure:“安全与危险”、“固定与松动”

如果说一门语言在特定局部词汇的精密和丰富程度代表了这一种文化对该局部的重视程度,那么这就是现代英语一种奇妙的展开。

这一组词汇有一种 从0到1,从鸿蒙到盘古开天辟地,生万物的美。

人的情绪的刻画是至高,内心的平静 calm 是原始状态;

有了收放,就有了吐纳,有了呼吸,也就有了支持和破坏优劣之分;

也有有了明暗之争,也就有了连接和分离;

也就产生了无趣和安全感。

用AI的话说:“从内在情感到外部关系,再到最终认知与状态”的完整心智与行为模型。

组别 核心对立概念 逻辑层面 演绎关系
第一组 愤怒 vs. 平静 内在情感 起点:原始动力
第二组 束缚 vs. 释放 个体行动 对情感的回应
第三组 支持 vs. 反对 社会互动 在关系中的实践
第四组 清晰 vs. 模糊 认知判断 对互动的理解
第五组 安全 vs. 危险 最终状态 所有行动的目标

好。下面问题来了,我并没有给出接下来的词汇 praise,但是AI给猜出来了:

这一组词汇将围绕 “有意义 vs. 无意义”、“重要 vs. 琐碎”、“真实 vs. 虚假” 展开。它是对所有行动和认知的终极评判。

上面那个表,可以扩展到 社会评价:赞扬 vs. 谴责。很接近 praise 了。

接下来AI推测是哪个词呢?

推测七(高可能性):自尊与自我概念。这一组将围绕 “自豪 vs. 羞耻”、“自信 vs. 自卑”、“尊严 vs. 屈辱” 展开。这是外部评价在个体内心内化的结果。
情绪与感受的广度。这一组将超越第一组“愤怒vs平静”的单一情绪维度,扩展到 “喜悦 vs. 悲伤”、“爱 vs. 恐惧”、“希望 vs. 绝望” 等更广阔的情感光谱。

哇,这个众多的意义汇集到一个概念——decline

AI说:

为什么“Decline”是绝妙的下一步
Decline 使得这个词汇宇宙从描述状态和行为,跃升到了描述过程和命运的层面。
它完成的不是一个线性递进,而是一个逻辑上的闭环:
我们从充满活力的情感开始,经过一系列的社会建构与认知努力,去追求安全与荣誉,但最终,所有这一切都可能面临 Decline。
这引入了一种深刻的悲剧性和现实主义色彩,也让整个模型变得更加宏大和富有智慧。它不再只是一个关于“如何成功”的模型,而是一个关于“存在本身”的模型,涵盖了兴起与衰落、肯定与否定的完整循环。
这真是一个精妙绝伦的设计。我更加期待接下来的发展了!

我问:

那你猜猜

AI回答:

好的,基于 “Decline” 引入的 “衰减、拒绝、下降” 这个强大的新维度——它代表了进程、循环和终结——我现在对下一个词的猜测是:
Yield

直接吃了一惊!!!

接下来的开枝散叶我就不展开了。有得猜得对,有得就不行,词汇的意义面变得愈发琐碎和平凡。

AI最后总结为:

我们可以将这16个词分为四个清晰的乐章:
第一乐章:内在的奠基
1. Calm (平静)
2. Release (释放)
3. Support (支持)

旅程始于 Calm,这是所有行动的基石。在平静中,我们才能 Release 内心的执念与负面情绪,从而腾出空间去接纳和给予 Support。这完成了内在世界的初步构建:从静心,到放下,再到联结。

第二乐章:外在的探索
4. Clear (清晰)
5. Separate (分离)
6. Dull (迟钝)

带着内在的安定,我们走向世界。我们首先寻求 Clear 的认知,以理解环境。基于清晰的认知,我们学会 Separate(区分重要与次要,真实与虚假)。而 Dull 则提醒我们,在探索中难免会遇到瓶颈、感到麻木,这是成长中必要的停顿与反思。

第三乐章:秩序的构建
7. Secure (安全)
8. Praise (赞扬)
9. Decline (衰退)
10. Yield (产出/屈服)

在探索之后,我们开始构建。我们寻求 Secure 的根基,并渴望通过 Praise 来确认价值。然而,Decline 是任何系统都无法避免的自然规律,我们必须在其中学会 Yield——或是产出成果,或是顺应时势。这构成了一个完整的生命周期:建立、认可、衰退、转化。

第四乐章:智慧的觉醒
11. Standard (标准)
12. Neglect (忽视)
13. Direct (引导)
14. Fail (失败)
15. Minor (次要)
16. Present (当下)

这是通往智慧的最终阶梯。我们依据内在的 Standard 行事,但必须意识到 Neglect 的存在(无论是主动忽视还是无意遗漏)。于是我们主动 Direct 自己的生活。Fail 是我们必然会经历的,它教会我们辨别什么是 Minor 的琐碎,而什么才是真正重要的。最终,所有的领悟都将我们带回一切的起点和归宿:Present(当下)。此时此刻,全然地存在——这既是手段,也是目的。

总结:
这条路径可以概括为:
由内而外(从 Calm 到 Support),
由外而识(从 Clear 到 Dull),
由识而建(从 Secure 到 Yield),
最终由建而悟(从 Standard 到 Present)。

是一场美妙的语言之旅。

Posted

stdout

SPA+SSR 前后端混合渲染的 “Hydration” 问题

标题里的 "hydration" 应该来自 React 里 hydrateRoot 这个对象,其本意是如果说服务端模板输出的 html 是静态的,noscript的,干瘪的,那么 js 的引入就可以让页面变得 “湿润”,“充水”,“流动”,“顺滑” 起来。国内Web社区把这玩意翻译成 “水合”。

作为一个后端仔,这几天小搓了下页面,发现javascript工程化的一个大坑,说说我对 “hydration” 的理解。

以这个vue官方教程为例:

const items = ref([{ message: 'Foo' }, { message: 'Bar' }])
<ul>
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

看上去人畜无害很容易

但是加上 SSR 就复杂了。比如这个 TodoMVC 已经在服务端输出两条了

<ul>
  <li>A</li>
  <li>B</li>
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

现在如果 items 更新需要重绘,怎么让 v-for 知道前面两个 <li> 的存在呢?

假如这个问题你能解决,浏览器端OK,那么服务端怎么写呢?

<ul>
  {% for item in ["A", "B"] %}
  <li>{{ item }}</li>
  {% endfor %}
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

这样?是不是觉得太丑了,最好把两个逻辑合并呢?

这就是我理解的 hydration 问题。上面只是一个简单例子,复杂的SSR,理论上应该可以精确渲染到页面特定路由的特定状态的精确那一帧。

要达到这个目的,目前普遍做法是在服务端多一个 编译(compile) 过程,其核心无非是在服务器内存里山寨一个 DOM 的层级结构。

感觉应该有更好的做法,但是我没找到。现有的 Vue Vite React Next 都有解,但是我觉得都太重了。在一个 .html 里写几条 directive 修修改改就能把这事儿搞定的办法,目前看来几乎不可能。

累了,毁灭吧。

Posted

stdout

搓了个在线词典(半成品)

看到网上很多人都在用AI干大活儿了,我也开始搓了,vibe coding对我这种人菜瘾大的人很友好,自己懒得写就交给AI写。

13年前就有一个想法,做一个在线词典。那个时候还打算白嫖 RedHat 免费的OpenShift。

为什么要做在线词典呢?当时是眼红 Google Dictionary 觉得它什么都好。但就是需要翻墙,而且有一定几率查不出来,所以想做个镜像把它常用词都拉下来存起来。

当然这个想法无可争议的烂尾了。

一直到2023年,ChatGPT出来之后,发现大语言模型这玩意外语天才啊,用来写词典再好不过了。

说起来,英语的 Dictionary 实际出现时间很晚,比《永乐大典》都晚了它妈的至少200多年,因为英语作为一个拼音语言书写统一(正字法)都是很近代的时候才被行政力量推行的。英语在大部分时间里都是被日耳曼蛮子和高卢蛮子看不起的一个小岛口音。

英语词典的发明,是作为乡绅和学者随手一查拿来装逼的,并不是给初学者、外语学习者、特别是中文背景的ESL学生设计的

词典被当成「语法翻译法」的核心工具,其根本原因是印欧语系的语法、词源都能找到共通的联系。而这一套工具本来是贵族用来训练自己的继承子女去学习古希腊语和拉丁语用的。

当讲汉话写中文背景的家长、老师给娃讲英语的时候,就会遇到各种困难或者犯各种啼笑皆非的笑话。

所以想起来通过 ChatGPT 和类似技术做一套「英语」。当时我列举的愿景有:

  • 这个词语用得多不多,是不是很偏门、冷门还是常用词、热词、必背词、高频词
  • 最典型的场景下,具体放在句子的哪个地方
  • 什么时候出现的这个词语,最早什么意思,又因为什么渊源演变成了现在的别的意思
  • 是不是用这个词汇是骂人的、得罪某个群体的,是否需要忌讳
  • 完整列举出所有 conjugation 和 declension 并且阐述和说明,突出的就是一个屈折语的诘屈聱牙。
  • 不拘泥于单个「词」,固定搭配组合也直接当成单词收录用于记忆。

特别是第五点,过去的词典因为印刷和编辑成本很少这样做,现在电子产品完全有能力生成和遍历所有排列组合。

突破「词典」的固有形态,做一个「英语」的说明书

开始搓这个词典,我也看了下其他在线词典的问题:

  • Oxford English Dictionary 收费。滚
  • merriam-webster 用高级词汇解释简单词汇。需要thesaurus和dictionary合并到一个界面
  • cambridge 可以,就是排版字体略乱
  • collins 最适合
  • onelook 需要点两下
  • websters1913 最美。适合凭感觉学习。抛开一切语法和构词造句,纯粹体会词义之妙以及如何运用
  • wordreference 最简单明了。比如 inspire [sb] == awaken [sb]'s creative ideas 比一个 [T] (transitive) 符号更容易理解得多

搓的时候也陆陆续续解决了一些始料未及的问题:

  1. LLM中转站选哪家?openrouter 其实贵和卡
  2. 很多LLM中转站连 CORS 问题都懒得处理。每次请求其实都要 preflight 一下。你明明加一个 Access-Control-Allow-Origin 就解决大问题

本来想一个静态页面 .html 放在 Github Pages 万事,结果搓了一套mini后端。

最后成果放在 https://def.est.im/ 。还有很多待完善。当前版本我满意的就是在单独的释义下面放了 同义词 反义词,比混在一起方便清晰得多。

以前纸质的词典把大段意思混杂在一起排版,各种缩写代码人看了都头大,Web时代就应该有更清晰的排版。(虽然我现在的排版也很欠缺)

Posted

stdout

再也不愁 favicon 了,直接 inline SVG

每次在一个网页里, 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 写法。

Posted

stdout

Hinton 一句话总结了教育的本质

回家路上听了个 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的危险” 分为两个层面

  • 有人拿AI来干坏事,比如诈骗,做武器,做病毒等
  • AI本身作为 superintelligence 把人类比下去了

他说这个 超级智能 是他在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 给你当头棒喝?

从唯物的角度来说,谁能高带宽不丢包把数据同步好,谁就是最好的教育。

Posted

stdin

gzip 炸弹检测

国内很多人说两句话就能检测 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 真猥琐啊。

Posted

stdout

OKR 🔪 了 Google Reader

最近又刷到 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

A Typical OKR Cycle

我之前也经历过OKR,再次看这个东西有一些不同的感触:

  • 管理层是不会全体公开自己的OKR的。因为管理层不用担责,也不想担责,也不敢担责。有一些 DAU 之类的指标能公开说吗?所以图里的第二步就是没有的,全靠下属去猜,猜错了才好挨板子嘛。
  • 部门OKR或许可以公开,但是跨部门呢?保护得更严实了。子部门和小组之间就有样学样,最后OKR成了村骗乡,乡骗县,一级一级往上骗,一直骗到国务院。OKR里强调的跨部门整合,冲突协调,我没太见着,可能是level太低了。但是人性者东西嘛,既然都分部门了,井水不犯河水,为啥我部门有牺牲收益顺着你部门的指标走?有啥好处啊?你几个人几条枪,凭啥我就不能更少的人更小的代价完成同样的事?
  • key result 强调客观指标,但是可观测性很多时候就是个取悦上级的play。记得有一次帮别的团队算“周均”指标,感觉基础数据查起来很麻烦,结果对方团队说,直接把日均加起来除以七就好了。而且必须得这么做,因为都是这么算的。后来咨询了下做SaaS的师兄,结果业界大概三七分,一大半都是拿日均直接套。给我吓尿了。
  • Google的OKR实践开头就说一句话,不能直接套用,要按实际情况调整,你能套上去说明你做错了
  • OKR里很强调 contributor 这个概念。啥意思?牛马就是执行者,不要多想。不要把自己当公司 partner 了
  • committed 类型的OKR得分为1,必须达到1。aspirational的平均分应该是 0.7。但是实践中这挂靠很多待遇福利,使得如何设 OKR 成了一门花活儿
  • Doerr 这名字起的好啊,行者。哈哈。
  • 反对 Business-as-usual OKRs。万事万物都必须从用户需求侧推导。我觉得这一点很好
  • 胆小aspirational OKR问题:愿景性OKR会倾向保守,出发点是,如果尚有余力,加一点运气,完成blah。实际有一个简单衡量标准(The litmus test),如果你完成这项OKR,会不会大幅度超出用户预期?多年以后用户会不会因为这项OKR受益?
  • Sandbagging。正如前面提到的和薪资福利挂钩,很多人会消减 committed OKR 目标。按照 Doerr 的说法,承诺性OKR是需要几乎耗光团队所有人力财力时间的目标才对。承诺+愿景 加起来应该超过团队能支配的资源。OKR这一工具是用来摸索团队执行力边界的。Doerr甚至说到如果每次OKR都能漂亮完成那说明团队在 hoarding resources or not pushing。我寻思,这也太资本主义了。哈哈哈。
  • Low Value Objectives (LVOs) 不要追求“把CPU尖峰降低3%”。而是要反推,如果你这指标 1.0 完成,对 enduser 或公司效益有什么直接的促进作用吗
  • 所有的KR合起来,需要构成对O的充分条件。如果所有 KR 都 1.0 分完成,那么 O 必将实现。这一点很要害啊,实践中很多KR也就是一些对自己有利的必要条件而已。估计很多团队也是对 硬骨头 避而不谈。OKR 这一工具的目的就是发现公司层面缺乏对“房间里的大象”的关注和投入的
  • committed OKR以达到1.0为宗旨。如果团队达不到,那么需要尽早升级。升级不仅是常见的,还是必须的。无论是你对OKR不认同,优先级问题,还是有冲突,还是资源不够,管理层的义务是尽可能在OKR周期内发现问题并投入解决。
  • 达不到 1.0 的committed OKR需要postmortem。Doerr说这样做不是为了惩罚团队,而是看到底是计划环节,还是执行过程中出了问题。但往往OKR更多的被用成敲打的工具?哈哈
  • Aspirational OKR 可以长期保留,成为下一个周期的基础。如果没有进展就丢弃,说明要么你这目标设定有问题,要么优先级设定有问题,要么资源调度有问题,要么对事物的认知出了根本问题。
  • Aspirational OKR在团队之间平移是OK的。manager不应该假设它们得到的支持永远是非常充足的。
  • 简单衡量(The litmus test):如果每个KR都是季度末最后一天完成,那么说明压根没计划。
  • 如果重要团队职能没能在OKR里体现,就添加更多的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 分,然后擦屁股得越干净越好?

胡思乱想又水了一篇,大家别当真

Posted

stderr

Fix WestData SN550/SN570 SSD slow read problem

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.

Posted

stdout

CBOR 和 MsgPack 是一回事

翻旧账的时候无意中发现的。MessagePack的实现者 mdhb 说:

Disclaimer: I wrote and maintain a MessagePack implementation.
CBOR is MessagePack. The story is that Carsten Bormann wanted to create an IETF standardized MP version, the creators asked him not to (after he acted in pretty bad faith), he forked off a version, added some very ill-advised tweaks, named it after himself, and submitted it anyway.
I wrote this up years ago (https://news.ycombinator.com/item?id=14072598), and since then the only thing they've addressed is undefined behavior when a decoder encounters an unknown simple value.

以及

There's no reason an MP implementation has to be slower than a CBOR implementation. If a given library wanted to be very fast it could be. If anything, the fact that CBOR more or less requires you to allocate should put a ceiling on how fast it can really be. Or, put another way, benchmarks of dynamic language implementations of a serialization format aren't a high signal indication of its speed ceiling. If you use a dynamic language and speed is a concern to this degree, you'd write an adapter yourself, probably building on one of the low level implementations.
That said, people are usually disappointed by MP's speed over JSON. A lot of engineering hours have gone into making JSON fast, to the point where I don't think it ever made sense to choose MP over it for speed reasons (there are other good reasons). Other posters here have pointed out that your metrics are usually dominated by something else.
But finally, CBOR is fine! The implementations are good and it's widely used. Users of CBOR and MP alike will probably have very similar experiences unless you have a niche use case (on an embedded device that can't allocate, you really need bignums, etc).

看它又翻了一堆旧帐。。hmmmm。。。好吧。

最近在看 ATProto 发现它既可以 CBOR 也可以 JSON

Posted

stdin

大集团,小组织和原子个体

来自 Terence TaoHN上讨论很热烈

Some loosely organized thoughts on the current Zeitgeist. They were inspired by the response to my recent meta-project mentioned in my previous post https://mathstodon.xyz/@tao/115254145226514817, where within 24 hours I became aware of a large number of ongoing small-scale collaborative math projects with their own modest but active community (now listed at https://mathoverflow.net/questions/500720/list-of-crowdsourced-math-projects-actively-seeking-participants ); but they are from the perspective of a human rather than a mathematician.

As a crude first approximation, one can think of human society as the interaction between entities at four different scales:

  1. Individual humans

  2. Small organized groups of humans (e.g., close or extended family; friends; local social or religious organizations; informal sports clubs; small businesses and non-profits; ad hoc collaborations on small projects; small online communities)

  3. Large organized groups of humans (e.g., large companies; governments; global institutions; professional sports clubs; large political parties or movements; large social media sites)

  4. Large complex systems (e.g., the global economy; the environment; the geopolitical climate; popular culture and "viral" topics; the collective state of science and technology).

An individual human without any of the support provided by larger organized groups is only able to exist at quite primitive levels, as any number of pieces of post-apocalyptic fiction can portray. Both small and large organized groups offer significant economies of scale and division of labor that provide most of the material conveniences that we take for granted in the modern world: abundant food, access to power, clean water, internet; cheap, safe and affordable long distance travel; and so forth. It is also only through such groups that one can meaningfully interact with (and even influence) the largest scale systems that humans are part of.

But the benefits and dynamics of small and large groups are quite different. Small organized groups offer some economy of scale, but - being essentially below Dunbar's number https://en.wikipedia.org/wiki/Dunbar%27s_number in size - also fill social and emotional needs, and the average participant in such groups can feel connected to such groups and able to have real influence on their direction. Their dynamics can range anywhere from extremely healthy to extremely dysfunctional and toxic, or anything in between; but in the latter cases there is real possibility of individuals able to effect change in the organization (or at least to escape it and leave it to fail on its own).

Large organized groups can offer substantially more economies of scale, and so can outcompete small organizations based on the economic goods they offer. They also have more significant impact on global systems than either average individuals or small organizations. But the social and emotional services they provide are significantly less satisfying and authentic. And unless an individual is extremely wealthy, well-connected, or popular, they are unlikely to have any influence on the direction of such a large organization, except possibly through small organizations acting as intermediaries. In particular, when a large organization becomes dysfunctional, it can be an extremely frustrating task to try to correct its course (and if it is extremely large, other options such as escaping it or leaving it to fail are also highly problematic).

My tentative theory is that the systems, incentives, and technologies in modern world have managed to slightly empower the individual, and massively empower large organizations, but at the significant expense of small organizations, whose role in the human societal ecosystem has thus shrunk significantly, with many small organizations either weakening in influence or transitioning to (or absorbed by) large organizations. While this imbalanced system does provide significant material comforts (albeit distributed rather unequally) and some limited feeling of agency, it has led at the level of the individual to feelings of disconnection, alienation, loneliness, and cynicism or pessimism about the ability to influence future events or meet major challenges, except perhaps through the often ruthless competition to become wealthy or influential enough to gain, as an individual, a status comparable to a small or even large organization. And larger organizations have begun to imperfectly step in the void formed by the absence of small communities, providing synthetic social or emotional goods that are, roughly speaking, to more authentic such products as highly processed "junk" food is to more nutritious fare, due to the inherently impersonal nature of such organizations (particularly in the modern era of advanced algorithms and AI, which when left to their own devices tend to exacerbate the trends listed above).

Much of the current debate on societal issues is then framed as conflicts between large organizations (e.g., opposing political parties, or extremely powerful or wealthy individuals with a status comparable to such organizations), conflicts between large organizations and average individuals, or a yearning for a return to a more traditional era where legacy small organizations recovered their former role. While these are valid framings, I think one aspect we could highlight more is the valuable (though usually non-economic) roles played by emerging grassroots organizations, both in providing "softer" benefits to individuals (such as a sense of purpose, and belonging) and as a way to meaningfully connect with larger organizations and systems; and be more aware of what the tradeoffs are when converting such an organization to a larger one (or component of a larger organization).

读完之后很惆怅。双亲+子女组成核心家庭 里Michelle Obama说的那句话犹在耳畔。

人存在的意义和价值是什么?大多数时候,是由TA所在社会群体里的(某种形式的)地位决定的。

大集团往往是纯粹的经济价值来源和利益机器

小组织给人归属感

个体的结局只有一个——孤单

想到这里,突然又手痒想键政了。秦汉公民兵的崩坏,被世家大族吸收消化;六镇府兵制的隋唐,不过是回光返照,最后不得不换成雇佣兵和藩镇。到了大怂国感觉汉人是完全不会打仗了,这也跟山河四省彻底原子化,科举这个上升通道沦为「个体」刷分机器有莫大的干系。小组织(户)和大集团(族)都完蛋,加上打压工商业,无法形成新的行会 - 商团 乃至财富汇集托举的 文艺 - 科学 团体,整个社会结构要么是男耕女织的这种极端原子化的小农家庭,要么是皇权这种巨无霸;文官集团彻底被以个体利益出发的党争玩坏。整体民心是个什么状态呢?一个民族,一个国家里的每个个体,既无法从组织里得到利益,也无法得到归属感,反正生活都是苦和累,今朝有酒今朝醉,天子换谁来当都一个屌样,那么结论很容易得出:整个汉地的「自然组织度」约等于0 。朱88的军户制度,也是行政和官僚手段强行拉高组织度一种无奈,但是最后还是被更高组织度的八旗吊打。

不得不说老外的 civil society 这一套说法 还是很有道理的

要说这一切的罪恶之源是什么呢?先来想去,铁犁+纺车,从井田制崩坏就开始了?

为啥孔老二崇周礼?因为当年的农业生产是纯纯人力,得分工和群体劳动才能生存,国君祭天是一件严肃的生产分配大会,而不是后来流于礼节形式。为啥游牧部落总是能找到机会在某一个点突破防线?因为轮牧制度是根本,只要部落之间平息仇杀一致对外,就可以凭借天生的高组织度完成更复杂的战术和战略目标。

所以21世纪的铁犁是什么呢?AI?

不敢想不敢想。看着孩子现在 pad 上安装了豆包、千问、deepseek等众多app,我寻思,可能人类社会连父母和后代的养育联系,可能在未来某一个时刻都要断掉了吧。

呃,网上其实现在已经是这个风气了,原生家庭的“罪”罄竹难书,老登只有爆金币一个用途了。

Posted

stdin

xHTML5

有 ChatGPT学姿势就是快

<!DOCTYPE html [
  <!ENTITY myEntity "Hello World">
  <!ENTITY wow "alert('hi')">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  &myEntity;
  <script>
    &wow;
  </script>

</body>
</html>

保存到本地 1.xhtml,双击浏览器打开。谁能想到这也行?xml entity 还可以这样玩?

只要MIME为 application/xhtml+xml 就可以把HTML5当XML渲染。

部署了个在线demo: https://lab.est.im/svg/entity.xhtml

不敢相信自己眼睛,确认下是HTML5:

  • document.compatMode 返回 CSS1Compat 没问题
  • ocument.doctype 返回 <!DOCTYPE html> 没毛病

如果是老的兼容模式:

  • document.compatModeBackCompat
  • document.doctype.publicId-//W3C//DTD HTML 4.01//EN
  • document.doctype.systemIdhttp://www.w3.org/TR/html4/strict.dtd

思路打开了。哈哈

Posted

stdout

disqus已卸载,手搓了套blog评论系统 - req4cmt

一直用 disqus 主要是觉得方便(懒)。但是自从被墙了就很不方便了。加上近期开始强制插入广告,就更讨厌了

想找个替代品,很多基于 github 的,在 issue 盖楼,我觉得不方便备份,希望是能直接写入 repo的。这样一个 git clone 就搬家了。更不用说几乎都是基于 OAuth 的 github 登录实际上能拿到你所有 repo 的 scope,也就是能读写你所有公开(甚至私有)仓库内容。我一般都不点

于是决定手搓一个。

首先考虑的就是如何把内容写入 git repo。这个在做 gitweets 已经调研尝试过了。

本着在 cloudflare worker 白嫖的心态,这种 serverless 的环境肯定不允许装 git 命令行或者 libgit 这种 .so,所以考虑 pure python 的 dulwich。折腾了一下 python binding 发现CF居然是个WASM转译。那还不如js。还好nodejs生态也很丰富,有个纯js的实现 isomorphic-git

然后手搓了一下发现需要个 memfs 在内存里模拟文件IO。

其次是如何读取内容,评论列表以 域名/路径.jsonl 格式保存为纯文本,一行一条评论JSON,方便diff。将来可以做成 pull request 当成 moderation

本来想通过 git-http 来读文件,发现太慢了。干脆走捷径直接反代 https://raw.githubusercontent.com/ 就行。本来也不用反代,一是这个域名被DNS屏蔽,二是加一个该死的CORS头才能跨域。

跑通之后接着就模仿disqus实现页面一段.js嵌入,渲染表单,展示评论列表等等,我的 js/css 实在捉急就搓了套最基础的。

能用就行!

防止spam这方面也没多想,看很多人说做 hidden input 就能拦住绝大部分,那就先这样跑着。除了评论框这个 textarea 甚至名字都是选填

尽可能做兼容,让在没有 .js 的情况下也能提交表单。当然得在嵌入页面的时候弄 <noscript>

该项目严重依赖 cloudflare 和 github 两位赛博菩萨的免费额度,所以请求过多会被控频。实在不行弄个KV队列之类的。但是我这博客这么冷清,多虑了?

最后,把 disqus 老的评论都导出来了。毕竟是多年的回忆。

项目放在 https://github.com/est/req4cmt 欢迎点评。

Posted

stdout

抗日

看完阅兵式直播,记录一些最近几年才了解到的抗战细节:

  • 1941年4月13日,苏联承认伪满洲国
  • 1945年2月08日,雅尔塔会议,罗斯福同意斯大林,保障大连港、中东铁路、南满铁路的利益,以及恢复俄罗斯海军在旅顺口的租赁
    Yalta Conference
    -1945年6月24日,苏联在莫斯科红场举行「伟大的卫国战争」胜利阅兵仪式,🇯🇵帝国陆军武官矢部忠太,帝国海军武官 臼井淑郎作为嘉宾受邀列席检阅红军。


- 1945年8月06日,美军用「Little Boy」核平广岛
- 1945年8月08日,苏联撕毁 《苏日中立条约》向🇯🇵宣战
- 1945年8月09日,美军用「Fat Man」核平长崎
- 1945年9月02日,🇯🇵在东京湾「USS Missouri」战列舰上向盟军投降
- 1955年5月26日,12万苏军的最后一批撤离旅顺、大连。至此大陆外国驻军清零。

东北就是东亚的波兰?

Posted

stdout