This blog is rated 🔞, viewer discretion is advised

穷人的supervisor OOM killer

厂里的docker上跑了个supervisord,用来把挂掉的进程拉起来。最近的问题不是进程挂掉,而是内存泄漏

跑着跑着内存爆了,然后宿主机OOM随机杀掉一个进程,结果占用内存最大的那个还活着,正常的进程反而gg,该漏的继续漏,然后反复OOM。想看下哪里漏了,--cap-add=SYS_PTRACE 也不给加,OOM策略也不给调,思来想去只能自己做防水补漏了。做起来也简单,supervisor再跑一套bash脚本即可:

while true; do
  p=`ps --no-headers  -xo rss,pid --sort=-rss | awk '{
    if($1 > 1000000){ print $2 }
  }'`
  kill $p 2>/dev/null || echo "everything fine";
  sleep 60;
done;

1000000 代表1G 内存。 sleep 60 表示 每60秒检查一次。

Posted

stdout

Windows 任务管理器(taskmgr.exe) 作者讲趣闻

下文出自 Windows 任务管理器(taskmgr.exe) 作者 Dave W Plummer

Windows 任务管理器(taskmgr.exe)趣闻:“保持简洁”

当你按下 Ctrl+Shift+Esc 时,winlogon 会启动 taskmgr.exe,并且它首先会寻找一个正在运行的进程实例,如果它通过了某些运行时检查,则激活该实例。这意味着激活任务管理器所需的时间,至少与读取exe文件的时间一样长,因此我想要保持它文件体积足够小。
故事是这样的,为了将整个东西保持在100KB以下(我记得它发布时是86KB),我无法负担得起链接CRT,但仍然想要使用C++。C++编译器假定CRT将被链接,以执行类似调用全局对象构造器之类的基本操作。因此,我最终做的是预先定义链接器需要从CRT中获取的部分,然后在运行时手动遍历链接器插入的用于初始化全局C ++对象表。基本上就算链接的时候,生成构造器列表,因为CRT不会调用它们,所以我手动调用它们。最终实现用上C++但不依赖运行时。
后来的我回顾起来为什么当时不直接链接到运行时dll,但我可能当时试图避免直接链接到除了user32gdi32之外的任何东西。我想,任何其他DLL都可能会挂掉。所以我甚至不链接到shell32,每次需要调用shell函数时我都手动进行 GetProcAddress,并且我在单独的线程上执行它,以防它返回超时。
我对这些事情花了不少心思,但至少在早期版本中,当内存紧张时,我认为这样做是值得的!如果你喜欢这些随机的历史趣闻,请关注我获取更多信息!

这位爷也有个 YouTube 频道 Dave's Garage 非常精彩!

Posted

stdin

LLM, RAG 和 Groq

最近跟朋友聊起LLM,RAG 究竟有没有用,能不能拿来做成产品或者服务。由于我对AI的了解也很肤浅,所以没太敢下结论。

但是今天突然想起一个趣事,相传 账单·大门 院士有一句名言「640KB ought to be enough for anybody」

这句话是不是他老人家说的不重要了,重要的是 IBM PC 的这个 640KB内存 的梗是绕不过去了。

后来发现 640KB 不够了怎么办?屎山上接着hack呗。于是发明了 EMM386 ,在CONFIG.SYS 里吟唱一句

DEVICE=C:\DOS\HIMEM.SYS

可以保平安。

如果人人都能用 Gemini 1.5 Pro 那个 1M context tokens, 那么 RAG 技术也没啥用了吧。猜想能用 RAG 卖钱的,估计跟定制 HIMEM.SYSEMM386.EXE 的市场一样。。。。。在 PC 普及的初期是一个神级,但是随着日本政府主导 VLSI产业+三星DRAM的崛起和价格战,一切都成了历史。


又想起另外一件事:Groq

也是啥都不懂,翻了些资料,发现比较有意思。CUDA vs Groq 可以看成DRAM vs SRAM。context window不足的问题:

疯石头 2024-02-23 02-21: Context window到100K后,即使batch=1,GPT-3级别的大模型,KV-cache占显存的容量已经比weight要大了。实际部署时batch size至少得64才能用上tensor core。4-bit quant可以降到1/4,GQA group=8时可以再降1/8,不过还是比weight要大。sliding window不可取,遗忘问题会完全丢掉long context的优势。

更详细的讲解:

https://kipp.ly/transformer-inference-arithmetic/#kv-cache

在zhihu上翻到一些资料说,LLM推理主要成本不是矩阵计算,而是 memory access。可惜帖子找不到了。

Posted

stderr

[ZZ]西周灭亡的根本原因是什么?

只想archive一下,原作者禁止转载,但是这样的好东西估计很容易消失。所以就无耻的复制粘贴了。

作者:于朝阳
签名:不读书,不求甚解。
发表:2024-02-21 16:09
IP属地:陕西

