2010年3月14日 星期日

[動畫] 十二國記


來源:http://zh.wikipedia.org/wiki/十二國記


週六開始看這齣動畫,記得以前常常在電視上看到,總覺得他的背景很有中國風,但還是不知道再說甚麼,有次開始看了第一集時,沒看完我就把他關掉了。幾天前跟同事閒聊,才又回想起這部動畫。


第一次看時,我想到的是動畫夢幻遊戲,所以就把它當成夢幻遊戲之類的動畫,事實證明,我錯了。這是一齣與人性很深相關性的動畫,故事是從日本高中女生開始的,剩下的就如同 wiki 上寫的吧!


看完後,讓我想起週邊也有些人有一點像劇中人物的個性,像是覺得自己過得太辛苦、為何要來這裡等等的疑問,我記得高中有個簡端的英文詩,大意是一個人在樹林中看到兩個岔路,一條是有人走過的痕跡,另一條是雜草叢生的小路,那這時候到底要挑哪一條路走呢?要符合世人眼光的嗎?那又是真正自己想走的路嗎?


這也讓我想起日劇華麗一族:「為何不看看明天的太陽呢?」而支持我繼續走下去的正是家人,還有一些簡單的信念,那就是繼續走下去,感受悲傷難過的,享受溫馨快樂的,沒有所謂的絕對,只有相對的存在的,就像一顆雞蛋,持住的方式不是用最大也不是小到不能支撐重量的,生活需要很多的耐心跟智慧,美好的、快樂的就會呈現在眼前,但也不代表沒有痛苦的、悲傷的。
















2010年3月9日 星期二

不要輕易相信廟口上廣告效果誇張的偏方藥

記得那幾年前,隔壁鄰居發生車禍後,幾個禮拜稍稍復原後,到中部廟宇拜拜求平安。


當時碰到一對也前來拜拜的老夫妻,看著鄰居受傷未拆封的繃帶,唏噓幾句,便也分享自己的故事。說著以前身體不好,但有次碰到一位老師,教導他們怎樣練身體,像是每天透過在單槓上拉拉身體,可以處理久坐的脊髓側彎問題,抑或透過泡澡的方式改善血液循環等等的,說的讓我那鄰居好似心動,隨後拜拜完後則一起繞道過去那位老師家裡坐一坐。


鄉下的房子,看似小間,沒想到踏入後又是另一片天,有張大大的木桌,氣派氣派,老師在熱心地請大家喝高山茶,剛剛那對夫妻則越來越少話,直到後面才發現,原來老師是賣藥酒的,就是那一兩幾千的鹿茸,看著我那鄰居,還說便宜賣給他們,並且看著他們受傷的地方,提供很多健身養氣的方式,但最終還是要他們買那瓶算一算幾萬元的鹿茸酒!


老實的鄰居就這樣抱了一瓶回家,但心裡越想越奇怪,後找我聊聊,彼此討論後,才想起來以前常常有在賣假藥酒的事,也是以一對夫妻去外地拉人的情境,賣的正是鹿茸酒,漸漸地也覺得越來越多的疑點,於是鄰居在我的建議下,展開小小地退件計畫。雖然那位老師一開始並沒有收錢,還特許過陣子再給錢,但這一切仍是太多奇怪的事。最後,幸運地終於把藥酒退還了!鄰居們心中的重擔也放了下來。


有一則小故事:「有隻小鳥在天寒中受凍,這時有隻大象在牠身上大了一坨熱熱大便,讓小鳥活了過來,然而牠仍動彈不了,不久後來了隻替牠拍掉身上的大便,卻一口吃掉了牠。」


人在低潮時期,很容易接受別人的援助,但有可能如同故事中的小鳥的遭遇,看似對牠壞的,其實救了牠一命,看似對牠好的,卻要了牠的命。對於身體保健,千萬不要購買來路不明的藥品,人體是豐富的化學變化,隨便用藥很容易造成連鎖反應而引起後遺症的,還是透過專業醫生的診斷處理才是維持健康身體的不二法門囉!盡管這次事件並沒有真正造成鄰居的損失,但也上了寶貴的一課囉!


相關網站:http://pharmacists.pixnet.net/blog/
衛生署藥物資訊網:http://drug.doh.gov.tw/
衛生署食品資訊網:http://food.doh.gov.tw
台南縣藥師公會:http://www.tainan-pharmacist.org.tw/


第一次用 Mac OS 的筆記 @ Mac 10.6.2

最近手邊多了一台 Mac Mini 可以用,所以還可以用來開發 iPhone 程式!只是對 Mac 不熟的我而言,反而什麼都用不順,就多筆記一下吧,並且我只有一般的鍵盤可以用。


