2010年9月7日星期二

去年以来出版的REST新书汇总

从去年开始,REST架构设计和开发方面的图书数量出现了爆发的趋势。以下对这方面的图书做一个汇总:

已经出版的:
Effective REST Services via .NET: For .NET Framework 3.5
RESTful Java Web Services
RESTful Java with Jax-RS
RESTful Web Services Cookbook: Solutions for Improving Scalability and Simplicity

即将出版的:
REST in Practice: Hypermedia and Systems Architecture
RESTful Web Services in Java
SOA with REST
Restlet in Action
Professional Restful Services Using .NET 4

书中涉及到REST的:
Java Web Services: Up and Running
Java SOA Cookbook
Service-Oriented Design with Ruby and Rails

2010年8月30日星期一

《Scala程序设计》书评

Java语言早已进入了它的成熟期,多年来长期占据世界第一大编程语言的宝座。Java语言几乎能够做任何类型的软件开发,从底层的操作系统、数据库到高层的Web应用、桌面应用、以及移动智能设备的应用(JavaME、Android)。

然而Java语言的开发效率令人非常失望。与C#、Python、Ruby、JavaScript、PHP等语言相比,Java语言在开发效率方面没有任何优势。用不同的语言实现完全相同的功能,Java代码往往是最冗长的。有人比喻说用Java编程就像是在推绳子,有力使不出来,这也是我在用Java编程多年之后的感觉。按理说,一种兵器(编程语言)在你使用了很多年之后,应该已经达到了“心手合一、指哪打哪”的境界。很可惜,Java语言没有带给我这种感觉。

很显然,Java为广泛的适用场合(成为一种全能的编程语言)做出了很多妥协,因而付出了巨大代价。其实企图使用一种编程语言做任何类型的软件开发,最终只会导致开发效率的低下。混合语言编程的时代已经到来了,应该为不同类型的软件开发使用最适合的编程语言。例如:做Web开发Ruby是更好的选择,PHP在这个领域也是更好的选择。对于一个大流量的Web应用,以及很多B/S结构的企业应用来说,使用多种编程语言是很合理的选择。例如:前端的Web开发使用Ruby+JavaScript,后端的基础架构开发使用Java+Scala。

至少在Web开发领域,Java已经退居二线了。Java其实更适合做后端的基础架构开发,例如:实现一个SOA的基础架构。即使在后端基础架构开发方面,也需要一种开发效率更高,同时性能优越,还能够与Java无缝集成的编程语言。Scala语言应运而生,恰好填补了这个巨大的空白。得益于更加纯粹的面向对象和函数式编程相结合,Scala语言的开发效率远远高于Java。尤其是在并发编程领域,Scala的并发编程模型要简洁的多,更加容易掌握,在开发效率和运行效率两方面都比Java强的多。经过了几年的发展,Scala语言现在已经足够强大,进入了实用阶段。Scala在现实世界中已经有了很多引人注目的应用,例如:著名的微博网站Twitter的后端基础架构就是基于Scala开发的。

《Scala程序设计:Java虚拟机多核编程实战》这本书是面向Java开发者的最好的Scala入门书。如果一位Java开发者打算抬起头来,看看Java语言之外的广大世界,那么Scala语言就是您的首选。我郑重推荐国内的每一位Java开发者,都来认真读一下这本书。尤其是国内的每一位Java架构师,这本书将会为您带来非凡的阅读体验和巨大的收益。

2010年8月19日星期四

今年出版的Blender新书汇总

已经出版的:
3D for iPhone Apps with Blender and SIO2: Your Guide to Creating 3D Games and More with Open-Source Software

Blender 2.49 Scripting

Blender Studio Projects: Digital Movie-Making

Blender Foundations: The Essential Guide to Learning Blender 2.6

Blender For Dummies 第2版

Beginning Blender: Open Source 3D Modeling, Animation, and Game Design

即将出版的:
Mastering Blender Game Engine

Character Development in Blender 2.6

