没有最好的架构,只有最合适的架构。循证架构是《Expert One-on-One J2EE Development without EJB》一书中推崇的架构思路,用俺们的话说就是摸着石头过河,找最适合自己的架构。

俺现在soho,大活不多,小活不断。我的工作具备以下特点:

(1) 根本没摸清楚需求的时间。需求都是从原型到Demo到版本1到版本2探索出来的。经常需求变化非常大,因此,必须以敏捷方法为基础;

(2) 一般没多少数据需要存储,顶多百万级;

(3) 需要极度的压榨开发效率。一个工作,10天完成和20天完成,那收益前者就是后者的两倍。

在上面(1)-(3)驱动下,俺摸索出的架构见下图:

myarch

从下往上,简单说说:

(1) 数据库:db4o。谁用谁知道,哈哈,爽。什么ORM,SQL,DataSet,统统是过眼云烟了。一切都是普通对象。数据库几乎是0设计。数据接入也非常非常的简单。

(2) Db4o之上得有一个逻辑层,来应付需求变化。这一层主要就是各种实体对象,需要良好的设计,否则,应付不了需求的变化。这一块我一般要设计比较完备的event体系,便于后期修改与组合。

(3) 服务层:主要是RIA应用需要。如果是Winform程序,不用这一层。

(4) UI逻辑层:最开始没弄这一层,最后鉴于在界面那一块太耗时间,就加了这么一层。这一层主要是:

a) 对于单个控件,将控件的常用操作逻辑封装成扩展方法;

例子: Winform程序中的Invoke方法使用起来很烦人,涉及到多个线程,还要判断多次 IsHandleCreated == true(经常忘记,导致bug)。于是,需要将它封装成扩展方法。

代码如下:

public class ControlFuncContext
{
    public Control Control { get; private set; }
    public Delegate Delegate { get; private set; }

    public ControlFuncContext(Control ctl, Delegate d)
    {
        this.Control = ctl;
        this.Delegate = d;
    }

    public void Invoke0()
    {
        if (Control.IsHandleCreated == true)
        {
            Delegate.DynamicInvoke();
        }
    }

    public void Invoke1<T>(T obj)
    {
        if (Control.IsHandleCreated == true)
        {
            Delegate.DynamicInvoke(obj);
        }
    }

    public void Invoke2<T0,T1>(T0 obj0, T1 obj1)
    {
        if (Control.IsHandleCreated == true)
        {
            Delegate.DynamicInvoke(obj0, obj1);
        }
    }
}

public static class FormClassHelper
{
    public static void InvokeFunc0(this Control ctl, Func0 func0)
    {
        if (ctl.IsHandleCreated == true)
        {
            ControlFuncContext fc = new ControlFuncContext(ctl, func0);
            ctl.Invoke(new Func0(fc.Invoke0));
        }
    }

    public static void InvokeFunc1<T>(this Control ctl, Func1<T> func1, T obj)
    {
        if (ctl.IsHandleCreated == true)
        {
            ControlFuncContext fc = new ControlFuncContext(ctl, func1);
            ctl.Invoke(new Func1<T>(fc.Invoke1<T>), obj);
        }
    }

    public static void InvokeFunc2<T0, T1>(this Control ctl, Func2<T0, T1> func2, T0 obj0, T1 obj1)
    {
        if (ctl.IsHandleCreated == true)
        {
            ControlFuncContext fc = new ControlFuncContext(ctl, func2);
            ctl.Invoke(new Func2<T0,T1>(fc.Invoke2<T0,T1>), obj0, obj1);
        }
    }
}

b) 对于多个控件,使用Mediator模式,将多个控件之间的组合抽象出Mediator类,方便重用。这一点我最开始是用户控件方式进行封装,结果发现太不灵活,最后改用Mediator,再配合扩展方法,开发速度biubiubiu的就上去了。

(5) UI:Html是万恶之源,能不用就不用。可以选择的话,我主要用Winform, Flex,SL作为前端。纯Web开发是不碰了(市面上做Web开发的太多,不趟这个混水了)。

以上架构,视项目而定。如果项目的数据部分比较关键,我现在还是保守的在用关系数据库。虽然db4o已经那么多年了,还是得保守一点用。

如果能完全按上面五点去做,那开发简直和在空中飞翔一样爽。

记得在以前的博文中说过VS的智能提示就是AOP,被人耻笑过。今天就详细写写,名称就叫“渔鱼之辩”。

依现有的AOP的狭义定义,VS的智能提示不算AOP。正如,按新华字典上的解释,“操”不能算骂人的词。

为了探析VS的智能提示到底算不算AOP,先看看AOP的内涵:

·我们对系统有某一方面的关注

·这些关注分散在系统的多个地方

·通过某些技术或方法将这些关注点“织出”、“织入”以集中控制

看一个例子:

例子1:程序中的魔数

程序中魔数分散在系统的各数,将它们提出为 const 变量 或 static 变量以集中控制。

这算不算AOP呢?有点太轻量级了。正如蚯蚓的神经结不能称为大脑一样。

例子2:IDE的智能提示算不算AOP?

IDE的智能提示做了什么呢:

·我们关注类型的行为和它的字段

·类型有哪些行为或字段?这些知识分散在技术文档之中或者代码中或者我们的大脑中。

·IDE通过反射或Tag技术或其它技术将这些关注点集中起来,当我们打某个字符或快捷键时展现给我们(织出),然后,当我们选择了一个方法或字段时,自动输出一些代码输出到源码文件中(织入)。

