运动会的回忆

这几天学校运动会,朋友圈和群里热火朝天。看大家集合在雨里走方队,看大家动员和争先恐后报项,持续了一两个星期。决赛之前亮哥在群里借钉鞋。我们叮嘱,岁数不饶人,可别伤到了。他说,预赛的时候别的组都穿钉鞋,被欺负到了,决定一定要欺负回去。

不由得回想起我参加过的运动会。

在所有的运动会里,我大多是作为观众出现的。比你想像得无聊。因为我小学就开始高度近视,而我所在的文化氛围和经济状态都不允许使用望远镜,什么也看不到,就是操场上模糊 一片,所以我从来也没有享受过运动会的快乐。

多数情况下不允许欢呼,除了有指挥的时候。一二三、三二一、一二三四五六七。拉歌,一二三四五六七,我们等得真着急。你可以想像什么也看不清,目标、敌人、友军,什么也看不到,就跟着瞎喊。很久以后我才知道,有些同学可以看到远处有人在跑,甚至能辨认出跑的人是谁。

先是在运动会前排练出上述效果,便装。运动会当天,要穿统一服装。穿过白衬衣黑裤子,穿过黑西服裤子随便。有的是向家长借的,有的是礼服,运动会和祭扫烈士陵园的时候要穿。那应该是最初体会到上级的偶尔灵机一动会带来多大的麻烦。比如小学四五年级,在西册体育场参加全市运动会。参加,我的意思是作为观众。要求戴大檐白帽,就是那种展开特别大个儿,边缘是钢丝,可以非常神奇地拆三折成为直径十多厘米的遮阳帽。特别特别白,比用加了钢笔水洗过的白鞋还亮上几分。模糊有记忆六元或者三十元一顶。之所以对价格如此敏感,是因为在那之前的运动会要求买了小白遮阳帽,就是日本动画片里小朋友常戴的那种。但是之前的小白帽不行,必须买新的。并非垄断,随便去哪里买都行,但是随便哪里都不会更便宜。

我没买,刚好要去修牙还是配眼镜,请假成功了。修牙或者配眼镜结束了,时间还早,我去了西山体育场,还找到了班级。老师让我坐在最后一排,看着我戴着不算数的小白帽子,跟我聊天“真热啊”什么的,突然问“你是不是没有帽子啊?”

除了当观众的礼服,还要准备检阅的制服。前文提到,我几乎总是观众而不是运动员。但是几乎每次运动会我都参加检阅。直到大学我才知道,那个检阅的意思是——作为运动员,在开赛之前向主席台(以及绕场一周向所有观众)展示自己。尽管我不是运动员,也要参加检阅。另外,大学以前我就知道,第一个项目即百米短跑的运动员不参加检阅,因为时间不够检录。所以,应该由全体运动员参加的检阅这一程序,有些运动员没有参加,有些参加的人不是运动员。

小学二三年级的检阅要求必须穿运动服,我们当然没有,所以绝大多数同学穿的是线儿衣。如果你不知道线儿衣是什么,可以想像为某种内衣,长及手腕和脚腕,并且手腕和脚腕有松紧带。后来的检阅要求西装,我们还颇奇怪了一下,运动员不是应该穿运动服么?直到在电视上奥运会我看到装西服的入场式,才知道,原来所有的人都可以有许多套衣服,不止拿破仑的妻子或大林和小林里的贵妇人(坏人)才可以有。

检阅以后就是老实坐在观众席上了,在强调运动的场合一动不动。以便取得精神文明奖,这是我作为观众能为班级做的最大的贡献了吧,如果没有拖后腿的话。

举牌子作为背景拼字的活儿也干过。在某个场景里,我似乎是腾飞的腾字里的某个撇的末端。某他的那些场景我就知道自己是哪个像素了,总之是在哨场响起的时候,举起被规定的颜色的方块。并且听到此起彼伏的“我看看谁又错了”“你哪个班的怎么回事”“这么简单的事也做不对呢”。我从未出错过,但是指挥的呵斥令我战栗。战栗到有同学嘲笑过我。在指挥老师不名批评某位同学没站直的时候,嘲笑我的同学告诉我当时我的手指当时已经开始反卷了。然而被不点名批评的同学仍然持续被呵斥,我的手指就反卷得更厉害。事实上,大部分同学都从未出错过,不然以那么短的训练时间主席就没机会看到我们集体的结晶了。但是我们一起被呵斥,“某个同学!”“我看还有人!”。

除了举牌子,还有打竹板。相当震耳朵,我怀疑分贝数可达100左右,应该会永久影响听力。不过比拍手掌强,至少不夹到手的话不疼。还摇过装满钱的罐子。那是大学生运动会还是长春市什么的运动会,大学的时候要求我们参加的。要求每人准备两个易拉罐,不记得对品牌是否有要求了。喝光(是的,得先花钱买到内有饮料的,然后才能喝光),里面放上十枚钢镚。有同学找不到硬币,装上石子问老师,这行不?当然不行。同寝某同学缺几个硬币(还是易拉罐?总之是某种资源),我赠送给他。后来发现我自己也缺,向他要几枚硬币,他死活不给。坏小子们哈哈笑,我也笑,我说:我就这么举着空罐,不放硬币。既轻了很多,又没有人知道,谁还能去特意听某个具体同学的贡献有几分贝吗。

还是长春市这次运动会,在南岭体育场举行。人山人海,要求不得上厕所。我非常听话,在每个节点都按要求“这是最关键的时候”“最最关键”“最最最关键”“最最最最关键”忍受,直到忍不住了肚子疼得厉害。我挪到后排,被一位校园委的老师截住,“你干什么!”我说我上厕所,快憋不住了。他说“这是最关键的时候,你再忍一会,马上就结束了”。我没说话,也许说了“我忍了这么长时间都没去”,不记得了。只记得我迈进了一步,他及时让开了。我对无穷尽地“再忍一下”“最关键”这种没有边界不知进退地“再加一点要求”真是忍无可忍,所以对谈判中试图在划定的底线以后再前进哪怕一小步的,就结束谈判。

运动会持续一整天,彩排有时还持续几个整天。在日落时分,领导会出现,讲话。初三的彩排,我们走方队晒得头昏眼花,校长来了。他说,“我只讲四句话。”我们哗哗鼓掌。他开始第一句,“第一句,好!”他举着喇叭声音嘹亮,我们又响亮地鼓掌。他接着说,“为什么好呢?”然后接下去开始解释为什么好。很久以后才是第二句以及对第二句的解读。然后是第三句,以及对第三句的解读。然后是第四句,以及对第四句的解读。如果我不这样按部就班地写出来,你怎么能体会我们的无聊和愤怒。“这TM不识数吧”,这是当时窃窃私语地主要评价,我奇怪他没有听到。第四句并不是结束,还有总结。

结束前,我们还会为精神文明奖第几,或者第几个被宣布的,为这些纠结很久。我们二班才是最特殊,最优秀,最应该被承认的。也许是二班吧,从小学到初中到高中,到大学,引用李逵的说话,我真的不记得这许多班级到底都是几班了。不过,我们是最特殊,最优秀,最精神文明的,这点我没有忘记。如果是四班,那么就是四班四班我们最强。如果是十八班,那么换个口号。不得性别歧视,所以不能叫十八罗汉最棒。同样不得性别歧视,所以不能叫十八姑娘一朵花。不得涉及宗教,所以不能叫十八层地狱最怎么样。我们需要在运动会以前很久就开始编这套最适合我们的口诀;准备好各种道具,跟家长要钱买或者借,如果这是一次性的可真是糟糕得很,每次运动会都会再次回顾并得到败家的差评;全程做个乖乖的观众,不准说话不准动。