2009年5月9日星期六

InfoQ一年半前的老文章 对Adobe Flex的十大误解
  1. 为了运行Flex应用程序用户需要安装新东西。
  2. Flash Player是100%私有的。
  3. Flash是为设计者、视频准备的,而且让人讨厌。
  4. Flex不是为企业/商业应用准备的。
  5. Flex太贵。
  6. Flex的应用程序需要专用服务器。
  7. Flex很难学。
  8. 使用Flex,我需要重建我的整个应用。
  9. Flex打破了常规的浏览习惯,象后退按钮。
  10. Flex能做到的,Ajax也能做到。
我很同意这样的说法:
Flex RIA和Ajax不是非此即彼的关系。像Google Finance网站就展示了如何同时使用Flex和Ajax。Ajax非常适合以内容为中心的应用,而Flex则适合于互动,媒体和数据为中心的应用。如果你的应用介于这两者之间,那么你可以用Flex Ajax Bridge来结合这两种技术。

使用Flex是政治上正确的选择

在InfoQ的这篇访谈 Bruce Eckel谈Python、Java、Flex及RIA 中,Bruce Eckel说:
我是个Flex迷,因为所有平台都支持Flash player。Silverlight宣称支持Linux,但我不知道其支持力度如何。毕竟过去微软对于非Windows平台的支持并不尽如人意。Mac 平台上最新版的Office尚不能使用Windows系统上的宏,而宏对于我来说是非常重要的,这也导致了很多问题,不仅仅是我,其他人也一样。尽管微软有着这样那样的借口,但谁管你呢?你只能任人摆布。如果微软宣布不再支持Mac版的Silverlight,那他们肯定也会有借口。如果Linux对其的威胁变大时,他们也一定有理由说你无法在Linux上使用Silverlight了,谁管你?如果你过于依赖他的话,我只能说霉运离你不远了。我注意到 Netflix使用了Silverlight进行视频点播,不过到现在为止我还无法在Mac上的Firefox中使用该功能——可能过不久该功能就会出现,但如果不出现呢?Netflix会丧失大量用户,同时他们可能已经丧失一些Linux用户了。Adobe也是一家大公司,他们也可以变来变去,但他们却支持所有的平台,而微软却有一个操作系统要推销。Silverlight的设计很棒,他们从Flex上也汲取了不少精华。我觉得有竞争是好事,这样会刺激Adobe更加努力。但如果你问我更喜欢Flex还是Silverlight的话,我会说“放着好好的东西不用,为什么要冒险使用微软的东西呢?”
我很赞同Bruce的观点,这就是我认为Silverlight不可能取代Flex的原因。我们完全不谈技术,而要谈谈政治问题:
  • 如果在服务器端使用的是Windows+.NET平台,客户端只考虑Windows/IE,那么使用Silverlight是政治上正确的选择。
  • 如果在服务器端使用的是Linux+Java/Ruby/Python/PHP等等平台,客户端需要考虑Windows/IE/Firefox + Mac OS/Safari + Linux/Firefox、,那么使用Flex是政治上正确的选择。

2009年4月4日星期六

《时间简史》——一本成年人的最佳科普读物

霍金教授所著的《时间简史》是一本公认的最佳科普读物,自1988问世以来,已经影响了一代人树立正确的宇宙观念。

很遗憾,我是在最近才读完了这本书。这本书买了10年,却束之高阁。

由于父亲学物理学的原因,我在小的时候读过很多物理学方面的科普读物和传记文学,加上大学时代学习过《力学》、《电磁学》、《原子物理学》等物理学课程,读《时间简史》并不感到非常困难。

20世纪上半叶,在物理学领域,对于物质在宏观和微观两个尺度上的研究都取得了巨大的突破。20世纪下半叶的绝大多数工程和技术方面的发明创造,例如人造卫星、计算机、纳米技术等等,都与20世纪上半叶的物理学大发展是分不开的。

