行者无疆 始于足下 - 行走 思考 在路上

再见,2011

再见2011

还有两个小时就要踏上去往哈尔滨的旅程。回首2011,颇多感慨。这一年我23周 岁,从16岁离家求学至今,这是第七个年头。这一年的标志性事件就是我开始正 式从学校走向社会,实现经济独立。其余的一切,基本上都是围绕着这条主线再 转。

1 学业

2011年上半年的主题就是学业了。具体说来,就是我为了所谓一个学位的虚名, 每天殚精竭虑,为了最后的几门考试和毕业设计奔命不息。3月1日回校,7月5日 拿到毕业证,6日离杭。这期间混过10+门课,外加一门毕业设计。至此对中国的 学术体系彻底失望,再也不想回头。

临毕业之际,许多人邀我参加各种活动,除了少数不得不去的几个,诸如旅行者 毕业散伙饭,其余则一律回绝。有些人散去之后,终究不会再见,索性随缘,何 必再添一场饭局、游戏,徒增无趣?

2 工作

2011年下半年的主题是工作。我所在的小组负责百度Hadoop集群的运维工作。面 对着15000+的机器资源,如何更合理的利用、管理这庞大的资源,对于我们是一 个巨大的挑战。

其实纵观业界,开源的Hadoop生态圈已成,各种周边工具诸如chukwa、ganglia、 nagios等已经比较成熟,但是如何运维这些成套的系统,每个公司却有每个公司 的不同做法了,这也是一个IT公司安身立命、独立于世的重要资本。

开始的时候,由于新人入职,学习培训,加上组内的照顾,自觉工作十分有趣。 到10月份,在真正接手集群的时候,事情陡然增多,各种会议沟通、预算报表让 我十分疲惫,加上部门人员变动,新来的老大和我脾气并不对味,因此让我萌生 了要走的念头。

Anyway,在百度,我见识到了巨型公司运营的基本流程,接触到了浩瀚如海的机 器资源以及相伴而来的各种故障,并有幸和牛人们一起并肩战斗(虽然我是为他 们提供底层服务的……),这一切的一切,让我受益匪浅。

两年内,从我正式开始认真学习计算机开始,我从一个小破烂的实验室,到淘宝 的实习,再到百度的分布式运维小组,平台越来越大。只不过,随着平台的扩大, 其所带来的沟通成本也会倍增。在百度,我平均每天发十五封邮件,每天花3-5 个小时在聊天工具上,每周至少开3个会,每周至少写两份文档(包括周报), 这一切的一切大大的压缩了我学习底层技术、编写代码的时间。所以我决定离 开,嗯,在年后。

3 经济

2011年的一个重要人生里程碑是我第一次实现了经济独立,并且在年底12月份初 的时候成了一个所谓的“万元户”。如果说,学生时代,是有钱没时间,那么, 工作时代,就是有时间没钱。我希望,在下一个七年,等到我三十岁的时候,能 够实现一种高层次的财务自由。

说到底,我依旧是个俗人,逃脱不了俗世的纷纷扰扰。所谓自由,有的时候,不 是自己想干什么就可以干什么,而是自己不想干什么的时候,就可以不干什么。

4 专业

2011年,我在专业技能的提升方面并没有达到我的预期,但是已经做到尽心尽力。

2011年下半年的专业关键词是Lisp。在8-12月4个多月的时间里,除了工作上的 需要,偶尔分神去学习下Java和Hadoop的相关知识,剩余的大部分精力都放在了 Lisp的学习上。

学习Lisp让我发现了编程语言的另一个世界,正如学习Linux让我发现了操作系 统的另一个世界。我在Lisp身上找到了很多以前我学习的编程语言不曾体会到的 东西,诸如交互式的编程环境、简单和谐的S-expression、强大的macro,等等 等等。我觉得,通过lisp的学习,我开始逐渐登堂入室,窥得计算机科学的本质。 我开始理解了很多以前不层理解、似是而非的概念,诸如code is data、序列化、 xml与ant,我现在能以lisp的观点重新审视MapReduce编程模型,而Sicp的前两 章内容,更让我领略到了combination和abstraction的绝妙组合。

