夜袭上海

有一个不算老的年轻人,他有一个很爱他的老婆,还有一个很可爱的女儿,通常有这样身份的人都很安稳,都在努力的工作,用辛苦工作赚来的钱来换一些闲暇时间陪伴家人。而我们这位年轻人的心里却不那么的安份,他总想以自己的方式来体验这个世界。他特别喜欢看有关英雄,独行侠的故事。两年前他喜欢上了骑自行车旅行,吹着风,看着路两旁的风景,享受着运动的乐趣。

这一次是这位年轻人的初次长途旅行的尝试,他的计划是傍晚出发,骑行一夜,150公里的路程,大约早上可以到上海的住处。

在这次旅行之前,他已经计划了很多次不同目的地的旅行,但是时间并没有给他机会,这次他终于抓住了机会。外面有风,是外围台风的影响,在他看来这点风还不足以让轮渡封航,他的老婆很心疼地挽留他,可他还是坚持上路了。

我们的年轻人,有很多装备都是在为这一刻而准备的,配有运动绑带的MP3,车载手电筒,驼包,还有朋友赠送的那辆心爱的捷安特。这些装备很长时间都是静静地躺在储物柜中,但是我们的年轻人始终坚信会用到。

IMAG0379

出发了,我们的年轻人听着MP3,开心的上路了。此时是下午6:30分。刚开始的一段路已经走了很多次,在路上虽然和原计划的路线有点偏差,但是这条路足够的熟悉,丝毫不影响什么。当到了s338公路的时候,征程才刚刚开始。这一次他要走和往常去南通相反的方向,朝着海门前进。

IMAG0386

一路向东,他在留意需要转向的路口,耳边的风声盖过了MP3中的音乐,天色渐渐的暗了下来,他带着的眼镜却让夜色显得有些明亮。天气不错,天上飘着云,有点风,温度是他喜欢的那种,受夏日台风外围影响后的上海的感觉。月亮也开始升起,很明亮,看着月亮,他知道没几天就是月半了。

这次上路,年轻人并没有准备详细的地图,只是在一张A4的纸上记下从Google地图上查找的需要转弯的路口,他很自信自己的方位辨别能力,可经验告诉他如此简单的记录也会出错的,他将自己无法链接GPRS的手机在临行前使用wifi将路线缓存了一下,这样的准备他认为还算很充足。

在骑行了很久还没看到转弯的方向时,他停了下来。直觉告诉他,路口就在附近,这时手机上的路线缓存用上了,果然路口就在附近,他刚走过。他再一次的暗爽,运气真好。掉头来到路口,这是一条小路,没有路名,没有路灯。他找了一个人打听一下,可那个人是外地人,也不清楚,只好去问路口卖熟菜的摊贩,摊贩告诉他这的确是海太汽渡的路,最近在修路,推荐他走另一条。很大,很好走的一条路,摊贩说,你一直向前,第一个路口右转就行,大约8公里。年轻人,心里掂量了下,按照摊贩所说的方向继续上路了。

IMAG0388

吹着风,年轻人很快的到达了转弯的地方。这真的是一条大路,是到海门市的主要通道,转弯处有很多商店,很是热闹。年轻人想去买一瓶盐汽水,这是他在旅行中最爱的一种饮料,味道不错而且还可以补充盐分。可这次他失望了,来之前去超市采购时没有买到盐汽水,这次依然没有找到。年轻人摸了摸口袋,然后拿了一罐可口可乐出来了。来到自行车旁,发现车载手电是爆闪的状态,随手关掉了。年轻人打开可口可乐,骑上自行车又上路了。

这是一条向南的路,过往的车辆不算多,路况也不错,还有一路的路灯。年轻人手中的可乐喝完了,随手捏扁扔到了路边草丛中,在扔可乐罐的一瞬间他感觉到了一种轻松,并不强烈,但是他知道这是轻松的感觉。

夜晚的路上不时有附近的居民出来散步,年轻人像一阵风一样从他们身边飘过。这条路很长,一路上都有路灯,他感慨,现在的生活都那么的富裕,想当初年轻人老家的小镇上安装的路灯到9点以后就会关闭,按照当时的说法是政府无力开支。

年轻人欣赏着路两旁的风光,也在密切的留意一切指示路牌。当看到海门市的界牌时,他笑了,这么快就到了海门。继续前行,进入海门市,路旁他看到了去海太汽渡的指示。当他没有选择那条可以直达海太汽渡的小路时,也就意味着他到了这里要折回再走8公里,路有很多,难走的路近,好走的路远,代价差不多。

IMAG0389

海太汽渡就在前面,年轻人开始感觉有点累了,转了几个弯,还是没有看到海太汽渡的影子,不过他从风中已经闻到了长江的味道。此时已经将近10点,他出发的时候告诉老婆自己会在老婆睡觉前到海太汽渡,为了让老婆放心他拿起了电话。电话中,他告诉老婆,他闻到了江风,汽渡就在前面,让老婆休息去。可他老婆却很是思念,说到了给她发短信。通话完毕,他继续上路。

