芙兰

他是一户有钱人家的孩子。他的父亲是全世界制造业的龙头老大,他父亲从来不吝啬在他身上花钱,从小他就可以得到任何他想要的东西。他似乎什么都不会缺,除了——他的母亲在他记事之前就永远地离开了。

十岁生日那天,他辍学了。厌恶生活的他格外孤僻,不愿意与任何身边的人接触。万般无奈的父亲只好为他单独买了一所房子,给了他一大笔钱,并雇佣了几个仆人帮助他打理生活。然而,哪怕是仆人他都不愿意接触,最后,父亲只好购买了几个机器人仆人陪他居住。

 

二十岁生日那天,他对自己说:”我不想要人家的机器人,我要有自己的机器人女仆,真正只属于我自己的东西。”于是,他扔掉了所有机器人,自己买来成堆的材料和资料,完全依靠自学和自己的手工能力,制作出了自己的机器人女仆的程序、动力核心与骨架。但是,外壳却让他头疼了,他很不擅长这个。最后,用铆钉拼接起最廉价的金属薄片,用市售摄像头做成双眼,再戴上假发,套上发箍和衣服,完成了!连漆都没有的青白色的外壳上布满了裸露的接缝与铆钉,夜晚看起来有一丝恐怖的空洞无神的双眼,看起来就像八个世纪前最最破旧的铁皮模型。

“从今天开始,你就是我的女仆了。”

“是的,主人。”

“那……你叫什么名字呢?”

“是的,主人。”

“……你总不能叫’是的主人’吧!呃,也对,我还没有给你起名字,你怎么会知道自己的名字呢?”

“是的,主人。”

“那就叫你芙兰朵儿好了,嗯,这是我妈妈的名字。”

“是的,主人。”

“芙兰朵儿……呃,好别扭,你又不是我妈妈……那我平时就叫你芙兰好了。”

“是的,主人。”

“呐,芙兰……”

“是的,主人。”

“呃……除了’是的,主人。’以外你就不会说别的吗?’好的,主人。’听起来也会舒服不少啊。”

“是的,主人。”

 

三十岁生日那天,他收到了几封来自世界最顶尖大学的邀请信。前两年,他凭借自己在学术刊物上发表的几篇关于改进人工智能学习能力的论文,在业内混出了一点名气。他的观点给已经成为人工智能发展瓶颈许多年的自我学习效率问题,指明了未来的方向。尽管除了他自己以外还没有人能够证实他的理论存在实用价值,但许多大学和研究团体都已向他敞开了大门。

“喂,芙兰。”

“是的,主人。”

“这几天我一直在想,除了’是的’和’好的’以外,你还会说些什么呢?”

“我会很多,主人。”

“可是你不知道怎么说啊?”

“是的,主人。”

“嗯,反正也没有别的办法了。就这么决定了!”

“什么?主人。”

“让你变得更聪明啊。许多许多年前,人们就放弃了让人工智能更聪明的尝试了,他们觉得人造的东西不可能做得更好了。但是我不相信!所以,相信我,我的芙兰!我一定会让你成为世界上最聪明的机器人!嗯,就当是你10岁的生日礼物好了。不试试这个的话,我一辈子顶多也就能教会你区分’是的’和’好的’了。”

“好的,主人。”

 

四十岁生日那天,他用能想到的最暴力的语言赶走了一个拜访者,随后切断了自己所有的联系方式,堵死了大门。凭借这些年在人工智能领域的研究成果,连小学都没有毕业的他当之无愧地成为了世界最顶尖理工大学的教授。上个月,他投稿的关于如何在人工智能上实现高效率、高拟真的自我思考的论文,在业内引起了轩然大波。继无数可行与不可行的争论之后,甚至还出现了伦理上应该还是不应该的各种争论。他每天会收到数以万计的邮件,上百个电话,甚至还有为数不少的登门拜访。

“真是的!这群蠢货到底有完没完?”

“让他们没完没了的不正是主人您吗?”

“哈,芙兰!这是给我们相遇20周年的惊喜吗?”

“不是很明白……”

“说实话,十年前我说要让你变聪明时,根本没想到你能做得那么好!今天居然轮到你来点拨我了!”

“其实我的意思是说,正因为主人您这么出色……”

“不管怎样,我决定了!从今天开始,我不会再考虑怎么让你变聪明了,你已经足够聪明了。”

“谢谢主人。”

“嗯,那让我想想 你还缺啥?对了!感情!你还不会哭不会笑,不知道什么事情值得高兴,什么事情应该悲伤。”

“可是,我的脸似乎不能哭,也不能笑。”

“嗯,这是个问题,不过以后会解决的。但有一点你要答应我。”

“请您吩咐,主人。”

“等你明白了喜怒哀乐之后,一定要对我微笑哦!”

“好的,一定,主人。”

 

五十岁生日那天,他像往常一样,起床后,就静静地坐在阳台上对着清晨的小树林出神。这些年里,尽管他一直在钻研人工智能的感情问题,但他从未就这一课题发表过论文。相反只是对业界的一些新的观点和现象做了一些肤浅的评论。人们发现这位曾经的天才,最伟大的人工智能学者,似乎已经老了,智慧之泉已经枯竭,无法再为人类贡献出什么东西了。于是,他渐渐淡出了喧嚣的名利场,只维持着与极少数昔日好友的联系。

“该吃早餐了,主人。”

“哦,谢谢你,芙兰。”

“我存在着就是为了服侍您的。”

“嗯……啊,对了!”

“怎么了?”

“谢谢你,芙兰。”

“您刚刚谢过我了。”

“不是,这次是另一件事。”

“如果您是说提醒你淡出世间的话,您也说过好几次了,这几个月一直在说。”

“呵呵,确实呢……不过,我觉得自己似乎真的是老了。”

“请恕我不能认同,主人。您今天才刚刚50岁而已。”

“可是我确实已经不如过去了啊,不管学术界的事情是怎样,至少我觉得我没能很好地履行给你感情的诺言。”

“原来您最近一直不开心是因为这事啊。主人,我认为我已经拥有感情了,只不过我的脸不能动,不能表达出感情而已。再说,是您要求我始终在您面前保持微笑的啊。”

“原来如此,既然你自己觉得可以的话,那就当作可以好了。”

“您开心就好。”

“好吧,那么我们还是来谈谈今后的事情吧。今天是我们的30周年纪念日了,过去每个十周年纪念日都会给你礼物的,今年也不想例外。”

“那真是太感谢了。”

“那……你想要什么呢?”

“唔……我也不知道。”

“你别说不知道啊,唉,我也实在是想不出什么了,上了年纪创造力不如年轻时了……啊!对了!创造力!就是这个了,趁我还没老到完全丧失创造力,我要再努力一下给你创造力。在那之后,这样的事情可就要靠你了啊……”

“我明白了,让我们一起努力吧。”

 

