九月 25, 2006

看完Ajaxian.com的一个评测报告Ajaxian.com 2006 Survey Results之后,可以很明显的发现,似乎在这个web2.0的时代,就连开发力量中,起到决定性因素的都变成了广大的人民群众,不再是某个知名的大公司。

 Framework Survey Results

以上是ajax framework的调查结果,可以发现,由于开源社区的灵活性,机动性,以及对新技术的先知先觉,导致最先出现的Prototype独占鳌头,随后的几个也是先行者的典范,相对来说,后来的Yahoo,MS,Google受欢迎的程度就非常可怜了。

再看Server Side的情况:

 Platform Survey Results

最盛行的就是php了,这个和现在非Ajax web开发情况不太一样,作为传统的Web开发来说,无论从框架的健全程度,还是对于该项技术的掌握程度,使用最普遍的应该是Asp.Net 于 Jsp这两项技术,虽然php已经比较流行,但是远不足以撼动传统web开发模式下.net与java的地位!

个人认为,造成在ajax时代开源社区成为主要开发力量的关键原因是Web开发平台的开放性,可以从两个方面来说明:

  1. 对于客户端浏览器来说,几乎所有的浏览器都支持,或是部分支持w3c的web技术标准(xhtml,css,javascript),虽然兼容性在各个浏览器中的表现不尽相同,但是这种鸿沟是可以通过开发手段来弥补的。这就造成了无论使用哪家的开发框架,都可以畅通无阻的运行于不同的客户端上,并不存在某家公司掌握了某种浏览器的特性的问题,给开源力量带来了良好的竞争平台以打败巨头的技术垄断。
  2. 对于服务器端来说,php无疑是目前最灵活的,又相对完善的,普遍的web开发平台,她并不受某种成熟的web开发框架思想的限制,可以自由的在html中嵌入自己的标记(这正式MS极力反对,并想努力扭转的局面),可以自由的使用很多开源框架的支持,这些都给php在服务器端开发中拔得头筹起到了至关重要的作用;同时,ajax时代并不关心你使用怎样的server,关心的只是从server输出规定格式的json/xml,这样的话,原有的如asp.net control model,jsp+structs等复杂的web xhtml render engine的作用就被弱化到了无以复加的地步,我们需要的仅仅是一个简单的输出引擎而已,所以无疑,jsp,asp.net就不再吃香了,因为他们的框架实在太完善了,太臃肿了,也太不够灵活了。

虽然Ajax是一种过度技术,时代终究会很快过去,但是我依然愿意看到,以后的应用平台上如今天的ajax平台上一样百花齐放,充满开源的声音!

Technorati: , , , , ,

九月 22, 2006

或许,我早该写下这篇post,因为我早想写下它,却总是不知道从何说起,同时也是有些怯生生的觉得似乎自己没有足够的技术底蕴去写下这样一篇引发”宗教战争”的post……因为或许ms与open source本身就是水火不容的!

我,一个在ms develop platfrom上面摸爬滚打10多年的”程序员”(或许我还不够格)。在几个月之前忽然转投了linux的怀抱,开始尝试诸多我曾经没有听过,用过的开源产品,开源语言。我这样做并不是心血来潮,也不是要特立独行,而是为了让自己能够换个角度,换个窗口来重新观察一下我已经熟悉了的Internet这个大世界。

从初中开始,我一直使用ms的平台来进行程序开发,当然大多数都是些自己搞着玩的小东西。从ms dos 6.21平台上面使用QBasic开始,直到window 3.2下面使用vb 4.0开发gui应用程序,再到vb6.0 + win32 api的开发方式,最后进入大学,开始一个铁杆.net developer……深深的感觉到ms的平台越做越漂亮,开发平台越来越好用,集成开发环境越来越方便,似乎所有开发工作都必须使用win 2000/2003,vs.net才能进行了(请注意,我的意思并不是那种依赖于把控件拖来拖去的开发方式),所有的编程习惯,开发习惯都自然而然的融入了ms预先设计好的条款之中。无可厚非的是,确实,ms是user interactive design方面的专家,非常体贴用户/开发者,这么做没有错,而且是值得业界广泛学习的。

