2007年09月02日

How Bussiness trounced the trial lawyer

By focusing on litigation reform at the state level,business has won the key battles.Suddenly,it’s tought time to be a plaintiffs’ attorney.

trounce

加入生词本相关讨论爱心词典
v.

痛击

trial

加入生词本相关讨论爱心词典
n.

试验, 考验, 审讯, 审判

litigation

加入生词本相关讨论爱心词典
n.

诉讼, 起诉

plaintiff

加入生词本相关讨论爱心词典
n.

[律]起诉人, 原告

 

2007年06月20日

<%
      response.setHeader("Pragma","No-Cache");
      response.setHeader("Cache-Control","No-Cache");
      response.setDateHeader("Expires", 0);
%>

2007年06月19日

AJAXWeb-GIS中的运用

“Integrating AJAX Approach into GIS Visualization Web Services”

Ahmet Sayar1, 2, *, Marlon Pierce1 and Geoffrey Fox 1, 2, 3, 4

1 Community Grids Lab, Indiana University, Bloomington, Indiana, 47404, USA

2Department of Computer Science, Indiana University

3Department of Physics, Indiana University

4School of Informatics, Indiana University

{asayar, mpierce, gcf}@cs.indiana.edu

 

中文翻译 郑翔

zhengsean916@yahoo.com.cn

本文原文来自互联网

2006-8-29

 

摘要:随着Web平台越来越成熟,我们可以发现有越来越多的令人兴奋的技术出现,这些技术使地理信息系统(GIS)的显示应用达到了一个功能强大且应用广泛的新高度,通过把最新的功能强大的技术整合到GIS系统中去,我们得到了高效率执行的结果,随之赋予了更多的功能。在目前基于浏览器应用程序的开发技术中,AJAX(Asynchronous JavaScript and XML)无疑是最新的技术。在本文中,我们介绍了一个通用的,高效的架构,这个架构把AJAX模型整合到了GIS Web Services显示系统中。

1. 导引

       AJAX是基于Web Applications的浏览器的一种重要的开发模型。它使用了几种技术,这几种技术整合在一起并且相互合同工作,从而来创建功能强大的新应用。组成AJAX的模型的有XMLJavaScriptHTTPXHTML,这些技术都是被广泛应用和被大家所熟悉的。高效的Google Mapping就是使用了这一新的,功能强大的模型。

 

       Web Services是自包含的、自描述的、并且是有标准组件的,和早期不一样,现在有了更多紧密联系的分布式对象方法(例如CORBA,另外还有Web Services系统支持的XML消息中心方法),这使得允许我们创建低耦合的,高分布式跨组织的系统,同时Web Services也推广了GIS值得期许的特性,比如建立了一些标准,这些标准提供通用的发布、定位和调用Web服务的规范,Web Services同时使用了被广泛使用的和熟知的技术,比如和AJAX类似的XMLHTTP,既然AJAXWeb Services都是基于XML结构的,那么他们相互之间是可以起到杠杆作用的。

 

       在本文中,首先给出一些我们在目标架构所用到的Web技术的背景信息,这些技术是基于AJAXWeb ServicesGIS Web Services的。在第三部分我们将提及一些关于AJAXWeb Services的相关工作;在第四部分我们先给出一个通用的用来整合Web ServicesAJAX的架构,然后我们将给出实例来验证这些关于整合的概念,其中之一就是基于GoogleGIS Data Server( WFS )的整合,另外一个是基于GoogleGIS Mapping Server( WMS )的整合;在第五部分是未来的工作,第六部分是结论。

 

2 背景知识

       这里提到的整合架构是由GIS领域内的AJAXWeb Services构成的,在这里我们将首先解释一下这些技术和理论,还有他们的优点。

2.1 异步JavaScriptXML

       AJAX是一种Web应用的开发风格,它混合使用了当前的Web技术来提供更具交互性体验的Web应用。AJAX并不是一种技术,它只是包括了开发Web应用程序的一组技术而已,这些技术是JavaScriptHTML、层叠样式表(CSS)、文档对象模型(DOM)XMLXSLT,以及通过XMLHttpRequest来进行通信协议的消息发送。

 

       构成AJAX这些核心技术已经很成熟,并且广泛的应用于Web应用开发领域;AJAX之所以越来越流行是由于它对那些基于Web浏览器应用程序开发者来说有很多的优点,它消除了交互过程中的“停止-开始”的弱点,用户在与服务器交互的过程是异步的,从而使页面上的数据不必一次又一次的全部刷新,并且这些“请求-应答的过程是通过结构化的XML文档——XMLHttpRequest协议完成的。这些特性使开发者能够很容易的把AJAX整合到Web Services中去。

 

       Google开始使用AJAX进行新应用的开发之后,AJAX开始被公众所注视,Google在去年所开发出的重要的产品很多都是基于AJAX模型的,例如Google Groups , Google Suggests以及Google Maps。除了Google的产品之外,Amazon公司在他们的搜索引擎的应用中同样使用了AJAX方法。

 

       客户端的Web应用程序中可以使用AJAX,客户端只需要等待用户自己直接调用XMLHttpRequest协议 APIJavaScript代码执行时间,这样,客户端只需要关注于编写代码和处理不同的Web浏览器。客户端可以使用一些最新开发出来的库来提供更加高级的AJAX服务,并且隐藏那些对不同浏览器的处理,这一方法用来取代使用纯AJAX开发同时还要处理不同浏览器的开发方式,这样的库有DWRPrototypeSajaxAJAX.NET

