2011年5月11日星期三

Google I/O盛宴

今天下载了Google I/O 2011的主题演讲看了一遍,是北京时间今天0点开始的。刚放一遍,有些地方没有听清楚或者理解清楚,但是已经很震撼,迫不及待想说说。

上大学的时候,几个男生常常会做某个猥琐的动作,就是在电脑屏幕上看到低胸女的,就往屏幕上方凑,试着从上往下看,看看是不是能看到更多。我前几天还刚刚回忆了这个动作。当时对这种体验是否会变成现实的想法,只是在脑子里面一闪而过,因为觉得根本不会实现。当年几个理工科猥琐男无聊至极的玩笑,没想到今天在Google I/O上真的实现了,应该也是理工科男的作品吧。主题演讲有关于这个功能的视频演示。真是没有想不到,只有做不到。一面喟叹自己的想象力贫乏,另一面也为他们的创意和实现感到兴奋。

Android必然是Google I/O的重头戏。可是,Android绝不仅仅是一款手机(Mobile Phone)操作系统,而是未来的OS。演讲中演示了用Android来控制电灯等家用电器、控制现实的Neverball一样的迷宫游戏、和健身自行车连接等等,突然间觉得IBM提出的“智慧的XX”正在日常生活中实现着。

我是去年在外地出差看了Google I/O之后,觉得Google的Android太恐怖了,觉得他们这种开放的、草根的策略,会让Android像病毒一样蔓延开来的。现在Android已经是出货量第一的智能手机操作系统了。苹果的模式就比较封闭,像是一群天才关着门研究出一个天才的产品。我不太看好这种模式,除非他们更加开放。本观点纯属个人爱好,就像我就是喜欢像Linux这样开放的东西,而不喜欢微软这种集中封闭的东西。虽然关于Android或者Linux分化严重的批评从未停止过,但这是次要的,并不会妨碍到它们发展的大趋势。

演讲前头,放了一个Android发展的简短视频,绿色的机器人在振奋的音乐中不断翻越山岭,最后绑了一个火箭,飞到了高峰,视频定格在Android目前100,000,000的激活数目。我都被这个视频感动了。

正在下载今天Keynote的高清版,希望明天同一时间的演讲有更多激动人心的消息。

2011年5月6日星期五

Google Docs威武

有几个2003年在Windows下生成的PDF,没有嵌入中文字体,用Evince打开是方块。安装了poppler-data也不行。拷贝了微软的字体到Ubuntu下也没用。用Adobe Reader打开需要下载acroasianfontpack才行,装上后可以看了。不过我到台式机上,也是和笔记本一样的Ubuntu 11.11,Evince却可以正常显示中文。可能是笔记本上还缺少什么软件没有装导致的吧,我也没找到。

我又上载了两个PDF到Google Docs,中文查看没有任何问题。之前我还把这个PDF传到水木社区的Tex版求助,为看个中文也够折腾的。Google Docs真方便。我切身体会到了云计算的好处之一:用户不用自己安装、升级和维护软件。

2011年4月21日星期四

Skype登录证书被劫持(二)

昨天有网友在我以前的一篇叫“Skype登录证书被劫持”的文章后留言,说他发现了一样的问题:
1. 上Skype.com正常(国际站,美国IP),没有被引导到Tom Skype。
2. 点击“Login”后,自动转至https,提示证书属于www.bb-in.com;
3. 用这个证书的登录页面IP为:114.255.209.142
我怀疑是钓鱼。
TA提到的这个IP让我产生了兴趣,因为以前没有注意过IP。我whois 114.255.209.142得到如下结果:

这个注册人提供的地址是“qianmendongdajie9hao”,用Google搜索了下“前门东大街9号”,这是北京市公安局的地址。再看开头的netname“BJSGAJWLAQBWC-GOV”,应该是“北京市公安局网络安全保卫处”的意思,确实有这么个部门。

 为啥Skype登录页面https://login.skype.com的IP是上面这个部门的呢?应当不是Skype配合当局在服务器上做的定向,而正是上面网友所说的钓鱼。

我现在不翻墙,通过默认的DNS服务器来看login.skype.com的记录:
$ dig login.skype.com

; <<>> DiG 9.7.1-P2 <<>> login.skype.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23362
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;login.skype.com.        IN    A

;; ANSWER SECTION:
login.skype.com.    213    IN    A    114.255.209.142

