技术思考

新一代的PHP (3) - 展望PHP6

本文有待完成(但不一定会完成,并且素材有待准备)。

主要观点:PHP已经相当完善了,对PHP6可以不必期望太多。

标签:

类别:

新一代的PHP (2) - 从PHP4迁移到PHP5

本文有待完成(但不一定会完成)。

主要观点:

1. 距离PHP5首次正式发布已经有16个月了,但目前PHP5的应用仍然有限,大量系统仍然基于PHP4。

2. PHP5已经足够成熟、可靠了(尤其是在昨天PHP v5.1.0发布后)。若不考虑兼容问题的话,新的应用系统可以完全抛弃PHP4了。

标签:

类别:

新一代的PHP (1) - PHP5的新功能评价

[前言] 本文是对PHP5新功能的介绍和评价,其中引用了Adam Trachtenberg对PHP的一些新特性的介绍,但Deminy并未详细阅读Adam Trachtenberg原文。

本文是deminy自己对于PHP5新功能的个人理解,而不是对Adam Trachtenberg原文的翻译。本文不会深入讨论细节。


相对于PHP4而言,PHP5有几点重要的变化和改进。按照Adam Trachtenberg的理解,PHP5有三点最重要的改进:更全面的面向对象编程功能、MySQL扩展支持库MySQLi、改进的XML支持;另外,PHP5还有以下4点重要改进:内嵌的文本型数据库SQLite、错误处理、SOAP支持、简化的枚举操作。

一、更全面的面向对象编程功能

这点的重要性是无需多讨论的。PHP3已经开始部分支持面向对象编程了,但不够成熟,在对类的操作上有不够简洁之处(例如在类创建和类销毁的时候,缺乏相应的好的机制),因此面向对象编程并不能算是PHP3的主要特性。

看上去,PHP5的面向对象功能似乎就是Java语言的翻版,实现了传统的Java里面几乎所有的面向对象编程的相关概念,以至于有人在说:是不是PHP5要被Sun公司收购了?还有人又回过头去炒一些老话题:面向对象的PHP能否击溃同样面向对象的JSP?

更优的面向对象编程能力将对PHP的发展起到非常强劲的推动作用。这体现在两点。

现有的大量的PHP系统如果从PHP4升级到PHP5后,在内在结构的设计上可以有相当的改善,并且可以更好地借用现有的一些很好的面向对象的设计模式。PHP的内涵进一步升华了,这是第一点。

当Java凌空出世的时候,有人做了些C2Java之类的软件,把C程序转换成Java程序,但是这些C2Java的软件基本上都不能很完善地工作。但可以想象的是,Java2PHP(把Java转换成PHP)这样的系统开发起来要容易的多。由于PHP的面向对象能力和Java极其相似,很多Java开发的系统可以轻松地移植、转换成PHP。我个人觉得,一些原来基于Java/JSP的系统将会转移到PHP来,而且这可能成为一个潮流。这是第二点。

二、MySQL扩展支持库MySQLi

这点也没有多少需要讨论的。当MySQL支持预处理等功能后,PHP自然也应该实现对应的功能。实际上,在数据库支持这块,MySQL要做的工作远比PHP要做的多得多。

三、改进的XML支持

这点很重要。此前给我的印象是,PHP对XML的支持始终不够强劲,对XML的处理能力比较差、不灵活,以至于好些人都避免用PHP的XML功能。如果翻阅网上大家发布的一些用PHP4写的XML相关类库,就会发现,很多人对XML操作的时候,都是使用其它方式实现的,而不是PHP里面的XML相关函数。我没有测试过PHP5对XML的支持,但相信PHP5会在这方面做得很好。

四、内嵌的文本型数据库SQLite

这个太棒了,是中小型PHP应用的福音(要知道,相当多的PHP系统都是中小型的)。我想很多PHP程序员都写过基于文本存储的应用程序(例如用文本方式保存的留言本),那种编程感觉是让人有些不爽的,尤其是在数据格式发生变更或者数据导入、导出的时候。

内嵌SQLite真是一个好想法!中小型系统由此不需要依赖MySQL或者其它数据库软件,也不必去使用脆弱的纯文本去存储数据,但是我们依然可以建造一个健壮的系统!我们开发的基于SQLite的系统未来可以轻松移植到其它数据库软件上,我们甚至可以用ADOdb去操作SQLite!

(注:如果deminy依然坚持不在deminy.net上使用MySQL之类的数据库软件的话,但至少,deminy肯定会使用SQLite来改写自己的blog、留言本等程序。2)

五、错误处理

