2005年06月28日

新浪、搜狐、163、TOM、263.net  等等一些知名的ICP 为什么要拥有自己的邮箱?这是一种技术实力的体现,也是自己网站整体架构的说明。

而如果自己做不出来邮件系统(其实科技含量也没有多大)而不得不求助YAHOO 穿人家的“马甲”搞出一个

例子:  abc.donews@yahoo.com.cn
        abc@donews.com

大家都并非盲人:上面两个邮箱是一样的,从YAHOO登陆用上面那个,从DONEWS用下面那个,欺骗自己也就罢了,何必再去欺骗别人。


服务器依然在美国,速度依然很慢,这个问题不是说用了 donews.com 就快了。我看还不如去用 163.com

新浪、搜狐、163、TOM、263.net  等等一些知名的ICP 为什么要拥有自己的邮箱?这是一种技术实力的体现,也是自己网站整体架构的说明。

而如果自己做不出来邮件系统(其实科技含量也没有多大)而不得不求助YAHOO 穿人家的“马甲”搞出一个

例子:  abc.donews@yahoo.com.cn
        abc@donews.com

大家都并非盲人:上面两个邮箱是一样的,从YAHOO登陆用上面那个,从DONEWS用下面那个,欺骗自己也就罢了,何必再去欺骗别人。


服务器依然在美国,速度依然很慢,这个问题不是说用了 donews.com 就快了。我看还不如去用 163.com

新浪、搜狐、163、TOM、263.net  等等一些知名的ICP 为什么要拥有自己的邮箱?这是一种技术实力的体现,也是自己网站整体架构的说明。

而如果自己做不出来邮件系统(其实科技含量也没有多大)而不得不求助YAHOO 穿人家的“马甲”搞出一个

例子:  abc.donews@yahoo.com.cn
        abc@donews.com

大家都并非盲人:上面两个邮箱是一样的,从YAHOO登陆用上面那个,从DONEWS用下面那个,欺骗自己也就罢了,何必再去欺骗别人。


服务器依然在美国,速度依然很慢,这个问题不是说用了 donews.com 就快了。我看还不如去用 163.com

2005年05月27日

华军软件园》提供更快、更全面的软件下载、同时提供用户更好的邮箱服务。

  • 50M容量信箱
    邮箱一般是用于来往信函的传输,50M邮箱空间可以满足大多用户的需求。
  • 杀毒引擎
    为了使广大用户免受病毒邮件的侵袭,华军免费邮箱提供专业的杀毒引擎。
  • 防垃圾
    垃圾邮件尽管不能完全杜绝、但是我们可以做到大幅度降低垃圾邮件对用户的骚扰。
  • 快捷资讯
    通过华军邮箱、您可以了解各类软件更新、以及软件功能综述。
  • SMTP/POP3
    方便用户收取和发送邮件、支持SMTP 和 POP3 ,可方便使用OUTLOOK FOXMAIL 等客户端收取或发送邮件。
  • 1000M铁通干线
    1000M铁通IDC干线提供稳定可靠的邮件传输通路、专业的邮件服务器提供可靠的术支持。

2004年10月01日

FreeBSD下的性能调优

作者: 译者: xuyifeng
邮件: webmaster@kingisme.com
出处: http://www.freebsdchina.org/

译者: xuyifeng
Last Updated: Dec-19-2001 | First Version:Dec-18-2001

——————————————————————————–

FreeBSD下的系统性能调优

SYSTEM SETUP – DISKLABEL,NEWFS,TUNEFS,SWAP
当用disklabel(8)在你的硬盘上布局文件系统时,重要的是要记住硬盘在传送
数据时外磁道比内磁道快。为了利用这个特点,你应该把较小的文件系统和交
换区靠近外磁道,随后是较大的文件系统,最后是最大的文件系统。还有重要
的是把标准文件系统大小确定在当你要增加这台机器负荷时也不需要重定他
们的大小。我经常建立的文件系统的次序是128M的root,1G的swap,128M的
/var/tmp,3G的/usr,其余的空间留给/home。

典型地,你应该把交换区大小定为2倍的内存大小。如果你没有很多内存,那样
的话,你将需要更多的交换区空间。不建议将交换区定在小于256M,当你确定
交换区大小的时候,你要考虑到将来可能要扩充内存。内核的VM(虚拟内存)换页
算法性能是准对交换区至少是内存大小2倍的条件进行优化的。配置太小的交换
区会导致VM页面扫描的低效率,当内存扩充后,随之也会导致问题。最后在一个
有多个SCSI硬盘的大系统上(或者有多个IDE磁盘工作在多个IDE 控制器上),
我们强烈建议在每个驱动器上配置交换分区,每个交换分区的大小应该是几乎
一样的,内核能处理任意大小的交换区,但是内部数据结构放大到最大分区的4
倍大小。保持交换分区同样的大小允许内核优化地将交换空间交叉分布在N个
磁盘上。不要担心这样做有点过份,交换区是UNIX的救星,甚至于你虽然通常不用
那么多交换区,在被迫重新启动之前,它也可以给你时间去从一个出轨的程序中
把系统恢复过来。

怎样为你的/var分区定大小主要依赖于你将怎样使用这台机器。这个分区主要
存放邮箱,打印缓冲区和日志文件。有些人甚至于把/var/log作为一个独立的
分区(但是除非有特别的情况,这样做不值得,只会浪费一个分区ID)。如果你这
台机器主要用做邮件或打印服务器,或者运行一个大访问量的WEB服务器,你应
该考虑把这个分区建的更大一点,可能1G或更多。很容易低估日志文件的存储需
求。

确定/var/tmp的大小依赖于你将需要怎样使用你的临时文件。128M是建议的最
小的尺寸。注意sysinstall将建立一个/tmp目录,但是通常把/tmp作为/var/tmp
的连接是个好注意。为临时文件建立一个分区有两个重要的原因: 首先,它减少
了系统崩溃后文件系统损坏的可能性,再就是减少一个出轨程序填满[/var]/tmp
时影响其他重要子系统(mail,logging等等)的机会。填满[/var]/tmp是经常发
生的问题。

在以前/tmp和/var/tmp是不同的东西,但是引入/var(和/var/tmp)是被程序员
引起的大迷惑,今天的程序间或使用一个或另一个,它们两者变的没有区别。
所以把它们变成一个临时目录是有道理的.然而,当你处理/tmp时,有一件事
情是你不想做的,就是把/tmp驻留在根分区上,导致根分区被填满或崩溃后重
启时文件系统损坏.

/usr分区存放大量用于支持系统的文件,子目录/usr/local存放大量从ports(7)
安装的文件.如果你不那么多使用ports,也不将系统源代码(/usr/src)存放在
机器上,你可以为/usr节省1G的磁盘空间.相反,如果你安装大量的ports(特
别是窗口管理和Linux仿真)建议你至少2G的/usr,如果你还要将系统源代码放
在机器上,我们建议你3G的/usr,不要低估所需的空间,它会慢慢爬起来,让你
大吃一惊.

/home分区存放用户自己的数据,我通常把余下的空间留给这个分区.

为什么要分区? 为什么不建一个大的/分区就行了? 那样我就不需要考虑分区大
小问题。有几个原因显示这不是个好注意。首先,每个分区都有不同的操作特征,
分开它们有利于文件系统准对这些特征调整它自己.例如,根和/usr分区主要是
读操作,只有少量的写,而大量的读和写可以发生在/var在/var/tmp。把小的但
是具有更繁忙的写操作的分区分开,就不会影响读操作居多的分区.再就是,把
写操作居多的分区靠近磁盘外侧(例如,不是在一个大分区前,而是分区表后)有
利于对你经常需要的分区增加性能。你可能也需要在大分区中的I/O性能,但是
它们是那样的大以至于把它们移到磁盘外侧也不会显著增加性能,但是把/var移
到磁盘外侧会有显著的不同.

正确分区你的系统允许你调整newfs(8)和tunefs(8)的参数。调整newfs(8)需要更
多的经验,但是会带来显著的性能提高。有三个参数可以相对安全的调整:
blocksize(块尺寸),bytes/inode(每i节点字节数)和cylinders/group(每组柱面
数).

当块尺寸是8K或16K时,FreeBSD运行的最好.缺省的文件系统块尺寸是8K。对于
一个大的分区使用16K块尺寸是个好注意.这同样需要你指定碎片(Fragment)大小。
我们建议碎片总是块大小的1/8(其他的碎片尺寸测的不多)。newfs(8)选项是
newfs -f 2048 -b 16384。。。。使用更大的块尺寸将导致缓冲区碎块,降低性能.

如果大分区主要趋向于使用少量的大文件,例如数据库文件。你可以增加
bytes/inode比例,它减少该分区的i节点的数量(最大可被建立的文件和目录数量
)。减少文件系统i节点数量可以大大减少fsck(8)在系统崩溃后恢复的时间。不要
使用这个选项,除非你确实在这个分区存放大文件.如果你过度这样做,你可能
会被文件系统依然有大量的空间而不能创建文件的事情所困扰。使用32768,
65536或262144 bytes/inode是建议的值。你可以调的更高,但是那只影响fsck的
恢复时间.例如,newfs -i 32768…

最后,增加cylinders/group比例可把i节点间距放的更近。这样可以增加目录性能
和减少fsck的是时间.如果你使用这个选项,我建议最大化。使用newfs -c999,
然后newfs报错会告诉你最大可能的值.

tunefs(8)可以进一步调整文件系统。这个命令可以运行在单用户方式而不用重
新格式化文件系统。然而,这个程序可能是系统中最容易被滥用的程序。许多人
企图通过把最小自由空间百份比设置为0来增加可使用的文件系统空间,这可
导致严重的文件系统碎片,我们不建议这样做。实际上唯一值得使用的tunefs
选项是使用tunefs -n enable /filesystem 打开softupdates开关(注意:在5.x中,
可以用newfs -U选项打开)。softupdates戏剧性地提高meta-data的性能,主要
是文件创建和删除。我们建议对所有的文件系统都打开softupdates开关。
softupdates有两个副作用你必须知道: 首先softupdats保证当系统崩溃时文件
系统状态的一致性的,但是更新磁盘可能要延时几秒种。如果系统崩溃,可能
丢失更多的数据。第二,softupdates延时文件系统自由块的释放,如果你的文
件系统将要满了(例如,根文件系统),对系统做一次升级,例如,make insta-
llworld,可能导致空间不够而失败.

大量的运行时mount选项可以帮你调整系统。最明显最危险的是async。不要尝试
使用它,这太危险了.一个危险性更少但是很有用的选项是noatime。UNIX文件
系统通常更新文件或目录的最近存取时间,这个操作在FreeBSD内部被延时写处
理,通常不会成为系统的负担.如果你的系统连续存取巨量的文件,缓冲区会被
更新atime而弄脏变的紧张,成为系统负担.
例如,你正在运行一个高负载的web服务器,或者一个有大量读者的news服务器,
你可以考虑在大分区上关掉atime更新的mount选项.不要无理由的在任何地方关
掉atime更新选项,例如,你最好在那些以读居多的分区上保持打开这个选项,
例如/和/usr。(特别是/,因为很多系统工具使用atime字段报告系统状况)。

STRIPING DISKS
在一个更大的系统上,你可能把一个分区分布(strip)到几个驱动器上去以建立
一个更大的分区。striping可以通过把操作分开到不同的磁盘上去而提高文件
系统性能。vinum(8)和ccd(4)可以建立strip化的文件系统。通常的说,strip
化一个小的分区例如根和/var/tmp或以读居多的分区例如/usr是彻底浪费时间。
你应该strip化那些需要严重的I/O性能的分区,典型的是/var,/home和定制的
用来存放数据库和web页的分区。选择正确的strip尺寸是同样重要的。文件系
统企图把meta-data放在2的倍数边界上,你总是希望减少查找而不是增加查找。
这意味着你要使用大的离心strip大小例如1152个扇区,使得顺序I/O不用查找
几个磁盘而meta-data将分布在不同的磁盘上而不是集中在一个磁盘上。如果
你真的很老练,我们建议你使用FreeBSD支持的控制器列表中的真正的硬件raid
控制器。

SYSCTL TUNING
在系统中有几百个sysctl(8)变量,包括那些看起来可以调整但是实际上不是
的那些。在这个文档中我们将只是涵盖那些会最大地影响系统的sysctl。

kern.ipc.shm_use_phys缺省是0,可以被设置成0(off)或1。把它设置1引起
SysV共享内存段被映射到不可交换的物理内存上。这个功能只影响那些或者
(A)映射少量内存并在很多进程间共享或(B)映射大量内存并在任意数量的进
程间共享内存的情况。这个功能允许内核通过将共享内存页锁定在核心存储
中而消除大量的内部内存管理和页面跟踪的开销,使得它们不可被换出。

vfs。vmiodirenable缺省是0(不久将改为1)可以设置为0(off)或1(on)。这个
参数控制目录怎样被缓存。大多数目录是小的而且只使用在文件系统中的一
个碎块(典型的是1K)甚至在缓冲区中更小(典型的是512字节)。然而,在缺省
的操作模式中,缓冲取只缓冲固定数量的目录哪怕你有巨量内存。把这个
sysctl打开就允许缓冲区利用虚拟内存页缓冲来缓冲目录。这样做的一个缺
点是最少也要用去一个物理页面(典型的是4K)而不是512字节。如果正在你正
在运行一个需要操作大量文件的服务,我们建议你打开这个选项。这些服务
包括web页缓冲,大mail系统,news系统。打开这个选项通常情况下不会导致
性能下降哪怕甚至内存浪费,但是你要尝试去发现。

有几个和buffer-cache及VM page cache相关的sysctl。我们不建议去弄乱
它们。从FreeBSD 4.3开始,VM 子系统能很好的对自己做调整。

如果你在运行面向网络的应用,net.inet.tcp.sendspace和net.inet.tcp.
recvspace是特别令人感兴趣sysctl。它们控制任何一个tcp连接允许的发送
和接收缓冲区的大小。缺省是16K。通过增加缺省值牺牲更多内核内存你总能
够获得更高的带宽利用率。如果你正在服务成百上千个连接,我们不建议你
增加缺省值,因为那样很容易因为滞留的连接累积起来后用完内存。
但是如果你需要高带宽甚于更少的连接数量,特别是你有千兆以太网,增加
缺省值将会得到完全不同的结果。你可以分开调整接收和发送缓冲区的大小。
例如,如果你的机器主要是做web服务的,那么你可以减少接收缓冲区的大小
用来增加发送缓冲区的大小而不用吃掉更多的内核内存。注意路由表(参见
route(8))能用于与路由相关的发送和接收缓冲去的缺省大小。另外一
个工具是你能用防火墙规则中的管道(pipe)限制从某个IP地址或端口区出去
或进来的流量。
例如,如果你有T1线路,你可能想要限制web流量为整个T1线路的70%而把余
下的带宽留给mail和交互方式的使用。通常一个被繁忙地访问的web服务器
不会显著的增加对其他服务的时延,但是强制这个限制能使事情更加光滑导
致更长时间的稳定。为了确信不使用太多的带宽,许多人也人为地强制带宽
限制。

除非双方主机支持TCP的窗口伸缩扩展,把TCP发送和接收缓冲区定为大于65535
将导致魔术般的性能提升,窗口伸缩由net.inet.tcp.rfc1323控制。这个
扩展应该被使能并且为了在一些网络链路上获得好的性能,TCP缓冲区大小
应该设置为大于65536,特别是千兆广域网和高时延的卫星链路。

我们建议你打开这个开关(设置为1)并且让net.inet.tcp.always_keepalive
也设置为1。缺省是off的。这增加了一些网络带宽的使用,但是一些死掉的
连接最终能被识别并清除。死的TCP连接是被拨号用户存取的系统的一个特别
的问题,因为用户经常断开modem而不正确的关闭活动的连接。

kern.ipc.somaxconn限制接收TCP连接的侦听队列(listen queue)的大小。缺省
是128,这对在一个繁忙的web服务器环境中可靠的处理新的连接来说太小了。
在那样的环境中,我们建议增加这个值调到1024或更高。服务进程可能自己限
制侦听队列的长度(例如sendmail(8),apache)但是总会有一个配置项在配置文件
中允许你调整队列的大小。大的侦听队列也能更好的抵挡DOS攻击。

kern.maxfiles决定系统支持打开多少个文件。缺省的是几千个但如果你在运行
数据库或大的很吃描述符的进程可以把它设到1万或2万个。

vm.swap_idle_enabled在大的多用户系统中是很有用的,那里有大量的用户进
入和离开系统而且有大量的空闲进程。那种系统趋势是对于空闲内存的保留上产
生大量持续的压力。打开这个功能调整换出(空闲秒数)。通过vm.swap_idle_
threhold1和vm.swap_idle_threshold2允许你以比普通换出算法更快的速度降
低与空闲进程联系着的页面的优先级。这等于帮了换出守护进程(pageout
daemon)一把。不要打开这个选项,除非你需要它,因为你在做的交易是预先
而不是后来吃掉更多的交换空间和磁盘带宽。在一个小系统上这个选项有影响
而在一个已经发生换页的大系统上这个选项允许VM系统更加容易地把整个进程
换出或换如内存。

BOOT-TIME SYSCTL TUNING
有些sysctl在运行时是不能调整的因为内存申请必须在引导的早期进行。要改
变这些sysctl,你必须把这些值放在loader.conf(5)并且重新启动系统。

kern.maxusers缺省值是难以相信的低。对于现在大多数机器,你可能需要增
加这个值到64,128或256。我们不建议你超过256除非你需要一个巨大的文件
描述符数量。网络缓冲区也将被影响但是可以由另外的内核选项来控制。不要
只是使用maxusers来增加网络mbuf。比FreeBSD4.4旧的系统没有这个sysctl需
要使用内核配置选项maxusers来设置。

kern.ipc.nmbclusters可以调整用来增加系统愿意申请的网络mbuf的数量。每
个cluster(簇)大概2K的内存,所以值1024代表保留2M内核内存作为网络缓冲区。
你可以简单的计算出需要多少。如果你有一个web服务器最多可以有1000个并发
连接,每个连接吃掉16K接收和发送缓冲区,你大概需要32MB的网络缓冲区来对
付它。一个比较粗糙的方法是乘以2,所以32MBx2 = 64MB/2K = 32768。所以这
个情况下你将需要设置nmbclusters到32768。我们建议为那些内存不多的机器
设置1024到4096而4096到32768为那些有很多内存的机器。无论如何如何你不能
设置一个很随意的值,这可能导致启动时崩溃。netstat(1)的-m选项可以用来查
看网络缓冲区的使用情况。老的FreeBSD系统没有这个sysctl,所以需要设置内核
配置选项NMBCLUSTERS。

越来越多的程序正在使用sendfile()系统调用通过网络传送文件。
kern.ipc.nsfbufs用来控制sendfile()可以使用的多少文件系统缓冲区数量来
进行工作。这个参数名义上随maxusers伸缩,所以你不应该去弄乱这个参数,
除非在非常特殊的场合。

KERNEL CONFIG TUNING
在一个大系统中有大量的内核选项你可能需要摆弄。为了改变这些选项你需要从
源代码编译内核。config(8)和手册是学习怎样做这件事情的好起点。通常建立
你自己的定制的内核的第一件事情是去掉所有你不用的驱动程序和服务。删除
象INET6和你不用的驱动程序可以减少内核的大小,有时候能达1兆或几兆,留
出更多的内存给应用程序。

SCSI_DELAY和IDE_DELAY可用于减少系统启动时间。缺省值相当高,在启动时可
引起15秒以上的延时。减少SCSI_DELAY到5秒通常是可行的。减少IDE_DELAY也是
行的但是你必须更小心点。

有很多*_CPU的选项你可以注释掉。如果你想让内核只能在奔腾类CPU上运行,
你可以轻松的拿掉I386_CPU和I486_CPU,如果你相信你CPU可以被认作奔腾2或
更好的CPU,你可以拿掉I586_CPU。有些clone可能被认作奔腾或486,没有这
些选项将不能启动。如果它能工作,真是太伟大了! 操作系统将能更好地使用
高端CPU的的MMU功能,任务切换,记时,甚至设备操作。另外,高端CPU支持
4MB MMU页面,内核用来将自己影射到内存中,在重负荷的系统调用下这会增
加性能。

IDE WRITE CACHE
FreeBSD 4.3不认真考虑地将IDE写缓存关闭。这降低了到IDE磁盘的写盘带宽,
但是考虑到硬盘厂商引入的严重的数据一致性问题而言是必要的。基本问题是
IDE驱动器在写完成上说谎。当IDE写缓冲打开时,IDE硬盘不仅不会按次序将
数据写入磁盘,而且在严重的磁盘负荷下有时会永远耽搁有些数据块。当系统
崩溃或掉电时会导致严重的文件系统损坏。所以我们的缺省值是安全的。不幸
的是结果是巨大的性能损失,我们投降了并在发行后把缺省值改了过来。你
应该通过查看hw.ata.wc这个sysctl来检查你系统上的缺省值。如果IDE写缓冲
是关闭的,你可以将通过将hw.ata.wc内核变量设置为1而将它改回来。这必须
在boot loader(8)启动时做。企图在内核启动后在做是没有作用的。请参见
ata(4)和loader(8)。

还有IDE硬盘的一个试验性的功能叫做hw.ata.tags(也能够在boot loader中设
置)允许写缓冲被安全地打开。这是将SCSI的tagging功能带到IDE驱动器上。
写这篇文章时只有IBM的DPTA和DTLA驱动器支持这个功能。警告!这些驱动器
明显有质量控制方面的问题,所以我建议你不要在这个时候买。如果你需要性
能,选用SCSI吧。

CPU,MEMORY,DISK,NETWORK
做何种调整依赖于你的系统在负载变大时哪一部分开始成为瓶颈。如果你的系统
用完了CPU(空闲时间为0%)那你需要升级CPU或转移到SMP的主板(多CPU),或者
你需要重新回顾你那个引起负荷的程序并试着优化它。如果系统正有大量的页面
交换,需要考虑增加内存。如果系统真让磁盘满载通常能看到高CPU idle值和满载
的磁盘。systat(1)可用于监视这个情况。对付磁盘满载有很多种方法:增加内存
用于缓冲,镜象磁盘,把操作分到不同的机器等等。如果磁盘性能是个问题而且
正在使用IDE硬盘,切换到SCSI能帮大忙。现代IDE驱动器与SCSI在低级顺序带宽
上比较时,当你开始寻找,SCSI驱动器通常会赢。

最后,你可能用完了网络带宽。提高网络性能的第一道防线用switch替换hub,特
别是今天switch和hub一样便宜。hub由于冲突补偿在重负载下有严重问题,一个
坏主机会严重影响整个LAN。第二是尽可能优化网络路径。例如,在firewall(7)中
我们描述了一个保护内部主机的拓扑结构,外部可视主机不通过它路由。按照你的
需要,使用100BaseT而不是10BaseT,或使用1000BaseT而不是100BaseT。许多瓶颈
发生在广域网连接上(例如mode,T1,DSL等)。如果要扩展链路是不可能的,可以
使用dummynet(4)功能实现流量限制以阻止高负载服务(例如web服务)影响其他服务
(例如email服务),或正好相反。在家庭安装中,可以让交互式的传输的优先级高于
你输出的其他服务(web服务,email等)。

2004年09月29日

文本挖掘的起源

  文本数据库(web文档数据)

  半结构化数据(semistructure data)

  信息检索技术(information retrieval)

  Web文本挖掘的过程

  Web文本挖掘的一般处理过程
  
  特征的建立

  特征集的缩减

  学习与知识模式的提取

  知识模式

  模式质量的评价

  文档集

  文本特征的建立

  定义:文本特征指的是关于文本的元数据。

  分类:

    描述性特征:文本的名称、日期、大小、类型等。

    语义性特征:文本的作者、标题、机构、内容等。

  表示(文档建模):

  采用向量空间模型(VSM)(矩阵)

  特征向量

  (其中ti为词条项,wi(d)为ti在d中的权值)

  文本特征评价函数的数学表示

  信息增益(information gain)

  期望交叉熵(expected cross entropy)
  
  互信息(mutual information)

  F是对应于单词W的特征;

  P(W)为单词W出现的概率;

  P(Ci)为第i类值的出现概率;

  p(Ci|W)为单词W出现时属于第i类的条件概率。
  
  文本特征评价函数的数学表示(续)

  文本证据权(the weight of evidence for text)

  词频(word frequency)

  P(W)为单词W出现的概率;

  P(Ci)为第i类值的出现概率;

  p(Ci|W)为单词W出现时属于第i类的条件概率;

  TF(W)为单词在文档集中出现的次数。

  文档建模

  词频矩阵

  行对应关键词t,列对应文档d向量将每一个文档视为空间向量v向量值反映单词t与文档d的关联度 表示文档词频的词频矩阵

  文档相似度计算

余弦计算法(cosine measure)

余弦相似度定义: “略”
缺点:文档“无限”,导致矩阵增大,计算量增加

特征集的缩减

潜在语义标引(latent semantic indexing)方法利用矩阵理论中的“奇异值分解(singular value decomposition,SVD)”技术,将词频矩阵转化为奇异矩阵(K×K)

潜在语义标引方法基本步骤:

1.建立词频矩阵,frequency matrix

2.计算frequency matrix的奇异值分解

