2008年4月22日星期二

Java在Web开发语言上败给了PHP

  PHP的主要语言开发者之一、Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言。他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java已经输掉了Web开发语言的战争,PHP是事实上的标准和胜利者。

  Gutmans的这篇文章在技术界引发了强烈争议,很对人对此有不同的意见,我在这里就阐述一下我对PHP和Java两种语言的看法。

  我早先曾经在《Perl、PHP、ASP、JSP技术比较》一文中对比过PHP和Java的异同,简而言之,PHP是一种解释执行的脚本语言,语法和C语言类似,易学易用,不懂电脑的非专业人员稍经学习也能使用PHP.而Java要先编译成Class文件,然后在Java虚拟机上执行,Java开发需要熟悉Java语法以及一些核心的架构,从而实现一种可复用的、跨平台的软件,Java比PHP要难学的多。

  实际上,从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而JAVA可以实现多层架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP.实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择(微软.NET不支持跨平台),但是在于Web网站应用开发来讲,Java却面临着被PHP边缘化的危险,几乎所有的虚拟主机都支持PHP+MySQL,而支持Java的却少之又少,在资源上,网上有不计其数的PHP资源,很多著名的大型网站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java网站却寥寥无几,这又是什么原因呢?

  Java的理念是“一次编写,到处运行”,Java在应用框架底下的架构是无与伦比的,远胜过其他任何语言,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好。而PHP很容易自学,让热备能快速简洁地编写代码,适合于快速开发,中小型应用系统,开发成本低。在调试、发布上,PHP也较Java简单。

  理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持PHP的虚拟主机多如牛毛,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。

  因此,PHP在Web网站开发语言的战争中已经慢慢将Java抛在了后面,Java要想在Web网站开发上奋起直追,的确应该多听听Andi Gutmans的意见,彻底改变一下思路才行,否则两者的差距只能是越来越远。

  另外,虽然在国际上LAMP(Linux+Apache+Mysql+Php)架构已经占领了统治地位,但是在中国国内还有一个怪胎,就是基于微软的Windows Server+IIS+SqlServer+ASP/ASP.NET的架构,从理论上说,微软的这一套架构也能实现不错的性能,只可惜Windows和SqlServer价格不菲,整个架构在性能上比起LAMP不仅没有什么优势,反而还有不少劣势,因此微软的这一套家伙在国际市场上吃不开。而国内使用微软盗版则可以忽略成本,而ASP的易学易用性不逊于PHP,甚至连IT外行都能够使用,因此在国内也有不小的市场。但是随着中国在保护知识产权方面的日趋完善,免费的LAMP依旧是未来的趋势。

2008年4月21日星期一

通过手机免费上传图片到Flickr

  现在的手机大多数都能拍摄出不错的照片,人们外出旅游使用手机可以方便的随时随地拍摄照片,而且很多都能拍出高质量的照片。所以通过手机将拍摄的照片上传到网络相册是一个很有用的功能。今天我要是能早点将照片上传到Flickr,也不至于被人删除掉找不到了。

  中国移动给出的上传方案通常是通过彩信(MMS)的方式上传,彩信是要收费的,上传大量照片则费用会比较高,对于已经开通了GPRS功能的中国移动用户,其实可以通过另外的方法上传图片。

  对于Flickr来说,目前有两个主要的手机上传图片的方法:

  1、通过客户端软件上传,例如ShoZu这个软件,可以支持用户通过手机上传图片到Flickr。不过这个软件支持的手机种类有限。

  2、通过Flickr的手机版上传,通过手机访问http://m.flickr.com,登录之后就可以在里面上传照片了,上传之后还可以设置照片是公开还是私密的。这种方法支持的手机较多,只要手机支持Java,都可以使用这种方法上传。不足之处是对于有的手机只能访问某几个指定目录。

  除了Flickr之外,国内的Yupoo和巴巴变都支持手机上传照片。

  最后需要注意,这种上传的方法虽然是免费的,但是GPRS包月的流量是有限制的,上传时候请注意一下流量是否足够,以免付出额外的流量费用。

2008年4月20日星期日

