抛掉重用的幻想,好使就行:用脚本生成脚本的例子

抛掉重用的幻想,好使就行:用脚本生成脚本的例子阿于同学说过,合肥同学不懂什么是"好使",所以,先解释一下。"好使"可能是
东北方言,大意是 可用,能工作,趁手。今天讲的是在用脚本生成脚本中,可以对付到什么程度。当年写用vba自动判卷的时候,某张同学说"这个要是再这么一下,那就更好了",
小韩老师说"唉呀大姐 (我记得是这样说的,小张比小韩要小) ,你是要开发个
工具,不是产品。"韩老师说的话大抵容易懂,而深刻,对我颇有教益,这一句就是。代码可以重用
到什么程度,给用户提供多大程度上的方便 (友好之类的),在工程中,不仅要
看未来和追求,也要视为一个急功近利的短期行为。如果我们在VBA判卷上做得那么完美的话,当年我跟偶像多半个下午判完全部试
卷的传奇故事就不会发生了。我们可能今天还在追求某个完美的细节。我记得当
年李老师质疑过我的判法,"你这么判,要是那么答,不就错了也得分么?"我
答,"是啊,不过换成人判,比如你,就能那么认真了?"写程序,我们要的只是比没程序更好,不是最好。"最"这种事,只存在于当今的
媒体、人民的幻想及文革前后的文革之中。对不起,错了,文革语言不仅是"最
",而且是"最最"。需要补课的同学请自行阅读参考书,这里不展开了。有时候,追求完美的重用--对未来的无比重视--会让我们失去今天。当然,失去
今天也就没有未来了。比如,年轻男女经常讨论的问题,类似于"以后到底谁刷碗"啊这样的。重用这和
这个类似。事实上,以我们的年轻和技术之浅薄,大多时候,因为没有足够的经
验,我们根本无法预测未来会如何发展。重用是什么?重用是在*未来*被自己或
别人*再次*使用。咱们这点破技术,知道未来如何再次使用这些代码么?有同学说,"书里说了"。呵呵。书归正传。用脚本生成脚本,一看这题目,不少同学就会想到编译原理啥的,还
有同学想到了lisp里的宏。我说的不是这些高级题目,而是极其朴素的刚刚能对
付得过去的手段。1. 所谓朴素所谓朴素,就是尽可能不使用和依赖高级的技术。比如,我到C++中的 flow
control的时候,讲到循环执行,给过这样的例子:请输出从1到5的数字。同学们给出的答案都是:for(int i=0;i<5;++i)
{
printf ("%dn", ++1);
}当然,漂亮。我的一个答案是这样的:printf ("1n");
printf ("2n");
printf ("3n");
printf ("4n");
printf ("5n");我看到了,得有超过半个班级的同学对我的写法嗤之以鼻。这代码太烂了,马上
就会有人指出,"要是输出到100呢,要是输出从8到20呢。"我的代码的缺陷,缺乏重用性,数量大了不好改。一,谁说我准备重用了呢?我
们一看到别人的问题,往往就要预想提问者的动机,有时甚至解读过度。中层对
上层的解读,往往如此,下层就受了苦。二,数量大的时候,其实也简单,我可
以在excel按ctrl拉鼠标,得到数字序列,然后再把这一列粘到C代码里。之所以能这么对付,是因为,我也可以假设这段代码只用一次,而且只被我一人
使用。2. 例1,跟牛同学的讨论前几天跟刘同学一起破解了个软件,我的解法暴力而有效,刘的解法更好,极其
优雅。可惜现在似乎还不宜显摆具体内容。不过,后续与牛同学的一些交流可以
在此讨论一下。我为牛同学分配的任务是,把这好几千个文件的名字改成符合某个算法要求的文
件名。文件名的对应关系,一部分在数据库里,一部分是C#代码。你打算怎么实现?牛同学准备写C#程序读数据库。我建议的方案是这样的,一个标准的对付流程。(1) 写C#程序,就是那段算法;
(2) 把数据库里的作为算法输入的那一列复制到C#代码里;
(3) 让段C#程序,输出很多行这样的文字:
mv "源文件名" "目标文件名"以上,用C#生成了shell程序或批处理,然后跑一遍就改了所有文件名。C#本身
并不操作数据库 (人手拷过来的),也不操作文件系统 (由shell程序完成)。如果算法变了呢?如果源文件列表变了呢?如果……所有这些问题的答案都是:重
新跑一遍上面的流程。用人,而不是用程序的可重用性。当鳄鱼冲上来咬你的时候,有一种情况,你绝对不要用刀。那就是,你手头没有
刀的时候。另一种情况,不建议用刀。那就是,你用刀非常不熟练的时候。你可
以抱住鳄鱼的嘴,它的咬合力惊人,但是张嘴的肌肉非常软弱。这个时候,并不
是你训练自己用刀的时候。同样的,当你不熟悉数据库操作,不熟悉在C#里文件系统操作的时候,你应该做
的是 不用它们。项目是用来解决问题的,其原始动机不是给咱们训练技术的--
技术可以在自己练习的时候做。项目唯一能训练的,是工程能力。就像鳄鱼问题
能训练的是随机应变和灵活寻找解决问题的手段。3. 例2我有个top250电影目录,下载的时候不知怎么整的,文件名非常长,而且中文部
分是乱码。一直准备把中文部分都删了,长期拖延,昨天晚上整了。原始的文件名类似于:
Top093.罪恶城市.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
准备改为
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv这样的文件有250个。这么整的。下面是一个整行$ ls -1 Top* | awk -F. '{ first=$1;
min=length($1)+length($2)+3;max=length($0);print ("mv "" $0 "" "
first "." substr($0,min,max))}'> ren.sh; chmod +x ren.sh然后,执行这个脚本,文件名就都改完了。文件中有 ' 或 ( 的,可能会出错。ren.sh这个脚本,是重定向输出的前半段产生的。这是unix系统管理中常用的一
个手段,用程序A生成一个脚本,用生成的脚本,而不是直接用程序A解决问题。脚本的内容是很多个这样的行,下面也是一个整行:
mv
Top093.罪恶城市.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv
Top093.Sin.City.UNRATED.ReCut.EXT.2005.BDRip.MiniSD-TLF.mkv4. 例4做等级考试的系统时,要批量ping机器以确定每台机器网络正常。我也使用了类
似的方法,用C生成ping.bat。bat里面是很多ping目标地址,及只ping一次的参
数,似乎还有一个超时设置为半秒的限制;C负责循环IP地址,好象是这样
printf ("ping -n 1 192.168.0.%d", i++);。IP地址的循环,我也用excel实现过。那套方案里,连C也不用。excel的几例中,有
一例是文字"ping -n 1 ",其余几例是IP地址的4个部分,其中最后一部分用
ctrl实现数字的递增。更早,也更朴素的方法,我用记事本复制第一行ping,然后粘贴几次,每次复制
已粘过的,行数翻倍增长;然后再手动修改IP地址最后一段。这些方法都很朴素,但是有效。5. 总结核心思想是,用代码生成代码;在这个过程是,保持注意目标是"小工具",抛开
重用的幻想。关同学前两天提到,我们在既往的开发中,代码最终都没有重用。我想,代码不
必重用,或者说,我们远没有达到那个高级阶段。能够解决问题,并重用解决问
题的手段--设计,就非常不错了。而且,毕竟设计很值钱,而代码够便宜。
--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

遇见高手

遇见高手高手似乎不常见,不过那是因为我们没睁开眼睛。"高手"二字又不是贴在脑门上
的。今天先是见了奇异天象,然后见识了巨牛高手两位。展示天象的这天,是天天得
见,只是不常抬手,这两个巨牛高手也是早就认识,还有一位没事就见,不过未
曾经常一见身手。从净月去应化所,我们坐关同学车里。我用嘶哑的声音大喊,"彩虹!"包师弟
说,"啊,你看到的是玻璃吧。"是啊,大晴的天,之前也没下雨,怎么会有彩虹。
不过二猫妈也看到了,不是我的错觉。关同学说,"我也看到了,在那。"我说,"你
快别看了,好好开车吧,吓死我了,你。"我打小到大没见过这样的彩虹。一长条,非常宽,横在天空里。随着车的移动,
能发现很有一部分藏在楼群的后面。变换了几次位置,始终没有看到全貌。我
想,得有几十公里的长度吧。是谁当时说,"是彩虹桥么?"我想起了赛德克・巴
莱,不过,说话人的意思,也许是以为我在讨论远处的某座水泥桥,叫这个名字。赶紧掏相机,不停地拍。经常有人问我,你老带个相机干什么。我一般答,"万
一哪天遇到UFO。"今天,虽无UFO,然而也派上了用场。晚上检查照片,发现其实那不是彩虹,而是更为宏大。那是日晕的一部分,是双
层日晕的外层。而内层日晕,因为阳光太刺眼,我们几个人都没有注意去看。高手也是这样,不显身手时,你哪里知道这家伙居然如此牛。高手故事之前想起
刘老师讲的一位体育老师,身高一米五几,非常瘦小,但是重达90多斤,练什么
武术的。一次遇到变相劫道的,上去是跟人家握手还是什么,反正一个照面对方
就服了。试想,她就这么往你面前一站,如果不显气场,哪个能看出来这是高手。我常用的座机是x200笔记本,装了Ubuntu 10.04 LTS,dell U2311H显示器。这
一组合的结果是,长期以来,我只能工作在1920x1080的分辨率下,而我的视力
相当不好,只好更贴过去。还有一个后果,因为x200只有vga输出,所以dell显
示器的hdmi及dvi-d接口都派不上用处。这种分辨率下,vga输出的显示器上经常
有条纹慢慢飘过去。高度近视的同学都知道飞蚊症。当年我问医生,能手术不。医生说,你不是还能
看见么,先对付着用吧啊。我说,看着这么闹心可怎么办啊。医生说,调整一下
心态就好了。我明白了,忍一忍吧。后来条纹到是没更重,但是我想,长此以往,眼睛该更完
蛋了。准备忍痛花钱解决一下。花钱,指买点设备,不是换眼睛。以前就跟包师弟谈过。我说:我那机器有点毛病……包师弟说,因为你那是VGA的,它
的分辨率上限就是这个,规范啊带宽啊云云。今天,我又重提这个。我说:打算买个PCMCIA卡。包师弟说:你换个操作系统就好了。我说:我不打算用windows了。包师弟说:那你升级一下呗,原来的东西还都在,我升完了。我说:嗯,不错。包师弟说:其实你用这样的分辨率 (他指着牛同学的大约1024*720说),就不晃
了。我说:我的显示器不支持啊,16:9的分辨率只有这一个,其余的都是4:3,看
着太扁了。包师弟说:那是你的操作系统不支持,不是显示器不支持。如果你的操作系统连
这个分辨率都不支持,你确定它支持PCMCIA。我顿时没词了。我:我打算买个vga转dvi-d。
包师弟指着我的vga口:瓶颈在这里,从这出来的时候就有条纹了。我顿时再次没词了。包师弟说:其实应该能添加定制的分辨率。然后,晚上,我添加了定制的分辨率,结束了长期的小字生涯。虽然由于弱视散
光还是看不清楚,但是总比小字容易辨认很多。再然后,我准备给包师弟发封邮件感谢,发现他已经把一个链接发给我了,就是
如何添加定制分辨率的。可能有的同学说,添加个定制分辨率么,你这么感慨。这跟另一件事非常类似。刘同学替我讲算法与程序设计实践课的时候,选的主题
是用setjump实现C语言的异常捕获。我事后对同学们说,他要讲的并非setjump
函数及用法,这些知识没有多么重要。他要讲的是:如何在一个受限的平台上使
用受限的开发工具,实现原来没有的功能。这正是工程师的一个重要素养,修改原有方法,实现新的功能。包师弟的杰出在于,精确的判断路径。他一语道破,为啥我的那些解决方案都是
愚蠢的。这甚至不必实验,因为我的计划是不符合原理的。我仅知道原理,并认
同,而他看到了由原理导致的结果。高手的特点就是,你只看到了那家伙一侧
身,而高手知道他是准备来个后踢,然后一脚踹他屁股上。下午,见另一位高手,董老师。董老师卡卡讲了半下午,数学、信号系统、电子
学、化学、计算机程序--结论是它们都是一致的。事涉项目机密,具体内容不能
深谈了。总之,牛人说"这个挺简单的",那个时候,他真的觉得那个东西挺简单的,以他
的标准。而当他实现,对他真的很简单。因为我们的那些错误技术路线,他根本
就不会遇到。比如,他使用针对特殊问题采用特殊的方法,他更清晰地看到问题的本质 (什么
是什么,具有什么特性,而不是什么,那个特点一点也不需要考虑;比如包师弟
上午指出:临域均值是一种拟合,使用线性函数,所以平滑不是什么特殊的东西)。还有。当我们看到那个理应简单的电路,结果高手用了相当多的器件;那个应该
非常短的代码,高手写了N长。那正是他们比我们高级的地方。他们的设计能够
在更恶劣的环境工作,能检测更精细的信号。我们的,只有在特定的场合下能测量特定的东西。更糟糕的是,我们可能还不知
道,以为高手们的设计那么多多余的东西。所谓沧海横流,方显英雄本色。我们
平时也挺牛的,沧海一流,我们就成了培养英雄的土壤。有一次修打印不干胶的机器,串口接计算机上,那个串口坏了。我把机器换到另
一个串口,然后把软件设置中的串口也改了过去。因为第一个判断就对了,所以
前后不到半分钟。所以,当时听到"哇,原来这么简单啊。我也会啊。"作为答复,我当时讲了个故事。一个家伙马桶堵了,怎么也捅不开,只好找水暖
工。水暖工来了以后,三下五除二把马桶下面打了个洞,然后就修好了。马桶的
主人也是,"这样也可以啊,我也会啊。"可是,你不知道"这样也可以"啊。这就是画一条线999美元的故事。在不干胶机器的案例中,我当时还有没说的。除了第一方案,我还设想了四五种
可能的原因,如果一击不中,我还有后手的。你也有么?我只是极其偶尔才冒充一把高手。不过道理是一样的,我们见不到高手,往往是
我们自己的眼睛睁得不够大,以为他们与我们相同。那些不同,正是我们无缘或
没有能力见到的,把我们与英雄区分开来。听说海因莱因认为"一个人应该有能力换尿布、策划侵略、杀猪、给轮船掌舵、设
计建筑物、写十四行诗、平衡收支、造墙、接骨、安慰临终之人、写菜单、发布
命令、合作、独立工作、解方程、分析新问题、施肥、写电脑程序、做可口的饭
菜、有效地战斗、英勇地死去。"我除了最后一条能部分实现,其余的,竟无一命
中,真是失败。命中那部分,就是能死,甚至这一条也无法全部满足,因为绝对
无法做到英勇。不过,能遇到高手,也算幸事。是不是还有很多人以为自己一直没有遇到过高手
呢。
--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

为什么要自己架个"gtalk"服务器

为什么要自己架个"gtalk"服务器如果你也因为不使用QQ,同时偶尔有即时通信的需要,GTALK又被隔在GFW下时而
不能登录,那么可以试试自己架设一个服务器。GTALK基于一种开源通用的聊天协议,叫做jabber,或者XMPP。凡是遵循jabber协
议的服务器和遵循jabber协议的客户端都能相互通信,这样的免费开源服务器和
客户很多。服务器之间可以连接起来彼此通信,还可以与msn等聊天工具互通。在这里,我
只架单个服务器,容纳几个账号。各种感慨都在最后,非技术人员请从此跳过,方法是按END键。1. 选型很多种服务器,著名的有 jabberd2, jabberd14, openfire。我用了openfire,
因为1.它支持web管理界面,偶尔远程管理的时候工具容易选择;2.支持
ssl/tls,通信安全;4.有deb包,ubuntun容易安装;5.基于java虚拟机,也可
以在windows上跑。客户端也有很多种,我用得少,感觉不到太多差别。为了测试,我这次安了
gajim,平时主要用emacs-jabber。2. 安装安装真是没啥可说的,下载
openfire_3.7.1_all.deb,[http://download.igniterealtime.org/openfire/openfire_3.7.1_all.deb]
然后装上。3. 运行这个麻烦点。起初,各种毛病,反正我没运行起来。网上说openfire的手册要比jabberd*要好,不过我没空看。比如存储账户信息,
我希望使用内置的数据库,不想用mysql。因为顶多10个账户以下,而且跑在我的
笔记本上,根本不想为此架个mysql server。但是,报错,说内置数据库有麻
烦,参见手册,但是在手册的哪里,没有提。后来终于找到 (跟着某位大侠的贴
子,他说,他就要放弃时找到了)了,说是第17 次版本更新的时候(?)数据库的
语句写错了,应该把哪段以前的都删除就好了。我登时傻眼了。怨不得有人说开源的维护成本高,这手册是给人类看的么。又一顿折腾,我屈服了,安了mysql。可能有的同学会问,你为什么不架jabberd14或jabberd2呢?因为我遇到了更大
的麻烦。用ubuntu软件中心安装上以后,我参考了一下手册,我又傻眼了。手册
上说,要先建 jabber 这个用户和组。我知道,又有同学跳出来说了,这难么?不难。问题是,此时处在"用ubuntu软件中心安装上以后"这个时间点,我发现
jabber 这个用户和组已经建了。那应该是ubuntun软件中心的版本建的,那么,
接下来手册里的步骤,哪些已经完成,哪些没有完成呢?一步一步检查?我可能检查了20步,都完成了,一放松警惕,结果第21步软件中
心没自动给建好。所以,在jabberd*两个版本上,我花了一个小时,两个小时
(?),然后放弃了。如果你小的时候,有大人一边给你喂药,一边说"不苦",结果你吃下去苦得直咧
嘴;如果你修牙的时候,牙医说"不疼",结果整得你一身汗;如果你的高中老师
告诉你上了大学就好啦……以后你都不要相信他哪怕一句话。总之吧,后来我使用mysql,安装mysql-server, mysql-client, jdbc。然后
jabber服务器openfire就跑起来了。剩下的,还需要数据库的一些设置,登录口令和主机啦啥的,你如果会也不用我
罗嗦,你如果不会,我这一篇也写不下,如果只列上我的步骤,哪怕一小步你的
机器跟我的不一样,还特别把你引入歧途。所以,略。对了,得跑下面这条语句:
> cat openfire_mysql.sql | mysql openfire -u root -popenfire_mysql.sql这个东西,在我机器里是在
[/usr/share/openfire/resources/database]下面。参见
[http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database.html]。4. 客户端连接
* with emacs-jabber
localhost:5222 ssl* jabber客户端 gajim用户名需要类似 young@young-laptop; localhost:52225. 外网连接这个时候,内网就可以用了。如果你在防火墙 (或者NAT,或者无线路由)的里
面,而你需要外网用户连进来,需要查到你的外网IP。可以这么查,用浏览器访问[http://www.showmyip.com/]。然后你需要设置防火墙 (或者NAT,或者无线路由),让从外网能够访问你的防火
墙某个端口,相当于对应访问内网你的jabber server的IP及端口。为啥说这么
麻烦呢,因为不同的防火墙在这时使用的名字不一样。比如我的,在"转发规则
->虚拟服务器"里设置。为了对用户友好,开发商起了这些"友好"的名字,结果
连专业人员也不知道那是什么了。用户?当然也不知道。以上设置完成以后,你可以告诉你要聊天的对象,让他把jabber客户端的服务器
设置为你的外网IP,还有端口……然后,你们就可以聊了。6. 其他我禁用了注册用户的功能,凡是要用的,手动添加。文字聊天,传文件,都行。
语音没试,我嗓子基本还是不能发声,所以没啥意义。还有,各种客户端里,还就是pc版的gtalk不行,它不能更改服务器的地址,只
能连到google。--------------------有的同学可能会问,你为啥不用QQ呢?其一,2007年12月,我在博客里提到 我永不使用QQ,"永"对现在而言,仍然是有
效的。其二,QQ是某个公司开发的产品,使用者没法选择这一服务而拒绝产品。如果你
使用电子邮件这一服务,有很多产品可以用。对网络中心提供的不爽,你还可以
用google的,对google不爽,你还可以用163的。你对QQ提供的不爽呢?其三,QQ的一些模式真的令我非常不爽,不仅2007年底事件,还经常让我想起许
多敏感词。比如吧,比如,我发放课件的时候,会向同学的信箱发送,而不是要求同学到我
的博客或网站下载,原因非常简单,要求别人如何如何,是一种*侵入式*的合作
方式。如果老板要求下属必须使用某款手机,不能要求下属去买一个,而只能为下属备
好免费的,还要问下属乐不乐意非工作时间带在身上,要不要公司为带这么沉个
东西付补偿款。老板不能因为员工也可以用这手机聊聊私喀,就理所当然地认为
有权利要求下属了。这让我想起李记者讲过的例子:为了避免侵版被告,公司老板要求员工自备操作
系统和所有开发工具。你怎么不要求产业工人自备车床呢。所以,各种旧的和新的原因吧,我仍然不使用QQ。很多同学问过我这个问题了,
你一个IT男为啥没有QQ呢。2007年12月那篇博客,我是这样写的:我将永不使用QQ。
我的MSN和邮箱:[email protected]
对给您带来的不便深感抱歉。
添麻烦了。有不少朋友问到原因。如果你不知道,麻烦google: QQ soff查对方IP可以使用netstat或其他QQ版本。以此纪念soff君。不认识soff,也基本
没用过他的作品,也不关心审判结果。弃用是因为感情上不再能接受QQ,不是技
术原因。转个故事,说明一下原因。古时候,阿跋斯哈里发王朝的第四代哈里发叫阿尔・马蒙。他有匹千里马。一
次,一个叫奥玛的商人路过巴格达,他看到阿尔・马蒙的马,羡慕不已,提出用
十个金币来换,但阿尔・马蒙说就是给一百个金币,他也不换。奥玛恼羞成怒,
决定用诡计把千里马骗到手。奥玛打探到阿尔・马蒙每天独自溜马的路线,选择了一个离城门最远,人迹罕至
的地方,乔装成病重的流浪汉,躺在路边。果然,善良的阿尔・马蒙看到
有人病倒路边,赶紧把他扶上千里马,打算带他进城治病。奥玛装作有气无力的
样子指了指地上的包袱,阿尔・马蒙把他的包袱拾起来,系在马背上。奥
玛又指了指远处的木棒,阿尔・马蒙以为这是流浪汉的木棒,忙转身去捡。
奥玛趁机夺过缰绳,纵马逃走。阿尔・马蒙追在后面追了很久,终于跑不动了。奥玛知道奸计得逞,便想奚落奚落
阿尔・马蒙。他勒住马,得意洋洋对阿尔・马蒙说:"你丢了千里马,连一
个铜子也没有得到,都是因为太慈悲了。你还有什么好说的?""马可以归你,但我有个要求," 阿尔・马蒙大声说,"别告诉别人你骗走千里马的方法。"奥玛哈哈大笑说:"原来哈里发也怕别人嘲笑!""不,"阿尔・马蒙喘着粗气说,"我是担心人们听说这个骗局后,会怀疑昏倒在路
边的都是骗子、强盗。说不定哪一天你我也会染疾,倒卧路边,那时谁来帮助我
们呢?"后来,两年前吧,与包师弟聊天QQ和gmail等事情。对话基本是这样的:你不用QQ,如果哪天gtalk也封了呢?那我们就用gmail,然后电话或短信通知邮件发了吧。如果gmail也封了呢?对话围绕着,如果A不能用了,那么用B吧,如果B也不能用了,那么用C吧……如果
Z也不能用了,我们要不要用QQ呢?一个人,你可以杀死他,但是,也不能令他屈从。屈从,以及生命,不能共存于
一个人的身体中。好在,除了QQ,我们不是还有别的么,比如 jabber server。--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

去看李记者,天津印象

去看李记者,天津印象李记者现在天津工作。丹麦著名的制药公司(或者著名的丹麦制药公司?),NNIT。
NNIT以生产治疗糖尿病的药而闻名,老李同学正需要这个。lars说,李记者去对
地方了。不过,正如李记者其实不是记者,而是IBM什么技术方法的咨询师一样,
他的NNIT也不产药,而是产软件的。去天津看了他一趟。坐下吃了半天饭,我说:你瘦了啊。才注意到。这家伙已经由圆脸变成了方脸,
隐约有皱纹。他说:140斤了。这就跟我的份量不相上下了。不过他肚子尤在且大,刘典同学不必担心,你仍然不是最胖的。然后我们开始总结他变瘦的原因。三班倒,天津太热,天津空气不好。诸如此类
的。在这之前,李记者带我参观了意大利风格的小镇。没错,在天津,一个意大利风
格的小镇。也不知道像不像,反正我没去过意大利。李记者说,那个叫"花仙子"
的雕塑有几份复制品,摆在好几个地方。真的,这几个半裸女子有的互相还能看
到呢。去吃早餐的时候,他非常小资地带我去了星巴克。我非常小资地选择了坐在外面
木头地板上。然后他告诉服务员把遮阳伞打开,我惊叹:这东西原来是能打开的。
这可不是瞎扯,当时我确实没想到那东西居然还能打开,脑袋不够用。天津很
热,而且漫天大雾,雾气似乎完全不流动,就缠在你的每个毛孔旁边。你刚刚渗
出一点汗,就生生给你逼回去。CPU过热的感觉。在这样的雾里行走,觉得自己不是很清醒。像是刚散了瞳,世界非常明亮,而极
端不清晰。我看到完全不能转的摩天轮立在广场上,在海风里生着铁锈。它的后
面是满是青色玻璃的大厦从雾里一直插进云里。还有伪装成很古老的忘了名字的
桥,上面立着些金光闪闪的女神,每个人手里端着一样乐器。海河在桥下静静地
流,像这里的浓雾一样没有波澜。看呐。一个家伙在海河里游泳。我赶紧把相机拽出来,这会工夫,他又改成了安
逸的仰泳姿势。旧的波纹在他周围慢慢散开,再也没有新的。欧洲小镇里来来回回的,是来自西安的河南的各地的游客。导游拿着个大功率的
喇叭,"一九几几年……"我说:就这点不像欧洲啊。他们的导游似乎不带迈克的。李记者问:扯嗓子喊么?我说:不。他们人少,能听见。我俩大笑。我说:另外,这会吵到别人吧。我的声音非常小,不是因为修养,是因为声带还在失声。所以,大部分时间都是
李记者在说,我只是倾听。其实,这也正是他需要我做的吧。偶尔,我讲起"有
一个新故事,是这样的……"。他说,"哈哈,你真的老了。这个故事你讲过啦。"是吧,我们就是这样开始衰老的。衰老从来不是渐变的,而是突然产生的。你生
了一场病,然后很快就老迈了。我老到开始重复自己说过的话了,而且还不记得。我拖着行李箱,他背着有NNIT标志的书包。我们走在天津的街道上--为了伪装成
欧洲小镇的效果,街上的铺路石特意很不平的样子,我的行李箱一直
gegelengleng响着。不过我猜,那些铺路石并没有看上去和应该的那么深。我们这样走了很有一会儿,因为小镇在执行欧洲坐息时间。饭店都要11点以后才
能营业。除了游客导游,还有维修维护和清洁工走来走去。我和李记者坐在星巴
克的伞下,观察他们。非常非常热,太阳很亮,我不由得眯着眼睛。去厕所的时候才知道,原来星巴克里面非常地凉快,空调大开。我原以为屋里要
比外面更难忍呢。但是我们仍然坐在外面,这样才够小资。事实上,有一些我还是没有告诉你,而只是选择了小资的那部分侃侃而谈。比如,我脱了鞋,把脚搭在对面的椅子上。虽然只有我们两个小资的顾客坐在外
面,也不算雅观。而且,我换上了跨栏背心--或者你也可以理解成男式吊带或大
砍肩式样的。再比如,我们离开饭店去车站,坐的是小三轮摩托。我没有想到天津这样的城
市,这种交通工具居然还合法大行其道。这确实有点欧洲精神,不过一点也不小
资。再比如,在小三轮摩托上,李记者似乎看着窗外,其实已经开始点着头睡过去了。
他在和我见面之前,刚刚上完夜班,然后是1个小时的车程赶来。再比如。我们在车站的广场握别,互道珍重。我转身走出一段路,回过头,放下
行李,取出相机,开始拍李记者的背影。他背着NNIT的包,逐渐深入到雾里去。
大雾依旧。近处远处的高楼在雾里沉浮着,这个城市才刚刚醒来。而李记者,要
回去睡觉了。在火车上,我发送短信给他。当我到达长春,他的短信回复了。深夜,我们都出
现在网络上。我们说:相聚时短,各自珍重。博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]