2011年7月29日 星期五

用PHP寫的Google Pie Chart (圖餅圖) API Class

最近在用PHP做一些Server的數據分析,做到一個程度後,突然覺得如果能把分析的結果做成圖表,可能會比較好,於是就開始找PHP的Chart Library,找到了幾個雖然都能用,但還是覺得不太滿意,到後來我想做圓餅圖時,就找不到什麼Library了,後來發現了原來Google有做了很強大的Chart API, 只要把相關參數用GET的方式傳到:http://chart.apis.google.com/chart,Google就可以幫我們做出我們要的圖表。


先直接用API畫個簡單的圓餅圖,


URL如下:


畫出來的結果如下圖:
圖1

詳細用法可參考官方說明文件:
http://code.google.com/intl/zh-TW/apis/chart/image/docs/gallery/pie_charts.html

由於我是要把自已分析好的各種數據做成各種圖表,如果每次要做圖,都要用這種方式搞一次,會讓我覺得很累,所以就先把Google Chart寫成一個基礎的Class, 之後再依據自已的需要針對各種圖表去繼承他。

以上面的例子,我只要先寫好一個GoogleChart.php的腳本,再像下面這樣寫,就可以做出上面的圖表(圖1)了。


include("GoogleChart.php");
$chart = new GooglePieChart(400,200);
$data = array(3,4,5);
$labels = array("標籤1","標籤2","標籤3");
$legends = array("圖例1","圖例2","圖例3");
$chart->setData($data,$labels,$legends);
$chart->draw();


雖然表面上看起來字是比較多,但實際上會比較容易理解,而且不管我的數據是什麼,我只要用1個陣列,就能產生出另外2個陣列來畫出我要的圖表,到時候也就差不多這幾行,另外一個好處就是,如果將來沒有其他特殊需求的話,以後就算過了很久,就算我都忘了Google API是長怎樣的了,但我只要看到上面那幾句,就能夠直接套用而不必再去爬文了。

GoogleChart.php程式如下,有需要的可以自已copy回去用:

class GoogleChart{
    var $width,$height;
    var $chart_type;
    var $api_url;
    var $parameters;
    function GoogleChart($w,$h,$type,$url="http://chart.apis.google.com/chart"){
        $this->parameters = array();
        $this->width = $w; 
        $this->height = $h; 
        $this->chart_type = $type;
        $this->api_url = $url;
        $this->parameters['chs'] = $w."x".$h;
        $this->parameters['cht'] = $type;
    }   


    function draw(){
        $url = $this->api_url;
        $params = array();
        foreach($this->parameters as $key => $value){
            $params[] = "$key=$value";
        }   
        $url .= "?".implode("&",$params);
        header("Location: $url");
    }   
} //class GoogleChart

class GooglePieChart extends GoogleChart{
    function GooglePieChart($w,$h,$type="p"){
        parent::GoogleChart($w,$h,$type);
    }   

    function setData($data,$labels=null,$legends=null){
        $this->parameters['chd'] = "t:".implode(",",$data);
        if($labels) $this->setLabels($labels);
        if($legends) $this->setLegends($legends);
    }   

    function setLabels($labels){
        $this->parameters['chl'] = implode("|",$labels);
    }

    function setLegends($legends){
        $this->parameters['chdl'] = implode("|",$legends);
    }
} //class GooglePieChart extends: GoogleChart

class GooglePieChart3D extends GooglePieChart{
    function GooglePieChart3D($w,$h){
        parent::GooglePieChart($w,$h,"p3");
    }
}

2011年7月25日 星期一

Mac OSX 10.7 Lion 使用心得(一)

左圖是我的主機配備,是10.7才有的「關於這部Mac」訊息頁,這一代顯示的訊息比前一版的還完整。

雖說Lion出來已經有好幾天了,但根據過去使用各種OS的經驗,剛出來的OS最好不要輕易嚐試,尤其上次從10.5升10.6時,發現原本4G的RAM可以開好幾個VM來玩Windows 3D Game,還可以同時用Safari到處亂逛,都還能很順暢,豈知一升級後,就不太夠用了,當然正常使用的情況下還是很夠用。

