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

一个人的自在

6月15日开始找实习,到了25日左右迎来了人生第一个offer——华数淘宝,待遇是60元/天+10元/天的晚餐票。找实习的过程很简短,百度和创新工厂预料之中的悲剧,DeviceVM莫名其妙的简短面试和之后的杳无音信,普联TP-Link的5分钟快餐面试,阿里一封没有下文的邮件、一个打到一半我手机却没电的尴尬电面、一个没有下文的快餐电话,以及来自上海紫竹科技园Intel的漫不经心的“聊聊“,还有十几封泥牛入海的邮件。两周不到,能拿到这个offer,也算是一个不错的结果了。至少这样的结果给了我信心,成绩差没关系,关键是自己有几斤几两。

而后就是无奈的期末考试,算不上奋力一搏,只是应付了事,弃了一门,挂了两门,剩下的几门70的、80的、90的各占三成。至此我的大学还剩下十门考试:

  1. 电路原理(重修)
  2. 线性代数(重修)
  3. 数字电子技术(重修)
  4. 编译原理
  5. 编译系统设计
  6. 计算机组成
  7. 计算机体系结构
  8. 计算机网路
  9. c#程序设计
  10. 软件体系结构

这样的结果,在我的同届预科生中应该算是很悲惨的了。至少很多同学由于多了预科半年的学习时间,到了大三下这个时候,已经完成了除了毕业设计外的全部学业,更有甚者,比如一位我只有过一面之缘的HDJ,已经提前一年毕业,拿了港大的offer——此mm是浙大李志文商学班的,同时也是浙大游泳队队员之一。对于这样的mm,除了客套的ym,更多的是一种敬仰吧——有规划有理想有追求并且能坚持不懈的做下去。

熬到7月6号,总算考完了最后一门——软件工程,在我看来是一门非常虚无非常飘渺的课程,其结果就是我只上过一次课,成绩也算对得起我的到课率了——68分——刚好达到浙大学位证最低成绩要求……

再之后是帮毕业的mm收拾寝室,给mm拍傻傻的学士服照片……12号早晨送走了mm,一个人去淘宝报道。没想到第一天报道也是一番纠结,首先是华数淘宝正式从淘宝剥离,从文二路淘宝公司内部搬到了紫荆花路府苑新村,然后我放下自行车导了三辆公交才到华数淘宝。第一天工作很简单,让我在windows上配置个trac,看看nginx服务器。都是从未听说过的东西。

我的理解,trac是个python语言写的svn前端+wiki的集合体,著名的c++ boost库用的就是trac,ruby也有类似的东西,叫redmine,当然,我对ruby一无所知,对python也仅仅是看过《Learning Python》的前两章,还出于ym的阶段。安装参考这篇How To Install Trac on Windows,其中有几个链接已经过时,需要自己手工下载安装。安装的过程还算顺利——比安装gentoo顺利多了。不过还是挺麻烦的——如果在linux下,一两条命令应该就可以了,也不用“鼠标点击——next——install“。

nginx是轻量级的http服务器,其功能或许不如apache全,但是性能却比apache强很多,尤其是在flv视频支持方面,其原理大概在于nginx针对不同的平台编码采用了不同的I/O模型。nginx的代码不算长,大概10w行左右,用c写成,所有的东西甚至包括./configure脚本都是作者手工写成,是一个锻炼阅读源码的好项目。国内的血多视频网站如youku、tudoo等后台服务器都是nginx。

第二天我就参加了小组会议,头儿给我讲了整个项目的架构和周期,听的我非常兴奋。大体思路就是我们要搭成一个全新的视频点播平台,做成中国的itunes app store。整个一周我都在了解各方面的信息,也对taobao这样的互联网公司有了进一步的了解。网上浏览的时候接触了很多“牛“的资源:

这些实际的项目、经验、团队、感想,感觉就在自己的身边,让我兴奋不已。阿里巴巴,马云,中国能有这样的企业,我觉得这是中国的未来。Open Source Never Die。