IMAG0390

人在付出很多体力的时候,胃口会出奇的好,年轻人出发前吃过了晚饭,可是很快就饿了。三下五除二解决了一瓶矿泉水和一根火腿肠后一鼓作气来到了海太汽渡。年轻人开心极了,可是当车子来到渡口值班室,他发现有些不对劲。上前讯问后,才知真的封航了,而且还被告知开航时间未知,让他明早再来。“明早再来?”年轻人不甘心,既然都已经在路上了,怎么能再回头呢? 跟老婆报告后,他还是决定在这里等候。为了掩饰心中的不甘,他将这个消息告诉他的那个整天吵着要嫁人的小徒弟。小徒弟天真的让我去找个如家待着,唉,这前不着村后不着店的地方。

轮渡值班的哥们看我在外面徘徊,上前说,你是要等咯?你可以来值班室坐坐。年轻人心里庆幸,还是好人多。进入值班室,跟值班的哥们聊了起来。说对岸风大,封航了。一般8级以上的风才会封航。那哥们还说,你运气不好,如果早来半个钟头有个想过江的车刚才载了个摩托从苏通大桥走了。年轻人听了这话虽然有些不快,但是还是很乐观的期待能快些通航。

夜,风大了起来,江水开始涨潮,很快就淹没岸边的宣传标语。周围没人,年轻人跑到江边撒了泡尿。漫漫长夜不能就这样干等着,年轻人想到了随身带来的书。年轻人总喜欢带书在身边,而且不止一本。他很渴望看书,可是真正看的却不多,他总是担心当想看书的时候手边没有书,于是他有点强迫症。手边没有几本书,他会觉得不安。这次他看的是《微软的秘密》。

年轻人曾经很幸运的混进微软外围,并在里面工作了两年,他看着书,不断的和自己经历过的微软印证着。他一边看一边感叹微软当初的好时机,以及怪兽一样的微软是如此强大。微软在PC软件领域开创了自己的时代,定制了微软标准,可最近在网络时代,微软却有力使不上。

书的内容很精彩,但是没有挡住瞌睡虫的侵扰,3点多了,年轻人睡着了,在睡着的时候他能感觉到自己睡的很香,而且还打着很响的呼噜。睡时间不长,汽笛声吵醒了他和另外的一个半夜换班后的中年值班员。他们循着汽笛出去,中年值班员告诉他,这是去崇明的船,去太仓的还不确定。年轻人很沮丧地回到了值班室。没多久汽笛声又再度想起,哈哈,要准备过江了。

在船靠岸的间隙,中年值班员看到前面有个骑电瓶车的人,将她叫来问,买票了么?电瓶车说,多少? 15块,转头又来问年轻人,买票没?年轻人随中年值班员进入值班室,小声的说,玻璃上贴的公告,散客5块。中年值班员说,你还有自行车,10块。年轻人对这种事情已经习惯了,于是讨价还价后5元买了票上船去。

IMAG0397

在船上,年轻人看到电瓶车也上来了。船开了以后,年轻人上去和电瓶车搭讪,原来电瓶车也是要去上海,而且从一个比年轻人还远20多公里的地方过来的。年轻人在心里又开始寻找自己的理论,男人年轻时容易冲动,女人则在不年轻的时候冲动。

刚上船的时候天还是黑的,远处苏通大桥闪着灯光。没多会,天开始亮了,风浪不时将船左右的摇晃着,年轻人看着旁边的货车,总担心它要倒下来压到他,他开始打量着坐着的楼梯,掂量着万一危险就往上爬。虽然惊险,货车始终还是没有倒。

IMAG0393

在轮渡上,年轻人对自己的感觉发生了疑问,为什么苏通大桥看到了三次,每次角度都不一样。他甚至想到了鬼打墙,好在最后一次看到的时候也发现船要靠岸了。船靠岸后,电瓶车没有按照约定在岸上等待,直接走了。年轻人上前追了过去,因为电瓶车告诉他,自己从来没有走过这条路,也不知道该怎么走。年轻人追到电瓶车后,问她怎么打算的,她看出年轻人嫌电瓶车慢,说,你在前面走,她尽量跟上。

年轻人以为电瓶车速度应该还可以,就放开使劲的踩,没多会就看不到电瓶车了。在一个路口,年轻人有些不放心,停下来喝点水,等了等电瓶车。电瓶车来了以后,年轻人告诉她,这条路直走然后左转就是去上海的一条直路。其实电子地图告诉年轻人这段路有几个地方需要转弯,可以节约一些路程,年轻人知道自己一时给电瓶车讲不明白,就告诉了她这条简单的路。

早上5点多,太阳已经开始升起,很明亮的天。路上到上海60公里的标示,让年轻人相信再过2个多小时应该就可以到上海洗个澡睡上一觉。却不知,这才是煎熬的开始。

IMAG0398

