• 当世界杯进入淘汰赛,少了一些浪费时间的球队,比赛真正的精彩起来。

    东道主德国闪击瑞典,仅仅十二分钟便完成了比赛,除了拉尔森如同其他球星级人物一样罚失点球算是一个看点,这场比赛的其余时间是德国队的射门练习。

    阿根廷凭借小组赛优异的表现被人们力挺为头号夺标热门,但他们遭遇同属技术流的墨西哥却一筹莫展,好在他们是一个天才云集的球队,关键时刻,天才闪光,罗德里格斯用美妙一击将阿根廷送入八强。

    一群一流球星,踢出如此难看的足球,英格兰有愧于强队的称号,他们与厄瓜多尔的差别尽在于他们拥有贝氏弧线。

    葡萄牙对荷兰,预期中的强强对决,不过,留在印象中的不是进球者,而是满天遍野的红黄牌,四红十六黄,这场比赛的主角是裁判。

    马特拉齐又恢复了他罪人的本色,在下半场刚开场便被请出赛场。意大利遭到了澳大利亚的围攻。就在人们以为希丁克又一次要踩着意大利成为英雄的时候,在比赛的最后一刻,左后卫格罗索被放到在禁区里。这一刻,压抑许久的意大利球迷,情绪如洪水一般宣泄出来,包括身为评论员的黄健翔。托蒂把点球踢入球门,也让意大利继续留在世界杯的舞台上。

    瑞士与乌克兰的不期而遇,没有精彩的比赛,却有着本届世界杯的第一场点球大战,也是相当诡异的一场点球大战。3:0的比分看上去不像是点球掠过的痕迹。舍甫琴科继续着球星踢不进点球的优良传统。

    加纳没有赢得比赛,却赢得了人们的尊重。他们压制住了强大的巴西,为我们带来了精彩的比赛。不过,3:0的比分却昭示着这支球队的稚嫩。

    西班牙倒在法国面前的那一刻,又一次证实了自己是一个扶不起的阿斗,而且越是开始表现好,越是需要人们担心。杀至八强的法国,将继本土世界杯之后,再一次站到巴西人面前。巴西人复仇的机会到了!

    期待八强战!

  • 我一向认为世界杯参赛队的扩招,纯粹是出于商业上的考虑,所以,以整体质量论,世界杯的精彩程度是无法与欧洲杯相提并论的。于是,世界杯小组赛阶段的比赛更像是真正的预选赛。

    21世纪初的足球似乎注定是个了混乱的开始:2000年奥运会,足球冠军归属了喀麦隆;2002世界杯的混乱是有目共睹的,因此,韩国足球创造了奇迹,即便最终闯入决赛的巴西和德国,其当年的实力也是无法让人完全信服的;混乱在2004年到达了顶点,那年的欧洲冠军杯,传统强队离奇出局,最终葡萄牙的波尔图登顶欧洲俱乐部之巅,接下来的欧洲杯上,希腊创造了神话。

    不过,足球世界最终还是要靠实力说话,在混乱之后,秩序开始逐渐恢复。

    在这届世界杯的小组赛上,传统强队悉数过关,甚至不少小组的形势在比赛刚刚进行两轮便已泾渭分明,以致于让人不得不呼唤冷门的出现。从结果上来看,整个小组赛阶段如果算得上冷门,也只有捷克队的出局。

    从1996年的惊艳欧洲杯开始,10年间,凭借内德维德等捷克足球黄金一代高举攻势足球大旗,在这个足球越发功利的今天,带给人们赏心悦目的表演,只可惜他们接连错过1998年和2002年两届世界杯,直到2006年,才有机会站到世界杯的舞台上。有种说法,黄金一代往往没有好的下场,比如葡萄牙,捷克足球在心不甘,情不愿的情况下,为这个观点添加了一个注脚。捷克队3:0轻取美国的登场让我以为那支心目中的捷克来了。在开赛不到2分钟被加纳打进一球时,我依然相信捷克会轻松过关,但当门将切赫成为了当场最佳时,捷克队就注定了离开世界杯的命运,他们要在最后一轮面对状态不错的意大利,而他们和意大利携手出线只存在理论上的机会,因为美国和加纳都有出线的机会,所以,他们势必大打出手。当习惯成为罪人的马特拉齐扮演了英雄的角色,捷克队开始了疯狂的反扑,但波拉克放倒托蒂的那一刻,捷克人的希望几乎就完全断送了。因扎吉在错失数个好机会后打进了自己世界杯之路上的第一个进球,捷克就此彻底告别了世界杯,因为那时加纳已经2:1领先于美国。随着终场哨的响起,内德维德跪倒在绿茵场的那一幕,让人不禁神伤。原来,悲情也可以如此美丽。

    “预选赛”的终结意味垃圾时间的结束,真正的世界杯要开始了!

  • 期望越高,失望往往越大,相反,当期望值降低的时候,往往会有惊喜。

    2006年6月9日,慕尼黑的安联球场注定是世界瞩目的焦点,尽管同一天在地球的另一个地方一年一度的NBA总决赛拉开了序幕,不过,物以稀为贵,四年一次的足球盛宴当然会获得更多的眼球。

    当了球迷许多年,观看的重大赛事也有一些。提起揭幕战,脑子里就会蹦出与乏味相关的几个词汇。因为初始的战役往往会因为双方的小心谨慎而让人昏昏欲睡。当世界杯经历韩日史无前例的混乱之后,2006德国世界杯有了一个全新的开始。

    德国,传统强队,最近几年的没落贵族,不过东道主的身份还是让它受到全世界球迷的关注。特殊的身份总会让东道主疯狂,最近的例子是2002年的韩国。哥斯达黎加,一个让中国球迷铭记的名字,上次他们的第一场比赛面对的是经历四十多年等待终于冲出亚洲的中国队,而这一次,因为揭幕战的原因,他们受到全世界球迷更多的关注。

    看德甲的时候,经常会有这样的现象:打开电视机的时候,比赛刚刚进行了十几分钟,却已经错过了好些进球。德国人把这个传统延续到了世界杯的赛场上。来自拜仁慕尼黑的左后卫拉姆在这片他熟悉的场地上用一个漂亮的变线,闪开防守球员,用右脚打出一条美妙的弧线,球直奔死角而去,击中立柱内侧打入网内,1:0,本届世界杯的第一个进球仅仅让人们等待了六分钟。不过,哥斯达黎加并没有让德国球迷的热情持续太长时间,第十二分钟,德国队造越位失败,万乔普得到了单独面对莱曼的机会,这位曾与孙继海共同效力曼城的前锋毫不留情,1:1。关键时刻需要的是英雄挺身而出,这次的英雄名叫克洛斯。上届世界杯我对这个头比脚好用的前锋就有深刻的印象,不过,更多的是因为他进球后的空翻。显然,四年之后,他的脚上功夫明显得到了加强。第十七分钟,就在我以为施魏因斯泰格的射门即将划门而出的时候,克洛斯及时的出现,将球捅进了球门,2:1。

    看自己特别喜欢的球队比赛,往往会有一种时间过得飞快的感觉,这一次是例外,虽然没有自己特别喜欢的感觉,但精彩的比赛依然调快了我对于时间的感觉。

    下半时的比赛,打进第一个球拉姆表现的异常活跃,多次在右路突破。终于,拉姆第六十一分钟的一次传球被哥斯达黎加的后卫送到埋伏在后点的克洛斯面前,德甲最佳射手当然不会错过这样的机会,将球顶向球门,不过门将的反应也极为迅速,将球扑出,只可惜,球再次回到了克洛斯面前,补射,3:1。下半场的进程与上半场相似,在德国队进球后不久,第七十二分钟,德国队再次失守于他们的造越位战术,万乔普又一次赶在了莱曼之前触到皮球,3:2。而且让造越位战术失败的也是同一个人,右后卫弗里德里希。比起左后卫拉姆的精彩表现,我们只能用惨不忍睹来形容他了。一个球的差距不足以让德国队和德国球迷完全放心,真正让他们吃下定心丸的是弗林斯。第八十八分钟,施魏因斯泰格左侧任意球横敲,弗林斯在距离球门近30米的地方,选择了不停球直接射门,这脚世界波直挂球门死角,4:2。一场精彩的比赛用一个精彩的进球画上了一个完美的句号。

    当揭幕战不再乏味,我们完全有理由期待一届以进攻为主旋律的精彩世界杯。

  • 2006-06-06

    MapReduce

    Tag:向下走

    MapReduce是Google的一项重要技术,它是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。至少现阶段而言,对许多开发人员来说,并行计算还是一个比较遥远的东西。MapReduce就是一种简化并行计算的编程模型,它让那些没有多少并行计算经验的开发人员也可以开发并行应用。在我看来,这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛。相对于现在普通的开发而言,并行计算需要更多的专业知识,有了MapReduce,并行计算就可以得到更广泛的应用。

    MapReduce的名字源于这个模型中的两项核心操作:Map和Reduce。也许熟悉Functional Programming的人见到这两个词会倍感亲切。简单的说来,Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个函数来指定,比如对[1, 2, 3, 4]进行乘2的映射就变成了[2, 4, 6, 8]。Reduce是对一组数据进行归约,这个归约的规则由一个函数指定,比如对[1, 2, 3, 4]进行求和的归约得到结果是10,而对它进行求积的归约结果是24。

    Map操作是独立的对每个元素进行操作,在FP中,操作是没有副作用的,换句话说,Map操作将产生一组全新的数据,而原来的数据保持不变。因此,它是高度并行的。Reduce操作虽然不如Map操作并行性那么好,但是它总会得到一个相对简单的结果,大规模运算也相对独立,因此也是比较适合并行的。

    无论是Map还是Reduce都是以另外的函数作为参数,在FP中,这样的函数被称为高阶函数(high-order function)。正是因为它们可以同其它函数相结合,所以,我们只要把Map和Reduce这两个高阶函数进行并行化处理,而无需面面俱到的把所有的函数全部考虑到。这样便形成了一个以Map和Reduce为基础的框架,具体应用相关代码写在用户代码中,之后与MapReduce结合获得并行处理的能力。当然,这么做的前提是按照这个框架的要求,把计算归结为Map和Reduce操作。为什么是Map和Reduce?从前面的内容我们可以看出,在Map过程中,我们将数据并行,也就是将数据分开,而Reduce则把分开的数据合到了一起,换句话说,Map是一个分的过程,Reduce则对应着合,这一分一合便在不知不觉中完成了计算。所以,站在计算的两端来看,与我们通常熟悉的串行计算没有任何差别,所有的复杂性都在中间隐藏了。

    所有这些并行化能力的获得都与FP有着密不可分的关系。事实上,不仅仅是MapReduce从FP中获得了灵感,其它一些并行编程模型也走上了同样的道路。FP中有很多的好东西,比如自动内存管理,比如动态类型。在遥远的年代里,因为机器性能的原因,它们无法得到广泛应用,当机器性能不再是瓶颈,这些东西便逐渐复活了。

    前面提到过,并行计算对于普通开发人员来说,有一个比较高的门槛。从前我们或许可以不理会并行计算,但是随着Intel开始将多核带入人们的日常生活,并行计算将会变得更加平民化,毕竟谁也不希望自己机器里面的多核只有一个在干活。现在的许多操作系统会把多核视为多处理器,但那也得有多任务才能在CPU处多分得一杯羹。对于服务器端应用来说,拥有多任务的能力是一个正常的现象。但对于很多桌面应用来说,一条道跑到黑的情况比较多见。而且,多任务并非为并行计算专门准备的,所以,控制粒度是很大的。如果需要更细粒度的并行计算,至少从表达能力上来说,多任务就有些麻烦了。

    并行计算进入日常开发的难度就在于编程模型,太复杂的东西会被人唾弃的,CORBA在这方面已经是个反面教材了。MapReduce已经为我们演示了一种可以接受的编程模型,接下来,变化还会有,Intel和AMD都在努力。不过,具体的进程得取决于多核CPU占领市场的进度。

  • 2006-06-01

    儿童节快乐!

    儿童节快乐!

    虽然从年龄上说,我早就和这个节日没什么关系了,但这并不妨碍我们抱着一颗愉快的心去体味这样一个日子。一大清早,我就收到了好几份儿童节祝福,于是,一天的工作有了一个快乐的开始。

    有一段时间,心情乱糟糟的,回想起来,那段时间不知道自己在干些什么。时间是个好东西,它可以让人抛开一切烦恼,加上骨子里的我是个乐天派,渐渐走出了心理的阴霾。这段时间心情一直很好,看什么都觉得格外顺心。

    最近的工作一直是与那块实验板子打交道,让我有了一种全新的体验。以前的开发都是跑在服务器上,那里好像拥有着无限的资源,所以,浪费也不会有人介意。记得有一次,因为对EJB误用,造成了每次取一条数据居然要访问六次数据库。就是这样的一个系统经过了多少轮的测试,没人认为那是一个问题,在大家的印象中,Java应用慢是天经地义的。所以,那个时候更多的是考虑架构,对于计算机本身却越离越远,这也是我感觉心里没底希望换个方向的原因之一。

    与这块板子打交道,事情就没那么幸福了。CPU慢,让我们不得不考虑如何有效的充分利用CPU;内存有限,让我们不得不仔细规划如何使用内存。于是,以前视而不见的许多内容又浮出水面。在我看来,做计算机的乐趣就是在于有限的资源。理论上,如果资源无限,那一切问题都好办,可惜的是,没有无限的资源,所以,我们要在有限资源的情况下完成任务,这就需要我们充分了解计算机系统,精心的设计算法去发挥计算的威力,这才是计学习计算机中最有趣的部分,也是人们发挥智慧的舞台。一些最为“计算机”的技术开始发挥作用:算法设计、计算机体系结构、并行计算……。这才应该是计算机专业的人与其它专业的人真正区别的地方。

    不要仅仅把有限的资源理解为嵌入式系统,即便像Google这样的大型网络应用也有资源不足的时候,因为它要提供更加舒适的用户体验,就要提供更快、更准确的查询,这时,它们的资源显得不足,所以,有了各种各样的技术:Google File System、MapReduce等等。

    愿所有的人都能够保持一颗快乐的童心!