随笔 - 50  文章 - 0  trackbacks - 0
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(1)

随笔档案

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的?

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”

很多程序员响应,他们在推荐时也写下自己的评语。 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。

其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。

下面就按照各本书的推荐数排列。

1、《代码大全》 史蒂夫·迈克康奈尔

推荐数:1684

“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来, 就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky

对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

Steve McConnell的原作《代码大全》(第1版)是公认的关于编程的最佳实践指南之一, 在过去的十多年间,本书一直在帮助开发人员编写更好的软件。

现在,作者将这本经典著作全新演绎,融入了最前沿的实践技术,加入了上百个崭新的代码示例, 充分展示了软件构建的艺术性和科学性。 McConnell汇集了来自研究机构、学术界以及业界日常实践的主要知识, 把最高效的技术和最重要的原理交织融会为这本既清晰又实用的指南。

无论您的经验水平如何,也不管您在怎样的开发环境中工作,也无论项目是大是小, 本书都将激发您的思维并帮助您构建高品质的代码。

代码大全(第2版))》做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。

2、《程序员修炼之道

推荐数:1504

对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。 或许他们还是在校生,但对要自己做什么,还感觉不是很安全。

就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮, 但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

《程序员修炼之道:从小工到专家》内容简介:《程序员修炼之道》由一系列独立的部分组成, 涵盖的主题从个人责任、职业发展,知道用于使代码保持灵活、并且易于改编和复用的各种架构技术, 利用许多富有娱乐性的奇闻轶事、有思想性的例子及有趣的类比, 全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。

无论你是初学者,是有经验的程序员,还是软件项目经理,《程序员修炼之道:从小工到专家》都适合你阅读。

3、《计算机程序的构造和解释

推荐数:916

就个人而言,这本书目前为止对我影响醉倒的一本编程书。

《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。 其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。 其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。 这是一本会启发你的书,它会燃起你编写出色程序的热情; 它还将教会你认识并欣赏美; 它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。

其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

一些人认为此书不适合新手。 个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。 毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。 此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

4、《C程序设计语言

推荐数:774

这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。 (这对理解“底层”非常重要)—— Nathan

《C程序设计语言》(第2版新版)讲述深入浅出,配合典型例证,通俗易懂,实用性强, 适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。

《C程序设计语言》(第2版新版)原著即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。 我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。 原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。

人们熟知的“hello,world”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。

5、《算法导论

推荐数:671

《代码大全》教你如何正确编程; 《人月神话》教你如何正确管理; 《设计模式》教你如何正确设计……

在我看来,代码只是一个工具,并非精髓。 开发软件的主要部分是创建新算法或重新实现现有算法。 其他部分则像重新组装乐高砖块或创建“管理”层。

我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron

  • 经典的算法书,被亚马逊网,《程序员》等评选为2006年最受读者喜爱的十大IT图书之一。
  • 算法领域的标准教材,全球多所知名大学选用
  • MIT名师联手铸就,被誉为“计算机算法的圣经”
  • 编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。

6、《重构:改善既有代码的设计

推荐数:617

《重构:改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式, 并给出了何时以及何地应该开始挖掘代码以求改善。 书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。

《重构:改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。

《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读, 也可作为高等院校计算机及相关专业师生的参考读物。

我想我不得不推荐《重构》:改进现有代码的设计。—— Martin

我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序, 而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

7、《设计模式

推荐数:617

自1995年出版以来,本书一直名列Amazon和各大书店销售榜前列。 近10年后,本书仍是Addison-Wesley公司2003年最畅销的图书之一。 中文版销售逾4万册。

就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。 虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术, 因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young

8、《人月神话

推荐数:588

在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。

Brooks博士为人们管理复杂项目提供了最具洞察力的见解。 既有很多发人深省的观点,又有大量软件工程的实践。 本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验。

该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄中等多种语言,全球销量数百万册。 确立了其在行业内的经典地位。

9、《计算机程序设计艺术

推荐数:542

《计算机程序设计艺术》系列著作对计算机领域产生了深远的影响。 这一系列堪称一项浩大的工程,自1962年开始编写,计划出版7卷,目前已经出版了4卷。

《美国科学家》杂志曾将这套书与爱因斯坦的《相对论》等书并列称为20世纪最重要的12本物理学著作。 目前Knuth正将毕生精力投入到这部史诗性著作的撰写中。

这是高德纳倾注心血写的一本书。—— Peter Coulton

10、《编译原理》(龙书)

推荐数:462

我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。 我从没忘过此书的第一版封面。 此书让我知道了编译器是多么地神奇绝妙。- DB

11、《深入浅出设计模式

推荐数:445

强大的写作阵容。

  • 《Head First设计模式》(中文版) 作者Eric Freeman;
  • ElElisabeth Freeman是作家、讲师和技术顾问。
  • Eric拥有耶鲁大学的计算机科学博士学位,E1isabath拥有耶鲁大学的计算机科学硕士学位。
  • Kathy Sierra(javaranch.com的创始人)FHBert Bates是畅销的HeadFirst系列书籍的创立者,也是Sun公司Java开发员认证考试的开发者。

本书的产品设计应用神经生物学、认知科学,以及学习理论,这使得这本书能够将这些知识深深地印在你的脑海里, 不容易被遗忘。

本书的编写方式采用引导式教学,不直接告诉你该怎么做,而是利用故事当作引子,带领读者思考并想办法解决问题。 解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。

作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店, 书中搭配大量的插图(几乎每一页都有图),所以阅读起来生动有趣,不会感觉到昏昏欲睡。

作者还利用歪歪斜斜的手写字体,增加“现场感”。 精心设计许多爆笑的对白,让学习过程不会太枯燥。 还有模式告白节目,将设计模式拟人化成节目来宾,畅谈其内在的一切。 每一章都有数目不等的测验题。 每章最后有一页要点整理,这也是精华所在,我都是利用这一页做复习。

我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。 一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus

12、《哥德尔、艾舍尔、巴赫书:集异璧之大成

推荐数:437

如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。 他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。 这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

13、《代码整洁之道

推荐数:329

细节之中自有天地,整洁成就卓越代码

尽管糟糕的代码也能运行,但如果代码不整洁,会使整个开发团队泥足深陷, 写得不好的代码每年都要耗费难以计数的时间和资源。 然而这种情况并非无法避免。

著名软件专家RoberfC.Marlin在《代码整洁之道》中为你呈现出了革命性的视野。 Martin携同ObjectMetltor公司的同事,从他们有关整洁代码的最佳敏捷实践中提炼出软件技艺的价值观, 以飨读者,让你成为更优秀的程序员——只要你着手研读《代码整洁之道》。

阅读《代码整洁之道》需要你做些什么呢?你将阅读代码——大量代码。 《代码整洁之道》促使你思考代码中何谓正确,何谓错误。 更重要的是,《代码整洁之道》将促使你重新评估自己的专业价值观,以及对自己技艺的承诺。

从《代码整洁之道》中可以学到:

  • 好代码和糟糕的代码之间的区别;
  • 如何编写好代码,如何将糟糕的代码转化为好代码;
  • 如何创建好名称、好函数、好对象和好类;
  • 如何格式化代码以实现其可读性的最大化;
  • 如何在不妨碍代码逻辑的前提下充分实现错误处理;
  • 如何进行单元测试和测试驱动开发。

虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin

14、《Effective C++》和《More Effective C++

推荐数:297

在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。 正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing

15、《编程珠玑

推荐数:282

多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位列前列。 正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力, 从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”, 成为世界计算机界名刊《ACM通讯》历史上最受欢迎的专栏, 最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。

本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren

16、《修改代码的艺术》by Michael Feathers

本书是继《重构》和《重构与模式》之后探讨修改代码技术的又一里程碑式的著作, 而且从涵盖面和深度上都超过了前两部经典。 书中不仅讲述面向对象语言(Java、C#和C++)代码,也有专章讨论C这样的过程式语言。

作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等), 与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入,而且常常发前人所未发。

书中处处体现出作者独到的洞察力,以及多年开发和指导软件项目所积累的丰富经验和深厚功力。 通过这部集大成之作,你不仅能掌握最顶尖的修改代码技术,还可以大大提高对代码和软件开发的领悟力。

我认为没有任何一本书能向这本书一样影响了我的编程观点。 它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

同意。很多开发人员讨论用干净的石板来编写软件。 但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

17、《编码:隐匿在计算机软硬件背后的语言

这是一本讲述计算机工作原理的书。

不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。 作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。 更重要的是,你会因此而获得对计算机工作原理较深刻的理解。 这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。

不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟, 都不妨翻阅一下《编码:隐匿在计算机软硬件背后的语言》,读一读大师的经典作品,必然会有收获。

我推荐Charles Petzold的《编码》。 在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil

18、《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。 不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是, 要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

19、《Peopleware / 人件集:人性化的软件开发

Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。 他们的答案并不简单,只是令人难以置信的成功。 第二版新增加了八章内容。 – Eduardo Molteni

20、《Coders at Work / 编程人生

这是一本访谈笔录,记录了当今最具个人魅力的15位软件先驱的编程生涯。 包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物,为我们讲述了 他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法, 并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。

一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

21、《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!》

虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。 一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

22、《Effective Java 中文版

此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

23、《Patterns of Enterprise Application Architecture / 企业应用架构模式

很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol

24、《The Little Schemer》和《The Seasoned Schemer》 nmiranda

这两本是LISP的英文书,尚无中文版。 美国东北大学网站上也有电子版。

25、《交互设计之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。

本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。 本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。

作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的, 而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。 “难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。

本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性, 证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。

本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士, 以及关心软件行业和高科技行业现状与发展的人士阅读。

他还有另一本中文版著作:《About Face 3 交互设计精髓》

26、《Why’s (Poignant) Guide to Ruby 》

如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

27、《Unix编程艺术》

It is useful regardless operating system you use. – J.F. Sebastian

不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

28、《高效程序员的45个习惯:敏捷开发修炼之道

45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。

29、《测试驱动开发

前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。 它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

我不关心你的代码有多好或优雅。 如果你没有测试,你或许就如同没有编写代码。 这本书得到的推荐数应该更高些。 人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

30、《点石成金:访客至上的网页设计秘笈

可用性设计是Web设计中最重要也是难度最大的一项任务。 《点石成金-访客至上的网页设计秘笈(原书第二版)》作者根据多年从业的经验,剖析用户的心理, 在用户使用的模式、为扫描进行设计、导航设计、主页布局、可用性测试等方面提出了许多独特的观点, 并给出了大量简单、易行的可用性设计的建议。

本书短小精炼,语言轻松诙谐,书中穿插大量色彩丰富的屏幕截图、趣味丛生的卡通插图以及包含大量信息的图表, 使枯燥的设计原理变得平易近人。

本书适合从事Web设计和Web开发的技术人员阅读,特别适合为如何留住访问者而苦恼的网站/网页设计人员阅读。 这是一本关于Web设计原则而不是Web设计技术的书。

本书作者是Web设计专家,具有丰富的实践经验。 他用幽默的语言为你揭示Web设计中重要但却容易被忽视的问题,只需几个小时, 你便能对照书中讲授的设计原则找到网站设计的症结所在,令你的网站焕然一新。

取决于你所追求的目标。 我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。 – Justin Standard

posted @ 2012-08-14 17:46 justjavac(迷渡) 阅读(199) | 评论 (0)编辑 收藏
php新手开发的作品通常都有以下不足:

1、网站目录不合理,无法分辨各个功能的文件夹及文件,没有系统内核。

2、网站未经过初始化,没有安全过滤,没有统一入口。

3、基本没有class,甚至连function都很难找到,冗余代码多,并有大量的重复文件。

4、PHP代码混编,非MVC模式。

发现了自己的不足,就要针对不足之处加强技术学习,多从成熟的系统作品中学习,

解决以上几个方面的问题,再多了解最新的php安全漏洞,以及编程技巧,你就会

逐渐成为开发高手!

最后一点,php上手虽快,但没有系统学习过软件专业的课程和知识是肯定不够的,

无 论你是哪一种语言工具的开发者,算法设计与分析是你一定要精通的,认真

扎实地学过数据结构、算法、编绎原理这些专业课程后,你会发现:

你 不论学什么开发,都会感到的自己的悟性非凡!
posted @ 2010-07-02 11:54 justjavac(迷渡) 阅读(143) | 评论 (0)编辑 收藏

1. CI中的controller都应当小写。刚开始为了区分单词,把第二个单词大写了,结果就是不认default_controller。事实证明这是错误的。放到linux下面就不灵了,应该全部小写,如果你大写了,CI会认为这是libraries里面的东西。不管怎样都应该全部小写,至少可以避免linux下区分大小写的问题。

 

2. 分页的问题。CI的官方论坛下提供了一些源代码,怎样写分页函数我就不多说了,可以直接看高手的。关键是传递页面参数的时候,不要忘了修改segment。一开始怎么传都不对,后来才想起来我的网址已经是localhost/codeigniter/aaa/bbb/3/10了,这样segment也要相应改变。分页参数在第几个/后,他就是uri->segment(几)。如果是搜索之后的分页,那么$config['total_rows']就不是count_all了,而是加入where之后的query的记录数。想起来倒是有一个问题还没解决,就是在你点search之后,一般需要用JS把网址转换成CI固有的模式,但是怎样使这个js生成的网址包含到site_url中,我没有解决,只能手工了(仔细想想还是挺简单的呵呵,自己造网址不用site_url)。

 

3. MVC模式我已经比较适应了。将页面都放在view中,控制语句放在controller中,而函数放在model中。刚开始有很多人和我一样想要在view或者control中加一些语句,只能说,不行,也不规范。最好的办法是写成helper,如果是数据库的二次调用的话,可以用inner join合并。

 

4. htaccess的问题。很多人肯定和我一样,一开始接触的时候就是感兴趣怎样可以去掉index.php。虽然网上已经泛滥了,但是我再写一次吧。其实就两个工作,第一,在根目录写一个.htaccess的文档,第二,开启apache中的rewrite模块。

1)htaccess的写法很多。这是基于你对CI各层目录的安排决定的。我的安排:除了application中的内容外。将其他所有东西放在根目录下的www目录下,其中图片放在www/images/下,flash放在www/flash/下,xml放在www/xml下,js放在www/js下。。。。总之全堆在www里面。所有views在title下面加上<base href="<?=base_url()?>" />这句话,系统就能识别你的根目录了,所有链接改成site_url()就可以保证路径不会出错了。于是,我的htaccess是这样的:

RewriteEngine on  

RewriteCond $1 !^(index\.php|www|uploadfiles|robots\.txt)  

RewriteRule ^(.*)$ /index.php/$1 [L] [L]

第一行是将rewrite打开,第二行是不rewrite的例外,包括index.php本身,www目录,uploadfiles(这个参见5),还有robots搜索,第三行自然就是将index.php隐藏的rewrite规则了,即剩下的网址由于原来都是localhost/codeigniter/index.php/aaa/bbb的模式,现在可以去掉index.php了。而www下的网址不涉及index.php,用不到这个规则,所以要排除。

2)首先找到apache下面的http.conf,路径是apache的conf目录下。找到这一行:LoadModule rewrite_module modules/mod_rewrite.so,将前面的#去掉,也就是说开启这个module。另外需要找到rewrite的目录行,将AllowOverride设置为All,其实就是roadmodule下面的那个directory.

    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

3)在CI的config目录下的config.php中,将$config['index_page'] = "index.php"改为$config['index_page'] = “”,这样就大功告成啦!!不用输入index.php也可以访问了。其实更关键的是你的各个目录的路径安排。