国外虚拟主机选购指南

  国外的虚拟主机和国内的相比有不少的优点,例如不用去备案,价格相对低廉,稳定性也好,虽然从国内访问速度稍微慢一些,但的确是一个低成本创建一个网站的好方案。国外的空间基本上是基于Linux+Apache+MySQL+Php的,由于PHP已经事实上统治了网站设计语言的标准,因此国内人也基本可以放弃继续使用ASP了。

  然而,国外的虚拟主机依然是鱼龙混杂,甚至有一些很著名的虚拟主机供应商也在搞猫腻,我购买国外虚拟主机已经有很长一段时间了,我的月光博客英文网站在使用国外虚拟主机的这段时间也遇到了种种以前没想到的问题,因此我就再次总结一些选购和识别国外优秀虚拟主机的方法,供大家参考。

  虚拟主机的原理,就是把一台真正的主机分成许多“ 虚拟”的主机,它们之间完全独立,使得多个用户共享一台真实主机的资源,节省用户的硬件费用和流量费用。通常虚拟主机的价格都是每月5至10美元左右,非常低廉,虚拟主机商为了从有限的服务器和网络资源中获得最大的利益,那么就必须要侵害了用户的利益,过度销售(Overselling)虚拟主机,因此,只有识别出过度销售(Overselling)的虚拟主机,才能选择到一个稳定而优秀的虚拟主机。

  如何识别出过度销售(Overselling)的虚拟主机,我这里总结了几个要点:

  容量与流量参数的诡计

  绝大多Overselling的虚拟主机商都在玩一个数字游戏,每月不到10美元,就可以购买超大容量和流量的主机,其容量和流量参数往往比租用一台服务器的流量还要大,举个例子,使用独立服务器的月光博客目前的月流量只有450G,而几乎所有Overselling的虚拟主机都声称能提供每月超过1000G的流量,当然这个承诺是永远无法兑现的,如果你真有一个每月1000G流量的网站,那么绝对不能考虑这些Overselling的虚拟主机,因为在你还没有使用到百分之一左右的流量时,通常这些虚拟主机商都会以使用了过多资源为由而终止你的服务,受骗的用户实际上并没有认识到巨大的空间和流量与使用的CPU和内存资源是两回事,如果你使用了很多的流量,主机商不会以使用过多流量而是以使用超额CPU和内存资源为由终止服务。

  按年支付的风险

  几乎所有的Overselling的虚拟主机的付款方式都是以按年支付为准则的。要么他们只支持按年付款,不支持按月付款,或者按月付款的价格和按年付款的价格相差巨大,迫使用户选择按年支付。为什么这些主机商要这么做呢?因为他们的限制CPU和内存的方式肯定会引起用户对购买的虚拟主机不满意,用户肯定会终止付费重新选择主机商。如果按月支付,用户发现这个主机速度很慢或者服务不好,那下个月就可以中止支付而去选择其他主机,对于个人来说风险较小而没有什么损失。如果是按年付费通常将会得不到退款,损失了一年的费用。虚拟主机商通过这种方法迫使用户多支出了一笔费用,赚取了黑心钱。而通常不搞Overselling的正规而自信的主机商都乐于提供按月支付方式,而且按月支付的价格和按年支付不会相差很大。

  推荐回扣奖励

  搞Overselling的虚拟主机为了扩大用户群,会采用回扣奖励或现金返还的形式进行促销,即用户推荐一个新的主机注册用户,推荐人可以得到金额奖励或者回扣,类似于传销的形式。搞这类活动的基本上都属于Overselling的虚拟主机。他们确实通过这种形式获得了大量用户,但其主机质量却会随着用户的增加而降低。

  可绑定的域名数量

  搞Overselling的虚拟主机提供几乎不受限制的域名绑定,一个用户可以在虚拟主机上绑定无数的网站,很多人喜欢这种功能。但是我们要知道,一台服务器的资源是有限的,绑定的网站越多,耗费的资源就越大,这样的结果是网站的响应速度和稳定性就降低,经常出现500错误,例如我购买的某个虚拟主机,上面竟然绑定了一千多个FTP用户,这样的虚拟主机能好用吗?因此,正规的虚拟主机商提供1、2个域名绑定其实就能保证大多数用户的利益了。

  以上就是我总结的一些识别出过度销售(Overselling)的虚拟主机的技巧,如果你使用的WordPress或者论坛有可能达到每天1万IP访问,那么最好不要选择Overseelling的虚拟主机,因为他们的CPU限制会导致网站访问极不稳定。当然,如果你有很多小网站,或者网站全部是HTML格式,很少使用PHP和MySQL,那也可以选择Overselling的虚拟主机,因为纯HTML的页面消耗CPU很小,不会产生很大负荷。否则的话,最好选择限制流量而非限制CPU的虚拟主机。

  我建议的非Overselling的虚拟主机,通常价格为5到10美元,限制流量为每月100G以下,绑定1-2个域名。这种参数的虚拟主机通常是不会限制CPU的,适合那些每天访问量超过1万IP的动态PHP网站的选择。

2008年4月19日星期六