这算不算AOP呢?这个例子比例子2重一点。

例子3:C#的扩展方法 + IDE 的智能提示

·我们对某一或某些类型的行为进行扩展,或者是调用,或者是工具类或工具方法。通过这些扩展,我们可以节省代码量,可以共用以前的代码

·在没有扩展方法之前,上述调用分散在系统的各处。你想知道这些关注点,必须去查找系统中引用的各个类。假定有6个类ClassUtil1, BBBB, HSBDKC, CA, JDF, CSLD 都针对类型T提供了工具方法,想调用这些工具方法,必须采用某种途径得到这6个类的类名,才能去调用这些方法,而这些类的类名分散在系统的各处,想得出,需要花费不菲的代价。

·通过扩展方法和IDE的智能提示,当我们打了这个类型实例的名称之后,打一个“.”,那么那些分散在系统各处的扩展方法就被IDE“织出”了放在我们的面前任我们选用,我们应用了扩展方法之后,编译器在编译时将自动将那些工具方法“织入”进程序。

这个例子的重量级又较例子2更胜一筹。这到底算不算AOP呢?

来一段维特根斯坦式的话:一棵树称得上树林吗?十棵树在一起,称得上树林吗?一百颗树在一起,称得上树林吗?一千棵树。。。一万棵树在一起呢?

《建筑的永恒之道》书中提出质、门、道三个概念:无形之质、有形之门、永恒之道。我对这三个概念以及概念之间的关系进行了篡改(亚历山大原书中是道通过门实现质,而我总觉得道比质更具备目的性,就把道和质换了下位置,并且发现,这样说的更通顺一些。亚历山大的粉丝别扁我!):

无形之质通过有形之门来实现永恒之道。

(按亚历山大的表述应该是:永恒之道通过有形之门实现无形之质)

看如上三个例子。

AOP的三点内涵这是无形之质,而具体对这个无形之质的实现算有形之门,如:例子1中的const或static;例子2中的IDE的智能感知;例子3中的扩展方法+智能感知;以及AOP的经典实现ASPECTJ。这些实现属于有形之门。通过它们我们可以达到永恒之道:解决问题。

如果将AOP仅仅局限于已有的有形之门,那么我们进了这个门,就可能错过其它的门。

========================= 小插曲 ===================

看三个例子,轻松一下。

例子4:

雨伞——用时打开,不用时关上,省地方。

例子5:

书本——读时打开,不读时关上。

例子6:

VS中的Region

例子4-6应用的是“折叠”模式。

========================= 插曲结束 ===================

例子7:搜索引擎

·我们对想要在网上查找信息

·这些信息分散在网上的各个地方

·通过搜索引擎技术这些信息索引起来(织出),当我们输入关键词时,返回相关信息。

有兴趣的人也可以去琢磨单元测试,琢磨丰田生产系统中的质量控制方法,它们的内核——“无形之质”与上面的例1-3,例7是类似的。

好了,上面的例子全是事后诸葛,只有学习借鉴之用,并无多大的建设意义。

来个现实点的例子。

最近天涯社区涌现出一系列声讨拐卖儿童的帖子,典型如:

http://www.tianya.cn/publicforum/content/free/1/1517383.shtml

看到这个帖子,您想到那些建设性的方面呢?

我当时是想到了AOP。

下面就用AOP的“无形之门”分析一下:

·丢失孩子的家长寻找孩子的愿望——这是关注点,这是方面

·丢失的孩子分散在全国各地——这是现实

·通过某些技术或方法将这些关注点“织出”呢?

关键就是这个“织出”。

通过这些帖子可以看出,现在几乎人人都有手机,大多数手机都能拍照,而大部分人都有较强的道德意识在不付出较大代价的前提下去拯救这些孩子。用手机拍照、然后放到一个网站上集中起来是个很简单的“织出”。

丢失孩子的家长可以浏览这些图片来判断是否是自己丢失的孩子。

然而,当照片很多时,这种浏览是不具效率的,需要提供更有效的“织出”关注点的方法。这就需要用到图像搜索和人脸识别技术。

家长也可以上传自己孩子的照片,然后志愿者看见可疑人可以拍照下来,同家长上传的照片进行比对。

这样的系统如果建立且成功运转起来,就是一个有形之门。

通过有形之门来达到永恒之道——解决问题。

最好,来一首和本文无关的歌曲《忽悠一万年》

http://www.tudou.com/programs/view/sLQebm0XsAc

相信未来(食指) 四月 29th, 2009

当蜘蛛网无情地查封了我的炉台
当灰烬的余烟叹息着贫困的悲哀
我依然固执地铺平失望的灰烬
用美丽的雪花写下:相信未来

当我的紫葡萄化为深秋的露水
当我的鲜花依偎在别人的情怀
我依然固执地用凝霜的枯藤
在凄凉的大地上写下:相信未来

我要用手指那涌向天边的排浪
我要用手掌那托住太阳的大海
摇曳着曙光那枝温暖漂亮的笔杆
用孩子的笔体写下:相信未来

我之所以坚定地相信未来
是我相信未来人们的眼睛
她有拨开历史风尘的睫毛
她有看透岁月篇章的瞳孔

不管人们对于我们腐烂的皮肉
那些迷途的惆怅、失败的苦痛
是寄予感动的热泪、深切的同情
还是给以轻蔑的微笑、辛辣的嘲讽

