<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>肆无忌惮</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/" />
    <link rel="self" type="application/atom+xml" href="http://www.45eggs.com/atom.xml" />
    <id>tag:www.45eggs.com,2009-10-24:/1</id>
    <updated></updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.13-en</generator>

<entry>
    <title>解决PhoneGap（Cordova）在iOS中启动画面闪动的问题 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/2012/stop-ios-launch-image-moving-up-in-phonegap.html" />
    <id>tag:www.45eggs.com,2012://3.626</id>

    <published>2012-04-11T06:34:59Z</published>
    <updated>2012-04-11T06:46:08Z</updated>

    <summary>使用PhoneGap开发iOS上的WebAPP的朋友或许会发现，在Xcode中选择启动画面图片（Splash）时，要求的图片尺寸是1024x748（横屏），768x1004（竖屏），然而在APP启动的时候，启动画面会在进入APP的那一瞬间向上移动，导致底部留出一行的空白，以下借用一张图来描述跳动的问题：...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
    <category term="cordova" label="Cordova" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ios" label="iOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="phonegap" label="PhoneGap" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="splash" label="Splash" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>使用PhoneGap开发iOS上的WebAPP的朋友或许会发现，在Xcode中选择启动画面图片（Splash）时，要求的图片尺寸是1024x748（横屏），768x1004（竖屏），然而在APP启动的时候，启动画面会在进入APP的那一瞬间向上移动，导致底部留出一行的空白，以下借用一张图来描述跳动的问题：</p><p><a href="http://www.45eggs.com/upload/2012/04/JK13H.png"><img alt="JK13H.png" src="http://www.45eggs.com/assets_c/2012/04/JK13H-thumb-600x450-434.png" width="600" height="450" class="mt-image-none" style="" /></a></p>]]>
        <![CDATA[解决办法是：制作这张Splash图片的时候，尺寸做成1024x768（横屏），768x1024（竖屏），仅此而已，只不过在Xcode的项目配置画面上，Splash图片的地方会出现一个小小的感叹号，提示图片尺寸不符合建议值。<div><img alt="003.png" src="http://www.45eggs.com/upload/2012/04/003.png" width="529" height="134" class="mt-image-none" style="" /></div><div><br /></div>]]>
    </content>
</entry>

<entry>
    <title>不容小觑 色情网站有多大？（转） - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/internet/2012/just-how-big-are-porn-sites.html" />
    <id>tag:www.45eggs.com,2012://3.625</id>

    <published>2012-04-11T04:06:00Z</published>
    <updated>2012-04-11T05:33:07Z</updated>

    <summary>色情网站有多大？根据谷歌旗下广告服务商Doubleclick的数据显示，独立访问量前500名的网站中，竟有数十个是成人网站。而色情网站的数据流量又极大，有人估计，色情网站的数据传送量可能占整个互联网的30%。 生活在互联网世界的人，都曾或多或少地浏览过在许多国家仍受管制的色情网站。我们很难洞察这类网站的发展状况，因为相关的确切数据实在是少之又少。可以肯定的是，色情网站的访问量肯定少不了。事实证明上述猜测是正确的，因为根据谷歌旗下广告服务商Doubleclick的数据显示，独立访问量前500名的网站中，竟有数十个是成人网站！...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="因特网面面观" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="hulu" label="Hulu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="youtube" label="Youtube" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p><img alt="the-planet-data-center-messy-348x196.jpg" src="http://www.45eggs.com/upload/2012/04/the-planet-data-center-messy-348x196.jpg" width="300" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" />色情网站有多大？根据谷歌旗下广告服务商Doubleclick的数据显示，独立访问量前500名的网站中，竟有数十个是成人网站。而色情网站的数据流量又极大，有人估计，色情网站的数据传送量可能占整个互联网的30%。 </p><p>生活在互联网世界的人，都曾或多或少地浏览过在许多国家仍受管制的色情网站。我们很难洞察这类网站的发展状况，因为相关的确切数据实在是少之又少。可以肯定的是，色情网站的访问量肯定少不了。事实证明上述猜测是正确的，因为根据谷歌旗下广告服务商Doubleclick的数据显示，独立访问量前500名的网站中，竟有数十个是成人网站！</p>]]>
        <![CDATA[<p>世界上最大的色情网站Xvideos每月有44亿的访问量，这个数字是CNN官网或24小时专门播放体育节目ESPN电视网的访问量的3倍，是社交新闻站点Reddit的2倍。YouPorn、Tube8和Pornhub这些大型的色情网站，其访问量也可以让除了Google和Facebook等超大型网站之外的小网站们相形见绌。</p><p>从访问量中，我们只能得出色情网站要比非色情网站更受欢迎这个结论。40亿访问量听起来确实是个天文数字，但是当你将用户在色情网站上做的事考虑在内，你就会发现，色情网站的大小和规模也不可小觑。</p>
<h3 style="color:#393;border-bottom:1px #CCC solid;">网站规模</h3>
<a href="http://www.45eggs.com/upload/2012/04/xvideos-ad-planner.jpg"><img alt="xvideos-ad-planner.jpg" src="http://www.45eggs.com/assets_c/2012/04/xvideos-ad-planner-thumb-300x291-428.jpg" width="300" height="291" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a><p>色情网站和非色情网站的主要区别就是访问者的停留时间。Engadget和ExtremeTech这类科技网站的用户平均停留时间在3到6分钟之间，这足以让用户阅读完几篇文章了；而色情网站的用户停留时间则在15到20分钟之间。</p><p>两者之间的差异也情有可原，因为大多数网站的内容主要是文字和图片，大型色情网站则力推视频内容，众所周知，看完一段视频所花的时间可比阅读完一篇文章花的多。ExtremeTech主页的数据大小约为数百万字节，但一段只有480×200低分辨率的色情视频，每秒的数据量就在10万字节左右，15分钟的视频就可以耗掉约9千万字节的流量。将9千万字节乘以Xvideos网站每月约3.5亿的访问人数，就可以得出Xvideos每月需要处理29PB的字节（1PB=1024TB，1TB=1024GB），即每秒50GB字节的的数据传送。</p><p>简而言之，色情网站每天需要处理海量的数据。在纯带宽（单位时间内可传输的数据量）上，美国本土能够与之匹敌的也仅有视频网站YouTube或Hulu了。色情网站的规模大到难以想象，排名第二的YouPorn的纯带宽都要比Hulu大出6倍。</p>
<h3 style="color:#393;border-bottom:1px #CCC solid;">网站的基础设施</h3>
<p>与仅仅提供文字和图片相比，视频服务所需要的资源可要多得多了，它需要大量的数据储存、较短的CPU周期、内部I/O和高带宽等。</p>
<a href="http://www.45eggs.com/upload/2012/04/backblaze-storage-pod-case.jpg"><img alt="backblaze-storage-pod-case.jpg" src="http://www.45eggs.com/assets_c/2012/04/backblaze-storage-pod-case-thumb-300x200-430.jpg" width="300" height="200" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a><p>虽然说色情网站各不相同，但是大多数色情网站都会储存大约50到200TB的色情资料，对一个网站来说，这可不是一个小数目。不过幸好现在2TB的硬盘驱动器价格低廉且种类繁多，因此这对色情网站来说应该不算是太大的问题。</p>
<p>色情网站需要提供数千个动态的、可搜索的视频数据库，当有人点击一个视频时，文件会经过硬盘读取继而上传到网络上，这是一个繁杂的过程，而CPU周期和I/O能够影响数据的读取和上传的快慢。除此之外，在硬件方面，色情网站还需要四核机架服务器、千兆交换机和负载均衡等。在软件方面，大多数色情网站会使用快速、灵敏的数据库，如Redis来储存和提取视频，还有轻量级、高性能的Nginx等来作为网页的HTTP服务器。</p>
<p>在带宽上，拿上面的Xvideos为例，大型的色情网站需要有足够的网络连通性来完成每秒400Gb的数据传送。而且这还只是平均的数据传输速率，在高峰时段，Xvideos的背板带宽可以飙升至每秒1000Gb甚至更多。当然了，有许多方法可以解决流量过多产生的问题，如网站可以成立自己的数据中心，或租用大型数据中心的一些机架服务器，或使用如亚马逊或微软提供的云储存等。</p>
<h3 style="color:#393;border-bottom:1px #CCC solid;">真实的范例</h3>
<p>世界第二大色情网站YouPorn给我们提供了一些一手的数据，看完你就会发现，事实上，谷歌的Doubleclick广告服务商低估了色情网站的吸引力。</p>
<p>YouPorn有超过100TB的色情资料，每天的页面访问量超过1亿，这就意味着它每天的数据传输量有950TB之多，大多数的数据传送用在了加载视频上。按照上面的数据计算，YouPorn每月的数据处理量有28PB，因此，排名第一的Xvideos的数据传送肯定不止29PB，它每月的数据传送量估计在35到40PB之间。在高峰时间段，YouPorn每秒需要处理100GB（每秒800Gb）的数据量，这个数据量等于YouPorn每秒传送了10多张双层的DVD。</p>
<p><a href="http://www.45eggs.com/upload/2012/04/youporn-blurred-out.jpg"><img alt="youporn-blurred-out.jpg" src="http://www.45eggs.com/assets_c/2012/04/youporn-blurred-out-thumb-600x392-432.jpg" width="600" height="392" class="mt-image-none" style="" /></a></p><p>在软件方面，YouPorn完全使用Redis进行数据存储，并使用MySQL小型数据库管理系统对Redis进行添加或管理。网页的HTTP服务器是Nginx，负载均衡则使用的是HAProxy和Varnish。Redis服务器每秒需要处理30万个页面请求，每小时会记录下8到15GB的数据（包括用户登录、观看记录等），YouPorn认为Redis处理每天2亿的访问量不成问题。</p>
<p>互联网只能处理50Tb每秒的数据，换而言之，单单一个YouPorn的流量就占了整个互联网的2%。类似YouPorn这样的色情网站有数十个之多，因此，认为色情网站的数据传送量占据整个互联网的30%就不算夸张了。</p>
<p>&nbsp;</p>
<p>图片和信息来源： <a href="http://www.extremetech.com/computing/123929-just-how-big-are-porn-sites" target="_blank">extreme tech</a></p>
<p>中文转载：<a href="http://www.guokr.com/article/140384/" target="_blank">果壳网</a></p>]]>
    </content>
</entry>