除了做观众,我还一直是报道组成员,就是那个“三年二班报道组来稿”,经常几个人包揽本班所有稿件。我们在运动会前一天,拿着项目单,像亲眼看到一样,把接下来要用的稿件全写出来。有说的,有写的,有抄稿的。运动会当天,还有送稿的,和临时加写稿件的。

也临时做过运动员。跑过110米栏,就是刘翔那个项目。我前一天学的,能左右脚分别上栏。第一次也是唯一一次听到发令枪。听到身后同跑的那位稀里哗啦的踢着,我一个障碍也没有踢倒。然而,我跑得非常慢,预赛就被淘汰了。差一名?直到将近三十年后,在讨论孩子的体育达标时zhumao和向龙教我,还有tiger他们教我,“你的腿倒腾得太慢了啊。”我才知道,不止应该迈大步。

我还跑过5000千米。因为全班谁也不上,只好我去,为了不扣分。体委和我一起去的,他中途退场了,我更需要跑下去。全程是跑的,没有走的时候,保持了运动员的基本尊严。被倒数第二名扣了一圈,到终点的时候体育老师说“你可算到了”。

后来参加过教工运动会。连长叫我替跑过,充个数。还有个三块砖往前挪的项目,我意外地协调,超过第二名老大一截。后来?后来太快了,大意了,掉了下来,没有成绩。还参加过自行车慢骑。我有辆特别小的自行车,在跑道里原地转圈,能向初发点骑回去。准保慢得第一吧。裁判说,不算,违例。我拿出写着规则的纸件来问,非常想知道违哪条例了。大家都劝我算了吧算了。

算了,我觉得大家说得有道理。我闭了嘴,不再讨论,也不想知道错哪了,以后再没有参加过运动会。

修煤气灶 v2.0

本文v1.0中提到的方法有危险,请不要模仿!

本文v1.0提到用绝缘胶带缠绕点火线,经 柳喵喵 和 笑一个 两位指出,在高温环境下有危险。请不要模仿我的做法。后来我购买了点火线换上,不到10元钱,拆卸旧的和换上新的都不困难。

修煤气灶 v2.0

本文v1.0中提到的方法有危险,请不要模仿!

本文v1.0提到用绝缘胶带缠绕点火线,经 柳喵喵 和 笑一个 两位指出,在高温环境下有危险。请不要模仿我的做法。后来我购买了点火线换上,不到10元钱,拆卸旧的和换上新的都不困难。

V 1.0

一起床,二猫妈说煤气灶的右侧灶孔不会打火了。测试一下,有打火的声音,非常小;煤气正常。左侧灶孔正常是电路的问题,并且说明左右两侧电路是独立的。

在网上查了一下,可能是线路中间有打铁(和地线短路),也可能是高压 (发生?)器坏了。

两个灶孔旁边分别拆下3个螺丝。

图示为 拆掉3个*2组螺丝,拔掉旋钮,就可以打开顶面板了。

C:\Users\young\AppData\Local\Temp\WeChat Files\1d3b228058432537a7e42a5153c9d60.jpg

硬用力,把面板和底层脱开。右侧脱开得晚一些,左半边很容易就打开了。得下定决心,能拆开,暴力一下。拆不开上面板时,还拆下过煤气管的加固螺丝,后来看到与它无关。

图示为 右侧灶口的点火线,原本通过右上方的两个塑料卡扣固定,已经从里面拆出来了。

发现导线与灶口附近的铁柱打火,再仔细检查,导线的绝缘外皮有一处裂了。

图示为 点火线有一段烤黑了,有一处绝缘层裂开。裂开的地方和灶口的铁脚之间打火。

C:\Users\young\AppData\Local\Temp\WeChat Files\ab5ce5b9278c76bf3aadc3ff12f7473.jpg

原理判断,因为提前打铁,所以灶孔处没有电火花点火了。

准备加绝缘层。

测试一下解决方案是否有效。在导线和铁柱之间插圆珠笔。导线和圆珠笔打火。

把导线移到离铁柱远一些的地方,把塑料锁扣也移过去一个。孔有点小,对付把卡扣插进去了。导线缠上绝缘胶带。好了,灶孔可以电火花点燃煤气了,说明解决方案有效。

缠绝缘胶带时的操作空间很小,用了前一段在小视频里学到的方法。把绝缘胶带先缠在一截方便筷子上,用筷子作为胶带的轴,把胶带缠在导线上了。

图示为 在裂口处缠上绝缘胶带。

C:\Users\young\AppData\Local\Temp\WeChat Files\80608545345e442cc87e50be55fd328.jpg

图示为 改动布线,让点火线远离铁脚,减少导线受热。原本导线从右上白色卡扣穿过,再贴近铁脚进入灶孔下方。

C:\Users\young\AppData\Local\Temp\WeChat Files\0bcae62b52a23b83c39e9cee939ab2a.jpg

遗留问题有 1.导线固定比原来松动,如果有晃动或者其他原因导线可能移位,靠近金属的话可能再次提前打铁;2.绝缘胶带的介电常数可能还是不如原装的导线绝缘层,毕竟我们一般认为空气也是绝缘的,但是在绝缘层破裂的地方和灶孔点火处被高压轻松电离击穿了。

此处有个安全隐患,是在V1.0当时没有发现的,即经 柳喵喵 和 笑一个 两位指出,绝缘胶带在用火的环境下不安全。

V 2.0

在淘宝买了新的点火线。笑一个 之前指出过,不贵,10元以下。就选了买家最多的一种,6.5元,包邮。

为了拆下旧的点火线,需要把灶孔从基座上拆下来。下图的这个位置在 V1.0 中令我非常犹豫,看不清楚连接的结构,没想清楚需要拆几个螺丝。

在网上看了个视频,此处也跳过了。不过看 up主 动作轻巧的程度,我怀疑“就那么”就能拿下来。果然。灶孔与灶气管线之间,是没有任何锁死装置的,双方都用螺丝固定在基座上。拆下灶孔以后,如下图所示。

下图,拆下旧的点火线,与新的对比。

上图中,下方的是新点火线,两个螺丝之是夹住煤气灶的钢板,以固定点火的高度。上方的是旧点火线,用弹簧和卡扣固定。

下图,新的点火线安装完毕,灶孔固定回基座上。

C:\Users\young\AppData\Local\Temp\WeChat Files\26211bd86ca2b750a15b3314114fe03.jpg

下图,点火线的另一端与基座上的接口连接,硬插进去,插到我用手拔费劲的程度。下图中红色的是新点火线,左侧的截面方形的白色小盒是左灶孔的旧点火线。

C:\Users\young\AppData\Local\Temp\WeChat Files\57dd21092860959ed866cfd111e5dd5.jpg

下图中三个红箭头所指的是新点火线。顶视图。

后来想想不对,应该令点火线远离煤气管,左侧的现状和右侧的原始状态才是对的。改回大致原始的走线位置,参照左侧的角度远离铁脚。

无标题

再看一眼旧线的结构。

下图展示的是绝缘层裂开和烧黑的部分,与线的其余部分的颜色对比。

C:\Users\young\AppData\Local\Temp\WeChat Files\df8e967bacdffdefe1f6b6a1a53d6e5.jpg

再次感谢 柳喵喵 和 笑一个 两位指正。

V 1.0

一起床,二猫妈说煤气灶的右侧灶孔不会打火了。测试一下,有打火的声音,非常小;煤气正常。左侧灶孔正常是电路的问题,并且说明左右两侧电路是独立的。

在网上查了一下,可能是线路中间有打铁(和地线短路),也可能是高压 (发生?)器坏了。

两个灶孔旁边分别拆下3个螺丝。