之後會持續慢慢補東西



  1. 切換輸入法:視窗鍵+space

  2. 快速尋找:ctrl+space

    • 有點類似 Windows 上的 視窗鍵+r ,可以接著輸入 textedit 就可以叫出文字編輯器囉



  3. 安裝 Yahoo! 奇摩輸入法

    • 因為內建的輸入法有些不順手,改用 Yahoo! 輸入法後,關於一些標點符號可以用 ctrl + 鍵盤位置 打出來,另外一提的,在 Windows 上新注音選字是直接按下,但在 mac 上則是要按 space 囉,但換成 Yahoo! 輸入法後,就可以用下鍵去選字囉



  4. 使用 Safari 瀏覽器

    • 用 firefox 時,常常搭配 ctrl 做事,例如開啟新的一頁 ctrl+t ,在 mac 上是使用 視窗鍵,如 視窗鍵+t



  5. 很多在 Windows 或 Linux 上會搭配 ctrl 做事的,如全選、複製、貼上,請用視窗鍵還替換 ctrl 鍵囉

  6. 關於作業系統版本,請從最左上角 mac logo 點進去,裡頭有"關於這台 Mac",不用再傻傻用 uname -a 啦

  7. 安裝軟體後,在右下角有個長得很像資料夾的,上頭有個 A 字樣,可以從那邊去去找,但不是所有安裝完的軟體都可以在那邊找到

  8. 在 Mac 上的 Finder 有一點點類似在 Windows 上的檔案總管,快速鍵:視窗鍵+n

  9. 切換工作視窗:ctrl+F4


2010年2月22日 星期一

Facebook API Stream.publish 與 Extended permissions 應用 - 同步發文至個人塗鴉牆

這邊所定義的發文是指,當使用者允許某個 Facebook 上的應用程式,給予它 status_update 權力後,擁有 status_update 的權限時,將使得該應用程式擁有發布資訊到使用者塗鴉牆上的權限,可以用在同步資料的處理。這些也就上許多 Facebook 應用程式所使用到的基本互動,如玩遊戲玩到一半時,因為一些事件想要發怖到使用者塗鴉牆上來提供更多互動,像等級提昇、獲得獎品、菜園裡出現大蟲子等等的訊息。


Plurk Facebook Connect
來源:http://www.plurk.com


關於權限部份,請參考 Extended permissions - Facebook Developer Wiki 頁面,上頭有詳細的權限資訊。至於要讓使用者點選允許的方式,一開始我參考了 Plurk 同步發文至 Facebook 的權限設定,才發現原來有 FB.Connect.showPermissionDialog 這東西可以使用!非常方便,例如跳出要求允許 offline_access 權限:


 FB.Connect.showPermissionDialog("offline_access", function(perms) {
   if (!perms) {
     continue_without_permission();
   } else {
     save_session();
   }
 });


然而,我預計要開發的環境,可能連 Javascript 都可能不能跑,所以,我又參考了 Authentication and Authorization for Facebook for Mobile Applications ,發現也有簡單版的純網頁方式囉。


我把它寫成簡單的程式,列出權限清單:


<?php

define( 'APP_API_KEY' , '################################' );
define( 'APP_SECRET_KEY' , '********************************' );

function get_permission_url( $permission )
{
        $params = array();
        $params['api_key'] = APP_API_KEY;
        $params['ext_perm'] = $permission;
        $params['next'] = 'The next URL to request after the user logs in to your application.';
        $params['cancel'] = 'The URL to redirect a user who cancels the dialog.';
        //$params['display'] = 'wap';
        return 'http://www.facebook.com/connect/prompt_permissions.php?' . http_build_query( $params );
}

if( !isset( $_REQUEST['auth_token'] ) )
{
        $params = array();
        $params['api_key'] = APP_API_KEY;
        $params['next'] = 'The URL to redirect a user who successfully logging in to Facebook.';
        $params['cancel'] = 'The URL to redirect a user who cancels the login.';
        $params['v'] = '1.0';

        header( 'LOCATION: http://m.facebook.com/tos.php?'. http_build_query( $params ) );
        exit;
}

$p = array( 'publish_stream' , 'read_stream' , 'email' , 'read_mailbox' , 'offline_access' , 'create_event' , 'rsvp_event' , 'sms' , 'status_update' , 'photo_upload' , 'video_upload' , 'create_note' , 'share_item' );

foreach( $p as $v )
        echo '<a href="'.get_permission_url($v).'" target="_blank">'.$v.'</a><br />';
?>


上例是以 Mobile Device 為例,如果一開使未登入時,那就導回去登入頁面,若登入完後,那就會列出一個清單,每個清單上的項目就是一個超連結,點選超連結就會看到權限的確認頁面,清單如下:


publish_stream
read_stream
email
read_mailbox
offline_access
create_event
rsvp_event
sms
status_update
photo_upload
video_upload
create_note
share_item


以上一旦該使用者允許了 status_update 後,那程式其實就擁有遠端發訊息至個人塗鴉牆的權力,因為不需要 session 資訊,取而代之的是要去紀錄使用者的 ID。


以 PHP 當作範例(post.php):


<?php

