振宇's profileJUST FOR FUNPhotosBlogLists Tools Help

Blog


    TIOBE Programming Community Index for July 2006

    July Headline: Both C++ and Perl score all time lows

    The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the world-wide availability of skilled engineers, courses and third party vendors. The popular search engines Google, MSN, and Yahoo! are used to calculate the ratings. Observe that the TPC index is not about the best programming language or the language in which most lines of code have been written.

    The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TPC index can be found here.

    Position
    July 2006
    Position
    July 2005
    Delta
    in Position
    Programming Language Ratings
    July 2006
    Delta
    July 2005
    Status
    1 2 Java 21.853% +2.19% A
    2 1 C 17.829% -2.02% A
    3 6 (Visual) Basic 10.689% +4.62% A
    4 4 PHP 10.350% +1.18% A
    5 3 C++ 9.779% -1.28% A
    6 5 Perl 5.626% -2.20% A
    7 7 C# 3.401% +0.26% A
    8 8 Python 3.017% +0.49% A
    9 9 JavaScript 2.108% +0.33% A
    10 10 Delphi 2.037% +0.30% A
    11 12 SAS 1.746% +0.54% A
    12 13 PL/SQL 0.956% -0.09% A
    13 35 22 * Visual FoxPro 0.868% +0.60% A
    14 18 Ada 0.548% -0.20% B
    15 15 Lisp/Scheme 0.515% -0.46% B
    16 21 Pascal 0.511% -0.04% B
    17 30 13 * Ruby 0.506% +0.20% B
    18 33 15 * ActionScript 0.484% +0.20% B
    19 16 VB.NET 0.477% -0.48% B
    20 11 9 * COBOL 0.464% -0.93% B


    Long term trends

    The long term trends for the first 10 programming languages are depicted in the line diagram below.


    Other programming languages

    On request, the complete top 50 of programming languages is listed below. This overview is published unofficially, because it could be the case that we missed a language. If you have the impression there is a programming language lacking, please notify us at tpci@tiobe.com.


    Position Programming Language Ratings
    21 D 0.454%
    22 dBASE 0.408%
    23 IDL 0.384%
    24 ColdFusion 0.380%
    25 ABAP 0.377%
    26 Fortran 0.370%
    27 Awk 0.321%
    28 MATLAB 0.319%
    29 Prolog 0.278%
    30 T-SQL 0.268%
    31 Logo 0.249%
    32 Bash 0.239%
    33 RPG 0.188%
    34 LabView 0.159%
    35 S-Lang 0.144%
    36 CL 0.135%
    37 REXX 0.133%
    38 Forth 0.123%
    39 Smalltalk 0.122%
    40 Icon 0.111%
    41 Tcl/Tk 0.110%
    42 Lingo 0.090%
    43 Objective-C 0.090%
    44 VBScript 0.085%
    45 Postscript 0.083%
    46 Maple 0.076%
    47 OCaml 0.074%
    48 Bourne Shell 0.074%
    49 csh 0.073%
    50 ML 0.070%

    The Next 50 Programming Languages

    The following list of languages denotes #51 till #100. Since the differences are relatively small between these languages, they are only listed (in alphabetical order).

    • ABC, Algol, Alpha, APL, AppleScript, Beta, Boo, cg, Ch, Clarion, Clean, Clipper, cT, Curl, dc, Dylan, Eiffel, Erlang, Euphoria, Felix, Focus, Haskell, Inform, Io, J#, Limbo, Lua, MAD, Magic, Mathematica, Modula-2, Moto, MUMPS, Natural, Oberon, Occam, OPL, Oz, Pike, PILOT, PL/1, Powerbuilder, Progress, Q, REALBasic, Scala, SIGNAL, VHDL, XSLT, and Yorick.


    July's Newsflash - Brought to you by Paul Jansen

    • From this month on we also measure the hits of Google Blogs. The languages that benefit from this are Java, Visual Basic, Ruby, and VB.NET. On the other hand, Ada, D, dBase, and Fortran have a lower rating now because they are not popular in blogs.

    • There was a funny mail from Marcelo Barros de Almeida. He suggested to search for the query "<language> sucks" (sorry for this term) to get a feeling about languages that are unpopular. The top 5 is 1. Java, 2. PHP, 3. C++, 4. C, and 5. Ruby.

    • In the tables below some long term trends are listed about categories of languages. The tables show that the object-oriented paradigm is gaining popularity very slowly, and compiled, statically typed languages are getting back in the spotlight.

      Category Ratings July 2006 Delta July 2005
      Procedural Languages 50% -2%
      Object-Oriented Languages 48% +4%
      Logical Languages 1% -1%
      Functional Languages 1% +0%


      Category Ratings July 2006 Delta July 2005
      Typed Languages 65% +3%
      Untyped Languages 35% -3%


    Frequently Asked Questions

    • Q: What definition of programming languages has been used?

      A: We adopted the definition of programming language from Wikipedia. Based on this definition languages such as HTML and XML are not considered programming languages. The same holds for data query language SQL. ASP and ASP.NET are also not because it is regarded a technique that makes use of other languages such as JavaScript and VBScript or .NET compatible languages.

    • Q: How are dialects of languages grouped?

      A: Some languages are grouped together because they are very similar to each other. An example is the language entry Basic which covers Visual Basic, QBasic, Microsoft Basic, etc. VB.NET is an exception to this rule because it differs too much from classic Visual Basic versions. The ratings for a collection of languages is calculated by taking the maximum of all individual entries. BTW, assembly languages are not grouped in the index because they differ so much from each other in our opinion that they should be treated separately.

    • Q: Am I allowed to show the TPC index in my weblog/presentation/publication?

      A: This is OK provided that the original source is referred to: www.tiobe.com.

    • Q: What happened to Java in April 2004? Did you change your methodology?

      A: No, we did not change our methodology at that time. Google changed its methodology. They performed a general sweep action to get rid of all kinds of web sites that had been pushed up. As a consequence, there was a huge drop for languages such as Java and C++. In order to minimize such fluctuations in the future, we added two more search engines (MSN and Yahoo) a few months after this incident.

    电脑白痴 与 黑客 的对话

    黑客:我控制了你的电脑  
    小白:怎么控制的?   
    黑客:用木马  
    小白:。。。。。。在哪里?我没看不见 
    黑客:打开你的任务管理器 
    小白:。。。。。。。任务管理器在哪? 
    黑客:。。。。。你的电脑下面!!  
    小白:“我的电脑”里面没有啊  
    黑客:算了,当我什么也没做过

       
    黑客:我已经控制了你的电脑  
    小白:哦  
    黑客:害怕了吧?!嘿嘿  
    小白:来的正好,帮我杀杀毒吧,最近我的机子毛病很多耶  
    黑客:。。。。。。 

     
    小白:你怎么总是在我电脑里随便进进出出  
    黑客:你可以装防火墙  
    小白:装防火墙,你就不能进入了吗?  
    黑客:不啊,我只是想增加点趣味性,这样控制你的电脑让我觉得很白痴耶   


    小白:听说你会制造“病毒”?! 
    黑客:嗯  
    小白:你可以控制别人的电脑?!  
    黑客:一般是的  
    小白:那你可以黑掉那些网站吗? 
    黑客:当然,没听到人家叫我“黑客”吗?  
    小白:。。。。哦~~~`我还以为那是因为你长得很黑。。。。。   


    黑客:我又来了!!  
    小白:你天天进来,不觉得很烦吗?  
    黑客:是很烦,你的机子是我见过的最烂的一台了  
    小白:不是吧,这可是名牌  
    黑客:我是说你的机子里除了弱智游戏就只有病毒了  
    小白:哦~~那你看到我的“连连看”了吗,不记得装在哪,找了好久了耶  
    黑客:。。。。。再见    


    黑客:嗨~~~我来了!  
    小白:好几天不见你,被我的防火墙挡住啦?  
    黑客:哈哈,笑话,上你的机子比我自己的还容易,不是想我了吧  
    小白:我是想请你帮一个忙  
    黑客:什么事? 
    小白:你能不能进入电力系统修改一点数据  
    黑客:。。。。。。你想干嘛!! 
    小白:求求你,帮我把我家这个月的电费消了吧。。。。。。  
    黑客:去死!!   


    黑客:你死哪去了?!!!   
    小白:。。。。出去玩了几天啊,找我干嘛   
    黑客:我要找点东西  
    小白:在我这儿找什么东西?    
    黑客:病毒,找一条前几年的老病毒,只有你的机子上病毒保存的最全啦    


    黑客:我来了!!  
    。。。。。。    
    黑客:怎么不说话?  
    小白:心情不好    
    黑客:谁欺负你了?  
    小白:我的一个Q号搞丢了,里面有我的网上初恋    
    黑客:这个简单,我帮你拿回来   
    小白:拿不回来了   
    黑客:不可能,告诉我,多少号?  
    小白:呜~~~~就是不记得了  

     
    小白:你给我出来!!!!   
    黑客:怎么啦?!  
    小白:你是不是用我的ID去论坛玩了?!!    
    黑客:。。。。不好意思,忘了告诉你了,不过,我没干坏事,就瞎编了个贴子,我保证下次再也不玩了    
    小白:那不行!!!   
    黑客:你还要怎么样? 
    小白:你发的贴子得红脸了耶,我第一次得红脸,好开心哦,你必须再给我编一个  
    黑客:倒!    


    黑客:嘿嘿,刚才我做了一件很有趣的事  
    小白:什么事  
    黑客:我到论坛上去顶贴了 
    小白:这很平常啊  
    黑客:我见贴就顶,尽情的骂楼主是猪,好解气  
    小白:哇塞,太过瘾了,我可从来不敢,会被封杀的!  
    黑客:没错,已经被封杀了。  
    小白:这还有趣?! 
    黑客:是啊,因为我用的是你的ID 

      
    小白:你是高手吗?  
    黑客:可以说是吧。    
    小白:高到什么程度?  
    黑客:嗯,我无聊的时候就自己黑自己   
    小白:哈,这个我也会! 
    黑客:#¥%!你也可以?!   
    小白:是啊,一关机它就黑了。。。。。  
    黑客:滚!    

    该黑客目前正住在人民医院,经确认已呈现出精神病前兆!

    SPING与EJB[转]

    所谓分布式就是能够远程调用的就算是,例如B/S就是常见的一中
    Ejb支持对象分布(也就是部署分布,我是这么理解的),不过我更喜欢用APP集群,设想谁没事愿意把不同的EJB组件分别部属在不同的APP中,然后对每个APP采用集群呢?针对现在出现的SPING 与EJB两种J2EE框架我觉的用哪个都可以只不过EJB编写比较麻烦有好几个类,我们可以用EJB的LOCALE 取代REMOTE,(它就是多了一个APP(JBOSS等)),但是如过用SPING 多了个SPING ,而且程序被绑丁到SPING 中,但是EJB就不同它是一个规范,用哪个APP都可以,他们都实现可配制的事物等,还有如果用到集群,对数据CACHE这一块是否SPING 可以支持同步等(不要告诉我用另外一个框架代替),随着WEB SERVICES的广泛应用这两个框架都支持B/S和C/S。所以综上所述,我喜欢用EJB,期待EJB3。0出来可以简化开发。就因为他是标准,而且考虑了所有的分布式中的问题,再加上强大的APP提供的功能,需要程序员只关注业务逻辑的开发就可以了,而且层次划分更好,试想SPING能否长久,能否提供如此强大的功能。用EJB使程序可扩展性高,比较长远。本来用一个APP就能实现的功能,非要程序员再去组装不同的框架如SPING+HIBERNATE(如有特殊的需求还要别的框架),试想自己组合这些框架所带来的效率是否比APP效率高呢?再说了,如果这样的话一个公司一套模型,招聘也不好找人呀,用了EJB就不要这么麻烦了,希望JAVA的世界能够统一,
    共同努力把EJB给搞好。不要让程序员在选择上如此麻烦(这一点MS确实做的好)
    说的对不对只是参考,本人只针对技术讨论.

    O/R MAPPING (HIBERNATE)方法小结

    (一)对象之间的关系:
    1. 依赖:
    依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的过程与对象往往依赖与我们的实体域对象。如在struts 的 action中调用模型层的方法。
    2. 关联
    它使一个类指到另一个类的属性。长期的
    3. 聚合
    聚合关系是关联关系的一种,是强的关联关系。聚合是整体和部分之间的关系。
    4. 组合
    也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。
    注:既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?
    一般关联:只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦魏,pc机和显示器。
    聚合关系:一种强关联关系,它要求有部分和整体的关系,并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦魏,窦魏等人组成了黑豹乐队即:窦魏和黑豹是整体和部分的关系。而
    窦魏脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦魏仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。组成关系是可以共享的。(窦魏也可以加入其他乐队)。
    组合关系:一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:pc机和显示器的关系。
    我觉得:如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:pc机和显示器的关系,如果你的系统中,显示器脱离了pc机就不存在意义了,也可以说:所有显示器的访问都是通过pc机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。如果你的显示器脱离的pc机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)
    5. 继承
    这个我不想多讲了,用过面向对象的语言都应该知道。
    (二)关系数据库的关系
    一对一
    一对多
    多对一
    多对多
    (三)o/r mapping策略
    1.继承:
    对于继承关系一般有三种策略:
    策略1继承树的每个类对应一个表
    共享主键
    策略2继承树的根类对应一个表
    需要添加一个识别字段
    策略3继承树的叶子类对应一个表
    不支持多态查询
    2.关联
    2.1一对一
    一半有两种策略:
    策略1:唯一的外键
    +unique=”true” (唯一的外键)
    策略2:共享主键
    (既是主键又是外键)
    注意:生成方式需要用:foreign
    2.2一对多(无需多说)
    2.3多对一(无需多说)
    2.4多对多
    策略1:A,B表多对多的关系需要引入C表。
    C表中的所有属性即为主键又为外键分别参照A,B两表。
    C表中不可以有其他属性
    策略2:将多对多拆分成两个一对多:
    A,B对象多对多的关系需要引入C对象。使得A,B两对象与C对象的关系为一对多。对应数据库中:A,B表多对多的关系需要引入C表。A,B两表与C表的关系为一对多。
    C表又自己的主键
    C表中又非主键的外键分别参照A,B两表。
    C表中不可以有其他属性
    如;学生 ,课程为多对多的关系 那么引入学生选课。
    注意:策略1和策略2的不同在于:策略2引入了新的对象而策略1没有。这是因为这样:策略1的c表不能又自己的东西。而策略2有。
    2.5其他
    上面说过:聚合与组成是关联的一种所以他们也符合以上策略。
    特别的:当用到组合关系的是否我们可用用到hibernate的“组件”.由于“组件”它完全可以满足组成关系的强关联。
    3.依赖
    一般不在实体域对象中体现。

    Recycle broken objects in resource pools

    Resource pools (otherwise known as object pools) are used to manage the sharing of objects between multiple clients. A client with access to a resource pool can avoid creating a new resource by simply asking the pool for one that has already been instantiated instead. Examples of object pooling can be found in many distributed systems: a number of Java server systems, including Enterprise JavaBeans servers, use this technique to speed client access and improve overall throughput.
     
    ......

    语言~

    问题求解:射击你自己的脚丫子。

    C 语言:你射击你自己的脚丫子。

    C++ 语言:你意外地创建了你自己的一打实例对象,并向这24只脚丫子射击。你无法为你自己包
    扎伤口,因为你无法断定哪一个对象是你自己的原始拷贝,哪一个对象是你自己的指针或者
    引用,况且那些用指针和引用假冒你的家伙还在不停地叫嚷:“嘿,这就是我,我在这儿!”
    Visual Basic:你的工作将仅仅“显示”出你射击了你自己的脚丫子,无论你是否在意,你将在这
    一过程中得到许许多多乐趣。
    汇编语言:想射击你自己的脚丫子的话,你必须先发明枪、子弹、扳机,以及你自己的脚丫
    子。

    汇编语言2:你搞瘫了操作系统,覆盖了根分区。于是,系统管理员跑过来射击
    你的脚丫子。接下来,一番沉思之后,系统管理员射击了他自己的脚丫子,然后单脚跳着,
    绕着屋子飞速转圈,射击他看见的每一个人。
     
    Java 语言:射击得非常漂亮,但你的脚无法确定子弹是什么类型的对象,只好忽略了它们。

    C# 语言:把你的脚丫子改写成Java程序,然后射击它们。
     
    Apple 公司:我们允许你射击你自己,但价格很贵哦。

    IBM 公司:你把弹夹装到枪里,等半个小时,然后子弹向四面八方发射。如果有一颗子弹碰巧射
    中了你的脚,那你真是太幸运了。

    Microsoft 公司:“脚”这个对象将在下一版本中提供,你需要支付500美金的升级费用。

    HP 公司:你可以用这挺机枪射击你自己的脚丫子,但枪的撞针是断的。
    注:能力有限,基于Ada  Lisp  Pascal  Cobol  Forth  Prolog  FORTRAN  BASIC  APL  HTML等的求解今后再续

    感~

    2006-6-11 项目交付 演示
          近半年的学习,到了丰收的一天。我们走到了一起,只因对程序有着相同的偏爱。也许往后大家将各奔东西,若干年后想见还能记起我们曾为j+1 -1而争论不休。。。令人感怀, 朋友是永远的。
     
     

    看清楚了 Windows核心源代码揭秘

    // 当仍有内存可用时循环
    while (memory_available) {

        // 想办法耗费掉大多数可用的内存
      eat_major_portion_of_memory (no_real_reason);

      // 如果需要更多的内存,告诉用户:操作系统就是这个样子
      if (feel_like_it)      
      make_user_THINK (this_is_an_OS);

      // 增加比尔·盖茨的银行账户余额
      Bill_Gates_bank_balance++;
    }
    成堆的问题,就是因为 我们每天都要跑这些代码。。。

    头痛的题目

    一个人头发长40cm,请分别用统计模式识别和句法模式识别的相关理论和思想,证明其是一个女的

    模拟 游戏

    如果说整个虚拟宇宙是一个大的游戏会更加吸引人。你也提到了这个问题,每个internet网络节点都是一个活生生的人,他们会喜怒无常,随时可能关掉自己的计算机。与其让他们被动的去演化一个虚拟宇宙,为什么不让每个人都主动参与到这个虚拟宇宙中的演化呢?其实现在的网络游戏和我们搞得计算机模拟从本质上是一回事儿,只不过网络游戏加上了人的因素,套用matrix中的一句话,游戏中的角色 avater就是每个人在数字宇宙中的数字自我的心理投影,这样所有的人在宇宙中就构成了宇宙演化的一个主要因素。但是关键的一个问题是如何设定这样一种大的游戏,它首先是分布式的(现在的网游都是集中式的),其次,它允许任意的进化,它是一个连接整个internet网的大型虚拟世界,同时它又是可以持久运行的,只要这个大型虚拟世界建立起来以后,没有任何人可以凭借自己的意志而结束它。就好像现在的Internet网络,没有任何个人或者机构可以停止它的运转。因此,更确切的说,我们的宏伟目标应该是构建这样一种持久的、分布的、有大量人参与的虚拟宇宙。这个虚拟宇宙将构成地球的大脑,他形成的意识没有任何人可以理解,因为所有人都已经变成了该全球闹的细胞。

    目前,这种想法已经不算特别新鲜,研究p2p和网格计算的人都是奔着这个大目标去的。但是,现在也许还没有人真正意识到把p2p、网格计算和大型网络游戏以及人工生命思想连接起来,所以这样的一种自发生长的虚拟宇宙还没有出现。

    web开发技术史话

    软件工程课程实践开课了,但我们中大多数人还是web开发的新手。不免有些迷茫,这里整理了一些历史资料,能对大家有所帮助。
     

    讨论Web开发技术的历史,当然要先说说Web的起源。众所周知,Web这个Internet上最热门的应用架构是由Tim Berners-Lee发明的。Web的前身是1980年Tim Berners-Lee负责的Enquire(Enquire Within Upon Everything的简称)项目。1990年11月,第一个Web服务器nxoc01.cern.ch开始运行,Tim Berners-Lee在自己编写的图形化Web浏览器"WorldWideWeb"上看到了最早的Web页面。1991年,CERN(European Particle Physics Laboratory)正式发布了Web技术标准。目前,与Web相关的各种技术标准都由著名的W3C组织(World Wide Web Consortium)管理和维护。

    从技术层面看,Web架构的精华有三处:用超文本技术(HTML)实现信息与信息的连接;用统一资源定位技术(URI)实现全球信息的精确定位;用新的应用层协议(HTTP)实现分布式的信息共享。这三个特点无一不与信息的分发、获取和利用有关。其实,Tim Berners-Lee早就明确无误地告诉我们:"Web是一个抽象的(假想的)信息空间。"也就是说,作为Internet上的一种应用架构,Web的首要任务就是向人们提供信息和信息服务。

    很可惜,在Web应用日新月异的今天,许多搞技术的人似乎已经忘记了Web架构的设计初衷。他们在自己开发的网站或Web应用中大肆堆砌各种所谓的"先进"技术,但最终用户能够在这些网站或应用中获得的有价值信息却寥寥无几。这个问题绝不像评论者常说的"有路无车"或"信息匮乏"那么简单。一个Web开发者倘若忘记了Web技术的最终目标是提供信息和信息服务,他的愚蠢程度就丝毫不亚于一个在足球场上只知道卖弄技巧,却忘记了射门得分的大牌球星。从这个角度来说,评价一种Web开发技术优劣的标准只有一个,那就是看这种技术能否在最恰当的时间和最恰当的地点,以最恰当的方式,为最需要信息的人提供最恰当的信息服务。

    1 客户端技术的萌芽和演进

    Web是一种典型的分布式应用架构。Web应用中的每一次信息交换都要涉及到客户端和服务端两个层面。因此,Web开发技术大体上也可以被分为客户端技术和服务端技术两大类。我们先来谈谈客户端技术的萌芽和演进过程。

    Web客户端的主要任务是展现信息内容,而HTML语言则是信息展现的最有效载体之一。作为一种实用的超文本语言,HTML的历史最早可以追溯到上世纪四十年代。1945年,Vannevar Bush在一篇文章中阐述了文本和文本之间通过超级链接相互关联的思想,并在文中给出了一种能实现信息关联的计算机Memex的设计方案。Doug Engelbart等人则在1960年前后,对信息关联技术做了最早的实验。与此同时,Ted Nelson正式将这种信息关联技术命名为超文本(Hypertext)技术。1969年,IBM的Charles Goldfarb发明了可用于描述超文本信息的GML(Generalized Markup Language)语言。1978到1986年间,在ANSI等组织的努力下,GML语言进一步发展成为著名的SGML语言标准。当Tim Berners-Lee和他的同事们在1989年试图创建一个基于超文本的分布式应用系统时,Tim Berners-Lee意识到,SGML是描述超文本信息的一个上佳方案,但美中不足的是,SGML过于复杂,不利于信息的传递和解析。于是,Tim Berners-Lee对SGML语言做了大刀阔斧的简化和完善。1990年,第一个图形化的Web浏览器"WorldWideWeb"终于可以使用一种为Web度身定制的语言--HTML来展现超文本信息了。

    最初的HTML语言只能在浏览器中展现静态的文本或图像信息,这满足不了人们对信息丰富性和多样性的强烈需求--这件事情最终的结果是,由静态技术向动态技术的转变成为了Web客户端技术演进的永恒定律。

    能存储、展现二维动画的GIF图像格式早在1989年就已发展成熟。Web出现后,GIF第一次为HTML页面引入了动感元素。但更大的变革来源于1995年Java语言的问世。Java语言天生就具备的平台无关的特点,让人们一下子找到了在浏览器中开发动态应用的捷径。1996年,著名的Netscape浏览器在其2.0版中增加了对JavaApplets和JavaScript的支持。Netscape的冤家对头,Microsoft的IE 3.0也在这一年开始支持Java技术。现在,喜欢动画、喜欢交互操作、喜欢客户端应用的开发人员可以用Java或JavaScript语言随心所欲地丰富HTML页面的功能了。顺便说一句,JavaScript语言在所有客户端开发技术中占有非常独特的地位:它是一种以脚本方式运行的,简化了的Java语言,这也是脚本技术第一次在Web世界里崭露头角。为了用纯Microsoft的技术与JavaScript抗衡,Microsoft还为1996年的IE 3.0设计了另一种后来也声名显赫的脚本语言--VBScript语言。

    真正让HTML页面又酷又炫、动感无限的是CSS(Cascading Style Sheets)和DHTML(Dynamic HTML)技术。1996年底,W3C提出了CSS的建议标准,同年,IE 3.0引入了对CSS的支持。CSS大大提高了开发者对信息展现格式的控制能力。1997年的Netscape 4.0不但支持CSS,而且增加了许多Netscape公司自定义的动态HTML标记,这些标记在CSS的基础上,让HTML页面中的各种要素"活动"了起来。1997年,Microsoft发布了IE 4.0,并将动态HTML标记、CSS和动态对象模型(DHTML Object Model)发展成了一套完整、实用、高效的客户端开发技术体系,Microsoft称其为DHTML。同样是实现HTML页面的动态效果,DHTML技术无需启动Java虚拟机或其他脚本环境,可以在浏览器的支持下,获得更好的展现效果和更高的执行效率。今天,已经很少有哪个HTML页面的开发者还会对CSS和DHTML技术视而不见了。

    为了在HTML页面中实现音频、视频等更为复杂的多媒体应用,1996年的Netscape 2.0成功地引入了对QuickTime插件的支持,插件这种开发方式也迅速风靡了浏览器的世界。在Windows平台上,Microsoft将客户端应用集成的赌注押到了1990年代中期刚刚问世的COM和ActiveX身上。1996年,IE 3.0正式支持在HTML页面中插入ActiveX控件的功能,这为其他厂商扩展Web客户端的信息展现方式开辟了一条自由之路。1999年,Realplayer插件先后在Netscape和IE浏览器中取得了成功,与此同时,Microsoft自己的媒体播放插件Media Player也被预装到了各种Windows版本之中。同样值得纪念的还有Flash插件的横空出世:1990年代初期,Jonathan Gay在FutureWave公司开发了一种名为Future Splash Animator的二维矢量动画展示工具,1996年,Macromedia公司收购了FutureWave,并将Jonathan Gay的发明改名为我们熟悉的Flash。从此,Flash动画成了Web开发者表现自我、展示个性的最佳方式。

    除了编写HTML页面之外,客户端应用的开发者还可以利用一些成熟的技术将浏览器的功能添加到自己的应用程序中。从1992年开始,W3C就免费向开发者提供libwww开发库。借助libwww,我们可以自己编写Web浏览器和Web搜索工具,也可以分析、编辑或显示HTML页面。1999年,Microsoft在IE 5.0中引入的HTAs(HTML Applications)技术则允许我们直接将HTML页面转换为一个真正的应用程序。从1997年的IE 4.0开始,Microsoft为开发者提供了WebBrowser控件和其他相关的COM接口,允许程序员在自己的程序中直接嵌入浏览器窗口,或调用各种浏览器的功能,如分析或编辑HTML页面等。Windows 98及其后的Windows操作系统甚至还利用WSH(Windows Script Host)技术将原本只在浏览器中运行的JavaScript、VBScript变成了可以在WIN32环境下使用的通用脚本语言,这大概也可算作我们对Web客户端开发技术的一种巧妙利用吧。

    2 服务端技术的成熟与发展

    与客户端技术从静态向动态的演进过程类似,Web服务端的开发技术也是由静态向动态逐渐发展、完善起来的。

    最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器。一种名为SSI(Server Side Includes)的技术可以让Web服务器在返回HTML文件前,更新HTML文件的某些内容,但其功能非常有限。第一种真正使服务器能根据运行时的具体情况,动态生成HTML页面的技术是大名鼎鼎的CGI(Common Gateway Interface)技术。1993年,CGI 1.0的标准草案由NCSA(National Center for Supercomputing Applications)提出,1995年,NCSA开始制定CGI 1.1标准,1997年,CGI 1.2也被纳入了议事日程。CGI技术允许服务端的应用程序根据客户端的请求,动态生成HTML页面,这使客户端和服务端的动态信息交换成为了可能。随着CGI技术的普及,聊天室、论坛、电子商务、信息查询、全文检索等各式各样的Web应用蓬勃兴起,人们终于可以享受到信息检索、信息交换、信息处理等更为便捷的信息服务了。

    早期的CGI程序大多是编译后的可执行程序,其编程语言可以是C、C++、Pascal等任何通用的程序设计语言。为了简化CGI程序的修改、编译和发布过程,人们开始探寻用脚本语言实现CGI应用的可行方式。在此方面,不能不提的是Larry Wall于1987年发明的Perl语言。Perl结合了C语言的高效以及sh、awk等脚本语言的便捷,似乎天生就适用于CGI程序的编写。1995年,第一个用Perl写成的CGI程序问世。很快,Perl在CGI编程领域的风头就盖过了它的前辈C语言。随后,Python等著名的脚本语言也陆续加入了CGI编程语言的行列。

    1994年,Rasmus Lerdorf发明了专用于Web服务端编程的PHP(Personal Home Page Tools)语言。与以往的CGI程序不同,PHP语言将HTML代码和PHP指令合成为完整的服务端动态页面,Web应用的开发者可以用一种更加简便、快捷的方式实现动态Web功能。1996年,Microsoft借鉴PHP的思想,在其Web服务器IIS 3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和JavaScript。借助Microsoft Visual Studio等开发工具在市场上的成功,ASP迅速成为了Windows系统下Web服务端的主流开发技术。当然,以Sun公司为首的Java阵营也不会示弱。1997年,Servlet技术问世,1998年,JSP技术诞生。Servlet和JSP的组合(还可以加上JavaBean技术)让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能,此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率--这也正是Servlet和JSP被后来的J2EE平台吸纳为核心技术的原因之一。

    3 两种重要的企业开发平台

    Web服务端开发技术的完善使开发复杂的Web应用成为了可能。在此起彼伏的电子商务大潮中,为了适应企业级应用开发的各种复杂需求,为了给最终用户提供更可靠、更完善的信息服务,两个最重要的企业级开发平台--J2EE和.NET在2000年前后分别诞生于Java和Windows阵营,它们随即就在企业级Web开发领域展开了你死我活的拼争。平台之争让整个Web世界在最近的几年里不得安宁,但从某种意义上说,也正是这种针锋相对的竞争关系促使了Web开发技术以前所未有的速度提高和跃进。

    J2EE是纯粹基于Java的解决方案。1998年,Sun发布了EJB 1.0标准。EJB为企业级应用中必不可少的数据封装、事务处理、交易控制等功能提供了良好的技术基础。至此,J2EE平台的三大核心技术Servlet、JSP和EJB都已先后问世。1999年,Sun正式发布了J2EE的第一个版本。紧接着,遵循J2EE标准,为企业级应用提供支撑平台的各类应用服务软件争先恐后地涌现了出来。IBM的WebSphere、BEA的WebLogic都是这一领域里最为成功的商业软件平台。随着开源运动的兴起,JBoss等开源世界里的应用服务新秀也吸引了许多用户的注意力。到2003年时,Sun的J2EE版本已经升级到了1.4版,其中三个关键组件的版本也演进到了Servlet 2.4、JSP 2.0和EJB 2.1。至此,J2EE体系及相关的软件产品已经成为了Web服务端开发的一个强有力的支撑环境。

    和J2EE不同的是,Microsoft的.NET平台是一个强调多语言间交互的通用运行环境。尽管.NET的设计者试图以.NET平台作为绝大多数Windows应用的首选运行环境,但.NET首先吸引的却是Web开发者的目光。2001年,ECMA通过了Microsoft提交的C#语言和CLI标准,这两个技术标准构成了.NET平台的基石,它们也于2003年成为了ISO的国际标准。2002年,Microsoft正式发布.NET Framework和Visual Studio .NET开发环境。早在.NET发布之前,就已经有许多Windows平台的Web开发者迫不及待地利用Beta版本开发Web应用了。这大概是因为,.NET平台及相关的开发环境不但为Web服务端应用提供了一个支持多种语言的、通用的运行平台,而且还引入了ASP.NET这样一种全新的Web开发技术。ASP.NET超越了ASP的局限,可以使用VB.NET、C#等编译型语言,支持Web Form、.NET Server Control、ADO.NET等高级特性。客观地讲,.NET平台,尤其是.NET平台中的ASP.NET的确不失为Web开发技术在Windows平台上的一个集大成者。

    4 XML语言及相关技术

    如果说HTML语言给Web世界赋予了无限生机的话,那么,XML语言的出现大概就可以算成是Web的一次新生了。按照Tim Berners-Lee的说法,Web是一个"信息空间"。HTML语言具有较强的表现力,但也存在结构过于灵活、语法不规范的弱点。当信息都以HTML语言的面貌出现时,Web这个信息空间是杂乱无章、没有秩序的。为了让Web世界里的所有信息都有章可循、有法可依,我们需要一种更为规范、更能够体现信息特点的语言。

    1996年,W3C在SGML语言的基础上,提出了XML(Extensible Markup Language)语言草案。1998年,W3C正式发布了XML 1.0标准。XML语言对信息的格式和表达方法做了最大程度的规范,应用软件可以按照统一的方式处理所有XML信息。这样一来,信息在整个Web世界里的共享和交换就有了技术上的保障。HTML语言关心的是信息的表现形式,而XML语言关心的是信息本身的格式和数据内容。从这个意义上说,XML语言不但可以将客户端的信息展现技术提高到一个新的层次,而且可以显著提高服务端的信息获取、生成、发布和共享能力。为了将XML信息转换为HTML等不同的信息展现形式,1999年,W3C制定出了XSLT标准。同一年,IE 5.0增加了对XML和XSLT的支持。

    现在,网站的开发者可以直接使用XML语言发布信息了。针对不同的应用领域,人们还制定了许多专门的XML规范。例如,2001年W3C发布的SVG(Scalable Vector Graphics)1.0标准就是一种用XML语言表达的、全新的二维矢量图形格式。开发者可以用SVG格式描述大多数已有的Flash动画。与Flash格式相比,符合XML标准的SVG格式显然更有利于信息交换和共享。

    Web本身就是一个最大的分布式应用系统。对于分布式开发而言,XML技术也大有用武之地。一个明显的事实是,如果能让分布式应用借助XML格式交换信息,那么,以往横亘在分布式架构上的信息交换难题也就迎刃而解了。1999年,W3C和相关的企业开始讨论设计基于XML的通信协议,2000年,W3C发布SOAP(Simple Object Access Protocol)协议的1.1版。人们把利用SOAP协议传递XML信息的分布式应用模型称为Web Service。2001年,W3C发布了WSDL(Web Services Description Language)协议的1.1版。SOAP协议和WSDL协议共同构成了Web Service的基础。随后,J2EE和.NET这两大企业级开发平台先后实现了Web Service,并将其视为平台的一项核心功能。

    Web Service对于Web开发者的重要意义在于,当我们需要在不同的服务端、不同的客户端乃至不同的应用类型、不同的计算设备之间传递信息的时候,以往的分布式开发技术或者因为适应性不强,或者因为扩展能力不足,都难以满足现代Web开发的需要,而Web Service正好填补了这一空白。

    5 Web开发框架和应用模型

    2000年以后,随着Web应用的日益复杂,人们逐渐意识到,单纯依靠某种技术多半无法达到快速开发、快速验证和快速部署的最佳境界。研究者开始尝试着将已有的Web开发技术综合起来,形成完整的开发框架或应用模型,并以此来满足各种复杂的应用需求。

    Microsoft在客户端的技术集成方面走在了最前面。1998年时Microsoft推出的Windows 98就可以在桌面上集成Web页面,这实际上是将资源管理器和Web浏览器的功能有效地结合了起来。2000年后,Microsoft陆续推出了MSN Explorer和与之相关的MSN在线服务。这一应用模型将Web浏览、视频点播、邮件处理、网上游戏、在线聊天等许多种用户常用的Web功能集成在了一个统一的界面中。从信息利用的角度看,MSN试图让用户在一个最舒适的环境中获取足够的信息,这种努力的确值得人们称道。另一个与客户端技术集成相关的例子是搜索引擎Google在2003年展示给大家的Google工具栏功能。虽然Google工具栏有炒作和广告的嫌疑,但安装Google工具栏之后的IE浏览器将信息浏览和信息检索有机地结合了起来,这种小小的功能改进确实是对用户的体贴和帮助。

    在Web服务端,2000年以后出现了几种主要的技术融合方式。首先,越来越多的Web开发环境开始支持MVC(Model-View-Contorller)的设计模型,为开发者提供了全套的开发框架。实际上,J2EE和.NET平台本身就是这种开发框架的典型代表。其次,门户服务(Portal Server)和Web内容管理(Web Content Management)在最近几年里成为了应用集成的重点模型。这两种应用模型可以直接为开发者或最终用户提供构建Web应用的高级平台,可以让Web开发和信息发布工作大为简化。在商业软件领域,这一类应用的例子包括Microsoft的SharePoint、IBM的WebSphere Portal、FileNet的Web Content Manager等等。开源项目在Web开发框架和应用模型方面表现得非常积极,Struts、Jetspeed、jPortlet、Cocoon、Lenya、XOOPS等都是开源世界里与MVC开发框架、门户服务和Web内容管理相关的优秀解决方案。

    当然,技术集成绝不等于技术堆砌。一些Web站点和Web应用的开发者把XML语言、MVC框架等时髦技术拼凑起来,却不管它们是否能适应具体的应用环境,结果,他们的系统要么运行效率低下,要么功能残缺不全。反之,一个值得注意的事实是,像新浪、搜狐或网易这样的门户网站,在他们的信息发布页面(如新闻页面)里,尽管信息内容时刻都在刷新,但Web服务器上存放的始终都是静态的HTML页面。这种"落后技术"的优点是,在大量并发访问的情况下,门户网站的响应速度仍然很快。深入到技术层面,我们通常会惊讶地发现,这些网站使用的大多是自行研发的Web内容管理系统。当网站的内容编辑提交新的信息时,系统会自动将信息转换为HTML格式,发布到Web服务器集群的每一个结点上。在新浪网的一个角落里,我们可以找到"新浪网站发布系统"的研发历程:

    V 1.0(1997):基于文件的版本,实现新闻首页、正文和专题的发布。
    V 1.1(1998/12):采用数据库后台、实现跨服务器发布,自动化程度高。
    V 2.0(1999/3):创立模版和域的全新概念,奠定了该系列的基本设计思路。
    V 2.1(1999/9):增加周边模块,如搜索、自动采集。
    V 3.0(2000/1):优化传输方式,增加相关新闻和评论。
    V 3C(2000/6):V3.0的编译版,也是商业版的原型。
    V 3.1(2000/7):优化数据库结构,采用内存CACHE大幅提速,增加了集中监控功能。
    V 3.1C(2000/8):商业用测试版本。
    V 3.2(正在制作中):重点解决备份系统的自动化切换,在机制上实现永不宕机。
    

    这一份有趣的历史记录再一次印证了我关于Web开发技术的基本观点:一种技术只要能为用户提供高水平的信息服务,它就是最好、最先进的技术。

    6 Web开发技术的未来

    所有人都在关心Web的发展前景,所有人都想知道十年以后的Web会长成什么样子。要回答这些问题,没有谁比W3C更有权威了。W3C明确地告诉我们,Web的未来是语义化的Web(Semantic Web)。今天的Web可以自如地生成、传递和展现各式各样的信息,但它还只是一个信息的"容器",很难揭示出信息本身的内容和特性。与此相对的是,未来的语义化Web是一种懂得信息内容的Web,是真正的"信息管理员"。

    从技术角度看,XML语言统一了信息的表达方式,但这离揭示信息内容的目标还相距甚远。1998年,W3C和一些研究机构开始对元数据(Metadata)进行研究。元数据是描述数据的数据,可以揭示信息的内容特性。1999年,NetScape提出的RSS(Rich Site Summary)建议标准是用元数据技术描述新闻等信息内容的第一次尝试。1999年,W3C的研究小组提出了RDF(Resource Description Framework)标准草案。RDF在XML语法的基础上,规定了元数据的存储结构和相关的技术标准。使用RDF语言,我们可以用统一的、可交换的格式揭示出信息本身的各种特性。2001年,W3C又开始着手制定OWL(OWL Web Ontology Language)标准。OWL语言也是一种符合XML标准的语言,它比RDF又前进了一步,可以更加深入、细致地描述信息内容。在RDF和OWL语言的帮助下,我们能让Web上的信息内容变得更容易理解、更便于交换和共享。2003年,W3C成立了语义化Web Service研究小组(Semantic Web Services Interest Group),研究在Web Service中加入语义技术的相关问题。2004年2月,W3C宣布RDF和OWL标准正式成为W3C的建议方案,这标志着语义化Web的大厦已经破土动工。

    随着语义化Web的诞生和发展,Web开发技术也必将经历更为重大的变革。可以预见的是,在未来的几年里,还会有许多新的开发技术或开发平台出现。从静态技术到动态技术,从开发平台到应用模型,从传统Web到语义化Web……为了让更多的人获得更有价值的信息服务,Web开发者们也许还会经历一次又一次的技术浪潮,还会面临更为严峻的技术挑战,但这和信息共享的最高目标相比,又算得了什么呢?

    P VS NP

    PNP(多项式对非确定多项式)是指1971Leonid LevinStephen Cook提出的一个关于容易被解答的问题(p型)以及相反的难以解答的问题(NP型)的数学理论问题。任何P型问题都能够按照“多项式时代”解答(一个多项式包含许多项,每个项又包括了一个变量或者是乘以一个系数的变量的幂。)一个P型的问题是位的数字的多项式,它用以描述问题的情况,一个P型问题的具体例子就如在maplink工具生成的一种文本文件,其中包含有被连接的程序的某些信息,例如程序中的组信息和公共符号信息等。)上找到从点A到点B的路径。一个NP型的问题需要花费大量的时间去解决,所花的时间甚至比它表述一个问题花的时间要多得多,其具体的实例如破解一个128的数字密码PNP型问题在通讯中是非常重要的,因为它可以最终决定数字加密方法的有效性(或者是无效性)。  NP问题否认了在解决方法上的任何强力途径,因为找到正确的解决办法将需要亿万年或者更长的时间,即使世界上所有的超型计算机都用于完成这个任务。一些数学家们认为可以通过提高计算机同时尝试一个问题的每种可能性能力而克服这个障碍。这个假设称之为P等于NP。而其他人则认为如此的计算机没有可能发展(因为P并不等于NP)。如果它变成了P等于NP,那么不管数字密码有多复杂,它都将可能破解,因此也就是说所有的数字加密方法将都是没有价值的。

     

    Suppose that you are organizing housing accommodations for a group of four hundred university students. Space is limited and only one hundred of the students will receive places in the dormitory. To complicate matters, the Dean has provided you with a list of pairs of incompatible students, and requested that no pair from this list appear in your final choice. This is an example of what computer scientists call an NP-problem, since it is easy to check if a given choice of one hundred students proposed by a coworker is satisfactory (i.e., no pair from taken from your coworker's list also appears on the list from the Dean's office), however the task of generating such a list from scratch seems to be so hard as to be completely impractical. Indeed, the total number of ways of choosing one hundred students from the four hundred applicants is greater than the number of atoms in the known universe! Thus no future civilization could ever hope to build a supercomputer capable of solving the problem by brute force; that is, by checking every possible combination of 100 students. However, this apparent difficulty may only reflect the lack of ingenuity of your programmer. In fact, one of the outstanding problems in computer science is determining whether questions exist whose answer can be quickly checked, but which require an impossibly long time to solve by any direct procedure. Problems like the one listed above certainly seem to be of this kind, but so far no one has managed to prove that any of them really are so hard as they appear, i.e., that there really is no feasible way to generate an answer with the help of a computer. Stephen Cook and Leonid Levin formulated the P (i.e., easy to find) versus NP (i.e., easy to check) problem independently in 1971.

    “符号化“

    极度夸张某个动作或形象,并为其填充过多的附加语义的做法称为“符号化”,日本人在“符号化”方面有着相当独到的天分。小时候,《恐龙特急克塞号》,居然也能靠着对某种战斗仪式的符号化,让当时几乎所有小男孩学会了“人间大炮××××”这样无比蹩脚的台词;后来的日本肥皂剧(现在大概已经被韩国肥皂剧复制和超越了)把极其肤浅的“家庭”、“亲情”、“爱情”等概念符号化后,就一下子征服了大多数中年观众;再后来,精致的动画片《圣斗士星矢》里面,不也有刻意描摹并被大多数小孩模仿的符号化内容吗(比如“小宇宙”的概念)?还有,周杰伦和陈冠希参与拍摄的赛车影片《头文字D》把赛车过弯时漂移动作(NFS7中文版里好像叫“甩尾”)的效用夸大到了极点
     
    这些现象在软件工程开发过程中更是多如牛毛,学计算机3年了~还是满头雾水,各种”符号化“事物漫天飞,使人不知所措。。。
     
    比如许多向客户推销软件产品的市场经理,都会背诵并极力夸大几个时髦的技术名词(如,“我们的OCR软件使用了最新的神经网络技术”),而不管这些技术在产品里到底起到了何种作用。
     

    对于产品的发布者来说,符号化是一个相当有效的营销手段。但对于接纳产品的个人来说,符号化就不一定是一种有益的东西了。未经审慎的判断,就简单接受他人营造的符号化概念,这往往意味着我们自己的浅薄或无知。比如说,在十几岁的小孩子里,“哈韩”、“哈日”的很多,但他们所“哈”的对象,往往是韩国人、日本人为了获得某种商业或国家利益所刻意营造的符号,比如某个明星、某种装束、某部电视剧等等,对于韩国、日本真正有内涵和有深度的文化或技术积淀,他们既没兴趣也没时间去追捧。再比如说,如果你是军事迷,那你千万不能凭借“军事题材”这个符号就去追捧央视在八一前后播放的电视剧,因为当那些电视剧在本质上都是“军事背景烘托爱情伦理主题”,其编导的主要用意是,无论军事迷们如何口诛笔伐,只要家庭主妇们深陷其中不能自拔就算完成任务。

    所以,相信符号不如不相信符号,相信他人创造的符号不如相信自己的判断。即便在一个崇尚符号化的社会中,有独立思辨能力的个人仍然可以享受到最大的幸福——这种幸福可能来自我们在深入辨析后对某一符号的认可(如Scheme的“λ”),可能来自我们对他人创造、经营符号的意图的正确认识,也可能来自我们超脱了浮躁的符号社会后自然会得到的那一份纯真和宁静。

    UNIX的历史

    Unix是个倒霉蛋,生来就穷困潦倒。Unix的父亲——电话公司——每年只能给他一卷电传纸
    ,所以Unix既没有得体的文档,也没有任何源代码的注释。一年又一年过去了,贝尔爸爸一
    直在为增加家庭收入、养活自己的孩子而苦苦挣扎。即便如此,Unix上学时,还是只能拥有
    两个字母或三个字母组成的指令名,因为电话公司再也供不起更多的字母了。在学校里,其
    他拥有完整指令名的操作系统都百般嘲弄可怜的小Unix,笑他没有任务管理和终端管理功能
    ,笑他只能用进程间通信和锁方式来操作文件系统。

    于是,在贫穷的重压下,电话公司开始酗酒。每个周末,他喝得酩酊大醉之后,就毒打可怜
    的小Unix,揍他的脸和脖子。终于,Unix离家出走了。不久,Unix在伯克利的大街上住了下来。
    在那里,Unix和一群坏孩子呆在一起。他的生活变得堕落而放荡,毒品成了家常便饭。为了
    能生存下去,他把他的源代码许可协议廉价出售给大专院校做医疗实验。Unix的生活不断被
    大学里一群群不知名的男女黑客们肆意篡改,而且经常是几个人同时下手。Unix跌入了罪恶
    和耻辱的深渊。

    可怜的小Unix患上了精神病。他整日蜷缩在他自己的梦境里,只有在那里他才感觉得到安全
    。他吸食吗啡,梦想着能成为一种真正的操作系统。他吸食迷幻药,梦想着自己是加了黑霉
    的牦牛肉。他沉溺于他的梦境,对迷幻药的依赖越来越大。他可以在整个周末,一边喝掺了
    迷幻药的鸡尾酒,一边读亨特·汤普逊的作品,同时飞快地写下些疯狂的诗篇。除了他自己
    以外,没有人能懂得这些诗里的深意:

        $sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'

        make shlist || ($echo "Searching for .SH files..."; \
                $echo *.SH | $tr ' ' '\012' | $egrep -v '\*' >.shlist)
        if $test -s .deptmp; then
            for file in `cat .shlist`; do
                $echo `$expr X$file : 'X\(.*\).SH'`: $file config.sh \; \
                    /bin/sh $file >> .deptmp
            done
            $echo "Updating $mf..."
            $echo "# If this runs make out of memory, delete /usr/include lines." \
                >> $mf.new
            $sed 's|^\(.*\.o:\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
               >>$mf.new
        else
            make hlist || ($echo "Searching for .h files..."; \
                $echo *.h | $tr ' ' '\012' | $egrep -v '\*' >.hlist)
            $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
            $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
            $echo "Updating $mf..."
            <.clist $sed -n                                               \
                -e '/\//{'                                                \
                -e   's|^\(.*\)/\(.*\)\.c|\2.o: \1/\2.c; '"$defrule \1/\2.c|p" \
                -e   d                                                     \
                -e '}'                                                     \
                -e 's|^\(.*\)\.c|\1.o: \1.c|p' >> $mf.new
            <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
            <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
               $sed 's|^[^;]*/||' | \
               $sed -f .hsed >> $mf.new
            <.deptmp $sed -n 's|c:#include <\(.*\)>.*$|o: /usr/include/\1|p' \
               >> $mf.new
            <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
               $sed -f .hsed >> $mf.new
            <.deptmp $sed -n 's|h:#include <\(.*\)>.*$|h: /usr/include/\1|p' \
               >> $mf.new
            for file in `$cat .shlist`; do
                $echo `$expr X$file : 'X\(.*\).SH'`: $file config.sh \; \
                    /bin/sh $file >> $mf.new
            done
        fi

    后来,Unix开始在电报大街上走来走去,一遍又一遍地对自己说:“灾难:释放自由的i节
    点。”有时,他会拦着陌生人,像吃了安非他明的吉娃娃狗一样,尖叫着对他们大声喊:“
    总线错误(内核映像已保存)!”或者:“未知冲突:请手工运行fsck!”人们都对他视而
    不见,带着孩子的母亲则远远地绕道而过。

    一天晚上,Unix看电视时,一个镜头改变了他的一生。Unix在电视里看到职业摔跤比赛的画
    面,他知道他已经找到了自己真正的目标。他开始服用大量的皮质激素,把自己变得强大起
    来,他要变得比小时候那些曾经打倒过他的程序都更强大。他每天早饭都要吃三打煎饼和四
    打新功能。由于类固醇的副作用,他的内部元件长得越来越大,以至于他的身体都容纳不下
    了。最早长大的元件是内核,然后C语言类库,再就是一大堆幽灵程序。很快,他的一个视
    窗系统开始为每个打开的窗口请求2兆字节的交换空间了。Unix变得强壮而丑陋,但他仍然
    在继续服药,他的内部元件仍然在膨胀。这些膨胀中的元件从他的耳朵和鼻孔生长出来,强
    有力地挤压着Unix的大脑,直到把大脑压成液体。现在,Unix拥有了巨人安德烈的肌肉、象
    人的身体、以及杰克·尼科尔森的古怪个性。

    遭破坏最严重的是Unix的神智。因为没法消化他吞下的大堆大堆相互冲突的新功能,Unix的
    人格开始分裂成为千百种互不兼容的操作系统。人们必须小心地问:“早上好,Unix,今天
    你是哪个Unix?”他会回答“比斯蒂(BSD)”,或者“Domain”,或者“我是System
    III,但我明天就会变成System V”。精神病专家们年复一年地对Unix进行治疗,想把他的
    两种最主要的人格合并到一起。这两种人格分别是:来自伯克利市中心的“比斯蒂小孩”和
    一心想变成女人的南方异性癖患者“小贝尔”。每一次治疗之后,这两种主要人格都会再次
    变异,就像得了精神病的逆转录酶病毒一样,而它们的混合体则往往演变成缺乏持久的生命
    力,与父辈不兼容的一大堆无用的原生质。

    结果,由于体内的癌变,Unix控制不了自身的平衡,一跤跌进了一大桶含有放射性毒素的袋
    熊尿里。他从尿桶里爬出来,皮肤发白,头发发绿,浑身散发着死人味儿。他咧着嘴恐怖地
    笑着,打算去征服全世界。
     

    just for fun

    也许事情正是像Linus所说的,当他以Linux闻名,而作为崇拜者的我就会假定它是可以依赖的,假定他能够对于数百万年以来一直困惑着人类的并不相关的知识产生深刻的洞察力。并希望他能够将他的这种洞察力与我分享。于是在读他的自传的时候,我希望能得到他对于生活的意义的解释。而事实上更实在的想法则应该是去希望得到他一些关于计算机世界的解释,比如为什么编程是世界上最有趣的事。在这个问题上Linus确实做出了精彩的解释:
    编程给人带来的最初兴奋的原因有部分是显而易见的,那就是:通过编程你可以支配一台计算机,你叫计算机做什么,它就做什么,永远准确无误,而且毫无怨言。这本身就很有意思。
    真正使编程令人欲罢不能的是:你能让电脑做你想做的事,但是你还必须想出怎样做到的办法。
    我个人认为,计算机科学和物理科学有很多相似之处。两门学科都是在一个相当基础的层面上探讨一个体系是怎样运行的。当然,区别在于,在物理学中,你探究的是一个已经存在的客观世界的构成。而在计算机科学中,你却是在创造一个前所未有的体系。
    在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。如果你功力深厚,你可以是上帝——在一个较小的层面上。我这么说恐怕要得罪地球上近一半的人口了。
    但是的确如此。你开始创造自己的世界,而唯一限制你的就是机器的性能,以及——在今天尤其如此——你自己的能力了。
    人们对电脑如此着迷的原因之一,就是能从中获得自己创造一个新世界的体验,并领略到它到底能够成为什么样子。通过编程和电脑,你能够构筑一个新世界,有时其设计会是非常美妙的。但是在大部分时间中你却不能欣赏自己创造的美妙世界。我只不过是在编写执行某一任务的程序。这时你就不是在创造一个新世界,而是在电脑世界中解决一个具体的问题。问题通过将思考结果应用的问题中而得到解决。而能够坐下来,盯着电脑屏幕,将一个问题彻头彻尾地贯穿思考,就需要某种特定的人。比如,需要像我这种书呆子气十足的人。
    操作系统是计算机的所有功能的基础。而创造一个操作系统则是最终的挑战。创造操作系统就像在为你创造的这片土地制订宪法,而其他在电脑上运行的程序则是为宪法所允许的普通法律。有时,这些法律根本讲不通,但这正是你要面对的问题。你需要找到解决办法,并能够意识到自己以正确的方法找到了正确的答案。
    在电脑上也是这样。你可以鲁莽、生硬地行事,愚蠢地死死揪住问题不放,直到问题不再成为问题。也可以通过找到正确的方法,使问题突然消失。你可以从不同的角度看问题,直到灵光突现地认识到:问题之所以成为问题只在于你的方法错了。一个伟大的编程者能凭借其聪明的头脑就知道答案是什么。他知道怎样写出漂亮的程序,知道怎样采用一种全新的但最终会被证明是正确的方法。
    不过还是很难说清楚,闭门冥思苦想地要找到解决某个问题的漂亮答案,为什么竟然有如此巨大的魅力?但是,你要是曾经有过找到更好方法的经历,你就会明白,这简直是无以伦比的感觉。
    更让我吃惊的是Linus事实上也向我解释了生命的意义。实际上这并不仅仅是关于"意义"。更多地可以说是生命的法则,可以被称之为"李纳斯法则"。一个技术专家的对于生命意义的阐述是让我信服的,因为我信服他思维的方式,并且确实我为他的解释激动不已。生活确实很复杂,但也是很简单,just for fun,乐者为王。

    [Lain,心中的神]--Lain的解释

    上面提到的那位Timothy Leary有一个朋友叫Douglas Rushkoff,他写了一本书叫做Cyberia.书中有这样一个观点:如果用网络将每一个人类连接在一起,那么地球的意识就会觉醒.网络扩张得非常快,它变得类似于大脑内部的神经网络.于是,地球本身就变成了一个神经系统.这个观点在第9话快结束的时候在说明舒曼共振的时候提到了.这直接暗示Lain就是所有联网的人类共同构成的地球的神经系统产生的意识...

    剧中出现了好几个Lain,按出现顺序有现实世界的,Wired中的,Cyberia里气质狂野的,天空中出现的,对猥琐高手说バカ的,偷窥他人的,外星人样子的,绿衣能说会道的...

    现实世界中的Lain具有两面,一面是内向,略有点迟钝的,另一面则精明且极具效率,并且还挺辣XD.

    我猜想具备大量生物学知识,可以利用最尖端生物学成果的桥总研前雇员英利政美与Lain的"父亲"岩倉康男一起,将地球的意识,或者说灵魂放入自己以生物科技制造的没有灵魂的肉体中而创造,或者唤醒了Lain,就像SEELE取出17使徒的灵魂放入没有灵魂的肉体而造出了渚薰一样...(无责任猜想ED中就是Lain刚被创造的时候).此时的Lain是内向,有点迟钝的乖乖女的形象,因为这样比较容易控制嘛~

    四方田千纱自杀后给Lain发来电子邮件,此后Lain开始上网."父亲"很爽快的给她买了最新式的NAVI,从她将自己登录为新NAVI的用户那一刻开始,她就具备了另一面:精明且极具效率,并且还挺辣的Lain.之后在Cyberia遇到的枪击事件,对着持枪的少年说"everyone is connected"的,就是她的另一面第一次亮相.

    但是,Lain的这一面决不是凭空出现的,我认为这一面就是Wired中的Lain,我是这么想的:现实世界的Lain是以"Protocol 7"为基础的由全人类组成的网络产生的意识.而Wired网络是全人类组成的网络的子集,所以Wired中的Lain就是真实世界中的Lain的一面,当现实世界的Lain上网的时候,她就表现为Wired中的Lain.随着剧情的发展,"Protocol 7"使真实世界与Wired的界限渐渐被打破,Lain的这两面渐渐也融合在一起.

    再说Cyberia中气质狂野的Lain~根据Layer:09 "PROTOCOL"中在Lain的房间里做的实验,Lain播放音轨44后,Taro即看到幻觉,所以Cyberia中那个气质狂野的Lain是Knights利用JJ那里的设备接收并在Cyberia的中投入的幻影.我觉得这个气质狂野的Lain的存在目的就是为了测试影响人的意识从而控制人的行为.那个持枪的少年就是个不幸被选中的家伙...正好他吃了Accela正在最High的状态,在他身上做实验成功可能性比较高罢~Knights通过Lain的幻象对他意识的影响使他举枪乱射,但他发觉这个影响并反抗它,所以他对当时正在Cyberia里的Lain大喊你为什么要让我这样做你有什么权力让我这样做......至于为什么是这样一种造型和气质,我认为是为了切合Cyberia的气氛~

    天空中出现的Lain嘛~应该又是一次幻觉投射,Knights干的好事,真八卦,这对一个女生而言实在太过分了!但是我觉得这也暗示了Lain是"神",...之后Lain与Hudgson教授对话完毕后,同样站在十字的正中央.

    那个将电脑穿在身上的龅牙猥琐高手看到的Lain,应该是Knights的标记上那"第14人",我认为她是Knights创造的真实世界的Lain的模拟程序,作用是对他人的意识施加影响或加以控制,Cyberia中的气质狂野的Lain就是这个Lain在真实世界的投射.这个Lain与Wired中的Lain都存在于Wired上,也很容易混淆...但是如果借用EVA中Dummy Plug的概念,就容易理解一些.

    偷窥他人的Lain我想出自现实世界的Lain的潜意识,是Lain的能力和力量增长的副产物,是人类潜意识中窥私欲望的体现..."Protocol 7"的存在目的就是为了无阻碍的分享所有数据,包括记忆,哪怕是隐私.

    出现在Alice房门前的外星人Lain最有意思,为什么会是外星人的身体呢?我觉得这是她为了向Alice解释偷窥她的Lain不是自己,而将自己的形象投射到Alice脑中,但是为了强调自己与那个偷窥的Lain不同,所以用了外星人的形象.另一方面我觉得这是制作者又一次暗示,如果知道著名神棍丰丹尼肯的"众神之车",就可以知道他的"上帝是外星人"的说法,我觉得这里又是一次对"Lain是神"的暗示.

    13话中,Lain Reset了整个世界后出现了绿衣能说会道的Lain,这个Lain前面说的都是废话,重点在最后几句,她先把Lain定义为女神,然后又劝她再Reset一次.因为神没有信者的话就不能称为神,所以她的意思其实就是将世界Reset为所有人均以Lain为信仰的状态.但是Lain本就因为重写记忆和Reset世界吃了大亏,让Alice受伤害,让自己不得不放弃在现实世界中的存在,所以她不肯再Reset世界.我认为这个能说会道的Lain同样出自Lain的潜意识,是人类潜意识中控制欲的体现,而Lain不肯去通过自己的能力控制他人,这个能说会道的Lain自然也就消灭了.

    之后,她在她的"父亲"的指点下明白自己是爱所有人的,接受自己是神的事实.地球的意识,地球的神祇,Lain的"神格"相当于Gaea.

    [Lain,心中的神]--Knights

    Knights的全称是东方算法骑士团(Knights of the Eastern Calculus).在剧中是个在网络世界里技术和力量都很强大的组织,他们的头子就是衰男英利政美.Knights的成员将英利政美奉为神,并为他服务.

    Knights这个组织名可能来自历史上的圣殿骑士团(The Knights Templar Of The Templars).Wikipedia上是这样描述圣殿骑士团的:

    圣殿骑士团(The Knights Templar Of The Templars)正式名称是"基督和所罗门圣殿贫苦骑士团"(The Poor Knights Of CHRIST),历史上著名的三大骑士团之一.第一次十字军东侵(1096-1099)之后,为保卫地中海东岸的十字军国家,约于1118年在耶路撒冷建立的宗教性封建军事组织.法国香槟区的贵族雨果·德·帕英(Hugh De Payens)和其他八名骑士于1119年创立了该组织.主要由法国骑士组成.骑士团最初驻扎在毗邻救世主教堂的耶路撒冷圣殿山上的阿克萨清真寺的一角,而这个清真寺正是建在传说中所罗门王的神殿(The Temple Of Solomen)上.据说因骑士团首领最早驻地在耶路撒冷圣殿附近而得名.

    如果仔细看Knights的标记,在中央的圆规上方,有一个红色十字形的人形居于中央,两边则共有14个白色较小的人形.,红色代表血,十字形代表十字架,那么中间的十字形人形可能就代表自杀抛弃肉体的英利政美,这也可能说明英利政美以神自居,旁边的14个白色较小的人形可能说明除英利政美外,Knights的正式成员有14人.不过耶稣的门徒应该是13位,这多出来的1位我无责任猜想是Knights创造的模拟Lain.至于其他13人里哪个是犹大,我也无责任猜想是Taro,虽然他自己说他不是Knights的核心成员~

     

    圆规可以象征计算方法,圆规上方的月牙形状仿佛在盛接滴下来的血(圣杯?),月亮本身又有神秘的意象.中央的金字塔本身也包含高超的数学原理,如果仔细数数金字塔最上面那些浅颜色的"石块",同样是14块.难道这是Knights在强调自己的技术高超又神秘神圣兼而有之? =v=

    除了圣殿骑士团之外,Knights与"Knights of the Lambda Calculus"也有关系~虽然被称为"骑士团",但是兰姆达算法骑士团(Knights of the Lambda Calculus)其实只是大学里研究员间互相开玩笑的结果,并没有实际的组织,所以,在玲音第8话(RUMOR)中就有一个女声提到Knights其实是美国大学生的玩笑.Wikipedia上是这样描述兰姆达算法的:

    Lambda演算是一套用于研究函数定义、函数应用和递归的形式系统.它由 Alonzo Church 和 Stephen Cole Kleene 在 20 世纪三十年代引入,Church 运用 lambda 演算在 1936 年给出 判定性问题 (Entscheidungsproblem) 的一个否定的答案.这种演算可以用来清晰地定义什么是一个可计算函数.关于两个 lambda 演算表达式是否等价的命题无法通过一个通用的算法来解决,这是不可判定性能够证明的头一个问题,甚至还在停机问题之先.Lambda 演算对函数式编程有巨大的影响,特别是Lisp 语言.

    Lambda演算可以被称为最小的通用程序设计语言.它包括一条变换规则 (变量替换) 和一条函数定义方式,Lambda 演算之通用在于,任何一个可计算函数都能用这种形式来表达和求值.因而,它是等价于图灵机的.尽管如此,Lambda 演算强调的是变换规则的运用,而非实现它们的具体机器.可以认为这是一种更接近软件而非硬件的方式.

    Knights在Wired出现之前就已经在研究利用人的集体无意识,相信英利政美正因为这个才与他们合作.他们所参与的有Psyche芯片,Cyberia的枪击案件,PHANTOMa游戏无法退出事件,Lain家的散热系统爆炸事件,天空中的Lain事件,谋杀龅牙猥琐电脑高手事件.

    所有的这些,都让人觉得Knights的目的是一个阴谋.

    [Lain,心中的神]--Protocol 7

    在Lain的世界里,Wired就相当于我们现在正使用的Internet,一个世界性的电脑互联网络.这个网络曾使用的第6代网络协议即将到达它的性能上限,于是新一代的网络协议"Protocol 7"就被提上了前台.跟我们的世界类似,协议,标准总是掌握在大公司手中.在Lain的世界,"Protocol 7"由桥总研(Tachibana General Lab)雇员英利政美(Masami Eiri)主持开发.但是此君私自在"Protocol 7"中加入了利用舒曼共振,无需任何设备就可以使人完全连接到Wired以及与他人互相连接的功能,这个举动被其东家发现后立刻被解雇.英利政美被解雇后一星期在山手线自杀.

    根据所有出现的描述"Protocol 7"的开发者英利政美的资料,可以总结出"Protocol 7"主要的功能:

    1.无需设备连接到网络.

    设备就是用来实现某种功能的东西.电脑的CPU/内存/硬盘/键盘/鼠标/显示器都是设备,人类的功能器官同样是设备,比如眼/耳/鼻/皮肤是输入设备,口/手/脸是输出设备.所以,无需设备连接到网络不仅是指不需要电脑等终端设备,还指不需要肉体参与.在实现方式上我的理解是利用舒曼共振与人的脑波产生的相互作用(波的干涉?)来达到这个目的.

    2.完全连接到网络.

    跟Matrix有点像,意识(干脆说灵魂还容易懂些)完全进入网络世界中.实现方式无疑是Lain的故事发生的15年前的"Kensington Experiment",接受实验的孩子们的意识全部都无法回到现实世界,他们都"死"了,也就是完全地"接入"了,但是"Protocol 7"还更进了一步,不用设备帮助就能完全接入基于"Protocol 7"的网络.

    3.信息的完全共享.

    英利政美认为信息如果不共享,就毫无意义,仅仅是数据而已.实际上,人类的集体无意识包含了人类在进化过程中得到的经验本能,就是一个很好的信息完全共享的例子,人本来也就与集体无意识联系在一起."Protocol 7"将所有人连接在一起,并完全共享每个人所持有的信息比如记忆.

    人与集体无意识本就有着网络般的联系(我可以说连接吗?),按照Timothy Leary的理论,集体无意识中的资料是存放在DNA中的,所以,要利用人与集体无意识的联系,就需要分子生物学的知识...Lain剧中还特别有个新闻桥段说桥总研解读了人的DNA序列...恩恩,然后英利政美桑马上就利用上了~这样,Wired与人的集体无意识网络就可以融合在一起.

    "Protocol 7"跨越物理学,生物学,以及心理学等学科,将Wired/真实世界/集体无意识连接在一起...也只有在桥总研这样的大公司工作,才有可能搞的出来...

    "Protocol 7"最不厚道的地方,就是它虽然叫"协议",但是实际上是强制性的...除非你不在地球上~

    [Lain,心中的神]--故事的基础~

    1952年舒曼(Schumann)指出,地球和电离层可以构成一个谐振腔体,腔体中存在一个特殊的谐振频率,这一频率主要由地球的尺寸决定,并由全球的闪电放电激发.这个谐振频率被称为舒曼共振(Schumann Resonance).舒曼共振的频谱在ELF波段,频率为8Hz左右(这个值的说法很多,7.83/7.5/7.2等),恰好人类大脑的α波与θ波也近于8Hz,于是有人将舒曼共振称为"地球的脑波",目前舒曼共振对人类起什么作用尚不明,不过很多气功师和江湖术士倒是大吹这个概念.

    集体无意识(Collective Unconsciousnes)出自卡尔·古斯塔夫·荣格(Carl Gustav Jung)的分析心理学理论.集体无意识理论认为在人类心灵最深处,拥有一个超越所有文化和意识的共同基底,这个基底就是集体无意识,集体无意识是人格结构最底层的无意识,包括祖先在内的世世代代的活动方式和经验库存在人脑中的遗传痕迹.所有意识和无意识现象都从集体无意识中生发出来.在Lain的情节中,集体无意识起了很大作用.

    John C. Lilly利用迷幻药与"隔离箱"来人工阻断人的感觉以研究人的意识,他认为他连接到了某种实体上.随后,他开始研究海豚的超声波交流.

    1977年Timothy Leary提出人的8个意识回路理论,其中第7个意识回路为神经-基因回路.它可以连接到存储在DNA中的集体无意识.第8个意识回路为神经-原子回路,它连接宇宙中早于生命产生的意识,或者说外星人,或者说上帝.

    一件事物如果可以被回忆起来,就说明有一个记录存在,如果一件事不能被回忆起来,它就从来没有发生过.

    Wired世界:也就是网络世界,所有上网的人们对Wired这个网络系统及其上的信息的认识的集合.

    真实世界:所有真实世界中的人们对自己存在的世界的认识的集合.