2006-09-30

Nirvana Studio 首页PR又升了

前一段时候工作室的主页的PR被Google无情地降到了3……今天又发现它长到了5,希望这次可以稳定下来~。

Emacs vs Vim

一直听某些人说,Emacs是最强的代码编辑器,甚至是一种信仰,不过也常听说Emacs is evil。
过去一直用VIM,随着不断的成长,也受很多人的喜爱,现在对于谁是代码编辑器之王,这两拨人动不动就要吵,有些是从Emacs转到Vim,有些则相反。
这两天搞了个XEmacs玩玩,为什么不用GNU Emacs?因为GNU Emacs对中文支持不好(Windows下)。
Emacs有两个搞笑的名字

  • 是Emacs Makes A Computer Slow的缩写
  • 是Escape Meta-Shift-Backspace-Control x c
用了之后,花了几个小时定义了自己的配置,才觉得,别人说Emacs是种信仰有那么一点道理。和Vim比,除了对Vim的脚本不太适应之外,Emacs的elisp提供了更多的函数来完成任务,而Vim脚本常需要使用execute来模拟键盘输入的指令。而反过来说,虽然Emacs的可自定义能力很强,但Vim预定义的各种命令,已经可以完成Emacs中很多需要自定义的东西了。
真是很难取舍。

2006-09-26

有趣的Nvidia Firewall

今天在公司的机器上装了新的nForce4主板的驱动,驱动中带了一个nvidia firewall,我看那就试试吧,结果,先不说网上邻居不能看,我用ab从局域网上别的机器上测试Apache,居然一个phpinfo()页面要2秒,太不可思议了,删之。
而且,nvidia firewall的配置界面是基于Web的,我一看进程,居然是启动了Apache2,运行了一个cgi,这也太……
所以大家也最好别用nvidia firewall

给VMWare的虚拟机启用3D加速

请访问:
http://shiningray.cn/2006/09/26/gei-vmware-de-xu-ni-ji-qi-yong-3d-jia-su/

2006-09-24

The Vision

看了Nicholas的这篇梦的记录,我也想写一下,这是好几天前做的梦了,但是还是要写一下。那简直就是好莱坞大型科幻片。大致的内容是:
某种 未知的力量——可能是外星人,也可能是神——将美国的太平洋舰队传送到了俄罗斯的军事港口,而把俄罗斯的舰队传送到了美国的军事港口,我当时站在俄罗斯的 港口(也可能是中国某港口)附近的大楼上,看着成群的舰队莫名地凭空出现,巨型的航母、舰队在眼前慕为壮观,而当了解了那是美国的舰队之后,感到了无名的 恐惧,然后可想而知,不知是哪一方先开火,整个港口乱成一团,双方猛烈的攻击着,甚至一些舰船直接冲到了岸上。而我便和大家一起,沿着一个圆形的楼梯一直 往下一直往下走,逃往一个地下的区域——似乎,这已经是世界末日了…………
这是一个,还有另一个则很有生活情调,我走在马路上,应该是类似西方电 影中常出现的那种小路,路两旁是很高的白色栅栏,人行道上或有一些小树。我走到了一个商店门口,商店前有较长的台阶——目测门离马路约20米,高2米,商 店门面类似于肯德基,左边是门,右边整块都是玻璃,我可以透过玻璃看到里面有一些小资妇女在吃着一些甜点,她们应该是坐在沙发上——也是类似于肯德基那种 和墙壁合在一起的沙发。于是我也走进去,问服务生要东西吃,她说,这些点心都是免费的,随意吃,于是乎,我就坐在那边的沙发上吃了起来,而后,有人(一男 一女,男的很瘦,很高,女的则约是中年)请我去这个店内庭去吃东西,里面起初十分狭小,而后我们吃了点东西,进入了一个十分旷阔的类似于体育馆的地方,而 我觉得,更像是没人的火车站,而这里面却有一些小孩玩的那种小型游乐场(肯德基、麦当劳那种)。
我并不清楚这些意味着什么,不过,记录自己的梦境,却是一件很有意思的事情。

2006-09-22

不可思议的驴子

一天,一个农民的驴子掉到了一口枯井里,驴子在里面凄惨的叫了好几个钟头,农民也是急的团团转,就是想不出办法救它上来.最后,他断然决定,反正这口枯井早就该填平了,而驴子也已经老了,不值得花这么大精力救了.

农民聚集邻居帮他填井,大家拿着铁锹开始往井里填土.驴子很快意识到发生的事情,起初,它只是更加恐慌的嚎叫.不一会儿,它居然安静下来.农民按耐不住好奇的心理,往里面看,眼前的情景令他惊呆了.

每一铲土砸到驴子身上,都被它快速的抖落掉,然后狠狠的用脚踩紧.就这样,没过多久,驴子竟然把自己升到了井口,纵身跳了出来,快步跑开了.在场的每一个人都惊诧不已.

评:其实生活也是如此.各种各样的困难和挫折,都会如尘土般落到我们的头上,要想从这苦难的枯井里逃生,走向人生的成功和辉煌,办法只有一个,那就是:将它们统统抖落在地,重重的踩在脚下.因为,生活中的我们遇到的每一个困难,每一次失败,其实都是人生历程中的一块垫脚石.