根本原因是——诸侯国向周天子要主权。
按照傅斯年的大东小东说,西周建立时,初封的齐国不是山东的齐国,而是河南南阳西的吕国。吕望那个吕。初封的鲁国也不是山东的鲁国,而是河南鲁山的鲁国。初封的燕国也不是北京那个燕国,而是河南的郾城县。这是周武王的初封。但后来平定三监之乱后,周王朝进一步向东夷区域深入,才将这些原本只是拱卫王畿的诸侯进一步远封到夷人区域。
比如山东的齐国原本是东夷的蒲姑国,鲁国原本是东夷的奄国,都是被周公和周成王相继平定的。但由于周初夷人区域仍然有大量的夷人,所以周初建立的更类似于一种殖民统治。即统治贵族是华夏族,而被统治的百姓是东夷。周初还保留着三代的夷夏东西格局,没有完成民族融合。
夏以水利技术立国,商以青铜技术立国,周以农耕技术立国。西周集三代之大成,技术水平与周边戎夷拉开了一定距离。所以周初在东夷的类殖民封建诸侯统治,总部对加盟店主要提供各种技术与管理支持。西周也靠这个庞大的朝贡贸易利益网来维系王朝的实力。所谓封建亲戚以屏藩周,本身就是剥夺了地方土著贵族做国君甚至国卿的权力,镇压压力不会小。诸侯只控制了城邦,但郊鄙广大的东夷人不一定诚服,所以诸侯国这些加盟店也非常仰赖西周王朝的支持,需要西周王朝的在军事、政治、文化和技术上的鼎力支持。封建诸侯就能恪守礼乐等级制度,服从西周王朝。
但到了西周后期,东部的夷夏融合已经基本完成。诸侯国也从一城之地域城邦,逐渐扩张发展为多城的广域国家,实力大大增强。这个时候,有一些诸侯国甚至论领土比西周王畿也不算小,距离周王畿又远,凭什么继续恪守礼乐制度、尊奉西周王朝?比如齐国就是这样的大国。
西周想要维系自己的核心竞争力,就要在朝贡贸易体系中,拥有各大国必须仰仗的资源优势。比如像今天,美国要想让全球都使用美元进行结算,拥有在全球贸易中靠金融抽成的世界货币地位,就需要垄断或控制油气、粮食、军火、芯片等全球贸易中绝对的硬通货、刚需品。西周也一样。在封建分权自治的时代,当齐国这些诸侯国已经拓张的和周王畿地盘或国力一样大、甚至超过西周时,西周想要维系王朝共主的分配主导地位,势必要垄断几样核心贸易资源。
西周的选择,主要是——马匹、铜料。马是战争大杀器,铜料则是生产、兵器都需要的核心金属资源。
西北是天然的马场,赢秦就是给周天子养马起家的。而对西戎诸部,周天子其实也是边打边拉,因为西戎诸部也控制着高原气候下条件最优良的草场,是畜马的绝佳地点。比如周文王能从商纣王手上被释放,主要靠骊戎之文马。好马不少都产于戎狄区域。周穆王西征,以及周共王灭西北的密须,恐怕都和西北博弈有关。比如密康公之所以被周共王所杀,说是因为密康公在泾水上游获得三个美女,其母劝说让其献给周天子他没献才被杀。但这些说法都是民间传下来的显得很无厘头。真实情况是密康公作为西北屏藩,抵挡犬戎,护卫王畿,却很可能与犬戎联姻,娶了犬戎三女,遭遇了周天子的警惕和报复。
铜料则距离西北比较远。现在考古发现的主要商周时期铜矿,主要是在东南的沿江平原一带。也就是湖北东南、江西北部、安徽中部的沿长江一带。《禹贡》也记载荆州、扬州两州“惟金三品”,其实就是说湖北到安徽一带多产铜料为贡品。所以西周打淮夷、南夷、东南夷,比如周昭王就死在了征讨东南的路上,而且是带着“俘金”被淹死的。“俘金”就是铜料,西周还在汉江到长江流域开辟随枣走廊,封建汉阳诸姬,让西周力量深入东南,就是为了获取对铜矿的控制权。当时从蓝田到武关到,走丹江、汉江、长江,通过江汉水路通道向西北运送铜料也不算太难。而且吴太伯搞不好也是为了铜矿资源才沿江东去,策应周朝。
另外,周文王时期,还控制了几大玉矿。商纣王要制造玉板居然还要去找西伯昌讨要,竟然还一度被拒绝。这些都是核心资源。
西周东征西讨,主要就是围绕铜料和马匹两大核心资源,以巩固自己在朝贡贸易体系中的主导权,维持天子之尊。有了这些,周王朝就是诸侯不敢轻易背叛的共主。
但越到后期,西周维系这些就越吃力。
周懿王时,犬戎攻入王畿,西周落了下风。对西北马匹资源的控制可能受损。周懿王的王后应为姜氏,与申国同姓,可能是申姜。申姜与齐姜同祖,像畿内周公与畿外鲁侯,畿内召公与畿外燕侯一样,互为援依。姜姓与姬周长期为姬姜同盟,是周朝长期的老牌外戚。但姜通羌,姜姓出自西羌。申侯自己也声称自己是骊戎的后裔,是戎人一支。申国被一些学者考证应在泾河上游,也临近犬戎,所以与犬戎关系不错,经常是周天子与犬戎之间的传话人、说和者,而且后来就是申国带着犬戎入周,西周才灭亡。申国与犬戎相邻,关系紧密,与密须的屏藩功能相近。
周懿王与申姜联姻,则亲犬戎。但犬戎入周,周懿王对犬戎的怀柔路线破产。周懿王死后,懿王的叔叔周孝王绕开宗法制度继位。不用多说,孝王一定集结了懿王的反对派。
孝王上台,就开始采取对犬戎强硬态度。犬戎有马匹资源,所以周王室笼络犬戎。孝王索性绕开犬戎,自己直接搞马场。孝王找到了赢氏大骆的次子来给自己养马,这就是秦非子。
大骆与申侯联姻,而且受封于西犬丘,应为犬戎或临近犬戎之地,开始应该与犬戎关系不错。但孝王让大骆部次子给自己养马,很可能是挖了申戎联盟的墙角。秦非子不是电视剧中的什么马奴,而是把申戎的养马技术直接带给周王,协助周王建立国营马场的超级技术人才,是周代的导弹之父,让周朝摆脱了对犬戎马匹资源的过度依赖,贡献很大,所以获封秦邑,成了大夫。秦非子之后就一直是周天子派,一直支持天子本人。
孝王死后,王位终于回到了懿王儿子这里。就是周夷王。周夷王因为自己当年没能正常继位,估计对公卿诸侯进行了一波清洗。周夷王烹杀姜姓齐哀公、改立齐国国君、率兵攻打犬戎并掠夺一千多多匹良马,是对姜戎的强硬派。这个时候,以齐哀公为代表的很多诸侯已经不守礼乐制度,不来朝贡周天子,所以他是试图用武力重振王威。其实齐姜与申姜互为内外援依,如果齐能通过申姜越过周天子,直接获取犬戎的马匹,与犬戎直接进行贸易,那对周天子的朝贡贸易与权威将是直接打击。所以周夷王对齐姜与犬戎直接进行弹压。不过即使如此,周夷王死的时候,也有不少诸侯为他祈祷,他应该对不少诸侯也着重拉拢。
然后就是被国人暴动的周厉王上台。国野制下的国人其实是国都内的贵族和强民,并非底层。
无论是发动对越发不听话的地方诸侯的讨伐,还是利用贸易和赏赐拉拢地方诸侯,都是要花钱的。周天子要维系对诸侯的控制,无论手段是文是武,都是要烧钱的。但如果在与犬戎和东南势力的拉锯之后,周王朝对西北马匹和对东南铜矿资源的垄断力下降,结局都是朝贡贸易利益受损。那么还要继续烧钱,就只能从王畿内的贵族和豪户身上刮钱。
周厉王就是不节制的榨国人钱包的代表。国人一看周天子搜刮自己的钱,也掀翻桌子,直接把周天子给赶跑了。然后是召公与共伯和等大臣暂代王政。
可是真没了天子,国人也发现一个现实——天子虽然搜刮他们的存量利益,但因为有王朝秩序,所以王畿的增量利益仍然源源不断。这把周天子的权威彻底给践踏了,没了天子,关中王畿和各大诸侯国又有什么本质区别?小诸侯们又何必非要给关中王畿上贡?天子没了,还是个穷。而且真成了无政府主义,没了君主、管理者和仲裁者,关中王畿内部的兼并、混战和僭越也开始频频发生。比如关中中南部的散国与夨国在王畿之内起了领土争端,两国在大战后私下划定土地。而且没了周天子,夨国此时竟然在关中公开僭越自称王号。而这两个畿内国家的地界,周初分封的微国、眉国、豆国等多国都没了,可见已经是经历了混战了。
而且关中无主,犬戎再次入侵,畿内也连年遭遇天灾,驱逐了君主并进入无政府主义的王畿其实更惨了。
王畿贵族一看,这没周朝也不行,没秩序了。于是周厉王死后,贵族重新接受了当初差点没被自己杀死的厉王太子周宣王为天子。主要周宣王不要想他老爹那样榨他们。
周宣王也是东征西讨,其实主要就是西北和东南两个方向。周宣王的名声虽好,其实只要他不折腾诸侯和国人,诸侯和国人给他鼓吹中兴是没啥问题的。但国人和诸侯支持他,主要还是要那个王朝秩序,就是王朝能从西北犬戎弄来马,从东南南夷弄来铜,然后把马和铜分给各诸侯,各地诸侯大家也凑点土特产给关中让关中的国人富裕、天子威严,皆大欢喜。这就是天子靠族群动员主导天下贸易分配权的朝贡贸易。
所以问题的关键还是打西北,打东南。宣王的战争和政治还是围绕怎么让申国听话,让犬戎听话,怎么让东南各国听话。宣王前期还行,到他老了就经常战败。千亩之战败给犬戎,南国之师全军覆没。宣王中兴在宣王晚年的挫败中结束了。
周幽王上台,要怎么重塑秩序呢?西北、东南都失控了,那再在关中榨一波凑钱呗。军事史的背后是政治史,政治史的背后则一直就是财政史。只能从国人身上搂钱了。但幽王继位后不久就遭遇了大地震,旱灾等一系列天灾打击,关中经济遭受重创。关中的钱他也榨不出来了。这一次“三川竭”级别的天灾,实际上已经让周王室控制天下秩序的杠杆彻底断裂了。但周幽王看不清楚自己的真正实力,又做出了错误决策。

