This blog is rated 🔞, viewer discretion is advised

为什么拜登这么喜欢说别人 Genocide

今日键政一把,看到几则新闻

老B登又说别人 Genocide 了。之前不是说大西北也在 Genocide,国际舆论上tg被搞得灰头土脸。

其实乌克兰这事吧,俄新社在《俄罗斯的攻势与新世界》一文的说法是:

俄罗斯正在通过将俄罗斯世界、俄罗斯人民团结在一起--大俄罗斯人、白俄罗斯人和小俄罗斯人的整体性,恢复其历史的整体性。

所以一个种族自己人打自己人,怎么能叫种族灭绝呢?

这个问题其实出在 Genocide 这个词的内涵上。这个词不是指一般的种族灭绝,而是特指二战希特勒式的纳粹毒气室种族灭绝,是个专有名词,这词来源是波兰学者描述 亚美尼亚大屠杀,词根是希腊语 γένος (génos, “race, kind”) + 拉丁语 gēns (“tribe, clan”), whence genus) + -cide (“killing, killer”)。所以本意是「部落屠杀」的意思。老美一说起这词,就是对纳粹那种刻骨铭心的恨。

那为啥不说 mass killing 或者 ethnic cleansing 呢?今天学到个有意思的互联网现象:Godwin's law 意思就是网上对喷,往往以一方指责对方为 Hitler 或者 Nazi 结束。归谬为 reductio ad Hitlerum。为啥希特勒这么拉仇恨?我觉得启蒙运动以来,欧美基督教式微,以前人们心里坏到不能再坏的终极大坏蛋是撒旦,世俗化之后出现了个希特勒这种闻所未闻让老欧洲斯文扫地的老坏B。所以Hitler四舍五入就是还在世的人们能称呼得出来的最坏的不能再坏的究极坏蛋了。

面对网上或者国际政治面红耳赤的争执,喷不下去了,怎么办,一顿戴帽子抹黑就完事了。

所以为什么 Biden 为什么喜欢说别人是 Genocide?因为喷就完事了。

这是个谁喷的嗓门大谁有理的时代。


又看到一篇文章《美国在过去10年蠢得与众不同》,这作者慧眼如炬,通篇金句迭出。推荐全文阅读,这里摘录几句:

historically, civilizations have relied on shared blood, gods, and enemies to counteract the tendency to split apart as they grow 传统社会,靠血、神和战争产生凝聚力;
Social scientists have identified at least three major forces that collectively bind together successful democracies: social capital (extensive social networks with high levels of trust), strong institutions, and shared stories. 现代社会的凝聚力主要靠三类支柱:钱、权和背景板。

这里的钱就是资本、商品和贸易的流通;权就是深入到毛细血管的统一社会治理机构和建制;背景板这个是意识形态玄学,所谓「想象的共同体」。

社交媒体的出现打破了这三个支柱。点赞和 share 不仅仅是一个信息,而传递的是一个「态度」

Later research showed that posts that trigger emotions––especially anger at out-groups––are the most likely to be shared.

只有让人愤怒的东西,才值得 like,share 和传播。有多少光鲜亮丽的网红和爆文,就有多少没能讨好读者的失意的争吵、声讨和挂人。

This new game encouraged dishonesty and mob dynamics: Users were guided not just by their true preferences but by their past experiences of reward and punishment, and their prediction of how others would react to each new action.

在这个机制下,人们 like/share 的出发点不再是自己的客观选择,而是尽量对抗这个like/share游戏的奖惩结果,你在意的不是对帖子内容本身的喜欢,而在意的是别人如何看待你的喜欢/不喜欢。

The newly tweaked platforms were almost perfectly designed to bring out our most moralistic and least reflective selves.

金句来了:时间轴排序和推荐算法,最终演化成尽量标榜自己的道德评判标准,而不是自己的反思和进步

比如以前网上看到一个新奇的东西,你会发出感叹,表达收获,学到了新东西,新知识,拓宽了自己的视野,映照了以前的自己;现在网上看到一个东西,你是在拿它和自己的道德做比较决定它是否 worthy。基督教那边好像有个说法是只有上帝才有资格 judge,现在是批判权下方给所有每一次 like 和 share 的点击。

The key to designing a sustainable republic, therefore, was to build in mechanisms to slow things down, cool passions, require compromise, and give leaders some insulation from the mania of the moment while still holding them accountable to the people periodically, on Election Day.

美式共和国(aka 美式民主),是建立在妥协的基础上的,这里是团体和团体团体之间的妥协,每次选举换届就是一个算总账的周期,社交网络显然打破了这个容宽度,右派的做法是发展 conspiracy theory,左派的做法就是 cancel culture。

When Tocqueville toured the United States in the 1830s, he was impressed by the American habit of forming voluntary associations to fix local problems, rather than waiting for kings or nobles to act, as Europeans would do.

这文章看完之后,只有若干感叹。我们身处这个时代的变革太大了。小孩子面对的是大人世界的冲击。

而人的智商发育是缓慢的。人的情绪和直觉是几乎实时的系统,而且是一个简化版的应激反应,在一个容量有限的寄存器上处理数据;人的理性是缓慢的 IO,需要综合各种因素随机读写才能 事后 做出判断。有太多的时候我们被眼前五花八门的带节奏冲昏了头脑。而且洗稿和内容水军机构又可以无限制的滥发内容,超额的天量让信息通货膨胀。由于人脑 buffer 的有限,所以强化一个谎言和错误认识最简单的办法就是重复,直到大脑溢出。。。。2333

Posted

stderr

4则关于 秩序 的段子

迦南讲经

第一个段子找不到了。好像说是如来佛让迦南去讲经,迦南出门的时候拿错了经书,结果到现场一看是一本无字经。于是就在现场傻站了2个小时。佛祖最后不仅没有责怪迦南,还赞扬了他。说经虽然没讲,但是守了按字讲经的规矩。

阳虎出逃

当年鲁国内乱,阳虎出逃,有个好心的看门人防他出城,他反手把看门人刺伤之后逃走了。后来所有的看门人都被惩罚,唯有这一个被刺伤的受赏了。为什么这个看门人能够受赏?因为他通过受伤表明自己尽了最大的努力,没有破坏上级的命令。

来自 zhihu

东航 MU5735 和 “作风整顿”运动

