总算下定了决心,在linode买了一个VPS(Virtual Private Server),就要结束这N多年blog无定所的日子了。一直以来就觉得,把东西寄托在第三方的blog服务提供商处根本不算个blogging的方式,而且悉数目前的BSP们,国内的免费阉割服务严重,有独立域名的想绑定的话还要备案,国外的自由一些,发布方式也更多样一些,可惜有的已经被墙,其他的永久性拥有被墙的可能。自己搭建blog就不一样了,虽然麻烦一些,不过还好所有的事情还不是太难办。大部分人可能还是用虚拟主机服务,也有越来越多的知名blogger们不满于虚拟主机服务的束手束脚以及主机商的overselling,逐渐地转移阵地,而又以选择VPS这种方便快捷的托管方式的人居多。
虽然我完全不是什么知名blogger吧,有一个自己的VPS还是很有吸引力的,blogging的需求放一边,更是可以有一台随时待命的有独立公网IP的服务器用于实践一些自己的想法,发布一些应用和服务。于是就去linode买了最便宜的linode360,每个月$19.95,还算划算,一键安装了ubuntu karmic,内存虽然小一些,只有360M(linode*360*嘛~),跑个流量不大的没有静态化的wordpress还是没问题的。拿到手第一时间就实践了一个以前没做的事情:用nginx替代apache2跑web应用。自己的VPS就要自己照顾打理,相比发个email发布blog来说还是很锻炼人的。
兴奋的差点忘了说,blog搬家至http://blog.iusr.me/。
星期二, 十二月 01, 2009
星期日, 九月 20, 2009
出差记 [1]
临走前电视里正播Carlifornia这儿的大火,说都要烧到机场了云云,所以老婆和爸妈都挺担心的。其实降落时也没感觉,就听见有人嚷嚷能看见好莱坞的大牌子,妈地,我坐在中间座位上也肯定是看不到了,不知道真的假的。不过后来看网上的图片,那大火确实够牛X的,有种灾难大片的感觉。
洛杉矶国际机场感觉真大啊啊啊啊啊啊啊啊啊,布局跟北京那个很不一样,不过因为急着转机也就没逛。
过海关时还好,只不过因为顺路捎了些要寄给在这儿上学的大姨子的食品和衣服,有一些吃的被人家要求当场扔掉,唉,想当初在超市时买的时候也花了不少钱了。也算积累了一些经验值:鸟身上下来的东西,甭管是啥,以何种形式出现,都是要扔的,包括快熟汤料;牛肉的话,罐装的可以,塑料真空包装的都要扔;不要想蒙混过关,海关的人多少都懂一些汉语和汉字,带个鸟字旁的字他们都认识。甚至于,我带的一包话梅肉都被海关的帅哥拿起来检查了半天,问我说这到底是啥,我解释了半天是plum之类的东西,他问,上面不是有"肉"字么,我当时就震惊了,这丫也太精了,还认得汉字,遂顺便给其介绍了一下我国汉语的博大精深,颇像一周以后某同事跟请我们吃饭的印度同事解释豆沙的"沙"字。最后帅哥表扬了我的配合精神,拿了我的护照不知道做了啥记录之后还给了我,对我莅临美帝表示了欢迎。整个过程气氛友好,我们还对食品卫生以及恐怖主义这类关系国计民生的问题亲切交换了意见。
后来我觉得吧,估计要是忽悠忽悠他,好多东西也就不用扔了。一帮很单纯的人。算啦,谁愿意缺这德谁就缺去吧~
美帝安检很严格,转机过安检门时就差脱掉裤子了。鞋要脱,皮带要解下来,衣服口袋里不能有任何东西,笔记本要从包里单独拿出来放盒子里,上面还不能有东西覆盖。队伍前面某位不太配合的老哥导致我们后边的人等了将近20分钟,害得我一直怕错过2小时以后的那班去圣地亚哥的航班。其实还是我太实诚了,后面的航班提前10分钟才慢慢腾腾地广播提示开始登机。其实估计也因为这个航空公司太颓,虽然名头听起来还很牛X,American Airlines,域名也很牛X,aa.com,看见了飞机才知道,那么小的飞机,就差用螺旋桨了。这也让我误以为美帝的国内航班可以不用像国际航班一样那么早提前几个小时就过去机场。
飞机虽小,坐上去还是比较舒服的,估计美帝人民每天生活在水深火热当中只能以暴饮暴食聊以自慰,都长得很富态,所以飞机的座位空间都很大,后来从圣地亚哥飞旧金山的时候坐的美联行的飞机也是。于是让我很不能理解第一次出差时坐的英航的波音767,竟然能挤成那样,没见英国人很矮小啊!
这次飞行过程中我开始觉得悃了。从北京飞到洛杉矶的途中基本没怎么睡觉,旁边的一个导游老姐感冒了,频繁咳嗽打喷嚏擦眼泪,伴随着一些小动作,所以虽然我的座位相对来说比较不错,我也从一上飞机就试图睡觉休息,可还是一直没能睡踏实,最长的睡眠时间估计也就不过半个小时,其他时间都在看出发前快递来的书,虽说是后来基本没用上的书;而另外一边的导游姐姐在被乘务长亲自制止了拿iPhone玩游戏的行为以后,倒头就睡,一直睡到降落洛杉矶前半小时。就像上次出差途中一样,这种人我一直都惊为天人。
快降落的时候,这AA的机长开始抒情:俺们的圣地亚哥这旮儿多美啊,夜景更是美啊,云云。往舷窗外看了一眼,我靠啊,这么黑?没路灯么?我心里马上就唰地出现了一个城市的模糊的形象:N多墨西哥偷渡来的小混混,身上都纹着带鱼,拉帮结伙地在街上乱转,黑灯瞎火的路上,有人被打劫,有黑帮火拼,et cetera。我的小心肝儿一下就紧张到极点,肾上腺素也嗖地全出来了,瞬间就不悃了。
降落了,出了飞机还要走好远到出口,黑灯瞎火的,感觉这机场够小的,圣地亚哥也肯定是个破破烂烂的落后城市——后来的经历证明这完全是我的幻觉而已。到了出口附近领行李,谢天谢地两个箱子都还在,感谢全球航空公司和机场的协作机制,感谢社会主义国家人民和资本主义国家人民能不计前嫌携手保障人民出行。拉起两个箱子,按指示走到可以叫出租车——也就是传说中的cab——的地方。左右看了看,路上基本都没人了啊,这才10点,放咱那儿正是马路边儿上支起桌子吃砂锅的钟点儿啊。出租车隔了10分钟才到——要说这地儿的出租司机可真有派儿啊,放咱那儿都要排着队等着谁叫车,这可好,还得现打电话叫。拎包上车,给司机看了看目的地地址,司机操着西班牙口味的英语拍胸脯表示没问题。暂时没搞清楚美帝这儿的邮编是不是像英国那里一样精准,据说英国的邮编能定位到几间房子的范围。美帝这儿的出租车可真大,开起来也真快,就是路上果然真是没啥路灯,不过也没有想象的那么少,很多都是被高大的棕榈树给遮住了,在飞机上看不到,只是有些路段还是要完全靠汽车的车灯照明。路上大伙开的都很规矩,没见来回乱窜并道的,外车道的车也基本都是开着很快的,没遇到天津快速路上那种一个小面包儿嘶吼着以50kmph的速度占着快车道的情形。
和我预料的差不多,从机场到酒店开了老半天才到。入住又出个小插曲,前台MM说公司的信用卡结帐时出了些问题之类的,要留我的信用卡以备不测。日,留就留,咱那额度换成美元也不够您刷的。
房间还算不错,双人间,比较大。时间比较晚了,我也基本上全程没怎么睡觉,于是就洗洗睡了。
洛杉矶国际机场感觉真大啊啊啊啊啊啊啊啊啊,布局跟北京那个很不一样,不过因为急着转机也就没逛。
过海关时还好,只不过因为顺路捎了些要寄给在这儿上学的大姨子的食品和衣服,有一些吃的被人家要求当场扔掉,唉,想当初在超市时买的时候也花了不少钱了。也算积累了一些经验值:鸟身上下来的东西,甭管是啥,以何种形式出现,都是要扔的,包括快熟汤料;牛肉的话,罐装的可以,塑料真空包装的都要扔;不要想蒙混过关,海关的人多少都懂一些汉语和汉字,带个鸟字旁的字他们都认识。甚至于,我带的一包话梅肉都被海关的帅哥拿起来检查了半天,问我说这到底是啥,我解释了半天是plum之类的东西,他问,上面不是有"肉"字么,我当时就震惊了,这丫也太精了,还认得汉字,遂顺便给其介绍了一下我国汉语的博大精深,颇像一周以后某同事跟请我们吃饭的印度同事解释豆沙的"沙"字。最后帅哥表扬了我的配合精神,拿了我的护照不知道做了啥记录之后还给了我,对我莅临美帝表示了欢迎。整个过程气氛友好,我们还对食品卫生以及恐怖主义这类关系国计民生的问题亲切交换了意见。
后来我觉得吧,估计要是忽悠忽悠他,好多东西也就不用扔了。一帮很单纯的人。算啦,谁愿意缺这德谁就缺去吧~
美帝安检很严格,转机过安检门时就差脱掉裤子了。鞋要脱,皮带要解下来,衣服口袋里不能有任何东西,笔记本要从包里单独拿出来放盒子里,上面还不能有东西覆盖。队伍前面某位不太配合的老哥导致我们后边的人等了将近20分钟,害得我一直怕错过2小时以后的那班去圣地亚哥的航班。其实还是我太实诚了,后面的航班提前10分钟才慢慢腾腾地广播提示开始登机。其实估计也因为这个航空公司太颓,虽然名头听起来还很牛X,American Airlines,域名也很牛X,aa.com,看见了飞机才知道,那么小的飞机,就差用螺旋桨了。这也让我误以为美帝的国内航班可以不用像国际航班一样那么早提前几个小时就过去机场。
飞机虽小,坐上去还是比较舒服的,估计美帝人民每天生活在水深火热当中只能以暴饮暴食聊以自慰,都长得很富态,所以飞机的座位空间都很大,后来从圣地亚哥飞旧金山的时候坐的美联行的飞机也是。于是让我很不能理解第一次出差时坐的英航的波音767,竟然能挤成那样,没见英国人很矮小啊!
这次飞行过程中我开始觉得悃了。从北京飞到洛杉矶的途中基本没怎么睡觉,旁边的一个导游老姐感冒了,频繁咳嗽打喷嚏擦眼泪,伴随着一些小动作,所以虽然我的座位相对来说比较不错,我也从一上飞机就试图睡觉休息,可还是一直没能睡踏实,最长的睡眠时间估计也就不过半个小时,其他时间都在看出发前快递来的书,虽说是后来基本没用上的书;而另外一边的导游姐姐在被乘务长亲自制止了拿iPhone玩游戏的行为以后,倒头就睡,一直睡到降落洛杉矶前半小时。就像上次出差途中一样,这种人我一直都惊为天人。
快降落的时候,这AA的机长开始抒情:俺们的圣地亚哥这旮儿多美啊,夜景更是美啊,云云。往舷窗外看了一眼,我靠啊,这么黑?没路灯么?我心里马上就唰地出现了一个城市的模糊的形象:N多墨西哥偷渡来的小混混,身上都纹着带鱼,拉帮结伙地在街上乱转,黑灯瞎火的路上,有人被打劫,有黑帮火拼,et cetera。我的小心肝儿一下就紧张到极点,肾上腺素也嗖地全出来了,瞬间就不悃了。
降落了,出了飞机还要走好远到出口,黑灯瞎火的,感觉这机场够小的,圣地亚哥也肯定是个破破烂烂的落后城市——后来的经历证明这完全是我的幻觉而已。到了出口附近领行李,谢天谢地两个箱子都还在,感谢全球航空公司和机场的协作机制,感谢社会主义国家人民和资本主义国家人民能不计前嫌携手保障人民出行。拉起两个箱子,按指示走到可以叫出租车——也就是传说中的cab——的地方。左右看了看,路上基本都没人了啊,这才10点,放咱那儿正是马路边儿上支起桌子吃砂锅的钟点儿啊。出租车隔了10分钟才到——要说这地儿的出租司机可真有派儿啊,放咱那儿都要排着队等着谁叫车,这可好,还得现打电话叫。拎包上车,给司机看了看目的地地址,司机操着西班牙口味的英语拍胸脯表示没问题。暂时没搞清楚美帝这儿的邮编是不是像英国那里一样精准,据说英国的邮编能定位到几间房子的范围。美帝这儿的出租车可真大,开起来也真快,就是路上果然真是没啥路灯,不过也没有想象的那么少,很多都是被高大的棕榈树给遮住了,在飞机上看不到,只是有些路段还是要完全靠汽车的车灯照明。路上大伙开的都很规矩,没见来回乱窜并道的,外车道的车也基本都是开着很快的,没遇到天津快速路上那种一个小面包儿嘶吼着以50kmph的速度占着快车道的情形。
和我预料的差不多,从机场到酒店开了老半天才到。入住又出个小插曲,前台MM说公司的信用卡结帐时出了些问题之类的,要留我的信用卡以备不测。日,留就留,咱那额度换成美元也不够您刷的。
房间还算不错,双人间,比较大。时间比较晚了,我也基本上全程没怎么睡觉,于是就洗洗睡了。
出差记 [0]
已经来美帝两周了,一直也没写点儿什么。今天周末,除了老大请客吃晚饭,之前也没什么活动安排。吃过早饭就来公司写文档,顺便写点儿别的。
2008 年8月18号,一个阳光普照风和日丽万里无云的日子,我高高兴兴地乘坐着天津至北京的城际列车,前往首都安家楼美国使馆签证中心,办理美帝签证。那火车真 是快啊,还没爽够就到北京南站了,而且可以免费拿到传说中的西藏产矿泉水。从亮马桥地铁站出来就看见牛X哄哄的燕莎,真是大买卖儿,一看就知道咱没可能存 钱给盘下来。
签证比较顺利,也算在意料之中。咱多少也算签了几次了,每次都是事先觉得可能会很比较麻烦,过后发现自己真是太实诚太当真了。公务签有公司保着,基本不会 为难啥,旅游签有旅行公司保着,也不会有问题。最大的问题就是同胞们来签证的人真是太多了,每次都是要等起来没完。记得法签的时候是有中法智签,等候时间 很少,英签的时候去的银座那里的签证中心,人就比较多了,不过等候时间也可以忍受。这次是去美国使馆的签证中心,光排队就排了1小时20分钟,比以前两次 加一起还要多。面试官那里倒是没有什么问题,基本人家问我来答,人家说英语我就说英语,人家说中文咱就说中文。排队时看到很多学生模样的人,手里还捧着个 讲稿,英文的,天,实诚到家了,这还带打草稿的么。还有就是网上看见一个大姐,全程跟面试官拼英文,被毙了N次,然后看了签证中心的blog才幡然醒悟, 下一次面签的时候就和签证官选择的语言保持一直,一次性就过关了…
然后就没事儿了,没当面把护照退回来的应该都是过了的。
飞机是9月6号飞洛杉矶国际机场,LAX,然后转机去圣地亚哥,SAN。一起出差的有5个同事,只有我的行程比较特殊,需要去圣地亚哥呆一周再飞去总部,人家都是飞旧金山然后来总部Redwood City这里。
多少咱也是飞过几次的人了,经验教训也积累了一些,所以这次很早就去机场领登机牌,特地要了最前排的座位,因为只有坐这排才能把腿伸开,否则这12个小时 以后肯定是膝盖疼外加腿酸得实在受不了。不过虽然有了前排座位,可既不靠窗也不靠过道,是3个座位里中间的那个。登机以后明白了,两边都是导游,赫赫赫 赫,这就不说啥了,旅行公司和航空公司也基本都是关系户了吧,这种好座位,整天飞来飞去的导游们肯定第一时间能搞到。期间还看到感觉像领队的某人塞东西给 机长和乘务长,作为一个中国人,我对此深表不新鲜不奇怪不打听。俩导游坐上飞机以后很放得开啊,哦,不是那种放得开,我是说人家很会休息,一起飞就赶紧换 拖鞋啥的,还把随身的小行李箱放前面然后把腿架在上面,那叫一个舒坦…看的我真想掀开过道的帘子钻头等舱里去。
一路无话,自己一个人,比较那啥,寂寞。
2008 年8月18号,一个阳光普照风和日丽万里无云的日子,我高高兴兴地乘坐着天津至北京的城际列车,前往首都安家楼美国使馆签证中心,办理美帝签证。那火车真 是快啊,还没爽够就到北京南站了,而且可以免费拿到传说中的西藏产矿泉水。从亮马桥地铁站出来就看见牛X哄哄的燕莎,真是大买卖儿,一看就知道咱没可能存 钱给盘下来。
签证比较顺利,也算在意料之中。咱多少也算签了几次了,每次都是事先觉得可能会很比较麻烦,过后发现自己真是太实诚太当真了。公务签有公司保着,基本不会 为难啥,旅游签有旅行公司保着,也不会有问题。最大的问题就是同胞们来签证的人真是太多了,每次都是要等起来没完。记得法签的时候是有中法智签,等候时间 很少,英签的时候去的银座那里的签证中心,人就比较多了,不过等候时间也可以忍受。这次是去美国使馆的签证中心,光排队就排了1小时20分钟,比以前两次 加一起还要多。面试官那里倒是没有什么问题,基本人家问我来答,人家说英语我就说英语,人家说中文咱就说中文。排队时看到很多学生模样的人,手里还捧着个 讲稿,英文的,天,实诚到家了,这还带打草稿的么。还有就是网上看见一个大姐,全程跟面试官拼英文,被毙了N次,然后看了签证中心的blog才幡然醒悟, 下一次面签的时候就和签证官选择的语言保持一直,一次性就过关了…
然后就没事儿了,没当面把护照退回来的应该都是过了的。
飞机是9月6号飞洛杉矶国际机场,LAX,然后转机去圣地亚哥,SAN。一起出差的有5个同事,只有我的行程比较特殊,需要去圣地亚哥呆一周再飞去总部,人家都是飞旧金山然后来总部Redwood City这里。
多少咱也是飞过几次的人了,经验教训也积累了一些,所以这次很早就去机场领登机牌,特地要了最前排的座位,因为只有坐这排才能把腿伸开,否则这12个小时 以后肯定是膝盖疼外加腿酸得实在受不了。不过虽然有了前排座位,可既不靠窗也不靠过道,是3个座位里中间的那个。登机以后明白了,两边都是导游,赫赫赫 赫,这就不说啥了,旅行公司和航空公司也基本都是关系户了吧,这种好座位,整天飞来飞去的导游们肯定第一时间能搞到。期间还看到感觉像领队的某人塞东西给 机长和乘务长,作为一个中国人,我对此深表不新鲜不奇怪不打听。俩导游坐上飞机以后很放得开啊,哦,不是那种放得开,我是说人家很会休息,一起飞就赶紧换 拖鞋啥的,还把随身的小行李箱放前面然后把腿架在上面,那叫一个舒坦…看的我真想掀开过道的帘子钻头等舱里去。
一路无话,自己一个人,比较那啥,寂寞。
星期日, 五月 24, 2009
买车记,自行车,美利达
标题似乎是说车已经入手了,实际上是没买到。挺郁闷的,八成真跟美利达没缘分,这车再好,我也不买了。原因参见凭记忆摘录的几句我老爹跟销售人员的对话:
"这车后轮跳啊,手提着都能感觉出来。""这个价位的车完全不跳是不可能的,在允许的范围内就行………………(省略若干字)………………要不您看看那边那个7000多块钱一个的*圈*吧,那个不跳。"(注意是7000多一个圈,不是整车。7000多也不8000多来着,记不太清了,应该是7000多)
"你看还有点儿龙……""(打断)这种价位的车圈都是手动调的,您看那个x千多的车,圈是机器调的,好多了。"
不多废话了。回想起来都有点儿郁闷,让人奚落好多句。这样一销售人员,老板得赶紧麻的利儿地奖励啊!对自己销售的产品有强烈的自尊心,体现了强烈的主人翁意识,潜在顾客连句坏话都不能说,而且主动推荐高价产品,说话的口气也很维护自己品牌的高端形象。
要说天津的服务行业一直挺让外地人不舒服的,其实本地人也舒服不到哪儿去。丫们有个比较让我哭笑不得的毛病就是一旦某个人出手阔绰在某丫那儿买了件儿东西,以后出手低点儿的就完全不是人了,谈不拢就要奚落一下。现在有钱人越来越多了,有这毛病的销售人员也跟着多了,再加上大伙工资都上调了不是,也没必要看得起买东西的,对吧。想当初配上一台电脑时也是,花了9750,让人拿13xxx的机器奚落,说啥好乜,真没见过钱还是咋的了,4000不到就这么激动。越激动越不跟BK这儿买。
美利达真是个很不错的牌子,关注的也很久了,跟其他牌子的车也都比较过,基本是完胜的那种,高级别的车真让我有些砸锅卖铁也要买的感觉。一直就想买辆入门级的车,因为对公路车确实啥也不懂,让我一上来就一万多买辆车我还真怕让人给赚了,没有一下子掏出来一万零九百以上跟您买车是我的不对。不过貌似今天店里公路车就剩两辆了,一辆1800也不1900多的车,没关注过那个型号所以一听就忘了,另一辆流浪者算是稍微好一些的。前几天看人家网站的宣传材料里09年新款车型里这款流浪者已经被我排除了,不过今天也没其他的公路车了,乌泱乌泱的都是山地,这车还很牛似的被高高挂着,我就想麻烦人家拿下来看看,没啥大问题的话就买走算了,嘛级别不级别的,总比天天早上等公交车好吧。结果车拿下来了,老爹说检查一下车子吧,又龙又跳。本来我是能理解的,这么多年在祖国活过来的,谁还不知道任何东西都没有完美的这个道理么,可怎么也想不到竟然还给人奚落一通……就当是因为没有一进门就砸下来几万块钱买车吧——我估计几万都没戏,人家是高端品牌,几万人民币不算是钱。
不买了,成了吧。您就当我是那个一听见没有2尺的龙虾就来盘土豆丝的那位吧,我去踅摸辆别的,美利达太高端了,消受不起。
"这车后轮跳啊,手提着都能感觉出来。""这个价位的车完全不跳是不可能的,在允许的范围内就行………………(省略若干字)………………要不您看看那边那个7000多块钱一个的*圈*吧,那个不跳。"(注意是7000多一个圈,不是整车。7000多也不8000多来着,记不太清了,应该是7000多)
"你看还有点儿龙……""(打断)这种价位的车圈都是手动调的,您看那个x千多的车,圈是机器调的,好多了。"
不多废话了。回想起来都有点儿郁闷,让人奚落好多句。这样一销售人员,老板得赶紧麻的利儿地奖励啊!对自己销售的产品有强烈的自尊心,体现了强烈的主人翁意识,潜在顾客连句坏话都不能说,而且主动推荐高价产品,说话的口气也很维护自己品牌的高端形象。
要说天津的服务行业一直挺让外地人不舒服的,其实本地人也舒服不到哪儿去。丫们有个比较让我哭笑不得的毛病就是一旦某个人出手阔绰在某丫那儿买了件儿东西,以后出手低点儿的就完全不是人了,谈不拢就要奚落一下。现在有钱人越来越多了,有这毛病的销售人员也跟着多了,再加上大伙工资都上调了不是,也没必要看得起买东西的,对吧。想当初配上一台电脑时也是,花了9750,让人拿13xxx的机器奚落,说啥好乜,真没见过钱还是咋的了,4000不到就这么激动。越激动越不跟BK这儿买。
美利达真是个很不错的牌子,关注的也很久了,跟其他牌子的车也都比较过,基本是完胜的那种,高级别的车真让我有些砸锅卖铁也要买的感觉。一直就想买辆入门级的车,因为对公路车确实啥也不懂,让我一上来就一万多买辆车我还真怕让人给赚了,没有一下子掏出来一万零九百以上跟您买车是我的不对。不过貌似今天店里公路车就剩两辆了,一辆1800也不1900多的车,没关注过那个型号所以一听就忘了,另一辆流浪者算是稍微好一些的。前几天看人家网站的宣传材料里09年新款车型里这款流浪者已经被我排除了,不过今天也没其他的公路车了,乌泱乌泱的都是山地,这车还很牛似的被高高挂着,我就想麻烦人家拿下来看看,没啥大问题的话就买走算了,嘛级别不级别的,总比天天早上等公交车好吧。结果车拿下来了,老爹说检查一下车子吧,又龙又跳。本来我是能理解的,这么多年在祖国活过来的,谁还不知道任何东西都没有完美的这个道理么,可怎么也想不到竟然还给人奚落一通……就当是因为没有一进门就砸下来几万块钱买车吧——我估计几万都没戏,人家是高端品牌,几万人民币不算是钱。
不买了,成了吧。您就当我是那个一听见没有2尺的龙虾就来盘土豆丝的那位吧,我去踅摸辆别的,美利达太高端了,消受不起。
星期一, 三月 23, 2009
天津一九八三
又忙起来了,刚开了个头儿想(泛泛)研究一下OpenJDK6的,估计短时间内又没有空闲时间继续了。今儿个赶紧发篇东西来凑数,这几天这本儿相册貌似也已经被很多人转来传去的很多次了吧——Tianjin 1983 (天津市 1983年)。嗯,这儿就只发咱家乡的了。
那个时候我出生还没几个月,看着那些景致真有些唏嘘,虽说我也没怎么经历过吧…记得第一次坐车时,那些车就已经不是这个样子了,只有最后一张图里的93路使用的车型在小时候见过。一直以来我对电车都有种莫名的好感,在北京实习时也是能坐电车的话决不坐汽油/柴油车,虽然电车的加速和刹车感觉起来都很突然(某次哥们儿没抓紧扶手,电车一加速被从前半截车厢甩到后半截车厢)。
那个时候我出生还没几个月,看着那些景致真有些唏嘘,虽说我也没怎么经历过吧…记得第一次坐车时,那些车就已经不是这个样子了,只有最后一张图里的93路使用的车型在小时候见过。一直以来我对电车都有种莫名的好感,在北京实习时也是能坐电车的话决不坐汽油/柴油车,虽然电车的加速和刹车感觉起来都很突然(某次哥们儿没抓紧扶手,电车一加速被从前半截车厢甩到后半截车厢)。
星期三, 三月 18, 2009
[浅读openjdk6] 1. 构建openjdk6
接上篇,当openjdk6的代码库已经用mercurial clone/fclone完毕之后,就可以构建openjdk6了。当然构建与阅读源代码没有太大关系,只是如果日后还要做hack的话,总要通过构建和测试来检查、调试自己的hack不是,所以了解openjdk6的构建方法还是有点必要的。
基本上,代码库根目录下的README-builds.html中的讲解已经很到位了,我这里再简要地啰嗦一下整个步骤,权当个中文翻译好了。
make成功后,build/目录下包括所有编译、链接出来的可执行文件以及jar包,还有javadoc。里面的j2re-image和j2sdk-image分别是…jre以及jdk,嗯,废话,是吧。进到bin目录下./java -version一下:
Yay!
基本上,代码库根目录下的README-builds.html中的讲解已经很到位了,我这里再简要地啰嗦一下整个步骤,权当个中文翻译好了。
- 必需的应用程序:gcc 4,g++ 4,GNU make (>3.80),m4 (>1.4.4)。以及README-builds.html中指定的很多个开发包(dev)。我的操作系统是Ubuntu 8.10,内核版本为2.6.27-14,按照README-builds.html的包依赖关系,一下子:
sudo apt-build install binutils cpp libfreetype6-dev g++ cpp-4.1 g++-4.1 gcc-4.1 gcc-4.1-base libstdc++6-4.1-dev gawk gcc libasound2-dev libc6 libc6-dev libc6-i686 libcupsys2-dev libgcrypt11-dev libgnutls-dev libgnutls26 libgpg-error-dev libice-dev liblockfile1 libopencdk10 libpopt-dev libsm-dev libtasn1-3-dev libx11-dev libxau-dev libxaw7-dev libxdmcp-dev libxext-dev libxi-dev libxmu-dev libxmu-headers libxmuu-dev libxp-dev libxpm-dev libxrandr-dev libxt-dev libxtrap-dev libxtst-dev libxv-dev m4 make ssl-cert x-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev x11proto-record-dev x11proto-trap-dev x11proto-video-dev x11proto-xext-dev zlib1g-dev
就好了。我的机器里其实已经装了libstdc++6-4.3-dev以及g++-4.3,不过保险起见还是把g++ 4.1以及libstdc++6 4.1的东西搞进来了,尊重一下README-builds.html,也顺便给自己少找些麻烦——后来测试的时候还真发现用libstdc++6 4.3或者g++ 4.3的话会编译失败,大概看了看错误信息,结论是以我现在的c++水平如果要把它port到4.3的话还是暴有难度的…嗯,那就4.1吧,听话的孩子有糖吃。
- 参照README-builds.html,有2个环境变量是必需的,当然这俩环境变量的值指向的目录也不是乱来的:
- Bootstrap JDK:README-builds.html自己都说了,编译openjdk6的时候还需要一个已有的jdk6是很那啥的。没办法,估计语言发展起来之后需要自己来编译自己的某一部分也不是很罕见的事情吧。我的系统里已经装了SUN的jdk6,所以,ALT_BOOTDIR=/usr/lib/jvm/java-6-sun。
- JDK binary plugins:这东西还是个新鲜玩意儿,以前是没听说过。照着README-builds.html里的指示,按图索骥到最新发布的jdk 6 binary plugins:http://download.java.net/openjdk/jdk6/promoted/b14/jdk-6-ea-plug-b14-linux-i586-25_nov_2008.jar。这是个可执行jar文件,java -jar一下,accept一下条款之类的东西,指定个目录就可以安装了。安装完成后,在安装目录里会看到一个openjdk-binary-plugs的子目录,结构和普通jdk一致,内容只有两个文件:LICENSE和jre/lib/rt-closed.jar。rt-closed.jar的内容没什么惊喜,一堆SUN自己的SNMP功能的支持类,光看这文件名就知道肯定是不方便开源的东西。不管它的内容:ALT_BINARY_PLUGS_PATH=~/projects/openjdk/jdk6-bin-plugins/openjdk-binary-plugs/ 。
- 其他的几个环境变量我是没有再手动设置,估计debian系的系统里,那些dev包安装妥当之后也不用再自己设了。
make成功后,build/目录下包括所有编译、链接出来的可执行文件以及jar包,还有javadoc。里面的j2re-image和j2sdk-image分别是…jre以及jdk,嗯,废话,是吧。进到bin目录下./java -version一下:
iusr@wisdom:~/projects/openjdk/jdk6/build/linux-i586/bin$ ./java -version
openjdk version "1.6.0-internal"
OpenJDK Runtime Environment (build 1.6.0-internal-iusr_18_mar_2009_16_32-b00)
OpenJDK Client VM (build 11.0-b17, mixed mode)
Yay!
Update: 到一台默认语言设成中文的ubuntu 8.10上重make一次,结果出错了…有3个注意事项要更新一下:
- g++、libstdc++6 dev包的版本问题。如果几个版本共存的话,确保g++-4.1在PATH的最前面能被最先找到。这个比较好解决,而且一旦g++版本正确的话也会确保include路径是对应的libstdc++6的头文件库。小问题。
- make之前要unset JAVA_HOME。这个环境变量如果存在的话make sanity会报错,错误信息也很明显,所以,同样是小问题。
- LANG=C。无论export出去还是运行make,一定确保LANG兼容英语,否则会出现很奇异的错误…
- apt-build install libmotif-dev 。这个忘记了很不应该,因为我用awesome,所以还特别地在.profile里export AWT_TOOLKIT=MToolkit了的。
星期一, 三月 16, 2009
[浅读openjdk6] 0. 获取openjdk6源代码
最近几天在抽空看openjdk6的源代码。总觉得如果打算干很久java的话,光靠看tutor、doc、reference始终有种底气不足的感觉;src.zip里的东西可以随用随看,但各种本地方法调用以及src.zip不方便包含的类的源代码都是平日在eclipse里开发时很少会花时间看的,但这一部分往往最能决定一个java应用程序的性能。其实预谋了很久了,大概多半年到一年前就有这打算了,可始终没什么空闲,杂事也很多。
OpenJDK老窝在http://openjdk.java.net/。记得早先mustang、dolphin还都在dev.java.net这个域下,而OpenJDK直接挂在java.net下,身份自然特殊。不管别人怎么看,我是想目前先看jdk6的代码,因为日常开发正在用,jdk6也是SUN目前的主打版本,VM特性和API也更稳定,相比之下,jdk7还在密集开发之中,平日看看各种相关人员的blog,新特性、新API也是隔一阵儿就来一个,现在追起来肯定会很累,虽说jdk7也肯定是以后的主流。
获取openjdk6的代码其实也不复杂,尤其是download source bundle的方式,当然也更没劲一些——我(们)的目标是:往死里折腾。
折腾当然有折腾的好处。当你clone了整个一个mercurial forest以后,查看变更记录是了解各种特性、API以及bug fix的最直接的途径,比看什么release notes都管用,而且适合fork出自己hack过的版本——听着很吓人,其实一个hack不见得必须是一个很BT的很完善的东西,那样的话基本成了添加一个feature了,还不如去盯OpenJDK社区啥时候再出Innovators' Challenge的时候去赚些钱;很多时候hack都是临时解决一些小问题,看上去甚至会觉得有些dirty。
openjdk的源代码采用mercurial做版本管理。Mercurial也是个分布式的版本控制系统,优点是跨平台,缺点是忒慢了点儿,用惯了git尤其没法容忍管理些源代码都慢吞吞的;基本上我也只是用它来拿openjdk的代码,目前还罕见有多少我感兴趣的项目使用mercurial的,所以也没动机去深入学习一下。openjdk6的代码位于http://hg.openjdk.java.net/jdk6/jdk6/,是一个mercurial forest——一大堆源代码tree在一起就形成了源代码forest。配置mercurial以及安装那个forest插件的过程参考一下http://openjdk.java.net/guide/repositories.html应该可以搞定,不是什么大件事。有了mercurial+forest插件以后,找个干净目录来fclone一下:
fclone是forest插件提供的命令,如果forest插件没有配置妥当的话mercurial会提示无法处理fclone这个命令的。等mercurial慢吞吞地把代码下载回来后,折腾的第一步就完成了。当然如果只关注openjdk6的某一模块,比如hotspot,可以单独clone这一个tree。基本上hotspot模块是每个人都感兴趣的,jdk模块次之,其他的corba、jaxp、jaxws之流也不算什么rocket science。考虑到模块大小的话:
OpenJDK社区的代码仓库索引页位于http://hg.openjdk.java.net/,对其他项目感兴趣的话可以自行clone/fclone。
开始折腾前还要铭记一点:大部分openjdk6的源代码是以GPL v2许可的,部分基于其他开源项目的代码还维持其许可证不变,此外还有部分二进制模块使用的是OpenJDK二进制文件许可证。如果真折腾出来好东西了,别忘了回馈社区,没有人家夯下的基础,这一切都不可能完成。
OpenJDK老窝在http://openjdk.java.net/。记得早先mustang、dolphin还都在dev.java.net这个域下,而OpenJDK直接挂在java.net下,身份自然特殊。不管别人怎么看,我是想目前先看jdk6的代码,因为日常开发正在用,jdk6也是SUN目前的主打版本,VM特性和API也更稳定,相比之下,jdk7还在密集开发之中,平日看看各种相关人员的blog,新特性、新API也是隔一阵儿就来一个,现在追起来肯定会很累,虽说jdk7也肯定是以后的主流。
获取openjdk6的代码其实也不复杂,尤其是download source bundle的方式,当然也更没劲一些——我(们)的目标是:往死里折腾。
折腾当然有折腾的好处。当你clone了整个一个mercurial forest以后,查看变更记录是了解各种特性、API以及bug fix的最直接的途径,比看什么release notes都管用,而且适合fork出自己hack过的版本——听着很吓人,其实一个hack不见得必须是一个很BT的很完善的东西,那样的话基本成了添加一个feature了,还不如去盯OpenJDK社区啥时候再出Innovators' Challenge的时候去赚些钱;很多时候hack都是临时解决一些小问题,看上去甚至会觉得有些dirty。
openjdk的源代码采用mercurial做版本管理。Mercurial也是个分布式的版本控制系统,优点是跨平台,缺点是忒慢了点儿,用惯了git尤其没法容忍管理些源代码都慢吞吞的;基本上我也只是用它来拿openjdk的代码,目前还罕见有多少我感兴趣的项目使用mercurial的,所以也没动机去深入学习一下。openjdk6的代码位于http://hg.openjdk.java.net/jdk6/jdk6/,是一个mercurial forest——一大堆源代码tree在一起就形成了源代码forest。配置mercurial以及安装那个forest插件的过程参考一下http://openjdk.java.net/guide/repositories.html应该可以搞定,不是什么大件事。有了mercurial+forest插件以后,找个干净目录来fclone一下:
iusr@wisdom:~/projects/openjdk$ hg fclone http://hg.openjdk.java.net/jdk6/jdk6/
[.]
requesting all changes
adding changesets
adding manifests
adding file changes
added 27 changesets with 63 changes to 29 files
updating working directory
29 files updated, 0 files merged, 0 files removed, 0 files unresolved
[corba]
requesting all changes
adding changesets
adding manifests
adding file changes
added 26 changesets with 1439 changes to 1376 files
updating working directory
1371 files updated, 0 files merged, 0 files removed, 0 files unresolved
[hotspot]
requesting all changes
adding changesets
adding manifests
adding file changes
added 28 changesets with 7862 changes to 3278 files
updating working directory
2964 files updated, 0 files merged, 0 files removed, 0 files unresolved
[jaxp]
requesting all changes
adding changesets
adding manifests
adding file changes
added 26 changesets with 2021 changes to 1975 files
updating working directory
1973 files updated, 0 files merged, 0 files removed, 0 files unresolved
[jaxws]
requesting all changes
adding changesets
adding manifests
adding file changes
added 29 changesets with 4864 changes to 2867 files
updating working directory
2583 files updated, 0 files merged, 0 files removed, 0 files unresolved
[jdk]
requesting all changes
adding changesets
adding manifests
adding file changes
added 97 changesets with 41623 changes to 17063 files
updating working directory
16829 files updated, 0 files merged, 0 files removed, 0 files unresolved
[langtools]
requesting all changes
adding changesets
adding manifests
adding file changes
added 40 changesets with 6616 changes to 3018 files
updating working directory
3012 files updated, 0 files merged, 0 files removed, 0 files unresolved
fclone是forest插件提供的命令,如果forest插件没有配置妥当的话mercurial会提示无法处理fclone这个命令的。等mercurial慢吞吞地把代码下载回来后,折腾的第一步就完成了。当然如果只关注openjdk6的某一模块,比如hotspot,可以单独clone这一个tree。基本上hotspot模块是每个人都感兴趣的,jdk模块次之,其他的corba、jaxp、jaxws之流也不算什么rocket science。考虑到模块大小的话:
iusr@wisdom:~/projects/openjdk$ du -s -B M jdk6/ jdk6/*大概要准备>600M的空间吧,这年头应该谁都不在乎这点儿地方了吧。
542M jdk6/
1M jdk6/ASSEMBLY_EXCEPTION
20M jdk6/corba
63M jdk6/hotspot
37M jdk6/jaxp
35M jdk6/jaxws
349M jdk6/jdk
39M jdk6/langtools
1M jdk6/LICENSE
1M jdk6/make
1M jdk6/Makefile
1M jdk6/README 1M jdk6/README-builds.html 1M jdk6/THIRD_PARTY_README 1M jdk6/TRADEMARK
OpenJDK社区的代码仓库索引页位于http://hg.openjdk.java.net/,对其他项目感兴趣的话可以自行clone/fclone。
开始折腾前还要铭记一点:大部分openjdk6的源代码是以GPL v2许可的,部分基于其他开源项目的代码还维持其许可证不变,此外还有部分二进制模块使用的是OpenJDK二进制文件许可证。如果真折腾出来好东西了,别忘了回馈社区,没有人家夯下的基础,这一切都不可能完成。
订阅:
博文 (Atom)