<entry>
    <title>PhoneGap 1.5 (Cordova)在Xcode 4.3.2中的配置 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/program/2012/phonegap-15-cordova-xcode-432.html" />
    <id>tag:www.45eggs.com,2012://3.624</id>

    <published>2012-03-26T14:14:08Z</published>
    <updated>2012-04-11T02:37:25Z</updated>

    <summary>这一段时间来，我一直有使用PhoneGap来做一些iOS和Android平台的Web APP，每次PhoneGap更新我就会下载过来试一试。有一天，它更新到了1.5版本，居然改了名叫Cordova......</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="程序相关" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="android" label="Android" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cordova" label="Cordova" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ios" label="iOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="phonegap" label="PhoneGap" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webapp" label="Web APP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xcode" label="Xcode" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p><a href="http://www.45eggs.com/upload/2012/03/10.13.49.png"><img alt="10.13.49.png" src="http://www.45eggs.com/assets_c/2012/03/10.13.49-thumb-600x314-425.png" width="600" height="314" class="mt-image-none" style="" /></a></p><p>这一段时间来，我一直有使用PhoneGap来做一些iOS和Android平台的Web APP，每次PhoneGap更新我就会下载过来试一试。有一天，它更新到了1.5版本，居然改了名叫Cordova...</p>]]>
        <![CDATA[<p>如果按照默认的工程建立，Xcode会告诉你出错了，类似：</p>
<pre class="prettyprint"><code>'NSAutoreleasePool' is unavailable: not available in automatic reference counting 

ARC forbids explicit message send of 'release'</code></pre>

<p>上网搜了一下，发现是因为新版Xcode默认设置了automatic reference counting，而Cordova在生成代码的时候并没有用到这玩意儿，解决方案就是禁用之。</p><p><b>如上方的图片所示</b>，打开工程后选择工程，主容器会显示出工程的配置，选择<b>Build Settings</b>，下方的页签中选择<b><u>All</u></b>以及<b><u>Combined</u></b>，搜出"Apple LLVM Compiler 3.1 - Language"，在这一组的设置中，有一个叫"Objective-C Automatic Reference Counting"的家伙，把它的值改为"No"。</p><p>保存一下，大功告成！</p><p>参考网址：<a href="http://www.hoitikwong.com/2012/03/phonegap-15-cordova-setup-on-xcode-431.html">http://www.hoitikwong.com/</a></p>]]>
    </content>
</entry>

<entry>
    <title>解读娃娃和她的《飘洋过海来看你》（转） - 听说读写看</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/music/2012/wawa-piaoyangguohai.html" />
    <id>tag:www.45eggs.com,2012://4.623</id>

    <published>2012-03-01T04:55:59Z</published>
    <updated>2012-03-01T08:28:18Z</updated>

    <summary>用了半年的积蓄去看一个人，连见面时的呼吸都曾反复练习，可是最后的最后，却不得不在漫天风沙里望着他远去，悲伤得不能自己。这样的经历，不知你否也曾有过？人世间有为了爱而拿出勇气背井离乡的人，也就有了在陌生的城市熟悉的角落里默默等待和叹息的人。世间那种种的不能爱和爱而不得，总是让人唏嘘，也成了写歌人最好的素材。这首歌其实讲的是原唱者娃娃和一个舞蹈老师之间发生过的真实的故事。1990年，来自台湾的娃娃与一个来自北京的舞蹈教师一见钟情。在她的眼中，那个男人很优秀。那是个台胞可以初访大陆的年代，但台湾到北京还没有直航。于是为了看到他，每次都是娃娃辗转从台湾飞到香港，然后再从香港到北京去看他。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="东二听音乐" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://www.45eggs.com/">
        <![CDATA[<p><img alt="1682896135-1127956.jpg" src="http://www.45eggs.com/upload/2012/03/1682896135-1127956.jpg" width="150" height="149" class="mt-image-none" style="float:left;margin:0 5px 5px 0;" />用了半年的积蓄去看一个人，连见面时的呼吸都曾反复练习，可是最后的最后，却不得不在漫天风沙里望着他远去，悲伤得不能自己。这样的经历，不知你否也曾有过？</p><p>人世间有为了爱而拿出勇气背井离乡的人，也就有了在陌生的城市熟悉的角落里默默等待和叹息的人。世间那种种的不能爱和爱而不得，总是让人唏嘘，也成了写歌人最好的素材。</p><p>这首歌其实讲的是原唱者娃娃和一个舞蹈老师之间发生过的真实的故事。</p><p>1990年，来自台湾的娃娃与一个来自北京的舞蹈教师一见钟情。在她的眼中，那个男人很优秀。那是个台胞可以初访大陆的年代，但台湾到北京还没有直航。于是为了看到他，每次都是娃娃辗转从台湾飞到香港，然后再从香港到北京去看他。</p>]]>
        <![CDATA[<p>这段远距离恋爱一开始就注定了是一场苦恋，不是因为海峡的阻隔，而是因为，那个舞蹈教师，已经有了妻子和孩子。于是娃娃最后万念俱灰地回了台湾，从此和她的这段感情隔海相望。在她身边，唯一可作留念的，是一张从节目单上剪下的那个舞蹈教师的不甚清晰的黑白剧照。</p><p>1991年，她唱了《飘洋过海来看你》。被收录在专辑《大雨》里，是A面的第一首歌。</p><p>1995年，娃娃宣布退出歌坛。</p><p>1996年，艺名娃娃的金智娟在台北结婚。</p><p>"刚开始的时候，当然自己都觉得说：我不在意啊，我没有关系啊，我们只要彼此相爱就好"，"可是浪漫结束，你真的开始去面对生活，去看生活的时候，你就发现说有很多的客观条件，其实是不能够成立的"。二十年后，再提起这段感情时，那个女子释然地自嘲说："我在那段期间，大概作了两年的八点档女主角 。"</p><p>在娃娃开始谈这段漂洋过海的恋爱时，滚石唱片的同事们都默默关心着，也让李宗盛有了想帮娃娃创作歌曲的念头，于是四处旁敲侧击收集情报。</p><p>当年，她只不过和李宗盛随口聊了5分钟自己的恋爱状况，没想到，隔两天再遇到李宗盛时，经典的词曲已经诞生，娃娃说，"他就很兴奋的拿出一张沾满了油渍的，那种连锁牛肉面店的餐垫纸，那肯定是他在吃牛肉面的时候，想起来了这件事情，他就把它记在纸上面，就是《飘洋过海来看你》的歌词。"</p><p>精彩的文字完整地描摹出了娃娃的心情，在录音室里几度泣不成声，哭掉了两大盒面巾纸，几乎哭到录不下去。</p><p>同为艺人的娃娃好友李明依对于歌词「陌生的城市啊，熟悉的角落里」特别有感觉，因为当时她曾受娃娃之托，从台北飞往内地与娃娃的恋人碰面。她不认识他，只是想着和好姊妹的情人去到处晃晃，却始终觉得这是个陌生的城市，但因为面前的人，却变成了熟悉的角落。</p><p>无论在哪里，也许情人身边总是最熟悉的角落。</p><p>在《漂洋过海来看你》问世半年后，娃娃终于还是结束了那段恋情，如今，她早已结婚生子，有了美满的家庭，只留下这首歌，纪念那段必须飘洋过海去探望恋人的苦恋。</p><p>回忆当时录歌时的情景，她说，当看到「言语从来没能将我的情意，表达千万分之一，为了这个遗憾，我在夜里想了又想，不肯睡去......」的歌词，第一个反应就是真的是写进她心里面了。她感叹说，「天啊！李宗盛是不是有装监视器在我旁边，因为写得非常细微 ，什么呼吸啊，什么那种黄沙，北京的那种黄沙的情景啊，还有那种城市的感觉啊！那种两个人都很孤独，可是又不想放弃希望，我就觉得说，太可怕的丝丝入扣。」</p><p>娃娃和教父罗大佑的歌，如今才是唯一。这也是我个人除却"漂洋过海"之外，最喜欢地娃娃的歌。被收录在娃娃的个人第十张专辑《四季》里。这是她与罗大佑的首度合唱，这首歌，也是当年由张艾嘉执导的电影[梦醒时分]的主题曲。</p><p>1981年的时候，你出生了吗？</p><p>1981年的时候，她和朋友组成丘丘合唱团，担任主唱。1982出了首张专辑[就在今夜]，同名歌曲及《为何梦见他》红遍大街小巷。娃娃从此被列为台湾摇滚女歌手第一人。参加台视单元剧[十一个女人]第一集[表妹]演出，由张艾嘉工作室制作。</p><p>在丘丘乐团时期，她的《就在今夜》、《大公鸡》、《旋转木马》等歌，都俏皮可爱地表达出了一个纯真少女的幻想。可是，她本人的形象，就是一个很知性的乖乖女，和年少时的张艾嘉有点像，大大的眼睛，小圆脸，完全难以和摇滚女孩的形象挂上钩。</p><p>1991年，她加盟罗大佑[音乐工厂]。在滚石唱片合辑[大风吹]专辑中演唱[看着我]。这一年，是她的转型翻身之年。第六张个人专辑[大雨]的出版，使她摆脱了以往叛逆的摇滚形象，转型为成熟深情的都会女子，让人们在流行歌坛重新认识了这位曾经叱咤风云的丘丘合唱团的主唱。值得一提的是，这一年她主唱了由赖声川导演的电影[暗恋桃花源]同名主题曲。</p><p>很多人初听娃娃，都不是非常喜欢她的声音，觉得有点浑浊，不够清亮，而且这个女孩子未免也太低调了，太不显眼了。还有人把她的嗓音戏称为"豆沙嗓"。但是《大雨》这张专辑帮助她在沉寂多年后再度创下佳绩，也让很多人开始真心喜欢上她娓娓道来的柔情。我们今天讲了两个小时的主题《漂洋过海来看你》是整张专辑的第一首歌。可惜，《大雨》没入围台湾百佳唱片榜，反而是后来反应平平的[四季]获得了评审会青睐。</p><p>《四季》专辑对于娃娃来说是对过去的回顾，也是对未来的期盼。整张专辑按季节变换分为四部分，由罗大佑、花比傲、林夕、朱纬文分别担纲制作。在完整统一的概念之下，以爵士、华尔兹、轻摇滚、抒情等多元的曲风、优美的词意，精确表达了一个敏感女子的内心世界。整张专辑从作词到文案再到关锦鹏执导的MTV，处处荡漾着季节流转的百感交集，是当时的上乘之作。</p><p>专辑里有那年娃娃为香港电影《东方三侠》演绎的主题曲春之祭，如今听来别有一番韵味。</p><p>还有一首歌，叫《曾经沧海》，罗大佑的词。</p><p>"曾经沧海难为水 除却巫山不是云"这两句歌词取自唐代诗人元稹为亡妻韦丛写的《离思》中的一首，也成了"曾经沧海"的主题。罗大佑和葛大卫联手为这首歌写下了经典的词句，把渐渐入冬的冰冷心情描写得淋漓尽致。"记忆中难以抹去的人 总会有难解的疑问"，娃娃充满知性的歌声里透着 "分分钟的暖意"。</p><p>她的音乐道路很短暂，当很多人开始关注她声音的时候，她已经决然引退了。1997年的双ＣＤ《娃娃精选》和《娃娃成名经典》告诉世人，这样的声音是经得起时间历练的。</p><p>在《四季》专辑里，有林夕作词的一首歌《没有季节的爱情》，林夕歌词少有的温馨和罗大佑清清浅浅地不经意地推向高潮的旋律，是珠联璧合的妥帖。不是很红的歌曲，却能在时光的洗刷里自成一种传说。</p>]]>
    </content>
</entry>

<entry>
    <title>《画壁》剧透：三傻大闹天上人间夜总会（转） - 听说读写看</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/movie/2011/mural-comment-001.html" />
    <id>tag:www.45eggs.com,2011://4.622</id>

    <published>2011-10-07T04:52:10Z</published>
    <updated>2011-12-30T01:31:41Z</updated>

    <summary>富二代朱孝廉伙同跟班后夏进京考取公务员，路遇形象鬼祟的小地痞孟龙潭，想将其抓之送官邀功请赏。三人一行追赶至高僧处，经高僧点播方知神马功名利禄都是浮云，并指引三人来到佟湘玉经营的&quot;天上人间&quot;夜总会。老鸨由佟掌柜亲自担任，大茶壶由猫头鹰武士担任，坐台小姐皆以花命名，头牌便是芍药姐。天上人间夜总会采用希腊哥特式建筑结构和敦煌壁画风的内部装修，店内服务员皆是高开叉超短裙结合猫步动作整齐划一。坐台小姐个个身穿单色系低胸露背晚礼服搭配轻纱流苏，尽显素质涵养。天上人间贵为业内翘楚，自然是严守行业规则的表率，佟掌柜因此规定：鼓励搞上床，禁止搞对象。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="影视欣赏" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="壁画" label="壁画" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="画壁" label="画壁" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.45eggs.com/">
        <![CDATA[<div><img alt="120114.80936248.jpg" src="http://www.45eggs.com/upload/2011/10/120114.80936248.jpg" width="500" height="250" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></div>富二代朱孝廉伙同跟班后夏进京考取公务员，路遇形象鬼祟的小地痞孟龙潭，想将其抓之送官邀功请赏。三人一行追赶至高僧处，经高僧点播方知神马功名利禄都是浮云，并指引三人来到佟湘玉经营的"天上人间"夜总会。老鸨由佟掌柜亲自担任，大茶壶由猫头鹰武士担任，坐台小姐皆以花命名，头牌便是芍药姐。天上人间夜总会采用希腊哥特式建筑结构和敦煌壁画风的内部装修，店内服务员皆是高开叉超短裙结合猫步动作整齐划一。坐台小姐个个身穿单色系低胸露背晚礼服搭配轻纱流苏，尽显素质涵养。天上人间贵为业内翘楚，自然是严守行业规则的表率，佟掌柜因此规定：鼓励搞上床，禁止搞对象。 ]]>
        <![CDATA[<p><img alt="162645.61489742.jpg" src="http://www.45eggs.com/upload/2011/10/162645.61489742.jpg" width="500" height="700" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p><p>三嫖客对这个美女如云的极乐仙境流连往返。佟掌柜也大方陪酒，让三人随便点小姐。孟龙潭血气方刚先选了情绪抑郁的云梅，次日便因其总是哭丧脸改选会来事的丁香，还是求欲不足干脆一口气再点了海棠雪莲百合等3女一起大玩5p。小跟班后夏则点了被孟龙潭弃选得云梅。朱孝廉此行另有目的，原来已签约天上人间的坐台小姐牡丹接私活儿，与朱孝廉相互勾搭被大茶壶武士抓了个现形。佟掌柜以不走公司账面偷税漏税之名将牡丹刑拘。朱孝廉闻听心如刀割便伪装成嫖客前来营救，他点了牡丹的好姐妹翠竹来了解案情。当夜，天上人间为保证服务质量，特派芍药和大茶壶一起巡查监督客服质量。朱孝廉只好与翠竹假戏糊弄过去。而芍药看上朱孝廉年轻英俊痴情一片，告知牡丹被拘押的地点。</p><p><img alt="173833.57189191.jpg" src="http://www.45eggs.com/upload/2011/10/173833.57189191.jpg" width="500" height="714" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p><p>三嫖客带领众女前去营救牡丹，途中遇到路面积水，众人解救了被强制限行的smart，smart灰常感激就叫来了加长版奔驰SUV载上众人拔山涉水来到看守所。看守所警卫超级强悍，刀枪不入百毒不侵。还是芍药姐聪明看出该警卫属于过敏体质，遂鼓动大家一起撒花导致警卫花粉过敏而昏迷。众人救出牡丹，但芍药甘愿留下来继续服刑。</p><p><img alt="173835.29771705.jpg" src="http://www.45eggs.com/upload/2011/10/173835.29771705.jpg" width="500" height="700" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p><p>此时，大家才搞明白，翠竹牡丹芍药三个风尘女子都爱上了朱孝廉。牡丹不想和芍药抢活儿，所以找老鸨佟掌柜求情。结果与芍药双双受罚，此时三嫖客拍案而起指责天上人间管理有问题，对待员工制度不够人性化。一直暗恋芍药的大茶壶武士按耐不住开始带头造反，将芍药牡丹救出。全体员工推举芍药做代表与佟掌柜谈判，话不投机谈判破裂开始群殴，佟掌柜乃是手眼通天的老江湖，三两下就将反抗势力全部镇压。</p><p><img alt="173838.29462976.jpg" src="http://www.45eggs.com/upload/2011/10/173838.29462976.jpg" width="500" height="714" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p><p>这时高僧适时出现，原来高僧与佟掌柜是老相好，高僧情缘难了一直默默的为天上人间招揽生意。此刻终于向佟掌柜表白。佟掌柜心花怒放对所有人一概不追究。并决定退去CEO职位，转做股东，与高僧享受退休生活。天上人间交由芍药全权打理，芍药一上岗就先做表率，将骗吃骗喝多日、同时勾引翠竹牡丹芍药自己等多名小姐起内讧的朱孝廉赶出天上人间。而后夏做了云梅的小狼狗，孟龙潭甘愿吃起4个老婆的软饭。朱孝廉无奈只好继续去考公务员。</p><p>本评论转自<a href="http://i.mtime.com/863223/blog/6640220/">谋杀绿脚趾的博客</a></p>]]>
    </content>
</entry>

<entry>
    <title>一篇气死了九十九名老师的中学生作文（转） - 听说读写看</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/fun/2011/a-high-school-students-writing.html" />
    <id>tag:www.45eggs.com,2011://4.621</id>

    <published>2011-10-03T08:08:38Z</published>
    <updated>2011-12-30T00:44:24Z</updated>

    <summary>今天是国庆日，因为英明伟大的政府建设国家、爱护百姓的功绩罄竹难书，所以放假一天，爸爸妈妈特地带我们到动物园玩。按照惯例，我们早餐喜欢吃地瓜粥。今天因为地瓜卖完了，妈妈只好黔驴技穷地削些芋头来滥竽充数。没想到那些种在阳台的芋头很好吃，全家都贪得无厌地自食其果。出门前，我那徐娘半老的妈妈打扮的花枝招展，鬼斧神工到一点也看不出是个糟糠之妻。头顶羽毛未丰的爸爸也赶紧洗心革面沐猴而冠，换上双管齐下的西装后英俊得惨绝人寰，鸡飞狗跳到让人退避三舍。东施效颦爱漂亮的妹妹更是穿上调整型内衣愚公移山，画虎类犬地打扮的艳光四射，趾高气昂地穿上新买的高跟鞋。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="妙趣横生" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="国庆" label="国庆" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="节日" label="节日" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>今天是国庆日，因为英明伟大的政府建设国家、爱护百姓的功绩罄竹难书，所以放假一天，爸爸妈妈特地带我们到动物园玩。</p><p>按照惯例，我们早餐喜欢吃地瓜粥。今天因为地瓜卖完了，妈妈只好黔驴技穷地削些芋头来滥竽充数。没想到那些种在阳台的芋头很好吃，全家都贪得无厌地自食其果。</p><p>出门前，我那徐娘半老的妈妈打扮的花枝招展，鬼斧神工到一点也看不出是个糟糠之妻。头顶羽毛未丰的爸爸也赶紧洗心革面沐猴而冠，换上双管齐下的西装后英俊得惨绝人寰，鸡飞狗跳到让人退避三舍。东施效颦爱漂亮的妹妹更是穿上调整型内衣愚公移山，画虎类犬地打扮的艳光四射，趾高气昂地穿上新买的高跟鞋。</p>]]>
        <![CDATA[<p>我们一丘之貉坐着素车白马，很快地到了动物园，不料参观的人多到豺狼当道草木皆兵，害我们一家骨肉分离。妻离子散的爸爸鞠躬尽瘁地到处广播，终于找到到差点认贼作父的我和遇人不淑的妹妹，困兽之斗中，我们螳臂当车力排众议推己及人地挤到猴子栅栏前，鱼目混珠拍了张强颜欢笑的全家福。</p><p>接着到鸡鸣狗盗的鸟园欣赏风声鹤唳哀鸿遍野的大自然美妙音乐。后来爸爸口沫横飞地为我们指鹿为马时，吹来一阵凉风，唾面自干的滋味，让人毛骨悚然不寒而栗，妈妈连忙为爸爸黄袍加身，也叮嘱我们要克绍其裘。</p><p>到了傍晚，因为假日的关系，餐厅家家鹊占鸠巢六畜兴旺，所以妈妈带著我们孟母三迁，最后终于决定吃火锅。有家餐厅刚换壁纸，家徒四壁很是美丽，灯火阑珊配上四面楚歌，非常有气氛。十面埋伏的女服务生们四处招蜂引蝶，忙着为客人围魏救赵，口蜜腹剑到让人误认到了西方极乐世界。</p><p>饥不择食的我们点了综合火锅，坐怀不乱的爸爸当头棒喝先发制人，要求为虎作伥拿着刀子班门弄斧的女服务生，快点将狡兔死走狗烹，因为尸位素餐的我们一家子早就添油加醋完毕，就等着火锅赶快沉鱼落雁好问鼎中原，可惜锅盖太小，有点欲盖弥彰。</p><p>汤料沸腾后，热得乐不思蜀的我们赶紧解衣推食好大义灭亲上下其手，一网打尽捞个水落石出。</p><p>火锅在我们呼天呛地面红耳赤地蚕食鲸吞后，很快就只剩沧海一粟，和少数的漏网之鱼。母范犹存的妈妈想要丢三落四放冬粉时，发现火苗已经危在旦夕，只好投鼠忌器。幸好狐假虎威的爸爸呼卢喝雉叫来店员抱薪救火，终于死灰复燃，也让如坐针毯的我们中饱私囊。鸟尽弓藏後，我们一家子酒囊饭袋，沆瀣一气，我和妹妹更是小人得志，沾沾自喜。</p><p>不料结帐的时候，老板露出庐山真面目，居然要一饭千金，爸爸气得吴牛喘月，妈妈也委屈地牛衣对泣。</p><p>啊！这三生有幸的国庆日，就在爸爸对着钱包自惭形秽大义灭亲后，我们全家江郎才尽，一败涂地。</p>]]>
    </content>
