2008-08-24

C++各大有名库的介绍

C++各大有名库的介绍之C++标准库

  标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。

1、Dinkumware C++ Library

参考站点:http://www.dinkumware.com/

P.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其 C/C++的产品中采用Dinkumware的库。

2、RogueWave Standard C++ Library

参考站点:http://www.roguewave.com/

这个库在Borland C++ Builder的早期版本中曾经被采用,后来被其他的库给替换了。笔者不推荐使用。

3、SGI STL

参考站点:http://www.roguewave.com/

SGI公司的C++标准模版库。

4、STLport

参考站点:http://www.stlport.org/

SGI STL库的跨平台可移植版本。

C++各大有名库的介绍——准标准库Boost

  Boost库是一个经过千锤百炼、可移植、提供源 代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。

Boost中比较有名气的有这么几个库:

Regex
正则表达式库

Spirit
LL parser framework,用C++代码直接表达EBNF

Graph
图组件和算法

Lambda
在调用的地方定义短小匿名的函数对象,很实用的functional功能

concept check
检查泛型编程中的concept

Mpl
用模板实现的元编程框架

Thread
可移植的C++多线程库

Python
把C++类和函数映射到Python之中

Pool
内存池管理

smart_ptr
5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:

Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。

  Boost总体来说是实用价值很高,质量很高的 库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost中也有很多是实验性质的东西,在实际 的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost另外一面,比如 Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。

参考站点:http://www.boost.org

C++各大有名库的介绍——GUI

  在众多C++的库中,GUI部分的库算是比较繁荣,也比较引人注目的。在实际开发中,GUI库的选择也是非常重要的一件事情,下面我们综述一下可选择的GUI库,各自的特点以及相关工具的支持。

1、MFC

  大名鼎鼎的微软基础类库(Microsoft Foundation Class)。大凡学过VC++的人都应该知道这个库。虽然从技术角度讲,MFC是不大漂亮的,但是它构建于Windows API 之上,能够使程序员的工作更容易,编程效率高,减少了大量在建立 Windows 程序时必须编写的代码,同时它还提供了所有一般 C++ 编程的优点,例如继承和封装。MFC 编写的程序在各个版本的Windows操作系统上是可移植的,例如,在Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近发展以及官方支持上日渐势微。

2、QT

参考网站:http://www.trolltech.com

  Qt是Trolltech公司的一个多平台的 C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件 编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。

3、WxWindows

参考网站:http://www.wxwindows.org

  跨平台的GUI库。因为其类层次极像MFC,所以 有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。通过多年的开发也是一个日趋完善的GUI库,支持同样不弱于前面两个库。并且是完 全开放源代码的。新近的C++ Builder X的GUI设计器就是基于这个库的。

4、Fox

参考网站:http://www.fox-toolkit.org/

  开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。

5、WTL

  基于ATL的一个库。因为使用了大量ATL的轻量级手法,模板等技术,在代码尺寸,以及速度优化方面做得非常到位。主要面向的使用群体是开发COM轻量级供网络下载的可视化控件的开发者。

6、GTK

参考网站:http://gtkmm.sourceforge.net/

  GTK是一个大名鼎鼎的C的开源GUI库。在Linux世界中有Gnome这样的杀手应用。而Qt就是这个库的C++封装版本。

C++各大有名库的介绍——网络通信

1、ACE

参考网站:http://www.cs.wustl.edu/~schmidt/ACE.html

  C++库的代表,超重量级的网络通信开发框架。 ACE自适配通信环境(Adaptive Communication Environment)是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内 存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

2、StreamModule

参考网站:http://www.omnifarious.org/StrMod

  设计用于简化编写分布式程序的库。尝试着使得编写处理异步行为的程序更容易,而不是用同步的外壳包起异步的本质。

3、SimpleSocket

参考网站:http://home.hetnet.nl/~lcbokkers/simsock.htm

  这个类库让编写基于socket的客户/服务器程序更加容易。

4、A Stream Socket API for C++

参考网站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html

  又一个对Socket的封装库。

C++各大有名库的介绍——XML

1、Xerces

参考网站:http://xml.apache.org/xerces-c/

  Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。

2、XMLBooster

参考网站:http://www.xmlbooster.com/

  这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。

3、Pull Parser

参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp

  这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。

4、Xalan

参考网站:http://xml.apache.org/xalan-c/

  Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。

5、CMarkup

参考网站:http://www.firstobject.com/xml.htm

  这是一种使用EDOM的XML解析器。在很多思路上面非常灵活实用。值得大家在DOM和SAX之外寻求一点灵感。

6、libxml++

http://libxmlplusplus.sourceforge.net/

  libxml++是对著名的libxml XML解析器的C++封装版本。

C++各大有名库的介绍——科学计算

1、Blitz++

参考网站:http://www.oonumerics.org/blitz

  Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序执行甚至可以比Fortran更快。

  Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用者可以很容易地利用Blitz++所提供的函数来构建。

2、POOMA

参考网站:http://www.codesourcery.com/pooma/pooma

  POOMA是一个免费的高性能的C++库,用于处理并行式科学计算。POOMA的面向对象设计方便了快速的程序开发,对并行机器进行了优化以达到最高的效率,方便在工业和研究环境中使用。

3、MTL

参考网站:http://www.osl.iu.edu/research/mtl

  Matrix Template Library(MTL)是一个高性能的泛型组件库,提供了各种格式矩阵的大量线性代数方面的功能。在某些应用使用高性能编译器的情况下,比如Intel的编译器,从产生的汇编代码可以看出其与手写几乎没有两样的效能。

4、CGAL

参考网站:www.cgal.org

  Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方法以C++库的形式提供给工业和学术界的用户。

2008-07-24

研究生应怎样与导师交往 专家给出六点建议