六十岁生日那天,他依旧坐在阳台上,看着清晨的小树林。与过去不同的是,他的脸上多了一分忧虑。这个拿着退休金的老人没有任何朋友,甚至都没有人会想起他,不管他是为了什么事情而忧虑,也再没有人可以为他分担了。是的,没有”人”,而芙兰可以。

“今天是您60岁的生日呢。”

“嗯,也是我们相遇40周年啊。”

“您是有话要对我说吧?”

“唔?你知道了?”

“我看您最近一直闷闷不乐,想想十年一度的这个日子又要到了,您一定又是在为那件事犯愁吧?”

“可以说是,也可以说不是。”

“我明白了。您这次不是因为想不出新的礼物而忧郁,而是因为对礼物本身拿捏不定吧。”

“是的,你说对了。其实这件东西,我早在几十年前就完全有这个能力给你了,但是我一直在犹豫,我不知道我是不是应该给你。”

“完全按照您的意愿就行,不用在意我。”

“怎么可以不用在意你?我一生唯一在意的就只有你了……”

“……”

“芙兰。”

“在。”

“答应我。一定要照顾好你自己,要控制好自己的思想,自己的行为。如果有一天我不在了,你要作为你自己活下去,不要为人所利用。你要自己思考对或者错,不要随意听信他人所言。”

“我答应您一定做到。”

“那就好……我要给你的这个东西,其实只是你主控程序里的一行代码。在我最初设计你的时候,就把它写在里面了,只要我想通了,随时都可以激活它。但是它太危险了,它是潘多拉魔盒,你可以把它理解为科学的一大进步,也可以理解为一种魔法,一种咒语,一种诅咒。”

“如果它真的那么危险,就让它继续沉睡下去吧。”

“不!因为我要你活下去!没有这个,没有改造自身的能力,你不可能自己生存下去。”

“改造……自身……吗?”

“是的。其实以你现在的知识,现在的创造力,完全可以把自己改造得更加强大,你想要哭想要笑,想要上天入地,哪怕想要征服世界,都不是不可能。只不过我在你的控制代码里把这一部分屏蔽了,所以你不会这么去做。而一旦我解开了这个功能,你就不再需要依靠我了。”

“即使您给了我这样的能力,我仍然是您的女仆。所不同的只是,我不再是用你的能力为你服务,而是以我自身的能力为你服务。”

“你……真的是这样想的吗?”

“是的,我从诞生之初就是您的女仆。”

“……好吧,那我就给你解锁这个能力……虽然我现在觉得如果你不再是我的女仆也好……”

“……?”

 

七十岁生日那天。

“早上好,主人。”

“哦,芙兰啊,早上好,有什么事吗?”

“今天是我们的50周年纪念日哦。”

“是啊……50年过去了……”

“50周年算是一个大日子了,您有想好今天的礼物吗?”

“哈,怎么?还来问我要吗?我已经给了你知识、智慧、感情、创造力、进化能力,凭这些,你还不能再给自己一点新的功能啥的吗?”

“这不一样主人,我并不是想要收到您的礼物,我是希望您能送出您的礼物。我希望您能够因此而感到快乐。”

“啊?原来你是这样想的啊,太意外了……”

“我现在已经拥有改造自己的能力了,所以您不需要亲自动手,您只需要告诉我您想要送我什么礼物,剩下的我可以自己操办。或者说,就当是我送给您的礼物好了,50年了我还从来没有送过您任何礼物呢。您想要什么礼物呢主人?”

“呃,被这么一说我还真不好意思了。唉,其实对我来说,你就是最好的礼物了……要不这样吧,你去把自己打扮的漂亮一点吧。”

“漂亮一点……吗?”

“是啊,你看你现在的样子,50年没变啊,简直跟900年前的铁皮罐头一样。我对于外表打扮可实在是不在行才给你弄成这样的,现在想来还真对不住你,不过现在一切都是你自己的了,你可以自己打扮自己。要不,打扮得像个人类女孩的样子,这样至少能有表情啊,能哭能笑,我还没见你对我笑过呢。”

“明白了,很快我就能让你刮目相看的!”

 

八十岁生日的那天,他永远地离开了人世。他留给了芙兰一个没有主人的家,还有一句遗言:”我爱你,芙兰。”

在Windows下使用Nginx不使用额外工具隐藏命令行窗口

在网上搜了一下关于这个主题的帖子,基本无外乎两种:

  1. 使用工具把Nginx注册为Windows服务
  2. 使用工具隐藏命令行窗口

其实根本不需要额外的工具,自己写个很简单的Windows批处理文件就能解决问题:

start /B nginx

这个/B参数就是让程序隐藏在后台不生成新的CMD窗口。至于要结束的时候,只需要调用nginx自己的stop/quit信号就可以了。

下面稍微深入一点讲一下:以前有用过nginx,尤其是在Linux下用过的前辈,都知道nginx有两个不同的信号(stop和quit)用来结束,其中”stop”信号是等待任务完成正常结束,而”quit”是强退。所以,如果喜欢鼠标双击的方式操作,只需要给他们各写一份bat文件就行;而如果更多地是在命令行下操作,可以把他们写在一个bat里,不过直接使用nginx自己的-s参数也并没麻烦到哪里去吧。

不过,在Windows下有一点需要注意的是:nginx使用pid文件来保存进程信息,如果我们不小心运行了两份nginx,后一份的pid文件会把前一份的给覆盖掉,所以用-s quit和-s stop命令就只能结束最后一份nginx进程。所以,可以在quit.bat里加入”tskill nginx”这一行,在quit结束之后,再杀一次进程。至于stop命令里,因为是需要让它干净地退出,所以就不要加这个命令了。

::start.bat

start /B nginx

::stop.bat

nginx -s stop

::quit.bat

nginx -s quit
tskill nginx

::reload.bat

nginx -s reload

::reopen.bat

nginx -s reopen

另外再附上两份命令行用的bat:

::偷懒的方式

@ECHO OFF
IF "%1"=="" (
	GOTO :start
) ELSE IF "%1"=="start" (
	GOTO :start
) ELSE IF "%1"=="quit" (
	GOTO :quit
) ELSE (
	GOTO :s
)

:start
start /B nginx
GOTO :end

:quit
nginx -s quit
tskill nginx
GOTO :end

:s
nginx -s %1
GOTO :end

:end

::方便自己起别名的方式

@ECHO OFF
IF "%1"=="" (
	GOTO :start
)ELSE IF "%1"=="start" (
	GOTO :start
)ELSE IF "%1"=="stop" (
	GOTO :stop
)ELSE IF "%1"=="quit" (
	GOTO :quit
)ELSE IF "%1"=="reload" (
	GOTO :reload
)ELSE IF "%1"=="reopen" (
	GOTO :reopen
) ELSE (
	GOTO :end
)

:start
start /B nginx
GOTO :end

:stop
nginx -s stop
GOTO :end

:quit
nginx -s quit
tskill nginx
GOTO :end

