Jeekundo.com

以前端技术为主

Archive for the ‘转载及翻译’ Category

优化HTML

with 6 comments

  1. 为何要保持标签整洁
  2. 一团糟的写法
  3. 附加的优化方法
  4. 激进的优化方法
  5. 物极必反
  6. 反面教材
  7. 工具
  8. 将来的考虑

为何要保持标签整洁

客户端的优化近来倍受关注,可是有些较基本的方面却被忽视。如果你仔细观察某些页面(即便是那些本来应该深度优化的页面),很容易就能在他们的标签中找到一大堆冗余的、不高效的结构。所有这些累赘给本来应该尽可能保持轻量级的页面增加了不必要的负担。

保持文档整洁的原因不一定是为了更快的加载速度,更是为了让我们的建筑能有一个结实而牢固的基础,整洁的标记意味着更好的可访问性,更方便的维护,更易被搜索引擎检索,更小的体积仅仅是保持文档整洁的一个附加属性,也是我们应该这样做的另一个理由。

这篇文章里面,我们来瞧瞧html该如何优化:去掉一些不好的标记习惯、通过删除冗余的结构来减小文档体积,并应用压缩技术,我们来瞧瞧现有的压缩工具,并分析他们做得好和做得不好的地方,我们也会探讨一下在将来可以怎么做。

一团糟的写法

来看看有哪些最容易犯的错误

1.在script标签内放html注释

当今一个最严重的冗余代码是在script标签内放置HTML注释——<!-- -->,这里不需要说得太多,一句话足够:需要通过这种方式来阻止错误的浏览器(例如‘95 Netscape 1.0)几乎灭绝了,脚本内的注释是完全不必要的累赘,应该被毫不留情地删除掉。