5.FCKEditor的问题。应该说我在应用的时候没有遇到任何麻烦,除了上传时候的路径让我一顿好找。我觉得设置成根目录下的/uploadfiles是不错的选择,当然别忘了在htaccess中把uploadfiles也放在不rewrite的队伍中。因为我现在的习惯是所有的文件编码都设置成utf-8,所以网上经常说的乱码的现象没有遇到。

基本上就是这些基本的问题了,我做的其实就是简单的企业网站,没有高级应用,所以也没有遇到更复杂的问题。等考完GT可以尝试做一个更复杂的网站,和AJAX结合后再写一些心得。下次要再做这样的CMS,后台直接搞定,省了不少时间。而且对于我这样的PHP烂人来说,CI帮我解决了很多安全问题,同时也提高了效率。

有点过度兴奋了,写得超级乱,我自己都不愿意回过头去细细检查了,具体问题可以再联系我,只要我能解答。最后上传一个验证码的helper吧,版权归CI论坛上的同学所有,我只是转一下,顺便写一下用法。。。

点击下载此文件

1)首先在controller中引用getcode_helper.php, $this->load->helper('getcode');

建立一个function比如

Php代码 
  1. function createcode()  
  2. {  
  3.     code();  
  4. }  

 

2)验证码图片链接地址:<img id="codeimage" src="<?=site_url('controller路径/createcode')?>

3)表单提交时验证函数:

Php代码 
  1. function seccode_check($str)  
  2. {  
  3.     if(chk_code($str))  
  4.     {  
  5.         return TRUE;  
  6.     }  
  7.     else  
  8.     {   
  9.         return FALSE;  
  10.     }  
  11. }  

 


posted @ 2010-07-02 11:53 justjavac(迷渡) 阅读(217) | 评论 (0)编辑 收藏

在与许多客户的接触中,我发现有必要建立一套SOA的基本原则。下面的部分将介绍SOA中应有的基本原则。这些并非绝对真理,它们更像一个用于SOA相关讨论的参考框架。你会发现:前四项衍生自Don Box提出的四项原则,尽管随着时间的流逝,这四项原则的描述可能已经有了些变化。
相关厂商内容

1. 明确边界:服务被调用时,与实现其功能相关的内容都应被传递过来。对服务的所有访问都应该通过公共接口进行。调用服务时,非隐含的假设是必须的。“服务与消息紧密联系,因为参数进出服务的唯一方式是通过消息进行的”。作为通用的模式,服务调用不应依赖于共享的上下文,而应被作为无状态的模块。契约描述了服务的功能性与非功能性的能力和特点,管理着服务提供的接口。服务调用是一个具有业务逻辑效果的行为,可能有大量的资源开销,并且导致一系列不同于本地方法调用和远程过程调用的错误。服务的调用绝非远程过程调用。

服务的使用和提供应该尽可能地简单,因此与服务间的交互没必要被隐藏得太多。在SOA中,服务发送和接收的消息、服务契约以及服务本身都应当是最好的构件。这就意味着,例如,被用到的编程模型和工具至少应该提供一个API,这个API会帮助服务的编程人员了解上述概念。总的来说,一个明确的接口会封装服务的内在实现,而服务通过该接口发布自己的功能;与服务交互是一个具体的行为,它依赖于服务使用者和提供者之间消息的传递。

2. 共享契约和架构,而不是类:基于一份服务描述(一份契约),服务使用者和服务提供者都可以获得使用或提供服务的全部所需。根据松耦合原则,服务提供者不能依靠服务使用者来重用那些依赖于使用者环境的代码。毕竟,服务使用者可能使用不同的开发环境和运行环境。这条原则给SOA体系中所能交换的数据加上了严格的限制。理想的情况是,数据以符合一种或多种模式的XML文档形式被交换,因为这种方式可应用于任何你能想到的编程环境。因此,因为这条原则在基于DCOM和基于RMI的环境中是不可能被遵守的,所以这两种环境基本上无法成为SOA的可用选项。

3. 策略驱动:为了与服务交互,必须满足以下两组不同的要求:

  • 提供者提供的功能、语法和语义必须适应使用者的需求;
  • 技术能力与需要必须匹配。
例如,一个服务提供者提供了能够精确满足用户需求的服务,但该服务是基于JMS的,可使用者只能使用HTTP方式(比如,服务被应用于.NET平台)。服务提供者可能要求消息级别的加密采用XML加密标准,而使用者只支持采用SSL技术来保障传输层上的安全。即使在那些交互双方都拥有足够能力的案例中,它们的这些能力仍旧需要被“启用”。例如,提供者可能根据不同的使用者需求,对响应的消息使用不同的算法进行加密。

为了使尽可能多的形形色色的使用者能对服务进行访问,一种策略机制已经被作为SOA工具集的一部分引入了。在服务接口对功能进行描述的同时,策略对不同的,非功能性的能力和需求进行了指定。(译者注:策略指定的是服务之外的补充信息,是对服务使用者提出的特征要求)。

4. 自治:与明确边界原则相关,服务自治意味着,接口成为服务与外界联系的唯一方式,至少从SOA的角度来看是这样的。需要注意的是,服务的运行环境一定是可变的。例如,在丝毫不影响使用者的情况下,就可以从轻量级的原型实现转换到成熟的、基于应用服务器的协同组件集。服务能够被彼此独立的修改、部署、发布新版本和管理。服务提供者不能寄希望于服务使用者,期望它们依靠自己的能力迅速适应新版本的服务,有的使用者可能甚至没这个能力或者根本不愿去适应新版本的服务接口(尤其是当这些服务接口超出了服务提供者控制范围的时候)。

5. 采用可传输的协议格式,而非API:服务通常采用协议格式来发布,协议格式应该是明确的、可传输的并且被服务所支持的。这一点与前两条原则非常相关,但却带来了新的见解:为保证一个服务最大程度的可访问性(及长期的可用性),只要交互过程遵守为该服务定义的策略,那么由任何依照服务接口进行消息交换的平台都可以访问该服务。例如,通过以这一原则来测试主流的动态编程语言(如Perl、Python或Ruby),我们可以去考虑该语言能否使用或提供一个特定的服务。虽然,在现有的技术实现里,这条原则可能还没有发挥作用,但这个思路可以作为下列准则的试金石:
  • 使用开放的标准或者可阅读的描述来描述所有消息格式。
  • 不需要特定的资源就可以创造出符合这些合理的模式的消息。
  • 成功通信所必需的附加信息,例如包含安全性或可靠性约束的头信息,它们的语义和语法要遵循公开的规范和标准。
  • 服务交互时所使用的传输(或传递)协议中至少有一个是标准的网络协议,或它可以通过标准的网络协议来访问。

6. 面向文档:服务交互时,数据是以文档的形式来传递的。文档是一个被明确模块化的,有层次结构的数据容器。面向文档的一个重要特征就是自描述。最理想的情况下,文档是对现实世界中的文件(如订单、发票或帐单)的建模。文档应该被设计来确保它在问题域的上下文中发挥作用,这意味着它们可能应用于一个或更多的服务。

与现实世界的纸制文档相似,和服务交换信息的文档将包含冗余的信息。例如,文档中可能同时包含了客户ID和客户地址信息(尽管客户ID可能已经足够了)。这种冗余是可以接受的,因为它将服务使用者和提供者双方的服务接口和隐含数据模型隔离开来。应用面向文档的模式的同时,服务调用成为有意义的业务逻辑消息的交换,而非上下文无关的RPC调用。虽然通常可以认为XML将被作为服务文档的格式和语法,但它还没有成为标准。

在一个SOA连接中,参与者之间的消息流转于不同的系统,使得各个系统之间彼此独立。松耦合原则要求参与者对共知的依赖越少越好。当消息在分布式对象或RPC基础架构中发送时,客户端和服务器端使用由同一个接口描述文档生成的代理类(stub和skeleton)。如果不是这种情况的话,当契约不支持双方的交互时,通讯就会停止。因为这个原因,RPC风格的基础架构要求客户端和服务器端程序代码的同步运行。

7. 松耦合:多数SOA的倡导者都认为松耦合是一个很重要的概念。不幸的是,对于究竟哪些特征造成一个系统松耦合,有许多不同的看法。一个系统可以在多个维度表现为松耦合或紧耦合,它依赖于具体的要求和上下文,系统可能会在一些维度是松耦合的,在另一些维度是紧耦合的。这些维度包括:

  • 时间:当参与者在时间上是松耦合时,它们不需要在同一时间启动并进行通讯。这要求两者之间采用某种缓冲或队列机制,尽管这种机制与松耦合无关。当参与的一方向另一方发送消息时,交互的继续不依赖于逻辑上或物理上能否立即返回应答消息。
  • 位置:如果一方参与者查询与之通信的另一方参与者的地址,另一方的地址可以透明地进行变更,不需要重新编程、重新配置或者甚至不需要通信伙伴的重新启动。这意味着查找(lookup)过程采用某种目录或地址来存储服务终端的地址。(对应SOA提供的目录服务)
  • 类型:同静态与动态,弱类型与强类型这些编程的概念类似,参与者既可以全部依赖也可以部分依赖文档结构来实现它的功能。
  • 版本:参与者可以依赖服务接口的特定版本,也可以兼容某个范围内的版本。所需匹配的版本越确切,参与者在这个方面上的松耦合性就越差。一个好的原则是遵循Postel法则(译者注:Postel’s Law——“Be liberal in what you accept, and conservative in what you send.”):服务提供者应尽可能兼容许多不同的版本,这将使它更加健壮(可能甚至需要容错),服务使用者应尽可能遵循精确的语法和文档类型。这将增加整个系统的稳定性和灵活性。
  • 基数:服务消费者和提供者可能是1对1的关系,尤其是在请求或响应交互发生时,或队列被明确使用的情况下。在别的情况下,服务使用者(在这种情况下,称作“消息发送者”或“事件源”更为合理)可能既不知道也不关心有多少人接受了消息。
  • 查找(Lookup):参与者打算调用服务时,既可以依赖服务提供者的物理名或逻辑名,也可以先通过一组功能描述来执行查找(lookup)操作。这意味着存在一个注册表和(或)仓库,对存储其中的使用者需求和提供者能力进行直接或间接的匹配。
  • 接口:参与者可能要绑定到一个特定的服务接口或是支持一个通用的接口。如果使用通用接口,所有该接口的使用者都能与所有该接口的提供者进行交互。尽管可能乍看起来这有些笨拙,但单一通用(统一)接口的原则就是WWW架构的核心。
创造一个满足以上所有维度的松耦合系统,既不可行,也没必要。不同类型的服务要做不同的取舍。Carlos Perez的经典之作中(如这里和这里)有更多的关于松耦合各个维度的讨论。

8. 遵循标准:一个SOA应用中应遵循的一个关键原则是,信赖标准而非专有的API和格式。标准存在于技术方面,如数据格式、元数据、传输协议;也存在于业务层面,如文档的类型。(例如,UBL中所提到的那些)(译者注:UBL定义了业务文档的通用XML库,UBL的文档类型包括订单、发票等)

很显然,一些人认为专有的解决方案,如一些EAI或消息服务提供商提供的方案,都遵循SOA原则。这个原则不遗余力地强调标准的重要性。当然,由于有太多可供选择的标准,什么情况用何种标准成了颇具争议的问题。标准的一个重要方面是它的可接受性(在Web服务的标准中,基本上可以认为“Microsoft肯定要插上一脚”)。

9. 独立于软件供应商:任何架构性的原则都不应依赖特定供应商的产品。将抽象的概念转化为具体的,可运行的系统的过程中,不可避免的要决定使用何种具体的产品,包括商业的或者免费开源的软件。这些决定都不应影响架构层。这就意味着要尽可能的依赖互操作性和可移植性的标准。因此,要应用支持适当标准的技术来构建服务提供者和使用者,不要受限于任何软件供应商的技术路线。

10. 元数据驱动:SOA中所有的元数据对象都需要被按照一种方式储存起来,这种方式将确保元数据对象能够在设计和运行时被发现、检索和解释。元数据对象包括对服务接口、参与者、端点和绑定信息、组织单元和职责、文档类型或模式、使用者或提供者关系等的描述。这些对象的用途应当是被代码自动生成或者解释,成为服务和参与者生命周期的一部分。

以上是我的原则列表。 即使你不完全同意——而坦率地讲,我也不希望你完全同意, 至少不是全部都同意——我希望你能带着它们来引发一些讨论!
posted @ 2010-07-02 11:53 justjavac(迷渡) 阅读(175) | 评论 (0)编辑 收藏

引领科技为您讲解配置 codeigniter,codeigniter 基本配置信息在 application/config/config.php 文件,本文详细讲解每一个基本配置选项,从而快速掌握 codeigniter 进行开发。

$config['base_url'] = "http://www.example.com/"

您网站的网址,codeigniter 会根据这个网址来生成链接、表单地址等。

$config['index_page'] = "index.php"

codeigniter 根目录下的 index.php 文件名,codeigniter 会使用它来生成链接地址。如果使用隐藏 index.php 的 URL,将其设置为空字符串:$config['index_page'] = ""。

$config['uri_protocol'] = "AUTO"

codeigniter 生成 URL 使用的格式,设置为“AUTO”自动探测。如果链接不能正常工作,可以尝试以下值:
PATH_INFO、QUERY_STRING、REQUEST_URI、ORIG_PATH_INFO。

$config['url_suffix'] = ""

codeigniter 产生链接时使用的 URL 后缀,如果要实现伪静态,可以设置 $config['url_suffix'] = ".html"。

$config['language'] = "english"

codeigniter 程序默认使用的语言

$config['charset'] = "UTF-8"

codeigniter 程序默认使用的字符集

$config['enable_hooks'] = FALSE

是否启用钩子,钩子功能使得您可以在不修改系统核心文件的基础上来改变或增加系统的核心运行功能。

$config['subclass_prefix'] = 'MY_'

设置扩展 codeigniter 类库时使用的类名前缀

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'

设置 codeigniter URL 中允许使用的字符,这是一个正则表达式。当访问者试图访问的 codeigniter URL 包含其它字符时,会得到一个警告。应该尽量限制 codeigniter URL 使用的字符来提高安全性,可以有效的过滤注入攻击。如果设置为空,允许使用所有字符,强烈建议不要这么做。

$config['enable_query_strings'] = FALSE

codeigniter URL 默认使用分段的 URL,此选项也允许 codeigniter 开启查询字符串形式 URL。您可以使用查询字符串来传递要访问的控制器和函数。例如: index.php?c=controller&m=method。codeigniter 默认使用分段的 URL,查询字符串的 URL 很多特性不被支持。

$config['controller_trigger'] = 'c'

codeigniter 将查询字符串中此选项对应的值当做 codeigniter 控制器的名字。

$config['function_trigger'] = 'm'

codeigniter 将查询字符串中此选项对应的值当做 codeigniter 控制器方法的名字

$config['log_threshold'] = 0

启用错误日志,设置记录哪些类型的错误。

0 = 关闭错误日志记录
1 = 记录错误信息
2 = 记录调试信息
3 = 记录通知信息
4 = 记录所有信息

$config['log_path'] = ''

如果您不想使用默认的错误日志记录目录配置(system/logs/),可以设置完整的服务器目录。

$config['log_date_format'] = 'Y-m-d H:i:s'

codeigniter 错误日志时间格式

$config['cache_path'] = ''

如果您不想使用默认的缓存目录(system/cache/)来存储缓存,可以设置完整的服务器目录

$config['encryption_key'] = ""

codeigniter 使用的密钥

$config['global_xss_filtering'] = FALSE

