官方网站原文:Learning Objective-J


使用对象和类

了解了Objective-J对象和类的基本情况下,接下来我们看一看如何使用它们。下面的代码创建一个新Person对象,并设置了其name属性:


var myPerson = [[Person alloc] init];
[myPerson setName:"John"];

Objective-J中的方法调用叫做“消息”(messages),为对象发送消息需要使用方括号表示法,如:[object message]。如前所述,有些方法是类方法,要通过类来调用——alloc就是一个类方法。Objective-J中的每个类都有一个名叫alloc的特殊的类方法,该方法返回相应类的一个新实例。

上面的例子在Person类上调用了alloc方法,结果返回了一个Person实例。然后,我们又调用了该实例的init方法。无论alloc还是init都返回一个对象的引用,而我们把这个对象赋给了变量myPerson。就像alloc一样,每个类都会从CPObject继承init方法。

alloc类方法与JavaScript、C++及Java语言中的new关键字相似,都是创建新的实例。而init实例方法则与这些语言中的构造器相似,都是对新创建的实例执行初始化。

有一些会指定自定义的init方法,如CPView的自定义init方法签名如下:


- (id)initWithFrame:(CGRect)aFrame

每个子类都要确保调用其父类的init方法。以下是前面Person类的自定义init方法,该方法直接接收名字参数:


- (id)initWithName:(CPString)aName
{
    self = [super init];
    if (self)
    {
        name = aName;
    }
    return self;
}

首先,调用超类的init方法,结果会返回一个对新初始化实例的引用。此时,必须把这个引用赋值给self变量(以防超类的init方法因新实例而抛弃原始的实例)。然后,检查self确保其正确返回,如果检查通过则执行针对当前类的操作,即把aName赋值给name。最后,返回self以便调用代码获得这个新初始化对象的引用。

Objective-J中的self等价于JavaScript中的this。可以说this引用JavaScript对象,而self引用Objective-J对象。与JavaScript类似,self.foo引用的是foo实例变量;但与JavaScript不同的是,self不是必需的,即可以在任何实例方法中使用foo。

Cappuccino中的很多类都为创建对象提供了一种略有不同的模型,但却更加便捷。在创建对象时,这些类不调用alloc和init,而是实现各自的类方法以返回新对象。注意,在类方法中,self引用类自身。


+ (id)personWithName:(CPString)aName
{
    return [[self alloc] initWithName:aName];
}

可以像下面这样调用这个类方法:


var joe = [Person personWithName:"Joe"];

导入代码

JavaScript所欠缺的一种众望所归的特性,就是以像Java或C一样的方式导入代码。对此,Objective-J添加了@import语句:


@import <Foundation/CPObject.j>
@import <AppKit/CPView.j>
@import "MyClass.j"

有两种类型的导入语句。尖括号表示框架代码,而引号表示本地项目代码。导入框架代码时,会使用内置的搜索路径机制从定义的位置中搜索目标文件。而导入本地代码时,则只会查找与导入文件相关的位置。

相关内容

Objective-J简明教程3-1:类、方法
Objective-J简明教程3-3:内存管理、类目、作用域

官方网站原文:Learning Objective-J


Objective-J是一门基于Objective-C的新编程语言,是JavaScript的超集。换句话说,任何有效的JavaScript代码同样也是有效的Objective-J代码。对于熟悉JavaScript及面向对象编程概念,特别是熟悉经典继承机制的读者而言,学习Objective-J并不难。熟悉Objective-C会有所帮助,但不是必需的。

Objective-J有两种对象:本地JavaScript(以下简称“JS”)对象和Objective-J对象。本地JS对象就是JavaScript内置的那些对象。Objective-J对象则是Objective-J添加的另一种本地对象。这些新增的对象基于类和经典继承构建(与C++或Java相似),而不是基于原型式继承构建。

在Objective-J中创建一个类很简单。下面就是一个Person类的代码,该类包含一个成员变量name:


@implementation Person : CPObject
{
CPString name;
}

@end

类定义始终以关键字@implementation开头,后跟类名。冒号后面的第三个项是要子类化的类。在这个例子中,我们想要子类化CPObject,而它是大多数类的顶级(root)类。你可能不需要超类,但终归还应该有一个比较稳妥(You don’t need a superclass, but nearly all the time you will want one.)。