2.<![CDATA[ … ]>

另外一种常见但是不必要的阻止错误的方式是将CDATA块放到script标签内:

<script type="text/javascript">
    //<![CDATA[
      ...
    //]]>
</script>

这个神圣的目标不切实际。尽管CDATA块是一个阻止XML解析器将<&当成标签的开头的一个很好的方式,但是只有在真正的XHTML文档(被当成“application/xhtml+xml” content-type来处理的文档)内才有效。目前大部分的网页仍然被当成“text/html”来处理的(因为,举个例子,IE目前仍然不支持 XHTML),所以他们都被当成HTML来解析,而不是XML。

除非你已经把文档当成"application/xhtml+xml"来处理,否则几乎没有任何理由把CDATA块放在里面,即便你打算以后使用XHTML,也有必要先把这些不必要的东西去除,等到真正需要的时候再加进来。

当然,一个终极的解决方案是完全避免使用内联的script标签(为了利用外部script的缓存机制)。

3.类似onclick="…", onmouseover=""这些

html事件属性有一些合理的应用场景,比如为了性能上的考虑或者为了应付古老的浏览器(尽管我还没有发现只支持html事件属性注册方式——onclick="..."而不支持dom节点属性注册方式element.onclick = ...的情况)。除了一些众所周知的拒绝它们的理由如行为和内容的分离或者便于重用,它还会污染html标记。把事件逻辑转移到外部的脚本里面,我们可以充分利用脚本的缓存机制。事件处理逻辑不必在每次的页面请求中都被传送到客户端。

4.onclick="javascript:…"

javascript 中一个很有趣的怪现象:javascript:伪协议和html事件属性处理器混合成了这样一个怪胎(发生的几率高达106,000 (!)),事实上html属性上的事件处理器会整体变成一个函数体,然后这个函数变成一个事件处理程序(通常,会先把函数的作用域加强来包含元素本身和它的部分或全部的父级)。“javascript:” 这部分变成了一个不必要的标签并且几乎没有任何作用。

5. href="javascript:void(0)"

继续javascript伪协议,有一个很著名的代码片段:href=”javascript:void(0)”,他的作用是阻止链接的默认行为。当javascript被禁用、不可用或出错的时候这个糟糕的写法使得链接完全不可访问。毫无疑问最理想的处理方法是将合适的url写入href里面,然后通过事件处理器来阻止链接的默认行为。另一种情况,如果链接是动态创建之后插入到页面中(或者最初是隐藏的,然后才通过 javascript让其显示),使用href=”#”比用javascript:更整洁,更快速。

6.style="…"

使用style属性并没有什么太严重的错误,只是如果把它里面的内容转移到一个外部的样式表里面,我们就能利用到源代码的缓存机制。这跟前面提到过的 html属性事件处理器类似。即便你只是为了给一个特定的元素设定样式并且没有打算重用它们,这些样式信息会在每次页面被请求的时候都传送一次。把样式转移到外部样式表里面能防止这个,因为外部样式表传送一次之后会缓存到客户端。

7.<script language=”Javascript” … >

也许一个最搞不懂的属性就是script标签的language属性,这个古老的属性早在1999年、10年前官方推荐HTML 4.01标准的时候就被抛弃了,除非在必须指定javascript版本(这个也不太可靠,应该尽可能避免)这种极少的情况下,否则没有任何理由继续使用这个属性。

8.<script charset=”…” … >

另一个搞不懂的属性是script的charset属性,有时候我会见到下面这种结构:

<script type="text/javascript" charset="UTF-8">
    ...
</script>

这里要说的是charset属性只放在“外部”script标签(有写src 属性的script标签)上才有意义。HTML 4.01 甚至说:

注意charset属性指定了src属性所指定的脚本的字符编码;它不关心script标签的内容。

测试表明浏览器都遵循了这条标准。

搜索一下这个结构,出现了2000次。当你发现像Textmate这些流行的编辑器里面都错误地使用了charset之后就一点都不觉得奇怪了。

9. 附加的优化方法

刚才我们说到了一些应该避免的不好的写法,但是还有一些,那就是删除冗余的部分。下面提到的一些优化是有些争议的,因为他们主要出于体积上的考虑。所以我把它们放在这里不是作为建议,而是作为一种选择。请各位三思而行。

1. <style media=”all” …>

HTML 4.01定义了style上的media属性,用来指定特定的媒介——屏幕、打印机、手持设备等等。media的一个可能的值是all,这个值恰好是现代浏览器的默认值,如果你发现自己在使用media="all",那么你可以省去它,让浏览器自动帮你设置

有趣的是,HTML 4.01说media的默认值是"screen"。但是我测试的每一款浏览器都没有按照这条标准来执行,而把默认值设定成了"all"。这可能就是为什么HTML5草案把默认值指定为"all",来和浏览器的行为达成一致。

2.<form method=”get” …>

另一个默认值——GET——form 的"method"属性常常是被明确设定的。其实除了不够清晰,省去它没有其他坏处。注意HTML 5草案没有更改这个行为

3. <input type=”text” …>

INPUT元素的type属性默认值为"text"——在HTML 4.01HTML 5草案里面都是如此。去掉这个属性对有很多文本输入框的页面来说能减少很大一部分体积。

4.<meta http-equiv=”Content-type” …>

指定页面的字符编码总是给人很大的困惑。和我们想当然的相反,META元素上指定的Content-type没有 HTTP头里面指定的“Content-type”的优先级高。当二者(HTTP头和META元素)都被设定的情况下,HTTP头优先。

如果你能控制服务器返回并且能够正确地设定HTTP头的Content-type,那么省略META标签也是可以的。保留它的唯一原因是为离线浏览该页面的时候指定编码。

5.<a id=”…” name=”…” …>

把”name”属性和”id”属性一起使用的主要原因是为了兼容古老的浏览器(如Netscape 4)。他们不能链接到用“id”指定的锚点,所以必须设置”name”,如果你的页面有有元素既设置了”id”又设置了”name”,并且不在意这些古老的浏览器,那么你可以摆脱这个古老的写法了。

注意一些副作用。如果你在脚本中通过name来查询元素(document.getElementsByNamedocument.evaluatedocument.querySelectorAll等等)把name替换成id可能会把事情搞砸。还要记住document.anchors只返回带有name属性的元素

6.<!doctype html>

一年多以前,Dustin Diaz建议使用HTML 5文档类型,作为减少页面体积的一个途径。这不是一个重要的优化方式,但是如果你不在乎是否通过检验并且需要使页面尽可能小巧,使用<!doctype html>是一个可行的备选方案。测试表明这个奇特的文档声明可以触发大量的浏览器的标准模式。

激进的优化方法

如果你渴望更多的,这里还有一些比较极端的方法。有一些(如略去选填的标签)已经出现过一段时间了,还有些之前没出现过。尽管这些做法看起来有些唐突,但是它们都可以通过检验,如果你的页面是HTML的而不是XHTML的。但是你的页面是HTML的,不是吗?;)

  1. 去掉HTML注释
  2. 去掉/减少空格
  3. 省去选填的结束标签(<p><p>foo)
  4. 如果允许,去掉属性值的引号 (<p class="foo"><p class=foo>)
  5. 删除布尔类型的属性的选填值(<option selected="selected"><option selected>)
  6. 转移内联样式、内联脚本、和html事件属性 (如果不能删掉它们的话)
  7. 转移class和id(需要同步修改脚本和样式)
  8. 把URL的协议名称去掉 (http://example.com//example.com)

但我们可以压缩

当页面压缩之后这些优化还有意义吗?难道gzip不是已经把这些冗余的标记都搞定了吗?毕竟,我们说的是一个文本格式的东西。

用处还是有的!

首先,必须清楚不是每个人都能gzip,这是很悲哀的事情,但好的一面是在这种情况下HTML 优化的意义就更大了。

其次,即便页面压缩了,我们还可以节省5-10kb(平均每个页面)。在比较大的页面中还可以节省得更多。尽管看上去也没有太多,但实际上每一个字节都很重要

作为一个压缩大型页面的例子,我优化了一下非官方的ECMA-262, 第三版规范的HTML版本,这个页面最初为750KB(gzip之后为131KB),优化之后为606KB(gzip之后115KB)。也就是说gzip之后节省了16KB,仅仅是去掉空格、注释、属性值的引号、选填标签。你可以看看这个压缩后的版本和以前的版本看起来是一模一样的。

最后,像去除空格和注释这样的优化能使得文档树更轻量,潜在地增强了页面的渲染效率。

物极必反

像其他一些优化一样,我们很容易矫枉过正。HTML Compact 就是HTML压缩工具里面做得太过的一个例子,这个优秀的windows程序用了一种很“独特”的方式来压缩HTML——用javascript把内容写入到页面中。

把这个完美的页面:

<html>
<head>
    <title></title>
</head>
<body>
    <div>
    <ul>
        <li>foo</li><li>bar</li><li>baz</li>
        <!-- few more dozens of list elements ... -->
    </ul>
    </div>
</body>
</html>

变成这副模样:

<!--hcpage status="compressed"-->
<html>
<head>
  <SCRIPT LANGUAGE="JavaScript" SRC="hc_decoder.js"></SCRIPT>
  <title></title>
</head>
<BODY>
  <NOSCRIPT>To display this page you need a browser with JavaScript support.</NOSCRIPT>
  <SCRIPT LANGUAGE="JavaScript">
    <!--
      hc_d0("Mv#d|\x3C:,&c@w4YFAtD1 [... and so on, another couple hundreds of characters ...]");
    //-->
  </SCRIPT>
</BODY>
</html>

不用说,像这样的“优化”永远不应该在网络上出现,除非你的目的是降低页面对用户和搜索引擎的可访问性。并且里面的NOSCRIPT标签也让人很不爽,这种东西对某些能阻止javascript的防火墙来说也是不起作用的。馊主意,坏做法!

上面是一个很好的反例,但是还有一些也是应该注意的:

反面教材

1. 去除文档声明

HTML Compresor里面有一个选项——默认是开启的——去除文档声明。我实在想不出这么做会有什么的好处,相反,没有文档类型会激活怪异模式,使页面的布局和行为都出现很严重的问题。文档类型要么放着不动,要么被替换为一个更简短的——HTML5声明。

2.把STRONG用B替代,EM用I替代

还是那个HTML压缩工具里面有一个有害的选项是把元素用比他们更短的“替代品”来替换。问题是B不是STRONG的替代品。I也不是EM的替代品。 STRONG和EM是有语义的——表示强调,而B和I只是去改变字体样式的;他们能改变文字的展现,但是没有任何语义。

虽然浏览器把他们显示成一样的,但是屏幕阅读器和搜索引擎知道他们的区别。

3.去除title,alt属性和label元素。

一条比较重要的原则是如果优化会损失可访问性就不要优化。你可能很想删掉IMG上的“alt”属性,或者链接上的“title”属性,但是节省少量的字节相对于损失的可访问性来说的确是得不偿失。

工具

使“附加优化方法”里面的优化自动化是比较琐碎的事情。已经有一些工具可以去除注释、空格和属性值的引号,但这些工具仍然是比较初级的,它们做的优化还比较有限,我们当然能做得更好:

几个月以前,hakunin 和我都开始做一个很相似的基于Ruby的压缩工具,但都没有完成。

目前来说我们可以用的:

1.Absolute HTML Compressor (桌面程序, windows)

如果你把去除文档类型和用I替换STRONG的选项去掉的话,它做得很不错。

2.HTML Compact (桌面程序, windows)

降低页面的可访问性。应避免使用

3.HTML Compressor (桌面程序, windows)

只是删除空格,甚至把对空格敏感的元素如PRE里面的空格也删除了。用处不大。

4.Pretty Diff (基于网页)

没有选项可以完全的删除空格(只是减少空格)。除了减少空格和并成一行外不做其他的优化,也不能正确处理对空格敏感的元素。用处不大。

5.htmlcompressor (基于java)

这里提到的优化它大部分可以完成(但是不删除选填标签或缩短布尔类型的属性),能正确处理对空格敏感的元素,也许是目前最好的一个选择

可以看到,现在的状况是很令人失望的。好像没有Mac/Linux下的压缩工具,windows下的用处又不大。

将来的考虑

虽然转移或者删减可以(并且应该)在产品成型的时候来处理,但是一团糟的写法压根就不应该出现,不管是成品还是开发阶段,没有任何例外。

最好的优化常常还是人工来处理的:更改页面结构来避免多个元素上重复的class(把它们放到父级元素上去)、去除不是立即要用的内容,将他们动态加载。替换掉不高效的用于展现目的的<br>&nbsp,或替掉换基于表格的布局也是人工优化很好的例子。

就这些优化工具而言,我希望在不久的将来看到更多的压缩工具,将页面体积缩减推向一个新的高度。

如果你知道更多优化HTML的方法,请分享出来。很乐意大家提问,提建议或者纠正我的错误。

本文翻译自Optimizing HTML

Written by admin

February 26th, 2010 at 10:06 pm

this关键字

with 6 comments

javascript最重要的关键字之一是this。但是如果你不了解它的工作原理使用起来就会很困难。

下面我将介绍在事件处理中如何运用它。以后我会增加this的其他用途。

所有者

这篇文章将要讨论的问题是:在函数doSomething()this到底指向谁?

function doSomething() {
   this.style.color = '#cc0000';
}

在javascript中,this始终指向我们正在执行的这个函数的“所有者”,或者更确切地说,函数是哪个对象的方法this就指向哪个对象。当我们在页面中定义函数doSomething()的时候,他的所有者就是这个页面,或者说javascript的window对象(或全局对象)。而一个onclick属性的所有者是它所在的HTML元素。

这种“所属关系”是javascript的面向对象特性造成的,欲了解更多信息请阅读这篇对象亦是关联数组

------------ window --------------------------------------
|                                          / \           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   |   HTML 元素   | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          --------------------                          |
|          |   onclick 属性    |                          |
|          --------------------                          |
|                                                        |
----------------------------------------------------------

如果我们直接执行doSomething(),那么this关键字指向window,并且函数会去改变window对象的style.color,由于window对象没有style属性,这个函数会执行失败,并产生js错误。

拷贝

如果我们要合理地运用this就必须确保使用它的函数为正确的HTML元素所拥有,或换一种说法,我们必须把函数拷贝到onclick属性上,传统的事件绑定模型很好地处理了这个问题。

element.onclick = doSomething;

函数被完整地拷贝到了onclick属性上(现在成了一个方法),所以当事件处理函数被执行的时候this指向HTML元素并且它的color会被改变。

------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   |    HTML元素   | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |doSomething()的一份拷贝|  <--  拷贝函数         |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------

这里有个小技巧是我们可以把函数拷贝到多个事件处理器上,每次this都能指向正确地HTML元素:

------------ window --------------------------------------
|                                                        |
|                                                        |
|                                                        |
|   ----------------                                     |
|   |   HTML元素    | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------          |            |
|          |doSomething()的一份拷贝|  <--  拷贝函数         |
|          -----------------------          |            |
|                                           |            |
|   -----------------------                 |            |
|   |    另一个HTML元素     | <-- this        |            |
|   -----------------------     |           |            |
|               |               |           |            |
|          -----------------------          |            |
|          |doSomething()的一份拷贝|  <--  拷贝函数         |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------

这样才是比较充分地使用this,每次函数被执行的时候this都指向触发了这个事件的HTML元素,这个HTML元素“拥有”了doSomething()的一份拷贝。

调用

然而如果你使用行内事件绑定方式

<element onclick="doSomething()">

你没有拷贝函数!而是调用了这个函数。其中的区别是很关键的。这里的onclick属性并没有包含任何实际的函数,而只是一个触发了这个函数:

doSomething();

他只是说了句“找到doSomething()并执行它”,当我们找到doSomething()的时候this关键字再一次指向了全局的window对象,并且函数会返回错误提示。

------------ window --------------------------------------
|                                          / \           |
|                                           |            |
|                                          this          |
|   ----------------                        |            |
|   |    HTML元素   | <-- this         -----------------  |
|   ----------------      |           | doSomething() |  |
|               |         |           -----------------  |
|          -----------------------         / \           |
|          | 找到doSomething()    |          |            |
|          | 并执行它             | ----   对函数的调用     |
|          -----------------------                       |
|                                                        |
----------------------------------------------------------

区别

如果你想通过this来获得触发了这个事件的HTML元素,就必须确保this关键字确实被写入到了onclick属性里面,只有这种情况下它才会指向该函数所绑定到的HTML元素。所以如果你测试下面这段

element.onclick = doSomething;
alert(element.onclick)

你将得到:

function doSomething()
{
	this.style.color = '#cc0000';
}

可以看到,this关键字出现在onclick方法里面,因此它会指向HTML元素。

但是如果你测试以下这段:

<element onclick="doSomething()">
alert(element.onclick)

会得到

function onclick()
{
	doSomething()
}

这只是一个对函数doSomething()的调用,this关键字并没有出现在onclick方法里面,所以它不会指向HTML元素。

例子——拷贝

在下面的情况下this会写入onclick方法内:

element.onclick = doSomething
element.addEventListener('click',doSomething,false)
element.onclick = function () {this.style.color = '#cc0000';}
<element onclick="this.style.color = '#cc0000';">

例子——调用

下面这些情况this指向window:

element.onclick = function () {doSomething()}
element.attachEvent('onclick',doSomething)
<element onclick="doSomething()">

注意这里出现了attachEvent()微软事件绑定模型的一个严重的缺点是attachEvent()只建立了对函数的调用但没有拷贝。所以有些时候我们无法知道是哪个HTML元素触发了这个事件。

二者结合

当使用行内事件绑定方式时也可以把this传给函数,使你仍然可以在函数内部使用它:

<element onclick="doSomething(this)">

function doSomething(obj) {
// this出现在了事件处理器内并且传给了函数
// obj现在指向HTML元素,所以你可以做以下操作
obj.style.color = '#cc0000';
}

本文翻译自PPK的The this keyword

Written by admin

January 10th, 2010 at 1:09 am

Ralph Waldo Emerson quotes

with one comment

Don’t be too timid squeamish about your actions.All life is an experiment.The more experiments you make the better.

Be not the slave of your own past.Plunge into the sublime seas,dive deep and swim far,so you shall come back with self-respect,with new power,with an advanced experience that shall explain and overlook the old.

Don’t waste yourself in rejection,nor bark against the bad,but chant the beauty of the good.

Finish each day and be done with it.You have done what you could.Some blunders and absurdities no doubt crept in;forget them as soon as you can.Tomorrow is a new day;begin it well and serenely and with too high a spirit to be encumbered with your old nonsense.

He who is not everyday conquering some fear has not learned the secret of life.

If I have lost confidence in myself,I have the universe against me.

Insist on yourself; never imitate… Every great man is unique.

None of us will ever accomplish anything excellent or commanding except when he listens to this whisper which is heard by him alone.

People seem not to see that their opinion of the world is also a confession of their character.

Shallow men believe in luck.Strong men believe in cause and effect.

There is a time in every man’s education when he arrives at the conviction that envy is ignorance; that imitation is suicide; that he must take himself for better, for worse, as his portion; that though the wide universe is full of good, no kernel of nourishing corn can come to him but through his toil bestowed on that plot of ground which is given to him to till. The power which resides in him is new in nature, and none but he knows what that is which he can do, nor does he know until he has tried.

Whatever you do, you need courage. Whatever course you decide upon, there is always someone to tell you that you are wrong. There are always difficulties arising that tempt you to believe your critics are right. To map out a course of action and follow it to an end requires some of the same courage that a soldier needs. Peace has its victories, but it takes brave men and women to win them.

Do the thing you fear, and the death of fear is certain.

Always do what you are afraid to do.

To be yourself in a world that is constantly trying to make you something else is the greatest accomplishment.

Written by admin

January 1st, 2008 at 8:44 pm

Posted in 转载及翻译

Tagged with ,

李小龙的巨大成功背后你所不知道的

with 2 comments

李小龙,这个名字让人联想到快如闪电的拳头,结实的肌肉,旋风般的步法和高度的警觉。

如果你仅仅是从电影上了解那个小龙(译者注:原文中用的是The Little Dragon),那么你错过了很多。从他的第一届美国荧屏比赛中的那些稀有的胶片中我们看到他在1964年国际空手道锦标赛中的表演的二指俯卧撑(是的,用两个手指做俯卧撑),他有名的寸拳,特别是拳击部分,相比之下,让我觉得他的电影中的打斗看上去很慢(注意:视频中包含音乐)。

(译者注:原文用的是youtube视频,由于youtube在中国的访问速度太慢,所以我把它重新上传到了56.com上)

头脑兴奋了,是吗?如果你还没有看上面的视频,先看一遍,因为那会让我接下来要说的变得更加令人惊骇。

我们大部分人如果看到一个人能有如此惊人的技术一定会认为李小龙肯定拥有过人的天赋和所有的机会来取得这些成就。

毫无疑问他当然有一些天赋,但是你知道他是克服了巨大的障碍才释放了他内在的天才的吗?事实上,你是否知道,有一次他伤得很严重,他的医生告诉他在他以后的生命中再也不能练习武术了?他是如何克服这些的?

如果我告诉你你有和他同样的潜能,你会说什么?唯一的问题就是:你如何使激发和培养这些天赋?如果有一个人,曾经做到过,并且能给我们提供这个问题的线索,那么这个人就是李小龙。

李小龙的成功背后你不知道的六件事

1)他从未读完大学。青少年时期的李小龙生活在香港,经常和别人打架。在经过一次特别严重的打架事件并去了一趟警局之后,李小龙的家人决定把他带回他的出生地美国。

