2014年1月9日 星期四

Django 多國語系

 

Django 多國語系是利用 gettext  來製作的,在 windows 上需下載下方的壓縮檔。

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-tools-0.17.zip

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip

 

解壓縮在同一個資料夾(例如 C:\gettext\ ),並在 windows 環境變數 PATH 中新增 C:\gettext\bin\

 

接著便可以在有 locale 的 app 中下達例如:

django-admin.py makemessages -l zh_TW

 

這會自動去該 app 底下搜尋當初標記多國語言的文字,並在 locale 資料夾下產生該語系的翻譯檔:

app\locale\zh_TW\LC_MESSAGES\django.po

 

接著便是打開上述檔案編輯,翻譯。

 

 

都完成後,下達下方指令進行編譯(會產生.mo檔)

django-admin.py compilemessages

 

這便是 django 多國語系最後需要的檔案了,只要你的 app 底下有此檔案,那麼便可以使用該語系呈現。

2013年12月11日 星期三

Objective-C RestKit 2.0 的介紹與一個簡單範例

 

RestKit 是一個 open source 的 Objective-C 套件,支援 iOS 與 Mac OS X。
https://github.com/RestKit/RestKit


RestKit 幾乎完整包裝了所謂 MVVM 架構中的 VM,只要做些微調整,便可以輕易將 RESTful 的 API 轉換成 Objective-C 中的 Models。跟 Core Data 也進行了高度整合。

RestKit 中,只需要透過 RKObjectMapping,便可以將 API 回來的結果轉換成你所指定的 Model,這是一個簡單的範例,

有一個 Model - User 結構如下

@interface User : NSObject
 
@property (nonatomic, copy) NSNumber *userID;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *screenName;
 
@end
 
 
建立 RKObjectManager 以及 API 的 base URL
NSURL *baseURL = [NSURL URLWithString:@"http://[API HOST]"];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL];
 
 
 
 
透過 RKObjectMapping 建立 API 的 index 與 User 的 property 的對應,例如
RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[User class]];
[userMapping addAttributeMappingsFromDictionary:@{@"id" : @"userID", @"screen_name" : @"screenName", @"name" : @"name"}];
 
 
API 的結構像這樣
[{
    "user": {
        "id": 31337,
        "name": "Blake Watters",
        "screen_name": "Blake Watters"
    }
}]
 
 
 
將 RKObjectMapping 註冊進 RKResponseDescriptor
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping
    method:RKRequestMethodGET
    pathPattern:@"[API URL pattern]"
    keyPath:nil
    statusCodes:[NSIndexSet indexSetWithIndex:200]
];
 
 
將 RKResponseDescriptor 註冊進 RKObjectManager
[objectManager addResponseDescriptor:responseDescriptor];
 
 
 
接著透過 RKObjectManager 的 getObjectsAtPath 呼叫 API 便可以成功轉換了!
[objectManager getObjectsAtPath:@"[User API URL]" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    // success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    // failure
}];
 
 
很神奇吧!其中還有許多細節沒有解釋到,例如 HTTP 的 status code 也會因為 RKResponseDescriptor 的描述影響 getObjectsAtPathsuccess or failure
 
其他細節只能實際使用才能細細品嚐了。
 

2013年11月16日 星期六

API with logined in objective-c(iOS)

 

The UIWebView will handle session & cookie.

UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.frame];
[self.view addSubview:webView];
 
NSString* username = @"";
NSString* password = @"";
 
NSURL* url = [NSURL URLWithString:@"https://ic.ridgefield.org/campus/verify.jsp"];
 
NSString* body = [NSString stringWithFormat:@"appName=ridgefield&username=%@&password=%@", username, password];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30];
request.HTTPMethod = @"POST";
request.HTTPBody = [body dataUsingEncoding:NSStringEncodingConversionAllowLossy];
 
[webView loadRequest:request];

 

接著只要利用 UIWebView 的物件呼叫 API,那麼就是以登入的身分執行API。

2013年10月5日 星期六

Bootstrap 2.x to 3 升級小札

 

最近從 Bootstrap 2.x 換到 3,不過倒不是因為功能性的問題,而是我比較喜歡 3 的風格。

 

這是一個直接將 HTML 轉換的線上工具,左方表格也標註了大部分需要轉換的 class

http://upgrade-bootstrap.bootply.com/

 

當然我也以為這樣就好了,但沒想到還是遇到陷阱(目前發現兩個)

 

class alert 取消 alert-error class,必須統一使用 alert-danger

image

 

2.x row 的 span 效果與 3.0 row 的 col 效果不同,3.0 並沒有在左右加上一點 margin

2.x

image

 

3.0

image

 

以上,有遇到再紀錄。

2013年9月30日 星期一

IE 測試工具 IETester

SNAGHTML22107d5

 

IE 是所有網頁設計師的惡夢,這應該不用多說,但網站若不支援到 IE7,仍是會引起眾怒…

而 IETester 可以同時建立不同的 IE 環境,方便開發者們檢視,介紹給大家。(甚至到 IE 5.5 都可以,是要逼死誰…)

http://www.my-debugbar.com/wiki/IETester/HomePage

2013年7月15日 星期一

「學習新技術」有感



學習新技術的同時,你必須清楚知道自己究竟為何而學,新技術究竟幫你解決了什麼問題?而同時會帶來什麼問題?

如此一來,這才是有效學習。

摸新技術通常為潮流、為酷炫,這是程式人的通病,我也是,對任何新技術都非常好奇,但,這只能當做你接觸他的理由。

尤其是實際使用他、選擇他時,你不應該像個信徒一樣,一昧的只是想用。

當我問起:「他好在哪?」,你可以興致勃勃的說出十幾個理由;但當我問起:「他不好在哪?」,你卻連五個理由都擠不出來。

那麼,他真的這麼好嗎?

每種技術都有其優缺,絕沒有完美解決問題的技術,隨時保持自己中立清明的立場與態度,你才能真正學習到這個技術。

畢竟,技術存在的本質終究在解決問題上,如果新技術完美的解決了十個問題,卻引發了十個更難的問題,那真是本末倒置了。

當然,如果你摸新技術完全只為興趣,未來絕不會有用到的一天,那麼此篇文章對你來說沒有任何意義。

2013年7月9日 星期二

使 mac 左方 command key 成為 windows(in VirtualBox) 裡面的 windows key

若要使 mac 左方的 command key 成為 windows(in VirtualBox) 裡面的 windows key,那麼我們必須置換 VirtualBox default 的 host 位置,請參考下方連結。

http://helpdeskgeek.com/virtualization/change-the-host-key-in-virtualbox/