关于 EST

EST = Extrospect, Sein & Tao ,后端工程师。

RSS 地址: https://feeds.feedburner.com/initiative

请复制 RSS 到你的阅读器,或快速订阅到 :

EST RSS 预览

创始人模式

2024-09-04 10:25:00

外网的油爆爆,看了下,pg的文章,应该是受这个视频的启发

https://youtu.be/ia6Di_ytiSE?t=2792

Brian 说世界上每 $1500 交易中,就有 $1 是给了 airbnb,挺新鲜。他接着用了个”爬山“喻。创业就好比爬山,创始人好不容易爬上一个山头,这个时候你找一个职业经理人空降到团队,他有能力带领大家去攀登下一个山峰吗?

Brian 说得很有道理。很多人能进大企业,迅速掌握组织架构里的生存技巧,但是出来从 0 建立一套东西不是人人都会的。因为创业的本质就是打破陈见,敲碎现状,更需要说服拿工资老保们跟着一起去打破。

Brian 又说,创始人有三点无可替代:

  1. 是生理父母(不是抚养父母)。你亲自生出来的娃,就是你自己。这种母爱和对外部事物的喜欢有根本的不同
  2. 有permission。有些事跟外边小朋友不会讲,但是给自己娃会说。Brian比喻说如果有必要,他可以给公司改名字。职业经理人敢吗?
  3. 创始人既然创建了一件事,也能重建它。职业经理人能打理清楚,避免出岔子就不错了。Brian 又用了个精彩的比喻,只有创始人才知道公司的冰点和沸腾点。他随手拿起个杯子,说只有创始人才知道这杯子设计之初是啥样,这杯子怎么来的,比如铝合金从哪家订的。这不仅仅是管理问题,而是掌握如何建造的过程。

Brian 又说 创始人有2点不足:

  1. 不清楚如何把生意 scale 到大公司级别的管理
  2. 创始人精力和生命有限。如何接班?

Brian 又读了下他给 AirBNB 发的全员信。有句话很俏皮:

You must design the culture you want, otherwise, it'll be designed for you, you might not like what emerges

然后就开始喷 HR 部门。。。哈哈。那什么是culture呢?他说

