2011年8月31日 星期三

Facebook App

Facebook App 是其中一樣打算學的技術。剛剛從友人公司中接到訂單,替她們開發一個 Facebook App,正正提供了一個很好的機會給我學習。花了一整天時間,還未能理解到它的運作方式;導致時要 Allow 一時就不用;一時有 Facebook 框架包著,一時就沒有。現在我以 PHP 來製作,稍後便要改用 ASP.NET,看來還有很長的路要走...。

2011年8月30日 星期二

伺服器推送(三)

Push Notification Part 3

剛剛接到另一個大公司的項目,會使用到伺服器推送。要發出推送,首先要建立一連串的證書才行,步驟如下:

1) 在 Developer Portal 建立新的 App ID
2) 完成後點 Configure 設定


3) 在 Enable for Apple Push Notification service 打勾
4) 並點選 Development Push SSL Certificate 後方的 Configure 按鈕


5) 這時會要求你上傳 Mac 機的證書



6) 打開 Application - Utilities - Keychain Access
7) 點選 Keychain Access - Certificate Assistant - Request a Certificate from Certificate Authority...


8) 輸入電郵地址及名稱後,點選 Saved to disk,按 Continue 鈕把證書儲存到桌面


9) 返回瀏覽器,點選 Choose File 並選擇剛才輸出到桌面的證書,然後按 Generate


10) 推送證書便能成功生成,點 Continue 繼續


11) 點 Download 下載推送證書


12) 雙擊桌面上的 aps_developer_identity.cer 把它匯入到 Keychain Access
13) 返回 Keychain Access,點選 Login, My Certificates
14) 在 Apple Development IOS Push Services 上右擊後選 Export "Apple Development IOS Push Services"


15) 設定一個密碼後選 OK
16) 把證書以 aps_development_cert.p12 命名
17) 展開 Apple Development IOS Push Services 並點選你的 Private Key,右擊後選 Export


18) 把密匙以 aps_development_key.p12 命名
19) 有了以上兩個 p12 檔後,便要把它們轉換成 PEM 格式
20) 打開 Terminal 並跳轉到桌面目錄
21) 輸入 openssl pkcs12 -clcerts -nokeys -out aps_development_cert.pem -in aps_development_cert.p12
22) 輸入 openssl pkcs12 -nocerts -out aps_development_key.pem -in aps_development_key.p12


23) 輸入 openssl rsa -in aps_development_key.pem -out aps_development_key_noencrypt.pem 生成一個沒有加密的版本


24) 輸入 cat aps_development_cert.pem aps_development_key_noencrypt.pem > aps_development.pem 輸出最終證書檔


25) 證書製作完成

2011年8月27日 星期六

推薦信

公司中一個董事的思想與我很不同,時常要和他討論。今次就 Reference Letter 的議題上,討論應該是以方便同事求職而作出虛假的內容,還是避重就輕誠實地撰寫。他是前者,我是後者。雙方都各有論點。前者可能令同事能方便求職,後者則可能變為求職無用之物。只是「誠實」是我處事的核心價值,「負責任」是我的態度。否則 Reference Letter 只淪為門面東西,失去它的真實意義。不過,亦可能我太過理想化,坊間所有的 Reference Letter 也可能根本地是門面東西,只是作為補償員工心靈上的工具。最後,由於他是掌管人事事務,所以交由他作最終決定。他接納了我的意見,而我亦讓步留一點空間,不再爭取完美的推薦信。

2011年8月26日 星期五

解僱

BeyondZ 第一批員工快將完成三個月的試用期,因此董事們需要作出取捨的決定。經過多次的討論,我們決定放棄其中一位同事。這是一個艱難的決定。我工作了十八年,帶領過二十二位下屬,當中有兩人想開除,但卻沒有一個發生。正如 Steve Jobs 所言:「不幸地,這天終於到來」。今次真的要發生了。從理性角度來看,同事不達到要求,把它開除是自然不過的事;不過,心裡總是忐忑不安、難以啟齒的感受。

還記得一位董事問我,認為自己是感性的人,還是理性的人。識認我的朋友,看到我的煩惱絲就知道我是理性那一類。我不否認,也不確認。原因是我很理性的同時亦很感性。平常理性的行為,是因為了解到自己的感性是一大弱點,所以要用理性來包裝。可是,遇到某些情況,還是感性戰勝了理性。雖然我盡力找理由來讓自己過得舒服一點,可惜卻沒有效用。就今次事件來說,我不認為是開除,只是試用期完結,認為因了解而分開吧。但被解僱的同事一直都很努力,加上他的家境不好,老爸有病;總總原因使我產生一點罪惡感。不過,人生就是這樣,要面對的還是要面對。在此希望那位同事能有更好的生活,有緣再聚。

2011年8月24日 星期三

管理的藝術

