Archive for August, 2006

用户体验

Thursday, August 31st, 2006

原地址:http://iceshow.blog.sohu.com/11735611.html

  被喊得越来越火的“用户体验”,到底有多少人了解?我还不清楚,但是经过这段时间的实践,有一个更为深入的认识。继续总结一下与大家分享…

  步骤一:数据调查

        数据可以带来什么?对于各页面及路径的pv(产品),uv(用户)的总结,可以得到产品使用情况的一个大致概貌。 

  缺乏什么?不了解用户,不了解过程。

 

  步骤二:用户访谈

    有什么好处?产品和用户之间的联系,就像一个黑匣子。对用户的访谈,就是一个试图打开黑匣子的过程。

    打开了黑匣子,我们就可以改造他们之间的路径。从而使两者无缝融合。就像是研究dna,对结构的研究可以重塑基因。反映到产品上,就是我们可以以用户的心理模型去创造产品,或者是用富于创造的产品去影响用户。

  步骤三:产品分析

    即使了解用户,是否能提出有效的解决方案呢?此时,对于相关产品的研究就会作出帮助。如果说对用户的需求,可以对产品有纵深的认识。那么对产品的分析,有利于横向去加深去产品的理解。为什么做同一个功能,会产生出两种不同的产品?差异表现在大体,也体现在细节,通过不断的比较,会发现产品各功能间,产品和用户间千丝万缕的联系。

  步骤四:产品定位

    定位本应在一个产品做出之前决定,可为什么我会在此阶段提出这个步骤呢?事实上,因前面工作的铺垫。只有了解了用户,了解了相关产品后,定位才会更加明确。最初时,时时需要一个定位,却感觉模糊,在此刻,就清楚许多。能否改变,看造化了~~

  步骤五:功能确认

    基于对用户和产品的分析,此时会提出一些新的功能。从产品长远的发展,对用户使用的引导,以及易用性综合考虑,慎审地推出每一项功能。

  步骤六:信息架构

    产品的印象开始在脑海里浮现。此时,将信息注入到产品结构中去。导航,管理等是很重要的几项,需要格外小心。另外,不同的页面有不同的信息,以及页面与页面间的信息跳转,甚至是产品间的跳转,每条信息都需要经过审核。如果对产品没有帮助,或者对用户是负担,都不要向里加。

  步骤七:页面原型

    就个人而言,在页面原型阶段,除了用visio来画结构图,还是不自觉得要用ps去协助找感觉,这个过程,对自己而言也是一个迭代的过程。当然,之前那些阶段,使整个产品的结构都在脑海里快成型了,这个只需要把它落实到纸上。

    原型的确认,需要坚持。如果是你自己做了这个过程,而且每一点都是经过思考的。那么就去说服来自各方的反对。事实上,你要相信,人们相信思考的价值,只要你付出了,就有回报,最怕没有付出天天在那里抱怨。

  步骤八:视觉设计

    不必多说了。可能会比较多,icon,字体,区域的划分,模块的统一,css的定义,风格的设定~~~所有的一切,都要体现前面工作所得到的东西。

  步骤清晰,但其实中间的过程可能更有意思。

  首先要获得运营人员的支持,如果他们不参与进来,整个过程会很难做。通过不断的交流,他们可能会很乐意一起做用户访谈等的工作。这个看你的沟通能力了。

  然后获得团队其它同事的支持。需要不断展示阶段性成果,大家会慢慢认识到ue工作的作用。

  有过这么一次以后,团队里认识到这个职位的职能,以后就可以开展更深入的工作了。