宣王搞犬戎,必须要先安抚申姜势力。因为姜戎是联合的。而为了让申姜支持自己,幽王又把自己出身申姜的亲舅舅封到了南阳盆地,建立了南申。这是居中互相借力。
幽王路线则不。幽王要废了自己的正妻申后和申侯儿子的太子之位,这是要与申国翻脸。幽王要扶持褒姒上位,是与褒国、蜀国的西南一线联合。
从后来晋文公勤王看,东北一线的晋国也是站在幽王一边的。
幽王的亲弟弟郑桓公当时的郑国,当时扼守华山,掌握着豫西道,也是站在幽王一边的。
渭水上游的秦也站在幽王一边。
按说幽王已经联合了东北、正东、西南、正西的各方势力,准备围殴西北的申国和犬戎了...但幽王没想到的是,东南成了一处暗雷,爆了。
周王朝靠控制西北马匹和东南铜料来维系贸易主导地位,但如果西北和东南直接越过关中联合了呢?
宣王把舅舅封到南申,那么老申国,也就是西申,等于是在汉江流域也有了自己的据点和经营。申姜的南申国在南阳,而齐姜的齐国最初也在南阳一带。南申附近除了汉阳诸姬,也有姜姓吕国、姜姓许国等国。控制西北马匹的西申等于越过了周天子,直接进入了通往东南铜矿产区的江汉通道。
这个时候,控制随枣走廊的曾国,也就是史书中汉阳诸姬之首的随国,也站到了申国一边。
考古上看,岐山周原的出土青铜器比丰镐遗址要多很多。但周原青铜器主要是家族所有礼器全部临时埋在地下的批发式窖藏出土,镐京遗址出土的陶器却更多是经历破坏焚烧的残砖碎瓦。显然,镐京的沦陷是惨烈且突然的,而岐周反而给逃亡贵族留下了一定的时间准备,并非是突然遭遇入侵。但其实犬戎南下的邠(豳)州通道与岐山更近。
西周灭亡时,很可能不是西申先到达关中,而是南申先到达。
武关-蓝田道紧邻骊山,骊山就是骊戎的大本营。而申侯曾说自己是骊戎之后,显然骊戎也是站在犬戎与申国一边的。而南申率领的姜戎许国和姬姓曾国从武关道北上进入关中后,会经过骊山西麓,可能直接得到了骊戎的支持。周幽王最后是战死在骊山,显然战场是在镐京东边,应该是南申联军进入关中的方位。
而西申与犬戎从镐京西北进入关中后,周幽王是被前后包夹。这时,只有周幽王的亲弟郑桓公力战犬戎不敌战死。秦襄公赶来勤王也已经晚了。所以南申应该是打了周幽王一个措手不及。
所以西周的灭亡,实际上是控制了西北马匹资源的西申和控制了东南铜料资源输送通道的南申,两大申姜族群联合起来,趁关中地震天灾实力空虚之际,对周天子的一次联合围剿。
周幽王试图换太子,试图和控制了两大命脉资源的申姜势力掀桌子,搞强硬对抗,当然也是其本人风险管控水平低下的表现。不过,这次周幽王即使没有搞强硬对抗,恐怕面临的也是他儿子周平王的剧本——沦为傀儡。但如果周天子能扛过去“三川竭”的衰败阶段,不至于让关中王畿彻底被冲垮,沦为西戎地盘,日后周室复兴的可能性应该大不少,而且秦国能不能顺利进入关中走向历史舞台的前台也是问号。
周幽王死前,郑桓公其实就已经出镇成周洛阳,郑国也从华山迁徙至新郑。所以郑国实际上控制了洛阳盆地和成周王畿。这是后来郑国周郑交质、箭射天子的根源——郑氏原本实际占据成周。郑桓公当时比周幽王更明白关中经济糜烂程度严重,周室实力已经空心化。所以,虽然郑桓公勤王战死,因为他是天子亲党,但他已经为郑国捞取了足够的政治资本,并与关中王畿做了一定切割,这是郑国后来小霸的基础。
秦大夫也是天子党,但毕竟不在关中,所以赶来时周幽王已经身死。何况秦大夫地处姜、戎合围之地,独木难支,也无力扛起摇摇欲坠的周王室。
西申侯是当时还是太子的周平王的姥爷。南申侯也是西申侯的族人甚至兄弟。申姜势力大概以为仅靠两申一己之力就可以替代姬周王室,控制西北马匹资源与东南铜料资源。然而现实的发展也超出了申国的预料。
首先,关中王畿被冲垮之后,诸戎入华,局势彻底失控。申国没能重建起以申国为核心的新秩序,反而各路戎族都割据关中一方,根本不再鸟申国。比如,周王畿所在的关中中部,被号称商汤之后的西戎亳王占据,定都汤杜,也就是西安杜邑遗址。从兴平到三原到长安,都是这支戎人的地盘。他们是在秦国立国后半个多世纪才被秦国所驱逐。
周平王被鸠占鹊巢,申国又只有带头破坏,没有带头重建的能力,没办法,周平王就到了申国,被申侯立为天子。文字材料可能会带立场并讹传,但地缘政治规律不会骗人。其实如果看关中的主要关道图,就知道,至少在周幽王身死时,关中周围八大向关道,东北晋南道、正东崤函道、正西渭水道、西南散关道、西北千河道、偏南褒斜道,其实还都是天子派占据。只有偏北泾河道盘踞着西申、犬戎,东南武关道一路有申姜的族亲骊戎、南申等国。申国想要替代周王室对西北、东南战略资源的全方位把控,但至少要问问晋国、郑国、秦国、褒国等控扼其他方向的诸侯是否愿意认申戎这个卯。

事实上就是,各路诸侯都不认。周携王被拥立,就是这些诸侯打申侯的脸——凭什你申国挟天子管我们?就因为你有马、有铜?我们不会自己去搞吗?
这个时候,守着关中西部三道的今宝鸡的虢国,看到申姜打开了关中北部门户,引入诸戎入关,所以也不再坚守关中西部,而是迁往函谷关附近的今三门峡一带。虢国是西周的畿内诸侯,经常掌控周王室的重卿之位,影响力原本很大。周携王就是虢国所立,他是周幽王的弟弟,一直被控制在虢国。
这个时候的局势是,晋国、虢国、郑国等国,在关中的东缘支持周携王,等于从东面封锁了关中。西申没能成功整合关中,反而让关中秩序大乱,又被晋国、虢国、郑国合力封锁,成了在关中困兽之斗,被关门放狗。周平王也因周携王的存在而失去了挟天子以令诸侯的号召力。西申在西北的预期战略目标全盘崩溃,而东南楚国等外姓势力坐大,这让南申、曾国等国没能实现利用西北基本盘打通东南,整体替代姬周战略地位的如意算盘,南申也在乱局中失去了对东南的号召力和控制力。
西申姥爷,带着外孙周平王杵在西北,却连遍地戎族的关中都进不去。没了强大的关中周王室,戎人也没必要再拿申侯当根葱,从河西、华州开始的东部诸侯也认定了申姜和周平王是弑君夺位的逆贼,西申等于成了西北的华夏孤岛。这是申侯没有料到的结局。这个时候周平王大概还是个孩子。周携王也不会很大。
周平王和周携王二王并立的局面,持续了大约20年之久。局势发生了变化。
周携王实际上也是个傀儡,但一直被控制在虢国手中。可东迁后的虢国虽处要道,但夹在三门峡的狭长盆地中,无力扩张范围。反而是晋国拥有广袤的晋南盆地内的平原腹地,郑国拥有广袤的环嵩山平原腹地,它们做强速度远超虢国。
虢国相对而言,控制着周携王这个天子号令诸侯,在天子沦为傀儡,中枢权力真空的各地方诸侯急速扩张期,虢国的扩张速度和地盘实力却逐渐落后,这是很要命的。虢国于是成了晋国和郑国的眼中刺。
这个时候,关东的诸侯都在坐大,都在野蛮生长。因为没有天子的约束了,大鱼吃小鱼小鱼吃虾米的兼并大赛已经拉开帷幕。但各路诸侯,包括原本是幽王派的郑国和晋国,又觉得没了天子,无法凝聚华夏圈,毕竟关中王畿的悲剧殷鉴不远。要有华夷之分,就要有天子,但天子只能当个吉祥物,不能让天子掌权,这种新秩序,逐渐成为华夏诸侯共识。
虢国与周携王在关中东缘,其实还保留着杀回关中,天子重新坐大的可能性。这可能也是虢国与周携王一直打出的收复王畿的政治正确之旗帜。
诸侯们岂会再期盼天子归位来约束自己?没有了中枢的制约,地方势力的野蛮发展,尤其是诸侯强国独霸一方它不香吗?谁非要给自己请回个老大管着自己?
于是,周携王这支,虢国保不住了。晋文公杀死了周携王。
周平王那边,他在申国成了孤岛,戎人的族群信仰、政治传统以及统治合法性来源与华夏不同,根本不鸟他。原本对戎人有带路之恩的姥爷申侯可能也死了,新的申侯与他血缘更远,对诸戎的节制能力更差,周平王可能也觉得很不自在,背后隐隐发凉,没安全感。好在西北诸戎中还有一个孤岛——秦大夫。周平王大概是与秦襄公取得了联系,秦襄公从原本幽王派,此时转为了平王派,与平王在西北诸戎中互为援依。
但关中东部其实还没彻底沦为孤岛,芮国、梁国等国依附晋国,依然在关中东部控制着黄河,所以晋国大概也能与周平王取得联系。
晋国、郑国不满虢国和周携王,决定从幽王、携王派转向平王派,迎周平王到成周。成周原本应该是郑国控制,因为郑公原本出镇成周。但成周又名义上是周携王的王畿,周携王却被控制在虢国。所以虢国与郑国应该在成周归属上有一定的矛盾和摩擦。而晋国想要控制豫西三门峡通道,这是个贸易通道,利润丰厚,所以也一直觊觎虢国地盘。晋国和郑国大概已经准备瓜分虢国了。于是先从废周携王、迎立周平王入手,让虢国手中的天子牌失效。
周平王与晋国、郑国、秦国,应该是达成了一定的协议。那就是,郑国在成周的王城给周平王,周平王通过周郑交质,郑公为首席大臣,实际上由郑国控制。周平王当好吉祥物就可以。晋国则与秦国在法理上获得“邠、岐”“岐、丰”之地的所属权,秦大夫获封为诸侯,任由秦晋两国凭实力瓜分关中旧王畿。周平王代表周室在法理上彻底放弃西土,扫除晋国于汾渭平原内部向西扩张入法理王畿的障碍。当然,周平王最大的好处是,哪怕做个华夏吉祥物,也好过在西戎合围之下提心吊胆过活。何况,关中已经丢了20年,西戎已经站稳脚跟,凭他是根本收不回来的。这只是个空头支票。
几方一拍即合,平王东迁,晋国、郑国施压虢国,杀周携王。秦国负责护送周平王东迁,并与晋国接头,约定瓜分关中。三国共同做保,保证周平王的天子地位和人身安全。于是东周开启。
后来,晋国将关中的北洛河以东占据,秦国则杀入岐山,开始蚕食关中。这都是合情合法合理的为自己扩地盘了,而不是给周王室做嫁衣了,当然有动力。虢国在春秋最终被晋国吞并。而郑国一开始控制了周平王,成为了春秋首霸。不过周平王、周桓王爷孙两代,借晋国和郑国的制衡,对郑国有一定程度的反抗,要不周桓王也不会被射了一箭,周室最终反而把成周之地给坐实了,虽然仍然没有多大地盘实力,但毕竟是个不算寄人篱下的吉祥物。
纵观幽王身死到平王东迁这段历史,其实就是申姜反周,然后各路诸侯借此摆脱了共主的约束。但共主在关中陨身后诸戎入关的历史,又让各路诸侯明白作为族群,也不能没有共主的存在。这是新趋势下,以西部申姜为代表的诸侯向天子夺权导致统治秩序挫败后,以晋、郑,乃至更遥远的,始终坐山观虎斗,隔岸观火,打算鹬蚌相争渔翁得利的齐鲁宋等关东大国,向天子要权的演变全过程。
毕竟,西周的诸侯国,没有国家主权。而西周灭亡后,春秋的诸侯国,终于拥有了几乎完整的国家主权,虽然在法统上仍然尊奉周室名不符实的王权。西周灭亡的宏观意义,其实就是诸侯们趁你乱,不要你命,但要你放权。这个时候,各大加盟店比你总店的利润坐的都大,已经掌握了总店的全套技术和管理经验,虽然不想贸然换品牌,但真不想让总店再插手自己加盟店的事务和财务了。东周的建立,意味着,原本点状城邦诸侯发展为面状领土大国之后,从周王室那里要到了国家主权。
夏商周发展到领土疆域型国家的阶段,各强国都不比共主地盘小、实力弱,但既要共主存在又不能让共主管事,就像日本后来让天皇长期成为教宗那样,是一个中央集权的大一统国家出现之前,邦国社会最后阶段的历史大趋势。无奈就是周人政治中,巫鬼文化被剔除的太干净,天子执政的世俗化王权传统深入人心,所以周朝诸侯无法让天子单纯的沦为教宗,只能限制其地盘实力、限制其治权。一直到战国变法浪潮拉开帷幕,这种贵族封建社会试图摆脱联合型中枢的历史趋势,才被集权型中枢的诞生所中止。单一制直控型央地关系才重新整合了奔向松散乃至列国建立王权,让华夏差点走向实质性分裂的上古社会。