宏观尺度:狭义相对论、广义相对论
微观尺度:量子力学

尽管取得了这么巨大的成就,物理学家们却并不满意。原因是在宏观和微观尺度上的物理学理论,看起来存在着很多不一致的方面,无法统一在一个更加全面的理论中。很多物理学家,包括爱因斯坦在内都尝试将这两个尺度的物理学理论统一起来,但是这个工作非常艰巨,至今到了21世纪还没有完全完成。

《时间简史》这本书其实并不完全是关于时间的,除了帮助人们更清晰的理解时间的本质究竟是什么之外,它还是20世纪物理学成就的一个综述。霍金教授在书中将广义相对论和量子力学完美地结合起来,预言了黑洞的存在,并且描述了黑洞的物理学特征。

霍金教授也并没有能够将宏观和微观两个尺度的物理学理论完全统一起来,但是他指出了将这两个尺度的物理学理论统一起来的方向。霍金之前的物理学家也在统一理论方面做了大量的研究,但是大多数人,甚至是爱因斯坦都找错了方向。在霍金及其后的物理学家的共同努力下,在21世纪我们的有生之年,找到一个统一的物理学理论是完全有可能的。

这本书带给我的主要启示有以下几个方面:

1. 上帝对于宇宙的起源没有贡献

从牛顿到爱因斯坦,虽然物理学理论取得了巨大的发展,但是他们都无法解释宇宙的起源和终结的问题。

遵循牛顿的万有引力定律,宇宙不可能一直保持稳定的状态。由于引力的作用,宇宙必然有一天会发生坍缩。然而天文学观测表明,宇宙在所有方向上都在膨胀。牛顿认为是上帝提供了“第一推动力”,使得宇宙呈现为现在这样的状态。

遵循爱因斯坦的广义相对论,宇宙在起源时必须有一个表面积为零的奇点,宇宙是在一次大爆炸中产生的。在奇点处,所有的物理学理论均失效,似乎那里正是属于上帝私人掌管的禁区。

牛顿和爱因斯坦的理论无法对宇宙起源问题给出理想的解答,这给罗马天主教会势力的卷土重来带来了机会。与400年前教会禁锢伽利略不同,他们现在的做法要开明多了。教会主动认可爱因斯坦的理论,并且将奇点和大爆炸归功于上帝的杰作。

然而爱因斯坦忽略了量子力学的发展(虽然他对量子力学的诞生曾经起过很大作用)。爱因斯坦讨厌一切不确定性,因此他不接受量子力学的测不准原理。爱因斯坦的经典名言是:“上帝不会掷骰子!”

霍金将量子力学与广义相对论相结合,创造了新的量子引力论。他发现,在奇点处,物理学理论仍然成立,那就是量子引力论。

在牛顿和爱因斯坦的理论所描述的宇宙中,上帝仍然享有至高无上的地位。然而,在霍金的理论所描述的宇宙中,上帝已经几乎完全没有了位置。宇宙在大爆炸前的奇点处是一个有限但无边界的空间,有点类似于地球的表面。宇宙无所谓起源也无所谓终结,它就是客观存在!而时间只是构成宇宙的一维,我们生活在包括时间在内的四维空间内。时间并不是均匀分布的,而是随着能量(速度、引力、质量大小)的不同而不同。在高速飞行的宇宙飞船中的时钟要比在地面上的时钟走的慢。如果乘坐接近光速的宇宙飞船去旅行,回到地球后“山中方一日,世上已百年”的情况完全有可能发生。

宇宙永远存在,它以固定的规律来发展变化。即使在大爆炸前的奇点或者局部的奇点(例如黑洞)处,量子引力论仍然起作用。并不需要由谁来提供第一推动力,并且精确地设置初始状态,以确保在大爆炸100亿年之后,宇宙中能够产生人类这样有能力思考宇宙起源的复杂生物。简而言之,没有上帝什么事儿了,上帝他老人家可以歇着了。

对于教会来说,这显然不是一个好消息。

