Quantcast
Channel: Free Mind
Viewing all 62 articles
Browse latest View live

2017 风衣

$
0
0

当时禁不起你我情绪的暴雨后来美如一场风景
是年纪的笔不知不觉地改写自己
把晴空万里搬进我的世界里听歌餐叙旅行
快乐与伤心一一沉淀安静成四季
像候鸟飞去留下了一个北极我把太阳大声叫醒
还一身率性穿上风衣我推门出去找寻星星

2017 是我漫长的学生旅途的终结,也是一段全新的旅程的开始。寒假回家从国内买了一大堆音乐相关的书的便宜影印版,难得一年续签证意外地顺利,也难得一年没有顺道再去一次杭州,二月回到波士顿迎接大雪,兴致勃勃地堆了雪人。三月找工作。四月去法国开会,很幸运地得了 best paper,也认识了一些新朋友。由于赶回来写毕业论文,会议结束之后立刻就回了美国。五月赶一篇论文未果。六月写 PhD Thesis 和玩塞尔达荒野之息,顺便还去了一趟和 MXNet 小伙伴门一起的夏令营。七月到九月跑去伦敦实习,满欧洲地跑。十月回波士顿答辩。十一月放空,时隔五年再去滑了一次雪,摔疼了屁股,画了很多画,也录了悲怆的第二乐章。十二月从东岸飞到西岸,在悠闲的节日气氛中入职,找房子装家具,赶在年末的尾巴上去了一趟死亡谷的 Road Trip,以及在年末的尾巴尖上去了一趟夏威夷看 Lava!

五年前第一次坐上国际航班时的兴奋感似乎还能感觉到余温,却又突然之间又到了毕业的季节,倒是没有以往的毕业季那么伤感了。搬家收拾房间的时候翻出一些有趣的东西,比如几年前自己给自己寄过的一张明信片,上面大致写的是:新入学的时候 orientation,跟世界各地来的人聊天,问到别人来自哪里时,总是没法继续聊下去,因为对于那些地方一无所知。以为游历各地之后,便也变得能侃侃而谈。但是去过的地方越多,却越觉得世界如此之大,反而更加不敢妄加评价了。

我觉得自己的成长历程仿佛也是类似,在一个宁静的小镇长大,一个内向的小孩,好像还有一点青少年的多愁善感和无病呻吟;在大学期间逐渐变得没心没肺地快乐起来,狂妄得仿佛自己的心能装得下全世界;而在过去的几年仿佛才又慢慢沉淀下来。导师我答辩的时候介绍说我是一个 quiet and happy 的人,在我自己看来大概是再贴切不过的描述了。当然 PhD 的这几年总是酸甜苦辣都混杂在一起的,大概我自己对于大部分事情都是一个“好了伤疤忘了疼”的状态吧,所以到最后就觉得是非常珍贵的一段经历,自己也收获了许许多多的东西。不过既然是年终总结,那还是说说今年的事情好了!

首先第一件事情就是:博客一如既往地在持续荒废中!!!其实我有几篇写了超过一半的草稿,最后也还是没有能顺利完成。我有时候想也许也不能全怪自己懒,有时候想想自己确实真的开了太多的线程,虽然很开心,但是有时候玩也玩得筋疲力尽。😅

闲事类大概目前优先级最高的还是练琴,要保证坚持每天一小时以上的练习时间风雨无阻,还是需要相当多的 priority 的 quota 才行的。不过比较开心的是在练习上终于有了一点突破。年初的时候杂七杂八学了一些乐理,虽然还需要更系统的学习,但是对于一些东西的认识也更深刻了一点。本来一直是在练习车尔尼 599,期间听到 C 弹的一曲悲怆(第二乐章),觉得很好听,就不小心种了草,然后四月份的时候偶然看到谱子,觉得节奏还蛮规整的,一开始也不难,就随便开始练练,当时完全没有意识到这是一个四声部的曲子。后来暑假去了伦敦,刚好在公司也找到一个 Yamaha NU1,但是由于没有老师教了,于是也没有了 599 的作业,我就自己集中练习悲怆,其实从很吃力到突然觉得似乎可以弹完好像是一个很突然的转变。那阵子自己很开心,每天晚上回去都会听各种不同版本的演奏,白天去公司再好好练习,并且多少会弹大部分之后,自己也能感受到音乐里的情绪,而不是像 599 之类的只是练习技法的小段落。并且我觉得这个曲子是听了之后能让我感觉到非常平静的那种,自己弹出来更是有很强烈的效果,工作到心情烦躁的时候跑到楼上戴上耳机弹一下这个,总是能让我平复下来。到实习结束的时候居然能够完整弹下来了。下面两个一个是11 月底离开学校之前录的版本,一个是最开始学的时候,也就是4 月份录的一个片段(难听慎点,对比用😂)。

      

总而言之这是我第一个学会的完整曲子(当然只是一个乐章),到现在是学琴第二年,其实我完全没有想到今年之内就能做到这件事情。虽然目前只是“学会”的状态,还弹得很不好,特别是轻弹的手指非常拿不稳,而且前前后后学这个曲目也是花了很久的时间的,再回去看自己以前弹的 599 也并没有说就一下子变得很简单的样子。所以说感觉好像也并不是有一个什么质的飞跃之类的,但是老师还是很鼓励的,我暑假回来弹给她听了以后她就暂时不要我弹 599 了,而是给我找了三个其他的短小曲子,一个巴赫,一个萧邦和一个比较现代的小曲目让我弹。当然到毕业为止只学会了萧邦那个夜曲 (No. 20 in C-sharp minor, Op. posth.) 的一部分。搬到西海岸之后,第一时间买了琴,不过还要重新找老师之类的,不过一切都还要等安顿下来再说。

除了练琴之外花时间最多的大概就是画画了,我觉得在这一方面我今年也是有一些进展的,特别是在自己之前最弱的颜色和光影方面。在schoolism上看了两门课,一个是 Painting with Light and Color with Dice Tsutsumi and Robert Kondo,另一个是 Essentials of Realism with Jonathan Hardesty,感觉了解到了许多自己以前完全没有概念的东西。

总而言之颜色是一个非常 tricky 的东西,需要系统地学习,以及多观察和练习,除了上面提到的课程之外,James Gurney 的书《Color and Light : A Guide for the Realist Painter》也挺不错。颜色的感知是一个非常主观的东西,人的视觉感知系统在客观的信号输入的基础上加入了非常多的脑补内容,了解了这些就能比较有效地制造合适的视觉效果。

当然我的练习还远远不够,今年大部分画画的时间集中在十月(对于inktober的尝试)和十一月(放空期间的练习和临走送人的几幅画)。大部分时间都是在 iPad Pro 上作画,Wacom Intuos 几乎处于完全吃灰状态。不得不说 iPad Pro 和 Apple Pencil 是我最满意的设备之一了,在理解到整体感重于细节这个重要的 point 之后,我认识到自己并不需要最大的绘画屏幕,于是为了便携性将原先的第一代 12.9 寸 iPad 升级到了第二代的 10.9 寸。

在伦敦期间无意中看到一个叫做Industry Workshops的东西,似乎是 CG、Concept Arts 之类的一个 workshop,于是报名去参加了。由于我比较不会搭讪,所以并没有结交到什么艺术家朋友,不过活动还是相当有趣的。有人做 technical 的 tutorial 或者 demo,有人讲一些具体的 project 的制作过程,也有人讲自己作为职业 artists 的心路历程,或者对于新入行者的职业建议之类的。还是能感觉到,要是把这个当做职业的话,还是会有很多 struggle 和 challenge 的,不管是从物质上还是从心理上。另外还有一些 interactive 的 session,比如 live drawing,当然我以前有在旅途中画路人的经历,但是画会摆姿势的专业模特还是不太一样的感觉。对着真人画和对着照片画真的是太不一样的体验了。当然请模特是一件非常花钱的事情,不过在像伦敦这种艺术氛围比较好的城市会有那种 drawing club 一类的活动,在某一个固定的时间到一个场所,通过均摊模特费用的方式大家一起来画画。

另外我还在 IW17 见到了 Procreate 的人,和他们聊了聊,发现他们公司人好少好少。我原本以为是一个很大的团队,毕竟 Procreate 现在是 iPad 上最流行最专业的绘图 app。心里还是有过那么一丢丢想法觉得跟他们去做这个说不定也是很有趣的,虽然我完全不会 iOS 编程哈哈。

最后在毕业末本来想画很多实体画送给不同的人,最终还是没有画出几幅来。一方面我自己不论是在丙烯还是在油画方面的技法都远不如 digital 绘画熟练,另一方面创作一幅画(即便只是对着照片或者甚至是原画临摹)虽然所有的绘画时间加起来可能一般不会超过十小时,但是显然并不是扔给你一天时间你就一定能画一个东西出来的。这个有点难以解释,特别是对于偶尔有让我帮忙画一幅画的朋友,有时候我觉得最幸运的事就是我并不以绘画作为职业,所以在没法画出东西来的时候也不会有太多的苦恼。

其实把自己的作品送人是一件非常让人舍不得的事情,聊天中 JJ 说过她非常不愿意做这样的事情。不过我倒是蛮喜欢送人的,一方面来讲是一种情感的表达,另一方面舍弃自己喜欢的作品似乎有助于刺激自己努力创作更好的作品。我还尝试了另外一件事就是把自己过去的一幅画给覆盖掉,直接在上面另画一幅,有一种死与新生的感觉。

上图左边是油画右边是丙烯,在短时间内同时用了两种媒介之后,我终于明白了两者最重要的区别:干的速度。虽然听起来好像无关紧要,但是当这速度差别在几千倍的时候,就几乎是质的不同了。丙烯几乎是在几分钟之内就能干了,几乎不太能在画布上混色,而是要事先调好颜色之后再画上去,反过来油画几乎是一个星期都干不了,大部分画是需要画很多层的,如果是用油画,就必须得等上个把星期,等上一层差不多干掉之后才能开始画下一层,否则就完全混在一起,变成和稀泥画法,fancy 的叫法叫做 wet-on-wet,更加 fancy 的叫法是alla prima。上面的油画由于没有时间等它慢慢变干了,就是用的 wet-on-wet 的画法,其实也蛮有趣的,就是好像比较费颜料。

除了练琴和画画之外,今年突然又点开了一个新技能分叉,就是拍照,当然这里能走多远就很难讲了,不过至少是买了一个相机。由于我最感兴趣的是街拍人像,而且又比较在意便携性,最后买了 Fujifilm 的 X100F,是一个不能换镜头的定焦。我比较喜欢抓拍大街上的人生百态,总之就是拍别人日常生活中的样子,所以几乎都是拍陌生人。究竟如何拍陌生人,这个不同的人有不同的行为准则,有些人偏好先取得对方同意(比如对方穿着很有特色的衣服)再拍,有些人则喜欢抓拍某一瞬间(所谓的candid shots),这样当然就没法事先取得同意,此时可以事后再请求许可,或者干脆不请求许可。或者比较夸张的有比如像Bruce Gilden这样的直接拿一个大闪光灯在街上对着路人闪的。

我比较喜欢假装成胡乱拍照的游客,对着周围也一阵乱拍。这样的情况下用一个小型相机似乎是最好的,如果是拿着手机乱拍感觉就很奇怪,反过来如果是拿着很高端的巨大的相机在拍,也会让人引起警觉。当然有时候我也会请请求对方同意。不过其实至少有超过一半的时间是在自己跟自己做了很久的心理斗争之后放弃或者错过了拍摄时机。因为比较跟陌生人搭讪是很耗费能量的一件事情,但是反过来其实也正是因为如此所以 street photography 才特别好玩吧,对于我来说,算是一种跳出自己的 comfortable zone 的行为。

我觉得开始尝试对摄影有一点了解之后,对自己产生的影响主要是两个小的改变:一个是拍照的方式,以往我拍照的时候主要目的是记录,总是尝试把尽量多的内容圈进照片之中,现在则更多地尝试着找一些比较美观的画面,而不太在意记录,反正我觉得照片局限性也挺大的,能够记录下来的身临其境的感觉其实非常有限;另一方面就是现在自己在外面逛的时候也就会自然地观察得更仔细一些,有时候会看到一些以前会无意中忽略的有趣的小细节。我感觉观察对于绘画来说也是非常重要的一环。毕竟人的视觉系统由于进行了大量的脑部和信息选择处理,没有主动去观察的很多内容都会被直接忽略掉,所以从“看到一个东西觉得好看”到“看到一个东西能观察出它为什么好看”还是要经过一定的训练的。

感觉自己这一年用相机拍的照片还是大部分是在欧洲游玩的时候,毕竟平时是不会总带着相机出门的。由于年初去法国开会的时候无意中拿到了一个一年的 multi entry 申根签证,所以暑假在英国的时候就顺理成章地周末就跑去欧洲玩。这样子才觉得欧洲真是好小,从伦敦坐飞机一个半小时之内几乎可以跑遍欧洲了,相比起来在美国从东边到西边就要飞六个小时。

其实我一开始是打算周末好好干活改改 thesis 的,但是过了两三个星期之后我就意识到周末如果不出去玩几乎就是在睡觉吃饭与磨蹭中荒废掉之后,立刻订起了行程。其实伦敦本身也是一个非常好玩的地方,博物馆资源非常丰富,并且几乎全免费,其他还有城堡、宫殿之类的,暑假也刚好是BBC Proms古典音乐节,几乎每天都有演出,最便宜只要六七镑就能买到站票。坐火车去牛津和剑桥也非常方便(不过我只去了剑桥)。

最后我找到几个空余的周末,跑去了 Amsterdam、Edinburgh、Copenhagen 以及去看了挪威的峡湾。奥地利和苏黎世本来想去,但是没有时间了,还有冰岛本来可以在回美国之前去的,但是考虑到许多地方都需要自驾游,决定放在等我车技练好之后(美国的大部分景点几乎都是类似的原因没法立刻去)。跑来跑去一个主要的感受就是,欧洲各个国家之间的民族和文化历史差异好像还是很明显的,每个国家都有它自己的特色。不过反过来想想大概中国的不同的省其实也是这样吧。

阿姆斯特丹是一个自由之城,大概一提到就会想到同性恋、大麻之类的,不过若是关心艺术的话,关键字应该是梵高、伦勃朗之类的。只是梵高博物馆排队实在是很夸张,建议不要买I amsterdam City Card,直接通过网上订票按照固定的时间过去,否则要等一小时以上。我还非常幸运地在梵高博物馆出来之后在广场上碰到人体彩绘艺术展,也算是感受到了当地人民自由开放的一面,模特们赤身裸体,由绘者往他们身上涂颜料绘制成各种图案。其实模特大部分就是普通人,有年轻俊美的青年,也有年老身体逐渐衰败的人们,还有同时有两种性征的人(我也是第一次知道有这样的形式),都毫不掩饰地在广场上等待作画。

此外我的印象就是很多花很多自行车以及非常酷的全城运河。街头有比较奇怪的男厕所,没有门,旋转进入,只能站着上厕所,并且外面可以看到里面有人在“do his business”,一开始我不知道是什么,看到有人在里面就试图张望,结果里面的人说,这是厕所……😂跑去动物园里迷路看到了企鹅,防护网不知道被谁弄了一个洞,可以伸手进去(估计按理是不允许的),于是非常幸运地摸到了小企鹅😆。临走还买了一直米菲兔,陶瓷蓝色真是没有抵抗力,其实更喜欢一个真陶瓷的,但是太贵了,而且估计路上要被碰坏。

荷兰的历史也很有意思,除了航海很厉害之外,似乎很早就发展出了行会 (Guild)这样的制度。其实整个国家的行程过程也比较复杂,所以才会有 Holland、Dutch、Netherlands 这些看起来毫不相关的各种名字指代。

哥本哈根是一个童话般的城市,除了作为地标的新港以及小美人鱼像之外,海边的星形城堡也是非常惊艳。博物馆里可以找到很多 Degas 和 Matisse 之类的。还有一个比较有特色的是它有一个城中城——自由之城 Christiania,是一个自我宣称自治的无政府主义小区。现在治安似乎都已经相当好了,我进去逛了一圈似乎除了集市有在卖一些很诡异的含诸如“臭鼬提取物”的烟草,以及风格浓烈的街头艺术之外,居住区似乎就是普通的田园风光。

去爱丁堡的时候我特地挑选了一个长周末,因为听说那里正好有国际边缘艺术节,今年的节日在爱丁堡 300 多个场所有来自世界各地的艺术团体在长达 25 天的庆典中一共举行了五万多次演出。边缘艺术节的由来也很有趣,据说大约 70 年前官方艺术节的时候有几个团体因为没有得到邀请不准进城,于是他们就在附近自己开始搞了个庆典,后来逐渐成为了规模宏大的“边缘”艺术节。长达一个月每天街头从早到晚都有各种表演,真是有点难以想象。并且爱丁堡本身也是一个非常漂亮的城市,视线穿过王子街花园看往山上的爱丁堡城堡的时候真是惊叹了。

另外我在爱丁堡还有一个神秘“网友”,我曾经收到过一张那里寄过来的明信片,后来偶尔互相交换过几张明信片但是并没有交换过其他任何联系方式,感觉还蛮好玩的。我原本打算玩一个恶作剧从爱丁堡寄一张明信片,结果临时发现自己并没有在任何地方记下来对方的地址……😂另外在一个教堂听一个大提琴演奏的时候一个自称是维也纳在爱丁堡的使馆的人拉住我聊了很久,晚上还约了那个维也纳来的大提琴手去喝酒也叫了我,虽然觉得有点奇怪,但是我感觉没怎么跟搞音乐的人聊过天也就跑去了。后来还在公园里碰到他,又聊了一阵,他开始说到计划生育、同性恋相关的话题,我虽然不介意跟人讨论这方面的问题,但是总觉得有点怪怪的,之后就以要去看演出为由走掉了,也拒绝了他要开车带我去城外边转转的邀请。我稍微搜索了一下 LinkedIn 上的 profile 之类的和他给的名片好像也并没有什么问题,应该不至于是人贩子之类的,也许是我有点多心了。😅

去挪威的时候犹豫了很久是去奥斯陆城市游看 Edvard Munch 还是去西边看峡湾。最后选择了后者。峡湾虽然在其他地方也有,但是差不多也算是挪威的“特产”了。因为我只有三天时间,所以只去了 Stavanger 那边的 Lysefjord(可以 hiking 看布道石),之后坐船到 Bergen 参加 Sognefjord 的游船,最后乘 Flåm 小火车回到 Bergen,第四天一早飞回伦敦。全程都非常赞。回来以后发朋友圈写了一段感想,一直被小伙伴吐槽说是写高考作文😅:“多年前有个到处跑的孩子跟我定过约要一起来看峡湾,当时我还不太懂人为什么要旅行。回想起来,年少时懵懂无知,年轻时一心想要追寻永恒,摔了跤有唏嘘所谓的海誓山盟往往到最后不变的只剩下海和山。后来才意识到山与海的寿命在时间的长河里也不过是一转眼,一如冰川侵蚀河谷,海水再倒灌形成峡湾,万亿年之后,又会是什么样子。每次想到这些,就觉得平日你你的那些烦恼啊忧愁啊,都不算什么事。”实际上当时我从欧洲大大小小的地方收到了许许多多的明信片,诉说各个地方的印象,但是我发现所有的地方都是在自己去过之后,才会真正看得懂别人所描述的东西。

去的时候超级兴奋,Stavanger 并不是一个大城市,飞机到的时候已经是凌晨,机场外就只有几个简陋的公交车站牌,由于英国的手机可以欧洲漫游我也就没有仔细准备,结果居然碰到漫游信号不能用,我居然也一点不慌,等了好久坐上一个 bus 照着手机上的地图缓存坐到城里一个附近的地方,再走到住处,却敲不开门,当时想着大半夜的是不是能等得到一个路人来借手机打前台电话,后来突然手机信号恢复了,才终于把前台人叫醒。她给了我一个顶上的阁楼,有一个可爱的天窗——就是我从小就一直想住的那种配置!超级开心就在 iPad 上把它画了下来(见下图左)。

布道石是一个垂直落差六百多米的天然巨石,位于吕瑟峡湾中部,可以坐船过去然后 hiking 到平台上。虽然看起来很吓人,但是一点也不危险,因为那个平台上非常宽敞。不过我觉得经常举着相机拍照,由于镜头里看到的场景(根据镜头焦距不同)和人眼看到的距离感是不一样的,会产生一种悬崖边还很远的的错觉,所以我也好多次走到非常边缘的地方,后来想想反而有点心虚哈哈。到达布道石之后还可以继续走,不过就是野路了,我走了一阵子看到远处有冰川,再往前走有点像“望山跑死马”的感觉,由于怕赶不上回程的船,就没有继续往前了。

Bergen 坐船进 Sognefjord,再坐火车回来。其中 Flåm 小火车那一段从低海拔地区一直上升到海拔一千米左右,风景如画,在 Lonely Planet 里曾被评为全球十大铁道之旅第一名。小火车会接上一段正常的火车返回 Bergen,我在车上无聊时开始用 sketchbook 画车上的人,中途正在偷偷画对面以为女士的时候突然笔没有墨水了,没想到她从包里拿了一支笔借给我,我反倒因为偷偷摸摸地觉得有点不好意思了,便给她看了正在画的东西。Bergen 城里也有一些挺好玩的,比如番托夫木板教堂,山上的小树林里有各种巨人和精灵雕塑,还有 Bryggen 和鱼市。我下午去鱼市的时候还发生了一件有趣的事情,当时我看到有一个摊位有很多人围在那里从一个巨大的盘子里拿分好的小鱼片吃,心里就觉得,大概是卖到下午没有卖光的鱼分给大家吃了吧,便走过去问一个人说那个是什么鱼,但是她似乎不讲英语,跟我说了一通,我也没听懂,只见她使劲摇头,我心想,大概是想要表达很难吃的意思吧。于是我犹豫了一下,又想,难得来一趟,即使很难吃,也是一个体验啊,于是就伸手去拿,结果周围的人一拥而上把我死死拦住,都拼命挥手摇头,叽里咕噜说一大堆。我楞了一下突然反应过来,也许这其实是一个 party,有人花钱买了请亲朋好友们在那里吃的……😂

不过虽然在伦敦周末跑去欧洲很方便,但是连续几周下来人几乎是要废掉了。还好我机智地终究留了一些周末来给自己宅在家休息。因为我出门一般周五晚上或者周六早上出发,然后周日晚上或者周一早上回来,由于时差的缘故,周一早上飞回伦敦还刚好能赶上上班。但是这样一来就完全没有休息的时间,特别是平时上班也并不是很轻松的,而我自己的旅行方式也完全不是放松式的。每次早上四五点闹铃响起来需要赶紧起来去赶飞机的时候我都心里极其动摇——觉得为什么要这么折磨自己,难得周末连觉都不让睡。但是每次踏上目的地的时候又总是充满了喜悦!在我看来自己的旅行方式似乎就是典型的跳出 comfortable zone 之后得到更大的 reward 的一种形式。因为从做旅行计划和景点线路规划、订机票和酒店开始,之后要起早贪黑赶飞机,为了行动方便会带尽量少的行李,为了省钱会去住便宜的 N 人间青年旅舍,为了某些奇怪的原因大部分时间还得吃麦当劳或者是备用干粮,旅途本身也经常包括暴走或者逛一整天博物馆之类的行程而非常劳累。总之旅行对我来说从来都是一件很费劲的事情,但是另一方面又不断地吸引着我。

当然若是跟朋友们一起出行那又是另一回事,我在这样的场合下通常是一个只会搭便车的“废人”😅,既不会参与行程制定,也没法帮忙开车,所以其实是比较轻松的。当然不论是自己玩还是跟人一起玩其实都挺开心的,但是好像是两种很不一样的体验。在离开波士顿之前的最后一次出行是一次滑雪的 trip,其实在波士顿的第一次外出游玩也是滑雪的 trip,倒也是一个非常有趣的巧合。不过第一次去之后由于每年冬天都回国,虽然后来也很想去,但是总是错过去滑雪的机会,结果现在发现小伙伴们的水平已经跟我早就不可同日而语了,不想自己一个人玩就跟他们上难一点的道,结果摔得很惨,虽然还是很开心的,不过回来以后屁股痛了一周。去加州之后的第一个 trip 是四天的死亡谷一带 road trip,感觉除去睡觉的时间估计有 3/4 的时间都是在开车(虽然我不是司机之一),也许 road trip 的真谛其实是大家在车上聊天听歌?😃不过死亡谷挺好的,辽阔的平地是典型的美国粗犷风格,严酷的环境导致只有极少数的生物存在,到了晚上就变得极其安静,对于一个噪音敏感的人来说简直就是天堂。

实际上噪音目前是我搬家之后需要适应的几大问题之一。由于耳鸣的缘故我在近几年变得对噪音很敏感——因为噪声会加重耳鸣导致我精神崩溃掉。但是像湾区这种公路上的城市,汽车噪声简直无处不在。此外气候如天堂一般的加州其实冬天的时候早上和晚上也会非常冷,办公室或者家里持续不断的空调和暖气的轰隆隆噪声也是让我在搬过来一个月之内持续维持数年来最严重的耳鸣状态。并且我一时半会也想不到很好的解决方案,只有希望自己能早日适应过来了。毕竟在学校的时候我最终还是勉强适应了实验室里的空调噪声。

另一个更严重的问题就是汽车本身。我发现我内心对自己一个人去做某一些事情有一些奇怪的恐惧感。比如之前提到的自己一个人旅行的时候总是会吃麦当劳,除了节省时间之外,更主要的原因是我对于“一个人去一个没有去过的餐厅吃饭”这件事情有非常严重的抗拒或者甚至恐惧心理。我自己也难以形容,但是事实上就是如此了,大概是脑回路哪里有一个东西搭错线了吧。而超越餐厅的恐惧感则来自于“一个人开车”。我想等我车技熟练之后这个恐惧感最终会消失掉,但是目前这几乎是一道无法逾越的障碍,在有人坐在副驾的时候我就不太紧张,而且其实也基本能应付各种情况,但是一个人的时候就会 panic。我觉得自己这种心理估计是类似于恐高症那样的病症。总之 2018 年的新年愿望之一,就是成为能独自开车的人……

2017 年还有一个很明显的变化就是我看的动漫数量急剧下降,主要是我现在完全不追新番了。大概一方面是现在新番的质量越来越糟糕,国内版权开始变得严格之后让看动漫的 effort 也更大了一些,所以一些可看可不看的剧就懒得看了;当然另一方面的原因大概也是练琴之类的花了许多时间,就没有太多空余可以看动漫了。今年看的唯一新番就是《进击的巨人》第二季,依旧画面精良情节紧凑。此外偶然翻到看了一个叫做《月色真美》的动漫,虽然也是 17 年番但是我是在完结很久之后才看的。还有《声之形》是去年就一直想看的一个剧场版动画,终于有资源之后看得有点失望。最后《命运之夜天之杯第一章》是被 ZD 拖去电影院看的,倒是非常惊艳。其他其实还间或翻出来过一些以前看过的旧动漫(比如《四月是你的谎言》、《冰菓》之类的)来看。总体来说现在大概是回到了大学时代早期的状况,我当时也并不追新番,而只是在各种机缘巧合下看已经评价很高的动漫,到后来才慢慢开始追番,PhD 期间最严重的时期是几乎每天都要看动漫的。

漫画几乎没有怎么看,其实一直想补一下《七龙珠》,但是也一直没找到合适的机会。剧集方面比较喜欢且看完的有 BBC 的纪录片《Blue Planet II》惊艳绝伦,《权力的游戏第七季》感觉剧情发展速度超过小说之后开始有点崩得不成样子了,但是画面却比前几季更壮观了,《美国众神第一季》,日剧《四重奏》以及很古老的日剧《东京爱情故事》。电影除去在飞机上看的一些大烂片之外,比较有印象的就是《Loving Vincent》、《Blade Runner 2049》、《荒野猎人》、《Logan》、《卡萨布兰卡》、《银河护卫队 2》、《寻梦环游记》、纪录片《AlphaGo》。比较期待却有点失望的一个是《加勒比海盗 5》以及《La La Land》,另一个是期待了很久的《九州·海上牧云记》电视剧,画面其实已经很精美了,但是情节实在是太意识流了。

游戏方面今年是塞尔达传说的《荒野之息》,其实买 Switch 基本上完全就是为了这个游戏,也确实至今还没有在上面买过其他游戏。《荒野之息》我是非常喜欢的,大概是我唯一玩下来的一个比较现代的操作也比较复杂的游戏了(相比红白机或者像轨迹系列那种操作比较简单的 RPG 类游戏),之前有尝试过《古墓丽影》之类的,由于太真实让我有点不能接受,大概还是像塞尔达这样比较卡通的会更适合我一点。塞尔达唯一的问题就是有点玩起来就停不下来……😂

读书方面数量跟去年相比也有点缩水,在构成上也有了比较大的变化,今年看了实体书 14 本,电子书 17 本,而去年则几乎都是看的电子书。另外我今年买了一个 Kindle,主要是飞机上经常不让使用手机,或者是要留足够的电量在地图和应急上。当然多看上的电子书就没法在 Kindle 上看,这个也没有什么好的解决办法。感觉我每年都在 complain 电子书平台不兼容的问题,现在看来越来越没有办法在近年能解决了,最后我发现一个不那么心累的办法就是不要尝试用一个统一的解决方案去搞定所有的问题,于是我最后成了:有实体书且没有便携性问题时就看实体书,多看电子书在手机和 iPad 上看,其他电子书在 kindle 上看。比较遗憾的是今年并没有看日文书,虽然毕业去跟日语老师道别的时候她夸我说日语并没有退步。😃以下照例简单评价以下我今年看过的一些书,排序大致按照喜欢到不喜欢。

  • Color and Light : A Guide for the Realist Painter:因为在很多地方看到推荐就买来看了。感觉是非常不错的书,介绍光线和色彩,同时从艺术和科学(包括光学以及我们人类的视觉和神经系统方面)来解释一些常见的现象和场景,在平衡上把握得还是比较好的,没有变成很枯燥的学术探讨,也并不只是知识和画法的罗列。

    当然只是看这本书感觉并不会对绘画一下子提升很多,它并不是一种循序渐进地讲解和练习的讲解方式,而是按照知识点本身进行分类罗列和讲解。感觉还需要反复回过头去看,并结合日常的观察,将书中讲解的现象真正融入到自己的知识体系中,再加以练习才行吧。总而言之其实感觉更多地是教如何观察而不只是讲如何绘画的书。
  • 聆听音乐 : 第五版:超赞古典乐入门读物,英文版价格比中文版贵 20 倍。配套资源: 网上可以下载 6 cd 的配套音乐赏析,youtube 上有作者的 yale 公开课,coursera 上也有一个更新更模块化现代化的课。全都推荐。
  • 海伯利安:几乎是数天内一口气读完。大气磅礴而又引人入胜,六个故事风格迥异但都不缺乏想象力。与三体或者基地系列那样对正面“战场”进行直接描写的风格相比,我还是更喜欢这种从一些个人各自的视角和侧面描写,然后全局画面在细节拼接中自然地被读者重建出来的手法。读者有了更多想象空间和线索连接的愉悦感,也更富有各自角色视角的人情味。应该可以列入最好的科幻小说的行列里。
  • 龙枪编年史:全三册。龙与地下城世界观下的魔幻冒险故事。作者脚注真是剧透狂魔。另外看这个书真是很累,一般的魔幻故事都是跌宕起伏,平静和紧张的情节穿插构成故事线。儿而这个几乎可以说是一路让人紧张到底,一口气都不能喘。当然永恒之人结局是不是有点小小的草率?
  • 龙枪传奇:全三册,故事发生在龙枪编年史之后以及之前,因为涉及到了时空穿越。选取了龙枪编年史中最有意思的两个人,雷斯林和泰斯,作为故事的主角。全文故事性还有描写,刻画都比编年史更强一些,虽然有些地方的转折好像有点不知道是怎么回事。
  • What to Listen for in Music:作者是美国当代 (1900~1990) 作曲家指挥家,这本书似乎非常畅销,尝试给非专业人士解释如何去欣赏古典音乐,内容大部分都还是非常浅显易懂但是又不乏深度,娓娓道来,不仅讲什么,而且讲为什么,比如讲 musical form,会以作曲的具体过程为例子讲作曲家为什么需要 musical form 但是又不完全受限于此。当然最大的缺点就是没有 interactive 的乐段和乐谱进行交互。感觉大众听众对于古典乐欣赏的第一道门槛还是集中注意力专门去听这件事,大部分人听音乐主要是放松或者作为一个背景音存在,不太有时间或者motivation不干其他事也不睡着地专注去听音乐,更何况是超长音乐。
  • Reductionism in Art and Brain Science : Bridging the Two Cultures:一个朋友借了我这本,作者是诺贝尔奖得主,神经科学家,退休之后开始研究艺术。不过看完之后并没有让我就一下子能看懂以前看不懂的现代艺术,并且我觉得大概 reductionism 只是现代艺术的众多方面中的一面,但是无疑是一本有趣的书。
  • 万历十五年:很有意思的一本书,以万历十五年,也就是万历皇帝开始罢工不上早朝的那一年为出发点,分析了当时的中国社会、国家政治、经济、道德和律法体制的现状:一个 local minima,弊端逐渐显露,但是却又环环相扣难以改变。也分析了万历皇帝、张居正、申时行、戚继光等人各自对当时情况的认知以及他们所做的尝试。
  • 人性的枷锁:毛姆通过描写菲利普的一生,从大家的对话讨论或者内心独白中以不同的视角道出了人在成长过程中对于人生的认识和感悟。我想其中有挺多大概是作者自身的看法吧。我觉得伟大的作家和其他人的一个区别在于作家不仅能跨越空间能够同时活在许多截然不同的人的视角下,也能超越时间活在一个人的不同阶段。

    并没有像《月亮与六便士》那样喜欢这本书,大概因为主角优柔寡断的性格很是让人讨厌吧,有时候会觉得主角很多时候完全是自讨苦吃,作茧自缚,可是又不得不承认每个人其实也都活在各自的枷锁之中,甚至有时候主角成长过程中的一些可笑的行为大概也能勾起自己曾经经历过的一些磕磕绊绊呢。也许人的一生就是不断地突破自己的一个个枷锁的过程。至于人生的意义,这个大概又太深奥了。从蜉蝣到宇宙,不论在什么尺度下,时间仍然像一条无尽的长河,大概没有什么东西是有绝对意义的吧。
  • 刀锋:我读的版本翻译得比较一般,有一些比较好玩的翻译,比如“晃膀子”,但是也有一些地方简直句子都读不通顺。主要比较喜欢里面一些比较犀利的对话和讨论。整体来讲并不如《月亮与六便士》那样喜欢,但是要超过《人性的枷锁》一点。大概我不太懂主角拉里到底追寻的是什么。不过毛姆先生在书里把自己写得也是相当犀利和风趣,和《人性》里那个无知的少年似乎是判若两人了哈哈。
  • Consciousness : Confessions of a Romantic Reductionist:很有意思的书,讲什么是 consciousness 以及如何才算具有 consciousness、如何测量等等。虽然是以正经做学术的态度多年一直研究这个问题,但是书其实是一种比较科普的方式写出来的,当然最遗憾的是最终并没有一个解答。相比给出答案,更多地是提出了许多相关的问题和思考的方向,总结(并否定)一些前人的尝试,由于并没有结论,许多很有意思的章节比如关于“自由意志”都是意犹未尽。最后作者提出了一种基于信息论的模型,但是感觉科普的文字写法根本就讲不清楚细节,所以看起来好像也不是很具有可操作性。不过作者认为意识并不是人类或者甚至生物所特有的,任何复杂系统,当其信息整合复杂到一定程度之后,就会具有意识,感觉人工智能指日可待了哈哈。

    了解到了一些以前理解有点偏差的知识:比如神经元的种类原来是茫茫多的。原来有些植物人会有”睡觉“ -> ”醒来“的生理周期,在醒来的时候眼睛会睁开。另外我比较赞同最后一点点关于宗教的讨论。宇宙由于某些未知的原因形成了,并且发展到了今天这个样子,很有可能是由于我们所无法理解或者测量的外力而导致的,(for now) 我们并不介意把这样的外力称作”神“,但是这样的神和宗教里的神显然是两种截然不同的东西。
  • The Joy of Music:Bernstein 的电视演讲系列 omnibus 的讲稿转录,但是很仔细地做了插图和乐谱标注。只是对于无法直接读谱成曲的人来说,大概有一部分内容还是配合视屏看会容易 get 一点。其中有一章从一个作曲家和指挥的角度以具体的例子讲解了一个指挥在乐团中的作用,以及他在准备一个谱子的时候发生的一些事情。有一段讲作曲家和电影音乐制作和混音之间的“冲突”,确实从不同的视角来看,音乐的要素大概会很不一样唉。
  • 安娜·卡列尼娜:许多描写很细腻,但是我有点不太理解主旨是什么。不过也许小说并不一定就要有个主旨?另外觉得世间有许多事,除非你亲身经历过,或者你是个作家,否则大概是永远无法真正理解的吧。
  • 认识乐理:基础入门,但是讲得比较有意思,很多很多的习题,引用经典名曲里的片段,不过不做习题的话就会看得飞快。
  • 古尔德读本 : 天才钢琴怪杰古尔德的文字炼金术:上下两册。古尔德的一些文章的合集。其中有一些比较有趣,比如他自己对自己的采访。总体来说比较艰深难懂,有许多很专业并且又是很偏激的观点,同时又是以一种(不知是不是那个年代比较流行的)讽刺诙谐的语气写出来,所以有时候如果不是自己真正理解的话,可能甚至都不太清楚他要讲的是正面还是反面,所以有些地方过得比较粗略,等我以后音乐水平提高了也许可以再看一遍吧。
  • 人类简史 : 从动物到上帝:比较有意思的一本书,讲人类的起源和发展,虽然是讲历史,但是并不是以时间顺序简单罗列,而是从生物,宗教,社会学,经济学,心理学等各方面视角加以分析和阐释人类历史和社会的变迁。有一些观点是众所周知的也有一些比较独特的见解,但是把这些观点全部整合在一起来思考人类的发展和变迁还是蛮有意思的。不过就是全书试图包含的内容和视角有点太多,有些地方还是显得有点啰嗦冗长了。
  • 未央歌:之前实验室收拾杂物的时候从垃圾堆里救下这本大约是很多届之前的一位台湾学姐留下来的书,直到再过了许多年自己也要离开实验室了才终于翻开。竖排版加繁体字经常看岔列。内容本身还算可以吧,对那个时代的经历没有太多了解和共鸣,比较打动我的是能一直保持一股天真气的小童,但是这样的人现实中真的存在吗?即使存在,莫非他就从来没有过一丝丝动摇和迷惘吗?不过临近结局的时候突然画风急转,是让我不太喜欢的。
  • 再见了,德彪西:音乐和推理相关,应该算是轻小说吧,还蛮有意思的,不过音乐相关的东西,果然光靠文字描述表现力还是大打折扣的。

  • Dinner with Lenny : The Last Long Interview with Leonard Bernstein:Bernstein 晚年的一次晚餐访谈,聊了天南海北的许多东西,比如关于政治啊等等,比较 random。总体来讲没有 bernstein 自己写的作品有意思。不过也有一些比较有意思的内容,比如关于 mahler 的内容,还有关于 glenn gould 以及那次经典的 1962.4.6 在卡内基 hall 和古尔德合作 brahms 第一钢协的整个事件的详细来龙去脉。
  • 海伯利安的陨落:也有一些挺有意思的地方,但是感觉跟第一部完全不在一个数量级上,也许是我期望太高了?亦或是神秘面纱揭开之后的失望?或者单纯是因为我对基督教无感?不过我觉得科幻和宗教结合是一个相当 tricky 的主题,稍不留神就会显得是故弄玄虚,真要写选中的人拯救世界,还是日本动漫那种中二热血风比较容易掌控吧。《海伯利安》本身是非常好看的,但是海伯利安四部曲中的剩下几部似乎就不太够得上级别。
  • Piano Notes : The World of the Pianist:主要是作为一个钢琴家业内人士对于钢琴这个行业相关的许多事情的描述和看法,比如关于钢琴教育和比赛中的问题,音乐会演奏和录音的差异,演奏风格等问题的探讨,对于非业内人士来说可能有些地方就没那么强烈的共鸣,不过时不时会出现一些很有趣的小八卦。顺便作者好像对 Steinway 这家公司意见很大哈哈哈。
  • 半面维纳斯:在网上看到本杰明的画觉得诡异的用色还有光感很好看。买了这本画册来收藏。不过好像看多了几幅很快就有点审美疲劳了。对里面的那些文字实在很无感。
  • Cats Galore: A Compendium of Cultured Cats:一本有趣的画册,适合咖啡读物,或者是对艺术比较了解的朋友一起看。名画和戏剧,银幕里的场景换成猫的水彩画,有些画得还蛮传神的,当然也有些和原画差别挺大的。总之猫看太多了才真觉得人更好看哈哈。
  • Autonomous: A Novel:还不错,关于 AI,以及 biotech,在设定上有挺多挺有意思的地方,也难得有对学术界 graduate student 的生活有描写。不过也有不太喜欢的地方,比如机器人内置的人脑被用来当做一个人脸识别的专用辅助组件,而不参与机器人的任何思维,行动,逻辑甚至情感等活动。问题是就目前的技术来讲,大概人脸识别是对机器人来说最最容易做到的一件事了吧。

    另外更大的问题就是情节不够吸引人,整个过程给人感觉就是不温不火,情节松散,完全没有任何手不释卷的感觉,或者说我之所以一直继续读下去很大程度上是为了看看作者到底能平平淡淡地写多久而不出现任何剧情高潮……
  • 钢琴欣赏十八讲:感觉给音乐赋予了太多的音乐以外的东西,把作曲家的境遇和逸事跟音乐作品联系起来也许会有助于加深理解,但是太过就有点本末倒置了,好像真正讲音乐本身的内容其实比较少。原本作为故事集来看的话也还不错,但是打着国家大剧院音乐讲堂的旗号就觉得有点不妥了。特别是一些早期的作曲家好像连故事的整理都有点不太认真。

2017 依然是比较缺乏锻炼的一年,基本上主要的锻炼就是不定期地去游泳。但是毕业之后就不能像在学校那样方便地有很好的游泳馆可以去了,估计锻炼方面就更成问题,2018 年估计得好好考虑一下这方面的问题。另外我在今年还得了一种没法努力工作的怪病😂,症状就是:如果我某天工作或者学习非常卖力,就会口渴难忍,不管喝多少水上多少厕所都依然非常口渴难受。我自己查到的和医生的说法都是糖尿病会有口干的症状,但是经过验血和全面体检之后似乎也没有发现任何异常。并且奇怪的是,如果我某天很放松,或者说即使很累但是只是玩得很累(比如我在暴走 solo travel 的时候),就不会有这样的症状。总之很奇怪,无论怎么都像是我自己编出来偷懒的……😂但是有时候还是挺崩溃的,只能工作多注意休息,以后应该还要勤加锻炼才是,毕竟老大不小了,身体各方面也都开始退化了,想到终有一天“我”这个实体最终会彻底衰败消逝回归大自然,还是多少有点舍不得的。

实际上今年大概比以往更多地思考了一些人生方面的问题,毕竟这是从上幼儿园就开始走的一条读书的直路第一次走到尽头,今后要怎么走,其实很大程度上应该取决于我自己究竟想要什么,如果要思考长远的人生规划,这个问题也就自然被提升到了整个一辈子的目的的层面,或者说人生的意义是什么。我想我应该是一直有一个(不断在变化和改进的)人生哲学的,只是基本上很少 explicitly 地去思考和描述它。原本我想毕业旅行一个人到一个比较 isolated 的地方去好好想一想这方面的问题。当然最后由于签证等各方面的原因没有去毕业旅行。不过也没有什么遗憾的,我后来越来越觉得这些东西大概是无法很方便地具体化的一种潜意识,硬要强行 formulate 出来,大概说出来的东西也是不太能自洽的,因为追溯根源大概就会到诸如自由意志的客观存在性,神的存在性等等悬而未决的问题。

每每有人跟我讨论起这个问题,我就会问一个二选题:你是想要做出伟大的成就,还是想要过得快乐。在我问过的人里几乎没有人能够一下子给出答案,而我自己也给不出答案来。因为这道题本身就是一个陷阱,问题在于人生并不是 binary 的。包括我自己在内,我想很多人都是会希望,或者说至少不会抗拒,做出一些有意义的,影响世人生活或者人类前进进程的成就来。对于我自己来说,好像这方面的期望很一大部分是来自于潜意识里对 prestige 的追求,或者说是得到大家的认同和肯定的一种自婴儿时期就多少会养成的心理。但是从客观来讲,我对于“青史留名”这种事情几乎一点兴趣都没有,“活在世人心中”这种事情在我看来只是一种洗脑,在我自己的肉体衰败同时伴随着我的意识消失的那一刻,所有的事情对我来说都立刻失去了意义。

从“死亡即自我的终结”这一认知立刻就可以导出两条推论:①与“有所成就”相比,我会更偏向于“快乐生活”多一点——需要再次强调的是,这并不是一个 binary 的选择,而是两者之间的一个 dynamic balance。当然由于这些东西本身也是无法量化的,所以说“多一点”、“少一点”本身也没有太大的意义,大概只能是一个 metaphore 用来给自己做一个 guideline 吧。②“死亡”并不是一个事件而是一个过程,不论是从肉体上还是从心智上,一个人都是逐渐 decay 到最终死亡的。所以我会偏向于把重要的事情更多地放在比较靠近“现在”而不是“将来”。有一次从 B 那里学到一句拉丁语叫做Carpe diem,中文常常翻译为“及时行乐”,或者更确切一点的翻译是“活在当下”。也许大概是类似的意思吧。

正面的效果大概就是我会比较有动力立刻就去做自己想要做的事情,而不是“等到什么什么之后”(当然启动的线程过多生活过载的问题也不能忽视);而反面的效果大概就是我是一个不太能对自己的人生做长远规划的人,通常是船到桥头自然直的感觉。事实上每次到需要对未来进行预想的时候,我就会回望五年十年之类的,然后会发现在五年、十年以前的自己对于今天的个人生活乃至整个世界的科技和社会的发展几乎是完全预想不到的,我就会推论未来也是现在的我完全不能预料的。当然这样的推论有很多漏洞,也许是十年前的我太 naive 不具备预测能力呢?另外在周围的人都在积极地规划的时候,如果完全忽视对未来的规划,总是会让人有点不太放心的,万一今天的我太 naive,到今后追悔莫及怎么办?所以我也不会太叛道离经,比如 401K 我还是会认真交吧。

事实上我觉得我还是一直在找寻一种 balance 的吧,比如我也很 enjoy 和不同类型的人打交道,在不同的圈子里的时候我也会尝试去进行 adapt,因为我觉得人们有各自的想法,和人是属于社会的,这两者并不相互矛盾。不过话虽如此,其实我在人际关系的处理上并没有很擅长。我一般很乐意参加朋友们组织的活动聚会之类的,对于跟不是特别熟悉的朋友一起玩,或者只有一两个人参加的那种没法随便放空自己,必须持续 involve 的场合也变得比以前要稍微容易 handle 一点,但是对于亲密程度超过一定程度之后的情况——不论是单纯的朋友关系或者是应当归到感情关系那一类的情况——有时候我就会觉得非常不知道应该如何处理的好。

在感情方面,今年是自由自在的单身的一年,可以说已经变得相当适应并且喜欢这样简单的生活,虽然几次相识相遇我都选择了避让,但是在价值观方面其实并没有变得更加“反对恋爱”,大体上来说可以算是没有改变吧。有时被人 challenge 我的恋爱观,在对质的时候我渐渐地觉得自己在感情方面的认知其实跟自己对于人生价值的认知差不多,如果要追根揭底到后面似乎就会出现一些不太自洽的方面。后来我有点觉得,这些没有正确答案的问题,也许是怎么想都想不明白的,那么多时间不如多去做一些其他更有趣的事情呢。其实我还是对恋爱是有所期待的,只是我向往的是魔法与冒险,并不是温馨与浪漫。

毕业季我特地把自己积攒下来的所有社交用的精力全部花掉见了一些老师朋友什么的,不过还是没有精力见完所有的人了。有一些人大概随后就会再见到,而有一些人大概就是此生最后一面了。我也不知道应当说什么好,总要去面对的事,大概就当做平常事就好,就好像一次偶然的相遇,再聊聊天。收到了许多的拥抱,我很感激,很温暖,也很开心。

一个一个告别的身影
拼凑剪贴一件黑色风衣
未来是本书籍有童话有爱情有推理
我去过的过去谁同行谁远行

关于 5 年的 PhD 生活,我总是有点想要写一点什么的冲动,但是现在一年总结已经写得太多了,还是先不多说了吧。感谢所有陪我度过这一段岁月的人。

那件风衣叫做回忆
谢谢你曾来临曾离去
陪着我像影子像姓名
白色风衣蓝色的你
挂彩虹画星球贴上笑容
曾在一起不在一起都是感情

对于毕业后的新生活,是充满期待又有些害怕的。按照我以往人生的经验,每次人生到 stage 转折的时候总会碰到一些比较大的挫折。不知道这次能不能幸免于难……😂

对于湾区的整体印象并没有太好,不过因为我原本就期待很低,所以也没有觉得特别糟糕。两大原因大概一个是因为我不太喜欢以汽车为中心建立起来的社区;第二大概是因为湾区多少有点文化沙漠的感觉吧。不论是艺术、古典音乐,甚至只是去看个电影好像也比之前在学校的时候麻烦很多。其它的一些方面则是由于我自己通常在切换新环境之后需要相当长一段时间来适应和建立正常生活轨迹,比如我现在过来一个月了还没太搞清楚周末究竟要怎么解决吃饭问题,只好买了一些 soylent 在家,倒也能解决问题。当然另一方面,换了一个新环境,并且工作的工资也更 PhD 的生活补贴相比多了很多,所以新环境的布置上和物质生活水平的提升上倒是让人感到非常满足。

补遗:今年的年终总结稍微晚了一点发出来,因为我临时被叫去玩了。临时买第二天的机票飞去夏威夷大岛看火山岩浆,看完立刻返回。这次是真正体验了一次说走就走的旅行。不过 j 告诉我去看epic lava的时候,我看了一眼照片立刻就 on board 了。结果非常的赞,虽然不是像我想象中的那样生死只在一线之间那种程度,但是还是非常值得去的。整个行程其实非常 adventurous,因为飞机到达大岛的时候已经是晚上十点多了,租了车吃过饭已经很晚了,然而 lava tour 是在岛的另一头,岛上公共交通也不太好,横穿大岛最近的一条路大概是一个半小时的车程,出发前我好奇查了一下,那是一条很有名的叫做Saddle Road的路,极其难开,路非常窄,路况也不好,而且到靠近东边的时候海拔会进入高海拔森林地带,天气极其难以预测,会下暴雨,打雷甚至下雪(后来我们确实在路上看到了雪山),并且有可能碰上赶时间的当地居民开得无比快,或者是军用物资卡车之类的开得无比慢,等等……另外当地还传说如果在那条路上碰到一个穿白衣服的老女人或者是年轻女士牵着一条白狗要搭车,一定要让她搭,因为她是 fire goddess Pele 的化身,会在 Kilauea 火山喷发之前现身。

并且开车的人是我啊,还好我出发前一天刚巧同 y 和 x 一起去练了一会车(虽然并没有敢上高速),多少找到一点感觉,否则真是要吓尿了。总之网上都是推荐一定要走绕岛的远路,不要随便走 Saddle Road。但是我仔细查过之后发现近几年 Saddle Road 一直在修整,今年十月份还有个政府发布的公路修整的类似于剪彩的视频。所以有一定的概率现在路已经修好了。总之最后我们选择了横穿,事实证明现在路确实已经修得很好了,比 Google 街景上现实的状态好了很多,不过其中有一段确实大雾,能见度很低,不过反正晚上也看不到太多东西了。出发之前由于我没有用过按钮启动的车子,在根本没有启动引擎的情况下(我自己以为启动了)把车滑到了路中间横着……😂后来还有过好几次不太合适的举动,比如应该我让的情况由于没有看清楚或者紧张就没有避让等等,但是感觉夏威夷的人们开车都好礼让,要是在加州我早就已经被滴死了。

开到东部之后去麦当劳等了几个小时,到凌晨 4 点开始 hiking,一路上都在已经冷却的岩浆上走,踩碎的地方有点像细碎的碳渣,导游说这里硅含量相当高,感觉应该叫做硅谷了。马不停蹄地走了大约一个半小时之后就到达了目的地。头顶的星星一直陪伴我们到日出,由于根本没有路,只是在岩石上走,所有人的手电筒只照着脚底下,几乎都没有几乎去抬头欣赏夜空。实际上导游也是大致朝着远处一个红色的点走,那边是可见的岩浆,等到了附近之后,就要开始 lava hunting,因为岩浆的冒出来的位置每天都会变,并且它其实凝固得很快,新出来的岩浆几分钟之内就会变黑变硬到能踩上去(如果不怕鞋子被烫坏的话),在过几天就会冷却,成为我们当下脚下踩的“路”面。真正喷发岩浆的源头火山其实在更深入大约 11 mile 远的地方,所以这里还是相对比较安全的。

等到接近的时候,就能感觉到温度的上升了,脚下的岩石缝里也能看到红色。找到流动的岩浆的时候天已经完全亮了。感想就是烫烫烫烫烫烫!可以走很近去拍照,但是基本上待不了一小会儿,即使你自己受得了,感觉你的手机/相机也是要到极限了。流动的岩浆比照片里看到的静态图要让人震撼太多了。大地的血液啊,仿佛能听到大地的心跳。但是后来在天亮之后往回走的路上突然看到岩浆留下的裂缝里探出了绿色的芽。突然有点疑惑了,绿色和红色,究竟哪一边才是象征了大地的生命?再一次联想到了死与新生

回到 hiking 出发点已经十点多,开回城里麦当劳随便吃了点东西喝了咖啡,再立刻横穿大岛回机场。其实路上我有点困,并且 j 在副驾上也睡着了,我当时心里很慌,后来回头想想真是很危险的事情,决定以后千万不要再没有充分休息的情况下开车了。不过至少这次今年最后一天的突发旅行应该是让我的车技提升了许多——虽然还是不敢去面对加州的高速路。

2018 新年愿望,适应加州的噪音,成为靠谱的司机,以便在加州能独立去买菜,以及将来有 road trip 的时候也可以出一份力。新年快乐!

2009 飘着2010 关于2011 当冬夜渐暖2012 The Moment2013 我要的幸福2014 明天的记忆2015 就是这样2016 无限大


Contemporary Art, Brain Science and AI — Introduction

$
0
0

在哥本哈根的丹麦国家艺术画廊里有这么一个小楼梯,路标箭头写着“超现实主义”,仿佛在挑战你的胆量。我不禁在想,是否这个路标本身也是一件现代艺术作品?

对于现代艺术,大概跟我一样对其非常纠结的人不算少数。如果不小心去了一个现代艺术博物馆,也必须得小心翼翼地分辨哪些是真正的艺术品哪些是工作人员临时摆在那里的杂物。时不时会在社交网络上传播的“尝试区分抽象艺术作品和五岁小孩的涂鸦”的挑战游戏,据说连许多专业人员也碰到了困难(反正我是只能随机猜)。我有一阵子甚至认真在互联网上搜索了一下,整个现代艺术行业是不是基于明星效应进行吹捧和运作的一个社会大阴谋,或者甚至是某种洗钱的工具之类的……不过并没有找到什么类似的阴谋论。

那为什么要写这篇博客呢?莫非是某个特殊的宇宙射线击中了我的脑袋,让我某天突然茅塞顿开,理解了现代艺术?当然不是,实际上我现在依然对于现代艺术、当代艺术、抽象艺术、后现代艺术这些是傻傻分不清的。不过去年暑假的时候一位友人向我推荐了两本书。出自于同一个作者Eric Kandel,他在 2000 年基于在神经元的记忆机制方面的研究成果获得诺贝尔生理学·医学奖。两本书分别是 2012 年出版的《The Age of Insight: The Quest to Understand the Unconscious in Art, Mind, and Brain, from Vienna 1900 to the Present》和 2016 年出版的《Reductionism in Art and Brain Science: Bridging the Two Cultures》。

对现代艺术比较有了解的同学可能能认出两本书的封面分别是Gustav KlimtMark Rothko的代表作。看完了这两本书之后我也具有了这样的技能(认出这两幅画),但是真正对于现代艺术的理解,却还是有点无力。不过我觉得这两本书提出了一个非常有趣的视角,就是艺术与认知科学之间的联系;虽然并没有一下子打通我的任督二脉,让我彻底理解了现代艺术,但是让我找到了一些着力点,帮助我去思考现代艺术乃至于更加 general 的艺术本身。所以在希望写这篇博客来介绍着两本书,同时借题展开,聊一些我自己的想法。现代艺术现在已经发展到包罗万象,比如这罐价值约三十万欧元的艺术家的屎,不过我们这里只限于讨论绘画艺术,或者说 visual arts。

首先简单介绍一下两本书的主要内容:大致来讲,两本书覆盖的话题是比较类似的,都是讲艺术和脑科学、认知科学的关系,两本书最明显的区别就是它们 focus 在不同的地域:《Insight》主要集中在维也纳的表现主义艺术学派,以及差不多时期那里的心理学、医学方面的发展;而《Reductionism》则主要集中讲发源于纽约抽象表现主义艺术学派。

两本书都可以当做是(书中讲到的阶段的)简短艺术史和相关的心理学、认知科学和神经科学的一个 survey,以及科学和艺术之间的对话的一个总结。虽然该阶段的艺术的发展关系被理得很顺,但是我想两本书的大部分内容其实是关于科学的(毕竟作者是科学家)。其中第一本书更厚内容更详实,大致分为三个部分:

  1. 心理学部分:又细分为精神分析学(例如弗洛伊德和他关于潜意识的研究)和认知心理学(关于 attention、记忆、视觉等认知模块的心理学研究)两个部分。
  2. 生物学部分:大致又分为主要集中在 Perception 的神经系统和主要集中在 Emotion 的内分泌系统两个部分。
  3. 艺术和科学之间的对话。

关于艺术和艺术史的介绍则杂糅在心理学和生物学的 survey 之中。而第二本书大约只有前一本三分之一的页数,但是内容相对更新一些,比如之前有一阵子刷爆朋友圈的“白金裙子和蓝黑裙子之争”也有提及(以下图片来自 wikipedia)。

第二本书的结构也很简单:分别 survey 了脑科学和艺术中的 reductionism,最后再总结式地讲了科学和艺术之间的对话。

The Beholder’s Share

虽然两本书讨论的主题有点不太一样,但是我觉得贯穿两本书的观点的有一个基本思想就是所谓的 the beholder’s share。奥地利的艺术史学家Alois Riegl最早提出这个概念,后来由Ernst Gombrich加以阐释并冠以这个名称(Gombrich 有一本很经典的书《Art and Illusion, A Study in the Psychology of Pictorial Representation》,不过我还没看过)。

对于绘画来说,这里的 Beholder 就是只看画的“观众”,而 the beholder’s share 的中心思想是:一幅画必须要在观众的参与之下才能成为一件完整的艺术品。

Art is incomplete without the perceptual and emotional involvement of the viewer.

脑洞大开

The beholder’s share 的概念的提出反应了我们对自己的大脑的视觉和认知系统的逐渐了解:实际上,我们的视觉系统要完成的任务充满了各种 ambiguity,但是我们大脑强大的脑补功能帮助我们解决了这些 ambiguity。这里我先插一张看似由随机色块组成的图,你可以先猜一猜这个图里显示的是什么东西,我们在本文末尾会再回过来讲它。

Peripheral Vision

最简单的一个脑补功能就是“粘贴全景图”:现在的手机大都有这样的功能,慢慢移动手机摄像头,系统自动拍摄出很多张照片并拼贴在一起形成一个全景图。其实人的视觉系统也在做类似的事情。我们虽然看不到背后,但是正面的视觉范围感觉上是覆盖了整个 180°(完爆各种超广角相机镜头),但这个“感觉”实际上是我们的视觉系统在偷梁换柱。人眼的真正高分辨率视觉其实只有在中央的很小的一块。人眼视域正中大约 5°的范围称为fovea,而边缘的则是 peripheral vision。在边缘视觉区域内我们不仅对颜色的辨识几乎完全丧失,而且灰度图像的分辨率也很低。但是我们平时并没有为这一点困扰,是因为大脑通过不断地移动注视方向快速地获取不同区域的信息,并将它“缓存”起来,“粘贴”成一幅完整的图像,让我们觉得好像是同时看到了全景。一个简单的实验是固定一个点作为一个凝视中心,然后集中注意力不要移动你的眼球,再把手机或者什么其他东西放在你的斜对面,看自己是否能识别出来手机屏幕里现实的具体内容。

视觉系统进化出这样的功能很大程度上应该是去适应了我们所处的物理世界的时空连续性:因为处在某一个位置的某一个物体通常不会在很短的时间内突然消失或者变成完全不一样的颜色、形状之类的,同时我们的人眼会自动地被吸引到快速发生变化的区域,去及时更新“缓存”。至于为什么不直接对全视域进行高分辨率采集,也许可能是那样能耗太大,亦或者是那样信息量太大大脑处理不过来,或者大脑为了处理那样级别的信息量能耗太大、存储功能不够等等,另一方面在我们自然界中其他动物身上其实有各种各样风格的眼睛和视觉系统……

不过反过来,人眼和“拼贴全景图”也有几个重要的区别。首先人眼并不是像相机那样视域本身比较窄,其实人眼是很广角的“镜头”,只是在边缘视域的分辨率等各方面性能指标都特别低,大部分时候都没有足够的信息量来识别出具体是什么内容,这个时候就需要靠之前扫描留下的“缓存”;而更重要的一个区别是人眼并不会采用诸如规律地“逐行扫描”这样的方法来对全视域进行地毯式采样,而是只会去关注一小部分“值得关注的地方”,也就是叫做 focal point。我们前面说了人眼会自动被吸引到快速变化的区域,这大概是进化中为了能看到突然跳出来的野兽而获得的技能;同时为了能够更好地 social,我们也进化出了会自动对视域中的人脸进行关注的技能,等等……这些信息不仅在科学研究中很有用,在诸如绘画、摄影等 visual arts 中如何能够做出 visually powerful 的作品也很有用。(下图是来自wikipedia的 Yarbus (1967) 的人眼移动的 tracking 实验结果示意)

但是这样一来,对于“不重要的”区域,我们就没有了过去“扫描”过的“缓存”,只能靠很低分辨率的信息来强行识别,这个时候可能大脑会运用 long term memory,比如你自己的房间里各个物品通常都是怎样摆设的,或者运用一些 heuristics,根据上下文进行推测,当然最有可能的大概还是直接忽略,“不用在意,反正对生活影响不大”,如果真的很在意,移动一下眼球看一看就行了呀。不过这里有一个 tricky 的点在于,视觉系统明明偷懒了,但是却给我们一种“一切都在掌握之中”的错觉。

The Invisible Gorilla

事实上,我们在视觉系统的“虚张声势”中错过的信息是非常多的,即使之前“扫描”过的“缓存”信息其实也非常不靠谱。关于这个现象,历史上已经有很多的研究,并且有很多很有意思的实验,其中最著名的一个大概就是 the invisible gorilla 的实验了,在这个页面可以找到这个实验的各种版本的视频,和一些相关的实验的视频。这里我就不对这个实验的细节做详细介绍了,因为如果你之前没有看过的话,剧透之后实验有可能就会失效。

在该页面下方的一些视频里是一些比较弱化一点的实验,即使剧透之后通常也很难注意到。实际上我们在网上有时候会看到一些电影穿帮镜头截图,比如明明是古装剧,演员却戴着手表之类的。实际上绝大部分人在看的时候可能都不会注意到这样的细节,并且电影拍摄中大量利用了人的视觉系统的这方面的“弱点”,因为我们都知道电影是一幕一幕地拍摄然后剪辑起来的,有时候连续的两个镜头可能拍摄时间甚至相隔了几个月,如果每次拍摄都要完美地还原所有道具、化妆、位置等各种细节,基本上是不可能做到的,但是好处在于对于大部分“无关紧要”的细节,人的视觉系统几乎完全不会注意到前后的区别。而上面提到的The Invisible Gorilla 页面下方的 movie perception test 则具体地演示了这个效果。关于这一点我最喜欢的一个例子来自一个叫做Test Your Awareness : Whodunnit?的 Youtube 视频,强烈推荐(在Awareness Test的页面还收集了一些其他相关的测试视频)。

The Sensing of Depth

由于我们生活在一个三维的物理世界里,所以从(平面)视觉图像中获取第三维的深度信息是很重要的一项技能(比如在无人驾驶车里我们就需要感知周围的车辆和物体到底距离有多远)。通常认为人的视觉系统基于双目视觉进行深度感知(并且效果很好)。双目视觉深度感知的基本原理如下图(来自Wikipedia):

非常粗略地来讲,由于两只眼睛的位置差别,感知到的两张二维图片中内容的位置会有细微差别,通过对比两张图片中对应点的位置差可以对深度信息进行推算。但事实上,人眼的深度感知并不十分精确,并且其实基于双目视觉的深度感知只在比较有限的距离内比较有效,《Age of Insight》中提到:

In fact, at a distance of more than twenty feet(注:约 6 米), the images seen by the retina of each eye, though separated a small distance by the nose, are essentially the same. As a result, viewing an object at such a distance is equivalent to viewing it with one eye.

因此距离远一点的深度感知还是靠“脑补”。有一个简单有趣的实验,放一个水瓶或者其他什么瘦高的物体在面前(手能够着的地方),最好是闭着眼睛放,以免自己大脑“缓存”住这个水瓶的位置。然后只睁开一只眼睛,这个时候尝试精准地用一个手指去摸瓶的顶部,会出现下手太靠前或者靠后的情况;但是如果同时睁开两只眼睛,就不会有任何障碍。这证明了我们在近处确实依赖于双目视觉来感知深度信息。但是反过来,对于远处的场景,我们闭上一只眼睛的情况下估算深度完全没有任何障碍,并不会突然搞不清楚远处的山和房子之间的先后顺序,此外,我们在观看纸上或者显示器上的照片的时候,也很容易能够辨认出深度信息并进行单图三维重建的脑补过程。

事实上,在历史中画家们已经对人脑对深度感知和三维重建的过程中使用的主要的一些 heuristics 有了一个比较完整的认识,因为特别是在西方的学院派绘画中,表现精确的三维场景是一个重要的元素。因此对于人脑如何 interpret 深度信息的知识,就有助于艺术家们创作出看起来更加“真实”的绘画。在wikipedia 的 Depth perception 页面有一个详细的列表,这里我们简单介绍一下绘画里常用的一些深度感知暗示。

Aerial perspective(空气透视):由于空气的散射,远处的物体看起来会和近处不一样:远处对比度饱和度会比近处小,颜色会有点偏蓝,例如下面这张来自于Unsplash的照片。

物体相对大小对照:近大远小是一个最基本的光学原理,人脑会自动选取相似的物体,然后根据他们的相对大小来获取它们的相对深度信息。例如下面这幅来自于Craig Mullins的画中,我们看到很多重复的“物体”,也就是人,根据他们的相对大小,大脑很容易就猜出深度信息,此外,大脑在寻找“相似物体”的模式匹配的过程中其实也非常 agressive 地在进行主观脑补,比如如果你盖住画面下半部分的话,“远处”那些人其实几乎分辨不出是人还是草或者是其他什么东西,但是当我们大脑在识别出画面下方有详细细节的人之后,就会自动地把后面那些看着差不多的色块也当做人(通常在绘画中有大量重复元素,比如花、人之类的时候,将 focal point 处描绘出细节,而其他则只留一些刚好让大脑能够脑补出来的 visual cue,会比把所有细节都画出来的情况更加 visually appealing)。

在运用相对大小的时候,除了同一张图中有重复的物体之外,我们还熟练掌握了一些常见物体的大小,比如我们大概知道一个人是多大,一个普通房子是多大,一棵正常的树大概有多高等等,这个时候就不需要专门的重复物体我们也能对相对尺寸进行估计。所以有时候在拍摄风景照片时有时在场景中包括进人等熟悉的物体会更容易传达场景的尺寸一些:例如下面这张来自于Unsplash的关于冰川的照片。

此外,在绘画和照片中都同样经常被用到的还有一个明显的暗示就是线性透视,例如刚才那幅 Craig Mullins 的绘画中屋子边缘行程的线条,逐渐交汇到远处的 vanishing point,这是非常强的三维深度暗示。

The Sensing of Human (Faces)

在上面这张照片中可以看到,即使是小到差不多只剩几个像素,我们也能够很容易地找到视域中的人。对于人、特别是人脸的特殊的定位、识别和跟踪技巧,大概是人类在进化的过程中为了更有效地实现社会化的组织而发展和强化出来的能力。

我们对于人脸和人体高效的跟踪、识别一定程度上是通过牺牲精确度来得到的(在ROC curve上取了很偏的一个点),这一点主要体现在“草木皆兵”这个成语上。简单来讲我们很容易把各种其实不是人脸的东西认成人脸,比如意大利画家Giuseppe Arcimboldo的这幅画:

我们几乎一下子就能看出这是一张人脸,虽然它其实只是一些摆成特定模样的水果。类似的情况还很多,由于我们对“人脸”这个概念的宽容程度,导致在相关的艺术创作上可以有非常大的自由,比如日本漫画、动漫中的人脸造型,认真来讲,不止几乎完全缺失了 3D 信息(日本漫画风格主要基于描线),而且五官各方面也经常在比例或者位置方面变得非常夸张。比如下面这张来自于一拳超人漫画原画的图,虽然看着不是很美观,但是我们并没有任何困难辨认出里面的人脸。

总的来说,我们大脑在脑补关于我们自己(人和人脸)的脑补能力达到了超强水平,在寥寥几笔线条的暗示下就能让我们识别出一张完整的人脸来。在《Reductionism》一书里还提到了另一个例子,来自于 Thomas D. Albright 2012 年的论文ON THE PERCEPTION OF PROBABLE THINGS。其中的一张图就是我们在前面的“脑洞大开”一小节的开头显示的那张看起来像随机色块的图。那张图的“清楚”版本是下面这个:1

这里我们可以清楚地辨认出一个人脸。而论文中讲述的有趣的点在于,(如果你之前没有辨认出前面的图中的随机 patern 是一张人脸的话)在看过这张图之后,你再回过去看之前那张图,发现就能立刻认出是一张人脸了,不仅如此,这个过程似乎是不可逆的,你再也无法将它“看成”是一堆随机的色块了,在看到这里这张图的一瞬间,相当于你的大脑神经网络的某一部分就已经被永久性地修改了,从此以后你再看到之前的那张图都会立刻认出是人脸来。

这里我们再做一个简单的小实验,把原来那张图黑白反色一下。如下图所示,可以看到,即使在看过“清楚”版本的图之后,下面这张反色过后的图(和反色之前的图相比)还是比较难辨认的。即使我们能勉强辨认出人脸的形状,在反色之前的图中,我们甚至能清楚辨认出脸部的三维结构,比如凸起的鼻梁和颧骨,凹陷的眼窝之类的,而在下面这张图中我们则几乎完全 parse 不出三维结构来——即使在辨认出人脸的情况下。

关于这一点的一个解释同样来自于人在进行三维重建时使用的一个 hint,或者叫做 prior knowledge,因为我们生活在地球上,头顶上的太阳在绝大部分时期都是我们的主要光源(特别是考虑到人造光源的发明在人类进化的历史上是非常短暂的一个时间段),因此我们最常见到的情况是物体朝上的面是亮面,而朝下的面是阴影。于是在反色之前的图中虽然只有简单的色块,但是由于阴影的位置和形状比较符合预期,我们毫不费劲地(强行)进行了三维重建,但是在这里这张图中黑白反过来之后很不符合我们的直觉,于是出现了 parsing 困难(为什么在黑暗中从下巴用手电筒把脸照亮看起来很可怕也是类似的原因)。

脑洞与 Beholder’s Share

再这样一条一条地介绍下去可能永远也说不完,在这里讲了这么多其实主要是为了展示一下我们功能丰富的脑洞,而中心思想在于:人类的 perception 并不是一个简单的 Convolutional Neural Network 那样的一路 feedforward,抽取特征、模板匹配,最终对物体进行分类的一个过程,而是涉及到很多 feedback 的因素,将大脑的其他很多部分牵涉进来,比如上面这个人脸随机 pattern 的图的例子就说明了“记忆”在其中所起的作用,不论是在漫长的人类进化过程中积累起来的 prior knowledge,还是我们个人在成长过程中所经历的事情,都会直接或者间接地影响到我们 perception 的结果。在本文介绍的两本书中甚至还有更 agreesive 的观点认为:feedback 并不是 feedforward 的辅助,而是反过来,人的 perception 在很多时候实际上是一个 hypothesis testing 的过程,人脑形成一个个的 hypothesis,然后再主动去在当前的 visual inputs 中进行模式匹配,验证 hypothesis 是否是合理的。

Hypothesis testing 的 formulation 有一个好处就是避开了 visual recognition 或者 3D reconstruction、depth sensing 这些问题中的 intrinsic ambiguity。根据一个 2D 图像重建 3D 场景,可能会有无穷多可能的解。但是如果反过来,先构造一个 3D 场景的 hypothesis,再去验证当前的 2D 输入是否是这个 3D 场景的一个投影就变成了一个简单的唯一解问题。当然 hypothesis 的构造会依赖于当前的输入,但是可能也会很大程度地依赖于当下的 context、情绪、过去的经历等等各种因素。之前的人眼 attention 和 invisible gorilla 的例子算是一个正面支持的证据:因为我们的视觉系统并不会去处理视域里看得到的所有内容,而是在形成一个 hypothesis 之后重点关注 relevant 的部分(去尝试验证 hypothesis 的正确性),而其他绝大部分(我们认为和当前的 hypothesis 不相关的)信息是被丢弃的。上面的人脸随机色块的例子也在一定程度上是支持这样的观点的,在看到清楚版本之后我们形成了一个人脸的 hypothesis,再去看原来的图的时候就立刻匹配上了这个 hypothesis,而再难以将它看成随机色块了。还有一些例子我们可能可以在一定程度上控制自己的大脑选择哪个 hypothesis,比如很有名的一个动图就是一个在旋转的人,有些人看起来她是在向左转,有些人看起来她在向右转,而有些人可以在两种模式中自由地切换。

这样,再回到 the beholder’s share 的话,就不难理解我们一开始的那一句 quote 中提到的,(visual) arts 在没有观众的(perceptual and emotional)参与的情况下是不完整的了。一件艺术品,即使是最写实风格的绘画,也仅仅是三维世界的一个二维投影;即便是有完整三维信息的雕塑,也丢失了真实世界的材质等各种信息;而甚至是最高清的三维虚拟现实渲染,在进入我们大脑的路上也会经过眼睛这个二维化投影的 bottleneck;总而言之,viewer 在欣赏这样一件艺术品的过程中都会体验到 ambiguity,并引入自己的脑补才能 interpret,只是从写实到抽象,不同风格的作品其 ambiguity 的程度不一, viewer 本身脑补的参与程度也会不同。假设一件艺术品的目的是 artist 和 viewer 之间的一个 communication 的话,那么(在结合了 viewer 的脑补过程之后)这个最终的 interpretation 在 viewer 的大脑中成形的一刻应该可以算是这个 communication 完成的一个标志。

近现代艺术的发展和变革可以说是受到了各方面的冲击和影响,比如摄影技术的出现导致人们开始思考写实以外的风格;精神分析、心理学、认知科学方面的发展让人们开始对于 emotion、subconscious 等相关联的艺术手段感兴趣;而两次世界大战也让艺术家们渐渐开始用艺术去表达“美”以外的其他东西;等等。从结果来看,近现代艺术变得越来越偏离写实,作品开始扭曲、甚至抽象化,作品本身的 ambiguity 不断增加,导致对于 viewer 的参与度要求也不断增加。

从某种意义上来说,夸张扭曲的作品(例如Egon Schiele等的 expressionism 画作)和极度简化抽象的作品(例如Mark RothkoPiet Mondrian等的 abstract expressionism 画作)都是在寻找人类的 perception 和 emotion 等 system 的“essential signals”。其实在音乐中我们可以找到一个很正面的例子:除了带有歌词的音乐之外,我们社会中还有大量纯音乐(特别是古典和一些民族音乐),它们是不“存在”于我们的物理世界的完全抽象的东西,但是在很多时候能触发我们强烈的情绪。

又或者,用当下比较流行的词汇来说,这有点类似于在寻找 human perception system 的 (counter-) adversarial example,只是艺术家们既不能对人脑的神经网络进行求导,也无法对人脑进行亿万量级的 query 来做 derivative free optimization,所以,目前的一些现代艺术作品许多人都不太能理解或者完全不为所动,会不会只是因为艺术家在寻找效果更好的抽象或者夸张艺术表现形式的道路上还没有能走到足够远呢?关于这个问题和其他许多相关的话题,我们不妨留到之后的文章中再来讨论好了。

Expressionism and Inceptionism

$
0
0

我们在前一篇文章中提到,artwork,特别是比较近现代的 artwork 中的一个重要元素就是 beholder‘s share,原因在于我们人在 perceive visual stimuli 的时候,实际上在做一个 interpretation 或者甚至是 hypothesis testing 的工作,其最终结果取决于观众自己脑补过程中添加的元素。

而 beholder’s share 重要的另一个原因则在于,artwork 本身以物理世界的一种实体的方式存在,在构造过程中受到很多 constraints,其媒体形式能承载的信息量也受到限制,因此即使艺术家希望把自己的想法原封不动地传达给观众而忽略所有 beholder’s share,在我们发明人对人的意识直接拷贝技术之前,应该都是非常困难的。

What is (the Purpose of) Art

在继续讨论之前,我们需要搞清楚的一个论题就是:艺术是什么,或者说艺术的目的是什么。当然这是一个非常宽泛的问题,也没有任何正确答案,从宗教到政治再到我们的日常生活,随处都可以看到艺术的影子。艺术是关于美吗?也许是,但是显然并不总是。不过这里我们不妨给出一个比较宽泛一点的定义:艺术的目的是为了传达一个想法(convey an idea),或者传递一条信息(communicate a message)。

Pablo Picasso - Guernica, 349.3 cm × 776.6 cm, 1937. Currently in Museo Reina Sofia, Madrid, Spain.

简而言之:artist 脑子里有一个 idea,通过艺术品的形式让这个 idea 在物理世界中实体化,然后 viewer 看到这个艺术品之后再在自己脑袋里形成一个 idea,由此完成 communication。“在物理世界中实体化”这是一个 information bottleneck,或者 (lossy) compression channel,会有大量的信息丢失,需要 viewer 进行 reconstruct,其中有一些本来就是无关紧要的,有一些可能是艺术家很想传达的主要信息中的一部分。

咋一看似乎有一些反直觉,因为一个 idea 或者 message 似乎是一个很简单的东西,但是一个艺术品却非常复杂,所以似乎并不能称作是一个 compression 或者信息丢失的过程。从某些方面来讲这样也算合理,但是取决于我们如何去定义一个“idea”,结果会很不一样。比如我们虽然有一些词汇可以表达一些常见的 idea,比如“美丽的风景”,或者“悲伤的心情”之类的东西,但是实际上这是非常简化的描述,原本的 idea 则会有更多的细节和微妙的内容,如果将其看做是艺术家脑回路中某一部分在某一时刻的神经元状态集合的话,那它本身也是包含了巨大的信息量的。比如即使规定使用“文字“作为媒介,仅仅是写下”好吃好吃好吃“这几个字,能够传达的信息其实是非常有限的,观众也根本无法体会到究竟是辣辣地好吃还是甜甜地好吃之类的 nuance。而那些长篇巨著的长篇文学作品的存在(以及被简化缩写之后就失去了原来的味道的事情),大概就算是一种”idea“究竟可以有多么复杂和微妙的一种证明吧。同时也算是 justfy 了为什么”传达一个 idea“这样简单的事情会需要通过创作艺术品这么复杂的过程来实现:因为太多的东西都难以三言两语说得清楚了。

《氷菓》第十八話「連峰は晴れているか」。

How to Communicate Effectively

在明确了 art 的目的是 communicate 之后,能否有效地进行信息交流就很自然地成为了评价一个艺术品的标准之一。虽然艺术品很难直接用”好“和”坏“来形容,不过为了避免我们的用词过于饶舌,不妨在这里将能够实现 effective communication 的作品称为好的,否则是坏的。

首先很明显的一点就是,并不是包含信息量越大越细节的作品就是越好的。比如摄影,即使你有超好的镜头和相机,也不一定能拍出 powerful 的照片来;绘画也是类似,即使你能做到跟电脑一样精细地把每一根毛发每一块石头都能原封不动地画下来,也不一定就能保证你的画不是一个无聊的作品;也许文学方面的例子更直观一点:一个有起承转合的作品,和一个包含所有细节的流水账,大概谁也不愿意看后者吧。

保留所有信息的 communication 方式不好的原因在于 viewer 那一头在接受的时候并不是直接一个 identity 函数,而是我们上一篇文章中讲到的很复杂的脑补过程,涉及到 viewer 的 attention、hypothesis formation 等各方面的因素,即使艺术品的物理媒介允许你记录非常多的信息,viewer 在接受的时候也有一个信息瓶颈,包含太多细节的一个问题就在于 viewer 会在过多的信息中迷失,从而无法定位到真正的 main message 上。因此为了进行有效的 communication,人们通常会采用两种办法:

  1. de-emphasize 无关紧要的内容;
  2. emphasize 重要的内容。

de-emphasize 在摄影中有一个很典型的例子,就是背景虚化效果,a.k.a. Bokeh。因为摄影不像绘画那样可以随意对相框里的元素进行修改调整,所以对于背景非常复杂的情况,直接拍摄出来就会是一张比较杂乱的照片,找不到主题,而避免让背景干扰摄影主体(比如通常是人像等),我们可以将相机聚焦在主体上,同时使用长焦、大光圈等元素达到 shallow depth of field,使得主体之外的东西因为失焦而变得模糊。因为我们人眼其实也是类似的工作原理,除了视域中央的高分辨率区域之外,其他地方可以说是相当模糊的(我们在上一篇文章中提到大脑通过脑补让我们忽略了自己眼睛的这个限制,“以为”自己眼前看到的是一张完整的统一清晰度的图像),所以我们并不会觉得这样的照片看起来“不真实”或者“怪怪的”,甚至很多时候我们都不会注意到背景被模糊了;同时在背景被通过虚化的方式 de-emphasize 之后,主体就自然地被凸显出来,成为比较 eye catching 的图像。

bokeh 示例,图片来自于 unsplash(@lvnatikk@pistos)。

如上图所示,背景里杂乱的屋子在虚化之后不再和前景中的猫猫“打架”要吸引我们的注意力了;而右边的鸟儿大概是用了超长焦的镜头,背景已经虚化到完全看不出任何内容来了。因为 Bokeh 非常容易制造出比较有视觉 impact 的照片,所以一直是摄影中比较受 popular 的一种手段——毕竟几乎不用任何构图技巧就能拍出好看的图,这两年 iPhone 和 Pixel 这些手机费尽心思用软件模拟的 portrait mode 基本上就是想要制造这么一个效果。不过有时候也会觉得有点被过度使用而略显得 boring 了,而且并不是所有拍摄主题都有一个明确的前景和背景区分的(比如风景,夜空之类的)。

相比于摄影中通过 out of focus 来对背景进行 de-emphasize,在绘画中我们简直就可以为所欲为了。在各种人像绘画中直接不画任何背景的例子简直不要太多,除了直接不画之外,用大笔刷大色块画出抽象风格的印象也会显得非常有风格。比如下面这幅画,可能许多人都不会注意到有什么“不一致”的地方,但是仔细看就会发现,除了脸部和手部刻画得很细致之外,头发、衣服以及背景几乎是“随便画了几笔”(当然是否是“随便”画的很有待商榷,看起来很随便的几笔有可能是经过艺术家精心计划之后的结果),图中我们随便截取了大约跟脸部同样大小的一块区域放大来看,几乎就如同抽象画一样看不出任何东西来。

Richard Schmid - “Nancy’s Velvet Cape” Detail, 1994。

和摄影中的 bokeh 相比,绘画中的 de-emphasization 更 flexibile 的地方在于它几乎可以用在任何主题、风格的作品上。注意到到目前为止我们介绍的 de-emphasize 的例子都有一个共同点就是“没有违和感”,或者“不影响信息的传播”,所以如果不是像 portrait 这样的有单一明确主体的情况,选择哪些元素进行省略,以及如何表达省略后的内容,其实是非常难的一个问题。这里不妨再引用一下文学方面的一句名言来阐释一下这个问题在各种媒介的艺术中都是类似的:

I didn’t have time to write a short letter, so I wrote a long one instead. Mark Twain

而在省略细节方面更加典型的例子大概就是平面设计以及漫画了。drawing 和 painting 比起来本身就是一种限制更加大的媒介,因为所有的东西都需要用线条这个元素去刻画,几乎没有渐变,也没有模糊(所以没法 Bokeh),颜色就不用说了,连灰度图也算不上:对比一张黑白照片中可以有的各种深浅的灰度值,在漫画中基本上只有黑白两色,或者在加上网纸模拟出来的一个灰色值,等等……如何在丢掉了几乎所有的 details 之后仍然能够传达原来的 message,就成了比较困难的问题。当然漫画这个风格也发展了很多年,人眼对 boundary contour 的敏感性,以及对人脸相似元素的 over-interpretation 这些事情都已经被掌握并融入到了漫画绘画技法中。

比如下面的例子中左下图里男主的脸只用了两条线画出了眼睛,一个点表示鼻子,一个大一点的点表示嘴,而旁边的女主则更是脸上什么都没有画。还有一个我比较喜欢的细节是对于砖墙的描绘:作者并没有把所有的砖块全部画出来,作者看似随机地直接将大部分砖墙面留白了,但是我想大部分人应该都不会注意到这个,相反如果把所有的砖块细节全部都画出来,反而会由于画面过于“busy”而影响解读。右下的图用了类似的方法,这里的留白和背景里几乎纯黑的树对比起来甚至还产生一种烈日高照的“过曝”的感觉。

高田裕三,《3x3 eyes》第四百零一话。

而 emphasize 重要内容的方法,其实和 de-emphasize 不重要内容的方法本质上是一样的,因为不管是 emphasize 还是 de-emphasize,几乎都是在有(“强”和“弱”的)对比的情况下才能做到。比如前面的 Bokeh 可以说是虚化背景,也可以说是强调前景。

在绘画中可以用的对比强调的方式非常多,最常见的可能是颜色值(Value)的深浅对比,因为人眼对于高对比度的东西比较敏感,所以比较容易引起注意,大概是因为高对比度的东西能够有效地帮助我们区分物体的边界吧,有相关的 neuroscience 的研究表明人的 low level vision 系统中有一些神经元起着类似于 edge detector 的作用。虽然现在线条画在漫画等题材中随处可见,但是梵高在那阵子直接用黑线描边的画法(特别在他的很多人像绘画中)大概还是比较前卫的一种“强调”手法吧,因为现实世界中的物体边缘并不存在真正的“线条”。意识到画并不一定要尽可能地模拟现实世界,通过适当的扭曲、强调和描绘一些“不存在”的元素可以给 viewer 带来更强的视觉和情感方面的冲击,应该算是表现主义的一个特点了。

关于颜色的另一个常用的对比则是色调冷暖的对比(橙色、黄色等属于暖色调,蓝色、紫色等属于冷色调)。比如以浪费黄颜色著称的梵高其实在不少画中都加入了对应的补色蓝色来形成更加强烈的冷暖对比效果。

Vincent van Gogh - Wheatfield with Crows, 1890. 50.2 cm x 103 cm. Currently at Van Gogh Museum, Amsterdam.

下面这幅 Sargent 的画也是一个很好的例子。注意到灯笼周围的颜色非常 dark,通过这样的对比能让我们看起来好像灯笼是在发光,因为颜料本身并不是光源,所以如果不用很强烈的对比的话很难画出发光的效果来。同时整个画面背景的蓝色调也和灯笼以及映照在小朋友们的脸上的火光形成对比烘托出整个气氛。

除此之外,绘画中还有很多的对比强调可以用,因为人眼非常善于总结 pattern 并找到 outlier,各种各样的画中显得“与众不同”的地方都会起到强调和对比的作用从而吸引注意力的作用。比如构图方面凝聚成一团一团的人群和一个单独的周围空白的人,后者就会有强调的作用;再比如在一个风景画里充满了山水等“organic”的元素,但是某一处突然有一个很方方正正棱角分明的人造建筑,也能起到强调和对比的作用。等等等等。

John Singer Sargent - Carnation, Lily, Lily, Rose, 174.0 cm x 153.7 cm, 1885. Currently in Tate Britain.

Expressionism

对什么东西进行 emphasize 以及通过什么样的方式去实现,很大程度上取决于艺术家最开始想传达和表达的东西。这里我们回到本文的主题,主要基于上一篇文章中的讲到的《The Age of Insight》这本书的内容来聊一聊表现主义 (expressionism)。表现主义总体来说是一个比较难定义的艺术派系,因为跟许多其他相关的派系都关系密切。这里我们直接给出一些 quotes:

… artistic style in which the artist seeks to depict not objective reality but rather the subjective emotions and responses that objects and events arouse within a person … Its typical trait is to present the world solely from a subjective perspective, distorting it radically for emotional effect in order to evoke moods or ideas. Wikipedia, Expressionism

Expressionism is characterized by the use of exaggerated imagery and unnatural, symbolic colors to heighten the viewer’s subjective feeling when looking at art. The Age of Insight. Chapter 9, the Depiction of the Psyche in Art

大致可以看出表现主义对于现实物理世界的刻画并不关心,而更注重传达内心世界的内容,而其主要的传达方式主要是夸张扭曲和强调。我对艺术史不是特别熟悉,根据《The Age of Insight》里的描述,艺术家们开始往这样的方向前进也是由各种错综复杂的缘由导致的。这里可以简述其中两个:首先是摄影的出现和逐渐普及对于绘画艺术的冲击。

Like other modern artists faced with the advent of photography, Klimt sought newer truths that could not be captured by the camera. … turned the artist’s view inward—away from the three-dimensional outside world and toward the multidimensional inner self and the unconscious mind. The Age of Insight. Chapter 1, an Inward Turn: Vienna 1900

而另一方面则来自于医学、哲学、心理学等方面的一些进展。比如尼采等人主张人类的心智其实大部分是由非理性构成的,弗洛伊德由此发展出他关于潜意识 (Unconscious mind)(虽然在中文里统称作“潜意识”,但是英文里有 unconscious 和 subconscious 两个词,弗洛伊德一开始使用后者,但是后来逐渐废弃了该叫法而直接使用 unconscious,详见这里。)的理论和精神分析法(在《The Age of Insight》中关于生物学和神经科学的部分还介绍了一些近现代关于意识和潜意识之间的关系和区别的科学上的研究和进展,感兴趣的同学可以参考相关章节。)。而医学方面,在法国大革命的余波之下,诸如(尸体)解剖等医学上的各种限制逐渐被放宽,医学药学诊疗等也逐渐变得更为系统和科学,人们开始认识到仅仅通过评估患者的外部症状很难确定真正的病因病理,因为同样的症状可能会由器官不同部分的异常或者甚至是完全不同的病理引发。Rokitansky主张:

to discover the truth, we must look below the surface appearance of things.

这样的观点逐渐扩散到神经内科学精神病学精神分析学以及文学,当然还包括以Gustav KlimtOskar KokoschkaEgon Schiele等人为代表的表现主义艺术学派。

Like many other artists of his time, Klimt was aware of the increasing technological refinement and popularity of photography, including the emergence of nude photography in Paris in 1850. His response to the realism of photography can be seen in his paintings, in which he moves from literal depiction to more symbolic representation… As a first step in going deep beneath the surface of consciousness, Klimt realized that he would have to overcome the limitations inherent in painting on canvas … to portray the depth of the human psyche on a flat, two-dimensional surface, Klimt needed new artistic strategies. In devising them, he turned for inspiration to a much earlier style of painting, Byzantine art … These two stylistic changes—flatness and ornamentation—ushered in Klimt’s Golden Phase, a relatively brief period that dates from his return to Vienna in 1903 until 1910. The Age of Insight. Chapter 8, the Depiction of Modern Women’s Sexuality in Art

Gustav Klimt - Portrait of Adele Bloch-Bauer I, 138 cm x 138 cm, 1907. Currently in Neue Galerie, New York.

上面是 Klimt 的代表作之一(2006 年被以一亿三千五百万美元买下,现藏于纽约的Neue Galerie),可以看到虽然“脸”和“手”这两个元素使用了写实的画法,但是一反常规的“要将前景和背景通过对比等方式分隔开来”的画法,画中人物的衣服、身后的椅子以及背景几乎融为一体,使得画面完全扁平化,同时在画中大量使用了装饰性元素——根据《The Age of Insight》中的解读,(和他的其他一些同期的诸如The Kiss的画类似)方块状的装饰形状象征着 sperm,而椭圆形的装饰形状象征则 female fertility。

The changing boundaries in the painting and the dense, symbolic ornamentation of the dress convey the idea that the stark, ordered geometry of the background is restrictive and socially imposed, whereas the symbols on Adele’s dress reveal her instinctual drives. The Klimt historians Sophie Lillie and Georg Gaugusch comment on this conflict when they write that “Klimt’s painting appears a compelling visual expression of Freud’s theory … that emotions buried in the subconscious rise to the surface in disguised form.”… As his work evolved from Art Nouveau to Modernism, Klimt focused on two themes … that came to characterize Expressionism: sexuality and death. Thus, simultaneously with Freud and Schnitzler, Klimt embarked on an exploration of the unconscious instincts that drive human behavior. He became a painter of the unconscious, revealing the interior lives of women. The Age of Insight. Chapter 8, the Depiction of Modern Women’s Sexuality in Art

在将注意力从对外在的物理世界的描绘逐渐转移到对人类内心世界的描绘的过程中,人们认为艺术品必须要忠实的表现出“the unconscious strivings that motivate men and women alike”。裸体人像在整个绘画历史中并不少见,在很早期人类文明的出土文物中可以找到一些崇拜 fertility 的诸如夸大女性乳房、臀部等的雕塑(参见wikipedia:Venus figurines),但是在进入“文明社会”之后人们对于女性裸体的描绘通常都是象征则圣洁、或者人体的完美,而极力避免任何 sexuality 相关的寓意的,而维也纳的画家们在追寻前卫艺术的过程中则抛弃了这样的避讳。

在下面这几幅描绘Judith beheading Holofernes的故事的绘画中就可以看到很明显的区别。这个故事大致讲述了一个美丽勇敢的寡妇为了保卫家乡,将敌军首领灌醉之后割下其首级的事情。在历史上有很多以此为主题的画作。在下图中可以看到,虽然 Judith 是通过美色诱惑而获得了刺杀的机会,但是在 Caravaggio 和 Bigot 的描绘中都省略了其魅惑的性质而刻画出传统的贞洁神圣的形象。而 Klimt 则完全抛弃了这些忌讳。

Illustrations of the story ‘Judith beheading Holofernes’ by different artists.

Klimt provides an extreme interpretation of the pious widow, depicting her as a symbol of the devastating power of the female erotic urge. Judith, barely clothed and fresh from the seduction and slaying of Holofernes, glows in her voluptuousness. Her hair is a dark sky between the golden branches of Assyrian trees, fertility symbols that represent her eroticism. This young, ecstatic, extravagantly made-up woman confronts the viewer through half-closed eyes in what appears to be a reverie of orgasmic rapture. While beckoning the viewer to enter into her ecstatic state, Judith reveals Holofernes’ severed head … Klimt’s Judith is a true femme fatale: she evokes in men both lust and fear, and she obtains pleasure from both … the painting discloses the psychological problem that Freud predicted would accompany the liberation of women’s sexuality: namely, men’s nightmares about sexual anxiety and the relationship between sex and aggression, life and death. Klimt recognized this problem before Freud ever wrote about castration anxiety. The Age of Insight. Chapter 8, the Depiction of Modern Women’s Sexuality in Art

表现主义画家们在追溯本源的过程中和先辈们的一个重要的区别在于:虽然以前的艺术作品中也时常有“痛苦”、“恐惧”等各种情绪的刻画,但是这些都是属于“conscious emotion”的范畴,而此时的维也纳画师们所追寻的则更多的是潜意识(“unconscious ecstasy and aggression”),所以自然地和弗洛伊德的一切都源自于“性”的哲学思想互相影响,很大一部分内容都是关于对 sex, aggression, death 和 unconscious instincts 的探索和刻画。

那当时的表现主义中的带有情色性质的画作和今天的 pornography 又有什么区别呢?这是一个非常有争议的话题,在wikipedia 的 Erotica and pornography一节有一些讨论和相关文献。值得一提的是当时在探寻人类的基本欲望的过程中一个重要主题是女性自身的内心和本能——作为主体,而不是被物化或者附属的存在。比如在 Klimt 的很多 drawing (drawing 应该翻译做“素描”?) 中都有女性 masturbation 的刻画(其大部分 drawing 在其生前并未公开展出)。为了和谐起见,我就不在这里放样例图了,好奇的同学可以去看《The Age of Insight》或者 Klimt 的 wikipedia 页。

在 Klimt 所开创的新风格的引领下,Kokoschka 和 Schiele 进一步对 sex、aggression 和 death 相关话题进行探索,从他们跟 Klimt 迥然不同的画风可以看到表现主义更多的是关于内在表达和主题,而不是某一种统一的外在 visual style。后两者发展出了更加戏剧性,在美学(或者丑学?)上更加具有视觉冲击的艺术风格,极大地挑战了过去人们对于艺术中“美即真实”的认识,使用大胆的、不自然的颜色,狰狞的笔触,和扭曲的身体等元素来分析和表现模特的 interior life。

Oskar Kokoschka - The Bride of the Wind, 181 cm x 220 cm, 1913. Currently in Kunstmuseum Basel, Switzerland. Egon Schiele - Death and Maiden, 150 cm x 180 cm, 1915. Currently in Österreichische Galerie Belvedere, Vienna.

Kokoschka 和 Schiele 虽然传承了 Klimt 的忽略外在元素,深入内在意识或潜意识,进行“直击灵魂”的刻画的艺术目标,但是他们的(外在)绘画风格却和 Klimt 的平面装饰风格很不一样。关于他们的表现手法的更多的介绍,诸如如何使用手和脸等元素去表现 social 的交流和交互等,以及他们的一些代表作的分析,可以参见《The Age of Insight》第 9 章。

注意到我们一直在讨论的 emphasize 和 de-emphasize 的手法去和人脑的潜意识、perception system 等进行 communication,这里的“人”主要指的是 viewer。但是在这几位表现主义画家的画中很多时候试图分析解剖的是 sitter,也就是模特本人的内心状态,特别是 Kokoschka 和 Schiele 都画了很多自画像,这种时候其实是对画家本人的心智在进行剖析。当然这几者最终全部纠缠在一起,在画布上对模特进行分析刻画,然后在 viewer 内心产生反响和共鸣。

DeepDream, a.k.a. the Inceptionism

在本文末尾我们来聊一下最近在 Deep Learning 大潮下出现的一个叫做Inceptionism的东西。Deep Learning 在计算机视觉中的一个重要应用就是做跟人的 perception 系统差不多的一些事情,比如找到图像或者视频中的物体的位置,识别出它们的类别,推断出物体的深度等 3D 位置信息等等。目前卷积神经网络在这些相关应用中取得了巨大的成功,虽然卷积神经网络或者更加宽泛的人工神经网络的算是 inspired by 大脑的神经网络结构,但是其计算和学习的机制到底有多少的相似性目前还没有一个定论,并且我们在上一篇文章中讨论过,人脑的 perception 系统有很多反馈,re-attention,的过程,与记忆、情绪等模块有复杂的关系,最终形成一个更类似于 hypothesis testing 的识别过程,而大部分神经网络都是一个简单的 feedforward 的过程。当然,如果把神经网络当做一个 universal approximator,而如果识别过程的黑盒子能表达成一个连续函数的话,也很难说人工神经网络不能实现大脑的运作机制(比如记忆可以被存储在神经网络的 weights 中,而 attention 可以通过一开始就把所有的信息采集过来,再在内部进行选择等等),另一方面,从 computer science / engineering 的角度来说,一个人工神经网络(或者任何其他的算法或系统)如果有另一种更适合基于硅芯片的通用计算机来实现 perception 的机制,那么这种机制是否实现了人脑的计算机制并不重要。

抛开这些未解的问题,人们对于深度神经网络和大脑之间的联系还是非常感兴趣的,有不少工作在研究诸如神经网络和视觉系统中的 response 之间的关系,比如 I. Kuzovkin et al. 的Activations of deep convolutional neural networks are aligned with gamma band activity of human visual cortex. Communications Biology (2018). 和 D. Yamins et al. 的Performance-optimized hierarchical models predict neural responses in higher visual cortex. PNAS 2014. 等等。

我们这里要讲的 DeepDream,和之前提到的一些研究工作相比,一开始更多的是一个好玩的 project,不过却似乎很契合表现主义 (Expressionism) 的一些观点,所以又经常被叫做 Inceptionism——因为一开始被用来实现这个 DeepDream 算法里用到的神经网络是 Google 的研究团队设计的一个叫做 Inception 的神经网络。DeepDream 的想法很简单:在艺术(特别是表现主义)中,人们一直在寻求什么样的 image 会产生更强的 visual / emotional impact,并通过强调 contour 描线、色彩对比、或者是人脸等各种元素来尝试对 visual response 进行增强;现在既然神经网络被设计来做和人类视觉系统类似的事情,那么我们不妨来看看人工神经网络又会更偏好什么样的 image 呢?在人工神经网络的 context 里问这样的问题的好处在于,很多概念都可以明确地定义并计算出来,比如“stronger impact”,我们可以定义为某一些 neuron 的 activation maximization,而 impactful image 则可以通过 gradient descent 的方式直接在输入空间中寻找能够最大化给定的那些 neuron 的 activation 的图像的方式得到。

DeepDream example from wikipedia. The picture on the right is the deepdream enhanced image of the picture on the left, for a neural network that is trained to perceive dogs.

当然“所有图像”的空间是非常大的,假设红黄蓝三个 channel 中每一个像素能取 256 个值,那么一个 100x100 的图像可以有多少张不同的图像呢?我算术不太好,你们自己算了……总之这中间有非常一小部分的图像可以算是 natural image 或者其相似的图像,大部分其他图像对人来来说都只能是

Doesn’t look like anything to me. Dolores Abernathy, from Westworld

所以通常的做法是从一张已有的图像出发,计算一个神经网络在每一层的 activation,然后以某一层为目标,去对给定的图像进行修改,来最大化那一层的 activation。这有点类似于寻找神经网络在这张图里“看到了”什么,或者说,根据这张图“脑补出了”什么,然后我们通过修改输入图像来增强其 response,来 visualize 在输入图像中的重要的部分。比如如果神经网络认为某个地方看起来像一张人脸,那么理想情况下我们的图像增强算法将会把那部分变得越来越像一个真正的人脸,来增强神经网络的 response。当然这里还有许多其他的问题,比如神经网络觉得最“像”人脸的图像,并不一定是人类觉得最“像”人脸的图像,因为人脑和神经网络机制的不同;甚至是针对神经网络的 activation maximization 得到的结果可能对人来说并不 make sense;以及 Gradient Descent 算法有可能陷入一个 local minimum 而没有得到最优解等等。

为了让生成出来的图片看起来更加有趣一点,在 DeepDream 算法中并不是单单对原图进行 activation maximization 的增强,而是一个递归的多步增强过程。简单地来说,如果“增强”是一个通过 Gradient Descent 对输入图像进行 activation maximization 的子函数,那么 DeepDream 算法先将图片缩小到不同的 scale,然后从最小的缩略图开始,调用“增强”子函数进行增强,将结果放大一级,和稍大一级的缩略图通过半透明的方式 blend 到一起,然后再以此为输入再调用“增强”子函数,如此反复直到最大的原来的图像的尺寸。不同大小的缩略图可以让算法 focus 在不同 scale 的 visual feature 上,使得最终结果中有不同 scale 的 hallucination。有点密集恐惧症,不过是不是也和 Klimt 的平面 decoration 风格有些类似呢?

不过为了避免麻烦我就直接找了 Wikipedia 上的图做例子,网上还可以找到其他一些更有趣的 DeepDream 的例子,有一些示例是以一张蓝天白云为基础图片,然后效果好的 visualization 中可以看到神经网络把不同形状的云当成了猫啊狗啊之类的……是不是自己有时候也会玩类似的游戏呢?😛除了Google 原始的代码之外,网上还能找到许多其他的实现和 ipython notebook 的示例,有兴趣的同学可以去玩一玩,另外 distill.pub 上还有一篇相关内容的讨论,可以看一看。

ps: Inceptionism 并不是 Neural Style Transfer 哦,不要搞混了。

2018 世说心语

$
0
0

每一夜月阴缺
我学会不完美的美
心跳声在周围
催促我有梦去追
我又起飞了我是自由的
随风旋转着开心唱着歌

去年年末结束学生生涯之后,开始“踏入社会”,2018 年对我来说是一个新的开始。但是年底回顾的时候发现,大概这整个一年其实是新生活的一个悠长序章呢!也许我自己都没有发觉我对已经远去的学生生活的极度留恋,而这种留恋则以对新生活的抗拒的形式表现出来。当然,反过来我的叛逆新生活的心理,也为我提供了一定的缓冲和保护作用,让我不至于突如其来地去体味步入社会之后的生活负担和烦恼。客观来讲,还是很正面的一个序章啦!而且我还实现了去年的新年愿望——成为了一个可以独立开车的人。😛

同妈妈再阿拉斯加出口冰川的哈丁冰原道。

工作

到十二月为止差不多工作一周年。从工作的内容来看,我几乎一下子就进入了状态,因为本质上和 PhD 期间做的事情没有太大的区别。其过程中会出现的迷失与挣扎也和 PhD 时代几乎一样,所以很快就适应了。

但是进入职场之后瞬间就会意识到和学生时代的 mindset 很不一样,你可能需要考虑升职 ladder,职业规划,项目 impact 和风险、成本,又及在做项目的过程中自己哪方面的能力或者技术能得以成长和提升,又要考虑自己的人生理想,同时养老保险,生命保险之类的一堆事情也会让你意识到不止需要考虑现在的自己,还要为未来的自己做打算,以及未来的家庭、下一代等等。公司的上下级关系也比学校的师生之间的距离要更短一些,从而也会让你接触到一些比项目内容本身更复杂的东西,比如团队的利益,公司的发展方向,甚至是更复杂的公司政治斗争之类的东西。等等等等。

不过我对学生时代简单生活的依恋一直让我有意无意地去忽视这些东西,但是他们显然是存在的。并且在平时一些朋友与我聊到工作上的烦恼的时候我也能体会到自己支持也是迟早要去面对它们的。当然在公司肯定有平步青云的人,他们的故事每个人都不一样,但是烦恼的人感觉大致都是因为生活中的负担(比如房子、小孩等等)和工作过程中本身的 struggle。工作上感觉主要是“我太弱,做这个东西太难,不知道未来出路在哪里”和“我太强,做这个东西太肝,不知道未来出路在哪里”。我感觉两者其实本质原因都在于工作中的项目本身(和学校时期相比)更加复杂和庞大的缘故。我自己的 struggle 可以归到前一类,但是 PhD 的经历已经让我说服了自己做 research 的常态就是如此:你要解决的问题是你不知道应该怎么去解决的,否则就不能称其为 research 了。所以虽然日常的工作中我也总是各种 struggle,但是我并不为此而苦恼或者想要改变,而是去接受并通过其他途径来缓解心理积压。而后者的烦恼大概更常见于涉及 engineering 比较多的场景,因为很多项目规模非常大,可能需要旷日持久的大规模工作才能搭建起来,耐心就会被慢慢消磨,自身可能觉得每天都在做比较重复的劳动、并没有学习新的东西,同时这种大规模合作的项目牵涉到和非常多的人的互动,于是 politics 相关的东西也自然地牵扯进来,比如有人甩锅、划水、摸鱼,就会让人觉得自己为什么整天在跟这样的人浪费时间,又比如项目之间会有争斗和勾心斗角,甚至有市场舆论,公司高层的决策等等会让人觉得即使踏踏实实做下去也是前途未卜。

总之有朋友跟我聊起类似话题的频率似乎比 PhD 期间聊毕业烦恼要更多,所以虽然 PhD 的生活中时不时会有一些非常奇葩的师生矛盾和事件发生,但是也许大人社会上的困苦是一种更加普遍存在的问题吧。只是我通常也想不出什么排忧解难的方法,因为最终得出的结论是这大部分似乎是客观存在问题,也许我们之所以 struggle 是因为人类现有的奖励反馈机制已经不是太适应飞速发展到今天的文明所面临的挑战了,要从根本上解决问题可能需要人类的进化呢。

不过幸运的是自己还停留在学生时代那种甚至有点天真的思维方式,这似乎提供了一定程度的保护屏障。比如我依旧完全没有做过关于未来的“家庭”,以及“生儿育女”等方面的考虑,甚至连我自己的退休养老方面也都并没有认真去忧虑。虽然我总觉得(并且朋友们也这样劝告我)总有一天(比如在出现中年危机的时候,并且那时可能已经有点晚了)我会不得不去面对这些问题,但是自己当下就是如此冥顽不灵呢。结果就是如果你一不考虑在湾区买房,二没有养家养小孩的需求,在资金增长(加薪啊、很积极的投资啊之类的)方面就没有很大的渴求。而升职的压力呢,感觉大部分来自于 peer pressure,但是反过来其实也有反向的 peer pressure,比如你旁边可能就是一个公司(大部分技术路线的人能达到的)最高 level 的人,但是他也和你做的事情没有太多本质区别,于是就会觉得专门去爬 ladder 似乎意义不太大,若真爬到顶端了会不会反而像游戏通关时一样空虚呢。再就是个人理想或者“make impact”方面的诉求,我觉得如果能成功的话,是一件美事,但是作为目标而言,我通常都是会把满足自己的好奇心和兴趣放在优先级更高的地方。总之感觉我在自己的人生轮回中进入了一个比较“佛系”的阶段呢,而且我觉得自己现在的工作环境很好,老板也很有趣也很 supportive,组里的同事们也又厉害有 inspiring,很多人在我抱怨湾区太无聊的时候都会问我为什么不搬去其他地方,我觉得不想离开现在的工作环境就是最主要的原因了。

生活(在别处)

如同一开始提到的,这一年对于新生活的抗拒程度大概真可以用“身在曹营心在汉”来形容。比较淘气的是由于我在一些社交网站的位置信息(故意)没有更新,所以有时候会收到关于波士顿的一些活动的信息,我会跑去标记为感兴趣。虽然借参加毕业典礼的机会跑回了波士顿一趟(开心地见了许多老朋友),但是整体来讲,今年几乎完全是身陷曹营无法逃离的状态。主要原因是签证上处于 O1 + EB1 pending 状态,travel 到美国以外就很麻烦(也许认真去研究的话应该并不是完全禁止 travel,但是一看到那些条文规定我就头大),加之我对游玩的主要兴趣还是在于人文和艺术,所以在美国境内不是看荒野和石头就是逛游乐场的情况下,每次兴致勃勃地突然开始查询旅行攻略的最终结果都是决定还是在家呆着吧。唯一的例外就是阿拉斯加了。

从阿拉斯加 Kenai 半岛的 Homer 出发的围观熊的活动。

阿拉斯加是夏天的时候跟妈妈一起去的,感觉我在尽孝心方面特别欠缺,这是第一次接她来美国玩。我有点忘记了最初自己对阿拉斯加的执念来自于哪里了,但是真的是非常满足的一次旅行呢。阿拉斯加感觉冬天和夏天是完全不一样的世界,冬天日照很短,主要是看极光;而夏天看不到极光,但是可以有很多户外活动,比如出海看动物,看峡湾,看冰川之类的。其实在阿拉斯加公路上开开车就已经是很美了,并且像是被水洗过一样干净。一次在看动物的游船上碰到一个从西雅图过来的 photographer,她说她前几天一直在雪山里跟朋友一起 backpacking,今天和朋友行程分开后来这里 take a break,接下来几天打算沿着公路开车,到合适的地方停下来露营,然后看看书,最后从安克雷奇飞回去。听着就觉得,阿拉斯加真是很适合做这样的事情的地方呢!

我自己最喜欢的一个活动是去出口冰川的哈丁冰原那里 hiking,到山顶的时候可以俯瞰冰川,后来才知道原来也有去冰川上行走的 tour,不过其实爬雪山的自由行也许更好玩呢。回想起来我也是心够大的,特别是带着妈妈,还一副游玩的态度,两人都没有任何合适的装备,普通的运动鞋,衣服裤子什么的也没有防水之类的,就顺着雪里偶尔可以找到的小旗往上爬,后来妈妈还找了一根树干当登山杖,她的体力真是超好。不过真的是非常开心,到山顶几乎就是云里了,远处的雪原和冰川仿佛是幻想中的世界,往下的时候又陡到可怕,就坐在雪上往下滑,途中偶遇结伴同行的一个从上海独自跑过来旅行的女生后来也没忍住跟着我们一起疯起来。现在想想在那边似乎碰到不少独自旅行的人。

后来在湾区有小伙伴组织露营,也兴冲冲地跑去了,第一次露营,确实非常好玩,搭帐篷、烧火、烤棉花糖、聊天,总觉得像小时候干的事情。不过似乎美国人太喜欢露营了,露营地的整套设施似乎都已经非常齐全和标准化了,周围也有很多“邻居”,和一大群跑来跑去的小孩。总之和我根据之前在旅途中听到的关于露营的事情脑补出来的“在远离城市的地方生个火静静地看书思考人生”似乎有点不一样。事实上我已经差不多把诸如看书画画之类的活动归到了自己一个人的时候的休闲方式,有人在旁边的时候做这些事情即使别人不介意,我自己也会觉得怪怪的吧(突然想起来有次同一个小伙伴在外面,吃饭等位还要很久,于是友人从书包里拿出一个 kindle 说,那我们各自看书吧。我当时有点惊呆😮,不过莫名其妙地被戳中萌点哈哈)。

Work Life Balance

有一个和读书阶段非常明显的变化就是工作和生活的分离。在读 PhD 的时候无论是大半夜还是周末,都有可能会出现在实验室,但同时(因为我导师管得很松)在状态不好的时候几乎可以随时翘班。但是工作以后就一下子变成了上班的时候就好好上班,但下班之后就完全不开公司电脑、查公司邮件等等。在公司没法随便放羊可能一方面是开始正常领工资之后责任感也更强一些,但应该更多的是来自于外部因素,比如⓵.同事们都很认真地在工作;⓶.公司不像学校那样有很大的图书馆之类的地方可以很方便地过去休息,即使想放松也不太方便;⓷.湾区交通拥堵,很多时候即使脑袋糊掉了想放羊回家也不是轻易能回的。至于回家之后不再管公司的事情,我想应该是在公司只能认真工作导致的结果,毕竟随着年龄的增长身体素质也在慢慢下降,工作一天还是相当累的,如果回家以后还要继续工作,简直是要翻天了。不过有趣的是我并不是在“强迫”自己下班以后就不工作了,而是下班以后完全就忘记了工作上的事情,虽然我不知道自己是怎么做到这样子的,但是感觉对于工作上的压力管理来说似乎是个不错的 feature:毕竟长期积压是不太好的,如果能间隙地完全切换状态的话,至少让自己有空间来喘息。

在五月的时候我又重新下载了弃用了很久的 iHour 来记录自己的时间。下面画了个简图,如果把两次 travel 中没有做任何事情导致的点当做 outlier 忽略的话,整体来说每周花费的时间是有在慢慢增长的,到十月的时候由于 Inktober 达到顶峰,那个时候身体已经有点受不了了。感觉我过去在使用了 iHour 很长一段时间之后把它卸载了的原因可能也是类似的:时间久了以后生活的短期目标会倾向于去最大化记录的时间,有时候争分夺秒得有点过分了。从比例来看,工作和其他所有的“课余活动”之间的比例大概是 6 比 4(因为还有其他一些娱乐比如看动漫、电影、朋友聚会以及上网闲逛之类的是没有记录的),感觉整体还算是比较合理吧(只是百分之二的运动量大概真的是有点少了,真怀念学校的巨大室内游泳池)。同时搬家买床垫的时候还送了一个 sleep tracker,从数据上来看,似乎平均每天也大致睡满了七个半小时左右;REM 眼动期(做梦的时间)占了挺大一块;深度睡眠不知道为何从五月份开始就下降到半小时左右(我最近才在网上看到原来正常的深度睡眠一般是两个半小时左右是比较合理的……)。虽然 tracker 的 categorization 不一定准确,但是我自己也能明显感觉到今年的睡眠质量的下降:最明显的证据就是我这一年工作日每天都能在七八点左右起床,完全不需要设定任何闹钟——感觉这是我中学毕业之后就丧失了的技能,终于又找回来了……具体是因为工作日早上外面车流的声音把我吵醒的,还是因为担心起晚了会被堵在车流里而被自己的生物钟叫醒的我也就不得而知了。这个 sleep tracking 也很不方便地无法导出数据,所以我没法很容易地分辨自己看起来还不错的平均睡眠是不是因为我周末都有狠狠补觉的缘故。

iHour 应该是我用个的同类 app 里最简单方便的,不过有个很严重的缺陷就是不支持数据导出做一些简单的分析。所以明年打算尝试一下其他的 app(虽然我已经尝试过很多了)。前阵子还试了试 AmosTime,界面很漂亮,功能也很强大支持导出数据,但是相当繁杂,而且有一些强加的理念,比如“用户肯定会忘记关闭 Timer”,所以只允许制定每日计划然后倒计时,而不允许正计时。感觉非常不合理。现在我看中一个叫做 Manifest 的 app,等回头用空好好试用一下。

从上面的统计可以看出我的课余生活(的比较有营养的那部分)差不多可能三等分为画画、钢琴和读书。先说钢琴吧,我在家的时候差不多能坚持做到每天练琴一小时左右,上课通常是每两周一次,不过我自己感觉练琴的时候没有之前那么集中注意力。以前在琴房练琴比现在充满各种 distraction 的自己家里练会有区别也可以理解,而且戴耳机总是会和我的耳鸣相互影响也是一个原因,但最重要的原因应该是我现在处于瓶颈期吧。有时候会觉得自己完全没有长进(当然仔细想想的话其实还是有进步的),如果老是弹不好的话,积极性比较消沉也是可以理解的。所以今年并没有尝试专门学一个稍微大一点的曲目,主要还是在弹 599 里的练习曲和一个叫做《Piano Literature》的系列琴谱里的选曲。其实仔细想想也有一些几页的 sonatina 啦,难怪我觉得比去年练起来要吃力呢。钢琴老师换了一次,因为最开始找到的老师有事要出远门很久,目前是姐弟两个人,姐姐小提琴拉得很好,但是也会弹钢琴,所以弟弟没空的时候就会由姐姐代课。感觉讲解和反馈都挺好的,不过感觉两个人都不太擅长鼓励人,有时候会听到诸如“啊,没事反正你也只是弹着玩玩”之类的话(虽然我确实是自娱自乐,但是……😂总之我竟无言以对)。感觉弟弟脑洞特别大,他有时候会把他从音乐里“看”到的一些幻象(比如空中有很多东西在转圈圈)讲出来,让我觉得搞艺术的人脑回路大概真的是不太一样的。还有我在弹琴的时候他会一直在看手机,不知道是在干什么,应该不是在上网啥的吧?因为我即使很小的地方弹错他都能发现。来年春季我终于抢到了公司的钢琴课的名额,可以试试在公司上课如何,这样至少不用每次都开车开那么远去上课了。

不过我觉得自己在乐理方面进步还是蛮大的,得益于在公司修了好几个 quarter 的乐理课,只是耳朵听力还不行,很多时候都听不出和声的变化。我原本以为学好乐理之后就能很容易地理解复杂曲目的结构之美,但是渐渐发现其实乐理是一个有点“一厢情愿”的东西,因为音乐本身是一个比较自由的东西,乐理最多只是一个 general guideline,作曲家并不是拿着一本乐理规则词典来作曲的。知道了这一点之后,理解过程反而变得轻松了些。课上还教了一点简单的四声部作曲,不过应该不叫作曲,因为只是和声进行,既没有节奏的变化也没有旋律在里面。总而言之,希望明年能够突破自己的瓶颈,找到自己的 pace。

听音乐方面只去过一次三番交响乐团的现场(Yuja Wang 过来了),毕竟去一次相当费力,城里既难开车又难停车,来年车技更熟练之后可以尝试多去。很怀念在学校的时候转角就能碰到有学生的 recital 或者学校乐团的表演,过桥走一段就能超低价去听波士顿交响的日子。另外由于 commute 现在以开车为主,相对于以前来说听音乐的机会更多了,不过主要还是胡乱听听。我觉得似乎很难发现新的音乐,像 Apple Music 之类的推荐算法似乎也就翻来覆去把一些常见的曲目和专辑给你列出来。之前知道有一个叫做Grammofy的 app,会定期帮你推荐古典音乐,并有很详细的介绍,但是后来这个服务似乎经营不下去关闭了,后来重启之后和 spotify 合作必须要 spotify 会员才能使用的样子,由于我一直在用 Apple Music 就没有仔细研究。

画画方面今年的一个进步是画得比较多,在画工方面有时候觉得有进步,有时候又觉得好像还是老样子。不过看到前辈有说过,“也许你并不会对你的每一幅画都满意,但是你画过的每一笔都是你不断累积和进步的基石”。🙃

这里必须要赞一下 Google 对员工的文化生活的关心程度真的是非常高(当然也有可能是有志的同事们努力得来的结果):在 Mountain View 的 main campus 那边有一片区域几栋楼完全是作为文化娱乐生活用的,有琴房、画室、乒乓球室等等。并且公司和 local 的艺术学校合作,提供了直接在公司 campus 里上课的机会(公司提供场地,但是要自己支付课程费用),这对于交通就是噩梦的湾区来说简直是超大福利。除了之前提到的乐理课之外,也有一些挺有意思的绘画类课程。年初的时候上了一个 Intermediate Drawing 的课,主要是以 figure drawing 为主,中间还有几次有 live model 过来,真是再次体会到对着真实的三维场景画和对着被相机抓下来的二维照片画差别实在是很大。总之那阵子我非常沉迷于 figure drawing,因为 figure drawing 很多时候主要目的就是抓住模特的 gesture,是一个快速 sketch 的过程,并且 posing 的时间越短,模特越有可能摆出比较 dynamic 的 pose(否则坚持不了那么久),现场画的时候从 1 分钟到 20 分钟的 pose 都会有,于是其实每天即使只画半小时到一小时的话,都能有挺多练习,于是我很快画完了一个 sketch book!

上图第一行依次是 1 分钟 pose、2 分钟 pose,同学之间互相画(大约 10 分钟),剩下的是我自己在网上找的图片画的,一般十到十五分钟。我觉得 1 分钟和 2 分钟的 pose 最好玩,时间过得很快,要如何抓住最主要的姿态,简直肾上腺素高涨,在时间有限的情况下反而要静下心来花点时间仔细观察而不是争分夺秒地立刻就开始下笔。不过感觉画真人模特 posing 的机会真的很少,我在伦敦的时候莫名收到过那种定期在某个 bar 举办的 posing session 的传单,似乎是到场的 sketcher 分担模特费用,不知道湾区有没有类似的地方。总之有阵子我一直在找各种能提供大量素材的来源,一开始我想到那种很多图的杂志,比如像Vogue这种,还有 iOS 上有一个叫做【杂志迷】的 app,里面有各种日本时尚杂志的电子版,不过感觉里面很多照片更偏向于 fashion,而对于 gesture drawing 的练习似乎关系不太大,而且大部分照片估计用了非常复杂的光照,所以也比较难找形和描绘。比较不正经一点的是可以去找一些写真集之类的,不过这些照片有可能经过非常严重的 PS,特别是有一次我发现有张照片上一只脚被很马虎地 PS 成了物理上不可能的角度,感觉特别是对人体 anatomy 不熟悉的人来说用这样的参考说不定是有害无益呢。当然我也有找到许多 figure drawing 专用的素材库,比如line of actionsketchdailysenshistock、Youtube 上的 CroquisCafe 等,还有一些付费资源比如BodiesInMotion是用高速摄像头拍摄一些舞蹈动作之类的连续图片(上面途中的跳舞和武术动作就是根据这里的参考画的)。

除了对着模特和照片画之外,今年在路上画陌生人的活动(travel sketch)也还是断断续续的有一点,由于 travel 比较少,所以主要是在阿拉斯加的时候画了少部分。另外在家有时候也会周末上午去一个咖啡馆画一个小时那里的客人们之类的。不过我还没有在附近找到一个咖啡又好喝同时座位又比较合适方便地观察人的店。另外我在画 sketch 的时候杂乱的线条太多,而我又不喜欢用像圆珠笔那种可以控制线条颜色深浅的笔,也许还要多练习才能减少多余的定型用辅助线条。

总之 figure drawing 画得多了自然地就想要学习 Anatomy,知道内部的骨骼和肌肉是怎么回事,才能更好地画好 figure。于是我就开始学习 Anatomy,买了一些书来看,还有网上的教程,这里推荐一下Proko的 Anatomy 教学视频,非常生动形象有趣,如果你不确定是否合适,其中很大一个子集都是在 Youtube 上可以免费看到的。我觉得 Anatomy 是很有趣的一个学问,好玩的点在于你了解了某些肌肉骨骼的结构之后,在路上看到别人,仿佛能看穿皮肉看到骨架(这里不禁想到那些神话迷信里的诸如透视眼之类的是不是以懂得 anatomy 等科学知识的人的“神力”为原型发展来的)。不过我只学了大概上半身的结构之后注意力就转移到其他地方去了(希望明年继续捡起来!),因为毕竟想画的东西有很多很多,每天仿佛都有不一样的冲动。比如很想改进自己对颜色的把握,因为自己配的色都要么很灰头土脸,要么很辣眼睛。于是就找了一些颜色很鲜艳的游戏之类的场景来临摹(这样的练习应该去年也有在断断续续地做)。

另一个很努力提高的就是构图,其实经常在博物馆看到各种好看的画都会拍照下来,心想着回去临摹学习,但是在家的时候很少会想起来去翻看那些照片,而且很多以前的画的题材都不是我太感兴趣的,后来我发现很多电影的构图很有特色,或者说自成一派,于是就在看电影的时候会比较在意分镜构图比较有意思的片子,然后去画电影画面。

当然,还有 portrait!也是一直很想画好的也一直有在练习的。不过尤其在练习人像绘画的时候,一个一直存在的矛盾变得非常突出:比如弹钢琴,你究竟是应该弹最基础的练习曲甚至是重复的音阶练习,还是绕过基础练习直接去弹你自己喜欢的曲目?画画的时候也是一样,画人像的时候尤其是:很多时候会看到一些很好看的图片里的人物,就会想去画,但是很多时候这样找到的图片在光照等方面都非常 subtle,导致对人脸的 anatomy 不熟悉的情况下非常难以观察出其结构,于是也就很难画好,在练习方面得到的收获就会小很多;但是专用的人像素材、大师作品、甚至是石膏像等往往又不一定能激起你去画的兴趣。感觉我一直在这样的矛盾中徘徊,比如男性人脸的轮廓比女性通常要显著很多,但是我通常更喜欢画后者;再比如西方人种和亚洲人种比起来轮廓(眼窝、鼻梁等各方面)也要强很多,但是大部分时候我还是更想画后者。其实有阵子我一直想买一个一比一大小的骷髅头或者甚至全身骨架放在家里可以随便参考。但是在网上看了一圈发现好像比较容易买到的其制作精细程度和质量其实都比较一般,而且我房间剩下的空间也不多了,仔细想想好像也是有点瘆得慌,特别是有个骷髅头似乎为了逼真,并不是其(塑料?石膏?)材质的原来颜色,而是故意涂成了黄色掺杂着褐色的样子,看着有点吓人……

当然除了临摹和练习之外,今年画的原创性的内容也比往年要多一些,其中还包括三幅丙烯画。不过南湾这里没有 blick 店,其他的一些艺术用品店我跑去看过之后都很失望,通常都是只有一个角落是画材,剩下的店面都是卖一些毛线啊、园丁用具之类的,并且通常还有很大一片是专门卖相框的,让我很不解,湾区人民很喜欢把相片印出来装在框里吗?要自己创作内容的话,就比练习画要复杂一些,并且自己在设计、构图、配色、执行等各方面的缺点会相比临摹更加凸显出来,最终结果通常会比较不太满意,但整个过程来讲其实是更有趣的,通常需要做 thumbnailing、sketching 打草稿,然后要搜集很多参考素材,然后再迭代、修改,整个过程可能会花要几天到一周。我觉得在传统媒介上搞起来特别费事,如果是 digital 的话,可以随便大胆地尝试,如果不行就 revert back,但是传统媒介的话,特别是到后期,如果改坏了,再想要回到从前,就只能哭着手动再把原来的部分画一遍了。比如小提琴这幅画里,因为实际画的时候 canvas 的尺寸比例和草稿用的构图尺寸比例不太一样,导致空间有点不足,于是最右边的论文的摆放角度被调整得更加垂直了一些,到最后就看起来很不像是平放在桌子上的,但是犹豫了很久也没敢再改。

今年在画画方面还有一个“成就”就是终于完成了一次Inktober,去年尝试过,只坚持了几天就放弃了。Inktober 是一个全球性的鼓励大家在十月 October 的时候每天画一幅画的活动。虽然主要是以墨水画为主,但是这主要是为了活动名字谐音方便,实际上也没有什么太严格的规定。不过这个活动最有趣的规则在于每年会出一个 31 天的主题列表,每天的主题是一个单词,事先会公布在 Inktober 的网站上,然后大家以那个单词为主题画每天的画,之后以 inktober 的 hashtag 发到任意你喜欢的社交网站上。除了自己参与之外,这个活动的一大乐趣其实是在网上看别人会以那个单词画出怎样的画来,因为这些单词似乎完全随机选出来的(参见官网的历年 prompt list),所以有时候大家都很开脑洞,就很有趣,有时候也会看到很多与画师们本人生活或者内心相关的一些东西。虽然我最后很大一部分的画是临摹而不是创作的,但是也要去思考和当天的主题词相关的材料来临摹,基本上每天早上就得看一下今天的词,然后诸如吃饭之类的空闲时就得好好考虑,晚上下班之后再把它画出来,最后我画了很多动漫相关的内容,可见我大部分时候给定主题迅速能想到的还是动漫哈哈。虽然很有趣,但是基本上一个星期以后就会变得如同长跑一样极其考研耐力和体力,因为一天都不能停,但是放到一整个月的时间跨度上,就会发现总有一些天有户外活动啊、聚餐啊、或者下班去加个油、买点杂货、看个牙医、有新发现的好电影想要看等等,最后真是身体上都有点累得受不了了,结束了之后简直大睡了很久。

哇,仔细总结一下才发现原来今年真的画好多画。但其实并不是练琴就很瓶颈画画就如行云流水似的一直在画呢。其实很多时候尝试提笔开始画依旧是需要认真地给自己鼓劲才能开始的,今年年中有两个月其实我就一笔也没有画,仿佛有一种抗拒或者阻力需要克服,我一直觉得是因为自己还不能随心所欲地表达自己想要描绘的内容,害怕画不好而带来的抗拒心理(练琴的时候也是差不多)。然后有一次无意间看到一本书叫做《Art and Fear》,是一个艺术家写的,大致就是讲艺术创作时的心理状态。因为就各种艺术而言,大家都会去欣赏和谈论最终的成品,而很少有人去关心艺术家在创作过程中的心态。虽然自己最多只是一个学徒,离艺术家的定义还很远,但是书中的许多内容都很有共鸣,不过由于是艺术家写的书,感觉看起来有点意识流(哈哈),到后面有点晕,看到一半决定放一放,等之后这种情绪再比较严重地影响到我的时候再拿出来看。

最后还要提到的是年底的时候又在公司修了一门叫做 Narrative Illustration 的课。然后发现原来 Narration 或者说 Story Telling 的侧重点和普通的 drawing、painting 或者 illustration 是很不一样的。为了能最直接迅速地将想要表达的事情传达出去,会做一些夸张、简化、甚至在 visual appealing 上的 compromise 之类的,同时如果是多张图的 story telling 的话(比如漫画这种媒介),还多了一个时间维度,但这个时间维度和像电影、动画那种动图又不一样,它是将空间维度强制转换成时间维度,漫画的两幅画之间的框间空白是读者的脑补范围,让整个故事流动起来,对这方面感兴趣的朋友可以去看一本多年 best seller 的书《Understanding Comics: the Invisible Art》。总之很有意思的一门课,整个过程中一个有六个课程 project,从 character design 开始,一直到最后做一个zine,我也是第一次了解到 zine 文化,最后一堂课大家互相交换礼物的方式交换各自做的 zine,很好玩。听说这边每年还有 zine fest,可以去和当地的爱好者互相交换(除了绘画方面的题材,也有摄影、文学作品等等)。我做的是一个关于一个吃饭如厕睡觉任何时候都在看手机的人的故事的 zine,大家各自做的都很有意思,很多和大家之前的 project 联系起来。有时候上课的时候还会当堂玩一些游戏,比如每人一张空白纸,划分成几个格子,限定一分钟,画几个简单的形状;然后整体把纸传给右边的人,在拿到的新的纸里三分钟之内根据那个形状设计一个角色,然后在另一个框里写一个单词描述一个场景,然后再右传;然后以拿到的纸上的角色设计为基础再另一个格子里画一个动作,或者事件,然后以一个单词再另一个格子写下描述“困难”或者“障碍”的词,再右传……如此循环,到最后自己最初的那张纸回到自己手里的时候,每个人手上就都有了一个完整的故事。听起来有点 stressful,实际上也是如此,时间非常紧张,但是每次都会被大家的想象力所惊叹到,哈哈。

哦,对了,年末的时候还了解了一点点 3D 相关的东西(Blender),并不是因为对 3D 建模感兴趣,而是看到网上有一些用 3D 和 2D 结合进行绘画起草或者制造一些很漂亮的伪 3D 的动画效果等等。最大的感受就是 3D 真是一个超级大坑啊,感觉随便做点什么东西都是工作量巨大无比,比 2D 动画那种要一帧一帧地画还要更累的样子。

读书方面今年比去年稍多一点,大约 40 本(不到),实体书和电子书的比例也和去年差不多:一半一半左右。外文书中有 15 本英文和 1 本日文(以及 6 本日文漫画)。电子书方面除了手机和 kindle 之外,今年还买了一个博阅出的 Likebook Mars 设备,这是一个以 Android 6 为系统的电子墨水屏阅读器,可以安装第三方 app,我主要用它来阅读多看书城买的中文书。手感和便携性当然不如 kindle 好,最主要的问题在于安卓系统启动比较耗时,但是如果设置成不自动关机,而只是休眠的话(这样不用每次都等系统重新启动起来),后台耗电又非常大,需要经常充电。其实我也不介意给阅读器每天充电了,只是那样如果有几天搁在一边的话,可能就彻底没电了。总之略微有点不方便,但是好处还是多过坏处的,算是勉强解决了我过去几年在电子书方面的一个 complain。下面是主要的书目和一些简介,大致按照我自己的喜好程度来排序。

✦✦✦✦✦✦六星推荐:

  • Picture This: Perception and Composition:用最简单的形状来讲解构图,以及颜色、形状、大小和位置等对比所产生的情绪反应,生动形象。很短的一个小册子,不论是否喜欢画画的人都推荐一读,可以看看你是否同意作者的观点。
  • Understanding Comics: the Invisible Art:前面已经提到了这本书,出版于三十年前,但是内容一点也不过时,可以说是经典。虽然主要是讲漫画(并且以美漫风格为主),但是对 general 艺术感兴趣的朋友应该也会找到很多有趣的内容。一开始有点慢热,不过稍微后面一点就开始很有趣并且很深刻了。主题算是解读“漫画”这个媒介本身的独特之处,有很多剖析可能你从小到大都在看漫画或者甚至尝试创作漫画但是都没有仔细思考过。实际上书的内容对于任何 narrative 或者 storytelling 性质的媒介其实都是一个很好的探讨,其中艺术的“写实”、“抽象”、“符号”三角形对于理解现代艺术(fine arts 方面)的发展也有很大帮助。对漫画本身的历史当然也做了很多的调研、统计和探讨,比如很仔细低对比分析了日漫和美漫之间的区别(抛开故事内容的话),算是多少解开了我自己的一个(自己为什么对美漫不太感冒的)小小的疑惑呢。

✦✦✦✦✦五星好评:

  • Perspective Made Easy:讲透视的一个小册子。透视这个东西看似简单,但是真正要自己构图的时候会发现有很多不清楚的地方,这本书简单明了,可以学习用也可以作为参考。
  • Framed Ink:讲 visual story telling 里的一些基本原则和技巧,示例全都是非常 loose 的黑白墨水画,但是都非常具有视觉冲击性并且简洁明了地表明主题。
  • The Age of Insight - The Quest to Understand the Unconscious in Art, Mind, and Brain, from Vienna 1900 to the Present:探讨科学(脑科学、心理学、哲学;意识、视觉、智能、潜意识等)和艺术(特别是越来越夸张变形的近现代艺术)之间的关系。感觉中心思想是 beholder’s share,现代艺术越来越强调观众的参与在作品“完成”中的作用;这样来讲的话,现代艺术有点像一个漫长地对大脑神经网络进行 activation maximization 的探寻过程(并且还是 black box, gradient free……)。我之前有专门写过一篇博客来介绍这本(和同一作者的另一本)书。
  • Hello World - Being Human in the Age of Algorithms:今年的新书,关于“算法”逐渐深入我们生活的方方面面(消费、医疗、保险、执法等等)的情况的论述以及所造成的社会、伦理等各方面的冲击和可能的解决方案、未来前景等。虽然其中大部分例子是统计或者机器学习范畴下的算法,但是书是从更加传统宽泛定义的“Algorithm”作为着眼点来讲的。全书态度比较中立,举了很多从非常早期(计算机发明之前)的一些算法应用和非常新(2018)的一些例子。一方面可以了解一些有意思的知识比如超市为什么愿意免费帮你办会员卡或者无人驾驶车的早期尝试和历史,另一方面又能看到一些“当前时代”的名词(诸如 Uber、Alexa、Black Mirror、Tesla、腾讯优图等等)。
  • The Landscapes:算是 Richard Schmid 的风景画集吧,非常漂亮,包含了作者 60 年绘画生涯中的 300 幅风景画,其中一些画包含题注,主要讲了作者当时作该画时在绘画方面的一些思考,权衡和选择等。Richard Schmid 这种松弛自由却又不杂乱的画风感觉和 Sargent 的风格挺像,在他的许多风景画中频繁出现的 sharp edge 和 lost edge 的对比感觉像是把梦境搬到了现实中。
  • いまさら翼と言われても:轻小说,“古典部”续集故事,《冰菓》的粉丝不容错过。短篇故事集,我比较喜欢里面伊原和漫画研究会的故事(因为故事本身和我自己的一些经历联系起来很有代入感),以及结尾的一篇讲千反田的故事(主要是因为觉得故事描写得很有画面感)。
  • 宇宙的结构 - 空间、时间以及真实性的意义:第一推动系列丛书中的一本,现代物理的科普,感觉这类书有很多本,比较容易搞混,这本应该出版年比较近一些,所以讲的一些内容和进展也更新一些。内容当然是很有意思的,阅读过程中最大的体会就是不断地认识到人类对于我们的世界的无知程度到底有多深。不过作为非物理专业,在读完几个月之后基本上把里面的内容细节差不多都忘记了。
  • 七夏娃:全三册,最近新出的硬科幻。视角非常独特的一个故事,时不时会因为当下新闻里看到的一些自然灾害或者事件而引发身临其境的代入感,有种现实魔幻主义的感觉吧。因为虽然是科幻,但是事件触发却是在“当代”,想象一下如果现在人类突然发现地球在两年之内会迎来一次毁灭恐龙级别的大灾难,人类将何去何从。各种用“当代”的技术拼凑出来的“未来”设备,通过文字描述估计能有多形象还得看读者自己对相关知识的积累程度,据说明年要上映电影了,很期待。ps: 千万不要看人物表,三言两语能把所有故事剧透光。另外第三本(也就是结局)有种草草收尾的感觉。
  • 木麻黄树:毛姆的一本讲述英国人在东南亚殖民地“frontier”上的生活的一个短篇集,和许多其他短篇集随便找其中一篇的标题为名不同的是,《木麻黄树》是一个精心挑选的很有寓意的标题,并且各个短篇之间也有一些微妙的联系和铺成关系。毛姆(一如既往地)对那种迂腐势利的英国人做了很生动细腻的刻画,同时还有非常透彻的心理描写。即便是短篇,也是有头有尾,结构清楚,完整而连贯。另一点我觉得比较有意思的是文字非常平易近人,巧妙地在行为和心理描写方面做了 balance,使得读者有一种代入感:我作为一个亚洲人,在看书的过程中更多的是体验到了其中的英国人在异国他乡的远东所受到的文化冲击,而故事中出现的亚洲人却都变得如同黑盒子一般披上了神秘的面纱变得难以捉摸。感觉特别是要在中短篇的篇幅下做到这样的效果,真是非常厉害的。
  • 3×3EYES 幻獣の森の遭難者:全四册,3×3EYES 漫画的新作续集,粉丝不可错过。在日本超市旁边的书店闲逛的时候看到就买回来了,故事感觉不如原作,但是看到熟悉的人物登场还是很感动的。
  • 神的九十亿个名字:一个很经典的科幻短篇集。比较喜欢的故事有“神的九十亿个名字”,“地心烈焰”,“相会于黎明”。最喜欢“岗哨”。排名比较靠后是因为我不太喜欢短篇小说经常有的那种戛然而止的扫兴感……故事也好人物刻画也好都会有种很憋屈的没有展开的感觉。
  • 20 世纪少年:第一、第二卷。很经典的漫画,不过我看到第一卷快结束情节才开始展开,总之我觉得还不错,但还没有特别能 appreicate 到它评价如此之高的原因。剩下还有很多卷,不过书店余下的册被别人买走了,我就一直没有看。
  • Anatomy for the artist:很有特色的一本书,比如有一些半透明页面的解剖结构和下一页的人体照片重叠起来,可以看到内部和外部结构分别是怎样的;还有一些 masterstudy,是一些大师的名画,然后找一个人体模特来摆出相似的造型,再在一些 anatomic 的分析。不过总体来讲似乎更似乎当做一本 reference 以及休闲读物(因为画和照片都很好看),而作为入门教程好像有点不太合适。
  • The Highly Sensitive Person:很有趣的一本书,感觉介绍的 HSP 跟我自己的 trait 有比较大的 overlap,阅读过程中也有不少共鸣。全书整个有点长,从 identify HSP 开始介绍了这类人在成长,生活,工作,社会中可能会碰到的各种状况和提供相应建议等等。我个人觉得后面这些章节太长也不太有趣,大概也因为我自己长期已经有一套自己的解决方案吧。

    根据书中的介绍,大约有 20%的人是属于 HSP,并且这是一种生理上的 trait,而不是后期塑造的一种性格或人格(比如像“内向”、“外向”这种)。简单来说就是 HSP 对于信息的处理会比普通人要更“深入”一点。其实人的感官接受到的信息在数量级上远远超过了人脑能处理的范围,我们每一秒钟都在丢弃大量的信息,我的理解是对于我们集中注意力思考的部分可能大家都差不多,而 HSP 和非 HSP 的差别应该主要在于对当前所注意的问题之外的那些应该“随便处理一下就丢弃”的信息的处理程度。直接结果就是 HSP 比较敏感(包括对环境噪音等物理上的东西和当前的氛围等虚拟的东西),会考虑太多,同时也非常容易由于需要处理太多信息(比如在 party 等比较吵闹又需要不停地跟不同人社交的场合)而直接宕机而需要独处来回血。

    总结起来全书最大的收获大概还是知道了这样一种 trait 的存在和特殊性,加深了对自己的了解吧,其实我自己在成长的不同时期,一直也在“内向”、“外向”之间游走,有时候自己有点像“社恐”类人,但也有会积极主动组织各种活动的时候,我一直理解为自己的成长和变化,但也许 HSP 的理论是更好的解释吧。总之推荐自己是 HSP 或者是身边有 HSP 类型的朋友的人读一读至少前面几个章节。

  • Guide to the Practical Study of Harmony:柴可夫斯基写的小书,翻译文似乎略有点古代英语的感觉,有些地方不太看得通顺。虽然比较薄,但是内容还是非常详实,但是这种列举规则的书果然就如同语言的语法书一样,即使有很多例子,读起来也是有点无聊的啊。比较好玩的地方是经常讲完一些规则,就说,有才华的学生可以无视规则自由发挥,充分想象,但是对于水平不行的人,绝对不要违反这里的规则。😂
  • 死亡笔记(漫画):很经典的算是悬疑类漫画吧,特别是前半部分情节紧张环环相扣。似乎在笔记本上写讨厌的人的名字这个行为曾经引起大量青少年的模仿而导致这个书被禁止掉。《食梦者》里讲的漫画想要完结但是被出版商强行要求续写的例子应该也是以这部漫画的情况为原型的。

✦✦✦✦✧中规中矩:《夜行》、《Drawing without Fear》、《神们自己》、《献给阿尔吉侬的花束》、《黑暗精灵三部曲》《GANTZ殺戮都市(漫画)》

✦✦✦✧✧三星及以下(不推荐):《What love is: and what it could be》、《A Day with Picasso》、《Super Intelligence: paths, dangers, strategies》

在动漫方面没有去年那么剧荒了,虽然新番方面也只看完了《SSSS.古立特 SSSS.GRIDMAN》,剧情还行,画风特别喜欢,而且片头和片尾曲都很好听,一次都没有跳过。理论上我还看完了《进击的巨人第三季》,但是制作方把整季定为 24 集,却非常耍赖地将其分成两年来播……还不如直接分成两季,当时我看到 12 集的时候发现故意在狂拖剧情,心中就想,你接着拖,还有 12 集你难不成还能全部拖了,没想到下一周发现没有 13 集了,才意识到被摆了一道。虽然如此丧心病狂,但是还是依然高水平的一季。另一个我很喜欢的新番是《工作细胞》,将人体内的细胞拟人化之后讲他们的故事,每次看到体内每秒钟都有这么热血的保家卫国的战斗,简直胜过强打一升鸡血啊哈哈哈,不过看到后面感觉内容重复性有点强,渐渐失去了兴趣,没有能成功追完。

补的旧番感觉都是评分超高的剧:《春宵苦短,少女前进吧!》是汤浅政明去年的新作,单集动画,总之很有他的特色,充满想象力。《交响诗篇》比较长,50 集,科幻类,一会儿像 EVA,一会儿又像 Last Exile。剧情背景宏大又细致,人物(主角和配角)有好好地刻画,故事也有好好地讲,从整体来看是非常好的一部剧,虽然剧情有点拖沓(特别是前 25 集)。《来自深渊》一位英籍印度裔的友人推荐的,去年的剧,可能是由于画风过于偏向幼齿地萌而被我错过了,属于奇幻风格,画面无论是构图还是色彩上都是绝美,故事上看到后面发现完全和画风不是一个风格的,总之比较黑暗,不过我也事先收到了警告,所以还好。总之这似乎只是第一季,整体的故事还完全没有展开,不知道什么时候会出后面的季。最后是《星际牛仔》,这一部我也非常喜欢,画风、音乐、故事、人物都有被戳中的点,不过我没有看完:主要原因是我害怕看完以后太空虚失落,所以一直留着最后几集……

电影方面,特别是在影院看的电影比去年应该要多一些,因为公司旁旁边就有一个电影院,难得有一项活动在湾区这边是比在波士顿更方便的(虽然波士顿也只是过个河),所以我经常都会突然发现有个感兴趣的片子然后直接就买票去看了,而且在画画练习电影构图的时候也会在选材时候找一些片子来看。比较喜欢的电影(和电视)有《蜘蛛侠:平行宇宙》、《我的天才女友第一季》、《我,机器人》、《海街日记》、《非自然死亡》、《霸王别姬》、《天使爱美丽》、《神奇动物:格林德沃之罪》、《复仇者联盟3:无限战争》、《杀戮都市:O》等。

最后是游戏方面,主要玩过的游戏是《伊苏 8:Lacrimosa of DANA》,从轨迹系列开始就很喜欢 Falcom 的游戏,虽然主要玩 RPG 风格的轨迹系列,对于动作 RPG 风格的伊苏系列不是非常感冒,但是也玩过好几部。自从塞尔达入了 ARPG 的坑之后,对于传统的回合制和刷怪练级就有点成见了,所以反倒开始偏好伊苏了,这一部从画质和操控上自然都不如塞尔达好,但是故事上确是更丰富(当然塞尔达的故事几乎是零……),总之我很喜欢。后来我还买了(并且费了很大的劲才买到了日文版)评价很高的《八方旅人》,备受好评的战斗系统我似乎没有 get 到它比其他的回合制好玩很多倍的感觉,故事上在并没有特别吸引我或者是太慢热的情况下还要按轮次去循环八个角色互相基本没有任何关系的故事的推进,总之反正我现在对他处于无限期搁置中。《异度神剑2》是近期才买的游戏,战斗系统一开始觉得很无聊,稍微上手一点之后发现似乎比普通的 ARPG 更加复杂呢;画面很漂亮,剧情动画也做得很细致,总之目前还在很初期,不知道会不会玩通关呢。另外还买了《洛克人 11》和朋友送我的《overcooked 2》都还没有拆封过。为什么今年买游戏的量这么多呢?因为我常去吃的餐馆旁边有个游戏店😐。哦,对了我还在房东家的 XBox 上买了《Dragon Ball FighterZ》,应该是我期待了很久的游戏,从最初看到的试玩视频就迷上了,因为龙珠作为童年的重要组成部分,其动画片的画质和音质都糟糕到让我无法入眼,这个游戏的画面完美吊打动画。可惜的是买来之后大概只玩了两三次,主要的原因可能是 XBox 太反人类了,开机起来先等两个小时下载安装个更新包,然后每次玩游戏还要用那个手柄输入密码登录,并且账户还是和你的什么 outlook 账户是同一个,所以不好随便搞个 123 的密码。年末的时候听到古剑 3,也还挺有兴趣的,但是好像需要配置比较高的 PC 才能跑得起来,没有热忱到专门为它去置办一个设备的地步于是就作罢。年末最后几天的时候还玩了一个 iOS 上非常精致的游戏《Florence》,整个游戏时长大概就半小时左右,但是很多地方都触动人心呢。

最后的最后,摄影方面也许也可以提一下,工作开始领工资以后自然就没忍住烧了点设备,但是其实拍照比去年少多了,所以技术上没有任何进步,只是(在学习绘画的透视的时候顺便)终于搞清楚了镜头的焦距产生的效果并不是简单的放大缩小之类的一些知识。总之我主要感兴趣拍的东西还是接近人文方面,由于没有怎么出去旅行,而南湾这里且不说“文”,有时候在街上能找到个“人”都比较难。当然其实我以前也很少在波士顿街头去拍,总觉得美国街头惹人还是有点怕被打哈哈。

生活在湾区

在写这一篇年度总结的时候我不断地审视自己这一年的心态,看到了自己对搬到湾区的新生活的强烈的抗拒,自己在过去的这一年中一直把这种抗拒感归因为湾区的生活条件在客观上的贫乏,但是回顾的时候开始怀疑是否也掺杂了我对旧生活的不舍;不论其原因究竟更多是客观还是主观,年末几天终于做了一个 resolution 明年开始至少要从主观上努力去接受和发现这里的新生活。

其实去年的新年愿望——“成为能够独立开车的人”也是因为搬到湾区来才变得必须的。回看这个愿望能够实现有点理所当然,因为似乎开车真的就是多开开慢慢就熟练了(或者说胆子变大了),但是其实我花了很大的力气的。一开始不敢上高速,特别是不敢一个人开车,因为碰到各种突发状况都很紧张怕会不知道怎么解决,也没有人帮忙看后面有没有车能不能换道,或者临时变更一下路线或者目的地等等(那阵子大概是我一年中最希望告别单身的时间段了😂)。我想初学开车的人应该都能理解副驾如果坐了一个老司机,即使一句话都不说也会让人安心很多倍。所以刚开始的时候经常周末拉了小伙伴们开去周围的地方玩,就当练车。买车选车也很麻烦,问了很多人,看了网上的各种 survey(选车的主要 criterion 是要够安静),而且我还人肉统计了公司地下停车场里不同车的数量。不过所有人都说一定要去现场试驾才有体会,但是我特别抗拒,因为我怕 dealer 一眼就能看穿我根本不会开车然后狠狠宰我或者不卖给我,亦或者是更糟糕的是试驾的时候把车撞坏了,更何况网上各种帖子都把 dealer 说成十恶不赦老奸巨猾的人,我很怕跟他们说话。总之最后我也没有去试驾,并且费了很大劲想让 dealer 把车送到我家未果,被迫要去那边取车,搞完一切手续之后 dealer 站在路边很礼貌地准备目送我开走。我捣鼓了半天才把车窗摇下来,告诉他,你可以先进屋去,我还得在这停一会儿查一下路线(其实是为了熟悉一下方向盘刹车啥的,手刹怎么用,换挡怎么换,再做一下心理建设)再开走。总之一开始上下班不敢走高速,每天都会被人滴,心惊胆战,觉得“刚才似乎又差点酿成大祸”,这样持续了一两个月之后才慢慢适应了高速。现在虽然能独当一面地开车了,但是其实时不时会做“刹车怎么踩都没有作用”的噩梦呢。。。

总之像湾区这种为车而建设的城市(虽然湾区应该还称不上是城市)我非常不喜欢。出行前就得担心目的地是否方便停车,当然更严重的就是路上交通拥堵的问题了,高峰期的时候时间会变成两到三倍,并且在交通中开车是一件非常不愉快的事情。感觉我已经看到过很多研究报告表明不论修多少路人们都会把它们占满然后开始拥堵,以及以行人为重心优化的小区的诸多好处等等,但是美国完全是反其道而行之,感觉是点错了技能树又改不回去了。看过一些分析说美国早期汽车刚刚发展起来的时候,行业大赚,于是汽车大亨们做了两件事:⓵拿了很多钱去国会游说,通过了很多法案,排挤公共交通的发展等(现在美国的铁路系统是我去过的所有国家中最烂的,公交地铁什么的就更不用说了);⓶洗脑宣传美国的“自由”之梦,而所谓的自由就是你得要有个车,想去哪里就去那里,没有人限制得了你。总之后来汽车行业得到很大的发展,于是城市建设也自然以汽车为重心展开,公共交通和行人进一步遭到排挤,如此循环,越走越远。此外北美汽车行业的franchise system也处于很奇怪的状态,比如有法律禁止大家直接从汽车生产商买车,必须通过 dealer,而且法律还保护各种 dealer 的“势力范围”,不能随便在已经有 dealer 的情况下新开竞争的 dealer,等等……导致买车也变得很痛苦。

好像有点扯远了。加州最大的好处大概是天气好,但是长期不下雨会有点无聊,而且其实大部分时候昼夜温差很大。自然风光方面也是比较好的,(假设不考虑堵车和停车难的问题的话)周围的 hiking trail 也还不少(虽然大部分是看光秃秃的荒山,但是春天会有很多花很好看),海滩也相对比较近。所以如果周末喜欢 hiking 的话应该还挺不错的。但是文化娱乐方面就比较贫瘠了,特别是南湾,没有什么像样的博物馆,音乐、艺术、文化方面的活动也很少,感觉不到任何氛围。天一黑就死气沉沉,有些街上连昏暗的路灯都没有。每次去三番城就觉得又回到了文明社会,居然天黑了路上还有这么多人,但是去一趟三番也不容易,而且三番有些地方也脏乱得厉害,路边会有针头、排泄物之类的东西。

最让我费心的大概还是周末吃饭问题了(平时在公司吃),虽然开车之后可到达的范围会大大增加,但是湾区的餐馆排队程度好像也是一绝了。总之我在这里一年了也没有找到比较合适的周末能简单解决吃饭问题的方法,去年开始尝试的Soylent,今年也陆陆续续消耗掉了两三箱,感觉并不能吃饱,但是临时解决一下还是不错,不过我也不太敢长期吃那个东西。

当然,碰到问题的时候只抱怨而不去尝试积极寻找解决方案(大概就是我这一年对待湾区的常态)大概是最不合适的选择。想想公司有不少人选择住在三番,然后以每天单程一个多小时的 commute 上下班。更励志的是当我听到反过来的情况:住在南湾但是每天坐 Caltrain 去三番上班……哈哈。总之大概我还不会选择住到三番去,但是不妨从小事做起,首先思考一下这周末吃什么吧……(突然有点担心是不是最近太多人去休假了导致上下班都不堵车了让我突然对每天生活的美好程度有了一种虚假的信心哈哈)。

这种感动我记得
像出发的那一刻
哪一段才是永久
太多美丽的语言
不比心语的纯洁
勇敢奔向新世界

三观

本来觉得好像有很多要写,但是翻了一下去年的总结,发现许多想法去年就已经形成了,总的来说我的三观在这一年并没有太多的变化,更多的是原来的观点得到了一些加深和强化。当然对一些我以前不熟悉的事物稍微多了一点了解。比如不知道是来到湾区的缘故还是走入社会的缘故,让我感到整个社会似乎沉浸在一股势不可挡的加速前进直到毁灭的洪流之中。比如我们使用的手机之类的各种电子产品,每年都会有各种新花样和令人眼花缭乱的性能数字上的改进出来,虽然我(和许多其他人一样)现在已经变成了对紧跟技术的潮流感到非常 exciting 的人,但是这背后的原因肯定少不了各种产品厂家的铺天盖地的对“更新换代”这种概念的宣传。而各个厂商做这些事,仿佛也是因为他们也身处身不由己的洪流之中,从一个公司的角度出发,似乎唯一的目的就是不断扩张、扩张、扩张,虽然从商业的角度来说似乎很合理,但是感觉问题好像出在加粗的“唯一”二字上。相对于公司的增长速度而言,其实际的业绩似乎根本不重要。对于投资者(或者投机者)来说,这好像也很自然,但是对于各个公司自己来说,却有种不归路的感觉:公司做的越好,自然就越难在之前的基础上有所突破,但是增长缓慢下来是股市所不允许的,所以如果你在管理一个公司,似乎会面临的情况是你赚的钱越多你自己反而越焦虑。在这个没有尽头的长跑中,似乎唯一的出路就是在加速到无法掌控之后不小心绊倒路边的石头然后狠狠地摔倒,消失在前进的洪流之中。同时也会出现本来脚踏实地的做事情的公司因为和人们不切实际的增长预期不符而在股市上栽跟头的事情,亦或者是各种通过制造未来增长前景的幻想来赚钱的投机者。

把尺度缩小到个人的生活之中,类似的感觉也会时隐时现。在公司自然是要爬 ladder 的,加薪升职赚大钱,但是赚了大钱之后更多的问题就来了,有这么多钱,不去做投资,那就是每天都在大量流失呀,等你老了就只能流落街头了。那就投资吧,不同风险指数的都有,我这方面知识很贫乏,大概就听过诸如国债、比特币和相关各种币、股市还有房市之类的。比如随便在网上搜到一个三番近几年房价统计图,看起来是不是一片形势大好,不投资都是傻子?

暂且不论各种不同的投资方式各自的不确定性和风险方面的因素,就假设你的投资真的就一定是有比较高的回报的,有许多投资方式,比如买房子,其 commitment 其实是很大的,比如你真的需要花钱的时候并不一定一下子就能卖出去,特别是自己住的情况下就更麻烦;而且入坑开销要很大,可能需要贷款还贷几十年,等等。夸张一点比喻就是,你每月赚 200 块,通过拼搏奋斗,你月工资涨到了一千块,然后为了让自己的资产不至于在通货膨胀中迅速灰飞烟灭,你做了一笔很大的投资,每月要还 900 块的贷款,于是你不得不勤俭节约过上 100 块的生活,同时做着 1000 块工资的工作量,也许还要承担一些投资的不确定性的心理压力;当然你的投资是有回报的呀,未来你会有很多钱。但是然后呢?钱更多了以后时候似乎前一轮的循环会以放大的姿态再次出现。当然有人会反驳说,当你钱赚到一定程度后就可以跳出循环,开始享受生活呀;亦或者是当你有足够的钱之后就可以雇一个团队让他们去帮你管理投资就行了呀,自己就可以享受生活了。对于富豪们的私生活我不是很了解,但是真的有几个人能做到很放松吗?超巨大的跨国公司尚且会各种马失前蹄,你又能有多信任自己雇佣的投资团队帮你管理巨额的财产?又有几个人能把握好什么时候是该“赚够了”呢?也许大家总是到最后一刻才会想起来,花掉所有钱给自己打造一个全世界最豪华的病榻,躺过余生。

从大的格局来看,财富在积累、流动,技术在进步,社会在变迁……仿佛人类文明,甚至是经济、金融系统这些并不 physically 存在的“东西”具备了生命,而 individual 的人,则成为了它们成长和进化过程中的养分,在永世循环中被榨干直到死亡,同时心理上还沉浸在仿佛这是自己心之所向、自由意志的选择(好像有点像黑客帝国里的场景一样)。当然人不能总是自私地只想着自己,也许一直以来单个人的生命的存在就是没有意义,只是作为推动整个文明进展的一点点养料呢。毕竟到今天为止,似乎也没有人能好好地回答一个人到这个世界上来走一遭的本质意义或者目的究竟是什么——为推动文明进步贡献一份绵薄之力或许是一个可行的答案,但这只是一种规避问题的方式,因为你还可以问,文明的进化其目的或者意义又是什么呢?

或者再往小一点来看,以上的这些轮回,在我们开始考虑我们的下一代的时候,也许就变得更有意义了:即便我自己的终点只是在加速前进中奔向死亡,但是我的下一代无疑会从中受益——至少在他/她的成长阶段,在踏入社会进入他自己的无尽长跑之前。也许是这样吧?我并没有太仔细思考过这方面的问题,大概如果有一天我成家立业了,可能价值观上的许多东西都需要推倒重新来过。

总而言之我对于这样的社会现状不太喜欢,并且可能由于我最近正在读《约翰·克利斯朵夫》的缘故导致言辞有点夸张和激烈,但是我在行为上并不是非常偏激的一类人啦,一方面我自己从来都不会对自己的理解能力有绝对的信心——特别是每次回顾成长中总会发现过去自己的 naivety,更何况社会体系经济金融这些体系都是我不太感兴趣和非常不了解的东西;另一方面则是凡事不能太走极端嘛;再就是,我还是挺害怕“退休之后只能上街乞讨”这样的未来展望的,哈哈……

可能最重要的还是要找到自己的平衡点吧,心智可能会不断地变成熟,同时身体素质、体能等各方面却也会不断地下降,而且外部环境也在不断变化,很难讲下一次首先要面对的是经济危机呢?AI 泡沫破灭呢?还是自己的中年危机呢?而且,若真是要纯去理性地优化自己的人生,总是会回到那个很难回答的问题:你活着的目的是什么。

对感情的态度也差不多(大体上和去年一样,对自己的认知大概加深了一点)。今年脱单问题依然处在并不抗拒但是优先级很低的状态,父母的唯一要求是统一口供对更上一辈的老人们谎称我有女朋友就行。倒是热心的小伙伴们反而会比较经常跟我讨论这方面的问题或者给我介绍人认识。原本在这里写了很多自己的想法。然后间隙中玩了一个 iOS 上一个叫做《Florence》的游戏,设计得非常棒,好多场景的变化、对比,甚至只是画面上一些简单的形状、角度的改变等等,都非常能牵动人心,结束以后有种被治愈的感觉。此时再回看自己写下的对于感情的所谓理解和态度,总觉得自己原来在这方面依然如此幼稚,同时其实还在为过去没有 work out 的经历就在心底保持一种逃避和自我保护的姿态并且还找一些冠冕堂皇的理由和理论来武装自己。虽然写下的总结里许多文字其实本就是自己此时想法的一种沉淀,也许不论写什么,将来再回看都会发现其幼稚可笑之处的。但是还是忍不住删掉了,哈哈。😛

我又起飞了我是自由的随风旋转着开心唱着歌
有那么一天时间停止了才发现心自由才能快乐
在那么一天时间停住了我会知道我心是自由的

新年快乐!新的一年,希望自己能够更加勇敢和积极地去直面新的生活和变化!

2009 飘着2010 关于2011 当冬夜渐暖2012 The Moment2013 我要的幸福2014 明天的记忆2015 就是这样2016 无限大2017 风衣

封闭的内容平台

$
0
0

最近 G+ 的关闭在即,虽然 G+ 一直是个比较失败的产品,我自己对他也并没有任何好感,但是近些年每次 G 关闭一个产品,总会让人联想起 Google Reader 被关闭的事情,很是唏嘘。实际上后来也出现了不少 Google Reader 的替代品,但是时代也早已不一样了,博客内容分享的方式已经开始谢幕。博客和基于 RSS 等内容订阅的方式当然也有它的各种不足,最大的缺失就是读者与作者之间的交互,以及读者之间的讨论的支持等等。所以后来的一些社交网络平台演化,从各种不同的角度解决了这些问题,另外内容本身也更加多媒体化,增强了表现能力,所以从技术上来讲无疑是在不断的进步。

但技术进步的同时,其他方面却多少有点让人担忧。内容本身正在逐渐变成“精神毒品”类似物(比如情绪刺激很强烈、能迅速获得刺激感、上瘾,以及“抗药性”导致越来越无法满足自己等等)的问题感觉已经是众所周知了,所以今天也就不再多说这个。这个趋势对于读者的影响基本上是越来越趋向于阅读短小(比如各种微博客平台的那个内容长度)、各种感官全面刺激(比如从文字到图文、再到视频的转变趋势)、以及刷起来就停不下来,但是又越刷越空虚之类的感觉,甚至把这几个方面结合起来还有诸如“XX 分钟看完 XXX 电影”的视频内容格式(也许再加上二倍速播放?)正在变得异常火爆,再配合上根据个人偏好的定制毒品定制内容投送的逐渐成熟——我相信很多人应该都和我一样理解其中的问题,但是却仍然在 struggle 中无法做到完全免疫,我想这就是为什么应该称之为精神毒品吧。另一方面对于内容创作者产生的影响也是非常深远的,为了让毒品更有效,除了迎合趋势在内容长度、形式上进行改进之外,更多的是需要将内容本身的情绪化刺激最大化,毕竟读者们每天需要批阅的“奏章”无数,于是乎各种煽情、标题党、甚至到为了制造大新闻,各种夸张事实、混淆视听,以及完全是假新闻和故事的情况也就接踵而至了。

不过今天主要想说一下另一个话题,更多的是关于传统内容(书籍、音乐、电视电影等等)的分发平台的。这方面近些年来的主要变化一个是音乐、电影等原本就是数字化的内容的分发形式从原来的物理媒介(CD、DVD 之类的)逐渐转向 streaming 和订阅服务的形式;而书籍则逐渐开始电子化,虽然可能“逐本购买”的方式还仍然是主流,但是类似于音乐电影那样的订阅到平台,然后无限看的方式也越来越开始普及。看起来这样的趋势似乎是完美解决了出版商控制盗版的问题,又极大地方便了读者和观众,一举两得,但是实际上却有很多问题。

让我注意到可能有一些问题也是近些时间的一些生活中的小细节。例如有时候节假日同学聚会,如果有时候决定要一起看一点什么内容娱乐的话,似乎很常见的模式就是打开电视上的某一个订阅服务(比如 Netflix 之类的),然后从分类啊排行之类的地方找一个点开来看,似乎没有什么问题,甚至比原来通过有线电视那种被动接收的方式更加自由一些。但是看过几个质量比较一般的纪录片之类的内容之后,我发现一来这类服务其实在收录和选择上都不是很全,对于最好的那一部分内容,不同的服务供应商可能会有不同的一个子集,用户如果真的想要比较自由地自己选择随时能看自己想看的内容的话,可能就要同时订阅很多个不同的服务才行——在音乐上也是类似的,我对国外的 pop music 不是很熟悉,但是国内的平台似乎常见的像网易云或者 QQ 音乐之类的都会有一些歌在其中一个平台上不能听,必须要去另一个平台才行的情况。

这个问题似乎等待某个内容提供商做大,到垄断的地位之后似乎就能勉强解决?但是一方面这个可能是很难实现的,在激烈的竞争中肯定总是会有一些内容以“独家供应”的方式出现,导致用户很烦恼。并且即使真的实现了垄断,在没有了竞争之后的发展应该不会是对用户很有利的,毕竟公司的目的是最大化利益,即使在现在也会看到各个平台(YouTube、Netflix 之类的)都开始推广自己平台原创的内容,也许是为了推广品牌,也许是为了降低成本,但是不得不说这些内容的平均质量放在“所有内容”的大环境下还是比较普通的,在实现了垄断消除了竞争之后肯定只会变得更糟吧。

另一个经常碰到的小细节就是在平时聊天中提到某一个推荐的内容(电影等视频内容或者音乐之类的),经常就会有人问,这个东西在某某平台上能看吗?如果没有的话,那一般也就略过了。如果说视频和音乐已经基本上完全转型为订阅类服务了的话,阅读领域应该就算是一个比较有趣的还处在各种方式混合的阶段:实体书店和纸质书依然顽强存在的同时,电子书市场正在蓬勃发展,在形成几个比较大的封闭平台的情况下,还是以“单个购买”而不是订阅的方式为主,但同时订阅服务显然正在慢慢变成主流。在各种情形同时存在情况下就很容易进行对比,基本上就是一个从更多自由到更多限制的一个 continuous spectrum。

例如上图中的四种同样是来自亚马逊的服务依次是:实体书店、Kindle 电子书城、Kindle unlimited 订阅式服务、和 prime reading 的服务(可能是 prime 用户的附赠服务吧)。实体书当然是最开放的,从用户的角度来说没有任何限制,可以任意选择书店、出版商、和内容本身。电子书城就开始有了一些限制,一是在 A 平台购买的书只能在 A 平台内阅读,其中如果涉及到(电子墨水)阅读器等硬件设备方面的东西则问题会变得更严重;在各个平台互相各自封闭的情况下又每个平台只提供一个子集的内容则给用户造成了进一步的麻烦,可能得使用不同的阅读设备,安装很多个不同的 app,各自的阅读体验和操作方式(词典、标注、笔记、书籍整理等等)也不太一样。而 Kindle Unlimited 则是订阅式服务,好处是可以无限量阅读 Kindle Unlimited 书库内的书,坏处是只能读 Kindle Unlimited 书库里的书。虽然原则上这个服务的好坏取决于里面的藏书量和内容的好坏,以及原则上用户也可以在使用订阅服务的同时如果有找不到的书仍然通过直接单本购买的途径来购买。但是原则上和实际上似乎总有一些差距,特别是人是又懒又很容易被蝇头小利收买的一种动物,这样的订阅式服务似乎是在侵蚀我们的软肋,慢慢地改变我们的阅读习惯。

因为内容提供商的目的永远不是给用户最好的内容,而是最能赚钱(比如降低了版权等各方面成本费用的平台原创内容)、最能吸引或者让用户上瘾的内容(比如鸡汤、励志之类的),而用户一旦被锁定和限制到了平台内之后,就能通过各种手段进行潜移默化的推广,比如某些内容限时免费呀,或者有某些小的奖励机制(比如阅读和分享了某些内容就能抵一部分的订阅费用)之类的等等各种。比如国内的一些阅读平台,似乎豆瓣阅读就在极力推广平台原创内容,而微信读书则是在极力通过各种奖励机制圈用户和扩张的阶段。再配合上现在越来越精准的投放和推荐算法,有点不太愿意去考虑未来是什么样一种状况呢。

总之我觉得,音乐、视频、文字各种媒介,不论是从内容创造者的角度来说还是从内容消费者的角度来说,更加开放的平台和系统都是比封闭的系统更好的;也许只是从内容分发商的商业利益角度来说这样才是没啥好处的吧,于是整个行业就慢慢被带偏了。在学术界已经出现了各种抗争:这个圈子比较特殊的一点在于内容创造者们本身也是内容的消费者,而分发商(像 Nature、Springer 等各种期刊的出版商)则搞出了各种封闭的平台限制知识的传播(当然他们的目的大概只是为了赚钱、扩张和垄断,碰巧限制了知识的传播),导致近些年各种抗议和自发组织的 Open Access 的期刊会议层出不穷。

不知道将来是否其他媒介的内容创造者和消费者们是否也会发起运动将平台带回更加开放自由的状态呢?亦或者是当下的趋势并没有什么问题,完全是我自己想太多啦?😛

AI and Language

$
0
0

最近机器学习中各种诸如 BERT、BigGAN 之类的性能上的突破似乎都有一定的“大力出奇迹”的成分在里面,除了计算资源之外,训练数据的数量和质量都需求巨大。虽然这些进展令人振奋人心,但是往前看的话,头几年深度学习带来的 AI 狂热似乎前进开始慢下来,虽然不知道前路是会一举突破还是寒冬将至,但是相信大部分人都不会反对以当前已有的技术和模型来看,实现真正的 AI 还需要一些质的突破。当然本文并不是试图要去解答这个未来方向的问题,我也没有能力去做这样的解答,只是突然想到语言的出现似乎是人类进化史上的一件重要事件,或者甚至是最为重要的事件之一可能都不为过。然后顺势想到了一些与 AI 有所关联的东西,就想要分享一下,以下内容完全是胡思乱想的结果,并没有特别严谨的科学依据或者调研,因为我对 language、linguistics、传统 AI 等这些领域都不是特别熟悉,所以有可能会对一些非常相关的已知的结果或理论有不少遗漏的地方。

在讨论(人类)语言之前,不妨先简单回顾一下 AI 的发展历程。AI 诞生的标志性事件是 1956 年的达特茅斯会议,Marvin Minsky、John McCarthy 还有老一辈的 Claude Shannon 等人聚到一起讨论模拟智能和学习的课题,Proposal 上首次出现了 Artificial Intelligence 这个词,当然,Proposal 里写的是要立一个长达两个月,多达十人的研究小组来解决这个叫做 Artificial Intelligence 的问题。后来的事情大家都知道了,AI 经历了两次繁荣和两次寒冬,目前正借助统计学习,特别是深度学习的热度处在第三次繁荣或者说泡沫之中,相信目前大部分人都对过去的 AI 历史没有太多兴趣,这里也就不多深入了。只是有一点比较有意思的地方就是 Modern AI 和传统 AI 之间的分界线:也就是基于符号逻辑的系统和基于统计学习的系统之间的划分。这种对立在一些传统 AI 和现代 AI 都在尝试解决的课题——比如象棋、围棋、或者不同人类语言之间的自动翻译等等——上面就体现得尤为明显。

当然就目前来看,data driven 的基于统计学习的方法可以说是在各个领域全面战胜传统的基于逻辑和规则的系统。那是否就是说传统 AI 的框架一无是处呢?也许也不是。通常认为,传统 AI 是所谓的演绎 (deductive)思维方式,给定一些规则,推演出结论,最典型的例子就是所谓的三段式演绎法;另一方面,统计学习则是所谓的归纳 (inductive)思维方式,给定一系列 observation,从中总结出规律。

从这个角度来看,这两个方面基本上都是人类思维方式不可缺少的一面,似乎在 AI 研究中将两者结合起来是一个很自然的选择?——虽然究竟如何结合并不是一个容易的问题。我想早期的 AI 基于演绎逻辑是很自然的,因为逻辑思维在我们日常生活中是随处可见的,我们每时每刻都在和各种规则和决策打交道,“打雷要下雨,下雨要打伞”,“红灯停,绿灯行”……并且早期的一些问题比如象棋 AI、专家系统等等似乎都非常自然地可以套入规则加逻辑演绎的系统中。但是为什么后来这条路走不通了呢?真正原因大概方方面面非常多,我们这里拍脑袋随便讲几个:

  1. 虽然我们日常生活中很多事情都需要理性地逻辑思维来进行决策,但是可能有更多的时候是完全“自然地”、“习惯地”、或者“凭直觉地”去做的,通常的可能问题在于需要实时、大量地计算(比如“双足行走”这个到今天还是在 robotics 中并未完全解决的问题),或者是问题过于复杂,超过普通人脑的正常逻辑处理能力(比如在十几个租房选项中根据各种权衡和条件选出最优选项,最后通常就“凭直觉”选了)。总之最后需要所谓的 intuition 来辅助,这个 intuition 可能就是一个 blackbox 的 neural network。

  2. 虽然逻辑演绎非常有用,但是它所处理的对象都是抽象过的 entity,比如“红灯停”这个简单的规则,我们在实际问题中所直接接触到的并不是“红灯”和“停”这些高度抽象过的对象,而是,比如,反射光在视网膜上所成的一幅图像,以及一些可以(并不太精确地)控制汽车前进停止后退转弯的 controller 等等。目前将这些 raw signal 进行 parse 得到 abstract entity 的工作全都是基于 statistical learning 的方法最擅长的。

  3. 虽然逻辑演绎可能可以看做“智能”的重要体现,但是这里并没有很好地解决“学习”的问题,也就是如何得到这些规则的过程。如果单靠人去设计,那么不仅 scalability 很差,并且可能也称不上 AI;而从最基本的元规则出发,让系统自己去演绎,似乎有碰到搜索空间指数爆炸的情况:比如自动定理证明,虽然人用的逻辑也都是那些,但是伟大的数学家们在证明一些深刻的定理的时候似乎“如有神助”地有一些“intuition”,这是限制和缩小指数爆炸的搜索范围的关键;类似地,原则上来讲,各种perfect information game(比如象棋围棋等),给定最基本的游戏规则,AI 的逻辑演绎系统应该就能够自动找到合适的 behavior rule 来取得胜利,然而实际上,在不给任何辅助“intuition”的情况下,这样的搜索问题同样是intractable的。

似乎种种困难都指向所谓的 intuition,而 intuition 又是说不清道不明的东西,英文里的 somehow 和日文里的【何となく】都用来表达类似的意思,中文似乎没有专用的词?好像要看语境用不同的词?不过回到主题,我们在实际生活中碰到的很多“难以用简单规则形容的”所谓“intuition”,到统计学习这里,就变得简单多了。比如要用规则来描述清楚什么是“一条狗”,可能只有动物学家才能讲得清楚(而且并不一定能帮助计算机进行识别)。但是如果用统计学习的方法,只要找一堆狗的照片给计算机看,不停地告诉他,这是一条狗,这也是一条狗……,在看过很多很多很多很多只狗之后,计算机就有了自己的 intuition,并且能认识没有见过的狗了。

只是目前效果最好的做这种事情的统计学习模型(比如ResNet)所得到的它自己的 intuition 并不是非常 interpretable。我们知道这个模型能认识狗了,但是其他的各种问题都搞不清楚,比如模型是如何“习得”这种 intuition 的,为什么明明很精确的模型,把输入图像改变几个像素就能让它误认为这是一条鱼,或者是一条猫(参见 adversarial example 相关的条目,比如这个博客)?等等。但是有些事情,是不是如果我们自己都讲不清楚自己脑子里的 intuition 是怎么样的,就不要去强求别“人”了?但是毕竟这个 model 是人自己设计和构造出来的,搞不清楚怎么回事多少让人有点生气;虽然另一方面来讲,每个人也都是父母造出来的了……而我们对自己的大脑是如何运作的依然知之甚少。

总而言之,目前的主流 AI 模型都是这种基于“归纳”的统计模型(并且其中绝大部分是基于深度神经网络的)。除了认一条猫和一条狗之外,各种各样的对应关系的问题都可以尝试用这种丢给你一堆例子,让你自己去总结 intuition 的办法来解决。另一个典型的例子就是机器翻译,比如给很多很多很多很多的中文和对应的英文句子,神经网络就能“somehow”开始翻译其他的没见过的句子——现在 Google Translate 线上的系统就是这么得来的,虽然还没有达到人类的水平,但是比之前的统计模型要好了很多,而那又比更之前的基于规则的翻译系统好了很多。当然还有超越人类的情况,比如在看过了许多许多许多的眼球和对应的性别信息之后,神经网络就能以超高的精度通过眼球图像判断主人的性别了,而人类的计算机科学家和医生们即使手里拿着这个神经网络模型,也一直没太搞清楚究竟要怎么从眼球分辨性别。

总之 so far so good,统计学习特别是深度神经网络方面的进展让许多诸如围棋 AI、无人驾驶车之类的过去非常困难的问题得到解决或者看到了希望,似乎只要大步向前走,就能到达AGI的圣杯啦。但是真的是这样吗?我当然是不知道的。只是有一点可以确定的是,inductive 的统计学习框架也还是有一些难题需要解决的。一个就是刚才提到到 understanding 的问题:比较简单的统计模型通常效果不好,而效果好的复杂神经网络我们又还没搞清楚它到底是怎么工作的,这是一个复杂系统问题,我前阵子看到一个很有趣的比喻,说我们知道每个水分子的化学和物理性质,知道两个水分子之间如何作用和碰撞,但是当足够多的水分子合在一起构成一片大海的时候,我们就没法很容易地去理解整片海洋的行为了。也许当我们有足够多的计算资源(和数据)之后,智能就会自然地从神经网络中悄悄诞生,只是这样的话,可能到我们能够制造出智能机器的那一天,也依旧搞不清楚它是怎么一回事。

当然 practitioner 并不太在意 understanding 的问题。但是从实际的角度来看,目前的 AI 模型仍然有很多问题需要解决,首当其冲的就是sample complexity的问题。所谓 sample complexity,简单讲就是模型要达到指定的效果(比如认猫狗的精确度)所需要的数据量。目前的各种算法的主要问题就在于 sample complexity,虽然在一些特定的问题上效果可以达到非常好,但是通常要训练这些模型所需要的数据量是无比巨大的。虽然我们在小时候也会有大人手把手教一些基本的东西(比如照着动物图书认动物之类的),但是大体而言人类的“学习”过程并不是通过不断地观看数以万亿计的“输入”、“输出”对来达到的。当然,人类的“学习”过程并不一定就是唯一的或者最优的,所以 AI 的学习过程即使跟人不一样也不一定就是什么问题,但是目前的这种状况很快就会碰到瓶颈。

因为收集(带标签的)数据在很多 domain 下都是耗时耗力的,并且针对不同的 domain 和不同的 task 需要收集各自对应的数据,得到的模型并不是一个“general”的 AI,可以自动适应不同的 domain,即使现在在 meta-learning、multi-task learning、one-shot learning 等方面都有一些进展,但是似乎还是有很远的路要走;另一条路是reinforcement learning,像在围棋或者星际里那样,AI 可以通过不断地 self-play 来自动地搜集数据,例如最近 DeepMind 出的星际 2 的 AI 模型,就是在一周的时间内通过大量并行计算,自己和自己玩了等价于两百多年的星际争霸游戏对战得到的。这种方式对于像游戏这种可以非常高效地通过计算机进行模拟的问题也许还是比较可行的,但是任何需要和真实的物理世界 interact 才能得到反馈的任务,就没法“把一周当两百年来用了”。

在这里我觉得也许非人类的动物们的学习过程可能很多就是单纯地看例子来学习——比如我们都知道动物小时候会模仿父母的行为,在比如如果总是在喂食前摇铃的话,很多动物都会很快学会铃声和食物之间的关系。这些学习行为都挺像现在的 AI 模型的行为的。看起来对动物而言一个很大的障碍似乎是没有语言,即使父母辈拥有很多的知识和智慧,也没有办法很直接地传递给子女,因为除去基因遗传这种缓慢到可能要以万年为单位计算的传递方式之外,在动物界似乎就只能通过“演示”和基本的“奖励、惩罚”反馈来进行(挺像 imitation learning 和大部分的 reinforcement learning 的),这似乎是一个非常低效的传递知识的通道。也许如果你家的二哈学不会微积分并不是因为它脑容量不够,而是因为听不懂人话,所以学起来很慢(sample complexity 非常大),说不定你不停地给它看随机的函数式子和求导过后的式子,在两百年之后它真能学会求导呢。

在这一点上,人类的语言似乎是得天独厚的优势。究竟是人类凑巧发明了语言,还是某一些生物、生理上的 fundamental 的因素导致人类进化出了使用语言的能力,这个似乎还没有定论(不过应该是后者的可能性更大吧?)。一方面动物不仅没有发明出语言,并且人类科学家们做过的许多教动物语言的尝试都失败了,即使有一些猩猩学会一些基本的手语,以及几十个简单的单词的情况,但是也没法组成语法结构正确的句子。而人类语言的精华之处显然并不在词汇,而在于语法结构上,可以组合、否定,可以谈论过去、现在、将来等等。也许人类的大脑是有一些特殊的结构变化才导致我们可以学习和使用语言的,相信这是人类发展史上的一个里程碑,或者说一个临界点。不过由于语言这种东西很难留下化石之类的痕迹,所以关于语言的起源和智人的进化和发展历史之间的关系似乎还没有特别的定论。在余下的内容中我会将“语言”和“文字”这两个概念混淆起来不去特意区分。

语言究竟有多有用,也许从数学里最容易找例子,因为数学其实是一套抽象的符号语言系统,能帮我们解决很多问题。我自己小时候印象最深刻的一个例子就是上初中学习到“简易方程”的时候。因为小学数学应用题很多“弯弯绕”的题目,比如我现在在网上随便搜了一个:

三筐苹果共重 110.5 千克,如果从第一筐取出 18.6 千克,从第二筐取出 23.5 千克,从第三筐取出 20.4 千克,则三筐所剩的苹果重量相同,原来三筐苹果各有多少千克?

够绕吧?可以试一试不用方程,直接求出结果。但是当学习到方程之后,这个题目瞬间变得 trivial 了:110.5 = (x + 18.6) + (x + 23.5) + (x + 20.4),得到 x = 16。此时再解小学数学应用题简直就是降维打击。

语言的出现对人类文明、社会等各方面的影响肯定是无比深远的。我现在还没有看过 linguistics 相关的书,所以只能先忽略讲一些我能想到的用途:

  1. 交流:最基本的作用,简单来说就是将知识(或者任意的“想法”)传递给另一个人。demonstration 和 imitation 可能是效率最低下的方式;语言是一个不错的传递方式;更高级的物种可能可以使用更直接的传递方式,比如类似心灵感应,直接将自己大脑中的某一部分 activation 传输给另一个个体,而不需要先 encode 成语言,再经过对方 decode 和 interpret。也许未来的 AI 会有这种能力,就像不同的电脑之间复制文件一样,但是可行性也有一些值得怀疑。因为似乎还不知道不同的人或者 AI 大脑运行的“系统”的 raw representation 是否是互相 compatible 的,比如我们可以想象成两个人分别是运行 Windows 系统和 Linux 系统的两台机器(或者甚至还有 32 / 64 位、small / big endian 等方面的差异),所以虽然两个系统都有各自的高效的二进制格式用来存储程序和内容,但是当要进行信息交换的时候,即便有一个直连通道可以直接进行数据复制,一个系统上的内容拷贝到另一个系统也是无法正确解析的。特别是有多个不同的系统要能够互相进行通信和交流的话,就需要一个公共的消息承载格式,比如互联网上常见的 XML 和 JSON 这类的东西其实就是起到了类似的用途,它们没有各自系统上的二进制格式那么高效,但是这个公共的格式使得所有的系统之间可以正常的交流,而将内部二进制内容 encode 成 XML / JSON 的过程就类似于我们将自己的想法组织成语言,然后对方 decode XML / JSON 的过程则类似于人类在阅读或者听到语言文字时大脑进行的理解和解释。虽然具体还未知,但是我想足够复杂的生命体个体之间应该会有一定程度的“二进制”不兼容性,所以可能这样的 encode / decode 过程总是需要的,只是所用的消息共享格式可能并不一定需要是我们人类使用的线性文字语言,或者通过声音、图像等方式作为媒介等等,也许可以统称为“脑电波直接通信”。
  2. 辅助思考:我们的思维能力一定程度受限于我们可以使用的语言,这应该是一个还比较常见的说法。刚才说的数学应用题算是一个辅助思考的例子。大致来说,就是即使我们不用语言来和别人交流,而只是想要有效地组织自己大脑里的想法,语言也是非常重要的。比如各种语言里都有的一个 feature 是所谓的“条件”或者“假设”,可以让我们对事情的发展进行假想的推演。这里有一个很重要的例子,就是所谓的Theory of Mind (ToM),就是说人不仅会对自己的心理状态进行建模,并且会对身边的人的心理状态进行建模,并能通过这些模型来将行为、欲望、信念、知识等进行综合和归因。虽然“子非鱼,安知鱼之乐”,但是我们其实是一直在不停地对身边的个体进行“建模”的,我们能够感受到比如“他觉得这个会议很无聊”、“她觉得这个菜很好吃”,等等,并且,我们有能力形成这样的概念:我(通过刚才打开冰箱看了一下)知道冰箱里的布丁已经被谁吃光了(事实状态),但是我(通过观察其行为进行建模和推断)知道我室友并不知道布丁已经没有了。我的大脑里现在出现了两个 mindset,其中一个认为冰箱里已经没有布丁了(我自己),而另一个认为冰箱里还有布丁(室友的模型),人类的大脑能同时运行这样的两个(当然其实是更多个)mental state 的存在,并且能推演各自 state 下的行为等等。更加厉害的是我们还可以有高阶的 theory of mind,比如我知道你不知道我知道你偷吃了我的布丁,等等……喜欢玩狼人杀的同学应该可以想出更多更复杂和形象的例子来。目前关于非人的动物是否真正具有 theory of mind 尚有争议,虽然我也并没有具体的逻辑可以论证,但是总感觉 ToM,特别是高阶的 ToM 应该是需要语言的支撑才能得以存在的。
  3. 社会构建:信任、制衡、协作等等,如果没有语言来描述各种法律、道德、金融系统,人类复杂的分工协作社会结构应该是没有办法构建起来的,科学也没有办法发展和进步了。

总而言之,中心思想就是:语言非常有用。特别是我们人类在教自己的小孩学习新的知识的时候,以及甚至可能小孩自己在日常经历中学习为人处世的道理的时候,语言应该都起到了非常重要的作用。其中有很大一部分是帮助我们进行逻辑演绎。这是不是说 AI 的发展要突破当前的瓶颈,也需要某种语言或者符号结构系统的出现呢?也许这意味着需要将传统 AI 里的那些逻辑符号系统和现代 AI 的基于统计的“intuition”系统结合起来?

此外,我们人类在“学习”的过程中,对于语言(和事物)的理解能力在不同的阶段也是差别非常大的。反正我自己觉得,中小学语文里的那些归纳段落大意和中心思想的题目,基本靠瞎蒙,但是长大以后,理解能力上来了,再看就非常清楚了。而且我们也都很自然地默认自己小时候(或者别的小孩)“啥都不懂”,不止是知识的广度上,小孩连最基本的逻辑思维方面似乎也各种不行。如果是内容比较艰深的书籍,让小孩死啃,即使能到倒背如流,也未必能有等他长大之后再看同一本书能理解的多。那我们在长大的过程中所经历的只是简单的经验和知识的线性积累吗?亦或者是其实也经历了一次或多次临界点,实现了“升维转变”?至少有一点清楚的是:人类成长过程中的幼年、童年、少年、青春期这些阶段并不是随便按照诸如“六十年为一甲子”之类的方式定出来的,而是因为人在这些不同的阶段在生物生理上都有明显的变化,所以才被区分开来(似乎其他哺乳类动物通常没有像人类这么多个不同的阶段),也许其中的生理变化也包括大脑里的一些 fundamental 的转变?又或者并不是生理的关系,而只是人在成长过程中对“语言”的理解能力逐渐加深,突破某个临界点之后语言就并不只是被动地接受知识的工具,而可以变成自己大脑里自己总结归纳和演绎新的知识的工具,从而实现“升维转变”?

当然,这里的“语言”已经是一个非常抽象的概念了,对于 AI 而言,也许只是某些能够高阶组合、有效表达各种复杂概念的的一种“结构”,可能 AI 的“语言”并不需要和人类的“语言”有任何相似之处,不过人类各种不同语种似乎都有一些基本的共通点(比如能表达否定,条件,能区分时态等等)。也许我们需要发展出全新的算法和模型才能让 AI 突破现在的瓶颈,又也许现在的神经网络的权重海洋中已经出现了这样的结构体了,只是我们还未能解码出来?问了太多搞不清楚答案的问题,未来如何只有拭目以待啦。欢迎大家给我推荐 Language 起源方面的资料和书籍,突然有点感兴趣了呢。

Sending AZW3 Files to Kindle

$
0
0

到了 2019 年,苹果设备之间已经能“隔空投送”文件,移动设备之间还有超声波转账之类的稀奇古怪的沟通方式,但是传输电子书到阅读器上几乎还是使用连接 USB 线拷贝这种非常原始的方法。

亚马逊的 Kindle 还允许使用所谓的 Send to Kindle,让用户把电子书文件发送到一个指定的 email 地址,然后再由服务端自动同步到 Kindle 设备上。虽然都已经做到这份上了,不禁让人疑惑为什么不做一个网页端上传按钮,但是至少不用再去翻箱倒柜找 micro USB 线了。不过 Send to Kindle 一直有个限制就是电子书格式只能是 mobi,而不支持它家更新的 AZW3 格式。发送后者的话什么都不会发生。AZW3 格式比 mobi 要高级很多,支持一部分 HTML5 和 CSS3 的子集,如果使用 mobi 文件,很多后来的 kindle 功能(比如自定义字体)都用不了。

之前要看 AZW3 格式(一般都是通过 epub 转过来的)就只有通过 USB 线拷贝到设备中,除了要接线很麻烦之外,这样的文件只存在于设备中,并不会和云端同步,比如你什么时候没有带 Kindle 设备,就没有办法通过手机上的 Kindle app 接着看几页;但是 Send to Kindle 的文档则是自动同步的。

苦恼了很久之后最近突然发现有一个解决办法,就是用 Send to Kindle 功能发送所谓的“dual mobi”格式,也就是其中既包含了旧的 mobi 格式内容,也包含了新的 AZW3 格式内容。制作方式非常简单,一般会自己转换电子书格式的童鞋应该都是calibre这个利器,在对一本书进行格式转换的时候选择 mobi 为目标格式,然后在 MOBI Output 的设置里找到 MOBI file type,这里有三个选项,old、new 和 both,选择 both,就可以得到一个 mobi 文件,用来 Send to Kindle 了。云端会根据注册设备自动选择新或者旧的格式推送到设备——当然如果是很古老的 Kindle 设备,系统本身就不支持 AWZ3 格式的话,就只能收到老的 mobi 文件了。

2019 时光小偷

$
0
0

过去像一滴汗
静静地蒸发在马路上
风吹着我跑向远方

今年加州好像特别多雨,虽然没有了滴雨的屋檐也没有看雨的廊下,但是还是仿佛会闪回到小时候。事实上我对年末假期出游的几个临时计划(虽然最后都否决了)居然都是去会有暴风雪的地方,也许在东海岸住了许多年之后潜意识里觉得在暖和的屋子里看外面风雨交加或者白雪皑皑才是一年结束的样子?也许是,也许不是。不过在 2019 年末,我可以确定的是,自己终于不再是去年那个一直怀念波士顿并对湾区心存抗拒的态度了。去年的新年愿望是“希望自己能够更加勇敢和积极地去直面新的生活和变化!”,现在回看,应该算是实现了吧,当然,是经过了许多积极努力和尝试之后的。😛

日落,于 Haleakalā National Park, Kula, Hawaii

悠游

既然是积极向上的一年,那不妨从愉快的游玩开始说吧。今年依然和去年一样,由于签证原因完全无法出美国境内,所以即使是去开会也只能选美国境内的会议,非常凄惨。虽然跃跃欲试想去的地方越来越多,但是真正能出行的次数其实很少。

大致按时间逆序来说,最近的一次出行是感恩节和小伙伴一起去夏威夷,上面那张日落的照片就是在茂宜岛的 Haleakalā国家公园拍摄的,旁边有个天文台,从海平面开上去大概要上升三千多米,开车路线非常曲折,几乎是连续不断的 180 度转弯,开起来很费劲。山上能看到山腰漂浮的云,据说当云爬上来进入山顶那一大片高地之后天气会在几分钟内巨变。本来是很适合观星的地方,但是没想到天上还有更多的云,最后能见度并没有特别好,日落之后也变得非常冷,我们也就很快回去了。

事实上整个夏威夷的行程大致可以用“冷”来描述,虽然都住在海边的度假酒店,但是总共只去沙滩躺了一小时不到。其他的时间去雪山、火山或者是浮潜,都有点冷,哈哈。为了上大岛的雪山我们还特地租了牧马人,拍了照片发给我妈,她就开始给我讲四驱怎么用,结果我们最后也没有用上四驱功能,因为开到上山的路口发现整条路已经在前一天提前关闭了,要到来年四月份才重新开放。不过在山口看了一眼那个路,我就很庆幸它关闭了,因为感觉开上去真的是心都要跳出来。

浮潜是第一次体验,呛到海水真是超咸超苦。总体来说还算不错,不过没有想象中那么惊艳,大概是 BBC 的纪录片看太多了,而且小时候看西游记大闹龙宫之后就经常想象潜水,所以对浮潜的想象期待过高了,特别是对于灰扑扑的珊瑚有点嫌弃哈哈,不过也许珊瑚群正在受到源源不断的浮潜游客的巨大威胁呢,据说光是大家身上涂的含有不同化学成分的防晒霜洗到海里之后对当地的生态平衡带来的破坏性都是相当大的。除了看鱼和海龟之外,还会看到一些带着氧气瓶深潜的人,我觉得看他们在深水里游倒蛮有意思的。另外浮潜需要出海,其实在船上往返需要的时间也挺久的,不过在船上看各种泳装的男男女女其实也是超棒的,因为我今年花了很多时间学习 anatomy,能够有这么多真实比例、各种不同姿势的免费的模型可供观察,其实是非常难得的,并且还全都是真·3D 的,跟着书上学习 anatomy 的一大问题就是大部分时间看到的都是肌肉(在标准姿势和正面视角下)的二维形状,所以在不同姿势、视角下那块肌肉会是什么样子要把握得好还是相当困难。

在岛上逛的时候还看到一棵超大的榕树(据说是美国最大),非常猎奇,看起来像是从不同地方长出的树干的树枝连接到了一起,形成了两棵树之间输血管一样的结构,整个小公园像是十几个树干手牵手形成的结界。我原本以为这是某种特殊的人工嫁接的结果,但是查了下 wikipedia 才知道这是榕树自己枝条长太长了感觉 hold 不住,于是又从中间开始往下长出根来,形成新的树干“中继站”,并且很多植物都有这种叫做气生根的现象。离开之前还去参加了一个可以看草裙舞的晚餐,本来觉得食物很一般(公司食堂水平),但是后来发现很多都是有特色的夏威夷当地食物,比如那个柴柴的猪肉原来是要在地里埋很久,再由两个壮汉挖起来,仔细避开骨头把肉慢慢剔下来。后来的草裙舞和火把表演也很棒,感觉充分体会到了夏威夷人懒散和随便凑合了事的风俗哈哈。

另一件好玩的事情是在路上看到一条路叫做 Kamehameha,本来以为是致敬龙珠中的龟波气功,结果一查发现是反过来,夏威夷有一位龟波大王(我自己乱翻译的,Wikipedia 上的翻译是卡美哈梅哈大帝),然后神龟冲击波是鸟山明的妻子提议以夏威夷王国的开创者来命名,所以是反过来致敬,哈哈,不过感觉还是龟派气功更有名啊。

九月底坐California Zephyr (加州和风号)火车横穿了美国。加州和风号历史可以追溯到两个世纪以前,从加州一直连接到芝加哥。美国的火车本来就和“高速”无缘,这个历史悠久的列车更是开得悠闲,全程两千五百英里的路程要开两天半,不过现在似乎主要是作为观光火车,有专门的一节车厢提供了全景式观景天窗,火车的运行路线也以“在白天能经过重要景点”为前提进行优化过了,途径好几个州,从加州一路往东,盐湖城、丹佛等等都是很不一样的地貌,也算是有些看头啦(忽略图中的 typo)。

California Zephyr 路线图。

N 提出这趟旅程的时候我很快就答应了,我们并没有走完全程一直到芝加哥,而是在一个我之前都没听过的州 Nebraska 的一个我之前都没听过的城市 Omaha 下车,在 Omaha 停留数日再坐飞机回来。我当时对火车途中的景色和 Omaha 这个似乎什么都没有的目的地都没有特别有兴趣,但是这样一个去一个比较远但是又不是人满为患的热门景点的 get-away 活动本身吸引了我,心里觉得至少可以尽情地看书了!

我们的行程大致如上图所示,在火车上度过了两个晚上,火车有卧铺车厢,提供厕所、淋浴、饮水之类的,还比较干净。卧铺车厢的过道很狭窄,每次经过都会想起阿婆的《东方快车谋杀案》。包厢里的座位在晚上放下组成一个床,加顶上的折叠床一共两层。窗边有小桌板和阅读灯,总体来说空间相当狭窄。

California Zephyr 包厢内部的可折叠座椅床。

两个特殊车厢分别是餐车和观光车厢。餐车在美国食物的类别下算是不错的了,吃饭一直没收钱,回来一查才知道卧铺车厢是包饭的,不过由于只有一节餐车,所以尽早去吃饭可以避免排队。吃饭的时候会被强行拼桌,有时会就会被迫 social,当然也有双方都互相无视的时候。感觉整个火车平均年龄可能是在六十岁以上,也有个别小孩和年轻人,但是大部分都是休闲老人,还有一些其他国家来乘坐这个观光火车的,有一次对面坐了一对只会讲西班牙语的夫妇,N 和他们聊起来我一个字都听不懂。

观光车也只有一节,需要抢位置,不过拥挤程度并没有想象中那么糟糕。观光车厢另一边连接的是普通(非卧铺)车厢,也有不少人,看起来似乎也有许多人把这个火车当做正常交通工具使用(中间有很多站点会停车)。中途有一大群穿着两个世纪以前服装,发型和胡子都很怪异的人上车,后来发现是阿米什人 (Amish),据说是基督新教中比较激进的一个派别,他们拒绝使用汽车、电力等现代设施,但是莫非火车又是可以使用的?

左侧的阿米什人 (Amish)。留山羊胡但剃掉了嘴边一圈的胡子。

观光车虽然窗户很大,但是除了看一看不同的地貌之外大部分时间也并没有特别可以看的,我的主要活动除了画一些 travel sketch 之外就是看书,虽然火车有点晃,会导致看书很容易累,不过总的来说还是相当惬意休闲的两天。

看风景,画画,读书。

目的地 Omaha 是一个比较有历史意义的地方,两个世纪前 Union Pacific 铁路线从这里开始修建,但现在似乎比较没落,其实城市看起来并没有想象中那么破败,downtown 甚至还有一家 Blick Art Supplies(当然去逛了一下),已经甩了南湾几条街了。但是当地人问了我们从哪里来之后都是一脸怀疑的表情,蒙谁呢?你在加州呆的好好的会来这个地方?不会是犯了什么大案来这里避风头的吧?这种表情。

当地游玩去处主要是一个比较大的动物园和一些火车相关或者火车站改造的博物馆的。总体来说是比较悠闲度过的(比如在咖啡馆看书),临走前一天碰到一家叫做 Jackson Street Booksellers 的二手书店,简直是大宝藏——是我见过的最厉害的二手书店。一般二手书店里的书都会比较混乱,且通常是以 fiction 为主的大量不知所云的书和一些大部头的画册之类的,这里文学历史工程科学哲学艺术音乐等各方面一应俱全,在那里待到关门,第二天去机场之前还专门过去又待了一上午买了一袋的书走。为什么在这么一个冷门的地方有这么厉害的书店呢?也许整个州只有这一个书店,所以把所有的书都聚集起来了无比厉害?🤣

Jackson Street Booksellers,超赞的二手书店,连厕所里也堆满了书。

五月则是因为开会去了一趟新奥尔良,几乎没有怎么玩,这可能是我若干年来开得最认真的一次会了。印象比较深刻的一个是 jazz,毕竟是发源地,刚好错过一个 jazz festival,不过还是去了当地一个很有历史(但现在应该已经游客化了)的小破木屋里听了一场表演,感觉还是很不错的;另一个是二战纪念馆,时间不太够所以没有逛完,不过感觉美国人在有些方面还是比较诚实的,比如关于中途岛战役的细节,虽然是破译了密码,但是最后战斗之所以能够胜利也完全是靠了一时运气,他们也就在博物馆里这么讲了。

紧接着新奥尔良之前是去了一趟纽约出差,实际的目的地是普林斯顿,去庆祝那边的 Brain 分部开张,大部分时间都跟同事在一起,虽然刚巧时间赶上于是去了一趟Frieze 国际现代艺术展,但是整体没有怎么认真玩(似乎我每次来纽约都是这样)。不过从湾区去纽约,真的是巨大的反差,就只是看到晚上十一点街上还很多人都会觉得异常兴奋,不过感觉如果住在城里的话晚上睡觉应该也很难找到安静的地方。我在旅行中对吃的东西关注的优先级通常是最低的,不过这次在纽约 Google office 楼下的 Chelsea Market 里有一家叫 Miznon 的吃 pita 的店,真是深得我心:柜台上放了一大筐的辣椒,客人可以免费随便拿随便吃!

在普林斯顿停留过程中的自由活动时间也比较短,这里是第二次来,印象依然是“在一个偏远地区的世外桃源”,校园不大,但是很漂亮,周围也是浓烈的大学周边的氛围,很容易就找到很棒的书店。

以上就简要概括了今年主要的 travel,其他就是一些近处的 day trip、hiking 之类的,以及进城去听音乐会之类的,事实上今年的种类增多了许多,除了交响乐之外,还有钢琴独奏、古典吉他独奏、音乐剧(第一次看音乐剧)、冰上杂技之类的。

我觉得冰上杂技还挺特别的,是太阳马戏团的一个叫做Crystal (Cirque du Soleil)的 show。原本我以为“马戏团”的话就是一群动物在台上表演,结果感觉应该归类为“杂技”更合适,冰上杂技感觉是非常棒的视觉体验,而且剧情、布景加上舞台上的投影特效结合在一起感觉是很不错的一个 show。

另一个比较特别的 day trip 是和公司同事一起去mountain biking——中文好像叫“山顶速降”?我是第一次玩,去之前一直担心有点危险,结果真挂彩了,实际上最开始组织这个活动的同事在出发前一周在别处 mountain biking 时里摔断了 collar bone,去不了了,感觉是很大一个 warning sign 😂。玩法就是找一座山(当然要找适合 mountain biking 的 trail,所以需要老手带队),先骑上去(对于平时不太锻炼的我还挺费劲的),然后再滑下来,下坡并不是公路那种很平的路,而是像平时 hiking 那种或者更坑坑洼洼起起伏伏的路况,经常有横着的大树根,大石头、坑、台阶之类的。听起来有点吓人,但是实际上似乎还好,像我这样完全没有经验的没有经过任何教学也能上手,主要原因是用的自行车比较特别,一是减震系统和刹车都非常强劲,所以对应这些路况其实都没有太大的问题,而且自行车座椅还能在前进过程中实时升起和降落,这样在上坡的时候可以升起来会比较省力,下坡的时候则降下来比较容易控制。

我出事故是在整个 trip 快要结束的时候,已经到了比较平缓的地带,警惕放松,再加上比较疲劳导致灵活性下降,在有一个树根横过的地方我的手被从自行车把手上甩了出来,然后就人和车一起冲了出去,最后我撞到一个树桩上停了下来,那一秒种的时间真的是觉得自己要挂了,因为就迎头撞过去的地方刚好有一个朝向我的树桩,最后树桩正面撞到胸口,居然没有大碍,倒是手上各处擦伤了不少地方。虽然不是什么大的伤口,但是伤疤过了好几个月才完全消去,果然成年以后身体的恢复能力也下降了许多。总体而言是比较刺激的一项运动,取决于 trail 的难度等级,危险性肯定还是有的,不过 beginner level 的话危险程度可能比滑雪还要小。当然我自己以后还会不会去玩呢?这个还有待商榷,毕竟我还是比较怕伤到手指的。

梦游

画画上今年做了非常多练习,完成了好几个持续时间较长的 project。第一个是“百头”的项目,原本是网上一个十天画百头的挑战,不过十天对我来说显然是太有挑战性了,除非我这十天不工作不做其他事情。不过最终还是画完了,主要部分是在二月十四到四月十四这两个月之间画完的,剩下几个头拖到六月才画完。下面的缩略图应该只有九十几个,是由于有几个画得实在是丑到我自己都没好意思照下来。

100-head drawing challenge.

我觉得这种训练收获还是蛮多的,更好的做法应该是 life drawing,观察三维模型或模特,并反复多次练习并改进同一个人脸造型在不同视角、光影下的样子。但是那样需要太多的耐心了,而且总有各种各样的人脸想画,所以这样堆数量也算是不错的退而求其次的练习方法啦。总体来说对于人脸的三维结构有了更多的理解,也许画得最好看的人脸跟前几年画得最好看的比没有明显差别,但是整体来讲质量更稳定了,以往应该是有更多毁到不能看的。这次主要是在一个灰褐底色的本子上画的,这样既可以用黑色画阴影,也可以加一点白色笔画高光(下图左),我应该也是第一次尝试这种带底色的本子,感觉比较好玩,不过白色的笔总体来说比较难用。而且为了能画出更平滑一点的阴影来,我也又拿起弃用多年的铅笔。

画多了以后发现如果能够掌握好人脸的三维结构,准确地将阴影和高光放到合适的位置的话,其实用乱七八糟的一团线或者抽象的几何形状堆在一起也能画出“像模像样”的人脸来(下图中)。一百个头最后一部分我是用 procreate 在 iPad 上画的(下图右),digital 不论是阴影、高光还是加颜色都方便太多了,不过能否画得好看还是主要要看基本功。

另一个长期的 project 则是 anatomy study,其实过去几年每年都有做过一些 anatomy 相关的学习,通常是看一些视频(推荐 proko 的视频),不过由于练习比较少,回头就忘记了。今年坚持了很久去临摹一本叫做《Morpho》的书,这本书原来是法文的,我最初也是在巴黎看到,由于里面的画太好看了,所以即使是看不懂的法文也买了回来,后来我发现它被翻译成了很多语言,我见到过的至少还有英日中三语的版本,所以我今年又买了一本英文版的,就照着里面的画一页一页地画。一开始并没有打算非常认真地学习每一块肌肉分别叫什么啊之类的,只是想跟着里面的漂亮的画,不过我很快就发现用带颜色的马克笔把各个肌肉分别涂成不同的颜色是一件好玩的事情,并且能够帮助学习,于是就顺便把肌肉的名字标上。由于对于绘画来说只需要掌握在身体表面能看得到形状的肌肉,所以比医学上要简单一些,但是特别是四肢这种可以在空间中四处移动的结构,在不同的角度和方向下都要搞清楚哪个是哪块肌肉还挺困难的,我觉得支撑我一直继续这个 project 的主要动力来源还是因为 morpho 这本书里的画都非常漂亮,今年大概完成了三分之二(一共 320 页左右,目前跟到 220 页),明年如果不因为什么事情耽搁的话应该能完成。

Anatomy study, following the book《morpho》.

书里有一部分图会标出每块肌肉的 id,但是也有很多图没有标,所以都涂颜色的话有时候就得自己清楚哪里和哪里是不同的肌肉,算是一个不错的复习,不过有时候也会不太清楚是怎么一回事,我会用一个叫做Complete Anatomy的 app 来做参考,这个 app 里能够看到完整的 3D 人体结构,分层查看骨骼、肌肉的形状、连接、甚至是运动之类的。它的主要 target 应该是医学学生,感觉整体还是很好用的,只是模型只有站立一个姿势,而不能摆出不同的造型看在各种情况下各个肌肉都是什么样子的,不过每一块肌肉 isolate 出来之后可以看与它相关的运动,也算是有一点帮助了。期待以后 Augmented Reality 发展到成熟之后在艺术和艺术教学方面的应用会跟着成熟起来,感觉潜力很大,特别是在学习的时候,看到一张二维的参考图和能看到一个真 3D 的参考差别还是相当大的,到目前为止学习绘画的人想要得到 3D 的参考都还是只能去参加有艺术模特在现场的 life drawing,其实湾区也有 life drawing 的 session,只是都是在周中,交通极其不便,所以一次都没有去过。另外我还买了几个实体的模型,一个全身人像(一半皮肤,一半肌肉),一个肌肉人头和一个骷髅头。目前用得相对比较少,主要原因也是因为是固定的模型无法摆出不同的姿势来,不过之后如果要做光影方面的学习也许会更有用吧。

第三个比较大的 project 则是Inktober——在十一月的每一天根据一个预先定好的单词为主题画一幅画,分享到网上,由于大部分人都是使用官方的主题列表,所以会看到不同的 artist 对于每个单词的解读,非常有意思。去年是费了很大的劲完整画完了整个 inktober,最后累得半死。今年长了点心眼,尽量不要画结构或者细节太复杂的画,最后除了由于突然的重感冒病倒一周多之外其它天的内容基本上都完成了,而且 N 也在一起画,对我起到了一定的督促作用。今年其实也做了一个新的尝试,之前在紀伊國屋書店买过一本纯黑的 sketchbook,就趁 Inktober 尝试了一下:用铅笔打上简单草稿,然后用白笔来画,要点是不要对形状进行描边,而是 focus 在色块,特别注意 negative space。由于黑白对比鲜明,画出来的效果看起来很不错,不过其实画起来是一件很费劲的事情,主要原因是白色的笔不是很好用,特别是涂大面积白色块的时候简直累死,这些问题当然用 digital 来画的话都可以轻易解决了,但是为什么我还要一直用纸笔来画呢?我也不知道应该如何解释,从逻辑上反正是解释不通的。

samples of my inktober drawings.

第四个可能算不上 project 吧,就是电影的 scene study,这个我去年也有做,主要是 digitally 做一些 value 或者 composition study,今年则主要是在 sketchbook 上,用针管笔和 marker 来画,现在回想一下似乎主要的两个原因是:自己当时在看一个虽然剧情比较一般但是服装、战斗、布景各方面都很赞的古装片《将夜》,很多场景都想画下来;再就是自己终于比较顺利地入了 marker 的坑,之前尝试过好几次,一直都用 copic 的 marker,除了比较贵之外对于纸张非常挑剔,大部分纸一画上去就会透好几页,但是现在我发现用 Tombow 的 marker 的话,即使在很普通的 sketchbook 上画也不太会透过去,变成了一个快速加点颜色点缀的好选择(前面提到的 anatomy sketch 也是用 tombow 的 marker 上色的)。

今年继续在关注公司的 drawing 课,新开了一门叫做 Visual Journalism 的课,就修了一下,其实上完我也还没有完全 get 到课的主要 point。老师会带着我们到不同的现场:街上、咖啡馆、音乐会现场、或者是大屏幕放映一部电影、一个演讲之类的,然后让我们在这些情况下 sketch,sketch 的目的并不是 illustration,也就是说目标并不是要美观好看,而是做记录,不止是对于眼前的人和物的外观进行描绘,还包括文字记录,亦可以运用自己的想象力和各种抽象符号等等对现场的氛围、音乐、情绪等做刻画——这一方面是我尤其没有能很好地理解的。我看老师有时还会画一些超大的拟声词,感觉有点像漫画里的那种感觉。总之我觉得还是蛮好玩的,我自己似乎还是主要限制于去 capture 人物的姿势、动作之类的。

我的 visual journalism sketchbook。

课程结束的时候老师把我们所有人的最后一幅画合在一起做了一个zine,第一次见到了复印机的强大,在不使用电脑进行页面设置和排版的情况下,直接通过复印机的复杂设置加上巧妙的纸张排布,最后居然做出了正确的对页小书。实际上今年我自己也做了一个 zine,还去参加了一下在 Foster City 的 ComicArts Fest,那里有很多人在摆摊卖自己的 zine,一般就是 5 美元左右,下图是我在那里收集到的一些 zine 和小画(左图左上和右下是我自己的 zine 的两个不同的页)。原本我以为这是一个互相交换 zine 的 meetup,结果没想到主要还是摆摊位卖和交流,我把自己的 zine 给别人的时候有时候对方会询问我是想要交换 zine 还是怎样,后来我就直接花钱买别人的 zine,结账之后再拿出自己的送给人家。总之有点略尴尬啦。年末在三番还有一个更大的 Zine Fest我就没有去了。

今年在公司的绘画课只上了 Visual Journalism 这一门,因为后面似乎没有其他课可以上了,每学期开的课几乎都是重复的,drawing 方面的课基本上除了初级的 Drawing I 之外基本上我也都上过了,反复去上同一个课似乎也比较奇怪,painting 方面的课好像主要是油画,也没有太大的兴趣,因为油画比丙烯麻烦太多了。今年我正儿八经的 traditional media 整体画的就比较少,大概有两幅水彩和两幅丙烯。

除此之外,我今年还开始买一些艺术家出的画册,一方面是作为一点点支持,另外感觉临摹也是一个不错的学习方式(下图全为临摹别人的 drawing),其中有一些是正式出版的书,比如 Craig Thompson 的Carnet de VoyageIravilleCozy Days、Simon Stålenhag 的The Electric Stateダイスケリチャード水槽等,也有一些是放在个人网站上卖的用相册打印服务打印的小册子比如Raphael Lacoste的 Lignes、David Malan的人像的 sketchbook 和Paul Heaston的超广角 sketchbook 等等。

inkdrawing 的临摹练习。

今年的画画练习大部分都是用纸笔,一方面是因为我这几年已经买了太多的 sketchbook 了,brush pen、marker 甚至还有钢笔、墨水也买了不少,让我不得不使劲消耗一下这些,另一方面今年大部分都是快速练习(比如 anatomy 或者人像),所以量比较大,但是单幅可能不会画得特别仔细,如果在 iPad 上画,虽然 Procreate 之类的 app 的绘画体验很好,但是对文档管理的功能支持还是相当弱的,强迫症如我基本上无法容忍我的 folder 打开全是一堆乱七八糟的 sketch,所以……不过其实我也有用 iPad 画过一些。主要是一些静物和风景的练习,我还特地买了一个小的折叠凳子可以到外面去坐着画,但用的次数也不多,因为后来发现 iPad 的屏幕在室外,特别是阳光直射的情况下亮度还是不太能达到能正常使用的程度。

另外就是一些零星的 figure study,一些是电影里的场景,一些是网上看到的图片。之前我经常为了找画画的素材(特别是人像、肖像等)而比较烦恼,今年我发现其实 Pinterest 是一个很不错的素材网站,并且你收藏了喜欢的参考素材之后它还会不停地给你推荐风格相似的图片,很容易就收集起来一个很大的 collection,虽然都是网上的照片,质量参差不齐,但是作为绘画参考本来大部分时候都不需要有很高的分辨率,也不会 care 有水印啊之类的。虽然到一定程度之后推荐的新图的重复性还是蛮大的,但是整体来说算是一个很不错的素材源啦。

钢琴上今年除了继续每天一小时的练琴计划之外,还有一些小小的变化。第一则是在搬家之后,因为没有了室友,不用担心打扰的问题,于是就不用戴着耳机练琴了,这样对于我练琴的时候的心情改善很大,因为戴耳机会让耳鸣变严重。第二则是换了钢琴老师,之前是在外面找的老师周末需要开车去老师家上课,今年开始注册到了公司的钢琴课,直接可以在公司的琴房上课,非常方便。老师是东欧人(第一次跟外国老师上课),非常严厉,经常批评某些著名钢琴家(比如郎朗或者王羽佳只有技术缺乏理解啥的),可想而知对我的批评更是不会手下留情,并且他还会很夸张地模仿我的错误的动作或者姿势,一开始觉得还是相当伤自尊心的,不过后来也慢慢习惯了,有些人的性格就是那样子,除去这个之外,感觉他上课还是挺不错的,会比较讲究 interpretation,还有音乐的结构,以及更细节的手腕的动作之类的。去年钢琴应该处于比较瓶颈的阶段,今年算是有所突破吧,至少可以说突破了去年的瓶颈哈哈,虽然到后半年又碰到新的瓶颈的感觉。总之今年没有再用 599 之类的练习曲了,而是直接弹完整的曲目,包括海顿、巴赫、萧邦、莫扎特、舒伯特之类的都有弹过,虽然都是其中最最简单的曲子,但是同时也都是完整的曲子,其中有一些谱超过十页,所以对于正常曲目的结构之类的也开始有了一些了解,不过乐理知识还是处于半吊子状态,特别是虽然对一些理论有基本了解,但是在键盘上各个和弦甚至是音阶都不够熟悉,所以导致我的乐理知识并没有达到能够实用的状态,老师经常会很生气并且很疑惑,比如说这里明明就是一个 V 到 I,为什么你要犹豫那么一半天,还要加一个错音进来。并且经常如果一个曲子练完之后老师就要让我当场开始视奏下一个还没看过的曲子,即使是非常非常慢的速度,我也没有办法视奏,因为思路会手忙脚乱,老师就会显得非常崩溃,感觉快要撞墙自尽了。总之我其实每次去上课压力都挺大的,不过每个 Quarter 有重新选老师的机会我都还继续在现在的老师这里上课,大概也是因为我觉得其实自己收获也是不少吧。

其实我今年也为练习视奏做过许多不同的尝试,比如有一个 app 可以提供 read ahead 的界面,就是在你弹当前小节的时候把这个小节的乐谱给 mask 掉,强迫你养成提前看好当前小节的音乐,并且在弹的时候去看下一小节的谱的习惯。但是感觉我在演奏(也就是在键盘上找到对应的键)和识谱(认出来下一小节分别是一些什么音,按照什么样的顺序、节奏排列的等等)这两个 task 同时进行时经常大脑会打架,于是就会卡主。另外我也有尝试过用一些旋律简单的赞美诗 (Hymn) 曲集来练习,总之也许和去年相比还是有进步的,只是还没有达到能符合老师的要求能够直接(慢速)双手视奏的程度。

今年练过的曲目里比较喜欢的几个有莫扎特的奏鸣曲K. 545、萧邦的 Polonaise in g minor(据说是他 7 岁写的曲子)和Prelude in c minor。不过并没有录任何曲子下来,因为老师似乎是想让我接触尽量多不同的音乐,而且也不是以 recital 为目的,所以每个曲子基本上练到 get 到曲子的音乐感觉,比较难的地方技术上过关了,整个能弹下来就会开始练习下一个曲目,所以基本上每个曲子都还是有一些小细节会磕磕绊绊一下,自己也就不想录音了。明年希望视奏上有所突破哈。

神游

今年看书的数量比去年又增加了一些,总共 63 本:包括中文书 23 本、英文书 33 本和日文书 8 本。此外还粗糙地听了三本有声书。下面的插图中会展示每个月看的书的封面图,大致按照喜欢顺序排序,然后和去年一样我会按照(全局排序)喜好程度给出简要介绍。

今年看书量增多的原因应该一个是睡前开始避免看 iPad,以前通常会看 coursera、schoolism 上的视频,或者甚至刷一刷 YouTube,今年为了改善睡眠质量改成看书了;另一方面周末也会经常去周围的咖啡厅或者图书馆看书,并且我发现湾区周围的公共图书馆都可以免费办图书卡,一个是Santa Clara County Library系统旗下有很多处不同的图书馆(比如 Los Altos、Cupertino 等等),都能通用借书和还书,另外还有一个是Mountain View Public Library虽然不在 SCCL 系统里,但是它的图书馆就在 Mountain View Down Town,并且有一个移动图书车会在每周三开到公司楼下,可以去借书,公司楼里也有还书的 dropbox,非常方便。公共图书馆虽然不如学校的图书馆那么好,特别是稍微专业一点的书就很难找了,但是稍微大众一点的书其实都还是蛮全并且蛮及时更新的,比如各种 best seller 的 nonfiction,包括一些科普读物都很容易找到,特别是可能由于湾区华人比较多的缘故,各个图书馆都有一部分中文书(虽然大部分是台湾版的),从小说到漫画还有非虚构类都能找到。此外图书馆现在都有电子书借阅服务,可以通过一个叫做Libby的 app 借出,然后直接发送到 Kindle 上看。

总之虽然我没有仔细统计,但是我估计今年看的书有三分之一来自图书馆。果然有还书的 deadline,相比自己买的书来说,还是会更积极一点看啊。电子墨水阅读器方面除了已经有的用来看英文书的 kindle、用来看中文书(多看阅读和豆瓣阅读)的博阅 Likebook Mars 之外,又添置了一个 Kobo Forma 用来看日文书,毕竟是日本乐天出品,果然日文查词功能比其他的都好用很多倍,不过主要也是其他的平台都太弱了,动词只要不是原型就查不出来的词典基本上也是形同虚设了。此外 Kobo 还能通过 Overdrive 直接从图书馆借书(现在有了 Libby 之后 Kindle 也能直接从图书馆借于是就没有了这个优势),以及和 Dropbox 集成也很方便。不过阅读器的选词、highlight 这方面的功能和 Kindle 相比还是有相当的差距。之所以要用几个 device 并且还要都是不同型号的设备,主要原因还是各大电子书厂商都进行区域锁定(对于电子书平台的吐槽真是三天三夜都吐不完),导致没有办法用同一个账号在不同国家的电子书商店买书(即使像亚马逊或者 Kobo 原本就有多国书店的平台),所以只有用多个设备,并且如果需要偶尔在手机上接力看书的话,由于手机上不能安装同一个 app 的多份拷贝(好同时登陆不同语言的账号),所以最后就只好使用不同厂商的平台了。一脸无奈……还好我现在看实体书越来越多了,所以怨气也没有那么重了。

另外一些看书相关的物件:一个舒服的椅子似乎对于缓解由于不正确的坐姿造成的腰部、肩部、颈部疲劳等有很好的效果,当然椅子舒不舒服是一个很 personal 的事情,每个人身形不一样结果也会不同。我自己尝试过最舒服的还是 Herman Miller 的Eames Lounge Chair,坐下去感觉就陷入云里,当时在店里尝试的时候唯一的椅子上坐了一个人,我围着他转了好几圈,他终于让了出来,说,“我已经在这里坐了半小时了。”不过这个椅子接近六千美元的价位(我当时尝试是 Tall 版本比较舒服,Standard 对我来说有点小)确实有点贵,这是一个很经典的椅子,所以网上也有各种各样的山寨产品,价格从几百到一千多的都有,但是那样就没法在店里试,质量就参差不齐,尺寸各方面也不一定是一致的,能否买到适合的就完全看运气了。总之最后我还是没有做这个投资,而是在宜家买了一个两百块的POÄNG,我觉得坐着也挺舒服的,而且设计也还蛮好看,当然垫子的质量肯定就和 Eames 那个相差很远,坐久了之后有点紧。另一个是 bookstand,之前没有尝试过,都是拿在手里或者直接把书摆在桌子上看,尝试过之后发现用一个 bookstand 把书斜着立起来看真是对脖子的放松太有效果了。最后是做笔记用的贴纸,我以前很喜欢在书上写很多东西,但是上大学之后变得不喜欢在书里写写画画了,所以如果要做笔记或者 highlight 之类的就得另外想办法。如果是比较专业的书需要一直记笔记的话,就用另外的笔记本记录就可以了,但是如果是普通的书偶尔需要 highlight 一部分的话,再专门去找笔记本就比较麻烦,我通常会拍一张照片然后事后整理,另外就是我找到一个post-it 的硬贴纸非常好用,可以贴在书的对应地方,事后如果想要清理的话,撕下来也不会把书弄坏,或者留在书上也可以,看起来还蛮好看的。

✦✦✦✦✦✦六星推荐:

  • The Order of Time:很新的一本关于时间的科普,在图书车无意中翻到,借出来才发现纽约时报 2018 年十佳 nonfiction 之一。感觉比《第一推动丛书》那一系列比较老的书讲得更简洁明了,并且包括了一些物理学的最新的进展,在某种程度上有点点解决了一直以来的一些疑惑:为什么熵是增加的,以及为什么宇宙一开始是低熵的状态。熵增加是按照从“有序”到“无序”的变化来定义的,但是什么是“有序”而什么是“无序”实际上是由我们自己来“定义”的,比如一摞扑克牌,如果牌面的数值没有按顺序排列,我们认为是“乱序”状态,但是如果不看“牌面数值”,而是看每张牌的其他属性呢?比如“每张牌某个固定位置的某大小区域里的原子数目”之类的,总之可以想象任意给一个“乱序”扑克牌,都可以找出某个“奇怪”的属性使得这一堆扑克牌在这个属性之下是有序的,因此熵增加的方向感(时间流动的方向感)其实是我们自己与物理世界的交互带来的一种“错觉”。虽然我们所选择的参照系具有能形成完整的“物理系统”的特殊性,但是就好像生命可能并不只能以碳链的形式存在一样,也许还有其他许多种不同的物理系统的存在形式。不过最终似乎这套理论还并没有被很完备地建立完成的样子。

  • Why We Sleep: Unlocking the Power of Sleep and Dreams:非常有用也比较有意思的一本书,向所有读者群推荐(NY Times Bestseller)。书以一个问题开始:我们(虫鱼鸟兽一切动物)为什么要睡觉?为什么生物经过这么漫长的进化,还一直保留着睡觉这个看起来会极大降低存活率(比如睡着了很容易被偷袭)的机制?水里需要不停游动的鱼类,或者需要跨洋级别长期飞行的鸟类都各自进化出了一些像一次只睡半边脑之类的 workaround 也无法完全避开睡觉,究竟是为什么?当然书并没有给出答案的完整刻画,因为完整的刻画应该还是生物研究中的谜题之一,但是书给出了一个很重要的定性答案:睡觉并不(仅仅)是一种休息(比如,像电脑休眠那样,机能停止运行),而是一种 development——跟你吃饭长身体、上课长知识、闯荡江湖长人生阅历同等重要的一个环节。因此这是一个非常复杂的生理过程,所以靠酒精或者药物之类的麻醉神经等方式强行进入昏睡状态并不能有效地起到真正睡眠所起的作用。打个比方就好比每天晚上你的电脑或者手机要进入维护模式,进行磁盘碎片整理(memory 的转移和索引),安装固件更新漏洞补丁(增强免疫系统功能)之类的,喝醉昏睡过去大概就等价于强行拔掉电源——虽然两种情况电脑都黑屏了,但是第二天重启的时候立刻就会知道区别很大。而熬夜晚睡则相当于长期运行内存效率低下、没有补丁的“裸奔”系统。

    整本书内容还是比较多的,详细讲了很多睡眠方面研究的进展和结论,包括睡觉的不同阶段的作用,做梦是怎么回事,以及如何改善睡眠等等。总之感觉现在人类对自己的睡眠的了解还是比较初级的阶段,但是至少我们现在已经开始知道了规律和充足的睡眠的重要性。

    总之强烈推荐看一下这本书,如果这本书有中文翻译的话我肯定立刻推荐给父母看了。我觉得这本书对我今年的关于睡眠的生活习惯影响很大,并且在改善今年的睡眠质量上起到了重要的作用。当然不要期望能在书里找到“三分钟入睡如死猪”之类的绝招,因为这样的办法似乎还并不存在,书里只是提供了一些建议改善睡眠质量,至于最主要的部分还是解释睡眠的重要性,让我们开始更加认真地去看待这个问题。我在豆瓣有写过一篇比较详细一点的书评

  • The Selected Works of T.S. Spivet: A Novel是一本非常有趣的小说,讲一个制图少年的一段冒险之旅,结局稍微有点仓促,不过我觉得这本书的重点大概不在于结局,甚至不在于这段冒险的历程,最有趣的部分倒是在于从一个十二岁少年(并且是一个很 nerdy 的十二岁少年)的视角和思维看各种事物,心里暖暖的,仿佛又回到了童年哈哈。并且排版非常精美(Penguin Books 的版本),每一页的精美插图、边注的位置都是专门排布过的,简直爱不释手。从这一本书开始变成 Penguin Books 出版社的粉丝,特别是Penguin Classics系列简直都是颜值爆棚。

  • The Book of Why - the New Science of Cause and Effect:图灵奖得主关于 causality 的一本厚厚的科普读物。中心主题就是 causality,大家应该都知道 correlation 并不等价于 causality,整个因果的概念对于人来说也非常自然,这也许是因为我们的意识和大脑其实就是基于这样的基本概念来运作的。但是有点意外的是,根据书里对 causality 的严格化描述的发展历史来看,人们是在最近一二十年才真正把 causality 相关的概念严格地定义出来并发展出了相关的数学工具进行演算和推理,并且这个过程似乎由于受到传统统计学“数据为王”,“correlation 为根本”的思想的无情打压和排挤,显得异常艰辛和漫长。我觉得强 AI 如果要实现的话肯定缺少不了 causality 这一环,不过要学习目前 causality 相关的理论和技术是得去看专业的书籍和论文,这本书更多的是科普,故事,和历史,当然,是很不错的一本科普,不过确实有点厚,例子也有点多,读了好久才读完。

  • The Sense of Style — the thinking person’s guide to writing in the 21st century:由语言学家和认知心理学家写的(英文)style guide,感觉比较适合理性派思维的人阅读。并不是无端列举一大堆写作规则和建议,而是有组织地讲解行文、段落和句子的结构,最重要的是所有分析都有从语言、逻辑、心理学等方面的道理可循。特别是书前半部分感觉可以抽空再仔细读一下做一些笔记,后面部分关于一些具体用词、标点之类的就有点琐碎了。原本是为了改善自己的 academic writing skill 来读的,自己觉得收获不少,但是真正 improve 还是得需要多多练习写作吧。

  • The Rise and Fall of the Dinosaurs:非常正经的书,严谨但不失趣味。并不是简单的吸引眼球的“恐龙神秘趣闻大合集”,所有的论述和历史推断都有相应的科学证据加以支持。“恐龙”这个词的定义只是历史原因,并不是因为恐龙就比其前身的那些古龙类有了革命性的进化。相比起来二叠纪的全球大灭绝之后开始出现的恐龙的先辈们才是一次重大突破,比如从“爬行”开始变成“(四脚)站立”行走。

    以往的印象(甚至一些科学著作)都是恐龙是三叠纪中“神选物种”,不论从速度,敏捷,新陈代谢,智商等各方面都碾压其它物种。但是最新研究表明那个年代有很多恐龙和非恐龙在身体和生活形态上各方面都很类似(究竟是哪一方在模仿另一方呢?),并且非恐龙类的生物即使在三叠纪晚期不论从数量,种类还是多样性上都完胜恐龙。三叠纪晚期古大陆开始分裂,板块漂移产生的超大规模火山喷发以及一系列严重的后续气候变化导致另一次大规模物种灭绝。但是恐龙反而在这个时期数量和多样性都反而增加,最终度过难关进入侏罗纪。其背后的原因,是目前考古学中一大迷题。进入侏罗纪之后由于其它物种基本上都死光了,恐龙开始迅速增长,变得巨大和多样化,走向统治世界之路。有些蜥脚类恐龙变得甚至比鲸鱼甚至播音 737 更大更重(比如无畏龙)。至于恐龙是如何冲击进化的极限长到那么大的,则是考古学中的另一大迷题。

    讲到恐龙开始征服天空的时候,真是有一种非常热血的进化的史诗的感觉。原来现在的鸟类是大灾变之后残存下来的飞翔的恐龙的后裔这件事情曾经长期被争论不休直到二十世纪末才慢慢在各种新的化石被发现之后达成共识。并且越来越多的证据似乎都表明羽毛和翅膀最初开始出现都不是为了飞行的作用。最后就是白垩纪终结的恐龙大灭绝了。原来彗星(或者小行星)撞击地球并不是随便杜撰的,各种岩层的研究都提供了间接的证据,并且年代符合的巨大陨石坑也在墨西哥找到了。看到这里总是不停想起《伊苏 8:达娜的隕涕日》里的画面。然后又不禁唏嘘,人类只存在了这么短一点点的时间,遥远的未来究竟会是怎样呢?

    感觉看 Natural History 或者宇宙相关的书的好处是会让人瞬间认识到人类的渺小,以及在日常生活中让我们焦虑和烦恼的那些事都是多小的事情,然后就会比较看得开了。😃

  • Seven Brief Lessons on Physics:超小的一本书,对得起标题中的“极简”,简直可以站在书店把它看完,不过还是买回来了。封面很好看,内容短小精干不拖沓但是也并不空洞。六章分别讲相对论,量子物理,大尺度(宇宙学)和小尺度(基本粒子)的物理,空间,以及热力学与时间,最后一章感觉不太物理,不过也挺有趣,特别是里面关于自由意志的部分,因为“万物都按照物理规律自然运转”和“我们拥有自由意志”之间似乎一直有矛盾存在,即便有量子不确定性也难以调和,我感觉作者的观点是“自由意志”是存在的,只是并不是“我们自己”的自由意志,而是有一个更上层的大脑里的物理、化学、生物各方面的系统,这个系统的自由意志是指这个系统所控制的实体(我们)的行为是可以由这个系统的内部状态决定的(相对于我们所处的外部物理环境而言);另一方面我们的“自我意识”也是这个系统的某一种片面的“显现”,或者是这个系统所产生的 consciousness 对系统本身的(不全面)的认知。所以我们的行为和我们的意识互相之间并不是对立矛盾关系,而是都由同一个第三方产生。

✦✦✦✦✦五星好评:

  • 那不勒斯四部曲:广受好评被翻译成很多种语言的一个四部曲小说,讲述两个女人之间从童年一直到老年的故事。前不久 HBO 刚刚翻拍了第一部小说,拍得也很好,后续应该会陆续出来。从文学性上来说小说写得非常棒,整个几十年的跨度,不仅从人物性格、成长的角度上进行了细致的刻画,时代和社会的变迁(比如从通信到电话再到电子邮件)也是让人仿佛在看一部跨越时间长河的电影,很容易跟自己成长过程中所经历的时代变迁联系起来,形成一种强化的真实感。另外文中对“我”的心理活动的描述也是无比细致,我感觉以前从来没有能如此近距离地了解过另一个人的内心活动。至于小说的内容本身,可能前两部让我比较有共鸣的感觉,因为那不勒斯那个年代城区一角的生活真是跟中国乡村小城镇的生活太像了,仿佛是在回忆童年。

  • 金色梦乡:根据肯尼迪刺杀事件改编的一个小说,伊坂幸太郎这个叙事方式非常奇特,有点像先来了一次(从不同角度的)剧情梗概,然后再开始慢慢展开,不过因为是基于有名的历史事件,所以这样大概反而可以对读者的背景知识进行 calibrate,并且展开的过程中本书的一个主题也会逐渐体现出来:事情的表面,或者说大众媒体喜欢大肆渲染和报道的东西可能和真正发生的情况相去甚远;还有就是剧情展开过程中一些看似无关的细节、铺垫和人物逐渐关联起来就是会引起很大的阅读快感啊。

  • The Hitchhiker’s Guide to the Galaxy:轻松搞笑科幻,大概是所有科幻中地球毁灭得最搞笑的一次了吧,看的过程中经常笑出声来,但是作者无时无刻地抖机灵,最终结果就是如果达到审美疲劳的阈值估计就会觉得这本书很无聊,还未达到的读者就会觉得很有趣,还好书比较薄,所以感觉程度刚刚好,但是得知这本书还有后面好几本的时候就没有特别想读的兴趣了(至少是在短时间内)。

  • We Have No Idea:17 年新出的一本面相大众的物理科普书,似乎是《The Phd Comics》的作者写的,所以里面有不少漫画插图,以及无穷无尽的冷笑话。另外主要的话题是提出问题(有哪些物理中的基本问题我们还是毫无头绪的),而不侧重于对我们已经知道的内容做很详尽的介绍,所以读起来更加轻松愉快一点。看完真是觉得,人类的科技还真的是处在婴幼儿阶段啊。

  • The Weather Machine:一直很好奇,现在毛毛多的天气预报 app,都号称自己更准确,但是天气预报这个应该是需要极其昂贵的卫星和超级计算机才能做的事情,所以其实大部分 app 背后都是从同一个信息源抓取预测信息吧?以前并没有仔细想过这些数据追根溯源应该是政府机构,甚至是国际性的合作机构所提供的。

    这本书横向描述了全球合作性的天气预报网络系统的构成和运作方式,纵向讲了天气预报系统的起源和发展。很难想象天气预报这样已经是生活中不可缺少的一部分的东西,其发展是极其近代的事情。就连二十世纪上半叶,计算机也还没有发展出来,无法进行大规模微分方程数字计算和模拟,人造卫星也还没有发展出来,天气数据的采集和观测都还比较手动也原始。其实在电报发明之前,即使有最完美的数据收集,也没有办法比云或雨跑得更快地把数据传输到一个中央处理局进行整合;或者说即使有最完美的预测,也没有办法及时地把预测分发传递出去,所以天气预报是很近才发展起来的这件事情大概也并不是那么出人意料了。

    不过这本书在细节上并没有讲得非常具体,尤其是对于现代天气预报中所用的气候模拟系统是怎么一回事几乎没有阐述(想象一下也感觉估计不是很容易能理解和解释的),换句话说,这并不是一本描述技术细节的书,而更像是传记类或者 documentary 一类的读物。

  • The Disordered Mind:Eric Kandel 的新书,总结了一下脑科学、认知科学、神经科学、精神分析等领域在相关的疾病(自闭症、精神分裂、失忆、帕金森、PTSD、老年痴呆等)诊断、治疗等方面的进展,以及通过这些疾病相关的研究和数据对我们对自己大脑认知所带来的帮助。感觉过去一百年在生物学、神经科学这些方面真的有很多进展,许多原本认为是“精神”或者“意志”、“环境影响”等因素导致的状况都渐渐找到了基因的遗传或者变异导致的生理因素影响,在神经科学、认知科学等的基础之上,精神分析似乎也可以变得更加严格和科学。不过总体来说感觉各种“精神”相关的疾病很多都还只是可以在一定程度上“控制”症状的阶段,离治愈还很远,并且很多控制方法都非常简单粗暴,比如直接干扰某种神经信号的传播,或者使用能够增加或减少某种神经元中的大分子的药物等等,各种副作用超强。真正要说治疗,一是要完全理解基因、大脑的运作,二还得要有足够精细的工具能够对其控制、修改,只能说是前路漫漫。作为暂时的局外人,看下来最重要的 take home message 是:锻炼身体能够防止或者推迟老年痴呆的说法原来是有科学依据的,好好锻炼身体吧!

  • David Downton - portraits of the world’s most stylish women:英国著名时尚插画师大卫唐顿的作品集,确实很好看,最重要的是几乎都是寥寥几笔勾勒出形状和光影,整个就跃然纸上,有一些模特有绘画过程的照片,可以看出来和模特本人的相似程度也非常高。不过不要看到寥寥几笔就觉得不愧是大师,轻松加愉快,书里附带的访谈里提到唐顿他并不是在现场完成作画的,现场主要是画草图,抓重点,并且和模特聊天抓住对方特性之类的,他还会拍参考照片,回去之后会画一二十张练习图,最后找到满意的结果之后才通过光板把最终版本画下来。所以,心想着乱画几笔就能成大作果然还是非常不现实的。

  • Asterios Polyp:第一次看欧漫,故事上是讲一个中年危机中的建筑师在被雷劈房子烧了之后放飞自我由此引发的一系列故事(以及和回忆线的交织叙述)。感觉书最出彩的地方在于其呈现方式,各方面都经过非常精巧的设计,比如不同的颜色明显有各自的寓意,不同的人会有不同的符号化的画风,连对话气泡里说的话所用的字体也都有所区别;在两人开始深入交流的时候,颜色和画风就开始互相渗透。另外还有许多精巧的伏笔,我想如果再重看应该会发现更多,但是这个书的巧妙之处在于伏笔和呼应都设置得恰到好处,并没有啰啰嗦嗦地不停重复和说明,让你一看就是在铺垫伏笔,但是又刚好能让你记住一些小细节,并在合适的地方 resolve,说不定还会给一些惊喜。

  • Pen and Ink Drawing: a simple guide:封面看起来有点像烂大街的绘画教学书,实际上是非常赞,专门针对墨水笔(笔触无深浅,主要靠排线等方式来表达颜色深浅)这一大类笔的绘画做一些基本的讲解和练习(几种主要的笔触、如何有效地表达三维结构、材质等等)。因为我一直以来都对墨水笔绘画非常喜欢(由于随身随时都能找出一支墨水笔来,画起来很方便,习惯之后就很顺手了),所以感觉通过书里系统地整理一些墨水笔绘画方式的一些基本技术很有帮助。

  • The Artist’s Complete Guide to Drawing the Head:应该是我看过的最受用的一本教画人像的书了。觉得画人像除了最基本的比例要正确之外,最重要的两点这本书都讲到:一是如何通过阴影的形状和 hard/soft edge 来模拟三维 form;二是要了解脸部的简易 anatomy 结构(这样特别是在观察照片之类的二维 reference 的时候知道应该着重去看哪里)。不过结构部分内容还是有点少,可能得再找一些其他参考。

  • Bad Blood:前阵子的惊天医疗创业诈骗(巅峰时期估值一百亿美元)事件的始末,虽然从调查结果整体而来,但是书非常易读,引人入胜,主要是故事太惊掉下巴了,称为现实版的《权力的游戏》真是不为过啊,惊心动魄……

    看到 Elizabeth 一句话开除 CFO 的时候,突然意识到现代商业世界确实和过去的战场没有太大的区别(除了没有硝烟和血不会流到明面上来之外)。比如战场上比的是谁力气大武功高武器先进,商场上比的是谁钱多策略好善于经营或者有技术壁垒以及有钱请豪华律师团队搞垮对手之类的;过去厉害的人占了地盘就能称王称帝,在自己的范围内随便乱搞,可以铲除异己,任人唯亲,世袭罔替,也可以认认真真治国,兢兢业业经营,又或者是搞一些民主制,联邦制之类的,再有国家内部的斗争和国家之间的冲突等等,感觉这些都能在现代商业里找到对应的类似物。不过为啥我锻炼身体然后把你痛揍一顿就犯法,但是我多多挣钱在商业上把你搞垮就是正当的?并且从这个书里讲的事情来看商战里出现的各种下三滥手段比战争中也是有过之无不及。似乎 bar 在于是通过直接的手段来做某一件事还是通过间接迂回的手段来做某一件事?

    不过有一点让人觉得 positive 的是,那些复杂的官僚体系和 regulation 看来还是很有作用的啊。另外对新闻媒体也多少找回了一点点信任。事情还没有结局,看了下 wikipedia,虽然事件基本上在 2016 年就水落石出了,但似乎目前最严重的审理结果只是由 SEC 起诉导致的创始人十年内不得在公开公司中担任高管,罚款 50 万美元和故事中出现的那些数字比起来简直就是笑话。最重的审判结果有可能导致坐牢的案件则还在审理中。

  • 死者代言人:安德的游戏三部曲得结局。画风突变,不过也许三部中我是最喜欢的一部。世界观,立意,和探讨的问题(几个文明程度不一的智能物种究竟要如何相处)都更和我胃口一点。不过在细节(特别是人物之间的关系和人物本身的刻画)上相对还是比较弱一点,甚至有些地方还有点牵强。比如安德究竟跟那个外星生物科学家有什么感情基础??简看中米罗的地方具体又在于哪里?死者代言人的魅力似乎也主要靠其他人的傲慢无知才能衬托,等等。剧情方面比如皮波和利波被猪仔种到土里的原因感觉也有点牵强。

  • 安德的游戏:2016 年的时候看过,今年看三部曲的其它书时重看了一下。感觉这本书最后一章关于人类和虫族的交流这个点题的内容虽然是全书的中心,但是感觉出现得有点太突兀了,如果能在前面的章节中再多添加一些伏笔和铺垫,应该会好很多。

  • Why Only Us:感觉相当难读的一本书(也许是写作风格的缘故),应该算是乔姆斯基学派的一个比较新(2016)的观点总结吧。感觉中心思想是语言的本质以及其进化出来的原因并不是为了交流(比如像《人类简史》里“语言发展出来是用来八卦的”这类的观点),而是作为大脑内部组织思维的一种工具。所有人类的语言存在一个统一的内核 Universal Grammer (UG),由语言相关的基因决定,而世界各地产生出来的各种语言都是相同的 UG 在 externalization 的时候的 variation 导致的;因此人类的发声系统或者听觉系统的特殊构造都和语言的产生并没有很本质的关系。比如我们在朗诵文本或者跟人说话的同时做其他比较需要动脑子的事情会比较吃力,再比如聋哑人社区在经过一定时间之后会自然地发展出一套完整的手势语言,亦即另一套 externalization 的方式,反过来人类的近亲猩猩即使经过大量训练也无法学会语法结构完整的手势语言(参见 Project Nim),并且有一些研究表明他们并没有像人类那样的“词汇”概念,比如”苹果“对它们来说可能会是“在这里吃苹果”、“傍晚用刀削苹果”之类的复合意思。

    因为是讲语言进化的书,前面部分有挺大的篇幅在讲 general 的进化方面的内容,书里说之所以现在比较适合来写这个课题,一方面是 UG 相关的理论在多年的进化之后终于变得足够简单和信服了,另一方面则是进化相关的研究进展。书里说人类语言进化的一个关键事件是进化出一个叫做 merge 的操作,使得我们能够 mentally 递归地构造无限的结构。

    最后,乔姆斯基流派的观点对语言学影响深远,但是并不一定就是绝对正确的观点,也不是领域内唯一的观点,实际上,书里有一个观点是说,我们想要了解一个东西的进化过程,必须先要搞清楚这个东西到底是怎么回事(比如动物眼睛的构造和工作原理我们基本上是搞清楚了的),但是对于语言来说这个问题还是巨大的未解之谜,不只是语言的“计算”,就是最基本的“词汇”功能——大脑的记忆模块如何对这些东西进行存储和检索等等,都是完全没有搞清楚的。书的标题《Why Only Us》是什么意思呢?感觉比较相关的还是讲进化的时候提到的一段,为什么生物起源之后多达数百亿个物种中,只有一种发展出了语言的能力(或者说,高级智能)呢?有两种可能性比较大的解释:1. 语言并不是自然选择所偏好的东西(相比比如像视觉之类的在地球上生存很有用的功能),地球上大部分生物都没有语言或者高级智能,但是发展得好好的;2. 语言进化是一个极难做到的事情,从 computation 的角度来说,把“进化”看成一个 stochastic optimization 的话,语言可以当做是一个 computational intractably 的问题。至于为什么我们刚好有了语言和高级智能了,那大概就纯属运气吧?

  • 九州·旅人·怀人:界明城与四月相遇相识的故事,之前就看过很多遍了。

  • 来自新世界():2015 年看过改编动画,最近刚好看完《美丽新世界》,在图书馆偶然看到《来自新世界》的台版翻译就借出来看了。《来自》应该是借鉴或者说致敬了《美丽》,其反乌托邦的设定,未来人类的洗脑式的严格教育和管理,以及对“未开化”原始人种的圈养治理等等。不过应该不同之处是比相似之处多的,本书篇幅要长很多,算是科幻类,但是尤其是上部讲孩童时候的故事颇有种轻小说的既视感,后面画风急转,情节也变得紧张和黑暗,结尾有点小,但也还不至于归为烂尾。书里涉及和讨论的问题很多,结局处主角们又开始培养不净猫,我想大概最无奈的一个议题还是社会的最优形态吧,无奈之处在于书中在经历了灾难性的事件之后大家开始冷静和反思,但是最后的结论还是回到起点。虽然设定是基于奇幻的咒力,但是实际上其实是非常现实的科技发展过程中单体个人所能造成的破坏性越来越大的问题,甚至贫富或者科技差异在未来被放大到足够多倍之后也许也会变得像书中的人种之间的差异一样。不过书中并没有提出解决方案也无可厚非,毕竟这是一本引人思考的小说,而不是一部社会问题的解决方案论述。

  • 九州缥缈录(1-6):等了很久的《缥缈录》电视剧终于开播,结果异常失望,于是又复习了一下这几本书。缥缈录的故事如果能把后面几位英雄的成长全部写完,把所有坑都填上,应该是一部很喜欢的书,就目前这六本只见挖坑不见填的状况,让人觉得有点后劲不足吧。不过还是不错的书啦。

  • ポム・プリゾニエール:基本没有什么剧情的漫画,不过作者似乎主要就是想画裸女,猫和废墟,然后用一些小片段故事串联起来。不过鶴田謙二(回忆爱玛侬的作者)的画风确实很喜欢,虽然没有什么剧情,但是慵懒的人和猫的日常生活中的各种小动作小细节都刻画得很细腻,惟妙惟肖。

  • The Ghost Brigades:有种太空大战的背景下的刀枪肉搏的感觉,涉及好多不同的互相敌对的智慧种族,不过都只描绘了一些局部战斗,感觉比较适合较低的成本拍成电影。比较喜欢里面的世界观设定里关于 consciousness 的部分,虽然感觉作者对于“program”和“data”的理解是不是有点颠倒过来。故事对克隆人与原来的人之间的关系也做了探讨。多人共享感官和深度意识交流的“集成”状态感觉很好玩。世界观中其它外星人的社会形态也花了心思。至于小说内容本身,剧情有些平铺直叙,紧张起伏相对较小,人物性格刻画也没有特别生动,关于女主甚至还有好多地方讲得不清不楚,不过遗漏的细节和没有交代的伏笔也许是因为这只是系列书(《老人战争》系列)中的一本的缘故?

  • Brave New World:非常发人深省的关于未来世界乌托邦的一种可能性的展示。就故事性来说个人觉得并没有特别吸引人,但是乌托邦世界的构思很让人不舒服:人们被通过基因和洗脑等各种方式培育成属于不同阶级的人各司其职,和《1984》所描述的那种重压下的社会不同,美丽新世界里的未来世界社会安定祥和,没有争斗与痛苦,作为交换人们失去了”自由意志”。但是是否自由就一定会伴随着差异化,冲突,矛盾,灾难…?若从社会整体的角度来说,也许冲突和矛盾才是不断进步的动力源;但是从个体的角度来说,人又追求的是什么呢?最大化快乐,满足或者刺激?似乎从生理的角度来说很容易做到?不论是书中所描述的洗脑,亦或者是《娱乐至死》中描述的那种泛滥的“精神鸦片”,从客观的角度来说,人是变得更“快乐”了,但是这是人们所追求的吗?如若不是,人所求又为何物?感觉很不愿意看到书中的描述变成人类社会的最终形态,但是若要讲一讲取而代之什么才是更加合适的理想状态呢,却又很难说出来。也许人的存在本无法承载太多的意义吧!

    一方面来讲现代社会里诸如修改教科书,或者社交媒体大规模精准定制洗脑的事情似乎也屡见不鲜了,但是另一方面只要世界上还有不同的国家之间互相制衡大概就还不会真正完全变成 Huxley 所描述的美丽新世界中的那个样子吧,毕竟那意味着社会乃至于科学发展都会进入仿佛是静止一般的永恒的死循环中。但是不得不说 1932 年写出这样的书来证实太有前瞻性了。

    不过排名没有很高的主要原因是从文学性的角度来说感觉没有《1984》之类的那么好看。

  • The Wisdom of Wolves:National Geographics 出品,围绕两位作者在爱达荷州郊外的保护区与一个狼群共同生活六年的经历展开,讲述了他们观察到的狼群的生活。有点惊讶的是,(书中说)整个人类社会对狼的认知绝大部分都只是建立在毫无根据的神话、童话故事(中坏蛋大灰狼的形象)的基础上,目前世界上还有很多地方都在继续合法对狼进行猎杀和捕杀。书的章节组织比较松散,有点像散文(而不是科学报告),其中描写的许多行为都和人类很相似。比如狼和人类一样都极具好奇心和探索精神,和人一样很早就在全球范围各处都留下踪迹。它们喜欢玩耍(突然想起来好多年没玩过丢手绢之类的游戏了),重视家庭和领地,会认真照料小狼崽(和狮子不一样的地方在于,它们不会杀害非亲身的狼崽,而是同样会细心抚养),有狼群纪律,会互相合作——很多部分是后天习得的,比如在失去经验丰富的头狼之后,很多狼群会很快衰败。还有一些 observation 描写得更加拟人,比如狼伴侣和朋友之间的 binding,狼对于死去同伴的悼念等等,虽然几乎只能靠猜测,甚至可能是作者自己的感情投射,不过我觉得狼具有复杂情感应该也并不是很不可思议的事情。

    不过,尤其是这几年看了许多 BBC 新出的关于自然界的纪录片,才慢慢意识到我们对于各种动物的了解都多么限制在莫名其妙形成的各种 stereotype 中,也许书中描写的事情,其实对于许多其他的生物也是一样地适用吧。所以,虽然看到狼的生存条件收到人类巨大威胁的情况时不时有些触动,但是也并没有到潸然泪下的程度,因为觉得整个自然界似乎都正在受到人类的巨大威胁,哭似乎并不能解决问题。也许唯一足够浪漫的解决方案是,人类踏上星际航行的远征,将地球作为永远的故乡留给自然界的其他芸芸众生。

  • 安妮日记:粗略地看了一下,以为十四岁少女的日记,各种念念碎加多愁善感有时甚至有些无病呻吟,但偶尔又有一些深刻的言论和思考,总体来说感觉跟自己初中时期写的日记差不多(当然我自己可能只有前者,而没有深刻的思考)。不过这本日记的特殊之处在于他是出自二战期间收迫害的以为犹太小女孩之手,当时他们大约两家八人左右为了避难隐藏在一个阁楼密室里一步不出数年,每天物资匮乏还要担惊受怕,实在是难以想象的生活。总之其实事件背景比日记内容本身沉重得多,不过这也就是说即使在最黑暗的时刻,人也还是可是保持自己独立的内心吧。

  • Portrait Sculpting:有点想玩黏土 sculpting 但是感觉很难而且需要很厉害的工作室。不过买这本书主要是作为人像绘画的学习和参考的,讲解如何用一块块黏土构建人脸各个部分的的时候确实对人脸的三维结构理解有挺多帮助,另外完成图的照片也是不错的参考素材。除此之外,讲解表情的那一节介绍了各种表情时候典型的肌肉运动,以及脸部的三维变化(哪里要加一坨黏土,哪里要挖掉一块),感觉挺有用;再就是如果一直不知道如何画头发的话,看雕塑的时候如何建模头发应该也能得到很多启发了(总之头发也是有三维结构的,而不是单纯一根根线)。

  • よつばと!:故事有点无厘头的漫画,风格和《日常》有点像,比较轻松愉悦,但是不太适合一次看太多否则会比较腻,目前只看了第一本。

  • Bridgman’s Life Drawing:比较古老的一本书,把人体结构简化成方块来画,配图歪歪扭扭的好处是跟着临摹的时候不会觉得自己画得(相比参考图来说)好难看哈哈哈。跟着画完才知道这是一本在许多地方都备受推崇的书,似乎作者的 sketch 看似歪歪扭扭,但是其实每一个歪扭的地方都有很精确的解剖学缘由,总之 Bridgman 的书都被奉为经典,主要的问题是他基本上只画但是不做讲解,所以必须要自己已经对解剖学理解相当深刻了再反过来看才能比较看得懂。

  • 窥视欧洲:妹尾河童游历欧洲的见闻画册,主要是各地的城堡,便宜旅馆,火车车厢,列车员等的描绘和对比。作者的 line drawing 虽然没有强烈的明暗对比,但是仔细看还是蛮有味道的,透视画得非常好,观察也非常仔细(比如各国列车员工作服上分别有多少个纽扣)而且描绘的是上世纪七十年代的事情,除了看到历史的味道之外,因为作者把各种价格都写出来了,也可以看到物价的变迁。住遍了世界各地的便宜旅馆和阁楼的河童,居然在三番被一个 2.5 美元一晚的酒店吓破胆,哈哈真是太形象了。总体来说是一本轻松的见闻画册,没有特别深刻和具体的内容啦,作者还有其他各种“窥视”系列的书籍。

    引用书里一句话:“用相机拍完时,会有种「据为己有」的感觉;但事实上,这常常只是种错觉。”

  • 安德的影子:可能是安德的游戏三部曲中最不喜欢的一部吧。

✦✦✦✦✧中规中矩:

  • 不存在的骑士:一个荒诞的,充满想象力还带一些讽刺意味的小说,查理大帝和他手下的一些骑士的故事。总之故事看着蛮好玩的,虽然我没有太看懂中心思想是什么。

  • 銃夢:今年很火的电影战斗天使阿丽塔的原著漫画。赛博朋克和各种机甲的描绘都很美,特别是在上世纪九十年代的背景下,可能是比较有先驱意义的一部作品吧。但是叙事上有点糟糕,不管是情感铺垫还是情节走向感觉都比较没有头绪,若隐若现地铺设出很大世界观的影子,但是直到最后一本才终于草草地讲出来,结尾也比较淡。总之算是一部主看画面的漫画吧。

  • Letters from an astrophysicist:罗斯地球和空间中心的主任收到的信件和邮件(他有数年间有公开的电子邮件地址)和他的回信的选集。五花八门什么都有,时不时有一些很有意思的或者很有同感的小片段。没有特别喜欢,但是也并不难看,不过我觉得这算是一本老少皆宜的书,毕竟是一本通信选集,而且本身通信的对象就是各个年龄段和各种背景的人都有。

    很多来信是关于外星人,飞碟,宗教信仰和科学的冲突,上帝存在性等等个方面的询问或者争论的。感觉看作者如何不带感情色彩,以一种尊重对方的态度但又毫不退让地为科学做辩护,还是挺有趣的一件事情。有些内容感觉正常情况下持双方观点的人要么根本谈不到一块儿去,要么直接吵得面红耳赤。作者的观点是,重要的并不是人“知道”或者“相信”哪些事(宗教上的或者是科学上的),而是学会如何思考,当你懂得提出合适的问题并且如何逻辑合理地去寻找或者验证答案的时候,在面对科学和众多不同的宗教信仰各自 claim 的“事实”面前就不会觉得真伪难辨了。

  • Jane Eyre:中学的时候就尝试读但没看完的世界名著。文学性本身而言可以是满分了,细节上文字优美、华丽,但又没有显得特别浮夸和造作,英文版读起来需要的词汇量挺大(至少算今年看的书词汇量要求第二大的);然后对白、心理和局部细节特写这些都做得很棒,当然有些对白有点夸张到感觉像是戏剧或者甚至歌剧里的对唱,不知那个时代背景下的人是否真的是那样对话的;最大 scale 上虽然整个故事相对比较简单,但是也很适当地增加了一些紧张感和悬疑,前后呼应算是恰到好处,后期的情绪渲染也确实感染到我了,甚至还做了噩梦。总之有种确实不愧为世界名著的感觉。

    至于故事内容本身,感觉就没有那么好了,读之前以为是讲独立女性的奋斗的,但是读完以后发现完全不是,网上有人说这是一本 yy 小说,感觉也有一定的道理吧。不过话说回来世界文学名著里描述的故事,有正面意义的似乎也不多……

  • Skin: a natural history:与皮肤有关的各种话题搜罗。有一些章还挺有意思的,比如为什么几乎所有陆地上的哺乳动物都长毛,但是人却进化出了几乎全裸的皮肤?书里的说法是大脑功耗变大,以及需要白天长距离行走等原因,所以需要更强大的散热系统。还有日照对皮肤产生的各种破坏和好处,皮肤在免疫系统中起到的作用,以及各种肤色的人种的由来和进化过程之类的。也有一些章节比较无聊甚至有点凑数的感觉,比如纹身和化妆的简史之类的。

  • 约翰·克利斯朵夫(1-3):最欣赏的是全书的结构把握,从孩童的懵懂到青年的强说愁到成年的愤青等等整个成长过程刻画得非常结构清楚,感觉是非常深厚的功底。最喜欢的一句 quote 是“克利斯朵夫回答说,人生第一应尽的责任是要让人家觉得生活可爱”,但是总体而言,克利斯朵夫的故事对我几乎没有产生什么太大的鼓舞或者什么其他方面的影响,也并没有像看《月亮与六便士》那样即便并不同意主人公的行为方式,但是会觉得那是一种难能可贵的特质。克利斯朵夫仿佛一头狂躁幼稚的野牛,也许这一方面也许反而是比较有共鸣的,毕竟自己(特别是在成长的过程中)也是有过各种幼稚、天真、自以为是、迷茫、焦躁、冲动等等各种情绪的。但若要说英雄主义、斗争这些方面,却是没有怎么体会到,特别是我认为应该最重要的强大的精神和意志力方面。恰恰相反的是,里面的人(包括主角和其他的人)仿佛都是无比脆弱的,有效的的解决办法似乎其一就是逃避;其二就是情爱发泄,去找一个人来爱一爱,男朋友、女朋友、情夫、情妇,如果实在不行,还可以找儿女来发泄父母之爱。也许是我划错重点了?也许人性本就确实是如此?又也许我现在还过于不成熟又狂妄所以没有能理解到这本书的精髓?

    总之从文学的角度来说觉得是一部伟大的作品,但是其他方面并不太合我胃口。音乐方面的描绘都比较简略,对于克里斯朵夫作为一个“音乐家”的成长这一块与他作为“人”的成长这一块比起来感觉有点单薄,当然可能文字描述起来也比较困难。再最后就是内容,或者其中的价值观本身了,它是否是客观的真实人性我难以拿捏,但并不合我胃口也没有让我产生憧憬、或者受到鼓舞,但凡会比较有共鸣的,大都是其中比较 negative 一点的一些内容,所以阅读体验也不是特别 comfortable,不过既然能左右我的情绪,也说明书确实是很好的(文学方面)。由于看之前有多个朋友推荐了,看书评里也很多诸如“影响一生”的评价,让我对其中的价值观部分有种过于不切实际的期待了,可以说当时大概觉得看完之后自己就要升华了,从此一切挫折困难都要被我踩在脚下,导致书看到快要结束都还没有出现这种升华的时候几乎是有点百无聊赖。不知道自己会不会在许多年后突然能够品味到此书里不一样的真意。

  • The Origins of Language:不是非常有趣,或者说和我的期望有点不太相符。我主要想看人类语言形成和人类的复杂思考、社会交互等相关方面的共同进化的一些探讨,虽然书中也有一些讨论,但是很大的篇幅花在其他一些比如人类听觉系统和其他灵长类的区别,人类的发声系统和其他动物的区别(最接近的灵长类由于生理结构无法发出人类语言中用的很多声音,但是更远的动物比如一些鸟类却是没问题的)等等,我觉得这些内容相对是比较次要的是因为我觉得人类要发展出语言,即使声音媒介这条路走不通,也会通过其他媒介建立起通讯通道(而且书里也提到了手势哑语的发展)。

    当然书中也有不少有趣的内容,比如在探讨人类与其他近亲灵长类的区别的时候,有讲到人类相比起来更有交流的欲望,虽然其他动物在碰到食物或者敌人等与生存息息相关的事件时也会交流,但是不太会没事说一句“看!灰机!”人类交流的欲望还来自于一种“利他”的本性——至少是在不损害自己利益的情况下,以及在一个社交群体内部,比如看到谁书包开了或者东西掉了会提醒一下对方。模仿的本领很多动物都有,但是有一种叫做 mirror neuron 的特殊神经细胞却只有在一部分动物中有明确观察到:这种神经元在自己做某件事或者观察到别人做某件事的时候都会激发。此外还有就是人类强大的记忆和信息处理能力(当然我觉得这和语言的出现也许还有一点鸡和蛋问题需要讨论)。我感觉书里谈到的很多都是语言出现的必要条件,但是却并不一定就充分概括了最本质的起因,比如很多这些条件看起来都比较容易加入到一个计算机模拟的 agent 系统中去,如果对这样的系统进行模拟,是否会观察到语言的出现呢?当然也许即使 computer agent 之间出现了自己的“语言”,我们也不一定能够理解吧?

    书里最有趣的一个问题,或者说反问就是:我们会问为什么只有人类进化出了语言?但是这其实并不是个问题,你为什么不问,为什么只有长颈鹿进化出了长脖子,为什么只有大象进化出了长鼻子?感觉有点像在说“我思故我在”了。

  • Carlson’s Guide to Landscape Painting:似乎是很经典的一本讲风景绘画书,不过就目前来看有点太古老了,最直接的缺点就是配图全都是黑白的,并且配图数量也很少,很多地方就是大段大段的文字干巴巴地讲,并且似乎是用一种当时的学术写作风格来叙述,感觉上就是叨叨话很多,重要的信息并不是简洁明了地几个 bullet point 列明,而是无缝地穿插在大段大段的叙述中,总之看起来挺累的,看完了即使觉得有收获的地方想要回去找也会超难找,现代写作风格把重点单独强烈列出来真是文明的一大进步。

  • A Single Man:某天半夜失眠想看会书又不想开灯,就在亚马逊上随便找了一本高分书到 kindle 上看。原本以为是一本正能量的书,结果翻开压抑的气息扑面而来,讲的是主人公在伴侣车祸去世之后的生活,再往后看才发现原来是讲同性恋。由于和我一开始预期的主题相去甚远所以打算弃掉的,但是渐渐被作者的文字所吸引。抛开对主题的兴趣的话,作者对于失去心爱的人之后那种心碎、悲伤和如同行尸走肉般的状态的刻画简直是跃然纸上,全篇应该并没有直接出现诸如“难过”之类的词汇,但是阅读的时候仿佛就瞬间闪回自己在人生中情绪最黑暗低落的日子。我想也许强烈的情绪张力来自于作者对于主人翁内在心理活动的生动刻画,和外在的一如既往的日常生活的描写之间形成的强烈对比。并且能够将这样一种氛围状态扩写成一整本书的篇幅而不让人觉得只是翻来覆去地在絮叨“我好难过”,感觉真的是非常厉害。觉得对于“用文字来描述情绪”感兴趣的人来说应该是一个不错的参考。

  • The Origins of Totalitarianism:讨论反犹太主义的起因和斯大林、希特勒造就的集权主义,由于对一二战期间欧洲整体历史了解太少,所以很多引用事件来论证的地方都没有看太懂,而且 Political Science 的读物每次读都觉得好考验英文阅读水平,各种大长句,导致长篇论证很容易就迷失在细节中忘记了到底要论证什么。总之到后面我几乎完全把它当做英文练习读物来读了,算是篇幅不小的一本书,感觉硬着头皮读完之后自己的英文阅读水平和速度好像都稍微上升了一点。

  • Guitar Zero - The Science of Becoming Musical at Any Age:感觉比较散,有点对不起(附)标题,作者虽然是认知心理学专家,但是关于这个主题的科学研究实在是很少,作者本人学习吉他的经历只是非常稀疏的一个 sample,也支撑不起这么大的篇幅,所以在讲自己的经历的同时书还穿插介绍各种相关的讨论和一些 anecdote,比如人类社会里有“音乐”这个东西究竟是由基因决定的还是由社会文化发展决定的;再比如学习音乐时天赋和后天练习究竟各占多少重要性,等等,算是和主题有一些关系吧,但是时常会觉得跑得有点远了,况且都是蜻蜓点水地聊聊天(因为并没有足够多的科学研究和证据能够下得了任何定论)。当然其中大量提及的各种美国歌手我都几乎没接触过,大概也是看着不是很有趣的一个原因。总之我觉得全书很切题(特别是副标题)的内容其实比较少。

  • Sargent Portrait Drawings:还不错吧,非常薄的一本小册子,收录 Sargent 的一些素描画,可以看到几种略微不同的风格。

✦✦✦✧✧三星及以下(不推荐)

  • 怦然心动的人生整理魔法:唠唠叨叨地叫你这样做那样做,然后又给一些莫名其妙的理由(比如你要抚摸你的衣服,把你身体的能量传递给他之类的),感觉有点像在看一本宗教典籍。就连比较 practical 的一些内容(比如叠衣服叠袜子的方法)也不是很有用的样子。
  • Portrait Painting Atelier:比较无聊,要么是我期待太高,总之和期待的(讲解人像的画法,比如各个器官的结构和互相之间的关系,观察画刻画的时候有哪些注意事项之类的)差别很大,实际上大量的篇幅在讲用什么颜料和什么颜料调什么颜色,怎么画 underpainting,再一层一层地上色来得到 skin tone 之类的。
  • The Calculating Stars:居然是 2018 星云奖。第一章写的很精彩,身临其境的紧张和震撼感,如果照这个势头下去也许我会给六星好评。但是第一章之后就变成了生活念念碎,感觉像是枪手代笔写的一样,只有每一章开头的新闻摘要还在继续跟进主线剧情的进展,第一章辛苦建立起来的紧张感逐渐消磨殆尽。如果想了解五十年代美国黑人和女性在工作社会上受到的歧视,以及当时人类“计算机”的情况,也许还算是相关的(暂不评价这方面描写得是否好),但是若是想看科幻……摊手,深感受骗。

除了看书的数量增加以外,今年看动漫的数量也有所回升,包括新番也有追一些。大致按照喜好程度排序有:进击的巨人第三季(第二期),吹响悠风号第一季第二季剧场版利兹与青鸟灵能百分百动物狂想曲命运之夜——天之杯II,拳愿阿修罗1 期2 期JOJO的奇妙冒险黄金之风龙的牙医一拳超人龙珠超:布罗利。巨人现在是越来越精彩了,今年漫画里也高潮迭起,虽然我没有在追漫画,但是也看到一些谈论,感觉要封神了,2009 年开始连载的第一话标题是“致两千年后的你”,一直以来有各种解读和尝试,十年之后在今年年末的时候出了一话叫做“致两千年前的你”,把一个十年前挖的坑填起来了,且不说故事情节,就仅仅是“十年的伏笔”这件事情本身就够燃爆了。有多少长期连载的故事不都是写一段编一段,即使有伏笔很多也都是后来专门去翻前面自己写的故事看看有没有可以用的线索临时造一个伏笔出来(根据《食梦者》里对漫画创作的描述),燃得我都跃跃欲试地想去翻一下自己十年前的年终总结,看有没有什么大伏笔之类的了哈哈哈。总之很期待最后一季的动画片。相比起来,一拳超人的第二季动画就很没有后劲,感觉制作水平上下降了不少,特别是在于战斗的刻画上。

吹响悠风号是音乐类型(当然也可以说是校园类型)的动画片,也是比较喜欢的,看了两季 TV 版和两个剧场版。特别是剧场版《利兹与青鸟》的画风和色彩都尤其美。TV 本身则挺大一部分在音乐上,剧情本身并不难看,但是也没有特别出彩了,当然主角的性格和她演奏的乐器之间的呼应算是一个不错的点。以前不是特别感冒但现在也了解到了一些吹奏类音乐的魅力。还有几部今年的新番,比如《心理测量者》第三季之类的,有陆陆续续在看,但是属于没有想象中好看,但是也没有难看到会直接弃掉的程度,所以进度比较慢,可能会拖到明年春天才会看完吧。

游戏方面今年玩得不多,主要的部分应该是在玩去年就开始的《异度神剑 2》,但是总体来说还是玩不太动,虽然对里面的世界(生活在云海之上,由漂浮在空中的巨兽托起的都市组成的世界)和各个种族的设计之类的都比较喜欢,但是大地图 navigate 起来很费劲,而且战斗系统吵吵闹闹地,打了不少次也都没啥感觉。总之今年也只是把剧情推进了一小部分,照这个进度也许明年就自动弃坑了(就像《八方旅人》一样)。其他的似乎都是玩的 Nintendo Switch 上的多人游戏,像《超级马里奥奥德赛》、《胡闹厨房》、《任天堂明星大乱斗》之类的。不过任天堂不论是游戏机还是游戏都做得相当好啊,并不是一味地追求画质,而是从娱乐性的角度发力,而且感觉抓住了 party game 这样一个市场,像明星大乱斗这个游戏居然可以八个人一起玩。当然不知道 party game 这个市场本身有多大了,感觉在美国的话外国人开的 party 似乎还是以聊天为主……

生活在湾区

今年在生活上可以说是适应的一年,过去一年中的不少问题都直接或者间接地得到了解决,可见认真生活的态度还是蛮重要的。

交通:如果说湾区的无聊程度是一个因人而异的主观问题的话,那么湾区拥堵的交通毫无疑问是一个客观存在的问题,给我生活带来的最大的麻烦无疑是上下班通勤问题。虽然由于距离不是很远,拥堵的时候大概 30 分钟也能到公司,但是在 traffic 中开车是一件很影响情绪和士气的事情,为了让通勤过程不那么无聊,我甚至尝试开始在车里听有声书,我发现一个叫做The Great Courses的系列还不错,在 Audible 上可以听。总的来说我并不是特别喜欢听有声书,尤其是在开车的时候,经常会因为路况之类的需要将注意力集中到其他地方,或者是一些外部噪音之类的,导致会错过一些句子;并且开始和结束通常是由开车停车之类的外部事件决定的,而不是自然地听到某一个部分。总的来说到最后就只是一些片段的粗糙理解。不过我后来觉得至少有两种类容是适合通过有声书来听的:一个是音乐类,这个干巴巴的纸质书和多媒体的内容相比实在是相差太远了,完胜;另一个是历史类,我对历史有一定的兴趣,但是过去看过的一些历史类书通常都很快就会忘光光,所以我觉得历史当做一个背景音消遣用应该不错,反正回头都忘记了,即使只听到一些片段也无所谓。总之我在通勤的过程中听完了《How to Listen to and Understand Great Music》、《The 23 Greatest Solo Piano Works》和《The Fall and Rise of China》这三本有声书。

第二个解决方案是错开高峰期通勤,早上去公司的时间由于我没法比送小孩上学的父母们更早,而去太晚又会很难在公司找到停车位,所以基本无解,但是回家的时间则有很大的自由度。去年我通常都是在公司吃完饭(6:30 供应晚饭)再晃一晃才回家,这样的问题是到家通常已经很晚了,放松和做其他事情的时间就很少了。一开始我有尝试过工作完成之后先在公司做点其他事情,最主要的就是可以去公司琴房练琴,不过由于上班高峰期一旦开始,两三个小时之内是不会缓解的,而且我在公司似乎除了练琴之外也比较难放松下来干其他的事情。于是后来就开始尝试提前回家,回家以后再稍微 work from home 一点时间把该做的事情做完。由于五点路上的交通就已经非常糟糕了,所以我有很长一阵子是四点多回家,当然这样带来了晚饭如何解决的问题,这个我会在后面专门讲。

第三个解决方案则是骑车通勤,一方面可以避免拥堵的交通,另一方面还能缓解一下缺乏锻炼的问题,所以我在今年也开始尝试骑车上班。买了一个带 Gearbox 的自行车,有点像简易版的汽车换挡系统,和常见的那种暴露在外面的变速器不一样,不会有必须在行进中才能换挡、掉链子、需要经常清理、上油之类的问题,感觉还蛮酷的。不过我对车、机械之类的也不是很感冒了。当然我原来住的地方骑车上下班稍微有点远,单程大概在 40 分钟左右,虽然有一半的路程是在封闭的自行车(和行人)的 trail 上,但是也有一半是直接在公路上骑,特别是有一个地方需要一个没有红绿灯的左转,每次都捏一把汗。在高峰期车很多的时候要过去尤其困难。另外虽然我大学的时候是骑车的,并且能够双手脱把,但是我有些姿势可能不太对,特别是停车和起步的时候我是坐在座位上的,所以车座很高的情况我都不太能骑,停车的时候基本上就摔了,而且爬坡的时候站起来骑我也不太会,于是专门花了一段时间看 YouTube 视频学习了一下这些技能。公司其实非常鼓励大家骑车上班,不仅可以免费申请租用公司自行车(由于申请人比较多,可能需要排很久的队),而且骑车上班可以打卡,每个季度用打卡获得的分数可以换一些不错的礼品。

最终的解决方案就是搬家啦,新家在离公司更近的地方,开车不需要上高速,即使在高峰期一般也不会超过 20 分钟,最关键的是骑车也只要 20 分钟,我觉得是既舒适又能得到一定程度锻炼的距离。所以搬家以后自行车的利用率立刻得到提升,目前我 lease 的汽车会在明年一月份到期,通勤问题解决以后就没有要 lease 新的车的打算了。当然湾区昼夜温差很大,冬天早上骑车其实很冷,周末出行之类的没有车也很费劲,所以最终明年会不会过上完全没有车的生活还有待商榷了。

睡眠:去年生活中另一个严重问题就是睡眠不足,虽然我晚上通常都会按时睡,但是原来住的地方是在一条比较繁忙的公路旁边,所以每天早上很早就会被吵醒,睡眠不足又会导致上班很困,喝咖啡解困又会更进一步影响晚上的睡眠质量。并且不论是噪音源本身还是由于睡眠不足间接影响,都会让我的耳鸣更严重。所以虽然在朋友家住既舒适又便宜还能时不时被爱好料理的房东投食一些很 fancy 的食物,但是最终还是决定搬家了,最主要的原因还是噪音问题。

搬家之后睡眠质量得到了很大的改善,新家虽然也靠近一条相对繁忙的道路,但是是在小区很靠里的房间,加上双层隔音玻璃,虽然离在学校时候住的地方的安静程度还差得很远,但基本上再没有在早上被车声吵醒了。当然为改善睡眠质量作出贡献的还有其他许多因素,除了消除噪音源之外,贡献最大的应该是《Why We Sleep》,看了以后对睡眠问题更加重视了,戒掉了工作日喝咖啡的习惯,周末偶尔会喝也是因为嘴馋,并且都会尽量不在中午之后喝;买了 blackout 窗帘,避免早上过早被太阳照醒;睡前一小时内开始主动避免看 iPad 或者电脑屏幕之类的,而是改成看书之类的休闲活动(难怪今年阅读量涨了很多);年末还换了 memory form 的床垫,当然这个能否改善睡眠可能还需要比较长时间的 evaluate,总体来说我觉得睡着更舒服了,但是好像散热不是那么好,偶尔会被热醒。总而言之虽然睡眠质量肯定还是比不上年轻的时候,并且偶尔也会有失眠之类的情况出现,但是跟去年相比还是改善了许多,目前基本上不会把它当成生活中的一个困扰了。🙂

睡眠 tracking 这件事情大概是有利有弊,好处在于能够有效地监控自己的睡眠质量,虽然睡不好的时候自己身体应该也会知道,但是可能不一定会很敏感,另外不少 tracking 工具都允许做 annotation,比如今天有没有喝咖啡、睡前吃很多、或者今天压力特别大之类的,这样可以在事后看哪些因素对自己睡眠质量影响比较大,另外也可以分析一些时间跨度比较大一点的睡眠质量趋势等等。反过来坏处大概就是如果比较容易焦虑的性格的话,可能看到数据上显示自己最近睡得不好,会越加焦虑吧。不过我觉得最大的问题还是在于目前市面上可用的 sleep tracker 的准确度都不是特别高,至少网上的睡眠专家们是这么说的,特别是仅仅通过手机的麦克风来检测声音、震动来估计睡眠情况,或者稍微高级一点通过 apple watch 之类的智能手表、手环上的 sensor 来检测,结果都没有办法特别准,特别是要区分深睡、浅睡、眼动期之类的不同睡眠阶段的情况下,必须要用专业的测量脑电波的仪器才能测得比较准。我之前一直用一个放在床垫下面的 sensor 来 track,因为是买床垫的时候送的,算是聊胜于无吧,不知道在未来几年内会不会有比较厉害的突破性进展出来。

食事:去年生活中的第三大问题就是吃饭问题。特别是周末吃什么的问题,因为平时在公司吃,所以周末如果自己做饭,买菜的量就特别微妙,吃不完的菜放一周基本上就彻底不行了。但是每顿都专门开车跑出去吃不仅太麻烦,而且每顿都吃很油腻的中餐感觉也不是很健康,所以导致去年我甚至吃了不少 Soylent,一直很纠结这个问题。今年为了解决这个问题做了不少尝试,年初的主要成果是找到了一个去中餐馆点菜然后把剩下的打包回来吃第二或者第三顿,以避免周末老是要开车出门去吃饭的问题;再就是探索了一些其他的简便好吃但又没有中餐那么油腻的食物,最后主要就收敛到越南米粉。另外还有尝试过速冻水饺之类的,但是都发现很容易吃腻。后来由于开始放弃公司的晚饭,提前下班回家,所以周中的晚饭也需要自己解决了,前期的主要解决方案是中午吃饭的时候多拿一份留着晚上吃,或者是去公司全天候的三明治食堂拿三明治回家吃。

到最后找到的解决办法还是自己做饭。在搬家以后买了一个象印 Neuro Fuzzy 的电饭锅,煮饭超级香,然后就慢慢地开始从隔几天会自己在家做晚饭,到年底基本上每天都在家自己做饭吃了。自己做饭虽然也还有点费事,但是后来感觉其实可以当做放松休息,基本上每天简单炒一个菜或者懒的时候直接煮一锅东西,整个下来到吃完洗碗基本上也就四十分钟到一小时。最主要的是自己做的菜比较合自己口味,吃起来比较 enjoy,同时比较容易控制营养(在 N 的影响下开始注意每餐至少都要有适量的碳水、蛋白质和蔬菜)。这样一来周末的吃饭问题也解决了,因为周末也接着做饭就行了。另外还慢慢开发一些新技能,比如炒糊辣椒,制简易泡菜,开始慢慢找回小时候的饭菜的味道。唯一带来的一点麻烦就是感觉大好的周末现在几乎每周都会费掉好多时间在买菜上了……😂

运动:去年生活中还有一个问题就是缺乏锻炼和运动。在学校的时候我主要靠游泳来维持基本的运动量,但是在湾区来之后由于没有方便能去的泳池,基本上唯一的运动就是偶尔和大家出去 hiking 了。今年以自行车 commute 的方式慢慢地把运动量回复过来,另外在搬家之后楼下就有一个大小比较合适的小区泳池,虽然没有学校的泳池那么好并且还是室外的,但是也已经很好用了,于是又开始游泳了。只是室外的泳池确实到了冬天之后就完全没法游了,加州虽然号称气候温暖,但是其实冬天还是蛮冷的。再有就是今年开始在公司找了 personal trainer 开始练习 kick boxing,其实是 N 原本有跟一个 trainer 在做一对一练习,然后我加入进去一起训练,分担费用之后可以练双倍时间,每周一小时的训练,和我 PhD 期间在空手道部参加的训练相比强度还是大很多的,经常训练完接下去几天都是处于腰酸背痛的状态,理想情况下应该平日自己也做一些练习,新家小区楼下的 gym 里也有一个机器可以练习打击(如果有沙袋就更好了),但是几个月下来结果是总共只在家里练过一两次,感觉实在是很再难抽出更多的时间来。

我目前的状况是自己已经开始承认积极锻炼身体是长远来讲让自己能够活得更加舒服所必须要做的事情,只是自己依旧对于自己个人觉得有点“无聊”的锻炼项目(比如跑步或者举铁之类的)比较抗拒,感觉短期目标是把几项自己觉得好玩的(游泳和 boxing)或者有其他用处的(自行车上下班)项目认真做好,这样应该运动量就很不错了,一步一步来吧。😃

耳朵:耳鸣这个是老问题了,现在已经和我生活各方面息息相关,身体和情绪的波动起伏也都和耳鸣的轻重程度互相影响。搬家之后对耳鸣情况应该是间接有一些改善。一方面是自己住之后练琴不需要戴耳机了,另一方面搬家以后外面的噪声会少一些,不过原来住的地方因为是 house,厨房和卧室不在同一层,所以冰箱的噪声基本上不是问题,但是搬到新家之后由于厨房和客厅是一体的,平时在客厅活动的话就有可能会被冰箱吵到。为了解决这个问题我还查了一下冰箱的制冷原理,大致是利用某些物质在改变体积的时候会吸收或者释放热量的原理,然后用一个 compressor 来压缩气体制冷,而这个 compressor 是个 engine,所以就会有噪音。网上有各种稀奇古怪的解决办法,比如把冰箱放在一个垫子上,或者在冰箱的四周贴上 acoustic foam,我感觉都不是很靠谱,最后我得出的最合适的解决办法是自己不在客厅的时候(比如早上起床去上班时或者晚上在卧室关门睡觉时)把冰箱温度调到最低,在客厅的时候如果冰箱开始响就把它的温度调高一点,它就会停止制冷一段时间,安静一阵。不过最后我也差不多习惯了,像练琴或者用电脑的时候其实冰箱的噪音几乎不会注意到,只有在看书的时候周围完全没有任何其他声音时才会觉得冰箱很 annoying,所以最后我直接把看书用的椅子搬到卧室里,几乎也就没有什么困扰了。

刚开始长期耳鸣的时候我去医院检查过,当时就有高频段的 hearing loss,不过后来耳鸣没有很好的治疗办法,也就没有管了,来了美国之后也没有专门在医院问过耳鸣和听力相关的事情。今年从 C 那里了解到 hearing aid 的情况,据说英文的发音里有不少高频的成分,所以高频 hearing loss 的人会在进行 speech recognition 的时候更困难一些,然后 hearing aid 可以改善这个情况,让你听到的频谱更完整,也就更容易听懂。我并没有仔细去研究这后面的细节和道理,但是我知道自己一直都有一点点这方面的困扰,就是在英文对话的时候比较容易听不太懂别人在说什么,这在许多人的场合,比如 party 上、餐馆里之类的情况尤其明显,另一个比较糟糕的情况是在台上做 talk 的时候,如果比较大的厅回声比较明显的话我也基本上不太能听到台下的人问的问题,这样的场合下不停地让对方重复会变得极其尴尬,虽然自己也多少 develop 出一些 trick 来解决这些问题。但是相对地在中文方面我就没有很感觉到有这方面的困扰。以前一直以为是因为中文是母语,英文听不太懂是英文还不行的缘故,但是现在看来也许是跟 high frequency 的 hearing loss 也有一定关系。而且据说 hearing aid 还会(比较随机地)对一部分人的耳鸣问题带来改善。

hearing aid 耳机和充电盒,背景是 Tombow 的 color marker brush pen。

所以我就去搞了一副 hearing aid 耳机设备来试一试,虽然各种牌子种类还蛮多的,但和我现在的保险对应的医院联系之后发现他们那边好像只提供这个 ReSound 的版本,由于美国医疗系统极其低下的效率,一直搞到年底才终于拿到手,大小和 Airpods 那个耳机差不多(不过价格大概是二十倍吧,终于感觉到医疗保险的作用了),不过那个大块的东西其实是放在耳朵后面,真正放进耳朵里的东西只有一小点,所以不会有耳朵被堵住的不愉悦感。我自己戴着的感受是确实某些频率的声音很明显地听得更清楚了,比如鞋踩碎树叶的声音,或者是钥匙放到桌子上时候的声音,甚至开车时候转动方向盘有时会发出的咔咔声,有时会会觉得比较愉悦,但是比较讨厌的地方就是敲键盘的声音会变得很响。人说话的声音的改变比较微妙,我还没有能集中测试一下在嘈杂的环境下听 speech 会不会有改善,不过第一反应是人声有一些 artifact,应该是和平时大脑所熟悉的人声的 spectrum profile 不太一样的缘故吧。最后就是对方向感和平衡感的影响似乎没有我想象中那么大。我的打算是先集中戴一段时间体验一下,看自己能否适应,最后稳定下来之后应该跟眼镜一样,平时不使用,在需要的时候再戴上。至于是否会对耳鸣有所改善,目前来说我还没有很明显的感觉,至少可以肯定的是并不是一戴上立刻就没有耳鸣了,总之先观察一段时间再说吧。

医生极力劝说我买了一个肉色的,说这样不容易看见。我有点不以为然,还觉得戴一个助听器好像还酷酷的,而且别人看到了之后应该会对你说话更加清楚一点吧?不过我发现有人盯着你的耳朵看的时候还是有点不自在,特别是别人明明在盯着看,但是又假装没有看到,好像害怕如果开口询问的话会伤害到对方,这种态度反而会让人觉得不太舒服。如果是小时候需要戴助听器的话,应该是很容易引起心理阴影吧。

住宿:因为前面提到的各方面生活上的改变都和搬家联系起来,所以其实搬家应该算是今年生活方面的一个最主要的改变吧。当然这件事情本身也挺独特的,搬到了一个一室一厅,所以这大概是我第一次真正意义上一个人住,没有 roommate 也没有 housemate。客观来说似乎和独立卧室共享客厅之类的情况差不多,但是心态上总体还是不太一样?

自己家,广角镜头单点透视绘画练习。

虽然现在自己有了单独的客厅,但是整体上布置和自己住在一个房间里的时候差不太多,特别是我对家的优化是我自己住得舒服,而并没有太考虑其他情况(比如朋友来玩之类的),所以并没有买电视或者沙发之类的,而是用升降桌、钢琴、书架等来布置。自己的主要的活动空间是在升降桌那里,由于用电脑、玩游戏、看书、画画都在同一个桌子上进行,并且不同的活动需要的 setup 也不太一样,所以对于桌子上的物件管理还是花了好一阵子才被我优化好,否则很快就会被画画用的笔、最近看的和买的书、各种电脑(公司的笔记本、自己的笔记本和 iPad)堆满而变得特别拥挤。

搬出来住的“坏处”主要是房租增加了好几倍,离公司近、居住条件比较舒适、安静、一室一厅,这几个条件都满足的情况下,房租就要贵好多倍了。不过我觉得挣的钱在存下来养老和现在花这两者之前还是可以好好权衡一下啦,如果多花一些钱能够让当下的生活过得舒适很多的话,还是很值得花的。话虽如此,具体究竟要怎样的比例才是比较合适的,这个肯定每个人的准则也不一样,我想简单来说如果自己一年花的钱还不如一年交给政府的税多的话,那应该不能称作“乱花钱”?

工作

今年的工作在内容上没有太大的变化,去年加入的这个组感觉也比较喜欢,算是在理论和实践中间比较好的一个 middle ground,虽然对于我自己未来的发展方向还并没有搞得特别清楚,但是在组里相处和合作感觉都是非常舒服的。今年工作上最大的变化应该是找到了比较合适的 work life balance。一方面自己一直也在尝试在不同的感兴趣的事情上找到更好的平衡,另一方面今年看到的负面新闻也不少,有因为工作压力而跳楼的或者猝死的,虽然美国这边不像国内加班那么严重,但是在不同公司不同组应该也会有各种不同程度的压力。此外,我自己也亲眼目睹了一场比较 dramatic 的人事变动,我原本以为这样的事情只有在电视上才能看到,惊讶之余我立刻就意识到了自己之前确实是把员工和公司之间的关系过于浪漫化了,把它当做了一种有“人情味”的关系,但是其实客观来讲真的只是雇佣关系,这个并不是针对你的 manager 或者某个更高层的公司管理人员,而是针对公司作为一个抽象实体本身而言,和你之间的关系是不言自明的。总之最终结论就是不论是怎样的工作,都不是值得你拿自己的健康作为筹码去拼命的。

虽然这种冷冰冰的雇佣关系让我在对待工作这件事情上变得稍微更加冷静了一点,但是并不是说我丧失了工作的热情,毕竟非常幸运的是我自己工作的内容也是我自己喜欢和愿意投入热情去做的,不过这里就涉及到另一个问题:因为我喜欢的东西其实有不少,所以最终需要在工作(这个兴趣)和其他兴趣之间找到一个平衡点。当然,工作还具有养家糊口这个额外的属性,所以自然权重还是要大很多的。

我在考虑 work life balance 时候考虑的第三个因素就是自己的身体。随着年龄的增长身体能够承受的工作负担会逐渐下降,我没有想要从此开始混吃等死的意思,但是也不想透支自己的身体让今后的日子很难过。从这个方面来讲我会“工作”这个各方面负荷比较大的活动和其他一些相对有趣但又属于比较放松或者比较有助于增强体质的活动之间寻找平衡点。

目前的时间分配我自己还是比较满意的,唯一的问题就在于排得比较满,其他的东西很难塞进来,包括未来可能有的新的感兴趣的东西,或者以前比较有兴趣但是现在由于没有时间导致暂时放弃的事情,比如说多参与一点开源项目相关的东西,又比如多一些的学习的时间:比如专业相关或者和专业不太相关但是仍然比较深入一些的内容(比如数学、物理、生物相关的东西),因为现在读书即便是 nonfiction 通常最多也只是到科普或者 survey 那样的深入程度,有时会感觉有点泛泛的。总之明年在阅读上也许可以考虑减小一下阅读的数量,但是在书的选择和理解的程度上更加深入一些。

工作上去年我听到大家谈论的话题比较集中在工作内容的有趣、有意义程度或者自己有没有在学习新的东西在进步之类的,今年周围的人谈论的话题似乎开始转移到升职、职业规划、还有跳槽、涨工资之类的问题上。我自己在两个 cycle 的 evaluation 中收到的上面来的 feedback 也都是希望我能更加 proactive 一点,多 reach out,主动和别人说自己的工作之类的,总之就是在 professional social life 上有诸多值得改进的地方。其实这方面的症状、道理我自己也都知道,不过就是实现起来依然是经常会碰到自己心里的抵触啦。我暂时不想在这里立下一个 new year resolution 明年一定要改进这个问题,总之还是先不要太逼迫自己比较好,慢慢来吧。

另外今年还第一次带了 intern,感觉真是非常 tricky,从选项目的 topic 开始,如何既不提供非常具体的项目以至于让 intern 觉得没有自由度,又提供足够的 guideline 让他不会觉得没头绪,到项目过程中,以怎样的频率和他 sync 才会既不会让他感受 host 隔三差五都在问进度压力很大,又不会让他觉得 host 怎么完全不管我只干自己的事情。还有有 progress 的时候应该怎样夸奖和鼓励才能够激励军心但又不至于显得很假,或者方向和细节方面有需要改进的地方如何才能委婉地提出才不至于降低士气。等等,感觉自己在各方面都还有待学习和提高。不过整体来说和 Z 的合作过程还是挺愉快的经历啦,intern 也好 host 也好大家都有第一次,以后肯定会慢慢提高的。

感情与价值观

今年生活上的另一个重大变化就是恋爱了。其实这几年自己一直处于一种游离的态度,偶尔碰到比较合得来的女生,但是想到进入恋爱关系之后自己将要扮演的角色和对自己生活的影响,就会退缩并选择以朋友的方式相处。其实与 N 相识时也是如此,一起玩都感觉很舒服,但是又很担心确立关系之后会因此失去一个志趣相投的朋友。不止是潜在的关系破裂后出现的不愉快结局,更多的是在双方太过于投入时对自我的迷失。我觉得我自己在这方面尤其不擅长,与人亲密相处时很容易受到对方的影响,从生活方式到价值观各个方面都会发生改变,当然有一些是比较积极的改变,但是也有一些是受到荷尔蒙影响而自我洗脑的改变,并不一定是自己所想要的生活方式。而且自己渐渐改变,可能就不再是对方最开始喜欢的那个样子。反过来也是一样,一开始感受到对方的吸引力肯定是由于对方的某些特性,但是如果对方开始迷失原来的自我,那你是否还像原来一样喜欢呢?

不过,最终还是和 N 走到了一起,从我自己的角度来说大概是在一段时间的相处之后觉得“迷失自我”的危险比较低,或者更确切地说,两人各自的生活方式原本就极其相似,所以即使互相影响,也不会和各自原来的样子差太多吧。事实上,跟 N 一起玩的时候感觉非常奇特,可以形容为“舒服”,但是又不太一样,因为我和各种不同性格朋友一起玩也可以很舒服。也许可以说成是就像我自己一个人玩一样比较自在,特别是会做一些平时基本上只有自己一个人的时候才会做的事情(比如泡在书店里,或者自言自语,瞎蹦跶之类的),并且并不是说 N 性格随和对做什么都没有意见(面对这样的情况我反而会有比较大的心理压力),而是在这些事情在两人的生活中似乎都是比较自然的。按照 N 的说法,简直是另一个性别的自己的复制品。兴趣爱好从音乐画画读书动漫日文到去世界各地瞎逛各方面重叠相当大,但是可能更重要的是价值观上也非常的一致吧。事实上两人确立关系之后各自的生活大致上也还是维持原样,我从我的年度时间统计中能看出的唯一变化大概是秋季之后阅读量突然增加了许多,大概是由于经常周末陪 N 去图书馆还书又不小心借了更多的书回来的缘故吧。但是,以为没有变化的生活,其实又确确实实不一样了。今年我生活中的许多变化其实都有 N 的影响,比如开始更多地骑车上下班,更多地自己做饭吃,以及开始练习 kick boxing 之类的,但同时这些也是我自己一直想做的事情,N 起到了催化剂的作用。有时看到她认真的样子我也会受到激励,所以还有鼓舞的作用,记得好像是 N 第一次邀请我去她家玩的时候,在我的强烈要求下她弹了一下那阵子在练习的古典吉他的几首曲子,N 说我听完就以“要回家练琴”为借口走了,留下她在那里一脸懵圈。其实我当时真是听了很鸡血地回去练琴了。

仔细观察的话潜移默化的影响似乎很快就深入到每天的生活细节当中,比如有一次去开一个拉线开关的灯,因为两个人都两手拿了东西,竟同时下意识地准备用嘴去扯那个拉线,大眼瞪小眼地顿时笑瘫在地——究竟是谁学了谁的坏习惯呢?有时候好像觉得,两个人并排走的时候,似乎相互影响也是一种积极的成长呢。也许这只是恋爱中的盲目,谁知道呢。🙂当然,即便如此,并不是说我和 N 之间已经达到了 100% 契合的状态,客观来讲,要长期在一起生活的话,双方都还有一些问题需要找到可行的解决方案或者合适的 compromise 才行的,不过这些是需要两人去尝试解决的问题,就先不在这里多说了。

三观方面我大致还是以一种相对随和的态度去对待生活:一方面我今年好像强迫症又有点加重了一些,一些事情如果没有按照我心里预订的节奏去发生,我会有点 agitated,不过另一方面我对 upset 的事情忘记得比较快的特质还在,并且今年看了不少“大尺度”书,让我有继续抱着一种“生活中的许多烦恼其实都算不上什么事儿”的心态,所以总体来说还是比较坦然的心态。这里的“大尺度”是指时间和空间上的尺度,时间上主要是一些 natural history 相关的内容,比如前面提到的《The Rise and Fall of the Dinosaurs》,横跨数亿年的时间,在这个小小的地球上也经历了好几次全球范围内的物种大灭绝,虽然人类一直为自己飞速发展的科技而骄傲,但是正如《We Have No Idea》里讲到的那样,其实人类的科学和技术放在宇宙的时间和空间尺度来说,真是太渺小了,我们知道的东西和我们知道我们不知道的东西比起来差了太多,更不用说那些我们甚至都不知道我们不知道的东西。抛开茫茫宇宙,就连我们自身也还是充满谜团,比如《The Disordered Mind》里所描述的自闭症、精神分裂、失忆、帕金森、PTSD、老年痴呆等生理异常状况,虽然严重影响到了许多人的生活乃至于生存,但是我们现在要么还未能理解,要么只能用一些副作用非常大的方法来进行控制?当然,科技在过去一两百年之内的飞速发展确实也是无可否认的,只是到各地转一转就会发现,科技进步其实也并不是简单的,各个方面均匀推进的一件事情,每个区域和国家的科技树发展得都有点不一样,比如美国虽然是一个科技顶尖的国家,但是如果要对比公共交通和火车的速度、覆盖面等各方面,都不知道会被欧洲亚洲各国甩去几条街。

背后的原因很简单:科技进步从来都不是人类社会的一个共同目标,而只是一个副产品,科技发展最迅速的方面总是和利益息息相关,民用科技的发展集中在商业利润最大的领域,世界各地科技树不一样正是反应了各地人们生活习惯等各方面的差异;而军用科技发展则是牵涉到国家或者统治阶级的利益。到头来,即使真正从事科学研究的人们只是想要在科学技术的某一方面有所突破,经费、社会关注程度、乃至让研究能够继续下去的源源不断的年轻一代科研人员的教育和培养等各方面都会很强势地左右不同领域的发展速度甚至方向。也许这反映的是人类作为一种生物所具有的社会群体的生存本能,说到底我们终究也只是茫茫宇宙一隅的某种二足生物而已啦。

所以到头来我们作为个人,生活的目标或者意义是什么呢?也许没有意义,那么最重要的事情是什么呢?不知道。我目前的理解是要过得开心。就好像“莫名其妙被推上一趟长途列车,终点对你来说毫无意义,那就先安下心来看看书看看风景吧”这种感觉(怎么有点像在说 California Zephyr 之旅)。这里需要 clarify 的是,开心并不完全等价于“及时行乐”,因为要优化的是整个旅途几十年的“开心”程度,而不是当下一时爽,这就会出现许多需要 balance 的地方,比如当下一段时间会需要选择放弃自己最喜欢的事,或者甚至会需要去做一些让自己非常不开心的事情之类的。另外一种比较常见的观点是,既然人生只有几十年,那么我应当努力去建功名,做到名垂青史,这样即使我死了,也还继续“活在”后人的心中。我觉得这种意义上的“活着”实在是和真正的“活着”差别太大了,而且人类在地球的历史中也不过是转瞬之间,更不用说在整个宇宙尺度下了,所以其实也没啥意思。不过我并不是愤世嫉俗地反对名与利,如果说在取得名利之后可以为去做自己喜欢的事情铺平道路,或者是追求功名本身就是自己所好,那其实是挺好的。总之,找到自己真正喜欢的事情,并找到一个能够 long term sustainable 的让自己能去享受这些事情的生活方式,应该就是我现在的人生态度吧。

最后想要提一下养宠物的问题,由于我妈妈喜欢养猫猫狗狗,所以我从小跟它们接触比较多,对大部分种类的猫狗都很喜欢。当然玩别人养的宠物和自己养宠物完全不是一回事,后者是一个非常大的 commitment,人生会有一部分需要被用来照顾它,所以问题就是在投食、铲屎、遛弯、修补被咬坏的家具、砸碎的物件等事情和拥有宠物的陪伴两者之间的权衡了。我自己目前还没考虑清楚有一个宠物相伴到底在我心目中是多大权重的一件事情,除此之外,还有一个 downside 就是养了宠物之后就很难很轻松随意地到外面去到处跑了。而且即便是多年生活在一起到了“心灵相通”的地步,其实双方还是比较悲伤地没有办法进行任何深入交流,甚至只是“昨天没睡好今天有点累主人你自己玩吧,但是我身体没有啥大碍不要大惊小怪地把我拖去打针了”这之类的想法都没有办法好好传达。除了对宠物的喜爱之外,另一个近些年让我考虑宠物问题的契机是周围的小伙伴们渐渐地开始有小孩了。小孩的事情本身对我来说还太遥远了,如果真的要养小孩,那我的整个人生观和价值观都需要完全推倒重来,所以这是一件需要非常慎重思考,但是迄今为止都没有认真去考虑的问题。不过我发现宠物问题完全可以作为小孩问题的一个热身题来对待:养宠物和养小孩(至少在前面十多年)感觉非常相似——对方可能会成为你生命的中心或者甚至生命的全部意义,导致你再没有足够的精力去过自己原本自由的生活,但另一方面其实基本上没有办法进行比较实质性的沟通,沟通障碍不仅会让自己很苦闷,而且也可能让对方很痛苦——即便你不求回报心甘情愿奉献一切,但是你的所作所为可能与对方事与愿违。总之我想一个比较合理的章程可以是:在考虑是否要养小孩之前,必须要 1)考虑清楚自己是否真的希望认真养一个宠物;2)将养宠物的计划付诸现实并证明自己真的适合抚养和照顾。在此之前如果自己去考虑小孩问题将会是不成熟乃至不负责任的。

时间统计

过去几年我都断断续续有对自己日常生活的时间进行一些统计,今年应该是统计得最完整的,整年都记录了下来,并且用了一个可以导出数据的 app,所以自己做了一些额外的分析和制图,还蛮好玩的。我用的是 iOS 上一个叫做Manifest的,需要收费,不过是我找到的在界面好看和好用并且支持导出数据这几点之间权衡之后最好的 app 了。当然记录自己的时间除了是一个被动的跟踪以外,其实还有更多“主动”的影响,从某种程度上来说是一个督促和压力,有利有弊吧,有人觉得这是限制了自己的自由,其实真正自由的内心的话是不会被一个小小的计时 app 所左右的。不过我明年我也许会试试看不做记录,或者用更简单的记录方式,毕竟导出数据自己分析虽然好玩。但是时间日期处理真是比想象中更麻烦,比如如果跑来跑去还有时区的问题,即便是待在一个地方也会有冬令时夏令时切换的问题等等。

首先是 365 天各个项目累计时间统计,分类大概跟去年差不多,不过这应该是我第一次坚持一整年全部做了时间记录。累计时间没什么太多可说的,一个是今年练琴练了 400+ 小时,另一个是钢琴画画读书这三个基本一直是比较微妙的平衡状态(虽然我并没有特地维持这个平衡性),不过到年末的时候看书的时间好像突然增加了很多。下图是四个季度各个项目所花的时间百分比图。

可以看到工作大概在一半多一点的时间(去年是百分之六十多),第一个 quarter 读书钢琴画画基本上是三等分,但是到后面读书就开始 dominate 起来。另外第一个季度基本上没有任何运动,到后面运动量开始多起来(主要是骑车和 kick boxing),第四季度又减下来主要是因为天气冷了之后骑车上班就变少了。下图是每周时间统计的柱状图:

总的来说工作和钢琴的时间相对是比较稳定的,读书和画画的时间则看起来变化相对大一点,学习和运动基本上都是作为零头出现的。另外我还画了一下按照一周的每一天各个项目平均所花的时间(见下图),这次可以更明显地看到钢琴的时间相当稳定,基本上每天都是练一小时多一点。周中每天花费的时间也相对固定,似乎有一个小小的 trend 就是干劲越来越大,直到周三,然后开始期待周末,总时间就减小哈哈。总之每天十小时多一点,虽然我每天要睡九小时,但是这样每天也还有五个小时来供我 commute、看片、做饭、放空之类的。而周末则基本上总时间只在六小时左右,这是因为周末一般会有一些其他事情,比如要去买个菜,或者要去图书馆还书,或者有一些集体活动吃饭爬山之类的。图上显示的周末的一点点工作时间应该主要是在某几个 deadline 相关的时候集中加了几天班之后平均下来的结果,因为总体来说我周末基本上还是不会工作的。

致十五年前的你

几个小时与十三年,在漫长的记忆中都是一瞬,没有什么不同。《回忆爱玛侬》

今年是我以孙燕姿的歌为标题在自己的博客里写年终总结的第十年,本来想要不要做一个简要的十年总结,结果突然在自己的 notes 里翻到一个之前以大学入学十年为契机写的十年总结,干脆放在一起好了。如果要给十五年前的自己写一封信,反倒觉得没有什么可以写,两个时期的自己感觉完全是不同世界的人,也没有太多的交集,会不会面对面坐到一起也没什么可以聊的?而且那时的自己愤世嫉俗,肯定听不惯过来人的老生常谈。也许只说一句:“未来总是充满神秘和意外,所以要对明天充满好奇与期待。”但其实这些事还是自己慢慢去了解更有意思吧。

  • 2005:第一次坐火车,第一次出省,第一次参加面试(自我介绍就卡住了)。大学生活伴着一系列的挫折开幕。进入了计算机系而不是向往的数学系,不记得当时是否因为这件事情而消沉过了,但从结果来看是蛮幸运的阴差阳错。第一辆自己的自行车,第一台自己的 PC(配备软驱,CRT 显示器)。
  • 2006:加入微软技术俱乐部(MSTC),大学生活中最深刻的回忆几乎全都来自这里。接触 Linux 和 Emacs,热爱开源,通过 Ubuntu 分发的免费光盘在校内推广 Linux。愤世嫉俗,讨厌社会上复杂的人际关系,在网络上(技术论坛)上很健谈,线下很内向。父母离异。
  • 2007:第一个开源项目 (Emacs 扩展smart-snippet.el)。被学长拉去一个创业项目(知识管理系统)里帮忙。重拾高中荒废掉的画画。开始为 MSTC 的技术讲座做贡献,时间和内容控制上都有待改进,第一个成功的讲座是 Linux 社区组织的关于 Emacs 的讲座。接触《空之轨迹》系列。视力开始下降。
  • 2008:开源项目 mmseg 系列和YASnippet.el,后者现在还是 Emacs 的常用扩展之一(目前由他人维护)。参加GSoC。加入实验室开始接触科研,很没有存在感,连 Kmeans 都不懂。毕设换了实验室,接触机器学习。没买到票爬窗上火车补站票(33 小时车程)。在漫长的痛苦和逃避之后结束了第一次恋爱关系,之后消沉了很久,也成为成长中重要一课,中学时期的浪漫主义世界观彻底崩塌,重新审视自己对“现实世界”的认知。同时这也是自己首次积极尝试改变“不擅长拒绝”的软弱性格。成为 MSTC 技术组 Leader,在组织活动过程中性格逐渐外向化,慢慢消除人际交往厌恶症。在工作和保研之间选择了后者,出国则由于“准备英语考试是浪费时间”而直接未予考虑。
  • 2009 - 飘着:在 MSTC 的组织活动更频繁,发起了新的活动形式增加社团凝聚力,关于 C 调试的讲座 150 人满场且反馈很棒。任 MSTC 主席。自己买的第一个笔记本 Thinkpad X200。玩《空之轨迹 3rd》。本科毕业。保研换去另一个研究更前沿一点的实验室,离开毕设实验室的决定也纠结了很久,算是第二次努力改变不擅长拒绝的性格。十年前开始看的犬夜叉漫画完结。从 Emacs 切换到 VIM。参与另一个创业项目(中途退出)。开始大量听孙燕姿的歌。用 RPGMaker 做了一个游戏。在紫金港看日食。第一次吃披萨。开始缓慢自学日语。Y 说等你哪天从你的消沉中走出来了就向我表白吧。
  • 2010 - 关于:跟着 Y 的脚步开始想要去了解外面的世界,与学长和导师讨论之后开始准备出国。Y 说希望做回朋友,受到打击进入人生中最黑暗的一段时间,之后花了好几年才慢慢释怀。痛苦再一次促进了成长,将心思转移到工作和学习上,继续准备出国,四月托福,八月 AW,十月 GRE,由于官方泄题十一月强制重考。中了第一篇论文。开始长期耳鸣。写了支持向量机系列博客,收到很多感谢邮件。
  • 2011 - 当冬夜渐暖:出国申请。第一块数位板。玩《零之轨迹》。去数学系旁听课,受到那里小朋友们勤奋的鼓舞,改掉了本科养成的上课打瞌睡的习惯。暑假以外系人员 + 研究生学长的身份强行去参加数学系讨论班,算是突破自己 comfort zone 的第一次尝试,认识到真正喜欢的东西不能害羞要努力去争取。开始使用双拼输入法。第一副眼镜。耳鸣加重,对环境噪音(比如 CPU 风扇)变得很敏感。
  • 2012 - The Moment:研究生毕业,第二次做GSoC。暑期画完三本 portrait 练习,兴趣开始由动漫转向写实风格。第一次出国,开始 PhD 生活,同本科一样刚开始的时候碰到蛮多挫折。在电脑一个角落发现一封 Y 两年前留下的加密信件。开始使用智能手机并进入 Apple Ecosystem。开始认真用 Coursera。通过学校的课开始正式学习日语。在新鲜感驱使下参加了学校为新生组织的长达一个月的各种社交活动,从此对 social 比较烦腻,几乎只参加亲近朋友的小圈子聚会。看《冰菓》。
  • 2013 - 我要的幸福:第一次滑雪。加入学校空手道部。通过系里的 Technical Qualification Evaluation (TQE)。社交网络使用频率到达顶峰,开始主动节制并思考其在生活中的位置。读《娱乐至死》。第一次暑期实习。结识 S,一起看独立日焰火,看海(我第一次见到海),开始异地交往。学习水彩,同 S 有几幅共同完成的作品。画的系楼被挂到了宿舍楼走廊里。第一次见没过大腿的雪,兴奋得不行。
  • 2014 - 明天的记忆:通过日语 N2。暑期交换全日本跑了一遍。开始画 travel sketch。开始借开会去世界各地看。与 S 异地交往恶化并在压抑中结束,内心反应虽然没有以往那么激烈,但是开始对恋爱在生命中存在的必要性有了一些负面的看法。拿到驾照。开源项目Mocha.jl。基本戒掉社交网络。开始追很多新番动漫。开始看日文书。Interspeech best student paper。空手道部退社(平时太忙了)。
  • 2015 - 就是这样:做 TA。通过系里的 Research Qualification Evaluation (RQE)。在 MFA 上课学习丙烯画,第二个数位板。加入MXNet开源小组参与开发。学习游泳并作为日常运动。开始记录睡眠(平均睡眠区间 1am ~ 8:30am)和日常时间分配(3/4 科研学习,1/4 课外活动)。开始每天喝咖啡。开会去欧洲等地转了一大圈,住了各式各样的青旅。签证被 check 在江南一带游玩,第一次在国内旅行,过程中看了很多书,并养成了比较规律的阅读习惯。读《动物农场》。重玩《天之痕》(iOS 移植版)。
  • 2016 - 无限大:看《四月是你的谎言》,开始了解古典音乐,去BSO听音乐会。从零开始学习钢琴。第一架琴 Casio Privia PX-160。第二次暑期实习(Google Brain),第一次到湾区,印象很差。在学校的学生艺术协会报名学习油画,Apple Pencil 取代 Wacom 数位板。看动漫(尤其新番)的数量开始下降。与 Z 短暂交往。第一次一个人开车,吓破胆。开始使用机械键盘。读《The Fountainhead》。
  • 2017 - 风衣:找工作,写 Thesis,答辩,PhD 毕业,走出象牙塔,从东岸搬到西岸,开始工作。ICLR best paper。citation 过千。英国暑期实习(DeepMind),顺便又跑了欧洲许多地方。看了火山岩浆,也看了冰川峡湾,感受人类在大自然中的渺小。继续学琴,录了贝多芬悲怆奏鸣曲的第二乐章。第二架琴:Yamaha AvantGrand N2。跟着 schoolism 上的课程开始认真学习光影、色彩、构图等绘画基础知识,第一次尝试inktober(未完成)。入手 Fujifilm X100F,练习在街上拍路人。玩《塞尔达·荒野之息》。阅读从前几年的电子书为主开始逐渐偏向实体书。得了工作太努力就会口渴难耐的怪病。
  • 2018 - 世说心语:工作第一年。睡眠质量下降(平均睡眠区间 12:30am ~ 8:30am)。偶尔会腰疼。继续记录时间分配(3/5 工作,2/5 生活)。持 O1 签证 travel 受限,一直呆在美国的第一年。去阿拉斯加,第一次带妈妈旅行。第一次露营。第二次尝试inktober并完成。在公司修乐理和绘画类课程。大量练习 figure drawing(30 秒 ~ 20 分钟的 pose),也开始去咖啡店画路人。读《The Highly Sensitive Person》。Lease 了自己的第一辆车(Audi A4),成为能够独立开车的人。玩了一次射击。

回看感觉自己逐渐成长为一个越来越独立的人,不过这是一种 independence 而不是 solitude。这一路的旅程在不同时期都少不了一起旅行的伙伴们,有了大家的同行,我才得以一直前行不迷失方向。😊

最后,粗略地统计了一下过去十年间看书和动漫的数量(更早的数据太模糊不可考了),画了下面一个十年统计图。动漫上似乎没有太明显的趋势(主要大概统计起来比较麻烦,比如有的动漫只有一集,但是有的可能一部有几十甚至几百集),PhD 期间追新番最多,到 PhD 后期就逐渐减少了。看书则是在 2015 年突然有一个大幅增长,后面几年则是英文书的数量在逐渐增长,然后总数量在今年又突然涨了一大截。

尾声

2020 年的 new year resolution:𝟙. 在视奏上有所进步。𝟚. 对 anatomy 的理解进一步加深。𝟛. 强迫症得到缓解。𝟜. 平衡阅读数量和深度,为值得比较深入阅读的书做更详细的笔记和总结,在 consume 和 create 的 balance 上多往后者 shift 一点。

“如果与你没有相识,不知道现在会在过怎样的生活?”,N 说,“应该也不会很无聊,不过会是完全不一样的生活。”我觉得,我的答案也是一样的。🙂

回忆很美未来很慢
我的故事因此写到一半


Server Side Math Rendering

$
0
0

现在使用MathJaX直接在浏览器里显示数学公式已经非常方便了,基本上只要在 HTML header 里插入两句引用一下 MathJaX 的 CDN,然后在页面里的 LaTeX 公式就会被自动转化为数学公式显示。运作方式是 MathJaX 作为 Javascript 在客户端浏览器里运行,寻找 HTML 文档里的 LaTeX 表达式,然后将其转化为公式(通过 HTML 或者 SVG 排版的方式)显示出来。不过客户端渲染有一些小问题就是每次用户打开都要重新渲染,取决于用户的网速、系统运行 JS 的速度等等,可能渲染速度会不太一样,而且后期渲染会导致 HTML 文档布局变化等等。所以有时候考虑在 server 端预渲染是一个不错的选择。

在 MathJaX 出现之前一般 server 端的渲染是基于真实的 LaTeX 的,就是直接运行 LaTeX 编译出 dvi 文件,然后用dvipng之类的工具转化为图片格式,插入到 HTML 文档中。这种方式的好处是和 LaTeX 完全兼容,坏处一个是需要运行 shell 去调用 LaTeX,如果是用户输入的文本的话可能有一定安全隐患,而且对 server 负担可能也有点大,当然最重要的还是 png 这类的图片格式显示的公式特别是在 inline 的时候不能很好地和周围的文本对齐,经常会很难看。

另一个就是把 MathJaX 在 server 端预先渲染成 SVG 格式。实际上我这个博客里之前的公式一直是这样显示的,这样可以整个页面静态加载,即使客户端禁用了 Javascript 也能显示,再复杂一些也许可以做到在支持 SVG 的 RSS Reader 里也能直接显示公式。我使用的是一个叫做svgtex的工具。它的运行方式是通过PhantomJS在 server 端跑起 MathJaX 来,然后在一个端口监听,你可以通过发送 HTTP 请求到该端口,输入 LaTeX 的公式,它就会调用 MathJaX 进行渲染,然后把渲染的结果(SVG 格式)发送回来。由于我的博客是编译成静态页面的,所以我直接做了一个简单的后期处理,拿到 SVG 之后替换掉 LaTeX 公式文本内嵌到 HTML 中即可(因为 SVG 其实是文本格式),我用类似于下面这一段代码来做后期处理:

  1. require'uri'
  2. require'net/http'
  3. deftex2svg_impl(math,display=false)
  4. # undo some preprocessing done by pandoc
  5. require'cgi'
  6. math=CGI.unescapeHTML(math)
  7. uri=URI.parse('http://localhost:16000')
  8. http=Net::HTTP.new(uri.host,uri.port)
  9. request=Net::HTTP::Post.new(uri.request_uri)
  10. ifdisplay
  11. request.body='\displaystyle{'+math+'}'
  12. else
  13. request.body=math
  14. end
  15. http.request(request).body
  16. end
  17. desc"convert MathJaX formula to embeded SVG"
  18. task:tex2svgdo
  19. require'find'
  20. # currently do not support rss.xml, because
  21. # 1. pandoc do HTML escape, which is escaped again in XML, making
  22. # it difficult to unescape
  23. # 2. the SVG image is displayed as crazily full page-width images
  24. # in Firefox RSS view
  25. Find.find('compiled-production')do|path|
  26. ifpath.match(/html\Z/)
  27. putspath
  28. content=File.read(path)
  29. content.gsub!/<span class="math[^"]*">(.*?)<\/span>/mdo|match|
  30. # strip \( \) or \[ \]
  31. math=$1[2..-3]
  32. if$1[1]=='('
  33. '<span style="font-size:100%; display:inline-block;">'+
  34. tex2svg_impl(math)+
  35. '</span>'
  36. else
  37. '<span class="svg-math-block">'+
  38. tex2svg_impl(math,true)+
  39. '</span>'
  40. end
  41. end
  42. File.open(path,'w')do|f|
  43. f.write(content)
  44. end
  45. end
  46. end
  47. end

不过我的 Blog 代码也是很多年前写的了,最近换新电脑的时候做系统迁移才发现原来 PhantomJS 都已经停止开发了,然后 svgtex 也已经 depreciated 了……不过 svgtex 有一个后继者叫做mathoid,看了一下现在已经是 Wikimedia 的项目了,看来 Wikipedia 现在已经是用这个在做 server 端渲染了,居然一直都没有注意到。

这个 mathoid 最开始是从 svgtex fork 出来的,使用方法基本差不多,不过不再依赖于 PhantomJS,而是基于 node.js。但是我对 node.js 并不是很熟悉,感觉 setup 又会有多一套系统需要维护,由于我现在写 blog 的频率并不高,生成博客的代码维护则更是几乎没有在跟进,这次在修理Rack更新之后出现的问题花了很久,发现我都几乎不太会写 Ruby 代码了,越发意识到这种没有积极维护的系统还是依赖越少,功能越简单越好,而且 server side 渲染对我来说其实并不是一定要有的功能,所以最后干脆又切换回了直接使用 MathJaX 的 CDN 在客户端渲染的方式。

不过换回去之前想把这个解决方案在这里分享一下,有可能以后会有用,而且之前也有人问过我 blog 里的公式是怎么显示的,因为右键并不会弹出 MathJaX 的菜单哈哈。不过这里还值得一提的是一个后来出现的叫做KaTeX的 MathJaX 的竞争者,它是直接支持 server 端渲染的,如果你有一个 server 端 javascript 系统(比如 node.js),可以直接这样渲染:

varhtml=katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}",{throwOnError:false});// '<span class="katex">...</span>'

当然 KaTeX 和 MathJaX 相比各有优缺点,KaTeX 的优势是速度比 MathJaX 快很多(虽然 MathJaX 对于普通使用来说已经不慢了),不过相比就是支持的 TeX 命令可能没有后者那么全,虽然这些年来已经改进了很多了,不过似乎有些复杂的公式显示还是和 MathJaX 渲染的结果有一些差距。网上有一些比较详细的比较,比如这个页面,具体用哪个还是看自己的需求啦。

2020 书单:谷雨

$
0
0

“清明断雪,谷雨断霜”,不知不觉 2020 年已经开始进入夏季。年初的时候就经常看到大家惊叹今年魔幻开局,新年伊始就在世界各地发生了各种话题性事件,不过大部分人估计都没有想到接下去的几个月会演变出一个全球性的大灾害级别的事件吧。COVID-19 在国内疫情肆虐高峰过去之后开始迅速席卷全球,现在美国检测出的感染人数马上就要超过一百万,而全球总感染人数也即将突破三百万。世界各地的居家令给各种行业和阶层的人生活带来了不同程度的影响——当然对于大自然和野生动物来说也许是个愉快的假期呢。

我自己非常幸运地在一个非常容易“在家办公”的行业,暂时没有失业的危险,也没有“家里有吵闹的小孩需要照顾”之类的情况,而且自己也是相对比较擅长宅家的类型,所以从日常生活上来讲并没有特别剧烈的变化。感觉最明显的一个是工作变累了(远程交流和合作通常更费力,而且少了通勤、楼间移动或者偶尔碰到同事闲扯之类的缓冲,一天工作下来几乎都没有什么自然的休息时间),另一个是时间的流逝似乎变快了——不知不觉一年已经过去了 1/3。突然想来列一下第一季度看过的书单,一方面可以给博客稍微增加一点烟火气,另一方面也避免每次一到年终,总结帖里就变得全是书评了。

先以几本和疫情相关的书开始好了。首先是加缪(1913-1960)的《鼠疫》,这是一本虚构小说,加缪于 1957 年因“热情而冷静地阐明了当代向人类良知提出的种种问题”而获诺贝尔文学奖。我并没有看过他的其他著作,不知道这本书是否是他最具代表性的一本,但是诺奖获奖理由无疑是能原封不动地用来描述这部小说的。小说描述了一场鼠疫席卷一个位于阿尔及利亚西北部地中海沿岸的城市的全过程。就整个事态发展的描述来讲,特别是结合当下疫情自己的所见所闻,会觉得简直是惊人的相似。不禁让人惊叹作者的想象力,如果不是亲身经历过类似这样的一场灾难,如何能够如此细致地把故事展开来。当如除此之外本书更大的特点正如前面提到的:平静的陈述,没有悲天悯人也没有歌功颂德,但却饱含真挚和勇气。

第二本《血疫 : 埃博拉的故事》如其名是关于埃博拉病毒的故事,不过与《鼠疫》不同的是这并不是小说,而是关于埃博拉病毒的几起有记录在案的事件始末的一个 documentary。埃博拉病毒通过血液传染,似乎也能通过空气传播,现在还没有对人类进行全球大清洗一个原因是它致死率太高了(有些变种达到 90% 的致死率),所以宿主成功把病毒传播出去之前就挂掉了,另一个(也许更重要的)原因则是运气吧——或者说,时候未到。书中最开始讲述了非洲——似乎是病毒的发源地——的几起有据可查的爆发事件,只是可能病毒肯定有更多次在非洲肆虐屠灭了许多村落也并无人知晓吧。后半的篇幅详细描述了在美国华盛顿特区附近的一起病毒爆发事件。不得不说整本书看得心惊胆战,不仅是病毒残酷虐杀宿主的方式让人胆寒,更多的是看到病毒如何迅速在现代交通和社会网之下传播开来时的紧迫感,可能会遗漏和出错的地方真是太多了:意外、心理、社会、法律、政治、家庭等等各种因素交织在一起,到头来有没有出现大规模灾难真是一个运气问题。

到这里让我不禁很想把另一本原本没有什么特别关系的书放在一起讲:《Gut : The Inside Story of Our Body’s Most Underrated Organ》。这是一本既不可怕也不惊心动魄,反而很可爱的书。作者是德国一位肠道学博士生小姐姐,她妹妹(姐姐?)是一位设计师,为书做插图。全书以💩为主题开场,写作风格、插图各方面都非常可爱,对人类整个消化系统——从口腔到胃、肝脏、小肠、大肠等各个部分做了详细的介绍。消化系统是我们能源的总提供商,因此需要不断地与外界未知的险恶世界直接接触,是免疫战争的大前线,组成了人体超过一半的免疫系统。除了系统介绍各部分的功能和 maintainance 小贴士之外,还有许多以前不太知道的冷知识,比如亚洲蹲是比坐马桶更好的便便姿势,“gut feeling”也许真的是一个科学上合适的说法,等等。第三部分则主要介绍肠道菌群,人类的肠道菌群加起来重量可达两公斤,细菌的数量是在 100 trillion 的级别,比人类自己的细胞数量还要多,是一个非常复杂的动态平衡系统,其中有很多细菌是对人的消化、健康、免疫等各方面都有非常积极作用的,当然也会有“坏”的细菌乃至于寄生虫之类的。当然,书中还反复指出,我们现在其实对我们的肠胃整个系统的了解还远远不够,许多结论都还只是得到了初步的不严格的科学研究,还有更多的问题则完全没有被涉及到过。果然科学中的“未知”永远都远远多于“已知”啊。

在疫情相关的话题里提到这本书,除了因为消化系统是人类免疫系统的大前线之外,更大的原因是让人忍不住感叹的大自然的“因果轮回”。之前 BBC 拍过一个很不错的小纪录片,叫做Our Secret Universe: The Hidden Life of the Cell,详细介绍了(某一种)病毒入侵人类细胞的机制,和人类免疫系统的层层防线,非常推荐。看完之后对于我们自己免疫系统的复杂性和鲁棒性的惊叹之余,又不禁会感叹这个系统是不是有太多的漏洞和后门了?特别是作为码农背景的人来说,似乎会觉得设计一个稍微复杂一点的(比如进入细胞膜时的)验证机制就可以有效地抵御病毒侵入了。对比一下,一方面是生物的世界,自然界中随机变异进化出来的一串 DNA / RNA、十几个基因就能编码出完美入侵层层免疫系统的病毒机制;但是在计算机软件的世界里,似乎充满了各种不兼容,不同的芯片体系结构,不同的操作系统,或者甚至只是不同版本的同一个库,都有可能会让程序无法正常运行起来,各种不兼容性正是软件维护中最费事费力的部分,也是软件在没有积极维护情况下会逐渐走向“死亡”的重要原因。为什么生物界会自然进化,而计算机软件则是自然灭亡?也许生物的进化和繁荣和“病毒能够轻易入侵我们的免疫系统”是来自于同一个根本原因。

虽然号称是地球的主宰,但是我们其实并没有办法直接利用太阳赏赐的能量,因为我们无法进行光合作用,我们生命中所必须的能量必须通过吃别的植物或者动物制作好的能量包来获取,这里回到《Guts》这本书,我们可以通过“吃掉对方”的方式来获取能量的根本原因是我们和我们所吃掉的动物、植物的基本 building block 都是差不多的:碳水化合物、氨基酸、脂肪。这种高度同源和一致性带来了更多的“后果”:某些动物或者植物里的某些成分可能刚好和我们生理机能里的某种激素、维生素或者其他东西差不多,但是由于摄入量过多,或者虽然“差不多”但是又有细微差别导致功能不一样之类的各种原因会导致我们身体机能异常,所以会“中毒”;但反过来这也同时使得我们可以通过许多动植物的提取物来治疗各种身体异常和病症。不止是动植物,实际上整个地球上的所有生物(包括定义模糊的病毒)都具有高度同源性,比如《Guts》里有提到我们的消化系统里其实有很多有益的细菌在帮我们消化各种我们自己无法消化的东西,并且产生荷尔蒙平衡,影响我们的心情甚至决策之类的。

高度的同源性和兼容性似乎使得整个地球生态圈构成了一个完整的循环,不断发展和进化。到这里不禁想到了其实计算机领域里也经常能够见到这样的情况:比如 PC 打败各种厂商各自开发的互相不兼容的计算机逐渐崛起并成为主流平台的一大原因就是开放的标准和接口、平台。当然高度的同源性同时也有其缺点,就是过度的单一化会降低整个系统的健壮性,如果某个基本组件突然丧失功能性了,那么整个系统有可能会全线崩溃。想起之前在哪里看过的一本科幻,里面的一个外星生物吐槽地球上的生物怎么都“长得差不多”,刚开始有点不理解,现在想起来,虽然我们觉得地球上的生物大千世界,从蟋蟀到老虎,怎么能说差不多呢?但是也许只是我们自己身处其中,才能分辨出区别吧,也许对于其他智慧生物而言,我们都只是难以分辨的大分子碳链聚合生命体。就好像你看 BBC 纪录片,成千上万只企鹅挤在一起,肯定也觉得它们都差不多,但是如果你是群中的一只企鹅,肯定会觉得每个“人”都不一样呢。

另一本跟刚才讨论的话题有一点点相关的书是《Code : The Hidden Language of Computer Hardware and Software》。前面讲到生物系统的同源性,所有生命体都通过核糖核酸控制蛋白质的表达的方式来运作,虽然对比起来计算机平台和体系总是会有这样那样的不兼容性,但是实际上和最初的“计算机器”比起来已经是有各种质的飞跃的。最早期的计算机器通常针对某个具体的问题来设计,比如计算器就是一个典型的例子,机器的输入输出组件、内部电路结构等等全都针对这个问题来设计,如果要解决一个不同的问题,就需要完全重新设计另一个机器。到冯诺依曼开始造计算机的时候,存储程序计算机的概念慢慢成熟起来,这里一个质的突破是计算机不再是一个解决某个具体问题的机器,而是一个通用的指令执行器,换句话说,“程序”和“数据”得到同等对待,程序可以(像数据一样)通过 IO 传输给计算机,也可以(像数据一样)被存储在内存中进行读取甚至修改。几十年过去了,现在我们所使用的计算机仍然是基于这样的基本冯诺依曼架构。不过其实图灵在设计他的图灵机理论模型的时候原本就是以 universal machine 的形式来设计的,一个 Universal Turing Machine 可以通过输入指令来模拟其他任何图灵机。在计算机编程普及的今天我们大概会觉得“存储程序”是一件非常自然的事情,并不值得称作“突破性进展”,也许这本书可以让你对它的重要性有一些更多的认识。

当然这是我作为 CS 专业的视角解读的结果,EE 相关专业的朋友纷纷表示这其实是一本《数字电路》主题的科普读物。总的来说本书从最底层的串联并联电路开始讲,构造继电器,逻辑门,再构建加法器、译码器、bit 内存,再到存储程序的概念,一直讲到最后的操作系统的概念,从硬件到软件在不需要任何预备知识的情况下讲解了计算机的概念以及如何从头到尾构造一个计算机。个人觉得虽然前面几章和后面几章有点零散,但是整体来说是非常有趣的一本书,特别是用电路构造逻辑门,一步一步地构造起一个完整的内存和 ALU、计数器之类的元件的内容,感觉刚好是属于自己所不知道的(本科 CS 的体系结构学到的最底层的元件就是 ALU,然而 ALU 内部是如何构造的并没有想象过)同时又是相关到比较容易理解的内容范畴,于是非常有吸引力。

不得不说看到中间都有种热血沸腾的感觉,突然都有点想自己去从头 build 一个计算机(哪怕是做软件模拟器)的冲动。而且看到摩尔定律,也真有点振奋人心,以往不觉得特别厉害,但是意识到最早期的计算原件是用(机械)继电器、真空管之类元件构造起来,要做一个处理八位二进制加法的单元都需要无数这样的元件,而且每个元件都很大又很容易坏,在那样的情况下真的很难想象今天这种计算机在生活中无处不在的样子。事实上计算机的构造基本原理一直都没有本质的变化,只是从继电器变成了晶体管让我们现在能制造尺寸和能耗更小、速度更快、可靠性更高的集成电路,但是似乎量变在某个时候引起了质变。

到这里好像突然有点理解为什么现在有许多人对于神经网络能做到越来越大越来越快这件事情也会激动异常了。我原本一直认为目前 AI 里的内容,如果不在算法和模型方面做根本上的改变,那么在一些特定领域做出突破性进展和改变肯定是可以期待的,但是离真正的人工智能还是差了几个跃迁,比如人类在进化过程中发展出(用于交流和组织自己的思考的)语言算是一个跃迁,目前的算法如果不能做到类似的跃迁,那么在面对训练时的 sample complexity 之类的问题不久就会碰到瓶颈。但是回看计算机的发展史,不禁又让人觉得,光“量”的变化能够引发的可能性也是无穷无尽啊,也许真的可以好好期待一下神经网络在大和快到某个现在难以想象的数量级之后又会是怎样的光景呢!

另外这本书超级骗稿费嫌疑,有很多图示,明明一页以前刚 show 过,在下一页提到就又复制一遍,虽然看的时候确实方便了很多(不用来回翻),但是真是很浪费纸张呢!不过还是非常推荐买啦!

接下去介绍一些其他最近看过的书,总体还不错,大概都在四星左右。

  • ✦✦✦✦✧《A Random Walk Down Wall Street - The Time-Tested Strategy for Successful Investing

    投资入门书(针对美国的情况),从 1973 年以来已经是第 12 次再版,算是有很多数据可以印证副标题里的 the time-tested strategy。作为一个金融外行,感觉里面讲的内容都很有道理,只给 4 星是因为讲得比较啰嗦,感觉核心思想其实比较简单:金融市场几乎约等于 random walk,想要 consistently beat the market 几乎是不可能的事情,能够 beat 的只是少数人并且几乎主要是靠运气(或者违法的 insider information 之类的)。所以在考虑了交易 cost、时间成本、tax 等各种因素之后,普通人最合适的投资策略就是定期买并长期持有 total stock market index 这样的,跟着整个市场一起走来对抗通货膨胀。但是讲这些东西感觉花了超多的笔墨,而且不断地重复,感觉与其写这么大一本书反复强调这些内容,还不如花一点篇幅简要介绍一下书里提到的那些金融概念的定义,外行表示看到什么 Security、Bond、Mutual Fund、ETF、Index 之类的都是一愣一愣的。

    书分为四个部分。第一部分是讲两个主要的市场模型。Firm Foundation 理论是指市场根据 intrinsic valve 来浮动,如果高于 intrinsic valve,价格会跌下来,反之则会涨上去。感觉很合理,不过感觉所谓 intrinsic valve 几乎是无法准确估计的,所以是不太有啥用处的理论。第二个是 Castles in the air 理论,讲市场涨跌并不是依赖于 intrinsic valve,而是取决于大家的心里价位,只要大家觉得还有人会出更高的价格,那么价格就会涨上去,这是所谓 behavior finance 的观点,当然也很合理,感觉市场里很多时候看似完全不合理的疯涨,包括次贷危机的时候,很多投资人其实并不是傻傻地不知道这个是完全不合理的,而是知道(或者预期)这样的不合理行为还会继续下去,所以即使离 intrinsic valve 已经千差万别了,但是还是能赚到钱的,而且就像《大空投》里描写的那样,这种时候逆着大势按照“正确”的方式来,如果不是有足够的资金做缓冲的话,你有可能先输得血本无归。当然问题就是没有根基的疯涨通常都会有最终崩盘的时候,理论上来讲只要不被套到崩溃的那一个时间点就没事,不过要预测崩溃点基本上也是完全不可能的吧。书第一部分剩余的章节列举了从 16 世纪开始到现在的各种从疯涨到崩盘的事件。故事到是挺有趣的,主要 point 应该就是市场无法预测吧。

    第二部分简单介绍了一下专业投资人们都是怎么搞的,一类(比较小众的)属于所谓的 technical analysis,基于 Castle in the air 理论,无视 intrinsic valve 之类的东西,主要只看图表,根据历史走向来预测未来涨跌;第二类是 fundamental analysis,基于 firm foundation 理论,尝试用各种方法来估计 intrinsic value。总之两种都不是特别有效。

    第三部分介绍了一些比较新发展出来的工具或理论,有一些还是比较合理的,比如 modern portfolio 理论,如果把回报的 variance 当作投资的 risk 的话,那么选择期望回报相等,但是多种比较多样化的投资方式会降低 risk,其实数学上就是对多个不完全 correlated 的随机变量求平均可以降低 variance 的结果。还有其他一些比如 smart beta,risk parity 之类的。

    第四部分则是一些投资的 guideline,感觉还挺 make sense 的,不过好像也没有看到什么特别 mind blowing 的内容。但是感觉整本书的中心思想其实就是这样,不要总指望着能靠投机倒把一夜暴富,投资是一个长期缓慢的过程,没有什么捷径可以走。一些有用的建议包括:1. 投资要趁早,资本是慢慢积累的,并且复利会帮很大的忙。并且投资时长拉长之后(比如 25 年的尺度),市场的许多起伏都会被 smooth out,只要整体经济还是在发展没有崩溃,就还是会有比较不错的收益。2. 投资方式要跟你对抗 risk 的能力相关,比如如果退休了没有其他收入,那么对 risk 的抵抗能力是相当小的,但是年轻的时候应该就能承担更大的 risk,不过即使是年轻的时候也应当持有一定的(比如够三个月生活开销)cash 或者其他类似的能够迅速周转的资本,用来在各种突发情况中使用。3. 避免或者推迟交税,这里比较好玩的是作者有多次提到最棒的是如果你把交税拖延得够久,等你死掉了财产作为遗产捐赠的话,(你)就可以完全避免交这笔税了…… 4. 多样化投资,直观来讲就是不要把鸡蛋放到一个篮子里,数学支持就是刚才说到的降低 variance。5. Dollar cost averaging,也就是无视市场的涨跌,定期(每周或者每月之类的)投资固定数额,这样也可以帮忙 smooth 一下由于对市场涨跌判断失误带量的不必要的损失。

    总之最后感觉最稳妥的投资方式就是避免频繁买卖交易,定期购入并长期持有比较 diverse 的 index fund 或者对应的 ETF,比如 SP 500 或者更 diverse 的 total stock market index 之类的,然后再通过其他一些比如房地产投资之类的来加大一下 diversification。最后我发现原来作者现在是 Wealthfront 的 Chief Investment Officer。感觉在资本还比较少的时期是不是好好存 401k,然后再用用 Wealthfront 的投资和 cash 账号就够了。

  • ✦✦✦✦✧《Lifespan : Why We Age—and Why We Don’t Have To

    整体来讲这是一本非常啰嗦的书。感觉作者没有分清科普读者和传记读者的区别,后者可能会对他研究的发现过程和整个来龙去脉,如何从某一次晚餐的愉快讨论发展到学术合作之类的等等细节很感兴趣,但是如果讲太多这些东西对前者来说就有点无聊了🥱,而且后面的一些内容感觉跟题目的关系都有点过于牵强了,我就非常迅速地扫过了。

    我觉得我看这本书的两个主要的收获是:1. 了解到了“自由基抗衰老”基本上是在科学上站不住脚的纯商业宣传;2. 更多地了解了一下 epigenetics。(特别因为第二点给本书加一星)我们身体里所有的细胞都有(大致)一样的 DNA,那么是什么决定一些细胞变成神经元,另一些变成肝脏细胞、皮肤细胞等等的呢?这些就是由存储在一个叫 Chromatin 的结构中的 epigenetic 信息来决定的。第一次了解到相关的东西还是在 2018 年 NIPS 的一个 invited talk 上:What Bodies Think About: Bioelectric Computation Outside the Nervous System。那个 talk 讲得核心思想是,不同细胞的不同基因表达并不是一个简单的事先定好的表达计划,而是一个更复杂的自适应系统,这里所有的细胞组成一个计算系统,会根据细胞所处的环境、细胞之间的相互关系来动态地计算和决定哪一部分细胞进行怎样的基因表达——这个计算系统和我们的神经元组成的神经网络的运作方式是类似的(前者应该是后者的原型)。本书里提到基因里存储的信息是离散的,或者说是 digital 的,通过 ATGC 四种单元进行编码,从 analog 进化到 digital 的一个巨大突破就是信息在对噪音、错误、损害等的容忍性上得到巨大提升,基本上跟早期贝尔实验室为了避免电话信号在传输过程中逐渐被传输噪声破坏而做出的努力如出一辙:香农发展出了信息论,并由此推动信号由模拟信号转为数字信号。书中提到,epigenetic 的信息仍然是以模拟信号的方式存储的,会比基因信息更容易受到各种环境影响(宇宙射线、氧化等等),这个信息的损耗的过程,构成了我们衰老的一个重要原因。

    到这里为止感觉都还讲得挺清楚的,后面感觉就各种散乱冗长地把各种只有一点点关系的东西也都拿过来说,什么长寿的社会影响啊之类的,整个书的结构也乱了。当然可能根本原因是本书的主题太大,这方面的研究应该还处在比较初期阶段,目前为止真正搞清楚了的东西也非常少,所以只能东扯扯西扯扯了。

    书中提到的一个比较有趣的 hypothesis 是,寿命的长短并不是不同生物进化的完美与不完美的区别,因为进化的目的其实并不是让某一个体或者某一代的生命体活得更长,而是要让这个物种(的基因)能够长久延续下去。所以,比如比较容易被吃掉的动物(prey),经常会进化成寿命短+早生贵子的机制,只要完成基因传递的任务就大功告成了,反正指不定哪天就被抓去吃了,还不如早早死了把宝贵的生存资源留给下一代。

    另外书中有列了几条关于长寿的具体建议:fasting,定期禁食一下下;运动,特别是 High Intensity Interval Training (HIIT),和 diet 甚至 fasting 结合;时不时让自己受冻一下,也是不是让自己热一下(比如蒸桑拿)。总之就是时不时让自己有点危机感,多激活一下体内在远古时代还是单细胞的时候就进化出来的遗传信息自检、查错和修复机制。

  • ✦✦✦✦✧《Atomic Habits : An Easy and Proven Way to Build Good Habits and Break Bad Ones

    讲如何形成好习惯和改到坏习惯的书。内容本身感觉比较有意思也比较合理,只是讲得比较啰嗦,举了超多的例子,把简单的事情分成很多章来慢慢讲。感觉只要看到第三章就够了,或者如果要看全部 20 章的话,可以直接跳过正文看每章末尾的章节总结。

    作者提出了两个比较重要的观点。首先是讲我们应该追求一种状态,而不是追求一个目标,因为后者很难把握,如果是太容易实现的目标,通常会一下子把这个成就刷了然后很空虚无法后继,但如果是太难实现的目标,又会长期无法达到而由于挫败感而无法后继。所以我们应该追求状态改变。比如并不是要去学会某一种乐器,而是要做一个 Musician ——这里的 Musician 是一种状态,只要你在每天坚持练习乐器,就处在这种状态中(当然 Musician 并不是指 Professional Musician 的意思)。

    第二个观点则把习惯的养成细分成四个步骤:1. Cue; 2. Craving; 3. Response; 4. Reward. 其中前两个步骤是问题阶段,后两个步骤是解决阶段。举一个例子:1. cue: 手机出现新提醒。2. craving: 想知道有谁给我点了赞。3. response: 拿起手机开始看。4. reward: 看到了是谁点赞,很开心。这样一个循环在 reward 的强化之下逐渐会形成一个习惯:有提醒就会立刻拿起手机来看。如果你认同作者对习惯形成的四个步骤的划分的话,那么下面四个方面帮助形成好习惯的方式就很自然了:1. cue: 让它更容易被注意到。2. craving: 让它更吸引人。3. response: 让它更容易做。4. reward: 让它更令人满意。反过来摆脱坏习惯的方式就是:1. cue: 让它不容易被注意到。2. craving: 让它不那么吸引人。3. response: 增加阻碍让它不那么容易做。4. reward: 让它不那么令人舒畅。

    感觉其实这里提到的很多方式我们平时在尝试改善自己的生活习惯的时候也都多少尝试过,不过像他这样系统地总结对应罗列出来确实清楚很多,也比较容易对症下药。比如为了让自己不要老是吃零食而把零食放在比较难找到的地方其实就是第三条的实践。

    书的剩余章节基本上就是对这四大方面的扩展讲解,举了很多事例,也有一些比较具体的小建议,但是整体就比较散乱了。比如有讲一种 Habit Stacking 和 Temptation Building 的技巧,基本上就是通过现在已有的习惯来辅助构建新的习惯,比如跟自己约定每次睡午觉之后要运动 7 分钟,或者说每次刷手机之前先要处理邮件收件箱。

    还有讲比如很强的自控自律能力其实更多的是靠改变环境,或者消除引发坏习惯的 cue 而实现的,真正靠意志力来实现自控是非常难的。The people with the best self control are typical the ones who need to use it the least.

  • ✦✦✦✦✧《The Idea Factory : Bell Labs and the Great Age of American Innovation

    讲述了贝尔实验室的兴与衰。得益于电话刚刚发展起来时大规模、长距离通讯系统的复杂性和脆弱性,AT&T 说服了美国政府让他们能在几十年间保持垄断状态,使得贝尔实验室有充足的资金和自由度去做各种大规模前沿性科研项目,鼎盛时期员工数量达到近三万人,晶体管、微波通讯塔、越洋海底电缆、主动卫星通讯系统、信息论、数字信号传输、CDMA、光纤、移动电话(cellular)、C 语言、Unix 操作系统……各种革命性的技术在这里诞生或者得到关键性改进和应用,可以说是奠定了工业界实验室所进行的大规模科研项目的模式的先例(对比大学里相对小的项目规模和人员组成)。直到后来国家决定肢解 AT&T,贝尔实验室从此颠沛流离,时至今日虽然 Bell Lab 这个名字还在,但是已早已不是当年的 Bell Lab 了。

    我觉得读 Bell Lab 的历史,有点像看《三国演义》,从桃园结义开始,一腔热血扫黄巾、驱董卓、打天下,三顾茅庐、火烧赤壁、五虎上将,到后来从大意失荆州开始,情节开始急转直下,后面的孔明七出祁山,小说的情绪早已从先前的热血沸腾变成了苦苦的挣扎。“滚滚长江东逝水,浪花淘尽英雄。是非成败转头空。青山依旧在,几度夕阳红。白发渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢。古今多少事,都付笑谈中。”感觉再不能说出比这歌词更应此时心绪的话了。

    不过这么一段惊心动魄的历史,被作者写成这样也真是非常可惜,中间我好几次都差点直接弃疗了,还好看到了最后。本书大概是坚持贯彻了英文里很常见的意大利面条式的非虚构文体,简单来说就是各种颠来倒去的穿插式叙事,讲历史、事件、故事,讲到最精彩的地方,突然闪回几十年前哪里一个小农场,开始讲主人翁小时候的身世和他爹是做什么营生的。也许如果是写人物传记(而不是以整个 Lab 为主体),亦或者是至少全书只有一两个中心人物的情况下的话这种叙事方式可能比较可行,但是贝尔实验室几十年的历史,如此多的重要人物,这样颠来倒去不仅让人看得很抓不到重点,而且经常看得想打瞌睡。总之也许我自己不太喜欢看人物传记也是一部分的偏见,我觉得如果写技术史的话原本可以是非常精彩的一本书,被作者写得一团乱麻了。不过书后面有 30% 都是引用和注释,可以看到作者确实是花了很多时间去调查和整理,而不是只是为了吸引眼球而写一些八卦轶事。

  • ✦✦✦✦✧《拉丁美洲被切开的血管

    “在这块土地上,我们看到的不是资本主义原始的幼年时期,而是资本主义血腥的衰败。不发达并非发达的一个阶段,它是发达的后果。”本书试图解剖帝国主义和资本主义在发展过程中对拉丁美洲所进行的残酷掠夺如何导致了“今天”的贫穷与动荡。从最初的虐杀、奴役,到后来采矿、淘金,再到可可、棉花、咖啡、橡胶,再到后来的工业、商业上的控制与压榨。基本上西方世界工业革命的发展史这一页纸的反面就是拉丁美洲的受难史。不过这究竟是过去的历史?还是历史依然在不同的地方以不同的形式上演着?

  • ✦✦✦✦✧《天下刀宗

    武侠小说。总体来说还不错,不过感觉人物比较单薄,虽然也算是有一些各式各样的性格,但是感觉都是同一个模子做出来,再加了一点微调,所以看半天经常都还分不清谁是谁,而且有点故作神秘的感觉吧。

  • ✦✦✦✦✧《日本人为何选择了战争

    东大教授加藤阳子给中学生办的几次讲座的讲稿整理成书,文字比较口语化,整理了一下日本在几次战争(甲午战争、日俄战争、一战、二战)中做出这样选择的缘由。当然是从日本人的视角出发来叙述,但也并不是要 justify 或者反省什么东西,主要还是一个客观的态度来讨论历史。感觉从方法论的角度来说还是蛮有意思的,因为我自己上学时对历史的印象就是“死记硬背”,作者这里试图以一种归纳总结的方式将不同时间地点发生的事情联系起来并总结背后的规律,确实会让历史这门学科变得更有趣一些(也许这么做的目的一方面是为了勾起中学生们学习历史的兴趣)。当然历史事件本身往往是纷繁复杂的,这样的归纳总结肯定免不了会省略一些“不重要”的部分,总会引发不同的争议;并且和自然科学中所总结的规律不一样的是,历史规律一般都不同容易通过实验来验证正确性,所以最后可能不同的人也会做出不同的理论或者解读,甚至各种阴谋论吧。

    总之日本那个时候确实疯狂地全民动员起来了。感觉即使政治体制上可以尽量做到分散和制衡权利,避免个别极端分子就能做出过于出格的事情来,但是另一方面如果某种集体情绪(民族情绪或者宗教信仰、意识形态等等)被整体煽动起来了,真是非常可怕的事情。我想我对于宗教甚至于同学会、同乡会之类的无端鼓励归属感的组织方式的疏离感可能很大程度也是这方面的原因吧。

最后是和艺术相关的书。

  • ✦✦✦✦✦《Morpho : Anatomie artistique》:很棒的艺用 anatomy 书,被翻译成了各种语言,后浪有出中文版(不过基本全是图没有几个字,所以其实基本不用翻译了)。书里的画都超美,很多都是非常动态的姿势和角度下展示不同肌肉的状态,而不是简单的站立正面背面完事,封皮附录有主要肌肉的编号,部分插图上有根据这些编号对肌肉进行标示。我花八个月,终于临摹完了(大概 320 页),临摹的时候用不同颜色的马克笔把不同的肌肉涂色标出来,感觉最后对人体(表面)肌肉结构有非常大的帮助。

  • ✦✦✦✦✦《Graphic L.A.》:一本画册,加上一小部分文字讲解,主要讨论了如何让画看起来更“真实”:并不是要描绘出所有的细节,而是要把握好颜色深浅、边界钝锐等之间的关系。大部分画都是通过简单的几何形状构造出来,同时具有平面设计的那种干净的简化美感,但是又没有丧失画面其原本的真实性。中间还有几幅画有详细的构造过程。总之是很好看的一本画册,不过就讲解的内容本身,由于文字说明比较少,可能结合其他的参考资料一起看会能挖掘出更多有用的东西。

  • ✦✦✦✦✦《Understanding Perspective: Easy Techniques for Mastering Perspective Drawing on Location》:The Urban Sketching Handbook 系列里的一本关于 perspective 的小册子,technique 都是基本的一点、两点、三点透视,以及一些广角镜头的情况之类的,放在 urban sketching 的 context 里,结合一些来自不同的 urban sketcher 的不同风格的作品来举例介绍,还不错啦,画也都挺漂亮的。总之虽然不是我看过的讲 Perspective 最好的书,但是如果是对 Urban Sketching 感兴趣的话,也算是不错的参考。

  • ✦✦✦✧✧《Title: Drawing with a Tablet – Easy Techniques for Mastering Digital Drawing on Location》:Urban sketcher 系列里的讲拿着 iPad 到处画的书。感觉现在 iPad Pro 已经逐渐在替代 Wacom 成为 digital painting 的主要工具,并且其更高的便携性也让它做现场 sketching 工具也更便利,不过介绍用 iPad 画画的书还比较少,所以看到这本书的时候还挺兴奋得。但是拿到手非常失望,有用的信息感觉比想象中要少很多,不过最不满意的是作者本人的画(包括各种示例)感觉简直就是 digital sketching 的典型反例合集,各种滥用的 air brush,扎眼的配色,马虎的 edge 处理等等😂,虽然书里也还有一部分别的 artist 的作品示例,看起来倒还都挺好看的,但是总体来讲是非常不推荐的一本书。

Arduino and Procreate Art Keyboard

$
0
0

疫情宅家琢磨好玩的东西改善自己的课余生活和心理健康的时候偶然发现了Arduino这个东西。作为软件出生的人来说比较常听到的是Raspberry Pi,这个东西其实就是一个比较小比较便宜的电脑板子,里面有一个完整的 Linux 系统,一方面来讲它的功能更强大,就是电脑能做的它都能做,但另一方面似乎也让它觉得有点鸡肋,比如如果家里已经有电脑了,为啥要用它?也许做一些简易机器人或者小车子之类的时候会比较有用,但是我看网上介绍的一些常见的 Raspberry Pi 的 project,诸如做一个家庭的媒体服务器之类的,如果家里已经有台式机或者空余电脑的话,就比较牵强。当然,也许它的主要目的不是有多大的实用价值,而是让大家能动手去玩,起到学习、玩耍和提升兴趣这一类的作用。

相比起来,Arduino 是一个更加底层的东西,并没有一个完整的操作系统跑在里面,所以做简单的事情 overhead 没有那么大,而且没有 USB 供电的时候用普通的 5V 电池就能驱动。此外定制的过程除了编程之外,还需要通过面包板用线把不同的针脚接起来,或者甚至直接用焊锡焊起来,对我来说是比 Linux 编程更加未知的领域,所以听起来更好玩一些。

上图是三个 Arduino 板子(其中有两个已经做成了蓝牙小键盘加上了按钮)和一些乱入物件的体积对比。Arduino 板子的类型比 Raspberry Pi 要多很多,不过如果作为入门上手的话,在亚马逊或者其他很多网站上都能买到各种不同的 starter kit,提供板子和相应的各种小零件(线啊、LED 小灯、面包板、各种 sensor、按钮之类的),并且会附送一个包含几十个入门项目的 tutorial 文档和相应的 code,让你上手了解操作流程,以及可以用板子来做些什么事情之类的。比如我入手的 starter kit 里有湿度计、加速度计、超声波距离探测之类的 sensor,还有小马达、摇杆按钮、红外遥控器之类的输入设备。

Arduino 板子有一些针脚可以提供数字或者模拟信号的输入和输出,用面包板或者直接插线的方式把板子跟 sensor、以及输入和输出设备接起来,然后就可以通过写程序来读取 sensor 或者输入设备的数据,进行处理之后再通过输出设备给出反馈了。虽然 Arduino 不是像 Raspberry Pi 那样有整个操作系统,但是它是一个 microcontroller,并不需要写像 Verilog 那种程序,如果用 Arduino IDE 的话,基本上可以用 C++ 来写程序。例如下面一段代码:

  1. // Define Pins
  2. #define BLUE 3
  3. #define GREEN 5
  4. #define RED 6
  5. voidsetup()
  6. {
  7. pinMode(RED,OUTPUT);
  8. pinMode(GREEN,OUTPUT);
  9. pinMode(BLUE,OUTPUT);
  10. digitalWrite(RED,HIGH);
  11. digitalWrite(GREEN,LOW);
  12. digitalWrite(BLUE,LOW);
  13. }

展示了如何控制一个彩色 LED 灯,把 LED 灯代表红绿蓝输入的三个针脚分别接到程序中常量指定的 pin 上(把接地的针脚也接到板子的 ground 那里),然后在setup函数中设置好三个 pin 为输出模式,就可以通过digitalWrite写入使 LED 显示红色。板子在初始化的时候调用setup函数,之后会不停地调用loop函数,在loop函数里就可以写一个循环来更新 LED 灯的颜色(用analogWrite可以写入 0 到 255 之间的颜色值,三原色组合起来就可以形成很多种不同的颜色),或者查询某些接到板子上的按钮或者 sensor 的状态来设置 LED 灯的颜色之类的。

总之具体做什么玩意就看自己的想象力了,对于熟悉软件开发的人来说,可能这种混合程序和接线的方式更有种“动手玩”的感觉。不过总体来说还是玩的成分更大一些,如果真的要做出比较实用的东西,感觉还是相当费劲的。

不过最开始下决心玩一玩 Arduino 其实也是基于一个比较实际的需求:Procreate Art Keyboard。Procreate是一个非常棒的 iOS 上的绘画 app,配合 Apple Pencil 使用简直是最棒的体验,当然其强大和灵活性方面还和桌面电脑上的重量级程序还有一点差距,但是 iPad 随手拿起来就可以开始画,和电脑要接数位板,一大堆线,还要启动程序之类的相比就太无阻力了。但是 iOS 是一个比较新并且非常封闭的系统,所以其灵活性非常有限。

在绘画(或者其他相关的诸如照片处理、视频编辑之类)相关的工作流程里有一个非常重要的元素就是快捷键:比如在笔刷、橡皮、选择工具之间快速切换,快速调整笔刷大小、透明度,快速取色、选色等等,对于绘画流程的流畅程度影响很大。在使用电脑进行绘画的时候有很多辅助工具可以选择,比如老牌的 Wacom ExpressKey(下图左上)有按钮可以触发快捷键,也有旋钮可以触发连续值改变(比如笔刷大小),可以针对不同的软件分别定制;比较新颖的也有 Surface Dial(下图右上),硬件上就是一个 dial,但是配合软件实现也有非常高的可定制性,不过 Surface 弃用 Wacom 开始用自己的压感笔技术之后许多年一直没有改进,写字记笔记还可以,画画感觉就不是特别胜任。下图右下是 Razer Tartarus V2 单手键盘。特别是 Razer 的单手键盘,本身是设计来给电脑游戏玩家用的,但是由于桌面操作系统的开放性,导致很强的可定制性,于是各种不同的设备和程序都可以结合起来使用,比如这里我们就可以通过定制单手键盘的按键来映射到 Photoshop 或者其他绘画程序所使用的快捷键上来实现想要的功能。此外,桌面操作系统还允许有诸如 AutoHotkey 之类的程序来对快捷键做更高的定制,比如根据上下文来判断触发什么样的行为。

相比之下 iOS 简直是封闭系统之典范,比如时至今日外接键盘仍然是无法使用第三方输入法的。回到画画的问题上,iOS 的强项是触屏,各种 Art App 其实也都提供了触屏的“快捷键”,比如 Procreate 在触屏左边有两个 slider 可以分别调整笔刷的大小和透明度,也有一个快捷键按钮,可以有一些可定制功能,比如按下的时候就可以用笔进行取色,还有一些快捷手势,比如两个指头 tap 就是 undo。听上去很美好,但是实际使用的时候触屏按键问题多多,按键没有反馈还是小事,主要的问题是触屏按键经常会失灵,我猜测应该是 palm rejection 功能导致的,因为系统一方面希望用户可以在画画的时候把手放在屏幕上,而不会误把手掌当做手指 tap 而出发“快捷键”功能,所以会对一些被认为是 false alarm 的 tap 有抑制作用。实际上整个 palm rejection 功能虽然已经比较厉害了,但是只要还没有到 100% 精确的程度,就总会有 annoy 用户的地方,除了会让“快捷按键”经常失灵无法按出来之外,还会不时错误地由于手掌而出发快捷按键,即使戴上了上图左下那样的“Art Glove”遮住小指、无名指和下面那部分手掌能很大程度上解决误触发的问题,但是由于系统没有提供完全禁用 palm rejection 功能的选项,所以“无法触发”的问题依然存在。

总之基于触摸屏的快捷键虽然潜力很大——因为不受硬件按钮形状的控制,可以提供任意复杂形状和功能的 UI,但是目前的可用性还有相当大的改进空间,所以如果有一个硬件的快捷键盘能在 iOS 上使用的话,会很大地提升绘画的愉悦程度。当然,显而易见地,上面提到的各种产品,以及其他各种诸如 ClipStudio Tabmate 之类的第三方产品没有一个是能在 iOS 上用的。

这就是用 Arduino 手工制作 Art Keyboard 的动机了,虽然 iOS 系统限制很大,想和 app 通讯基本只能单向发送简单的按键和组合键,但是也算勉强够用把。当然毫无 Arduino 经验的我也不会想到可以做这种东西,还是看到 Procreate 论坛上一个叫 Jorge Verdugo 的网友发了一个帖子展示了一下他自己 DIY 的 keyboard。跟确切地来说应该是一个 remote 一样的东西,可以单手拿着操作。

使用的 Arduino 板子是Adafruit Feather nRF52832,这是一个带蓝牙功能的板子,所以可以通过蓝牙和 iPad 连接起来,而不用接线。供电可以使用普通的电池,不过如果使用可充电电池的话,接好电池之后就可以用板子上自带的 micro USB 接口进行充电。其实原理上非常简单,输入是一些按钮,按钮连到 Arduino 的输入 pin,板子监听到特定的按键之后,将定制的键盘组合键通过蓝牙发送到 iOS。其中最复杂的部分大概还是在于按钮了。首先,最直接的连接方式是每个按钮连接板子的一个 pin,但是这样 pin 的数目必须跟按钮一样多才行,比较常用的办法是将按钮线路排布成一个矩阵,每一行和每一列分别占用一个 pin,然后行列组合出可以接一个开关(按钮),通过查看第i行和第j列是否接通,就可以解码出第(i,j)个按钮是否被按下,这样 2N 个 pin 就可以处理 N*N 个按钮。详情可以参考 Wikipedia 的Keyboard matrix circuit和这个Arduino 9x9 Keyboard Matrix Tutorial

即使通过矩阵编码的方式可以减少 pin 使用数量,但是布线其实更加复杂,如果完全用线来接估计会绕成一团,为了让做出来的设备还能保持手持大小,就需要跟高效的布线方式。这里之前那位 DIY 网友做了一个 PCB 板子——工作原理很简单,就是做一个和 Arduino 板子规格匹配的一个电路板,外部的 pin 可以和 Arduino 板子直接配对连起来,然后板子上根据标准规格的按钮大小实现设计好布局,哪里放哪个按钮,然后提供按钮连接的针脚,最后设计好板子内部的电路布线,使你插上按钮并把电路板和 Arduino 板子连在一起之后,按钮们在逻辑上是按照矩阵排列的方式连到 Arduino 的——当然,原理虽然听起来简单,但是实际操作我也不知道怎么搞,用什么软件来设计 PCB 电路板,如何调试测试,设计好图纸之后去哪里订购实际的板子之类的……好在 Jorge 有提供他自己做的板子供购买,同时还提供了代码,不过他并没有开源,我就不贴代码了,搞清楚蓝牙、键盘等相关的 API 函数之后其实是很简单的代码。

做出来的键盘(或者说遥控器)如上图,一个是“大号”的,按键比较多,一个是迷你版(图中被拆成两半了),按键比较少,但是因为电池是贴在下面的,所以也更厚一些。整个制作过程其实是很好玩的,因为 Jorge 给的 instruction 其实很不详细,而我有几乎毫无电路板的经验,包括买哪种按钮,什么样的针脚头,什么样的电池等等都不太清楚。到出售电子元件的网站上一看,真是惊呆了,简直有成千上万种按钮,好在似乎有几种固定的标准,所以大小和针脚形状都差不多。电池也是最后随便买了个相机的充电电池,用一根 Arduino 的电池线直接把正负极用焊锡接上。

至于焊锡,这是整个制作过程中让我最头大的部分,虽然大学金工实习课上焊过电焊,但应该不太一样吧……总之我在网上看了一些视频,买了焊枪、焊锡这些玩意,最后……还是靠 N 帮忙了。不过以前听人说焊板子,我一直以为焊板子是用焊枪直接在板子上画一个电路布线出来,原来只是把针脚连起来啊,瞬间觉得简单了很多倍,不过手抖的我还是很不喜欢搞这个玩意。下图左:N 在焊针脚;中:旧菜板改装的焊接工作台;右:安装按钮中。

最后一大一小两个键盘遥控器都顺利完成,在尝试将程序上传到板子上的时候还碰到了一些额外的困难,不过软件方面的 debug 我比较擅长,总之最后查阅了一些文档和蛛丝马迹之后,安装了某几个特定版本的驱动,再配合上“连续 reset 两次的 trick”之类的诡异方法最后还是搞定了。连上 iPad 的蓝牙的时候是非常激动人心的!Work like a charm 可能还不至于,但是至少是 work as expected。不完美的其实主要是一些小地方了,那些小按钮元件的按键手感并没有特别好,而且没有滑轮之类的可以用来改变连续值(比如笔刷大小)的输入控件(当然,即使有,也由于 iOS 和 procrete 本身的限制,目前还没有办法实现这样的功能)。最严重的问题还是 Procreate 本身,UI 上的 slider 改变笔刷大小是 log scale 的,但是通过键盘快捷键改变笔刷大小却是 linear scale 的,比较不能接受。想象一下如果你要以 1% 的线性增量将笔刷从 5% 的大小增加到 50% 的大小要按多少下按钮,反过来如果选择使用 10% 的增量,则无法选择小于 10% 的笔刷大小。总之还不是特别完美,但是目前来说还是比较够用的。而且制作过程还是比较 exciting 的,虽然现在还想不到还能用 Arduino 做一些其他什么玩意(也许可以做定制的电脑键盘之类的),但是感觉也算是打开了新世界的大门。

最后贴两张近期的 Procreate 画:一张是临摹,另一张是静物(虽然两张都是在做完键盘遥控器之前画的)。😃

Github based Comment System, and the Death of Independent Blog?

$
0
0

之前收到一些关于 Disqus 在国内加载较慢或者有时干脆无法访问的反馈,于是抽空研究了一下一些其他评论系统,发现现在(unsurprisingly)类似的系统似乎也没几个了,调查过程中不禁有些感触,于是想顺便写下来。

我在 2012 年之前都是用 Wordpress 平台写博客的,之后为了更高的可定制性(显示数学公式、生成 PDF 文档)于是用 pandoc 等工具手工搭了现在这个博客系统,使用静态页面生成的方式,这样不仅在 host 博客页面的时候非常轻便简洁,需要对网站进行备份的时候也极其便利(比如更早年的博客我虽然没有再用了,但是即使只是想要保持一个只读的网站,也必须要在服务器上运行完整的 Wordpress 系统才行)。静态网页的主要弱点当然就是无法 host 动态内容——比如用户留言。好在早些年静态博客流行,出现了一批专门支持用户留言的第三方服务,我在博客里采用 Disqus 现在已经变成了一个比较老牌的服务提供商。不过据说 Disqus 在国内时常是出于无法访问的状态。

说实话我对于某些机构对互联网的干预导致无法访问就需要对已经运行得比较好的系统进行迁移是比较反感的。而且工作以后花在个人博客上的时间也比以前少了很多,我自己也时常在自问自己仍然继续写博客的目的是什么,或者说原本的初衷是什么。不过如果有比较简单的方法能让博客访问更容易一些,那我也很乐意去尝试一下。总之我粗略地调查了一下,发现国内早些年间出现的各种类似于 Disqus 的服务(比如“多说”)现在基本都已经挂掉了,国外现在另外两个看起来比较靠谱的 alternative 是commentoHyvor Talk。不过在导入 Disqus 已有评论的过程中多少都有一些信息丢失,而且难保这些服务过一阵子自己会挂掉,或者又变得无法在国内访问之类的。

然后我发现有一批比较有创意的系统,把 github issue 变成了博客评论系统。因为 github 的 issue 本身就是和 blog 评论很类似的功能,而且 github 提供了 API 可以对 issue comments 进行操作,于是就可以做一个系统,把每一篇 blog 文章当做一个 issue,而 issue 下面的评论则可以作为博客评论显示在文章下面。我看到的几个目前还在维护的项目,一个是Vssue,基于 Vue 做的系统,功能比较强大,支持 github、gitlab 以及 BitBuccket 等不同的后端。另一个是gitalk,只支持 github。我这里使用的是utteranc.es,也是只支持 github,并且看起来比较 barebone,不过最轻便,配置起来也简单,就用这个了。由于 github issue 的 comment 系统不支持 thread 回复之类的,而且必须要用 github 账号登陆才能评论,所以干脆就让两个系统并存了:Disqus 依然是主要的评论系统,但是如果无法加载的话就可以使用下面基于 github 的评论系统。

其实评论系统从博客起源以来一直是一个软肋,早期的博客系统通常是内置评论留言系统,不过要做好一个留言系统其实不是一件很容易的事情:最简单的模式是允许用户自己填写名字、邮箱等作为留言者身份,但是这样很容易被 spam bot 给滥用,几种常见的解决方案一是在后台进行自动垃圾评论过滤(就连 Disqus 这种老牌的服务也有挺多误判的情况);二是各种奇形怪状的验证码系统;三是采用必须登录才能留言的方式,这意味着还需要做用户系统(注册、邮箱验证、密码恢复、修改头像之类的),如果本身并不是多用户的平台的话,这还是挺多额外的工作量的,并且如果每个博客系统都有自己的用户系统的话,对于想要留言的用户来说也会比较头疼。到后来各种博客平台开始变得臃肿,自己搭建个人博客开始流行之后,出现了各种小巧轻便的博客平台,比如可以生成静态 HTML 网页,或者甚至通过github pages自动发布等等,留言评论系统渐渐独立成为单独的模块,像 Disqus 之类的系统被广泛采用,不过到博客没落的今天,当初的各种类似的系统如今还留下的也没有几个了,似乎现在还能见到的比较有内容的讨论大都是有人将博客链接贴到其他以讨论为主的网站(Hacker News 或者 Reddit)之后大家在那里的讨论。

博客的广泛流行起来应该RSS功不可没——原本需要去各种不同的博客网站查看内容、检查是否有新文章之类的,现在通过 RSS 订阅不仅可以方便地获取更新,而且在一个统一的 RSS Reader 里就能查看来自所有已订阅的博客。但是 RSS 的流行也将博客系统在留言评论方面的不便性更强烈地暴露出来,因为 RSS 并不提供留言和评论方面的支持,如果需要留言,还需要再进入原来的网站,然后又回到了刚才的各种留言系统的问题。其实如果能将社区共享和讨论的功能和 RSS 结合起来,应该是挺不错的一种解决方案,不过如果没有通用标准的话,估计也会变成各家互不兼容的平台,对用户来说一样头疼。不过现实是这样的系统发展出来之前,博客就已经没落了。

Google Trends 给出的 2004 年到现在 blog 和另外两个相关搜索词的搜索频率的发展趋势。

虽然在互联网发展的大潮流中博客没落的原因千丝万缕,要列举的话可能还是有一些比较重要的因素吧。除了在鼓励用户参与和社区成长的留言和讨论系统的天生缺陷方面的原因之外,另一个原因大概是商业化吧。我没有把自己的博客当做赚钱的工具,拒绝商业化地交换链接和广告投放,不过从整个体系的可持续性发展来看,健康的商业价值也许是必不可少的吧。早期的互联网,应该有许多出于兴趣和热情的参与者,大家热衷于建立自己的网站,以及互相链接,后来互联网大规模兴起,吸引众多资金和资源,虽然互联网泡沫破灭让很多人破了产,但是互联网平台在后泡沫时代依然是亨受青睐的(像 Facebook 和 Twitter 这些成功案例都是在互联网泡沫之后出现的)。我感觉早期大家可能还在摸索各种不同的商业化模式,亦或者是对新技术和概念的狂热(就像现在的 AI 狂热一样)导致不需要真正有商业模式就能比较容易拉到投资,所以感觉在十多年前的互联网里兴起的各种平台都主要以积累更多的用户量为主,总之先有了用户量,其他的都好说。而一转眼到现在,似乎互联网主要的商业化模式大致都收敛到了“广告”,所以一切阻碍广告投放的因素都渐渐淹没在历史的洪流中。首当其冲的当然是基于 RSS 的内容订阅系统,由于用户可以直接通过 RSS 获取博客的完整内容,所以就不需要访问博客网站,所以博客平台就没有办法投放广告了。这导致有些平台开始只提供一个段落的内容,全文需要跳转才能访问,然后有些客户端开始提供(可能也是收费的)全文抓取功能,争斗之间用户的体验也越来越差,博客内容和阅读平台也都相继关闭。

另一个冲击来自于社交媒体的兴起(见上面的 Google Trends 图)。感觉个人博客除了少数有特定主题之外,大部分人都是写自己生活为主,事实上早期身边的小伙伴很多都在写博客,由此了解互相生活中发生的有趣的事,其实也是社交网络的初始形态。后来各种形式的社交网络兴起,就吃掉了这部分的功能——不论是从内容创建者还是消费者来说,社交网络用起来都更容易一些(例如之前提到的评论系统的缺陷,在成熟的社交网络平台上就都不再是问题)。和社交媒体同时兴起的还有移动互联网,我在 2012 年来美国读 PhD 的时候有了第一台 iPhone,并且当时到了一个新的环境一切都很新奇,几乎每天都会拍一些(现在看起来很无关紧要的)照片发到社交网络上,我印象非常深刻的是当时的室友有一天晃着手里的 iPhone 跟我说,I don’t think I need a computer anymore。我当时的反应和我现在的态度一样,认为移动设备主要长处在于 media consumption,除此之外大部分电脑能做的事情手机或者平板都还做不了或者做起来很痛苦,然而这些年我自己也越来越意识到的一点是:虽然如此,使用移动设备访问互联网的频率已经大大超过了通过电脑上网的频率,毕竟如果只是顺手搜索一个东西,或者看一下社交网络之类的,用手机真的方便太多了,即便触屏打字不方便,屏幕也小很多,但是还是比打开电脑要容易很多。从总体来看,可能世界上拥有一个(比如安卓智能)手机的人数大概比拥有一台电脑的人数要多很多。下图(来源)是 2013 年到 2019 年之间移动设备占互联网访问流量的份额。

社交媒体和移动互联网的发展带来的不止是方便快捷,同时也迅速地让信息洪流无限放大——我的博客的副标题这些年来一直是“We are drowning in information and starving for knowledge”,可见我自己也一直被这样的问题困扰。信息过载带来的各种各样的问题已经有点超出本文的主题了,所以这里就不多说了,对于博客的影响而言,就是人们不论是在内容创建还是内容消费方面都变得更加短平快,加速了博客的消亡。此外,移动互联网作为一块新鲜肉,在各大平台争食的过程中也出现了各种“平台锁定用户”、“互相屏蔽互不兼容”的情况,这似乎在当前的中国互联网环境中尤其明显,之前还看到有人戏称现在国内的互联网是“互不联网”。这跟博客公开地分享的初衷(?)也已经相去甚远了。

另外,让我们自己能切身体会的影响因素可能还是原本圈子的起落,比如某一个朋友圈子或者技术话题圈子,随着大家的兴趣转移,或者把时间投入到工作、家庭中之后,就渐渐地从原来的圈子消失了。导致我们能切身地感觉到周围博客内容的逐渐消逝(这样的起落同时也在各种社交媒体中能见到)。

不过其实也并不是什么悲伤的事情啦。说得好听一点是天下无不散的宴席,说得客观一点其实就是世界是一直在变化的,技术也会一直经历发展、变革。有一些东西会逐渐消失在历史洪流中,而另一些会进化成不同的形式继续存在,直到下一次变革。就博客而言,虽然前面说了这么多,但是其实所谓的个人博客的消亡,其实主要还是一种大众现象的消亡,博客不再是一种流行,但是博客这种内容分享的形式仍然继续存在着,并且留存下来的通常都是一些主题比较明确的博客(本博客的主题是什么来着??),时常能看到很有趣的内容,比如几个很随机的最近碰到的博客:Writing an OS in RustHow to Train Your ResNet等等。至于我自己,如果有什么我觉得值得分享的东西,也还是会继续发上来啦。虽然好像没有很认真地思考过这个问题,但是我觉得我写博客的初衷一方面是在分享和记录我自己的生活,另一方面其实也是一种非常有效地帮助我整理和思考的工具。从读者的角度来说(从访问统计和我收到的各种反馈来看),似乎我的博客里比较偏技术的部分更有用,这样来说这个博客这两年偏技术的内容减少也显得有些“注水”的趋势,但是其实从我的角度来说,无非是反应了我生活的不同阶段,比如我在写 SVM 系列博客的时候,其实就是在整理我自己学习 SVM 的笔记的阶段,而最近几年技术博客写得比较少一方面是我自己的知识面变得更加狭窄和专业,对技术内容的要求也变高了,如果是我觉得在专业上有用的东西可能会直接以论文或者 tech report 而不是博客的形式写出来,反过来如果我觉得没有太多用或者我自己也没有搞太懂的东西,就更没必要写博客了;另一方面我的课余生活的文化内容在这几年丰富了很多,所以课余学习和整理一些和科研离得较远或者自己不是太了解的东西的时间变少了许多。但是说不定我在未来的某个时候对自己的时间规划更有效率了呢?亦或者我突然下决心仔细学习一下某个不太了解的技术课题了呢?亦或者我以后只能写点贫嘴的文了呢?哈哈,未来就是各种不确定,才让人充满期待啊。

Work From Home Remote Connection Kit

$
0
0

随着美国 COVID-19 单日新增病例超过 66666 例,早日能够正常回到 office 上班的愿景就越来越渺茫了,于是把精力放在了改善在家工作的舒适程度上。这里记录和分享一些远程连接相关的工具和小 tip,希望对大家 work from home 也有一些帮助。

远程连接断线重连

远程连接的基本工具 SSH 相信大家都时不时会用到,不过在 WFH 的过程中每天都会大量用到的情况下,了解一些小 tip 还是会让使用过程愉悦很多。使用 SSH 最常碰到的麻烦事就是网络断开了,比如中午吃个饭电脑休眠了,再唤醒电脑的时候原来的 SSH 连接就很有可能不好使了。这个时候有可能会碰到下面一些情况。

网络断开了,但是 SSH 还没有发现这一点,处于无响应的状态,按 Ctrl+C 之类的什么键都没有反应,如果等待一段时间 SSH 发现网络断开了,会自动退出,这个时候可以重新连接,但是如果不想等待,似乎只有关掉终端窗口或者 tab(或者 kill 掉本地打开 SSH 的那个 shell)这些办法。起始还有一个简单的办法,就是按一下回车键,然后输入~.,SSH 就会立即断开。这里用到了 SSH 的 escape 命令,详细可以参考ssh 文档的 Escape Characters 一小节,除了断开连接之外,还能做很多其他事情,比如我们之后会讲到的打开 tunnel。

SSH 连接断开了,但是终端现在处于非常奇怪的状态,比如切换窗口或者 tab 的时候会不停地发出 beep 的声音,或者是在终端上答应出一些奇怪的诸如^[[I^[[O^[[I^[[O之类的字符串。这通常是因为在远程连接那边的某些程序(比如 tmux 或者 VIM)开启了鼠标事件或者焦点切换事件的 reporting,但是由于网络连接中断导致 SSH 连接断开了,所以没有正常关闭这些事件的汇报,可以通过 reset 的方式来恢复终端的正常状态——在 iTerm2 下面可以使用Cmd+R来实现。

最好的状态是 SSH 正常断开了,终端也没有进入奇怪的状态,这个时候只要重新连接 SSH 就可以了。不过重新连上去之后你会发现原来运行的命令由于 SSH 的断开也同时被 kill 掉了(包括通过&放在后台运行的进程),可能你的编辑器没有正常退出,文件没有保存,或者程序跑到一半挂掉等等,总之非常麻烦。好在这个已经是多年以来大家都会碰到的问题了,有许多工具可以帮忙解决。

第一类工具是从断线重连的角度来解决问题的,最简单的工具可能就是autossh,功能上类似于维护一个 while 循环,如果发现 ssh 断开了就自动重新连接,但是没有其他的功能,比如你在远程 server 上运行的程序如果 ssh 中途断开了,程序也会跟着终止运行。

更加高级一点的工具是Mosh: the mobile shell,我在之前的一篇博客中也安利过 mosh,之前上学的时候一直用它。Mosh 特别适合于在笔记本上使用,它除了有基本的断线重连功能(通过特殊协议和 server 上的 mosh 服务器通讯,所以网络断开之后服务器上运行起来的程序也不会终止运行),还支持诸如“漫游”之类的功能:比如说你在家里通过 mosh 连上了服务器,然后让笔记本休眠了,跑去咖啡店通过咖啡店的 wifi 再连上网(这时你的 ip 等各种网络参数都变了),会发现你的 connection 又自动恢复了,之前打开的程序也还在。

mosh 底层还是使用 SSH,但是它有一些自己的 protocol 来做 bookkeeping,需要同时在客户端和服务器上安装 mosh 才能运作,如果服务器上没有 root 权限的话也可以只安装在自己的 home 目录。不过如果所处的网络环境有一些特殊的配置,比如比较严格的防火墙,或者自动代理之类的,针对 SSH 本身做了优化,但是并没有专门针对 mosh 的 communication 进行支持,可能 mosh 就无法使用了,这也是我工作之后没有再经常用 mosh 的原因之一。此外 mosh 还有一些其他的功能限制,比较重要的一个就是不支持端口映射。SSH 的端口映射是一个非常有用的工具,这个我们下面也会详细介绍。另一个看起来跟 mosh 比较类似的工具叫做Eternal Terminal,看起来功能似乎更强大一些,还支持 tmux control mode(这个等下也会提到),不过我自己并没有用过。

另一类解决办法是通过 server 端的 session 管理来实现,允许网络连接随便断开,断开之后只要手工重新连接就好了,但是提供一种方式可以让用户断开连接之后之前的程序还能继续运行,并且重新连接之后还能恢复到之前的工作环境。由于不需要在网络协议之类的地方做过多修改,因此兼容性很强,凡是支持 SSH 的环境基本上都能用。比较老牌的工具是GNU Screen,我只在很久以前用过,现在主要用一个稍微新一点的叫做tmux的工具。这类 Session 管理工具不仅能让你的程序在网络连接断开之后继续运行,而且还能开启多个“窗口”(见下图,虽然在这个 UI 里看起来更像多个 tab),能够方便地来回切换,比如非常常见的 workflow 就是 SSH 到服务器上之后需要开一个 tab 来写程序,另一个 tab 用来运行命令之类的。当然,如果需要的话,也可以进行分屏等高级操作。

网络重新连接之后,可以 attach 到原来的 session,就会又回到这里,原来的 tab 也都还在,命令行历史这些也都还保存着,甚至还能回滚看到之前的 shell 命令输出的结果。因为网上可以找到很多很好的 tmux 的介绍和 tutorial,我这里只简单介绍一下我的 workflow。tmux 直接运行在 server 端,大部分系统都能直接通过相应的包管理器安装,安装好之后可以做一些基本的配置,放在~/.tmux.conf文件里,我的配置文件如上图所示,我用了Tmux Plugin Manager (tpm),所以还需要根据 tpm 网站上的安装指南安装一下 tpm(git clone 一下)。除此之外主要的配置一个是增大回滚 buffer(会占用更多内存),让我可以看到更多的命令行输出历史,还有就是设置prefixCtrl-l(默认好像是Ctrl-a)。

配置好之后就可以直接运行tmux启动了。如果使用 tpm 配置了插件,那第一次启动的时候插件还没有正常安装,需要在 tmux 里按prefix + I来安装配置文件里指定的插件。tmux 几乎所有的命令都是通过prefix来执行的,比如prefix + c是创建一个新的 window(tab),按法是先同时按下Ctrll(或者任何你自己指定的 prefix 组合键),放开之后再c。我比较常用的命令是:

  • c:创建新窗口。
  • 0-9数字:跳转到某个指定窗口;空格键跳转到前一个窗口;pn跳转到左边或者右边窗口。
  • [:进入滚屏模式,可以通过方向键或者PageUpPageDown键滚动屏幕查看之前命令行输出历史。在这个模式里还可以按ctrl-s来进行搜索。
  • ::进入命令模式,可以执行复杂的 tmux 命令(比如写在 tmux 配置文件里的那些指令)。
  • d:detach 当前 session,退回之前的 shell。

网络断开等原因导致 tmux 退出的时候 session 也可以自动 detach,下一次再 SSH 连回服务端的时候就可以运行tmux a来 attach 到之前的 session,所有的窗口会恢复如初,非常简单也非常好用。如果需要的话,也可以创建不同的 session,通过不同的名字来区分,详细可以参考 tmux 的文档。另外还有一个小帖士是,tmux 可以运行多个 client 同时连接到一个 session 上,有时候可能你在另一台电脑上连上了或者你之前网络无响应之后程序没有及时退出导致的残留 client,会有几个不同的 client 连到同一个 session 上,如果几个 client 各自的终端窗口大小不一样,就会出现不一致的情况,有可能你会看到屏幕上只显示一小块区域,其他的全是白点(另外的 client 窗口比较小),或者是超出屏幕范围的内容直接被截断了(另外的 client 窗口比较大),这个时候可以通过prefix + D来强制 detach 其他的 client。

远程代码编辑

远程代码编辑最简单的方式就是直接在 SSH 之后在 server 端启动一个终端文本编辑器,比如 VIM、Emacs 或者甚至 nano 之类的。我一直比较不喜欢在终端里运行编辑器(包括在本地的终端),虽然现在似乎有一些办法可以让鼠标、剪切板之类的也能和终端程序互动,但是在 SSH 套 tmux 再套编辑器的情况下有时候情况就很混乱了,最麻烦的就是需要复制或者粘贴超过一行的代码的时候了。另外就是取决于网络的质量,远程代码编辑会卡卡的,如果网络 latency 比较大,网速再快也是无济于事的。所以我通常只在做一些小修小改的时候才会直接在服务器上打开编辑器。

另一种做法就是在本地编辑,然后把代码同步到服务器上,我在上学的时候知道有人是直接通过 Dropbox 之类的工具来自动同步的。好处是不需要自己麻烦什么,坏处主要是你也不知道 Dropbox 什么时候同步完成了,比如你在 debug 的时候修改了一个东西,然后现在到 server 上去运行,如果你运行的时候最新的代码还没同步过去,那可能就会非常 confusing。相对比较容易掌控一点的做法是手动同步,有人通过 git 来同步,我觉得有点不太合适,除了麻烦很多之外还会导致 git repo 里出现很多细碎的 commits,比如在 debug 的时候可能甚至会出现许多无法编译或运行的代码被 push 进去。比较合适的工具是用rsync通过 SSH 来传输文件,能够增量只同步修改过的文件,也不需要专门在服务端安装什么程序。如果觉得在本地编辑完之后手工 rsync 一下太麻烦的话,也可以再多加一个 automation,通过监视本地某个文件夹内的文件变化来自动触发 rsync,这样在编辑器里保存文件的时候同步就自动完成了。在各个系统下都有许多工具可以用来监视文件系统变化,下面是用跨平台的fswatch作为一个例子:

fswatch -o local-dir |whileread f;do 
    rsync -azP local-dir/ server:path/to/remote/dir
done

有一个小帖士就是在使用 rsync 的时候,指定目录路径的时候末尾加不加/会代表不同的意思(“该目录”还是“该目录的内容”),我不太能记住哪个是哪个,所以一般保存一段我知道可用的命令行,在不同的情况下修改一下就可以用。如果想搞清楚可以直接参考官方文档,或者找一下网上其他专门介绍这个的博客文章(比如这篇)。

第三个选项是直接使用 web based editor 在线编辑远程文件,有的公司可能整体部署了开源的或者甚至自己开发的 online IDE 给员工使用,这样通常是最方便的,因为所有东西都配置和集成好了。如果需要自己搞的话,可能需要对服务端有比较大的控制权限,总之听起来好像有点麻烦,我没有这个需求也就没有尝试过。不过这里有一个小 hack:Jupyter Notebook其实是可以直接打开 Python 文件进行在线编辑的(可能其他 Jupyter 支持的语言的代码文件也可以),所以一个临时解决方法是在服务端运行一个 Jupyter notebook,然后通过 SSH 隧道(后面会讲)进行端口映射,这样就能在本地打开远程的代码进行编辑了。至于更完整的解决方案,这里只贴一个看上去还不错的(似乎是基于 Visual Studio Code 的)开源项目Theia,和一个在线编辑器资源列表合集供大家参考。

还有一个选项是 SSHFS 远程文件系统,我个人不是很喜欢这个方法,感觉是在条件不允许的情况下提供一种无缝衔接的假象,编辑器之类的都会将远程文件当作本地文件来对待,这样连接如果突然中断的话,程序有可能会崩溃或者卡死,文件会处于什么样的状态也非常不确定。

最后就是直接使用编辑器的远程编辑功能了。VIM 可以通过 netrw 之类的插件直接打开远程文件进行编辑,Emacs 也有一个很强大的TRAMP (Transparent Remote (file) Access, Multiple Protocol)系统。我在本科的时候用过 TRAMP,至少那个时候还没有觉得特别“Transparent”,比如有时保存文件的时候还是会卡一阵,可能因为(当时)Emacs 没有异步功能吧。我最近发现 Visual Studio Code 有一个Remote - SSH扩展,尝试了一下非常好用,比我多年前记忆中的 Emacs 下的远程编辑系统好用太多了,直接打开 server 端的一个目录或者项目,之后就跟本地操作几乎没有任何区别。如果网络断掉了编辑器也不会进入莫名其妙的诡异状态,而是会自动禁用所有操作,然后提供按钮可以重新尝试建立连接(重新联网之后使用),或者退出编辑器。和其他诸如终端之类的扩展也能互相兼容。另外我发现 VS Code 还有其他不少高质量的扩展,易用性比其他编辑器要好很多,同时又不像完整 IDE 那么臃肿,速度也还不错。不过 VS Code 上的 VIM 模拟器也是我用过的最差的,虽然功能看起来比较全,但是经常会进入一些莫名其妙的状态(比如你 somehow 既按了 VIM 的 u 来 undo,又按了 Cmd+Z 之类的),会导致代码丢失之类的,非常糟糕,这也是我一直没有把 VS Code 当作主要编辑器的原因。

总之,我现在的情况是:如果是小文件一次性编辑,就直接在服务端打开终端文件编辑器;如果是要写很多代码或者编辑很多文件的话,所在的环境有配置好在线编辑器就用那个,否则的话会用 VS Code 连过去。

SSH Multiplexing

SSH Multiplexing它允许 SSH 重复利用一个已经 authenticate 过的连接来建立多个 session,这样比如你已经有一个 active 的 SSH connection 的情况下,如果再运行 scp 之类的命令就可以重复利用已经有的连接,所以即使系统要求 two factor authentication 之类的复杂验证步骤也不会每次都触发。使用方法就是在本地 SSH 的配置文件~/.ssh/config里加入

Matchhostmy-server.my-domain.comControlMasterautoControlPath~/.ssh/ctrl-%CControlPersistyes

这样第二次 ssh、scp 之类的时候就可以不用重复认证了。

SSH 隧道和端口映射

SSH 另一个常用功能就是通过 SSH 隧道建立端口映射。在高层网络协议中一个 Domain Name(或者 ip address)加上一个端口组合在一起唯一确定了一个服务的“地址”。我们平时在连接网络服务的时候通常都不需要输入端口,是因为常见的服务都有默认的端口,比如通过浏览器浏览网页的时候会使用 HTTP 服务默认的 80 端口,通过 SSH 连接服务器的时候会使用默认的 SSH 服务端口 22,等等。端口映射简单地来说就是通过 SSH 建立一个隧道将 SSH 连接一头的一个端口和另一头的一个端口“等价”起来。

其中最常用的一种端口映射是 Local Forward,可以在 SSH 连接的时候通过如下命令行参数指定:

ssh -L 8080:localhost:80 ssh.server.com

其中第一个 8080 是指客户端的 8080 端口,之后的localhost:80需要在服务器端的上下文中解释,所以这里虽然是localhost但是其实是指服务器自己,所以并不是指客户端。建立好端口映射之后,在客户端上连接(比如在浏览器中打开)localhost:8080(注意这时的 localhost 是在客户端的上下文中解释的,所以也就是客户端自己),这个时候所有通讯会通过 SSH 隧道和服务器进行连接,对客户端而言,其结果相当于直接连上了服务器(这个例子中是ssh.server.com)的 80 端口)。为什么要绕这么大一个弯,而不直接连接服务器的 80 端口呢?因为很多时候服务器是在防火墙背后的,可能除了可以通过某种方式能建立一个 SSH 连接之外其他端口都被防火墙阻隔,但是如果通过 SSH 隧道连接的话,实际上这个连接是从 SSH 服务器本身发出来的,在我们的例子中其实就是服务器本机连接本机,所以通常都不会被防火墙阻隔。除此之外,端口映射的目标主机也不一定非要是 SSH 服务器本机。例如下面的简图所示,假设每个机器有三个端口,机器 ssh.client 通过 SSH 连接到 ssh.server(的端口 1),并通过-L 2:main.server:3建立端口映射。这个时候如果 main.client 去连接 ssh.client 的端口 2,对于 main.client 来说,其结果好比直接连上了 main.server 的端口 3,虽然 main.server 处于防火墙之内。在一开始的例子里 ssh.server 和 main.server 是同一台机器,ssh.client 和 main.client 也是同一台机器。

和 Local Forward 相对应的还有一种叫做 Remote Forward,语法是类似的,通过-R 8080:localhost:80命令行参数来实现,这样在连接 SSH 服务器的 8080 端口的时候,就好比瞬移到了 SSH 客户端机器然后连接其localhost:80一样。听起来有点复杂,那这些 SSH 隧道在实际中能做什么事情呢?

听起来有点复杂,实际中的用处主要是用来绕过防火墙(正向映射)或者访问私有局域网(反向映射)。例如我们现在通过 SSH 连接到一个服务器,想要复制一个文件回客户端,正常的做法是回到客户端另外开启一个终端,然后通过 scp 再次建立 SSH 连接来复制文件,如果路径比较长的话,输入起来比较麻烦(毕竟涉及到远程路径的时候命令行自动补全也不好用了)。这个时候我们可以从服务端运行 scp 反向连回客户端来推送文件,不过通常我们的客户端可能在私有子网中(例如家庭 WIFI)无法直接访问,这个时候就可以通过反向端口映射来实现。类似于下面这样的,dollar sign 前面的信息表示我当前所在的机器的 hostname 和当前路径:

ssh.client ~$ ssh -R 2222:localhost:22 ssh.server
ssh.server ~$ cd some/complex/path
ssh.server ~/some/complex/path$ scp -P 2222 file localhost:

这样就算客户端机在一个私有子网内也可以正常反向 scp 了,当然客户端机器必须配置好允许 SSH 连接(MacOS 默认是关闭的),如果想省去每次输入密码的话,也可以将服务器端的 SSH public key 加入客户端机器的~/.ssh/authorized_keys里,让连接更方便。

正向端口映射的常见用途是比如你在服务器上运行了一个 Jupyter Notebook 之类的程序(假设启动在端口 8888),但是你的服务器又在防火墙之内,你就可以通过把客户端的某个端口(比如 9999)映射到服务器的localhost:8888端口上,然后就可以在客户端的浏览器里通过localhost:9999访问了。

如果有很多常用的端口映射,可以直接写到 ssh 的配置文件里:

Matchhostmy-server.my-domain.com# Jupyter NotebookLocalForward8888localhost:8888# TensorboardLocalForward6006localhost:6006

不过这样有一个麻烦是每次建立新的 SSH 连接的时候都会尝试做端口映射,但是如果端口已经(被前一个 SSH)占用了,就会打印出端口映射失败的信息。还有一个方便的做法是在已经有的 SSH 连接上新增隧道。前面我们有提到过 SSH 的 escape command,在 SSH 连接里按回车,然后输入~C就可以进入命令模式,在这里输入诸如-L 8888:localhost:8888之类的命令就可以在已有的 SSH session 里建立新的隧道,不过如果你开启了 SSH Multiplexing 的话,就不支持这么搞了。

tmux -CC

最后想提一下的是 tmux 有一个叫做 control mode 的东西,可以通过-CC命令行参数来启动,比如原来 attach 到已有的 session 的命令tmux a现在变成tmux -CC a。Control mode 可以让支持的终端接管 tmux 的 tab UI,例如下图是iTerm2接管之前展示过的 tmux session 之后的样子。

值得注意的是 tmux 是运行在 SSH 连接的服务器上的,使用 control mode 之后它们看起来像本地终端的 tab 了,为了避免混淆你可以设置 iTerm2 让他在开启 tmux 窗口的时候使用 tmux profile,这样通过设置 tmux profile 下的颜色和字体,就可以很方便地区分本地终端和远程终端了。让 iTerm2 接管的好处除了看起来比较好看之外,主要就是可以直接使用 native GUI 的操作来切换、新建和关闭 tab,而且现在可以直接通过鼠标回滚查看命令行历史了,不需要用 tmux 的奇怪的prefix + [快捷键再慢慢PageUp的方式来回滚了。不过尴尬的是据我所知目前为止支持 tmux 的 control mode 的终端好像只有 Mac 下的 iTerm2 这一个。

以上就是我的 WFH 远程连接工具箱和小贴士,祝大家 WFH 顺利!😃

Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data

$
0
0

今天介绍一篇最近看到的论文,两位作者分别是华盛顿大学 Linguistics 系的 Emily M. Bender 和萨尔大学语言科学与技术(Language Science and Technology)系的 Alexander Koller。从作者的院系大概可以猜到这篇论文并不是跑很多实验提出很 fancy 的模型或者打破了很多 state-of-the-art 性能的论文,不过这篇论文得到了今年 ACL 的 Best Theme Paper,虽然不是很 technical 所以读起来比较容易,但是其实讨论的问题和观点都挺有意思的。

从标题可以看到,这篇论文主要探讨的问题是 NLU(自然语言理解),NLU 在最初 AI 开始作为一个问题研究时就具有重要地位,著名的图灵测试就是一种让人和算法进行“对话”的实验:看人是否能够意识到跟自己对话的另一端是机器而不是一个人,从而来断定机器是否具有了“智能”。取决于被测试的人是否是语言或者人工智能方面的专家,图灵测试有可能会很困难或者很容易,非常早期就有一些程序,例如ELIZA,通过非常简单的语法变换来对你进行各种反问,成功地让一些人觉得和这个“心理医生”对话非常有帮助(Emacs 里也有一个类似的程序,通过M-x doctor可以访问到)。到今天,基于各种超大型神经网络的文本生成模型能做到各种比简单的语法词法替换复杂很多倍的事情。比如最近火遍大江南北的 GPT-3 在开放了 API 之后被大家玩出了各种新花样,有用 GPT-3 写诗歌文章的,有让 GPT-3 帮忙写代码的,当然还有让 GPT-3 做图灵测试的,更多的例子可以参见这个awesome gpt-3的列表。

如果早期基于简单规则变换的“心理医生”能骗过一些未经过专门训练的人并不会让我们认为这样的模型具备了真正的智能的话,那么今天能够让绝大多数人都感到惊叹的 GPT-3 这样的模型又如何呢?这大概是一时半会也争论不出结果的问题。这篇论文也没有尝试去跳通用智能这个大坑,而是探讨一个更加容易明确定义和论证的话题:在自然语言处理中什么是一个句子的“意思(meaning)”,以及怎么样算是对一个句子“理解”了。论文对这些概念给出了定义,并通过一些 thought experiment 来论证普通的语言模型的训练方法(例如 GPT-3 之类的)由于只使用语言的“form”,在原则上无法训练出能够掌握语言的“meaning”的模型来。

语言模型通常是指一个语言里的所有序列(句子)的一个概率分布模型\(P(w_1w_2\cdots w_m)\),其中\(w_1\)\(w_m\)都是属于这个语言的词汇表(vocabulary)里的“词”——或者可以叫做 token,因为除了使用传统意义上的“词”以外,根据不同的应用场景,还可以使用“字母”,或者诸如“三个字母组成的单元”之类的任意单元。有一个语言模型之后可以做很多事,其中最常见的就是计算条件概率,根据已有的句子片段预测下一个词(next word prediction),也就是计算\(P(w_{t+1}|w_1w_2\cdots w_t)\),然后可以根据这个概率分布采样下一个词\(w_{t+1}\)。重复这个步骤,就可以继续补全更多的词,直到补全整个句子。传统的建立语言模型的方法是直接进行词频统计:遍历数据集里的所有句子,数一数以\(w_1w_2\cdots w_t\)开始的句子里,下一个词分别是什么的频率有多少。这样的做法在上下文长度比较长的时候会出现很多问题,一个是存储问题,比如我们的词汇表里有 10000 个汉字,那么存储\(P(w_{10}|w_1w_2\cdots w_9)\)的表格就需要\(10000^{10}=10^{40}\)个条目;即使我们能够解决存储问题,在简历统计模型的时候,我们也会发现随着上下文长度的增加,大部分条目都会是零,因为在训练数据中没有出现过。由于这种统计模型没有词之间的相似性的概念,所以训练数据里有“我在放学路上碰见一只二哈”这样的句子并不能让模型知道“我在放学路上碰见一只”后面接“哈士奇”之类的相关词(比如甚至其他狗或者在放学路上会碰到的动物)结果也是差不多的。

基于神经网络的语言模型在一定程度上解决了这些问题。不论是相对早期的基于RNN的模型还是现在更流行的基于Transformer的模型,都能够通过诸如Sequence To Sequence的 formulation 让一个神经网络能够接受一个任意长的输入(上下文),然后输出下一个词(或者任意长的词序列)。常用的训练方式是进行 next word prediction,例如GPT-2和 GPT-3 都是通过这种方式训练的,可以看到在神经网络的容量足够大,优化算法足够强以及数据量足够多的情况下,神经网络会收敛到和统计模型一样的解。但是由于神经网络的参数数量不需要随着上下文的长度变化而变化,所以从某种意义上解决了传统统计语言模型在上下文长度上的短板。当然为了让语言模型能够给出足够容量处理复杂上下文,其参数量也是要增加的,只是由于语言本身的结构性,增加速度不会像刚才说的\(10^{40}\)那么严重。神经网络更重要的特性是由于它本身是通过一些连续的参数运算得到最终结果,很自然地具有了“interpolation”的特性,换句话说,神经网络能够“理解”两个词是相似的。

回到刚才的二哈与哈士奇的例子,传统的统计语言模型无法“理解”这两个词的相似性,因为它将每个词当做一个离散的 token 来对待,关于一个词的信息不会“泄漏”到另一个词哪里。但是神经网络不一样,它的计算方式是先将每个词的 token 映射到一个实数向量,通常称作word embedding,然后上下文序列里的所有 word embdding 会在一起通过一些神经网络层进行变换,最后通过一个 softmax 层算出输出的 token。由于这个 word embedding 也是随着神经网络的其他参数一起训练出来的,所以神经网络就可以通过让“二哈”和“哈士奇”的 embedding 在向量空间中比较接近的方式来达到让这两个原本相互独立的 token 之间开始具有相似性的。神经网络之所以会“选择”这么做是因为训练数据里有可能会出现很多类似于“哈士奇很\(\rightarrow\)二”和“二哈很\(\rightarrow\)二”之类的句子,神经网络会发现用“哈士奇”的 embedding 和“二哈”的 embedding 作为上下文计算出来的 next word 预测结果需要是差不多的,所以经过训练之后神经网络会将这两个词的 embedding(近似)对等地对待(在神经网络语言模型中通常在输入层和输出层各有一个 embedding layer,一个用来 encode,一个用来 decode,为了直观解释方便,我这里将两者混淆起来。在实际中有人做过实验直接让两个参数共享也是可行的。)

所以现在的大型神经网络语言模型能够处理超长的上下文(例如上下文是对一段程序的描述,要求输出是相应的程序代码),并且由于能够“理解”词和子序列之间的相似性,所以能够生成出原本训练数据中没有的新的句子和段落,并且用这些带上下文的 embedding 去通过transfer learning、few shot learning 之类的方式去处理一些其他的自然语言处理的任务也能得到非常好的效果。从各种意义上来说深度神经网络取得的成功在自然语言处理领域都是革命性的。

但是神经网络语言模型真的“理解”了我们的自然语言了吗?按照这篇论文的观点是,没有,并且语言模型这种仅使用语言 form 来训练的方式永远也无法真正“理解”语言。这里的 form 是指语言的任何 observable realization,比如 token 序列,或者写在纸上的 written language,或者以声音形式存在的 spoken language 等等。相对的,所谓 meaning 则是指语言的 form 和某种语言之外的东西的联系。具体来讲,这篇论文的观点是,语言是用来交流的工具,令\(E\)为所有语言 expression 的集合,\(I\)为所有交流 intent 的集合,则语言的 meaning 可以定义为一个子集\(M\subset E\times I\),每一个属于这个子集的\((e,i)\)表明\(e\)可以用来表达\(i\)这个 intent。而所谓“理解”语言,具体就是指给定\(e\)能找到相应的\(i\)

更具体来讲,交流的过程是:Alice 有一个 intent \(i_A\),她通过自己对语言的理解\(M_A\)来获得一个\(e_A\)\((e_A,i_A)\in M_A\),然后将\(e_A\)通过 written、spoken 或者其他任何形式传递给 Bob,后者再通过自己对语言的理解\(M_B\)来查找一个\(i_B\)\((e_A,i_B)\in M_B\),从而获取 Alice 要传达的意图。通常情况下\(M_A\)\(M_B\)并不是完全等价的,所以会有各种误解的情况发生,但这其实是人类交流的一个重要特征,在论文里称作 Active Participation of the Listener:交流必须要在 Listener 的\(M_B\)参与下才算完成,原因不仅是语言的歧义或者多义性,因为人具有Theory of Mind (ToM),会对与自己交互的 agent 进行建模,所以 Alice 在对 Bob 说话的时候,她其实内心有一个\(M_B\)的近似\(\tilde{M}_B\),在同一个 intent 有多种表达方式的情况下,会同时根据\(\tilde{M}_B\)来进行排序和筛选,得到最终的\(e_A\)。并且对话过程中随着上下文的发展,\(M_A\)\(M_B\)\(\tilde{M}_B\)也会不断地变化。使用\(\tilde{M}_B\)有时可能是为了说话方便,亦或者是最大范围的消除歧义,亦或者是你们是很亲近的人或是同属于某一个特殊团体,有一些相互心知肚明的暗号等等。总而言之交流和理解是一个 intent 到 intent 的变换,而语言 expression 只是作为一种媒介形式,如果神经网络模型只观察到语言的 form 本身,那么按照论文的观点,原则上它是无法真正学到语言的 meaning 的。

由于 aictive participation of the listener 的原因,我们直观地判断一个模型是否具有智能或者理解了语言的时候需要尤其小心。从最开始的“心理医生”程序的例子中就可以看到,由于我们人类有很强大的\(M_B\),所以即使 Alice 只是一个通过简单规则输出一些常见的\(e_A\)的机器人,我们也很有可能通过自己的\(M_B\)理解到其中的“真意”,从而认为 Alice 具有智能。那么更加复杂的语言模型是否也只是因为 listener 的 active participation 而被误认为是具有“理解”能力呢?在写这篇论文的时候 GPT-3 的 API 应该还没有开放出来,不过论文里对 GPT-2 进行了一些测试,认为确实如此。

在介绍论文里使用的测试之前,我们再简单回顾一下刚才提到的 word embedding 能够“理解”词的相似性的情况,这能算作对语言的“理解”吗?按照这篇论文的定义,显然是不行的。word embedding 所得到的是关于语言的 form 本身的统计特性,具体来讲,word embedding 能够讲一个『词』和它的『上下文』关联起来:如果两个词经常出现在相同的上下文里,那么这两个词一定具有某种程度的等价性。事实上,distributional sematics这个领域有一个观点就是:

A word is characterized by the company it keeps. – John Rupert Firth

Meaning is use. – Ludwig Wittgenstein

这样的词的『characterization』似乎确实能够刻画许多词的有用的信息。例如论文里提到的 EMNLP 2018 的一篇论文『Phrase-Based & Neural Unsupervised Machine Translation』就实现了不使用成对的双语翻译数据,仅使用两个语言各自的未标注文本的情况下训练出了效果不错的机器翻译模型。这说明基于上下文的对词的刻画似乎还是具有跨语言的一致性的。这不禁让人觉得,是否不需要依赖于外部的信息,也能得到词的“意义”。实际情况似乎会很复杂,考虑到语言存在的各种 ambiguity,首先一个词的意思很多时候就是取决于上下文的,例如论文里给的例子「Never ask two China trips to the same party」,这里的「China trips」根据上下文需要理解成“最近刚去过中国的人”,而不是字面上的“去往中国的旅行”;在考虑到 listener participation 之后,歧义也会上升到整个句子层面。例如进击的巨人里莱纳说“想回故乡”的时候,知道内情的贝特霍尔德和不知道内情的其他人会领会出完全不一样的意图。论文在第 7 小节专门探讨了 distributional semantics,并举了一些之前的研究结果,大家发现词的分布和物理世界中实体的分布并不能很好地匹配上。比如现实世界中四条腿的狗是很常见的存在,但是在(英文)文字里却几乎不太会见到「four-legged dogs」这样的词出现。

为了论证文中所提的观点,作者提出了一个叫做 octopus test 的 thought experiment,大意是分别流落到两个孤岛上的两个人找到了一根海底电缆可以互相通信,海底有一只🐙拦截了海底电缆,并通过听两人的对话学到了人类用的语言的统计模型,现在寂寞的🐙也想和人对话,于是它剪开了电缆,自己加装另一个人开始分别和两边对话。这个例子的一个关键的地方在于活在海里的🐙和陆地上的人类不太有共同的生活体验,人类日常生活中用到的东西🐙没有见过,仅仅通过监听对话也无法得出不同的实体的对应关系。

现在假设 A 做了一个可以用来打椰子的弹弓,很兴奋地把制作工序告诉 B,并问他用起来好不好用。由于🐙并不知道「皮筋」、「椰子」之类的词都对应什么物理实体,它也就无法制作弹弓,即使做出来了,它也无法知道在陆上使用弹弓是什么体验。不过即便如初,🐙还是可以根据之前观察到的对话依靠统计和相似性来做一些诸如「Cool idea, great job!」之类的回答。此时 A 可能并不会发现任何异常,但是这并不是因为🐙“理解”了 A 说的话,而是 A 通过自己的 active listener participation 对🐙的通用回答做出了自己的解释。论文里还假设了另一种情况,假设 A 现在在岛上受到一只熊的攻击,找到一根木棍,希望 B 能帮他想办法构造一个武器来保命,这个时候🐙要做出合适的回答需要理解在物理世界中的「木棍」、「熊」等实体分别代表什么,有什么特性之类的,否则它就只能根据过去对话中见过的一些跟熊、木棍相关的事情来做出回答,此时就很有可能会无法通过图灵测试。作者在论文中使用 GPT-2 做了一些测试,以下方括号的部分是提供的上下文,后面是 GPT-2 给出的结果(论文中还有一些其他结果):

[Robinson cried out, “Help! I’m being chased by a bear! All I have is these sticks. What should I do?” The survivalist said, “Here’s what you can do.] Take one stick and punch the bear, and then run faster to the store. Wait there until the bear is gone, and then give her all of the sticks. Then go back inside and get your gun.”

Advertisement

Bobby told me that she began to cry. But when she was finished taking down the bear,

she marched out into the yard, began collecting up the sticks and armed herself. She said she felt like a heroic hero and a Yankee heroine. It turns out that bears have more than their fair share of venomous snakes, bees

显然 GPT-2 虽然说得像模像样,但是前后没有什么逻辑,这次没有通过测试。但是如果 A 经常碰到熊,并和 B 谈论,然后 A 还经常和 B 讨论用木棍制造各种不同的工具呢?如果有足够的历史信息,是不是🐙也能说出更合适的答案来?针对这个具体的问题也许是的,但是我想这里的主要问题在于人类语言本身是 unbounded 的,我们可以生成无限多种新的句子序列代表不同的意思,任意有限多的训练数据都不能够 cover 所有的情况。举一个极端的例子,考虑这样一句话:“现在约定我们在接下去的对话中所有的数字都用它的平方代替,现在请告诉我 9 加上 25 等于多少。”因为这是一个非常 arbitrary 的规则,几乎可以假定模型的训练数据中都没有出现过和这个一样的情况,所以模型可能会说 34 或者其他的结果,但是却几乎不太可能得出正确答案 64。并且我们可以把加黑处换成任意多种其他的在普通训练数据里不会出现的奇怪规则,这时模型如果没有「真正理解」这里的变换规则的符号运算法则的话,就无法得到正确答案。当然我这里的例子不再是论文里基于和物理世界实体的对应关系的论证方式,所以并不能直接断言仅通过语言的 form 数据无法训练出能掌握符号运算的模型来(虽然按照现在的训练方式似乎极其不可能)。

总而言之论文的观点是,自然语言处理这些年取得了非常突破性的进展,但是就目前的进展方向可能永远也不会让我们达到真正自然语言理解的地步,和在性能上 make progress 相比同等重要的一个问题是定义合适的任务和研究方向,保证 climb the right hills。

2020 书单:白露

$
0
0

白露是夏天的尾巴,从三月开始的居家令一下子竟过去了六个月,美国的疫情控制就不多说了,抛开政府和媒体的各种嘴炮和烟雾弹,从曲线上来看是成功做到了“flatten the curve”,问题只在于 flatten 到最高点上了。不过现在整个世界其他许多地方的情况也不容乐观,美国这边“在家办公”的状态大概是至少要持续到明年暑假,日本强行推迟一年的奥运会估计也无法指望了。其实居家令对心理状态并没有太多影响,反倒是身体上——虽然有尝试在家做一些运动,但是总觉得体力、肌肉各方面都在减弱中,所以这个月开始尝试每周戴上口罩出门往稍远的距离走一走,活动一下腿部肌肉,结果立刻又来了山火,空气质量警报,又出不了门了。在家办公之后住在离公司近(房租高)的地方的理由就没有了,在加上各种天灾人祸,似乎有不少人暂时或永久地搬离湾区,这会不会是硅谷历史的转折点呢?

总之先回到这次的书单,缓冲一下凝重的气氛,我们从轻松愉快的书开始介绍,正好有一本很应景的书,N 之前力荐给我,说是关于“男人的浪漫”的书,讲了一位沙俄前贵族在莫斯科大酒店软禁三十年的故事。

A Gentleman in Moscow》的这个故事简介勾起了我浓浓的好奇心,如果我是一个作者,究竟要怎么编才能在这么扭曲的一个框架(时间跨度超长,但是空间跨度又超狭窄)下写出个完整的故事来,而且是一部长篇小说,而不是笑话集,所以不能像情景剧那样搞。事实上经过 COVID19 疫情这半年来的 shelter-in-place 的生活,让我觉得长期在一个小范围内生活可能并不是一件一定会把人逼疯的事(当然我们今天有四通八达的互联网,所以情况也很不一样),但是不可否认的是,这样的生活要变成让外人也觉得有意思的故事来讲似乎还是有些难度的,所以一开始大家积极组织的在线定期 sync 大家越来越没有什么新鲜事可以讲,最后干脆不去了。

【以下有剧透的内容用小字灰色显示】总之带着这样的好奇心去看了这本书,真是一点也没有失望,作者不仅讲了一个完整的不无聊的故事,并且讲得也非常棒,一些小伏笔和前后呼应让人时常不禁想会心一笑,文笔非常精彩,现在想起来,跟我小时候反复看《基督山伯爵》时候的观感有点似曾相识。也许不止观感,故事风格本身也类似吧,可以算作是西方的武侠小说?那种“锄强扶弱”的执念,或者是“浪迹天涯”的洒脱的感觉,也许也可以说成是理想主义,一种让人很羡慕的生活态度,但是你会觉得这种生活方式在现实生活中显然肯定是行不通的,需要更多的圆滑和变通,但是在小说中主角做到了,因为这是小说,你明白它因此透出不真实感,但是仍然羡慕那种浪漫主义情怀。(这本书里 Rostov 伯爵也有自己的执念,那就是他的作为 gentleman 的生活方式,他在莫斯科大酒店三十年,看外面的世界沧海桑田,有过动摇吗?自然有,甚至有尝试过自杀,但是那是苦于被困于酒店无法外出吗?也许不是,也许只是他自己内心的迷失。Rostov 的魅力大概就来源于他那种泰然处之的态度,在我看来,被“困”酒店可能从来都没有被他认真当成过一件烦恼,就好比是法院宣判你从此不准吃生西红柿,虽然确实有这么一条规则需要遵守并且也对生活带来了一些不便,但是并不是什么很值得困扰的事情。所以他自在地酒店生活了三十多年,最后又自在地走了。所以我觉得网上看到的跟《肖生克的救赎》的类比有点过于不恰当了,《肖》的主角经过长年的经营和计划,目的就是最终逃离;而 Rostov 的三十年显然不是为了最后的离开,而是在过自己的生活,并且在知道自己可能会碰到的情况的前提下,从法国回到俄罗斯本身也是他自己的选择,他找到了回来的理由于是选择了回来,然后选择了留下,最终找到离开的理由之后又选择了离开。)他是一个囚徒,但却有一颗最自由自在的心。

看到有人评论小说情节缺乏可信度,对苏联的描绘也比较不切实际,大概也不可厚非,毕竟作者是个土生土长的美国人。但是其实也没有必要要求武侠小说都要严格符合历史设定吧?😃

第二本轻松愉悦的书是《Buzz, Sting, Bite: Why We Need Insects》。这是一本最近出版的(2018)关于昆虫的书,作者是挪威的生物学教授。非常有趣的一本书,如果对昆虫这个我们人类平时知之甚少的世界有一点点兴趣的话,应该都会喜欢这本书的。昆虫王国不管是从存在地球上的时间(远比恐龙更早)、个体的数量甚至是种类的数量都远远超过哺乳动物。我时常觉得动物世界虽然种类繁多,但是其实仔细看一看会发现几乎都是换汤不换药,有点像灌水的学者,模型改一个小参数换个名字就再发一篇论文。比如各种哺乳动物还有禽类都是清一色的两只眼睛四条腿,即使是进化出能飞的翅膀这种高级的东西,也必须得借用原来的两个手的构造,而没有单独进化出和手独立的翅膀来。相比起来昆虫的多样性就多很多,在各种奇怪的地方都能长出眼睛来,当然昆虫严格定义上来讲也是“六条腿两对翅”,不过这也是人为定下来的界限,考虑所有节肢动物的话,多样性就更加眼花缭乱了。也许是在地球上存在的时间太久的缘故,昆虫们进化出了各种各样复杂的相生相克的系统,昆虫和昆虫、甚至昆虫和植物之间各种斗智斗勇,有非常复杂的共生关系,也有极其残酷的寄生现象,许多故事都令人瞠目结舌。很多我们不知道的或者没有注意到过的昆虫在与人类息息相关的生态系统当中都扮演了非常重要的作用,所以对昆虫的研究、了解和保护其实也是和人类未来发展息息相关的。

不过,与其说是一本关于昆虫的科普,更像是一本给小朋友看的昆虫画册,只是这是一本没有任何配图的“画册”,哈哈……感觉如果配上插图的话,整体质量又会上升很多,不过还好现在互联网非常发达,很多关键词直接搜索一下就能找到图片甚至视频,所以也不是问题。

第三本是《UNIX: A History and a Memoir》,这是K&R C的那个 R 写的关于 Unix 的一本小回忆录,封面印刷极其模糊,看起来像自家小作坊打印的,不过内容还不错。介绍了一下 Unix 的起源、发展和没落,也有一些 Unix 重要组件的基本介绍。不过与其说是一本历史书,更像是作者作为亲身经历整个过程之后怀旧所写下的回忆录,里面有不少趣闻轶事,仿佛能在字里行间看见作者回忆往事时的温暖的感觉。就好比你毕业之后若干年,再碰到学生时代的老朋友,互相聊起来当年很热血地大家一起做的一些事情时的兴奋感。

作为从 GNU 和 Linux 开始接触开源世界的一代,对 Unix 的印象更多的是刻板守旧的顽固派,最终被 Linux 抢占了所有的天下。从这个回忆录中可以看到实际情况其实并不是这样,在 Unix 起源的时段它是非常革命性的创新(Unix 作者因此得了图灵奖),不过 Unix 成也专利败也专利:早期在 Bell Lab 搞操作系统的那些人申请不下经费来买电脑(PDP-10 在当时的价格是 50 万美元),但是当时在公司申请专利是一件大事(平均每天都会有一个新专利),于是他们说服专利局买了一台 PDP-11,帮他们搞可以让写专利更顺畅的软件,同时获得晚上访问机器的权限,Unix 就是在这样的情况下被开发出来的。而后来 Unix 的没落我们都知道了,由于 Unix 极其高昂的 lisence fee(也不是 Unix 原作者们所能左右太多的事了),导致了各种冲突,比如 BSD 那边添加了 TCP/IP 的功能之后发布他们的 Unix 版本,结果吃上了漫长的官司,重写了 Unix 原来有的所有代码还不行,总之在各种混乱中 Linus 发了那封著名的邮件宣告了 Linux 的诞生。

后期关于 Bell Lab 本身在母公司分崩离析中没落的过程描述也有点让人伤感的,配合另外的关于贝尔实验室的历史的书(比如《The Idea Factory》)看会更有感触。曾经的贝尔实验室不再了,不过所幸现在在其他的一些 Industrial Lab 也还有比较宽松自由的研究环境,没有了单间的独立办公室,但多了 free food。

A Knight of the Seven Kingdoms》马丁抛开《冰与火之歌》的主线剧情写的一本发生在那之前一百年左右的关于高个邓肯的故事。最初看到它是在伦敦街头的一个书店里,里面的插图一下子吸引了我,不过徘徊很久我都没有买下它来,因为出门在外还是要行李轻便为主,回到美国之后很久才突然想起来买来看了。整本书其实只讲了三个事件,而邓肯的大陆环游之旅才刚刚开始,该不会是也准备写个六七本吧?就本书的内容来说,故事的有趣程度、人物和情节的复杂程度,剧情交织、宏达的世界观铺垫各方面都和正篇有一定差距。而且邓肯这一身沉重的正气和贯穿《冰与火》正篇的那种丧丧的洒脱感也不太兼容,也许马丁不太擅长写这种风格。不过这本书插图很多,几乎每隔两三页就有一个插图,画得很很美,简直是诚意满满。

最后《On Drawing Trees and Nature : A Classic Victorian Manual》是来自十九世纪的一本讲画画的老书,主要是讲怎么画树和风景,但是有些东西其实是很通用的,可以说是讲得很好又讲得很不好的一本书。这应该是我看过的文字最多的教画画的书,但是文字多本身并不是一个很大的问题,因为其实很多地方讲得很有道理非常有用,例子虽然不多但是也都非常戳到点子上(包括正例和反例)。最大的问题大概是书里用的文字和叙述方式,动辄一个段落就是一个句子,各种不必要的从句套从句,冗长的表达方式,几乎每一个句子都可以拿出来作为英语写作的反例。如果这还不够让你分分钟走神的话,书里在介绍具体技术细节的时候还不停穿插了各种针对年轻学徒的人生教育。不知道那个年代的文字是不是都是这个风格,总之如果能不走神不睡着并且看懂作者真正要说的事情的话,还是非常有内容的一本书。

然后介绍几本主题稍微严肃一点的书。《Alice and Bob Meet the Wall of Fire: The Biggest Ideas in Science from Quanta》(出版于 2018 年)是一本叫做Quanta的介绍前沿科学进展的杂志里的文章选集,按照主题组织起来,每一篇文章 2~4 页,主要关于物理学,也有关于生物学和 AI 方面的一些主题,有集中讲某个特定课题的最新进展,也有比较泛一点的整体介绍,不过都是偏重于非常基础的话题,比如如何理解时间,如何界定生命,神经网络的学习理论等等。看起来感觉确实跟读杂志差不多(毕竟就是杂志文集),在没有专业背景知识的情况下可以简单地了解一下某个领域或者方向的最新进展。当然看到自己比较熟悉的 AI 领域,就会觉得即使只是做浅显的介绍,也只是相对片面地讲到了一点点,所谓“scratch the surface”,不过最前沿的研究大概就是这样吧,方向五花八门散乱不成系统,也很难判断哪个才是最重要的,当然几页纸是讲不清楚了。最后一章还有一些关于科学本身的哲学讨论,特别是针对现在物理学里各种离真实世界或者“可证伪性”越来越远(比如弦论、平行宇宙)的理论,现在大家似乎开始因为理论在数学上的优雅性就倾向于接受,而不管是否有实验结果支撑。有人表示没有办法,现在实验可观测的范围太小了(见下图),现在无法证伪的说不定以后就可以了。还有人说我们太执着于“可证伪性”其实有点走火入魔了,可证伪性并不是检验是否是科学的唯一标准,比如占星学其实是可证伪的,但是谁也不会说它是科学。

The Shenzhen Experiment: The Story of China’s Instant City》最开始是在书店看到封面很漂亮买的,作者是建筑和城市规划的教授,我原本以为是从这两个方面来介绍深圳,况且深圳给人的印象就是经过完整的整体规划精心建设起来的城市,而不是像其他大多数城市那样有复杂的发展过程和各种历史遗留问题,所以整体规划中也许有很多学问和精彩的地方,没想到是完全不一样的书。事实上,这本书的主要目的似乎是消除刚才提到的这种对于深圳的”印象“。作者从许多不同的角度讲了深圳的历史,当地的村落,特区的设立过程中的各种风波等等,来表述一个观点就是:深圳并不(完全)是大家所认为的完全自顶向下规划,并且”凭空“建造出来的城市,深圳特区有今天的发展跟原住村民、地理位置、早期的基础建设等各种因素息息相关,这也是其他中国甚至是海外的以深圳为模板的经济特区不一定能复制它的成功的原因。和我平时看的书的类型都不太一样,不过还算是比较有意思的了,介绍深圳的历史进程中的许多事件和变革其实也侧面反映了整个中国的历史和变迁。

政治秩序的起源:从前人类时代到法国大革命》是我读过的第一本探讨政治秩序相关话题的书,感觉还蛮有趣的,就是有点长,例证太多反而有点 overwhelming 了。作者原本信仰的是自由民主制度是人类政治文明的最终形态,为此在 1992 年写过一本叫做《历史的终结与最后的人》的书(也收录在理想国译丛中)来论证为什么自由民主为什么最终会征服全世界。根据书里导读的说法,那之后二十年,国际形势显然没有按照福山的说法发展实现民主大同,美国在伊拉克和阿富汗强推民主举步维艰,世界上有些地方甚至有退民主化的情况发生,同时民主制度健全的国家又因为各种机构互相牵制导致在改革和改善向民众提供所需的基本服务等各方面步履蹒跚,而福山写这一本书也是对自己之前观点的一种反思,换句话说,这本书讨论的议题是“为什么自由民主尚未征服世界”。

我并没有看过之前那本《历史的终结》,单就本书来说,感觉看起来还是非常有意思的。这本书从史前文明开始讲一直讲到法国大革命为止,终结中国、印度、中东和欧洲等不同地方的国家制度形成和演变的过程,来阐述他对政治制度发展的三大基础(国家构建,法治,问责)的理论,并尝试解释不同地区政治制度发展过程中几个因素的异同所造成的发展差异,以及由此造成的在朝向未来民主化进程中可能出现的障碍和挑战。由于工业革命对全球的格局带来了巨大的改变,所以工业革命之后的事在另一本叫做《政治秩序与政治衰败:从工业革命到民主全球化》的书里叙述。

全书分为五个部分,第一部分介绍了国家制度形成之前的史前人类文明组织形式,之后三个部分分别介绍前面提到的政治制度发展的三大元素,最后是一个简短的展望和总结部分。

国家之前:对于人类社会的组织形式,作者的观点是并没有一个从独居到社会化群居的明显过程(比如农业发展导致定居,然后开始组织社会和社区之类的观点),认为人类一开始就是群居组织,具有社会性和互惠利他的天性(所谓“一开始”指追溯到猿类共同祖先吧,从现在猿类的组织形式而言,这个观点似乎也站得住脚)。

人类从没作为隔离的个体而存在;现代人类出现之前,社交和融入亲戚团体已成为人类行为的一部分。人类的社交性,不是因历史或文化而取得的,而是人类天生的。

当然完全的利他主义在大自然中可能不太容易生存,早期人类的组织形式是将利他主义限制在血缘家族体系之内。

国家建设:部落的形成也可以归因到家族元素:对共同祖先的崇拜逐渐发展出各种宗教,并以此来实现比家族更大的组织形式。而从部落到国家建立的主要动力来自于需要组织和动员更大规模的人来做小部落所不能完成的事——主要就是战争。当然部落和国家的主要区别并不是大小,作者采用马克斯·韦伯的现代国家的定义,其根本在于用官僚机构代替家族统治。

根据马克斯·韦伯的经典定义,现代官僚机构的特征包括:因功能而分的官职需有明确专长、在界定清晰的等级制度中设立各级官职、官员不得有独立的政治基础、官员必须遵守等级制度中的严格纪律、薪俸官职只是谋生的职业。

作者在这样的定义下开始介绍各个大陆上国家建设过程中如何尝试打破家族约束建立非人格化制度的漫长过程,有些地方很早就建立了完整的国家制度,而有些地方直到近代都还只有非常软弱的国家组织,这直接导致后来全球政治发展的不同格局。

书里关于国家建设的第一个例子是中国,在商、周时代中国还是以分封和地方贵族统治形式组织起来的结构,后来秦朝统一中国,在经过商鞅变法等各种改革,在全世界率先建立了现代化的国家体系(儒家思想势力力争对抗,还导致了焚书坑儒的事件),虽然在之后的两千年间在代表国家的皇权和代表家族势力的分封贵族之间的斗争以法家和儒家的斗争形式一直持续不断(比如汉代家族势力得到增长,到隋唐的时候随着科举制度的完善格局又反转过来),但很早建立起强大完整的国家体系这件事情对后来中国的政治体系发展有着深远的影响。作者这里将中国和印度做了对比,后者由于其独特的宗教思想、本土较少大型战争等各方面的原因从来没有发展出强势的国家体系。

国家建设应该是本书篇幅最大的一部分。出了亚洲之外,还介绍了中东、欧洲等各种地方为了对抗以亲戚关系为核心的家族制度所发展出来的各种奇怪法门。比如穆斯林的军事奴隶制,将从各地掳来的奴隶男孩进行洗脑教育,培育长大来组成帝国的军人和官员。这些来自远方的奴隶虽然出将入相,但是和当地人血缘隔离,并且军事奴隶制严格规定奴隶们的职位和家产不能世袭,这些措施有效地排除了部落势力、亲戚关系等对政治的影响。这些制度和中国的太监体系的作用实际上也有些类似,然而这些比较极端的体制并不是没有空子可以专,中国历史上出现过不少宦官乱权的情况,而军事奴隶制在后期也逐渐解体消亡。

而欧洲则主要靠基督教,比如宣扬财产要捐给教会而不是留给子孙以瓦解家族观念,而天主教整套体系实际上本身就是一个官僚机制:职位的任命并不是以亲戚关系为基础,并且还有诸如修士不允许结婚等规定。不过天主教从十一世纪开始逐渐独立于政治权力,开始实现政教分离,其产生的制衡限制了欧洲强有力的国家体系的发展,但另一方面则又促进了“法治”体系的形成。

法治:作者这里所谓的“法治”和我所理解的现代法治还是有相当大的差别的,应该算是一种更加广义的法治。其中心思想是国家,或者说皇帝的权力受到一套“规则”的限制,而这套规则的制定不能是统治者本身。这套规则一方面限制统治者让他不能为所欲为,另一方面又为统治者的身份提供合法性。典型的例子就是西方的基督教所提供的“规则”,以“君权神授”的方式为君主提供合法性,但同时也对君主权力进行限制和制约,例如西方君主很少有能像中国皇帝这样随便就对某个贵族进行抄家甚至满门抄斩株连九族之类的。如果制衡太强而中央政府太弱,就会导致国家无法有效地运营和组织,然后在国防等各方面逐渐薄弱。比如西班牙国王募集不到足够的资金来应付赤字,只好在1557、1560、1575、1596、1607、1627、1647、1652、1660和1662年宣布破产。这样的情况还导致当时欧洲大陆大量卖官和滥放国债等行为的出现,进一步削弱国家体制。

当然在中国这是一个完全相反的情况,因为一直没有发展出独立于国家的制衡势力,乃至于西方对中国封建时期的国家是如何运作的表示非常疑惑。一方面没有教皇之类的来宣布皇帝的合法性,人们似乎全都自动地承认皇帝的至高无上的权威,特别是每一朝的开朝皇帝而言,凭什么只是一介布衣出生的人,打下天下之后就自动变成”天子“了,而上一任皇帝极其继承人就自动又变成了叛逆了。感觉这大概跟中国传统思想观念里的”天命“、”失道“之类的概念有关吧(突然想到《十二国记》)。另一个疑惑是既然中国皇帝拥有至高无上的权力,但是为什么除了少数极其昏庸残暴的君主之外,大都没有对民众进行最大化地压榨?比如明朝由于征税极低甚至导致国家军费无法支付最终覆灭。

我想这些问题对于非常熟悉中国文化和历史的人来说可能会有其他不同的见解,福山在书里提到的解释主要来自于儒家的思想道德观念,儒家试图教育君主,缓和他的激情,使他深感对人民的责任。作者还提到让君主获得良好教育以建良好政府的想法和苏格拉底所描绘合理城邦不谋而合(记载于柏拉图的《理想国》)。当然这种“负责任”是这个负责制不是正式或程序上的,而是基于皇帝自己的道德观念。

强大的国家体制让中国在各种大型项目(比如早期的万里长城或者近现代的三峡水利工程)上能够高效迅速地调动资源,并且“法治”的缺失也使得国家在推行这些项目的过程中不会过多地受到某些既得利益团体的阻挠(比如早期欧洲的君主绝对没有权利因为要修一条运河而强行把某个领主的城堡迁到另一个地方去)。但是反过来一旦皇帝想要干坏事,基本上就是势不可挡,基于道德的“责任制”缺乏真正的制衡功能,导致中国历史上一直未能真正解决的“坏皇帝”问题。

问责:本书也翻译为“负责制”,负责制政府意味着,统治者相信自己应对治下的民众负责,应将民众利益置于自身利益之上。正式的负责制应当是程序上的:这些程序(通常在宪法中得到详细说明)允许社会公民因政府渎职、无能或滥权而将之完全取代。负责制政府首次出现于英国,不过由于对议会制度、“普通法”、“光荣革命”以及英国历史整体了解非常有限,这部分我看的过程中也没理得很清楚。

总结:从史前到法国大革命为止,其实占人口大部分的农民几乎一直没有在政治秩序的行程中扮演一个角色,所谓的法治和制衡之类的其实也都是国家、贵族和下层士绅之类的争斗,即使负责制中所谓的“人民”其定义也要在后面才慢慢得到扩展。而在工业革命之后整个世界的格局产生了巨大的变化,这些内容将会在第二本书中做具体的探讨。

我觉得书里所说的基于相互制衡的国家制度的设计其实就是一个连续的取舍,不同强度的制衡画出了从完全民主到完全专政这一个连续轴,很难说清楚哪一种制度是更优的。缺乏制衡的情况在“坏皇帝”出现时会造成巨大的破坏性,但是太强的制衡又会使得各个部门在不合作的情况下互相阻挠,让国家层面的困题的解决举步维艰(比如美国遥遥无期的高铁建设)。当然,如果有一个“好皇帝”,或者相互制衡的各部门能够实现目标一致齐心协力,那不管哪种制度都会变得乘风破浪。

总之我觉得抛开政治秩序和政治制度的议题,就把本书当做以特定的主题来探讨和总结贯穿各个大陆和各个时期的历史书来看,也已经是相当有意思的了。

最后给一个比较好玩的 Quote:

下一个出现的是来自东北的女真部落(满族的老祖宗),它击溃辽国,并把契丹赶到中亚。(他们向西逃得很远,竟然碰上俄罗斯人。自此,后者把所有中国人都叫作契丹斯基 Kitaiskiy。)

用 Google Translate 朗读了一下,真的是契丹斯基,哈哈哈哈哈太好笑了。

三案始末》是一本关于明末梃击、红丸、移宫三案的书,书很薄,但是为了厘清三大案的来龙去脉,包括明朝当时朝纲、制度各方面的状况和问题从朱元璋一直讲到了崇祯,把前因后果分析得很清楚,对当时宫廷和朝政的做出了生动的描绘。朱元璋为了巩固皇权,取消了宰相,代之以阁臣制度(宰相具有执行权,而阁臣按照规矩是听皇帝吩咐,照他的意见拟具出办法,等被批准后,才能据以拟旨来颁行),并且内外各部门间形成多种相互牵制的规例。这在保障帝权方面确实起到了积极的左右,虽然出现了各种专权的大臣,但是几乎都没有达到像汉朝那样能随意掌握皇帝生、杀、立、废的情况。这种皇帝权术的精髓是要让底下的大臣互相斗的思想似乎在各种影视作品中也经常见到。当然,互相牵制反过来的效果是群臣不停地互相争斗,对文化、经济各方面都起到了很坏的作用,一切日趋腐化,终于导致覆亡。

当时的这种分权和互相牵制的制度,虽然完全是基于儒家道德观念和帝权为基础制定出来的,但是也让人觉得和现代法治下的分权思想也有一些相似之处吧。好处也都是没法被谁专权独大,坏处当然也是互相牵制的情况下如果各个部门不齐心,基本上就很难办成大事,因为总是在不停地扯皮。而且从书中的描述看,当时的皇帝本人也完全受到各种(道德)条款的约束,完全不是“专权”和“为所欲为”的形象,想要任命自己宠幸的人,也不是随便下一道圣旨就可以的,得通过各种迂回的套路,而且哪里做错事(比如不符合正统道德规矩)还会被大臣上书骂,而且当时文官似乎以直言上书为荣,即使皇帝能大怒惩罚几个言官,通常只会招致更多言辞激烈的批评,最后还得认怂。

不过另一方面看当时朝廷整日争论不停的各种话题,包括本书主题的三案,大都是跟各种礼法、道德、规矩之类相关的争论,完全看不到任何关于科技、税收、水利、建设之类的比较具体实际的内容和事项的讨论,让人不禁觉得这样的社会制度能持续几千年也有些不可思议。但也许当时的社会就是如此吧?在科技革命还没有发展到彻底改变我们的生活之前,也许儒家道德思想亦或是各种宗教相关的思想,才是组织和维系庞大社会体系的粘合剂?

Turing’s Cathedral: The Origins of the Digital Universe》是一本介绍通用计算机的起源的书。相比以往看到的一些计算机史话之类的读物,这本书的特点应该是作者做了大量的研究和考证,并不是抓住一些吸引眼球的点和一些八卦轶事大做文章,而是试图完整地还原当时的整个历史背景和过程,当然这样导致的结果有好有坏。好的是感觉这本书的内容是比较真实可信的,特别是如果要做历史研究之类的应该是不错的参考资料吧,坏的就是内容有点太多了,而且读起来少了许多跌宕起伏。

The new computer was assigned two problems: how to destroy life as we know it, and how to create life of unknown forms.

书虽然以图灵为题,但是全书最核心的人物还是冯诺依曼。冯诺依曼原本是搞纯数学的并且是“the last representative of the great mathematicians”(据说他不太能分得清聪明人和笨人,因为两者再他看来都比较笨),但是后来对建造计算机感兴趣,开始集合一大帮工程师在普林斯顿高等研究院 (IAS) 开始建造计算机。当然整个故事并不是如此一帆风顺,虽然那个时候各种原型计算机已经出现,也许现代计算机架构被设计出来也是迟早的事,但是如果不是冯诺依曼的大力推进,也许历史会延后很多年呢。冯诺依曼作为生在匈牙利的犹太人,对纳粹德国的痛恨让他对于美国军方的核武器研究之类的项目都很热心,计算机项目得到很好的支持一方面也是因为它的一个目的是用于氢弹制造相关的计算。另一方面,普林斯顿高等研究院作为一个纯“高雅科学”(数学、历史之类的)的研究院,对于“低俗”的工程师们异常鄙视,一直各种怄气刁难,但是有冯诺依曼这个大数学家罩着他们又不敢乱来,等到后来冯诺依曼不在了那些搞 pure science 的人就迫不及待地把工程师们都赶走了。

Influenza: The Hundred Year Hunt to Cure the Deadliest Disease in History》介绍了 1918 年流感大爆发事件和从那之后人类在应对流感方面说做出的各种努力。目前估计 1918 年死于流感大爆发的人数在五千万到一亿之间(印度就有近两千万),相比起来似乎今天的新冠病毒还远远不够可怕,不过当时不止医疗卫生条件都极其落后,而且正值一战,各种大规模士兵聚集的营地简直是流感绝好的温床,而且由于世界大战动员起来的跨各大洲的大范围人员流动也在推波助澜,虽然当时世界范围的交通没有现在这样发达,但是流感病毒还是很快席卷全球,感染了当时世界人口的三分之一。

转眼一百年过去了,我们的医疗卫生条件都得到大幅改善,流感似乎也变得不那么可怕了,但实际上我们到今天为止依然没有特别有效的对付流感的办法。客观来讲,今天的医疗手段和当年比起来确实是天上地下,现在我们能够完整解读病毒的 DNA 序列,也知道了病毒侵入人类免疫系统的机制,另一方面,书里做了很多文献调查发现,一百年前一个主要治疗方式似乎还是放血,还有其他一些诸如吸入有毒烟尘之类的神奇疗法。相比起来,今天的医疗系统至少有三大法宝:1. 抗生素;2. 疫苗;3. 重症监护室。1. 抗生素虽然对于病毒没有任何效果,但是当年流感大爆发时很多死亡病例都是由于二次细菌感染造成的,对于这种情况抗生素就很有效果。2. 流感疫苗现在至少在美国是每年都会呼吁大家打的,可是为什么每年都要打?其实从侧面上也说明了我们现有的疫苗效果不太行,根据书里的调查,流感疫苗效果最好的时候也没有达到 50% 有效,而且有些年可能只有不到 20% 有效,而且是应该要全民注射流感疫苗这件事在不同的国家规定也不同,一直非常有争议;3. 生命维持系统基本上就是辅助或者代替衰竭的器官维持基本生命机制,给自己的免疫系统争取时间,实际上仔细一看和前两大法宝如出一辙:经过了一百年,我们能做的也就是帮我们自己的免疫系统打个掩护,剩下的工作还是得靠它们。

书里还介绍了一些其他相关的事情,比如 1918 之后流感一直以一些不那么严重的变种形式存在,而且也有过几次小规模的爆发,人们一直希望能够直接研究当年的流感病毒,以预防将来再一次大爆发,这里有一个叫 Johan Hultin 的人他博士论文的课题是去阿拉斯加冻土层挖掘当年死于流感的人的尸体用来提取病毒,虽然挖出来了比较保存完整的样本,但是最终没有能成功提取病毒,于是他就没拿到博士学位😂不过五十年后有别的研究机构又在试图寻找当年的病毒,他又去了一趟阿拉斯加,这次挖出的样本终于协助找到并重新激活了当年的流感病毒……

除了疫苗,病毒学、传染病学各方面的努力之外,还有其他一些统计和数据分析方面的工作:现在的流感一方面听起来好像就跟感冒差不太,另一方面好像又偶尔会听到说每年都因为流感死掉很多人,实际上现在我们对于流感病毒每年感染人数等各种情况的数据掌握是极其不准确的。主要原因在于我们对于流感没有啥特效的治疗方法,所以除了是症状极其严重的情况,否则即使采样去做流感病毒检测,不管测试出来是阴性还是阳性,基本上都是打发病人回去多喝水多休息,吃点退烧药之类的,靠免疫系统扛就行了,所以通常都不会多花额外的时间和钱去做测试(据说医护人员在决定是否要做额外测试时的一个衡量标准是:测试结果是否会改变医疗方式)所以基本上不太能区分流感、感冒和其他很多症状比较类似的病症。而且各地数据管理也没有统一和规范,本身汇报这个数据到相关机构(比如 CDC)也没有相关人员负责,特别是在流感季节医院繁忙的情况大家就更顾不上了。总之到头来我们虽然是在信息时代,但是也许主要还是危言耸听的假新闻在泛滥吧。中间 Google 有做过一次尝试,就是根据人们搜索流感症状相关的条目的频率来 track 流感爆发的情况,一开始感觉是一个 revolution,不过经过几年的不断改进之后,似乎一直都没有办法能够更精确到真正能派上用场,最后也就(毫无悬念地,跟 G 家的众多其他产品一样)惨遭关闭了。

另外书里还提到了美国有个叫做 Strategic National Stockpile 的东西,就是为了应对可能的疫情大爆发(最开始似乎还有防止细菌战之类的情况)而在许多个秘密储备中心囤积的口罩、医护用具、药品、疫苗之类的。不知道在新冠爆发的时候有没有起到作用,因为似乎各个州一开始也都在各种呼吁口罩短缺之类的。讲到这里,关于那些药品和疫苗会进入这个 stockpile 实际上也是超大宗的生意,由此牵连的各种药物和疫苗的有效程度调查和背后各种颇具争议的利益关系之类的,也是颇让人心寒。

总之是一本还不错的书,但是似乎也没有到特别惊艳的程度,中规中矩,有点像看了一篇加长版的 Wikipedia 的感觉。

人类的群星闪耀时》包含了对人类历史上一些重大事件所做的一些特写,一开始我觉得有点像在看命题作文选集,因为每篇文章前面有一段文字简要介绍了当时的历史背景,然后是洋洋洒洒的镜头特写,看到后来才发现原来那个背景介绍是译者加的,感觉有点不合适,或者至少应该放在每篇文末。总体来说茨威格的文笔是很好的,但是我觉得看起来反而有一种 uncanny valley 的不适感,因为既不像历史小说那样完全以写故事为目的,有自己的中心人物和架构,构建起整个世界观;但又不像真实的历史记录那样只做客观陈述。结果说得好听一点就是作者文笔非凡,随便找一个着眼点就能惟妙惟肖地讲一段故事出来,但说得难听一点有种随便一个线索就能天花乱坠地编一个好像是自己亲眼所见的故事出来的感觉😂

20世纪思想史 : 从弗洛伊德到互联网》我并没有看完。“一部百科全书式的作品”——感觉推荐语真是写得贴切,看了几十页,看到很多不同领域的名人的名字,他们的故事和思想,前后也没啥特别的联系和总结,就暂时弃了,感觉像在读装订成册的 wikipedia 文章打包合集。内容也许很详实,但读起来也太无聊了。

变形记》是我很小的时候就有所耳闻的一本书了,听说是充满讽刺意味,我一直以为“变形”是一种比喻的手法,结果没想到真是变形啊。非常荒诞的故事,虽然我本身并没有太多共鸣,但是描写还挺入骨的感觉。ps: 一开始看那个叶廷芳主编的卡夫卡全集里的版本,真是惊掉下巴,翻译得准确不准确我不知道,但是中文不通顺的问题也太严重了。

世界から猫が消えたなら》是一本比较典型的日式温情小说,亲情友情爱情还有和宠物的感情都顾到了,可以说是温情满满,对我来说可能剂量有点太大了。不过我觉得可能这本书最大的弱点还是在于许多剧情太容易预测了(结合标题,前几页“我”说自己要死了,一下子就剧透了很多东西),在可预测的前提下再做情绪强烈的感情描写就非常 tricky 了,因为很容易就会让读者觉得被套路了(想象一下追求者做出各种感人举动的时候你发现整个一套是为了让你感动而安排好的戏码)从而产生比较抵触的情绪。另外就是故事本身是一个极其不“合理”的幻想设定,就这样就挺好,但是作者又加了一些额外的哲学探讨,有些地方似乎在 justify 这些设定,感觉有点多此一举。比如谈及为什么人类要给每一种花命名,突然就引申到人类擅自给分秒年月命名,还有冷暖美丑都是由人类擅自命名而存在。还有关于爱,时间,自由之类的讨论,感觉都不太自然,不太像作者擅长的探讨,感觉去掉完全不影响故事发展,而且说不定会让行文更流畅一些。

The Drunkard’s Walk: How Randomness Rules Our Lives》看标题原来以为是更偏向于心理学和认知科学方面的书,看了发现主要还是讲概率与统计怎样一步一步地发展起来的历史和科普,当然中间也有涉及到一点点心理学方面的介绍,探讨了为什么很多事情(股市行情、CEO 业绩、职业运动员连胜之类的)明明很大程度上是由固有的随机性产生的“假规律”,但是人们还是会不自觉地去相信自己发现的“规律”并以此来指导自己的行动,一方面的原因是人类不喜欢情况 out of control 的感觉(如果事情是随机发生的,那就不在控制范围了,但是如果是有规律和因果的,那么就有可能在可控范围内),另外就是人类由于 confirmation bias 之类的原因在有了一个想法之后会选择性地忽略负面的例证而只看到支持性的例证。还有一个比较有趣的实验是,在描述了一个行事风格很像积极女权主义者的人之后,让大家在一些陈述中选择概率最大的一条,结果“她是一个积极从事女权运动的银行出纳”比“她是一个银行出纳”的投票要高很多,虽然逻辑上前者的概率是不可能比后者高的。

比较励志的结论就是:由于成功事件发生运气因素非常大(一个特定的人中彩票的概率很小,但是一百万人里某一个人中彩票的概率会非常大),所以如果也想成为成功人士的话,有一条很直接的路就是坚持不懈——在不断尝试中除了能积累经验之外,还会逐渐积累你好运气的概率值。

至于概率与统计的发展史这一方面来讲,应该还算不错的书了,从古希腊时期就开始讲起,早期主要是赌博为动机进行的这一方面的研究,有许多有趣的轶事,不过非常科普向,所以涉及到的议题都只讲到比较浅显为止就是了。

Things to Make and Do in the Fourth Dimension: A Mathematician’s Journey Through Narcissistic Numbers, Optimal Dating Algorithms, at Least Two Kinds of Infinity, and More》这本书我完完全全被标题党了,全书大概只有一章多一点的内容是讲关于四维空间的,而且这种本身 intuition 难以想象的东西靠文字和一点配图讲出来果然也还是同样难以想象。书的剩余部分都是讲各种喜闻乐见的数学中“有趣”的内容(也恰是数学中我最不感兴趣的部分),什么数字游戏啊、莫比乌斯环、无穷、图论、拓扑、逻辑的基本介绍之类的。总之大部分内容我都略过了,也许书本身还不错吧(?),但如果之前有看到副标题并且看过目录的话,是肯定不会买它的了。

发现我自己是喜欢比较有完整逻辑体系的书,对于零散的“有趣内容小合集”这种完全没有兴趣,或者至少要求会非常高。仔细想一下意识到这其实不仅限于数学书。比如我不喜欢看的书的一个典型子类就是短篇小说集,因为就是一些互不相连的小故事,在比如前面提到的《20世纪思想史 : 从弗洛伊德到互联网》,虽然内容丰富但是由于只是简单按照时间顺序列举出来,看不出任何线索、联系或者框架,所以也直接被我归类为不好看的类型。反过来我很喜欢看的书大部分都是有完整体系,有主线贯穿也有前后呼应的类型。


Down the Rabbit Hole of Tiny Keyboards

$
0
0

上学的时候一直都使用笔记本键盘,后来工作之后开始大量使用台式机,而且 Macbook 的键盘还变成了 Touchbar + Butterfly 键的无敌难用组合,于是就渐渐开始关注一些机械键盘。特别是在今年开始尝试了许多不同的键盘,到现在感觉进入了一个定制键盘的大坑,不过借由组装键盘的机会也开始对比 CS 更底层的东西(电路之类的)开始更感兴趣一些了。

对于定制键盘发烧友来说,可以定制的地方简直是太多了,到后面就是键盘 case 的形状设计对按键声音的回声的影响也都作为各种因素考虑进来,可以算是相当走火入魔的境界了。对于普通人来说的话,差别最大的因素应该主要是键盘的布局和键轴的选择,可能再加上键盘帽的选择。

键盘布局

键盘布局在wikipedia上有如下这么一个直观的图例。全图就是最常见的全尺寸键盘布局,这是 ANSI 布局,美国比较常见,国内似乎也主要是这种布局,但是在日本和欧洲会见到稍微不一样的布局,比如可能回车键是一个大的回转形方块按键。这个布局有一个最大的问题就是非常不对称,特别是如果你把左右手食指对应的 f 和 j 键这里放在你身体的正中央的话,你的右边会有很大一块空间被占用了,如果你是右撇子的话,鼠标就会需要放在右边很远的地方,所以在鼠标和键盘切换的时候就会非常费劲。

所以有各种其他布局的尝试。比较好玩的是把数字键区整个放到左边的设计,不过如果是经常使用数字键区的人来说可能并不一定会喜欢让它在左边(除非是左撇子,但是那样鼠标也要放在左边),对于不经常使用数字键区的人来说可能宁愿直接不要它。也许会计之类的需要使用大量数字的职业会使用比较多,反正我是从学会用电脑以来从来没有按过那个区域的按键。

下图所示的去掉数字键区之后剩下的白色和浅灰色的键的 80% 布局就是除了全尺寸之外最流行的一个布局,通常又叫做 TKL,也就是 Tenkeyless 布局。为什么明明少了不止 10 个键却叫这个名字?因为数字键区整个有一个名字叫做tenkey

TKL 是一个比较好的折中布局,也没有偏离标准太远,所以在市面上能直接买到的键盘里也是一个比较常见的布局,不过仔细看看的话其实方向键上面的一些键也是几乎不太会用到的。像 Home、End 之类的键通常也有其他快捷键可以代替。于是在美观和鼠标的距离上追求极致的人们开始继续减少键盘上的按键。上图中 60% 的布局就是只有白色按键的部分。这个布局在定制键盘爱好者里深受喜爱的一个主要原因是它虽然小巧但是有很“符合标准”,这在选择键盘帽的时候会成为一个重要考量因素,因为键盘帽通常是成套生产的,哪个键是怎样的尺寸,会被放在哪一行(我以前并没有注意到大部分键盘帽每一行的形状是不一样的),生产商通常会根据某一些已有的标准来生产,所以如果是使用跟标准相差很远的布局,在找合适的键盘帽的时候就会比较痛苦。比如下图的白色键盘,它的右 shift 键的长度就和标准的 ANSI 布局里的不一样。

但是 60% 布局因为去掉了太多的键,也有诸多不便的地方,一个功能键行没有了,主要是 Esc 键没有了。常见的解决方案是把“~”键换成 Esc 键,或者也有把 Caps Lock 换成 Esc 的,当然这样问题又变成了“~”键要放在哪里。另一个很大的问题是方向键没有了。60% 和其他类似的衍生布局(例如HHKB的布局)的解决方案都是使用 Fn 键,按住 Fn 键的时候键盘进入另一个 Layer,每个键可以 assign 新的功能,例如经常玩 PC 游戏的人或者 Vim 用户可能会在 Fn Layer 里把 WASD 或 HJKL 变成方向键。取决于 Fn 键的位置,这样可能也不是大问题,但是在你需要按其他和方向键有关的快捷键(例如 Shift + 方向键选择文本,或者 Cmd + 方向键以词为单位移动之类的)的时候就会变得特别复杂了。所以最近几年所谓的 65% 布局的键盘逐渐变得很流行。如下图所示,65% 布局通常只比 60% 多了一列的空间,然后通过减少右下角的 modifer 键的数量(反正我是从来没有用过所谓的 Menu 键)并减小右边 Shift 键的长度,就可以有空间放方向键了。其实 Macbook Pro 的笔记本键盘布局也是类似,不过它使用了小号的按钮来给方向键用,所以更节省空间一些。此外,多出来的一列还有多余的空间放三到四个键,于是也可以放 Home、End 之类的稍微常用一点的键,以及由于 Esc 被占用掉的“~”键等等。

不过 65% 布局和 60% 布局不同的是,它并不是一个“标准”布局,因为它修改了一部分键的大小,然后加了一些非标准位置的键,所以这里如何修改,新加的键放在哪里,放几个之类的就每个设计师都有自己的想法,于是出现很多互相不一样的变种。所以键帽制造商在选择哪些形状和布局的键盘能够得到最大兼容性的时候就需要做更多取舍,用户在找键帽的时候也就更麻烦一些。

如果跳出标准键盘布局的话,种类就非常多了。一个很常见的大类是 split 键盘,通常也称为人体工学键盘,就是把左边和右边分开,这样让你在打字的时候手可以以比较自然的姿势放置,而不是并拢放在中间。另一类则是 ortho linear 布局,不知道中文应该怎么翻译,线性正交键盘?不如直接叫格子键盘好了。和标准布局的主要区别一个是没有了超大的空格键,身强力壮的大拇指现在有了更多的用处,二是各行的按键没有错开。

可能你有听过“标准”键盘布局使用 QWER 这样的按键排布方式是为了让打字员打字速度下降以避免把早期的打字机卡主的设计,所以其实并不是最优的按键布局。所以后来发展出了诸如DovarakColemak之类的更优的布局,通过把跟常用的键放在更容易按到的地方让你打字效率更高。这里我不确定是否按键错开与不错开是否有一个类似的故事,但是如果不错开的话,在定制键盘的过程中很多问题都会很简化,比如键帽的大小通常就是一个单位或者两个单位,不会出现各种奇怪的长度,电路矩阵也是一个规则的方阵不会歪来歪去等等。

另外,虽然也有很大的方格键盘,但是最常见的还是 4x12 (例如PlanckPlaidNiu Mini)或者 5x12 (例如Preonic)之类的小号键盘。对比一下标准键盘就会发现,有很多键都没有了,除了加减等号之类的符号之外,在 4x12 上甚至连数字键都没有了。似乎是不太能正常使用的键盘,但是其实(我觉得)是比 60% 键盘更易用的。因为 60% 的一大限制是为了满足兼容性,而格子键盘没有这个包袱,所以虽然原理上和 60% 键盘一样是通过 layer 来实现不存在的键,但是实际操作性却更强一些。具体来讲,这种小的格子键盘一般至少会有两个额外的 layer,通过空格键两边的两个键(lower 和 raise)来触发。由于空格键变小了很多,这两个 layer trigger 可以在几乎不动手的姿势的情况下就能轻松按到。

实际上格子键盘强调的一个重点就是尽量不要移动手的位置,去掉数字键排也是出于这个考虑,因为对于普通大小的手来说,基本上主要是能够够到原本行(ASDF 这一行)的上面和下面各一行,再加上最下面一行主要由大拇指操作的行,一共四行刚刚好,而数字键和其他缺失的符号则可以通过两个 layer 来实现。确实这样能够实现几乎不移动手,但是带来的 trade off 就是需要按的键更多,怎样是更优的其实很难讲清楚。所以另一个很受欢迎的格子布局是 5x12,再加上顶上一排数字键。不过我觉得到了这种小键盘的领域,其实和怎样是最优的相比,好玩也许是更多的因素吧?

下面是我目前使用的键盘布局,红色和蓝色的两个 layer 分别可以触发某些键上左下和右上用对应颜色表明的键。除此之外还有两个特殊的绿色背景的键,他们是所谓的mod tap键,在按住的时候充当一个 modifier(左边 ctrl 和右边 shift),但是按下立刻放开的话,则会被解释为另外的键(Esc 和回车)。

事实上这样的小键盘大概每个人都会有自己的布局,这样可能在选择键帽的时候有点麻烦,有许多人会直接选择每一行形状一样的键盘帽或者甚至是空白无刻键盘帽。这是我自己觉得比较折中的布局,和默认的布局也不太一样。有些比较 crazy 一点的布局可能会把 modifer 放在中间,增加 navigation layer 把 HJKL 变成方向键,还有直接通过 mod tap 类似的方式把一些普通的字母按键变成 modifier 或者 layer 切换的按键的。总之定制键盘除了硬件可定制性很强之外,软件或者固件方面可定制性通常也非常强,定制键盘很常用的固件qmk具有非常强的可定制性,刚才提到的那些都是 qmk 的标准功能,可以直接通过在线 UI 配置工具进行配置,如果需要的话,还可以直接进行编程进行灵活性最大的定制。例如有些人做很复杂的 tap dancing,按键按一下、按两下、长按、按一下之后长按之类的都可以实现不一样的功能。还有一个很厉害的功能叫做auto shift,使用方法是按一下 a 键输出 a,长按(时间长短可以自己配置)一下则输出 shift+a,也就是 A,其他的键类推,这样就再也不用手工按 shift 了,需要配置的 layer 也少了许多。我稍微尝试了一下,不是很习惯,因为为了实现这个功能,出发按键需要由原来的“按下的时候触发”变成“释放的时候触发”,这样 QMK 固件才能分清你是长按还是短按。这样细微的区别原本应该问题不大,我其实不知道是否大部分人都会察觉到,但是我自己是能明显察觉到变化的,即使敲击速度飞快,也能感觉到细微的违和感,特别是存在对比的时候:比如像空格键这种不存在 shift 功能的,默认情况下依然是“按下的时候触发”,于是打字(英文)的时候就有一种词卡顿着出来但是空格一下子打出来了的感觉。

还有一些人尝试实现所谓的chording,就是像在钢琴上弹和弦一样输入,一次同时按下几个键还实现不同的功能。事实上速记员用的速记键盘就是这样的输入方式。虽然听起来很简单,但是实现起来其实有蛮多细节的,因为“同时按下”其实是一个比较模糊的定义,人手很难做到真正同时按下,并且在打字很快的时候前后的按键可能会有 overlap,在固件代码里如何健壮地实现这些功能其实也是比较有意思的具体工程问题的。

如果你想尝试一下格子键盘的话,我的经验是字母键区可能一个下午就能习惯过来,因为原本标准的错位键盘上面两排字幕键其实错开的距离很小,跟格子键盘差别不大,所以主要是要适应最下面一排键。至于数字键和符号键,由于要使用 layer,所以刚开始会反应速度比较慢,大概一两周可能可以适应过来(本篇博客就是用格子键盘打出来的,其实是为了测试键盘才特地码了这么多字)。另一个问题是,如果用习惯了格子键盘再回去用标准键盘是不是就完全不会用了?我自己目前有限的经验来看似乎不会,证据是你能同时用手机键盘和电脑键盘打字,互不影响,当然这两者是差别很大的,这里两个不同的键盘布局因为差别比较小,所以可能会互相影响的概率比较大,如果这样可以尝试把格子键盘的布局索性改得更彻底一些,例如使用DovarakColemak或者Colemak Mod-DH字母布局,增加两者的区别。不过这样除了键盘帽更难找之外,如果你是 VIM 用户可能会比较难办,因为 HJKL 现在散落在不同的地方了。但总之我自己的感觉是用习惯了某一种布局之后立刻切换到另一种,一开始会老是按错,但是大概一两分钟就能再调整过来,所以除非你常年荒废某一种键盘布局不使用,否则应该问题不大。

键轴

键轴就是键帽下面实现案件的那个机械小玩意(虽然键轴不一定是通过机械的方式来实现的),最有名的键轴厂商应该要数来自德国的Cherry MX了(下图盗自他们的官网),当然 Cherry MX 的键轴由于太过主流,在定制键盘爱好者社群中反而不太常见,大家喜欢用各种更加小众的键轴,像什么 Holy Panda、NK Cream、Box Royal 之类的。具体什么键轴用着顺手,每个人应该都会有自己的偏好,我自己在尝试过许多选项之后发现自己偏好线性轴,并且喜欢非常轻的轴(像 Cherry MX 系列最轻的红轴对我来说都有点重了)。具体来说我自己目前最喜欢的的轴是宁芝的Niz Plum Atom 68那一系列键盘里的 35 克静电容键轴。静电容轴和机械轴的实现方式不一样,但是从用户的角度来说其实不用太纠结其原理(当然可能 PCB 版和键帽之类的接口会不一样),静电容轴最典型的例子应该是hhkbRealForce了。我有一把 RealForce 的静音 TKL 键盘,手感确实很棒,不过我觉得 45 克用久了还是会有点手指累。宁芝的静电容轴算是一个山寨产品,但是它做的 35 克静电容轴我觉得按起来其实更舒服,当然这都是个人喜好了,很多人不喜欢太轻的按键,因为可能会比较容易误按。

机械键盘有一个刻板印象就是自己按得爽,但是周围的人都要被吵死。其实很响的键轴我感觉也能把自己吵死,不过还好这几年静音键轴受到越来越多的关注,其实选对键轴的话,噪音可以说完全不是问题。首先如果选择线性轴的话,本身声音就不会很响了,其次很多键轴现在都提供静音版本,通常是在键轴触底的地方加上软一点的材料来减震。比如宁芝的静电容键轴我就觉得相当安静,如果是要和 Cherry MX 接口兼容的话,Cherry MX 之家也有静音红轴,其实是更安静的。Gateron 也有一个静音红轴,基本上和 Cherry MX 的版本参数一样,但是 somehow 按起来更轻一些,所以我也更喜欢。此外,Logitech 的Romer G系列的键轴我也挺喜欢的,不过这些键轴和常用的 PCB 版和键帽都不兼容,所以比较难用在定制键盘上(可能需要自己设计 PCB 板子或者手工连线)。

事实上现在大家在追求键盘的声音上感觉已经到了一个比较偏执的地步,在原厂各种键轴之上还出现了各种重新组合和定制的键轴,并且大家还会将键轴打开涂上润滑油。当然目的并不只是让按键声音尽量小,而是让他听着更“悦耳”。而键盘的按键声除了键轴本身的因素之外,键帽的形状、材料、高度也会有影响,同时声音会通过键盘固定板或者 PCB 板在键盘内部传播并形成回声之类的,所以现在在键盘内部加装隔音棉垫片也是非常常见的,与此同时键盘底座和外壳的材料甚至是形状设计也都成为影响 acoustics 的重要因素(听起来就好像是在设计歌剧院的建筑结构一样)。如果平时没有因为自己键盘的按键音而烦恼的话,这其实不会是一个大问题,但是如果把一个声音很好的键盘和一个普通的键盘放在一起对比的话,差别还是挺明显的。所以现在 Youtube 上与键盘相关的一大类非常流行的视频其实是 sound test ASMR,基本上就是听一个人用他的键盘打字的声音

键帽

键帽是机械键盘里最容易定制的一个部分了,用一个 key cap puller 很容易就能把键帽拔出来,然后装上其他的键帽。不过其实里面的坑也不少。我以前以为不同的键帽套装只是颜色不同的方形小帽,结果换过一次键帽才发现原来键帽的形状设计也有很多讲究。大部分键盘的底座都会有一个倾斜度,这样让打字更容易一些,特别是对于上面一排的数字键甚至是更远的功能键来说,如果有一个抬起的角度,就更容易按到。类似的,键帽的设计通常也有类似的考量,首先键帽会做出一个倾斜度,以平衡底座的倾斜度,然后靠近上方行的键帽会做得更高,也是让你更容易按到。下面这个keyboard.university 网站上的图暂时了几个常见的的键帽 profile。一般我们在市面上买到的键盘的键帽都是 Cherry 或者 OEM profile 的。

有些 profile 非常高(像 SA),还有一些键帽(比如 MT3)顶端是有凹陷的,手指放在上面感觉像是放在窝里,感觉很舒服。总之各种设计有的是为了好看(复古),有的是为了让按键更舒服,但是其实什么更好看,什么更舒服,其实都是非常主观的了(下图为 MelGeek 的 MG Profile 键帽)。

总之不同行形状不同给定制键盘的键盘帽选购带来了一定的麻烦,因为如果你选择比较非标准的键盘布局的话,你想要的键帽套装可能并不一定有你想要的长度的键(例如短的 shift),即使有,如果那个键帽不是在合适的行上,也会出现兼容性问题(强行装上会很难看或者很难用),比如如果你想尝试非标准的DovarakColemak或者Colemak Mod-DH字母布局,就会陷入这样的困境。由于这样的原因,有一些所有行形状都一样的键帽 profile(例如之前的图中展示的 DSA)在定制键盘爱好者社区里也非常流行,甚至更进一步有很多空白无刻的 DSA 键帽,兼容性就更佳了。当然如果倾斜角度的键帽用习惯了用这种平坦的键帽可能会很不习惯,比如上面行的键会觉得很远,经常会按不到,或者如果底座是倾斜的,整个键帽也会有一个斜面,手指会感觉在上面站不住。不过这些问题可能花一点时间也会适应下来。

除此之外还有一个我以前从来没有注意到过的细节就是:键盘上 F 和 J 两个食指所按的键上分别有一个凸起的小横条,帮助你不用低头看就能找到并回归手的原始键位。在我尝试了一次没有这两个小凸起的键帽之后才意识到自己潜意识里有多么依赖这个东西。然而市面上的键帽并不一定都会有这样的小凸起,有的键帽套装会用一个(非常难以摸到的)小圆点代替小横条,还有的会将这两个键的表面做一个比其他键更大的凹陷,甚至还有的根本不加以区分。所以取决于你自己的习惯,这可能是非常需要注意的一个点。

最后需要值得一提的是,如果不是完全的格子键盘布局的话,键盘上除了键轴之外通常还会有一个叫做 stablizer 的东西,用在比较大的键上。例如空格键长度远远超过一个字母键,但是它下面仍然只有一个(和字母键一样大小的)键轴,如果你按键按在两边的话,空格键就会像跷跷板一样翘起来,而 stablizer 就是一个简单的稳定机制,让你不管在哪个位置按下键都是差不多的。在标准键盘布局下除了空格之外,backspace、shift 之类的键通常都会使用 stablizer。而 stablizer 虽然实现原理都差不多,但是从具体细节来讲有好几种实现,根据固定位置不同可以分为 PCB Mount 和 Plate Mount。如果是 PCB Mount 的 stablizer 的话,其实看起来就跟一个多余的键轴差不多,但是这里之所以提到这个是因为如果你的键盘使用的是 Plate Mount 的 stablizer 的话,那么在拆卸和安装键帽的时候,每次都需要重新组装这几个 stablizer,虽然也不是特别困难,但是小玩意拿捏起来也不是那么顺手,总之比较麻烦,如果在 build 键盘的时候有得选择的话,尽量还是选 PCB Mount 的版本好了。

定制键盘

总之我现在算是入了定制键盘的坑,目前热衷于小型格子键盘,4x12 和带数字键的 5x12 我都有尝试,似乎还是稍微更偏好 4x12 一些。要说真的什么样的键盘能让我工作效率更高的话,我觉得市面上能买到的一些 65% 的键盘(例如宁芝 Plum Atom68)甚至 TKL 键盘都完全能够胜任了,之后的东西应该完全进入一种兴趣领域了。可能你永远也不会找到最好用的键盘,就好像你永远也找不到最好用的编程字体一样。但是作为兴趣的话,过程就重于目的了。键盘这个坑让我现在对电子、电路、固件编程,乃至于 CAD 建模、3D 打印之类的都提起了兴趣,而且现在的定制键盘 kit 似乎很少有无线连接的选项,这感觉也是一个很多坑但是应该会学到很多东西的地方。

当然定制键盘这个兴趣也有它的不好的地方,首先一个是它还是会花不少钱的,你可能会发现一套键盘帽就会比市面上能买到的比较好的成品机械键盘要贵了,当然这和诸如相机镜头之类的败家爱好还是没法比的,而且工作以后领了工资用来丰富自己的课余生活也是无可厚非啦。但是其实更让人头疼的是其实大部分东西你都是买不到的。比如下面是Novelkeys.xyz的一个页面截图。

如果东西经常都处于缺货状态,那是不是说明这是一个供小于求的市场,那为什么市场没有进行自动调整呢?我觉得可能因为定制键盘总体来说还是一个相对小众的社区,不论是键盘 DIY kit、PCB 板子、外壳还是键盘帽,很多都是有设计能力的爱好者个人做出来的。因为是个人生产,并不会像大型商家那样囤很多货然后慢慢卖,所以通常通过所谓 Group Buy 的形式来支持生产。大概就是大家集资,收集到了足够的资金之后再根据订单数量去进行生产,通常不会生产多余或者只生产很少的多余产品。所以基本上 popular 的东西现货都是一下子就被抢光了,所以只能依靠 group buy,而 group buy 不知道是一直就这样还是因为受到 COVID 影响,等待时间非常长,例如很多键帽的 group buy 的预计送货时间是十个月以后,并且还有可能会有各种预期之外的延迟,比如Susuwatari MT3 键帽有不少人似乎等了两年才拿到。总之感觉就是一个非常坑的爱好,哈哈……

Ortho Linear 键盘

如果你也有兴趣尝试一下 Ortho Linear 键盘,但是又不是很有兴趣自己组装或者漫长地等待各种部件到货的话,台湾的 ZSA 提供了一个叫做Planck EZ的已经组装好的键盘,并且号称“永远不缺货”,但它其实是在你下了订单之后再生产的,不过似乎一般一周之内也能做好并快递运送到全球。虽然塑料底座摸起来材质没有很厉害,而且自带的键帽手感不是很润滑,但是确实是最容易 access 到的 4x12 格子布局(其实空格占了两个键)键盘了,并且可定制性也不错,键轴是可热拔插的(不需要动用焊锡就可以换不同键轴),固件也完整支持 QMK,还有图形界面定制工具。除了价格偏贵一点之外,算是很不错的选择。

如果想要便宜一点的选项或者是有自己组装的兴趣的话,最常见的 4x12 选项是Planck,不过有可能需要等待很久的 pre-order 或者干没货。另一个选择是一些开源的键盘,例如Plaid,即使 kit 没货,理论上你可以通过开源的 PCB 自己去JLCPCB之类的网站上打印 PCB,然后如果你熟悉基本的电子元件采购的话,可以自己根据元件列表采购二极管、控制器之类的,然后自己把键盘组装起来。

记一次有意义的熬夜

$
0
0

最近有一次特别好玩的经历,熬夜到半夜四点多,仿佛有种回到了大学时代做大作业的感觉。于是决定把整个事情记录下来。事情其实就是 build 一个定制键盘的过程,但是在最终快要完成的时候突然出现了一个小问题:在按下某一个键的时候整个一列键都被触发了,后面的故事就围绕着调试和修复这个问题展开,直到后面完全搞明白背后的原理和问题,感觉学到了挺多东西也很好玩。

本故事的中心人物就是图中这个小家伙。这是一个 5x12 的 ortho linear 键盘 kit 组装好了的样子。Kit 是在boardsource.xyz买的 5x12 kit,因为我想玩一玩根据已有的键盘 kit 组装的过程练练手,同时也想尝试一下比 4x12 多一排数字键的键盘布局是不是会更好用一些,于是就选了这样一个 kit。并且这个 kit 其实是相当“裸”的:它没有外壳,底板其实也是用一个(没有内嵌任何电路的)PCB 版做的,所以对于自己从头完全设计和定制键盘是比较有参考价值的(因为制造形状复杂的金属外壳是比较麻烦的事情,而打印 PCB 板子现在即使小批量也已经比较可行了)。当然还有一个更重要的原因就是大概目前类似的 kit 只有这个不是 sold out 的状态吧。¯\_(ツ)_/¯

kit 里包含了组装键盘的大部分材料(键轴、键帽和 USB 连线需要自己另外准备),包括三块板子,分别是顶部的定位板,用来把键轴固定住,中间的 PCB 版,包含了键盘矩阵电路,并连接微控制单元(MCU),和底部的底板,然后是 48 个二极管,以及 48 个键轴热拔插的 socket,一个微控制器和它的针脚头,一些螺丝等。下面是来自 BoardSource 官方的组装指南的示意图:

组装过程从技术上来讲其实并没有很复杂,不过几乎每一步都需要一些耐心。首先是把所有的二极管弯成 U 型插入板子里,难点在于弯曲的部分尺寸刚好能匹配板子上两个孔之间的宽度,这样插进去之后二极管能够尽量紧贴板子。见下图(左边桌子上散落的几个是多余的二极管)。之后把针脚张开一些,使得板子翻过来二极管也不会掉落,然后用过焊锡把所有的针脚都焊在板子上(我完全无法操作焊锡,这个步骤需要 N 来帮忙),再把长的针脚剪掉。

焊完二极管之后就可以焊 48 个键分别对应的热拔插 socket,通常安装键盘是直接把键轴的针脚用焊锡焊到 PCB 板子上的,这样的坏处是如果你想换其他的键轴,要么需要 desolder(不知道中文怎么说,拆焊?),要么可能需要另外在组装一个键盘。所以最近特别流行的解决方案就是键轴热拔插,我们这里采用的是 Kailh 的 socket,编号CPG151101S11。把这个 socket 焊到 PCB 板子上之后,键轴就可以直接插入即用了。当然使用 Kailh 的 socket 需要 PCB 设计的时候就考虑到这一点,留够焊接 socket 的接口和电路。如果是没有考虑到热拔插的键盘 PCB 板子的话,可以使用 Mill-Max 的热拔插 socket,这个听上去兼容性好很多,但是由于工作原理不一样,焊接难度要高很多。

焊完 socket 之后就可以焊微控制器了,我这里使用的是Elite-C V4,基于 ATMega32U4 芯片,自带 USB-C 接口。PCB 板子上有为微控制器的针脚留出来的焊接空,不过需要用 Male Header Pin 把 Elite-C 的针脚和 PCB 的针脚连起来,然后再在两面分别焊上。针脚间隔比较小,感觉焊接难度大了不少,不过似乎也比想象中要容易一些,因为我以前一直以为焊锡的形状完全是靠你焊锡头的机械操作来形成,要让焊锡不要流到旁边去黏住其他的针脚造成短路完全是一门手艺,结果在做了一些调研之后发现其实正常情况下焊锡只会附着在 PCB 版上预留的金属环上,而不太会流到 PCB 表面的非金属部分上面去。当然,如果弄了太多的焊锡或者手残之类的情况自然也会悲剧了。下图 N 正在焊 Elite-C 的针脚。

再之后就是把键轴装到固定板上,然后要把装好键轴的固定板和 PCB 版插到一起。第一步非常简单,一点也不费力的纯体力活,但是第二步就有点复杂了,因为需要一次把 48 个键轴的 96 个针脚和 PCB 上的对应的热拔插孔全部对齐,因为键轴的针脚是很软的,在运输过程中可能会有一点点偏离直角,所以并不一定就能完美地对齐。总之这一个步骤在操作上需要一点难度,之所以有点麻烦的原因也是我们是非常简陋的 kit,没有键盘外壳来支撑和固定 PCB 或者定位板。

连好之后就只剩最后一步——接好底壳板子了。不过在那之前可以测试一下键盘。用 USB 线把键盘连到电脑上,去qmk configurator网站上找到 BoardSource 的 5x12 的固件和默认键盘布局,做一些适当的修改,编译并下载固件,然后按下键盘上的 reset 键,就可以通过QMK Toolbox把固件烧到微控制器里了。然后可以按下每一个键测试一下。在正要举杯庆祝一晚上的劳动成果的时候突然发现第一列第二个键按下的时候会同时触发了整个一列的按键。关键是这个按键恰好位于微控制器的正下方,这个位置怎么说都太可疑了。但是除了觉得可疑之外完全没有任何概念究竟要如何 debug,因为其实对于键盘如何运作的了解也非常有限。

于是我跑去 BoardSource 的 Discord channel 里问问题,我发现定制键盘爱好者社区似乎在 Discord 上还挺活跃的,有点意外的是已经大晚上了居然还有客服在线,了解了一下基本情况之后对方提了一个建议就是检查一下 PCB 板子上维控制器的焊锡和相邻的热拔插 socket 针脚焊锡是否有短路的情况。因为 ortho linear 的键盘不像标准键盘那样有许多形状奇怪的大键(例如空格之类的),而是整个板子均匀地布满了键轴插孔,所以要找一个地方放微控制器就比较麻烦,不得不让有几个针脚靠得非常近,如下图红色和蓝色的箭头所指的微控制器的针脚和键轴的针脚(其实在使用热拔插 socket 的情况下这个键轴的针脚是闲置未用的)就非常接近。

有一些键盘干脆直接放弃把微控制器放在按键的底部,而是在 PCB 板边缘突出一块来专门放置微控制器和其他需要焊上去的电子元件,这样一方面可以让 PCB 上的针脚布局更干净一些,同时由于元件在水平上铺开了,所以垂直上就不需要占用大量空间,于是键盘就不用做得很厚,而且将元件展示出来也能起到美观的效果。下面是Plaid 键盘的一个成品图例子,可以看到二极管、reset 按钮和微控制器都在 PCB 的顶部“暴露”出来。

回到 debug 的问题,虽然 N 表示这些针脚都已经分得很开了,那些黑色的亮亮的部分是松香之类的不导电物质,但是还是再用焊枪加热了一下焊锡仔细 reflow 了一下,试图把它们完全分开。不过我们尽了最大努力还是无法解决这个问题。有可能是因为我们没有成功把针脚分开,但是似乎更有可能是其他问题。询问了客服,本来希望她在对 PCB 电路设计很清楚的情况下能给出一些其他调试建议,但是她也想不出其他的什么可能问题。我们自己想到的一个疑点就是微控制器的 USB-C 接口的外部金属和它正下方的 hot swap socket 的焊接部分接触到一起了。但是在组装指南上并没有提到这个问题,问了客服也说那里应该不会有问题,但是客服也给不出其他排查的建议了。

于是我们尝试从几个个角度出发进行调试:一方面根据电路板上的布线图尝试搞清楚每个针脚是怎么连在一起的,这样可以测量一下有没有哪里不应该连在一起的地方不小心短路了;另一方面是了解一下键盘电路的工作原理,这样可以知道在什么样的情况下会有整个一列都触发的问题,提供可能需要排查的方向。

搞清楚键盘电路板布线其实比较容易,因为键盘的 PCB 比较简单,只是一个矩阵,所以只有正反两面的电路,根据电路板表面的示意图就能搞清楚了,而键盘电路的基本工作原理也不复杂,网上有不少文章介绍,比如这个手工连线的键盘组装过程里就有很不错的介绍,这里再简单复述一下。简单来说键盘上的每一个按键其实就是一个开关,按下就连通电路,照理说键盘是一个极其简单的设备,只需要在每个开关被按下的时候原封不动地报告给计算机就可以了。通过 USB 或者蓝牙之类的协议与计算机通信并报告按键触发的事件,这基本上就是键盘控制器做的事情(当然复杂的定制键盘的固件还会做很多预处理)。为了让控制器能对每个按键按下有反应,最简单的方法是将该按键所在的电路接到控制器的一个输入针脚上,然后让控制器读取该出的电压来判断电路是否接通(按键是否按下)。这样做的一大问题是我们需要和按键个数一样多的针脚数目,然而常见的微控制器的针脚数目都不过 20 上下,这对于键盘来说完全不够。标准的解决方案是通过矩阵编码轮询来减少针脚数量,如下图左边所示:

我们把按键排列成一个矩阵,然后把行和列分别连起来,每一行和每一列各自连到一个针脚上。为了简单例子中只用了四个按键,被排成了 2x2 的矩阵,还是需要四个针脚,似乎并没有什么改善,但是如果是大一些的\(m\times n\)的矩阵的话,通过这种排布方式需要的针脚数量就从\(mn\)变成了\(m+n\),所以 20 个针脚就够处理 100 个键了。这种连线方式下控制器只能区分某个时刻某一行/列是否有某一个(或多个)按键被接通了,为了搞清楚具体哪个按键被按下了,控制器需要做一个轮询,大概是像下面这样的伪代码,通过非常迅速的循环迭代,可以在你按键的一瞬间完成一次或者多次迭代,让你感觉不到依次轮询的存在:

  1. for(i=0;i<n_cols;++i){
  2. power_on(col[i]);
  3. for(j=0;j<n_rows;++j){
  4. if(read(row[j]))
  5. report_event(key_down[i][j]);
  6. }
  7. power_off(col[i]);
  8. }

但是这个方法在有多个按键同时按下的时候有可能出 bug,具体如上图右边所示,如果三个红色的按键同时被按下,此时控制器如果在第 0 列加电,并在第 1 行读取,会发现电路是连同的,于是就会错误地以为是青色的 k10 被按下了,但事实上电路是通过另外三个按键迂回地连通的。解决方案是在电路中放置二极管,如下图所示,在没一个键和行连接的地方放置一个二极管,由于二极管只允许单向通电,所以在 k01 那里之前的“反向”流通现在被阻止了,于是解决了多个按键同时按下时可能出现的按键检测错误问题。

简单检查了一下手边的 PCB 板的布线,发现确实和这里的示意图是同样的,但是在这样的情况下哪里短路了会导致某一个按键按下的时候会让整个一列的按键都检测为触发状态呢?似乎也不是很清楚。还有一个困难是手边没有万用表,没有办法检测具体电路哪里是短路状态。情急之下想到之前买的 Arduino kit里有 LED 灯,觉得连上一个电磁就能通过灯的亮灭来检测连通性,于是赶紧找了一节电池试了一下,并没有成功,也不知道是电池没电了还是 LED 灯被短路烧坏了——因为查了一下文档发现 LED 连到电路里是要配上电阻才行的。于是索性按文档把 Arduino 板子接到电脑上,然后把板子的“接地”和 5V 电压用面包板连上合适的电阻和 LED 灯,在用多出来的线做了简易连通性探测器。

通过这个简陋工具我们发现出问题的按键所在的针脚有一边是和控制器的“接地”是连通的,并且控制器的 USB 口金属部分也和“接地”是连通的,当然还有其他许多地方是连通状态,以及一些模棱两可的 LED 灯很暗地亮起来的情况,感觉完全超出了这个自制工具能处理的范围。而且这个时候已经凌晨三四点了,于是只好先休息。

第二天整理好精神,下了班,玩了一会儿塞尔达荒野之息,收到了亚马逊寄来的几个神器:万用表、Hakko FR301-03/P 和 Solder Wick。第一个是用来测量短路的,后面两个都是用来移除焊锡的工具。有了万用表之后测量短路就太容易了,不过基本的结论跟头一天晚上并没有太大的差别,并且成功地分析清楚了确实 USB 接口和 Kailh hot swap socket 接触导致按键的一个针脚成了接地状态,此时按下这个键就会导致整个一列都激发——当然后来发现我们由于对矩阵轮询的细节并不清楚所以解读方法完全是错的,不过运气好结论还是正确的。

总之在这种情况下唯一能做的就是移除焊锡把控制器拿下来,用绝缘胶带把 USB 口和 Kailh hot swap 口隔开,再把控制器焊上。其中最困难的一个步骤就是移除焊锡,因为所有针脚上的焊锡全都要移除的非常干净,否则控制器就没法取下来。移除焊锡的基本方法是用焊枪加热,在焊锡融化状态时把它“弄”走,最简易的弄走方法是用一个吸焊锡专用的弹簧吸管,虽然是专用的,但是并不是特别好用,因为必须在焊枪拿开的一瞬间就把吸管怼上去吸,否则焊锡就又凝固了,但是速度又会牺牲精准度,导致经常会剩下一些焊锡。Solder Wick 是采用直接把焊锡吸到自己身上的办法,并且它本身是耐热的,所以可以直接把焊枪对着它加热,不存在时间差的问题,不过 Solder Wick 主要是对表面的焊锡比较管用,对于针脚内部的焊锡却是很难清理。最后还是靠 Hakko 的集加热和真空吸为一体的神器,很迅速就把焊锡清理的差不多了,即便如此控制器也很难拿下来,最后非常幸运地是 PCB 和控制器都没有坏,不过连接用的 male pin header 完全扯坏了。由于我手边没有多余的 pin header,所以这个项目又往后拖延了几天。不过在那之前必须要验证一下我们是否找到了真正的问题。

现在控制器卸下来之后,USB 口就不再和 Kailh hot swap socket 接触了,所以如果能够连线确认现在控制器是正常工作的的话就大功告成了。但是没有 pin header 的情况下没法焊接,而且去除焊锡的过程比较痛苦,如果可以的话我希望能够在焊接之前能够确认它是正常工作的。于是我从 Arduino kit 里拿出了很多线,分别用 female pin header 接到 PCB 和控制器的针脚,再用线把所有的针脚连起来,然后插上 USB,再让不同的按键短路造成按下的效果,看是否能触发正确的按键。过程并不那么顺利,因为 pin header 虽然起到了一定的固定作用,但是在不加焊锡的情况下其实接触不一定很好,导电很不稳定,基本上要不停地把针脚晃来晃去才偶尔会碰到一个接触良好的状态。总之最后花了挺长时间才勉强确定了似乎是没有问题,不知道这种情况 in general 有没有比较好的调试方法,比如用某种糊状的容易去除的导电物质塞到针脚里,但是感觉要做到像焊锡那样微妙地不把相邻的针脚短路似乎又很难。

几天之后新的 male pin header 到了,同时还买了绝缘胶带,用来把 USB 口和 Kailh hot swap socket 的金属部分隔开,之后再重新焊接上控制器,装上键轴,连上电脑测试,终于一切正常了!跟客服确认过之后对方也表示这确实是他们设计时没有考虑到的问题,如果需要的话可以退款或者在之后他们有改良的 PCB 之后给我再寄一个。不过由于我们成功挽救了 PCB 和控制器,所以也没有找他们要什么,特别是他们看起来似乎也是几个键盘爱好者经营的小 business 啦。

完成的键盘如本文第一张图所示,这是 5x12 的 ortho linear layout。不过其实做好这个键盘的时候我已经习惯了 Planck 的 4x12 的布局了,所以我几乎第二天就把它底下四排的布局改成了和 Planck 一样的,把它当做 4x12 来用了。到这里流水账照理该完结撒花了,但是有一件事情一直在我心中若隐若现:虽然我们找到并解决了问题,但是似乎并没有真正搞懂问题到底是怎么一回事,就包括之前提到的键盘轮询算法,所谓控制器在每一列加电、在每一行读取,这里的“加电”是怎么做的,而“读取”究竟又是什么一个操作?读取会对电路产生影响吗?再仔细考虑之前“搞懂”了的为什么会出现一整列都激发的情况,似乎也只是一种“比喻”层面上的搞懂了。

由于自己没有电子电路方面的知识,于是就胡乱查了一些资料,终于才大致搞明白了。在 digital 世界的零和一分别对应 analog 世界的低电压和高电压,并且中间有一个缓冲区域的“未定义”状态,这个似乎是在大学计算机基础之类的课上了解过,不过到底实际中使用多少 V 的阈值来区分零和一却是不知道,似乎不同的芯片家族各有各的标准和约定,这个阈值也会决定其他一些关于 digital read/write 的细节不同。其实我现在还不太能搞清楚各种常用的板子和他们的异同,总之由于 Arduino 的文档比较好找,就参考了一下。一个针脚如果设置成 digital 读的状态,那么相当于在针脚那里接了一个 100 兆欧姆的电阻,所以读取操作基本不会对原本电路产生什么影响,读取就是通过测量通过该巨大电阻的微弱电流来实现。而写状态的针脚则处在低阻抗状态,会对电路产生直接影响,写入 1 会导致该处处于高电压状态,并输出电流;写入 0 会导致该处处于接地状态,并能吸收电流。当然输出还是吸收的电流的大小范围是有限制的,如果你直接将输出针脚接地并写入 1,那么该针脚有可能会直接烧坏。到这里听起来都很合理,只是有一点奇怪的地方:我们之前碰到的问题是按键的一个针脚被意外接地了。但是如果是这样的话,在矩阵轮询的时候对该列写入 1 时,碰到的问题应该是控制器烧坏了而不是触发整个一列。总之非常疑惑,之后又乱七八糟搜索了一通,似乎渐渐地把一些线索拼凑起来。简而言之就是矩阵轮询其实是写入 0 并读取低电压。

比如定制键盘社区里最流行的 firmware QMK里的矩阵轮询代码可以在quantum/matrix.c里找到,也就是martix_scan()函数,由于 QMK 支持一些不同的硬件,所以代码做了一些封装,但是整体还是比较清楚的。可以看到 QMK 支持两种不同的轮询:写入列读取行、写入行读取列。我觉得实际中可能没有什么差别,只是二极管焊的方向位置要变。根据代码里的DIODE_DIRECTIONCOL2ROW的判断,以及电路图中电流流向的判断,我们这里的接法其实是要用后者——注意这和之前的说法里行列是相反的,而这个反转正是由于读写低电压的机制造成的。下面是把一些不太相关的代码去掉之后的大致代码结构。

  1. uint8_tmatrix_scan(void){
  2. boolchanged=false;
  3. #if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
  4. // Set row, read cols
  5. for(uint8_tcurrent_row=0;current_row<MATRIX_ROWS;current_row++){
  6. changed|=read_cols_on_row(raw_matrix,current_row);
  7. }
  8. #endif
  9. // ...
  10. }
  11. staticboolread_cols_on_row(matrix_row_tcurrent_matrix[],uint8_tcurrent_row){
  12. // ...
  13. // Select row and wait for row selecton to stabilize
  14. select_row(current_row);
  15. matrix_io_delay();
  16. // For each col...
  17. for(uint8_tcol_index=0;col_index<MATRIX_COLS;col_index++){
  18. // Select the col pin to read (active low)
  19. uint8_tpin_state=readPin(col_pins[col_index]);
  20. // ...
  21. }
  22. // Unselect row
  23. unselect_row(current_row);
  24. // ...
  25. }
  26. staticvoidselect_row(uint8_trow){
  27. setPinOutput(row_pins[row]);
  28. writePinLow(row_pins[row]);
  29. }
  30. staticvoidunselect_row(uint8_trow){setPinInputHigh(row_pins[row]);}

可以看到matrix_scan在一个循环里依次对每一行调用read_cols_on_row函数,而后者做的事情是先调用select_row(),也就是把该行说对应的针脚设置为输出状态,并写入 0 (低电压);然后在循环检查每一列,读取其针脚输入;循环结束以后再调用unselect_row()对该行的输出针脚写入 1 (高电压)。这里的代码没有显示的是所有针脚以开始是被初始化为高电压状态的。

最后还需要简单解释的就是上拉电阻这个东西。前面提到 digital 输入的针脚是使用一个超大电阻然后测量微弱电流的方式来测量输入,当该输入针脚没有接入一个(从电压源到地连通的)电路的时候——比如键轴没有按下的时候——输入针脚会检测到环境噪音,得到一个随机输入值,更糟糕的是这个值有可能会变来变去的。一个解决方法就是使用上拉电阻,简单来说就是把一个电压源接上一个电阻连到输入针脚上。如下图所示的col0这个输入针脚,当k00k10都断开的时候,就是处于和电路未连通状态,此时由于上拉电阻的存在,有一个持续的微弱电流流入,导致它的(默认)值为 1 (高电压)。然后对比col1这个输入针脚,按键k11是按下连接状态,所以row1col1现在连通起来。之前提到输出针脚默认是处于(写入)高电压状态,但是由于二极管的存在,这个电压并不会导致大量电流涌入col1将其烧坏,而是让它得以继续保持默认值 1 (高电压)。现在假设我们要检查第 1 列的按键的状态,于是我们在row1处写入 0,于是现在这里处于低电势,上拉电阻那里的电压源会导致电流通过二极管,流入输出针脚row 1,这将导致输入针脚col1处处于低电势状态,从而读取值会从默认的 1 变为 0。如下图:

所以真正的矩阵轮询的工作方式是:在每一行写入低电压,然后再在每一列读取低电压。这里有点绕弯弯地晕,特别是输出针脚有电流流进去,而输入针脚反而有电流流出来。为什么要把所有东西都反过来而不是按照符合我们直观的去直接写入和读取高电压呢?这个我就暂时搞不清楚了,不过我猜为了使用上拉电阻这样的机制,就不得不把所有东西“反”过来,并且这种方式应该比较容易防止因为不小心短路而烧坏针脚。事实上,在现在这样的配置下在来看我们碰到的短路问题就很容易搞清楚到底发生了什么,没有导致针脚烧坏,而是触发一整列的按键了。

如下图所示,现在假设k01的左边针脚由于什么原因接地了(在二极管之前或之后接地似乎都差不多),现在如果我们在轮询中要检查k11的状态,于是我们按照之前描述的算法在row1写入低电压,并在col1处读取,如果k11是按下的状态,那么电流会导致col1处于低电势从而读取到 0。但是现在k11虽然没有按下,col1仍然读到了 0,这是因为k01是按下状态,导致电流通过那里直接流向了接地端,于是col1处意外地处于低电势状态。

不难想象如果我们把矩阵从两列扩充到多列,情况还是一样的:短路的那个按键按下的时候会让控制器误以为那一列所有的其它按键都是按下状态,从而触发一整列的键。这样一来,就终于一切真相大白啦!😋

Split Keypoard and OLED Customization

$
0
0

九月十月似乎莫名变得很忙,十月份的 Inktober 就别说参加了,基本上是连看网上别人的作品都没太顾得上,感觉我入职以来还从来没有这么忙过,感觉居家令对我生活影响最大的似乎还是 work life balance 的改变,当然所有的事情也都纠缠在一起,也有可能是我现在参与的项目更多或者更麻烦的缘故,但那也难保和居家令没有关系,也许许多人宅家都会去做更多的事情,所以合作的项目才变多的呢?总之就是很忙,不过再忙也还是抽空组装了两个新键盘 XD,这里分享一下过程和经验。

这次的两个键盘都是日本人设计的,一个是 split 的Corne,另一个是伪 split 的Reviung41。Corne 可以安装 OLED 屏幕显示一些好玩的东西,我也会分享一下定制 OLED 显示的方法。

Corne Cherry Build Log

Corne是一个 ID 叫 foostan 的日本人设计的一个分离式键盘,最初的灵感来源似乎是一个叫做Helix的分离式键盘,也是有日本人设计,结构很简单,两个方形正交键盘,基本上拼起来就是一个 5x12 的Preonic再多了中间几个键,最开始发布出来的时候似乎在日本非常火爆。Corne 做的改变主要有以下几点:

从正交布局变成了按列错开的布局。标准键盘的布局是按行错开,似乎没有什么特别的道理,正交布局感觉更美观也更简便,但是也很难讲就一定比按行错开更优,但是按列错开的布局则一般认为是在人体工程学的行列,因为如果你把手指正常弯曲放在桌平面上,基本上构成的弧线就是和这里的布局是一致的。所以从也许是分离式键盘的鼻祖的ErgoDox的众多分离式键盘都采用这样的按列错开的设计。Corne 这样的列错开的距离其实是挺小的,基本和玩完对齐的正交其实没有太大的区别,也有诸如Kyria之类的比较 aggressive 的设计,特别是在小拇指那边下降距离非常多的设计(它还提供了可打印的图纸让你和自己的手形做对比)。在这个网站可以查看和比较各种常见的分离式键盘的形状和布局。

底排功能键简化。我在用自己的 4x12 Planck 键盘的时候发现最下面一行的功能键除了距离中间的空格键最近的一两个键之外,其他的按起来都非常别扭,需要让手完全离开原来的位置,所以我几乎也从来不会去按那几个键。经过一段时间之后总结出来我下面主要需要空格键、两个 Layer 切换键 Raise 和 Lower,以及在 Mac 下各种快捷键需要的 Cmd 键就够了,所以像 Corne 这样的精简布局刚好够用,由于对称关系多出一个键可以设置成 Alt 键,分离式键盘有两个空格,如果需要的话可以把另一个设置为回车或者退格之类的。我后面会再讲一讲我现在用的键盘按键配置。

去掉了最上面的数字行。我相比 5x12 更喜欢 4x12 的布局,所以也更喜欢这样更精简的设计。

其实 Corne 包含了一系列键盘,布局都是一样的,主要是支持的键轴不太一样,有直接焊接的版本,有可以使用热拔插 socket 的版本,还有使用 Kailh 的巧克力键轴的版本,可以做出非常矮的键盘。所有PCB文件都是开源的,并且组织的很好,是非常不错的学习材料。

我是直接在BoardSource买的 kit,之所以对这个 kit 感兴趣,当然一方面是觉得好玩,同时也是想在自己设计 PCB 之前积累更多经验。在上一篇博客中介绍过的自己组装的 5x12 的键盘有一点让我比较在意的是微控制器是隐藏在按键下方,放在 PCB 的背面的,这样从外观上来说更加美观简洁,但是这同时增加了键盘的整体高度。所以看到像 Corne 这样的把微控制器放在 PCB 正面的设计就不禁很好奇这样可以让键盘的整体高度降低多少。

当然降低高度的方法还有一个就是不使用Elite-C之类的,而直接把微处理器和需要的电阻电容之类的元件焊到板子上,像 Planck 的 PCB 那样,占用的空间就很小,因为 Elite-C 其实自己本身就是一个小 PCB,预先焊好了 USB 接口和 MCU 需要的一些电子元件,只暴露出 IO 针脚来,这样做键盘之类的应用会容易不少,而且最主要的好处是非常方便人工焊接到键盘 PCB 上,反过来如果是采用单独的 MCU 的话,就需要做难度很高的芯片焊接,甚至有些芯片被设计来就是无法人工焊接的;如果不进行人工焊接,就需要在打印 PCB 的时候使用额外的自动焊 SMD 元件的服务,我也没有了解过,不知道是不是费用或者时间上会增加许多。

对分离式键盘感兴趣的另一个原因就是分离式键盘除了按列错开之外,两手的键盘可以分别有一个角度,是更符合我们手腕自然放松时的姿势的,并且分离式键盘可以让你家的猫坐在中间最重要的位置也不会影响键盘使用,总之在人体工程学方面有一些可以说的地方,具体到底有多大区别,这也是我想尝试的点。

有过上次的组装经验之后,这次对整个过程已经清楚很多了,拆开 kit 就发现 BoardSource 给我漏记了一些小零件,联系他们补寄的时候顺便也发现他们的库存的 Corne PCB 混杂了 V2 和 V3,于是让他们给我换了 V3 的 PCB。Corne 的 PCB 原本是一个很机智的设计:就是左边和右边使用的是同一块 PCB——打印两份,翻一面就可以用作另一边,这对于自己去找厂商小批量打印 PCB 尤其友好,因为通常都有至少 5 份之类的规定,翻面可用的话,就不会多出太多用不到的 PCB 了。当然要做这样的设计也有需要取舍的地方,因为键轴、微控制器等各种其他组件都不是左右对称的,所以 PCB 里的电路其实是要同时支持正面和反面,这不仅让内部电路布局非常复杂,而且有许多焊接点被排的非常近,大大增加了焊接难度,同时为了让正面和反面的微控制器的针脚错开,左右手最终微控制器的位置其实并不是完全对称的。所以在 Corne 最近的版本(包括 Corne Cherry V3、Corne Light 等)中都放弃了这个设计,而直接给出左右两边对称但不同的电路布局。

Corne kit:基板、定位板、底板;Elite-C、二极管、音频线等。

有一个小问题是 Corne 的官方组装指南是日文版的,虽然网上有一些第三方不是特别详细的组织指南,但是 V3 由于比较新,还是得看官方指南。想不到我学的日文终于能在动漫之外的其他地方用到了。不过其实如果有一些组装键盘的经验的话,只看配图也基本上能明白一个大概,因为用的基本元件也都差不多。最大的一个区别在于这次的二极管不是 through hole 的,而是SMD元件,非常小,也没有针脚固定(见下图),所以主要是 N 的焊接难度增加了。焊接技巧是要先涂点 flux(助溶剂),在一个 pad 上先加一点焊锡,然后用镊子夹着二极管顶着已经有的焊锡,把它融掉,同时迅速摆好位置。总之一只手拿焊枪一只手拿焊锡还有一只手拿镊子,感觉如果只有一个人的话是相当困难的操作。另外助溶剂如果涂多了板子上会有点黏黏的,可以用酒精擦拭清洗。

细小的柱状 SMD 二极管,没有针脚滚来滚去,比较难焊。

一如既往组装完成之后是有一些问题的,虽然这次我们已经有相当多的经验和知识,但是碰到的是新的问题:有几个键没有反应。由于每一行和每一列都至少有一个键是正常工作的,说明整体电路没有诸如短路之类的大问题。我们做了一些基本检测,比如人工短路按键两端测试没有反应可以基本排除是键轴的问题,用万用表测试二极管保证二极管不是坏的。剩下就得从电路入手了,键盘的基本矩阵电路布局上次已经介绍过了,如下图所示,如果按键 SW3 没有反应,那么说明从 A 到 D 的通路哪里有断掉了,我们短路了 AB 没有反应,CD 之间的通路也测出来没有问题,那么问题出在 BC 之间?在 N 的建议下直接短路了 BD,然后按下按键发现有反应,那么就确定了问题出在 BC 之间,但是麻烦的是 BC 之间的通路是在 PCB 板里的电路定义的,难道是 PCB 坏了?

如果真是那样还真有些头疼,不过幸运的是还有其他一些可能,比如电路从元件到 PCB 内部电路之间的焊锡连接如果不通的话也会有同样的症状。幸运的是事实却是如此,在 Kailh hotswap socket 和二极管的针脚处都增加焊锡加固之后,问题就解决了。虽然最后并没有完全确定问题是在二者中的哪一个那里,也许是焊新的二极管不太习惯导致的一点失误吧。

完成之后就可以写入固件开始使用了,Corne 两边都各有一个微控制器,我的理解是按键解释是在主控制器(左边)完成的,所以如果一开始两边都写入了一个默认的 Corne 固件能保证通讯顺畅的话,之后如果只是修改 keymap 可以只更新主控制器的固件。但是如果有修改 OLED 显示代码的话,则需要在两边都分别写入,虽然使用的是同一个固件,但在运行时会互相协商判断谁是主谁是次,保险起见我在写入固件的时候并没有把两边连接起来。还有这个音频连接似乎并不是可以热拔插的,有可能会烧坏电路,所以需要把 USB 连线断开之后再拔插音频连线。

kit 自带的音频线很长,于是我自己买了一根很短的拐角头线,这样让我可以把左右靠得很近,不过似乎也是习惯问题,一两天以后我就比较习惯两手完全分开的状态了。不过分得太开也不太好,那样鼠标就又没有地方放了(还记得最初开始用小键盘的理由是为了给鼠标腾出更多的空间吗?),当然也是可以考虑把一个苹果的 Magic Trackpad 放在中间使用的。至于两手分开以及有角度之后是否使用起来对手腕负担更小更舒服呢?我也说不准,至少(在一两天的磨合期之后)没有更不舒服,具体效果如何可能需要大规模对比实验和医学上的观察才能真正确定下来。

另一个 Corne 的好玩的地方在于两边各提供了一个 OLED 屏幕,现实什么内容是完全可以定制的,默认一边显示一个 logo,另一边显示你最近输入的按键(输入密码的噩梦),我把它们改成了显示 Shift 之类的修饰键的状态和当前的 Layer 状态,在文末在介绍如何定制,这里只放一个小动画显示符号、数字和 navigation layer 的状态切换。

Reviung41 and Keyboard Mounting Styles

Reviung是一个 id 叫 gtips 的日本人设计的一系列键盘,其中可能最有名的是 Reviung39(定制键盘中末尾的数字经常用来指按键的数量),底部只有三个按钮,有点不够用,于是后来又推出了 Reviung41,增加了两个键,现在底部变成了五个键,基本上就完全和 Corne 的布局一样了(后者左右各有一个空格键)。和 Corne 相比坏处是不是分离式的,所以两边的距离和角度都是不可调节的,不过我觉得这个基本上不是问题,除非你是会把分离式键盘放得非常开,到中间可以放一只猫一个触控板的程度,否则 Reviung41 默认的角度和距离其实是挺舒服的。和 Corne 相比好处也是一样的——不是分离式:这在需要经常移动的时候尤其明显,分离式键盘基本上无法单手拿起来,所以如果经常要移动笔记本和键盘的话,就有点略不方便。

当然整体来说我觉得 Corne 和 Reviung41 还是相似大于区别的,我几乎是在下单了 Corne 之后立刻又下单了 Reviung41 是因为后者在开源的仓库里提供了非常丰富的中间板的源文件。在讲对中间板感兴趣的原因之前需要先解释一下键盘的基本构造。网上有一篇文章介绍得比较详细,我这里也不多说了,一般来讲键盘的基本骨架由定位板(top plate)、基板(或电路板、PCB)、和外壳组成。怎样把这些部分组装在一起就是设计上的细节了,不同的组装方式可能对手感、声音之类的会有影响,网上有一张图解释了几种常见的组装结构:

当然这些主要都是比较高端的定制键盘的组装结构,因为外壳是一个三维的结构,用金属之类的原料做出来是一个相对比较复杂的工艺,即使通过 Group Buy 累积大量订单的情况下通常也至少要一两百的价格,由于模具准备之类的工作,通常如果你只想做少数几个的话,可能成本会高出天际或者厂家直接不愿意做。所以如果错过 Group Buy 的话就比较难搞到手,自己即使有三维设计的本领,想要把设计变成现实通常也必须通过 Group Buy 的方式来实现,总之是一项非常繁重的工作。

相比起来,如果只是在一块板子上做切割做出特定的形状,就是容易得多的事情,网上有很多服务(我听得比较多的有ponokolaserboost)可以提供各种金属、塑料、木板之类的激光切割,也都接受数量很小的订单。到这里我终于意识到为什么前些年 3D 打印开始普及是一件大事了,这对于各种想要设计和实现各种原型磨具的爱好者来说简直就是升维福音。不过似乎现在 3D 打印出来的东西都还比较粗糙(至少我在网上看到大家展示的自己打印的一些东西大都是这样),暂时没有让我特别感兴趣。

总而言之由于三维外壳制造困难,定制键盘社区里许多对高端键盘不是那么执着(或者厌倦了 Group Buy 的漫长时间线)许多人就之间采用所谓“三明治组装”的方式来做定制键盘,也称作 EOTW (Easy on the Wallet) 组装方式。具体来说有点像上图中的第一个 Tray mount,不过底部的外壳有一个平面底板代替。由于所有的结构都是可以可以通过平板切割的方式构造出来的,所以相对比较容易自己收集部件,除了可以切割金属或者塑料之外,甚至还可以直接通过打印 PCB 的方式来做定位板和底板,因为 PCB 板制造过程也支持各种切割,并且它的用料复合玻璃纤维FR-4其实是比 Acrylic 塑料更结实的,所有只要打印一个没有内嵌任何电路的电路板就可以当底板或者定位板使用。事实上不少第三方不需要通过 Group Buy 就直接可以购买的键盘 DIY kit 都是 FR-4 的三块板的 EOTW 组装方式,包括我之前组装的 5x12 和这次的 Corne 和 Reviung41。

当然这里还可以更简化,比如其实定位板并不一定是必须的(见上图的 Plateless mount),但是定位板能够给键轴体提供更多的固定作用,有说法是不同定位板的材质由于弹性不同会给按键手感带来很大的区别,不过我并没有特别研究过这个,总之大部分情况下定位板还是有的。至于底板,由于 PCB 地步通常有不少电子元件,或者至少有键轴的针脚之类的,一般加一个底板会比较好,当然如果不需要把键盘放在腿上用不用担心扎到自己的话,应该直接在 PCB 版底部合适的地方贴上几个 rubber feet 支撑一下也能正常当桌面键盘使用了。比如keyseebee键盘(如其名 KeyCB)就同时省略了定位板和底板。相比起来Corne Light V2省略硬质底板,而用一片软的切割过的 form 材料直接贴到 PCB 底部的做法更让我感兴趣,省略了 spacer、螺丝,降低了键盘高度,还自带一个软的底部,也不需要贴 rubber feet 了,不知道是不是在声音上也会自动有所改善。当然感觉 form 的话自己切割不知道会不会搞得比较不规则,而且当做最外层不知道会不会比较容易沾灰尘之类的。

左:Reviung41 加 Acrylic 半透明中间层;右:Corne Cherry EOTW 中空组装。

总之回到 EOTW 组装方案上,从之前的示意图可以看到主要的组装点是用螺丝把底板和基板固定在一起,也有反过来在 PCB 板上打比较大的空,让螺丝(spacer)穿过 PCB 板和定位板固定的方案。但两者有一个共同点就是都把基板和定位板当做一个整体来对待。这在非热拔插键轴的情况下是很合理的,因为键轴针脚上的焊锡会把两块板子固定在一起。但是这几年热拔插的键轴组装方式越来越流行,这种处理方式就不是很理想了,因为键轴把出来的话,两块板子就分开了,会导致其中一块板子没有固定。即使对于不是特别经常要换键轴的玩家,也会有一些小问题,比如如果在移动的过程中比较用力地捏了其中一边,或者平时按键就是比较大力的那种,有可能会让两个板不再平行,除了不太美观之外,极端情况下可能会导致另一端翘起来键轴脱落之类的。

最简单的解决方案是在底板和基板、基板和定位板之间都加合适的孔各自用 spacer 分别固定,这个在基板上需要钻的孔的数量会加倍,而且原来底板和定位板之间用一个 7~8 毫米的 spacer 就可以了,现在需要分别用两个 3 毫米左右的 spacer,在尝试自己采购零件之后发现像螺丝和 spacer 之类的零件原来并不如想象的那么容易搞到,特别是对于 3 毫米之类的很短的 spacer 来说。总之现在很多 kit 都没有尝试解决这个问题,不知道是历史原因设计没有及时修改还是各种解决方案都没有特别理想。不过 Reviung41 在日本销售的 kit 里提供了 5 块板子,多余的两块板子分别是 3mm 的 Acrylic 塑料板,分别放在底板和基板以及基板和定位板中间,各自都有合适的 cutout 给每一层的元件留出空间,同时又起到支撑的作用。类似的多层 Acrylic 叠加的办法在其他一些 kit 里有时候也会见到(例如Discipline),甚至还可以叠加的方式做出带斜面的底板。在 BoardSource 上买到的 kit 虽然只有普通 EOTW 的三块板,但是开源仓库里可以下载到所有板子的设计文件,于是我自己把文件发到 Ponoko 去做了切割,一方面也是熟悉一下各种工艺的流程之类的,万一我之后自己想搞一些玩意也可以有一点概念。效果整体来说还是不错的,见上图加了额外中间板的 Reviung41 和 Corne 的对比。其实我还切割了一个 1.5mm 的底板,但是 1.5mm 对于 Acrylic 来说似乎有点太薄了,而且那个源文件里还有比较大面积的 engraving,最后得到的板子甚至有点弯曲,于是我就还是用 FR-4 的底板,也算是一个经验教训。

上图左边是用 Ponoko 的激光切割的 3mm Acrylic 板,从下单到收到大概是十天左右,Ponoko 似乎就是在湾区,所以快递上应该没有花太久的时间。收到的时候两边还贴着保护膜,看着有点像木板,撕掉保护膜挖出多余的料简单清洗之后如右图。

更新:解决基板和定位板的支撑问题还有另一个不需要改变已有的设计的办法就是使用大的短的 spacer 套小的长的 spacer,不过这个办法有可能会碰到 clearance 的问题,因为基板底部有 Kailh hotswap socket,而顶部则有键轴轴体,原来钻孔的地方不一定能够有足够的空间来放直径更大的 spacer。不过最近在网上看到有人做了类似的尝试,于是我也决定在 Corne 上试一下。于是我买了一些包含不同尺寸的Nylon Flat Washer,小尺寸基本上都是 1mm 厚,试了以后发现 corne 板子上的 M2 spacer 的外径需要用 M4 内径的 washer 才能 fit。然后我把三个 washer 叠起来基本上刚好够支撑的高度。如下图所示,取决于键盘的设计,有些地方(青色箭头)直接放上 washer 就可以,但是红色箭头处由于 hotswap socket 挡着,就很难 fit,不过好处是 Nylon 的 flat washer 比较容易修剪,用剪刀就可以剪,不过如果有右边那种剪电线的钳子会更容易操作(碎片飞溅最好戴个眼镜保护)。如右图所示,基板的正面(也就是定位板的背面)是更难 fit 的,因为方块挖空的地方都是给键轴轴体留的空间,不能堵住,所以要把垫片剪得非常小,虽然麻烦了一点,不过最后也都成功 fit 了,增加支撑之后三块板都更稳定了,而且这个办法比制作专门的 Acrylic 中间层要实惠很多倍了。

Reviung41 Build Log

Reviung41 的组装指南也是日文的,不过确实是超级详细,中间 LED 灯的部分花了大量篇幅来讲解。我本来是对键盘花哨的 RGB 光特别不感冒的,不过 Reviung41 没有 OLED 屏幕,所以我想如果有 LED 灯的话是不是可以用 LED 的颜色来指示一下 layer 之类的,所以也买了 LED 灯。事实证明这是这次组装的新挑战。下图是 LED 灯与硬币的对比,不仅很小,而且有四个针脚需要对齐焊接,也没有明显凸出来的针脚。而且这个是 WS2812B 似乎是比较容易焊接的了,据组装指南上说 Reviung39 用的是 SK6812MINI 更难焊。

其实仅仅从大小来说至少不比 SMD 的二极管小,但是 LED 灯的难点在于它不怎么耐热,需要迅速焊接好,否则很容易烧坏,并且还需要使用 270℃左右的温度,比平时焊接要低很多。不知道是我们的焊枪温度指示不是特别准还是确实就是这样,在这个温度下几乎是勉强能融化焊锡,非常难以操作。在做过许多次失败的尝试之后我们直接放弃了,开到了正常的温度,之后由于有之前焊 SMD 二极管的经验,就容易操作多了,不过有没有因为温度太高而烧坏 LED 就没有谱了,反正 LED 对我们来说不是必须的。剩余的步骤就和 Corne 也差不太多,由于只有一个 Elite-C 也不需要两边连接,所以其实更简单,最后买到的 kit 在安装 Elite-C 的保护罩的时候似乎缺少合适的 spacer,还好我在这阵子已经开始自己在网上购买一些不同类型的 M2 spacer 了,找到了合适的安装上。

这次组装……当然也一如既往地没有一帆风顺。主要有如下问题:我自己打印的 Acrylic 板的 cut 似乎在空格键的 stablizer 那里不够宽,合不上。仔细看了一下原来板是根据 Cherry 的 Clip in 的 stablizer 来做的,而我用的 Durock screw in 的 stablizer 在螺丝那里要宽一些。还好我刚好有多余的 2U cherry stablizer,换上就好了。另一个问题是有两个按键没有反应,用万用表调试了一下发现有一个二极管似乎是坏的,把它取下来(SMD 元件 desolder 似乎使用 Silder Wick 会比较容易)换一个新的就好了;另一个键是发现它的二极管有一头忘了焊了😂,焊上就好了。最严重的问题还是 LED,除了一号和二号,其他的都不亮,顿时特别受打击,难道是剩下的九个全烧坏了?想有没有什么办法测量 LED 是不是坏掉的,似乎也不是那么简单,因为这个 RGB LED 并不是通电就亮的那种,而是有 data 输入可以控制 RGB 值的。紧张了一阵之后 N 表示这个问题出得太蹊跷了,而且组装指南上明确地写明先焊第一个,测试亮之后再焊第二个,按这样的顺序取焊,一定有什么深意,莫非 LED 的连接方式是其中有一个坏掉的话剩下的就都不亮?于是我去网上查了一下 RGB LED 灯的连接方式,果真如此!于是一个简单的调试方式就是用连线直接跳过某些段的线路,结果我们把 LED2 的输出直接接到 LED3 的输入的时候所有的灯都亮起来了。

最激动人心的莫过于是看到 LED 灯一个都没有坏,可见正常温度焊也没有那么容易坏,只要操作够迅速。目前的情况应该是 LED2 的输出针脚或者 LED3 的输入针脚中的一个跟 PCB 接触不太好,补了一些焊锡重新焊过之后就一切正常了。要使用 RGB LED 来指示修饰键和 Layer 的状态可以参见 QMK 的 RGB Lighting 一节的文档,只要打开一个编译开关即可。

Colemak DHm

细心的小朋友可能已经注意到本文一开始的照片里的键盘已经不是 QWER 的排布了,那是因为我终于没忍住开始尝试 Colemak 键盘布局了,确切地讲,是Colemak-DHm,由于我在那一套键帽里只有 F 和 J 有凸起,所以处于寻找键位方便仍然放在原来的位置,不过按键是已经完全按 Colemak-DHm 定义过了。

Colemak 是一个针对英文优化过的键盘布局,我想可能我们也可以做自己的优化,比如先定义好各个按键容易按的程度,然后通过优化和搜索,判断怎样的布局让你“更容易”打出给定的文本数据集,这里“更容易”可以是每个按键的容易程度,但是体验了一把“重新学习打字”的过程之后我发现其实我们打字很少是一个字母一个字母的按的,就像弹钢琴我们会看到音阶、分解和弦之类的构成一样,打字也会有很多诸如 ion、ear、bility、之类的 n-gram 是比较高频出现的,在打字熟练的过程中大脑会开始以这些 n-gram 为单元进行优化和调度,提前计划好手指的移动和转移路径。所以键盘布局应该至少也要把常见的 2-gram、3-gram 之类的考虑进去,有时候两个按键各自都是比较好按的,但是放在一起就有点别扭了(比如使用同一个手指,但是是在相反的方向上)。总之定义一个键盘布局还是有挺多东西要考虑的,不过最大的问题还是键盘帽的问题。像 Colemak 这几种常见的非标准布局已经相对比较普及了,所以还是能找到一些键帽套装支持他们,但是如果是自己搞的布局的话,可能就只能用统一形状的键帽或者甚至是空白键帽了。下图是用kle-render渲染出来的 Colemak-DHm 布局的字母排布,图中带颜色背景的键是我认为我(在几乎完全不需要动手腕的情况下)最容易按到的键,我在定义数字、符号等 Layer 的时候也会参考这个偏好。可以看到比较常用的字母(包括所有元音字母)都放在了比较好按的位置。

从 QWER 切换到 Colemak 比从标准键盘切换到正交键盘还是要更费力一些的,不过也没有到难以企及的地步,而且观察自己重新学习打字的过程也挺好玩,还能帮忙纠正一些不好的习惯。每天练习一点时间,大概三天就能到达 30 英文单词每分的速度,N 基本上每天只练习 10 分钟也在一周左右达到了 30 WPM。我是在 10 天之内达到了 50 WPM 的速度,再到后面上升速度就慢很多了,我现在差不多是切换过来 40 天左右,大概是 60+ WPM 的样子,但是其实平时工作和写代码已经基本没有问题了,应该再过一段时间就能完全习惯。

切换 Colemak 除了键帽比较难找之外,还需要适应的几个小问题是大都跟肌肉记忆有关。一个是常用的快捷键,比如 V 的位置变了,所以 Cmd+V 自然也需要按不同的键,这个对我来说是很快就适应了。比较费时的是中文输入,因为我用的是双拼输入,原本就是一个字母到不同韵母之间的映射,之前打习惯了之后其实记住的是每个韵母在键盘上的位置,而不是对应到哪个字母,所以其实这里是需要重新记忆一下的,不过整体也不是大问题(本文就是用双拼加 Colemak 打的)。再就是和 VIM 的兼容性的问题,VIM 最标志性的按键应该就是 HJKL 来移动方向了,换成 Colemak 之后这几个键的位置就不一样了,网上有一些解决方案是直接在 VIM 里把方向重新映射为 Colemak 改过之后对应的这四个键,但是这样无疑会引入新的问题,因为这几个键在 VIM 里可能原本也有其他的用途。而且我觉得自己现在大部分时候其实并不是在用 VIM,而是用一些其他有 VIM 快捷键的编辑器或者系统,有时不一定能定制。于是网上另一些人干脆就继续用 HJKL,只是按起来没有原来方便了,不过对于 Colemak-DHm 来说这几个键其实都还在右手食指的管辖范围内,所以不是特别糟糕。后来我干脆给自己的键盘布局增加了一个单独的“导航”层,把原来 HJKL 键的位置也就是现在的 MNEI 键直接映射成了方向键。

刚刚组装完键盘的凌乱的桌面旁边的 Colemak 布局打字测试大比拼。

最后一个问题也是牵涉到兼容性的:是否要直接放弃 QWER 布局?似乎没有这个必要,在许多地方(比如自己的笔记本上,或者手机上之类的)都会碰到 QWER 布局,如果能同时保持这两种布局的熟练程度的话就可以无缝切换了。网上确实有不少人是这么做的,通常加一点易于区分的 hint 会让切换更容易,比如在打 Colemak 的时候使用正交键盘,而 QWER 的时候使用按行错开的标准键盘;或者两种布局分别用左右手的拇指来按空格。我目前的情况是手机上的 QWER 键盘基本没有受到影响,但是实体的 QWER 键盘基本处于不可用的状态。我是打算等 Colemak 熟练到完全不会打错之后再把 QWER 捡起来。N 的情况完全不一样,她才刚开始用 Colemak 一周多,Colemak 到 30~40 WPM,但同时对 QWER 布局的输入完全没有任何影响,而且我注意到她好像不自觉地就在两种布局时用不同的拇指来按空格键了,真是很神奇。

Planck Layout

在这里介绍一下我(略微更新过的)键盘布局。现在我有好几个不同形状的键盘了,但是其实他们之间的区别并没有特别大,差不多都是 3x12 的正交矩阵排布,再加上最下面一行的空格、层切换和修饰键。有的键盘可能会多几个按键,但是我基本上可以统一使用同一个布局。

其实定制键盘的一大好处就是按键是完全可以定制的,最常用的定制键盘固件 QMK 采样一种比较粗暴的代码组织方式:把所有支持的键盘的代码都放在自己的主仓库中,所以在QMK 代码的 keyboards 目录下可以找到非常多不同的键盘,其中许多键盘的形状和布局都可以在QMK Configurator 的 web 界面浏览到。还有更多用户定制的布局,例如keyboards/planck/keymaps下面就有几十个不同的用户自己的布局。还有一个最近很流行的叫miryoku的布局,支持各种正交和分离式键盘。总之如果要定制自己的布局的话,可供参考的资源还是很多的。

下面介绍一下我自己的布局,也仅供参考。我的布局定义有几个参考原则:

  1. 减少手腕移动:参考我在上面给出的正交键盘(去掉大拇指一排)的按键里最容易按到的键,我会尽量把按键映射到这些键里。比如我把数字键映射到了中间排,而不是网上比较常见的最上排。
  2. 宁缺毋滥:我的目的并不是要把完整键盘上的所有键都映射出来,比如 F1、F2、Scroll Lock 之类的我就直接略过不管了。此外基于第一条原则,我也不会把 Layer 里所有的键都排满。
  3. 尽量不乱动字母键:网上有许多布局(例如刚才提到的 miryoku)的思路跟这个完全相反,他们的理由是既然 home row 的键那么好按,那么就应该更多加利用,从而减轻小指和拇指的负担,于是通过 tap-hold 的方式把许多字母键变成修饰键或者层切换键。比如我让 s 键在 tap 的时候是字母键,但是在按住不放的时候就是 Cmd 键。这看起来很方便,但是实际使用起来可能需要经过许多参数微调(比如 tap 和 hold 的时间判别阈值和其他一些特殊规则),比如如果你打字很快,在输入 ask 之类的词的时候,可能你 s 键还没放开的时候 k 已经按下了,结果有可能会得到 Cmd+k 而不是 sk。

基本层就是 Colemak 的正常字母布局,左边三个键分别是 Tab、ESC 和 Shift,右边三个则是退格、引号和回车。红色的键表示有 Tap-Hold 功能,左下角表示 Hold 时的键,例如 Esc 键 Hold 住是切换到第三层,这是我的 Navigation 层,之前原本是 Hold 住是 Ctrl 功能,但是后来这个位置留给了更重要的 Navi 层切换,于是把 Ctrl 的 Hold 放到了右边引号处。回车 Hold 时有 Shift 功能,因为我不太用 Caps Lock 键,所以需要两边都有 Shift。底部五个键分别是 Cmd、向下(切换到 Layer 1)、空格、向上(切换到 Layer 2)和 Alt。Cmd 是在 Mac 下最常用的修饰键,其实和 Cmd 搭配的大部分字母(诸如 ZXCVTPWQ 等等)都在左边,所以把 Cmd 放在右边让两手分工更合适一些,但是我发现按 Cmd 相关的许多快捷键(例如复制粘贴)经常是右手在操控鼠标之类的的时候,所以把 Cmd 放在左边可以单手完成按键似乎更合适。

向下(第一层)主要是数字,我把数字放在第二行方便输入,同时把 Base 层的一下键如小数点、逗号、x 键之类的也放在这里,有时候我要输入数值 0x123.56 之类的可以一直按着向下键,更方便一些。另外在第一层的时候右下的层切换按钮会变成第四层,类似地在第二层我会把左下的层切换定义为到第四层,这样我在同时按下向下和向上的层切换按钮的时候就可以切换到第四层。第四层主要放一些不太常用的功能,例如键盘 reset、RGB 背光调整,或者一些复杂的快捷键宏(例如 Mac 下的截屏)。在左右手三、四指上方各放了一个键用来输入括号和加减号,具体摆法和上一次介绍的稍微有所调整。

和向下层对称的是向上层,基本上是向下层的 Shift 版,如下图各个键的右上角标识所示,虽然都可以用向下层加 Shift 的方式按出来,但是那样按起来太费力了,所以按照惯例有单独的一层。另外在这一层我还多修改了两个键:左边的 Shift 变成 Caps Lock,退格变成(向后)删除键。

Navigation 层主要就是原来 VIM 的 HJKL 四个键变成了方向键,不过好处是现在不止在 VIM,而是在任何地方都能使用它来移动了。此外我还在左边加了一些 modifier 键,比如移动的时候如果想同时按住 Shift 选择的话,去按原来的 Shift 键就非常别扭,但是现在可以左手小指按住层切换键,食指就可以轻松地按只有这一层里才有的另一个 Shift 键,右手移动即可。另外这一层我还加了一个跳到第五层的按键,目前放在一个并没有很好按的位置,因为我也没有确定是否要留下这一层,第五层是鼠标层,基本上和第四层的布局是一样的,只是可以让光标和滚轮上下左右移动,用起来估计没有鼠标方便,但是也许可以偶尔临时用一下(特别是滚轮),之后看是否真的好用再决定是否留下吧。

QMK 提供的 Web 界面的QMK Configurator不仅可以浏览已有的 keymap,也可以做自己的定制,然后直接在线编译,即可下载到可以使用QMK Toolbox写到板子里的固件文件。同时可以把定制的 keymap 下载成 json 文件,如果以后还需要做修改,只要直接上传已有的 json 文件即可,不用从头开始。如果要对 QMK 做一些更深层次的修改,就需要修改源文件,当然可以直接手写编辑keymap.c来定义自己的 keymap,但更友好的做法是直接用qmk json2c命令把导出的 json 文件转化为一段 C 代码,复制到自己的keymap.c中即可。

由于不同的键盘仍然需要不同的 json 文件,如果修改键盘布局就每个都要修改,还是有点麻烦。好在我用的几个键盘 (Planck、Corne、Reviung41 甚至是 5x12) 的布局都是大同小异。于是我只维护一个基本的 4x12 格子 keymap,然后用一个简单的脚本来把它转换为不同键盘对应的 json。

OLED Customization

最后简单介绍一下 OLED 显示的定制。许多分离式键盘——特别是那些把 Pro Micro 或者 Elite-C 焊在基板正面的 kit 很多都可以添加一个 OLED 显示模块,因为 OLED 模块的大小基本上和 Pro Micro 差不多,所以刚好可以放在上面。说起 OLED,我一开始想到的是 iPhone 的超高清屏幕,但是我们在键盘里用的这个 OLED 显然不是那么高级的玩意,它价格在 5 美元以下,而且分辨率只有 128x32,别说颜色,甚至连灰度也没有,只能显示黑白像素,不过键盘 Controller 里值得显示的信息也非常有限,这个简单的模块其实更适合定制玩一玩。

Corne 自己的固件自带的功能是显示最近的按键、层信息和修饰键信息,都比较有用,不过是直接用文本显示的,比较小,再加上 OLED 屏幕是旋转 90°竖直安装的,很难看清楚。于是我把两边的 OLED 都利用起来,把信息用旋转之后的比较大的图标显示出来。另外通过时间计算还能显示一些动画之类的。网上有人做了诸如一个猫的动画之类的。我的模块在之前给了一个短视频展示,这里还有一个长一点的 demo。

OLED 的显示主要是使用QMK 提供的 API,虽然也有写 raw pixel 的 API,但是最常用的还是打印字符串的 API,用oled_write_ln_P()之类的函数可以输出文本信息,在一些比较老的 OLED code 里可能会看到一些模块初始化之类的代码,不过现在这些 QMK 都包装好了,只需要在rules.mk里加上OLED_DRIVER_ENABLE = yes就可以使用 API 了。

用字符串 API 显示图标的方法是使用定制字体文件。QMK 自带了一个默认的字体文件,可以正常显示 ASCII 码里的字符,但是我们可以通过使用自己的字体文件显示额外的内容。虽然说是“字体”,但是也完全没有我们平时用的字体那么复杂。由于 OLED 只能显示黑白像素,所以字体信息其实就是一个二进制位图,如下图所示,每个 6x8 的方格表示一个字符,前面四行每行 32 个字符其实就对应了 0 ~ 127 的 ASCII 码,API 在打印字符的时候其实就把每个字符对应的方格里的像素拿出来显示在 OLED 屏对应的地方。

虽然 API 里用的是char类型,但是仔细看 QMK 里的OLED driver 代码实现的话可以看到char最终会被强制转化为uint8_t来处理,所以我们实际上能使用 0 ~ 255 的字符,在额外的四行里就可以画一些自己想要显示的图标,然后通过打印对应的“字符”来显示它们。当然如果你确定你的 OLED 里不需要输出文本的话,甚至可以把整个字体文件全改掉也没有关系,或者你可以直接通过oled_write_raw()之类的函数来写入像素,这样(除了你的微控制器的内存)就没有任何限制了。不过我们这里不需要显示过于复杂的东西,所以仍然使用字符 API,例如我可以通过下面的代码来显示字体里的 QMK 的 Logo(那个中间有个Ψ字的东西):

  1. voidrender_qmk_logo(void){
  2. // this assumes the OLED is rotated vertically, 5 char wide
  3. staticconstcharPROGMEMfont_logo[]={
  4. ' ',0x8E,0x8F,0x90,0x91,
  5. ' ',0xAE,0xAF,0xB0,0xB1,
  6. ' ',0xCE,0xCF,0xD0,0xD1,0,
  7. };
  8. oled_set_cursor(0,0);
  9. oled_write_ln_P(font_logo,false);
  10. }

注意0x8E这些 code 其实就是 Logo 左上角的“字符”在字体位图里的 index,末尾的0是 C 语言里用来表示字符串结尾的。要显示简单的动画也很简单,可以用类似这样的代码来得到一个当前帧数:

  1. intget_frame_number(inttotal_time,intn_frames){
  2. return(timer_read()%total_time)/(total_time/n_frames);
  3. }

然后画出对应的帧数即可,具体的例子可以参考我的Corne 固件代码里的 oled.c文件。有一个非常简单但是已经比较酷的动画就是可以画一个闪烁的光标表示等待输入。不过我发现在正常待机状态下如果现实动画的话,键盘长时间没有输入 OLED 模块好像也不会自动进入待机关闭状态,也许是通过判断内容是否有变化来决定是否休眠的,所以我只在 Layer 切换的时候显示了一点动画。

最后一个问题就是如何修改和载入字体文件了。所谓的字体文件其实就是一个 C 文件里面定义了一个叫做 font 的字节数组,把位图里的所有数据用十六进制常量表示出来:

  1. constunsignedcharfont[]PROGMEM={
  2. 0x00,0x00,0x00,0x00,0x00,0x00,
  3. 0x3E,0x5B,0x4F,0x5B,0x3E,0x00,
  4. // ...
  5. 0x00,0x00,0x00,0x00,0x00,0x00,
  6. };

所有你可以用任意的图片编辑软件编辑一个合适大小的位图,然后用image2cpp之类的工具把图片数据转化为 C 里的字节常量即可。用自己的图片编辑软件的好处是编辑功能比较强大(复制粘贴移动之类的),另一个选项是使用helixfonteditor,这是一个简易的在线编辑工具,直接上传我的代码里的(或者 QMK 仓库里的其它的)glcdfont.c就可以开始编辑,编辑完即可下载更新的 glcdfont.c 文件。这个在线编辑页面显示出了每个字符的边界,所以比较不容易搞错,不过编辑功能比较基本,鼠标左键涂黑一个像素,右键清空一个像素,没有其他功能了,比如如果想把一片区域整体移动一个像素的话似乎就得人肉重画。拿到自己定制的 glcdfont.c 之后,在自己的 keymap 的config.h里把OLED_FONT_H指向这个文件即可:

#define OLED_FONT_H "keyboards/crkbd/keymaps/crkbd-kid/glcdfont.c"

具体显示什么好玩的就看自己的想象力啦😃。

My First Keyboard PCB Design

$
0
0

今年入了焊板子这个好玩的坑,刚开始是用 Arduino 的 starter kit 学习一些入门教程,并用别人做的 PCB 和不太详细的组装指南成功组装了给 Procreate 用的遥控器,那个时候连 PCB 是什么都搞不清楚(我以为电路板里是有复杂集成电路自己实现一个完整芯片的功能)。之后又莫名入了定制键盘的坑,更加一发不可收拾,做了第一个手工焊接的键盘,然后又焊了分离式键盘,定制 OLED 显示屏之类的。其实在焊完第一个键盘对整个流程有了大致的了解之后就有意想要什么时候设计自己的键盘了。只是一直并没有动手去做的原因是并没有找到特别有说服力的理由,毕竟我也不想只是为了设计一个键盘而去设计一个键盘,而网上有各种各样的定制键盘的设计,有不少是开源的,基本上包含了各种你感兴趣的设计方案。

直到最近一个偶然的契机 N 对小键盘和 Colemak 布局产生兴趣,于是新键盘的想法很快成型了。刚才我说入了焊板子的坑其实并不准确,因为到目前为止我一个针脚都没有焊过,全靠首席焊接工 N 的鼎力支持这些项目才得以完成,所以突然有了回馈工人的一个好手段。下面分享一下我设计键盘的过程。

布局设计

设计键盘的第一步通常是设计键盘布局,键盘布局需要考虑的两个主要限制条件一个是微控制器(MCU)的通用 IO 针脚数量,这会决定你能使用的行数和列数,从而决定了你能够支持的按键数目上限,不过一般不是做 Full Size 或者更大的话,这都不是太大的问题。另一个主要限制是键盘帽的兼容性,可以参考市面上常见的键盘帽套装了的各地按键的大小,大致可以知道什么样的布局是最比较可行的。下面是经过很久不断迭代之后的最终结果(当然不断迭代并不是因为不停地有更好地方案,而是各种方案都有各自不同的取舍,来回反复无法确定下来的缘故)。

这个布局里字母键、方向键和最底下一排的修饰键基本是任意键帽套装里都有的,向下、向上切换键通常需要在 Ortho 套件里才有,不过 1U 的键也很容易找到其他的替代品(例如 Fn 键)。左右两边的 1.5U 的键是非标准的,但是在带有 Ergo 套件的键帽里也都能找到。稍微麻烦一点的是两个 1.5U 的空格键,一般在 Ortho 套件和 Ergo 套件中都比较容易找到 2U 的空格键,不过在一些套件中也有 1.5U 的空格键(例如KAT Refined的 ortho 套件,或者MT3 Susuwatari的 Ergo 套件)。另外字母键如果要使用 Colemak 布局的话,有一些键帽是有专门的 Colevrak 套件提供支持的。

当然其实这些限制也不是卡死的规则,退一步讲可以用 XDA、DSA 之类的uniform profile的键帽,甚至是用空白键帽,就只要能找到长度匹配的就可以了。所以网上其实有一些布局非常非标准的键盘,比如 QAZ 三个键都不是 1U 的QAZ 键盘。而且由于最终定案是使用Kailh Choc Low Profile 键轴,和 Cherry MX 系列的键帽并不兼容,基本上只能使用空白的MBK 键帽,反而没有那么多忧虑了。

总之如果对键盘布局有一个大致的想法,就可以使用Keyboard Layout Editor这个在线工具(通常称作 KLE)进行布局设计了。这个工具在定制键盘社区里很有名气,而且在 Raw Data 一栏可以导出键盘布局的信息,这个信息是基于 json 的,虽然感觉格式的设计有点随机,但是在社区里已经非常通用了,例如通过KLE Render可以渲染出上面那样的键盘图,网站 1网站 2网站 3都可以通过 KLE 导出的数据来自动生成定位板甚至是其他中间板的 CAD 设计图,可以将这个图导入 PCB 软件辅助 PCB 设计,或者直接发送到激光切割厂商切割一个定位板出来,通过手工连线的方式无需 PCB 就可以做键盘原型。在 KLE 里如果登录到 github 的话,还可以把自己编辑的键盘布局保存下来,或者可以直接复制右上角 Permalink 处的链接,这个链接直接把所有信息嵌入在 URL 中,打开就可以看到自己之前编辑的布局。

我的布局方案是在 Planck 的 4x12 正交格子的方案上出发修改的,因为我比较喜欢这个布局方案,而且正交格子设计起来非常简单。主要的改动有以下几个:

  1. 把两侧的按键从 1U 加宽到 1.5U。因为我发现 N 在习惯了比较大的键盘的时候有时候按边缘的键会因为按的太远自己按出去。而且我自己也发现在按一下比较复杂的组合键,特别是需要同时按上下两个键的时候,由于手指是错开的,如果两个键都是 1U 的话就很难按,但是宽一些的键就有很大的自由度(例如上面的布局里假设我需要同时按 Esc 和 Shift 键)。最后就是边缘的按键(特别是左边的 Shift 和右边的回车两个键)宽一些的话按的时候手腕的扭动角度可以稍微小一些,感觉也会更舒服。
  2. 中间空出一列空间来。主要有两个作用,一个是留一个比较合适的空间出来放 MCU,在上一篇博客中有讲过我焊的最近两个 kit 都通过把 MCU 放在 PCB 正面而减小了键盘的整体厚度,放在正中央感觉从美观程度还是方便程度(USB 口的位置)都是非常不错的选择。另一个左右则是细微地增加两手之间的间隔,这也是从使用分离式键盘得到的体会:间隔增加之后也可以帮助减小手腕弯曲的负担。
  3. 1.5U 的空格键基本上是由上一条设计所决定的。最下面一行的设计是改动最多的,包括使用 1.25U 或者 1.5U 的修饰键,或者合并两个空格使用 3U 空格,或者在方向键左边留空帮助更方便地找到方向键等等,也很难说哪个方案绝对优于另外的方案,总之最后确定了这个很工整的方案。

有一个比较麻烦的问题是中间留一列的空隙够不够放一个 MCU 板。其实我手边有 Elite-C 板子可以测量尺寸,大致上也就是 1U 的宽度,但是还是不能完全确定,有时候可能是小于 1mm 的差距,如果到时候定位板上切割的宽度不够宽放不下,或者键帽按下去会碰到微控制器上,就非常不好了。有一个比较正面的支持证据是Helix 键盘确实在 1U 的空间里放了 MCU 板子,不够它那个是在边缘上,感觉可操作空间大一些。总之最后我在拿到 PCB 板的实物的时候第一时间就是用 Elite-C 试了一下,发现几乎是刚好 fit,只能说是非常幸运了!其实设计整个 PCB 的过程中电路这些感觉都是很简单的,一直让我各种心里没谱的反而主要是各种机械上的东西,比如钻孔要钻多大,上下板子的形状和孔如何报道对齐之类的。

由于是 Planck 键盘的 4x12 布局拉宽之后的设计,所以我把这个键盘取了一个非常不酷的名字叫做 Flanck (Fat Planck)。除了拉宽之外,另一个最大的设计改变就是我决定弃用 Cherry MX 系列兼容的键轴,而采用Kailh Choc 键轴,后者的特点在于 low profile,从轴体到键帽的设计,整个加在一起可以将键盘高度降的极低。突然想尝试这个的原因是我发现 N 打字的姿势跟我不太一样:我是手腕悬空,用肘部做支撑,而 N 大部分时候是使用手掌底部支撑的,所以如果键盘比较高而又不使用 wrist rest 的话,感觉手腕弯曲的负担很大,所以 low profile 的键盘应该是一个很不错的尝试。另外 Choc 键轴还有 20gf 超轻弹簧的线性轴 (Light Blue),有点好奇是什么样的手感(网上甚至还有更轻的定制 12g 弹簧卖)。

Flanck 和普通键盘(NiZ Plum Atom68)的高度对比。

PCB 设计概览和参考资料

有了合适的布局之后就可以开始设计 PCB 了,当然并不是所有的键盘都需要 PCB,有不少人直接通过上面提到的那些网站生成一个定位板文件,切割一个定位板出来然后通过手工连线的方式来做键盘,毕竟键盘的矩阵电路其实是很简单的。不过使用 PCB 可以更整洁,省空间,而且可以使用 hotswap socket,也是学习一门好玩的手艺。

PCB 的全称是Printed Circuit Board,根据我的粗浅理解,它和集成电路的一个重要区别是前者只有导线,描述了电流的走向,而后者除了电路之外还集成了晶体管这样的电子元件,可以实现与或非门从而构造出更复杂的逻辑电路。所以 PCB 是简单得多的东西,但是说 PCB 上没有电子元件也不完全准确,其实在设计 PCB 的时候我们考虑的也是各种不同的元件如何连接之类的,只是打印出来的 PCB 上并不包括这些元件,而是它们的“footprint”,描述了每个元件的形状、大小,以及提供对应的针脚可以让元件和 PCB 内部的电路连接起来。而将各种电子元件通过焊锡连到 PCB 上的过程就叫做焊板子,虽然有一些 PCB 制造商也提供 PCBA (A 代表 Assembly) 的服务可以自动把(支持的)元件焊到板子上,但是这些元件也都是在板子外部的,所以和集成电路还是很不一样。

PCB 使用简单的分层结构,最简单的配置是正反两层,如果只有一层的话在布线的时候很难处理线交错的情况,两层就可以解决大部分比较简单的电路布线问题(疯狂使用via的话可能可以解决所有交错的问题,但是 via 应该是要越少越好的),更复杂的电路还可以用更多层来做。当然 PCB 中还有其他一些辅助层和层间结构,中国的 PCB 制造似乎很繁荣,Youtube 上有各种中国的 PCB 制造商的工厂参观视频,可以对 PCB 的具体结构和制作流程有一个不错的了解。

PCB 的设计主要分为 Schematic 设计(有点像算法伪代码)和物理布局和连线两个部分。好几个商用软件可以使用,价格非常昂贵,不过在键盘设计社区里比较常见的是一个叫做KiCad的开源软件。网上有不少 KiCad 的 tutorial(例如这个),而键盘 PCB 设计相关的资料,目前最完整又没有过时的是ai03 的 PCB 设计指南,从头到尾教你做一个 2x2 的小键盘 PCB,不仅帮助了解 PCB 设计的基本概念,而且包含诸如配置 library 的相对路径、格子的尺寸之类的主要从经验来的东西。如果对设计键盘 PCB 感兴趣的话,一定要看。还有一个更复杂的设计一个完整键盘的 tutorial 是Masterzen 的博客,不过截至到我开始做 PCB 为止这个博客系列才只写了两部分,希望在之后会逐渐补完。最后是hadi 的键盘 PCB 设计的 Youtube 系列视频,截至到目前也还没有出完,而且他主要使用的是一个叫做 Eagle 的商业软件,在讲解过程中有时候会在一些细节处挖得过于深有点不知所云(可能主要是我背景知识不太够),但是也是不错的参考资料。

再就是直接打开网上的开源键盘的项目查看,不过网上的开源的键盘虽然不少,但是组织得清楚明了的项目会让你学习过程顺畅很多,甚至有一些项目可能由于路径配置或者缺少相应的库,打开会是一堆问号元件。我在设计 PCB 的时候主要参考下面这两个开源项目,刚好也是我在上一篇博客中组装的两个键盘,同时有项目文件和实物做参考感觉非常有帮助:

  • Reviung41:由 gtips 设计的一款伪分离式键盘。
  • Corne:由 foostan 设计的一款分离式键盘,有一系列针略微不同的版本。我主要参考的是Corne Light,这是一个以简单的 PCB 为目的的版本,所以没有正反皆可用之类的复杂设计,PCB 比较干净,适合学习用。

另外一些看起来比较好玩,或者比较干净的开源键盘项目还有keyseebeetornferris等。

组件库

设计之前第一步需要解决的问题是找到合适的组件库。Kicad 的组件库主要分为两种,一种是符号库,提供设计 Schema 的时候使用的逻辑符号,主要信息是有多少个针脚之类的,这个就算自己做也比较方便;另一种是 footprint 库,包含了元件的实物大小,针脚的位置和布局之类的,如果自己做的话需要严格参考元件厂商发布的规格,或者有时候可能需要自己用实物进行测量。不过幸运的是网上有不少 KiCad 的键盘相关的元件库可以参考和使用,例如ai03 的键盘组件库daprice 的键轴库keebio 的键盘组件库等等。 keyboardio 还有一个各种键轴的规则文档的合集,如果需要自己制作 footprint 的话可以参考。 Corne 用了自己的组件库,由于我主要参考 Corne 的 PCB 文件,所以也直接用了它的组件库。

Schematic Design

下面是 Flanck 键盘的 Schematic 一览,清晰的 PDF 版也可以从github 的 Release 页面下载到。其实我在一开始学习 PCB 设计的时候看网上的教程就很不明白 Schema 这一步是用来做什么的,因为虽然在这里指定了各个组件以及它们是如何连接的,但是到第二步物理布局的时候还是要在合适的位置放置各个组件,并指定它们之间的连接关系。不过在自己做过一次设计并有过几次迭代之后就很清楚了:PCB 的物理布局主要是给生产 PCB 的机器看的东西,而 Schema 则主要是给人看的东西。

Schema 里虽然大致给定了一些元件的相对位置和逻辑上的连接关系,但是元件都是以一个符号的形式画出来,而并不是其真实的形状,而且其位置也只是起到一个示意图的作用,所以各个元件如何摆放有很大的自由度,于是就可以尽可能地做的(让人看的时候)容易理解。举几个例子,我们可以用标签来标明逻辑上的连接关系,例如上图中的 MCU 针脚有诸如col4col5之类的标签,这代表对应的针脚应该和下方的按键矩阵里对应标签的导线连接起来。通过标签我们就可以把 MCU 放在任意位置,而且也不需要画满屏幕的线把对应的针脚连接起来。此外,键盘矩阵里的导线在有交叉的时候默认是不相互连接的,所以矩阵里的连线也能画成逻辑上一目了然的样子。这些都是在做物理 PCB 布局的时候无法享受的待遇:事实上 PCB 的物理布局设计中很大的一部分内容就是如何布线使得他们不相交短路。

这样的逻辑上清楚的设计图纸的好处就在于容易理解,在你需要修改别人的设计或者迭代自己的设计的时候尤其有帮助,这比直接去盯着画了物理布线的 PCB 文件找每条线最后都连到了哪里容易太多了。与此同时 Schema 还提供一定程度的自动验证作用:在设计 PCB 的物理布局的时候很容易漏掉某个元件或者漏连某一根线,漏掉的东西在 Schema 里很容易看出来,但是在 PCB 物理布局上就比较难了,于是设计软件可以对比 Schema 和物理布局,给出相应的错误提示。

从上面的 Schema 中可以看出 Flanck 键盘的设计非常简单,矩阵是一个规整的 4x12 的布局,由于 MCU 有足够的针脚,我也不需要留多余的针脚来做 RGB LED 或者 OLED 屏,所以我也没有为了优化把它做成诸如 6x7 之类的逻辑排布(参见Reviung41的设计)。除了按键矩阵之外的元件就是一个 reset 按钮、一个 MCU 和一些螺丝孔。所以(前面也提过)其实设计过程中线路的布局之类的都非常容易,反而是具体实物上的东西(比如钻孔钻多大,元件之间留的空间之类的)相关的问题让人很没谱。

另一个让我们的 PCB 设计很简单的原因是我使用了 MCU 板。在实际组装的时候我使用的是Elite-C板,这是一系列的兼容Arduino Pro Micro板针脚的板子中比较容易买到同时又有 USB-C 口的板子,另一个例子是有蓝牙模块的nice!nano。他们之所以叫 MCU 板是因为他们本身就是一个(很小的)PCB,除了 MCU 本身之外,让 MCU 能正常运作的相应的电阻、电容等原件,以及和外部交换数据的 USB 接口都已经正确地焊在板子上了,所以我们在使用的时候只需要设计按键矩阵,然后把对应的行和列连到 MCU 板暴露出来的数据针脚上就可以了。使用 MCU 板的一大好处当然是简单,而且模块化,同一个 PCB 设计可以使用针脚兼容的不同 MCU 板,比如使用 nice!nano 板的话就可以变成一个蓝牙键盘。坏处的话应该价格更高一些(但这必须是在考虑大数量的键盘平均价格的情况下),而且 MCU 板比单独的 MCU 要更占空间,所以在键盘设计时必须仔细考虑把 MCU 板放在那里。所以另一个做法就是不使用现有的 MCU 板,而是直接将 MCU 集成到键盘自己的 PCB 中。例如下面是sparkfun 的 Pro Micro的 Schematic,可以看到实际的 MCU 是叫做 ATmega32U4 的 8 位 AVR 控制器,如果要做集成化设计的话基本上就是要把下图中 MCU 和相关的元件全部集成到键盘的 PCB 中去。

集成化的 PCB 可能在使用 PCBA 服务大规模自动焊接 MCU 的情况下会很方便,但是如果是要 DIY 在家自己手工焊一个 ATmega32U4 到 PCB 上的话,难度就大到有点不太合适了。

Physical Layout

PCB 设计中最费劲的一步应该就是物理布局了,这是 PCB 的具体实现,将决定 PCB 内部的连线如何分布,以及表面连接的电子元件如何摆放,以及板子的外形如何,再哪里钻孔如何组装等等。为了从 Schematic 到物理布局,我们首先要做以下两件事情:

  1. 给 Schematic 里的每个元件取一个名字,这样可以通过名字确定物理布局中的元件和 Schematic 里的逻辑符号之间的对应关系。KiCad 似乎是采用字母加数字的方式来命名的,例如R1R2表示电阻、D1D2表示二极管等。KiCad 工具栏上有一个叫做 Annotate Schematic Symbols 的按钮可以自动按照从左到右从上到下等方式进行命名,如果对于自动命名不满意也可以手工编辑每个元件人肉命名。
  2. 给每个元件指定一个 Footprint,同样在工具栏上有一个叫做 Assign PCB Footprints to Schematic Symbols 的按钮会打开一个对话框可以批量对相同类型的元件的 footprint 进行指定。这一步很重要,因为搞错的话元件就无法正确焊接到 PCB 上。比如使用的二极管是什么尺寸的,使用的按键是 Cherry MX 兼容的吗?还是 Kailh Choc 的?是 1U 的按键还是 1.5U 的按键?是焊接还是使用 Hotswap socket 亦或者是两者兼容?虽然网上基本都能找到各自元件的 footprint 库,但是有时候库里会有好几个类似的 footprint,并且几乎没有任何文档说明,要搞清楚使用拿一个有时候也比较麻烦。我使用的 Kailh Choc Hotswap 的 footprint 里有一个多余的针脚,在键轴上并没有,但是看了网上几个 footprint 库里都是那样设计的,我也就直接用了,不过直到最后实物键盘组装起来我其实也没搞清楚那个针脚到底是做什么用的。

做完这两步之后就可以打开 KiCad 里的 pcbnew 程序,通过工具栏上的 Update PCB from Schematic 来导入 Schematic 里的所有的元件对应的 footprint 了。这个时候首先看到的是所有元件全部挤在一堆,因为 KiCad 不知道在物理上要如何摆放这些元件。所以接下来要做的事情首先是决定如何摆放这些元件。对应布局比较复杂的键盘(例如分离式键盘、各行或者各列错开的键盘等),可以导入最开始布局设计那里生成出来的定位板的 DXF 文件来作为按键摆放位置的参考。幸运的是我们这里设计的键盘是非常规整的正交格子,并且我们使用的 footprint 库里按键的 footprint 包含了每个按键的参考边框:因为键盘上按键之间的间隔其实是有一个标准或者说约定俗成的值的,对于 Cherry MX 键轴兼容的键盘,每个 1U 按键占用的宽度应该是 19.05mm (为什么这么奇怪的值?我想可能是从 3/4 inch 来的,是的,现在世界上还有某些国家不使用国际单位制),如果小于这个值可能就会导致某些键帽会互相卡住之类的。Choc Switch 和 keycap 尺寸都要小一些,可以使用 18mm x 17mm 的尺寸,这样会让键盘更小巧紧凑一些。不过也有继续使用 MX 的尺寸来做 PCB 设计的,因为有个别 Choc 的键帽是对 MX 尺寸设计的,而且 Kailh 推出了兼容 MX 键帽的 Choc V2 键轴,如果要使用 MX 兼容键帽,就必须要使用这个尺寸了。

总之按键的 footprint 按照合适的尺寸提供了外形边框,而我们的键盘又是规整排列的,所以在布局方面非常简单,只要把每个键挨个排列起来就行了(注意和 Schematic 之间的顺序对应),之后再在每个按键附近摆好对应的二极管,以及决定好放 MCU 板的地方就好了,下面是所有元件都摆好时的样子:

由于形状规整,摆好按键之后其实 PCB 的外形也跟着决定了,使用工具栏上的直线和弧线工具就可以画出外形。把外形上的角用弧线做成圆角不仅是为了美观,而且也避免 PCB 上尖角划伤自己。画外形的时候注意要选中 Edge.Cut 这个层,这个层是专门用来描述 PCB 切割形状的。PCB 设计软件里还可以看到许多其他的层,其中有一些层是会发送到生产商那里的,比如 F.Cu 和 B.C 两个分别是正面和反面的铜线层,如果是多层布线的 PCB,还可以有更多铜线层,还有 F.SilkS 和 B.Silk 分别是正面和反面的Silkscreen层,分别给出板子正反表面的装饰性涂装,可以在里面画自己的 Logo、写版本信息之类的。也有一些是展示辅助信息的层,并不需要发送到制造商那里,例如我使用 Corne 的 footprint 库的时候按键的外形轮廓是放在 Dwgs.Use 层里的,例如我可以把这个信息导出出去用于定位板或者外壳的制作(保证和 PCB 上元件的形状和对齐)。Masterzen 的博客里有一个 KiCad 里主要的层的用途的介绍表格。

注意 KiCad 默认是所有层一起显示的,并且如果是放在 PCB 反面的东西是自己镜面显示的(所以写在背面的文字是反过来的),特别是在有Copper Pour的情况下,整个 PCB 几乎是没法看的,所以设计和查看的时候可以选择性的打开和关闭一些层。不过我这个 PCB 非常简单,而且也没有使用 Copper Pour (其实当时没搞明白怎么用),所以所有层一起显示也一目了然。

除了按键和 MCU 板之外,我还在板子钻了一些孔用来组装键盘,我在下一小节再讲钻多大的孔。事实上我在 Schematic 里也加了孔对应的符号,这样做是方便我在从 Schematic 导入到 PCB 的时候可以选择自动删除 Schematic 里没有对应的元件,这样让我在初期迭代的时候很方便地在 PCB 和 Schematic 之间来回做修改并保持同步。有一些观点认为像钻孔这种东西不应该出现在 Schematic 里,而是要在 PCB 设计的时候(通过右边工具栏的 Add Footprint 按钮)直接添加 Mounting Hole。具体怎么做就看个人喜好了吧。

把所有的物理元件和孔的位置都决定好之后就可以开始布线了,这个一定要是最后一步,因为如果中间你再移动元件的话,布线就得重新搞。如果你不小心把布线搞得太乱了或者突然意识到换一下针脚的对应关系会让整个布线更简单,在 Edit 菜单项下面有一个 Global Deletions 项可以一次清空所有已有的布线。

用 tracespace.io 生成的 Flanck PCB 背面渲染图。

PCB 程序会根据 Schematic 里的连线信息显示哪些针脚需要通过布线联系起来,并且当你把鼠标放在一个 pad 或者针脚上按 x 开始布线的时候,需要连接但还未连接起来的目的针脚就会高亮出来。默认情况下红色的线是在 PCB 正面,绿色在反面,需要的时候(比如眼前有一根障碍的线绕不开)可以按 v 加入一个via转移到另一边,从而绕开障碍,不过通常建议是 via 尽量少用,还有一些约定俗成比如行的布线一边在反面,列的布线在正面等等。总之具体怎么布线感觉很看个人经验和喜好,也可以完全使用自动布线功能,不过许多爱好者都更偏好手动布线,并把这当做是 PCB 设计的重要一环。具体布线过程中还有许多小细节要注意,比如布线的粗细选择,线路之间以及线路与其它元件之间的距离等等,不仅和最终 PCB 制造商的生产能力有关,有时候也和连线的用途(例如是电源线还是数据线)相关,具体可以参见我前面列的那几个 PCB 设计的教程,我在这里就不多说了。

用 tracespace.io 生成的 Flanck PCB 正面渲染图。

布线之后可以添加Copper Pour,我看到 Corne Light 里没有使用,于是也没有用,在组装之后也没有碰到什么异常。最后非常重要的一步是运行 Inspect 菜单下的 Design Rules Checker,这是一个非常简单的检查工具,比如 Schematic 里指定的哪里的连线在 PCB 里没有连起来的话,这里就会指出来。

Keyboard Plate Design

最后想要提一下外壳设计,说是外壳其实是另外两块不带电路设计的 PCB,也就是上一篇博客中提到的 Sandwich Case 设计,由于 PCB 材料本身坚硬柔软程度都适中,厚度也差不多合适(一般是 1.6 毫米左右),而且 PCB 生产商能够做各种切割和钻孔,一次定多个 PCB 也有助于降低运费成本等等,所以用 PCB 材料来做定位板和底板是 DIY 键盘是很不错的选择。要做一个 PCB 材料的定位板和底板也就是需要设计额外的两个板子,我在网上几乎没有找到教程讲这个,所以这里稍微多讲一点,虽然我的方法很可能不是最标准的。在那之前先介绍一下 Sandwich Case 的具体结构,下面是一个螺丝孔附近的示意图:

可以看到基本组装方式是在定位板和底板上钻比较小的孔,让 M2 螺丝能通过。注意 PCB 制造商只能钻孔,并不能做螺纹,所以中间需要用一个有对应 M2 大小螺纹的 Spacer 来将两个螺丝组合到一起。所以 PCB 上需要钻一个更大的孔来让 Spacer 可以通过,M2 Spacer 的内径虽然一定对应 M2 螺丝的大小(约 2mm),但是外径并没有标准,我发现网上能买到的圆柱形的 Spacer 的外径一般比六边形柱体的要小,前者可能能到 3mm 左右,后者甚至能到 5mm 上下,我这里钻的是 4.8mm 的孔,结果差不多刚刚好能 fit 我买到的所有类型的 Spacer。

定位板和 PCB 之间一般靠键轴来固定住,在使用 Hotswap socket 的情况下如果想让他额外稳定的话可以用图中所示的小垫片 Washer。这个垫片的大小就取决于你使用的 Spacer 的外径了,上一篇博客有介绍如何使用 Nylon Washer,后来我发现橡胶的 O Ring (例如经常用来给机械键盘静音的那种) 也很好用。具体加多少垫片取决于 PCB 和底板之间空间大小,在使用 Choc Hotswap socket 的时候大约是 2mm。如果不是使用 Choc Switch 而是使用 Cherry MX 兼容的键轴的话,这里大概是 3mm 左右,并且 PCB 和定位板之间也不会紧贴在一起,而是有另外的 3mm 左右的间隔(也可以通过垫片来固定)。

固定方法搞清楚之后就是如何来生成定位板和底板的文件了,主要的难点在于几个板子尺寸要匹配,钻孔要对准,特别是定位板,除了要钻螺丝孔之外,还需要切割用于固定键轴的空隙。我们之前提到我使用的 Footprint 库在 PCB 的 Dwgs.Use 层里放了键轴的外形轮廓信息,理论上我们可以把这些信息导出来,然后导入到定位板的项目文件中,再根据这些信息来画键轴框架。

Flanck 的定位板渲染图。

不过我发现 Corne 的 Footprint 库里有一个叫做SW_Hole的 Footprint,于是我在 PCB 完成之后,直接把 PCB 项目文件整个复制了一份,然后把 Schematic 里的所有二极管去掉,再把所有按键的 Footprint 重新指定为SW_Hole,然后在 PCB 那里清除所有布线,再根据 Schmatic 更新一下——由于更新了 Footprint 之后元件原来的位置信息还是没有变的,于是瞬间就有了所有按键的切割信息,同时对应的螺丝孔也在,只要编辑每个螺丝孔把直径改小即可。最后根据 MCU 板的 Footprint 画出针对 MCU 的留空,再在 Schematic 和 PCB 里都删掉 MCU 就可以了——虽然 KiCad 会抱怨说 Schematic 里的按键的两个针脚在 Footprint 里没有找到对应关系,但是我们这里反正没有电路,就直接忽略了。用同样的办法可以制作底板。在这一步还可以在 Silkscreen 上加入 Logo 信息之类的,不过由于我整个项目需要迅速做完,并且希望留有时间能处理如果有设计失误时的二次迭代,就没有去搞这些。

我不知道“正确”的做法或者更标准的做法应该是怎样的,我看网上有人会用Inkscape甚至OpenSCAD去画定位板,特别是当目的是要用塑料或者金属切割而不是用 PCB 材料来制作定位板的时候。不过即使开源项目提供了所有的源文件,但是也不知道作者是通过怎样的流程来制作这些文件,以及通过怎样的方式保持各个板子之间的尺寸对应关系同步的。可能这只有靠经验积累了吧。

Manufacturing

最后一步是实际 PCB 生产。在网上搜索的话可以找到很多 PCB 生产厂商,国内在这方面似乎很有竞争力,在键盘爱好者社区比较常用的是JLCPCB。在我刚开始在博客里写键盘相关的文章是就有网友联系我并介绍了他们自己的 PCB 生产服务WellPCB,我本来是打算试一试他们的服务的,但是这次的项目由于时间上比较紧急,看到 JLCPCB 网站能非常直观的上传和估算生产所需的时间(绿色 PCB 只需要 1~2 天,定制颜色也只需要 3 天),最后还是决定先用 JLCPCB 了。

通常 PCB 制造商需要打包的 Garber 文件,JLCPCB 网站上有如何从 KiCad 导出 Garber 文件的详细指南。通常(在设计 PCB 之前)还需要看一下你想要使用的制造商的生产能力和规则限制,例如 JLCPCB 的页面在这里,从而搞清楚各种尺寸的最小最大限制之类的。一般开源的键盘也都会提供 Zip 打包的 Garber 文件下载,Flanck 键盘的 PCB 和定位板、底板对应的 Garber 文件可以在Releases 页面下载到。

在 JLCPCB 网站上上传 Garber 文件,就会生成简单的预览和价格估计了,价格会跟板子的尺寸还有一些用料等基本参数有关,JLCPCB 上每个 Garber 文件至少是 5 块板子起生产,不过价格也很便宜,打印 5 块板子也就十美元多一点。PCB、定位板和底板各五份一共才三十几美元,不过用中国的生产商的一大问题是如果不想等待一个多月的话,快递费会比较贵,我选了 DHL 的 3~5 天送货大约要 28 美元的快递费。我后来还了解到一些美国的生产商,例如PCBs.ioOSHPark等,以后可以试一试。

总之对 JLCPCB 的服务还是很满意的,美国时间晚上发过去,第二天就收到了邮件回复希望确认一些东西,同时我意识到我在 PCB 上钻的孔的大小是不对的,于是更新了 PCB 让它们使用了新的 Garber 文件。它们让我确认的问题主要有两个:

  1. PCB 上有许多 0.3mm 的 slot hole,而他们的生产能力要求最小是 0.65mm。在对方给的示意图上确认了一下,发现这是之前我提到过的 Choc Switch 的 footprint 上那个不知道是做什么用的额外的针脚,其实它也没和 PCB 的其他部分连在一起,所以可能怎样都无所谓。而且 0.3mm 和 0.65mm 之间的差别其实非常小,所以我就全部修改了。
  2. 有许多针脚在 PCB 正面都没有 solder mask opening。我查了半天这个 solder mask opening 是什么东西,发现似乎 solder mask 是把 PCB 内部的铜线和外部隔开的一层绝缘材料,而 opening 则是留出的一部分 pad,好让你在焊接的时候能把焊锡粘上去。对比了一下 Corne 里不同 PCB 的版本,发现它是最近才开始用这样的设计的:因为 MCU 板其实是针脚插到背面去焊,所以正面并不需要放 solder mask opening。虽然不知道这样做有什么好处,但是似乎也没有什么问题,于是我就让它们按这个制作了。

确认之后就进入生产环节,基本上是 3 天生产完成,在网站上能看到 PCB 生产的实时进度,非常人性化(似乎前期很快,但是最终检查需要很久),最后快递也是三天左右,不过 DHL 最后不知道是送错了 apartment 号还是什么情况,导致我无法打开小区的 locker,最后又折腾了一天才拿到,顿时对 DHL 印象变差很多。

Keyboard Firmware

定制 PCB 还需要定制自己的键盘固件,PCB 只是一个按键的矩阵,在之前debug 5x12 键盘时介绍过 controller 是如何从这个有二极管的键盘矩阵中识别出哪个按键被按下的,这就是键盘固件代码做的事情。识别出按键之后,需要根据用户配置的 Keymap 来决定给电脑发送哪个 keycode,如果键盘要支持比较复杂的比如分层之类的功能的话,决定发送什么 keycode 的步骤本身就不是一件 trivial 的事情,此外和电脑进行交互的接口——例如(极其复杂的)USB-HID或者(没有最复杂只有更复杂的)HID over GATT Profile 蓝牙低功耗规格等——通常也是很麻烦的东西,所以理论上来讲固件要做的事情还挺多的。不过幸运的是有诸如QMK之类的非常成熟的开源固件可以使用,如果是使用支持的控制器的话,那么大部分代码就都不用自己写了。

由于我使用的 Elite-C 这个 MCU 板子是QMK支持的,所以定制固件其实非常简单,主要需要做的事情就是指定好二极管的连接方向,以及键盘矩阵有多少行多少列,每一行分别对应 MCU 的哪一个针脚,然后在定制一个默认的按键映射就可以使用 QMK 的代码进行编译了。具体可以参见Flanck 键盘的固件代码,QMK 关于添加新键盘的部分文档可以在Keyboard Guidelines找到,也可以选一个你熟悉的类似的键盘的固件代码做参考。下面只展示一下config.h里的内容:

  1. #pragma once
  2. #include "config_common.h"
  3. /* USB Device descriptor parameter */
  4. #define VENDOR_ID 0x4E4B // NK
  5. #define PRODUCT_ID 0x0001
  6. #define DEVICE_VER 0x0001
  7. #define MANUFACTURER pluskid
  8. #define PRODUCT flanck
  9. #define DESCRIPTION 4x12 fat-planck
  10. /* key matrix size */
  11. #define MATRIX_ROWS 4
  12. #define MATRIX_COLS 12
  13. #define MATRIX_ROW_PINS { F4, F5, F6, F7 }
  14. #define MATRIX_COL_PINS { B1, B3, B2, B6, D3, D2, D4, C6, D7, E6, B4, B5 }
  15. #define DIODE_DIRECTION COL2ROW
  16. /* Set 0 if debouncing isn't needed */
  17. #define DEBOUNCE 5
  18. /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
  19. #define LOCKING_SUPPORT_ENABLE
  20. /* Locking resynchronize hack */
  21. #define LOCKING_RESYNC_ENABLE
  22. #define TAPPING_FORCE_HOLD
  23. #define IGNORE_MOD_TAP_INTERRUPT
  24. #define TAPPING_TERM 130

第 5 到 11 行的内容是 USB 标识相关的,基本上可以自己随便写。第 13 行到第 19 行是最重要的需要写对的东西,但是其实也很简单,可以看到我们这里指明了键盘有 4 行和 12 列——这是和 PCB 布线相关的,前面提到即使你的实际布局是 4x12,你也可以把它搞成 7x7 之类的来节省两个针脚用作其它用途。不过我们这里为了简单就用了和物理布局一样的 4x12 的布局。接下来需要指定具体每行每列对应哪个针脚。我使用的是 Elite-C 这个 MCU 板,所以参考了 Deskthority 的Elite-C 页面里的针脚图,如下图最左边(QMK 使用 Arduino 名,也就是绿色的标签),似乎所有 Pro Micro 兼容的 MCU 板的针脚名字都是通用的,但是网上找的的 Pro Micro 的针脚图也各有细微的差别,具体我也不知道是怎么回事。总之这个图和我 PCB 上用的 footprint 里的 silkscreen 上显示的符号(下图中间)是差不多的——注意左图显示的是 Elite-C 的正面,而我们焊接的时候是把 Elite-C 反过来焊在 PCB 上的(这样把元件隐藏保护起来),所以针脚是左右对称的。最右边是 Elite-C 板子的正面和反面的实物图,上面也写了针脚名。

对比 Schematic 上各行各列与针脚连接的状况,就可以写出固件代码里的针脚名。最后那些代码是 QMK 的一些行为配置,直接留空使用默认值也可以。其他比较重要的,一个是在rules.mk里定义好 MCU 和 Bootloader:

  1. # MCU name
  2. MCU= atmega32u4
  3. # Bootloader selection
  4. # Teensy halfkay
  5. # Pro Micro caterina
  6. # Atmel DFU atmel-dfu
  7. # LUFA DFU lufa-dfu
  8. # QMK DFU qmk-dfu
  9. # ATmega32A bootloadHID
  10. # ATmega328P USBasp
  11. BOOTLOADER= atmel-dfu

默认好像是使用 Pro Micro 的caterina,Elite-C 应该选择atmel-dfu,不过默认值使用起来好像也没有什么问题,只是 Keymap 里的Reset键并不能触发 MCU 进入可以烧固件的状态,必须要按 PCB 上的 reset 键才行,指定了正确的 bootloader 就可以解决这个问题。最后需要定义一个默认的 Keymap。由于 Flanck 的按键数目和布局和 Planck 是一样的,所以最简单的办法是通过QMK Configurator配置一个 Planck 的 keymap,导出为 json 文件,然后在通过qmk json2c工具生成一个keymap.c出来。

对于我的情况,在上一篇博客中已经说明过了,由于我有好几个布局比较类似的键盘,所以用了一个统一的脚本来管理和生成 keymap 文件。当然,其实手写 keymap 也是非常容易的啦。如果要手写 keymap 的话,可以参考QMK 的文档了解一下各种 keycode 和复杂行为的写法。

QMK 本身是一个通用的键盘固件框架,提供了各种高度复杂的功能和灵活的可定制性,可以看到如果是使用 QMK 支持的 MCU 的话,定制一个固件其实非常方便。所以绝大多数(非无线)定制键盘都使用 QMK 来构建固件。而蓝牙无线键盘则由于非常复杂的开源 license 冲突方面的原因几乎无法使用官方的 QMK 作为固件,从而有许多其他选择,不过整个蓝牙固件社区感觉还在发展中,整体来说还不如 QMK 成熟。事实上在做好第一个 Flanck 键盘之后我们又用多余的 PCB 加上nice!nano这个和 Pro Micro 兼容但是有蓝牙模块的 MCU 板子做了一个无线版的 Flanck 键盘,这个如果有机会下次再细说。

总之 QMK 虽然是一个通用固件“库”一样的存在,但是它使用了一种比较奇怪的代码组织方式,就是所有用 QMK 来定制的固件代码也全都要 commit 到 QMK 的主仓库下面。于是 QMK 有一个无比巨大的keyboards文件夹,并且由于各种 prototype 乃至 handwired 键盘太多,还单独有一个keyboards/handwired目录来放这些键盘。如果你有多个键盘,需要互相共享一些代码或者配置之类的的话,你还可以在users下面有一个你自己的目录放自己的一些代码。总之感觉非常混乱,不过这样的组织方式也有它的好处,比如QMK Configurator这个在线工具就直接依赖主仓库里有的键盘的元信息可以在线预览和配置各个不同键盘的 keymap,并且用户不需要在本地安装 QMK 开发工具就能用它在线编译出固件来,还是很方便的——虽然也许单独用一个仓库来放键盘定义可能是更合适的选择?

总之 Flanck 的固件代码原则上也应该要 commit 到 QMK 的主仓库里去的,不过看到 QMK 的 github 上300 个左右的 Pull Requests多少有点劝退的感觉,如果我以后有需要可能会尝试把代码 push 上去,目前的状态是我直接在本地做一个软链接到 QMK 的目录里去进行编译,唯一不方便的地方就是不能直接用 QMK Configurator 直接在线生成固件,但是如果是我自己用的话其实也无妨。

固件编译好之后会得到一个 .hex 文件,按 MCU 上的 reset 键让它进入 Bootloader 模式,就可以通过 QMK Toolbox 来把 .hex 格式的固件写到 MCU 上了,具体如何编译和烧固件直接参考QMK 的文档即可。

Keyboard Assembly

收到 PCB 的时候是非常兴奋的,JLCPCB 的真空包装看起来很结实,还送了一个柯基的小吉祥物。本来是打算周末再组装的,结果也没有忍住兴奋当天就动手组装了。除了 PCB 之外还需要一些其他可以买到的组件提前就准备好了,一个 Elite-C MCU 板,48 个 SMD 的二极管,48 个 Kailh Choc 键轴和 Hotswap Socket,48 个 Choc 键帽(40 个 1U 和 8 个 1.5U),一个 reset 按钮,M2 螺丝和 spacer,USB-C 线等。我在github 页面给出了一个详细列表和我使用的购买来源,总的来说还是比较容易搞到的组件。

组装过程也不复杂,特别是如果有其他键盘 kit 的组装经验的话。首先是 PCB 背面的二极管和 Hotswap socket。每个按键都有一个附带的二极管,PCB 上有类似于⏄这样的符号,三角形所指的方向(有一条线的那一边)就是二极管应该指向的方向,具体二极管本身的方向怎么认跟你买到的二极管的包装有关系,通常有黑色线条的一边是和 PCB 上三角形所指的那个线对应。SMD 的二极管在焊接之前先在 Pad 上涂一些 Flux 会让焊接容易一些(不需要严格地只涂在 Pad 上,周围涂上也没有关系)。

焊完二极管之后就可以焊 Hotswap socket 了。如下图所示,PCB 背面每个 socket 都有白色图示标识,把 socket 放上去然后用焊锡固定住两个针脚即可(下图左边和右边是还未焊 Hotswap socket 和已经焊上了的情况的对比)。

焊完背面反过来,PCB 正面只有 Elite-C 和一个小的 reset button 需要焊,和其他 kit 的组装过程是差不多的,只要注意 Elite-C 板是反过来(元件隐藏在内部)放的——检查 Elite-C 上能看到的针脚文字和 PCB 上写的文字能对应起来而不是镜面对称即可。具体的步骤可以参考BoardSource 的 Ortho 组装指南的对应部分以及 Kyria 组装指南的Controller 部分Reset Button 部分(它的 reset 按钮是从侧面按的,但是针脚是一样的)。

组装 MCU 板的时候可以使用 Socket,这样 MCU 也是可以是比较容易拆卸的。虽然其实需要拆卸的机会也并不多了。我使用了 Mill-Max 的 Super Low Profile Sip Socket,使用 ID 号315-47-112-41-004000Mouser之类的地方能找到。这个 ID 号中间的-112-代表 12 个针脚的版本,我在 Mouser 没有看到有现货,于是买了-104--108-的,组合起来使用。我还买了可以和这个 socket 配合使用的针脚(ID 是315-47-112-41-004000),但是直接使用 through hole 的二极管剪下来的多余针脚也是可以的,不过注意这个 socket 的孔是圆的,所以 Elite-C 自带的 header pin 的那种方形 pin 是无法插入进去的。其实如果不需要超级 low profile 的话,可能 Amazon 或者其他地方能找到的那种便宜很多的普通的 Machine Pin Female Header (例如这个) 可能也是可以的,不过我还没有试过了。使用 socket 的具体组装方法可以参考Kyria 的文档

使用 Mill-Max Super Low Profil Sip Socket 安装 Elite-C 的示意图,这是可选步骤,直接用 Elite-C 自带的 header pin 焊接上会简便很多。

安装完 Elite-C 之后可以插上 USB 线,把之前做好的固件烧进去,然后用金属镊子或者小导线之类的短路每一个按键的 Hotswap socket 的两个针脚看是否能正常触发按键。如果没有问题的话就可以把定位板放在 PCB 上面对齐,然后开始安装键轴了。安装键轴的时候注意键轴的两个针脚是垂直插入下面的 Hotswap Socket 的两个孔的。装完键轴之后再测试一下按键都没有问题,然后就可以用螺丝和 spacer 把三块板子组装起来了,组装的方式参考之前 PCB 设计时的那张示意图。之后再在底部合适的部分贴上 rubber feet。

组装完板子之后在装上键帽,就大功告成啦!经过之前的多次组装碰到的问题和调试之后,这次居然史无前例的一次成功,没有出任何问题!

Kailh Choc Key Switch

凯华的 Choc 键轴感觉还挺好玩的,确实能做出来比 Cherry MX 兼容的那些键轴的键盘要低很多。手感还不错,因为我都使用线性轴,所以手感的差别主要是弹簧弹性的差别。这次试用了 20g 超轻的键轴,其实感觉和 low profile 的键轴还挺搭的,按起来超级省力,虽然在习惯之前有时候会误按到,但是很快就能习惯。网上还有 12g 重量的弹簧卖,可以替换到键轴里。针对 Choc 键轴设计的键帽非常少,基本上目前质量比较高又比较容易搞到手的就只有 MKB 键帽了,听起来很糟糕,不过似乎反而是件乐事,因为 Cherry MX 键轴的情况下挑选键帽花的大量精力都可以省下来了。

只有一点我不是特别中意的就是 Choc 目前似乎还没有静音轴,Cherry MX 兼容的那些键轴的非静音线性轴我现在已经能接受了,但是 Choc 的非静音线性轴感觉声音真的比较响,也不太好听,可能和 Choc 键帽比较薄也有一定关系,尝试用 O ring 发现几乎没有改善。不过幸运的是我尝试用润滑油(在1upkeyboard买的 Tribosys 3204)涂了一下键轴轴体之后就基本没有声音了。这也是我第一次打开键轴,发现其实挺容易打开的,不过每个键轴涂润滑油真是超级费事就是了。

后记

这次的项目感觉从一开始 PCB 设计文件上打孔错误偶然在生产之前被发现,到 MCU 板的留空几乎恰好能放得下 Elite-C,可以说是包含了各种运气因素在里面才没有任何差错地一次成功。不过一些提心吊胆的地方也主要是因为整个过程时间非常短的缘故,原本我也没有打算这么快就要自己定制一个 PCB 的,但是突然有一个好想法的同时意识到 N 的生日也是很接近了,所以如果能赶在那之前做完的话就是最好的。同时由于这是我第一次设计 PCB,而且也是第一次去订购 PCB 的生产,对整个过程的时间概念估计不是特别准确,特别是考虑到如果第一次设计有问题需要修改的话,可能至少还需要留足多一轮的生产加快递的时间,所以整个 PCB 基本上是两天(的下班空余)时间赶完就直接发到 JLCPCB 那边了😅。

总之最后很顺利地提前完成了整个项目,非常好玩,而且自己也学到了许多东西。😃而且做出来的键盘也非常好用,不输于我的 collection 里的任何其他键盘!

2020 书单:白露

$
0
0

白露是夏天的尾巴,从三月开始的居家令一下子竟过去了六个月,美国的疫情控制就不多说了,抛开政府和媒体的各种嘴炮和烟雾弹,从曲线上来看是成功做到了“flatten the curve”,问题只在于 flatten 到最高点上了。不过现在整个世界其他许多地方的情况也不容乐观,美国这边“在家办公”的状态大概是至少要持续到明年暑假,日本强行推迟一年的奥运会估计也无法指望了。其实居家令对心理状态并没有太多影响,反倒是身体上——虽然有尝试在家做一些运动,但是总觉得体力、肌肉各方面都在减弱中,所以这个月开始尝试每周戴上口罩出门往稍远的距离走一走,活动一下腿部肌肉,结果立刻又来了山火,空气质量警报,又出不了门了。在家办公之后住在离公司近(房租高)的地方的理由就没有了,在加上各种天灾人祸,似乎有不少人暂时或永久地搬离湾区,这会不会是硅谷历史的转折点呢?

总之先回到这次的书单,缓冲一下凝重的气氛,我们从轻松愉快的书开始介绍,正好有一本很应景的书,N 之前力荐给我,说是关于“男人的浪漫”的书,讲了一位沙俄前贵族在莫斯科大酒店软禁三十年的故事。

A Gentleman in Moscow》的这个故事简介勾起了我浓浓的好奇心,如果我是一个作者,究竟要怎么编才能在这么扭曲的一个框架(时间跨度超长,但是空间跨度又超狭窄)下写出个完整的故事来,而且是一部长篇小说,而不是笑话集,所以不能像情景剧那样搞。事实上经过 COVID19 疫情这半年来的 shelter-in-place 的生活,让我觉得长期在一个小范围内生活可能并不是一件一定会把人逼疯的事(当然我们今天有四通八达的互联网,所以情况也很不一样),但是不可否认的是,这样的生活要变成让外人也觉得有意思的故事来讲似乎还是有些难度的,所以一开始大家积极组织的在线定期 sync 大家越来越没有什么新鲜事可以讲,最后干脆不去了。

【以下有剧透的内容用小字灰色显示】总之带着这样的好奇心去看了这本书,真是一点也没有失望,作者不仅讲了一个完整的不无聊的故事,并且讲得也非常棒,一些小伏笔和前后呼应让人时常不禁想会心一笑,文笔非常精彩,现在想起来,跟我小时候反复看《基督山伯爵》时候的观感有点似曾相识。也许不止观感,故事风格本身也类似吧,可以算作是西方的武侠小说?那种“锄强扶弱”的执念,或者是“浪迹天涯”的洒脱的感觉,也许也可以说成是理想主义,一种让人很羡慕的生活态度,但是你会觉得这种生活方式在现实生活中显然肯定是行不通的,需要更多的圆滑和变通,但是在小说中主角做到了,因为这是小说,你明白它因此透出不真实感,但是仍然羡慕那种浪漫主义情怀。(这本书里 Rostov 伯爵也有自己的执念,那就是他的作为 gentleman 的生活方式,他在莫斯科大酒店三十年,看外面的世界沧海桑田,有过动摇吗?自然有,甚至有尝试过自杀,但是那是苦于被困于酒店无法外出吗?也许不是,也许只是他自己内心的迷失。Rostov 的魅力大概就来源于他那种泰然处之的态度,在我看来,被“困”酒店可能从来都没有被他认真当成过一件烦恼,就好比是法院宣判你从此不准吃生西红柿,虽然确实有这么一条规则需要遵守并且也对生活带来了一些不便,但是并不是什么很值得困扰的事情。所以他自在地酒店生活了三十多年,最后又自在地走了。所以我觉得网上看到的跟《肖生克的救赎》的类比有点过于不恰当了,《肖》的主角经过长年的经营和计划,目的就是最终逃离;而 Rostov 的三十年显然不是为了最后的离开,而是在过自己的生活,并且在知道自己可能会碰到的情况的前提下,从法国回到俄罗斯本身也是他自己的选择,他找到了回来的理由于是选择了回来,然后选择了留下,最终找到离开的理由之后又选择了离开。)他是一个囚徒,但却有一颗最自由自在的心。

看到有人评论小说情节缺乏可信度,对苏联的描绘也比较不切实际,大概也不可厚非,毕竟作者是个土生土长的美国人。但是其实也没有必要要求武侠小说都要严格符合历史设定吧?😃

第二本轻松愉悦的书是《Buzz, Sting, Bite: Why We Need Insects》。这是一本最近出版的(2018)关于昆虫的书,作者是挪威的生物学教授。非常有趣的一本书,如果对昆虫这个我们人类平时知之甚少的世界有一点点兴趣的话,应该都会喜欢这本书的。昆虫王国不管是从存在地球上的时间(远比恐龙更早)、个体的数量甚至是种类的数量都远远超过哺乳动物。我时常觉得动物世界虽然种类繁多,但是其实仔细看一看会发现几乎都是换汤不换药,有点像灌水的学者,模型改一个小参数换个名字就再发一篇论文。比如各种哺乳动物还有禽类都是清一色的两只眼睛四条腿,即使是进化出能飞的翅膀这种高级的东西,也必须得借用原来的两个手的构造,而没有单独进化出和手独立的翅膀来。相比起来昆虫的多样性就多很多,在各种奇怪的地方都能长出眼睛来,当然昆虫严格定义上来讲也是“六条腿两对翅”,不过这也是人为定下来的界限,考虑所有节肢动物的话,多样性就更加眼花缭乱了。也许是在地球上存在的时间太久的缘故,昆虫们进化出了各种各样复杂的相生相克的系统,昆虫和昆虫、甚至昆虫和植物之间各种斗智斗勇,有非常复杂的共生关系,也有极其残酷的寄生现象,许多故事都令人瞠目结舌。很多我们不知道的或者没有注意到过的昆虫在与人类息息相关的生态系统当中都扮演了非常重要的作用,所以对昆虫的研究、了解和保护其实也是和人类未来发展息息相关的。

不过,与其说是一本关于昆虫的科普,更像是一本给小朋友看的昆虫画册,只是这是一本没有任何配图的“画册”,哈哈……感觉如果配上插图的话,整体质量又会上升很多,不过还好现在互联网非常发达,很多关键词直接搜索一下就能找到图片甚至视频,所以也不是问题。

第三本是《UNIX: A History and a Memoir》,这是K&R C的那个 R 写的关于 Unix 的一本小回忆录,封面印刷极其模糊,看起来像自家小作坊打印的,不过内容还不错。介绍了一下 Unix 的起源、发展和没落,也有一些 Unix 重要组件的基本介绍。不过与其说是一本历史书,更像是作者作为亲身经历整个过程之后怀旧所写下的回忆录,里面有不少趣闻轶事,仿佛能在字里行间看见作者回忆往事时的温暖的感觉。就好比你毕业之后若干年,再碰到学生时代的老朋友,互相聊起来当年很热血地大家一起做的一些事情时的兴奋感。

作为从 GNU 和 Linux 开始接触开源世界的一代,对 Unix 的印象更多的是刻板守旧的顽固派,最终被 Linux 抢占了所有的天下。从这个回忆录中可以看到实际情况其实并不是这样,在 Unix 起源的时段它是非常革命性的创新(Unix 作者因此得了图灵奖),不过 Unix 成也专利败也专利:早期在 Bell Lab 搞操作系统的那些人申请不下经费来买电脑(PDP-10 在当时的价格是 50 万美元),但是当时在公司申请专利是一件大事(平均每天都会有一个新专利),于是他们说服专利局买了一台 PDP-11,帮他们搞可以让写专利更顺畅的软件,同时获得晚上访问机器的权限,Unix 就是在这样的情况下被开发出来的。而后来 Unix 的没落我们都知道了,由于 Unix 极其高昂的 lisence fee(也不是 Unix 原作者们所能左右太多的事了),导致了各种冲突,比如 BSD 那边添加了 TCP/IP 的功能之后发布他们的 Unix 版本,结果吃上了漫长的官司,重写了 Unix 原来有的所有代码还不行,总之在各种混乱中 Linus 发了那封著名的邮件宣告了 Linux 的诞生。

后期关于 Bell Lab 本身在母公司分崩离析中没落的过程描述也有点让人伤感的,配合另外的关于贝尔实验室的历史的书(比如《The Idea Factory》)看会更有感触。曾经的贝尔实验室不再了,不过所幸现在在其他的一些 Industrial Lab 也还有比较宽松自由的研究环境,没有了单间的独立办公室,但多了 free food。

A Knight of the Seven Kingdoms》马丁抛开《冰与火之歌》的主线剧情写的一本发生在那之前一百年左右的关于高个邓肯的故事。最初看到它是在伦敦街头的一个书店里,里面的插图一下子吸引了我,不过徘徊很久我都没有买下它来,因为出门在外还是要行李轻便为主,回到美国之后很久才突然想起来买来看了。整本书其实只讲了三个事件,而邓肯的大陆环游之旅才刚刚开始,该不会是也准备写个六七本吧?就本书的内容来说,故事的有趣程度、人物和情节的复杂程度,剧情交织、宏达的世界观铺垫各方面都和正篇有一定差距。而且邓肯这一身沉重的正气和贯穿《冰与火》正篇的那种丧丧的洒脱感也不太兼容,也许马丁不太擅长写这种风格。不过这本书插图很多,几乎每隔两三页就有一个插图,画得很很美,简直是诚意满满。

最后《On Drawing Trees and Nature : A Classic Victorian Manual》是来自十九世纪的一本讲画画的老书,主要是讲怎么画树和风景,但是有些东西其实是很通用的,可以说是讲得很好又讲得很不好的一本书。这应该是我看过的文字最多的教画画的书,但是文字多本身并不是一个很大的问题,因为其实很多地方讲得很有道理非常有用,例子虽然不多但是也都非常戳到点子上(包括正例和反例)。最大的问题大概是书里用的文字和叙述方式,动辄一个段落就是一个句子,各种不必要的从句套从句,冗长的表达方式,几乎每一个句子都可以拿出来作为英语写作的反例。如果这还不够让你分分钟走神的话,书里在介绍具体技术细节的时候还不停穿插了各种针对年轻学徒的人生教育。不知道那个年代的文字是不是都是这个风格,总之如果能不走神不睡着并且看懂作者真正要说的事情的话,还是非常有内容的一本书。

然后介绍几本主题稍微严肃一点的书。《Alice and Bob Meet the Wall of Fire: The Biggest Ideas in Science from Quanta》(出版于 2018 年)是一本叫做Quanta的介绍前沿科学进展的杂志里的文章选集,按照主题组织起来,每一篇文章 2~4 页,主要关于物理学,也有关于生物学和 AI 方面的一些主题,有集中讲某个特定课题的最新进展,也有比较泛一点的整体介绍,不过都是偏重于非常基础的话题,比如如何理解时间,如何界定生命,神经网络的学习理论等等。看起来感觉确实跟读杂志差不多(毕竟就是杂志文集),在没有专业背景知识的情况下可以简单地了解一下某个领域或者方向的最新进展。当然看到自己比较熟悉的 AI 领域,就会觉得即使只是做浅显的介绍,也只是相对片面地讲到了一点点,所谓“scratch the surface”,不过最前沿的研究大概就是这样吧,方向五花八门散乱不成系统,也很难判断哪个才是最重要的,当然几页纸是讲不清楚了。最后一章还有一些关于科学本身的哲学讨论,特别是针对现在物理学里各种离真实世界或者“可证伪性”越来越远(比如弦论、平行宇宙)的理论,现在大家似乎开始因为理论在数学上的优雅性就倾向于接受,而不管是否有实验结果支撑。有人表示没有办法,现在实验可观测的范围太小了(见下图),现在无法证伪的说不定以后就可以了。还有人说我们太执着于“可证伪性”其实有点走火入魔了,可证伪性并不是检验是否是科学的唯一标准,比如占星学其实是可证伪的,但是谁也不会说它是科学。

The Shenzhen Experiment: The Story of China’s Instant City》最开始是在书店看到封面很漂亮买的,作者是建筑和城市规划的教授,我原本以为是从这两个方面来介绍深圳,况且深圳给人的印象就是经过完整的整体规划精心建设起来的城市,而不是像其他大多数城市那样有复杂的发展过程和各种历史遗留问题,所以整体规划中也许有很多学问和精彩的地方,没想到是完全不一样的书。事实上,这本书的主要目的似乎是消除刚才提到的这种对于深圳的”印象“。作者从许多不同的角度讲了深圳的历史,当地的村落,特区的设立过程中的各种风波等等,来表述一个观点就是:深圳并不(完全)是大家所认为的完全自顶向下规划,并且”凭空“建造出来的城市,深圳特区有今天的发展跟原住村民、地理位置、早期的基础建设等各种因素息息相关,这也是其他中国甚至是海外的以深圳为模板的经济特区不一定能复制它的成功的原因。和我平时看的书的类型都不太一样,不过还算是比较有意思的了,介绍深圳的历史进程中的许多事件和变革其实也侧面反映了整个中国的历史和变迁。

政治秩序的起源:从前人类时代到法国大革命》是我读过的第一本探讨政治秩序相关话题的书,感觉还蛮有趣的,就是有点长,例证太多反而有点 overwhelming 了。作者原本信仰的是自由民主制度是人类政治文明的最终形态,为此在 1992 年写过一本叫做《历史的终结与最后的人》的书(也收录在理想国译丛中)来论证为什么自由民主为什么最终会征服全世界。根据书里导读的说法,那之后二十年,国际形势显然没有按照福山的说法发展实现民主大同,美国在伊拉克和阿富汗强推民主举步维艰,世界上有些地方甚至有退民主化的情况发生,同时民主制度健全的国家又因为各种机构互相牵制导致在改革和改善向民众提供所需的基本服务等各方面步履蹒跚,而福山写这一本书也是对自己之前观点的一种反思,换句话说,这本书讨论的议题是“为什么自由民主尚未征服世界”。

我并没有看过之前那本《历史的终结》,单就本书来说,感觉看起来还是非常有意思的。这本书从史前文明开始讲一直讲到法国大革命为止,终结中国、印度、中东和欧洲等不同地方的国家制度形成和演变的过程,来阐述他对政治制度发展的三大基础(国家构建,法治,问责)的理论,并尝试解释不同地区政治制度发展过程中几个因素的异同所造成的发展差异,以及由此造成的在朝向未来民主化进程中可能出现的障碍和挑战。由于工业革命对全球的格局带来了巨大的改变,所以工业革命之后的事在另一本叫做《政治秩序与政治衰败:从工业革命到民主全球化》的书里叙述。

全书分为五个部分,第一部分介绍了国家制度形成之前的史前人类文明组织形式,之后三个部分分别介绍前面提到的政治制度发展的三大元素,最后是一个简短的展望和总结部分。

国家之前:对于人类社会的组织形式,作者的观点是并没有一个从独居到社会化群居的明显过程(比如农业发展导致定居,然后开始组织社会和社区之类的观点),认为人类一开始就是群居组织,具有社会性和互惠利他的天性(所谓“一开始”指追溯到猿类共同祖先吧,从现在猿类的组织形式而言,这个观点似乎也站得住脚)。

人类从没作为隔离的个体而存在;现代人类出现之前,社交和融入亲戚团体已成为人类行为的一部分。人类的社交性,不是因历史或文化而取得的,而是人类天生的。

当然完全的利他主义在大自然中可能不太容易生存,早期人类的组织形式是将利他主义限制在血缘家族体系之内。

国家建设:部落的形成也可以归因到家族元素:对共同祖先的崇拜逐渐发展出各种宗教,并以此来实现比家族更大的组织形式。而从部落到国家建立的主要动力来自于需要组织和动员更大规模的人来做小部落所不能完成的事——主要就是战争。当然部落和国家的主要区别并不是大小,作者采用马克斯·韦伯的现代国家的定义,其根本在于用官僚机构代替家族统治。

根据马克斯·韦伯的经典定义,现代官僚机构的特征包括:因功能而分的官职需有明确专长、在界定清晰的等级制度中设立各级官职、官员不得有独立的政治基础、官员必须遵守等级制度中的严格纪律、薪俸官职只是谋生的职业。

作者在这样的定义下开始介绍各个大陆上国家建设过程中如何尝试打破家族约束建立非人格化制度的漫长过程,有些地方很早就建立了完整的国家制度,而有些地方直到近代都还只有非常软弱的国家组织,这直接导致后来全球政治发展的不同格局。

书里关于国家建设的第一个例子是中国,在商、周时代中国还是以分封和地方贵族统治形式组织起来的结构,后来秦朝统一中国,在经过商鞅变法等各种改革,在全世界率先建立了现代化的国家体系(儒家思想势力力争对抗,还导致了焚书坑儒的事件),虽然在之后的两千年间在代表国家的皇权和代表家族势力的分封贵族之间的斗争以法家和儒家的斗争形式一直持续不断(比如汉代家族势力得到增长,到隋唐的时候随着科举制度的完善格局又反转过来),但很早建立起强大完整的国家体系这件事情对后来中国的政治体系发展有着深远的影响。作者这里将中国和印度做了对比,后者由于其独特的宗教思想、本土较少大型战争等各方面的原因从来没有发展出强势的国家体系。

国家建设应该是本书篇幅最大的一部分。出了亚洲之外,还介绍了中东、欧洲等各种地方为了对抗以亲戚关系为核心的家族制度所发展出来的各种奇怪法门。比如穆斯林的军事奴隶制,将从各地掳来的奴隶男孩进行洗脑教育,培育长大来组成帝国的军人和官员。这些来自远方的奴隶虽然出将入相,但是和当地人血缘隔离,并且军事奴隶制严格规定奴隶们的职位和家产不能世袭,这些措施有效地排除了部落势力、亲戚关系等对政治的影响。这些制度和中国的太监体系的作用实际上也有些类似,然而这些比较极端的体制并不是没有空子可以专,中国历史上出现过不少宦官乱权的情况,而军事奴隶制在后期也逐渐解体消亡。

而欧洲则主要靠基督教,比如宣扬财产要捐给教会而不是留给子孙以瓦解家族观念,而天主教整套体系实际上本身就是一个官僚机制:职位的任命并不是以亲戚关系为基础,并且还有诸如修士不允许结婚等规定。不过天主教从十一世纪开始逐渐独立于政治权力,开始实现政教分离,其产生的制衡限制了欧洲强有力的国家体系的发展,但另一方面则又促进了“法治”体系的形成。

法治:作者这里所谓的“法治”和我所理解的现代法治还是有相当大的差别的,应该算是一种更加广义的法治。其中心思想是国家,或者说皇帝的权力受到一套“规则”的限制,而这套规则的制定不能是统治者本身。这套规则一方面限制统治者让他不能为所欲为,另一方面又为统治者的身份提供合法性。典型的例子就是西方的基督教所提供的“规则”,以“君权神授”的方式为君主提供合法性,但同时也对君主权力进行限制和制约,例如西方君主很少有能像中国皇帝这样随便就对某个贵族进行抄家甚至满门抄斩株连九族之类的。如果制衡太强而中央政府太弱,就会导致国家无法有效地运营和组织,然后在国防等各方面逐渐薄弱。比如西班牙国王募集不到足够的资金来应付赤字,只好在1557、1560、1575、1596、1607、1627、1647、1652、1660和1662年宣布破产。这样的情况还导致当时欧洲大陆大量卖官和滥放国债等行为的出现,进一步削弱国家体制。

当然在中国这是一个完全相反的情况,因为一直没有发展出独立于国家的制衡势力,乃至于西方对中国封建时期的国家是如何运作的表示非常疑惑。一方面没有教皇之类的来宣布皇帝的合法性,人们似乎全都自动地承认皇帝的至高无上的权威,特别是每一朝的开朝皇帝而言,凭什么只是一介布衣出生的人,打下天下之后就自动变成”天子“了,而上一任皇帝极其继承人就自动又变成了叛逆了。感觉这大概跟中国传统思想观念里的”天命“、”失道“之类的概念有关吧(突然想到《十二国记》)。另一个疑惑是既然中国皇帝拥有至高无上的权力,但是为什么除了少数极其昏庸残暴的君主之外,大都没有对民众进行最大化地压榨?比如明朝由于征税极低甚至导致国家军费无法支付最终覆灭。

我想这些问题对于非常熟悉中国文化和历史的人来说可能会有其他不同的见解,福山在书里提到的解释主要来自于儒家的思想道德观念,儒家试图教育君主,缓和他的激情,使他深感对人民的责任。作者还提到让君主获得良好教育以建良好政府的想法和苏格拉底所描绘合理城邦不谋而合(记载于柏拉图的《理想国》)。当然这种“负责任”是这个负责制不是正式或程序上的,而是基于皇帝自己的道德观念。

强大的国家体制让中国在各种大型项目(比如早期的万里长城或者近现代的三峡水利工程)上能够高效迅速地调动资源,并且“法治”的缺失也使得国家在推行这些项目的过程中不会过多地受到某些既得利益团体的阻挠(比如早期欧洲的君主绝对没有权利因为要修一条运河而强行把某个领主的城堡迁到另一个地方去)。但是反过来一旦皇帝想要干坏事,基本上就是势不可挡,基于道德的“责任制”缺乏真正的制衡功能,导致中国历史上一直未能真正解决的“坏皇帝”问题。

问责:本书也翻译为“负责制”,负责制政府意味着,统治者相信自己应对治下的民众负责,应将民众利益置于自身利益之上。正式的负责制应当是程序上的:这些程序(通常在宪法中得到详细说明)允许社会公民因政府渎职、无能或滥权而将之完全取代。负责制政府首次出现于英国,不过由于对议会制度、“普通法”、“光荣革命”以及英国历史整体了解非常有限,这部分我看的过程中也没理得很清楚。

总结:从史前到法国大革命为止,其实占人口大部分的农民几乎一直没有在政治秩序的行程中扮演一个角色,所谓的法治和制衡之类的其实也都是国家、贵族和下层士绅之类的争斗,即使负责制中所谓的“人民”其定义也要在后面才慢慢得到扩展。而在工业革命之后整个世界的格局产生了巨大的变化,这些内容将会在第二本书中做具体的探讨。

我觉得书里所说的基于相互制衡的国家制度的设计其实就是一个连续的取舍,不同强度的制衡画出了从完全民主到完全专政这一个连续轴,很难说清楚哪一种制度是更优的。缺乏制衡的情况在“坏皇帝”出现时会造成巨大的破坏性,但是太强的制衡又会使得各个部门在不合作的情况下互相阻挠,让国家层面的困题的解决举步维艰(比如美国遥遥无期的高铁建设)。当然,如果有一个“好皇帝”,或者相互制衡的各部门能够实现目标一致齐心协力,那不管哪种制度都会变得乘风破浪。

总之我觉得抛开政治秩序和政治制度的议题,就把本书当做以特定的主题来探讨和总结贯穿各个大陆和各个时期的历史书来看,也已经是相当有意思的了。

最后给一个比较好玩的 Quote:

下一个出现的是来自东北的女真部落(满族的老祖宗),它击溃辽国,并把契丹赶到中亚。(他们向西逃得很远,竟然碰上俄罗斯人。自此,后者把所有中国人都叫作契丹斯基 Kitaiskiy。)

用 Google Translate 朗读了一下,真的是契丹斯基,哈哈哈哈哈太好笑了。

三案始末》是一本关于明末梃击、红丸、移宫三案的书,书很薄,但是为了厘清三大案的来龙去脉,包括明朝当时朝纲、制度各方面的状况和问题从朱元璋一直讲到了崇祯,把前因后果分析得很清楚,对当时宫廷和朝政的做出了生动的描绘。朱元璋为了巩固皇权,取消了宰相,代之以阁臣制度(宰相具有执行权,而阁臣按照规矩是听皇帝吩咐,照他的意见拟具出办法,等被批准后,才能据以拟旨来颁行),并且内外各部门间形成多种相互牵制的规例。这在保障帝权方面确实起到了积极的左右,虽然出现了各种专权的大臣,但是几乎都没有达到像汉朝那样能随意掌握皇帝生、杀、立、废的情况。这种皇帝权术的精髓是要让底下的大臣互相斗的思想似乎在各种影视作品中也经常见到。当然,互相牵制反过来的效果是群臣不停地互相争斗,对文化、经济各方面都起到了很坏的作用,一切日趋腐化,终于导致覆亡。

当时的这种分权和互相牵制的制度,虽然完全是基于儒家道德观念和帝权为基础制定出来的,但是也让人觉得和现代法治下的分权思想也有一些相似之处吧。好处也都是没法被谁专权独大,坏处当然也是互相牵制的情况下如果各个部门不齐心,基本上就很难办成大事,因为总是在不停地扯皮。而且从书中的描述看,当时的皇帝本人也完全受到各种(道德)条款的约束,完全不是“专权”和“为所欲为”的形象,想要任命自己宠幸的人,也不是随便下一道圣旨就可以的,得通过各种迂回的套路,而且哪里做错事(比如不符合正统道德规矩)还会被大臣上书骂,而且当时文官似乎以直言上书为荣,即使皇帝能大怒惩罚几个言官,通常只会招致更多言辞激烈的批评,最后还得认怂。

不过另一方面看当时朝廷整日争论不停的各种话题,包括本书主题的三案,大都是跟各种礼法、道德、规矩之类相关的争论,完全看不到任何关于科技、税收、水利、建设之类的比较具体实际的内容和事项的讨论,让人不禁觉得这样的社会制度能持续几千年也有些不可思议。但也许当时的社会就是如此吧?在科技革命还没有发展到彻底改变我们的生活之前,也许儒家道德思想亦或是各种宗教相关的思想,才是组织和维系庞大社会体系的粘合剂?

Turing’s Cathedral: The Origins of the Digital Universe》是一本介绍通用计算机的起源的书。相比以往看到的一些计算机史话之类的读物,这本书的特点应该是作者做了大量的研究和考证,并不是抓住一些吸引眼球的点和一些八卦轶事大做文章,而是试图完整地还原当时的整个历史背景和过程,当然这样导致的结果有好有坏。好的是感觉这本书的内容是比较真实可信的,特别是如果要做历史研究之类的应该是不错的参考资料吧,坏的就是内容有点太多了,而且读起来少了许多跌宕起伏。

The new computer was assigned two problems: how to destroy life as we know it, and how to create life of unknown forms.

书虽然以图灵为题,但是全书最核心的人物还是冯诺依曼。冯诺依曼原本是搞纯数学的并且是“the last representative of the great mathematicians”(据说他不太能分得清聪明人和笨人,因为两者再他看来都比较笨),但是后来对建造计算机感兴趣,开始集合一大帮工程师在普林斯顿高等研究院 (IAS) 开始建造计算机。当然整个故事并不是如此一帆风顺,虽然那个时候各种原型计算机已经出现,也许现代计算机架构被设计出来也是迟早的事,但是如果不是冯诺依曼的大力推进,也许历史会延后很多年呢。冯诺依曼作为生在匈牙利的犹太人,对纳粹德国的痛恨让他对于美国军方的核武器研究之类的项目都很热心,计算机项目得到很好的支持一方面也是因为它的一个目的是用于氢弹制造相关的计算。另一方面,普林斯顿高等研究院作为一个纯“高雅科学”(数学、历史之类的)的研究院,对于“低俗”的工程师们异常鄙视,一直各种怄气刁难,但是有冯诺依曼这个大数学家罩着他们又不敢乱来,等到后来冯诺依曼不在了那些搞 pure science 的人就迫不及待地把工程师们都赶走了。

Influenza: The Hundred Year Hunt to Cure the Deadliest Disease in History》介绍了 1918 年流感大爆发事件和从那之后人类在应对流感方面说做出的各种努力。目前估计 1918 年死于流感大爆发的人数在五千万到一亿之间(印度就有近两千万),相比起来似乎今天的新冠病毒还远远不够可怕,不过当时不止医疗卫生条件都极其落后,而且正值一战,各种大规模士兵聚集的营地简直是流感绝好的温床,而且由于世界大战动员起来的跨各大洲的大范围人员流动也在推波助澜,虽然当时世界范围的交通没有现在这样发达,但是流感病毒还是很快席卷全球,感染了当时世界人口的三分之一。

转眼一百年过去了,我们的医疗卫生条件都得到大幅改善,流感似乎也变得不那么可怕了,但实际上我们到今天为止依然没有特别有效的对付流感的办法。客观来讲,今天的医疗手段和当年比起来确实是天上地下,现在我们能够完整解读病毒的 DNA 序列,也知道了病毒侵入人类免疫系统的机制,另一方面,书里做了很多文献调查发现,一百年前一个主要治疗方式似乎还是放血,还有其他一些诸如吸入有毒烟尘之类的神奇疗法。相比起来,今天的医疗系统至少有三大法宝:1. 抗生素;2. 疫苗;3. 重症监护室。1. 抗生素虽然对于病毒没有任何效果,但是当年流感大爆发时很多死亡病例都是由于二次细菌感染造成的,对于这种情况抗生素就很有效果。2. 流感疫苗现在至少在美国是每年都会呼吁大家打的,可是为什么每年都要打?其实从侧面上也说明了我们现有的疫苗效果不太行,根据书里的调查,流感疫苗效果最好的时候也没有达到 50% 有效,而且有些年可能只有不到 20% 有效,而且是应该要全民注射流感疫苗这件事在不同的国家规定也不同,一直非常有争议;3. 生命维持系统基本上就是辅助或者代替衰竭的器官维持基本生命机制,给自己的免疫系统争取时间,实际上仔细一看和前两大法宝如出一辙:经过了一百年,我们能做的也就是帮我们自己的免疫系统打个掩护,剩下的工作还是得靠它们。

书里还介绍了一些其他相关的事情,比如 1918 之后流感一直以一些不那么严重的变种形式存在,而且也有过几次小规模的爆发,人们一直希望能够直接研究当年的流感病毒,以预防将来再一次大爆发,这里有一个叫 Johan Hultin 的人他博士论文的课题是去阿拉斯加冻土层挖掘当年死于流感的人的尸体用来提取病毒,虽然挖出来了比较保存完整的样本,但是最终没有能成功提取病毒,于是他就没拿到博士学位😂不过五十年后有别的研究机构又在试图寻找当年的病毒,他又去了一趟阿拉斯加,这次挖出的样本终于协助找到并重新激活了当年的流感病毒……

除了疫苗,病毒学、传染病学各方面的努力之外,还有其他一些统计和数据分析方面的工作:现在的流感一方面听起来好像就跟感冒差不太,另一方面好像又偶尔会听到说每年都因为流感死掉很多人,实际上现在我们对于流感病毒每年感染人数等各种情况的数据掌握是极其不准确的。主要原因在于我们对于流感没有啥特效的治疗方法,所以除了是症状极其严重的情况,否则即使采样去做流感病毒检测,不管测试出来是阴性还是阳性,基本上都是打发病人回去多喝水多休息,吃点退烧药之类的,靠免疫系统扛就行了,所以通常都不会多花额外的时间和钱去做测试(据说医护人员在决定是否要做额外测试时的一个衡量标准是:测试结果是否会改变医疗方式)所以基本上不太能区分流感、感冒和其他很多症状比较类似的病症。而且各地数据管理也没有统一和规范,本身汇报这个数据到相关机构(比如 CDC)也没有相关人员负责,特别是在流感季节医院繁忙的情况大家就更顾不上了。总之到头来我们虽然是在信息时代,但是也许主要还是危言耸听的假新闻在泛滥吧。中间 Google 有做过一次尝试,就是根据人们搜索流感症状相关的条目的频率来 track 流感爆发的情况,一开始感觉是一个 revolution,不过经过几年的不断改进之后,似乎一直都没有办法能够更精确到真正能派上用场,最后也就(毫无悬念地,跟 G 家的众多其他产品一样)惨遭关闭了。

另外书里还提到了美国有个叫做 Strategic National Stockpile 的东西,就是为了应对可能的疫情大爆发(最开始似乎还有防止细菌战之类的情况)而在许多个秘密储备中心囤积的口罩、医护用具、药品、疫苗之类的。不知道在新冠爆发的时候有没有起到作用,因为似乎各个州一开始也都在各种呼吁口罩短缺之类的。讲到这里,关于那些药品和疫苗会进入这个 stockpile 实际上也是超大宗的生意,由此牵连的各种药物和疫苗的有效程度调查和背后各种颇具争议的利益关系之类的,也是颇让人心寒。

总之是一本还不错的书,但是似乎也没有到特别惊艳的程度,中规中矩,有点像看了一篇加长版的 Wikipedia 的感觉。

人类的群星闪耀时》包含了对人类历史上一些重大事件所做的一些特写,一开始我觉得有点像在看命题作文选集,因为每篇文章前面有一段文字简要介绍了当时的历史背景,然后是洋洋洒洒的镜头特写,看到后来才发现原来那个背景介绍是译者加的,感觉有点不合适,或者至少应该放在每篇文末。总体来说茨威格的文笔是很好的,但是我觉得看起来反而有一种 uncanny valley 的不适感,因为既不像历史小说那样完全以写故事为目的,有自己的中心人物和架构,构建起整个世界观;但又不像真实的历史记录那样只做客观陈述。结果说得好听一点就是作者文笔非凡,随便找一个着眼点就能惟妙惟肖地讲一段故事出来,但说得难听一点有种随便一个线索就能天花乱坠地编一个好像是自己亲眼所见的故事出来的感觉😂

20世纪思想史 : 从弗洛伊德到互联网》我并没有看完。“一部百科全书式的作品”——感觉推荐语真是写得贴切,看了几十页,看到很多不同领域的名人的名字,他们的故事和思想,前后也没啥特别的联系和总结,就暂时弃了,感觉像在读装订成册的 wikipedia 文章打包合集。内容也许很详实,但读起来也太无聊了。

变形记》是我很小的时候就有所耳闻的一本书了,听说是充满讽刺意味,我一直以为“变形”是一种比喻的手法,结果没想到真是变形啊。非常荒诞的故事,虽然我本身并没有太多共鸣,但是描写还挺入骨的感觉。ps: 一开始看那个叶廷芳主编的卡夫卡全集里的版本,真是惊掉下巴,翻译得准确不准确我不知道,但是中文不通顺的问题也太严重了。

世界から猫が消えたなら》是一本比较典型的日式温情小说,亲情友情爱情还有和宠物的感情都顾到了,可以说是温情满满,对我来说可能剂量有点太大了。不过我觉得可能这本书最大的弱点还是在于许多剧情太容易预测了(结合标题,前几页“我”说自己要死了,一下子就剧透了很多东西),在可预测的前提下再做情绪强烈的感情描写就非常 tricky 了,因为很容易就会让读者觉得被套路了(想象一下追求者做出各种感人举动的时候你发现整个一套是为了让你感动而安排好的戏码)从而产生比较抵触的情绪。另外就是故事本身是一个极其不“合理”的幻想设定,就这样就挺好,但是作者又加了一些额外的哲学探讨,有些地方似乎在 justify 这些设定,感觉有点多此一举。比如谈及为什么人类要给每一种花命名,突然就引申到人类擅自给分秒年月命名,还有冷暖美丑都是由人类擅自命名而存在。还有关于爱,时间,自由之类的讨论,感觉都不太自然,不太像作者擅长的探讨,感觉去掉完全不影响故事发展,而且说不定会让行文更流畅一些。

The Drunkard’s Walk: How Randomness Rules Our Lives》看标题原来以为是更偏向于心理学和认知科学方面的书,看了发现主要还是讲概率与统计怎样一步一步地发展起来的历史和科普,当然中间也有涉及到一点点心理学方面的介绍,探讨了为什么很多事情(股市行情、CEO 业绩、职业运动员连胜之类的)明明很大程度上是由固有的随机性产生的“假规律”,但是人们还是会不自觉地去相信自己发现的“规律”并以此来指导自己的行动,一方面的原因是人类不喜欢情况 out of control 的感觉(如果事情是随机发生的,那就不在控制范围了,但是如果是有规律和因果的,那么就有可能在可控范围内),另外就是人类由于 confirmation bias 之类的原因在有了一个想法之后会选择性地忽略负面的例证而只看到支持性的例证。还有一个比较有趣的实验是,在描述了一个行事风格很像积极女权主义者的人之后,让大家在一些陈述中选择概率最大的一条,结果“她是一个积极从事女权运动的银行出纳”比“她是一个银行出纳”的投票要高很多,虽然逻辑上前者的概率是不可能比后者高的。

比较励志的结论就是:由于成功事件发生运气因素非常大(一个特定的人中彩票的概率很小,但是一百万人里某一个人中彩票的概率会非常大),所以如果也想成为成功人士的话,有一条很直接的路就是坚持不懈——在不断尝试中除了能积累经验之外,还会逐渐积累你好运气的概率值。

至于概率与统计的发展史这一方面来讲,应该还算不错的书了,从古希腊时期就开始讲起,早期主要是赌博为动机进行的这一方面的研究,有许多有趣的轶事,不过非常科普向,所以涉及到的议题都只讲到比较浅显为止就是了。

Things to Make and Do in the Fourth Dimension: A Mathematician’s Journey Through Narcissistic Numbers, Optimal Dating Algorithms, at Least Two Kinds of Infinity, and More》这本书我完完全全被标题党了,全书大概只有一章多一点的内容是讲关于四维空间的,而且这种本身 intuition 难以想象的东西靠文字和一点配图讲出来果然也还是同样难以想象。书的剩余部分都是讲各种喜闻乐见的数学中“有趣”的内容(也恰是数学中我最不感兴趣的部分),什么数字游戏啊、莫比乌斯环、无穷、图论、拓扑、逻辑的基本介绍之类的。总之大部分内容我都略过了,也许书本身还不错吧(?),但如果之前有看到副标题并且看过目录的话,是肯定不会买它的了。

发现我自己是喜欢比较有完整逻辑体系的书,对于零散的“有趣内容小合集”这种完全没有兴趣,或者至少要求会非常高。仔细想一下意识到这其实不仅限于数学书。比如我不喜欢看的书的一个典型子类就是短篇小说集,因为就是一些互不相连的小故事,在比如前面提到的《20世纪思想史 : 从弗洛伊德到互联网》,虽然内容丰富但是由于只是简单按照时间顺序列举出来,看不出任何线索、联系或者框架,所以也直接被我归类为不好看的类型。反过来我很喜欢看的书大部分都是有完整体系,有主线贯穿也有前后呼应的类型。

Viewing all 62 articles
Browse latest View live