2013年5月31日 星期五

Javascript 的搜索功能

Search in Javascript

客人的一個項目需要添加新頁面。是一個清單頁面。可是清單很長,希望可以輸入關鍵字來縮短清單。由於活動已經進行中,他們很想盡快上架。由於軟件在上年重寫,是次的改動能全由服務器控制,不用經過 Apple 秏時的審批程序,客戶開心不已。基本上,客戶的要求可用 Javascript 來達成。花了點時間,寫了個簡單程序,證明方法可行。
United States
Russia
France
UK
Germany
Canada
China
Israel

2013年5月30日 星期四

Retail Expo 2013

Retail Expo 2013 將於 6 月 4 日下周二開始。這個星期都忙著製作相關印刷品,務求能在博覽上展示。由於需要製作的項目太多,我也幫忙設計及製作。部份作品最終沒有被選中,感覺有點浪費。只好在這裡展示一下。

2013年5月29日 星期三

《三國》

Sangoku


新聘請的美術同事有豐富的遊戲開發經驗,而且畫功了得,因此安排他開發自家遊戲作品。我選了較多人喜歡的三國題材,以下就是遊戲的標題畫面。本來遊戲的名稱較長,但考慮到受歡迎的遊戲都是兩個中文字作稱呼的(如:帝國),所以改名為《三國》。感覺跟 BeyondZ 過往的作品,有很大的進步。遊戲已進入最後開發階段,希進盡快推出,能賣得好一些吧!

2013年5月28日 星期二

Lighter Hat 2


客戶不太滿意打火機帽的設計,我們只好作出改良。今次第二個版本感覺不錯,希望客人喜歡。

2013年5月27日 星期一

Talkpic 圖示設計


公司的一個重頭項目快將推出。概念及名稱同樣出自我手。

這個項目已經開發了有一年半的時間。話雖如此,實際的開發時間大約為三個月。這是因為那時同事只有兩三位,當有客戶應用程式落實時,便要優先處理客戶的項目;導致做下停下,最終還因為同事的功力提升了,索性來過重寫。

今年人手多了,把同事們劃分成客戶組及自家組。應用才得以順利完成。而在這段時間裡,一直認為圖示設計得不好,一直在改良。已經分別有三位同事投入他們的設計,自己也是其中一位。圖示設計之數量,是公司開業以來最多的一個。最後選出來的,還是自己的作品。

2013年5月26日 星期日

Free AVI to MP4 Video Converter


舅仔買了一台 PMP 相架,打算用來播放公司的影片,可是搞來搞去也搞不到,於是找我來幫忙。


這台大陸製的相架,盒面說明能播放 H.264, WMV, AVI, MP4, DivX...。舅仔已經把影片轉換成 WMV 及 MP4 格式,可是相架卻無法播放。由於舅仔家中用的是 Windows 平台,為了日後他能自行處理,我找來幾個免費的 Windows 軟體,嘗試把影片轉到 H.264, AVI, MP4 還是不行。最終使用「Free AVI to MP4 Video Converter」,把影片輸出成 DivX 才能成功。為了有最好的效果,還是手動設定輸出解像度為 800x480。

2013年5月24日 星期五

用 Javascript 檢查瀏覽器的語系

Detecting Browser Language

客戶找我報價一個新的項目,可以分為兩個部份。其中一個部份支援兩種語言。我想介面做得體貼,希望能按照使用者的語系,自行顯示合適的語言。這件事可以由 Javascript 達成。

var language = window.navigator.userLanguage || window.navigator.language;

你目前的語系是:

2013年5月23日 星期四

在 CentOS 設定 SSL 證書

Install SSL Cert.

公司服務器中的 SSL 證書突然在上星期到期。早在兩個多月之前,已經生成並安裝了新的證書,真的奇怪。在網上檢查過所用的 SSL 還是舊的那份。檢查 httpd.conf,證書的設定及路徑沒有錯。檢查新的證書檔,顯示到期日為 2014 年,也沒有出錯。最後,找到原來要在 /etc/httpd/conf.d/ ssl.conf 內設定證書路徑及重啟才會有效。又上了一課。看到公司要聘請一位專業的網路主管才行。

