2013年4月30日 星期二

創意是這樣煉成的

認識我的人都認為我很有創意。沒錯,我也這樣認為。

創意大體上分成兩類。一種是完全新的創造,世上本來沒有的;另一種是組合性創新。前者是天生的能力,後者是培養出來的能力。我自己是組合性創新那種。回想創意是怎樣煉成,我歸功於 LEGO。

自小在屋村長大,那兒品流複雜,父母不讓我外出玩耍,只能留在家中。然而,家中最多的玩具就是 LEGO。照著說明書砌成的模型,充其量砌三五八回就會玩膩;再玩下去,就唯有自行建立目標,利用手上的積木砌成模型。積木雖然多,但不是無限。有些款式的積木是稀有而關鍵的,沒有它便無法成事;因而要好好地利用。就是這樣引發了我的創意,當時已經想像 LEGO 能配合不同的電子零件使用是多麼美妙的事情。等了差不多十年,才有 LEGO MINDSTORMS RCX 的誕生...。

透過重新組合能砌成心中所想的模型,是 LEGO 帶給我的東西。編程也是將不同的東西重新組合。相信我的編程能力也是這樣煉成的。所以,現在我也很鼓勵孩子玩 LEGO。

2013年4月29日 星期一

重新發明

Re-invent

2011 年發明了 OTA。2012 年發明了 iPad Kinect 體感操控。來到 2013 年的首四個月,腦裡一片空白。直至上周三,終於有新發明。