我并没有详细阅读这方面的文档,但可以想象得到这个改进很棒。早期的PHP纵容错误的发生,并且放任错误的发生,虽然使得编程容易了点,但也导致了一些开发方面的问题。如果PHP能够在错误处理方面大大加强的话,无疑在两个方面会得到很重要的改进:一是开发过程中的错误跟踪和调试;二是系统实现(业务)过程中对于流程方面的错误处理将会更容易被合理的处理。

(对于这一点,deminy没有具体研究PHP5的新的错误处理机制,只是通过对Java和PHP相关的错误处理机制的对比而做了一些探讨,说得很泛泛。或有谬误。)

六、内置对SOAP的支持

这个很棒。我估计在PHP5之前,PHP里SOAP的实现,是需要通过第三方类库来实现的(也许PEAR里面也支持SOAP,但我不知道)。比较有名的第三方类库是NuSOAP,但我个人对NuSOAP在web上承受高压的性能不很放心(去看看NuSOAP的代码就知道了,长长的!)。

现在PHP5内置了对SOAP的支持。也许在PHP里用SOAP的人不是很多,但是对于那些在PHP中使用SOAP的人,PHP5无疑是很好的一个福音,至少,SOAP编程在PHP5里面变得明显的简单了(关于这一点可以在phpclasses.org下载SOAP相关的代码做研究)。

七、简化的枚举操作

这也是个很棒的实用型的东西,完全符合PHP的设计思想:简化编程。翻来覆去地看,PHP大体上就那么几块主要的东西:数据库操作、文件流读写、循环/枚举等。对枚举操作的高度简化是一个很棒的想法,这是PHP程序员很喜欢的一个新特性!

总结:哪些新特性更重要?

我个人觉得:更全面的面向对象编程功能是最重要的;错误处理的引入有必要,但错误处理机制执行效果如何,还有待评估;更好的MySQL扩展支持库MySQLi、改进的XML支持这两点对于较大型的PHP应用更有帮助;其它三点(内嵌的文本型数据库SQLite、内置对SOAP的支持和简化的枚举操作)则属于小敲小打类型的,但非常实用,尤其是内嵌SQLite!

因此,我对这些新特性的重要性评估如下:

1. 更全面的面向对象编程功能
2. 错误处理机制 (有待进一步评估)
3. MySQL扩展支持库MySQLi
3. 改进的XML支持
4. 内嵌的文本型数据库SQLite
5. 内置对SOAP的支持
5. 简化的枚举操作

[注1] 有妄言之处,欢迎指正。

[注2] 在PHP5的时代,用传统文本方式来编写留言本之类的系统,也许是应该遭到嘲笑的。因为我们有了SQLite!(虽然SQLite不是万能的)

[补充说明] 也许有人奇怪,PHP5正式推出了16个月后,deminy才来评价它,为什么?有三个原因。首先,相对于PHP4而言,PHP5拥有一些重大变化,因此在PHP5推出来后,大家很多时候还对它持观望态度,并没有具体应用它,也没有深入去研究它,deminy也是一样;其次,就现在而言,PHP5已经让大多数人开始感到它已经是成熟的技术了,deminy也开始考虑移植到PHP5了,因此开始对PHP5作了一些具体了解,并产生了一些快感(感到PHP5吻合了deminy的一些需求),并想把这些快感用文字的形式发泄出来;最后一点是,昨天PHP推出了具有重要改进的一个版本v5.1.0,这是导致deminy决定写这篇文字的直接动力:PHP程序员现在应该有足够的信心移植到一个新的、稳定的平台上去了!

标签:

类别:

"Ruby on Rails"技术观后感 (3)

从拨号上网时代开始过渡到DSL/ISDN等宽带上网时代的时候,我们意识到要要提高下载速度,这时候大多数人选择的是等待硬件提升或者新一代的高速网的出现。但有一个人,在现有技术的基础上,选择了走另外一条文件下载思路:基于点对点(p2p)的BT技术。依照同样的思路,还有一个人,选择了另外一种流媒体传输思路:CoolStreaming。他们的技术非常成功。

我们都在思考如何能够更好地提高开发效率,减少重复劳动,我们也知道各种框架模型:CS(客户端/服务器端)、BS(浏览器端/服务器端)、三层、MVC(模型-视图-控制)等,但我们没有能够从这些模型中把他们的共同点更好地抽象出来并且付诸实现。但有一个人,他做到了这一点,于是众人瞩目的"Ruby on Rails"出现了。

我们都拥有同样的资源,拥有类似的知识,但是,却有着不同的成果。

拥有思想比掌握某一门具体语言1重要,比掌握某一门具体技术更重要。一个人可能很精通几门编程语言,但他的水平也就仅仅限于编程,仅仅限于一个程序员的水平了。如果你只想着怎么更好地掌握和运用一门语言,你就永远只是一个程序员的水平。