1964在他大三即将结束的时候,李小龙决定辍学去经营他的“振藩国术馆”的西雅图分店,致力于扩大他的武术学校,加入了像史蒂夫·乔布斯和比尔·盖茨等等虽然没有完成大学的学习但是后来却获得重大成功人士的行列。

并不是说李小龙是个傻瓜!事实上,在他离开华盛顿的大学之前他修的是哲学系。也不是蛊惑你不应该去读大学!但李小龙从未让学位的缺乏成为阻止他去实现内心渴望的障碍。

2)他差点再也不能练武了。1970年,伴随着他联合出演的电视剧《青蜂侠》的取消和财务困难,李小龙没有进行适当地热身就去参加举重练习结果导致了严重的背伤。

医生告诉他在床上休息,并忘掉功夫:他再也不能练武了。

对一个曾经说过武术教会他一切的人来说,这是一个毁灭性的打击。在经济困难的重压之下,李小龙只能平躺在床上三个月,并且接下来的三个月也只能在室内活动。

但即便这样,他拒绝让这些阻止他。他不能使用自己的身体,却可以使用自己的头脑。在那六个月的时间里,他笔耕不辍,记录所有对他所深爱的武术的思考和一些技艺。

在六个月的时间里,他共写满了八本笔记,每本足有两英寸厚。并且在那段时间内,尽管医生说他伤的很重,但他拒绝去相信他不可能痊愈的说法;我们的思想造就我们的现实,他是这句话的忠实信徒。