这里不得不提实行了好几年的“作风整顿”运动,无论啥事都能扯到作风问题上来,还特意出了一个《无后果违章清单》,就这半年来,有起飞构型警告测试响了把机长撸成副驾驶的,有忘记做操纵检查把教员撸成副驾驶的,还有因为没戴飞行帽把一个副驾驶停飞半年的,惩罚极其随心所至!基本上就是领导一发火就把你从头撸到底!根本不按规定和手册来,而我们公司的手册里,是明确写明什么等级的差错是怎么处理的,目前状况是公司领导随心所欲,层层加码,一言堂!

来自 zhihu

评论区更是精彩

Long2Lees 回复 洗洗呀:别了,不只是你们,只要是国字头的基本上都是这样,行政碾压技术,管你技术部门死活,我行政就是牛逼,专门收拾搞技术的
03-29 知乎用户:东航本来就属于那种能不坐绝对不坐的航司
03-29 blueseason 回复 小川 :听说绩效奖金是按飞行时长算的,所以很多机长能飞多慢就飞多慢,所以我这几年拒绝乘坐东航[飙泪笑]
2022-03-30 00:08 Ferryman 回复东方红 别人真没尬黑,东航确实是按任务时间来算绩效的,所以在滑行阶段东航几乎就是最慢的,你去听ATC就知道,地面经常叫东航滑快一点
2022-03-30 00:30 blueseason回复东方红 那就是你孤陋寡闻了,别家航司飞八九百公里的时速,东航经常飞六百公里的时速。网上放出来的ATC录音里都有空管受不了催东航飞快点,其他机长直接问空管前机是不是东航的,确认之后直接的回答就是:那难怪了,大家都晓得,东航的嘛[飙泪笑]
2022-03-30 04:43 小羊和大白 这十来年荒唐的事岂止是你们民航行业。。。我们干金融的见的更多啊。。。真的不敢说但是太荒唐了
2022-03-30 08:36 知乎用户知乎用户回复小羊和大白 民航业出事要命,金融业出事各自自行上天台[飙泪笑][捂脸]
东伍德 想起看过的一个观点,当一个公司陷入困境,而管理层又很无能,不知道公司困境的真正根源在哪里,就会狠抓纪律制度和考勤。
vega 回复 东伍德差校总爱抓纪律………

想起一个填空题:

2022年1月10日,全国民航航空安全工作会议召开,民航局副局长作航空安全工作报告。报告指出,2021年是极具历史意义的一年。全民航扎实开展______学习教育。

答案见: http://www.caac.gov.cn/XWZX/MHYW/202201/t20220110_210844.html

最后一个故事 一个时代终结了

来自王烁 BetterRead

河朔旧事就是回到割据,军兵们比节度使还要上心,无他,服从朝廷的话,他们要失业,中央一直想裁各镇军队数量。收入会减少,一镇养一军,肯定养得比一镇既向中央交税又养一军要好。还得去打自己不想打的仗,西北的回鹘、西南的吐蕃,唐兵坟场。
成德反,魏博反,幽州也反。转眼间,河朔大好局面付诸东流。自此到唐亡,朝廷政令不过黄河,唐廷自然是失败者。兵变上来的一批又一批节度使也是失败者,他们被军队推上虎背,最后都被其所噬;乱兵也是失败者,无论谁上台,首先要做的就是杀光作乱之人。
职业军人获得自我意识,便成为最难压制的政治力量,一连串下克上,找不到停下来的均衡点。停不下来,便是大家都失败。

以最后一个故事最后一句话结尾:

一个时代确实终结了,但不是田兴和唐廷以为的那样。秩序正不可阻挡地奔向解体。

Posted

stderr

第一JWST张照片上的「星芒」

James Webb 第一张照片。还是调试对焦用的。

有意思的说它这个六边形的星芒。其实正如猜想的那样,是跟镜头光圈形状有关的。

这个视频讲得很透彻,3分钟。推荐观看。其实「星芒」,英语 diffraction spike(衍射刺) 是一种傅立叶变换,也是光是波动性的表现。

最有趣的地方:

  1. 星芒的角度应该是始终一致的。

  1. 波长越长,星芒伸展得越长,所以叠加起来内紫外红的彩虹色的星芒是 ok 的。

比如 Hubble 望远镜拍摄的这个

于是我联想到,国旗上咱们不是也有5颗星星么?hmmm 禁止联想!

via reddit, HN

Posted

stdin

情绪控制终端

在这个俄乌战火纷飞,国内油价高涨的季节,从各种消息满天飞的聊聊里得到一个痛苦的领悟。

在街上,在电梯,在身边形形色色的人,拿着一个200克左右的长方形物体,对着它欢笑,对着它愤怒,对着它沉默。

4G带来了移动互联网的繁荣,疫情带来了 WFH 和各种码的普及,男女老少的生活都围绕着一个东西展开——手机。

若干年后,人们会如何定义手机?这是一个微型个人电脑?通讯工具?互联网接入器?

我觉得有句话说得特别好,手机的本质是一个情绪控制终端。

这和之前的 PC+拨号上网时代有个本质的不同。PC 从根本上,是一个生产力工具,我们从小学习微型计算机是当做一种科研仪器,进出微机室都是防尘鞋套,键盘都是经过训练的盲打。

手机虽然架构也是冯诺依曼,但是这玩意被消费文化的厂家精心阉割成了一个单向接收端。这个阉割是从 Steve Jobs 拿掉键盘开始的。

Touch Screen,多么伟大的发明。这个发明经过 infinite scrolling 的市场校验,千锤百炼发展到极致就是 Tiktok ,让人们短暂的注意力变得更加集中,是情绪化的集中。手机的输入是什么?铁链女的文字,基辅的图片,喜迎油价上涨的视频。这些输入的传播,随着网速的提升和带宽的扩宽,加上国内从 MSN 时代就习惯了的即时群聊天,使得消息的传播几乎达到实时。如果你也有在微信里加入一大堆吹水摸鱼群,那么很可能你会发现所有群转发的内容是越来越趋同、时效性越来越好的。群里各色人等,对大部分消息的态度,都是崩,知道突破了激活函数的阈值蚌埠住,然后又转发给你的第二圈层、第三圈层群组。这些群组对这些话题的讨论和反馈,行程对你三观的冲击,最终的效果是反向传播,修正了你的激活函数阈值。

那么这一神经网络的输出是什么呢?

恰好,今天读到了某日更专栏 贾行家 的一段话