图示为 拆掉3个*2组螺丝,拔掉旋钮,就可以打开顶面板了。

C:\Users\young\AppData\Local\Temp\WeChat Files\1d3b228058432537a7e42a5153c9d60.jpg

硬用力,把面板和底层脱开。右侧脱开得晚一些,左半边很容易就打开了。得下定决心,能拆开,暴力一下。拆不开上面板时,还拆下过煤气管的加固螺丝,后来看到与它无关。

图示为 右侧灶口的点火线,原本通过右上方的两个塑料卡扣固定,已经从里面拆出来了。

发现导线与灶口附近的铁柱打火,再仔细检查,导线的绝缘外皮有一处裂了。

图示为 点火线有一段烤黑了,有一处绝缘层裂开。裂开的地方和灶口的铁脚之间打火。

C:\Users\young\AppData\Local\Temp\WeChat Files\ab5ce5b9278c76bf3aadc3ff12f7473.jpg

原理判断,因为提前打铁,所以灶孔处没有电火花点火了。

准备加绝缘层。

测试一下解决方案是否有效。在导线和铁柱之间插圆珠笔。导线和圆珠笔打火。

把导线移到离铁柱远一些的地方,把塑料锁扣也移过去一个。孔有点小,对付把卡扣插进去了。导线缠上绝缘胶带。好了,灶孔可以电火花点燃煤气了,说明解决方案有效。

缠绝缘胶带时的操作空间很小,用了前一段在小视频里学到的方法。把绝缘胶带先缠在一截方便筷子上,用筷子作为胶带的轴,把胶带缠在导线上了。

图示为 在裂口处缠上绝缘胶带。

C:\Users\young\AppData\Local\Temp\WeChat Files\80608545345e442cc87e50be55fd328.jpg

图示为 改动布线,让点火线远离铁脚,减少导线受热。原本导线从右上白色卡扣穿过,再贴近铁脚进入灶孔下方。

C:\Users\young\AppData\Local\Temp\WeChat Files\0bcae62b52a23b83c39e9cee939ab2a.jpg

遗留问题有 1.导线固定比原来松动,如果有晃动或者其他原因导线可能移位,靠近金属的话可能再次提前打铁;2.绝缘胶带的介电常数可能还是不如原装的导线绝缘层,毕竟我们一般认为空气也是绝缘的,但是在绝缘层破裂的地方和灶孔点火处被高压轻松电离击穿了。

此处有个安全隐患,是在V1.0当时没有发现的,即经 柳喵喵 和 笑一个 两位指出,绝缘胶带在用火的环境下不安全。

V 2.0

在淘宝买了新的点火线。笑一个 之前指出过,不贵,10元以下。就选了买家最多的一种,6.5元,包邮。

为了拆下旧的点火线,需要把灶孔从基座上拆下来。下图的这个位置在 V1.0 中令我非常犹豫,看不清楚连接的结构,没想清楚需要拆几个螺丝。

在网上看了个视频,此处也跳过了。不过看 up主 动作轻巧的程度,我怀疑“就那么”就能拿下来。果然。灶孔与灶气管线之间,是没有任何锁死装置的,双方都用螺丝固定在基座上。拆下灶孔以后,如下图所示。

下图,拆下旧的点火线,与新的对比。

上图中,下方的是新点火线,两个螺丝之是夹住煤气灶的钢板,以固定点火的高度。上方的是旧点火线,用弹簧和卡扣固定。

下图,新的点火线安装完毕,灶孔固定回基座上。

C:\Users\young\AppData\Local\Temp\WeChat Files\26211bd86ca2b750a15b3314114fe03.jpg

下图,点火线的另一端与基座上的接口连接,硬插进去,插到我用手拔费劲的程度。下图中红色的是新点火线,左侧的截面方形的白色小盒是左灶孔的旧点火线。

C:\Users\young\AppData\Local\Temp\WeChat Files\57dd21092860959ed866cfd111e5dd5.jpg

下图中三个红箭头所指的是新点火线。顶视图。

后来想想不对,应该令点火线远离煤气管,左侧的现状和右侧的原始状态才是对的。改回大致原始的走线位置,参照左侧的角度远离铁脚。

无标题

再看一眼旧线的结构。

下图展示的是绝缘层裂开和烧黑的部分,与线的其余部分的颜色对比。

C:\Users\young\AppData\Local\Temp\WeChat Files\df8e967bacdffdefe1f6b6a1a53d6e5.jpg

再次感谢 柳喵喵 和 笑一个 两位指正。

修煤气灶 更正中

本文中提到的方法有危险,请不要模仿!
本文提到用绝缘胶带缠绕点火线,经柳喵喵笑一个两位指出,在高温环境下有危险。我正在购买准备更换点火线,完成后回来更正本文。请不要模仿我的做法。

一起床,二猫妈说煤气灶的右侧灶孔不会打火了。测试一下,有打火的声音,非常小;煤气正常。左侧灶孔正常是电路的问题,并且说明左右两侧电路是独立的。

在网上查了一下,可能是线路中间有打铁(和地线短路),也可能是高压 (发生?)器坏了。

两个灶孔旁边分别拆下3个螺丝。

图示为 拆掉3个*2组螺丝,拔掉旋钮,就可以打开顶面板了。

C:\Users\young\AppData\Local\Temp\WeChat Files\1d3b228058432537a7e42a5153c9d60.jpg

硬用力,把面板和底层脱开。右侧脱开得晚一些,左半边很容易就打开了。得下定决心,能拆开,暴力一下。拆不开上面板时,还拆下过煤气管的加固螺丝,后来看到与它无关。

图示为 右侧灶口的点火线,原本通过右上方的两个塑料卡扣固定,已经从里面拆出来了。

发现导线与灶口附近的铁柱打火,再仔细检查,导线的绝缘外皮有一处裂了。

图示为 点火线有一段烤黑了,有一处绝缘层裂开。裂开的地方和灶口的铁脚之间打火。

C:\Users\young\AppData\Local\Temp\WeChat Files\ab5ce5b9278c76bf3aadc3ff12f7473.jpg

原理判断,因为提前打铁,所以灶孔处没有电火花点火了。

准备加绝缘层。

测试一下解决方案是否有效。在导线和铁柱之间插圆珠笔。导线和圆珠笔打火。

把导线移到离铁柱远一些的地方,把塑料锁扣也移过去一个。孔有点小,对付把卡扣插进去了。导线缠上绝缘胶带。好了,灶孔可以电火花点燃煤气了,说明解决方案有效。

缠绝缘胶带时的操作空间很小,用了前一段在小视频里学到的方法。把绝缘胶带先缠在一截方便筷子上,用筷子作为胶带的轴,把胶带缠在导线上了。

图示为 在裂口处缠上绝缘胶带。

C:\Users\young\AppData\Local\Temp\WeChat Files\80608545345e442cc87e50be55fd328.jpg

图示为 改动布线,让点火线远离铁脚,减少导线受热。原本导线从右上白色卡扣穿过,再贴近铁脚进入灶孔下方。

C:\Users\young\AppData\Local\Temp\WeChat Files\0bcae62b52a23b83c39e9cee939ab2a.jpg

遗留问题有 1.导线固定比原来松动,如果有晃动或者其他原因导线可能移位,靠近金属的话可能再次提前打铁;2.绝缘胶带的介电常数可能还是不如原装的导线绝缘层,毕竟我们一般认为空气也是绝缘的,但是在绝缘层破裂的地方和灶孔点火处被高压轻松电离击穿了。

 

GPT AI结对编程初体验

入口

chatGPT火了一段时间,我没试,因为我不想翻墙。因为什么?翻墙违法啊,你不知道?我还在观望之中的时候,GPT-4又来了。火的东西多了,承诺多大令人失望,所以我没有着急。