Re: [NirvanaStudio] [Nicholas @ Nirvana Studio] JavaEye 中一篇有趣的文章

现在很多学习RoR的人,其实就像以前学ASP、PHP的人一样……

另外就这个人说render这个词,第一个是这个词来自计算机图形学,在这个上面已
经有固定翻译,叫做*渲染*。
而RoR中的这个render,是一个来自于MVC模式和模版模式的常用词,如PEAA中的
Template View模式<http:
//www.martinfowler.com/eaaCatalog/templateView.html>,它的定义为/Renders
information into HTML by embedding markers in an HTML page./而这个模式其
实是来自过去的UI编程,比如MVC,最初来自于过去的Smalltalk-80,20年前的东
西,那时候还没有什么 Web应用,而后才被借鉴到B/S架构的应用中,也就是说,
Render不过是借用图像编程的数据。然而,在英文中,其实本来也是没有render a
view这种固定用法的。

好吧,我们再来仔细研究一下Render的解释:
render
vt.
报答; 归还(back); 交纳
提出, 开出(帐单、理由等); 报告, 呈递; 作出(判决等)
给与(帮忙等); 表示(敬意、服从、关心等)
让与, 放弃(up); 移交, 托付
致使, 使变为
表现, 描写(个性等); 表演, 朗诵, 演奏(音乐等); 翻译(into)
反映, 反响, 反应
给...重新措词, 复制
提取(脂肪), 炼(油)
放出, 放松(滑车上的索子)
【建】给...初涂[打底]; 粉刷; 给...抹灰
render good for evil
以德报怨
render a bill
开出帐单
render thanks to
感谢, 报答
*render a play into English *
*把一个剧本译成英语*
You have rendered great service.
你们帮了很大的忙。
【习惯用语】
render certain
确保, 保征
render down
把...熬成油; 把...熬成液体
*render into *
*译成(某种语言)*
render oneself up to
投降
render up
做(祷告); 放弃, 交出
也就是说,/Renders information into HTML by embedding markers in an HTML
page./这里render按照习惯用语应当翻译成"将信息*翻译*成HTML"。
而PEAA中的Two Step View的定义是这样的:Turns domain data into HTML in
two steps: first by forming some kind of logical page, then rendering
the logical page into HTML。同样的,在这里,如果按照render真正的习惯用
语,确实应该翻译成"*翻译*"。
反观"呈递、呈现"这个翻译,并不能说不好,其实提出这个翻译的这位朋友,估计
还不了解这个词背后的渊源,因为render已经有所定论,就像很多计算机术语,台
湾和大陆的翻译就不同,但只需要了解其中的意思就可以了,沿用下来就行。再
者,上面的"翻译"的翻译,在某些语境下也应该采纳才对。

另外,在我的印象中,似乎刚学习HTML编程的时候,对Render翻译成"渲染"也颇有
微词,而当我了解了HTML与图形编程之间的渊源之后,我就认为,将Render翻译成
渲染,还是十分恰当。


Nicholas @ Nirvana Studio 写道:
> 原文在:http://www.javaeye.com/topic/24453
> 最近似乎因为 RoR 的缘故,上 JavaEye 总带着异样的眼光,这不刚去 Ruby 专
> 区看看又有感慨了。
> Render 一词毫无疑问翻译为"渲染",在 Web 开发中用的实在常见,居然遭到质
> 疑,不可否认怀疑的态度是好的,但是有点过了...
>
> --
> Posted By Nicholas @ Nirvana Studio to Nicholas @ Nirvana Studio
> <http://nicholasdsj.blogspot.com/2006/09/javaeye.html> at 9/22/2006
> 12:07:00 上午
> --~--~---------~--~----~------------~-------~--~----~
> 您收到此信息是由于您订阅了 Google 论坛"NirvanaStudio"论坛。
> 要在此论坛发帖,请发电子邮件到 nirvanastudio@googlegroups.com
> 要退订此论坛,请发邮件至 nirvanastudio-unsubscribe@googlegroups.com
> 更多选项,请通过 http://groups.google.com/group/nirvanastudio 访问该论坛
> -~----------~----~----~----~------~----~------~--~---
>

2006-09-20

Squid 2.6配置的注意事项

请访问:
http://shiningray.cn/2006/09/20/squid26-2/

MovableType个人版3.3 的一个小问题

今天帮JunChen看了一下MT,我发现MT的目录下面有一个PHP目录,一看,里面都是PHP代码,还有一个Smarty,难道是MT也支持PHP运行,十分可疑。
不知道有哪位朋友了解,呵呵。

2006-09-19

Perl复习

我在高中的时候曾经学习过一段时间的Perl,是为了给“宇宙工作室” 制作一个下载站点,为了找一个动态的免费空间可不容易啊,当时是51.net提供了免费的cgi空间,支持Perl,于是乎,特地学习了Perl,并在网上寻找了一个免费的代码改了一遍,
时过6年,又想重新学习Perl——毕竟是一个风靡一时的语言,而且其CPAN中丰富的包,也是相当实用的。
话又说回来,时过六年,Perl6也没有推出,实在是一个遗憾。
从大学开始学习了PHP,PHP从Perl中借鉴了很多东西,比如$式的变量,但实际上和Perl还是有很大区别的,之前我曾经翻译过一篇PHP 对比 PERL,从中可以看出很多不同的地方。
比如,其实Perl是一个函数式编程语言,有词法范围。
关于具体的细节,我会整理一个表格列出来,希望对其他学习两者的朋友有所帮助。

