2009年11月2日 星期一

Django Testing

最近要開始嘗試 Test-driven development (TDD) 了,簡單地說就是以測試起家,什麼想做的事,第一件事就是幫它規劃輸入的參數與預期的輸出結果,然後就開始撰寫測試的程式碼,最後才開始填寫核心程式碼。


這樣的好處除了可以替案子留下測試的簡單驗證程式碼外,以避免未來案子過大造成的相互影響,也能更明確寫程式的目標,而唯一的缺點就是耗時間。以下紀錄 Django 在 apps 裡新增 testing 的環境。



  1. 在 project 中的 apps 裡新增 tests.py 檔案和 fixtures 目錄

  2. 在 fixtures 目錄裡準備一筆測資

    • ex: record_1000.json

    • 可從現有 database 匯出

      • # python manager dumpdata your_app > record_1000.json





  3. 撰寫 tests.py 檔案

    • import django
      import views as testingAPI

      class FuncTestCase(django.test.TestCase):
          fixtures=['record_1000']
          def test_MyFunc(self):
              tags='Testing for My Func'
              arg = 0
              result=testingAPI._MyFunc( arg )
              self.assertEqual(result["errorcode"],"0")

              return



  4. 測試

    • # python manage.py test your_app'




參考資料



2009年10月29日 星期四

Facebook API Template Bundle - 發佈到個人塗鴉牆的樣版設定教學

今早打算編寫新的 Template 時,在 Tools 頁面發現以下訊息:


Facebook will deprecate template bundles and their related API calls December 20, 2009.
Please start using stream attachments with stream.publish, FB.Connect.streamPublish, and Facebook.streamPublish instead.


這個衝擊說大不大說小不小!影響不大是因為我還沒很善用它,但我已經有點彈性疲乏啦,因為準備要塞進 Template 的資料,弄得很疲憊。不過,該做的正事還是要完成。


目的:


在 FBML 模式下,以 FBJS 達成過去 Facebook.showFeedDialog 的效果。


解法:


使用 Facebook.streamPublish 來代替,而原先的 template 部份將變成在 Code 裡。好處是可以少一次跟 Facebook Server 要資料吧。或許這也是 template 佔用資源而被拿掉的可能性??


除此之外,還需要用到 attachment 概念,就是以前寫在 template 上的資訊


程式碼:


<script type="text/javascript">
function do_post()
{
        var attachment = {
                'name':'Quiz',
                'href':'http://apps.facebook.com/your_apps/',
                'description':'good!',
                'caption':'{*actor*} is very smart!',
                'media':[
                                {
                                        'type':'image',
                                        'src':'http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Facebook.svg/200px-Facebook.svg.png',
                                        'href':'http://zh.wikipedia.org/wiki/Facebook'
                                }
                ]
        };
        Facebook.streamPublish( ''  , attachment , null , null , 'Message:' , null , false  );
}
</script>


接著在適當地地方呼叫 do_post(); 吧!



  1. 以 click 呼叫

    • <a href="#" onclick="do_post();return false;">Click Here!</a>



  2. 自動執行

    • <script type="text/javascript">
          do_post();
      </script>

    • 記得這段 code 要擺在 function() do_post{ ... } 後頭才用喔




收工。


參考資料:



相關文章



2009年10月26日 星期一

[電影] 男女生了沒 - The Ugly Truth


昨天看了這部電影,印象中好像也有幾部電影都用 "XXX 生了沒" ,說真的我反而比較喜歡英文的片名: The Ugly Truth !









戲劇主題是由一位能說善道的麥克帶領他的製作人艾比去把帥哥的故事,在這之前他們只是彼此看不慣的上司與屬下的關係,但隨著劇情的發展,越來越有趣。有興趣的可以在到 Yahoo! 觀看簡單的劇情簡介,在此就不加以贅述。


聊聊其他的感受,一開始有個片段是麥克教導艾比無論怎麼都要微笑應對,恰好跟片尾的麥克問艾比自己是不是那麼棒,那時艾比回他說:「You'll never know」,這段的呼應,讓我在一個人吃晚餐時想起來會有點暗自傻笑,恰好工作或餐廳環境常常會聽到別人高談闊論,而有些笑聲感覺好像聽起來很快樂,但細細品味又有種說不出來的空虛感?真真又似假假。


或許,不止男女間的互動,商場工作間,虛虛實實都難以完全地辨識,人在江湖身不由己!需要花點巧思拿捏好廣度與深度囉。


2009年10月24日 星期六

打包‧致未來

Lear


這是國二參加學校美西團時,認識一位美術班的 Lear ,在高中所送我的禮物。這是件特別的禮物,翻面過來則是簡短的幾句話兒,道述著對當年夏威夷、學校宿舍生活的回憶。這週在家打包東西,原本清了許多要丟要賣的,沒想到在這個時間點還能整理、佇留。


今天便就是我國高中的好友 Kudo 的結婚宴客日。許多回憶也湧上心頭。我手上恰好翻到國中國文老師把班上幾篇作文弄起來的文集,有 Kudo 寫的,也有高一下去美國的 Alex 寫的,有著許多青澀卻又帶味的文筆。這陣子在新的環境打滾後,開始有感未婚族群的勢力漸漸單薄囉


