<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>随网之舞web2.0 &amp; so on</title>
	<atom:link href="http://dancewithnet.com/category/design/web20-and-so-on/feed/" rel="self" type="application/rss+xml" />
	<link>http://dancewithnet.com</link>
	<description>WEB Design{HTML:CSS:Javascript:DOM:AJAX:PHP:Usability}/Viewpoint/Photo/Food/Mood</description>
	<lastBuildDate>Mon, 18 Jul 2011 02:45:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>《高性能网站建设进阶指南》译者序和样章</title>
		<link>http://dancewithnet.com/2010/04/21/even-faster-websites/</link>
		<comments>http://dancewithnet.com/2010/04/21/even-faster-websites/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:30:25 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[Steve Souders]]></category>
		<category><![CDATA[WEB]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[性能]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1508</guid>
		<description><![CDATA[经过大半年的努力和等待，口碑网前端团队5位成员共同翻译的《高性能网站建设进阶指南（Even Faster Web Sites）：Web开发者性能优化最佳实践》终于面市了。翻译的过程本身就是学习的过程，又... ]]></description>
			<content:encoded><![CDATA[<p>经过大半年的努力和等待，<a href="http://ued.koubei.com">口碑网前端团队</a>5位成员共同翻译的<a href="http://book.douban.com/subject/4719162/">《高性能网站建设进阶指南（Even Faster Web Sites）：Web开发者性能优化最佳实践》</a>终于面市了。翻译的过程本身就是学习的过程，又经过了在口碑网的实践，我们深刻地感受到本书内容不仅和每个Web开发者的日常工作结合得非常紧密，而且对于每个开发者都有着重大的指导意义。在此，我们诚恳地向所有的Web开发者推荐本书，欢迎大家就本书内容进行交流、批评和指正。</p>
<p>本书的主要作者Steve Souders是<a href="http://book.douban.com/subject/3132277/">《高性能网站建设指南（high Performance Web Sites）：前端工程师技能精髓》</a>的作者，Web性能优化领域的权威，前Yahoo!首席性能工程师，现在Google负责Web性能和开源组织。他是Firebug的性能分析扩展<a href="http://developer.yahoo.com/yslow/">YSlow</a>的创建者，也是O&#8217;Reilly Web性能与运作会议Velocity的联合主席。通过他的个人网站<a href="http://stevesouders.com/">http://stevesouders.com/</a>能了解全球最新的Web性能动态和技术发展。</p>
<p><span id="more-1508"></span></p>
<h3>译者序</h3>
<p>“信息网络的扩展正在为我们的星球建立一个新的神经系统”，而Web正是我们与这个系统对接的最重要平台。现在，信息与用户量在Web平台上呈爆炸式增长，用户与Web界面的交互越来越复杂，会话时间也越来越长，速度已经成为Web产品使用体验好坏和市场成败的最重要指标之一。在Google，网页呈现速度慢500毫秒将丢失20%的流量；在Yahoo!，慢400毫秒将丢失5%~9%的流量；在Amazon，慢100毫秒将丢失1%的交易量……反之，网站速度越快，越有利于用户汇聚、流量增长及交易量的上升。所以作为Web开发者，我们不会满足现状，要让网页变得更快更好。</p>
<p>本书作者Steve Souders在他上一部震惊业界的大作《高性能网站建设指南》中告诉我们，Web的80%~90%的性能由前端决定，并为提升Web性能设置了14条规则。本书中，Souders与8位Web开发界顶级大牛（<a href="http://almaer.com/blog">Dion Almaer</a>、<a href="http://dancewithnet.com/2009/03/29/douglas-crockford/">Douglas Crockford</a>、Ben Galbraith、Tony Gentilcore、Dylan Schiemann、<a href="http://phpied.com">Stoyan Stefanov</a>、<a href="http://stubbornella.org">Nicole Sullivan</a> 和 <a href="http://www.nczonline.net">Nicholas C. Zakas</a>）通力合作，一起向我们传授让网站速度更快的思想和原则，以及相应的技术和工具。它是上一部作品的进阶之作，如果说上一部作品使Web开发者有机会实现高性能的网站以满足当前用户的需要，那么本书将帮助我们立足现在更着眼于未来，以实现超出用户期望的速度体验。</p>
<p>Web的高速发展让开发者应接不暇，开发者应该把智慧、时间和精力放在用户最需要的地方，因此在做性能优化时不能盲目行动、捉小放大，需要事前有效评估找到重点，事后建立监控和保证机制，把有规律的、重复的、精确的工作交给机器去做。9位大牛把众多的思想、原则、方法和自动化工具融汇到这本书中，让Web开发者有机会站在巨人的肩上，借助于全球业界的最新成果，用自己的智慧、行动和坚持开发出令人赞叹的Web产品来。</p>
<p>如果你稍加留心就会发现，这两本书副标题的变化很有趣，第一本书的副标题是“前端工程师技能精髓”，而本书的是“Web开发者性能优化最佳实践”。Web性能优化不只是前端工程师的工作，而是需要所有Web开发者协作完成。在实际工作中，如果没有人关注Web性能，那么，不管我们作为Web开发者的哪种角色都应该挺身而出勇于担当，不仅要担当建设高速网站的责任，还要担当Web性能优化的布道义务，团结一切可以团结的力量。这是我们所有Web开发者的使命。在口碑网我们已经开始这样做了，前端工程师与对此有兴趣的后端工程师和产品经理一起组建了一个虚拟的Web性能优化团队，在完成工作之余，一起学习、研究、分享、布道和推动性能优化项目。虽然刚刚开始，但是已经有了一些令人欣喜的成果，这就是团结的力量。</p>
<p>本书由口碑网前端团队的鄢学鹍（三七）、郑旭东（正旭）、刘志涛（钨龙）、崔明达（灵佑）和姜凡（展炎）协作译成。翻译的过程也是自我学习、应用实践和总结提升的过程，我们深感本书的博大精深，同时也感到自己知识面的浅薄狭窄。我们把学习和实践本书思想及方法过程中收获的心得和相关资料作为译注补充在译文中，希望会对大家有所帮助。我们深信学习本书正是学习大牛思想、提升专业技能的最好途径之一，把它的精华最精确地传递给每位读者是我们现在的想法和最大动力。</p>
<p>感谢博文视点引进如此高品质的图书，这让中国的Web开发者可以从中受益，进而为更多用户提供更快速的Web使用体验。除了封面上列出的译者外，还有很多人为翻译这本书倾注了智慧和汗水。编辑徐定翔老师，包容了我们交稿的一次次延期，正是由于他的信任、帮助、支持和耐心指导才让我们能有这样一次边学习、边成长、边共享的宝贵经历。编辑白爱萍老师负责译稿的统稿编加，她的专业、仔细和辛勤工作保证了我们阅读本书时的良好体验。可爱的同事林枝萍（般若）、高嘉峻（伯灵）、全鑫（泉心）、闻明（阿苏）、沙峰（善朋）、曾焕数（合沙）、王维锋（元天）、严斌锋（邦彦）、何莹莹（冰浠）、周炼（灵落）等，给了我们热情的建议和细心的校对，有效地提升了本书的品质。要特别感谢淘宝网前端团队的赵泽欣（小马）、王保平（玉伯）和郑叶飞（圆心）3位同学，在百忙之中帮我们校对重要章节，解决疑难问题。如果没有家人和同伴的支持，是很难做好翻译的，在此向所有关心和支持我们的朋友表示衷心的感谢！</p>
<p style="text-align:right;">口碑网前端团队<br />
三七 正旭 钨龙 灵佑 展炎 <br />
2010.02.25 于杭州</p>
<h3>样章等相关信息</h3>
<ol>
<li>样章：
<ol>
<li><a href="http://www.slideshare.net/kavenyan/ajax-3803778">第1章，理解Ajax性能，Douglas Crockford</a></li>
<li><a href="http://www.slideshare.net/kavenyan/03-3803769">第3章，拆分初始化负载，Steve Souders</a></li>
</ol>
</li>
<li>任何交流、建议、批评和指正请<a href="mailto:kavenyan@gmail.com">写信给kavenyan@gmail.com</a></li>
<li><a href="http://www.china-pub.com/196626">购买《高性能网站建设进阶指南》</a></li>
<li><a href="http://book.douban.com/subject/discussion/23168459/">《高性能网站建设进阶指南》目录表</li>
<li><a href="http://book.douban.com/subject/4719162/">豆瓣上的《高性能网站建设进阶指南》</a></li>
<li>封面：<br /><a href="http://book.douban.com/subject/4719162/"><img src="http://dancewithnet.com/wp-content/uploads/2010/04/even-faster-web-sites.png" alt="" title="《高性能网站建设进阶指南：Web开发者性能优化最佳实践（Even Faster WebSties）》" width="640" height="856" class="alignnone size-full wp-image-1509" /></a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2010/04/21/even-faster-websites/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>如何做好一份前端工程师的简历？</title>
		<link>http://dancewithnet.com/2009/02/17/how-to-make-a-resume-of-f2e/</link>
		<comments>http://dancewithnet.com/2009/02/17/how-to-make-a-resume-of-f2e/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 16:25:31 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[杂事杂想杂感]]></category>
		<category><![CDATA[F2E]]></category>
		<category><![CDATA[招聘]]></category>
		<category><![CDATA[简历]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2009/02/17/how-to-make-a-resume-of-f2e/</guid>
		<description><![CDATA[春节前在蓝色理想上发了个“雅虎口碑招聘前端工程师 ”的启事，节后收到很多简历，加之HR通过专业招聘网站得到的简历和朋友同事推荐的简历，数量上是相当的多，把这些简历一一看完真... ]]></description>
			<content:encoded><![CDATA[<p>春节前在蓝色理想上发了个<a href="http://job.blueidea.com/index.php?action=display&#038;option=jobs&#038;extent=view&#038;info=911">“雅虎口碑招聘前端工程师 ”的启事</a>，节后收到很多简历，加之HR通过专业招聘网站得到的简历和朋友同事推荐的简历，数量上是相当的多，把这些简历一一看完真是一个漫长而幸苦的体力活，何况我还要仔细认真的去提取和核查有用信息评估其能力，尽量不错过任何一个埋藏在大量简历中合适的人，这绝大部分时间并不是一个相当愉悦的过程。所以，我感觉有必要来谈谈：如何做好一份前端工程师的简历。</p>
<h3>一、你是前端工程师</h3>
<p>虽然简历都会有一些常规信息，但职业决定了这份简历核心内容和求职成败。所以，这份简历应该尽可能体现你自己是一个合格的前端工程师。专业的前端工程师是什么可以看看去年Nate Koechley的演讲<a href="http://nate.koechley.com/blog/2008/06/11/slides-professional-frontend-engineering/">《Professional Frontend Engineering》</a>，前端工程师应该关注的内容可以从<a href="http://www.flickr.com/photos/kejun/3114605967/">克军总结的“前端工程师应该关注什么”的思维导图</a>中窥出一二，学习内容聚合可以看看<a href="http://www.chencheng.org/blog/2008/10/25/f2e-manual/">陈成总结的《前端开发大众手册(包括工具、网址、经验等)》</a>。</p>
<p>毫无疑问，前端工程师应该知道如何用简历体现其专业技能和职业精神，这是每个应聘者应该考虑的问题。 <span id="more-1425"></span></p>
<h3>二、内容为王</h3>
<ol>
<li><strong>个人信息</strong>
<ol>
<li>姓名 <sub>（必需）</sub> </li>
<li>性别 <sub>（必需）</sub> </li>
<li>年龄 <sub>（必需）</sub> </li>
<li>联系电话 <sub>（必需）</sub> </li>
<li>学历及学位 <sub>（必需）</sub> </li>
<li>薪资期望 </li>
<li>个人照片 </li>
<li>邮箱 </li>
<li>Blog </li>
<li>外语能力 </li>
</ol>
</li>
<li><strong>职业技能</strong>
<ol>
<li>HTML、CSS、JavaScript/ActionScript等 </li>
<li>Web标准、可用性、可访问性 </li>
<li>一门非前端脚本的语言(Java、PHP、Python、C#等) </li>
<li>任何有利于前端开发的技能和兴趣 </li>
</ol>
</li>
<li><strong>职业和教育经历</strong>
<ol>
<li>起始时间、单位名、职位（学位）和收获 </li>
<li>简而精 </li>
<li>按照时间倒序排列 </li>
</ol>
</li>
<li><strong>代表作品</strong>
<ol>
<li>能体现自己现在前端技能或者重要经历的作品 </li>
<li>简而精，且可以简要附上自己在这个作品中的收获 </li>
<li>和别人合作的作品要注明自己具体完成的内容 </li>
<li>在线链接要测试以保证可用，如果有其他人的变更应注明，较大变更就无需提交了 </li>
<li>提供附件要注明与之对应的文件名 </li>
<li>按完成时间倒序排列 </li>
</ol>
</li>
</ol>
<p>依据实际情况，代表作品也完全可以直接融入到职业技能和经历中体现。当然内容不仅仅是这些，可以任意增加能体现前端工程师职业素质的信息。</p>
<h3>三、Web是平台</h3>
<p>毫无疑问，Web才是真正的平台，当这个平台的后端逐步被云所统治时（Amazon的很多服务和Google App Engine都初见端倪），那么云端的用户代理（比如浏览器）就是前端工程师的战场。前端工程师是可以长期从事且有前途的职业。</p>
<p>简历作为前端工程师迈向新征途而提交的第一份作品，应该毫不迟疑的用它来体现其专业技能和职业精神，所以Web页面是前端工程师简历的最好载体。它能体现前端工程师诸多专业素质：</p>
<ol>
<li>知道为什么选择的DTD是下面中的一个而不是其他，这是对<a href="http://www.w3.org/html/">HTML标准</a>的理解和思考 。
<ol>
<li><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;</code> </li>
<li><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</code> </li>
<li><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;</code> </li>
<li><code>&lt;!DOCTYPE HTML&gt;</code> </li>
</ol>
</li>
<li>针对内容选择合适的HTML标签，合理的id和class命名，尝试使用<a href="http://microformats.org/">微格式</a>，这是对语义化的理解和思考。 </li>
<li>至少兼容<a href="http://developer.yahoo.com/yui/articles/gbs/">YUI中列出的A-grade浏览器</a>，这是对跨浏览器和CSS Hacks的理解和思考 。 </li>
<li>虽然Web性能在大访问量下才比较容易凸显，但把尝试把<a href="http://developer.yahoo.com/performance/rules.html">YAHOO性能团队的34条最佳实践</a>应用上，一定会小中见大且受益终生的 。 </li>
<li>JavaScript的应用
<ol>
<li>简历的信息结构一般很简单，但是这并不意味着无法使用JavaScript来增强它的交互。找出其JavaScript技能和简历相互结合的地方。 </li>
<li>可以尝试使用某种框架（<a href="http://developer.yahoo.com/yui">YUI</a>、<a href="http://www.jquery.com/">jQuery</a>、<a href="http://www.prototypejs.org/">Prototype</a>、<a href="http://mootools.net/">Mootools</a>等），很明显框架能提高我们的开发速度，掌握至少一种优秀的框架能增强我们的价值。 </li>
<li>可以利用JavaScript做出几个彩蛋在简历里面么？ </li>
<li>实现结构、样式和行为的分离。 </li>
<li>理解和体现<a href="http://www.webstandards.org/action/dstf/">DOM Scripting</a>、<a href="http://en.wikipedia.org/wiki/Graceful_degradation">预留退路（Graceful Degradation）</a>、<a href="http://en.wikipedia.org/wiki/Progressive_Enhancement">渐进增强（Progressive Enhancement ）</a>、<a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">无侵入的JavaScript（Unobtrusive Javascript）</a>等思想。 <a href="http://ued.taobao.com/blog/2008/10/09/understanding-progressiveen-hancement-chs-translation/">空帷翻译的《理解“渐进增强(Progressive Enhancement)”》</a>是篇这方面的好文章。 </li>
</ol>
</li>
<li><a href="http://www.w3.org/WAI/">可访问性</a>，在这上面每一步的深入研究和应用都值得赞赏。 </li>
<li><a href="http://dev.w3.org/html5/spec/Overview.html">HTML5</a>、<a href="http://www.w3.org/Style/CSS/current-work">CSS3</a>、<a href="http://www.w3.org/Graphics/SVG/">SVG</a>、<a href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas-element">Canvas</a>甚至离线技术、安全技术都可以和我们的简历结合起来。列表<a href="http://a.deveria.com/caniuse/#agents=All&amp;cats=All&amp;eras=All&amp;statuses=All">When can I use&#8230;</a>提供了一些新技术在主流浏览器的支持情况。 </li>
<li>打印样式，很明显前端简历不仅仅是其主管看，还有HR和大老板看，所以准备打印样式是很重要的，这不仅仅是技能问题，更是一种前端开发的素质。你需要知道，打印样式应该是黑字白底，且尽量少的装饰图片，因为现在的绝大部分办公打印机还是黑白的，且黑色更费墨，所以当你的简历是黑色背景时更应该注意这点。 </li>
<li>简单设计，千万不要把你的简历搞一团糟，设计虽然不是前端工程师最重要的技能，但是良好的视觉设计更能体现前端工程师的价值，所以审美其实也是前端工程师的基础素质。如果对视觉设计感到困惑，你可以从看<a href="http://dancewithnet.com/2009/01/20/the-non-designer-design-book/">《推荐给大家看的设计书》</a>开始。 </li>
</ol>
<h3>四、细节决定体验</h3>
<ol>
<li>标识性的文件名，比如“秦歌的简历”、“秦歌的作品”，而不是“个人简历”、“我的作品”。 </li>
<li>发完信后记得检查一下发件箱，确保没有忘记发附件。 </li>
<li>简历和众多作品整体打一个包。不要一个大包里面无数个小包。且整个包应该整理过，去掉垃圾，不应该太大。 </li>
<li>不要重复发邮件，特别是拒绝以后，还发一个同样的邮件，除非一段时间后你有较大进步。 </li>
<li>检查链接有效性，无效链接很伤感情的，可以使用Firefox的插件<a href="https://addons.mozilla.org/en-US/firefox/addon/532">LinkChecker</a>或<a href="https://addons.mozilla.org/en-US/firefox/addon/10201">Pinger</a>。 </li>
</ol>
<p>实际上，前端工程师的工作成果是直接面向千万用户的，他直接决定了最终的用户体验，所以每个细节都至关重要，就像JavaScript编程一样，只要我们掌握<a href="http://dancewithnet.com/2008/01/26/the-elements-of-javascript-style-part-one/">良好的风格要素</a>，我们就能避免很多错误，实际上这个思想贯穿整个前端开发的始终，包括制作简历。</p>
<p>我很喜欢有个人blog的应聘者，因为通过其blog不仅仅可以看出他的前端技能、工作积累、职业素质和分享精神，同时他通过维护blog可以贯穿一个简单开发的始终，从内容、交互、视觉、前端一直到后端维护，而这些角色都是前端在开发过程中的上下游，需要经常协作，这种经历能使前端更高效的沟通和更务实的换位思考。同样，当我推荐前端的简历应该是以Web页面为载体时，也是基于这个想法，并适当的给出一些相关知识以备有兴趣的朋友朝这个方向走下去。虽然我的建议偏向于“HTML+CSS+JavaScript”方向的前端工程师，但实战中肯定有更多能够在简历中体现前端的技能和创意，这本身就是抛砖引玉，这仅仅是一个开始。</p>
<p>简历很重要，但人品、职业精神和专业的前端技能更重要，最重要的是这两者是相辅相成的。虽然很羡慕兄弟团队<a href="http://ued.taobao.com/job/season2/">淘宝UED</a>、<a href="http://ued.alipay.com/job/">支付宝UED</a>和<a href="http://job2009.aliued.com/">阿里巴巴B2B国际站UED</a>能有创意、时间和精力搞出那么精致的招聘站点，但我更希望我未来的同事用技能、创意、时间和精力整出一个巨牛的前端工程师简历来震住我（kaven.yan@yahoo.com）吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2009/02/17/how-to-make-a-resume-of-f2e/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>推荐给大家看的设计书</title>
		<link>http://dancewithnet.com/2009/01/20/the-non-designer-design-book/</link>
		<comments>http://dancewithnet.com/2009/01/20/the-non-designer-design-book/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 17:31:00 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[书评]]></category>
		<category><![CDATA[写给大家看的设计书]]></category>
		<category><![CDATA[设计]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2009/01/20/%e6%8e%a8%e8%8d%90%e7%bb%99%e5%a4%a7%e5%ae%b6%e7%9c%8b%e7%9a%84%e8%ae%be%e8%ae%a1%e4%b9%a6/</guid>
		<description><![CDATA[毫无疑问，这个世界设计无处不在，优美的设计会得到会心的微笑和由衷的赞赏。然而，想从事设计或在设计边缘的人们未必有机会学习专业的设计。实际上，设计不仅仅是专业设计师的事情... ]]></description>
			<content:encoded><![CDATA[<p>毫无疑问，这个世界设计无处不在，优美的设计会得到会心的微笑和由衷的赞赏。然而，想从事设计或在设计边缘的人们未必有机会学习专业的设计。实际上，设计不仅仅是专业设计师的事情，比如，我是从事前端的开发的，虽然绝大部分时间是和HTML、CSS、JavaScript等这些代码打交道，但我需要维护<a href="http://dancewithnet.com/">自己的blog</a>，需要做自己的幻灯片，更重要的是需要能够理解且欣赏视觉设计师的作品并实现它。如果我懂得设计，我肯定可以做的更好更专业，并能够提出建设性的意见。我想，类似的场景不仅适于我，也一定会适于你。所以，当我看完这本<a href="http://www.turingbook.com/Books/ShowBook-337.aspx">《写给大家看的设计书》（The Non-Designer‘s Design Book）</a>时，我认为它是一本可以推荐给大家看的设计书。</p>
<p> <span id="more-1422"></span>
<p>这本书就是为了表明“优秀的设计就这么容易”，它仅有200页，相当容易读完。为了表明学习和实现起来相当容易，只需要你完成三步就可以办到：</p>
<ol>
<li><strong>学习4大基本原则</strong>       <br />它们比你想象的要简单 </li>
<li><strong>认识到自己没有运用这些原则</strong>       <br />形诸文字&#8211;陈述问题 </li>
<li><strong>应用基本原则</strong>       <br />结果将使你大吃一惊 </li>
</ol>
<p>很明显，4大基本原则是核心，作者用了近80页来阐述这4个基本原则，这也是这本书的核心部分。正如作者所说：“一旦能够说出什么东西的名字，就会很容易注意到它。你就会掌握它，拥有它，使它在你的掌控之中。”所以，我就毫不犹豫的列下这4个基本原则，因为它们“怎么强调都不过分”：</p>
<ol>
<li><strong>对比(Contrast)</strong>
<ol>
<li>千万不要畏畏缩缩。 </li>
<li>如果两个项不完全相同，就应当使之不同，而且应当是截然不同。 </li>
<li>在页面上增加对比能吸引人的眼球。我们的眼睛喜欢看到对比的事物。 </li>
<li>对比的根本目的有两方面，这两个方面相辅相成，无法分开。一个目的是增强页面的效果，另一个目的是有助于信息的组织。 </li>
</ol>
</li>
<li><strong>重复(Repetition)</strong>
<ol>
<li>设计的某些方面需要在整个作品中重复。 </li>
<li>重复不仅对只有一页的作品很有用，对多页的文档设计更显重要。 </li>
<li>重复的目的就是统一，并增强视觉效果。<strong>不要低估页面视觉效果的威力，如果一个作品看起来很有趣，它往往也更易于阅读。</strong> </li>
</ol>
<p> </strong></li>
<li><strong>对齐(Alignment)</strong>
<ol>
<li>任何元素都不能在页面上随意安放。每一项都应当与页面上的某个内容存在着某种视觉联系。 </li>
<li>勇敢一些，不要畏缩，绝对不要居中。找一条明确的对齐线，并坚持以它为基准。 </li>
<li>对齐的根本目的是使页面统一而有条理。 </li>
</ol>
</li>
<li><strong>亲密性(Proximity)</strong>
<ol>
<li>物理位置的接近就意味着存在关联，实际生活也是如此。 </li>
<li>如果多个项目相互之间存在很近的亲密性，它们将成为一个视觉单元，而不是多个孤立元素。 </li>
<li>亲密性的根本目的是实现组织性。 </li>
</ol>
</li>
</ol>
<p>这4大基本原则是组合拳，完全能够打出专业的设计作品。或许你会感觉到这4大基本原则太死板，束缚了你，但如作者所言“在打破规则之前必须清楚规则是什么”。这就像现在所有人都挂在嘴上的创新一样，如果连参照物都没有搞清楚，何来创新呢？当你“指出问题，你就能找出解决方案”。所以“只要你有意为之，有时完全可以任意地打破常规”。</p>
<p>后半部分是颜色、字体和综合应用技巧，或许因为文化的差异和专业性的问题，让它们看起来有点像鸡肋，其实如果你仔细去了解，你会发现应用的原理是相通的。</p>
<p>这是一本很务实的书，有大量的案例说明、练习、测试和小节，里面介绍的内容不仅仅适用于传统的印刷设计，同样也适于Web设计，只不过侧重点可能有所不同，正如作者强调“ 在一个好的Web设计中，最重要的两个因素就是重复和清晰”。“不要忘记，我们的最终目的是为了更好的表达信息”，“如果一个作品看起来很有趣，它往往也更易于阅读”，这应该就是我们学习设计的终极目标吧。</p>
<p>ps，这本书是由人民邮电出版社图灵教育出版的，按照他们的惯例翻译的书封面会被重新设计，我不知道为什么这么做，但我看到的结果是重新设计的封面基本上都很丑，还好<a href="http://www.china-pub.com/computers/common/Catalog.asp?type=9&amp;IDD=129873&amp;shuming=%u5199%u7ED9%u5927%u5BB6%u770B%u7684%u8BBE%u8BA1%u4E66%28%u7B2C3%u7248%29%28%u5168%u5F69%u5370%u5237%29">这本书的封面</a>有点例外，这或许也体现了设计的意义。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2009/01/20/the-non-designer-design-book/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Vim、Vimperator和一个小bug</title>
		<link>http://dancewithnet.com/2008/07/29/vim-vimperator-bug/</link>
		<comments>http://dancewithnet.com/2008/07/29/vim-vimperator-bug/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 15:52:54 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[Vimperator]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1348</guid>
		<description><![CDATA[Vim是一个巨牛的编辑器，这是我在经历过Frontpage、Dreamweaver、UltraEdit和Notepad++后的选择，它让我远离让人抓狂的低级的Dreamweaver假死和鼠标给手腕带来的伤痛，剩下的是高效、灵活、强大。了解... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vim.org/">Vim</a>是一个巨牛的编辑器，这是我在经历过Frontpage、Dreamweaver、UltraEdit和Notepad++后的选择，它让我远离让人抓狂的低级的Dreamweaver假死和鼠标给手腕带来的伤痛，剩下的是高效、灵活、强大。了解更多请看<a href="http://blog.sina.com.cn/s/blog_46dac66f010005kw.html">《普通人的编辑利器——Vim》</a>。Vim支持多个平台，有兴趣可以<a href="http://www.vim.org/download.php">去VIM的官方站下载</a>。这里有一些相关资源或许能用到：<span id="more-1348"></span></p>
<ol>
<li><a href="http://dancewithnet.com/resource/2008/vi-vim-cheat-sheet.png">Vi、Vim键盘指令图（可以当作桌面）</a></li>
<li><a href="http://www.liuhuadong.com/archives/68">vim、gvim在windows下中文乱码的终极解决方案</a></li>
<li><a href="http://vimcdoc.sourceforge.net/doc/usr_toc.html">VIM用户手册</a></li>
<li><a href="http://www.gracecode.com/Archive/Display/274">Vim 清单式学习 VI 编辑器</a> </li>
<li><a href="http://www.newsmth.net/att.php?p.731.17628.662.pdf">大家来学VIM</a></li>
<li><a href="http://vcd.gro.clinux.org/">Vim 中文文档</a></li>
</ol>
<p><a href="http://vimperator.mozdev.org/">Vimperator</a>是Firefox上的扩展，使Firefox使用起来像Vim。习惯了Vim的命令，这个扩展使用起来还是蛮爽的。不过发现了一个小bug，影响的不是本身的使用，而是对CSS和JavaScript的呈现，在Firefox3+Vimperator1.1下可以看到这个<a href="http://dancewithnet.com/lab/2008/vimperator-bug/" class="link-btn">bug演示</a>。</p>
<p>ps，今天被这个小bug整的好惨，以后一定要记住在有插件的情况下测试网页首先要排除插件是否产生了影响。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/07/29/vim-vimperator-bug/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>语法图</title>
		<link>http://dancewithnet.com/2008/05/28/syntax-diagrams/</link>
		<comments>http://dancewithnet.com/2008/05/28/syntax-diagrams/#comments</comments>
		<pubDate>Wed, 28 May 2008 15:45:13 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[BNF]]></category>
		<category><![CDATA[EBNF]]></category>
		<category><![CDATA[巴科斯范式]]></category>
		<category><![CDATA[语法]]></category>
		<category><![CDATA[语法图]]></category>
		<category><![CDATA[铁路图]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1302</guid>
		<description><![CDATA[语法图（Syntax diagrams ）又叫铁路图（railroad diagrams）是描述形式文法的一种方式。它是巴科斯范式或扩展巴科斯范式的图形化表示。最早使用语法图的书包括Niklaus Wirth写的&#8220;Pascal User Manual&#8... ]]></description>
			<content:encoded><![CDATA[<p>语法图（Syntax diagrams ）又叫铁路图（railroad diagrams）是描述<a href="http://zh.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E6%96%87%E6%B3%95">形式文法</a>的一种方式。它是<a href="http://dancewithnet.com/2008/05/17/bnf-and-ebnf/">巴科斯范式或扩展巴科斯范式</a>的图形化表示。最早使用语法图的书包括Niklaus Wirth写的<a href="http://www.standardpascal.org/The_Programming_Language_Pascal_1973.pdf">&#8220;Pascal User Manual&#8221;</a>（语法图开始于47页）和<a href="http://bitsavers.org/pdf/burroughs/B6500_6700/5000318_B6700_CANDE_Oct72.pdf">the Burroughs CANDE manual</a>。在编译领域，像BNF和它的变体这样的文字式表示法都是首选的。BNF能很好的被编译器作者和编译器理解，但是不能很好的被这些语言的大部分用户理解。铁路图能更容易被大多数人理解。数据交换格式<a href="http://zh.wikipedia.org/wiki/JSON">JSON</a>之所以流行的部分原因就是它用铁路图来表示。<span id="more-1302"></span></p>
<h3>准则</h3>
<p>一个语法的表示法是由一套语法图组成。每个图定义了一个非终结符。有一个主图通过下面方式定义了这门语言：属于这门语言的每句话都必须在主图上描绘一个路径。</p>
<p>每个图都有一个起始点和一个终点。这个图通过穿过其他的非终结符和终结符描绘了这些两点之间的可能路径。终结符用圆形区域表示，同时非终结符用方形区域表示。</p>
<h3>例子</h3>
<p>我们用一个算术表达式作为一个例子。首先我们提供一段简单的BNF语法：</p>
<pre><code>&lt;expression&gt;::= &lt;term&gt; | &lt;term&gt; &quot;+&quot; &lt;expression&gt;
&lt;term&gt;::= &lt;factor&gt; | &lt;factor&gt; &quot;*&quot; &lt;term&gt;
&lt;factor&gt;::= &lt;constant&gt; | &lt;variable&gt; | &quot;(&quot; &lt;expression&gt; &quot;)&quot;
&lt;variable&gt;::= &quot;x&quot; | &quot;y&quot; | &quot;z&quot;
&lt;constant&gt;::= &lt;digit&gt; | &lt;digit&gt; &lt;constant&gt;
&lt;digit&gt;::= &quot;0&quot; | &quot;1&quot; | &quot;2&quot; | &quot;3&quot; | &quot;4&quot; | &quot;5&quot; | &quot;6&quot; | &quot;7&quot; | &quot;8&quot; | &quot;9&quot;</code></pre>
<p>这段语法也能在EBNF中被表示：</p>
<pre><code>expression = term , {"+" term};
term = factor , {"*" factor};
factor = constant | variable | "(" , expression , ")";
variable = "x" | "y" | "z";
constant = digit , {digit};
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
</code></pre>
<p>关于这段语法的一组可能的语法图：<img src="http://dancewithnet.com/wp-content/uploads/2008/05/syntax-diagrams.png" alt="" title="syntax-diagrams" width="500" height="573" class="alignnone size-full wp-image-1303" /></p>
<h3>扩展链接</h3>
<ol>
<li><a href="http://dancewithnet.com/2008/05/17/bnf-and-ebnf/">巴科斯范式和扩展巴科斯范式</a></li>
<li><a href="http://www.json.org/json-zh.html">JSON website including syntax diagrams</a></li>
<li> <a href="http://www-cgi.uni-regensburg.de:80/~brf09510/syntax.html">Automatic generator of syntax diagrams</a></li>
<li><a href="http://www-cgi.uni-regensburg.de:80/~brf09510/syntax/lazyebnf.ebnf.html">Syntax diagrams of BNF</a></li>
<li><a href="http://dotnet.jku.at/applications/Visualizer/">Generator from EBNF</a></li>
<li><a href="http://www.informatik.uni-freiburg.de:80/~thiemann/haskell/ebnf2ps/">From EBNF to a postscript file wit the diagrams</a></li>
</ol>
<p>原文：<a href="http://en.wikipedia.org/wiki/Syntax_diagram">Syntax diagram</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/05/28/syntax-diagrams/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>巴科斯范式和扩展巴科斯范式</title>
		<link>http://dancewithnet.com/2008/05/17/bnf-and-ebnf/</link>
		<comments>http://dancewithnet.com/2008/05/17/bnf-and-ebnf/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:17:54 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[BNF]]></category>
		<category><![CDATA[EBNF]]></category>
		<category><![CDATA[巴科斯范式]]></category>
		<category><![CDATA[语法]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1301</guid>
		<description><![CDATA[巴科斯范式
巴科斯范式（也称为巴科斯-瑙尔范式、巴克斯-诺尔范式）即 BNF 是一种用于表示上下文无关文法的语言，上下文无关文法描述了一类形式语言。尽管巴科斯范式也能表示一部分自然... ]]></description>
			<content:encoded><![CDATA[<h3>巴科斯范式</h3>
<p>巴科斯范式（也称为巴科斯-瑙尔范式、巴克斯-诺尔范式）即 BNF 是一种用于表示上下文无关文法的语言，上下文无关文法描述了一类形式语言。尽管巴科斯范式也能表示一部分自然语言的语法，它还是更广泛地使用于程序设计语言、指令集、通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体，如<a href="http://zh.wikipedia.org/wiki/%E6%89%A9%E5%B1%95%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F">扩展巴科斯范式EBNF</a>或<a href="http://zh.wikipedia.org/wiki/%E6%89%A9%E5%85%85%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F">扩充巴科斯范式 ABNF</a><span id="more-1301"></span>。</p>
<p>BNF 规定是推导规则(产生式)的集合,写为：</p>
<pre><code>&lt;code&gt;&lt;符号&gt; ::= &lt;使用符号的表达式&gt;</code></pre>
<p>这里的&lt;符号&gt; 是非终结符，而表达式由一个符号序列，或用指示选择的竖杠 &#8216;|&#8217; 分隔的多个符号序列构成，每个符号序列整体都是左端的符号的一种可能的替代。从未在左端出现的符号叫做终结符。</p>
<h3>扩展巴科斯范式</h3>
<p>扩展巴科斯-瑙尔范式(EBNF)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种扩展。</p>
<p>它最初由尼古拉斯·沃斯开发，最常用的 EBNF 变体由标准，特别是 ISO-14977 所定义。</p>
<h4>基本</h4>
<p>代码，如由终结符即可视字符、数字、标点符号、空白字符等组成的计算机程序的源代码。</p>
<p>EBNF 定义了把各符号序列分别指派到非终结符的产生规则:</p>
<pre><code>digit excluding zero = "1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" ;
digit = "0" | digit excluding zero ;</code></pre>
<p>这个产生规则定义了在这个指派的左端的非终结符 digit。竖杠表示可供选择，而终结符被引号包围，最后跟着分号作为终止字符。所以 digit 是一个 0 或可以是 1 或 2 或 3 直到 9 的一个 digit excluding zero。</p>
<p>产生规则还可以包括由逗号分隔的一序列终结符或非终结符:</p>
<pre><code>twelve = "1" , "2" ;
two hundred one = "2" , "0" , "1" ;
three hundred twelve = "3" , twelve ;
twelve thousand two hundred one = twelve , two hundred one ;</code></pre>
<p>可以省略或重复的表达式可以通过花括号 { &#8230; } 表示:</p>
<pre><code>natural number = digit excluding zero , { digit } ;</code></pre>
<p>在这种情况下，字符串 1, 2, &#8230;,10,&#8230;,12345,&#8230; 都是正确的表达式。要表示这种情况，于花括号内设立的所有东西可以重复任何次，包括根本不出现。</p>
<p>可选项可以通过方括号 [ ... ] 表示:</p>
<pre><code>integer = "0" | [ "-" ] , natural number ;</code></pre>
<p>所以 integer 是一个零(0)或可能前导可选的负号的一个自然数。</p>
<p>EBNF 还包括描述指定次数的重复，和排除产生式的某部分或向 EBNF 文法插入注释的语法。</p>
<h4>依据 ISO 的扩展</h4>
<p>依据 ISO 14977 标准，提供了两个设施来扩展 EBNF。其一是在 EBNF 文法部分的特殊序列，它是在问号包围内的任意文本，其解释超出了 EBNF 标准的范围。例如，空格字符可以用如下规则定义:</p>
<pre><code>space = ? US-ASCII character 32 ?;</code></pre>
<p>其二利用圆括号在 EBNF 中不能放置到紧随标识符之后的事实。下列不是有效的 EBNF:</p>
<pre><code>something = foo ( bar );</code></pre>
<p>所以 EBNF 的扩展可以使用这种表示法。例如，在 Lisp 文法中，函数应用可以用如下规则定义:</p>
<pre><code>function application = list( symbol , [ { expression } ] );</code></pre>
<h4>扩展 BNF 的动机</h4>
<p>BNF 有着可选项和重复不能直接表达的问题。作为替代，它们需要利用中介规则或两选一规则，对于可选项，定义要么是空的要么是可选的产生式的规则，对于重复，递归的定义要么是被重复的产生式要么是自身的规则。同样的构造仍可用在 EBNF 中。</p>
<p>可选项:</p>
<pre><code>signed number = [ sign , ] number ;</code></pre>
<p>可按 BNF-风格定义为:</p>
<pre><code>signed number = sign , number | number ;</code></pre>
<p>或</p>
<pre><code>signed number = optional sign , number ;
optional sign = ε | sign ; (* 使用 ε 来更清晰的指示空产生式 *)</code></pre>
<p>重复:</p>
<pre><code>number = { digit } ;</code></pre>
<p>可按 BNF-风格定义为:</p>
<pre><code>number = digit | number digit;</code></pre>
<h4>其他增加和修改</h4>
<p>EBNF 排除了 BNF 的一些缺陷:</p>
<ol>
<li>BNF 为自身使用了符号 (&lt;, &gt;, |, ::=)。当它们出现在要定义的语言中的时候，BNF 不能不加以修改或解释的使用。</li>
<li>BNF-语法在一行中只表示一个规则。</li>
</ol>
<p>EBNF 解决了这些问题:</p>
<ol>
<li>终结符被严格的包围在引号 (&#8220;&#8230;&#8221; 或 &#8216;&#8230;&#8217;) 中。给非终结符的尖括号 (&#8220;&lt;&#8230;&gt;&#8221;)可以省略。</li>
<li>通常使用终止字符分号结束一个规则。</li>
</ol>
<p>进一步还提供了定义重复次数，排除法选择(比如除了引号的所有字符)和注释等的增强机制。</p>
<p>不管所有这些增强，EBNF 在能定义的语言的意义上不比 BNF 更强大。在原理上用 EBNF 定义的任何文法都可以用 BNF 表达。但是经常导致可观的更多规则的表示。</p>
<p>EBNF 已经被ISO用代码 ISO/IEC 14977:1996(E) 标准化了。</p>
<p>在某些场合任何扩展的 BNF 都被称为 EBNF。例如 W3C 使用 <a href="http://www.w3c.org/TR/REC-xml#sec-notation">one EBNF</a> 来规定 XML。</p>
<h4>另一个例子</h4>
<p>只允许赋值的简单编程语言可以用 EBNF 定义为:</p>
<pre><code>(* a simple program in EBNF − Wikipedia *)
program = 'PROGRAM' , white space , identifier , white space ,
           'BEGIN' , white space ,
           { assignment , ";" , white space } ,
           'END.' ;
identifier = alphabetic character , [ { alphabetic character | digit } ] ;
number = [ "-" ] , digit , [ { digit } ] ;
string = '"' , { all characters − '"' } , '"' ;
assignment = identifier , ":=" , ( number | identifier | string ) ;
alphabetic character = "A"|"B"|"C"|"D"|"E"|"F"|"G"
             |"H"|"I"|"J"|"K"|"L"|"M"|"N"
             |"O"|"P"|"Q"|"R"|"S"|"T"|"U"
             |"V"|"W"|"X"|"Y"|"Z" ;
digit = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" ;

white space = ? white space characters ? ;
all characters = ? all visible characters ? ;</code></pre>
<p>一个语法上正确的程序:</p>
<pre><code>PROGRAM DEMO1
BEGIN
  A0:=3;
  B:=45;
  H:=-100023;
  C:=A;
  D123:=B34A;
  BABOON:=GIRAFFE;
  TEXT:="Hello world!";
END.</code></pre>
<p>这个语言可以轻易的扩展上控制流，算术表达式和输入/输出指令。就可以开发出一个小的、可用的编程语言了。</p>
<p>使用了在标准中提议为正规表示的下列字符:</p>
<table>
<thead>
<tr>
<th>用途</th>
<th>符号表示</th>
</tr>
</thead>
<tbody>
<tr>
<td>定义</td>
<td>=</td>
</tr>
<tr>
<td>串接</td>
<td>,</td>
</tr>
<tr>
<td>终止</td>
<td>;</td>
</tr>
<tr>
<td>分隔</td>
<td>|</td>
</tr>
<tr>
<td>可选</td>
<td>	[ ... ]</td>
</tr>
<tr>
<td>重复</td>
<td>{ &#8230; }</td>
</tr>
<tr>
<td>分组</td>
<td>	( &#8230; )</td>
</tr>
<tr>
<td>双引号</td>
<td>&#8221; &#8230; &#8220;</td>
</tr>
<tr>
<td>单引号</td>
<td>&#8216; &#8230; &#8216;</td>
</tr>
<tr>
<td>注释</td>
<td>	(* &#8230; *)</td>
</tr>
<tr>
<td>特殊序列</td>
<td>? &#8230; ?</td>
</tr>
<tr>
<td>除外</td>
<td>-</td>
</tr>
</tbody>
</table>
<h4>约定</h4>
<ol>
<li>使用了如下约定:
<ol>
<li>扩展 BNF 每个元标识符都被写为用连字号连接起来的一个或多个字；</li>
<li>结束于“-symbol” 的元标识符是扩展 BNF 的终结符的名字。</li>
</ol>
</li>
<li>表示扩展 BNF 的每个操作符的正常字符和它所蕴涵的优先级(顶部为最高优先级)为:
<pre><code>* repetition-symbol
- except-symbol
, concatenate-symbol
| definition-separator-symbol
= defining-symbol
; terminator-symbol</code></pre>
</li>
<li>下列括号对超越正常优先级:
<pre><code>'  first-quote-symbol            first-quote-symbol  '
"  second-quote-symbol          second-quote-symbol  "
(* start-comment-symbol          end-comment-symbol *)
(  start-group-symbol              end-group-symbol  )
[  start-option-symbol            end-option-symbol  ]
{  start-repeat-symbol            end-repeat-symbol  }
?  special-sequence-symbol   special-sequence-symbol ?</code></pre>
</li>
</ol>
<p>作为例子，下列语法规则展示了表达重复的设施:</p>
<pre><code>aa = "A";
bb = 3 * aa, "B";
cc = 3 * [aa], "C";
dd = {aa}, "D";
ee = aa, {aa}, "E";
ff = 3 * aa, 3 * [aa], "F";
gg = {3 * aa}, "D";</code></pre>
<p>这些规则定义的终结字符串如下:</p>
<pre><code>aa: A
bb: AAAB
cc: C AC AAC AAAC
dd: D AD AAD AAAD AAAAD etc.
ee: AE AAE AAAE AAAAE AAAAAE etc.
ff: AAAF AAAAF AAAAAF AAAAAAF
gg: D AAAD AAAAAAD etc.</code></pre>
<h4>有关工作</h4>
<ol>
<li>W3C 使用一种<a href="http://www.w3c.org/TR/REC-xml#sec-notation">不同的 EBNF </a>来指定 XML 语法。</li>
<li>British Standards Institute 在1981年出版了一个 EBNF 标准: BS 6154。</li>
<li>IETF 使用在<a href="http://tools.ietf.org/html/rfc4234"> RFC 4234</a> 中规定的<a href="http://zh.wikipedia.org/wiki/%E6%89%A9%E5%85%85%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F">扩充 BNF (ABNF)</a>。</li>
</ol>
<p>ps，由于中文维基百科尚不可访问，所以就原文转载了其中关于<a href="http://zh.wikipedia.org/wiki/%E5%B7%B4%E7%A7%91%E6%96%AF-%E7%91%99%E5%B0%94%E8%8C%83%E5%BC%8F">巴科斯范式</a>和<a href="http://zh.wikipedia.org/wiki/%E6%89%A9%E5%B1%95%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F">扩展巴科斯范式</a>的词条。</p>
<h3></h3>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/05/17/bnf-and-ebnf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>第二届D2见闻和随想</title>
		<link>http://dancewithnet.com/2008/04/28/info-and-thoughts-about-2th-d2/</link>
		<comments>http://dancewithnet.com/2008/04/28/info-and-thoughts-about-2th-d2/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 18:09:34 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[D2]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[前端]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1283</guid>
		<description><![CDATA[这个周末回京参加了期待已久的第二届D2前端技术论坛，见到众多的前端同行，更聆听了几场高质量的讲演，收获良多。讲演的资料整理后会在第二届D2前端技术论坛的官网上提供下载，同时也... ]]></description>
			<content:encoded><![CDATA[<p>这个周末回京参加了期待已久的<a href="http://d2forum.cn/">第二届D2前端技术论坛</a>，见到众多的前端同行，更聆听了几场高质量的讲演，收获良多。讲演的资料整理后会在<a href="http://d2forum.cn/">第二届D2前端技术论坛的官网</a>上提供下载，同时也会提供会议视频，强烈推荐前端工程师关注。</p>
<ol>
<li><a href="http://blog.csdn.net/aimingoo/">周爱民</a>的讲演“前端设计与开发的基本模式”，看起来很丰富，很多模式或理念听起来也蛮有争议，避免不了空和虚，但我不能不承认他提供了很多我有兴趣但尚未涉及东西，这些给了我新的视角。</li>
<li>黄继佳的讲演“Silverlight应用”，虽然很高兴他能来参加和支持D2，幻灯片也很cool，但我强烈的感觉这是一个很纯正的Silverlight的产品推广，我不是太喜欢。</li>
<li><a href="http://blog.hedgerwow.com/">Hedger Wang</a>的讲演“Enterprise Ajax in PHP”，是这次D2的精华。他提出管理Ajax在企业级应用的设计模式，很多正是我日常开发中遇到，比如他讲到的映射，我也曾经做过类似的解决方案，比如他讲到的对多次同一请求的管理，我也曾思考过，但那往往是一个个独立的小点，这次讲演终于让我有了从点到线到面的感觉。他的讲演也准备的相当好，既有总结，又有代码，同时利用生活中的例子来说明原理，想听不明白都不行。我不需要如何得称赞hedger的讲演，如果你的开发涉及到Ajax，那么你就应该去看看他的讲演。ps，祝他杭州玩的开心。</li>
<li><a href="http://nate.koechley.com/blog">Nate Koechly</a>的讲演“Enhanceing Web Sites With The YUI Library&#8221;(English)”，作为YUI开发的核心成员，这次讲演虽然有点推广<a href="http://developer.yahoo.com/yui/">YUI</a>的意味（在此有近一年应用<a href="http://developer.yahoo.com/yui/">YUI</a>经验的我也强烈推荐<a href="http://developer.yahoo.com/yui/">YUI</a>），但是仅仅从他幻灯片上就可以看出他事先的准备和用心，甚至他表达出了要学习汉语的意愿。但很遗憾的是，由于语言的原因，这次没有能充分的从Nate身上获取更多的更深的东西，虽然有hedger义务做翻译，虽然对nate的提问是最多的。</li>
<li><a href="http://agentzh.org/misc/blog/#main">章亦春</a>的讲演“Nifty web apps on an OpenResty”，讲的很有激情，也给出了一个新的Web OS，作为一个视角是一个很棒的东西，但是作为我个人来讲我并不赞同这个思路，我一直认为让一门语言处于它最适当的位置才是王道，就像语义化设计一样，应该用合适的标签来组织合适的数据。虽然章亦春提到了不应该对Javascript滥用，但是很遗憾的是我感觉这就是一种滥用。</li>
<li>案例分享阶段，<a href="http://realazy.org/blog/">贤安</a>的“如何写一个富文本编辑器”，小马的“前端开发工具介绍”，一位仁兄（不好意思，记不起来名字）的“用Adobe Air开发IM”，都很有意思，这些很务实的小分享越多越好，因为每个人的心得体会小窍门汇聚在一起就有了越来越顺畅的前端开发。</li>
</ol>
<p><span id="more-1283"></span></p>
<p>第二届D2已经结束，第三届目前还没有明确的主办方（有兴趣请看<a href="http://club.cn.yahoo.com/bbs/threadview/1600133944_25__pn1.html">如何申办D2</a>），我的一些想法和建议如下：</p>
<ol>
<li>主办D2是需要费用的，所以建议下一次D2可以有正式的赞助商和门票，这将能保证D2更好的运作。</li>
<li>不少人对我说互动不够，但是由于演讲本身就是一对多的，所以注定了互动是有限度的。建议通过在午餐和晚餐时话题分桌，一边吃，一边彼此认识，一边圆桌会议。</li>
<li>这次D2已经很务实了，下一次希望更务实。可以提前征集大家期望的讲演内容，可以参考大家主题邀请演讲嘉宾。同样也可以提前搜集分享案例，更好的更深入的组织分享。我期望下一次D2能遇到的内容：
<ol>
<li>语义化的HTML。这是一个最基础的东西，也将是一个巨大的挑战。</li>
<li>Firebug实战。虽然大家开发基本上离不开它，但是我总感觉并没有充分的利用它，每一个小技巧都可以让我们进步。</li>
<li>整站的CSS管理。这肯定是一个百花齐放的问题。</li>
<li>高性能的WEB页面。<a href="http://developer.yahoo.com/performance/">Yahoo的preformance</a>列了34条，但是我们的实战呢？</li>
<li>前端工程师如何推动整个项目的设计和开发流程？这就是需要实践+经验+效果。</li>
</ol>
</li>
</ol>
<p>中国雅虎主办第二届D2前端开发论坛<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-1.jpg" alt="" title="D2前端开发者论坛" width="640" height="480" class="alignnone size-full wp-image-1284" /></p>
<p>坐着听讲演的开发者。由于2008的原因，北京的会议室不是特别好找，这次的会议室过于细长，hedger首先坐在了地上，并且号召大家都这么做，很多年没有坐在地上了，感觉不错。<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-2.jpg" alt="" title="D2开发者论坛，坐着听开发" width="640" height="480" class="alignnone size-full wp-image-1285" /></p>
<p>Nate正在开讲，首先拿出相机拍一下听讲者。他的幻灯片开始部分用了中文，是他临时学的，拿到他名片的朋友也会发现，有一面是简体中文的。<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-4.jpg" alt="" title="D2前端开发者论坛" width="640" height="480" class="alignnone size-full wp-image-1284" /></p>
<p>Nate讲演时发现的一个提示站点是否使用YUI的小工具。在他的演讲过程中，列出了当前哪些站点使用了YUI，估计都是用这个小工具挖掘的。<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-3.jpg" alt="" title="D2前端开发者论坛" width="640" height="480" class="alignnone size-full wp-image-1284" /></p>
<p>hedger演讲中&#8230;<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-5.jpg" alt="" title="D2前端开发者论坛" width="640" height="480" class="alignnone size-full wp-image-1284" /></p>
<p>部分现场的工作人员，我的同事们<br /><img src="http://dancewithnet.com/wp-content/uploads/2008/04/2th-d2-6.jpg" alt="" title="D2前端开发者论坛" width="640" height="480" class="alignnone size-full wp-image-1284" /></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/04/28/info-and-thoughts-about-2th-d2/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>如何让Firefox2和Firefox3在Windows下共存并同时运行？</title>
		<link>http://dancewithnet.com/2008/02/01/how-to-run-both-firefox2-and-firefox3-together/</link>
		<comments>http://dancewithnet.com/2008/02/01/how-to-run-both-firefox2-and-firefox3-together/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 16:36:46 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox2]]></category>
		<category><![CDATA[Firefox3]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2008/02/01/how-to-run-both-firefox2-and-firefox3-together/</guid>
		<description><![CDATA[相对于Firefox2来说，Firefox3除了采用全新的Gecko 1.9引擎外，在性能、稳定性和安全性方面进行许多改进，在我们最关心的对站点和网页应用的改进也相当多的。去年底，Firefox3 beta2就已经发布了... ]]></description>
			<content:encoded><![CDATA[<p>相对于Firefox2来说，Firefox3除了采用全新的Gecko 1.9引擎外，在性能、稳定性和安全性方面进行许多改进，在我们最关心的<a href="http://developer.mozilla.org/en/docs/Firefox_3_for_developers">对站点和网页应用的改进也相当多的</a>。<a href="http://www.mozillazine.org/talkback.html?article=22782">去年底，Firefox3 beta2就已经发布了</a>，正式版的推出也为期不远了，是时候在网页开发中考虑它了，所以我们不仅在要同一系统中装多个浏览器、多个版本的IE<ins datetime="2008-02-24T21:35:41+08:00">（<a href="http://tredosoft.com/Multiple_IE">Multiple IE</a>）</ins>，现在我们也需要装两个版本的Firefox了。在网上很早就有<a href="http://it.21cn.com/software/sygj/2008/01/02/4096106.shtml">Linux下让Firefox3与Firefox2共存</a>的介绍，下面介绍一种Windows下两者共存的方法。<span id="more-1236"></span></p>
<ol>
<li><a href="http://www.mozilla.com/en-US/firefox/all-beta.html">下载Firefox3，目前是beta2</a>。</li>
<li>打开命令运行窗口（开始>运行或快捷键win+R），然后运行命令<code>firefox -profilemanager -no-remote</code>，打开Firefox的配置文件管理器。<code>–no-remote</code>命名允许浏览器正在运行的时候打开配置文件管理器。<br /><img width="347" height="168" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-1.png' alt='命名运行窗口' /></li>
<li>点击“创建配置文件”按钮，创建一个名为Firefox3或者其他名字的配置文件。去掉对“启动时不询问”的选择。这一步是为Firefox3创建一个新的配置文件。<br /><img width="363" height="262" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-2.png' alt='创建新的配置文件' /></li>
<li>在Firefox2的快捷方式上点击右键，然后选择属性。在“目标”输入框中<code>.exe"</code>的后面输入一个空格和<code>-p default</code>，然后关闭。这步是告诉快捷方式使用默认配置文件来运行Firefox2。<br /><img width="367" height="466" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-3.png' alt='告诉快捷方式使用默认配置文件来运行Firefox2' /></li>
<li>安装Firefox3，“安装类型”选择“自定义”，这样就可以选择安装新的安装地方。虽然默认文件夹名是Mozilla Firefox 3 beta 2，但是最好还是自己重新定义一个，这样以后升级新的版本时候不用做什么修改。<br /><img width="503" height="386" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-4.png' alt='“安装类型”选择“自定义”' /><br /><img width="503" height="386" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-5.png' alt='修改安装路径' /></li>
<li>在安装结束时，不选择“立即运行Firefox”选项。如果现在运行，它使用的是默认配置文件，这不是我们想要的。<br /><img width="503" height="386" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-6.png' alt='在安装结束时，不选择“理解运行Firefox”选项。' /></li>
<li>在Firefox3的快捷方式上单击右键，选择“属性”，在目标输入框的<code>-no-remote -p firefox3</code>。这步是告诉这个快捷方式使用配置文件Firefox3来运行。<br /><img width="367" height="466" src='http://dancewithnet.com/wp-content/uploads/2008/02/run-firefox3-7.png' alt='使用配置文件Firefox3来运行' /></li>
</ol>
<p>这样我们就可以在同一个系统中同时运行Firefox2和Firefox3了。遗憾的是Firefox3基本上不支持Firefox2上的add-on，包括Firebug，幸运的是已经有了适用于Firefox3的<a href="http://getfirebug.com/releases/">Firebug 1.1 beta</a>。</p>
<p>这个方法来自于<a href="http://www.webindepth.com/how-to-run-both-firefox-2-and-firefox-3-together/">How to Run both Firefox 2 and Firefox 3 Together</a>。</p>
<p><ins datetime="2008-02-24T21:53:00+08:00">刚发现有了<a href="http://www.dangerouslyawesome.com/2008/02/22/more-than-one-firefox-beta-to-rule-them-all-a-dave-martorana-concoction/">MultiFireFox</a>，这个是用Python写的跨平台的程序，有兴趣的可以编译试试。对于Mac用户提供了专门的<a href="http://s3.amazonaws.com/multifox/MultiFireFox.dmg">MultiFirefox DMG</a>。谢谢<a href="http://www.fireyy.com/internet/os/429.html">fireyy</a></ins></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/02/01/how-to-run-both-firefox2-and-firefox3-together/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>OpenID和Email</title>
		<link>http://dancewithnet.com/2007/03/29/openid-and-email/</link>
		<comments>http://dancewithnet.com/2007/03/29/openid-and-email/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 19:21:03 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[ID]]></category>
		<category><![CDATA[OpenID]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/03/29/openid-and-email/</guid>
		<description><![CDATA[什么是OpenID？
OpenID就是一套以用户为中心的分散式身份验证系统，用户只需要注册获取OpenID之后，就可以凭借此OpenID帐号在多个支持OpenID的网站之间自由登录使用，而不需要每上一个网站都需... ]]></description>
			<content:encoded><![CDATA[<h3>什么是OpenID？</h3>
<p>OpenID就是一套以用户为中心的分散式身份验证系统，用户只需要注册获取OpenID之后，就可以凭借此OpenID帐号在多个支持OpenID的网站之间自由登录使用，而不需要每上一个网站都需要注册帐号。</p>
<p>官网：<a href="http://openid.net">http://openid.net</a><span id="more-944"></span></p>
<h3>如何使用OpenID？</h3>
<p>我用一个简单的OpenID的使用实例来理解OpenID</p>
<ol>
<li>注册OpenID，找到一个OpenID服务网站（当然这个服务网站可以自己建立），比如<a href="http://www.mysceond.name">www.mysceond.name</a>进行注册，我的用户名是dancewithnet，这个时候我获取了我的OpenID是http://dancewithnet.mysceond.name（如果没有自己的域名，可以直接使用这个网址座位OpenID）</li>
<li>在自己网站http://dancewithnet.com的&lt;head&gt;&lt;/head&gt;之间加上
<pre><code>&lt;link rel="openid.server" href="http://mysecond.name/openidserver.aspx"&gt;
&lt;link rel="openid.delegate" href="http://dancewithnet.mysecond.name/"&gt;</code></pre>
<p>这样就可以使用我自己的网址http://dancewithnet.com作为我的OpenID了</li>
<li>访问支持OpenID的应用网站<a href="http://www.zooomr.com">www.zooomr.com</a>，在登录处输入http://dancewithnet.com，确定后网页跳转到www.mysceond.name的登录页面，我输入用户名密码后确定，网页又跳回www.zooomr.com，这样我就登录zooomr.com了(当然还需要填写一下zooomr.com的专有信息，但是已经不需要注册填写用户名和密码了)。如果我在刚才从zooomr.com跳到www.mysecond.name进行验证时，我选上了记住用户名和密码，那么以后就可以直接在www.zooomr.com输入http://dancewithnet.com，无需再到mysceond.com验证，就可以直接登录。</li>
<li>以此类推，我可以只用http://dancewithnet.com这个OpenID和我在mysecond.name注册的用户名和密码来访问其他的支持OpenID的应用网站<a href="http://www.livejournal.com">www.livejournal.com</a>,<a href="http://openprofile.net">openprofile.net</a>等等。</li>
</ol>
<h3>OpenID的好处</h3>
<ol>
<li>一处注册，到处通行，同时也是这些支持OpenID的网站一起共享用户，是双赢。这样解决了访问多个站点频繁注册带来多个用户名和多个密码的烦恼，也解决了害怕某些不信任网站获取自己密码信息的担心，因为初始的OpenID的注册可以选择信任的服务网站。</li>
<li>密码永不丢失？忘记密码时，可以采用传统的方法取回密码（目前www.mysecond.name似乎不支持，他支持后面的非传统的方法），比如通过Email，但是还有更简单的是可以在www.mysecond.com重新申请一个dancewithnet1的帐号,然后重新修改一下dancewithnet.com首页的head里关联内容，我一样可以用http://dancewithnet.com这个ID来访问www.zooomr.com，我也可以到其他的OpenID服务网站，比如<a href="http://www.openid.cn">www.openid.cn</a>,去注册一个dancewithnet.openid.cn的OpenID,然后修改dancewithnet.com首页的head部分的关联代码，我依旧可以用http://dancewithnet.com来访问我以前访问过的网站</li>
<li>OpenID是网址(URI，URL)，可以和个人网站、博客等等网址统一起来,具有唯一性和可识别性，对个人来讲是非常容易记忆的。<a href="http://Spaces.live.com">Spaces.live.com</a>，<a href="http://blog.163.com">blog.163.com</a>等都给用户提供了个性网址，虽然现在可能不能作为OpenID，但是这无疑是一个巨大的潜在用户群，况且Microsoft、Digg等等都宣布将支持OpenID。</li>
</ol>
<h3>如果Email作为OpenID</h3>
<p>技术上我没有仔细考虑过，但是我想既然URI都可以Open起来，Email也应该可以，搞不好原理都可以是一样的。如果不可以，应该不是技术的问题，而是商业策略的问题，就像QQ不愿意互联互通一样。所以我还是认为Email才是OpenID的最好选择：</p>
<p>
Email有强大的用户群，也更容易让人接受，一旦可以变成OpenID，那么就相当于我们现在已经有了很多大型的像Google，Yahoo，Microsoft、163这样的分散的值得信任的ID服务站点，这是用网址作为OpenID所不能比拟的。拥有个人域名和个人网站的毕竟是少数，即使博客盛行且继续发展都暂时不能改变这个现实，所以OpenID那种密码永不丢失的优点只能服务少数人。所以类似邮件服务网站那样的值得信任的OpenID服务网站是大量需要的。只有普及性的使用，OpenID的理念才会真正的深入人心，并且改善我们的网络生活。</p>
<h3>参考和延伸阅读</h3>
<ul class="refer">
<li>[1]<a href="http://openids.cn/openid-introduction/">OpenID简介</a></li>
<li>[2]<a href="http://blog.donews.com/tenglong/archive/2006/11/25/1085110.aspx">关于OPENID的单点登陆协议</a></li>
<li>[3]<a href="http://www.zuola.com/weblog/?p=529">Passport与openID</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/03/29/openid-and-email/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>URL格式规范</title>
		<link>http://dancewithnet.com/2007/01/30/url-canonicalization/</link>
		<comments>http://dancewithnet.com/2007/01/30/url-canonicalization/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 22:48:36 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[web2.0 & so on]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[规范]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=941</guid>
		<description><![CDATA[一、格式说明
“&#124;” 表示隔开的两部分只能出现其中一个，方括号[]括起来的表示可选，文字由双引号”&#8221;括起来，以n*开头表示至少n个或更多的，n的缺省值为0。
二、总体格式
genericurl ... ]]></description>
			<content:encoded><![CDATA[<h3>一、格式说明</h3>
<p>“|” 表示隔开的两部分只能出现其中一个，方括号[]括起来的表示可选，文字由双引号”&#8221;括起来，以n*开头表示至少n个或更多的，n的缺省值为0。<span id="more-941"></span></p>
<h3>二、总体格式</h3>
<pre><code>genericurl     = scheme “:” schemepart

scheme         = 1*[ lowalpha | digit | “+” | “-” | “.” ]
schemepart     = *xchar | ip-schemepart

ip-schemepart  = “//” login [ “/” urlpath ]
login          = [ user [ “:” password ] “@” ] hostport
hostport       = host [ “:” port ]
host           = hostname | hostnumber
hostname       = *[ domainlabel “.” ] toplabel
domainlabel    = alphadigit | alphadigit *[ alphadigit | “-” ] alphadigit
toplabel       = alpha | alpha *[ alphadigit | “-” ] alphadigit
alphadigit     = alpha | digit
hostnumber     = digits “.” digits “.” digits “.” digits
port           = digits
user           = *[ uchar | “;” | “?” | “&#038;” | “=” ]
password       = *[ uchar | “;” | “?” | “&#038;” | “=” ]
urlpath        = *xchar    ; depends on protocol see section 3.1</code></pre>
<h3>三、常见scheme</h3>
<pre><code>; FTP (参见RFC959)
ftpurl         = “ftp://” login [ “/” fpath [ “;type=” ftptype ]]
fpath          = fsegment *[ “/” fsegment ]
fsegment       = *[ uchar | “?” | “:” | “@” | “&#038;” | “=” ]
ftptype        = “A” | “I” | “D” | “a” | “i” | “d”

; FILE
fileurl        = “file://” [ host | “localhost” ] “/” fpath

; HTTP
httpurl        = “http://” hostport [ “/” hpath [ “?” search ]]
hpath          = hsegment *[ “/” hsegment ]
hsegment       = *[ uchar | “;” | “:” | “@” | “&#038;” | “=” ]
search         = *[ uchar | “;” | “:” | “@” | “&#038;” | “=” ]

; GOPHER (参见RFC1436)
gopherurl      = “gopher://” hostport [ / [ gtype [ selector
                 [ “%09″ search [ “%09″ gopher+_string ] ] ] ] ]
gtype          = xchar
selector       = *xchar
gopher+_string = *xchar

; MAILTO (参见 RFC822)

mailtourl      = “mailto:” encoded822addr
encoded822addr = 1*xchar               ; further defined in RFC822

; NEWS (参见 RFC1036)
newsurl        = “news:” grouppart
grouppart      = “*” | group | article
group          = alpha *[ alpha | digit | “-” | “.” | “+” | “_” ]
article        = 1*[ uchar | “;” | “/” | “?” | “:” | “&#038;” | “=” ] “@” host

; NNTP (参见RFC977)
nntpurl        = “nntp://” hostport “/” group [ “/” digits ]

; TELNET
telneturl      = “telnet://” login [ “/” ]

; WAIS (参见 RFC1625)
waisurl        = waisdatabase | waisindex | waisdoc
waisdatabase   = “wais://” hostport “/” database
waisindex      = “wais://” hostport “/” database “?” search
waisdoc        = “wais://” hostport “/” database “/” wtype “/” wpath
database       = *uchar
wtype          = *uchar
wpath          = *uchar

; PROSPERO
prosperourl    = “prospero://” hostport “/” ppath *[ fieldspec ]
ppath          = psegment *[ “/” psegment ]
psegment       = *[ uchar | “?” | “:” | “@” | “&#038;” | “=” ]
fieldspec      = “;” fieldname “=” fieldvalue
fieldname      = *[ uchar | “?” | “:” | “@” | “&#038;” ]
fieldvalue     = *[ uchar | “?” | “:” | “@” | “&#038;” ]</code></pre>
<h3>四、杂类</h3>
<pre><code>lowalpha       = “a” | “b” | “c” | “d” | “e” | “f” | “g” | “h” |
                 “i” | “j” | “k” | “l” | “m” | “n” | “o” | “p” |
                 “q” | “r” | “s” | “t” | “u” | “v” | “w” | “x” |
                 “y” | “z”
hialpha        = “A” | “B” | “C” | “D” | “E” | “F” | “G” | “H” | “I” |
                 “J” | “K” | “L” | “M” | “N” | “O” | “P” | “Q” | “R” |
                 “S” | “T” | “U” | “V” | “W” | “X” | “Y” | “Z”

alpha          = lowalpha | hialpha
digit          = “0″ | “1″ | “2″ | “3″ | “4″ | “5″ | “6″ | “7″ |
                 “8″ | “9″
safe           = “$” | “-” | “_” | “.” | “+”
extra          = “!” | “*” | “‘” | “(” | “)” | “,”
national       = “{” | “}” | “|” | “\” | “^” | “~” | “[” | “]” | “`”
punctuation    = “<” | “>” | “#” | “%” | <”>

reserved       = “;” | “/” | “?” | “:” | “@” | “&#038;” | “=”
hex            = digit | “A” | “B” | “C” | “D” | “E” | “F” |
                 “a” | “b” | “c” | “d” | “e” | “f”
escape         = “%” hex hex

unreserved     = alpha | digit | safe | extra
uchar          = unreserved | escape
xchar          = unreserved | reserved | escape
digits         = 1*digit
</code></pre>
<ul class="refer">
<li>转自:<a href="http://nosound.my.gsdn.net/2004/12/09/6276/">http://nosound.my.gsdn.net/2004/12/09/6276/</a>
<li></ul>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/01/30/url-canonicalization/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

