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


Channel's geo and language: China, Chinese
Category: Blogs


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

Related channels

Channel's geo and language
China, Chinese
Category
Blogs
Statistics
Posts filter




更新:书 15.7.1 章有答案,思路完全一致。此外 15.1.2 还发表一通暴论:不如我们写两个 LL(1),识别结果取与,用时保证线性。

PEG 这里的复杂度其实也是线性。




刚刚把 Parsing Techniques 的前九章刷完,还剩10 15 16 17 打算读,包括第十章的左角,第十五章的 PEG。

临时跳出来看了看 PEG 的补充资料,因为刚刚回味过来几个解析器组合子竟然都有回溯,显然并非 LL(1) 算法,那么是什么呢?——哦,PEG。

据说 PEG 能解析 a^nb^nc^n 等有限的上下文有关文法。设法构造了一个,原理极其恶心:PEG 允许前瞻任意 CFG,而 a^nb^nc^n 就是 a^nb^nc^m 和 a^mb^nc^n 两个 CFG 的子集。

复杂度看起来也不是很高,但就是觉得恶心。尤其是回溯规则,不知道啥时候强制要求写详尽检查。


后来谈到我对巴基斯坦有哪些了解。首都,地理,巴基斯坦塔利班运动,这就是我了解的几乎全部。

我不了解巴塔的性质,但室友以为我把穆斯林和恐怖组织当成了一回事。他说,没有任何教义支持杀人。如果你拿穆斯林间家喻户晓的 Kalma 信条(这是南亚特有的穆斯林信条;我还不知道内容)问他们,他们不一定答得出来。他们更多是敌对的邻国和美国组织起来的。

2014年发生了白沙瓦学校袭击事件。他当时就读于同所学校的另一分校,幸存,但有朋友死于此难。
https://zh.wikipedia.org/zh-cn/2014%E5%B9%B4%E7%99%BD%E6%B2%99%E7%93%A6%E5%AD%B8%E6%A0%A1%E8%A5%B2%E6%93%8A%E4%BA%8B%E4%BB%B6

这个国家有斗殴(和我印象不同,不止是法院警察覆盖不到的地方有斗殴,有高层可以胡作非为的地方也有),贫穷,但所有巴基斯坦人都爱国。

“每个国家应该都是这样吧。”
“不对。”
我自己想了个例子。“比如阿富汗,想听音乐的人就不爱国。”

----

巴基斯坦人大抵思想古板。他第一次见我,就想起一位因与众不同而受孤立的朋友。哪里与众不同呢,倒不是离经叛道,只是喜欢平静的音乐,喜欢看书,爱好和大家不太一样而已。这是在学校会受霸凌的。

室友也属于不喜欢拓展社交圈的人。他看到这位,惺惺相惜,决定和他做朋友。此后他明白了,即使是这种总是一个人呆着的人,如果能讲话,总是能说个不停。

室友能从我联想到他是有道理的。

——他的情况需要精神药物干预吗?
——需要。
——获得了吗?
——没有。我劝过他很多次,无果。
——精神疾病患者的依从性很差的,必须有人时时刻刻盯着。

确实如此。朋友的父母委托他好好照看。他出国前,又托付给另外几位信任的人。朋友现在在等签证,未来也许会到德国。

说着,室友点开朋友的 discord,发现他在 Spotify 上听音乐。的确是我会喜欢的曲子。

(话说室友也“霸凌”过他。朋友带他玩 Terraria,给他各种神装,他不明白各种事物原理到处闯祸,一次误丢炸弹炸损朋友家后,他接着故意扔炸弹彻底毁灭之。朋友后来把房子建在空中,他上不去了。)

----

我的室友则是那种确实能一个人呆着就一个人呆着的人。隐私很重要。比如和外国人住,能和家人敞开聊天就很不错。

——可当人家面说谜语很不礼貌诶。我和家母聊天时至少还会用英语解释一段,还让你们打个招呼。
——我的父母也想和你打招呼,但我不想,说他在忙工作。他们说你有丝绸般的头发,但我抱怨脱发很严重。我听说中国人的头发浓密,丝绸般的头发也许就是这样。