雖然來不及參與 Kudo 與 Gina 戀情的譜曲過程,但我想,看到國高中的好友能夠有這麼一段甜蜜深情的成果,可止難得兩字道盡。過去的事就交給歲月塵封,把未來再好好地邁進,再不用十一小時,就會在結婚宴會上碰面,更要正式地好好地祝福這對新人囉!


Wretch 無名小站 API - Yahoo! Developer

@2010/01/01 新增一篇更完整的教學:Wretch 無名小站 API - 申請、使用完整教學


記得以前寫過模擬瀏覽器的程式,像是模擬使用者登入、發表文章等程式,現在,終於不必再如此偷偷摸摸了!如果無名能夠再提供 XML-RPC 那就更好了!(好像也可以自己寫了?),先來測試一下無名小站 API 吧!參考資料如下:



至於要怎樣才能使用,我覺得比一般還麻煩一點點 :P



  1. 申請 API 使用權


    • 連到網站上,填寫一些資訊即可

      • Kind of Application : Web-based

      • Application URL :  你家程式想跑的位置

      • Application Domain : 這比較麻煩,似乎不能帶 port 資訊

      • Access Scopes : 記得要選無名小站 Wretch 的 Read/Write 啦



    • 之後就會要確認 Application Domain ,要在網站根目錄擺在特定的檔名供 Yahoo 認證。

    • 如果蹦出 Domain Verification Failed 訊息

      • There was an internal error while an application is being created. Please try again.

      • 如果你沒用網域只有 IP 的話,請先申請個 Domain 吧!例如 http://tw.twbbs.org 可免費申請,一開始我懶的弄,僅用 IP 位置,結果在這邊卡關就不玩了 :P 幾天後我終於去申請網域後再 Try 成功囉





  2. 下載 PHP Library


  3. 測試 PHP 程式

    • 需要支持 curl 喔 (其實hack也是用這個lib寫的 XD)


      • sudo apt-get install php5-curl (Ubuntu安裝法)



    • <?php  
          require("Yahoo.inc");  

          // Your Consumer Key (API Key) goes here.  
          define('CONSUMER_KEY', "");  

          // Your Consumer Secret goes here.  
          define('CONSUMER_SECRET', "");  

          // Your application ID goes here.  
          define('APPID', "");  

          $session = YahooSession::requireSession(CONSUMER_KEY,CONSUMER_SECRET,APPID);  
      ?>

    • 將上述的相對位置弄一弄後,連過去就會將你導去 Yahoo 登入畫面,登入完就回到你的程式了

      • 登入者會收到 Yahoo 寄來的信件,其標題類似於"你的 Yahoo! 帳戶現已與 xxx 連結",也可以再解除設定,就像在 facebook 上玩遊戲時的情況一樣,不想用可以再拿掉。






以上都搞定了,那代表可以真的開始寫程式囉!以下是一些小小的讀取範例!程式如下(別忘了加上上述測試Session的程式碼):


<?php

$yahoo_user = $session->getSessionedUser();

// Profile
$url = 'http://wretch.yahooapis.com/v1/profileService/'.$yahoo_user->guid;
//$response = $session->client->get($url);
//print_r($response);

// Albums
$url = 'http://wretch.yahooapis.com/v1/albumService/'.$yahoo_user->guid.'/albums';
//$response = $session->client->get($url);
//print_r($response);

// Blog
$url = 'http://wretch.yahooapis.com/v1/blogService/'.$yahoo_user->guid.'/articles';
$response = $session->client->get($url);

print_r($response);


?>


寫入範例,建立相簿。但很奇怪地建出來都沒照我想要名字或敘述?比較想試的其實是發表文章至無名小站,但測試的結果都是錯誤訊息?改天有空再玩玩吧。經由 GTStudy 提醒,在 POST  的 contentType 設定成 "application/xml" 就可以成功建立相簿囉!我也順道找了一下投影片,裡頭的敘述果真詳細了一點,第 18 頁的確有看到這個關鍵字,十分感謝!


<?php

$yahoo_user = $session->getSessionedUser();

$url = 'http://wretch.yahooapis.com/v1/albumService/'.$yahoo_user->guid.'/albums';

$content = <<<multi_line_end
<?xml version="1.0" encoding="utf-8"?>
<req>
  <title>My title</title>
  <desc>My desc</desc>
</req>
multi_line_end;

//$content = simplexml_load_string($content);

$request = Array (
        'class_id' => 1
);
$url .= '?'.http_build_query( $request );

$contentType = 'application/xml';
$response = $session->client->post( $url , $contentType , $content );

print_r( $response );
?>


雖然無名小站正式提供不錯的 API ,但我覺得能提供如 MetaWeblog API 將會是更好的服務,但也許是綁著 Yahoo 帳號的關係,在管控上已經不能簡單化。更多 API 細節請至 Wretch API 文件 查看。