提前体验南京地铁二号线

今天有幸提前体验了南京地铁二号线,记录一下体会。

先发一下便民消息:最新消息说,南京地铁一号线南延线将于5月28日上午6时准时投入试运营,“高铁南京南”站暂不开通运营。地铁二号线将于5月28日上午开通仪式结束后投入试运营,大约是十点左右。一号线共线区段发车间隔约4分42秒,支线区段发车间隔约9分25秒,全天不区分高峰平峰,运营时间06:00-23:00。二号线发车间隔9分钟左右,初期运营时间06:00-22:00。

前一周,被地铁的标识色换色事件搞得纠结无比。简单的说,就是南京地铁二号线在临近开通运营前15天左右的时候,临时决定把一、二号线路标志色由明黄色和蓝色改成蓝色和红色。这样的改动,可能会带来对已经完工的车站装修、书法大字壁、出入口和正在更换/安装中的导向标识、线路图的全面改动。而这一决定的前提是根本没有太多科学依据的“根据列车车身颜色来划分线路标识色”。从今天体验的结果来看,改色的结果比想象中的要稍好一些,所以就慢慢接受这一点吧。有关改色事件,可以参考这里这里

早上的官方组织的体验活动从新街口站开始,直达二号线东延线终点站经天路站并折返回新街口,中途停站不开门、不上下客,所以有点坐囚车的感觉。于是在返回新街口后又再次坐上西去的列车,相对细致的重新体验一部分的车站。

标识色改色的问题还是比较的严重,目前一号线和二号线各个站线路图和导向标识颜色还是处于一片混乱中。不过相信在较快的时间内能改造完毕,标识色的改造会涉及线路图、线路板、导向标识。目前来看大字壁、出入口没有要改动的迹像(当然要改这些也实在不现实)。导向标识的改色目前大都是用不干胶贴纸,所以在灯箱上不能透光,比较影响视觉效果。所以做为乘客,换乘时认准线路编号是短期内最靠谱的做法,近期内导向标识的颜色应该也很快会到位。

二号线列车与一号线既有列车同为南京浦镇车辆厂生产,采用阿尔斯通技术的A型车。除了颜色不同,车内主要加装了电子线路指示图和电视上的到站提示,可以更有效的提供乘车信息。与一号线一样,二号线001/002号列车也是“人文地铁”品牌列车,列车内的装饰以书法作为主。

二号线大部分车站装修比较简洁明亮,尤其东延线部分高架站装修比较简陋。比较有亮点的车站是苜蓿园(七夕节主题,装修很漂亮也很有文化气息)、莫愁湖(通透式地下站台、端午节主题)和明故宫(中国红色装修风格)。二号线所有的车站都安装有安全门。

苜蓿园站(Photo by galaxy)

苜蓿园站(Photo by galaxy)

明故宫站(Photo by galaxy)

明故宫站(Photo by galaxy)

新街口的一、二号线换乘比想象中的要更便利。二号线换乘一号线直接从站台上下两层台阶就可以了。一号线换乘二号线需要走一个C字型的通道,新闻报道中把这个描述的过于清楚细致,所以反而让人觉得过程很复杂,实际上只要沿着导向标识走换乘通道,并没有太长的路。元通站的二号线到一号线的换乘需要看清所要换乘列车的终点站方向,沿着相应导向标识走通乘通道就可以到达,同样也非常方便。元通的换乘通道装修很好看。

车站的导向标识足够多,多到有点太多,层层叠叠的让你眼花,不过只要你不偷赖,一定不会在车站迷失方向。车站外500左右的范围内设立车站导向标识,导向标识中不带有列车线路信息,只会直接指向最近的地铁出入口。

二号线车站的自动售票机似乎不再接受1元的纸币,只接受1元硬币、5元或10元的纸币。售票机缩小了取票和找零的窗口,可以更方便的拿到车票和找零。地铁票价4元封顶。

目前车站和列车的装修气味还相当重。