Posted

stdin

人的意识,预测器和 sora

摘自 Lisa Feldman Barrett 的 《Seven and a Half Lessons About the Brain 认识大脑》。她是美国艺术与科学院,还有加拿大皇家学会的双院士。

比如跑马拉松,在冲过终点的那一刻,觉得自己精疲力尽,恨不得站着都费劲。但是,有人曾经做过检测,发现即使在刚跑完马拉松,精疲力尽的人的身体里,依然储存着大量的能量。这也是,大脑根据预测做出的决定。这个预测就是,大脑在猜,万一你冲过马拉松终点之后,会不会遇到什么危险。比如终点线后面有只老虎等着你。因此,它必须得提前储备逃生的能量。这就是为什么说,大脑的本质是一个预测器官。而这些预测的目的,是为了帮我们更好地管理能量,确保生存。这个过程的专业术语叫,稳态应变。巴瑞特管它叫,管理身体预算。注意,是预算,也就是,基于预测,提前计算。
换句话说,过去我们都觉得大脑的工作顺序是,先接受外界的信号,根据信号产生感觉,根据感觉做出思考。但实际上,真实的顺序是,你先接受外界的信号,但是,在你对这些信号产生感觉之前,大脑先做出预测,然后,根据预测让你产生感觉。最简单的例子就是,望梅止渴。你明明没吃到它,却觉得酸,这就是大脑在猜,你看到之后可能要吃,吃完之后会觉得酸。它就提前对你释放了这个信号。当然,这个预测也经常不准。比如,你突然觉得,有一首歌,你明明很久没听,但它就是在你的脑子里挥之不去。再比如,你走进一个房间,突然感觉莫名地焦虑。这都是大脑在根据预测做出反应。至于它做的是什么预测,不好意思,它不会告诉你。这一切都是本能反应,你根本感觉不到过程。就像一加一等于二,计算过程太快,以至于你都意识不到自己计算过。
举个例子,你在特别渴的时候喝水,是不是感觉两口水下肚,立马就解渴了?这看起来好像很平常。但事实上,水需要20分钟,才能进入你的血液,它根本不可能在几秒内解渴。那么,你为什么感觉解渴?是大脑在意识到你喝水之后,做了一个预测,它觉得你既然喝了水,一会儿这些水就应该进入血液了。因此,它基于这个预测,提前给你的身体释放信号,让你觉得很解渴。
换句话说,要想改变自己,你的重点不是改变思考方式,而是改变大脑对某件事的预测。怎么改变?我们都知道,预测是以过去的经验为基础的。你要是找一个从来没吃过青梅的人,望梅不一定能止渴。因此,要想改变预测机制,关键是改变经验。比如,以前你心情不好,就喜欢吃薯条。但是,你可以换个方法,心情不好的时候,改去跑步。第一次跑的时候,你可能会觉得很煎熬。但多跑几次,大脑就会形成新的反射回路。等你心情再不好的时候,跑步反而会让你高兴。再比如,加班的时候,感觉压力很大,情绪低落。你可以把这个过程再延长一点,每回都奖励自己,加班之后,做一件自己喜欢的事,比如打游戏、看电影、吃烤串。多试几次,再加班的时候,你可能就会感觉到一点兴奋。换句话说,我们的身体里有很多进化赋予的设定。坏消息是,这些设定可能有漏洞,有缺陷,可能是错的。但好消息是,人是一个奇妙的物种,对于每一个不好的本能,你一定能够找到另一个与之相反的本能来克制它。有句话说得好,成大事者,反本能。拿什么对抗本能?答案是,激发另一个本能。

我觉得这个机制能解释很多生理和情绪的问题。准确的说是,人是活在预期里的。预期脆弱,人就脆弱;人觉得累,觉得困,不是身体不行了,而是脑子觉得预算不够,脑子觉得这点机会要不拉倒把,能折腾个der 。。。

然后今天 OpenAI 推出了 sora 这玩意对影视、创意行业震撼就不说了,我觉得它可能真的是 AGI 的开端了。按照上面的理论,意识和智力不是说一个世界戳一下,从一个模型得到一个响应;而应该是一个模型随时随地都在对眼睛、感官的输入进行建模和预测,然后随时预测下一秒、5秒、10秒会发生什么,然后根据是不是真实发生了进行模型的正向激励,或者负向feedback。