2. 宇宙总的能量为零

按照狭义相对论的公式E=mc^2,能量和质量是可以相互转换的。

能量是由各种物质粒子携带的,每一种物质粒子都有反粒子存在,例如质子-反质子,电子-正电子。引力场其实是一种负能量,因此它也有一种携带负能量的物质粒子-引力子。引力场的负能量与由物质的质量所携带的正能量是相等的。宇宙中物质总的正能量越大,引力场总的负能量也越大,因此在整个宇宙中总的能量为零。正能量由各种大尺度的物质和正能量粒子携带,而负能量则由引力场和负能量粒子携带。

这跟老子的“无中生有”的思想是不是非常接近?

3. 热力学第二定律总是成立的

热力学第二定律说:一个孤立系统的熵总是增加的,并且将两个系统连接在一起时,其合并系统的熵大于所有单独系统熵的总和。

甚至在局部的奇点-黑洞中,热力学第二定律仍然是成立的。
黑洞其实并不是绝对黑的(贪得无厌,一毛不拔),在黑洞的边界(光线无法逃逸的那个区域的边界)之外很接近的空间中,会不断成对产生携带正能量的粒子和携带负能量的粒子,正能粒子作为辐射发射到宇宙中,而负能粒子则落入到黑洞中。正能粒子辐射使得宇宙的熵增大,而黑洞本身的熵则减少,这与夏天开空调有些相似。质量越小的黑洞,辐射越大(从外面观测即温度越高)。辐射会带走黑洞的能量(也就是它的质量),最终导致黑洞在一次巨大的爆炸中消失殆尽。听起来这很像宇宙起源时的那次大爆炸,事实上黑洞中的物理学理论和宇宙大爆炸前的奇点处的物理学理论基本上是一致的,即量子引力论,这就是天文学家热衷于研究黑洞的原因。

我对在宇宙的膨胀期,热力学第二定律成立没有疑问。但是在宇宙的坍缩期,热力学第二定律是否仍然成立呢?我还不是很确信。如果宇宙存在一个坍缩期,最终会回到下一个奇点和下一次大爆炸,那么在奇点处的熵显然要更小。
我的判断是,热力学第二定律是与时间的方向紧密相连的,宇宙在膨胀期和坍缩期,时间的方向是相反的。沿着膨胀期的时间方向,熵是增加的。而沿着坍缩期的时间方向,熵是减少的。这个判断是否正确,我还需要进一步的学习。

4. 引入了虚时间的概念

我们所理解的时间的度量单位都是实数,而且是不能翻转的。在宇宙的膨胀期和坍缩期,时间的方向是相反的,而且在这两个时期,物理学定律是不同的。为了将物理学定律统一起来,需要引入虚时间的概念。引入了虚时间之后,时间这一维与其他的维就几乎没有什么区别了。

对于虚时间是什么概念,目前我还不是很理解,还需要进一步的学习。

2008年9月20日星期六

JavaScript的优点和缺点——Java专家的观点

Sun Lab的两位Java专家去年10月写了一篇论文,对于JavaScript语言的优点和缺点进行深入的分析:
Using JavaScript as a Real Programming Language

这篇论文虽然是Java专家的观点,但是非常客观公正,喜爱JavaScript的朋友可以仔细读一下。作者带领的团队编写了大量的JavaScript代码,对JavaScript进行了深入研究之后才写出了这篇论文,与一些人仅仅凭借表面印象所做的肤浅评论和判断完全不同。这篇论文对于理解目前浏览器中JavaScript技术的发展动向很有帮助。

论文的两位作者都是非常资深的技术专家:
Tommi Mikkonen博士是知名的软件工程专家,《Programming Mobile Devices: An Introduction for Practitioners》一书的作者。
Antero Taivalsaari博士是JavaME的核心设计者,曾两次荣获Sun的Chairman大奖。在JavaME这个名词出现之前,是KJava和KVM,Taivalsaari博士正是KVM的设计者。