宝玉xp说:

大家快来测试一下集成GPT-4的编辑器Cursor (cursor.so)

我心想,你们测,我围观。

宝玉xp又说:不需要订阅Copilot,不需要API Key。

我在同学们的群里转发了这条消息

https://m.weibo.cn/status/4880070764400024?wm=3333_2001&from=10D3193010&sourcetype=weixin&jumpfrom=weibocom

老学生位同学试了两下,说:不错哎。

并且给出了“生成unity和手柄交互的代码”的体验说“非常好用!”,还有查资料“about WebRTCaudio/video streming”,看起来不错。

安装 https://www.cursor.so/ 到 sandboxie 中试一试吧。

看示例文件的后缀,支持 python 和 js。看配置和实测,C/C++ 也没问题,还有不少语言。

提要求用 汉语或英语都行。

贪吃蛇,业务逻辑,修改需求

做了个贪吃蛇,JS版本。确实强大,连HTML主体都是GPT写的。Ctrl+K提要求。我的要求主体是:生成一个贪吃蛇游戏,JS版本。

为了增加难度,我在初始的要求增加了细节:用 O 作蛇头,用 X 作为食物,用 + 作蛇身。

我增加要求初始蛇身长度3。

我修改按键,由 上下左右 改为 WASD,又改为 HJKL。

甚至不必指出WASD和HJKL哪个键对应哪个方向,他能猜出来。说明玩过反恐精英,习惯使用VI编辑器。

调试最长的时间花在了我的浏览器有插件拦截HJKL按键,运行的时候按键总是不好使。为了找到问题的原因,我要求按键的时候播放声音,要求蛇每走一步播放声音,代码正确。没声音,Ctrl+L聊天,我问为什么没声,他告诉我非常可能受浏览器权限影响的,还告诉我如何解决。我要求按键时弹出窗口,显示按键的字母。这样,发现了按键没被产生 event,进而想到了插件拦截。远程辅助调试的时候,对现场环境的依赖,确实是个难点。需要人类承担责任的部分,得由人工操作,人工是最大的bug。

后来要求用 NENU 作蛇身,代码看起来对的,但是按键不好使了,这条线索没有继续。

我还试了 flappy bird,要求把 管道pipe 改成 柱子column。正确。

不能写论文

同学和同事都说,让他写论文吧。

C:\Users\young\AppData\Local\Temp\WeChat Files\9c02d5e5f8fce6ef01c9c2ca153e759.png

论文不能写,因为是编程专用的。

专用的,不打算聊别的。

解读代码

Zhumao贴来一段代码,问,这段代码能读懂不。

我问了。

他知道这是手动循环展开,还告诉这种优化方法过时了。

俄罗斯方块,逐步提示

我说 写个俄罗斯方块,控制台版本的。

没写完啊。所以我要求继续。之前也见到过代码明显不完整,我问“后面还有吗”,他就继续。

我要求展开函数。

继续展开下一个函数。

怎么旋转方块呢?可以接受或拒绝。

业务逻辑差不多应该就是这样。不过Dijkstra说了:我困惑,数据结构什么样呢?

他不仅回答问题,还委婉偷摸地纠正我的说法。

我要求写一段 L形方块的初始化,然后指着那段代码问,这段代码放在哪里合适呢。

在之前我改乱过一段代码,也回答过我,某段JS代码要放在某个类的构造函数里。

优化和代码风格

要求写个 sin 函数实现,用拉格朗日展开。

// 用拉格朗日展开求sin函数,JS版本

function lagrangeSin(x, n) {

let sinX = 0;

for (let i = 0; i < n; i++) {

let term = (-1) ** i * x ** (2 * i + 1) / factorial(2 * i + 1);

sinX += term;

}

return sinX;

}

function factorial(n) {

if (n === 0) return 1;

return n * factorial(n - 1);

}

以上是上课常讲的故事的第一个高潮,接下来查表法。

// 用查表法实现sin函数,JS版本,精度为角度制 1度

const sinTable = [];

for (let i = 0; i <= 360; i++) {

sinTable[i] = lagrangeSin((i * Math.PI) / 180, 10);

}

function tableSin(degrees) {

const index = Math.round(degrees) % 360;

return sinTable[index];

}

他用拉格朗日展开填表,不够硬。要求硬编码。

给出的硬编码不够多。

填充sinTable[i]的值,i从0至50。不在运行时使用lagarangeSin求值,hardcode.

他像循循善诱的老师“你就这么整就行,例子是这样的……”,我像不争气的学生“你就告诉我答案吧。”

换个算法,用泰勒级数展开,还是求sin。

大E同学说,这家伙会递归。

好吧,我指着 factorial函数说:用迭代法重写求这个。

再快点,用查表法。

再高深一点,用动态规划,我告诉他要实现的函数原来长什么样。

像不像面试题?

写个 strcat,避免内存泄露,效果尽可能高。

逐步引导,几次修改要求。

// Function to concatenate two strings without memory leaks and with high efficiency

// Returns 0 on success, -1 on failure

// Check if the source string is longer than the allowed limit

// Check if the length of dest is larger than src

体会

有同学说:没希望了,想摆烂。

上图来自网上,是电影《喜剧之王》的截屏。

另一个体会是 语言表达和逻辑越好,优势越强。不用牙齿和爪子以后,石刀石斧需要适应。也许新的时代就要到来了,AI作为生产力的利器,淘汰一部分岗位,同时创造新的生产方式。

 

半自动加工了一本电子书

本文讨论半自动化手段,使用多种工具(git bash shell, total commander, grep, sed,还涉及到正则表达式、CSS、HTML),从多个网页加工出一本电子书的过程。纯技术讨论,书本身只作为技术讨论的案例和素材。所以,书是哪本不重要。

读大学本科的时候,读过一本小说,当时感觉惊为杰作。杀手和侠义的现代故事,反恐相关的,读得热血沸腾。后来很多年偶尔还会想起,但是当年买的纸质品已经不知道在哪个故纸堆里积灰,找不到了。

最近突然想到,为什么不自己做一本,留着以后有时间的时候重温呢。

1. HTML下载

电子版在 zlib 和 jiumodiary 都没有找到。在学校图书馆找到了纸质品,在本部储备库 在架上 , 本部中文文二储备库 ; I247/012,是作者自选集长篇小说中的一本。

用bing搜索引擎,找到一个,在这里。

https://yiduhkk.com/art_7589_7182.html

网站把这本书切成了79小节。提供TXT下载,需要注册,这条线索舍弃。

选中这79个链接,用 SingleFile保存成html。

看起来大概像下图这样。为清晰起见,在下图中,我只选择了部分链接,实际操作中所有79个链接都在其中。

2. 文件改名

保存的结果,文件名大致如下。

《苦界》 第1节 易读 (2_15_2023 5_29_04 PM).html
《苦界》 第2节 易读 (2_15_2023 5_29_18 PM).html

使用 Total Commander 批量改名。Ctrl-M,可以用正则表达式、可以去除文件名改为用序号,等等。

得到了以序号命名的文件名,如下。

01.html
02.html

3. 剪切部分文字

下载到的HTML文件中,有大量的内容不希望保存在电子书中,需要去除。计划用shell脚本调用 sed 和 grep,批量修改HTML的文件内容。在批量操作以前,先在命令行试验参数。

下图中,红框以及红框的顶部还有大量内容,需要去除。

使用正则表达式,在 git bash 中 执行

grep "<div class=ART>.*</div>" 11.html

检查输出的内容,确实是我期待的行,说明正则表达式无误。

grep -Po "<div class=ART>(.*)</div>" 11.html