语言其实是一件不重要的东西。

[注1] 这里的“语言”指编程语言,不是指自然语言。

类别:

"Ruby on Rails"技术观后感 (2)

看完"Ruby on Rails"后,Deminy产生了一个问题:怎样把"Ruby on Rails"的概念移植到PHP中,构建(所谓的)"PHP on Rails"呢?1

这个思路是可能行得通的。

首先,"Ruby on Rails"是基于Rails架构、用Ruby这样一个面向对象(Object Oriented)的编程语言实现的。PHP是一个面向过程(Procedure Oriented)的编程语言,但也是一个面向对象的编程语言。既然"Ruby on Rails"可行,"PHP on Rails"也应该是可行的。

其次,一项技术的竞争力和难点往往在于它的设计,而不在于它所依赖的编程语言。就像新产品最难的地方往往是设计,而不是投产(所以新产品设计出来后,马上就可能出现很多仿造的产品)。类似地,当"Ruby on Rails"被设计出来了,人们很容易把这项技术类似地推广到"Java on Rails"、"PHP on Rails"等。

基于上面两点分析,通过Internet搜索,可以发现如下五项主要的"PHP on Rails"技术可以考虑:BiscuitPHP on TRAXTaniPHPCakeSymfony 。暂无时间测试它们,无法评价。但目前似乎Biscuit相对要更成熟点。

[注1] 也许有人会问,既然已经有了"Ruby on Rails",干嘛还要研究"PHP on Rails"呢?原因有好些,其中一个合理的原因是:不愿意为了实施一项技术而要求所有相关技术人员多学一门无太大意义的语言。

[注2] 接前文“'Ruby on Rails'技术观后感 (1)”。

类别:

"Ruby on Rails"技术观后感 (1)

"Ruby on Rails"是近期(或者说今年)很热的一个web技术话题,简单的来说它就是一项web快速开发技术。它基于MVC (Model-View-Controller,模型-视图-控制)的架构进行设计,遵循两大设计理念:不重复工作 ("Don't Repeat Yourself")和墨守成规 ("Convention Over Configuration")。

晚上Deminy访问了"Ruby on Rails"官方网站,下载了几部视频教程,阅读了几份相关文档,大致了解了"Ruby on Rails"的思路和结构。看完之后的感觉是:震撼

以前(指2001年前后)在讯能(TOM)工作的时候,时时都有好些项目要做,但很多项目是一种很重复的行为:在web上实现对数据库的各种操作。当时,孙翯就和我说,要设计一个系统,可以(在相当程度上)自动完成很多这些重复的工作,提高开发效率2。我对此也深有同感,但要从需求各异的项目中把它们的共性高度抽象出来,然后基于此设计出一套可重复使用的架构,难度很高。

"Ruby on Rails"的思路和孙翯的想法是类似的,但做得极其出色。"Ruby on Rails"是一项高超的设计艺术。这种设计艺术,是目前(暂时)中国人在技术上想得到、但往往做不到的设计艺术。

[注1] 相关网址:

IBM网站对"Ruby on Rails"的介绍 (中文。IBM总是提供很完善的技术资料)

Wiki百科上对"Ruby on Rails"的介绍 (英文)

"Ruby on Rails"官方网站 (英文)


[注2] 后来孙翯为此做了一个框架,用在一些小型、简单项目的开发上。

[注3] 下接后文“'Ruby on Rails'技术观后感 (2)”。

类别:

新二次高潮的开始

1999/2000,互联网的第一次高潮到来,表现为互联网站不断涌现,无数互联网公司前赴后继。从技术的角度来讲,也许这个时代被叫作web 1.0的时代吧。

2005/2006,互联网的第二次高潮似乎也正在以一种相对平和点的姿态到来,伴随的是RSS、Blog、web 2.0等概念的兴盛,以及一些新技术的展现(包括象搜索引擎这样的旧技术的提升)。以微软和Google1为代表一些公司开始再次在互联网时代捉对厮杀起来。

所以,2006,将是一个好戏连台的一年。

每一次高潮都伴随着激动,被这个时代所激动。

Deminy希望伴随2006一起进入高潮,一起激动。

[注1] 这是一个轻舞飞扬的时代:善于轻舞,才能飞扬。Google就是个中高手,一个把轻舞飞扬演绎得登峰造极的高手。

[注2] 这也是为什么Deminy.net要升级的原因:在互联网时代,用5年前的技术和理念去维持一个网站,是落伍的表现。

类别:

举例说明如何在网上挖掘一个人的信息

[前言] 妹妹发来一份email,说看上了jiaoyou8的一个帅哥,不过我借给她的帐号过期了,导致她没办法直接联系帅哥,于是要我帮忙。