流氓来了,电信的星空急速

今早起床,开机,上网,然后打开Google,莫名其妙跳出来上海电信星空互联的页面,如下:
星空急速
然后我断线,再拨号,换个自己的网站看看,还是会先进入这个页面,那么就让我看看这个星空急速客户端到底有什么好的,一看介绍

3.0版客户端软件在前期版本的基础上为您增加了更多细致体贴的功能,主要表现在:
通过和各类SP的积极合作,将内容丰富,趣味多样的应用程序以插件的形式集成在客户端内,将上网用户常用的浏览器以定制的形式无缝整合到“星空极速”客
户端上,同时为了宽带用户帐户安全,新的版本提供了宽带帐户和密码修改功能等。
·灵活的拨号上网方式,如宽带ADSL、主叫上网、固定帐号上网、上网卡上网、窄带VPDN上网等;
·客户端界面采用Windows系统图形风格的用户界面;
·接入与互联星空服务应用验证一次完成;
·内置丰富多彩的互联星空服务;
·提供宽带帐户密码修改功能;
·强大的网络诊断功能,帮助用户轻松解决网络故障;
·支持SP开发的服务插件,为客户端扩展功能提供了途径;
·支持多种多个帐号,操作风格统一;
·强大的在线升级功能;
·完善的帮助文档;
·支持多个版本的Windows操作系统。

使用星空极速上海定制版,获取上海互联星空积分

自定义系统自启动程序

进程管理

ping检测、DNS检测

安全服务检测

本机系统漏洞检测、路由路径检测

系统清理、IE修复


星空极速软件介绍:
客户端插件是实现不断完善“星空极速”客户端功能和
扩充应用服务最有效的手段。插件不但可以便捷地实现
电信自营业务的客户端集成,而且是实现客户端安全、
网络检测以及第三方软件功能的重要保证。您可以通过
插件管理功能来管理客户端现有的插件,从中选择自己
需要的插件服务内容。
这不是3721再生么,还提高了一个档次,来头不小啊,这次是可以控制上网一切物质条件的电信啊!

2006-09-16

PHP之怪现象[3]

这次要说的怪现象在于PHP的性能问题,且不说PHP的性能有多差,因为毕竟是一个脚本语言,不能奢望其速度多快,但PHP的性能的奇怪问题确实很特别:

  1. 版本的提升并未带来性能的提升——PHP5比PHP4慢
  2. 通过一些字节码优化器来大幅度提高性能
