Linux 启动时不加载罗技无线驱动

罗技对于 Linux 的支持一直都不太好,官网上从来都没有 Linux 的驱动下载。通常来说,基础设备的驱动,比如键盘鼠标等,在操作系统中是自带的,不需要额外安装。但 Linux 这个奇葩有时候会有一些例外。

Linux 有一个全盘加密的特性,就是硬盘的所有内容是加密的,在启动时需要输一个密码才可以解开然后正常启动。输入密码的界面如下。

于是就有一个先有鸡还是先有蛋的问题:是先加载驱动,还是先问用户要密码。而 Linux 的选择是先问用户索要密码。于是在某一次重启之后,我的机器就卡住了。因为 Linux 问我要密码,输入密码要用到键盘,而 Linux 还没有加载键盘驱动。搜索了一下,这一问题大约是从 Linux 内核 3.2 开始的,影响很多发行版,至少有 Ubuntu 和 Arch Linux。

简单来说,原因就是 Linux 在这个界面之前没有加载罗技的无线驱动。而最直接的解决方案显而易见,更换有线键鼠。

显然我们不愿意为了一个傻 X 的设计而更换自己的硬件。在诅咒开发人员脑残的同时,我也找了一下不花钱的解决方案。

Linux 中有一个专为罗技设计的模块,称为 hid-logitech-hidpp,只要加载了这一模块,就可以在上述的界面中使用无线键盘了。

在 Ubuntu 中,修改 /etc/initramfs-tools/modules,新增一行写入上面的模块名,然后用下面的命名更新生成启动程序:

在 Arch Linux 中,编辑文件 /etc/mkinitcpio.conf,添加一行 MODULES="hid-logitech-hidpp",然后使用下面的命名重做启动程序:

生成完毕之后,重启即可。

在 Debian 中启用 TCP BBR 算法

博客恢复之后第一件事就是升级了一下主机。现在最新的 Linux 内核是 4.9,并且带了一个新的 TCP 算法,称为 BBR (Bottleneck Bandwidth and Round-trip)。

BBR 算法由 Google 提出,原先主要用于 Google 内部网络的速度提升,现在 Google 把它提交到了 Linux 内核,所有人都可以使用了。从 Google 的报告来看,这一新的算法可以明显降低网络延迟。Youtube 全球的延迟比之前的 CUBIC 算法下降了 50% 以上。从大众的讨论来看,这一新的算法主要被用于不可告人的活动。当然,由于我用的是 Google 的主机,现在如果又用了 Google 算法,是不是会更快呢?

开启的方法如下:

1. 先升级到最新的内核(适用于 64 位的 Debian Jessie):

2. 开启 BBR

打开 /etc/sysctl.conf文件,在文件末尾添加两行:

其中第一行 default_qdisc指的是默认的 TCP 队列算法,fq 是 Google 推荐的算法,更适用于 BBR。第二行则是开启 BBR 算法。

3. 重启并验证

直接重启主机是可以的。如果不想重启的话,可以使用以下命令来加载新的配置:

然后使用下面的命令来验证 BBR 已生效:

结果会显示 BBR 加一串数字,说明 BBR 算法已启动。

4. 效果

由于我的博客已经很快了(笑),一时半会看不出什么效果。不过启用了之后心理感觉还是不错的。

iPhone 的低电量模式

iOS 9 中新增了一个功能,叫做“低电量模式”,即在电量较低的时候,可以开启此模式以延长待机时间。

iPhone 在电量下降到 20% 的时候会提示开启低电量模式。当然,其它时候想开也是可以手动开启的。

开启之后,iPhone 会停用一些功能,比如 Siri 和一些视觉效果;并减少后台刷新的频率。后台刷新并非完全停止,所以一些消息提醒什么的,还是会出来的,只是延迟长一点。

低电量模式可以有效延长待机时间,在玩游戏的时候或是充电的时候,不妨开启此模式。虽然效果比不上飞行模式,但却是一个非常好的平衡。

最后有一个小提示,iPhone 6s 等支持 3D Touch 的手机中,使用 3D Touch 按住“设置”的图标,会出来电池选项的菜单,进而可以快速开启低电量模式。

通过 Varnish 使 WordPress 静态化