在类声明之后,包含在一对花括号中的代码块,用于定义类的成员变量。每个变量声明独占一行,格式是类型、变量名和一个分号。从技术上角度讲,类型是可选的,但我们强烈建议不要省略它。声明变量的类型非常重要,如果不在类中声明成员变量的类型,该变量就会变成全局变量。

类定义的最后,需要添加一个@end关键字。

方法

跟对象一样,本地JavaScript函数在Objective-J中也没有什么不同。除了本地函数之外,Objective-J则为新的类系统添加了方法的概念。下面我们就为Person类添加一组访问器(accessor)方法:


- (void)setName:(CPString)aName
{
name = aName;
}

- (CPString)name
{
return name;
}

以上这些代码位于定义类的@implementation行及声明实例变量的代码块之后、@end关键字之前。熟悉C语言(包括JavaScript)编程风格的读者对这种语法应该不会陌生。这里唯一需要说明的就是方法声明。

每个方法签名以一个减号(-)或一个加号(+)开头。短划线表示实例方法,即能够基于实例变量调用的方法。由此可见,上面的两个方法都应该是实例方法,因为这两个方法的用途分别是设置和取得Person对象的实例变量。

减号/加号的后面是由一对圆括号包围的类型。这也没有什么特别的。同样,这里的类型声明虽然也是可选的,但我们仍然要强烈推荐,因为它有助于理解代码。最后,就是方法名。在Objective-J中,方法的参数与方法名是掺混在一块的。上面定义的两个方法分别是name和setName:,注意“setName”之后的冒号,这表明后面是一个参数。

如果某个方法有多个参数,则以冒号分隔每个参数。在下面的方法声明中,两个参数由一个标签(label)分隔,之后是冒号、类型和参数名:


- (void)setJobTitle:(CPString)aJobTitle company:(CPString)aCompany

在Objective-J中,方法名可以被其参数分隔开来。从技术上说,被分隔开的方法名并不命名参数;即上面的方法名是setJobTitle:company:。把方法名的第一部分与后续的标签按照次序连接起来,就是“实际的”方法名。

方法的参数必须按顺序传递,而且必须传递所有参数。例如,要调用上面定义的多参数方法,需要在每个标签后面传递数据:


[myPerson setJobTitle:"Founder" company:"280 North"];

这里,我们在每个冒号后面都指定了与参数名对应的输入值。对每个参数来说,都要重复“标签、冒号、输入”的格式。

有读者可能会问:实际的方法名是什么还有那么重要吗?在Objective-J和Cappuccino中,读者可以发现一种模式,即能够将方法作为参数传递给另一个方法。这种思想常见于委托和事件系统中。但是,由于Objective-J的方法不像JavaScript中那样是一类对象,因此引用它们需要使用特殊的表示法——@selector。如果想把前面的方法作为参数传递给另一个方法,可以使用下面的代码:


[fooObject setCallbackSelector:@selector(setJobTitle:company:)];

由此可知,通过@selector引用(并传递)的方法名需要包含冒号及相应的参数标签。

相关内容

Objective-J简明教程3-2:使用对象和类、导入代码
Objective-J简明教程3-3:内存管理、类目、作用域

5月24日(上周日)跟小白到天通苑“世奥得众人从乒乓球俱乐部”打球,碰巧上午10点有一场技术讲座。老板跟我说,这次请到的是国家高级教练员王吉生老师,还说王老师的文笔不错,写过不少书。提别人我可能不知道,但王吉生老师我可不陌生。我打球以来第一次郑重其事地换球拍,就缘自看了王老师的那本《乒乓球拍探秘》。真是巧啊!因为我和小白原本都是每周六上午来打球(顺便送孩子上乒乓球课),但赶上周六小白他们公司组织春(还算不算春天啊?)游,所以才改为周日。

10点前,设在里间的会场布置好了;撤掉了3张台子。我挑了第一排的座位,一是没带眼镜,二是怕没话筒听不清。9点50左右,一位身材稍胖,年逾六旬的高个子老者走进俱乐部。他上身穿黄色半袖乒乓球衣,下身穿深蓝色运动长裤,肩挎一个大运动包,身边还跟着一位小伙子。进入会场后,距离近了,我才看清,确实是王吉生老师。不过,跟《乒乓球探秘》封底的照片相比,大约差了有10岁。

10点整,讲座正式开始。王老师开门见山,一上来就给出了讲座的主题和提纲。他说,今天主要讲一讲弧圈球,分三个方面展开,首先讲弧圈球的起源和发展变化,然后讲讲弧圈球的动作要领,最后再讲一下怎样拉出更有威力的弧圈球。以下就是我通过回忆,记录的王老师讲课的内容要点。