关于第一点,可以看一些对比(数据来自http://byster.net/):


PHP: version 4.3.10 vs PHP: version 5.0.5
PC: Celeron 2.0Mhz / 512Mb

PHP 4 PHP 5

Creating int array[100 000]

for vs while
code
[ms]
for($i=0;$i<10000;$i++)0.0630.087
while($i<10000)>0.0570.086

Reading int array[100 000]

while vs foreach vs or
foreach($arr1 as $vl) {..} 0.0850.171
while(list(,$vl) = each($arr2)) {..} 0.2610.335
for($i=0;$i<10000;$i++)0.1230.163

Reading apache log (16Mb)

file vs file_get_content vs fread
$a = file("t1.log");0.2700.274
$b = file_get_contents("t1.log");0.1200.121
.. $c = fread($hdl, $size); .. 0.1330.141

Parse vars names [100 000]

"test$i" vs "test".$i vs ‘test’.$i
for(…) {$c = "test$i";}0.3160.354
for(…) {$c = "test".$i;}0.2050.236
for(…) {$c = ‘test’.$i;}0.2050.236

Parse and find text from apache log (32Mb)

ereg vs preg_match
eregi("2005:03:04",$txt);3.5043.521
preg_match("/2005:03:04/im",$txt);0.1080.735

Split text apache log 200Kb (contain 2000 "-")

split vs explode
split("-",$txt);1.5611.573
explode("-",$txt);0.1930.197

Count array size. $arr = int[100 000]

count vs sizeof
for($i=0;$i<count($arr);$i++)0.1980.276
for($i=0;$i<sizeof($arr);$i++)0.1980.268

Create object by Ref (loop 100 000)

with ref vs without ref
(…) {$j = & new TestClass();}0.4601.180
(…) {$j = new TestClass(); }0.4701.291

Random number generator (loop 100 000)

srand vs mt_srand
(…) { srand(); } 0.1850.193
(…) { mt_srand(); } 0.9290.989

Calculate hash (loop 100 000)

srand vs mt_srand
(…) { md5($i."byster.net".$i); } 1.3061.365
(…) { sha1($i."byster.net".$i);}1.4921.662
至于第二点,其实也不用多说了,Zend Encoder、Zend Optimizer、eAccelerator、APC等等,而不得不提的是 ,经过Zend Encoder过的PHP代码,只能在有Zend Encoder或者Zend Optimizer的情况下才可以运行,而Zend Encoder是个商业软件。

Currying的翻译

请访问:
http://shiningray.cn/2006/09/16/currying-de-fan-yi/

2006-09-15

PHP之怪现象(2)

在前面一篇文章PHP之怪现象 中,说到了array()是值复制而非引用的,那么要使用引用的数组,要怎么办呢,PHP5引入的奇特的Standard PHP Library
其中有一个ArrayObject,可以实现引用的数组:
$a = array(1,2,3);
$arrobj = new ArrayObject($a);
这样就可以得到一个行为基本和原始array()一样的一个ArrayObject实例,你也可对其进行foreach操作,不过和基本的array()有一些区别:

  1. 大多数array相关的函数不能使用,如count(),必须使用ArrayObject的count()方法,象array_push() array_pop()等则无法使用
  2. 对ArrayObject使用[]取出某个值的时候,如$arrobj['a'],如果要对这个值进行处理如--、++、[]=等操作,不能使用链式表达式,必须先将这个值取到某个变量中才能使用,如下是错误的:
    $arrobj[1]++; $arrobj[0]--; $arrobj[2][0] = 1;

  3. ArrayObject的性能比array()的性能差很多,慢一倍多点

说完了ArrayObject,还要说一下和ArrayObject密切相关的另一个东西ArrayIterator,一个数组的迭代器。很难说明SPL的目的到底是什么。下面先看看SPL的一张类图



如此复杂的类图,第一眼看,觉得很象Java,但PHP没有OOP中万物之本的Object类(其实如果用类型转换的object转换,是可以得到一个奇怪的stdClass的实例,但没人知道这是干什么用的),如果说是像C++,又少了GP的支持,而PHP低下的运行效率――不要说和Java比,就是和Lua比,也差太多了,谁敢使用这么庞大复杂的类库呢?

2006-09-14

PHP之怪现象

下面总结一些我发现的PHP的奇怪事情:

1.array()并非引用类型
array()并非一个对象的构造函数,它是一个语言结构,它返回的虽然是一个结合数组,但并非一个对象,即时在所谓OO的PHP5中,也是有问题的:
$a = array(...);
$b = $a;
print $b === $a;
这时候,确实输出为1,表示两者一致,PHP的手册上是这么说的:
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE
所以,===对于对象来说,才是同一性比较
如果这时修改$b的某个值,那么$b就和$a不等了
$b[0] = 5;
print $b === $a;
这时什么也不输出,表示为false
如果要获取$a的引用,必须强制性地使用&操作符
$b =& $a;
由此引出了2

2. foreach和each()等数组操作

foreach($arr as $k => $v)表示遍历$arr中的每个元素$e,同样的,这个$v是=出来的,相当于$arr[$k] = $v,而非$arr[$k] =& $v,并非$arr中的实际元素,那就有两种情况:
  1. $arr[$k]这个元素正好是一个对象,这时其中存储的其实是一个引用,那么$v可以正确指向最终的对象
  2. 之外所有的类型,都是一个副本,如果是一个数组,那么是数组的副本
因此,如果要实际改变$arr中的元素,应当使用$arr[$k],而非$v。
这种问题同样可出现在其他数组操作,each(),current()等。
2. include和eval
include和eval哪个快?
答案是eval快,这个确实比较奇怪,即使算上文件操作,纯粹执行代码,eval(file_get_contents($file))要比include快那么一点。
问题可能在于include要处理<?php ?>这些东西,而eval仅处理php代码。
其它的以后再慢慢总结

Nirvana Studio JavaScript 经典文章收藏

NirvanaStudio 对于 JavaScript
的研究还是比较深刻的,对于想深入学习 JavaScript
的朋友们来说下面的文章应该是不错的内容。

1. 如何优化JavaScript脚本的性能
http://www.nirvanastudio.org/javascript/improve-javascript-performanc...

2. JavaScript = C + Lisp
http://www.nirvanastudio.org/javascript/javascript-c-lisp.html

3. 函数式JavaScript编程指南
http://www.nirvanastudio.org/wp-content/uploads/2006/04/Functional_Ja...

4. JavaScript中的类继承
http://www.nirvanastudio.org/javascript/classical-inheritance-in-java...

5. JavaScript Templates
http://www.nirvanastudio.org/javascript/javascript-templates.html

6. JavaScript中的私有成员
http://www.nirvanastudio.org/javascript/private-members-in-javascript...

7. JavaScript:世界上最被误解的语言
http://www.nirvanastudio.org/javascript/javascript-the-worlds-most-mi...

8. 编写自己的dojo扩展
http://www.nirvanastudio.org/javascript/%e7%bc%96%e5%86%99%e8%87%aa%e...

JavaScript高级程序设计

来源:Nirvana Studio
profession-javascript-cover.jpg

基本信息

  • 【英文名】Professional JavaScript for Web Developers
  • 【作者】Nicholas C. Zakas
  • 【译者】曹力 张欣
  • 【ISBN】7115152098
  • 【出版时间】2006-9-15
  • 【页码】670
  • 【原出版社】Wrox
  • 【简介】本书从最早期Netscape浏览器中的Javascript开始讲起,直到当前它对XML和Web服务的具体支持,展示了如何充分利用这种功能强大的语言开发自己的应用程序,以解决当今Web开发者面对的商业问题。
  • 活动主页

译者序

亲爱的读者:

当您从书架上拿出这本书的时候,我想您肯定对Ajax技术有着浓厚的兴趣,而本书也正是您的正确选择。本书的作者Nicholas C. Zakas用通俗易懂的语言,将JavaScript的诞生、现在的状况、未来的发展和与其紧密相关的各种技术一一详尽地叙述出来,刚学 JavaScript的朋友,可以按部就班成为高手,而已经是高手的朋友,则可以将本书作为参考手册。

第1章讲述了JavaScript的起源,给大家一个关于JavaScript正确的认知。

第2~5章详细介绍了JavaScript语言本身,揭示了一些JavaScript不为认知的语言特点。

第6~9章介绍了JavaScript和浏览器进行交互的一些基础知识和一些进阶知识,如DOM的基础、正则表达式。

第10~13章介绍了一些更加高级的JavaScript技巧,这些技巧可以构建良好的客户端逻辑,包括表格排序、拖动等。

第14章关于错误处理的内容,既有如何编程处理JavaScript错误,也包含了如何调试JavaScript的方法,而调试一直是JavaScript的弱项。

第16、17章讲述了利用JavaScript进行客户端到服务器的同学,不仅仅介绍了现在的Ajax技术的基础XML HTTP Request,还介绍了曾经出现过的一些方法。第17章更明确的介绍了如何调用Web服务。

第19章,介绍了如何考虑生产环境中JavaScript所需要注意的一些事情,如安全性、性能等。

第20章,展望了JavaScript未来的发展。

本书除了介绍了JavaScript的各个方面外,更难得的是,作者更涵盖了现今各个流行浏览器之间在这些方面的区别,并帮助读者,解决这些问题。

本书第1~5章由张欣翻译,第6~20章由曹力翻译,全书由张欣统稿、润色及审校。还要感谢全体工作人员的努力才将本书完成。

我们深深地感我们的家人和朋友。在翻译过程中,他们给予了我们莫大的关心、支持和帮助。

限于我们的水平,翻译过程中的疏漏和错误再作难免,请广大读者批评指正。

曹力
2006年于东南大学

目录

第1章  JavaScript是什么 1
1.1 历史简述 1
1.2 JavaScript实现 2
1.2.1 ECMAScript 3
1.2.2 DOM 5
1.2.3 BOM 8
1.3 小结 8
第2章 ECMAScript基础 9
2.1 语法 9
2.2 变量 10
2.3 关键字 12
2.4 保留字 12
2.5 原始值和引用值 13
2.6 原始类型 13
2.6.1 typeof运算符 14
2.6.2 Undefined类型 14
2.6.3 Null类型 15
2.6.4 Boolean类型 15
2.6.5 Number类型 15
2.6.6 String类型 17
2.7 转换 18
2.7.1 转换成字符串 18
2.7.2 转换成数字 19
2.7.3 强制类型转换 20
2.8 引用类型 22
2.8.1 Object类 22
2.8.2 Boolean类 23
2.8.3 Number类 23
2.8.4 String类 24
2.8.5 instanceof运算符 28
2.9 运算符 28
2.9.1 一元运算符 28
2.9.2 位运算符 32
2.9.3 Boolean运算符 37
2.9.4 乘性运算符 40
2.9.5 加性运算符 41
2.9.6 关系运算符 42
2.9.7 等性运算符 43
2.9.8 条件运算符 45
2.9.9 赋值运算符 45
2.9.10 逗号运算符 46
2.10 语句 46
2.10.1 if语句 46
2.10.2 迭代语句 47
2.10.3 有标签的语句 48
2.10.4 break语句和continue语句 48
2.10.5 with语句 50
2.10.6 switch语句 50
2.11 函数 51
2.11.1 无重载 53
2.11.2 arguments对象 53
2.11.3 Function类 54
2.11.4 闭包 56
2.12 小结 57
第3章 对象基础 58
3.1 面向对象术语 58
3.1.1 面向对象语言的要求 58
3.1.2 对象的构成 59
3.2 对象应用 59
3.2.1 声明和实例化 59
3.2.2 对象引用 59
3.2.3 对象废除 59
3.2.4 早绑定和晚绑定 60
3.3 对象的类型 60
3.3.1 本地对象 60
3.3.2 内置对象 70
3.3.3 宿主对象 75
3.4 作用域 75
3.4.1 公用、受保护和私有作用域 75
3.4.2 静态作用域并非静态的 76
3.4.3 关键字this 76
3.5 定义类或对象 78
3.5.1 工厂方式 78
3.5.2 构造函数方式 80
3.5.3 原型方式 80
3.5.4 混合的构造函数/原型方式 81
3.5.5 动态原型方法 82
3.5.6 混合工厂方式 83
3.5.7 采用哪种方式 84
3.5.8 实例 84
3.6 修改对象 86
3.6.1 创建新方法 86
3.6.2 重定义已有方法 87
3.6.3 极晚绑定 88
3.7 小结 88
第4章 继承 89
4.1 继承机制实例 89
4.2 继承机制的实现 90
4.2.1 继承的方式 90
4.2.2 一个更实际的例子 96
4.3 其他继承方式 100
4.3.1 zInherit 100
4.3.2 xbObjects 104
4.4 小结 108
第5章 浏览器中的JavaScript 109
5.1 HTML中的JavaScript 109
5.1.1 〈script/〉标签 109
5.1.2 外部文件格式 110
5.1.3 内嵌代码和外部文件 111
5.1.4 标签放置 111
5.1.5 隐藏还是不隐藏 113
5.1.6 〈noscript/〉标签 113
5.1.7 XHTML中的改变 114
5.2 SVG中的JavaScript 116
5.2.1 SVG基础 116
5.2.2 SVG中的〈script/〉标签 117
5.2.3 SVG中的标签放置 118
5.3 BOM 119
5.3.1 window对象 119
5.3.2 document对象 130
5.3.3 location对象 133
5.3.4 navigator对象 135
5.3.5 screen对象 136
5.4 小结 137
第6章 DOM基础 138
6.1 什么是DOM? 138
6.1.1 XML简介 138
6.1.2 针对XML的API 141
6.1.3 节点的层次 141
6.1.4 特定语言的DOM 144
6.2 对DOM的支持 145
6.3 使用DOM 145
6.3.1 访问相关的节点 145
6.3.2 检测节点类型 146
6.3.3 处理特性 147
6.3.4 访问指定节点 148
6.3.5 创建和操作节点 150
6.4 HTML DOM特征功能 155
6.4.1 让特性像属性一样 155
6.4.2 table方法 156
6.5 遍历DOM 158
6.5.1 NodeIterator 158
6.5.2 TreeWalker 163
6.6 测试与DOM标准的一致性 165
6.7 DOM Level 3 166
6.8 小结 166
第7章 正则表达式 167
7.1 正则表达式支持 167
7.1.1 使用RegExp对象 168
7.1.2 扩展的字符串方法 169
7.2 简单模式 170
7.2.1 元字符 170
7.2.2 使用特殊字符 170
7.2.3 字符类 172
7.2.4 量词 174
7.3 复杂模式 177
7.3.1 分组 177
7.3.2 反向引用 178
7.3.3 候选 179
7.3.4 非捕获性分组 180
7.3.5 前瞻 181
7.3.6 边界 182
7.3.7 多行模式 183
7.4 理解RegExp对象 184
7.4.1 实例属性 184
7.4.2 静态属性 185
7.5 常用模式 186
7.5.1 验证日期 187
7.5.2 验证信用卡号 188
7.5.3 验证电子邮件地址 192
7.6 小结 193
第8章 检测浏览器和操作系统 194
8.1 navigator对象 194
8.2 检测浏览器的方式 194
8.2.1 对象/特征检测法 194
8.2.2 user-agent字符串检测法 195
8.3 user-agent字符串简史 196
8.3.1 Netscape Navigator 3.0与 IE3.0 196
8.3.2 Netscape Communicator 4.0与IE 4.0 197
8.3.3 IE 5.0及更高版本 198
8.3.4 Mozilla 198
8.3.5 Opera 200
8.3.6 Safari 201
8.3.7 结语 201
8.4 浏览器检测脚本 201
8.4.1 方法学 202
8.4.2 第一步 202
8.4.3 检测Opera 204
8.4.4 检测Konqueror/Safari 206
8.4.5 检测IE 208
8.4.6 检测Mozilla 209
8.4.7 检测Netscape Communicator 4.x 210
8.5 平台/操作系统检测脚本 211
8.5.1 方法学 211
8.5.2 第一步 212
8.5.3 检测Windows操作系统 212
8.5.4 检测Macintosh操作系统 214
8.5.5 检测Unix操作系统 214
8.6 全部脚本 215
8.7 例子:登录页面 219
8.8 小结 224
第9章 事件 225
9.1 今天的事件 225
9.2 事件流 226
9.2.1 冒泡型事件 226
9.2.2 捕获型事件 227
9.2.3 DOM事件流 228
9.3 事件处理函数/监听函数 229
9.3.1 IE 230
9.3.2 DOM 231
9.4 事件对象 232
9.4.1 定位 233
9.4.2 属性/方法 233
9.4.3 相似性 235
9.4.4 区别 238
9.5 事件的类型 240
9.5.1 鼠标事件 240
9.5.2 键盘事件 244
9.5.3 HTML事件 246
9.5.4 变化事件 251
9.6 跨平台的事件 252
9.6.1 EventUtil对象 252
9.6.2 添加/删除事件处理函数 252
9.6.3 格式化event对象 254
9.6.4 获取事件对象 258
9.6.5 示例 259
9.7 小结 260
第10章 高级DOM技术 261
10.1 样式编程 261
10.1.1 DOM样式的方法 263
10.1.2 自定义鼠标提示 264
10.1.3 可折叠区域 265
10.1.4 访问样式表 266
10.1.5 最终样式 270
10.2 innerText和innerHTML 271
10.3 outerText和outerHTML 273
10.4 范围 274
10.4.1 DOM中的范围 274
10.4.2 IE中的范围 284
10.4.3 范围在实际中的应用 288
10.5 小结 288
第11章 表单和数据完整性 289
11.1 表单基础 289
11.2 对〈form/〉元素进行脚本编写 291
11.2.1 获取表单的引用 291
11.2.2 访问表单字段 291
11.2.3 表单字段的共性 292
11.2.4 聚焦于第一个字段 292
11.2.5 提交表单 293
11.2.6 仅提交一次 294
11.2.7 重置表单 295
11.3 文本框 295
11.3.1 获取/更改文本框的值 296
11.3.2 选择文本 297
11.3.3 文本框事件 298
11.3.4 自动选择文本 298
11.3.5 自动切换到下一个 299
11.3.6 限制textarea的字符数 300
11.3.7 允许/阻止文本框中的字符 301
11.3.8 使用上下按键操作数字文本 306
11.4 列表框和组合框 308
11.4.1 访问选项 309
11.4.2 获取/更改选中项 309
11.4.3 添加选项 310
11.4.4 删除选项 311
11.4.5 移动选项 312
11.4.6 重新排序选项 313
11.5 创建自动提示的文本框 313
11.5.1 匹配 314
11.5.2 内部机制 314
11.6 小结 316
第12章 表格排序 317
12.1 起点——数组 317
12.2 对单列的表格排序 319
12.2.1 比较函数 320
12.2.2 sortTable()函数 320
12.3 对多列表格进行排序 323
12.3.1 比较函数生成器 323
12.3.2 修改sortTable()方法 324
12.3.3 逆序排列 325
12.3.4 对不同的数据类型进行排序 327
12.3.5 高级排序 330
12.4 小结 334
第13章 拖放 335
13.1 系统拖放 335
13.1.1 拖放事件 336
13.1.2 数据传输对象dataTransfer 341
13.1.3 dragDrop()方法 345
13.1.4 优点及缺点 346
13.2 模拟拖放 346
13.2.1 代码 347
13.2.2 创建放置目标 349
13.2.3 优点及缺点 352
13.3 zDragDrop 352
13.3.1 创建可拖动元素 352
13.3.2 创建放置目标 353
13.3.3 事件 353
13.3.4 例子 354
13.4 小结 355
第14章 错误处理 356
14.1 错误处理的重要性 356
14.2 错误和异常 357
14.3 错误报告 358
14.3.1 IE(Windows) 358
14.3.2 IE(MacOS) 359
14.3.3 Mozilla(所有平台) 359
14.3.4 Safari(MacOS) 360
14.3.5 Opera 7(所有平台) 361
14.4 处理错误 362
14.4.1 onerror事件处理函数 362
14.4.2 try...catch语句 365
14.5 调试技巧 370
14.5.1 使用警告框 370
14.5.2 使用Java控制台 371
14.5.3 将消息写入JavaScript控制台 (仅限Opera 7+) 372
14.5.4 抛出自定义错误 372
14.5.5 JavaScript校验器 373
14.6 调试器 374
14.6.1 Microsoft Script Debugger 374
14.6.2 Venkman 376
14.7 小结 383
第15章 JavaScript中的XML 384
15.1 浏览器中的XML DOM支持 384
15.1.1 IE中的XML DOM支持 384
15.1.2 Mozilla中XML DOM支持 388
15.1.3 通用接口 393
15.2 浏览器中的XPath支持 403
15.2.1 XPath简介 403
15.2.2 IE中的XPath支持 404
15.2.3 Mozilla中的XPath支持 404
15.3 浏览器中的XSLT支持 408
15.3.1 IE中的XSLT支持 410
15.3.2 Mozilla中XSLT支持 413
15.4 小结 415
第16章 客户端与服务器端的通信 416
16.1 cookie 416
16.1.1 cookie的成分 416
16.1.2 其他安全限制 417
16.1.3 JavaScript中的cookie 417
16.1.4 服务器端的cookie 419
16.1.5 在客户端与服务器端之间传递cookie 422
16.2 隐藏框架 423
16.3 HTTP请求 426
16.3.1 使用HTTP首部 428
16.3.2 实现的复制品 429
16.3.3 进行GET请求 430
16.3.4 进行POST请求 430
16.4 LiveConnect请求 431
16.4.1 进行GET请求 431
16.4.2 进行POST请求 433
16.5 智能HTTP请求 435
16.5.1 get()方法 435
16.5.2 post()方法 438
16.6 实际使用 439
16.7 小结 439
第17章 Web服务 440
17.1 Web服务快速入门 440
17.1.1 Web服务是什么? 440
17.1.2 WSDL 441
17.2 IE中的Web服务 443
17.2.1 使用WebService组件 444
17.2.2 WebService组件例子 445
17.3 Mozilla中的Web服务 447
17.3.1 加强的特权 447
17.3.2 使用SOAP方法 448
17.3.3 使用WSDL代理 451
17.4 跨浏览器的方案 454
17.4.1 WebService对象 454
17.4.2 Temperature 服务 456
17.4.3 使用TemperatureService对象 458
17.5 小结 458
第18章 与插件进行交互 459
18.1 为何使用插件 459
18.2 流行的插件 460
18.3 MIME类型 460
18.4 嵌入插件 461
18.4.1 加入参数 461
18.4.2 Netscape 4.x 462
18.5 检测插件 462
18.5.1 检测Netscape式插件 463
18.5.2 检测ActiveX插件 467
18.5.3 跨浏览器检测 469
18.6 Java applet 470
18.6.1 嵌入applet 470
18.6.2 在JavaScript中引用applet 471
18.6.3 创建applet 471
18.6.4 JavaScript到Java的通信 472
18.6.5 Java到JavaScript的通信 475
18.7 Flash动画 477
18.7.1 嵌入Flash动画 477
18.7.2 引用Flash动画 478
18.7.3 JavaScript到Flash的通信 478
18.7.4 Flash到JavaScript通信 481
18.8 ActiveX控件 483
18.9 小结 485
第19章 部署问题 486
19.1 安全性 486
19.1.1 同源策略 486
19.1.2 窗口对象问题 487
19.1.3 Mozilla特有的问题 488
19.1.4 资源限制 490
19.2 国际化 491
19.2.1 使用JavaScript检测语言 491
19.2.2 策略 492
19.2.3 字符串的思考 492
19.3 优化JavaScript 495
19.3.1 下载时间 495
19.3.2 执行时间 499
19.4 知识产权的问题 512
19.4.1 混淆 512
19.4.2 Microsoft Script Encoder(仅IE) 513
19.5 小结 514
第20章 JavaScript的未来 515
20.1 ECMAScript 4 515
20.1.1 Netscape的提案 515
20.1.2 实现 521
20.2 ECMAScript for XML 522
20.2.1 途径 522
20.2.2 for each..in循环 524
20.2.3 新的类 524
20.2.4 实现 532
20.3 小结 532
索引

灌水者的Blog方式

灌水的人喜欢重复发帖,我就是这样一个家伙,呵呵
所以我打开了Live Space的电子邮件发布,Blogger又支持当发布新文章的时候,将新的文章,发送到指定的电子邮件,所以我可以通过Blogger,直接同步Live Space的内容,省去了我灌水的麻烦了,呵

Blogger is better than Live Space

Live Space(原来的MSN Space) 总的来说要更加像个交际社区,Blogger则是个更加专业的Blog系统。
Live Space现在相当臃肿和复杂,显示速度相当慢,虽然是界面可订制,但是和Blogger的可以直接编辑模版来说还差一些。
Blogger的操作总体来说还比较方便,新版的Blogger放弃了静态发布,使用了动态缓存,这样操作就更加方便了,将Blog发布到其他的网站上去的功能,似乎对一般人来说,也没有什么特别大的用途,Label的使用,也十分方便,虽然没有分类,另外就是除了不知道什么时候Blogspot会在被封之外。
Live Space的优势在于和Live Messenger的集成,同时现在似乎想把Messenger的一些功能都做到网站上去,更像一个SNS了。

《木桶定律》

西武/编著 机械工业出版社/出版

对于企业的发展,有一个非常恰当的比喻——“木桶定律”:一只木桶盛水的多少,并 不取决于桶壁上最长的那块木板,而恰恰取决于桶壁上最短的那块木板。人们把这一规律总 结成为“木桶定律”,“木桶理论”或“木桶效应”,本书中则统一称之为“木桶定律”。

根据这一核心内容,木桶定律还有三个推论:

——只有构成木桶的所有木板都足够高,木桶才能盛满水;

——所有木板比最低木板高出的部分都是没有意义的,高的越多,浪费越大;

——要想增加木桶的容量,应该设法加高最低木板的高度,这是最有效也是最直接的途 径。

木桶定律告诉我们:一只沿口不齐的木桶,盛水的多少,不在于木桶上最长的那块木板 ,而在于最短的那块木板,要想提高水桶的整体容量,不是去加长最长的那块木板,而是要 下功夫依次补齐最短的木板。

你可以很容易发现木桶和企业的共同之处,即构成系统的各个部分往往是优劣不齐的, 劣质部分往往决定了整个系统的水平。因为,最短的木板在对最长的木板起着限制和制约作 用,从而决定了整个系统的战斗力,影响了整个系统的综合实力。

因此,一个组织,不是单靠在某一方面的超群和突出就能立于不败之地的,而是要看整 体的状况和实力;一个团体,是否具有强大的竞争力,往往取决于其是否存在突出的薄弱环 节。劣势决定优势,劣势决定生死,这是市场竞争的残酷法则。

引申到企业管理中来,制约企业发展的往往是少数的,一二个重要的、关键的问题,如 管理能力、资金、技术、人才问题等。如果我们把企业当成一只木桶,而把 企业经营所需要 的各种资源与要素比喻成组成木桶的每一块木板,比如:资金、技术、人才、产品、营销、 管理等等,那么一个企业取得业绩的大小,则取决于 企业资源中最短缺的资源和要素。

换个角度说,在企业的销售能力、市场开发能力、服务能力、生产管理能力中,如果某 一方面的能力稍低,就很难在市场上长久获利。

其实,一个企业做的再好,管理上都有潜力可挖,换句话说,每个企业都有它的薄弱环 节,正是这些环节使企业许多资源闲置甚至浪费,发挥不了应有的作用。如常见的互相扯皮 、决策低效、实施不力等薄弱环节,都严重地影响并制约着企业的发展。

因此,企业要想做好、做强,必须从产品设计、价格政策、渠道建设、品牌培植、技术 开发、财务监控、队伍培育、文化理念、战略定位等各方面一一做到位才行。任何一个环节 太薄弱都有可能导致企业在竞争中处于不利位置,最终导致失败的恶果。

第一篇

测试一下~~