Monthly Archives: November 2009

Scala之旅:抽象类型

Scala之旅:抽象类型 A Tour of Scala: Abstract Types 在Scala中,类通过值(构造函数参数)与类型(如果类是泛型)被参数化(parameterized)。为了保持一致性,值无法成为对象成员,只有拥有值的类型才能成为对象成员。成员的两种形态可以是具体的或抽象的。 以下范例展示了如何将一个延迟值以及一个抽象类型都定义为Buffer类的成员。 abstract class Buffer { type T val element: T } 抽象类型是一种没有精确地定义细节特性(identity)的类型。在以上范例中,我们仅仅知道每一个Buffer类的对象都有一个类型成员T,不过这个Buffer类的定义并没有告诉我们这个类型成员T明确对应了哪一种类型。与值定义相同,我们可以在子类中重写(override)类型定义。于是我们便可以通过收紧类型的界限(该界限描述了这个抽象类型实例化后可能会变成什么样子)来展示更多有关一个抽象类型的信息。 在下面这段程序中我们得到一个SeqBuffer类,这个类通过声明T类型必须为一个新的抽象类型U的子类型来实现仅仅储存缓冲区(buffer)中的序列(sequence)这一功能: abstract class SeqBuffer extends Buffer { type U type T <: Seq[U] def length = element.length } 有抽象类型成员的特征或类经常与匿名类实例化被一同使用。以下这个示例将展示这一点——我们用这个程序来处理引自整数list(列表)的序列缓冲: abstract … Continue reading

Posted in developer | Tagged | Leave a comment

Scala之旅:前言

Scala之旅 A Tour of Scala Scala是一个现代的多范式编程语言,可将通用的编程模式以一种简明、简练并且类型安全的方式表达。Scala语言平滑的继承了面向对象以及函数式语言的特性。 Scala是面向对象的 Scala是纯粹的面向对象语言,因为Scala中的每一个值(value)都是一个对象(object)。对象的类型(type)与行为(behaviour)通过类(classes)与特征(traits)来描述。类借由子类(subclassing)以及通过灵活的基于混入的类合成(mixin-based composition)机制代替多重继承(multiple inheritance)而实现了扩展。 Scala是函数式的 Scala同时也是函数式语言,因为每一个函数(function)都是一个值(value)。Scala提供了一个轻量级语法用于定义匿名函数(anonymous function)。它支持高阶函数(higher-order function),允许内嵌函数(nested function),并支持柯里化(currying)。Scala的case类以及其内置的模式匹配(pattern matching)相当于在很多函数式语言中使用的代数类型(algebraic type)。 更进一步,程序员可以利用Scala模式匹配的概念,在右侧忽略序列模式(right-ignoring sequence pattern)(译者注:此为Scala的正则表达式)的帮助下处理XML数据。从这个角度而言,序列推导式(sequence comprehensions)对于编写公式化查询非常有用。这些特性使得Scala成为开发诸如Web服务等应用的一个理想选择。 Scala是静态类型的 Scala具备表达类型系统(expressive type system),该系统以静态方式强制抽象化的使用以一种安全并且一致的形式进行。这个类型系统具体支持: 泛型类(generic classes) 型变注释(variance annotations) 类型继承结构的上限和下限 把内置类和抽象类型作为对象成员 复合类型(compound types) 指定类型的自我引用 视图 多态方法(polymorphic methods) 本地类型推断(local type interence)机制令程序员无需使用过剩的类型信息为程序做注解。综合而言,这些特性为编程抽象化的安全重用以及软件的类型安全扩展提供了强大的基础。 … Continue reading

Posted in developer | Tagged | Leave a comment

Web 2.0:猫只看到鱼的阅读时代

