2012年3月31日 星期六

AMIGO 六足的關節部件

跟四位機械人發燒友去太古城的機械人展。展出的都是能在市面買到的機體,除了那台像真度高的女機械人外,沒有一點驚喜。反而之後坐下來「吹吹水」來得開心。

網友 Peter 也有出席,順道把製造好的部件交給我。回家後放進機體,尺寸剛剛好,十分精準。可是在 Servo 碟的位置則遇到問題,可能是繪畫設計圖時量度得不好,Servo 碟剛剛無法穿過板金的圓孔,需要把孔擴大才能繼續安裝...。

2012年3月30日 星期五

Arduino vs ATMega128

這個星期忙於趕製為客人度身訂製的 Samsung Galaxy Tab 7.7 應用及其後台管理項面。也花了點時間看完一本新書「Make: Arduino Bots and Gadgets」。所以沒時間嘗試新的技術。選這本書看,是因為 AMIGO Hexapod 的機體差不多完成,是時候選擇 MCU。我的首選是 ATMega128。過往三架機體也是用這塊小板。最近得悉 Arduino 後,想了解一下是否合用。它有很多資源,也很易容,但不適合我。我跟 Steve Jobs 一樣很喜歡控制身邊的事物。Arduino 給我的印象跟 BASIC 一樣。易學易用,但無法隨心所欲,而且慢。所以,還是用 ATMega128 ASM 好。

2012年3月29日 星期四

Fritzing

跟舊同事 Brian 討論一下 Arduino 的事宜時,他介紹我使用一個繪畫電路板的軟件。雖然是免費,但畫面很好!

http://fritzing.org/download/

2012年3月25日 星期日

組合 AMIGO Hexapod

Constructing AMIGO Hexapod
今個周末十分忙,除了應付大女兒的活動外,還要加班趕工。既然昨晚拿到板金,就在早上來個安裝。效果十分理想,不過開始感覺到一點重量。希望六顆 S3003 能夠支持身體的重量。萬一不能的話,便要用 MG995 來頂替。

2012年3月24日 星期六

AMIGO Hexapod 板金二號入手

這個星期很忙,有一個應用趕著上架;而另一個則趕著完工。卒之要星期六才有時間找 Peter 取得 AMIGO Hexapod 的板金。面板厚度為 2mm,底板厚度為 1.5mm。多謝 Peter 的幫忙!

2012年3月23日 星期五

Javascript 下的 UTF-8 加密工程

Javascript UTF-8 Encoding