直到因为工作需要,我的任务从开发asp.net pure html page变为大量使用ajax技术为G宝盘构建rich interaction的UI时,渐渐的远离了纯ms的技术,让我足够有时间重新思考关于技术的好多问题。使用vs.net编写客户端的javascript并不比使用editplus好,js与服务器端使用基于json协议的通信,并不关心server使用何种web平台,甚至在生成json的用途中,无论asp,或是php,python等语言都比asp.net来的方便,因为asp.net天生就是被设计来支持”类似WinForm开发方式”的,基于server control的开发让asp.net只能以一种ms预先设定好的工作来很好的工作,要不就是以一种蹩脚的方式,不被vs.net IDE支持的方式来在页面中,或是Page_Load()中写入你想要输出的代码,ms对于asp.net的这种确实可以极大的提高生产力,可是确实不是一种让asp.net能够被所有开发者灵活应用的设计方法。在使用ajax开发的过程中,广泛的接触了.net之外的世界,比如ajaxian.com,ajaxpatterns.org这些技术站点,当然也就潜移默化的受到了开源思想的影响,大量的使用prototype.js,rico.js,script.aulo.us等开源框架,让我深深感觉到了open source的魅力,这是一种与我以前对开源平台完全不同的看法,相反,开源平台比ms的平台更加稳定,成熟,并且免除了很多不必要的学习负担。当然其实这并不是最大的魅力所在,开源比ms最大的好处是ms的是一个产品,产品肯定是存在商业目的的,于是由于有技术之外的因素介入,可能一种平台上面很多东西就不是那么单纯的了,可能并不需要升级,可是我们必须进行升级,.net 1.0->1.1->2.0->3.0其实就是最好的例证。可能有人反驳我说的不对,认为.net的进化是历史的必然,进步的必要,但是如果一个理智的ms开发人员好好思考就会发现这是一种比较纯粹的商业行为,这里不再多讨论。

使用过ajax这种技术之后,我开始不由自主地开始关注open source的世界,发现其实很多ms平台上面被ms包装过一下来推销给我们的概念,其实在open source community里面早就存在过,ajax就是个很好的例子,直到现在altas还没有正式发布,而很多web2.0站点已经是full ajax powered了。而且altas并不如想象中如此完美,问题在于:介于ms多年来的desktop application develop experience来说,ms想把altas封装成一个能够开发web上面的desktop app like的应用,可是似乎忽略了浏览器的能力,javascript构建的应用所能达到的复杂程度,结果altas变成了一个很有desktop app风格的开发框架,可是却臃肿不堪,速度奇慢无比,而且与asp.net bind很紧(当然这个又是商业原因)的丑孩子……再说一个例子,微软推出的Avlon,当然现在叫WPF,其实早在2001年,moziilla就有一个类似的RIA Platform-Mozilla,基于XUL与javascript,配合XPCOM丝毫不比现在的flex差,只不过一个平台的兴衰,似乎技术不能起到主导作用。或许将来也是WPF的天下,因为我们的客户用的都是Vista。

在转向Linux以后,发现这个咚咚果然不是一般用户,乃至开发者可以驾驭的。通常来讲,以我的Ubuntu drapper为例,如果不使用apt来获得软件,而使用网上的tarball包来进行软件安装,保证要费一番工夫,因为总是有几个动态链接库或者其他的什么东西需要你再去寻觅一番,看来open source的东西确实需要好好包装一下,或是说需要一个够好的linux distrabution。在linux下使用vim进行python脚本开发,感觉也非常不错。与window是完全两种不同的思维方式,再次回到ms的开发平台上面时,你会发现原来ms确实培养了我们很多的习惯,而这种习惯一般都不是好习惯。

所以说,技术也需要博览,技术不仅仅是对某种理念的愚忠,换个窗口看世界对广大的开发者只有好处!

Technorati : , , , , , ,

九月 19, 2006
九月 18, 2006
九月 16, 2006
九月 15, 2006

往往社区产品中都有这样的一个功能:当用户没有自己选择头像的时候,分配给用户一个默认的头像。

最快想到的是给用户表中的UserPhoto一个默认的http://yourdomain.com/images/userdefault.jpg值,但是这样的做法似乎比较麻烦,因为需要在服务器端做很多的工作。

现在给出G宝盘使用的一种解决方案:

 

1. var Gbaopan = {};
2. Gbaopan.Web = {};
3.
4. Gbaopan.Web.Utility = {
5.     
6.     toErrorImg : function(img,userName){
7.         if(img.src.indexOf(’http://static.gbaopan.com/defaultimgs’)>-1){
8.             return;
9.         }
10.         if(userName == null || userName ==”)
11.             img.src="http://static.gbaopan.com/defaultimgs/user.jpg";
12.         else{
13.             var code = userName.charCodeAt(0).toString(); //0=48,z=122
14.             code = code.substring(code.length-1,code.length);
15.             img.src=’http://static.gbaopan.com/defaultimgs/’ + code + ‘.jpg’;
16.             
17.         }
18.     }
19.     
20.     
21. };

以上代码段的原理是:使用${userName}中第一个字母的ascii值的最后一个数字作为分配给用户头像的图片的名称,这样就在客户端实现了为每个用户分配一个随机的,但是又是与用户userName一一对应的,并非每次都发生变化的默认头像,活跃了社区的氛围!

 

Technorati: ,

九月 14, 2006
九月 13, 2006

今天看过了Web Development Tools for the Power Developer这篇文章,留下文中的这些工具作为存档,方便所有Web开发人员。

Validators
Javascript
Websites
ASP.NET
Proxy Tools

 

Technorati: ,

九月 12, 2006
九月 11, 2006
下一页 »