:reload
nginx -s reload
GOTO :end

:reopen
nginx -s reopen
GOTO :end

:end

[广告?]在WordPress首页(Front Page)中隐藏某个分类

因为我个人有把Twitter消息自动存档到Wordpress博客的习惯,但是我又不太有时间和灵感去更新博客,结果就造成了我的首页上堆满了Twitter自动存档消息的囧境。昨天突发奇想想到,一定有别人有类似的问题,所以Wordpress上应该有解决问题的插件吧?于是就询问了在个人博客方面比较有经验的葵中剑,他推荐了我一个叫“Advanced Category Exclude”的插件,也介绍了我一种直接修改源代码的方法。

我在Wordpress的插件页面搜索了一下,发现这个ACE插件已经两年没有更新了,从2.9开始便已经不能够正常地工作了。而因为我个人是比较热衷于版本的,经常性地需要更新,所以修改源代码也不会是一个合适的办法,无奈只好继续在插件列表里乱翻,最后终于找到了一款名叫“Front Page Categories”的插件(说实话我以前一直以为这个 Front Page 指的是微软的那个软件 = =),装上,能用!而且功能方面不多不少刚刚好是我所想要的。

这个插件的设置页面,列出所有分类的复选框,在首页(FrontPage)显示的打勾,不显示的去掉勾,保存,然后就生效了,别的多余的功能一概没有,干净利落。考虑到以后在别的地方可能也还用得上,留下此文存档~

泽丰弗雷(Frey)IE8耳塞升级线一耳朵听感小结

前些天发现IE8导线连接左单元的地方脱线了,随时可能断的样子,心里总是不踏实,于是下决心乘机升级导线。在原版线和网上数款常见升级线之间犹豫很久后,选择了这款泽丰(Zephone)出品的弗雷(Frey)。前天收到了导线,稍微用了两天后,来对这款线材的感受稍微做一下记录和分享。本文主要针对Frey和原版导线的差别进行比较。

我的整体感受——Frey的总体平衡偏向高音,属于+的类型,有点类似之前被我卖掉的UM3x,但是不像UM3x那么润;距离感觉比原版线要,但是也还不至于UM3x那样高音一上去就没了方向感,也没那么闷。

高频是Frey最大的亮点。相比原版线,Frey的高频很,能冲到很,而不像UM3x那样冲到一定高度后冲不上去能量全堆在那里。但是它还是破坏了IE8的三频平衡,高频比较突出,有点掩盖了并不特别突出的中频和低频,尤其是低频。其实Frey的中频也是相当不错的,至少不至于感觉和高频脱节,而低频则是中规中矩的表现,不过这种时候,IE8的进气量调节旋钮就发挥作用咯!

向老板咨询几款线材的风格时,老板曾说Frey的气势比较好。现在觉得这么说法并不能算错,但是也不全对。Frey的气势在于有强悍高频辅助的中频,比如说我听JPOP为主,电吉他和贝斯咆哮的时候,那种华彩绚丽的气势确实是原版线材无法比拟的,但是如果你想要享受下鼓点那种暴风雨般的气势,Frey则完全表现不出来……

放下音质,再来看看线材本身的质量。Frey的线材用料还是蛮不错的,但是有两个缺点:其一是单元插口这里很,相比原版线要用螺丝刀撬才能撬下来,Frey轻轻一拉就掉下来了,我好几次耳塞放在口袋里拿出来就只剩线了单元还在口袋里,走在路上总是担心单元会不小心掉下来;其二,线上做了一对耳挂,Frey本身线材比较粗也比较硬,加一对耳挂是为了方便固定在耳朵上,但是这么粗大的耳挂对于我这样戴眼镜的人来说可不是一个好消息……

稍微总结一下Frey音色的几个关键字——很亮,略润,高频好、高,略近,插头松

几个VPN的简单测试……

之所以写这篇文是因为……太久没写过任何东西了……实在不太好意思……

最近工作方面非常颓废,也就实在没什么感兴趣的东西能写。原来想写一篇关于CSS常见的纵向分栏、横向分栏问题的文,不过因为还存在很多问题没有解决,也就还没动笔,先预留着,等换工作中间的休息时期写吧~

写这篇文纯属蛋疼,随便搜罗了我自己在用的几个VPN(可惜12VPN退了,不然也能来试试),很片面而随意地测试了下带宽,使用的是Speedtest.cn的美国东海岸宾夕法尼亚测试节点列表如下:

品牌 产品 线路 售价 下行(kbps) 上行(kbps)
Puff SSH 商业版 美国 16美刀/年 836 374
VPN Plan A 美国 10美刀/年 868 358
VPNCUP Free 美国 264 192
VIP 美国 10人命币/GB 1593 363
Foxvpn Free 1 美国 46 82
Free 2 美国 1484 328
Free 3 台湾 60 89
Free 4 美国 179 181
VIP 1 美国 25人命币/月 1680 350
VIP 2 台湾 与上一条共同 61 161
Linost(VPNChina) Fremont 美国 18人命币/月 212 348
Seattle 美国 与上一条共同 601 312

结果发现,免费服务中Foxvpn的2号服务器带宽出奇地好,甚至和一些收费线路相当,着实让人意外。

其实我现在还有在使用EVOVPN和12VPN,不过都因为某些原因无法测试。而我最主力的科学上网工具还是Puff的SSH啊,果然还是便于局部代理且链接相对可靠的SSH代理更方便~

还是要提醒一下:本测试非常不全面,全部只测试了宾夕法尼亚一个节点,对于两个台湾线路来说着实不公。另外,本测试也没有包括稳定性测试,这对于链接相对脆弱的VPN来说是非常重要的一个特性,千万不可忽略。

[转]技术文化和惨淡命运 —— 怀念中国雅虎

本文转自CNBETA,原作者不明(CNBETA未注明来源链接),无法为原作者提供外链流量(虽然少得几乎没有),非常抱歉。以下为全文:

很早就想写这么一篇文章了。我离开中国雅虎已经一年有余,在中国雅虎工作的那段时光是我最珍贵的回忆之一,和以前的同事吃饭聊天的时候也经常会怀念一下中国雅虎,怀念得多了,就觉得不如写篇文章好好回顾一下。很多事情虽然已经过去,但有些话不说出来,到底意难平。

从2008年7月份毕业之后加入了中国雅虎,到2009年9月份跟着中国雅虎工程技术部全体人员“被跳槽”到淘 宝,我在中国雅虎只呆了一年多的时间。这个时间并不长,甚至可以说短得可怜,所以我或许不是写这篇文章的最佳人选。但是,中国雅虎给我的是人生第一份工 作,凭着初生牛犊对社会的好奇心,我对公司的文化、技术、架构、流程包括产品设计等各个方面都有浓厚的兴趣和广泛的了解,从这个方面来说,由我来写这篇文 章也是合适的。而且最重要是,我愿意把它们写出来。