情绪,我认为,这是当下很多问题的核心词,是个基本的、没法回避的时代特征。我想你也有感觉:今天,不只文化现象,很多网络现象,都是被越来越单纯的情绪催动,越来越没什么道理可讲。我们好像生活在一团乱麻一样的情绪里,它的来历和问题各异,现代的、传统的,中国的、西方的,我在物质世界里愁肉身住的房子,我在网络世界里想刷存在感……咱们不着急批判,那要交给思想家,我们先看看这个情绪的时代到底是怎么回事儿?
什么是情绪?我这里的概括是:情绪是对追求单一目标的即时性反应。它是很底层、很原始的生理和心理现象,正面的像满足、愉悦、期待,负面的像嫉妒、愤怒、失落、恐惧,稍微复杂一些的有空虚、寂寞。总之,现实中出了一个结果,情绪上立刻就会起反应,但是也就到此为止了。
那么,流于表面的情绪为什么成了当下最主要的动力?
说个生活场景吧:我喜欢在地铁上看人,但是这些年没什么人可看了。十几二十年前,至少还有乞讨的,不是拿着碗和棍子,是挎着音箱话筒,边唱边要;还有卖报的,不知道为什么,无论什么时候,头条都是有关刘德华的坏消息。现在是人人都死盯着自己的手机,像要被吸进去了一样,神情木然,社会学家说这叫“昏睡性的呆看”,人在这种半休眠状态下,很难形成什么有意义的思想和情感。
这种状态下,大家心里涌动的只有情绪。这些情绪几乎是所有人共通的,没有善恶之分。比如说,一个人发张炫耀豪车或者新包的自拍,再配上段所谓“凡尔赛文学”的夸耀,传达的是什么情绪?都说是虚荣,但我想可能是孤独。细分析的话,这是由空虚和自恋共同在起作用,引起了刻板的自我复制,发这个的人,也没法从中感到真正的快乐,只能暂时压抑空虚感而已。

在《文化参考》里访问过人民大学新闻学院的董晨宇老师,董老师对当代传播有个描述:上个时代,媒介往往只是我们获取信息的一种工具,我们在使用它。而在这个时代,媒介变成了我们生活在其中的世界,我们就活在里面,跟着它变化。情绪化的现实来源相当深刻。我们早就生活在一个被现代科学探索和定义的,几何化、数字化的空间里,这个空间本身不存在等级上的高低,好的一面是“平等”,坏的一面是虚无,如今,问题没有变化,一切却被科技进步加速了,越是处在时代的前沿,你越去想“什么是生活的意义”,这件事就越诡异:你不细想,那什么都有意义,但多问几个“然后呢”,可能会发现什么都不确定。
先说一个比较简单的转化。有部日本电视剧叫《孤独的美食家》,没什么主线情节,就是一个五十来岁的中年男人,每天结束工作以后在大街小巷找饭馆儿吃饭,他的嘴很刁,还是好饭量,每次能吃两人份,这部电视剧就是让咱们看他一顿顿吃什么。我常想,假如我是电视台老板,十年前有制作人跟我说要投拍这么部戏,我的反应肯定是“什么鬼?”你总得给我个女主角和感情戏吧?我小时候,偷看别人吃饭叫“看嘴”,是最没出息的表现,会挨大人的打,这怎么能拍电视剧?这就是因为我没有把握到后面那种群体情绪。
《孤独的美食家》找到了一个很直接也很妙的方法,传达了都市职场人士,也就是今天自嘲为“社畜”群体的典型情绪。每集开头都有这么段独白:“不受时间与社会的约束,幸福地填饱肚子之后,在那一瞬间,他是随性而自由的,吃饭时不受任何人打扰,也不需要照顾他人的口味,这种孤高的行为,是每一个现代人都平等拥有的权利,可以称得上是最治愈人心的过程”。
《孤独美食家》的成功,就在于用最单纯的方式去抓最普遍的情绪,最基本的生理需求,把它迁移到孤高、幸福这些价值上去。
孤高和幸福是什么?已经不是情绪了,可以说是情感。情绪重要,但只有情绪的话,人永远没法成熟;情感是更高级的凝结,只有情感才能产生出道德价值和审美价值。

或许我们迎来的21世纪,就是这样一个情绪的世纪。mood。

Posted

stderr

Rimworld无损放逐殖民者

遍地都是疫情爆发,遍地都是HC被砍。在这个糟糕的时间WFT摸鱼发现一个神视频 Rimworld无损放逐殖民者

Rimworld 是一款模拟生存+基地经营类游戏,你需要控制几个「殖民者 Colonist」在一块荒芜并且危险的星球上生存下来。时不时有别的 Colonist 会要求加入,但是每一个 Colonist 都有有迥异的性格和技能,有些 Colonist 加入之后就特别不合群,惹是生非,这个时候你就想把他搞走

这个游戏有个神奇的机制,就是 Colonist 进来会交一帮狐朋狗友,关系度上升,你把 Colonist 弄走之后会影响他们心情值然后牵扯出一大堆麻烦事。

如何无损放逐呢?这个视频做了示范。先尝试拘捕TA,然后把他关在一个单身牢房里。

然后大家都在半夜睡觉的时候,召集别的所有的 Colonist 集体开会(征招备战功能),派一个人偷偷去把牢房门打开;

然后神操作来了,等这个开门的人回来,把这个牢房的床给撤销了。

于是这个 Colonist 发现,咦,我怎么没地方睡觉了。咦,牢房门怎么是打开的,要不赶紧溜掉。

于是这个 Colonist 就离开了大家,大家也没什么觉得奇怪的。

这个东西是不是游戏 bug 我不知道,反正我看完之后,太写实了,只感觉无比震撼!

Posted

stdin

猪 和 大雁

  • swine=猪(统一的称呼);
  • hog=家猪(年满18岁的猪);
  • pig=未成年家猪(未满18岁的猪,现在泛称猪);
  • shoat=已经断奶的小猪;
  • barrow=没有蛋蛋的公猪;
  • sow=成年的母猪;
  • gilt=没有生过孩子的母猪;
  • queen=没有性生活的母猪;
  • farrow=一窝小猪(或者是动词,指生小猪);
  • parcel=猪的复数量词;

当然了,咱们汉语里面也有类似绕人的。。。

  • 豚tún :小猪;
  • 彘zhì :大猪;
  • 豕shǐ :猪;
  • 亥hài : 猪;
  • è±­jiā :公猪;
  • 豝bā :母猪;
  • 豨xÄ« :大猪;
  • 豟è :大猪;
  • 豯xÄ« :小猪;
  • è±µzòng :六月龄猪;
  • 豜jiān : 三岁猪;
  • è±±wēn :头短猪;
  • è±¥gāi :四蹄皆白猪;
  • è±®fén : 阉猪;
  • 豛yì :猪;
  • è± chú :猪;
  • 豩bÄ«n :两头猪;
  • è±²huán :豪猪:

AcFun弹幕视频网

为什么汉语有总称“羊”而英语没有?

