【Android】PA4D_CH6 使用Internat资源

  1. android中,基本使用网络资源方式如下(同步)
    try {
          URL url = new URL(myFeed);
    
          // Create a new HTTP URL connection
          URLConnection connection = url.openConnection();
          HttpURLConnection httpConnection = (HttpURLConnection)connection;
    
          int responseCode = httpConnection.getResponseCode();
          if (responseCode == HttpURLConnection.HTTP_OK) {
            InputStream in = httpConnection.getInputStream();
            processStream(in);
          }
        }
        catch (MalformedURLException e) {
          Log.d(TAG, "Malformed URL Exception.", e);
        }
        catch (IOException e) {
          Log.d(TAG, "IO Exception.", e);
        }
    
  2. 于此同时,android中解析XML主要有3种,分别为DOM解析器、SAX解析器和PULL解析器。
    1. DOM解析器,DomBuilder,通过DocumentBuilderFactory获取。这两个类都是javax包中定义的,不同于j2SE的是,android中重写了后者,直接获取了apache harmony的实现,不幸的是,harmony的项目在2011年时候已经被apache放弃了。
    2. SAX解析器。SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
      SAXParserFactory factory=SAXParserFactory.newInstance();  
      SAXParser parser=factory.newSAXParser();  
      MyHandel handel=new MyHandel ();  //此处MyHandle继承自DefaultHandel
      parser.parse(inputStream, handel);
      
    3. PULL解析器。以下来自android training,google比较推荐使用这个解析器
      为什么要学习PULL解析器呢?因为PULL解析是在XML文档中寻找想要的标记,把需要的内容拉入内存,而不是把整个文档都拉入内存,这种方式比较适合手机等内存有限的小型的移动设备。

      We recommend XmlPullParser, which is an efficient and maintainable way to parse XML on Android. Historically Android has had two implementations of this interface:

【迁移】Think In Java 多态学习

    1. 动态绑定与前期绑定
    2. Static对象与Final对象不能覆盖,private 对象(方法的话,自动属于final)也不能进行覆盖。
    3. 复杂对象调用构造器要遵照下面的顺序
      1. 调用基类的构造器,这个过程会递归的调用下去。
      2. 按照声明顺序调用成员的初始化方法。
      3. 调用导出类构造器主体。
    4. 协变返回类型,导出类中被覆盖的方法可以返回基类方法的返回值类型的某种导出类型。
    5. 设计考虑时候优先考虑组合,而非继承
    6. 状态模式,动态的改变类型

//: polymorphism/Transmogrify.java
// Dynamically changing the behavior of an object
// via composition (the "State" design pattern).
import static net.mindview.util.Print.*;</p>

<p>class Actor {
  public void act() {}
}</p>

<p>class HappyActor extends Actor {
  public void act() { print(&quot;HappyActor&quot;); }
}</p>

<p>class SadActor extends Actor {
  public void act() { print(&quot;SadActor&quot;); }
}</p>

<p>class Stage {
  private Actor actor = new HappyActor();
  public void change() { actor = new SadActor(); }
  public void performPlay() { actor.act(); }
}</p>

<p>public class Transmogrify {
  public static void main(String[] args) {
    Stage stage = new Stage();
    stage.performPlay();
    stage.change();// 状态的改变
    stage.performPlay();
  }
} /* Output:
HappyActor
SadActor
*/

    1. 如果必须要执行清理,清理的顺序需要和声明顺序是相反的, 这样的话。
    2. 多态中潜藏的问题

//: polymorphism/PolyConstructors.java
// Constructors and polymorphism
// don't produce what you might expect.
import static net.mindview.util.Print.*;</p>

<p>class Glyph {
  void draw() { print(&quot;Glyph.draw()&quot;); }
  Glyph() {
    print(&quot;Glyph() before draw()&quot;);
    draw();// 执行这个方法时候,调用的其实是被覆盖以后的方法
    print(&quot;Glyph() after draw()&quot;);
  }
}</p>

<p>class RoundGlyph extends Glyph {
  private int radius = 1;//执行这一步以前, 会先执行父类的构造器, 然后父类的构造器又会直接调用覆盖以后的方法
  RoundGlyph(int r) {
    radius = r;
    print(&quot;RoundGlyph.RoundGlyph(), radius = &quot; + radius);
  }
  void draw() {
    print(&quot;RoundGlyph.draw(), radius = &quot; + radius);
  }
}</p>

<p>public class PolyConstructors {
  public static void main(String[] args) {
    new RoundGlyph(5);
  }
} /* Output:
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5
*/

【迁移】[转]段誉和男人们的普遍困境

段誉和男人们的普遍困境

作者: 章晋源

来源:浮游于斯

段誉在天龙中是个奇特的人物,当这世上所有人不是耽于高深武学,就是囿于家仇国恨,甚至还有慕容一家,为了一个兴复大梦,搭上了满门香火,就是在这样一个熙熙攘攘,利来利往的光怪世界里,段誉却自顾自地只做一件事,那就是谈情说爱。

天龙是武侠不是言情,谈情说爱大概不是主旨,主旨说的是众生皆苦,说的是世人都困居其中苦不得出,而尚不自知,所以金庸写段誉,恐怕写的是男人们的普遍困境。

段誉其人,在“珍珑棋局”一章里说的很清楚,症结是“爱心太重,不肯有所弃”,所以才会有开篇逢人便爱,遇王语嫣后一见误终生,苦求不得,既得患失,失而复得,得非所求的人生际遇。

写段誉,写的不单单是一种人生,一种际遇,金庸的毒辣之处在于,段誉无论选择如何,福缘如何,左支右闪,都躲不过一个苦字,“痴”毒不去,苦海无涯,所以天龙中不仅仅只有一个段誉,也不仅仅只是段誉一个人的困境。

仔细分辨,逢人便爱不过段正淳,苦求不得还有游坦之,既得患失映照钟万仇,得非所求恐怕无崖子,甚至赵钱孙、萧峰、阿紫、虚竹子的命运都暗含其中,当真是我相人相,具为一相,我命人命,实为一命,佛经太拗口,用现在的话说,恐怕就是男人们的普遍困境了。

大理镇南王段正淳是个神奇的人,走到哪儿似乎都能遇到旧时旧爱,以至于可怜的段誉走到哪儿遇到的都是他的各路表妹,而且段正淳的情人们,都称的上脾气古怪,随随便便一个马夫人康敏,就害的萧峰身败名裂,一生凄苦,而段正淳偏偏又有本事,让所有女人们都念他不忘,甚至彼此遇到,都能头仇敌恺,互相见怜。

举个例子,最后曼陀山庄一节,除了康敏所有人都悉数到齐,本来打算杀光段正淳的这些旧相好们的王夫人,见到诸女是什么反应?

王夫人目不转瞬的凝视刀白凤、甘宝宝、秦红棉、阮星竹等四个女子,只觉各有各的妩媚,各有各的俏丽,虽不自惭形秽,但若以“骚狐狸”、“贱女人”相称,心中也觉不妥,一股“我见犹怜,何况老奴”之意,不禁油然而生。

王夫人是什么人,曼陀山庄主人,动不动就要抓来负心男子,剁成肉酱,用作花泥,绝不是什么善男信女,犹有如此感触,段正淳的过人之处,可见一斑。

所谓大被同眠,齐人之福,恐怕也算是男人的终极梦想之一,看天龙一书,对着段正淳羡慕嫉妒恨的恐怕为数不少,不过不要急,金庸既然讲的是世人皆苦,那么如此美梦,马上就会被轻轻碾碎。

佛法讲世人受苦,是由“贪嗔痴”三毒而起,书中主角,萧峰冲动易怒,落得一个“嗔”字,段誉情根深种,自然是要分到一个“痴”字。

但是“痴”,又有不一样的痴法,段正淳不是简简单单的逢人便爱,风流薄情,他的过人之处在于对每个女子,都是真心所致,皆是一片痴情,按金庸的说法是“段正淳虽然秉性风流,用情不专,但当和每一个女子热恋之际,却也是一片至诚,恨不得将自己的心掏出来,将肉割下来给了对方。”

《天龙八部》正文之前有个《释名篇》,里面讲到天众虽然福报深远,但也难逃一死,天人死前即有五衰,其中一衰称作“玉女离散”,天人五衰是天众最大的痛苦所在。

所以段正淳最后的结局,是亲眼见到所爱诸女一个一个死在慕容复剑下,其中痛苦,可想而知,摘原话录下:

眼看四个女子尸横就地,王夫人的头搁在秦红棉的腿上,甘宝宝的身子横架在阮星竹的小腹,四个女子生前个个曾为自己尝尽相思之苦,心伤肠断,欢少忧多,到头来又为自己而死于非命。当阮星竹为慕容复所杀之时,段正淳已决心殉情,此刻更无他念。