2012,我希望我在Lisp学习上的道路上更进一步,完成所有sicp的习题,完成 《On Lisp》的阅读和《PAIP》,并且深入学习计算机领域的另外一本经典书 籍——《深入理解计算机系统》。我觉的SICP和CSAPP代表了计算机科学的两个方 向,前者讲的是计算的本质,也就是编程语言和数学,后者将的是计算机,也就 是编程语言的底层支撑。

5 阅读

2011年我依旧保持这优秀的阅读习惯和进度,即便是在百度繁忙的工作之余,我 也会保持每周20-30个小时的独自阅读时间,我以此为荣,并以此作为我以后安 身立命、闯荡江湖的资本。我非常享受这闲暇的时光,再也不用为了考试、分数 去阅读,我可以递归的去阅读自己感兴趣的任何资料,从scheme,到lisp,到 emacs,到ai,所读无穷、所识无尽,所乐无限。

6 观影

2011年我的观影活动极其频繁,整整一年,我大概看了不下170部电影和电视剧, 还不包括重温以前的一些经典片诸如《暗算》、《亮剑》等等。

重点推荐:

  • 吴晓波《激荡三十年》
  • 俞敏洪《创业传记》
  • 《迁徙的鸟》
  • 《猫咪物语》
  • 《谍影重重》

7 旅行

2011年我并没有大的旅行动作和计划。而事实上,除了08年那次杭州到拉萨45天 疯狂的旅程,旅行之于我,随着年月的逝去,从一个压抑很久的梦想,逐渐的演 变成一种北大教室内静静读书的安详。

我不希望做一个旅游暴发户。所以对于《背包十年》,一笑而过。我觉得,旅行 者没有必要把旅行说的那么高尚,这个世界需要一往无前的行者,也需要在各个 岗位上日复一日的工人。《背包十年》的作者说白领的工作是“每分每秒都很精 致,但每分每秒都是无聊”,未免太过偏激,对自己的生活太过傲娇,我想,他 这辈子大概也不会体会到数学和计算理论的和谐之美了。

8 社交

2011年并没有重量级的良师益友在我的生命中留下印记。一方面是由于我个人逐 渐收敛自己的社交圈,将自己有限的时间精力放在一些更值得我去思考、去做的 事情上,另一方面也许是年岁增长,并步入职场的缘故。

人生苦短,诱惑太多。我们生命中90%的人,到头来大家不过是一场过客。随遇 而安,随缘而乐。对于人际关系,该说不的饭局就说不,省下的宝贵时间,留给 自己,即便是空虚寂寞,也会让自己更加明了自己不喜欢什么,这就有希望能够 找到自己更喜欢的东西。

找到自己喜欢的东西,人生的一切快乐皆来源于此。

9 展望

总的来说,2011年至于我,说不上丰富,却多了一份安定与安详。我想明白了很 多道理,也开始明白,生活不仅仅是要做加法,必要的时候,也要做一些减法。 在人生60多年的旅程中,背负太多的东西,只会让你走的更慢。

想下海游泳,就要脱掉身上的衣服;想登高而呼,就要卸下身上的重担。2012, 我来了。

 

Learning SICP: (sqrt 2.0)

接触计算机也算四年有余,对自己的所学所知却毫无信心。回头看了看以前写过的很多文章,诸如配置IDE环境啦、配置Linux操作系统啦、零零散散的小程序啦,等等诸如此类,不成体系,都是在小打小闹。因此我决定,在可以预见的几年内,一方面做好百度份内的工作,赚一点养家糊口的钱;另一方面也要从基础做起,一点一点地夯实自己的技术实力。技术是基础,无论是以后创业,还是继续在程序员的行业里面模爬滚打,扎实的技术都是一个必备的条件。Google的创始人曾经说过,要成为一个企业家,需要“Be an expert in all aspects”,而一个公司赖以生存的基础,除了良好的营销、管理,最最基本的还是需要有能拿的出手的产品,而产品的基础就是技术。所以我从来不赞成“码农没有前途”等等诸如此类的说法,这样说的人,多半自己不是一个合格的码农,又或是对IT互联网本身就没有深刻的理解,信口雌黄罢了。