如何处理好与导师的关系,对每个研究生来说都是一个很重要的课题。研究生与导师的关系不能简单地被看作师傅与学徒的关系,也不完全是同事之间的关 系、雇主与雇员的关系。在研究生与导师的交往中有何原则和技巧呢?中国科协书记处书记冯长根教授近日在中国科学与人文论坛上从切身体会出发,给出了6条建 议。

  研究生应怎样与导师交往

  中国科协书记处书记 冯长根

  研究生与导师的关系十分重要。作为一名研究生,在刚刚进入学科内部问题时,你对这个专业的了解或者对课题共同组的了解,许多方面都来自导师。良好的师生关系会给你带来惊人的收获。

  无论是通过电话、短信、电子邮件,还是通过面对面的谈话、讨论,在攻读研究生期间,你都可能与你的导师有多次的交往,在这些交往中,你会有高兴和受鼓励的时候,但也可能会有痛苦和失望的时候。那么,研究生应当如何更好地与导师交往,并从中获益呢?

  保持与导师的联系

  当你开始做实验、做研究时,你会希望你的导师能随时随地帮助你,但是,现实情况往往是导师很忙,而且忙到你想象不到的程度。于是,你就开始担心 了。这是很多研究生,尤其是博士生都有的一个心理过程。有的时候,论文做得不是很顺利,可能不是由于你的研究水平没有达到一定高度,而是因为你把自己与导 师隔离开了。

  对此,你一定要与导师保持联系,让你的名字经常出现在导师的脑子里、嘴上、联系记录本上。这样,你不仅可以得到更多科研上的指导,而且也给导师留下深刻印象,导师在与科学共同体内的同行交流时,也乐于推荐你。这对于你今后的求职、科研都会有极大的促进作用。

  让导师经常得到你的消息

  如果不这样,导师就会认为你的工作没有问题,产生一种虚化的安全感。如果你的研究做得不顺利,导师又没有你的消息,这对你没有好处。即使是一个简单的短信,让导师知道在上一次见面六七天以后,你现在在做什么、做得怎么样,也是非常好的办法。

  即使研究没有任何进展,也不用怕跟导师说。让导师得到你的消息,无论是正面的,还是负面的都可以。因为让导师知道你的进程,对你而言一定是有利 的:如果你没有进展,导师会帮你想办法,看问题出在哪里;如果有一点进展,他会帮助你总结经验,再上台阶。总之,我建议,研究生最好一周与导师联系一次, 告诉导师自己科研工作的进展信息,并使之成为有规律的任务。

  摸清导师的性格

  导师是急性子还是慢性子,内向还是外向,脾气如何……了解导师的性格,你和导师的相处会更加融洽。可以问问实验室里比你大一点的同学,他们是怎么跟导师相处的。

  研究生要熟悉导师的说话方式、口头语,甚至是思维方式,要用导师的语言跟他交流,这样做的目的是具备与导师保持联系的能力。

  对于一些导师,如果你不把话说好,很可能要产生误解。对导师说的话,一定要像玻璃一样透明,让导师不会对你说的话产生误解。

  为了更有效,你可以确定一下你跟导师的个性有哪些差异,从而慢慢地调适自己的情绪和行为模式,尽量与导师保持一致。你的导师已经带着他的脾气---不管是好、是坏---成功了,你没有必要去犯一个低估自己导师的错误。

  赢得导师的尊重

  懒惰和不自信会失去导师对研究生的尊重。如果你偷懒,你的导师肯定不相信你;在与导师交流时,你对自己的工作没有信心,很有可能让导师对你的工 作也失去信心。很多博士生在跟导师谈话时,常常处于一种没有信心的状态下,对于有的导师,你谈话时没有信心,就会让他也都没有信心了。这是一个怪圈。博士 生如果对导师说:我能行。这3个字就可以打破这个怪圈。我以前带一名博士生,他每次都说“老师您放心”。说到的,他也做到了,我也就对他比较尊重。

  更为实质性的,是你的行动。一是你得到了科学研究很好的结果,二是你通过独立研究充分表现了你工作的努力,这两种做法容易引起导师的尊重。对大多数的博士生而言,毕业以后可能做的是别的研究、别的工作,只有独立思考、独立工作,才有助于你走向成功。

  敢于向导师提问题,适当展现个性

  我们很多硕士生、博士生,其实已经很不错了,但是在导师的面前像小绵羊似的,不敢提什么问题,不习惯向处于权威地位的导师提出要求。我想提醒的 是,如果你得到了导师的尊重,实际上你已经得到了一定的地位,你就可以跟导师谈判了,因为导师尊重你、欢迎你。这个时候你一定要注意,这是最好的时机,一 定要把握。再过几年你将毕业,答辩的时候,一个礼堂的专家可能对你提问题,你要很好地回答,你就必须学会独立思考。所以,你一定要在此之前就学会表达自己 的意见,跟导师提问题。

  硕士生可以试着和导师谈谈自己关于研究课题的个人看法,甚至是商量研究工作中的安排;博士生要学习站在自己的立场上面与导师对话,这将为以后在一群专家面前为自己的研究辩护做好准备。

  为导师写一点东西

  如果想与导师有更进一步的交往,你必须要在学术上比较活跃,特别是学术论文上。论文对你学术上的积累很重要,因为科学共同体评价一个专家,归根到底要看其学术论文。同时,论文也会给导师自己的研究工作带来便利。

  如果你已经赢得了导师的尊重,又稍稍有一点个性,跟导师交往得比较好,并且较早地将自己工作的成果写成论文交给导师,会使导师对你更有信心。导师可能会产生一个想法:我为他付出的劳动是值得的,可以在他身上花更多的时间。如果导师真的这么想,对你是有好处的。

  当然,论文是没有那么好写的,特别是写出高质量的论文,可能会遇到这样那样的困难。但是如果你真的这样做了,导师可能对你产生好感,他会很愉快地看你的论文。你的博士论文出来以后,他会一遍一遍地帮你修改。论文答辩也会变成一件水到渠成的容易事。

  我记得我在进行博士论文答辩的时候,答辩委员提问,第一个问题是“你是不是已经发表论文了”,回答这个问题对我来说不难,因为我当时已经发表了14篇论文。后面的答辩感觉就像我们之间在讨论问题一样,我没有感觉到任何的压力,整个过程非常顺畅。

  学者简介:

  冯长根:应用化学专家,现任中国科协党组成员,书记处书记。1983年毕业于英国利兹大学物理化学系,获得博士学位,同年回国任教。5年来,已 经指导培养研究生74名,目前还有14名博士生在读。曾担任北京理工大学副校长,中国科技导报主编、社长,北京市科协副主席,中国科协副主席等职务。

2008-07-22

人生的目标--盘古大观




在奥运核心区内,有一龙形楼盘,龙头高昂,龙尾略摆,造型非常的中国化,盘古大观的名字更显厚重。盘古大观共五栋楼组成,最高的龙头部分是商业楼,中间三栋则是公寓楼,龙尾则是北京惟一一家的七星级酒店。龙头顶部甚至有私人停机坪。

长411米、宽13米、高15米的“龙廊”,有66根白色花岗石方柱,柱头上高达3米的含珠龙首,每一个都由整块重50吨的花岗岩雕琢而成。这条“ 龙廊”将写字楼、公寓和酒店五栋楼连接起来。“龙廊”的上面,分别是写字楼、公寓、空中四合院以及酒店。12套空中四合院,建在龙脊之上,整个建筑象征昂首飞翔的“白色巨龙”,气势恢弘,气韵生动,与龙脉相呼应。空中四合院以老北京特有的四合院为样板修建,一板一眼都流淌着京味。据说这盘古大观从前是没有挺立的龙身和龙头的,后来在高人指点下,在四座方块楼的南侧建起高层主楼,使得整个建筑瞬间质变,从平淡无奇的楼盘晋升为极有象征意义的顶级楼盘。这巨龙,坐北朝南,屹立在北京的中轴线上,不但成为这一区域的新地标,也吸引了比尔·盖茨的眼光,他一下子就决定在这里度过自己的北京奥运之行。














四合院租一年 他花了一个亿

盘古大观的所有公寓都是层高5米,面积618平方米大开间的房子,而京城第一贵楼的称号也让人感觉到了富贵之气。公寓的价格已经卖到了每平方米5万元,据称在85米之上的空中四合院更是达到了每平方米9万元。四合院分两层,面积大约700多平方米。不过,就算你跟比尔·盖茨一样有钱,你也买不到,那里的四合院只租不卖,比尔·盖茨也只能年租而已,不过一年的租金,高达1亿元。“我们不租短期,租期至少是一年,而租费是1亿元。”销售部的易小姐向记者解释道。