动物俗称不同于学名,原本就没有严格的分类标准。

  • 英语 mandarin duck 算是一种 duck,汉语“鸳鸯”就不带“鸭”字。
  • 英语 swan goose 算是一种 goose,汉语“大雁”也不带“鹅”字。
  • 汉语里“天鹅”倒是有个“鹅”字,而英语 swan 又没有 goose 了。

假如按照 ibex, goat(山羊) 乃至 sheep(绵羊) 都叫“羊”来类推,天鹅、雁、鹅,乃至鸭子,在汉语里也该有个“总称”。然而实际日常口语中并没有。因为给具体动物起名这事,有很多偶然性。压根没有绝对的道理可言。

最近常说的金钱豹(花豹),在东南亚普遍被称为某种“虎”。相当于“星斑虎”、“柴纹虎”之类。有哪些叫「虎」但不是虎的动物?

在汉语里,连形貌差异巨大的“长颈鹿”都叫“鹿”,而更接近麋鹿、马鹿、梅花鹿、驼鹿、驯鹿的“狍子”却被许多人当作另一种动物。
在英语里,roe deer 显然关联着 deer,而 giraffe 和 deer 看起来没什么关系。

汉语里完全不相关的两种动物,其它语言里的名字可能是相关的。例如西班牙语里火鸡叫做 pavo,孔雀叫做 pavo real,字面像是“皇家火鸡”或“真火鸡”。

汉语里视作同类的两种动物,其它语言里的名字可能是不相关的。例如日语里家猪叫做「豚」,野猪才叫做「猪」。无论是固有说法「いのしし」还是汉字音读「ちょ」,都对应的是野猪。「猪突猛進」-「ちょとつもうしん」,这里「猪」显然只能是战斗能力爆表的野猪
即便在同一语言内部,俗名体系也是乱的,很难逐一追出理由。

如果说长得像就该有总称吧,“狗”和“狼”似乎就没有总称。如果要说家养和野生有别吧,“猪”和“野猪”好像又有总称。如果局限在牲畜内部来看吧,“马”和“驴”似乎也没有总称。它们可比“绵羊”和“山羊”、“黄牛”和“水牛”相近多了。如果算上野生动物,俗名就更主观了,基本取决于最早给它起名的人先联想到的是什么。

比如“斑马”不叫“斑驴”,就让人感觉像是一种马而不是一种驴,尽管这三个物种谱系是并行的,斑马和马的亲缘,并不比和驴的亲缘更密切一些。

同是猫亚科的物种,尽管美洲狮 puma 不属于“狮”,起的名字听起来还是像一种狮子。尽管猎豹 cheetah 不属于“豹”,起的名字听起来还是像一种豹子。金猫、狞猫、虎猫看着更像猫,起的名字听起来就还是像一种猫。猞猁看着和猫差别有点大了,又不太像狮虎豹之类,就单起个名字。

和狗相关的动物就更有意思了,同属的狼不叫“某某狗”,同族的豺不叫“某某狗”,同科的狐不叫“某某狗”,反倒是根本不属于犬科,谱系八竿子打不着的 hyena 叫“鬣狗”。不知有多少看动物世界的小朋友,对鬣狗最初的印象,是一种丑丑的“野狗”吧。

Posted

stdin

牛津树/Good English/典范英语里的宗教私货

牛津树 Oxford Reading Tree 是被国内咪蒙妈妈们吹得油爆爆的来自英国的少儿学习体系,Good English/典范英语 是中青出版社的部分摘录英语教材。

偶然发现这个 牛津树【4-29】Mosque School,讲了一个叫 Adam 的学龄前儿童机缘巧合进了经文学校的短故事。甚至如果这是从古兰经某个传教段子改编出来的我一点都不惊讶。

引起我注意的是小白帽的装束,以及牌子那几个字 Masjid-E-Noorul Islam

费了点心思搜了下,也拼为 Nurul Islam 或 Nur ul-Islam,意思是 light of Islam 伊斯兰之光。

国内很多中专职高出来的英语老师可能没理解这里面的内涵。什么叫潜移默化植入意识形态啊?!当人们觉得这是文化「多样性」很正常?!以为清真学校就是普通的讲宗教的学校,其实经文学校传授的东西非常不简单。摘抄一些百科:

经文学校分为“地尼买克塔普”、“买德里斯”、“卡里哈纳”三种。
经文小学是中国伊斯兰教经堂教育建制之一。俗称“经学”。专为年满6~7岁的穆斯林儿童所设,多在清真寺内,少数系私人开办,在教师或师娘的住宅内。设在清真寺内的经文小学,教师皆由该寺教职人员担任。课程由认识、诵读、书写阿拉伯字母开始。待学会拼音之后便相继以《索尔夫》、《穆阿济》、《扎佳尼》、《阿瓦米勒》与《米苏巴哈》为教科书(俗称“连五本”)。进而开讲《亥听》(即《古兰经》选读本)、《古兰经》。经文小学的学童至10岁左右,率多辍学从事家庭生产劳动或参加社会职业,只有少数人转入经文大学,继续接受高一级的伊斯兰教经堂教育,被称为“满拉”或“海里凡”。经文小学没有严格的学籍管理,招生不定期,也不经过考试,辍学或退学甚为自由,没有班级排列。学童的进度不齐,故普遍采取复式教学法。另有伊斯兰教常识课程,每日放学前集体朗诵(系中国阿訇自编启蒙教材,俗称“杂学”)。“杂学”的内容包括沐浴、礼拜、斋戒、丧葬及游坟等宗教活动应念的都阿、苏赖。1911年辛亥革命成功后,一些设于清真寺内的经文小学开始聘请懂汉文的穆斯林给学童加授汉文启蒙性教科书。女童上经文小学率多在师娘私宅。学费没有定制,学童家长可量力向师傅(师娘)不定期地馈送海迪耶。

官方介绍可以参考 https://cati.nwupl.edu.cn/dtzx/hswx/10307.htm 中 「保守教派的兴起」 这一部分,维基百科 扎吉德 Jadid,民间经文学校初步观察

如果你觉得这样的东西堂而皇之放在英语教材里没啥问题。。。我也没啥好说的。。。

其中这一段比较有趣:

情况与当时还属于苏联的中亚五国是一致的。这个过程中,瓦哈比派(Wahhabism)因为主张“回到《古兰经》中去”,注重个人对经典的领悟而非学者的解释,门槛很低,容易接受

这不王阳明心学么。。。。释经权的下放和离散化。。。这后果。。啧啧。。。。参考之前一篇《中世纪中国的宗教改革》

