2008年9月29日星期一

perl tk笔记:button

button types:

button/checkbutton/radiobutton
checkbutton放在一起可多选,radionbutton放在一起单选

每个checkbutton提供是否选中的1或0,而多个radionbutton仅提供一个变量,选中后体现为变量的值。

OPTIONS
-command
$b = $mw->Button(-text => 'Blue', -command => [\&change_color, 'blue'])->pack;
[]代表后面还有个参数?我猜的

-variable
$mw->Checkbutton(-text => 'Print Header', -variable => \$print_header);
注意传递的是一个引用

-value
$mw->Radiobutton(-text => '$' . $_, -variable => \$group1, -value => $_)->pack(-side => 'left');
对于radionbutton,还得传递一个value值给variable

-textvariable
$mw->Button(-textvariable => \$count)->pack(-side => 'left');
$count的变化会立刻显现出来

-bitmap
$mw->Button(-bitmap => 'error', -command => \&handle_error)->pack;
很多内置bitmap

-image
$image = $mw->Photo(-file => "bigredbutton.gif");
$mw->Button(-text => 'Exit', -command => sub { exit },
-image => $image)->pack;
使用image必须先创建image widget,如果text和image同时被指定,只会出现image。

-state => "normal" "disabled" "active"
disable一个button

-relief => 'flat''groove''raised''ridge''sunken''solid'
普通凹槽突出突出的边框凹陷实线边框

-width => x, -height => y
改变button大小

-underline => N
在text的第n个字母下划线

$b->configure/$b->cget
$state = $button->cget(-state);
$text = $button->cget(-text);
configure用来配置button显现
cget用来获得选项值

$button->invoke( );
运行button的command指定函数

perlnotes:符号链接

no strict 'refs'

my $str = "foo";
my $foo = "bar";
print $str; ###!!!! 出错,提示没初始化

注意使用符号链接时perl会查看程序的符号表,而词法变量并没有创建任何符号表项

所以
轻使用 our $foo ="bar";

perl tk笔记: fonts

首先:不能改变mainwindow中title字体,其他都可以
使用字体最简单方法:
perl myTkApp.pl -font "Times 12"
在linux中可使用xlsfonts来查看安装的字体,使用X Logical Font Descriptions (XFLD)来描述一个font如:
*-helvetica-bold-r-*-*-*-240-*-*-*-*-*-*
每个字段的意思为

-foundry-family-weight-slant-sWdth-adstyl-pixelsize-pointsize-resx-resy-spacing-avgWidth-registry-encoding.

font基本属性
family:font的名字
size: 以point为单位的大小,point=1/72inch
weight:粗体
slant:斜体
underline:下划线
Overstrike:中划线

Font的使用:

$code_font = $mw->fontCreate('code', -family => 'courier',
-size => 12);
$mw->Button(-text => "Show Code", -font => 'code');
以上创建名为code的font,在button中使用。 -font选项可以是font名字也可是$code_font变量,还可以是一个匿名数组的引用如:
-font => ['courier', '14', 'bold']
。当不想使用名字在fontCreate里面忽略。
$mw->fontConfigure($code_font, -family => 'Verdana');
改变font属性使用fontConfigure

Font操作:
一旦创建了一个font,就能够使用fontActual查看它的属性
%big = $mw->fontActual('bigfont');
$size = $mw->fontActual('bigfont', -size);

使用fontDelete来删除font定义,此时已经使用此font的widget不受影响。

列出系统字体
@families = $mw->fontFamilies;
列出程序定义过的字体
@definedfonts = $mw->fontNames;


2008年9月28日星期日

perl tk笔记: 布局管理

1:pack
pack选项
-side => 'left' | 'right' | 'top' | 'bottom
Puts the widget against the specified side of the window or Frame
widget的的方位
-fill => 'none' | 'x' | 'y'| 'both'
Causes the widget to fill the allocation rectangle in the specified direction
拉伸的方向,x轴,y轴
-expand => 1 | 0
配置rectangle是否拉伸,注意不是widget
-anchor => 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'center'
Anchors the widget inside the allocation rectangle
锚定widget的方位,上北下南左西右东
-after => $otherwidget
Puts $widget after $otherwidget in packing order
-before => $otherwidget
Puts $widget before $otherwidget in packing order
-in => $otherwindow
widget一般pack到创建它的区域中,此选项可改变widget的出现位置
Packs $widget inside of $otherwindow rather than the parent of $widget, which is the default
-ipadx => amount
直接控制widget的大小
Increases the size of the widget horizontally by amount
-ipady => amount
Increases the size of the widget vertically by amount
-padx => amount
Places padding on the left and right of the widget
边框
-pady => amount
Places padding on the top and bottom of the widget
allocation rectangle
这个是Tk中的一个概念,当一个widget,此控件占据的空间按pack的规则进行延伸填充到window边缘或者碰到其他的widget rectangles为止,这就是Allocation Rectangles
pack(-side =>left) 对应的allocation rectangles就是靠左边竖着的矩形
pack(-side =>top)顶部的矩形
这样便可以理解expand 和fill选项了

unpack一个控件
只是unpack,不是destory
$widget->packForget( );
如果重新pack的话会出现在所以pack的最后

获得控件的pack属性
@list = $widget->packInfo( );
%packinfo = $widget->packInfo;
获得控件列表
@list = $parentwidget->packSlaves( )

2:grid

grid意为格子,它的用法和html中的table非常类似

grid选项

The rest of the options are similar to those used with pack:

"-"
A special character used in the grid widget list. Increases columnspan of the prior widget in the widget list.
增加widget所占列数目
"x"
A special character used in the grid widget list. Leaves a blank space in the
grid.
标记此区域为空白
"^"
A special character used in the grid widget list. Increases rowspan of the widget in the grid directly above it.
增加widget占行数
-column => n
Sets the column to place the widget in (n >= 0).
-row => m
Sets the row to place the widget in (m >= 0).
-columnspan => n
Sets the number of columns for the widget to span beginning with -column.
-rowspan => m
Sets the number of rows for the widget to span beginning with -row.
-sticky => string
Sticks the widget to string sides. String contains characters n, s, e, or w.
向string代表的方位拉伸
-in => $otherwindow
Indicates the widget is gridded inside $otherwindow instead the parent of $widget.
-ipadx => amount
$widget b ecomes larger in x direction by amount.
-ipady => amount
$widget becomes larger in y direction by amount.
-padx => amount
Places buffer space equal to amount to the left and right of the widget.
-pady => amount
Places buffer space equal to amount on the top and bottom of the widget.
配置行和列