据悉,目前已有不少豪富下了订单,“比尔·盖茨已经付了租金,但其他的人,我不方便透露姓名,现在已经有客户入住了。”异常谨慎的易小姐还无意中透露,四合院并没有全部租出。“四合院还有空位,如果想要租用,现在仍然还有机会。”当记者问她能否租到盖茨旁边的四合院时,易小姐回答:“有这个可能。不过如果想要租四合院,必须先将公司的情况传真过来,并得到有关部门的审核之后,才能到四合院进行参观,至于能否住到盖茨先生四合院的旁边,只有履行了第一步才能往下谈。”

当许多人关注奥运板块奥运前的市场走向时,一些国际级大公司已经在关注北京的后奥运经济走势。3月19日,盘古大观国际公寓B座64套公寓,被英国上市公 司太平洋投资联盟以每平方米4万元的价格整栋购买,一次性人民币付款15亿元用于公司自用。据介绍,国际买家看好的就是奥运后北京的持续发展。

  后奥运经济 国际买家看好


   太平洋投资联盟与盘古大观关于购买公寓的谈判持续时间也就一个月。盘古大观当前的销售均价5.5万元/平方米,据项目负责人介绍,之所以同意以4万元 /平方米的价格成交,是基于太平洋投资联盟的这次购买,对于盘古大观项目意义重大,主要是:1、北京盘古是投资有限公司的资金问题得到了全面的解决。2、 太平洋投资购买盘古大观国际公寓,主要是用于他们的国际高级管理层的使用和租给他们的国际大客户,特别是世界500强的客户和金融投资界的客户。这样会使 盘古大观的未来客户品质得以保证,实现“千万买房、亿万买邻”的构想。3、印证了盘古大观的建筑艺术品质,符合国际标准,盘古大观一贯坚守的唯一性、创造 性和民族性得艺术气质得到了国际社会的认可。4、太平洋投资联盟客户的入住,对于提高盘古大观国际声誉大有裨益。5、说明奥运区域未来的升值空间潜力巨 大。


  国际奥委会市场开发委员会主席海博格认为,2008年奥运会后中国经济的发展将被更加看好,奥运的遗产将会使北京和 整个中国的经济在其后10年甚至更长时间里长期从中受益,其中最大的受益地区无疑是亚奥版块。08奥运后,奥运场馆周边将成为北京的体育、教育、文化、会 展、旅游和商务中心。亚奥板块继CBD、金融街和中关村之后,成为北京又一商务中心。太平洋投资认为,建筑面积达42万平方米的盘古大观将在这一区域将扮 演着领航者的角色。


  













窗外美景 不可复制


  北京盘古大观国际公寓窗外“千万美景”的价值也是 吸引买家的原因。盘古大观国际公寓距鸟巢500米,距水立方只有180米。许多人来到样板间,来到窗前看到巨大的鸟巢和水立方,都发出惊叹:千万美景啊。 盘古大观窗外除了看到鸟巢、水立方、数字北京、国家体育馆,还从奥运会收到一份巨大的绿色礼物--奥林匹克森林公园,一个巨大的氧吧、富有中国山水意境的 休闲公园。这个占地680公顷,比圆明园和颐和园加在一起都要大的公园,每天可以释放出大量的氧气和负氧离子,百顷森林配合公园内的112公顷的龙形水 系,使盘古大观所处环境的空气湿度达到70%以上,生活质量及生活品质得到了很大的提升。从盘古大观国际公寓放眼望去,尽是绿色涌动,会让业主的身心得到 最大的放松。


  如果说北京CBD是商场经营肆意驰骋的“战场”,那么北京盘古大观国际公寓,无疑是层峰人士倍加推崇的生态 宜居空间。更为奇妙的是,无可复制的天然氧吧与紧扣时代经济脉搏的盘古大观A座写字楼、北京盘古七星酒店、空中四合院、商业龙廊紧密相依,使盘古大观国际 公寓的业主在生活与事业间实现完美的平衡,展现出伟大的和谐之美。


  “中国龙”建筑 极具艺术价值


  作为盘古大观项目的主力构成,北京盘古七星酒店将为盘古大观国际公寓提供世界顶尖的七星级服务。盘古大观国际公寓将以其完备的功能配套,为拥有同等身份、同样理想的人士提供创造和改变世界的通行证。


  开发者建造北京盘古大观的初衷是有感于21世纪中国伟大机遇下强烈的历史使命感。除去商业运作之外,更想为中国为北京留下一座与众不同的标志性建筑,让它成为中国当代建筑史上的新长城以及新世纪盛世中国的新标志。


  北京盘古大观的外形尤如东方巨龙,代表着超越时空的博大与无限包容的智慧。


  盘古大观的建筑设计,是由世界著名华人建筑大师李祖原先生亲自设计的。他毕生执著于“中国式建筑”,非常擅长在当代建筑中体现中国的传统文化精神,代表作是当时的世界第一高楼台湾的101大厦和西安法门寺。


  盘古大观选择了“中国龙”作为项目形象,因为,没有什么比“龙”更能诠释和代表中华民族的精神与气质。众所周知,“龙”是中华民族的图腾,在华人的心目中,“龙”是祥瑞的征兆,是权威的象征。


  超大尺度 顶级配置


   盘古大观的户型设计,是买家看好的一个重要因素。盘古大观国际公寓所有户型的使用面积均为618平方米,4房3厅4卫1厨(包括佣人房),东西通透。主 卧和客厅均为朝东方向,面向奥运会主会场,视野开阔、通透明亮,“鸟巢”和“水立方”美景盛况一览无余。4.8米的超大尺寸180度观景窗(4.8米 ×2.4米),让主人尽享明媚阳光和开阔景观。两部电梯一户人家,在北京尚属唯一。


  盘古大观的超凡尺度和顶级配置,也被 买家特别看好。盘古大观国际公寓采用干挂牟平白花岗岩外墙,门窗系统采用世界顶级的铝合金门窗断热桥设计,隔音隔热的高性能低辐射3层Low-E玻璃,保 证了室温冬暖夏凉。房间层高3.75米,顶层更达到5米。无论窗户的尺度还是房间层高的尺度,在北京都特别有竞争力。


  另外,每套公寓都拥有独立灵活的日本大金VRVⅢ系顶级空调系统,住户根据需要可选择不同使用方式,恒久享受清新空气与舒爽温度。


  车库安防、电梯安防、通道安防、内部安防等智能安保系统,时刻守卫着业主的私人领地,令业主安心无忧的享受安全和私密的家园。


  世界级顶级水冷式中央空调系统、新风系统,一应俱全。


  公寓的全钢,双开超高大门,系世界知名品牌德国BIFFAR门,制造的精密工艺,达到欧洲防盗门标准DIN EV V1627的防卫级别。


  水泵和水处理后台系统,采用世界专业很高的丹麦水泵系统,提供完备的热水和环保中水。


  充分考虑到居者高度私密性的身心需求,采用了特别设计的电梯换乘系统:一户两梯,主客分道。


  此外,盘古大观国际公寓另提供世界顶级的屋宇中央控制系统供装配选择,灯光、窗帘、对讲、空调、AV影音、室内安保、无线上网等都可实现一键式和远程控制,实现真正的智能化家居体验。


  借力2800亿政府投资,搭乘发展快车道


  据了解,奥运的直接投资为1417.31亿元,间接投资为1438.30亿元,且绝大部分都用在奥运主场馆所在地的亚奥核心版块。这笔巨额投资使亚奥核心版块在城市化进程中将领跑于北京其他城区,而占尽先机的盘古大观A座写字楼,无疑是核心区最大的受益者。


  从交通方面来看,地铁5号线、10号线、奥运支线在该区域形成地铁纵横网,公路方面南临北四环,东靠北辰西路,西连八达岭高速,仅北四环上就拥有20条公交线路,使得盘古大观四通八达,出行快捷。


   从生态方面来看,盘古大观A座写字楼,南临北四环,东临鸟巢、水立方,西望西山,北依680公顷的奥林匹克公园绿地和5000亩生态湖面,空气湿度常年 达到70%。在当前一些发达国家和地区,生态办公已成为一种新型商务办公模式,很多国际跨国公司都非常重视营造生态办公区。对于依赖商务交流且重视生态环 保的国际顶尖企业,盘古大观具有不可抗拒的吸引力。