一、乒乓球的起源及发展变化

乒乓球由日本人发明,后来传入欧洲。欧洲人将弧圈球发扬光大,不像日本人只会正手拉,而是创造了正反手两面拉的打法。但是,第一代弧圈球打法,不能将打和拉分开,是两个动作,影响协调,不利于连续击球。到了瓦尔德内尔和佩尔森时代,才真正解决打拉结合的问题——即通过将球拍立起来,用手腕调节其前倾/后仰角度,实现打和拉的无缝结合。比如,在触球瞬间,拍形前倾,摩擦多一些,就是拉;拍形后仰,撞击多一些,就是打。

然而,纵观世界乒坛,对弧圈球(或者说乒乓球)理解最深、最到位的,还要数中国人。例如,韩国人认为乒乓球致胜的要素,一是发球接发球,二是步伐灵活(能追上球),三是发力。但只有中国人抓住了要害,即中国人把现代乒乓球致胜的要素归结为:速度、力量、旋转、落点和弧线,一共5个因素。这5个因素在实战中可以有无数种组合,都可以构成致胜要素。例如,力量小但落在了对方空档区域的球,同样可以致胜。不过,在这5个因素中,挑战人类极限的只有速度。因为人反应需要一定的时间,只有速度才能挑战人的极限,所以也就成为这5个因素中的核心。也就是说,不管什么球,无论其力量大小、旋转强弱、落点优劣、弧线高低,只要速度够快,对方没时间反应,就能致胜。

但是,外国人认为我们理解得太复杂了;或者说,他们理解不了中国人的思想。

二、弧圈球的动作要领

拉弧圈球,最重要的是协调和发力。力量当然要源自身体,但最重要的是要知道,只有以支撑腿为轴(右手就是右腿)的旋转,才是关键。通过旋转身体,带动胳膊旋转向前,然后力量再通过小臂、通过手指(直拍背后的中指,横拍背后的食指)尖,传递给球面的有效击球区域。

三、哪种弧圈球最有威力

弧圈球有3种,取决于击球点。第一种击球高点,球在对方台面弹出后,弧线同样高;第二种击球下降前期,球在对方台面弹起后,弧线低平;第三种击球下降后期,此时摩擦较多,球在对方台面弹起后,会有变速,即向下沉。

总而言之,第一种和第三种弧圈球给对方造成的困难较大,不易回接。因为,第一种球向前拱,对方不易发力;第三种球,变速后下沉,要求对方在很短时间内反应,并抢到其上升期击球。

谢谢王老师!

王老师简介

王吉生,1946年生 籍贯:浙江。 

60年代是北京乒乓球队运动员,70年代开始担任练习员以来曾先后培训出阎桂丽、魏力婕、杨燕群、赵晓云等多名世界级优秀国手和全国冠军,曾被中国乒协评为优秀教练员。 

80年代曾先后应邀担任索马里、巴基斯坦等国家乒乓球队主教练,多次获得重大国际比赛冠军。是我国第一批高级教练员。 

90年代以后,投入乒乓球器材的研制开发,先后创造了“四拓”“郗恩庭”“世奥得”等多个知名品牌。并多次在“乒乓世界”上发表文章。

Dojo中的NodeList相当于jQuery中的“jQuery对象”——即通过$()函数返回的对象列表。dojo.query方法返回NodeList,通过NodeList可以实现方法连缀。在NodeList方法不够用的情况下,要扩展NodeList也很简单:使用dojo.extend()方法为dojo.NodeList的原型添加新方法即可。在这个文件(dojo_ori.html)中,我们为NodeList添加了一个innerHTML方法,用于取得每个DOM节点包含的文本内容。

如果这种扩展代码会逐渐多起来,Dojo推荐将扩展代码保存在模块中。创建模块也非常简单——在说明创建模块的步骤之前,需要先声明一个概念,即假设示例页面(前面的dojo_ori.html)所在目录为“当前目录”——步骤是:在当前目录创建一个文件夹名叫ext-dojo(这个名字是《Dojo权威指南》中推荐的),然后把扩展代码转移到一个独立的.js文件中(假设该文件名为foo.js——名称随意,最好遵循语义化原则,让人能够对该模块的作用一目了然),把这个文件保存在ext-dojo目录下,再在其第一行添加