人类生存于世的一大乐趣就是自己制造工具,能否制造工具也是人类之所以成为万物之灵的根本。而学计算机的一大好处就是可以方便地、随心所欲地制造自己想要的工具,没有想不到,只有做不到,工具的级别取决于程序员的技术能力。譬如Fabrice Bellard就用JavaScript写了一个PC模拟器,可以在浏览器里面跑Linux,而此君的其他作品,诸如ffmpeg、qemu、tinycc,在开源社区几乎是无人不知无人不晓。

学计算机的一大好处就是经典教材诸如SICPCSAPPTAOCP、龙书、虎书等等数不胜数,思忖再三,决定还是以MIT经典的那本SICP开始。关于SICP的具体内容我不再多言,Wikipedia一查便知。让我沉思的两点是,这本书是MIT大一新生学习计算机的第一门课,也就是计算机的导论课程,而这样一门大一新生的导论课程,在两百多页的教材中,确涉及到了图灵机理论、递归算法、lambda算子等等诸多关于编程本质的知识,不得不感叹MIT课程的高质量,同样作为国内高校翘楚的浙江大学,大一新生恐怕还都在背诵C语言各种符号的优先级,还在古老的Turbo C 2.0上写着古老的graphics.h程序呢;第二,这本书长盛不衰几十年,被数百所大学选为计算机系的教材,并且对计算机教育产生了深远的影响,国内有那本教材能够达到这样的境界?谭浩强的?严尉敏的?都不是。除了教材本身,作者的态度,还有配套的相关资料,以及由此推动的深入挖掘和研究才是最重要的。SICP的作者Gerald J. Sussman同时也是Scheme语言的发明人之一。

利用晚上和周末空余的时间,断断续续地看完了SICP第一章的大半部分,还有前面的几段讲义和视频。讲义中的有一个求方根的程序:

#!/usr/bin/guile -s
!#

(define square
  (lambda (x)
    (* x x)))

(define average 
  (lambda (x y)
    (* (+ x y) 0.5)))

(define close-enuf?
  (lambda (guess x)
    (< (abs (- (square guess) x)) 0.001)))

(define improve
  (lambda (guess x)
    (average guess (/ x guess))))

(define sqrt-loop 
  (lambda (G X)
    (if (close-enuf? G X)
      G
      (sqrt-loop (improve G X) X))))

(define sqrt
  (lambda (x)
    (sqrt-loop 1.0 x)))

;;(display (sqrt 2))
;;(newline)

短短几行,几乎涵盖了二分法的精髓。程序就是数据,函数本身可以当数据来操作,本身就蕴涵着深刻的和谐统一的数学美。

其实学习这个东西就像武侠小说里的武功,公式技巧编程语言都是花拳秀腿,对整个学科体系的理解、数学的功底才是精深的内功,是一切上乘武功的根基。由此我又想到一个人的工作的价值。私以为,一个人的价值(也可以说是薪水),是以这个人的不可替代性来衡量的。如果你现在走掉,而你的老板随随便便就能找一个人来顶替你的岗位,那么你做的工作是可替代性非常高的工作,自然薪水也不会太高;反之亦然。

ps:写博客写到一半的时候is-programmer忽然挂掉,所以出现了半截文章。看来我也该考虑考虑租一个独立的虚拟主机或者VPS了。

x86-64 Arch Linux on ThinkPad x220i

去年换x201i的时候,曾经折腾出一篇《x86-64 Arch Linux on ThinkPad x201i》,后来x201i陪我度过了毕业半年最为艰难的岁月,表现可圈可点,配合我自己调制的ArchLinux,系统非产高效,让我在4个月的时间内搞定了8门课程、毕业设计,还看了不下二十部电影和纪录片。