六个月之后,他开始在户外工作了,最初只是适度地练习,后来就重新开始了他的教学工作。

即使在他的整个人生中背痛都时常困扰着他,在他的电影中他比任何一个强壮的人动作都要敏捷,你根本不会想到他是一个有背伤的人。

3)他最大的成就源于一次不够完美的胜利。李小龙对武术界最大的贡献是他的截拳道的哲学精神和武术体系。但截拳道不是凭空产生的。

实际上,诞生这套有史以来最高效的武术体系之一的催化剂是一次不够高效的搏斗。

在1960年,李小龙因胆敢向外国人传授中国武术的秘密而受到挑战。他虽然赢了那场搏斗,但是打完之后气喘吁吁,并且他认为本可以只用一分钟就解决问题的一场搏斗却花了他三分钟。

在那次搏斗之前,李小龙只是满足于修改传统的咏春拳。但是因为那次不够完美的经历,他开始追求一些更有效的训练方法,并将他所能找到的世上最好的武艺进行严格的分解,很快他自己的意义深远的武术体系诞生了。

4)他曾让机会被别人挖走。李小龙的事业是否从一开始就很顺利呢,尤其对于这样一个拥有如此精湛武艺的人你会认为好莱坞会向他敞开大门直接和他签约?

恰恰相反。