;; Query time: 4 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Apr 21 14:53:46 2011
;; MSG SIZE  rcvd: 49
得到的正是北京市公安局的那个地址。而我登录到VPS上,再做同样的操作:
$ dig login.skype.com

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.6.amzn1 <<>> login.skype.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12968
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;login.skype.com.        IN    A

;; ANSWER SECTION:
login.skype.com.    300    IN    CNAME    login.skype-apps.akadns.net.
login.skype-apps.akadns.net. 300 IN    A    193.95.154.30

;; Query time: 45 msec
;; SERVER: 172.16.0.23#53(172.16.0.23)
;; WHEN: Thu Apr 21 14:56:12 2011
;; MSG SIZE  rcvd: 90
这样是没有被篡改的结果。login.skype.com是CNAME到login.skype-apps.akadns.net的一个别名,这个意思是说login.skype.com的正宗名(Canonical NAME)是login.skype-apps.akadns.net,而这个域名实际指向193.95.154.30这个IP地址。这样是很常见的做法,让CNAME所在主机提供一个类似CDN(Content Delivery Network)的服务,根据用户的IP地址提供不同的服务器IP地址。我在VPN连接下,login.skype.com就分别出现过爱尔兰、卢森堡和爱沙尼亚的IP地址(根据Firefox的Flagfox插件的显示)。

上面作DNS查询我没有在自己电脑上用8.8.8.8查询,这样查询的结果也已经被污染了:
$ dig @8.8.8.8 login.skype.com

; <<>> DiG 9.7.1-P2 <<>> @8.8.8.8 login.skype.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45598
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: Messages has 1 extra bytes at end

;; QUESTION SECTION:
;login.skype.com.        IN    A

;; ANSWER SECTION:
login.skype.com.    213    IN    A    114.255.209.142

;; Query time: 10 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr 21 15:10:21 2011
;; MSG SIZE  rcvd: 50
上面的DNS查询,有时候也会得到正确的结果,但具体规律难以得知。

114.255.209.142这个IP我也遇到了:

特殊的IP地址

我这里如果不用SSH Tunnel或者VPN的话,skype.com还是被定向到skype.tom.com。劫持后的证书我在“加入Skype”页面再次发现了,截图如下:
Firefox的安全警告
来路不明的证书
感谢这个网友提供了这枚特殊的IP地址,让我发现了新问题。建议在网页登录过Skype的,通过安全的连接修改一下密码,也希望大家以后在用Skype的时候,提高警惕,Skype的问题比Twitter,Facebook被封的还要严重。

2011年3月27日星期日

骑车去香山

昨天骑车去香山了,今年第一次骑车。

本来计划上午去的,但是早上看北京的空气质量是Very Unhealthy,就宅着了。中午在QQ上帆帆说他在香山,我就说我骑车去找你们吧。赶紧吃中午饭收拾收拾就去了。

该有一年多没有骑车了,所以就没打算骑太高,只是适应性恢复。上到半山腰从金山陵园那里下去了。2009年5月1日第一次上香山也走的这条道。好久不骑,平衡都不行了,下山的时候不敢快速下。北京山上的路修得太好了,我都没有骑过小路,都是防火道,下次一定要试试野路。

然后在植物园门口和帆帆他们会合,吃了顿农家饭,三个人才72块。好久没见,聊了很多。回来的时候从香泉环岛走五环,竟然没有辅路,直接进到封闭路了。路上车不多,所以开得都很快,我在应急车道上拼命骑,尽早得骑到杏石口桥出去了。

点击此处获得KMZ文件。可以直接复制KMZ文件的链接在Google Maps里面查看。不过中国把Google Maps里面的坐标进行了偏移,还是用Google Earth查看靠谱。

2011年3月13日星期日

亚马逊的账单

春节的一天,我邮箱里面收到Amazon Web Service的账单0.60美元。我这个是免费的,上面没什么内容,所以不会超标的,怎么会有收费呢?其中0.59是没有使用的Elastic IP费用,只需将这个IP和镜像挂钩(Attach)就可以了。还有0.01是:
$0.010 per GB - regional data transfer - in/out/between EC2 Avail Zones or when using public/elastic IP addresses or ELB
我不理解这个是什么意思, 在EC2的详细说明里面是这么解释的:
Public and Elastic IP and Elastic Load Balancing Data Transfer

