分類: 網路工具

十一月 02

有作網站的人們注意一下自己的 Page Rank 值是否有變動了喔。

這個月初 Google 又變更了 Page Rank 的訊錄。

九月 17

近來發現 Google Search Engine 持續瘦身,原本以為是所謂的 Google Dance 造成的短暫變化,但深入觀察後認為這波的瘦身行動應該是刻意的。
 (閱讀全文)

八月 14
每個玩電腦的人都知道(被電腦玩很慘的也是),電腦的問題總是層出不窮,除了要顧好自己的,常常還得幫親戚、朋友、同事、另一半、以及另一半的親戚、朋友、同事處理他們的電腦問題。以前,大多是得親自跑一趟才能處理,因為即使有 pcAnywhere 、遠端桌面這些遠端控制系統,但對面的人不會買、不會裝,那一切都是白搭!因此這套 Gogrok 才顯得特別實用。

Gogrok 的特色

  1. 免費

    可以大方推薦朋友們都裝上它,以備不時之需。
  2. 簡單

    類似 MSN 的操作介面,讓絕大多數使用者覺得親切、沒距離。
  3. 實用

    它要的不多,什麼軟體有問題再開權限給協助者即可。
  4. 迷你

    整個程式才 10.6 MB 隨時從網路上下載安裝,立即使用。
  5. 本土化

    提供正體中文使用介面,無痛輕鬆上手。

 (閱讀全文)

元月 17
中國時報 2009.01.17  
陳大任/台北報導

 

全球最大影片分享網站YouTube最近增加註解功能,意外被網友拿來搞KUSO,香港《電車男追女記》以一串短片自創成影片遊戲爆紅,美國、以色列、印度等世界各地的網友也在飆創意。

■選擇題 電車男也ORZ

YouTube影片註解功能是能讓網友把文字直接加在影片上,讓默劇有了旁白,此一文字框還可以加入連結,讓瀏覽的網友可以不斷地連續觀賞相關的影片或是網頁,這套以實用為出發點的設計,被網友拿來玩把戲。

香港一名林姓網友自創《電車男追女記》,網友看完一段一影片之後,可以點選註解,來接續劇情,所以,看網頁的人會因為選了不同註解,讓劇情最後演成被女生摑巴掌收場,或是順利追上女生的歡喜結尾。

《電車男追女記》一推出就竄上香港YouTube點閱率第一名,五名製作團隊還接受香港媒體專訪,林姓網友表示,想要贏得網民共鳴,題材必須是文化潮流、貼近生活,電車男正好符合這條件,但只是翻拍同樣題材欠缺吸引力,乾脆拍成影片,讓網民選擇不同的劇情。

■紙牌魔術 笑果更精彩

印度一名魔術師表演一段猜紙牌魔術,影片裡的魔術師可以知道電腦這端觀眾挑選的紙牌,其實這根本是6段預拍短片,魔術師當然不會猜錯,笑果比魔術還精彩。

YouTube表示,另一支《Time Machine- Start Here》影片超過70萬點閱,劇情是主角3人為了躲避黑道追殺,需要選擇是否跳進時光機器。另一則汽車闖關的遊戲性較強,觀眾要能及時點住短暫閃出的註解,才能讓飛奔的汽車不致發生意外。

■電車男追女記:http://tw.youtube.com/watch?v=PACuWvCUWUQ&feature=channel_page
■搶救汽車:http://hk.youtube.com/watch?v=4tc-DNiOmL8&annotation_id=annotation_772368&feature=iv
■猜紙牌魔術:http://tw.youtube.com/watch?v=tbEei0I3kMQ
■時光機器:http://www.youtube.com/watch?v=l8rJ1WML60Y&feature=channel

八月 06

因為 php 上面提供的 mailparse 模組實在是爛到一個不行,看不下去只有自己寫,這就是網路。有興趣的人請自行取用~~註明出處即可。

/* 作者:丁昶文
    電郵:charlie@ics.com.tw
*/

class        mail_parser    {
    function    mail_parser()    {
        $this->tree        =    array() ;
        $this->header    =    array() ;
        $this->body        =    array() ;
        $this->counter    =    0 ;
    }
    function    explode($message,$pid=0) {
        if    ($pid == 0)    {
            $segment        =    preg_split("/\r*\n\r*\n/",$message,2) ;
            $this->header[0]=    iconv_mime_decode_headers(trim($segment[0]),2,SCRIPT_CHARSET) ;
            $this->body[0]    =    trim($segment[1]) ;
        }
        if    (preg_match("/boundary=\"([^\"]+)\"/i",$message,$m))    {
            $boundary    =    $m[1] ;
            $tail_off    =    array_shift(explode("--{$boundary}--",$message)) ;
            $parts        =    explode("--{$boundary}",$tail_off) ;
            array_shift($parts) ;
            if    (!isset($this->tree[$pid]))    $this->tree[$pid]    =    array() ;

            foreach    ($parts as $this_one => $part)    {
                $segment                            =    preg_split("/\r*\n\r*\n/",$part,2) ;
                $this->counter                        +=    1 ;
                $oid                                =    count($this->tree[$pid]) + 1 ;
                $this->tree[$pid][$oid]                =    $this->counter ;
                $this->tree["<-{$this->counter}"]    =    $pid ;
                $this->header[$this->counter]        =    iconv_mime_decode_headers(trim($segment[0]),2,SYSTEM_CHARSET) ;
                $this->body[$this->counter]            =    trim($segment[1]) ;

                $this->explode($part,$this->counter) ;
            }
        }
    }
}
 

用法就是:
$mp = new mail_parser() ;
$mp->explode(MAIL_CONTENT_FROM_EML_FILE) ;
然後它就會幫你把整封信炸開,之後,你可以用二種方式去捉資料。

  1. for ($i = 0 ; $i <= $mp->counter ; $i++) {
        $header = $mp->header[$i] ;
        $body = $mp->body[$i] ;
    }
  2. 也可以用樹狀的方式去捉出信包中各區塊的關係,重點就是從 $mp->tree[0] 開始,然後逐層去撈。找到 index 後,一樣從 $mp->header 和 $mp->body 去捉檔頭和內容。

這個類別基本上只作信包拆解的部份,而且是不管什麼死人骨頭全部拆光光。純粹是為了處理 mailparse 在 body 解析上的無厘頭表現而已。至於打包部份,目前我沒需求,就也沒作囉。不過就是反其道而行就對了。
email 的關鍵就是 boundary 和 mime type 處理好,然後拆拆裝裝而已。

附註:

  1. 類別中用了 SCRIPT_CHARSET 和 SYSTEM_CHARSET 這個定義,是用來將標頭內容轉成指定的字集,別忘了 define (SCRIPT_CHARSET,'***') ; 和 define (SYSTEM_CHARSET,'***') ; 先。
  2. 樹狀結構的存取就自行處理囉。
  3. php 指令 iconv_mime_decode_headers 也有點不盡理想。主要在 header 長度過長被切斷成數行的情況時,重組的結果會有不可預期的空白出現。另外則是部份 mail agent 的設計失當,在 header 中使用特定字集而未加以編碼,造成還原上的錯誤。這部份,可以考慮自行改寫 header 的反解功能來取代它。