使用gridColumnconfigure和gridRowconfigure来配置行列参数,它们都接收行或列的序号作为第一个参数,可用选项有:-weight,-minsize,-pad,不能用grid来设置它们
%column_configs = $mw->gridColumnconfigure(0);
返回当前参数如: -minsize 0 -pad 0 -weight 0
weight:看半天没懂啥意思
只知道有一个效果:当设置为0时widget不会随窗口的resize而变化大小,设置为1就可以了。
minisize: 设置最小尺寸
pad:改变widget周围大小

获得一个cell的大小
($xoffset, $yoffset, $width, $height) = $master->gridBbox(0, 2);
删除一个widget
如pack $widget->gridForget

总行列数:
($columns, $rows) = $master->gridSize( );

所有grid子widget
@slaves = $mw->gridSlaves( );
这个方法也接收行列号作为参数返回那里的widget

perl tk笔记:hello world

hello world!

#!/usr/bin/perl
use strict;
use warnings;
use Tk;

my $top = MainWindow->new();
$top->title("Hello World");
my $button = $top->Button(
-text=> 'Done',
-command => sub{exit 0}
)->pack();

MainLoop;

Tk都有一个MainWindow,最后使用MainLoop来运行窗口

要新建一个widget,都是使用$top->Widget这样的方式,注意第一个字母大写,
如果不是大写表明是属性

关于pack和Tk的管理
任何一个widget都可以使用pack()添加都mainwindow里面,除此之外Tk还提供有 grid, place,form来进行几何管理
一旦使用了pack来提交widget,就不能再直接使用grid等其他方式,此时应该放在frame里面或其他

关于exit
一般使用exit作为退出时的回调函数
但Tk也自己定义了一个函数叫destory,可以使用$top->destory来调用,结果删除MainWindow并返回命令行,因此可以做一些善后工作。

2008年9月23日星期二

青藏线之旅:D14,终至拉萨

后面的路都比较简单了,说是有个申格里贡山,一个念青唐古拉山。申格里贡还好,6km的大爬坡,但念青唐古拉就是个40公里的小上坡而已,没什么难度。

但其实也不简单,这段路下午基本上就是顶风,风向在中午的时候改变,而且路况是被称为搓衣板的起伏路,几公里上坡几公里下坡的,这样连续来几个上坡,突然崩溃的可能性还是蛮大。

首日从安多到那曲139km,没啥故事,翻过申格里贡,和芜湖的老昂成了搭档。老昂是搞铁人三项的,据说全国都狠有名,经常拿冠军。我和他的速度比较匹配,一起走相当惬意。

第二天从那曲到当雄,路牌是165km,到后来码表上显示是173km。骑得蛮崩溃的,风力太大了,又要爬坡。这时老昂显示了他铁人的风采,把我远远的摔在了后面,不过风力一过我死命赶,还是撵上了他。早上买八宝粥当中餐,打开一看是坏的,郁闷。

第三天我们准备一大早到那木错看日出的,5点钟就包了个车出发。倒霉的事情发生了,司机是个新手,水箱里面居然没有加好水,爬山的时候开锅了,走一截停一会,一直到里那木错湖还有十几公里远的时候彻底歇菜,车子启动不起来,此时路上来往的车子很少,有的几辆都是满载,一行人在那里是进退两难,后来司机搭车回去叫车了,我们还呆那,再后来路过一辆空车,我和老昂,老盲花30快钱往回走,其他人还想看那木错,就没有一起。我的风格是行程不能改变,所以没去那木错也无所谓。下午还继续赶路,到羊八井。

说到羊八井可能印象都是温泉,我也来提个地方,羊八井有国家宇宙线观测实验室,就在小镇后面,里面有中日意合作的两个大型地面簇射阵列,用来接收和探测外太空过来的高能宇宙粒子,想当年我毕业设计做的就是羊八井试验数据的分析处理以及后续理论工作,不过现在都忘光了哈哈。那地方看守也不严密,倒是出乎我的意料,赤裸裸的看上去谁都可以进去。

温泉现在建起了度假村,98元/人包住宿,当天我们被当地人忽悠,说不能住宿就没过去,第二天才告知可以住,但只有这一种消费方式,有几个后来过来的便决定再那再住一天。

这天在路上还遇到个日本人,从泰国骑车,经过老挝到中国,已经骑行有八个月。那家伙被晒得有点不成人形的意思,脸部没有被帽子遮到的地方全黑,还隐隐透出青色,鼻子下面还有小肉瘤,看上去小有点恶心。他也不惮忌高原的紫外线,直接短衣短裤骑行,所以小腿小臂都成焦炭了。这家伙骑得慢,车据说人民币一万,前轮上面还挂两个包,装备与我等大不相同。

最后一天就是到从羊八井到拉萨了,仍然风力很大,大下坡骑着也不爽,好歹只有75km,加上进城的十几,却也很快就到目的地。入住在布达拉宫后面的行者驴舍旅馆,老板很好,老板娘做菜手艺别提有多棒,而且吃饭便宜,强烈推荐这个地方。

青藏线之旅:D13,翻越唐古拉山

今天到安多是135km,中间没有补给,还要翻越大小唐古拉山,但昨天就听说小唐古拉山好翻,从大唐古拉10公里下坡冲过来几乎不用踩就上小唐古拉顶了,我想这还不就是一个小山包阿,简单。然而后来的事实让人大跌眼镜,差点在小唐古拉上崩溃。

还好,借在沱沱河保护站的工作人员金口,天气真的一直不错,小阳光,暖暖的适合骑行。但路况并不好,坑坑洼洼的。一行十一人出发,我居然是冲在最前面的那个,这的确让我有点所料未及。在南京活动的时候,我经常被所谓强人hapi,hema之类远远拉在后面,所以一直认为自己是个小弱,当然木木就更加小弱了,现在看来,不是我太弱小,而是人南京这边人太强悍阿。