在一個團隊裡,有著不同的角色,有著不同的能力。作為一個團隊的領袖,怎樣協調整合是一大學問。究竟怎樣才是成功的領袖?我很有信心能製作出滿意的作品,但只有精英才能留下來。如果是善用下屬的長處是成功的話,那就只能做長處方面的作品。如果是能引發下屬的能力是成功的話,好像比較能長遠發展,但亦需要長時間把這個特質訓練出來。我仍然未找到適合自己的方向,希望不用花太長時間吧。

2011年8月23日 星期二

聘人聘能力?還是態度?

Ability or Attitude?

在聘人的範疇上,以前我是聘能力,現在則是聘態度。有這樣的轉變,原因是在 U1 時聘請過一位很有能力的美工,我很喜歡他的作品。他那頹癈仔細的畫風,很有個人風格。不過,他的態度不好,無法配合同事的工作,最終項目閣置,他亦離開 U1。無論他在哪一家公司工作,都有著相同的遭遇;公司不是倒閉,就是項目告吹。雖然在遊戲界有數年的工作經驗,但卻沒有一個上市的作品。讓我學習到,即使多麼有能力的人,如果欠缺適當的態度,還是無法任用。不單止會影響其他同事的工作,對團隊來說也是一個負累。

自此之後,我以態度為聘人的優先準則。因為一位有良好態度的人,經過努力之後,比起有能力沒態度的人優勝。我一直都有這個信念。現在我遇到一個態度十分良好的美工,可是經歷過三個月的時間,仍然無法另到他的作品合乎水準。我開始對我的信念產生疑問...。美術雖然是主觀的藝術,但還是可以量化。要提升畫功,是需要長時間的啄磨...。對於小公司來說,是一個壓力。

2011年8月22日 星期一

關閉 iPad Canvas 的點選效果

Close Canvas Highlight When Using iPad

在 iPad 上編寫 WEB App 遇到了不少難題。這是一個學習的機會。就像在點選 Canvas 時,會出現暗一暗的情況。對於要利用 Canvas 進行操作的畫面,實在是一個滋擾。解決的方法是在 CSS 中加入以下語句:

-webkit-user-select: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);

2011年8月20日 星期六

矇騙 Brother MFC-240C 的墨水水平

Cheating on Brother MFC-240C Ink Level

用了 Brother MFC-240C 已經很久,換了很多個墨水匣。問過製造代用墨水的朋友,他指 Brother 系列的打印機為了確保噴頭不被墨水堵塞,會經常自行清洗噴頭,導致墨水消耗得很快。不過當我在更換墨水匣時,仍然能看到匣內餘下不少的墨水,實在浪費之餘又不環保。而且還有一個腦殘設計,就是當其一個墨水匣沒有墨時,機器是無法繼續運作,連掃瞄及傳真等與墨水無關的功能也被禁止。

今天終於忍不住要修理一下它。原來每個墨水匣都有一個透明的部份,讓用家能看到墨水匣內的墨水水平。這個位置同時也給打印機檢查墨水供給情況。它的原理是一邊發出光線到另一邊,當光線能穿透墨水匣,便代表墨水量仍然充足。要矇騙 Brother MFC-240C,只要用不透光的膠紙把它如圖般封住即可。留意這個方法有機會導致噴頭因缺墨而發生問題,所以使用時要留意墨水水平。

2011年8月19日 星期五

iPad 橫屏直屏的 CSS 設定

CSS Settings of iPad Portrait and Landscape Mode

在設計軟件時,我喜歡做到盡善盡美。製作 iPad WEB App 時,就想到了直屏及橫屏時,應該要有不同的版面排列方式。原來 CSS 是支援這個設計。例如正常的 CSS 是以橫屏為基礎,只要加入

@media only screen and (orientation:portrait) {
...
...
}

當中的設定是直屏的,就能支持這個設計。當然 DIV 的架構亦需要作出安排。有興趣可以參考:http://matthewjamestaylor.com/demos/ipad-css-layout/index.html

2011年8月18日 星期四

在 iPad 的 Safari 下取消捲屏

Disable Scrolling on iPad Using Safari

拖拉動作本身是捲動網頁內容的一個控制方式;若果要在 WEB App 中做出拖拉動作,就需要調用以下語法。

document.ontouchmove = function(e) {e.preventDefault();}

更新:2011.08.22
要還原的話,可使用以下語法:

// Enable scrolling
document.ontouchmove = function(e) {}

2011年8月11日 星期四

WebSocket 的問題

WebSocket Problem

在製作 WebSocket 時,發現在數據傳輸量突然增加的情況下,WebSocket 伺服器會一次過收到多個數據,這時我們需要把連續的數據分拆成獨立數據後再作處理。起初我是使用 PHP 的 split 來達成,後來則改為 explode。原因是 split 有時無法正確地把數據分拆出來。當接收到連續數據時,數據之間是以 0xff, 0x00 來分隔。這是透過顯示數提的十六進制碼後才得知,花了一點時間我才弄清楚。