今天这篇博客其实在上一篇写完的时候就有打算了,只是由于思维没有组织清楚的关系一直没动笔。不过忽然觉得有时候想不清楚的东西写写说不定就清楚了,因此更新此篇,邀请诸位围观拍砖。 这次的主题仍然是”创新在别处”,只是换了一个主角:互联网上的阅读行为。 Web 2.0是一次互联网技术的革命,同时恐怕也是人类文明诞生以来最壮大的一次信息与知识传播的革命。抛去技术因素(如没有条件上网的人)以及语言因素(毕竟如果你不懂英文,那么英文网站的意义几乎可以忽略)不提,Web 2.0社会中人人皆可为作者,人人皆可为记者,甚至人人皆可为师。而与此同时,由于Web 2.0带来了恐怖的信息爆炸,最基本的读者需求也不再简单。 (图片来源:Web 2.0 heros) 今天这篇文章目的很简单,只是想探讨一下如今互联网社会上读者的需求要如何满足。 首先声明一下此处读者的概念:本文中的读者行为主要为浏览,并不包括为了解决一个特定问题而通过搜索引擎阅读文章的行为。而如果读者因为对某话题感兴趣而进行搜索,那么这样的搜索仍然属于读者行为。至于其因阅读而产生的互动行为,则不在本文讨论范畴之内(对于开始参与讨论的读者,我更愿意将其定义为参与者)。 为什么要这样定义呢?因为为了解决问题而求助搜索引擎其实无异于询问自己的老师或资深的同事,与阅读杂志报纸或书籍的行为并不一致。而由于兴趣而搜索的行为,却与传统意义上的兴趣阅读、扩展阅读是等价的,因此仍然属于读者行为。虽然Web 2.0信息革命的冲击力把原本仅仅是读者的人群变得不再仅仅是读者,然而阅读行为本身却无论怎样演变都是单纯的,甚至其目的也仍然单纯:获得资讯、学习或消遣。 读者的需求其实很简单:把我想看的给我看,同时也给我那些我可能会想看的。 听起来很简单,但其实无法实现:因为猫会喜欢吃鱼,甚至可能会仅仅喜欢吃金鱼;而狗却很难对这些水里的生物感兴趣。 (随手扒来的,可不是打广告) 平媒时代我们是怎样阅读综合类刊物的?可能会看一看大头条,首版的新闻大致略读一下;如果没什么特别的就直奔体育版面,或者财经版面,或者娱乐版面。看完感兴趣的版面后,其他版面可能匆匆瞄一眼,没啥特别的就Over。英国人可能会把这份报纸留在地铁里照顾后来人,不过咱们大多数呢,可能就直接进入废纸处理环节了。 所以就有了体育杂志,财经杂志,娱乐杂志,游戏杂志等等,专门照顾有相应需求的读者。不过仅仅是细化到这个程度还是不够的:A君可能仅仅是NBA某个球队的狂热粉丝,而B君可能会想要了解要如何参与一次攀岩运动或是空中滑翔的运动。越细致的刊物数量就越少,而鉴于一期的杂志绝无可能面面俱到(其中还包括版面有限的因素),那个时代的读者往往有收藏某一期期刊的癖好。彼时那种期盼与等待的心情虽然值得怀念,但客观而言这只是读者需求得不到满足的体现方式之一。 (不知道是哪里的杂志摊,借用下) 而从刊物内容,即读者阅读内容的来源而言,虽然我没做过平媒,但根据口耳相传以及一些猜想,也无外乎就是约稿、投稿外加自己出稿子,顶多再加上读者来信。约稿的质量取决于编辑的人脉情况,投稿的质量取决于刊物的实力,而自己出稿子的质量那就取决于这个编辑和记者班子的能力和功底了。然而一个圈子再小也都是天南地北的,一个编辑要想跟业内所有能写稿子的人搭上线似乎不太可能,因此一个刊物内容的来源在很大程度上是非常局限,甚至单调的。 至于阅读内容的传播就更加不消说了。如果一家刊物在街边的书亭里没卖过,也没有人上你家里来给你推销过,你的单位里没有订阅,你身边的家人和朋友也都没在你面前提起过,那么多半你是不会知道某个刊物的存在的——即使你可能会很喜欢它。 然后,我们忽然来到了Web 2.0时代。 既然大家看到这篇文章,那么多半是在我的博客,可能已经了解Web 2.0时 代的阅读是怎样的。我所说的不是每天看看新华网、新浪网、凤凰网新闻这样的阅读行为,因为这并没有解决上述平媒时代读者所遇到的大部分问题。 我们从后往前(传播、来源、长尾内容)来看Web 2.0如何解决了平媒时代的读者问题。比如说,我们的这位读者在某天听到有关Scala语言的谈论,想要深入了解一下Scala这个东东。于是他在谷歌上输入Scala,回车。然后在第一条,他看到了51CTO的Scala专题,点进去看看。当天的专题头条可能是这篇挺启发人的博文,这位读者觉得,嗯,挺有点意思。一看,来源是一个叫做Wang Zai Xiang的博客,再谷歌一下,第一条,Java爱好者,看起来挺像,点进去看看。咦,怎么打不开?不要紧,咱是Web 2.0时代的读者,怎么可能没有个Google Reader之类的阅读器。把王先生博客的地址一复制,扔到阅读器里,嘿!以后王先生再有博客更新,在阅读器里就都知道了。再开个过滤(貌似Google Reader没有,而其实我也不知道其他阅读器里有没有),只有Scala相关的文章才会在阅读器中更新,这样就OK了。回到专题,读者可能又看到一篇Scala快速入门之类的东东,AlanWu的博客?貌似也不错,也去看看,顺便订阅一下。然后在AlanWu的博客又看到Scala圈子,哇,貌似也有不少好东东,订阅一下。读者可能会顺路跑到Scala中文社区的Group上逛了一圈,看到:咦,貌似有位草原兄很厉害,推特账号是dcaoyuan,跟踪一下看看……如果这位读者没有被满屏英文吓跑,那么又可以找到不少有用的信息。这样折腾一下午,这位读者就基本上搜罗了中文互联网上大部分和Scala有关的文章来源,之后他需要做的就是每天看看这些他订阅的博客有没有更新的文章就好了,并且偶尔添加一些新的博客进去。 是的,个性化的订阅阅读,这才是Web 2.0时代的阅读方式。 (为什么呢?我本来想截Google Reader的) 当然,综合性资讯的摄取仍然是个必要,因此媒体在资讯方面仍然有其价值。然而在内容方面,这对于网络媒体而言无疑是一个大挑战,而固执的拒绝RSS(这里面还有导言输出和全文输出的区别,曾引发过点击量vs忠诚度等等一系列争论)并不能阻挡这个进程,反而会惹恼你的读者们。我们该怎么办呢? 不要忘了本文的主题:”创新在别处”。话说回来,传统的ctrl+c、ctrl+v式网站运作方式也算是某种手工作坊型的”创新在别处”的利用了,不过长远而言这个工种迟早是要被淘汰的,就好像手工业被自动化淘汰一样——况且它的质量还没有手工业那么细致。事实上无论媒体是否介入,这些”在别处的创新”都会持续不断,因为作者本身有着足够的动力。那么,作为网络编辑,要如何令这些”别处的创新”为我所用,同时又能够激励这些贡献者们获得更好的动力从而实现更好的创新,最终铺开一个”双赢”的平台呢? 嘛,不用说我不知道答案,就是我知道答案,也不会在这里瞎掰饬。让我们一起来努力探索吧!-3-