后来十二点前我第一个到了山顶,又有一段泥沙路,三辆大卡车从身旁疾驰而过,卷起千堆灰阿,我便消失在这片云里。到所谓唐古拉山路牌5231下正十二点。

山顶上的人出乎意料的多,有一家藏民十五口,男主人在晒着大片从雪山上摘下的雪莲花,更多的还是游客,开车上来的人一群群的,手里拿着照相机在不停的咔嚓。后面的车友也一个个赶到了,到一点后才完全上来,之后停下来的还有一波空军部队。我们在山顶的牧民家里想尝尝酸奶,一小杯五块钱,牦牛奶也是这个价格,酥油茶一块,蛮贵的。酸奶不一定每个人都吃得惯,反正我吃不下,太酸了,不过据说营养丰富,牦牛奶远没有在二道沟藏民家吃得香,和这家人磨了磨,每人免费喝了碗酥油茶,感觉像洗脚水,晕。

小孩子们还是围着要东西,五秒钟就对人说一句你好,那意思就是拿点东西来吧。我心存不爽,啥都没给,这群人怕是被惯坏了。不过木木喜欢给,把身上的沙琪玛全部奉献出去,搞得自己午饭没着落,只好来抢我们的。

磨磨蹭蹭到两点才下山,这时终于有了点高原反应,头特别痛,脑子就像一块大石头,在颅腔里撞来撞去,特别一颠簸就更加难受。

更加没有料到的是小唐古拉山远不如前面说的容易,下唐古拉就颇为不爽,大卡车一辆辆的在路上,速度快不起来,还有点侧风,没有一点冲下坡的快感。小唐古拉山叫做头二九山,海拔也有5190m,爬得我们好辛苦阿,连绵不绝的大坡。不过俺又是第一个上山顶的,有了前面头痛的教训,没呆太久,等三个人过来就下去了。

下山路逆风,骑着挺不舒服。路上碰到一个大姐,传奇阿,强悍阿,38岁,骑一辆普通自行车,去年9.20出发,到现在差不多一年了吧,近似徒步的走新藏到拉萨,又从青藏出去,目的地在内蒙的呼伦贝尔。为啥说她近似徒步,车头上一个大包,装的是瓜果蔬菜,一个猪头大,车后是房子一样的一个包,衣物帐篷之类,据她说这样的装备情况平路不可能骑得动,就下坡还能溜达下,瓜果蔬菜直接生吃,一天走20-30km,最多50,那是有大下坡的情况。真nb人阿。

大约19点到了安多,找了加旅店住下。这时离拉萨靠近,开始有点紧张气氛了,整个晚上,警车巡视无休。

2008年9月20日星期六

青藏线游记:D12,到达唐古拉兵站

一早起来,遇到真正保护站管事的,说交个卫生费就可以了,可惜昨晚遇到的不是他。

抬头看看天,居然有阳光。旁边的工作人员说这要运气好,一直到拉萨都天晴,要不好的话下午就下雨,这地方天气多变,最多一天有48场雨。

加上武汉理工大学的,一伙人就这么出发了。总算小伙子们有速度和我匹配的,不再一个人冲在前面了。天公也算作美,虽然有时候到一朵乌云下会有小雪,但都不长久。60多公里的骑行,很快便到了沱沱河,所谓长江源。

一路景色都是那样,草原啊山啊雪啊,而且沱沱河除了有个长江源的称号外也没什么好看的,水相当浑浊,城镇也建立在这条河的周围,总之一点感觉都没有,我随便看看就跑过去了。南京的乐乐说一定要在沱沱河里面撒泡尿,木木完美的完成了这个任务。

今天赶路是到不了唐古拉兵站了,还有一百四十多公里。我和木木决定搭车赶过去,这时武汉的一个车友说他们的两个人现在在雁石坪了,他准备赶过去会和,决定一起搭车,于是我们又多了一个,叫他lei吧。

等了好久终于出现了一辆长途客车,从格尔木到拉萨的,三个人到兵站140公里开口就是400块,我怕他是想钱想疯掉了,最后砍价以120成交,车扔到后备箱里,车里面的被褥那是相当的脏。一路顺利到兵站。

到兵站居然发现有一大拨人在这里汇聚,在格尔木见到的芜湖五位,两位内蒙古工业大学的,一位北京的,加上我们仨,十一位,算是一个大团体了吧。后来从反方向上来个川藏进青藏出的车友,腰里别着一瓶白酒,太他妈的潇洒了,据他自己说是每天都喝酒,越喝劲越足,在高原上,岂一个猛子了得。

唐古拉这里有个野生温泉,在草原的一个孤零零的破房子里面。天黑下雪,我们后来的四个一起过去感受40度水温的享受。那个房子顶都是通的,雪从洞里还能飘下来,里面是一个2*2的小池子,天太黑,我们也不知道热水是从哪里冒出来的。反正都是大男人,一个个脱得精光跳了下去,我靠,不要太爽啊,刚下去的时候有点烫,但一会就适应了,美美的躺在水里,全身几乎都酥软了。

但这个温泉不能泡太久,不然会头痛,容易出现高反,反正我泡了会就受不了,头晕,身体发软,上岸后几乎都站不太稳。反爬青藏的朋友直呼乖乖了不得,这玩意还真是有反应。不过这个小温泉却给了我以前从来没有过的体验。

住的不是兵站,那地方要60块每人的住宿费,不划算,在山下的小旅馆住,十块,虽然条件差了点,就是一张床一个被子,但这种地方,还能有何所求呢?