只输出匹配的部分。

接下来,对所有79个HTML文件用shell批量执行上述命令。类似下面的代码,保存为go.sh,在git bash shell中执行。共79行,每行对应一个文件。

grep -Po "<div class=ART>(.*)</div>" 01.html > 1_01.html
grep -Po "<div class=ART>(.*)</div>" 02.html > 1_02.html
grep -Po "<div class=ART>(.*)</div>" 03.html > 1_03.html
grep -Po "<div class=ART>(.*)</div>" 04.html > 1_04.html

这个shell文件的生成,其中的01.html,02.html这些文件名,以及1_01.html中的01.html,复制自Total Commander。因为常用这个功能在我的 Total Commander中设置了快捷键,ctrl-f2。粘贴时在emacs中按列操作,M-x copy-rectangle-as-kill,M-x yank-rectangle(M-x是按Alt然后x,执行命令)。其余的部分每行是相同的,可以使用emacs按列复制和粘贴,也可以使用emacs宏编辑功能,f3录制宏,按住f4重复到最后共执行78次。也可以使用word或emacs按列编辑这一类的功能完成。

在 git bash shell中执行上述脚本,得到79个HTML文件,每个文件的内容都只有一个div,里面是这一节的文字。

4. 格式微调

用calibre Edit E-book功能把上述HTML文件制作成电子书。用浏览器上传至微信读书,格式糟糕得很。段落开头顶格了没空两字,文字太小,行间距和段落间距乱,目录也一塌糊涂。

以下,每次修改,都制作成电子书-上传至微信读书-手机和浏览器分别检查格式。在没有经验,不知道微信读书APP会如何呈现电子书格式时,只好改改试试。得到一些经验,可惜这些经验对我没有复用的价值,希望对你有用。

可以作为 cat、sed、管道、重定向、CSS、HTML 的应用实例。

4.1 <div class=ART> 和 </div> 换成 <p>

cat 1_01.html | sed 's/<div class=ART>/<p>/g' | sed 's/<\/div>/<\/p>/g'

4.2 首行缩进,段间距

cat 1_01.html | sed 's/<div class=ART>/<p style="text-indent:-2em;padding:2em">/g' | sed 's/<\/div>/<\/p>/g'

4.3 拼接成单一文件

$ cat 1.html >> 0.html
$ cat 2.html >> 0.html
$ cat 3.html >> 0.html
$ cat 4.html >> 0.html

以上,共79行,我使用emacs宏编辑帮助完成。

4.4 shell脚本 原型

$ cat 1_04.html | sed 's/<div class=ART>/<p style="text-indent:-2em;padding:2em">/g' | sed 's/<\/div>/<\/p>/g' | sed 's/<br>/<p style="text-indent:-2em;padding:2em">/g' > 4.html
$ cat 1.html >> 0.html; cat 2.html >> 0.html ; cat 3.html >> 0.html ; cat 4.html >> 0.html

4.5 shell脚本

cat 1_01.html | sed 's/<div class=ART>//g' | sed 's/<\/div>//g' | sed 's/<br>/<p style="text-indent:-2em">/g' | sed 's/<p style="text-indent:-2em"><\/b>/<\/b>/g'| sed '1i <p style="text-indent:-2em">' > 01.html
cat 1_02.html | sed 's/<div class=ART>//g' | sed 's/<\/div>//g' | sed 's/<br>/<p style="text-indent:-2em">/g' | sed 's/<p style="text-indent:-2em"><\/b>/<\/b>/g'| sed '1i <p style="text-indent:-2em">' > 02.html
…
cat 1_79.html | sed 's/<div class=ART>//g' | sed 's/<\/div>//g' | sed 's/<br>/<p style="text-indent:-2em">/g' | sed 's/<p style="text-indent:-2em"><\/b>/<\/b>/g'| sed '1i <p style="text-indent:-2em">' > 79.html
rm 0.html
cat 01.html >> 0.html
cat 02.html >> 0.html
…
cat 79.html >> 0.html

5 加目录

在 calibre edit ebook中的以下两个功能中的任意一个,制作电子书。

按以下流程,用 html tag b 作为标签,加目录。

6. 手动

在微信读书中最前面两个字是乱码,不够完美。可能微信读书APP对HTML的解读依赖于encode国别之类的。

试了几个方案,每种方案的乱码位置不同。最终发现,在最前面加了4个空格,完美。

电子书完美,等有时间的时候就可以看了。

加工过程接近2小时45分钟,写博客接近1小时。什么时候会有时间重读这部分精彩的小说呢?

 

好工具 | pdf电子书剪裁briss

相比epub和azw3等格式,pdf电子书的排版和页码都与纸质相符,适合做笔记和引用。特别是理工科的电子书,公式和图示与正文一样重要,排版不变型非常必要。不过,pdf电子书也有缺点,比如排版与纸质品相同,所以每页上下左右都有相当大的白边/页边距。如果不是用PC机大显示器,而是用ipad读,那么就正文太小、页边距太大了。

有个工具briss https://sourceforge.net/projects/briss/,可以剪掉白边。

操作很简单,而且是可视的,随时预览效果。

运行briss以后,菜单左上角 File | Load File。

读入文件以后效果是这样的。左边是奇数页,右边是偶数页。

读入的PDF文件是亿万星辰先生的著作《D&D演义》,排版仿照了三宝书,在PC机上读起来非常古典,印刷出来也应该很精美。

但是,当不太注重阅读体验的时候,比如在 ipad mini 上,会希望把红框(我加的)以外的部分切掉。

Briss就是为了解决这个问题而设计的。

在上图中,(1)白边表示由briss识别建议切除的部分,(2)微蓝色的部分是PDF页芯/版芯处理成半透明,供操作时参考。左上角和右下角两个柄可以拉动,改变剪切crop 的范围。

如下图所示,我把页芯的范围放大了一些,把左下角的页码包括在内。并且展示了这是偶数页的部分。

如果切掉大部分下半页的图,是这样的。

半透明(alpha通道?)展示,大大方便预览 绝大多数页面 的效果。

对效果满意以后,菜单 Action | Crop PDF,就剪切了,得到新的pdf文件。

我刚刚设置的剪贴范围,效果是这样的,果然丑了很多。原本的细节精致和经典,都没了。

也有些pdf文件,去除页边距以后,页芯大了不少,文字也能因此更容易阅读,效果没有变丑太多,可以忍受吧。

Briss是基于java开发的,可以跨操作系统;发布时已经编译为exe,不必了解JVM。我一直用的版本是0.9,大小9M。虽然并不常用,但是每次装机器都带着。偶尔用到的时候,真方便而且给力啊。不需要的时候它并不会像有些工具那样跳出来大喊“我又干活了”。这类好工具的最大缺点,恐怕是你会忘掉它的存在吧。

 

渔之乐,纯回忆,并非讨论鱼与渔

前几天高烧刚退,体力不足,头脑也还是非常不清楚的状态,稍微有点深度的书都看不进去。微信公众号推荐给我的视频里,有赶海的,一会儿看一个,刷了一整天。

就是那种海边有个几十米的大石坑,用泵排水,见底以后上手摸鱼。有鳗,差点咬到手的,扔到一边,再慢慢捋着装进桶里。有龙虾,螃蟹。有各种石斑鱼,也许叫这种名字吧。名目很多,我不认识这些分类,只知道全是鱼,看视频里的人大呼小叫摸得高兴,我也嘿嘿乐一会儿。阳光,海水,礁岩,久违了的室外风光。看别人乐呵,觉得自己也挺幸福的。

突然,电光闪耀一般,我就想起了小时候。原来,我也摸过鱼,还挺喜欢。