WordPress 常常被人诟病说加载速度慢,主要原因是每一次打开页面都会查询数据库,即使每次查询的结果都是一样的。WordPress 原生不支持缓存,但可以通过插件支持,比如 Super Cache。我用过一段时间 Super Cache,它本身是一个很好的插件,但协作性不强。它只能加载 WordPress 原生的内容,而我需要的是缓存经过 PageSpeed 优化过的内容,从而达到完全静态化的效果。

曾经有一段时间 KeyCDN 的表现不理想,而 Google CDN 还没有开放,我就自己搭了几台缓存服务器,来缓解源站的压力。这几台缓存服务器是通过 Varnish 实现的。当然用 Nginx 也可以,但是 Nginx 的缓存失效(Purge)功能是收费的,而且部分平台上还是自己编译。于是我选了 Varnish。

Varnish 可以做到的事情

  • 根据 URL(或其它参数)的不同来选择不同的缓存策略;
  • 修改 HTTP 请求和响应的头部内容;
  • 设定缓存时间,时间到了自动失效;
  • 可以通过一个特殊的 HTTP 请求来让一个(或一些)缓存立即失效;

好,接下来就开始配置服务器了。

安装 Varnish

以 Debian 为例,最新的 Varnish 版本是 4.0:

配置 Varnish

先创建一个新的配置文件,比如 /etc/varnish/leonax.vcl,内容如下。其中比较重要的就是三部分:vcl_recv、vcl_hash、vcl_backend_response,可以根据自己的实际情况来调整。必要的注释已经附在相应的代码旁边了。

然后来检查一下配置文件写得对不对。如果配置正确,这段命令会输出一大段处理过的代码;如果有问题,则会输出具体的错误信息。

接着,在 /etc/varnish/default.vcl 文件中,可以找到如下一段内容:

需要把 -f 的值修改为刚才创建的配置文件地址。

重启 Varnish

配置 WordPress

WordPress 的页面需要刷新的情况,无非有三种:新文章、新评论和配置修改。配置的更改一般频繁,我的做法是重新配置之后,手动重启一遍 Varnish,这样最干净。而新评论的情况,刚才在 Varnish 的配置文件中已经处理了。于是我们现在来处理一下新文章的情况。

以下代码需要写在 WordPress 中,比如 functions.php:

收工

做完以上这些,你的站点就可以达到像本站一些的加载速度啦。

如何战胜 AlphaGo?

李世乭今日再输一场,比分 0:3 负于 AlphaGo,与百万奖金无缘了。而 AlphaGo 今天的表现异常完美,开局 45 分钟左右,李世乭已经招架不住。赛后英文解说 Michael Redmond 更是直言,AlphaGo 很有可能成为继吴清源之后又一位开创新格局的历史性角色。

虽然我不懂围棋,但可以从计算机的角度来介绍一下 AlphaGo 有哪些弱点。看了一些赛后评论,发现多数都是从围棋的角度来讲棋,而忽视了计算机的东西。所谓“知己知彼”,了解 AlphaGo 是怎么工作的,才更有可能击败它。

先说说 AlphaGo 的工作原理。已经有一些文章详细地介绍过了,这里就简单说一下。AlphaGo 决策的时候有两个步骤,一是选出下一步棋所有可能的位置(由 Policy Network 做出),二是在这些可能的位置里,精算一个最优的(由 Value Network 做出)。新闻中提到的 AlphaGo 每天几千万盘棋,都是在训练 Policy Network,就是培养它尽可能找全所有价值高的点。而 Value Network 似乎是在比赛中实时计算的,不需要训练。

Value Network 的工作原理和自然人无异,就是一步一步推演,看看之后几步的胜负情况。这一步骤在讲棋的时候经常用到,嘉宾和主持人都会用棋子摆一摆,并揣测棋手下一步的动向。Value Network 也是这样做的,只是它算得特别快而已。我看了一些现场解说,一般都是算出之后的五到十步棋左右,越到后面,计算的复杂度越高。这对人和电脑都是一样的。

影响 Value Network 精确程度的一个重要因素是时间,比如给它五秒钟,它可以算到五步之后,给它十秒钟,它可以算七步。我重看了一下前两场比赛,刚开场的时候,AlphaGo 大约是每 60 - 80 秒下一步棋;而到了中盘的时候,决策时间会上升到两分钟以上。这是因为刚开场的时候,每个位置的重要性都差不多,算了几步之后发现各个位置都不错,就随便选一个即可。而到了中盘,一个位置可能要算上几十步才能确定它的重要性,于是耗时就上去了。

