说说参观的微软数据中心

上个月有机会参观了位于华盛顿州东部的微软数据中心。最直观的感受就是,先进的现代数据中心,已经不是一直停留在我脑海中那个“机房”的样子了;外貌改观的背后,是管理效率的巨大提升。

单是数据中心选址所考量的因素,就已经让我这个外行人不明觉厉。
前一段时间天津滨海新区发生爆炸,有新闻报道天津滨海爆炸致国家超算天津中心受损 “天河一号”关机。看到这样的新闻,让人不禁质疑超算中心这样重要的基础设施选址怎么如此草率。云计算时代的数据中心对国计民生的影响远超过超级计算机,无法想象未来的某一天,一个数据中心被突然炸掉会带来什么后果。从安全到角度来说,数据中心最好人烟稀少远离闹市,这样不太容易被意外所波及。可是又不能太远,否则距离带来的网络延迟会影响其应用。我参观的这个数据中心就位于这样恰到好处的位置:华盛顿州中东部,距离西北地区人口稠密的西雅图波特兰地区三四个小时车程,当地人口稀少周围一片荒漠。除了恰到好处的位置,当地还位于哥伦比亚河附近,阳光充足,常年干旱少雨,一派荒漠景象;哥伦比亚河从荒漠中穿过,水量充沛,造就了沿河的沙漠绿洲,也提供来充足的廉价电力。Google map的这张照片很好的反应了当地自然状况。
对数据中心来说,固定资产投资之外最大的成本就是电力支出,廉价的电力显然很有吸引力。据说数据中心的电价是1-2美分一度,实在是太便宜了,我们家的电价可是要1毛多的。除此以外,当地政府还提供税收方面的优惠政策。
如果你觉得考虑到上述种种因素来选址就算煞费苦心,那就错了。通常的数据中心都会考虑这些(我国政府领导拍脑袋订下来的除外)。要成为一个现代化的数据中心,还要走得更远。

大家都知道降低电力成本是核心,那么问题来了:除了找电价便宜的地方,我们还能做什么来降低电力成本呢?数据中心的电力消耗主要分成两部分,一部分是主机消耗的,比如主板,CPU,内存,硬盘的耗电;另一部分是制冷的耗电,比如风扇,空调。衡量数据中心效率有一个指标叫能效比,就是数据中心总耗电与主机耗电的比值。比如这个数据中心的耗能比是1.07,就意味着每用1.07度电,有1度都被主机消耗了,只有0.07度用于制冷。
在复旦读书的时候,有一年室友找了份兼职去逸夫楼的高性能计算中心值班,我陪着一起去了几次。当时印象特别深刻,机房里一排排机柜整齐摆放在,值班室也在大厅里,用玻璃墙和机柜隔开。机房里的空调永远是恒温25度,特别舒服,可惜有特别大多轰鸣声,无数的风扇在转。空调和风扇一起保证着机房的正常运行。
虽然人类已经想了各种办法来提高空调和风扇的制冷效率,但是想想就知道这样的数据中心效率不会太高。要保证室内的恒温,制冷的目标不是主机而是整个室内空间,这其实是巨大的浪费。另外,为什么一定要让压缩机拼命运行来保证恒温呢,与其把热空气温度降下来,不如直接把热空气排走换来冷空气。抽气扇可比压缩机的效率高得多。这个数据中心正是实践了这样的想法:首先不修建实体建筑的“机房”,所有的主机就存放走一个个集装箱一样的空间里边,集装箱直接暴露在外界。这不但节省了没必要的建筑成本,也不必煞费苦心为一个巨大的建筑物保持恒温。然后,在每个“集装箱”内部,没有空调也没有风扇,集装箱把干燥的空气从一侧吸进来,混合冷水来增加空气到湿度,然后把混合后的空气向整排的主机吹去;空气穿过主机带走热量,再被另一侧的抽气扇抽出来排到集装箱外面。冷空气混合了水汽之后比热容增加,吸热能力很好;而被主机加热的空气不需要再花大力气制冷,直接排出去就是了。

这是数据中心的卫星图,实际样子请自行脑补。
Screen Shot 2015-09-13 at 12.02.26 AM
为了满足这样的设计要求,数据中心选在了气候干燥年均日照时间很长的荒漠地带。由于气候干燥,抽气扇吸进来的空气湿度极低,特别适合混合冷水产生湿冷空气。如果是在潮湿闷热的热带地区肯定是不行的,吸进来的空气已经湿度极大温度很高了,指望它继续吸热带走主机产生的热量是不太容易了。