长期以来,南京地铁一号线在很多的细节中都做得非常完善,值得称赞。但在这次体验二号线的过程中,感觉到新线在很多细节上距离理想中的完美还有相当的距离,比如,一些装修和导向标识制作比较粗糙;早就被网友指出错误的部分线路名称和标识的翻译仍然没有更正;一号线中一些出色的细节设计没有得到良好的继承等等。如果硬要把它当成一件城市中的艺术品,它还有很多的不足之处。但如果把它当成日常的交通工具,它已经做得相当不错,可以打个80分。随着新的地铁线路的不断建设,运营和管理难度也是越来越大,希望南京地铁能一直保持它的优良传统,打造一个出色的地铁品牌。

经历了4年的等待,期待南京地铁一号线南延线、二号线、二号线东延线在2010年5月28日的华丽登场。

标准的Firefox

某个我常去的论坛上,时不时会出现贴子布局混乱的问题,如下图(因为原贴太长,所以PS过以减小图片面积):

混乱的网页布局

混乱的网页布局

很明显的,左上角出现的“–>”很好的暗示了我们,HTML中有点乱套了。而且这也常常是网站系统可能存在XSS漏洞的最初现象之一,我不邪恶,不过担心别人会邪恶,所以打算把问题原因找出来,告诉网站管理员。

长期的实践中,我曾对这个问题总结过一个规律:这个问题只在Firefox中出现,并且会乱掉的贴子多半是因为某一个特定ID的人参与了讨论,开始混乱的位置常常是在那个ID的人的签名档往上一点的位置。

今天为了分析解决这个问题,你会怎么推理?我的推理是:由于签名档允许部分HTML,一些不规范的HTML标签导致了页面混乱。

于是去查看HTML源文件,原始文件太长,所以这里就示意一下:

<div>
<!-- Blah blah blah <br />
-------------- <br />
Foo bar Foo bar
-->
Blah blah blah <br />
-------------- <br />
Foo bar Foo bar
</div>
<div style="maxHeightIE: 160px;">
My signautre. My signautre. My signautre. My signautre. My signautre.
</div>

是的,推理错了。显而易见的,签名档中并没有问题,而且HTML代码似乎也没有什么异常的地方。把这段HTML放到一个新的空白网页中,显示也一切正常,没有发生混乱。

也许是网页中有一些不可见的字符,而且复制粘贴后就没有了?Emacs帮我证明了不可见字符这一点,这个网页在我的Linux平台上是以LF字 符做为换行的,但那个贴子内容中的换行符却是Windows中的CR LF。于是我把CR字符都删掉,问题依旧。难道还有更神秘的不可见字符在搞鬼?用二进制文件编辑器查看这个文件,一切正常。

再分析一下,在网页上出现混乱的起始点是–>符号,那看来是在那段注释中就已经出现问题了。用Firefox自带的查看源代码的功能,可以看到,它只把注释的前两行识别成为注释,标记成绿色,从Foo bar那行开始,就变成正常的HTML标签的颜色了。

为什么Firefox会错误的识别HTML注释标签的结尾?难道因为这个文件编码有问题(原始文件中是有中文的,例子中只写了英文字符)?(大家还记得Windows记事本对待联通和移动的不同态度吧) 把网页由GBK编码重存为UTF-8编码,问题依然。

没招了,借助神奇的Google,换了好几次关键词之后,终于用“Firefox comment bug”这个关键词找到了有用的信息

简单的说,HTML4规 范中,注释的起始标签是<!,注释的起始和结束符号是–,注释的结束标签是>。当然,这是一个很严格的形式化的定义,但这跟我们通常想象中 的注释由<!–开始,以–>结束是不一样的。因为HTML4规定,结束符号–和结束标签>间可以有空格隔开,也就是说,并不要求 –和>连在一起写才表示注释结束。规范建议在注释中不要出现两个或以上“-”出现的情况。

规范中没有说结束符号–和结束标签>之间除了空格以外可不可以有别的字符出现,Firefox很激进把它定义为允许出现,所以就带来了我们所看到的问题。

事情还没完,那为什么把这段代码单独贴成一个HTML文件测试就没有问题呢?因为没有指定DOCTYPE时,Firefox不会按HTML4的规范去解析。如果你在测试文件开头加上HTML4的DOCTYPE就可以重现这个问题了:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