分解frequency matrix成3个矩阵U,S,V。U和V是正交矩阵(UTU=I),S是奇异值的对角矩阵(K×K)

3.对于每一个文档 d,用排除了SVD中消除后的词的新的向量替换原有的向量

4.保存所有向量集合,用高级多维索引技术为其创建索引

5.用转换后的文档向量进行相似度计算

其他文本检索标引技术

倒排索引(inverted index)

一种索引结构,包含两个哈希表索引表或两个B+树索引表

找出与给定词集相关的所有文档

找出与指定文档相关的所有词

易实现,但不能处理同义词和多义词问题,posting_list非常长,存储开销大

签名文件(signature file)

doc_1, … , doc_n

Term_n

tn_1, … ,tn_n

Doc_n

doc_1, … , doc_ j

Term_2

t2_1, … ,t2_n

Doc_2

doc_1, … , doc_i

Term_1

t1_1, … ,t1_n

Doc_1

posting_list

term_ID

posting_list

doc_ID

词表(term_table)

文档表(document_table)

词性标注

定义:将句子中兼类词的词性根据上下文唯一地确定下来。

兼类词分类:

同型异性异义兼类词:例如:领导(动词/名词)

同型异性同义兼类词:例如:小时(量词/名词)

异型同性同义兼类词:例如:电脑,计算机

自动词性标注就是用计算机来自动地给文本中的词标注词类。

在英语、汉语等自然语言中,都存在着大量的词的兼类现象,这给文本的自动词性标注带来了很大的困难。因此,如何排除词类歧义,是文本自动词性标注研究的关键问题。

标注技术路线:基于概率统计和基于规则

自动词类标注

早在60年代,国外学者就开始研究英语文本的自动词类标注问题,提出了一些消除兼类词歧义的方法,建立了一些自动词性标注系统。

1971年,美国布朗大学的格林(Greene)和鲁宾(Rubin)建立了TAGGIT系统,采用了86个词类标记,利用了3300条上下文框架规则(context frame rules)来排除兼类词歧义,自动标注正确率达到77%.

1983年,里奇(G. Leech)和加塞德(R. Garside)等人建立了CLAWS系统,用概率统计的方法来进行自动词性标注,他们使用了133×133的词类共现概率矩阵,通过统计模型来消除兼类词歧义,自动标注的正确率达到了96%.

1988年,德洛斯(S. J. DeRose)对CLAWS系统作了一些改进,利用线性规划的方法来降低系统的复杂性,提出了VOLSUNGA算法,大大地提高了处理效率,使自动词性标注的正确率达到了实用的水平。

  基于概率统计的CLAWS算法

  CLAWS是英语Constituent-Likelihood Automatic Word-tagging System(成分似然性自动词性自动标注系统)的简称,它是1983年玛沙尔(Mashall)在给LOB语料库(拥有各类文体的英国英语语料库,库容量为100万词)作自动词性标注时提出的一种算法。具体做法是:

  先从待标注的LOB语料库中选出来部分语料,叫做“训练集”(Training Set), 对训练集中的语料逐词进行词性的人工标注, 然后利用计算机对训练集中的任意两个相邻标记的同现概率进行统计,形成一个相邻标记的同现概率矩阵。

  进行自动标注时,系统从输入文本中顺序地截取一个有限长度的词串,这个词串的首词和尾词的词性应该是唯一的,这样的词串叫做跨段(span),记为W0,W1,W2,…,Wn,Wn+1。其中, W0和Wn+1 都是非兼类词, W1,W2,…,Wn 是n个兼类词。

  利用同现概率矩阵提供的数据来计算这个跨段中由各个单词产生的每个可能标记的概率积,并选择概率积最大的标记串作为选择路径(path),以这个路径作为最佳结果输出。

  VOLSUNGA算法

  VOLSUNGA算法对CLAWS算法的改进主要有两个方面。在最佳路径的选择方面,不是最后才来计算概率积最大的标记串,而是沿着从左至右的方向,采用“步步为营”的策略,对于当前考虑的词,只保留通往该词的最佳路径,舍弃其他路径,然后再从这个词出发,将这个路径同下一个词的所有标记进行匹配,继续找出最佳的路径,舍弃其他路径,这样一步一步地前进,直到整个跨段走完,得出整个跨段的最佳路径作为结果输出。

  根据语料库统计出每个词的相对标注概率(Relative Tag Probability),并用这种相对标注概率来辅助最佳路径的选择。

  VOLSUNGA算法大大地降低了CLAWS算法的时间复杂度和空间复杂度,提高了自动词性标注的准确率。

  统计方法的缺陷

  CLAWS算法和VOLSUNGA算法都是基于统计的自动标注方法,仅仅根据同现概率来标注词性。但是,同现概率仅只是最大的可能而不是唯一的可能,以同现概率来判定兼类词,是以舍弃同现概率低的可能性前提的。

  为了提高自动词性标注的正确率,还必须辅之以基于规则的方法,根据语言规则来判定兼类词。

  基于规则的标注

  基于规则的方法通过考虑上下文中的词及标记对兼类词的影响决定兼类词的词性,常常作为基于概率统计方法的补充。将统计方法和规则方法结合被认为是解决词性标注问题的最佳手段。

  在统计语料规模较大的情况下,结合给定最小支持度及最小可信度,首先发现大于最小支持度常用模式集,然后生成关联规则。若此规则的可信度大于给定的最小可信度,则得到词性规则。只要最小可信度定义得足够高,获得的规则就可以用于处理兼类词的情况。(规则依赖于词与词性的各种组合,挖掘过程较为复杂)

基于规则的词性标注(续)

  主要依靠上下文来判定兼类词。
  这是一张白纸(“白”出现在名词”纸”之前,判定为形容词)

  他白跑了一趟(“白”出现在动词“跑”之前,判定为副词)

  词性连坐:在并列的联合结构中,联合的两个成分的词类应该相同,如果其中一个为非兼类词,另一个为兼类词,则可把兼类词的词性判定为非兼类词的词性。

  我读了几篇文章和报告

  “文章”为名词,是非兼类词,“报告”为动-名兼类词,由于处于联合结构中,故可判定“报告”为名词。

  清华大学计算机系黄昌宁等采用统计方法建立了一个自动词性标注系统,标注正确率达96.8%,自动标注的速度为每秒175个汉字。

  自动语义标注

  一词多义,形成了词的多义现象,自动语义标注主要是解决词的多义问题。

  一词多义也是自然语言中的普遍现象,但是,在一定的上下文中,一个词一般只能解释为一种语义。

  所谓自动语义标注,就是计算机对出现在一定上下文中的词语的语义进行判定,确定其正确的语义并加以标注。

  语义自动标注的方法

  以字义定词义

  词=字+…+字

  利用检索上下文中出现的相关词的方法来确定多义词的义项

  词之间的亲和程度(pen)

  利用上下文搭配关系来确定多义词的词义

  词性搭配(plan)

  用最大可能义项来消解多义

  选择多义词各个义项中使用频度最高的义项为它在文本中的当前义项。这显然不是一种科学的办法,但仍然有一定的正确率。

  据统计,用最大可能义项来消解多义,对于封闭文本,正确率仅为67.5%,对于开放文本,正确率更低,仅为64.8%。

  目前不少机器翻译系统,都采用这种最大可能义项来确定多义词的词义,,这是这些机器翻译系统译文质量低劣的主要原因之一。

  其他文本检索标引技术(续)

  签名文件(signature file)

  定义:是一个存储数据库中每一个文档的特征记录的文件

  方法:每一个特征对应一个固定长度的位串,一个比特位对应一个词汇,若某一位对应的词出现在文档中则,则该位置1,否则置0。

S1

S2

  按位操作进行匹配,确定文档的相似形

  可以多词对应一个比特位,来减少位串的长度,但增加搜素开销,存在多对一映射的缺点。
略…

学习与知识模式的提取

文本源

文本结构分析器

文本分类器

中文文本挖掘模型结构示意图

分词及非用词处理

特征提取

名字识别

日期处理

数字处理

文本摘要生成器

用户界面

用户浏览

检索结果

学习与知识模式的提取(续)

  分词

定义:在中文文本的词与词之间加上空格。

非用词(停用词)

定义:在文本中起辅助作用的词。

分类:

虚词:英文中的“a,the,of,for,with,in,at, …”

中文中的“的,地,得,…”

实词:数据库会议上的论文中的“数据库”一词,视为非用词

词根问题

compute , computes , computed 视为同一个词(变形而已)

  自动分词

  自动分词的用处:

  中文文本的自动检索、过滤、分类及摘要

  中文文本的自动校对

  汉外机器翻译

  汉字识别与汉语语音识别的后处理

  汉语语音合成

  以句子为单位的汉字键盘输入

  汉字简繁体转换

  主要的分词方法

  最大匹配法(Maximum Matching method, MM法):选取包含6-8个汉字的符号串作为最大符号串,把最大符号串与词典中的单词条目相匹配,如果不能匹配,就削掉一个汉字继续匹配,直到在词典中找到相应的单词为止。匹配的方向是从右向左。

  逆向最大匹配法(Reverse Maximum method, RMM法):匹配方向与MM法相反,是从左向右。实验表明:对于汉语来说,逆向最大匹配法比最大匹配法更有效。

  双向匹配法(Bi-direction Matching method, BM法):比较MM法与RMM法的分词结果,从而决定正确的分词。

  最佳匹配法(Optimum Matching method, OM法):将词典中的单词按它们在文本中的出现频度的大小排列,高频度的单词排在前,频度低的单词排在后,从而提高匹配的速度。

  联想-回溯法(Association-Backtracking method, AB法):采用联想和回溯的机制来进行匹配。

  模型质量的评价

  文本检索的基本度量

  {relevant}:与某查询相关的文档的集合。

  {retrieved}:系统检索到的文档的集合。

  {relevant} ∩ {retrieved}:既相关又被检索到的实际文档的集合。

  查准率(precision):既相关又被检索到的实际文档与检索到的文档的百分比。

  查全率(recall):既相关又被检索到的实际文档与查询相关的文档的百分比。

  模型质量的评价实例

  {relevant} ={A,B,C,D,E,F,G,H,I,J} = 10

  {retrieved} = {B, D, F,W,Y} = 5

  {relevant} ∩ {retrieved} ={B,D,F} = 3

  查准率:precision = 3/5 = 60%

  查全率:recall = 3/10 = 30%
  B,D,F 相关并被检索到的文档
  所有文档 A,C,E,G,H, I, J相关的文档 W,Y检索到的文档

  文本分类
  一般方法

  将预先分类过的文档作为训练集从训练集中得出分类模式(需要测试过程,不断细化)用导出的分类模式对其它文档加以分类

  基于关联的分类方法

  通过信息检索技术和关联分析技术提出关键字和词汇利用已有的词类生成关键字和词的概念层次(文档类别),利用关联挖掘方法去发现关联词, 进而区分各类文档(每一类文档对应一组关联规则)用关联规则去对新的文档分类。

  Web文档的自动分类

  利用超链接中的信息进行分类统计方法

  马尔可夫随机场(Markov Random Field,MRF)结合宽松标识(Relaxation Labeling ,RL) 由Weblog数据进行文档分类。

  文本聚类

  层次聚类法

  平面划分法(k-means算法)

  简单贝叶斯聚类法

  K-最近邻参照聚类法

  分级聚类法

  基于概念的文本聚类

  层次聚类法

  具体过程

将文档集D={d1, … ,di , … ,dn} 中的每一个文档di看作是一个具有单个成员的类Ci={di},这些类构成了D的一个聚类C={c1, … ,ci , … ,cn};

计算C中每对类( ci , cj )之间的相似度sim(ci , cj );

选取具有最大相似度的类对arg max sim(ci , cj ),并将ci 和cj合并为一个新的类ck=ci∪cj ,从而构成D的一个新的类C={c1, … ,cn-1};

重复上述步骤,直到C中只剩下一个类为止。

  平面划分法

  将文档集D={d1, … ,di , … ,dn}水平地分割为的若干类,具体过程:

  1. 确定要生成的类的数目 k;

  2. 按照某种原则生成k个聚类中心作为聚类的种子 S={s1, … ,sj , … ,sk};

  3. 对D中的每一个文档di ,依次计算它与各个种子sj的相似度sim(di , sj );

  4. 选取具有最大的相似度的种子arg max sim(di , sj ), 将di归入以sj 为聚类中心的类Cj ,从而得到D的一个聚类C={c1, … ,ck};

  5. 重复步骤2~4若干次,以得到较为稳定的聚类结果。

  该方法速度快,但k要预先确定,种子选取难

  自动文摘、自动摘要

  定义:

  就是利用计算机自动地从原始文档中提取全面准确地反映该文档中心内容的简单连贯的短文。

  自动文摘系统

  自动文摘系统应能将原文的主题思想或中心内容自动提取出来。

  文摘应具有概况性、客观性、可理解性和可读性。

  系统适用于任意领域。

  1995年自动文摘系统评测

  ⑴ 3个系统都可以按指定的比率从原文中摘取一部分语句。

  ⑵ 抽取的文摘都是原文中的语句,只有单位2的文摘中剔除了一些中文数字。

  ⑶ 三个系统的文摘几乎完全不相重合。

  与专家的文摘完全不同

  相关内容

  汉字输入与汉语语料库

  语料库中汉语书面文本的自动短语定界与句法标注

  机器词典的建造

  术语数据库

  机器翻译

  计算机辅助文本校对

  情报自动检索系统

  汉语语音识别系统

  汉语语音合成系统

  汉字识别系统

  国内研究情况

  《计算机学报》99(1)

  《软件学报》98-99(4)

  《清华大学学报》(4)

  汉语基本名词短语分析模型、识别模型、文本词义标注、语言建模、分词歧义算法、上下文无关分析、语素和构词研究

黄昌宁

清华大学计算机科学与技术系

手写汉字识别(动态匹配)、 汉字识别 多分类器集成(综合识别法)、《名片自动录入系统的实现》
丁晓青
吴佑寿

清华大学电子工程系
《计算机研究与发展》98(4)
《软件学报》97(1)
其它
翻译、汉语分词、自然语言接口、句法分析、语义分析、音字转换、自动分词

陈肇雄
中科院计算机语言信息工程研究中心
主要期刊及发表数量

《北京邮电大学学报》

《情报学报》

自动标注汉语词类(神经网络模型)、自动文摘(文摘语文本结构关系)、提出了基于言语行为理论的话语分析方法

钟义信

北京邮电大学信息工程系
《中文自动摘要系统》、基于神经网络的自动分类优化算法

王永成

上海交通大学电脑应用研究所

《计算机研究与发展》97-99(5)

《软件学报》98(1)

音字转换、自动文摘、手写汉字识别、自动分词、《中文词句快速查找系统》

王开铸

王小龙

哈尔滨工业大学计算机科学与工程系

《软件学报》97-00(7)

《上海交通大学学报》(3)

  语句语义、自然语言模型、构造语义解释模型(增量式)、树形分层数据库方法(非结构化数据知识方法)、范例推理

陆汝占

海交通大学计算机科学与工程系

主要期刊及发表数量

《计算机研究与发展》97-99(5)

《软件学报》97-99(3)

《小型微型计算机系统》97-99(4)

《东北大学学报》97-99(10)

  词性标注、继承理论(将无限的自然语言处理转换成有限的类别处理)、中文信息自动抽取、词类搭配规则、语音识别模型、文本的时间信息分析(时态逻辑)、短语结构规则自动获取方法、模糊聚类分析用于语音识别领域、语言异化、基于神经网络的模糊知识自动获取方法、英文中动词的远程搭配、中文姓名识别、汉语文本自动分类模型设计与实现、词汇消歧

姚天顺

朱靖波

东北大学 9

《计算机研究与发展》97(1)

部分汉语语法分析器

吴立德

复旦大学

主要期刊及发表数量

《电路与系统学报》(1)

《华南理工大学学报》(1)

手写汉字识别(弹性网格方向分解特征、动态衰减调节径向函数(RBF DDA))

徐秉铮

华南理工大学电子与通信工程系

11

《北京大学学报》(1)

《中文信息学报》(1)

汉语单句谓语中心词识别

俞志汶

魏志方

北京大学计算语言研究所

10

主要期刊及发表数量

内容

带头人

校、院、所

序号

国内研究情况(续)

上海交通大学电脑应用研究所

自动分词(60年代)

自动标引(70年代)

东北大学

清华大学计算机科学与技术系

北京邮电大学信息工程系

中科院计算机语言信息工程研究中心

哈尔滨工业大学计算机科学与工程系

上海交通大学

东北大学

英文中动词的远程搭配

北京邮电大学信息工程系

哈尔滨工业大学

北京邮电大学信息工程系

自动文摘

校、院、所

内容

哈尔滨工业大学计算机科学与工程系

东北大学

上海交通大学计算机科学与工程系

中科院计算机语言信息工程研究中心

音字转换

清华大学电子工程系

哈尔滨工业大学

北京大学计算语言研究所

东北大学

华南理工大学电子与通信工程系

汉字识别

清华大学计算机科学与技术系

复旦大学计算机科学系

中科院计算机语言信息工程研究中心

语义分析 语法分析 句法分析

校、院、所

内容

中文分词系统Cseg&Tag

《名片自动录入系统的实现》

《中文词句快速查找系统》

《中文自动摘要系统》

上海交通大学计算机科学与工程系

TH-OCR汉字识别系统(optical character recognition)

清华大学

哈尔滨工业大学计算机科学与工程系

上海交通大学电脑应用研究所

中科院计算机语言信息工程研究中心

《自然语言人机接口的设计与实现》

东北大学

清华大学计算机科学与技术系

识别模型

校、院、所

内容

基于规则的机器翻译系统(国外)

乔治敦大学的机译系统

法国格勒诺布尔大学的俄法机译系统

加拿大的TAUM-METEO系统

日本的ATLAS

日本的其他实用性机译系统

法国纺织研究所的 TITUS-IV 系统

美国的SYSTRAN系统

美国的WEIDNER系统

美国的PAHO系统

德国的METAL系统

德国的SUSY系统

EUROTRA系统

日本的Mu系统与ODA计划

DLT系统

基于规则的机器翻译系统(国内)

俄汉机译系统

英汉题录机译系统TITLE

汉-法/英/日/俄/德多语言机器翻译系统FAJRA

“译星”英汉系统

“高立”英汉系统

863-IMT/EC英汉系统

Matrix英汉系统

通译英汉-汉英系统

雅信英汉系统

Readworld英汉系统

Sino-Trans汉英-汉日机译系统

E-to-J英日机器翻译系统

国外本挖掘工具

IBM的文本智能挖掘机

高级 搜索引擎(Advanced Search Engine)——TextMiner;

Web访问工具(Web Access Tools)——包括Web搜索引擎NetQuestion和Web Crawler;

文本分析工具(Text Analysis Tools)。

IBM的TextMiner :其主要功能是特征抽取、文档聚集、文档分类和检索。

支持16种语言的多种格式文本的数据检索;

采用深层次的文本分析与索引方法;

支持全文搜索及索引搜索,搜索的条件可以是自然语言和布尔逻辑条件;

是Client/Server结构的工具,支持大量的并发用户做检索任务;

联机更新索引,同时又能完成其它的搜索任务。

国外文本挖掘工具(续)

Autonomy公司最核心的产品是Concept Agents。

在经过训练以后,它能自动地从文本中抽取概念。

TelTech公司

提供专家服务;

专业文献检索服务;

产品与厂商检索服务;

  TelTech成功的关键是建立了高性能的知识结构。它采用主题法,其主题词表分为不同专业,共有3万多个,由数位知识工程师维护,每周更新500~1200个词。

2004年09月24日

关键词:cache squid mod_proxy mod_cache “reverse proxy” 反向代理 加速

内容摘要:
对于一个日访问量达到百万级的网站来说,速度很快就成为一个瓶颈。除了优化内容发布系统的应用本身外,如果能把不需要实时更新的动态页面的输出结果转化成静态网页来发布,速度上的提升效果将是显著的,因为一个动态页面的速度往往会比静态页面慢2-10倍,而静态网页的内容如果能被缓存在内存里,访问速度甚至会比原有动态网页有2-3个数量级的提高

后台的内容管理系统的页面输出遵守可缓存的设计,这样就可以把性能问题交给前台的缓存服务器来解决了,从而大大简化CMS系统本身的复杂程度。

静态缓存和动态缓存的比较

静态页面的缓存可能有2种形式:其实主要区别就是CMS是否自己负责关联内容的缓存更新管理。

  1. 静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面,比如:2003年3月22日,管理员通过后台内容管理界面录入一篇文章后,就立刻生成http://www.chedong.com/tech/2003/03/22/001.html这个静态页面,并同步更新相关索引页上的链接。

  2. 动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。

    如果去ZDNet等国外网站会发现他们使用的基于
    Vignette内容管理系统都有这样的页面名称:0,22342566,300458.html。其实这里的0,22342566,300458就是用逗号分割开的多个参数:
    第一次访问找不到页面后,相当于会在服务器端产生一个doc_type= 0&doc_id=22342566&doc_template=300458的查询,
    而查询结果会生成的缓存的静态页面: 0,22342566,300458.html

静态缓存的缺点:

  • 复杂的触发更新机制:这两种机制在内容管理系统比较简单的时候都是非常适用的。但对于一个关系比较复杂的网站来说,页面之间的逻辑引用关系就成为一个非常非常复杂的问题。最典型的例子就是一条新闻要同时出现在新闻首页和相关的3个新闻专题中,在静态缓存模式中,每发一篇新文章,除了这篇新闻内容本身的页面外,还需要系统通过触发器生成多个新的相关静态页面,这些相关逻辑的触发也往往就会成为内容管理系统中最复杂的部分之一。
  • 旧内容的批量更新: 通过静态缓存发布的内容,对于以前生成的静态页面的内容很难修改,这样用户访问旧页面时,新的模板根本无法生效。

在动态缓存模式中,每个动态页面只需要关心,而相关的其他页面能自动更新,从而大大减少了设计相关页面更新触发器的需要。

以前做小型应用的时候也用过类似方式:应用首次访问以后将数据库的查询结果在本地存成一个文件,下次请求时先检查本地缓存目录中是否有缓存文件,从而减少对后台数据库的访问。虽然这样做也能承载比较大的负载,但这样的内容管理和缓存管理一体的系统是很难分离的,而且数据完整性也不是很好保存,内容更新时,应用需要把相应内容的的缓存文件删除。但是这样的设计在缓存文件很多的时候往往还需要将缓存目录做一定的分布,否则一个目录下的文件节点超过3000,rm *都会出错。

这时候,系统需要再次分工,把复杂的内容管理系统分解成:内容输入和缓存这2个相对简单的系统实现。

  • 后台:内容管理系统,专心的将内容发布做好,比如:复杂的工作流管理,复杂的模板规则等……
  • 前台:页面的缓存管理则可以使用缓存系统实现
______________________ ___________________|Squid Software cache| |F5 Hardware cache|---------------------- ------------------- \ / \ ________________ / |ASP |JSP |PHP | Content Manage System ----------------

所以分工后:内容管理和缓存管理2者,无论哪一方面可选的余地都是非常大的:软件(比如前台80端口使用SQUID对后台8080的内容发布管理系统进行缓存),缓存硬件,甚至交给akamai这样的专业服务商。

面向缓存的站点规划

一个利用SQUID对多个站点进行做WEB加速http acceleration方案:
原先一个站点的规划可能是这样的:
200.200.200.207 www.chedong.com
200.200.200.208 news.chedong.com
200.200.200.209 bbs.chedong.com
200.200.200.205 images.chedong.com
面向缓存服务器的设计中:所有站点都通过外部DNS指向到同一个IP:200.200.200.200/201这2台缓存服务器上(使用2台是为了冗余备份)

 _____________________ ________www.chedong.com 请求 \ | cache box | | | / 192.168.0.4 www.chedong.com news.chedong.com 请求 -| 200.200.200.200/201 |-|firewall| - 192.168.0.4 news.chedong.com bbs.chedong.com 请求 / | /etc/hosts | | box | \ 192.168.0.3 bbs.chedong.com --------------------- --------

工作原理:
外部请求过来时,设置缓存根据配置文件进行转向解析。这样,服务器请求就可以转发到我们指定的内部地址上。
在处理多虚拟主机转向方面:mod_proxy比squid要简单一些:可以把不同服务转向后后台多个IP的不同端口上。
而squid只能通过禁用DNS解析,然后根据本地的/etc/hosts文件根据请求的域名进行地址转发,后台多个服务器必须使用相同的端口。
使用反向代理加速,我们不仅可以得到性能上的提升,而且还能获得额外的安全性和配置的灵活度:

  • 配置灵活性提高:可以自己在内部服务器上控制后台服务器的DNS解析,当需要在服务器之间做迁移调整时,就不用大量修改外部DNS配置了,只需要修改内部DNS实现服务的调整。
  • 数据安全性增加:所有后台服务器可以很方便的被保护在防火墙内。
  • 后台应用设计复杂程度降低:原先为了效率常常需要建立专门的图片服务器images.chedong.com和负载比较高的应用服务器 bbs.chedong.com分离,在反向代理加速模式中,所有前台请求都通过缓存服务器:实际上就都是静态页面,这样,应用设计时就不用考虑图片和应用本身分离了,也大大降低了后台内容发布系统设计的复杂程度,由于数据和应用都存放在一起,也方便了文件系统的维护和管理。