上半夜连续的狂奔,加上一宿没睡,年轻人的体力已经无法连续的快速骑行。路上遇到几座原来从不放在眼中的桥,年轻人却无力上去,只好下来推着走,这样还能缓解一下一直骑行的双腿。年轻人已经没有力气去注意时间,只觉得太阳越来越热,偶尔飘过的云遮住太阳的光芒都让年轻觉得好清凉。在走小路的时候,年轻人总是故意找一些阴凉的地方,而且年轻人开始幻想,不时的向路边有水的地方望去,总希望可以有个地方可以洗一洗。如果在多年以前,年轻人随时可以到水里,现在能轻易靠近的河边,水上都泛着油花。这就是我们的现代化。

IMAG0399

饥饿,炙热的阳光如影随形,年轻人好不容易找到路边一处阴凉地,补充了一下,也许有一分钟,一瓶水和半袋饼干被消灭了。年轻人不敢多停留,多停留一分钟就要承受更毒辣的太阳炙烤一分钟。

IMAG0400

界牌,是年轻人最爱看到的。[江苏-上海],年轻人已经没有多少力气,只在心里大喊,“上海,我来了”。望着上海的收费站,年轻人拍了张照片,沿着自行车道继续前进。通过卡口时,保障世博会安全的警察、武警并不去检查非机动车辆,年轻人还在盘算着怎么应付检查的空隙,就已经进入沪太路了。

IMAG0401

按照原计划,年轻人并没有在曾经坐大巴经过许多次的沪太路上停留多久就转入到旁边的蕰川路上去。来到上海,一切都不一样了,平坦的路面,详细的标志,这就是有钱的上海。在蕰川路上,年轻人看到了只有上海郊区才能看到的湛蓝的天空,朵朵白云,飘在天上。

IMAG0402

年轻人以为沪太路很长,原来蕰川路也不短。太阳开始发威了,年轻人已经没有快速前进的力气,原来以为不远的距离,却走了很长时间。从蕰川路转到江杨北路后,年轻人记录的地图路线结束了,此时手机上的地图也不给力,因为连不上GPRS,Google地图需要打开两次才能让GPS正常工作。到了这里,Google给的路线显得一点也不经济,按照地图上,我需要到复旦那边然后过江去浦东。于是年轻人开始和自己的大后方沟通,老婆帮他查最佳路线,此时老婆在家里要照顾床上的老妈子,又要耐心的给老公查地图。本来查地图就不是女人的强项,在电话那头,老婆开始不耐烦起来。我们的年轻人,虽然很体谅她,可心里却嘀咕,她什么时候能心平气和的和在外面的老公说话?难道就不担心老公被太阳强暴后从自行车上摔下从此不起?埋怨只是暂时的,路还要继续。

年轻人再一次凭着直觉相信,吴淞渡口就是他过江的地方。在询问了一对老夫妇后,也不顾答案并不十分确定,头也不回的前进了。路上他注意到一辆公路,有时在后,有时在前,在等红灯的时候年轻人和公路搭上话。公路也不知道吴淞渡口是否能到浦东。已经在路上的年轻人,还是选择了继续前进。

在A20底下的泰和路上,一路到底就来到吴淞渡口,年轻人在这里终于补充到一瓶盐汽水,虽然不是他喜欢的延中牌,可这是凉的。在渡口年轻人再次向工作人员确定这是去浦东的轮渡时,被工作人员仔细的检查一遍。这是来上海一路上接受的唯一一次检查。世博,上海的安全检查多了很多。可这真的有用吗?最多也就是威慑作用,顺带多花一些经费改良和增加装备。

浦东,我来了,年轻人感觉胜利在望。在渡船上年轻人给自己换了块黑色的镜片,原来黄色的镜片在白天太耀眼。顺便擦了擦脸上和脖子上的盐粒。

下了渡船,年轻人找不到路,不知道该如何走。他开始留意路边,他觉得上海会有很多地方卖地图,一般卖报纸的地方就有。路两旁飘来鸡肉的香味,让年轻越发的感到饥饿。年轻人不敢停留,因为这一停留不知道何时才能到达。出了渡口没多远,年轻人就看到卖报纸的地方,而且的确有地图卖。买到地图,跟地图老板一起研究了路线,然后又上路了。就在看地图的那一会功夫,自行车座子已经滚烫了。

买地图的这一条路叫江东路,一直走到浦东北路,然后再到五洲大道,转弯直走,东靖路就不远了。

江东路不宽,过往的大卡车很多。路两旁开着很多店。在靠近江城路的一段,不少的工厂在路旁,有的地方还在修路。因为在轮渡上的少许休息,年轻人的体力好了不少,这段路走的很快。过了江城路,年轻人开始凭着路牌骑行,在上海只要看路牌就不会迷路,如果走过就更快。在这一段,绕来绕去,年轻人来到了杨高北路,看到了外高桥保税区。在路旁还看到高耸的麦当劳广告牌。