还没完,那为什么这个问问往往出现在某个特定ID参与过的贴子上呢?因为那个人不喜欢用论坛的“引用”功能,他喜欢复制前一个人说过的话,用———隔开,下面写回复。或者就是用———来分隔他的贴子正文的几段内容。

为什么那个BBS系统中要把贴子的内容输出两遍,其中一遍是在注释中呢?不知道。有一种可能性是开发者还不熟悉网页后台系统的开发,他总是习惯用HTML中的注释语法去注释后台他不想要的代码。这种做法基本上是错误的,但犯这样错误的人绝不在少数。

继续,虽然Firefox这样做没有违背规范,但多少有点违背常识,为什么它不修复这个问题呢?这是因为它要兼顾SGML的解析——在那里“–”有着很重要功能。不过由于HTML5中对注释的语法做了更严密的规定,Mozilla说,他们准备在后续的版本中修复这个问题。

最后,Firefox这个问题会不会带来原本可能不存在的XSS攻击?应该说可能性是有的,但主要问题还是会出在网站开发者的身上。比如你在后台调试时,输出了未转意的用户输入内容,并用HTML的注释注释掉了,你以为是安全的,但由于这个问题的存在,带来了XSS攻击的可能性。

这个故事还告诉我们一些道理,不写了。因为我已经把分析/走弯路的过程写得很详细了,那些道理都是简单易见好理解的,只是常常我们做得不太好。

在Debian Squeeze下安装Dropbox

听说Dropbox这个在线存储服务商很久了,不过一直没有去用过,因为我一直认为在线文件存储在ADSL小水管上是一个不靠谱的服务——上传速度太慢了。

这几天我订阅的若干个RSS上都不约而同的出现一些有关Dropbox的文章,有使用技巧的、有商业模式分析的、还有创业经历的等等。病毒式、口碑式的营销是Dropbox取得当前成功的一个重要因素。好吧,我承认我被这个“病毒”传染了,现在正在继续放毒,文章开头的Dropbox的链接是我的推荐注册链接,如果你通过它注册,你我都可以获得250M的额外存储空间。

Dropbox能迅速感染我的主要原因还是在于它的体验做的还是不错的,整个产品与操作系统的集成做得不错,使用起来非常自然,性能也远比想像中的要好。不过如果要在Debian Testing (Squeeze)上获得这样的体验,还是需要花一点功夫,因为Dropbox提供的Linux deb安装包只有给Ubuntu提供的版本,在Debian上安装会遇到依赖关系的问题:

nautilus-dropbox depends on libnautilus-extension1 (>= 1:2.22.2); however:
Version of libnautilus-extension1 on system is 2.30.1-1.

看上去只是版本号上的一点点小问题,可以直接强制安装:

sudo dpkg -i --ignore-depends=libnautilus-extension1 nautilus-dropbox_0.6.2_i386.deb

后果就是aptitude或者Synaptic都会发现存在broken的依赖关系,然后系统的包管理就不能正常工作了:不能安装别的包、不能升级……

搜索后找到了一个简单的解决方案,适合解决类似的deb依赖关系的问题(Debian/Ubuntu都适用):编辑/var/lib/dpkg/status文件,在里面找到存在依赖关系问题的包所在的位置,编辑它的Depends后面的项,改成一个可以被满足的版本号或干脆把无法满足的依赖项删除。在本例中,可以把“libnautilus-extension1 (>= 1:2.22.2),”改成“libnautilus-extension1 (>= 2.22.2),”或者干脆删除它。

这个方法很有效也很暴力,请确认知道自己在做什么并仅在必要、合理的时候使用这个方法。在大部分的情况下,也许自己重新编译生成一个适合自己的安装包是更正确安全的做法。

最后分享一下非常重要的几个小技巧:

1. Dropbox的Public文件夹文件外链的功能在国内不能正常使用,解决方案很简单:把生成的外链URL中协议由http改成https就可以了。

