前段时间去了Boston,路上在Providence呆了一会,然后去了Cape Cod Bay。
Boston不愧是深受留学生喜爱的城市。

搬家的时候没有做好功课,错误的选择了RCN做网络接入。天杀的RCN封锁了所有的80端口,美名其曰为了保护用户免受病毒伤害。

无奈只好把blog从pogoplug上面搬回wordpress.com,又做了域名绑定,看来以后一段时间会比较少折腾web hosting了。

图片导入挺方便的,但是其他上传的附件都失效了,所幸其他附件也就只有代码,于是开了一个github账号把代码挂到上面去了。

上天保佑没有80端口的人民⋯⋯

我在波士顿玩的时候,看到马萨诸塞州的车牌上写着口号”Spirit of America”,顿时觉得非常恰如其分。波士顿是新英格兰地区最大的城市,美国建立时,新英格兰地区正是其核心。宣布建国,创立宪法的开国先父们绝大多数也是出生于这一地区。所以说马萨诸塞的确最能符合美国建立者所希望的的美国精神。

于是我查了查美国各个州车牌上的口号,挑几个比较有意思的列在下面。

纽约州 New York: Empire State (的确,想想纽约市的帝国大厦)
康涅狄格州 Connecticut: Consitution State (康涅狄格是宪法诞生的地方)
新罕布什尔 New Hampshire: Live Free or Die! (不自由,毋宁死)
阿拉斯加 Alaska: Last Frontier (最后的边疆)
得拉华 Delaware: The First State (美国最早宣布独立的一个州)
密歇根 Michigan: Great Lake State (密歇根紧挨着五大湖)
田纳西 Tenesse: Sounds Good to Me (听起来不错,田纳西是美国乡村音乐发源地)
佛罗里达 Florida: Sunshine State (阳光之州)
⋯⋯

在我准备离开波士顿的时候,看到一辆来自首府哥伦比亚特区的车,这辆车车牌的口号非常有意思:

起初我以为这只是这一个个性车牌,但是在网上查了一遍才发现, Taxation without Representation 竟然是哥伦比亚特区的官方车管所提出的口号,并且在哥伦比亚特区蔚然成风。这就引出了这句口号背后的故事。

Taxation without Representation来自于美国一句传统的口号No Taxation without Representation(无代表不纳税)。这句口号是当时美国寻求独立时提出的。当时英国统治着北美殖民地,殖民地的人民纳税但是却没有人在英国国会为自己说话。所以北美各种政策的制定,税率的调整,殖民地的人民是很难插上话的。民众的不满日益升级,于是在波士顿被倒掉的几箱茶叶成了导火索,最终引发了美国的独立战争。

⋯⋯

独立战争的结果是美国的成立。但是在确定首都位置时十三个殖民地的人民产生了分歧。北方人民希望将首都定在纽约,而南方希望将首都定在南方。双方最终在1790年取得了妥协,将一个位置大致处在南北方中间的区域从马里兰州中划出来做为首都,这就是现在的哥伦比亚特区。

哥伦比亚特区的地位在建立时就比较特殊。美国宪法规定了特区的最高权利机构是美国国会,实际上特区是在华盛顿市政府的管理之下的,但是国会保留推翻市政府政策的权利。最为悲剧的一点在于,美国宪法规定,对于参议院的选举是每个州选取两名参议员,对于众议院的选举是根据每个州的人口指定众议员人数。作为一个特区,华盛顿市并不是一个州,自然没有州的特权——选举参议员和众议员。

有人可能会觉得,这是宪法中的一个疏忽,补上漏洞就是了。但是反对给予特区选举议员权利的人认为,这并不是一个漏洞。哥伦比亚特区的法定最高权利机构是美国国会,如果特区有了议员,理论上国会就有权通过立法确定特区的议员人选,这就会成为一个更大的漏洞。

于是哥伦比亚特区的人民就这样无奈的生活了两百年。当然他们也没有放弃自己的努力。在1961年,宪法第23修正案让特区人民获得了参与选举美国总统的权利(三张选举人票)。同时,特区人民在众议院有了一个代表(delegate),这个代表可以参与讨论和表决,但是没有投票权利;但是,另一方面,在参议院,特区人民仍然没有代表,仍然是100名参议员代表美国50个州。

到了最近若干年,特区人民的努力仍然在继续。上面说到的Taxation without Representation就是努力的表现之一。为了表明自己支持特区人民的态度,克林顿的总统专车的车牌上写的也是这句口号。但是,由于特区是民主党的势力范围,小布什就任总统后就取消了这种做法。奥巴马上任后,却也没有恢复这么做,不知是出于什么考虑。

哥伦比亚特区名字中的哥伦比亚Columbia原意是美国。美国人民争取独立时提出了无代表不纳税的口号,甚至直接指出了没有代表权的纳税就是暴政。可是哥伦比亚特区,这个冠以美国名字的首都的人民却不得不忍受着纳税但没有选举权的尴尬200多年,这不能不说是一个讽刺。

