2011年5月28日 星期六

Interface 5 月號 2011


Interface 雜誌 5 月號又送出基板。今次是 RX62N,可以接駁 USB, LCD, LAN, SD 卡等常用的接口,對於製作機體十分好用。

2011年5月25日 星期三

讀取 WordPress 內容

Reading WordPress Content

上星期有朋友到 BeyondZ 找我編寫一個能讀取 WordPress 內容的 iOS Apps。WordPress 這個大名我已經聽了一段時間,今次乘機研究了一下,的確功能強大兼好用,介面也很美觀。我也把它加入到 BeyondZ 官網內,作為消息發放的平台。

我利用 PHP 編寫了一個簡單的接口程式,便能成功讀取到 WordPress 內容。不過,朋友指在 WordPress 內打開 XML-RPC 能達到相同效果,這個我真的不知道,有待去證實一下。

2011年5月22日 星期日

十字路口

Crossroads

我的 Facebook 已經取代 MSN 成為即時溝通工具。今日跟一位家長朋友在 Facebook 上就「養兒養女為了什麼呢?」交流過。她正站在十字路口上,希望她能好好看清楚,選擇最適合自己的方向。

我認為養兒育女除了是人的天職之外,確是豐富了自己的生命,令自己的生活更加精彩。小朋友是一份很獨特禮物,每位小朋友性格都不同,所需都不同,處理方法都不同,感受都不同。是對自己個人成長的一個挑戰!

2011年5月21日 星期六

5++長去作反

Parents Team Building

今天是一個很滿足的日子。滿足的不是從物質上,而是在心靈上。話說有五家家長各自取得了「B+ 偵探」的電影門卷。本來打算各自修行,隨著一個不經意的提問,大家決定聚在一起,一同欣賞電影。這本來是一樁平常不過的活動,但對於五個家庭來說,在周末放下女兒獨自玩樂,需要身邊人配合與支持之餘,亦要逃得過自己的良心,的而且確是很奢侈的一件事。

在決定大顆兒看電影之後便要解決購票事宜。我們其有五個家庭,當中四個家庭的換票証經已在手,能隨時換領戲票;一個家庭的換票証還未到手,需要到時代廣場換領。而由於時間的關係,其中一個持有換票証的家庭需要稍後時間才能自行換領戲票。我們需要利用手上的六張換票証去保證一連十個座位都能到手,始終星期六晚上八時遇上剛上畫一個星期的新片,還要是郭富城主打,晚一點都會被人買走座位。經過精密安排後,我們分開了三個時段購票,最終都能購入一連十個座位,開心快活地欣賞電影...。令我想起 12 年前在 IN117 期間所做的一切,一個充滿回憶的時光。

2011年5月19日 星期四

iAd 實作

Working with iAd

今日研究了一下 iAd。十分簡單易用,只要在畫面加入 ADBannerView 便完成。它能自動處理其餘事情。
 //  iAd banner
bannerView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, 0, rect.size.width, MAINVIEW_BANNER_HEIGHT)];
[bannerView setDelegate:self];
[bannerView setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:bannerView];
[bannerView release];

2011年5月18日 星期三

Social Plugin


前幾天看過弟弟的購買網站後,留意到沒有跟 Facebook 等平台拉上關係以增加曝光率,最簡單是加個 Facebook Like 吧。由於他對這方面不熟悉,所以我代為了解一下。原來 Facebook 推出了一個「Social Plugin」來達成以上事情。登記方法很簡單,進入 http://developers.facebook.com/docs/plugins/ 後,選擇想要的插件。我選了 Like Button。在 Step 1 中填上網址後點擊「Get Code」就行了。把生成出來的代碼放到自己的網頁就能出現 Facebook Like 了!我順便也把它放進公司的官網,感覺生動起來了。

2011年5月17日 星期二

AirPrint 實作

Working with AirPrint

AirPrint 也是商用軟件的一個重要功能。調用過程十分簡單。以下是打印 Default-Portrait.png 的代碼:

NSString *directory = [[NSBundle mainBundle] bundlePath];
NSString *fullPath = [directory stringByAppendingPathComponent:@"Default-Portrait.png"];
NSData *data = [NSData dataWithContentsOfFile:fullPath];

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
[printInfo setOutputType:UIPrintInfoOutputGeneral];
[printInfo setJobName:@"BeyondZ AirPrint DEMO"];
[printInfo setDuplex:UIPrintInfoDuplexLongEdge];

UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
[printController setDelegate:self];
[printController setPrintInfo:printInfo];
[printController setShowsPageRange:YES];
[printController setPrintingItem:data];

void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *print, BOOL completed, NSError *error) {
if (!completed && error) {
NSLog(@"[MainAppDelegate completionHandler] ### Unable to print...%@ (%u)", error.domain, error.code);
}
};
[printController presentAnimated:YES completionHandler:completionHandler];

2011年5月16日 星期一

伺服器推送(二)

Push Notification Part 2