段正淳其人,逢人便爱,这也算了,苦在个个都是真心,个个真心本可尽收府中,然而苦在元配夫人抵死不许,抵死不许也就算了,偏偏她心中不甘,生下唯一的宝贝儿子段誉却是延庆太子的,这样她对他不起,也就算了,偏偏自尽之前,吐露真言,哭道:“淳哥,淳哥,你便有一千个,一万个女人,我也是一般爱你。我有时心中想不开,生你的气,可是……那是从前的事了……那也正是为了爱你……”

然而,金庸又怎会让他闻言含笑而去呢,是以“段正淳这一剑对准了自己心脏刺入,剑到气绝,已听不见她的话了。”

又回到段誉,金庸写书旨在说明世人皆苦,苦由三毒起,小说家想说一个人物苦自然容易,情节里面劳其筋骨,饿其体肤就是了,但是如果有人辩解,段誉之苦非由“痴毒”起,而是由王语嫣起,那又如何回答?

回答就是段正淳,即便不遇上王语嫣,段誉恐怕会是另一个段正淳。

开篇段誉初遇钟灵,“见她站在自己身前,相距不过尺许,吹气如兰,越看越美,一时舍不得离开”,之后为她脱鞋,更是“俯身去除她鞋子,左手拿住她足裸,只觉入手纤细,不盈一握,心中微微一荡,抬起头来,和钟灵相对一笑,段誉在火光之下,见到她脸颊上亮晶晶地兀自挂着几滴泪珠,目光中蕴满笑意,不由看得看得痴了”。

再过了不到几天,段誉又在无量山中遇到了神仙姊姊的雕像,“走到玉像前,痴痴的呆看,瞧着她那有若冰雪的肌肤,说甚么也不敢伸出一根小指头去轻轻抚摸一下,心中着魔,鼻端竟似隐隐闻到兰麝般馥郁馨香,由爱生敬,由敬成痴”。

这还不算完,又过了不到几天,他因缘巧合之下,又遇到了木婉清,“(段誉)走到离她背后约莫两尺之处,忽然闻到一阵香气,似兰非兰,似麝非麝,气息虽不甚浓,但幽幽沉沉,甜甜腻腻,闻着不由心中一荡”。

短短几天,段誉心中几荡几痴,而且这一切都是在自己中断肠草之毒,七日之后性命不保,而钟灵又被神农帮所制,也有生命危险的情况下发生的,恐怕深有乃父之风,即便日后足不出大理,不遇上王语嫣,段正淳之苦,也在所难免。

之后屡生变故,钟灵、木婉清都成了自己妹妹,段誉更是北上江南,遇到了一误终生的王语嫣,如此波折几番后,再次相遇钟、木二人已经是全书最后几章了。

这次相遇有一段戏剧性的对白:

段誉纵马驰到木婉清身旁,伸手往她肩上搭去,柔声道:“妹子,这些日子来你在哪里?我可想得你好苦!”木婉清一缩肩,避开他手,转过头来,冷冷的道:“你想我?你为什么想我?你当真想我了?”段誉一呆,她这三句问话,自己可一句也答不上来。

要知道这个时候,王语嫣就在段誉身边,而段誉分离之后,到底有没有想起木婉清,我们不得而知,至少书中,却是几乎一字未提。

也难怪木婉清要冷哼一声,似嗔似怨地说出了这么一番话:

木婉清道:“哼,我瞧你和爹爹也没什么两样,当真是有其父必有其子。只不过你没爹爹这么好福气。”她叹了口气,说道:“像我妈,背后说起爹爹来,恨得什么似的,可是一见了面,却又眉开眼笑,什么都原谅了。现下的年轻姑娘哪,可再没我妈这么好了。”

姑娘啊,姑娘,这番话说的,可是你自己?

说完木婉清,又说回钟灵,前面木婉清叹过一声“现下的年轻姑娘哪,可再没我妈这么好了。”这话恐怕是错了,木婉清自己对段誉如何,读者心知肚明,钟灵姑娘的表现,可真算得上气度天龙第一,可与阿朱同列。

少林寺一节,段誉被鸠摩智所伤后被萧峰安顿在山中小屋,恰好遇上了苦苦从大理孤身一人寻他至此的钟灵,几天悉心照料之后,忽然有人在段誉面前提起了王语嫣,段誉这货自然是神为之牵,钟灵看在眼里,金庸写道:

见了他如此情急模样,不用他再说什么话,钟灵自也知道在他心目之中,那个王姑娘比之自己不知是紧多少倍。她性子爽朗,先前心中一阵难过,到这时已淡了许多。倘若王语嫣和她易地耐而处,得知自己意中人移情别恋,自必凄然欲绝;木婉清多半是立即一箭向段誉射去;阿紫则是设法去将王语嫣害死。钟灵却道:“别起身,小心伤口破裂,又会流血。”

这叫什么,这叫大妇之风,这就叫正室范儿,“钟灵却道”四个字,真是为之绝倒。

严格说起来,金庸书中的男女爱情,是有些大男子主义倾向的,书中女子总是莫名其妙地就爱上男主角,但是天龙是一本要把“情”严肃探讨一番的作品,自然不会这么草率。

对于钟灵、木婉清对段誉,王语嫣对慕容复,阿紫对萧峰为什么会有如此心事,萧大侠有过一段精彩之极的评论,按理说萧大侠应该不懂女人,但是金庸却懂,故此借萧峰之口,说了这么一段话:

萧峰瞧着阿紫的背影,心想:“这游坦之对她钟情之深,当真古今少有。只因阿紫情窦初开之时,恰和我朝夕相处,她重伤之际,我又不避男女之嫌,尽心照料,以致惹得她对我生出一片满是孩子气的痴心。我务须叫她回到游君身边,人家如此待她,她如背弃这双眼已盲之人,老天爷也是不容。”

“孩子气的痴心”这六个字,用的真是冷酷之极,又正确之极,恐怕也是金庸对自己前几本书中爱情的一个自我总结,自天龙之后,无论侠客行、笑傲还是鹿鼎记,都鲜少这种无缘无故,“孩子气的痴心”了。

诸位看官,想想自己的初恋,想想同桌的你,又有多少事落在了这六个字之中呢?

所以,全书中,大多数的爱情都是有缘有故,情理之中的,下面拿天龙中的第一爱情,萧峰与阿朱一段来举例。

如果没看过原著,但凭电视剧的印象,恐怕有人会得出萧峰和阿朱一见钟情的印象,这恐怕不太对。

阿朱潜入少林寺盗易筋经,后被玄慈误伤,萧峰一路不惜真气相救阿朱的原因有三,一是阿朱为他所累,心中惭愧,二是阿朱是慕容家丫环,萧峰与慕容复算是神交,三是阿朱柔弱女子,萧峰有些不忍,但算来算去,其中恐怕是没有一个情字的,而后二人在客栈中有一段对话:

阿朱安慰他道:“乔大爷,他们说你是契丹人,我看定是诬蔑造谣。别说你慷慨仁义,四海闻名,单是你对我如此一个微不足道的小丫环,也这般尽心看顾,契丹人残毒如虎狼一般,跟你是天上地下,如何能够相比?”

乔峰道:“阿朱,倘若我真是契丹人呢,你还受不受我看顾?”  

其时中土汉人,对契丹切齿痛恨,视作毒蛇猛兽一般,阿朱一怔,说道:“你别胡思乱想,那决计不会。契丹族中要是能出如你这样的好人,咱们大家也不会痛恨契丹人了。” 

乔峰嘿然不语,心道:“如果我真是契丹人,连阿朱这样的小丫环也不会理我了。”霎时之间,只觉天地虽大,竟无自己容身之处,

我们看,这一段中,阿朱对萧大侠固然只是感恩之情,还没有上升到日后不计种族身份的爱恋之情,而萧峰眼里,阿朱却也只是“连阿朱这样的小丫环”,你要硬说俩人此刻一见钟情,恐怕不妥。

再往后看,萧峰为阿朱闯聚贤庄,与中原群雄厮杀之下,屡遭危险,他是这么想的:

他干冒奇险将阿朱送到聚贤庄,若未得薛神医出手医治,便任由她真气衷竭而死,实在太也可惜,可是这时候以内力续她真气,那便是用自己性命来换她性命。阿朱只不过是道上邂逅相逢的一个小丫头,跟她说不上有什么交情,出力相救,还是寻常的侠义之行,但要以自己性命去换她一命,可说不过去了,“她既非我的亲人,又不是有恩于我,须当报答。我尽力而为到了这步田地,也已仁至义尽,对得她住。我立时便走,薛神医能不能救她,只好瞧她的运气了。”  

当下拾起地下两面圆盾,双手连续使出“大鹏展翅”的招数,两圈白光滚滚向外翻动,径向厅口冲出。

“仁至义尽”四个字,各位可是有所领悟?

再之后,萧峰为萧远山所救,伤势养好之后,又想起阿朱:

心下寻思:“阿朱落入他们手中,要死便早已死了,倘若能活,也不用我再去管她。眼前第一件要紧事,是要查明我到底是何等样人。爹娘师父,于一日之间逝世,我的身世之谜更是难明,须得到雁门关外,却瞧瞧那石壁上的遗文。”

看到这里,如果还有些念想,那我只好举出下面一段,我都不忍心看下去的描述了。

这里讲的是阿朱苦苦找寻萧峰,在雁门关外等了五天五夜,终于等到了萧峰,然而他却因为疑心阿朱乔装他来杀人,逼问阿朱的情节,摘录几段如下:

乔峰道:“我师父给人击伤,他一见我之后,便说是我下的毒手,难道还不是你么?”他说到这里,右掌微微抬起,脸上布满了杀气,只要她对答稍有不善,这一掌落将下去,便有十个阿朱,也登时毙了。

阿朱见他满脸杀气,目光中尽是怒火,心中十分害怕,不自禁的退了两步。只要再退两步,那便是万丈深渊。

乔峰厉声道:“站着,别动!”  

阿朱吓得泪水点点从颊边滚下,颤声道:“我没……杀你父母,没……没杀你师父。你师父这么大……大的本事,我怎能杀得了他?”

再往后,萧峰巧合之下救了一群契丹难民,见到了契丹人胸口的狼头刺青,终于确认了自己是契丹人的身份:

阿朱和所有汉人一般,本来也是痛恨契丹人入骨,但乔峰在她心中,乃是天神一般的人物,别说他只是契丹人,便是魔鬼猛兽,她也不愿离之而去,心想:“他这时心中难受,须得对他好好劝解慰。”柔声道:“汉人中有好人坏人,契丹人中,自然也有好人坏人。乔大爷,你别把这种事放在心上。阿朱的性命是你救的,你是汉人也好,是契丹人也好,对我全无分别。”  

乔峰冷冷的道:“我不用你可怜,你心中瞧不起我,也不必假惺惺的说什么好话。我救你性命,非出本心,只不过一时逞强好胜。此事一笔勾销,你快快去吧。”

我都要为阿朱感到不值了。

前面说过,“贪嗔痴”三毒为苦,段誉取个“痴”字,萧峰取个“嗔”字,想想萧峰本有回头路,但是聚贤庄中一怒之下连杀中原群雄,昔日朋友,这里雁门关下,又一怒之间逼问阿朱,对她冷言冷语,日后更是受马夫人所误,一怒之下亲手打死了乔装段正淳的阿朱,萧峰一生之苦,恐怕不在际遇,而在他自己说过的那句话:

“我生平最受不得给人冤枉。”

想想当初给阿朱讲的故事,萧峰小时候,只因受了父母冤枉,就盛怒之下捅死了累他受冤的医生,一生悲剧,恐怕在此已经若隐若现。

何况更苦的是,报冤以直,也就算了,可是说来说去,竟然没有人,是真的“冤枉”了萧峰。

实在是苦不堪言。

好像扯远了,回到正题。

举了这么长一个例子,我想要说明的,是天龙一书中没有无缘无故的钟情,否则恐怕会是一段错爱。

我们来看看段誉初见王语嫣是什么反应的,王语嫣是典型的人虽未至,声已先到的出场方式:

(段誉躲在茶花丛中听阿朱阿碧说话)便在此时,只听得一个女子的声音轻轻一声叹息.霎时之间,段誉不由得全身一震,一颗心砰砰跳动,心想:“这一声叹息如此好听,世上怎能有这样的声音?”

看上去很像那么一回事,但是与之前初遇钟灵,初遇木婉清之时,好像也没有什么分别。

重点来了,下面是两人第一次见面:

段誉一见那女子的形貌,忍不住“啊”的一声惊噫,张口结舌,便如身在梦境。

有些夸张,不是么?

但是——

不好意思,拿错剧本了,这是段誉初见王语嫣她母亲,王夫人时的反应,为什么会这样,原文里说的很明白,是因为王夫人与无量山洞中的雕像,有有几分相似。

下面才是真正的段誉初见王语嫣:

他一见到那位小姐,耳朵中“嗡”的一声响,但觉眼前昏昏沉沉,双膝一软,不由自主跪倒在地,若不强自撑住,几乎便要磕下头去,口中却终于叫了出来:“神仙姊姊,我……我想得你好苦!弟子段誉拜见师父。”  

眼前这少女的相貌,便和无量山石洞中的玉像全然的一般无异。那王夫人已然和玉像颇为相似了,毕竟年纪不同,容貌也不及玉像美艳,但眼前这少女除了服饰相异之外,脸型、眼睛、鼻子、嘴唇、耳朵、肤色、身材、手足,竟然没一处不像,宛然便是那玉像复活。他在梦魂之中,已不知几千百遍的思念那玉像,此刻眼前亲见,真不知身在何处,是人间还是天上?

段誉此时看到了什么,眼中所见自然是王语嫣,而心中所见,恐怕却是无量山洞中的神仙姊姊,让我们重新回顾一下段誉初见雕像的情景:

(段誉)走到玉像前,痴痴的呆看,瞧着她那有若冰雪的肌肤,说甚么也不敢伸出一根小指头去轻轻抚摸一下,心中着魔,鼻端竟似隐隐闻到兰麝般馥郁馨香,由爱生敬,由敬成痴。过了良久,禁不住大声说道:“神仙姊姊,你若能活过来跟我说一句话,我便为你死一千遍,一万遍,也如身登极乐,欢喜无限。”突然双膝跪倒,拜了下去。

看到这里,我们就已经明白,段誉真真切切爱上的,恐怕不是眼前活色生香的王语嫣,而是无量山洞中的神仙姊姊。

不过,有些看官就要辩解了,段誉因为王语嫣容貌极似神仙姊姊雕像,而生爱恋之心,至多只能说他是个以貌取人之人,要说他这份爱恋不真不切,恐怕有些过苛了。

的确,如果世上只有一个王语嫣,段誉这份痴恋,也是恰得其所,然而这世上恐怕不止一个王语嫣。

准确的说,世上不止一个人,有着王语嫣的容貌。

王夫人几分相似,自不必说,洞中雕像是无崖子照着李秋水所刻,李秋水自然是这样的容貌,而后李秋水要告诉我们,无崖子当时所刻并非是她,而是她的小妹,那么就要加上李秋水的小妹,而虚竹子那个终日戴着面纱的西夏公主,恐怕也大为可疑。

原文交代,李秋水为西夏皇太妃,当日天山童姥躲在皇宫冰窖之中,为破虚竹色戒,就去抓了西夏公主来到冰窖之中。

这里有个疑点说不太通,破虚竹色戒,自然是随随便便一个宫女就行了,为什么非得是西夏公主,重伤尚且未愈的天山童姥,难道不知道公主身旁戒备森严,极容易被发现么?

除非这个西夏公主,跟李秋水有莫大联系,童姥复仇心切,以她的脾气秉性,自然不会放过。

然后,便是段誉在西夏公主书房中,看到的那副画了:

段誉对墙上字画一幅幅瞧将过去,突然见到一幅古装仕女的舞剑图,不由得大吃一惊,“咦”的一声。图中美女竟与王语嫣的容貌一模一样,只衣饰全然不同,倒有点像无量山石洞中那个神仙姊姊。图中美女右手持剑,左手捏了剑诀,正在湖畔山边舞剑,神态飞逸,明艳娇媚,莫可名状。段誉霎时之间神魂飞荡,一时似乎到了王语嫣身边,一时又似到了无量山的石洞之中,出神良久,突然叫道:“二哥,你来瞧。”

段誉本对武功毫无兴趣,但就算兴趣极浓,他也必先看王语嫣的肖像而不看武功秘谱,当即放回图画,又去观看那幅“湖畔舞剑图”。他对王语嫣的身形容貌,再细微之处也是瞧得清清楚楚,牢记在心,再细看那图时,便辨出画中人与王语嫣之间的差异来。画中人身形较为丰满,眉目间徊带英爽之气,不似王语嫣那么温文婉娈,年纪显然也比王语嫣大了三四岁,说是无量山石沿中那位神仙姊姊,倒似了个十足十。

这幅画自然是无崖子在无量山洞为李秋水画的画像,然而金庸为什么要在这里,特别提一句呢,而且这幅画又是和诸多名家书画放在一起,并为西夏公主的收藏。

再加上虚竹之后几次三番地对段誉道歉,说“真是对不住了”,虚竹当然清楚段誉原本就无迎娶西夏公主之意,何以如此满怀歉意?

好好的西夏公主,为什么要戴上面纱,谁也不让见?

答案已经呼之欲出了,恐怕西夏公主,也有着和王语嫣一模一样的容貌。

不禁感叹,李秋水家的基因,未免也太神奇了。

世上当然是没有神奇的基因,金庸写出了这么一个四人一面的桥段,恐怕是为了说明一个问题:

实相非相。

换句话说,段誉先见的是王语嫣,便以此爱上了王语嫣,倘若他先见的是西夏公主,又或者早生几十年,遇见了李秋水,更甚至,将来王语嫣又生了一模一样的女儿,他又如何自处?