Posted

stdout

徐州丰县,以及孝文化

先抬一张地图出来,

鲁苏豫皖四省,如果让你选一个最乱的地,你可能选哪里呢?

说起来,徐州对我的印象,只是《三国演义》上一个模糊的地理概念,第一次稍微立体的感受徐州,还是在《睡前消息29 · 没有“淮海省”,徐州还是有当“省会”的命?》上看到,徐州是一个距离周边大城市都非常远的人口又比较密集的城市。

后来,从罗辑思维·启发俱乐部·第26期:显性力量越大,隐性麻烦越多》上扒到徐州周边刷过的历史人物,就更印象深刻了

这里是砀山,刘邦拔剑斩蛇起义的地方,它属于安徽省,但它同时被另外三个省包围,北部是山东,东部是江苏,西部是河南。
从这个地方向东北,开车不到一个小时,就能到达江苏省的丰县。刘邦就是丰县人。辅佐刘邦建立汉朝的很多人,像萧何、卢绾、王陵也是丰县人。
丰县的东边是沛县,刘邦集团的樊哙、曹参、周勃都是沛县人。你可能会说,刘邦搞事业,拉着乡亲入伙很正常啊。
从丰县县城向东南出发,一个半小时车程就会到达徐州。在秦代,这里叫彭城,项羽建立西楚,都城就是彭城。奇怪了,为什么项羽的都城离刘邦家这么近呢?
继续向东南驱车一个半小时,会到达今天的宿迁市,在秦代,这里叫下相,项羽的故乡。你看,连项羽家距离刘邦家好像都不是很远。
然后,从项羽的家乡向西出发,开车一个多小时,就会到达安徽省灵璧县,“霸王别姬”、“乌江自刎”的故事就发生在这附近。
踩着油门朝西北走,不到一个小时,我们来到安徽省宿州市。在秦代,这里沼泽遍地,名叫大泽乡。没错,陈涉吴广起义,就发生在这里。
是不是觉得有一个问题已经呼之欲出了?秦朝灭国的可是六国啊。齐楚燕赵魏韩,那么大一片地方啊。但是怎么在秦朝末年找麻烦的就集中在这么一小块地方呢?那么大片的地方不出事,偏偏就这里出事?
对,佐竹靖彦给这一小块地方起了个名字:“泗水系月牙形水乡山泽地带”。
在那个时代,这个地方是一片月牙形地带,泗水河川行而过,地势低、潮湿,形成了大量的水乡山泽。在秦代,这里有个地方叫大野泽。听这个名字,你就能感受到三个特点:水多、荒凉、面积大。后来随着大野泽不断缩小并且位移,到五代的时候,大野泽变成了梁山泊。
一听到梁山泊,你就明白这个地方的意义了。官兵到不了嘛。

另外,徐州还是汉帝国的掘墓者曹操起家之处,唐帝国覆灭者黄巢朱温老巢,巨盗宋江也就是在河北、河南、山东、江苏交接的地方来回变动

然后结合时事,为什么这里拐卖人口多?

很多摸鱼群的分析是孝文化,传宗接代的思想在作怪,什么养儿防老,养儿挣钱,但读到2020年这篇Yixi演讲的文章,我就不淡定了

吴心越:养老院调查真相,让老人恐惧,问题严重性超出你的想象!

小时候,父母对孩子通常都是很强势的。但是随着年龄增长,你会发现父母对你越来越弱势,其实就是这个原因。养老院里那些无儿无女的老人,其实和学校里面的“孤儿”没有本质的区别,都属于被欺负的对象。在学校,父母是孩子的依靠。在养老院,子女其实就是老人的依靠。
哪怕有些子女很混蛋,很不负责,但他是维权的直接受益人。也许子女没有孝顺的动力,但是却有替父母维权的动力。越是混蛋的子女,战斗力就越强,父母出了问题,他们能把养老院讹到破产!
就拿护工来说,知道你有哮喘,偏要把你安排在通风不好的地方;知道你和谁有矛盾,偏要把你俩安排在一个房间;知道你腿脚不利索,偏要把你安排在楼层较高的房间;故意把你安排给有传染病或者大小便失禁的老人一个房间.....这种情况,尤其是在养老行业,从来就不是个案,而是普遍性的现象。
如果找院方投诉,就相当于把护工得罪死了,只要护工不被开除,如果不换养老院,剩下的日子,老人的日子只会愈来愈难过。
如果老人在外面有子女,起码护工还会有所忌惮,知道他自己做的太过分,会有人来闹,就会有所收敛。
这个时候,老年人有子女的最大意义,就是出了问题,有人帮你喊冤,哪怕他仅仅是为了搞一笔钱。

所以现在突然明白,为啥乡土中国,熟人社会,有拼命生娃的做法,讲究「孝」道了。这TM的是生存的最低保障,战略威慑能力啊。。。

如果说大型中心省会城市代表秩序和文明,那么徐州周边的几百公里没有大城市的平原村落里,就是社会正义能延生到的末端,这个时候,基层秩序只能由血缘绑定。即便是贩卖人口交换来的亲人。

Posted

stdout

今日笑点:网友指出cloudflared隧道ssh违反了TOS,被CF CTO亲自下场纠正

codingpanic 1 hour ago: I'm under the impression that this is against CloudFlare's ToS, otherwise I'd probably be doing it myself.
jgrahamc 56 minutes ago: That's for Cloudflare's CDN/reverse-proxy service. This is the correct one for Cloudflare Tunnel: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/license
neurostimulant 8 minutes ago: This seems to be the license for cloudflared. But when you use cloudflared to create a tunnel via cloudflare network, aren't you also bound to Cloudflare's ToS because the software itself is useless without using the service provided by Cloudflare?
jgrahamc 6 minutes ago: I am literally Cloudflare's CTO. I'm pretty sure I know that using Cloudflare Tunnel for SSH isn't a violation of our service.

真希望 HN 有个给 id 加备注的功能,大神太多了。2333

Posted

stdin

笑话了千年刻舟求剑,水面搜救的图案却叫Victor Sierra

今天的第一个收获,Victor Sierra这个搜救图案

来自 Why This Zig-Zag Coast Guard Search Pattern is Actually Genius - Smarter Every Day 268,是美国 coast guard 标准化的水面搜救路线之一。这种图案覆盖的面最大并且效率最高,而且最重要的一点,考虑到水是流动的,能够跟随一起漂流的相对速度去找到 PIW (person in water)