2.2 OGC GIS Web Services

       OGC定义了一系列的包括数据模型、在线服务在内的GIS标准,这些标准已经广泛的应用于GIS领域,OGC是一个非赢利的国际化标准制定组织,它领导进行对地理数据相关的操作和服务标准的制定。OGC在不同的方面都做出了很大的贡献,不管是在行业领域还是在学术界,这些贡献都是为了创建一个开放的可扩展的GIS软件编写的接口。

 

       GIS有一系列的方法和环境来进行地理数据的显示、操作和分析,地理应用软件的特点之一就是需要整合和共享来自不同提供者的空间数据,来解决整合数据的问题,OGC提出了GIS服务的发布标准定义。

 

       这些Web Services技术的出现克服了传统分布式对象技术的缺陷,并提供了在分布式网络环境下的跨平台跨语言的能力,GIS服务将会在Web Services方法中被更多的实施,空间数据底层架构使得GIS厂商可以共享数据的存储,也使得应用程序能在分布式的环境下运行。GIS从根本上来说,主要涉及对来自不同厂商的不同数据源的数据和服务进行整合。Web Services架构建立了一套在服务和客户端之间的相互连接的标准,这里提到的客户端能很好的支持动态的数据整合,这也是创建空数据底层架构的关键。通过Web Services,不同厂商的分布式GIS服务能够通过运用能共同操作的标准通信协议把GIS服务动态的整合到GIS应用程序中。

 

       OGC服务加入到Web Services中将会如下的好处,包括:

l         分布式:更容易的分发地理数据,使应用程序可以跨平台,跨操作系统,计算机语言等,具有平台和语言的中性特征。

 

l         整合性:对应用程序开发者来说,更容易的整合地理空间功能,更容易的整合数据到用户程序中,也很容易的通过WSDL文件和调用服务功能来创建客户端的程序。

 

l         基础结构:我们可以从很多创建出来的Web Services架构中得到很多好处,这些架构包括开发工具、服务器端应用程序、消息协议、安全架构、工作流的定义等等。

 

       最通用的,被广泛熟知的与OGC GIS服务相关的显示机制有:GIS Mapping ServicesGIS Data ServicesOGCMapping Services叫做Web Map Services(WMS),把Data Services叫做Web Feature Services(WFS)Web Coverage Services(WCS)WFS提供要素模型的数据,这些数据是矢量格式的GML(Geographic Markup Language)进行编码的,WCS提供场模型的数据,这些数据是栅格格式的。

 

3 相关工作模式

       目前有一些著名的致力于整合Web架构的项目或成果已经出现,比如Web ServicesAJAXOGCESRIGIS使用了Web ServicesOGC实际上是一个进行实体标准定义、GIS服务界面发布标准定义的组织,而CubewerxDemisIntergraph是商用GIS开发商,他们把Web Services加入到了他们的系统中。Google MapsKa-MapAJAX模型整合到了GIS显示系统中,Ka-Map是基于AJAXWeb地图网站,他们使用了开源的Web地图开发工具,Ka-Map使用MapServer地图服务器为AJAXPHP提供地图内容服务。上面提到的所有这些成果,都分别用到了Web ServicesAJAX技术。

 

       XML ECMAScript脚本语言E4X是唯一使AJAXWeb Services相互工作的脚本语言,E4X是一种简单的扩展JavaScript语言,而JavaScript使得XML描述非常容易,E4X其实是JavaScript语言的官方名称,ECMA(European Computer Manufacturers Association)就是该制定该标准的机构,在ECMA JavaScript被规范定义为E4XE4X使用所有其他的一体化的AJAX技术,而不需要扩展。

 

       通过E4XXML API将不再是必要的(例如:DOM或者SAX)XML文档成为JavaScript所能理解的本地数据类型之一,你可以很容易的从JavaScript更新XML文档,这些E4X的性质可以用来创建从浏览器调用Web Services,但是支持E4X的浏览器只有Mozilla1.8

 

       E4X用来与Web Services进行交互,但是它同样只是JavaScript的一个扩展版本;如何在SOAP消息中发送请求的问题,以及如何对返回回来的SOAP消息进行操作也都难以解决,如果你在基于AJAX模型的Web应用使用了E4X,你很难将此应用到每一种浏览器。这也是另外一个缺陷。

 

       在我们的方法中,你不必要扩展任何AJAX相关技术,我们用到了AJAX中的所有的几种基本技术,我们的方法使开发者和用户能够容易的整合或者定制他们的应用。

 

4 架构:在AJAX模型中调用Web Services

       在这一部分,我们描述通用的整合了AJAX的基于Web Services的浏览器应用程序架构。在这个架构中有两个主要的角色:客户端的显示和GIS Web ServicesWeb ServicesSOAP协议调用,XML就是通过SOAP来进行消息交换的。

4.1 通用整合架构

       如何在AJAX模型中调用Web Services呢?

图一 AJAX应用程序调用Web Services

       客户端浏览器向服务器代理(JSP页面)发送请求,该服务器代理依次向Web Services发送请求,这个过程是通过使用之前准备好的Web Services Client Stubs实现的, Web Services返回给服务器代理,并呈现给客户端的浏览器。在下面我们将详细的解释这些步骤:

 

       首先,创建一个XMLHttpRequest对象用来进行一个远程描述性的调用;

- var http = new XMLHttpRequest();

 

然后,定义一个URL目标点来进行调用,该URL地址应该是本地的,这个中间代理服务用来给GIS Web Services发送一个合适的请求;

- var url = “proxy.jsp” ;

 

       在次,调用本地代理服务,URL在上面已经给出了参数定义;

- http.open( “GET” , rul + ”?bbox = ” + bbox + … [other parameter-value pairs] …… )

 