Posted in editor | Tagged | Leave a comment

开源精神与基于服务的网络

近年来随着互联网的极速发展与其影响力的快速扩张,直接导致了“软件即服务”,“平台即服务”,“基础设施即服务”等“XX即服务”的概念如雨后春笋般层出不穷。但其实仔细想一想,这个“即服务”的概念其实并不是什么新鲜玩意儿。甚至可以说,互联网这个事物本身就是一个“即服务”的概念,理由见下图: 当然了,互联网本身并不是个服务,只不过如果没有“服务”,那么如此庞大的互联网本身是毫无意义的,因为人们无法从中挑出他们所需要的东西。互联网进入人们的视野之初,人们可能会用电子邮件跟自己认识的人们交流些私人信息,可能会布置一个好看点的网页给朋友们显摆一下,这个网页可能还会有些动态效果。但是电脑更多是被用来处理文字,玩玩单机游戏,或者在内网查阅资料等等。那时的人们也许会因为意外的发现一个自己喜欢的网站而欣喜,然后将网站介绍给更多朋友,大家一起在一个小圈子里交流。 这都很好,但这并不是互联网。互联网上第一个重要的服务是搜索引擎。可以说是搜索引擎让互联网真正成为互联网。 这样就终于说到我这次计划的重点了:Google。诚然Google并不是第一个搜索引擎,但在今天的互联网上,Google和搜索几乎可以划等号。可能有人要问了,上面讲这些互联网的回顾、搜索引擎以及Google,和标题中的开源精神有什么关系?我要说,大有关系。大家不妨先读一读译言上的这篇文章:创新在别处。 “最多的创新是在别处发生的,他们需要把自己的精力集中起来选择外部世界的最佳创新,并找出正确的差异化特性,让自己的产品具有竞争力。” 能明白是怎么一回事么?创新在别处,即最好的主意大多来自于别人。因此,得到最多好主意的关键不在于给自己的脑子补营养,而在于将别人的好主意的价值充分挖掘出来为我所用(而这也意味着自己必须有一个能够得到别人的好主意的好主意)。这个理念是开源茁壮成长的主因,而对于一个搜索服务而言,则是基石。 Google一直深得这个理念的精髓。Google搜索那神奇的算法,一直在致力于让那些最好的(严格说来是最相关的)出现在前面。Google现在有着数不清的服务,每一个看起来都像是一个开源的项目,长久的贴着其Beta标签,吸引着无数开发者为着服务变得更好而贡献着他们的好主意。 自由度如此之大的合作互利,如果没有深入领会到“创新在别处”的理念,是不可能进行的。不过另一个现实是,开源公司的经营多半惨淡,某些拥抱开源的,结果也比较凄惨。说不定学着Google,最后发现自己变成了Sun…… 如果看到这里有人觉得有些“Google”可能会变成“Sun”,那么请抬头看看标题,看看第一段,再想想Google做的是什么,Sun做的是什么。 还不明白的,可以看看上个月的一次事件回顾。虽然角度不同,但其实是一回事。 说白了,这个互联网的年代,你要想做大,就去做服务。你要想长久发展,就去想办法利用外部的资源。那个靠卖天才牌OS光盘致富的年代已经成为传说了。 ———-完结————- 其实写这个主要是想推荐大家都去读一读《创新在别处》那篇文章,一定能够得到不少启发。该文中对开放源码的描述很有见地:“人组成了社区,社区互相交往,形成风俗和传统,这就发展了友谊,吸引人加入,最终,简而言之,创造了一种文化。”是的,开放源码是一个社区,一种文化;而社区中也有政治,也有公民权;而加入社区的开发者,在进行充分的学习和交流,贡献之后,最终“成为让人尊敬的长者”。 另外最近还有一件事,是和开源和服务都有关系的,就是推特中文圈的PHP开源版发布。推特中文圈的作者认为推特早已不是一个产品,而是一个服务了(在这方面,推特之于微博,几乎无异于Google之于搜索)。事实上,推特在国外的火热在本质上与Google颇有相似之处,而且其开放API的策略也令其充分享受到了“创新在别处”的好处,说它是服务,的确不为过。值得学习啊!

Posted in open | Tagged , | Leave a comment

实在太可爱了-v-

实在太可爱了,忍不住想要贴过来…… 原本有十张,这张最可爱: 眉毛,眼睛,耳朵,鼻子,嘴巴,无一不传神啊~ 鄙人近日很少发花痴,不过这次实在是忍不住了-。-

Posted in entertainment | Tagged | Leave a comment