说起操作系统重装,我也算究竟沙场了。基本上每半年会重装一次操作系统,从XP,Vista,RedHat 9.0,Fedora,到Ubuntu 8.x,转向ArchLinux、Gentoo,甚至在华数淘宝实习的时候还装了4台PC和2台Dell的PC Server。最长的一次要属第一次接触Gentoo的那次,装操作系统装了有2个星期,折腾了两个月,终于发现这个东西不符合低碳节能的基本要求,再一次不小心的fsck误操作中彻底结束了Gentoo之旅,回到了Ubuntu和Arch的怀抱。

来到百度第一天领到的新笔记本,x220i,好家伙,上网一搜,居然是今年最新款的X系列ThinkPad。CPU是新一代的SNB架构。默认系统的十年前的XP。本来我想另辟空间再装个Linux来个双系统,后来XP实在用着不爽,遂全盘格式化,全部分给ArchLinux。

我一直有一个疑问:为什么Windows的命令行,无论是CMD还是PowerShell,不能实现最简单的窗口最大化功能?

OS版本用的是Arch Linux 2010.05,在mirrors.sohu.com上下载支持 32 位及 64 位架构的 Dual 映像,用UltraISO刻录硬盘镜像到U盘上。本以为ArchLinux的安装会像以前一样轻车熟路,不曾想这次却遇到了以前从来没有遇到的一个大麻烦:网卡无法识别!!!

不能上网就意味着不能装X,不能装X就意味着没有Firefox,没有Firefox就意味我不能上网来写这篇博客。无奈之下,去同事的机器上下载了最新的Linux Mint 11,痛快装好,网卡这次能用了。

Google搜索,发现Arch Linux 2010.05是2.6.32的内核,而Linux Mint 11是2.6.38的内核,因此我怀疑是不是ArchLinux内核比较老而x220i架构比较新的原因。搜索的过程中发现了一个叫做ArchBoot的项目,说白了就是半官方的ArchLinux滚动更新ISO。热切的下载了最新的ArchBoot刻录安装,但是不幸的是这个ArchBoot在我的笔记本上根本无法启动。

怎么办?要不重新叫IT部门的人重装下XP?还是先用一段时间的Mint,等下一个ArchLinux的官方安装版?

但我终究是忍不住的。电脑之于黑客,相当于宝剑之于剑客。没有顺手的系统,自然没有高效的工作和良好的心情。

于是不得不换一种思路:尝试手动去下载Intel网卡的驱动,然后编译安装,搞定网卡驱动后再联网升级到新的内核。事实证明这个策略是奏效的,所需要的网卡驱动程序可以在Intel的网站上下载。安装过程不再赘述,按照安装包里的说明即可。装好驱动后升级内核,装X,装KDE,简单配置下字体,一切顺理成章,不亦乐乎。

最后的两个问题依然是驱动相关。一个是显卡的问题,这个可以通过更新内核来搞定。一个是thinkpad风扇的问题,x201i上的方案迁移到x220i上并不奏效,tpfand基本不可用。好在有thinkfan,通过yaourt安装下。设置主要参考这里,但是原文中所设置的:

sensor /proc/acpi/ibm/thermal (0, 3, 3, 2, 10, 0, 10, 0, 2, 2)

并不存在。在x220i上的/etc/thinkfan.conf设置为:

# I use this on my T61p:                                                                                                                             
#sensor /proc/acpi/ibm/thermal (0, 10, 15, 2, 10, 5, 0, 3, 0, 3)                                                                                     
                                                                                                                                                     
# (0,   0,   55)                                                                                                                                  
# (1,   48,     60)                                                                                                                                  
# (2,   50,     61)                                                                                                                                  
# (3,   52,     63)                                                                                                                                  
# (4,   56,     65)                                                                                                                                  
# (5,   59,     66)                                                                                                                                  
# (7,   63,     32767)                                                                                                                               
                                                                                                                                                     
sensor /sys/class/hwmon/hwmon0/temp1_input (0, 3, 3, 2, 10, 0, 10, 0, 2, 2)                                                                          
(0, 0, 45)                                                                                                                                           
(1, 45, 48)                                                                                                                                          
(2, 48, 55)                                                                                                                                          
(3, 55, 58)                                                                                                                                          
(4, 58, 60)                                                                                                                                          
(5, 60, 63)                                                                                                                                          
(6, 63, 65)                                                                                                                                          
(7, 65, 32767)            