除了能源效率现代化的数据中心还需要极高的运营效率。
这里管理着几十万台主机,即使每台主机的可靠性都在99%以上,平均下来每天出现百十台的故障机还是很平常的事儿。如果每台故障机都要立即修复的话,那雇佣上百人每天在各个机架上爬上爬下拆机器装机器恐怕也忙不过来。所以数据中心通常都有专门设计的软件系统来应对硬件故障。当某台主机发生故障时,可以很快的把应用程序迁移到另外的主机上继续运行,这样维修人员就不必立即去修复每一台故障机。另一方面,维修人员会监测各个机架,挑选故障机数量最多的机架做修复。一次修一批比东修一台西修一台要划算的多。这样的设计在简化了安保的设计。由于主机全部都在一个个狭小的集装箱内,而非与进进出出的工作人员共处同一建筑物内,因此就免除了一道道安全门扫描仪的设置,只要用密码锁把集装箱门锁好再装上监控摄像头就好了,不用担心去数据中心送外卖的顺便溜进机房偷数据啦。其实即使真的溜进机房偷走了一块硬盘也没什么大不了的,现在的软件系统都是分布式的文件系统,一块单独的硬盘上只是存储了某些文件的某些部分而已,如果不知道这些部分是如何组合在一起的,根本就没有用。
由于采用了这些设计,整个数据中心只有二三十个人负责日常运行,降低了人力成本。

每次看到工程师对不断追求完美,对事物做近乎极致的例子,敬仰之情就有如滔滔江水。
其实我参观的这个数据中心最多也只是代表了当代的先进技术而已,离黑科技还差得远。据说IT巨头们已经开始考虑更疯狂多想法,比如把数据中心建在海里用海水制冷,或者修在两极地区等等。期待这些黑科技为整个行业带来更大的变革。

看到这样的数据中心,我想应该没有理由去质疑云计算的未来。几十万台机器,只用二三十个人管理,能源利用效率极高,而电费又只有一两美分;如果把这几十万台机器交给每个大大小小大企业自己去维护,又需要花多少成本和人力?两者孰优孰劣不言自明。只是凡事都不会一蹴而就,新事物到来的时候总会有各种质疑的声音。

在Apache+Django下启用客户端证书认证

这两天在折腾这个问题,google中英文的介绍都只提到一部分,所以决定写一篇blog讲一下整个配置过程,全当做笔记。

SSL连接(HTTPS)是普遍使用的安全的HTTP连接方式,它通过证书认证的方式来保证访问安全。通常的方式是:在服务器端设置一张证书,证书由具有公信力的数字证书认证机构(CA)办法给网站对应的域名;用户访问网站的时候浏览器首先会检查证书,既检查证书的合法性(签发机构可靠),也检查证书的对象和网站域名是否匹配(比如证书发给www.foo.com但是用的证书是发给www.bar.com的,那证书很可能是偷来的^^)。如果检查出错,浏览器会询问用户是否继续访问,即使继续访问也会在浏览器地址栏显示一个警告。举个例子,12306购票网站的证书就是它们自己生成的,不是CA颁发的,所以访问12306就会看到
Screen Shot 2015-07-15 at 5.24.03 PM

除了认证访问站点的合法性,这张证书还会用来对传输的数据进行加密,这样攻击者就没法通过网络抓包的方式轻易得到用户的账户密码等敏感信息。--虽然12306到证书是自己签的,仍然可以用来加密传输数据。

除了上述服务器端证书认证以外,有时候还会有额外的一步称为客户端证书认证。如果某个站点或某些URL并不希望所有的人访问,可以在建立连接的时候要求客户端也提供证书,只有证书在白名单之列的客户才可以建立连接。这种认证方法在前端并不常用,因为网站给每个注册用户发一张证书很困难,用户保存这张证书也很麻烦。但是在后端比较常用,比如网站的web服务器和后台其他服务器之间进行数据通信的时候。

现在就假设在Apache上运行了一个Django的虚拟站点,这个站点提供一些Rest API,我们只希望拥有证书的客户端能够调用这些Rest API,不对外开放。
设置过程分为以下几步:

1. 生成证书
对于服务器端证书,通常需要从CA去申请,申请的证书和域名是绑定的。如果服务器只是内部使用,并不暴露在Internet下供大家访问,也可以自己生成。客户端证书可以自己生成,并只颁发给信任的客户端使用。因此这里略去向CA申请的过程,只讲怎么自己生成:

a.生成一个host key

b.用这个host key创建一个证书申请

c.由前两步得到的key和证书申请产生一张证书

二三步也可以合成一个命令

用同样的方法可以生成另一张客户端证书。如果情况再稍微复杂一点,你有多个客户并且需要一一区分它们,那需要给每个客户单独生成一张证书。这时通常的做法是:先生成一张自己的CA证书(就是自己做自己的权威机构),然后再用这张CA证书分别生成多张不同的客户端证书。关于这一点,我看到一篇很好的reference,可以参考。

2. 在Apache上配置使用SSL
先贴出一个完整的虚拟站点配置文件

a.服务器端SSL
打开服务器端SSL主要由这几行配置指定:

b.客户端SSL
客户端SSL认证主要由这几行配置指定:

其中SSLVerifyDepth的含义是在证书链中检查的深度。证书是层层签发的,最顶层是CA,因为这里使用的证书都是直接由CA签发,因此是1就可以了。