色相既然相同,段誉又如何来区分呢?

《吸血鬼日记》的编剧显然也想到了同样的问题,所以才会安排了这么一个神乎其神的“二重身”,显然,剧里想要告诉我们的是,既然色相相同,所异就在于心。

问题是,段誉真的关心过王语嫣除了那张肖似神仙姊姊的面容之外的任何东西么?

问题回到王语嫣。

王语嫣究竟有没有动人之处?

这个问题,恐怕见仁见智,天龙诸女,喜欢阿朱的人自然最多,木婉清、钟灵甚至阿紫,所拥者怕也不少,只是喜欢王语嫣的,似乎不多。

王语嫣真正打动我的,是杏子林中,中了悲酥清风之毒,被段誉救出后,两人在马杯上的一段对话:

段誉问道:“王姑娘,你怎么啦?”王语嫣道:“我中了毒,身上一点力气也没了。”段誉听道:“中毒”,吓了一跳,忙问;“要不要紧?怎生找解药才好?”王语嫣道:“我不知道啊。你催马快跑,到了平安的所在再说。”段誉道:“什么所在才平安?”王语嫣道:“我也不知道啊。”段誉心道:“我曾答允保护她平安周全,怎地反而要她指点,那成什么话?”无法可施之下,只得任由坐骑乱走。

两个“不知道啊”,娇憨之态,倒真是让我心中一荡。

纵观全文,段誉对王语嫣的一颦一笑,都是神为之牵,独独这一节,书中为数不多的,王语嫣不是以“人形复读机”和“对表哥一片痴情”的形象出现时,他却毫无感触。

所谓一见钟情,便误终生。

段誉一见钟情的,怕不是王语嫣,而是无量山洞中的那座白玉雕像。

段誉一误终生的,倒真的是鬼使神差,遇上了与神仙姊姊一般面容的王语嫣。

在一处,就为无崖子的故事,为得非所求之苦,隐隐埋下了伏笔。

回到两人初见前,段誉为能不能再见到王语嫣,占了两卦:

一想到祸福,便拔了一把草,心下默祷:“且看我几时能见到那位姑娘的面。”将这把草右手交左手,左手交右手的卜算,一卜之下,得了个艮上艮下的“艮”卦,心道:“‘艮其背,不获其身,行其庭,不见其人。无咎。’这卦可灵得很哪,虽然不见,终究无咎。”

再卜一次,得了个兑上坎下的“困”卦,暗暗叫苦:“‘困于株木,入于幽谷,三岁不觌。’三年都见不到,真乃困之极矣。”转念又想:“三年见不到,第四年便见到了。来日方长,何困之有?”

咎者,灾祸也,不见其人,则是无咎。

困于株木,入于幽谷,恐怕却不是曼陀山庄,而是无量山洞,王语嫣转瞬复见,那又是谁三岁不觌?

游坦之、阿紫、萧峰这组三角关系非常有趣,不知道众位看官读书时有没有连想到段誉、王语嫣、慕容复,你看你看,连名字都如此参差对仗。

这两组,在金庸的巧笔安排下,似是而非,似非而是,让我们看到造化弄人,只要差之一厘半厘,命运就截然不同。

先说游坦之和段誉。

游坦之是什么样的人,聚贤庄游氏双雄的儿子,武学世家,却天资不高,不会半分武功。

段誉却是武学世家,天资虽高,不喜学武,也不会半分武功。

游坦之的父亲伯父被萧峰所逼,慨然自尽。

段誉的“父亲”先在少林寺外挨了慕容复一击夜叉探海,而后曼陀山庄中,慕容复举剑杀尽甘宝宝等四女,段正淳殉情自杀。

游坦之练武,只是偶然间吸了昆仑冰蚕毒,巧合之下练成易筋经,全然不是本意。

段誉练武,同样是偶然间吸了朱蛤毒,又巧合之下练成北冥神功,凌波微步,同样非出本心。

游坦之见了阿紫嫣然一笑,从此一误终生。

段誉遇见王语嫣伤心垂泪,神为之牵。

看到这里,众位看官想必有所悟了。

游坦之便是福缘浅薄的段誉,是远没有那么幸运的段誉。

金庸写游坦之这个故事的重点,恐怕意在“铁面具”,这个桥段大概是化用自法国路易十四期间的铁头人故事,不过只用了其形,所以不必深究典故。

“铁面具”事实上是一个象征,象征的意义在于“失却本来面目”。

游坦之在背戴上铁面具之前,是来做什么的?

他千里辗转,终于找到了萧峰,冒死扔出一包石灰粉,虽然是下三滥的伎俩,但对于一个全无武功的少年,也是不得已而为之。

总而言之,此刻的游坦之,人生的意义在于复仇。

然后遇到阿紫,被阿紫戴上铁面具之后,可曾再想过复仇,之后数章,直到最后游坦之随阿紫身死,虽然依然仇恨萧峰,但那恐怕是出于嫉妒,而非仇恨,从此之后,他心中,再也没有之前那个“游坦之”的身影,只剩阿紫策马回转的嫣然一笑,倚卧之时的纤纤玉足。

头上的铁面具虽然之后被摘下,然而游坦之已经面目全非,心头的铁面具,恐怕此后一生,都没来得及摘下。

游坦之是一个迷失本相的残酷无比的具象化象征。

金庸似乎对段誉要好一点点,既没有铁面具,也没有毁容变貌,然而杏子林一节有一段轻轻点过,却是寓意深远,那是阿朱在为段誉乔装成慕容复之前说过的一段话:

阿朱微笑道:“乔帮主是位伟丈夫,我要扮他反而容易。我家公子跟你身材差不多、年纪也大不了太多,大家都是公子哥儿、读书相公,要你舍却段公子的本来面目,变成一位慕容公子,那实在甚难。”

要你舍却段公子的本来面目,变成一位慕容公子,那实在甚难。

如果读完全书再回头看这句话,会不会有所领悟?

段誉在开篇,遇钟灵,遇木婉清,在万劫谷中,在天龙寺中,是什么模样?

而在全书最后,段誉虽携美而归,却又变成了什么模样?

慕容复一生所念,不过是武功盖世,身登大宝。

最后却是一场虚妄。

而段誉最后,却真真正正是武功盖世,即为为大理国君,恍惚间有了一个身份的异位。

然而各位看官恐怕忘了,初时的段誉,生平最厌恶的便是两件事:

习武,为君。

要你舍却段公子的本来面目,变成一位慕容公子,那实在甚难。

回到游坦之,金庸写游坦之和段誉初次相遇的一段(事实上是游坦之躲在角落中听段誉说话),也意寓深远,不妨摘出来看看:

段誉寻不着王语嫣,早已百无聊赖,聋哑老人这两个使者若有性命危,他必定奋勇上前相救,此刻即已死了,也就不想多惹事端,叹了口气,说道:“单是聋哑,那也不够,须得当初便眼睛瞎了,鼻子闻不到香气,心中不能转念头,那才能解脱烦恼。” 

 他说的是,既然见到了王语嫣。她的声音笑貌、一举一动,便即深印在心,纵然又聋又哑,相思之念也已不可断绝。不料对面那人哈哈大笑,鼓掌叫道:“对,对!你说得有理,该当去戳瞎了他的眼睛,割了他的鼻子,再打得他心中连念头也不会转才是。” 

 段誉叹道:“外力摧残,那是没有用的。须得自己修行,‘不住色生心,不住声香味触法生心,应生无所住心’,可是若能‘离一切相’,那已是大菩萨了。我辈凡夫俗子,如何能有此修为?‘怨憎会,爱别离,求不得,五阴炽盛’,此人生大苦也。” 

 游坦之伏在岩石后的草丛之中。

回到正题,同样是一段三角关系,为什么游坦之最后落得这样的下场,段誉却能够携美而归?

恐怕问题的症结还要在王语嫣和慕容复,阿紫和萧峰身上。

王语嫣和阿紫对各自心上人最耿耿于怀的一点,莫过于无论是慕容复,还是萧峰,都不过是把她们当做小孩子。

比如阿紫:

萧峰听她的话确也是实情,无言可答,只嘿嘿一笑,道:“姊夫是大人,没兴致陪你孩子玩,你找些年轻女伴来你说笑解闷吧!”阿紫气忿忿道:“孩子,孩子……我才不是孩子呢。你没兴致陪我玩,却又干什么来了?”

比如王语嫣:

慕容复冷笑道:“你骗得了这等不识世务的无知姑娘,可骗不了我。”

段誉奇道:“我骗你甚么?”

不过客观的说,两位估计自己是不会认同了,但是在读者眼中,王语嫣和阿紫的确都是小孩子。

小孩最明显的特征,就是心中没有对错善恶,只有爱憎亲疏。

自小在星宿海长大,一天到晚想着毒死这个,毒死那个的阿紫自然不必说,但是王语嫣恐怕也是如此。