于是我就想起大家都熟悉的成语——「刻舟求剑」。这是2000多年前一个河南贩子吕不韦编的一个讥讽九头鸟的段子,由于这个成语太熟悉了,我甚至开始怀疑课本上是不是掐头去尾没讲完,跟之前那个「守株待兔」恶毒的政治隐喻一样,于是去翻了下原文。好家伙,不能说雷同,简直就是一模一样。它出自《吕氏春秋·察今》

察今一共三段,第一段说,按着先人制度惯性因循守旧的人都是大沙雕;第二段说,荆州人拿了过期的水文资料强行过河结果沙币了。第三段说,好剑要的是锋利,不必是莫邪的名称;好马要的是能行千里,而不是骥骜的名称。成就功名的人,就是老板的好工具人。然后就抬出来了著名的讽刺湖北佬的段子:

楚人有涉江者,其剑自舟中坠于水,遽契其舟, 曰:「是吾剑之所从坠。」舟止,从其所契者入水求之。 舟已行矣,而剑不行,求剑若此,不亦惑乎? 以此故法为其国与此同。 时已徙矣,而法不徙,以此为治,岂不难哉? 有过于江上者,见人方引婴儿而欲投之江中, 婴儿啼,人问其故,曰:「此其父善游。」 其父虽善游,其子岂遽善游哉? 此任物亦必悖矣。荆国之为政,有似于此。

第二个收获就是,果不其然又是一个阴阳怪气讽刺朝政的段子。看来每一个成语背后都有一个键政的动机哎。

第三个收获,没想到刻舟求剑之后,还有个「其父善游」的更离谱段子卧槽。。。

然后突然就想到了近期第四个收获,王中林院士拓展麦克斯韦方程组,在渣乎上看的一路下来,无论是懂哥,还是路人,几乎全是在喷。但是恰好就在 HN 有人投递了一则如何通过伽利略旋转和洛伦兹旋转认识特种相对论的线串

https://twitter.com/MarkusDeserno/status/1482811504424542211

其中从 arctan(m12) = arctan(m1) + arctan(m2) 推到 tan(x+y) = [tan(x) + tan(y)] / [1 – tan(x)·tan(y)]

再到 m12 = [m1 + m2] / [1 – m1·m2]

好吧,我也假装我看懂了!

最后一个感触,大家都顾着去看2500年前楚国人和当今院士的笑话了,却很少有人正面分析一下问题。

Posted

stdout

python-phoenixdb 设置读取超时

PhoenixDB 居然是基于 requests + pb2 做的传输层协议。连接的是 queryserver 的 http 接口

看 avatica/client.py 源码 可以得知这玩意默认是不支持设置read timeout的。强行hack一个:

import phoenixdb
import functools
c = phoenixdb.connect('http://localhost:8765/', autocommit=True, auth="SPNEGO")
c._client.session.request = functools.partial(c._client.session.request, timeout=2)

partial 这个神奇的魔法可以设置一个默认参数。其它地方传入了别的timeout也可以自行覆盖,无缝兼容。

Posted

stdout

信息时代 的 娃

家里的娃逐渐长大,TA在车上喜欢听的歌曲就翻来覆去奥特曼的 OP 和 ED。然后想引导TA 们听点别的,QQ音乐又没有买会员,一些好的大部头作品,能搜出来的就是各种翻唱或者自媒体的同标题蹭流量的垃圾作品,很无奈。

想起来自己小时候虽然家庭条件一般,但是也是买了收录机和一些经典磁带,能够把自己喜欢的歌曲反复听个够。反复听歌有个好处,那就是专注力的训练,和重复带来的高准确度记忆。现在的娃听歌,由于点播太方便,经常听一半就切歌,然后上一次点的不一定能recall点出来。还有版权的原因,前一阵加星的歌可能过一阵就听不了了。这样的环境,只能培养出很糟糕的听众和很低的欣赏水平吧。

也恰好从【箭厂视频】消失了20年后,中国黑胶唱片工厂复活 看到一个评论,很是有感触

ikyokyo 2017-08-18 13:27
作为一个黑胶时代过来,并且家里曾经有过黑胶唱片机的人,我想分享一些当年的旁门左道和玩黑胶奇技yin巧,这些事不是每个听黑胶的人都知道,有些人知道也不会说。
1.黑胶唱片机到后期,已经十分自动化了,按下播放键以后,唱针会自动挪到唱片开始的位置,然后缓缓下降,按下停止键或者放完以后也会自动停止并归位,一切都是由机械实现的。
2.换歌需要手动把唱针抬起来,然后把摇杆掰到对应位置,因为唱片不像CD那样有专门的区域存储时间码,至于怎么判断一首歌在什么位置,用肉眼看就行了,唱片的记录密度很低且都是明文,两首歌中间的空白部分由于没有声音,会有一条深色的印记。
3.同样地,你可以用肉眼看出音乐哪些地方是高潮,哪些地方是低谷,高潮部分因为音量较大,乐器较多,所以花纹刻得较深,安静的部分反之。甚至可以通过整个唱片的花纹判断是摇滚乐还是古典乐。
4.即使不插电你也一样可以听唱片,早年的唱片机就是这样工作的,而且有意思的是,如果你不接喇叭只开唱片机,耳朵凑近唱针那里依然可以听到十分微小的声音。
5.你可以在唱片机出于待机状态时,自己把唱针掰到唱片上,然后用手去转唱片,你将听到十分不均匀的跑调声音,你还可以把唱片倒转,就能听见倒放。还有一种变态玩法,就是把唱片故意歪着放, 这样唱片和唱针会来回摇摆,速度也会忽高忽低,一些老电影里可以看见军方或者坏蛋用这种方法折磨人。
6.唱片永远不会出现CD那种刺耳的磕绊,但唱片一样会卡碟,如果遇上唱片设计不佳,或者唱机故障等原因,唱针在放完一圈后又跃迁回去了,唱机就会在一小段旋律间反复循环,中间会有“嘭”的一声。
7.盗版唱片很难达到正版音质,因为盗版商除非跟唱片厂勾结,否则拿不到母版,所以说数字音乐时代的到来一定程度上是助长了盗版。

现在想起来,磁带/唱片/CD这个东西是有「灵气」的,是一个很好的交互体验:

  • 具体的歌集和磁带的实物是一一对应的,你在数码时代,你无法回忆起那个下雨天把磁带插入收录机的心情。
  • 数码时代没法根据封面检索。孩子们缺乏音乐对 visual 艺术上的关联。
  • 你还可以自由对歌曲进行翻录、对 instrumental/配乐版 进行自我陶醉的二创
  • 订阅制的streaming service,这对我们这一代习惯了 ownership 的人来说很不安。你购买了,不一定你以后能随时播放,你会员失效了或者账号被夹,你就不能听你「买」过的歌了。
  • 最重要的,孩子们对歌词是没有「字面意义」的理解,他们永远想不到我们小时候会为了一首喜爱的歌,在课堂上偷偷手抄歌词。

