第六代 Intel NUC 安装体验

两年前购入了第一台 Intel NUC,一种迷你型的台式机,作为家庭娱乐用途。当初只考虑到看本地影片的需求,而没想到网络视频。这台机器可以勉强播放本地的 1080p 视频,但加上了网络传输之后就力不从心了,主要表现在它只能要么下载视频,要么播放视频,于是每看个几分钟就需要停下来等缓冲,体验很不好。

于是我又买了一台新的,NUC6i5SYK。这台机器带了最新一代的 Core i5-6260U CPU,性能肯定富裕了。

具体的配置如下。基本上算是一步到位,可以看很多很多年的视频了。

  • Intel® NUC6i5SYK
  • Kingston Technology HyperX Impact 8G * 2
  • Samsung 950 PRO 256G

硬件的安装很简单,就不详细说明了。底板拆下来之后就可以看到内存和硬盘的插槽,有防呆设计只有一种安装方式,不会搞错。如下图,上面是 M2 硬盘槽,底部是两条内存槽。

硬件组装完毕之后,开始装软件。和上次一样,继续装 Windows。可以在微软官网下载到 ISO 文件,解压到一个可以启动的 U 盘中就可以准备安装了。在安装之前,还需要准备另外一个 U 盘。

使用另一个 U 盘的原因,通俗一点来说,是这一届的开发人员不行 -_-。根据 BIOS 的版本不同,这个 NUC 有一定机率认不出 M2 接口上的设备,也就是硬盘。在安装系统之前升级到最新的 BIOS,需要把新的 BIOS 文件复制到 U 盘上,然后使用 U 盘启动。我一开始也以为这是一个简单的文件复制操作,但实际上并不然。开机按 F7 进入 BIOS 升级模式之后,NUC 会把 U 盘的引导信息覆盖掉,然后重启再进行 BIOS 升级,于是之前制作 Windows 启动工具就没有用了。

当然你可以先升级 BIOS,再用同一个 U 盘制作 Windows 启动盘。如果资源足够丰富,用两个 U 盘可以加快安装速度。

另外,Windows 10 还有一个小小的问题,它认不出这个 NUC 的无线网卡。如果打算装完系统直接使用无线网络的话,U 盘里还需要备一个网卡驱动程序。网卡驱动和 BIOS 文件都可以在 Intel 官网下载到,这里就不详述了。

把上面提到的东西都准备好之后,安装 Windows 还是很方便的,而且 SSD 速度非常快,大概 10 分钟就可以看到桌面了。

具体的评测过段时间再发。

通过 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:

收工

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

Google 对新品牌的迷恋

品牌效应,有时候比产品的质量本身更重要。品牌常常给人带来一些心理暗示,比如 iPhone 总是高大上的,而安卓就是烂大街的地摊货,尽管 iPhone 也有低端产品,安卓也有旗舰。当一个牌子做坍了之后,更换一个新品牌可能会有意想不到的改观。比如微软在 2009 年的时候把 Live 品牌强行换成了 Bing,虽然换汤不换药,但市场占有率从最初的不到 10% 到现在稳稳站上 20%,Bing 的品牌效应功不可没。

有成功的案例,自然也有失败的案例,比如 Google 在社交领域的数次尝试,Orkut、Google Buzz、Google Friend Connect、Google Wave 和最终的 Google Plus,没有一个成功的。而 Google 在聊天工具方面,也有着同样的困境。

最初的一款产品叫 Google Talk,简称 GTalk。一开始的想法很宏大,兼容 XMPP 协议,可以和其它的聊天工具互通。做了几年之后发现没什么起色,于是扔掉了 XMPP 协议,并且改名为 Hangouts,开始自己和自己玩。

Hangouts 做得很大,它兼并了 Google Voice 可以像普通手机一样打电话,在 Android 手机上还成为了默认的短信应用,更不用说在 Google+ 和 Gmail 中的集成了。几乎任何地方任何时候,想用 Hangouts 的时候就可以用到。

不知哪根筋抽住了,Google 后来又推出一个短信应用叫作“Messenger”,这是一个 Android 手机独享的应用,也可以发短信,打电话,群聊 -_- 在手机上和 Hangouts 除了图标不同之外几乎一模一样。不用说 Android 的用户了,就连公司员工,看到这个消息的时候也是一脸懵逼。

事情还没有结束,上周的 Google I/O 大会上,通信部门的老板(对,我们还成立了一个专门的通信部门)激动地宣布,我们又做了两款应用,Allo 和 Duo,一款用来发短信,一款用来打电话……好吧,Google 自家的聊天应用快占到一屏了。

如一开始所说,不同的品牌可以带来不同的客户群。比如 QQ 和微信,在 QQ 越来越臃肿,自己都不堪重负地出了 QQ 精简版的时候,腾讯果断抛出了微信。最初也有很多人不理解,但事后被证明微信是一个成功的典范。究其原因,微信最初主打的精简,速度快(当然现在也不精简了,大概可以改名为巨信),并且当时还有大量的 MSN 用户不屑与非主流为伍,不肯入 QQ 的门,微信正是看准了这部分用户群,站稳了立足之地。

但是 Hangouts 不一样,虽然它也是一个大而全的应用,但终究没有跳出聊天工具的范畴,你不能用 Hangouts 购物,也不能用它来看朋友的时间线。如果这些基本功能都要细分,那我们的手机上至少得有几百个应用,才能满足日常所需。

