2014年9月27日 星期六

創富媒體 07:測試的難處


文章刊登於「創富媒體

近幾年的手機潮流帶動了流動應用程式行業的發展。很多客人為推廣他們的生意、他們的品牌,都會選擇編寫流動應用程式。既然造出了程式,作為客戶,當然想自己的應用程式在最多的平台、最多的手機上順暢執行。究竟要如何才能達成這樣的一個夢想?

先說 iOS 平台。iPhone 及 iPad 兩類,解像度有 640x480, 640x1136, 750x1336, 1080x1920, 768x1024, 1536x2048 六款。系統不是人人都會升級,亦不是所有 iPhone 及 iPad 都能升到最新版本;要讓最多人使用,就必須支援最新兩代系統,亦即是 iOS 7 及 iOS 8。好了,假設相同解像度的不同機型不會出現問題,像 iPhone 4 及 iPhone 4S 當成一款;把 iPhone 5, iPhone 5c 及 iPhone 5s 當成一款。要完全確保應用程式能在以上的機型執行無誤,最少要試 6 x 2 = 12 部機。已經沒有考慮 iPod 的支援。12 部機也要成本吧,以分擔方式計算,一台 HK$1000 的話,這裡已經花掉 HK$12000。如果是以機型作為測試準則,扣除較舊的型號,代價將會是 12 x 2 x $1000 = HK$24000。還未計算測試的時間成本及開發成本。開發 Android 的費用只比 iOS 高 10%-20%,但機型、系統、解像度更多,質素更參差。相乘出來的維度更大更廣。只要想一想,普通的一個應用程式只是三五八萬,測試花去 50%-400% 的開發費用,根本是無得做。

但是要跟客人好好解釋是十分困難。一來打得電話來訴苦一定是出了狀況;二來客人的心情必然是差,而且想盡快作出改善或修正,那會有甚麼心情聽我們的解釋?就算解釋多麼合理,報價書上寫得多麼清楚,客人都會認為是開發者的責任。所以,做寫 App 的其實有很多不為人知的難處,錢不是外界想像得那麼容易搵...。

2014年9月26日 星期五

LINE 貼紙第一彈:Mobile Rangers


公司開發的《Mobile Rangers》中有五個角色造型不錯,想拿來做點遊戲以外的東西。我選擇了 LINE 貼紙。經過兩個多月的審批,終於能上架跟大家見面:https://store.line.me/stickershop/product/1023036/en

2014年9月24日 星期三

iReserve 的銷售情況


iReserve 一直都不是我杯茶。不選擇的原因不是不想,而是老人家手腳慢,要在十分鐘內定輸贏的遊戲中勝出,沒有把握。沒錯,參與得就要贏。而贏不是靠運氣,是靠實力及精密計算的才適合我。知己知彼,才能百戰百勝。

雖然我無法在 iReserve 爭到甚麼,但倒也想了解多些。很多炒值率高的機型基本上看不到影蹤。為了證實是載入得慢而被掃空,還是一開始就沒有貨,於是在早上做了一次實驗。直接載入記錄貨存的 JSON,看看 iReserve 的變化。

八時正,JSON 還未能載入,總是要待多六至八秒才正式開始。JSON 每分鐘更新一次,總是在六至八秒更新。花了八分鐘,所有型號已被預訂。手腳慢點,打短訊慢點,一條毛都爭不到。很明顯,開賣時不是所有機型都有貨。那麼,iReserve 更加不適合我。

2014年9月23日 星期二

創富媒體 06:機會只留給準備好的人


文章刊登於「創富媒體

這兩星期,有很多朋友突然打來。他們都知道我是開發流動應用程式,對蘋果的事情很了解,想取一點經。無他,大家都是想從炒賣 iPhone 中賺取一點零用錢。

在 9 月 12 日的蘋果網上商店開賣過後,簡稱 AOS(Apple Online Store)。不少朋友及客戶都跟我說訂不到 iPhone 6、訂 iPhone 6 Plus 更是非常困難。其實蘋果公司已提前在官網預告 9 月 12 日下午 3 時開賣。大家得到的資訊是對稱的,不像以往需要守候 AOS 開賣。在公平的機會中,仍然會有人得、有人失。但當中的差別究竟是甚麼?

我認為「機會只留給準備好的人」。