第二个故事,娃在一个玩具,百变魔尺,能自己编一个简单的刀剑、枪的形状玩,但是更复杂的结构就做不出来了。看到卖家秀的各种玩意很是想学会,但是视频动作太快,拍摄角度非常不利于学习。娃由于已经近视,所以对TA看LCD屏幕设备也是比较忌讳,所以只是给他看一会儿。于是我回忆起小时候拿一本折纸书反复琢磨,于是去 yangkeduo 上搜了一下纸质的魔尺教程材料,销量居然只有区区几十,我不明白成百上千的娃是怎么学会魔尺的高级玩法的。都靠自己琢磨吗?还是娃自己从手机/Pad上获得?

所以最近一直被这个问题困扰。信息时代对当代社会来说是怎么样的 impact。家长持有手机和数码设备,对着信息有绝对的掌控权,可以指定什么时候看什么东西,娃和我们小时候比起来,更像是家长和老师附庸,缺乏一个自由探索的条件。虽然网上好东西多,但是在TA们对自由点播和检索的内容有把控能力之前,TA们的资讯获取能力恐怕是及其狭隘和封闭的。加上国内的在线平台质量又参差不齐,容易看「歪」的东西上瘾。更不幸的是,他们这代人又伴随这平庸出版物的极大丰富,比如被很多人喷三观有问题的《米小圈》《姜小牙》,恰好是娃的最爱。对严肃(aka 枯燥)一点的纸质内容,他们又非常不耐受,有典型的数码戒断反应。唉。

这或许是我家娃自己的原因,或者是我作为家长的问题,但愿是我想多了

Posted

stderr

Zizek 和盗版

齐泽克先生在2007 年第一次到中国来访问,他在我们这里待了一个星期,他讲了一个故事,是跟中国有关的。他讲了什么呢?就是有一天,他在美国的录像店门口,看到这么一句话:“不要买盗版光碟,买盗版,就等于支持共产主义”。因为,很大一部分盗版光碟都是中国生产的,所以美国人非常恼火这个知识产权的问题。齐泽克跟我说:“一看到这个标语我就非常兴奋,我就偏要买盗版”。这是为什么呢,因为这些左派思想家有个非常重要的观点是,数码时代实际上是私有制真正破产的时代,因为复制太容易了。我们后面讲到鲍德里亚就会讲到文本的消失,就是拟真性是讲什么呢,是讲过去我们有个手稿,一写一个手稿然后很珍贵。现在我们有电脑,就大家在电脑上面写作业的时候有没有想过一个问题:以后我们是一个无档案的时代,因为你没有原始手稿,你最后交给出版社的,如果你没有故意储存,也就是说每修改一次储存一次的话,你修改的痕迹都没有。所以齐泽克在南京,他跟我讲,哪有卖盗版的?我就是要买!

从 如何看待俄虚拟主播因翻唱《喀秋莎》被索要版权费? 看到的 张异宾:《鲍德里亚:欢迎来到真实的荒漠——从电影<骇客帝国>谈起》。后者有从 尼康D800讲到奥迪A6讲到 iPad 非常有趣,值得一读。

Posted

stdin

Microsoft 官网的 403 错误

