Your SlideShare is downloading. ×
0
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
网上程序语言
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

网上程序语言

803

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
803
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 网络编程语言 沈卫平
  • 2.  
  • 3. 2008 编程语言走势解盘 <ul><li>Java 类语言: Java 似乎会逐渐走下坡。 J2ME 会受到 Google Android 、 Adobe Flash Lite 、 .NET Compact Framework 的影响; J2SE 的对手则是 .NET 和 AIR ; J2EE 在中小型网站受到 PHP 、 Ruby-on-Rails ( RoR ) 很大的冲击。幸好,目前大型企业好像还是买 J2EE 的帐。 </li></ul><ul><li>在 J2ME 和 J2SE 方面,未来似乎可以用 JavaFX 奋力一搏;在 J2EE 方面,也有 Groovy/Grails 可以抵挡 RoR 。尤其目前大家怀疑 PHP 和 RoR 只适合用在中小型网站,大型企业网站似乎还是用 J2EE 比较安心, Groovy/Grails 可以保障大家在 J2EE 上既有的投资。 </li></ul><ul><li>如果你是 Java 爱好者,最近有点想改用 RoR ,那么你可以去看看 Grails ,或许你会因此想继续留在 Java 阵营。 </li></ul>
  • 4. 2008 编程语言走势解盘 <ul><li>PHP 语言:因为 PHP 对初学者相当友善,所以过去这几年使用者数量增加快速,但是似乎已经到达瓶颈,这可能是 RoR 造成的。随着 RoR 推出新版, PHP 会受到更大的挑战。连开发工具厂商 CodeGear 都在 2007 年推出 Ruby 和 PHP 的开发工具,显见这两个语言似乎都会逐渐走入企业市场。 </li></ul><ul><li>Python 语言: Python 早就移植到 .NET 和 Java , 2008 年会持续推出修订版本,而且也会推出全新的 Python 3000 。 Python 3000 不以相容于 2.x 版为目的,而是要运用过去培养出来的经验,彻底翻新 Python 。目前 Python 编程员的需求也已经超越 Perl 。 </li></ul>
  • 5. 2008 编程语言走势解盘 <ul><li>Perl 语言:目标远大是一件好事,但目标远大却没有足够的资源可以完成目标,就会陷入绝境。 Perl 6 就是这样的例子,它比 .NET 更早提出,但这几年下来, .NET 已经从 1.0 进入到 3.5 , Perl 6 却连 1.0 都还没诞生。 Perl 擅长文字数据处理,但是在大部分语言都支持 Regular Expression ,加上文字数据大量 XML 化之后, Perl 的优势已经消失大半。 </li></ul><ul><li>Ruby 语言: Ruby 可能会在 2008 年推出 2.0 ,加上 2007 年底已经推出的 RoR 2.0 , Ruby 整个就是一股挡不住的气势。可能在 2008 年底之前, Ruby 在 TIOBE 的排行榜上就会超越 Perl ,只剩下 Python 和 PHP 这两个对手了。 </li></ul>
  • 6. 2008 编程语言走势解盘 <ul><li>JavaScript 语言: Web 应用蔚为主流,而 JavaScript 又是浏览器的标准语言,所以这几年来相当受到重视。 </li></ul><ul><li>在 Adobe 推出 AIR , Mozilla 推出 Prism 之后, JavaScript 可以开发出「某些种类」的桌面应用, JavaScript 的用途变得更广。 </li></ul><ul><li>而 JavaScript 的兄弟 ActionScript ,随着 AIR 的推出又会更受欢迎一些,但是 Silverlight 的推出,又会抵销 ActionScript 成长力道。 </li></ul>
  • 7. 2008 编程语言走势解盘 <ul><li>C 语言:系统语言语言方面, C 语言的地位还是一样重要, C++ 则会慢慢走下坡; D 语言崛起,将会接收相当多原来 C++ 的使用者,而 Delphi 则是一蹶不振,当年 Delphi/Kylix 跨 Windows/Linux 的美梦已然消失。 </li></ul><ul><li>D 语言:多年来, D 语言平均一个月推出两个版本,改版速度相当快,在 2007 年 1 月推出 1.0 版后,不出几个月,又推出 2.0 版。 1.0 版持续做 bug 修订,尽量不加新特色, 2.0 版则继续进行实验性的翻修。虽然 D 语言 1.0 才正式推出 1 年,但已经成为相当受欢迎的系统语言,可惜至今仍然没有很好用的 IDE 。 </li></ul>
  • 8. 2008 编程语言走势解盘 <ul><li>Lua 、 PowerShell 、 Erlang 语言:可说是未来几年窜升力道最强的潜力之星,但都还不至于成为主流语言。 </li></ul><ul><li>Lua 是相当小的语言,适合嵌入其他的环境中,和其他语言一同使用,根据 TIOBE 开发语言排行榜数据显示,这几年 Lua 越来越受到重视,尤其 2007 年 Lua 更是往上猛窜二十几个名次,由此可见 Lua 的需求大增。 </li></ul><ul><li>随着 Windows Vista 系统的出货,未来几年 PowerShell 会成为相当重要的系统管理语言。 </li></ul><ul><li>目前的多核心环境、网络分布式计算、容错的需求,则让 Erlang 持续受到重视。 </li></ul>
  • 9. 2008 编程语言走势解盘 <ul><li>在 2007 年第三季, Apple iPhone 在美国的 Smartphone 市场占有率已经到达 27% ,超过 Windows Mobile 。 </li></ul><ul><li>继美洲和欧洲之后, 2008 年 iPhone 会在亚洲开始贩卖,并推出第二代机种,也预计在 2008 年推出 SDK (软件开发工具包),让我们可以为 iPhone 写原生( Native )程序。 </li></ul><ul><li>所以,如果你需要为 Smartphone 开发应用,除了考虑 Windows Mobile 之外,你也必须思考是否要用 Objective-C 语言开发的 MacOS 应用了( iPhone 使用精简版的 MacOS X )。 </li></ul>
  • 10. 2008 编程语言走势解盘 <ul><li>转换语言的成本通常很高,所以一年之内,各个语言通常不会有太大的兴衰变化, </li></ul><ul><li>这里是描述以 2008 为中心,前后数年期间各类编程语言的整体状况;把时间拉长,发展态势会比较明显,不受到短期震荡的影响,预测未来就不至于太过离谱,让大家当作未来选择语言的参考。 </li></ul>
  • 11. WEB2.0 <ul><li>互联网下一步,是要让所有的人都忙起来,全民织网,然后用软件,机器的力量使这些信息更容易被需要的人找到和浏览。如果说 WEB1.0 是以数据为核心的网,那 WEB2.0 是以人为出发点的互联网。我们看一看最近的一些 WEB2.0 产品,就可以理解以上观点。 Blog : 用户织网,发表新知识,和其他用户内容链接,进而非常自然的组织这些内容。 RSS : 用户产生内容自动分发,定阅 Podcasting : 个人视频 / 声频的发布 / 定阅 SNS : blog+ 人和人之间的链接 WIKI : 用户共同建设一个大百科全书 </li></ul>
  • 12. WEB2.0 <ul><li>从知识生产的角度看, WEB1.0 的任务,是将以前没有放在网上的人类知识,通过商业的力量,放到网上去。 WEB2.0 的任务是,将这些知识,通过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在这个过程中继续将知识深化,并产生新的思想火花; 从内容产生者角度看, WEB1.0 是商业公司为主体把内容往网上搬,而 WEB2.0 则是以用户为主,以简便随意方式,通过 blog/podcasting 方式把新内容往网上搬; 从交互性看, WEB1.0 是网站对用户为主; WEB2.0 是以 P2P 为主。 从技术上看, WEB 客户端化,工作效率越来越高。比如像 Ajax 技术 , GoogleMAP/Gmail 里面用得出神入化。 我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,而且提供了这些内容之间的链接关系和浏览路径。在 SNS 里面,内容是以用户为核心来组织的。 WEB2.0 是以用户为核心的互联网。 </li></ul>
  • 13. REST (Representational State Transfer) <ul><li>REST 软件架构 是由 Roy Thomas Fielding 博士在 2000 年首次提出的。他为我们描绘了开发基于互联网的 网络软件 的蓝图。 REST 软件架构是一个抽象的概念,是一种为了实现这一互联网的超媒体分布式系统的 行动指南 。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是 HTTP 协议 。通常我们把 REST 也写作为 REST/HTTP ,在实际中往往把 REST 理解为基于 HTTP 的 REST 软件架构,或者更进一步把 REST 和 HTTP 看作为等同的概念。 </li></ul><ul><li>今天, HTTP 是互联网上应用最广泛的计算机协议。 HTTP 不是一个简单的运载数据的协议,而是一个具有丰富内涵的 网络软件 的协议。它不仅仅能够对于互联网 资源 进行 唯一定位 ,而且还能告诉我们对于该资源进行怎样 运作 。这也是 REST 软件架构当中最重要的 两个理念 。而 REST 软件架构理念是真正理解 HTTP 协议而形成的。有了 REST 软件架构理念出现,才使得软件业避免了对 HTTP 协议的片面理解。只有正确的理论指导,才能避免在软件开发的实际工作过程中少走弯路。 </li></ul>
  • 14. REST 与 URI (资源定位) <ul><li>REST 软件架构之所以是一个超媒体系统,是因为它可以把网络上所有资源进行唯一的定位,不管你的文件是 图片 、文件 Word 还是 视频 文件,也不管你的文件是 txt 文件格式、 xml 文件格式还是其它文本文件格式。它利用支持 HTTP 的 TCP/IP 协议 来确定互联网上的资源。 </li></ul>
  • 15. REST 与 CRUD 原则 <ul><li>REST 软件架构遵循了 CRUD 原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建( Create )、获取( Read )、更新( Update )和销毁( DELETE )就可以完成对其操作和处理了。其实世界万物都是遵循这一规律:生、见、变、灭。所以计算机世界也不例外。这个原则是源自于我们对于数据库表的数据操作: insert (生)、 select (见)、 update (变)和 delete (灭),所以有时候 CRUD 也写作为 RUDI ,其中的 I 就是 insert 。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。 </li></ul>
  • 16. REST 与网络服务 <ul><li>尽管在 Java 语言世界中网络服务目前是以 SOAP 技术为主,但是 REST 将是网络服务的另一选择,并且是真正意义上的网络服务。基于 REST 思想的网络服务不久的将来也会成为是网络服务的主流技术。 REST 不仅仅把 HTTP 作为自己的 数据运输 协议,而且也作为直接进行 数据处理 的工具。而当前的网络服务技术都需要使用其它手段来完成数据处理工作,它们完全独立于 HTTP 协议来进行的,这样增加了大量的复杂软件架构设计工作。 REST 的思想充分利用了现有的 HTTP 技术的网络能力。在德国电视台上曾经出现过一个这样的五十万欧元智力题:如何实现网络服务才能充分利用现有的 HTTP 协议?该问题给出了四个答案:去问微软; WSDL2.0/SOAP1.2 ; WS-Transfer ;根本没有。这个问题告诉我们 HTTP 并不是一个简单的数据传来传去的协议,而是一个聪明的会表现自己的协议,这也许是 REST = Representational State Transfer 的真正含义。 </li></ul><ul><li>实际上目前很多大公司已经采用了 REST 技术作为网络服务,如 Google 、 Amazon 等。在 Java 语言中重要的两个以 SOAP 技术开始的网络服务框架 XFire 和 Axis 也把 REST 作为自己的另一种选择。它们的新的项目分别是 Apache CXF 和 Axis2 。 Java 语言也制定关于 REST 网络服务规范: JAX-RS: Java API for RESTful Web Services (JSR 311) 。相信还会出现更多与 REST 相关的激动人心的信息。 </li></ul>
  • 17. REST 与 AJAX 技术 <ul><li>尽管 AJAX 技术的出现才不到两年时间,但是 AJAX 技术遵循了 REST 的一些重要原则。 AJAX 技术充分利用了 HTTP 来获取网络资源并且实现了 HTTP 没有的对于异步数据进行传输的功能。 AJAX 技术还使得软件更好地实现分布性功能,在一个企业内只要一个人下载了 AJAX 引擎,其它企业内部的人员,就可以共享该资源了。 AJAX 技术遵守 REST 准则的应用程序中简单和可伸缩的架构,凡是采用 AJAX 技术的页面简洁而又丰富,一个页面表现了丰富多彩的形态。 </li></ul><ul><li>AJAX 技术还使用了一种不同于 XML 格式的 JSON 文件格式,这个意义在哪里呢?在 REST 软件架构下我们不能对于 XML 文件进行序列化处理,这样程序员必须要使用自己的 XML 绑定框架。而以序列化的 JavaScript 对象为基础的 JSON 已经获得了广泛认可,它被认为能以远比 XML 更好的方式来序列化和传输简单数据结构,而且它更简洁。这对 REST 是一个极大贡献和补充。 </li></ul><ul><li>当前的网络应用软件还违背了 REST 的“无状态服务器”约束。 REST 服务器只知道自己的状态。 REST 不关心客户端的状态,客户端的状态自己来管理,这是 AJAX 技术的应用之地。通过 AJAX 技术,可以发挥有状态网络客户机的优势。而 REST 的服务器关心的是从所有网络客户端发送到服务器操作的顺序。这样使得互联网这样一个巨大的网络得到有序的管理。 </li></ul>
  • 18. REST 与 Rails 框架 <ul><li>Ruby on Rails 框架(简称 Rails 或者 Rails 框架)是一个基于 Ruby 语言的越来越流行的网络应用软件开发框架。它提供了关于 REST 最好的支持,也是当今应用 REST 最成功的一个软件开发框架。 Rails 框架(从版本 1.2.x 起)成为了第一个引入 REST 作为核心思想的主流网络软件开发框架。在 Rails 框架的充分利用了 REST 软件架构之后,人们更加坚信 REST 的重要性和必要性。 Rails 利用 REST 软件架构思想对网络服务也提供了一流的支持。从最直观的角度看待 REST ,它是网络服务最理想的手段,但是 Rails 框架把 REST 带到了网络应用软件开发框架。这是一次飞跃,让 REST 的思想从网络服务的应用提升到了网络应用软件开发。利用 REST 思想的 simply_restful 插件已经成为了 Rails 框架的核心内容。 </li></ul>
  • 19. REST 安全性 <ul><li>我们把现有基于 SOAP 的网络服务和基于 REST/HTTP 网络服务作个比喻,前者是一种传统的 寄信 方式,而后者是现代网络的 电子邮件 方式。要是是寄信和电子邮件都有病毒存在的话,传统的寄信被送到对方就很危险,而电子邮件是开发的,电子邮件供应商比如 Google 为我们检查了电子邮件是否有病毒。这里并不是说明 SOAP 网络服务消息包含义病毒,而是说明 HTTP 是无法处理 SOAP 信息包究竟好不好,需要额外的软件工具解决这一问题,包括防火墙也用不上和管不了。 </li></ul><ul><li>REST/HTTP 网络服务的信息包可以被防火墙理解和控制。你可以按照操作和链接进行过滤信息包,如你可以规定从外部来的只能读取( GET 操作)自己服务器的资源。这样对于系统管理员而言使得软件管理更为简单。 REST 的安全性还可以利用传输安全协议 SSL/TLS 、基本和摘要式认证( Basic und Digest Authentication )。除了这些 REST 自身的安全性功能外,还可以利用像基于信息的 Web Services Security ( JSR 155 )作为 REST 不错的补充。 </li></ul>
  • 20. 参考文献 <ul><li>中文参考文献 </li></ul><ul><li>http://www.ibm.com/developerworks/cn/web/wa-ajaxarch / </li></ul><ul><li>http://www.ibm.com/developerworks/cn/java/j-cb08016/ </li></ul><ul><li>Roy Thomas Fielding 博士论文中文版本 </li></ul><ul><li>http://e2c.91yee.com/columns/ </li></ul><ul><li>Roy Thomas Fielding 博士论文英文版本 </li></ul><ul><li>http:// www.ics.uci.edu/~fielding/pubs/dissertation/top.htm </li></ul>
  • 21. RSS <ul><li>RSS 是在线共享内容的一种简易方式(也叫聚合内容, Really Simple Syndication )。通常在时效性比较强的内容上使用 RSS 订阅能更快速获取信息,网站提供 RSS 输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持 RSS 的聚合工具软件(例如 SharpReader,NewzCrawler 、 FeedDemon ),在不打开网站内容页面的情况下阅读支持 RSS 输出的网站内容。 </li></ul><ul><li>说得更加简单一点, RSS 就是一种用来分发和汇集网页内容的 XML 格式!如果你还是不太明白,没有关系, RSS 是什么其实并不重要,重要的是 RSS 可以做什么,下面我们就来了解一下, RSS 能给我们带来什么? </li></ul>
  • 22. RSS 可以干什么 <ul><li>1. 订阅 BLOG( 你可以订阅你工作中所需的技术文章;也可以订阅与你有共同爱好的作者的 Blog ,总之,你对什么感兴趣你就可以订什么 ) 2. 订阅新闻 ( 无论是奇闻怪事、明星消息、体坛风云,只要你想知道的,都可以订阅 ) 你再也不用一个网站一个网站,一个网页一个网页去逛了。只要这将你需要的内容订阅在一个 RSS 阅读器中,这些内容就会自动出现你的阅读器里,你也不必为了一个急切想知道的消息而不断的刷新网页,因为一旦有了更新, RSS 阅读器就会自己通知你! </li></ul>
  • 23. RSS 阅读器 <ul><li>目前, RSS 阅读器 基本可以分为两类。 第一类大多数阅读器是运行在计算机桌面上的应用程序,通过所订阅网站的新闻供应,可自动、定时地更新新闻标题。在该类阅读器中,有 Awasu 、 FeedDemon 和 RSSReader 这三款流行的阅读器,都提供免费试用版和付费高级版。国内最近也推出了几款 RSS 阅读器:周博通 , 看天下,博阅。另外,开源社区也推出了很多优秀的阅读器, RSSOWl( 完全 java 开发,点击下载 ) 它不仅是完全支持中文界面,而且还是完全的免费软件! ( 后面我们就将以开源软件周博通和 rssowl 为例,为大家介绍怎样来使用 RSS 阅读器 - 周伯通,怎样使用 RSS 阅读器 -rssowl ) ) 第二类新闻阅读器通常是内嵌于已在计算机中运行的应用程序中。例如, NewsGator 内嵌在微软的 Outlook 中,所订阅的新闻标题位于 Outlook 的收件箱文件夹中。另外, Pluck 内嵌在 Internet Explorer 浏览器中! 另外, FireFox 浏览器内置对 RSS 支持,可以使用 Firefox 订阅 RSS 哦。 </li></ul>
  • 24. RSS 的联合( Syndication )和聚合( Aggregation ) <ul><li>发布一个 RSS 文件( RSS Feed )后,这个 RSS Feed 中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的 XML 格式,所以也能在其他的终端和服务中使用,如 PDA 、 手机 、邮件列表等。而且一个网站联盟(比如专门讨论旅游的网站系列)也能通过互相调用彼此的 RSS Feed ,自动的显示网站联盟中其他站点上的最新信息,这就叫着 RSS 的联合。这种联合就导致一个站点的内容更新越及时、 RSS Feed 被调用的越多,该站点的 知名度 就会越高,从而形成一种良性循环。 而所谓 RSS 聚合,就是通过软件工具的方法从网络上搜集各种 RSS Feed 并在一个界面中提供给读者进行阅读。这些软件可以是在线的 WEB 工具,如 http:// my.netscape.com , http:// my.userland.com , http:// www.xmltree.com , http:// www.moreover.com , http:// www.oreillynet.com/meerkat 等,当然,可以使用我们以上提到的客户端工具。 </li></ul>
  • 25. RSS 的未来发展 <ul><li>随着越来越多的站点对 RSS 的支持, RSS 已经成为目前最成功的 XML 应用。 RSS 搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。相信很快我们就会看到大量基于 RSS 的专业门户、聚合站点和更精确的搜索引擎。 </li></ul>
  • 26. 常见 RSS 订阅工具 <ul><li>BitsCast RSS News Reader/Podcaster http:// www.bitscast.com /software onelurv http:// onelurv.com / BOKEE GreatNews   http:// www.curiostudio.com / HEXUN RSS READER 和讯博揽 iSpace Desktop Liferea   NewsFire NetNewsWire Plazoo RSS Bandit RSSOwl http:// www.rssowl.org / RSS Reader SharpReader Straw Vienna http://vienna-rss.sourceforge.net / 百博 http:// www.bbreader.com 新浪点点通阅读器 </li></ul>
  • 27. 参考文献 <ul><li>1 、 RSS 0.9 Specification http://www.purplepages.ie/RSS/netscape/rss0.90.html </li></ul><ul><li>2 、 RSS 1.0 Specification http://web.resource.org/rss/1.0/spec </li></ul><ul><li>3 、 RSS 2.0 Specification http://http://192.168.18.100:6666/view/list.exl </li></ul>
  • 28. ATOM <ul><li>ATOM 是一种订阅网志的格式。它与 RSS 相比来讲,有更大的弹性。 atom 是一种基于 XML 的文档格式以及基于 HTTP 的协议,它被站点和客户工具等用来聚合网络内容,包括 weblog 和新闻标题等 , 它借鉴了各种版本 RSS 的使用经验 Atom 正走在通往 IETF 标准的路上,在这之前, Atom 的最后一个版本是 &amp;quot;Atom 0.3&amp;quot; ,并且已经被相当广泛的聚合工具使用在发布和使用 (consuming) 上。值得一提的是 , Blogger 和 Gmail 这两个由 Google 提供的服务正在使用 Atom. </li></ul>
  • 29. 开放 API <ul><li>以前的开放 API (应用程序接口)主要指桌面应用软件,希望通过开放 API 融合更多的应用。在 WEB1.0 时代只有少数网站,比如 EBAY, 亚马逊公司( Amazon )、雅虎公司、 Google 公司等,在设计之初就遵循各种工业化标准,进而开放 API 接口,正是由于这些开放的 API ,他们获得 了不少有趣、有意思的应用。但大多数公司当时还没有这种意识,不过在 Web 2.0 时代,开放 API 已经成为不可忽视的趋势。 对于公司来说,技术领域的竞争已经演化为标准之争,标准的形成在于有多少人在使用,因此开放 API 就意味更多的人采用,也就意味着标准。 Google 公司 显然深谙此道。它所推出的诸多产品都是基于开放的 API 标准。最典型的例子就是 Google map ,开放 Google Map 的 API 后, Google 公司无需花费力气做更多的市场推广,其他公司就会主动地整合它的应用。如前文我们提到的美国房地产交易地图网就是在其网站 中主动整合 Google Map 。正是看到开放后的巨大前景,微软、雅虎、 Skype 也纷纷加入其中。 </li></ul>
  • 30. AJAX <ul><li>AJAX 的全称是 Asynchronous JavaScript and XML ,它不是一种技术而是数种技术的组合。 AJAX 采用远程脚本调用技术,通过 JavaScript 语言与 XML Http Request 对象来实现数据请求,将处理由服务器转移到客户端,减少了服务器的资源占用,加快了数据处理的速度。采用 AJAX 开发的软件能让你在使用网络应用软件时感觉就象在本机上一样。 目前 AJAX 技术已经广泛应用于网络应用软件开发中, Google 也许是 AJAX 技术开发投入最大收获最多的公司, AJAX 已经成功应用于 GMail 、 Google Suggest 和 Google Maps 等网络应用软件中。 除了 Google 以外还有更多的公司在采用 AJAX 。在 AJAX 的帮助下 Zimbra 公司开发的电子邮件中,比 GMail 和 HotMail 更加互动。 Meebo.com 公司也在即时通讯软件中采用 AJAX 技术,以创造更好的用户体验。即使微软也不能阻挡 AJAX 的魅力,微软声称将在下一代 HotMail 中加入 AJAX 工具条。 </li></ul>
  • 31. Ajax 工具和技术综述 <ul><li>Ajax (Asynchronous JavaScript + XML) 编程技术正逐渐主导 Web 应用程序开发领域。每天都有新的开发人员步入 Ajax 开发的殿堂,他们拥有不同的开发背景。本系列的第 1 部分将提供来自 IBM® Ajax 开发人员专家组的 Ajax 开发资源备忘单。作者根据他们自己的 ramp-up 经验为您提供了一些实用的信息,这些信息可以帮助您快速进入高效 Ajax 开发的轨道。 </li></ul><ul><li>Ajax 是一种 Web 应用程序客户机技术,它结合了 JavaScript 、层叠样式表( Cascading Style Sheets , CSS )、 HTML 、 XMLHttpRequest 对象和文档对象模型( Document Object Model , DOM ),关于各种标准的更多信息,请参阅 参考资料 。运行在浏览器上的 Ajax 应用程序以一种异步的方式与 Web 服务器通信,并且只更新页面的一部分。通过利用 Ajax 技术,可以提供丰富的、基于浏览器的用户体验。 </li></ul><ul><li>在开始 Ajax 之旅以前,需要熟悉很多不同的语言、标准、工具和库。一开始就要在不同选项之间做出选择并组合出一个开发环境来可能有些勉为其难。作者将根据他们自己的 ramp-up (项目初始阶段的准备工作)经验帮助您在旅途中避免可能遇到的一些比较常见的、令人厌烦的问题。 </li></ul>
  • 32. Ajax 工具和技术综述 <ul><li>Ajax 将改变用户在网站上的体验,之前的单击 - 显示页面式的体验将变成具有交互性、灵活性的桌面应用程序体验。用户可以避免页面重新加载,避免等待下一部分内容的呈现。您可能在想,这一切听起来是不错,但是如何才能做得到呢?为了回答这个问题,先来看看 Ajax 技术背后的一些幕后故事。 </li></ul><ul><li>Ajax 是以下 Web 技术和标准的集合,它允许使用客户端的机器在背后运行应用程序逻辑的重要部分,而不仅仅是呈现应用程序的输出: </li></ul><ul><li>超文本标记语言( Hypertext Markup Language , HTML ):定义最终呈现给用户的内容。 </li></ul><ul><li>层叠样式表( Cascading Style Sheets , CSS ):定义所呈现内容的样式(或装饰)。 </li></ul><ul><li>文档对象模型( Document Object Model , DOM ):一种 API ,浏览器使用它将被呈现内容公开给 JavaScript 脚本。然后,脚本可以使用 DOM 在用户看到内容之前动态地修改内容。 </li></ul><ul><li>XmlHttpRequest 对象:为浏览器与服务器之间的交互提供便利,通过 JavaScript 脚本调用。 </li></ul><ul><li>JavaScript :在浏览器中执行的一种编程语言,将所有其他的 Ajax 组成部分黏合在一起。脚本可以侦听浏览器中发生的事件(例如单击一个按钮),并使用 XmlHttpRequests 回调服务器以对事件作出反应,然后根据返回的结果修改 DOM 树。 </li></ul><ul><li>所有这些技术都在用户的 Web 浏览器中执行,用户的 Web 浏览器充当执行 Ajax 程序的平台。 </li></ul>
  • 33. Ajax 工具和技术综述 <ul><li>如果要使用 Ajax ,那么有一点值得格外注意:组成它的技术虽然是基于标准的,但又是特定于浏览器的。换句话说,同一个应用程序在不同的浏览器上可能表现出不同的行为。然而,由于既不可能限制用户使用特定的浏览器,又不可能忽略客户机的浏览器可能不支持 CSS 或 DOM 这一事实,因此,作为应用程序的创建者,您需要理解各种不同浏览器之间的差异。 </li></ul><ul><li>要成为一名高效的 Ajax 开发人员,需要: </li></ul><ul><li>了解形成 Ajax 开发基础的技术。 </li></ul><ul><li>理解可用的运行时平台和 Web 浏览器。 </li></ul><ul><li>开发 Ajax 应用程序时使用支持各种语言的 IDE 。 </li></ul><ul><li>拥有用于各种环境和语言的调试器和应用程序测试工具。 </li></ul>
  • 34. 信息源 <ul><li>developerWorks 上由 Brett McLaughlin 撰写的 掌握 Ajax 系列是最好的 Ajax 教程之一。该系列不要求预先知道多少 Ajax 编程知识,并且描述了各种与 Ajax 相关的技术。如果您想更好地理解 Web 架构,那么可能需要对 Representational State Transfer (REST) 有所熟悉。“ How to Create a REST Protocol” (请参阅 参考资料 )这篇文章可以作为这一方面很好的入门资料。 </li></ul><ul><li>阅读完 掌握 Ajax 系列,并且亲自开始一些开发之后,您还将需要一些其他的参考信息。 W3Schools (请参阅 参考资料 )提供了核心 Ajax 技术( JavaScript 、 CSS 、 HTML 、 DOM 、 XML 等)的在线参考信息。 </li></ul><ul><li>如果您使用的是 Mozilla Firefox 浏览器,那么应该使用 DevEdge 侧栏(请参阅 参考资料 )。这些侧栏包含各种 Ajax 技术标准的索引,您可以使用它们作为参考指南。 </li></ul><ul><li>最后,如果您想到 Ajax 社区去感受一下,那么应该订阅 Ajaxian 博客(请参阅 参考资料 )。 </li></ul>
  • 35. 浏览器作为运行时环境 <ul><li>Web 浏览器不仅是 Ajax 部署环境,同时还是调试环境。大多数浏览器都可以添加调试辅助工具,例如 DOM 树查看器或调试器。文章下节将对以下各种流行的浏览器作一个概述: </li></ul><ul><li>Microsoft® Internet Explorer (IE) </li></ul><ul><li>Firefox </li></ul><ul><li>Safari </li></ul>
  • 36. Internet Explorer <ul><li>IE 一直是大多数用户的选择。 IE6 是一款成熟的浏览器,具有非常深的市场底蕴。很多 CSS 和 DOM 特性在 IE6 中不受支持,或者以一种专用的形式提供。使用 IE6 的开发人员可能会遇到以下一些问题: </li></ul><ul><li>缓慢的 JavaScript 解释器和不一致的标准实现。 </li></ul><ul><li>缺少透明的 PNG 支持。 </li></ul><ul><li>DOM 事件:一个事件可能在 Firefox 中使用一个名称,而在 IE 中又使用另一个名称。有些事件的调用顺序不一样,在 IE 中和在 Firefox 中相同的事件对象可能具有不同的属性。有关这一问题的更多信息,请阅读 “把应用程序从 Internet Explorer 迁移到 Mozilla” (请参阅 参考资料 )。 </li></ul><ul><li>未实现的 CSS 属性,例如 minimum/maximum height 、 selectors 等等。 </li></ul><ul><li>尽管存在这些问题,您还是应该相信大多数用户都是使用这个浏览器。也可以试着使用各种不同的库从而在一定程度上填补 IE6 的不足,例如 /IE7/ (请参阅 参考资料 )。 </li></ul><ul><li>IE7 在 IE6 的基础上有了很多明显的改进,例如对标签的支持。对于开发人员而言,隐藏的改进更为重要。 IE7 提供了一个性能更佳的 JavaScript 解释器,并修复了 IE6 中的很多缺陷(例如 CSS ),使得最遵从标准的 Ajax 应用程序只需要少量的修改便可以在该浏览器上运行。 </li></ul>
  • 37. IE 调试辅助工具 <ul><li>可以使用以下工具在 IE 中调试应用程序: </li></ul><ul><li>IE Developer Toolbar :允许更好地控制 IE 环境(缓存, cookie ),浏览 DOM 树,以及浏览和操纵元素的样式。在分析由应用程序生成的页面时,这是非常有用的工具。( IE Developer Toolbar 可以从 Microsoft 下载。 参考资料 中提供了下载链接。) </li></ul><ul><li>Microsoft Script Debugger: 随 Microsoft Office (可以从 Microsoft 下载,请参阅 参考资料 )一起发布,通过它可以在 JavaScript 代码中设置断点,观察变量,还可以执行常规的调试例程。注意,在调试时,建议在每个调试会话之前通过 IE Developer Toolbar 禁用缓存,否则后面会调试缓存版本的代码。 </li></ul>
  • 38. IE 调试辅助工具 <ul><li>IE 相关浏览器 </li></ul><ul><li>可以使用 Trident ( IE 浏览器引擎)创建 “新” 的浏览器,例如 Maxthon 。这里新字打上了引号,因为从开发人员的角度来看,浏览器的关键特(例如对 Ajax 的支持)仍然相同。(请参阅 参考资料 了解更多关于 Trident 的知识。) </li></ul>
  • 39. Mozilla Firefox <ul><li>虽然 Firefox 已经出来好几个版本,但是这里只讨论 Firefox 2.0 。开发人员和超级用户常常使用 Firefox ,它是 UNIX®- 类操作系统的首选,而且是开放源码的,除了 IE 之外,它是最流行的浏览器。 </li></ul><ul><li>Firefox 有一个速度很快的 JavaScript 解释器,并且具有各种 Web 标准的优异的实现。由于它的 Ajax 友好性,我们强烈建议将 Firefox 用于大多数 Ajax 开发。通常,很多 Ajax 开发人员都是在 Firefox 上开始应用程序开发的,然后才转而使用其它浏览器。 </li></ul>
  • 40. Firefox 调试辅助工具 <ul><li>Firefox 具有一个强大的、开放的扩展机制,它的社区借助这种机制创建了大量的 Web 开发辅助工具。然而,到目前为止, Firebug (请参阅 参考资料 )是其中最为流行的。(要了解关于 Firebug 功能的更多细节,请参阅 “ Ajax Debugging with Firebug ” )。 Firebug 是一个集成的扩展,通过它可以: </li></ul><ul><li>使用断点、变量查看和逐步方式来调试 JavaScript 代码。 </li></ul><ul><li>查看网络状况。 </li></ul><ul><li>查看和优化各种不同元素的 DOM 树和 CSS 。 </li></ul><ul><li>Firebug 1.0 的强大性和灵活性为 Ajax 开发树立了里程碑,也是使用 Firefox 作为首选开发浏览器的有力的理由。 </li></ul><ul><li>Firefox 相关的浏览器 </li></ul><ul><li>一些浏览器,例如 Camino ,使用了 Firefox 的布局引擎 Mozilla Gecko (请参阅 参考资料 )。这些浏览器通过一个匹配的 Gecko 版本能够提供与 Firefox 相同的功能。 </li></ul>
  • 41. Safari <ul><li>Safari 是随 MacOSX 一起发布的浏览器(从第 3 版开始,也在 Windows® 上运行。) Safari 虽然比 Firefox 和 IE7 快很多,但是缺少对标准的支持(不过最新的 WebKit 构建有了一些改进;文章下节将会更详细地介绍 WebKit )。还应注意, Safari 开发人员社区规模远远小于 Firefox 和 IE 的开发人员社区。因此,网上关于 Safari 的信息较少,而且很多库都没有在 Safari 上经过良好的测试。 </li></ul>
  • 42. Safari 调试辅助工具 <ul><li>Safari 浏览器引擎是在一个名为 WebKit 的开放源码项目(请参阅 参考资料 )中开发的。为了在 Safari 中调试应用程序,建议使用一个 WebKit 构建。该构建包括: </li></ul><ul><li>经过定制的带有 CSS 和 DOM 查看器的浏览器。 </li></ul><ul><li>Drosera: 一个 JavaScript 调试器。 Drosera 可用于调试应用程序,但是与 Firebug 相比其特性比较有限。 </li></ul><ul><li>如果您坚持在 Safari 中测试应用程序,那么可以打开 Safari Debug 菜单,通过该菜单可以查看 DOM 树、 CSS 和缓存等。 </li></ul>
  • 43. Safari 相关的浏览器 <ul><li>WebKit 应用于很多浏览器,其中最引入注目的是 OmniWeb 。 </li></ul><ul><li>Ajax IDE 和工具 </li></ul><ul><li>在开发新的 Ajax 应用程序时,如果所使用的 IDE 支持所有 Ajax 相关技术并且提供快捷、友好的开发环境和 UI 将会使您如虎添翼。在选择一款 Ajax IDE 时,需要考虑以下一些特性: </li></ul><ul><li>具有自动完成、颜色突出显示、错误提示等功能的语法制导编辑功能(用于 HTML 、 CSS 、 JavaScript 和 DOM ) </li></ul><ul><li>各种技术的相关文档 </li></ul><ul><li>集成的 JavaScript 调试器 </li></ul><ul><li>网络监控功能 </li></ul><ul><li>DOM 内省 </li></ul><ul><li>框架集成 </li></ul><ul><li>虽然您可能会考虑购买一个 IDE ,但其实 Eclipse 和它的相关插件就提供了一个功能完善的、基于开放源码的 Ajax IDE ,这个 IDE 可以免费下载。本节将讨论以下这些基于 Eclipse 的、包括插件的 Ajax IDE : </li></ul><ul><li>含 Web 工具箱( toolkit )的 Eclipse </li></ul><ul><li>Eclipse ATF </li></ul><ul><li>Aptana </li></ul>
  • 44. 含有 Web 工具箱的 Eclipse <ul><li>如果您是一名 Java™ 开发人员,负责服务器端的 Java 开发,那么使用 Eclipse Web 工具箱也是开始基本 Ajax 开发的简单易行的方法。通过添加 Eclipse 的 Web 工具(请参阅 参考资料 ),可以获得一个可用于开发 Web 工件的基本环境,还可以获得可编辑 HTML 、 CSS 和 JavaScript 文件的编辑器和编辑工具。 </li></ul><ul><li>注意, Eclipse Web 工具环境不限于 Ajax 开发,它还支持侧重于服务器端的 Web 应用程序开发。因此,它提供了诸如语法突出显示和基本代码完成之类的核心功能。它并未提供特定于 Ajax 开发任务的调试功能或 DOM 操纵功能。 </li></ul>
  • 45. Eclipse ATF <ul><li>您可以安装 Eclipse Ajax Toolkit Framework (ATF) 环境(请参阅 参考资料 ),并将其与 Eclipse Web 工具箱相结合,从而产生一个强大的、支持 Ajax 开发需求所有方面的环境。 ATF 提供了以下特性: </li></ul><ul><li>一个 DOM 浏览器和 CSS 运行时编辑器 </li></ul><ul><li>一个 JavaScript 调试器(通过利用 Mozilla XUL 运行程序) </li></ul><ul><li>网络流量监控 </li></ul><ul><li>通过库配置文件实现常用库的简单库集成 </li></ul><ul><li>与 JSLint (请参阅 参考资料 )的集成,以执行 JavaScript 验证 </li></ul><ul><li>该工具箱中一个非常有价值的特性是在集成的 XUL 运行程序中运行、测试和检查应用程序。 </li></ul>
  • 46. SOA and Web services <ul><li>面向服务的体系结构( Service-Oriented Architecture , SOA )是一种 IT 体系结构风格,支持将您的业务转换为一组相互链接的服务或可重复业务任务,可在需要时通过网络访问这些服务和任务。这个网络可以是本地网络、 Internet ,也可以分散于各地且采用不同的技术,通过对来自纽约、伦敦和中国香港的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。可以对这些服务进行结合,以完成特定的业务任务,从而让您的业务快速适应不断变化的客观条件和需求。 </li></ul><ul><li>当在战略业务目标的引导下进行 SOA 实现工作时,可确保对业务进行积极转换,并能够实现 SOA 的好处,具体如下: </li></ul><ul><li>IT 与业务的一致性 </li></ul><ul><li>IT 资产的最大化重用 </li></ul><ul><li>这些有助于确保在耗资巨大的 IT 项目中的投资能够给业务带来长远的价值。 </li></ul><ul><li>那么,该如何步入 SOA 的领地,它又会如何影响您的业务呢? IBM 确定了五个切入点,可确保所进行的每个基于 SOA 的解决方案都能提供真正的业务价值。每个切入点都提供了相应的场景或已定义的方法,以帮助实现相应的技术,从而实现每个切入点所定义的业务价值。 </li></ul>
  • 47. SOA 切入点 <ul><li>IBM 定义的五个切入点(均基于实际的客户经验确定)能帮助您和您的业务实现预定义的 SOA 解决方案,从而从中获益。这些切入点同时受到业务需求(人员、流程和信息切入点)和 IT 需求(连接性和重用切入点)的驱动。以下是五个切入点的一般描述信息: </li></ul><ul><li>人员 : SOA 的这个切入点关注用户体验,以帮助生成调用和实现更好的协作,从而获得一致的人员与流程交互,提高业务效率。例如,通过使用 SOA ,可以创建基于服务的 Portlet 来提高此协作。 </li></ul><ul><li>流程 :流程切入点可帮助企业了解其业务中发生的情况,从而支持其对现有业务模型进行改进。通过使用 SOA ,可以将业务流程转换为可重用且具有灵活性的服务,从而改进和优化这些新流程。 </li></ul><ul><li>信息 :通过使用 SOA 的这个切入点,能以一致而可见的方式利用公司中的信息。通过在所有业务领域提供这个一致而受信任的信息,可促进企业各个领域的创新工作,从而更为有效地进行竞争。通过使用 SOA ,可以更好地控制信息,而且通过信息与业务流程的结合,可以发现很多有意义的新关系。 </li></ul><ul><li>连接性 :利用连接性切入点,可以有效地连接基础设施,从而将企业中的所有人员、流程和信息整合到一起。通过在服务间和整个环境中实现灵活的 SOA 连接,可以获取现有业务流程并在不需要太多工作的情况下通过其他业务通道提供此流程。甚至还能以安全的方式连接防火墙外的外部合作伙伴。 </li></ul><ul><li>重用 :通过 SOA 重用服务,可以充分利用企业中已经存在的服务。通过对现有资源进行构建,可以简化业务流程,在整个企业内确保一致性并缩短开发时间。所有这些将能帮助您节约大量的时间和资金。另外,还能减少服务中的功能重复,并能获得使用企业中为大家所熟悉的经过验证的核心应用程序的好处。 </li></ul>
  • 48. SOA 场景 <ul><li>之所以定义切入点,是为了帮助客户了解如何认识 SOA 。不过,还需要进一步的实现细节来帮助客户的业务和 IT 团队开始 SOA 之旅。而这正是需要更为具体的场景的原因。 </li></ul><ul><li>同样, IBM 技术专家在参考实际的客户经验和多年的积累的情况下,认识到业务部门在设计和实现 SOA 解决方案的过程中经常会遵循多个常见的场景。通过定义这些场景, IBM 为您提供了预定义的真实方法,帮助实现 SOA 解决方案。每个场景都提供了经过测试和集成的产品或实现,用于实现此场景。因此,可以将这些场景映射到您公司具体的目标和需求,从而很好地确定自己如何实现这些好处。 </li></ul>
  • 49. SOA 场景 <ul><li>服务创建 :创建灵活的基于服务的业务应用程序。新的面向服务的应用程序将业务行为作为服务公开,同时还能重用作为服务公开的业务逻辑。 </li></ul><ul><li>服务连接性 :无论何时何地使用何种工具,都能使用中间层服务网关或总线让各种应用程序访问核心服务集,从而通过无缝的消息和信息流将企业中的人员、流程和信息连接起来。 </li></ul><ul><li>交互与协作服务 :必须通过多种设备(如浏览器、 PC 和移动设备)向人类用户提供一个或一组服务。交互与协作服务还可通过将这些服务聚合为视图,以交付信息并在业务流程的上下文进行交互,从而提高人员工作效率。 </li></ul><ul><li>SOA 所支持的业务流程管理 :业务流程管理是将软件功能和业务专业知识相结合来加速流程改进和促进业务创新的学科。 </li></ul><ul><li>作为服务的信息 :“作为服务的信息”可在企业内作为可重用服务访问复杂的异类数据源。 </li></ul><ul><li>SOA 设计 :通过一组角色、方法和构件保持业务设计建模和 IT 解决方案设计的一致,以提供一组供优化的显式业务流程和用于组合及集成的服务。 </li></ul><ul><li>SOA 治理 :建立并执行 SOA 开发与运行时流程。定义策略、流程和工具来监视服务的归属、使用人、使用方式及提供时间。 </li></ul><ul><li>SOA 安全性和管理 :作为 IT 服务管理( IT Service Management , ITSM )服务一部分的发现、监视、保护、供应、更改和生命周期管理工作。 </li></ul>
  • 50. SOA 场景 <ul><li>之前讨论的五个 SOA 切入点直接映射到(即具有一对一关系)本列表中的前五个场景。(例如,重用直接映射到服务创建,而连接性直接映射到服务连接性。)我们还将讨论其他 SOA 场景,这些场景均以上面的五个切入点为基础。即 SOA 设计、 SOA 治理与 SOA 安全性以及管理。 </li></ul><ul><li>让我们花一点时间给出一个实际的切入点、场景及其实现。在 图 1 中,可以看到重用切入点如何直接映射到服务创建场景,而后者包含四个实现,其中一个名为“从头创建新服务” (create new services from scratch) 。因此,将这些加以结合,在此示例中,您将通过重用切入点进入 SOA ,此切入点可帮助您对公司的现有服务加以充分利用。如果随后发现缺少主要 SOA 服务,“从头创建新服务”实现详细说明了如何创建 SOA 服务。 </li></ul>
  • 51. &nbsp;
  • 52. SOA 切入点和场景 <ul><li>您现在应该已经对五个 SOA 切入点和八个场景很熟悉,而且也应该知道了每个场景如何通过多个实现帮助您实现 SOA 解决方案。 图 1 给出了一个示例,说明了可以如何将这些部分进行混合和匹配,以提供任何企业都能够利用的各种 SOA 方法。为了进一步说明这些方法,在本文剩下的部分,我们将了解 JK Enterprises 如何在整个企业实现 SOA 所带来的很多好处。 </li></ul>
  • 53. SAAS <ul><li>SaaS 是 Software-as-a-service (软件即服务)的简称,它是一种通过 Internet 提供软件的模式,用户不用再购买软件,而改用向提供商租用基于 Web 的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,对于许多小型企业来说, SaaS 是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要,近年来, SaaS 的兴起已经给传统套装软件厂商带来真实的压力。 </li></ul>
  • 54. SaaS 服务提供模式 <ul><li>SaaS 服务提供商为 中小企业 搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘 IT 人员,只需前期支付一次性的项目实施费和定期的软件租赁服务费,即可通过互联网享用信息系统。服务提供商通过有效的技术措施,可以保证每家企业数据的安全性和保密性。企业采用 SaaS 服务模式在效果上与企业自建信息系统基本没有区别,但节省了大量用于购买 IT 产品、技术和维护运行的资金,且像打开自来水龙头就能用水一样,方便地利用信息化系统,从而大幅度降低了中小企业信息化的门槛与风险。 </li></ul>
  • 55. SaaS 服务的优势 <ul><li>对企业来说, SaaS 的优点在于:  ⒈ 从技术方面来看:企业无需再配备 IT 方面的专业技术人员,同时又能得到最新的技术应用,满足企业对信息管理的需求。  ⒉ 从投资方面来看:企业只以相对低廉的“月费”方式投资,不用一次性投资到位,不占用过多的营运资金,从而缓解企业资金不足的压力;不用考虑成本折旧问题,并能及时获得最新硬件平台及最佳解决方案。  ⒊ 从维护和管理方面来看:由于企业采取租用的方式来进行物流业务管理,不需要专门的维护和管理人员,也不需要为维护和管理人员支付额外费用。很大程度上缓解企业在人力、财力上的压力,使其能够集中资金对核心业务进行有效的运营。 </li></ul>
  • 56. 计算环境的根本性变革 <ul><li>虚拟化技术 </li></ul><ul><li>虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。 </li></ul><ul><li>CPU 的虚拟化技术可以单 CPU 模拟多 CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 </li></ul>
  • 57. 虚拟化技术 <ul><li>虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的 CPU 或者是虚拟主机上;而超线程技术只是单 CPU 模拟双 CPU 来平衡程序运行性能,这两个模拟出来的 CPU 是不能分离的,只能协同工作。 虚拟化技术也与目前 VMware Workstation 等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。 </li></ul>
  • 58. 虚拟化技术 <ul><li>纯软件虚拟化解决方案存在很多限制。“客户”操作系统很多情况下是通过 VMM(Virtual Machine Monitor ,虚拟机监视器 ) 来与硬件进行通信,由 VMM 来决定其对系统上所有虚拟机的访问。 ( 注意,大多数处理器和内存访问独立于 VMM ,只在发生特定事件时才会涉及 VMM ,如页面错误。 ) </li></ul><ul><li>在纯软件虚拟化解决方案中, VMM 在软件套件中的位置是传统意义上操作系统所处的位置,而操作系统的位置是传统意义上应用程序所处的位置。这一额外的通信层需要进行二进制转换,以通过提供到物理资源 ( 如处理器、内存、存储、显卡和网卡等 ) 的接口,模拟硬件环境。这种转换必然会增加系统的复杂性。 </li></ul><ul><li>此外,客户操作系统的支持受到虚拟机环境的能力限制,这会阻碍特定技术的部署,如 64 位客户操作系统。在纯软件解决方案中,软件堆栈增加的复杂性意味着,这些环境难于管理,因而会加大确保系统可靠性和安全性的困难。 </li></ul>
  • 59. 虚拟化技术 <ul><li>而 CPU 的虚拟化技术是一种硬件方案,支持虚拟技术的 CPU 带有特别优化过的指令集来控制虚拟过程,通过这些指令集, VMM 会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。 </li></ul><ul><li>虚拟化技术可提供基于芯片的功能,借助兼容 VMM 软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化了 VMM 设计,进而使 VMM 能够按通用标准进行编写,性能更加强大。 </li></ul><ul><li>另外,在纯软件 VMM 中,目前缺少对 64 位客户操作系统的支持,而随着 64 位处理器的不断普及,这一严重缺点也日益突出。而 CPU 的虚拟化技术除支持广泛的传统操作系统之外,还支持 64 位客户操作系统。 </li></ul>
  • 60. 虚拟化技术 <ul><li>两大 CPU 巨头 Intel 和 AMD 都想方设法在虚拟化领域中占得先机,但是 AMD 的虚拟化技术在时间上要比 Intel 落后几个月。 </li></ul><ul><li>Intel 自 2005 年末开始便在其处理器产品线中推广应用 Intel Virtualization Technology(Intel VT) 虚拟化技术。目前, Intel 已经发布了具有 Intel VT 虚拟化技术的一系列处理器产品,包括桌面平台的 Pentium 4 6X2 系列、 Pentium D 9X0 系列和 Pentium EE 9XX 系列,以及服务器 / 工作站平台上的基于 Paxville 核心的 Xeon 系列;同时绝大多数的 Intel 下一代主流处理器,包括 Merom 核心移动处理器, Conroe 核心桌面处理器, Woodcrest 核心服务器处理器,以及基于 Montecito 核心的 Itanium 2 高端服务器处理器都将支持 Intel VT 虚拟化技术。 </li></ul><ul><li>而 AMD 的具有代号为“ Pacific” 虚拟化技术的 CPU 不久也会发布。 </li></ul>
  • 61. 软件过程新方法 <ul><li>EssUP ( Essential Unified Process ) </li></ul><ul><li>精炼统一过程 软件过程的一个新鲜起点 </li></ul><ul><li>精炼统一过程( Essential Unified Process )结合了来自统一过程阵营、敏捷阵营、过程改进阵营的实践。 </li></ul><ul><li>精炼统一过程 (EssUP) -- Essential Unified Process ,字面意思还可翻译为“基本统一过程”、“实质统一过程” ... 等。翻译成“精炼”,因为觉得原来的 RUP 太臃肿沉重。 </li></ul><ul><li>看到了过程的 吸收、演变和改进 ,发现 EssUP 增加了不少为实际开发以及开发者的着想,但并不都是 EssUP 独有或最新的。只有实践才能检验 EssUP ,一切结论现在还为时过早,对待新东西我们要大胆学习,谨慎应用。 </li></ul>
  • 62. EssUP <ul><li>精炼统一过程( EssUP ) EssUP 是建立在现代软件开发实践基础之上的新过程。 EssUP (www.ivarjacobson.com) 是一个新鲜起点,它慎重地集成了来自 UP 阵营、敏捷阵营、过程改进阵营的成功实践。 </li></ul><ul><li>我们需要一个新过程的原因可能是下列之一 : </li></ul><ul><li> • 传统软件过程过于沉重,没有一个人愿意阅读又大又长的过程描述。 • 过程必须聚焦于支持开发者,而不仅仅是过程专家。 • 除了过程质量,过程也必须帮助团队获得好的产品质量,不仅仅是通过 CMMI ,也包括交付好的软件。任何软件开发过程的焦点必须是在生产好的软件上。 • 过程必须提供规程的敏捷性,平衡管理的需求而不遏制创造力。 • 这种方法必须让项目团队(没有过程工程师帮助的开发者)容易添加好的实践到现有的过程中。 • 过程应该授权于团队。 </li></ul>
  • 63. 精炼统一过程 <ul><li>全神贯注于针对所有项目的精炼的适用性。 • 是你能够在已有的技能基础上创建过程。 • 为实现一种一致的方法提供指导。 • 聚焦于提高 * 人们关于开发的技能。 • 添加刚好够的过程去处理你的项目风险。 </li></ul><ul><li>EssUP 的目标是一个长期设想 : 从每一个人被迫去思考过程的“过程”时代,过渡到我们不再讨论特定过程的“无形过程”时代 ,但这是一个设想。 </li></ul>
  • 64. 什么是敏捷软件? <ul><li>首先什么是敏捷开发呢? 敏捷开发指的是一种面临迅速变化的需求快速开发软件的能力! </li></ul><ul><li>什么是敏捷设计 “在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准的唯一软件文档,就是原代码清单。”—— Jack Reeves 敏捷开发人员如何知道要做什么 简而言之,敏捷开发人员知道要做什么,是因为: 他们遵循敏捷实践去发现问题。 他们应用设计原则去诊断问题。 他们应用适当的设计模式去解决问题。 软件开发的这三个方面间的相互作用就是设计。 </li></ul>
  • 65. 敏捷设计 <ul><li>敏捷设计就是一个 过程 ,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净及富有表现力。 请记住,敏捷开发人员不会对一个庞大的预先设计应用那些原则和模式。相反,这些原则和模式被应用在一次次的 迭代 中,力图使代码以及代码所表达的设计保持干净。 </li></ul>
  • 66. 动态语言 <ul><li>Python 简介 </li></ul><ul><li>python 是一种解释型、交互式、面向对象的语言,我们经常拿它来和 Tcl 、 Perl 、 Scheme 、 Java 来比较。它有非常清晰的语法,有模块,有类,异常处理,高级的动态数据结构。它比 perl 更加易学,功能更加强大。 python 采用动态数据结构,也就是说变量没有数据类型,这一点和 Lisp 十分相似,在 python 中所有事物都是对象( object), 字符串、函数以至于类和模块。这种面向对象的概念和 smalltalk 很相似。并且自带了丰产丰富的模块库。 </li></ul><ul><li>对于初学者, python 很适合于学习编程思想,而不会让读者为了繁杂的语法而头痛。对于高级用户, python 是最出色的脚本语言,它可以很容易的内嵌某个软件中,作为那个软件的扩充,例如著名的 3D 设计软件 blender 就可以使用内嵌的 python 脚本语言来设计复杂动画。 </li></ul>
  • 67. Python <ul><li>python 是一种流行的面向对象的脚本语言。对于软件开发,脚本解释弱类型语言在开发效率上远远超过编译强类型语言,例如 Java 。从软件开发角度来说,脚本语言具备天然的开发效率上的优势,这是由语言的内在属性决定的。 </li></ul><ul><li>python 兼有脚本语言开发的高效率,兼有低部署成本的易用性,同时又有完备的面向对象的强大支撑能力,同时又具备完善的强大的 app server 支持。 </li></ul>
  • 68. 和其他语言的比较 <ul><li>Shell script 太旧了,无论如何不能用来写程式。 </li></ul><ul><li>Perl 擅长做服务器的管理,因为它的字串处理功能特别强大,同时有全面的编程接口和操作系统相连。自己用没问题,就是不懂人家在写什么。 </li></ul><ul><li>PHP 擅长于网页,因为它可以嵌入在 HTML 文件中并支援各类资料库。但一离开网页就左支右绌。 </li></ul><ul><li>Python 特别适合一般的需求,因为它语法简明,容易维护,有很多模组可用,而且容易做出图形介面。但它的 object oriented 并不纯,速度也较 Perl 慢一些。 </li></ul><ul><li>Tcl/Tk 基本变数形态只有文字串,每次算术都是从文字变数字再变文字,鸣,没什么好提的了吧。 </li></ul><ul><li>Java 太伟大了,我可不想每次开始写程式时都幻想要完成一个跨企业的解决方案,引入几十个标头档,写完了才明白原来我只需它读一个用户指定的文件,画两条直线就行了。唉,落差太大。 </li></ul><ul><li>Ruby 太新了,要正式应用是将来的事。 </li></ul>
  • 69. Ruby <ul><li>如果我们只说一门语言,世界将会索然无味。尽管 Java 平台 是开发成熟应用程序的绝佳选择,但它从来就不适应于 小程序 或 宏 。 Java 6 意识到了这一点,它添加了 javax.script 包实现,以便和脚本语言(如 BeanShell 、 Python 、 Perl 、 Ruby 、 ECMAScript 和 Groovy )进行互操作,也添加了一项 invokedynamic 虚拟机指令来允许将动态类型语言直接编译为 Java VM 。 </li></ul>
  • 70. Ruby <ul><li>Python 代码似乎比 Ruby 代码更简洁更易于理解,大多数 Java 程序员都会这样认为。 </li></ul><ul><li>然而, Python 出来的不是时候。许多开发人员不得不在学习 Python 代码还是学习 Java 代码间作出选择,而多数人选择了 Java 代码。既然他们终于弄懂了 Java 语法,又打算在工具箱中添加另一门语言,他们想要的是 明天的语言 ,而不是昨天的语言,而那门语言似乎就是 Ruby 。 </li></ul><ul><li>更重要的是, Ruby 的 Ruby on Rails 是一个绝对杀手级的应用程序。它的简单性对于多数觉悟了的 Java 企业版( Java Enterprise Edition , JEE )开发人员来说具有难以置信的魅力。 </li></ul>
  • 71. Ruby <ul><li>除了 Rails ,比起其他脚本语言, JRuby 项目和现有的 Java 代码很好或更好地集成到了一起。事实上, JRuby 也许会超越标准 Ruby 分布,并成为 Ruby 程序员们更偏爱的 平台 ,而不止是 Java 程序员们将 Ruby 作为第二种选择。这很好。 Python 程序员们会这样反对:他们这些年来已经将 JRuby 最好的方面加入到 Jython 中,他们是对的,但我讨论的是 2007 年将 发生什么,而不是应该 发生什么。这很不幸但却是事实: Ruby 获得了契机,而 Python 没有。 </li></ul>
  • 72. Ruby <ul><li>其他脚本语言会被逐渐逐出界外。 Perl 太过时了,不能很好地适应现代应用程序。 Groovy 缺少明确的视角,还趋向于将计算机科学的时髦用语凌驾于可用性和熟悉性之上,这让它深受其苦。 BeanShell 、 Jelly ,还有半打其他语言可能都从未吸引过超过一个的称心追随者。来年的这个时候,到处都会是这样的呐喊: Ruby 将成为 Java 程序员们 首选 的 脚本语言 。 </li></ul>
  • 73. PHP <ul><li>用于动态内容和数据库交互的最优秀的语言 </li></ul><ul><li>如果您从事基于 Web 的开发工作,那么可能已经听说过 PHP 。您也许不太确切地知道 PHP 是什么、如何工作或者为什么如此热门,但现在该是进一步了解 PHP 的时候了。因此,简要介绍关于 PHP 基础的基本概念。 </li></ul>
  • 74. PHP <ul><li>PHP 是作为一个小开放源码,随着越来越多的人意识到它的实用性从而逐渐发展起来。 Rasmus Lerdorf 在 1994 年发布了 PHP 的第一个版本。从那时起它就飞速发展,并在原始发行版上经过无数的改进和完善现在已经发展到版本 4.0.3 。 </li></ul><ul><li>PHP 是一种嵌入在 HTML 并由服务器解释的脚本语言。它可以用于管理动态内容、支持数据库、处理会话跟踪,甚至构建整个电子商务站点。它支持许多流行的数据库,包括 MySQL 、 PostgreSQL 、 Oracle 、 Sybase 、 Informix 和 Microsoft SQL Server 。 </li></ul>
  • 75. 动态与静态内容 <ul><li>动态内容为什么这么热门?假设您正在管理有 10 个产品的电子商务站点。只要产品不是经常变动或者预料到它不会有太大的变动,那么手工编写 10 个带有必要的信息、表单和诸如此类内容的静态产品页面是不困难的。但是,假设您在本月再要添加 10 个或更多产品,然后在下个月要更多,而且价格有时会变动或者想改变站点的观感。那么您就会陷入用手工重新编写数十个,也许上百个静态页面的困境中。 </li></ul><ul><li>另一方面,假设您从创建 product.php 页面开始。它没有静态信息,而是编码成可以从产品数据库中提取信息并动态地构建一个页面。然后您就拥有了一个元数据页面,它可以根据存储在数据库中的信息提供一个、一百个、甚至十万个单独页面。现在网站管理员不再整天都简单重复更新静态页面的工作,因为在更新公司数据库中的信息同时就可以更新页面上的信息。这样就消除了令人头疼的时间延迟(在数据库中更改信息和在网站上显示信息之间的时间间隔)。 </li></ul>
  • 76. 动态与静态内容 <ul><li>总体来说, PHP 非常适合 Web 上的工作。但它并不是唯一的方法;如 Perl 、 Java 、 JavaScript 、 ASP 、 Python 、 Tcl 、 CGI 以及其它许多方法都可以生成动态的内容。但是, PHP 的优点是:它是专为基于 Web 的问题而设计的以及它是开放源码。 </li></ul><ul><li>如果您正在为文字处理或 3D 游戏寻找程序设计语言,那 PHP 可能不是您所需要的语言。如果您需要运行一个具有动态内容、数据库交互和电子贸易的网站,那么就请继续读下去,因为 PHP 在这方面确实是非常有用的。 </li></ul>
  • 77. PHP 适用的平台 <ul><li>大多数常规 PHP 的安装通常是与 Linux 或各种 UNIX 上的 Apache 一起运行的 PHP 模块。但是如果正在使用其它平台,不要担心。 PHP 可以在 Windows NT 和 9x 以及其它许多 Web 服务器上运行。可以在主要介绍 Apache/Linux/PHP 组合的一些网站上找到更多有关 PHP 的文档,但它并不是支持 PHP 的唯一平台。 </li></ul>
  • 78. 许可证和使用 <ul><li>购买具有全部功能的嵌入式 Web 脚本语言要花多少钱?一分钱不花? PHP 是一个开放源码项目,所以没有购买许可证的费用或限制使用的问题。您可以使用 PHP 来运行小的、非赢利性站点,或者运行十亿美元的电子商务网站,而且成本是一样的:零。不仅如此,如果想要或需要修改 PHP ,可以修改它。 </li></ul><ul><li>PHP 并没有得到 GPL 的许可,但它自己的许可证允许重新分发代码和/或二进制文件。 </li></ul>
  • 79. 使用 PHP <ul><li>我们先看一些简单的例子,这样您对 PHP 就有个大概了解。记住决这不是深入了解 PHP 的途径,仅仅是个快速入门而已。 </li></ul><ul><li>&amp;quot;Hello, World!&amp;quot; 为了对 PHP 有个了解,让我们来看一下几个非常简单的 PHP 脚本。既然 &amp;quot;Hello, World!&amp;quot; 是个常用的示例,那我们就编写一个友好的小 &amp;quot;Hello, World!&amp;quot; 脚本。 </li></ul>
  • 80. PHP <ul><li>如早些时候所提到的, PHP 是嵌入在 HTML 中的。(可能您的文件几乎没有包含 HTML ,但是通常这个文件是 PHP 与 HTML 的混合体。)这意味着在您正常的 HTML 中(或 XHTML ,如果您处在比较前沿的位置),会有类似这样的 PHP 语句: </li></ul><ul><li>&lt;body bgcolor=&amp;quot;white&amp;quot;&gt; </li></ul><ul><li>&lt;strong&gt;How to say &amp;quot;Hello, World!&amp;quot;&lt;/strong&gt; </li></ul><ul><li> &lt;?php echo &amp;quot;Hello, World!&amp;quot;;?&gt; </li></ul><ul><li>&lt;br&gt; </li></ul><ul><li>Simple, huh? </li></ul><ul><li>&lt;/body&gt; </li></ul><ul><li>很简单,不是吗?这仅仅是一个 &amp;quot;echo&amp;quot; 语句,就这样。当然,仅仅这样是没有多大用处的。但是它确实告诉我们关于语言的一些东西。(顺便说一下,如果检查 HTML 输出,就会注意到 PHP 的代码并没有出现在从服务器送到您 Web 浏览器的文件中。所有出现在 Web 页面中的 PHP 都会被处理并从页面中剥离;从 WEB 服务器返回给客户机的仅仅是纯 HTML 输出。) </li></ul>
  • 81. PHP <ul><li>请注意,这里揉和了 PHP 和 HTML 。假设您已经了解 HTML ,所以这里仅解释 PHP 代码。在 PHP.net (请参阅 参考资料 )上可以找到完整的 PHP 参考。 </li></ul><ul><li>PHP 代码是以标记 &lt;?php 开始并以 ?&gt; 结束的。这就告诉服务器在 &lt;?php 和 ?&gt; 之间的所有内容需要用 PHP 指令进行语法分析,如果发现它们,就需要执行它们。请注意,当处理和服务您的文件时,客户机会收到普通的 HTML 文件。浏览您站点的人看不到任何一个的 PHP 指令,除非您犯了错误,服务器把这些 PHP 代码分割开而没有先处理它们。 </li></ul><ul><li>一般情况下会处理在 &lt;?php 和 ?&gt; 之间的常规 HTML 标记。请注意上面这个简单的脚本中包含了 &lt;br&gt; 这个分行标记。如果不能够很好地利用 HTML 格式,那么 PHP 就不会非常有用。 </li></ul>
  • 82. PHP <ul><li>如果想和其它东西一起使用,或者您和我一样是一个健忘的人,您可能会想到要注释代码。 // 字符表明是注释,服务器不会处理被 // 标记的内容,也不会象 HTML 中的注释一样,把内容传给客户机。如果在 &lt;?php 和 ?&gt; 标记之间有标准的 &lt;!-- comment --&gt; ,那么当服务器对它进行语法分析时,有可能引起错误。显然,您可能不会象我对这个基本功能一样注释您的代码,但它确是一个很好的示例。 </li></ul><ul><li>最后要注意的是,每个 PHP 函数都封闭在圆括号内,并以分号结束,这和 C 或 Perl 相似。由于一个简单的印刷错误而遗漏一个结束的圆括号或分号,造成一些语法错误是很常见的,所以要确保检查代码。在象 Vim 或 Emacs 这样的编辑器(可以突出显示语法)中编写 PHP 是有助于消除此类错误。它使您能立刻捕捉到错误。 </li></ul>
  • 83. PHP <ul><li>date 函数仅是内置 PHP 函数之一。 PHP 附带了许多功能可以用于数据库连接、创建 PDF 、 Shockwave 、 JPG 、 GIF 、 PNG 和其它图象文件、发送电子邮件、阅读和书写文件、语法分析 XML 、会话处理、经由 HTTP 直接与浏览器对话,以及许多其它功能。 </li></ul><ul><li>PHP 也允许用户定义自己的函数。这使 PHP 语言能够经由 Web 提供大量的解决方案。而不是从一开始就把所有的事情都编写好了。在您编写函数之前,确保已经查看诸如 Zend.com 、 PHP Wizard 当然还有 Freshmeat ,来看是否已经有您正在尝试编写的函数(请参阅 参考资料 )。 </li></ul><ul><li>对于提供标题、自动更新新闻网站、基于 Web 的电子邮件客户机、数据库管理和其它方面,已经有许多开放源码的 PHP 解决方案。再从头来做这些是毫无意义的。相反,应该从已经构建好的基础开始,并把它定制到您自己的解决方案中。如果您仅仅是初步了解和学习 PHP ,在心中并没有具体的项目,那么这些项目对于使用 PHP 仍然是很好的示例和学习资料。 </li></ul>
  • 84. PHP <ul><li>PHP ,因它的发展历史一直是围绕着 web page ,所以做网页设计是十分方便的,但是写一般的工作则平平无奇。比如说控制执行,处理进程间的讯息传送以致做图形用户介面等都不行,这是因为从 WEB 的角度,这些并不重要:图形介面, HTML 就己经是了,而程式的执行和互相合作则是 Web Server 要考虑的事。 </li></ul>
  • 85. JavaScript <ul><li>JavaScript ,是一种基于 对象 的 脚本语言 。目前已经在 WWW 上广泛用于 动态 Web 页面 的编程语言。 </li></ul><ul><li>JavaScript 并非 Java </li></ul><ul><li>JavaScript 是由网景通讯公司( Netscape )最初在它的 Navigator 2.0 产品上设计并实现的,原名 LiveScript ,除了句法上有一些相似之处以及都能够提供网页中的可执行内容以外, JavaScript 和 Java 是完全不相干的。 </li></ul>
  • 86. JavaScript <ul><li>JavaScript 并不简单 </li></ul><ul><li>实际上尽管 JavaScript 是作为一种给非程序员提供的脚本语言而不是给程序员提供的程序设计语言来推广和宣传的,但是 JavaScript 是一门具有非常丰富特性的程序设计语言,和其他所有的语言一样复杂或者更复杂,你需要对 JavaScript 有扎实的理解才能用 JavaScript 执行比较复杂的任务。 </li></ul>
  • 87. JavaScript <ul><li>不同于 服务器 端脚本语言,例如 ASP , JavaScript 是 客户端 脚本语言,也就是说 JavaScript 是在用户的 浏览器 上运行,不需要服务器的支持而可以独立运行。所以在早期 程序员 比较青睐于 JavaScript 以减少对服务器的负担,而与此同时也带来另一个问题:安全性。而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但 JavaScript 仍然以其跨平台、容易上手等优势大行其道。 </li></ul>
  • 88. JavaScript <ul><li>JavaScript 是一种 解释语言 ,其 源代码 在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户端由浏览器解释执行。但这种语言的弱点是容错性较差,如果一条执行不了,那么下面的语言也无法执行,而且由于一条一条的解释,速度较慢。 </li></ul><ul><li>与其相对应的是 编译语言 。例如 Java 。 Java 的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。但是它必须在服务器端进行编译,这样就拖延了时间。但因为已经封装,所以能保证安全性。 </li></ul>
  • 89. 多核危机 <ul><li>摩尔定律已经改变了。我们不再获得和以前一样追求时钟频率增长,取而代之,我们得到了更多的( CPU )核心。今天,也许你的笔记本都已经是双核的了。 为了利用多核的特性,应用程序需要支持 并发 。如果你的客户买了一台八核的机器,要向他们解释清楚正常情况下应用程序只会用到 12% 的 CPU 能力将是一件费时费力的事,即便该机器是为该应用量身定制的。 在未来,情况可能变得更糟。你的 顺序执行 代码不仅不会跑得更快,甚至有可能实际上跑得更慢。其原因在于,你获得越多的核心,由于功耗和散热的影响,每个核心就会更慢。几年之后,英特尔就会给我们带来 32 核的 CPU ,按这种趋势,在我们不知不觉之中数千核的 CPU 就会出现。但每个核心都会比现在的核心慢很多。 </li></ul>
  • 90. 多核危机 <ul><li>未来注定是多核的世界,问题在于如何去解决多核的危机。 </li></ul><ul><li>Scala 和 Erlang 是两门渴望成为其解决方案的语言,但它们也有些许的不同。 </li></ul>
  • 91. 多核危机 <ul><li>Scala 常被看作是下一个主要的 JVM ( Java Virtual Machine , Java 虚拟机 )语言。它结合了 面向对象 编程的范式和 函数式 编程的范式,与 Java 相比有着更简洁的语法,它是 静态类型 的,有着跟 Java 一样或者有时候更快的运行速度。 </li></ul><ul><li>Erlang 是一门为健壮性而生的语言,由于它的设计,它自然又是一门有着极好伸缩性的语言。它比 Java 历史更早,但却常被看作引领未来 并发 的语言。它是一门 动态类型 的 函数式 语言。 </li></ul>
  • 92. 轻量级进程 <ul><li>要运行大规模 并发 应用,你需要大量的并行执行。这可以通过几种方式达到。 </li></ul><ul><li>使用 线程 是一种常见的方式,使用 进程 又是另一种。其区别之处在于, 线程 与其它 线程 之间 共享内存 ,而 进程 是 相互独立 的。 </li></ul><ul><li>这意味着线程需要像互斥信号这样的锁机制,防止两个线程在同一时间对同一内存进行操作,但进程不会受此问题影响,相反是使用一些 消息传递机制 来跟其它的 进程 间通信。 </li></ul><ul><li>但 进程 在 性能 和 内存 方面的代价是 昂贵 的,这正是人们就算知道基于线程的并发是一种 极复杂的编程模型 也宁愿选择它的原因。 </li></ul>
  • 93. 新系统编程语言 <ul><li>Erlang </li></ul><ul><li>Erlang 不但是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性: 并发线程 、作业调度、内存管理、分布式、网络化等。它具有超强的轻量级进程,这种进程对内存的需求是动态变化的。 </li></ul><ul><li>Erlang 支持超大量级的 并发线程 ,并且不需要操作系统具有并发机制。据说使用 Erlang 编写的 Yaws Web 服务器,其 并发 性能是 apache 的 15 倍 ! </li></ul><ul><li>这个 Erlang 初始开源版本包含了 Erlang 的实现,同时它也是用于构建分布式高可用性系统的 Ericsson 中间件的最大组成部分。 </li></ul>
  • 94. Erlang 具有以下特性 <ul><li>并发性 - Erlang 具有超强的轻量级进程,这种进程对内存的需求是动态变化的,并且它没有共享内存和通过异步消息传送的通讯。 Erlang 支持超大量级的 并发线程 ,并且不需要操作系统具有并发机制。 </li></ul><ul><li>分布式 - Erlang 被设计用于运行在分布式环境下。一个 Erlang 虚拟机被成为 Erlang 节点。一个分布式 Erlang 系统是多个 Erlang 节点组成的网络(通常每个处理器被作为一个节点)。一个 Erlang 节点能够创建运行在其它节点上的并行线程,而其它节点可以使用其它操作系统。线程依赖不同节点之间的通讯,这完全和它依赖于单一节点一样。 </li></ul>
  • 95. Erlang 具有以下特性 <ul><li>健壮性 - Erlang 具有多种基本的错误检测能力,它们能够用于构建容错系统。例如,进程能够监控其它进程的状态和活动,甚至这些进程是在其它节点上执行。在分布式系统中的线程能够配置为在其它节点故障的情况下自动进行故障恢复,并在故障节点恢复时自动迁移回到恢复节点。 软实时性 - Erlang 支持可编程的“软”实时系统,这种系统需要反应时间在毫秒级。而在这种系统中,长时间的垃圾收集( garbage collection )延迟是无法接受的,因此 Erlang 使用了递增式垃圾收集技术。 热代码升级 - 一些系统不能够由于软件维护而停止运行。 Erlang 允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。这也使得安装 bug 补丁、在运行系统上升级而不干扰系统操作成为了可能。 </li></ul>
  • 96. Erlang 具有以下特性 <ul><li>递增式代码装载 - 用户能够控制代码如何被装载的细节。在嵌入式系统中,所有代码通常是在启动时就被完全装载。而在开发系统中,代码是按需装载的,甚至在系统运行时被装载的。如果测试到了未覆盖的 bug ,那么只有具有 bug 的代码需要被替换。 </li></ul><ul><li>外部接口 - Erlang 进程与外部世界之间的通讯使用和在 Erlang 进程之间相同的消息传送机制。这种机制被用于和操作系统通讯、与其它语言编写的程序交互。如果出于高效率的需要,这种机制的一个特殊版本也允许例如 C 程序这样的代码直接链接到 Erlang 运行时系统中来。 </li></ul>
  • 97. Erlang 组件 <ul><li>Erlang 具有许多单独的组件,它们能够在开发应用时作为组建块( building blocks )使用。同时这些组件也熟知 Erlang 的系统消息( load 、 unload 、 start 、 stop 、 restart 、 change code )。 Inets - HTTP 1.0 服务器和 FTP 客户端。 Mnesia - 使用 Erlang 的分布式实时数据库。它支持 RAM 复制、磁盘存储、动态改变 shema 、保存任意复杂的数据结构。 Mnesia 之所以非常快速,是因为它运行在和应用相同的地址空间(因为 Mnesia 和应用都使用 Erlang 编写)。 Mnesia 展示了 Erlang 的强大:你能够使用多少种语言使用少于 20000 行的代码编写一个全特性、工业强度、分布式的 DBMS ? </li></ul>
  • 98. Erlang 组件 <ul><li>Orber - CORBA v2.0 对象请求代理 (ORB) 。 SNMP – 可扩展的 SNMP v1/v2 代理和 MIB 编译器。 Erlang 工具和代码库 Erlang 具有一套常用工具库: Appmon - 进程组图形监控(在本地和远程节点上)。 ASN.1 - 支持 ASN.1 基本标记法和 BER 、 DER 、 PER 编码规则的编译时和运行时的代码包。 </li></ul>
  • 99. Erlang 组件 <ul><li>Compiler - Erlang 编译器。 Debugger - 图形化 Erlang 调试器。 ERTS - Erlang 运行时系统,包括虚拟机、垃圾收集、端口映射守护进程。 GS - 编写图形用户接口的代码库。 IC - 把 OMG 的接口定义语言( IDL )转换到 Erlang 、 C 和 Java 语言的编译器。 Kernel - 运行 Erlang 系统所必须的 C 代码: Erlang 内建功能( BIFs );代码、启动、命名服务;对网络和分布式的支持;装载器、连接器、记录器;操作系统和文件系统接口。 </li></ul>
  • 100. Erlang 组件 <ul><li>Mnemosyne - 可选的用于 Mnesia 的查询语言。 Mnesia Session - 以 IDL 定义的与 Mnesia 接口的外部语言,它们通过 IIOP 和 erl_interface 协议对 Mnesia 进行访问。 OS monitor (OS_MON) - 监控 CPU 、硬盘、内存使用情况,包括 SNMPv1/v2 MIBs 。并且提供了与 Solaris syslogd 、 Windows NT 事件日志的接口。 Parse tools - 用于 Erlang 的 LALR-1 解析生成器( yecc ),它和 yacc 类似。 Yecc 使用 BMF 语法定义作为输入,生成 Erlang 代码作为解析输出。 Yecc 被用于生成 Erlang 解析器。 PMan - 跟踪、查看 Erlang 进程状态(在本地或者远程节点上)的工具。 SASL - 进程、错误、崩溃报告处理、报告浏览、释放处理、重载管理。 </li></ul>
  • 101. Erlang 组件 <ul><li>Stdlib - 标准代码库:输入、输出;基于内存、磁盘的表存储( ETS 和 DETS );图表、字典、列表、字符串、集合、队列;正则表达式;数学公式。 Erlang 解释器、 tokenizer 、解析器、 lint 和格式化打印。用于容错服务器的通用框架、事件处理器、状态机和线程监管等等。 Table visualizer - 查看 ETS 和 Mnesia 表格的工具。 Toolbar - 简化了对 Erlang 工具的访问。 Tools - 覆盖分析器、优化器、基于文字的跟踪器、 Emacs 模式、 Emacs TAGS 文件生成器、 make 工具、调用图形化工具。 </li></ul>
  • 102. Scala <ul><li>Scala 是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了 面向对象 和 函数语言 的特性。 </li></ul><ul><li>Scala 是面向对象的: Scala 是一个纯面向对象语言,在某种意义上来讲所有数值都是对象。对象的类型和行为是由 class 和 trait 来描述的。 Class 的抽象可由子类化和一种灵活的基于 mixin 的组合机制(它可作为多重继承的简单替代方案)来扩展。 </li></ul>
  • 103. Scala <ul><li>Scala 是 函数式 的: Scala 还是一个函数式语言,在某种意义上来讲所有函数都是 数值 。 Scala 为定义匿名函数提供了一种轻量级的语法,它支持高阶( higher-order )函数、允许函数嵌套、支持局部套用( currying )。 Scala 的 case 类及其内置支持的模式匹配模型代数类型在许多函数式编程语言中都被使用。 </li></ul><ul><li>Scala 是 静态类型 的: Scala 配备了一套富有表现力的类型系统,该抽象概念以一种安全的和一致的方式被使用。 </li></ul>
  • 104. Scala <ul><li>Scala 是可扩展的: Scala 的设计承认了实践事实,领域特定应用开发通常需要 领域特定语言 扩展。 Scala 提供了一个独特的语言组合机制,这可以更加容易地以类库的形式增加新的语言结构: 任何方式可以被用作中缀( infix )或后缀( postfix )操作符。 闭包按照所期望的类型(目标类型)自动地被构造 两者结合使用可方便地定义新语句,无需扩展语法,也无需使用类似 宏 的元编程工具。 </li></ul>
  • 105. Scala <ul><li>Scala 可与 Java 和 .NET 进行互操作: Scala 设计时就考虑了与流行编程环境良好交互,如 Java 2 运行时环境( JRE )和 .NET 框架( CLR )。 </li></ul><ul><li>特别是与主流面向对象语言,如 Java 和 C# 尽量无缝交互。 Scala 有像 Java 和 C# 一样的编译模型(独立编译,动态装载类),允许访问成千上万的高质量类库。 </li></ul>
  • 106. Scala <ul><li>Scala 还有一连串其它好的 Ruby 特性( Java 所缺乏的),包括闭包,以及非常适合“ 领域特定语言 ”的可塑性语法。它拥有所有这些特性,而且结合了静态类型好处。 </li></ul><ul><li>为什么选择 Scala ? </li></ul><ul><li>面向对象编程、面向模块编程、静态类型、函数编程 ,以及该语言中人们所喜欢的未言明的特性。。 </li></ul>
  • 107. Scala <ul><li>Scala 离完美还差得远。它有一些语法缺陷,一些由 Java 带来的问题,一个有适度问题的编译器以及一堆你记不住的琐碎特性和边界情况( edge case )。 </li></ul><ul><li>然而,这些问题除了烦你之外并不真正产生什么后果。如果只是想坐下来书写好的代码,该语言的核心是强大的和非常有用的。 </li></ul>
  • 108. D 语言 <ul><li>D 语言既有 C 语言的强大威力,又有 Python 和 Ruby 的开发效率。 </li></ul><ul><li>它是一种集废料收集、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、 Mixin 风格多继承、类 Java 包管理机制、内置同步机制、内建运行时信息的系统级编程语言。 </li></ul>
  • 109. D 语言概览(一) <ul><li>D 是一种通用的系统和应用编程语言。它是比 C++ 更高级的语言,同时还保持了生成高效代码以及直接访问操作系统 API 和硬件的能力。 </li></ul><ul><li>D 很适合于编写从中等规模到那些由团队合作完成、数百万行代码规模的各种程序。 </li></ul><ul><li>D 易于学习,为编程者提供了很多便利,并且适用各种野心勃勃的编译器优化技术。 </li></ul>
  • 110. D 语言概览(二) <ul><li>关联数组是索引可以为任意类型的数组,不像普通数组那样必须使用整数作为索引。本质上,关联数组就是散列表。关联数组使构建快速、高效、无错的符号表变得容易了。 </li></ul>
  • 111. D 语言基础篇 <ul><li>D 语言词法 在 D 中,词法分析独立于语法分析和语义分析。词法分析器将源文件分割成记号。词法描述了如何识别记号。 D 的词法被设计为适于高速扫描,它拥有最小的特殊规则集合,只有一遍翻译,这使得构造一个正确的扫描程序很容易。对于熟悉 C 和 C++ 的人来说,记号也很容易识别。 D 语言中的模块( Module ) 模块同源文件是一一对应的。模块名就是去掉路径和扩展名的文件名。模块自动为它的内容提供一个名字空间。 </li></ul>
  • 112. D 语言基础篇 <ul><li>D 语言中的函数 所有的非静态非私有函数都是虚函数。这听起来也许低效,但是因为 D 编译器在生成代码时知道所有的类层次结构,所有未被重载的函数可以被优化为非虚函数。事实上,因为 C++ 程序员倾向于“在不确定时,声明它为虚函数”, D 采用的方法“声明为虚函数除非我们能够证明它可以是非虚函数”造成的结果是产生更多更直接的函数调用。由重载非虚函数造成的 bug 也减少了。 </li></ul>
  • 113. D 语言基础篇 <ul><li>D 语言中的类型 基本数据类型、派生数据类型、用户定义数据类型、转换规则、委托 D 语言中的属性( Properties ) 简要介绍了 D 语言中的属性( Properties )。  </li></ul>
  • 114. D 语言 vs 其他语言 <ul><li>D 同其他经常提到的语言在各个特征上的粗略的比较。尽管各个语言的标准库中也提供了很多功能,但这张表格只考虑内建到语言核心中的特征。我们只考虑官方的标准特征,不考虑被提议的特征、测试版的特征或者非标准的扩展特征。而且,如同所有其他的语言比较一样,提到什么特征、忽略什么特征以及我对这些特征的解释都是带有偏向性的。 </li></ul><ul><li>http://blog.csdn.net/uframer/archive/2005/02/05/282095.aspx </li></ul>
  • 115. 使用 Ruby DSL 实现敏捷素材管理 <ul><li>领域特定语言( Domain Specific Language ,简称 DSL )是一个面向语言的工具,用于解决某个特定领域的编程任务。 DSL 的一般语言特征和它所被用到的问题领域,关系是非常密切的,并且在一个非常高的抽象层面上起作用。 </li></ul><ul><li>Martin Fowler 在他介绍 DSL 的文章中,将 DSL 划分为 外部 DSL 和 内部 DS L 两类(参见 原文链接 )。 外部 DSL 是一门需要编译或者解释运行的编程语言,而 内部 DSL 则构建于一门通用编程语言( general-purpose programming language )之内。实际上,内部 DSL 对于其宿主通用编程语言来说,就是它的一套层次非常高的 API 。 </li></ul>
  • 116. XML <ul><li>XML 即可扩展标记语言( Extensible Markup Language ),是一种平台无关的表示数据的方法。简单地说,使用 XML 创建的数据可以被任何应用程序在任何平台上读取。甚至可以通过手动编码来编辑和创建 XML 文档。其原因是, XML 与 HTML 一样,都是建立在相同的基于标记技术基础之上。 </li></ul><ul><li>XML 将信息串行化并作为文本存储,这样数据便可以在任何可能需要的环境中使用。甚至不需使用特殊的应用程序,我们便可以看到内容(粗体显示)和标记(用于描述内容)。 </li></ul>
  • 117. XML 示例 <ul><li>&lt;?xml version=&amp;quot;1.0&amp;quot;?&gt; </li></ul><ul><li>&lt;transaction ID=&amp;quot; THX1138 &amp;quot;&gt; </li></ul><ul><li>&lt;salesperson&gt; bluemax &lt;/salesperson&gt; </li></ul><ul><li>&lt;order&gt; </li></ul><ul><li>&lt;product productNumber=&amp;quot; 3263827 &amp;quot;&gt; </li></ul><ul><li>&lt;quantity&gt; 1 &lt;/quantity&gt; </li></ul><ul><li>&lt;unitprice currency=&amp;quot; standard &amp;quot;&gt; 3000000 &lt;/unitprice&gt; </li></ul><ul><li>&lt;description&gt; Medium Trash Compactor &lt;/description&gt; </li></ul><ul><li>&lt;/product&gt; </li></ul><ul><li>&lt;/order&gt; </li></ul><ul><li>&lt;return&gt;&lt;/return&gt; </li></ul><ul><li>&lt;/transaction&gt; </li></ul>
  • 118. XML <ul><li>从接触 XML 开始,开发人员就已经发现 XML 的用途多种多样。下面让您对 XML 的使用方法有所了解。 </li></ul><ul><li>存储数据 </li></ul><ul><li>显而易见, XML 可用于存储数据。在以数据为中心的信息(比如在某个数据库查找到的数据)和以文档的中心的信息(比如将数据存储在 XML 中,以便在不同的环境中显示出来)这两个方面, XML 都有自己的优势。 </li></ul><ul><li>阅读下列文章了解更多有关 XML 作为以数据为中心的存储介质的知识。 </li></ul>
  • 119. XML <ul><li>Web 服务 </li></ul><ul><li>Web 服务最初用于在 HTTP 上传递非 HTML 信息。它们如今已成为通过 Ajax 获取字段的基础,用于向 Web 站点、如今的面向服务体系结构( Service Oriented Architecture , SOA )和复杂的基于消息的应用程序添加交互性。 XML 是 Web 服务领域不可或缺的一部分。 Web 服务中的所有主流方法,如 SOAP 、 REST 甚至 XML-RPC ,都是基于 XML 的。 </li></ul><ul><li>要了解 XML 在 Web 服务领域中的应用,请阅读下列文章: </li></ul><ul><li>了解 Web 服务规范,第 1 部分: SOAP </li></ul><ul><li>面向资源与面向活动的 Web 服务 </li></ul>
  • 120. XML <ul><li>播客和其他数据联合 </li></ul><ul><li>如今, XML 最普遍的应用是数据联合领域。数百万的 blogger 都在使用 RSS 提要订阅他们所喜爱的博客上的最新信息。而且商业利益已经发现通过英特网向各种设备(如 iPod ,它也使用 XML )发布音频和视频的商机了。 </li></ul><ul><li>要了解数据联合,请阅读如下文章: </li></ul><ul><li>RSS 简介 </li></ul><ul><li>Podcasting for developers </li></ul><ul><li>使用 XML: 扩展 RSS 的能力 </li></ul><ul><li>技巧:使用 Universal Feed Parser 驾驭 RSS </li></ul>
  • 121. XML <ul><li>在您所喜爱的应用程序和开发环境的幕后经常都有 XML 存在,它是创建配置或指令文件的通用方法。在人类可读的 XML 文件中提供配置指令能让用户比以前更加方便地控制应用程序的行为。 </li></ul><ul><li>以下文章介绍了使用 XML 创建配置文件的示例: </li></ul><ul><li>Apache Ant 101 :使 Java 项目生成易如反掌 </li></ul><ul><li>用 XSL 转换增强 Ant 的功能 </li></ul><ul><li>使用多个 Struts 配置文件 </li></ul>
  • 122. XML <ul><li>清单 1 中的标记是最常见的 XML 串行表示,不过在应用程序的上下文中处理 XML 数据也是非常普遍的。在这种情况下,我们通常需要使用到一些模型,其中包括下面所列出的这些。 </li></ul><ul><li>文档对象模型( Document Object Model , DOM ) </li></ul><ul><li>文档对象模型( DOM )是一个基于对象的,以树形查看 XML 数据的方法。例如,在 清单 1 中, salesperson 、 order 和 return 元素都是 transaction 元素的子元素,也就是说它们在层次结构中位于 transaction 的 下方 。大多数基于 XML 的应用程序在处理 XML 时使用的都是 DOM 方法。 </li></ul><ul><li>要了解 DOM 请阅读下列文章和教程: </li></ul><ul><li>理解 DOM </li></ul><ul><li>探索 DOM Level 3 Core 的关键特性,第 1 部分 </li></ul><ul><li>探索 DOM Level 3 Core 的关键特性,第 2 部分 </li></ul>
  • 123. XML <ul><li>Simple API for XML ( SAX ) </li></ul><ul><li>由于任何内容都要存放在内存中,所以 DOM 对于操纵数据而言是非常有用的。不过另一方面,其资源占用自然也相应地比较大了。 </li></ul><ul><li>Simple API for XML ( SAX )解决了在内存中同时存放所有内容的问题。 SAX 自始至终一直在分析数据,并将所有的事件通知给应用程序,比如 “起始元素” 或 “字符”。 SAX 在资源友好方面要胜过 DOM 一筹,但是其操纵数据的方法却不尽相同。 </li></ul><ul><li>要了解 SAX ,请阅读下列文章: </li></ul><ul><li>理解 SAX </li></ul><ul><li>技巧 : 设置 SAX 解析器 </li></ul><ul><li>DOM 和 SAX 是通过编程手段与 XML 交互的最常见方法,但是有时也可以不通过构建应用程序来操纵 XML 数据。 </li></ul>
  • 124. XML <ul><li>有时,甚至无需编程也可以操纵 XML 数据。可以使用可扩展样式表转换语言( EXtensible Stylesheet Language Transformation , XSLT )来操纵 XML 数据。 XSLT 让我们能将 XML 文档转换为不同 XML 结构的文档,甚至还可以转换为非 XML 文档。 XSLT 功能极为强大,并且应用广泛。 </li></ul><ul><li>Hands-on XSL </li></ul><ul><li>改进 XSLT 编码的五种方法 </li></ul><ul><li>使用 XML: 将 XSLT 用于内容管理 </li></ul>
  • 125. XML <ul><li>XML 是与平台和编程语言无关的,因此我们可以在基本上任何编程语言中使用它,只要底层软件(比如说解析程序,它读取标记的文本文件并为数据操纵创建 XML 文档)可用就没有问题。要了解如何在各种不同的编程语言中使用 XML ,请阅读下列文章: </li></ul><ul><li>Java </li></ul><ul><li>Java 中直接内置了 XML 解析和一些其他功能。 </li></ul><ul><li>三部分教程: 利用 Java 技术进行 XML 编程,第 1 部分 </li></ul><ul><li>Java 语言的 XML 验证 API </li></ul><ul><li>Java 语言的 XPath API </li></ul><ul><li>PHP </li></ul><ul><li>PHP 对 XML 的支持一开始并不顺利;其早期实现并未完全与 DOM 规范同步。不过,目前的情形已经好了很多, PHP 提供支持更类似标准的支持。 </li></ul><ul><li>使用 PHP 和 XSL 创建 DHTML 链接图 </li></ul>
  • 126. XML <ul><li>Perl </li></ul><ul><li>Perl 旨在操作文本,因此有时更倾向直接操作文本而不是使用 XML 方法,但是使用 XML 的优势是显而易见的。 </li></ul><ul><li>Perl 开发人员:充实您的 XML 工具箱 </li></ul><ul><li>在 Perl 中利用 DOM 和 XPath 对 XML 进行有效处理 </li></ul><ul><li>Dare to script tree-based XML with Perl </li></ul><ul><li>Python </li></ul><ul><li>结合 Python 的易用性和 XML 对跨平台可用性的注重,这两者真是天生的一对。 </li></ul><ul><li>五部分系列教程: 用 4Suite 进行 Python 和 XML 开发,第一部分: PyXml </li></ul><ul><li>Python Web 服务开发者,第 13 部分:三股力量: Python 、 Web 服务和 XSLT </li></ul><ul><li>XML 问题 : 使用 ElementTree ,以 Python 语言处理 XML </li></ul>
  • 127. XML <ul><li>C++ </li></ul><ul><li>C++ 程序员同样可以利用 XML 的各种功能。 </li></ul><ul><li>充分利用 Xerces -C++ ,第 1 部分 </li></ul><ul><li>充分利用 Xerces -C++ ,第 2 部分 </li></ul><ul><li>序列化 XML 数据 </li></ul><ul><li>Ruby </li></ul><ul><li>REXML 库使 Ruby 编程语言能支持 XML 。 </li></ul><ul><li>XML 问题 # 18: REXML 库 </li></ul><ul><li>JavaScript </li></ul><ul><li>JavaScript 对 XML 的支持类似于 Java ,至少在比较基本的操作方面非常相似。 </li></ul><ul><li>XML in Firefox 1.5, Part 3: JavaScript meets XML in Firefox </li></ul>
  • 128. XML <ul><li>随着开发人开始在各种应用程序中使用 XML ,一些标准词汇或 XML 应用程序也开始涌现出来。例如, XHTML 就是一种 XML 版本的 HTML ,播客中也正在使用一种叫做 RSS 的 XML 词汇。可缩放矢量图型( Scalable Vector Graphics , SVG )语言提供了一种使用 XML 定义图形图象的方法,使一些浏览器(如 Firefox )可以呈现它们。 </li></ul><ul><li>下面讨论了一些正在应用中的 XML 示例。 </li></ul>
  • 129. XML <ul><li>RSS 和联合 </li></ul><ul><li>博客经常会提供一些外部 提要 ,用于显示最近发表的文章并能提供返回原始资料的链接。这些提要已经转变成为巨大的商机,广告商纷至沓来,音频和 / 或视频或 播客 的发布正在成为一些大型传媒公司(比如广播电视网 [broadcast television network] )关注的焦点。这些提要都是 XML 形式的,或者是 RSS 或 Atom 的某种变体。 </li></ul><ul><li>An introduction to RSS news feeds </li></ul><ul><li>RSS 2.0 内容提要 </li></ul><ul><li>从远程 RSS 文件抓取标题 </li></ul><ul><li>Podcasting for developers </li></ul><ul><li>Thinking XML: 使用 Atom 格式连锁新闻及其他内容 </li></ul>
  • 130. XML <ul><li>可缩矢量图形( Scalable Vector Graphics , SVG ) </li></ul><ul><li>图形之如 SVG ,就如桌面发布之如 HTML 。 SVG 提供了一种使用小的、简单的文本指令指定图形的方法。使用 SVG 创建的复杂图形,不仅带宽占用小而且可以通过编程进行控制。 </li></ul><ul><li>XML 问题 : 使用 SVG 编程 </li></ul><ul><li>在浏览器中使用 SVG 创建矢量图形 </li></ul><ul><li>SVG 与 XML 商业图表实务 </li></ul><ul><li>在 SVG 中呈现动态图形 </li></ul><ul><li>面向浏览器的动态 SVG </li></ul>
  • 131. XML <ul><li>XForms </li></ul><ul><li>可以把视为 XFoms 下一代的 HTML 表单,它可以指定以表示无关的方式采集信息。这种方式使我们能更加方便地添加更多功能,也使得在其他介质(比如手机)中重用表单更加轻松,这些介质中的信息相同不过表示可能完全不同。 </li></ul><ul><li>准备使用 XForms </li></ul><ul><li>SVG 和 XForms : 基础知识 </li></ul><ul><li>技巧:创建提交另一个实例的 XForms 表单 </li></ul><ul><li>技巧 : 使用 XForms 发送和接收 Web 服务消息 </li></ul><ul><li>XML Forms Generator ( alphaWorks ,英文) </li></ul><ul><li>XForms 简介系列 </li></ul>
  • 132. XML <ul><li>更多 XML 应用 </li></ul><ul><li>应用 XML 的地方可以说是不胜枚举,比如说发布、编码语义数据,甚至那些电话中的语音识别单元也使用了 XML 。下面列出了一些例子: </li></ul><ul><li>使用 XHTML Mobile Profile 开发无线应用程序,使不同移动设备具有相同外观 </li></ul><ul><li>两部分系列教程: 深入研究 VoiceXML ,第 1 部分 </li></ul><ul><li>XML 安全 : 使用 SAML 确保可移植的信任 </li></ul><ul><li>Think XML: 从书本学习 XML Topic Maps </li></ul><ul><li>Thinking XML: 通用商业语言( UBL ) </li></ul><ul><li>XML 观察 : 使用 FOAF 支持在线社区 </li></ul><ul><li>XML Watch: Finding friends with XML and RDF </li></ul><ul><li>XML 观察 : 使用 XML 和 RDF 找到朋友 </li></ul><ul><li>尽管可以使用许多技术来实现面向服务体系结构( SOA ),不过最常用的还是使用 Web 服务,这意味着要使用 XML 。 SOAP 和 REST 是实现 Web 服务最流行的两种方法,这两者都基于 XML 。 </li></ul>
  • 133. XML <ul><li>Web 服务概览 </li></ul><ul><li>事实上,大多数围绕 Web 服务的标准(存在很多)在本质上都是 XML 词汇。比如说, Web 服务描述语言( Web Service Description Language )就是一个用于描述服务的 XML 文件。 </li></ul><ul><li>要了解 XML 和 Web 服务,请阅读下列文章: </li></ul><ul><li>了解 Web 服务规范,第 1 部分: SOAP </li></ul><ul><li>技巧 : 为防火墙后面的 SOAP 使用代理网络库 </li></ul><ul><li>技巧 : SOAP 1.2 与 GET 请求 </li></ul><ul><li>技巧 : 让 SOAP 与 Web 服务器和平共处 </li></ul><ul><li>技巧 : 向 Web 服务传递文件 </li></ul><ul><li>ETTK for Web Services (英文) 是一种 alphaWorks 技术,使用该技术可以轻松地建立 Web 服务环境,包括服务器。 </li></ul><ul><li>通过 SOA and Web services 新手入门 可以获得更多有关 XML 和 Web 服务的信息。 </li></ul>
  • 134. XML <ul><li>XML 是当今许多新生技术的 核心 。比如说,随着搜索引擎的改进以及向 Semantic Web 的迈进, XML 成了 Web 站点管理员在页面中添加有意义信息的利器。网格计算和自主计算在不断发展, XML 在这些技术中的应用也非常显著。数据库供应商在不断探索更加高效存储 XML 的方法, XML 查询语言( XML Query Language , XQuery )也在蓬勃发展。 </li></ul><ul><li>通过阅读下节中的文章可以帮助您了解 XML 的未来: </li></ul><ul><li>RDF 、微格式 和其他语义技术 </li></ul><ul><li>语义 Web 并不需要 XML ,但是从当前的技术方式来说这也是众望所归的趋势。大多数信息都是以某种 XML 的形式编码的,不论是资源描述框架( Resource Description Framework , RDF )还是独立的微格式。这是因为 XML 的可读性和可理解性几乎是通用的。 </li></ul><ul><li>使用 microformats 分离数据与格式 </li></ul><ul><li>XML 问题 : 比微格式更轻巧:纤格式( Picoformat ) </li></ul><ul><li>Jena 简介 </li></ul><ul><li>Thinking XML: XML 语义锚 </li></ul><ul><li>XML 观察 : 追溯 RDF 数据的源头 </li></ul><ul><li>Thinking XML #1 , XML 和语义:实际情况 </li></ul>
  • 135. XML <ul><li>网格和自主计算 </li></ul><ul><li>世界越来越小,计算机系统却日益庞大。尤其是一些研究人员、公司和其他组织开始发现,将他们的系统整合为一个单一的大型系统可以带来巨大的好处,不仅能提供更强的计算能力还可以通过消除浪费节省资金。由于 XML 具有平台无关性,因此对于在种类各异的系统之间交换信息, XML 是完美的选择。 </li></ul><ul><li>会见专家 : Susan Malaika 讨论 XML 标准和网格计算 </li></ul><ul><li>Policy Management for Autonomic Computing: Solve a business problem using PMAC </li></ul>
  • 136. XML <ul><li>异步的 JavaScript 和 XML ( Ajax ) </li></ul><ul><li>随着 Web 所提供的功能日益多样,因此用户也对日常处理中必不可少的应用程序寄予了相同的期望。通过在后台中请求信息( XML 中时常如此),并且只替换页面的一部分内容(而不是强制用户请求整个新 Web 页面), Asynchronous JavaScript with XML ( Ajax )能为用户提供更加无缝的体验。结果,大约在去年期间 Web 便在这一领域取得了跨越式的进展。 </li></ul><ul><li>使用 Ajax 构建应用程序:学习用 Ajax 构建支持实时验证的 Web 应用程序 </li></ul><ul><li>Ajax 传输方法: Ajax 不仅仅是 XMLHttp </li></ul><ul><li>开发基于 Ajax 的用户注释系统 </li></ul>
  • 137. XML <ul><li>Mashups </li></ul><ul><li>随着越来越多的信息可以通过 Web 服务获得,企业开发人员也发现这些信息还有其他的用途。利用这一数据的方法之一就是 Mashup ,它是一种正在发展的应用程序,可以将来自多个源的数据结合到一个单一的视图中。 </li></ul><ul><li>Mashups : Web 应用程序新成员 </li></ul><ul><li>使用 XQuery 开发 Mashup </li></ul><ul><li>终极 Mashup —— Web 服务和语义 Web ,第 1 部分:使用与组合 Web 服务 改进 XML 技能的最佳方式 </li></ul><ul><li>如果想要改进您的 XML 技能,最佳的方式就是打下坚实的基础,然后只需使用它就行了。要获得入门知识,请阅读 什么是 XML ? 一节中所列出的文章,然后再阅读 XML 可用于应用程序开发吗? 一节中的文章。有了这些基础之后,您便可以学习自己感兴趣的领域了。 </li></ul><ul><li>您还可以努力获得 IBM 的 XML 认证 ,要准备该认证请阅读 准备 XML 及相关技术认证,第 1 部分 : 体系结构 和其他的 XML 及相关技术认证系列教程 。 </li></ul>
  • 138. XML <ul><li>XML 为我们提供了强大的功能和力量,不过幸运的是它本身也是相当简单和易懂的技术。掌握基础知识之后(这并不会花多长时间),您就可以选择学习的方向了。 </li></ul><ul><li>如果您是程序员,那么可以专注于编程和各种 API 。 </li></ul><ul><li>如果不是程序员,则可以专注于各种与编程无关的应用。 </li></ul><ul><li>总之,您都可以在当今世界找到 XML 的一席之地。 </li></ul>
  • 139. Ruby 和 Python 的比较 <ul><li>python 和 ruby 的相同点: </li></ul><ul><li>都强调语法简单,都具有更一般的表达方式。 python 是缩进, ruby 是类 basic 的表达。都大量减少了符号。 </li></ul><ul><li>都是动态数据类型。都是有丰富的数据结构。 </li></ul><ul><li>都具有 c 语言扩展能力,都具有可移植性,比 perl 的可移植性更好。也都可以作为嵌入语言。 </li></ul><ul><li>都是面向对象的语言,都可以作为大项目的开发工具。 </li></ul><ul><li>都有丰富的库支持。 </li></ul><ul><li>也有最宽松的版权许可,除了一些工具属于 GNU 世界。 </li></ul><ul><li>都有 lisp 特色的 eval 函数,也都能把函数作为参数。 </li></ul><ul><li>也有图形界面的 ruby 的专门编辑器。 </li></ul><ul><li>都获得了广泛的 c 库的支持。如 qt 、 gtk 、 tk 、 SDL 、 FOX 等, ruby 计划实现 SWIG 接口。 </li></ul><ul><li>都有完善的文档。 </li></ul><ul><li>python 有 jython , ruby 有 JRuby 。 </li></ul>
  • 140. 和 python 相比 ruby 的优点: <ul><li>具有正则表达式和嵌入 html 的功能。 python 也有正则表达式,但没有 ruby 的应用方便和广泛。 python 的嵌入 html 项目才刚起步。 ruby 还有 apache 的 mod 模块。 ruby 本身也实现和很多 unix 工具,如 racc , doctools 。比 python 更亲近 linux 。 </li></ul><ul><li>比 python 功能更完整的面向对象的语法。 </li></ul><ul><ul><li>ruby 的整个库都是具有类继承的结构。 </li></ul></ul><ul><ul><li>他的基本的数据类型和运算符都是可以重载的。 </li></ul></ul><ul><ul><li>ruby 主要的功能都是通过对象的方法调用来实现的,而不是函数。 python 也在向这方面发展,但没有 ruby 做的彻底。 </li></ul></ul><ul><ul><li>ruby 的类是更规范的单继承,还有接口等概念的实现。 </li></ul></ul><ul><li>python 可以实现在列表内的条件语句、循环语句,而 ruby 用“块”的方式来实现这个功能,比 python 的更灵活,更具有通用性。 </li></ul><ul><li>ruby 具有类似 lisp 的彻底的函数方式的条件语句、循环语句等。语句的表达能力更强。 </li></ul><ul><li>附带一些 unix 工具,如 racc 等。 </li></ul>
  • 141. 和 python 相比 ruby 的不足: <ul><li>最大的不足正是因为 ruby 的强大所引起的。它没有 python 的简单性好。比较复杂的面向对象语法、“块”语法的引入、正则表达式的引入、一些简写标记都增加了语言的复杂性。 </li></ul><ul><li>python 的缩进表达方式比 ruby 的 basic 的表达方式更让人悦目, ruby 程序的满眼的 end 让人不舒服。当然, ruby 认为 end 的方式比 python 更先进。 </li></ul><ul><li>ruby 还没有 python 的“自省”的能力,没有从程序文件中生成文档的能力。 </li></ul><ul><li>ruby 没有国际化的支持。国际化支持在 ruby 的计划中。这是因为 ruby 的历史比 python 要短造成的。 </li></ul>
  • 142. python 和 ruby 的语言的选择: <ul><li>从 简单 的就是好的来说,选 python 是没错的。 python 适合寻找简单语言的人,这很可能造成 python 更流行,因此也有更多的支持。但如果要追求更 强大 的语法功能,则 ruby 是好的选择。因为 ruby 和 python 的哲学有很多相似的地方,先从 python 入手,尽量用 python ,如果 python 的能力不足了,可以再找 ruby 。 </li></ul><ul><li>ruby 和 python 的比较,就像 五笔 和 拼音 输入法的比较。拼音作为入门的输入法和长久使用的输入法都没有问题。五笔适合更高要求的情况。如果追求性能的不妨学学 ruby 。对编程语言感兴趣,想了解各种编程概念的学 ruby 也会很兴奋。 </li></ul>
  • 143. JRuby :使 Java 和 Ruby 成为一家人 <ul><li>一、 引言 Ruby 是现在编程界讨论得正热火朝天的一种语言。这种语言功能强大而且易于使用;同时 Ruby 还紧密绑定到例如 Ruby on Rails 等 web 应用程序开发框架中。 </li></ul><ul><li>另一方面,在过去的十年间, Java 正迅速成长为业界领先的面向对象的软件开发语言并且运行于诸多平台之上。而 JRuby 则是一个 100% 的 Ruby 编程语言的纯 Java 实现。 </li></ul><ul><li>本文是 JRuby 的一个入门篇;同时,还会向你展示它是如何结合 Java 语言的优势,从而提供给 Java 开发者一个快速而强有力的创建应用程序的可选方案的。 </li></ul>
  • 144. JRuby <ul><li>二、 Ruby- 席卷计算世界的脚本化语言 近几个月来,在编程领域的几乎每一个人可能都会耳濡目染 Ruby 。日益盛行的 Ruby on Rails web 开发框架正在帮助使 Ruby 成为快速开发和测试应用程序的一门语言。作为一种解释性的脚本化语言, Ruby 提供了快速而容易的面向对象编程技术,同时还提供了许多非常干净利索的特征,例如 closure ,块和 mixins 。另外, Ruby 还是高度可移植的,可以广泛运行于 Unix/Linux , Windows 以及 MacOS 平台之上。要想全面了解 Ruby ,我建议你去阅读 W.Jason Gilmore 的文章。 </li></ul>
  • 145. JRuby <ul><li>三、 Java- 辉煌的面向对象语言的十年 Java 最早由 Sun Microsystems 的 James Gosling 在上一世纪九十年代创建。当时, Gosling 开发这一语言的主要目的是想提供一种虚拟机和一种 C 风格的标志语言,同时使之具有比 C/C+ + 更为一致和更为简单的特征。 Java 的另一个主要的目标是提供一种 &amp;quot; 编写一次处处都能运行 &amp;quot;(WORA) 的理想语言,允许一个程序在一种平台上开发而能够不经任何重编译即可运行于另一种平台。这个 Java 平台由一个 Java 运行时刻环境和 Java 软件开发包 (SDK) 组成。现在, Java 能够为从移动设备到企业系统的诸多平台提供 SDK ,这分别对应于它的 JavaSE , EE 和 ME 技术。在过去的十年间, Java 已经被广泛应用于移动设备、无人值守系统、 web 应用程序、金融系统以及实时系统等众多开发领域。 </li></ul>
  • 146. JRuby <ul><li>四、 JRuby-Java 虚拟机 (JVM) 上运行的 Ruby JRuby 则是一个 100% 的 Ruby 编程语言的纯 Java 实现,这种语言在 CPL , GPL 和 LGPL 三种开源许可下发行。它是一个 1.8.4 Ruby 解释器,其中提供了大多数 Ruby 的内置类。 JRuby 支持从一个 Ruby 程序中定义 Java 类并实现与之交互,另外还对 Bean 脚本化框架实现支持。在本文成文之时, JRuby 的当前版本是 0.9.1 。 JRuby 使 Ruby 程序能够存取 Java 类,允许它们作为程序内使用的一级对象。如今, JRuby 的创始人, Thomas Enebo 和 Charles Nutter ,已经受雇于 Sun 专门研究开发 JRuby 。 </li></ul>
  • 147. JRuby <ul><li>JRuby 允许现有 Java 开发者充分利用 Ruby 提供的强有力和易于使用的编程特点,而 Ruby 开发者将能够自由使用庞大的曾使 Java 广泛地应用于各个软件开发领域的 Java 库来进行开发。在归于 Sun 麾下之后, JRuby 的发展前途一定会更加光明。 </li></ul><ul><li>各位读者不妨花一点时间进一步研究一下 JRuby ,挖掘一下这个工具到底蕴含着多大的能量。 </li></ul><ul><li>http://dev.xuezhishi.net/program/Java/2007-02-12/6233.html </li></ul>
  • 148. Lua <ul><li>Lua 是一个小巧的 脚本语言 。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它的主页是 www.lua.org 。 Lua 最著名的应用是在 暴雪 公司的 网络游戏 WOW 中。 Lua 脚本 可以很容易的被 C / C++ 代码调用,也可以反过来调用 C/C++ 的 函数 ,这使得 Lua 在 应用程序 中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替 XML , Ini 等 文件格式 ,并且更容易理解和维护。 Lua 由标准 C 编写而成,代码简洁优美,几乎在所有 操作系统 和 平台 上都可以 编译 ,运行。 一个完整的 Lua 解释器 不过 200k ,在目前所有脚本引擎中, Lua 的速度是最快的。这一切都决定了 Lua 是作为嵌入式脚本的最佳选择。 </li></ul>
  • 149. Lua <ul><li>Lua 有一个同时进行的 JIT 项目,提供在特定平台上的即时编译功能,这将给 Lua 带来更加优秀的性能。请访问 http:// luajit.luaforge.net / 来了解这个项目。 和 Python 等脚本不同, Lua 并没有提供强大的库,这是由它的定位决定的。所以 Lua 不适合作为开发独立应用程序的语言。不过 Lua 还是具备了比如数学运算和 字符串 处理等基本的功能。 Lua 目前的最新版本是 5.1. </li></ul>
  • 150. Lua <ul><li>1 目标 LUA 的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到了这一点。 很多应用程序使用 LUA 作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括 魔兽世界 、 博德之门 等。 </li></ul>
  • 151. Lua <ul><li>2 特性 LUA 有如下特性: 轻量级 LUA 语言的官方版本只包括一个精简的核心和最基本的库。这使得 LUA 体积小、启动速度快,从而适合嵌入在别的程序里。 可扩展 LUA 并不象其它许多 &amp;quot; 大而全 &amp;quot; 的语言那样,包括很多功能,比如网络通讯、图形界面等。但是 LUA 可以很容易地被扩展:由宿主语言 ( 通常是 C 或 C++) 提供这些功能, LUA 可以使用它们,就像是本来就内置的功能一样。 其它特性 LUA 还具有其它一些特性:同时支持 面向过程 编程和 面向对象 编程;自动内存管理;提供一系列数据结构,包括数组、链表、集合、字典、散列表等;语言内置 正则表达式 匹配;闭包 (closure) ;函数也可以看做一个值;提供多线程支持;等等。 </li></ul>
  • 152. Lua <ul><li>3 示例代码 是的,你猜对了: hello world... print &amp;quot;Hello, world!&amp;quot; 一个比较复杂一点的例子,但是它展示了什么是闭包 : function create_a_counter()     local count = 0     return function()         count = count + 1         return count     end end create_a_counter() 返回一个记数器,每次调用这个记数器,都会得到一个比上次大 1 的值。 </li></ul>
  • 153. Lua <ul><li>参考资料:   1. www.lua.org  2. www.luachina.net  3. http://lua-users.org/wiki/  4. http://www.luaforge.net/  5. http://sourceforge.net/projects/lua-ce - Lua5.1 在 WinCE 4.2 下的版本,对于嵌入式应用非常合适。 </li></ul>
  • 154. Lua <ul><li>动态语言有很多种,比如最常用的 Python , Ruby , Lua , Perl , PHP 等等都是动态语言。但为什么游戏开发人员如此偏爱于 Lua 呢?有以下几个原因: </li></ul><ul><li>Lua 是一个功能强大的,轻量级的编程语言,主要是用来 扩展 应用程序。另外, Lua 是一个 免费 软件。 </li></ul><ul><li>“ 使用 Lua 作脚本,主要是因为它小巧玲珑(体积小,运行快),而且它的语法又比较简单明了。 </li></ul><ul><li>不过,使用 LuaAPI 将 Lua 引擎集成到程序中,确实有一些不方便——用一位网友的话来说,就是“就象用汇编”。 </li></ul><ul><li>当然,现在你不用再这么辛苦了,因为你可以使用 LuaWrapper For C++ 。使用这个工具,在 C++ 中集成 Lua 脚本就是轻而易举的事。你原有的 C++ 函数和类,几乎不需要任何改变,就可以与 Lua 脚本共享。 &amp;quot;―― 《在 C++ 中集成 Lua 》 </li></ul>
  • 155. Functional Pogramming 函数编程 <ul><li>函数编程( Functional Pogramming )可能会再度兴起。 </li></ul><ul><li>Java 平台的 JavaFX 语言,具备所有重要函数编程的特色,所以应该归类为函数语言(或者至少是多重思维语言); </li></ul><ul><li>目前两大开发 平台 ( Java 与 .NET )都开始出现函数编程思维的踪迹。 </li></ul><ul><li>Java 平台的 JavaFX 语言,具备所有重要函数编程的特色,所以应该归类为函数语言(或者至少是多重思维语言); </li></ul><ul><li>.NET 平台的 C# 3.0 也存在相当多函数编程的影子。微软的 LINQ 本来就源自于函数语言,更不用提微软官方的 F# 语言, F# 沿用相当多 ML 语言的语法,更是彻底的函数语言(其中的 F ,应该是 Functional 的意思)。 </li></ul>
  • 156. Functional Pogramming 函数编程 <ul><li>根据 Tiobe 对于 2008 年 10 月语言需求所做的统计,面向对象语言占 57.6% ,程序语言( Procedure Language )占 39.6% ,函数语言占 1.9% ,而逻辑语言占 0.9% 。以上加起来刚好百分之百。 但是,这样的分类并不精确。现在的语言很少是单一思维,几乎都是多重思维( Multi-paradigm ),特别是面向对象和函数编程,因为两者间并没有冲突的地方,许多面向对象语言会渐渐纳入函数编程的特色。例如,尽管 C# 3.0 具有相当多函数语言的特色,但是依然会被 Tiobe 归类于面向对象语言的类别。 </li></ul>
  • 157. Functional Pogramming 函数编程 <ul><li>函数编程最重要的基础是 Lambda Calculus ,在 C# 3.0 称为「 Lambda 表示式」,在 Python 称为「 Lambda 函数」,在 PowerShell 称为 Scriptblock (剧本区块),在 Java 称为匿名方法( Anonymous Method ),不同语言会用不同名词称呼它,但其实都是类似的东西。从这个角度来看,许多主流语言多少都具备函数编程的 能力 。 </li></ul><ul><li>这个趋势应该会延续下去,许多既有语言推出新版本时,会持续加入函数语言的特色。 </li></ul>
  • 158. Functional Pogramming 函数编程 <ul><li>REBOL 和许多人工智能专家使用的 Common Lisp ,近年兴起的 Erlang , Perl 高手唐凤专精的 Haskell ,这些也都是函数语言。 </li></ul><ul><li>为什么我们喜欢函数编程?因为函数编程可以让我们把时间花在有生产力的事情上,而不是处理许多琐碎的事。 </li></ul><ul><li>简单地说,函数语言可以让我们用简单的方式写程序,但是威力又强大。 </li></ul>
  • 159. Functional Pogramming 函数编程 <ul><li>「简单」与「威力」,正是函数编程的两大优势。简单,来自于以「值」( Value )为中心,不用理会下面平台是什么机器、内存要如何配置、如何指定。函数编程的威力,则来自于「递归」以及将函数视为「 First-class 」(一等)的值(函数本身就是值,可以被传递、被指定)。 自动内存管理虽然始于函数语言,但是近年来已经进入各大主流语言。而将函数视为一等的 数据 型别,也开始进入各大主流语言。这些都要归功于函数语言,尤其是 Lisp 。 </li></ul>
  • 160. Functional Pogramming 函数编程 <ul><li>Lisp 是函数语言的始祖,诞生于 1958 年,相当于 50 年前。换算成人类年龄的话, Lisp 已经算是程序语言中的人瑞了。 Lisp 的后继者众多,其中,至今仍然最活跃的是诞生于 1980 年代的 Common Lisp 。在 Peter Seibel 写出《 Practical Common Lisp 》一书,并得到 Jolt Award 之后,让大家逐渐对 Common Lisp 一改印象,开始认为它不只是 学术 上的语言,而是一种 务实 的语言。 一般来说,相较于 C 、 Pascal 这类命令式编程( Imperative Programming ),函数编程的缺点是效率比较差,这也是函数语言一直无法流行的主因之一。不过,随着 处理器 速度的提升,编译程序 技术 的进步,都让效率不再是问题,甚至在数学运算上,用 Clean 与 OCaml (这些都是函数语言)开发出来的程序,效率也不会比 C 差。 </li></ul>
  • 161. Functional Pogramming 函数编程 <ul><li>尤其是在 多核心 处理器和 分布式 计算时代,函数编程更是比 命令式 编程具有更强的优势。例如近年来逐渐受到重视的 Erlang ,正是将重点放在并发与 容错 上。用 Erlang 可以轻松开发出来的系统,如果改用别种语言开发,可能会造成程序长度暴增以及不稳定的情况。 如果你想学习函数编程,而且如果你使用 .NET 平台,建议你使用 F# ; 如果你使用 Java 平台,你可以考虑 JavaFX ;如果你没有 Java 与 .NET 平台考虑的话,那么你可以选择 Common Lisp 与 Erlang 。 若未曾使用过函数编程技术,思维就会受到传统 命令式 编程作法的拉扯,一开始时会很不习惯,但只要坚持下去,等到跨过门坎之后,函数编程其实更 自然 , 生产力 更高。 </li></ul>

×