在电视剧《青蜂侠》的拍摄取消之后,李小龙几乎没有上电视的机会。在1969年,他投入了许多希望和大量努力的一部叫做《无音萧》的电影最终未能投拍。

在他的背伤和经济困难的困扰之下,他的妻子Linda不得不出去工作,而李小龙则在家里照看孩子和休养背伤。

在那期间,华纳兄弟娱乐公司联系了他,这让他看到了一丝希望;他们希望李小龙帮助他们拍摄一部基于武术的连续剧。他全身心地投入,并给了他们很多好点子……其中有许多被运用到了电视剧《功夫》里面,可最后被捧红的不是李小龙,而是戴维·卡拉丹。

后来,华纳兄弟娱乐公司坦诚尽管李小龙投入了大量的努力,他们甚至从未考虑过用他担任主角。

讽刺的是,这次事件最终促使他接受了香港电影制片人邹文怀的邀请,拍摄了一部让他大红大紫的电影:《唐山大兄》。

李小龙终于转败为功,当李小龙第一次见到邹文怀就对他说:“你等着瞧吧,我会成为全世界最伟大的中国大明星!”

5)他坚持不懈地训练。你认为他那精湛的不可战胜的武艺的代价是什么?每星期训练两次然后坐在电视机前喝一瓶啤酒?

