Web版的VNC

想在Web上远程控制远端的电脑吗?Guacamole开源项目提供了这样的解决方案,其主要使用了HTML5和Ajax。下面是一个载图。如果你能够访问Youtube的话,你可以看看这个视频

 

Guacamole 一个 HTML5 + JavaScript (AJAX) 的 VNC 客户端

是啊,HTML5强大了,什么都能干了,连Flash也要取代了。现如今,什么事都在往Web上移植了,Chrome也OS了。可以预见在HTML5出来后,未来这样的事情会越来越多,以后的一些移动和掌上设备真的只需要一个Web Browsers.

一些重要的算法

下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解 一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)

 

Continue reading “一些重要的算法”

十个免费的Web压力测试工具

Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。根据项目网站的说法,Grinder的 主要目标用户是“理解他们所测代码的人——Grinder不仅仅是带有一组相关响应时间的‘黑盒’测试。由于测试过程可以进行编码——而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间。

 

Pylot -Pylot是一款开源的测试web service性能和扩展性的工具,它运行HTTP 负载测试,这对容量计划,确定基准点,分析以及系统调优都很有用处。Pylot产生并发负载(HTTP Requests),检验服务器响应,以及产生带有metrics的报表。通过GUI或者shell/console来执行和监视test suites。

 

Web Capacity Analysis Tool (WCAT) – 这是一种轻量级负载生成实用工具,不仅能够重现对 Web 服务器(或负载平衡服务器场)的脚本 HTTP 请求,同时还可以收集性能统计数据供日后分析之用。WCAT 是多线程应用程序,并且支持从单个源控制多个负载测试客户端,因此您可以模拟数千个并发用户。该实用工具利用您的旧机器作为测试客户端,其中每个测试客户 端又可以产生多个虚拟客户端(最大数量取决于客户端机器的网络适配器和其他硬件)。您可以选择使用 HTTP 1.0 还是 HTTP 1.1 请求,以及是否使用 SSL。并且,如果测试方案需要,您还可以使用脚本执行的基本或 NTLM 身份验证来访问站点的受限部分。(如果您的站点使用 cookie、表单或基于会话的身份验证,那您可以创建正确的 GET 或 POST 请求来对测试用户进行身份验证。)WCAT 还可管理您站点可能设置的任何 cookie,所以配置文件和会话信息将永久保存。

 

fwptt – fwptt 也是一个用来进行WEB应用负载测试的工具。它可以记录一般的请求,也可以记录Ajax请求。它可以用来测试 asp.net, jsp, php 或是其它的Web应用。

 

JCrawler – JCrawler是一个开源( CPL) 的WEB应用压力测试工具。通过其名字,你就可以知道这是一个用Java写的像网页爬虫一样的工具。只要你给其几个URL,它就可以开始爬过去了,它用一 种特殊的方式来产生你WEB应用的负载。这个工具可以用来测试搜索引擎对你站点产生的负载。当然,其还有另一功能,你可以建立你的网站地图和再点击一下, 将自动提交Sitemap给前5名的搜索引擎!

 

Apache JMeter – Apache JMeter是一个专门为运行和服务器装载测试而设计的、100%的纯Java桌面运行程序。原先它是为Web/HTTP测试而设计的,但是它已经扩展以 支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情 况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据 显示,测试同步及测试的创建和执行。

 

Siege -Siege(英文意思是围攻)是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的 并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。 Siege 支持基本的认证,cookies, HTTP 和 HTTPS 协议。

 

http_load – http_load 以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以可以测试HTTPS类的网站请求。

 

Web Polygraph – Web Polygraph这个软件也是一个用于测试WEB性能的工具,这个工具是很多公司的标准测试工具,包括微软在分析其软件性能的时候,也是使用这个工具做为基准工具的。很多招聘测试员的广告中都注明需要熟练掌握这个测试工具。

 

OpenSTA – OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网 站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化 测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过 proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。

 

欢迎您留下你认为不错的WEB应用性能测试的工具。

Did You Know?

下面这个短片可能Too Old了,不过我今天才看到,很不错,转到这里,让更多的人都能看到。

 

这是个信息爆炸飞速发展的年代,逆水行舟,不进则退。在这一组组的数据中让我们这班新生代年轻人反思自身所要背负和面对的压力和挑战!极有深度的短片,整理出来的数据实在是叫人震惊,生活在这个科技高速发展的时代既是种荣幸,又很有压力,对“学校里教得知识很多就是过时的”深有体会!!

 

Did You Know? 3.0版

 

Did You Know? 4.0版

 
 
 

老手是这样教新手编程的

comp.lang.c全球最大的C语言新闻组,其Google的链接是:http://groups.google.com/group/comp.lang.c/ 可惜被GFW了。在comp.lang.c新闻组,有一个日本网友发了个贴子,说他正在学习一个在线的C语言课程,要完成一个作业,用程序输出如下的结果,而他的老师在美国,因为时差问题,他无法和他联系,所以只有上这里来寻求帮助。

 

很明显,在comp.lang.c上发这种贴子是一定会被拍的很惨的,这样的事,以前在SUN的论坛上也发生过,详情请看这里。还有一个去软件官网上要一个盗版序列号的。果不然后,我看到了这样的一个回贴。提供这样的一段代码:

 
  1. #define      M 002354l  
  2. #define     A   000644l  
  3. #define    G     000132l  
  4. #define     I   000322l  
  5. #define      C 000374l  
  6. #define                a ;  
  7. #define               b for  
  8. #define              c    ++  
  9. #define             d       %  
  10. #define            e       int  
  11. #define           f           ,  
  12. #define          g             –  
  13. #define         h             011  
  14. #define        i                 =  
  15. #define       j                   {  
  16. #define      k                     )  
  17. #define     l                    ‘\n’  
  18. #define    m                      main  
  19. #define    n                         <  
  20. #define     o                       }  
  21. #define      p                     >  
  22. #define       q                  &&  
  23. #define        r                 (  
  24. #define         s              ||  
  25. #define          t             ?  
  26. #define           u     putchar  
  27. #define            v      void  
  28. #define             w     ‘*’  
  29. #define              x     :  
  30. #define               y ‘ ‘  
  31. #define                _ /  
  32. #define           C_O_O_L return  
  33.                    e u r e k a  
  34.                          e  
  35.                         m r  
  36.                        v k j  
  37.                       j j j j  
  38.                      j j j j j  
  39.                     j j j j j j  
  40.                    j j j j j j j  
  41.                   j e z a b r z i  
  42.                  M _ A _ G _ I _ C  
  43.                 a z n G a u r z d h  
  44.                + z _ h p M _ A q z d  
  45.               h + z _ h n M _ G q z _  
  46.              h n z d h + M _ I q z _ h  
  47.             p z d h g M _ C t w x y k f  
  48.            z d h g h + 1 s u r l k f z c  
  49.           k a u r l k a j j j j j j j j j  
  50.          j j C_O_O_L M _ A _ G _ I _ C a o  
  51.         o o o o o o o o o o o o o o o o o o  
  52.                       o o o o  
  53.                       o o o o  
  54.                       o o o o  
  55.                       o o o o 

 
 这段程序是可以编译通过的,没有任何问题,而且还是可以得到正确的结果的。关于这样的程序,你可以参考本站的这篇文章《6个变态的C语言Hello World程序》,而另一篇文章教你如何搞乱你的C代码。呵呵。当然,你并不需要把在你的VC或是GCC下编译这段代码,现在什么都有在线了,编译器当然也在线了,这里是一篇关于在线编译器的文章,甚至一个在线的IDE(连这个网站的CTO都在本站留言了),上去编译一下你就可以看到结果了。

最后,不恶搞了,在comp.lang.c的这个贴子中看到了很多不错的“如何教新手编程”的观点,下面罗列一些:

 