dojo.provide("ext-dojo.foo");

这样,模块文件(即foo.js)就大功告成了!

最后,怎么调用上面创建的模块并使用其中的扩展功能(方法)呢?打开这个页面(dojo.html)看一下就明白了。比较一下dojo_ori.html和dojo.html,就会发现 dojo.html包含的如下几处不同。

(1)djConfig配置项中多了baseUrl:’./’设置,顾名思义,baseUrl的作用就是设置“基准URL”,而“./”表示当前目录,意思就是让dojo.require()语句以当前目录为起点,查找要加载的模块。

(2)在调用代码中,多了如下代码:


dojo.registerModulePath("ext-dojo", "./ext-dojo");
dojo.require("ext-dojo.foo");

同样, dojo.registerModulePath()方法的作用也可以“顾名思义”;即,注册模块路径。通过该方法的两个参数可知,一个指定了dojo.require()语句加载模块文件使用的“限定名”,另一个则是模块文件所在的真实(相对)路径。

最后,dojo.require()方法基于前面的配置加载模块文件。不知道读者朋友注意到了没有,dojo.require()与dojo.provide()的参数是完全对应的。

19.2009-05-18~2009-06-18

《jQuery 1.3基础教程》

原版书名:Learning jQuery 1.3
出 版 社:人民邮电出版社
出版日期:未知

 

18.2009-03-21~2009-05-15

《Web界面设计》

原版书名:Designing Web Interfaces: Principles and Patterns for Rich Interactions
出 版 社:电子工业出版社
出版日期:2009-8-1

 

17.2009-02-01~2009-03-20

《Flex 3实战》

原版书名:Flex 3 in Action
出 版 社:清华大学出版社
出版日期:预计2009-9-1

 

16.2008-09-15~2008-12-15

《Dojo权威指南》

原版书名:Dojo: The Definitive Guide
出 版 社:机械工业出版社
出版日期:2009-4-1

 

15.2008-06-10~2008-07-30

《Google Web Toolkit开发实战》

原版书名:Google Web Toolkit Solutions: More Cool & Useful Stuff
出 版 社:机械工业出版社
出版日期:2009-1-1

 

14.2008-04-01~2008-06-01

《Google Web Toolkit应用程序开发》

原版书名:Google Web Toolkit Applications
出 版 社:机械工业出版社
出版日期:2008-9-1

 

13.2008-02-01~2008-03-30

《写给大家看的CSS书》

原版书名:Stylin’ with CSS: A Designer’s Guide (2nd Edition)
出 版 社:人民邮电出版社
出版日期:2009-2-1

 

12.2008-01-12~2008-01-31

《jQuery基础教程》

原版书名:Learning jQuery: Better Interaction Design and Web Development with Simple JavaScript Techniques
出 版 社:人民邮电出版社
出版日期:2008-7-1

11.2008-01-01~2008-01-12

《CSS网站设计手册》

原版书名:CSS Web Site Design Hands on Training (Hands-On Training)
出 版 社:机械工业出版社
出版日期:2008-4-1

 

10.2007-12-01~2007-12-31

《JavaScript学习宝典(第2版)》

原版书名:The Book of JavaScript, 2nd Edition: A Practical Guide to Interactive Web Pages)
出 版 社:清华大学出版社
出版日期:2008-9-1 

 

9.2007-10-23~2007-11-30

《JavaScript DOM高级程序设计》

原版书名:AdvancED DOM Scripting: Dynamic Web Design Techniques
出 版 社:人民邮电出版社
出版日期:2008-7-1

 

8.2007-09-01~2007-10-22

《Ajax构建工具箱指南》

原版书名:Ajax Construction Kit: Building Plug-and-Play Ajax Applications
出 版 社:机械工业出版社
出版日期:2008-1-1

 

7.2007-06-13~2007-07-14

《正则表达式入门经典》

原版书名:Beginning Regular Expressions
出 版 社:清华大学出版社
出版日期:2008-10-1

 

6.2007-04-02~2006-06-05

《Adobe Photoshop Lightroom摄影师完全手册》

原版书名:The Adobe Photoshop Lightroom Book: The Complete Guide for Photographers
出 版 社:清华大学出版社
出版日期:2009-2-1

 

5.2007-02-06~2007-05-29

《PHP经典实例(第2版)》

原版书名:PHP Cookbook,2nd Edition
出 版 社:中国电力出版社
出版日期:预计2009-10-1

 