外高桥南地铁站,让年轻人很兴奋,因为下面不远处他看到了平时经常坐的181路公交车的站牌,他开始数到家还有几站路。3站,是的还有3站路就到了。年轻人现在已经没有多少力气了,自行车的速度只能是平时散步时的那样。不过年轻人的意志力还是很强大的,在如此炙热太阳下,饥饿,口渴都没有让他中暑。看到上坡时,再一次的发起了冲锋。多年前,年轻人就养成了一种习惯,不管是跑步还是骑车,在最后阶段他总能凭着毅力向前冲刺。

2站,1站,终点就在眼前。年轻人好饿,心里在盘算,是先到家洗澡,歇息后再出来,还是弄点吃的打包带回去?当到了平时坐车的地方,年轻人再按不住饥饿去买吃的去了。3个汉堡,3个肉串,一份凉皮。汉堡和肉串是现做的,几分钟的光景让年轻人感觉如此的漫长。

拿上吃的,年轻人终于回到了在浦东的住处。三下五除二推掉身上的衣服后奔向浴室。

中午12点,结束了,年轻人的第一次长途骑行就这样结束了。和计划偏差了很长时间,也多骑了几十公里,可我们的年轻人还是成功了。

ps:
老婆还是一个好编辑


我学习Kohana的方法

Kohana 是一个PHP的开放框架,所以在学习之前需要深入了解PHP。另外Kohana也是一个遵循MVC模式的开发框架,同样在学习之前还需要深入了解什么是MVC,最好动手写过MVC模式的页面,一个练习也行。

接下来我们从那里开始呢?

在动手练习之前,需要阅读文档。先哲说:闲时读手册,忙时问Google。刚开始我们有充裕的时间,那么开始阅读文档吧。

作为入门,属于Getting Started的文档需要优先阅读。通过阅读What is Kohana?,来了解下Kohana都有哪些东西。而 Model View Controller则告诉你Kohana使用了一种改良型的MVC模式。接下来 Cascading Filesystem 告诉你这个改良型的MVC模式是怎么工作的。最后通过阅读Request Flow来了解从浏览器发出请求后Kohana在服务器端是怎么处理的。okay,通过阅读以上的文档就入门了。

阳明先生说,知是行之始,行是知之果,知行功夫不可离。意思是光看文档并不代表你知道,需要动手操练一番才算真知道。

Kohana安装还是很容易的,将整个工程放到web服务器上就可以工作了。如果遇到问题跑不起来怎么办?Fix it! 安迪教授也说了,当你在工作过程中没有得到想要的东西时你就获得了经验。

程序员动手的第一招是”Hello World”,Kohana已经提供了这一招,所以通过阅读源码来学习这一招是如何发出的,因为Kohana是改良的MVC(也就是HMVC),那么需要多注意项目的目录结构,看看这些源文件是以什么样的方式组织的。在观摩Kohana提供的入门招数后,让我们来破解这个招式。尝试着修改文件名,类名,以及改变文件目录位置等来验证这一招在什么情况下会失效,这对你加深理解有帮助。

入门招数,学了也拆了,开始模拟演练吧。

新手入门第一课,留言板。很多前辈都推荐新手来实现一个留言板用以学习新的开发环境。动手之前,我们要有个蓝图,不用大,将期望了解的知识点囊括进去即可。web开发的知识点通常有,Session,Cookie的管理,数据库的操作,URL的管理,Ajax,表单验证,异常处理等。限定已经有了,那么就开始来实现留言板吧。

演练开始我们就忙了起来,这时Google就发挥作用了,遇到疑难杂症问Google。作为修炼内力,阅读API加深理解各个类是如何工作。

最后,先哲也说了,尽信书不如无书。文档也有bug,当实际操作和文档描述的行为不相符的时候,那么我们就要玩外科手术了。这就是开源的好处,有bug直接解剖,肚皮划开后一目了然!


快速建立HTTP Server共享文件

Python内置了一个简单的Web服务器可以用来建立一个HTTP Server来共享某个目录下的文件,尤其是在Unix-Like+windows的混合网络中更是方便快捷。

Server
假设 IP 为 192.168.1.1

首先进入到需要共享的目录,如

cd ~/share/
python -m SimpleHTTPServer 8000 #Python 2.6

OR

python -m http.server 8000 #Python 3.0

Client
访问http://192.168.1.1:8000就可以看到Server共享出来的文件了。


如何识别手机浏览器信息

想作一个网站,根据不同的访问者提供不同的显示模板,如适合手机的模板,适合PC浏览器的模板。

从哪里识别访问者的信息,以及如何识别呢?

依据 HTTP 协议,客户端浏览网页的时候会提供一些信息给服务器端。下面是PC浏览器访问时的 $_SERVER 的 dump 信息。