是否对输入数据(GET、POST)自动过滤跨脚本攻击

$config['compress_output'] = FALSE

启用Gzip压缩达到最快的页面加载速度

$config['time_reference'] = 'local'

设置时间格式:"local"、"GMT"

$config['rewrite_short_tags'] = FALSE

如果您想要使用短标记,但 PHP 服务器不支持,codeigniter 可以通过重写短标记来支持这一功能。

$config['proxy_ips'] = ''

如果访问者通过代理服务器来访问您的网站,您必须设置代理服务器 IP 列表,以识别出访问者真正的 IP

posted @ 2010-07-02 11:49 justjavac(迷渡) 阅读(1322) | 评论 (0)编辑 收藏

EL表达式
1、EL简介
1)语法结构
       ${expression}
2)[]与.运算符
     EL 提供.和[]两种运算符来存取数据。
     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如:
         ${user.My-Name}应当改为${user["My-Name"] }
     如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:
         ${sessionScope.user[data]}中data 是一个变量
3)变量
     EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为
username的变量。
     因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、
Application范围查找。
     假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,
就回传null。
     属性范围在EL中的名称
         Page         PageScope
         Request         RequestScope
         Session         SessionScope
         Application     ApplicationScope
4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码.
2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}.
${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组
值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话
范围内的变量.applicationScope表示应用范围的变量.
3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁
止.JSP2.0中默认的启用EL语言.
             4-- EL语言可显示 逻辑表达式如${true and false}结果是false     关系表达式如${5>6} 结
果是false     算术表达式如 ${5+5} 结果是10
             5--EL中的变量搜索范围是:page request session application   点运算符(.)和"[ ]"都是
表示获取变量的值.区别是[ ]可以显示非词类的变量

2、EL隐含对象
1)与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和
applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得
其他相关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
     session.getAttribute("username") 取得username的值,
在EL中则使用下列方法
     ${sessionScope.username}
2)与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
     request.getParameter(String name)
     request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
     ${param.name}
     ${paramValues.name}

3.其他隐含对象
1)cookie
JSTL并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}     来
取得它。
2)header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得
这些值。
3)initParam
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
     可以使用 ${initParam.userid}来取得名称为userid
4)pageContext
pageContext取得其他有关用户要求或页面的详细信息。
     ${pageContext.request.queryString}         取得请求的参数字符串
     ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串
     ${pageContext.request.contextPath}         服务的web application 的名称
     ${pageContext.request.method}           取得HTTP 的方法(GET、POST)
     ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0)
     ${pageContext.request.remoteUser}         取得用户名称
     ${pageContext.request.remoteAddr }         取得用户的IP 地址
     ${pageContext.session.new}             判断session 是否为新的
     ${pageContext.session.id}               取得session 的ID
     ${pageContext.servletContext.serverInfo}   取得主机端的服务信息
   4) 条件标签>
1.算术运算符有五个:+、-、*或$、/或div、%或mod
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
     例:${empty param.name}、${A?B:C}、${A*(B+C)}
5) EL函数(functions)
语法:ns:function( arg1, arg2, arg3 …. argN)
其中ns为前置名称(prefix),它必须和taglib 指令的前置名称一置
       6) 补充:
<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt" %>
FOREACH:
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>
OUT:
<c:out value="/${logininfo.username}"/>
c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的
username属性值输出到页面当前位置。
${……}是JSP2.0 中的Expression Language(EL)的语法。它定义了一个表达式,
其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中
的情况)。典型案例如下:
? ${logininfo.username}
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引
用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]}
与${logininfo.username}达到了同样的效果。
“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,
此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免
这一现象的出现)。
与之等同的JSP Script大致如下:
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到,EL大大节省了编码量。
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于
${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是
否定义了变量logininfo,如果没有找到则依次到Request、Session、
Application 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的
变量,则返回null.
如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围:
${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放
置到HttpServletRequest 对象中返回(具体实现可参见Spring 源码中
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes方法的实现代码),也就是说Spring
MVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下寻址方法应慎用:
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1+2}
结果为表达式计算结果,即整数值3。
? ${i>1}
如果变量值i>1的话,将返回bool类型true。与上例比较,可以发现EL会自
动根据表达式计算结果返回不同的数据类型。
表达式的写法与java代码中的表达式编写方式大致相同。
IF / CHOOSE:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
判定条件一般为一个EL表达式。
<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的:
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。其
中<c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
经验:1、如果EL表达式无法解析:– <%@ page isELIgnored="false" %>

一、           JSTL

1、EL运算符>;
       2)var指定变量,并把EL运算结果赋值给该变量值为true/false;
       3)scope:指定 var变量的范围;


6、迭代标签
语法:<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“
end=”int” step=“int” >
           //循环体
           </c:forEach>
     说明:1)items:是集合,用EL表达式;
       2)var:变量名,存放items
       3)varStatus: 显示循环状态的变量
①index:从0开始;
                     ②count:元素位置,从1开始;
                     ③first:如果是第一个元素则显示true;
                     ④last:如果是最后一个元素则显示true;
       4)begin:循环的初始值(整型);
       5)end: 循环结束 ;
       6)step:步长,循环间隔的数值;
7、<c:otherwise>标签
     例:
如果user.wealthy值true,则显示user.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
说明:只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and
user.stingy are false.
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>、
<c:when>和<c:otherwise>标签共同来完成了。
8、c:forTokens>标签
说明:  
items 进行循环的项目 是 无
delims 分割符 是 无
begin 开始条件 否 0
end 结束条件 否 集合中的最后一个项目
step 步长 否 1
var 代表当前项目的变量名 否 无
varStatus 显示循环状态的变量 否 无
例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,
token是循环到当前分割到的字符串。
9、<c:redirect>标签
     说明:标签将请求重新定向到另外一个页面,它有以下属性 属性 描 述 是否必须 缺省值
url url地址 是 无
context /后跟本地web应用程序的名字 否 当前应用程序
例子:
<c:redirect /'>http://www.yourname.com/login.jsp"/>
将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect
("http://www.yourname.com/login.jsp");
10、<c:param>标签
     说明:<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 性 描 述 是否
必须 缺省值
name 在request参数中设置的变量名 是 无
value 在request参数中设置的变量值 否 无
例子:
<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>
将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888
11、<fmt:>格式化标签
     说明:需要导入   <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
      1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
               Value:通过EL表达式或<%new Date() %> 取的日期值;
               Pattern:输出的日期格式;                      

    2) 格式化数字<fmt:formatNumber
value="${n}" pattern="###,###.##" />

posted @ 2010-07-02 11:41 justjavac(迷渡) 阅读(890) | 评论 (0)编辑 收藏
<!-- --> 这样是行注释的。也可以用作多行。。但是 可能有些浏览器 不支持CSS的 则跳过 <!-- --> 里面的内容继续执行。。
/* */ 是 块注释的

jsp 注释 // <!-- --> 已测试

HTML 注释 <!-- -->    已测试,有的说这个/* */也能,但我试了好几次它还是显示

asp 注释 '   已测试

css 注释 <!-- -->   /* */

java 注释 //     /* */     /**   */     已测试
posted @ 2010-07-02 11:38 justjavac(迷渡) 阅读(128) | 评论 (0)编辑 收藏

1.你可以打开一个窗口然后点击,工具—文件夹选项—查看—显示所有文件夹
选择所要文件,右键属性,将“隐藏”前面的勾去掉就可以。
还有另外一种方法,就是在开始-程序-附件-命令提示符下用dir -a 查看就可以看见隐藏的文件,
然后你再用Attrib -s -h -r “路径和文件名”其中-s 表示减去系统属性 -h 表示减去隐藏属性 -r 表示减去只读属性。
另外你如果愿意的话还可以为文件加上以上的属性,把-号变成+号就可以了。

2.选择“工具→文件夹选项→查看→显示所有文件和文件夹”,点确定。本来应该就把隐藏的文件显示出来的,但是隐藏的文件并没有显示出来,重复上次操作发现“查看”中“隐藏文件和文件夹”一栏中它自动又跳为“不显示隐藏文件和文件夹”这让我很苦恼,因为我因此找不到我所有已经设置为隐藏的文件……

解决方法有三:
a.
   运行regedit,找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL],将CheckedValue的值改为1

b.
   将下面的内容复制到记事本,保存为reg的注册表信息文件,然后双击导入:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001

c.
   如果操作后还是无法显示隐藏文件,可以复制下列内容到记事本中,另存为一个reg文件,然后双击运行即可。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDDEN]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30501"
"Type"="radio"
"CheckedValue"=dword:00000002
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51104"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51105"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden]
"Type"="checkbox"
"Text"="@shell32.dll,-30508"
"WarningIfNotDefault"="@shell32.dll,-28964"
"HKeyRoot"=dword:80000001
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"ValueName"="ShowSuperHidden"
"CheckedValue"=dword:00000000
"UncheckedValue"=dword:00000001
"DefaultValue"=dword:00000000
"HelpID"="shell.hlp#51103"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy\DontShowSuperHidden]
@=""


说明:
       将选项 CheckedValue 的值改成 0 然后再将系统属性设置成不显示隐藏文件,这样,你隐藏的文件就彻底隐藏了,即使显示全部文件,你隐藏的文件也不会显示的。不仅如此,电脑里面所有隐藏文件将全部不被显示。如果需要显示,只要将选项 CheckedValue 的值改成 1 ,再将系统属性设置成显示全部文件即可。

3.问题:
          我使用的是Windows2000系统,我把"文件夹选项"中的"查看"设为"不显示隐藏的文件和文件夹"时,电脑上隐藏的文件反而能看见,设为"显示所有文件和文件夹"时,这些文件反而隐藏了,这是怎么回事?

解决:
     在运行中输入regedit,打开注册表编辑器.定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDORSYS,将CheckedValue设置为0;再定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL,将CheckedValue设置为1即可。

posted @ 2010-07-02 11:36 justjavac(迷渡) 阅读(131) | 评论 (0)编辑 收藏
  <一>
你不会有那美丽的相逢,除非之前,你能忍受等待的孤独.
你不会有那明朗的清晨,除非之前,你的睡梦能忍受黑夜的迷雾。
你也不会赢得任何东西,除非你敢于投下赌注.
赌注,生命的赌注,就是你的脚步!
但是你不会找到路,除非你敢于迷路.
因为,只有让你迷路的地方,才是你真正的出路!


<二>
有多少次此刻的离别,就有多少次彼时的相逢.
有多少次此刻的酒醉,就有多少次彼时的痛醒.
所以你应该理解一个人的沉默,就是一个人最多的话语.
你也应该理解一个人的忧伤,之所以忧伤,一定是因为他不肯舍弃某些快乐.


<三>
暖一壶茶,在寒冷的冬季里,让温气升腾,但朋友,别忘了,除了炉火,还有那寒风赐予了这壶茶以温度.
我相信,最温暖来自寒冷.我相信,最温暖,其实是对寒冷的一种谅解.


<四>
生命确实有两层-----
一个浪打礁石,海鸟惊逃,以为是一次谋杀,
一个浪扑上海滩,孩子欢喜,以为是大海开出了鲜花.
同样的事物,有不同样的感受.
所以世界是什么样的,并不重要,重要的是生命的心灵。
世界往往是什么样子,往往取决于你的心灵是什么样子.
莫要过分误解这个世界,请先看看自己的心灵的模样.


<五>
爱的方式有许多种,
而爱是一种动机,爱的动机是诚实而纯洁的,
但爱的方式却不可靠。
即使你有爱,你爱着,可你爱的方式是否避免着偏执---
朋友,请不要采摘那些花朵,除非你能保证,一起搬走整个森林的田野   >>>>>>查看
posted @ 2010-07-02 11:34 justjavac(迷渡) 阅读(138) | 评论 (0)编辑 收藏
        当母亲带着疲惫的微笑将你捧给世界,你已经是一座高山,是一片大海了。性别交给你一副重担,指给你一条路,对你说:走吧,你这男子汉!于是你便要长一副铮铮铁骨,把脚下坚实的土地踏得咚咚作响,去完成你的使命、你的光荣、你的答卷。

        当洪水涌来的时候,你要退在最后;当大火燃烧的时候,你却要扑在前边。因为你是男人,你就应该有一副侠肝义胆!

        当朋友成功的时候,你要大碗喝酒;与女友分手时,要真诚地说声道歉。因为你是男人,你就应该如此气壮心宽。

        因为你是男人,所以,对女儿你应是一棵结满故事的大树,对妻子你应是一片金色的沙滩,对父母更该是一座物产丰富的大山。

        因为你是男人,一生就要有所成就。不懒惰,不侥幸,不虚荣,不欺骗,不流泪,不妒嫉,不后悔,不自卑,不献媚,不投机,不唯利是图,不 抱怨,男人就应该堂堂正正、磊磊落落、风度翩翩。

        做个好男人也是一项事业啊。一个民族仅有女人的光荣是不够的,阴盛阳衰对每个男人来说都应该觉得行秽自惭。

        也许你很矮,但好男人博大的胸怀才情会使你顶天立地;也许你很弱,但好男人坚定的意志品格将赋予你狭义铁肩;也许你恶疾缠身,但好男人的字典里根本没有伤残。

        男人,光荣的性别。这光荣的全部内涵就在于去承担责任和义务做出牺牲和奉献。做个好男人吧!你别无选择,因为你已经是个男人了。    >>>>>>>查看
posted @ 2010-07-02 11:33 justjavac(迷渡) 阅读(149) | 评论 (0)编辑 收藏

厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上 
二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一 
厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上 
二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一 
厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上 
二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一 
厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上 
二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一 
厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上 
二本与半卉一十士廿卞广下厂下广卞廿士十一卉半与本二上旦上二本与半卉一十士廿卞广下厂下广卞廿士十一

posted @ 2010-06-30 17:17 justjavac(迷渡) 阅读(86) | 评论 (0)编辑 收藏
这篇草稿是菊子曰为了获取您的博客模板而准备的。由于某些未知的状况,菊子曰无法自动删除这篇草稿,请您手动删除它。{ADB54AEF4FCF7388}
posted @ 2010-06-30 14:51 justjavac(迷渡) 阅读(68) | 评论 (0)编辑 收藏
题目:以07洞庭湖鼠灾为背景,要以田鼠的口吻或者田鼠天敌的口吻给人类写一封信,八百字以上。 叽叽和喵喵 田鼠写信—— 叽叽叽叽叽 叽叽叽叽叽叽,叽叽叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽。叽叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽叽叽。叽叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽叽。 叽叽叽叽叽叽,叽叽叽叽叽叽叽;叽叽叽叽叽,叽叽叽叽叽叽叽;叽叽叽叽叽,叽叽叽叽叽叽叽。叽叽叽叽叽,叽叽叽叽叽叽叽叽叽,叽叽叽叽叽叽叽。叽叽叽叽叽叽,叽叽叽叽叽 ... [阅读全文]

已有 3 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-05-12 23:22 justjavac(迷渡) 阅读(51) | 评论 (0)编辑 收藏
题目:“细雨湿衣看不见,闲花落地听无声”是唐朝诗人刘长卿在《别严士元》中的诗句。曾经有人这样理解这句诗: 1、这是歌颂春天的美好意境。 2、闲花、细雨表达了不为人知的寂寞。 3、看不见、听不见不等于无所作为,是一种恬淡的处世之道。 4、这种意境已经不适合当今的世界…… 根据你的看法写一篇作文。题目自拟,体裁不限。字数800以上。 盛夏,夜,深夜。 景山山颠。 山上有人,两个人,一男一女。 这两人就是当今武林名声最响的两位杀手,男的名秋细雨,女的叫叶闲花,江湖人称“细雨闲花”。 ... [阅读全文]

