看《2006影响世界华人盛典》有感

  今天下午在家看了凤凰卫视中文台重播的节目,在北大举行的《世界因你而美丽-2006影响世界华人盛典》颁奖典礼,物理学家杨振宁获得影响世界华人终身成就奖、美国莱斯大学生物化学与细胞科学系副教授陶一之、芬兰 Enfucell 公司首席技术官张霞昌、墨尔本市市长苏震西、美国纽约州市议员刘醇逸、职业田径运动员刘翔、职业台球运动员丁俊晖、国际著名导演李安、华裔音乐家谭盾、国际影星章子怡、香港科技大学学生陈易希等十一位分别来自世界不同国家和地区,在不同领域影响着世界的杰出华人获得2006影响世界华人大奖。

  很仔细的看着、听着,同时也在思考,特别是结束时的那首名叫
Wishing star
的歌曲,让我回忆起2000年时曾经在《北京青年报》上看过的一篇题为《你有梦想吗》的文章,那是一位在北京四中教英语的老师写的文章。

  影响世界从点滴开始,这些伟人都有一些共性,有梦想、有抱负,而且非常勤奋。像杨振宁所说的“一个人成功的要素,第一当然是要对于他所做的学问有基本的兴趣和一些天赋,另外一个非常重要的当然是机遇,一个有天才而有眼光的人才可以做出来革命性的建树”。这是杨振宁回答凤凰卫视的记者和北大学生提出的“怎么样通过自己的努力来影响世界”这个问题的答案。

  类似的问题我也听过不少,比如:如何成为一名优秀的程序员?需要具备哪些素质?有什么方法和捷径?你是如何走过来的等等,一般在网上我都会推荐他们看看《你有梦想吗》这篇文章,我走的路很特殊,虽然不能完全拷贝,但是有一些观点是不变的真理,我和他们一样也会回答说没有捷径,其实答案本身就是捷径,因为这些道理大家其实都明白。

  比如勤奋、笨鸟先飞、兴趣爱好与从事的工作相结合等等。其实工作和读书一样,有的人成绩很好,有的人却很差。有的人觉得读书很容易,有的人却觉得读书很难,但经过努力还是能取得不菲的成绩,这就是勤奋的原因。自己感兴趣的课程成绩一般更好,这就是为什么有人选择理科有人选择文科的区别了。选择一个有发展前景的行业,做你感兴趣并且擅长的事!

DWS开发档案解密:Web应用开发

  从传统的软件开发转到 Web
应用开发上来,开始的时候可能会有点摸不着头脑,而经过真正的了解之后,会发现
Web 开发较 Client 容易很多。
  从瀛海威开始,我从一名传统的程序员变成了一名网络管理员,也是一名网络程序员;后来又慢慢开始接触
Web
应用开发,再后来甚至是无线增值、嵌入式、无线终端的应用开发等。

  这个过程包括最早的 Java Applet 程序以及糟糕的 Java
应用程序,后来放弃了 Java 语言。又用 C 开始做 Sockets
编程,这个阶段在思维上并没有太大改变,当时做过一个 Maillist
Server,是一套用于订阅、退订邮件列表、群发电子杂志的服务器软件。再后来自己一边学习制作个人主页,一边开始研究
Web 应用开发。
  甚至开始的时候不知道 CGI
的工作模式,那时候几乎找不到一本这方面的书,除了 JAVA
属于网络方面的,则通常是 Novell
网络类的书籍。所以开始也闹了不少笑话,不知道 Web
服务器有“可执行权限”之说,也是那时候真正理解 Unix 与 Windows
之间的区别。
  后来通过台湾的网站找到很多 CGI
中文教程,认识了很多台湾朋友。当时很流行汉化 CGI 程序,很多
Guestbook、WebBBS 程序都在那时候开始兴起。一直以来 Perl 几乎是 CGI
的代名词,虽然 CGI 可以用 C/C++ 写,在 Windows 下甚至叫 WinCGI
直到后来的 ISAPI 及 NSAPI 等扩展。
  事实上最好的 Web 应用开发入门方法是写一个“留言板”,这应该算是
Web 程序员的必修课,他就像一个“Hello
World”程序一样,当你学会写出一个“留言板”后,你就可以开始写“论坛”、写“网站发布系统”了…

  没有教材的情况下,只有看别人写的代码,从中学习到各种技巧,慢慢的发现自己写的比前辈写的更好,到后来甚至觉得自己可以写一本教人怎么学
Web 应用开发的书。
  目前 DWS Team 对 Web
应用开发的理解还处于蒙蒙拢拢状态,特别是现在冒充了一些诸如 AJAX
的新名词来,更是使大家摸不清真相,其实大可放胆向前走,Web
Application 只是 DOS Command Line 的变种罢了,除了多出了
GET/POST/HEADER 处理,有诸如 COOKIE/SESSION
的特性,真没有什么特殊的地方。像我们先前讲过的 Template
技术,说白了就是“情书软件”,这些都是小技巧,AJAX 也是如此。
  DWS 的 W 是 Web 开发,是我们 1/3