(array) Array
(
    [ALL_HTTP] => HTTP_CACHE_CONTROL:max-age=0
HTTP_CONNECTION:keep-alive
HTTP_CONTENT_LENGTH:0
HTTP_ACCEPT:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET:ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP_ACCEPT_ENCODING:gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE:en-US,en;q=0.8
HTTP_COOKIE:__utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
HTTP_HOST:www.51xna.com
HTTP_USER_AGENT:Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
 
    [HTTPS] => off
    [SCRIPT_NAME] => /private/Kohana/index.php
    [HTTP_COOKIE] => __utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
    [AUTH_PASSWORD] => 
    [AUTH_TYPE] => 
    [AUTH_USER] => 
    [CONTENT_LENGTH] => 0
    [CONTENT_TYPE] => 
    [PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\mobile\index
    [QUERY_STRING] => 
    [REMOTE_ADDR] => 221.227.130.23
    [REMOTE_HOST] => 221.227.130.23
    [REMOTE_USER] => 
    [REQUEST_METHOD] => GET
    [SERVER_NAME] => www.51xna.com
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SOFTWARE] => Microsoft-IIS/6.0
    [APPL_MD_PATH] => /LM/w3svc/798/ROOT
    [APPL_PHYSICAL_PATH] => g:\wwwroot\51xna.com\wwwroot\
    [INSTANCE_ID] => 798
    [INSTANCE_META_PATH] => /LM/W3SVC/798
    [LOGON_USER] => 
    [REQUEST_URI] => /private/Kohana/index.php/mobile/index
    [URL] => /private/Kohana/index.php/mobile/index
    [SCRIPT_FILENAME] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php
    [ORIG_PATH_INFO] => /private/Kohana/index.php/mobile/index
    [PATH_INFO] => /mobile/index
    [ORIG_PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php\mobile\index
    [DOCUMENT_ROOT] => g:\wwwroot\51xna.com\wwwroot
    [PHP_SELF] => /private/Kohana/index.php
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CONTENT_LENGTH] => 0
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_HOST] => www.51xna.com
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
    [REQUEST_TIME] => 1271408243
    [argv] => Array
        (
        )
 
    [argc] => 0
)

通常我们可以在HTTP_USER_AGENT中找到识别信息,其中PC浏览器的HTTP_USER_AGENT信息最全,很容易根据关键字来识别如’Chrome’, ‘Firefox’ 等,部分手机浏览器也可以可以通过 ‘Windows Mobile’, ‘Windows Phone’, ‘SymbianOS’, ‘Nokia’, ‘Opera Mobi’, ‘Android’等关键字识别,这里有一个手机HTTP_USER_AGENT识别列表http://www.zytrax.com/tech/web/mobile_ids.html。但是有些手机上的浏览器并不提供HTTP_USER_AGENT信息。

如今的智能手机大多都支持 XHTML 格式浏览,我们可以通过 HTTP_ACCEPT 来识别手机是否支持 XHTML 格式浏览。这里识别的关键字主要是 ‘application/xhtml+xml’。

另外还有一种识别方式,通过查找用户的上网方式,通常手机用户走的是 GPRS 路线,但是这中识别方式并不可靠,可以作为一种辅助识别手段。

对于只支持 WML 的手机目前我还没有解决,一些非智能手机在访问网站时会提示”不支持所访问的网站”。开始我以为是返回信息的问题,当我把返回信息严格按照WML格式输出时问题依然存在。不知道这种手机是通过什么方式访问互联网的。

为所有用户提供不同的定制服务是一件不可能的完成任务,支持大多数就好。完美主义总是很浪费时间。

最后感谢各位提供手机访问信息的童鞋们,让你们忍受在手机上输入如此之长的URL,实在辛苦!


基于(LFS)构建一个属于自己的Linux(一)

想挑战LFS很久了,终于从今天开始动工制作了。以前虽然没有动手开始创建LFS,但是也积累了不少的相关信息,一切都还算顺利。

今天是第一天,主要的工作是编译工具链和一些系统工具为Building the LFS System作准备。

准备HOST(宿主)系统,没有使用LFS-LiveCD, 而是在虚拟机中安装LinuxMint(没有特殊的含义),在开始之前需要在LinuxMint中安装编译LFS的相关工具。

sudo apt-get install build-essential bison

LFS 的版本为 6.5

LFS 提供了一个文件, 其中包含了构建LFS所有用到的源码下载链接 LFS-BOOK-6.5-wget-list

可以使用wget下载这些源码

wget -c -t 2 -i LFS-BOOK-6.5-wget-list -o down.log

需要注意的是,Perl-5.10.0 的路径已经被移除,取而代之的是Perl-5.10.1。采用了新的版本Perl后,原来针对5.10.0的patch就不用了。

依照LFS-BOOK的指示,编译起来还是很顺利的。如果英文不好可以对照着金步国翻译的中文版的LFS-BOOK-6.2

通常编译的步骤如下,先解压源码包,如果有patch则应用patch

patch -Np1 -i path_of_the_patch

之后就是念咒语

./configure --prefix=/tools #需要根据文档指示
make
make install

具体的编译还是应该参照文档,除非你运气真的很背,否则都会通过的。

编译是一件苦力活,根据机器的性能,也许会耗费你一天甚至更长的时间。其实也有自动化的操作,但是动手敲上一段咒语还是有很多额外的收获。