在開賣前,有些朋友預早做定功課,了解 iPhone 6 及 iPhone 6 Plus 的分別,從而估算哪款手機受歡迎、哪個容量最好用、哪隻顏色最好炒。有的更先行瀏覽網頁,熟習購買介面及流程。甚至乎為了賺取最大利潤,更會註冊數個 Apple ID,設定好信用卡及地址。務求開賣一刻,以最矯健的身手搶購最多的手機。很多人以為每個 Apple ID 只能購買兩台 iPhone,要是有做功課的話,便會知道是 iPhone 6 兩台及 iPhone 6 Plus 兩台。合共最多四台。在開賣時,電腦、手機、平板、網頁及 Apple Store 應用程式一齊出動。預先以 Apple ID 登入好。哪個先成功載入頁面,就用哪個平台購買。

又例如 9 月 16 日及 19 日,蘋果開放 iReserve 預約手機服務,有的朋友在事前研究香港三間蘋果商店中,哪一間人流最旺、哪一間貨源最多。估算 iReserve 開放時,哪一間最容易預約。甚至乎研究出哪一家電訊商在收發短訊方面最快最準。同時把 Apple ID、電話號碼、短訊應用程式都準備好,隨時「Copy & Paste」。對於 iReserve 這種十分鐘內定天下的遊戲,每個細節都能影響大局。一子錯,滿盆皆落索。有朋友在 iReserve 開放時一直在等不到結果,後來發現她在 AOS 那邊等,難怪沒有任何更新。問題出在她沒有做好功課,把 AOS 及 iReserve 兩個服務給攪亂了。幸而,iReserve 變成每天開放,汲收了教訓,經驗豐富了,成功指日可待。

準備得充足,跟沒準備的人,結果當然不一樣。機會只留給準備好的人。

2014年9月22日 星期一

《AMIGO Controller 2.00》的手勢輸入介面


提交了《AMIGO Controller 2.00》之後,繼續剛開始的手勢輸入介面。這個介面是用來解決因光滑畫面所缺乏的觸感,導致要經常望著畫面的問題而設。由兩指到三指到四指操作,每組四個動作,合共可控制十二組動作。相信能滿足 RBL 格鬥比賽的需要。

我喜歡簡約的設計,因此手勢輸入介面也製作得足夠簡單。希望控制員能在不望畫面的情況下順利而快速的出招,加強機體的反應,提升《Tri Robot》的整體水準。經過嘗試後,操作方法能夠確定,下一步便是開發調換動作的介面。

2014年9月21日 星期日

《AMIGO Controller 2.00》對應實體控制器


在提交《AMIGO Controller 2.00》後發現了比較嚴重的問題,不得不把它拉下架。花了點時間修正,準備重新上架。既然要重新提交,於是把「對應實體控制器」的想法付諸實行。

花了點時間把控制器程式加入。控制器要先行在系統設定中配對好才能使用。這個步驟只需要做一次,日後直接打開控制器便能使用。當控制器成功連接後,在「急停」下方會出現提示燈號;若沒有連接則不會看到燈號。簡單測試過後一切正常。於是在今天提交到 Apple 審批。希望能在十月初供大家下載。


目前僅支援對應 iOS 的正統控制器。而且是進階版的控制器;普通版控制器暫未提供支持。進階版指的是有方向鍵、A、B、X、Y、L1、L2、R1、R2 及兩個類比搖桿鍵的控制器。普通版指的是少了 L2、R2 及類比搖桿的控制器。摸擬藍牙鍵盤類的控制器並不支持。

2014年9月20日 星期六

Auto-Build-Count for Xcode 6


自從幾日前提交《AMIGO Controller 2.00》時發現「CFBundleVersion」會被視作應用程式的獨有版本有可能引起在 iTunesConnect 中的錯誤後,我嘗試把自己慣用的「Auto-Build-Count」修改為適合 Xcode 6 之用。只需要簡單的改動便能達到自動生成版本號碼:
buildCount=$(/usr/libexec/PlistBuddy -c "Print 'Build count'" "${PROJECT_DIR}/AMIGOController/AMIGOController-Info.plist")
buildCount=$(($buildCount+1))
/usr/libexec/PlistBuddy -c "Set :'Build count' $buildCount" "${PROJECT_DIR}/AMIGOController/AMIGOController-Info.plist"

appVersion=$(/usr/libexec/PlistBuddy -c "Print 'CFBundleShortVersionString'" "${PROJECT_DIR}/AMIGOController/AMIGOController-Info.plist")
/usr/libexec/PlistBuddy -c "Set :'CFBundleVersion' $appVersion.$buildCount" "${PROJECT_DIR}/AMIGOController/AMIGOController-Info.plist"

