2015年8月30日 星期日

修正 Nginx 的 session_start() 錯誤

一直用開的 PHP 句法,發現在 DigitalOcean 的 CentOS + Nginx 服務器上出現了以下錯誤:
[30-Aug-2015 20:25:08 Asia/Hong_Kong] PHP Warning:  Unknown: open(/var/lib/php/session/sess_p9be2496f6tpgorg1cbb21r0k1, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
[30-Aug-2015 20:25:08 Asia/Hong_Kong] PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0
[30-Aug-2015 12:26:16 UTC] PHP Warning:  session_start(): open(/var/lib/php/session/sess_p9be2496f6tpgorg1cbb21r0k1, O_RDWR) failed: No such file or directory (2) in /usr/share/nginx/html/dev/
查看目錄,找不到 /var/lib/php/session/,只有 /var/lib/php/。於是建立 /var/lib/php/session/ 並把它設定為所有權限「chmod 777 /var/lib/php/session/」,問題便能解決。

2015年8月28日 星期五

3D 打印溫室


在超市購買了兩瓶大大的兩公升忌廉汽水,加上家裡的牛奶,便可以製成美味的「忌廉鮮奶」。但喝完的塑膠瓶丟掉好像有點浪費,於是想想可以製成甚麼。想到了製作小型溫室。


內子早前購入了兩棵紫蘿蘭,記得說明書指可放室內,不怕乾涸。但我沒有甚麼關照它們,很多時土壤都乾得十分利害。一直想把它放入小溫室內,於是決定塑膠瓶做頂,加個 3D 打印的底蓋,合成一個小型溫室。量度好塑膠瓶的圓周後,在 Inventor 設計底部,加入接合的榫位,花了 9 個小時打印出來。成果非常滿意。之後就是看小花能否適應新的環境。

2015年8月26日 星期三

AMIGO 動作編輯器・四


還是《Bootstrap》美觀好用。再稍為更改一下介面上東西的位置。


至於整個編輯器最重要的部份,就是 PeterOne 支援的 48 個輸出埠;每個都能以 PWM 訊號輸出,每個都需要控制條、開關掣、修改按鈕、刪除按鈕。要是把 48 個這樣的東西都塞進畫面,怎樣在全屏模式中都放得下?於是嘗試直式及橫式。直式比較整齊,但要是加入開關掣、修改按鈕、刪除按鈕後會顯得非常修長,一行也只能容下 12 個,至少四行才能滿足需要。全屏放不下。至於橫式,放得比較好看,但全屏也只容得下 24 個埠,同樣滿足不到需要。既然直式橫式都不行,而且一台《Tri-robot》都只是 17 個關節,亦即是 24 個輸出埠能滿足實際需要。所以決定使用橫式。但在 48 個埠中,我無法得知用家選哪 24 個埠;於是加入「Add Slider」,在需要時才加入,並且能為每組控制條設定輸出埠。看來這樣設計暫時可以。

2015年8月25日 星期二

TIPS 第二輪選


昨晚是第二次輪選,從 24 支創業隊伍中挑選 12 支進入最後一輪淘汰。《!Bag》有幸繼續晉級。下星期一將會是從 12 隊中選出三甲,進行針對式培育。單看生意模式,我們的《!Bag》很有信心進入 12 強,至於能否問鼎三甲,實在有點保留。而且 12 強當中,也有些生意模式跟《!Bag》是一樣的,只是產品不同而矣;還有強勁的《洗車俠》坐陣,我們搶佔一個席位就更加難了。距離總決賽還有六天時間,看來要好好思考一下讓別人值得花心血投資的特點。

2015年8月24日 星期一

AMIGO 動作編輯器・三


《jQuery-UI》真的很普通,還是接受不了介面的設計,唯有再找更好的選擇。找到一個《Bootstrap-Slider》。我立即更新一下介面。還是這個比較好看。

2015年8月23日 星期日

AMIGO 動作編輯器・二


原本想以《Bootstrap》來開發《AMIGO Editor》,可是找不到直立式的捲動棒,而且《Bootstrap》的部件比較佔位,目前 960x640 的畫面將無法容得下 20 個馬達設定。於是改為使用《jQuery-UI》,雖然沒《Bootstrap》美,但又比普通的好,還是試著用吧。程式方面,已經順利做到雙向溝通,接著要試的是儲存動作數據。成功的話,往後的都是介面方面的編程了。

2015年8月22日 星期六

在 Yosemite 上安裝 Arduino Nano 串口驅動程式


拍檔 Keith 之前在淘寶替我買了數塊 Arduino Nano 板子;今日一試,發現之前用開的 Arduino Nano 驅動程式都沒有效果。到淘寶一看,原來是使用 CH34x 芯片。以下是成功在 Mac OS X Yosemite 下安裝的方法:

  • http://www.wch.cn/download/CH341SER_MAC_ZIP.html 下載驅動程式
  • 解壓 CH341SER_MAC.ZIP 並安裝內裡的 ch34xInstall.pkg 程式
  • 在 Terminal 執行 sudo nvram boot-args="kext-dev-mode=1"
  • 重新啟動
  • 2015年8月21日 星期五

    AMIGO Editor


    一直都想寫 Chrome App。眼見《Tri-Robot》的 Windows 版動作編輯器當初只為簡單測試而製作,欠缺一個完善美觀容易使用的設計;於是打算以 Chrome App 形式開發新版本。這樣的好處是無論你是使用 Windows / Mac OS X / Linux 甚至是 Chromebook 都能執行,變成跨平台的應用程式。初步已能成功讀取串口的名稱。只要成功傳取資料,再加上用心設計的介面便能完成。

    2015年8月17日 星期一

    TIPS 第一輪選


    公司在三月份成立的一個項目,發展至今已有一點進度,但各個單位都沒有成功經驗,於是參加了 TIPS 創業比賽,希望可以得到前輩的指點,建立成功的生意模式。

    今晚是第一次輪選,讓從 100 多支創業隊伍中挑選的 48 支隊伍進行「一分鐘演說」,向大家精簡地介紹事業的理念;並從中選出 24 支隊伍在下周一進行第二輪淘汰。我們派出事業主幹的拍檔進行演說,最後有幸入選 24 強,參加下一次的篩選。圖中是 24 強代表跟評審們的大合照。

    2015年8月16日 星期日

    重新設計 AMIGO Tank 的馬達部件


    既然 U 字形 3D 部件帶有虛位,而馬達前端又沒有螺絲孔來定位,唯有再設計過新的部件。之前另一 C 形設計非常合身,但沒有鎖住馬達,在行走時有機會計馬達也在自轉,於是今次加入鎖定的部份;同時把接線面面向上方,減低沙塵水份影響接線位。


    電源線也重新焊接較粗的電線,傳遞更多的電力。外殻已成鄒形,接著便是頭痛的電子部份...。

    2015年8月15日 星期六

    AMIGO Tank 底板安裝


    今天跑到 Keith 的工場,除了拿生產好的底板外,順便把六個馬達安裝進去。要是有需要時可以即場進行修改。


    底板的鑽孔跟 3D 打印部件的孔完美結合,從未試過如此順利。安裝好六隻馬達後,由於已有一定重量,所使用的 1.5mm ABS 顯得軟弱無力。然而 Keith 一早為我預備好另一塊底板,利用銅柱連接後會比較堅固一點。可是我還想再拱固一下,立即修改底板繪圖,製成面板,利用 CNC 輸出。同時也在馬達下方加多一層底板保護馬達。三層的結構解決了柔軟的問題。不過,發現 3D 部件帶點虛位,抓不緊馬達,導至輪胎出現「八字腳」的情況,得再處理一下...。

    2015年8月12日 星期三

    AMIGO Tank 底板設計


    《AMIGO Tank》的六個車輪都製作完成,下一步是按照它們的尺寸去設計底板。沒有太多的考慮,只求簡簡單單畫出第一個版本,日後可再按情港修改及優化。除了安裝馬達用的鑽孔外,還加入了底板及面板連接柱的鑽孔,同時也有 Raspberry Pi 2 的安裝鑽孔。由於不想底板太過平面,也希望減輕重量,順道方便走線,所以加入了數條直間及中間的大圓孔。

    有了初步設計後,要拜托 Keith 及它的 CNC 機輸出。材料方面有鋁片及塑膠選擇,沒有定好用哪款。恰巧 Keith 的工場有 ABS 塑膠,那就決定用塑膠好了。造了出來就是這個樣子:

    2015年8月11日 星期二

    艱辛一星期


    過去的一個多星期實在活得很艱辛。無他,客人的一個活動推出市場,原本好好運作的服務器突然負荷不了。忙得不可開交。

    按照客人上年同一個項目的配備,加上一點點的升級,原以為可以應負活動的需要,豈料在上線一個半星期後出現問題。最初是出現 MySQL 最大連線數量迫爆,由 250 不斷修改至 2500 都無法解決問題;唯有在程式接口方面進行優化,刪減多餘的 MySQL 連線及查詢;同時把各常用表格一分為二,將過期的數據遷入另一表格,令原來表格保持在較低的數據量。以上方法有點效用,可是過了一天,問題再次出現。在 netstat 上查看 HTTP 連線情況時,發現大量 SYN_RECV 阻塞了所有 HTTP 的通訊,就算重啟電腦也瞬間變成 SYN_RECV。向寄存公司查詢,回覆是 CPU 使用率達到 100%;我有一直在監察,明明最多是 95%...。然而,由於整個項目是建基於客人上年活動時的人流,在設計中沒有增加服務器的預算,當刻實在沒有辦法。後來想到把 Android 用戶分流,畢竟 Android 用戶人數最多,同時 Google Play 的審批過程只須三小時,可以在新版本中直接連接新服務器;得到客人的同意,於是立即進行。可是好景不常,兩天後相同情況出現,舊服務器在繁忙時間應付著每秒 600 人次,算是能接受的上限;而新服務器則達到每秒 900 人次,超出上限一半。那時真的沒有辦法,只能把一些次要的更新在繁忙時間中刪除,以縮短用戶的連接時間,增加服務用戶的數目。雖然解決不了問題,但至少能幫到一點忙。

    今次人流之多,實在超乎想像。連續一個多星期搶修、更新及升級至深夜,零晨六點又起來監察服務器情況。雖然出了嚴重的狀況,但我對自己的處理及負責任程度實在非常滿意。從不斷支援、修改,到提供多一台服務器,及打後的一切為同步而做的功夫,我們沒有收取客人一分一毫。不過,客人不會這樣想,他們都認為是應該的,而且一定有很多怨言。試想想,如果跟香港寬頻申請 100GB 服務計劃,但自己用量太高,100GB 不夠用時,跟香港寬頻多拿 100GB 頻寬,你估要不要收費?可惜無計,畢竟我們都希望有翻單...。