2006/11/20

安裝IE7跟WMP11的重點

當然啦,你知道的,微軟在這兩個安裝檔上都加入了驗證程序,一定得驗證過才給裝。
為了這個驗證程序(好像是叫WGA),這幾天在想方設法要繞過去,剛剛問了朋友,得到幾個重點:
  1. 序號要沒被微軟鎖住(可用KeyFinder之類的程式改序號)
  2. 刪除WGA(裝上Unlocker手動刪,或是用RemoveWGA這隻程式刪)
  3. 要Reboot
剛剛已經試驗成功,裝上WMP11了。
別問我序號或是那些程式去哪找,我可不想被人找麻煩~
話說下個月就要去上班了,上班後應該會去繳一下微軟稅,省的被人檢舉。
你知道的,最近爆料文化盛行...

2006/11/18

Drupal 4.7.X 在 PHP 5.2 下的一個修正

這個修正主要是解決登入後無法取得權限的問題。

修改檔案: includes/session.inc

尋找:

function sess_read($key) {
  global $user;

  // retrieve data for a $user object

修改:

function sess_read($key) {
  global $user;

  register_shutdown_function('session_write_close');
  // retrieve data for a $user object

2006/11/16

我所使用的程式編輯器

基本上有兩個,一個是PSPad,另一個是EmEditor。
我最早是用EmEditor來寫程式,這也是我預設的文字編輯器,原因無他,就是因為對於各種編碼的支援。
而PSPad,則是我最近愛用的,主要原因有兩個:
  • UTF8 w/o BOM的支援。
  • Code Explorer的方便。

當然啦,如果有自動的Code Hint那就更好了!
不過最近看PSPad的論壇,這幾天有些使用者在給作者建議一些Bug Tracker的系統,不過作者似乎興趣缺缺~

這裡的第一篇

其實是這樣的,我常發表的東西有許多是程式碼,所以要找個比較容易操作的部落格不太容易。
今天又多了一項比較基準,就是不會強制設定字型的,這邊可以自己改CSS。
字型的議題是因為我看了這篇:
將網頁的字型換成「微軟正黑體」
然後把IE跟FF都改過來了,結果發現有些網站還是醜醜的,當然包括我之前在 Live.com 上面的部落格~

目前用的佈景主題是redBird2再加上自行修改的CSS,用這個主題是因為:
  • 蠻乾淨的,而且是兩欄式的配置。
  • 最上方的Banner不會太高。
  • 對於Firefox的支援。

2006/11/11

字串解析物件

這是我參考 PEAR:DB 裡面的 prepare 部份寫出來的一個字串解析與取代的物件。
它可以載入一張函數表,根據這張函數表來對字串中的一些字元作轉換的動作,有點類似 sprintf 函數,不過每個字元的轉換可以自訂(這也就是函數表的功用)

class 字串解析 {
    private $快取 = array();
    private $解析表 = array();
    private $例外字元 = '';
    function 載入(&$解析表 = array(), $例外字元 = '', $取代 = true) {
        if (mb_strlen($例外字元) < 2) {
            $this->例外字元 = $例外字元;
        }
        if ($取代) {
            $this->解析表 = array();
        }
        foreach ($解析表 as $字元 => $函數) {
            if (mb_strlen($字元) == 1 && is_callable($函數)) {
                $this->解析表[$字元] = $函數;
            }
        }
        unset($this->解析表[$this->例外字元]);
        $this->快取 = array();
    }

    function &解析($樣板, $快取 = true) {
        $堆疊 = array();
        $輸出 = array();
        $前字 = '  ';
        $長度 = mb_strlen($樣板);
        for ($索引 = 0; $索引 < $長度; $索引++) {
            $字元 = mb_substr($樣板, $索引, 1);
            if (array_key_exists($字元, $this->解析表)) {
                if ($前字 == $this->例外字元) {
                    array_pop($堆疊);
                    $堆疊[] = $字元;
                } else {
                    $輸出[] = implode('', $堆疊);
                    $輸出[] = $字元;
                    $堆疊 = array();
                }
            } else {
                $堆疊[] = $字元;
            }
            $前字 = $字元;
        }
        $輸出[] = implode('', $堆疊);
        if ($快取) {
            $this->快取[] = &$輸出;
            end($this->快取);
            $索引 = key($this->快取);
            return $索引;
        } else {
            return $輸出;
        }
    }

    function 代換($樣板, &$參數 = array()){
        $堆疊 = array();
        if (isset($this->快取[$樣板])) {
            $解析 = &$this->快取[$樣板];
        } else {
               $解析 = $this->解析($樣板, false);
        }
        $索引 = 0;
        foreach ($解析 as $字串) {
            if (array_key_exists($字串, $this->解析表) && isset($參數[$索引])) {
                $堆疊[] = call_user_func($this->解析表[$字串], $參數[$索引]);
                $索引++;
            } else {
                $堆疊[] = $字串;
            }
        }
        return implode('', $堆疊);
    }
}