还有一些小经验,例如:

  产品的定位与用户体验的关系?

   记得在“如何量化用户体验”里提到四个方面,其中品牌和内容占了其中一部分,我现在认为这个的权重性应该更高一些。如果定位模糊,只是不断的提高易用性,并不能给用户很好的体验。

   有时间要读读《情感化设计》,似乎现在自己开始更倾向于产品对用户心理的影响,易用性只不过是个基础罢了。

  产品的用户群?

    前面一段时间的思考。10%的用户是活跃的,是领袖,是流行者。而80%的用户都是可引导的,产品设计成什么样,用户就会是什么样子。我们帮用户创造价值,定位在挖掘用户深层需求去做创新,而不是表面性的“用户说一,我们做一”。

  实例方面,涉及到工作,不列举了。

可用性-究竟几名测试者才够?

Thursday, August 31st, 2006

转载自:蓝色理想
原作者:白鸦
原地址:http://www.blueidea.com/news/other/2006/4003.asp

  “需要几名参试者”,相信凡是做过可用性测试的人来说都会遇到这个问题。由于出发点不同,团队中的不同人员,例如产品经理,项目经理,可用性工程师,技术开发人员等在这个问题上会有不同的看法。面对这样的讨论,不少从业者感觉自己是对的,要说服对方时却又没有把握、缺乏底气。这篇文章的目的就在于尝试帮助理清可用性测试的几个基本问题,以便“几个用户”类似问题的解决,更加灵活地运用可用性测试方法。

可用性测试的属性 ——

可用性测试是要发现问题
   可用性测试,故名思议是评估(测试)设计方案或者产品的可用性水平。目前最常用的评估可用性水平的指标有:用户在没有帮助的情况下完成任务的比例,完成任务所用的时间,用户寻求帮助的次数等等。这些指标对于描述可用性水平有益处,但却不是重点。可用性测试的更重要的成果是从可用性工程学的角度来支持这些数据,也就是发现并指出产品或者设计方案中存在的可用性问题――当然也包含优点。可以说在大多的项目中,特别是在迭代反复的产品开发流程中,可用性测试的根本目的是发现问题并解决它,从而提高产品的可用性水平。从Nielson的这张“经典”的用户与发现可用性问题数量关系的图表中,你可以得到这样的体会:“5名用户的测试可以发现85%的可用性问题”――请暂时忽略这里的具体数据,而关注并且记住这句话的主干:“测试发现问题”。

可用性测试是定性研究
   绝大多数的可用性测试都是定性研究而不是定量研究。熟悉统计学的人都清楚,定量研究需要相当大的样本量才能达到一定的信度和效度。根据Nielson最近的一篇文章,要做定量的可用性测试研究,每个用户类型至少需要有20名用户 。这对于一般的测试项目来说成本太大以致无法承受。虽然有部分定量的可用性研究,但就我们目前所从事的大多可用性测试来说都是定性研究。也就是说绝大多数情况下,我们得到的只是描述性的结论,而那些尝试将测试结果推论到整个用户群体的想法都是不切实际的,徒劳的, 错误的。

可用性测试不是万能的
  可用性测试是找可用性问题的方法,所以可用性测试非常适合于发现设计方案、产品中存在哪些可用性问题,并帮助解决它。这个优点,特别对于迭代式的产品开发流程来说,非常有效,经过测试-改进-再测试的几个周期,可以显著地提高产品的可用性水平。

  但是,如果你的项目经理希望通过这个测试来了解这个产品有多好,上市后有多少人会喜欢或者喜欢那个特殊设计点,或者有将来有多少比例的用户能顺利完成某个操作?不,请明确告诉他,这不是可用性测试能做的。记住,可用性测试是定性研究,定性研究的样本量得出来的结论不具备推论的效度。可用性测试中确实会有一些比例数据,但这个比例只能作为参考。

究竟几个人合适? ——

我的时间少,资源有限,三个人可以吗?
   面临时间短,资源有限,用户难找等问题,是可用性从业者普遍面临的问题。手头的资源仅够测试三个人,还值得去做吗?遇到这样问题的时候,我们往往会迟疑。回想前面提到的,可用性测试是要发现问题,解决问题。测试三个人能实现这个目的吗?当然可以!问题已经有答案了。是的,由于可用性测试是定性研究,而且就发现问题这个角度来说,三个人的测试和六个、八个的测试仅仅是发现问题数量上的差异。我们不仅赞成,而且非常鼓励这样规模小,周期短的测试。