青藏线游记:D11,崩溃的风火山口

       早上起来,发现外面飘着鹅毛大雪,当即心里咯噔一下,今天要郁闷了。

       起来的时间是七点多,到八点出发找早餐,发现镇子上所有饭店都没开门,没办法,只好到唯一开着的商店里求老板给泡了碗方便面。吃着60度的水温泡的方便面,一阵阵反胃,但没办法,为了有点能量补充,我愣是硬着头皮把这罐面吃完了。木木可不行,叫老板给煮了下,还是没有吃完。老板给检查了下天气,说这个雪马上就会停的,后来的事实证明他是个蹩脚的预测家,大雪一直下到下午两点多。

      果不其然,出门刚几公里就碰到了泥浆路,我们以最慢的速度骑行,但泥浆还是四处飞溅到了身上和鞋上,车也开始了泥浆浴。在第一道泥浆路前遇上了第一个车友停在路边,来自山东,却是从浙江骑行过来的,长长的头发,黑炭似的皮肤,骑了有一个多月。他说自己现在有点高反,呼吸急促,在休息,我们便聊了会,后说一起走吧,但他马上又停下来了,我们在前面不知怎么回事。过了泥浆路后发现有点前胎迅速的在漏气,下来检查一看,一个硕大的玻璃碴扎在了外胎上面。木木赶上来一起帮忙换上备胎,怕外胎出事还在外胎内部贴了个补胎片,这过程山东大汉也赶上来呼啸而过了。

       接下来的泥浆路就有点郁闷了,一堆大卡车堵在路中央,骑车子没法过去,我们小心翼翼的推车,但一不留神还是一脚就踩在了泥浆里面,顿时到脚腕处全湿透了,当时还没有感觉到冷,但到了后来爬风火山,雪下得愈加密集,风也吹得紧,山上温度越来越低,渐渐的就感觉到湿透了的手脚开始冰凉发冷,到后来基本麻木,感觉全无。上坡路蹬得辛苦啊,我只记得四周是大雪纷飞,眼前是一座座被白雪覆盖的山包,心里盼着过了这个山头应该就是山顶了吧,一转过去又一个山头出现了,当即就想崩溃,但咬咬牙还是坚持着一直骑行,也不记得是在山路的哪个位置从一个帐篷里冲出两只黑狗,追着车狂吠几十米远,我都没有力气加速摆脱,只能一直保持原来的节奏骑行,并不时看着两只狗头在脚后跟飘来飘去,但居然后来一直都能坚持下去,路上也没有休息,这样来来回回在绝望和痛苦中挣扎,我最后终于爬上了风火山口,而该死的大雪还在一直下个不停。到了山顶,直接往地上一躺,的确是累趴下了。木木后到,崩溃中。

       后来和木木一起下山,吹得人更加麻木,到二道沟才86km,两人都感觉不行了,冲到一家藏民店里,劈头就问,有烤火的炉子么,坐在旁边一直烤火到死。

       这家藏民是我路上见过最好的了,一家四口,夫妻,奶奶和一个刚会说话的小孩。小孩吃的是牦牛奶,他们说这都是买不到的,木木发挥他与人交流的特长,成功的攀上朋友后老板娘给我们两每人来了一碗热气腾腾的牛奶,味道浓郁而清香,至今回味啊,后来在唐古拉山上面买的5块一碗,远没有这种感觉。小孩子也很逗,由于从小被奶奶带大,就只和奶奶亲,会说话也只是一直叫奶奶,哭闹也只要奶奶一过来就停止,可爱的小姑娘。木木又开始唠叨家常,这真是他的强项,这点比我厉害太多,我都一直不怎么开口,很快他和老板也成了好友,开始互相研究相机的使用,而我在路上拦车,准备搭车到沱沱河,我们是抱着不能耽误行程的想法。

      但终究没有拦到车,山东车友也过来了,烤火后去先去吃东西。老板帮我们联系在外面追踪藏羚羊的可可西里沱沱河保护站的员工,让我们今晚就住那个地方,据说能免费,呵呵。

     我们后来也去吃饭,山东车友此时已经找到一家小旅馆住下。之后回来的时候又意外的遇到了一拨来自武汉工业大学的车友,他们一行八人,七男一女,一男高反,一女体力不支,已经坐车先去沱沱河。我们在便在一起聊天到很晚。

     晚上沱沱河保护站的员工回来,却也出现个小伙子像我们要二十块的住宿费,说不可能免费,索南达杰还四五十呢,颇让人不爽,最后砍价到十块,我和木木住下了。

青藏线游记:D10,翻越昆仑山

早上起来居然发现玉珠峰显露了全貌,呵呵。

西大滩出发路真烂,到处都是坑坑洼洼的,加之我的前叉没有锁死,骑着特别费力。天气延续了昨天的状况,阴沉,刚出发便下雨,走了十几公里到昆仑山下,居然下起雨夹雪,没见过世面的我当时就想坐车了,发短信问南京的朋友,原来这里下雪再正常不过。

这样的天气状况让人崩溃,骑车自然是特别累人的,看到路旁大卡车也是慢慢的吃力的爬坡,我伸出咸猪手扒上了一辆,爽啊,顿时除了手之外全身轻松。路上下坡时看到前面是大坡,我也没有放手一直扒了过去,速度冲到40,想想蛮后怕的,要是出危险一切就玩完了,好在路段比较平整,没有出问题。

之后扒着车几乎到了昆仑山顶,直到路上有坑没放手小摔一跤才停下,没受伤,万幸,以后看到路不平我就放手,这叫经验教训。面前是青藏铁路的高架和昆仑山隧道,雄壮威武,感慨油然而生,国家修这个路是何其困难啊。我才拍了一些照片,就被出现兵哥哥叫住说不让随便拍,检查我的相机把有他们哨所的照片删掉了。木木也扒着车赶上来,一直赶到我的前面。

之后的路没有之前的陡,我很快赶上木木,慢慢的朝山顶进发,不过到前面一看,傻眼了,一条烂泥路跃然出现在眼前,大卡车都停在旁边,堵了好长一节,问问才知道109国道近年大修,要敲掉水泥重新筑造,以后这样的路段还会不断出现。没办法,我和木木只好下来推车,慢慢地朝山顶进发。

费尽力气到达山顶时,烂路终于结束了,到海拔4817的路牌下,我们两都显得很兴奋,在公路上大呼小叫,左蹦右跳,只想把全身的疲累都甩出去。可可西里的路牌就在眼前,昆仑国家地质公园的路牌就在眼前,更广阔的山坡和草原就在眼前,我想应该有理由激动,在这里我们拍了很多照片,呆好久才下山。