有兩個在進行的項目都有 Admin Page 作數據管理。一個是正體中文,另一個是簡體中文。當中有需要用 Javascript 把中文字串加密;一來增加保安程度,二來避免了破壞 URL。在另一端的 PHP 會把數據解密後儲存到數據庫中。可是,在 HTML 的檔頭已經設定為 UTF-8,但用 Javascript 轉換出來的數據卻不正確。PHP 的解密程序會視一個 UTF-8 文字為 24-Bits,而 Javascript 輸出卻只有 16-Bits。經過連翻試驗之後,發現要經過 unescape(encodeURIComponent(x) 洗禮,Javascript 的文字才會變成 24-Bits UTF-8 文字。
function encodeString(inputString)  {
 var outputString = "";
 var utf8String = unescape(encodeURIComponent(inputString));

 for (var i=0; i<utf8String.length; i++)  {

  var value = utf8String.charCodeAt(i);
  var encodedValue = (value^secretKey);

  var hex = Number(encodedValue).toString(16).toLowerCase();
  if (hex.length == 1)  {outputString += "0";}
  outputString += hex;
 }

 return outputString;
}

2012年3月22日 星期四

在 Mac 上把 PDF 轉為圖檔

PDF to Image Sequence on Mac
周二晚上十一時許,突然收到客戶的來電要求把一本雜誌上架,希望能在第二朝開會時展示給老闆觀看。由於管理頁面還有幾個技術問題尚待解決,我唯有尋求其他解決方法。原來利用 Mac 本身的 Automator 便能完成這樣的轉換工作。

  • 首先,在 Automator 建立新 Workflow
  • 之後把 PDF 拖拉到 Automator 的右方
  • 在左上方的搜索欄輸入 PDF Image
  • 把下方的「PDF to Images」拉到視窗右方,並選好輸出目錄
  • 在左上方的搜索欄輸入 Type
  • 把下方的「Change Type of Images」拉到視窗右方
  • 選擇輸出的圖檔格式
  • 最後按「開始」鍵進行轉換

    用了 Mac 四年,覺得 Apple 的設計十分體貼,很多事情不用安裝軟件便能做到,不像 Windows 般只得一個空殼系統。
  • 2012年3月21日 星期三

    上傳大檔案

    Upload Large File

    最近開發了一個雜誌架 App,能讓客戶自行發佈新雜誌。為了有效測試,我選用較細小的檔案,直至所有流程都沒有問題為止。現在就是這個時候。當我嘗試拿真正的檔案進行測試時,發現檔案無法成功上傳。在網上不斷尋求解決辦法,可惜問題依然存在。經過多次嘗試之後,發現了解決方法。

    修改服務器的 php.ini:
  • post_max_size = 100M
  • upload_max_filesize = 100M

    在接收檔案的 php 目錄新增 .htaccess 檔:
  • php_value upload_max_filesize 100M
  • php_value post_max_size 100M
  • php_value max_execution_time 1000
  • php_value max_input_time 1000

    修改後要重啟服務器。
  • 2012年3月20日 星期二

    久等了的 iPad

    Long Waiting iPad
    原本能在上周六送到的 iPad,遲了三天才到手。跟第一代 iPad 一樣,我選擇了 64GB WiFi 版。主要用來看 PDF, ePub 及 iTunes U。以往只用到 40GB 左右的容量,今次應該會用多一點吧。

    這台外觀沒有改進的 iPad,遇著 Retina Display 效果提升了很多。當使用 iPad 原大的 Apps 時,很容易看到邊沿的鋸齒。若使用 Retina 的 iPhoto 則效果十分之好。

    2012年3月18日 星期日

    AMIGO Hexapod 板金二號

    網友 Peter 終於回港了,得到他努力的支援,AMIGO Hexapod 板金二號已經生產出來了。稍後把所有 Servo 跟底板組合起來後,便會著手修改足部的關節。

    2012年3月17日 星期六

    DHL Express is dying

    自從昨天收到 iPad 出貨通知之後,一直監測住送貨的進度。下午三時發現包裹已經在速遞手裡,滿心歡喜,匆匆忙忙回家等候。一直等到晚上十時半,在蘋果網頁發現住宅的送貨時間是朝九晚九。在希望落空之際,再次監測送貨進度時,竟發現「Delivery attempted; recipient not home」。在沒有電話、沒有 SMS 通知、本人又一直在家、大門打開了的情況下,出現這個狀態實在令我驚訝。

    於是致電客戶服務熱線,指客服時間已過,要星期一再打過去。致電客服總機,又說無法查詢,連留下訊息也不行,確保寄送地址沒有出錯也不行。究竟是個怎樣的系統?一家國際商業機構的服務質素竟然是這樣!DHL Express is dying...。

    2012年3月16日 星期五

    iReserve 策略

    Strategy on iReserve

    昨日最多朋友一起做的事,相信非「預訂 iPad」莫屬。究竟怎樣可以提高抽中的機會?白想了一會,我有以下結論:

    在 iReserve 中訂購全新 iPad 可選 1 台或 2 台。從這點來看,我認為訂 1 台的中獎機率會較大。假設 iPad 的數目是固定。在抽韱的時候,應該是抽到 2 台扣 2 台,抽到 1 台扣 1 台。假如當中有中獎者是選 1 台的話,那麼尾數便有機會是 1。這時要求 2 台的人便會落空;變成要求 1 台的人在抽,大大縮小抽獎範圍,增加中獎機會。就算尾數是 2 的話,選 1 台的機會率也不會變小。

    在這時人人都預訂 2 台的時間,選 1 台似乎有點著數。以上只是我個人的假設,與實際情況可能有異,只作參考之用。要是 Apple 不是以台數作限,而是用人次的話,以上方法便起不到作用。

    後記:最終我選了 1 台 16GB WiFi 版本,沒抽中。

    2012年3月15日 星期四

    HTML 及 CSS 筆記

    HTML & CSS Notes
    把 DIV 設定成半透明,可在 CSS 加入
    background-color: #000000;
    opacity: 0.3;
    取得 selector
    var newsletter = document.querySelector('#newsletter');
    從字串中分拆成 array
    dataArray = request.responseText.split("|");
    在數字前方補零
    var formattedMagazineID = "000000"+magazineID;
    formattedMagazineID = formattedMagazineID.substr(-6);
    隨機數
    var randomNumber = Math.floor(Math.random()*1000);
    建立 URL 安全的字串
    var safeContent = encodeURIComponent(content);
    彈出選擇視窗
    var answer = confirm ("Are you a girl?");
    if (!answer) {echo("No!");}

    2012年3月14日 星期三

    真相不在表面

    今天在職場上學到「真相不在表面」。就像在開會時,董事提議開發部為趕及死線要加班處理。此話不是第一次聽到。其實加班不時在做,只是加班的地點不一定要在公司而已。這個錯誤也發生在我身上。新同事的工作效率未如理想,代碼的擴展性也有待改善,平時見他準時返工放工,感覺不到他的熱誠。但今天溝通後卻有另一發現,原來他為了這份新工作購買了一台 MacBook Air,以便在家也能盡力學習 Objective-C。這是我觀察所遺留了的部份。

    今日那同事在公司最後上班的日子。希進他能繼續學習 Objective-C,日後有緣的話能再次合作。

    2012年3月13日 星期二

    PHP 開發筆記

    PHP Commands

    以下是一些常用的PHP 句法:
    建立新 array
    $fileArray = array();
    加入數據
    $fileArray[] = $file;
    逆向排序
    rsort($fileArray);
    讀取 array 中所有的內容
    for ($i=0; $i<count($fileArray); $i++) {}
    不是所有瀏覽器都支援
    $_FILES['upload']['tmp_name'];
    $_FILES['upload']['name'];
    要從 PHP 中輸出圖片內容,要先設定 Contet-Type:image/jpg 後,再用 readfile($imagePath); 輸出
    取得字串長度
    strlen("This is a PHP string");
    取得當刻時間
    $today = date("Y-m-d H:i:s");

    2012年3月12日 星期一

    avrdude stk500v2_ReceiveMessage

    以前開發機體用的軟件,都是用 Fujitsu Lifebook + Windows XP 的。這幾年轉用 Mac 後,決定在周末嘗試在 Mac OS X Lion 上開發 AMIGO Hexapod 的軟件。第一樣要處理的事項是把 .c 組譯成 .hex 後下載到 ATmega128。找到了 CrossPack 有以前使用開的 avrdude,還能用 Xcode 開及(在 Terminal 下以 avr-project Main 來建立專案)。組譯方面沒有問題,不過使用跟 Windows 一樣的參數卻無法跟 ATmega128 連線。可能是由於以前用的 USB -> RS232 接線在 Mac 下都沒有驅動程式,改為使用 Bluetooth 的緣故。找了很久試了很久都沒有反應,日後繼續!

    2012年3月8日 星期四

    新 iPad

    The new iPad
    Apple 值得一讚!相對於之前的開賣,今次讓普羅大眾早上收到 The new iPad 的消息後才在下午 1:02 開賣。就算自然醒的師奶們都較易有機會購買到 iPad。似乎新 iPad 的需求也很大,不到 1:28 便售罄,歷時只有 26 分鐘。

    更新:Apple 真體貼,01:55 又再開賣。
    更新:似乎是 Apple Server 死完又死,才導致商店開完又開。

    2012年3月6日 星期二

    數碼卡尺

    Digital Caliper
    上周六在淘寶網選購了一把數碼卡尺,售價為 $60.5 人民幣,加 $20 運費。是我第一次親自淘寶的東西。昨天收到貨後拿來測試,感覺不錯。誤差為 0.02 毫米。工欲善其事,有了這件工具,能提升繪畫機體設計圖時的尺寸準繩度,減少重造的機會。

    2012年3月5日 星期一

    UIImageView 三維處理

    UIImageView 3D Transform
    有一陣子沒有寫作 iOS 開發的筆記,是因為工作實在太忙,有好幾個項目需要由我去處理。新來的同事還未能夠減輕工作量。希望他能在不夠的將來能獨自處理開發項目。

    今個星期將有一個人 AR 項目需要完成。當中有些畫面需要用到立體圖像處理;因此在項目開發的初期已經加入 OpenGL 圖層。可是,我不熟悉 OpenGL,花了整天時間都無法把平面的貼圖以三維方式旋轉及顯示。於是想到能否用 UIKit 來達成。回家吃過晚飯之後,隨即編寫代碼進行實驗。意外地簡單便能做到!
    #define DEGREES_TO_RADIANS(x) (3.14159265358979323846*x/180.0f)
    
    - (void)updateFrame  {
        static CGFloat degrees;
        float zDistance = 250.0f;
        
        degrees++;
    
        CATransform3D transform3D = CATransform3DIdentity;
        transform3D.m34 = 1.0/zDistance;
        transform3D = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(degrees), 1, 0.5, 0);
        _imageView.layer.transform = transform3D;
    }

    2012年3月1日 星期四

    AMIGO Hexapod 底板新設計

    New AMIGO Hexapod Body Plate
    針對新的面板設計,底板亦要作出修改。為了盡量減低整體重量,底板偷走了很多空間。