Hash Elbeszélése & Kívánsága


Kanal geosi va tili: Xitoy, Xitoycha
Toifa: Bloglar


这里收录着从日记里摘出的日常点滴,和向朋友吐槽的只言片语。

Связанные каналы

Kanal geosi va tili
Xitoy, Xitoycha
Toifa
Bloglar
Statistika
Postlar filtri


29 emt 作者没有理会我顺便提到的 bug。因为不能确定是我写的模块还是 elisp 的问题,我决定借一台 Mac,复现后再完整交次 bug。这边没有人有,国内人已经睡觉……但就住在城中的z老哥恰好就有一台!他日日在家,我第二天就能找他来借。这几周为了准备考试,才暂时不办家宴。

然而我刚刚借到电脑,准备装 homebrew,就收到大佬的回复,能复现,过几周有空了来调查。顿时来此的全部目标不复存在。那调查下 Mac 的终端环境吧——Control 很好理解,但为什么 Option 和 Command 都不起 Meta 键的效果?原来 MacOS 遵守 BSD libedit 而不是 GNU readline 的规范,逐词移动是 ESE 而不是 M-。Emacs 的 ESC 等价 M- 原来是这么来的……

到了饭点,一天没吃的他终于打算给自己煮点火鸡面——一种来自韩国的超级辣的速食面。顺便蹭了一包。因为老哥警告,我只加了极少甜辣的酱汁。第一次吃,感觉虽然太辣了,但应该再辣一点。

更新:2024年最后一天,我找到了 bug 并交了 pr;元旦时补丁合并。


更新:
libgccjit 确实支持加编译参数,但前端并不完整,不支持所有选项。当前 -march=native 选项会被拒绝,有维护者指出内存 jit 时应当默认 -march=native,这是个错误。

Bugzilla 上有未合并的补丁。大意是,我们把 -march 和 -mtune 对应的一堆 -m 和 -m-no 挨个传进去即可。-mtune 实际上每个选项都带空格(例如 --param l1-cache-size=16),我也没有找到让 libgccjit 识别的办法。

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66594
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107230


我曾听说他律法可以解决谷堆悖论:拉几千人来,综合其意见,把是否成堆的离散值用概率衡量。

又想到我真的当过他律测试的受试:题目二分蓝绿,直到求出受试认为的蓝绿界限。但明明做到中间时我只觉得这是青色,既不是蓝也不是绿!乱点下来,怎么能起到他律的作用呢?
https://ismy.blue/


因为想找点适合 Emacs 的工作(指 C++/Rust 开发),我给自己没事找事:洛谷,顺便研究了求大数质数的方法(好吧,那道题暴力就能拿满分),Rust 用 static 和 const fn 的打表法,还有最好玩的:给 Emacs 写动态模块(也就是 ffi)。

早前知道有大佬写了分词插件,但用了 swift 和 MacOS 的库;我知道 WinRT 有分词 API(虽然我也不知道我怎么知道的),觉得可以照猫画虎,就开工了。

