2014年3月31日 星期一

解構 Disney Puzzle Packs


我很愛看 3D 動畫,特別是 Pixar 出品的,更加會購買影碟欣賞及收藏。不過最近開始對 Pixar 的作品失去興趣,尤其是《勇敢傳說》,完全沒有想看的意慾。畫得實在太醜了。反而迪士尼則畫得越來越好、越來越吸引。《魔髮奇緣》、《無敵破壞王》、《魔雪奇緣》都是非常好的作品。上周購買了《魔雪奇緣》藍光碟之後,已經跟女兒看過三遍,她們都十分喜愛這齣電影。


細女最愛玩拼圖,發現迪士尼的拼圖遊戲也加入了《魔雪奇緣》角色,於是下載玩玩。除了玩之外,也順便了解它的構造。跟很多應用一樣,都是由 Unity 工具製作而成,但有部份的圖卻沒有加入到 .assets 包內。只要解開 .ipa 便能看到 PNG 內容;甚至是 MP4 影片內容。還有一樣奇趣的地方,每部作品的不同遊戲的數值,如:各關卡完成的所需時間、完成進度、是否完成所有內容;甚至是內容是否購買都儲存在 Plist 之中,一目了然。除此之外,在運行 iOS6 的 iPad 所下載的版本卻沒有《魔雪奇緣》的內容,就算把 iOS7 內的 Plist 拷進去也無法出現,似乎這個程式沒有加入軟體更新的概念,亦即是說所有內容已綁定在應用程式內...。

2014年3月30日 星期日

Sisters BeautyPro


從 Facebook 的《ALL THE BEST...SITA》群組得知 iPad 上的《姊妹美容》雜誌有 Sita 的訪問,於是嘗試下載及分解。


這個應用程式很得意,把不同期號的雜誌內容都放進 Plist 內。就像 Sita 那期,是由 8 個 ZIP 組成。每個 ZIP 檔都是 9.4MB 大小,相信是方便分開下載,減少因斷線而重頭下載的風險。要解壓這些檔案的話,需要先行將它們合拼成單一檔案。在 Terminal 下用「cat bp_887.1.zip bp_887.2.zip bp_887.3.zip bp_887.4.zip bp_887.5.zip bp_887.6.zip bp_887.7.zip bp_887.8.zip done.zip」即可。ZIP 檔是被密碼鎖上,不過密碼也一起放在 Plist 內。所以,你明的。

其實以上步驟可以省卻,雜誌下載後會自行解壓到 Library/Caches/@bp_358_dpa 中。這個目錄下就是各頁的 JPG 檔。可是內容被加密。暫時沒辦法解開...。

2014年3月29日 星期六

新 Instant Pose 畫面


頹廢了一個月,終於拿到一點點心情繼續《AMIGO Controller 2.00》的開發工作。是次換上了即時動作畫面的底圖,感覺不錯。按照設計,應該還要加入第五個頁面「預設動作」。把已編輯好的動作上傳到機體中,加快機體的反應。

2014年3月28日 星期五

解決了 Failed to fetch URL 問題

Solved Failed to fetch URL Issue