到此,编译了N个程序后准备工作就告一段落了,编译的这些程序是新世界的基础,很重要、也很费时! 接下来进入 Building the LFS System


天才,榜样

每次看到这些大牛们的事迹,心难免都要加速跳动。爱迪生说没有那1%的灵感即使是99%的汗水也不一定能成功,可是付出那99%的汗水也是必要的,不然1%的灵感也只是耍耍小聪明而已!

相信Fabrice Bellard也一定是在不断的挥洒着汗水来实现那1%的灵感。

计算的威力,智慧的传奇

—— Fabrice Bellard

作者:吕娜

这个世界从来不缺天才,只缺乏利用天分坚持理想和信念不断创新的人,这些人用恒心和努力缔造一个又一个传奇。法国人Fabrice Bellard 就是这样一个了不起的程序员。

Fabrice Bellard1972年生于法国,曾就读于巴黎高等综合理工学院和法国电信研究院。对计算机有着浓厚兴趣的他,高中时就崭露头角,编写出了LZEXE,这是DOS上第一个广泛使用的文件压缩程序。

Fabrice Bellard是一位计算机奇才,在业界有着重要的影响。1996年他编写了一个简洁但是完整的C编译器和一个Java虚拟机Harissa。Fabrice Bellard发明的TinyCC是GNU/Linux环境下最小的ANSI C语言编译器,是目前号称编译速度最快的C编译器。Fabrice Bellard杰作众多且涉及广泛,1998年编写了一个简洁的OpenGL实现TinyGL,2003年开发了Emacs克隆QEmacs,2005年还设计了一个廉价的数字电视系统。

Fabrice Bellard的一个重要杰作是在Linux内核上写了一个CPU模拟器QEMU,这套开放源码的模拟器软件与Bochs、PearPC近似,但具有后两者所不具备的高速度及跨平台等特性。QEMU可以在不同的机器上运行独自开发的操作系统与软件,经由KQEMU这个开源的加速器,能模拟至接近真实电脑的速度。QEMU构思巧妙, 效率极高, 在借助核心态的KQEMU加速器之后,模拟代码的执行速度甚至能够接近真实机器。QEMU已成为目前使用最广泛的模拟器,KVM和Google Android的模拟器都是基于QEMU的。

Fabrice Bellard 可谓博学多才,他另外一个重量级项目是FFmpeg。FFmpeg 单词中的FF 指的是Fast Forward,FFmpeg这个2000年发起著名的开源多媒体播放器项目, 是MPlayer的姊妹项目。这是一个如此重要的成就,没有这个项目,就没有我们今天广为使用的暴风影音等播放器。这个多平台、多功能的多媒体编码解码器由Fabrice Bellard发起并管理,现在是由Michael Niedermayer在进行维护。

天才的创新经常是离经叛道式的超越,Fabriced Bellard的一些项目让人感觉疯狂。比如他曾有一个项目是将带有VGA显卡的PC改装成DVB-T的信号发射器。这样一来,为了防止泄密,公司不仅要封声卡插口,还要焊上显卡插口。

Fabrice Bellard在圆周率算法方面也有着惊人的成就,1997年FabriceBellard提出最快圆周率算法公式。在计算圆周率的过程中,Fabrice Bellard使用改良后的查德诺夫斯基方程算法来进行圆周率的计算,并使用贝利-波温-劳夫算法来验证计算的结果。为了纪念他对圆周率算法所作出的杰出贡献,Fabrice Bellard所使用的改良型算法被命名为Fabrice Bellard算法,这种算法是目前所有圆周率算法中最快的一种,这个计算N位PI的公式比传统的BBQ算法要快47%。

2009年的最后一天,Fabrice Bellard宣布另一重大突破:他用桌面电脑打破了由超级计算机保持的圆周率运算记录。这是一个壮举, 他将PI计算到了小数点后2.7万亿位!更令人惊讶的是, 他使用的不过是价格不到2000欧元的个人PC,仅用了116天,就计算出了PI的小数点后第2.7万亿位,超过了由目前排名世界第47位的T2K Open超级计算机于2009年8月17日创造的世界纪录。新纪录比原纪录多出1200亿位,然而,他使用的这台桌面电脑的配置仅为:2.93GHz Core i7 CPU,6GB内存,7.5TB硬盘!

不过这次为了加快计算完成的速度保住排名第一的位置,Fabrice Bellard使用了9台联网的电脑来对数据进行验证, 若使用一台电脑来验证计算结果的话, 则需要额外增加13天的计算时间。

Fabrice Bellard在圆周率方面的辉煌成就, 使他创造多次圆周率单一位计算的世界纪录(计算10的整次幂位) , 也曾因此而登上《科学美国人》法文版。

Fabrice Bellard

(本文来自《程序员》杂志2010年2月刊)


谷歌要退出中国了