Alexa更新网站排名算法

  据Alexa报道,4月17日,Alexa宣布自己的算法进行了更改,很多互联网网站的排名出现了不同程度变化,新的数据统计将不再完全依赖Alexa工具条所反馈的流量数据,而会同时参考“多个数据来源”,以提高其全球网站流量排名的权威性。

  原有的算法主要依赖Alexa工具条反馈的数据,由于Alexa工具条的安装量很小,使得Alexa的流量排名越来越不准确,特别对于中国的大部分网站来说,原有的Alexa已经渐渐失去了参考价值,因此Alexa不得不修改自己的算法,参考了“其他数据来源”。

  其他的数据来源,我觉得Google可能更有权威度一些,Google工具栏的装机量非常庞大,同时Google还有Google Analytics(分析)和FeedBurner这样的精确级流量统计工具,如果一些排名都由Google完成,其准确度可能比Alexa还要高一些。

  我的博客的Alexa为两万多,好像有所提高,据说大部分中文网站的排名也有提高,英文网站好像有降低的,例如Problogger从3xxx降低到12917,JohnChow由5xxx降低到17088,莫非这些博客大拿们以前在刷Alexa流量?

  附录:Alexa关于更新算法的说明

  原文地址:http://www.alexa.com/site/company/announcement (CNET中国翻译

  最近几个月,我们不断从ALEXA用户听到这样的反馈:研究ALEXA工具条以外的用户的互联网行为变得越来越重要。对此,我们询问,并接受!

  我们倾听您的建议,我们相信我们的新的排名系统会更加符合您的要求。我们现在从各种各样的渠道来收集数据,以便能向您展示一个反应大多数互联网用户意志的更好的排名体系。

  您们给予我们的更多的其他意见,我们将会在以后努力实现。现在我们还不能告诉你们更多秘密,但是,在未来几周,我们产品的一些新的特点将会陆续呈现在您眼前。

  下面是一些问题和我们的回答:

  问:我的网站排名变了。以前的数据错了吗?

  答:你的网站之前的数据没有错,只是变了而已。安装ALEXA工具条的用户,在上网兴趣和习惯上可能和其他的一般网民在许多方面有所不同,我们只不过是把这种“不同”,在我们的网站上表现出来了。绝大多数网站的排名都不会受到这种“不同”的影响,同时我们也会努力使我们的新的排名机制更好地反应真实。

  新的排名机制将会更好地反应绝大多数网民的上网兴趣和习惯。

  问:为什么图表当中1年和3年的选项不见了?我只能看9个月的历史数据。

  我们正在重新算数据,将会在最近几周陆续将历史数据加进来,我们很快就会把最近几年的数据恢复。对于由此造成的不便,我们深表歉意。

  问:你们还会再次改变排名吗?

  答:我们一直都在努力确保我们提供的数据是最有用的数据。我们将会继续调整我们的算法,但是我们不能预测是否会发生任何大的数据变化。如果你发现有错误,请及时通知我们。

  问:我更喜欢以前的排名。哪些排名还能看到吗?

  答:我们也喜欢以前的排名。但是,我们是根据来自像您这样的许许多多的用户的反馈,来调整和开发我们新的系统的,既然已经完成了,我们更喜欢新的排名。我们也希望你会喜欢。

  我们认为同一时间有两套排名体系会让人混淆的。所以,我们取消了旧的排名体系。

  问:你们想知道我对此事的看法吗?

  答:当然!最近几个月以来,我们一直在收集各方的意见和建议,我们还将乐意倾听更多的声音。如果您对我们的调整有任何想法或者意见的话,请与我们分享。

2008年4月18日星期五

新版Google Earth发布并提供下载

  Google发布了最新版的Google Earth 4.3,和上一个版本4.2相对比,最新的Google Earth版本具有一些新的功能,包括昼夜模式,显示本地时间和日出日落,新的街景模式,卫星地图的日期,更快的三维模式,Mac版本支持Flash等等。

  昼夜灯光

  新的昼夜模式产生特殊的灯光效果,一旦打开实时日光后就可以看到现在太阳的位置,你可以使用时间滚动条来改变太阳照射过程的一整天,你就可以看到太阳从日出到日落的样子,注意阳光会影响大气的效果,你实际看到的颜色变化是垂直的,云层也会变化,这里有一些阳光照射效果图片:

太空上看到的昼/夜效果

太空上看到的昼/夜效果

丹佛的三维建筑物上的日出效果

丹佛的三维建筑物上的日出效果

  预计在未来的日子里,Google Earth上还会出现一些非常漂亮的画面显示和一些很酷的照射效果。

  街景模式

  Google Maps早已经有了街景,现在Google Earth也有了,打开左边的街景(Street View)图层,即可看到街景,你可以变换镜头和距离,就像在街头环顾四周一样。这里有几个球状的街景画面。

Google Earth街景模式

Google Earth街景模式

  更快的三维模型

  Google优化和改进了三维建筑物的渲染性能,先加载低分辨率模型,再加载高分辨率模型,使得三维建筑加载更快了,人们可以逐步看到更为清晰的建筑物纹理细节。很多大城市具有非常真实的三维建筑物模型,这里是旧金山的三维建筑物截图。