客户要求做十五个测试,有必要吗?
   国内外诸多经验,包括笔者两年多的工作经验中也体会到,在测试完5个用户之后,发现重要的可用性问题的几率,也就说测试的效率已经比较低。继续做更多的测试,最多情况是看更多的用户在同样的位置出现同样的错误。由于继续做测试的产出与投入的比例比较低,我们并不推荐这样做。

  有的人希望多测试几个人,希望了解有多少比例的用户会遇到特定的情况。对于这种需求,我们只能不胜其烦地解释:可用性测试作为定性研究,不能得出这样的推论。另外还有个很重要的问题需要考虑:发现四个人出现同样的问题后,真的有必要知道多少比例的人会出现这个问题?问题已经在那,你需要做的是想办法解决这个问题,而不是统计有多少人犯了这个错!

   另外可能有人说,我们希望找到尽可能多的,甚至所有的可用性问题。首先,从投入和产出的比例来说,这是非常昂贵而不聪明的做法;另外很遗憾的说,你不可能在一轮的测试中发现所有的问题。问题存在一定的情境当中,而不是孤立、凭空地存在,有的问题会“埋藏”在另一些问题的下面。例如说,任务3必须要在用户完成任务1之后才能做,但用户未能顺利完成任务1,此时要么在主持人指导下完成任务1而进入任务3,或者直接跳过任务3。而这两种方式都会影响任务3的真实情况,而错过它存在的问题。所以,要发现任务3存在的问题,就必须先解决任务1中存在的问题。

推荐的做法 ——

  尽早开展测试,不要担心测试的人数太少而放弃宝贵的机会。记住,你要做的是发现最重要的可用性问题并且解决它,测试三个人可以发现可用性问题吗?可以,那就去做吧,你会有意想不到的收获。

  客户/领导要求做大数量的测试?如果明确测试的目的是要发现产品中存在的问题,而不是要进行定量分析,那么你应该说服他们采取少人多轮的方式来进行,这样的做法最经济而且效果最好。

参考书目:
1《When to test and when to hold off》 by Ellen Tauber, Julie Stanford and Laura Klein

出处:UPA中国

Python编程速度技巧

Wednesday, August 30th, 2006

1.1. 最常见
一个最常见的速度陷坑(至少是俺在没看到网上这篇介绍时陷进去
过好些次的) 是: 许多短字串并成长字串时, 大家通常会用:

Toggle line numbers
   1 shortStrs = [ str0, str1, ..., strN]
   2 #N+1个字串所组成的数列
   3 longStr = ”
   4 for s in shortStrs: longStr += s
因为里字串是不可变的, 所以每次 longStr += s 都是将原 来的 longStr 与 str 拷贝成一个新字串, 再赋给longStr. 随着 longStr的不断增长, 所要拷贝的内容越来越长. 最后导至str0被 拷贝N+1次, str1是N次, … .

那咋办呢 ? 咱们来看看Skip Montanaro先生的解说: http://musi-cal.mojam.com/~skip/python/fastpython.html 及可参考一下Guido van Rossum本人的: http://www.python.org/doc/essays/list2str.html

1.1.1. 找出速度瓶颈
1)首先在大家应先学会怎么去找出速度瓶颈: 自带有profile
模块:

Toggle line numbers
   1 import profile
   2 profile.run (’想要检查的函数名()’)
就会打印出那个函数里调用了几次其它函数, 各用了多少时间, 总共用了多少时间等信息 — Nice ? 详请参阅<<库参考>>中的 profile模块的论述.

当然脑袋笨一点或是聪明一点的, 也可以用time模块中的time() 来显示系统时间, 减去上次的time()就是与它的间隔秒数了.