2. 在Linux下,可以用软链接把不属于Dropbox文件夹内的文件同步到Dropbox,但注意尽量只使用文件夹的软链接而不要对文件做链接,因为Dropbox在把文件同步回来的时候可能会把软链接变成普通文件,导致实际的文件不同步。

3. 在Windows的NTFS分区下,可以用Junction或mklink(Windows 7)把文件夹做链接,实现任意文件的同步,但要记得与Linux不同的是:只能把Dropbox文件夹内的文件夹建链接到外面,而不能把外面的文件夹链到Dropbox文件夹内,不然同步只会做一次,以后文件再变化就不会再同步了。

更多技巧可以参考:Dropbox免费网盘高级使用技巧

ssh-keygen这个扯蛋的网站

无意中看到www.sshkeygen.com这个网站(故意不做成超链),先感叹了一下现在真是什么事情都可以放到“云端”完成,然后就意识到这里面的问题了。

ssh-keygen是*nix系统中用于生成SSH登录用的密钥对的命令,很多公共的服务器出于安全考虑都要求用密钥对代替密码来登录系统。然而这种方式对于很多人来说是比较陌生的,如果想借助于搜索引擎来解决这个问题,就很可能上了这个网站的当。在线生成密钥对,这就意味着你的密钥已经被这个第三方的“在线”网站所知晓了,私钥泄露,那还有什么“密”可言呢?

仔细看看这个网站上的遣词造句,还颇有一点专业的味道。不过它故意让你多输入了用户名、单位、域名、IP这些生成SSH密钥对根本不需要的信息,显然是别有用心啊。如果再看看它的About的页面,有些看似友好的TO-DO功能改进,实际上更具险恶用心,比如这个:implement key installation via web interface。

简单查了一下,现在好像还没有在线生成GPG密钥对的钓鱼网站,估计因为这个相对SSH密钥来说比较无利可图吧。puttygen(Windows下一个常用的用于生成SSH密钥对的软件)相关的域名也还没有人注册,这个想上去应该比sshkeygen对小白们更有效果啊,有识之士应该抓紧去注册,做一个在线的puttygen系统……

做为一个Best Practice,永远只在本机生成密钥对,并充分保管好自己的私钥。如果非要在公共主机上使用密钥对,一定得给私钥加上一个强劲的Passphrase。把私钥文件设成0600的权限是必须的,但是是没有用的,因为每台服务器的背后都有一个名叫root的“邪恶”帐号。

旧金山印象-公共交通

作为一个合格的铁路、地铁双料爱好者,美国之行很重要的一个组成部分是体验当地的公共交通。虽然说美国是一个没车寸步难行的地方,但网上说旧金山市的公共交通还是比较发达的,这倒也增加了我的信心。

首先体验的是轨道交通,BART。BART是Bay Area Rapid Transit的缩写,也就是湾区快速运输的意思。从旧金山机场出来就可以看到换乘BART的导向标识,不怕迷路,不过买票的时候会有一些不习惯,因为它采用的是先投币后选择票价的方式。与国内地铁不同的是,它在购票时并不是选择目的地,而是可以打印出任意你所指定面值的磁条卡。如果在出站的时候票中还有余额,出站闸机会把票还给你。下次还可以继续使用,也可以继续往票中充值,不过如果是给车票充值,自动售票机会给你打印出一张新的车票。

BART的旧金山机场站有4个站台,不同站台会始发开往不同方向的列车。站台上的LED显示屏并不会一直显示车次的信息,倒是一直在翻滚着显示各种安全告示和动态新闻,所以还是要看注意看清楚自己应该在哪个站台候车。我的目的是市中心的Powell St.所以应该选择开往Pittsburg/Bay Point的方向的列车。

BART列车的发车间隔在15-20分钟左右,如果没有卡着点,还真是要多等一些时间。从机场到Powell St.有11站,大约需要30分钟,票价是$8.10。跟国内的地铁系统来比,实在是一个天价。

列车采用三轨供电制式,车况一般,车厢内的照明也比较昏暗,车站更是简陋无比,很多车站都像是无人值守的。车上座位很多,人很少,所以平峰的时候基本上是没有人站着的。