李小龙坚持每天都训练,有训练记录表明他练习踢腿…达到每天一千多次!

6)他酷爱阅读。他有一个很大的藏书室,并且喜欢逛书店。他不仅喜欢阅读武术类的书籍,而且喜欢阅读他那个年代的自我发展类作家的书籍,如这一类的先驱拿破仑·希尔、Norman Vincent Peale、Clement Stone。

他是如此地相信自我发展以至于曾在1969也就是他的第一部成功的电影《唐山大兄》之前两年写下了这段预言一般的自我肯定:

我,李小龙,将成为在美国片酬最高的亚洲超级明星。作为回报,我会做出作为一个演员所能提供的最令人兴奋和最高质量的表演。从1970年开始,我将名扬世界,直到1989年我将拥有$10,000,000。然后我将幸福而快乐地以我喜欢的方式生活。

李小龙成功的关键是什么呢?

在这篇文章的最开头,我问过你这个问题:如果你有和李小龙同样伟大的潜力(任何方面,不仅仅是武术),你如何将它发挥出来?

有谁能比李小龙本人更适合回答这个问题呢?

投入,彻底地投入,是使人进步的动力——一种不屈不挠的执着的投入精神以及对这一过程是永无止境的领悟,因为人生是一个不断成长、不断更新的过程。

谢谢你,李小龙。

在结尾,让我和大家分享我最喜欢的一段李小龙的名言来作为总结:

在我还是一个孩子的时候我就有一种对于成长和发展的本能的冲动。对我来说,一个有格调的人的职责和义务就是本着诚恳的态度去发展自己的潜能。

经由我个人亲身体验和仔细地观察我终于发现世上最强大的力量莫过于自助——全力以赴,使自己全神贯注于一个既定的目标,这是一个没有终点、永无止境的过程。

本文翻译自What You Didn’t Know About Bruce Lee’s Kick-Ass Success

Written by admin

August 26th, 2007 at 5:58 pm

The Man Who Thinks He Can

with one comment

If you think you are beaten,you are,
If you think you dare not,you don’t,
If you like to win,but you think you can’t,
It’s almost certain you won’t.

If you think you’ll lose,you are lost,
For out of the world we find,
Success begains with a fellow’s will-
It’s all in the state of mind.

If you think you are outclassed,you are,
You’ve got to think high to rise,
You’ve got to be sure of yourself before,
You can ever win a prize.

Life’s battles don’t always go
To the stronger or faster man,
But soon or late the man who wins
Is the man WHO THINKS HE CAN.

Written by admin

June 28th, 2007 at 6:26 pm

怎样知道你喜欢做什么

without comments

Brian Kim的这篇 《How to Find What You Love to Do》是我认为世界上每个人都应该精读一遍的好文章,很高兴看到imacee把它翻译成了中文,这里是转载的imacee’s weblog上的译文,希望更多的人能看到这篇文章。

———————————————————————————————————————

写这篇文章的灵感来自于史蒂夫·乔布斯在斯坦福大学学位颁授典礼上的演讲。在讲话中, 他谈到我们曾听过成千上万遍的忠告:

你必须找到你所喜欢的东西。工作上是如此, 对情侣也是如此。 你的工作将占据你生命中大半个人生, 唯一能真正获得满足的方法是做你认为伟大的工作, 而唯一能做伟大的工作的方法是喜爱你做的事。” –史蒂夫-乔布斯

那么, 问题自然地出来了, 怎样找到你喜欢做什么事情? 这是一个很大的问题。让我热血沸腾的是我们听到我们必须一直做我们喜欢做的事情, 但是从未有一步一步地告诉我们怎样才能找到喜欢做的事情的建议。这篇建议旨在帮助那些在某种程度上无所事事, 无条理逻辑结构或次序的人。

一个完美的例子是, 为了找寻你的激情, 我们被教导问我们自己:“如果你有一百万美金(免税), 你将会怎样做?”

典型的回答接着是:“ 嘿, 我会把它存入一个高利息户头, 靠每年的利息生活。然后我会迁居到夏威夷, 买一幢房子, 整天喝margaritas, 玩视频游戏, 去海滩, 游泳, 周游世界, 品尝所有的cuisines, 读书, 运动等等。”

但这些真的有帮助吗? 实际不是. 当然, 你描绘出了懒虫喜欢做什么, 但是没有真正回答出其中所隐藏的问题, 这就是“我怎样通过做我喜欢的事情来赚钱?”