我坚信人们对于我们的脊骨
那无数次的探索、迷途、失败和成功
一定会给予热情、客观、公正的评定
是的,我焦急地等待着他们的评定

朋友,坚定地相信未来吧
相信不屈不挠的努力
相信战胜死亡的年轻
相信未来、热爱生命

1968年 北京

四月 29th, 2009

你 从天而降的你
落在我的马背上
如玉的模样 清水般的目光
一丝浅笑让我心发烫

你头也不回的你
展开你一双翅膀
寻觅着方向 方向在前方
一声叹息将我一生变凉

你在那万人中央
感受那万丈荣光
看不见你的眼睛
是否会藏着泪光

我没有那种力量
想忘也总不能忘
只等到漆黑夜晚
梦一回那曾经心爱的姑娘

待至英雄们在铁铸的摇篮中长成,勇敢的心灵像从前一样。 
去造访万能的神祗。 
而在这之前,我却常感到 
与其孤身独涉,不如安然沉睡。 
何苦如此等待,沉默无言,茫然失措。 
在这贫困的时代,诗人何为? 
可是,你却说,诗人是酒神的神圣祭司, 
在神圣的黑夜中,他走遍大地。

FOREVER ? FORSAKEN ? 四月 27th, 2009

我们既非生者也非死者,我们将被活着的和死去的遗忘。我们回到了曾经告别的世界上,但是却永远无法回到我们曾经活着的那些日子,永远无法回到那些我们曾经爱过的人的身边。我们是存在也是诅咒,因此我们遗忘过去,并且被过去遗忘…