下山路大坡,我们都创造了最高时速,我62他65,可见他的车性能比我的好。显然,我只是2k的入门山地车,他的车3k多。到达索南达杰保护站时显示为86km,此时又下起来大雨,我们便想在这里住宿,就一个藏族小伙在里面,拽得很,态度极其不友好,要价30块每人,要命的是居然没有吃的提供。来之前我问过南京的车友说这里有吃的东西,两人都没有带补给在身上,这怎么能住呢。我两各自翻翻行囊,我一个咸鸭蛋俩个小笼包,他两根香肠,互相吃了点,我们被迫赶往五道梁。

出发后雨就停了,出太阳,而且不烈,感觉正适合骑行,我开始在前面飙车,记忆中应该是下坡居多,一会木木就拉到后面看不到影子,路上看到野毛驴和藏羚羊,藏羚羊胆子太小,看到人过来很快就跑走了,拍照时就只剩下一个小点,毛驴倒是很配合的在路旁摆pose。走了145km,19点到了五道梁,骑得很爽,木木还不见人影。

在饭馆里点菜,妈的西红柿炒鸡蛋20元,米饭两块一碗,这里什么都不种植,物资都是从格尔木或者西宁运输过来的,真他妈贵啊。而且被告知后面一直雨雪,烂泥路泥浆至少一尺深,当即头大了三分。
天气很冷,温度很低。

青藏线游记:D9,格尔木到西大滩-踏上高原的路

从海拔2800的格尔木,到海拔4100的西大滩,今天将要上升一千多米。 现在开始的是青藏线上面的真正挑战,高原天气瞬息万变,低温多雨,还有缺氧的考验,我希望能够撑过去。

出发时间八点半,又早了点。天气阴沉,看样子要下雨,好在我在格尔木买了一套雨衣,估计裤子不会再弄得像上次橡皮山一样湿透了,果然出发不久便下雨了,且路不是太好走,前十几公里都是坑坑洼洼的。风也很大,斜着吹过来,夹着雨点,渗入头盔,湿透了头发。不过骑得倒还顺利,速度一直都不慢,由于路面太湿,被轮子卷起的水甩得全身都是,灌到鞋子里面,开始小脚冰凉。这时雨裤的劣势也体现了出来,不透气,大量汗水憋在里面相当难受。

很多路上的行人和车辆碰到我都大声叫加油,有个车还安装了扩音器喊话:小鬼,坚持!估计是部队里面的人。 我也的确是在咬牙坚持着,并时刻盼望出现一个大下坡。

到纳赤台时骑了92公里,下午一点多,有许多官兵驻扎在这里演习,坦克一排排的在河边开进。我路过的时候冲路边官兵叫了声好帅,丫居然给我回了个没你帅,一行人都哈哈大笑。纳赤台有所谓的昆仑神泉,我看到了,没停,直接呼啸而过,到旁边的饭店吃面去。

七块钱,吃了碗烩面,使劲叫老板多放面,最后差点没吃完。然后开始等木木,到两点多也没看到他来,就先出发了,大雨,后面37公里骑了3小时,到下午5点的时候赶到西大滩。这个时段这个地方,天气真是不怎么样,四处云气蒸腾,随时下雨的样子。找了旅店,小平房,里面有热情的河南大姐,前面有三条大狗镇守,进去就烤火,烤湿透的鞋子。太冷了,估计温度只有4~5度吧,苦等木木的到来。 后来暖和的时候,拿早上剩下的小笼包逗外面的大狗,还真管用,立马就和我亲热得不得了,走过旁边都摇头摆尾,直往身上扑。

西大滩前面的山是玉珠峰,不过这个天气看不到顶,被云雾所遮掩,一道冰川隐约浮现,据说当年北大登山队在这里挂了个队员,缅怀。

19点,木木赶到西大滩,哥们也蛮惨,几乎把所有的衣服都穿到身上,被汗湿透之后没有换的了,我只好打发怜悯或者他兽性大发抢了我的一条保暖秋裤。点了好贵的菜,吃,住,睡。艰苦的生活,一张床一个被而已,后面的发电机还轰隆隆的工作到了晚上十二点。不太敢直接用他们的被子,还好我又睡袋,零度的适宜温度,冻不到我。

青藏线游记D6,7,8:格尔木,sayhello

木木生病了,上火感冒拉肚子。我们从都兰直接坐车到格尔木,路程为354km,班车有8点和十二点两趟,票价62。自行车可直接放在班车顶上,据司机说他这两天都有带像我们这样的骑行者。

一路上果然是沙漠戈壁,早就有人叫我们别骑这段路了,不由得暗自庆幸正确的决定。途中还看到三个骑行车友,正在烈日炎炎下不辞辛苦的前进中,致敬。

到格尔木住下,这是个繁华的地方,居然有都市的感觉,这让我感到一丝诧异,看惯了四周的荒漠,突然回到人间还真有点恍惚。在格尔木买了好多药,两人花了近两百块钱,后来证明完全没有必要。

木木的病一直没好,我们决定在格尔木呆两天再走。第二天早上出去吃饭的时候碰到了来自芜湖的一帮车友,年纪四五十,他们有两个是从芜湖直接骑车过来的,已经块一个月了,还有几个从西安过来,汇集到一起继续走青藏的,后来我们有再碰到他们。

两天在格尔木无事,也没有到处看,天气ms一直阴沉沉的,听说山上很冷,于是在格尔木买了保暖内衣。

2008年9月19日星期五

青藏线游记:D5,茶卡到都兰的无人区

听说茶卡到都兰130公里都是无人区,早早的备好了补给便出发了。今天在我的一顿催促下,木木也早出发了点。

刚出门几公里就看到有一个骑摩托的女的躺在公路旁边,鼻子里流出一丝血,几个人围在四周,估计被车撞了,也不知道还是否有命,我骑着车呼啸而过,后来木木赶上来说,那大姐是六点多被撞,已经魂归黄泉了。

接下来果然100多公里的沙漠戈壁,路旁边连个遮挡都没有,人直接暴露在太阳下面,涂防晒油下来一天还是被晒得暴黑。不过路况还好,没有大上坡。中午就是啃点干粮。下午的时候在链条上面涂了点链条油,顶风骑行挂个大盘速度居然飙到了30,自己想想都不可思议,后来和木木说,他也不信,说在路上顶个风都快崩溃了,速度不到20。