想要打击 AlphaGo,就必须尽量不给它时间做计算。让它计算的步数减小,提高犯错的可能性。要做到这一点,只有一个办法,增加 Policy Network 选出来的位置的数量。假设一个位置它要算 10 秒钟,那么 10 个并列的位置,它就要算 100 秒,这样就大大地增加了时间上的消耗。时间耗尽之后进行读秒阶段,这个阶段中,AlphaGo 大约 30 秒左右就会给出计算结果,估计是在程序中强制设定了的。很明显,30 秒和 2 分钟的计算相比,30 秒算得不清楚,更容易犯错。李世乭在第二场成功地把 AlphaGo 拖进了读秒阶段,但依然没有把握住,有点可惜。当然主要原因是当时李世乭自己也开始读秒了。

由于 AlphaGo 并不会在局部战场鏖战很久,即它没有局部战场的概念,每次选位置都会从整个盘面入手。虽然这样有很好的大局观,但也损失了不少计算性能。如果李世乭能够尽可能多地制造出重要性差不多的位置,可以极大地增加 AlphaGo 的计算量。而 AlphaGo 的应对方式,要么是增加计算时间,要么是在没算完的时候直接给出一个临时最优解,无论哪种方式,都对李世乭有利。

另外网络上有人提到下模仿棋。虽然模仿棋在围棋界不是什么光彩的事情,但对 AlphaGo 确实有效。所谓的模仿棋就是利用棋盘的对称性,对方在哪里落子,自己就在对称地方落子。对人类而言,模仿棋是有破解招数的(详情略);而 AlphaGo 是否有理解对方在下模仿棋,这一点还不清楚,需要我们的“高级软件测试工程师”来验证一下(笑)。如果 AlphaGo 没有对应模仿棋的特殊策略,按正常情况来选位置,那会相当于自己左右互搏,实际上也会产生一盘不错的棋。

模仿棋还有另一个好处,就是李世乭所消耗的时间不多。在前期节约一些时间,就可以把更多的时间放在中盘拉锯上,就更有可能获得胜利。由田渊栋的赛后分析来看,第一局中盘李世乭曾经一度扳了回来。所以有更多的时间放在中盘,李世乭更有希望赢得比赛。

无论如何,这场比赛都会被载入史册。虽然已经连输三场,还希望李世乭可以放下包袱,贡献出两场更为精彩的对局。

两年胜过一百年

AlphaGo 在昨天和今天两场比赛中以较大优势战胜李世乭,基本已经宣告了现代围棋百年基业的崩塌。围棋会成为国际象棋之后,另一个人类被计算机程序完全战胜的棋类项目。在战胜了棋类中最复杂的围棋之后,计算机算法也将统治所有的棋类游戏。

现代围棋从二十世纪初在日本兴起,由吴清源等宗师级人物开创,发展到现在已有一百多年,经历了数个时代。而 AlphaGo 从投入使用到战胜李世乭不超过两年。有消息说在 2014 年 4 月 AlphaGo 在弈城对战平台上注册了帐号用于实战练习,起始等级为业余五段。短短两年之内,实力从业余五段上升到可以和顶尖职业选手叫板,这样快速的进步令众多职业选手汗颜。

我对围棋没有那么了解,不过我可以从计算机的角度来讲解一下大家对 AlphaGo 的一些误区。

假设李世乭五番棋不敌 AlphaGo,中国的职业高手能否和 AlphaGo 一战?

如果计算机程序两年时间可以做到人类一百年才能达到的水平,那么全面超越人类也就是几个月的事情。1997 年深蓝在国际象棋上战胜世界冠军,到 2006 年人类最后一次战胜计算机,程序用了十年的时间赢下了国际象棋。而这一次,或许 AlphaGo 会用更短的时候全面超越人类。人类高手想要挑战 AlphaGo 还得趁早。

为什么 AlphaGo 依然会下出一些“臭棋”?