2008-06-07

eclipse.ini说明

昨天晚上本想配一个vim的C++开发环境,但对vim、C++、Linux还不熟,不想因为这个耽误了真正编程技能的学习。于是就弄了个eclipse+cdt,很快就弄好了,但是在使用过程中eclipse却老挂掉,总是java.lang.OutOfMemoryError: PermGen space。我的-Xmx768也还是不行。后来google了一下,在eclipse.ini中加了
-XX:PermSize=64M
-XX:MaxPermSize=128M
eclipse就老老实实地呆在那里不挂了。先用这个环境吧,Linux和vim是肯定要会的,慢慢用吧,久了就熟了。

【转】eclipse.ini说明

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

下面我们一一进行回答
1. 各个参数的含义什么?
参数中-vmargs的意思是设置JVM参数,所以后面的其实都是JVM的参数了,我们首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

堆(Heap)和非堆(Non-heap)内存
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx 指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到- Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
JVM内存限制(最大值)
首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?

通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种:堆内存和非堆内存,另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize;
2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。
3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置?

那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢?这是因为我们没有遵守eclipse.ini文件的设置规则:
参数形如“项 值”这种形式,中间有空格的需要换行书写,如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机,在eclipse.ini文件中要写成这样:

-vm
C:\Java\jre1.6.0\bin\javaw.exe

按照上面所说的,最后参数在eclipse.ini中可以写成这个样子:

-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
实际运行的结果可以通过Eclipse中“Help”-“About Eclipse SDK”窗口里面的“Configuration Details”按钮进行查看。

另外需要说明的是,Eclipse压缩包中自带的eclipse.ini文件内容是这样的:

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
其中–launcher.XXMaxPermSize(注意最前面是两个连接线)跟-XX:MaxPermSize参数的含义基本是一样的,我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数,而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了,所以这里可以把 –launcher.XXMaxPermSize和下一行使用#注释掉。

3. 其他的启动参数。 如果你有一个双核的CPU,也许可以尝试这个参数:
-XX:+UseParallelGC

让GC可以更快的执行。(只是JDK 5里对GC新增加的参数)

为Java应用程序的开发而配置vi

大多数的软件开发人员都会在其生涯的某个时候碰到vi编辑器——如果不是在大学里的话,那就是在实际使用的UNIX机器上,将自己的Windows桌面机器里所编码东西安装到完全成熟的集成开发环境(IDE)里的时候。很少能够碰到长期从事微软系统开发的开发人员不会在一个月至少使用vi一次。有些开发人员很喜爱vi,而其他的则很厌恶它。但是对于一个Java的开发人员来说,要想让vi成为一个更好的开发环境将会有很多的工作需要完成。

很多人都预料Java和vi并不总是能够共同工作。因为vi是小型功利主义的同义词,而Java则像是一头笨拙的大型动物。选择将vi作为其主要工作环境 的Java开发人员可能是比较罕见的,但是即使是偶尔使用vi的用户,也能够从花上一点时间将它配置一下,使之与Java更加友好上获益。你可能会很震惊 的看到,当所有提到的工作都做到位之后,vi能够为你的IDE提供多少特性。

让我们开始吧

首先,要确信你的vi命令已经连接到了vim库,至少要象征性地连接到了或者替代了(aliased)。Vim的意思是Vi Improved,它几乎已经在vi及其衍生产品中占据了的主导地位。它速度快,易维护,特性丰富,而且几乎在每个平台上都有。

一旦你安装好了vim,就要在你的主目录下创建一个叫做.vimrc的文件。Listing A显示了一个很好的.vimrc起始文件。这个文件里的几个命令行告诉vi要给Java的源代码涂上颜色,使其更易于阅读。其结果并不十分重要,而且如果 你不喜欢显示出来的颜色,你可以放心地取消它们。

对标签跳跃的支持
标签是Java的标识符,它们可以是包装名、类名、方法名,或者是字段名。在你的代码里创建一个所有标签的大型索引,能够让你使用单个按键就跳跃到任何类、方法或者字段的定义上。这些索引文件都是使用ctags程序创建的,后者在vim的发行版里都有。

Ctags会获取Java源文件或者包含有Java源代码的目录的列表,从中提取标识符的信息,再生成所vi需要的用于跳跃到标签的排序索引。下面一行代 码是ctags调用的一个例子,只要JAVA_HOME变量被正确地定义,它会生成一个包含有项目源代码里所有标识符的标签文件,Sun核心库源代码也是 如此:

ctags -f ~/.tags -R ~/myprojects/src $JAVA_HOME/src

一旦标签索引创建好了,你所需要做的只是告诉vi要在哪里找到它。这一步是通过将set tags=~/.tags添加到你的~/.vimrc文件里实现的。有了可用的标签索引文件,而且vi也知道了要到哪里去找到它,你现在就可以通过按 [CTRL] ]来跳跃到任何标识符上了。尽管这对于跳跃到你已经定义的方法、类和你自己编写的字段上很有用,但是如果你将Java核心类库加到你的标签索引里将会更加 有用。现在,只用简单地对任何核心类库的类或者方法按[Ctrl] ],你就会跳跃到它完全使用javadoc所编写成的定义。.

标签名的填充
虽然跳跃到类、方法和字段定义所在的位置对于查看其javadoc以及检查其内容是有很用处的,但是更常见的情况是,你只是需要检查一个关键字的定义。在 大多数IDE里,这一点是通过输入关键字完成的。但是,如果你已经将你的标签文件像前面一部分所讲的那样设置了,那么在vi里填入关键字就只是一个导向性 的配置了。

将set complete=.,w,b,u,t,I这一行放到你的~/.vimrc文件里,能够让你在插入模式下通过按[Ctrl]N自动地将任何类、方法或者字 段名填满。连续按[Ctrl]N将移动到下一个相匹配的地方。当你看到你想要找的标签时,只用继续输入你源代码剩下的部分就行了。你可以在vim的Web网站上找到其他关于标签名填充的提示,包括使用Tab键来进行填充。

方法的折叠
好的实践经验告诉我们:你应该保持类的短小和简单,因为程序复杂性表现在类的层次性上,而不是500行的方法上。不幸的是,有些类已经脱离了控制,变得事实上无法移动操作了。

IDE常常会在左边一个狭窄的框体提供一个列出了内容里方法的表格,以此来减轻开发人员查看冗长源代码的困难。与之相对的是,vi提供了一种它叫做“方法 折叠(method folding)”的可折叠程序块。折叠允许你隐藏被缩排过的(indented)代码块开头和结尾之间的所有代码。要激活折叠,就要把set foldmethod=indent加到你的~/vimrc里。