c.设置Apache把证书信息传给Django应用程序
通常除了在Apache上设置,我们很可能还需要在Django应用程序里根据证书信息做更细致多处理。例如根据证书签名判断访问来自哪个客户,每个客户可能会有不同的权限,看到不同的东西。有两种方案:一个是通过SSLOptions +StdEnvVars的设置把证书信息放进环境变量,再在Apache调用wsgi.py的时候传递过去。这个方案在网上看到有人提到,但是我不知道怎么在wsgi.py中修改request object;如果通过全局变量或者环境变量的方法传递信息,那只能处理单个证书的情形,因为全局变量只能hold一份信息;另一个方案是通过RequestHeader的设置把证书信息加到HTTP request header中去。这个方案经过尝试很好用,示例如下:
在view收到post请求的时候,通过检查存放在request.META中的header信息就可以知道证书是颁发给谁的,之后就可以针对不同的人做不同的响应。

3. 浏览器访问
当Apache,Django设置好之后,就可以通过浏览器进行访问了。首先需要在客户端的电脑上安装客户端证书,然后在访问的时候浏览器会弹出窗口,这时选择对应的证书就可以打开网站了。例如,在Chrome中,选择settings-show advanced settings就可以看到
Screen Shot 2015-07-15 at 6.43.55 PM
然后在访问的时候选择刚才安装的证书
Screen Shot 2015-07-15 at 6.44.57 PM

安装证书的时候需要提供同时包含公钥和私钥的文件,pfx或者p12格式。之前我们提到生成证书的过程生成的是独立的公钥和私钥文件。可以通过以下命令做转换

4.Python访问需要客户端证书认证的Rest API
Python跟http相关的模块比较混乱, urllib2, httplib2, requests, pycurl都可以用来访问RestAPI,但是使用起来的复杂程度各不相同。有兴趣可以参考这篇blog,它对这几个模块访问RestAPI的方式做了详细的比较。总之,结论是requests用起来很方面。
requests天然提供对客户端证书认证的支持,直接这发送请求到时候带上证书的路径作为参数就可以:

上面的cert参数可以是一个指向pem格式证书的字符串,也可以是一个tuple,分别包含cert和key的路径。
requests的一个缺点是它只支持pem格式的证书(不包含密码),但是通常我们得到的都是倒出时包含密码的证书,比如pfx。把pem放在机器里看起来不是很安全。Github上这个open issue也有讨论。
可以通过以下命令把pfx转成pem格式:

这就是end-to-end全过程,大功告成。

失控读后感

最近终于有耐心把厚厚一本失控读完了。大概两年前就买来来,而更早之前就听说来这本神作;无奈分量太足,每读一章又都觉得有很多思考,所以一直没有读下去。
我承认,即使认真读完一遍我脑海里仍然没有一个关于这本书的清晰脉络,但是即便只记得某些章节某些发人深思的闪光点,也已经收获很多了。随便写写现在还记得的:

蜂巢思维
这恐怕是网上传说最多的部分了,因为前几章就讲到了:) 确实是很神奇的现象,单个蜜蜂只有简单的行为,但是一群蜜蜂靠着简单的交互和共同的行动就构成来复杂的,看起来更加智能的蜂巢。
其实人类社会也一样,尤其是现今社会分工越来越细多时代,每个人多能力似乎都很渺小,但是当你把人类作为整体来看的话,就要为其能力所震撼了。我虽然已经做了很多年程序员,也参与过windows的开发,但是仍然为操作系统这样的人类巨作感到惊奇;现在无论是哪个程序员个人,也无法说清楚操作系统的每个细节了,而缺来任何一个细节操作系统都是不完整对;神奇的是,一堆人的协作之下产生了一个任何个人都无法想象的巨大工程。
在物联网如火如荼的今天,我们可以想象一下,任何一个单个的物体被联入网络并没有什么了不起,但是当无数的物体被接入,并且物体和物体之间可以进行交流(哪怕是很简单大交流)的时候,谁敢说没有更伟大多东西“涌现”出来呢。

构造一个生态系统
KK说,即使我们知道了构成一个生态系统的全部元素,也未必就能重新构造它,因为各个元素加入整个生态系统的时机和顺序很重要,另有一些元素在现在的生态系统中已经消失了,但是当时如果没有它,也就不可能有现在的生态系统。很神奇是吗。 时机和顺序很重要,所以不要妄图简单的解构别人再模仿,因为你很可能不在何时的时机,也可能并不了解各个要素的先来后到。

蝴蝶效应
蝴蝶效应因为一部电影已经尽人皆知了,在混沌的条件下,初始条件的一点微小改变也会引起结果的巨大不同。我理解的混沌,就是高维空间,有多个因素共同决定最终结果的情形。