下午去伯克利大学时又一次体验了BART,而且中途还在12th St.进行了一次换乘,同台换乘非常方便。而且很重要的一点是,无论是BART,还是后面乘座的CalTrain或Muni,它们都有一个叫作Timed Transfer的机制,也就是说某些车次的列车是设计好卡着点让你换乘的,你可以从一列车上下来直接上另一列车继续旅行,基本上不会因为换乘而有过多的等待时间。

BART系统不允许拍照,作为一个老实人,我就什么照片也没拍。

周二下午要去一次公司,需要搭乘CalTrain,CalTrain可以看成是城际铁路,平时大约15-20分钟一班,周末则差不多1小时才有一班车。列车采用内燃电传动的机车牵引,大部分是客车都是双层客车,部分客车车厢下层是用于做为自行车车厢的。列车按停站不同分为3个等级,从多到少分为Local, Limited-stop和Baby Bullet三种。最快的Baby Bullet可以保证从旧金山到San Jose的旅途控制在1小时以内,而Local则常常需要90分钟,所有列车的最高时速都在127km/h左右。

CalTrain的计价方式采用分区计价,跟国内的地铁倒是比较相似。同样采用自动售票,票面是小磁卡。车站没有闸机也没有人检票,车上也只是偶而会有列车员查票,所以一切靠自觉。大部分CalTrain的车站也是很简陋的,规模基本上可以类比于国内某些城市的BRT车站。从旧金山到我的目的地Moutain View是跨了3个区间,距离差不多是机场到市区的不到两倍,票价$6,相比BART来说,是便宜了很多。

CalTrain的乘坐体验也很一般,有时候会很颠簸,实在不能跟中国的火车相提并论。工作日平峰时段人也很少,一节车厢能有10来人就不错了。

CalTrain列车到达Moutain View车站

CalTrain列车到达Moutain View车站

如果说BART和CalTrain不是一般观光客所首选的交通工具的话,旧金山的Cable Car,也就是有轨电车,或者叫叮当车,就是很多人想体验的交通方式了。叮当车最热门的线路就是从Powell St.到Hyde St.的线路,它可以把游客从市中心途经中国城和九曲花街,一路“翻山越岭”,送到渔人码头。

Cable Car很有历史,所以很多东西也很传统。在Powell St.或Mason St.等终点站,都可以看到一个大圆盘,车子开到上面,再用人力把它转动180度,实现车辆的调头。车子的速度也非常慢,不过做为观光使用,还真是很合适。尤其因为旧金山城市地型本来就起伏不平,坐在叮当车上,看它慢慢的爬上陡坡又冲下街道,还有很有一番情趣的。一辆叮当车很小,只能乘坐20来人,还可以在车外面悬挂10来个人,挂在车外看风景,更有一番风味。

叮当车单程票价$5.00,不过在Powell St.的起点站可以买公交车通票,一日票$13.00,三日票$20.00就可以在指定时限内不限次的乘坐叮当车和Muni公交车。三日票还有个不错的用途是可以用来在Ghirardelli购买正价巧克力时享受9折的优惠,Ghirardelli是旧金山最富盛名的巧克力品牌。不同时间购买的三日票可能会提供不同的Coupon,只是我那张正好是Ghirardelli的巧克力券。

旧金山的叮当车

旧金山的叮当车

包括叮当车在内的旧金山市公共交通,是由市政交通局(SF Municipal Transportation Agency)来运营的,标志就是Muni。Muni公交车票价$2.00,在90分钟内可以免费换乘。相比其它公共交通,Muni公交车车况大都还不错,车厢很大也很明亮,进站时还会放低底盘方便行动不便的人上下车。

很多公交站名都是以相交的两条的路的名字来命名的,所以很清晰,不太会错过站。如果下车,最好提前拉动侧窗上面的绳索,通知司机需要下车。车上的站名报站是英语的,但当有老人上车时,会用英语、粤语和(可能是)西班牙语三种语言提醒乘客把车前部的座位让给老人和行动不便的人。