首先是大家都很熟悉的,少林寺外,王语嫣为慕容复打伤段正淳喝彩一段:

王语嫣见表哥出指中敌,拍手喝采:“表哥,好一阵“夜叉探海!”本来要点中对方膻中气海,才算是“夜叉探海”,但她对意中人自不免要宽打几分,他这一指虽差了一寸六分,却也马马虎虎的称之为“夜叉探海”了。

其实我窃以为这段还算不上太过分,毕竟当时情景之下,无可厚非。

真正过分的是这一段:

王语嫣大喜,知道表哥原谅了自己,投身入怀,将头靠在他肩上,低声道:“表哥,你生我的气,尽管打我骂我,可千万别藏在心中不说出来。”慕容复抱着她温软的身子,听得她低声软语的央求,不由得心神荡漾,伸手轻抚她头发,柔声道:“我怎舍得打你骂你?以前生你的气,现下也不生气了。”王语嫣道:“表哥,你不去做显现驸马了罢?”

这一段投怀送抱,是发生在慕容复一掌把段誉推入枯井中,王语嫣以为段誉身死之后。无论怎么说,段誉也是为了成全王语嫣和慕容复,才决心来游说慕容复,方遭此祸,这姑娘倒好,一个转眼就投入了人家怀中,也亏得段誉凄凉宽大,换了一般人大概是要吐血三升,没死也死过去了。

到这里我都要怀疑王语嫣和阿紫是不是王夫人所生,一母同胞,而通情达理的阿朱,倒应该是阮星竹的亲生女儿了。

不过,同为小孩,较之阿紫,王语嫣毕竟还是心地善良,至少是绝对想不出拿段誉放人鹞子、喂狮子、拿来练毒掌这样的桥段的。

从这个角度来说,段誉实在是比游坦之幸运的多。

说到这里,我就不禁对王语嫣的性格安排有些疑惑,想来她这辈子之前都没有踏出过曼陀山庄一步,终日相处的是一个动不动拿人做花肥的老妈,和一干诸如平婆婆之类的恶仆,陪伴最多的是一个气量狭窄的慕容表格,她善良平易的性情,又究竟是从哪里学来的?

最后讲讲慕容复。

我一直觉得慕容复是被金庸写坏了的一个人物,就好像世外高人公孙谷主,写成了老色鬼公孙老贼。

对慕容复的铺垫,几乎在开篇几章就开始了,“北乔峰、南慕容”这个称号一直被不停提起,而萧峰在书中的人品、威望,多少人为之倾倒,是以在“珍珑棋局”慕容复真正出场前(假扮西夏武士一节不算真正出场),慕容复在读者心中的形象倒也很高大。

然而这是一个高开低走的典型人物,于全书中段出场后,形象每况日下,珍珑棋局不过显得气量狭小,围攻天山童姥一节也只是心机颇深,少林寺下一段算是形象扫地,西夏求亲一回更是彻底变成了凉薄小人。

金庸这么写,虽然出人意表,但也不算牵强,但是直到曼陀山庄一节,慕容复真真正正变成了“智商有硬伤”的形象,这恐怕就是为了强行收尾,草草填了慕容复这个坑,金庸处理不当了。

(这一节又出现了身份异位这一点,慕容复苦苦想认段延庆为父而不得,段誉却真是段延庆的亲生儿子,却无论如何不愿意承认。)

至少我是无论如何看不出来,一向以心机深沉形象示人的慕容复,在有一千种方法要挟段正淳的情况下,为什么要傻乎乎地一个一个杀死段正淳的女人们。

最后再收回来,看完了段誉、王语嫣、慕容复三人与游坦之、阿紫、萧峰一组的对比之后,结局不同,也就很容易看出来了。

虽然同样是迷失了本相,虽然同样是恋上了一个只顾亲疏,不辨善恶的女子,但阿紫恶而王语嫣善,萧峰磊落豪杰而慕容复凉薄小人,是以王语嫣可能别恋,而阿紫却绝无可能回头,段誉和游坦之,自然是两种下场。

终局之际,金庸给这两组又安排了一个对应,那就是“坠落”。

段誉、王语嫣、慕容复这三人,与西夏枯井外一番纠缠后,段誉被慕容复推入井底,继而王语嫣心死自尽,慕容复为鸠摩智所伤而坠,最终在井底完成了王语嫣的回心转意(这里我要吐槽一下,刚刚还深情款款的王语嫣,转瞬就倒向了段誉,完全说不通,只能说是应了萧峰那句“孩子气的痴情”了)。

而游坦之一组的顺序却刚好相反。

萧峰自尽身死,而后阿紫抱着萧峰坠崖,之后游坦之绝望殉死。

“坠落”是一个比喻,让我们想起高不可攀的仙子落入凡尘。

对于段誉,王语嫣自然高不可攀,而对于阿紫,萧峰又何尝不是?

雁门关外,萧峰看着与阿朱当日相会时的那棵树:

萧峰热泪盈眶,走到树旁,伸手摩挲树干,见那树比之当日与阿朱相会时已高了不少。一时间伤心欲绝,浑忘了身外之事。

记得阿紫是为什么爱上萧峰的么,除了萧峰那句冷酷的“孩子气的痴情”外,却是她自白的那句:看到你打死了我姐姐后,哭的那样伤心,我便喜欢上了你。

因男人对另一个女人的深情,而爱上他,恐怕是世上最糟糕的事了。

于是,萧峰自尽后,阿紫也已然生无可恋,于是:

 阿紫凝视着萧峰的尸体,怔怔的瞧了半晌,柔声说道:“姊夫,这些都是坏人,你别理睬他们,只有阿紫,才真正的待你好。”说着俯身下去,将萧峰的尸休抱了过来。萧峰身子长大,上半身被她抱着,两脚仍是垂在地下。阿紫又道:“姊夫,你现下才真的乖了,我抱着你,你也不推开我。是啊,要这样才好。”

是啊,要这样才好。

西夏公主酒罢问君有三语,段誉回答的是一生最幸福快活的地方,是枯井底,污泥处。

然而,“枯井底”一节,却是我看的最不是滋味的一段。

至此,段誉已经饱尝了魂牵梦萦之苦,求而不得之苦,然而真正与王语嫣终成眷属后,经历的却是既得患失之苦。

王语嫣向段誉表明心意后,俩人提及慕容复,有这么一段:

段誉一颗心几乎要从口中跳将出来,问道:“那你表哥怎么样?你一直……一直喜欢慕容公子的。”王语嫣道:“他却从来没将我放在心上。我直至此刻方才知道,这世界上谁是真的爱我、怜我,是谁把我看得比他自己性命还重。”段誉颤声道:“你是说我?” 

 王语嫣垂泪说道:“对啦!我表哥一生之中,便是梦想要做大燕皇帝。本来呢,这也难怪,他慕容氏世世代代,做的便是这个梦。他祖宗几十代做下来的梦,传到他身上,怎又能盼望他醒觉?我表哥原不是坏人,只不过为了想做大燕皇帝,别的甚么事都搁在一旁了。”

段誉听她言语之中,大有为慕容复开脱分辨之意,心中又焦急起来,道:“王姑娘,倘若你表哥一旦悔悟,忽然又对你好了,那你……你……怎么样?”  

王语嫣叹道:“段郎,我虽是个愚蠢女子,却决不是丧德败行之人,今日我和你定下三生之约,若再三心两意,岂不有亏名节?又如何对得起你对我的深情厚意?” 

 段誉心花怒放,抱着她身子一跃而起,“啊哈”一声,拍的一声响,重又落入污泥之中,伸嘴过去,便要吻她樱唇。王语嫣宛转相就,四唇正欲相接,突然间头顶呼呼风响,甚么东西落将下来。

此间的段誉,却让你想起了什么?

至少,我想起了万劫谷里的钟万仇,摘段誉入谷求钟夫人救钟灵一节:

钟夫人又羞又怒,呸的一声,说道:“你胡说八道什么?一会儿疑心他是我情郎,一会儿又疑心他是我儿子。老实跟你说,他是我的老子,是你的泰山老丈人。”说着不禁噗哧一声,笑了出来。

  钟万仇一怔,随即明白妻子是说笑,当即捧腹狂笑。这一大笑,伤口中鲜血更似泉涌。

钟夫人流泪道:“怎……怎么是好?”钟万仇大喜,伸手拦住她腰,道:“阿宝,你为我这么担心,我便是立时死去,也不枉了。”钟夫人晕生双颊,轻轻推开了他,道:“段公子在这儿,你也这么疯疯颠颠的。”钟万仇呵呵而笑,甚是欢悦,笑几声,咳几下。

天龙第一卷里还有很多诸如此类的描述,金庸笔力深湛,把“患得患失”四个字刻画的入骨三分。

前面说了诸多类比,比如段誉和段正淳,段誉和游坦之,都是似是而非,是非而是,其实是同一个因在不同命运颠沛中结下的不同后果,自然,这里,段誉也不会是完完全全的钟万仇。