已有 41 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-05-12 23:11 justjavac(迷渡) 阅读(110) | 评论 (0)编辑 收藏
      如果你在一个平凡的家庭长大,       如果你的父母还健在,不管你有没有和他们同住——        如果有一天,你发现妈妈的厨房不再像以前那么干净;    如果有一天,你发现家中的碗筷好象没洗干净;         如果有一天,你发现母亲的锅子不再雪亮;            如果有一天,你发现父亲的花草树木已渐荒废;         如果有一天,你发现家中的地板衣柜经常沾满灰尘;               如果有一天,你发现母亲煮的菜太咸太难吃;   ... [阅读全文]

已有 11 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-05-02 10:48 justjavac(迷渡) 阅读(51) | 评论 (0)编辑 收藏
一、孔子的生年、籍贯、家世     孔子名丘,字仲尼。生于周灵王二十一年(鲁襄公二十二年),即夏历庚戌年八月二十七日,西元前551年9月28日。本人主张按照夏历来确定孔子诞辰。     《公羊传》说:“襄公二十一年十有一月,庚子,孔子生。”《谷梁传》:“襄公二十一年,冬十月,庚子,孔子生。”《世本》:“襄公二十二年,冬十月,庚子,孔子生。”《史记·十二诸侯年表》:“襄公二十二年,孔子生。”孔广牧《先圣生卒年月日考》:年从《史记》,月从《谷梁》,日从《公羊》《谷梁》。成蓉镜《经 ... [阅读全文]

已有 1 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-04-02 19:28 justjavac(迷渡) 阅读(61) | 评论 (0)编辑 收藏
写道 一人去买香蕉,1元1斤,他想买100斤。 他问老板:“分开卖不卖,就是说将香蕉肉和香蕉皮分开,每斤0.5元,香蕉肉和香蕉皮各按50斤,我全都要,这样好不好。” 老板想了想,答应了。 于是他给了老板50元钱。 老板说:“不对啊,1元1斤,100斤应该是100元钱啊!” 这人回答道:“怎么不对,香蕉肉是50斤,共0.5 X 50 = 25元,香蕉皮共0.5 X 50 = 25元,一共是50元啊。“ 问题出在哪里?   [阅读全文]

已有 4 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-03-16 19:55 justjavac(迷渡) 阅读(47) | 评论 (0)编辑 收藏
写道 有三个人去住旅馆,住三间房,每一间房10元,于是他们一共付给老板30元, 第二天,老板觉得三间房只需要25元就够了于是叫小弟退回5元给三位客人, 谁知小弟贪心,只退回每人1元,自己偷偷拿了2元, 这样一来便等于那三位客人每人各花了9元,于是三个人一共花了27元,再加上小弟独吞了不2元,总共是 29元。 可是当初他们三个人一共付出30元,那么还有1元在哪里呢 ? [阅读全文]

已有 44 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-03-12 14:42 justjavac(迷渡) 阅读(67) | 评论 (0)编辑 收藏
(本帖改编自《科学美国人》杂志中IanStewart的《凶猛海盗的逻辑》)   海盗,大家听说过吧。这是一帮亡命之徒,在海上抢人钱财,夺人性命,干的是刀头上舔血的营生。在我们的印象中,他们一般都瞎一只眼,用条黑布或者讲究点的用个黑皮眼罩把坏眼遮上。他们还有在地下埋宝的好习惯,而且总要画上一张藏宝图,以方便后人掘取。不过大家是否知道,他们是世界上最民主的团体。参加海盗的都是桀骜不驯的汉子,是不愿听人命令的,船上平时一切事都由投票解决。船长的唯一特权,是有自己的一套餐具——可是在他不用时,其他海盗是可 ... [阅读全文]

已有 6 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-03-10 00:07 justjavac(迷渡) 阅读(184) | 评论 (0)编辑 收藏
写道  一天有个年轻人来到王老板的店里买了一件礼物, 这件礼物成本是18元, 标价是21元。 结果是这个年轻人掏出100元要买这件礼物, 王老板当时没有零钱, 用那100元向街坊换了100元的零钱,找给年轻人79元. 但是街坊后来发现那100元是假钞, 王老板无奈还了街坊100元. 现在问题是: 王老板在这次交易中到底损失了多少钱 ??      下一题(消失的一元钱)               [阅读全文]

已有 63 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-03-09 23:20 justjavac(迷渡) 阅读(46) | 评论 (0)编辑 收藏
孔子,名丘,字仲尼,春秋时鲁国人,圣人也。 南子者,卫灵公夫人也,春秋时卫国最著名的美人。 孔子见南子发生了什么?不得而知,无据可靠。历代文人对此事津津乐道,让人不由得产生很多遐想,“子见南子”遂成为史上有名的公案。 事情的经过是这样的,公元前496年,孔子56岁,刚刚辞去鲁国“大司寇”职务,到了卫国做官,但是有人向卫灵公打小报告,说孔子的坏话,孔子害怕获罪,辞官想到陈国去,在“匡”这个地方被误作阳虎而被抓,脱险后在一个叫“蒲”的地方呆了一个多月,后又返回了卫国。 ... [阅读全文]

已有 1 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-03-09 23:03 justjavac(迷渡) 阅读(45) | 评论 (0)编辑 收藏
MIT BBS 上说微软电话面试的一道题就是“Who do you think is the best coder,and why? ”。我觉得挺有意思的,也来凑个热闹。排名不分先后。Bill Joy, 前任Sun 的首席科学家,当年在Berkeley 时主持开发了最早版本的BSD 。他还是vi 和csh 的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD 的 ... [阅读全文]

已有 4 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-01-17 17:31 justjavac(迷渡) 阅读(41) | 评论 (0)编辑 收藏
写道 人生既是巧合, 巧合不会长久, 一朝西厢琴断, 岂能常相守? 昨天还是情人, 明天不再是朋友, 今天忍住眼泪。 让我们笑著分手。     [阅读全文]

已有 4 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-12-01 19:59 justjavac(迷渡) 阅读(45) | 评论 (0)编辑 收藏
爱是一种方法,   方法就是暂停。   把她放在遥远,   享受一片空灵。   爱是一种技巧,   技巧就是不浓。   把她放在遥远,   制造一片朦胧。   爱是一种馀味,   馀味就是忘情。   把她放在遥远,   绝不魂牵梦萦。   爱是一种无为,   无为就是永恒。   永恒不见落叶,   只见两片浮萍。   [阅读全文]

已有 2 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-12-01 19:56 justjavac(迷渡) 阅读(58) | 评论 (0)编辑 收藏
不爱那么多,   只爱一点点。   别人的爱情像海深,   我的爱情浅。   不爱那么多,   只爱一点点。   别人的爱情像天长,   我的爱情短。   不爱那么多,   只爱一点点。   别人眉来又眼去,   我只偷看你一眼。   [阅读全文]

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-12-01 19:55 justjavac(迷渡) 阅读(39) | 评论 (0)编辑 收藏
提高 JAVA IDE 的性能的JVM开关   JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关和非标准开关。其中一些设置可以提高 JAVA IDE 的性能。注意,由于 -X (尤其是 -XX JVM)开关通常是 JVM 或 JVM 供应商特定的,本部分介绍的开关可用于 Sun Microsystems J2SE 1.4.2。     以下设置在大多数系统上将产生比工厂更好的设置性能。 -vmargs - 表示将后面的所有参数直接传递到所指示的 Java VM。     -Xveri ... [阅读全文]

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-08-22 23:04 justjavac(迷渡) 阅读(71) | 评论 (0)编辑 收藏
在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重 量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比 较著名的大型库。 标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实 ... [阅读全文]

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-08-22 21:10 justjavac(迷渡) 阅读(41) | 评论 (0)编辑 收藏
最近看了一篇文章:     美国的勇气号登陆火星表面,NASA的科学家们正是通过Java这种程序语言来控制勇气号的。     从表面上看,科学家像玩Java游戏一样遥控勇气号,的确非常简单,实际上在SUN和NASA的网站提供一款名叫Maestro的软件供全球公众下载。从 2004年1月2日开始提供下载后,服务器不得不增加带宽,因为下载的人实在太多。这款软件可以让我们也像科学家一样,在火星上四处遨游,下载 在下载并安装完Maestro之后,还要去网站上升级,下载以前的以及最新的火星 ... [阅读全文]

已有 3 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-08-22 12:53 justjavac(迷渡) 阅读(48) | 评论 (0)编辑 收藏
写道 1.老师叫用更&&更&&更&&造句。偶同学写到安尔乐卫生巾更干、更爽、更安心。 2.一篇介绍老师的外貌。应该是老师有一张瓜子脸,偶写成老师有一张爪子脸。我们语文老师差点没疯掉。 3.我和同学某某某一起骑车出门玩,他的气门芯坏了,我就把我的拔下来给他装上,我俩一起高高兴兴骑车回家了。 4.运动会100米终于开始了,同学们像一只只脱缰的野狗奔了出去。 5.解放军叔叔一个个匍匐前进,就像一条条绿色的青虫在地上蠕动。 6.我因病故在教室里& ... [阅读全文]

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-08-20 23:40 justjavac(迷渡) 阅读(38) | 评论 (0)编辑 收藏
justjavac 写道 花开可要欣赏, 然后就去远行. 惟有不等花谢, 才能记得花红. 有酒可要满饮, 然后就去远行. 惟有不等大醉, 才能觉得微醺. 有情可要恋爱, 然后就去远行. 惟有恋的短暂, 才能爱得永恒。 [阅读全文]

已有 2 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-08-16 18:47 justjavac(迷渡) 阅读(48) | 评论 (0)编辑 收藏
  <一>   你不会有那美丽的相逢,除非之前,你能忍受等待的孤独.   你不会有那明朗的清晨,除非之前,你的睡梦能忍受黑夜的迷雾。   你也不会赢得任何东西,除非你敢于投下赌注.   赌注,生命的赌注,就是你的脚步!   但是你不会找到路,除非你敢于迷路.   因为,只有让你迷路的地方,才是你真正的出路!               <二>   有多少次此刻的离别,就有多少次彼时的相逢.   有多少次此刻的酒醉,就有多少次彼时的痛醒.    ... [阅读全文]

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-04-27 08:07 justjavac(迷渡) 阅读(50) | 评论 (0)编辑 收藏
一、引子          话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz 车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!          而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。下面就以 Java语言为基础来引入我们本 ... [阅读全文]

已有 3 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-04-09 20:43 justjavac(迷渡) 阅读(56) | 评论 (0)编辑 收藏
写道    一只壁虎迷了路,这时正好有一条大鳄鱼远远地爬了过来,准备要一口吃掉它,情急之下,小壁虎上前一把抱住了鳄鱼的腿,大声喊:"妈妈!"大鳄鱼一愣,立即老泪纵横:"儿啊,才做半个月程序员,咋就瘦成这样了........ [阅读全文]

已有 3 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2008-04-05 07:27 justjavac(迷渡) 阅读(44) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/169718  发表时间: 2008年03月10日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

菲利普·卡兹
  2000年4月14日,在美国威斯康星州密尔沃基的一家汽车旅馆里,人们发现了一具年轻人的尸体,检查得知这个人的死因是酗酒、饮酒过量导致的死亡。死者被发现的时候,手中还握着一个空酒瓶,房间中还有五个空酒瓶。这样一个酒徒的死也许在平时只是地方小报上的一条不起眼的新闻,但这个人的死却在互联网上掀起了轩然大波。无数人在网上发表评论与文章,纪念他的离开,寄托人们的哀思,因为他不是一个普通人,他叫菲利普·卡兹(Philip Katz),几乎全世界的每一台个人电脑上都有用他创造的压缩算法生成的文档,这种文档的后缀是“.zip”,这些文档的的开头都嵌有他姓名的字头缩写字母‘PK’。这位在全世界的电脑中留下痕迹的天才程序员终年仅37岁。
  在DOS时代就开始使用电脑的玩家可能都会记得,那时候的处理器速度与存储介质的容量与现在相比简直不可同日而语,为了COPY(拷贝)一个游戏我们常常要更换数张软盘。从那个时候起,我们认识了ZIP文件,在没有Windows的年代,使用字符界面和命令行方式压缩的程序主要有PKZIP和ARJ两种,直到过渡到Windows时代,WinZip的出现才使压缩软件的规格得到了统一。互联网上无数的文件都以“.zip”的格式进行存储,压缩文件使用户能在最短的时间里将文件从网上下载回自己的硬盘中,在没有宽带,连MODEM都仅仅是14.4K的速率的那个年代,ZIP文件为我们节省了大量的宝贵时间与金钱。但很少有人知道ZIP文件的由来,很少知道它的创造者菲利普·卡兹。
  在14年前,也就是公元1988年,那时候互联网还刚刚开始有了雏形,而最流行的是一种使用电话线拨号登陆别人在家里搭建的服务平台——交换信息的电子公告牌(BBS)系统。这种系统有些类似现在的论坛和新闻组,由于站长之间互相转信也成为了一个庞大的信息网络(惠多网)。老一点的玩家可能都有印象,在没有Internet的年代,中国大地上也曾有几十个这样的BBS存在,著名的字处理软件WPS的作者求伯君和CCED的作者朱崇君当年都是非常有名的个人站长。这种方式不但可以传递文本信息,也可以由用户上传文件到站点的计算机以供其他用户下载。由于电话线的接入速度慢的可怜,通过BBS传输较大文件实在是叫人痛苦的一件事。于是,使用文件压缩技术减小文件的体积并将多个文件压缩到一个封包中就成为了BBS用户的一项必须掌握的技巧。当时的美国BBS 上,比较流行的是一种叫做ARC的压缩技术,由于它是一家商业公司开发的压缩技术,使用这种软件进行工作是需要付费的。那时候的菲利普·卡兹是一个沉迷于 BBS上的毛头小伙,由于经常混迹于BBS上,对于ARC的收费非常不满的他自己开发了一个程序叫PKARC,这个程序于ARC完全兼容,可以压缩和解压缩ARC文件。这样一来,大批的ARC用户自然转而使用菲利普·卡兹的免费软件。ARC的制作公司一怒之下将菲利普·卡兹告上了法庭,法庭自然判决菲利普 ·卡兹禁止继续开发和传播PKARC。这种判决并没有磨灭菲利普·卡兹的斗志,而是激起了他要与ARC斗争到底的决心。在虚拟的世界中,自由、平等永远是真正的程序员永久的追求。他放弃了PKARC的开发,发誓要写出一款比ARC更好的压缩软件来打败ARC。这一场官司造就了一名编程天才的横空出世,也造就了一个后来在互联网时代的文件标准。几周以后,后来统治整个BBS世界乃至Internet世界的ZIP在菲利普·卡兹手中发出了第一声响亮的啼哭!