1.1.2. 字串相并
就头上的例子而言, 用 :

Toggle line numbers
   1 longStr =”.join(shortStrs)
立马搞定,  但如果shortStrs里面不都是字串, 而包含了些数 字呢 ? 直接用join就会出错. 不怕, 这样来:

Toggle line numbers
   1 shortStrs = [str(s) for s in shortStrs[i]]
   2 longStr = ”.join(shortStrs)
也即先将数列中所有内容都转化为字串, 再用join.

对少数几个字串相并, 应避免用: all = str0 + str1 + str2 + str3 而用: all = ‘%s%s%s%s’ % (str0, str1, str2, str3)

1.1.3. 数列排序
list.sort ()
你可以按特定的函数来: list.sort( 函数 ), 只要这个函数接受 两参数, 并按特定规则返回1, 0, -1就可以. — 很方便吧? 但 会大大减慢运行速度. 下面的方法, 俺举例子来说明可能更容易 明白.

比方说你的数列是 l = ['az', 'by'], 你想以第二个字母来排序. 先取出你的关键词, 并与每个字串组成一个元组: new = map (lambda s: (s[1], s), l )

于是new变成[('z', 'az'), ('y', 'by')], 再把new排一下序: new.sort()

则new就变成 [('y', 'by'), ('z', 'az')], 再返回每个元组中 的第二个字串: sorted = map (lambda t: t[1], new)

于是sorted 就是: ['by', 'az']了. 这里的lambda与map用得很 好.

Python2.4以后, sort和sorted的使用可以参考这片 Wiki: HowToSort

1.1.4. 循环
比如for循环. 当循环体很简单时, 则循环的调用前头(overhead) 会显得很臃肿, 此时map又可以帮忙了. 比如你想把一个长数列 l=['a', 'b', ...]中的每个字串变成大写, 可能会用:

Toggle line numbers
   1 import string
   2 newL = []
   3 for s in l: newL.append( string.upper(s) )
用map就可以省去for循环的前头:

Toggle line numbers
   1 import string
   2 newL = map (string.upper, l)
Guido的文章讲得很详细.

1.1.5. 局域变量 及 ‘.’
象上面, 若用 append = newL.append, 及换种import方法:

Toggle line numbers
   1 import string
   2 append = newL.append
   3 for s in l: append (string.upper(s))
会比在for中运行newL.append快一些, 为啥? 局域变量容易寻找.

俺自己就不比较时间了, Skip Montanaro的结果是:

基本循环: 3.47秒
去点用局域变量: 1.79秒
使用map: 0.54秒

1.1.6. try的使用
比如你想计算一个字串数列: l = ['I', 'You', '', 'Perl', ...] 中每个词出现的次数, 你可能会:

Toggle line numbers
   1 count = {}
   2 for s in l:
   3     if not count.has_key(s): count[s] = 0
   4     else: count[s] += 1
由于每次都得在count中寻找是否已有同名关键词, 会很费时间. 而用try:

Toggle line numbers
   1 count ={}
   2 for s in l:
   3     try: count[s] += 1
   4     except KeyError: count[s] = 0
就好得多. 当然若经常出现例外时, 就不要用try了.

1.1.7. import语句
这好理解. 就是避免在函数定义中来import一个模块, 应全在 全局块中来import

1.1.8. 大量数据处理
由于中的函数调用前头(overhead)比较重, 所以处理大量 数据时, 应:

Toggle line numbers
   1 def f():
   2 for d in hugeData: …
   3 f()
而不要:

Toggle line numbers
   1 def f(d): …
   2 for d in hugeData: f(d)
这点好象对其它语言也适用, 差不多是放之四海而皆准, 不过对 解释性语言就更重要了.

1.1.9. 减少周期性检查
这是的本征功能: 周期性检查有没有其它绪(thread)或系 统信号(signal)等要处理.

