Welcome to jaever.com/diary

php中文分词的全文检索之配置文件实例

这里,使用了“主索引”+“增量索引”合并的模式。
source picmain
{
        ... ....

        sql_query_pre                   = SET NAMES utf8
    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(aid) FROM pictures
        sql_query                               = \
                SELECT aid, aname, atags, UNIX_TIMESTAMP(ctime) AS date_added, atype, nid,ntitle \
                FROM pictures WHERE aid <= ( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
        sql_attr_uint                   = nid
        sql_attr_timestamp              = date_added
        sql_ranged_throttle     = 0
        sql_query_info          = SELECT * FROM pictures WHERE aid=$id
}

source picdelta : picmain
{
    sql_query_pre =
    sql_query = SELECT aid, aname, atags, UNIX_TIMESTAMP(ctime) AS date_added, atype, nid,ntitle \
                FROM pictures WHERE aid > ( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

#search content
source contentmain
{
      ... ....
    sql_query_pre                   = SET NAMES utf8
    sql_query_pre = REPLACE INTO sph_counter SELECT 2, MAX(id) FROM articles
        sql_query = SELECT id,title,tags,body,created_on,type,created_by,summary,site_id FROM articles \
                          WHERE state=2 AND id <= ( SELECT max_doc_id FROM sph_counter WHERE counter_id=2 )
        sql_attr_uint                   = site_id
        sql_attr_timestamp              = created_on
        sql_ranged_throttle     = 0
        sql_query_info          = SELECT * FROM articles WHERE id=$id
}

source contentdelta : contentmain
{
    sql_query_pre =
    sql_query = SELECT id,title,tags,body,created_on,type,created_by,summary,site_id FROM articles \
                          WHERE state=2 AND id > ( SELECT max_doc_id FROM sph_counter WHERE counter_id=2 )
}
# local index picture
index picmain
{
        source                  = picmain
        path                    = /path/to/sphinx/var/data/picmain
        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        min_word_len            = 2
        charset_type            = zh_cn.utf-8
        charset_dictpath = /path/to/dict

        html_strip                              = 1
        html_remove_elements    = style, script
        preopen                         = 1
}

index picdelta : picmain
{
    source = picdelta
    path = /path/to/sphinx/var/data/picdelta
}
#index content
index contentmain
{
        source                  = contentmain
        path                    = /path/to/sphinx/var/data/contentmain
        docinfo                 = extern
        mlock                   = 0
        morphology              = none
        min_word_len            = 2
        charset_type            = zh_cn.utf-8
        charset_dictpath =/path/to/dict

        html_strip                              = 1
        html_remove_elements    = style, script
        preopen                         = 1
}
index contentdelta : contentmain
{
    source = contentdelta
    path = /path/to/sphinx/var/data/contentdelta
}
indexer
{
        # memory limit, in bytes, kiloytes (16384K) or megabytes (256M)
        # optional, default is 32M, max is 2047M, recommended is 256M to 1024M
        mem_limit                       = 64M
}
searchd
{
        port                            = 3312
        log                                     = /path/to/sphinx/var/log/searchd.log
        query_log                       = /path/to/sphinx/var/log/query.log
        read_timeout            = 5
        max_children            = 30
        pid_file                        = /path/to/sphinx/var/log/searchd.pid
        max_matches                     = 1000
        seamless_rotate         = 1
        preopen_indexes         = 0
        unlink_old                      = 1
}

CONTINUE
INFO: 2008-07-03 15:59:06 | purpen | digg | link

php中文分词的全文检索之配置过程

在上一篇http://www.jaever.com/diary/7/的安装过程成功了,就开始 配置吧:)

因为要进行中文分词,所以就要构造词典:

(为了使用方面,可以添加到全局变量中:path=$HOME/mmseg/bin:$HOME/mmseg/sphinx/bin:$PATH:$HOME/bin
 export path
)

 mmseg -u /path/to/unigram.txt

该命令执行后,将会产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt 必须为UTF-8编码。然后, uni.lib移到可以便于访问的目录(我的:/home/someone/dict/uni.lib)

接着,开始copy一份 sphinx/etc/sphinx.conf.dist为sphinx/etc/sphinx.conf,按照配置文件的注释,修改sphinx.conf对应的属性,但为了中文的支持,与注意以下的:

....

charset_dictpath = /Users/tian/Dict/lib
charset_type            = zh_cn.utf-8

....

应该注释掉:

#ngram_len = 1

#ngram_chars =  

# charset_table         = 0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF....

保存sphinx.conf,执行indexer --config /path/to/sphinx/etc/sphinx.conf somesource(or all 创建全部索引),然后,执行命令search test测试看看是不是ok?

当然,sphinx也提供了php,python,java,rails等API,来使用多语言的应用。目前,我还只有使用php测试过(http://app.chinavisual.com/app/site/seek/search_design可以试用了),不久,准备在jaever上测试python的试用。呵呵,加油!

CONTINUE
INFO: 2008-07-03 15:08:01 | purpen | digg | link

有几天没有继续开发了,开始为日志增加评论功能

有几天没有继续开发了,开始为日志增加评论功能,继续赶活了。。。

CONTINUE
INFO: 2008-07-03 14:55:29 | purpen | digg | link

Google推出广告联盟,整合DoubleClick

Google今天宣布,将原DoubleClick旗下的Performics广告联盟整合入Google产品线,更名为Google Affiliate Network。 Google于今年3月以31亿美元的价格收购了DoubleClick。新上线的Google广告联盟并未整合进Adsense,而是继续运行在 ConnectCommerce.com这个域名上。更有趣的是,Google仅仅为这个产品做了一个新的登录页面,点击登录后,还是会把访问者带到旧的 Performics网站上。 Google显然是想借此同时扩展广告提供商和广告展示商两个方面,Google广告联盟很可能日后会被整合进Adsense。在整合收购对象方面, Google的动作向来都不怎么迅速,想想GrandCentral和Jaiku就知道了。

CONTINUE
INFO: 2008-07-02 04:34:04 | purpen | digg | link

php实现sphinx+libmmseg中文分词的全文检索之安装过程

读了robbin写的Rails的sphinx全文搜索实现,于是想尝试使用php来玩玩看。

讲到sphinx,肯定的介绍一下sphinx的优势了:

Sphinx的主要功能包括:

  • 高速建立索引(可达10 MB/秒)
    • (本人初次创建索引的速度:collected 37594 docs, 104.0 MB
      sorted 19.9 Mhits, 100.0% done
      total 37594 docs, 103965976 bytes
      total 45.268 sec, 2296662.25 bytes/sec, 830.47 docs/sec)
  • 高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)(实现一些中小型的网站搜索,已经足够用的了)
  • 高扩展性(在单一CPU上,实测最高可对100GB的文本建立索引,单一索引可包括100M文件 )
  • 支持分布式检索
  •  
  • 支持基于短语和基于统计的复合结果排序机制
  • 支持任意数量的文件字段(数值属性或全文检索属性)
  •  
  • 支持不同的搜索模式( “完全匹配” , “短语匹配”和“任一匹配” )
  • 支持作为Mysql的存储引擎

 

从功能上看,sphinx很是适合我来使用,呵呵。

开始从实践中体验sphinx的优势吧,ok,安装

(我在mac os x 10.4与redhat 5上都有安装过,不过,每次都不是很顺利,而且遇到的问题都不尽相同,还好最后都找到解决的办法。)

 

这里介绍在redhat 5下编译的步骤:

1。下载需要的软件包 :

    从这里http://www.sphinxsearch.com/downloads.html下载Sphinx 0.9.8 rc2版:
http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz

    但是,为了使用libmmseg支持中文分词,还需要下载两个补丁: 
    http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch
    http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch

   注意:补丁是针对特定的Sphinx版本的,若版本不匹配会更麻烦。所以最简单的方法是直接使用李沫南已经打好补丁的Coreseek包,和自己打补丁的效果是一样的:
http://www.coreseek.com/uploads/sources/coreseek_fulltext_2.5.tar.gz

   下载libmmseg:
http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz

2。因为sphinx的编译需要--with-mmseg的支持,所以首先编译libmmseg:

    tar zxvf mmseg-0.7.3.tar.gz
     cd mmseg-0.7.3
     ./configure --prefix=/home/someone/mmseg
     make
     make install

     然后:

     tar zxvf sphinx-0.9.8-rc2.tar.gz
     cd sphinx-0.9.8-rc2

     为sphinx打补丁:
     patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
     patch -p1 < ../fix-crash-in-excerpts.patch

      ./configure --prefix=/home/someone/sphinx --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib/ --with-mmseg-includes=/home/someone/mmseg/include/mmseg/ --with-mmseg-libs=/home/someone/mmseg/lib/

       make & make install

 

      (这里是我的参数配置,--with-mysql --with-libmmseg是必须的,编译中遇到很多问题,但是,大部分都是由于mysql的版本与libmysqlclient.so文件导致的,所以要注意下。)

     ok,所需的软件包安装完毕了,开始修改配置文件sphinx.conf与创建索引词典吧。

CONTINUE
INFO: 2008-07-01 14:26:08 | purpen | digg | link

Linux压缩打包命令使用方法之compress 命令

[root@linux ~]# compress [-dcr] 文件或目录
参数:
-d :用来解压缩的参数
-r :可以连同目录下的文件也同时给予压缩呢!
-c :将压缩资料输出成为 standard output (输出到萤幕)
范例:
范例一:将 /etc/man.config 複制到 /tmp ,并加以压缩
[root@linux ~]# cd /tmp
[root@linux tmp]# cp /etc/man.config .
[root@linux tmp]# compress man.config
[root@linux tmp]# ls -l
-rw-r--r-- 1 root root 2605 Jul 27 11:43 man.config.Z

范例二:将刚刚的压缩档解开
[root@linux tmp]# compress -d man.config.Z

范例三:将 man.config 压缩成另外一个文件来备份
[root@linux tmp]# compress -c man.config > man.config.back.Z
[root@linux tmp]# ll man.config*
-rw-r--r-- 1 root root 4506 Jul 27 11:43 man.config
-rw-r--r-- 1 root root 2605 Jul 27 11:46 man.config.back.Z
# 这个 -c 的参数比较有趣!他会将压缩过程的资料输出到萤幕上,而不是写入成为
# file.Z 文件。所以,我们可以透过资料流重导向的方法将资料输出成为另一个档名。
# 关於资料流重导向,我们会在 bash shell 当中详细谈论的啦!
dd 命令
[root@linux ~]# dd if="input_file" of="outptu_file" bs="block_size" \
count="number"
参数:
if :就是 input file 啰~也可以是装置喔!
of :就是 output file 喔~也可以是装置;
bs :规划的一个 block 的大小,如果没有设定时,预设是 512 bytes
count:多少个 bs 的意思。
范例:

范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中
[root@linux ~]# dd if=/etc/passwd of=/tmp/passwd.back
3+1 records in
3+1 records out
[root@linux ~]# ll /etc/passwd /tmp/passwd.back
-rw-r--r-- 1 root root 1746 Aug 25 14:16 /etc/passwd
-rw-r--r-- 1 root root 1746 Aug 29 16:57 /tmp/passwd.back
# 仔细的看一下,我的 /etc/passwd 文件大小为 1746 bytes,因为我没有设定 bs ,
# 所以预设是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的
# 512 bytes,以及未满 512 bytes 的另一个 block 的意思啦!
# 事实上,感觉好像是 cp 这个指令啦~

范例二:备份 /dev/hda 的 MBR
[root@linux ~]# dd if=/dev/hda of=/tmp/mbr.back bs=512 count=1
1+0 records in
1+0 records out
# 这就得好好瞭解一下啰~我们知道整颗硬盘的 MBR 为 512 bytes,
# 就是放在硬盘的第一个 sector 啦,因此,我可以利用这个方式来将
# MBR 内的所有资料都纪录下来,真的很厉害吧! ^_^

范例三:将整个 /dev/hda1 partition 备份下来。
[root@linux ~]# dd if=/dev/hda1 of=/some/path/filenaem
# 这个指令很厉害啊!将整个 partition 的内容全部备份下来~
# 后面接的 of 必须要不是在 /dev/hda1 的目录内啊~否则,怎么读也读不完~
# 这个动作是很有效用的,如果改天你必须要完整的将整个 partition 的内容填回去,
# 则可以利用 dd if=/some/file of=/dev/hda1 来将资料写入到硬盘当中。
# 如果想要整个硬盘备份的话,就类似 Norton 的 ghost 软体一般,
# 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害!
cpio 命令
[root@linux ~]# cpio -covB > [file|device] <==备份
[root@linux ~]# cpio -icduv < [file|device] <==还原
参数:
-o :将资料 copy 输出到文件或装置上
-i :将资料自文件或装置 copy 出来系统当中
-t :查看 cpio 建立的文件或装置的内容
-c :一种较新的 portable format 方式储存
-v :让储存的过程中文件名称可以在萤幕上显示
-B :让预设的 Blocks 可以增加至 5120 bytes ,预设是 512 bytes !
这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念)
-d :自动建立目录!由於 cpio 的内容可能不是在同一个目录内,
如此的话在反备份的过程会有问题! 这个时候加上 -d 的话,
就可以自动的将需要的目录建立起来了!
-u :自动的将较新的文件覆盖较旧的文件!
范例:
范例一:将所有系统上的资料通通写入磁带机内!
[root@linux ~]# find / -print | cpio -covB > /dev/st0
# 一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!

范例二:检查磁带机上面有什么文件?
[root@linux ~]# cpio -icdvt < /dev/st0
[root@linux ~]# cpio -icdvt < /dev/st0 > /tmp/content
# 第一个动作当中,会将磁带机内的档名列出到萤幕上面,而我们可以透过第二个动作,
# 将所有的档名通通纪录到 /tmp/content 文件去!

范例三:将磁带上的资料还原回来~
[root@linux ~]# cpio -icduv < /dev/st0
# 一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!

范例四:将 /etc 底下的所有『文件』都备份到 /root/etc.cpio 中!
[root@linux ~]# find /etc -type f | cpio -o > /root/etc.cpio
# 这样就能够备份啰~您也可以将资料以 cpio -i < /root/etc.cpio
# 来将资料捉出来!!!!

CONTINUE
INFO: 2008-06-29 13:27:00 | purpen | digg | link

Linux压缩打包命令使用方法之bzip2, bzcat 命令

[root@linux ~]# bzip2 [-cdz] 档名
[root@linux ~]# bzcat 档名.bz2
参数:
-c :将压缩的过程产生的资料输出到萤幕上!
-d :解压缩的参数
-z :压缩的参数
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
范例:
范例一:将刚刚的 /tmp/man.config 以 bzip2 压缩
[root@linux tmp]# bzip2 -z man.config
# 此时 man.config 会变成 man.config.bz2 !

范例二:将范例一的文件内容读出来!
[root@linux tmp]# bzcat man.config.bz2
# 此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容!!

范例三:将范例一的文件解压缩
[root@linux tmp]# bzip2 -d man.config.bz2

范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[root@linux tmp]# bzip2 -9 -c man.config > man.config.bz2

CONTINUE
INFO: 2008-06-29 13:26:08 | purpen | digg | link

Linux压缩打包命令使用方法之gzip, zcat 命令

[root@linux ~]# gzip [-cdt#] 档名
[root@linux ~]# zcat 档名.gz
参数:
-c :将压缩的资料输出到萤幕上,可透过资料流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩档的一致性~看看文件有无错误;
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~
范例:
范例一:将 /etc/man.config 複制到 /tmp ,并且以 gzip 压缩
[root@linux ~]# cd /tmp
[root@linux tmp]# cp /etc/man.config .
[root@linux tmp]# gzip man.config
# 此时 man.config 会变成 man.config.gz !

范例二:将范例一的文件内容读出来!
[root@linux tmp]# zcat man.config.gz
# 此时萤幕上会显示 man.config.gz 解压缩之后的文件内容!!

范例三:将范例一的文件解压缩
[root@linux tmp]# gzip -d man.config.gz

范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[root@linux tmp]# gzip -9 -c man.config > man.config.gz

CONTINUE
INFO: 2008-06-29 13:24:53 | purpen | digg | link

Linux压缩打包命令使用方法之tar命令

tar命令

[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/' from member names』那是关於绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N '2005/06/01' -zcvf home.tar.gz /home

范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -

# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰

CONTINUE
INFO: 2008-06-25 04:33:40 | purpen | digg | link

功夫熊猫经典台词:从来没有什么意外

1.往往在逃避命运的路上,却与之不期而遇。
One meets its destiny on the road he takes to avoid it.

2.你的思想就如同水,我的朋友,当水波摇曳时,很难看清,不过当它平静下来,答案就清澈见底了。
Your mind is like this water, my friend, when it is agitated, it becomes difficult to see, but if you allow it to settle, the answer becomes clear.

3.退出,不退出。做面条,不做面条。
Quit don't quit. Noodles don't noodles.

4.昨天是历史,明天是谜团,只有今天是天赐的礼物。
Yesterday is history, tomorrow is a mystery, but today is a gift, that is why it's called the present (the gift).

5.从来没有什么意外。
There are no accidents.

6.师傅:但有些事情我们可以控制,我可以控制果实何时坠落,我还可以控制在何处播种。
But there are things we can control, I can control when the fruit will fall, ... And I can control what time to seed.

7.乌龟:是啊 不过无论你做了什么,那个种子还是会长成桃树,你可能想要苹果或桔子,可你只能得到桃子,那个种子还是会长成桃树。
Yes, but no matter what you do, that seed will grow to be a peach tree, you may wish for an apple or an orange, but you will get a peach.

师傅:可桃子不能打败大龙。
But peach can not defeate Tai Long.

乌龟:也许它可以的 ,如果你愿意引导它、滋养它、相信它。
Maybe it can if you are willing to guide it, to nuture it, to believe in it.

8.你不能走,真的武士决不会退却。
You cannot leave, real warrior never quits.

师傅:那你为什么不退出呢? 你知道我一直想把你赶走,可你还是留下来了。
Why didn't you quit? you know I was trying to get rid of you, but you stayed.

阿宝:是啊,我留下来了。
我留下来是因为每次你往我头上丢砖头,或说我难闻,这很伤我的心。
可最伤我心的是,我每天努力练习,却还是这个我。
我留下来,因为我以为,
如果还有人能改变我,
能让我焕然一新,
那就是你--
中国最伟大的功夫师父!
Yes, I stayed.
I stayed, because every time you threw up brick on the head or said I smelled, it hurts.
But it could never hurt more than I did everyday in my life just being me.
I stayed, because I thought...
If anyone could change me,
could make me not me ,
it was you
the greatest Kong Fu teacher in the whole of China!

9. 阿宝,天不遂人愿,况且这本不是天意,阿宝,忘了其它的事情,你的使命一直都在向你召唤。
我们是面条家族,血管中流着面汤。


I'm sorry things didn't work out, it's just what it's meant to be. Paul, forget everything else, your destiny still awaits.
We are Noodle folk, broth runs deep through our veins.

10.我私家汤的绝密食材,就是……什么都没有。
认为它特别,它就特别了。

The secret ingredient of my secret ingredient soup is...nothing.
To make something special, you just have to believe it's special.

CONTINUE
INFO: 2008-06-24 14:37:17 | purpen | digg | link

Jaever使用Django来开发试验终于开始了

Jaever使用Django来开发试验,算是督促自己学习进步的一种方式吧,呵呵:)

CONTINUE
INFO: 2008-06-22 13:42:49 | purpen | digg | link

Week&Found|周日发现

Support|开源支持

Copyright © 2008 Jaever. All rights reserved.

This Site looks and works best when viewed using browsers enabled with JavaScript 1.5 and CSS, such as Firefox 1+ or Safari 3+.