不名则已,一鸣惊人,这种名为PKZIP的程序可以将一个或多个文件压缩到一个后缀为“.zip”的文件中,无论从压缩比、压缩速度方面都超过了商业软件 ARC。卡兹将PKZIP作为自由软件免费发放,使其如同草原上的星星之火般在全美的各大BBS上蔓延开来,用户以几何级数的增长,各大BBS的站长自发将原来使用ARC格式压缩的文件转换成ZIP格式,卡兹用他天才的头脑和顽强的毅力堂堂正正的击败了ARC,ARC的制作公司在PKZIP的强大攻势下很快就消声匿迹了。用自由软件打败商业公司的传奇故事很快传遍了整个BBS世界,疾恶如仇而又身手不凡的菲利普·卡兹如同数字世界的大侠般仗剑江湖,劫富济贫,以一人之力擎起了压缩软件的大旗。这段被人们津津乐道的传奇故事使菲利普·卡兹成为了很多热衷于编程的年轻人心中的偶像。此后卡兹一直继续着对 PKZIP的开发和维护工作,PKZIP建立和统治了DOS时代的压缩标准。直到Windows的诞生,使用卡兹创造的压缩算法的软件Winzip的出现更使ZIP格式成为Internet的传输标准,ZIP压缩格式也成为压缩文档的事实标准。试问当今的电脑用户,谁敢说自己的电脑中没有ZIP文件?
可惜,这位天才程序员却从未在ZIP身上得到半点好处,坚持信念的结果往往是潦倒的生活,糟糕的个人生活和长期编写软件的巨大压力使卡兹染上了酗酒的恶习,最终断送了他那年轻的生命。他为世界贡献了一个伟大的免费软件,更为重要的是他缔造了一种大众化的压缩格式,然而却过早地离开了这个世界。他的名字也许多年后会被人们忘怀,但他创造的ZIP将在网上生生不息的流传,他的名字缩写嵌在了全世界数以千万的电脑中,他的传奇故事将永远流传……

 


本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/169718
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(753) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/169737  发表时间: 2008年03月10日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

1.公元1998年在我讀高二那年,那还是我用Windows 98的时候有次我系统崩溃了,
因为我那时还是个电脑白痴,我同学帮我介绍了一个电脑高手来帮我修电脑。

他看了一下电脑,问我有没有Windows 98 的光盘?,我说没有。

他想了一下,叫我把家里电话拿给他,我心里想说修电脑要电话干什么?

但人家是电脑高手,我也不好意思说什么,就把电话拔下来给他了。

他把 电话线空着的一头接在主机版的一个插孔内 ,然后进入了 DOS ,

然后就开始在电话上不停的按着键,他按键的速度非常快,但是他都只按电话的0,1两个键。

我搞不懂这有什么用?但也不敢问,看了半个多小时,他还是不停的按这两个键,

我渐渐的有些困,我问他这东西要搞多久?他说还要几个小时,我给他倒了杯咖啡,

就一个人去隔壁书房睡觉了。

醒来的时候,一看已经过了5个多小时,我起身到隔壁,看见他正在 Windows 98 里面调试,

过了一会儿,他说,你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,

谢过人家就走了。

后来我慢慢对电脑有了一些概念才了解到,

原来当时那位电脑高手是使用机器语言 编了一个Windows 98系统

从我给他的电话直接输入到硬盘,

我后来问我同学那位高手的下落,我同学说前几年去了 美国 之后,杳无音讯....

2.公元2000年在我讀大一那年,那还是我用Windows Me的时候有次我系统崩溃了,
因为我那时还是个电脑入门,我朋友帮我介绍了一个电脑高手来帮我修电脑。
  
他看了一下电脑,问我有没有Windows Me 的安装盘?我说没有。
  
他想了一下,叫我把一张 空的DVD刻录盘和一根奈米细针 拿给他,

我心里想说修电脑要刻录盘和奈米细针干什么?但人家是电脑高手,我也不好意思说什么,

於是我就把DVD刻录盘拿一张来给他了。
  
他把奈米细针头对着刻录盘戳,他戳的速度非常快,但是只戳深或浅,

我搞不懂这有什么用?但也不敢问,看了半个多小时,他还是不停的戳着DVD刻录盘,

我渐渐的有些困,我问他这东西要搞多久?他说要几个小时,我给他倒了杯 葡萄酒 ,

就一个人去隔壁客厅沙发上睡觉了。
  
醒来的时候,一看已经过了6个多小时,我起身到隔壁,看见他正在 Windows Me 里面调试,

还装上了 Office、Photoshop、迅雷、魔兽世界 等软件……过了一会儿他说,

你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
  
后来我慢慢对电脑有了一些基础,终于明白了,

原来当时那位电脑高手是用 奈米细针头刻了一个单面双层的DVD ,在里面刻上了Windows Me、Office、

Photoshop、魔兽世界的安装程序 ,我后来问我朋友那位高手的下落,

我朋友说前几年去了 法国 之后,杳无音讯....


3.公元2001年在我讀大二那年,那还是我用Windows XP的时候有次我不小心把D盘格式化了,
因为我那时还是个电脑新手,我亲戚帮我介绍了一个电脑高手来帮我的电脑D盘恢复数据。
  
他看了一下电脑,问我有没有Windows XP备份过的Ghost? 我说没有。
  
他想了一下, 叫我把一块奈米强力磁铁棒拿给他,还问我D盘里有什么东西?

我心里想说修电脑要奈米强力磁铁棒干什么?

但人家是电脑高手,我也不好意思说什么,就把奈米强力磁铁棒给他了,

还告诉他我的D盘里面全是火影忍者的动画。
  
他把整颗硬盘拆了,用奈米强力磁铁棒在盘子上面画圈圈,他画圈圈的速度非常快,

但是他的奈米强力磁铁棒好像有碰到又好像没有碰到,我搞不懂这有什么用?但也不敢问,

看了半个多小时,他还是不停的在硬盘上画着圈,我渐渐的有些困,

我问他这东西要搞多久?他说要几个小时,我给他倒了杯 蘇格蘭威士忌 ,

就一个人去隔壁房间睡觉了。
  
醒来的时候,一看已经过了7个多小时,我起身到隔壁,看见他正在D盘里面调试,

里面全是 火影忍者的动画片 ,过了一会儿,他说,

你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
  
后来我慢慢对电脑有了一些体会,终于体悟到,

原来当时那位电脑高手是 用奈米强力磁铁棒直接在硬盘上写数据 ,

他凭着惊人的记忆力将他曾经看过的火影忍者动画片数据都写入了硬盘,我后来问我亲戚那位电脑高手的下落,

我亲戚说他前几年去了 英国 之后,杳无音讯....


4.就在最近,我刚装上的Vista突然自己崩溃了
就在最近,我刚装上的Vista突然自己崩溃了,虽然我会写很多程序,但是Vista崩溃了我也没

有办法,我朋友给我介绍了一个高手来帮我修电脑。

他看了一下电脑,问我有没有Vista的安装盘 ,我说没有。

他想了一下,叫我拿一根没用的网线和一把剪刀,我想修电脑要网线和剪刀干什么,但人家

是高手,我也不好说什么,就拿了一根没用的网线和一把剪刀 给他。

他把网线一头戳到网卡上,剪断另外一头,然后就在哪里不停的拨弄那八根线。他拨弄的速

度非常快,但是拨弄得线总是不一样,我搞不懂这有什么用,但也不敢问,看了半个多小

时,他还是不停的拨弄着网线。我渐渐的有些困,我问他这东西要搞多久,他说要几个小

时,我给他倒了杯 茶 ,就一个人去隔壁睡觉了。

醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在 Vista 里面调试,还装给

装好了 Visual Studio 2005 Team Suit、Ms SqlServer 2005 Enterprise Edition、BT ,还边

下载边看 American片 ……过了一会儿,他惊觉我站在后面,不好意思地对我说,你试试。我

坐上椅子用了一下,真的好了,我当时太震惊了,整个人傻在哪里,谢过人家就走了。

后来我读到了前面那两篇文章,终于醒悟,原来当时那位高手是 用网线模拟网络启动,下载

了整个Vista,还有 Visual Studio 2005 Team Suit、Ms SqlServer 2005 Enterprise Edition、

BT,以及他正在看的 American片 ,我后来问我朋友那位高手的下落,我朋友说前几年去了

美国 之后,杳无音讯了十几年,期间也回过中国两次,最近这一次回来说,干这个太没意思

了,回来收拾收拾准备去 阿尔法半人马座 ,他说他也听不懂那高手说什么,只是最近传闻 微

软的Vista 全世界都无法激活,估计跟他的离去有关,当然了,这几天也是杳无音讯....
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/169737
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(94) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170045  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

在一家又一家注定要倒闭的dot-com公司工作过之后,一位名叫Bram Cohen的年轻程序员最终厌倦了这种失败的生活。

  “最终我认为我想做一些人们会实际用到的、有用的并且有趣的项目。”他回忆到。

  3年后,28岁的Cohen成为了下一波互联网文件共享风潮的掌门人。如果说Napster是文件交换的第一浪,像Kazaa这样的文件交换网络则代表了第二浪。那么,由Cohen开发的BitTorrent将会引领文件交换的第三浪——目前BitTorrent实际的用户难以估量,但是BitTorrent这个软件至少被下载了超过1000万次。

  在早期形式的文件交换网络被唱片业穷追猛打以致步向衰落的同时,像BitTorrent这样的新技术的出现,使得用于视频的大文件的共享和分发变得更加容易。例如,光是suprnova.org这样的一个网站,就能提供上百套电视节目、最新电影以及版权软件。这甚至令到一向在打击互联网文件交换中不太积极的电影工业也开始提高警惕。

  然而,Cohen对他所创造的这个系统早已经失去了控制。他表示,当他开发这个系统的时候,大规模的侵犯版权问题是他没有想到的。相反,他开发这个系统的初衷,是为了使人们在购买合法在线音乐时,不需要再经历那漫长的等待。“很明显,他们的问题在于没有足够的带宽来满足人们的需要。”Cohen在接受采访时称,“我很清楚,实际上有很多的带宽摆在那里,但是它没有被恰当的使用。还有许多上传容量是人们没用到的。”

  这就是BitTorrent背后的本质。在像Napster和Kazaa这样旧有的文件共享系统下,实际上只有一小部分人把文件向世人分享,大部分用户都只是简单地下载。然而BitTorrent则使用了所谓的Golden Rule原理:你上传的速度越快,你下载的速度就越快。BitTorrent把文件分割成许多小块,当一个用户下载了某一小块时,它就会立即把这一小块上传给其它用户。因此,所有的用户在下载的同时,也在把自己已下载部分上传给他人。BitTorrent的这种工作原理,使得做“种子”的用户只需少许带宽,就可以把大文件共享给大量的下载者。

  BitTorrent对于Cohen来说,一直是一种脑力训练而不是一种赚钱的途径。不像其它文件交换程序,BitTorrent不但是免费的,而且还是开源的。这意味着只要有足够能力,你完全可以把BitTorrent融入到你自己的程序里面。

  BitTorrent的第一个可用版本出现在2002年10月,不过这个版本还有许多要改进的地方。然而,Cohen此时却在为生计发愁。幸运的是,BitTorrent引起了著名免费软件企业家John Gilmore的注意。Gilmore帮助Cohen解决了部分的生活费用,使得BitTorrent免遭夭折。

  BitTorrent真正流行起来是在2003年初,它被用来发布一个新版的Linux。与此同时,还有一些日本卡通的fans凭籍它来共享动画片。

  很难衡量BitTorrent的总体使用情况。但是Internet2主干网基础构造的主管Steven C. Corbato表示,他在去年5月份开始就注意到,BitTorrent的流量开始激增。从10月份开始,BitTorrent的流量更是超过了这个超高速网络总体流量的10%。与之对比,其它的文件交换系统的流量没有一个能超过Internet2总体流量的1%。Internet2又称Abilene主干,它连接起了美国200多所规模最大的大学,速度比现时的ADSL要快3500多倍。

  尽管BitTorrent获得了如此巨大的成功,然而直到几个月前,它并没有为Cohen带来过一分钱。“去年9月份我没有一丁点钱,”Cohen回忆到,他当时只好利用这张信用卡的免息期来透支,填补另一张信用卡的帐单来过活。

  Cohen那时并不知道,BitTorrent会为他带来一份工作。某天,他的事情为Valve软件公司的常务董事Gabe Newell所获悉。尽管Valve正在开发令游戏玩家望眼欲穿的Half-Life 2,但是它同时也在建立一个名为Steam的在线分发网络。由于Cohen掌握这个领域的专门技术,所以Valve为他提供了一个职位。Cohen从十月份起搬到西雅图,开始了他的工作。

  一直以来,Cohen都有通过他的网站bitconjurer.org来接受BitTorrent用户的捐款,但是这笔金额一直很少。然而从10月份开始,Cohen父亲鼓励他请求的更直接一点。如今,Cohen称,他每天都能收到上百美元的捐款。

  “在过去的几个月,我的生活方式发生了相当戏剧性的变化,获得工作还有捐款的到来,”Cohen说,“这好极了。”

  根据Pew Internet和American Life Project的调查数据显示,文件交换正在衰落,这显然是唱片业起诉运动的结果。在去年5月,29%美国的成年互联网用户表示他们参与了文件交换。而到了11月和12月份,这个数字已经跌到了14%。但是,BitTorrent的忠实用户——无论是卡通狂热爱好者、Linux用户、盗版电影的观赏者——似乎在不断增加。

  BitTorrent的用户中有不少人对Cohen心怀感激,但是毫不奇怪,电影工业的圈内人不在此列。“BitTorrent决对是处在我们的雷达防线以内。”美国电影协会的主管Tom Temple在一次电话访问中表示。BitTorrent的迅猛普及,促使该协会开始向BitTorrent站点的管理人发出了侵权通知。

  “我们正在调查大量的BitTorrent链接网站,在不久的将来我们可能会向某些站点提出民事或刑事起诉。”Temple称。

  对此,Cohen指出,BitTorrent的用户是非匿名的,他们的互联网IP地址很容易就能被看到。“这令我很吃惊,像Suprnova这样的网站竟然能够继续生存,因为他们很容易就会被起诉。”Cohen称。Cohen还补充说,使用BitTorrent来进行非法交易,是“很愚蠢的,因为它不是匿名的。而且由于基层结构的关系,它也不能被改成匿名的。

  这就是说,Cohen并不支持许多BitTorrent站点的做法。

  “我不打算拿出傲慢的态度,告诉其它人不该怎么做,因为斥责他人的事情与我无关。”他说,“我是以那种找乐子的心态来看待这件事的。”
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170045
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(70) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170048  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

Anders Hejlsberg,丹麦人,曾在丹麦科技大学学习工程学。Anders Hejlsberg第一次登上软件界历史舞台是在80年代早期,因为他为MS-DOS和CP/M设计了一个Pascal编译器。当时,还是一个小公司的Borland很快雇用了他,并买下了他的编译器,改称Turbo Pascal。在Borland,Hejlsberg继续开发Turbo Pascal,并最终带领他的小组设计了Turbo Pascal的替代品、开发工具史上的奇迹:Delphi语言。

  1996年,Anders Hejlsberg在Delphi3发布前离开Borland去了MS。

  在此之前,MS曾多次企图挖走Anders, 但都没有成功。据信anders去MS(主要)不是钱的问题,虽然MS的开价也相当有吸引力: 130万美元年薪外加股票期权和分红,总计超过300万美元。更主要的原因是Anders和Delphi开发组的其他成员在修改编译器的问题上发生了争执;还有,据Borland内部人讲,Anders认为自己不再是“不可缺少的人”。

  Anders在Delphi3中几乎没有做什么工作,Chuck Jazdzewski扮演了一个更重要的角色。(--Anders Ohlsson) Anders在Borland时把所有精力都放在了Pascal产品上,也需要新的挑战,这时Bill Gates的亲自邀请,许诺给与挑战的机会,Anders加入了Microsoft就势在必行。

  Microsoft 用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后,Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼虽然最终以 Borland 的胜利而收场;但Anders 已经在为Microsoft工作了。
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170048
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(115) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170051  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