据 DeepMind 的开发人员表示,在第一盘棋中,AlphaGo 全程认为自己处于优势状态。当然程序可能有 bug,但更重要的一点是,人类认为某些下法不好,是真的不好么?人类下围棋,一天不过一两盘,顶尖高手两三天才能下一盘棋。以这种速度,在一两百年之内积攒出了各种理论、定式。而 AlphaGo 一天则可以自己和自己对战上千盘棋,对于一些围棋理论,显然 AlphaGo 会有更全面的看法。这些臭棋经过仔细研究,说不定会被证明是一步好棋。

不用正常围棋的路数,是否能迷惑 AlphaGo?

在人与人对战时,如果对方下了一步看不懂的棋,选手肯定会猜测这是一步好棋,还是故意晃点我。而 AlphaGo 还不具备这种能力,对于无论是有意还是无意的落子,AlphaGo 都会以精确地计算来应对。换句话说,AlphaGo 不会轻敌。

天网是否已经来临?

如果 AlphaGo 故意输掉了一盘,那才是令人恐惧的。如果你对计算机行业不了解,可以去搜索一下“图灵测试”。能通过图灵测试的程序才具有“思维”的能力,而其它的程序都只是按照人类的指令运行而已。目前还没有可以通过图灵测试的计算机程序。

收官阶段李世乭是否会有优势?

众多场外评论说收官阶段的“打劫”会对计算机程序造成一定的影响。我猜这一说法的原因是之前多数程序都处理不好这一步骤。至于 AlphaGo 懂不懂“打劫”的要领,暂时还无人可知,所有公开的对战中,AlphaGo 都没有走到“打劫”这一步就已经赢了。

从计算机算法的角度来说,收官阶段的计算肯定比中盘来得简单。举个例子,玩过”数独“的朋友都知道,在一个数独局面中,如果局面是全空的,很简单,随便填数字即可;如果局面差不多都满了,只有少数几个空,那也很简单,按着规律填。数独最难的局面,就是半满的局面,每个空都有多种可能,也有很多限制,要推演出每一种可能,需要大量的时间。围棋也一样,最需要计算的是中盘阶段。过了中盘之后,每多下一个子,计算复杂度呈指数级下降,计算机会觉得轻松了很多。即使中盘战和,在收官阶段,计算机也会具有巨大的优势。这也是为什么 AlphaGo 的多数比赛在中盘过后就显示出不可逆转的优势。

Google 内部对这场比赛怎么看?

很明显众多码农都很兴奋,有人甚至要求 DeepMind 团队在比赛时内部直播 AlphaGo 的决策过程,以增加观赏性。不过这一要求被 DeepMind 拒绝了,大概是不想泄露任何可能影响比赛进程的信息。

Pause: 让你的压力“暂停”一下

Pause 是一个用于减压的应用,它使用了一种非常简洁的交互方式,在短时间内帮助你把心情平静下来。

Pause 是由《纪念碑谷》的制作公司 Ustwo 的所推出的另一款艺术向的应用。它的操作方式很简单:只需要一只手指按在屏幕上。而达到的效果却非常惊人,可以让你放松心情、缓解压力。这个神奇的功效已经过苏塞克斯大学人机交互实验室的验证,并且其中 90% 的参与者表示感觉更加轻松。

我下载下来体验了一下,大致的操作流程是这样的:

  1. 进入应用之前,最好先戴上耳机,据说在耳机的环境下,放松效果更好;
  2. 一进入应用,音乐响起,界面提示用手指点到屏幕上的一个点;
  3. 点上去之后,手指周围会出现在一个移动的圆圈,界面提示手指跟着圆圈慢慢移动;
  4. 当这个应用觉得你慢慢放松下来之后,界面提示闭上眼睛,手指随便往哪移都可以;
  5. 接下去就是放松的过程,手指不能离开屏幕,一旦离开,这个“疗程”就结束了;
  6. 整个过程持续 10 分钟(可以配置)。

我只用了一两次,心情的确会平静下来。当然,十分钟内什么事也不做也会平静下来。个人感觉这个应用的作用是,让你有那么一点点事可以做,但又不复杂,让你专注于一个事情的同时进行放松。如果单纯听音乐十分钟,那么注意力可能会转移动其它地方去,反而达不到放松的效果。

如果你对此有兴趣,不妨点击下面的链接玩一玩。由于 Pause 目前还只有 iOS 版,Android 用户只能耐心等待了。