2013年5月22日 星期三

列出 XML 中的圖檔


午飯有點時間,繼續昨天的 Hacking 工作。應用程式會向服務器取得最新部落格資料,傳回的是自訂的 XML 格式。當中記錄了相片的檔名。簡單寫了一個 Javascript 抓取 XML 內容中的圖檔,並把相片題示出來。


2013年5月21日 星期二

Convert &#x to Text


在《陳僖儀 Sita》這個 App 內有她的動向。就像一個迷你部落格一樣。查看過 App 的內容,發現了一埋 &#x 的文字,如:很 開 心 和 好 玩 的 一 天。不用問,那是中文內容。為了能把它轉為正確的中文字符,我寫了一個簡單的 Javascript 來達成。

請貼上 &#x 內容:


2013年5月20日 星期一

Apple Machine


在我孩童年代的士多裡都有著各式各樣的機器,它們不是高端的電視遊戲,而是彈乒乓球機、蘋果走燈機、彈珠機...等。當贏了錢便能直接在士多消費,購買汽水糖果,是一個不錯的生態。為了讓初級的編程同事能完成一個作品,今次選了蘋果走燈機為題材,開發出《Apple Machine》。大家不妨給我一點意見。

2013年5月18日 星期六

自造者時代

Makers

我是 Chris Anderson 的讀者。他出版的《長尾理論》及《免費》都在書架之列。今次推出新作《自造者時代》,得到林之晨推薦,以及對立體打印機的興趣,當然不會錯過。昨日終於在商務印書館看見此書,意味著樓上書屋也有供貨。今日再次出走旺角,在開益書店以 HK$112 購入。

2013年5月17日 星期五

All The Best


小時候很愛空想。想像過在這個世界上每個人都跟另一個人連擊在一起。他們同時出生,亦同時死亡。但當一人行好運時,另一人就行衰運、當一人睡覺時,另一人就起床。而最近,我發現了另一種情況。兩個生活在兩條平衡線上,他們不認識,也沒有接觸過;但卻有著很多的連繫。

一個是兔肖的人。
另一個也兔肖的人。

一個是戊午日出生的人。
另一個也戊午日出生的人。

一個是五行喜火忌水的人。
另一個也五行喜火忌水的人。

一個是愛笑的人。
另一個也是愛笑的人。

一個是天真的人。
另一個也是天真的人。

一個是為人著想的人。
另一個則是很為人著想的人。

一個是很喜歡吃朱古力的人。
另一個也是很喜歡吃朱古力的人。

一個是熱愛編程,為理想奮鬥的人。
一個是熱愛唱歌,同樣為理想奮鬥的人。

一個是經常去觀塘 APM、朗豪坊 行街的人。
一個是經常去觀塘 APM、朗豪坊 工作的人。

一個是製作《Doraemon 大富翁》的人。
一個是喜愛《Doraemon 大富翁》的人。

一個認識太陽娛樂文化的人。
一個則是太陽娛樂文化的人。

一個因為《天空之城》的男主角而改名為 Pacess。
一個因為《天空之城》的女主角而改名為 Sita。

雖然這些可能是自己一廂情願很宅的想法,但我喜歡。可惜的是,一個月前的今天,她離開了...。

2013年5月16日 星期四

打火機帽


最近為大陸公司開發一款遊戲,需要把打火機放在 iPad 上來運行。之前嘗試過用超能膠把材質貼在打火機上,可是這樣的做法不夠耐用;材質很容易會脫掉。今次再做,嘗試用 3D 打印機製作打火機帽,並把熱膠頭插進去。初部試過成效不錯,而且量化也十分方便。

2013年5月15日 星期三

拉闊圖書館.五:Germen Bridge