</entry>

<entry>
    <title>400块钱93号汽油还能跑多远？(01-11年走势图)  - 东二的博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/2011/07/400yuan-93-gas-2001-to-2011.html" />
    <id>tag:www.45eggs.com,2011://2.620</id>

    <published>2011-07-18T04:13:18Z</published>
    <updated>2011-12-30T01:32:41Z</updated>

    <summary></summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="网络摘抄" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="油价" label="油价" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<img alt="2000.jpg" src="http://www.45eggs.com/upload/2011/07/2000.jpg" width="440" height="493" class="mt-image-none" style="" /> <div><br /></div>]]>
        <![CDATA[<img alt="500_6e4a5045-fe7f-4776-8484-ab866e7bd777.jpg" src="http://www.45eggs.com/upload/2011/07/500_6e4a5045-fe7f-4776-8484-ab866e7bd777.jpg" width="500" height="535" class="mt-image-none" style="" /><div><br /></div>]]>
    </content>
</entry>

<entry>
    <title>一年前的100元一年后少多少? - 东二的博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/2011/07/100yuan-one-year.html" />
    <id>tag:www.45eggs.com,2011://2.619</id>

    <published>2011-07-18T03:56:22Z</published>
    <updated>2011-07-18T05:03:11Z</updated>

    <summary>随着中国经济的发展和人们生活水平的提高，人们发现，一百元越来越不值钱了。以前，一百元可以买很多东西，现在，一百元也买不下什么贵重的物品了。 有专家预测，1990年1月至2009年12月间，中国居民消费价格指数(CPI)的月平均值为4.81%。如果在1978年改革开放之初时拥有100万元，到现在只值当年的15万元。日前，钱江晚报发表文章，对比一百元在一年间缩水了多少。一年间，100元少买了9斤花生米。2010年7月27日，杭州市粮油批发交易市场小杂粮行情显示，花生仁价格5元/斤，2011年7月12日，在农贸市场花生仁零售价格要9元/斤，五谷杂粮中属涨幅最大。荞麦相比去年每斤涨了2块6，其他涨幅不大。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="网络摘抄" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="汽油" label="汽油" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="涨价" label="涨价" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="猪肉" label="猪肉" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="绿豆" label="绿豆" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="通货膨胀" label="通货膨胀" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>随着中国经济的发展和人们生活水平的提高，人们发现，一百元越来越不值钱了。以前，一百元可以买很多东西，现在，一百元也买不下什么贵重的物品了。 </p><p>有专家预测，1990年1月至2009年12月间，中国居民消费价格指数(CPI)的月平均值为4.81%。如果在1978年改革开放之初时拥有100万元，到现在只值当年的15万元。</p><p>日前，钱江晚报发表文章，对比一百元在一年间缩水了多少。</p><p>一年间，100元少买了9斤花生米。2010年7月27日，杭州市粮油批发交易市场小杂粮行情显示，花生仁价格5元/斤，2011年7月12日，在农贸市场花生仁零售价格要9元/斤，五谷杂粮中属涨幅最大。荞麦相比去年每斤涨了2块6，其他涨幅不大。</p>]]>
        <![CDATA[<p>一年间，100元少买了75枚鸡蛋。据相关数据信息显示，2010年7月7日杭州普通鸡蛋价格为3.4元/斤。2011年7月12日，农贸市场普通鸡蛋价格为5元/斤，而土鸡蛋价格达到17元/斤。鸡蛋价格依旧呈上涨态势。</p><p>一年间，100元少买了8.5斤玉米。受年初南方干旱北方寒冷影响，国内玉米减产，加上少数游资囤货炒作，玉米价格持续攀升，现在零售市场的甜玉米价格达10元/公斤，而去年这个时候只要7元/公斤。</p><p>一年间，100元少买了13.5斤黄豆。今年"豆你玩"还没歇着，从绿豆换到了黄豆，去年这个时候散装黄豆只要3.8元/斤，现在要8元左右。</p><p>一年间，100元少买了一只西瓜。在杭州市区水果超市，2010年冰糖红玉西瓜2.68元/斤，2011年为2.98元/公斤。其他品种的西瓜价格略有上涨基本没变。</p><p>一年间，100元少买了33盒豆腐。"豆你玩"带出"腐不起"，豆制品今年起全线涨价。百姓家常菜的原料之一白玉豆腐每盒从1块涨到了1.5元，最常吃的卤水豆腐都从1.5元/块涨到1.8元/块，豆腐干从5元/斤涨到6元/斤。</p><p>一年间，100元少买了3条鲈鱼。2010年7月鲈鱼每斤12~13元左右，2011年7月12日当天卖到20元/斤。其他鱼类价格均有上涨，如包头鱼2010年7月售价5-6元/斤，2011年7月12日售价9元~10/斤，如鲫鱼从去年的7月9元/斤涨到今年7月12元/斤。</p><p>一年间，100元少买了2斤8两五花肉。2011年猪肉价格飙升，逼近牛肉。2010年五花肉价格11元/斤左右，2011年7月涨到16元/斤。普通家庭一盘红烧肉成本提高至少5元。</p><p>一年间，100元少买了2升汽油。去年来，国际油价一直高位盘整，国内车主也跟着受累。去年7月93号汽油为6.53元/升，历经几轮调价后现在涨到了7.46 元/升。</p><p>一年间， 100元少洗5次车。 去年这个时候15元一次，办卡一次才10元，现在起步价就是20元，个别贵的已经到了25元，原本100元能洗10次车，现在只能洗5次。</p><p>转自：<a href="http://www.bwchinese.com/article/1019134.html">BWCHINESE中文网</a></p>]]>
    </content>
</entry>

<entry>
    <title>iOS 5 的魔术视频 - 东二的博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/2011/06/ios-5-magic.html" />
    <id>tag:www.45eggs.com,2011://2.618</id>

    <published>2011-06-07T13:45:26Z</published>
    <updated>2011-06-07T13:58:04Z</updated>

    <summary>这是很有创意的一个表演，人因梦想而伟大来着，此文乃转帖...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="网络摘抄" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apple" label="Apple" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ios" label="iOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ipad" label="iPad" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>这是很有创意的一个表演，人因梦想而伟大来着，此文乃转帖</p>
<object id="sinaplayer" width="600" height="460"><param name="allowScriptAccess" value="always" /><embed height="460" name="sinaplayer" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="600" src="http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=53985642_1642720480_PEiwTiI8DTHK+l1lHz2stqkP7KQNt6nkj262vFCkIQZZQ0/XM5GcYdQP5S/SAtkEqDhAQZs2ffsg0x8/s.swf" allowscriptaccess="always" allowfullscreen="true"></object>]]>
        <![CDATA[<blockquote>
<p>把桌面图标直接拉出屏幕？把手伸进屏幕玩下拉式窗帘？把照片变成卡片？用 Facetime 玩瞬间转移？</p>
<p>听上去真是科幻，实际上是一位魔术玩家利用 iPad 做的 iOS 5"畅想视频"，昨天我们在新浪微博上发出这段视频后，得到了广泛好评。如果乔布斯也看到了这位帅哥的表演，会不会激发更多灵感呢？</p>
</blockquote>
本文转自：<a href="http://www.ifanr.com/42364" target="_blank">爱范儿</a>]]>
    </content>
</entry>

<entry>
    <title>若干图片空隙问题的解决方案 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/xhtml-css/2011/image-space-solution.html" />
    <id>tag:www.45eggs.com,2011://3.616</id>

    <published>2011-05-31T04:27:54Z</published>
    <updated>2012-04-11T03:52:41Z</updated>

    <summary><![CDATA[做网页的人，有时候会碰到这样的问题，图片与容器之间有个空白死活无法去掉，而且明明没有任何的字符，也没有设置margin/padding等等，这是为神马呢？迄今为止我碰到过两种情况会导致这种问题：DOCTYPE为在HTML4或者XHTML1.0（过渡）在IE浏览器中会发生，原因是图片后面有"空格"，这里的空格并非指&amp;nbsp，而是就是普通的空格，也就是说图片标签的结束没有紧紧地贴住容器的结束标签。DOCTYPE为HTML5在所有浏览器都一样，图片与容器间有几个像素的空白。...]]></summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="XHTML-CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html5" label="HTML5" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>做网页的人，有时候会碰到这样的问题，图片与容器之间有个空白死活无法去掉，而且明明没有任何的字符，也没有设置margin/padding等等，这是为神马呢？</p><p>迄今为止我碰到过两种情况会导致这种问题：</p><ol><li><b>DOCTYPE为在HTML4或者XHTML1.0（过渡）</b><br />在IE浏览器中会发生，原因是图片后面有"空格"，这里的空格并非指&amp;nbsp，而是就是普通的空格，也就是说图片标签的结束没有紧紧地贴住容器的结束标签。</li><li><b>DOCTYPE为HTML5</b><br />在所有浏览器都一样，图片与容器间有几个像素的空白。</li></ol>]]>
        <![CDATA[<p>通常这种问题有几种解决方法：</p><ol><li>设置容器的font-size:0</li><li>设置容器的高度然后来个overflow:hidden</li><li>设置图片的display:block</li><li>设置图片的float:left</li><li><b>设置图片的vertical-align: middle</b><i>（貌似top/bottom之类的也可）</i></li></ol><p>以上几种方法中，本人最常用的是4、5两种，但是更推荐用"5. 设置图片的vertical-align"，因为目前看来还没有什么后遗症，相对稳定些吧。</p>]]>
    </content>
</entry>

<entry>
    <title>Movable Type 5.1正式版出生了 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/blogtools/2011/movable-type-51.html" />
    <id>tag:www.45eggs.com,2011://3.617</id>

    <published>2011-05-28T04:32:31Z</published>
    <updated>2012-04-11T03:53:08Z</updated>

    <summary>三月份的时候，我将Blog程序升级至5.1beta2，开始体验5.1的MT，前几天发现正式版已经释出，拥有MT情结的我立刻更新。使用Movable Type多年来，从2到3，从3到4，从4到5的版本更新，MT一直保持着一种稳定稳重的形象。在我看来，相比于WP的灵动和便捷，MT更注重的是发布和组织，加上他优秀的模板系统和静态化，仍然是很多人的第一选择。您可以透过以下的幻灯片来了解更多5.1以及5.05/4.36的安全性更新内容 Introducing Movable Type 5.1 View more presentations from Six Apart KK...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="博客工具" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="MovableType" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wordpress" label="WordPress" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>三月份的时候，我<a href="http://www.45eggs.com/blogtools/2011/movable-type-51-beta-2.html">将Blog程序升级至5.1beta2</a>，开始体验5.1的MT，前几天发现正式版已经释出，拥有MT情结的我立刻更新。</p><p>使用Movable Type多年来，从2到3，从3到4，从4到5的版本更新，MT一直保持着一种稳定稳重的形象。在我看来，相比于WP的灵动和便捷，MT更注重的是发布和组织，加上他优秀的模板系统和静态化，仍然是很多人的第一选择。</p><p>您可以透过以下的幻灯片来了解更多<a href="http://www.movabletype.com/blog/2011/05/movable-type-51-and-505-436-security-update.html">5.1以及5.05/4.36的安全性更新内容</a></p>
<div style="width:595px" id="__ss_6744655"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/sakk/introducing-movable-type-51" title="Introducing Movable Type 5.1">Introducing Movable Type 5.1</a></strong> <object id="__sse6744655" width="595" height="497"> <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mt51-en-110129073854-phpapp01&amp;rel=0&amp;stripped_title=introducing-movable-type-51&amp;userName=sakk" /> <param name="allowFullScreen" value="true" /> <param name="allowScriptAccess" value="always" /> <embed name="__sse6744655" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mt51-en-110129073854-phpapp01&amp;rel=0&amp;stripped_title=introducing-movable-type-51&amp;userName=sakk" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="595" height="497"> </object> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/sakk">Six Apart KK</a> </div> </div><script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>]]>
        
    </content>
</entry>

<entry>
    <title>中国人为税工作161天依然有隐忧 - 东二的博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/2011/04/chinese-people-work-161-days-one-year-for-tax.html" />
    <id>tag:www.45eggs.com,2011://2.614</id>

    <published>2011-04-21T03:57:29Z</published>
    <updated>2011-12-16T17:31:35Z</updated>

    <summary>从中国青年网上面看到这篇文章，才发现自己为税工作的天数原来这么多，不禁感叹一下......以下为转载。核心提示：中国人一年为税收工作161天，为世界国家中中等偏下水平。同期，美国人一年为税工作102天。为谁工作？为税工作。这是一个形象衡量税负的一个指标。之前，我们一直用比率衡量税负，让人不能直观得出税负的轻重。税负工作天数就是税负率乘以一年的天数。用公式表达就是：税负工作天数＝(税收总额÷居民总收入)×365(闰年为366)。税负工作天数与政府的税收总额成正比。如果政府的税收总额大，就意味着纳税人要交更多的税，这就要为税工作很长的时间，税负工作天数就多；反之，则是税负工作天数少。换句说法就是：如果税负工作天数是100天，那么从101天开始，你才为自己工作，之前全部为了交税而工作，也就是为税工作。中国一年为税工作161天。虽然是世界国家中属于中等偏下水平。但是这依然是一个值得思考的数字。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="网络摘抄" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="纳税" label="纳税" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>从中国青年网上面看到这篇文章，才发现自己为税工作的天数原来这么多，不禁感叹一下......以下为转载。</p><p><i><b>核心提示</b>：中国人一年为税收工作161天，为世界国家中中等偏下水平。同期，美国人一年为税工作102天。</i></p><p>为谁工作？为税工作。这是一个形象衡量税负的一个指标。之前，我们一直用比率衡量税负，让人不能直观得出税负的轻重。</p><p>税负工作天数就是税负率乘以一年的天数。用公式表达就是：税负工作天数＝(税收总额÷居民总收入)×365(闰年为366)。税负工作天数与政府的税收总额成正比。如果政府的税收总额大，就意味着纳税人要交更多的税，这就要为税工作很长的时间，税负工作天数就多；反之，则是税负工作天数少。</p><p>换句说法就是：如果税负工作天数是100天，那么从101天开始，你才为自己工作，之前全部为了交税而工作，也就是为税工作。</p><p>中国一年为税工作161天。虽然是世界国家中属于中等偏下水平。但是这依然是一个值得思考的数字。</p>]]>
        <![CDATA[<p>第一，161天从绝对量的天数来说，已经也不少了，因为一年只有365天的时间，161天就占到44%。其实，更为重要的是，<b>其他国家为税工作之后，剩余时间就真正为自己工作，比如为旅游工作，为享受生活工，不会再考虑其他生活负担</b>。比如法国等，虽然一年为税工作207天，但是他们为税工作之后，只是享受生活，不会因为养老、看病、失业等而发愁。但中国就不一定。<b>中国人为税工作161天后，剩下的时间还要为养老、就业、医疗、子女上学而工作，甚至还要为各种意想不到的罚款和收费而工作</b>，比如汽车司机为"天价高速过路费"工作之后，还要为说不定那天交警不高兴"敬礼"（言下之意就是罚款）而工作。如此计算，中国人真正为自己工作的天数可能少的可怜。</p><p>第二，与美国相比，中国一年为税多工作59天，相当于两个月时间。我们不能简单的看这两个月时间，如果这两个月时间乘以中国13。41亿人口的庞大数字，也是一个不小的问题。如果政府通过改革税制，降低为税工作天数，哪怕是一天，也是让13.41亿人口的生活"解放"一天，让他们为自己工作，是美国人口的好几倍。所以，缩小与美国为税工作天数的差距，改革税制的任务还很重，意义也很大。</p><p>第三，中国为税工作161天，究竟为哪些税工作？这也是值得思考的一个问题。</p><p>还是与美国相比。2011年，美国人要为个人收入税工作36天，为工资税(社保税)工作22天，为消费税工作15天，为房地产税工作12天，为公司所得税工作12天，为遗产税工作1天，为其他税种工作4天。由此，我们还可计算出各税种的纳税额占总税收的比重：个人所得税为35.3%，工资税(社保税)为21.6%，消费税为14.7%，房地产税为11.8%，公司所得税为11.7%，遗产税为1%，其他税为3.9%。</p><p>而中国呢？中国人为个人所得税工作10.59天，为国内增值税工作46.2天，为国内消费税工作13.2天，为营业税工作24.44天，为企业所得税工作28.12天，其他税种工作38.14天。通过与美国各税种的比较可以看出，<b>中国人为税工作直接能感受到的个人所得税天数仅占10.59天，不到美国的三分之一。而增值税等三大流转税工作天数达到90天，也就是说中国人为税天天工作，却不知道自己为税工作</b>。这是中美两国最大的差异，也是中国税制最大的短板。另外，间接税为主的税种，除了让人们不知道为税工作之外，还在鼓励政府天天上大项目，高投资，创造更多的间接税增长机会，而忽视对公共服务的投入，使得中国人为税工作，却得不到相应的报酬，造成中国人为税工作之外，还要投入更时间为其他方面工作，而不能将为税工作剩下的天数，为真正的自己工作。</p><p>转载自：<a href="http://pinglun.youth.cn/wztt/201104/t20110419_1554503.htm">中国青年网</a></p>]]>
    </content>