很显然首都人民是不会放弃努力的。

如果秀外慧中不可得,那么还是先做到赏心悦目为妙。

几天前我拿到了自己的的一个mac,作为一个相对长时间的Linux用户,我不得不对aqua界面表示感叹,设计的太漂亮了。但是,当我通过终端深入到GUI之下时,一种莫名的烦躁感就会涌上心头:这个目录安排的太纠结了。

在我看来,一个正常的Linux系统,目录的安排应该是井井有条的。以Archlinux为例,/bin下面是最基本的系统程序,一般程序安装在/usr/bin下面,程序的其他部分装在/usr/share下面,配置文件放在/etc下面,各种库装在/usr/include和/usr/lib下面。(Archlinux放弃了/usr/local目录,这个目录本来是为了放只在本机上使用的软件的,这样进一步简化了系统目录结构)。这个pdf介绍了一般Linux的目录划分。

在mac下面,一切都显得似是而非,生活并不像这篇介绍OS X目录结构的文章中说的那么美好。os x的底层darwin作为一个正牌的Unix,对于目录安排本身是有和Linux类似的要求的。所以我们可以看到/下面一堆bin、usr、etc目录。但是,在此之外,os x还有另外一些目录:Applications,  Library,  Users。 在Mac上:

  1. 很多软件安装的时候只要拖动到Applications目录就可以了,所以很多的软件就会只安装在Applications目录下而与/usr/bin、/usr/local/bin无关。
  2. 移植自Unix系统的软件一般都会安装在/usr/bin或者/usr/local/bin下。
  3. 为了方便安装Unix下软件,FreeBSD下面的Ports被引进到OS X下面于是产生了DarwinPorts / MacProts,这两个Prots软件默认是把软件安装在/opt/local下面的。

于是,一个软件就可以被安装在三个地方,而实际上它被安装在哪里则是量子状态的,你不测试便猜不出来在哪。

譬如说,在我的系统上,Python2.6被装了两遍,一个是在/usr/bin下,一个是在/Applications/MacPorts下(是的,MacPorts把自己装在了Applications目录下)。

又譬如说,如果使用octave-forge的dmg文件安装octave的话,你会发现在终端里是没法调用octave的,因为$PATH中是没有octave安装的位置的。那么octave究竟安装在哪呢?答案是/Applications/Octave.app/Contents/Resources/bin/octave。你可以在$PATH里面手工加入这个目录,这个对Octave有用,那么Pctave呢?再加一遍?

什么,你想说可以用MacPorts把这类软件装到/opt/local下?那么为了某些诡异的依赖关系你得先把xorg的一系列程序全部编译一遍,即使你的机器上已经有X11了。

结论:

  1. As the title, Mac is different
  2. 美女的房间总是很乱的
  3. 也许OS X需要一个原生的包管理器,而不是DarwinPorts / MacPorts那样第三方的

你猜我的结论会是上面三个中间的哪一个?

Finally I got my own server. It looks like:

Well, it’s not a rack nor a blade nor a tower. It’s just a pogoplug based on Marvell’s plug computer architecture with an ARM cpu running plugbox linux. But it is small, noiseless, and power-save.

Now this WordPress blog is running on this server. Lighttpd + FastCGI + PHP + MySQL are chosen to support WordPress. I guess Lighttpd should be smaller and faster than Apache. For database, I really want to use some lightweight database, such as SQLite, rather than MySQL. But I don’t know whether WordPress can provide a good support for SQLite. So I give up this thought. All of these softwares are running on Plugbox Linux, a linux distribution similar to Archlinux but is designed to support Marvell’s ARM cpu.

For those who also want to turn pogoplug into a linux web server, there are some tutorials on plugapps site, but some of these documents are out of date or not for Plugbox linux. And Lifehacker has a wonderful guide for turning a pogoplug into a LAMP server. Generally you can just follow this guide to make your own server.

Here are some tips that are not mentioned in Lifehacker’s guide:

  1. If you encounter some glibc compatibility problem when installing softwares, run pacman -Syyu to do a full update to your system.
  2. Make sure to create a mysql group and a mysql user before you install MySQL.
  3. If MySQL service can’t start and show some error like /var/run/mysql.sock not found, you can just use touch to create one, but remember to assign a right permission such that user mysql can read and write it. I was stuck on this for a long time.
  4. When WordPress has been installed and it can not find any plugins or themes you installed, just check the permission of related files again and correct it if user http can’t read it.


###Update Oct. 25, 2010###

As MySQL made this server quite slow, I removed the need for MySQL by using Pdo plugin for WordPress and SQLite database, which brings a considerable speed improvement.

###Update Jan. 25, 2011###

There is a modified firmware that can enable the total 256mb RAM in pogoplug v2 “pink”. You can get an installation instruction from this link. Remember to boot to the original PogoPlug OS before starting the update. The flash_erase program can be retrieved via

wget http://jeff.doozan.com/debian/uboot/flash_erase