《拉闊圖書館》進入第五課,今次由同事三哥向大家講解「Germen Bridge」的玩法。我不懂橋牌,經過今課之後,發現玩法簡單,但要勝出可不是件容易的事。我們玩到九張牌便完了,只有一半的結果是 Just Made...。大家又過了一個開心的晚上。

2013年5月12日 星期日

好策略.壞策略

Good Strategy Bad Strategy

有兩本新書推出:《好策略.壞策略》、《自創者時代》。以前是商務印書館的會員,買書有九折;但上年少了在商務買書,多了在台灣及香港誠品買;因此銷費不夠,未能續會。於是特意走到旺角樓上書屋購買,卻空手而回。前者已經賣光,後者則未上架。最終只好乖乖回到商務印書館購買,盛惠 HK$140...。

2013年5月11日 星期六

頭條日報的 D 格式

D Format in HK Headline

今天雖然放晴,但心中卻下著大雨。Sita 陳僖儀將要化作青煙。看到頭條日報有她的報導,想把它保存起來,又不想單單用 iPad 的抓圖功能。於是研究了一下。

在應用的 Caches 目錄下找到很多 .d 檔案;一頁一個。用 HexEdit 打開,發現檔頭有一點文字外,就是 .png 的內容。把 PNG 之前的內容刪除後儲存,把 .d 改為 .png 觀看,便能看到是該頁的預視圖。從目錄的檔案數目及 .d 的大小來看,一個 .d 是儲存整頁的內容。查看一下,跟以前《親子王》的做法差不多,每一頁都會分成兩層。一層是 JPG 格式,儲存了所有圖片;另一層是 PNG 格式,收錄了所有文字。這樣的做好處是檔案較小,而文字較為清楚。

在 .d 檔案中,內容的順序為檔頭、PNG 預視圖、頁面 JPG 圖、頁面 PNG 圖。利用 HexEdit 把內容拷到新檔後,在 Photoshop 自行把兩個圖層合併就能成為原來的模樣。

2013年5月10日 星期五

See You Sita


天國再見~

2013年5月8日 星期三

"Weather Kids" Trailer


同事為《Weather Kids》製作了一段介紹影片,希望看過影片的朋友會了解它的功能與運作。

2013年5月7日 星期二

利用 Raspberry Pi 及 USB 鏡頭達成串流影像