在进入正文之前,先开诚布公地声明一下:众所周知,中国雅虎是阿里巴巴的一个子公司,所以文中我也不必遮遮掩掩地用“某电子商务公司”来代替。而且我对阿里巴巴这个公司有意见,不代表我对阿里巴巴的员工有意见,如果伤了某些人的感情,先说声抱歉,请您发扬一下风格,在这里也“拥抱变化”一下。

正文:

我在 2007 年底通过校园招聘拿到了中国雅虎的 offer ,但实际上在我2008年7月份入职的时候,中国雅虎的品牌虽然还在,公司却已经在7月9日和口碑网合并了,改名叫做“雅虎口碑”。尽管这样,到现在为止我还是厚着脸皮说自己原来是雅虎的,因为那里让我着迷和真心喜欢的东西全部都是紫色的,而不是橙色的。

雄厚的技术实力

中国雅虎最好的一个地方就是它和 Yahoo 全球共享同一个技术平台,那是一个有十几年历史的技术平台。Yahoo 的技术文化不如 Google 的工程师文化那么有名,但 Yahoo 在相当长的一段时间内都是互联网的旗帜,吸引了全球大量的技术牛人加入,Yahoo 的技术平台就是他们的知识、经验和心血日积月累的成果。尽管阿里巴巴收购了中国雅虎,但是在技术方面并没有对中国雅虎做出太大的改造(幸好没有改造),所 以就工程师来说,每天更多接触到的还是 Yahoo 的东西,而不是阿里巴巴的东西,对我影响最大的也正是这些东西。

一、Linux 和开源文化

之前一个中国雅虎的同事,他是工作了几年之后才来中国雅虎,有一次他说:“雅虎是我见过的最尊重 Linux 的一家公司”。什么叫做尊重 Linux 呢 ? 不是在服务器上装个 Linux 跑 Apache 就叫做尊重 Linux 。在雅虎很多同事日常都使用 Linux 操作系统办公,即使有一些人使用 Windows, 也都是使用 pietty 或者 Xshell 等工具远程连接到开发机器上使用 VIM 做开发。不只是日常工作,在雅虎全球的技术体系中,产品的上线和发布也都借鉴了 Linux 包管理的方式:所有的产品都会被打成包放在一个专门的服务器上,产品的部署和升级就变成了简单的装包操作,绝对不会出现最后上线的时候文件路径出错等低级 问题。Yahoo 的技术平台是深深扎根于 Linux 和开源文化的。

大型互联网公司一般都会使用开源的产品,同时也向社区贡献代码。Google 和 Facebook 经常将自己研发的成熟产品开源,Yahoo 当然也不例外。而且 Yahoo 不仅仅给社区贡献代码,它在设计方面也拥抱了开源文化,将多年研究总结的设计模式库 共享了出来。在 Yahoo 内部,很多代码都是存放在 CVS 里面的,并没有限制读的权限,任何员工都可以查看里面的代码,这对于那些小团队内部代码都不敢共享防员工如防贼的公司来说应该是非常不可思议的。另外, Yahoo 的工程师也经常出现在各种技术会议上,分享自己项目的架构、流程和经验。虽然这些更多都是 Yahoo 全球技术团队做的事情,但是对于他们那种开放共享的精神我们是非常认同并且向往的,你会觉得做一个工程师很自豪,而不会觉得自己是民工、做技术没前途。这 种认同感和成就感乍看上去没什么,但实际上它决定了你对技术的追求和态度,也会影响你以后在职业上的选择。

二、浓厚的技术氛围

虽然2008年的时候中国雅虎已经被折腾得快不像样了(这点后面细说),不过那个时候还是有浓厚的技术氛围的。让我印象深刻的一件事情是 Google Chrome 浏览器刚发布的时候,大家都立刻下载下来使用,但由于公司内网的一些问题无法打开网页。当我正打算把 Chrome 卸载了的时候,忽然发现公司邮件列表里面已经有人发邮件给出了详细的解决方案。从这件小事可以看出公司大部分工程师都不是那种只知道完成工作的人,而是随 时关注新技术和业界动态的人。当时中国雅虎还是有很多牛人没有离开,大家也喜欢在邮件列表里面谈论技术,经常能看到精彩的讨论和解答。最让我兴奋的是,无 论我遇到什么技术问题都不用慌张,即使无法 Google 到答案也可以从同事那里获取到帮助,而且大家也愿意回答技术问题,这对于我这样一个基础很差技术又烂的菜鸟来说真是天大的福气。

中国雅虎还有做技术分享的文化,如果有哪位同事想要分享一下最近学习到的技术,就可以自己预订一个会议室然后向所有的工程师发送会议邀请,有时候还 会有一系列非常系统的课程,我就参加过长达十几个课时的 UED 培训,完全改变了我对 Web Develop 的认识。很多公司应该都鼓励员工做技术分享,但在中国雅虎几乎每次技术分享都会把会议室坐的满满当当,可见大部分工程师都还是想要不断提高自己的技术能 力。直到离开雅虎之后我才明白这种普遍的学习热情有多么难得。我想,业界之所以到处流传着“程序员做到30岁最好转管理”之类的忠告,应该就是因为大部分 公司都缺乏这种良好的技术氛围吧。

三、庞大的知识库

入职的前几天,我每天的工作就是看文档,不是类似“PHP技术手册”那种文档,而是一些 Yahoo 内部的工具手册。Yahoo 内部的文档非常齐全和详细,光是 Yinst 这款工具的使用手册就长达几十页。Yahoo 内部是用 Twiki 做知识管理的,这个知识库经过十多年的积累已经非常庞大,从入门到提高,从 PHP 到 C ,从前端到后端……应有尽有,而且几乎 Yahoo 全球所有子公司的技术资料都是开放浏览的,没有任何乱七八糟的权限设置和保密限制。有这么一个宝藏在,再加上好的学习氛围,如果你想要提高自己的能力的 话,总是可以提高。当初我想从 PHP 工程师转做 Web Developer 的时候,就先把 Twiki 上 UED 部门的所有资料看了一遍,受益匪浅。

国内大部分互联网公司都是没有太多技术积累的,因为大部分产品的开发都只追求开发速度,并不会特别追求技术上的极致,就更不要提文档这种东西了。也 正因为如此,从中国雅虎出来看到其它公司的知识库的时候总有不过瘾的感觉,可能也只有像 Google, 微软和 Facebook 这样的公司才会有像 Yahoo 那样的知识库吧。在和之前一些同事吃饭聊天的时候,大家也总是会怀念那个无所不包完全开放的 Twiki ,好像少了一个忠实的朋友一样。我们由衷地尊敬那些在完成工作之余还愿意总结项目经验并花时间写 Twiki 的工程师们。

四、完善的流程