深究钟万仇和段誉的不同之处,实在是太多,我取个巧,只说两人的相同之处,看官们可能会想起诸如都得了个如花似玉的美眷、都有个挥之不去的情敌,但这些在我眼里,同样都有些似是而非。

段誉和钟万仇真正的相似之处,就在当初万劫谷中段誉替钟万仇下的那个论断,“他自知形貌与夫人绝不相配”,换言之,段誉和钟万仇心中恐怕都有些隐隐的自卑,也正因如此,才会有这么一个“既得患失”之苦。

天龙书中,诸多譬喻,这里的“枯井底”和“万劫谷”,也同样是一个譬喻,象征的意义在于“困不得出”。

“困不得出”是个很有意思的意向,段誉从出场到全书结尾,困于无量山,困于神农帮,困于万劫谷,困于曼陀山庄,到了最后困于枯井,全部遭遇,恐怕都含在一个“困不得出”里了,其实不仅是段誉,推及至萧峰、虚竹、慕容乃至林林总总,世间众人,都落在了一个“困不得出”之中,就算是逍遥一派,虽然名为“逍遥”,但是看天山童姥,李秋水,无崖子,乃至丁春秋,苏星河,又有谁是真正“逍遥”的呢?

天龙讲的苦,林林总总,都是自苦,所以天龙将困,也都是自困。

当西夏公主酒罢问君三语后,段誉回答的一生中最逍遥快乐的地方,便是这枯井底,污泥处,段誉之困,非是囿于高墙,而在于人。

其实金老爷子已经写的明明白白了,所以我也不再多说,语摘三段全当本篇结尾:

只见她眼光更向右转,和他的眼光相接,段誉向前踏了一步,想说:“王姑娘,你有什么话说?”但王语嫣的眼光缓缓移了开去,向着远处凝望了一会,又转向慕容复。段誉一颗心更向下低沉,说不尽的苦涩:“她不是不瞧我,可比不瞧我更差上十倍。她眼光对住了我,然而是视而不见。她眼中见到了我,我的影子却没进入她的心中。她只是在凝思她表哥的事,哪里有半分将我段誉放在心上。唉,不如走了罢,不如走了罢!

一路之上,他也不知对自己说了多少次:“我跟了这里路后,万万不可再跟。段誉啊段誉,你自误误人,陷溺不能自拔,当真是枉读诗书了。须知悬崖勒马,回头是岸,务须挥慧剑斩断情丝,否则这一生可就白白断送了。佛经有云:‘当观色无常,则生厌离,喜贪尽,则心解脱。色无常,无常即苦,苦即非我。厌于色,厌故不乐,不乐故得解脱。

 他越看越是神伤,但见王语嫣的眼光,始终没须臾离开过慕容复。段誉心中只说:“我走了罢,我走了罢!再耽下去,只有多历苦楚,说不定当场便要吐血。”但要他自行离开王语嫣,却又如何能够?

万劫谷虽险,枯井底虽深,若是执意要走,又如何能困,但要段誉自行离去,却又如何能够?

这也正应了禅宗之理,世事纷华,然而只要一悟,即能脱离苦海,然而要让人自行顿悟,千难万难,又如何能够?

前面说了逍遥派,名为逍遥,然而自无崖子至虚竹子,又有谁真是逍遥?

下面讲讲无崖子。

前面说了几组男女的故事,段正淳一组,游坦之一组,钟万仇一组,皆是与段誉似是而非,似非而是,下面讲的无崖子、李秋水、天山童姥一组,亦复如是。

起先种种,不再多说,我们从无崖子和李秋水隐居在无量山洞中讲起,无量山洞,既是隐秘,又是奇险,隐隐约约,又是一个“困不得出”的格局,不过正如段誉觉得井底逍遥,钟万仇觉得谷中快活,无崖子在无量山洞中,李秋水身畔,一样是觉得“实乃人间至乐”,到了这里,也不过是个雷同的故事,然而转折出现在一尊雕像上。

正是段誉神为之牵的神仙姊姊雕像。

下面引一段李秋水的话:

那一天,他在山中找到了一块巨大的美玉,便照着我的模样雕刻一座人像,雕成之后,他整日价只是望着玉像出神,从此便不大理睬我了。我跟他说话,他往往答非所问,甚至是听而不闻,整个人的心思都贯注在玉像身上。你师父的手艺巧极,那玉像也雕刻得真美,可是玉像终究是死的,何况玉像依照我的模样雕成,而我明明就在他身边,他为什么不理我,只是痴痴瞧着玉像。目光中流露出爱恋不胜的神色?那为什么?那为什么?

这个故事大概是化用了皮革马利翁的故事,然而又有微微的不同,皮革马利翁讲的是心中无所爱,然后爱上了自己所作雕像,而无崖子却是相反,他心中有所爱,而后有了这座雕像。

看官从李秋水空中已经明白了,无崖子所爱的,是李秋水的小妹。

但是这位小妹全书仅在此处提到,羚羊挂角,无所踪迹,也就没把法深究。

这里有一个疑问,究竟无崖子是什么时候察觉到自己所爱的是李秋水小妹,而非李秋水本人的?

我的结论,恐怕是直到这座雕像完工之后,他才真正明白。

如果无崖子心中一直驻留的,却是李秋水的小妹,那么李秋水恐怕只是一个无可奈何的替代品,然而我们跟着段誉视角,在无量山洞之中走了一周,各种题词布置,不难看出无崖子当时心中恐怕真的只有李秋水一人,困于无量山洞之中,恐怕也和段誉困于枯井底一般,真真正正,是当得上他自己所言的那句“实为人间至乐”的。

可是偏偏让他雕出了那座雕像。

我想,起初无崖子可能当真是照着李秋水雕刻,然而一来二去,思绪所致,不知不觉间,却雕出了李秋水小妹的模样来,是以,才会有“整日价只是望着玉像出神”。

前面说了,王语嫣,或者李秋水小妹这副容貌,四人一面,说的是一个色相是空的道理,无崖子到了此刻才真正顿悟了自己原来却是找错了人,爱错了人,不可谓不苦。

然而无崖子终究是逍遥派掌门,深得“逍遥”两字真髓,虽然与李秋水已有一女,却借着一场误会,拂袖而去,从此老死不再相交。

恐怕段誉是万万做不到的。

金庸写人,花开并蒂,互相参照,这里实写的是无崖子,暗指的,恐怕是段誉。

试想,段誉一番千辛万苦,终于得偿所愿,携美而归,自然是心中无限欢喜。

然而从头到尾,他心中却只有长在王语嫣脸上,那副神仙姊姊的容貌。

王语嫣其实远非天仙,而只是个懵懂的小孩,而她的可爱之处,也正是在“娇憨”而字,倘若段誉心存念之的,正是这两点,正是杏子林外的那两句“我不知道啊”,那么这段姻缘,虽然阴差阳错,但也美满。

然而偏偏不是。

不知道多少年后,段誉携着王语嫣回到无量山洞中,看到神仙姊姊容貌,会不会也如无崖子那样呆呆出神,似有所悟,苦不堪言。

所以,当我看到篇末,段誉携着王语嫣回归故里,看上去喜乐无限时,心中却是怅然若失。

然而金庸偏偏如此毒辣,在这个时候,还要让段誉自己亲口说出这么一番话来:

段誉见到阿碧的神情,怜惜之念大起,只盼招呼她和慕容复回去大理,妥为安顿,却见她瞧着慕容复的眼色中柔情无限,而慕容复也是一副志得意满之态,心中登时一凛:“各有各的缘法,慕容兄与阿碧如此,我觉得他们可怜,其实他们心中,焉知不是心满意足?我又何必多事?”轻轻拉了拉王语嫣的衣袖,做个手势。

你拉了拉王语嫣的衣袖时,可曾想到自己也已入了如此苦局,困不得出?

行文至此,段誉的故事也就告一段落了。

题目是男人们的普遍困境,然而到了今天,这些何尝又不是女生们的普遍困境呢?

我们回头看看,段誉所尝之苦。

开篇逢人便爱,得必有失,有失是苦。

而后一误终生,苦求不得,不得则苦。

就算求之得之,然而还是逃不过患得患失之苦。

就算因缘际会,最后携美而归,却忽然发觉得非所求,原来只是误会一场,实在是苦不堪言。

金庸借段誉的故事,讲了一个相的故事,前面四种,化作两相。

迷失本相是苦,误于色相是苦。

两相又归于一毒,所谓痴毒不去,所苦不止。

到了最后的最后,恐怕还是要落在虚竹感慨的那两句佛经之上:

修道苦至,当念往劫,舍本逐末,多起爱憎。今虽无犯,是我宿作,甘心受之,都无怨诉。经云:逢苦不忧,识达故也。

众生无我,苦乐随缘。纵得荣誉等事,宿因所构,今方得之。缘尽还无,何喜之有?得失随缘,心无增减。