</entry>

<entry>
    <title>CSS3按钮--10几组范例以及相关的教程 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/xhtml-css/2011/css3-buttons-10-awesome-ready-to-use-solutions.html" />
    <id>tag:www.45eggs.com,2011://3.613</id>

    <published>2011-04-20T12:43:14Z</published>
    <updated>2012-04-10T21:41:44Z</updated>

    <summary>多年来，我们通常透过图片或者JavaScript来创建非标准的漂亮的按钮。随着浏览器对CSS3的越来越多的支持，我们已经可以不受阻碍地使用CSS3按钮了。使用CSS3的属性，有着设计按钮的巨大空间，使用border-radius实现圆角，使用linear-gradient以及box-shadow来实现渐变和阴影，以及动画过场效果，以及......这里列出了十几个代码优美又富有创意的CSS3按钮，你可以使用它们或者从中得到启发。此外，你可以在文章的结尾找到所有其他的CSS3按钮相关的资源以帮助你创建更好的按钮。CSS3 Buttons With Simple Markup尽量使用简单的标记来创建的一套按钮，共计18个。其中有三个只适合Webkit内核的浏览器（如Safari、Chrome），其余的可兼容所有主流浏览器。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="XHTML-CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css3" label="CSS3" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="JavaScript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>多年来，我们通常透过图片或者JavaScript来创建非标准的漂亮的按钮。</p><p>随着浏览器对CSS3的越来越多的支持，我们已经可以不受阻碍地使用CSS3按钮了。</p><p>使用CSS3的属性，有着设计按钮的巨大空间，使用border-radius实现圆角，使用linear-gradient以及box-shadow来实现渐变和阴影，以及动画过场效果，以及......</p><p>这里列出了十几个代码优美又富有创意的CSS3按钮，你可以使用它们或者从中得到启发。此外，你可以在文章的结尾找到所有其他的CSS3按钮相关的资源以帮助你创建更好的按钮。</p><p><a href="http://ubuwaits.github.com/css3-buttons/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">CSS3 Buttons With Simple Markup</font></b></a></p><p><a href="http://www.45eggs.com/upload/2011/04/20110420215722032.png"><img alt="20110420215722032.png" src="http://www.45eggs.com/assets_c/2011/04/20110420215722032-thumb-600x283-389.png" width="600" height="283" class="mt-image-none" style="" /></a></p><p>尽量使用简单的标记来创建的一套按钮，共计18个。</p><p>其中有三个只适合Webkit内核的浏览器（如Safari、Chrome），其余的可兼容所有主流浏览器。</p>]]>
        <![CDATA[<p><a href="http://css3buttons.michaelhenriksen.dk/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">GitHub-Style CSS3 Buttons</font></b></a></p><p><img alt="github-style-css3-buttons.gif" src="http://www.45eggs.com/upload/2011/04/github-style-css3-buttons.gif" width="480" height="231" class="mt-image-none" style="" /></p><p>这是一个简单的CSS框架，用以创建GitHub风格的按钮。</p><p>这些按钮可以拥有圆角以及按钮（事先将按钮图标列表使用CSS sprite技术做好）</p><p><a href="http://horaciobella.com/zardi/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">Zardi</font></b></a></p><p><a href="http://www.45eggs.com/upload/2011/04/20110420220814359.png"><img alt="20110420220814359.png" src="http://www.45eggs.com/assets_c/2011/04/20110420220814359-thumb-600x568-392.png" width="600" height="568" class="mt-image-none" style="" /></a></p><p>Zardi是一个已经制作好的CSS文件，可以创建各种颜色和形状的按钮。</p><p>这个文件大小大概为4KB，无论如何，仅使用有需要的样式有助于减小其大小。</p><p><a href="http://www.zurb.com/article/266/super-awesome-buttons-with-css3-and-rgba"><b><font class="Apple-style-span" style="font-size: 1.25em; ">Super Awesome Buttons with CSS3 and RGB</font></b></a>&nbsp;</p><p><a href="http://www.45eggs.com/upload/2011/04/20110420221520749.png"><img alt="20110420221520749.png" src="http://www.45eggs.com/assets_c/2011/04/20110420221520749-thumb-600x234-394.png" width="600" height="234" class="mt-image-none" style="" /></a><br />（<a href="http://www.zurb.com/blog_uploads/0000/0617/buttons-03.html">Demo网址</a>）</p><p>这些CSS3按钮使用box-shadow和border-radius等属性来创建其外观。</p><p><a href="http://lab.simurai.com/css/buttons/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">BonBon Buttons</font></b></a></p><p><img alt="20110420222001003.png" src="http://www.45eggs.com/upload/2011/04/20110420222001003.png" width="600" height="227" class="mt-image-none" style="" /></p><p><a href="http://brandonmathis.com/projects/fancy-buttons/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">Fancy Buttons</font></b></a></p><p><a href="http://www.45eggs.com/upload/2011/04/20110420222416083.png"><img alt="20110420222416083.png" src="http://www.45eggs.com/assets_c/2011/04/20110420222416083-thumb-600x349-397.png" width="600" height="349" class="mt-image-none" style="" /></a></p><p><a href="http://www.markedlines.com/10-awesome-css3-buttons-to-use-on-your-website/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">10 Nice CSS3 Buttons</font></b></a></p><p><img alt="nice-css3-buttons.gif" src="http://www.45eggs.com/upload/2011/04/nice-css3-buttons.gif" width="480" height="231" class="mt-image-none" style="" /></p><p><a href="http://tutorialzine.com/2010/10/css3-animated-bubble-buttons/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">CSS3 Animated Bubble Buttons</font></b></a></p><p><img alt="20110420223056249.png" src="http://www.45eggs.com/upload/2011/04/20110420223056249.png" width="600" height="460" class="mt-image-none" style="" /></p><p><a href="http://www.andrewgreig.com/2010/05/styling-pretty-buttons-with-css3/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">Pretty CSS3 Buttons</font></b></a></p><p><a href="http://www.45eggs.com/upload/2011/04/20110420223523394.png"><img alt="20110420223523394.png" src="http://www.45eggs.com/assets_c/2011/04/20110420223523394-thumb-600x310-401.png" width="600" height="310" class="mt-image-none" style="" /></a></p><p><a href="http://www.wearepico.com/buttons/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">We Love Buttons</font></b></a></p><p><a href="http://www.45eggs.com/upload/2011/04/20110420223729064.png"><img alt="20110420223729064.png" src="http://www.45eggs.com/assets_c/2011/04/20110420223729064-thumb-600x443-403.png" width="600" height="443" class="mt-image-none" style="" /></a></p><p>Sexy Buttons</p><p><img alt="20110420224155706.png" src="http://www.45eggs.com/upload/2011/04/20110420224155706.png" width="600" height="200" class="mt-image-none" style="" /></p><p><a href="http://somadesign.ca/2010/realistic-css3-buttons-redux/"><b><font class="Apple-style-span" style="font-size: 1.25em; ">Realistic CSS3 Buttons</font></b></a></p><p><img alt="realistic-css3-buttons.gif" src="http://www.45eggs.com/upload/2011/04/realistic-css3-buttons.gif" width="480" height="231" class="mt-image-none" style="" /></p><p>Other CSS3 Buttons Resources</p>
<ul> 
<li><a href="http://webdesignerwall.com/tutorials/css3-gradient-buttons" target="_blank">CSS3 gradient buttons<br /> 
		</a></li> 
<li><a href="http://naioo.com/blog/css3-buttons-without-any-images/" target="_blank">CSS3 buttons without any images<br /> 
		</a></li> 
<li><a href="http://www.darrenhoyt.com/2009/09/20/better-button-and-nav-interactions/" target="_blank">Better button and nav interactions<br /> 
		</a></li> 
<li><a href="http://robots.thoughtbot.com/post/2718077289/make-css3-buttons-like-a-boss" target="_blank">Make CSS3 buttons like a boss<br /> 
		</a></li> 
<li><a href="http://www.leemunroe.com/css-button/" target="_blank">How to design a sexy buttton using CSS<br /> 
		</a></li> 
<li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/build-kick-ass-practical-css3-buttons/" target="_blank">Build kick-ass practical CSS3 buttons <br /> 
		</a></li> 
<li><a href="http://www.markedlines.com/10-awesome-css3-buttons-to-use-on-your-website/" target="_blank">10 Awesome CSS3 Buttons to use on your website<br /> 
		</a></li> 
<li><a href="http://blog.anomalyinnovations.com/2010/03/creating-a-realistic-looking-button-with-css3/" target="_blank">Creating a realistic looking button with CSS3<br /> 
		</a></li> 
<li><a href="http://technology.posterous.com/make-css3-buttons-that-are-extremely-fancy" target="_blank">Make CSS3 buttons that are extremely fancy<br /> 
		</a></li> 
<li><a href="http://hacks.mozilla.org/2009/11/building-beautiful-buttons-with-css-gradients/" target="_blank">Building beautiful buttons with css gradients<br /> 
		</a></li> 
</ul> 

<p>原文：<a href="http://www.webresourcesdepot.com/css3-buttons-10-awesome-ready-to-use-solutions-all-related-tutorials-you-need/">CSS3 Buttons - 10+ Awesome Ready-To-Use Solutions (+All Related Tutorials You Need)</a></p>]]>
    </content>
</entry>

<entry>
    <title>闲聊CSS之关于clearfix--清除浮动 - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/xhtml-css/2011/css-clearfix.html" />
    <id>tag:www.45eggs.com,2011://3.609</id>

    <published>2011-04-15T01:16:04Z</published>
    <updated>2012-04-11T01:28:00Z</updated>

    <summary><![CDATA[一，什么是.clearfix你只要到Google或者Baidu随便一搜"css清除浮动"，就会发现很多网站都讲到"盒子清除内部浮动时可以用到.clearfix"。 .clearfix:after { content: " "; display: block; clear: both; height: 0; } .clearfix { zoom: 1; } &lt;div class="clearfix"&gt; &lt;div class="floated"&gt;&lt;/div&gt; &lt;/div&gt; 上面的代码就是.clearfix的定义和应用，简单的说下.clearfix的原理： 1、在IE6, 7下zoom: 1会触发hasLayout，从而使元素闭合内部的浮动。 2、在标准浏览器下，.clearfix:after这个伪类会在应用到.clearfix的元素后面插入一个clear: both的块级元素，从而达到清除浮动的作用。 &lt;div&gt; &lt;div class="floated"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div style="clear: both"&gt;&lt;/div&gt;...]]></summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="XHTML-CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="clearfix" label="clearfix" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="浮动" label="浮动" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p><b><font class="Apple-style-span" style="font-size: 1.25em; ">一，什么是.clearfix</font></b></p><p>你只要到Google或者Baidu随便一搜"css清除浮动"，就会发现很多网站都讲到"盒子清除内部浮动时可以用到.clearfix"。</p>
<pre class="prettyprint"><code>.clearfix:after {
  content: " ";
  display: block;
  clear: both;
  height: 0;
}
.clearfix {
  zoom: 1;
}

&lt;div class="clearfix"&gt;
  &lt;div class="floated"&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>上面的代码就是.clearfix的定义和应用，简单的说下.clearfix的原理：</p>