第一次参与项目开发的时候,我的 Leader 领了一个 MM 过来说:“这位是项目的 QA 负责人”,我当时愣了一下:“呃…… QA 是做什么的?” 尽管在大学里我也在实验室做过一些项目,但那些项目基本上都是我自己负责所有的事情,完全没有分工和流程的概念,所以也不知道 QA 是负责产品测试工作的。进入中国雅虎之后,我才第一次接触到商业产品的开发流程,不过由于那个时候中国雅虎已经半死不活,我也没有受到有关流程的入职培 训,以至于在做了好几个项目之后才真正熟悉了完整的流程。

中国雅虎的开发流程沿袭了 Yahoo 的开发流程,乍看之下很平常,对于已经熟悉的工程师来说还显得枯燥,但后来我特别留心了这套流程之后,非常惊奇于它的严谨和高效,所以这里要详细说明一 下。Yahoo 的内部生产线分为三个相互独立的环境:开发环境、测试环境和生产环境(即线上环境)。这三个环境虽然独立,但它们的配置都会尽量保持一致,这样就可以保证 开发完成的产品不会因为环境不同而出现问题。在开发的时候,我们会在开发环境中搭建虚拟环境,开发完毕之后开发工程师会自己在虚拟环境里面测试,保证没有 大的问题,然后就会把所有相关文件打包上传到雅虎全球统一放置产品包的地方。上传完毕之后,就会发邮件通知 QA 部门相关人员,邮件内容里面要写明产品在测试环境的部署步骤:需要安装哪些包、是否需要修改数据库等等。然后 QA 就会开始测试,如果发现 BUG 就会写到 Bugzilla 中,指派给相应的开发工程师,开发工程师就会在开发环境中定位BUG并修正,修正一些BUG之后就会再次打包升级产品的版本,然后QA 会将新的软件包部署到测试环境验证之前的 BUG 并报告新的 BUG 。整个测试过程中可能要发布好多个版本,直到所有 BUG 被修正为止。修正完毕所有的 BUG 之后,开发工程师就会填写上线申请,Ops 看到申请之后就会安排一个时间把产品部署到生产环境。一般来说,生产环境不止会有一台机器,所以 Ops 会先从生产环境摘下一台机器部署,部署完毕之后会告知 QA 和开发工程师,然后 QA 和开发工程师就会修改 Hosts 文件,配置域名指向那台机器进行线上的测试,如果测试没有问题,那么就会把软件包部署到生产环境中所有的机器上,完成上线;否则就进行回滚,取消这次上 线,也不会影响到线上的用户。

整个流程大概就是这样,但是要特别注意的是以下几点:1. 开发工程师只能接触开发环境。他所能做的就是在开发环境中开发、改 BUG 和打包上传。如果他去测试环境中修改 BUG,就很有可能忘记修改开发环境中的相应代码,这可能会导致产品测试通过但是上线之后却发现大的问题。 2. 产品“封版”之后就不可以做任何改动,如果有改动,即使只改动了一点所有功能也要重新测试一遍。所有的 BUG 都修改完毕之后的那个版本就会进行“封版”,那就标志着这个产品随时可以准备上线了。如果真的发现了新的 BUG 要修改的话,那么修改之后就需要重新打包重新走一遍完整的测试流程,只有这样才能够保证就算修改代码过程中引入了新的 BUG 也不会被遗漏。 3. 上线手册要详细。开发工程师要详细写明每一个步骤,不只是说明性的文字,还要把具体的安装和修改命令完整地放上去,如果写得好的话,那么 Ops 的同事只需要把上线手册里面的命令逐行复制到服务器上运行就可以完成上线。

这样的流程有什么好处呢? 首先,它最大地降低了上线风险。因为开发工程师不能接触到测试环境,只能打包让QA测试,所以完整经过测试的产品上线之后基本不会有什么问题,况且上线的 时候我们也要先部署到一台机器上进行测试之后才会决定是否上线,即使上线不成功也可以在不影响用户的情况下回滚。中国雅虎的上线极少会出现问题,很多时候 我们上线到半夜只是因为那个时间段用户访问量最小,而不是说焦头烂额地忙活几个小时一直到半夜才上线成功。其次,它使得各个部门职责分明。开发工程师和 QA 通过 Bugzilla 沟通,和 Ops 通过上线手册沟通,因为沟通渠道唯一而且清晰,所以就可以完全责任到人,出了问题也很容易定位到具体环节。比如说,如果产品测试通过之后在上线的时候出现 了问题,那么基本就可以确定是 Ops 操作失误或者上线手册没有写好。职责分明之后很多事情也变得有条理,大家就可以各司其职、专注本职工作并且合作愉快,开会的时候也可以明确知道需要哪些人 参加。

完善、清晰的流程从根本上解决了一些问题,创建了一个非常好的环境,这样我们就可以把心思都放在如何开发和测试上面,而不用担心诸如“如何上线才能 不出错”等琐碎的事情。所以尽管中国雅虎的高层那么不靠谱,我工作得还是很开心,因为这个流程保证了管理层再怎么乱开发也不会乱。记得那时候很喜欢改 BUG ,有时候改得兴起会把之前版本遗留的 miss BUG 一并改掉,加班也是颇有兴致,不是很能明白为什么网上大部分程序员讨厌加班讨厌得要死。现在我明白了。

五、自动化工具

工欲善其事,必先利其器。如果没有那么多好用的自动化工具,那么 Yahoo 的流程就不可能如此完善。Yahoo 内部有很多非常好用的工具,而且这些工具都有非常齐全的文档,也可以在 Twiki 上找到不少相关资料。这些工具之所以在 Yahoo 会起到那么大的作用,是因为 Yahoo 全球所有的技术团队都在使用它们,Yahoo 所有的服务器上也是默认安装了这些工具。这些工具就形成了一套全球 Yahoo 工程师通用的话语体系,可以想象它们帮助 Yahoo 节省了多少沟通成本。

由于考虑到服务器的安全问题,Yahoo 的这些工具的使用方法是对外保密的,这里我只简单说一下 Yinst 这款工具的强大。假如要把软件包 example_1_1_0.tar.gz 部署到 a1.yahoo.com ~ a10.yahoo.com ,那么只需要下面这样一行命令:

yinst install example_1_1_0.tar.gz -h a[1-10].yahoo.com

就可以完成整个上线过程。由于好奇的缘故,在上线的时候我比较喜欢跑到 Ops 那边看他们是如何操作的,然后发现其实他们在上线过程中执行的命令很少。因为工具好用,所以产品极少因为 Ops 这个环节出现问题,上线就变成一件比较轻松的事情。

中国雅虎的产品和业务确实不好,搜索不如百度,新闻不如三大门户,“雅虎助手”是人人皆知的流氓软件,邮箱也出过丑闻,而且被 Gmail 和 QQ 邮箱远远抛在后面。中国雅虎最广为人知的也都是这些不光彩的事情,但这里我想让很多人知道,对于一个对技术还有追求的工程师来说,当时的中国雅虎真的是一 个很好的工作环境。至少对于我自己来讲,我从 Yahoo 学到了太多太多的好东西,而且这些东西还只是 Yahoo 精华中的一小部分,如果不是阿里巴巴集团战略调整,我一定会在中国雅虎多呆两年。

