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那样的自由软件忠诚拥护者,自然会选择更加开放的开源开发模式。

2011年1月12日星期三

还会有比这更烂的手机吗?

去年5月有人送了一款三星智能手机,型号是i329,终于告别了我的用了几年的三星X969彩屏手机,和电信送的另一款三星彩屏手机。进入了智能手机时代。可是这手机实在太烂了,有着太多的脑残设计,想骂人!下面细数几大脑残设计。

常用应用有两套,极其混乱。刚用几天的时候我就发现了。
  • 电话簿有两套:Windows Mobile自带一套,三星做一套,界面完全不同。有的地方调出来三星的,有的地方调出来微软的。
  • 通话记录两套:WM有了,三星又画蛇添足加一套。
  • 来电画面两套,WM有了,三星又画蛇添足加一套WM,神奇的是,有时候来电是微软的画面,有时候是三星的,甚至同一个人也会这样,完全不知道为啥!
  • 短信的界面两套,WM有了,三星又弄一套。
  • WM已经有开始菜单了,三星又弄一个主菜单,里面的东西是固定的,没法定制。
  • 闹钟两套,WM有了,三星也弄一套。这个太恐怖了,我只用微软的那套。
这几套重复的界面,风格自然是完全不同的。三星你吃饱撑了,为了显示这款WM手机是三星手机,就自己弄一些界面,可是又替换不了微软的界面。其实用原版的WM就可以了,经过三星这么一定制,完全成了SB产品。

这个当时市价2000多的手机,关机了闹钟就不会响。所以我只能用它的午休闹钟,早起闹钟得再备一个(我睡觉都关机)。

摄 像头程序(看界面明显是三星弄的)在照相的时候会有一声嘀,之后还有快门声音(电子模拟的),就是说有两声。你可以在3种快门里面选择,但是告诉你,没法 不选快门声音。摄像的时候还有几个音符长的提示音,这个也没法关掉。我把手机静音,把来电时的音量调到最低,到系统设置里面把“为下列事件启用声音”的复 选框都去掉。即使这样,照相和摄像的声音还有,而且音量还是固定的响度!很明显,三星的这个摄像头程序不考虑系统的设置,把声音写死在里面了。手机相机本 来就是方便偷拍啥的,这样怎么让人用。

时间显示有的地方是12小时格式,有的是24小时格式,没法统一。

上面的问题,都是三星自己脑残作的孽。下面的是其它一类问题。

WM的软件商店,啥时候去看也就那几个软件,免费的半数以上我都装过了吧。手机电池待机时间最多一个白天。外出必须考虑好充电。现在的开机时间还没我的Ubuntu快。开机后几分钟,若要收到新信息,打开需要好几分钟才能反应过来,着急回复的时候只能很无奈地等。

这个价位的手机,还会有比这个更脑残、更烂的吗?

我以前用的X969的直板手机,用了几年没换,是因为够用,而且没有出过任何问题,觉得三星的CDMA手机挺好。我以为换了这个智能手机,用的时间应该比那个更久。现在看来,哪天该淘汰了它换个靠谱的,当然不会是三星的。

2010年12月26日星期日

植物大战僵尸为啥要连网

在Windows的网络连接全部停用的情况下,
 打开植物大战僵尸,
 会同时弹出一个要连接到Internet的对话框。
这个对话框是因为植物大战僵尸要连网才出来的。在Windows的任务栏上,这个窗口的图标和植物大战僵尸的图标一样。
可以证明确实是植物大战僵尸弹出的。

为什么这个试用版的游戏要连网呢?让我神经敏感了一下。我在C:\Program Files\PopCap Games\Plants vs. Zombies目录下找到了eula.rtf文件,里面有下面一段。
1.4   Automated Collection of Information.  The Game may automatically send and receive information to and from your computer which PopCap may use to update the Game (by providing new features, bug fixes, etc.), to perform quality and assurance testing for the Game, and to provide you with information about other products and services we offer. PopCap may assign a unique anonymous identifier to the Game you have downloaded and, by using the non-personally identifiable information that is associated with this identifier, PopCap can personalize your experience, recommend products and services or make special offers through the Game specifically based on your preferences and usage of our products and services without personally identifying you. The information that PopCap gathers may also be used in anonymous and aggregated form in order to analyze ways to improve our products and services. BY USING THE GAME YOU CONSENT TO THE TRANSMISSION AND USE OF THIS INFORMATION BY POPCAP AS DESCRIBED IN THIS PARAGRAPH.
这表明公司告知用户确实要自动收集信息。一开始的发现连网确实让我不爽,但是安装软件的时候,绝大多数人都不会看用户许可而直接接受并安装的。在公司主页的隐私声明中,简单解释了下收集了什么类型的信息。用户甚至可以写信给公司要求查看收集的信息,但是这里却不具体说明到底是哪些数据。