达尔文进化和拉马克进化
我对这两个词从初中时候就记忆犹新来,当时就在想达尔文理论真的对吗,一堆遗传基因就靠随机变换真的能一步步从单细胞进化成高智能生物吗。生物书上提到了拉马克进化,但是直接说它是错的,因为如果它对了就意味着“意识可以决定物质”,这是有违马克思主义理论基础的。KK提到了两种进化的共同作用,拉马克进化靠着生物的后天学习,用进废退,一代代把优势积累下去,而细胞内的某种化学作用又会把这种后天学习的能力转化为遗传基因的形式固定下来。在拉马克进化的理论下,人类一代代不懈努力的学习研究才有意义,否则每天吃饱了等着基因变异就好了,再努力也是白努力。其实意识也就是某一些相互作用的物质而已,不存在意识决定物质。

计算机上的进化
KK写书的年代大概是人工智能如火如荼的年代,所以才会提到很多人通过计算机的方法来模拟生物进化,试图通过计算机的演算获得智能。后来人工智能消沉了很久,最近这些年随着计算能力的提高又逐渐火了起来。
以我个人的理解,我不相信通过计算机模拟一些DNA的随机变异和重组就能获得智能,这显然是痴人说梦。人类的智能绝不仅仅是靠DNA来决定的,DNA最多保证了人类有获得智能的物质基础;而且,其实DNA是这些物质基础的哈希;即使能够通过计算机的演算让DNA获得进化,但是仍然无法从哈希值推断其原本的样子。
近些年人工智能的从新火起来,主要是因为计算机的硬件能力有了极大的提高,在此基础上人们有能力实现一些二三十年前不敢想象的算法。但是这些算法跟智能还差的很远,或者说,可能这条路就是错误的,南辕北辙。我们试图用计算机产生一种能够自我学习自我进化的能力来为人类服务,但是具有这种能力的东西一旦产生就不受控制,又怎么可能在实验室产生呢。
我更愿意去设想,新的智能是在无数的设备接入了互联网,互相之间有着紧密沟通之后莫名其妙“涌现”出来的。其实细想一下,自从有来互联网以后,人类作为生物的能力又大大的进化了,当更多的人和物被连进来之后,或许会有更加神奇的事情发生。

共同进化,协同控制
进化的过程不是单个物种的进化,而是整个生态环境中各个物种一起的进化。在未来,这个生态环境并不仅仅是生物的,还包括机器的。人和机器也会相互协同,一起进化。或许人类只是碳基生物的终点已经硅基生物的起点而已,进化不会到了人类这一步就停止。

热力学第二定律和进化
热力学第二定律让人对宇宙的终极感到一丝悲哀,难道生命从氨基酸,单细胞开始,历经万千载,最终的最终,只能和整个宇宙一起归于一片死一般的寂静中去么
KK提到了生命的第二法则:上升流,它与热力学第二定律相反,自已开始就在无序中构建有序,并自我复制自我学习自我壮大,直到充满整个宇宙。
那么,到底谁才是对的呢

PS:先想到这么多。很有意思的一本书,发人深省,尤其是这互联网,物联网如火如荼的今天。

烤茄子失败了

今天照着http://www.meishij.net/zuofa/depukaoxiangshipuzhikaoqiezi.html做了一道烤茄子,遭遇了厨艺进步道路上的重大挫折。烤了20分钟出来的茄子仍然半生不熟,而且完全没有软嫩入味的感觉。按着步骤用蒜泥,酱油,香油调了调味汁涂抹在茄子上,现在回想起来应该是油太少的缘故,所以烤出来茄子干瘪瘪的不水嫩;勉强吃了两口就扔了。严重打击自信,特此记录。

海外用户观看视频的正确姿势

刚才看到友人前几天写的一篇博文:海外用户观看美剧的正确姿势,突然就想哈哈大笑。原来大家都在想一样的事情。

先借一张图来说一下这个思路:在东亚找一台云主机下载,然后上传到GoogleDrive,当然也可以是OneDrive或者AzureStorage, whatever。然后在家里通过GoogleDrive/OneDrive同步,或者链接到AzureStorage访问。
downloadx800_jpg_pagespeed_ce_OUNfE-4oh7

友人在瑞士,据说当地法律并不限制个人用户下载盗版内容,所以这个解决方案没什么问题;可是放到其他大多数资本主义国家可能就不太行了。因为上述操作实际上仍然涉嫌通过云存储上传/下载盗版内容。当然上传的行为发生在东亚某地,所以可能没有法律限制,但是下载行为却真实发生在腐朽的资本主义境内。

而我最近考虑的另一个类似思路是:在东亚某主机上把下载的内容文件分割成很多碎片,每个碎片都是一段没实际意义的比特流,然后再把各个碎片分布上传到不同的网络存储上。这样不存在从任何地方上传或者下载盗版内容的操作,因为上传和下载的都只是一段比特流而已。只有自己知道具体的算法来分割和组合这些碎片。只有这个算法本身是属于盗版的,不过获得这个算法的过程发生于东亚的某台云主机上。
其实跟p2p软件的思路很像:p2p软件的每段比特流下载都不是完整意义的盗版。可是p2p在传播比特流的同时传播了组合比特流的算法,所以是非法的。
有版权方面的专家提供点专业意见么

ThinkPad X1的可怕体验