可以用sys模块中的setcheckinterval 来设置每次检查的时间间隔.

缺省是10, 即每10个虚拟指令 (virtual instruction)检查一次.

当你不用绪并且也懒得搭理 系统信号时, 将检查周期设长会增加速度, 有时还会很显著.

—编/译完毕. 看来是易学难精了, 象围棋?

2. 我们自个儿的体悟
请有心得者分享!

在“大量数据处理”小节里,是不是说,不要再循环体内部调用函数,应该把函数放到外面?从Python2.2开始,”找出速度瓶颈”,已经可以使用hotshot模块了.据说对程序运行效率的影响要比profile小. — jacobfan
“由于中的函数调用前头(overhead)比较重, 所以处理大量 数据时, 应: ” 这句译文中,overhead翻译成”前头”好象不妥.翻译成”由于中函数调用的开销比较大,…”要好些 — jacobfan
数组排序中讲的方法真的会快点吗? 真的快到我们值得放弃直接用sort得到得可读性吗?值得怀疑 — hoxide
Python2.4以后 sort和sorted的使用更加灵活,link已经加到文中,我没有比较过效率。-yichun
关于 “try的使用”:
其实setdefault方法就是为这个目的设的:

Toggle line numbers
   1 count = {}
   2 for s in l:
   3     count.setdefault(s, 0) += 1
这个其实能做更多。通常遇到的问题是要把类似的东西group起来,所以你可能想用:

Toggle line numbers
   1 count = {}
   2 for s in l:
   3     count.setdefault(s, []).append(s)
但是这样你只能把同样的东西hash起来,而不是一类东西。比如说你有一个dict构成的list叫sequence,需要按这些dict的某个key value分类,你还要对分类后的每个类别里面的这些dict各作一定的操作,你就需要用到Raymond实现的这个groupby,你就可以写:

totals = dict((key, group)
                  for key, group in groupby(sequence, lambda x: x.get(’Age’)))

最新Google排名算法专利

Wednesday, August 30th, 2006

原文:http://www.chinamyhosting.com/seoblog/2006/08/28/editorial-opinion/

8月22号,美国专利局刚刚批准了一份有关Google排名算法的专利,标题是”搜索结果排名中引入支持性编辑意见的系统和方法(System and method for supporting editorial opinion in the ranking of search results)“。

简单的说,这个专利提出了用人工编辑修正搜索结果的方法,大致程序是:

把搜索词按不同的话题分组,分组方法有可能类似于开放目录等目录结构。

编辑在不同搜索词分组下进行搜索,找出好的网站和坏的网站,编辑所做的评级被量化为某种参数。

如果某个搜索属于已经有人工编辑评级的范围,那么Google会查看自动算法排列出的结果与编辑给的评级有什么关系,尤其是自动排名结果中的网站与那些所谓好的网站(favored)和不好的网站(non-favored)有没有什么关系。

某一个关键词的搜索排名如果自动算法与编辑意见不一样的时候,把排名转换到已经引入编辑意见的结果,然后把已经改正的搜索结果返回给用户。

经过比较改正后的参数也会被记录在这个网站下,也就是这个网站将会获得某种程度的评级(好的或坏的)。

这只是我大概看一下的个人理解,请以Google专利原文为准。

有几个可以思考的地方。

这个专利是2000年12月递交的申请,今年8月22号才得到批准。专利申请和批准时间与Google是否已经开始使用这个系统,什么时间开始使用并没有太大的关系。也许早就在用,也许永远也不用。

所谓好的网站和坏的网站,好的网站(favored)是指有用的,包含某个话题下权威性的内容,坏网站(non-favored)是指有误导性或者过度自我表现宣传。这些好的网站和坏的网站的选择非常像TrustRank,选择一些网站然后延伸到其他网站。

Google提到一个例子,比如说针对关键词”免费下载(free download)”,那些真正提供免费下载的网站会被当作好的网站。而只是提到”免费”和”下载”这些词,但实际上并不提供免费下载的网站,会被当作不好的网站。