除了完成头给定的任务,我在网上快速的学习一些科普知识,各个方面的都有,很多东西扫一眼百度百科也比毫不了解要强,这些入门知识包括:

 吓到了吧?其实很多我都不会。我现在出于“我不知道我不知道“到“我知道我不知道“这样一个转变的过程。下一个目标是:“我知道我知道”。

除此之外,每个桌上那一抹绿色,厕所里的“蹲位以待“,中午和老总一起吃饭的气氛,自由宽松的工作环境时间,这些都是我喜欢的。不过日子久了,每天面对着电脑,看着一行行的字母滚动而过,不免麻木。每天晚上出了公司,抬头看看杭州最近让人淡定不能的天空,心里总有一些别样的悸动。

“我一个人吃饭、旅行,到处走走停停;也一个人看书、写信,自己对话谈心”,mm在上海入职培训,无暇顾我,我也就不再好意思打扰她。我告诫自己要忍让要懂得理解,千万不要因为这样的事情跟mm生气,如果连这点小事都忍受不了,以后又该如何支持mm的工作?我这样自我安慰,mm却不太理解,怪我对她的事情逐渐冷漠,搞得我伤心不已。

“你喜欢这个啊,你喜欢玩所有的毛绒玩具,你喜欢妈妈,喜欢爸爸,喜欢你的小睡衣。你什么都喜欢,是不是?知道吗?等你长大了,曾经喜欢的东西也许会变得不 再特别,就像这个玩偶盒,你会发现那只是一片铁皮加一个人偶,那些原本钟爱的东西会渐渐被你遗忘,到了我这个年纪,钟爱的东西也许只剩下一两件了,对我来 说只剩一件了。”《拆弹部队》,James对他的女儿说完这些,又独自回到了战场。

我这个人是个有点“无趣”的人,我不喜欢电脑游戏,什么dota、星际,我觉得要学会这些比修一门电路原理还难;我也不喜欢追星,我觉得谁当选了世界足球先生谁谁拿了NBA总冠军与我没啥关系,听说世界杯决赛在夜里两点,设了一点的闹钟,结果闹钟响了我按了继续睡……;我觉得一大群人去KTV去杀人游戏玩三国杀绝大多数时间也是纯属无聊找点消遣,阿桑还说:“孤单是一个人的狂欢,狂欢是一群人的狂欢”;我在校内上很低调,因为我觉得那里很浮躁,每天去看看无非就是了解下朋友的动向;所谓朋友,多数时候只是在特定的时间特定的地点和特定的环境下的朋友,到了人生关口,大家各奔东西,所谓友情也被岁月冲淡,我觉得真正的朋友不需要经常的联系来保持朋友关系,但现实中大多数的朋友需要经常联系保持这种朋友关系,这或许就是贺岁短信的终极目的吧。

所以说人生得一知己死而无憾。“什么?你了解我?笑话,我自己都不了解我,你会了解我?”

每个人都是孤独的行者。

人生在世,所谓何求?

所谓成长,就是信仰一个个崩塌的过程?

当有人要教育你的时候,你一定要提高警惕!

我们的教科书告诉我们要正视历史、以史为镜,可是广电却封杀了《活着》、封杀了《蓝风筝》、封杀了《颐和园》,这就是所谓“以史为镜”?

我们的社会主义赋予人所谓言论自由集会自由,同时我们的社会主义也用GFW提前给我们确定了考试范围和作文题目——我不要这种阉割的自由,我是个成年人,你凭啥单方面的决定哪些东西我该看哪些东西我不该看?

我们的党告诉我们只有共产党才能就中国,国民党的老巢台湾也没比大陆差到那里,真是一句屁话,我认为大学生盲目入党是中国当代大学生最大的悲哀。

其实有时想想,我们到底有没有必要那么执着?我们执着的入党出国学习深造进入名企做什么电子商务网游平台SNS,可是我们的国民却有很多人上不起学吃不起饭不知道电脑为何物。