的重要性,也是用户交互最主要的地方,很多时候内部的技术外人是看不见的,而门面是否好,大家是都能看得一清二楚,除了我们的核心
D 和 S 要做好之外,W 也是需要好好包装的。
  我们的智能相册,现在逐步完善起来了,希望赶在2006年之前对外发布一个真正的
1.0 版本软件。智能邮件的交互则需要重新构建,这几天大家除了要一面看
RFCs 另一面则要好好研究一下用户体验问题。
  (注:本文于2005年12月21日发布在 W3G
内部开发 BLOG 中)

DWS开发档案解密:Web的验证方法与权限控制

  基于的 Web
应用在授权认证方面,有多种安全验证方法,最早的方法是通过 Web
服务器支持的 WWW-Authenticate 标准所实现的,支持 Base64 和 MD5
等编码。一般浏览器允许3次重试的机会,验证失败时返回401错误提示,验证成功则多出一个
REMOTE_USER 环境变量。
  在 IIS 上除了支持标准的 WWW-Authenticate 还支持 WindowsNT 的
NTLM 验证方式,但这个方法在其它浏览器和其他 eb
服务器下并不兼容,通常只应用于局域网。
  WWW-Authenticate 是以目录为对象的,如将 /users
目录加上访问控制,则 /users
目录下的内容,必须通过验证的用户才能访问。
  这种方法的问题是界面不够友好,将验证放在 Web
服务器这一层会有所局限,账号权限也不在 Web 服务器这层区分,Web
服务器只做用户认证工作。通常 Web
服务器只根据本机的配置信息进行验证,在做分布式处理时显得比较吃力,虽然像
Apache 也有 MySQL
的验证模组,但都不是默认配置,并且部署起来非常困难。
  另一种则是基于 HTTPS
的安全连接,需要证书、公钥、私钥等,使用复杂,需要专门申请证书并安装等,通常只见于和银行有关的网站服务。

  比较常见的方法是采用 Cookies 或 Session
记录用户认证的登录信息,每次通过 Session
提交到服务器进行对比。该方法则只利用 Web 服务器最基本的 Cookies
支持,一般需要自己编写专门的 Session 及 Authe
程序用于账号注册、管理、登录等程序。
  上面这种方法兼容性相对来说还不错,但并不是最好的,更旧的或某些特殊的浏览器,甚至连
Cookies 都不支持,又或者是用户为了安全考虑,将 Cookies
功能禁止了,此时利用这种方法则会失效。还有一种情况Cookies解决不了,那就当跨域操作时,由于安全原因,Cookies
是无法继承过去的。
  为了解决这些问题,有一种方法可以解决,就是在 CGI 程序的
QUERY_STRING 环境变量增加 Session 值,如
abc.cgi?a=a1&b=b1&session=898e82c94d7703e96f7ea83b31e0ac2b,不过一般为了更好的兼容性,甚至将
Session 值赋给 PATH_INFO 环境变量,如 /cgi-bin/abc.cgi
是真实相对路径,登录后的 PATH_INFO 环境变量为
/cgi-bin/898e82c94d7703e96f7ea83b31e0ac2b/abc.cgi,每次通过中间的
Session 值与服务器记录的进行对比效果相同。
  权限控制方面,复杂程度将根据业务逻辑去设计,一般会有管理、普通、访客等三种角色,进一步的则用组去划分权限。

  最复杂,也是目前我最欣赏的是 Yahoo! ID 及 Microsoft
Passport,他们的兼容性从一开始到扩展 N
多的业务,都能一脉相承。特别是 Yahoo! ID
收购了数十个公司,依然能做到这一点,在中国到目前为止尚没有一家公司能做到。

  Yahoo! ID
的方法不算复杂,有个中心验证服务器。各种应用服务器遇到需要验证的情况时,将应用服务器的信息附在
URI
上,先重定向到中心验证服务器,验证通过后再重定向回应用服务器。

  中心验证服务器是用 LDAP
实现的,只保留有最简单及核心的隐私资料,各种应用服务器需要的信息,在首次使用时,会进行一次初始化,补充一些个人信息和功能设置等。

  我们 DWS 的验证问题虽然没有和 Yahoo! ID
要求的那么复杂,但是他是最值得我们借鉴的对象,Web
服务器的验证为了是控制远程用户的认证,内部的认证则可以理解为
Passport
的验证,一个账号登录后,在各个子域(或应用)间跳转时,无需再次登录,继承账号登录信息,但是并不继承权限,各有各的权限管理。

  (注:本文于2005年12月27日发布在 W3G 内部开发 BLOG
中)