4.2006-09-13~2006-11-30

《层叠样式表权威指南(第2版)》

原版书名:Cascading Style Sheets: The Definitive Guide, 2nd Edition
出 版 社:学习翻译,未公开

 

3.2006-09-13~2006-09-30

《10分钟学会正则表达式》

原版书名:Sams Teach Yourself Regular Expressions in 10 Minutes
出 版 社:学习翻译,未公开 

 

2.2006-09-01~2009- 09-12

《从DHTML到DOM脚本编程》

原版文章:From DHTML To DOMScripting
出 版 社:学习翻译,未公开 

 

1.2006-05-28~2006-08-20

《CSS设计师手册》

原版书名:Stylin’ with CSS: A Designer’s Guide (1nd Edition) 
出 版 社:学习翻译,未公开

Dynamics of Software Development
by Jim McCarthy (Author) 

Paperback: 224 pages
Publisher: Microsoft Press (August 9, 2006)
Language: English
ISBN-10: 0735623198
ISBN-13: 978-0735623194

中文书名:《微软软件研发致胜之道:来自Visual C++开发团队的经验结晶》

本书前一版(1995版)中文书名《微软团队:成功秘诀》,由机械工业出版社引进出版,受到读者的热烈欢迎。作者JimcMcCarthy,10年前即任微软VisualcC++事业部的总监。10年后,作者在上一版基础上,充实了10年来的心得和经验,新增“2006部分”,对上一版作了大幅修订和扩充。为传承世界一流软件研发团队的宝贵经验,人民邮电出版社引进了这本书的最新版本,并诚邀有志成为名著译者的朋友负责本书翻译。

联系人:傅志红  
电子邮件:fuzh[at]turingbook.com (注:须将[at]替换成@
电话:010-51095181-610

在Using Drupal(O’Reilly页面Amazon页面)这本书的配套站点(usingdrupal.com)中,作者(均来自Lullabot团队)在感谢Ivan Zugec同学为他们提供站点和域名之余,又推荐了他制作的Drupal tutorials and screencasts

虽然不是头一次见到Screencast,但毕竟也算个新词儿——类似的新词儿还有Webcast(网络视频、网络直播、网上节目)、Podcast(Ipod+broadcasting,播客?行动数位广播?)。有人把这个“术语”翻译为“截屏视频”或“抓屏视频”。意思没有什么问题;可似乎还欠缺那么一点点味道,比如说发音上难以对应。抱着这种求全的心理,开始搜索。结果,不期而遇了一个在线制作Screencast的站点——ScreenToaster(Screencast吐司机?)

这个站点好。可以在线录制屏幕操作,制作Screencast。而且,录制完毕后,可以直接上传到这个站点共享,也可以上传到YouTube;还可以直接点击相应图标,把视频发送到一大堆社区网络服务去共享(前提是必须拥有这些服务的账户;可以即时登录),有TwitterFacebookMySpaceFriendFeedGoogle BookmarksYahoo! BuzzStumbleUponDiggDelicious。还可以另存为.mov或flash格式,然后下载。

说到这,这篇文章的主题就已经发散了(由讨论Screencast的译法变成了讨论ScreenToaster)。既然如此,就把发散进行到底吧!

“五·一”节期间,抽空仿照译言的批眉功能做了一个小页面。由于一直比较忙,就做了个开头(前端部分),但还有待于完善;而且,后端还没着手做。看到ScreenToaster之后,忽然想到用它来制作一个“使用教程”,倒是蛮爽啊(以前用的都是Windows应用程序)。Action一番,得到如下视频:

下面简单分析一下:

译言使用MooTools框架实现交互,利用CSS定位“图钉”,通过Ajax与后端通信。这种解决方案思路虽然比较清晰,但过于简单,也缺乏灵活性。

比如,为了通过CSS定位正确反映眉批位置,页面布局必须“写死”,页面版式只能居中,两栏的宽度也不能再改了;一改,“图钉”的绝对位置就跟正文对不上号了。另外,被批注的文字在常规状态下也没有通过颜色变化来突出显示,只有在鼠标悬停于“图钉”上时,才知道批注的是哪句话;不够直观。

我在考虑另一种方案:把为了保存眉批内容而动态创建的图像和DOM元素,直接作为正文的内容写到数据库中。记得我翻译的《JavaScript DOM高级程序设计》中有个DOM生成器的案例,是把HTML转换为DOM结构;现在的问题恰好相反,即把DOM结构转换成HTML,然再通过Ajax传给后台。 有时间再考虑一下,眼下看来似乎还是可行的。

不知天下高手还有没有更好的解决方案;当然,最好的解决方案应该参考Google Docs,不过其JS好像是加了密的(可一点儿也不甜噢!:))。

