2012年9月15日星期六

阮一峰的网络日志

阮一峰的网络日志


台湾四极

Posted: 14 Sep 2012 03:50 PM PDT

1.

从台湾回来,已经一个多月了。那段日子,时常浮现眼前。

2.

台湾是一个美丽的岛屿,高山大海,风景壮丽。如果你有时间,我建议开车或骑摩托车"环岛游"。(骑自行车?别开玩笑了......)

3.

我没有时间"环岛",就定下了另外一个目标----台湾的四个地理极点

4.

台湾本岛的最北端"富贵角",最东端"三貂角",最南端"鹅銮鼻",最西端"顶额沙洲"。我暗下决心,要把它们走遍。

5.

最北端"富贵角",离台北最近,我就先去那里。

6.

我从台北搭客运,沿阳金公路(该公路穿越阳明山,沿途景色优美)北上,到达金山镇,在金山区公所下车。

7.

然后,在区公所对面,搭乘开往淡水的客运,在"灯台口"下车。

8.

往里走,就是富贵角了,会先经过一个渔港。

9.

沿土路走到底,就会看到"富贵角灯塔"的指示牌了。

10.

沿着平缓的上坡道,走10分钟,在一个拐弯之后,灯塔就出现了。

11.

富贵角灯塔。

12.

照相的情侣。

13.

灯塔的前面是临海的悬崖,另一侧则是观海的平台。

14.

悬崖下方是一片乱石滩。

15.

眼前的这一片海滩,就是台湾的最北端了。

16.

离开之前,再看一眼灯塔。

17.

去过最北端之后,接下来是最东端"三貂角"。

18.

我搭乘台铁,从台北东行,在福隆站下车。

19.

福隆海水浴场,是北台湾最好的海水浴场。三貂角距离这里,大概还有七公里。

20.

我在火车站前面,租了一辆自行车(租车费新台币100元),沿着专用自行车道"旧草岭隧道",向三貂角进发了。

21.

到达海岬最东点的时候,会有指示牌提示"三貂角灯塔"。

22.

灯塔建在山上,山路陡峭,自行车骑不上去,步行爬山大约需要20~30分钟。

23.

爬到山顶,豁然开朗。这里不仅有灯塔,还有许多西式建筑。

24.

西班牙人最先发现这里,所以建筑都是仿西班牙式。

25.

钟楼。

26.

海誓山盟,永结同心。

27.

三貂角灯塔。

28.

钟楼和灯塔。

29.

灯塔的前面,有一条下坡道,通往海边。

30.

面对大海,有一块指示牌,告诉你这里是台湾最东端。

31.

此时大雨滂沱,太平洋上水雾朦胧。

32.

海里的那些礁石,就是台湾的最东端了。

33.

赶在天色将暗之前,我冒雨骑回福隆,浑身湿透。

34.

下一个目标,就是台湾最南端"鹅銮鼻"。

35.

我在高雄火车站旁边,搭乘高雄客运的88快线。

36.

在最后一站"鹅銮鼻"下车,路上大概要2个半小时。

37.

车就停在"鹅銮鼻公园"的门口,但是,台湾最南端不在这个公园里面。

38.

走向停车场的深处,就会看到一块"最南端"的指路牌。

39.

沿着小路向深处走,大约要走上20~30分钟。

40.

路的尽头,出现了一个水泥建筑物。

41.

平台上挤满了大陆游客。

42.

"台湾最南点"的说明牌。

43.

最南端的大海。

44.

近一点看大海。

45.

这里的海滩都是珊瑚礁,完全不适合行走。

46.

回来的路上,我还顺道去了"国立海洋生物馆",流连忘返。

47.

现在,只剩下台湾最西端"顶额沙洲"了。

48.

我在台南火车站前,搭乘99路"台江线"。(顺便说一句,台南是一个非常有魅力的城市,也许是台湾最宜居的地方,我很喜欢。)

49.

这条线路有一个特别之处,就是允许携带自行车。(这辆自行车破了一点,但是别人免费借给我,我也不能要求更多了。)

50.

每年10月至次年2月,为了观赏候鸟,99路会一直开到海边。但是,我是7月份去台南,所以终点站是一个叫"大众庙"的地方。

51.

这里距离台湾最西端大概有20多公里(也就是说,那一天我来回骑行了40多公里,这差不多是我的运动极限了)。这时,你需要一张详细的台南地图或GPS,帮助你从大众庙骑到台17线公路上。

52.