这个专利也提到资源性网站将具有更高的权威性,所以不必害怕导出链接,资源性网站的实质一般都是大量导出链接。

人工编辑所给出的评级是针对整个网站的,网页的排名也会被整个网站评级影响。编辑不可能看网站的某一个网页,也不可能知道每个网页的质量怎么样,所以网站总体质量变得越来越重要。

作者: Zac
原载: 搜索引擎优化每天一贴
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

Video and Audio Streaming with Flash……

Wednesday, August 30th, 2006

Video and Audio Streaming with and Open Source Tools

自己做个记录

http://klaus.geekserver.net/flash/streaming.html

提供本站 ejeliot 风格模板下载

Tuesday, August 29th, 2006

此风格是用的国外网站 ejeliot.com 的 dark 风格“改”出来的,非我原创。但是本人英语水平太差,所以没办法联系 ejeliot 的作者本人,不知道哪位朋友可以帮忙联系一下,问问是否可以使用和修改这套样式?

本来原定是上周六、日两天做出来一套 css zen garden 的风格的,但是很不幸,在周五的晚上陪伴了我两年的 XP 系统崩溃了,在重装系统时,每每在 DOS 引导状态下就自动重启了,所以只好安上了 Ubuntu 。

昨天周一,上班时想在午休的时候改一下模板,但是同事在上午通知说我的网站访问不了了。很糟糕!服务器倒了。今天(周二)刚刚能连上,所以答应朋友们的放源代码,我还是会做到的,只是自己的网站没“成功”改版。

唉……

因为工作的原因可能没有太多的时间来回答大家的问题,很抱歉。但是 ZBLOG 的模板机制还是很强大的,鼓励大家自己多动手改改。

2006-08-29
dengwei
http://www.donevii.com

本站下载:200608291129505000.zip

Live-share 下载:http://www.live-share.com/files/17401/ejeliot.zip.html ( 推荐这里下载,本站服务器有点慢 )

网页不需要漂亮

Tuesday, August 29th, 2006

刚刚看完一叶千鸟的《网页不需要漂亮》一文,以下是我在 Blueidea 上的评论。

原文URL:http://www.blueidea.com/design/doc/2006/3991.asp

不知道能不能打负分?

只是希望各位能从“网页标准”和“用户体验”中暂时脱离出来,冷静的思考一下。
我同意 dtdxrk 同学说的话……过犹不及啊

就像是以在学校上语文课时,老师让分析文章的中心思想与主要内容,非得把作者的文章捧得天花乱坠。每到老师叫到我时,我都总是回答不出来,到不是本人对文章没感觉也不是说文章不好,但是有很多文章读起来很有“感觉”,读完后也能让我自己思考很久,但是让我表达出来时可能是因为我的语言表达能力不好,总是说不明白,但就我个人认为,那是一种“意境”。

正如 dtdxrk 所说,鲁迅等一些我们课本上的名人,当出现明显的字、词、语法错误时,老师都适着用合理的逻辑来解释,比如“通假字”。为什么会这样?

无非是他们是“名人”,“名人”就不会犯错。

我对于一叶千鸟的每篇文章也都看了,其中不乏精彩内容,但是拜读完这篇文章后感觉就是我上文中的四字成语”过犹不及“,就像现在跟风一般的 WEB2.0 一样,大家又开始跟风用户体验了。

就像是 Jakob 和 Norman 的网站,Jakob 的网站在我看来质量很高,因为都是“好”的内容,但是体验很差。颜色搭配就不好,尽管我不是设计科班毕业,但是人眼来看,顶部的亮黄色和右侧的亮蓝色(这绿色?我说不准,反正大家看看就知道了)太刺眼了,并且从他的网站也看不出一点设计的元素。