基于Apache mod_proxy的反向代理缓存加速实现

Apache包含了mod_proxy模块,可以用来实现代理服务器,针对后台服务器的反向加速
安装apache 1.3.x 编译时:
–enable-shared=max –enable-module=most
注:Apache 2.x中mod_proxy已经被分离成mod_proxy和mod_cache:同时mod_cache有基于文件和基于内存的不同实现
创建/var/www/proxy,设置apache服务所用户可写
mod_proxy配置样例:反相代理缓存+缓存
架设前台的www.example.com反向代理后台的www.backend.com的8080端口服务。
修改:httpd.conf
<VirtualHost *>
ServerName www.example.com
ServerAdmin admin@example.com
# reverse proxy setting
ProxyPass / http://www.backend.com:8080/
ProxyPassReverse / http://www.backend.com:8080/
# cache dir root
CacheRoot “/var/www/proxy”
# max cache storage
CacheSize 50000000
# hour: every 4 hour
CacheGcInterval 4
# max page expire time: hour
CacheMaxExpire 240
# Expire time = (now – last_modified) * CacheLastModifiedFactor
CacheLastModifiedFactor 0.1
# defalt expire tag: hour
CacheDefaultExpire 1
# force complete after precent of content retrived: 60-90%
CacheForceCompletion 80
CustomLog /usr/local/apache/logs/dev_access_log combined
</VirtualHost>

基于Squid的反向代理加速实现

Squid是一个更专用的代理服务器,性能和效率会比Apache的mod_proxy高很多。
如果需要combined格式日志补丁:
http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html
squid的编译:
./configure –enable-useragent-log  –enable-referer-log –enable-default-err-language=Simplify_Chinese \ –enable-err-languages=”Simplify_Chinese English” –disable-internal-dns 
make
#make install
#cd /usr/local/squid
make dir cache
chown squid.squid *
vi /usr/local/squid/etc/squid.conf
在/etc/hosts中:加入内部的DNS解析,比如:
192.168.0.4 www.chedong.com
192.168.0.4 news.chedong.com
192.168.0.3 bbs.chedong.com
———————cut here———————————-
# visible name
visible_hostname cache.example.com
# cache config: space use 1G and memory use 256M
cache_dir ufs /usr/local/squid/cache 1024 16 256
cache_mem 256 MB
cache_effective_user squid
cache_effective_group squid

http_port 80
httpd_accel_host virtual
httpd_accel_single_host off
httpd_accel_port 80
httpd_accel_uses_host_header on
httpd_accel_with_proxy on
# accelerater my domain only
acl acceleratedHostA dstdomain .example1.com
acl acceleratedHostB dstdomain .example2.com
acl acceleratedHostC dstdomain .example3.com
# accelerater http protocol on port 80
acl acceleratedProtocol protocol HTTP
acl acceleratedPort port 80
# access arc
acl all src 0.0.0.0/0.0.0.0
# Allow requests when they are to the accelerated machine AND to the
# right port with right protocol
http_access allow acceleratedProtocol acceleratedPort acceleratedHostA
http_access allow acceleratedProtocol acceleratedPort acceleratedHostB
http_access allow acceleratedProtocol acceleratedPort acceleratedHostC
# logging
emulate_httpd_log on
cache_store_log none
# manager
acl manager proto cache_object
http_access allow manager all
cachemgr_passwd pass all

———————-cut here———————————
创建缓存目录:
/usr/local/squid/sbin/squid -z
启动squid
/usr/local/squid/sbin/squid
停止squid:
/usr/local/squid/sbin/squid -k shutdown
启用新配置:
/usr/local/squid/sbin/squid -k reconfig
通过crontab每天0点截断/轮循日志:
0 0 * * * (/usr/local/squid/sbin/squid -k rotate)

可缓存的动态页面设计

什么样的页面能够比较好的被缓存服务器缓存呢?如果返回内容的HTTP HEADER中有”Last-Modified”和”Expires”相关声明,比如:
Last-Modified: Wed, 14 May 2003 13:06:17 GMT
Expires: Fri, 16 Jun 2003 13:06:17 GMT
前端缓存服务器在期间会将生成的页面缓存在本地:硬盘或者内存中,直至上述页面过期。
因此,一个可缓存的页面:

  • 页面必须包含Last-Modified: 标记
    一般纯静态页面本身都会有Last-Modified信息,动态页面需要通过函数强制加上,比如在PHP中:
    // always modified now
    header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);

  • 必须有Expires或Cache-Control: max-age标记设置页面的过期时间:
    对于静态页面,通过apache的mod_expires根据页面的MIME类型设置缓存周期:比如图片缺省是1个月,HTML页面缺省是2天等。
    <IfModule mod_expires.c>
        ExpiresActive on
        ExpiresByType image/gif “access plus 1 month”
        ExpiresByType text/css “now plus 2 day”
        ExpiresDefault “now plus 1 day”
    </IfModule>

    对于动态页面,则可以直接通过写入HTTP返回的头信息,比如对于新闻首页index.php可以是20分钟,而对于具体的一条新闻页面可能是1天后过期。比如:在php中加入了1个月后过期:
    // Expires one month later
    header(“Expires: ” .gmdate (“D, d M Y H:i:s”, time() + 3600 * 24 * 30). ” GMT”);

  • 如果服务器端有基于HTTP的认证,必须有Cache-Control: public标记,允许前台

ASP应用的缓存改造 首先在公用的包含文件中(比如include.asp)加入以下公用函数:
<%
‘ Set Expires Header in minutes
Function SetExpiresHeader(ByVal minutes)
    ‘ set Page Last-Modified Header:
    ‘ Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)
    Response.AddHeader “Last-Modified”, DateToHTTPDate(Now())
   
    ‘ The Page Expires in Minutes
    Response.Expires = minutes
   
    ‘ Set cache control to externel applications
    Response.CacheControl = “public”
End Function
‘ Converts date (19991022 11:08:38) to http form (Fri, 22 Oct 1999 12:08:38 GMT)
Function DateToHTTPDate(ByVal OleDATE)
  Const GMTdiff = #08:00:00#
  OleDATE = OleDATE – GMTdiff
  DateToHTTPDate = engWeekDayName(OleDATE) & _
    “, ” & Right(“0″ & Day(OleDATE),2) & ” ” & engMonthName(OleDATE) & _
    ” ” & Year(OleDATE) & ” ” & Right(“0″ & Hour(OleDATE),2) & _
    “:” & Right(“0″ & Minute(OleDATE),2) & “:” & Right(“0″ & Second(OleDATE),2) & ” GMT”
End Function
Function engWeekDayName(dt)
    Dim Out
    Select Case WeekDay(dt,1)
        Case 1:Out=”Sun”
        Case 2:Out=”Mon”
        Case 3:Out=”Tue”
        Case 4:Out=”Wed”
        Case 5:Out=”Thu”
        Case 6:Out=”Fri”
        Case 7:Out=”Sat”
    End Select
    engWeekDayName = Out
End Function
Function engMonthName(dt)
    Dim Out
    Select Case Month(dt)
        Case 1:Out=”Jan”
        Case 2:Out=”Feb”
        Case 3:Out=”Mar”
        Case 4:Out=”Apr”
        Case 5:Out=”May”
        Case 6:Out=”Jun”
        Case 7:Out=”Jul”
        Case 8:Out=”Aug”
        Case 9:Out=”Sep”
        Case 10:Out=”Oct”
        Case 11:Out=”Nov”
        Case 12:Out=”Dec”
    End Select
    engMonthName = Out
End Function
%>
然后在具体的页面中,比如index.asp和news.asp的“最上面”加入以下代码:HTTP Header
<!–#include file=”../include.asp”–>
<%
‘页面将被设置20分钟后过期
SetExpiresHeader(20)
%>

应用的缓存兼容性设计

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTD头信息中,增加了HTTP_X_FORWARDED_????信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址:
下面是2个例子,用于说明缓存兼容性应用的设计原则:

 '对于一个需要服务器名的地址的ASP应用:不要直接引用HTTP_HOST/SERVER_NAME,判断一下是否有HTTP_X_FORWARDED_SERVER function getHostName () dim hostName as String = "" hostName = Request.ServerVariables("HTTP_HOST") if not isDBNull(Request.ServerVariables("HTTP_X_FORWARDED_HOST")) then if len(trim(Request.ServerVariables("HTTP_X_FORWARDED_HOST"))) > 0 then hostName = Request.ServerVariables("HTTP_X_FORWARDED_HOST") end if end if return hostNmae end function

 //对于一个需要记录客户端IP的PHP应用:不要直接引用REMOTE_ADDR,而是要使用HTTP_X_FORWARDED_FOR, function getUserIP (){ $user_ip = $_SERVER["REMOTE_ADDR"]; if ($_SERVER["HTTP_X_FORWARDED_FOR"]) { $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } } 

注意:HTTP_X_FORWARDED_FOR如果经过了多个中间代理服务器,有何能是逗号分割的多个地址,
比如:200.28.7.155,200.10.225.77 unknown,219.101.137.3
因此在很多旧的数据库设计中(比如BBS)往往用来记录客户端地址的字段被设置成20个字节就显得过小了。
经常见到类似以下的错误信息:

Microsoft JET Database Engine 错误 ‘80040e57′

字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。

/inc/char.asp,行236

原因就是在设计客户端访问地址时,相关用户IP字段大小最好要设计到50个字节以上,当然经过3层以上代理的几率也非常小。
如何检查目前站点页面的可缓存性(Cacheablility)呢?可以参考以下2个站点上的工具:
http://www.ircache.net/cgi-bin/cacheability.py

附:SQUID性能测试试验

phpMan.php是一个基于php的man page server,每个man
page需要调用后台的man命令和很多页面格式化工具,系统负载比较高,提供了Cache
Friendly的URL,以下是针对同样的页面的性能测试资料:
测试环境:Redhat 8 on Cyrix 266 / 192M Mem
测试程序:使用apache的ab(apache benchmark):
测试条件:请求50次,并发50个连接
测试项目:直接通过apache 1.3 (80端口) vs squid 2.5(8000端口:加速80端口)

测试1:无CACHE的80端口动态输出:
ab -n 100 -c 10 http://www.chedong.com:81/phpMan.php/man/kill/1
This is ApacheBench, Version 1.3d <$Revision: 1.2 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
http://www.zeustech.net/
Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/

Benchmarking localhost (be patient)…..done
Server Software:       
Apache/1.3.23                                     
Server Hostname:        localhost
Server
Port:           
80

Document Path:         
/phpMan.php/man/kill/1
Document Length:        4655 bytes