一百一十多公里的时候进入小镇德日哈,路旁都是林荫大道,树木郁郁葱葱,给人感觉就像到了江南,让我十分诧异戈壁地带还有这样的镇子。也没有感觉缺水或饿,我先头径直赶到了都兰,一看时间,不到5点,一百三十多公里,倒也蛮轻松,在都兰的路牌下面等木木,快一个小时还没有到,我便先进镇去了。

这是一个高原小镇,规模还可以,我先去邮局取钱,到六点多木木也到了,找招待所,先是住在都兰县政府招待所,100元/标间,后来发现不能洗澡,水压太小放不出水,遂退房,找了另外一个地方。感觉我们住的地方有点贵,但木木生病了,上吐下泻又感冒的,只好如他意。

在招待所碰到了一对开车过来的夫妇,给我们普及了下高原知识,聊到高原反应的可怕,倒是把我和木木吓到了,他们给了我一个单子,包括葡萄糖红景天百服宁丹参滴丸之类的救命药都全了,我们后来有在格尔木买,但大部分没用上,高反远没有那么可怕,他们估计是缺少锻炼,而且开车上去,骤然海拔上升太大,适应不过来,不过也是好心人哈。

在这里吃晚饭,木木上火啥都不想,就要吃稀饭,妈的大高原面食为主的,而且又不是早餐,有鸡毛稀饭吃,果然跑遍了真个小县城都没有找到,最后在小饭馆吃了点盖浇饭。这边蔬菜是贵啊,西红柿鸡蛋汤12,松仁玉米30,我晕了

青藏线游记:D4,翻越橡皮山

据说今天一出门就是橡皮山,抬抬头,发现山还很远,不像一出门就是的样子。

买点馍馍和牛肉,和dulai,ecco,小丁分开了,他们环青海湖,我和木木开始走青藏线。这是一个突发的念头,之前我骑行不过一共2k公里,出发前两天才决定走这条路,没什么准备,因此心里很是忐忑不安。

前些天骑行的腿酸感觉还在,但出发得义无反顾。

天气并不好,出来的时候阴沉沉的,好像要下雨,但赶路是第一要务。刚出来起伏路,坡不长,好爬,过了十公里开始下雨,好像也到了橡皮山下面,开始连续上坡,前些天积累的劳累在这时开始发作了,蹬踏时感觉那个无力啊,走一段路便想要休息,但一想到才刚刚开始爬山,咬咬牙便坚持下去。

雨越下越大,整个路面山头都在烟雨朦胧中,四处白茫茫。我和木木开始找地方避雨。但远远看见有牧民的帐篷,到了路边会发现根本过不去,国家为了保护草原在路旁设置了铁丝网,而且看着帐篷就在不远处,事实很可能会有好几公里,只好继续爬山。

盘山路,坡度大,一路崩溃,我数次想到这过山之后一定要搭车,木木便开始骂我没志气,一点困难就倒,且带以无限bs,现在想起来,木木比我有毅力啊,不过无论如何被bs,我还是骑在他前面,哈哈。在这条约20公里的上山路上,我休息不知多少次,下来啃馍和牛肉,木木当然有红牛了,我很少喝那东西。停下来的时候不敢动,一活动身上汗湿的衣服在肉上摩擦,奇寒无比,不动的话就是温度有点低,忍忍还能过去。

然而骑骑着不知怎么便到山顶了,一看码表,才22km,时间11点半,翻山有两个半小时,速度算是很慢了,橡皮山海拔3817m,由于下雨,被浓雾覆盖,能见度很低。见没有高原反应,我和木木便沾沾自喜起来,以为后面会很轻松。

之后是大下坡,顺着风我们有30多公里以40的速度冲过,爽啊,一点都不用踩,一扫上午的疲惫,接下来剩余约30多公里也是平路,腿还是有累的感觉,不过好歹在3点赶到了茶卡。

找好旅馆,先吃饭,木木居然要吃猪头肉,我算是服他了,在南京什么地方吃不到,偏要跑到这个牛羊肉为主的地区吃,点了一斤,结果没吃完。

之后四公里到茶卡盐场,发现居然要门票20,算了,不进去,好好等待明天。

2008年9月18日星期四

青藏线游记:D3,愉悦的青海湖边旅途

出发前没想到今天旅途这么好。倒淌河出门有文成公主像。拍了点照片后赶路,不久便远远看见天边一线蔚蓝,问问路人甲,那果然就是青海湖啊。我们都很兴奋,把车蹬得飞快。

还是我和ecco在前面,到了青海湖边上,开始走走停停拍照。的确在内地看不到这么纯净的颜色,青海湖像一块温润无暇的玉石一般就在身旁,湖边大片大片金黄的油菜花让人赏心悦目。骑在车上,想唱那首走四方么,那就唱吧。一路上游人颇多,于是有的油菜地都被踩出了一条条道道。到青海湖旁边要给湖边的牧民过路费,我也没去。还有很多牧民小孩,打扮得特有民族特色,就想让你拍照,然后他们要钱。我和ecco拍了几张,几个小孩围着要钱,ecco被迫给了十块,他们要我五块,当时我只有四块零钱,那群小孩死活不同意,最终还是拿了我一包榨菜了事。额,对这些在商业区的小孩真的没有一点好感了。

在一路上碰到了好多骑行的车友,有男有女,拉成一条长长的阵线,追上去一问,都是来自宁夏的俱乐部,牵头部队是一群老将,都是公路车,速度不慢。这时我的车变速出了小问题,大盘挂上去便与前拨撞击咔咔作响,于是我也慢慢的落在他们后面。但半路上还是赶上了xiaoding,说好到黑马河集合。

一路无事,看着草原,青海湖,牦牛和油菜花,下午五点半到黑马河,宁夏的车友夸说体力不错,我也只好傻傻的笑。全程120km,住在海盛招待所,目的是为了洗澡。但到浴室发现淋浴的水是用滴的,一点点下来小得很,洗个澡却冻得慌,遂随便擦擦出来了。