今次重新發明了某樣已有的東西。在互聯網上找不到任何類似的做法。我急不及待把想法變為程式碼印證概念的可行性,結果順利製成了 Prototype。稍後會加入介面部份,包裝成獨立 App 形式推出。這是我第二次感受到發明了能改變世界的東西(第一次是在十幾年前,發明了「Pop'n Music」般的音樂遊戲,當時第一代音樂遊戲在半年後才出現。恰巧那個遊戲設計是給日本 SSD 公司,而他們正正跟 Konami 有商業來往…),那時沒有好好(也不懂得)抓住機會。幾個聽過新發明的人,都認為是非常聰明的概念;我自己也十分喜歡這個創意,抱有很大的期望。甚至夢想能因此被 Apple 或 Google 收購,希望有朝一日成真啦!哈哈~

2013年4月26日 星期五

麻將大戰

Battle Mahjong

本周上架的「麻將大戰」是兩年前想出來的玩法。一直都忙著應付客人的項目,當時同事剛入職,未有足夠的開發能力。如今人手多了,時間多了,終於可以著手製作。

七年前曾在 Lakoo 開發 J2ME 黑白麻雀遊戲。那時的手機效能不高,能摸擬四人枱局,加上連線對戰,是不錯的噱頭。可是,每一輪的等候時間太久,而且容易斷線,最終失敗收場。

吸收了經驗之後,今次開發的遊戲改為慣用的二人對戰。以往花很多時間去解決檢查組合是否能夠食出,現在處理同樣問題來得快了很多。市面上的麻將遊戲實在太多,造一款一式一樣的話,似乎沒有多大的吸引力。為了尋求突破,我嘗試更改遊戲玩法,加入迴轉壽司帶。使得打麻將變成吃壽司一樣,要哪隻,拿那隻。雖然看起來少了運氣,但要跟對手搶牌,又要眼明手快,節奏明顯加速了。我不知道大家是否接受這個玩法,但對於繁忙的都市人,在一個地鐵站的車程能完成一個回合,應該是不錯的事情吧!

2013年4月25日 星期四

Toys Factory


又一套作品《Toys Factory》上架了。今次是遊戲項目,也是由我設計。概念很久以前已經在腦海出現。玩法很簡單,就是按訂單的要求製造足夠的玩具。遊戲由一隻機械臂開始組合玩具,到後來的三隻機械臂。看起來好像很簡單,玩起來卻可是手忙腳亂。

遊戲沒有加入高難度的編程要求,最適合用來訓練同事開發遊戲項目。單是那條運輸帶,已經要花點心思才能完成。待同事們的功力提升後,會挑戰更高難度的遊戲項目。期待這日的到來!

2013年4月24日 星期三

WWDC 2013


又一年了...。WWDC 2013 海報走簡約風,難道 iOS 7 真的是簡約設計?希望 Jony Ive 不要令我失望。

2013年4月23日 星期二

永遠懷念妳


陳僖儀這個名字對我來說十分陌生,印像中曾在 HMV 店前的大型海報見過這個名字。她是誰?唱歌怎樣?沒看電視的我沒有留意過。直至 7 天前的早上,在 Facebook 上看到朋友們發佈的悼念訊息。一位香港新晉女歌手遇上交通意外死亡。本來不看娛樂新聞的我,亦因為朋友們的反應而開始搜尋關於她的新聞。

越是搜尋、越是喜歡她、越是覺得可惜。在 YouTube 上聽過她的《忘川》,唱得很好,忍不住在 iTunes 購買她的音樂。作為對她的欣賞、對她及她家人的支持。只是覺得認識她太遲。

Facebook Page Instagram 中感受到她很熱愛音樂、感受到她的活力。看得到她雖然年紀輕輕,但很有魄力、工作十分努力。她是我除了 Steve Jobs 離世之外,最有感受、最有感覺的陌生人。今日是 Sita 的頭七,希望她一路好走。永遠懷念妳。

P.S.: 陳僖儀已經離開了 天。

2013年4月21日 星期日

下載 Facebook Page 內所有相片連註解


繼續做「宅」事。今天是 Facebook Page 內的相片。

跟昨天「下載 Instagram 帳號內全部的相片」差不多,都是先以 Safari 打開 Facebook Page 的相片頁,一直把畫面向下拉以載入所有相片。確保 Safari > Preferences... > Advanced > Show Develop menu in menu bar 是打勾的。然後在其中一張相上右擊,選「Inspect Element」。把當前的 div 收縮並點選上一層的 div,按 Command-C 把整個 div 內容保留。打開《TextWrangler》,建立新文件及按 Command-V 把內容貼上,儲存為 facebook.dat。在運行 PHP 的網頁服務器建立新目錄 Facebook,把權限設定為 777。把 facebook.dat 拷進去,再建立 index.php,把以下的程式碼貼進去。這樣,只要執行 index.php 便能自動下載所有相片,並且檔名會加入相片的註解。
<?php
header("Content-Type:text/html; charset=utf-8");
set_time_limit(0);

$filename = "facebook.dat";
$fileContent = file_get_contents($filename);

$count = 1;
$offset = 0;
$length = strlen($fileContent);
echo("File size: $length<br>");
while ($length > $offset && $count < 5000)  {

//  Search for photo from data
$imgContainer = strpos($fileContent, "ajaxify", $offset);
$src = strpos($fileContent, "src=https", $imgContainer);
$jpg = strpos($fileContent, ".jpg", $src);
$png = strpos($fileContent, ".png", $src);

$endPosition = $png;
if ($jpg < $png && $jpg > $src)  {$endPosition = $jpg;}

//  Get photo description
$description = "";
$size = ($endPosition+4)-($imgContainer+9);
$urlString = substr($fileContent, $imgContainer+9, 5);
if ($urlString == "https")  {
$urlString = substr($fileContent, $imgContainer+9, $size);

//  Load photo page
$photoPageContent = file_get_contents($urlString);

//  Search for photo description
$hasCaption = strpos($photoPageContent, "hasCaption");
$captionStart = strpos($photoPageContent, "/>", $hasCaption)+2;
$captionEnd = strpos($photoPageContent, "</span>", $hasCaption);

$size = $captionEnd-$captionStart;
$description = substr($photoPageContent, $captionStart, $size);

//  Skip non-standard characters
$searchArray = array("<br />", "<span>", "</span>");
$replaceArray = array("", "", "");
$description = str_replace($searchArray, $replaceArray, $description);
}

//  Get photo filename
$size = ($endPosition+4)-($src+4);
$filename = substr($fileContent, $src+4, $size);

//  Unescape
$filename = htmlspecialchars(urldecode($filename));
echo("<br>$count) $filename / $description");

//  Copy file from Facebook
$basename = basename($filename);
copy($filename, $description."_".$basename);

//  Prepare for next round
if ($endPosition > $offset)  {$offset = $endPosition;  $count++;}
else  {$count = 5000;  echo("<br>--- Done ---");}
}
?>

2013年4月20日 星期六

下載 Instagram 帳號內全部的相片

Backup all photos of an account in Instagram

今日做了件很「宅」的事情。我想把某人在 Instagram 中的相片完整地保留下來。在網上搜尋相關方法,找到了一個付費軟件。孤寒的我不願花錢,最後自己動手做。

首先用 Safari 載入她的 Instagram 頁,一直把畫面向下拉及點擊「Loading More...」把所有相片載入。確保 Safari > Preferences... > Advanced > Show Develop menu in menu bar 是打勾的。然後在其中一張相上右擊,選「Inspect Element」。把當前的 div 收縮並點選上一層的 div,按 Command-C 把整個 div 內容保留。打開《TextWrangler》,建立新文件及按 Command-V 把內容貼上,儲存為 instagram.dat。在運行 PHP 的網頁服務器建立新目錄 Instagram,把權限設定為 777。把 instagram.dat 拷進去,再建立 index.php,把以下的程式碼貼進去。這樣,只要執行 index.php 便能自動下載所有相片。
<?php
 set_time_limit(0);

 $filename = "instagram.dat";
 $fileContent = file_get_contents($filename);

 $count = 1;
 $offset = 0;
 $length = strlen($fileContent);
 echo("File size: $length<br>");
 while ($length > $offset && $count < 1000)  {

  $imgContainer = strpos($fileContent, "imgContainer", $offset);
  $src = strpos($fileContent, "src=", $imgContainer);
  $jpg = strpos($fileContent, ".jpg", $src);

  $size = ($jpg+4)-($src+4+1);
  $filename = substr($fileContent, $src+4+1, $size);
  echo("<br>$count) $filename");

  //  Resolution of xxx_7.jpg is higher than xxx_6.jpg
  $fullSizeFilename = substr($filename, 0, $size-5)."7.jpg";
  $basename = basename($fullSizeFilename);
  copy($fullSizeFilename, $basename);

  //  strpos will loop back
  if ($jpg > $offset)  {$offset = $jpg;  $count++;}
  else  {$count = 200;  echo("<br>--- Done ---");}
 }
?>

2013年4月19日 星期五

Weather Kids


小弟的最新免費作品《Weather Kids》已經登陸 App Store。這個概念有了很久,終於有時間有機會把她開發出來。我很滿意整體的表現及效果。希望你也喜歡。

有興趣的朋友可到 https://itunes.apple.com/hk/app/weather-kids/id598524868?mt=8 下載。iOS 全機型支援。

2013年4月18日 星期四

Facebook Home


聽了 Facebook Home 有一個星期了,作為 IT 界的朋友、Facebook 又是開發平台之一,一定要了解一下才行。拿來 Samsung Galaxy Note II 進行安裝。由於公司機沒有安裝 Facebook,所以要先行安裝。Android 的龜速下載,花了半小時才下載完成。簡單設定一下 Facebook Home 便能正式測試。整體感覺很像 Flipboard,唯一不同是 Facebook Home 會自動跳到下一個故事。不過,要回到首個故事,就得一頁一頁回撥,很不方便。最令我關注的是鎖機畫面仍然顯示著 Facebook 朋友的故事,私隱程度是零。把玩了一會兒,興趣缺缺,還是喜歡原來的 Facebook。

2013年4月17日 星期三

拉闊圖書館.四:圍棋入入入門


時間過得很快,《拉闊圖書館》已經是第四課。今次由另一位同事向大家講解圍棋的背景、名詞及玩法。雖然以前有看《棋魂》動畫,對圍棋有初步了解,但今次上完課之後,學到更多規則與技巧。同事們在上課的過程亦很輕鬆愉快。《拉闊圖書館》確是一門很好的課!真有點興趣開發一套圍棋遊戲呢!

2013年4月16日 星期二

「反斗車王」線路測試


雖然是很簡單的線路及程式,都花了很多時間才能完成。今次「反斗車王」改造計劃,會以 Arduino Nano 作為核心、以 BLE mini 作為接收、以 L293D 作為動力制禦。以上片段除了印證到線路及程式正確之外,在拍攝之前已經失敗多次;汲收了相關經驗:如何接線、如何使用兩組電源、如何使用 SoftwareSerial...等,將有助日後不會重滔覆轍。

2013年4月15日 星期一

「麥坤」1.00

既然硬件已經齊全,先來做過測試,以證實線路是可行的。那要寫軟件部份。
//==============================================================================
//  Arduino Receiver for Cars McQueen
//  Start date: 2013-Apr-14
//  Written by Pacess HO
//  Copyright Pacess HO, 2013.  All rights reserved.
//==============================================================================

//------------------------------------------------------------------------------
//  0    1         2         3         4         5         6         7         8
//  5678901234567890123456789012345678901234567890123456789012345678901234567890

//  Arduino Ports
//  D12 = Acceleration enable
//  D11 = Turn enable
//  D8, D7 = Acceleration direction flag
//  D6, D5 = Turn direction flag
//  D2 = Head LED

//  Motor flags
//  H, L = Forward / Left
//  L, H = Backward / Right
//  L, L = Stop / Middle

//  Commands
//  0 = Stop
//  1 = Move forward
//  2 = Move forward left
//  3 = Move forward right
//  4 = Move backward
//  5 = Move backward left
//  6 = Move backward right
//  7 = Light on
//  8 = Light off
//  9 = DEMO

//------------------------------------------------------------------------------
#define SERIAL_BAUDRATE                         57600

//------------------------------------------------------------------------------
//  Global variables
int _led = 2;

int _accelerationEnable = 12;
int _accelerationPortArray[] = {8, 7};

int _turnEnable = 11;
int _turnPortArray[] = {6, 5};

int _debugLight = 13;
int _debugLightValue = LOW;

//------------------------------------------------------------------------------
void setup()  {
    //  Initialize serial port
    Serial.begin(SERIAL_BAUDRATE);
//    Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
//    Firmata.begin(SERIAL_BAUDRATE);

    //  Setup motor ports
    for (int i=0; i<2; i++)  {
        pinMode(_accelerationPortArray[i], OUTPUT);
        pinMode(_turnPortArray[i], OUTPUT);
    }
    pinMode(_accelerationEnable, OUTPUT);
    pinMode(_turnEnable, OUTPUT);

    //  Setup LED port
    pinMode(_led, OUTPUT);
    pinMode(_debugLight, OUTPUT);
}

//------------------------------------------------------------------------------
void loop()  {
    if (Serial.available() <= 0)  {
        Serial.print(".");
        delay(500);
        return;
    }

    //  If there's any serial available, read it:
    while (Serial.available() > 0)  {

        char commandByte = Serial.read();
        if (commandByte < '0' || commandByte > '9')  {continue;}

        //  Command is between 0-9 
        switch (commandByte)  {
            case '0':  {moveStop();  turnMiddle();}  break;
            case '1':  {moveForward();  turnMiddle();}  break;
            case '2':  {moveForward();  turnLeft();}  break;
            case '3':  {moveForward();  turnRight();}  break;
            case '4':  {moveBackward();  turnMiddle();}  break;
            case '5':  {moveBackward();  turnLeft();}  break;
            case '6':  {moveBackward();  turnRight();}  break;
            case '7':  {headLightOn();}  break;
            case '8':  {headLightOff();}  break;
            case '9':  {demo();}  break;
        }
    }

    //  Tell controller a loop is done
    Serial.print("!");

    _debugLightValue = (_debugLightValue == LOW) ? HIGH : LOW;
    digitalWrite(_debugLight, _debugLightValue);
}

//------------------------------------------------------------------------------
void moveForward()  {
    digitalWrite(_accelerationPortArray[0], HIGH);
    digitalWrite(_accelerationPortArray[1], LOW);
}

//------------------------------------------------------------------------------
void moveStop()  {
    digitalWrite(_accelerationPortArray[0], LOW);
    digitalWrite(_accelerationPortArray[1], LOW);
}

//------------------------------------------------------------------------------
void moveBackward()  {
    digitalWrite(_accelerationPortArray[0], LOW);
    digitalWrite(_accelerationPortArray[1], HIGH);
}

//------------------------------------------------------------------------------
void turnLeft()  {
    digitalWrite(_turnPortArray[0], HIGH);
    digitalWrite(_turnPortArray[1], LOW);
}

//------------------------------------------------------------------------------
void turnMiddle()  {
    digitalWrite(_turnPortArray[0], LOW);
    digitalWrite(_turnPortArray[1], LOW);
}

//------------------------------------------------------------------------------
void turnRight()  {
    digitalWrite(_turnPortArray[0], LOW);
    digitalWrite(_turnPortArray[1], HIGH);
}

//------------------------------------------------------------------------------
void headLightOn()  {
    digitalWrite(_led, HIGH);
}

//------------------------------------------------------------------------------
void headLightOff()  {
    digitalWrite(_led, LOW);
}

//------------------------------------------------------------------------------
void demo()  {
}

2013年4月13日 星期六

「麥坤」的底板


「麥坤」的車廂十分細小,在「盡量不破壞原有支架」的前提下,我先按照框架,製作出底板,再把相關零件放在上面,看看空間是否出現頂著的問題。試了幾個組合,還是會頂住,看來要破壞支架了...。

2013年4月12日 星期五

「麥坤」的軚盤構造


之前拆開過「反斗車王」麥坤,看見車頭的軚盤用了一顆馬達,感覺奇怪。在《大南玩具》工作時,知道一顆馬達的成本不高,但設計師都會盡力地把馬達的成本省下來,而軚盤很多時都會用磁力來代替。還有一個地方引起我的好奇。就是輪胎轉到某個角度便會停止,若用上馬達的話,此刻的卡著動作會容易把馬達燒掉。究竟是不是有甚麼機關防止卡著呢?要是改造時沒有處理這個問題,便有可能連主板也會受到影響。所以,我決定要把車頭拆開。

噢,設計非常簡單。是會卡著的...。

2013年4月11日 星期四

「反斗車王」改造


一年多前把「反斗車王」引擎升級後效果不太理想,車子的起動較慢,要行一會才順暢起來。最近又想把它改裝,變成用 iPad + 藍牙 4.0 控制的遙控車,甚至加入車頭白燈及車尾紅燈。但以上修改,首先要有一顆 MCU。原本打算用 ATmega-128 達成,它體積細小且易用。不過花了一段時間,stk500_v2_receivemessage 問題仍然無法解決,程式無法下載到 ATmega 內。結果只好轉用其他 MCU。目前來說,Arduino Nano 是十分好的選擇。正當要在淘寶網購買時,發現網友剛好有兩顆未開封的 Arduino Nano,於是立即向他各以 HK$60 購入。雖然比淘寶網貴一點點,但勝在立即到手。便於在星期六日進行改造!

2013年4月10日 星期三

dnsmasq


今日受到友人的啟發,嘗試安裝 dnsmasq 到 CentOS 服務器,認識到原來透過更改 DNS 設定,有可能達至修改遊戲的目的。

舉個例子:遊戲 A 提供了 In-App-Purchase 購買代幣的功能。要是把 Apple In-App-Purchase 服務器及遊戲服務器的 Domain name 指向自己設定的服務器,再欄截中間溝通的內容。把這些內容放到服務器的程式內,待下次購買時傳回相同的內容,便有機會達到免費購買的結果。當然,這要視乎編程人員有否加入檢查機制。暫時,我試過把自己公司的域名指向內部服務器的實驗,能成功顯示其他內容,相信以上想法是有可能實現。估計網上遊戲的私服也是相同的原理。往後自家的產品也會針對這個原理加入防犯機制...。

2013年4月9日 星期二

改善 Mac 在網絡上的速度

Slow Mac

公司的檔案服務器起初是用 QNAP NAS 來建立,後來同事數量多了,QNAP 不勝負荷,轉用了跑 CentOS 的 PC 電腦。可是由 Mac 機連到檔案服務器仍然有時出現緩慢的情況。在網上找到了一個疑似改善的設定:
System Preferences > Network > WiFi/Ethernet > Advance > TCP/IP > Link-local only

使用後感覺好像快了一點點,待試多一星期才能確認是次修改有效。

2013年4月8日 星期一

設定 PHP 可用記憶體

Change PHP Memory Limit

今日收到客人的求助電話,指在管理頁生成報告時,等了很久也沒有反應。檢查過後,發現是數據太多,程序得不到足夠的記憶體而無法工作。把 php.ini 內的 memory_limit 由預設的 128M 改為 512M 便能解決問題。當然需要重啟 httpd 啦。

2013年4月7日 星期日

BeyondZ 兩歲生日快樂


今天是「BeyondZ」的兩歲生日。除了我一個,沒有人記得。所以公司沒有搞甚麼慶祝活動。說來也沒有甚麼好慶祝。兩年來的努力,還未能達到回本的目標。

一轉眼創業已經有兩年時間。我發現自己喜歡話事、喜歡自由。SOHO 較適合我。雖則收入不會穩定,但勝在可以發揮想像空間,及向喜歡的方向前進。日後有機會必定要嘗試 SOHO 滋味。

2013年4月5日 星期五

甭 Jailbreak 關閉《Hardest 2 HD》廣告


大女兒轉玩了《Hardest 2 HD》,但 Bug 太多導致經常彈回標題畫面。而上方的廣告又經常阻住視線,所以嘗試把廣告刪除。

在 Library/Caches 中有個 UserDefault.xml,利用《TextWrangler》打開後,發現一些 XXX_ENABLE 的東西。當中有 AdMob 及 SmartMAD 的成份,估計是廣告代理的東西。編程人員喜歡以 1 代表「是」,以 0 代表「否」,因此把所有 XXX_ENABLE 改為 0 的話,就能變成無廣告啦。

2013年4月4日 星期四

質素 vs 時間

時間一日一日地過,項目的開發進度仍然緩慢前進,心中焦急起來。現在要開發一個賺錢的程式很難,至少對我來說是難。要是進度落後,意味著成本增加,要賺回同事的工資就更難。

為了限制成本,結果是將某些功能、某些畫面去掉,以補償花多了的時間。問題是這樣好嗎?我覺得不是,但別無他法。要是花了更多的錢卻收不回來,倒不如多作嘗試。只希望先推出,看反應看評價後再作改良。但願這個方法行得通。

2013年4月3日 星期三

求知的心

最近幾個新項目的預定開發時間為一個月之內,但全部都無法達成。大多都超出一倍,甚至是兩倍的時間。原因有三:一是沒有充足清楚的流程設計;二是有突發事情需要立即處理;三是同事的經驗不足。我認為最主要的原因是後者。

就以「影像分析」為例。我預計一天半能完成的工作,開出五天時間給同事處理。雖然同事在大學修讀過相關課程,但畢竟也是新鮮人,所以給予五天時間。給了點方向後便開始製作。五天後,甚麼也做不到。原本想再給他時間,但有些事還是不能勉強。改由另一位較為資深的同事處理。他的學習能力很強,因此給他三天時間。這次做出點成績,但成功率低,使用性也很低。最後只好親自上陣,一天搞定。

我沒讀過大學、修的是文科、會考只有兩分。編程技巧全是看書自學,是實戰鍊成出來。跟讀大學修理科的同事,不同的是經驗。經驗源於興趣,興趣源於求知的心。而我的興趣是編程、遊戲及機械人。由於機械人開發能用上影像分析、遊戲開發能用上影像處理,所以我也有吸收影像相關方面的技巧。使用簡單的方法,加上細心思考,便能做出來。

說他們沒有幹勁?看來不是,他們有時做到晚上十一時才回家;說他們沒有心?又似乎不是,他們會上網找、從書找。不過,我看到一個問題。當網上沒有答案、書中沒有方法時,他們就停了,沒有嘗試自己思考來解決問題。看見同事們很努力工作,仍然做不出成績;很想幫助他們,但沒有頭緒。

2013年4月2日 星期二

雙線發展的問題

另一個我認為要專注的原因,是因為客戶應用跟自家應用的技術是可以南轅北轍。

例如客戶的應用會用上 AR 技術、室內定位技術、超聲波技術、體感技術…等。這些技術是自家應用較為少用。或者說得明白一點,自家應用多是遊戲類或平台類,使用的是比較大眾代的技術,不太需要標旗立異的方式進行。

雙線發展的話,一方面要構思遊戲的玩法、故事、內容、設定;另一方面要兼顧新技術的學習、發明、應用,甚至是客人提出的改動。兩者都是很花時間才能完成。雖然說把公司當成兩家公司營運、把同事分為兩組進行各自的方案看來是可行,但這要視乎人手的規模,以及管理層的方向是否清楚明白。至少目前為止,我做得吃力之餘,兩者都兼顧都不好…。

2013年4月1日 星期一

BeyondZ Games

兩年時間可以是很漫長。不過一切已經結束。指的是跟舊公司訂下的兩年不直接競爭的冷河期。

說來真的很後悔簽訂這條不平等條約,不過當時需要一份穩定的工作,Nuthon 當時又不需要全職開發人員,唯有接受。有朋友說我可以默默地做,但我不擅於說謊,亦不喜歡說謊。又不像其他舊同事般沒有條例的約束。況且,要是遊戲做得好的話,自然也會露底。倒不如堂堂正正地做。

現在我可以不受約束地開發喜愛的遊戲。因此打算為公司加入兩個品牌:BeyondZ Games 及 BeyondZ Labs。前者負責遊戲開發,後者負責科技研究項目。希望能在遊戲方面殺出一條財路。