40年前,一个寒冷的冬天,在加拿大一个村庄里,Gosling家的第一个男孩哇哇落地了。家人给他起了名字,叫James。谁也没有想到的是,长大之后,他成为了一个改变计算机语言的天才。

  James Gosling从小就喜欢技术,爱鼓捣东西。12岁的时候,他用报废的电话机和电视机中的部件做了一台电子游戏机。附近农民的康拜因(联合收割机)出了问题也常常找他修理。14岁的时候,中学组织到附近大学参观,他记住了大学计算中心的门锁密码,从此开始偷偷地溜进计算中心,学习计算机编程。一年后,大学的天文系招他当了一名临时编程员,编写计算机程序来分析卫星天文数据。

  80年代初,James Gosling获得博士学位后到IBM工作,设计IBM第一代工作站。当时,IBM的领导层并不看重工作站项目。失望之余,James Gosling跳槽到了Sun公司。他花了五年功夫领导开发的和OS2很类似的Sun NeWs窗口系统,尽管得到技术界的好评,却未能变成流行的产品。当时他还第一个用C实现的EMACS的所见即所得文本编辑器COSMACS。

  在当今这个竞争激烈的软件开发时代,软件设计师一直在试图预测未来软件或者技术的发展趋势。在1990年,Sun公司成立了一个软件设计团队,其中除了James Gosling,还有Patrick Naughton和Mike Sheridan等人,他们合作的项目称为“绿色计划”。他们认为计算机技术发展的一个趋势是数字家电之间的通讯。James开始负责为设备和用户之间的交流创建一种能够实现网络交互的语言。随着大量的时间和金钱投入到“绿色计划”,他们创建了一种语言。这种语言一开始被叫做“Oak”,这个名字得自于Gosling想名字时看到了窗外的一棵橡树。但后来被改为了“Java”。并于1992年9月3日开始应用于Sun工作站的远程遥控。

  1994年底,James Gosling参加了在硅谷召开的“技术、教育和设计大会”。他报着试一试的心情向与会者演示了Java的功能。他点击了网页上的一个静止的分子结构图标,一条命令通过互联网送到了几百英里外的网站,下载了一段Java小程序,在本地工作站上开始执行。在几秒钟时间里,原本静止的网页上,一个分子图像以三维动画的方式转了起来。

  “哇!”James Gosling听到了全场观众的赞叹声。

  不久后,硅谷最大的报纸《圣荷西信使报》在头版刊登了一篇专文,“为什么Sun认为一杯热咖啡能让你鼓足精神”。从文章见报开始,负责Java市场人员的电话响个不停。不久,全美的主要报刊杂志都刊登了Java的报道。

  Java出名了!

  到了2000年,Java已经成为世界上最流行的电脑语言。绿色小组当初设计Java是为了面向数字家庭,支持各种家电设备。他们没有想到的是,Java支持的计算模式,实际上就是互联网的模式。

  对于Java语言的巨大成功,没有人比James Gosling 更加谦逊:“我从来没有想到Java技术将会这么火。当我的老板问我它将达到多少次下载时,我说 10,000 次。而他认为我太过乐观了。”

  James Gosling现在是Sun公司的副总裁和合伙人。
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170051
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(84) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170052  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯·沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。

  沃思1934年2月15日生于瑞士北部离苏黎世不远的温特图尔(Winterthur),其父瓦尔特是一位地理学教授。沃思小时就喜欢动手动脑,组装飞机模型是他的最大爱好。中学毕业以后,沃思进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),1958年取得学士学位。之后他远渡大西洋到加拿大的莱维大学深造(Laval是和加拿大名城魁北克隔圣劳伦斯河相望的一座城市),于1960年取得硕士学位。之后他又一次迁移,到美国加利福尼亚,进入加州大学伯克利分校,于1963年获得博士学位。

  学成以后,沃思受聘到斯坦福大学刚刚成立的计算机科学系工作。著名的斯坦福大学门槛极高,怎么会看中了这个来自欧洲小国的毛头小伙子呢?原来在20世纪50年代末、60年代初的情况下,沃思的计算机经验和成就相当引人注目:在苏黎世工学院时,他曾听过瑞士的计算机先驱斯帕塞(A.P.Speiser,他曾出任IFIP的主席)的课,用过由斯帕塞开发的计算机ERMETH(虽然作为学生,机会并不多);在莱维大学时,沃思学了数值分析,用过 Alvac III E计算机(虽然这台计算机经常出故障而不能开机);在伯克利时,沃思先是有一台Bendix G-15计算机可用,后来又参加了为IBM 704开发 NELIAC语言编译程序器的科研小组。 NELIAC的全称是 Navy Electronics Laboratory International Algol Compiler,即美国海军电子学实验室国际 Algol编译程序语言,该语言用于数值计算和一些逻辑处理,其特点是用自己的语言写自己的编译程序,然后进行自编译,是一个类似于 Aled 58但具有开创性意义的语言。沃思在撰写博士论文时,Algol 60报告已经发表。 这是第一个清晰定义的语言,其语法是用严格公式化的方法说明的。当时已有一些学者认识到,清晰的规格说明对于可靠而有效的实现是必需的,但是并不充分:Aled 60报告中还存在一些缺陷和不足。

  沃思在和 Algol的设计者之一、荷兰人范·维京格尔藤(Andrian van Wijingaarden,他曾任阿姆斯特丹数学中心计算部主任,在开发Algol 68中提出了二级文法,又叫w文法以解决上下文有关这一难题。他曾启发1972年图灵奖获得者狄克斯特拉走上计算机科学之路)多次接触和讨论以后,决定对 Algol 60作进一步改进,并以此作为自己的博士论文课题。这就诞生了由沃思所设计的第一个语言——Euler。Euler虽然在实用性上考虑并不十分周到,但在学术上却非常优美,为编译器的系统设计创造了一个很好的基础。此外,它还对 Algo 60进行了若干扩充,主要是增加了表处理能力。正是由于以上原因,斯坦福大学看中了沃思。与此同时,IFIP也注意到了Euler语言,决定吸收沃思参加对Algol语言进行完善与扩充的工作小组。当时,这个小组中有两派,一派主张设计一个新语言,以便树立一个新的里程碑;另一派则觉得时间太紧,主张对 Algo 60进行适当扩充。沃思参加进去以后,自称同时属于这两派,并提交了一份建议书。这份建议书经过霍尔(Tony Hoars)等人的修改、完善以后获得通过,这就是Aigol W(W是沃思名字的首字母)。

  第二年,也就是1966年,Algol W在斯坦福大学的第一台 IBM 360上成功实现并正式应用。这中间还有一个小插曲:IBM 360当时只提供汇编语言和 FORTRAN语言,但沃思和他的学生都觉得这两者并不适宜于作为设计编译器的工具。于是,沃思用了两个星期时间写出了一个用来描写Algol编译器的新的语言的定义,然后用了4个月时间在宝来公司的B-5000计算机上完成了交叉编译程序,而沃思的一个学生则把这个交叉编译程序移植到 IBM 360上去。这些额外的工作极大地加快了 Algol W编译器的开发,同时催生了一个新的语言 PL 360。 PL 360虽然是作为辅助工具而设计、开发的,但后来却在许多地方获得应用,取得了意想不到的成功。

  Algol W及 PL 360奠定了沃思作为世界级程序设计语言大师的地位,一举成名。但沃思是一个具有强烈爱国心的人,成名后的他谢绝了斯坦福大学的挽留,于1967年回到祖国,先在苏黎世大学任职,但第二年就回到他的母校苏黎世工学院。在这里,他首先设计与实现了 PASCAL语言(Philips Automatic Sequence CAlculator Language的缩写),这是在 CDC 6600上开发成功的。 PASCAL在数据结构和过程控制结构方面都有很多创造。对于前者,除一般的整型、实型、布尔型数据外,PASCAL还增加了字符型、子域类型、记录结构类型、文件类型、集合类型和指针类型;对于后者,除保留了无条件转移的GOTO语句外,又增加了if-then-else、case、while、repeat和for等多种控制结构,还允许复合语句和处理记录变量的分量使用with语句这种编写形式。可以说,现代程序设计语言中常用的数据结构和控制结构绝大多数都是由PASCAL语言奠定基础的,因此它在程序设计语言的发展史上具有承上启下的重要里程碑意义。

  说来有趣,沃思开发PASCAL的初衷是为了有一个适合于教学的语言,并没有想到商业应用。但一经推出,由于它的简洁明了,它所提供的丰富的数据结构和控制结构为程序员提供了极大的方便与灵活性,也由于它特别适合于由微处理器所组成的计算机系统,竟然大受欢迎,广泛地流传开来。在C语言问世以前,PASCAL是风靡全球、最受欢迎的语言之一,创下了发行拷贝数最多的世界记录。单是沃思的一个学生菲力浦·凯恩(Phillipe Kahn),从 ETH毕业以后,在美国加利福尼亚州办了一个软件公司,就卖出了100多万个PASCAL拷贝,成为百万富翁。

  1971年,沃思基于其开发程序设计语言和编程的实践经验,在4月份的 Communications of ACM上发表了论文“通过逐步求精方式开发程序’(Program Development by Stepwise Refinement),首次提出了“结构化程序设计”(structure programming)的概念。这个概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步编出的程序抽象度有所降低…… 最后一步编出的程序即为可执行的程序。用这种方法编程,似乎复杂,实际上优点很多,可使程序易读、易写、易调试、易维护、易保证其正确性及验证其正确性。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的一个标准方法,尤其是在后来发展起来的软件工程中获得广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这是一点也不夸张的。1983年1月,ACM在纪念 Communications of ACM创刊 25周年时,从其 1/4个世纪发表的大量论文中评选出有“里程碑意义的研究论文” 25篇,每年1篇,沃思的这篇论文就是其中之一。

  PASCAL的成功也罢,结构化程序设计思想的巨大影响也罢,都没有停止沃思继续创造性的研究与开发工作。20世纪70年代中期,为适应并发程序设计的需要,沃思又成功开发了一个获得广泛应用的语言Modula。M0dula除了提供并发程序设计功能之外,另外一个重要特征是引进了模块概念(这也是这个语言叫做Modula的原因)。此外,它还引进了“进程”(process)这一和并发程序相联系而产生的重要概念。Modula语言还特别适合于书写系统程序。但是,比Modula具有更加重大得多意义的却是它的第二个版本Modula.2。这是 1976年,沃思再次赴美国,到 Xerox公司的 Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统(可惜Xerox公司没有把它商品化,而由Apple公司学去了它的技术而推出 Macintosh)。

  沃思回到瑞士以后,参考Alto的经验,设计、开发Lilith个人计算机系统。为了和Lilith的体系结构相配合,沃思决定在Modula的基础上开发新版本,作为整个系统的开发语言。Modula-2与Modula相比,语法更加简洁,更加强调界面设计,模块的可重用性更好。它共有3个编译单元,即程序模块、定义模块和实规模块。在定义模块(definition module)中,只给出那些和模块外部交往所必需的信息。例如,对模块内部的子程序说明而言,在定义模块中只给出子程序名、参数名及其类型等,而不给出子程序体本身,也就是说,在定义模块中只给出模块外部可见的信息。在实规模块(implementation module)中,则给出那些在模块外部不可见的信息,例如,在模块内部定义的子程序说明的子程序体。这样的安排既提高了可读性,又有助于分别编译。M0dula-2在优美性(elegance)和简洁性(simplicity)两方面都比Modula更进一步。

  Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都是用M0dula-2开发的。目前世界上已经开发了近百个Modula-2的编译系统,北美和欧洲的许多大学已经用Modula-2代替PASCAL作为计算机系本科生的第一门程序设计课程。Modula-2的标准化工作则早在1984年就已由英国开始进行,ISO则于1987年对它进行标准化,并采用由IBM的维也纳实验室提出的VDM-SL和经过沃思本人加以扩充的BNF(即EBNF,见下)表达语言的语法与语义,在形式化方面达到了一个新的水平。在Lilith项目中,沃思坚持将计算机体系结构、语言、操作环境这三者统一起来考虑,实行集成化、一体化设计的成功经验是具有革命性的创举,从而使这个项目在计算机科学史上占有重要地位。

  近年来沃思致力于一个新的计划,即Oberon计划。Oberon是将程序设计语言和操作系统结合在一起的、面向单用户的个人工作站的一个系统。因为沃思认为,在因特网日益普及的情况下,今后联网的计算机主要将是个人工作站,因此如何使个人工作站功能更加强大、更加方便使用是一个十分重大的课题。沃思把这个计划取名为Oberon是寓意深长的,因为Oberon是希腊神话中的仙境之王和女神Titania的丈夫。沃思的目标是要使Oberon语言超越PASCAL和Modula,设计出的操作系统和编译器功能更加强劲。1992年他写了两本书向读者推荐Oberon(见后),可见其对这个计划的重视。
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170052
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(100) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170054  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

除了程序设计语言之外,沃思在其他方面也有许多创造。为了定义和描述语言,沃思对著名的“巴科斯-诺尔范式”BNF进行了扩充,成为EBNF(Extended BNF)。我们目前所看到的许多语言的 BNF实际上是EBNF,不过人们往往忽略掉这个E字。和BNF一起出现的,还常常有一些看上去像铁路图那样的图形,称作“语法图”(syntax chart或 syntax diagram)或“铁路图”(railroad diagram),这也是由沃思所设计与发明的,这种图形标记法的描述能力等价于BNF,但当然更易于阅读与理解,更加直观。在语法图中,用圆圈表示终结符,用方框表示非终结符,用有向弧表示走向,图上一条通路就表示该语法结构的一种正确定义方法。语法图的4种基本构造方法如下。

  (1) 若产生式为W→W1W2W3,则语法图如图1。

  (2) 若产生式为W→W1W2|W3a|bcW4 ,则语法图如图2。

  (3) 若产生式为W→abW,则语法图如图3。

  (4) 若产生式为W→ab|abW,则语法图如图4。

  对于较复杂的产生式,其语法图一般可通过上述4种语法图进行组合而得。

  在对上下文无关文法的研究中,一个很重要的问题是如何确定两个符号之间的优先关系。现在一般采用的办法也是由沃思和他的同事韦伯提出来的,就叫沃思-韦伯优先关系(Wirth- Weber precedence relation),或叫简单优先关系。它规定上下文无关文法 G中任意两个符号的优先关系如下。

  (1)X<Y,当且仅当有产生式 A→αXBβ,且有推导B+→Yr。

  (2)X=Y,当且仅当有产生式A→αXYβ。

  (3)X> Y,当且仅当有产生式 A→αBYβ,且有推导B+→rX及Y →*aδ。

  其中A、B为非终结符,X、Y为待定优先关系的两个任意符号,α、β、Υ和δ为由终结符和非终结符组成的任意符号串,可以是空串。a是终结符。

  沃思的学术著作很多,主要有如下几种,其中一些原版是用德文写的,翻译成了英文。

  《系统程序设计导论》( Systematic Programming: An Introduction,Prentice- Hall,1973。其德文版已出至第 5版)

  《算法十数据结构=程序》(Algorithms+ Data Structures= Programs,Prentice-Hall,1976)

  《算法和数据结构》(Algorithms and Data Structures, Prentice - Hall ,1986)

  《Modula-2程序设计》(Programming in M0dula-2,Spring6r,1988,第4版)

  《PASCAL用户手册和报告: ISO PASCAL标准》 (PASCAL UserManual and Report: ISO PASCAL Standard, Sprillger, 1991)

  《Oberon计划:操作系统和编译器的设计》( Project Oberon:the Design of an Operating System and Compiler,ACM Pr.,1992)

  《Oberon程序设计:超越Pascal和Modula》(Programming in Oberon: Steps beyond Pascal and Modula, ACM Pr,1992)

  《数字电路设计教材》(Digital Circuit Design for Computer Science Students:An Introductory Textbook, Spnnger, 1995)

  《编译器构造的原理和技术》(Theory and Techniques of Compiler Construction,Addison- Wesley,1996)

  ACM除了1984年授予沃思图灵奖外,1987年又授予他“计算机科学教育杰出贡献奖”。另一重要的国际学术组织IEEE也授予过沃思两个奖项: 1983年的 Emanual Piore奖和 1988年的计算机先驱奖(Computer Pioneer Award)。1992年,加州大学伯利分校命名沃思为“杰出校友”。

  沃思是在1984年10月于旧金山举行的ACM年会上接受图灵奖的。沃思发表了题为“从程序设计语言设计到计算机建造”(From Programming Language Design to Computer Construction)的图灵奖演说,回顾了自己在计算机领域所做的工作。演说全文刊载于Communications of ACM,1985年 2月,159- 164页,也可见《前 20年的 ACM图灵奖演说集》(ACM Turing Award Lectures——The First 20 Years:1966-1985,ACM Pr.),179-196页。沃思在演说中强调了程序设计语言简 性的重要意义,也讨论了它所需的硬件和软件环境(因为沃思一直很重视语言的实现问题)。他介绍了在设计Modula-2和Lilith中的经验,指出第一手经验和选择良好开发工具的无比价值。

  沃思现仍在苏黎世工学院任教,他的电子箱为:wirth @ inf.ethz.ch
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170054
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(135) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170057  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