一旦方法的折叠被激活,你就可以使用:set foldlevel=0来极大地精简一个Java的源文件。如果将折叠的层数设置为零,那么你就是在告诉vi只显示完全没有被缩排的命令行,而后者在大多 数Java源文件里代表着包装、导入,以及类或者接口的定义行。设置foldlevel=1就是告诉vi说:除了没有被缩排的命令行,只缩排过一次的命令 行也应该被显示,它们包括方法的签名以及其他一些不多的内容。要打开一个折叠夹并查看某个方法所隐藏的内容,你就要在被折叠的命令行上输入zO。

通过设置foldlevel就能够很轻易地开启或者取消方法的折叠。我喜欢在调试的时候使用它,但是不喜欢在编写新代码的时候使用它。你要自己来决定它应该如何去适应你的工作方式。
IDE不仅仅只是用于编辑;它们还是编译环境。Vi在不需要使用外部编译器和剖析结果信息上的工作做得非常好。现在很多Java的项目都将易于编写脚本的 Ant作为一个创建环境。我没有向.vimrc文件里加载很多Ant专用的设置,而是单独创建了一个做作vimAnt脚本,见Listing B。

这个脚本调用了一个带有几个参数的Ant可执行文件,然后对输出进行过滤,让其只包含编译器输出。你现在几乎就准备好从vi里调用Ant了。你只需要将 Listing C里的命令行加到你的~/.vimrc文件里。这些命令行告诉vi要调用你所创建的vimAnt脚本,并提示它如何剖析Ant的jikes输出。

在你的系统路径下有了vimAnt脚本之后,你现在就可以使用:make命令来初始化编译了。当前目录及其所有的父目录都会被搜索,以寻找一个build.XML文件,这个文件的类对象会被调用。错误输出会被vi自动地剖析。

一旦你在vi里进行了带有错误的编译,你就可以使用快速修复(quick fix)模式来迅速地到达错误地点,进行及时的修补。:cn命令会把你带到下一个出错地点,而不考虑它在什么文件里。:cc命令会向你显示当前错误的编译 器输出信息;而:cl会生成一个列有项目所有错误的列表,以供浏览这些错误。修补好你的错误,你就离成功的编译只有一:make之遥了。

【鲜为人知】清朝海军方美

一年出访八个国家 化解拉美排华暴乱 清朝海军赴美搞军舰外交
清朝“镇海之宝”远航欧美,访问途中官兵集体剪辫
9月11日(2006年),中国海军舰艇编队从美国夏威夷出发,继续横跨太平洋的行程。由于舰队还将访问美国本土,这次航行备受人们关注。而在整整95年前,孤独的中国巡洋舰“海圻”号也曾跨越三大洋,进出8国14港,创造了旧中国海军空前绝后的一次“军舰外交”旅程。
自1895 年甲午海战惨败后,在张之洞、刘坤一等有识之士的努力下,清朝开始了缓慢而艰难的重建海军之路。清政府先后从英德等国买回43艘军舰,但因囊中羞涩,只有 从英国订造的“海圻”号巡洋舰够大够先进。这艘号称“天字一号艨艟”的军舰上有两门8英寸炮,是当时中国海军的“镇海之宝”。尽管兵微将寡,但朝廷里的达 官显贵们却迫不及待地拿海军作为外交使节,发挥“移动国土”的作用。
1910年英王爱德华七世逝世,其子乔治五世继承王位,定于1911 年6月22日举行加冕庆典,并邀请包括中国在内的18国200余艘军舰参加庆祝仪式。于是清政府决定派专使亲王载振前往祝贺,并下令海军部“加派巡洋舰队 统领程璧光率领海圻巡洋舰前往,顺访美利坚诸国”。其规格之高,兴办之隆,在清朝260多年外交史上是绝无仅有的特例。






1911 年4月21日,“海圻”号载着300多名大清海军精英,从上海起航,经台湾海峡、南中国海驶出国门,穿过印度洋、红海、地中海,经直布罗陀海峡进入大西 洋。在史无前例的万里远航中,统领程璧光做出惊人举动:他在后甲板集合全舰水兵,发表训令:“长发污衣藏垢,既不卫生,又有碍动作,尤以误害海军军人为 甚,故实无保留之价值。”他下令本舰士兵一律剪掉拖在脑后的发辫,以符合世界潮流,此举获得士兵的一致拥护,但也有一些老兵舍不得长长的发辫,便用红布包 裹,寄回家乡。 
中国军舰在英参加阅舰式,清朝使者陪英王进行检阅
6月20日,“海圻”号驶抵英国朴次茅斯军港。候阅期间,英国皇家海军为增进各国海军交流,在6月22日举行万国海军田径运动会,不晓得田径为何 物的“海圻”号水兵也派出数十名体格健壮者组队参赛。在这场有数万市民观战的比赛中,“海圻”号代表队虽与奖牌无缘,但无一人犯规,无一人中途退场,尤其 是在200米跨栏比赛中,信号兵孟广吉在连跨两栏后被绊倒,“仆地裂肤,流血满胫,仍奋勇到达终点,在场观者掌声如潮”。为此“海圻”号代表队获得大会主 席的表扬。 
6 月24日上午11时许,乔治五世国王偕玛丽王后在海军大臣丘吉尔的陪同下检阅各国舰队,中国专使载振和程璧光应邀陪英王乘坐同一艘游艇观舰。当英王乘艇接 近检阅区时,80艘各型战舰分8行威武阵列,全部旗帜高悬,舰上官兵昂首在甲板列队。隆重壮观的观舰式持续了1小时20分钟,回港途中,乔治五世接见了中 国海军统领程璧光,并向其颁赠“加冕银牌”。观舰式结束后,“海圻”号也趁机回了趟“娘家”――位于纽卡斯尔的阿姆斯特朗造船厂,进行为期一个月的维修。