碰到了primitive interfaces这个词,感觉不能泛泛地翻译。经过搜索,找到了一篇名为Primitive interface structures in browsing the Web的论文。该论文大概发表于1998年在澳大利亚召开的“计算机人机交互会议”的《会刊》上面。查看全文是要收费的,所幸“摘要”部分可以free of charge。现摘录并试译如下,作为存档。

Primitive interface structures in browsing the Web
Rho, Y.; Gedeon, T.D.
Computer Human Interaction Conference, 1998. Proceedings. 1998 Australasian
Volume , Issue , 30 Nov-4 Dec 1998 Page(s):304 – 305
Digital Object Identifier   10.1109/OZCHI.1998.732228
Summary:Browsing WWW documents is interactive. Not only their layout but also their interaction structures should be organised well in order to be effective to the reader and to get engineering benefits by composition. We define four primitive logical browsing structures. These are the sequential, go-to, nested and iterative structures. To support these primitive browsing structures, five groups of interface structures are proposed in this paper. These are the sequential, go-to, nested, loop and evolutionary interface structures

Web浏览中的基本界面结构
Rho, Y.; Gedeon, T.D.
原载计算机人机交互会议《学报(1998)》(澳大利亚,1998)
卷,期,1998年11月30日~12月4日,页:304~305
数字对象识别 10.1109/OZCHI.1998.732228
摘要:浏览WWW文档是一个交互的过程。除布局之外,还应合理组织文档的交互结构,以方便人类阅读和自动化处理。本论文定义了4种基本的逻辑浏览结构,分别是连续型、跳转型、嵌套型和迭代型。为了支持这些基本的浏览结构,本论文建议成立5个界面结构小组,分别是连续结构组、跳转结构组、嵌套结构组、循环结构组和界面结构改进组。

为什么要查“圣诞树”呢?因为看到一本本版Java教材中提到,Java语言的前身是Oak,进而解释说“Oak是一种橡树的名字”。那么,Oak在英文中到底是指“橡树”呢,还是指“一种橡树的名字”呢?查来查去,Oak就是我们中文里说的“橡树”(或者“栎树”),没有词典解释说Oak是“一种橡树的名字”。可见,说“Oak是一种橡树的名字”,犹如说“橡树是一种橡树的名字”,这简直岂有此理?!而查“圣诞树”,原意是想请教一下作者“Christmas tree”是“圣诞树”还是“一种圣诞树的名字”?结果就有了Christmas与Xmas之辨,也算是无心插柳。

事实上,畅销书作者Ben Forta老师的家就安在Oak Park(橡树园),只不过是美国密歇根州的那个Oak Park,不是建筑大师弗兰克·赖特和文学家海明威的故乡,芝加哥城西10英里的伊利诺伊州奥克帕克(Oak Park)

提到橡树,不禁忆起学生时代喜欢的一首诗——《致橡树》。舒婷老师在这首脍炙人口的诗作中,以橡树和木棉作喻,热情讴歌了女性的人格独立及崭新的爱情观。这首诗作优美、隽永,今日读来仍有沁人心脾、荡涤灵魂之感。现将中、英两个版本全文摘录如下,也给这次“探索之旅”画上一个颇有艺术性的句号。

致橡树

我如果爱你——绝不象攀援的凌霄花/借你的高枝炫耀自己
我如果爱你——绝不学痴情的鸟儿/为绿荫重复单纯的歌曲
也不止象泉源/常年送来清凉的慰藉
也不止象险峰/增加你的高度/衬托你的威仪
甚至日光/甚至春雨

不,这些都还不够/我必须是你近旁的一株木棉
作为树的形象和你站在一起
根,紧握在地下
叶,相触在云里
每一阵风过/我们都互相致意
但没有人/听懂我们的言语

你有你的铜枝铁干/象刀象剑也象戟
我有我红硕的花朵/象沉重的叹息/又象英雄的火炬
我们分担寒潮风雷霹雳
我们共享雾霭流岚虹霓
仿佛永远分离/却又终身相依