开始启动《程序人生》系列操作系统 。。。。。。。。。。。 启动成功

正在启动《程序人生1996》操作系统 。。。。。。。。。。。启动成功
启动《程序员 1.0》 。。。。。。。。。。。。。。。。。。  启动成功
《程序员1.0》正在运行 。。。。。。。。。。。。。。。。。运行良好
《程序员》正在加载《女友妤.Dll》。。。。。 。。。。。。。加载成功
---------------------------------------------------------------
-          《程序员1.0》输出结果          -
-                               -
- 喜欢你!不能自拔!高兴!自豪!幸福! -
- 我爱你!我将是你一生的依靠。 -
- 《女友妤.Dll》是《程序员1.0》一切的基础 -
---------------------------------------------------------------
《程序员1.0》正在升级为《程序员1.1》 。。。。。。。。。 升级成功
《程序员1.1》正在运行 。。。。。。。。。。。。。。。。。幸 福 中

《程序人生1996》操作系统正在升级为《程序人生1997》 。。 升级成功
正在启动《程序员1997》操作系统 。。。。。。。。。。。。。启动成功
《程序员1.2》正在升级为《程序员1.3》 。。。。。。。。。。 升级成功
《程序员1.3》正在运行 。。。。。。。。。。。。。。。。。。幸 福 中

《程序人生1997》操作系统正在升级为《程序人生1998》 。。 升级成功
正在启动《程序员1998》操作系统 。。。。。。。。。。。。。启动成功
《程序员1.3》正在升级为《程序员1.4》 。。。。。。。。。。 升级成功
《程序员1.4》正在运行 。。。。。。。。。。。。。。。。。。幸 福 中
《女友妤.Dll》出现致命性错误 。。。。。。。。。。。。。。。要求分手
《程序员1.4》启动错误挽救模块。。。。。。。。。。。。。。 启动成功
---------------------------------------------------------------
- 《程序员1.4》输出结果 -
- -
- 还爱我吗?爱过我吗?让我们重新运行吧? -
- 《女友妤.Dll》是《程序员1.4》一切的基础。 -
- 《女友妤.Dll》比任何代码都重要!我爱你!真的! -
- 我爱你!!真的!!!我爱你!!!! -
---------------------------------------------------------------
《女友妤.Dll》正在处理错误挽救模块所作的努力 。。。。。。。处理拒绝
---------------------------------------------------------------
- 《女友妤.Dll》输出结果 -
- -
- 拒绝错误挽救模块所作的努力!!! -
- 原因: -
- 1、《程序员1.4》经常没有时间接她回家。 -
- 2、《程序员1.4》总是在想着代码。 -
- 3、《程序员1.4》和电脑在一起的时间比和我在一起的时间还多。 -
- 4、我与《程序员1.4》的感觉不再兼容。 -
- 5、《程序员1.4》对我关心不够多。 -
- 6、有另外一个人可以更好的爱我,那个人有的是时间陪我。 -
- 7、我想我不再是《程序员1.4》一切的基础。 -
- 8、《程序员1.4》已经不再是《程序员1.0》时的样子了。 -
- 9、我不想再成为《程序员1.4》一切的基础,也不想再爱你了。 -
---------------------------------------------------------------
《程序员1.4》重新启动错误挽救模块。。。。。。。。。。。挽救失败
《程序员1.4》正在试图释放《女友妤.Dll》所占用的资源。。 释放失败
《程序员1.4》正在试图自我恢复。。。。。。。。。。。。。恢复失败
《程序员1.4》出现致命性错误。。。。。。。。。。。。。。痛 苦 中
《程序员1.4》中断处理信息。。。。。。。。。。。。。。。痛 苦 中
《程序员1.4》出现混乱。。。。。。。。。。。。。。。。。痛 苦 中
---------------------------------------------------------------
- 《程序员1.4》输出结果 -
- -
- 惊呀、不能自拔、痛苦、自责、失望、对爱情绝望 -
- 混乱原因: -
- 1、《女友妤.Dll》已经不会再是《程序员1.4》一切的基础。 -
- 2、《程序员1.4》已经没有了一切的基础。 -
- 3、《程序员1.4》已无法再微笑,什么都不重要了。心如死灰。 -
- 4、虽然我依然爱她,但她已不再属于我了。 -
---------------------------------------------------------------
《程序员1.4》正在启动结束痛苦模块。。。。。。。。。。。 启运失败
《程序员1.4》正在运行。。。。。。。。。。。。。。。。。 程序挂起
《女友妤.Dll》正在销毁自身代码 。。。。。。。。。。。。。销毁成功
《程序人生1998》正在运行 。。。。。。。。。。。。。。。运行失败
《程序人生1998》正在重启 。。。。。。。。。。。。。。。无效当机

《程序人生1998》操作系统正在升级为《程序人生1999》 。。 升级成功
正在启动《程序员1999》操作系统 。。。。。。。。。。。。。启动成功
《程序员1.4》正在运行。。。。。。。。。。。。。。。。。。 痛 苦 中
---------------------------------------------------------------
- 《程序员1.4》输出结果 -
- -
- 原因:思念《女友妤.Dll》,心如死灰,其它什么都不重要了。 -
---------------------------------------------------------------
《程序员1.4》正在启动结束痛苦模块。。。。。。。。。。。 启运失败
《程序员1.4》正在运行。。。。。。。。。。。。。。。。。 程序挂起
《程序人生1999》正在运行 。。。。。。。。。。。。。。。运行失败
《程序人生1999》正在重启 。。。。。。。。。。。。。。。无效当机

《程序人生1999》操作系统正在升级为《程序人生2000》 。。 升级成功
正在启动《程序员2000》操作系统 。。。。。。。。。。。。。启动成功
《程序员1.4》正在运行。。。。。。。。。。。。。。。。。。 痛 苦 中
---------------------------------------------------------------
- 《程序员1.4》输出结果 -
- -
- 原因:思念《女友妤.Dll》,其它什么都不重要了。 -
---------------------------------------------------------------
《程序员1.4》正在启动结束痛苦模块。。。。。。。。。。。启运失败
《程序员1.4》正在加载《女友微.Dll》 。。。 。。。。。。。加载成功
---------------------------------------------------------------
- 《程序员1.4》输出结果 -
- -
- 有一点动心,喜欢她的笑、我想我会成为她的依靠、因为她爱我。 -
- 我爱她吗?有一点思念《女友妤.Dll》。 -
- 我喜欢她,不知道这是不是爱? -
- 《女友微.Dll》不会再是我一切的基础,但我想我喜欢她。 -
---------------------------------------------------------------
《程序员1.4》正在升级为《程序员2.0》 。。。。。。。。。 升级成功
《程序员2.0》正在运行 。。。。。。。。。。。。。。。。。运行成功

《程序人生2000》操作系统正在升级为《程序人生2001》 。。 升级成功
正在启动《程序员2001》操作系统 。。。。。。。。。。。。。启动成功
《程序员2.0》正在运行 。。。。。。。。。。。。。。。。。。运 行 中
---------------------------------------------------------------
- 《程序员2.0》输出结果 -
- -
- 有一点思念《女友妤.Dll》,但《女友微.Dll》也许更适合我。 -
- 只有编程才是我的一切,从此以后我将是《女友微.Dll》的依靠。 -
- 虽然依然心痛,但一切都过去了。对现在的生活,该满足了。 -
---------------------------------------------------------------
《程序人生2001》正在运行 。。。。。。。。。。。。。。。 运 行 中

《程序人生2001》操作系统正在升级 。。。。。。。。。。。 升 级 中
《程序员2.0》正在升级 。。。。。。。 。。。。。。。。。。升 级 中

《程序人生》系统操作系统正在运行 。。。。。。。。。。。。运 行 中

 


本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170057
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(75) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170062  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

题目:
  设有如下C++类

class A
{
    int value;
public:
    A(int n = 0) : value(n) {}
    int GetValue()
    {
         return value;
    }
}; 
 


  请使用某种方式来在类的外部改变私有成员A::value的值。
程序员的可能做法:


class A
{
    int value;
public:
    A(int n = 0) : value(n) {}
    int GetValue()
    {
          return value;
    }
    void SetValue(int n)
    {
         value = n;
    }
};
void f()
{
    A a;
    a.SetValue(5);
}
  

黑客的可能做法:

void f()
{
    A a;
    *((int *)&a) = 5;
} 
 


  结论:
  程序员习惯于遵循既有的限制来增加既有的东西。
  黑客习惯于利用既有的东西来打破既有的限制。

 


本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170062
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(97) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170076  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

你,一个DotNet程序员,刚刚加入一个新项目组。除了你之外,其他的成员包括:Ceer,一直从事C项目的程序员,他刚刚转入C#不到一个月; Jally,整天抱着本Design Pattern(没错,就是GoF的那本)在啃的前Java程序员;以及Semon,你对他完全不了解,只是听PM介绍说他是搞Scheme的(传说中的第二古老的语言LISP的方言之一)。不过你也没在意,毕竟计算机这玩意,老东西是不吃香的。

  周一,刚打开电脑,老板就跑到你们组的办公座面前:“好吧,伙计们,现在有个function需要你们来搞定。具体是这样的:用户输入2个数,并输入一个操作符。你根据输入的情况来得出相应的运算结果。“

Example: Foo(+, 1, 2) = 3; Foo(*, 3, 6) = 18; Foo(/, 2, 4) = 0.5


  Ceer最先作出反应:简单嘛,判断一下输入的操作符就好了。说着,他很快在白板上写出如下代码:

 

public class CStyle_Calculator
{
 static public double Foo(char op, double x, double y)
 {
  switch(op)
   case ’+’: return x + y; break;
   case ’-’: return x - y; break;
   case ’*’: return x * y; break;
   case ’/’: return x / y; break;
   default: throw new Exception(”What the Hell you have input?");
 }
}
 
  Jally只看了一遍,就捂着鼻子连连摇头:好一股的代码臭味。还不如看我用OO的方法来解决:

public interface I操作符 //谁说代码不能写中文的?恩恩
{
 double 运算(double x, double y);
}

public class OO_Calculator
{
 private I操作符 m_op;
 public OO_Calculator(I操作符 op)
 {
  this.m_op = op; //依赖注入【注2】
 }

 public double Foo(double x, double y)
 {
  return this.m_op.运算(x, y);
 }
}

public class 加法:I操作符
{
 public double 运算(double x, double y)
 {
  return x + y;
 }
}

public class 减法:I操作符
{
 public double 运算(double x, double y)
 {
  return x - y;
 }
}

public class 乘法:I操作符
{
 public double 运算(double x, double y)
 {
  return x * y;
 }
}

public class 除法:I操作符
{
 public double 运算(double x, double y)
 {
  return x / y;
 }
}

public class TheMainClass
{
 static public void Main()
 {
  I操作符 我的加法 = new 加法();
  OO_Calculator 我的加法器 = new OO_Calculator(我的加法);
  double sum = 我的加法器.Foo(3, 4);
  System.Console.WriteLine(sum);
  //sum = 7

  //其他3个我就不废话了
 }
} 
 
  你看着Jally把白板写得密密麻麻之后,耸耸肩,暗叹,你们这些用java的废柴,就一个运算器还搞出Interface这些东西,烦不烦啊。 让你们见识见识DotNet的强大吧. 那个运算符我直接用delegate传进去不就好了么.

public delegate double TheOperator(double x, double y);

public class Operators
{
 static public double Add(double x, double y)
 {
  return x + y;
 }

 static public double Sub(double x, double y)
 {
  return x - y;
 }

 //乘,除法 我也懒得废话了
}

public class DotNet_Calculator
{
 public double Foo(TheOperator op, double x, double y)
 {
  return op(x, y);
 }
}

public class TheMainClass
{
 static public void Main()
 {
  TheOperator myAdd = new TheOperator(Operators.Add);
  TheOperator mySub = new TheOperator(Operators.Sub);

  DotNet_Calculator dc = new DotNet_Calculator();
  double sum = dc.Foo(myAdd, 2, 4); //sum = 6
  System.Console.WriteLine(sum);
  double sub = dc.Foo(mySub, 3, 7); //sub = -4
  System.Console.WriteLine(sub);
 }
}
 
//dot net 下面还可以用CodeDom动态构造C#代码,然后在内存编译运行。
//如果觉得专门写个Operators很烦的话,可以试试C#2.0的匿名方法

  很好,当你写完代码之后,挑衅的看着Jally,Ceer却开始抱怨起来:”这不就是C里面的函数指针么,我也会...“

  “然则DotNet下面的Delegate是类型安全滴...”你继续洋洋得意.

  而Semon,看了看你们3位华丽的代码,啥也没说,只是在键盘上敲下了2行代码

(define (Foo op x y)
(op x y)) 
 
  然后就下班了...

  【注: scheme的代码稍微解释下:(+ 1 2) = 3, (* 3 4) = 12.】

  至于Semon的解法:

(define (Foo op x y)
(op x y)) 
 
  看明白了么,上面的代码只有一个作用:第一行是函数头,定义了一个叫Foo的函数。该函数接受3个参数op, x, y。

  第二行定义了函数的行为:把第一个参数op当作运算符,计算后面2个参数。

  所以:(Foo + 1 2) = 3. (Foo / 12 6) = 2.

  好了好了,不编故事了。

  我只是想简单的让大家在繁忙的工作之余,也瞅瞅Function Programming(函数编程)世界的美妙。函数编程,最大的特点是它是将函数作为语言里1st class的元素来对待的。一个函数可以接受另一个函数作为参数,也可以把一个函数作为结果来返回。这样的函数我们称为Higher-order function。

  那么,Function Programming和我们传统的面向对象有啥区别捏? 恩,这个嘛,扯得远可以扯到图灵机和冯·诺以曼这2种体系的差异...@_@不过那个太学术性,俺就不说了。不过有句话可以较好的概括FP和OO的区别(好吧,这个也是抄“紫皮书”上面的):
 
  “Pascal是为了建造金字塔...Lisp是为了建造有机体...”“作为Lisp的内在数据结构,表对于这种可用性起着重要的提升作用...”“采用100函数在一个数据结构上操作,远远优于采用10个操作在十个数据结构上工作”“金字塔矗立在那里千年不变,而有机体则必须演化,否则就会消亡”。