美女演员狂吻中国将军,中国军舰赴古巴化解排华暴乱
由于1908年美国“大白舰队”周游世界、途经厦门时备受中国海军优待,美国海军部多次邀请中国海军回访,于是“海圻”号在英国完成大修后,便向美国东海岸进发。经过两周连续航行,8月10日,“海圻”号抵达纽约。
中国军舰首次访美,在全美上下引起强烈反响。已故美国总统格兰特之子、纽约区陆军最高司令官小格兰特将军派夫人陪同“海圻”号官兵拜谒格兰特总统 陵墓。还有一些美国商人出于个人目的,也向程璧光大献殷勤。美国铁路公司总干事以游览尼亚加拉大瀑布为幌子,将中国客人拉到伯利恒钢厂参观。纽约造船厂老 板罗伊泽认定程璧光必将成为未来中国海军的“掌门人”,便送给程璧光一只名贵的波斯猫,称这只猫能在关键时刻帮程璧光“做出正确的抉择”,目的是想讨好程 璧光,争夺中国军舰订单。
抵美第四天,程璧光等前往波士顿,会见正在别墅休假的塔夫脱总统,并应邀观看了在美国轰动一时的话剧《红寡妇》。坐在贵宾包厢里,程璧光在英文 翻译的讲解下看得有滋有味。颇会来事的新任副官刘永浩试探美方联络官:“演出结束后,不知能否安排统领到后台参观?”美方联络官心领神会,立即耳语侍者办 理。等到剧终,程璧光刚刚起身,剧院经理便笑容可掬地站在包厢门口,恭请他驾临后台指教。此时,全体演职员以饰演红寡妇的女主角打头,鼓掌欢迎中国海军将 军。程璧光见状大悦,即席致词,对演职人员的精彩表演给予高度赞扬。剧院经理兴奋地鼓动道:“女士们,让我们来认识一下这位海军将军吧!”还没有等程璧光 明白是什么意思,霎时数十名浓妆艳抹的美女紧紧围住程璧光,一番狂吻让堂堂一舰之长变成“大花脸”。事后,谨守“男女授受不亲”原则的程大人一再“责怪” 刘副官:“都是你惹的麻烦!” 
“海圻”号停泊纽约期间,恰逢拉美一些国家发生排华暴乱,“海圻”号奉命顺访古巴、墨西哥,以宣慰侨胞。8月中旬,“海圻”号驶抵古巴首都哈瓦 那,立刻受到古巴华侨的热烈欢迎。更令官兵们感动的是,每当离舰登岸,一遇侨胞,无论男女老少,都竞相请至家中,盛情招待,临别还赠送各种纪念品。舰队的 到访也让古巴政府对华侨的态度产生了变化,古巴总统接见程璧光时特意表示:“古巴军民决不会歧视华侨。”
“海圻”号在古巴停泊10天后,原计划继续访问墨西哥,但因墨西哥政府已就排华事件正式向清政府赔礼道歉,偿付受害侨民生命财产损失,“海圻”号于是取消了访问计划。





万里远航耗时一年,回国途中参加辛亥革命
本来,“海圻”号回国计划从巴拿马运河进入太平洋,这样不仅能完成中国海军第一次环球航行,而且航程也比沿原航线回国整整缩短三分之一。但考虑到“海圻”号的存煤量有限,单舰横跨广袤的太平洋存在一定风险,最终还是决定原路返航。 
1911 年9月初,“海圻”号从哈瓦那解缆起航,当到达英国巴罗港时,全舰官兵得知一场开天辟地的辛亥革命在中华大地爆发,顿时群情激昂。三副黄仲煊在舰上展开地 下活动,争取程璧光同意领导全舰官兵在海外易帜,加入革命阵营,扩大国际影响。程璧光为此专门集合全舰官兵在甲板训话,他开门见山地说:“你们任何人如欲 回国参加革命工作,请站到右舷,不赞成的站到左舷。待我数完‘一、二、三’,就请各位按自己的意愿,决定行动。”言毕,程璧光略微停顿几分钟,接着高声喊 出“一、二、三”。只见列队甲板左舷的官兵全部移至右舷,就连纽约造船厂老板罗伊泽所赠的那只波斯猫也不例外。一时间,全舰掌声雷动,官兵们欢呼雀跃。 
1912年5月,升起中华民国国旗的“海圻”号终于回到上海,完成了这次传奇航行

2008-06-06

细说CSS样式选择符(三)

英文原文:http://www.456bereastreet.com/archive/200510/css_21_selectors_part_3/
中文原文:http://www.dudo.org/article.asp?id=195
这本文的第三部分,也是最后一部分。在第一部分中我们介绍了类型选择符、类选择符、id选择符、通配选择符和简单选择符的基础知识。第二部分中我们介绍了选择器、混合选择符、分组和属性选择符等。

这部分我们将着重研究伪类和伪元素。和第二部分中介绍的高级选择符一样,伪类和伪元素并没有得到所有主流浏览器的完全支持,因此一定要留意在缺乏浏览器支持时可能发生的情况。你一定不想让你网页的内容在不支持这些选择符的浏览器中变得无法让人阅读。

伪类和伪元素
伪类和伪元素通过文档中并没有声明的信息来选取元素的。例如,并没有元素代表段落中的第一行或者元素内文本的第一个字母。

伪类
伪类通过元素的特征而不是元素的名称、属性、内容来匹配元素的。
:FIRST-CHILD
它匹配作为父元素中第一个字元素的元素。假如你想为文章中的第一段设定一个特殊的样式,再假设文章被包含在一个class为article的div中,那么下面这段代码将会匹配每篇文章中的第一个p元素:
  1. div.article p:first-child {
  2. font-style:italic;
  3. }
要匹配所有元素中的第一个p元素,可以采用下面的规则:
  1. p:first-child {
  2. font-style:italic;
  3. }
:LINK 和 :VISITED
linke伪类作用于访问过和未访问过的链接。这两种状态是相互排斥的:也就是说一个链接不可能同时既是访问过的又是未访问过的。
这些伪类只能应用于根据文档采用的语言类型定义的超级链接上。对于HTML来说,就是拥有href属性的元素。由于它们不会在其它元素上生效,因为下面的选择符写法是一样的:
  1. a:link
  2. :link
:HOVER,:ACTIVE和:FOCUS
动态伪类可以根据用户的选定动作的控制选定元素的表现等式。
:hover应用于当用户鼠标指针指向一个元素但并没有激活它时。最常见的就是用鼠标把指针移动到元素上方时。
:active应用于当元素被用户激活时。对于鼠标用户来说就是当鼠标被保持按下时状态,直到你松开前。
:focus应用于当元素获得焦点时,例如,用键盘输入信息时。

一个元素可以同时使用几个伪类。例如,下面的例子中一个元素同时有focus和hover两个状态:
  1. input[type=text]:focus{
  2. color:#000;
  3. background:#ffe;
  4. }
  5. input[type=text]:focus:hover{
  6. background:#fff;
  7. }
第一第规则应用于当元素获得焦点时,第二第规则应用于被激活时的同一个元素。

:lang
语言伪类可以用于格式化内容指定了特定语言(人类可读语言,非标记语言)的元素。下面这条规则应于指定了瑞典语的引用元素:
  1. q:lang(sv) { quotes:"\201D" "\201D" "\2019" "\2019"; }
文档或元素中语言类型通常是通过HTML中的lang属性或者XHTML中xml:lang属性定义的。

伪元素
伪元素允许作者指定并修改文档树结构中没有声明的节点的样式。
:FIRST-LINE
:first-line伪元素作用于段落中文本的第一行。它只能用于块级元素、inline-block、表头(table-caption)或者表格内框(table-cell)。
显然,第一行的长度取决于很多因素,比如字体的大小、包含文本的元素的宽度等。
下面这条规则将会应用到段落中文本的第一行:
  1. p:first-line {
  2. font-weight:bold;
  3. color:#600;
  4. }
注意:伪元素:first-line中可能使用的属性是有限制的,具体参看《:first-line伪元素》中的说明。

:FIRST-LETTER
这个伪元素指向的是块级元素,列表、表格内框(table-cell)、表头(table-caption)、inline-block元素中的第一个字母或者数字。

下面的规则将应用到class为preamble元素中的第一个字符:
  1. .preamble:first-letter {
  2. font-size:1.5ed;
  3. font-weight:bold;
  4. }