从06年买第一台笔记本开始,就逐渐成为了笔记本的重度用户,家里一直都没有台式机了。在移动终端日渐发达的今天,如果在家大多数时候仍然习惯选择使用笔记本。

我本来也不是数码产品的重度粉丝,没什么好说的。无奈前两周从公司领了一台X1 Carbon Gen2回来,在度过了不适应到两周之后就突然挂掉了,要换主板至今还在等零件——顿时对ThinkPad失望到极点。

X1之前先是用了很久的X220 Tablet,除了觉得Tablet这个特性基本无用之外,还是非常喜欢的。传统的ThinkPad键盘,传统的小红点和鼠标左右键都特别顺手;质量也没的说,特别皮实耐用。然后自家买了一台X230来用,性能质量也都没有问题,可惜键盘换成了巧克力式的,手感略差。这台230是机械硬盘,用起来一度觉得很崩溃,直到有一天换了SSD之后才发现它也可以如此流畅。

然后就是X1了,拿到手的第一天就很崩溃:

  • 小红点手感变差。看上去很劣质的样子,似乎随便摇几下就会掉下来。机械式的左右键取消了,变成一块儿更大面积的触控板——我原来就是直接把触控板禁用的。
  • 大小写切换键CapsLock不见了,那个位置被两个个头很小的Home/End取代。想要输入大写字母有两个方法:按Shift+字母组合——我知道有人很习惯这个,可是我一点也不喜欢;或者快速双击Shift键,这时候Shift键上会有一个小LED灯亮起,表示切换到大写——凭什么要我双击。
  • 跟随而来的另一个不便就是Home/End被挪到了CapsLock到位置,我写code的时候经常用的两个键就这样突然从右手位变到了左手位,还缩小了很多。于是错误的情况经常发生。
  • 最上面一排功能键F1-F12连物理键都没有了,变成了一排触控点,而且可以切换,一会儿是控制音量亮度,一会儿是打开麦克风,一会儿又变回了F1-F12——尼玛我debug的时候一不小心屏幕就暗得看不见了,这是什么体验。
  • 数字1左边的~键被挪到了右下角,那个位置成了Esc。。。其实不是什么大事儿,可是我天天要输好多遍的password里边偏偏有个~,在一天输错了数次密码之后,我只好选择改密码。

说来说去发现其实就是在吐槽键盘。对大多数笔记本来说,性能都不是大事儿:差异无非是键盘体验,重量,续航,屏幕。Intel推出超极本之后重量不是大事儿,而windows笔记本的续航都不怎么样;至于屏幕嘛,那就继续吐槽一下这个高分屏体验吧。
确切的说这不是X1的错,所有的windows笔记本上高分屏体验都很烂。我一直不太在意屏幕,1366×900也照样用得不亦乐乎,直到拿到X1看到所有的图标都变得咪咪小,才恍然大悟原来这就是高分屏啊。像小白一样去百度知道学习如何放大显示。尽管放大之后系统本身和微软的主流程序都可以基本正常使用了,但是仍然有那么些想死的时候:

  • 比如远程到另一台电脑之后,远程桌面上的图标忽然变得咪咪小,不能放大。
  • 比如截屏之后粘到outlook的邮件里,我擦怎么突然图片变得巨大而模糊来——我猜可能是outlook放大显示的问题,可是我真的不知道别人收到邮件以后会看到什么样的图片。
  • 比如打开某些非微软多程序的时候,要么死活不能放大,要么放大完丑得不想再看到它。这其实也不完全是微软的错,为了兼容各种原来的应用,高分屏没办法做到完美体验。可是我是用户,我干嘛要理解微软的苦衷呢。用了Retina的MacBook Pro,才知道什么是完美的屏幕,舒服的让人不能自拔。
  • 最后不得不提一下品质。其实我是不太相信品质这个词的,大家的笔记本都是一样的流水线下来的东西,能有多大差别的,我当年买过低端的明基本,戴尔本,东芝本,都用得好好的没出过任何状况。可惜这台X1从一开始就觉得不太好,系统稍微忙一点风扇就开始疯了一样的响;有时候已经sleep了还会莫名其妙的风扇狂转;用了两周之后就彻底崩溃进不了系统了,IT也没告诉我具体原因,只说要换主板了。这次我终于相信品质是有差别的,或许X1 Gen2的设计,尤其是散热方面是有缺陷的。

    既然提到了MacBook Pro,就顺便比较一下:重量虽然比Air重很多,但是男士用起来完全没有问题,仍然觉得很便携;续航没有10小时也有7,8小时,没有具体计算过但是很少为没电发愁,可以专心使用一整天是件很开心的事儿;屏幕如上所述;键盘手感略差,不如巧克力式的ThinkPad键盘,感觉主要是键程短,更不如X220之前点传统ThinkPad键盘。至于苹果的系统,比windows难用很多;好在现在的应用大都是基于web的,不太关os的事情。

    吐槽完毕。总而言之,怀念当年ThinkPad带来的美好体验,终于被Lenovo折腾得差不多了。所谓对创新就是三天两头把键盘的样式布局变一变,而且越变越差,把这些最经典多东西统统变没了。如果不是工作原因,我已经基本不需要使用windows了,Mac本上有非常好的体验。如果说windows笔记本还有什么希望的话,我觉得已经不在ThinkPad而在surface了。在商店里数次把玩surface都感觉不错,完美对移动办公选择。希望surface 4会进一步改进,到时候入手一台继续比较。至于ThinkPad,就把这些年来的美好体验当作对经典的记忆吧。