<p>1、在IE6, 7下zoom: 1会触发hasLayout，从而使元素闭合内部的浮动。</p>
<p>2、在标准浏览器下，.clearfix:after这个伪类会在应用到.clearfix的元素后面插入一个clear: both的块级元素，从而达到清除浮动的作用。</p>
<pre class="prettyprint"><code>&lt;div&gt;
  &lt;div class="floated"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="clear: both"&gt;&lt;/div&gt;</code></pre>
]]>
        <![CDATA[<p><b><font class="Apple-style-span" style="font-size: 1.25em; ">二，.clearfix的弊端</font></b></p><p>在上面的代码中可以看到，抛开IE6, 7不谈，.clearfix在标准浏览器下插入了一个clear: both的元素，这样很可能清除掉不必要的浮动。举例来说明：</p>
<pre class="prettyprint"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Demo&lt;/title&gt;
  &lt;style type="text/css"&gt;
    html, body { padding: 0; margin: 0; }
    ul { margin: 0; padding: 0; } 
  
    .clearfix:after {
      content: " ";
      display: block;
      clear: both;
      height: 0;
    }
    .clearfix {
      zoom: 1;
    }
  
    .left-col {
      background: red;
      float: left;
      width: 100px;
      height: 300px;
    }
    .right-col {
      margin-left: 100px;
    }
    .menu {
      border: 1px solid #000;
    }
    .menu li {
      float: left;
      display: block;
      padding: 0 1em;
      margin: 0 1em 0 0;
      background: #ccc;
    }
    .placeholder {
      background: yellow;
      height: 400px;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class="left-col"&gt;
  &lt;/div&gt;
  &lt;div class="right-col"&gt;
    &lt;ul class="menu"&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
      &lt;li&gt;Menu Item&lt;/li&gt;
    &lt;/ul&gt;
    &lt;div class="placeholder"&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>上面的代码构成一个两列布局的页面。注意.menu这个菜单设置了边框，但是由于.menu的li元素是左浮动的，导致.menu没有高度，于是可以用.clearfix来清除.menu内部的浮动。代码如下：</p>
<pre class="prettyprint"><code>&lt;ul class="menu clearfix"&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
  &lt;li&gt;Menu Item&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>但是应用完.clearfix后，在标准浏览器下页面变得很乱，这是因为.clearfix:after把.left-col的浮动也给清除掉了。</p><p><b><font class="Apple-style-span" style="font-size: 1.25em; ">三，重构.clearfix</font></b></p><p>在遭遇到上面的错误之后，分析一下除了.clearfix:after这种方式之外还有没有别的方法清除元素内部的浮动。答案是有的，在白话Block Formatting Contexts这篇文章中提到过构成Block Formatting Context的元素可以清除内部元素的浮动。那么只要使.clearfix形成Block Formatting Context就好了。构成Block Formatting Context的方法有下面几种：</p><ul><li>float的值不为none。</li><li>overflow的值不为visible。</li><li>display的值为table-cell, table-caption, inline-block中的任何一个。</li><li>position的值不为relative和static。</li></ul><p>很明显，float和position不合适我们的需求。那只能从overflow或者display中选取一个。因为是应用了.clearfix和.menu的菜单极有可能是多级的，所以overflow: hidden或overflow: auto也不满足需求（会把下拉的菜单隐藏掉或者出滚动条），那么只能从display下手。</p><p>我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个，但是display: inline-block会产生多余空白，所以也排除掉。剩下的只有table-cell, table-caption，为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting Context，因为display: table会产生一些匿名盒子，这些匿名盒子的其中一个（display值为table-cell）会形成Block Formatting Context。这样我们新的.clearfix就会闭合内部元素的浮动。下面是重构之后的.clearfix。</p>
<pre class="prettyprint"><code>.clearfix {
  zoom: 1;
  display: table;
  width: 100%;
}</code></pre>
<p><b><font class="Apple-style-span" style="font-size: 1.25em; ">四，总结</font></b></p>
<p>在IE6, 7下面只要是触发了hasLayout的元素就可以清除内部浮动了。而在标准浏览器下面清除元素内部浮动的方法有很多，除了.clearfix:after这种方式，其余的方法无非就是产生新的Block Formatting Context以达到目的。如果可以做到在什么条件下用哪种方法，我认为这样就足够了......</p>
<p>本文转自：<a href="http://www.missage.com/1220.html">http://www.missage.com/1220.html</a></p>]]>
    </content>
</entry>

<entry>
    <title>HTML5设计原理--Jeremy Keith（转） - 技术博客</title>
    <link rel="alternate" type="text/html" href="http://www.45eggs.com/xhtml-css/2011/the-design-of-html5.html" />
    <id>tag:www.45eggs.com,2011://3.608</id>

    <published>2011-04-14T04:15:41Z</published>
    <updated>2012-04-10T15:44:12Z</updated>

    <summary>本文来自于阿姆斯特丹召开的Fronteers 2010上Jeremy Keith的演讲，您还可以下载投影片（PDF格式），或者观看视频，在&quot;为之漫笔&quot;中有翻译，转载如下：今天我想跟大家谈一谈HTML5的设计。主要分两个方面：一方面，当然了，就是HTML5。我可以站在这儿只讲HTML5，但我并不打算这样做，因为如果你想了解HTML5的话，你可以Google，可以看书，甚至可以看规范。实际上，确实有人会谈到规范的内容。史蒂夫·福克纳（Steve Faulkner）会讲HTML5与可访问性。而保罗·艾里什（Paul Irish）则会讲HTML5提供的各种API。因此，我今天站在这里，不会光讲一讲HTML5就算完事了。说老实话，在正式开始之前，我想先交待清楚我所说的HTML5到底是什么意思。这话听起来有点搞笑：这会子你一直在说HTML5，难道我们还不知道什么是HTML5吗？大家知道，有一个规范，它的名字叫HTML5。我所说的HTML5，指的就是这个规范。但问题是，有些人所说的HTML5，指的不仅仅是这个规范，还有别的意思。比如说，用HTML5来代指CSS3就是一种常见的叫法。我可不是这样的。我所说的HTML5，不包含CSS3，就是HTML5。...</summary>
    <author>
        <name>Ethan Jiang</name>
        <uri>http://www.45eggs.com</uri>
    </author>
    
        <category term="XHTML-CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html5" label="HTML5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="w3c" label="W3C" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web标准" label="Web标准" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="浏览器" label="浏览器" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://www.45eggs.com/">
        <![CDATA[<p>本文来自于阿姆斯特丹召开的Fronteers 2010上Jeremy Keith的演讲，您还可以<a href="http://adactio.com/extras/slides/designofhtml5.pdf">下载投影片（PDF格式）</a>，或者<a href="http://fronteers.nl/congres/2010/sessions/the-design-of-html5-jeremy-keith">观看视频</a>，在"为之漫笔"中有翻译，转载如下：</p><p><a href="http://www.45eggs.com/upload/2011/04/attendees-2.jpg"><img alt="attendees-2.jpg" src="http://www.45eggs.com/assets_c/2011/04/attendees-2-thumb-600x226-385.jpg" width="600" height="226" class="mt-image-none" style="" /></a></p><p>今天我想跟大家谈一谈HTML5的设计。主要分两个方面：一方面，当然了，就是HTML5。我可以站在这儿只讲HTML5，但我并不打算这样做，因为如果你想了解HTML5的话，你可以Google，可以看书，甚至可以看规范。</p><p>实际上，确实有人会谈到规范的内容。史蒂夫·福克纳（Steve Faulkner）会讲HTML5与可访问性。而保罗·艾里什（Paul Irish）则会讲HTML5提供的各种API。因此，我今天站在这里，不会光讲一讲HTML5就算完事了。</p><p>说老实话，在正式开始之前，我想先交待清楚我所说的HTML5到底是什么意思。这话听起来有点搞笑：这会子你一直在说HTML5，难道我们还不知道什么是HTML5吗？大家知道，有一个规范，它的名字叫HTML5。我所说的HTML5，指的就是这个规范。但问题是，有些人所说的HTML5，指的不仅仅是这个规范，还有别的意思。比如说，用HTML5来代指CSS3就是一种常见的叫法。我可不是这样的。我所说的HTML5，不包含CSS3，就是HTML5。</p>]]>
        <![CDATA[<p>类似的术语问题以前也有过。Ajax本来是一种含义明确的技术，但过了不久，它的含义就变成了"用JavaScript来做一切好玩的东西"。这就是Ajax，对不对？今天，HTML5也面临同样的问题，它本来指的是一个特定的规范，但如今含义却成了"在Web上做一切好玩的事。"我说的不是这种HTML5，不是这种涵盖了最近刚刚出现的各种新东东的HTML5。我说的仅仅是规范本身：HTML5。</p><p>刚才已经说了，我今天想要讲的内容不多，也没有打算介绍HTML5都包含什么。今天我要讲的是它的另一方面，即HTML5的设计。换句话说，我要讲的不是规范里都包含什么，而是规范里为什么会包含它们，以及在设计这个规范的时候，设计者们是怎么看待这些东西的。</p><p>设计原理</p><p>设计原理本质上是一种信念、一种想法、一个概念，是你行动的支柱。不管你是制定规范，还是制造一种有形的物品，或者编写软件，甚至发明编程语言。你都能找到背后的一个或者多个设计原理，多人协作的任何成果都是例证。不仅仅Web开发领域是这样。纵观人类历史，像国家和社会这样大规模的构建活动背后，同样也有设计原理。</p><p>就拿美国为例吧，美国的设计原理都写在了《独立宣言》中了。</p>
<blockquote>我们认为这些真理是不言而喻的，人人生而平等，造物主赋予了每个人不可剥夺的权利，包括生存、自由和追求幸福。</blockquote>
<p>这里有一句口号：生存、自由和追求幸福。这是被写进宪法中的核心理念，它关系到我们所有人的一切，也就是我们构建自己社会的原则。</p><p>还有一个例子，就是卡尔·马克思（Karl Marx），他的著作在20世纪曾被奉为建设社会主义的圭臬。其基本思想大致可以归结为下面这条设计原理：</p>
<blockquote>各尽所能，各取所需。 </blockquote>
<p>这其实就是一种经济体系背后的设计原理。</p>
<p>还有一个例子，比前面两个的历史更久远一些，不过大同小异：</p>
<blockquote>人人为我，我为人人。 </blockquote>
<p>这个极为简单的设计原理，是两千年前的拿撒勒犹太人耶稣基督提出来的。而这条原则成为了后来许多宗教的核心教义。原理与实践有时候并不是同步的。</p>
<p>下面是小说中的一个例子。英国小说家乔治·奥威尔（George Orwell）笔下的《动物庄园》，就是在一条设计原理的基础上构建起来的虚拟社会。这条设计原理是：</p>
<blockquote>四条腿的都是好人，两条腿的都是坏蛋！ </blockquote>
<p>《动物庄园》中有意思的是，随着社会的变迁----变得越来越坏，这条设计原理也跟着发生了改变，变成了"四条腿的都是好人，两条腿的就更好了。"最关键的是，即使是在虚构的作品里，设计原理都是存在的。</p>
<p>还有一套虚构的作品是以三条设计原理为基础构建起来的，那就是美国著名小说家艾萨克·阿西莫夫（Issac Asimov）的机器人经典系列。阿西莫夫发明了机器人学这个术语，并提出了机器人学三大法则，然后在这三个简单的设计原理基础上创作了一系列经典作品----大约有50本书。无论作品的情节如何变化，实际上都是从不同的角度来阐释这三大设计原理。我想，在座各位对机器人三大法则都不应该陌生。</p>
<blockquote>
机器人不得伤害人类，或袖手旁观人类受伤害。<br />
机器人必须服从人类命令，除非命令违反第一法则。<br />
机器人必须自卫，只要不违背第一和第二法则。 
</blockquote>
<p>这些恐怕是第一次出现在小说中的针对软件的设计原理了。虽然基于这三个设计原理的软件运行在虚构的机器人的"正电子脑"中，但我想这应该是软件设计原理的事实开端。从此以后，我们才看到大量优秀软件背后的设计原理。</p><p>蒂姆·伯纳斯-李（Tim Berners-Lee），Web的发明者，在W3C的网站上发表过一份文档，其中有一个URL给出了他自己的一套设计原理。这些设计原理并不那么容易理解，不仅多，而且随着时时间推移，他还会不断补充、修改和删除。不过我还是觉得把自己认同的设计原理写出来放在某个地方真是个不错的主意。</p><p>实际上，CSS的发明人之一伯特·波斯（Bert Bos），也在W3C的网站上放着一份文档，其中讲的都是基本的设计原理，比如怎样设计并构建一种格式，无论是CSS还是其他格式。推荐大家看一看。</p><p>只要你在W3C的站点中随便找一找，就可以发现非常多的这种设计原理，包括蒂姆·伯纳斯-李个人的。当然，你还会看到他从软件工程学校里借用的一些口号：分权（decentalisation）、容忍（tolerance）、简易（simplicity）、模块化（modularity）。这些都是在他发明新格式的时候，头脑中无时无刻不在想的那些关键词。</p><p>在座各位对蒂姆·伯纳斯-李的贡献都是非常熟悉的，因为大家每天都在用。他发明了Web，与罗伯特·卡里奥（Robert Cailliau）共同发明了Web，而且在发明Web的同时，也发明了我们每天都在Web上使用的语言。当然，这门语言就是HTML：超文本标记语言。</p><p>HTML</p><p>HTML最早是从2.0版开始的。从来就没有1.0版。如果有人告诉你说，他最早是从HTML 1.0开始使用HTML的，那他绝对是在忽悠你。从前确实有一个名叫HTML Tags的文档，其中的部分标签一直用到现在，但那个文档并非官方的规范。</p><p>使用标签、尖括号、p或h1，等等，并不是蒂姆·伯纳斯-李首创的想法。当时的SGML里就有了这些概念，而且当时的CERN（Conseil Europeen pour la Recherche Nucleaire，欧洲核子研究委员会）也在使用SGML的一个特定的版本。也就是说，即便在那个时代，他也没有白手起家；这一点在HTML后来的发展过程中也体现了出来：继往开来、承前启后，而不是另立门户、从头开始。</p><p>换句话说，这篇名为HTML Tags的文档可以算作HTML的第一个版本，但它却不是一个正式的版本。第一个正式版本，HTML 2.0，也不是出自W3C之手。HTML 2.0是由IETF，因特网工程任务组（Internet Engineering Task Force）制定的。在W3C成立之前，IETF已经发布了不少标准。但从第三个版本开始往后，W3C，万维网联盟（World Wide Web Consortium）开始接手，并负责后续版本的制定工作。</p><p>20世纪九十年代HTML有过几次快速的发展。众所周知，在那个时代要想构建网站，可是一项十分复杂的工程。浏览器大战曾令人头疼不已。市场竞争的结果就是各家浏览器里都塞满了各种专有的特性，都试图在专有特性上胜人一筹。当时的混乱程度不堪回首，HTML到底还重不重要，或者它作为Web格式的前景如何，谁都说不清楚。</p><p>从1997年到1999年，HTML的版本从3.2到4.0到4.01，经历了非常快的发展。问题是到了4.01的时候，W3C的认识发生了倒退，他们说"好了，这个版本就这样了，HTML也就这样了；HTML 4.01是HTML的最后一个版本了，我们用不着HTML工作组了。"</p><p>W3C并没有停止开发这门语言，只不过他们对HTML不再感兴趣了。在HTML 4.01之后，他们提出了XHTML 1.0。虽然听起来完全不同，但XHTML 1.0与HTML 4.01其实是一样的。我的意思是说，从字面上看这两个规范的内容是一样的，词汇表是一样的，所有的元素是一样，所有的属性也都是一样的。唯一一点不同之处，就是XHTML 1.0要求使用XML语法。也就是说，所有属性都必须使用小写字母，所有元素也必须使用小写字母，所有属性值都必须加引号，你还得记着使用结束标签，记着对img和br要使用自结束标签。</p><p>从规范本身的内容来看，实际上是相同的，没有什么不同。不同之处就是编码风格，因为对浏览器来说，读取符合HTML 4.01、HTML 3.2，或者XHTML 1.0规范的网页都没有问题，对浏览器来说这些网页都是一样的，都会生成相同的DOM树。只不过人们会比较喜欢XHTML 1.0，因为不少人认同它比较严格的编码风格。</p><p>到了2000年，Web标准项目（Web Standards Project）的活动开展得如火如荼，开发人员对浏览器里包含的那些乱七八糟的专有特性已经忍无可忍了。大家都很生气，就骂那些浏览器厂商"遵守个规范就他妈的真有那么难吗？"当时CSS有了长足的发展，而且与XHTML 1.0结合得也很紧密，CSS加XHTML 1.0基本上就可以算是"最佳实践"了。虽然在我看来HTML 4.01与XHTML 1.0没有本质上的不同，但大家都接受了。专业的开发人员能做到元素全部小写，属性全部小写，属性值也全部加引号：由于专业人员起到了模范带头作用，越来越多的人也都开始支持这种语法。</p><p>我就是一个例子！过去的10年，我一直都使用XHTML 1.0文档类型，原因是这样一来验证器就能给我帮上很大的忙，对不对？只要我写的是XHTML 1.0，然后用验证器测试，它就能告诉我是不是忘了给属性值加引号，是不是没有结束某个标签，等等等等。而如果我写的是HTML 4.01，同样的问题就变成了有效的了，验证器就不一定会提醒我了。</p><p>这就是我一直使用XHTML 1.0的原因。我估计很多人都......使用XHTML 1.0的朋友，请把手举起来。好的。HTML 4.01呢？人少多了。一直没有举手的呢，大声点，你们用什么？HTML5，也很好！更早的呢，还有人使用更早的文档类型吗？没有了？</p><p>10年来我一直使用XHTML 1.0，就是因为验证器能够真正帮到我。有人用XHTML 1.1吗？你知道有人用吗？请举手，别放下。有人把网页标记为XML文档吗？有吗？那你们使用的就不是XHTML 1.1。</p><p>这就是个大问题。XHTML 1.0之后是XHTML 1.1，只是小数点后面的数字加了一个1，而且从词汇表的角度看，规范本身没有什么新东西，元素也都相同，属性也都相同。但对XHTML 1.1来说，唯一的变化是你必须把自己的文档标记为XML文档。在使用XHTML 1.0的时候，还可以把文档标记为HTML，而我们也正是这样做的，否则把文档标记为XML没准真会把人逼疯的。</p><p>为什么这么说呢？首先，把文档标记为XML后，Internet Explorer不能处理。当然，IE9是可以处理了。恐怕有人会讲"真是太可爱了"，他们到现在居然都没有忘了这件事。这艘船终于靠岸了！不过那时候，作为全球领先的浏览器，IE无法处理接收到的XML文档类型的文档，而规范又要求你以XML文档类型来发送文档，这不把人逼疯才怪呢。</p><p>所以说XHTML 1.1有点脱离现实，而你不想把文档以XML格式发送给那些能够理解XML的浏览器，则是因为XML的错误处理模型。XML的语法，无论是属性小写，元素小写，还是始终要给属性值加引号，这些都没有问题，都很好，事实上我也喜欢这样做，但XML的错误处理模型却是这样的：解析器如果遇到错误，停止解析。规范里就是这么写的。如果你把XHTML 1.1标记为XML文档类型，假设你用Firefox打开这个文档，而文档中有一个和号（&amp;）没有正确编码，就算整个页面中就这一处错误，你看到的也将是黄屏，浏览器死掉了。Firefox会说："没戏了，页面中有一个错误，你看不到这个网页了。"根据XML规范，这样处理是正确的，对Firefox而言，遇到错误就停止解析，并且不呈现其他任何内容是严格按照XML规范做的。因为它不是HTML，HTML根本就没有错误处理模型，但根据XML规范，这样做没错。</p><p>这就是为什么你不会把文档标记为XML的另一个原因。接下来，新的版本是XHTML 2，大家注意后面没有日期，因为这个规范并没有完成。</p><p>现在就说说XHTML 2，我很愿意把问题说清楚，XHTML 2实际上真是一个非常非常好的规范，确实非常好......从理论的角度来说。我的意思是说，制定这个规范的人都是非常非常有头脑的。直说吧，领导制定这个规范的家伙是斯蒂芬·彭伯顿（Stephen Pemberton），他应该是本地人，是一个聪明过人的家伙。规范本身也很了不起，如果所有人都同意使用的话，也一定是一个非常好的格式。只不过，还不够实际。</p><p>首先，XHTML 2仍然使用XML错误处理模型，你必须保证以XML文档类型发送文档；这一点不言自明：没人愿意这样做。其次，XHTML 2有意不再向后兼容已有的HTML的各个版本。他们甚至曾经讨论过废除img元素，这对每天都在做Web开发的人来说确实有点疯了的味道。但我们知道，他们之所以这样做，理论上确实有充足的理由----使用object元素可能会更好。</p><p>因此，无论XHTML 2在理论上是多么完美的一种格式，但却从未有机会付诸实践。而之所以难以将其付诸实践，就是因为像你我这样的开发人员永远不会支持它，它不向后兼容。同样，浏览器厂商也不会，浏览器厂商必须要保证向后兼容。</p><p>为什么XHTML 1.1没有像XML那样得到真正广泛地应用，为什么XHTML 2从未落到实处？因为它违反了一条设计原理，这条设计原理就是著名的伯斯塔尔法则（Postel's Law）。大家都知道：</p>
<blockquote>发送时要保守；接收时要开放。 </blockquote>
<p>没错，接收的时候要开放，而这也正是Web得以构建的基础。开发浏览器的人必须敞开胸怀，接收所有发送给浏览器的东西，因为它们过去一直都在接收那些不够标准的东西，对不对？Web上的很多文档都不规范，但那正是Web发展的动力。从某种角度讲，Web走的正是一条混沌发展之路，虽然混沌，但却非常美丽诱人。在Web上，格式不规范的文档随处可见，但那又怎样呢？如果所有人都能够写出精准的XML，所有文档的格式都十分正确，那当然好了。可是，那不现实。现实是伯斯塔尔法则。</p><p>作为专业人士，在发送文档的时候，我们会尽量保守一些，尽量采用最佳实践，尽量确保文档格式良好。但从浏览器的角度说，它们必须以开放的姿态去接收任何文档。</p><p>有人可能会说XML有错误处理模型，XHTML 1.1和XHTML 2都使用该模型，但那个错误处理模型太苛刻了。它绝对不符合接收时开放这个法则，遇到一个错误就停止解析怎么能叫开放呢？我们只能说它与健壮性法则（也就是伯斯塔尔法则）是对立的。</p><p>HTML5</p><p>之后，就到了HTML5，但HTML5并不是由W3C直接制定的。故事的经过是这样的，到20世纪末的时候，还没有HTML工作组，W3C内部的一些人就开始琢磨了，"HTML也许还可以更长寿一点，只要我们对它稍加扩展就行了。只要把我们放在XHTML上的时间和精力拿出一部分来，就可以提升一下HTML中的表单，可以让HTML更接近编程语言，就可以让它更上一层楼。"</p><p>于是，在2004年W3C成员内部的一次研讨会上，当时Opera公司的代表伊恩·希克森（Ian Hickson）提出了一个扩展和改进HTML的建议。他建议新任务组可以跟XHTML 2并行，但是在已有HTML的基础上开展工作，目标是对HTML进行扩展。W3C投票表决的结果是----"反对"，因为HTML已经死了，XHTML 2才是未来的方向。然后，Opera、Apple等浏览器厂商，以及其他一些成员说："那好吧，不指望他们了，我们自已一样可以做这件事，我们脱离W3C。"他们成立了Web Hypertext Applications Technology Working Group（Web超文本应用技术工作组，WHATWG）----可巧的是，他们自称工作组，而不是特别小组（task force），这就为HTML5将来的命运埋下了伏笔。</p><p>WHATWG决定完全脱离W3C，在HTML的基础上开展工作，向其中添加一些新东西。这个工作组的成员里有浏览器厂商，因此他们不仅可以说加就加，而且还能够一一实现。结果，大家不断提出一些好点子，并且逐一做到了浏览器中。</p><p>WHATWG的工作效率很高，不久就初见成效。在此期间，W3C的XHTML 2没有什么实质性的进展。特别是，如果从实现的角度来说，用原地踏步形容似乎也不为过。</p><p>结果，一件有意思的事情发生了。那是在2006年，蒂姆·伯纳斯-李写了一篇博客，说："你们知道吗？我们错了。我们错在企图一夜之间就让Web跨入XML时代，我们的想法太不切实际了，是的，也许我们应该重新组建HTML工作组了。"善哉斯言，后来的故事情节果真就是这样发展的。W3C在2007年组建了HTML5工作组。这个工作组面临的第一个问题，毫无疑问就是"我们是从头开始做起呢，还是在2004年成立的那个叫WHATWG的工作组既有成果的基础上开始工作呢？"答案是显而易见的，他们当然希望从已经取得的成果着手，以之为基础展开工作。于是他们又投了一次票，同意"在WHATWG工作成果的基础上继续开展工作"。好了，这下他们要跟WHATWG并肩战斗了。</p><p>第二个问题就是如何理顺两个工作组之间的关系。W3C这个工作组的编辑应该由谁担任？是不是还让WHATWG的编辑，也就是现在Google的伊恩·希克森来兼任？于是他们又投了一次票，赞成"让伊恩·希克森担任W3C HTML5规范的编辑，同时兼任WHATWG的编辑，更有助于新工作组开展工作。"</p><p>这就是他们投票的结果，也就是我们今天看到的局面：一种格式，两个版本。WHATWG的网站上有这个规范，而W3C的站点上同样也有一份。</p><p>如果你不了解内情，很可能会产生这样的疑问："哪个版本才是真正的规范？"当然，这两个版本内容是一样的......基本上相同。实际上，这两个版本将来还会分道扬镳。现在已经有了分道扬镳的迹象了。我的意思是说，W3C最终要制定一个具体的规范，这个规范会成为一个工作草案，定格在某个历史时刻。</p><p>而WHATWG呢，他们还在不断地迭代。即使目前我们说的HTML5，也不能完全涵盖WHATWG正在从事的工作。最准确的理解是他们正在开发一项简单的HTML或Web技术，因为这才是他们工作的核心目标。然而，同时存在两个这样的工作组，这两个工作组同时开发一个基本相同的规范，这无论如何也容易让人产生误解。误解就可能造成麻烦。</p><p>其实这两个工作组背后各自有各自的流程，因为它们的理念完全不同。在WHATWG，可以说是一种独裁的工作机制。我刚才说了，伊恩·希克森是编辑。他会听取各方意见，在所有成员各抒己见，充分陈述自己的观点之后，他批准自己认为正确的意见。</p><p>W3C则截然相反，可以说是一种民主的工作机制。所有成员都可以发表意见，而且每个人都有投票表决的权利。这个流程的关键在于投票表决。从表面上看，WHATWG的工作机制让人不好接受。岂止是不好接受，简直是历史的倒退。相信谁都会认为"运作任何项目都不能采取这种方式！"</p><p>W3C的工作机制听起来让人很舒服。至少体现了人人平等嘛。但在实践中，WHATWG的工作机制运行得非常非常好。我认为之所以会这样，主要归功于伊恩·希克森。他的的确确是一个非常称职的编辑。他在听取各方意见时，始终可以做到丝毫不带个人感情色彩。</p><p>从原理上讲，W3C的工作机制很公平，而实际上却非常容易在某些流程或环节上卡壳，造成工作停滞不前，一件事情要达成决议往往需要花费很长时间。那到底哪种工作机制最好呢？我认为，最好的工作机制是将二者结合起来。而事实也是两个规范制定主体在共同制定一份相同的规范，我想，这倒是非常有利于两种工作机制相互取长补短。</p><p>两个工作组之所以能够同心同德，主要原因是HTML5的设计思想。因为他们从一开始就确定了设计HTML5所要坚持的原则。结果，我们不仅看到了一份规范，也就是W3C站点上公布的那份文档，即HTML5语言规范，还在W3C站点上看到了另一份文档，也就是HTML设计原理。而这份文档的一位编辑今天也来到了我们大会的现场，她他就是安妮·奇泰丝（Anne Van Kesteren）。如果大家对这份文档有问题，可以请教安妮。</p><p>这份文档非常好，真的非常出色。这份文档，可以说见证了W3C与WHATWG同心协力共谋发展的历程。难道你们不觉得他们像是一对欢喜冤家吗？那他们还怎么同心同德呢？这份文档忠实地记录了他们一道做了什么，他们共同拥护什么。</p><p>接下来，我想要讲的就是这份文档。因为，既然他们能就这份文档达成共识，那么我相信，HTML5必将是一个伟大的规范，而他们已经认可这就是他们的共同行动纲领。为此，你才会看到诸如兼容性、实用性、互用性之类的概念。即便W3C与WHATWG之间再有多大的分歧----确实相当多----至少他们还有这份文档中记录的共识。这一点才是至关重要的。正因为他们有了共识，才有了这份基于共识描述设计原理的文档。</p><p>避免不必要的复杂性</p><p>下面我就给大家介绍一些这份文档中记载的设计原理。第一个，非常简单：避免不必要的复杂性。好像很简单吧。我用一个例子来说明。</p><p>假设我使用HTML 4.01规范，我打开文档，输入doctype。这里有人记得HTML 4.01的doctype吗？好，没有，我猜没有。除非......我的意思是说，你是傻冒。现场恐怕真有人背过，这就是HTML 4.01的doctype：</p>
<pre class="prettyprint"><code>&lt;!DOCTYPE html PUBLIC "-//W3C/DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"&gt;</code></pre>
<p>我不记这个两行代码，不然还要记事本、要Google、要模板有什么用呢？</p>
<p>要是我使用XHTML 1.0呢，这个规范我都已经用了10年了。有谁记得住这个doctype吗？没错，它的长度跟HTML 4.01的差不太多：</p>
<pre class="prettyprint"><code>&lt;!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</code></pre>
<p>是不是，基本上相同。它要告诉浏览器的是：这个文档是XHTML 1.0的文档。那么在HTML 5中，省掉不必要的复杂性，doctype就简化成了：</p>
<pre class="prettyprint"><code>&lt;!DOCTYPE html&gt;</code></pre>
<p>仅此而已。好了，就连我也能过目不忘了。我用不着把这几个字符记在记事本里了。我得说，在我第一次看到这个doctype的时候----我当然以为这是一个HTML文档的doctype----被它吓了一跳："是不是还少一个数字5啊？"我心里想："这个doctype想告诉浏览器什么呢？就说这个文档是HTML吗？难道这是有史以来唯一一个HTML版本吗，这件事我得首先搞清楚，HTML今后永远不会再有新版本了吗？"好一副唯我独尊的架式！我错了，因为这个doctype并没有这个意思。为此，必须先搞清楚为什么文档一开头就要写doctype。它不是写给浏览器看的。Doctype是写给验证器看的。也就是说，我之所以要在文档一开头写那行XHTML 1.0的doctype，是为了告诉验证器，让验证器按照该doctype来验证我的文档。</p><p>浏览器反倒无所谓了。假设我写的是HTML 3.2文档，文档开头写的是HTML 3.2的doctype。而在文档中某个地方，我使用了HTML 4.01中才出现的一个元素。浏览器会怎么处理这种情况？它会因为这个元素出现在比doctype声明的HTML版本更晚的规范中，就不解释呈现该元素吗？不会，当然不会！它照样会解释呈现该元素，别忘了伯斯塔尔法则，别忘了健壮性。浏览器在接收的时候必须要开放。因此，它不会检查任何格式类型，而验证器会，验证器才关心格式类型。这才是存在doctype的真正原因。</p><p>而按照HTML5的另一个设计原理，它必须向前向后兼容，兼容未来的HTML版本----不管是HTML6、HTML7，还是其他什么----都要与当前的HTML版本，HTML5，兼容。因此，把一个版本号放在doctype里面没有多大的意义，即使对验器证也一样。</p><p>刚才，我说doctype不是为浏览器写的，这样说大多数情况下没有问题。在有一种情况下，你使用的doctype会影响到浏览器，相信在座诸位也都知道。但在这种情况下，Doctype并非真正用得其所，而只是为了达到某种特殊的目的才使用doctype。当初微软在引入CSS的时候，走在了标准的前头，他们率先在浏览器中支持CSS，也推出了自己的盒模型----后来标准发布了，但标准中使用了不一样的盒模型。他们怎么办？他们想支持标准，但也想向后兼容自己过去推出的编码方式。他们怎么知道网页作者想使用标准，还是想使用他们过去的方式？</p><p>于是，他们想出了一个非常巧妙的主意。那就是利用doctype，利用有效的doctype来触发标准模式，而不是兼容模型（quiks mode）。这个主意非常巧妙。我们今天也都是这样在做，在我们向文档中加入doctype时，就相当于声明了"我想使用标准模式"，但这并不是发明doctype的本意。这只是为了达到特殊的目的在利用doctype。</p><p>下面我出一道有奖抢答题，听好："一分钟后开始，如果你手快的话，第一个在文档前面写完doctype html，然后我用Internet Explorer打开你的文档，会触发它的标准模式，还是会触发它的兼容模式？"</p><p>答案是，这是在Internet Explorer中触发标准模式的最少字符数目。我认为这也说明了HTML5规范的本质：它不追求理论上的完美。HTML5所体现的不是"噢，给作者一个简短好记的doctype不好吗？"，没错，简短好记是很好，但如果这个好记的doctype无法适应现有的浏览器，还不如把它忘了更好。因此，这个平衡把握得非常好，不仅理论上看是个好主意----简短好记的doctype，而且实践中同样也是个好主意----仍然可以触发标准模式。应该说，Doctype是一个非常典型的例子。</p><p>还有一个例子，同样可以说明规范是如何省略不必要的复杂性，避免不必要的复杂性的。如果前面的文档使用的是HTML 4.01，假设我要指定文档的字符编码。理想的方式，是通过服务器在头部信息中发送字符编码，不过也可以在文档这个级别上指定：</p>
<pre class="prettyprint"><code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</code></pre>
<p>同样，我也不会把这行代码背下来。我还想省下自己的脑细胞去记点别的更有价值的东西呢。不过，如果我想指定文档使用UTF-8编码，只能添加这行代码。这是在HTML 4.01中需要这样做。要是你在XHTML 1.0指定同样的编码，就得多敲一下键盘，因为你还得声明meta元素位于一个开始的XML标签中。</p>
<pre class="prettyprint"><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;</code></pre>
<p>在HTML5中，你要敲的字符只有：</p><p>
</p><pre class="prettyprint"><code>&lt;meta charset="utf-8"&gt;</code></pre>
<p>简短好记。我能背下来。</p><p>同样，这样写也是有效的。它不仅适用于最新版本的浏览器，只要是今天还有人在用的浏览器都同样有效。为什么？因为在我们把这些meta元素输入浏览器时，浏览器会这样解释它："元数据（meta）点点点点点，字符集（charset）utf-8。"这就是浏览器在解释那行字符串时真正看到的内容。它必须看到这些内容，根据就是伯斯塔尔法则，对不对？</p><p>我多次提到健壮性原理，但总有人不理解。我们换一种说法，浏览器会想"好，我觉得作者是想要指定一个字符集......看，没错，utf-8。"这些都是规范里明文规定的。如今，不仅那个斜杠可以省了，而且总共只要写meta charset="utf-8″就行了。</p><p>关于省略不必要的复杂性，或者说避免不必要的复杂性的例子还有不少。但关键是既能避免不必要的复杂性，还不会妨碍在现有浏览器中使用。比如说，在HTML5中，如果我使用link元素链接到一个样式表，我说了rel="stylesheet"，然后再说type="text/css"，那就是重复自己了。对浏览器而言，我就是在重复自己。浏览器用不着同时看到这两个属性。浏览器只要看到rel="stylesheet"就够了，因为它可以猜出来你要链接的是一个CSS样式表。所以就不用再指定type属性了。你不是已经说了这是一个样式表了嘛；不用再说第二次了。当然，愿意的话，你可以再说；如果你想包含type属性，请便。</p><p>同样地，如果你使用了script元素，你说type="text/javascript"，浏览器差不多就知道是怎么回事了。对Web开发而言，你还使用其他的脚本语言吗？如果你真想用其他脚本语言，没人会阻拦你。但我要奉劝你一句，任何浏览器都不会支持你。</p><p>愿意的话，你可以添加一个type属性。不过，也可以什么都不写，浏览器自然会假设你在使用JavaScript。避免-不必要的-复杂性。</p><p>支持已有的内容</p><p>支持已有的内容。这一点非常重要，因为很多人都认为HTML5很新，很闪亮；它应该代表着未来发展的方向，应该把Web推向一个新的发展阶段。这就是HTML5，对吗？显然，我们都会考虑让Web的未来发展得更好，但他们则必须考虑过去。别忘了W3C这个工作组中有很多人代表的是浏览器厂商，他们肯定是要考虑支持已有内容的。只要你想构建一款浏览器，就必须记住这个原则：必须支持已有的内容。</p><p>下面我们就来看一个HTML5支持已有内容的例子。</p><p>这个例子展示了编写同样内容的四种不同方式。上面是一个img元素，下面是带一个属性的段落元素。四种写法唯一的不同点就是语法。把其中任何一段代码交给浏览器，浏览器都会生成相同的DOM树，没有任何问题。从浏览器的角度看，这四种写法没有区别。因而在HTML5中，你可以随意使用下列任何语法。</p>
<pre class="prettyprint"><code>&lt;img src="foo" alt="bar" /&gt;
&lt;p class="foo"&gt;Hello world&lt;/p&gt;

&lt;img src="foo" alt="bar"&gt;
&lt;p class="foo"&gt;Hello world

&lt;IMG SRC="foo" ALT="bar"&gt;
&lt;P CLASS="foo"&gt;Hello world&lt;/P&gt;

&lt;img src=foo alt=bar&gt;
&lt;p class=foo&gt;Hello world&lt;/p&gt;</code></pre>
<p>好了，看到这几段代码，恐怕有人会说"不对不对不对。其中只有一个是对的，另外三个----说不好。"不对，应该给属性值加引号！拜托，我们可是一直都给属性值加引号的！元素名大写对吗？这种做法10年不是就被抛弃了吗？</p>
<p>看到HTML5同时允许这些写法，我心里忍不住一阵阵想吐。我写了10年的XHTML 1.0，已经非常适应严格的语法了。但你必须明白，站在浏览器的角度上，这些写法实际上都是一样的。确实没有什么问题。</p><p>还有谁也感到不舒服了吗？有谁看到这些之后想"噢，这不是乱写嘛，这样做不对"？只有我这样想吗？还有别人吗？</p><p>但是，HTML5必须支持已经存在的内容，而已有的内容就是这个样子的。不是吗？根据伯斯塔尔法则，浏览器没有别的选择。</p><p>有人可能会说"这样不行。我觉得语言本身应该提供一种开关，让作者能够表明自己想做什么。"比如说，想使用某种特定的语法，像XHTML，而不是使用其他语法。我理解这些人的想法。但我不赞成在语言里设置开关。因为我们讨论的只是编码风格或者写作风格，跟哪种语法正确无关。对于像我们这样的专业人士，我认为可以使用lint工具（一种软件质量保证工具，或者说是一种更加严格的编译器。它不仅可以象普通编译器那样检查出一般的语法错误，还可以检查出那些虽然完全合乎语法要求，但很可能是潜在的、不易发现的错误），对其他技术我们不是也在使用lint工具嘛。</p><p>比如说对JavaScript使用lint工具。JavaScript同样也是比较混乱、不严谨的例子，但它非常强大，原因恰恰是它混乱、不严谨，而且有很多不同的编码方式。在JavaScript，你可以在每条语句末尾加上分号，但不是必需的，因为JavaScript会自动插入分号......是不是听起来有点不好接受？</p><p>正因为如此，才有了像JSlint这样的工具，在道格拉斯·克劳克福德（Douglas Crockford）的网站jslint.org上面。有个网页上写着"JSlint可能会伤害你的感情。"但这确实是个非常棒的工具，它可以把JavaScript代码变得完美无瑕。如果你通过JSlint运行JavaScript，它会告诉你"好，你的JavaScript代码有效，但写法不妥。你这种编码风格啊，我不喜欢。不赞成你这样写。这样写不好。"特别是对团队，对于要使用统一的编码风格的团队，JSlint是非常方便的工具。</p><p>我个人认为，不仅对团队来说，就算是你自己写代码，也要坚持一种语法风格。从浏览器解析的角度讲，不存在哪种语法比另一种更好的问题，但我认为，作为专业人士，我们必须能够自信地讲"这就是我的编码风格。"然而，我不认为语言里应该内置这种开关。你可以使用lint工具来统一编码风格。现在就来说说lint工具。大家可以登录htmllint.com，在其中运行你的HTML5文档，它会帮你检查属性值是否加了引号，元素是否小写，你还可以通过勾选复选框来设置其他检查项。</p><p>但这不意味着拒绝粗心大意的标记，做不做清理完全取决于你自己。我说过，因为浏览器必须支持已有的内容，HTML5自然也不能例外。归根结底还是伯斯塔尔法则。我们始终离不开伯斯塔尔法则。</p><p>解决现实的问题</p><p>HTML5的另一个设计原理是解决现实的问题。显而易见的是，解决各种问题的格式和规范已经比比皆是了，因此在我看来，这个原理其实是要解决理论问题，而非解决现实的问题。这条设计原理是要从理论上承认人们普遍存在的问题，消除敏感问题。但是在我看来，那些格式和规范要解决的都是理论问题，而非现实问题。这条设计原理才是真正要解决今天的人们所面临的现实问题、令人头疼的问题。</p><p>下面我来举个例子。相信这个例子有不少人都遇到过。假设我使用HTML 4或XHTML 1，页面中已经有了一块内容，我想给整块内容加个链接，怎么办？问题是这块内容里包含一个标题，一个段落，也许还有一张图片。如果我想给它们全部都可以点击，必须使用3个链接元素。于是，我得先把光标放在标题（比如说h2元素）中，写一个链接标签，然后再选中所有要包含到链接里面来的文本。接着，再把光标放在段落里，写一个链接标签，然后把段落中的文本放在链接里......</p>
<pre class="prettyprint"><code>&lt;h2&gt;&lt;a href="/path/to/resource"&gt;Headline text&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="/path/to/resource"&gt;Paragraph text.&lt;/a&gt;&lt;/p&gt;</code></pre>
<p>在HTML5中，我只要简单地把所有内容都包装在一个链接元素中就行了。</p>
<pre class="prettyprint">&lt;a href="/path/to/resource"&gt;
&lt;h2&gt;Headline text&lt;/h2&gt;
&lt;p&gt;Paragraph text.&lt;/p&gt;
&lt;/a&gt;</pre>
<p>没错，链接包含的都是块级元素，但现在我可以用一个元素包含它们。这样太好了。因为我碰到过类似的情形，必须给几个块级元素加上相同的链接，所有能这样写就太好了。为此，我就非常欢迎HTML5这个新标准。</p><p>它解决了一个现实的问题。我敢说在座不少朋友都曾遇到过这个问题。</p><p>那这到底解决的是什么问题呢？浏览器不必因此重新写代码来支持这种写法。这种写法其实早就已经存在于浏览器中了，因为早就有人这样写了，当然以前这样写是不合乎规范的。所以，说HTML5解决现实的问题，其本质还是"你都这样写了很多年了吧？现在我们把标准改了，允许你这样写了。"</p><p>求真务实</p><p>在所有设计原理中，这一条恐怕是最响亮的了----求真务实。不知道大家有没有在公司里开会时听到过这种口号："开拓进取，求真务实。"实际上，除了作为企业的口号，它还是一条非常重要的设计原理，因为求真务实对于HTML的含义是：在解决那些令人头痛的问题之前，先看看人们为应对这些问题都想出了哪些办法。集中精力去理解这些"民间的"解决方案才是当务之急。</p><p>HTML5中新的语义元素就是遵循求真务实原理的反映。新增的元素不算多，谈不上无限的扩展性，但却不失为一件好事。尽管数量屈指可数，但意义却非同一般。这些新元素涉及头部（header）、脚部（footer）、分区（section）、文章（article）......，相信大家都不会觉得陌生。我的意思是说，即便你不使用HTML5，也应该熟悉这些称呼，这些都是你曾经使用过的类名，比如class="header"/"head"/"heading"，或class="footer"/"foot"。当然，也可能是ID，id="header"，id="footer"。这些不都是我们已经司空见惯了的嘛。</p><p>好，举个例子吧，假设你今天写了下面这个文档。</p>
<pre class="prettyprint"><code>&lt;body&gt;
&lt;div id="header"&gt;...&lt;/div&gt;
&lt;div id="navigation"&gt;...&lt;/div&gt;
&lt;div id="main"&gt;...&lt;/div&gt;
&lt;div id="sidebar"&gt;...&lt;/div&gt;
&lt;div id="footer"&gt;...&lt;/div&gt;
&lt;/body&gt;</code></pre>
<p>这里有一个div使用了id="header"，另一个div使用了id="navigation"，......。怎么样，都轻车熟路了吧？在HTML5中，这些元素都可以换掉。说起新增的语义元素，它们价值的一方面可以这样来体现："嘿，看啊，这样多好，用HTML5新增的元素可以把这些div都替换掉。"</p>
<pre class="prettyprint"><code>&lt;body&gt;
&lt;header&gt;...&lt;/header&gt;
&lt;nav&gt;...&lt;/nav&gt;
&lt;div id="main"&gt;...&lt;/div&gt;
&lt;aside&gt;...&lt;/aside&gt;
&lt;footer&gt;...&lt;/footer&gt;
&lt;/body&gt;</code></pre>
<p>当然了，你可以这样做。在文档级别上使用这些元素没有问题。但是，假如新增这些元素的目的仅仅是为了取代原来的div，那就真有点多此一举了。</p><p>虽然在这个文档中，我们用这些新元素来替换的是ID，但在我个人看来，将它们作为类的替代品更有价值。为什么这么说呢？因为这些元素在一个页面中不止可以使用一次，而是可以使用多次。没错，你可以为文档添加一个头部（header），再添加一个脚部（footer）；但文档中的每个分区（section）照样也都可以有一个头部和一个脚部。而每个分区里还可以嵌套另一个分区，被嵌套的分区仍然可以有自己的头部和脚部，是这样吧？</p><p>这四个新元素：section、article、aside和nav，之所以说它们强大，原因在于它们代表了一种新的内容模型，一种HTML中前所未有的内容模型----给内容分区。迄今为止，我们一直都在用div来组织页面中的内容，但与其他类似的元素一样，div本身并没有语义。但section、article、aside和nav实际上是在明确地告诉你----这一块就像文档中的另一个文档一样。位于这些元素中的任何内容，都可以拥有自己的概要、标题，自己的脚部。</p><p>其中最为通用的section，可以说是与内容最相关的一个。而article则是一种特殊的section。Aside呢，是一种特殊的section。最后，Nav也是一种特殊的section。</p><p>好，即便是现在，你照样可以使用div和类来描述页面中不同的部分，就像下面这样：</p>
<pre class="prettyprint"><code>&lt;div class="item"&gt;
&lt;h2&gt;...&lt;/h2&gt;
&lt;div class="meta"&gt;...&lt;/div&gt;
&lt;div class="content"&gt;
...
&lt;/div&gt;
&lt;div class="links"&gt;...&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>其中包含可能是有关内容作者的元数据，而下面会给出一些链接，差不多就这样。在HTML5中，我完全可以说这块内容就是一个文档，通过对内容分区，使用section或article或aside，我可以说"这一块完全是可以独立存在的。"因此，我当然可以使用header和footer。</p>
<pre class="prettyprint"><code>&lt;section class="item"&gt;
&lt;header&gt;&lt;h1&gt;...&lt;/h1&gt;&lt;/header&gt;
&lt;footer class="meta"&gt;...&lt;/footer&gt;
&lt;div class="content"&gt;
...
&lt;/div&gt;
&lt;nav class="links"&gt;...&lt;/nav&gt;
&lt;/section&gt;</code></pre>
<p>请注意，即便是footer，也不一定非要出现在下面，不是吗？这几个元素，header、footer、aside、nav，最重要的是它们的语义；跟位置没有关系。一想到footer这个词，我们总会不由自主地想，"噢，应该放在下面。"同样，我们把aside想象成一个侧边栏。可是，如果你看一看规范，就会发现这些元素只跟内容有关。因此，放在footer中的内容也可以是署名，文章作者之类的，它只是你使用的一个元素。这个元素并没有说"必须把我放在文档或者分区的下面。"</p><p>这里，请注意，最重要的还不是我用几个新元素替换了原来的div加类，而是我把原来的H2换成了H1----震撼吧，我看到有人发抖了。我碰到过不少职业的Web开发人员，多年来他们一直认为规范里说一个文档中只能有一个H1。还有一些自诩为万能的SEO秘诀同样说要这样。很多SEO的技巧其实是很教条的。所谓教条，意思就是不相信数据。过去，这种教条表现为"不行，页面中包含两个以上的H1，你就会死掉的。"在HTML5中，只要你建立一个新的内容块，不管用section、article、aside、nav，还是别的元素，都可以在其中使用H1，而不必担心这个块里的标题在整个页面中应该排在什么级别；H2、H3，都没有问题。</p><p>这个变化太厉害了。想一想吧，这个变化对内容管理是革命性的。因为现在，你可以把每个内容分区想象一个独立的、能够从页面中拿出来的部分。此时，根据上下文不同，这个独立部分中的H1，在整个页面中没准会扮演H2或H3的角色----取决于它在文档中出现的位置。面对这个突如其来的变化，也许有人的脑子会暂时转不过弯来。不要紧，但我可以告诉你，我认为这才是HTML5中这些新语义标记的真正价值所在。换句话说，我们现在有了独立的元素了，这些元素中的标题级别可以重新定义。</p><p>我的文档中可能会包含一个分区，这个分区中可能会嵌套另一个分区，或者一篇文章，然后文章再嵌套分区，分区再嵌套文章、嵌套分区，文章再嵌套文章。而且每个分区和文章都可以拥有自己的H1到H6。从这个意义上讲，H元素真可谓"子子孙孙，无穷匮也"了。但是，在你在编写内容或者内容管理系统的时候，它们又都是独立的，完全独立的内容块。这才是真正的价值所在。</p><p>实际上，这个点子并不HTML5工作组拍脑门想出来的，也不是W3C最近才提出来的。下面这几句话摘自蒂姆·伯纳斯-李1991年的一封邮件，邮件是发给丹·康纳利（Dan Connolly）的。他在邮件中解释了对HTML的理解，他说："你知道......知道我的想法，我认为H1、H2这样单调地排下去不好，我希望它成为一种可以嵌套的元素，或者说一个通用的H元素，我们可以在其中嵌套不同的层次。"但后来，我们没有看到通用的H元素，而是一直在使用H1和H2----那是因为我们一直在支持已有的内容。20年后的今天，这个理想终于实现了。</p><p>平稳退化</p><p>下一条原理大家应该都很熟悉了，那就是平稳退化。毕竟，我们已经遵守这条规则好多年了。渐进增强的另一面就是平稳退化。</p><p>有关HTML5遵循这条原理的例子，就是使用type属性增强表单。下面列出了可以为type属性指定的新值，有number、search、range，等等。</p>
<pre class="prettyprint"><code>input type="number"
input type="search"
input type="range"
input type="email"
input type="date"
input type="url"</code></pre>
<p>最关键的问题在于浏览器在看到这些新type值时会如何处理。现有的浏览器，不是将来的浏览器，现有的浏览器是无法理解这些新type值的。但在它们看到自己不理解的type值时，会将type的值解释为text。</p><p>无论你写的是input type="foo"还是input type="bar"，现有的任何浏览器都会说："嗯，也许作者的意思是text。"因而，你从现在开始就可以使用这些新值，而且你也可以放心，那些不理解它们的浏览器会把新值看成type="text"，而这真是一个浏览器实践平稳退化原理的好例子。</p><p>比如说，你现在输入了type="number"。假设你需要一个输入数值的文本框。那么你可以把这个input的type属性设置为number，然后理解它的浏览器就会呈现一个可爱的小控件，像带小箭头图标的微调控件之类的。对吧？而在不理解它的浏览器中，你会看到一个文本框，一个你再熟悉不过的文本框。既然如此，为什么不能说输入type="number"就会得到一个带小箭头图标的微调控件呢？</p><p>当然，你还可以设置最小和最大值属性，它们同样可以平稳退化。这是问题的关键。</p><p>再看input type="search"。你也可以考虑一下这种输入框，因为这种输入框在Safari中会被呈现为一个系统级的搜索控件，右边还有一个点击即可清除搜索关键词的X。而在其他浏览器中，你得到的则是一个文本框，就像你写的是input type="text"一样，也就是你已经非常熟悉的文本框。那为什么还不使用input type="search"呢？它不会有什么副作用，没有，对不对？</p><p>HTML5还为输入元素增加了新的属性，比如placeholder（占位符）。有人不知道这个属性的用处吗，没有吧？没错，就是用于在文本框中预先放一些文本。不对，不是标签（label）----占位符和标签完全不是一回事。占位符就是文本框可以接受的示例内容，一般颜色是灰色的。只要你一点击文本框，它就消失了。如果你把已经输入的内容全部删除，然后单击了文本框外部，它又会出现。</p><p>使用JavaScript编写一些代码当然也可以实现这个功能，但HTML5只用一个placeholder属性就帮我们解决了问题。</p><p>当然，对于不支持这个属性的浏览器，你还是可以使用JavaScript来实现占位符功能。通过JavaScript来测试浏览器支不支持该属性也非常简单。如果支持，后退一步，把路让开，乐享其成即可。如果不支持，可以再让你的JavaScript来模拟这个功能。</p><p>现在，我不得不提到另一个话题了：HTML5对Flash。也许你早听说过了，或者在哪里看到了这方面的讨论。说实话，我一点也不明白。我搞不懂人们怎么会仅仅凭自己的推测来展开争论。</p><p>首先，他们所说的HTML5对Flash，并不是指的HTML5，也不是指的Flash。而是指HTML5的一个子集和Flash的一个子集。具体来说，他们指的是视频。因此，不管你在哪里听到别人说"HTML5对Flash"，那很可能说的只是HTML5视频对Flash视频。</p><p>其次，一说HTML5对Flash，就好像你必须得作出选择一样：你站在哪一边？实际上不是这样的。HTML5规范的设计能够让你做到鱼和熊掌兼得。</p><p>好，下面就来看看这个新的video元素；真是非常贴心的一个元素，而且设计又简单，又实用。一个开始的video元素，加一个结束的video元素，中间可以放后备内容。注意，是后备内容，不是保证可访问性的内容，是后备内容。下面就是针对不支持video元素的浏览器写的代码：</p>
<pre class="prettyprint"><code>&lt;video src="movie.mp4"&gt;
&lt;!-- 后备内容 --&gt;
&lt;/video&gt;</code></pre>
<p>那么，在后备内容里面放些什么东西呢？好，你可以放Flash影片。这样，HTML5的视频与Flash的视频就可以协同起来了。你不用作出选择。</p>
<pre class="prettyprint"><code>&lt;video src="movie.mp4"&gt;
&lt;object data="movie.swf"&gt;
&lt;!-- 后备内容 --&gt;
&lt;/object&gt;
&lt;/video&gt;</code></pre>
<p>当然，你的代码实际上并没有这么简单。因为这里我使用了H264，部分浏览器支持这种视频格式。但有的浏览器不支持。</p>
<p>对不起，请不要跟我谈视频格式，我一听就心烦。不是因为技术。技术倒无所谓，关键是会牵扯到一大堆专利还有律师、知识产权等等，这些都是Web的天敌，对我建网站一点好处都没有。</p>
<p>可你实际上要做的，仅仅就是把后备内容放在那而已，后备内容可以包含多种视频格式。如果愿意的话，可以使用source元素而非src属性来指定不同的视频格式。</p>
<pre class="prettyprint"><code>&lt;video&gt;
&lt;source src="movie.mp4"&gt;
&lt;source src="movie.ogv"&gt;
&lt;object data="movie.swf"&gt;
&lt;a href="movie.mp4"&gt;download&lt;/a&gt;
&lt;/object&gt;
&lt;/video&gt;</code></pre>
<p>上面的代码中包含了4个不同的层次。</p>
<ol>
<li>如果浏览器支持video元素，也支持H264，没什么好说的，用第一个视频。</li>
<li>如果浏览器支持video元素，支持Ogg，那么用第二个视频。</li>
<li>如果浏览器不支持video元素，那么就要试试Flash影片了。</li>
<li>如果浏览器不支持video元素，也不支持Flash，我还给出了下载链接。</li>
</ol>
<p>不错，一开始就能考虑这么周到很难得啊。有了这几个层次，已经够完善了。</p>
<p>总之，我是建议你各种技术要兼顾，无论是HTML5，还是Flash，一个也不能少。如果只使用video元素提供视频，难免搬起石头砸自己的脚，我个人认为。而如果只提供Flash影片，情况也好不到哪去，性质是一样的。所以还是应该两者兼顾。</p><p>为什么要兼顾这两种技术呢？假设你需要面向某些不支持Flash的手持设备----只是举个例子----提供视频，你当然希望手持设备的用户能够看到视频了，不是吗？</p><p>至于为什么要使用不同的格式，为什么Flash视频和音频如此成功，我想可以归结为另一个设计原理，即梅特卡夫定律(Metcalfe's Law)：</p>
<blockquote>网络价值同网络用户数量的平方成正比。 </blockquote>
<p>梅特卡夫的这个定律虽然是针对电话网提出来的，但在很多领域里也是适用的。使用网络的用户越多，网络的价值也就越大。人人都上Facebook，还不是因为人人都上Facebook嘛。虽然Facebook真正的价值不在于此，但只有人人都上才会让它的变得如此有价值。</p>
<p>梅特卡夫定律也适用于传真机。如果只有一个人购买了传真机，当然没有什么用处。但如果其他人也陆续购买了传真机，那么他的投资会就得到回报。</p>
<p>当然，面对竞争性的视频格式和不同的编码方式，你感觉不到梅特卡夫定律的作用，我也很讨厌以不同的方式来编码视频，但只向浏览器发送用一种方式编码的视频是行不通的。而这也正是Flash在视频/音频领域如此成功的原因。你只要把Flash影片发送给浏览器就好了，然后安装了插件的浏览器都能正常播放。本质上讲，Flash利用了梅特卡夫定律。</p>
<p>最终用户优先</p>
<p>今天我要讲的最后一个设计原理，也是我个人最推崇的一个，但没有要展示的代码示例。这个原理更有哲学的味道，即最终用户优先。</p>
<p>这个设计原理本质上是一种解决冲突的机制。换句话说，当你面临一个要解决的问题时，如果W3C给出了一种解决方案，而WHATWG给出了另一种解决方案，一个人这么想，另一个人那么想......这时候，有人站出来说："对这个问题我们这样来解决。"</p>
<blockquote>一旦遇到冲突，最终用户优先，其次是作者，其次是实现者，其次标准制定者，最后才是理论上的完满。</blockquote>
<p>理论上的完满，大致是指尽可能创建出最完美的格式。标准制定者，指的是工作组、W3C，等等。实现者，指的是浏览器厂商。作者，就是我们这些开发人员，对吧？看看我们在这个链条里面的位置多靠上啊！我们的地位仅次于最终用户----事情本来就该这个样子。用户是第一位的。而我们的声音在标准制定过程中也同样非常非常重要。</p>
<p>Hixie（即Ian Hickson， Acid2、Acid3的作者及维护者，HTML5、CSS 2.1规范的制定者）经常说，在有人建议了某个特性，而HTML5工作组为此争论不下时，如果有浏览器厂商说"我们不会支持这个特性，不会在我们的浏览器中实现这个特性"，那么这个特性就不会写进规范。因为即使是把特性写进规范，如果没有厂商实现，规范不过是一纸空文，对不对？实现者可以拒绝实现规范。</p>
<p>而根据最终用户优先的原理，我们在链条中的位置高于实现者，假如我们发现了规范中的某些地方有问题，我们想"这样规定我们不能同意，我们不支持实现这个特性"，那么就等于把相应的特性给否定了，规范里就得删除，因为我们的声音具有更高的权重。我觉得这样挺好！本质上是我们拥有了更大的发言权，对吧？我认为开发人员就应该拥有更多的发言权。</p>
<p>我觉得这应该是最重要的一条设计原理了，因为它承认了你的权利，无论是设计一种格式，还是设计软件，这条原理保证了你的发言权。而这条原理也正道出了事物运行的本质。难道还不够明显吗？用户的权利大于作者，作者的权利大于实现者，实现者的权利大于标准制定者。然而，反观其他规范，比如XHTML2，你就会发现完全相反的做法。把追求理论的完满放在第一位，而把用户----需要忍受严格错误处理带来的各种麻烦的用户----放在了链条的最底端。我并没有说这种做法就是错误的，但我认为这是一种完全不同的思维方式。</p>
<p>因此，我认为无论你做什么，不管是构建像HTML5这样的格式，还是构建一个网站，亦或一个内容管理系统，明确你的设计原理都至关重要。</p>
<blockquote>软件，就像所有技术一样，具有天然的政治性。代码必然会反映作者的选择、偏见和期望。</blockquote>
<p>下面我们讲一个例子。Drupal社区曾联系马克·博尔顿（Mark Boulton）和丽莎·雷贺特（Leisa Reichilt）设计Drupal的界面。他们计划遵循一些设计原理。为此，他们并没有纸上谈兵，而是经过了一段时间的思考和酝酿，提出指导将来工作的4个设计原理：</p>
<blockquote>简化最常见的任务，让不常见的任务不至于太麻烦。<br />
只为80%设计。<br />
给内容创建者最大的权利。<br />
默认设置智能化。</blockquote>
<p>实际上，我在跟马克谈到这个问题时，马克说主要还是那两个，即"只为80%设计。给内容创建者最大的权利。"这就很不错了，至少它表明了立场，"我们认为内容创建者比这个项目中的任何人都重要。"在制定设计原理时，很多人花了很多时间都抓不住重点，因为他们想取悦所有人。关键在于我们不是要取悦所有人，而是要明确哪些人最重要。他们认为内容创建者是最重要的。</p>
<p>另一条设计原理，只为80%设计，其实是一条常见的设计原理，也是一种通用模式，即帕累托原理（Pareto principle）。</p><p>
</p><p>帕累托是意大利经济学家，他提出这个比例，80/20，说的是世界上20%的人口拥有80%的财富。这个比例又暗合了自然界各个领域的幂律分布现象。总之，无论你是编写软件，还是制造什么东西，都是一样的，即20%的努力可以触及80%的用例。最后20%的用例则需要付出80%甚至更多的努力。因此，有时候据此确定只为80%设计是很合理的，因为我们知道为此只要付出20%的努力即可。</p>
<p>再比如，微格式同样也利用了帕累托原理，只处理常见用例，而没有考虑少数情形。他们知道自己不会让所有人都满意；而他们的目标也不是让所有人都满意。他们遵循的设计原理很多，也都非常有价值，但最吸引人的莫过于下面这条了：</p>
<blockquote>首先为人类设计，其次为机器设计。</blockquote>
<p>同样，你我都会觉得这是一条再明显不过的道理，但现实中仍然有不少例子违反了这条原理：容易让机器理解（解析）比容易让用户理解更重要。</p>
<p>所以，我认为平常多看一看别人推崇的设计原理，有助于做好自己手头的工作。你可以把自己认为有道理的设计原理贴在墙上。当然，你可以维护一个URL，把自己认为有价值的设计原理分享出来，就像Mozilla基金会那样，对不对，以下是Mozilla的设计原理：</p>
<blockquote>Internet作为一种公共资源，其运作效率取决于互通性（协议、数据格式、内容）、变革及全球范围内的协作。<br />
基于透明社区的流程有助于增进协作、义务和信任。 </blockquote>
<p>我觉得像这样的设计原理都非常好。而有了设计原理，我认为才更有希望设计出真正有价值的产品。设计原理是Web发展背后的驱动力，也是通过HTML5反映出来的某种思维方式。我想，下面这条原理你绝对不会陌生：</p>
<blockquote>大多数人的意见和运行的代码。<a name="html5_1" href="#html5_1_note">[1]</a></blockquote>
<p>对不对？这句话经常在我脑际回响，它囊括了Web的真谛，触及了HTML5的灵魂。</p>
<p>也许我该把这条原理打印出来贴到办公室的墙上，让它时刻提醒我，这就是Web的设计原理：大多数人的意见和运行的代码。</p>
<p>我想，今天的演讲就到这里了。如果大家有什么想法可以在twitter上通过@adactio找到我。有时候我也会在自己的博客，adactio.com上写写有关这个主题的文章。最后，可能还要顺便给我自己做个广告，我刚出了一本书，希望大家关注。</p>
<p>非常感谢大家。</p>
<p>[全文完]</p><p><a href="http://www.45eggs.com/upload/2011/04/61baa48dx93226ab35934%26690.jpg"><img alt="61baa48dx93226ab35934&amp;690.jpg" src="http://www.45eggs.com/assets_c/2011/04/61baa48dx93226ab35934%26690-thumb-600x322-387.jpg" width="600" height="322" class="mt-image-none" style="" /></a></p>
<p>----------------------</p>
<p><a href="#html5_1" name="html5_1_note">[1]</a> 1992年，大卫·克拉克（David Clark）教授在IETF会议上总结了这样一句话"We reject: kings, presidents, and voting. We believe in: rough consensus and running code"（我们拒绝国王、总统和投票，我们相信大多数人的意见和运行的代码）。这就是广为流传的"互联网哲学"（Internet Philosophy）。----译者注</p>
<p>原文：<a href="http://adactio.com/articles/1704/">The Design of HTML5</a>&nbsp;<br />译者：<a href="http://www.cn-cuckoo.com/">李松峰</a><br />译文发表于：<a href="http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html">为之漫笔</a></p>]]>
    </content>
</entry>

</feed>