我从169公里处,进入台17线,然后向北骑行。

53.

大约在162公里处,有一座国姓桥,跨过曾文溪。

54.

过了国姓桥以后,立刻向东转,进入173县道。然后,一路上都会看到"黑琵保护区"的指示牌,沿着它骑。

55.

大约三四公里之后,就到了"黑面琵鹭保育管理及研究中心"。

56.

继续往前骑,一公里之后,有一个"观鸟亭"。

57.

亭子前一个很有意思的路牌。

58.

观鸟亭里空无一人。黑面琵鹭每月10月至次年2月,从东北亚飞到这里过冬。在此期间,99路的终点站就在这里。

59.

这里距离台湾最西端,大约还有四公里。继续往前骑,一会儿功夫,就到了七股乡的海堤。

60.

远远地就听到轰鸣声,走进树林才发现,离海原来如此之近。

61.

沿着海堤,由东转向北骑行。

62.

不久,就会看到指示牌,上面写着"国圣灯塔 3KM",那里就是台湾最西端。

63.

这时,海边下起了倾盆大雨。我只能停车,在路边避雨。倒霉的事件发生了,我的照相机这时掉进了水里,无法继续使用了。所以,这就是我当天的最后一张照片。

64.

国圣灯塔只能转贴别人的照片了。记得那天在灯塔下面,我的心情糟透了,好不容易到了台湾的最后一极,却无法留下照片。

65.

灯塔的近景。

66.

灯塔前的海堤上,眺望台湾海峡,前面的岩石就是台湾最西端。海的那边就是福建。

67.

走完台湾四极,我也该回家了。回想在台湾度过的这几个月,感概良多。

68.

在海边,在山间,在喧嚣的黄昏,在静寂的清晨,你总在寻找你自己。过去的日子像朝露一样消散,而未来恰似绚丽的晚霞,依然在你的面前变幻莫测。

(完)

文档信息

2012年9月8日星期六

阮一峰的网络日志

阮一峰的网络日志


XMLHttpRequest Level 2 使用指南

Posted: 08 Sep 2012 02:12 AM PDT

XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。

最早,微软在IE 5引进了这个接口。因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生。

但是,这个接口一直没有标准化,每家浏览器的实现或多或少有点不同。HTML 5的概念形成后,W3C开始考虑标准化这个接口。2008年2月,就提出了XMLHttpRequest Level 2 草案。

这个XMLHttpRequest的新版本,提出了很多有用的新功能,将大大推动互联网革新。本文就对这个新版本进行详细介绍。

一、老版本的XMLHttpRequest对象

在介绍新版本之前,我们先回顾一下老版本的用法。

首先,新建一个XMLHttpRequest的实例。

  var xhr = new XMLHttpRequest();

然后,向远程主机发出一个HTTP请求。

  xhr.open('GET', 'example.php');

  xhr.send();

接着,就等待远程主机做出回应。这时需要监控XMLHttpRequest对象的状态变化,指定回调函数。

  xhr.onreadystatechange = function(){

    if ( xhr.readyState == 4 && xhr.status == 200 ) {

      alert( xhr.responseText );

    } else {

      alert( xhr.statusText );

    }

  };

上面的代码包含了老版本XMLHttpRequest对象的主要属性:

  * xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。

  * xhr.status:服务器返回的状态码,等于200表示一切正常。

  * xhr.responseText:服务器返回的文本数据

  * xhr.responseXML:服务器返回的XML格式的数据

  * xhr.statusText:服务器返回的状态文本。

二、老版本的缺点

老版本的XMLHttpRequest对象有以下几个缺点:

  * 只支持文本数据的传送,无法用来读取和上传二进制文件。

  * 传送和接收数据时,没有进度信息,只能提示有没有完成。

  * 受到"同域限制"(Same Origin Policy),只能向同一域名的服务器请求数据。

三、新版本的功能

新版本的XMLHttpRequest对象,针对老版本的缺点,做出了大幅改进。

  * 可以设置HTTP请求的时限。

  * 可以使用FormData对象管理表单数据。

  * 可以上传文件。

  * 可以请求不同域名下的数据(跨域请求)。

  * 可以获取服务器端的二进制数据。

  * 可以获得数据传输的进度信息。

下面,我就一一介绍这些新功能。

四、HTTP请求的时限

有时,ajax操作很耗时,而且无法预知要花多少时间。如果网速很慢,用户可能要等很久。