新玩具

好久不见。
发个最近搞的新玩具出来:树莓派Raspberry Pi. 一个ARM架构的小主机,只有名片盒大小。我买的这一款是model B,900Mhz A7架构的cpu, 1G的内存,有4个USB接口,hdmi接口。。。售价35美元。最近刚刚出了model B+型,配置更好价格不变https://www.raspberrypi.org/products/raspberry-pi-2-model-b/

树莓派最初是设计来作为廉价电脑给小朋友们学习用的,后来逐渐在geek中流行;最近很火的IoT概念更是让树莓派出现在各种奇奇怪怪有意思的场景中。它可以很容易的跑linux,有专门为它定制的Raspbian发行版--听名字就猜得到是基于debian的。

于是,最容易想到的应用就是拿它做一个高清播放主机,播放在线视频或者做bt下载播放机都不在话下。只有名片盒大小放在客厅很合适。除此以外还有更多好玩的应用,比如见到过有人拿kindle作为ssh的客户端,远程到树莓派的主机上,这样就可以实现在户外一边野营一遍写code了,配上太阳能电池或者移动电源在荒郊野外用上几天不成问题。还有更多的人用它来控制其他设备,做IoT。比起单片机来说它功能强大很多,可以做更多的事情;而且基于linux系统,可以轻松的用python,java这样的高级语言来代替汇编或是c,开发速度快很多。还有人拿很多很多个树莓派来搭集群,虽然性能肯定一般,但是能花几百美元就体验一下搭集群的感觉看来也不错哦。

我也没有想好可以用它来干嘛,就扔在那里跑个linux的小服务器需要的时候ssh连一下也挺好的。

WP_20150131_003

WP_20150413_001

回顾2014

昨天,赶在2014年结束之前去snoqualmie summit滑了一次雪;而去年恰好也是同一个时间,我们正在长白山滑雪,两次滑雪之间正好是一个完整的2014。

从来没有这样忙碌曲折的度过一年,没有像现在这样不知道未来会怎么样,更没有像现在这样有一种“生活正在不可避免的走向庸俗”的感觉。从前都是抱着看风景的心在生活,年底的回顾总是想想自己走过了哪些地方还想去哪些地方。这大概是从王德峰那里听到终极关怀这个词以后这些年来一直坚持的:作为一个终将逝去的生命,最大的意义莫过于尽可能多的收获各种经历,获得多样的人生体验;而旅行就是重要的方式。所以每一年都会心怀美好,微笑前行。这会儿忽然发现今年的总结不能这样写下去了,除了旅行不得不提那些结婚出国买房换工作的所谓人生大事–它们都发生在2014。

1月,去长白山滑雪,换工作,回家过年。
其实换工作的事情从2013年末就开始准备了,但是一直没有特别多的进展。元旦的时候郁郁寡欢,就去长白山滑雪换一下心情–感谢这个明智的决定。度假回来之后就整个月都在为换工作忙碌,连续几周为了面试早上六七点爬起来抱着电暖气打电话,然后忐忑的等消息,在失望和希望间徘徊。

2月,继续工作面试,在西安过年。
连大年三十初一还在打电话面试。然后就是春节在西安过,也没有去哪里玩儿。来回上海的时候体验了动车郑州换高铁的生活,但愿再过两年可以直接高铁来回。

3月,婚礼,买房,准备签证材料
1号去三亚,2号在亚龙湾沙滩上婚礼,之后在三亚度了个小假期然后爸妈们和灰灰分别飞西安成都,我飞回上海。月底买好房子,我们也是很神奇的人,只看过一个楼盘就买了,到最后还糊里糊涂的,觉得真的是买了吗。。。另外这个月还在到处跑准备签证材料,去了张江校区,还回了两趟复旦,在本部食堂又吃了一顿饭。

4月,签证,办贷款,安吉江南天池德清莫干山小旅行,回西安
去梅龙镇签证,小长假开车去江南天池莫干山小旅行,吃了可口的农家菜,还挖到了惊雷笋,短暂的回了趟西安还被办贷款的事儿打断了。然后就是各种跟朋友们的告别聚会。

5月,离职,来雷德蒙德工作,奥林匹克国家公园小旅行
9号飞到雷德蒙德12号开始上班,趁着小长假去奥林匹克国家公园小旅行,然后就是办各种刚到米国需要的证件手续。

6月,买车,租房,买家具布置新家,考驾照
买好了车,接灰灰来米国,搬到租好的公寓,接下来就是买家具,组装各种家具,买各种家用,还在fail了一次以后拿到了米国驾照。