2014年9月17日 星期三

挫折重重

本來在上周二提交的《AMIGO Controller 2.00》,由於發現了數個問題,唯有先進行修改,因而錯過了在蘋果發佈會前的機會。當發佈了 iPhone 6 的消息後,所有新提交的應用很大可能需要支援 iPhone 6 及 iPhone 6 Plus 的解像度。正如所料,提交介面多了這兩台機的截屏圖片項目。經過幾天的修改及測試,今天能正式上傳。可是卻遇到重重挫折。


在 Xcode 生成好要提交的版本後上傳,彈出了「Couldn't read PKZip signature」。以前沒有這個訊息,單看字面以為檔案出了狀況。


研究過後,原來在 Plist 內的「Application requires iPhone environment」需要設定為「YES」。


Plist 代碼的話,則是「LSRequiresIPhoneOS」設定為「true」。


再次提交,又出現另一個問題「Invalid Pre-Release Build. There already exists a binary upload with build version '2.0' for train '2.0」。又是新東東。


原來上傳的 Build 版本跟 iTunes Connect 上的 Build 版本一樣。這個 Build 版本可以在 Build Settings 中的 General 畫面設定。由於《AMIGO Controller 2.00》是第一次提交,那我索性把 Build 版本設定為「1」。


雖知彈出了「Invalid Pre-Release Build」錯誤。新上傳的 Build 版本號必須大於已上傳的那個。這樣,我只好跟自己的版本號。終於成功上傳。不過,又出現另一問題...。

在「Versions」提交畫面內的「Build」區域中,點擊 Build 2.0 版本後按「Save」。「Submit」按鈕亮著了。點一下又彈出錯誤,指應用包含了 Newsstand 的圖示卻沒有設定相關內容。《AMIGO Controller 2.0》根本不是書籍應用,當然不會使用 Newsstand 的東西。查看 Plist 果然有 Newsstand 圖示的設定。於是把它刪除,再一次上傳。成功了。但又有新問題...。


無論如何點選,在「Versions」提交畫面內的「Build」區域中只有 Build 2.0 給我選擇,而這就是剛才 Newsstand 問題的版本。新的 Build 2.0.1398 卻沒有發現。原來新上傳的 IPA 是需要點時間處理。當服務器處理完畢後才能選擇。


等了一會,終於可以選擇 Build 2.0.1398。儲存後正式提交,狀態轉成「Waiting for Review」!

2014年9月16日 星期二

創富媒體 05:機械人時代


文章刊登於「創富媒體

自小對機械人情有獨鍾,砌 LEGO 也要砌機械人。結構自行設計,立體的機械人。當時十分渴望 LEGO 能發展出可編程的部件,最終十年後得嘗所願。現在年紀大了,有能力開發更高階的機械人。

留意機械人的新聞及參與機械人的開發有七年了。發現近三年,機械人的新聞及報導越來越多,觸及的層面也越來越廣。從以往娛樂型的 AIBO 狗,至實用型的吸塵機械人,到軍用型的機械狼。每個星期總有機械人的報導。越來越多人進入這個產業,包括 Apple 及 Google。

機械人的活用將會大大衝擊我們的生活。有公司已開發出飛行的巡邏機械人,在高設防的建築物附近不停巡邏,日以繼夜將影像傳送到控制室。只要有任何風吹草動,機械人能組隊作出反應。配合紅外線鏡頭,更能在黑夜中巡邏。目前唯一受天雨影響。雨下得大時無法飛行。試想想,當這種機械人價錢回落到 HK$10,000 水平時,買四套回來,兩機巡邏、兩機後備,都只是 $40,000。到時守衛員人數可以減少,甚至是負責人類才能完成的事情。

機械人的開發成本及門檻越來越低。Arduinio 有便宜的,也有貴的。價錢大約在 HK$50-$400,編程門檻不高,簡單數十行代碼能完成很多事情。我在構思的一個小生意,就是結合機械人、Arduino、3D 打印機組成生產線,廿四小時運作為我掙錢。把原本需要人手、要找工廠生產變成在家也能幹的事業。

機械人的時代已經打開了。機遇及挑戰將會接踵而來。你準備好了嗎?

2014年9月15日 星期一

陳皓儀,I found you