经过此番修整,x220i终于被我调教的舒舒服服,服服贴贴cool。至于旧爱x201i,简单修整了一下给妞用了。

最后许个愿望吧:希望在未来可见的三年内不要再折腾操作系统了。同时遥祝远在Singapore的阿黎早日搞定MacBook上的Ubuntu,整好MitSIM,顺利毕业。嘿。

 

Resize VirtualBox VDI file

在天朝做一个Linuxer是一件很辛苦的事情,众多所谓的programmer整天捧着万年不变的WinXP和IE6,嘴里念叨着ASP、.NET圣经,以为自己脑门里想的眼睛里看到的就是整个天空。

所以VirtualBox依旧Linuxer一件必备的武器,不时地拿出来应付一下所谓“老板的文档”、“学校的教务系统”啊,等等诸如此类。前两天收拾公司新配的thinkpad x220i的时候,本来打算装双系统,可是不知怎么的,XP莫名其妙的启动蓝屏。一怒之下格了整个系统,重装了ArchLinux。装的过程一波三折,主要是x220i的硬件驱动问题,非常头痛,日后开一篇文章再叙。

VirtualBox的虚拟XP最初设定硬盘大小为10G,最近已经占到了9G的使用率,急需扩容。网搜共找到两种方法,一种是利用GParted拷贝硬盘的方法,比较麻烦,但是更为通用;另一种是VirtualBox 4.x新加的一条命令,非常简单:

VBoxManage modifyhd winxp.vdi --resize 50000

但是这样调整后,VirtualBox已经可以识别出硬盘调整后的容量大小(50G),而虚拟的XP系统C盘依然显示调整之前的容量。无碍,再去下载一个Windows分区软件EASEUS Partition Master Home Edition V8.0.1,在里面会有调整C盘分区的操作,该操作会把剩余没有识别出来的40G的unallocated的空间合并到C盘里面。

剩下需要解决的是虚拟XP的网银问题,不过我对此不抱什么希望。试试看吧。顺便吐嘈一句,早晨等公交等了40分钟,晚上等到同一辆公交,可是公交开了一站就抛锚了,换车的过程中钱包丢了,点背到家了。

七忆

终于有时间坐下来,喝杯茶,咬个苹果,听着许巍的歌,梳理下自己的生活。而就在一个月前,我还在为了我的毕业大业而殚精竭虑,为了准备最后的两门考试而通宵达旦、焦头烂额……

整个毕业季就像杭州六月的梅雨,连绵不绝,阴郁沉闷。毕业设计一路山寨,一路顺风;计算机网络、计算机组成、计算机体系结构三门专业课都是重修,采用各种非常手段完成课堂作业,经过两周的艰苦努力,最后有惊无险顺利通过;电路原理清考,看书看得想吐,也不知道是老师手下留情还是我运气不错,最后也顺利通过;还有三门不痛不痒的通识,上交了几张照片、一篇影评、一篇代写的伦理学论文。

我没有去参加任何学校组织的毕业活动,甚至没有去参加本科生毕业典礼——那天天气不好,我睡了半个上午的懒觉。我也没有参加任何班级活动,一方面我在准备考试,另一方面我也确实不太想去——我对这个班级并没有多少感情,感情不是靠生硬地组织几次活动、玩玩三国杀、吃几顿饭就能培养出来的。所谓最后的毕业旅行,也不过是认识的不认识的同学一起见个面说声再见而已。既然如此,不去也罢。

我甚至连传统的学位照也没有,那个时候我还有考试,哪有心情拍这个?而我自己也对符号化象征性的仪式逐渐丧失兴趣。可悲的是,我的一个同系同学,为了拍一张疯狂一点的学位照片,跳进西湖游泳,结果不小心挂掉了……

