• 使用 Codeigniter 的 Pagination 且帶入不定長度查詢參數的方法

    | /

    在官方的Pagination Class 中, 用 page 的參數來控制本頁目前的起始行數。但範例裡面使用的方法如下:

    1
    2
    3
    4
    5
    $this->load->library('pagination'); 
    $config['base_url'] = 'http://example.com/index.php/test/page/';
    $config['total_rows'] = 200;
    $config['per_page'] = 20;
    $this->pagination->initialize($config);

    所以原始的方法所產生的 url 就是 http://example.com/index.php/test/page/{row number} 這種格式。在參數是固定長度下,你可以輕易的知道在第幾個位置是分頁的依據,即可以使用 $config[‘uri_segment’] 來指定位置。

    但如果參數為不固定數量,哪怎麼辦?使用 uri_segment 就沒有作用了,因為你也不知道第幾個位置是起始行數,而且起始行數只會加在 url 的最後面。

    下面提供一個方法可以 override 掉原先的目前所抓取的起始行數的方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $this->load->library('pagination'); // 中間可以加很多的東西,但 page 一定要放在最後面
    $config['base_url'] = 'http://example.com/index.php/test/'.blalbala.'/page/';
    $config['total_rows'] = 200;
    $config['per_page'] = 20;
    // 新增下面的程式。
    $config['uri_segment'] = 0;
    // 不指定 row 的 url 位置
    $q = $this->uri->uri\_to\_assoc(3);
    // 把目前的參數轉成array
    $config['cur_page'] = $q['page'];
    // override 目前的 row
    $this->pagination->initialize($config);
    echo $this->pagination->create\_links();

    這樣你的參數的長度就不需要固定了。這對於帶入參數的 search ,或是 list 的頁面,在使用上較為方便,也不用作什麼 dirty hack。

    actos price

  • PHP 5.3 已經 deprecate zend_get_parameters_ex

    | /

    這幾天在把一個程式作 PHP 5.2 轉換到 PHP 5.3 的環境下,發現以前有一個 zend_get_parameters_ex 已經被 deprecated 了。 Example: [code lang=”c”] zend_get_parameters_ex( 1 , &arg1 ) [/code] 簡單一點的改法就是把他改使用 zend_parse_parameters 這個 method 。 Example : [code lang=”c”] zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC , “sz” , &arg1, &arg1_len, &arg2) [/code] 這個 function 比較方便,也可以不用把 zval 轉成 c 所需要的型態,可以直接放入原有的參數型態,像使用 char or long 一些原生參數就方便多了。 Old Method Example: [code lang=”c”] zval **arg1; std::string str; zend_get_parameters_ex( 1 , &arg1 ) ; convert_to_string_ex( arg1 ); str = Z_STRVAL_PP( arg1 ); [/code] New Method Example: [code lang=”c”] char *arg1; int arg1_len; std::string str; zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC , “s” , &arg1, &arg1_len); str = string(arg1); [/code]

  • Mercury 的 growl 設定

    | /

    在 MAC 上找了許多支援 msn 的軟體,後來發現最實用的只有 Mercury ,傳檔、視訊、自定圖片、和離線訊息都可以使用。但是他的通知都是醜醜的自訂通知方式。後來在官網上找到了支援 growl 的方式,方法如下:

    • 下載下列二個檔案,並且放置於 application 下的 mercury 裡面。
      Growl.jar放到 directory/lib/Growl.jar 。
      libgrowl.jnilib 放到 directory/libgrowl.jnilib
    • 編輯 info.plist 把 Growl.jar 新增至 classpath
    • 在聊天的對話框裡輸入 /setglobal growl.impl jni
    • Restart

    完成上面的步驟後,就可以找到美美的通知了。

    參考文章:Growl jni

    buy augmentin online

  • How to Build a Hackintosh ?

    | /

    之前非常多的同事在更換電腦時,就換了 Mac Book Pro ,另外我也看到了一篇文章說在討論「為什麼我用Mac」。所以我非常的好奇, MAC OS X到底有什麼魔力可以讓這些人讚不絕口。在前些日子裡,我就有聽說在 pc 上其實是可以裝 MAC 的,但最主要的問題還是硬體支援的問題。所以下面我列出我所使用的硬體,而CPU、主機板、和顯示卡為三個最重要的要素,如果你的這三個硬體有 MAC OS X 支援的話,在安裝上就沒有太大的問題了。 第一步:準備硬體 我所使用的硬體如下:

    第二步:準備軟體 所需要的軟體如下:

    並且把 iboot 燒錄成 CD 等等要拿他來作為開機使用。 第三步:設定 bios 依照「How to Install Mac OS X on a PC (Without Using a Mac)」這篇所示所需更改的 bios 選項如下:

    • 把 cdrom 改為第一個開機選項。
    • 進入 Integrated Peripherals 選單,把 PCH SATA Control Mode 和 Onboard SATA/IDE Ctrl Mode 都改為 ACHI 。
    • 接著進入 Power Management Setup 選單,把 HPET Mode 調成 64-bit 模式。

    第四步:安裝 MAC OS X 將剛剛燒好的 iboot 光碟放入光碟機中,然後先利用他作為光碟開機。看到 iboot-supported 畫面出現後,把 iboot 光碟拿出來,放入原板 Snow leopard DVD 進去,接著等三到五秒,然後按 F5 。你就會看到安裝的選項跑出來了。其他的安裝方式其實就下一步一直按而已,沒有很難。安裝後第一次開機,請記得使用 iboot 片來作為開機片,否則會出現錯誤。 第五步:安裝 boot loader & drivers 如果你的硬體跟我一樣,哪其他的步驟就照著我所說的選擇就好了,如果不一樣,可能就要上 「OSx86 Project」找看看別人怎麼選驅動程式。

    • 下載 MultiBeast
    • 下載 DSDT for the Gigabyte GA-H55M-USB3,然後改名為 DSDT.aml 並且放置於桌面上,等等開啟 multi beast 時才會自動抓到。
    • 開啟 mult beast ,並且選擇下列這些選項:

      • UserDSDT
      • System Utilities
      • Advanced Options > Kexts > Audio > LegacyHDA > ALC889
      • Advanced Options > Kexts > Graphics > NVEnabler
      • Advanced Options > Kexts > Network > RealtekR1000SL
      • Advanced Options > Patched Kernels > 10.3.1 Supported Kernel

      安裝完後,重新開啟,你就可以快快樂樂開開心心的使用黑金塔了!! 在剛開始不習慣使用 MAC 的情況下,很多的思維可能不一樣,想找個偏好設定都找不太到,現在越來越順手了,以後再分享一些心得出來。 參考網址:

  • growl for YUI

    | /

    最近在練習使用 YUI ,剛好想到一個感覺滿炫的主題,就是作 growl style 的 notice 。主要的畫面是參考 Gritter: Growl Notification by jQuery 的畫面,然後再使用 YUI 來實作。

    實作方式就是包一個 div 後再把 overlay 塞進去,讓他作 FADE 的顯示和消失,他就會漸漸的出現和漸漸的消失,比我想像中的還簡單。

    使用方法如下,首先記得把下列所需的的 js 引入: [code lang=”html”] [/code] 然後下載 yui-growl.tar.gz ,並且解開後,並且引用 yui-growl.js。 [code lang=”html”] [/code] 在 之後加入: [code lang=”html”]

    [/code] 接著加入下列 css style 和 gritter.png 這個圖片,放置於 css 可以讀取到的地方。 [code lang=”css”] * html #notify {position:absolute; } #notify{position:fixed;right:0px;color:#fff;} .message{display:block;position:static;width:280px;visibility:hidden;margin:10px;} .message div.hd {height:10px;background:url(“gritter.png”) repeat-x scroll 0 -30px transparent} .message div.hd span {padding:10px 0 ;} .message div.bd {background:url(“gritter.png”) repeat-x scroll 0 -60px transparent} .message div.ft {height:10px;background:url(“gritter.png”) repeat-x scroll 0 -300px transparent} .message div.ft span {padding:10px 0 ;} [/code] 可以用下列的使用方法來使用: [code lang=”javascript”] // message : 顯示的訊息 // seconds : 保持顯示的秒數 Widget.growl(message,seconds); [/code] 像我的範例裡就是放置在 Click 事件裡面: [code lang=”html”] [/code] 按下按鈕後,就會彈出訊息給使用者知道了。

    可以在此看到 demo & source code

  • MUD eXtension Protocol

    | /

    MUD eXtension Protocol) (MXP) ,是由 Zugg Software維護,它可以利用特別的 Tag 讓 client 顯示時別的畫楮,來讓 Server 與 Client 之間互相通溝。所以玩家即可利用滑鼠進行遊戲操作,可大量降低使用者進入 Mud 的門檻。 Server 部份: 要啟動 MXP 除了 Client 要支援之外, Server 在送出資料時分為三種 Mode ,所以我們在送出資料前,要先送出這些資料是什麼模式,模式送錯,就只會顯示原始內容 。

    1. Open mode - 代號 1: 這是預設的模式,在此模式下可以使用一般合法的 tag ,幾個常用的 Tag 如下:

      1
      <bold> or <b> <underline> or <u> <italic> or <i> <color> or <c> <font> <strike> or <s> <strong> <small> <tt>
    2. Secure mode - 代號 2 : 這個模式可以使用特別的 command 來與 client 端互動,例如:east,他就會出現有底線的 east ,使用者只要點 east ,就會自動往東走。其他相關的資訊請參考 Secure Tag

    3. Locked mode - 代號 3 : 這是原始碼模式,這個部份將不會特別處理,直接顯示。
    4. 其餘模式請參考:MXP modes - secure, open and locked 這篇文章。

    Client 部份: 目前支援 mxp 的 Client 只有 MUSHClientZmud 6.5 板以上,其他的 Client 並不支援。 目前狂想空間已經啟用了部份 mxp 的支援,例如在 npc 上點右鍵,可以得到 kill/fight/look 之類的動作。如果點到 item 上面,會有 get/drop 之類的動作。 你現在開啟 zmud 6.5 板以上,連到 fs.twkang.net 5555 ,並且在登入後,打「set mxp」這個指令,即可以開始享用用滑鼠玩 Mud 的樂趣了。

    有圖有真像:zmud

  • Let's Kill IE6 plugin for wordpress

    | /

    How To Use :

    1. You can download from lets_kill_ie6.phps
    2. Rename lets_kill_ie6.phps to lets_kill_ie6.php.
    3. Put lets_kill_ie6.php to wordpress plugin directory.
    4. Active it , and enjoy it.

    我在網路上看到由 mg12 所提供消滅建議昇級 IE6 的 javascript ,覺得非常的美觀和有趣。身為 web Developer ,對於萬惡的 IE 6 非常的痛恨是很正常的,尤於要花費非常多的心力來支援它,所以大家快點幫忙把 IE6 消滅吧。

    所以為了讓 wordpress 非常方便的可以使用該功能,我就作了一個 wordpress plugin 來協助啟用他,才不用更動每一個 template 。下面介紹如何安裝這個 plugin :

    1. 下載 lets_kill_ie6.phps
    2. 把檔名改為 lets_kill_ie6.php.
    3. 將他放在 wordpress / wordpress mu 的 plugin 目錄下。
    4. 啟用他,你就可以看到效果了。

    啟用後畫面如下:
    sample

    Tofranil

  • 歷史上的今天-2010.04.01

    | /

    每年的愚人節我都會想各種奇怪的理由來騙朋友,例如有一年是騙同學說我和當時的女友分手了、或是另一年就是騙同學說我已經與另一個女生在一起了。今年沒有事先想什麼梗,早上上班就想說來玩個大一點的。上班前花了十分鐘,把我的全民打棒球球員資訊查詢網作了一個假的下架畫面,並且在 ptt 上公告說因為遊戲公司的反對,所以本站不再公開讓網友查詢。

    這一招,果然騙到不少人,網路上一堆人在罵遊戲公司啊。相關資料:

    本來想將 FS 和 RW 的登入 port 互換的,可惜沒人支持這種玩法,好可惜。

    擷圖如下: 假畫面

  • 將 Blog 系統從Lyceum轉換到Wordpress Mu

    /

    在支持了這麼久的 Lyceum 後,最後終於受不了將 blog 系統更換成 Wordpress Mu 了。而之所以會這樣更換,是因為 Lyceum 上一個 Release 的版本是在 2008 年 6 月 4 號了,然而已經完全跟不上最新的 wordpress 。

    花了一個晚上,將一些朋友的 blog 手動匯出成 xml 檔,並且再幫他們匯入到目前的 MU 上。另外還有一些小問題發生,例如原先文章中有寫到程式的部份,其中的 PHP Code 被 filter 掉,這部份的問題比較大要找時間再來修了。還有留言的部份,同一篇文章的留言好像只有匯入第一筆而已。

    也順手更換了佈景主題,這次的主題有點黑暗,不過還滿喜歡目前這種帶點黑暗的感覺。

    不過整體來說,wordpress mu 操作界面清楚了許多, widgets 也改成內建了,有更多的 Plugins & widgets 可以使用。所以用了新版的 Blog 軟體後,說不定比較有動力發表文章呢?!

  • java & php 的 timestamp 為不同單位

    /

    一般以來,我以為 timestamp 應該是要從 1970 年零點零分零秒開始,至目前時刻所經過的「秒」數,才算是 timestamp 。不過後來查了一下 java 的 timestamp 的說明,他是從 1970 年零點零分零秒開始到現在的「微秒」數。所以二者之間相差了 1000 倍。 Java 的 timestamp的說明如下: long getTime() Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Timestamp object. PHP 的 timestamp 說明如下: int time ( void ) Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT). 所以如果 php & java 要作 web service 的服務的話,記得要處理這部份的轉換。 Java 部份的程式碼: [code lang=”java”] import java.util.Calendar; class Time { public static void main(String arg[]) { Calendar cal = Calendar.getInstance(); System.out.println(cal.getTime().getTime()); } } [/code] 結果如下: [code] whatup@whatup:/tmp$ java Time 1257688227061 [/code] PHP 部份的程式碼: [code] echo time(); [/code] 結果如下: [code] whatup@whatup:/tmp$ php time.php 1257688308 [/code]