(Forgetting which our must living also non- dead, we is already living and died. We returned to in the world which once said goodbye, but actually forever was unable returned to us once to live these days,forever was unable returned to these us to love person's side. We are the existence also are curse, therefore we forget, and passes forgets)

很久以来,我的代码的命名空间均以 Orc 打头,Orc 代表着兽族、野蛮、暴力、天真,表现着网络流的真实的面貌。它还有另一层意思:做人,不如做条狗。

最近几月以来,心中想法越来越清晰,就是想致力于以人为中心的开发——视、听、语言与交互,致力于以人为中心的图形、语言、语音、AI的综合交互应用。这种想法一度十分清晰,我称为Elf。甚至在我最初的梦想中,这还包含对味觉的计算——通过分子芯片与算法来仿真食物。以虚拟造就真实,以虚拟来陶醉绝望的灵魂,以创造来拯救沉溺,以技术来麻醉现实,通过编码来实现自我的救赎,来重现遗失的美好。

一个命名空间,代表优雅与傲慢的Elf,数次启用,又数次删掉。

后来,我又想到一个新的词:Brave。Brave new world 的 Brave。Brave 既代表美丽,又代表勇敢。

我从来不是一个勇敢的人。最后,我想起了 Forsaken —— 被遗忘者。

几年前,理想与现实的巨大心理反差,导致心里越来越冷漠和冷血,从而离开了北京,离开了多年的生活和朋友,回到襄樊,让生活归零。

花了几年时间去遗忘,同时也被世界所遗忘。

那些逝去的生命中的美好却并未如愿在记忆中消失,往往是一觉醒来,怅然若失。

不习惯人多的场合,不习惯去上班,孤僻的内心也容纳不了战友,于是只能一个人去战斗。一个游离在软件世界边缘的战斗。

而在软件开发这种讲究团队和合作的领域,一个人的力量实在有限,因此注定是一场失败的抗争。

唯感欣慰的是,一种久违的感觉在慢慢苏醒 —— 在深夜之中,可以清晰的聆听到代码的歌唱。这种说不清的感觉,诱惑着,即使孤独,也要坚持走下去。

曾经许下过 FOREVER 的诺言,而今,唯有在被遗忘中去追求,去洗涤那疲惫的灵魂,去复活那美丽的心灵。

这是一个被遗忘者的远征。

背后长河落日   眼前大漠孤烟

------------------------------------------------------------------------------------------------

FORSAKEN 命名空间开始启用——

来吧!

Posted in | Comments(0)»

当遇到挫折时去听一听,看一看吧。

(1)热血歌

     热血歌(1938)
     词:吴宗海
     曲:黄自
     热血滔滔,热血滔滔,
     像江里的浪,像海里的涛,常在我心头翻搅。
     只因为耻辱未雪,愤恨难消,
     四万万同胞啊!
     洒着你的热血,去除强暴!
     热血溶溶,热血溶溶,
     像火焰般烈,像旭日般红,常在我心头汹涌。
     快起来为己除害,为国尽忠,
     四万万同胞啊!
     拼着你的热血,去争光荣!

 

(2)黄河大合唱

http://www.youku.com/playlist_show/id_1917467.html

一、黄河大合唱


光未然词
冼星海曲


[1] 黄河船夫曲——《黄河大合唱》第一乐章
(朗诵)
朋友!你到过黄河吗?你渡过黄河吗?你还记得河上的船夫,拼着性命和惊涛骇浪搏战的情景吗?如果你已经忘掉的话,那么,你听吧!
(合唱)
咳哟!咳哟!划哟,划哟,划哟,划哟!用力划哟,用力划哟,用力划哟,用力划哟!咳哟!咳哟!
乌云啊,遮满天!
波涛啊,高如山!
冷风啊,扑上脸!
浪花啊,打进船!
咳哟!划哟!
伙伴啊,睁开眼!
舵手啊,把住腕!
当心啊,别偷懒!
拼命啊,莫胆寒!
咳!划哟!咳!划哟!
咳!划哟!咳!划哟!
不怕那千丈波涛高如山!
不怕那千丈波涛高如山!
行船好比上火线,团结一心冲上前!
咳!划哟!咳!划哟!
咳!划哟!咳!划哟!
咳哟!咳哟!划哟,划哟,划哟,划哟,用力划哟,用力划哟,用力划哟,用力划哟,用力划哟!咳哟!咳哟!
我们看见了河岸,
我们登上了河岸。
心啊,安一安,
气啊,喘一喘。
回过头,再和那黄河怒涛
决一死战!决一死战!决一死战!
决一死战!
咳哟!划哟!咳!划哟!咳,咳,……


[2] 黄河颂——《黄河大合唱》第二乐章
(朗诵)朋友!黄河以它英雄的气魄,出现在亚洲的原野,它表现出我们民族的精神,伟大而崇高!这里,我们向着黄河,唱出我们的赞歌。
(独唱)
我站在高山之巅,望黄河滚滚,奔向东南。
金涛澎湃,掀起万丈狂澜;
浊流宛转,结成九曲连环;
从昆仑山下,奔向黄海之边;
把中原大地,劈成南北两面。
啊,黄河!你是中华民族的摇篮!
五千年的古国文化,从你这发源;
多少英雄的故事,在你的身边扮演!
啊,黄河!你是伟大坚强,
像一个巨人,出现在亚洲平原之上,
用你那英雄的体魄,筑成我们民族的屏障。
啊,黄河!你一泻万丈,浩浩荡荡,
向南北两岸,伸出千万条铁的臂膀。
我们民族的伟大精神,将要在你的哺育下,
发扬滋长!
我们祖国的英雄儿女,将要学习你的榜样,
像你一样的伟大坚强,像你一样的伟大坚强!

[3] 黄河之水天上来(配乐诗朗诵)——《黄河大合唱》第三乐章
(朗诵)
黄河!我们要学习你的榜样,像你一样的伟大坚强。这里,我们要在你的面前,献一首长诗,哭诉我们民族的灾难。
(朗诵,三弦伴奏)
黄河之水天上来,
排山倒海,汹涌澎湃,
奔腾叫啸,使人肝胆破裂!
它是中国的大动脉,
在它的周身,奔流着民族的热血。
红日高照,水上金光迸裂。
月出东山,河面银光似雪。
它震动着,跳跃着,像一条飞龙,
日行千里,注入浩浩的东海。
虎口龙门,摆成天上的奇阵;
人,不敢在它的身边挨近;
就是毒龙,也不敢在水底存身。
在十里路外,仰望着它的浓烟上升;
象烧着漫天大火,使你感到热血沸腾;
其实,凉气逼来,你会周身感到寒冷。
它呻吟着,震荡着,发出十万万匹马力,
摇动了地壳,冲散了天上的乌云。
啊,黄河!河中之王!
它是一匹疯狂的猛兽,
发起怒来,赛过千万条毒蟒;
它要作浪兴波,冲破人间的堤防;
于是,黄河两岸,遭到可怕的灾殃:
它吞食了两岸的人民,削平了数百里外的村庄,
使千百万同胞,扶老携幼,流亡他乡,
挣扎在饥饿线上,死亡线上!
如今,两岸的人民,
又受到了空前的灾难:
东方的海盗,在亚洲的原野,
伸张着杀人的毒焰;
于是,饥饿和死亡,像黑热病一样,
在黄河的两岸 传染!
啊,黄河!
你抚育着我们民族的成长:
你亲眼看见,这五千年来的古国
遭受过多少灾难!
自古以来,在黄河边上
展开了无数血战,
让垒垒白骨,堆满你的河身,
殷殷鲜血,染红你的河面!
但你从没有看见,
敌人的残暴,如同今天这般;
也从来没有看见,黄帝的子孙
像今天这样,开始了全国动员。
在黄河两岸,
游击兵团,野战兵团,
星罗棋布,散布在敌人后面;
在万山丛中,在青纱帐里,
展开了英勇血战!
啊,黄河!
你记载着我们民族的年代;
古往今来,在你的身边
兴起了多少英雄豪杰!
但是,你从不曾看见
四万万同胞,像今天这样
团结得如钢似铁;
千百万民族英雄,为了保卫祖国
洒尽他们的热血;
英雄的故事,像黄河怒涛,
山岳般地壮烈!
啊,黄河!
你可曾听见,在你的身旁
响彻了胜利的凯歌?
你可曾看见,祖国的铁军
在敌人后方,布成了地网天罗?
他们把守着黄河两岸,
不让敌人渡过!
他们要把疯狂的敌人
埋葬在滚滚的黄河!
啊,黄河!
你奔流着,怒吼着,
替法西斯的恶魔
唱着灭亡的葬歌!
你怒吼着,叫啸着,
向着祖国的原野,
响应我们伟大民族的胜利的凯歌!
向着祖国的原野,
响应我们伟大民族的胜利的凯歌!


[4] 黄水谣——《黄河大合唱》第四乐章
(朗诵)
我们是黄河的儿女,我们艰苦奋斗,一天天接近胜利!但是,敌人一天不消灭,我们便一天不能安身;不信,你听听,河东民众痛苦的呻吟。
(合唱)
黄水奔流向东方,河流万里长。
水又急,浪又高,奔腾叫啸如虎狼。
开河渠,筑堤防,河东千里成平壤。
麦苗儿肥啊,豆花儿香,男女老少喜洋洋。
自从鬼子来,百姓遭了殃!
奸淫烧杀,一片凄凉;
扶老携幼,四处逃亡;
丢掉了爹娘,回不了家乡!
黄水奔流日夜忙,
妻离子散,天各一方!
妻离子散,天各一方!


[5] 河边对口曲——《黄河大合唱》第五乐章
(朗诵)
妻离子散,天各一方!但是,我们难道永远逃亡?你听听吧,这是黄河边上,两个老乡的对唱。
(对唱:张世明、王京华)
(甲)张老三,我问你,你的家乡在哪里?
(乙)我的家,在山西,过河还有三百里。
(甲)我问你,在家里,种田还是做生意?
(乙)拿锄头,耕田地,种的高梁和小米。
(甲)为什么,到此地,河边流浪受孤凄?
(乙)痛心事,莫提起,家破人亡无消息。
(甲)张老三,莫伤悲,我的命运不如你!
(乙)为什么,王老七,你的家乡在何地?
(甲)在东北,做生意,家乡八年无消息。
(乙)这么说,我和你,都是有家不能回!
(甲/乙合唱)
仇和恨,在心里,奔腾如同黄河水!
黄河边,定主意,咱们一同打回去!
为国家,当兵去,太行山上打游击!
从今后,我和你,一同打回老家去!

[6] 黄河怨——《黄河大合唱》第六乐章
(朗诵)
是的,朋友!我们要打回老家去!老家已经太不成话了!谁没有妻子儿女,谁愿意遭受敌人的蹂躏?有良心的中国人啊,你听听,一个妇人悲惨的歌声。
(独唱:馀佩敏)
风啊,你不要叫喊!
云啊,你不要躲闪!
黄河啊,你不要呜咽!
今晚,我在你面前,哭诉我的仇和冤。
命啊,这样苦!
生活啊,这样难!
鬼子啊,你这样没心肝!
宝贝啊,你死得这样惨!
我和你无仇又无冤,
偏让我无颜偷生在人间!
狂风啊,你不要叫喊!
乌云啊,你不要躲闪,
黄河的水啊,你不要呜咽!
今晚,我要投在你的怀中,
洗清我的千重愁来万重冤!
丈夫啊,在天边!
地下啊,再团圆!
你要想想妻子儿女死得这样惨!
你要替我把这笔血债清算!
你要替我把这笔血债清还!


[7] 保卫黄河——《黄河大合唱》第七乐章
(朗诵)
但是,中华民族的儿女啊,谁愿意像猪羊一般,任人宰割?我们抱定必胜的决心,保卫黄河!保卫华北!保卫全中国!
(多声部合唱)
风在吼,马在叫,
黄河在咆哮,黄河在咆哮!
河西山冈万丈高,
河东河北,高梁熟了。
万山丛中,抗日英雄真不少!
青纱帐里,游击健儿逞英豪!
端起了土枪洋枪,挥动着大刀长矛,
保卫家乡!保卫黄河!
保卫华北!保卫全中国!


[8] 怒吼吧,黄河!——《黄河大合唱》第八乐章
(朗诵)听啊,珠江在怒吼!扬子江在怒吼!啊!黄河!掀起你的怒涛,发出你的狂叫,向着全中国被压迫的人民,向着全世界被压迫的人民,发出你战斗的警号吧!
(合唱)
怒吼吧,黄河!
怒吼吧,黄河!
怒吼吧,黄河!
掀起你的怒涛,发出你的狂叫!
向着全世界的人民,发出战斗的警号!
啊——
五千年的民族,苦难真不少!
铁蹄下的民众,苦痛受不了!
受不了!
但是,新中国已经破晓;
四万万五千万民众
已经团结起来,誓死同把国土保!
你听,你听,你听:
松花江在呼号,黑龙江在呼号;
珠江发出了英勇的叫啸;
扬子江上,燃遍了抗日的烽火!
啊!黄河!
怒吼吧!怒吼吧!怒吼吧!
向着全中国受难的人民,
发出战斗的警号!
向着全世界劳动的人民,
发出战斗的警号!
向着全世界劳动的人民,
发出战斗的警号!
向着全世界劳动的人民,
发出战斗的警号!
向着全世界劳动的人民,
发出战斗的警号!

(3)苏武牧羊

http://www.tudou.com/playlist/id/321386/

序歌•一个古老的传说  


春草年年绿绿了千年  
牧歌悠悠唱唱遍草原  
有一支歌也唱了千年噢  
奶奶唱给爸爸  
爸爸唱给我 唱给我噢  
我唱在心间  
秦时的明月依然明艳  
汉时的雄关已经不见  
多少英雄的伟业  
已经被风吹散  
一个牧羊人的歌声永留人间  
一个牧羊人的歌声永留人间  
苏武留胡节不辱  
雪地又冰天苦忍十九年  
渴饮雪饥吞毡  
牧羊北海边  
心存汉社稷旄落犹未还  
历尽难中难 心如铁石坚  
夜坐塞上时听笳声入耳心恸酸  
秦时的明月依然明艳  
汉时的雄关已经不见  
有一支歌唱了千年  
有一支歌唱遍草原  
有一支歌永留人间  
有一支歌我唱在心间 

 
骁歌•出塞  


出雁门 越雄关  
别父老 辞长安  
驱骏马 跨雕鞍  
为国家 求平安  
男儿今出塞  
男儿今出塞  
男儿今出塞  
背后长河落日  
眼前大漠孤烟  
背后长河落日  
眼前大漠孤烟  
大漠孤烟  
手持一根节杖  
胸怀万里江山  
手持一根节杖  
胸怀万里江山  
万里江山  


牧歌•贝加尔湖的冬天  


白茫茫的雪原黑沉沉的苍天  
黄澄澄的太阳裹进了云里边  
静悄悄的湖面空荡荡的荒野  
孤伶伶的牧人伫立在天地间  
凄沥沥的寒风里黑漆漆的长夜难眠  
冰冷冷的长夜里梦境绿莹莹  
梦中的花儿红彤彤  
梦中的草儿水灵灵  
梦中的星星亮晶晶  
梦中的太阳暖融融  
梦中的田野翠青青  
梦中的村庄雨蒙蒙  
梦中的炊烟香袅袅  
梦中的小河水清清  
莽苍苍的乌拉尔山  
冰冷冷的贝加尔湖畔  
白皑皑的湖畔  
牧歌声悠悠  
白茫茫的雪原黑沉沉的苍天  
黄澄澄的太阳裹进了云里边  


琴歌•望月观花  


怕见月 尤其怕见怕见月圆  
月圆了不好  
月圆了月圆了让人心颤  
白发娘 盼儿归  
红妆空守空帏  
三更同入梦  
两地谁梦谁  
怕见花 尤其怕见怕见花艳  
花艳了不好  
花艳了花艳了人心酸  
三更同入梦  
两地谁梦谁  
不是不爱明月 是因为  
月照故乡人 是因为  
月圆了 人未圆  
不是不爱鲜花 是因为  
鲜花如人面 是因为  
人面桃花今不见  
怕见明月  
头上的月正圆  
怕见鲜花  
手中的花正艳  
怕见明月  
头上的月正圆  
怕见鲜花  
手中的花正艳  


春歌•牧羊姑娘  


在茫茫草原上  
一群羊遇到了另一群羊  
在浩荡春风里  
牧羊人遇到了牧羊姑娘  
春风吹散了她的长发  
春风吹红了她的脸庞  
春风吹开了她的衣裳  
春风吹亮了她的目光  
让人昏眩的是太阳  
让人痴迷的是目光  
让人软弱的是春风  
让人踌躇的是故乡  
让人昏眩的是太阳  
让人痴迷的是目光  
让人软弱的是春风  
让人踌躇的是故乡  
在茫茫草原上  
一群羊遇到了另一群羊  
在浩荡春风里  
牧羊人遇到了牧羊姑娘  
在茫茫草原上  
一群羊遇到了另一群羊  
在浩荡春风里  
牧羊人遇到了牧羊姑娘  
春风吹乱了他的脚步  
春风吹落了他的节杖  
春风吹黑了他的白发  
春风吹乱了他的心房  
让人昏眩的是太阳  
让人痴迷的是目光  
让人软弱的是春风  
让人踌躇的是故乡  
让人昏眩的是太阳  
让人痴迷的是目光  
让人软弱的是春风  
让人踌躇的是故乡  
在茫茫草原上  
一群羊遇到了另一群羊  
在浩荡春风里  
牧羊人遇到了牧羊姑娘

 
酒歌•归来  


留胡十九载  
今天归来  
千里的雷声万里的闪  
北海的牧人就往家赶  
登上了长城就往南看  
眼含着泪水就望长安  
留胡十九载  
今天归来  
今天归来  
长安不见十九年  
十九年苦难就对谁言  
对谁言  
大青骡子你就快快走  
十九年苦难就熬出了头  
熬出了头  
黄河万里归大海  
一头扑在母亲的怀  
今天归来  
苏武留胡节不辱  
雪地又冰天十九年  
牧羊北海边  
苏武留胡节不辱  
雪地又冰天负忍十九年  
牧羊北海边  


尾歌•梦里草原  


当苦难已经过去  
当昨天已成记忆  
当那喧腾的鼓乐渐渐地平息  
那悠悠的胡笳却又在梦里响起  
响起 响起 响起  
在梦里响起  
当青春已经逝去  
当白发已经凄迷  
当那重逢的发妻偎依在怀里  
那草原的情歌却又在梦里荡起  
荡起 荡起 荡起  
在梦里荡起

(4)YOU SHALL NOT BE PASSED

主角是一位叫 Plapla 的WOW玩家。

这是 Plapla 的原贴:

http://bbs.ngacn.cc/read.php?tid=2056960&fpage=1

这是多玩的报道摘选:

当部落军团一路势如破竹地杀到铁炉堡国王的王座时,Plapla已站在国王的身前,手持一把名为“国王护卫者”的剑,顶着头上意味着成为靶子的标记,面对前方数十倍于自己的对手,喊出了《指环王》中甘道夫一人独对炎魔时的那句经典台词:“YOU SHALL NOT BE PASSDE!” —— 你们休想通过。

由于Plapla的存在,部落的这次攻击最后无果而终。事后,Plapla将战斗报告发到了论坛上,她的本意是想批判对手使用BUG站位,但玩家的反应出乎她的意料,所有人都为她这种“虽千万人吾往矣”的气概及表现出来的RP精神所感动。玩家纷纷回帖,表达自己对Plapla的敬佩。截止目前,该贴的回复已超过1300条。

一些玩家开始称呼Plapla为“国王护卫者”,推选她为年度最感人玩家,至少有两位玩家为Plapla撰写了小说,专门描述她如何面对部落大军而毫不退步,她当时的战斗截图被无数人保存并当作签名。此外还有数十篇新帖,是在进行与此有关的讨论。

随之而来的是对洛萨部落使用BUG的指责和嘲讽,甚至有同为洛萨服务器部落阵营的玩家发表声明,表示自己羞于与这些BUG使用者为伍,将选择离开重投其它服务器。

Plapla能感动这么多人,是因为她身上表露出来的一些早已被人们所遗忘了的美好东西。它们原本应该存在于现实社会中的,但现在我们于生活中无处寻找,却在游戏里不经意发现了。礼失而求诸野,亦可浩叹矣。

 

下面是另一个网友为他(或她)写的文字:

 

“愿激昂的心永不停息,愿纯洁的圣光永远庇佑我们的世界。”

“我的孩子,你真的要留下吗?”麦格尼·铜须的声音颤抖着,“我还是认为女人不应该参加这场战斗。你应该投降的,有普罗德摩尔的协议在,他们不会为难你这个人类的。”

他的王朝已经岌岌可危,铁炉堡外,数以千计的部落大军正在等待最后进攻的命令。

地下铁路和丹莫罗的通道已经被封死,就连魔法转移的通道也被亡灵巫师封锁了。而城中,除了数百矮人死士以及一个女性人类以外,再无活人。

“除非我被从这里抬出去。”派派拉说。“我是一个圣骑士。”

国王大厅的地板已经在微微颤动了。两人都知道这是牛头人的脚步声。敌人离这里越来越近了。

“啊……范达尔此时一定很羡慕我。”麦格尼突然说。“他被干掉的时候可是众叛亲离,他的士兵们几乎全都背叛了他。”

两旁的矮人士兵都沉默了。这句话基本等于宣布国王已经抱下了必死的决心。

“我想连德雷克塔尔都会羡慕你的…听说他死前只有两条狼与他共战至死。”派派拉说着,心不在焉地挥舞了一下手中的武器。那是一把简陋的剑,剑由两个相互重合的钩组成,但是剑身中却散发着淡淡的蓝光。

地板的颤抖越来越大了,甚至已经有一股巨魔的汗臭味传入国王大厅。矮人士兵都已经按照战术要求隐蔽起来了,一时间大厅上只剩下两个人。

“那把剑……”麦格尼指着派派拉手中说,“似乎有点不同寻常。”

“啊……我几乎都忘了,真是巧合。”人类笑了一下,“它的名字叫国王护卫者。”

“是吗……是谁给它这个名字的?是你吗?”

“不。卡拉赞的先知给了它这个名字,它守护千王之厅的国王。”

现在国王之厅的视野中已经能看到绿色的身影了,而且这种绿色的影子还在不断增加。

“他们在集结部队。”国王说着,同样抽出了自己的战锤。“我可不是卖老,但是我这山丘之王的名头恐怕还是值得部落出动三四个整编团的。”

“而我,和你的士兵们,将成为你最牢不可破的盾牌。以国王护卫者的名义!以圣骑士的名义!”

“说得好,如果我们都活下来,我就给你这个称号……”

一个看起来象是部落领军的萨满走进了房间,但是他却只看到两个人。他看起来是犹豫了一下,但是还是坚决地把手一挥——

“来吧!You shall not pass!"

Posted in | Comments(0)»

突出重围 三月 29th, 2009

最近,在首页看到了太多的抱怨:潜心技术、不得志,陷入了某种窘境——身后无数小弟弟小妹妹不计一切代价的向这个行业涌来,眼前是经济危机需求萎缩,身边是老板压,同事迫。

image

是什么导致这个困境呢?

先看一个基本的经济规律:一个商品,假如需求一定,供给越多,价格越低。见下图:

clip_image004

程序员这一行当,无数的大学生和无数的培训班学员都往这一块在挤,黑云压城城欲摧。而此时,酷爱技术的人N1,N2,….N9999很多又在埋头搞自己的框架,这N1,N2到N9999一共搞了8888个框架,这8888的框架之中6666个是类似的,根据上面那图,这框架的供给很多,于是其价值就不怎么样。于是就陷入了这样一个困境:自己水平很高或自以为很高,做出来的东西却不受欢迎,买房啊,结婚啊,生活压力越来越大,怎一个烦字了得。

怎么办?突围!

先举一个例子。一个技术水平不高,年龄不大,被 N 人踩了M只脚的小朋友,哦就是Dirain。把他当一个案例来分析分析。看看他这段时间走的路:

群发求职 -> 被录用 -> 类似的技术开发开心网助手 -> 借助开心网助手带来的人气和了解的需求弄了个什么高兴网。

现在是深夜三点,那个高兴网目前还有44人在线,作为一个没几天的网站,能有这个访问量已经很不错了。且这个网站的访客消费能力很强,还是蛮有潜力的。

这个例子有什么特点呢?目的性强,简单、直接、有效。

群发求职,不具备推广性,大家都这么干,肯定结果比现在大家都不这么干还坏,但是,在特定的时间特定的情况下(大家都不这样干时)这样做是有效的。

这个世界上每一个人,每一个公司,每一件事情都是活生生的,都有它自身的特点和规律。这些叫业务。业务是变化的,且变的甚至比技术还快。这是业务的动态。

再举一个例子。魔兽世界里拍卖行商品的价格曲线大致如下图。周二周三时有一个价格高峰,周五周六有一个价格高峰。因为周二周三副本更新,有大量物质需求。周五周六是周末,很多具有消费能力的白领拉高了价格。这些是业务规律。

image

再一个例子讲讲规则。还是讲魔兽世界。里面有一个现象叫金团,即,25人组成一个团队去OOXX NPC,打出的贵重东西现场现金拍卖,某个东西,谁出的价高谁得。25人中有钱的人没几个,有钱的人身上带了足够的钱的更没几个,这几个中识货的更少了。因此,这样拍卖价是严重低于市场价的。这是规则,人人认可的规则。团散了之后,等到周二周三或周五周六,放到市场上拍卖,直接面对的就不是25个人,而是2500人,2500人中想要的人如果手上现金不够可以到处借,因此,价格会比25人中的价格高很多。这两种场合,一件东西的差价折算成人民币能有200-300元。这些就是利用规则赚钱。我沉迷魔兽世界那一段时间利用这些东西赚的金子折算成人民币,每小时收入也高于50%程序员的每小时收入。

clip_image008

业务不一定需要技术,但是技术可以促进业务。所以,第一种突围方式,也是最重要最有效的突围方式,就是业务突围。

一、业务突围:逐步去了解业务对象(客户),业务动态,业务规律,业务规则,利用技术去改进它、促成它、适应它、满足它。

业务是多种多样的,是千奇百怪的。一旦技术结合业务,我们的技术就不单单是技术,而是有了区分度的技术。技术就这么几种,你再牛,除非你牛到了极点,你依然可以被很多人代替。而业务是多种多样的,分配下来,做每个业务的技术人员并不多,就较难被替代了。

还有一个很重要的因素:研发是一个企业的成本中心,而业务是一个企业的利润中心。研发是花钱的,业务是赚钱的。虽说两者是有相辅相承的作用,但是,程序这一块,绝大部分做技术的做的并不是研发工作,顶多是伪研发。所以,对处于困境的技术人员来说,我们用技术去研发,不如想办法用技术去促进业务。

业务突围最难的是心态调整。做技术的人对业务需求的变化有很强的抗拒性,而做业务必须要掌握要驾驭的就是这种变化,要去了解客户,站在客户的角度思考,了解客户的流程,想办法为他带来利益。

第二个难的是做事方式的改变。技术是轮子的话,业务就是公路。比如,造轮子还是不造轮子,这是个问题?要业务突围,需要对轮子和公路的理解。模仿现有轮子去造一个轮子,貌似可以加深对轮子的理解,却不能加深对公路的理解。很多时候,我们需要的是飞机,而不是轮子,研究轮子,是造不出飞机的。业务突围不一定需要深研技术,更多需要对技术的理解、判断、选型和决策,需要必要的技术视野。

二、技术突围:技术突围是技术人员最愿意选择的一种突围方式——在某门技术上,更高、更快、更强。

一般来说,具备同等技术水平的技术人员是随时间逐步贬值的。而学习和研究可以让技术升值。如果升值速度大于贬值速度,就是成功的技术突围。

这条路子很单纯,很直观,前景因人而异。这方面文章网上很多,就不细说了。

三、时间突围:着眼未来,针对未来某有前景的技术进行学习投资,抢占先发优势。

image

先发优势是一种很强的优势。比如,QQ在IM这一块的先发优势使得竞争对手得花超出腾讯三倍五倍甚至十倍百倍的代价才能战胜他。

这种突围方式需要有较强的判断力,要能够预先选定有前途的未来技术。回报会很丰厚,代价自然也不小:

·现在的收入会降低

·对未来的技术投资存在不小的风险

以C#为例,XNA、WPF我比较看好——未来的硬件会越来越快,网速也越来越快,3D应用的需求会增加很多,而此时国内对这玩意又不感冒,注定会有一段供给小于需求的时间。有兴趣的C#程序员可以先去占几个坑。最好还是结合业务去占坑。

四、空间突围: 走出大城市,走入环境优美的地方,青山绿水,悠悠我心

image

程序员的生存压力很大,但程序员拥有一个别的行业所不拥有的优势,就是很大一部分程序工作对城市化的依赖性不强。因为我们有网络。

·程序员对物流的需求基本没有。

·程序员的交流很大一部分通过网络也能进行。

·很多程序员的工作通过网络就可以开展。

·开源程序是很好的助手

离开大城市有以下好处:

·生存压力小很多很多,有心情和时间去做自己的事情。

·空气质量好很多,清静。

·收入下降不会很大,相对生活质量会提高。

挑战也是存在的:

·首要的是自制力。因为压力不大,要保证斗志才行,不然,竞争力会越来越底下;

·然后是综合能力。通过互联网的合作和面对面的合作对个人的能力要求不一样;

·要选好业务。目前能通过网络完成的业务种类,不多,但也不少。

·交流是一个问题。还是看如何利用网络了。

·医疗和子女教育问题。子女教育问题不大,他们那一代,没几个人。

我的技术文章索引 三月 11th, 2009

留待编辑