$ curl -H "User-Agent: User-Agent: Mozilla/5" -kvs 'http://www.microsoft.com'
*   Trying 118.123.102.107...
* TCP_NODELAY set
* Connected to www.microsoft.com (118.123.102.107) port 80 (#0)
> GET / HTTP/1.1
> Host: www.microsoft.com
> Accept: */*
> User-Agent: User-Agent: Mozilla/5
>
< HTTP/1.1 403 Forbidden
< Server: GHost
< Content-Length: 306
< Content-Type: text/html
< Mime-Version: 1.0
< Expires: Wed, 29 Dec 2021 14:42:28 GMT
< Cache-Control: max-age=0, no-cache
< Pragma: no-cache
< Date: Wed, 29 Dec 2021 14:42:28 GMT
< Connection: keep-alive
<
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;mscom&#46;errorpage&#46;failover&#46;com&#47;403&#47;403&#46;htm&#63;" on this server.<P>
Reference&#32;&#35;18&#46;1c697b76&#46;1640788948&#46;3b971c1f
</BODY>
</HTML>
* Connection #0 to host www.microsoft.com left intact
* Closing connection 0

不知道为何会指向 http://mscom.errorpage.failover.com 这域名也不是微软的。

Posted

stdout

Chrome 阉割指南

不折腾不舒服。继之前 Edge调教 之后记录一下 Chrome V70怎么阉割。

下载:

win 32 | win 64 | Mac

上面的链接已经年久失修了,对比了一下获取最新版本的脚本发现 Google 已经不提供老链接了。

curl -vsk 'https://tools.google.com/service/update2' -HContent-Type:text/xml --data-binary "<?xml version='1.0' encoding='UTF-8'?>
<request protocol='3.0' sessionid='{est-blog}' installsource='ondemandcheckforupdate' dedup='cr'>
<os platform='mac' version='66.6.6666.66' arch='x64'/>
<app appid='com.google.Chrome' ap='' version='' nextversion='' lang='' brand='GGLS' client=''><updatecheck/></app>
</request>"

安装完毕之后

cd '/Applications/Google Chrome.app/Contents'
touch Frameworks
sudo chown root:wheel Frameworks
sudo chmod 000 Frameworks

cd ~/Library/Google
rm -rf GoogleSoftwareUpdate
touch GoogleSoftwareUpdate
sudo chown root:wheel GoogleSoftwareUpdate
sudo chmod 000 GoogleSoftwareUpdate

Posted

stdout

认识「洋节」

都说 xmas eve 是洋节,我们就来数一数到底有哪些洋节

  1. 元旦1月1日。由北「洋」军阀袁世凯设立。依据是内务部总长朱启钤《定四季节假呈》,把原来农历(夏历)的正月初一的「元旦」挪用到了格里历一月一日。格里历(Gregorian calendar)引入中国是1912,元旦正式生效是1914年。
  2. 春节。严格的来说,传统春节是二十四节气中的“立春”,是太阳历。后来被袁世凯直接拍板成农历正月初一。而夏历正月初一一般被认为是最接近立春之朔日(月缺之日)。农历最后一次农历大改版为《授时历》,发生在崇祯二年(1629年)九月,由礼部左侍郎徐光启发起,编撰者:耶稣会的龙华民(西西里人)、罗雅谷(米兰人)、邓玉函(瑞士人)、汤若望(日耳曼人)。
  3. 生肖其实不跟农历绑定,而是跟 二十四节气绑定。二十四节气最后一次改版,也是上面那个《时宪历》那帮洋传教士定下来的。有意思的是,春分那一天恰好开始白羊座,其实我最近才知道二十四节气就约等于12星座,也就是黄道十二宫。如果要说农历《时宪历》含洋量太高,那么他之前的《授时历》编撰者是河北人郭守敬,生于元太宗(窝阔台)三年(1231年)于邢州,由他祖父郭荣(金国人)抚养成人,说起来这老兄甚至顺着蒙古人统治下的锡伯利亚去过北极科考,同一位尼泊尔建筑师阿尼哥合作搞过天文台,十分了得。
  4. 妇女节,全称为「“三八”国际劳动妇女节」。1857年3月8日,美国纽约的制衣和纺织女工走上街头,抗议恶劣的工作条件和低薪。尽管后来当局出动警察攻击并驱散了抗议人群,但这次抗议活动促成了两年后的3月第一个工会组织的建立。1917年3月8日,在俄罗斯帝国首都彼得格勒,纺织女工举行罢工及游行,遍及整个城市,也导致俄罗斯革命的开始。
  5. 清明节,二十四节气之一。太阳到达黄经15°
  6. 劳动节,1884年,劳动骑士团 Knights of Labor 倡导「8小时工作制」;10月,行会与工会联盟召开大会确定1886年5月1日为要求八小时工作制成为标准的日期,美国工会准备举行总罢工支援;1886年5月1日,数千名参加罢工和参加全美各地举行的集会的工人唱起了《八小时》(Eight Hour)一歌;接下来发生干草市场屠杀(Haymarket affair)。
  7. 端午节,据传是为了纪念恨国诗人屈原,来自「蛮夷」楚国
  8. 儿童节。1949年11月国际民主妇女联合会在苏联莫斯科所召开的执行委员会议,会上为纪念悼念1942年捷克利迪策村对儿童的屠杀及伤害,以及全世界所有在法西斯侵略战争中死难的儿童,为保障世界各国儿童的生存权、保健权和受教育权及改善儿童的生活,决议以6月1日为国际儿童节。1949年12月23中央人民政府政务院第十二次政务会议于日通过了《全国年节及纪念日放假办法》,其中规定6月1日为儿童节。
  9. 建军节,由 契丹苏维埃共和国 (Kitajskaja Sovetskaja Respublika, Кита́йская Сове́тская Респу́блика) 于1933年6月决定,将8月1日定为中国工农红军的建军节。
  10. 圣纪节,穆罕默德的诞辰与逝世恰巧都在伊斯兰教历三月十二日,回回三大节之一。

再说一下真正被 appropriation 的「洋节」

  1. 圣诞节。异教徒的节日,四舍五入冬至日,古埃及太阳神 Ra 的节日,被(东)罗马帝国拿来宣传成中东人耶稣的生日。。。摊手。。。比如犹太人就不过圣诞节,但是他们在这一天吃中餐
  2. 母亲节,由12岁女孩安娜·贾维斯(Anna Jarvis)发起,被商家利用,安娜用下半辈子反对母亲节
  3. 父亲节:抄袭母亲节。

Posted

stdout

如何可视化跟踪分析 Python import 耗时

首先在本地安装 pip install tuna

然后跑个分,需要 CPython >= 3.7,输入

PYTHONPROFILEIMPORTTIME=1 python3 myscript.py 2>1.log

tuna

然后 tuna 1.log ,会自动打开浏览器围观 import 耗时分布。

Posted

stdout

4句话自动换win10壁纸

  1. 获取当前用户 sid。cmd下设变量如此复杂。而且 | 的转义字符居然是 ^|
  2. 读取 LogonUI 的自动壁纸。reg query输出极其不友好。需要 tokens=3
  3. 设置为当前桌面。
  4. 刷新。这个属于按运气成功。真正刷新的需要调用 dll 。算了
for /f %%g in ('wmic useraccount where name^="%USERNAME%" get sid ^| findstr ^S\-d*') do set USERSID=%%g
For /f "tokens=3" %%k IN ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\%USERSID%  /s /v  landscapeImage /t REG_SZ ^| findstr /ri "REG_SZ"') do set img_path=%%k
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d %img_path% /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

之前的方法搞复杂了

Posted

stderr

FastAPI/Starlette支持静态文件支持SPA

FastAPI 官方支持 from fastapi.staticfiles import StaticFiles 充当一个静态文件服务器

其实实现是 starlette。这玩意可以在 directory 下放一个 404.html,恰好单页应用也需要用 index.html 充当所有 javascript 框架注册的 router

只是有一个毛病,这货返回的 HTTP status code 是 404。用起来没啥大毛病,但是就是浏览器不会记录网址,导致没法匹配浏览历史快速找到之前访问过的页面。

拿来改改继续用

  from starlette.staticfiles import StaticFiles, Scope, Headers, Response, FileResponse

  class StaticFilesWithout404(StaticFiles):
      async def get_response(self, path: str, scope: Scope) -> Response:
          r = await super().get_response(path, scope)
          h = Headers(scope=scope)
          full_path, stat_result = await self.lookup_path('404.html')
          if isinstance(r, FileResponse) and r.path == full_path:
              if 'text/html' in (h.get('accept') or ''):
                  r.status_code = 200
              else:
                  return Response('', status_code=404)
          return r

  app.mount("/frontend", StaticFilesWithout404(directory="frontend", html=True), name="static")

这段代码大概是起到了类似 nginx try_files 的作用。默认静态文件映射一个目录,但是如果找不到就按根目录的 index.html 输出。这里还判断了请求的 accept 头,如果是 xhr/Fetch 就会直接返回一个0字节长度无MIME的404。

由此我想到了一个学究式的 leaky abstraction。众所周知,如果一个URL不存在,那么服务器应该返回404

但是现在都是 SPA 单页应用,都是先 200 返回 index.html 的内容,再由 javascript 的 router 去决定是否正常显示还是404 。所以返回 200 但是显示 404 就破坏了这个语义。如果要精确匹配SPA里的router如果不存在由服务器返回404,第一是搞 SSR,把前端那一坨代码跑在服务器端,第二种办法是 npm build 的时候输出一个可路由URL列表,然后部署的时候导入静态文件服务器更新。这个具体实现就留作homework由读者自行解决了。

Posted

stdout