今虽无犯,是我宿作。

得失随缘,心无增减。

SQL Server 2012 不支持创建连接服务器到 2000 版本,及其替代方案

翻译自“sqlwithmanoj”的博客

http://sqlwithmanoj.wordpress.com/tag/sqlncli10/

小伙伴们震惊了吧,“SQL Server 2012” 不支持通过连接服务器的方式连接到“SQL Server 2000”了。SQL Server 2012 采用了新版本的SQLNCL11(SQL Server Native Client 11)替代了以前的SQLNCL10,这个客户端只支持连接到2008R2,2008,2005版本的数据库。

笔者加一句:这个SQLNCL11不仅不能通过分布查询连接2000版本数据库,还原操作也不能进行,简而言之,不能读取2000版本的数据了。

问题是这样复现的:

  • 我将我的数据库升级从 2008R2 升级到了2012

  • 将从2008R2 服务器备份的数据库文件还原到了 2012服务器上

  • 在新服务器上执行任务时候,出现了这样的错误

错误信息:

OLE DB provider “SQLNCLI11″ for linked server “NorthWind2000″ returned message “Client unable to establish connection”.
Msg 22, Level 16, State 1, Line 0
SQL Server Native Client 11.0 does not support connections to SQL Server 2000 or earlier versions.
OLE DB provider “SQLNCLI11″ for linked server “NorthWind2000″ returned message “Invalid connection string attribute”.

由于我是升级了数据库,所以我把问题定位到了连接服务器的OLE DB(对象链接嵌入数据库)应用程序接口上,发现了这个SQLNCL11的版本,同时我的服务器上还有SQLNCL10版本。

所以我试着显示使用SQLNCL10去创建连接服务器,但还是出现了如下异常:

Msg 8522, Level 16, State 3, Line 1
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.

我贴出我创建连接服务器的脚本,如下:

USE [master]
GO</p>

<p>-- Existing LinkedServer [NorthWind2000]:
EXEC master.dbo.sp_addlinkedserver @server = N'NorthWind2000', @srvproduct=N'MSSQL', @provider=N'SQLNCLI', @provstr=N'PROVIDER=SQLOLEDB;SERVER=NorthWind'</p>

<p>EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'NorthWind2000',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO

—>以下是替代的解决方案:

使用ODBC是一个比较好的方案,有两种实现方式

  1. 在操作系统中穿件一个ODBC Data Source (DSN),在SQLSERVER中只用这个DSN创建连接服务器。
  2. 创建连接服务器时候,直接使用DSN的连接字符串调用ODBC接口。

第一种方式:

首先创建ODBC数据源

  • 打开控制面板,进入管理工具,选择”数据源(ODBC)“

  • 在”ODBC数据源管理器“页签,选取”系统DSN“面板

  • 单击添加创建一个新的数据源

  • 选择”SQL Server“然后点击完成

笔者多嘴2:基本上各大数据库甚至excel都提供了相关接口,都可以连接

  • 在新建数据源页面,建议给数据源适当的命名(比如: NorthWind2000DSN),这个命名会在以后创建练级服务器时候使用到,这里就叫NorthWind,点击下一步

  • 选择验证方式,Windows验证或者Sqlserver都无所谓,进入下一步

  • 选择默认数据库,不选也无所谓,下一步

  • 点击完成,新的DSN就创建了

现在可以使用DSN创建连接服务器了,在@dadasrc参数中使用DSN名称,同时@provider参数中要填写”MSDASQL“.

以下是示例SQL

-- Drop Existing LinkedServer [NorthWind2000]:
EXEC master.dbo.sp_dropserver @server=N'NorthWind2000', @droplogins='droplogins'
GO</p>

<p>-- Re-create LinkedServer [NorthWind2000] by using the ODBC connection:
EXEC master.dbo.sp_addlinkedserver @server = N'NorthWind2000', @srvproduct=N'MSDASQL', @provider=N'MSDASQL', @datasrc = N'NorthWind2000DSN', @location=N'System';</p>

<p>EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'NorthWind2000',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO

第二种方式:

直接使用DSN字符串也挺好,在@provstr参数中直接使用DSN连接字符串,请看:

-- Drop Existing LinkedServer [NorthWind2000]:
EXEC master.dbo.sp_dropserver @server=N'NorthWind2000', @droplogins='droplogins'
GO
-- Re-create LinkedServer [NorthWind2000] by using the ODBC connection:
EXEC master.dbo.sp_addlinkedserver @server = N'NorthWind2000', @srvproduct=N'', @provider=N'MSDASQL', @provstr=N'DRIVER={SQL Server};SERVER=NorthWind;Trusted_Connection=yes;'</p>

<p>EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'NorthWind2000',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO

使用这种方式可以实现在2012服务器上分布式查询2000版本数据库的数据。

这种方式看似可以直接替代以前的连接服务器,其实效率降低了,如果想实现更有效率的ETL操作,建议升级源数据库的版本,至少到SQL2005。

笔者多嘴3:据不完全统计,ODBC数据源查询效率约为使用SQLNCL查询的1/4。

Kettle 环境变量设置

  1. Java环境变量,可以调用所有的java中System.properties中的相关变量。
  2. 手动定义环境变量,可以通过“Set Variables”步骤进行设置,或者通过编辑作业属性中的Paramaters页签进行设置。
  3. 内部环境变量,Kettle自身的
    1. Internal.Kettle.Build.Date:2007/05/22 18:01:39 创建时间
    2. Internal.Kettle.Build.Version:2045
    3. Internal.Kettle.Version:2.5.0
    4. Internal.Transformation.Filename.Directory:D:\Kettle\samples 当前转换运行目录
    5. Internal.Transformation.Filename.Name:Denormaliser – 2 series of key-value pairs.ktr 当前运行转换文件名称
    6. Internal.Transformation.Name:Denormaliser – 2 series of key-value pairs sample 当前转换名称
    7. Internal.Transformation.Repository.Directory:/  资料库路径
    8. Internal.Job.Filename.Directory:/home/matt/jobs 作业目录
    9. Internal.Job.Filename.Name:Nested jobs.kjb 作业文件名
    10. Internal.Job.Name:Nested job test case 作业名
    11. Internal.Job.Repository.Directory:/ 作业资料库名
    12. Internal.Slave.Transformation.Number:0..<cluster size-1> (0,1,2,3 or 4) 集群模式下有,转化号码
    13. Internal.Cluster.Size:<cluster size> (5) 集训数量

【迁移】[转载]getBoundClientRect函数详解

原文:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html

一、定义

getBoundingClientRect 函数是W3C组织在第一版本的W3C CSSOM View specification草案中确定的一个标准方法,在此之前,只有IE浏览器是支持该方法的,W3C在这次草案中把它扶正成为标准,足可以看出它并不简单。getBoundingClientRect 方法返回的是调用该方法的元素的TextRectangle对象,该对象具有top、left、right、bottom四个属性,分别代表该元素上、左、右、下四条边界相对于浏览器窗口左上角(注意,不是文档区域的左上角)的偏移像素值。

 

二、兼容性

getBoundingClientRect方法最先在IE5中出现,后来被W3C接纳成为标准。目前IE5.5+、Firefox 3.5+、Chrome 4+、Safari 4.0+、Opara 10.10+等浏览器均支持该方法,兼容性几乎完美。

在具体表现方面,Firefox6以前的版本使用getBoundingClientRect时不能获取到top和bottom这两个属性值,Firefox6及以后的版本和其他支持getBoundingClientRect方法的浏览器则top、left、right、bottom四个属性值均能获取到。需要说明的是由于某些版本的IE浏览器的<html>文档根元素默认是有2px边框的,所以这里需要特别处理一下,微软MSDN上说在IE5中会存在这样的情况,但据我实际测试,xp系统中IE6也存在这样的问题,奇怪的是,我在win7环境下用IETester测试的IE各版本都是正常的。但这并不是什么大问题,我们只要把得到的值减去html根元素(body也可考虑进来)的clientLeft或clientTop就能保持各浏览器一致啦。

 

三、用途

当getBoundingClientRect刚被w3c列为标准的时候,PPK还曾质疑过它是不是多此一举,因为已经存在类似的方法来获取元素的偏移位置,比如offsetLeft和offsetTop。但Jquery的作者John Resig马上阐明了getBoundingClientRect的用处。用传统的方法固然可以实现getBoundingClientRect同样的功能,但兼容各种浏览器以及各种不同的元素就会把你弄死,而且效率还非常低下。所以获取页面上某个元素相对于浏览器窗口的偏移量就成了getBoundingClientRect的用武之地了。而获取元素的偏移量能有什么用,我相信,你懂的~ ^_^

【迁移】数据库查询调优(SQL 2008)

  • 数据合并程序调优

关键词:系统问题定位  系统速度调优  消除java程序中循环的数据库操作