define( 'APP_API_KEY' , '################################' );
define( 'APP_SECRET_KEY' , '********************************' );

require_once 'facebook.php';
$facebook = new Facebook( APP_API_KEY , APP_SECRET_KEY );

$message = 'message';
$target_id = 'uid';
$facebook->api_client->stream_publish( $message , null , null , null , $target_id );
?>


由於可以遠端發文,所以就不需透過瀏覽器來執行啦


# php post.php


若沒有彈跳任何訊息,那就代表發文成功吧!其中上頭的 $target_id 就是使用者的數字帳號 ID ,如 "123456789000",另外,倘若是使用以下程式碼


$facebook->api_client->stream_publish( $message , null ,  null , $target_id );


會得到 'parameter uid or session key required' 的錯誤訊息


Fatal error: Uncaught exception 'FacebookRestClientException' with message 'parameter uid or session key required' in /path/facebookapi_php5_restlib.php:3065
Stack trace:
#0 /path/facebookapi_php5_restlib.php(926): FacebookRestClient->call_method('facebook.stream...', Array)
#1 /path/post.php(9): FacebookRestClient->stream_publish('message', NULL, NULL, '123456789000')
#2 {main}
  thrown in /path/facebookapi_php5_restlib.php on line 3065


如果 status_update 的權限沒有給予,那就會有 'The user hasn't authorized the application to perform this action' 錯誤訊息


Fatal error: Uncaught exception 'FacebookRestClientException' with message 'The user hasn't authorized the application to perform this action' in /path/facebookapi_php5_restlib.php:3065
Stack trace:
#0 /path/facebookapi_php5_restlib.php(926): FacebookRestClient->call_method('facebook.stream...', Array)
#1 /path/post.php(9): FacebookRestClient->stream_publish('message', NULL, NULL, NULL, '123456789000')
#2 {main}
  thrown in /home/frank/public_html/threeupaxman/facebookapi_php5_restlib.php on line 3065


最後,比較完善但連線次數會較多的程式碼:


<?php

require( 'facebook.php' );

define( 'APP_API_KEY' , '################################' );
define( 'APP_SECRET_KEY' , '********************************' );

require_once 'facebook.php';
$facebook = new Facebook( APP_API_KEY , APP_SECRET_KEY );

$message = 'message';
$target_id = 'uid';
if( $facebook->api_client->users_hasAppPermission( 'status_update' , $target_id ) )
        $facebook->api_client->stream_publish( $message , null , null , null , $target_id );
?>


2010年2月16日 星期二

使用 Eclipse 3.5 安裝 J2ME (Wireless Toolkit) 開發環境 @ Windows 7

說真的上一次裝 Wireless Toolkit 開發環境已經算是 2005 年了。老實說我還真的忘了該做什麼設定,就透過這次記錄一下吧!或許改天就要寫寫 Amazon Kindle 的相關程式


首先是下載 J2ME 開發的環境,接著則是設定 Eclipse 環境,流程:



  1. 安裝 Eclipse 和 JDK 開發環境


  2. 下載與安裝 J2ME 環境



  3. 增加相關 Eclipse Plugin


    • [Help]->[Install New Software]

      • Work with:http://eclipseme.org/updates

      • 勾選 EclipseME 吧,在此測試版本是 1.7.9

      • 版權什麼得就要同意一下,沒多久也就下載安裝好





  4. 設定 Eclipse


    • [Window]->[Preferences]->[J2ME]->[Device Management]->[Import]

      • Specify search directory

        • C:\WTK2.5.2_01



      • 打完若沒有動作,那就按一下 Refresh 就行





  5. 測試 J2ME

    • [File]->[New]->[Project]->[J2ME]->[J2ME Midlet Suite]

      • Project New:HelloWorld

      • 接著點 Next 到 Finish 就行了



    • 點選 Eclipse 左邊的 HelloWorld->src ,接著按右鍵 [New]->[Class]

      • Name:HelloWorld



    • 接著就把 HelloWorld.java 使用以下的程式碼覆蓋,程式來源:J2ME Eclipse - Setting up development environment with EclipseME


      • import javax.microedition.midlet.*;
        import javax.microedition.lcdui.*;

        public class HelloWorld extends MIDlet implements CommandListener {
            private Command exitCommand;
            private TextBox tbox;

            public HelloWorld() {
                exitCommand = new Command("Exit", Command.EXIT, 1);
                tbox = new TextBox("Hello world MIDlet", "Hello World!", 25, 0);
                tbox.addCommand(exitCommand);
                tbox.setCommandListener(this);
            }

            protected void startApp() {
                Display.getDisplay(this).setCurrent(tbox);
            }

            protected void pauseApp() {}
            protected void destroyApp(boolean bool) {}

            public void commandAction(Command cmd, Displayable disp) {
                if (cmd == exitCommand) {
                    destroyApp(false);
                    notifyDestroyed();
                }
            }
        }



    • 最後存檔完就可以按 Run 來看看






eclipseme