(笑,下次去打个招呼吧。)


室友整了一炉焦糖饼干,硬邦邦的,嵌着巧克力豆,味道甚好。形状有些怪异——介于方形和圆形之间,尺寸有的太大,有的稍大,这是唯一的败笔。

他明天就要去奥地利走亲戚了,他说我今后可以睡个够——不过他早睡这几天我睡得都还不错?唯一的问题只是我选择了两点睡,不知道晚上他会不会被吵到。

晚上我邀请他试试中国象棋。我试图趁他不熟悉规则用双炮双车秒杀,没料到软件规则是五格士而不是三格士,计划败落,顿时失去了马以外全部进攻力量。最后似乎和局,但我甚至也把将不打照面的规则忘光,最后还是输了。

接着我去尝试国际象棋。我因为10分钟对局超时过,觉得他5分钟有点难为人;结果2分钟他就把我杀了。这就是一年半日日练棋的功夫。

再次印证我对如何寻找人生意义的看法:花了最多时间的领域,总是有所心得的。

----

早前我们有这样的对话:

——Do you know a bus?
——It's a large car.
——Come on, it's not like that. Do you think a trunk is a larger car?
——Exactly.

我明白英语母语者的直觉,早已预判到这一切。于是我提醒他,我接下来会把更多东西叫做 car——比如 rook。然后是炮。Artillery——我在努力记住这个词,不过还是经常反过来问他这是啥子。因为先下过中国象棋,他对我把主教叫做 elephant 已经习惯了。士,我想了很久应该如何区分士兵两子,他抢先提议 guard,理解很快。

----

他还请我吃有种印度零食,Soan Papdi。他请我先猜味道,我猜是略粘牙的糕或酥,大错。是入口即化的甜面块。我在国内吃过类似物,但至今不知道名字。名字中 D 是大舌音,而相同的音巴基斯坦用 R 表示,故可区分产地。实际上巴基斯坦并不禁止印度的商品、音乐和电影,甚至相当流行。大概是我的室友太世俗化了,他完全不理解为什么政府间互相把对方视为敌人。

我正好打算看一部印度电影,三傻大闹宝莱坞。室友也倾力推荐,和我讲起南亚的教育问题——学生只是不断地背书——考试——忘掉一切,而学不到任何实用技能。比如我会写代码,能赚钱,这就是南亚学校恰好不教的。

——可我写程序也不是中国学校教的呀!
——这就是电影要说的。

室友警告我,晚上看时要注意控制笑声。我愣了一会儿,当下就破了戒。

----

嗯……虽说我已经吃过晚饭了,但最近奇妙的作息让我的三餐变成了午餐、晚餐和夜宵,所以再一起吃一顿面条也不错?

面条是从城市外环东北,Plaza 以南的 Kashmir Bazar 商店(印超?)置办的。一袋只要200 huf,相当实惠。配料是 masala,各种香料的杂烩。masala 就是当地语言对香料的称呼。

----

他拿出一把跳绳,觉得也许对我有用。

“我在还是个学生的时候没少跳。”我说,“你更应该考虑别的运动,比如乒乓啥的。”

没想到他还真愿意打,只是没找到场地。


高中时和w打乒乓,有时会误击她的指关节,很痛。她不喜欢。

我的想法是,酣畅对攻和捡球误伤是硬币的两面,要了一面两面都要啦!——这是从《去远方》仿的句子。

不过到了2024年,拜登创造了更精悍的表达:你不能只在酣畅对攻的时候才爱乒乓。

#post 想想合并到哪里


“应付”在我的词典里,并没有“不用心地水过去”的含义,而是“把应当做的事情做好”。所以朋友听我说“妈妈打电话来,我先应付她”之类的话往往会大吃一惊。

今天看到“对于不应付课堂的老师……”(不认真对待),我一眼看去,“对于擅长应付课堂的老师……”(得心应手)原来我已经能自动翻译别人的应付了(笑)


感觉我写作就像排卵,几个点子一齐竞争,随机一个先爆发之后,剩下的都得退化掉。


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 一点,那才是主力。恭喜两位合力拉低了清华超算比赛的含金量!

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

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

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


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

20 last posts shown.