大脑把视觉为主的感官输入,在想象里预演并作出价值判断,权衡利弊。人从小就是这样磕磕绊绊的去理解世界,和世界互动,改变世界的。sora 如果能在1-2秒内对将来发生的事快速预演一遍并作出利害判断,那么这样摸爬滚打1年后绝逼就是通用人工智能,吊打大多数稀里糊涂长大的人。人类的很多行为就是画面的预演,根本不是文字。文字是高级逻辑思辨,其实平时用的不多。

btw sora 这名字不是「空」么。。。Sora Aoi——苍井そら!

Posted

stdin

为啥开车加塞、插队的特别多

前几天水了个帖子

加塞的本质是道路通行效率低下,加塞是果,不是因。现实中,很多地方转弯车道的设置就是和实际车流量脱节、不合理的。本身应该用在优化交通的资金,都用来安装抓拍摄像头了。道路规划部门没有动力和压力去推动改良。更糟糕的是,道路规划和交通管理往往是 2 个部门,一个挖坑一个踩坑,踢皮球屡见不鲜。

当时这只是我的猜测。今晚无意中刷到一个B站视频《2024年,中国城市不会修直路

视频比较长,简单概括就是:如果你是直行车依次通过多个红绿灯路口,如果需要不断变道躲开左转道、右转道和变道,那么道路就是失败的设计。

然后评论有人去问了真正做道路设计的老哥:

hmm,谁设计道路,谁就应该背这个道路的车流量通畅指标。

Posted

stdin

从 幻兽帕鲁 Palworld 设想一下未来的联机游戏

打开steam刷到一个新闻《Ten years of RimWorld》。啊?都十年了?回想起来最近非常爆火 幻兽帕鲁 Palworld ,被大家称为缝合怪,什么都缝了。细细盘点一下我对该类别游戏大杂烩的一个评价,以及我对未来游戏机制的一个YY。

Minecraft 挖矿争霸

我从这玩意还没中文名字的beta时代就开始玩(盗版),从山脚下一个 1x2 穴居的第一夜,挖到自己的第一铲煤,再到湖底水晶宫,然后修建自己的铁路在广袤的平原和山间品味那让人留连忘返 procedure generated terrain ,那个时候真的能给人一种激动。

后来搞的什么创造模式,各种复杂的机制和道具,没那个简单的快乐了。

Conan Exiles

和 minecraft 的 voxel 建筑风格相比,它的建筑是由正三角形、正方形构造出来的奇特镶嵌 。当然还有特色的 wheel of pain 驯奴系统,简直解放劳动力啊

Rimworld

这玩意好就好在它那套 story-teller 带来的调性,很有那个味。后来的其他作品比如 Stranded: Alien Down 虽然设施设备、机制都堆了,但是总给人一种单薄,后期没劲的感觉。Rimworld 的限制就在于 2D 而且固定尺寸地图,不是 open-world

Grand Theft Auto

这玩意当年从 GTA:SA 接触觉得简直是神作啊!无缝地图在当年看来就是魔法一般。而且迄今为止它也是没有太多科幻元素,完全以「现代」为题材的都市类游戏,国产的喜欢做三国、仙侠,国外的喜欢中世纪、废土和赛博。凸显了 GTA 的独特生态位。当然这玩意玩 online 就是纯纯的 grind,还好我早就通过外挂刷了几个亿,很轻松惬意。(声明:外挂只用来刷钱,并不具备其它不公平功能)。这玩意在我心目中是 open-world 当之无愧的开创者和王者。

Palworld

接触了一下这玩意,其实我对 pokemon 一直有耳闻但是完全不懂,现在看来有点类似收集+配种这样一个机制。想起来玩一些 MMORPG 比如 Black Desert 发现一个叫做 「family」的机制很有趣,你可以创建多个角色并切换,部分物品甚至是通用的。但是这玩意感觉除了对不同角色体验一番,并不能带来 1+1>2 的效果。我当时就非常希望同一个 family 的角色能相互配合,就像「Dragon Age: Origins」里一样,在行走和打架的时候能随时切换,不同的职业甚至能打出来一些配合,那该有多好。

缝合

游戏里最蛋痛的一点,对资源开采的大量需求,应该可以把玩家的角色托付给AI挂机,正如 Black Desert 的 auto-fishing 一样。Palworld 这一点就缝合的相当有趣了,原版的 pokemon 据说只能抓来打架,这里变成了还可以是生产力。比 Conan Exiles 里的奴隶机制更有意思。综合我前面的设想,我觉得以后的联机游戏,player-character 应该不是一个,而是一群。有血缘或者劳动附庸关系的「家族」。玩家应该有自由度选择控制其中一个或多个,玩家离线的时候这个「家族」应该也会按照设定进行生产和劳动。。。。甚至防御!

如果考虑死亡掉落机制,那么可以设计一套更有趣的系统:

  1. 捏脸不能全部自定义,而是类似 Red Dead Redemption 那样的双亲继承+微调
  2. 角色的职业,天赋点,也应该通过血缘获得,而不是生硬的数值
  3. 玩家控制角色可以重伤,甚至死亡。死了就真死透了。但是你可以多生育子女,选一个比如95%相似度的,继续玩。
  4. 玩家随身物品,如果掉落,需要家族里其他人去捞,或者发悬赏换回
  5. 子女太多可以交给社会化抚养,变成NPC。
  6. 付费玩家可以全价自定义投胎,免费玩家可以从弃养的NPC里挑选。
  7. 家族里其他角色可以随时控制,或者分配生产、战斗任务
  8. 有俘虏、雇佣,随从等「条约」系统支持跨血缘配合
  9. 都说文明周边会刷出来蛮族。蛮族哪里来的?超出承载能力的人口流亡出去的。一个「family」生育太多,养不起,可以放出去「自谋生路」,投靠别的部落。NPC杂兵不应该是无脑复制,而是每个角色都有个背景板。类似 Rimworld 里 colonist 被海盗抓走俘虏,颠破流离。

这样的体系下,说不定可以加入家族政治勾心斗角,最后演变成类似 十字军之王 一类的策略游戏?23333

在家族这样的设定下,还需要解决最后一个拼图:玩家终归是要时不时AFK的。那么玩家一定会需要据点。这类 base-building 游戏也烂大街了。但是最大的问题就是,一个服务器地图是有限的,好的建家点位就那么几个,目前联机游戏一般的做法是搞一套巨复杂的防御机制,高难度陷阱防止别的玩家抄家。实际上抄家和被抄家都挺难受的。

我的想法是,要不干脆把 base-building 改成关卡编辑器。把你基地当成Tower of Defense 的地牢来设计,家族成员通过占位和分工设计成闯关NPC,最后把你家族里战斗力最强的配置上最好的装备和武器设计成boss。然后拿一部分家产作为其他玩家闯关成功的奖励。别的玩家来闯关,是闯你家的副本,这样不完全破坏你的家,也可以让玩家发挥自己聪明才智,让别的玩家体会会被阴、被虐的乐趣。

有了「家族」和「关卡」两套机制,游戏的玩家也成了游戏机制进化的一部分,可以说病毒式传播,生生不息了。反正我又不做游戏,所以随便YY,不用关心可行性和成本,谁有兴趣请自行挪用,最好做出来能邀请我内测 :)

Posted

stdout

Deal with the world

Disclaimer: ESL speaker with bad English writing skills. This rant is "Organic🌱🌿♻️🍃" produced and has not be auto-corrected by spell-checkers nor AI/LLM chemicals.

I engage with online arguments from strangers on the Interweb from time to time. Some of replies I receive often is "Essence of Leverage", a slang/meme in Chinese which resembles "trolling". I confess I did do this on purpose in order to consume my bordom and adjust my low self-esteem. During today's heated back & forth replies, the thread was moved to flamewar section, the opposition laughed me for been too childish like a tolder, or too old like a stuborn 40yo, which if funny, because apparently there's something wrong that urgently needs correction?

Calling me old might ouch me if I were younger, but now it's hurting less, maybe just a meh. In retrospection, I came to the conclusion that there are two stages of world-view: for young adults, there's a strong opinion that some part of the world is wrong, and there's strong motivation of pursuade others how the world should be. Few years back I was in that precise state, I spent hours and days battling speech from others, like to defend my faith or something, hoping to achieve something out of it.

As age grows, I found stalemate , and hopefully peace. There's nothing wrong with the world, in fact that the world is inperfect by design, our brain is modeling the world in a causuality-reality way. But physical world can't always be encapsulated in matters of verbatim reasons, shit happens all the time for no reason. and would never go the way with most people's wish. There's little one could do to change it, maybe at special occasions, by some extreme luck, chosen ones can play a role in some social movement showing how the world could be.