Your culture is the shared way to do things (and often they're) based on the lessons you've learned ..... Your culture is the behaviour of the leaders that get mimicked all the way down every single person... The way a leader designes the culture is not by writing out list of values, it's by basically leading by example every single day.

culture 就是做事风格,随时表率,迭代更新的。


由于视频太长了我没继续看了。反过来我觉得 pg 看重的点,和 Brian 访谈里的不太一样。可能是我找错视频了?

pg 文章里核心的点是,manager 做事有一条潜规则:严禁越级报告。这个规则又导致,CXO们都是职场向上管理的老油条。

大厂出来的manager都喜欢把组织架构的子节点当成“黑箱”,然后只用跟直属同事(direct reports)做IO就能遥控功能。

pg 指出:

Whatever founder mode consists of, it's pretty clear that it's going to break the principle that the CEO should engage with the company only via his or her direct reports. "Skip-level" meetings will become the norm instead of a practice so unusual that there's a name for it. And once you abandon that constraint there are a huge number of permutations to choose from.

这个创始人模式,目前是什么大家都不清楚,但是无论如何,很明显核心就是要打破层级,做跨级(skip-level)沟通。但是创始人不可能在2000员工里的公司里也像20个人团队一样直接沟通,所以还是需要一定程度的托管。至于托管自治的边界在哪里,pg也不知道。他只说了看具体行业具体赛道具体阶段有不同。你越级管理过渡,还可能变成运输大队长那种“微操战神”。


founder vs manager 这个说法,我感觉可能太笼统了。这个模式可以进一步抽象为:无限兜底 vs 完成指定 的模式区别。

founder 知道哪些事能做,哪些不能做;manager 只能在划定好的职权内做事;

founder 做事是黑名单模式,除了某些选项排除掉,别的所有已知的未知的都得去对付,能动用全公司资源。manager则是白名单模式,一亩三分地,只管把业绩指标操完了事。甚至给下任挖坑。往往留下一下很 toxic 的实践,实践久了就成了习惯最后成了习俗。

这两种模式,归根结底在于,如何定义“事”,有些事和业务,跳出自身角色局限性,其实压根不存在,甚至可以更低成本解决。我个人体会,遇到的某些麻烦,隔壁部门明明稍微改进一下就能解决,但是这个因为不算对方绩效,就推不动,不上心。所以就得花额外高昂的成本。大企业病的所有问题都来源于部门和指责切分,业务是垂直的,但是技术和赋能最高效往往是水平的。

php是最好的……serverless

2024-08-27 11:06:00

php是不是最好的语言先不说,但是如果从 serverless 的角度看php:

  1. 语法简单,功能丰富,10分钟就能学会
  2. 通过 FTP 之类的标准工具部署,而不是脑残的命令行
  3. 不用管理麻烦的服务器。基于非常成熟的 php-fpm 去做 scaling。也有大量巨型网站验证过这一方案
  4. 虽然不是 docker,但是 vhost 够用了。而且要容器化 vhost 也很容易
  5. 让人梦寐以求的“热更新”技术
  6. 超级便宜的月租。(还记得 dreamhost 吗?)
  7. 不会吊死在一颗树(vendor lock-in)上。全球遍地的厂商都支持

你就说好不好吧。同时评论在 Hacker News

2024年玩xml真是笑死了(xsl)

2024-08-22 23:09:00

昨天大早上的6点就醒了,翻来覆去睡不着,就开始胡思乱想。忘记是什么缘起了,反正突然想到一个问题,博客这种静态站,又要输出html,又要输出rss。太冗余了。要不直接把内容存在RSS里。然后用js去fetch()。。。。

等等,死去的记忆突然攻击我。RSS不就是XML,XML似乎有个加皮肤的技术。于是就更睡不着了,起床一查,原来是 XSLT 转换成 HTML 然后就可以自由发挥了。

可行性没问题,准备找个前人的例子开抄。比如 2021年Nathan Clark的Styling an RSS Feed With XSLT2023年Darek Kay的Style your RSS feed

思路就很匹配,执行效果也不错。我想百尺竿头更进一步,把 XSL 给 inline 到 RSS 里,避免额外的加载,节省一次网络请求。吗,没想到这下麻烦大了,折腾到现在才有个初步结果。直接贴源码:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="#stylesheet"?>

<some_xml_root xmlns:shit="http://xxx">

<xsl:stylesheet xml:id="stylesheet" version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat" version="5.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
  <html>
    ...
  </html>

</xsl:template>
</xsl:stylesheet>

</some_xml_root>

这里的 href="#stylesheet" 方法,是官方推荐的 。但是要起效果,一定注意 type="text/xsl" 别抄成网上的 application/xslt+xml

主要浪费时间的坑点主要在根的 xmlns 上。这玩意把 xpath 给搞挂了。比如 sitemap你写

<xsl:for-each select="/urlset/url">

好好的,加上 xmlns 就得写成:

<xsl:for-each select="/*[local-name() = 'urlset']/*[local-name() = 'url']">

怪不得现在没人玩XML了。这破玩意没法直观的本地调试,还得靠各种第三方 validator,反人类啊。

于是把根的 xmlns 直接改成 tag namespace。也就是 xmlns:shit 。反正你namespace冲突了关我什么事?而且说实话,xmlns这玩意除了坑各种解析器不好写之外,并没有什么卵用。我以前写都是想办法去掉 xmlns 再解析。感觉这一块真的 over-engineering 了。 好像有点明白 namespace 是干嘛的了。这玩意主要解决一个sb需求:允许多个XML合并到一个文件里。这不就得考虑如何分清楚tag谁是谁的。。。。并且标准已经挖好坑了,一个XML有且只有一个root。。你把别的 tag 合并进来,那的确不容易区分。还有这样写不会造成文件体积膨胀吗?真是xsl笑死了。

接下来的问题就是如何生成一个规规矩矩的 html5 doctype。搜了下 doctype-system就可以了。本来其实可以在<xsl:template>后面加上

<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>

但实际只加这个是不行的。

另外吐槽下 Chrome,默认的viewer把xml渲染成html了,在 devtool 里通过 $x() 无法直接调试xpath,还得靠别的第三方工具。(⊙﹏⊙)

这可能就是XSL的核心问题了——没法方便直观的调试,挂了就给你白屏。有点react那种白屏的 ptsd 感觉了。

大清卷王 和 骑士

2024-08-13 16:16:00

看到个推:

蕨代霜蛟 @ferntrino 10:41 AM · Aug 13, 2024
杭州抗议骑手事件本身就不参与讨论了,难受的是自己的。但有一个细节真的非常黑色素幽默,那就是名单列表顶上的字段。系统命名时还真随手就把骑手的ID命名为Knight ID。
卧槽,Knight这么有历史感的单词竟然落魄卑贱到了这个地步。

Knight这单词让我想起一个往事:

先说一个公共假日:五一。之所以每年放假,这是因为国际劳动节

可能很少有人知道,这个洋节是该死的美国人发明的。具体来说是 1886年5月4号发生在北美 伊利诺伊州 芝加哥市 的 Haymarket Square;具体细节就不说了,打工人闹事,和暴力机关打了一架,死了人。更多的地方接着闹不消停。

被后来这事被称为 Haymarket affair 草市事件 ;重点来了,草市事件的组织者,发起者,名字全称 Noble and Holy Order of the Knights of Labor 高贵与神圣的劳工骑士团。简称 Knights of Labor (K of L),缩写KOL

看来骑士这名字,而且和劳动人民颇有渊源嘛。

而且KOL这缩写冲突了,哈哈哈。。。不过劳动人民应改理直气壮的当意见领袖,没毛病。

图:劳工骑士团 总瓢把子 大工长 Terence Powderly, Grand Master Workman of the Knights of Labor

无聊翻资料,发现一些有趣的细节

1886年5月1日这场运动是KOL在1884年筹备的,主要诉求是8小时工作制。注意国内很多厂家把中午吃饭小休的时间排除在8小时之外,这里显然扯蛋。当年8小时工作的完整表述是:8小时打工,8小时睡眠,其余8小时归自己管! 当年罢工这首颂歌 Eight Hour 就是这么唱的:

Eight Hours for work. Eight hours for rest. Eight hours for what we will

可以看下B站的搬运 【中英字幕】八小时之歌 Eight hours

草市事件是1877年以来 Great Upheaval (也称 Great Railroad Strike of 1877)系列罢工运动的高潮。

早年间的KOL骑士团,强调不分宗教、种族、性别互帮互助,主要成员是低技能体力劳动者、铁路工人、移民、和钢铁工人。但是排斥五类人: bankers, land speculators, lawyers, liquor dealers and gamblers 金融、地产、律师、酒精和赌博。因为这些从业者被认为不对社会产生价值。

当年骑士团吸纳了很多天主教/新教爱尔兰人。然后。。。。。。然后骑士团在还跟 chinese 干上了。据说是在北美西岸的Tacoma,这里1/10人口都是Union Pacific Railroad的铁路派遣工——来自东亚大清的卷王们。

大概经过:

在南北战争期间的1862年,美国总统林肯出台了《太平洋铁路法案》,给铁路拨出了大量的土地和财政资金。负责东段的联合太平洋公司是美国政府直接扶持的半国有企业,它所雇佣的劳工里,大部分是爱尔兰移民。在南北战争时期,爱尔兰正好在闹饥荒。当时北方缺少兵员,政府许诺参军的人可以获得金钱和土地,因此一些黑心商人就去爱尔兰忽悠了很多难民,来美国参战,以骗取政府许诺的参军费。爱尔兰人的加入确实进一步增强了北方的实力,但这种让别国难民当自己内战的炮灰的不人道做法,让美国遭到了来自欧洲各国的谴责。于是到后来,剩下还没有上战场的爱尔兰人就被改派往西部,到联合太平洋公司里去当筑路工人。这些爱尔兰人逃出了饿殍满地的故土,又避免了成为炮灰,都是感恩戴德,施工很卖力,因此联合太平洋公司这一边的工程进展很顺利。
眼看公司快要倒闭,修建横贯大陆的铁路这项伟大工程也要夭折,加州赶超纽约的梦想也要破灭了,这时,四巨头的另外一位,负责实际建造铁路以及人力资源管理的查尔斯·克罗克(Charles Crocker)向斯坦福提出:雇用来自中国的华裔。在19世纪的50和60年代,有大量的中国人,特别是沿海地区的广东人和福建客家人,来到了加州。他们中有的是前来淘金的,也有的是为了躲避太平天国的战火。这些华人中,大多数在加州扎根成家,到了1863年,加州已经有了大约五万名华人。他们勤劳朴素的特质,也是在加州众人皆知的,克罗克正是看上了这一点,才提议将华人们招进公司,去修筑铁路。

具体可以看《路上的美国史︱太平洋铁路:华工用汗水和鲜血浇灌的奇迹》。这篇文章可以看出阶级主义和民族主义叙事的差别。

骑士团要求罢工,大清卷王们不干,愈演愈烈,最后搞成了种族冲突,结局就是 Rock Springs massacre 石泉屠杀。1882年,骑士团支持了臭名昭著的 Chinese Exclusion Act。骑士团所谓的“不分种族、支持移民”口号都加上了“chinese除外”的标签

1886年5月的草市事件是KOL骑士团最大的成果,也是最后的辉煌,接着就迅速衰败了。被 American Federation of Labor 代替,原因是理念落后,熟练工和无技能功能的诉求差异,被天主教主教谴责导致占比很大的天主教徒离开。

1889年,在巴黎举行的第二国际第一次会议上,法国工会人士 拉维涅 Raymond Lavigne 提议将5月1日定为国际劳工节,以纪念草市事件,同时要求各国的劳工共同努力,为八小时工作制而奋斗。拉维涅的议案激励了美国和欧洲多数国家的劳工在1890年5月1日再次进行罢工。

1904年,第二国际在阿姆斯特丹的会议上号召“各国社会民主党组织和工会联合会都要在每年五月一日坚决要求从法律上规定八小时工作制,拥护无产阶级的阶级要求和拥护世界和平”。大会还责成“各国的无产阶级组织,凡在有条件于五月一日停工而无损于工人利益的地方,应当争取停止工作”

历史就是这么奇妙。。。或许国人在人挤人的五一这几天出游,早已忘记这个节日是怎么来的,诉求是什么,以及大清卷王如何被动在错位时代把劳动关系演变成种族冲突的。。。在如今996问题、失业问题夹杂的社会主义国家里,这种黑色幽默,交错神奇,恍如昨日。

两则故事:Intel Minnow,日本高分子化学

2024-08-05 17:56:00

英特尔第二财季营收低于预期,第四财季暂停派息,公司将裁员超1.5万人,盘后股价大跌20%,如何解读?

老狼 2021 年度新知答主 雨花、yang元祐 等 946 人赞同了该回答
前大樱桃员工来回答一下个人的观点。Intel是个好公司,对员工的尊重和职业路径的培养,公司上下对技术的推崇,宽松的企业文化,可以说是绝大多数国内外公司所不能比拟的。尽管有很多人因为各种各样的原因离职了,也在各种前员工群里面各种吐槽,但都是小骂大帮忙,主要是哀其不幸,怒其不争,对Intel从心底还是希望它好的。这么个好公司,为什么越来越不行了呢?
Intel逐渐崩盘的开始点在于10nm的难产,从那以后就没有再好过,只有一蟹不如一蟹。病发于工厂(Fab),根子则是美国制造不行了。一个前美国同事告诉我,美国人丢失了“CAN DO”的精神,只能做高端的设计、娱乐、金融这种营生,苦哈哈的制造不愿意干了,逼着干也干不了。
曾经发生的一件事,可以一窥美国制造的窘境。我的团队和美国Peer团队一起合作了几个开源硬件项目,这对Intel非常重要,我们计划建立x86的类似树莓派硬件矩阵,但是更加开放,这个项目就是Minnow计划。Minnow的第二代Minnow Max(基于Baytrail)非常成功,其中一个很大原因,就是我们选取了ADI做硬件供应商,而ADI的产线在深圳,主板质量非常好,避免了一代老化测试没有做,生命周期太短的问题。我们打算趁热打铁,推出Minnow3,选择在当时颇有竞争力的APL CPU,价格看能不能做到100美金左右。
计划开始就不太顺利,硬件设计被美国team抢走了,他们非要选择一个美国小厂来生产。在付出了延迟半年的等待后,硬件工程师终于告诉我们下周就可以回板了,我们都非常兴奋。结果,又等了三个月,才正在拿到几片板子(首批应该拿到十几片),而且根本跑不到GOP驱动那里,感觉是高速总线信号有问题。开会时,美国的PM(韩国人)告诉我们一个惊人的消息,说那个小厂生产了一百片板子,没有一个可用,我们的硬件工程师(一个年轻的老美)被迫自己到产线上用焊枪手搓主板,这几片就是他几周手搓出来的!他的毅力让我佩服(手搓主板仙人?),但还是不能用啊,谁让你换美国小厂的?于是我们每次项目周会都会催他啥时候能给我们可用的主板,过了几周,他从此再也没有在周会上出现。
项目于是又停滞了几个月,我们催PM,PM告诉我们他找不到这个工程师了,就是他的经理也不知道他去哪里了,就差要报警了。就在我以为过一阵就要换个硬件工程师的时候,事情发生了令人瞠目结舌的转折。
各位看管,这里有一个好消息,和一个坏消息,你们想先听哪个?好吧,好消息是硬件工程师找到了,坏消息是硬件工程师将公司告了!说因为我们总是催他进度,导致他患上了严重的抑郁症,有工伤了,现在不能好好工作,一周只能去一天公司。我心里一万个草泥马跑过,我一周和颜悦色的问一下进度(我又不是他领导,也严厉不起来),从来没有投诉他,这都能搞成工伤,是不是温室里的花朵?
关键是他的工伤被认可了。从此,我和PM再也不能问他进行到哪里了,可笑的是,我们既不能把他踢出项目组,也不能换个硬件工程师,这个活还必须是他干,而且还不能另起炉灶,再成立一个项目组。按照律师的说法,必须Inclusive到他。他的经理也不能辞退他,更不能给低绩效,从此有个防弹衣。他的经理从此拖了一个油瓶,在此可怜他一秒。更重要的事,项目周会从之谈风花雪月,到没人记得参加。项目再延期一年后,迎来了它的结局,无疾而终,而我从此告别了开源硬件梦。
这是Intel的问题吗?不,是美国的体制问题,尽管美国还拥有全世界最顶尖的人才,美国制造也永远不可能回到过去的辉煌。Intel现在扛下了美国制造的脸面,必须负重前行,但我们都知道,在路的尽头,只有特朗普的白日梦。
编辑于 2024-08-03 23:15・IP 属地上海

日本企业是否已经整体夕阳西下了?

Osteroza 键盘侠,接盘侠,洗盘侠 1916 人赞同了该回答
我说一个可能化工行业的同仁们知道的趣事。
美国化学家 P J Flory 是高分子化学的大师级人物,他本人获得过1974年的诺贝尔化学奖。
然而,Flory在晚年的许多“成就”其实是大坑,特别是涉及晶体振荡领域,他的一些结论是错误的。
在六十到七十年代,不少日本化学家师从Flory。这些化学家日后成为了日本化学领域的大佬级人物,决定了日本高分子化学领域的研究方向。这些大佬们继承了Flory的研究成果,包括错误的部分。在他们的带领下,直到今天,日本化工界的许多研究,依然是沿着Flory的模型一路狂奔!
而欧美化学界早在90年代就开始批判Flory。在这位老大哥的家乡,美国,他在大分子晶体领域的学说被“全盘反思”,今天的美国化学界没有机构会继续沿着错误的理论搞科研。
然而,这不妨碍日本化学界,物理界和工业界,年复一年的派学者前来美国进修,重复着一位位前辈们的实验,佐证Flory派模型的正确。只要Flory模型是正确的,也就说明当代日本化学高分子界老师们的正确,也就是证明日本化学界自七十年代来所有前辈们的努力是正确的。
这个行为在我这个外行看来,可以有三种解读: 1,美国实验室知道真相但忽悠日本人,反正你自愿交钱来做实验。2,日本人很固执,死不认错。3,如果最终证明日本人是正确的,那么日本人就是逆行的孤勇者。
事情怎么发生变化的呢。在某次物理年会上,美国国家标准局和阿克郎大学发难,派了个年轻的博士后上场,说你们日本人前段时间又来做Flory模型的实验了,据说数据很完美,你们工业界也重复了实验,数据也很完美,是不是?
鉴于你们实验年复一年的数据都很完美,我们很好奇,所以也做了你们的实验,结果发现了不少的问题。现在我就一条条,一步步的列出来,你们的实验每一步都有哪些问题。我们初衷是同行们间的学术交流哇,大家好好讨论一下哦。
讨论结果是,日本人之后再也不来参加这个物理年会了。
我一位高中同学当时在Akron读博,他听说这事儿以后就问了他的美国导师,“我们是不是杀死了日本人的一个行业”。他的导师回答“不,我们是给一具尸体照了次镜子”。
而我另一位在日本留学读博的中学同学说“日本人每次参加学术会议都一大堆人,但通常只有大佬做关键发言,小辈们发言后都要加上点感谢大佬的致辞。米帝让一个三十几岁的小辈直接怼德高望重大佬们,大佬们恐怕心境上也很难接受吧。”
你们觉得日本人被打脸后,默默改正了错误吗?
虽然,但是,如此,然而,日本学界依旧每年派人来美国实验室刷数据,继续论证Flory的模型是正确的! 日本工业界也依旧以flory的模型为基础,孜孜不倦的推进研发工作。
发布于 2024-07-27 01:23・IP 属地英国

不知道是刚编的故事,还是真就这么草台。。。。

关于 cn.cyberIdentity.certification 的一些技术信息

2024-08-01 15:20:00

搜索该app名字可以得到

https://apps.apple.com/cn/app/_/id1588080869

各大app市场都有隐私政策页,点击可以发现网址是:

https://cdnrefresh.ctdidcii.cn/w1/WHClient_H5/pages/secret.html

甚至有一个 apk 下载页面

https://cdnrefresh.ctdidcii.cn/w1/WHClient_H5/Install/InstallGuide.html

https://cdnrefresh.ctdidcii.cn/w1/version/cyberIdentity-android.apk

whois ctdidcii.cn 可以得到

Registrant: XX部第一研究所
Registrant Contact Email: [email protected]

可以发现该公司官网

有限公司(以下简称“ZDAX”)是**部第一研究所下属全资子公司。
**部第一研究所以国家“互联网+”可信身份认证平台(简称“CTID平台”)核心技术为依托,致力于为各级政府部门、互联网运营商、各行业应用提供权威、可信、安全、便捷的身份认证服务,并开展相关业务创新。在**部的直接领导下,**办、国家发改委、科技部等部委的大力支持下,**部第一研究所积极开展居民身份证网上应用研究,组织承建CTID平台,助力新时代社会治理现代化。
2017年10月,**部第一研究所成立ZDAX公司,并授权ZDAX为CTID平台唯一合法的运营服务商,为各行业提供权威、可信、安全、便捷的网络身份认证服务,为我国“互联网+行动战略”提供强有力的支撑保障。

以及平台介绍说明

https://www.anicert.cn/platform.html

● 一次一码,超时失效
● 通过国密算法加密、签名防止数据泄露、篡改和伪造
根据相关行政许可设立的第三方签发、面向系统应用可作为司法采证使用的身份凭证,如电子认证服务提供者、CA机构等第三方签发的电子签名认证证书、eID等;

得出一个结论,这玩意不是eID换皮那么简单。

点开发展历程可以看到

2020.12 《基于可信数字身份的区块链应用服务白皮书》正式发布

上面提到的厦门公司,看上去是专门做 CDIT 运营的,搜了下官网是

https://easyctid.cn/about

其中有一张最重要的架构图

目前不知道这个 PID 是唯一的还是可变的。要实用还是得做类似微信那种 OpenID/UnionID 才行。因为技术对接SDK需要付费签协议才能拿到,细节就无从而知了。

Valid HTTP verbs

2024-07-17 09:47:00

这里 想到,fetch/xhr 可以发起哪些 http verb 呢?

python -m http.server 随手测试了下,发现连 !$ 这种符号都可以作为 http verb,比如 fetch('/asdf', {method:"$"}) 这样的请求是能发起的。于是去 chromium 搜了下 "is not a valid HTTP method" 相关的解析放在 blink/renderer/platform/network/http_parsers.cc

// See RFC 7230, Section 3.2.6.
bool IsValidHTTPToken(const String& characters) {
  if (characters.empty())
    return false;
  for (unsigned i = 0; i < characters.length(); ++i) {
    UChar c = characters[i];
    if (c > 0x7F || !net::HttpUtil::IsTokenChar(c))
      return false;
  }
  return true;
}

bool HttpUtil::IsTokenChar(char c) {
  return !(c >= 0x7F || c <= 0x20 || c == '(' || c == ')' || c == '<' ||
           c == '>' || c == '@' || c == ',' || c == ';' || c == ':' ||
           c == '\\' || c == '"' || c == '/' || c == '[' || c == ']' ||
           c == '?' || c == '=' || c == '{' || c == '}');
}

原来如此,RFC 7230呀。于是把这些字符打出来:' '.join(chr(x) for x in range(0x20, 0x7f))

! # $ % & ' * + - . 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z | ~

那还搞个屁的 RESTful 啊。直接用特殊符号一把梭。不过各种服务端框架可能不是很容易做兼容。哈哈。

Cappy in a Haystack locations

2024-07-13 09:19:00

For the mission from the beloved Fallout 4 Nuka-World DLC

coc DLC04KiddieKingdomFunHouse01; player.moveto 06015A94
coc NukaWorldWildWestExt02; player.moveto 06015A8A
coc DLC04BottlingPlant01; player.moveto 060445DF
coc DLC04BottlingPlant01; player.moveto 0604A812
coc DLC04GalacticZoneExt04; player.moveto 06015A8E
coc DLC04GalacticZoneExt04; player.moveto 0604AD3F
coc DLC04GalacticZoneExt08; player.moveto 06015A91
coc DLC04GalacticZoneExt08; player.moveto 0604AD40
coc DLC04KiddieKingdomFunHouse01; player.moveto 0604AD3D
coc DLC04WWMineCart01; player.moveto 06015A8B
coc DLC04WWMineCart01; player.moveto 0604AA39
coc KiddieKingdomExt06; player.moveto 06015A97
coc KiddieKingdomExt06; player.moveto 0604AD3E
coc NukaWorldNukaTownUSA06; player.moveto 0604A814
coc NukaWorldNukaTownUSA06; player.moveto 0604A813
coc NukaWorldWildWestExt02; player.moveto 0604A815
coc SafariAdventure03; player.moveto 06015A9A 
coc SafariAdventure03; player.moveto 0604AA3A
coc SafariAdventure07; player.moveto 06015A9D
coc SafariAdventure07; player.moveto 06015A9D
coc SafariAdventure07; player.moveto 0604AA3B

idk hope it works lol.

All Star Core locations in Fallout 4

2024-07-13 06:31:00

Arent nobody got time for this shit.

Open FO4Edit, locate 604a053 and find all refs:

0601FAD1
060255A7
060255D2
06025774
060257F1
06026C7B
06026D23
06026D70
060278F7
06027917
0602791A
06027A3C
06027ACC
06027C0D
06027D5E
06027E43
06027E4C
060319E1
060319E2
060327BA
060327C4
060327D0
060327E2
06034EC6
06034F97
06034FD4
0603522E
06037CA7
060380CB
0603816F

And for external star cores, locate 0601F0E5 and 0601F0E6 for more refs:

coc NWJunkyardExt; player.moveto 060319D6;
coc NukaWorldWildWestExt03; player.moveto 06031995;
coc DLC04BottlingPlant01; player.moveto 060319CE;
coc DLC04Nukacade01; player.moveto 060319CF;
coc DLC04GalacticZoneExt07; player.moveto 060319E1;
coc NukaTownMarket01; player.moveto 06054CA8;

Just type player.moveto with the code above and you can grab all star cores, and return to console player.moveto 0601E359, so you get the Quantum X-01 power armor from Nuka-World DLC of Fallout 4.

Also there's coc TestCory01; 06044B4B; for testing purposes.

育儿成本的两座大山

2024-07-01 09:41:00

仅个人观点

校园里的义务教育

首先,我支持义务教育的普惠性。现代各国的义务教育,也就是K12教育,可以覆盖从5-6岁的幼儿园(K)到高中(12年级)。教育当然是非常有必要的而且最好强制性的,但是一定要关起门来在封闭校园里受教育吗?

这套体系的义务性,源自于普鲁士的士官传统和军营教育。当年这事儿出发点没啥问题,但是到21世纪的大城市里,成为城镇居民育儿最大的负担。经费问题先不说,首先就是接送问题。上学、放学这个时间问题就至少要耗费一个成年劳动力脱产,校车制度和孩子自行出门回家基本看不到可行性。

如果你给孩子辅导过作业就会发现,现在的统编教材是反智、反自学、反人类的。老师每天发的各种填表、通知比学科本身问题还多。城镇的孩子早就高度个性化差异化成长了,学习进度反而非常僵硬死板。成绩差的跟不上,成绩好的无法掌握更高级的知识。整天都是一个流水线作业和非标件不适配的拉扯。

抱着「干不好就别干」的心态,在资讯如此发达的今天,我觉得应该把「义务」,改成 opt-out 模式。也就是对于有条件的家长,只要教育部门能把控最终毕业会考成绩就行,而不是必须按学籍在指定学校坐满9年板凳。的允许民间办学和home-school按照自己的节奏去学习和成长。到了法定年龄,不能通过会考的,做一些处罚或者补救措施。

当然有人会说了,这样搞,会不会乱套?不利于集体生活,不利于团结稳定。这样的问题当然存在,可以小范围试点,按地区不同政策嘛。归根结底这是ruling class需要考虑的事,各位要杠,我只能说京爷您说的对。

“童工”问题

我觉得,孩子要么纯学习,要么纯玩,这种二元生活持续整个童年是有害的。更好的方式是,在劳动中学习,在实践中收获回报和经验。说得好听点,支持“勤工俭学”。说的更通俗点难听点,就是应该允许“童工”。这个话题可能会造成很多人敏感和不适,但是先别急。童工的准确定义,是:

剥削性质的劳动导致孩子无法获得教育,或者精神/身体/社会/道德 上受到侵害。
the exploitation of children through any form of work that interferes with their ability to attend regular school, or is mentally, physically, socially and morally harmful

现在发达地区要找一个体力剥削活儿也不太可能了,重体力活儿,你身子板儿不行,雇主还会嫌弃你。

反而是儿童的心理、社会压力很大。其中一个原因就是青春期那股劲儿没地方释放。所有的回报和赏赐都来自老师或者父母。老师和父母是典型的绝对权威,从原理上来说就是不平等沟通,诉求有不可调和的矛盾。这种人造的依附关系是高高在上、理性铸就然而架空的幻觉,这座精心维护的象牙塔会在孩子毕业那一刻轰然倒塌。孩子真正进入社会会有一种「原来是这么回事」的幻灭感。如果说高考填自愿是几乎茫然的状态去碰运气,那么应届生选择岗位更像一场赌。

这个问题放在长远的人类历史压根就不是问题。自古以来,孩子都是跟着父母叔伯学习生存技能的,一个家庭本质就是一个小产业群体;脱产的学校,这玩意是近现代产物。龙生龙凤生凤,老鼠的儿子会打洞,子承父业这看起来是天经地义的事。现代很多职业分工是非常精细以至于达到变态的程度,孩子要直接上手父母的职业几乎不可能,更多依赖长久的教育和培养。

农村的孩子一般从下地就开始干农活儿,城镇的娃从小接触商业那也是理所应当,甚至是必须的。比如父母开了店,孩子在暑假帮忙照看一下是很常见的。这些显然不算「童工」。基于类似的道理,没开店的家庭,支持自己娃从事一些差事,能获得一点物质回报,经历一些at stake的挣钱、交易、谈判技能肯定比看电视傻笑强。

国内的例子就勤工俭学,国外也有 boy/girl scouts 卖饼干,糖水这样的活动。

可能你觉得这个想法不痛不痒也没啥毛病,那么问题来了:

你是否支持未成年人开通收款码、打赏账号,成为有限责任的自然人/法人?

你可以说,不支持,因为法律不允许。那么接下来的问题是:这样的「保护」立法放在21世纪今天是否依然是必须的?

孩子的自我

可能有人会问,除了获得一点收益,然后呢?之前跟一个朋友聊天,他吐槽说,马斯洛那套 「人最高的追求就是自我实现」 是假的,因为他研究这么多年,发现人其实没有自我。看到这问题,我想了下,回复他,重点不是自我,是实现。

这个姓马的可能功夫不如另一个姓马的。另一个姓马的26岁的时候,向全世界宣布了他的理论:人如果不打工,就会感觉不开心。

以前初中时,政治老师也这样照本宣科,说劳动是人的权利,是每个人的需要。估计现在绝大部分人看到这个理论,都会哈哈大笑:“这个权利谁想要我让给他,我希望有人能把这个权利给我剥夺了,我不想劳动!哈哈哈哈。。。”

这个话题叫「劳动的异化」。对这两位姓马的说法,我有一个最浅显的解释:

人,是闲不下来的。总得找点事来霍霍。

人要实现的不一定是自我,而是实现一个想法。这个想法可能睡一觉第二天就发现很蠢,但依然是昨天「自我」一方面的冲动。所以「自我」是否准确存在,不重要。重要的是你起了这个心思,然后干成了。

不得不说,劳动是人的本质特征,是人的"第一需要"。吃喝繁衍,那只是动物性。人性的体现是在「衣食足」之后,而知荣辱。

人在劳动中,是需要肯定自己的,而不是否定自己。人要通过劳动感到幸福,而不是折磨。是不断发挥自己的聪明才智,而不是受到打击和摧残。

学校高墙里的教育和考试,是不是也越来越异化呢?所以娃在学习之外的劳动,就显得非常有必要,而且长期缺失了。这里的劳动,也就是「做自己想做的事」。需要鼓励娃去尝试一些学科考试成绩之外的挑战,自我实现。如果这些兴趣恰好也能在成年之后从事相关的岗位,养活自己,那不就更好了?

结语

总的来说,未成年人强制去学校,和禁止劳动 这两大因素,加重了家长的负担,对娃也没啥好处。

Making subprocess async friendly in Python

2024-06-22 12:26:00

It's been a while since i wrote something in English, mostly because there's nothing really interesting, until now.

Occasionally, when facing a long running task in Python, I would choose either a distrubuted tasks queue system, or for the convenience, just the subprocess module. It's built-in and well designed for grabbing outputs of a child process running for a short period of time.

But what if the child-process takes a really, really long time? In my case it's an expensive query, or some CPU/GPU intensive task, which needs to be launched from a running Web framework, like FastAPI.

Popen() fire and forget

if child-process's output, end state and the return code are irrelevant, a simple Popen would do

subprocess.Popen(..., stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

The problem is, after the child-process finishes, it will hang as a zombie, because the parents refused to claim its exit status. To fix this, add an extra parameter in Popen() like subprocess.Popen(..., start_new_session=True)

And write a simple loop periodically check for WNOHANG

while 1: try: chpid, retcode, res = os.wait3(os.WNOHANG) except ChildProcessError: break sleep(5) if chpid == os.getpid(): do_sth() break

This can be done using BackgroundTasks in FastAPI/Starlette.

In a way, the child-process hebaves like nohup or screen/tmux, running in a detatched fashion.

If you hate this many lines of code, just subprocess.run("blah.sh &", shell=True) and wrap your commands in blah.sh

Make .communicate() async

Sometimes I need to monitor and handle the stdout/stderr of a child-process, like forward the outputs as an EventSource response to the browser.

First I tried .communicate() it will block until the process quites.

Then I tried Popen.stdout.read(), it will also block. Eventually I found a great hack from Stackoverlow like this:

p = subprocess.Popen(
    cmd, bufsize=0, text=True, stdin=subprocess.PIPE,
    stderr=subprocess.PIPE,  stdout=subprocess.PIPE, close_fds=True)
fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)

Now p.stdout.read(1024) would return immediately, or with a TypeError bnecause internal messed up with None as non-blocking empty return.

Wrap it with try...except inside a loop, it worked fine as expected.

When the parent process crashes unexpectedly, the child-process is still working, to detect this, just check for BrokenPipeError carefully in child-process and gracefully shutdown.

Solved with asyncio

I tried harder reading the official Python docs, turns out the most easy solution is already there:

proc = await asyncio.create_subprocess_exec(
    sys.executable, '-c', code,
    stdout=asyncio.subprocess.PIPE)

# Read one line of output.
data = await proc.stdout.readline()
line = data.decode('ascii').rstrip()

# Wait for the subprocess exit.
await proc.wait()
return line

I guess another lesson learned today.

人声分离简单评测

2024-06-21 22:48:00

娃要去表演唱歌,老师要求提供MTV。。 视频是这个,需要去掉人声部分

先用 ffmpeg 提音轨 ffmpeg -i v.mp4 -ac 1 1.mp3

微信小程序上的全是骗充值的,网上的服务:

  1. 没卵用 https://vocalremover.org/ 名气很大,搜出来第一就这个
  2. 没用 https://www.conversion-tool.com/karaoke/
  3. 卡死 https://www.songpeel.com/song-to-karaoke
  4. 要安装 https://github.com/adefossez/demucs
  5. 要6G显存 https://github.com/Anjok07/ultimatevocalremovergui
  6. 效果很好! https://tunebat.com/Vocal-Remover 推荐

看来人声分离,特别是童声,还是有点难。

最后把得到的 a.mp3 塞回去

ffmpeg -i v.mp4 -i a.mp3 -c:v copy -map 0:v:0 -map 1:a:0 new.mp4

btw 打了这么多网址,该不会被误认为SEO吧。囧。。。。

吐槽pynsq,另外给subprocess糊了一个异步

2024-06-21 09:30:00

pynsq太烂了

起初是因为需要在 Web API 里消费一个消息队列(nsq),给浏览器返回 EventSource 做实时输出。但是没想到官方库pynsq居然写得这么渣:

def _handle_term_signal(sig_num, frame):
    logging.getLogger(__name__).info(
        'TERM Signal handler called with signal %r', sig_num)
    tornado.ioloop.IOLoop.current().stop()

def run():
    """
    Starts any instantiated :class:`nsq.Reader` or :class:`nsq.Writer`
    """
    signal.signal(signal.SIGTERM, _handle_term_signal)
    signal.signal(signal.SIGINT, _handle_term_signal)
    tornado.ioloop.IOLoop.current().start()

这都什么玩意儿?一个库何德何能也敢去乱劫持 signal?最他妈逗的是这个库的推荐写法:

import nsq
r = nsq.Reader(message_handler=handler,
        lookupd_http_addresses=['http://127.0.0.1:4161'],
        topic='nsq_reader', channel='asdf', lookupd_poll_interval=15)
nsq.run()

这个 r 莫名其妙的就能跑起来了。真是魔法。anyway,在Web API兼容这一坨是失败了,爆了一堆错,对付魔法的办法就是隔离,所以打算糊个脚本,通过多进程+PIPE来得到数据。

给 subprocess 加一个异步补丁

糊的时候发现,subprocess 模块的 .communicate() 方法是 blocking的, 居然不支持 async/await,于是只能继续糊:

import subprocess, fcntl, asyncio
p = subprocess.Popen(
    cmd, bufsize=0, text=True, stdin=subprocess.PIPE,
    stderr=subprocess.PIPE,  stdout=subprocess.PIPE, close_fds=True)
fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
buf = ''
while p.poll() is None:
    try:
        # read() with O_NONBLOCK might gets None thus TypeError
        buf += (p.stdout.read(1024) or '')
        contents = buf.split('\n')
        if len(contents) < 2:
            raise TypeError('Not enough')
    except TypeError:
        await asyncio.sleep(1)
        yield None
        continue
    buf = contents.pop(-1)
    for x in contents:
        yield x

p.terminate()

这里用 bufcontents 是因为直接调用消息队列,每个消息都是分割好的;但是通过管道来读。得自己去处理字节流如何分割的问题,也就是传说简中特供的「粘包」问题。

另外子进程可能因为Web框架的种种原因,不自觉退出或者变僵尸进程,需要向 stdout/stderr 做输出的时候检查一下 BrokenPipeError 处理后事主动退出即可。

还有子进程如果输出完毕,需要代码里调用一下 p.terminate(),才能回收,避免变zombie

试了一下,也不是不能用,成功!正觉得自己又行了的时候,发现官方:

https://docs.python.org/3.8/library/asyncio-subprocess.html

啊这。白忙活。

超长待机 subprocess

想起来之前还有个问题,一个API调用一个subprocess,然后等它执行,不想管。这个时候可以加一个参数 detach 模式:

subprocess.Popen(..., start_new_session=True)

然后在同进程用里跑一个后台检查循环去检查子进程的 WNOHANG

while 1:
    try:
        chpid, retcode, res = os.wait3(os.WNOHANG)
    except ChildProcessError:
        break
    sleep(5)
    if chpid == os.getpid():
        do_sth()
        break

想了下好像也搞复杂了。要不直接跑一个 sh -c "blah.sh &" 算了。

如何删除 C:\Windows\WinSxS 文件

2024-06-14 22:50:00

天气热得心慌,看Win10不爽,决定删几个文件玩玩

  1. 首先你需要以 SYSTEM 用户启动 cmd.exe
    Win+R 敲入:
    "\\live.sysinternals.com@SSL\DavWWWRoot\tools\PsExec.exe" -i -s cmd.exe
    回车。确认当前身份敲入 whoami
  2. 夺权:takeown /F "C:\Windows\WinSxS\Backup" /A /R /D Y
  3. 授权:cacls "C:\Windows\WinSxS\Backup" /T /G SYSTEM:F /C
  4. 开删:rd /s /q "C:\Windows\WinSxS\Backup"

爽!

当然,你也可以让系统代替你清理:

Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase

很老的磁盘清理工具 cleanmgr.exe 也可以试试,删不要的程序 appwiz.cpl

老黄家的 DXCache 也十分让人不解。这破玩意还存2个地方:

  1. %LOCALAPPDATA%\NVIDIA\
  2. %APPDATA%\NVIDIA

老夫当年给 C: 装了个最慢的SSD,失策。去年(2023)那一波M.2降价潮一直等等结果错过了,拍断大腿追悔莫及。

chromium/libcef.dll真是毒瘤

2024-06-13 21:15:00

说@MicrosoftEdge

这他妈存3份,吃饱了?

说Epic Games

还能搞6份?真无语了。然后 icudtl.dat 以及 ICU 这一坨也是。

从 Leanote 迁移到 Obsidian

2024-06-10 22:21:00

差不多积累了10年的笔记,因为软件开发商跑路去做 2B 了,这玩意也没人维护了。换 Obsidian

Leanote 不支持导出 .md 但是它自己的格式就是 json,转换一下很简单。

  1. 把一个目录下的笔记批量导出为 Leanote 格式,比如导出到 /tmp/folder1
  2. 执行Python代码
    import json dir = '/tmp/folder1' for n in os.listdir(dir): if not n.endswith('.leanote'): continue with open(f"{dir}{n.replace('.leanote', '.md')}", "w") as f2, open(dir+n) as f1: f2.write(json.load(f1)['notes'][0]['content']) os.remove(dir+n)
  3. 你会发现该目录下的 .leanote 都变成了 .md。拖拽到 Obsidian 即可

希望对搜到这篇文章的人有所帮助。

挑简历看麻了,就业市场太卷了

2024-06-06 14:35:00

最近帮挑选简历,二线城市中低端技术岗,需求是上午发的,邮箱中午就炸了。这投递量给搞麻了,这也太多了。

想到什么写什么

几个感悟

  1. 第一,学历歧视是真的。本来还想看看能不能相中一个优秀的拼搏者。可能因为岗位要求不高,个个都很匹配。大家的工作经历都很丰富,也就是雷同。唯一不同的就这学历了。所谓的985 211不是他们实力强,而是名声显赫的院校到处刷存在感。如果你第一学位不如你的经历强势,建议把教育信息这一栏放到最后。不要把你的名字和学历挂靠得那么紧密!
  2. 简历技巧:一定要写清楚 求职意向 。因为筛简历的很可能同时有多个岗位,你 hint 一下,会更容易帮助阅读者理解上下文。最讨厌看到文不对题的简历。
  3. 经验书写部分,真的不要写参与过XX项目,用XX技术,基于XX,做过XX系统了。给人看麻了,关键字都快看得不认识了。这里我心里有一个严重的偏见,想很快找到亮点,快出来一个亮点给我一个不拒掉的理由!有的时候真的很难。当然,如果你全是亮点,反而觉得你有点作,会不会有所隐瞒?会不会有啥问题和不足?
  4. 面试的时候讲项目,很多时候陷入「述职报告」模式,说我们团队做了XX,我们做了XX,请打住。这里公司考察的是你「个人」能力,不要把别人的功劳给take credit。之前面试有人吹了几十分钟某分布式系统杰作,最后一问,居然是他来之前就有的现成的。啊这。。。。。
  5. 还是刚才那个问题,简历里的的项目如果很大,建议写清楚哪些部分是自己的,否则会让人怀疑是不是把整个团队的工作都当自己的成果了。不太真实。
  6. 技术岗简历真的不要贴大头照了。。除非你的长相能帮助工作。否则很容易让大脑暂停理性思考,进入感性的评头论足模式。
  7. 写XX能力强,能吃苦这种笼统模糊的,只能定性不能定量的,还不如不写。因为没证据。能力强体现在什么地方?吃苦有多能吃?沟通能力好到什么地步?
  8. 无论正序还是倒序,把公司和项目经历放在一起。比如A公司:项目1项目2,B公司:项目3。这样。特别是分开2页的,看的时候需要把项目和公司跨页按时间JOIN才能对应。职位全称不重要,职位干啥的,扮演什么角色起到什么作用很重要
  9. 行间距留大段空白纯粹是浪费阅读人的视力和时间。排版不用过渡美化,但是字体一定要统一,段落起止位置一定要对齐、对齐、对齐
  10. 能不能约到面试时间,有可能跟是否能订到会议室有关。

我发现,写简历的思考模式往往是:我有哪些NB的地方能添油加醋让对方相信,NB的东西越多越好

而简历阅读者的思考模式是:哪些东西和我手上的活儿最匹配?

从这个角度来说,根据JD定制一套简历是十分、非常、及其有必要的。没有关系的经历一笔带过甚至不需要提。

可能很多人写简历,出发点是,广撒网,海投,这一点对于竞争激烈的岗位来说万万不可行。你以为简历是「只要够匹配,我就有机会」。实际上简历如果多了,它压根就不是一个是否命中 yes/no 的问题,而是一个 ranking 问题。

任何事只要变成「排位」,那就很残酷,很竞技了。你不仅要达标,而且要考虑如何比别人的简历「更加」匹配。

招聘系统的吐槽

厂里的简历系统很多都只是一个 姓名-岗位-投递时间 三元组列表。这玩意压根就不能拿来做 ranking,只能靠筛选者的「瞬时记忆」。任何ranking,底层都是一堆权重的叠加,我不得不做一个 Excel 把候选人的名字放进去,然后几个考察点人别打分,最后算上权重,择优录取。

爆量之后,简历系统最大的麻烦,居然是去重。因为不仅有自投,还有渠道方帮助筛选投递的,同一个人,多个版本来源不同的简历,会先后刷出来。很是麻烦。名字不能保证唯一,pdf解析又麻烦,估计很多人懒得做。2333

除了上面的「量化」筛选决策的想法,还有然后对很多候选人其实很惋惜,也想跟对方反馈一下。但是又很懒。我想招聘平台应该提供一个付费功能,请筛选者指点一下问题所在,至少让别人知道哪里碰壁了。

正在加速崩塌的是「中文」,不是互联网

2024-05-23 15:16:00

看到一个说法《何加盐|中文互联网正在加速崩塌》,文章说

几乎所有在那个年代曾经红火过的中文网站,如网易、搜狐、校园BBS、西祠胡同、凯迪猫眼、天涯论坛、校内网(人人网)、新浪博客、百度贴吧、以及大量的个人网站等,在一定年份之前的信息都已经完全消失不见了,甚至大部分网站是所有年份的信息都消失了。唯一例外的是新浪网,还能找到一些十几年前的信息,但也是极少数的寥寥几条,其他99.9999%以上的内容,全都消失了。
为什么会出现这种情况呢?我猜想,主要原因可能是两个:一是经济原因。网站的存在,需要服务器、需要带宽、需要机房、需要人员运维……二是监管原因。

无独有偶,刷到一个帖子

2023-8-14 11:00梁博:Common Crawl中文数据提取出来了,做了去黄等处理,发现简体中文压缩数据只有6TB,解压后30TB左右,繁体压缩数据6TB。中文数据到2019年冲到一个最大值,之后就回落了,不知道2020年具体发生了什么事情。。中文网页数据还是有点凋零。是不是有些网站不维护了?

更大的问题是所谓科技巨头们自建高墙,把用户和内容视为自家资源,不支持互联网链接,公然且无耻地未被互联网开放互联的精神。你在 twitter 里面可以引用,加任意链接,信息自由流动。在微信、抖音、小红书里面试试?

twitter,或者说 𝕏,也开始建墙了。比如 nitter.net 就不允许使用了。walled garden 我觉得算一个因素但不是绝对因素,比如十几年前CCF和DRL这类封闭式论坛还是经常有人转帖出来,好的帖子转就完事了。依我看来,中文互联网的崩溃有两个因素,以及一个结果

1. 长截图的崛起。

HN有一个神评论,说hyper-text transfer protocol名不副实,信息传递都是通过screenshots transfer。这玩意配合手机那个破屏幕简直绝了。这不仅是国内的问题,国外ig (instagram,ins)、𝕏上的文字截图不要太多。这个东西一方面缺点就是无法根据屏幕重排版,看起来别扭,但是也有诸多好处:

  1. 保留了原始的文字和图片。富文本转帖一直是一个世纪难题,你去用js+html做一个rich text editor带附件上传的就知道多蛋痛了。还不如 .png 甚至 .jpg 一把梭
  2. 防止了文本传播中的添油加醋篡改。甚至图片都包浆了,都还是那个样。
  3. 最后,而已是最重要的一点,OCR技术不能 100% 准确率拦截长截图里的敏感词,很多截图 - 再截屏的二次传播使得md5, similarity-hash 都无法有效对抗热点事件的长截图传播。

总体来说,长截图是移动互联网的原生信息载体,文本不是。

2. 音视频的统治

回到正题,中文互联网 的确崩溃了,但是崩溃的是中「文」这一 文本 为主的形式。看看长短视频、直播网站的流量,即便墙和审核机制都挡不住国内外沙雕meme的传播。汉「语」互联网正在蓬勃发展。我举个例子。在过去带宽承载不起大流量音视频的年代,如果一个明星遇到绯闻需要澄清,那么肯定精心会写一篇媒体稿发出来,登报或者接受采访。最近的比如 汪峰承认与森林北恋情 ,女主Senlinbei0707选择直接拍douyin声明 。服化道、背景音乐、肢体语言、镜头这些,代替了纸和笔,输入法和文字段落组织

掌握和驯服文字成本极高,文字的消亡,语言和表演取而代之,是市井乡土阶级的崛起,搭建了一个跨越空间的超级熟人社会。但是唯一能跨越时间的可能只有高度信息浓缩的文字。然而,文字对于大多数普通人是无益的,文字的发明本来就是精英阶级用来和上天鬼神对话的工具,人与人之间的沟通,口语和动作就够了。

问题的关键:搜索引擎

“互联网正在加速崩塌”这一说法,很多例子就是XXX搜不到了。有没有可能,问题不出在资料,而是搜索工具?

搜索引擎在90、00年代是个稀罕货,那个时候SSD还没普及,信息检索是个高精尖的专业领域,但是随着 Lucene、Solr、ElasticSearch这一类免费的开源软件的普及,极大降低了自建搜索的门槛。

搜索不用集中了,内容网站都是自带搜索,还自带推荐系统,把ranking的问题也一起解决了。SEO和内容农场早就把公共、集中的搜索引擎干得生活不能自理了。ChatGPT这样的怪物出来之后,你还指望能搜到啥有效、真实的信息?

随着搜索引擎的没落,新的巨大缺口也在形成,比如刚才 森林北的视频,我们可以问以下几个问题:

  1. 她的口红色号是什么?
  2. 这片子的BGM是什么?
  3. 她自己列举了多少家公司或机构,她分别属于什么职位?

这些都是需要去端到端 infer 的。也是一个技术创业的点子和机会。以后存的信息都是向量,token会取代文本。

aftermath

感觉说了这么多,无非在纠结「文本」或者「文字」这一概念本身。但是我觉得钻这个牛角尖是非常有趣的。

文本实际上就是人脑活动的压缩,对信息的概括。这是transformer架构和语言模型对我的一个巨大启发。这个有损压缩,丢掉的是什么呢?情绪和环境上下文,也就是亲切感。如今的音视频把这一最古老的人类群居基石——聊天拉回现实,放入口袋里那一小块屏幕中,怪不得雷军、周鸿祎这样的老人都出来当网红了。人一辈子可以通过读文字了解很多知识,但是「邓巴数」这个东西,决定了你一辈子的注意力只有150人。

人们对互联网的期待显然可以分为两种:一种是客观的,工具性质的,严肃话题研究。这就是过去USENET和UGC的宝藏所在;另一种,人们是为了瞬间的快乐,长时间的归属感,去找认同的。这个时候,互联网提供了多彩的屁股位置选项。过去,没人知道互联网上对方是不是一条狗,现在,没人在乎你是不是沃尔玛购物袋,但是这并不妨碍网上武装直升机们为这事吵得不亦乐乎。

记录一个噩梦

2024-05-07 21:20:00

今早凌晨,从噩梦中惊醒,然后就一直辗转反侧睡不着;可能因为年龄大的缘故,我经常能意识到我在做梦,所谓 lucid dream,遇到好玩需要继续推进情节,不会太追究是否真的清醒,反而会不自觉的去脑补当前梦里剧情的合理性,所以下面很多时候是插叙。

出场大概是和家人挤在一间熟悉的高层小区的老旧房间里,惊恐的看着窗外昏暗的天空。可能因为昨天晚上打了一会FPS,加上前几天看了《Dune II》这部电影,对杀戮环节很有代入感,所以不知不觉从那里搞到了一把步枪,装满了子弹。

这时窗外突然突然钻进来一个人影,我嘀咕到,现在已经 天下大乱,是末日劫生;眼前这个如同丧尸一般爬行的人,正在扑向我的奶奶,这个人看上去非常瘦弱,我操起武器一阵突突突,放倒了眼前这个威胁。

房间被弄乱,窗边墙角一片狼藉,地上还躺着一个狰狞的 ragdoll 需要得处理,重点来了,攻击性这么的强,这个身躯却比正常人小很多,十分的瘦弱,我甚至把他身子头和腿对折,就像一张纸一样。然后单手轻松将其拧起来,像往常一样把他带下楼,扔进了垃圾桶!一个鲜活的生命就这样从我眼前消失了!

这个突然出现情况,让我心脏扑通扑通的跳,直接给我干惊醒了。半睡半醒迷迷糊糊之间,我又开始怀疑为啥会有这样的 丧尸 从高层建筑的窗户突然出现。可能是最近看了太多五代十国和南北朝之类的历史惨剧视频,我便开始就地分析此情此景的合理性,结论是——裹挟。

在古代,遇到荒年,正常的社会秩序被打破,就连最基本的粮食生产,都会遭到莫名其妙的武力干扰或者霸占。自身难保之后,所以很多人干脆一不做二不休,从劳动者变身为掠夺者。但是人总是要吃饭,饭又不会自动从地里长出来,怎么办?抢。所以就回到了开头这样的,去抢我这类正常生活在小区里居住养家糊口的人。掠夺者相互攻伐,让瘦弱得不行,饿的没法再饿的人,去小区里抢食物。因为太虚无法暴力突破正门,只能从顶楼往下爬看到打开的窗户趁虚而入。被破坏的家庭如果不幸被击垮,无以为继,没了希望和出路,又只能加入这样的劫掠行为,所以规模越来越大,直到所有人都绝望,没了最基本的社会秩序和个人尊严,只有无处不在的压迫和窒息。

我又想起来废土世界各种影视作品,想到这里感觉挺合理的,就又睡着了。。。。。。

起床之后,这个噩梦吓得不轻。以前我觉得做清醒梦太好玩了,能意识到在做梦,可以随意发挥做一些危险而平时不敢做的事,比如跳崖,比如飞行,比如暴力。不用顾及白天的压抑。但是现在看来做清醒梦太可怕了,我个人而言,能识别出清醒梦,根本原理是认识到眼前的事物不合理之处,得出只有在梦里才能发生这唯一解释,然后就开始放飞自我。但是人脑是会玩的。你玩呀浪呀,它会给你编造一个无解的噩梦,让你无论怎么选择都是一条死路。在残酷的绝望中让你大脑死机醒过来。

现实是荒诞和不可理喻的。成年人的世界是建立在一些不经意的谎言之上,所谓共同想象体。很大程度上,这些偶然和不合理性,才是给了我们短暂的幸福和苟且;纯理性构建的世界,比如我这次的梦境,如果稍有差错,钢铁一样的因果齿轮只会把你一切梦想和希望碾碎。天地不仁,未来的真实世界或许是残酷的,所以珍惜当下吧。

信息噪音时代的悲哀

2024-04-03 16:21:00

书接上回,小米汽车发布以后,和家人聊这个话题,突然发现一个问题,孩子对车这玩意很不了解,也不感兴趣。

我记得我小时候,对机械结构的东西很着迷,很喜欢抱着一本杂志看这种拆解图研究半天。

虽然也没能看出个门道,但是哪个男孩子能拒绝一张精美的跑车海报和原理图呢。那个年代我可能会对着一个跑车+美女的年历发呆,可能也就是那个时候对商品社会、工业设计产生了向往和憧憬。现在的孩子们对现实中车的品牌和了解可能也就局限于身边见过的和手机上刷到的。比如我家娃最羡慕的车,是有鹰翼门可以向上开的 Model X。但是对汽车工业和跑车的认识很少,不如我们小时候那么津津乐道。

想起来我们小时候信息很匮乏,大家都通过报刊、杂志了解外部世界,特别是从没见过的欧美的汽车、飞机反而观察得特别仔细。美军飞机有多少个型号、有几首航母都是放学和下课时间讨论的话题。

现在的孩子,比如我家,对电子产品控制得比较严格,电视也没有怎么允许看,除了书本还是书本。其实对外界了解的渠道反而比我们那个时候少得多。传统的报刊杂志有一点好,第一它是每周每月更新的,第二它的编辑是有一定文化水准和见过世面的,比如介绍汽车肯定会顺带介绍下汽车工业的历史、这个品牌的成长和背后的故事。现在的抖音、b站等充斥的都是调动情绪的短期热点话题,缺乏一个静下心来去琢磨和思考的「大画面」和「大背景」,以及人们是通过什么样的努力和付出,才能「创造」出来令人欣赏和惊叹的作品。比如小米汽车,网上甚至连一个把时间线串起来,讲讲设计过程那些不为人知的故事的报道都没有,唯一采访了设计师 李田原 的媒体,居然是车托之家

采访也是问了几个不痛不痒的问题,主持人全程玩手机都不舍得正面看设计师一眼。而且视频播放量极低,压根没人能刷到

我觉得信息时代的悲哀莫过于此了。什么样的东西都能找到,但是孩子很难从这样的环境里挖掘到那些启发、振奋人心、能畅享未来的东西。也没有人会整理这些东西。喧闹的视频一看就忘,我们再也没有一张画或者文字让人细细品味和反复琢磨的时光了。