1)你把你自认为最好程序贴出来,我会帮你看的,但我是不会帮你写的。

2)要解决这个问题,你需要先观察输出,然后找到其规律,算法总是去描述一些有规律的事情。关于你的这个程序,很明显,你可以分成两个部分,一个正 三角,一个倒三角,每一行的星号都是连续的奇数,1,3,5,7,9,而前面的空格又是顺序的自然数:4,3,2,1,你看这样的规律用程序来干不是正合 适吗?

 

从这两个例子,我们可以看到,老手应该如何去教新手,那就是,a)让其独立思考,b)步步为营的引导,c)教一种方法而不是直接给答案。希望与大家共勉。

编程真难啊

上周,在Sun的Java论坛上出现了一个这样的帖子,这个贴子的链接如下:
http://forums.sun.com/thread.jspa?threadID=5404590&start=0&tstart=0

LZ的贴子翻译如下:

大家好,我是一个Java的新手,我有一个简单的问题:请问我怎么才能反转一个整数的符号啊。比如把-12转成+12。是 的,毫无疑问这是个简单的问题,但我弄了一整天我也找不到什么好的方法。非常感谢如果你能告诉我Java有什么方法可以做到这个事,或者告诉我一个正确的 方向——比如使用一些数学库或是二进制方法什么的。谢谢!

 

这个贴子的沙发给出了答案:

n = -n;

 

LZ在四楼回复到:

我知道是个很简单的事,可我没有想到居然这么简单,我觉得你可能是对的。谢谢你。

 

过了一会,又回复到:

不开玩笑地说,我试了,真的没有问题耶!

 

看到这样的贴子,就能想到国内论坛上很多这样的“问弱智问题的贴子”,结果可能都会是比较惨!是的,国外的互联网文化和国内差不多,都是恶搞的人多于热心的人,呵呵。不过,国外的网民们有一点是好的,再恶搞也是就事搞事,不会有侮辱人的语言,这点真是值国内的人学习

 

这本是一个平淡无奇的贴子,不过回复中那些恶搞的“解决方案”太强大了,在这里例举一下吧。