原本已經收手搜集「人名可樂」,但無意間發現有「陳僖儀」的原名可樂。之前查過沒有「Sita」、沒有「Hei」只有「Yee」,所以沒有收集。萬萬沒有想過 Sita 的原名「陳皓儀」。這個名反而能從已推出的可樂名字組合而成。小姓「何」跟「皓」都是「Ho」已經入手,只欠「Yee」。翻查自己的搜索記錄,發現公司附近的零食店曾出現過「Yee」,於是在午飯時間尋找。幸運地在零食店找到唯一一支「Yee」,而且還原好無缺,名字沒有括花。實在太好了!

2014年9月12日 星期五

iPhone 6


今日全香港最多人做的事情,一定是訂購 iPhone 6。我認為這簡直就是一項「健力士紀錄」。身邊的朋友,無論是蘋果系,還是安卓系,今天都打成一遍。大家有共同的目標。公司的同事平常兩點鐘出外吃午飯,三點十五分才回。今天兩點未夠便出去了,而且十分勤力地三點前回來。無他,大家都是為國內的同胞購買「iPhone 6」,賺點外快而已。由於公司實行「責任制」,亦為了體現「責任制」得以實行,所以我沒有阻止今次的活動。反正,阻也阻不了;反正,我也參與其中。然而,大家在等待開賣之餘,亦很努力工作。有了大家的付出「責任制」才能得以延續。

2014年9月11日 星期四

ipega 控制器


客人收到了遊戲程式,可是《SteelSeries Stratus Gamepad》卻無法連上 iPhone 4s。原來它只支援 iPhone 5 或以上的手機...。

客人在《淘寶》買來了一台支援 iPhone 4s 的控制器《ipega》。可是,今次卻連不上遊戲。我拿來一看,發現它並不支持 iOS 7 的 GameController Framework。而且它的工作方式很奇怪,是模擬了鍵盤按鍵。好了,客人花了錢買來兩台控制器,兩台都不行。於是唯有免費替他改動程式。為了以最快捷的方法處理來減低損失,我的做法是在畫面上加入 alpha 為 0.0f 的 UITextField 並把它設定為 becomeFirstResponder。在按鍵時會調用 textField:shouldChangeCharactersInRange:replacementString:,檢查輸入的字元並作出處理。雖然這個方法「污穢」但行得通。只花一小時便能完全支援《ipega》控制器。

2014年9月10日 星期三

 Watch


蘋果的智能手錶終於登場。第一眼看上去不好看;看真一點,更加不好看。我不認為它醜。設計也沒有特別,看起來就像縮小版的初代 iPhone。與其說是不好看,更深入地說是沒有了以往的優雅、沒有了以往的簡約、沒有了蘋果的風格。看上去跟時下手錶的樣子差不多。最令我感到奇怪的是錶上的兩顆按鈕。尤其是那顆皇冠鈕更覺得多餘。我認為一顆才夠簡約。皇冠鈕改為觸屏那種擦邊操作就行吧!就像阿拉丁擦神燈一樣,這才型得起來又可簡約。越來越接受不到 Jony Ive 那麼前衛的設計。

2014年9月8日 星期一

誰來負責任?


上星期,公司裡發生了一件有趣的事。早上回到辦公室,打算測試一下手上的項目,於是走到新建立的手機閣,找台 iPad 2 來做測試。一看,屏幕上方爆裂了,花痕直穿底部,算是爆得嚴重;然而除了少許刮手外,機能完全正常。當時只有我在場,其他同事還沒回來。估計是早一天下班後發生的事情。我沒有要找人負責任的興趣。iPad 2 用來開發的話已經過時,算起來是前四代的產品,跑起現時的應用有點吃力;解像度也只有 768x1024,看慣了高清不太願看標清。不過,我卻倒想看看肇事者會不會出來承擔責任。

同事們回到公司,我向一位同事說:「你看,iPad 2 爆裂了!」,之後個個交出不知情的對白、驚訝的表情、關心的動作。就像在看戲劇一樣。最終,當然沒有人企出來說是自己的失誤。好了,在一大群人中承認是有壓力的,我明白。得了數天,還是沒有人私底下負責。我在想,為何一件小事都不願負責?同事們發生了甚麼事?拿 iPad 2 去換個屏幕,只是 HK$200~$300 的事情。坦白承認雖然會損失一點金錢,卻能換來態度。正所謂「見微知著」,這種逃避的心態終歸會引發出其他問題。究竟我要如何處理才能令同事改善?實在毫無頭緒...。