Google Earth 4.3中的旧金山

Google Earth 4.3中的旧金山

  图像日期

  当使用鼠标进行缩放的时候,有时候你会看到状态栏底部会出现一个更新日期,就像下面一样,当像加上了更新日期后,我们就可以很方便地了解卫星地图的时效性。

图像日期

  另外一个重要的新特点是,Mac版本的Google Earth可以支持Flash了,这样Mac的用户就可以看到Google Earth上面的那些YouTube视频了。

  新版Google Earth下载地址:http://earth.google.com/download-earth.html

  英文原文:Google Earth 4.3 First Impressions and Screenshots

  中文翻译:William Long

2008年4月17日星期四

WP-PostViews的静态JavaScript版更新

  前段时间我曾经写了一个WP-PostViews的静态JavaScript版插件,用于在静态化WordPress下以JavaScript的方式提供文章计数器,当时写的比较匆忙,有不少问题,今天晚上终于抽出几个小时,将WP-PostViews的静态JavaScript版进行了一番大的修改,修正了以前的一些主要问题,最新的版本目前看来我比较满意。

  以前这个WP-PostViews的静态JavaScript插件存在的问题是效率问题,由于不是使用Ajax调用计数器,而且JavaScript代码是放在页面的中间,于是装载文章的时候会导致页面停顿一下。今天我参考了Z-Blog的一些相关技巧,使用动态调用JavaScript的方法,在页面的底部再调用计数器的JavaScript,页面终于不停顿了运行一下,效果和Ajax的几乎差不多,感觉还可以。

  这个修改版的插件优点:

  1、小巧玲珑,对于原来的插件修改量很小,只修改了一个文件,大部分修改增加到了一个独立的新增文件wp-counter.php。

  2、内存占用小,wp-counter.php这个文件代码很少,不会占用大量内存,对于虚拟主机限制PHP内存的用户来说很有用。

  3、效率高,没有建立额外的http连接,不会产生更多负荷。

  不足之处:

  1、只支持页面计数,不支持首页和目录页计数。

  2、对所有用户均计数。

  安装说明:

  1. 下载压缩包,然后解压缩文件。

  2. 将postviews目录放到wp-contentplugins目录下。

  3. 将wp-counter.php放在WordPress的根目录下。

  4. 在插件管理里面激活WP-PostViews插件。

  安装重点说明一下,wp-counter.php要放在WordPress的根目录下,不是放在插件目录下,否则会报错。以前用过我这个插件的用户建议立刻升级。

  下载:点这里下载最新的基于JavaScript版本的WP-PostViews。

2008年4月16日星期三

在Windows Server下集成Apache、Tomcat和IIS

  我在《Perl、PHP、ASP、JSP技术比较》一文中曾经对四种流行的网站设计语言进行了评测和对比,常言道鱼与熊掌皆我所欲,两者不可兼得,那么有没有一种方法,可以做到鱼与熊掌兼得,同时支持这四种语言的Web服务器呢,今天我就介绍一下基于Windows Server 2003的同时在一个80端口支持这四种语言的方法。

  我们的策略是:安装三个Web服务器,Apache负责支持perl和php,IIS负责支持asp,Tomcat负责支持jsp,通过Apache的proxy_module将三个服务器集成到一个80端口。

  安装的方法是,先安装IIS、ApacheTomcat,配置Apache使用80端口,Tomcat使用8080端口,IIS使用8081端口。

  接着在Apache中修改httpd.conf文件,启用proxy_module和proxy_http_module,修改的内容是:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

  然后在Apache的httpd.conf文件中增加如下几行:

    ProxyPass /php !
    ProxyPass /asp/ http://localhost:8081/
    ProxyPassReverse /asp/ http://localhost:8081/
    ProxyPass /jsp/ http://localhost:8080/
    ProxyPassReverse /jsp/ http://localhost:8080/

  然后在<Directory>中设置各个服务所在网站的目录权限,这样php目录即可跑apache,支持php和perl,而asp目录则跑IIS,jsp目录跑Tomcat,全部都可共享80端口,一个端口同时支持Perl、PHP、ASP、JSP四种语言,兼容性很好,性能也不错。

  另外,将上述命令放在<VirtualHost>中,可以实现不同的虚拟主机使用不同的Web服务器,同一个端口同样可以跑多个Web Server,这对于那些出售虚拟主机的人来说很有用,如果你想在一台Windows服务器上配置不同的Web服务的话也可以尝试一下。

  以上配置在Windows Server 2003、Apache 2.2.6、Tomcat 6.0.16、IIS 6.0的环境下调试通过,运行正常。