7月,西雅图周边爬山,雷尼尔雪山徒步,工作变动,进ER
安顿好了家里开始趁着西雅图最好的夏天到处爬山郊游,最有意思的应该是雷尼尔雪山徒步了,一路风光无限。可惜徒步回来第三天就生病了,突然头晕目眩打了911去了ER(急诊),在ER待了几个小时就被医生告知是眩晕症打发回家了,一起回来的还有天价账单。7月17号公司突然宣布裁员,随之而来的是部门工作变动,1个月之内被各种re-org,换了4个老板。似乎工作再也不像从前在上海那样了。

8月,西雅图周边爬山,奥林匹克徒步
继续在西雅图周边爬山郊游,因为眩晕症进ER的事情郊游的节奏慢了一些,奥林匹克徒步算是比较heavy的一次了。

9月,夏威夷度假,去Levenworth看秋景,工作变动
8月底到9月初的夏威夷度假算是今年唯一的大旅行了,真是不容易。出发之前也是很纠结,纠结地点纠结机票住宿的价格,坦白的说觉得在米国旅行价格还是相当不菲的,但是却比国内的旅行少了很多乐趣。但是所幸最后还是坚定的出发了,夏威夷真的是非常美的地方,景色的丰富程度也绝非一个普通的小海岛可以概括的。另外在叶子逐渐黄起来的时候去Leavenworth看了秋景。公司继续裁员,所属的部门这次影响不大,但是原来上海的部门却天翻地覆;知道消息之后的一两个星期心情都不能平复,并非庆幸自己没有被裁,反倒觉得应该在自己被裁掉之前想想以后到底要怎么办。

10月,去Yakima看秋景,看三文鱼洄游
似乎只去了一趟Yakima看秋景,然后就是看了华盛顿州有特色的三文鱼洄游。

11月,宅
当西雅图雨季到来以后,生活就一下变得乏味了许多,绝大部分时间都只能宅在家里。当夏令时变到冬令时之后,天更是黑得令人发指的早。从此以后,似乎天天都是阴雨蒙蒙暗无天日的感觉了。所幸待在家里还是可以看电视剧看电影看书打发之间的,另外还做做健身操,甚至连写blog都比以前频繁了。

12月,生病,去滑雪
从11月末感恩节之前就开始生病了,因为米国看病效率低下得可怕,外加可能是药物副作用,被这场病前前后后折磨了一个多月,最后以看了数次医生,做了几个检查,进了第二次ER,收到了更加巨额的账单收场。中间最绝望的几天,只一心想离开这个鬼地方;逐渐好起来以后,更加坚定了要坚决和直截了当地生活的想法。昨天去滑了次雪,很开心很畅快。

写完了,怎么看都不想是一场关于去了哪里还要去哪里的旅行回顾。这一年发生的事情实在太多,简单而无忧虑的工作+旅行的生活方式似乎不适用了。就连之前信誓旦旦的说我要走过更多的地方的心愿,都没有那么强烈了。这并非开始否定自己对于生命的看法;只是开始思考,对于一个年过30生活正在不可避免走向庸俗的人来说,仅靠每年数次蜻蜓点水的旅行和几张绚丽的风景照来肯定自己存在的意义,真的足够了吗?

关于2015,最美好和最忧愁的事情都是:不知道该怎么办,该往哪里走,会发生什么。我想我会继续旅行的脚步不停歇,同时给自己找更多有意义的事情来做,除了在路上的那些精彩瞬间,剩下的三百多天同样应该精彩。走吧,勇敢地滑下,用力地摔倒。

来看看12306泄露的用户数据

昨天来自乌云网的一条关于12306用户数据泄露的消息被到处转载,迅速传播。据说大量用户登录导致12306第一次并非因为抢票而瘫痪。跟很多人一样,我因为懒惰和记忆力差,所以喜欢在各各网站用同样的密码。这样做最大的危险是,一旦某一个网站因为安全漏洞泄露了密码,那么拿到密码的人可以用同样的密码去猜你在其它网站的密码,一猜一个准。所以像昨天这样的事件发生以后,登录12306改密码其实是无济于事的,你得把所有跟12306用了同样密码的地方全改掉—-要一下子想起所有注册过的网站,好难啊。

所幸后来又有消息说,昨天只泄露了很小一部分的密码,不到14W。12306网站声明称,密码并不是从12306内部数据库泄露出来的。从泄露密码的数量来推测,我是比较相信这一说法的,如果是12306数据库泄露出来,那么就远不止这个数目了。我们就姑且相信12306真的没有用明文存密码吧……如果泄露不是来自于12306,那最可能的途径就是大家抢票用的各种抢票软件了。用过的人都知道,抢票的时候要把各种信息都输入在抢票软件里边的。抢票软件花样繁多,来路繁多,万一用了恶意的或者愚蠢的抢票软件,那密码被偷去是易如反掌的事情了。

我每年抢票的时候也都用了一些猎豹,360之类的抢票软件。所以赶快去搞了一份泄露的用户数据来看看自己有没有中招–所幸没有。庆幸之余,也正好看看这份包含13w+用户数据的文件,分享一些有意思的东西。