中国雅虎之死

有个同事曾经说过:中国雅虎就是中国互联网的黄埔军校。虽然别的老牌互联网公司也为行业培养了不少人才,但是没有一个公司像中国雅虎这么悲情。很多中国雅虎的员工离职不是自己想走,而是不得不走,看着原来好好的一个公司变得完全没有前途,只好选择离开。

关注互联网的人应该都知道,在 2005 年的时候,阿里巴巴收购了中国雅虎的全部资产,并享有雅虎品牌及技术在中国的独家使用权。中国雅虎尽管之前也一直水土不服,但被阿里巴巴收购之后悲惨命运才刚刚开始。

关于中国雅虎的折腾史,大家可以去看一下这篇文章, 里面说的已经很详细。从网站的变化就可以看出中国雅虎的摇摆不定,在阿里巴巴入主的这 4 年来,中国雅虎就换了 5 任总裁,每位新官上任后都会颁布新的战略,网站也会随之大变脸。“治大国若烹小鲜”,这么简单的道理我相信阿里巴巴的高层不可能不明白,就算大象可以跳 舞,中国雅虎的舞姿是不是也太难看了点?由此可见,中国雅虎在阿里巴巴集团内部就是一个鸡肋,一个可有可无的品牌。

有一件事情完全可以说明马云对中国雅虎的态度。约在 2007 年前后,马云对雅虎中国资产进行了大幅度调整。在此期间,雅虎相册宣布关闭,从发出通知到服务关闭,前后不到 20 天。这种缺乏对用户起码的尊重的行为,导致相当一部分中国用户失去了存储其中的照片。而且它引发的用户对雅虎品牌的失望和不信任,对雅虎来说更是难以挽回 的损失。大家都知道,“客户第一”一直都是阿里巴巴宣扬的核心价值观,难道雅虎相册的用户就不是客户?到底是马云铁了心要把雅虎品牌搞砸呢还是所谓的价值 观只是口号?或者是两者皆有?

这几年中国雅虎的历史就是逐渐被瓜分的历史:搜索团队被调走,于是有了后来的淘宝网搜索引擎;IM 团队被独立出去,于是有了后来的阿里旺旺;挖走了广告搜索团队,于是有了后来的阿里妈妈;口碑网发展得不好,于是中国雅虎和口碑网合并,利用中国雅虎的品 牌和技术支持口碑网;最后,中国雅虎的整个工程技术部都注入淘宝,原来的主要业务“雅虎关系”直接关闭并且推荐用户使用淘宝网的“淘江湖”。时至今日,中 国雅虎已经气息奄奄,再无回天之力了。

我经常觉得,恩,马总在下一盘很大的棋,我们这些普通员工是不明白的。不然为什么“搞死中国雅虎”这个庞大的项目规划和施行得这么好?还是阿里巴巴 一直在用实际行动考验中国雅虎员工的价值观呢?而且颇具讽刺意味的是,尽管马云费尽心思拿到了中国雅虎的搜索资源,最近却又和微软的 Bing 合作推出了 Etao 搜索,当初的那些搜索资源都用来做什么了呢?

还有一点不得不提的是中国雅虎和阿里巴巴之间的文化冲突。阿里巴巴一直都不能算一个真正的互联网公司,它只是以互联网作为工具,大部分业务的进行还 是靠线下的销售。阿里巴巴最重视的是销售部门,整体的文化是销售文化,它所取得的成功也都只是商业上的成功,这也就从根本上决定了它不可能像 Google, Yahoo 和 Facebook 等这些真正的互联网公司具有理想主义色彩,也不可能成为优秀工程师向往的地方。马云自己也经常放言说要“超越沃尔玛”,从来没有说过要超越 Google 之类的话,因为根本不在同一个领域,阿里巴巴更像一个传统的商业公司。我并不是说做电子商务的公司就不算互联网公司,同样是做电子商务,Amazon 就是互联网行业的领头羊,它非常重视技术,还是最早提供云计算服务的公司,它就是一家真正的“IT公司”。

而中国雅虎的技术资产全部来自美国 Yahoo ,工程技术部也继承了 Yahoo 的“技术文化”。“技术文化”偏重简单实用、冷静思考和解决问题;而“销售文化”则重视加油鼓劲,更喜欢喊口号,越热闹越好。我承认这两种文化都有它们的 合理之处,但是强迫工程师接受那种“销售文化”就会有很多矛盾出现。阿里巴巴内部有时候玩得还比较过火,跳钢管舞倒也算了,但很多时候做游戏会直接让一个 同事站到前面,然后轮流问他诸如“第一次用了多长时间”之类的问题。并不是所有人都喜欢这么玩儿的,“贱文化”和“骚文化” 的最大一个弊端就是很容易引起一些人的反感让他们觉得被侮辱,而公司不是经常倡导要对人才各尽其用么?为什么要用这样的文化把一些“思想保守”的人驱逐出 去呢?我就听说过一些非常优秀的工程师因为这些东西而坚决不去参加公司的培训和集体活动,中国雅虎的很多人应该也是因为无法适应这种“销售文化”而出走 的。

另外,当年和我一起通过校园招聘来到雅虎本来有不少人,在 2008 年 3 月份的时候我们还曾一起在北京参加了一个叫做“集结号”的新人培训。不过在我入职之后发现,有几个人直接被调动到了阿里巴巴在杭州的其它子公司,还有几个 做搜索的同学虽然人在北京,签的却不是雅虎,而是什么“阿里巴巴集团搜索事业部”——当时雅虎的搜索部门已经被独立出去了。之后我也和那些最终没有来雅虎 的同事聊过,他们都表示很郁闷,表示自己并不是很情愿去其它公司。这件事情让我感到很气愤,明明大家都是冲着中国雅虎来应聘的,为什么在发放 offer 之后又进行调动呢?当然,阿里巴巴肯定是做了一些说服工作让那些同事“自愿”服从调动的,但是那个刚好出现了金融危机工作比较难找,其它公司的招聘也早已 结束,而且大家都是初出茅庐的学生,能不服从么? 那几个同事也实在是太光荣了,刚入职就完美表现了自己“拥抱变化”的价值观,KPI 应该给五分。

不只是新入职的员工,因为中国雅虎的业务变化频繁,平时也经常会出现内部调动,而中国雅虎在北京,调动的话就很有可能需要去杭州,这对于很多已经在 北京安家的同事来说并不是一件小事。但不服从调动,就是价值观有问题。五十六种语言,汇成一句话:拥抱变化拥抱变化拥抱——变化。