大约有一个小时,后面的人都赶上来,总算出来的人又凑到了一起。今天居然过去了四拨车队,有成都的,我们南京的,宁夏的,还有一拨坐车去鸟岛玩,不知道是哪里的,看来这个季节骑车的人是多啊。
明天就是和ecco众人分开,我还颇为忐忑不安,青藏线的挑战是一个不知深浅的泥潭,该去么?
晚上和ecco一席长谈,在他的鼓动下还是决定上路了。

青藏线游记:D2,几欲崩溃的日月山爬坡

人多的缺点就是这样,容易拖拉,本是一大早就可以出发的情况,到后来12点多才出西宁,小鸟爆胎就不说了,查也查不出,慢漏气。前面近11点才出发,我都不记得是怎么时间消失的。

出了西宁后,我和ecco在前面,我两速度比他们四块,边骑边等。ecco对他的公路车真是爱护有加,有点烂路便下来推着,曰为了保护车子。后来ecco看到高速,商量着咱走高速吧,109这破路走不了了,等到大伙一起过来商量,还是没有上高速,我却不知如何把ecco甩开了。到了不知名某地,等到一起,我又冲出去好远,突然接到短信说回来吃西瓜。

他们居然在吃西瓜,这还得了,立马回头以四十的速度冲过去,几个人一下干掉硕大一个瓜。木木还说谁给发的短信,于是我暴扁之。

到湟源之前都是山间行走小上坡,我还是一个人在前面,在湟源等他们约半小时,接到短信说在路上吃中饭了,我日,只好吃自己带的大饼和牛肉。等到木木过来,ecco已经乘我上厕所时先跑过去了,我走走停停,顺便照顾下后面的xiaoding和姑娘,他两一个新手,一个没骑过,在后面慢慢悠悠的晃,到岔路口我等半天发现还没上来,回头找过去发现居然停路边上,在看着自行车发呆。

xiaoding说我丫怎么回事居然连她都骑不过了,检查自行车一看刹车片一直在摩擦后面轮胎,啥时候这样的不知道反正搞半天发现不太好搞定。 xiaoding说你先走我到旁边的修车店把这玩意取下来。这时候都有5点多,我想是该赶紧赶路了,还有50多公里。于是对他两说不行就搭车啊我先走。

这是214高速,和109合在一块了,所以自行车也可以上。超过木木和dulai,一路上坡,感觉挺耗体力的。又不知多久到一个收费站,被告知离倒淌河还有25km,继续赶路,并和xiaoding保持联系,他家那位姑娘不行了,据说要在路边住下,这样也好。再一会便看到了在休息的ecco,丫面带笑容说在旁边的沟渠里面大便了一泡,并看着大卡车在头顶呼啸而过。我居然下意思的探过头去瞅了眼,还tm在冒热气,恶心死我了。借此话题两人开始在路旁打闹。

好漂亮的风景阿,抬头是触手可即的白云蓝天,路旁是缤纷的草原,远方是被夕阳染成金黄的群山,斑斓的色彩顿时晕眩了我的身体。我和ecco在这里互相拍照,可惜的是时间已晚,有点暗,我手持又只是一小破数码。不一会木木也赶了上来,开始脱衣服,我有一张感觉不错的丫上半身裸体照就是这里照的。

渐渐的天黑了,我们也没有等到dulai,还得继续赶路。到山上可以走绕过山头的高速也可以走老路爬上山看看日月亭,我们走的是要爬5公里大上坡的老路,累啊,挂个小盘大飞有一下没有一下的往前踩,木木都开始服用红牛兴奋剂了。估计这5公里走走停停有1个多小时吧,温度开始下降,有点冷。在半山腰木木有和一个藏族小姑娘拍照,还说要寄给她,这便是木木,和任何人都能处的相当温和友好,不过那小姑娘却张口要手套手表的,把我们当运货车了吧。最后爬到山顶,木木干掉了三罐红牛。

下山风大气温低,大伙都换上了冲锋衣,此时天完全黑了,只能依稀看到路面,我有个后灯木木有个前灯,但基本等于没用,所以速度不敢太快,好在不用蹬踏用力了,借着隐隐的路面反光还能走。路上收到dulai的短信,他到收费站就已经崩溃,看到大货车停在旁边修理,上去吹吹牛聊聊天就搭上去了,车绑在货车后面,比我们先到倒淌河。运气还算不错,一般招手货车是不会停下的。

一路下坡冲到倒淌河已经九点半,先找了点吃的,在旅店等到dulai,告诉我们xiaoding没有找到住的地方,也没有搭到车,两人还在赶路呢,小丁用长裤系着他女友的小鸟,硬生生拉了有十多公里,天下第一好男人阿,他们要白头偕老了。后来又联系上,他们也在收费站处拦到车,100元要直接坐到青海湖去,就不和我们一起走了。再后来联系到他们的时候已经在青海湖边上,估计是到的是151吧,100/人的房间,据说没有水,没有厕所,被子是发霉的,倒霉到家了。

吃晚饭,到所谓的倒淌河宾馆住下,8元/人,第一天就住到了整个旅行中最便宜的房子。旁边住的还有很多藏族,还有喇嘛,倒是挺心惊肉跳的。好累,腿很酸痛,我开始考虑着明天是不是行程减半。

青藏线游记:D1,塔尔寺

这天应该是7.21吧,我回忆不太起来了。

青海湖环湖赛刚刚结束,整个城市干干净净,看不出来有些许自行车的味道。

住在南川西路的雪域高原旅行社,30的四人间,还不错,后来再住到其他的驴友旅社,发现这种旅店都很有特色,角落里尽是民族风情,墙壁上有四方驴友的慷慨流言,好客的店家可以提供详尽的旅游资料。按照计划,我们先去塔尔寺看看,但拖拖拉拉搞到十一点多才出发,一行先到西宁的王国章车行保养下车子,木木去车站发我和他的装车包到拉萨,后又忙忙碌碌吃饭,直到两点多,一行人才正式往塔尔寺赶。

我们有六人,我,ecco,木木,dulai,xiaoding和他的女友,这是个从没有骑行经验的小姑娘。