proxy.jsp就是一个中间代理服务页面,它用来抓取请求( HttpServletRequest )并且抓取响应( HttpServletResponse )对象,代理JSP仅仅包括一行代码来跟踪HttpServletRequestHttpServletResponse参数,这些参数从前一个页面而来,这些参数都是通过XMLHttpRequest协议来传递的。

       - jb.doTask( request,response )

 

       “请求”和“响应”参数来自用户交互的页面,这个首页包括一些JavaScriptXHTMLCSSJSP来抓取用户所给出的参数,它还用来在屏幕上显示返回结果。

 

       jb”是一个java类的对象,该对象使用它的请求-响应句柄以及Web Service client stubs来创建合适的请求,请求-响应句柄也用来接收和分析从GIS Web Services返回回来的响应对象。

 

       在从GIS Web Service接收到返回对象之后,“jb”对象发送返回结果到首页的XMLHttpRequest对象;

- PrintWriter pw = reponse.getWriter() ;

- pw.write( response ) ;

      

       在用户界面页上的XMLHttpRequest对象通过如下的代码获得这个值;

- http.onreadstatechange = handleHttpResponse

 

这种通用的整合架构可以应用于各种Web Services中;由于每种Web Services的返回类型不同,还有他们所提供的Service API也不一样,所以你应该掌握他们的应用程序所定义的措施和在客户端的需求。

 

       4.2中,我们将通过在GIS领域中重要的应用来验证这个整合框架的可用性和高效性。

 

4.2 应用 – Google MapsGIS显示系统的整合

       这个整合的系统实际上是一组在AJAXWeb Services之间进行调用的活动,这些活动是异步进行的,从用户端返回的对象也是异步的进行的。在4.2.14.2.2中的应用使用了图一所刻画的通用整合架构;本应用中的扩展了组成的地方会有一点小小的不同,这些不同来自那些根据服务提供方API所创建的服务对于请求的差异,还有在屏幕上显示返回数据的不同,但这些都是在实施过程中的差异。

 

4.2.1 Google AJAXWMS的整合

       客户端活动创建的用户参数在并行处理中有两个不同的工作路径,这里的活动被浏览器通过Google Mapping工具所整合。JavaScript通过活动监听器( ActionLintensers )Goolge Binding APIs获得这些活动,并送第二层的对象,如图二所示。

 

       浏览器端的用户界面是一个JSP页面,该页面包括两个JavaScript参考类,其中一个是由Google Map对象所使用,另外一个是被WMS地图图片所使用,它被绑定到Google Map对象中。

 

       根据图二定义架构,Layer-2创建的相互连接已经完成,对于Layer-1来说,Google Mapping应用是通过AJAX Web应用模型和XMLHttpRequest协议实现的,Google通过使用XMLHttpRequest和远程的浏览器中的JavaScript文件来掌控地图的创建。

 

       当我们在WMS中应用这种交互接口类型的时候,我们可以利用所有的OGC兼容的WMS函数,例如“getMap”,“getCapabilities”,“getFeatureInfo”,客户端将是一个瘦客户端;它只接收地图并且把地图放置在Google Map中。放置过程是通过一些高级JavaScript技术实现的。客户端不需要对地图进行渲染,也不需要创建地图图片。地图已经通过WMS返回,并且已经格式化成为了JPEG或者PNG或者TIFF,返回的类型在发送给WMS的“getMap”请求中作为参数给出了类型定义,这些图片在放置之前已经把这写不同的格式转换成为了JavaScript对象了。

 

图二 Google MapsOGC WMS按照图一定义的架构进行整合

 

4.2.2 Google AJAXWFS的整合

       WFS提供了要素模型的数据,这些要素模型数据是通过GML编码的矢量格式数据,GML是根据OGC WFS定义的,它通过 getFeature”的参数得到。GML是以XML编码进行地理信息数据的交换和存储,它包括几何和属性特征。

图三 Google MapsOGC WFS按照图一定义的架构进行整合

       在“getFeature”请求的响应中,GML文件以XML编码通过SOAP进行封装并响应该请求。得到响应之后,客户端获得几何元素数据,最重要最普通的几何元素是点、线串、线环和多边形。GML是一个OGC对要素模型数据描述的一个标准。

 

       虽然Google Mapping API支持其中的两个:点和线串,但是其他的几何元素同样能够通过小的更新可转换成这两种类型。得到这些几何元素之后就可以在Google Map通过“GPoints”和“GPolylines”对象以及“mapOverlayGoogle Map API函数进行绘制和组合。

 

       通过设置返回的GML的非几何元素,以及通过Google API的“GMaker”对象可以实现该架构对OGC WMS服务“getFeatureInfo”函数的支持。所有这些任务都是通过运用XMLHttpRequest APIJavaScript函数实现的。

 

       XMLHttpRequest使用DOM来解析返回的XML结构,如果返回的数据对于服务器太大的话,DOM解析器将抛出“Out of Memory 的异常。为了克服这些DOMGoolge Map反馈的信息,我们使用了Pull Parsing方式来处理,在解析和得到WFS返回的GML文档之后,结果被写入Web浏览器;通过JavaScriptXMLHttpRequest的响应XML调用,浏览器得到结果并对数据进行适当的修改后便在屏幕上进行显示。

 