This brings up my favorite episodes from 2023, What If from Marvel Studios. There are so many possibilities for each alternate story line. So in real life, why do we have to assign ourselves to the fixed label given by desiganated social hierarchy? Does 40yo have to be wise and know-all? Does opinions from adults have to be affirmative? I think it's not. People grow up accustomed with education background and socio-economic environments, and get used and blind-folded by it. Staying curious and foolish is the key to jump out of the circle. Challenge one's world-view and vice-versa is benificial for one's own good, and especially so in "collective" culture sphere of China, but changing others' is a waste of time.

Posted

stderr

FastAPI/Starlette 长连接感知断开

之前写过如何 在服务器重启的时候感知长连接,最近发现折腾复杂了。

https://github.com/encode/starlette/discussions/1776

测试代码:

import asyncio

async def async_streamer():
    try:
        while True:
            yield b"--boundary\r\nContent-Type: text/plain\r\nContent-Length: 1\r\n\r\n1\r\n"
            await asyncio.sleep(0)
    except asyncio.CancelledError:
        print("caught cancelled error")

app = Starlette(routes=[
    Route('/async', async_endpoint),
])

跑起来: uvicorn stream:app

这段代码粗一看没啥大不了的,但是神奇的地方在于,如果去掉 try ... except asyncio.CancelledError ,代码也能正常跑


async def async_streamer():
    while True:
        yield b"--boundary\r\nContent-Type: text/plain\r\nContent-Length: 1\r\n\r\n1\r\n"
        await asyncio.sleep(0)

而且不会报错!最蛋痛的是,这玩意因为是个 while True,如果你里面有打开的数据库连接,是不会中断的,也不会回收的。因为这个 coroutine 没有继续 async for 来消费,就一直挂在进程里当僵尸了!

加上 try ... except asyncio.CancelledError,能捕获出错,也能处理善后了。

真是神奇啊。不知道是 uvicorn 的特性,还是 ASGI 都这样。

Posted

stdout

碎碎念一下《年会不能停》,微剧透

首先,《年会不能停》是一部喜剧电影。不是纪录片。在这个设定下,我可以给这个喜剧片9分。它给我带来2个小时的吸引力和快乐,这一点就很值。

我去看之前还四处查阅了是否适合带小孩和长辈去看。看完的结论是全家看得其乐融融毫无压力。那么多职场黑话丝毫不妨碍非职场人群理解故事。

然后说几点感受吧。

第一,女一号感觉是硬安排的。对剧情推动作用不大。但是形象好气质佳,很让人看得下,去从而忍受角色定位问题和演技问题。

然后,整个剧情背景设定,某个大公司要裁员。感觉这个矛盾是整个剧情有意回避了,虽然最后是大团圆解决,但是没能回答一个根本的问题:”打工人胜利了,公司的前景会变好吗?“ 如果你认真考虑这个问题,发现剧里的反派一号的苦衷了。喜剧的内核都是悲剧啊。

其次,我觉得董事长的设定偏故事性了。年会不能停,出这么大个事,就这样过去了?不说面子上挂不住的问题,股价,或者资方,还有供应商关系都会栽个大跟斗吧。不乐观。当然网上更有趣的是借题发挥,比如豆瓣这条评论很经典:

李下 看过 2023-12-31 08:49:16 四川 14750 有用
恶只到宰相,皇帝是被蒙蔽且善的。

哈哈哈。上面本意是好的,就是下面执行歪了。

最后,我想稍微深入讨论一个情节,「优化厂里技术最牛的人」,我感觉比较……假。技术最牛的,应该是不怕丢工作的,在哪里不是干活。技术最牛的既然摆明了要挑事,那么下家多半是找好了。这个时候按照情节需要,面对挽留的 counter-offer,我觉得一般有职场常识的人都会拒掉。因为无论 counter-offer 有多诱人,都会彻底扭转职场地位,属于比正式合同更卖身契的玩意,你的劳资关系从双方情愿变成了单向奔赴。以后有的是苦吃。

Posted

stderr

如何摆脱霉运

悲观者总是正确,乐观者总是成功。摘抄一些好玩的:

有一个英国的心理学家,叫理查德·怀斯曼,他也是英国赫特福德大学的教授。他曾经做过一个实验。大概过程是,招募两组人。第一组人,总是觉得自己最近有点倒霉。第二组人,正好相反,总觉得自己运气不错。怀斯曼就请这两组人看同一份报纸,并且给他们一个任务,数数这张报纸里面,一共有多少张照片。结果发现,倒霉组的平均耗时是,两分钟。而幸运组的平均耗时,还不到十秒钟。是幸运组的人眼力特别好吗?并不是。是因为在这张报纸的第二页,有一个巨大的广告,上面写着一行字,别数了,这张报纸上一共有43张照片。为什么倒霉组的人大都没注意到这个信息?有可能是,大家都想着,我本来运气就不太好,可不能分心大意。而幸运组人可能会觉得,四处多看看,又没什么损失,万一有意外发现呢?后来,怀斯曼又做了一组类似的实验。在报纸中间放了一个大广告,上面写着,别数了,告诉实验人员你看到了这行字,就能赢得250英镑。结果,倒霉组的多数人,又错过了这个信息。怀斯曼就得出一个结论,不幸的人,因为太专注于寻找特定的东西,而错过了别的机会。把这个结论再延伸一步,所谓倒霉,就是太执着于某个单一路线,对周围的好事视而不见。而所谓走运,就是不执着于特定目标,并在沿途发现更多的新机会。
借用马斯克的说法,很多人花了很长时间试图解决某个领域的棘手问题。但他们不会去思考有没有办法把这个解决方案应用到其他领域。简单说就是,越开放,越幸运;越执拗,越倒霉。
你可能会说,假如没有目标,没有计划,万一遇到什么变动,岂不是容易做应激反应,到时候损失更大?别着急,目标和应激反应之间,其实有一个折中的思维方式,叫做,踏脚石思维。也就是,在你前往一个目标的路上,你会遇到很多阶段性的发现,每个发现,就像一个踏脚石。但是,这个踏脚石未必会引导你前往最初的目标,它可能指向别的地方。这时,你就得顺着这个踏脚石,往新奇的地方前进。很多了不起的成就,就是这么来的。比如,YouTube最初的设想是,做一个视频约会网站。后来他们发现大家喜欢在上面发五花八门的视频,就干脆改做视频网站。再比如,当年很多人尝试造飞机,发明了专门的飞机技术,但最后造出飞机的莱特兄弟,使用的是造自行车的技术。再比如,雷达上有个驱动磁控管的部件,后来成了微波炉的核心技术。你看,这些成果都不来自最初的计划,而是中途出现的踏脚石。换句话说,面对不确定的环境时,长期的焦虑可以有。但眼前的开放与好奇,也许更重要。什么是面对世界的最好的姿态?借用理查德·费曼的一句话,以最散漫、最不羁、最原创的方式,努力学习你最感兴趣的东西。

成功大概有两条路,一个是按照悲观者做预期准备,排除一切可能出错的因素,那么剩余的结局必然成功;

另一种就是在成功的边缘疯狂试探,一不小心中了呢?

Posted

stdin

Start positive

看了 Tom Scott 的 After ten years, it's time to stop making videos.
很是感动。他2014年1月4日开始传 youtube 科技类的视频,开始每天一集后来定下来每周一更。多么强大的毅力,才能把一件事坚持10年 streak。

恰好今天也在各种群和X 上看到说「时间的朋友跨年演讲上座率不到1/3」,抛开事实不谈,突然 B站 就给我推了这个 我是罗胖罗振宇,我来B站了
。罗胖说他坚持了10年每天在微信上发一段60s语音。我觉得也挺神的。

恰好看到@Fenng说这个事,他的论点还选还挺好的,这世界终究是由乐观者推动的。虽然贴那个 ChatGPT 作为论据有点。。。。。

2024年对我而言开局十分糟糕。12月孩子陆陆续续咳嗽了快一个月了,最后查出来支原体感冒做雾化、请假输液折腾得不轻,元旦三天假期我也陪着感冒鼻涕(positive了),感觉人到中年身体一年不如一年了,破事一堆接着一堆。今天第一天上班也是头昏眼花无精打采。Tom Scott,罗振宇,Fenng 都不是我最欣赏的那类influencer/大V,你要挑毛病那我也能罗列一大堆,但是不妨碍我觉得这是2024年开端最好的启发:做一个乐观的人,努力去改变。反正都中年老男人了,也没啥好失去的。不要活得那么战战兢兢。