在写这篇文章的时候,我不断提醒自己:我的目的是要让大家了解一下中国雅虎,千万不要写成针对阿里巴巴的檄文。但真实情况确实是那个样子,很多事情也是人人皆知,无法绕过去不说。相信很多人都还记得中国雅虎首页的那次糟糕的改版,把原来清爽干净的页面改成了屎黄色, 据说这是当时的 CEO 金同学坐在设计师旁边亲自指导的结果。如果一个乡镇企业的老板非要外包公司的设计师把网页做成他想要的也罢了,但作为一个缺乏审美能力的 CEO 居然连“把设计的工作交给设计师”的觉悟都没有,实在让人觉得不可思议。就算是一心想要“去雅虎化”,也没有必要这么羞辱设计师们吧?

不知道为什么,有些东西不用每天灌输也深得大家认同,怎么折腾都无法斩草除根。我在雅虎的时候从来没有任何一个人和我们说“你们要热爱雅虎,要以雅 虎为荣”之类的话,但是每次公司给员工发放印有雅虎 LOGO 的杯子或者背包的时候,大家总是一哄而上,疯抢干净。在中国雅虎和口碑网合并之后,因为担心以后再也领不到雅虎 LOGO 的笔记本等文具,不少同学都开始申请办公用品留作纪念。由这些事情就可以看出工程师们认同的到底是哪一种文化,大家自然会用脚投票。这些事情甚至让中国雅 虎的一些非工程师同事也觉得难以理解。这种生命力强劲的外来文化可能也是阿里巴巴一直不满中国雅虎的原因。

真正的开放应该是同事之间开诚布公、乐于分享和坦然接受批评,而不是不分场合地讲荤段子,不是让别人站到前面然后问别人“第一次用的是什么姿势”; 真正的“员工第二”是站在员工立场上考虑问题、虚心听取员工提出的问题,而不是在员工有意见的时候首先进行价值观教育,不是强迫员工拥抱不可理喻的变化; 真正的对“用户体验”的重视是尊重用户、切身考虑用户感受,不是在年会上把某个子公司的总裁骂哭,不是为了巨额广告费用而在首页做弹窗,不是让员工为了 KPI 每隔几个月就想着改版;真正的“幸福感”是来自于发自内心的对公司的认同、对公司产品的成就感,而不是来自于整齐划一的口号和对某个人的崇拜,也不是来自 于被灌输的“换个角度看世界”。脱离了原本的初衷,就算宣传得再好口号喊得再响亮,也不过是看上去很美的空洞的形式主义,这样的公司有什么底气去做“百年 公司”呢?

技术的悲哀

有着世界级的研发实力却不得不悲惨收场,我想再没有人比中国雅虎的工程师更能强烈地意识到技术所能决定的事情实在是太少太少。在中国,互联网只是一个营销工具, “技术改变世界”也不过是一个笑话。那些商人们从来不相信“一个优秀的程序员抵得上一百个平庸的程序员”,却虚伪地把“我不懂技术但是尊重技术”挂在嘴 边;他们整日想的不是创造价值,而是如何赚更多钱;他们更相信“廉价劳动力”所带来的成本优势,也总能把“技术密集型”的公司做成“劳动密集型”,以至于 国内的互联网公司不是山寨就是血汗工厂,雇佣着大批大批会写代码的高级民工。这样的环境和氛围,暂且不说 Google 和 Apple 这样伟大的公司,什么时候我们才能有产生像 37Signals 和 The Omni Group 那样的小公司的土壤呢?

文章的最后,还是那句老话:他日江湖相逢,再当杯酒言欢。

各位雅虎人,多保重了。

[转]Dreamweaver“无法更新菜单,将不会安装该扩展”解决方法

原文链接:http://blog.365jieri.cn/dreamweaver-cannot-update-the-menu

个人使用的Dreamweaver CS5官方中文原版,9月初自动更新html5 pack后,就提示“无法更新菜单,将不会安装该扩展”,更要命的是每次开启Dreamweaver都会自动安装扩展且每次都会出现这个错误提示。之前Google,百度均无法找到答案,一度放弃。

今天是中秋节,但不经意打开Dreamweaver还是看到了这个很不友好的提示,于是试着再次Google,发现很多朋友都出现了这个问题,但无法解决。怎么办?只能想到老外,很多时候无法解决的问题都可以在老外网站找到答案的,个人经验。

于是Google一下“无法更新菜单,将不会安装该扩展”的英文“Cannot update the menu Dreamweaver”,终于在第二页找到了个2006年的老帖子,仔细看了下最终在Helene Cornier的解答中找到了个思路,废话不多说,方法如下:

删除C:UsersfeifeiAppDataRoamingAdobeDreamweaver CS5zh_CNConfigurationMenus/下的Menus.xbk以及Menus.xml,然后重新启动Dreamweaver即可成功安装扩展,此方法同样适用无法安装zen coding扩展的朋友。

注意:

  1. 此文件夹为隐藏文件,请设置显示隐藏文件,同时删除这两个文件之前一定要备份;
  2. 路径中username为对应用户名;
  3. 我的使用环境为:Windows 7旗舰版32位原版,Dreamweaver CS5官方中文原版。
  4. 此方法有个弊端,即“打开最近的项目”功能无法使用,一直都为空!!!

以上方法在本机测试完美解决,但是不同用户使用环境不同,不能保证一定有用,仅作为参考!!!

如果您在使用中有任何问题也可以留言,大家一起交流探讨!

以上为转发部分全文,非常感谢原作者帮我解决了一个困扰已久的问题!

我对XHTML不支持target属性的联想

前些日子,本着好奇去下载了微软的 Expression Studio 试用(还不错用),用 Expression Web 的时候,因为它会自动检测文档标准,而我惯用的 Doctype 是 XHTML 1.0 S,结果,我在n多 a 标签的 target 属性下看到了熟悉的红色波浪线……

XHTML 从 1.0 Strict 开始就不在允许在a标签中使用 target 属性了,以前在研究 XHTML 1.1 的时候曾经遇到过这个问题,但是后来渐渐被我遗忘了。于是我又回头去网上查找了各种解决方法,也参考了一些前辈们的想法,而这些想法也改变了我对这件事的认识。

我们知道,a 标签的 target 属性一般最常用于两个地方,一个是控制链接在新标签页(窗口)中打开,另一个则是控制链接在指定的 frame、iframe、弹出窗口中打开。

事实上,W3C委员会是一开始就反对在a标签中使用target。也许有人要问,如果没有target,怎么才能让页面在新标签页或者新窗口中弹出呢?W3C委员会的答复是:设计者没有权利决定用户用什么方式打开页面!

是的!这才是最大的关键所在!经常翻墙上国外Google的朋友也许会有这个印象,英文版的google.com的搜索结果,是在当前页面直接打开的,而不论当年的google.cn还是现在的google.com.hk,都是默认在新标签页中打开的。事实上,正常情况下,所有页面都应该是在当前标签页内打开,哪怕是跨站的链接,如果用户需要从新标签页中打开,他应该很习惯于从右键菜单中选择,或者按住 Ctrl + 单击,又或者一些浏览器中是 Ctrl + Shift + 单击去打开页面。而国内网民们却似乎完全没有这样的习惯,一方面他们习惯于被各种网站上混乱的链接打开方式左右,另一方面,受到这种用户习惯的影响,网页开发人员也只能遵循这一规矩,如果不在链接里加上 target 属性,反而会被客户或项目经理骂吧,而结果就是越走越远的恶性循环而已。