$0.01 per GB in/out – If you choose to communicate using your Public or Elastic IP address or Elastic Load Balancer inside of the Amazon EC2 network, you’ll pay Regional Data Transfer rates even if the instances are in the same Availability Zone. For data transfer within the same Availability Zone, you can easily avoid this charge (and get better network performance) by using your private IP whenever possible.
我当时没看明白,也想不到我什么样的流量属于这一类型。刚才在检查自己一个域名,这个域名的一个A记录就是我在EC2上的因特网IP。我是SSH到EC2上,然后在里面w3m mydoma.in的,这样不就正好符合上面说在EC2网络里面用公用IP访问EC2吗?还有通过EC2上的VPN访问其它EC2上的内容,像Twitter这样使用AWS的网站上放在AWS上的那部分,也属于此类流量。终于明白这条收费的含义和来源了。

话说我看到二月的账单上只有这一类费用,只有0.01美元,在3月1日的收费时候免单了,上面写:
Total Charges due on March 1, 2011 $0.01
Amount forgiven March 6, 2011 -0.01
可能单子太小就免了。我搜索了到一个帖子,一个用户看到有免单,希望亚马逊能够把小额单子累计起来再收费,"以免用户感到内疚":
It's not like I really mind not being billed :), but still I feel a bit guilty about that.

I think a right solution for small transaction would be to round up an amount and charge in advance -- say, $1 or $5 or $10, whatever makese sense... This was Amazon can avoid doing these small transactions and users won't feel guilty :)
这人境界真是高啊。我想的是怎么少交钱,他想的是怎么多交钱。:)

2011年3月12日星期六

开源但不开放

也许不为很多人所知,以封闭的生态系统著称的苹果公司,其操作系统的一大部分是开源的。开源的部分叫Darwin,基本包含了Mac OS X和iOS图形用户界面之外的部分。

我碰到所谓开源软件,都喜欢找找官方是否提供源代码下载。一开始我以为内核叫Darwin,在苹果开源页面的项目里面怎么也找不到Darwin字眼的软件,还以为没有完全提供呢。后来才发现内核叫XNU,也是以这个名字提供源码的。opensource.apple.com是按发行版本的方式提供源码浏览的,opensource.apple.com/source是按软件包的方式提供源码浏览的。

找到苹果公司源码下载的地方,花了我不少时间,不像正常的自由/开源软件必然有下载链接,点开后必然有源代码的打包下载。苹果源码的提供方式就是文件浏览,没有对软件包进行任何的打包,这会让想下载源码的人非常麻烦,所以GNU-Darwin这样的项目才对苹果提供的源码进行了打包发放(aspl和other目录)。我特意把苹果提供的软件包列表和GNU-Darwin提供的源码列表用Vimdiff进行了严格的比较,基本是一致的。

Darwin虽然是开源的,但是源码提供的方式却很简单。对自由/开源软件,一般想当然的获得源代码的方式就是通过其版本控制系统check out出源码来,苹果的Darwin显然不提供这个手段。实际上,1年99美元的苹果开发者项目也不提供开发者对系统VCS的访问。GNU-Darwin这样的开放项目是提供CVS访问的。尽管如此,苹果做的这些并没有违背其开源许可。实际上Apple Public Source License是经过Open Source Initiative和Free Software Foundation认证的协议。

所以,苹果的软件是开源的,但是开发模式是不开放的。我这里不是作为一个Linux饭来黑苹果。Redhat这个Linux的界的元老公司,其开源和开发模式和苹果的非常相似。前几天下载Redhat Enterprise Linux 6.0,找它的源代码下载就找了半天,和苹果一样,主页上根本没有源码的下载链接。我是通过Google才找到它的源码下载地址。红帽至少还提供了SRPM打包。这也让CentOS这样的派生版本方便生存。

不过前几天刚刚有新闻,红帽改变了他们发布内核源代码的方式。以前是把内核和补丁分别提供下载,以后是把内核打了补丁后再提供下载。据说这样做是故意的,为了让Orcale的Unbreakable Linux山寨起来更麻烦:
One of the key points behind the RPM and Debian package formats is that source is shipped in its upstream form, with patches shipped separately and applied at build time. Red Hat has always followed this convention; the failure to do so with the RHEL 6 kernel is a new and discouraging change of behavior. Distribution in this form should satisfy the GPL, but it makes life hard for anybody else wanting to see what has been done with this kernel. Hopefully it is simply a mistake which will be corrected soon.
除了上面说的Mac OS X和GNU-Darwin、RHEL和CentOS这样成对的不开放和开放的模式,还有SUSE Linux Enterprise和OpenSUSE(找了一个大概是SUSE的源代码下载地址)、Solaris和OpenSolaris等。如果是像RMS那样的自由软件忠诚拥护者,自然会选择更加开放的开源开发模式。