欺负

| | 评论(0)

小熊 说:
我前几天还想着如果你在北京就好了,以后点点欺负我,我还可以跑去和你哭诉,哈哈

毛毛虫 说:
哈哈,点点会欺负你么?你不欺负点点,点点就该偷乐了

小熊 说:
。。。哪有,我一向是弱势群体,好不好

毛毛虫 说:
我突然想到点点找人哭诉的样子,哈哈

小熊 说:
。。。

毛毛虫 说:
哈哈,你又在装弱势群体了

字符串匹配算法学习一

| | 评论(0)

1. 字符串匹配算法简介
参见《 字符串匹配算法研究 》 http://www.yuanma.org/data/2008/0806/article_3128.htm
摘要:随着互联网的日渐庞大,信息也是越来越多,如何在海量的信息中快速查找自己所要的信息是网络搜索研究的热点所在,在这其中,字符串匹配算法起着非常重要的作用,一个高效的字符串匹配算法,可以极大的提高搜索的效率和质量,本文力图阐明字符串匹配算法的发展过程,并介绍了各个算法的特点,并给予了适当的比较和分析。

2. Horspool算法
算法详细解释参考《算法设计与分析基础》第二版195页
这个算法的关键之处是对模式进行预处理,计算模式中每个字符到模式字符串尾的距离。
PHP代码实现如下:


$string = 'afeovfpop';
$pattern = 'vfp';
function shiftTable($pattern){
$length = strlen($pattern);
$table = array();
for($j=0;$j<$length;$j++){
$key = $pattern[$j];
$table[$key] = $length-1-$j;
if($j>$length-2){
$table[$key] = $length;
}
}
return $table;
}

function Horspool($string, $pattern){
$table = shiftTable($pattern);
// print_r($table);
$m = strlen($pattern);
$i = $m - 1;
$n = strlen($string);
while($i<=$n-1){
$k=0;
while(($k<=$m-1)&&($pattern[$m-1-$k]==$string[$i-$k])){
$k = $k+1;
}
if($k==$m){
return $i-$m+1;
}else{
$key = $pattern[$k];
$i=$i+$table[$key];
}

}
return 0;
}
echo Horspool($string,$pattern);
echo strpos($string,$pattern);

phpDocumentor学习笔记

| | 评论(0)
前言:
使用phpDocumentor的好处:
你喜歡寫文件嗎?我不喜歡。尤其是在趕工的時候,哪來的美國時間寫文件;就算有時間也是希望趕快把事情做完閃人,怎樣都輪不到寫文件的時候。

文件需要嗎?雖然不喜歡寫文件,但文件真的是必要的。對自己而言,正當在趕案子兵荒馬亂的時候,突然要某個以前寫過的函式結果不知道放哪去了,這時心情會很糟很糟的去把以前的碼挖出來一份一份看,才能找出所要的函式,這樣更浪費時間。對於他人而言,要是每個人寫出來的東西都可以再讓其它人了解,並且進一步使用其它人早已寫好的元件,可以讓我們再省下時間來多喝幾杯咖啡。

那要怎麼樣讓編寫文件輕鬆又自在? phpDocumentor 就是一個現成好用的工具,只要在寫程式時順手寫上一點點的註解,困難一點的可以再加上一點點的範例。寫完後交給 phpDocumentor 編譯,一下子圖文並茂的程式文件自動就產生了。而且它還不只可以產生 HTML 檔,還可以產生出 PDF, CHM 等文件。就算產生 HTML 檔,還有許多的風格可以選擇。這樣好用的工具放著不用,實在太可惜了。

這份資料裡,只會出現馬上能用的資料,除了這個簡介外,不會廢話太多,所以文件中的文句也冰冷了些。會這樣做的目的是希望文件的每一個部份都能讓讀者快速吸收,任何一個例子複製下來後馬上能用。文件中的每個樣版我都是精心設計過,起碼我以後要用的時候不必再想說要寫一個類別正常需要哪些 Tag ,只要把樣版複製下來以後就直接可以用了。