小时候家住的地方叫南山,山上是松林和一层层山,听说过有人走进去没出来的。山下是浑江,浑江堤坝和江水之间,常年有大水泡子。我们最长去的水泡子二三十米见方,沿江的方向比垂直于江的方向长一些,水非常浑,一点也看不到底。附近还有几个更大的,也更危险,我们一般不去。现在想,也许可能是挖沙留下的,也许是讯期江水冲击出来的。

夏天的时候,泡子里有很多像我那么大的小孩。大的不过小学高年级,多数应该还没有上学。有钓鱼的,有捞鱼的。也有游泳的,我们称为洗澡,虽然不在江里而是在泡子里,但是叫做去大江洗澡。晚上的时候回家,身上一层白印,挨揍是免不了的。还被父母在大桥上看到过,喊回家揍。

没有任何急救设施,什么救生圈之类的全没有。塘底全是淤泥,可能还有水草。年龄差不多的一个小伙伴,有一位就在里面淹死了。他兄弟二人,都是聋哑人。听说哥哥那天帮邻居家大娘拎东西上山,就那十几二十分钟时间,弟弟一个猛子扎到水里面了。大家说水面直冒泡,没有人敢下去救。有人说如果他哥哥也在,弟弟可能就得救了。也有人说如果那天哥哥在,哥俩就全交待在里面了。

尽管出了事故,也没有阻拦住任何一个小伙伴再去泡子。也许附近的家长狠揍过孩子们一段时间,也许后来就没有人去了。我记不清了。很多年以后我从大桥上远望泡子,还想过,就是那里啊,形状有点变了。不过水浑黄的,还有土岸崩塌的边缘,也还是那样。一脚踏进去,可能是夏日清凉,也可能就是永诀。

从这个泡子沿江向北,是一大片江滩,有很多大小泡子,串连起来,彼此隐约相通。泡子之间长满各种草和大小卵石。

这些泡子里有很多鱼,我哥带我去钓鱼捞鱼来着。我哥的手很巧,做出的渔具比买的还精致。他折叠牙膏皮做的铅坠,比市场上那种黑乎乎的黑球漂亮多了。扔到水里的时候,像暗器样在水面上一闪,刷地就没进去了。鱼线有时是买的,半透明的,有时是家里的蜡线,能把我手指勒得快出血了也扯不断。还有鱼钩,买的那种是有倒刺的,得从侧面才能捏着,胆战心惊。也用缝衣针放在火上烤,再弯过来。不过,没有这么大的鱼,我爸说这纯粹是糟践东西。鱼饵,从来没见过面食的,后来听说还可以用面炒,非常惊讶。就是从河泥湿的地方,有时柳树下,挖蚯蚓。很粗一条,抻得又细又长,装在小瓶子里。到要用的时候,把蚯蚓串在鱼钩,甩进水里,小心别钩到自己。

正经地,我一条鱼也没有钓到过。大学的暑假,有高中同学带了特别专业的钓竿,我们在校园里的静湖里试过,忘了是谁,似乎是我,钩在鱼肚子上带上来一条。旁边一个哥们用半米长的条帚mi子,抻着胳膊才把鱼线扔到水里,一会儿一条,一会儿一条。这些都是后话了,不过我从小就没有钓到过鱼,一直到这时候才第一条。小时候跟我哥去钓鱼那么多次,鞍前马后的,心智盎然,居然一条也没有钓到么。

我哥还带我去捞过鱼。用纱窗,可能还有纱布,两边用棍子固定。撑起来,大的鱼网一边一个人,边霍搂(搅拌)边探着底往前走。小的鱼网一个人负责,一只手撑一边,也是边抖擞边前进,河底的泥全翻上来,像乌云一样,水里什么也看不到。低头猛冲一阵,抬网,有时里面就有鱼翻着白肚跳。课文里怎么说来着,高兴地直跳,就像高梁笑红了脸,谷子笑弯了腰,都争先恐后地等着被我们抓。

说得这么热闹,用这个方法,我只抓到过一条鱼。我哥和小三儿两人是大孩子,䠀着水这儿一下那儿一下,我只有资格在岸边看。有时候荣幸,可以在他们对面负责赶鱼,按指挥的路径,“这边是沙子底”,更多时候傻站在那儿看他们越跑越远,绕到长草后面,拐进另一个泡子里了。我有一次把一面小网铺开,上面压了一块石头。过了一会儿起网,居然网到一条小鱼。唯一的一次。

应该就是这么个场景:特别热,我浑身都是花纹,光着脑袋晒在阳光里。手里捏着唯一的鱼获,我哥和小三儿已经不知转到哪里去了,没有谁分享我的喜悦。

那一次,我们清零了整个那片浅水区域,后来很久都没有鱼。我们抬了两三桶大大小小的鱼,泥鳅居多,用《英雄救日月》小人书里的大大小小的蛇命名,龙王龙母龙家的几太子这一类的。最大的一条是鲤鱼,一臂长,因为不是泥鳅,所以没有名字。

回家以后当然要挨揍,捞鱼有生命危险,必须揍了以免下次胆子大。揍得有多狠,印象已经不深了,肯定不是最狠的一次。隐约记得家长对渔获分配也有不满,但是这些也不是我所能关心的。我不会刷鱼刺,那个时候就不会。

后来想想,我不仅对收获分配没什么兴趣,连对精益求精提高技艺,也只是偶然喜欢。不仅对钓鱼捞鱼,也包括对计算机、写作、专业学习,各项技能的训练,更多的时候,还是因为训练本身带给我快乐,而不是为了追求训练的结果。想想为了未来而严肃地努力,我整个人都严肃了,也就不那么好玩了。

这么多年来,想起那些夏日的午后,跑前跑后,忙着些看不懂搞不清楚的东西,跟着把渔线鱼网装起来扎起来。远远看着我哥和大孩子踏着浊浪威风凛凛,张网抓到那么大的鱼。我要做的,不过就是在泡子边站住了,别掉到水里。极其偶尔,自己居然也能抓到一条,简直超出预料的快乐。

世界庞大而空旷,阳光刺眼。我一直傻站在那里,是个满身花纹目光迷茫的小孩儿。

格拉肖之蛇-溯源之旅

格拉肖之蛇-溯源之旅

故事要从2022年6月18日讲起。与六一八购物没什么关系,从这个意义上说,就是随便的一天。不过,由于有具体的日期,以后需要回顾更多细节的时候更容易追溯其他细节。

1. 汉英互译

最初,师兄陈昕若问我,“1986年的某一期纽约时报,有什么办法找到?”

我说,“告诉我哪一期,想找哪篇文章。”

陈昕若语音,“你听说过欧若波若斯蛇么?”

我说,“我就听说过法老蛇。”

我一下子想起法老蛇,是因为师兄的职业是高中物理教师,有精彩的网课,还经常做有意思的演示实验。一千根雪糕棍编织的蓄能长带,点火触发以后像蛇一下昂首在空中舞蹈,满教室学生欢呼。冷气四溢,低温超导体悬浮。跟我讨论乒乓球在空中悬浮时伯奴利力和什么力来着哪个占的比例高。所以,这么奇怪个名字,什么蛇,我一下子就想起化学实验那个法老之蛇,马上想提醒他那个挺危险的,有毒。

同时,我搜索,猜测着把欧若波若斯这个发音输到 bing 里,输入开头,后面的提示就来了。有时候,搜索的时候 bing 会给出发音或接写接近的建议。经常是对的。尽管有新华社音译要求,源头是英文的资源,在转译为汉语时,包括术语在内,但是现实情况是经常有多种不同翻译,音译更是不统一。所以,我找资料的时候会尽快确定英文原文是什么。

搜到了这个,Ouroboros。

