-
我们俩都不敢养真花,原因只有一个:怕养不活。但是上周还是没能抑制住心底对绿色植物的喜爱,用“不菲价格”购入了两盆“大家伙”。
花匠称其中的一盆花为“香牡丹”,我在网上搜了半天也没找到“香牡丹”这种花;还是LP发现这盆花与一种叫“栀子花”的形神俱似,而且查了一下栀子花的资料,发现栀子花又名“木丹”,“牡丹” vs. “木丹”,发音也接近^_^,姑且把它看作是小叶栀子花吧。这种花最大的特点就是“香”。刚放到屋子里就满屋飘香。而且现在正值其花期,几十个花骨朵是“你方唱罢我登场”,让人看起来甚是喜欢。
貌似“栀子花”
这花真香
另一盆花叫“孔雀茱萸”,因叶子有孔雀羽毛般的花纹而得名,很具观赏性,也比较常见。不过据花匠说这种花不会开花,但是具有不错的空气净化能力。经过一周的观察发现孔雀茱萸有一个很有趣的特点:那就是晚间时其叶子向上直立,向中间靠拢;但是白天的时候叶子就都垂下来了。
孔雀茱萸
养花时间还太短,其中的苦与乐还要在以后的日子里慢慢体会^_^。 -
去九寨的必经路之一就是成都。公司在成都有分舵,位于风景秀丽的青城山上,但5.12地震时青城山毁坏严重,公司也受到了不小的损失。公司总部这边的很多人到过成都出差,凡去多的人都说成都不错:东西不贵,生活节奏慢,是个宜居城市。
乘国航班机从沈阳飞往成都,途中遇到气流较多,飞机颠簸的较为厉害,那些日子恰逢法航的空难震惊世界,心中恐惧不免油然而生,只能加大耳机的音量麻痹自己的恐惧神经^_^。还好,飞机有惊无险的顺利到达成都双流机场,下飞机后第一件事就是办理两张熊猫金卡。
飞机下厚厚的云层
成都在5.12地震后为了加快其旅游业的复苏推出了“熊猫卡”,持有熊猫卡,你就可以免费畅游成都市内及附近11个国有景点。外省游客可免费申领熊猫金卡,持身份证即可办理,短信激活熊猫金卡也仅需一元钱。在双流机场国内到达出口的左侧,有醒目的熊猫卡办理处,在每天21点之前都有工作人员为你服务。
第一天到达成都后并未进市内而是入住了国航的一家接待酒店,因为第二天还要飞九寨。成都机场附近开发的比沈阳要好许多,周围的各种配套设施很全面,比如宾馆、超市等,公交线路也多,周围还有很多崭新的楼盘,这些都给这个市郊地区带来了足够的人气。入住酒店后已近午后5点左右,放下行李,在宾馆周围逛逛,感受一下成都民间生活的气息。令我们惊奇的是在宾馆后身这一块小集市竟有十多家茶馆和麻将馆,走在街上你远远的就能听到搓麻将的声音,浓厚的川音时不时从两旁的茶楼和麻将馆传出。往里一撇,呵,男女老少,四人一桌,兴致正酣,有些人由于天气炎热甚至赤膊上阵,陶醉于麻将声和茶香中的成都本地人悠闲的享受着他们美好生活。
在成都短暂的停留一晚后,第二天飞往九寨。又两天后,飞机再一次降落在成都机场。这回旅行社按照合同给我们安排到位于市内中心地带的四星级标准酒店-君悦丽景,酒店距离成都著名的步行街春熙路仅仅两三站地。由于时间充裕,我们决定逛街去。成都“公交车燃烧事件”的阴影此时还未散去,乘坐成都公交车还是有些心有余悸的,我们特意选择了一辆非空调车,两站地后,在春熙路东口下车。大都市的步行街大同小异,无非是看人、逛商场和吃东西。我们索性走进几个商场逛逛,发现逛商场的人真是多啊,特别是太平洋百货,本来就不大,里面被人群挤得满满的,本来喜欢逛商场的LP看到如此阵势后购物兴致也大减了不少。看来成都的商业环境还是蛮不错的,丝毫没有受到经济危机的影响啊。另外还有一个造就这一环境的可能因素就是成都人口基数较大,这点应该是其他一般省会城市所不能比拟的。我个人对商场购物没有兴趣,“吃”才是我此行的目的,在步行街上我一直在搜索成都本地名小吃,这也是来旅游前工作做得最多的一项。“龙抄手”总店很快就进入了我的法眼。把LP从商场里生拉硬拽出来,直奔“龙抄手”。
成都著名步行街-春熙路
春熙路上的孙中山铜像
以前一直孤陋寡闻,不知“抄手”是何物,来成都前一成都同事告诉我:“抄手”其实就是北方的馄饨,在成都这边叫“抄手”,在福建那边似乎叫“云吞”。在成都,抄手的制作有多种,但是以“龙抄手”最闻名。原以为“龙抄手”总店只是卖抄手,进去后才发现:这里几乎汇集了成都所有有名小吃,什么钟水饺、赖汤圆、韩包子等,这里都可以买到,就是不知道是否正宗。这里还有卖小吃套餐的,一份套餐里包含很多种小吃,每种量不多,仅供尝尝。我们来这里就是来吃抄手的,其他小吃暂不考虑。LP对吃没兴趣,只要了碗“旋子凉粉”。我则要了碗原味抄手,之所以没要红油的,一是因为太辣,可能吃不惯;二是原味的才能充分品尝出这抄手到底做的如何。吃了后,我才觉得我可能错了,也许本地人吃的就是那种辣气,而抄手本身的滋味倒是其次。说实话这份原味抄手味道一般,甚至感觉还不如在沈阳吃的吉祥馄饨有味道。
春熙路上的龙抄手总店
龙抄手概况
原味抄手
从抄手店里出来,LP看中了步行街中央区域的那些小吃烧烤当口,并点了份烤土豆(这个沈阳没有),土豆不大,粘满了辣椒粉,但是LP却吃的津津有味,我虽然已经饱了,但是还是买了份张飞牛肉夹馍,泡椒味道的,居然也辣的很,牛肉块倒是很嫩。本来晚上想去吃串串香的,但是有了这抄手、土豆和牛肉垫肚子,再也没有了继续吃的欲望了,遂回酒店休息,为下面的行程做好准备。
接下来的两天看乐山大佛、游佛教名山峨嵋,然后再次回到成都,行程中的第七天是在成都市内自由行。这一天自由行我们的计划是游青羊宫、杜甫草堂和武侯祠,逛逛锦里,然后晚上吃上一顿地道的四川火锅。
到四川已经第七天了,身体已经很疲劳了,特别是在看过了九寨、峨嵋这样的名山靓水后多少都有了一些审美疲劳,游览市内这些景点的时候自然有些走马观花,心不在焉了。成都位于西部,早晨太阳出来较晚,另外成都的天总是雾蒙蒙的,每天都像是多云天气,看到晴空万里绝对是一种奢望。早上8点出酒店,坐公交首先来到青羊宫,本想进去看看,可发现青羊宫居然不在熊猫卡游览范围内,我和LP一商量,本来就没多大兴趣,索性就放弃了。在青羊宫那个路口向西走,也就是两站地,就可以看到杜甫草堂南门指示牌,顺着指示牌绕了一圈才来到草堂公园南门。从南门进入公园,一直走就会来到杜甫草堂入口,刷熊猫卡免费入园。虽然现在成都旅游不是什么旺季,但是人却也不少。园区内小景点甚多,我们没有那么多时间,遂沿着中轴只逛最主要景点- 杜甫草屋,位于景区中央的一处茅草屋,这就是诗圣杜甫曾居住过的地方,这地方倒是幽静,外围是郁郁葱葱的竹林,悠闲的很。
青羊宫
杜甫草堂正门(南)
少陵草堂
两个小时的游览路程,我们花了40分钟就看完了,从草堂北门出来,花5元钱坐车就可以到达下一个景点-武侯祠。全国有很多武侯祠,不过以成都这个规模和影响力最大。同样武侯祠也是熊猫卡范围内的景点。武侯祠倒是更值得看一下,里面除了供奉当年诸葛亮以及当年蜀国君臣外,还有很多历史介绍长廊可以一看,可以了解一下蜀地的历史文化和风俗风貌。
武侯祠入口
武侯塑像
武侯祠名联-”能攻心,则反侧自消,从古知兵非好战”
武侯祠名联-“不审势,即宽严皆误,后来治蜀要深思”
三义庙
武侯祠与锦里相连,锦里就是当地的民俗小吃一条街,以手工艺品出售和小吃为主,主要吸引外地游客。我们到这里主要还是想品尝一下当地的名小吃。小吃没有我想象的多,能吃的更不多,我和LP只是品尝了“三大炮”、“酸辣豆花”和“五粮春卷“,总体感觉一般,没有想象中的好,但也不差。小吃吗,就是吃一个新鲜,一般都不会再回来吃的,呵呵。
古色古香的锦里
“三大炮”
五粮春卷
酸辣豆花
按照原计划晚上定要吃一次正宗四川火锅。可去哪里吃却成了问题,成都的火锅店太多了,哪个有特色又物美价廉呢,突然想起在君悦丽景酒店的街对面有一家”重庆刘一手“火锅,从书上看,这家店还不错。我们来到店里时,离吃饭点还有段时间,店内还没有顾客,我们是第一桌。我们铁定要尝试吃辣的了,所以要了一个牛油鸳鸯锅。吃上后才体会到其实四川火锅除了辣之外,更多的是油腻。锅里是麻辣牛油,蘸料居然还是香油,这与北方火锅有着很大不同。吃上一会儿后就感觉嘴唇上像是粘上了两片油膜,腻得很。油腻+麻辣让我们失望而归。也许不是成都火锅不好吃,是我们实在吃不习惯。刘一手火锅旁边就是一家玉林串串香店,不过满肚油腻的我们再也吃不下任何东西了。
牛油火锅
第八天从成都机场登机返回沈阳,再见成都!
成都机场还算比较繁忙 -
工作这几年去过全国很多地方,名山秀水也见识了不少,但是心底依然时常涌动着一种向往,那就是到九寨沟看看。九寨沟之美想必大家也都有所耳闻,但耳闻不如亲历。这不我终于有机会达成这一夙愿了:和LP一起走进童话世界-九寨沟。
九寨风光,美在秋冬之际。红黄蓝绿四种颜色交相辉映,那才是真正的童话般的世界,如果你有幸再遇到一场白雪,那景色将不能不说是上天的恩赐。而六月份九寨的美则打了一些折扣,原因有二:颜色少+水位低。不过九寨之所以驰名中外,也在于其景色之韵味随四季而不同,无论如何其价值也超过了那百十来元的门票了。
九寨处于高海拔的山地地区,交通条件自然比不了平原地带。进九寨无非两种方式:乘飞机或坐BUS。乘飞机入九寨有两条线路,成都->九寨或重庆->九寨,由于直线距离不长,不到一个小时就能到达九黄机场;但如果你是坐BUS,那你就要做好充足的准备,10几个小时的车程而且走的基本都是盘山路,要知道走盘山路的滋味可不是很好受;不过乘飞机也是要做好心理准备的,用当地藏族导游的话说:九黄机场,十趟航班九个黄。这充分说明了九寨地区天气状况多变的特点,一旦因天气原因不能飞,那种在机场苦等的滋味还不如乘BUS呢。这不这样的坏天气恰巧让我们碰到了。6月11日成都机场上午飞往九寨的航班都因为九黄机场降雪而延误,我们在成都机场整整等了半天时间。你要说盛夏季节还下雪?没错,这就是九寨!
从飞机上俯视九寨地区
九黄机场就像一座停泊在群山之间、山腰之上的航空母舰一样,机场跑道的两端都是山谷,地势十分险要。飞机降落时你丝毫没有在平原那种落地的感觉,因为通过舱内小窗户向外看,你看到的依然是群山环抱,下面就是深不见底的沟壑。出了机舱后才体会到什么是高原温度,真冷啊。机场到达口处有卖棉衣的,在大城市几十元一件的外衣,这里却要上200元到500元不等,还好我们带了几件长T恤,多套几件还能保暖。
到了九黄机场不代表就到了九寨沟,两者之间还有近百公里的盘山路。一名藏族司机小伙儿和一名藏族美女导游负责接待我们。由于飞机晚点,我们错过了黄龙这个景点,只能直接入住宾馆了。从机场到宾馆沿途还有零星几个小景点,比如岷江源、甘海子等,导游还算热情周道,途中给我们预留了欣赏和拍照的时间。近两个小时的盘山路让我们已经疲劳的身体更加疲惫不堪,吃完晚饭,我们就休息了。夜间酒店的温度依然很低,中央空调没有开放,还好有电热毯,否则那夜将十分难熬。
甘海子
第二天吃罢早饭,导游就接我们入沟。酒店离沟口也就是几公里路程,十几分钟便到了。拿了门票,通过安检后,我们便进入了心慕已久的九寨世界。游九寨有多种方法,绝大部分游客会选择乘景区内环保车按照规定路线“走马观花”般的游览;当然如果你的体力足够充沛、时间十分充足的话,大可徒步走栈道细致体味九寨的美景,不放过每个细节。我们自然和多数游客一样,选择乘车游览。
九寨正门
九寨沟整个景区由三条呈Y型分布的沟组成,三条沟分别是树正沟、则查洼沟和日则沟。九寨主要的美景则主要集中在树正沟和日则沟两个沟内。常规的游览路线是,入沟后,先乘车沿树正沟游览,在树正群海下车,领略树正群海的美景;然后上车到达诺日朗中心区,听从景区调度中心调度。调度中心会根据景区游客分布情况选择你所乘车辆继续游览哪条沟。上午完成那条沟的游览,中午回到中心区就餐;下午继续游览另外一条沟,游览完毕后还可以回头乘车重温你之前未细致品味的景点。
刚入沟,第一感觉这里怎么那么像我之前去过的“关门山”呢,但是当我再看到路旁那溪水冲击石子击出的雪白浪花时,我回到了现实,这里不是关门山,这里是九寨。
小溪白色浪花
坐上BUS(这里导游都会告诉游客坐在客车左面会欣赏到更好的景色),一边聆听随车讲解员的讲解,一边目不转睛的欣赏着窗外瑰丽的景色,并不时举起相机争分夺秒的争取将那一瞬即逝的美景留住。游览的过程如果用大段的文字描述的话不免会让人感觉乏味,下面我将用图片和注释来展示九寨的美。
树正群海
树正群海是入九寨后第一个美景比较集中的地方,也是进入九寨后第一个让游客近距离接触水的地方。湍急的溪水、古朴的磨坊、灵动的小水车都吸引大家驻足拍照。最让大家惊奇的还是九寨的水的透彻和纯净,白璧无瑕的那种感觉。
第一次近距离欣赏九寨的水
树正寨
九寨因九个藏族山寨而得名。其中树正寨恰是这九个山寨中最大的一个。你可以看到当地居民的服饰和房屋样式,品尝到青稞酒与酥油茶,围着转经筒走上一圈,与招展的金藩来个合影。这里也是沟内最集中的购物场所,如果有兴趣可以给亲戚朋友带上些特色产品,像牦牛角梳子,似乎这里还是很正宗的,价钱也不贵。
老虎海
沿着树正群海的栈道继续向沟内方向游览,下一站就是老虎海。与树正群海不同的是这里的水静而蓝,就像一个蓝宝石镶嵌在山谷中。
长海
从老虎海上车,一直到诺日朗中心区,经调度,我们这辆车走左侧的则查洼沟,这条沟景点较少,有两个因泥石流形成的堰塞湖,这里称为上下季节海,在这个季节,这两个海都是干枯的,没有水,十分遗憾。在则查洼沟尽头是九寨最大的海子,也是海拔最高的海子 - 长海。不过游客从观景台上只能看到长海的三分之一,另三分之二被大山挡住了。长海的美在于其静,且与周围的雪山辉映。
缺水的五彩池
沿着长海的栈道向下,会来到则查洼沟的最后一个景点-五彩池,不过这个季节的五彩池景色要逊色太多,除了没有了五彩的衬托,水位偏低也让大家唏嘘不已。
从则查洼沟乘车回到诺日朗中心区已是中午,也就是补充能量的时候了。因为沟内的食品比较昂贵,我看多数游客还是自带食品和水。休息大约一个小时,就出发继续游览了。下一站:日则沟。依旧是乘车前往。
原始森林
乘车沿着日则沟上行,直到沟尾,那里是广袤的原始森林,有些导游会告诉你这里不值得一游,但是时间充裕的话,为什么不来转转呢。沿着原始森林的栈道走上一圈也的确很累,特别是有些上坡的栈道,在高原地带爬坡真是一件困难的事情,时间不长我的肺部就有了些许痛感,无奈只能停下来大口喘气。
箭竹海
从原始森林乘车下来,途径草海和天鹅海,在箭竹海下车。这里的还依旧广袤,依旧蓝绿相间,不过海中有些杂质,不如前面看到的海那么纯净。这里的栈道两旁蚊虫较多,小心防范为妙。
朽木出新枝
熊猫海
从箭竹海下来,你可步行或乘车到达下一站熊猫海,这个海子的景色要比箭竹海漂亮一些,特别是海子中倒伏的横七竖八的枯木,给海子增加了另一番情趣。
熊猫海沉积物
五花海
见过前面那么多海子,你到了这里,游客多半会觉得五花海与前面的海子有些大同小异了。
珍珠滩
82版西游记的外景地,白马踏水而行走的就是这里。石与水的灵动让大家眼前一亮。
珍珠滩瀑布
沿栈道下行,回头可看到珍珠滩瀑布的壮美,不过这块栈道尚未修善完毕,不要走的太深了,否则你终究还是要爬回来的。记住:高原爬坡不容易。
远处壮丽的雪山
游览自然风光的时候切记:时不时要回头望望,也许你就能发现超美的景色。这个雪山就是这么捕捉到的。
镜海
日则沟离诺日朗中心区最近的一个海子,景如其名,无风如镜,水中看山,虚实难辨。但是如有一点微风,那便无法欣赏到如此的美景了。
镜海朽木
诺日朗瀑布
从镜海一直沿栈道而行,这段距离并不短,坚持一下你就会来到诺日朗瀑布。这是九寨最宽阔的瀑布,十分的壮观。到了诺日朗瀑布也就表示沟内的景色你大多已经游览完毕了。这个时候估计你还有大把的时间,可以把树正沟附近一些未来得及细致品味的景点再游览一遍,特别是那个犀牛海,太漂亮了。
犀牛海
上午乘车从树正沟向中心区行驶时大家透过车窗都惊诧于犀牛海的美,但是这里并未停车。多数游客都是下午回到这里重游。犀牛海平静无风,山水呼应,和谐共生,那种静谧是从其他海子所体会不到的。
犀牛海实物与倒影交相辉映
也许这里称为镜海才更准确。
在九寨出口听到一些游客如此感慨的说:黄龙看一遍就够了,但九寨却是百看不厌,秋天的时候再来。
九寨沟国家地质公园 -
2009-05-28
巴萨问鼎欧冠,梅西引领“梦三” - [大话足球]
巴塞罗那队 vs. 曼彻斯特联队,这绝对是一场世界足球公认的巅峰对决:
1、它是西甲冠军与英超冠军的对决;
2、它是艺术足球与实用足球风格的对决;
3、它是梅西与C.罗之间为争取个人最高荣誉的对决;
4、它也是“菜鸟少帅”瓜迪奥拉与“大虾老爵爷”弗格森之间的首次对决。
对于两只球队来说,本场比赛也必将是一场“刷数据”的较量,曼联若获胜将成为冠军杯改制以来首个卫冕成功的球队,并成为史上第一个“五冠王”(联赛杯、世俱杯、社区盾、联赛冠军、欧冠冠军);巴萨如果获胜,也将成为西班牙足球历史上首个“三冠王”,这一殊荣就连20世纪最佳球队皇马也未成拿到,同时也是近十年来欧洲足坛既曼联后的又一“三冠王”球队。
一场比赛却包含着这么多的意义,怎能不受到众球迷的关注呢!另外与近些年的欧冠决赛相比,本场比赛才是真正意义上的“冠军对决”,两个国家联赛本赛季的NO.1的对决,这无疑又给这场比赛增加了无穷魅力。
赛前多数媒体看好曼联,特别是国内媒体认为目前的曼联已经达到了金庸小说中杨过的“重剑无锋”的境界,而巴萨则外具华丽,内欠沉稳,有些令狐冲的“独孤九剑”的味道。到底是“独孤九剑”招式更胜一筹还是“重剑无锋”的沉稳后来居上,让本场比赛吸引了全世界媒体的眼球。
欧洲足球最高荣誉-圣伯莱德杯(俗称大耳朵杯)
菜鸟少帅瓜迪奥拉与大虾老爵爷弗格森
说完意义,再来说说过程。
2009年5月28日凌晨2点45分(北京时间),2008-09赛季欧洲足球最后的巅峰之战在“永恒之城”罗马的奥林匹克体育场上演。7万多球迷现场观看比赛,另外全世界还有数以亿计的球迷将通过电视直播来收看这场比赛,这也是本赛季欧洲足球的收官之战。凭借小白伊涅斯塔补时阶段入球淘汰切尔西的西甲豪门巴塞罗那队身穿传统红蓝主场队服迎来了英超红魔、卫冕冠军曼彻斯特联队的挑战;本场比赛双方都有人员因红黄牌停赛,巴萨损失“双翼”阿尔维斯和阿比达尔,而曼联则损失了中场大将弗莱彻,但从阵容上来看,曼联更齐整一些。瓜迪奥拉排出的巴萨阵型如下:巴尔德斯镇守龙门,普约尔和老将西尔维尼奥分据后场左右两翼、中卫皮克继续承担重任,镇守中路;亚亚图雷继续上一场对切尔西的角色客串中卫与皮克搭档;中场方面巴萨青训系统的佼佼者-双核哈维和小白伊涅斯塔继续充当巴萨的发动机,布斯克茨担当后腰;前场则是本赛季攻击力冠绝欧洲的三叉戟组合-亨利、埃托奥和巴萨国王梅西。
巴萨决赛首发11人
曼联方面老爵爷则排出了欧洲第一防线的全主力阵容:门将范德萨,两名1米90以上的中卫费迪南德和维迪奇占据中路,奥谢和埃弗拉分局两翼;中场安德森顶替停赛的弗莱彻出任首发,卡里克和老队长吉格斯搭档担任曼联进攻的发动机;前场鲁尼、C罗和亚洲荣耀朴智星组成进攻三叉戟。
开球后,有着去年决赛经验的曼联先发制人,前10分钟,皮球基本一直在巴萨的半场,求胜心切的C罗在短短的10分钟内就完成了5次射门,其中多次都极具威胁,第一次远射还造成巴尔德斯脱手,朴智星的补射被挡出。巴萨的三叉戟在对方前场连拿球的机会都很少。不过巴萨也就仅仅给了曼联这10分钟的表演机会,第10分钟,小将布斯克茨防守头球顶到中圈附近,伊涅斯塔拿球与梅西做了传切配合后,带球长驱直入,禁区前沿直传埃托奥,埃托奥带球扣过维迪奇,小角度捅射,范德萨没能挡住皮球入网,巴萨1:0取得梦幻般领先。巴萨全场第一次进攻、第一次射门就获得进球,不得不佩服巴萨的攻击力和攻击效率。这个进球也给曼联来了个下马威:与巴萨打对攻没有好果子吃,皇马就是前车之鉴。
埃托奥进球瞬间
进球后,巴萨开始了自己的控球表演,三叉戟开始发威,梅西在中场与哈维伊涅斯塔组成进攻三角,在前锋线与埃托奥和亨利组成锋线倒三角,这一战术模式在打强队时越来越灵验,梅西的“威慑力”让曼联不得不派出大量兵力对其进行防守,梅西每次拿球都吸引大量对方球员,这也恰恰给巴萨其他球员带来的更多的机会。此时场外曼联的球迷依旧不离不弃,以高亢的歌声来鼓励曼联的队员,但此时胜负的天枰已经倾向与巴萨了。
梅西突破
梅西在第18分钟完成自己本场首次射门,埃托奥在右路接普约尔的手抛球,带球前突后将球回传给身后的梅西,梅西右路带球快速内切,在距门20米左右左脚大力施射,范德萨飞身扑救,球擦着上门梁飞出,极具威胁的一脚射门。随后曼联发起一次很有威胁的反击,朴智星的单刀被巴尔德斯破坏。
开场30分钟之后,巴萨双核牢牢控制了中场,哈维、伊涅斯塔和梅西在对方的防守体系中如入无人之境,传球都恰到好处,对方只有靠犯规来截断巴萨流畅的传切配合了。本场比赛曼联球员居然对巴萨中场没有严格逼抢,反倒是巴萨前场球员就地积极的反抢让曼联失误频频,不知道是老爵爷的战术安排出了问题,还是场上球员的战术执行出了问题。第38分钟,梅西禁区中路巧妙挑传亨利,中卫费迪南德无奈只能背身向后摆腿勾球,还好老费的运气好,球没有变向,否则亨利拿到球后就形成必杀单刀。第44分钟,梅西左路拿球用速度突破对方4名防守队员的包夹,在底线传中,范德萨及时出击拦住皮球。巴萨在上班场最后这段时间内完全控制住了比赛,基本是在曼联的半场控球和围攻,曼联球员就是抢不下对方脚下的皮球。带着一个球的优势,巴萨结束了上班时的比赛。
下半场曼联做出人员调整,梅西的阿根廷国家队队友特维斯替换安德森上场,朴智星从右路换到左路。不过巴萨还是在下半场首先给曼联制造了威胁,下班时第3分钟,哈维中场直传,亨利单刀直入,扣过费迪南德的防守,但最后的射门却被范德萨封杀,而此时中路梅西已经拍马赶到,如果亨利选择传球,那巴萨扩大优势。第50分钟,埃托奥直传禁区找梅西,梅西在触球瞬间被对方后卫拉倒,但是裁判没有判罚点球。巴萨下半时更是牢牢控制住了场上局面,巴萨球员在对方半场拿球更加闲庭信步;曼联球员似乎失去了斗志。第52分钟,伊涅斯塔被侵犯,巴萨在禁区前沿获得任意球,哈维的射门打在右边立柱上弹出,相信曼联的球迷又是惊出一身冷汗。
第70分钟,梅西上演锁定胜局之进球,哈维中路传出保姆式助攻,梅西在两名1米90以上的中后卫中间快速插上高高跃起头球吊射,范德萨只能目送足球入网,梅西以一记非典型入球帮助巴萨锁定胜局,这粒入球也让梅西打破10场对英超球队不进球的魔咒,同时这粒头球也是对英超第一防线的最大的讽刺。
梅西进球瞬间
梅西用一粒头球证明自己才是世界NO.1
梅西进球后拖鞋庆祝
梅西进球后笑逐颜开
2:0领先后,巴萨还有多次破门良机,要不是普约尔是后卫出身,比分绝不仅仅只是2:0。随着主裁一声哨响,巴萨历史性的拿到西甲首个“三冠王”,也是2000年以来欧洲第一个三冠王。
低调谦虚的瓜迪奥拉吼叫释放心情
巴萨,毫无争议的欧洲之王
瓜迪奥拉无疑是本赛季巴萨最大功臣
梅西终于拿到了属于自己的欧冠奖杯
亨利在巴萨获得满贯
本赛季巴萨以令人赏心悦目的华丽足球表演彻彻底底的征服了欧洲,征服了世界,皇马、里昂、拜仁、切尔西、曼联等豪门先后被巴萨的艺术足球击败,本场比赛结束后,我们不得不承认瓜迪奥拉已经开创了巴萨的梦三时代,而在这只梦三队中,最耀眼的明星莫过于本赛季获得欧冠最佳射手、最佳球员的梅西,另外本赛季梅西38个进球、18次助攻的完美数据也让我们有理由相信2009年绝对属于梅西,2009年欧洲金球和世界足球先生的荣誉迟早也会降临到这位巴萨新国王、阿根廷10号的身上的。
2008-09赛季仅仅是巴萨梦三的开始,相信梅西还继续会引领巴萨在未来若干年继续占据欧洲王者的宝座,持续书写着这位球王接班人的辉煌。现在让我们为巴萨高唱“we are the champions”吧! -
去年装修房子的时候,LP就“哭着喊着”要在客厅墙上做手绘,当时没能成行。这不LP终于把我们的高中同学从学校请了过来,专程给我们设计并实现手绘的“梦想”。说实话,我家那面墙之前的确显得很空,做一副手绘上去后,效果还不错。
图片是LP在网上搜到的并彩打出来作为参考。我们的美女同学花了近8个小时“奋笔疾画”,直到凌晨一点才勉强完成。这幅“顶天立地”的大图也真是让她受累不浅。
手绘全景
美女同学做图中 -
突然觉得最近自己对着电脑发呆的时间变长了,面对着笔记本屏幕,时常是大脑变得空白,不愿去想工作上的事情,上网也提不起兴趣,想写文章又不知从何下笔,旁边厚厚的一摞技术书籍也懒得去翻看,每天都觉得很累,晚饭后总想去用睡眠来麻醉自己,真怀疑自己是不是有了心理问题。回过头来再想想这应该不是一个偶然的现象,而是一种积蓄了很久的情绪的爆发。
自己工作时间也不算短了,按理说自己的发展曲线还算是不错的,但是近来我却发现现在的工作让我愈来愈提不起精神,以往充满热情活力我突然静寂了下来,难道是自己进入到了“工作疲劳期”了吗?不得而知。
程序员都是“成就感驱动的”,如果身为程序员的你从来都没有这种感觉的话,那说句不好听的,你多半是“入错行”了或是一直在“混日子”。现在我就在为这件事而头疼!因为现在的工作让我始终无法持续获得成就感,缺少了成就感对于软件开发行业的人来说是“致命的”。“混日子”可不是我要追求的生活。对于还算比较年轻的我来说,这显然是危险的,调整是亟需的。
我的青春谁做主 -- 我自己做主! -
计算机类图书"贵"就一个字,而且计算机领域知识更新快、新书迭出;程序员们为了跟上知识更新的步伐,不得不花上大把银子采购图书,久而久之,哪个程序员的家里没有几箱子书呢^_^。以前我买书的哲学也是非新书不买,但自从同事告诉我互动出版网有"二手书"可淘之后,我就渐渐喜欢上网上淘二手书了。
China-pub上所谓的"二手书",实际上和新书也没差多少,基本都在9成新,有些书可以说还是“崭新”的,但是这些二手书的价格却是出奇的低,一般网店新书都是7折以上,而这些二手书大多仅是四折。以前买一本书的价钱,现在基本上可以买上三本,这足以给你带来消费的冲动。不过目前只有三星以上的China-pub会员才有淘二手书的"权力";虽说我早早就在China-pub注册了会员,但因购书量少,至今还只是一星,所以网上淘书也只能通过同事那边的渠道。二手书中不乏好书,比如机械工业的"计算机科学丛书"系列、华章程序员书库系列等,关键在于“淘”。经常到China-pub的"二手书"区翻翻,说不定你就能找到你心仪已久的好书。
今天到手三本"二手书",分别是"计算理论导引"、"程序员密码学"和"Algorithms IN C, Graph algorithms",三本书加在一起才50元,要知道如果是新书的话,仅一本“Algorithms IN C”定价就50元。 -
2009-04-15
简说GLIBC strncpy实现 - [语言探索]
比较以下两组代码,你认为哪组运行的更快些呢?
Example1:
int n = 100;
int n4 = n >> 2;
int i = 0;
int a[100];
for (i = 0; i < n4 ;i += 4) {
a[i] = i;
a[i+1] = i+1;
a[i+2] = i+2;
a[i+3] = i+3;
}
Example2:
for (i = 0;i < 100;i++) {
a[i] = i;
}
其实这个问题在"代码大全2nd"中也有讨论,从"代码大全"中的统计结果来看,一般来说Example1更占有优势。我在solaris上做了测试,在未开优化的情况下:两者运行时间分别为2ms和6ms;在打开-O2优化后,两者均为1ms。这种通过减少循环次数的方法在GLIBC中也有体现,比如说strncpy的实现:
下面是strncpy的GLIBC源码:
char *
x_strncpy (s1, s2, n)
char *s1;
const char *s2;
size_t n;
{
reg_char c;
char *s = s1;
--s1;
if (n >= 4)
{
size_t n4 = n >> 2; /* n4 = n / 4, n4表示下面的循环执行的次数*/
for (;;)
{
c = *s2++;
*++s1 = c;
if (c == '\0')
break;
c = *s2++;
*++s1 = c;
if (c == '\0')
break;
c = *s2++;
*++s1 = c;
if (c == '\0')
break;
c = *s2++;
*++s1 = c;
if (c == '\0')
break;
if (--n4 == 0)
goto last_chars; /* 如果n = 10,s2 = "hello world",则两轮循环后,还有"尾巴"没有copy完,在last_chars处继续处理 */
}
n = n - (s1 - s) - 1; /* 还没有copy完n个字节,s2就到达末尾了,跳到zero_fill处继续为s1补零 */
if (n == 0)
return s;
goto zero_fill;
}
last_chars:
n &= 3; /* n = n & 3 结果 n <= 3,n即为上面循环过后"尾巴字符"的数量 */
if (n == 0)
return s;
do
{
c = *s2++;
*++s1 = c;
if (--n == 0)
return s;
} while (c != '\0');
zero_fill:
do
*++s1 = '\0';
while (--n > 0);
return s;
}
相比于strlen的实现,strncpy的实现更易理解。其字面上的逻辑就是每四个字节(n>>2)作为一组,每组逐个字节进行拷贝赋值,其内在目的则是减少循环次数,以获得性能的提升。要想知道为什么减少循环次数能提升性能的话,那就要深入到汇编层面去了,这里不再详述。另外还要一提的是GLIBC中的strncmp,strncat的实现也遵循着与上面同样的逻辑。 -
2009-04-11
GLIBC strlen源代码分析 - [语言探索]
直接操作C标准库提供的字符串操作函数是有一定风险的,稍有不慎就会导致内存问题。这周用业余时间写了一个小型的安全字符串操作库,但是测试之后才发现自己的实现有很大的性能缺陷。
在Solaris上初步做了一个简单的性能比对,以下是得到的性能数据(以strlen的数据为例):
当传入的字符串长度为10时,执行100w次:
strlen 执行时间是:32762毫秒
my_strlen执行时间是:491836毫秒
当传入的字符串长度为20时,执行100w次:
strlen 执行时间是:35075毫秒
my_strlen执行时间是:770397毫秒
很显然,标准库中strlen的消耗仅是my_strlen的十分之一不到,且其性能消耗随着字符串长度的增加并未有近线性的增加,而my_strlen则是变化明显。想必大家这时也能猜到my_strlen采用了传统的实现的方式,即采用逐个字节判断是否为'\0'方式,这也与测试出的现象相符。本着刨根问底的精神,我在网上找到了GNU提供的C标准库中strlen实现的源码,要看看GLIBC中strlen究竟采用何种技巧才达到了那么高的性能。说实话在性能优化这方面自己一直还处于比较初级的位置,这也将是自己将来努力的一个方向。
下载了全部GLIBC的代码包,这个包还真不小。在string子目录下找到strlen.c,这就是大多数UNIX平台、Linux平台以及绝大多数GNU软件使用的strlen的实现源码了。这份代码由Torbjorn Granlund(还实现了memcpy)编写,Jim Blandy和Dan Sahlin提供了帮助和注释。包括注释在内,GLIBC的strlen的代码足足有近130行,大致浏览一下, 没有怎么看懂,可耐下心来细致阅读,还是有些心得的。下面是strlen源码摘要版,后面我将针对这段代码写一些我的理解:
1 /* Return the length of the null-terminated string STR. Scan for
2 the null terminator quickly by testing four bytes at a time. */
3 size_t strlen (str) const char *str;
4 {
5 const char *char_ptr;
6 const unsigned long int *longword_ptr;
7 unsigned long int longword, magic_bits, himagic, lomagic;
8
9 /* Handle the first few characters by reading one character at a time.
10 Do this until CHAR_PTR is aligned on a longword boundary. */
11
12 for (char_ptr = str; ((unsigned long int) char_ptr
13 & (sizeof (longword) - 1)) != 0;
14 ++char_ptr)
15 if (*char_ptr == '\0')
16 return char_ptr - str;
17
18 /* All these elucidatory comments refer to 4-byte longwords,
19 but the theory applies equally well to 8-byte longwords. */
20
21 longword_ptr = (unsigned long int *) char_ptr;
22
23 himagic = 0x80808080L;
24 lomagic = 0x01010101L;
25
26 if (sizeof (longword) > 8)
27 abort ();
28
29 /* Instead of the traditional loop which tests each character,
30 we will test a longword at a time. The tricky part is testing
31 if *any of the four* bytes in the longword in question are zero. */
32
33 for (;;)
34 {
35 longword = *longword_ptr++;
36
37 if ( ((longword - lomagic) & himagic) != 0)
38 {
39 /* Which of the bytes was the zero? If none of them were, it was
40 a misfire; continue the search. */
41
42 const char *cp = (const char *) (longword_ptr - 1);
43
44 if (cp[0] == 0)
45 return cp - str;
46 if (cp[1] == 0)
47 return cp - str + 1;
48 if (cp[2] == 0)
49 return cp - str + 2;
50 if (cp[3] == 0)
51 return cp - str + 3;
52 if (sizeof (longword) > 4)
53 {
54 if (cp[4] == 0)
55 return cp - str + 4;
56 if (cp[5] == 0)
57 return cp - str + 5;
58 if (cp[6] == 0)
59 return cp - str + 6;
60 if (cp[7] == 0)
61 return cp - str + 7;
62 }
63 }
64 }
65 }
从这段代码开头作者的注释我们大致可以了解到该strlen实现的原理:就是通过每次测试四个字节来代替传统实现中每次测试一个字节的方法。知道这个原理了,那么还需要解决两个难题:
1) C标准库要求有很好的移植性,在绝大部分系统体系结构下都应该能正确运行。那么每次拿出4个字节比较(unsigned long int),就需要考虑内存对齐问题,传入的字符串的首字符地址可不一定在4对齐的地址上;
2) 如何对四个字节进行测试,找出其中某个字节为全0,这是个技巧问题。
12~21行的代码解决的就是第一个问题:
for (char_ptr = str; ((unsigned long int) char_ptr
& (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
/* All these elucidatory comments refer to 4-byte longwords,
but the theory applies equally well to 8-byte longwords. */
longword_ptr = (unsigned long int *) char_ptr;
作者通过一个for-loop找到传入字符串中第一个地址对齐到4的字符的地址,由于该地址已经对齐到4,所以最后一行那个强制转型是安全的。虽然可以通过圆整算式直接得到该对齐地址,但是考虑到这个区间可能存在的'\0',一个字符一个字符比对也是不可避免的。在很多严格对齐的架构上(比如SUN的SPARC平台),编译器一般会将字符串地址在编译器就放到对齐的地址上,这样一来,实际执行strlen时for-loop很少能执行一步。
第二个问题作者则是通过一个"带前提"的技巧来解决的。作者设定了两个掩码变量:
himagic = 0x80808080L;
lomagic = 0x01010101L;
并通过一个conditional expression完成了对四字节中全0字节的检测:((longword - lomagic) & himagic) != 0
我们将himagic和lomagic按bit展开:
himagic 1000 0000 1000 0000 1000 0000 1000 0000
lomagic 0000 0001 0000 0001 0000 0001 0000 0001
对于这样的代码,似乎没有什么理论可以遵循,需要在实践中去理解。起初我构造了一个不含全0字节的longword,比如:
longword 1000 0001 1000 0001 1000 0001 1000 0001,然后按照那个条件表达式计算后,居然也满足!=0的条件,是不是作者的逻辑有问题呢?后来转念一想,这种逻辑是有“前提条件”的。回顾一下strlen是做什么的,其输入参数是任意的么?当然不是。输入的字符串中每个字符的值都在[0, 127]的ascii码范围内,也就是说每个字节最高位的bit都是0,这样longword就应该是如下这个样子了:
longword 0xxx xxxx 0xxx xxxx 0xxx xxxx 0xxx xxxx
基于这样的前提我们考虑两种情况:
当longword中没有全0字节时,比如:
longword 0000 0001 0000 0001 0000 0001 0000 0001
这样在做完计算后,值为0,不满足条件。
当longword中有全零字节时,比如:
longword 0000 0000 0000 0001 0000 0001 0000 0001
这样在做完计算后,最高字节最高bit的值肯定为1,满足!=0条件,全0字节被检测出来。也就是说一旦有全0字节,在减去lomagic时势必会产生借位,全0的那个字节在减去lomagic后最高位bit肯定由0变1,这样与himagic一与,肯定不为0,就是这么检测出来的。
这一方法在64位平台依然适用,上面的代码摘要中省略了对64bit平台的特殊处理,为的是使代码逻辑更清晰,更易读。 -
2009-04-08
有关单元测试的“只言片语” - [技术前沿]