還有另外一個問題一直困擾著我。無論試多少次也好,在 WebSocket 成功連線後的第一個通訊永遠發生錯誤。最後同事 Hanon 找到解決方法是在 Handshake 的時候,不要傳送 \r\n 就可以。

2011年8月10日 星期三

SSH + PHP + MySQL

今個星期終於跟一個尊貴的大客戶達成協議,由 BeyondZ 開發一個 iPad App。考慮到更新的方便性及不受 UDID 的限制,希望除時能加減 iPad 的數量;我選用了 WEB App 方式,利用最新的 WebSocket 技術連線,把數據即時同步到每一台 iPad。

為了達到以上目的,我需要建立一個 WebSocket 伺服器及 MySQL 作為數據儲存中心。可是,當伺服器要連接數據庫時,就發生了 PHP Fatal error: Call to undefined function mysql_connect()。明明在同一個伺服器,已經有數個 Apps 的接口在使用 MySQL ,而且運作正常,可是卻說沒有 mysql_connect()?!真是奇怪。搞了一晚,問過不同的朋友,開始有點頭緒。情況相信是 Apache 本身加載了 MySQL,但 PHP 本身卻沒有。搞了一晚不成功,今早繼續;終於找到了解決方法。只要利用 SSH 登入伺服器後,輸入「ipkg install php-mysql」。完成安裝後便能讀取跟 phpMyAdmin 相同的數據庫!

2011年8月7日 星期日

iOS 5.0 Beta 5

iOS 5.0 Beta 5 剛剛出爐,可是我在 iPhone 4 的設定內進行更新是卻指已經是最新版本。看來需要用 PC 更新了...。

2011年8月5日 星期五

iOS 5.0 Beta 1 失效

今天公司的 iPad 2 及我太太的 iPhone 4 不約而同地顯示出「Setup 畫面」。經查證後發現原來是 iOS 5.0 Beta 1 在今天失效,必須要往上升級才可以...。

2011.AUG.09 更新
對於有報導指今次 Beta 1 的過期是 Apple 針對不守規矩的開發人員所販賣的 Device slot 而實行;後來亦有報導澄清過期只是單純的過期,沒有其他動機。不過,我偏向相信前者。原因是我是其中一位受害者。事件是我開發用的 iPad 安裝了 Beta 1 之後一直沒有升級。而我的 iPad 沒有把應用程式同步,當中安裝了 Numbers 及建立了一些會計文件。Beta 1 在過期之前完全沒有任何提示,不幸的是我沒有備份,所有文件就從此消失了。對於一直為設計而感到自豪的 Apple,這是一個相當大的錯誤。問題是為何會發生這個錯誤?在開發 Apps 的時候,每台開發機都需要安裝 Provisioning Profile,這個 Profile 在到期前會不停彈出提示。亦即是說這樣的到期前提示系統是已有的,不可能沒放到 iOS 的過期檢測中。所以,我認為今次的過期事件是 Apple 故意對付非開發人員的 Beta 用家,只是拿個過期籍口出來做擋箭牌而矣。

2011年8月4日 星期四

Grilli 3D


BeyondZ 的客戶都很愛新科技及新創意。為了滿足客戶的需要,最近我們訂購了一塊能在 iPad 上以裸視方式顯示 3D 影像的保護貼。同事收到後當然立即一試效果。為了達到最佳展示效果,我們以官方的示範程序及影片來進行測試。

對於我來說,效果有如那些古老的兒童間尺;在不同角度會看會出現動畫那種。3D 並不突出。相信看得久會對眼睛造成不適。所以這個產品已經即時打入冷宮,永不翻身。

2011年8月3日 星期三

Location Monitoring


今天針對 Location 做了個小程式。其主要的功能是當 App 設置成背景程式後,當 iPhone 移動到指定地點時,能收到通知及打開程式。原本這是沒有可能發生;但由於這個功能很有價值,所以我從 WWDC 著手,學習能達到這個目標的投術。最終成功了,實在很高興!

2011年8月2日 星期二

CMMI Level 3

今天跟一個大機構為新項目進行討論,在會議上提出了所有承辦商都需要有 CMMI Level 3 證明。由於我不知道那是甚麼東東,所以當其時我不以為然;直至回到公司後 Google 一下,才發現是一個像 ISO 的認證制度,用來量度一家公司開發軟件的成熟程度。由於找不到申請認證的方法及渠道,於是我向跟軟件開發有關的朋友查詢,所有人也不知道 CMMI 是甚麼。最後得到 Facebook 的協助,才得知認證所費不靡之餘,亦十分耗時,而且更同編程人員掛鈎。對於只屬小企的 BeyondZ,實在是一個障礙...。