前一陣子把Xcode升到4.0,雖然好用,但吃記憶體超兇,隨便開幾個Interface Builder就會把記憶體吃光光,原本在這種情況下,我是不敢去升級OS的,還好前一陣子突然從某個管道得知雖然這台MB官方說只能升到4G,但其實是可以升到8G,一試之下,果然可以,真是太爽了!有了8G RAM,我想再怎麼樣也夠我玩獅子了吧?

雖然如此,我也還是不放心,直到前天看到新聞上說第一天下載量就有100萬次,看了一下評價,似乎還不錯,會跑不動的都是只有2G RAM或款式過舊的主機,看到有人用跟我差不多的4G MBP,說跑起來蠻順的,而且跑VM也蠻順的,就鼓起勇氣點(買)下去了。

點下去之後,下載的速度還算蠻快的,大概1小時多就下完了,安裝也沒有花很多時間,大概半小時左右,原本我比較擔心的是升完級後,用TC備份會超久(之前升10.6時,備份了200G,大概花了兩天),這次倒是蠻快的,300G左右的硬碟使用量,只備份了8G的份量就完事。

整體上來說,雖然有發現一些小Bug或美中不足的地方,但這一代確實又比上一代更好用了,而硬體需求當然也更高了,基本上2G記憶體應該是不夠用的,另一方面由於動畫效果又更華麗了,所以3D資源也吃得比較兇,所以如果要用VM玩Windows 3D Game,就會比較吃力,因此如果是超過3年以上的Mac中低階款式要升10.7,最好還是直接買新主機吧。

如果是Mac OS的老用戶,起初可能會比較不習慣,主要最大的差別在於捲視畫面時的捲動方向,跟之前是上下左右完全相反,起初我也是不太習慣。

如果想切換回舊的方式,可從系統偏好設定->滑鼠(下圖左),或系統偏好設定->觸控軌跡板(下圖右)的「捲視方向:自然」選項改回去。



但其實以這一代的概念來說,他是以觸控螢幕的角度去切入,所以思維上和之前傳統設備都不同了。
簡單的來說,從前的捲視,捲動的是視窗右側或下方的捲軸控件,而現在的思維則是以手指去撥動整個頁面或視圖。
只要運用自已的想像力,把自己捲動的對象調整一下,就當做自已是在用iOS的設備,手指就像是在螢幕上面滑動,自然就能得心應手。

因此,從上述改變來看,Apple的目的是想把OSX改得像iOS,讓只用過iOS而不熟悉電腦的客戶群更容易上手,從而將iOS市場的用戶拉到Mac市場。
另一個方面,滑鼠和軌跡板畢竟不是觸控螢幕,因此這種操控方式仍然不夠直覺,個人推測,這種介面很可能只是一種過渡期的產物,OSX的觸控螢幕電腦應該會在不久後問世,而他有可能不只是一台平板電腦。
甚至在下一代,或後幾代,Apple會在某個時間點把iOS和OSX整合在一起,想來也是順理成章的事,當然這都是我個人的推測。

2011年7月22日 星期五

淘寶網API學習心得(一)

由於最近工作上需要,研究了一下淘寶網的API,在此將我是如何上手的心得分享上來,希望能夠幫助有心想使用這個API的人上手。

以下網址為淘寶開發文件的首頁,內容還蠻豐富的,豐富到對於沒經驗的人可能會不知該從何下手。
http://open.taobao.com/dev/index.php

以下網址為API目錄,基本上已針對客戶的各種需求做了很好的分類。
http://my.open.taobao.com/apidoc/main.htm

實際上,要上手並不難,不需要先去讀他繁雜的文件,只要先用一次他們所提供的測試工具,基本上只要對HTTP協定有一點概念,在這方面有一點點開發經驗的人,只要看到這個工具,隨便試用一下,就已經算是上手了,測試工具網址如下:
http://my.open.taobao.com/apitools/apiTools.htm

測試時如果不知道各參數該如何下時,別忘了回到API目錄,針對您所要測試的API文件,查詢相關參數的說明。
http://my.open.taobao.com/apidoc/main.htm

如果還是不清楚他的原理,可以參考官方提供的快速上手指南。
http://open.taobao.com/dev/index.php/快速上手指南

關於進一步的測試心得,可參考「淘寶網API學習心得(二)」。