  而另一个总结得比较好的话是:(同样是抄来的)

  一个对象:一组相同的运算上面,外加不同的数据。(想想你的object,是不是这样的?)

  一个Closure:一组相同的数据,外加不同的操作。(Delegate就是这样的思想,有兴趣的话也可以去看看Ruby)

  基本上,恩,没啥说的了。 如果你感兴趣的话,可以去看MIT SICP的课程(有在线版的,MIT也作为Open Course开设了的) 
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170076
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(80) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170081  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

程序员是怎么喝酒的
大家喝的是啤酒。这时你入座了。
你给自己倒了杯可乐,这叫低配置。
你给自已倒了杯啤酒,这叫标准配置。
你给自己倒了杯茶水,这茶的颜色还跟啤酒一样,这叫木马。
你给自己倒了杯可乐,还滴了几滴醋,不仅颜色跟啤酒一样,而且不冒热气还有泡泡,这叫超级木马。
你的同事给你倒了杯白酒,这叫推荐配置。
人到齐了,酒席开始了。
你先一个人喝了一小口,这叫单元测试。
你跟旁边的人说哥们咱们随意,这叫交叉测试。
但是他说不行,这杯要干了,这叫压力测试。
于是你说那就大家一起来吧,这叫内部测试。
这个时候Boss向全场举杯了,这叫公开测试。

菜过三巡,你就不跟他们客气了。
你向对面的人敬酒,这叫p2p.
你向对面的人敬酒,他回敬你,你又再敬他……,这叫tcp.
你向一桌人挨个敬酒,这叫令牌环。
你说只要是兄弟就干了这杯,这叫广播。
可是你的上司jj听了不高兴了,只有兄弟么,罚酒三杯。这叫炸弹。
可是你的下级mm听了不高兴了,我喝一口,你喝一杯,这叫恶意攻击。
有一个人过来向这桌敬酒,你说不行你先过了我这关,这叫防火墙。
你的小弟们过来敬你酒,这叫一对多。
你是boss,所有人过来敬你酒,这叫服务器。

酒是一样的,可是喝法是不同的。
你喝了一杯,boss喝了一口,这叫c#。
你喝了一杯,mm喝了一口,这叫vb。
你喝了一杯,你大哥喝了半杯,这叫c++。
你喝了半杯,你小弟喝了一杯,这叫汇编。
你喝了一杯,你的搭档也喝了一杯,这叫c。

酒是一样的,可是喝酒的人是不同的。
你越喝脸越红,这叫频繁分配释放资源。
你越喝脸越白,这叫资源不释放。
你已经醉了,却说我还能喝,叫做资源额度不足。
你明明能喝,却说我已经醉了,叫做资源保留。
你喝一段时间就上厕所,这叫cache。

酒过三巡,你也该活动活动了。
你一桌一桌的走,这叫轮巡。
你突然看到某一桌的漂亮mm,走了过去,这叫优先级。
你去了坐下来就不打算走了,这叫死循环。
你的老大举杯邀你过去,你只好过去,这叫激活事件。
你向一桌敬酒,他们说不行不行我们都喝白的,于是你也喝白的,这叫本地化。
你向boss敬酒,可是boss被围了起来,你只能站在外圈,这叫排队。
你终于到了内圈,小心翼翼的向前一步,这叫访问临界区。
你拍着boss的肩膀说哥们咱们喝一杯,这叫越界。
你不知喝了几圈了,只会说两个字,干了,这叫udp。
可是还有人拿着酒瓶跑过来说,刚才都没跟你喝,这叫丢包。

喝酒喝到最后的结果都一样
你突然跑向厕所,这叫捕获异常。
你在厕所吐了,反而觉得状态不错,这叫清空内存。
你在台面上吐了,觉得很惭愧,这叫程序异常。
你在boss面前吐了,觉得很害怕,这叫系统崩溃。
你吐到了Boss身上,只能索性晕倒了,这叫硬件休克
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170081
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(64) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170306  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

一日,去逛电脑城,突然觉得一阵腹痛。不好,要如厕。

  急匆匆来到WC前,抬头只见门口上方挂一电子牌:上写

  “最新WIN2004 SERVER WC“

  不禁赞叹:果然是IT,高科技!

  好急,快进去,怎么门推不开?抬头一看,电子板上显示:

  “用户名不存在或密码错误,请找管理员”

  给看门老头交了两毛钱,拿了个密码,急忙入内,冲向马桶

  可是马桶盖怎么也打不开,我实在忍不住了,用力一拉,墙上弹出一块牌子:

  “!系统提示:您没有这个马桶的访问权限”

  **!好在我知道一个超级用户密码,这时起了作用,在控制面板中输入后,马桶盖终于打开了…..长输了一口气,好舒服哦。

  完事,伸手去拿手纸,手纸却又没法从盒子里抽出来,不会吧,难道?

  一转头,果然,又弹出了一个牌子

  “此纸盒已加密!”

  我晕,正在急不可耐时,旁边蹲位有人伸过来一只手:

  “你第一次用WIN2004 WC吧,没关系,我们手纸共享好了”

  谢谢,谢谢, 边道谢,边提好裤子,

  一冲马桶,又弹一牌子:

  “病毒已清除!”

  刚走两步,只听“砰”的一声,马桶盖大力的关上了,牌子上道:

  “连接超时,请刷新!”

  好险!!!
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170306
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(71) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170310  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

导读:《Computerworld》网站10月17日评出了IT史上10大最尴尬瞬间,其中包括比尔·盖茨遭遇Windows 98蓝屏死机、索尼BMG版权保护软件引起消费者反感等。下面就是这10大尴尬瞬间的简介:

  1、比尔·盖茨遭遇Windows 98蓝屏死机

  与Windows 3.1相比,Windows 95提供了更为出色的用户界面,但其功能及稳定性还有待完善。微软对此表示,Windows 98的稳定性将大幅提高。然而Windows 98的蓝屏死机现象仍然严重。最令人尴尬的是,在1998年举办的COMDEX/Spring主题演讲中,盖茨在演示Windows 98亮点之一的USB功能时,系统出现严重故障,并最终导致蓝屏死机现象。

  2、鲍尔默摇身变“舞猴”

  在2001年举行的微软员工聚会上,CEO史蒂夫·鲍尔默在台上手舞足蹈,随着节奏强劲的音乐满场乱跳狂喊半分钟,近乎疯狂,为此他获得了“舞猴(Monkey Boy)”的绰号。数天后,鲍尔默对自己当时所作所为懊悔不已。他这样做是为了显示自己风趣的一面,还是为了缓解工作压力?人们或许永远不会知道答案。

  3、Vista语音识别功能闹笑话

  盖茨曾预测,今后语音识别功能的使用频度将赶上键盘输入。但在2006年举行的一场Windows Vista语音识别功能演示过程中,显示屏上显示微软高管所说的话语中,几乎每个单词都存在拼写错误。

  4、IBM高管伪造履历

  作为IBM莲花(Lotus)开发部门主管,杰夫·帕波斯(Jeff Papows)无疑有着很强的执行能力。然而在他1999年提交的履历中,却存在不少夸大事实之处。帕波斯声称自己曾获得海军陆战队上校军衔并担任过作战直升机飞行员,但实际上他只负责空中运输控制事务,军衔为海军上尉。他还声称自己获得某名牌大学工商管理哲学博士学位,而实际上他只获得一所函授学院的学位。且他根本不是自己所述的孤儿身份。

  5、AT&T为iPhone用户开出300页的账单

  苹果iPhone音乐手机上市后不久,就采取了大降价策略。为平息已购iPhone用户的不满,苹果答应返还这些用户100美元礼券。但最尴尬的事情却发生在iPhone美国市场独家运营商AT&T身上。为了让iPhone用户了解详细通话情况,AT&T开出的通话账单长达数十页,最长的一份账单竟长达300页。AT&T对此表示,今后将向用户发送体积更为“苗条”的账单。

  6、少年半小时攻破成人内容过滤系统

  为保护青少年上网身心健康,澳大利亚政府曾投资8400万美元开发了一套成人内容过滤系统,并于今年8月投入使用。然而家住墨尔本、名为汤姆·伍德(Tom Wood)的16岁少年仅用半小时就攻破了该过滤系统。伍德对该系统的评价是:“纯粹是浪费钱财。”澳大利亚政府官员称,已经预料到可能发生少年攻破系统现象,软件开发商将积极应对该问题。

  7、索尼BMG“侵入”用户PC

  为保护音乐版权,索尼BMG于2005年在部分发售CD中内置了入侵工具软件。当用户把这些CD放入光驱后,该软件将在没有任何提示前提下自动安装。此举引起了用户的强烈不满,称索尼BMG此举属于安装恶意软件、间谍软件行为,部分用户甚至对索尼BMG提起诉讼。

  8、科技记者“裸露”过多

  2003年,TechTV网站科技记者凯特·施瓦兹( Cat Schwartz)本想把自己的一些照片放在互联网上。由于她不怎么会使用Photoshop软件,她的这些照片被截成了各种奇怪的形状,且出现在网上的照片却只显示她的肩膀,就像没穿衣服一样,浏览者会以为这是施瓦兹的裸照。

  9、美国国家安全局安全专家之子放出蠕虫病毒
  1988年,康奈尔大学学生罗伯特·莫里斯(Robert Morris, Jr.)编写了著名的Morris蠕虫病毒。该病毒感染了通过互联网连接的6000台大学和军用计算机,损失达1500万美元。莫里斯本人因此被判处3年缓刑、400小时的社区服务和缴纳罚金。最令人尴尬的事情是,莫里斯的父亲曾担任美国国家安全局(NSA)的高级安全专家。目前莫里斯在麻省理工学院任教。

  10、自我拔高维基百科词条

  一些企业或知名人士发现,维基百科上有关他们的词条不全是溢美之辞,于是会设法对这些内容加以修订。然而借助一款名为WikiScanner的软件,可以查出是哪些企业和个人对涉及自身的词条进行了修改。如果将此类修改行为公之于众,则势必让这些企业和个人倍感尴尬。
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170310
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(138) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170311  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

男,就职于一家IT媒体。 女,就职于一家IT公司。

女:亲爱的,最近我发现你情绪低落,反应速度大大降低,是不是头脑里碎片太多,要不要我帮你整理一下?

男:我也说不清楚,我觉得越来越与同事不兼容了。

女:也许这与你和他们配置有关系,你们办公室好像就你一个是从外地毕业分到北京的。

男:这不是主要原因。有时,他们谈得正热闹时,我一插话就死机。

女:难道你谈了什么非法话题?

男:不是我非法,他们尽谈论一些行业应用话题,什么汽车啦,房子啦,三陪啦。我觉得他们的话题版本大低,应该升级。

女:你应该学会向下兼容。

男:这是一个迅速更新换代的社会,向下兼容未免成本太高。而且,还造成很大的资源浪费。我倒认为他们应该扩充内存。

女:你知道吗,亲爱的,有些事情并不是简单的内存升级所能解决的,关键问题在于头脑的运行速度和缓存大小。

男:他们的处理速度并不比我慢。他们总是不同的话题切换来切换去,但每次都没有结果。

女:难道你对这种同时打开多个话题窗口的方式不习惯吗?现代社会完全能够支持这种多任务话题系统。

男:但为什么我要么插不上话,要么一插就死机呢?

女:他们不会对你设屏幕保护吧?

男:我真的很想浏览一下他们的大脑,看看每天他们都有什么,可惜我不知道入口地址。

女:你干吗不用搜索引擎对他们每天谈话的关键词进行搜索,他们说IT人才,你就搜索”软件客”?

男:这样未免有黑客的嫌疑。

女:亲爱的,看来你真的需要提高你的知识刷新频率。对了,还有你衣服的墙纸颜色,你不能总是使用标准衣服墙纸。

男:我很希望每次与同事的谈话都从我这点击开始,我甚至希望能把这种谈话的初始化条件粘贴到以前的朋友圈子中去。

女:我得提醒你,一次开发并不是一定能到处运行。

男:不,我不是那个意思,我只是想在社交中寻求更好的稳定性。

女:我很高兴你能改变你的伙伴策略,我会很快给你做一张寒暄启动盘。但是,在我们安全退出这次谈话任务前,难道你不想对我的嘴唇做定期扫描吗?

男:嗨!亲爱的,我差点忘了。(扫描进行中......)扫描中发现一个小小的辣椒错误,重试还是取消?

女:忽略!
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170311
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(79) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/170633  发表时间: 2008年03月12日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

因为你是男人
崔晓柏


        当母亲带着疲惫的微笑将你捧给世界,你已经是一座高山,是一片大海了。性别交给你一副重担,指给你一条路,对你说:走吧,你这男子汉!于是你便要长一副铮铮铁骨,把脚下坚实的土地踏得咚咚作响,去完成你的使命、你的光荣、你的答卷。


        当洪水涌来的时候,你要退在最后;当大火燃烧的时候,你却要扑在前边。因为你是男人,你就应该有一副侠肝义胆!


        当朋友成功的时候,你要大碗喝酒;与女友分手时,要真诚地说声道歉。因为你是男人,你就应该如此气壮心宽。

        因为你是男人,所以,对女儿你应是一棵结满故事的大树,对妻子你应是一片金色的沙滩,对父母更该是一座物产丰富的大山。

        因为你是男人,一生就要有所成就。不懒惰,不侥幸,不虚荣,不欺骗,不流泪,不妒嫉,不后悔,不自卑,不献媚,不投机,不唯利是图,不    抱怨,男人就应该堂堂正正、磊磊落落、风度翩翩。


        做个好男人也是一项事业啊。一个民族仅有女人的光荣是不够的,阴盛阳衰对每个男人来说都应该觉得行秽自惭。


        也许你很矮,但好男人博大的胸怀才情会使你顶天立地;也许你很弱,但好男人坚定的意志品格将赋予你狭义铁肩;也许你恶疾缠身,但好男人的字典里根本没有伤残。


        男人,光荣的性别。这光荣的全部内涵就在于去承担责任和义务做出牺牲和奉献。做个好男人吧!你别无选择,因为你已经是个男人了。

 


本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/170633
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(80) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/171558  发表时间: 2008年03月15日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

#include   
#include   

long a=10000, b, c=2800, d, e, f[2801], g;  

main()  
{  
  for(;b-c;)  
    f[b++]=a/5;  
  for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)  
    for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);  
}


计算结果:
3141592653589793238462643383279502884197169399375105820974944592307816406
2862089986280348253421170679821480865132823066470938446095505822317253594
0812848111745028410270193852110555964462294895493038196442881097566593344
6128475648233786783165271201909145648566923460348610454326648213393607260
2491412737245870066063155881748815209209628292540917153643678925903600113
3053054882046652138414695194151160943305727036575959195309218611738193261
1793105118548074462379962749567351885752724891227938183011949129833673362
4406566430860213949463952247371907021798609437027705392171762931767523846
7481846766940513200056812714526356082778577134275778960917363717872146844
0901224953430146549585371050792279689258923542019956112129021960864034418
1598136297747713099605187072113499999983729780499510597317328160963185
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/171558
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(151) | 评论 (0)编辑 收藏

网站: JavaEye  作者: justjavac  链接:http://justjavac.javaeye.com/blog/171560  发表时间: 2008年03月15日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
}'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}


P.S附上我的运行结果:

On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eigth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝网招贤纳士,诚聘Java工程师



文章来源:http://justjavac.javaeye.com/blog/171560
posted @ 2008-03-15 10:04 justjavac(迷渡) 阅读(87) | 评论 (0)编辑 收藏