使用非自由软件,我们只能抱着对游戏发行商的信任,相信他们不会滥收集、滥用用户信息。用户在没有程序源代码的情况下来确定收集的信息是困难的。QQ肯定没在EULA里面说要扫描你硬盘,但是人家却偷偷地做了。

现在智能手机收集用户信息的事情也很平常,WSJ上的一篇文章用图表形象列出了iPhone和Android上最受欢迎的101款应用(包括WSJ自己的应用)收集用户信息的情况。既要在网络世界畅游无阻,又要不损害个人信息的私密性,目前看起来是不可能的。

2010年12月25日星期六

试用Salesforce.com

Salesforce是企业云计算软件和平台提供商。今天注册试用了下他们的开发平台Force.com,抓图纪念。感觉就是2个字:给力!(建议就拿这个作中文公司名;-)。

Salesforce是原始的云计算企业(有别于微软这样后来搞云计算的),拳头产品是Sales Cloud客户关系管理(CRM)软件,但是他们在Saas、Paas和IaaS三个层次都有发展,成了一个全面的云计算企业。SaaS有Sales Cloud等软件,PasS有Force.com开发平台,IaaS有Database.com(还没开放)云数据库。基于Force.com的应用,有AppExchange应用商店可供选购。

看了介绍加上试用,感觉这些软件(还是不要提软件了,人家的口号是No Software),让工作过程和数据在同事之间变得非常透明,会不会让人有点不适应?应用可以和Outlook、Lotus Notes等本地应用集成,还可以和Twitter、Google Apps等网络应用集成。想想在中国Twitter、Google都没法提供服务,就觉得Salesforce这样的应用超前于我国的国情了。总体感觉很新奇、很先进,企业如果能用起来,那一定能提高生产力。

PS:注册过Force.com后,都不知道怎么用同账户试用Sales Cloud,所以没有这个应用的抓屏。

工作区首页

 和Google Adwords的集成

 Force.com开发平台

协作工具Chatter

 AppExchange应用商店

在商店安装的一个免费软件Milestones PM

2010年11月8日星期一

用Linux节省手机上网流量

Part 0

最近发现手机的Internet共享功能可以非常简单地让电脑分享手机的互联网连接。可是手机流量那么珍贵(我的套餐是100M的),用电脑上网的话,很多后台程序就偷偷地把流量消耗光了啊。我想用iptables可以搞定这个问题。后来真就搞定了。


Part 1

我想把所有的网络活动都禁止掉,然后需要什么功能开什么功能。

禁止所有功能,需要在你防火墙脚本的最后这样写:

   # Reject all inbound and outbound traffic first
   iptables -A INPUT -j DROP
   iptables -A OUTPUT -j DROP
   iptables -A FORWARD -j DROP

或者这样也行:

   # Same effects as above, but won't record dropped packets
   iptables -P INPUT DROP
   iptables -P OUTPUT DROP
   iptables -P FORWARD DROP

我最想用的是Gtalk功能,于是从头添加:

   # Allow Gtalk(xmpp-client) traffic
   iptables -A OUTPUT -p tcp --dport 5222 --sport $unprvports -j ACCEPT

这个$unprvports(Unprivileged Ports)是在脚本开头定义的:

   unprvports='1024:65535'

5222的端口是pidgin里面自动填写的Gtalk的Jabber服务器的端口。

忘了一条:没有DNS,什么也干不了。所以首先应该是考虑的是开放53端口:
 
   # Allow DNS queries and the replies
   iptables -A OUTPUT -p udp --dport 53 --sport $unprvports -j ACCEPT

前面都容许了OUTPUT其实还是不够的,我们还需要让已经建立的连接容许进来数据,要不让只能出不能进也没用:

   # Allow previously established connections
   iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

把前面的内容整理出来,就形成了一个只能上Gtalk聊天的防火墙:

   #! /bin/bash

   # Flush then delete all user-defined chains
   iptables -F
   iptables -X
 
   unprvports='1024:65535'
 
   # Allow previously established connections
   iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
   # Allow DNS queries and the replies
   iptables -A OUTPUT -p udp --dport 53 --sport $unprvports -j ACCEPT
 
   # Allow Gtalk(xmpp-client) traffic
   iptables -A OUTPUT -p tcp --dport 5222 --sport $unprvports -j ACCEPT

   # Reject all inbound and outbound traffic
   iptables -A INPUT -j DROP
   iptables -A OUTPUT -j DROP
   iptables -A FORWARD -j DROP