Posted

stderr

这个糟糕的世界对中年男人的恶意

人到中年,形败气衰,总有一种有心无力的感觉。到了这个年龄段,最大的不舒服就是和这个世界从愈演愈烈的摩擦,变成轰轰烈烈的冲突。

前几天工作上,快下班的时候甲方紧张兮兮找到我要支持一些业务,问就是急。结果我这边调整之后,另外的对接方放鸽子了。我也因为手头忙别的没在意。好巧不巧几天过后,调整导致了业务问题。全责,惨。

你说我懒吧,我它妈居然愿意在下班的时候接需求;你说我不负责吧,不负责我为啥不找个冠冕堂皇的理由推脱掉或者至少拖延一点时间。你说我为啥不仔细一点吧,犯错真的是个概率问题,而且我在对接方跑路的情况下独自也干预不了什么。为啥调整导致了问题,屎山呗。屎山怎么来的?还不都是「紧急需求」日积月累来的。为啥屎山不缝缝补补熨平一点?这玩意不记劳也不记功啊。但归根结底,谁理会这些苦衷啊,只能默默承担。

21点回家吃饭,拿起手机刚刷到学校「抵制洋节」,刚想嗤之以鼻问孩子怎么看,还没开口,孩子就嘀咕,看到国外过节,家家户户在客厅摆一颗圣诞树,抱怨说老爸太抠了。我语塞。想起来之前(实际上是2012年)淘宝买一颗1.5的也就30元也不贵,结果现在一搜,好家伙普遍70、80了。没买到便宜货,比亏钱还难受。顿时心里非常不爽!

吃完饭,丈母娘在抱怨为啥昨晚(因为穷,所以定时在谷电时段启动的)洗碗机没工作。我看了下洗碗机的门没关好,当然不会启动。这件事从来都是反复抱怨,就是舍不得去关一下门。合着因为洗碗机是我买的和推广的,所有鸡毛蒜皮的事都得我来兜底呗。

真是备受打击的一天啊。长大的过程,从来没在乎来自身边的关爱和鼓励,到现在逐渐沦落成指责和嫌弃,才追悔莫及。似乎全世界终究会剥夺老男人的一切,只留下沉甸甸的责任,说的好听点,中年男人是很多人的仰仗和依赖,说得难听点,中年男人唯一的价值就是被索取。或许这就是中年男人的命吧。

今天政策方面发生了大事,《网络游戏管理办法(草案征求意见稿)》搞得鸡飞狗跳,对整个行业的悲观,加剧了心情的低落。

于是又观察到一个点,可能很多聪明的人早早就察觉了老男人迟早被吃干抹净这个事实,所以默契的联合起来形成父权,对关键资源和社会关系形成垄断和卡位。自己辛辛苦苦创造/掠夺/搏取的财富,凭啥要被傻逼们摆布?为什么很多职场女性觉得自己遭到了歧视和不公?因为你被当男人对待了。

喜欢 ownership 是吧,得,职责对等,那就所有权极端化,私有制神圣不可侵犯,最终卷出来几个阶级顶端的胜利者老男人 own 所有人。这可能就是成年人对全世界的一份报复吧。Screw y'all! Fuck this world!

Posted

stderr

不能忘却的记忆

由于小爱同学不能导出就挨个手打出来。纪念这个日子。

一年前这几天,孩子和爱人相继病倒,我本来以为苟住了能以幸免结果在家人好转的时候一测体温发现偏高。于是赶紧洗了个澡,把小卧室腾出来,弄好电暖气、电吹风,装满开水壶,把mbp和其它个人物品搬进去,因为我知道接下来的日子将会无比煎熬。

date
2022-12-18 16:41 37.3
2022-12-18 16:43 37.3
2022-12-18 17.31 38.1
2022-12-18 17:46 38.3
2022-12-18 18:33 39.3
2022-12-18 18.41 38.7
2022-12-18 19:07 38.3
2022-12-18 19:15 38.7
2022-12-18 20:01 38.6
2022-12-18 21:11 39.5
2022-12-18 21:20 38.9
2022-12-18 21:26 39.1
2022-12-18 21:41 39.2
2022-12-18 23:30 38.4
2022-12-19 02:38 39.3
2022-12-19 02:48 38.3
2022-12-19 10:05 38.5
2022-12-19 10:12 37.9
2022-12-19 10:36 37.4
2022-12-19 11:19 37.7
2022-12-19 14:03 37.7
2022-12-19 14:29 37.0
2022-12-19 15:18 37.7
2022-12-19 16:33 37.6
2022-12-19 18:05 38.1
2022-12-19 18:44 37.8
2022-12-19 19:12 37.2
2022-12-19 19:47 37.8
2022-12-19 20:00 37.6
2022-12-19 21:09 37.2
2022-12-19 21:44 37.2
2022-12-19 22:57 36.9
2022-12-20 00:19 37.2
2022-12-20 06:55 37.1
2022-12-20 09:03 37.0
2022-12-20 09:34 37.0
2022-12-20 10:49 36.8
2022-12-20 11:41 38.0
2022-12-20 11:59 38.4
2022-12-20 14:47 38.6
2022-12-20 15:51 38.1
2022-12-20 16:32 38.0
2022-12-20 18:22 38.3
2022-12-20 22:31 38.4
2022-12-21 09:12 38.1
2022-12-21 09:59 38.2*
2022-12-21 11:57 38.2
2022-12-21 13:46 37.5
2022-12-21 15:10 37.5
2022-12-21 16.44 37.2
2022-12-21 17:07 37.0
2022-12-21 20:37 37.2
2022-12-21 20:54 37.7
2022-12-21 22:54 38.3
2022-12-21 23:05 38.4
2022-12-22 09:23 36.7
2022-12-22 09:43 37.3
2022-12-22 12:44 37.6

*: 布洛芬已用完

可能大家只是看到一串冷冰冰的数字,但是我打字都是颤抖的,每一刻时间和体温都是刻骨铭心的记忆。

NEVER FORGET!

Posted

stdout

京加高铁

今天了解到这么一件事,白令海峡原来也就 82.5km 宽,水深55米,对于现代工程技术来说修桥和隧道都不是问题。

如果中间那个岛做个中转站,那么两侧都各自30km左右。所以理论上从北京修一条到西雅图/加州的高铁完全没有问题。。

Posted

stdout

query git notes with Github GraphQL

git notes is an interesting feature, you can use it like

git notes add -m "hello test git notes"
git push origin 'refs/notes/*'

Github supported them back in 2010 then gave up LMAO.