我和ecco速度匹配,一直骑在前面,上坡又顶风,慢慢地把他们甩开了,ecco骑他那辆3万多的公路车甩开我也很远,到后来他休息,我和dulai先后赶上。

但等很久也不见后三人,短信一问,原来姑娘的小鸟折叠车爆胎了,在旅社修。我们便先走,有点下雨,也不知他们能否赶上过来。

雨是越来越大,好在路不远,25公里,到了塔尔寺一问,80门票,一本地人说给我们60,包导游带我们进去,但我穷学生不想去,ecco和dulai ms也没什么兴趣,便在外面乱转。一会便听说五点关门不要票了。所谓关门其实是导游下班,寺庙不让进,大门虽有锁但门缝很大随便进去。2块钱让老大爷帮忙看车我和dulai进去了。ecco居然不进去,不知为啥,心疼自己的公里车?

反正没导游,我和dulai在里面乱转,也看不懂,胡乱拍照,看到金顶偷偷的思量怎么去敲块金子下来,那真是金做的,我下来问了当地人的,除非那人看似忠厚实则奸诈的忽悠我。在山上,看四周的云和天,好白,好蓝,好清澈,人都有点飘飘然的感觉。好久过去,便下来了。

出来便看到木木和xiaoding在广场上和ecco颇happy的在聊天,姑娘没有过来,估计车不好使,既然还有时间,他们也进去看看。

这一去便是好久,我和dulai等得心烦,冲到里面去等,等一会ecco下来了,却又看到一帮子单反,20个人有吧,每人手里一个长焦,哗哗的闪光四溅。居然找上了我们,说看我们看着像学生想给我们拍照记录学生暑假出来自己骑车旅游生活之类云云,反正免费照相,我们也没反对,便按他们的要求摆弄。把装备搞好,排个队形一起慢慢表演。还要面求微笑。当时我就想,tnnd咱这趟出来估计是搞死搞残,不知道还能微笑几回,这个感觉好像不太对。后来又按他们要求摆了n多造型。其中一个连拍的机器,我骑过去的时候哗哗哗的转一圈几十或十几张相片的拍,着实吓了我一跳。不过被一大堆人拍照的感觉还不错,有点明星的感觉,闪光灯四起,哈。

一会木木和xiaoding也出来,拖着又拍了几张相,时间不早,就返程了,一路下坡顺风,踩得飞快,到旅店看,小鸟爆胎在家,还没有修理呢,晚上搞定之。

在西宁的莫家街夜市腐败,哇,美味的烤羊肉,现在想起来还口水哗哗的。

睡下,明天到倒淌河。

2008年9月13日星期六

perlnotes:一些关于perl语言中执行的知识

简单的分为两个阶段就是 编译后再运行

use = BEGIN{
require
import
}

begin在编译时进行

如果要手工包含程序路径
BEGIN{
unshift(@INC,"../inclued)";
}
use Foo; #将在include中查找foo
另外一种简单的方法是个use lib qw(../included)

2008年9月11日星期四

perlnotes:闭包

或许都知道了闭包是什么意思,下面是一个例子

sub generate_greeting{
my $greeting = $_[0];
return sub{
my $project = $_[0];
say "$greeting $project";
}
}

my $rs = generate_greeting("hello");
my $rs1 = generate_greeting("Good");

&$rs("world");
&$rs1("monring");

所有的技巧都在于$greeting已经超出了它的生存期

闭包的内幕
一个变量的创建有两个部分,变量名和变量值,它们之间是分离的实体,通过一个关系链接起来.同时还有一个引用计数记录了指向这个值的引用个数.当引用计数为零时变量值被释放.一个code快里面的变量,在code结束时变量会被释放.
但在这里返回code里面还有这个值,引用计数加一,所以不会被释放.

perlnotes:函数的引用

sub greet{
say "Hello world";
}

my $rs = \&greet;
而不是 $rs = \&greet();
下面语句代表的意思是调用函数greet并创建一个返回值的引用

使用&来调用这个函数
&$rs();
或则 $rs->();

在关闭符号引用的情况下还可以如此
$rs = "greet";
&$rs();

perlnotes: typeglob

给一个typeglob赋值

*a = *b
此时符号表中的两个表项a和b指向同一个typeglob
改变b的值也会改变a的值

$a=5
$b=10
say $b; ## get 10 here

显然typeglob和词法变量没有任何关系
my *typeglob是错误的

2008年9月10日星期三

perlnotes: 词法变量my和local以及一些生存期的问题

my $x = 10;
first(); ##get 10 here
sub first{
my $x =11;
second();
}

sub second{
print $x;
}

显然用my没有能够动态的获得一个值,在这里把my 改成local就可以得到11

my和local的重要区别在于my建立真正的新的私有变量
而local的机制是先将原来的全局变量保存,在代码结束的地方在回复到原来值

一般来说用my总是好于用local
但local的一个重要作用是局部化perl的内建变量如@ARGV,$/等

perlnotes: 正则中的/e和/ee

/e = eval 'code' 不会对code进行插值
//e = eval "code" 会对code进行插值

my $str = 'My name is $name' ##$name="foo" and you want to substitute $name by foo
$str =~ s/(\$\w)+/\1/gee \1获得$name, /ee对$name插值获得foo

perlnotes: 引用和引用中的->

->是一种明确使用引用的方式
$array = \@array;
$scalar = $array->[1];
但要注意的是并没有
@slice = $array->[0..2]这种写法,范围操作符在这种情况下并不适用
同样
@slice = $array->[0,2]也不会正常工作,就像上一个note一样,0,2在scalar下会返回2,@slice获得的是$array->[2]

在两个下标之间的->可以省略
比如$sue{child}->{brother}->[0]完全可以写成$sue{child}{brother}{0}

不能省略的情况
$ref=['foo','bar'];
print $ref[0] ##error
print $ref->[0];
print $$ref[0]; #both ok

***********华丽的提示符**********
my @array.....
my $ref=\$array[1];
pop @array
print $ref ##在这里仍然获得$array[1]的值

perlnotes:perl中的list

('a','b','c')这是perl中的一个枚举列表
需要注意的是它在scalar上下文中返回的是最后一个元素的数值