如果还需要别的应用,可以如法炮制把相关的端口开放。以下的内容可以根据需要添加或者注释掉:

   self='127.0.0.1'
   vps='your.server.ip.address'
 
   # Allow Gmail(imaps and ssmtp) traffic
   #iptables -A OUTPUT -p tcp --dport 993 --sport $unprvports -j ACCEPT
   #iptables -A OUTPUT -p tcp --dport 465 --sport $unprvports -j ACCEPT
 
   # Allow MSN traffic, also need 443 port
   iptables -A OUTPUT -p tcp --dport 1863 --sport $unprvports -j ACCEPT
 
   # Allow QQ traffic. May use udp depends on your settings.
   #iptables -A OUTPUT -p tcp --dport 8000 --sport $unprvports -j ACCEPT
 
   # Allow HTTPS traffic, and MSN need this
   iptables -A OUTPUT -p tcp --dport 443 --sport $unprvports -j ACCEPT
 
   # Allow HTTP traffic
   #iptables -A OUTPUT -p tcp --dport 80 --sport $unprvports -j ACCEPT
 
   # Allow PPTP
   #iptables -A OUTPUT -p gre -d $vps -j ACCEPT
   #iptables -A OUTPUT -p tcp -d $vps --dport 1723 --sport $unprvports -j ACCEPT
 
   # Allow OpenVPN. May use tcp depends on your settings.
   #iptables -A OUTPUT -p udp -d $vps --dport 1194 --sport $unprvports -j ACCEPT
 
   # Allow NTP, which uses port 123 for outgoing packets by default, so we do not specifiy unprivileged source ports.
   iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
 
   # Allow domestic traffice, e.g dictd.
   iptables -A OUTPUT -p tcp -s $self -d $self -j ACCEPT

需要说明几点。在Thunderbird里面用IMAPS收信,会读取所有邮件头,很浪费流量,我还没找到怎么把它设置得合适;根据我的观察,MSN和QQ的流量比Gtalk多,Gtalk的Jabber协议很安静。


Part 2

上面设置好防火墙,只是节省流量的第一步。下一步是选择合适的网络应用。

在上网的时候,我开着GNOME System Monitor监视网络,这样可以随时看到当前的上行和下行速率,以及累计传输的字节数。

还有一个更加强大的软件来帮助我们。同时打开Wireshark抓包软件,实时抓取和监视流过因特网接口的每一个数据包。额外说两句,Wireshark这个软件真的非常棒。GUI简单明了,但是又有高级的设置和复杂的功能。小到查看流过网线的每个比特,大到对抓取数据的多方面的统计分析,都可以非常简单地实现。通过Wireshark,可以看到和哪里、有什么协议发生了数据交换。如果有不明连接,可以通过sudo netstat --tcp --udp --numeric --program查看还活着的连接。

Gtalk聊天开始我用的是Pidgin,但这是图形界面的,头像啊、自定义表情啊神马的还是费流量,所以我想以后用Finch。这是Pidgin的文本版。

看网页的话(这里说的是本地页面),可以用Firefox,因为有个方便的Work Offline功能。如果要上网,Firefox需要去掉一些功能,如不显示图片,禁用掉Flash插件,不报告攻击和钓鱼网站,不发送崩溃报告,不自动更新,不到OCSP(Online Certificate Status Protocol)服务器上验证证书,把自带的RSS删除掉。要用浏览器打开手机网页,而不是桌面网页,因为桌面网页上无用信息太多。

其实我更喜欢用的是w3m文本浏览器,不用像Firefox那样设置很多,而且功能丰富,快捷键操作迅捷,只是快捷键太多了不好记。而且后退页面的时候,是立刻显示的,而不是像Firefox那样似乎要重新连接服务器。

查Gmail的话,不要用Thunderbird这样的软件,因为它不是为了我这种极端的需求设计的,通过IMAP同步邮件根本不值得。我推荐用Gmail的手机网页版。

我一般情况下是关闭80端口的,因为常上的网站都是HTTPS的,这样也省去了点开太多外部链接的分心。而且80端口很常用,很多后台的程序可能都会从这个端口联网。比如apt的自动更新就是HTTP的,如果你的Ubuntu开了自动更新,而且是下载完后再提示,那如果不小心下载了一堆deb包,你可能真要哭了。还有,印象中Xscreensaver或者GNOME Screensaver有几个屏保都会联网的。所以一定要开着GNOME System Monitor监视,最好也开着Wireshark。


Part 3

通过手机共享因特网给电脑,是很有用的。比如在火车上,在没有网络的地方,只要有手机信号,就可以用电脑上网了。这样上网,不仅经济,而且舒畅,还更安全。

   经济。因为手机上没法像电脑一样进行有力的网络监控,不知道哪些程序在联网,所以必然有未知去向的流量。
   舒畅。电脑屏幕比手机大十几倍,上网的体验自然要好多了。我这样上网后,觉得以前用手机看Reader真是有点自己跟自己过不去。
   安全。智能手机上那些偷窥隐私的软件你是发现不了的,用的手机软件越多,隐私遭窃的风险也越大。在电脑上任何网络活动都难逃Wireshark的法眼,再说Ubuntu下用自由软件就根本不存在这样的问题。