新版本的XMLHttpRequest对象,增加了timeout属性,可以设置HTTP请求的时限。

  xhr.timeout = 3000;

上面的语句,将最长等待时间设为3000毫秒。过了这个时限,就自动停止HTTP请求。与之配套的还有一个timeout事件,用来指定回调函数。

  xhr.ontimeout = function(event){

    alert('请求超时!');

  }

目前,Opera、Firefox和IE 10支持该属性,IE 8和IE 9的这个属性属于XDomainRequest对象,而Chrome和Safari还不支持。

五、FormData对象

ajax操作往往用来传递表单数据。为了方便表单处理,HTML 5新增了一个FormData对象,可以模拟表单。

首先,新建一个FormData对象。

  var formData = new FormData();

然后,为它添加表单项。

  formData.append('username', '张三');

  formData.append('id', 123456);

最后,直接传送这个FormData对象。这与提交网页表单的效果,完全一样。

  xhr.send(formData);

FormData对象也可以用来获取网页表单的值。

  var form = document.getElementById('myform');

  var formData = new FormData(form);

  formData.append('secret', '123456'); // 添加一个表单项

  xhr.open('POST', form.action);

  xhr.send(formData);

六、上传文件

新版XMLHttpRequest对象,不仅可以发送文本信息,还可以上传文件。

假定files是一个"选择文件"的表单元素(input[type="file"]),我们将它装入FormData对象。

  var formData = new FormData();

  for (var i = 0; i < files.length;i++) {

    formData.append('files[]', files[i]);

  }

然后,发送这个FormData对象。

  xhr.send(formData);

七、跨域资源共享(CORS)

新版本的XMLHttpRequest对象,可以向不同域名的服务器发出HTTP请求。这叫做"跨域资源共享"(Cross-origin resource sharing,简称CORS)。

使用"跨域资源共享"的前提,是浏览器必须支持这个功能,而且服务器端必须同意这种"跨域"。如果能够满足上面的条件,则代码的写法与不跨域的请求完全一样。

  xhr.open('GET', 'http://other.server/and/path/to/script');

目前,除了IE 8和IE 9,主流浏览器都支持CORS,IE 10也将支持这个功能。服务器端的设置,请参考《Server-Side Access Control》

八、接收二进制数据(方法A:改写MIMEType)

老版本的XMLHttpRequest对象,只能从服务器取回文本数据(否则它的名字就不用XML起首了),新版则可以取回二进制数据。

这里又分成两种做法。较老的做法是改写数据的MIMEType,将服务器返回的二进制数据伪装成文本数据,并且告诉浏览器这是用户自定义的字符集。

  xhr.overrideMimeType("text/plain; charset=x-user-defined");

然后,用responseText属性接收服务器返回的二进制数据。

  var binStr = xhr.responseText;

由于这时,浏览器把它当做文本数据,所以还必须再一个个字节地还原成二进制数据。

  for (var i = 0, len = binStr.length; i < len; ++i) {

    var c = binStr.charCodeAt(i);

    var byte = c & 0xff;

  }

最后一行的位运算"c & 0xff",表示在每个字符的两个字节之中,只保留后一个字节,将前一个字节扔掉。原因是浏览器解读字符的时候,会把字符自动解读成Unicode的0xF700-0xF7ff区段。

八、接收二进制数据(方法B:responseType属性)

从服务器取回二进制数据,较新的方法是使用新增的responseType属性。如果服务器返回文本数据,这个属性的值是"TEXT",这是默认值。较新的浏览器还支持其他值,也就是说,可以接收其他格式的数据。

你可以把responseType设为blob,表示服务器传回的是二进制对象。

  var xhr = new XMLHttpRequest();

  xhr.open('GET', '/path/to/image.png');

  xhr.responseType = 'blob';

接收数据的时候,用浏览器自带的Blob对象即可。

  var blob = new Blob([xhr.response], {type: 'image/png'});

注意,是读取xhr.response,而不是xhr.responseText。

你还可以将responseType设为arraybuffer,把二进制数据装在一个数组里。

  var xhr = new XMLHttpRequest();

  xhr.open('GET', '/path/to/image.png');

  xhr.responseType = "arraybuffer";

接收数据的时候,需要遍历这个数组。

  var arrayBuffer = xhr.response;

  if (arrayBuffer) {

    var byteArray = new Uint8Array(arrayBuffer);

    for (var i = 0; i < byteArray.byteLength; i++) {

      // do something

    }
  }

更详细的讨论,请看Sending and Receiving Binary Data