5 未来的工作

       在未来,我们将继续处理该架构的一些问题。Google Map能够高速的提供地图数据,但是WMSWFS Web Services返回数据却比较慢,这其中的一些原因是由于地理数据的大小和特性造成的,另外一个原因是CPU时间消耗在生成地图图片的渲染算法上了。既然我们没有高性能的服务器和专有网络,我们就必须通过别的方法来提高性能。为了实现这个目标,我们将使用WMSWFS的流(Streaming)版本来得到组成图片的地理数据,相应地,GML通过消息中间件进行处理,例如,印第安纳大学CGL(Community Grids Lab.)NaradaBrokeringNaradaBrokering提供了GIS领域中一些重要的特性,这些特性有QOS(Quality of Service)和消息收发的安全机制,可靠的持续不断消息的存储的接口,通过WS-Reliable消息可以可靠的进行消息的分发,数据的容错处理,支持不同的通讯方式(TCPUDPMulticastSSLRTPHTTPDiscovery service to find nearest brokers / resources(高效的路游) )。您可通过我们的官方网页(GIS Research at Community Grids Lab, Project Web Site: http://www.crisisgrid.org/ )来获取我们最新的研究信息。

 

6 结论

       如果GIS显示客户端从桌面浏览器应用程序使用Web Services,如果Web Services能够响应够迅速,那么通过AJAX模型来调用Web Services执行效率也会得到提高。由于AJAXWeb Services都使用了XML作为基础来进行请求-响应的通讯,他们之间是可以起到杠杆作用的,这使应用程序开发人员可以容易的把基于浏览器应用程序的AJAX整合到Web Services中。

 

       在摘取和显示那些在地图上通过点击选择出的特定要素的信息方面,仅仅只使用Google Maps会有一些不足;通过在一些应用程序中使用GIS Web Services,并且把这个部分分配到WMS中,可以消除掉Google Map的一些缺点,并且可以运行得更快。由于Google Map API使用了DOM解析器,如果数据对于服务器来说太大的话,DOM将不可能进行解析,从XML(GML)描述的地理数据获取特征信息也将不可能;通过把GIS Web Services整合到显示应用中,通过使用Pull Parsing技术就可以消除这些缺陷。

 

       在我们的目标架构设计的方法中,我们没有更改或者扩展任何AJAX模型或者Web Services的技术,通过使用这些理论标准,你可以把任何GIS Web Services整合到应用程序的显示中去,而这只需要做一些应用程序规格上的扩充,例如,根据Web ServiceAPI创建请求,然后操控返回过来的对象。

 

7 感谢

       该项目得到了NASAEarth-Sun System Technology OfficeAdvanced Information Systems Technology Program的支持,本项目是由国家科学基金会的National Middleware发起的。

 

8 参考资料

[1] OGC (Open Geospatial Consortium) official web site http://www.opengeospatial.org/

 

[2] Booth, D., Haas, H., McCabe, F., Newcomer, E., Champion, M., Ferris, C., and Orchard, D. “Web Service Architecture.” W3C Working Group Note, 11 February 2004. Available from http://www.w3c.org/TR/ws-arch

 

[3] Jesse James Garret, Ajax: A New Approach to Web Applications. http://www.adaptivepath.com/publications/essays/archives/000385.php

 

[4] Murray G., “Asynchronous JavaScript Technology and XML (AJAX) With Java 2 Platform, Enterprise Edition” http://java.sun.com/developer/technicalArticles/J2EE/AJAX/

 

[5] Jerome Sonnet, Charles Savage. OGC Web Service Soap Experiment Report 0.8 Document#03-014, Jan 2003.

 

[6] Message based middleware project at Community Grids Lab, Project Web Site: http://www.naradabrokering.org/

 

[7] Pallickara S. and Fox G., “NaradaBrokering: A Distributed Middleware Framework and Architecture for Enabling Durable Peer-to-Peer Grids” ACM/IFIP/USENIX International Middleware Conference Middleware-2003, Rio Janeiro, Brazil June 2003

 

[8] GIS Research at Community Grids Lab, Project Web Site: http://www.crisisgrid.org

 

[9] MapServer official web site http://ms.gis.umn.edu/.

 

[10] Ka-Map official web site http://ka-map.maptools.org/.

 

[11] Tyler Mitchell, “Build AJAX-Based Web Maps Using ka-Map”

http://www.xml.com/pub/a/2005/08/10/ka-map.html.

 

[12] de La Beaujardière, J. editor, 2002. Web Map Service Implementation Specification, Version 1.1.1, OGC 01-068r3. http://www.opengis.org/techno/specs/01-068r3.pdf

 

[13] Evans, J. eds, 2003. Web Coverage Service Implementation Specification, OpenGIS® Project Document OGC 03-065r6, http://www.opengis.org/docs/03-065r6.pdf

 

[14] ISO, 2001. ISO 19119: Geographic Information – Services. http://www.isotc211.org.

 

[15] Vretanos, P. A. editor, 2002. Web Feature Service Implementation Specification, Version 1.0.0 OGC 02-058. http://www.opengis.org/techno/specs/02-058.pdf.

 

[16] Sayar A., Pierce M., Fox G. “OGC Compatible Geographical Information Services”, Technical Report (Mar 2005), Indiana Computer Science Report TR610.

 

[17] Sayar A., Pierce M., Fox G., “Developing GIS Visualization Web Services for Geophysical

Applications” ISPRS 2005 Spatial Data Mining Workshop, Ankara, Turkey.

 

[18] EcmaScript web site http://www.ecmainternational.org/

 

 

2006年10月30日

西北师范大学文学院 王东峰
  
  让老人吃好、喝好,很多人觉得这样就是孝敬老人了,殊不知,即便在古代,满足父母生活方面的需要,使其居有所、腹有食、体有衣、疾有治,也仅是对“孝子”最基本的要求,除此之外,还有很多其他的具体要求。
  
  对于老年人饮食的具体要求,《礼记》记载:“五十异粻,六十宿肉,七十贰膳,八十常珍,九十饮食不离寝,膳饮从于可也。”古代认为,人到了50岁身体开始衰弱,子孙们就应该为老人单独准备有营养的食物;60岁的人,应该经常吃点肉食,以保证身体营养所需;70岁以后,要有精美的副食佐餐;80岁以后,还要经常给老人吃珍贵的高级营养食物;90岁以后,则应随时随地给老人提供食物和饮品。
  
  古代平民一般穿的是由麻织的衣服,防寒功能自然比不上丝帛。人上了年纪以后,身体机能衰退,开始畏寒怕冷,《礼记》曰:“七十非帛不暖。”(到了七十岁,不穿丝织的衣服就会觉得冷。)所以,应该给老人穿轻暖美观的丝织衣服。
  
  《吕氏春秋》更进一步详细地阐述了“养老”的标准:“养有五道:修宫室,安床笫,节饮食,养体之道也。树五色,施五彩,列文章,养目之道也。正六律,和五声,杂八音,养耳之道也。熟五谷,烹六畜,和煎调,养口之道也。和颜色,说言语,敬进退,养志之道也。此五者,代进而后用之,可谓赡养矣。”也就是说,子孙不仅要做到使父母有舒适的住处、合理的饮食以“养其体”,还要有书籍、音乐以养其性,提供味美丰富的饮食以“养其口”,对父母毕恭毕敬、和颜悦色以养其精神,这样才能算是“赡养”,才算是“孝”。
  
  汉代标榜“以孝治天下”,并使之制度化、仪式化,大大提高了“孝”的地位,如汉元帝元年下诏曰:“年八十已上赐米人月一石,肉二十斤,酒五斗;其九十已上人赐帛二匹,絮三斤。”(八十岁以上的人每月一担米、二十斤肉、五斗酒;九十岁以上的人丝帛两匹、棉花三斤。)汉代以后历代政府都在不同程度上给老人以一定的特权,以及给他们的家庭一定补贴或在赋税上有所优待,还给孝子一定的奖励,这些开支当然属国家财政支出。
  
  相反,如果子女不孝,就要受到严厉的法律制裁。如《唐律·斗讼》中规定:“詈祖父母父母者绞。”(辱骂祖父母和父母就要判死刑。)可见对不孝的惩办严厉到了极点。为官的,如果对父母不孝,还会影响其仕途的发展,如北宋王荣“母老不迎养,供给甚薄”(不主动赡养老人,给老人吃得、住得不好),太宗闻知大怒,说:“忠臣出于孝子之门。”即诏罢免。

西北师范大学文学院 王东峰
  
  让老人吃好、喝好,很多人觉得这样就是孝敬老人了,殊不知,即便在古代,满足父母生活方面的需要,使其居有所、腹有食、体有衣、疾有治,也仅是对“孝子”最基本的要求,除此之外,还有很多其他的具体要求。
  
  对于老年人饮食的具体要求,《礼记》记载:“五十异粻,六十宿肉,七十贰膳,八十常珍,九十饮食不离寝,膳饮从于可也。”古代认为,人到了50岁身体开始衰弱,子孙们就应该为老人单独准备有营养的食物;60岁的人,应该经常吃点肉食,以保证身体营养所需;70岁以后,要有精美的副食佐餐;80岁以后,还要经常给老人吃珍贵的高级营养食物;90岁以后,则应随时随地给老人提供食物和饮品。
  
  古代平民一般穿的是由麻织的衣服,防寒功能自然比不上丝帛。人上了年纪以后,身体机能衰退,开始畏寒怕冷,《礼记》曰:“七十非帛不暖。”(到了七十岁,不穿丝织的衣服就会觉得冷。)所以,应该给老人穿轻暖美观的丝织衣服。
  
  《吕氏春秋》更进一步详细地阐述了“养老”的标准:“养有五道:修宫室,安床笫,节饮食,养体之道也。树五色,施五彩,列文章,养目之道也。正六律,和五声,杂八音,养耳之道也。熟五谷,烹六畜,和煎调,养口之道也。和颜色,说言语,敬进退,养志之道也。此五者,代进而后用之,可谓赡养矣。”也就是说,子孙不仅要做到使父母有舒适的住处、合理的饮食以“养其体”,还要有书籍、音乐以养其性,提供味美丰富的饮食以“养其口”,对父母毕恭毕敬、和颜悦色以养其精神,这样才能算是“赡养”,才算是“孝”。
  
  汉代标榜“以孝治天下”,并使之制度化、仪式化,大大提高了“孝”的地位,如汉元帝元年下诏曰:“年八十已上赐米人月一石,肉二十斤,酒五斗;其九十已上人赐帛二匹,絮三斤。”(八十岁以上的人每月一担米、二十斤肉、五斗酒;九十岁以上的人丝帛两匹、棉花三斤。)汉代以后历代政府都在不同程度上给老人以一定的特权,以及给他们的家庭一定补贴或在赋税上有所优待,还给孝子一定的奖励,这些开支当然属国家财政支出。
  
  相反,如果子女不孝,就要受到严厉的法律制裁。如《唐律·斗讼》中规定:“詈祖父母父母者绞。”(辱骂祖父母和父母就要判死刑。)可见对不孝的惩办严厉到了极点。为官的,如果对父母不孝,还会影响其仕途的发展,如北宋王荣“母老不迎养,供给甚薄”(不主动赡养老人,给老人吃得、住得不好),太宗闻知大怒,说:“忠臣出于孝子之门。”即诏罢免。

西北师范大学文学院 王东峰
  
  让老人吃好、喝好,很多人觉得这样就是孝敬老人了,殊不知,即便在古代,满足父母生活方面的需要,使其居有所、腹有食、体有衣、疾有治,也仅是对“孝子”最基本的要求,除此之外,还有很多其他的具体要求。
  
  对于老年人饮食的具体要求,《礼记》记载:“五十异粻,六十宿肉,七十贰膳,八十常珍,九十饮食不离寝,膳饮从于可也。”古代认为,人到了50岁身体开始衰弱,子孙们就应该为老人单独准备有营养的食物;60岁的人,应该经常吃点肉食,以保证身体营养所需;70岁以后,要有精美的副食佐餐;80岁以后,还要经常给老人吃珍贵的高级营养食物;90岁以后,则应随时随地给老人提供食物和饮品。
  
  古代平民一般穿的是由麻织的衣服,防寒功能自然比不上丝帛。人上了年纪以后,身体机能衰退,开始畏寒怕冷,《礼记》曰:“七十非帛不暖。”(到了七十岁,不穿丝织的衣服就会觉得冷。)所以,应该给老人穿轻暖美观的丝织衣服。
  
  《吕氏春秋》更进一步详细地阐述了“养老”的标准:“养有五道:修宫室,安床笫,节饮食,养体之道也。树五色,施五彩,列文章,养目之道也。正六律,和五声,杂八音,养耳之道也。熟五谷,烹六畜,和煎调,养口之道也。和颜色,说言语,敬进退,养志之道也。此五者,代进而后用之,可谓赡养矣。”也就是说,子孙不仅要做到使父母有舒适的住处、合理的饮食以“养其体”,还要有书籍、音乐以养其性,提供味美丰富的饮食以“养其口”,对父母毕恭毕敬、和颜悦色以养其精神,这样才能算是“赡养”,才算是“孝”。
  
  汉代标榜“以孝治天下”,并使之制度化、仪式化,大大提高了“孝”的地位,如汉元帝元年下诏曰:“年八十已上赐米人月一石,肉二十斤,酒五斗;其九十已上人赐帛二匹,絮三斤。”(八十岁以上的人每月一担米、二十斤肉、五斗酒;九十岁以上的人丝帛两匹、棉花三斤。)汉代以后历代政府都在不同程度上给老人以一定的特权,以及给他们的家庭一定补贴或在赋税上有所优待,还给孝子一定的奖励,这些开支当然属国家财政支出。
  
  相反,如果子女不孝,就要受到严厉的法律制裁。如《唐律·斗讼》中规定:“詈祖父母父母者绞。”(辱骂祖父母和父母就要判死刑。)可见对不孝的惩办严厉到了极点。为官的,如果对父母不孝,还会影响其仕途的发展,如北宋王荣“母老不迎养,供给甚薄”(不主动赡养老人,给老人吃得、住得不好),太宗闻知大怒,说:“忠臣出于孝子之门。”即诏罢免。

西北师范大学文学院 王东峰
  
  让老人吃好、喝好,很多人觉得这样就是孝敬老人了,殊不知,即便在古代,满足父母生活方面的需要,使其居有所、腹有食、体有衣、疾有治,也仅是对“孝子”最基本的要求,除此之外,还有很多其他的具体要求。
  
  对于老年人饮食的具体要求,《礼记》记载:“五十异粻,六十宿肉,七十贰膳,八十常珍,九十饮食不离寝,膳饮从于可也。”古代认为,人到了50岁身体开始衰弱,子孙们就应该为老人单独准备有营养的食物;60岁的人,应该经常吃点肉食,以保证身体营养所需;70岁以后,要有精美的副食佐餐;80岁以后,还要经常给老人吃珍贵的高级营养食物;90岁以后,则应随时随地给老人提供食物和饮品。
  
  古代平民一般穿的是由麻织的衣服,防寒功能自然比不上丝帛。人上了年纪以后,身体机能衰退,开始畏寒怕冷,《礼记》曰:“七十非帛不暖。”(到了七十岁,不穿丝织的衣服就会觉得冷。)所以,应该给老人穿轻暖美观的丝织衣服。
  
  《吕氏春秋》更进一步详细地阐述了“养老”的标准:“养有五道:修宫室,安床笫,节饮食,养体之道也。树五色,施五彩,列文章,养目之道也。正六律,和五声,杂八音,养耳之道也。熟五谷,烹六畜,和煎调,养口之道也。和颜色,说言语,敬进退,养志之道也。此五者,代进而后用之,可谓赡养矣。”也就是说,子孙不仅要做到使父母有舒适的住处、合理的饮食以“养其体”,还要有书籍、音乐以养其性,提供味美丰富的饮食以“养其口”,对父母毕恭毕敬、和颜悦色以养其精神,这样才能算是“赡养”,才算是“孝”。
  
  汉代标榜“以孝治天下”,并使之制度化、仪式化,大大提高了“孝”的地位,如汉元帝元年下诏曰:“年八十已上赐米人月一石,肉二十斤,酒五斗;其九十已上人赐帛二匹,絮三斤。”(八十岁以上的人每月一担米、二十斤肉、五斗酒;九十岁以上的人丝帛两匹、棉花三斤。)汉代以后历代政府都在不同程度上给老人以一定的特权,以及给他们的家庭一定补贴或在赋税上有所优待,还给孝子一定的奖励,这些开支当然属国家财政支出。
  
  相反,如果子女不孝,就要受到严厉的法律制裁。如《唐律·斗讼》中规定:“詈祖父母父母者绞。”(辱骂祖父母和父母就要判死刑。)可见对不孝的惩办严厉到了极点。为官的,如果对父母不孝,还会影响其仕途的发展,如北宋王荣“母老不迎养,供给甚薄”(不主动赡养老人,给老人吃得、住得不好),太宗闻知大怒,说:“忠臣出于孝子之门。”即诏罢免。

西北师范大学文学院 王东峰
  
  让老人吃好、喝好,很多人觉得这样就是孝敬老人了,殊不知,即便在古代,满足父母生活方面的需要,使其居有所、腹有食、体有衣、疾有治,也仅是对“孝子”最基本的要求,除此之外,还有很多其他的具体要求。
  
  对于老年人饮食的具体要求,《礼记》记载:“五十异粻,六十宿肉,七十贰膳,八十常珍,九十饮食不离寝,膳饮从于可也。”古代认为,人到了50岁身体开始衰弱,子孙们就应该为老人单独准备有营养的食物;60岁的人,应该经常吃点肉食,以保证身体营养所需;70岁以后,要有精美的副食佐餐;80岁以后,还要经常给老人吃珍贵的高级营养食物;90岁以后,则应随时随地给老人提供食物和饮品。
  
  古代平民一般穿的是由麻织的衣服,防寒功能自然比不上丝帛。人上了年纪以后,身体机能衰退,开始畏寒怕冷,《礼记》曰:“七十非帛不暖。”(到了七十岁,不穿丝织的衣服就会觉得冷。)所以,应该给老人穿轻暖美观的丝织衣服。
  
  《吕氏春秋》更进一步详细地阐述了“养老”的标准:“养有五道:修宫室,安床笫,节饮食,养体之道也。树五色,施五彩,列文章,养目之道也。正六律,和五声,杂八音,养耳之道也。熟五谷,烹六畜,和煎调,养口之道也。和颜色,说言语,敬进退,养志之道也。此五者,代进而后用之,可谓赡养矣。”也就是说,子孙不仅要做到使父母有舒适的住处、合理的饮食以“养其体”,还要有书籍、音乐以养其性,提供味美丰富的饮食以“养其口”,对父母毕恭毕敬、和颜悦色以养其精神,这样才能算是“赡养”,才算是“孝”。
  
  汉代标榜“以孝治天下”,并使之制度化、仪式化,大大提高了“孝”的地位,如汉元帝元年下诏曰:“年八十已上赐米人月一石,肉二十斤,酒五斗;其九十已上人赐帛二匹,絮三斤。”(八十岁以上的人每月一担米、二十斤肉、五斗酒;九十岁以上的人丝帛两匹、棉花三斤。)汉代以后历代政府都在不同程度上给老人以一定的特权,以及给他们的家庭一定补贴或在赋税上有所优待,还给孝子一定的奖励,这些开支当然属国家财政支出。
  
  相反,如果子女不孝,就要受到严厉的法律制裁。如《唐律·斗讼》中规定:“詈祖父母父母者绞。”(辱骂祖父母和父母就要判死刑。)可见对不孝的惩办严厉到了极点。为官的,如果对父母不孝,还会影响其仕途的发展,如北宋王荣“母老不迎养,供给甚薄”(不主动赡养老人,给老人吃得、住得不好),太宗闻知大怒,说:“忠臣出于孝子之门。”即诏罢免。

2006年10月27日

《坐牢家爸爸给女儿的八十封信》
猫狗谚

一 

亲爱的小文:

 
  你在美国看到了多少狗和猫?有一些很有意思的英文,都和狗、猫有关。 
  下大雨是rain cats and dogs,正是中文“大雨倾盆”的意思。中文描写雨大,说一盆水翻下来;英文则是猫狗都下下来。夫妻两人整天吵架,英文是He and his wife led a cat-and-dog life.(过猫狗一样的生活)。 
  每个人都有得意的日子,瓦片也有翻身时候,英文是The cat will mew and dog will have his day.(猫会咪咪叫,狗有他的好日子),也可以说Every dog has his day. 
  This is the dog that worried the cat that killed the rat that ate the malt that lay in the house that Jack built.是一句好玩的英文,但翻成中文,却倒过来才行:“杰克盖的房子里有麦芽,麦芽给耗子吃了,耗子给猫咬死了,猫又给狗叼(ㄉㄧㄠ)住了,这就是叼住猫的那条狗。” 
  英文中对猫的亲热称呼是puss、pussy、pussycat,小孩子玩的抢位子游戏叫puss-in-the-corner。小猫是kitten、kitty,小猫刚生下来,眼睛是闭着的,要八天到十天才睁开。sex-kitten可译做“天生尤物”。 
  猫很灵巧,很多困难都可以闪过,所以有句话说“一条猫有九条命”(A cat has nine lives.),其实猫只能活十四年,最高活到三十年(狗只活十二、三年)。猫虽有九条命,但操心也会操死,何况人只有一条命,英文有一句Care killed the cat.就是“忧能伤身”的意思。还有一句Curiosity killed a cat.(好奇会要了猫的命),是劝人不要太好打听。 
  猫碰到吃的,总是不可靠的,中文说“猫执着大鱼头睡,不吃也要摸几下”;英文也有类似的话——Honest as a cat when the cream is out of reach.也是描写一个人不可靠。 
  这张图是暹罗猫(Siamese cat),暹罗就是现在的泰国(Thailand),这种猫生下的时候是白的,一年以内才变颜色。 

爸 爸 一九七三年一月二—四日 

二 

亲爱的小文: 
  写一点好玩的和狗有关的英文给你: 
  1.A dog’s nose and a maid’s knees are always cold.(狗鼻子和少女膝盖总是凉的。) 
  2.Before you hit the dog, look at the master.(打狗看主人。这一句是中文成语翻成英文。因为打一个人的狗,你就得罪了它的主人。If you beat a dog, you insult his master.) 
  3.When the dog is beaten, the lion is tamed.(狮子驯,狗挨捶。在中文中,有一句很像的成语:“高鸟尽,良弓藏;狡兔死,走狗烹。”也可以简单地说“兔死狗烹”,翻成英文是After the cunning hare is killed,the hound is boiled.这里hound是猎犬,hare是野兔。hare的多数也是hare,有一种游戏叫hare and hounds,装兔的一边撤纸一边跑,装狗的在后面追。还有一句英文是Run with the hare and hunt with the hounds.意思是跟兔子跑又跟狗迫,表示一个人骑墙滑头,两边讨好,两边都不得罪。) 
  4.He who has a mind to beat a dog,will easily find a stick.(想打狗的,不愁找不到棒子。) 
  5.Every dog has his day.是成语,但说成Every dog has its day and every cat its night.更有意思(每条狗都有它得意的一天,每只猫都有它得意的一晚上)。 
  6.The more I see of men,the more I admire dogs.(我看到的人愈多,我愈欣赏狗。)狗的特色是忠心,尤其不因为主人倒霉就做打落水狗的事。打落水狗是人干的事,不是狗干的事。这句英文的意思是人不如狗。说这句话的是法国名女人罗兰夫人(Madame Roland)。她后来被老同志害死了。 
  7.He that sleeps with dogs, must rise with fleas.(跟狗躺下的就要跟跳蚤起来。这句有点中文“近朱者赤,近墨者黑”的意思,劝人交朋友要小心。)(你养小狗要注意替它们捉跳蚤,并问清楚该怎么给它们洗澡。) 
  8.Dog won’t eat dog,but men will eat each other up like cannibals.(狗不吃狗,但人吃人,cannibal是吃人肉的野蛮人,但文明人也“吃人”,吃法不同就是了。) 

爸 爸 一九七四年九月二十一日

2006年09月29日

动态联编

面向对象程序设计的基本观点是用程式来仿真大千世界,这使得它的各种根本特性非常人性化,如封装、继承、多态等等,而虚拟函数就是c++中实现多态性的主将。为了实现多态性,c++编译器也革命性地提供了动态联编(或叫晚捆绑)这一特征。

  虚拟函数亦是mfc编程的关键所在,mfc编程主要有两种方法:一是响应各种消息,进行对应的消息处理。二就是重载并改写虚拟函数,来实现自己的某些要求或改变系统的某些默认处理。

  虚函数的地位是如此的重要,对它进行穷根究底,力求能知其然并知其所以然 对我们编程能力的提高大有好处。下面且听我道来。

  多态性和动态联编的实现过程分析

  一、基础略提(限于篇幅,请参阅相应的c++书籍):

  1、多态性:使用基础类的指针动态调用其派生类中函数的特性。

  2、动态联编:在运行阶段,才将函数的调用与对应的函数体进行连接的方式,又叫运行时联编或晚捆绑。

  二、过程描述:

  1、编译器发现一个类中有虚函数,编译器会立即为此类生成虚拟函数表 vtable(后面有对vtable的分析)。虚拟函数表的各表项为指向对应虚拟函数的指针。

  2、编译器在此类中隐含插入一个指针vptr(对vc编译器来说,它插在类的第一个位置上)。

  有一个办法可以让你感知这个隐含指针的存在,虽然你不能在类中直接看到它,但你可以比较一下含有虚拟函数时的类的尺寸和没有虚拟函数时的类的尺寸,你能够发现,这个指针确实存在。

  class cnovirtualfun
   {
    private:
    long lmember;
    public:
    long getmembervalue();
   } class chavevirtualfun
   {
    private:
     long lmember;
    public:
     virtual long getmembervalue();
    }

   cnovirtualfun obj;
   sizeof(obj) -> == 4;
   chavevirtualfun obj;
   sizeof(obj) -> == 8;

  3、在调用此类的构造函数时,在类的构造函数中,编译器会隐含执行vptr与vtable的关联代码,将vptr指向对应的vtable。这就将类与此类的vtable联系了起来。

  4、在调用类的构造函数时,指向基础类的指针此时已经变成指向具体的类的this指针,这样依靠此this指针即可得到正确的vtable,从而实现了多态性。在此时才能真正与函数体进行连接,这就是动态联编。
  三、vtable 分析:

  分析1:虚拟函数表包含此类及其父类的所有虚拟函数的地址。如果它没有重载父类的虚拟函数,vtable中对应表项指向其父类的此函数。反之,指向重载后的此函数。

  分析2:虚拟函数被继承后仍旧是虚拟函数,虚拟函数非常严格地按出现的顺序在 vtable 中排序,所以确定的虚拟函数对应 vtable 中一个固定的位置n,n是一个在编译时就确定的常量。所以,使用vptr加上对应的n,就可得到对应函数的入口地址。

  四、编译器调用虚拟函数的汇编码(参考think in c++):

  push funparam ;先将函数参数压栈

  push si ;将this指针压栈,以确保在当前类上操作

  mov bx,word ptr[si] ;因为vc++编译器将vptr放在类的第一个位置上,所以bx内为vptr

  call word ptr[bx+n] ;调用虚拟函数。n = 所调用的虚拟函数在对应 vtable 中的位置

  纯虚函数:

  一、引入原因:

  1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。

  2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。

  为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual returntype function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

  二、纯虚函数实质:

  1、类中含有纯虚函数则它的vtable表不完全,有一个空位,所以,不能生成对象(编译器绝对不允许有调用一个不存在函数的可能)。在它的派生类中,除非重载这个函数,否则,此派生类的vtable表亦不完整,亦不能生成对象,即它也成为一个纯虚基类。

  虚函数与构造、析构函数:

  1、构造函数本身不能是虚拟函数;并且虚机制在构造函数中不起作用(在构造函数中的虚拟函数只会调用它的本地版本)。

  想一想,在基类构造函数中使用虚机制,则可能会调用到子类,此时子类尚未生成,有何后果!?。

  2、析构函数本身常常要求是虚拟函数;但虚机制在析构函数中不起作用。

  若类中使用了虚拟函数,析构函数一定要是虚拟函数,比如使用虚拟机制调用delete,没有虚拟的析构函数,怎能保证delete的是你希望delete的对象。

  虚机制也不能在析构函数中生效,因为可能会引起调用已经被delete掉的类的虚拟函数的问题。

  对象切片:

  向上映射(子类被映射到父类)的时候,会发生子类的vtable 完全变成父类的vtable的情况。这就是对象切片。

  原因:向上映射的时候,接口会变窄,而编译器绝对不允许有调用一个不存在函数的可能,所以,子类中新派生的虚拟函数的入口在vtable中会被强行“切”掉,从而出现上述情况。

  虚拟函数使用的缺点

  优点讲了一大堆,现在谈一下缺点,虚函数最主要的缺点是执行效率较低,看一看虚拟函数引发的多态性的实现过程,你就能体会到其中的原因。