Concurrency Level:      5
Time taken for tests:   63.164 seconds
Complete requests:      50
Failed requests:        0
Broken pipe errors:     0
Total transferred:      245900 bytes
HTML transferred:       232750 bytes
Requests per second:    0.79 [#/sec] (mean)
Time per request:       6316.40 [ms]
(mean)
Time per request:       1263.28 [ms]
(mean, across all concurrent requests)
Transfer rate:         
3.89 [Kbytes/sec] received

Connnection Times (ms)
             
min  mean[+/-sd] median   max
Connect:        0   
29  106.1      0   553
Processing:  2942  6016
1845.4   6227 10796


Waiting:    
2941  5999 1850.7   6226 10795


Total:      
2942  6045 1825.9   6227 10796

Percentage of the requests served within a certain time (ms)
  50%   6227
  66%   7069
  75%   7190
  80%   7474
  90%   8195
  95%   8898
  98%   9721
  99%  10796
 100%  10796 (last request)

测试2:SQUID缓存输出
/home/apache/bin/ab -n50 -c5
“http://localhost:8000/phpMan.php/man/kill/1″
This is ApacheBench, Version 1.3d <$Revision: 1.2 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
http://www.zeustech.net/
Copyright (c) 1998-2001 The Apache Group, http://www.apache.org/

Benchmarking localhost (be patient)…..done
Server Software:       
Apache/1.3.23                                     
Server Hostname:        localhost
Server
Port:           
8000

Document Path:         
/phpMan.php/man/kill/1
Document Length:        4655 bytes

Concurrency Level:      5
Time taken for tests:   4.265 seconds
Complete requests:      50
Failed requests:        0
Broken pipe errors:     0
Total transferred:      248043 bytes
HTML transferred:       232750 bytes
Requests per second:    11.72 [#/sec] (mean)
Time per request:       426.50 [ms] (mean)
Time per request:       85.30 [ms] (mean,
across all concurrent requests)
Transfer rate:         
58.16 [Kbytes/sec] received

Connnection Times (ms)
             
min  mean[+/-sd] median   max
Connect:       
0     1   
9.5      0    68
Processing:    
7    83  537.4     
7  3808


Waiting:       
5    81  529.1     
6  3748


Total:         
7    84  547.0     
7  3876

Percentage of the requests served within a certain time (ms)
  50%      7
  66%      7
  75%      7
  80%      7
  90%      7
  95%      7
  98%      8
  99%   3876
 100%   3876 (last request)

结论:No Cache / Cache = 6045 / 84 = 70
结论:对于可能被缓存请求的页面,服务器速度可以有2个数量级的提高,因为SQUID是把缓存页面放在内存里的(因此几乎没有硬盘I/O操作)。

小节:

  • 大访问量的网站应尽可能将动态网页生成静态页面作为缓存发布,甚至对于搜索引擎这样的动态应用来说,缓存机制也是非常非常重要的。
  • 在动态页面中利用HTTP Header定义缓存更新策略。
  • 利用缓存服务器获得额外的配置和安全性
  • 日志非常重要:SQUID日志缺省不支持COMBINED日志,但对于需要REFERER日志的这个补丁非常重要:http://www.squid-cache.org/mail-archive/squid-dev/200301/0164.html

参考资料:
HTTP代理缓存
http://vancouver-webpages.com/proxy.html

可缓存的页面设计
http://linux.oreillynet.com/pub/a/linux/2002/02/28/cachefriendly.html
运用ASP.NET的输出缓冲来存储动态页面 -  开发者 – ZDNet China
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39110239-2,00.htm
相关RFC文档:

可缓存性检查
http://www.web-caching.com/cacheability.html
缓存设计要素
http://vancouver-webpages.com/CacheNow/detail.html

ZOPE上的几篇使用APACHE MOD_PROXY MOD_GZIP加速的文档
http://www.zope.org/Members/anser/apache_zserver/
http://www.zope.org/Members/softsign/ZServer_and_Apache_mod_gzip
http://www.zope.org/Members/rbeer/caching

Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。

本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。

  1. WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
  2. Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
    修改 HARD_SERVER_LIMIT:
    vi /path/to/apache_src/src/include/httpd.h
    #define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
    apache编译:
    ./configure –prefix=/home/apache –enable-shared=max –enable-module=most
  3. 可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
    mod_php安装:./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql
    mod_resin安装:./configure –with-apxs=/home/apache/bin/apxs
    mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
    工具:日志轮循工具cronolog安装:http://www.cronolog.org
  4. 升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
    按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
    系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
    应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
    系统升级:系统管理员:升级操作系统/升级Apache
    应用升级:应用管理员:升级应用模块,PHP Resin等。

WEB应用的容量规划

Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5

为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。

例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。

例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000

以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。

Apache安装过程

服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif

解释:
Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高Apache的 HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(Apache的软上限的规划请看后面)。

Apache的编译:以下通用的编译选项能满足以后任意模块的安装
./configure –prefix=/another_driver/apache/ –enable-shared=max –enable-module=most
比如:
./configure –prefix=/home/apache/ –enable-shared=max –enable-module=most

解释:
–prefix=/another_driver/apache/:建议将apache服务安装在另外一个驱动设备上的目的在于硬盘往往是一个系统使用寿命最低的设备,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,应用备份和恢复过程。

–shared-module=max:使用动态加载方式载入子模块会带来5%的性能下降,但和带来的配置方便相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化等

–enable-module=most:用most可以将一些不常用的module编译进来,比如后面讲到的mod_expire是就不在 apache的缺省常用模块中

如果不想build so, 也可以这样:
./configure \
“–with-layout=Apache” \
“–prefix=/path/to/apache” \
“–disable-module=access” \
“–disable-module=actions” \
“–disable-module=autoindex” \
“–disable-module=env” \
“–disable-module=imap” \
“–disable-module=negotiation” \
“–disable-module=setenvif” \
“–disable-module=status” \
“–disable-module=userdir” \
“–disable-module=cgi” \
“–disable-module=include” \
“–disable-module=auth” \
“–disable-module=asis”

但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是Apache本身升级都必须把Apache和PHP的SOURCE加在一起重新编译。

apache的缺省配置文件一般比较大:可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v “#” httpd.conf.default >httpd.conf

需要修改的通用项目有以下几个:

#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80

#服务器名:缺省没有
ServerName name.example.com

#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800

#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200

不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200

但从我的经验看来:缺省值已经是非常优化的了,而且让Apache自己调整子共享进程个数还是比较好的。

特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000

应用模块和工具的安装配置:

由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把Apache定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么其他子模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把Resin模块加载上。而且各种模块的插拔非常简单,这样调试过程中就可以简单的通过注释掉不需要的模块,而不用重新编译。

一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so

最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so

可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadModule alias_module libexec/mod_alias.so

常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。

建议将所有MODULE的配置都放到相应模块的配置内部:<IfModule some_module.c>some_module config </IfModule>

PHP的安装:
/path/to/php_src/configure –with-apxs=/path/to/apache/bin/apxs –with-other-modules-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php

resin的安装设置:
/path/to/resin/src/configure –with-apxs=/path/to/apache/bin/apxs

具体的resin设置放在另外一个文件中:比如/home/resin/conf/resin.conf
<IfModule mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfModule>

mod_expires的安装配置:
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/gif “access plus 1 month”
    ExpiresByType text/css “now plus 1 month”
    ExpiresDefault “now plus 1 day”
</IfModule>

注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期

mod_gzip的安装
http://www.chedong.com/tech/compress.html

日志的轮循:cronolog的安装和设置

cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:

CustomLog “|/usr/local/sbin/cronolog /home/apache/logs/%w/access_log” combined

日志将按天截断并存放在以星期为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日

用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log

日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f

升级维护

由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfModule mod_name>
CONFIGURATIONS..
</IfModule>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzip.c
就屏蔽了mod_gzip,而其他模块不首任何影响。

安装和维护过程:

  • 系统安装:系统管理员的职责就是安装系统和一个按照DSO模式安装的Apache,然后COLON。
  • 应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
  • 系统升级:系统管理员:升级系统/升级Apache
  • 应用升级:应用管理员:升级应用模块:PHP CAUCHO等
  • 系统备份/恢复:如果Apache不在缺省的系统盘上,只需要将Apache目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,再直接将Apache所在物理盘恢复就行了。
系统管理员:Apache的最简化安装 OS + Apache (httpd core only)
应用管理员:应用模块定制 纯静态页面服务
core
PHP动态页面
core+so
+php
JAVA应用
core+so
+caucho
+ssl
应用例子: www.example.com
image.example.com
bbs.example.com mall.example.com

例子:Apache和PHP模块的独立升级。

如果Apache是按照以下方式安装:
./configure –prefix=/home/apache –enable-shared=max –enable-module=most
PHP是按照以下方式安装:
./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql

以后单独升级Apache的时候,仍然是:
./configure –prefix=/home/apache –enable-shared=max –enable-module=most
make
su
#/home/apache/bin/apachectl stop
#make install

单独升级php时,仍然是:
./configure –with-apxs=/home/apache/bin/apxs –enable-track-vars –with-mysql
make
su
#/home/apache/bin/apachectl stop
#make install
#/home/apache/bin/apachectl start

基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。

小提示:

Apache安装后,缺省根目录下没有但很有用的2个文件:

  • favicon.ico: favicon.ico是一个16×16的站点图标文件,如果浏览器发现有这个文件,在地址栏中会用这个图标替换调浏览器的网页图标。IE6和 MOZILLA等主流浏览器都支持这个功能。
    例如: http://www.chedong.com/favicon.ico
  • robots.txt: 用于告诉搜索引擎的爬虫程序(spider)网站那些页面可以被索引,那些不可以。
    具体说明请参考:http://www.robotstxt.org/wc/robots.html

参考文档:

2004年09月16日
发售商自曝彩票黑幕:大奖牢牢控制在我们手上
http://news.qq.com   2004年09月15日19:24   新华网   
  随着西安宝马彩票案经媒体披露,广大群众特别是彩民对不法分子痛恨之余不仅要问:这样的事情究竟是个案还是带有一定的普遍性?日前,一位不愿透露姓名的彩票发售商来到报社,向记者透露出其中的一些黑幕。

  记者:你来报社想反映彩票发售过程中存在的问题,请问你是怎么知道彩票发售中存在的问题和其中的漏洞呢?你为什么要自愿说出其中的黑幕呢?

  发售商:我曾参与过几个地方的体育彩票和福利彩票发售的事宜,我向你们反映的主要是街头即开型体彩和福彩发售、兑奖中的问题,其他的彩票如电脑彩票、足球、几选一之类的彩票我没接触过,也没搞过,当然也不知道情况,不敢妄加评论。

  我为什么要说出体彩和福彩中的问题,主要是这次我国奥运健儿出征雅典,取得骄人的战绩,这使国人振奋,我也不是冷血动物,与国人一样热血沸腾。西安彩票的“宝马”事件的披露,可以说对彩票发售是一记重创,但奥运的辉煌战绩,会重新激起国人对体育的热爱与支持,同时也会刺激体育彩票的发售。我披露其中的问题,是想严厉打击那些弄虚作假,捞取黑心钱的不法之徒,进一步规范彩票的发售,不能再伤国人的爱心。请问一下,你玩彩票吗?

  记者:我从来未玩过彩票。一不去发行现场,嫌那里闹腾;二不去购买,没那闲功夫。

  发售商:这么说你对彩票是一点不懂呀。没关系,我可以一点一点地讲给你听,不清楚的地方你还可以再问。

  国家要发行一批彩票,分配到各地,各地的体育局和民政局都有任务,主要由地方的体彩中心和福彩中心具体实施。发行彩票的前期投入比较大,要有人员费、场地费、宣传费等多项开支,这样前期就需投入大量的资金,这也就伴有一定的风险。如果这批彩票卖不出去那么多,你就要赔钱,可能连投资都收不回来。所以一些地方的体彩中心和福彩中心就把彩票的发售发包出去,一切费用由发售商来承担,这样体彩和福彩中心不用负担任何发售费用,也就减小了风险,同时还可坐收5%的红利,他们何乐而不为呢?这样也就应运而生了一批所谓的彩票发售商,一遇有彩票发售他们趋之若骛,纷至沓来,象蚂蝗一样吸附在彩票上。目前,以此为营生的,全国主要分有三个帮,江西帮、河北帮和东北帮。他们各自有自己的地盘。搞得比较大的是河北帮,说具体一点就是滦南帮。这些人相当富有,住宅都有几处,极个别的还在北京建了大楼。

  记者:发售彩票当地的彩票中心都害怕赔了,你们人生地不熟的,你们卖就不怕赔吗?

  发售商:这个赔率很低的。粗略给你算一下账,发行一期彩票,50%作为奖项返还购买者;30%上交国家;3%的印制费;2%卖票费;还剩下15%,当地的彩票中心拿5%,发行商要拿10%,发售一期几百万、上千万甚至上亿元,发行商获取10%的利润就已经相当可观了。当然了,无商不奸,他们并不满足于拿他们10%的利润,于是他们把歪脑筋动在了应返还购买者的50%上面。彩票是国家统一印制的,那上面的防伪不比人民币差,没办法造假的。奖票一万张一组,每组的奖点在外面是注明的,有几个一等、二等、三等。发售时,发售商是十分关注每一组卖的情况,当一组彩票已经卖的所剩不多时,大奖或一等奖还没有被摸出时,发售商就不让卖了,重新开一组再卖。

  每晚收工时发售商最忙碌,要统计每一组的出奖情况,躲在小屋里要一张张地括开自己留存有大奖的奖票。比如这一组找出来了大奖,剩余的明天继续出售。采用这种方法发售商总能牢牢控制几个大奖在手。就算发售商的运气不好,最少也能控制一二个大奖。发售商还有一个生财点,就是弃奖。有不少人花了一二百元,最后只摸了个一元二元的小奖项,也不愿意去兑了。还有是发售商故意慢腾腾地兑奖,造成兑奖处十分拥挤,不少人怕麻烦,为那几元往人堆里去挤,随手就丢弃或放弃了兑奖权,这就是弃奖。你别小瞧一元二元的小奖项,积腋成裘,一次下来光弃奖都能弄个几十万元。小奖项的中奖彩票,一小捆一小捆地捆好,发售商把他为括大奖未中奖的奖票都混在里面,谁有功夫还去一张一张地核对呢,这些弃奖的奖金自然就进了发售商的腰包。

  记者:还要进行二次抽奖,那发售商怎么会得到汽车或巨额的奖金呢?

  发售商:博彩也就是赌博,逢赌必诈。搞鬼做手脚都在这二次抽奖上。我前边介绍过,当地的体育官员和民政官员什么事都不管,什么事也不做。所以抽奖的用品都是由发售商自己准备。二次抽奖,一般是两种方法,一个是纸袋,一个是摸乒乓球。纸袋挂在上边,让得大奖者去选号,发行商自己准备的纸袋,哪个号码里有什么奖,他们心知肚明。他派自己的人上去,选取自己设定的号码,大奖不就到手了吗?彩民上台进行二次抽奖,抽个背投大彩电、几千元的奖金也不亏,皆大欢喜,又帮发售商制造了发售声势,可以进一步激发彩民的购买热情,也是一个好事。

  记者:那装有大奖的纸袋,被不是发售商自己的人选中了,那怎么办?

  发售商:那是天意,这个人的运气太好了,只有让人家拿走。西安的刘亮就有这运气,发售商把纸袋装错了,正好又被他选中,你让人家拿走,什么事都没有,相反发售商要把每一分钱都要赚走,这种黑心人不出事就属不正常了。

  记者:纸袋子你可以记住号码,那20个乒乓球装在一个箱子里怎么你自己的人一下子就能摸到手?

  发售商:这个很简单。我不是说了吗,所有的事情都由我们准备,其中就包括抽奖的用品,那个乒乓球是由我们特制的,你看录像这就是乒乓球抽奖时的情形,公证人员检查的多严格,整条胳膊都查了。发售商自己的人手上涂有磁粉,乒乓球又是特制的,不用乱摸,它自己就往手里跑。摸出来乒乓球你看马上就踩碎了,按理说这特A大奖,公证员应封存保管,小额奖项的彩票都回收封存,那巨额的大奖就不用封存这就是漏洞。你看这不是用脚踩碎,为啥?这是消灭证据(发售商边指着他带来的录像机的画面,一边在旁详细地介绍)。

  记者:地方上的体育或民政的官员知道这些彩票发售商的造假行为吗?说句不客气的话,有官员跟着参与造假吗?

  发售商:这些人对发售商的造假举动是一无所知。这事不能让他们知道的,每回干完之后,发售商总要哭穷,说这一把没赚到钱,发售费用太大,亏了多少。实际上腰包鼓鼓的,轿车开回来几辆,背投电视、电冰箱、洗衣机什么都有。

  记者:那现场的公证员知道吗?他们有参与的吗?

  发售商:抽奖的用品是我们自己准备,他们在场,从不动手的,只是在旁观看,那能看出什么名堂。而且对我们的用具只是看看,抽奖的用品过后也不封存。他们只是充数作样子,充当发售商的道具罢了。

  记者:你们搞了那么长时间的彩票发售,里面的黑幕你也知道,国家今后继续搞彩票发售应从哪些方面入手,堵住这些漏洞?

  发售商:关于彩票发行的法规和实施细则都十分健全,关键是要依法办事,很多问题不是没有规定,相反有些地方的个别人就是不理睬,不按规定去办,去执行。这是给发售商有机可乘的关键。

  对一些黑心的发售商要严惩不贷,他们已经触犯了法律,捞得大量的黑心钱财,不能让他们消遥法外。

  体育彩票、福利彩票的发售的二次开奖的用品制作,也应该像奖票一样由国家统一制作,不能由发售商自己来搞,我相信经过严厉的整顿之后,借助奥运的契机,我国彩票业会有一个新的大的发展。(记者 王学刚)

2004年09月07日

事先申明,这篇转贴是一篇留学鬼故事,因为故事比较恐怖,请害怕的人不要往下看,否则后果自负。

一个关于笔仙的鬼故事,很渗人的说……

 爸、妈: 你们好! 
 
出国一年有余,一直没有给你们写过信.你们发来的几封邮件我看了很多遍, 你们那种推心置腹,将我当作朋友并以交心的口气让我很感动,但同时也让我无所适从.所以我一直没有回信,我实在不知该如何下笔又从何说起.每次通电话的时候我也是敷敷衍衍, 草草了事,似乎无话可说.但, 这不代表我不记挂你们.我今年春节不回家了,原因已经在电话中讲清,这里就不再多说了。只是,以后我还回不回的得了家,都难说得很。因为我遇到一件事情,一件极怪诞,极荒谬,极难以置信的事情。这也是写这封电子邮件的原因。我知道你们听到后一定会笑我,笑我怎么还没有长大;你们也许还会骂我,骂我又在撒谎,找了如此一个荒谬的理由两年不回家在外面逍遥。但是,我要说,请你们相信你们的儿子一次,尽管他很不成器,自小就爱扯谎,到这么大也还不大懂事,也请你们相信我、你们唯一的儿子。这一次,我绝对没有撒谎。我说的每一个字都是发自肺腑的。 

 我被鬼上身了。 

是的,我被鬼上身了。我可以想象你们看到这里时的讶异表情,或者会不屑地哈哈大笑以为这是一个玩笑,说不定你们还会干脆把这封电子邮件关掉,不耐烦看这种无聊的东西。然而,事实上即使在写这几个字的时候,我亦感到一种无可名状的恐怖盘踞着我的心。你们知道以前的我是决不相信神鬼之说的。我一直相信科学才是这个世界的根本,神鬼之说只是虚妄的无稽之谈,并且和科学是完全矛盾的对立。我想这也是绝大多数人的想法。但现在,我的看法完全改变了。我亲身经历的事情使我无法不相信,这个世界上,确实是有幽灵存在。 

事情要从一月底说起。 
你们知道,我在电话中也说过,一月我和来自北京的朋友,磊,搬进了公寓里。但个中详情我一直没有跟你们说过。事实上那幢房子并不是传统意义上的公寓,而是幢独立的平房。而且包括周围七、八幢房子都是一模一样的格式。据说这里以前曾是个度假村,后来大约是度假村生意不行了,就改为公寓对外招租房客。房子坐落在一座小山脚下,山叫雷山,位于市郊,是一个房介公司介绍的房子。物主、即真正房东,我们从来没有见过.那位房东, 也从来没有 
 给我们,他那处产业唯一的客户有过什么联系——对了,一共有七八套这样的房子,却只有我们一户居住.房子外表普普通通, 每一套里面都是两室一厅, 带厨房洗手间家具.唯一的特别之处是整个房子都是纯木结构,这大概因为它的前世是度假村吧。我们住在最东边的那套,那是那幢房子最好的一套,因为可以看到远处的海边景色.我和那位北京朋友磊,以及我们各自的女朋友各住一间卧室.

是的,我们同居在那里.这事儿一直瞒着你们, 不好意思给你们说起.但现在说出来已经就没有任何关系了.因为我已经跟那个女孩子分手了. 她叫丽,广东人. 
 尽管那里离大学不近,但我们还是决定在此定居。一来是看上便宜的价格,另一个原因是环境幽静。屋前屋后都是草丛和树木,背后山上有非常茂盛的树林,道路两旁也整齐的并排耸立着一棵棵大树,夹杂着各色说不出名字的花。再加上远离市区人烟稀少,这里的的环境其实是好得无以复加,连空气都是那种湿润的草木泥土特有的清新味。 
 
但是这只是先前的印象,现在我却宁愿将那些树连根拔起,一把火将这些花花草草烧个干净!在白天,在不知情的情况下,这里环境确实是好。但一到晚上——就象现在——就只剩下阴冷和潮湿.刚开始,我还以为是木质的墙壁易受潮且不挡风。现在,我才明白,这根本就不是原因,这个地方也并根本不是环境幽静,空气中也并不是湿润清新,而是——阴气重!阴气极重!我后来才发觉,那种湿润的草木泥土味其实根本就是一股腥味。是的,是血的味道!我现在就能感到带血的空气将我团团围住,紧紧地裹着我不放,粘着我的每一寸皮肤。还有一股一股带有血腥味的阴风不断从窗户缝隙间流进来,从门缝下爬进来,甚至从墙壁和天花板渗进来,再一层又一层地伏在我背上,穿过衣服纤维之间的间隙透进来.我浑身都在起鸡皮疙瘩, 现在,并非仅此而已。房门外面有一个发黑的风铃,已经看不出是何年何月之物。铃坠是一个小小的猫咪,一起风,便敲打撞击长短不一的铃发出清脆的声音。但现在铃上长满了红褐色的锈斑,一有风吹过,发出的声音也是干谒刺耳,如刀刮骨磨齿一样令人心惊肉 
 跳。 

 对了,还有件东西,一件异常可怖可恶的东西——镜子!两个卧室各有一面一模一样的镜子,带有暗红色的镜框。矩形的镜子很古怪地被竖着悬挂在床头正上方。后来当我们发现这个镜子不仅是有点古怪而充满邪异、想把它们取下来时,才发现这镜子竟是镶嵌在墙壁里的。 
 
事情从第一天搬进来就很不对劲。 
那天傍晚我们刚把行李搬进来,每个人都很兴奋。于是我们决定一起开车外出购买些蔬菜肉蛋、日常用品之类。磊家庭条件很好,居然搞来一辆车,据他说是他爸爸在这里的生意伙伴借给他的。虽然这辆丰田佳美很有点破旧,但我们依然很高兴,因为在同学中我还没有看见有谁玩儿车的。 

我依然非常清晰地记得,当磊说:“我要先去加油……”的时候,我忽然听到一阵很温柔的猫叫声,“喵,喵喵……”声音不大,甚至可以说很温柔。 
 我们四人面面相窥,因为我们没有宠物,而猫声却近在咫尺,似乎就在屋里,偏偏却看不见!然而,当时我们根本就没有在意。只有媛,磊的女朋友,一个成天嘻嘻哈哈的女孩子淡淡说了一句“哪里来的野猫”。我还想起了以前我们家那只白猫,给他们随口聊了几句。现在回想起来,当时若是一定要找,并非就一定找不到那只该死的猫!只不过,话说回来,即便找到了也不见得会对后来发生的事情有什么帮助,说不定还会让噩梦提前开始。 

头两个星期都过得很是开心,早上大家都坐磊的车去上课,下午一起回家,顺路买菜;两个女孩子负责做饭洗碗,我和磊则打扫房间,抹窗理柜,又把各种家什挪来盘去,找一个最舒适的搭配;又申请电话线,上网帐号,卫星电视;购置新家具……大约是大家才搬了家颇为兴奋的缘故,虽然那段时间忙得不亦乐乎,但也甚为平和融洽,头一天出现的古怪的猫叫声也一直再未出现,我们亦早淡忘了。现在回想起来,那段日子简直就是天堂的生活。 

只可惜好景不长,日子一久,新鲜感就消失了。日子逐渐开始平淡乏味起来。原来觉得兴奋愉快的事现在看来平淡无奇。爸妈,记得小时侯你们说我没有恒心没有毅力,做事虎头蛇尾,常常半途而废。我发现不仅我是这样,我认识的绝大多数人也是这样。嘿嘿,现在我才终于明白,这个毛病原来是如此的要命! 

无聊和空虚越来越严重,到后来我们发现即便是四个人在一起也很难打发时间。当扑克玩腻了,麻将打腻了,电视看腻了,网也上腻了之后,每天晚饭后我们四个人便围在餐桌旁大眼瞪小眼,绞尽脑汁去想一个所谓的“娱乐节目”。

那天就是这样,我清清楚楚地记得,2002年1月11日,星期五,我们便这样围在一片狼籍的餐桌旁。“来玩笔仙吧?” 
现在想起来,这个提议真是无聊至极愚蠢透顶的想法,然而当时我们却跃跃欲试。不,准确地说,是我和磊。
“笔仙? 怎么玩儿?”我和磊都听说过,但又不知道细节。两个女孩子胆小,不敢玩,我和磊又不知道怎样玩。 
 “哈,笔仙? 劝你们最好不要玩那个,还是玩点其他的吧。”媛表示了反对意见,“如果玩了就有你们两个的苦头吃喽。”她的神情永远象在开玩笑。 
 “不要玩那种东西!”丽表态道,“很邪的。而且听说那是真的!” 
 “听说? 嘿嘿,不信不信,”我连连摇头,一脸讪笑,磊也信誓旦旦地拍拍胸膛:“哪有什么笔仙笔鬼的?我就不信这个邪!我只知道这个世界上唯一能够信仰依靠的只有我自己。” 
 “对、对,”我也乘机起哄,“有鬼么? 现个身来给我看看。” 
 丽在一旁冷冷地“哼”了一声,刚才我才跟她为了酱油用完没有及时去买这点鸡毛蒜皮的小事恶吵一架,看来她还没有消气:“鬼现身?鬼要真的现身了我看你跑都跑不及。” 
 “不试试怎么知道?” 
 “哼,不要怪我没有给你讲清楚哦,笔仙可是‘邪灵’! 一请出来就会上你的身的。” 
 丽似乎想吓我。 
 “上身有什么很坏的后果吗?”磊问道。 
 “当然有啦。被上身的人会很倒霉很倒霉的,一直都会霉运不断。而且一旦上了身,就很难再离去。我以前有个同学就是不信,去试了一试,结果差点把命都丢了。他可是那 
 种很老实很老实从来不说谎的人。那都是真的!” 
 我仰天打了个哈哈,根本就不相信:“从来不说谎?恐怕只有死人能做到吧?” 
 磊点点头:“我也不相信,不妨来试一试,反正坐着也是坐着。” 
 
 噩梦就是这样开始的。正好两个女孩子知道怎么玩。于是我和磊分坐餐桌两侧,各自伸出右手重叠起来,两个虎口相交处留下一个小孔;又插一支笔进小孔里去,夹紧,笔尖垂直的点在餐桌上预备好的一张纸。 
 “然后呢?”我全然不知大祸即将临头,依然在嬉皮笑脸。为了吓唬两个女孩子,我和磊不仅把灯关上,还字餐桌四周各点上一根蜡烛。 
 “然后就轻声地念:’笔仙笔仙请过来,笔仙笔仙请过来…’一直到笔仙来。如果笔仙来了,笔就会自动在纸上画一个圈。” 
 “来了又怎么样?” 
 “来了后你们就可以问他问题,如果是肯定的回答,笔就会在纸上画圈。圈越是圆,这个笔仙越是灵,也就……越邪!”丽的声音有点颤抖,我好笑地瞟了一眼,她紧紧地抓着媛的手。媛补充道:“完了以后要记得把笔仙请走。” 
 “怎么请走。” 
 “就说:‘谢谢笔仙,请慢走。’” 
 一切照做。开始的时候我和磊将笔夹得紧紧的,不要说画圈,就是在纸上动一下都不可能。但时间一久,两个人都累了,两只手失去了力量的平衡,笔就开始动起来。于是笔开始忽上、忽下、忽左、忽右地动气来,在纸上留下一条条不规则的线段。但我和磊还不觉得怎么样,口中仍然念念有词:“笔仙笔仙请过来,笔仙笔仙请过来……”依然没有任何笔仙出现的迹象,只是两个人的手因为累而开始抖动,纸上的线条开始弯弯曲曲起来。 
 忽然我感到磊的手不再做任何抖动,而是异常镇定地以一股我无法掌握的力量推着我的手似乎有意要在纸上推一个圈出来。 
 霎时间我停住口中的念词,诧异地抬起头,却发现磊正睁大了眼睛瞪着我! 
 便在此刻,一阵风从屋外猛然刮过,呼啸着刮过呜呜作响的房屋,风中隐约夹杂着另外 
 一种声音。我侧耳细听,终于听到了:“喵嗷——喵嗷——”是猫叫声!声音远远地传 
 来,似乎是从背后山上传出的。遥遥听去,猫声似乎极其凄厉惨烈。 
 我忽然感到一阵害怕,一股冷流从脚底升起,贴着我的皮肤往上升起直至发梢,让我起 了一身的鸡皮疙瘩。回头看看两个女孩子,她们已经吓得抱作一团,眼睛却死死地盯着我手中的笔。 
 笔!我忙回过眼来,笔已经在纸上画了一个圈。一个圆得不能再圆的,正圆的圆圈。 
 我听见两个女孩子的声音在一旁颤抖:“来了,来了……” 
 磊比我镇定些,他先开口问道:“你是不是笔仙?” 
 笔开始在第一个圈的旁边慢慢地运动,慢慢地,不可思议地画出第二个圈,和第一个圆圈一模一样大小! 
 然而我竟还心存怀疑,开口以试一试的心情问了一个实验性的问题:“我是不是女的?” 
 笔在纸上乱走乱画,却绝无任何画圈的迹象。于是我又开口问道:“刚才那是不是猫叫声?” 
 笔慢慢地从纸中央滑动到我的左侧。我感到磊手中的力量忽然松了,象是在引导我的手推出一个圈来。但不知是什么念头使我放弃了和磊的配合,也许是害怕吧?我故意将手松开,不,是两个人的手不约而同同时松开,笔“啪嗒”一声跌落在那个未完成的圈上。 
 
 我和磊各自点上一支烟,我用怀疑的眼光打量着他,因为我认定是他在作怪,推着、或者引导我的手画圈。但他却一直盯着桌面上的纸。纸上两个正圆的圆圈在明亮灯光的照耀下,夹杂在纷乱毫无绪的线条中显得异常清晰打眼。四个人都默然良久,终于,磊开口对我说道:“你觉得怎么样?” 
 我看着他,没有马上回答,因为我不知道该怎样回答,也不敢将我的怀疑直接说出来。 
 不料磊却说道:“你是不是觉得我在推你的手画圈?或者我故意放松引导你推着我的手 
 画圈?”他一弹烟灰,嘴角挑起一丝讽刺的微笑。 
 那天晚上我在床上辗转难眠。尽管磊说出的话跟我的感受一模一样,但我并不完全相信他。因为他也有可能做完戏后故意说出那些话让我相信他。但如果他为什么要这样做呢?吓唬两个女孩子?还是想吓唬我?为什么?但如果确实不是他,那…… 

 直到第二天背着两个女孩子,磊的一句话才彻底打消我对他的怀疑:“我知道你怀疑我,但你想想,我当着我女朋友的面说不相信有所谓的笔仙,也就不相信笔会自动画圈,如果自己装神弄鬼画圈出来,岂不是自己打自己耳光很没面子?” 
 “对,”我点头称是,“不该怀疑你的。” 
 “没关系,这是难免的,”他摆摆手,“事实上我也怀疑过你,但你也当着你的女朋友说了那些话。我甚至还想过是你们三人早就商量好的圈套,开个玩笑作弄我一下。但太不现实了,我了解你们。当然也有可能是我们三人商量着来作弄你,但你觉得我会到现在都还不承认吗?” 
 确实不会。我了解磊,他不是那么不够朋友的人。“那么那两个圈……” 
 “那两个圈完全是巧合罢了。”磊自信地说,“两个人的手不可能力量完全相等,力量不平衡,笔就会自己走动画出线条来,画圈只不过是画线的一种特殊的形式,巧合罢了。不用担心,”他拍拍我的肩,似乎看出我的心有余悸,“我决不相信什么笔仙笔鬼的,也不信会有什么倒霉事。事情就此结束了。” 
 “那,那猫叫声呢? 我们第一天搬来就有的猫叫声,昨天晚上又听到了。” 
 “山上的野猫吧,没什么。” 
 尽管磊的话很有道理很有说服力,但我还是不能完全排除“笔仙”的可能性。磊又象个没事人一样有说有笑,只是绝口不再提这件事。两个女孩子则事不管己,毫无所谓,权把那天发生的事当作一个调剂无聊生活的小小刺激。似乎最胆小的人是我,只有我一个人还心里发虚,时刻担心着丽所说的“倒霉事”的发生。这是因为那股推着我的手画圈的力量和凄厉惨烈的猫叫声是那么的清晰,已经深深刻在我的脑海里。

然而,第二天并没有什么特别的事情发生,第三天也没有。一个星期都这样安安稳稳平平淡淡,或者说无聊地过了。我逐渐相信了磊的推断,以为事情就此结束了。却不知,事情其实还没有真正的开始。 
 住了一段时间,房屋的不足之处慢慢显露出来了。我前面说过,这里环境很好,大树成荫。这也带来的相应坏处,就是背阴潮湿,缺少日照。洗的衣服晾在外面总是要好几天才干,而且不是晒干而是风干的。所以衣服上总有股说不出的臭味。另一个是卫生间的抽水马桶坏了,一直不停的漏水,一直发出“呲呲”的加水声,于是我们不得不关掉水 
 龙头,每次用时再打开加水。爸,妈,这些我好象都在电话中说起过吧?那天正是请笔仙整整一周之后。我们一行四人从一家卡拉OK厅出来,这是我们新近找到的娱乐方式。所以这天四个人都是兴致勃勃,玩得很是开心。四个人有说有笑地走到有昏暗灯光的地下停车场,一股凉意迎面袭来。丽挽着我冲我嘲笑道:“今天是你们召鬼之后七天整哦。据说如果召的是厉鬼的话都是要过七天才现身的。”
“是么?”
“是啊。今天晚上我可不敢跟你睡一起了。”
旁边媛也讪笑道:“对、对,今天晚上我跟丽睡。让你们两个色鬼睡一起。”就在这时,磊忽然“咦”的一声。顺着他的目光望去,我隐约看见一只猫的身影,蹲在磊的汽车引擎盖上。两只翠绿的猫眼在昏暗中闪烁不定。见我们一来,猫矮身一窜消失在黑暗中。
“怎么啦?”丽不解地看着我。
“猫。一只黑猫蹲坐在磊的汽车上,刚才。你没看见吗?”
“没啊? 有猫吗?”丽瞪大眼睛。
我和磊对望一眼,看着他的目光我心里咯噔一下。
“有猫吗?你有看见吗?”丽松开挽着我的手,回头问媛。媛也瞪大眼睛:“没有啊,我什么都没有看见。”
“什么都没有看见?怎么可能?!”我激动地惊叫道。两个女孩子大约是被我的样子吓住了,紧紧地站到一起,还手拉手。
末了,磊叹了口气:“好了好了,”他看着我的眼睛,“没什么猫。我们吓你们玩儿的。”说罢将钥匙抛给我,道:“我累了,你代我开罢。” 
毫无疑问,磊所说的话只是安慰两个女孩子的,而且,并没有多大效果。一路上四人都沉默无语,直到快到家了,气氛才有所缓和。丽和媛开始在后座叽叽咕咕,我和磊也开始有一句没一句的搭着。眼皮越来越重,看看车上的钟已快三点,大家大概是困得来连害怕都忘了。

眼看已经拐进家的小路,这时已经在半闭着眼打盹的磊忽然大叫一声:“看着!”汽车前面大约五米处有一只猫,漆黑的猫,正蹲在路中央,两只碧绿的眼睛迎着车灯发出邪异的光。刹车已经来不及了,我猛地往左一打方向盘,汽车所有的重量加上惯性全部压在右前胎上,汽车开始侧滑。一声“乒”的剧响从车底传来,压住了后面两个女孩子的惊叫声。右前胎爆了!我猛然想起汽车杂志上看过的救生技巧,连忙将方向盘往左打死,希望惯性能够因此减缓下来。
然而速度太快,且路上充满了潮湿的露水,汽车开始打转。我放弃了做任何动作,只是看着四周不断盘旋、飞速而过的景物。我感到一股巨大的力量施加在我身上,我知道它比我强大得多,我无法抗拒它,于是只好听天由由命。也许是我正确的处理动作,汽车很快停止了打转,但依然往前侧滑。猛然间汽车右侧抬起来,车内四人都齐声发出一声惊叫。汽车右侧抬起四、五十度,接着力道尽了,猛然坠了回去,发出“砰”的一声闷响,终于停住不动了。我双手死死地抓住方向盘,浑身大汗淋漓。磊也是满脸蜡黄、惊魂未定的样子。丽和媛冲下车在路边吐了起来。

下车后我的大脑里转着千百个念头,一会儿后悔自己为什么开那么快,一会儿又觉得开车出事很丢面子。然而,我根本就没有想到事情的严重性。但话说回来,这其实根本也不算什么。和后面发生的事相比,简直就是小巫见大巫。我和磊各自点上一支烟镇定神经。“看见了?”磊问。“看见了,一只黑猫。感觉上和刚才停车场里那只,是同一只。”我猛地喷出一口烟。 
 “这回你们看到没有?”待两个女孩子镇定下来,磊开口问道。但丽和媛只是瞪大眼;睛。
“猫,黑猫!”我咆哮起来,“刚才之所以出事都是因为站在路中央的那只该死的猫!你们怎么会没看见?!”
“你凶什么?”丽忽然大声道,“自己开车没水平还怪什么猫?哪里有猫?我们怎么都没看见?”
“行了,行了。事情已经过了,四个人都完好无损没有受伤就好了。”磊打断我们的争吵,俯身检查车的情况。左前胎上有一道一尺来长的裂口,在裂口边缘可以很清楚地看见因为爆胎前的高温而出现的类似烧灼的痕迹。我蹲下身来摸摸还烫手的车胎,想说几句抱歉的话,却不知说什么好。
“怎么回事? 怎么会这样?……”磊埋头看着车胎喃喃自语,我不得不解释:“当时那只猫在前面,我的第一个反应只能是避开……” 
 “不是这个!”磊打断道,“我也看见了那只猫。但是,为什么车胎会爆?”
“因为速度太快压力太大”
“不对。你想想看。我记得当时你是往左打方向盘,汽车的全部力量应该是都压在右前胎上。要爆胎也应该爆右前胎才对,怎么左前胎会爆的?” 
 是啊!怎么会这样?我茫然无语。忽然,我想起一件让我不寒而栗的事。磊也忽然反应过来,似乎是在同一时间我们都想到了这件事,这件极为恐怖的事。
“你记不记得,刚才停车场里那只猫坐在哪里?”
我打了个哆嗦:“好象是,左前胎上方。”
 “没错。我也记得是左边靠近天线。” 
 “什么左边?”媛走过来,她脸色比刚才稍微好看了点。 
 “刚才在地下停车场里,那只你们没有看到的猫…”说道这里我不由哽住,因为我又听见那惨烈的猫叫声:“喵嗷——喵嗷——”就从背后的雷山上传来。磊瞪大眼睛看着我,一颗豆大的汗珠从他的鬓角滑了下来,毫无疑问他也听到了。但丽和媛却又是一副茫然无措的样子。磊给我打了个眼色,示意我不要告诉两个女孩子更多的东西。

我心中隐隐有种预感,觉得大祸即将临头,然而我却是绝对的无能为力。这种感觉和坐在失控的汽车里的感觉一模一样。“也许是才经历过车祸的缘故吧。”我这样自我安慰。然而,这种感觉一直缠绕着我直到现在,我叙述这件事的时候。我不知道我什么时候能摆脱它,也许,永远不能。
 那天夜里我就沉侵在这种惶恐之中。我在床上尽可能轻地翻来覆去,生怕吵醒旁边的丽。但最后我却发觉原来她竟也没有睡着。 
 “怎么? 还没睡吗?”我问。 
 “恩,睡不着。”她轻声哼道,“我,我好怕。” 
 “怕什么?” 
 “不知道。” 
 我嘿了一声,无话可说。因为我也害怕,且也不知道到底应该怕什么。最后我伸手搂紧她。
“别怕,有我在。”她听话地倦在我怀里,手脚却冰凉一片。末了,她说:“我怕的,就是你。” 
出乎意料的是,这天夜里没有更多的事发生,第二天也没有。一切都似乎归于平静,看来又是一个平平淡淡的星期。第二天我陪磊去换了个胎,路上我们讨论了一下前一晚发生的事情。最后我们两人一致同意那是只山上的野猫作怪。我们更多的是在庆幸事情发生在深夜,路上没有其它车辆行人。

爸妈,看到这里你们一定也会发觉事情绝不是那么简单。后来发生的事实也证明了这一点,我和磊不过是在自欺欺人而已。事实上我们在谈论这件事的时候都在回避一个问题。即为什么该爆的右前胎没有爆,而猫坐过其上方的左前胎却爆了?我不是没有想过这个问题,只是我觉得无法解释,或者答案太可怕了无法接受。想来磊也是如此吧。
若是事情都发生在另一个与我毫不相干的人身上的话,我也许会将答案脱口而出:那只猫是恶魔的化身。这一周却不是完全平静地度过。我和丽之间了点状况。丽开始对我忽冷忽热,让我捉摸不定。即使偶有笑脸,也似乎是在为绝大多数时间中的冷淡做补偿。两人单独相处,竟有一种逢场作戏的感觉。媛和磊之间似乎也出了点问题。从表面上看,媛象没事人一样,依然成天嘻嘻哈哈;磊也看不出什么,只是抽烟比平时多了一倍。磊跟我私下聊起,说不要看媛在大家聚在一起的时候嘻嘻哈哈跟没事一样,跟磊单独相处的时候收起笑脸变成另一个人。我这才猛然想起似乎每次丽跟我强颜欢笑也是在四人相处的时候。 
 两个女孩子似乎不约而同地作戏给另外两个人看。爸妈,你们都是过来人,出现了这些 
 事意味着什么你们不会想不到吧? 
 
 这天正是离请笔仙十四天,离上次爆胎整整一个星期。又是周末,吃完晚饭四人又无所事事。我和磊玩儿早就玩儿腻了的联机游戏,两个女孩子自关在房里叽叽咕咕。终于,;磊忍不住了:“去兜风吧。”他关上电脑。两个女孩子不愿出去,于是我和磊开车出去漫无目的瞎溜达。天正下着大雨,滴滴雨水 
 在车灯前面飞速划过,异常清晰。我和磊都默默无语,不用说我们也心知肚明对方的心思,都在回忆上星期的可怕经历。磊吸取上回的教训,将车速控制在四五十码,一路上倒也相安无事。路过一家杂货店,磊下车买烟,我坐在车里看见一旁的一家宠物店门上贴着一张白纸,昏暗的街灯下看不真切,但隐隐约约可以看见个“猫”字。于是我将上身探出窗外,但见其上写着:“廉售奶猫,纯黑,二十元一只,七只一共只要一百元。” 
 “还记得那只黑猫吗?”磊回来时我问道。 
 “恩,怎么?” 
 “刚才那家宠物店打折卖黑猫,一共七只,很便宜呢。” 
 “是么? 多半是家猫被强奸后留下的野种,被主人贱卖的。”磊玩笑道。于是话匣子打开了。我们边走边聊,话题渐渐扯到上周那只神秘的黑猫。
“你说,为什么停车场里那只猫会坐在咱们汽车的引擎盖上?”我问。 
 “不知道,”磊摇摇头,“也许是因为猫喜欢温暖的地方罢。熄掉的引擎会往外散热,引擎盖上比其它地方暖和一些。”
 “那,停车场那只猫和后来路上那只猫是同一只吗?” 
 “按理说不应该是。但凭直觉感觉是的。你注意那只猫的眼睛没有?” 
 “唔,碧绿的,很醒目。” 
 说到这时车内的灯忽然亮了起来。“你开灯干嘛?”我奇怪道。“没有啊。”磊瞪大眼 
 睛,“天,门都关着的,灯怎么会自己亮?”“不是你开的是谁开的?” 
 “绝对没有!”磊申辩道,“我没事开灯干什么?再说灯开关在哪里你又不是不知道。 
 我有碰过吗?” 
 确实如此,开关在头顶,灯的旁边。我看了一下,是挂在开门档上的,就是说只有开门 
 的时候灯才会亮。“线路问题吧?”我伸手想关掉它,灯却在我的手触碰到开关的一瞬 
 间之前自动熄灭,但不是普通的熄灭,而是慢慢地、由亮转暗地逐渐熄灭。我扭头瞪着 
 磊,他也看着我。 
 “车灯开关是挂在开门档上的。”我颤声道。“吱——”的一声,磊一甩盘子靠边一个 
 急刹,我可以看见他额头上的汗珠。 
 “开门档?”他问。 
 “开门档。” 
 “就是说…” 
 “是的。” 
 我完全能理解磊没有说完的话。挂在开门档上的车灯自动亮起又熄灭,唯一合理的解释 
 是车门在我们都无知觉的情况下打开又关上。恍惚间我仿佛看到一只黑手趁我和磊谈笑 
 之际慢慢地拉开车门,坐进车来,又缓缓将车门拉上……我下意识的猛一回头。 
 后座上并没有什么异常的东西,至少我看不出来。座位还是座位,安全带散乱地盘在一 
 起,后座后面的玻璃窗依然明亮透彻,我可以看到淅沥的雨水被刹车灯染成红色。一滴 
 一滴,暗红,带着闪光的雨。这更让我害怕。“回……回家吧。”我颤声道。 
 重新上路后磊开得更加的慎重,但却一言不发。我也默默瞪着左右摇摆的雨刮器发愣。 
 小小的车厢里弥漫着一股紧张气氛,是不可名状的恐怖。我几次想开口打破沉默,却又 
 不知说什么好。我开始胡思乱想起来,难道丽说的七天之后的事情是真的?难道我们今 
 天又会遇到……遇到什么?不敢再想下去。 
 “那只猫!”磊忽然开口,吓了我好一大跳。 
 “什么?”我问,“那只猫怎么了?”张眼四望,并没有猫的影子。 
 “瞧你紧张的。”他讪笑着看了我一眼,我也发觉自己好象太神经质了,不好意思地笑 
 笑:“你想说什么?” 
 “我是说上个星期的事。那应该是两只猫,凑巧长得一样罢了。如果是一只猫的话它怎 
 么可能从停车场跟我们到家,还赶在我们前面。猫不会有汽车跑得快吧?” 
 “当然,普通猫是这样。别的就难说得很了。” 
 “行了行了,不要再自己吓自己了。你说那是只猫会不会是刚才那七只小黑猫的老 
 爸?” 
 “呵,”我想开个玩笑让自己放松下来,“说不定现在我们屁股后面正跟着七只黑猫 
 呢。”说完就发现这个玩笑一点也不好笑,而且心里还开始发毛。于是我连忙大声岔开 
 话题:“那只猫当然也可能一只跟着我们,它可以跟着,恩,扒在我们汽车上。”越说 
 越不对劲。我神经质的回头一看。一团黑影晃进我的视界,我拼命睁大眼睛想看清楚, 
 因为我不相信那是真的。 
 一只黑猫,正扒在后窗外。黑色的大尾巴竖得笔直,上面蓬松的毛垂下来而显得上粗下 
 细,象一个黑色的感叹号。被雨水淋湿毛呈一根根的尖针,我可以清晰地看见雨水一滴 
 滴从针尖上滑落。它两只阴绿色的眼睛正发出凶狠的光,瞪着我。我感到自己扯紧的眼 
 角在抖动。 
 汽车一个急刹——毫无疑问磊也从倒车镜里看到了这一幕——猫被惯性直甩出去,我可 
 以听见猫在车顶棚上的滚动,尖锐的猫爪在车顶上刮出刺耳的声音:“嘎——”,从后 
 至前,由远到近,好象直接刮在我头皮上一样毛骨悚然。伴随着“喵嗷——”一声怪 
 叫,猫被斜斜地甩了出去,在地上滚了两圈就消失在黑暗的雨里。 
 我惊魂未定地看着磊,他也看着我,到这个时候说什么都多余了。“回家!快回家!” 
 我们那时还不知道,其实回不回家已经不再重要了。 
 
 汽车开出几米就停住。“怎么了?”我问,生怕磊说出一句“车坏了”之类的话。磊的 
 嘴唇蠕动几下,没有说话。“你他妈的怎么了?快说话!”我急道。 
 “你看,这是哪里?”磊回头看着我。 
 这条街上没有路灯。笔直的,略带往下倾斜的通向前方,尽头是一片黑暗,连汽车的远 
 光灯也无法企及。两旁很整齐对称的排列着两排大树,树枝交错在我们头顶。正是落叶 
 的时候,一些落光了叶的树枝象一只只枯手包围着我们,剩下的残叶也随着大雨慢慢飘 
 落,只是在黑暗的大雨里根本就分辨不出是什么树。这是一条我们从来没有走过的路。 
 我们迷路了。 
 磊又慢慢地向前开。这是最好的办法,我默默想道,与其在这里坐以待毙不如往前走走 
 试试运气。但很快我就推翻了这个理论。因为越往前走气氛越是怪异。我隐约看见大树 
 的背后似乎有房屋,但又模糊一片,而且没有看见任何有灯光的迹象。走了大概有五六 
 分钟,磊就不敢再往前了。他把车停下来,我听见树上不知名的果实落在车棚顶上“哒 
 哒”作响。 
 “迷路了。”磊叹了口气,“你身上带有地图吗?” 
 “没。我忘带手机了。你出来有带吗?实在不行就找警察吧?” 
 “没有,我哪里想得到要带手机的? 怎么办?你看是不是我们一起下车去问路,或者找 
 个电话?车上有把雨伞。” 
 我看看窗外的漆黑,实在股不起勇气下车到一片黑暗中去。“我、我来开车试试?”我 
 提议道。 
 两个人都不敢下车,于是就在车上挤作一团,推推攘攘。好不容易把座位换过来,刚一 
 坐定,就听见“嘭”的一声门响,似乎是一团不太坚硬的东西落在汽车上。 
 猫!我和磊同时回头一看,一团漆黑的影子在后窗玻璃外一闪而过。我感到心里抽了一 
 下。“走走!快走!等什么?”磊大声喊道。 
 我猛地一踩油门,两只前轮打滑“吱——”,一跃而去。我加起油门一阵狂冲,两边的 
 树影不断的往后退,直到被扯成一个个飞速而过的模糊影子,然而我却看不到一星半点 
 要到路的尽头的迹象。磊叫道:“慢点慢点!你找死啊?!”我清醒过来,连忙将一百 
 五六的车速慢慢放下来,这才发现自己一身冷汗,连方向盘不知什么时候也变得湿漉漉 
 的。 
 “不要开那么快!”磊恼怒地压低声音,“除非你想今天死在这里。但也不要停下来, 
 边走边找路!”我连连点头,兀自往倒车镜看了一眼,还好,没有猫。“别看后面,后 
 面交由我处理。开你的车。”磊钉上一句,大概是察觉到我的眼光。 
 我稍微冷静一点,又开了一段路,注意到这条路上居然还有不少岔路。我不敢贸然进 
 去,但大路却越走越长,仿佛永远没有尽头,两旁的大树也毫无变化。我心中又开始发 
 毛了。“现在,往哪里走?还走下去?”又过一个岔路口,我开口问。磊没吱声,点了 
 支烟递给我,自己又点一支。“下一个路口转进去。”他喷一团烟,“咦?那是什 
 么。” 
 前面一棵大树横在路中央,道路到此完全中断,无法再往往前走。但我依然可以看见路 
 在树的身下笔直地向前延伸,倾斜向下,似乎永远没有尽头。越过这棵树道路的两边依 
 然还是一排排的大树。但我们已经不能再向前了。我感到一把毛刷子慢慢地刷在我的心 
 里。 
 “往回走!”磊用带有命令的口气说,“原路返回。”我早就没了主意,就按他的话 
 做。但我心中隐隐有种预感,今天我们要走出这个地方是千难万难了。 
 果然,走了不到十分钟,预感灵验了。前面有一棵同样的大树挡住了去路,不,是来 
 路。问“我们来时为什么没有”这种蠢话已经没有任何意义。“走岔路吧?”我提议 
 道。磊却忽然“哧”的笑了出来,接着又铁青着脸不啃声。 
 “怎么了?”我奇怪他居然还笑得出来。他指了指我面前的仪表盘,油灯亮了。 
 “怎么办? 下车吗?”我问道,他却摇摇头:“不要,下车步行,只怕……” 
 又是“嘭”的一声,我们猛然回头,却什么也没有看到。后窗外面一片空旷,只有雨水 
 和黑暗的路。只见尾灯将后面的景物都映得血红。 
 我心有余悸地侧过头看看磊,他也慢慢地回过头来,张嘴想说什么,然而我却只听见他 
 发出一声凄厉的大叫:“喵嗷——” 
 不是他,是猫!黑猫赫然出现在前面的挡风玻璃上!正张牙舞爪地趴在玻璃上面。我感 
 到全身汗毛都竖立起来。一阵寒意直从脚尖直透上来。 
 “喵嗷——”黑猫竖起一只爪子按在玻璃上,似乎在示威。磊大吼一声“滚——”,用 
 力地在玻璃上击了一拳,又不停地作出攻击的动作,希望能够将猫吓退。我也帮忙拼命 
 按喇叭。不料猫并没有被吓跑,“呋——”它发出愤怒的声音,全身被雨水湿透的毛一 
 排排竖起,犹如一排排黑色的牙齿。它疯狂地伸出爪子,两只前爪拼命地抓着挡风玻 
 璃,刮出“吱——吱——”的声音。疯狂的景象让我战栗不已,我忽然想到——它想破 
 窗而入! 
 这恐怖的念头彻底将我吓呆了。我口中不停地大喊大叫“别让它进来”,手在车内小小 
 的空间里抓狂地乱舞。磊也好不到哪里去。混乱中不知谁的手碰到雨刮器,雨刮器坚定 
 有力地划出两道弧型,将黑猫扫了个跟斗。黑猫在引擎盖上滚了两圈,翻身下车,就此 
 消失了。 
 一切都发生得太快了,黑猫的来无影去无综让我不敢相信这这一切。只有依然不紧不慢 
 左右摇摆的两只雨刮器可以证明刚才的事情。我惊魂未定 
 
 ,两手扶着方向盘直喘粗气。直到磊说:“快走!走岔路!” 
 又是一阵狂冲,我丝毫不理会油箱里面还有多少油,也不理会下雨路滑容易出事,磊居 
 然也任由我乱冲乱闯。“他大概是已经放弃了吧?还是想最后赌一把?丽在干什么?怎 
 么路两边的树和刚才一模一样?我们在哪里?为什么路旁没有房子?前面还有树拦路怎 
 么办?油还有多少?要不要在车里过一夜等天亮了在走?这条路为什么是往上走的爬坡 
 路……”我脑海里闪过无数个念头,但我丝毫没有减慢速度,毫不犹豫地左冲右转,见 
 弯就拐,左转、右转再左转—— 
 不可思议的事情发生了,我发现自己竟然已经到了家门口的路上!我长舒一口气,抹一 
 把脸,脸上手上全是汗水。 
 在车库停好车,我欲赶快下车冲回温暖舒适的家里,一直没有吭声的磊却把我按住了: 
 “今天的事千万不要跟两个女人讲。”我表示同意,他又道:“刚才你开车回来的时 
 候,我发现了一件极为恐怖的事情!”我吓了一跳,瞪大眼睛看着他,他眼睛里全是血 
 丝。 
 “你一定奇怪我为什么一路上没有话吧,”他沙哑着声音说,“告诉你吧,那是因为我 
 被吓得根本就不敢说话了。” 
 “什、什么事?”我被他的样子吓住了,下意识地看看后窗,没有猫,什么也没有。 
 “不是猫!”他知道我在看什么,“是刚才,那条一直往下走的路,你说会通向哪 
 里?” 
 “我…不知道。”我拒绝自己去想。 
 “那两棵倒了的树是怎么回事?” 
 “不知道。算啦,别去想了。我们不是好好回来了嘛?” 
 “不对!”他大声打断我,“我们没有‘好好的’回来!” 
 “什么意思?” 
 “看来你真的不知道。”磊叹了口气,“刚才你开车的样子很古怪。而且,刚才,你记 
 不记得你最后三个弯是怎么转的?” 
 “最后三个弯? 好象是左……然后转右……” 
 “是左转,右转,再左转。” 
 对!我想起来了。因为害怕老在一个地方打转,我是左右转弯交替着来的。尤其是最后 
 一个拐弯给我印象深刻,很急的九十度左拐弯——天啊!我张大嘴,又下意识地用手将 
 嘴按住。我以为我要大声惊叫出来,但实际上我连叫都叫不出来了。 
 我们住的房子是在一条死胡同的尽头,背后是雷山。这条街却不是一条直路,而是有一 
 个拐弯,一个向右的转弯。也就是说,我们若是开车回家的话最后一次转动方向盘一定 
 是向右转,不可能有任何其他的可能性存在。但事实上,我最后一次转动方向盘却是向 
 左! 
 
 明白了吧!最后一个弯拐左的唯一解释,就是我们是从背后雷山中穿出来!我们回家的 
 那条路根本就不存在! 

 正如磊预料的一样,接下来便又是一周平静的日子,没有任何特别的事情发生。但是我和磊却是在焦躁和不安中度过。我已经完全相信每隔七天之后的一次大难。磊也开始相信我们似乎是被某种神秘力量所干扰。“但我还是觉得笔仙的说法不大可靠。”他说。 
 他是一个很坚定的唯物主义者。我问他有没有更好的解释,他没有正面回答,只是说现在有很多事情暂时还不能找到科学的解释。但是,在他说这句话的时候,我看到了他眼睛里惶恐。在那一瞬间我了解到其实他已经开始动摇了,只是口头上还不承认而已。这更加深了我的恐惧,因为少了个坚实的精神依靠。 
 我每天都惶惶忽忽,随时感到头重脚轻,心中只是盘算着还有多少天又该到可怖的星期五。这种感觉,很象一个知道自己还能活多少天的人计算自己的死亡到来。这并不是一个愉快的感觉。我在看着一天又一天厄运的日子将要临近的时候,甚至希望噩梦提前到来,等待必然要发生的恐怖事情无疑是一种折磨。 
 丽察觉到了我的不正常,她问我是不是病了,我只能报以苦笑。由于并没有把上个星期的事情告诉两个女孩子,而且她们那天晚上也没有遇见什么古怪的事情。所以对于她们来说差不多半个月都是平平安安过的,她们也差不多快要忘了请笔仙和后来的怪事。只有媛偶尔还笑嘻嘻地玩笑道:“小心喽,被笔仙上了身是很不容易再脱身的。”我和磊瞠目结舌,无言以对。近来烟是越抽越凶了,两个人一天要买三盒烟才够。我说:“等 
 这件事过了咱们是不是该戒烟了?”磊苦笑。我知道他的意思——这件事我们过得去吗? 
 丽还是对我时冷时热的。她找了份咖啡馆的侍应工,每天晚上从六点半做到十点半。头两天我还开磊的车去接送,后来一不好意思老麻烦磊,二来也确实离家不远,走路也就十五分钟,也就懒得去了。媛悄悄对我透露咖啡馆里有个男的在追丽,为此我很是苦恼。磊安慰我说:“一切随缘吧。” 
眨眼间就到了请笔仙后整整第三个七天。这天下午我和磊商议了良久,都觉得最好哪里都不要去,就在家待着。吃完晚饭,我把我的电脑搬到磊的房间,两人开始对决CS。媛自在一旁听音乐看书。因为前一天晚上就没有睡好,一直在提心吊胆今天会发生什么事,所以我其实没有什么玩游戏的兴致,但为了不扫磊的兴还是强打起精神陪他一直杀到九点。最后我实在困得头都抬不起了,于是打了个招呼自个儿回房睡觉。 
 头一沾枕头,倦意顿时充满全身。半梦半醒间想到今天毕竟什么事也没有发生,心中一宽,便睡着了。 
 做了很多梦,很混乱,好象是把丽带回家来看爸妈你们二老。在梦里我家居然还在十年前住的那个小院子里。我们家养的那只白猫还在。丽过来对我说:“白猫不见了!”我走到天井,打开水缸盖子,白猫的尸体便浮在水面上。不知为什么,所有人都说是我杀的白猫,我也莫名其妙认为是我自己杀的,心里还又是后悔又是内疚的,难过得很。直到丽悄悄告诉我:“是我杀的!” 
 我猛然惊醒,发现丽不知什么时候已经回来了,正好好地睡在我身旁。我伸手搂住她,她乖乖地倦缩在我怀里,只是手脚一如既往的一片冰凉。困意又上来了。 
 闭上眼睛,梦居然接着。丽说不要给别人说好不好,我说好。丽又说她不是有意的,我说我相信。她说她杀猫是因为猫想杀她,我笑了…… 
 有点冷,我睁开眼睛,窗户没关好,冷风从窗户缝隙间灌了进来。我想起身关窗,身体却留恋温暖舒适的被窝。闭上眼睛,梦又接着来了。 
 丽从水缸中捞起死猫。不,她在杀猫!她为什么要杀一只死了的猫?她在演示给我看! 
 她用手死死地扼住猫的脖子。她居然笑了。在这一瞬间我惊讶地发现原来她不是丽。冷风又在吹头。我虚开眼,看见丽衣冠整齐地站在窗边,月光从窗外射进来,在她身上镶上一层惨白色的边。她想干什么?我努力地看,还是看不清她的脸。但我知道她在看我,盯着我看。风又从窗口吹进来,吹得她的白色长裙飘来荡去,她不是从来不穿裙子的么? 
 我猛然坐起身来,发觉原来是个梦。窗边没有人,只有风刮着白色半开的窗帘不断晃动。月光将晃动的窗帘投在墙上,呈一个巨大的不断晃动的半透明影子。我这才发现枕边没有人,丽不见了。“上厕所吧。”我这样想道,躺下想继续睡,却再也睡不着了。 
 看看表,已是凌晨一点。我在床上翻来覆去,折腾了好一阵,奇怪的是睡意全无。再看一次表,一点半,丽还没有回来。 
 我心里微觉奇怪,起身去卫生间,没人。于是推开磊的房门,明晃晃的灯光顿时刺得我睁不开眼。 
 “醒了?”磊问道,他还在电脑旁上网。丽正和媛坐在床边说话,只是我见我进来就不说了。我盯着丽,她并没有穿古怪的长裙,也不是睡衣,而是整整齐齐地穿着衬衫和牛仔裤。我觉得她看着我的眼神有点奇怪,于是我问:“你怎么不睡了?”“我?”丽瞪大眼睛,“你睡昏了?我什么时候有睡过?我下班回来就一直在这边待着。” 
 磊和媛都点头,一股寒意瞬时贯穿我全身。 
 那个站在窗边的人影也许是梦,但那个睡在我怀里的女人呢?那绝对不是梦,我敢肯定,我记得“她”冰凉的手脚。如果不梦,那会是谁? 
 我脑海里闪过一个可怕的念头。 
 就在这时,卫生间里忽然传来“轰轰”的冲水声,我被吓了一跳,才反应过来是抽水马桶的声音。又不对了!前面我说过,抽水马桶坏了,一直在不停的漏水。所以我们一直都把水龙头关掉,要用的时候再打开冲水。我刚才还进过卫生间,我敢打赌那时抽水马桶水管的水龙头是关着的。难道是有谁将它打开了?是谁?我打了个哆嗦,回头看看屋中三人,每人都瞪大眼睛。磊的脸色更是蜡黄。“你刚才上厕所忘关开关了吧?”他向 
 我使了个眼色,我只好点头,但一句话也不敢说。 
 两个女孩子吓得赶紧用被子盖住全身,挤作一团,怎么也不起来。丽对我说:“今天不敢跟你睡。你们两个睡。” 
 没奈何,我和磊在房间里磨磨蹭蹭了好一会儿,最后一直等到厕所里没了声息才是互相壮着胆子出去了。两人硬着头皮到厕所里检查以下,一切正常,水龙头是关着的。“也许是水龙头坏了?”磊说。 
 就在这时,我听见“喵嗷——”一声。猫叫声!猫声清晰响亮,赫然是从我的房间里发出的!磊一跃而起,冲了过去,我也紧随其后。推开门,一团阴影在那扇没关好的窗户边上一闪就不见了。磊一个箭步抢了上去。 
 直到现在我也不知道,为什么在那一瞬间我会扭头看另一面墙上的镜子。但在当时我确实是这样做的。这个无意识的动作让我第一次真正见到了可以让我魂飞魄散的东西。当磊飞身掠过那面镜子的时候,我竟然看见镜子里飞掠过两个人影! 
 那是个黑色的影子,和磊靠得很近,几乎是贴在他的背上。似乎是个男人的影子。 
 “就是那只黑猫!”磊倚在窗台上说,“一下子就不见了,该死的东西。” 
 “磊…”我颤声道。“什么?”他回过身来。 
 我吞口唾沫,镇定了下自己的情绪,慢慢将刚才看到的事告诉他,又将刚才怪梦里的白衣女人告诉他。他脸色阴晴不定,不停的抽烟。 
 “记得吗,”听完我的叙述,磊缓缓道,“上个星期的今天,我们迷路,你开车回来的时候,我说过你开车的样子有点怪。” 
 我不知道他为什么提这个,但依稀有点印象:“所以怎么样?” 
 “不是怪! 是……是……”他居然说不出来,这不象他。 
 “是什么?” 
 “当时,我坐在你身边,吓得连话都说不出来,”他深吸一口气,“是被你吓的! 当时,你一边开,一边,一边在笑!” 
 笑!我觉得浑身上下的汗毛都竖了起来。 
 “当时给你说这话是想试探你的口气,”磊继续道,“但你竟然完全不知道。从那时侯,我就觉得鬼上身的说法——” 
 “我被鬼上身了?”我脱口而出。 
 “当时我本来想问你笑什么,但后来发现你笑得很不对劲。你笑得,怎么说呢,象女人的笑,有几下子甚至还‘咯咯咯咯’地笑出声来,那不是你,是另一个女人的声音……” 
 “别…别说了。”我不敢再听下去。 
 “听我说完!”磊使劲摆摆手,“后来转进岔路后,你没有再笑了,反而脸上呈出一种恨恨的愤怒表情。你开得有一百五六的速度,有好几次我都以为你要冲出路边,因为我根本就看不见哪里有路哪里没有。但你却开得很熟,象是你以前走过很多遍一样,在黑暗中也能找到路。” 
 “我绝对没有走过,天地良心…” 
 “没人说‘你’走过! 还有,那只猫!那几次出现的黑猫毫无疑问是同一只!问题就在那只猫身上!你当时说得很对,它想进车来!它为什么要进车来?” 
 “它想…杀我们?” 
 “不可能! 它连雨刮器都对付不了,怎么可能伤害得了你我?还有那条路,那条两旁全是大树,笔直向下老长的路。照理说那么长一条在地图上应该找得到的,但我翻遍了地图,根本就没有!这两天我还瞒着你们自己一个人出去找,找附近的人问,根本没有人听说过那样一条路。至于后来你开车回来的路更是不可能存在的……” 
 “不、不会是黄泉路吧…”我低声道。 
 “唉,”磊叹道,“看来你还是没有听懂。就算是黄泉路,那棵阻止我们再向前的大树又说明什么?我们暂时死不了?其实说这么多也没什么用,你当时自己没有察觉的笑容已经就能够说明一切了。” 
 “说明什么?” 
 “鬼上身! 鬼上身是真的。加上今天发生的事情,足以证明我们都被鬼上身了。镜子里的黑衣男鬼多半就是跟着我的。而那个不知是梦里的还真的白衣女鬼就是跟着你的。” 
 “那…我…我还跟她睡…”我感到胃在收缩,很恶心,想吐。我连忙转移自己的思路:“那厕所里的马桶自动抽水是怎么回事?” 
 “不知道,我现在还没有想到。”磊摇摇头,“我在想你的怪梦里那只死猫。” 
 “那只白猫? 有什么?” 
 磊沉默无语,看来他还没想清楚。最后,他缓缓道:“不管怎样,看来鬼上身确实是真的,”他一脸惨笑,“现在的问题是怎么办?” 
 能怎么办? 
 夜静得可怕。磊将窗户关得严严实实,将窗帘完全拉开。 
 月光从窗户里倾斜出来,将屋外大树的阴影投在墙上。叉开的树枝象一只只张开的恶魔的利爪。我和磊就这样坐在恶魔的利爪中,等着天明到来。 
 我半卧在床上,又开始打盹。乱七八糟的梦又接踵而至。忽然我感到磊用手肘碰我,我猛然惊醒。“听!”磊悄声说道。我侧耳细听,仿佛是旁边房间里丽和媛的声音。不对,是另一个女人的声音。声音并不清晰,忽远忽近,似乎在我们房间内,又似乎远远的在后面山上。再仔细听,却一个字都听不懂,也许说的是一种我不懂的语言?忽然间一个男人的声音冒出来,我不由打了个冷战,看看磊,他正在低头细听。 
 两个声音都很激动,好象在争吵着什么。我仍然一个字都听不懂,想继续分辨声源,还是听不出。过了一会儿,声音消失了,万籁俱寂。 
 我等着声音出现,但什么也没有。良久,磊说:“不要将这些告诉了两个女孩子,”他脸色铁青,面无表情,“睡吧。如果有什么事,顺其自然好了。唉。” 
 我想也只能如此,于是闭上眼睛。 
依然象上几次一样,空白的六天没有任何事情发生。我和磊商定,平时四人在一起的时候绝口不提此事,各人该干什么干什么。白天我们照样上课,放学回家后也一如既往的无聊。我感到丽和我说话的时间大为减少,有时几乎是整天整天的不跟我说话。私下里我把这种情况告诉磊,想不到他也为同样的事情困饶着。磊说走一步算一步,我想也是。磊似乎心事重重的,电脑也不玩了,每天都一个人闷在房里,也不知他到底在想什么。甚至跟他说媛或者丽的事情的时候他也是心不在焉的。唉,其实我还不是差不多。 
 天气是越变越坏,成天非阴即雨。洗的衣服怎么也干不了,好不容易干了,也有怪味,说不出的臭味,穿在身上很不舒服。重洗一次,味道更重,最后味道浓到我都快作呕了。于是只好大用香水。 
 爸妈,我记得这段时间你们在电话里怀疑我是不是出事了,老说我有事情隐瞒着没讲出来。现在你们该知道为什么我老在电话中支支吾吾了吧。即使我当时将这些事讲出来,你们会相信吗?退一万步说,即便是你们相信了,除了增加两个人的担心外,对事情又能有什么帮助呢? 
 这一个星期我每天都生活在阴影的笼罩下,看到什么都在怀疑。就连路边一只不相干的猫也可以把我吓得半死。我和磊单独在一起的时候也是互相干瞪着眼抽闷烟,无话可说。偶然聊起刚开始的那几天短暂的快乐时光不禁又悔又恨——为什么要去玩那个笔仙?!话题一扯到后来接踵而来的怪事,我都故意岔开话题,不愿意回想那恐怖的一幕幕。是的,是不敢。我不再奢望事情有好转,有哪一个星期没有猫也没有什么怪事发生,也不敢奢求突然一天所有事情全部消失不再复来。只要事情不再变得更坏我就很满足了。 
 我仔细想了一下前前后后发生的事情,如果每次出事都是象上两回一样有惊无险,对我们不构成任何实际上的影响的话,那么其实说穿了也没什么大不了的。无非每个星期一个固定时间碰上点怪事,就当每个星期都定时看一部免费的立体恐怖电影好了。偶尔有兴致高的时候我还对磊戏言:“说不定再过几个星期我们都习惯了这种生活,胆子越练越大。”他摇头苦笑。现在回想起来,我不过是在试图安慰欺骗自己而已。

 
事情比我想象来得快得多。 
 又到了整七之数,这是第四个星期五。晚上,磊和媛各用一台电脑上网,我则抱了本小说坐在他们的床上,只是一个字都看不进去。尽管我和磊都口中不提,但我们心知肚明今晚又将是一个难熬之夜。我心不在焉地翻着书页,满脑都是过去几周以来的怪事。笔在纸上画的圆圈,尖叫着的黑猫趴在挡风玻璃上,窗户旁边的白衣女人,跟在磊后面的黑色影子…… 
 心惊肉跳地挨到晚上十点半,一切都很平静正常,暂时没有事情发生。但我知道表面的平静只是假象而已,十点半之后到第二天早上天明之前才是最危险的时间。 
 这时丽来电话,说是今天客人特别多,太累了不想等公车,要我去接她。 
 “怎么办?”我关上电话,把磊从房间里叫出来,避开媛问。他偏头想了一会儿, 
 “去! 反正在家里和开车外出一样都出过事,出不出去已经没什么要紧的了。” 
 “你,去吗?”我迟疑道。尽管只有五分钟车程,但我想到要一个人开车在黑漆漆的夜里不禁有些胆怯。 
 “我想,每一次出事我们都在一起,是不是分开会好一点?”磊盯着我的眼睛说,“我觉得不妨试试,即使情况变得坏,与现在这种情况相比也不见得能坏到哪里去。” 
 我默然颔首,正想随便闲聊几句自己鼓气壮胆,媛推开门出来:“是不是要去接丽啊?好啊好啊我也去。在家里好闷!”她笑着道。不知为什么,我最近越发觉得她的笑容很虚伪,很做作,象是专门笑给人看一样。 
 磊看着我苦笑:“好吧好吧,大家都一起去”他转身回房间去收拾。 
 等了半晌,还不见磊出来,我便推门进去。只见磊坐在断了电的电脑显示屏前,愣愣地盯着显示屏出神。“怎么啦?”我奇道。 
 磊霍然跳起来,回头望着我。他的脸竟然扭曲得我几乎都认不出来!但在我还没来得及惊叫便马上恢复正常,“没什么,走吧。”他侧身经过我,额头上的汗水在灯光下闪闪发亮。 
 我回头,看见媛站在门旁,正睁着好奇的眼睛打量着我们。 
 “还是你来开车。”磊将钥匙扔给我。我明白他的意思,他怕他开着开着鬼上身突然不会开车,要是出了车祸问题就严重了。我尽管开车也出过事,但第一次爆胎时我还有正确的技术处理动作,何况爆胎也不是我的责任。第二次尽管可能是被鬼上了身,但开车还没有忘。 
 一路无话。接到丽后,她只淡淡地跟我说了句谢谢,就坐在后面和媛开始叽叽咕咕。我忽然感到愤愤不平起来。为什么会这样?以前一直是好好的,一直是情浓意蜜、卿卿我我的。怎么会这样?! 
 都是因为那只天杀的猫!我恨恨地想道。 
 如果没有那只猫,那现在该是多么美好的生活呵。 
 就是那只猫! 
 我忽然有种冲动,要杀了那只猫!杀了那只猫,所有事情都可以迎刃而解了。杀了那只猫,所有的一切都将过去,丽就会跟我和好如初的。要是那只黑猫现在就出现我的面前,我一定会毫不手软地杀了它!我想。 
 磊全然没有留意我心情的变化。他还不时地回头跟后面两个女孩子搭两句。为什么?难道我在你的心中连磊的地位也不如吗?我心里这样对丽说道。对!就是那只猫!我要杀了它! 
 那三人忽然爆发出笑声,丽清脆的声音还在笑声中继续,似乎在讲什么趣事。但我连一个字都没有听到。我感到心象是被压在一块滚烫的铁板下,煎熬着。 
 杀了它!一定要杀了它!第一次就因为避开它而爆胎的。我为什么要避开它?如果当时就撞死它,哪里还有后面的事情?要它还敢出现在车前,就开车撞死它好了。要是在车后?就挂倒挡将它碾成肉酱!对,就这么办!我热切地四下搜索着黑猫的踪迹。磊察觉车速放慢了,回头拍拍我的肩,似乎说了一句对就是要开慢点,又回头跟两个女孩子说话。我冷冷一笑,他当然不可能知道我的计划。 
 一直走到家门口的路上,也就是第一天出事爆胎的地方。我有种预感,猫就在那里,在那里等着我! 
 减速,拐弯,打方向盘。果然,那只黑猫出现在路的中央。它蹲坐在地上,两只碧绿的眼睛在车灯下闪烁不定,发出坟场鬼火一样的光。 
 你死期到了!我得意地大叫,一脚猛地将油门踩到底!另外三人齐声发出一声惊呼,我丝毫不加理会,机不可失失不再来。黑猫往右一后窜,躲过了。没那么容易!我迅速地轻点刹车,往有猛打方向盘,又是一脚油门。黑猫向左一窜,回头看了一眼。还敢看! 
 我狂怒了,跟着向左,猫又复向右一窜,往排有大树的人行道奔去。我连忙跟了过去,再一脚狠狠的油门。伴随着发动机“轰”的一声轰鸣,汽车眼看就要追上猫。 
 黑猫疯狂的向前奔跑逃命,但却离我越来越近,我甚至已经闻到压死它后的血的味道,但忽然间它的身体在急速奔跑中不可思议的在空中转了个弯,闪开前面的一棵大树。我却闪避不及了,甚至连刹车都来不及。 
 “砰!”一声巨响,汽车直直地撞在大树上。我的头被一股大力狠狠地甩向前方,鼻子正好撞在方向盘上。顿时,一股钻心的疼痛让我眼皮都抬不起来。我用手摸摸鼻子,鼻子周围麻木得不象还在脸上一样,没有任何感觉。顺着往上摸,还好,鼻梁没变形,只是手马上就被什么东西渗湿了,虚眼一看,是鼻血。 
 磊没什么事,我的鼻子也没有什么大碍,简单包扎一下止住血就好了。汽车竟然也没什么大问题,只是保险杠凹下去一大块。两个女孩子却在闹脖颈痛。我和磊连忙把两个女孩子送去医院,折腾了半天,才诊断出是肌肉拉伤,没什么大问题,休息几天自己就会好的。 
 从医院出来,四人都默默无语。离医院停车场还要步行一段不短的路。我边走边为刚才自己疯狂举动后悔不已,但没有人说话提及刚才的事,也没有人问我那么疯狂的原因。 
 我察觉到似乎每个人都心怀戒心,对我保持一段距离。磊看我的眼神和上一回看我疯狂开车时的眼神一模一样,我张嘴想解释,但他向我使了个眼神,我马上反应过来不能让两个女孩子知道内情。我试着挽丽的手,被她毫不留情地甩开了。 
 路过医院的一处烟囱,一股股白汽从烟囱口慢慢地摇摆晃悠着出来,星光下象一个又一个横空出世的魔鬼。烟囱下的锅炉房在呜呜作响。通过窗户可以看见里面昏暗陈旧的黄色灯光。 
 忽然,一阵奇臭透过包扎的棉布直钻进我鼻孔里,我顿时想作呕,偏偏又觉得这味道在哪里闻到过。我回头看看三人,他们都不约而同地捂住鼻孔快步前行。 
 “你知道这是什么地方吗?”磊忽然开口问我,我略感奇怪,因为他刚刚还给我打了眼色不要说话,看来他已经激动得不能自已,终于忍不住了。 
 我茫然的看着烟囱,想到了什么,但说不出来。 
 “这是焚尸炉,烧病死了的人,”磊尽量用平静的声音说,但他声音随着嘴唇的颤动而颤动,“也烧他们的——衣服!” 
 瞬时间,我反应过来他在说什么了!我也明白我在哪里闻到过这种怪异的臭味——那是从我们的衣服上!焚尸炉里的臭味竟然和我们衣服上的臭味一模一样! 
 那是尸臭! 
 回到车上,丽对坐在驾驶座上的磊说:“麻烦请你送我去一家最近的旅馆。”磊刚想张嘴说点什么,但丽马上回头对头脑一片空白的我说:“对不起,我们分手了。明天我来取我的东西。不过,”她顿了一下,“衣服是用不着了。”她的眼光冰冷如刀。 
 如果说前面发生的事情是有惊无险的话,这回发生的事情就实实在在地影响到了我的现实生活。我相信,前面几次事情并不是有惊无险,而是后来的铺垫。那么这回的事情,会不会是下一回更大的灾难的前奏呢?现在看来,答案无疑是肯定的。 
 丽要媛陪她住旅馆,于是只有我和磊回家过夜。路上我尽量分散自己的注意力,努力不去想丽已经离开我这一事实。于是我开口问磊:“出门前,我看见你坐在电脑前发愣,一脸被吓坏了的样子。你是不是看到了什么东西?” 
 磊既不回答,也不看我,似乎根本就没听见我在说什么,只默默地开着车。我忽然感到一阵恐惧充满了我的心。 
 直到平安到家,熄了火,磊才缓缓开口:“刚才撞车是怎么回事?你好象想要压死那只猫,是吗?你是怎么想的?” 
 我慢慢回忆,将刚才的心理活动告诉他。 
 磊喃喃道:“没想到是这样。看来笔仙跗身还能控制住思维。”他叹了口气:“其实你不讲我也已经猜得八九不离十。刚才我不回答你的问题,是因为我不敢。我是怕我也出什么乱子,要知道我们都是外地来读书的,要是出了车祸连个收尸的都没有。” 
 背后雷山上又传来猫叫声,惨烈凄厉:“喵嗷——喵嗷——”尖锐的声音象是刺穿了我的耳膜,直接磨在我的耳听骨上。我坐在车上一动也不敢动,权当身体不是自己的。 
 待猫声歇过,磊续道:“刚才我关上电脑,从显示屏的反光里,我看见,我背后,”他吞了口唾沫,“站着一个黑衣男人。他……他的脸只能从显示屏上看到一半,他的嘴,在笑。” 
 我看着他,感到背上有点发冷,我将眼光绕向他的背后,却什么也看不到。磊惨然一笑:“所以我执意要你开车。因为我知道鬼已经来了,至少已经上我的身了。我就是害怕我开车出事,想不到你也……不过,有一点,我不是想吓你,但从这几次发生的事情来看,好象你的情况要比我严重些。” 
 那夜我们去超市买了数不清的酒,两人相对大醉一场。

 第二天丽和媛一起回家拿行李。出乎意料的是,丽还带了一个男人来。我痛苦得不能自已,拼命压抑冲上去将哪个趾高气扬的家伙按倒在地的冲动。不料丽的一句话让我哑口无言:“你不要那样看着我,这是媛的新男朋友。” 
 这句话犹如一盆冰水倾头而下,浇熄了我的怒火。但我知道这对磊来说无异于晴天霹雳。我回头看看磊,他的眼神仍然镇定自若一如既往,仿佛一切都在他的预料之中。只是他的脸色稍微苍白了些,不细看根本就看不出来。 
 媛新的男朋友大摇大摆地跟了进来,居然还在各间屋里走来走去象参观一样。我紧跟着他,眼角瞟着磊,只要他给一点点示意我就会马上一脚把这个家伙的腰踢断。但磊始终没有看我,只是冷冷地叉着手,好象整个事情跟他没有任何关系。媛新的男朋友走进卧室,看到床头上的镜子,忽然倒抽一口冷气:“啊?有没搞错啊,你们怎么会把镜子挂在这个地方?这个地方挂镜子可是邪得很啊。一般来说,”他好象想卖弄什么,“这个位置都是挂些吉祥的东西,即使什么也不挂也强过挂镜子。天哪,这间屋也有一扇! 
 咦?还是镶在墙上的!不得了,大凶啊!还不赶快想办法把镜子摘下来!”他以命令的口吻说道,但看到我眼神之后连忙换上一幅笑脸。“不要误会,我没有别的意思,”他讪笑道,“我可是为你们好耶。”又不怀好意地笑道:“再不听我的,说不定会遇见更倒霉的事哦。” 
 磊从后面一把拉住我扬起的拳头,食指点着那家伙的胸口,又向门口一比划,说了一个字:“滚!” 
 一直在一旁收拾行李的媛站了起来,丽扯了她两下,于是两人又埋头收拾行李。磊自回到沙发上,紧锁眉头,盯着墙上的镜子,好象在思考什么。一直到走,两个女孩子始终没有给我们说一句话,象避瘟神一样离我们远远的。磊也坐在沙发上没有再动一下。我注意到,自始自终,他没有看媛一眼。 
 我独自一人送两个女孩子出门,媛瞟了我一眼,提着行李头也不回地走了,边走边扔下一句:“有什么了不起?就是看不惯那家伙一脸万事不惊自以为是的样子……” 
 丽放下行李,回过头来,我才猛然发现原来她的眼圈竟然是红的。 
 “我…走了,”她低着头说,“你自己保重,好好照顾自己…” 
 我想说点什么,却一句话也说不出来。 
 “你,开车当心点,”她顿了一下,续道,“这个房子,我看你们最好还是别住下去了。” 
 我忍不住伸手想摸摸她挂着泪珠的脸,她象忽然惊觉一样偏头避开,提起行李转身离去,匆匆走了几步,又回头最后看了我一眼:“走了,拜拜。” 
 我目送着他们的汽车远去,直到脸上的眼泪自行干了才回屋。 
 磊还是坐在沙发上,好象打算永远这样坐下去。他会感到痛苦吗?我心里不禁疑问。好象那个一声招呼不打就跟别的男人跑了的女人和他没有半点关系。对我来说,尽管丽已离开,但和媛的绝情绝意相比,我心里好过了很多。果然是人不可貌相啊,我心里叹道。眼光扫落,才发现茶几上的烟灰缸不知什么时候满了。 
 从那天以后我和磊两人再也没有去过学校。磊不知从哪里弄来一大堆书,书名全是“易经”、“太极”、“八卦”之类我不大懂的名词。每天从起床到睡觉磊就一直埋头伏案阅读不缀,还做了老大一本笔记。若是渴了他便喝点自来水,饿了就只吃方便面,过着足不出户的生活,我怎么也看不出他有把女朋友另寻新欢的事放在心上。我也足不出户,但我是喝酒,有时边看电视边喝,有时不看电视也喝。天天喝,时时喝,只除开醉 
得不省人事的时候。 
 鼻子被撞之后染上了一个毛病,就是不能遇冷,稍微一遇丁点冷就不停地打喷嚏。不过喝酒可以解决这个毛病。这也是我不停喝酒的原因之一。 
 偶尔我难得有清醒的时候,磊便过来和我搭几句,似乎想跟我讨论一下什么。但他说的大多是他那些书上的东西,我一来基本上听不懂,二来也没有什么兴致去钻研。我只是一心想跟他聊丽和媛的事。两人话题扯不到一块去。最后,他只好苦笑着摇头走开,任由我大醉涂地。我从他的眼神中看出一种东西,那叫作无奈。 
 又到了这一天,这该是第五个星期五吧。下午我故意将自己灌得酊酩大醉。醒来,发现自己竟然躺在客厅的地毯上。磊手里拿着个烟灰缸正坐在我旁边,眉头紧锁地抽着烟。 
 我懵懵懂懂,懒得去管他想干什么,回头看看窗外,天竟然还没有全黑,吓得我连忙伸手又去摸酒,想再醉一场混过今晚。磊却一脚踩在我手背上。 
 “啊——,痛死我了! 你干什么?”我把手缩回来,手背都红了。 
 “今晚有工作要做。”“很重要吗?” 
 “很重要,”他的两只眼睛闪闪发光,“说不定可以救我们俩的命。” 
 救我们俩的命?我打了个哆嗦,难道这一切还不够吗?“难倒我们要死?”我失声问道。 
 “那倒不一定。”磊笑着吐了个烟圈,神情中竟然充满自信。“来,”他拍拍我的肩膀,“坐起来,咱们聊聊。” 
 “聊什么?” 
 他没有立即说话,却又吸了一口烟,吐出来,烟雾在没有风的房间里缭缭升起。天已尽墨,屋外阴森的树影摇摆不定。我又听见风刮过屋顶的呜呜声。他终于开口道: 
 “我们第一次请笔仙到今天已经整整三十五天了。五七三十五,刚好五个星期。” 
 是吗?我记不大清,脑袋还有点沉。只听他又道:“我仔细想了一下这五个星期以来发生的事情。发现了一个模式。” 
 “模式? 什么模式?” 
 “每到星期五,也就是我们请笔仙的那天,就会有怪事发生。一次比一次厉害。七天似乎是一个周期,一个恐怖事件发生的周期。在这七天之间,却绝对的风平浪静,没有任何事情发生。而每一次,在事情的末端,都有黑猫的踪迹。请笔仙是在星期五吧。从那时开始,第一个第七天,星期五,我们见到了黑猫,然后差点翻车;第二个星期五我们迷路了,也见到了黑猫;第三个星期五我们在家,你梦见了鬼,也看见了上我身的鬼, 
 黑猫也出现了;第四个第七天,也就是上个星期五,我看见了我背后的鬼影,你毫无疑问被鬼上身,要杀黑猫。应该说,我们看到的鬼影,一个白衣女鬼和我背后的黑衣男鬼,是我们请笔仙召来的吧。” 
 “是啊,但这我也想到了。” 
 “恩哼。但鬼上身,和那只黑猫又有什么联系?我敢肯定,那只黑猫绝对不是偶然出现的!它一定和这七天一次的劫难有某种现在我还想不到的关联。玩过笔仙的不止你我,我问过一些请过笔仙的人,也在网上留言求助,但所有玩过笔仙的人都只是说遇见一些倒霉事而已,并从来没有想你我这样倒霉法的。不,应该不能说是倒霉,是邪门。” 
 “那些,请过笔仙的人,怎么说?” 
 “没有有用的东西! 从来没人听说过黑猫的事情,以及七天一次的劫数。连那些破书里面也完全没有记载。嘿嘿,也许是我们俩运气最不好,召了两个最邪的、从来没有人遇见过的恶灵。” 
 “那怎么办?” 
 “怎么办? 知道问怎么办就不要再喝酒了!”磊恶狠狠地瞪了我一眼,我脸一红。 
 “还有,”磊续道,“每次黑猫出现,似乎都给我们带来厄运。但奇就奇在每次发生的厄运都似乎在最后时刻,在黑猫出现之后止住!没有给我们带来灾难性的后果。我是说,那种肉体上的灾难性后果。” 
 “比如说呢?”我有些听不大懂了。 
 “比如说,”他盯着我的眼睛,“死!” 
 我心中打了个突结,不敢说话,磊又道:“从头说起吧。第一次黑猫出现时,汽车爆胎,似乎要翻车,但最终没有;第二次迷路,走到那阴森森的黑路上,若一直走下去天知道会走到哪里去,但黑猫出现了,路被莫名其妙断了的大树阻挡了,结果我们反而不可思议的回家了;第三次你做了噩梦,我们听见了厕所里的怪声,黑猫一出来就再无事情发生;上个星期五,我看见了我后面的黑衣男鬼,你中了邪也是不用置疑的,黑猫出现后虽然撞了车,但也再无事情发生。甚至连汽车都没什么大碍。” 
 “你想说什么?”我心里隐隐约约想到了什么,却又说不出来。 
 “我的意思是…唔,怎么说呢? 还记得吗,我们其实搬进来的第一天就听到了猫叫声。” 
 “对,但那种温柔的猫叫声后来就再也没有了。从请笔仙一直到现在,再也没有过。” 
 “对了。问题就出在笔仙上!我相信,如果我们没有请笔仙的话,我们也许还会听到那种温柔的‘咪咪’声,而不是后来的‘喵嗷——’声。我想,第一次听到的猫声和后来的‘喵嗷’声其实都是源自同一只猫,就是后来我们看到的那只黑猫发出的。” 
 “为什么?” 
 “因为一件很奇怪的事情。你有没有印象,我们五个星期前请笔仙那天的天气和今天一 样。” 
 我不明白他为什么提到天气,抬头看看窗外,一片黑暗,没有半点星光。只有风摇晃着模糊昏暗的树的影子,发出的杀杀声和刮过房屋的呜呜声重叠在一起。磊好象说得没 错,第一次请笔仙好象也是这样的天气,月黑风高。“那又怎么样?”我问。 
 磊忽然激动的高声道:“那么大的风,刮得屋响树摇的风,为什么我们听不到风铃声?” 
 一股寒意骤然从我的脚底升起。是啊,为什么没有风铃声呢?难道是…… 
 磊象变魔术一样从身后提起一件物事。风铃!“你从哪里找到的?”我失声惊叫道。 
 “不要紧张,我刚才才从门口取下来的。你仔细看看,这风铃和以前有什么不同?” 
 我将风铃拿在手里仔细端详,只见上面绣迹斑斑。很久没有仔细看了,上面的红褐色的锈迹似乎比以前增加了许多,显得更加的破旧,但没有什么特别之处——不对,似乎少了一样东西。是铃坠!是那个猫型的铃坠! 
 “看见了吧,”磊说道,“铃坠不见了——那个猫样的铃坠。” 
 我仔细地看,铃坠似乎是被什么外力拉断的,但断口已经长了锈,看不出已经断了多长时间。但我清楚地记得搬进来的第一天我看到过那个铃坠,我当时还仔细地端详了下那只小猫的形状。 
 磊将风铃提起来,摇晃一下,长短不一的铃碰撞在一起,也许是锈了的原因,声音有点怪异。“尽管没有铃坠,但风铃仍然应该响,”磊说,“铃坠只是个装饰而已。可奇怪的是自从我们请了笔仙后,铃就再也没有响过,惨烈的猫叫声也开始出现。铃坠,多半就是从我们请笔仙之后不见的。” 
 我呆在那里,半晌说不出一个字来。末了,我问:“那,你说那个铃坠为什么会不见了?它现在又到哪里去了?” 
 磊摇摇头苦笑道:“只怕那个猫样的铃坠,就是我们看到的那只黑猫!” 
 我觉得全身汗毛又立了起来。磊又说:“我想,那只黑猫,或者铃坠,是解决问题的关键。不管怎么样,今天晚上我们来试一下。” 
 “试一下? 怎么试?”我奇道。 
 “想办法将那只猫引出来。” 
 “什么办法?” 
 “等。” 
 “等? 那算个屁的办法!万一它不出来呢?” 
 “不会的。相信我的推论,那只猫一定会在今晚出现。” 
 “然后呢?” 
 “捉住它。” 
 “再然后呢?” 
 磊忽然一笑,无可奈何地一笑:“不知道。走一步是一步,到时候见机行事吧。” 
 然而,那天晚上猫叫声并没有出现。也没有象上几回一样发生一些可怖的事情。我和磊枯一直在客厅的地毯上枯坐着,直到东边的天渐渐开始放光。 
 “怎么会这样呢?”过了四点钟,磊就不停地抽烟,还在屋里镀来镀去,摸着后脑勺自言自语,“难道是什么地方出了岔子?不会的……一定不会的……猫一定会来的……” 
 “算了吧,”我打了个哈欠,早就在打盹了,“没有出事还不好?” 
 “不,事情绝对不会就这么轻易结束的。” 
 “你太紧张了吧,我看事情八成就这样了结了。不要老自己吓自己好不好?”真奇怪,这句话好象是几个星期前他对我说的,现在转了个轮回又原封不动奉还给他了。 
 “不会不会,绝对不会的…” 
 “不理你,我去睡了。”我实在困得不行了,就自回房间睡下,也懒得去理会他还要干什么。 
 梦又来了。 
 梦还是那么纷乱,毫无头绪。丽好象回来了?不是,我和丽还在老家的那个院子里。丽在拉着我的手道歉,她说她再也不离开我了。她的手还是那么凉。咦?怎么是热的?她的手里有热水么?不是,是血!哪里来的血?是猫的血吧?猫不是死了很久了吗?没有,猫还没有死! 
 丽又在杀猫!她用双手死死地扼住猫的脖子,将猫按在水缸里。猫在拼命地扑腾着。猫血从它嘴里渗出来,染红了整缸水!热热的猫血飞溅到了我的身上,还有手上,热热的粘乎乎的感觉,很不舒服。 
 喂!你干什么要杀猫?猫要杀你?胡说八道!停下来!快,听见没有?停下来!猫什么时候变成黑的了?不是白猫吗?白猫你已经杀过了?快停下来不许杀它!你不能再杀了!不许杀! 
 我伸手拉丽,但不知为什么手里没有力气。怎么会使不上劲?力气都到哪里去了?我还是死死的拉住她,手上的血染红了丽白色的裙子。咦?你不是从不穿裙子的吗?不对,你不是丽,你不是丽!你是谁?!快跑!院子怎么没有门?你是谁?你不要过来。你杀了猫了?杀了猫就能杀我了? 
 快跑!怎么跑不出这个院子?迷路了?什么东西粘在手上热乎乎的?是猫!猫只剩一个头了!它在用带血的舌头舔我的手! 
 我猛地睁开眼,发现原来只是场噩梦,不禁长舒一口气。外面天已大亮了,间歇着有鸟儿清脆的鸣叫声和远处汽车经过的声音。这一夜总算过了。 
 不对,空气中的血腥味好重。手上怎么是粘乎乎的,还有点热,是什么东西?我举起手来一看,不禁尖叫出来。 
 是血!还是热的血!但不是我的血,是谁的血呢?难道是磊? 
 我连滚带爬地站了起来缩在墙角边上,赫然发现屋子里血渍到处都是!恐怖的景象让我不敢动弹,只有高声叫了起来:“磊——你在吗——快来啊——磊——”没人回答。没有磊的声音。难道磊不在了? 
 我闭上眼睛,希望这一切都是梦,我还在那个噩梦里没有醒过来。但没有用,刺鼻的血腥味在房间中环绕,浓郁得让我直欲作呕。我睁开眼睛,血渍还在眼前,清晰的殷红血迹刺激着我的每一个视觉细胞。我用嘴大口吸了几口气,迫使自己稍微镇定下来,仔细地看着周围,胃开始抽搐。血迹并不是杂乱得无际可寻。只见斑斑点点殷红的血迹从床上我睡的地方顺着下来,直到脚底,下了床,再在地毯上绕过床脚,弯弯曲曲地直到门口,从虚掩着的门缝里钻出去。 
 我再深呼吸一口,壮了壮自己的胆子,拉开门。血迹一直通到卫生间里,卫生间的门是关着的。血迹是怎么出来的?我的胃抽搐不已。我回头看看磊的房间,门是开着的,里面没人也没有血迹,客厅也是如此。难道磊的尸体在卫生间里面……这个时候想什么都多余了!我咬紧牙关,强忍着胃部的收缩和太阳穴呱呱地跳动,猛地推开卫生间的门。没有磊!我心里稍稍放宽了些。血迹一直往前通到马桶水箱的盖子上里。我蹒跚着走近马桶,马桶里赫然是一桶的血水,刺鼻的血腥味让我再也忍不住了,我“哇”的一声呕了出来。 
 过了良久才稍微缓和下来,大概是胃里没有东西了吧?我虚脱地想道。伸手摸到马桶开关,一按,一大股血水喷了出来!我愣愣地站在哪里,再也不敢动一下,思维也停止了运作,更不可能去想“马桶水箱早就坏了”这个问题。只是愣愣地看着马桶里的血水冲走了我吐的秽物,看着血水打着漩涡,慢慢的平静下来,我可以看见旋转的血水映出自己的脸,飞速转动的血水不断划过我的脸,而我的心脏却越跳越快。 
 马桶水箱盖忽然“砰”的一声自动打开滑落跌在地上。我心里猛地一收缩,胸腔猛然一痛,一股令我窒息的热流从胸口迅速上升到大脑里蔓延开来。但我却没有昏厥过去,只好仍然站在那里不敢动。往水箱里面瞟了一眼,里面赫然浮着黑猫的尸体! 
 黑猫的尸体浮在一缸腥臭无比的鲜红的血水中,我愣愣地看着它,头脑里空白一片。只觉得心脏在疯狂地跳动着。我觉得我快要死了。 
 不知道站在那里有多久,直到有苍蝇飞进来盘旋在黑猫上,我才将看黑猫的眼光收回来,却仍然不敢动一下。于是我重新去看马桶。马桶里的血水已经完全平静,可以很清楚的照出我的脸。我感到心跳还是很快,很口渴。我忽然觉得我每一次眨眼的时间都是如此之长,长得有一个世纪。大概是因为我身上的器官本身开始自我保护,拒绝主动去接受刺激。 
 忽然,在我一眨眼之后,在殷红色的血水中探出了另一个脑袋。一个有长发的脑袋!她在看我!通过血水看我!她还在笑! 
 我想闭上眼睛,但眼珠被一种说不出的压力压着,而且还在不断地瞪大,仿佛要脱眶而出;心脏猛的加速跳动到我无法辨认的程度;两边太阳穴旁的几根血管此起彼伏地交替抽搐着。 
 “醒醒! 醒醒!”我感到有人在拍动我的脸。虚开眼睛,模糊间磊的那张长脸在眼前不停的转动。“醒醒!”我感到我的头枕在他的大腿上。“哈,醒了!吓死我了。来,喝口水。” 
 “我、我在哪里?”喝过水后我清醒了很多,眼前的事物不再打旋。四下张望,原来还是在卫生间里。地下的血迹已经干了,变成红褐色的血斑。头还是昏昏沉沉的。 
 “在家…”磊轻声道。 
 “天啊!”我把头埋在他怀里,嚎啕大哭,“我们究竟犯了什么错?为什么要让我看到这些?为什么要找上我们?!” 
 “没事了,没事了…”他轻轻地拍着我的背。 
 “不就是请笔仙吗? 我以前从来没有请过,不试一下怎么知道是不是真的?你说是不是?你说是不是?”我扯着他的衣领。 
 他不说话,我看见他的嘴角抽搐了几下,勉强挤出一丝笑容,现在回想起来,很苦涩。 
 “你为什么不说话? 你为什么不说话?我知道,你怕刺激我,不说?我帮你说!你是不是要说我们不该玩那个东西?你是不是要说从一开始我们就错了?你是不是要说神可不信但不可不敬……” 
 “没人说那些话,别孩子气了,来,听话…” 
 “不,不要管我,走开,让我说完,我清醒得很…”我想推开他,但力不从心,力量在身体里象油灯枯竭一样慢慢地流逝消失掉。 
 “好了好了,不要多说话,来,进我房间休息一下,”他用一股比我大得多的力量夹住我,把我扶起来,“你不会在茅厕里睡了一天一夜吧? 呵,你真他妈的有够沉的,操,比老子抱过的所有女人加起来还沉。你他妈的是不是该减肥了……”他还说了些什么我再也听不清了。 
 再一次醒来天色已暗,外面斜飘着牛毛细雨。一股冷风透了进来,我冷不丁地打了个喷 
 嚏:“阿嚏——”穿上衣服,出门看见磊盘着脚坐在客厅的地毯上,周围围着一圈他的那些书。看见我出来他冲我一笑:“醒啦?头还昏吗?” 
 “还有点昏,大约是睡得太久了。不然就是感冒了。今天星期几?” 
 “星期天,怎么?” 
 我吓了一跳:“星期天?你敢确定?”“当然!今天下午回来就发现你在厕所里挺尸,还有一大滩子血。我还以为是你的血,吓了我好一大跳。” 
 “慢着慢着,”我掐着指头算着,“今天是星期天,我是星期六早上昏倒的,就是说一共昏了一天一夜还多。难怪会感冒了。恩?你到哪里去了?看到家里出的事了吧?你他妈的怎么看起来挺高兴的?” 
 他收起笑容,点点头,默不作声的点上支烟。末了,他说:“我是想出了一点头绪来。猫的尸体我已经处理掉了,血迹也打扫干净了。来,还是你先说说你遇到的事吧。” 
 我慢慢坐到他身旁,将事情的经过告诉他:“……然后我想我是昏倒了,直到你回来。” 
 “果然,不出所料!”他听完一拍大腿。 
 “什么不出所料?” 
 “猫! 就是那只猫!我操他姥姥的!你看这个。”他从旁边拿起一个没有粘口的信封。我打开一看,里面是十七八块金属碎片。“这是什么?”我奇道。他将烟叼在嘴里,不说话,将碎片全部抖落在地毯上。又随手挑了几个碎片,摆在一起,慢慢地把其它碎片往上凑。还没拼凑完,我已经看出了端倪:“是猫!风铃!风铃的坠子!” 
 “对!”他停下来望着我,“是那个失踪了的风铃坠子。” 
 “昨天凌晨你一进房间睡觉我就听见窗外有猫叫声,叫你两声也不答应。来不及了,我只好一个人出去追赶,一路跑到雷山后面高速路旁的一家小旅馆外才没了踪迹。当时本来想回来,转念一想也好,本来我就说过如果你我两人分开说不定事情会有好转,再加上又困又累,干脆就在旅馆里睡一觉。想着你在睡觉,也懒得给你打电话。后来睡醒想打电话跟你说说,家里却一直没人接电话,手机也关了。我以为是你一个人在家害怕就 
 跑了出去。于是又在那里过了一夜。后来越想越不对,要是你睡醒了见我不在肯定会想办法跟我联系的,我却一直没等到你的电话。于是想着多半出事了连忙往回赶。出来结帐的时候那个门房就说有人留下东西给我,就是这个——”磊一指面前残缺还没拼凑完的猫状风铃坠子,“当时我不知道是什么,但知道情况不妙,忙问门房是谁留给我的……”说到这里磊停了下来,吸了一口烟。 
 “谁…谁给你的…”我意识到了什么。 
 “那个门房说,”磊顿了一下,他的声音透露他内心的恐怖,“那是一个男人和一个女人。男人穿着黑衣,女的穿着白衣。” 
 “从那时起我就确定你肯定出事了,连忙边往回跑边打开信封看,从里面抓出几块大的碎片,光凭外表手感就知道正是我在找的东西。”他拿起一块碎片捏了捏,我看见上面的红锈夹杂着新碎开的裂口,在灯光下返着诡异的光芒。 
 “唉,铃碎了,猫死了。可惜!”他叹了口气,“你其实已经知道是谁杀的它吧?” 
 “你是说…那个,鬼?” 
 “不错,你做的梦已经很清楚地告诉了你一切。是那个,或者那两个鬼杀的。甚至连原因都告诉你了——不杀掉那只黑猫,就无法真正伤害我们!我说过,每次我们出事都在黑猫出现之前,这就意味着每次我们被鬼上身也在黑猫出现之前。黑猫却总是紧要关头及时出现,将一次次的危险化险为夷。从头说起吧,我们请了笔仙之后,风铃就不响了。那其实是在向我们提示危险已经将降临了。铃坠一定是那个时候不见的,黑猫也一定是那个时候出世的。第一次差点翻车一定是它及时阻止的,甚至之前它还坐在将要爆胎的轮胎上面,暗示我们左前胎已经被动了手脚;第二次车灯自行打开熄灭,那时鬼已经坐上了车来,就坐在你我背后只是你我不知道而已,但黑猫却知道。我们迷路走到那条黑路上,一定也是被鬼做了手脚,黑猫却及时出现。它张牙舞爪不是针对你我,而是针对坐在后座上的鬼。后来它跳到前面来,我想要不就是因为要提醒我们俩,要不就是鬼已经上了我们一个,或者两个都被上了身。后来路旁的大树被弄倒,肯定也是黑猫弄的,它是想阻止我们再往死亡的路上走。你后来肯定是被鬼上了身,咯咯咯咯的边开车边笑,到后来却越开越愤怒,但还是开了回来。我想这是一定是因为黑猫把所有的岔路都弄上棵倒树,只剩回家一条生路,那个鬼只好无可奈何开回来。从那时起,鬼就知道要对付我们必须先对付那只黑猫;所有才有第三次,你梦见了鬼,鬼甚至向你现身杀猫,那是在潜意识里给你种下杀猫的意念。后来马桶出现怪声音,同样也是在暗示你杀猫的方法。再后来鬼上了我的身,但黑猫一出现就一切都平安了。我们后来听到的男女对话,想必是他们在争论杀猫的方法;第四次鬼上了你的身,在鬼地诱导下你想开车撞猫,但猫却闪开了攻击,反而诱导你撞树让你清醒过来。这个方法行不通,但鬼却没有善罢甘休,他们准备了第五次的攻击。这一次,他们竟然成功了。” 
 “你是说,那只黑猫,一直在保护我们?”这个说法太离奇了,我一时难以接受。在我的概念中黑猫一直是不祥之物,经历了这几个星期的事后更是对黑猫深恶痛绝,“黑猫,不是象征着厄运吗?” 
 “不是象征着厄运! 它是专门对付恶魔的,当然哪里有它哪里就有厄运,不然还对付个屁。你来看看这个——”磊拿起一本他面前摊开的书,指着其中一段用红笔勾出的话:“玄猫,辟邪之物。易置于南。子孙皆宜。忌易动……”后面的话我便看不懂了。我合上书面,上面写着“明清阴阳风水学说”几个字。 
 “这是我找了一个星期找到的唯一有用的一句话,”磊插话道,“写这段话的人叫陈元镜,清朝道光年间的人。他本人并没有什么见解,自己也承认都是抄书转诉前人的话。你看明白了吗?‘玄猫’就是黑猫,是辟邪用的,后人大概是只从表面现象看,觉得黑猫出现便有厄运发生,便不分青红皂白把一切罪责推在黑猫的头上。‘易置于南’是说养在门口最好,古人把大门都朝南开。‘子孙皆宜’大概是说会一直管用,保护这家房 
 子的主人甚至后代。或者就是说这只黑猫的后代也行。‘忌易动’是说一旦养了就不能动,更不能换主人……” 
 我不耐烦听他掉书袋:“那现在怎么办?现在这只黑猫已经各儿屁了。它倒死得轻巧,把我们搁一边了,我们怎么办?咦?它怎么会死?既然它是辟邪的,鬼怎么杀得了它?” 
 “是啊,这也是我在想的问题。对了,那只猫多半是被溺死的吧?可怎么会出那么多血呢?……那只猫的血怎么会在你手上的?” 
 “也许是被杀害的时候挣扎着跑出来想叫醒我做什么? 说不好……”我胡乱猜道。 
 “唔,也有道理,”磊摸着下巴出了一会儿神,“想不通。还得再查书才行。得去查一点更老的书来看。”他站起身来,又回过头来:“你如果想到了什么,一定要及时告诉我。恩?……易置于南,易置于南……” 
 他都想不到,我怎么能想到?我还没来得及将这话说出口他又自言自语地走开了。于是我端起酒瓶。醉生梦死的生活又开始了。 
 磊继续日以继夜地查他的书。有时还站起身来在房间里走来走去,口中念念有词。大概是上一回查到了点线索给了他鼓励。我经常也一边喝酒,一边坐在他的身边看他翻书。 
 开始他还跟我说两句,我也跟着哼哼两声。过了两天他的书便翻得越来越快,话却越来越少,眉头也越皱越紧。我知道,那意味着他没有找到更多的东西。翻来覆去,还是只有“玄猫,辟邪之物。易置于南。子孙皆宜。忌易动。”这几个字是有用的。问题是现在这句话已经等同狗屁,黑猫死了才知道有什么屁用?我没有将这句话说出来打击他,只是冷着眼喝着酒看他翻书。每次我喝醉醒来后他身旁的书都多出来很多很多。看图章 
大多是图书馆里的。房间里的空酒瓶越来越多,书也越来越多,最后把客厅堆了个遍。 
 后来我和他再没有出门,也没有回卧室一步,两人睡觉吃方便面喝酒查书都在客厅的地毯上,就除了上厕所了。再到后来,他查书骂娘的声音越来越大,我醉得也越来越频繁。 
 有一天——到底是哪天已经记不清了——磊忽然合上书本,说:“那狗日的说得不错,那两面镜子确实有问题。”然后他冲进卧房将两面镜子撬下来又砸得粉碎。镜子碎了还是碎镜子,镜子后面的墙壁和其它地方也没什么两样。他似乎很失望。我一边吹着酒瓶,一边睁着醉眼看他发疯,心里不禁觉得好笑,于是我问他到底是他喝酒了还是我喝酒了?他不理我,又一头扎进他的书里。其实我很理解他的心情。我知道他想凭借自己的努力和那些玄之又玄的书本来解决一切问题,逃离七天一次的劫数。但我觉得那多半不会有什么作用。这些书都是别人编出来卖钱的东西,有什么好值得深究的?写这些文字的人是不是真的遭遇过他们书中所说的事?就象那个陈元镜是不是用黑猫来辟邪?我看不大见得罢。反正都希望不大,又何必庸人自扰?不如痛痛快快先醉一场再说。既然不能永远的脱离苦海,能暂时忘掉一切不是最好的选择么?我看他多半不理解我。 
 我拨了好多次丽的电话,不是关机就是没人接,最后竟然是出现电脑的声音,告诉我这个号码已经注销。媛的手机也是如此。我将这些告诉磊,他完全无动于衷,我知道,他已经完全陷进了他的书里,我问他这些别人编出来骗人的文字值得这么投入么?他居然说我不懂。我懒得去理会那个呆子,不死心又接连拨丽的电话,一直到电脑告诉我预付话费已经用完,不能再拨。于是我只好又醉一场,而且醉得比哪次都厉害。昏昏沉沉地忽然想起那个已经离开我的女人值得我那么投入么?恍惚间觉得自己恐怕呆得跟磊有一比。

终于挨到了第六个七天,这又将是一个黑色的星期五吧。又是一个大醉而醒的晚上,我抬起犯痛的头,看看时钟,还没有到子夜。奇怪,为什么每次到这个日子都不能在喝醉中混过去呢?难道是命中注定?我忽然间发现身边少了点什么东西,哦,是书! 
 卫生间里有什么东西烧着了。我连忙冲进去,发现磊正用打火机把一本书点燃,再等它烧得差不多了之后扔进马桶里。马桶里没有水,只有厚厚的一层灰。 
 “你在干什么?”我奇道。 
 “烧书! 没见到吗?”他好象很生气的样子。 
 “是。确实该烧!该烧!阿、阿嚏——”窗户是开着的,有风灌进来。 
 “他妈的,浪费了我两个星期的时间…”磊喃喃骂道,”…一点屁用也没有…” 
 我跑回客厅,开了瓶酒跑回来递给他。他接着看也不看顺手扔出窗外。 
 “怎么? 不喝就不喝,不早说!浪费!哼,好心没好报,早知道我自己喝……” 
 “你少说两句废话行不行? 没人当你是哑巴。今天都什么时候了还喝酒?” 
 我知道他心情不好,懒得跟他吵。毕竟付出了极大的努力而没有回报不是一件让人很愉快的事情。于是我又跑回客厅开了一瓶酒,席地而坐。不料磊跟着跑了出来,他一把抢过我手中的酒。 
 “干什么?”我怒道,“你不喝还不许别人喝么?你是烧书来发泄,还想利用我来发泄?!” 
 磊微微一愣,道:“唉,懒得跟你说。反正现在你不能喝了!一会儿有事做。等我把那些劳什子烧干净了先,我有话要对你说。”他又匆匆跑回卫生间。 
 有事做?上个星期他好象也是这样说的。不理他,照旧。等他烧完了出来我已经差不多又是两瓶酒下肚。斜眼望去,他正缓缓地镀了进来,脸色大概是因为烤火而变得通红。 
 “说吧,有什么事?”我已经微微带着醺醺之意。 
 “听好了,”他盯着我的眼睛,他的眼睛里放着异样的光,“那些书确实没什么用。但我已经想清楚了一件事。” 
 “什么事?” 
 “那只黑猫是怎么死的。” 
 “鬼杀的。” 
 “不,鬼根本就杀不了它! 它才是专门杀鬼的!” 
 “那是怎么死的?” 
 他冷冷地看着我:“是冤死的,是被陷害死的,死在一个极阴险的阴谋圈套之中!” 
 “什、什么圈套?” 
 他一字一句道:“是你杀了它!” 
 我打了个冷战,酒劲全从全身上下三千六百个毛孔中化作冷汗出来。“你……你胡说,怎么会是我杀的?!” 
 “确实是你杀的。除此之外没有更好的解释了。我终于想通了,”他站在我正前方,呼吸奇怪的急促起来,“刚才你的一句话点醒了我——‘你是利用我来发泄’!我没有利用你,是鬼利用了你。鬼是根本杀不了猫的,但是他们可以通过你,假借你的手来铲除这个障碍!所以鬼挑上了你,利用你做他们杀猫的凶器!从迷路那次以后,鬼就知道了要在黑猫在的时候对付我们前难万难,所以第一次是鬼上了你的身,怂恿你开车压猫。 
 但没有成功。” 
 他看着我,我从他的眼睛里看不到一贯的冷静,而是从未见过的疯狂,心里越发不安起来:“所……所以呢?” 
 “所以,第二次,在梦里,那个女鬼反复几次给你演示杀猫。她是在教你,教你怎样杀猫!他们是有预谋的。记得上个星期的事吗?那天早上我见了猫的踪迹,追赶出去。那女鬼马上了你的身。黑猫察觉情况不对,又回头来找你。但你在鬼的暗示下将它捉住,杀死了。你拿住它的脖子,使它抓不到你,然后将它按进抽水马桶的水箱里,活活将它溺死在水箱里。它在临死时吐出身上所有的血,为的是在你身上留下记号。好让别人知道是谁杀了它!是你杀了它!这就是为什么你的手上沾满了血!这就是为什么马桶水箱里的血一路从地板滴到你的床上,你的手上!”磊的面孔说不出的狰狞恐怖,这不是我认识的磊!他被鬼上身了!我吓得一个字都说不出来,两只手毫无意识地横在脸前,希望挡住咄咄逼人逐渐靠近的“他”。 
 “是你杀的他! 他想尽了办法来保护你,你却亲手杀了这个忠心耿耿的朋友、尽忠职守的卫士!你知道我在说什么吗?恩?”“他”的嗓子变了,变得更粗更低更沙哑,胸膛迅速地起伏不定,并喉咙里发出猫样的“噜噜”声,“悄悄告诉你吧,小朋友。其实你杀错了,你杀的其实是磊!” 
 “啊——”我惊叫起来。 
 “是的,你杀的是磊。磊其实已经死了快一个星期了,”“他”恶狠狠道,“你不是害怕那些血迹是磊的吗?告诉你,那是磊的!我才不是磊这个白痴呢!哼,不要以为你们的这个计划很周密,其实我早就察觉到了!第一次你这个臭婊子想开车撞我的时候我就已经知道了!” 
 “什么…臭婊子?” 
 “还装傻!”他猛地伸出右手,呈爪装抓了我的头一下,顿时我感到头上五道火辣辣的。他的指甲好硬! 
 “臭婊子,很得意是不是? 阴谋得逞了是不是……”“他”连续左右两爪攻击在我的脸上。“你的臭老公呢?死到哪里去了?恩?躲得过我吗?老子一个一个挨个儿收拾!跟我斗?看老子今天怎么弄死你!……”“他”的两只坚硬的“前爪”不停地攻击着我的头,好痛,它的劲好大,我毫无还手之力。我只好在地上打滚,一边躲避它凶猛凌厉的攻击,一边大声呼喊解释:“你搞错了,我是人!我不是那个女鬼!那个现在还没有上我的身……救命啊……我不是有意杀的你……呜呜……我根本就不记得了,呜……”我哭了起来。 
 “怎么? 哈,怕了,不敢承认了?”它的声音渐渐模糊起来,但攻势更加凌厉,“哼,是人?是人更要弄死!敢杀我?今天让你尝一尝被冤死的滋味!”忽然间它仰天咆哮了一声,是那凄厉而惨烈的声音:“喵嗷——”猛地扑在我身上,张开血盆大口,紧紧地咬住我的脖子! 
 “啊——不要啊,我不是——”我惨声嚎叫道,同时感到下身一阵异样,眼泪鼻涕连同屎尿一起流了出来。 
 忽然,压在我身上的“它”松开了。一个冷静而熟悉的声音在我耳边响起:“对不起,吓着你了。”我一愣,抬头一看,那个熟悉的磊又在我面前。他笑着将一卷卫生纸扔到我脚边,又自己点上一支烟:“还不快去厕所把东西清理掉。” 
 “猫…猫呢?”我惊魂未定,四下搜索着。 
 “没有猫。那只黑猫已经死了快一个星期了。” 
 “你…你…” 
 “是我,没有猫。”磊的眼神中没有了刚才的疯狂,取而代之的是一如既往的镇定。 
 “你…你为什么…”我长舒一口气,转而又怒火中烧,“我操你祖宗十八代! 你为什么要这样!” 
 “嘿,怕鬼怕猫不怕人,真怪。我当然会给你一个解释的。不过你得先快去把你裤裆里的东西清理掉,好臭!”磊捂着鼻子连连摇头。 
 “我当然没有变成猫,”待我清理完毕,磊给我端上来一杯热茶,“这都是我装出来的。我不是存心要吓唬你,也不是要检验自己的演技,我只是为了我自身的安全作想而不得不做一个实验。” 
 “实验? 你说这是实验?” 
 “是实验。也是一条计策。因为我害怕被鬼知道我已经察觉到了他们的阴谋——就是那个杀猫的阴谋。我前面说的话都是实话,你的那句话提醒了我——利用!这是个借刀杀猫的毒计!既然可以很顺利地杀猫,杀起人来想必也很好用。所以我不得不防着你点。 
 不过,我想,至少他们到目前为止还没有想到这条计策还可以杀人,于是我干脆来个先下手为强。” 
 “那只猫真是我杀的?” 
 “不是你! 是被鬼上身后成为傀儡的你!你是在睡着了的情况下被上的身,杀的猫,自己全无意识。所以根本就不是你!但我正是害怕这一点,在自己毫无知觉的情况下做出疯狂的事情。所以我这样做的另一个目的是检验你,看你刚才是否有被鬼上身。要知道今天可是非常时期,七天之数,你随时都有可能被鬼上身的。当然,最终结果表明,很 
 显然你还没有被鬼上身。既然你没有被鬼上身就好办了!” 
 “什么好办了?” 
 “因为今天我们确实要扎扎实实地做一件事情。现在还不到时间,你先闭目养神休息一会儿吧。” 
 “什么事情?” 
 “好吧好吧,先给你说了也没什么。你看,”磊一摊手,“我好不容易找出黑猫的根源,结果它却先死了。本来上个星期是我们一次绝好的机会——找到那只黑猫。现在唯一的线索却又断了。这就是我为什么那么生气烧书的原因:一大堆垃圾,没有一个字是有用的。思来想去,我觉得我们现在只剩一条路可走。” 
 “什么路?” 
 “请! 笔!仙!”磊一字一句地说,“再请一次笔仙。” 
 磊毫不理会我声嘶力竭地抗议,有条不紊地关上灯,在正方形的餐桌四个角上点上蜡烛,拿出纸和笔——那是第一次召灵用的笔,一直都遗弃不用了,不知道他从哪里找出来的。 
 “不,打死我也不再玩那种东西…”我把自己闹得筋疲力尽,只能躺在地上哼哼。磊一把抓住我的衣领将我从地上拖起来:“听着!这不是玩,这是救命!救我们自己的命!这是我们现在绝无仅有的机会!想想看,七天又七天,一次比一次可怕。从最开始的有惊无险到鬼逐渐现身,现在连保护我们的黑猫都死了!要象你那样无所作为无疑是在等死!我有预感,再这样无动于衷地拖下去,拖到下一个,也就是第七个七天的时候,你我恐怕都在劫难逃。我们必须要做点什么事,挽回这一切。今天才是第六个星期五,即使这回不成功,我们都还有一个星期的机会!” 
 我无言以对,他的话在理。于是我只好垂头丧气地点头,磊补充道:“一会儿若笔仙来了,你不用说话,就我开口问好了。该问的问题我已经想好了。” 
 “让我,休息一个小时行不行?”我快要虚脱了。 
 “笔仙笔仙请过来,笔仙笔仙请过来…” 
 我们又在餐桌两侧相对而坐,两只重叠的手夹着那只笔。口中念念有词,那该是召灵的咒语。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 很冷,尽管加了件衣服但我还是不住的哆嗦。手是冰凉的,而且还在发抖。但磊温暖而干燥的手让我镇定了些,我看看他,他冲我鼓励的一笑。我忽然有一种将有赴死的悲壮感觉。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 我抛开一切杂念,将注意力放在笔上。笔开始摇晃,在纸上划出一道又一道毫无规则的线段,由短变长,由直变曲。组成一幅又一幅诡异的图案。笔愈发烦躁不安,逐渐变得激动起来。线段越来越长,越来越怪,划动的频率越来越快。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 笔忽然间顿了一下,我心里一抖。只见笔在纸上走了几步,又移到左边,又左右前后毫无规则地乱走了几下。我忽然闻到阴冷的风里夹杂着一种臭味,好象是我们衣服上的味道变浓了。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 在这一瞬间我忽然感到我的左右两侧各出现一个影子!不,不是人的影子!是鬼!我感到脊背上陡然一阵又一阵地渗出汗水。但我口中还是不敢停。“……笔仙笔仙请过来,笔仙笔仙请过来……” 
 我感到心脏在“砰砰”地猛力跳动着,但我不敢抬眼去看,不敢让他们发现我在观察他们,甚至连眼珠动都不敢动一下。我只能用眼角的余光去看。我右边的是个白色的影 
 子,是不是就是跟着我的女鬼?左边那个黑色的影子是不是就是跟着磊的?他们象我和磊一样,在四方形的餐桌两旁相对而坐。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 我口中兀自不停,眼光直愣愣地瞪着面前已经被画得横七竖八的白纸,但继续用余光扫着他们。他们也没有动,只是静静地坐在桌子旁边。凭直觉,我感到他们也在看我们。 
 背上的衣服湿透了。一阵阵的阴风吹到背上,一阵阵的阴冷。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 我感到磊的手竟不知什么时候已经湿透了,我用余光扫了一下磊,他好象也愣愣地瞪着面前的白纸,不敢再乱动。他是不是也看到了这一幕?汗水,从我们俩的手中传到笔上,顺着笔往下滑落了下去。 
 “…笔仙笔仙请过来,笔仙笔仙请过来…” 
 笔不知第几次走向纸的中央,忽然,就在笔尖划过纸中心的一瞬间,我眼角的余光看见左右两旁同时伸出两只手来,同时按在笔上面!不,看不见手,是两个模糊的衣袖的影子!衣袖长过手,吊得老长,里面隐隐有手的形状。左边是一个黑色的影子,右边,则是一个白色的。一股大力从笔上传过来,将所有的不安都压制住。我任由那股力带着我,看来它似乎要在纸上画圈。 
 笔,或者另外两只看不见的手,带着我们俩的手,在纸上画了一个圈。 
 “你是不是缠着我们的鬼?”待圈画好后,磊发声问道。他的声音有压抑不住的激动。 
 笔向我的右边移了几寸,又画了一个圈。画完后斜斜地向左移去。我又感到胃在抽搐,太阳穴的血管在勃勃地跳动。 
 “这几个星期以来我们遇见的怪事是不是你造成的?” 
 笔竟自在原地,慢慢地转了一个圈。 
 我的心跳急剧加速,磊和我的呼吸声频繁地交替,但我头脑里仍然是一片混乱。我想只有象磊那样冷静的人才可能在这种时候还能问出问题来。 
 “你,或者你们,是不是有两个?” 
 笔忽然快速地向我的方向推来,吓了我一大跳。但很快又接着向磊的方向移过去,接着又移回中间,画了一个小小的圈。那意思是不是说,一个跟着我,一个跟着磊?只听磊加紧问道: 
 “我是不是已经看见你们了?” 
 我心中咯噔一声,心想这个问题也太冒失了吧?眼角的余光瞟去,果然,已经看不见任何影子,不管是在搭在笔上的袖子还是坐在两侧的人影都不见了。完完全全彻彻底底地看不见了。笔仙走了么?没等我有任何反应,笔又在纸上画了个圈,接着又很急速地斜斜地左右连画几条线段,组成一个硕大的叉!那表示愤怒吗? 
 “对不起。我不是有意的,”磊的声音很疲惫,“但我还想再问一个问题,希望你们能回答:你们是不是要我们死?” 
 我心里陡然一惊:要是笔画一个圈出来怎么办?我死死地盯住笔,笔不停地在纸上游动着,而且越走越快。我用余光瞟了一眼磊,也许,他在赌最后一把吧。屋里静得可怕,连门外的风似乎也已经停了,凝听这最后的答案。在一片死寂中,只有笔磨在纸上的杀杀声,还有就是我和磊沉重的呼吸声。 
 但愿不要画圈,千万不要是圈,我祈祷着。忽然间又是一阵冷风刮了进来,我的背脊在发凉。 
 笔忽然停住了,开始往我的方向移动,是弧线。 
 我的心沉了下去。 
 就在这时候,我的鼻子忽然发痒,很痒。毛病又犯了!我极力忍住。 
 “阿嚏——”我还是打了个喷嚏。手一抖,松开了笔。 
 磊马上抓住我的手,按在笔上。我连忙醒悟过来,重新摆好姿势。 
 但刚才那股巨大的力量却已经不见了,就象笔仙到来之前一样,只有我和磊的手的力量。笔在纸上乱走乱画,象是找不到了感觉。磊不甘心,又重复了刚才的问题,没有任何回应。接着他又问了几个其他问题,“我们可不可以不死?”,“是不是要满足你们的条件?”,又换我问了“我会不会和丽和好”之类的几个问题,都没有回应。 
 笔仙就这样走了,第二次召灵就这样草草结束,只是在我们生死攸关的问题上,留下一个不明确的答案。 
 “你们是不是要我们死?” 
 一段弧线,四分之一圆圈,就是最后的答案。 
 
 磊打开灯,回过头来直瞪着我看,看得我心里发毛。忽然,他“噗嗤”一声笑了出来。 
 “嘿嘿嘿嘿…”他一笑就止不住。一边笑,一边还猛拍桌子,最后干脆蹲下去捂着肚 
 子笑。受他的感染,我也笑了起来:“哈哈哈哈……” 
 “哈哈哈哈…”“嘿嘿嘿嘿…” 
 两人的笑声交织重叠在一起,仿佛遇上了什么非常有趣的事情,蛮有兴致的样子。 
 “嘿嘿嘿嘿…”“哈哈哈哈…”我们躺在地上,对着天花板放肆地笑着。一边笑还 
 一边倦缩着身子打滚,象两个疯子一样。当然,我知道我们都没有疯。我也知道我们为 
 什么笑,只不过和高兴,扯不上什么关系。 
 那是我生平第一次懂得,原来悲哀和绝望,也可以用笑声来表达。 
 待到两人都喘不过气来,笑声才间歇。磊一边抹笑出来的眼泪一边道:“他妈的……嘿嘿嘿嘿……忙了大半天,就、就得了个喷嚏……” 
 “…哈哈哈哈…我,我就他妈该死,这种时候居然还能、能打出喷嚏来…哈哈哈…” 
 “不、嘿嘿嘿嘿、不管你的事,我只想,嘿嘿,看看、那两个鬼的表情…你刚才也看到他们了吧,嘿嘿嘿嘿…” 
 “不错…哈哈哈哈,居然能被喷嚏吓跑…哈哈哈哈…操,那我们还在怕什么…哈哈…” 
 “对、对,还怕个球! 哈哈哈哈……老子也去撞一下墙……好、好也染上打喷嚏的毛病,嘿嘿嘿嘿……” 
 在无奈的大笑声和到达极限的恐惧中,我们相对而醉。 
 朦胧间似乎是磊在摇我,他好象在说什么:“我有重要的事情跟你商量……”但我困极了,没有理他,翻了个身又睡着了。 
 一觉醒来,天已接近黄昏。我抬着昏沉沉地头四下张望,发现磊竟然不知去向。我心里忐忑不安,以为又有什么恐怖的事情发生,但好在及时发现了一张放在我手边的纸:“我不得不出去一趟,本来想叫上你的,但你睡着了。我发现几条很重要的线索,不能再等了。第一还是风铃。记得那句话吗?‘易置于南’!这是说黑猫要养在房屋大门口。而我们的大门口,正是这个有猫型坠子的风铃挂的地方!很明显,这个风铃已经没用了,我刚将它扔进楼下的垃圾桶里。但问题是这个风铃最初是怎么挂上去的?是谁挂上去的?这个挂风铃的人,我推测一定也是个懂风水的人。他一定发现这个地方有点异样,才挂上这个猫状的风铃用来辟邪。也许找到他,就能找到解决问题的办法。刚才我打了几个电话,向房产中介查询屋主的联系方式,现在我就去找那个房东,也许就是他挂的风铃人吧,不然就是以前的房客。 
 第二条线索是刚才网上一个网友给的提示。他问我,那天我们请了笔仙之后,有没有把笔仙送走?瞬时间,我如醍醐灌顶般反应过来。对啊,我们没有把笔仙请走啊。记得媛说过的话吗?‘完了以后要记得把笔仙请走’我们连续两次都是只请来不请走啊。所以我想我们不得不再请一次,将两个笔仙请走。 
 第三条线索我还没有想通,是件很蹊跷的事情。你还记不记得当初第一次请笔仙的那天,到底是谁最先提议的?我怎么也想不起来,真是奇怪。不过那绝对不是我自己,也不是你,但似乎又是一个男人的声音,你觉得呢? 
 我现在就按着这三条线索一个一个的去解决,先去房东那里问问。我想我会很快回来的,途中我也会给你打电话。如果我十个小时之内既没有回来也没有给你电话,说明我肯定出事了。这对你有一个好处,就是恶魔不能再用他们借刀杀人的计策来对付你了。 
 你如果你一个人在家害怕的话可以去旅馆住住。但我建议你最好不要去找朋友,去朋友家过夜,那样会连累他们的。丽和媛就是先例了。 
 如果我真的出事了,说明不管到哪里都不安全。所以我还是建议你不妨这个星期都待在家里。反正家里有足够的方便面和啤酒。若有什么新的情况或线索,一定不要害怕。如果我不在了,你就更不能象以前那样自暴自弃,要振作起来!你不比我苯,只要你努力保持冷静,勇敢面对,就一定能找出事情的解决办法来。毕竟,离我预测的七七四十九天大限还有整整一个星期的时间。千万不要放弃! 
 那天你半昏迷中说的话不错。鬼神,可不信,不可不敬!那些书差不多每本开篇都有这句话。我们太狂妄了,想着去玩一玩,还想顺便吓唬女孩子,嘿嘿。回头想想,当初是因为生活平淡而寻找刺激,要玩请笔仙,结果怎么样?足够的刺激了吧?简直刺激到老家了!不管鬼是不是真的,心里存一份尊敬总是好的,万万不该心存戏弄玩耍。忘记了尊重别人,也就是不尊重自己。你我走到今天这步,经受的这一切,都是在为自己的年 
 少轻狂而付出代价! 
 磊 
 七点五十分 晨” 
七点五十分,我看看钟,现在是晚上六点二十五,早已过了十个小时的时间了!我连忙拨他的手机,是关机的。磊真的出事了?我不敢再想下去,也没有勇气在黑暗即将到来的时候出去打听他的下落。我将他那篇长长的留言读了一遍又一遍,不停地读。因为,我害怕地想到,那也许是他最后的遗言。我仔细地看着他留下的三条线索,努力地思考着每一点可疑的地方。那个风铃是谁挂上去的呢?是房东?还是以前住的房客?磊去找房东会出什么事呢?也许,是因为我们住的这所房子以前出过事故? 
 是了,我们住的房子以前是个度假村!一定是因为出过什么骇人听闻的事情,所以生意直线下降,才不得不对外招租的! 
 出的是什么事?是死了两个人吗?一男一女吗?我不敢再想下去。 
 我们确实忘了请笔仙走!也许,这是个致命的大错吧。我仍然记得媛说“完了记得要把笔仙请走”时的神情。但第一次我和磊都太错愕了,因为面对一件自己根本就不相信会发生的事情,脑袋不可能会想得那么周全,即使是冷静如磊也不可能,更不用说我了。 
 第二次我们却因为我的一个喷嚏将笔仙打断惊走,根本连问题都没来得及问完。如果磊再也不能回来,是不是我就永远不能再脱身了?这个错是不是已经无法挽回了?那天第一次请笔仙之前,到底是谁提议的呢?“来请笔仙吧!”那句话是这样说的,但是谁说的呢?绝对不是我,也不是磊。因为我们连怎么请都不知道,只是听说过而已。 
 那声音似乎也不是女孩子的声音?不,应该说,很难说到底有没有声音。“来请笔仙吧!”那声音充满了诱惑。 
 也许,是一句在我们心里的话,实际上并没有发出声音来。 
 我有种将想到的一切告诉磊的冲动,才猛然想起磊已经不在了。而且,也许是永远的不在了。 
 忽然间我后悔起来,后悔自己的醉生梦死,自暴自弃。要是一直和磊两人一起努力,不见得就没有办法解决这纠缠在我们身边的恶魔。想到磊一次次厄运下仍然镇定和自信的眼光,想到他一个星期又一个星期竭尽全力想方设法,再想到他看到我时每一眼无奈苦涩的笑容,我忽然感到一阵钻心的痛。我好恨我自己!这种感觉,甚至在丽离开我时我都没有过。现在我才明白这个朋友对我的重要,可惜,晚了。 
 也许,我真的该死! 
 爸,妈。现在是第七个星期五,离我们第一次请笔仙整整七七四十九天。如果磊的预测没有错的话,今天晚上,一切都将有个结局。如果有什么不幸的后果,那么,爸妈,请你们原谅我这个不肖的儿子,你们二位自己好好珍重吧。这个星期我没有出门一步,也没有再喝一口酒。我反复将磊留给我的那张纸读了无数遍,直到现在我能背得为止。我也虔诚地遵守着他说的每一句话,和给我的每一点建议。我用这个星期以来的六天时间写下了这篇长长的家书,告诉你们在我身上发生的事情。 
 这个星期以来,我每天都拨磊的手机数十次,每次都是关机状态。但我现在依然不死心,我热切地盼望着他能忽然推门而入,用那种自信冷静的眼光瞪我两眼,再调侃两句玩笑。是的,我做梦都在等着着一刻的到来。这种感觉甚至比我思念丽还要重得多。这种感觉,甚至抵消了我心中的恐惧。 
 是的,我现在已经感受不到恐惧了。 
 阴风又来了。带着血腥味的阴风慢慢地潜入了房间,团团围在我的周围,我觉得自己的双手和死人一样冰凉,和那天我抱着的那个女鬼一样的冰凉。一股股死亡的味道在房间弥漫开来,那是尸臭。不过现在我却不觉得臭了,因为那是我熟悉的味道,是焚尸炉里的味道,也和我衣服上的味道一模一样。不,那就是从我衣服上发出的吧。我将手放在鼻前一嗅,原来我身上现在也有这种味道了。 
 屋外又在刮着大风,刮得大树杀杀颤抖,刮得房屋呜呜伸咛。门口的风铃声又响了。磊曾说他扔垃圾桶的,但不知哪一天,它又忽然自动出现了。风铃在尖锐狰狞地笑着,喏喏,听,声音是这样的:“咯咯咯……” 
 窗户“砰”的一声自动打开了,半透明的窗帘随着刮进来的大风狂乱地飞舞着,我看见有两个身影在窗帘后面晃动。一个粗壮,一个苗条,那是一男一女吧。他们在朝我慢慢地走来。 
 门吱呀一声打开了。风更大了。带着腥味的风贯穿着整个房间。 
 磊缓步走了进来,正象我期盼地一样,他看着我笑了。我也笑了。因为我看见他的脸上呈现出一种我好久没有见到的表情,那是轻松,那是解脱。磊向我努努嘴。哦,是的,他在叫我把这封信快快写完。是的,该完了,该结束了。 
 那么,就到此为止吧。 
此致
 
 
 敬礼