今日再繼續研究「Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: File not found」問題。終於找到解決方法:

  • 打開 Terminal
  • 跳轉到 SDK 的 Tools 目錄,如:cd adt-bundle-mac-x86_64-20140321/sdk/tools/
  • 以 Root 身份執行 android,如:sudo android
  • 確認能成功取得 Android Wear ARM EABI v7a System Image 選項
  • 把程式關閉後再以正常情況打開 Eclipse 及 Android Virtual Device Manager
  • 選 Android Wear ARM EABI v7a System Image 並安裝


  • 2014年3月27日 星期四

    Android Wear SDK


    花了我足足一個小時,試過不同的方法,都找不到 Android Wear ARM EABI v7a System Image 這個選項,估計是因為 Eclipse 在向 Google 服務器訪問時出現「Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: File not found」錯誤所導致。不過,在瀏覽器輸入地址卻能傳回正常內容。無論新版、舊版 Eclipse,或是新版 Android Studio 都出現相同情況。

    回家後在 MacBook Pro 上一試沒有出現錯誤,終於找到 Android Wear 的系統鏡像!明明兩個地方都是用 Apple AirPort Extreme;兩個地方都是用 Mac OS X Mavericks;兩個地方都是最新版本的 Eclipse,問題究竟出在哪?

    2014年3月26日 星期三

    OBD II


    收到了一件新奇的玩意。這個是 OBD II 裝置,只要插在私家車內,便能透過藍牙讀取車速、轉速、汽油狀況、溫度...等。如果結合流動應用程式收集數據,應該能計算出有用的資訊。可惜這個裝置是藍牙 2.0,沒有 MFi 授權,只能在 Android 或 Windows 上使用。

    2014年3月25日 星期二

    在 CentOS 安裝 Node.js 及服務器測試程式

    Install Node.js in CentOS with server sample code

    一直都想試玩 Node.js,看看寫法、效能及維護比用開的 PHP 方式有甚麼不同。今天把它實現了。

    在開始安裝 Node.js 之前,需要確保 CentOS 有相關工具。在 Terminal 安裝的指令如下:
    yum install gcc gcc-c++
    yum install autoconf automake make
    yum install curl
    yum install openssl-devel

    穩陣起見,還是來過系統更新:
    yum update

    有了以上工具,下一歲是安裝 Node.js。先跳到打算安裝的目錄:
    cd /etc/
    mkdir nodejs
    cd nodejs
    wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
    tar zxvf node-v0.10.26.tar.gz
    cd node-v0.10.26
    ./configure
    make
    make install
    node --version

    由於有機會用得上 Socket,還是把 socket.io 也一起安裝:
    npm install socket.io

    作為服務器,基本上也會使用到 MySQL,所以也要安裝接口:
    npm install mysql

    程序安裝完成。接著是編寫服務器的測試程式。把以下代碼儲存為 server-example.js:
    //----------------------------------------------------------------------------------------
    //  Node.js Server Test
    //  Written by Pacess HO
    //  Copyright 2014 Pacess HO.  All rights reserved
    //----------------------------------------------------------------------------------------
    
    var serverHost = "192.168.1.10";
    var serverPort = 8888;
    
    var sqlDatabase = "database";
    
    //----------------------------------------------------------------------------------------
    function getTimeStamp()  {
     var currentDate = new Date();
    
     var year = currentDate.getFullYear();
     var month = currentDate.getMonth()+1;
     var date = currentDate.getDate();
     var hour = currentDate.getHours();
     var minute = currentDate.getMinutes();
     var second = currentDate.getSeconds();
    
     var timeStamp = year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
     return timeStamp;
    }
    
    //----------------------------------------------------------------------------------------
    function PHLog(message)  {
     var timeStamp = getTimeStamp();
     console.log(timeStamp+"> "+message);
    }
    
    //----------------------------------------------------------------------------------------
    //  Create MySQL connection
    var mysql = require("mysql");
    var connection = mysql.createConnection({
     host: "127.0.0.1",
     user: "user",
     password: "password"
    });
    
    connection.connect();
    connection.query("use "+sqlDatabase);
    
    //----------------------------------------------------------------------------------------
    //  Create HTTP server
    var http = require("http");
    var server = http.createServer(function(request, response)  {
    
     response.writeHead(200, {"Content-Type": "text/plain"});
    
     var url = require("url");
     var urlString = request.url;
    
     var urlQuery = url.parse(urlString, true).query;
     var action = urlQuery.action;
    
     var sqlQuery = "SELECT * FROM user"; 
     connection.query(sqlQuery, function(err, rowArray)  {
      if (err)  {throw err;}
      else  {
    
       for (var i=0; i<rowArray.length; i++)  {
        var row = rowArray[i];
        response.write(i+") "+JSON.stringify(row)+"\n");
       }
    
       var timeStamp = getTimeStamp();
       response.end(timeStamp+"> Done.\n");
    
       PHLog("Request done!");
      }
     });
    
     //----------------------------------------------------------------------------------------
     //  Shut down the HTTP server?
     if (action == "close")  {
    
      //  Finally, we can now end connection in two ways. Either use connection.end, or connection.destroy.
      //  connection.end statement will close the connection ensuring that all the queries in the queue are processed. Please note that this is having a callback function.
      //  connection.destroy statement will terminate the assigned socket and close the connection immediately. Also there is no more callbacks or events triggered for the connection.
      connection.end(function(err)  {
    
       //  MySQL connection closed, close server now
       server.close();
       PHLog("Server closed!");
    
       process.exit();
      });
     }
    }).listen(serverPort, serverHost);
    
    //----------------------------------------------------------------------------------------
    console.log("\n\n\n");
    PHLog("Server running at http://"+serverHost+":"+serverPort+"/");
    以上程式會讀取 MySQL 內名為 database 的數據庫中的 user 表格。內容需要自行輸入。執行測試程式:
    node server-example.js

    打開瀏覽器,在地址列輸入 http://192.168.1.10:8888/ 會看到

    2014年3月21日 星期五

    嘗試修理 MakiBOX 的問題


    MakiBOX 閒置在家已經有一段時間,一直都無法成功打印。而且在家通常忙著別的事,還是把它帶回公司,在午飯時間可以處理一下。

    目前遇到的問題有四:
    1.打印頭溫度間中會大跌,導致物料無法擠出而打印失敗
    2.溫度保持在 205 度,但打印頭沒有物料擠出
    3.負責推送物料的馬達會不正常抖動,導致物料無法擠出而打印失敗
    4.物料被齒輪磨爛,導致物料無法擠出而打印失敗

    要是這些問題得不到解決,我的部件還是無法打印出來。由於打印頭沒有材料被擠出,於是把打印頭加熱後嘗試用手把材料推入。但不成功。嘗試把它拉出。也不成功。既然如此,決定打開打印頭來看看,發現材料外圍被溶化了而膨脹起來,導致材料被卡著。向專家查詢後,估計是溫度不足,令才料外層溶化,再因為壓力的緣故,使得材料向外擴展,形成卡著的問題。

    清理過後,我嘗試把溫度調到 215 度,看看這個情況會否出現。誰知道,打印頭出了狀況,無法加熱...。後來把打印頭重新組裝後,溫度又再能提升。似乎是打印頭的接線有問題,接觸不良而使得加熱失敗。甚至乎是溫度急降的問題也可能由此而起。

    2014年3月19日 星期三

    拉闊圖書館・十五:雙截棍

    BeyondZ Library 15

    三月份的《拉闊圖書館》開始出現疲態,很難得才找到同事講解「雙截棍」。學到了雙截棍的一些歷史、玩法、及不同物料造成的產品。可惜沒有真人對打環節,少了一份刺激。希望下一次《拉闊圖書館》有更充實滿足的課,如果還能開辦下去的話...。

    2014年3月18日 星期二

    Pronterface


    在 Google Plus 的 MakiBOX 群組貼上了 MakiBOX 的問題影片後,得到網友的留意,也把 MakiBOX 的負責人 Jonathan Buford 拉了進來。得到他的建議改用 Pronterface 內觀察打印頭的功率變化。「D0%」代表已經停止供電。我嘗試把打印頭加熱到 205 度並排出五分鐘物料,似乎上次的溫度大跌問題沒再出現;可以回歸原本的問題:「推送物料的馬達前後移動,形成打印途中沒有物料被推出,導致打印失敗」。原來有其他網友遇到相同問題,更有的是打印頭換了三次,每次都約使用兩星期後報廢。似乎打印頭的質素有點問題。隨後發現 MakiBOX 的零件只有 90 天保養,過了期便要自行付費購買零件。像我這樣的情況,報告問題後兩星期沒有回覆,拖一會豈不是 90 天,看來要到「消費者委員會」投訴一下。

    2014年3月17日 星期一

    下載 Instagram 指定 hashtag 的相片


    上年大約在這個時間編寫了一個「 下載 Instagram 帳號內全部的相片」的程式。那個程式主要是把 HTML 中的圖片地址解拆出來並下載到服務器。是一個非常簡陋的程式。

    其實除了 Sita 自己的 Instagram 帳號內有她的照片外,在 Instagram 內也有其他用戶拍攝她的照片。照片甚至乎加上了 hashtag 來作辨認。為了保留這些相片,今次編寫的程式使用了 Instagram API,直接搜索指定 hashtag 的相片及影片。得到的是 JSON 格式的內容。程式會自動把相片及影片下載到服務器,以 hashtag 為資料夾分門別類。

    以下是 JSON 內容:


    以下是搜索程式的 PHP 代碼:

    2014年3月16日 星期日

    MakiBOX 問題發現


    《MakiBOX A6 LT》到手有三個星期了,但沒有一次能成功打印;就算打印出一半也沒有。

    今日再嘗試調整,順便拍下過程,方便找出問題所在。之前一直懷疑是打印頭的問題,但當時傳回的溫度值是正確的攝氏 205 度;番看拍出來的片段,發現溫度曾跌破 PLA 的攝氏 180 度溶點,難怪物料排出一會兒後會停止。有了這段片,相信 Makible 不得不換過一個新的打印頭給我。只是他們慣常用「拖字訣」,換得來都起碼兩個月...。

    2014年3月15日 星期六

    BLE 室內定位


    忙完幾個專案,終於有時間做 BLE 的實驗。很多開發者都在搞 BLE 室內定位。目前似乎沒有一個可用的方案。原因是現代城市中有太多訊號,藍牙容易被干擾,導致得出來的數據很不穩定,而要加入特定的演算法才能去除部份燥音。正所謂「差之毫厘,謬之千里」。如果訊號源的數據不可靠,那之後運算出來的結果誤差也會大。我寫這個 Javascript 程式就是要摸擬干擾的場景,看看演算法的結果是否能被接受。要是找到滿意的公式後,便能實際測試。

    2014年3月14日 星期五

    利用 Xcode 5.1 生成的 IPA 無法在 iPad 安裝

    我把 App 交貨給客人時,都會用網頁方式處理,貪它方便又不用 iTunes 同步,隨時都能安裝。這個做法已經有四年歷史,可算是業界的先驅。


    今日客人在 iPad 下載出現了失敗情況。每次把 IPA 檔放到網頁後,我都會用真機測試,曾在 iPad with Retina Display 試過能正常下載。拿 iPad 一試果真出現問題。

    通常第一個原因是 UDID 沒有登記。檢查過 Provisioning Profile 後發現 iPad 的 UDID 已經登記,理應沒有問題。

    第二個出現的原因是在組譯的過程中內容出了問題或設定錯了,如真機用的卻生成了模擬器版本;甚至是把 IPA 放到網頁時產生數據錯誤。不過其他機都能安裝,不會是這個問題。但我都嘗試一下,校對好設定並重新生成 IPA。同樣地,問題依然存在。

    第三個想到的原因是組譯時的 CPU 版本。iPad 4 是行 Armv7s,iPad 是行 Armv7。有可能 7s 能跑而 7 不能。找來一台同樣是 Armv7 的 iPad 2。沒有問題。意味著不是 CPU、壞檔或 UDID 的問題。


    查看錯誤記錄,發現是 iOS 系統的問題。想起了早幾天更新了 Xcode 到 5.1 版本。於是把 Xcode 拉到垃圾桶並下載 Xcode 5.0.1。用這個版本生成出來的 IPA 便沒有問題。

    2014年3月13日 星期四

    ArrayZ

    今晚跟 Maker 朋友們聚會。地點在「香港 3D 打印教父」Chris 位於大角咀的工作室。參觀 Chris 開發的 ArrayZ 打印機。


    一踏入工作室便看到一台有待修理的 Form 1。實物跟網頁上的一樣美。主人是一家國際學校的老師。那台機的平台出了狀況,打印一段時間後支撐會脫落。花了點時間修理好問題後開始打印。出來的作品是個比食指指甲還要細小的人頭,清楚看到面部的輪廓。不愧是光固化技術,實在精細。


    第一次跟 Chris 見面。他為人十分和藹,更即場示範用兩台 ArrayZ 打印部件。直線筆直,平面能完全填滿。準確度很高。使用起上來也很簡單,很適合初學者。待儲夠錢時會買一台,不過家中細小,要找個空氣流通的地方不容易...。

    我那台 MakiBOX 似乎無望,向客服求助卻沒有回覆。實在是一家非常差勁的公司。只能說:「一分錢一分貨。客服?不包的!」。

    2014年3月12日 星期三

    開發自家 App 也可以是「輸了就是贏」的心態嗎?

    上星期,華人首富發表了「輸了就是贏」的看法。那時真的不理解這句說話的含意。輸了就是輸、贏了就是贏,何來「輸了就是贏」。如果「輸了就是贏」,那即是沒有輸?亦即是說抱著「必贏」的心態?不過,通常很有智慧的說話都是玄的,需要慧根去參透。就像是「真的假不了,假的真不了」。何況是首富說的話,更加充滿智慧。雖然不明白,倒也嘗試代入公司的營運,看看能擦出甚麼火花。

    現在的流動應用程式中,以自家開發爭錢的為例,聽老闆說 99% 的利潤由 1% 的開發公司支配,剩下的 1% 利潤由 99% 的開發公司爭奪。我不確定比例是否這麼懸殊,但至少 80:20 是有的。也有數據指 66% 的應用每月少過 200 個下載。當中我也有所貢獻。

    如果從這些數字來看,輸是必然的;贏,真是很難。那麼「輸了就是贏」可看成結果是輸了,但當中能有所學習,算是贏了。至少學到了一個輸的方法,下次不要再做同樣的事。還有其他「輸了就是贏」的情況嗎?暫時想不到。就算明白了字明的含意,仍未參透內裡的心態,是慧根不足吧。

    2014年3月11日 星期二

    《網絡爬蟲》結果


    《網絡爬蟲・二號機》已經運作了一段時間,我也簡單地寫了一個結果頁,方便跳到偵測到有 Sita 的內容。不過,實在太多了,逐個逐個看真不是辦法;而且有好多都是 YouTube 影片。要如何處理好呢?

    有興趣的朋友可到 http://sita.pacess.com/ 看看結果。

    2014年3月10日 星期一

    生日快樂


    今日是 Sita 公主的 27 歲生日,當然要紀念一番。平時寫 Code 需要十分集中精神,不會聽音樂。但今日整天聽著公主的歌聲,邊聽邊想念她。同時也在一個命理網找到公主的出生時辰為「癸亥」,初步推算後應為準確度甚高,稍後再推算一下。

    2014年3月9日 星期日

    Sita 陳僖儀紀念會・二


    已經有十多年沒有到過歌迷活動。今日出席了 Sita 的紀念聚會,讓我更了解陳僖儀多一點。原來 Sita 喜歡食生米、兒時非常文靜乖巧而且很有個性不受物質引誘、半歲已經識打拍子、煲電話粥時會寫低談話內容,還有 Sita 的「怪俠一枝梅」想法。真是一個非常有愛心的女孩子。多謝陳家給我們這個一同紀念的機會。


    紀念會除了陳家及歌迷之外,也有 Sita 的好友及金浪音樂中心的學生。這個蛋糕就是 Sita 最要好的 Rainbow 姊妹團其中一位成員製作,十分精美。我也有帶備生日禮物送給 Sita。考慮到陳家未必有太多空間放置歌迷朋友的禮物,而且對陳家沒甚麼用處,所以 Sita Nanoblock 還是留在家中。如果陳家喜歡,我十分樂意為她們製作一幅。反而手上兩本《Sita 陳僖儀紀念冊》則把其中一本送給陳家留念。希望她們喜歡。


    在我心中一直有個問題想確認一下,就是十多年前開發的《Doraemon 大富翁》Sita 有沒有玩過呢?今天從陳媽媽及妹妹 Crystal 口中得到答案。原來 Sita 跟妹妹都喜歡玩這個遊戲;早兩年還在玩。而且發現了一個沒被發現的 Bug:「原價 $50 的竹青蜓賣給商店竟然是 $100」。哈哈。這樣 Sita 就能得到很多的豆沙包去買地對付電腦。這個遊戲中的地圖及小遊戲的人工智能都是由我負責編寫,每個角色的思考方式都是我的一部份。某程度上來說,就是我的替身曾經跟 Sita 玩過遊戲。好宅,哈哈。很高興 Sita 喜歡我的作品;而我也很喜歡她的作品。

    還有一個問題很想確認「我夠竟見過 Sita 未?」。印象中一次跟太太在尖沙咀新太陽廣場晚飯後乘電梯回到地面時,聽到一把很好聽的聲音在唱「終身美麗」。也停留下來一會,但就不記得歌手的容貌。Sita 未入行前也曾在哪裡唱過同一首歌,可惜已經無法印證是否為她本人...。


    2014年3月8日 星期六

    東方日報:Robot Boxing 打擂台


    我跟另外兩位朋友開發的《Tri-Robot》在今日的《東方日報》有全篇幅的報導。希望在今年稍後時間舉行的 Robot Boxing League(RBL)能有更多的機體參加。

    2014年3月7日 星期五

    Devtools on Mobile


    最近心情不好,擔心著生活的前景,沒有心情寫 Code,只是漫無目的地瀏覽。

    昨天,跑到很久沒到的《Udacity》。發現到一個名為「Mobile Web Development」的課程。我相信它對於公司的美術同事有益處,所以觀看了一會,如果真是好的話便會介紹給同事。看了三課,學到了原來 Chrome 能直接 USB 線接手機來進行測試及即時修改。是一個很好用的功能。要在 iOS 裝置使用,需要安裝一個 Proxy 服務器。於是按照教學安裝。

    2014年3月6日 星期四

    安裝 MacPorts


    《MakiBOX A6 LT》拿了回來後一直都無法成功打印物件。懷疑會不會是靭體出了問題。按照官網的指示,Mac 機需要使用一個名為 DFU Programmer 的軟件來更新靭體。不過 Mavericks 沒有它。需要透過 MacPorts 這個工具進行安裝。同樣,MacPorts 也不是 Mavericks 本身的軟體...。


    http://www.macports.org 下載 MacPorts 並安裝後,在 Terminal 輸入「sudo port install dfu-programmer」。一會兒說能成功安裝。

    軟體已經安裝好。在正式更新前想到一個問題。我那台新鮮的 MakiBOX 跟來的是最新的 5D Printer Board,和之前的版本不同,理應該是最新的靭體,同時也應該是別的靭體。找遍官網及討論區都沒有相關資料。然而,我卻發現 Gcode 指令「M608」能查看靭體版本。不出所料比官網提供的還新,所以沒有更新。後來在討論區發現有網友不小心把舊底板的靭體更新到新底板而無法開機,不幸的是官網沒有新底板的靭體,他要等一段時間才能得到支援了。我真是幸運。

    2014年3月5日 星期三

    網絡爬蟲・二

    Website Found Website Waiting
    Busy Busy
    Website Done Found Sita
    Busy Busy

    經過改良後的《網絡爬蟲・二號》運作得比較好。可是搜尋 Sita 的資料時,非常容易掉進 YouTube 的漩渦...。

    2014年3月4日 星期二

    又是 M$ 惹的禍(六)

    之前在服務器加入了 GZIP 加密以提高傳輸效率。理應不影響現時的程式,但卻發現在 IE8 下載檔案時會出現問題:

    原本的 ZIP 檔經 IE8 下載後會變大了。打開檔案內容,更發現當中多了數據。圖中左面的是 ZIP 檔的內容;右邊是 IE8 下載後的 ZIP 內容。紅色部份是 IE8 自行加上的東西,導致 ZIP 檔破壞,無法解壓。可是在其他瀏覽器如:Chrome, Safari, Firefox 則沒有這樣的情況發生。可想而知這是 IE8 的問題。幸而可在服務器端解決。在 /etc/mime.types 中把 zip 從「application/zip」刪除,並加入到「application/octet-stream」類別。重啟 Apache 即可。

    2014年3月3日 星期一

    Sita 奪兩項「IFPI 香港唱片銷量大獎」


    Sita 的紀念專輯《All the best》獲 IFPI 2013「全年最高銷量廣東唱片」;
    Sita 亦憑《All the Best》+《Let Me Find Love》獲 IFPI 2013「十大銷量本地歌手」。

    2014年3月2日 星期日

    製作 Sita 的 Nanoblock 相片

    Making of Sita Nanoblock Image

    Sita 的 Nanoblock 其實不難造。簡言之是把相片轉為 5 色而矣。以下是我製作 Nanoblock 畫的步驟:


    首先,選好一張心儀的相片。


    把相片用「Desaturate」方法去色化後變成灰階般的相片。


    把相片裁剪成正方形。


    利用「Levels」調整一下亮度。


    把相片縮小成將要輸出的大小。我的例子是 60x60 像素。


    再把相片轉為「Indexed Color」。如果你的 Nanoblock 畫會用多一點顏色的話,就輸入多少隻色。我的例子是 5 隻色。


    轉換出來的會是由近白到近黑五種色。


    把五隻色轉為:白、黃、橙、紅、黑。得出成果圖。這個次序很重要,主要是以光至暗來排列。如果使用的顏色較多,則要自行排列。

    之後,就是按照所需顏色購買 Nanoblock。依圖片的排列及顏色一顆一顆地拼湊出最終成品。

    2014年3月1日 星期六

    Sita Chan @Nanoblock


    踏入 3 月份,亦即是 Sita 陳僖儀的 27 歲生日的日子快到了。試過用魔方來拼圖之後,打算嘗試用 nanoblock 來拼另一張,選了十多張 Sita 的相片,用 Photoshop 把它像素化後,最終選了這一張。使用 nanoblock 是因為它的像素較小,在相同面積下有較多較密的像素,製作出來的成品也較為易看。另一考慮是價錢,是魔方的五分之一。


    這張作品是 60x60 像素,拼出來的尺寸也只是 24x24cm。