那结果是什么? 人们做令自己讨厌的工作, 感觉被束缚, 因为他们依靠唯一的收入来资助一种为了逃离令人不快的现实和在生活中漫无目的漂流的生活方式, 无法辞职, 简短地说, 导致生活静静地拼命, 就像Henry David Thoreau雄辩地那样。

你会问, 他们为什么不辞掉工作, 追逐他们喜欢做的事情或工作呢? Read the rest of this entry »

Written by admin

April 22nd, 2007 at 2:25 pm

乔布斯在斯坦福大学毕业典礼上的演讲

without comments

在美味书签里面看见了苹果之父乔布斯先生2005年在斯坦福大学毕业典礼上的演讲,感觉值得一读,这里是转载的此处的译文,英文原文在斯坦福大学的网站上。

“Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’opinions drown out your own inner voice. And most important,have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”

(斯坦福)是世界上最好的大学之一,今天能参加各位的毕业典礼,我备感荣幸。(尖叫声)我从来没有从大学毕业,说句实话,此时算是我离大学毕业最近的一刻。(笑声)今天,我想告诉你们我生命中的三个故事,并非什么了不得的大事件,只是三个小故事而已。

第一个故事,是关于串起生命中的点点滴滴。(原文为“connecting the dots”指一种小游戏:把标有序列号的点连起来,就构成一幅图画——译注)我在里德大学呆了6个月就退学了,但之后仍作为旁听生混了18个月后才最终离开。我为什么要退学呢?故事要从我出生之前开始说起。我的生母是一名年轻的未婚妈妈,当时她还是一所大学的在读研究生,于是决定把我送给其他人收养。她坚持我应该被一对念过大学的夫妇收养,所以在我出生的时候,她已经为我被一个律师和他的太太收养做好了所有的准备。但在最后一刻,这对夫妇改了主意,决定收养一个女孩。侯选名单上的另外一对夫妇,也就是我的养父母,在一天午夜接到了一通电话:“有一个不请自来的男婴,你们想收养吗?”他们回答:“当然想。” 事后,我的生母才发现我的养母根本就没有从大学毕业,而我的养父甚至连高中都没有毕业,所以她拒绝签署最后的收养文件,直到几个月后,我的养父母保证会把我送到大学,她的态度才有所转变。 17年之后,我真上了大学。但因为年幼无知,我选择了一所和斯坦福一样昂贵的大学,(笑声)我的父母都是工人阶级,他们倾其所有资助我的学业。在6个月之后,我发现自己完全不知道这样念下去究竟有什么用。当时,我的人生漫无目标,也不知道大学对我能起到什么帮助,为了念书,还花光了父母毕生的积蓄,所以我决定退学。我相信车到山前必有路。当时作这个决定的时候非常害怕,但现在回头去看,这是我这一生所作出的最正确的决定之一。(笑声)从我退学那一刻起,我就再也不用去上那些我毫无兴趣的必修课了,我开始旁听那些看来比较有意思的科目。

这件事情做起来一点都不浪漫。因为没有自己的宿舍,我只能睡在朋友房间的地板上;可乐瓶的押金是5分钱,我把瓶子还回去好用押金买吃的;在每个周日的晚上,我都会步行7英里穿越市区,到Hare Krishna教堂吃一顿大餐,我喜欢那儿的食物。我跟随好奇心和直觉所做的事情,事后证明大多数都是极其珍贵的经验。

我举一个例子:那个时候,里德大学提供了全美国最好的书法教育。整个校园的每一张海报,每一个抽屉上的标签,都是漂亮的手写体。由于已经退学,不用再去上那些常规的课程,于是我选择了一个书法班,想学学怎么写出一手漂亮字。在这个班上,我学习了各种衬线和无衬线字体,如何改变不同字体组合之间的字间距,以及如何做出漂亮的版式。那是一种科学永远无法捕捉的充满美感、历史感和艺术感的微妙,我发现这太有意思了。当时,我压根儿没想到这些知识会在我的生命中有什么实际运用价值;但是10年之后,当我们的设计第一款Macintosh电脑的候,这些东西全派上了用场。我把它们全部设计进了Mac,这是第一台可以排出好看版式的电脑。如果当时我大学里没有旁听这门课程的话,Mac就不会提供各种字体和等间距字体。自从视窗系统抄袭了Mac以后,(鼓掌大笑)所有的个人电脑都有了这些东西。如果我没有退学,我就不会去书法班旁听,而今天的个人电脑大概也就不会有出色的版式功能。当然我在念大学的那会儿,不可能有先见之明,把那些生命中的点点滴滴都串起来;但10年之后再回头看,生命的轨迹变得非常清楚。

再强调一次,你不可能充满预见地将生命的点滴串联起来;只有在你回头看的时候,你才会发现这些点点滴滴之间的联系。所以,你要坚信,你现在所经历的将在你未来的生命中串联起来。你不得不相信某些东西,你的直觉,命运,生活,因缘际会……正是这种信仰让我不会失去希望,它让我的人生变得与众不同。 Read the rest of this entry »

Written by admin

December 23rd, 2006 at 1:22 am

李敖的《因祸为福说》

without comments

有人总想陷害我,使我陷入他们眼中的逆境和霉运。形式上,当我陷入这种状况的时候,他们一定很高兴,认为这下子可整住了这小子、可让这小子吃苦受罪了。其实,事实上,真是这样吗?非也!