首先说明一下,根据我看到的这份数据,我怀疑数据的来源是有一定倾向性的。换句话说,这份数据可能代表了某一类人群,放大到所有互联网用户上可能并不准确。

1. 密码的长度
大家都知道密码越长越安全,因为如果黑客用计算机破解密码的话,越长的密码需要花越多的时间。当然越长的密码也越容易忘记—-所以很多人像我一样,都喜欢偷懒不用太长的密码。
从这13w+个数据中可以看出,绝大多数人的密码在6到10个字符之间,用8个字符的是最多的。所以为了增加你密码的安全性,建议使用11个或12个字符的密码,这样你已经比绝大多数人的密码都复杂了,而且也不用花太多精力,只需要多记忆一两个字符。
PWD_Length

2. 密码的复杂程度
通常来说,混合了数字,字母和特殊字符的密码比较安全。大多数人喜欢用字母和数字作为组合,用特殊字符的人就很少了。这份数据里边只有1%的人在密码里使用了特殊字符,其他的都只包含数字和字母。
所以如果你想自己的密码比大多数人更安全一些,另一个选项就是使用特殊字符,随便在密码中间嵌入一个特殊字符就安全很多了。
PS:刚刚经人提醒,12306网站上居然只允许用字母,数字,下划线做密码,真是狗日的啊
SimplePWD

退一步来说,我们把大写字母也当做一种特殊字符,来看看多少人的密码里仅仅使用了数字和小写字母—-98%。如果你的字母里用了大写字母,恭喜你,你已经属于仅有的2%了。
SimplePWD2

除此之外,这些密码里边常见的模式还有:
姓名缩写和生日的各种组合
手机号码的某些位
qq+几位数字(这种一看就知道也是qq密码,我就不去试了)
123456abc
键盘上的一些位置比如123zxc

看完了密码,我们再来看看用户的情况。

3. 注册邮箱
关于注册邮箱使用的分布我觉得特别有意思:用qq和163邮箱注册的用户占了这13w+人的绝大多数。而我以为非常流行的Gamil, Hotmail和Yahoo邮箱分别都只有一千多。我个人作为gmail和Hotmail用户,在这里边属于绝对的少数派了。关于这一点我有两种猜测:

  1. qq和163邮箱用户确实占了中国互联网用户的绝大多数。首先qq用户群是无与伦比的主流,而每个qq用户只要知道自己的qq号(废话)就自然记住了邮箱,比起要去单独注册一个邮箱容易的多;而网易邮箱只少在当年Gmail出来之前也是非常有人气的。看来用Gmai和Hotmail的所谓互联网从业人员们,已经离主流太远,太不接地气了
  2. 还有一种可能是,密码被泄露的这些人大多时候qq和163用户。比如qq和163的用户更可能用到某公司的抢票软件?

EmailServer

4. 年龄分布
从用户的年龄来看,绝大多数是80后,90年代初和70年代末的人群次之。这个应该比较好理解,需要抢火车票的更多是正在社会上挣扎的80后们。年纪再大点的人已经有老有小,生活相对稳定,不再需要太多漂泊;而90后尤其是95后基本上还在家和学校。
Age

另一个有意思的是,还看到一些早到1920年,晚到2014年的身份证号。对1920年这样的身份证号,我猜测可能是某些人用家里老人的号码注册了买票,2014年的身份证号就不明白了,难道不是16岁才有身份证号吗?

5. 性别分布
泄露数据的用户93%是男性,女性只占7%。我不太相信中国抢购车票的男女比例是93:7 —- 如果这样的话说明有很多男性在帮女的抢车票:) 更可能的原因是男性用户占到了抢票软件使用者的绝大多数,因此中招的也更多。作为抢票软件的作者们,你们应该反思一下为什么自己做的软件那么复杂,女性用户都不能使用了:)
Gender

6. 星座分布
除此之外,还想看另外一些好玩的数据,比如他们的地域分布,星座分布。地域分布根据身份证号逐个确定省市有点麻烦懒得弄了;这里姑且看一个简单版的星座分布(只看月份,不看二十三四号切)。
我相信这接近于中国年轻人在各星座上数量的比例,而不太相信某个星座在抢火车票这件事情上会有某种特别的行为。
constellation

冬至吃饺子

离家的人反而格外尊重传统,总是记得每一个特别的日子。今天按照北京时间算是冬至,即使离家万里也要吃饺子。
西安人喜欢吃的是酸汤水饺。只是今年的酸汤水饺既没有红油辣子也没有陈醋。。。生病了就只能吃这样寡淡的酸汤水饺了,幸好香菜葱花和虾皮还是有的,饺子也是现包的。想起大学时候每年冬至都会跟寝室的兄弟一起四处找水饺吃,找来找去只能吃到蘸醋汁的水饺,现在已经很幸福了。
老爸发微信说要吃饺子,冬至大如年。祝所有的人冬至快乐。
WP_20141221_001