C:\Users\young\AppData\Local\Temp\WeChat Files\91e8544178f2a1cd0f5766eeb561d92.png

2. 这个我认识

这个图我认识,龙神。形象是一只咬住自己尾巴的大蛇。如果搜索资料是个游戏,这算是作弊吧——我刚好知道答案。在技术讨论中却只能作为线索,而不能作为证据。总不能拍胸脯,别人就信你吧。

龙神,在科幻界非常有名。海因莱茵有著名作品《你们这些还魂尸/All You Zombies》,又译名《龙神》,就描写了这样的意向。当年科幻世界笔会的时候,某位作家给我们复述这个故事。我还记得他讲到,“这位女子长得非常难看。”有人打断他,“讲重点”。他说,这点非常重要。后面是个盘肢错节,循环往复的故事。给出的象征意向,就是吞吃自己尾巴的龙神。只是我忘了Ouroboros这个名字。

我给了陈昕若上面的截图,以及以下信息。

[https://www.britannica.com/topic/Ouroboros]

他给了我具体诉求,以及上下文。

我整理一下,要找的是符合下面要求的文章:

作者:著名的美国物理学家、诺贝尔奖得主 格拉肖

时间:1982 年 9 月 26日

期刊/报纸:《纽约时报》

篇名:未名

内容与物理学有关,可能涉及粒子物理和宇宙学。

重要线索:咬住自己尾巴的蛇。

3. 作者,报纸,墙

格拉肖,Glashow。诺贝尔奖得主这种级别的物理学家,名字容易找到。

纽约时报,这种级别的报纸,找特定日期的,也容易找到。

但是在目录里,这一天没有找到这一作者的文章。

我访问不到这个页面。

线索分成了两条,一条是作者,一条是报纸。

报纸这条线索不顺利。报纸的更多细节,我访问不到。后来new york times 找到了2015年合订本,没找到其他年份的。[https://www.nypl.org/research/collections/articles-databases/new-york-times-1980-present]

这个需要借书卡。

C:\Users\young\AppData\Local\Temp\WeChat Files\b8da6a35ff2f17fc07c0b56752a90c8.png 此外,网速特别特别慢,并且经常超时。我们找到了那天的报纸,看着一点也不像有大蛇的样子。以下是部分截图。

C:\Users\young\AppData\Local\Temp\WeChat Files\976a0d2c90294d637c91cfec8e728d0.jpg

作者这条线索,格拉肖确实提到过这种蛇。

[https://www.mediatheque.lindau-nobel.org/laureates/glashow]

C:\Users\young\AppData\Local\Temp\WeChat Files\50215d34f86d6cc10a8c36e0a9e0f8f.png

上面这张照片的左边,就是大蛇的一部分。

在他的书里,也提到过大蛇。Interactions - A Journey through the Mind of a Particle Physicist and the Matter of This World (Sheldon Lee Glashow, Ben Bova) ,1988年出版。

纽约时报书评提到过的,也许就是这本书。

[https://www.physics.harvard.edu/people/facpages/glashow]

格拉肖本人还在世,90岁,这里有邮箱。写邮件去问,也是一条分线索。

此时我开始怀疑,也许并没有那么一篇文章存在,作者是格拉肖,发表在那个报纸的那一天。

4. 到底要找啥

我问陈昕若,你那段中文,从哪里截的?原著是英文么?说不定翻译错了,如果是英文我去查下原文。

是这个。

陈昕若还找到格拉肖的另一本书里也有大蛇。

C:\Users\young\AppData\Local\Temp\WeChat Files\b14bd8306410ee40b855e28ac7f9c88.jpg C:\Users\young\AppData\Local\Temp\WeChat Files\ad25d25d6096deb5504d989f4e5562c.jpg

然而这并不能说明那份报纸那一天有这么一条大蛇。为啥非要找那张报纸呢?那是最早?还是就为了和那本中文书那句话对应上?

因为强迫症吧。这是不少中文科普资料也带给我的困惑,那就是,这个观点、这张图,是不是作者瞎编的,到底从哪来的,什么时候开始有这种说法的。这种说法是不是符合客观事实,这是另一个问题了。我长期困惑包括,历史书上的但丁为什么长得像个女人,伽利略和哥白尼怎么长得挺像的。溯源找到更清晰版本以后,困惑根本就不存在,问题在于印刷质量。

那么,这条大蛇用来像素物理法则到底何时出现的,谁画的,与纽约什么报纸有什么关系。

5. 文章,出版物,作者

我知道 New York Times中的 Times有翻译为时代广场的,还有说与泰晤士报(不是泰晤士河)有关的。但是没有想到 New York Times 和 New York Times Magazine 的区别会让检索麻烦这么多。

在跟踪作者格拉肖这条线索的过程中,终于报纸的线索也露头了。

有篇文章非常讲究地给出了参考文献。

http://ircamera.as.arizona.edu/Astr2016/images/extcosmo.htm

8. Sheldon Glashow, sketch reproduced in T. Ferris, New York Times Magazine, Sept. 26, 1982, p. 38.

所以,这份媒体根本不是《纽约时报/New York Times》,而是 New York Times Magazine。

C:\Users\young\AppData\Local\Temp\WeChat Files\40315cfe74ad73fa7235fcd5b51aabc.png

以上是免费即可看到的目录,红圈里,就是那条大蛇。

C:\Users\young\AppData\Local\Temp\WeChat Files\8a779199c742e24221ededc144e1429.png

作者也并非格拉肖,而是Tim Ferris。

“Sheldon Glashow sketch reproduced in T. Ferris N. New York Times Magazine, Sept. 26,1982: 38.” 那么,是glashow手绘,在这篇文章里发布的。

所有大蛇,可能最初的源头是这里,后来分化出很多细节,然而源头考证起来就麻烦了。

比如照片切一部分作为书的封皮。

还考虑过联系下面这位,问老先生的资源出处何来。没机会了,老先生去世了。

刘则渊(大连理工大学科学学与科技管理研究所暨WISE实验室),“他格外热心中学生的科学教育,1982年手工绘制了一幅呑食自己尾巴的巨蛇草图(图1),生动形象地描述了科学世界与大统一理论。”[https://blog.sciencenet.cn/blog-1557-661949.html]

C:\Users\young\AppData\Local\Temp\WeChat Files\bc9edf8952259a3531ce74495b85558.png

这个版本的风格非常接近手绘,像是原始出处。下图是对比。

C:\Users\young\AppData\Local\Temp\WeChat Files\71dca0e4cf0ba7beb89ad6dd2ce9780.png

陈昕若提供的,高中教材里的。明显重绘过,取其意,而失去了手绘风格。

C:\Users\young\AppData\Local\Temp\WeChat Files\bb54dfa89f5a9a01550af2cddde9f9e.png

教材里。

C:\Users\young\AppData\Local\Temp\WeChat Files\8a2cbab74b67c41266c88eaeb5d09b9.jpg

但是出处,就像此前我提到的,“我刚好知道”,没法作为依据。

我和陈昕若聊起来关于证据:我信又如何,难道也教给学生“我就是这么学的”,那样的话还要旁证干什么。他也赞同,所以希望清晰的图片,当然还要出处。

我引证 微信公众号 “我查查看”,还有

https://mp.weixin.qq.com/s/noeHEUMN-MkGMzTqLk9xqw

10年了,终于有人发现中文维基百科的俄罗斯历史是胡编的了。

陈昕若一本本给我看物理书,都有这条大蛇。

6. 原文

故事的最高潮不是由我们完成的,而是由图书馆的老师出手。当知道了文章名、作者、期刊以后,找原文是个专业工作,非我们所能为也。得到两个版本,一个有全文文字版,另一个配了图片。感谢图书馆的同事,牛!

原文的封皮即极有震撼感,电场中的基本粒子轨迹。

大蛇在此。

后面是对撞机一类大型设备的仰视图,雄伟壮观。

故事的尾声是这样的。

我说,得写参考文献,不是用来显摆真有这么本书很牛,而是用以表明观点不是自己的,其来有自,参考文献就是说明其来源的。以供读者核对和溯源。

陈昕若说,“咱俩整理一下检索的过程吧,你写个博客,我做个视频。期限就约在年底。”

 

一行脚本 不断自动恢复下载

1. 问题

你遇到过这样的情况么?用浏览器下载文件,网速不给力,或者你知道在从服务器到你的座机间网络的某个节点有个什么限制了下载速度,然而你无能为力。所以同一个文件在学校可能只需要15秒下载完毕,在家里就需要15分钟,而且时间不稳定,还可能慢慢变长。

可能突然就会这样,超时了。右边的叉(取消)变成了带箭头的圈(重试/恢复),你及时点击它,可以续传。

如果你一眼没照顾到,过一会儿就彻底超时了,只能重新下载。

如果只需要几分钟还可以忍受,但是往往涨成几十分钟,把你绑在椅子上,又不能安心去做别的。

为什么没有这样的工具呢?(也许有吧)我怀疑是因为在这个世界上并非处处都有你我遇到的这一困难,别人的网速没准特别快,根本不需要手动续传,甚至不会触发超时。

面临这个问题时,我通常在心里诅咒,然而于事无补。后来我终于忍无可忍写了一行脚本,替我看着下载进度,一旦需要恢复/重试,就去自动点击一下。

2. 使用方法(在Firefox下测试通过)

使用方法很简单,不需要会编程序。之所以没有做得界面更友好,是因为我懒,所以需要按以下步骤操作。

第一步 开始下载你的目标文件。

第二步 在地址栏中输入 about:downloads,回车。

Ctrl-J 并非总能符合下一步的要求。

第三步 F12,得到 console。

第四步 在 console 中输入以下这行代码,回车

setInterval(function myTimer(){$("[data-l10n-id='downloads-cmd-retry']").click()},1000)

这就是唯一可以算作我工作的部分,一会儿解释原理。

得到如下效果,其中的82可能是其他数字,不必关心。

效果是,从现在开始,所有正在下载的文件,如果出现 恢复/重试 按钮,会在1秒钟内自动被点击。我保持开着这个页面,切到后台,时不时过来瞅一眼,看进度还在,再放心切回去干别的活儿。这个页面关掉,也会不断在1秒内重试,直到关闭浏览器。

3. 原理

原理是,about:downloads 这个页面也是HTML/CSS/JS的,所以可以在 console 中在线修改。

点击inspector (这并不是它的名字,那个按钮的名字叫做 Pick an element from the page),

然后点击带箭头的圆圈,得到按钮的HTML代码。

既然能手动找到按钮,(1)我们可以用代码

 $("[data-l10n-id='downloads-cmd-retry']") 

找到这个按钮。

(2)找到按钮以后,我们用

$("[data-l10n-id='downloads-cmd-retry']").click()

点击它。

(3)触发动作的时机,我偷懒,并未(轮询或中断/回调)检测 恢复/重试 出现,而是每1秒钟尝试点击一次。

setInterval(function myTimer(){$("[data-l10n-id='downloads-cmd-retry']").click()},1000)

即使按钮并不是 恢复/重试 状态,此处也不会报错。

如果有多个恢复/重试按钮,这段代码会逐一点击。

4. 未尽事宜/后续工作

我本想写成 tampermokey 脚本,这样大家(以及我)用起来更方便一些。但是我遇到了困难。tampermonkey 脚本应该匹配特定站点,只在特定站点或地址执行。我不知道如何把 about:downloads写入 // @match 这一行。

如果有多个恢复/重试按钮,这段代码会逐一点击。这并不是我原始的态度,不够优雅。我本打算 想设置哪个文件为不断重试,就只重试它自己。然而,我在 console 中不会指定特定的某个按钮。试过用下标区分匹配的按钮,即类似 $("[data-l10n-id='downloads-cmd-retry']")[0] 这样的写法,实验表明需要在 tampermonkey中

// @require http://code.jquery.com/jquery-latest.js

才能支持下标语法。或者会触犯 firefox 或 chrome 的安全规则?总之我没成功。

在 Chrome 的 console 下我不知道如何(在不触犯安全规则未能导入jquery)使用 $("focus-type='retry']")

找到 恢复/重试 按钮。所以向 Chrome 移植失败。

哪位大侠知道如何改进,还请不吝指导,我尝试成功以后补进以后的博客中。在这之前,对付着用吧。

好工具 | 用键盘浏览网页 Vimium

在浏览网页的时候,如果一直用鼠标,要么压在桌子上右手腕外侧即尺骨一侧会疼痛,要么为了减轻手上的压力而端肩导致脖子、后背、肩膀疼。你可能也是这样。我还有个单独的问题,由于视力不好,离远了看不清,离近了鼠标经常会超出视野,就找不到了。

因于以上原因及其他理由,在使用word时,我常常全屏 alt- v u,多数操作通过快捷键完成;在使用IDE编程时,更多使用快捷键,除了画GUI的时候。有一种说法,适合解释我的习惯——编程时使用键盘,而不是鼠标。

但是浏览网页呢?不仅需要上翻页、下翻页,还要*点击*链接跳转,还要搜索。有时候可能还要 前一页,后一页,比如在论坛里,或者分成章节页面不连续的电子书。

Firefox有个插件 Vimium可以满足这些需求。又名 Vimium-FF,其中FF是 Firefox 的意思,指从 Chrome迁移而来。Vi,就是那个著名的vi,Unix下的全屏文本编辑器。

它还有个中文fork,如前一页、后一页,针对中文网站做了适配。

我常用以下几个功能。

一个是链接跳转。

例如在下面的页面中,准备点击链接。

不必使用鼠标,甚至比用鼠标还好,因为不必知道哪些图片或下划线文字或颜色不同的文字是链接。

按 f 键(代表find),会显示如下图所示,其中黄色上有两个字母的标签,是链接,字母用以区别各个链接。

想打开哪个链接,输入上面的字母,跳到新页面,与鼠标点击的效果一样。如“WR”代表“赞同了该文章”,在下图中箭头所指的方框中。

我重定义了按键,只使用键盘中左手的按键,右手可以用鼠标,或者端 咖啡。

在option里,

设置 link hints。

另一个我常用的功能,是 前一页/前一章、下一页/下一章。我重定义了按键,在有些站点可以通过 左箭头、右箭头 实现 上一章、下一章。

以下是 Viumium-C的定义,是不是本地化得不错?

有的网站这组按键无效,原因不明,我就仍使用 f键。

我还按在word中的使用习惯定义了一批导航用的按键,根据名字你容易猜出用途。也在option里,可以找到下图的条目。

用 t 开新tab。

用 x 关闭当前页面,比用 ctrl-w 略微好一点。ctrl-w有两个版本,各有一点麻烦。一个版本是右手按ctrl,左手按w,需要两只手;另一个版本是左小指按ctrl,左中指或无名指按w,略微有点扭曲手腕。

X 打开刚刚关闭的页面,比右键 reopen 能快半秒。这半秒的提速不见得带来多少愉悦,但是半秒卡顿可是令人非常不爽。

搜索可以用 /,不过firefox原带的 ctrl-f也不错。

使用键盘,通过力反馈和位置/本体感受器,大大降力了对视力的要求和负担,而且更加确切。我喜欢做 键盘 侠,不愿意 指点 江山。