贴子的板凳给出了这样的答案(这是恶搞的开始)

 

  1. int x = numberToInvertSign;  
  2. boolean pos = x > 0;  
  3. for(int i = 0; i < 2*Math.abs(x); i++){  
  4.     if(pos){  
  5.         numberToInvertSign–;  
  6.     }  
  7.     else{  
  8.         numberToInvertSign++;  
  9.     }  

 

然后,有人说,n = -n 可以是可以,但不够晦涩,于是一个晦涩的解决方案出现了:
  1. int n = ….;  
  2.  n = (0xffffffff ^ n) + 1

 

然后,又出现了一些看似简单,其实是比较晦涩的方案

  1. n = ~n + 1

 

  1. n = ~–n; 

 

继续,有才的人从来就不少:

 

  1. n^= 0xffffffff;  
  2. int m;  
  3. for (m= 1; m != 0 && ((n&m) != 0); m<<= 1);  
  4. n|= m;  
  5. if (m == 0) n= m;  
  6. else for (m >>= 1; m != 0; n^= m, m>>=1); 

呵呵,开始越来越强大了,我以前也向大家介绍过《如何加密/弄乱C源代码》的文章,和这些恶搞的人可能有点相似吧。上面这个例子一出,大家都在讨论上面例子中的for循环语句,呵呵,很费解啊。

然后,后面几个就开始乱来了:

  1. public int invert(int i) {  
  2.   return i – (i + i);  

 

  1. switch (i)  
  2. {  
  3.   case 1return –1;  
  4.   case 2return –2;  
  5.   case 3return –3;  
  6.   // … etc, you get the proper pattern  

不过事情还没有结束,看看下面这个吧,OMG。

  1. int absoluteValue(int num)  
  2. {  
  3.  int max = 0;  
  4.  for(int i = 0true; ++i)  
  5.  {  
  6.   max = i > max ? i : max;  
  7.   if(i == num)  
  8.   {  
  9.    if(i >= max)  
  10.     return i;  
  11.    return -i;  
  12.   }  
  13.  }  

 

 还有用字符串的解决方案:

  1. public int invert(int n) {  
  2.     String nStr = String.valueOf(n);  
  3.     
  4.     if (nStr.startsWith(“-“)) {  
  5.         nStr = nStr.replace(“-““”);  
  6.     } else {  
  7.         nStr = “-“ + nStr;  
  8.     }  
  9.     
  10.     return Integer.parseInt(nStr);  

 

别忘了面象对象,有最新Java支持的模板库: 

  1. public interface Negatable<T extends Number> {  
  2.   T value();  
  3.   T negate();  
  4. }  
  5.     
  6.     
  7.     
  8. public abstract class NegatableInteger implements Negatable<Integer> {  
  9.   private final int value;  
  10.     
  11.   protected NegatableInteger(int value) {  
  12.     this.value = value;  
  13.   }  
  14.     
  15.   public static NegatableInteger createNegatableInteger(int value) {  
  16.     if (value > 0) {  
  17.       return new NegatablePositiveInteger(value);  
  18.     }  
  19.     else if (value == Integer.MIN_VALUE) {  
  20.       throw new IllegalArgumentException(“cannot negate “ + value);  
  21.     }  
  22.     else if (value < 0) {  
  23.       return new NegatableNegativeInteger(value);  
  24.     }  
  25.     else {  
  26.       return new NegatableZeroInteger(value);  
  27.     }  
  28.   }  
  29.     
  30.   public Integer value() {  
  31.     return value;  
  32.   }  
  33.     
  34.   public Integer negate() {  
  35.     String negatedString = negateValueAsString ();  
  36.     Integer negatedInteger = Integer.parseInt(negatedString);  
  37.     return negatedInteger;  
  38.   }  
  39.     
  40.   protected abstract String negateValueAsString ();  
  41. }  
  42.     
  43.     
  44.     
  45. public class NegatablePositiveInteger extends NegatableInteger {  
  46.   public NegatablePositiveInteger(int value) {  
  47.     super(value);  
  48.   }  
  49.     
  50.   protected String negateValueAsString () {  
  51.     String valueAsString = String.valueOf (value());  
  52.     return “-“ + valueAsString;  
  53.   }  
  54. }  
  55.     
  56.     
  57.     
  58. public class NegatableNegativeInteger extends NegatableInteger {  
  59.   public NegatableNegativeInteger (int value) {  
  60.     super(value);  
  61.   }  
  62.     
  63.   protected String negateValueAsString () {  
  64.     String valueAsString = String.valueOf (value());  
  65.     return valueAsString.substring(1);  
  66.   }  
  67. }  
  68.     
  69.     
  70.     
  71. public class NegatableZeroInteger extends NegatableInteger {  
  72.   public NegatableZeroInteger (int value) {  
  73.     super(value);  
  74.   }  
  75.     
  76.   protected String negateValueAsString () {  
  77.     return String.valueOf (value());  
  78.   }  

 

 

这个贴子基本上就是两页,好像不算太严重,如果你这样想的话,你就大错特错了。这个贴子被人转到了reddit.com,于是一发不可收拾,在上面的回贴达到了490多条。链接如下:

http://www.reddit.com/r/programming/comments/9egb6/programming_is_hard/

有人说,要用try catch;有人说要使用XML配置文件……,程序员们在追逐更为变态和疯狂的东西,并从中找到快乐,呵呵。

看完后,正如reddit.com所说——“编程好难啊”!

无独有偶,这并不是第一次,也不会是最后一次,让我们看看在PHP的官网上发生的类似的一幕——讨论PHP的abs取绝对值函数的函数说明文档中的回复:

http://us.php.net/manual/en/function.abs.php#58508

又是一个长贴,还带着很多性能分析,真的很好很强大!

黑客的价值观

黑客,可能在大家的眼里是那些入侵别人计算机搞破坏的人,其实并不是那样的。如果你这样认为了,只能说明你对计算机文化并不了解,真正的黑客是一种 自由的象征,他们挑战权威,追求自由,并和很多非人类的行为作斗争。如果你想了解黑客文化,你一定要去看看我写的《Unix传奇,上篇下篇》。你会对正宗的计算机文化以及黑客文化有所了解的。而那些只懂得入侵别人计算机搞破坏活动的“黑客”只能称为是街头的小混混,他们根本就不配称黑客。

下面有四篇关于“Hacker’s Code”文章,我觉得相当的不错,可以让你明白什么是黑客的行为规范,道德准则,以及黑客的历史使命,希望能对你有启发。但是翻译水平有限,所以我请Mailper同学帮忙翻译了一下,但还是觉得原文更为传神,尤其是原文中的押韵,双意以及朗朗上口,所以,下面提供了中英文对照。如果有翻译得不好的还请大家指正。

 

The Hacker’s Code

http://muq.org/~cynbe/hackers-code.html

“A hacker of the Old Code.”

  • Hackers come and go, but a great hack is forever.
    黑客们来来往往,但是只有黑客的壮举是永存的
  • Public goods belong to the public.*
    公众的东西是属于大众的
  • Software hoarding is evil.
    Software does the greatest good given to the greatest number.
    圈养软件是邪恶的,最好的软件是有最多人使用的
  • Don’t be evil.
    不作恶
  • Sourceless software sucks.
    不公开源码的软件是令人厌恶的
  • People have rights.
    Organizations live on sufferance.
    每个人都是有权利的,而组织是建立在互相的容忍上的
  • Governments are organizations.
    政府也是组织
  • If it is wrong when citizens do it,
    it is wrong when governments do it.
    对与错的标准,对于公民和政府是同样适用的。(不能“只许州官放火不许百姓点灯”)
  • Information wants to be free.
    Information deserves to be free.
    信息需要自由(免费),信息也应该是是自由(免费)的
  • Being legal doesn’t make it right.Being illegal doesn’t make it wrong.
    合法的不一定是正确的,不合法不一定就是错误的
  • Subverting tyranny is the highest duty.
    推翻专制是黑客的最高天职
  • Trust your technolust!
    相信你的“技术贪欲”

* Definition: A good is public if the marginal production cost is lower than the marginal billing cost.
定义
一个好的公众事物仅当其边际产值小于其边际广告值。(关于 marginal production是一个经济学术语,我不是很懂,大家可以参考这篇文章

 

The Hacker’s Code of Ethics

http://courses.cs.vt.edu/cs3604/lib/WorldCodes/Hackers.Code.html

Levy (1984) suggests that there is a “code of ethics” for hacking which, though not pasted on the walls, is in the air:

列维认为黑客有一种准则,这种准则不是墙上贴着的,而是像空气一样无处不在的。

  • Access to Computers – and anything which might teach you something about the way the world works – should be unlimited and total. Always yield to the Hands-On Imperative!
    计算机的使用(就像任何教会你去了解这个世界的东西一样)应该是无限和无所不包的。真理来自实际动手操作。
  • All information should be free.
    所有的信息都应该是自由的(免费和不加限制的)
  • Mistrust Authority – Promote Decentralization.
    不要相信权威,推崇分权和群众的智慧
  • Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race, or position.
    英雄(黑客)不问出处,更不会去计较世俗的标准:学历,年龄,种族和职位高低。
  • You can create art and beauty on a computer.
    黑客可以在计算机上创造艺术和美。
  • Computers can change your life for the better.
    计算机可以提升你的生命。

Reference:

Levy, Steven. 1984. Hackers: Heroes of the Computer Revolution, Anchor Press/Doubleday, Garden City, NY, 458 pp.

史蒂芬.列维 1984  黑客:计算机革命的英豪们, Achor Press… 第458页

 

DRAFT The Hacker’s Code DRAFT

http://www.petascale.org/code/code.html

Preamble: We, the people of the electronic universe, in order to establish a society of knowledge and skills, do hereby proclaim the following.

导言:我们,数字领域的主宰者,为了建一个知识和技术的社区,我们发出下面的声明。

Hackers are diverse, from all cultures and backgrounds. Every hacker is unique, yet we all share some characteristics. While not every hacker follows this Code, many believe it is a fair description of our shared traditions, goals and values.

黑客是各式各样的,无论是从文化还是背景。每个黑客都是唯一的,然后,我们是有一些相同的特质的。也许并不是所有的黑客都会跟从下面的准则,但大多数黑客都相信这是一个公正的惯例,目标和价值观。

  • Hackers share and are willing to teach their knowledge
    黑客共享并愿意传播他们的知识。
  • Hackers are skilled. Many are self-taught, or learn by interacting with other hackers.
    黑客都是老手。他们中很多人要么是自学,要么是与别的黑客相互共世而成长的。
  • Hackers seek knowledge. This knowledge may come from unauthorized or unusual sources, and is often hidden.
    黑客查找知识。那些知识可能是多一些未授权或是不寻常的通常都是被隐藏起来的地方来的。
  • Hackers are tinkerers. They like to understand how things work, and want to make their own improvements or modifications.
    黑客都是些好管闲事的人。他们总是喜欢对事物刨根问底,而且总是要为改善那些事情加上自己的想法。
  • Hackers often disagree with authority, including parents, employers, social customs and laws. They often seek to circumvent authority they disagree with.
    黑客通常都在挑战权威,包括家长,同事,用户以及法律。他们总是挑战那些他们并不认可以权威。
  • Hackers disagree with each other. Different hackers have different values, and come from all backgrounds. This means that what one hacker is opposed to might be embraced by another.
    黑客也是互不信任的。不同的黑客有不同的价值取向,而且也有相同的背景。也就是说,某个黑客被反对了,但也会被别的黑客所拥护。
  • Hackers are persistent, and are willing to devote hours, days and years to pursuing their individual passions.
    黑客是永不放弃的。他们愿意全身心地把他们的热情投入到每一个小时,每一天,每一年中。
  • This Code is not to prescribe how hackers act. Instead, it is to help us to recognize our own diversity and identify.
    准则并不是说明黑客是什么样的,而说让我们明白我们的不同性和一致性。
  • Every hacker must make his or her own decisions about what is right or wrong, and some might do things they believe are illegal, amoral or anti-social to achieve higher goals.
    每一个黑客必需自己为对和错作决定,有一些事可能是不合法,不道德的,甚至反社会的,但却可以让他们攀上自己价值观的高峰。
  • Hackers’ motivations are their own, and there is no reason for all hackers to agree.
    黑客的动机是他们自己的,而且无需任何理由获得其它的同意。
  • Hackers have a shared identify, however, and many shared interests.
    黑客一般会有共同的认识,然而,许多黑客却是拥有共同的利益。
  • By reading this Code, hackers can recognize themselves and each other, and understand better the group they are a part of. This will be beneficial to all hackers.
    了解了这些准则,黑客们能够赏识自己或相互赏识,并相当明白他们是这个团体的一部分。这会让所有的黑客受益。

The Conscience of a Hacker

http://www.phrack.org/issues.html?issue=7&id=3&mode=html

##=========================================

\/\The Conscience of a Hacker/\/

by

+++The Mentor+++

笔名:导师

Written on January 8, 1986

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Another one got caught today, it’s all over the papers.  “Teenager Arrested in Computer Crime Scandal”, “Hacker Arrested after Bank Tampering”… Damn kids.  They’re all alike.

今天有一个被捕的消息受到媒体热议。“某少年由于计算机犯罪被捕”,“入侵银行的黑客被捕”…一帮臭小子,他们都一样。

But did you, in your three-piece psychology and 1950′s technobrain, ever take a look behind the eyes of the hacker?  Did you ever wonder what made him tick, what forces shaped him, what may have molded him?

但是你们是帮老朽只知道老套的心理学和50年代的技术。你们有没有想想黑客究竟在想什么?你们有没有想想他们为什么这么做,什么造就了他们,什么塑造了这帮黑客?

I am a hacker, enter my world…

我是名黑客,请走进我的世界…

Mine is a world that begins with school… I’m smarter than most of the other kids, this crap they teach us bores me…

我的世界是从学校开始的…我是学校里最聪明的孩子,学校教我的垃圾让我厌倦。

Damn underachiever.  They’re all alike.

都他妈的水货,这帮子成绩不好的都一样烂。

I’m in junior high or high school.  I’ve listened to teachers explain for the fifteenth time how to reduce a fraction.  I understand it.  “No, Ms. Smith, I didn’t show my work.  I did it in my head…”

我初中高中时候就是如此了。白痴老师一个分式化简要解释15次。这些我全懂。所以我说”不用了,XX老师,我不用写这些步骤,我可以心算…”

Damn kid.  Probably copied it.  They’re all alike.

一帮傻同学,估计都只知道抄写老师的板书,一棒子二百五。

I made a discovery today.  I found a computer.  Wait a second, this is cool.  It does what I want it to.  If it makes a mistake, it’s because I screwed it up.  Not because it doesn’t like me…

今天我发现新大陆了。我遇到了一台计算机。真是太酷了,计算机完全按照我的指令执行。如果计算机犯了错,是因为我没搞对。而不是因为它不喜欢我…

Or feels threatened by me…

也不是觉得我成绩太好到威胁它了,也不是因为我是个自是聪明自以为是,而且不对我教条主义

Or thinks I’m a smart ass…

Or doesn’t like teaching and shouldn’t be here…

Damn kid.  All he does is play games.  They’re all alike.

而我的一帮傻逼同学,都他妈只知道玩。

And then it happened… a door opened to a world… rushing through the phone line like heroin through an addict’s veins, an electronic pulse is sent out, a refuge from the day-to-day incompetencies is sought… a board is found.

突然,与计算机相处为我打开了一扇通往另一个世界的门。一股电脉冲从电话线传送出去,就好像海洛因冲过毒瘾者的血脉,我可以逃离那帮子傻逼,一个新大陆!

“This is it… this is where I belong…”

是的!计算机是我的归属。

I know everyone here… even if I’ve never met them, never talked to them, may never hear from them again… I know you all…

在这个世界里,我认识这里的每一个人…虽然我并没有跟他们见面,没跟他们交谈,也许以后也不会再提到他们的消息。但是他们对我是那么的熟悉。

Damn kid.  Tying up the phone line again.  They’re all alike…

一棒子傻逼,大概他们又把我的电话线打结了。

You bet your ass we’re all alike… we’ve been spoon-fed baby food at school when we hungered for steak… the bits of meat that you did let slip through were pre-chewed and tasteless.  We’ve been dominated by sadists, or ignored by the apathetic.  The few that had something to teach found us willing pupils, but those few are like drops of water in the desert.

是的,我们黑客都差不多…我们智力高度成熟,我们想啃牛排的时候只有被喂婴儿食物。好不容易有点肉吃,也是被嚼烂了的。我们被虐待狂欺负,被冷漠者漠视。偶尔有好人理解我们其实是最好学的学生,但是这种人少得跟沙漠中的水滴一样。

This is our world now… the world of the electron and the switch, the beauty of the baud.  We make use of a service already existing without paying for what could be dirt-cheap if it wasn’t run by profiteering gluttons, and you call us criminals.  We explore… and you call us criminals.  We seek after knowledge… and you call us criminals.  We exist without skin color, without nationality, without religious bias… and you call us criminals.

You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it’s for our own good, yet we’re the criminals.

我们这些黑客长大了…这个世界充满着电子,开关,和美丽的波特(信号传输单位)。我们并不是在犯罪,我们只是在免费使用服务,这些服务要不是因为那 些敛财狂本可以是非常廉价的。我们在探索…可你们说我们是在犯罪。我们是在寻求知识…可你们说我们是在犯罪。我们黑客无处不在,不分肤色,没有国界,没有 宗教偏见…可你们说我们是在犯罪。你们这些伪君子制造了原子弹,发动战争,某战争,不忠,并且对我们说谎;你们居然说你们的行径是为我们好,而我们黑客是 犯罪分子。

Yes, I am a criminal.  My crime is that of curiosity.  My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for.

好吧,我是犯罪分子。我所犯的最是好奇心。我的罪过是基于一个人的言行评判一个人,而不是他的长相。我的罪过是我比你聪明,而你大概永远不会原谅我比你聪明。

I am a hacker, and this is my manifesto.  You may stop this individual, but you can’t stop us all… after all, we’re all alike.

我是一名黑客,以上是我的宣言。你可以制止一个个体,但是你阻止不了我们全部…因为,我们黑客都一样。

+++The Mentor+++

署名:导师

Unix传奇(下篇)

Unix是目前还在存活的操作系统的元老了,走过了40年的历程(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。 由它引发的思想变革,对当今计算机文化造成的深远影响。这是一段所有从事计算机行业人员尤其是软件开发人员需要了解的历史。Unix的传奇历史是整个计算 机世界文化最具代表性的,它对整个计算机世界文化的影响也是最巨大,最深远的。他给人带来的不单单的对过去的回味,更为我们带来了计算机世界的新思潮。

下篇

  • Unix与黑客文化
  • Unix的历史教训
  • Unix 家族谱
  • Unix的特点
  • Unix的影响和哲学
  • Unix痛恨者手册

上篇

  • Unix起源
  • Unix分裂
  • Unix的法律纠纷
  • GNU开源组织
  • Linux横空出世
  • Linux今天的领袖

Unix与黑客文化

黑客的文化和Unix的商业化存在着必然的联系。自从Unix出现,黑客文化就与之而来。

1993初,一个悲观的观察家撰文指出,已经有理由认为Unix的传奇故事连同他带有黑客文明将一同破产。许多人预测,从那时起Unix将在六月内 死亡。他们很清楚,十年的Unix商业化,使自由跨平台的Unix梦以失败告终。Unix允诺的跨平台可移植性,在一打大公司专有的Unix版本之间不停 地斗嘴中丢失,一个完美的操作系统最终沦为多种版本的一团乱麻,这应该说是人类文明史上的一个重大悲剧。

在专有软件社会中,只有像微软一样的“集权制,大教堂”生产方式才能成功。那个时代的人悲观地相信,技术世界的个人英雄主义时代已经结束,软件工业 和发展中的互联网络将逐渐地由像微软一样的巨型企业支配,再也没有“佐罗”,世界是恺撒大帝的世界,计算机文明将进入黑暗的帝国时代。黑客已经死了,自由 不付存在。

自从Unix出现以来,第一代的Unix黑客似乎垂垂老矣,衣食不饱( Berkeley计算机科学研究组在1994丢失了自己基金)。这是一个抑压的时代。专有的商业Unix的结果证明那么沉重、那么盲目、那么不适当,以致 微软能够用那次等技术的Windows抢走他们生存的空间,拿走他们的干粮。黑客世界的残余力量被逼到了世界上的角落里,苟延残喘。

就在黑客文化日渐衰落之时,美国新闻周刊的资深记者Steven Levy完成了著名的《黑客列传》一书,书中着力介绍了一个人物:Richard M. Stallman的故事,他是麻省理工学院(MIT)人工智能实验室领袖人物,坚决反对实验室的研究成果商业化。他是商业软件社会中坚强的一员,决不随波 逐流,建立了全新的黑客文化。

Richard M. Stallman(他的登陆名RMS更为人熟知)早在1970年代晚期就已经证明他是当时最有能力的程序员之一。Emacs编辑器就是他众多发明中的一 项。RMS的目标是将后1980的松散黑客社群变成一台有组织的社会化机器以达到一个单纯的革命目标。也许他未意识到,他的言行与当年卡尔·马克思号召产 业无产阶级反抗工作的努力如出一辙。RMS宣言引发的争论至今仍存于黑客文化中。他的纲要远不止于维护一个代码库,已经暗含了废除软件知识产权主张的精 髓。RMS通过“自由软件(free software)”让黑客文化更加有自我意识。当然,这个充满魅力又具争议的人物本身已经成为了一个黑客文化英雄。

只有痴迷的“黑客”和具有创造力的怪人结成的反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。 ——The Art of Unix Programming

RMS让世界上所有的人都知道,入侵电脑系统只是低级不入流的黑客干的事,真正的黑客,是为了自由,为了软件的自由,为了挑战计算机世界中的霸权主 义而斗争。他们不是街头小混混,他们更像是绿林好汉,更像是罗宾汉,更像是佐罗。就像渴望民主的人民同专制的政府斗争一样。RMS领导着许多的黑客通过互 联网向专有软件发出宣战。

X Windows是首批由服务于全球各地不同组织的许多个人以团队形式开发的大规模开源项目之一。电子邮件使创意得以在这个群体中快速传播,问题由此得以快 速解决,而开发者可以人尽其才。软件更新可以在数小时之内发送到位,使得每个节点在整个开发过程中步调一致。网络改变了软件的开发模式。

另一方面,RMS的理论体系有许多东西非常有争议,他的GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写 Unix的年头都比GPL声明要长得多,GPL依然有太多的限制,而BSD协议则比GPL更加的自由。另一方面,RMS走向了另一个极端,他是完全反版权 的,反商业化的。把软件产品从强制收费推向了强制免费、共享和开源,这也为他带来了许多许多的争议。

在RMS组织黑客闹革命的年代里,没有多少黑客认同于RMS的理论体系,更多的他们参与GNU只是为了体现那种在互联网上协同工作,令人激动的工作模式。自从GNU设立以来,争议不断,而黑客文化却从未有统一在他的理想体系之下。

自从Linux出现以后,一个新的黑客领袖出现了,Linus Torvalds的中庸态度网聚了世界上顶尖的黑客,其绕过了GPL和反GPL的派系之争,他使用GNU的工具从而以GPL的“传染性”保护了 Linux,但他同时也不承认RMS的理论思想体系,他即开源,又支持商业化。虽然,他没有带给黑客们什么重要的思想体系或统一的价值观,但他整合了全世 界黑客的阵营,让所有的黑客的行为都围绕着Linux这一事物进行。他以“用自由软件是因为它运行得更好”轻而易举地盖过了“用自由软件是因为所有软件都 该是自由的”。

1998年初,这种新思潮促使网景公司(Netscape Communications)公布了其Mozilla浏览器的源码。媒体对此事件的关注促成了Linux在华尔街的上市,推动了1999-2001年间 科技股的繁荣。事实证明,此事无论对黑客文化的历史还是对Unix的历史都是一个转折点。

 

Unix的历史教训

下面的文字出自《The Art of Unix Programming》(Unix编程艺术)。令今天我们所有人所反思。

在Unix历史中,最大的规律就是: (看看《谁写了Linux》你就会知道这一规律)

距开源越近就越繁荣。任何将Unix专有化的企图,只能陷入停滞和衰败。

回顾过去,我们早该认识到这一点。1984年至今,我们浪费了十年时间才学到这个教训。如果我们日后不思悔改,可能还得大吃苦头。

虽然我们在软件设计这个重要但狭窄的领域比其他人聪明,但这不能使我们摆脱对技术与经济相互作用影响的茫然,而这些就发生在我们的眼皮底下。即使Unix社区中最具洞察力、最具远见卓识的思想家,他们的眼光终究有限。对今后的教训就是:过度依赖任何一种技术或者商业模式都是错误的——相反,保持软件及其设计传统的的灵活性才是长存之道。

另一个教训是:别和低价而灵活的方案较劲。或者,换句话说,低档的硬件只要数量足够,就能爬上性能曲线而最终获 胜。经济学家Clayton Christensen称之为“破坏性技术”,他在《创新者窘境》(The Innovator’s Dilemma)[Christensen]一书中以磁盘驱动器、蒸汽挖土机和摩托车为例阐明了这种现象的发生。当小型机取代大型机、工作站和服务器取代 小型机以及日用Intel机器又取代工作站和服务器时,我们也看到了这种现象。开源运动获得成功正是由于软件的大众化。Unix要繁荣,就必须继续采用吸 纳低价而灵活的方案的诀窍,而不是去反对它们。

最后,旧学派的Unix社区因采用了传统的公司组织、财务和市场等命令机制而最终未能实现“职业化”。只有痴迷的“黑客”和具有创造力的怪人结成的 反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。

 

Unix族谱

Unix的故事仍旧延续着……,许多网站也为这段历史留下记录。一个详细记录Unix历史的网站(http://www.levenez.com /unix/),这个网站忠实记载着1969~2005 年Unix发展的大事,而且还有 PDF 档案可供下载,上面有一个庞大的UNIX家族版本树, 让人叹为观止。网站的首页陈列每个时期Unix的历史,也代表着无数工程师的心血与努力。

下面是一个简单的Unix的族谱:

点些查看《Linux 分发包族谱

 

Unix的特点

现在的文献中提到Unix基本上是说,由Ken Thompson和Dennis Ritchie共同开发的。而通过历史我们也能发现,Unix的主要是由Ken Thompson写下的。但在学术界,Dennis Ritchie的名字往往被排在了Ken Thompson前面的。这就是因为,Dennis Ritchie不但发明了C语言,而且当时他设计Unix操作系统的设计思想,影响了整个世界,直到今天。

当时,他们开发UNIX,没有正式立项,是Ken Thompson和Dennis Ritchie等少数几个人偷偷干的,如果一切都要从头从新设计,那几乎是不可能的。所以,Unix吸取与借鉴了Multics的经验,如内核,进程,层 次式目录,面向流的I/O,把设备当作文件,……等等。但是Unix在继承中又有创新,比如Unix采用一种无格式的文件结构,文件由字节串加\0组成。 这带来两大好处:一是在说明文件时不必加进许多无关的“填充物”,二是任何程序的输出可直接用作其他任何程序的输入,不必经过转换。后面这一点叫做“管 道”(piping),这就是Unix首创的。此外,像把设备当作文件,从而简化了设备管理这一操作系统设计中的难题,虽然不是UNIX的发明,但是实现 上它采用了一些新方法,比Multics更高明一些。

下面是Unix的特点:(30多年过去了,这些东西早已变成经典)

  • Everything (including hardware) is a file
    所有的事物(甚至硬件本身)都是一个的文件。
  • Configuration data stored in text
    以文本形式储存配置数据。
  • Small, single-purpose program
    程序尽量朝向小而单一的目标设计
  • Avoid captive user interfaces
    尽量避免令人困惑的用户接口
  • Ability to chain program together to perform complex tasks
    将几个程序连结起来,处理大而复杂的工作。

Unix的影响和哲学

Unix是第三次工业革命中计算机软件领域最具代表性的产物。在这近40年中,由Unix造成的影响是最有深远意义的。就我看来,Unix为软件领域带来了至少以下有积极的东西,由这些东西所引发的直接或间接的事物更是举不胜数。

  1. 软件开发的若干哲学和思想。
  2. 全民参与推动软件,代码共享的模式。
  3. 开启了黑客文化和开源项目。
  4. 免费和商业的完美结合的Linux。
  5. C语言,而后发展的C++,Java等等类C的语言和脚本。(参看《C语言的演变史》)
  6. TCP/IP,其的Socket编程已成为今天通用的网络编程主流。(参看《到处都是Unix的胎记》)

不能不说,AT&T虽然发展了Unix,但今天Unix的混乱的局面也和AT&T 有着直接原因。但反过来说,如果没有 AT&T的反面教材,今天的GNU/Linux很有可能也不会出现。AT&T究竟是限制了Unix的发展,还是以反面示例促进了Unix 社区,已不好评说。今天,软件是商业化好还是开源好的争论还在继续,纵观这几十年来Unix的历史,Linux的划时代地出现。相信你会得出自己的结论。 不管怎么样,Unix的经历对计算机领域贡献的不单单是技术,他给我们提供了丰富而生动的教材。特别是Unix引发的哲学,让今天的我们依然受益不浅。

说到Unix为我们所带来的软件开发的哲学,我必需要说一说。Unix遵循的原则是KISS(Keep it simple, stupid)。在http://en.wikipedia.org/wiki/Unix_philosophy 上有很多的基本上大同小异的Unix哲学,都是很经典的。

Doug McIlroy 是认为UNIX的哲学是这样的:三条哲学,简明扼要,就是这三条哲学贯穿着整个Unix世界。尤其是第一条“do one thing and do it well”真是相当精彩!

  • Write programs that do one thing and do it well.
  • Write programs to work together.
  • Write programs to handle text streams, because that is a universal interface.

只要是Unix的程序员,他们会比别的程序员在任何时候都会不停地强调着这三条哲学。

而《The Art of Unix Programming》总结了下面这些哲学,都是至理名言啊。

  • Rule of Modularity: Write simple parts connected by clean interfaces.
  • Rule of Clarity: Clarity is better than cleverness.
  • Rule of Composition: Design programs to be connected to other programs.
  • Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
  • Rule of Simplicity: Design for simplicity; add complexity only where you must.
  • Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
  • Rule of Transparency: Design for visibility to make inspection and debugging easier.
  • Rule of Robustness: Robustness is the child of transparency and simplicity.
  • Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
  • Rule of Least Surprise: In interface design, always do the least surprising thing.
  • Rule of Silence: When a program has nothing surprising to say, it should say nothing.
  • Rule of Repair: When you must fail, fail noisily and as soon as possible.
  • Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
  • Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
  • Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
  • Rule of Diversity: Distrust all claims for “one true way”.
  • Rule of Extensibility: Design for the future, because it will be here sooner than you think.

X Windows 的设计者 Mike Gancarz 给出了下面九条哲学思想

  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.

在今天,这种思想依然被传承着,在影响着世界上各个角落的每一个程序员。

 
 

Unix痛恨者手册

这里还需要值得一提的是一本叫《The Unix-Haters Handbook》,中文译做《Unix痛恨者手册》。可以在这里下载:http://research.microsoft.com/~daniel/uhh-download.html。 其中以调侃的语气声讨了Unix的种种不是。虽然这是十年前的一本书了,但还是值得一读。这本书指出了许多Unix的设计错误,指出了种种看起来很合理的 设计走向了荒谬,还这样调侃了C语言——“如果说C语言给足了让你上吊的绳子,那么,C++在给了你足够的绳子把你的邻居全部捆起来之后,还给了你足够的 绳子让你为一艘小帆船装上帆,最后你还有足够的绳子把自己吊死在帆船的桅杆上”。呵呵,相当的尖酸刻薄吧。里面有一句对操作系统的评价是这样的:“The fundamental difference between Unix and the Macintosh operating system is that Unix was designed to please programmers, whereas the Mac was designed to please users. (Windows, on the other hand, was designed to please accountants.”(Windows设计给会计人员?!连计算机用户都不是了,呵呵)

不过,我可以感觉得到这本书的作者在书中对Unix的感情是比较复杂的,爱恨交加,在书的最后有这样一句话“would anyone have spent this much time and effort writing about how much they hated Unix if they didn’t secretly love it? I’ll leave that to the readers to judge, but in the end, it really doesn’t matter: If this book doesn’t kill Unix, nothing will”。是的,如果Unix能够存活这么长的时间,那么,不会有什么东西可以把他消灭了。

从《Unix痛恨者手册》这本书,再加上Unix的历史,我们可以感到Unix的经历的风风雨雨,在Unix上面出现有种种教训,近40年的历 程,Unix历经磨难,几近夭折,一路走来的确很不容易,让人由衷感叹。今天的Unix,今天的软件工业和以前相比已是不可同日而语。很大程度上,这些都 要归功于这个充满苍桑的Unix。

 

后记

在中国我们开始学习计算机的时候,我们被Microsoft所创造的文化所笼罩里。就在Unix出现革命性的转变,在Unix影响计算机世界文化的 那几年里,科班出生专业开发人员学习的是MS-DOS和微软的文化,我们犹如一个井底之蛙一样,对外面的翻天覆地的变化无动于衷。微软创造的文化在我们这 里尤其地根深蒂固,我们几乎忘记了另外一边的Unix(参看《Unix 40年:Unix年鉴》、《Unix 40年:昨天,今天和明天》)。

在那充满激情的Unix的岁月里,大伙为了科研目的或个人兴趣在Unix上进行各种开发,并且不计较金钱利益,将这些源码公开,互相共享。在那里, 开发和自由成为主题,正因为如此,当今的世界才如此丰富多采。在40年Unix文化和技术积淀的里面,蕴涵着比较纯正的计算机文化和思想。

纵观整个Unix的历史过程中,许许多多的程序员、工程师前辈们在Unix中所摸爬滚打,他们的辛勤地、他们呕心沥血地跟随Unix,努力建立一个 繁荣的计算机世界的文明。Unix不是一个简简单单的操作系统。有人说,Unix是程序员设计给程序员的,一点没错。Unix的近40年历史造就了它的博 大精深,它给程序员们带来的绝不仅仅只是技术上的知识。它的失误,它的无奈,它的精神,它的荣耀,它从技术和思想上都启迪着我们。对于程序员来说,学习 Unix就等同于向前辈程序学习。无论你是什么样的程序员,你都应该了解Unix,这是开发人员的根,前面的开发者造就了它,而它又在引领后面的开发人 员,它是前辈程序员们交给我们的一份礼物,一个接力棒,它是开发人员赖以生存的土壤,是上一辈程序员留给我们这一代程序员开启未来的钥匙。Unix就像一 个程序员教父一样,理当受到我们的尊敬和崇拜。

 

参考资料

偷了世界的程序员

本文译自美国时代(time.com)的《The Men Who Stole the World》,原作者:Lev Grossman。相当有传奇色彩,读起来很爽,翻译过来。译得不好,还请大家指正。本中的四个程序员可能并不是那么声名显赫,而且也很不老实,或许算不上成功,不过他们的确改变了世界。而本文有分析了互联网上P2P的那些事,相当的有参考价值

 

十年前,有四个年轻人改变了这个世界的运作方式。他们使用的并不是法律或是武器或是金钱,而是使用软件来改变世界。他们当时有着激进和极具破坏性的 想法,并把这些想法付诸于代码,在Internet上以免费自由方式发布。这四个人,没有一个完成了大学学业,却奠定了今天我们习惯的数字媒体环境的基 础。然后,因为各种原因,他们也迅速地消失在公众视野中。

1999年,美国东北大学的一个叫Shawn Fanning的一年级新生开发Napster,从此,成为了P2P文件共享和不需要大型机构或零售商就可以获得音乐的先锋和范例。《时代周刊》和《财富》把他放上了封面。那时,他在19岁。

就在同一年,一个挪威的只有十几岁的年轻人 Jon Lech Johansen,他和另两个今天都不为人知的程序员,写下了一个程序解密了商业的DVD,而他成为了全球盛名的“ DVD Jon.”,那年,他只有15岁。

而在1997年,Justin Frankel,一个亚利桑那州塞多纳的18岁的黑客,开发了一个免费的MP3播放器——WinAmp,其成为了Windows操作系统上装机必备的软 件,并造就了主流数字音乐的革命。在他发布的第18个月内,1500万人下载了这个软件。而三年后,Frankel 开发了 Gnutella,一个P2P的文件共享协议,没有中心结点,不像 Napster,其不可能被关闭。目前有上百万人还在使用它。

2001年,Bram Cohen, 当年 26 岁,开发了一个P2P的文件传输共享协议—— BitTorrent,其以全新一流的架构全面优化了网络上大文件的共享和传输效率。 BitTorrent 也变成了整个Internet上发布大数据和文件的一个标准。

在 2000年代的上半段,《时代》采访了这四个程序员。那个时候,看起来他们要以数字化动乱把整个复杂的传统媒体娱乐平台给拆除,而对有版权的电影,音乐和 电视的收费则变得困难和不可能,那些艺术家也将无法从他们作品得到报酬,整个娱乐业包括时代华纳也将被炸为平地。而盗版业则借着这四个程员的软件侵袭了美 国公司。

“毕竟”,我们在2003年报道到:“在整个信息经济中,不可能所有的信息都是免费的”。如果毁灭正在来临,那么, Fanning, Johansen, Frankel 和 Cohen 将是那“四骑士”(译注:启示录中的四骑士传统上被解释为瘟疫、战争、饥荒和死亡)。



Shawn Fanning(左) 和 Bram Cohen(右)

 

没有毁灭

毁灭并没有发生。但是整个娱乐业因此而改变,而这些改变的复杂性和逐渐演进超出了我们的期望。这些发生的故事, 海盗王们的事,对于今天数字化世界正在发生的事情有非常高的参考和教育价值。Fanning, Johansen, Frankel 和 Cohen 现在都硅谷运作着自己的小的,合法的软件公司。他们现在没有在做和盗版有干系的事情——当然,如果他们真的没有。

Fanning,四个人中唯一一个没有回复我们的采访请求的人,他较早地退出了毁灭传统唱片业的事业。在2001年,Napster因为不堪众多关 于其协助并煽动版权侵权的法律诉论的重压,而不得不关闭。2002年,Fanning 创办了新的服务 Snocap —— 他尝试把文件共享合法化,在和相关的唱片公司合作下,Snocap 赋予消费者对其下载作品给于创作者报酬的权利。

但是,到那个时候,免费自由的文件共享程序像病毒一样的增涨,而用户则热衷于更换他们的音乐硬盘。他们仅在2001年8月一个月内就交换了30亿个 文件。而要从这些文件交易中收到钱是根本不可能的。是的,要和免费竞争是很难的一件事。 Fanning 创造了一个连他自己都搞不定的怪物。

所以,他停止继续尝试Snocap下去。 Fanning 的下一个项目是给游戏玩家的社交网络叫 Rupture,最终,他在2008年时以1500万美金把其卖给了电子艺界Electronic Arts ——这是他的第一次发薪日。他现在又于2008年11月开了一个公司 Path, 其主要提供给iPhone手机进行照片分享的服务。

而Napster呢?今天他还在。这个商标在破产拍卖时被卖了,然后再被卖了,但其再也没有被 重建。现在其被  Best Buy 运营,其是 iTunes 的竞争者,其口号是—— “More than just a music store.” (不仅仅只是音乐商店)

 

 
 
没有盗版的人


作 为 Gnutella 的作者, Justin Frankel 是 Fanning 合法的继任者。不像 Fanning,他很早就收获了他的第一桶金。在1999年,当WinAmp大放光芒的时候,AOL买了WinAmp和他的公司——Nullsoft,价 格应该在1亿美金左右。这让 Frankel 在20岁的时候就非常富有。当然,他也成了AOL的员工。

但这并不是很匹配,在Nullsoft, Frankel的做法是把软件开发到极致,然后免费发布出去。而在 AOL,软件的商业销售威胁并压倒了软件本身。“我致力于的产品,就像这样,我们不愿意金钱的掺入,我们正和其它公司做这笔交易,所以,产品也只能是这样 的结果”,他回忆到,“没有人真正地去关心用户的体验是怎么样的”。

与此同时,Frankel 用他的业余时间开发 Gnutella 。这是一个很有才的软件,不像Napster,其是真正的分布式,没有中心服务器,这样,也没有那个“关闭按钮”让那些律师按。在2000年3月的时 候,Gnutella上线,其发了一个贴子:“看见没?AOL也能给你一些好的东西!”,但是就算是这样,也没有换来AOL对其忠爱,而一大堆互联网公司 在那时试图并入大的媒体公司,在Napster被诉讼的中期,2004年,他离开了AOL。

然后,他开始干了些有趣的事:他离开了他的成功地,他不用 Gnutella,也没有花一毛钱,就算是10年以后也是这样。 LimeWire —— 最流行的 Gnutella 客户端 —— 号称有 5千万用户。“当我开发它的时候,我最初主要是想用其在验证一下是否可行。所以我也不想从其中获益”,他说,“所以,甚至我和它一点关系也没有也说得通, 其就是一个概念”。

Frankel 他最近从旧金山搬到了纽约城,现在全心打理自己的公司 Cockos (别问为什么叫这名),这是一个关于音频产品套件,叫 Reaper。他坚持不懈地改进着它,并且他和他的用户保持着很近的关系,其用户数大约是几万人。“当前的策略我们并不想发展用户数量”,他说,“我们只 是在享受目前的过程,并在做正确的事情”。他并不同意他是这个世界上最危险的geek,而滚石在2004年时对他则是这么认为的。“我不觉得盗版是很危险 的”,他说,“根本上来说,大众的商业模式总是依赖于对所有事情的强控制——尤其是那些有瑕疵的模式。而作为一个软件开发者来说,多少会产生一定程度的盗 版”, Gnutella 对他来说已是远古的事情了。“数字化盗版:它毁了唱片业了吗?没有。唱片业适应了吗?当然,很多人会说得更好。你应该更关注质量,以及更小一些乐队,等等 这类的事”。

“至于音乐流行和排行这么大的市场,这点盗版算什么?” 他边说边笑道, “我希望就是这样。”

 

 
 
 
 
四眼怪兽

在这四骑士中,只有 Bram Cohen他现在还在致力于其10年前的那个项目。他是 BitTorrent的创始人和首席科学家,而一个令人敬佩的旧金山的公司希望能把Cohen的这个令人瞠目的高效的内容分布式技术变成商业化应用。

这是一个奇特的公司:其合法的业务建立在一种仍然可能被用来进行大规模版权侵权的技术上。即使像 BitTorrent这样被8千万用户安装了的东西,其看上去还是像刚刚开始创业一样。 在BitTorrent上有相对较小的一部分是完全合法的 —— 最近的一个研究表明完全合法的部分占11%。而在这11%中,有更少的一部分产生了BitTorrent的收入。

就像 Fanning 的 Snocap 一样,Cohen 试图把其BitTorrent从大量的盗版领域转移到合法的领域,这样才能挣到钱。2007年是BT发展最震动的一年,BitTorrent成为了20世 纪福克斯、派拉蒙、华纳兄弟 和 米高梅 影业公司的合作伙伴,和他们一起共同形成了 Torrent Entertainment Network,主要提供电影,电视,电子游戏的购买和零售。

就像 Fanning一样, Cohen 明了要摆脱盗版并不像看上去的那么容易。“所有的和它有关的事都是灾难”,他说到。Torrent Entertainment Network 于2008年底关闭。回想起来,你能明白这为什么不行。 BitTorrent在用户友好上做得还不够,并且,在其底层也不够有效率。它可以很快地像病毒一样地移动大量的数据。然后,当你要在上面算钱的时候,你 不得不把速度给降下来,然后跟踪并控制其下载流,还和使用一些很扯淡的诸如“数字版权管理(DRM)”之流的技术,其大量地限制了用户那些是可以干的,哪 些是要买的。

“我从这次失败中学到了很多很多的教训”, Cohen 悔恨地说。他现在的策略是只和那些只需要他的BT中的“快速”和“病毒式分布”的人合作。“与其去和那些内容提供商合作,为他们加上特权,以扩展我们的渠 道,我们还不如直接获取那更大的渠道,那里的人更喜欢更为开放的方式”。

迄今,对些感兴趣的独立电影制片商叫 Four Eyed Monsters (四眼怪兽)和 一个叫 Pioneer One (先驱者一号)的电视剧集的创作团队。说起来有点沮丧:Cohen正坐在一个消防水带上,一个程序员所梦想的成功的技术却失控了,而大的玩家又不想来玩。

以他的编码天份,Cohen可以很容易的进入一家大型的公司。但那并不是他的风格。“我的确需要一定的自由度”,他说。他现在正在开发一个全新的事 情——一个P2P的实时数据流的系统,而不是分散的文件。这个项止将可能有巨大的潜力,尤其在新闻、体育等事的互联网上的现场直播。当然,他还在维护着 BitTorrent,但他没有花太多的时间在上面。他说:“当我开发它的时候我就知道没错”。

 
 

简单之道

那么,在去年,盗版导致了什么?在美国,每个人都认为盗版对内容制造者的影响并没有那么坏。一份去年四月份美国审计署的报告,非常牵强地把盗版和滞销给联系在一起,但其结果尚无定论。

打击盗版在今天扁平化的世界上并不那么成功。无政府主义的世界观加上那些无与伦比的代码,不可能在那些合法的津津计较的商业界里传播。好的代码应该 给用户有不同的选择,用户使用他们也并不一定是对行业有益的。而你真正需要的是向那些合法商业界挑战,挑战他们那些限制用户做用户想做的事的那种独裁 性。(译注:这让我想到了腾讯360还有敏感词)

另外一个重要的原因是唱片业的灾难是不会发生的。Steve Jobs 在 2003年4月28日,那段时间是互联网文件共享井喷的时候,Apple揭开了iTunes Music Store的面纱。在那个时候,我们都觉得iTunes不可能成功,就像Snocap以及他和它类似的项目都以失败告终。这是因为,你怎么可以可能和免费竞争呢?

但是iTunes 确实成功了。Apple无情地强调着简单和有魅力的用户接口,以及有乔布斯对唱片业的那强有力的谈判,造就了一个最新型的专业的服务,其可以让你放心地下 载并传输音乐。的确是做到了,尽管其是收费的,而且我们的购买需要和DRM(数字版权管理)扯上关系并限制我们。

于是,我们看到了可以和免费竞争的东西——简单(译注:个人以为可能还需要加上一点时尚)。Napster, Gnutella 和 BitTorrent 从来没有在用户友好度上到达像Apple那样的境界。从来没有人在网上检查并整理那些文件内容,所以,当那些众多的文件被共享时,我们可以看到,很多文件 加杂时广告,色情,木马,病毒以及其它一些垃圾。当乔布斯为我们提供了那条简单之路,我们接受了。很明显,自由太过头——至少数字媒体是这样的。

这 是一个让那些年轻的海盗王们认真学习的教训。就像 Fanning, Frankel 和 Cohen一样, 其实,Jon Lech Johansen 并不能算得上是一个真正的海盗。他没有因为想把好莱坞搞破产而去帮助破解DVD,他这样做是因为他想在他的电脑上看电影。他的电脑安装的是Linux操作 系统,而1999年,在Linux上根本没有可以用来播放DVD的程序,所以,他和他的伙伴们决定自己写一个,所以,他们不得不先把DVD给解密了。

当美国电影协会( Motion Picture Association of America)发现了DVD被破解的这个事,其向挪威政府控告 Johansen,并拘留了他。 他在奥斯陆(挪威的首都)受审两次,不过两次都被宣告无罪。因为他解密的DVD是他付费购买的。

但Johansen真正的明白消费者对其购买的数字媒体的权利,这就好像一本书一样——我们可以不断的使用这本书,或是把这本书借出去,这是我们的 权利。2005年, Johansen 去了加利福尼亚,在那里,他逆向工程了 FairPlay,这是苹果公司的用来保护其多媒体文件的DRM类软件(译注:这是苹果公司用来加密iPod的工具)。之后,他注意到了苹果公司产品的用 户体验是多么的迷人,所以,他在想,应该把这些东西带给全世界给那些更为无序的非苹果的产品。

“我们看到这世上有很多很多的产品,但其并没有像他们那样良好地运作”,Johansen说,那时他26岁的程序员。“所以,我们应该开发一个系统,其可以让这些设备的整合起来并给消费者他一个相当不错的用户体验”。

所谓的 “我们”,就是 Johansen 自己的公司—— doubleTwist,这个公司于2007年创建。 doubleTwist 软件是免费的,是一种像罗塞塔石一样的为数字多媒体软件文件开发的软件——它是可以翻译,和谐并组织大约500种不同设备的文件,把他们放在一起并提供一个相当漂亮的接口。其6月份, doubleTwist 摧出 Android App,当时就有超过50万的用户下载了(译注:大家可以Google一下, 好评如潮)。去年, doubleTwist 开始了他的政变打出了这样的广告:“The Cure for iPhone Envy. Your iTunes library on any device. In seconds.”(嫉妒iPhone的对策。你的iTunes库可以在任何设备上,只需几秒钟。)它这个条幅挂在了苹果在旧金山的旗舰店的外墙上。

Johansen 拒绝承认他和盗版有关系。“至于我被所指责的,真的和我没有什么关系”,他说。“我支持公平使用,意思是你的确是需要合法地获得内容,但你应该有权利使用 任何一款设备或是应用程序来查看那些内容”。 Johansen 像所有的海盗王一样,他总是能写好的代码,而这些好的代码给了人民使用的权力。这才是盗版灾难不会发生的真正原因。盗版永远不希望所有的音乐和电影或是其它的东西成为免费的,他们想要的“free”其实是自由!

 
 

————————————正文结束————————————

最后一句话是点睛之笔,作者对这个世界的认识真是相当的透彻。所以,加粗了。我个人理解本文带给我如下的启示:

  1. 年轻就应该豁得出去,就应该有天不怕地不怕的想法,并付诸于行动。
  2. 互联网上的盗版永远不会停止,与其说是盗版,其后面则是自由和无政府主义。
  3. 自由过度并不是那些利益集团所希望的,并可能会让你惹上麻烦,不过这世界总是因此而改变。
  4. 版权限制和免费并不是最好的,而最根本的是尊重用户的自由权以及不断地化繁为简以改善用户的体验。

另,题外话,最近一段时间都在招人,有一天,一个同事和我说,“现在的这些程序员怎么回事啊?我问他们:‘你心目中的最牛的程序员是谁?’,居然回 答不出来,有人说是Bill Gates,还有人说是马云,气死我了……”。我想想也真是可笑,难道,Dijkstra,Linus,Ken Thompson,Dennis Ritchie,Richard Steven,Bjarne Stroustrup…… 这些人不认识吗?就知道有钱人,哎,这个时代真是个文化缺失的年代!。

其实细想一下,不单单是我国的计算机文化都是那些肤浅的大公司的文化,我们整个国家的公司,社会和人都是很肤浅的。

最后还是送给大家那句话——真正让我们成为局域网的不是那个墙,而是我们自己的肤浅