今天互联网上最热的新闻就是谷歌要退出中国了,对于在中国境内的谷歌用户来说,这个无疑是一个巨大的噩耗。有人因此已经为谷歌准备好了谷歌墓志铭

我本人是一个谷歌重度用户。
第一个是搜索,这个自不用多说,Google的搜索引擎一直是我忙时的最佳伴侣,它总是能给我我想要搜索的结果;
第二个是Google Docs,受够了隔三差五重装Windows时的备份工作,把自己的文档放在Google Docs上,不但有编辑的历史记录,还很方便跟朋友一起分享、共同编辑文档;
第三个就是Gmail了,Web版本的邮件系统Gmail是我使用最舒服的一个,因为在收发邮件的时候根本感觉不到Gmail的存在,一切都那么的如行云流水一般 ,而且还不在你的邮件中插广告;另外企业级的Gmail也很好用,可以使用自己的域名作为邮箱后缀,虽然别人也提供,但Google还是不错的,至少比Live Domain强
第四个是Google Reader,一个Online的RSS订阅工具,我的很多知识都是通过Google Reader去订阅获得的,因为很多有价值的信息都放在博客里,而Google Reader就提供了订阅博客以及搜索其中内容的服务。如Gmail一般的易用,如果显示器大点的话更好用,毕竟订阅的太多啦。:-)
第五个是Google Host,这个呢就是用来放一些自己和朋友随便写写的代码,也挺好用,速度也很快。
第六、七、八 …… Google为我带来的太多太多了,继续写下去只是会觉得更伤心

这次Google真的要走了,以后访问Google就变成了非法访问!在这个神奇的国度里,我只能努力学好翻墙术来报效祖国了!


阿凡达 Avatar

说啥呢? 其实对于电影本身真的没啥好说的,有条件的去看IMAX+3D,没条件的看普通3D,剩下没条件的去创造条件到电影院看。

不在电影院看《Avatar》就等于没看过!

鼓吹完大家为美帝国贡献GDP之后,来谈谈Avatar背后的故事吧。