九、进度信息

新版本的XMLHttpRequest对象,传送数据的时候,有一个progress事件,用来返回进度信息。

它分成上传和下载两种情况。下载的progress事件属于XMLHttpRequest对象,上传的progress事件属于XMLHttpRequest.upload对象。

我们先定义progress事件的回调函数。

  xhr.onprogress = updateProgress;

  xhr.upload.onprogress = updateProgress;

然后,在回调函数里面,使用这个事件的一些属性。

  function updateProgress(event) {

    if (event.lengthComputable) {

      var percentComplete = event.loaded / event.total;

    }

  }

上面的代码中,event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0。

与progress事件相关的,还有其他五个事件,可以分别指定回调函数:

  * load事件:传输成功完成。

  * abort事件:传输被用户取消。

  * error事件:传输中出现错误。

  * loadstart事件:传输开始。

  * loadEnd事件:传输结束,但是不知道成功还是失败。

十、阅读材料

  1. Introduction to XMLHttpRequest Level 2: 新功能的综合介绍。

  2. New Tricks in XMLHttpRequest 2:一些用法的介绍。

  3. Using XMLHttpRequest:一些高级用法,主要针对Firefox浏览器。

  4. HTTP Access Control:CORS综述。

  5. DOM access control using cross-origin resource sharing:CORS的9种HTTP头信息

  6. Server-Side Access Control:服务器端CORS设置。

  7. Enable CORS:服务端CORS设置。

(完)

文档信息

2012年9月3日星期一

阮一峰的网络日志

阮一峰的网络日志


《Linus Torvalds自传》摘录

Posted: 03 Sep 2012 12:27 AM PDT

除了程序员,大概很少人知道Linux操作系统。

它的发明者Linus Torvalds,知道的人就更少了。

他本人也很低调,深居简出,很少出席公众场合或接受媒体采访,通常只在专业开发者的邮件列表中发言。提起他的名字,人们的第一反应往往是"哦,传说中那个22岁就发明Linux的芬兰大学生......",其他就一片空白了。

他的自传《Just For Fun》出版于十年前(2001年),已经几乎被遗忘了。

星期六下午,我在硬盘里偶然翻到这本书(中译本),不经意地读了第一页。Linus Torvalds正在谈他的写作计划:

"我们可以在第一章里对人们解释生命的意义何在。这样可以吸引住他们。一旦他们被吸引住,并且付钱买了书,剩下的章节里我们就可以胡扯了。"

我觉得有点意思,接着往下面读。他继续谈生命的意义:

"人类的追求分成三个阶段。第一是生存,第二是社会秩序,第三是娱乐。最明显的例子是性,它开始只是一种延续生命的手段,后来变成了一种社会行为,比如你要结婚才能得到性。再后来,它成了一种娱乐。"

我心里嘀咕,这个理论有点离经叛道啊,不过看上去似乎有道理。但是,它跟Linux有什么关系呢?

"技术最初也是为了生存,为了生存得更好。现在技术大体上还处于社会的层面,但正在朝娱乐的阶段发展。......(Linux的开发模式)为人们提供了依靠兴趣与热情而生活的机会。与世界上最好的程序员一起工作,是一种无与伦比的享受。"

我被吸引住了,整个周末都在读它,越读越入迷。此书极其有趣,一点不枯燥,充满了各种好玩的笑料,以及对技术和软件的严肃思考。如果你是一个程序员,我高度推荐此书。

我从没料到Linus Torvalds是一个如此幽默有趣的人,我摘录了一些他的妙语,请大家欣赏。

===============================================================

1. 关于幼年

"出生后,我的摇篮是一个洗衣筐,幸好我沒留下什么记忆。"

2. 关于外貌

"我有一个祖传的大鼻子,据说眼镜可以让鼻子显得小一点,于是我就带上了,任何时候都不摘下来。"

3. 关于姓氏

"我祖父发明了自己的姓,全世界现在总共有十八个姓Torvalds的人,他们之间都有血缘关系,都得忍受我祖父带来的这种混乱。"

4. 关于服装

"我从小不太讲究穿衣,长大后,又突然要由别人来决定我的穿衣,这些人主要是某些高技术公司的销售人员,我就穿他们在会议上免费发送的T恤和夹克。"

5. 关于成长

"妈妈对她的一些朋友们说,我是个非常好养的孩子。她只要把我放在一个黑咕隆咚的储藏柜里,再配上一台电脑,偶尔朝里扔一些意大利面条,我就会感到格外高兴了。她的话不无道理。"