发现如下:
* 高级的 rs binding 新版本无法加载,又遇到依赖不遵守 semver,花了一晚上 rebase + bisect,定位、提交问题之后放弃
* 从 C 头文件自动生成的 Rust binding 还蛮好用,可变可变指针的类型也不难猜构造方法
* VSC 的 inlay 极丑,Emacs 能改字体大小的“富文本渲染器”优势就体现了
* Emacs 的性能奇差,某些常见功能不知道如何形容但就是比 vsc 麻烦,还有 code action 不知道是 eglot 不支持还是 emacs 就没有
* lto 对二进制体积影响极大,1M+ -> 270k
* 条件编译的宏不太好用,只适合重写函数定义,内联变量定义直接写方括号注解即可
* 不处理字符簇没有任何问题,elisp 那边会只针对汉字调用 helper 函数的
* 第一次领略了 Rusult 的用法:try_fold,可以打断的 fold,ts 这种情况只能老老实实写循环(
此处写了人生第一个 Ok 应当 panic 而 Error 应当返回的回调,方知 Either = Left a | Right b 的合理(
* ICU 坏事做尽,二进制体积大,字典不合格,分词结果荒唐,API 还是最麻烦的——竟然只能返回字节分界,我还得先切片再数数?不过跨平台的最优解就是它,用了它我们可以保证结果不差于浏览器(逃)
* Iterator 是惰性的,应该在作用块结束前消耗掉,否则就出悬垂指针啦。
* cppwinrt 的头文件有类型推导错误,不知为何编译不了

写完之后给原作者发了 issue(草,第一次用这个动词搭配),凌晨四点过没有消息,但看到点了赞同回应,又一刷新看见拿到一颗 star。一连串一个邮件都没有,大佬这么不喜欢骚扰别人。

动态模块 API 总体还算清晰,高级数据结构一律在 elisp 端构造并取得指针。不过我没写过 VSC 插件,就无从比较了。有人写了 MacOS 下分享多个文件、还有在 Finder 中打开选中的多个文件的 API,想象力丰富。
https://xenodium.com/native-emacsmacos-ux-integrations-via-swift-modules/
Lisp 的链表的最后一项原来可以不是 nil 而是真的值。这是学 Haskell 时没有见过的。
我真希望未来有什么点子。毕竟我是老 ffi 仙人了,贡献从 CPython(ada)WASM(划掉,这个是计划)到 Emacs 不等。引入另一个世界的能力老有趣了。

因为 Emacs 30 预装了两个我最喜欢的包的改进版,也因为无聊,改了改 PKGBUILD 就自己编译去了,痛苦的“补丁 Hunk 应用失败”被我肮脏解决后,成功拿到 arch=native 并且 ELN AOT 正常的二进制。(话说为什么 ELN 不能 march=native 啊!这是带缓存的 JIT!)顺便看了看 control flow protection 和 control flow guard 编译参数。Rust gnullvm 总是编译不出 cfg 二进制,翻了许久找到一个合并的 pr,稳定版本是明年第一版,笑。GCC 那边没有大型浏览器之类需求,不知何时能支持。


两种芹菜。(图片)


故意一周不写日记,攒起来一并写。
21号,周六,下午和 Lilien 一起扫货。买的芹菜并非 Zeller,没有硕大的块茎,茎更粗,没有小小的像香菜的叶子。这不是我熟悉的芹菜,那叫什么呢?

(维基认为 Lilien 想要的是 celery,我认为的是 celeriac)

国内买肉末一般是让肉铺现剁。这边大家都社恐,不敢找肉铺老板问话,只从冰柜拿现成的。今天一起来我才知道 Lilien 想要的是“肉条”。

我帮 Lilien 带的饼干、薯片、纸卷之类的费用至写作时仍未结算,已有两周,仍懒得结算。真是够懒。

晚上在上次卖我显示器的老哥z处聚餐。原本计划在我们认识第二周,之所以推迟到这天,是因为天然气管道被楼下挖断,两周才修好,此期间老哥日日吃外卖和泡面过活。一同聚餐的,还有他的室友,第二天回国;还有一位“喜欢二次元的女孩子”w,恰如其分,吃完就在z的座位前坐下,自顾自地喊着新出的动漫,打横板格斗游戏,不问世事。

老哥 Twitter 上一半人生简介寥寥数语,一半不满全面管辖的政府。读的书是实用心理和金融,追捧 Web3,加上一屋收藏,一副中年男人的刻板形象。尤其惊讶的是老哥竟然见过无数🍥昵称,稔熟圈内事态。难道这个群体已经如此显眼?

晚餐是辣子鸡丁、红烧肉、油闷大虾和云南特色的土豆丝,锅巴一样粘在锅底。老哥和室友都是专业摄影师,三脚架和灯光一应俱全。

餐桌上讨论最多的无疑是期末考试。w学医,怨天尤人;z考前端“初试”,几分钟内要根据文字判断渲染,错一个即挂科,全班据说仅三人全对。

之后偶然聊到音乐,老哥竟然真的有电子琴。另一位朋友买了两架,把不好用的留在他这里。手感勉强能弹,但强弱不分,容易误触,没有踏板,我估计只能用来肌肉记忆伴奏和和弦。高恋忘得更加彻底,希望暑假能练会划船曲来钓阿鱼——那时已经毕业了吧?她会在哪里呢?w沉迷游戏,让我得以多留下来几时。

之后几天我在干嘛呢……我在抓 React-Router 的一个 bug,花了一晚上读蒙田随笔(HN 导致的),下载原神专辑(那晚聚餐,w的来电铃声是水神的歌,想起来了),和無極打了电话,听他讲了带来一群不速之客而吓跑主人的沉甸甸的经历。

去超市那天,我提议和 Lilien 骑车,但没能在食堂之后找到;我不急着找,晚上问老师得知警察圣诞照常工作,决定第二天醒来后写邮件。很高兴我第二天没有急着起床——下午起床之后脑子清醒(不对,我早上起床早上也清醒),思考是几点回的寝室,想到在车位回寝室的路上给哲涵发消息,想到那条路,车位就豁然开朗。

后来倒是真出了变故,在中餐馆门外听的车被加了私锁,后轮泄了气,只得花两小时推回去。我还在生闷气时,陈同学展现一副“还能怎么样”的冷静模样。感谢他大冷天陪我走回来。

晚餐时聊到自己的网站时,我意识到可以测量兼容性问题——我写的会议网站也许更需要它。不过 Cloudflare 自带的客户端分析不甚好用。更哭笑不得的是我的网站一个不开广告拦截器的活人都没有,考虑目前几十几百的访问量,规则也许还得加码。

ll 因为忘记续费而又一次炸站,预计上次复活以来的数据全部不存。好在某篇长文里所有链接均已备份。

一篇有趣的文章。
https://www.oschina.net/news/326348
Max 把小三传奇写了下来。
看了不少期马督工。
某天写程序时 ChatGPT 挂了,人生第一次受波及,并采用了 Claude 和 grok 备份——后者是哲涵倾情推荐的。

某天和哲涵从 Hayami 润去柏林谈到再见列宁的电影。其中儿子为不刺激母亲伪装东德存在的迹象,《柏林之围》里也有蒙蔽老军官伪造法军得胜消息,而《黑暗森林》提到了这两部——是在太空舰队势头正劲时给西恩斯伪造失败的消息。

接着折腾 Emacs 是这几天的主旋律。把痛点解决了:比如视觉行首行尾,行首缩进硬空格(直接把渲染空格关了,Emacs 软硬空格是一个选项),测量启动时间后把 Tree-sitter 和 eglot 惰性加载,Linux 上启动时间顿时


我不喜欢圈子中心,想往外走,却在边缘的同心圆上遇见了大家。


20 终于得到了处方。我今天记得带上了尺子,但仍然没能让医生明白其用法,直到我用一管 48mg 雌二醇比上20天得到每天用量之后,医生才明白我的凝胶是从一大管里取得的。这边的雌二醇是1mg包装的小袋,一天两次,不知道为什么医生警告我最多一天两次——也许吸收率不一样?

因为国内药费也是自费,和国外的价格差异并不大,和医费比。

下午有些头晕。那么去外面走走吧,把药买了——于是兜兜转转直到天黑。几个药房都不卖 CPA,只有超市边一家愿意收下处方翌日进货。走到城西麦当劳的背后,两排正交的板楼背后原来有一片高地,顶部修了一儿童游乐设施,滑梯直通山下。匈牙利大平原中安得焉有此地!深处还有片很有氛围的树林和步道,我想我会经常来这里散步的。

回来之后竟更头晕了。和仓鼠为排版情系母校稀里糊涂地吵了架,详情请参见其频道。

除了技术问题,仓鼠和我对于辩论历史的观点也毫不折衷。我无论何时都不接受盖楼,仓鼠则不接受篡改历史,除非引入公开可见的版本管理系统,无解。既然不能改善结果,我也许就不应该参与。我应该学着放下助鼠情节,尊重他鼠命运了。


17 8点过,小蛋糕问我要不要上课。——还有课吗?不是已经考完了吗?讲什么?
幸好此前已经起床,虽然原因毫不相干,只是觉得哲涵下午和晚上如果睡着,应该可以从早上偷得时间。洗漱完毕赶往教室,大家在做难度极限的听力(得到答案不难,但理解完整句意还缺乏很多关键词)。

本想高兴又有课上,又可过上规律的生活,一个半小时后,便得知今天真的就是最后一节。下课后和 Andrea 聊天——总是喜欢和她聊天——说到我打算为自己的生日煎鱼吃,把 halat 说成 hajat(头发),还没注意到,老师反应了很久我到底想换发型还是吃头发。


16 在起床的谎言中度过了整个早上。无论几点睡,我都会在七点半醒来,想再睡也睡不着。有点不相信现在身体的感受还和弹药储备有关——明明已经没有了嘛——但第一次一早上还没有达到愉悦。

一清早得到了体检的报告。非常好,甚至比之前还好——泌乳素正常,E2 吸收够好,T 低,直接胆红素和往常一样略高,还有不明所以的 MCH 偏高和 LDH 偏低。重新约了医生,整天没有得到回复,晚上睡觉时才想起可能是因为信发给了上次回复的秘书,也许医院轮班,她不一定今天在班,应该发给总问讯处才对。想第二天(17)重发,起床之后,另一位秘书已经回复,无数次往来中已经攒下长长的抄送名单。

这几天在写一位一年前的朋友的故事。因为学会了逐行提交,每写完一节就可以交一次,便不会因总共的篇幅畏难了。和预想不同,读去年的日记并不痛苦,反而有许多忘却的笑话。

两位小朋友在答辩。仓鼠忽视了贝叶斯的洞见,从一队普通选手里鉴跨,果然只是位普通的女生,闹了笑话。最后结果出来,分走了好几千元奖金,仓鼠表示应该分给 ChatGPT 一点,那才是主力。恭喜两位合力拉低了清华超算比赛的含金量!

下午哲涵在活动室的椅子上睡了踏实的一觉。我想让可怜的孩子多睡会儿,但自己写故事也不太有意思,抓不着思绪一端,只散漫地翻着过去的痕迹。结果第二天起来,反而赢得仓鼠的指责。椅子上睡觉不舒服而且容易感冒——你看到了都不知道拿一床毯子盖着吗?床上更舒服,但哲涵醒了真的会继续睡吗?有点生气,因为我本可以自私的。但如果有下次我还是不会叫醒哲涵,因为工作和自私都是会无限滑坡的。

因为期待太多,生出了恼怒和怨念。和去年一样。

这些哲涵会看见。去年嘉杨指出把自己内耗的过程给别人看没有任何益处,因为除了增加别人的愧疚感外毫无益处。但历史是循环,去年的许多事情不是已经重演了吗?再说哲涵也不是嘉杨,毕竟哲涵愿意看我的日记而嘉杨是一点看不得别人眼中的自己的。


杜撰了弱智吧风格的笑话一则:为什么老照片里的人反而更年轻,新照片里的反而是老人?




12 口语考试,然后体检。
Eszter 说话浅显,一如既往。每个人回答“在德村/匈国最好事情是什么”,Eszter 针对每个人随机提问,然后我们向 Eszter 提一问,就是全部了。
Eszter 先示范。(第一个忘了);城市没那么小,不会太无聊;她的朋友都在德村;
我最好的事情是:
1. 从图书馆借来了 Parsing Techniques,有的学了!Eszter 拿过书,一翻就看到了乔姆斯基的大名。我大笑。
2. Flóra és Lilien jól főznek!
3. 城市很小,散步很舒适。
然后 Eszter 问了我一堆关于计算机科学的问题。
——写网站和学匈语哪个难?
——写网站难,因为是写给老板的。(事后发现我把 főnök 说成了 mérnök,不过老师听懂了)

最后向老师敲打对陈同学的印象,得知每周要是只有一个课时,课上就只能讲各种知识点,没有互动的机会。她相信陈同学 csendes(这是中国人刻板的课堂表现吧……),性格也许不错。

然后就溜了。其实还想听别人聊天的。

在 UD Youmed 总体不算顺利,但也没出问题。
号是9点半的,但医生10点才来;叫名字并不频繁,但涌来的人渐多,坐满了所有空位。后来证明我是第二号,老医生英语发音浑浊,语速奇慢,完全打破了我对西方语速的刻板印象,甚至有时我着急到想帮他把话说完。翻译局翻译的病例用语也很奇怪,一尺半凝胶直接被翻译为 1.5chi。我好不容易找来尺子的照片,又回答不上一尺是多长。

出去之后才想起来没能请求立即获得处方。于是又在门外等,顺便把解析书第一个定理“存在规则描述不了的语言”的经典康托尔对角线证明看完。有工作人员建议我等医生出来之后询问,但医生出来之后完全没有和我搭话的意思。另外有人让我去那一边——但我刚刚根本不是和那里的医生聊的!后来又有工作人员出来,对面的老奶奶说“这位女士(hölgy)希望如何如何……”仗着语言优势又帮我把话说完了。于是老医生出来把我拉到“那一边”的诊室,原来是抽血的地方。当天抽完,发邮件索要结果并重新预约,然后下周获得处方,毕竟我的药不会立即吃完——这是我理解的他们的意思。

大概情况就是这样。迟到了新生体检几分钟,但那边早到晚到无所谓,顺序并不严格。下面还要拍胸片,体格检查则安排到了明年,届时可以询问体检结果、告知特殊医疗需求、以及需要递交疫苗接种单。问卷原来那时才交,刚开学时就无论如何不应该指望这边的。我左臂刚刚在 UD Youmed 抽完血,半小时不到转头就来新生体检处(也就是家庭医生处)又抽三管,自己都觉得好笑。抽血的针的另一侧做成奇怪的抛物面形状,包裹住采血管。压迫的棉签变成了纱布和胶布——方便很多,但扯下胶布竟是如此酷刑!

预约医生费用是500元,体检费用贵一点,加起来就破千了,足以在 pepe 吃一个月好的。医疗需求确实永远是我开支的大头。不过要是有人——比如家母——说我的钱好骗,医生都是骗子,我一定要跟他急。


10 时隔多日,终于捡起了龙书第四章。
然后在习题 4.4.5 栽了跟头。没想明白,打算写一个单步调试,但写都没写出来。

最后抄了答案,豁然开朗。一次 S -> aSa | aa 可以先尝试前者,再尝试后者,但是一旦尝试前者正常返回,就会永远错过调用后者的可能了。
听起来很类似 Tuna 讲座上 Haskell Parsec 的一个特性:S -> ab | ac,如果 ab 解析失败,被吞掉的 a 永远不会归还。这里的解法是提取左公因子。这个不是回溯,但相当类似。

原题也绝对可以通过改写等价表达式让解析结果正常起来。比如显然原式与 S -> aa | aaS 等价,这玩意能出问题就怪了(懒得写)。


高中时看贝尔实验室,总为其被拆分的命运惋惜,但美国人并不感谢 AT&T。

华为也许是中国与之性质最类似的企业了。有些中国人同样不感谢华为——于是顿时理解了美国人的想法。

我反思了下我对两家企业的矛盾态度:也许是因为现在华为还没有任何技术成为标准,但 AT&T 制定的很多后面都成了标准,上了教科书。华为也许对电信、网络贡献很大,但争议主要来自消费者业务,这里还没有产生任何标准。


https://diataxis.fr/

有人倡议把所有技术文档分为四个部分:
教程:阅读者需要自己动手做,明白最终结果,了解工具使用方法的细节,但不需要了解所有背景知识;
操作指南:针对常见现实需求的精心准备的示例,它指出了此产品的功能范围。
参考:对产品内部结构的精确描述。
解释:高层次的原理解释。是唯一一种在洗澡时开卷有益的文档。

熟悉我的读者应该早就读过我的想法了。稍后这一段会合并入《分层制》。

#post_merged


5 前一天睡前构想续本达 OpenVPN 的用途。此前我和哲涵已经发现局域网可以互相访问,因此开发版的前端预览界面可以直接直播展示;此外还想到了这些:
1. 在本地部署 http 代理,然后大家就多了一个节点。但续本达的 pac 已经是这个原理了,而且我的还不保证24h可用。
2. 基于局域网的音视频通话。续本达的 OpenVPN 是 UDP 连接,刚刚合适。
第二天绕了一点路。我忘记了 WebRTC 本来就可以用 ICE 协议探测本地网络结构,哲涵也不知道,因此我们花了点时间找别的方案。后来我说服哲涵试一试 vdo.ninja,我们都准备好 Wiregurad 抓包,看到通过 TUN 的 udp 包时,感觉就像早期搞互联网的先驱一样高兴‍。虚拟的互联网络和实际的网络一样能把人连起来‍。

虽然只是连通到了已有的网络‍。续本达的网络看起来相当靠谱,我们自己办从规模还是可靠性都几乎不可能攀比,还不如跟他们 peer。

真希望毕业了之后还能连接到这个网络。续本达是会团结人的。大家想互相联系,都必须团结在这个网络之下。


一年之前写过一段(找不到了,写写大意)
即使可以模仿人类联想记忆,搞压缩率远高于现在的有损 AI 压缩算法,我也不会提倡,因为许多资料必须原样保存。人们通过规律理解数据,但规律本身恰恰只从原始数据得出。

(很久之后)
DjVu 压缩的原理是把相似图片块用相同块代替,这让数字化古籍错误百出,得不偿失。这算一个例子。
https://www.fxzhihu.com/question/24034394/answer/5434410093

(今天)
不过并非所有数据都是原始资料,比如如果有个 AI 原理的 Everything 帮我找文件,一定的模糊、联想搜索甚至根据使用文件的上下文搜索是很有帮助的,毕竟我不总是把文件名准确记住。坏处是 AI 也许像我一样忘事,但比我强就行。

如果有这样的用例,我很乐意试试。


2 半夜三点,有个巴基斯坦人在门外打电话,把我和室友双双吵醒。
我被吵醒之后,去跟仓鼠吵了一架。我把仓鼠说的“不关我事”理解成了买我要的二手货不关他事,反复要求他确认是否关他事,他却只是重复。而他实际指的是链接——我前一天晚上说写的他的,但实际上写的是自己,陈述有误。换个我清醒的时候,也许我就能意识到他说话省略了啥出他并不在乎表态,push 他干活就行了。

哲涵在一旁看着,几乎不说话。我后来才意识到这就是吵架。家长吵架时,一旁的小孩要承受多少压力呀。长大了也会历历在目的。

中午起床之后又说错了话。大老板要 logo,我找出来 Github 链接,老板说打开不方便,我直言“这是你的问题”。是,也许真的是,但这么说对解决问题有什么帮助吗?还不如把续本达叫过来下载完。
此后还要续本达帮我想怎么道歉。(

后来找到大老板写的关于暗物质和暗能量的科普文章。
https://www.sohu.com/a/458814722_472886

之后的会议倒是很不错,演示清楚,交流明白,还一起把设计失误——大得可怕的字号、处处大写的字母订正了。第二天晚上拿到了改正的桌面和新的移动稿,非常不错。总算可以既规范又美观地工作一次了!

晚上幸而没接着和室友吵架:室友买了新游戏本,我对此无感,不过聊了别的——他最近考试很忙,考完之后的寒假可以找我学 Python;还有打双人游戏;他确实打枪战,战地,另外还玩钢铁雄心4。我也许会奉陪,但更有可能把 Parsing Techniques 学了。

3 室友做了在国外做的最好的一顿:大约是咖喱酱煮红豆。我回寝室时见到,惊叹不已。恁久没有吃豆子了,且尝一点。
出门之前,正好打算买一点小零食。哲涵问起国外有没有豆腐和豆干。甚是想念。


在無極的电脑上完成了期待已久的网络试验。

结论:
* udp2raw 确实很灵。即使是 TCP,相对纯 UDP 的混淆并不加速。
* 基于混淆 udp 的 Wireguard 隧道法延迟从 naive h2 的 ~270ms 降低到了 ~170ms。上传速度非常低,很奇怪,原因未知。下载速度 20-40Mbps,远不如 naive h2。
* naive h3 相比 naive h2 限速严重。(早应该知道的!)
* 所有方法均不丢包。
* speedtest 认为 udp 隧道法的下载速度是 200Mbps,这太怪了。
因为懒得用高端工具,没有测试 udp 流量的实际效果。延迟和带宽全部来自 speed.cloudflare.com。这是试验最奇怪的不足,但无所谓,我只想知道通不通。

回国之后应该会用这种方式打视频电话。
另外,此法从任何角度都不如 Hysteria 2,望周知。

另外,进他桌面的一瞬间,我看到的是 reaper 教程和一个七八个轨道的工程文件。这位怎么也用起 reaper 来了?我教他用虚拟键盘——当时我也琢磨了好久,诀窍在于需要监听输入,否则不会有任何输出。另外把我军训回来时买的正版账号送给了他——我已经快一年用不上这软件了。

20 ta oxirgi post ko‘rsatilgan.