我收拾了十几包的行李物品,其中一半是书籍、三箱户外用品、剩下的都是衣服杂物,邮寄费就花了一千大洋。可是最后还是丢了一箱书籍,像掉了一块肉,痛了许久。没错,书是可以再买的,但是书上的笔记、指纹和纸张微黄的颜色怕是再也买不到了。

book

7月1日结束最后一门考试,去了趟天台妞妞的家,不幸游泳晒伤,掉了一层皮;4号回到学校等待学位审核结果,5号通过,6号拿到毕业证和学位证,却因为成绩的原因与CKC的荣誉证书失之交臂。晚上还是站票,18个小时后的下午,在北京,在承德,在我的家乡,我又看到了不一样的蓝天。

在家的日子更多的是无聊和喧闹,想读书只能躺在床上或者坐在沙发上,还要忍受网吧里面日夜不停连绵不绝的叫骂喧闹声。伴随着父母的抱怨唠叨,弟弟的不争无言,十几天的日子,看了一部《士兵突击》,一套《青春如茧》,还有半本《纽约摄影教材》。

20号百度入职,提前一天到北大,见到zhhh,他还是老样子,一点没变,沉浸在自己的学术世界里。入职的时候看到了很多新面孔,我不在的半年,队伍壮大了不少。不过点背的是,由于baidu发展势头凶猛,导致人数招聘过多,工位不够,实习的时候我还能有一个正式工位坐坐,到了正式入职,却只能去坐临时工位了,也不知道要坐到何年何月。

找房子还是一如既往的纠结,几日的奔波劳累,最终在清华西门找到了一个2000/month的独卫小单间,住了两天,感觉还不错。特别安静,晚上睡的很好。回想起来,自己离家七年,从一中的宿舍、到大里路小区、zjg丹阳宿舍、zjg蓝田宿舍、望月小区、yq 30舍、yq青芝坞,清华西门,平均一年就搬一个地方,这个成绩应该算不俗了吧,嗯,行者本色也。^_^

我曾经热切地盼望着毕业,因为毕业后就有大把大把的money;

我曾经热切地盼望着毕业,因为毕业后就不用再去准备各种各样恶心的考试;

我曾经热切地盼望着毕业,因为毕业后就意味这自己真正的独立;

只是不知道为什么,

我开始怀念紫金港启真湖的夜和月、月下的杨柳和拂过杨柳的风、风中两只攥着的小手;

我开始怀念华家池冬天冷如地窖的图书馆和池上10元自由驰骋的船;

我开始怀念玉泉遮天蔽日肆意生长的法国梧桐;

我开始怀念之江的绿、虫,还有情人桥;

我开始怀念在西溪北园每个夏夜和布袋畅谈的夜晚;

你所要失去的,正是你即将开始怀念的。

最后的最后,我的思绪又回到了竺可桢校长的两个问题:

诸位在校,有两个问题应该自己问问,第一,到浙大来做什么?第二,将来毕业后要做什么样的人

毕业后要做什么样的人?这个问题我至今没有明确的答案,唯一可以确定的,就是希望自己不要在未来的生活中被磨平了棱角。人没有自己独立思考的能力是最可怕也最可悲的事情。

我曾经信誓旦旦的下定决心一定不会再去深造,但是工作几天我又开始怀念学生时代的自由,和大把的业余时间。是工作就要有流程报表这些很程式话的东西,更何况是在Baidu这么一家知名的大公司里面。下决心不深造是因为受够了恶心课程和低水平教学的折磨,而对于读书一事我还是非常享受的。最理想的情况是,什么都不要让我干,就让我泡几年的图书馆就好。回想一下,高一高二搞竞赛的那段时间,真的是少有的专心读书的时光。当时没有觉得有什么大不了的,现在却非常怀念。因为那个时候简单,甚至有些单纯,有些傻,每做出一道题目看完一章书独立完成一个证明理解生活中一个日常现象,都能给自己带来莫大的快乐,乃至于几个月不洗澡都感受不到自己身上的味道……。

绝大多数人在毕业后的几年内都找不到北。我也是。不过我始终记得旅行者的那七个字:行走、思考、在路上。




Host by is-Programmer.com | Power by Chito 1.2.6 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee