欢迎来到 Free Mind ,这是由 pluskid 所维护的 blog ,主要记录一些机器学习、程序设计以及各种技术和非技术的相关内容。如非特别指明,本站的文章遵循 Attribution-ShareAlike Creative Commons 协议。更多文章索引请浏览 Archive, Categories, 和 Tags。 部分文章前后有一定的关联,也可在 Series 中找到索引。早期的博客文章请参见 Free Mind 2009~2012Free Mind 2007~2009。博客内容仅代表个人观点,与雇主无关。

2020 天天年年

当我们一边走路一边纪念
但一不小心 又把一天走成一年
陪时光荡秋千 每受一次伤学一点
很久以后 再去怀念

在家隔离的日子仿佛扭曲了时间,居家令刚开始的时候我还给每天吃的东西拍照,觉得算一个有趣的记录,一个月之后放弃了纪录,因为发现这个状态似乎不会在短时间内结束,否则我的相册会只剩下食物的照片了。再然后就一下子到了九个月之后。这一年仿佛过得很快,但是又很慢——各种大事件一件接一件,俨然一副末世景象,也许下面这张来自 unsplash 的图(由于手机自动曝光调整拍出来和眼睛看到的差别很大,所以我自己没有拍到比较好的照片)是一个很形象的写照。这是今年 9 月 9 日三番街头的场景,似乎是由于山火烟尘造成的空气污染,那几天整个湾区都笼罩在这种橙黄色的天空之下,仿佛是走进了 Blade Runner 2049 的电影现场。

2020 书单:冬至

今年年底一件“大事”无疑是 Hyrule Warrior - Age of Clamity 的发布,拿到游戏的时候恰好是感恩节假期,然后基本上整个假期都用来打游戏了。原本我对无双系列的“切菜类”游戏有些偏见,但是这个支持双人配合的模式意外地好玩,并且虽然情节发展上算不上特别出彩,但是 The Legend of Zelda: Breath of the Wild (BotW) 本身也不是情节取胜的,而且这一作诚意满满地给 BotW 的粉丝投了各种福利,不仅重现了大灾厄之前的地图,而且 BotW 里简单带过的四大英杰也变成有血有肉的角色,连年轻 Impa 之类的众多角色也都可以操作了。下图是来自网络的 Impa 召唤蛤蟆的动作。

事实上,碰巧在七月独立日假期的时候偶然提起,我就开始和 N 一起玩 BotW 了,我这是二周目,N 是第一次玩,到后面刚好和 Hyrule Warrior 接起来。嗯……总之先回到本文的主题,做这么长的铺垫主要是要说明一下下半年的书单明显变短的原因。😅

Flashing Bootloader with a J-Link Programmer

今天介绍一下我第一次 Flash bootloader 的波折经历,我最近才知道原来 Programmer 还有另一个意思,是指可以用来将 bootloader 或者其他程序写入一个目标设备的机器。我这次使用的是 Segger 的 J-Link Programmer,用来给一个装载 E73 nRF52840 芯片模块的 nrfMicro 板子写入 Bootloader。整个过程其实断断续续跨越了挺长一个时间段,因为我碰到了许多的问题,不过最后学到了很多东西。

nrfMicro 上的元件和一个耳机的尺寸对比。

首先 Bootloader 是什么,为什么要自己 Flash Bootloader 呢?简单来说 Bootloader 是 CPU 通电之后首先运行的代码。在 x86 世界里我们熟知的 BIOS 就是一个 Bootloader,它会做一些基本检查和初始化,并跳转到操作系统的代码段继续执行。BIOS 一个很常用的功能是我们可以设置它从不同的地方(比如光驱或者 U 盘)引导操作系统,这在以前需要重装系统的时候经常会用到。玩过 Linux/Windows 双系统的同学肯定都知道 GRUB,它在这里担当第二级 bootloader 的角色,在 BIOS 之后运行,并且可以根据用户的选择跳转并启动不同的操作系统。不过我们今天打交道的是嵌入式芯片里的 Bootloader,虽然概念大同小异,但是也有一些各自独特的地方,比如很多嵌入式项目都是没有一个操作系统的。AdaFruit 有一篇很不错的文章介绍了嵌入式的 Bootloader。

My First Keyboard PCB Design

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

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

Split Keypoard and OLED Customization

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

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

记一次有意义的熬夜

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

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

Down the Rabbit Hole of Tiny Keyboards

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

2020 书单:白露

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

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

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

今天介绍一篇最近看到的论文,两位作者分别是华盛顿大学 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”的模型来。

Work From Home Remote Connection Kit

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