这才是伟大的爱情/坚贞就在这里
爱——不仅爱你伟岸的身躯
也爱你坚持的位置/足下的土地

Ode to the Oak

If I love you
— I will never be a trumpet creeper Clinging to your body to highlight my height;
If I love you
— I will never be a spoony bird Repeating the monotonous song for a green shade;
Nor a spring That brings perennial cool solace;
Nor steep peak That increases your highness, reflect your eminence.
Even the sunlight. Even the spring rain.

No, all these are not sufficient! I must be a ceiba stand by your side,
A tree With roots clinched underground, And leaves touched in the cloud.
We nod to each other, When each gust passes by,
But nobody Can understand our words.

You have your iron body, Like a knife, a sword, As well as a halberd;
I have my red flowers, Like a heavy sigh, And a valiant torch.
We share cold, storms and thunders;
We enjoy brume, mist and neons, Seems we are part always,
But we are together forever.

Only this can be called a great love, The loyalty is this:
Not only your manful body I love,
But also the place you hold, and the land under your foot.

Christmas与Xmas

2009年05月11日 原创, 翻译

查“圣诞树”(这里解释了为什么要查“圣诞树”),得到两个答案“Christmas tree”和“Xmas tree”。Xmas也是“圣诞节”的意思吗?《牛津高阶》云:“(informal, written) used as a short way of writing ‘Christmas’(Christmas的缩写)圣诞节”。为什么“X”可以代表“Christ”?《英汉大词典》说:“Gr chix + (CHRIST)MAS;见XP”。又查“XP”,曰“Christ的表记(希腊词ΧΡΙΣΤΟΣ[Christos]的开首两个字母chi和rho)”。大致是这个意思,但还不太清楚。遂在“爱词霸”上搜着如下解释

“圣诞节”(Christmas)一词,乃由Christ“基督”与Mass“礼拜”、“弥撒”(天主教之称呼)两个字组合而成,指耶稣基督降生的日子里,众人齐聚一堂礼拜记念主为爱降生。 Christmas的原意既是记念主的节日,当然基督应该是一切活动的中心主题,以记念耶稣基督降生为人,道成肉身拯救世人的恩典。而Christmas里的Christ用X代替,则是因Christ一词的希腊文Χριστοs的第一个字母大写写法很像英文的X,初期的基督徒因为使用语言为希腊文,确实常常以X来作基督的缩写,语言发展成英语系后,有人索性将Christmas写成Xmas。                

所以,Xmas是希腊文和英文的混合体,而非一个正式用法的英文字,当然更不可以加上撇号成为X\’mas。在外国许多商家在圣诞节期间,挂出Merry Xmas两个字海报(不是Merry X\’mas),但在正式的场合仍以Christmas为正确圣诞节名称。,这两个字原来的意义是一样的。

只是今日,随着时代的变迁以及物质主义的结果,许多人早已忘记了圣诞节的原始意义,转以世俗化的眼光,将圣诞节和狂欢划上等号。有人甚至把\”Christmas\”的缩写\”Xmas\”用另类的说法,加以扭曲,将X比喻为“莫名其妙”的记号,圣诞的意义便已遭到严重的曲解。

最后,又查英文维基Christmas词条页面,见与上述解释相类,此番求证方才告一段落。

附:《希腊字母发音对照表》(希腊字母发音及含义)(希腊字母书写方法

序号 大写 小写 英文注音 中文读音
 1  Α  α  alpha  阿尔法
 2  Β  β  beta  贝塔
 3  Γ  γ  gamma  伽马
 4  Δ  δ  delta  德尔塔
 5  Ε  ε  epsilon  伊普西龙
 6  Ζ  ζ  zeta  截塔
 7  Η  η  eta  艾塔
 8  Θ  θ  theta  西塔
 9  Ι  ι  iota  约塔
 10  Κ  κ  kappa  卡帕
 11  Λ  λ  lambda  兰布达
 12  Μ  μ  mu  缪
 13  Ν  ν  nu  纽
 14  Ξ  ξ  xi  克西
 15  Ο  ο  omicron  奥密克戎
 16  Π  π  pi  派
 17  Ρ  ρ  rho  肉
 18  Σ  σ  sigma  西格马
 19  Τ  τ  tau  套
 20  Υ  υ  upsilon  宇普西龙
 21  Φ  φ  phi  佛爱
 22  Χ  χ  chi  西
 23  Ψ  ψ  psi  普西
 24  Ω  ω  omega  欧米伽