妹妹只告诉我该帅哥在jiaoyou8的ID。(当然,这个帅哥的性别我也是知道的。)deminy不愿无故再掏钱给jiaoyou8,于是,deminy开始在网上找帅哥的信息了……


第一步: 上jiaoyou8,看帅哥的资料

浏览帅哥在jiaoyou8上的个人介绍(如下图所示)。除了一张照片,帅哥没有留其它什么文字作品,不过可以从帅哥所留的个人基本信息里面知道帅哥在“美国, 佛罗里达, 其它地区”。



第二步:用搜索引擎搜帅哥的ID

我喜欢用Google。于是在Google输入相关关键字 (ID),得到下面的结果:



图片里的这些信息中,deminy对最下面的一行感兴趣:

www.lists.ufl.edu/......

ufl.edu是佛罗里达大学的域名,显然匹配第一步里面“佛罗里达”的信息。从搜索结果得知帅哥的email,并且知道帅哥在佛罗里达大学。

点击搜索结果里面的相关链接,尤其是点击最下面红方框里面的"More results from www.lists.ufl.edu" (从www.lists.ufl.edu显示更多的结果)的链接,浏览相关页面。根据帅哥所发布的一些买家具卖家具的帖子,我们得到该帅哥的两部电话号码 (352) 271-12xx 和 (919) 961-29xx,并且从帖子头部信息得知该帅哥英文名字叫"Leo Luo"。

第三步:搜索美国电话号码相关信息

用Google搜索关键字“search phone number”,得到一些可以反向查询电话号码网站的网址。有些网址搜索电话号码信息是需要付费的,但是anywho这个网站却不需要付费。

在anywho网站输入第二步中得到的两个电话号码,立马得到如下信息:



这样,我们甚至知道了帅哥的住址,我们进一步地还知道帅哥的中文名字叫"Luo, Junh.."。

第四步:搜索佛罗里达大学相关信息

进入佛罗里达大学网站,使用网站的目录搜索功能,输入第三步中得到的帅哥的名字后搜索,结果如下所示:



这样,我们就知道该帅哥的校内帐号,专业等等。

第五步:进一步的信息搜索

现在,经过10来分钟的搜索,我们已经知道了帅哥的中文名字、英文名字、单位、专业、家庭住址、电话号码、常用email等等信息。

还有很多搜索技巧可以进一步使用以获取帅哥更多的信息……不再列举。不想再多搜索了,因为信息已经足够了。

[注] Deminy以上每一步操作都是恰当的使用网络资源。有些朋友常误以为我会使“坏招”,而我想对此说明的是,每次我的做法都是恰当、深入的使用网络资源。之所以我能找到某些资源,是因为我比一般人更用心地去研究合理的“信息挖掘”技术。

类别:

Sam Tang个人网站观后感

刚刚在网上搜索“International PHP Magazine”的时候顺路发现并拜访了一个叫Sam Tang的blog。这是个香港的程序开发人员,大概23岁。他的blog大部分内容是关于技术研究的,感觉还行,是个对技术挺用心的人。

有意思的是他还有一个个人的开源程序网站,做得还挺像模像样的。于是去翻看了几个代码,不禁觉得真的是初生牛犊不怕虎:他发表的都是一些不怎么复杂的代码片断(大概也就是计算机系本科二年级学生课后作业的水平而已)。

不过他的优点是特别认真、严肃。他写了一个网站流量统计软件,编码格式比较规矩,而且软件还支持多国语言(这挺难得的)。不过虽然他努力把软件做得专业一点,但还是有不少问题的。比如,他的程序组织方面就不够好,程序代码和HTML混杂;另外,且不论他的数据库设计得如何,单就数据库查询而言,使用的就是一些初级的、缺乏效率的(甚至是比较糟糕的)查询方法。

感觉上是没受过好的技术培训,而且在数据库开发方面明显有些薄弱。

也许真的是初生牛犊不怕虎,他的网页居然声明用的是XHTML 1.0 Strict (最严格的一套XHTML标准),勇气很可嘉。要知道,Deminy当初升级自己的个人网站的时候,也曾认真考虑过是否采用这套标准,但最后还是放弃了,因为用这套标准会有一些比较麻烦的技术问题需要解决。由此也可以看出,他是一个有前途的小伙子,因为他很认真,也敢于尝试。

类别:

无标题 (0148)

这几天访问了一些讨论技术的个人网站和个人blog。有两点感想:

1. 打算少写讨论技术细节的东西,因为所有的技术都会过时。

2. 发现比我眼高手低的人很多。决定不再多访问国内的技术网站,尤其是个人讨论技术的网站。(基本上)不再和国内的陌生人讨论技术问题。

标签:

类别:

页面