和:first-line一样,:first-letter的中可以使用的属性也同样有一定的限制。请参照[url=http://www.w3.org/TR/CSS21/selector.html#first-letter]《:first-letter伪元素》。

:BEFORE和:AFTER
更多关于CSS特征的讨论都是围绕这两个伪元素展开的,:before和:after伪元素可能用于在指定元素前或后插入扩展内容。
下面是一个使用:before的例子(引自文章《用高级CSS功能制作边框》
  1. .cbb:before{
  2. content:"";
  3. display:block;
  4. height:17px;
  5. width:18px;
  6. background:url(top.png) no-repeat 0 0;
  7. margin:0 0 0 -18px;
  8. }
使用:after在链接的文本后面插入一个URL:
  1. a:link:after {
  2. content:" (" attr(href) ") ";
  3. }
Internet Explorer中的问题
在你开始使用所学的关于CSS选择符的知识前,到目前为止包括6.0在内Internet Explorer对CSS2.1选择符的支持并不完整。下面是IE不支持或者支持上存在问题的地方:
    子选择符
    相邻兄弟选择符
    属性选择符
    多类选择符
    :first-childe伪类
    语言伪类
    :before和:after伪类
    伪类:hover只在a元素中起作用
    不支持伪类:focus。对于a元素获得焦点时使用:active
幸运的是,在Internet Explorer 7中CSS2.1中规定的选择符都得到了支持。

马上开始使用
本文到此全部结束。现在你已经学会CSS2.1中所有的选择符了。仔细地运用他们,使你的文档保持简洁,增加可用性和要访问性。一定要牢记考虑老式浏览器和不支持高级选择器中浏览器的种种状况。

细说CSS样式选择符(二)

英文原文:http://www.456bereastreet.com/archive/200510/css_21_selectors_part_2/
中文翻译:http://www.dudo.org/article.asp?id=194
本文是关于CSS2.1选择符系列文章的第二部分。第一部分主要是讲关于类型选择符、类class选择符、id选择符、通配选择符和简单选择符的基础知识。
而在本部分中,我们主要讲一下选择符的高级应用,这不仅仅包括已经在主流浏览器中得到广泛支持的那些选择符。现在,浏览器对选择符的支持越来越完善,因此完全有必要拿出点时间来了解一下本文所介绍的所有选择符。

选择器
选择器用于将组成混合选择符的多个简单选择符分隔开来。CSS2.1中定义的选择器包括空格(任何数目的tab制表位、空格、具有空格性质的其他字符),大于号“>”和加号“+”。在现在的章节中我们将一一介绍这些选择器的使用。

后代选择符
后代选择符由两个或者多个简单选择符通过空格分隔而组成。他匹配第一个简单选择符对应元素的所有后代元素。例如,下面这条规则将会应用到是div后代的p元素上去:
  1. div p { color:#f00; }
任何形式的简单选择符都可以是后代选择符的组成部分。下面的例子中CSS规则将会应用到id是myid的div中的、li元素下的、类名为info的p元素中:
  1. div#myid li p.info { color:#f00; }
后代选择符可以使我们在不用指定id或者class的情况下选取目标元素,这有助于使文档中的标记更加简洁。假设我们有一个如下结构的导航菜单:

  1. <ul id="nav">
  2. <li><a href="#">Link 1a>li>
  3. <li><a href="#">Link 2a>li>
  4. <li><a href="#">Link 3a>li>
  5. ul>

要选取导航栏中的列表元素和超级链接,我们可以使用下面的CSS规则:

  1. #nav li { display:inline; }
  2. #nav a { font-weight:bold; }

上面的规则不会应用到文档中的所有列表元素和链接中去。和一一给它们指定一个class相比,使用后代选择符会使你的文档清洁不少。

子选择符
子选择符用于择取指定元素的直接后代。子选择符由两个或者多个选择符通过大于号“>”分隔而成。父元素在“>”的左侧,在选择器“>”的两侧允许有空白存在。

下面的规则将会就用到所有div的子元素strong中去:
  1. div > strong { color:#f00; }
只有是div直接后代的strong元素才是这条规则的目标元素。如果文档中在div和strong元素中间有其他元素的话,这条规则就是无效的。下面的例子中只有“Text one”样式受上面规则的影响:

  1. <div>
  2. <strong>Text onestrong>
  3. <p><strong>Text twostrong>p>
  4. div>

相邻的兄弟选择符
相邻的兄弟选择符由两个或者多个简单选择符通过加号“+”分隔而组成。加号两侧允许有空白存在。它匹配第一个元素的下一个兄弟元素,这两个元素必须具有相同的父元素,并且第一个元素和第二个元素在其前与其紧密相邻:
  1. p + p { color:#f00 }
如果把上面这条规则应用到下面的例子中,那么“Paragraph two”样式受影响:

  1. <div>
  2. <p>Paragraph onep>
  3. <p>Paragraph twop>
  4. div>

分组
之所以在这里讲分组,是因为我发现在学习分组混合选择符的时候经常会有人出错。
如果利用几个不同的选择符对不同元素应用相同的样式时,就可以使用逗号“,”把它们分组而不用为每个选择符重复同样的规则了。这里最容易出现的错误就是选择符的不完整。假设我们有下面这么一段代码:

  1. <div id="news">
  2. <h3>Newsh3>
  3. <ul>
  4. <li>Item 1li>
  5. <li>Item 2li>
  6. ul>
  7. div>

假设我们要给只有在id为news的div下的三级标题和列表元素应用相同的规则,那么下面这种写法就是错误

  1. div#news h3, ul {
  2. margin:0 2em;
  3. }

它会影响到div#news下的h3和ul元素,但是问题就在于它同样会影响到文档中所有ul元素,而不仅仅是div#news下的ul元素。

下面这种写法才是正确的分组选择符的写法:

  1. div#news h3,
  2. div#news ul {
  3. margin:0, 2em;
  4. }

因此,在使用分组选择符时,一定要记住选择符书写完整。

属性选择符
属性选择符根据属性名称或者属性值来匹配元素。属性选择符有四种匹配模式:
[att]
匹配所有拥有att属性的元素,与属性值无关
[att=val]
匹配所有拥有att属性且属性值为val的元素
[att=~val]
匹配所有拥有att属性的元素且val是其属性值由空白分隔开的一个完整单词。在这各情况下val中间没有空白。
[att|=val]
匹配所有拥有att属性的元素,并且att的属性值是由连字符组成,val处于连字符的开始。它主要用于通过lang属性指定特定语言的情况中,例如:“en”、“en-us”,“en-gb”等等。

下面是一些例子。
匹配有title属性的p元素而不管它的值是多少:
  1. p[title] { color:red; }
下面的例子将匹配class属性等于error的div元素
  1. div[class=error] { color:#f00; }
要匹配headers属性中含有“col1”的td元素则可以使用下面的规则:
  1. td[headers~=col1] {color:#f00}
最后,下面的这条规则就匹配lang属性值中连字符前半部分以“eu”开始的p元素:
  1. p[lang|=en] { color:#f00' }
在同一个选择符中多个属性选择符可以同时使用。这样我们就可以用多个不同的属性值来区分相同的元素了。下面这个例子将会匹配到属性class值为quote且有cite属性(不管值是多少)的blockquote元素:
  1. blocquote[class=quote][cite] { color:#f00; }
待续……

这一部分就是这些内容了。在最后的第三部分中,我主要想讲一下伪类和伪元素选择符。到这里你可以先回顾一下第一部分中的内容,重复是学习的好方法:)。

细说CSS样式选择符(一)

注:此帖为转贴,原文地址:http://www.dudo.org/article.asp?id=193

英文原文:http://www.456bereastreet.com/archive/200509/css_21_selectors_part_1/
中文翻译:http://www.dudo.org/article.asp?id=193

当你学习CSS时,要学的第一个东西就是选择符(selector)。显然,选择符是CSS中最基础的部分,但是却很少有开发者能将他们物尽其用。当你使用type、ID、class等选择符来完成你的作品时,你可能还不知道除此之外还有很多很多关于它的东西要学。
熟练掌握CSS2.1中所有可用的选择符可以使我们的HTML文档更加简洁明了。可以使你最少量地使用class属性,尽量避免多余的div和span标签出现等。怎么样,听起来还不错吧?
那 么为什么并不是所有的选择符都被得到广泛地应用呢?其中一个很重要的原因就是包括Internet Exlorer 6.0在内的所有IE版本对CSS2.1支持的缺陷造成的。然而几乎所有的现代浏览器都在最大程度上支持CSS2.1中规定的选择符。在我们开始一切工作 之前我们必须意识到这些差别。
令人欣慰的是,在IE7.0对选择符的支持得到了很大程度的提高。得知这个消息后,在未来的设计中你就可以放心大胆地使用它们了,因此也有必要全面了解和掌握所有规定的选择符了(本文发表时IE7.0还在开发中 dudo注)。
由于CSS2.1中规定的选择符有很多,因此在一篇文章中想把他们解释的很清楚可能会需要很长很长的篇幅来写,所以我将从下面三个部分来分开讲解,以期这些知识简单易接受。

1、本文第一部分,讲解包括通配符、类型选择符、id、class在内的基本的选择符;
2、第二部分主要讲选择器(combinators)、联合选择符(grouping)、分组和属性选择符
3、第三部分主要讲解伪类和伪元素(pseudo-classes and pseudo-elements)
好,我们开始第一部分的讲解。

选择符基础
首先是一个最基本的知识点:CSS选择符是与文档树结构中元素匹配的一种模式。当模式中的匹配结果返回true时,CSS中声明的样式才会应用到相匹配的元素中去。以下面这个简单的CSS语句为例来说:
  1. p { color:#f00; }
选择符CSS语句中大括号“{”前面的部分。这里的选择符就是p,它将匹配文档中所有的p元素并把p元素内的文本设置为红色。这个例子很基础。

选择符概述
好,看过上面简单的例子之后,我们介绍一下其它一些选择符,现在开始已经慢慢地深入了。在开始介绍之前,还是选看一下CSS2.1所有选择符的结构吧。

CSS2.1选择符结构

  1. 选择符类型 模式 说明
  2. 通配选择符 * 匹配所有元素
  3. 类型选择符 E 匹配所有E元素
  4. 类(Class) .info 匹配所有属性class值等于info的元素
  5. ID #footer 匹配所有属性id值等于footer的元素
  6. 后代选择符 E F 匹配所有为E后代的F元素
  7. 子选择符 E > F 匹配所有为E子元素F
  8. 邻近选择符 E + F 匹配所有E的兄弟元素F
  9. 属性选择符 E[att] 匹配所有拥有att属性的E元素,与属性值无关
  10. 属性选择符 E[att=val] 匹配所有拥有att属性且值为val的E元素
  11. 属性选择符 E[att~=val] 匹配所有拥有att属性且val为属性值中一个完整单词的E元素
  12. 属性选择符 E[att|=val] 匹配拥有拥有att属性且val是其值的开始
  13. :first-child伪类 E:first-child 匹配所有处于其父元素中的第一个节点E元素
  14. 链接伪类 E:link 匹配所有未访问过的链接
  15. E:visited 匹配所有已经访问过的链接
  16. 动态伪类 E:active 匹配所有激活状态中的链接
  17. E:hover 匹配鼠标经过时的链接
  18. E:focus 匹配处于焦点状态的链接
  19. :language伪类 E:lang(c) 匹配所以语言为c的E元素
  20. :first-line伪类 E:first-line 匹配元素E中内容的第一行
  21. :first-letter伪类 E:first-letter 匹配E元素中的首字母
  22. :before 和 :after E:before 匹配在E元素前(后)插入的内容
  23. 伪类 E:after
下面我将在后面的两部分中更加详细地解释这些选择符,请继续往下看。上表中用到了一些术语,下面我简单解释一下:
后代:
在文档树结构中一个元素的子元素,子元素的子元素,直到这个元素的最底层为止。
祖先:
在文档树结构中一个元素的父元素,父元素的父元素,甚至更上一层的元素
子元素
是指在文档树结构中一个元素的直接后代,他们之间再也没有任何其他元素出现
父元素
是指在文档树结构中一个元素的直接祖先,他们之间再也没有其他任何元素出现
兄弟元素
是指和当前元素拥有同一父元素的元素

简单选择符 和 混合选择符
选择符中有两个基本的类型:简单选择符和混合选择符。
简单选择符由一个类型选择符或者通配符加上零个或者多个属性选择符,ID选择符,伪类选择符构成。下面的语句就是一个简单选择符的例子:
  1. p.info { background:#ff0 }
混合选择符由两个或者多个简单选择符通过连接符组成。下面是一个非常简单的混合选择符。
  1. div p { font-weight:bold; }
上面这条规则将会应用到所有div内的元素p上
选择符有时可能会使用伪类。在混合选择符中,伪类只能出现在最后一个简单选择符后面。

通配选择符
通配选择符用一个星号“*”来表示,它匹配文档中的所有元素。在样式表中一般很少见,但是它有时候会配合class和ID选择符一起使用。如果简单选择符中不仅仅含有通配选择符,那么“*”可以省略不写。
.myclass就等同于 *.myclass
#myid 等同于 *#myid
通配选择符的一个广泛应用就是用来把所有元素的margin和padding值设为0:
  1. * { margin:0; padding:0; }
这就是有时所说的全局空白重设

类型选择符
类型选择符匹配所有指定的元素。下面这个示例将匹配文档中所有段落元素p,并设定字段大小为2em:
  1. p {font-size:2em;}
类选择符
类选择符用点号“.”来表示,根元素的class属性值来指定元素。下面这个示例将把所有属性class为info的p元素背景设为红色:
  1. .info { background:#f00; }
你可以给一个元素设定多个类名,不过每个类名中间要用空格隔开。类选择符就可以指向拥有多个类名的元素了。下面的例子中将来定义类名既有info又有error的p元素:
  1. p.info.error { color:#900; font-weight:bold; }
注意:多类选择符IE6.0以前的版本并不支持,IE7支持。

元素类型可以不用写。下面这条语句也同样会应用到所有class为info的p元素中去:
  1. .info { background:#ff0; }
ID选择符
ID选择符用“#”来表示,根据元素的id属性值来匹配元素。下面这个规则将应用到id为info的元素中去,而不管他的类型是什么:
  1. #info { background:#ff0; }
如果同时也指定了元素类型,那么规则将只有应用到指定的类型上:
  1. p#info { background:#ff0; }
有一点一定要记住,ID选择符优先级高于class类选择符,并且在同一文档中id必须唯一。因此,ID选择符制定的样式最终只会应用到文档中的一个元素上。

待续。。。

以上就是第一部分的内容。在第二部分中,我们将学习选择、混合选择符、分组和属性选择符,在第三部分中我们将详细了解伪类和伪元素。