由於此文件中資料只有使用上最需要的部份(也是一定能用的部份),因此若在使用上想要了解更多,可以到 phpDocumentor 的官方網站 (http://www.phpdoc.org/)上找到所需資料。
——————摘自 《phpDocumentor筆記 0 立即體驗》
http://pkwbim-programming-note.blogspot.com/2008/01/phpdocumentor-0.html#0.4

其实这篇文章已经写的比较简要,但是为了防止哪天这个网站被盾了,我还是抄到自己的blog比较安全。
简而言之,phpDocumentor就适合我这样写过代码就忘了的人,规范的书写注释还能生成文档,多省事。

1.安装
1.1如果没有安装过pear,可以先运行PHP目录下的go-pear.bat安装。
1.2安装过pear之后,使用下面的命令安装phpDocumentor:
\php5\PEAR\pear install -o PhpDocumentor

2.字符编码的问题
看到很多人都说需要改字符编码,但是我下载的phpDocumentor v1.4.2 没有遇到这个问题,也没有
查找到"iso-8859-1"这个字符串。

3.生成文件
步驟

   3.1 将範例碼存成 example.php 置於 \project\php_project\下。
   3.2 在命令列下用以下指令

      phpdoc --parseprivate -o HTML:frames:earthli -f \project\php_project\example.php -t \project\php_project\docs

      或

      phpdoc --parseprivate -o HTML:Smarty:PHP -d \project\php_project\ -t \project\php_project\docs

   3.3 解說
          * --parseprivate: 是將私有 (private) 成員函式或私有變數等等也都加入程式文件裡。沒有這參數的話,產生出的文件裡只會有公開的 (public) 和受保護的 (protected) 的成員函式和變數。
          * -f : 是指針對某個檔案產生註解文件。
          * -d : 針對某個目錄(含其子目錄)產生註解文件。
          * -t : 指定要輸出的目錄
          * -o : 指定輸出格式,上例的格式有兩種
                o HTML:frames:earthli : 是輸出有一種帶有框架 (frame) 的說明文件,所產生出來的文件非常漂亮。Zend Framework 的 API 文件就是採用這種風格。
                o HTML:Smarty:PHP : 產生的文件看起來就像是 PHP 網站上或是 phpDocumentor 官網上的的一樣。

待程式結束後,瀏覽剛剛指定產生文件的目錄下,會有一個 index.html 檔,以瀏覽器打開它就可以看到 phpDocumentor 產生出來的程式文件。倘若在產生文件的過程中,有任何的錯誤,這些錯誤會出現在 error.html檔裡。

4.范例
<?php
/**
* phpDocumentor 使用示範
* 這個檔案是一個簡單的示範
* 內容涵蓋了許多常用的註解方式。
* 有任何的問題請和作者連絡
* @package phpDocumentorExample
* @author 多采多姿 <pkwbim.programming@gmail.com>
* @version 0.1b
*/

/**
* 這是 lib.inc.php 的標題
* 這是 lib.inc.php 的描述
*/
include_once('lib.inc.php');

/**
* 圓周率
* 圓周和直徑的比值
*/
define('pi', 3.14159);

/**
*  這是 funtion1 的註解區塊標題
*  這是 funtion1 的描述
*  @global int 這是函式內第一個全域變數的註解,就是 $global1 的註解
*  @global string 這是函式內第二個全域變數的註解,就是 $global2 的註解
*  @param bool $arg1 這是函式參數 $arg1 的註解
*  @param int|string $arg2 這裡是函式參數 $arg2 的註解
*  @return mixed 傳回值的註解
*/
function function1($arg1, $arg2) {
    global $global1, $global2;
    return array($arg1, $arg2);
}

/**
* 這是MyClass的標題
*
* 建立簡寫型的清單
* 這裡建立一份無序清單
* - 項目一
* - 項目二,
*   每個項目可以是多行,
*   就像這個項目,
*   這行還在項目二中
* - 項目三
* 清單結束,因為沒縮排
* 這裡建立一份有序清單
* 1 有序的項目一,數字後一定要加一個空白。
* 2 有序的項目二
* 有序清單的另一種寫法
* 1. ordered item 1
* 2. ordered item 2
* 清單在此結束
*
* @package phpDocumentorExample
* @author 多采多姿
* @since 1.0rc1
* @version 0.2b
*
*/
class MyClass {
    /**
     * 這裡是成員變數的註解
     *
     * @var string 成員變數的註解
     * @access private
     */
    private $_variable = "Hello";

   /**
    * 這是一個公開的成員函式
    *
    * @param bool $var1 參數1
    * @param string|array $var2 參數1
    * @return void
    * @access public
    */
    public function set_vars($var1, $var2) {
    }
}
?>

要注意所有的注释都是有两个星号的C-style注释,如下所示
      /**
       *
       */
语法参考文档: http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.quickstart.pkg.html#coding

字符串编码转换小结2

| | 评论(0)
 今天早上,网页忽然正常显示了,原来是修改了注册表的原因。
 在数据库迁移后(sql server :gbk2312 到 Oracle : UTF8),可能出现页面字符乱码的原因:

1.oracle字符集设置不正确。

数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置。
可能是参数文件,环境变量或者是注册表会话字符集环境select * from nls_session_parameters,
其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,
如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,
alter session>环境变量>注册表>参数文件字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。
如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk;如果字符集是utf8,则要改成
SIMPLIFIED CHINESE_CHINA.AL32UTF8。
(即hkey_local_machine => software => oracle =>NLS_LANG改为SIMPLIFIED CHINESE_CHINA.AL32UTF8)


2.迁移过程中字符编码转换不正确,如何转换编码可参照总结1。
在php中,可以使用mb_string 的mb_detect_encoding来检测字符串是什么编码。

3.脚本代码要另存为utf8格式。

4.页面的header 要设置为utf8。

 

介绍一个自动完成的js类库autocomplete

| | 评论(0)
下载地址:http://createwebapp.com/
文档地址:http://createwebapp.com/autocomplete 文档非常详细。
 需要注意的一点是
<script>
    new Autocomplete("consumerName", function() {
       
        return "consumers.php?q=" + this.value;
    });
</script>
这段js要写在

<form>
    <input type="hidden" name="consumerID" id="consumerID"/>
    <input type="text" name="consumerName"/>
</form>

之后。
截图如下: autocomplete.jpg

字符串编码转换小结1

| | 评论(0)
 基础:

中文编码基础知识介绍(理论基础)

Java 编程技术中汉字问题的分析及解决

String.getBytes()方法中的中文编码问题 (这篇最为简单易懂且结合实际)

Unicode和UTF-8之间的转换详解

附录:

unicode编码表

GBK 汉字内码扩展规范编码表(二)

代码示例:

public String changeCharset(String str)
            throws UnsupportedEncodingException {
        if (str != null) {
           //得到gbk编码的字节串
             byte[] bs = str.getBytes("GBK");
             System.out.println("gbk:");          
             System.out.println("hex format is:"+encodeHex(bs));
          //得到utf8编码的字节串 
             byte[] ns = str.getBytes("UTF-8");
             System.out.println("utf8:");         
             System.out.println("hex format is:"+encodeHex(ns));
             System.out.println("Bin format is:"+encodeBin(ns)
                );
         //将编码为utf8的字节串再生成新的字符串,然后解码,看看转换过程中是否出错
             String newutf=new String(ns,"UTF-8");
             System.out.println("convert back from utf8:"+encodeHex(newutf.getBytes("UTF-8")));
             return newutf;
}

public static final String encodeHex (byte[] bytes)
    {
        StringBuffer buff =
        new StringBuffer(bytes.length * 2);
        String b;
        for (int i=0; i<bytes.length ; i++)
        {
            b = Integer.toHexString(bytes[i]); 
            // byte是两个字节的, 而上面的Integer.toHexString会把字节扩展为4个字节
            buff.append(b.length() > 2 ? b.substring(6,8) : b); 
            buff.append(" ");
        }
        return buff.toString();
    }
public static final String encodeBin (byte[] bytes)
    {
        StringBuffer buff =
        new StringBuffer(bytes.length * 2);
        String b;
        for (int i=0; i<bytes.length ; i++)
        {
            b = Integer.toBinaryString(bytes[i]); 
            // byte是两个字节的, 而上面的Integer.toHexString会把字节扩展为4个字节
            buff.append(b.substring(24,b.length())); 
            buff.append(" ");
        }
        return buff.toString();
    }

在Java中,String.getBytes("GBK")获得的是gbk编码的字节串,打印出来之后得到的是对应编码的十进制值,转换成16进制后就和编码表中的值一样了。
最后可以根据输出的二进制编码,和unicode表对比。

示例:
str: 中国
gbk:
hex format is:d6 d0 b9 fa
utf8:
hex format is:e4 b8 ad e5 9b bd
Bin format is:11100100 10111000 10101101 11100101 10011011 10111101
convert back from utf8:e4 b8 ad e5 9b bd
其中,“中”的unicode编码是4e2d,二进制表示为0100 1110 0010 1101,从低位到高位按六位截取及补齐高位后就可以得到11100100 10111000 1010110 ,即为utf8编码。


深居简出的生活

| | 评论(2)
 yiding:昨天中午吃的那家味道不错,不过有点贵,而且只适合两个人同吃,因为分量较小
 bear:在哪里啊?
 yiding:在禾祥西,快到小肥羊的地方
 bear:嗯。。。太远。。-_-

 bear:你的香水很好闻耶,哪买的?
 nancy: 中山路。。
 bear:哇,好远。。

 虫:来我家吃饭啊
 bear: 湖里太远。。

 小猫:饿了,我要猫粮。。
 bear:乖,新华都猫粮卖完了,你自己坐车去城达吃好不好



随感

| | 评论(0)
看了某个朋友的blog,立刻很羞愧,觉得自己正是他所说的浮躁的那种人。
最近在想,为什么都没做出点什么东西来,我想主要是缺乏钻研的精神吧。
一直以来,就像蜻蜓点水一样,什么都学一点,但是什么都不明白,要问原理,就说不出一二。埋在自己的小圈子里久了,都看不到世界变成什么样子了。最近有个学习的机会,但愿可以抓住,然后静静的学习。
有点恒心,有点毅力,想想自己究竟想做什么样的人。

2007回顾

| | 评论(6)
1月:写网页连通测试,学习Java多线程,遗憾的是学习的不够透彻,现在如果不再把书翻出来看看的话,估计想不起来怎么做了。

2月:回家

3月:修改汇文系统,不过汇文在6月份的时候又推出了新版,所以我们改的基本上都作废了。

4月:写tag应用,还好这个还继续用的上,虽然也花了一点时间把它加在汇文新版上。借此机会,学习了一下ajax。值得一提的是,Lib2.0会议在厦门召开,乘机见了不少大牛、帅哥和美女,也有了很多启发。

5月:继续改汇文部分应用,略微了解了一点smarty的应用。并且开始了解OPAC。

6月:开始考虑Mylibrary。好像我们翻译的书这个月出版了,小小自夸一下,虽然其实我也没有从中学到什么东西,而且稿费还上交了。(继续想念我的稿费,我连是多少都忘了。。-_-)

7月:放假,翻译某本书,不过后来没出版。

8月:去桂林参加数字图书馆2007研讨班。记了一些笔记,想了一些应用。

 9月:开始奔波,那个啥啥啥也是要见公婆的。。。

10月:好心痛机票钱,国庆回家真贵。
 
11月:继续写Mylibrary,还有opac部分改写。。因为我们系统升级了。。-_-

12月:继续写Mylibrary,继续学习ZendFramework。有几天了解了一下书目推荐,刚开始学习一个开源软件taste时,老大发话继续写Mylibrary,开始把学科导航整合到Mylibrary。
 
————————花絮分割线————————

代码花絮:
 
MyLibrary的痛苦编写经历:
6月,小成。不过是基于mysql的。
9月,把汇文的大部分mylibrary功能写进mylibrary,不过后来弃用。因为汇文写的更好,如果我们自己写,需要一段时间来完善和改善用户体验。
10月,11月,改写成oracle的,zf虽然不错,但是在插入数据库上,mysql和oracle有很大不同。
12月,没有灵感,压榨sogg小成,改投书目推荐2星期。之后再继续回来拥抱Mylibrary,可以初步导入del的收藏,具体完善打算压榨代码小机器人。

汇文修改:
A:“为什么汇文续借要这么麻烦?”
B:"咋没记录转预约经手人?"
C:“Opac咋不能用了?”
D:"保存帐户时间能否长点?"
E:"....."
rtx自动答复:有事请联系小马哥先。

————工作花絮——————

工作小花絮:
某日,一群人在小黑屋里讨论,一小时内飞速搞定。原因有二:一小时后要去烧烤,哈哈;以充分的理由,飞速把任务推给不在场的人,比如可怜的sogg就是其中的受害者。

某日,网络收看上海Lib2.0会议,看完很high,中午吃饭的时候讨论了一堆,没有回去午睡,结果晚上想整理的时候,发现大部分都忘了。。。

————宿舍——————

宿舍:

一只羊去了深圳,虫打电话给她:“亲爱的羊羊,我们好想你”,太e了,完全不考虑旁人的感受。。
一只鸭子去了宁波,估计宁波有某个帅哥,不然这丫头咋一年都不回来。
值得大喜的一件事情,小鹿结婚了,可惜不能参加婚礼,郁闷的是咋不参加婚礼也要送礼金,哈哈。

——————伪装分割线——————

熊:

熊家在昆明买了套房子。

厦门这边新住进一只小浣,某天从一条街带回来的,哈哈,好喜欢它(某只旁白,你喜欢它还把它放在纸袋里,至今不给它洗澡=_=)。

楼下的小猫5月的时候跑到我家生了一窝小小猫,,两只小黄一只小白。如今小小猫已经长成小猫了,丢了一只小黄,另外两只长得不错,人见人爱,人见人夸:‘太胖了“。现在的小黄喜欢和小白腻在一起,不得不控诉的是,昨晚小黄找不到小白,吵了我一晚上,郁闷。小小的遗憾是,它们小时候我怕它们被人摸了长不大,没有乘机抱它们,而且还不许某人抱它们(某人对此一直很不满),好想回到5个月前可以蹂躏小小猫的时候。。。

小小蜜蜂出生了,哈哈,好可爱呢。sogg的小外甥很可爱,某人的小侄子也很可爱。基于青春的美丽pp动人,我相信小小青春也会很pp,哈哈,好想摸摸她/他的小脸,嗯,还想做她/他的干妈:P

2007年在(饭)团的光辉普照下,经历了无数次腐败的我茁壮成长了,革命的友谊也因此而建立,感谢大家。太e的话,现在说不出来,或许过了几年会可以说出口,嘿嘿。虽然心里默默感谢,不过不好意思说不出来,脸皮薄的人就这个缺点,唉。。(窃笑)

最后,小小的e一下,2007年某人越来越可爱,哈哈。