2014年9月5日 星期五

創富媒體 04:自戀的價值


文章刊登於「創富媒體

兩個星期前,從行家的部落格看到一篇關於人名可樂的文章,才發現可口可樂在樽身或罐身印上不同的名字。紅色可樂,我經常飲。其實在八月初時已經為意到有印上「女皇」字樣的可樂,只是當時沒想過會印有人名。不看電視的我、不看八掛娛樂的我實在後知後覺。

從行家提供的人名清單中,發現了有內子的英文名,也有兩位女兒的英文名。於是決定碰碰運氣,向尋找人名可樂出發。大大話話我走訪了超過 80 家 7-Eleven、Circle-K、惠康、百佳、Market Place、華潤萬家;跑了八個地方。找到了五個想要的名字。在過程中發現到家人好友的名字時,有時也會買下來送給他們。一枝可樂價錢 HK$6,但送給別人時的那份心意卻是無價。雖然尋找得吃力,但找到那刻的滿足感勝過辛苦,尤其是為愛的人而做。收的人開心,送的人快樂。為了收集人名分佈情況,更有人在 Facebook 成立「Share A Coke 人名可樂 - 情報區」群組,協助有心尋找他/她那枝可樂的人。到執筆時已經有 260 人參加。有些市面上難找的人名可樂,更能炒至 HK$10 一枝。價錢雖然不高,但升幅卻有 66%。能夠買到心儀的人名可樂,付多一點點錢還是大有人在。

我很喜歡今次的活動;也覺得今次的活動很聰明,巧妙地利用了自戀的心態。換一換招紙,成本高不了多少,卻換來大眾爭相搶購,增加銷量。原來自戀是有市場。我看過不少便利店的貨架,可樂的欄位是空空的。雖然有人說店主嫌太多人尋找可樂阻礙生意,甚至經常打開雪櫃而不買。但我更相信是賣光了。有時加點創意,就能發揮更大的力量!

2014年9月4日 星期四

iCloud 之後


最近網上流出的女星裸照引起一時談論。謠傳是 iCloud 被駭,及至蘋果公司作出澄清,指是個別針對性攻擊,而不是 iCloud 系統被黑。雖然作出了交代,但負面印象已經植入普羅大眾的心內。其實只要有看過這批閃卡的話,當中有相片、有影片,而且相片解像度不一,只有小量圖片是由 iCloud 得來。iCloud 是不存影片,而相片基本上又是從 iPhone 拍下來,沒有可能有這麼多解像度。還有在 iCloud 內的相還是會保留 JPG 檔頭內容,如用哪款 iPhone 拍攝、日期及時間等資料。這些通通都欠奉。當然不排除持有人把相片經過處理後才發佈。但綜合以上原因,便會知道問題不是出在 iCloud 被駭,而是最多如蘋果所稱,女星的密碼被人識破。但我更相信是裸照收集者從不同渠道搜集得來的相片。

在現今吃互聯網多過吃米飯的時代,要好好保障私人訊息確實不易。除了 iCloud 之外,WhatsApp、LINE 都是很多人使用的應用程式,同樣有出現漏洞的風險。就以《WhatsApp》為例子,只要通訊錄輸入了電話號碼,便能在應用內看到對方的大頭照。如果是 20 年前的我,或是 Sita 仍然在生的話,只要有毅力地逐個電話號碼輸入,始終會找到 Sita 的手提電話號碼。甚至乎編寫簡單的程式,直接上服務器搜尋也不是難事。就如《LINE》的大頭照的路徑是沒有作 SSL 加密,不用登入的一條簡單網址。如:https://dl.profile.line.naver.jp:80/0m025aaccb7251639f66d77261a7f9505448a8828277bf/preview。有心撞的話,只要有時間便一定能破。

現代人依賴的應用程式,或多或少都有不小心的漏洞,要完全避免私人資料外洩的話,只能不用。

2014年9月3日 星期三

AMIGO Controller 2.00 最後測試


《AMIGO Controller 1.00》上架有一年多,是時候推出新版本。總結一年的開發,有很多地方得到改良,整個系統也是重新編寫,更少錯更容易修改。雖說花了一年時間,但實際上只花了兩個月左右。其他的時間不是搞別的項目,就是沒有心情去做。說穿了就是「三分鐘熱度」。我要在還熱的時間,一口氣完成最多的事情。現在,總算完成了。待最後測試便會正式上架。