欲望是痛苦之源。

我最近关注豆瓣上一个同城的活动:我们一起去流浪动物救助基地做义工吧,看了土豆网上一个视频,我开始思考佛教,审视素食主义。我想去基地做些事情,可是两次都睡过了。我开始思考李连杰,重温他的《霍元甲》;我看了《甘地传》,思考着爱因斯坦的那句话:“后代子孙将无法相信,世上曾活生生的出现过这号人物”;我想到了感动中国颁奖台上徐本禹滚滚而下的两行泪水;我想到了丛飞之死;我想到我的朋友db,放弃了学业,“抛弃了一切”,去做他“想做的事情”:

我想到了陆川的《可可西里》;我想到了雀儿山口常年护路的道班战士,想到了青海湖边那个没有电的小镇。

没有什么能够阻挡,你对自由的向往

天马行空的生涯,你的心了无牵挂

穿过幽暗的岁月,也曾感到彷徨

当你低头的瞬间

才发现脚下的路

心中那自由的世界

如此的清澈高远

2008.5 青海湖

2008.8 四川甘孜

请叫我们:行者。

纠结的j2ee之旅

还没启程,就遇到了诸多意想不到的问题……弄得我焦头烂额,极度郁闷。

web开发本身就是的部署本身就是一件极其纠结复杂的事情,在正是进入web开发前先要搞懂什么叫静态网页、动态网页,什么叫服务器、客户端,什么叫tcp/ip,什么叫html/css,什么叫做动态语言等等;而要进行j2ee的web开发,新概念的爆炸简直是一场急风暴雨,扑面而来,譬如jsp、javabeans、struts、hibernate、spring、ejb、设计模式、MVC等等,令人目不暇接,说实话这写概念到今天我也只是略懂皮毛,因此寻求一款好用的IDE协助开发成了当务之急。等到真正熟悉了整个开发流程和原理,再尝试着转回CLI,寻求一种full-control的感觉。

想进行Java Web开发,第一个前提是有Java,第二个前提是有Web。Gentoo上的Java还是好搞定的,一条命令几乎什么都设置好了,也不用像windows那样去设置PATH环境变量。但是令人比较混乱的是java的选择问题。Gentoo上的jdk至少有5、6种,什么ibm的、apple的、sun的等等,还有什么openjdk——貌似是sun-jdk的开源版本,icedtea(A harness to build the OpenJDK using Free Software build tools and dependencies),GNU Classpath。默认安装的是icedtea6-bin。反正搞到最后,命令行下敲一个java和javac,能用了,因此关于openjdk和sunjdk之间到底是什么关系,我也就没有再深究了。

Java好了,接下来就是开发环境的选择了。记得去年的java程序设计,我单用emacs就搞定了1500行的java校车查询系统,因此emacs+jde+ecb应该也能胜任。但是今年的J2EE Project更侧重web和database,这方面我不熟,因此就想暂时偷偷懒,找个IDE暂时搪塞一下。

关于Java开发的IDE,除了已经“廉颇老矣”的JBuilder,恐怕只剩下EclipseNetbeans了。早先安装过这两个大名鼎鼎的IDE,觉得还是Eclipse更美观一点,因此这次也就首选Eclipse进行安装。安装过程倒也顺利,只是众所周知,Eclipse和Emacs一样是一个平台,需要插件的协助才可以“建功立业”。习惯了linux自动化的包管理系统后,自然也希望Eclipse的插件管理也有类似的功能:自动下载,自动配置,自动判断依赖。可是我几乎在网上找了一天,也没有找到合适的网址,作为Eclipse插件的“源”,自然是及其郁闷,索性放弃,去做别的事情。