背景:程序主要功能是将业务数据定时的从数据库中进行提取,合并,并且导入到接口库中的一个java service程序。随着业务系统以及业务数据的增加,程序执行速度下降显著。由于是数据增加以后出现的这个问题,所以问题定位在数据库操作之上。

调优攻略:

  1. 查询历史执行日志,发现日志使用log4j打出了debug信息,其中包含每一步的操作时间,调查时间间隔比较长的几个步骤。
  2. 查询目标步骤涉及的表数据,发现目标表数据量都很大,有3张表数据达到千万。
  3. 查询其中一张表的全部打印日志,发现操作随着时间变慢,基本都是新增或更新数据的操作。
  4. 根据SQL,对抽取涉及到查询的列创建索引,发现速度基本没有变化。
  5. 由于有源码,查看源码逻辑,发现源码中对每条数据都先进行一次查询有没有的数据库操作,然后才进行一次增加或者更新操作。业务系统每天产生约1W条数据,那么光这一张表就会进行至少2W次操作,并且是在一张1000W大小的表上。
  6. 更改上面逻辑,将更新和新增统一变为先删除,后新增的操作。业务系统无论产生多少数据,只进行2次数据库操作。
  7. 问题解决。

后话:更改以后的操作受到了限制,如果源数据库和目标数据库不在同一台服务器,就会无法完成合并,即:SQL是跨数据库的。但是考虑了实际环境,两个库不可能分开,所以这么写了。

  • 查询统计调优

  关键词统计信息更新  索引创建  执行计划  性能监视器  查询跟踪器

  背景:之前一个统计分析子系统对数据仓库有大量的查询操作。某一天,用户提出某一个模块查询过慢,导致程序无法正常运行。

  服务器操作系统:winserver2003

  数据库:MSSQLServer 2008

调优攻略:

  1. 使用性能监视器进行监视,开始执行目标操作以后,观察计数器获取线索:
  2. Memory Page Faults/sec  每次执行都会保持很高的值
  3. Memory Page /sec 第一次执行会有值,以后则没有
  4. 说明这个SQL执行过程会进行大量数据的扫描。
  5. 使用SQL Server Profiler开始跟踪,模板选择TSQL,这样会过滤掉一些其他的操作,然后执行目标操作,对SQL进行捕获。
  6. 分析目标SQL,综合索引,查询的表数据量较大,800W左右,但是SQL没有不同,之前查询经过优化,对应分组和过滤的列上也创建有索引。
  7. 对近期客户数据进行比对,发现目标表数据增加了部分,总量的1/20左右,不会对查询造成过大影响。
  8. 偶尔发现查询更改作为参数的查询日期会得出不同的查询速度。分析执行计划,发现执行计划不同。
  9. 查看目标表对应索引的统计信息,发现统计信息不完整,是抽样1.5%得出,只有200行左右。
  10. 目标表每日有合并操作,操作内容是截断表和新增数据,这个操作会引发更新统计信息的操作。
  11. 在合并过程中增加全量更新统计信息操作解决。

深入剖析:

  问题本质: 过时或者抽样率过小的统计信息会导致效率低下的执行计划.

  truncate操作以后表的统计信息会过时, 新的统计信息收集会在第一次查询时候进行收集,收集信息策略如下:

  数据库设置了参数AUTO_CREATE_STATISTICS, 统计信息会自动进行更新具体更新阈值Recompilation threshold (RT)如下:

      1. Permanent table 永久表, 数据量 = n
        • If n <= 500, RT = 500.
        • If n > 500, RT = 500 + 0.20 * n.
      1. Temporary table 临时数据库表 , 数据量=n
        • If n < 6, RT = 6.
        • If 6 <= n <= 500, RT = 500.
        • If n > 500, RT = 500 + 0.20 * n.
      1. Table variable 表变量不进行统计

查看原文

  对于数据量比较大的表, 自动更新策略会比较缩水,以下是微软的原文:

  “ 当 AUTO_UPDATE_STATISTICS 数据库选项设置为 ON(默认值)时,查询优化器会在表中的数据发生变化时自动定期更新这些统计信息。每当查询执行计划中使用的统计信息没有通过针对当前统计信息的测试时就会启动统计信息更新。 采样是在各个数据页上随机进行的,取自表或统计信息所需列的最小非聚集索引。 从磁盘读取一个数据页后,该数据页上的所有行都被用来更新统计信息。常规情况是:在大约有 20% 的数据行发生变化时更新统计信息。但是,查询优化器始终确保采样的行数尽量少。对于小于 8 MB 的表,则始终进行完整扫描来收集统计信息。”

这也就是为什么数据的统计信息始终只有很少的原因。

查看原文

ps: 创建索引时候自动创建的统计信息抽样率为100%

ps2: 无论使用什么手动办法更新statistics, 如果不明文指定FULLSCAN, 那么数据库始终使用抽样的方式进行信息收集。(_)

调优感想:

  1. 统计信息的查看方式有很多

更多用法

  1.  也可以查询动态视图
  1.  

    更多动态视图用法

    1. 查看统计信息时候要注意,数据库忙的时候,会使用抽样的方式来进行统计信息,此时的统计信息虽然无可厚非,但是对于数据量比较大的表,单靠索引存活,那么很可能导致严重的查询问题。
    2. 这种问题的典型例子就是对于同样的SQL不同的参数,执行计划不同
    3. 解决办法暂时只是想到了定时进行数据库的统计信息更新,另外,选择TRUNCATE操作一定要慎重。

     通过存储过程

     

    或者通过T-SQL

     

    常用的系统存储过程说明

    sp_who    (sp_who2)报告有关当前 SQL Server 用户和进程的快照信息,包括当前正在执行的语句以及该语句是否被阻塞。

    sp_lock    报告有关锁的快照信息,包括对象 ID、索引 ID、锁的类型以及锁应用于的类型或资源。

    sp_spaceused    显示对表(或整个数据库)所用的当前磁盘空间量的估计。

    sp_monitor    显示统计信息,包括 CPU 使用率、I/O 使用率以及自上次执行 sp_monitor 以来的空闲时间。

    常用的动态管理视图说明

    常规服务器动态管理对象包括:

    dm_db_*:数据库和数据库对象

    dm_exec_*:执行用户代码和关联的连接

    dm_os_*:内存、锁定和时间安排

    dm_tran_*:事务和隔离

    dm_io_*:网络和磁盘的输入/输出

    以下举几个比较重要的动态视图。

    查看原文

    sys.dm_exec_query_stats DMV 提供缓存查询计划的汇总性能统计信息,包括有关物理和逻辑读/写以及查询执行次数的详细信息。它包含从实际 SQL 的父 SQL 中提取实际 SQL 所使用的偏移量。此 DMV 已联接到sys.dm_exec_sql_text DMF,后者包含与 I/O 有关的 SQL 批处理的信息。

    示例1:查询最费IO的查询

     

    示例2:查询最费CPU的查询

     

    示例3:使用 CLR(包括存储过程、函数和触发器)的语句

     

    示例4:最常执行的SQL

     

    示例5:受阻塞影响的查询

     

    sys.dm_db_missing_index_group_stats DMV 记录了 SQL 尝试使用特定缺失索引的次数。sys.dm_db_missing_index_details DMV 详细显示缺失索引的结构,例如查询所需的列。这两个 DMV 通过sys.dm_db_missing_index_groups DMV 联系在一起。缺失索引的开销(总开销列)的计算方法是,用户平均总开销与用户平均影响的积,再乘以用户搜寻次数与用户扫描次数的和。

     以下脚本来确定开销最高的缺失索引。此查询的结果(按“总开销”排序)显示最重要缺失索引的成本以及有关数据库/架构/表和缺失索引中所需列的信息。特别是,此脚本可确定哪些列在相等和不相等 SQL 语句中使用。另外,它还报告应将哪些其他列用作缺失索引中的包含性列。使用包含性列可以在不从基础页获取数据的情况下满足更多的覆盖查询,因而使用的 I/O 操作更少,从而提高性能。

    示例6:高开销的缺失索引

     

    sys.dm_exec_requests DMV中读取正在运行的请求,以及这个请求的句柄(sql_handle),通过句柄,可以从sys.dm_exec_sql_textDMF得到请求的具体内容。同时,通过(SPID)联接sys.processes这个表,可以得到运行语句的用户、数据库、及应用程序名。

    示例7:查询正在执行的SQL

【迁移】java 文件定位

java中,定位class的方式,总共有以下几种

  • XXX.class.getResource(String resourceName)
  • XXX.class.getClassLoader().getResource(String resourceName)
  • Thread.currentThread().getContextClassLoader().getResource()
  • XXX.class.getProtectionDomain().getCodeSource().getLocation() –只能获取类的路径
  • System.getProperty(“user.dir”)–只能获取java的启动目录

下面对各种方式进行评析

  1. 调用class类本身的getResource方法,入口有参数名称前面是否有“\”是有很大区别的
  2. 调用classLoader的getResource方法,入口参数不能有有“\”