现在好了,Google 有了四个聊天应用(算上新出的 Space 的话有五个),正好占满了手机屏幕最下面的快速启动栏,视觉效果很震撼,真要用的时候还得想半天,到底开哪一个。

当然对于墙内的用户来说,这些都不是个事,这些应用根本不存在。就连 Hangouts 现在都没在中国区上架,更别说其它的应用了。眼不见为净,你们爱怎么玩就怎么玩吧,我们继续用微信。

启用 CloudFlare 作为主 DNS 服务器

之前写过一系列文章介绍自己搭建 DNS 服务器的方法,我自己也这么用了一段时间。效果很好,DNS 解析一直都没出什么问题。但是这个自建的 DNS 服务器却成了最容易受攻击的一环。

博客的 HTTP 服务器躲在了 Google 的负载均衡服务后面,几乎不会被攻击。而 DNS 服务器却没有这一层保护。不知道为何,对于 53 端口的负载平均我一直都没有成功配置出来。于是就一直在使用裸机作为 DNS 服务器。所幸的是,一直以来也没有受到过攻击。

实际上我一直在等 Google 的 Cloud DNS 提供自定义域名的功能,但是这个新功能死活不开放给公众使用。我也没什么办法,纠结了一会之后,就转投 CloudFlare 了。

虽然 CloudFlare 是一个 CDN 提供商,但它也可以配置成只做 DNS 解析,而不用于 CDN 的方式。CloudFlare 提供的 DNS 服务器使用了 AnyCast 技术,看上去没有被墙,可以正常解析。并且它家也提供了 DNSSEC 机制,可以从一定程度上降低 DNS 劫持的风险。

从今天起新的 DNS 设置已完全生效,本博客可以全面抵挡任何类型的攻击。要练手的同学可以试一下。

Google Cloud CDN

Google 终于推出了自己的 CDN 服务了。去年 12 月份发布了 Alpha 版本,只接受申请试用;而这个月正式升级为 Beta,大伙都可以用了。于是我就又做了一回小白鼠。

之前一直在用 KeyCDN,但是 KeyCDN 的一个弱点是它依然使用 CNAME 来转发流量,而 CNAME 很容易被屏蔽。而 Google 的 CDN 用的是 AnyCast,只需要解析一次 DNS 即可访问,这可比 CNAME 要强壮多了。

除此之外,CDN 的抓取走的是 Google 的内部网络。这个网络有多快呢?据 Google 博客介绍,单机的网速可以达到 10Gb/s 以上。这样的 CDN 性能要远好于任何外部的 CDN。

于是我毫不犹豫地切换了过来。有兴趣的朋友可以对本站测个速。

吐槽一下阿里巴巴

我一直的对阿里系的东西不太感冒,除了支付宝一直在用之外(在国内的时候还会用用淘宝和天猫),其它的服务几乎没什么涉及。没什么原因,只是这家公司看上去很土。

阿里的员工都使用“花名”

大概是因为马云喜欢武侠小说,阿里的员工每人都要取一个“花名”,比如马云本人的花名是“风清扬”。每个新员工在入职的时候就要取好花名,且不能和已有的花名重复。一开始还好,毕竟各类武侠小说一大堆,随便就能挑一个像样的。而现在就不行了,阿里集团已经拥有了超过 35000 名员工,好听的名字早就没了。花名之难取,以至于坊间已经有了帮忙取花名的在线服务。

如果说取一个花名只是为了找人方便,那无可厚非。很多公司都有类似的设定,比如在 Google 这个叫做 LDAP,就是一个不重复的 ID,用于邮箱和各种内部服务的识别。比如我的公司邮箱是 ,就是直接用了我的名字,如果愿意的话也可以改成 abc 或者 xyz,只要没有人用过。

但是阿里却不一样,马云带头使用了一个小说里的名字,而且这个小说人物还是一个大侠。我不是那么喜欢武侠小说,但是也可以想象一个风清扬的粉丝进了阿里之后,看到一个长着奇形怪状脸的风清扬,大概会几天都吃不下饭吧。

阿里的产品名都很土

阿里巴巴旗下除了淘宝和支付宝之外,几乎就没有哪个产品的名字是恰当的。阿里巴巴这个名字本身和贸易并没有直接关系,反而像是骗钱的(详见《阿里巴巴与四十大盗》)。当然亚马逊和贸易也没什么关系,公司名字都是随便起的,这个就不提了。

然后阿里旗下的其它产品,槽点就多了。比如天猫,简直就是 TMall (Taobao Mall) 的无脑汉化版。还有“阿里妈妈”,不进到主页完全想象不到这会是一个什么产品。其它的小产品暂且不说(比如“咻一咻”),最近一个值得吐槽的是“钉钉”。这个名字取得真是前无古人后无来者。想象一下阿里客服的电话回访:

客服:请问,您在使用 ding ding 吗?
我:额,现在没有在用,但是每天都会用的。
客服:那每天使用几次呢?
我:大概一两个小时一次吧。
客服:每次用多少时间呢?
我:大概几十秒钟,有时候晚上一下子就要用几小时。
客服:啊?您的业务真繁忙。
我:也不是啦,只是回归正常生活而已。

不理解的同学可以搜索一下“丁丁”。

先说这么多,现在是一个看脸的年代,阿里就是一个看上去很土的公司。

如何战胜 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 没有对应模仿棋的特殊策略,按正常情况来选位置,那会相当于自己左右互搏,实际上也会产生一盘不错的棋。

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

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