后来一次做嵌入式的实验,闲来无聊,就下了windows版的eclipse安装在实验室的电脑上,然后在这个版本上的eclipse找到了比较合适的更新网址(泪流满面,真不容易):

  • EPP Packages Repository http://download.eclipse.org/technology/epp/packages/galileo
  • Galileo http://download.eclipse.org/releases/galileo
  • Mylyn for Eclipse 3.4 and 3.5 http://download.eclipse.org/tools/mylyn/update/e3.4/
  • The Eclipse Project Updates http://download.eclipse.org/eclipse/updates/3.5
  • The Eclipse Web Tools Platform (WTP) Project update site http://download.eclipse.org/webtools/updates

这样总算能安装一些常规插件了(什么?你问我怎么安装?呃,这个问题还是先问问百度先生和google小姐吧。)我安装了Eclipse CDTEclipse WTP,还有一些看似像但不知道能不能用的上的插件。

老师用的是MyEclipse,对于MyEclipse,我的理解就是一个插件的集合,针对Java Web开发做了整合优化。我也想图省事,就去校内的神网搜索,只有MyEclipse 7.0 for linux版本,装之……无法启动……直接sudo rm -rf /where/is/myeclipse/……我又想到最新出的MyEclipse 8.5版会不会好一点,结果是,MyEclipse的官网说”你们中国盗版太严重了“,因此封了所有来自中国的ip,所以也就无法访问了,彻底无语了……

Eclipse安装完毕,简单Hello World也能跑。好啦,开始配置Web和Database。

涉及到的Web服务器主要有两个,ApacheTomcat。这两者是什么关系,有没有相互的依赖性,又是一头雾水。貌似Apache主要解析静态网页,配上php模块可以解析动态php网页,而Tomcat则主要解析ServletJsp。具体依赖性我就不知道了。不过Tomcat是Apache的子项目倒是真的。Apache的配置比较简单,参见Gentoo Wiki,而Tomcat的配置又出了很大的问题。Gentoo Docs上的Tomcat Guide有这么一段:

Standard Tomcat Layout

The root directory of a typical Tomcat binary distribution is laid out as illustrated in the following listing.

Code Listing 2.1: Standard Tomcat Root Directory Layout

/opt/tomcat-x.y/bin
/opt/tomcat-x.y/common
/opt/tomcat-x.y/conf
/opt/tomcat-x.y/logs
/opt/tomcat-x.y/server
/opt/tomcat-x.y/shared
/opt/tomcat-x.y/temp
/opt/tomcat-x.y/webapps
/opt/tomcat-x.y/work
        

Note: Substitute either 5, or 5.5 for x.y

gentoo Tomcat Layout

To comply with FHS and Gentoo standards, Tomcat has been dissected and installed into the following locations.

Code Listing 2.2: Gentoo Tomcat Layout

/usr/share/tomcat-x.y/bin
/usr/share/tomcat-x.y/common
/etc/tomcat-x.y
/var/log/tomcat-x.y/logs
/usr/share/tomcat-x.y/server
/var/lib/tomcat-x.y/shared
/var/tmp/tomcat-x.y
/var/lib/tomcat-x.y/webapps
/var/run/tomcat-x.y

这里面又涉及到一个FHS(Filesystem Hirarchy Standard)的概念。简单的说,tomcat的“正常”安装(在windows平台上)呢,其所有的安装文件都应该在同一个目录下,但是Linux(Gentoo)呢,则有自己的标准(就是FHS),比如临时文件放/tmp和/var,配置文件放/etc里,因此gentoo就把tomcat这个包拆了放到不同的目录里面,这样和自己的哲学比较统一,也确实比较便于管理,比如gentoo环境下开机自动启动apache和tomcat,只需要:

sudo rc-update add apache2 default
sudo rc-update add tomcat-6 default

事实上重启后apache和tomcat服务都已经启动,在浏览器地址栏输入http://localhost/就会出现apache的经典宣传口号“It works!",但是输入http://localhost:8080,浏览器却显示一片空白,再次输入http://localhost:8080/manager/html时,跳出一个对话框,询问manager的用户名和密码(这个密码需要自己配置),正确配置了用户名和密码后重启tomcat输入manager/html,是出现了一个界面,但是功能残缺不全,很多超链接指向html但是实际目录中的文件确实xml格式。而且Eclipse的tomcat插件要求tomcat的安装必须在同一个目录下。我曾想着在/opt/tomcat做几个ln -s的软链接,但终究失败。搜索良久,我找到了这片文章,里面描述的的窘境和我的情况一样。