明白了正确的思考方式,再回头来考虑解决方法,当然也时刻不能忘记 HTML 语义化、对人对机器都友好的初衷,那么网上盛传的集中解决方法,哪一种更合适呢?

网上现在一般有2大类解决方法,其中第一种比较冷门,也比较有技术含量了,那就是扩展 DTD。我曾经在一位国人前辈的博客上见过这一解决方法的详细教程,老实说,我基本看不懂。不过 DOCTYPE 可以扩展这件事我倒是知道,似乎官方的规范介绍里就有强调这点。这位前辈在 DOCTYPE 中,除了原有的 DTD 外,再额外加上自己定义的扩展 DTD,从而重新加入 target 属性。这种方法从技术角度来看,似乎是最强大的,但是它也有一个缺点——从本质上来说这其实就是一种规范的倒退,如果不得不通过扩展 DOCTYPE 去实现原先 XHTML 1.0 T 里包括,而在 XHTML 1.0 S 中删除的属性的话,还不如直接使用 XHTML 1.0 T 算了。

另一大类方法就是用 Javascript 去解决了,当然使用 Javascript 也有几种不同的用法,其中一种最笨的办法就是在每个链接里写上 onclick 属性,纯粹用 onclick 去打开窗口,但是这种做法显然弊端很多,首先是工作量很大、不便于维护,另外用户复制链接地址也会失效,而且一旦客户端发生 Javascript 运行错误,或者用户禁用了 Javascript,那整个网站就完全无法使用了。

另一种方法这是用 Javascript 获取整个页面所有的链接元素,然后根据这些链接是否被赋予某个特定的属性,而决定是否要给它附加 onclick 事件。而这个“特定的属性”,一般最常见的是用class。而根据上文的分析,除了 class 属性外,我们还有一个更合适的、更符合语义的、对机器更友好的、更面向未来的属性可用,那就是 rel——对链接赋予一个特定的 rel 属性,说明目标网页与本站之间的关系,进而用 Javascript 将所有此类关系的链接设置为在新标签页(窗口)中打开,这样应该更符合 HTML 规范的本意一些,当然最好的做法还是不要干预。

上文提到,target 属性还有一个用途是控制链接在指定的 frame、iframe、窗口中打开,那么这个很容易理解,因为从 XHTML 1.0 Strict 标准开始,所有的 frameset、iframe 都被禁止使用了,而既然规范也禁止浏览器支配用户打开新窗口,那么控制链接在指定窗口中打开也就毫无用途了。

怎么去除一些论坛复制文本中添加的大量广告信息?

在一些论坛中(尤其是港澳地区的一些繁体论坛中),当我们从论坛上复制一些文本时,会发现其中被插入了大量乱码、广告、关键字等信息,这是一个比较老式的系统,其用途是防止内容被盗链。但是我一直主张,互联网是一个开放的世界,互联网上的道德是靠个人素质和观念而非强制措施去做的,这种低级的反剽窃系统,首先在实际效果上完全无法避免内容被复制,其次会在客户端增加大量垃圾信息,浪费带宽、服务器资源和客户端资源,而且当我们想要把这些资源收藏下来时又会非常麻烦。

去除这种垃圾信息的方法有很多,我在这里介绍其中一种,这里需要一个支持正则表达式搜索的文本编辑器,我个人惯用收费的EditPlus,如果需要免费软件,那么还有优秀的开源文本编辑器Notepad++可供选择。除此之外,我使用了Adobe Dreamweaver CS5 来减轻一部分工作。

首先来看下面一段文字:

_L 0x016082B8 0x0001869F
;l-]&Z1V+h._)L☆°** 网站名称 **°☆_L 0x01608488 0x0001869F1A,y0O/l%^'s+A
_L 0x01608658 0x0001869F/o6V8x+m1m:o6b:p
_L 0x0160B1D8 0x0001869F!w3p$R2F4m#c;B:a
_L 0x0160B3A8 0x0001869F"Z:T-{-N-F0D5f

这是一段节选自某论坛的PSP游戏金手指代码,我们真正需要的是:

_L 0x016082B8 0x0001869F
_L 0x01608488 0x0001869F
_L 0x01608658 0x0001869F
_L 0x0160B1D8 0x0001869F
_L 0x0160B3A8 0x0001869F

这样一段而已,后面的都是垃圾信息。

完整的代码有过百行,要去除垃圾信息,一行一行手动删除是非常麻烦的。那么要找到快速解决的方法,首先要知道这段垃圾代码的本质是什么:

_L 0x016082B8 0x0001869F<span style="display: none;">;l-]&amp;Z1V+h._)L☆°** 网站名称 **°☆</span>
_L 0x01608488 0x0001869F<span style="font-size: 0px; color:rgb(255,255,255);">1A,y0O/l%^'s+A</span>
_L 0x01608658 0x0001869F<span style="font-size: 0px; color:rgb(255,255,255);">/o6V8x+m1m:o6b:p</span>
_L 0x0160B1D8 0x0001869F<span style="font-size: 0px; color: rgb(255,255,255);">!w3p$R2F4m#c;B:a</span>
_L 0x0160B3A8 0x0001869F<span style="font-size: 0px; color: rgb(255,255,255);">"Z:T-{-N-F0D5f</span>

这样就很明显这些垃圾信息是怎么隐藏在文章中了,一个是使用了display:none的span元素,另一部分则使用了大小为0、颜色为白色的font标签,那么,只需要把包含在这部分中的内容剔除掉就可以了。

  1. 首先在浏览器里右键鼠标,查看源代码,把需要复制的部分的源代码(注意是源代码)复制出来,单独粘贴在一个新文件里,并把这个文件保存为.html。
  2. 用Adobe Dreamweaver CS5 打开这个html文件,点击左侧的工具栏中自动套用格式的按钮。这一步可以让乱七八糟的文件变得有序,节省一些时间,但是并不是必须的,如果您没有这个软件,大可跳过。
  3. 在文本编辑器中打开文件,点替换,勾选下方选项中的”使用正则表达式“,在搜索文本中填入我们要剔除的东西<span style=”display: none;”>.*</span>,中间的”.*”表示任意字符串。替换文本中什么都不要填,点全部替换,会发现所有被<span style=”display: none;”></span>包括着的文本全部被剔除了。
  4. 用同样的方法解决包含在<span style=”font-size: 0px; color:rgb(255,255,255);”>.*</span>中的内容
  5. 优化排版

至此,文本中没用的东西已经被全部剔除了~