﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-fantasybei</title><link>http://www.blogjava.net/fantasybei/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:02:52 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:02:52 GMT</pubDate><ttl>60</ttl><item><title>JSP2.0技术手册</title><link>http://www.blogjava.net/fantasybei/archive/2008/04/03/190668.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Thu, 03 Apr 2008 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/04/03/190668.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/190668.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/04/03/190668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/190668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/190668.html</trackback:ping><description><![CDATA[<font style="background-color: #c7edcc">ftp://book:book@222.214.218.61/book5/20080402/da1339dc-8acb-41a1-92a7-da2abf126e5c.pdf</font>
<img src ="http://www.blogjava.net/fantasybei/aggbug/190668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-04-03 17:36 <a href="http://www.blogjava.net/fantasybei/archive/2008/04/03/190668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)Richard Stallman和自由软件运动</title><link>http://www.blogjava.net/fantasybei/archive/2008/03/22/187932.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Sat, 22 Mar 2008 12:06:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/03/22/187932.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/187932.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/03/22/187932.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/187932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/187932.html</trackback:ping><description><![CDATA[Richard Stallman和自由软件运动
<h3>
<h3>作者：徐继哲 <a href="http://www.billxu.com/">http://www.billxu.com</a> </h3>
人类的进化史是一部人类为争取自由的战争史。虽然我不是人类学家，但这不妨碍我相信，在人类历史初期，人们所面临的主要困境是来自大自然的考验，比如：饥饿、严寒，还有那只隔壁山洞里嗷嗷乱叫的老虎。那时虽然环境艰苦，但人们是自由的，人与人之间是分享的、协作的。随着人类的&#8220;进步&#8221;，矛盾也逐渐由人与自然转变成人与人之间。我们从简单自由的原始社会进化到了尔虞我诈的商业社会，我们从通讯只能靠吼进化到了天涯比邻的信息时代。我们获得了更多的关于宇宙的知识，我们拥有了更加新进的技术，我们开始自以为无所不能。面对浩瀚的宇宙，我们不再敬畏，甚至已经对其置之不理。我们关注的是如何在竞争中取胜，如何通过专利限制他人。这时，一些原始社会的考验又重新回到了我们的身边：饥饿与严寒。不过，这次他们不再是来自大自然，而是来自那些利欲熏心的人们。现代社会正在将自由、分享、协作从我们身边赶走，我们还剩下什么呢？带着你的爱人和孩子去看看属于宇宙的太阳从地平线落下吧。不！它已经被固体可吸入颗粒漂浮物和高楼大厦挡住。我们剩下的只有回到钢筋水泥的山洞里为了晚餐和房贷的苦苦挣扎。在此，我不仅想和大家强调古人已经说过的&#8220;天下兴亡，匹夫有责&#8221;，我还想告诉大家计算机软件的历史也与此类似。<br />
<br />
<big><span style="font-weight: bold">软件天生就是自由的！</span></big><br />
<br />
最初的计算机就像我们先人发明的算盘一样，只有硬件，没有软件，是一个纯粹的机械装置。直到20世纪中叶，随着电子管、晶体管的发明，计算机的电子成分才超越了机械成分，逐步演化成了现在的电子计算机，在这个过程中，出现了软件，并起到越来越重要的作用，最终成为了计算机的灵魂。最初的软件世界里，当然没有自由软件、专有软件、开源软件这些概念，因为软件天生就是自由的，公司在出售的硬件里附带了软件，包括源代码和文档。人们根据自己的需要，修改软件，自由地使用硬件，人与人之间互相分享，协作。关于这方面的经典故事就是Richard Stallman经常举例的&#8220;打印机驱动程序&#8221;的故事，它生动地展现了软件从天生的自由转向后天的不自由给人们带来的影响。<br />
<br />
在哈佛大学读书的时候，Richard Stallman开始在MIT人工智能实验室工作了，成为程序员社团的一份子，大家彼此分享软件，共同努力增长人类知识，这是生活的一部分。 MIT人工智能实验室买的第一台打印机附带有驱动程序的源代码，MIT人工智能实验室的黑客们可以自己修复打印机驱动程序的bug，或者根据自己的需要修改打印机的驱动程序，这为他们的工作带来了很大的方便。后来， MIT又买了一台激光打印机，这次厂商只提供了二进制的打印机驱动程序，它是MIT仅有的一个没有源代码的软件。出于工作的需要，Richard Stallman想修改一下这个驱动程序，但是他无法做到，因为他没有驱动程序源代码。后来 Richard Stallman听说卡内基.梅隆大学有这个打印机的驱动程序源代码，他就去了那里，对他们说：&#8220;我是来自MIT的朋友，能不能把打印机驱动程序的源代码给我拷贝一份？&#8221;。Richard认为大家都属于计算机社团，他们肯定会给他源代码。但是他们拒绝了他。因为他们和厂商签署了一份保密协议，协议要求他们不能向别人拷贝源代码。顿时Richard Stallman感到他们背叛了自由的计算机社团，非常生气，一句话没说就回去了。<br />
<br />
<big><span style="font-weight: bold">上帝说：&#8220;创造Richard Stallman吧！&#8221;</span></big><br />
<br />
随着计算机工业的飞速发展，从20世纪70年代开始，原本自由的计算机社团渐渐地发生了变化，新兴的计算机公司从自由的计算机社团里雇佣走了大量的黑客，开发专有软件。他们在分发软件的时候不再附带源代码，剥夺了人们通过修改软件来使用计算机的自由，通过许可协议，将人与人之间的分享、协作赶走了。 Richard Stallman成为留在MIT人工智能实验室的最后一名黑客，自由的计算机社团濒临崩溃。1976年2月3日，比尔&#183;盖茨发表了著名的《致电脑爱好者的一封公开信》，抱怨未经授权使用Altair BASIC的情况太普遍，掀开了通过专有软件剥夺人们自由使用计算机的大幕。也正是从这时起，软件群体逐渐分化成自由软件社团和专有软件公司两大阵营。<br />
<br />
<img style="width: 444px; height: 575px" alt="the open letter" src="http://www.billxu.com/friend/rms/bill.gates.open.letter.little.jpg" /><br />
<br />
<span style="font-weight: bold">（Bill Gates: 致电脑爱好者的公开信）</span><br />
<br />
上帝说：&#8220;创造Richard Stallman吧，由他去发动一场捍卫人类在数字时代自由的战役！&#8221;。因为这不仅仅是一个技术问题，更是一个社会问题、伦理道德问题。既然软件是计算机的灵魂，那么它必须是自由的，不能被少数的专有软件公司所控制。很显然，首要的任务是开发一个自由的操作系统，于是Stallman发起了GNU工程（<a href="http://www.gnu.org/">http://www.gnu.org</a>)，为了保证自由软件运动能够长期发展下去，他创立了自由软件基金会（<a href="http://www.fsf.org/">http://www.fsf.org</a>)。在法律方面，他创造性地提出并实现了&#8220;对称版权（copyleft，笔者认为在此之前copyleft的中文翻译都不够好，所以创造了&#8220;对称版权&#8221;这个中文翻译，我将会在后续的文章里解释为什么&#8220;对称版权&#8221;能更好地反应copyleft的内涵）&#8221;，GNU GPL等。经历多年的自由软件运动之后，现在我们再次拥有了自由的、完整的操作系统：GNU/Linux，在GNU GPL授权保护下，我们拥有了大量的自由软件包。现在，只要坚持使用自由软件，我们再次拥有了控制自己计算机的自由。<br />
<br />
1953年，Richard Stallman生于美国纽约曼哈顿区。在度过了并不快乐的童年之后，他在哈佛大学找到了自己的家。在MIT人工智能实验室工作期间，展露出了自己的计算机天赋。对他来说，开发操作系统就像喝水一样，是件很自然的事情，他主要的计算机软件作品包括：emacs、gcc、gdb等。随着专有软件的日渐流行和自由软件社团的日渐瓦解，Richard Stallman作为自由软件运动的领袖走上了历史舞台，为了捍卫人类在数字时代的自由，他高瞻远瞩，坚持原则，不为各种诱惑多动，始终将自由凌驾于其他任何东西之上，展现出了高尚的道德情操，让世人景仰。如今Richard Stallman已经功成名就，誉满全球，他是麦克阿瑟天才奖得主、美国国家工程院院士、美国艺术与科学院院士、数个大学的名誉教授等等。和这些名头比起来，大家更习惯把他称为自由软件运动的领袖，对此，他是当之无愧的无冕之王！<br />
<br />
在2005年9月Stallman访华期间，我和洪峰、宫敏一起陪同他参加各种活动。生活中的Richard Stallman更像一个和蔼、安静的大叔，但偶尔也会暴躁、强硬。他酷爱中国美食，访问期间的每顿饭都给他安排不同的风味，都是他自己亲自点菜，并且详细询问每道菜的原材料，做法等细节问题，除了好奇之外，也要非常明确地知道自己吃了什么东西（需要知道菜的源代码），他不爱吃辣的东西，也不爱吃苦的龟苓膏。在吃饭的时候，他习惯于一边吃东西，一边打开笔记本电脑，记下自己的吃后感，然后发表到他在自由软件基金会网站的博客上。他不吸烟，也禁止他人在饭桌上吸烟，唯一的一次例外是容忍了宫敏博士的一支烟，因为在陪同Stallman期间他已经憋的太久没有吸烟啦。Stallman讨厌任何形式的运动，认为运动很无聊。所以看到他日渐增大的肚子，我很担心他的身体状况。<br />
<br />
Stallman衣着简朴，不追求物质享受，如果估量一下他全身上下的衣着、随身的背包，价值应该在100元人民币以内，而且这些衣物几乎都是朋友赠送的。在北京期间，Stallman穿的鞋已经坏的不行了，我和洪峰在双安商场为他买了一双新鞋。伟大的Richard Stallman在买东西上并不那么伟大，面对琳琅满目的鞋子，Stallman说的最多的就是&#8220;I don't know和I am not sure.&#8220;。Stallman喜欢舒适的运动鞋，他的脚很大，我们找了半天也没找到合适的。在试鞋的时候，Stallman最强调的就是要防滑。有一次，他在瑞士访问期间滑倒了，胳膊卡到了楼梯櫈上，先后动了3次手术，现在左臂肘关节上还留有明显的伤疤。所以他现在最怕的就是滑到，要求鞋子能够帮助他站稳了。即便在这样的情况下，他仍然拒绝购买登山类的鞋子，他认为这样的鞋具有一些他不需要的特殊功能，另外这样的鞋也要更贵一些，他不想给朋友们造成经济负担。我们最终选择了一个白色的上面带有红色五星的CONVERSE牌子的运动鞋，价格是335元人民币，洪峰恰好身上没带那么多现金，他付了300元，我帮忙支付了35元，后来回到住处后，洪峰坚持还给了我那35元钱。另外，在买鞋的时候，Stallman抵制了adidas，nike这样的品牌，他说：&#8220;我只想买个鞋子，不想做广告&#8221;。<br />
<br />
<img style="width: 600px; height: 450px" alt="RMS tried the shoes" src="http://www.billxu.com/friend/rms/try.shoes.jpg" /><br />
<br />
<span style="font-weight: bold">（Richard正在双安商场试鞋）</span><br />
<br />
为了在最大范围内推广自由软件，我帮助安排Richard Stallman和洪峰在新浪网做了一期在线视频直播节目，这样的活动在国内尚属首次。时下互联网媒体正助涨着全民走向娱乐的深渊，让 Stallman挤上这个以娱乐为主的舞台，传播自由软件思想，难度是非常大的。为此，我找到了新浪集团副总裁，CTO，李嵩波。李嵩波主管我们研发中心，为人谦和，平易近人，是新浪网的创始人之一，在美国硅谷工作多年之后，回到北京，执掌新浪的技术发展。李嵩波深谙技术，对Richard Stallman也是景仰有加，所以自然大力支持此活动。在李嵩波的亲自安排下，一切得以顺利进行。但有一个技术问题未能解决，国内的在线视频直播系统多采用微软的专有软件系统实现，新浪也是如此。Richard Stallman拒绝用专有软件来传播自由软件思想。这时，有人说如果采用直播的话，会有很多人看到您的在线访谈，非常有助于推广自由软件运动， Stallman的回答是NO，并解释道，如果他不这样坚持原则的话，自由软件运动早已夭折，不会发展到今天。自由软件社团有自由的、优秀的多媒体技术： theora/ogg。在短时间内将直播系统修改成theora/ogg格式难度较大，另外，这还涉及到用户的客户端软件。最后，我们采用了折衷的办法，将整个活动由直播改成录播，最后我将视频由wmv格式转化成theora/ogg格式再发布。<br />
<br />
节目时间是2005年9月16日16：30－17：30，在访谈开始之前，安排了Richard Stallman和李嵩波的会面，在李嵩波的不大，甚至有些简陋的办公室（李嵩波将前任CTO的漂亮办公室改造成了用户体验实验室，用于接待新浪的网友做用户使用性测试，以改进新浪的产品和服务，他选择了旁边的一个小会议室作为自己的办公室）里，李嵩波、Richard Stallman、洪峰、黄冬和我等几个人进行了有趣的交流。Stallman还是一如既往地放松，进屋之后将背包仍到地下，脱下鞋子，开始和大家聊天。说着说着，他突然想起点事情，于是就弯下腰，去地上的背包里翻出一管药膏，然后开始脱袜子，嘴里一边和大家说话，一边往脚上图药膏，这就是 Stallman，百无禁忌，自由自在。能够在新浪集团副总裁的办公室里脱鞋、脱袜子、上药膏的访客也就仅此一位吧。幸福时光总是过的很快，20楼的主持人开始催促我们去上节目了，于是我们大家一起动身去20楼，在20楼新浪巨大的标志前面合影留念。整个录播的过程很顺利，Stallman拥有非常丰富的演讲经验和语言魅力，真是一口地道的纽约腔，倍儿有面子，在翻译的问题上，Stallman拒绝用和翻译交替说话的方式发表演讲，所以大家听到的都是流畅的英文。Stallman掌握面向母语是非英语人群的演讲技巧，所以即便是英语听力不好的朋友也都能听懂大部分内容，他会说的几句中文包括：&#8220;自由不是免费&#8221;，&#8220;曹操&#8221;等。晚上新浪公司宴请Richard Stallman和大家共进晚餐，我的老上级，顾晓斌因小老虎（顾晓斌网名老虎，所以他的小孩昵称是小老虎）生病，未能前往一起晚餐。他特意为 Richard Stallman备了上好的红酒和月饼（后天是中秋佳节），在此感谢晓斌的欣悉关照。<br />
<br />
<img style="width: 600px; height: 450px" alt="we are the world" src="http://www.billxu.com/friend/rms/huangdong.hongfeng.rms.songbo.billxu.jpg" /><br />
<br />
<span style="font-weight: bold">(合影留念，从左到右分别是：黄冬、洪峰、Richard Stallman、李嵩波、徐继哲）</span><br />
<br />
<img style="width: 600px; height: 450px" alt="dinner" src="http://www.billxu.com/friend/rms/discussing.jpg" /><br />
<br />
<span style="font-weight: bold">（我和Richard闲聊，感谢晓斌的红酒和月饼）</span><br />
<br />
2005年9月17日上午，在中科院自动化所安排了一场演讲，下午我们陪他去王府井的外文书店买东西，他买了北京地图，还有他喜欢听的女子十二乐坊的 CD。Stallman对书籍非常挑剔，那天没有选到自己满意的图书。在我们选东西的时候，他得知原本要在深圳接他去香港的朋友要去老丈母娘家过中秋节，不能接他了。他感到有些沮丧和无助。听到这个消息，我也感觉挺气愤，安慰了Stallman，并马上联系深圳的同窗好友卢振国，让他在去深圳机场接 Stallman，并把他带到香港。他到香港后就有人为他安排后续的行程了。在此感谢振国，他在中秋佳节没有陪伴自己的亲人，而是和一个大胡子老外奔走在深圳机场到香港的路上。晚上的安排是去Beijing GNU/Linux User Group作演讲，我和宫敏陪同他前往。到了活动地点，发现BGLUG的成员外国人比例很高，宫敏博士也在私下不无幽默地向我嘀咕&#8220;这里怎么都是洋人啊！&#8221;。虽然在自由软件社团里，我们要摒弃狭隘的民族主义，但北京GNU/Linux用户组如此高的外国人比例，还是让我们感到有些意外，这也反映出自由软件运动已经在西方世界深入人心，根深蒂固。<br />
<br />
<img style="width: 600px; height: 450px" alt="buy cd" src="http://www.billxu.com/friend/rms/buy.vcd.jpg" /><br />
<br />
<span style="font-weight: bold">（Richard喜欢听女子十二乐坊的音乐，正在和宫敏精心挑选她们的CD）</span><br />
<br />
<img style="width: 600px; height: 450px" alt="Beijing GNU/Linux Club" src="http://www.billxu.com/friend/rms/beijing.gnu.linux.club.jpg" /><br />
<br />
<span style="font-weight: bold">（北京GNU/Linux用户组，左侧是宫敏）</span><br />
<br />
2005年9月18日，星期日，中秋佳节，Stallman离开北京，前往深圳，转道香港，继续布道自由软件。北京交通拥赌，我们起早赶往首都国际机场，我担心Stallman没时间吃早餐，去味多美给他买了很多各种口味的点心，这些点心真派上了用场，不至于让我们可爱的大叔饿着肚子上飞机。那天，宫敏为了送Stallman去机场，也没有陪家人过好中秋节。而我和洪峰则快乐地陪着Stallman在机场过了一个快乐的、特殊的中秋节。 Stallman非常珍惜时间，在任何空闲的时间段都会拿出笔记本电脑来工作，在吃饭的时候、在排队的时候、在坐车的时候，只要有时间都会拿出笔记本来开始工作。他用的是一部已经使用很久的IBM T23笔记本电脑，操作系统是Debian GNU/Linux，平时的工作都在控制台下完成，工作环境当然都是emacs，很少去X下面工作，我见过他切换到X下面一次，他的X下只运行着一个 Mozilla浏览器。Stallman收发邮件的方式也非常特别，他在自己的邮件服务器上安装了一个能够将收到的邮件打包压缩的程序，他在接收邮件的时候，就是将这个打包的文件下载下来，在等待下载的时候，他通常会选择玩一些控制台下的小游戏。在处理完邮件之后，会以类似的方式将这些邮件打包发送出去。 Stallman总是奔走于地球的各个地方，这种处理邮件的方式非常适合他的工作。他也会经常收到一些用MS Office写的文章，他会告诉对方读不了这些文件，当然也会拒绝阅读这些文件。<br />
<br />
为了能够在各种场合使用笔记本电脑，充足的电力供应是必须的，他特地为自己的笔记本电脑增加了一组外接电池，在我们一块儿休息或者吃饭的时候，他做的第一件事情就是找电源，给自己的笔记本电脑充电，以便将来能够随时工作。为了能够在站着的情况下也能使用笔记本电脑工作，他发明了一种有趣的方法：将一个长金属导线的两端拴在笔记本显示屏下的两个金属支架上，这样他就可以将这个和笔记本电脑连在一起的绳子套在脖子后面，再把斜挎着的背包放到身体的前面，然后把笔记本电脑放到上面，这样笔记本就被固定了，可以站着工作了。Stallman还是一个细节魔鬼，在办理包裹托运的时候，他会嘱托服务人员撕掉来时贴在箱子上的条码信息，以免和刚刚贴上的产生混淆。这就是Richard Stallman，自由软件运动的领袖，酷爱中国美食的大叔！<br />
<br />
<img style="width: 600px; height: 450px" alt="waitting working" src="http://www.billxu.com/friend/rms/waitting.working.jpg" /><br />
<br />
<span style="font-weight: bold">（洪峰和Richard：等待办理登机卡，不能浪费时间，继续工作）</span><br />
<br />
<big><span style="font-weight: bold">自由软件运动发轫！</span></big><br />
<br />
大家都知道，如果没有操作系统，我们几乎没法使用计算机，可是在1983年，所有的操作系统都是专有软件，我们使用计算机的自由被剥夺了，少数的专有软件件公司控制了我们。于是Richard Stallman决定开发一个全新的、完整的、自由的操作系统，这样人们就可以用自由软件来操作计算机了。所以，请大家注意，自由软件运动的首要目标让用户拥有使用计算机的自由，让社会更加美好，人与人可以自由地共享知识，而不仅仅是要创造高质量的软件。即：自由软件反对的是专有软件，不是商业软件。事实上，Stallman可能是第一个将自由软件商业化的人，在创立自由软件基金会初期，为了能够筹集到资金支持自由软件运动的持续发展，他开始销售emacs磁带，并为用户提供技术支持服务，这和后来那些基于GNU/Linux的公司销售发行版光盘和提供服务没什么区别。在1984年，Stallman放弃了在MIT的工作，发起了GNU工程，次年创立自由软件基金会（FSF）。在那个时候，AT&amp;T发明的 UNIX已经非常流行，在UC Berkeley的努力下，功能已经十分强大，很多老的ITS黑客也都不情愿地转移到了UNIX下，逐渐喜欢上了UNIX的工作环境。为了让用户能够习惯新的、自由的操作系统，Stallman将GNU设计成与UNIX兼容，因此UNIX用户很容易使用GNU操作系统，所以GNU是类UNIX操作系统， GNU ＝＝ GNU&#8216;s Not UNIX。在这个过程中，Stallman挽救了自由软件社团，使之重新走上繁荣之路。<br />
<br />
在法律方面，Richard Stallman和自由软件基金会对人类贡献巨大。前几天，在和一个朋友聊天的时候，他说：&#8220;我知道你支持自由软件，但是不要走极端，去支持盗版&#8221;。听了这样的话，我真是哭笑不得，这也折射出很多人对自由软件运动理解之肤浅和荒谬。事实上，自由软件社团对待法律的严肃程度远远超过了普通人的想象。我们不但不反对版权，反而非常珍视版权。Richard Stallman对现有版权体系（copyright）进行了批判和升华，创造了对称版权（copyleft）。现行的版权系统赋予权力人和用户的权力是不对称的，这种权力的不对称性正在损害人类社会的利益。像微软这样的专有软件公司正是利用了这种权力的不对称性，建立了以损害公众整体利益为基础的商业模式，在短短的20多年间，聚敛了富可敌国的财富。对称版权（copyleft）就是要赋予每个人平等的版权权力，但这不意味着大家的知识也会对称。即：对称版权不能推导出对称知识。这不是谁刻意造成的，这是自然规律。知识必须是公开的，自由的，不能有专利的，但这并不意味着会消除知识壁垒。道理是显然的，要攻克知识壁垒，需要付出稀缺的时间成本，有的时候，付出再多的时间成本也解决不了问题。比如，爱因斯坦的相对论都是公开的，可是地球上没有几个人能够理解，这就是知识壁垒，但是我们每个人都有权力去阅读相对论、去理解相对论。这就是对称版权（copyleft）主张的理念。所以，虽然对称版权 (copyleft）发源自计算机领域，但是它的思想是具有普遍意义的，可以广泛应用于各个领域。在对称版权(copyleft）思想的指导下， Richard Stallman发明了GNU通用公共许可证（GNU GPL），GNU GPL是一个具有法律效力的自由软件许可证，在GNU GPL的保护下，已经涌现出成千上万的优秀的自由软件包。这些自由软件包赋予了用户使用计算机的自由。准确地说，自由软件对于用户来说具有如下4个自由度：<br />
<ul>
    <li>0 出于任何目的，运行软件的自由。
    <li>1 学习软件如何工作，以及为了满足自己的需要修改软件的自由。（显然，这个自由度的前提是能够访问软件的源代码）
    <li>2 为了帮助你的邻居，将软件拷贝给他的自由。
    <li>3 为了能够让整个社团受益，公开发行改进之后的软件的自由。（显然，这个自由度的前提是能够访问软件的源代码） </li>
</ul>
一个完整的操作系统是非常庞大的，是由编辑器、编译器、调试器、函数库、各种实用程序等很多部件组成的。所以，为了得到一个完整的、自由的操作系统，必须重新开发所有这些部件，这需要很长的时间。90年代初，在Richard Stallman和自由软件基金会的带领下，几乎做完了所有的工作，但是GNU操作系统还缺乏一个非常关键的部件：内核。1991年，Linus Torvalds写了一个操作系统内核：Linux。刚开始Linux并不是一个自由软件，但是在1992年，Linus将Linux的许可证改为GNU GPL，因此Linux就成了自由软件。Linux补充了 GNU操作系统的空缺。于是，GNU和Linux结合在一起就变成了一个完整的、自由的操作系统：GNU/Linux。后来GNU/Linux越来越流行。人们发现它不光尊重你的自由，而且功能非常强大，非常稳定可靠，在很多方面都优于专有软件。<br />
<br />
<big style="font-weight: bold">自由软件孕育了互联网</big><br />
<br />
AT&amp;T贝尔实验室在发行UNIX的时候都是附带源代码的，这种发行方式使用户学习、定制、改进UNIX成为可能。在UC Berkeley（加州大学伯克利分校），包括Bill Joy在内的一群天才黑客对UNIX系统进行了仔细研究，并增加了很多特性，以及大量的实用工具，比如vi，csh等等。渐渐地，UC Berkeley已经在UNIX里加入了很多自己的源代码，他们有机会将UNIX转变成自由软件，而且他们后来也真的这么干了，不过那已经是20世纪90 年代初的事情了。在Richard Stallman刚刚发动GNU工程的时候，他就想到了UC Berkeley的UNIX发行版：BSD。他想说服他们将一些他们自己开发的软件转化成自由软件，这样就可以为GNU操作系统节省很多工作量，不必再重新发明轮子了，遗憾的是谈判进展的并不顺利。于是，Stallman决定发动自愿者重新开发操作系统的各个部件。<br />
<br />
不同的人和团体有不同的价值观，在那个历史时期，要求别人理解Stallman的思想是困难的，因为他已经洞悉到了未来，尤其那时正是计算机工业腾飞的黄金时期，现在的许多IT寡头都诞生在那个时期。虽然UC Berkeley没有在第一时间意识到把BSD转化成自由软件的重要性，但还是做了一件具有历史意义的事情：他们在BSD 上实现了TCP/IP。由于UC Berkeley强大的技术实力和良好的发行声誉，使得BSD 成为最流行的UNIX发行版。很多其他操作系统的网络部分都是基于BSD的源代码开发的。所以BSD加速了互联网前进的步伐。经历20世纪90年代初与USL的那场官司之后，UC Berkeley CSRG发布了4.4BSD-Lite Release 2， CSRG小组解散。BSD转变成由来自地球上各个角落的黑客们维护、发展的一套操作系统，并逐渐演化出了NetBSD、FreeBSD、OpenBSD等版本。2003年，在FreeBSD的基础上，又发展出了DragonFlyBSD。这些BSD后裔传承了UC Berkeley严谨的学院派风格，同时又融入了来自互联网的黑客精神。从20世纪90年代初开始，一直发展到现在，在技术、管理等方面一直保持这领先的势头，让人尊敬。<br />
<br />
据Torvalds说，如果没有当初那场官司，他可能不会去搞Linux，而是成为一名BSD黑客。在Linux后来的发展中，从BSD阵营借鉴了大量的源代码，才得以快速发展。不过Linux最终还是和GNU结合在了一起，组成了完整的操作系统：GNU/Linux。因为BSD即没缺过内核，也没缺过实用程序，它从一开始就是一个完整的操作系统。自由软件社团加速了互联网的发展历程，越来越多的节点、网站出现在了互联网上，他们在选择操作系统的时候也都优先选用自由、开放的操作系统：GNU/Linux、*BSD等。如今的巨型互联网公司，像Google，Yahoo!，新浪等，他们的服务基本都是建立在自由软件的基础之上。20年前，自由软件孕育了互联网；如今，自由软件支撑着互联网！<br />
<br />
<big style="font-weight: bold">开源软件：那些放弃了自由的人们！</big><br />
<br />
到1997年为止，自由软件运动已经取得了相当大的成功。那时正值互联网迸发前夜，自由软件的概念也已经从深入民心发展到了华尔街，面临着巨大的商业机会。这时，有一部分自由软件支持者开始好了伤疤忘了疼。面对种种诱惑，他们将自由抛弃了。他们开始强调实用性，强调自由软件是好的开发模式，能够产生高质量的代码；他们开始以商业利益为诱饵去讨好公司的老板们，并提出了开源软件的概念，因为他们担心Richard Stallman的自由主义会吓跑那些唯利是图的商人们。其中的代表人物是Eric Raymond，一个彻头彻尾的实用主义者。专有软件公司们当然希望事态如此发展，所以在他们的蛊惑和支持下，堕落的开源软件概念被迅速普及，电视、互联网、报纸、杂志等各种地方都充斥着&#8220;开源&#8221;，反而自由软件运动的发起者Richard Stallman、自由软件基金会和自由软件正在被人们渐渐遗忘。对于那些不了解自由软件运动历史的年轻人来说，他们一开始接触到的概念很可能就是抛弃了自由的开源概念，这是非常糟糕的。
<p>到此，还有很多读者会说：&#8220;开源软件没什么不好啊，实用没什么错误啊等等？&#8221;。如此发问意味着基本的道德沦丧和人格失忆。实用当然没什么不好，但是为了实用就放弃了自由，那是愚蠢的短视行为。人类能够在地球上生存，需要呼吸、喝水、吃东西、居住等等，而SK-II和Ferrari却不是必须的。现在更多的人们已经意识到了这个问题，我们实在不应该以牺牲人类生存环境为代价来追求虚伪的东西，我们应该立即摒弃这种本末倒置的行为和想法。自由、平等是人类的基本权力，互助、分享是社会的存在基础，每个人都要珍视这些。遗憾的是，大多数现代商业都建立在剥夺人类自由的基础之上，软件业尤其突出。道理非常简单，这样的商业模式是利润最大化的，是容易形成垄断的。牺牲绝大多数人的利益来实现少数人的目标也是古往今来很普遍的做法，当然哪里有压迫哪里就有反抗，只是不同时期使用的手段和技术不同而已。在信息时代，我们以为自己的生活条件改善了，精神就容易懈怠，容易忽略与生俱来的那些珍贵的东西，自由、健康、友情等等。终于，专有软件像流氓一样包围了我们。在自由软件的概念正在被广泛接受和支持的时候，开源软件转移了人们的视线，将人们的思想从自由的高度降到了实用的低度。如果现在你还说这些无所谓，那么当你被抓到纳粹的集中营里任人宰割的时候会是什么心情呢？你害怕了，渴望自由了，渴望生活在阳光下了。在数字时代，这一切来的更隐蔽一些，水是被缓慢加热的，等你感觉到太热的时候，已经无力跳出。现在，你必须敏锐起来，不能等到你的计算机被人控制了、私人信息被泄露了、自己保存的文件被<a href="http://www.billxu.com/friend/rms/zeuux.rms.anti.drm.cn.html">DRM（数字霸权管理）</a>强行删除了、整天被病毒和有中国特色的流氓软件折磨着才做出反抗。那时，你一定会意识到自由的可贵，不过已经晚了。
<p>我们要立刻抛弃开源软件的概念，不要把虐待当成享受，不要好了伤疤忘了疼。通过下图，我们知道自由软件正给我们带来光明；开源软件处在危险的灰色地带，正在左右摇摆不定；专有软件给我们的未来带来灾难。我们要珍视自由，勇敢地作出自己的选择！<br />
<br />
<img style="width: 700px; height: 200px" alt="free software, open source, ...." src="http://www.billxu.com/friend/rms/fs.os.ps.jpg" /><br />
<br />
<span style="font-weight: bold">（自由软件、开源软件、专有软件之间的关系，以及我们应该持有的态度）</span><br />
<br />
<big style="font-weight: bold">专有软件是毒品！</big><br />
<br />
现在我们知道了软件团体如何分化出自由软件社团和专有软件公司，以及从自由软件社团里分裂出开源软件的事实。现在我们探讨一下专有软件的本质。专有软件的商业模式建立在剥夺用户自由、分裂社会的基础上，最终牺牲的是人类社会的自由度，所以专有软件是流氓，是毒品，是数字殖民。包括中国在内的很多国家，人们生活水平不高，版权意识淡泊，无力支付昂贵的专有软件许可证费用，最终习惯了去街边或者盗版专有软件市场花几块钱买上定价在几千元的MS Windows、MS Office和定价在上万元的Oracle回家使用，同时专有软件公司们扛着打击盗版专有软件的大旗来纵容用户使用盗版专有软件，设下一个圈套，等大家都进了这个圈套的时候，专有软件公司们就给这些可怜的人们当头一棒，这是典型的流氓行为。已经有很多公司深受其害，遗憾的是，更多的人和公司还没有觉醒，依然过着这种寄人篱下的悲惨生活。
<p>专有软件公司更加深谋远虑，他们找各种冠冕堂皇的借口向学校免费提供专有软件，本质上是利用学校让学生患上专有软件成瘾症，成为他们的俘虏。可以确定，一旦学生毕业，这些公司再也不给这些人提供同样的、免费的专有软件。只有在学校使用的专有软件才是免费的，一旦你使用成瘾之后，就必须付费了。这些公司利用学校发放毒品，使大家成瘾，依赖这些专有软件公司。如果学校使用专有软件开展计算机科学教育，也将面临一个尴尬的技术问题：一名学生正在使用一个专有软件，他会对其某些设计和实现感到好奇，理所当然，他会问老师，这个功能是如何设计与实现的呢？这时，老师只能若有所思地转动一下眼睛，并尴尬地回答，我也不知道这是如何设计的，而且我们也不被容许知道，我们和专有软件公司签订了许可协议，这一切都是秘密。在这样的情况下，无法展开计算机科学的教育。在开展知识教育的同时，学校也肩负着学生的道德教育，引导学生互助、分享，树立起自己的价值观，人生观，世界观，这将影响到学生的未来和社会的未来。专有软件将分享和互助从学生的身边赶走了，根据专有软件许可协议，为了帮助你的朋友，邻居，你没有权力将软件拷贝给他，只能自己偷偷摸摸地使用，这是一个严重的道德问题，学校的使命是培养未来的一代，使他们能够健康成长，能够独立地生活，给社会带来更加健康、和谐的东西，而不是生产冷冰冰的军事武器。因此学校应该拒绝接受专有软件，并告诉那些专有软件公司，我们不会给学生提供毒品，我们当然也不会给学生提供专有软件。
<p>殖民和殖民地不是新鲜术语，不过我们要警惕在不同的时代的不同手段。在信息时代，稍有不慎，一个国家、一个民族就很可能被数字殖民，被少数人所控制。设想，一个国家的计算机操作系统、数据库、应用软件等都被几个专有软件公司控制，那是什么后果？不但在经济上受制于人，前途未来也蒙上了阴影。专有软件公司鼓惑你将数据都搬进专有软件里，在生活、工作中依赖专有软件，这时，他们就会露出丑恶的嘴脸和殖民的本性。对此，政府必须保持清醒的认识，将命运掌握到自己的手中，必须认识到自由软件为我们提供了千载难逢的机遇。
<p><big style="font-weight: bold">《黑客帝国》图解自由软件、开源软件、专有软件</big><br />
<br />
《黑客帝国》是我最喜欢的电影之一，它不但画面精彩刺激，更重要的是内涵深刻。不像国内的那些大牌导演只会把钱都砸到电脑特技上，剧本简单的一张A4纸都能装下，把观众当成傻瓜。通过上边的赘述，我们已经了解到，如今的软件社团主要包括三种势力：自由软件社团、开源软件社团、专有软件公司。如果你一直坚持读到这里，那么我要感谢你的执着和克制。也到了该放松一下的时候了，现在我们一起通过《黑客帝国》这部电影再次理解这三种势力。但愿你看过《黑客帝国》三部曲，否则无法理解。<br />
<br />
和现在绝大多数人类已经被专有软件控制差不多，在2199年的某个时候，计算机已经控制了地球上的绝大多数人类。计算机设计并实现了一套近乎完美的仿真系统，Matrix，来控制人类。机器像种庄稼一样播种着人类，从出生到死亡人都是被放到一个固定的容器里，为庞大的机器帝国提供电力资源。性爱的快感已经变成了来自Matrix的模拟信号，人类已被完全控制，生活在虚拟的世界里，可自己却全然不知。所以，我们首先请出这一切的主谋和帮凶：专有软件帝国的创始人Bill Gates和Matrix的秘密警察Agent Smith。<br />
<br />
<img style="width: 800px; height: 553px" alt="Gates &amp; Agent" src="http://www.billxu.com/friend/rms/gates.agent.jpg" /><br />
<br />
<span style="font-weight: bold">(Bill Gates &amp; Agent Smith)</span><br />
<br />
在如今这个专有软件还居于主导地位的世界里，Bill Gates正像Agent Smith一样厚颜无耻地扮演着维护世界和平的角色。在外界看起来，他带领的微软帝国正在为了让世界变得更加美好而努力工作，不断开发出新的产品和技术。可事实上呢？他正像计算机创造了Matrix一样，创造了专有软件体系，以牺牲整个人类社会的自由度为代价，实现着自己的人生目标。<br />
<br />
哪里有压迫，哪里就有反抗！和现在已经有很多人通过坚持使用自由软件重新获得了使用计算机的自由的情形相似，在Matrix的严密监控下，还是有一部分人发现了事情的真相，并成功逃离Matrix系统，发动了为争取全人类自由的战役。他们处境艰难，势单力薄，不过他们最大的困难是如何将真理传达给 Matrix系统中的人们，让那些误以为世界很美好的人们理解事情的真相。现在我们全体起立，鼓掌欢迎自由软件运动的领袖Richard Stallman和执着、坚定、矢志不渝的Morpheus，向他们致敬！<br />
<br />
<img style="width: 800px; height: 553px" alt="RMS &amp; Morpheus" src="http://www.billxu.com/friend/rms/rms.morpheus.jpg" /><br />
<br />
<span style="font-weight: bold">(Richard Stallman &amp; Morpheus)</span><br />
<br />
经过Richard Stallman、自由软件基金会和自由软件社团多年艰苦奋斗，在专有软件笼罩的黑色天空，已有很多地方开始泛白，真理的阳光正在更大范围内洒向人间。Richard Stallman先知先觉，发动了自由软件运动，他解救出了更多的人们，自由软件社团得以避免崩溃。在大家的努力下，GNU操作系统羽翼渐丰，可是GNU 的内核，hurd，却一直在产前剧痛，迟迟未能降临。此时，在地球的一个寒冷角落，另一个人也感到了世界有些不对，他迷茫、困惑，下意识地做着一些事情，他开发了一个操作系统内核：Linux，他就是Linus Torvalds。Torvalds是技术天才，但还是个孩子，不了解世界的真相，他需要被引导，走上正确的道路。就像Morpheus找到了Neo一样，在自由软件精神的感召下，Linus Torvalds走上了正确的道路，将Linux改为GNU GPL版权，成为了自由软件，但仅有Linux是没用的，就像如果没有Morpheus的引导，Neo顶多是那家软件公司的高级职员一样。Linux只有和GNU操作系统结合在一起，才能获得新生。幸运的是，最终Linux和GNU结合在了一起，组成了自由的、完整的操作系统：GNU/Linux。（此处需要说明，Linus Torvalds的重要性远远小于Neo；Richard Stallman的重要性远远大于Morpheus。在理解此处的时候，主要从工作内容的角度来考虑，为了体现人物的对应性和娱乐效果，经过前思后想，还是用了这2个人物对照。考虑到近几年Linus思想上的一些变化，这是一个危险的比喻！）现在有请Linus Torvalds和Neo，这两位天真的帅哥。<br />
<br />
<img style="width: 800px; height: 533px" alt="Linus &amp; Neo" src="http://www.billxu.com/friend/rms/linus.neo.jpg" /><br />
<br />
<span style="font-weight: bold">(Linus Torvalds &amp; Neo)</span><br />
<br />
任何一场伟大的战役都需要一个伟大的领袖，也需要一个知名的叛徒。Morpheus找到了Neo，酝酿发动决战。这时，他昔日的战友，Cypher，已经无法继续忍受这种吃不好、穿不暖的生活，而且Trinity也不爱他。他决定回到Matrix系统中，因为那里有美酒、烤肉和女人，Agent还答应把他变成一个明星，会非常的有钱。最终，Cypher背叛了Morpheus。自由软件运动也是如此，在GNU/Linux系统展现出巨大的自由价值之后，有些人开始忘记这场运动的最高目标：自由。他们关注的焦点是自由软件的商业机会，努力讨好那些打着领带的经理们，希望能够从中渔利，他们的代表人物就是Eric Raymond。我们现在就一起看看Eric Raymond和Cypher正在干什么？<br />
<br />
<img style="width: 800px; height: 533px" alt="ESR &amp; Cypher" src="http://www.billxu.com/friend/rms/esr.cypher.jpg" /><br />
<br />
<span style="font-weight: bold">(Eric Raymond &amp; Cypher)</span><br />
<br />
事实上，Eric比Cypher的本事大多了，他不但背叛了自由，还大势宣扬开源的实用性，让人们更关注短期利益，反而渐渐遗忘了自由的可贵。使得努力拼搏得来的一些白色天空开始变得乌云密布。虽然如此，我并不认为开源软件是自由软件的敌人，至少还是我们的盟友，我希望那些整天将&#8220;开源&#8221;挂在嘴边的人士们重新认识自由，回到自由软件社团，一起与专有软件斗争到底。<br />
<br />
如上也算是一个恶搞（parody），全当娱乐。能够帮助大家理解自由软件、开源软件、专有软件这三种势力，以及其中的核心人物。<br />
<br />
<big style="font-weight: bold">新的威胁！</big><br />
<br />
斗转星移，如今的计算环境与23年前自由软件运动发轫之际相比发生了巨大的变化。近些年，又陆续出现了许多新的东西，进一步威胁人类在数字时代的自由，比如数字霸权管理（DRM）、软件专利、可疑计算（treacherous computing）等等。这些新的限制手段都具有非常强的迷惑性，人们很容易上当。前几天，我和Richard Stallman专门就数字霸权管理（DRM）展开了专题讨论，大家参见我的文章<a href="http://www.billxu.com/friend/rms/zeuux.rms.anti.drm.cn.html">《阻击数字霸权，捍卫人类自由》</a>，以后我们会继续专题论述这些新的威胁。面对这些威胁的步步紧逼，自由软件社团已经采取了积极的措施。目前正在地球范围内公开征集GNU GPL v3的修改意见，我们将通过GNU GPL v3阻击这些威胁。在2006年，自由软件社团将越过已经坚守了23年的防线，向专有软件发起进攻。这些威胁关系到我们每一个人的自由，我们不可以袖手旁观，更不能视而不见。天下兴亡，匹夫有责！<br />
<br />
<big style="font-weight: bold">几点期望</big><br />
<br />
经历了23年的自由软件运动之后，自由软件已经取得了巨大的成就，在研究、教育、出版、互联网、IT工业、法律等领域显示出了巨大的价值和旺盛的生命力。为了自由软件运动能够在未来的日子里一如既往地成功，请加入自由软件社团，支持自由软件运动。在此，我有几点具体的期望，希望读者能够在读完此文之后身体力行：<br />
<ul>
    <li>立即将专有软件从你的生活、学习、工作中踢出去，全面采用自由软件。
    <li>当你在称呼一个完整的操作系统时，请用正确的名字：GNU/Linux。
    <li>从开源软件回到自由软件社团的怀抱，以后使用&#8220;自由软件&#8221;这个术语。
    <li>正确认识Richard Stallman、GNU工程和自由软件基金会（FSF）的历史功绩，给予他们应得的关注和尊敬。
    <li>本文属于普及概念性读物，请读者在非商业用途、保持文章完整性、逐字逐句的情况下传播此文章。 </li>
</ul>
<br />
<span style="font-weight: bold; font-style: italic">最后，我呼吁你们加入自由软件社团，义无反顾地投入到为捍卫人类在数字时代自由的战役中！</span><br />
<br />
<hr size="1" />
Copyright Bill Xu</h3>
<img src ="http://www.blogjava.net/fantasybei/aggbug/187932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-03-22 20:06 <a href="http://www.blogjava.net/fantasybei/archive/2008/03/22/187932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript中的数据类型</title><link>http://www.blogjava.net/fantasybei/archive/2008/01/10/174142.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Wed, 09 Jan 2008 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/01/10/174142.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/174142.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/01/10/174142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/174142.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/174142.html</trackback:ping><description><![CDATA[<p><strong>1.undefined</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;undefined只有一个值，即undefined，当声明的变量未初始化时，该变量的值就是undefined<br />
&nbsp;&nbsp;&nbsp;&nbsp;var oTemp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(oTemp==undefined)//true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还可以用typeof运算符，打印出该变量的值undefined<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(typeof oTemp);//undefined&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;undefined并不等于未定义的值，只是没有初始化，但是typeof不区分这两种值,如下面的程序<br />
&nbsp;&nbsp;&nbsp;&nbsp;var oTemp1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(oTemp1);//打印出 undefined<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(oTemp2);//打印出 undefined<br />
尽管只有oTemp2是未定义的，上面两个都是输出undefined，如果直接对oTemp2进行操作，就会出错，如：alert(oTemp2==undefined);当函数没有明确返回值的时候，他返回的也是undefined<br />
<br />
<strong>2.null<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>null也只有一个值，null。值undefined实际上是从null派生来的，ECMAScript把他们定义为相等的，alert(null==undefined);//true&nbsp;&nbsp;&nbsp;虽然他们是相等的，但是表示的意思不同，undefined代表变量未被初始化，null则代表对象尚未存在(注：typeof&nbsp; null返回的是object)<br />
<br />
<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.blogjava.net/fantasybei/aggbug/174142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-01-10 00:01 <a href="http://www.blogjava.net/fantasybei/archive/2008/01/10/174142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】JavaScript 是怎样让互联网变慢的 </title><link>http://www.blogjava.net/fantasybei/archive/2008/01/08/173596.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Tue, 08 Jan 2008 04:38:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/01/08/173596.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/173596.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/01/08/173596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/173596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/173596.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;仅仅一行 JavaScript 代码就能给现今的许多网络日志[1]技术提供动力 -- JavaScript 小应用[2]、共享工具、访问者跟踪、广告客户。在很多时候，一个网志作者所需要的仅仅是一行 JavaScript 代码，用来给自己的网志增加一个新的技术。现在的问题是，假如许多这样的代码累积起来，事情会变成怎样的呢？ <br />
<br />
　　物理学上有一个著名的现象叫做&#8220;非线性&#8221;：大量不同的个体相互作用将产生难以预知的结果。在这一点上，软件也一样 -- 当许多组件被放在一起，就无法知道接下来会发生什么。这是因为，各个组件工作时都当其他组件不存在，实际上，它们正在争夺实实在在的资源和人们的关注。事实是：这场战争伤害了所有的人 -- 读者、网志作者，以及网络服务本身。每个人都体会到了挫折感。 <br />
<br />
　　在这个帖子里，我们将了解是什么使得页面因为过多的 JavaScript 语句而迟滞，以及对此应该采取什么对策。 <br />
<br />
　　网志作者 - 意料之外的受害者 <br />
<br />
　　在网志作者这里存在下来的是新的单调的、微块化[3]的内容。网志作者热爱在他们的网址上展示个性和喜爱的内容。这也是为什么人们急着要安装新的 JavaScript 小应用（例如：来自于del.icio.us，Flickr，Twitter，AddThis，Sphere的 JavaScript 小应用）的原因 -- 因为它们确实有用，而且对于它们有着旺盛的需求。 <br />
<br />
　　如果你熟悉 HTML 和你所使用的网志平台的话，安装 JavaScript 小应用是一项相当容易的工作。你所要做的只是将代表 JavaScript 小应用的 HTML 代码粘贴到你想要放置它的位置。有的时候需要把代码放到 HTML 文档的头部（header），这样做也并不困难。如果你对技术有一定的了解，你就可以这样做，或者通过一个类似于 Widgetbox 的平台自动安装所需的 JavaScript 小应用。 <br />
<br />
　　这样作很容易，因此人们正在往他们的网志里塞入越来越多的 JavaScript 小应用；就是从这时起，一切开始变得让人不那么愉快 -- 例如：载入网志页面所需的时间越来越长。 <br />
<br />
　　不是所有网页小应用都生而相同 <br />
<br />
　　现在有两种实现网页小应用的主要技术：Flash 和 JavaScript。Flash 小应用有它们自己的问题：太重量级、不能改变大小、不能操纵 DOM（文档对象模型）。然而，问题通常却并不是 Flash 小应用带来的，而是 JavaScript 小应用。 <br />
<br />
　　具有讽刺意味的是，JavaScript 一开始就被想象和设计成客户端的一种支持最小交互性和能够迅速操纵 DOM 的轻量级语言。但我们的技术带领我们走上了一条扭曲的发展道路，结果是 JavaScript 逐渐成长为一种网络编程语言。 从 Ajax 到 JavaScript 小应用，JavaScript 如今被用于许多前沿项目。但事实是：JavaScript 有自己的问题。接下来让我们看一下都有那些... <br />
<br />
　　浏览器如何处理 JavaScript 代码 <br />
<br />
　　对于任何一个老练的技术人员来说，也许最令人震惊的真相是：JavaScript 是一个单线程语言。这译为着 JavaScript 代码是顺序而不是并行执行（除了 Ajax 调用的例外情况）。当一段 JavaScript 代码正在被加载和求值时，其他所有代码都必须等待。 <br />
<br />
　　这同时也意味着，一段执行速度很慢的 JavaScript 代码会使整个网志的加载速度变慢。这就是正在网志世界里发生的事情。那么，怎么解决这个问题呢？ <br />
<br />
　　JavaScript 小应用能做到更好更快吗？ <br />
<br />
　　很不幸，对于这个问题不存在什么万试万灵的解决办法。也就是说不存在一种单一的技巧或技术能够解决这个问题。虽然企业能够通过组合一些方法去减轻使用其他 JavaScript 小应用造成的影响，最终 -- 如果使用的 JavaScript 小应用足够多的话 -- 问题还是必定出现。当我们作为一个行业在仔细考虑能够做些什么的时候，JavaScript 提供者应该思考以下一些指导性原则： <br />
<br />
　　1. 推迟 JavaScript 代码的执行 <br />
<br />
　　一个经常被提到的问题是，所哟iud JavaScript 代码都应该在页面载入时立即执行，但实际可以不这样做。假如一段代码不需要在页面载入时修改页面内容，那么这段代码应该被推迟到页面载入后 执行（使用 script 标签的 defer 属性）。这样做，页面的内容就会先显示出来。不走运的是，不是所有的浏览器都会遵守这个延迟的命令。 <br />
<br />
　　2. 尽量减少页面载入时需要执行的代码总量 <br />
<br />
　　在页面载入的同时执行的代码，无一例外都会延缓页面的载入。这种情况下需要运行的代码越少越好。另一个有关的问题是遍历整个页面寻找某些特定的东西。这是一个应该绝对避免的做法，因为这样做会导致浏览器弹出 &#8221;脚本停止响应&#8220; 的对话框。一般来说，运行时间超过一定时间（通常是5秒钟）的 JavaScript 代码会产生这个问题。一个适当（也很痛苦）的解决方案是：使用定时机制 来分割一个较长的执行过程。 <br />
<br />
　　3. 通过生成不同的 URL 对请求做负载均衡 <br />
<br />
　　大多数 JavaScript 代码只提供同一个 URL，例如：www.mycoolwidget.com。这样做不利于系统伸缩（scale）。JavaScript 小应用使用得越广泛，同一个服务器接受到的并发请求的数目就越多。一个更好的尝试是使用不同的 URL，例如像这样：server1.mycoolwidget.com，server2.mycoolwidget.com，等等。当前可以暂时把所有这些 URL 指向同一个域，作为未来分流流量的一个可以选择的后备方案。 <br />
<br />
　　4. 使用标准库 <br />
<br />
　　因为编写 JavaScript 代码容易出错，所以重复发明轮子（reinventing the wheel）的尝试可能是最糟糕的一种做法。JavaScript 与 Java 不同，没有所谓的标准库，但某些库（比如：prototype ）正在变成事实上的标准。这些库由富有经验、了解系统特性的开发者编写，重用他们的代码是一个理想的选择。 <br />
<br />
　　5. 最要重要的是要考虑到别人 <br />
<br />
　　要认识到在最终用户的网站上还运行着其他的 JavaScript 代码，这是最要紧的事情。脑袋里有了 &#8220;我是一个系统的一部分&#8221; 的想法，开发者就能够在最大程度上避免破坏其他 JavaScript 小应用的正常运行，从而带来全面、流畅的用户体验。 <br />
<br />
　　从现在起能做些什么？ <br />
<br />
　　做一个良好 JavaScript 公民是受到鼓励的行为，然而，开发者还可以做得更多。作为开发者，你不能预测你的 JavaScript 小应用会在哪里、会被怎样使用，以及除了你的 JavaScript 小应用之外还安装了什么东西。不了解这些，就无法对代码做进一步的性能调整。而不好的结果却要让网志作者和网志读者来承担。那么我们要怎么做呢？ <br />
<br />
　　如果我们将目光投向 Java 社区，就会看到这个问题已经被解决了许多次。Applet、Servlet 甚至 EJB 在概念上和 JavaScript 小应用都没有什么本质的不同。最主要的差别在于Applet、Servlet 、EJB都被容器管理。 <br />
<br />
　　容器是一种寄存环境，提供传送基础设施和通信界面。容器处理载入、卸载、回调、点击、消息等等所有这些工程师热爱而非技术人士害怕听到的东西。简而言之，我们需要 JavaScript 的容器，从而给混乱的组件带来秩序。 <br />
<br />
　　结论 <br />
<br />
　　JavaScript 小应用和 JavaScript 工具看起来确实很酷，也很有用，但现在还没有合适的基础设施能够保证让它们好好工作。网志载入越来越慢的初始症状现在已经出现，随着更多的 JavaScript 小应用和 JavaScript 代码进入网志的世界，情况会变得更糟。而要求网志作者去理解组合使用 JavaScript 小应用带来的复杂性、相互依赖性等问题显然并不合适。 <br />
<br />
　　我们需要自动化、标准化的方法传送 JavaScript 小应用。我们应该在观念上学习软件行业中已经成功的做法。Java 社区已经取得了巨大的成功，充分利用他们取得的经验对于刚起步的 JavaScript 小应用开发企业来说有着重要的意义。 <br />
<br />
　　和往常一样，请告诉我们你的想法。如果你是一个 JavaScript 小应用开发者，我们很想知道你如何优化你的代码使之对环境更友好、运行得更快。 <br />
<br />
　　Blog 统一译为 网络日志/网志。 <br />
<br />
　　Widget 统一译为 JavaScript 小应用。 <br />
<br />
　　微块化（microchunking）就是把原来不可分割、浑然一体的产品，区分成通用的模块和特殊的模块，或者可以自由组合的模块，最后根据需求的不同，进行不同的排列组合。<br />
<br />
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1754993
<img src ="http://www.blogjava.net/fantasybei/aggbug/173596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-01-08 12:38 <a href="http://www.blogjava.net/fantasybei/archive/2008/01/08/173596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论</title><link>http://www.blogjava.net/fantasybei/archive/2008/01/06/173149.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Sun, 06 Jan 2008 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/01/06/173149.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/173149.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/01/06/173149.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/173149.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/173149.html</trackback:ping><description><![CDATA[本书原书名 An Introduction to the Analysis of Algorithms 在Amazon网站被评为5星<br />
<br />
本书作者为Robert Sedgewick，是算法大师Donald E. Knuth的高徒，拥有斯坦福大学博士学位，昔林斯顿大学计算机科学系教授，Adobe Systems公司董事，曾是XeroxPARC的研究人员，还曾就职于美国国防部防御分析研究所以及INRIA。同时也是《C算法》、《JAVA算法》等书的作者。<br />
另一位作者Philippe Flajolet是INRIA的高级研究主任，在EcolePolytechn，que和普林斯顿大学任教，并在斯坦福大学、智利大学和弗吉尼亚技术大学拥有访问席位、他还是法国科学院的通信会员。<br />
<br />
分析算法的人享有双重的幸福。首先，他们能够体验到优雅数学模式纯粹的美，这种模式存在于优美的计算过程之中。其次，当他们的理论使得其他工作能够做得更快、更经济时，他们能够得到实际的褒奖。 ----Donald E. Knuth<br />
<br />
算法分析一般包括两种不同的方法。第一种方法是研究确定最坏情形的可能，有时称之为计算复杂性。第二种方法是通过确定最佳情形、最坏情形以及平均情形的性能来精确的刻画算法的性能。<br />
<br />
本书是对算法数学分析中主要方法的综述。所涉及的材料来自经典的数学课题，包括离散数学、初等实分析、组合数学，以及来自经典的计算机科学课题，包括算法和数据结构。重点在于&#8220;平均情形&#8221;或&#8220;概率&#8221;分析，不过，也包括&#8220;最坏情形&#8221;和&#8220;复杂性&#8221;分析所需要的基本数学工具。<br />
<br />
http://www.isload.com.cn/myfile/download/24bvbv0vquc2y/%CB%E3%B7%A8%B5%BC%C2%DB.pdf&nbsp;&nbsp; 不过貌似现在不能下载 
<img src ="http://www.blogjava.net/fantasybei/aggbug/173149.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-01-06 17:26 <a href="http://www.blogjava.net/fantasybei/archive/2008/01/06/173149.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程珠玑</title><link>http://www.blogjava.net/fantasybei/archive/2008/01/05/173015.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Sat, 05 Jan 2008 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/01/05/173015.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/173015.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/01/05/173015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/173015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/173015.html</trackback:ping><description><![CDATA[编程珠玑<br />
<br />
本书特色：<br />
本书作者的&#8220;编程珠玑&#8221;专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一，而本书正是建立在这些专栏的基础之上。本书涉及的主题是一些超出了可靠工程学范畴，在本书中，作者始终非常富于洞察力和创造力地围绕着折磨程序员的实际问题展开讨论。书中的程序将教会读者重要的程序设计技巧和基本的设计原则。<br />
内容提要：<br />
本书涉及的主题是一些超出了可靠工程学范畴，在本书中，作者始终非常富于洞察力和创造力地围绕着折磨程序员的实际问题展开讨论。本书给出了一些精心设计的有趣而且颇具指导意义的程序，书中充满了对实用程序设计技巧及基本设计原则的清晰而机智的描述。本书第2版增加了3个方面的新内容：测试、调试和计时；集合表示；字符串问题，并对第1版的所有程序都进行了改写，生成了等量的新代码。<br />
作者简介：<br />
Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员，Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑，他的&#8220;编程珠玑&#8221;专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一，而本书正是建立在这些专栏的基础之上。<br />
读者对象：<br />
本书主要针对程序设计人员，要求读者有过使用高级语言进行程序设计的经验。本书涉及算法、程序验证、软件工程等方面的应用，因此对于现在设计一个项目并尝试着做一些工作的读者，以及对于这些项目有很多经验的读者来说，本书都有很重要的意义。<br />
本文来自: 书部落-电子书下载(www.shubulo.com) 详细出处参考：http://www.shubulo.com/thread-31138-1-1.html<br />
<br />
<br />
http://www.shubulo.com/attachment.php?aid=811&nbsp; <br />
<img src ="http://www.blogjava.net/fantasybei/aggbug/173015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-01-05 19:28 <a href="http://www.blogjava.net/fantasybei/archive/2008/01/05/173015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript高级程序设计</title><link>http://www.blogjava.net/fantasybei/archive/2008/01/05/173014.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Sat, 05 Jan 2008 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2008/01/05/173014.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/173014.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2008/01/05/173014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/173014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/173014.html</trackback:ping><description><![CDATA[<a href="ftp://222.214.218.61/20060922/0c72dfe5-5962-4b52-adba-421528ed04f6.pdf">ftp://222.214.218.61/20060922/0c72dfe5-5962-4b52-adba-421528ed04f6.pdf</a>&nbsp;&nbsp;&nbsp;&nbsp; 英文版<br />
<a href="http://www.shubulo.com/thread-37410-1-1.html">http://www.shubulo.com/thread-37410-1-1.html</a>&nbsp; 中文版 ，不完整<img src="/CuteSoft_Client/CuteEditor/images/emdgust.gif" align="absMiddle" border="0"  alt="" /><br />
<img src ="http://www.blogjava.net/fantasybei/aggbug/173014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2008-01-05 19:25 <a href="http://www.blogjava.net/fantasybei/archive/2008/01/05/173014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重构</title><link>http://www.blogjava.net/fantasybei/archive/2007/12/19/168641.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Wed, 19 Dec 2007 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2007/12/19/168641.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/168641.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2007/12/19/168641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/168641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/168641.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;Martin Fowler和本书另几位作者清楚揭示了重构过程，他们为面向对象软件开发所做的贡献，难以衡量。本书解释重构的原理（principles）和最佳实践方式（best practices），并指出何时何地你应该开始挖掘你的代码以求改善。本书的核心是一份完整的重构名录（catalog of refactoring），其中每一项都介绍一种经过实证的代码变换手法（code transformation）的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显，但不要掉以轻心，因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代码，这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中，并且朗朗上口<img src="/CuteSoft_Client/CuteEditor/images/emdgust.gif" align="absMiddle" border="0"  alt="" /><br />
<hr />
ftp://book:book@222.214.218.61/book1/20060414/b9866a62-e251-4dcf-be2c-c83f81514c4e.pdf
<img src ="http://www.blogjava.net/fantasybei/aggbug/168641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2007-12-19 09:13 <a href="http://www.blogjava.net/fantasybei/archive/2007/12/19/168641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试驱动开发</title><link>http://www.blogjava.net/fantasybei/archive/2007/12/18/168596.html</link><dc:creator>fantasybei</dc:creator><author>fantasybei</author><pubDate>Tue, 18 Dec 2007 14:00:00 GMT</pubDate><guid>http://www.blogjava.net/fantasybei/archive/2007/12/18/168596.html</guid><wfw:comment>http://www.blogjava.net/fantasybei/comments/168596.html</wfw:comment><comments>http://www.blogjava.net/fantasybei/archive/2007/12/18/168596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fantasybei/comments/commentRss/168596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fantasybei/services/trackbacks/168596.html</trackback:ping><description><![CDATA[测试驱动开发(TDD)以测试作为开发过程的中心，它要求在编写任何产品代码之前，<br />
首先编写用于定义产品代码行为的测试，而编写的产品代码又要以使测试通过为目的。<br />
测试驱动开发要求测试可以完全自动化的运行，在对代码进行重构前后必须运行测试。这是一种革命性的开发方法，<br />
能够造就简单、清晰、高质量的代码。<img src="/CuteSoft_Client/CuteEditor/images/emwink.gif" align="absMiddle" border="0"  alt="" /><br />
<hr />
ftp://book:book@222.214.218.61/book5/20070604/1933c0e6-53ac-4c44-bfcc-1a5e43258c25.rar
<img src ="http://www.blogjava.net/fantasybei/aggbug/168596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fantasybei/" target="_blank">fantasybei</a> 2007-12-18 22:00 <a href="http://www.blogjava.net/fantasybei/archive/2007/12/18/168596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>