没办法了,只能去官网下了tarball,自己解压手动安装到/opt/tomcat目录中。然后每次开机手动启动tomcat,这下Eclipse的插件配置也好了……此时的我泪流满面……然后呢,参考ibm developerworks上的文章,兴冲冲地在Eclipse中建立Dynamic Web Project,写了一个"hello, jsp",然后启动tomcat,又出现了tomcat无法启动的问题:

eclipse tomcat

然后我就无语掉了……继续泪流满面……

看来,偷懒的方法不成,还是得回到原始生活时代,开始上网搜一些emacs开发j2ee的东西。用脚趾想也能想得到,用emacs的少,用emacs开发java的少,用emacs开发j2ee的就更少了,因此资料也是出奇的少,相关插件也不完善。拿最简单的jsp来说,我觉得怎么也应该有一个比较顺手的jsp-mode的插件吧,可是结果令人失望……分别尝试了mmm-mode,multi-mode,jsp-mode,nxhtml-mode,可是无一如意,要么是bug无法启动,要么是用了一段时间后就bug,无法正确缩进(nxhtml)等等,于是这条路也走不通了。

于是就剩下最后一个备胎了,netbeans。老实说我不太喜欢netbeans(我觉得界面和字体照eclipse差远了,java swing做出来的东西貌似没几个特别好看的)。emerge一下,提示有几十个包300M的东西要下载,好大的家伙,忍了。然后呢,开始的几十个包安装还是很顺利的。只是到了jnlp这个包,出现了以前没有遇到的问题:

>>> Emerging (1 of 3) dev-java/jnlp-bin-1.2-r1

!!! dev-java/jnlp-bin-1.2-r1 has fetch restriction turned on.
!!! This probably means that this ebuild's files must be downloaded
!!! manually.  See the comments in the ebuild for more information.

 * Please download javaws-1_2-dev.zip and place it in /usr/portage/distfiles
 * https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=7026-jaws_dev_pack-1.2-oth-JPR@CDS-CDS_Developer
 * Fetch failed for 'dev-java/jnlp-bin-1.2-r1', Log file:
 *  '/var/tmp/portage/dev-java/jnlp-bin-1.2-r1/temp/build.log'

>>> Failed to emerge dev-java/jnlp-bin-1.2-r1, Log file:

>>>  '/var/tmp/portage/dev-java/jnlp-bin-1.2-r1/temp/build.log'

 * Messages for package dev-java/jnlp-bin-1.2-r1:

 * Fetch failed for 'dev-java/jnlp-bin-1.2-r1', Log file:
 *  '/var/tmp/portage/dev-java/jnlp-bin-1.2-r1/temp/build.log'

google了一下,大概意思是由于license问题,需要到sun的网站上去下载,需要”同意某个许可“,然后给出一个下载链接,就是上面的log中给的那个长串,可是令我极其郁闷的是这个链接怎么也打不开,用wget -c也下载不下来,最后我怀疑是GFW的问题。shit,真是不能忍了,本来不想折腾的。把人逼到绝境。于是我就想起了前不久看到的一个west-chamber计划,好在linuxsir上面还有相关的帖子教程,加了gentoo-china的overlay,可是用eix搜索却怎么也搜不到这个ebuild,奇了怪了,又搜寻了好久,原来是layman升级到1.3后overlay portage的位置改变了,找到了sabayon forums上的帖子,解决了layman的问题,这写总算可以emerge west-chamber了。

编译的过程出了问题,原来是内核配置的问题,又照着linuxsir上的帖子改了.config文件,重新编译了内核,现在还没有重启,不知道能否成功编译west-chamber,翻越GFW。

“待月西厢下,迎风户半开,隔墙花影动,疑是玉人来。”




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