作为技术人员,研究一下电影背后的有关技术的话题,还是很有意思的。《Avatar》所带来的震撼是科技的进步!

  为了能百分百的表现潘多拉这个奇绝的梦幻世界,卡梅隆使用了三项突破性技术:虚拟摄像技术、表情抓取,和联合数字立体摄影机(fusion camera system)。
  
  虚拟摄像机技术目前为止还主要用于3D虚拟世界游戏,比如《塞尔达传说》系列游戏,游戏者控制虚拟世界中自己的人工智能体,将人物行为信息实时双向反馈,人物所处的三维立体环境随着其动作位置变化实时发生变化。在《阿凡达》中,演员佩戴无数感应器进行“行动抓取”,电脑对抓取的数据直接进行处理,将其所代表的虚拟人物按预制比例直接显示在监控器上,从而使导演能实时观测虚拟人物与虚拟电子潘多拉世界的交互效果。
  
  表情抓取指抓取演员表情的电脑图形技术。卡梅隆在洛杉矶的Playa Vista建立了一个比一般表演抓取工作室大5倍的专门舞台(the volume),安装了120个固定摄像头,全角度抓取演员表演的全部信息;扮演Na’vi人的演员同时佩戴一个特制的帽子,由一部微型摄像机详细记录其在表演中面部表情的一切变化。卡梅隆希望借此传输95%的演员表演和面部表情信息到他或她的数码虚拟人物身上。结果便是无比逼真的成像效果,观众完全无法区别真人与虚拟人物的交互。
  (http://www.popularmechanics.com/technology/industry/4339457.html)
  
  联合数字立体摄影机则是导演卡梅隆和数字摄像技术创新者,摄像师Vince Page共同开创的3D立体摄像系统。此系统使用两台索尼HDC-F950 高清摄像镜头,如同人的左右眼一样距离大约70毫米同时拍摄,随着人物距离镜头远近的变化自动调整左右两个镜头之间的距离,并将数据传回相应的EVS XT[2]成像处理系统进行合成,制造出最类似人眼的立体景深感受。联合数字立体摄影机如今已被广泛用于了不少3D电影的拍摄,包括卡梅隆自己使用同一技术拍摄的3D纪录片《深海异形》。
  (http://video.google.com/videoplay?docid=-241532803911842846#)
  
  没有这三项技术创新就没有那种身临其境的潘多拉星体验,观众就不能切身体会那种神秘、迤逦、瑰奇,不能感受身骑龙鸟翱翔的速度、不能领会漫游夜森林的色彩,不能感知生命之树的呼吸与呢喃。而这一切的感受都是属于影院的,是确保故事逼真情感真切的关键。

作为程序员,当看到 Fenng 的这篇文章 制作《阿凡达》特效的超级计算机时,我的心加速跳动了几下。

Linux!

HP Cluster Platform 3000BL 集群平台作为其解决方案, 操作系统是 Linux!

看到了吧,研究和使用Linux是大有前途的,可大(大型集群)、可小(嵌入式),作为程序员的你,赶紧加入这趟Linux高铁吧!


国进民退

[这里是一块墓碑,因为这里的一句话,网站被维护了。默哀...]

最近国内比较热闹的话题是“国进民退”,虽然种种迹象表明国家并没有“国进民退”的指导方针,但并妨碍我们去分析以下这种话题的后面是什么。

对于党和国家,咱无法作任何评论,那来看看我所在的IT行业的相似者。

同样众所周知的是Microsoft是一个桌面操作系统的垄断者。我们将历史的镜头移到Windows早期的时代,那时桌面平台是百花齐放,尤其是开发环境。有《Borland传奇》中提到的C++之战,有John carmark英雄般领导的OpenGL和DirectX的3D图形之战,Sun公司出奇招的Java登录桌面之战。

如今,再来看看Windows这个昔日的战场,凭借微软自身的平台优势,现在只有微软第一,其他的都是微型软件供应商,用Joel的话说就是微软不屑的那些剩下来的软件开发商。

只要你选择了微软的操作系统,那么开发工具是微软的,开发语言是微软的,办公软件是微软的,数据库是微软的,web服务器是微软的,甚至开发方式、思维模式也都是微软的。

即使有一天你在微软的地盘悄悄的成长,一旦被微软看中,对不起,你被吸入微软了。搭上一个垄断者的贼船,后果只有一个,牺牲自己来为这个垄断的机器提供能量!

微软作为垄断者需要不断的吸收更多的能量来维持自身的发展,上了路就由不得自己,即使在互联网时代微软想再续往日的辉煌也无法摆脱垄断者的本性像黑洞般的自我吞噬。

EOF


理解Drupal模块之Google

Google 是居家旅行、工作学习必备之搜索引擎,而且Google还可以给我们的网站带来收入。请看我细细道来:

Google的爬虫自不用说,不知道哪天就过来爬了你的网站,可这太依赖于运气,我们需要主动一点,向Google提交我们的网站信息帮助Google更好的索引我们的网站内容(?_? 咋就那么心甘情愿的交给Google呢)。同样Google为了方便我们提交资料,搞了个叫Sitemap的东西作为所有提交资料的规范格式。如此一说,我们对Drupal相关模块需求就了解了,我们需要一个能自动生成网站Sitemap的模块来供Google爬虫享用。

在Drupal模块页搜索”sitemap”, 首先映入眼帘的就是我们需要的那个啦 :-) 。下载、上传、启用模块不用罗嗦。Drupal Sitemap 模块中有5个功能,其中 Sitemap 是核心功能,必须滴!剩下的在仔细阅读说明后酌情启用!在51xna.com我启用了 XML sitemap engines 和 XML sitemap node 两个功能。这两个功能的用法还是蛮简单的,仔细阅读说明即可。

我们网站的资料都交给Google了,那么怎么知道网站都有哪些人来访问呢?这个问题Google也有解决方案,Google Analytics,顾名思义就是用来分析网站访问者的,如访问者的来源地、使用的浏览器、操作系统、访问页面、停留时间等等。

Drupal也有相关的模块来满足我们的这个需要,再次到Drupal模块页搜索“Analytics”,然后。。。(省略若干苦力活)在设置页面填上Google Analytics的帐号即可,其他的设置仔细阅读说明酌情操作。

最后,我们要从Google那里弄点米米养小站了。题外话,你该不是真的以为Google就是一个搜索引擎吧?其实Google是一广告机器,详细点说Google是一个跟广告有关的赚钱机器。Google Adsense 就是这部机器的关键部件之一。我们在Google Adsense上申请个账户,然后在自己的网站上提供广告位,然后Google利用你提供的广告位放广告,如果有人点击这些广告位上的广告,Google就按照专门的计算方式来给你分成,注意啦,分的是$美元。所以弄个Adsense的模块放在网站上是有必要的。

Drupal那里也有Google Adsense的相关模块(真的是要什么有什么:-))

Adsense模块的功能还挺多,有7个。AdSense core 这个是核心模块必须启用,Managed ads 管理广告滴,负责显示广告区块的后面详述,其他的功能带 old 的说明是不推荐使用的。

进入到 首页 › 管理 › 站点设置 › AdSense 有一个Publish ID,这是用来输入Google Adsense帐号的,必须滴!现在用 Managed ads 来管理广告啦。在 首页 › 管理 › 站点设置 › AdSense 中设置 Adsense Blocks,这里输入一个正整数,用来表示你准备在页面上放多少个广告位的,先设置一个练练手。这时在 首页 › 管理 › 站点构建 › 区块 中就可以看到一个AdSense: unconfigured 0 的待设置的区块,在配置选项中配置好相应的设置以后,把这个区块放到某个地方,保存收工!

现在网站就变成了自动提交资料到Google等搜索引擎、可分析网站访问信息、以及放置广告位收费半赚钱的机器了,那一半呢?当然是网站内容和用户来贡献的咯!

最后来句广告:tairan.net也放置了Google Adsense广告位!

EOF