Tairan's Story

「知之真切笃实处即是行,行之明觉精察处即是知,知行工夫不可离。」


使用App Engine跟踪ADSL外网IP

在家使用ADSL拨号上网,并使用一台电脑作为Home Server,这样以来可以在工作的时候发现什么好东西,就可以远程连接到家中的电脑进行下载,也可以在家托管自己的代码仓库等,工作学习生活都不耽误。

使用ADSL有个问题,ADSL使用DHCP服务动态分配的,可能每一次拨号得到的IP都不一样。为了跟踪当前所获得的IP地址,我设计了一个简单的IP跟踪解决方案。下面是结构图:

iptracker

整个架构分为3个部分
1. Home Server, 定时向 App Engine 发送请求告知自己当前的外网IP
2. Google App Engine, 管理用户和IP地址
3. 用户, 提供预定义的口令后就可以看到当前Home Server的外网IP

我的Home Server使用的是 Gentoo Linux, 每一个小时向 App Engine 发送一次请求,如果使用Windows XP,可以使用系统自带的计划任务,但计划任务的最小执行单位是每天。

Home Server 发送请求,是通过 cURL 来实现的,Windows 需要单独下载。我推荐在Windows上安装 GoW 来使用*nix命令提供的便利。

1
curl http://xxx.appspot.com/collector?key=GUID

App Engine 预置了一个字典,用来记录使用者的信息以及GUID

1
auth_data = {'auth_name': GUID}

用户访问 http://xxx.appspot.com/ ,填入自己的 auth_name 提交即可看到 App Engine 最后一次接收到IP信息。

这只是一个简单的解决方案,暂时够我使用。有兴趣研究 Google App Engine 的朋友可以来交流。

No Comments » | Tags:,,,, | Categories: Technology, 我的声音
夜爆上下班的路

日复一日,周复一周,月复一月的走上下班的路。在非上下班时间那条路又是什么样子的?这个夜晚,我走在上下班的路上,欣赏着这条日日相见的马路。

晚上9点,我坐上了每天上班的178路公交,9点11分汽车开动直达龙华车站。其实上班的时候我是在终点站的前一站下车的,这次把上下班的路延长,沿着178路大站车的路线夜爆。9点50分从龙华车站开始步行到徐家汇,那里是我这次夜爆的起点。

IMAG0435
IMAG0436

假日里,此时徐家汇的人头依然很多。

IMAG0438

走在天钥桥路上,被一位MM以俯视的姿态搭讪问路,我表示压力很大。

过了体育馆,补充了一些事物和水,继续上路。一路上哼着小曲,脑袋轻松了许多。不知不觉地就走到了上班的地方。

IMAG0439

离开的公司所在地,终于近距离的看到每天经过的那个雕塑厂,很多的雕塑放在门口。

IMAG0440

市区渐渐远去,在出市区的一路上到处飘荡着孤魂,三三两两,无所事事。

IMAG0441

植物园,很多人的结婚记忆都在这里。

IMAG0442

正式的提示你正在往化工厂的方向。

IMAG0443

已经午夜,脚力有些不支,体力虽然还可对付,却难以阻挡瞌睡虫来袭。趁着夜宵车的点,在夜爆的半路我坐车回来了,虽然已是12点半,夜宵车上挤满了从市中心回家的人。

IMAG0444

1 Comment » | Tags: | Categories: 我的声音, 生命在于运动
读Facebook

时机到了。

我经常去怀疑那些企业成长的神话故事,难道他们真的是一夜长大的吗?《Facebook》用翔实的采访加上作者的精彩演绎,给我们讲解了Facebook是如何爆炸式的成长的。一开始看这本书的时候有一些不适应,因为用中文来翻译老外写的书总感觉词汇的使用是那么的别扭。好在Facebook的精彩故事让我忽略了本书的措辞。尽管本书的作者一开始在前言就告诉我们说,这本书的写作并没有的到马克本人的任何交流,但马克身边的人们也足以让我们来描绘出马克的大致轮廓。

马克,作为Facebook的主要缔造者, 他在高中阶段就被传言曾拒绝微软百万年薪的邀请,初入哈佛就撰写了好友课程配对系统,受到了不错的欢迎。在开发Facebook之前马克写了若干个爬虫,分别从哈佛大学各个宿舍楼的学生信息系统中爬取了大量学生信息,并搞了一个“辣妹排行榜”(Facemash)程序中在学校里广为传播(有很多负面消息)。这些足以证明马克是一个不错的程序员,一个不错的Geek,这些正是开发Facebook最基本的技术保障。

爱德华多,Facebook最初的推动者。作为马克在哈佛不多的朋友当中,他的经济头脑让他有了一些资金,而这些正是Facebook最初的支撑。没有这些资金,即使在初期,马克的学费绝对无法满足Facebook快速增长的胃口。并且有了这些资金,才有可能让马克一开始就专注程序的开发。

肖恩,也许中国人对他很陌生,至少我以前没有听说过他,但是他在美国可是个神话级人物。在加入Facebook之前,他缔造了两个互联网重量级产品。虽然最终他被资本家赶出了自己创立的公司,但是他的经验是Facebook助推器,有着火箭加速的助推力。在肖恩的引荐下,Facebook获得了Paypal创始人的投资,并让马克结识了互联网界的巨鳄们,这些将Facebook引入了一个可以快速膨胀的轨道。