6. 关于入伍

"在那里手拿武器,上了一个月的操练课后,我便觉得有生之年完全有资格从此一动不动,享受平静的生活了。惟一可做的事情就是在键盘上打代码,或者手里端着一瓶啤酒。"

7. 关于退伍

"我的服役期在1990年5月7日结束。我妻子会告诉你,我连我们的结婚纪念日都记不住,但我却不大可能忘记我离开部队的日子。"

8. 关于芬兰人

"芬兰人有沉默的传统,人人都沉默寡言。他们常常站在一起,但一句话也不说。德国作家布莱希特二战时曾在赫尔辛基住过一段时间,他在描绘火车站一家咖啡馆里的顾客时曾说,那些人"会讲两种语言却沉默不语。"所以后来他一得到机会就逃出了芬兰。"

9. 关于诺基亚

"既然芬兰人不喜欢面对面地交谈,整个国家就成了移动电话最理想的市场。"

10. 关于打工

"我一贯喜欢室外运动,曾经一度当过邮差,但送的不是报纸而是垃圾邮件。"

11. 关于暑假

"那年夏天我做了两件事。第一件事是什么都没做。第二件事是读完了719页的《操作系统:设计和执行》。那本红色的简装本教科书差不多等于睡在了我的床上。"

12. 关于赫尔辛基大学

"学校为VAX微型机买了16个使用许可,但是却规定《C语言和UNIX》课程的选修人数为32名。我想学校的想法是16个学生白天使用机器,另外16个学生晚上使用。"

13. 关于理查德·斯托曼

"1991年,理查德·斯托曼到芬兰赫尔辛基理工大学演讲,我在生活中第一次见到了典型的留着长发、蓄着长胡子的黑客。这样的人在赫尔辛基不多。"

14. 关于Unix

"你在UNIX上完成的大部分任务都是通过六个基本操作完成的,它们被称作"系统呼叫"(system call)。第一个基本操作是"创建子进程"(fork),一个程序把自身完全复制出来,这样你就有了两个相同的拷贝。第二个基本操作是复制出来的程序,再用一个新项目替换自己。其他四个基本系统呼叫--打开、关闭、读和写--都是为了访问文件的。这六个系统呼叫便组成了UNIX的简单操作。然后,你只需在程序之间创造出交流渠道(pipes),就能解决复杂的问题。"

15. 关于编程

"对于任何编程的人来说,编程是世界上最有趣的事,比下棋有乐趣得多,因为你可以自己制订游戏规则。而你制定什么样的规则,也就会导出与此规则相符合的结果。"

16. 关于操作系统

"创造操作系统,就是去创造一个所有应用程序赖以运行的基础环境。从根本上来说,就是在制定规则:什么可以接受,什么可以做,什么不可以做。事实上,所有的程序都是在制定规则,只不过操作系统是在制定最根本的规则。"

17. 关于Linux的发明过程

"这花费了我大量的精力:编程――睡觉――编程――睡觉――编程――吃饭(饼干)――编程――睡觉――编程――洗澡(冲冲了事)――编程。"

18. 关于Linux的第一个观众

"我(把Linux)显示给我妹妹看,她盯着显示器看了大约五秒钟,看着上面是一串A和一串B,说了声"很好",便没什么感觉地走开了。我意识到,这犹如你指给别人看你铺设了一条长长的柏油马路,但想向别人解释这条马路的意义是完全不可能的。"

19. 关于Linux的攻击者

"安德鲁·塔南鲍姆不断攻击我的Linux取代了他的MINIX操作系统。他只穿着件T恤就浑身冒火,能怪谁呢?"

20. 关于姑娘

"在那个时候,只要一想到姑娘,Linux系统就变得不再重要了。在某种程度上,今天也还是这样。"

21. 关于成功

"Linux所取得的许多成功,其实可以归结为我的缺点所致:1、我很懒散。2、我喜欢授权给其他人。"

22. 关于Linux 1.0版

"许多人认为,1.0版的发行是件大事,主要是那些出售Linux的软件公司,他们希望1.0版对发行有所帮助。在他们看来,1.0这个数字的心理意义要远比其本身的技术含量更为重要。我对此倒没有什么异议,因为事实就是如此,以0.96版的序号销售操作系统确实比较糟。"

23. 关于26岁