《西游记》里大家捉拿孙悟空,抓住后,交给太上老君处理,太上老君把孙悟空关在八卦炉里提炼,认为七七四十九天以后,孙悟空就在炉里完了。殊不知孙悟空神通广大,他一进炉,就发现他可以在逆境和霉运中求生,所以,他充分利用逆境和霉运,反倒使他变成了“火眼金睛”,变得更有功夫、更具道行。最后,七七四十九天以后,太上老君去开八卦炉,准备给孙猴子收尸的时候,孙猴子却一撞而出,高高兴兴地跑掉了!

很多人追求顺境和好运,可是很少有人知道:形式上的逆境和霉运,如果能正确面对,有正确的人生观,其实就是顺境和好运的一种变形,另一种就是顺境和好运。古代哲学家说“祸福相依”,说“祸兮福之所倚;福兮祸之所伏”,换成现代说法,就是好运和霉运其实是一回事,顺境和逆境其实是一块铜板的两个面。只有不会洞悟人生的人、不会渗透人生的人,才会那么极端对立地把顺境逆境两极化,把好运霉运对立起来。

照这么说,是不是反倒应该感谢陷害你的人,为了他们给你逆境和霉运的机会呢?这倒也不然,一个人倒也不必这么贱。陷害你的人,他的本意是要用逆境和霉运整你、整垮你,照凡夫俗子理论,的确这会给你带来痛苦,使你受害。但你能不痛苦、不受害,这是你的本领,该感谢的自己才对,跟陷害你的人,是无关的。 俗话说“福无双至,祸不单行”,这是说祸是双至的。我对双至有一个怪解释,当祸本身一至的时候,凡夫俗子本身就配上另一至,另一至就是苦恼自己。凡夫俗子遭到祸害,立刻做直接的苦恼自己的反应,于是祸上加祸,自然就双至了,我的办法是:我遇到祸事,第一就告诉我自己:“我决心不被它打倒,相反的我要笑着面对它。”这样一来,我就先比别人少了至少一祸,绝不配合祸,这还不够。我要把祸本身给“值回票价”,这才满意。什么是“值回票价”?《史记•管晏列传》,司马迁说管仲“善因祸而为福,转败而为功”,这是我最欣赏的一种本领,化祸为福,转失败为成功,对人生说来这么重要?“人生不如意事,常十之八九。”低手对不如意的事,是唉声叹气;高手对不如意事,却能化成对自己有利。人要修炼到这一段数,才算炉火纯青。炉火纯青的人,不论在八卦炉里、在八卦炉外,都是一样逍遥。

“因祸而为福,转败而为功”,是我最欣赏的大丈夫境界,我真喜欢这两句话。

Written by admin

August 21st, 2006 at 10:08 am

忽然民主(李怡专栏)

without comments

政改方案遭否決後,最讓人感到奇怪的,是一眾過去從來不支持香港民主進程的香港與內地名人,忽然齊聲關心起香港民主來了。政協常委陳永棋對政改方案被否決感到可惜,認為會拖慢香港的民主進程。內地新「護法」王振民稱,政府方案被否決,香港民主要停止發展七年。老「護法」許崇德,對這個民主方案被否決感到遺憾。

特首曾蔭權說,香港失去了朝民主大步躍進的機會。許仕仁說,李柱銘、陳日君等人公開倡 議「原地踏步」的目的達到了。林瑞麟說,他為○七、○八年難以有民主進程而難過。左派政團民建聯、工聯會也為香港民主大唱哀歌。

不明瞭香港過往情勢的外地人,大概會認為這些人都是關心香港民主發展、民主進程之士,否則何以會為香港民主的停步不前而悲歎呢?

然而,並不健忘的香港市民,都會想一下、問一下:○三年政府強推二十三條立法的時候,這些人持甚麼態度?他們是關心香港的自由、法治,還是大力推銷「沒有國哪有家」的反民主意念?去年人大常委向香港民主施暴,在沒有香港特區終審法院提請的前提下、違背 《基本法》強行釋法和作「決定」,否定了香港○七、○八雙普選,那時候這些人在哪?他們又做了甚麼說了甚麼?他們有為香港民主進程說過半句惋惜的話嗎?還是在為中央的施 暴強作解釋?

許崇德、王振民、林瑞麟、陳永棋、鄭耀棠、譚耀宗、馬力等人,在香港的民主遭到施暴的時候,都在推波助瀾,他們有甚麼資格為香港的民主進程流下可恥的鱷魚眼淚?
他們在今天突然大講民主,突然為香港沒有向民主「大步躍進」感到難過,表示惋惜,適足以證明他們所惋惜的、所難過的,並不是真民主,而是玩弄民主的花招、卻對普選隻字不提的原地繞圈子的假民主。他們所惋惜的,是他們的民主騙案沒有得逞。他們所難過的, 是香港市民對民主的真正覺醒,是香港市民沒有被騙倒,沒有被哄過去,二十五萬市民走上街頭,使一些圖妥協的泛民主派議員感受到民眾督促的力量,從而齊心在議會投下否決的一票。

香港市民贏了嗎?泛民主派贏了嗎?沒有。我們只不過沒有輸。我們只不過清楚表示了:假民主,我們不收貨。

我們歡迎今天突然唱起民主高調的中央、特區政府和內地、香港的政商名人,同泛民主派一起來談談:今後怎樣真正邁出民主普選的一大步。

Written by admin

August 7th, 2006 at 3:02 am

Posted in 转载及翻译

Tagged with , ,