Facebook诞生之前已经有了不少的交友网站,正是这些已经存在的不温不火的交友网站给马克提供了借鉴,避免重复他们的错误的经验,并从他们那里看到了他们缺少的东西。Facemash的火爆证明了马克自己的设想,而孪生兄弟的一次程序开发的相约让马克开动了编写Facebook代码的机器。

Facebook的成长没有什么神话,是一个个的环节组成的,这些环节都紧密的链接在一起,缺少任何一个都无法促成今天的Facebook。马克在哈佛结识了爱德华多,创立了Facebook,而Facebook初期的成功吸引了肖恩的加入,在肖恩的指引下,Facebook登上了火箭发射架并真正的起飞了。

Facebook的成功是一个团队的成功,并不是马克一个人的。即使作为Geek的马克的技术再牛B,没有这些战友的帮助也无法让Facebook攀上今天的高度。也许这是从后往前看,好似每个点都恰如其分的发生在那里。我相信在事情正在发生的时候,他们都努力在自己的岗位上做着自己认为最好的事情,当时机来到,一切准备就绪开始起飞。

1 Comment » | Tags:, | Categories: 我的声音, 读书笔记
面试总结兼谈外包公司

终于又上班了,这是虎年以来第一次上班。在正式确定上班之前在上海待了近一个半月,加上之前南通尝试的几次面试,这次面试的周期有两个月。在这两个月的时间内约平均一周2次面试,从时间上讲还是算密集。正所谓在家靠父母,出门靠朋友,如此之多的面试机会大部分是朋友介绍的HR,少数是在51job上投简历获得的。

现在已经上班,之前的面试经历需要总结,给自己和大家一个交代,同时也给其他找工作的人一点参考。

面试公司的类别
因为我前一份工作的关系,这次面试的大部分是外包公司,外包公司又以微软外包为主,其中有一家是承包国内电信类型的项目。另外的是一些是电子商务类型的公司。

外包公司看上去规模都不小,有的还有自己的办公楼,而电子商务类型的公司责依附在其他传统行业上,软件开发只是他们的一个部门,团队比较小。10人左右。

面试的内容
国内外包公司喜欢让你动手,管他三七二十一看你能不能干活是第一,不管什么手段,整出来就行,至于代码质量,他们除了在乎SQL外,其他的能用就行。我在半年没有摸微软系的代码的条件下去面试,竟然做不出什么东西,活生生的被鄙视。

在微软外包公司的面试的模式就是英语+算法。
英语,这是基本的沟通技能,有些团队跟老外联系紧密,需要口语,而另一些则主要通过邮件联系。无论如何英语是必备的,至少能看,能写邮件。

算法,原来我认为只要能解决问题就行,经过这次的面试,我觉得算法还是很重要的,重要的不是会背那几个固定的算法,而是在你写代码解决问题的时候需要尽可能的少写代码,尽可能的少占用程序运行的时间和空间。当然,如果你一直写Hello World是可以不用在乎算法。

在算法方面有几个几种常见的面试题:
1. 以单词为单位反转字符串,如”I am Daniel Wang!” => “!Wang Daniel am I”
2. 从字符串转换成数字, 如”123″ => 123
3. 剔除有序数组中重复的值。如[1, 2, 2, 3, 4, 4, 4, 5] => [1, 2, 3, 4, 5]

为什么选择外包公司
外包公司是邪恶的,对于需要成长的程序员来说更甚。不明白的可以参考一下别人的看法 去大公司还是去小公司工作? 如何规划你的职业发展道路去跨国公司还是去创业公司?

为什么这次我还是主动的选择了外包公司?我很缺钱,我需要一个稳定的,不会占用我的业余时间的工作。这样的状况我需要维持2-3年,视具体情况而定吧。

而外包公司能提供:
在相同职位外包公司的待遇要略高于非外包公司,大约在1k-2k+的差别。
外包公司所从事的工作内容技术含量较低,但是做事流程很专业。
外包公司规模也不小,不差钱,在里面只要稍微努力就会获得不错的待遇。参考 别为大公司拼命

总之,一朝进入外包的门,要十二分的努力才出的去!

PS:
原本想深刻的吐一些口水出来,但是有些东西(自己的)不方便公开,加上自己又犯懒了,写了个流水账。文章里提到的链接应该可以让看官明白外包公司是邪恶的,如果还不明白,欢迎来信。

No Comments » | Tags:, | Categories: 我的声音
夜袭上海

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

这一次是这位年轻人的初次长途旅行的尝试,他的计划是傍晚出发,骑行一夜,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:
老婆还是一个好编辑

2 Comments » | Tags:,, | Categories: 我的声音, 泰然游记, 生命在于运动
我学习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直接解剖,肚皮划开后一目了然!

2 Comments » | Tags:, | Categories: Technology, 我的声音
快速建立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共享出来的文件了。

5 Comments » | Tags: | Categories: Technology, 我的声音
如何识别手机浏览器信息

想作一个网站,根据不同的访问者提供不同的显示模板,如适合手机的模板,适合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,实在辛苦!

1 Comment » | Tags:,, | Categories: Technology, 实践手札, 我的声音
基于(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

No Comments » | Tags:,, | Categories: Technology, 实践手札, 我的声音
天才,榜样

每次看到这些大牛们的事迹,心难免都要加速跳动。爱迪生说没有那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月刊)

1 Comment » | Tags: | Categories: Technology 转载, 参考消息, 我的声音, 读书笔记


我的豆瓣

二维码快速链接
QR Code fuer diese Seite