如果说做到这样的称做返朴归真、化繁为简的话,那我想我们刚学用 FrontPage 和 Word 做网页的同学就都可以称得上是大师了。我对 Jakob 网站的解释就是,他“可能”没有时间来做设计;他“可能”不会“制作”网页;他“可能”懒得去做设计。就像是我们随手写的便签,很少会对内容的排版之类的进行设计吧?没必要非得找出一条合理的解释来形容 Jakob 的网页多么多么好,我们要勇于说“不”。

就像是电影里的那句话“开好车就是好人了?”

我也是支持标准,也同样关注用户体验的人,但是大家有时可以换一种角度来看问题。

还是那四个字“过犹不及”。

working with ubuntu

Sunday, August 27th, 2006

不知道说什么好了,XP竟然崩溃了……只能进安全模式,要是一正常启动的话就蓝屏,天啊,让我想起了以前用 95 、98 的日子。没办法了,为了能继续工作,只好重装系统。之前收到了 ubuntu 发过来的光盘,正好借这个机会装上,第一安装时,因为安装系统时我还在 X 里瞎弄,结果死机了。所以第二次再装系统时我就聪明了一点,在安装系统时,什么也不干,静静的躺在床上看着进度条一点点走,还好,在一个小时之后就安装完了。在正常启动后,用了一会,感觉挺好,Gaim , FF, Evolution 都挺好用 Ubuntu 也尽量按 XP 的用户习惯做,赞啊~!

P3P 应用释意

Saturday, August 26th, 2006

有 P3P 不代表能解决了跨域问题。

最具代表性的例子就是,

www.a.com/index.html 页面中有一个 <img src=" http;//www. b. com/example." />

而在 example. 中,当我们想设置 cookie 时,会因为 IE 默认的安全级别而禁止我们对 cookie 的写入。

cookie 会由持久cookie而被 IE 动态调整为会话cookie 也称为 session cookie 。session cookie != session

用途呢?很简单,比如一站式登录。

用户在 a.com 登录时同时在 b.com 的域下写入一个标记已经登录的信息,当用户跳转到 b.com 时不用再登录了。

当然,细节的地方还需要特殊注意了,免得产生安全问题。

有人问我 example. 可不可以把 cookie 写在其它域?

答案是不。因为安全的原因,example. 只能写在所在的域和页面所在域的上级域,也就是 www.b.com 和 b.com。

:)

周杰伦《依然范特西》-《千里之外》

Friday, August 25th, 2006

千里之外  
演唱:费玉清 周杰伦
歌词: 

屋檐如悬崖 风铃如沧海 我等燕归来 时间被安排 演一场意外 你悄然走开 故事在城外 浓雾散不开 看不清对白 你听不出来 风声不存在 是我在感慨 梦醒来 是谁在窗台 把结局打开 那薄如蝉翼的未来 经不起谁来拆 我送你离开 千里之外 你无声黑白 沉默年代 或许不该 太遥远的相爱 我送你离开 天涯之外 你是否还在 琴声何来 生死难猜 用一生 去等待 闻泪声入林 寻梨花白 只得一行 青苔 天在山之外 雨落花台 我两鬓斑白 闻泪声入林 寻梨花白 只得一行 青苔 天在山之外 雨落花台 我等你来 一身琉璃白 透明着尘埃 你无瑕的爱 你从雨中来 诗化了悲哀 我淋湿现在 芙蓉水面采 船行影犹在 你却不回来 被岁月覆盖 你说的花开 过去成空白 梦醒来 是谁在窗台 把结局打开 那薄如蝉翼的未来 经不起谁来拆 我送你离开 千里之外 你无声黑白 沉默年代 或许不该 太遥远的相爱 我送你离开 天涯之外 你是否还在 琴声何来 生死难猜 用一生 去等待

MP3: http://max.ersha.cn/uploadfile/qianlizhiwai.mp3

WMA: http://www.onems.com/media_file/qianlizhiwai.wma