小鳥媽媽在我家中窗前的小樹築起了愛巢。友人建議我設立網絡鏡頭觀看牠的情況。我不懂得相關技術,而且用一台電腦來監察,似乎很浪費電力。如用 Raspberry Pi 的話,則比較環保。因此,我拿它來做一次試驗。接上 USB 鏡頭,以 Terminal 登入 Raspberry Pi 後,輸入「ls /dev/video0」看看能否順利接上鏡頭。我的鏡頭剛好能在 Raspberry Pi 下運作。之後就要安裝程序庫及程式,方法如下:

  • sudo aptitude install libv4l-0
  • wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi
  • mv get\?download\=36\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz
  • tar -zxvf mjpg-streamer-rpi.tar.gz
  • cd mjpg-streamer
  • ./mjpg-streamer.sh start

    這樣,就能利用瀏覽器輸入 http://www.pacess.com/?action=stream 來觀看 Motion-JPG 影像。如要停止的話,則在 Terminal 輸入「./mjpg-streamer.sh stop」。我的 Raspberry Pi 在運行十分鐘後出現斷線問題而無法繼續串流。於是稍為修改一下 mjpg-streamer.sh 內的設定,把每秒 4 幀改為 1 幀,及把 640x480 改為 320x240。這個設定使我的 Raspberry Pi 運作不斷。
  • 2013年5月6日 星期一

    Raspberry Pi 設定 IP 地址

    我的 Raspberry Pi 在每次開機後會自行取得 IP 地址。但有時固定 IP 會來得方便。所以稍為改動一下。

  • cd /etc/network
  • sudo cp interfaces interfaces.bak
  • sudo nano interfaces
  • 在 iface eth0 inet dhcp 最前加入 # 號把它註釋
  • 加入以下內容:
    iface eth0 inet static
    address 192.168.1.80
    gateway 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
  • 按 Ctrl-X 後選 Y 及拍一下 Enter 儲存
  • sudo /etc/init.d/networking restart
  • 2013年5月4日 星期六

    Coding Styles (Starbucks HK)


    寫了二十年程式,吸收了很多不同的經驗。而這些經驗部份會轉化為 Coding Styles,讓 BeyondZ 的程序員跟從。也讓同事在跟進項目時更易了解當中的邏輯。今天爆開 Starbucks HK 後,發現存在著一個名為 coding-styles.rtf 的文檔。相信那是 Starbucks HK 開發人不小心置入的檔案。這份編程指引跟我的習慣有九成相似呢!

    //
    // Coding Styles
    // Starbucks HK
    //
    // Created on 8/16/12.
    // All rights reserved.
    //


    Location of Files

    lib - to differentiate our codes versus any external library source codes, we created this folder to put all external libraries here
    model - any data/model classes to be used
    controllers - all view controllers, for major view controllers, place them in root of this folder, for view controller of those smaller elements, place them in "components" folder
    view - all view files, e.g. a view class for a table list item
    Supporting Files - any supporting files. Most importantly, all images to be placed in the "images" folder.

    Code Comments and Pragma Marks

    For every class, we will place the following standard comments and pragma marks to make codes consistently readable

    // This class is ... (describe the purpose of this class)

    //---------------------------------
    // Private Functions
    //---------------------------------

    #pragma mark - Private Functions

    //---------------------------------
    // Inherited Functions
    //---------------------------------

    #pragma mark - Inherited Functions

    //---------------------------------
    // Public Functions
    //---------------------------------

    #pragma mark - Public Functions

    //---------------------------------
    // Delegate Functions
    //---------------------------------

    #pragma mark - Delegate Functions

    //---------------------------------
    // Events
    //---------------------------------

    #pragma mark - Events

    //---------------------------------
    // System Functions
    //---------------------------------

    #pragma mark - System Functions


    Naming Conventions

    - For all names, try not to use short forms whenever possible
    - For all class names and Folder names, try to capitalize first letter of every word, e.g. "DrinksViewController"
    - For Delegates, try to put the object who is sending out this delegate in front of the function name, e.g. customTabBarMinimised, customTabBarGotoHome;
    -For events, try to put the object who is sending out this event in front of the function name, e.g. homeButtonTouched

    2013年5月3日 星期五

    iOS 儲存功能

    Simple System Keychain

    就昨天的「曲奇實驗」,目的是把數值儲存起來,讓同一個應用在重網後讀取。甚至是讓其他應用程式所使用。原來 Sam Soffes 開發了類似的功能。

    儲存時的代碼:
    NSString *userID = @"User ID";
    [SSKeychain setPassword:userID forService:@"com.pacess.game.01" account:@"user"];

    讀取時的代碼:
    NSString *userID = [SSKeychain passwordForService:@"com.pacess.game.01" account:@"user"];

    2013年5月2日 星期四

    曲奇實驗

    Cookie Experiment

    5 月 1 日開始提交到 Apple 審批的應用都不能再使用 UDID。我有很多應用都會用到 UDID。當中大部份改為 UUID 便能運作,影響不算大。但由於 UUID 會在重裝應用時改變,有數個應用必須使用不會改變的記認,才能避免問題發生。於是乎我在思考如何能達到以上目的。最終得出使用 Cookie 是其中一個可行方案。

    我忙著開發上周想出來的概念的原型應用,沒時間做實驗。於是找來三哥(同事的別名)幫忙。首先在服務器建立程序,印出指定曲奇的數值及把當刻時間存回曲奇之中。然後建立新的 iOS 項目,在啟動時顯示 UIWebview 及連接服務器程序。接著進行測試,啟動一次把時間儲存到曲奇。退出應用並第二次啟動。第一次的數值能顯示出來,證明運作正常。三哥把應用刪除重裝,再次啟動。結果曲奇內沒有數值可以顯示。說明了曲奇會跟隨應用而刪除。

    之前玩日本 Apps 時發現很多都在初次啟動時彈到 Safari 去,再跳回應用本身。感覺怪怪之餘,體驗又不好。難道是跟本次曲奇實驗有關?於是吩咐三哥以這樣的方式進行測試。把原本 UIWebview 改為跳到 Safai。結果如我所料,就算應用刪除重裝,曲奇的數值依然存在。這是由於曲奇是寄存在 Safari 之內,而 Safari 又不能刪除的原因吧。

    通過今次的實驗,看到有很多發展的機會。可以借此檢查出用戶裝了多少個 BeyondZ 開發的應用。例如:若用戶安裝了《Toys Factory》的話,玩《Battle Mahjong》時會多送幾張道具卡、裝了《三國》的話,玩《Apple Machine》會免費獲贈《三國》的佈景主題...等。

    2013年5月1日 星期三

    從陳僖儀 EP 看 Yahoo 拍賣圈生態


    自從陳僖儀 Sita 去世後,我才認識她,亦漸漸地喜歡上她及她的音樂。為了購買她的唱片作為紀念,我找遍觀塘、九龍灣、深水埗也找不到。後來得知旺角 CD Warehouse 還有第二張大碟 Let Me Find Love 時,立即托友人以 HK$149 購買。可是仍然找不到第一張大碟 Crazy Love 的影蹤。

    我很希望能集齊 Sita 的唱片,於是到 Yahoo 拍賣走一趟。看到不少 Crazy Love 在炒賣。原本 HK$99 的唱片,在那裡飆升 4~14 倍。實在瘋癲。留意了幾天,終於找到一筆 2.5 倍較為合理的交易。為求到手,貴一點也要投標。我也很久沒有這麼瘋狂,願意付出 HK$250 購買原價 HK$99 的東西。那時心想,我一邊拍賣,一邊繼續搜索。要是找到更便宜的貨時,最多建立新的帳號,把我的最高價位搶走。這樣既不需要購買,又不怕被賣家給予惡評。一天之後拍賣結束了,原來有人付了直銷價 HK$899 購入。不過一天後,那位賣家再次把 Crazy Love 重新拍賣,相片也是一樣的。

    很難相信有人願意付 HK$899 購買,甚至乎見過 HK$1499。我沒有實質證據,但估計是賣家自己以另一帳號完結交易。反正不論金額如何,只需付 Yahoo HK$1 手續費便可。問題是,賣家為何這樣做?放一件不打算賣的東西出來有何目的?假設賣家是唱片店老闆,透過這個做法便能得知市場能承受的價格為何,從而決定唱片實際在店內出售的價格。如果有人在網上看到貨品索價 HK$899,來到店舖卻只賣 HK$250 時,不多不少會產生購買的念頭。畢竟兩張碟都是限量,賣出一張就少一張。要是唱片無法在實體店中出售,在 Yahoo 拍賣裡還是個出路。

    以上方法應該是可行。要是真的如我所料般運作,那 Yahoo 拍賣將會失去魅力。至少我是這麼認為。我有心在上面購買東西,但到頭來拍極也拍不到,又眼見貨品被買後又重新上架,實在有被玩的感覺。那麼,長久下去便沒有人來購物...。當然,我有在 Yahoo 拍賣的其他地方購物,如:玩具、Mac 電腦...等。都是正常的交易,以上判斷相信只能套用在今次的事件中。

    今天經過旺角,特意搜索一翻。最後,在女人街找到全新 Crazy Love,索價 HK$199。在沒有猶豫的情況下,立即付款走人。後來知道有人在銅鑼灣以 HK$149 購入,平了 25%。雖然心裡有點戚戚然,但能夠集齊兩張大碟,已經心滿意足。付多了的不算得甚麼,努力工作把它賺回來。