上星期五卡在「推送通知」,經過兩天的休息,今天繼續解開這個難題。我發現 Apple 有一篇關於「推送通知」的疑難排解十分好用,名稱是「Technical Note TN2265 Troubleshooting Push Notifications」。我按照內裡的指引,把「APNsLogging.mobileconfig 」安裝到 iPad 2 內進行除錯,得到十分清楚的訊息。從「apsd」綫程得出「Connected to courier 4-courier.sandbox.push.apple.com」,代表能接駁到 Push Service,確認了客戶端是運作正常。

既然問題不在客戶端,那必然在伺服器端出錯。由於一直能以 SSL 方式接駁到 Apple 的推送伺服器,所以認為伺服器端也沒有問題。按照指引上的說明,最後得出的結果也是成功的。可是我發現「aps-environment」出了點問題,於是我把 iMac 內的所有 Cert, Private Key, Public Key 都刪除,重新製作。最後終於能成功推送!

2011年5月13日 星期五

伺服器推送

Push Notification

今日研究了一下 Push Notification。這個功能對於商用軟件來說十分有用,至少能省下用 SMS 發送訊息的成本。一個上午已經能完成伺服器端及客戶端的編程工作。可是卻花了整整一個下午仍然沒能成功推送。重新檢視過客戶端,能成功傳回 deviceToken,並發送到伺服器。設定中也確認了推送服務是打開了,運作一切正常。而伺服器端方面,Socket 能成功連接,Payload 的內容亦合符格式。所有地方都好像沒有問題。整個下午都是不斷思考出錯的地方,不斷進行測試,以排除問題的根源。可惜的是到目前為止仍然毫無頭緒...。

2011年5月11日 星期三

使用靜態程式庫

Using Static Library

在過往的編程項目中,我會把常用的程序分拆為獨立的 .m/.h 檔案,久而久之便成為一個「程式庫」。在很多項目都會用上這個「程式庫」。我的做法是把所有 .m/.h 都拷到新的專案內;但這不是一個好方法。較好的方法是把它們編譯成「靜態程式庫」的 .a 檔案。這樣能避免因一時方便對「程式庫」作出修改,令日後「程式庫」升級而導致發生問題。之前曾嘗試過製作 .a 檔,但卻限制於一是「模擬器」版本、一是「實機」版本。這個問題終於在今天得到解決。

我的做法是在項目資料夾中建立「Libraries」資料夾,然後把Release-iphoneos 及 Release-iphonesimulator 拷進去。之後把其中一個版本的 .a 拖拉到 XCode 的 Frameworks 內。再修改 Target 的設定,主要是 Library Search Path 及 User Header Search Paths。前者加入數值「"$(SRCROOT)/Libraries/BeyondZ/Release$(EFFECTIVE_PLATFORM_NAME)"」,後者加入數值「./Libraries/BeyondZ」。這樣 XCode 便會按當前的配置選用「模擬器」或「實機」版本。

最後,需要在「Other Linker Flags」加入「-all_load -ObjC」才大功告成。

2011年5月9日 星期一

圖案識別(三)

Pattern Recognition Part 3

上一星一直煩惱如何才能辨別圖案的內容,毫無頭緒及對策。這種程度的數學對於讀文科的我實在有點吃力。然而上星期已經把「紅色」像素選取出來,今個星期是時候處理「辨別」方面的部份。不知是不是多看書的原因(也許是看得機械人書籍多),腦中突然閃過一個方法,於是我便把它實現出來。結果令我很滿意!

2011年5月7日 星期六

圖案識別(二)

Pattern Recognition Part 2

經過兩天的努力,已經能在 iPhone 上實現到把紅色物找出來。這個能力基本上與我當年研發投影機加海棉槍遊戲的程度一樣。下一步便是戲肉~分辨圖像的內容!

2011年5月6日 星期五

終於都有卡片了

Name Card

卡片終於印製完畢。拿到手上的感覺比想像中良好,對稱程度也很滿意,顏色及紙質都不錯。唯獨是卡片背面的邊緣位置露白,感覺不夠專業。畢竟 HK$45 有 100 張,已經是很好的水準。下次要嘗試再好一點的紙質,希望能做出更專業的效果!

2011年5月5日 星期四

IPA 下載頁管理

IPA Over the Air Page with MySQL

上星期製作的 IPA Over the Air 頁面實在很好用,為了加強這個頁面的內容管理,我把它跟 MySQL 結合。這樣便能隨時控制甚麼人、甚麼時候能拿到甚麼版本。最重要的是方便!

2011年5月4日 星期三

圖案識別

Pattern Recgonition

今天研究了一下「圖案識別」,並著手製作示範程式。花了很多時間,才能正確讀取鏡頭的影像(原來會 90 度旋轉了)。我希望能識別出紅色的圖案,當獲得鏡頭數據後,便把它由 RGB 轉換為 HSL 格式。只要檢查 Hue 的範圍便能判定是否為紅色。出來的效果不錯,夾雜了雜訊,速度則不太理想,大約 2 FPS。後來把解像度改為 Low 之後,效能得以提升。明天會嘗試 OpenCV,看看會否來得簡單及快捷。