"我开始观察镜中的自己,我的发线正在一点点向上面爬升,脸上也开始密布着细纹。我已经二十六岁了,平生第一次觉得自己老了。而这已经是我在大学里度过的第七个年头,我想抓紧人生,快一点毕业。"

24. 关于超时工作

"Linux不是靠牺牲宝贵的睡眠时间换来的。事实上,如果你想听真话,那我就要说,我更喜欢睡觉。"

25. 关于网络口水仗

"它们的全部存在意义就是不遗余力地宣传什么东西,也就意味着还要贬损其他的相关物。你在那里经常看到的通常只是些"我的系统比你的系统更好"之类的废话。我们可以把它们看作是某种形式的在线手淫。"

26. 关于微软

"突然间,到处都是微软的产品了,被蝗虫入侵了似的。我并不是说蝗虫是坏蛋,我喜欢所有的动物和昆虫。"

27. 关于开源软件的商业化

"我认为它带给我们更多的机会。比如,有些技术人员担心没法养活自己的孩子,他们现在就有了选择的余地。你可以仍然一如既往地保持理想主义,或者你也可以选择成为某个新的商业类型。你让自己多了一个新的选择,并不会让你失去任何东西。在此之前,你除了保持纯洁之外显然没有任何其他的选择。"

28. 关于理想主义者

"我一贯认为理想主义人士很有趣,只是有点沉闷,甚至有些吓人。为了坚持一个非常强有力的意见,你不得不排除其他意见。那就意味着,你不得不变得不近情理。"

29. 关于互联网泡沫

"那情况也是前无古人的,你在任意一辆出租车内摇下窗户,随便向路边挺胸走过的妓女提问:"主题演讲几点开始?"她都能告诉你答案。"

30. 关于比尔·盖茨

"比尔·盖茨作了一次主题演讲。威尼斯饭店那个足有7个宜家仓库大的舞厅里,挤满了站着听讲的人。"

31. 关于移居加州

"现在是十一月,我还穿着短裤,如果是在芬兰,我早就没命了。"

32. 关于软件专利

"我同时怀有两种心情――好的和坏的,但坏的成分更多。"

33. 关于攻击者

"有人声称,作为Linux领头人所产生的压力,已经使我从一个电脑迷变成了一个混蛋。他错了,实际上我一直是一个混蛋。"

34. 关于GPL许可证

"GPL为每个人都提供了机会,成绩卓著,这是人类的一个巨大的进步。可是,所有创新都应纳入GPL吗? 这他妈的完全不可能,应由开发者自行决定是使用GPL还是使用其他保护版权的方法。令我几乎发疯的是,理查德·斯托曼认为非黑即白,别无它途,由此产生了不必要的政治划分。"

35. 关于成名

"当人们开始过分认真地对待你时,就为你设下了一个温柔的陷阱。"

36. 关于律师

"那些将人类的创造结果称之为是"财产"的人,不用说,便是律师了。"

37. 关于知识产权

"许多要求加强知识产权立法的讨论是基于这样一种观点,即给创造者和艺术家以更多的"保护"。而人们似乎不曾、或者说是从未意识到,这样一种强有力的权利导致一些人剥夺了另一些人的权利。如果你得出我认为版权实际上是有害的结论,那么你错了。恰恰相反,我热爱版权。我只是认为没必要将版权所有者的权利无限扩大。不要扩大到将消费者的权利都被剥夺殆尽。"

38. 关于Java语言

"不要试图以技术来控制用户,那是决不可能成功的,最终要对公司造成损害,而且也会阻碍人们对于该项技术的接受。Java就是一个例子,它现在已经远没有其初期那么富有吸引力了。Sun公司原本想要控制Java,但却基本上已经失去了它。Java现在依然运行得很好,然而却显然没有充分发挥其潜力。"

39. 关于人类不再登陆月球

"因为月球被证实是一个很单调的地方,基本上没有夜生活,这有点像圣何塞。于是人们并不想再回到月球上去了。"

40. 关于电子邮件

"我喜欢电子邮件的众多理由之一是,它如此方便又如此容易被忽略。你可以轻松地对某些邮件不加理睬。"

41. 关于生活哲学

"寻找乐趣,做一些有趣的事情,增加财富和提高名声。"

42. 关于未来

"当你谈及技术的未来时,真正有意义的是人们想要什么?一旦能够描绘出这一点,剩下的事情就是如何大规模地生产它,并使它足够便宜,以便人们能够在不牺牲另外也想要的东西的同时获得它。除此而外,没有任何事情真正有意义。"

(完)

文档信息