If you need to retrive them with Github API, try GraphQL like this

  {
    repository(owner: "est", name: "snippets") {
      refs(refPrefix:"refs/notes/",first:1) {
        nodes{
          ... on Ref{
            target {
              oid
              ... on Commit{
                changedFilesIfAvailable
                message
                tree{
                  oid
                  entries{
                    oid
                    path
                    size
                    lineCount
                    mode
                    object{
                      ... on Blob{
                        byteSize
                        text
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

It will return something like:

  {
    "data": {
      "repository": {
        "refs": {
          "nodes": [
            {
              "target": {
                "oid": "bfdfda121f3d8a2d6aa399e3e8f0d58b3db0a543",
                "changedFilesIfAvailable": 1,
                "message": "Notes added by 'git notes add'",
                "tree": {
                  "oid": "2ab3e6a8b0dff6596fa60ecfb3c61bf91e5b4e1f",
                  "entries": [
                    {
                      "oid": "404d353a254ffbc97b2e16d17b8c100461aef586",
                      "path": "4fb1272f1e235580f87e3ec071984658de050dc9",
                      "size": 21,
                      "lineCount": 1,
                      "mode": 33188,
                      "object": {
                        "byteSize": 21,
                        "text": "hello test git notes\n"
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
  }

Here "path": "4fb1272f1e235580f87e3ec071984658de050dc9" is the commit SHA.

If you add more filter parameters in refs() you can fetch all the notes.

Posted

stdout

VPS推荐:Hosteon

继续上次 Racknerd 之后发现这家还行。写了个爬虫扒了一下各色配置,独立服除外,有需要的自取

pid spec Disk Bandwidth Annual $
1 1C512M 5GB 100Mbps $27.00
7 6C8G 100GB 100Mbps $270.00
77 1C1G 10GB 1Tbps $21.00
78 2C1.5G 20GB 2Tbps $36.00
79 2C2G 25GB 3Tbps $45.00
80 2C2.5G 30GB 4Tbps $54.00
81 3C3G 40GB 5Tbps $63.00
83 3C5G 50GB 8Tbps $90.00
84 6C10G 120GB 12Tbps $180.00
85 10C12G 150GB 15Tbps $270.00
86 14C20G 200GB 20Tbps $450.00
87 20C30G 300GB 30Tbps $675.00
110 1C1G 15GB 2Tbps $21.00
111 2C2G 20GB 4Tbps $39.99
112 3C3G 30GB 6Tbps $49.50
113 4C4G 40GB 8Tbps $59.99
119 1C512M 10GB 500Gbps $24.00
120 1C1G 15GB 1Tbps $36.00
121 2C2G 30GB 2Tbps $72.00
122 2C3G 50GB 3Tbps $108.00
123 2C4G 70GB 4Tbps $144.00
124 4C5G 90GB 5Tbps $180.00
126 6C6G 100GB 6Tbps $216.00
127 6C7G 120GB 7Tbps $252.00
128 8C8G 140GB 8Tbps $288.00
129 8C9G 150GB 9Tbps $324.00
130 10C10G 170GB 10Tbps $360.00
131 10C11G 180GB 11Tbps $396.00
132 12C12G 200GB 12Tbps $432.00
154 1C1G 20GB 4Tbps $33.00
155 2C2G 30GB 6Tbps $40.00
156 3C3G 40GB 8Tbps $60.00
157 4C4G 50GB 10Tbps $84.00
158 5C5G 60GB 12Tbps $105.00
159 6C6G 70GB 14Tbps $130.00
160 7C7G 80GB 16Tbps $145.00
161 8C8G 90GB 18Tbps $170.00
162 9C9G 100GB 20Tbps $190.00
163 10C10G 110GB 22Tbps $210.00
164 11C11G 120GB 24Tbps $240.00
165 12C12G 130GB 26Tbps $260.00
166 8C8G 50GB 30Tbps $98.99
167 4C4G 25GB 15Tbps $56.99
168 4C4G 25GB 15Tbps $79.00
169 8C8G 50GB 30Tbps $158.00
170 12C12G 75GB 30Tbps $235.00
171 16C16G 100GB 30Tbps $318.00
172 20C20G 125GB 30Tbps $399.00
173 24C24G 150GB 30Tbps $480.00
174 28C28G 175GB 30Tbps $575.00
175 32C32G 200GB 30Tbps $660.00
176 36C36G 225GB 30Tbps $730.00
177 40C40G 250GB 30Tbps $810.00
178 1C1G 20GB 2Tbps $21.00
179 32C32G 1TB 1Gbps $540.00
180 64C64G 1TB 1Gbps $725.00
181 128C128G 2x 1Gbps $1850.00

Posted

stdout

太阳系天体的 unicode 符号

发现Astronomical symbolsPlanet symbols
Alchemical symbol

IAU 七金 符号 name 星期 七曜 备注
☉︎ 太阳 Sun 星期天 日曜
月球 Moon 星期一 月曜 也可以画成 ☽︎
或者月相 🌑︎🌒︎🌓︎🌔︎🌕︎🌖︎🌗︎🌘︎,🌚︎🌛︎︎🌝︎︎🌜︎︎
H 水星 Mercury 星期三 水曜 赫耳墨斯(Hermes),罗马人称 Mercury
现代人称「爱马仕」的双盘蛇带翼权杖 Caduceus
V 金星 Venus 星期五 金曜 维纳斯
E 🜨 地球 Earch Bible 里说的四条河把地球分成四洲
另外的符号是 ♁ 表示十字架钉个球 globus cruciger
M 火星 Mars 星期二 火曜 符号是战神盾牌和长矛
J 木星 Jupiter 星期四 木曜 字母 Zeta(大写Ζ小写ζ)加一杠,代表宙斯/朱庇特
S 土星 Saturn 星期六 土曜 字母 kappa-rho ,表示 Kronos 加一杠
泰坦 克罗诺斯,宙斯他爹
U 天王星 Uranus
N 海王星 Neptune

几点:

  • 其中 金星/火星 符号被拿来代表 女/男 是1750年代Carl Linnaeus干的。
  • 冥王星 Pluto 发现的晚,占星术还没来得及改版就惨遭除名成矮行星。
  • 星期和对应的天体意义,全世界惊人的一致

其它各种卫星,小行星的名字就懒得贴了。

有了这些符号,我们可以画一个比如托勒密的简化版太阳系模型:

本文源自《哥白尼、伽利略、开普勒都是脱离证据拍脑袋撕逼》一文。HN

Posted

stdout

Getting started blogging on Win10

I am planning to setup by blogging environment on my Windows PC.

  • OS: Windows 10
  • Shell: Bash on WSL1
  • Program: pelican on Miniconda3 with Python 3.11

My objective today is get rid of the static/js/core.js from aether-pelican theme and replace it with a simple CSS, and it turns out quite challenging.

WSL1 and file system

As it turns out, the installed Ubuntu root filesystem on WSL1 is located here:

%localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

I plan to move my home dir (at least) to another SSD on my PC, as the C:\ drive is an old SanDisk Plus240, which is unforgivablly slow these days. I tried to mv ~ /mnt/d/home, ok but the permission gets weird.

So I tried to copy the folder on Windows to D:\home, and mklink back. I tried both mklink /D and mklink /J ( the /D switch works on a remote drive whereas the /J junction works on local NTFS disks only) and they both failed be recognized by WSL1. The bash yields Broken stdout/stdin upon launch

So OK, default home dir then. Bad luck for me.

Ubuntu 22

I just found out my cat /etc/lsb-release shows Ubuntu 18, which is the default distro installed on WSL1 I assume. I tried to install Ubuntu 22 from the Microsoft Store, after several wasted minutes (curse the slow Internet in Mainland!) it turns out for WSL2 only. Luckily the Windows Subsystem for Linux was successfully upgraded to latest version:

C:\> wsl --version
WSL version: 1.2.5.0
Kernel version: 5.15.90.1
WSLg version: 1.0.51
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.19045.3570

the wsl --list --online commands stuck for a total of 10 minutes and returns nothing (curse the AS4134 163NET!)

Getting Python, Miniconda and Pelican

So linux distro setup was back to where started, I only have Python to mess with. Miniconda3 gets insalled easily, now that's a some progress. The static site generator I am using pip install pelican[markdown] finishes ok, the pypi was not blocked? Keke.

Then I typed make. It was not part of WSL1? Blaspheme!

Manually running python -m pelican.server, and voila! The Windows asks for firewall listening permission, granted, open up browser, BAM! My blog setup process is done and now I can write and tweak it on Windows.

Oh, and there's git config core.fileMode false needs to be checked!

Posted

stdout

火星上怎么结算工资

看到个段子

突然让我想起个事,如果去火星打工,薪资该怎么计算?摘录 wikipedia

火星的恒星时长 24小时37分钟22.663秒,而太阳日则长 24小时39分钟35.24409 秒。而地球的恒星时和太阳日则分别是 23小时56分钟4.0916秒24小时。在比较之下,一火星太阳日等于1.027491地球太阳日,即比地球太阳日长2.7%。

怎么有两个天?继续搜

太阳日(英语:solar day)是依据太阳运动,所定义的时间,可以分为视觉太阳日和平均太阳日。一太阳日传统称为一“日”、一“天”或一“昼夜”。

英语里把火星的一天叫做一个 Sol。一个火星年在英文的 wikipedia 有讲

sidereal year ... is about 686.98 Earth solar days (≈ 1.88 Earth years), or 668.5991 sols 。也就是说火星一年有 668.5991 火星天。。。

火星因为有25.19°的自转倾角,跟地球相近,所以也可以划分四季。但问题是,火星的轨道长这样:

所以如果按照四个季节划分,最长的季节有 194 个 Martian Sols,最短的 142 Martian sols

那么问题来了。在火星上怎么算工资呢?我觉得得安天结了。还有,假如亲爱的读者小伙伴将来到火星务工,应聘的时候一定确认好是按地球年结算还是火星年哦。谨防火星历诈骗!

Posted

stdout