2015年12月28日 星期一

個資漏洞


聖誕假期,內子回鄉探望舅仔新開的小店,我則帶著兩個女兒享受假期。到了一個大型商場,玩了中庭一個拍照遊戲。完結時要求輸入電郵地址,所拍的照片會轉化成聖誕卡並寄到郵箱。原本一個簡單的遊戲,卻存在著嚴重的個資漏洞...。

我的郵箱不久後收到聖誕卡,點擊圖片會彈出瀏覽器並顯示原大尺寸的版本,用戶可以把它儲存起來。然而,我看到網址是 http://xxxx.hk/c/xxxx2015_xmas/_bin/20151225/20151225151347_xxxxxxgmailcom.jpg 的格式。要是把檔名「20151225151347_xxxxxxgmailcom.jpg」拿走的話,頁面會變成如上圖般的清單。點擊清單內的檔名,能完整地顯示他人的聖誕卡。甚至把目錄「20151225」拿走,更可以看到由活動開始至今的所有聖誕卡。如果只是洩漏了相片的話,問題還算接受得到,畢竟當中的相片會不停在 Kiosk 播放,總算是一早公開了。不過聖誕卡檔名尾部是除去符號的電郵地址,加埋相片樣貌,可以引伸出嚴重的問題。我立即通知商場,好讓他們能盡快處理。幸然他們的反應算是合格,在下一個工作天已把問題修正。現時如果瀏覽目錄的話,會轉跳到商場的官方網頁。其實今次的個資漏洞很容易防止,只是開發人員經驗不足,或者是不小心而導致。還好,沒有因為這個漏洞給媒體有炒作一翻的機會。不過,日後玩商場活動,特別是需要輸入個人資料的,真是要格外小心。

2015年12月21日 星期一

「執咗佢」

阿葛對 Not-Bag 的評語:「執咗佢」,是不無道理。他拿著質料豐厚的 Not-Bag 仔細地看,單憑產品的外觀,說得出生產上的細節,證明阿葛很有經驗,亦都知道生產流程的難處與成本的關係。他心知成本無法減低,而售價也不會太少,市場會走向高端,而帆布袋並不是這方面的產物。Not-Bag 是一個刻苦經營的事業。辛苦過後也只能糊口,還有幾個創辦人瓜分的話,「執咗佢」顯然是明智。

究竟把看不到出路的生意結束;是放棄,還是明智?苦撐下去是遠見,還是愚蠢?我想只有前輩或時間可以解答。

我相信奇跡、相信循環、相信否極後會泰來;但等運到不是我的風格,得做點不同,才有不同的結果。看過很多人的經歷,都是撐過谷底而能翻身。Cherrypick 如是、GreenTomato 如是。有時在想,是看不到出路,還是未看到出路?我不知如何分辨。有時又想,創業就像賣水的生意;在公園的免費水機旁,生意一定少;在大街小巷上賣得會更多;若在主題公園內則能賣得更貴。產品一樣,需求決定了銷量。那麼,Not-Bag 的需求在哪裡?應該放在甚麼地方?是不是所有產品都有需求,問題在於地點?

近兩個月,我們的宣傳與精力都集中在本地市場。香港的而且確是市場很細少,主打本土似乎是行了錯路。主打本土以外,應該還要兼顧海外市場。問題是我們零經驗。技術含量低又是另一個問題。對手很容易造出相同的產品。沒甚麼附加價值。問題很多很多,沒有解決方法。

「就算你今天多障礙,明日有天空塌下來;從頭做起,仍懷念你,你最笑得可愛」

2015年12月19日 星期六

HKDA x Oi! x Not-Bag


籌備了一個月,由 HKDA 舉辦的「Ignite! 火上・加油」終於在昨天舉行。我們贊助今次的活動。所有設計師在活動前發給我們圖案,便可以即場免費取得印上自己圖案的 Not-Bag 一個。活動很成功,索取 Not-Bag 的人十分湧躍。在場更得到香港 Designer Icon 葛民輝對 Not-Bag 提供寶貴的意見:「執左佢!」。意思是「執左啲有待改善的地方佢!」。阿葛盡顯風趣幽默而有深度的說話,我們非常受樂,更受益不淺。


為了今次的活動,我們打印了很多 Not-Bag,更移師鎮店之寶到會場,即席示範打印過程,部份 VIP 嘉賓更能立即取得 Not-Bag。不過,在出發到會場前卻發生了小插曲。打印機運作六秒段自動停止,令我們大為緊張。要是機器發生問題,便不能搬到會場展出,更會影響之後幾天的出貨問題。幸好我有點機械知識,細心觀察打印機動作後,找出了應該是污積令檢測器出了狀況。仔細清潔後,問題得到解決。我們也立即趕往現場。安頓好機器後嘗試列印,再次出現問題。幸好,同樣清潔好檢測器後,打印機再次正常運作。先前因模擬一次運作,令我能充足準備,整晚來說非常順利。

同場還有 RTHK 31 台團隊繼續為 Not-Bag 進行追訪記錄,今次是最後一次戶外拍攝。明年一月會再進行一次結尾訪問,整個拍攝過程便告完成。期待二月份的播出!

2015年12月18日 星期五

命運共同體

有些事情很神奇,兩個獨立的個體,不同時間出生,有著相同的名字,連遭遇也很相似。講的是我跟襟兄弟的命運。

襟兄弟跟我的名字都是「兆基」,姓氏不同,生日也不同。原本以為共通點只在名字,但隨著時間的發展,我找到越來越多的共通點。當我跟拍檔成立公司時,拍檔出錢我出力,總算是榮升老闆之列;同年襟兄弟則在他打工的公司榮升董事,一樣是老闆。公司成立半年之後,內子轉為全職媽媽;三個月之後,姨仔也成為全職媽媽。兩邊的經濟都落在男人身上。一次,襟兄弟獲得報章訪問;同期我也得到不同媒禮的採訪。後來襟兄弟得到一次教書的機會,到工聯會教授一課;我則在半年後到澳門教授中學生編寫流動應用程式,為其九個月。我有兩個孩子;連原本只生一個的姨仔也生了兩個。最近,兩邊都有官司纏身...。

總總的巧合,發生的時間都很接近,實在奇妙。難道世界上真的有命運共同體?或許我們的八字或大運是非常接近。

2015年12月17日 星期四

油街活動準備


這個星期為明天 HKDA 在油街的活動做準備。請來各設計師會員上傳他們的圖片給我們,印製成 Not-Bag,並會在明天親手送到作者手上。活動於明晚六時至十時進行,我們還會把打印機移師到場地,即場打印示範。希望今次活動能吸引設計界的注目,一同創出新的設計空間。

2015年12月13日 星期日

一個棘手問題

經營公司五年以來,遇到一個棘手問題;就是想做某個技術,給了同事時間,總是做不出來。我在技術層面非常好奇八卦,只要給我時間,總能交到功課。滿以為同一招對同事是有效...。如此下去,公司只能做出普通的應用程式,等著被淘汰的命運。

前日出席 Apple 活動時,又碰到了 Sunny,再次了解他的 TalkBox,發現功能多了、用途細緻了、考慮周詳了。我在想:假如要同事照辦煮碗地複製 TalkBox,同事未必能夠勝任。於是好奇地向他請教如何能找到合適的編程人員。他的分享是因循每個人的能力,安排能完成的工作給同事。夾硬來只會做得不好,甚至做不成事;而且他只會開發他自己也會使用的產品或服務,這樣才會不斷改良改進,製作出一流的項目。

正所謂「無咁大個頭,唔好戴咁大頂帽」,雖然逆耳,但不無道理。積極一點看,要是真的想戴大頭帽,那就切法弄大個頭。向外尋找合適的編程人員也是一個出路。

2015年12月10日 星期四

TIPS 特訓

下午三時,大家都來到 Thinkaholic,目的是參加特訓。今日 TIPS 請來重量級嘉賓,GreenTomato 的 Sunny Kok, Jacqueline, Terry 為我們四隊指導一下。從 Sunny 口中聽得最多的說話是「明晒!」。要明白大家的經營模式並不難;難的話應該不能進入 TIPS 四強。但要針對地作出指引,的確要一番功力。從 Sunny 身上感受到生意,是應該在高層次往下看。看通了再找方法達成。這樣的事業便能有所發展。以下是整理了跟 Not-Bag 有關的意見:

  • 公司名稱要表達到是做甚麼生意。表達不到沒問題,但最好不要負負得正的名,像是 Not Bag (Bad)
  • 服務或產品最好能讓人聯想到某些關鍵字,起碼買 Adword 時都清楚怎麼做
  • 要清楚公司的模仿對象行甚麼路線,當中有沒有隱藏問題?如 Hot Toy 沒有了 Marvel 會如何?
  • Snaptee / Casetify 不是想像中大,Not-Bag 應該想得更大
  • 要清楚為何用戶想買 Not-Bag?
  • 要讓用戶在購買活動時想到自己的服務或產品
  • 能增加銷售的地方,就在需要用到服務或產品的場合。如最需要購物袋的地方,就是在超級市場的收款處
  • 一間公司不能有三個話事人,三個方向只會產生問題。需要有一個話事人
  • 一間公司可以有不同品牌、不同產品,走不同路線
  • Not-Bag 如果要走型格路線,就要挑戰自己,把價錢定在 HK$800 或以上。走型格就是賣設計,不能賣個性化
  • 型格路線在香港的代表是誰?它的生意可以做得多大?
  • 有沒有看過很型的明星拿著帆布袋?
  • 處理好公司結構,才想產品
  • 2015年12月9日 星期三

    RTHK 31 台第三次採訪


    RTHK 31 台正在追蹤著 Not-Bag 的發展,已經來到第三次採訪。目的是拍攝我們為 12 月 8 日油街活動的準備情況。

    我們已經收到 HKDA 方面傳過來的圖案,可是欠缺袋款資料,一直在等著 HKDA 方面的跟進。沒有資料,我們無法進行打印。然而,上個周末的「寵寵郵輪碼頭華麗嘉年華」有一點生意,圖案剛剛準備好,可以讓攝影師拍攝。除了打印布袋的過程外,記者 Mary 也跟我們進行了簡單的訪問。拍攝團隊很機靈,感覺到有異樣,指出跟上一次拍攝時的感覺不同。我們當中的確出現了溝通、方向、信任的問題。大家暫時還是按耐著,沒有更好的選擇,希進能盡快找到解決的方法。

    2015年12月6日 星期日

    談談創業經


    得到 Raymond Chan 的邀請,昨天到了 Thinkaholic 談談創業經。我創業接近六年,經驗其實不多,幸好還有點事情可以分享,不至於變成一個悶局。

    第一次創業是一間 One-man-band 一人公司,在業餘時間營運,主要是替客人開發針對在 iPhone 上執行的流動應用程式。成立公司是因為有點生意,需要一張商業登記去記錄收入與開支,不然要交的稅可會很多。那時流動應用程式開始冒起,我自從接觸到第一代 iPhone 後便期待著可自行編程日子的來臨,連 Objective-C 都是出現 AppStore 那一刻才學。由於機乎沒有開支,收入都變成盈利。曾有一個大型商場跟我說:「外面寫 App 公司收的價錢是六位數字起跳,我們沒有這麼多預算,所以只好嘗試找 Freelancer 幫忙。」。我看她們要求的功能很簡單,於是答應對方以 $10,000 來承辦。對方也一口答應。於我來說是一宗很好的生意,花的時間不多,利潤卻豐厚。後來跟其他人說起這個經歷,大家都說:「如果我早點認識你就好了,我替你接這個項目,大家都能賺更多!」。原來,我除了計算時間成本外,需要計算價值成本。當時懂 Objective-C 的人不多,App 的數量也很少,價錢可以談得更高。雖然自己不懂定價,但還是賺到人生第一個十萬。對我來說已經很滿足。這間叫「Hotaru Production 螢火蟲製作公司」的公司,真的像螢火蟲般短命,開業一年便結束了。因為「螢火蟲」要變成一塊石頭。

    今次不再是一人公司,有另外四位董事,有資本,有辦公室,有員工。以前合作過幾次的客戶看好手機業的前景,信得過我的能力、擁有的大品牌客戶(Times Square, YSL, SHK, Wethy)及為人,找我一起創立公司。為了節省金錢,我們沿用已存在的商業登記。對我來說,這是正式的創業,50% 吧。畢竟我只出力,沒有出錢。會把自己的意見放到最後。出錢的說「好」,難道不出錢的說「不好」?有很多方向及決定,都不是我的意思。不過,不緊要。我可以專心研究技術,是非常好的事情。公司由小變大,再由大變小。開發過不同的項目,遇到過友善的客人、猶豫不決的客人、氣燄迫人的客人。最終發現接案的做法只能糊口,不能發達。為了找尋出路,公司嘗試以投資項目方式進行,希望項目能被投資者相中,升價百倍。因此衍生出一個在手機上學習品味的影片應用,及自定圖案的布袋項目。另一邊廂,開發自家製 B2B 應用,並以月費來營運,務求建立每月有穩定收入的系統,支撐著其他項目的進行。雖然影片應用看起來是第三次創業,而布袋項目是第四次創業。但這兩個都是公司投資,我去執行的事業,嚴格來說不是創業吧。話雖如此,但我從這兩個項目中學習到的東西是最多!

    影片應用伙拍的是其中一位董事知而不相識的人,開過幾次會後,覺得對方很有魄力,人脈也很價值,大家的角色互補又不重疊,於是一起合作。我對於這個項目的發展是 50/50。至少我不相信有人會花錢購買影片,學習一些中產生活的知識。不過,拍檔想做,我又沒有其他更好的方案,於是就上馬了。我們的算盤是投入公司的人力及技術,協助開發,他日有投資者注資時,可以為公司增加收入。那邊的拍檔非常專注項目,24/7 都想著發展;我們的策略顯得像個 Vendor 般的角色。而在第二次注資時卻出現了「創辦人是否需要全職投入」的爭議。最後得出「投資者沒想過創辦人不是全職投入」的結論。我們的想法跟實際有落差。於是拍檔便全職投入這個項目,而我則負責布袋事業。

    由於得到三輪的融資,也學習到一點知識。找投資者不要只看錢,更應該看投資者的人脈及能力,會否為公司帶來更大的效益?錢,總有解決的方法。有時一個人脈帶來的好處,會比錢來得更加有用。找一個相信創辦人的投資者,如果只為利益而投資的人,他會極力爭取最大的持份與回報,導致經營團隊被綁手綁腳,創意得不到發揮的機會。創辦人需要對首輪、次輪及三輪融資有初步的規劃,預計三輪後的持份比例。最理想是永遠保持最大持份。在這個項目也學會了「跟頭」述語。原來有些投資者喜歡跟著別人一起投資。當然跟的是有規模的投資者。因為有規模的投資者會在投資一家公司前做了充足的功課,增加成功的機會。這些功課需要時間及金錢處理,「跟頭」能省卻這些開支。又有一些投資者會把資金分期按成績來投入,不達標,不投入;增加團隊的著緊性。除此之外,日子久了,發現那邊的拍檔只會為著自身的利益前進,不會考慮拍檔的利害。就像大家坐著同一條入水的船,船在下沉,而對方不停向我潑水,以為這樣就我沉他不沉。這件事我學到了,要找人一起創業,應該找一位認識的人、了解的人;最好還可以同甘共苦的人。應用程式推出了一個月,真實用戶很少,要能突破,似乎只有一個辦法,否則成功機會都很微。

    布袋事業沒有投資者,由三個單位合作,伙拍的是拍檔認識的人,事情來得較為簡單。一個負責產品、一個負責技術支援、一個負責營銷。角色同樣是互補又不重疊。我對於這個項目的發展同樣是 50/50。與影片應用的策略同樣是得到投資者的投資,把事業做大,成為布袋界的「Casetify」。為了增加成功率,我們參加了 TIPS 比賽,並且勝出。得到師傅們的指導及一連串技巧課程,擴大了我們的人脈。同時也得到媒體的報導及香港電台 31 台的追蹤採訪,增加不少曝光機會。今次少了拍檔在旁,我可以更踏實、更自主地做事。我相信投資者會注資是看好事業的前景;而看好事業的前景不外乎是有大的客戶群,或是原本生意已有盈利。所以我把目標設定為每月賣出 2000 個袋。這個數量帶來的收入可以自負盈虧;有融資便能做大,沒有也能慢慢做大。問題是如何賣得出 2000 個袋?首先要讓客戶知道及用過我們的產品。於是跟不同單位合作,送出布袋、賣 Facebook 廣告、擺展覽、在時裝店銷售、甚至是品牌 Crossover。但成績都不好。就在此時遇到創辦人間的「方向」問題及缺貨問題,事業的發展矇上了陰影。

    事業跌到谷底,我不知道往後的發展如何,唯有努力地默默耕耘,希望谷底著地,能彈到更高的層次。

    2015年12月5日 星期六

    寵寵郵輪碼頭華麗嘉年華


    得到 LoveUBB.com 的 Stanley 幫助,Not-Bag 有機會參與一連三天在啟德郵輪碼頭舉辦的「寵寵郵輪碼頭華麗嘉年華」。

    第一天的展出,出奇地多人。雖不至於人山人海,但在星期五能有這麼多人逛展覽,同時帶著大狗細狗的,實在是意料之外。想像不到星期六及日的參觀人數會如何地多。我們努力介紹 Not-Bag 布袋的特點及服務,大家都有點興趣。有的人甚至已經帶著一個自訂狗仔圖案的布袋。雖然價錢比我們平,但還好,我們的布袋優質很多。為了吸引更多的人下單,我們即場想到在展出期間提供八折優惠。想得出就要做得到。最新版 Not-Bag App 支援優惠碼,於是立刻加入,迅速上架。只要透過 Not-Bag App 下單,在付款前輸入優惠碼「20%OFF」便得到全單八折優惠。在沒有計劃的情況下,看看結果會是如何...。

    2015年12月4日 星期五

    TIPS 實戰編 #5 資料庫在工作流程、客戶關係管理中的應用

    不經不覺來到第五堂 TIPS 實戰課。講者是 Alfred Yuen。主要講解如何以資料庫配合公司的日常運作,從而能輸出會計相關的報告,方面年結時的審計。學習到買賣雙方各自的出單流程。課堂帶出了最重要的一點:成本結構。究竟每做一單生意係蝕定賺?如何計算?每宗交易賺多少?有沒有計算匯率變化在內?貨品是 FIFO 還是 FILO?節日性的包裝產品該如何處理?選擇坊間的會計系統時要留意的地方?今次的內容較為技術性,說到了一點點資料庫結構的設計,也交流了遇到的問題及解決方法。還有 Alfred 之前接手過的項目;原來在新巴上有一個裝置,記錄著巴士每一個動作數據。如:開閼門、踩油、停車時間...等;用來改善整體服務。非常有趣。

    2015年12月3日 星期四

    壓縮 PNG 利器 pngquant

    替客人開發的一個簡單 Android 應用程式約 32MB。客人要求把體積減半。有這個大小,是因為當中包含 drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi 四組尺寸的圖案。減磅的方法不外乎刪除部份尺寸,或把圖檔縮小。雙管齊下當然最有效。因此把 drawable-xxhdpi 砍掉,再把所有圖檔縮小。

    往常用開的 PNGshrink 能把 PNG 內多餘的內容除去,如:印表機資料、參考線資料、軟件資料...等。效果不差,但今次的幫助有限。其實 PNG 格式除了用上述的方法外,還能用 Indexed Color 來處理。一個正常的 32-bits PNG 包含了 RGBA 層,亦即是紅、綠、藍及遮罩層。每層色深為 8-bits。而 Indexed Color 則只有一層,同樣是 8-bits,意味著體積能省下 75% 空間。是非常有效率的做法。在現實世界裡,可沒有這麼便宜的東西,需要等價交換。一般 Indexed Color 是指最多可以有 256 色,如果有透明的話則 255 色,因為有一格顏色資料拿來當成透明色。問題是 Indexed Color 下的透明處理,不是全實色,就是全透明,沒有半透明之類的做法。對於 32-bits RGBA 圖來說,轉換出來的圖將會變醜。但 PNG 的 Indexed Color 格式解放了這個限制,可以有半透明色的存在。是一個空間與美觀性價比最高的做法。要生成這樣的 PNG,可以用 pngquant 來達成。它是以指令形式執行,而且支援 Wildcard,用起上來十分方便。

    經過 pngquant 處理後,應用程式的體積縮減至 19MB。客人也很滿意。

    2015年12月2日 星期三

    清潔 Apple Watch 錶帶


    白色的 Apple Watch 錶帶雖然不易污糟,但帶久了點都會沾上污積。我清潔錶帶的方法是用「黑色橡皮擦」。只要在錶帶上擦擦,大部份的污積都會被清除。不妨試試。

    2015年11月29日 星期日

    Hong Kong Maker Faire


    一連兩天在香港舉辦的是第四屆 Maker Faire。前三年由於是民間發起,加上不足 100 隊參加,因此在名稱上使用了 Hong Kong Mini Maker Faire。今年由香港理工大學接辦,正式成為 Maker Faire。其實之前三屆也是在理工大學進行,但今年升格為主辦單位,能使用的空間大了很多,買賣限制也得到放寬。可惜展區散落各處,聚集不到氣氛。展品跟往年差不多,還有大量的 3D 打印機,就像行深水埗般,沒甚麼吸引力。我逗留了一小時便離開了。希望明年能辦得更好。

    更多相片:https://www.facebook.com/pacess/media_set?set=a.10153837317242022.1073741855.590742021&type=3&pnref=story

    2015年11月26日 星期四

    TIPS 實戰編 #4 公關的工作範圍及基本認知

    今晚的課堂由 Felix Poon 主講。Felix 以四個字總括公關工作的最終目標「感覺良好」。只要給客人、給用戶、給觀眾「感覺良好」就能對公司、對品牌、對產品有正面的效果;之後要做成生意,只是時間問題。然而,找公關公司幫手之前,需要了解自己的限制、底線、目的、期望。就像 ShowMuse 原本也想辦一個記者招待會,邀請當中的名人導師出席;不過,預計報導會變成訪問導師自己的事,而不是我們希望的 ShowMuse 報導。記者招待會需花上六位數字的金額,換不來 ShowMuse 報導,甚致是提升不了應用程式的下載量,我們決定取消記者招待會這個念頭。因此清楚以上事情是重要的。

    2015年11月25日 星期三

    Twitchy Finger x Not-Bag


    參加了「TIPS」及「香港人撐香港品牌」後,Facebook 上的朋友都留意到 Not-Bag 的存在;甚至有老闆朋友不約而同地有著「香港人撐香港品牌」同一個信念,因此出現了「Twitchy Finger x Not-Bag」的出現。

    認識了差不多一年的 80 後手機遊戲公司《Twitchy Finger》。他們的作品《四驅傳說》進入了封測階段,正在物色送給玩家的禮物,想到了布袋,想起了 Not-Bag。有著同一個信念,加上是遊戲界的一份子,而且是三贏的機會,我當然落力支持!除此之外,我們更互相在 Facebook 專頁 Crossover 報導,期望能做出「1 + 1 > 2」的成績。無論結果如果,今次的嘗試很新鮮有趣,希望「香港人撐香港品牌」的合作繼續擴展開去。

    2015年11月24日 星期二

    手動清除 Dropzone 內的預覽圖

    想在點擊指定按鈕時清除 Dropzone 的預覽圖,Google 了很久,找到的代碼都是上傳成功後做消除動作;不是我想要的東西。試了試了,終於找到合適的代碼,組合成我要的東西:
    var dropzone = Dropzone.forElement("#imageUploadZone");
    dropzone.removeAllFiles();

    2015年11月23日 星期一

    SCF:九龍城長者團年飯活動


    《陳僖儀慈善基金會》有一段時間沒有活動,但將於 2016 年 1 月 23 日與九龍城綜合家居照顧服務隊舉行團年飯活動。『團年』是中國傳統的習俗,亦是長者最重視之節日,而本服務隊服務之長者大部份均為獨居、自我照顧能力衰退及支援網絡薄弱。故冀能藉著團年飯活動,讓長者感受節日的氣氛及社區人士之關懷,更希望長者可以與社區保持聯繫,加強個人網絡,減低疏離感。

    我們希望你也可一同參與是次義工服務,為長者送上祝福和溫暖!

    2015年11月22日 星期日

    圖案消失之謎

    昨天遇到一個奇怪的 iOS 錯誤。在應用程式內顯示一張小圖片,不論是模疑器還是真機都能正確顯示;可是把它生成 Adhoc 版並放到 hockeyapp.net 後,小圖竟然消失了。原以為沒有圖片資源,但明明直接生成到真機上又沒問題。有人指出是不是檔名大小寫的問題?我以往有這個經驗,所以這些年來用的檔名全是小寫,所以又不是這個原因。找了很久都沒有頭緒,只好借助 NSLog 輸出的數據來判斷。最終找到原來貼圖出畫面時的 Y 座標起了變化。在 hockeyapp 版會被計算成負值。原本那段代碼是利用當前的座標來進行運算,只好改為固定的值。還好不影響設計,可以順利修改;問題也得到解決。可是這個情況真的古怪,也很難發現;甚至要到上架後方能碰到...。

    2015年11月20日 星期五

    Montier x Not-Bag


    ‪香港人撐香港品牌‬!繼「‪四驅傳說‬」後,Not-Bag 連同本地時裝店 Montier 合作,把 Not-Bag 放到實體商店售賣。從 Online 到 Offline,再由 Offline 回到 Online。更特別設計了五款道地香港特色的圖案,大家不妨實地體驗一下到 Montier 時裝店 Not-Bag 的優質。


    Montier 地址:中環士丹頓街 34 號地下 B 舖

    2015年11月19日 星期四

    又一個商機

    正所謂「不知命,無以為君子也」;要在退運時能沉住氣;在好運時全力進攻。乙未年的晦氣似乎漸漸驅散,事情開始變得明朗。我要追回失落了一年的進度。

    我們決定送出 Not-Bag 給「香港人撐香港品牌」的七位老闆,在一個星期前已發出電郵邀請他們上傳圖案,我們收到圖案後便立即印製帆布袋。不過,等了一個星期也沒有回應,想必老闆們每天收到很多電郵,而且都很忙碌,無暇處理這些小事。可是我又不想在這裡終止,於是直接在 Facebook 上留言給各位老闆。希進能吸引到老闆們一看。結果得到其中一位老闆的回覆。我們甚至交換了電話號碼,直接在電話上溝通。他非常友善,而且對 Not-Bag 感到興趣,甚至想出了一個三贏的概念。概念需要一點時間討論並轉化變成方案,我很期待這一刻的來臨,對 Not-Bag 來說會是很有幫助。真的很感謝他寶貴的時間及意見。

    2015年11月18日 星期三

    $15 的商機

    今日是乙未年過得最順暢的一天。下午要到合作伙伴的辦公室開會,我跟 Not-Bag 的拍檔提早三小時在荃灣廣場見面,檢討過去一週進度及下午會議的準備工作。

    我有早到的習慣,這次沒有例外,於是在附近找早餐吃。由於價錢太貴,最後還是選了荃灣廣場的麥當勞,點了一份 HK$15 早餐。就在進餐後不久,發現 10 點鐘方向坐了一位在矽谷回流的 Startup 老闆,他正埋頭苦幹地在 MacBook 前工作。這時我在想有哪些地方可以跟他在 Not-Bag 上合作。吃畢早餐後,我決定冒昧地走過去介紹自己。參考了石先生集郵的做法,本想跟他合照,可是被拒絕了。我也不好意思繼續打擾,遞出了名片,簡單介紹 Not-Bag 後便離開。被拒絕的感覺不好。不過,男人老狗無端合照又真奇怪,況且對方也可能擔心不知相片會如何地被利用,拒絕是明智的。連討論合作的機會也爭取不到,原本以為行動失敗,誰知...。

    當我走到商場下一層時,Facebook 傳來了他的交友邀請。答應過後,在 Facebook Messenger 開始討論起 Not-Bag 的成立及產品。對方友善之餘,更想到購買 Not-Bag 給員工使用。我非常雀躍。合作的想法成真了。我決定先贈送一個 Not-Bag 給對方,讓他能親身接觸 Not-Bag,看看能否滿足他的需要。滿意的話,他才向我購買。我很有信心。要是他能幫忙介紹一下,必定能為我們打下強心針。

    到了下午合作伙伴的會議,他們喜歡 Not-Bag 的設計及品質,並詳細講介今次合作的方案。我們非常滿意。相信方案能為 Not-Bag 帶來大量的粉絲及訂單。真的很多謝他們這樣有實力的公司能提攜我們這個初創事業。十分期待聖誕前的活動計劃!

    2015年11月17日 星期二

    TIPS 實戰編 #3 怎樣用 Facebook 來宣傳你的生意?


    今晚是「TIPS 實戰編 #3 怎樣用 Facebook 來宣傳你的生意?」。講者是石先生。有點特別的是,ShowMuse 也在場進行拍攝,稍後會將石先生是晚的課堂放到 ShowMuse 平台。說回正題,越接觸得多,越來越覺得 Google 及 Facebook 影響了自己的生活、影響接觸到的內容、影響到自己的判斷;而且在 Facebook 上的花費及心血很容易毀於一旦,主導權不在自己手上。在建立品牌的同時,應該將人流從 Facebook 帶回自己的網站,而不是黏在 Facebook 內。是時候要跟它們保持距離。以下是今日要點:

  • 每人每日看到 300 個貼文
  • 用戶平均看 6 頁的內容
  • 貼文成功在人前出現的機率為 2-9%
  • 要增加曝光率,意味著要擴大用戶人數
  • 最實際是提升貼文的水平
  • 影片的曝光率高
  • 連結的曝光率也很好
  • 圖片及文字的曝光率不太好
  • 「抽水」類貼文可間中使用,太密沒意思
  • 帶資訊性的內容較受歡迎
  • 貼文的時間重要,但要視乎自己 Fan Page 的用戶習慣
  • 質素重於數量
  • 公私內容要分開處理
  • 不要盲目追求 Fans 數目
  • 2015年11月11日 星期三

    TIPS 實戰編 #2 數據分析不是天荒夜談,數據分析可以好簡單!

    昨晚出席了在「Thinkaholic」舉行的「TIPS 實戰編 #2 數據分析不是天荒夜談,數據分析可以好簡單!」。講者是 Kenneth Kwok。我對數據分析有點興趣,認為能在沉悶的數據中能發掘到有用的東西是一種樂趣,也很有成功感。之前為了 ShowMuse 項目,也研習了一點點推薦方面的事情。那是利用數據把用戶分成不同的群體,從而推薦群體喜歡的內容,甚至朋友。以下是課後的心得整理:

  • 數據本身不值錢
  • 數據經過處理及切割後才變得有用
  • 收集數據要有清楚的目標
  • 數據要流動,才有被分析的價值
  • 就算是初創公司,都要有 Data Strategy
  • 在需要資金時,往往是數據令人產生投資興趣
  • 做一個簡單的分析約四小時
  • 分析要找出變化的前因後果
  • 要避開最壞及最好的 15% 資料,過濾掉兩個極端的時刻,分析才能更加準確
  • 小心網頁內的彈出式視窗,或 AJAX 類更新會沒有記錄
  • 2015年11月6日 星期五

    打開 Less Secure 選項


    一個星期內遇到兩個項目要用 Gmail 發出電郵,各自各遇到發不出的問題,原因卻是同一個。Google 加強了保安程度,所有由程式發出的電郵,預設是禁止的。不過,我們可以更改設定,讓程式能繼續發出電郵。只要到 https://www.google.com/settings/u/1/security/lesssecureapps,選擇「Turn on」就行了。

    2015年11月5日 星期四

    「香港人撐香港品牌」開幕活動


    昨晚有幸以 Not-Bag 身份參與「香港人撐香港品牌」開幕活動。場內場外人頭湧湧。作為 TIPS 的一份子,我們得到一次向各 CEO 們展示產品的機會。很多人都有正面的回應,尤其是大讚布袋質素好、手工細緻、設計有花心思。我們當然十分開心。然而除了正面的鼓勵外,也有善意的批評。我們認真思考過後,認為需要在不久的將來加入第六款布袋設計。同時也多謝 RTHK 31 台的 Mary 及她的團隊向 Not-Bag 進行採訪。

    今次的啟動禮正式向大家介紹「香港人撐香港品牌」成立的目的以及往後的發展。是一個讓香港品牌互相支持、互相合作、互相交流的平台。當晚最令我印象深刻的,就是七位創辦人中有很多都曾跌過落人生的低谷,並從谷底反彈,重新建立自己的事業。我看過不少名人的傳記都有相同的情況。只有捱得過磨煉的人才有機會登上高峰。正如我描述給朋友聽的情境一樣:「人要彈得更高,必須要先著地,使盡全力一跳」。我想現在是掉進谷底的時候:錢剩下不多、團隊快要崩解、生活拮據、家庭問題、懷疑自己的能力...等,希望有足夠的氣力在著地的一刻彈得更高!還好,現在有「香港人撐香港品牌」,相信有前輩的幫助,成功的機率更高。由 18% 升至 19% 吧,哈哈~

    2015年11月4日 星期三

    TIPS 實戰編 #1 政府支助申請方法及如何撰寫計劃書

    昨晚是 TIPS 實戰編的第一章。打頭陣是師傅 Keith Li,地點是 Thinkaholic。Keith 詳盡地說明香港有哪些值得申請的資助。不幸的是,我這個中五文科生沒有資格申請科學園的資助計劃。事關申請者必須有一位是 IT 相關的大學學位人士。我們 Not-Bag 沒有這方面的人。只好考慮數碼港的資助計劃。Keith Li 引述了接受種子基金時要注意的部份,碰巧 ShowMuse 項目也經歷過類似的事情,因此我特別能領會箇中的心情。像是第一輪投資時的比例分佈、拿多少百份比出來、第二輪投資時股權比例的變化、怎樣才能避免股份被大幅溝淡、甚至乎 deal diligence 時要注意的地方、送股時的權力考慮...等等。希望 Not-Bag 面對這些經歷時會做得更加好。

    2015年11月2日 星期一

    關閉 El Capitan 的 Bash Sessions 功能


    自從升級到《El Capitan》後,發現《Terminal》的歷史功能只保留某一個時點的內容,升級後的歷史內容都不見了。原來是因為 Bash Sessions 在搞鬼。每次打開《Terminal》後都會建立新的 Session,舊 Session 內的歷史記錄不會帶到新的 Session。我不知如何能取回舊 Session 的記錄,所以索性把它關閉。只要用「echo > .bash_sessions_disable」指令在 ~/ 建立 .bash_sessions_disable 就可以。

    2015年10月17日 星期六

    雙線發展的阻力

    「雙線發展」這個概念在公司成立了一周年時,我已經認為不妥。之後「雙線發展的問題」也陸續浮現。到了今年八月,四年多後的今天,拍檔終於認同我的想法,決定往「自家應用」的道路邁進...。

    他的做法是,若然有客人找上門報價,會把價錢提高某個百份比;要是客人同意,我們盈利可觀,到時再想辦法解決。相信「錢能解決所有問題」。我不認同。對我來說,既然選定了方向,就應該不被條件所動搖;不應因為利潤好則分心處理。因為放得下一次,自然放得下第二次。我沒有只放一不放二三的定力。而且,報價階段也有很多會議及電話溝通,這些都有成本。價錢高了,接到訂單的機率低了,付出去的成本很難收得回。大部份時間都是白忙。幫不到自家應用,爭不到雙線發展的生意。根本是個雙輸的局面。不過,對於我這個沒有資金投入的人來說,話當然講得利落。就算只造「自家應用」也不保證他日能飛黃騰達。況且我沒有其他更好的提議,唯有按拍檔的想法處理。我最擔心的是不正確面對,「雙輸」情況必定會出現...。

    2015年10月13日 星期二

    相約 Dr.Wong

    昨天相約好跟 TIPS 師傅 Erwin 黃岳永見面。我們期待了足足一個月。地點最終在土瓜灣近謝端麟的「京都宴會廳」見面。其他成員在 TIPS 比賽中已跟 Erwin 交流過,而我則是第一次。

    我們由「以色列」的所見所聞開始,慢慢討論到 Not-Bag 情況,甚至未來發展。最令我印象深刻的是,原來自己或團隊的價值觀會影響業務發展在各方面的取向,這對我來說是很新奇的事。就例如我們對待「Made in Hong Kong」的態度,在成立之初,拍檔希望不主動標韱產品是「香港製造」,也不隱藏;甚至是假扮成外國風格;目的是想給人高檔的感覺。但自從勝出 TIPS 比賽後,受到 TIPS 的本地化概念的薰陶,再次使我們回顧「Made in Hong Kong」對我們的意義。於我們來說「Made in Hong Kong」並不失禮,還有效率的追求、質素的保證,甚至獅子山的堅毅不屈精神。有了這樣的認知,我們能清楚看到有哪些公司值得合作、有哪些明星名人風格一致、有哪些地方要重點優化。會面雖然短短的兩個半小時,但獲益良多,已經有點吃力跟不上的情況。代表還有很大的進步空間。

    按照 TIPS 的計劃,之後會有機會近距離目睹師傅的工作空間及行為。這是我一直夢魅以求的事情。大約在六、七年前,我已經有這樣的想法,找一名出色的 CEO,貼身追蹤一天的活動情況,留意成功人事的處事技巧、管理方法、應變處理、決策心態。那時我的目標是「黃毅力」,但當然空想沒有行出第一步。今次有機會夢想成真,實在非常期待。

    2015年10月5日 星期一

    關閉 Bitcode


    今日嘗試在一個項目內加入 Google Analytics,很簡單地便能完成。可是在生成 .ipa 時發現錯誤,指要一個支援 Bitcode 的 Google Analytics 的程序庫才能繼續。我的 Google Analytics 已經是最新版,但都不支援 Bitcode 功能;那麼,即便一是放棄 Google Analytics;一是放棄 BitCode。後者當然來得簡單。


    要取消 BitCode,只要到 Project Settings,點選要生成的 Target,在 Build Options 中把 Enable Bitcode 設定為 NO 即可。

    2015年10月1日 星期四

    修改 phpMyAdmin 1440 秒逾時設定


    經常在使用 phpMyAdmin 時都會出現 1440 秒逾時,需要重新登入。為了更好的保安程度,這是有需要的。但不多不少都帶點影響。最近在 MacBook 內的 VM 進行服務器端的編程工作,畢竟是自己使用而矣,所以決定把逾時設定為 30 小時。方法是在 phpMyAdmin 的首頁中選「Settings」,然後點「Features」。在畫面下方的「Login cookie validity」就是逾時設定。修改後儲存即可。

    2015年9月30日 星期三

    斷網連線虛擬機

    早幾天的 Host-Only Adapter 連接方法雖然可行,但有時需要在 VM 中安裝新程式時就變得無能為力。我希望無論 MacBook 有沒有連線,都能直接使用 IP 地址在瀏覽器執行 CentOS 內的 PHP 程式,包括 phpMyAdmin。要是 MacBook 連線時,VM 同樣也能連線。就這個目標,我嘗試改善一下。成功找到設定的方法:

    首先,在 VirtualBox 的 Preference 內的 Network 頁,點選「Host-only Networks」。按右面的「+」圖示生成「vboxnet0」。然後點選螺絲批圖示。


    在「Adapter」頁輸入一個新網域地址。可以是「192.168.2.1」,又或像我隨意「192.168.98.10」。


    下一步是確認「DHCP Server」頁沒有打勾。


    然後打開 VM 的設定,跳到「Network」內的「Adapter 1」。把這個設定成「NAT」,作為上網及更新之用。


    跟住是把「Adapter 2」設定為「Host-only Adapter」,選取剛剛設定好的「vboxnet0」。儲存設定並開啟 VM。

    成功開機後登入,確認一下 http:///etc/udev/rules.d/70-persistent-net.rules 內有沒有重複的 ATTR 出現。有的話把重複 ethX 哪個刪掉就可以。相同 ethX 會導致設定無效。


    回到終端機,跳轉到 /etc/sysconfig/network-scripts/。把 ifcfg-eth0 複製成 ifcfg-eth1。指令是「cp ifcfg-eth0 ifcfg-eth1」。然後以「vi ifcfg-eth1」修改設定內容。把 DEVICE 改為「eth1」;把 HWADDR 地址設定為圖四般你自己的「Adapter 2」的「MAC Address」。記得把 UUID 刪去。輸入「:wq」儲存後離開,重啟後完成。

    2015年9月28日 星期一

    用 UIButton 製作開關掣


    今日嘗試利用 UIButton 製作成只有「開」及「關」兩個狀態的按鈕。原來不容易,花的時間比預計的多。

    不解釋,直接來代碼:
    button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setTag:i];
    [button setFrame:rect];
    [button setBackgroundColor:[UIColor redColor]];
    [button setTitle:string forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [button.titleLabel setFont:fontTag];
    [button.layer setCornerRadius:(rect.size.height*0.5f)];
    [button addTarget:self action:@selector(changeSubCategory:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:button];
    - (void)changeSubCategory:(UIButton *)button  {
        button.selected = !button.selected;
        if (button.selected == NO)  {
            [button setBackgroundColor:[UIColor darkGrayColor]];
        }  else  {
            [button setBackgroundColor:[UIColor redColor]];
        }
    
        //  Do some more things...
    }

    2015年9月26日 星期六

    解決 Nginx 下 phpMyAdmin 登入沒反應的問題


    為了更有效地開發服務器端的程式,特別是經常在外沒有連線能力的地方也能繼續,於是在 MacBook Pro 上安裝《VirtualBox》,建立 CentOS 6 + Nginx + MySQL + PHP + phpMyAdmin 的環境。

    安裝方法很簡單,網上也有很多的教學。我選的是「CentOS-6.7-x86_64-minimal.iso」版本來安裝。完成 CentOS 6 安裝後,輸入以下指令:
  • ifup eth0
  • yum update
  • yum upgrade
    yum install nginx
  • yum -y install epel-release
  • vi /etc/sysconfig/iptables
    在 iptables 開通 Port 80 及 22:
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m comment --comment "SFTP port" -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -m comment --comment "Apache WEB server port" -j ACCEPT
  • service iptables restart
  • yum -y install nginx
  • yum -y install mysql mysql-server
  • yum -y install phpmyadmin
  • yum -y install php php-fpm php-mysql php-cli php-gd php-mbstring php-mcrypt php-php-gettext apr-util-ldap mailcap
  • chkconfig --levels 235 mysqld on
  • chkconfig --levels 235 nginx on
  • chkconfig --levels 235 php-fpm on
  • vi /etc/phpMyAdmin/config.inc.php
    把「$cfg['Servers'][$i]['auth_type'] = 'cookie';」中的「cookie」改為「http」
  • service php-fpm start
  • service mysqld start
  • service nginx start

    最後發現登入不了 phpMyAdmin,原來是因為 /var/lib/php/session 的權限還是「apache」:
    [root@centos6 phpMyAdmin]# cd /var/lib/php
    [root@centos6 /]# cd /var/lib/php
    [root@centos6 php]# ls -al
    total 12
    drwxr-xr-x.  3 root root   4096 Sep 26 16:40 .
    drwxr-xr-x. 20 root root   4096 Sep 26 17:06 ..
    drwxrwx---.  2 root apache 4096 Jul 10 01:43 session
    [root@centos6 php]# chown nginx session/
    [root@centos6 php]# ls -al
    total 12
    drwxr-xr-x.  3 root  root   4096 Sep 26 16:40 .
    drwxr-xr-x. 20 root  root   4096 Sep 26 17:06 ..
    drwxrwx---.  2 nginx apache 4096 Sep 26 19:20 session
    [root@centos6 php]# 
    由於建立這個虛擬機的目的是在沒連網的情況下使用,因此網路卡必須設定為「Host-only Adapter」。
  • 2015年9月18日 星期五

    Parallax Previewer


    一直都期待著,終於等到了新 Apple TV 支援 App 功能。可惜錯過了參加開發人員的抽獎機會,唯有等新 Apple TV 上市後又有錢時才能添置一部。

    今日嘗試了《Parallax Previewer》。一個在 Mac OS X 運行的軟體,製作新 Apple TV 上的立體 App 圖示。我簡單地拖拉了三張圖片到《Parallax Previewer》的左方,然後替其中兩層圖案設定好位置,十分簡單地完成了 Parallax 效果。

    2015年9月9日 星期三

    同時拍片及攝影・二


    把昨天畫好都打印出來,並安裝到相機上。手感重了點,但為了同時拍片及攝影,算是可以吧!本周日會用它實戰,再看看有哪些需要修改的地方。

    2015年9月8日 星期二

    同時拍片及攝影


    過去的周六是女兒在《香港迪士尼》演出的日子。那天為她拍片及攝影做一個紀念。一對手處理兩樣事情實在做得不好。回家後決定設計一個能把 iPhone 6 Plus 安裝到相機上的裝置。由於打印凌空部件時會打印支架,而 PLA 的支架又很難處理,我決定把部件分為兩份:手機外殻及連接部件。


    這是連接部件。打印出來後感覺不夠隱陣,於是設計另一個連接部件。


    這個感覺好了。同時發現連接部件後有點空間,於是安排了扇形的部份來加強手機外殻的承托力。效果看來不錯。

    iPhone 6 Plus Camera Case by pacess on Sketchfab

    iPhone 6 Plus Camera Joint by pacess on Sketchfab

    2015年9月4日 星期五

    3D 打印溫室・二


    之前製作的《3D 打印溫室》已經上傳到 Sketchfab,方便有需要的朋友下載及打印。
     

    Greenhouse by pacess on Sketchfab

    2015年9月3日 星期四

    解決 nginx 上的「PHP Fatal error: Call to undefined function mcrypt_get_iv_size()」問題

    在編寫服務器程式時,裡 nginx 發現了「PHP Fatal error: Call to undefined function mcrypt_get_iv_size()」錯誤。解決方法如下:
    [root@guestdev1 ~]# yum install php-mcrypt
    Failed to set locale, defaulting to C
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirror.vastspace.net
     * epel: mirror.smartmedia.net.id
     * extras: mirror.vastspace.net
     * updates: mirror.vastspace.net
    Resolving Dependencies
    --> Running transaction check
    ---> Package php-mcrypt.x86_64 0:5.4.16-3.el7 will be installed
    --> Processing Dependency: libmcrypt.so.4()(64bit) for package: php-mcrypt-5.4.16-3.el7.x86_64
    --> Running transaction check
    ---> Package libmcrypt.x86_64 0:2.5.8-13.el7 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ==========================================================================================
     Package                       Arch              Version               Repository    Size
    ==========================================================================================
    Installing:
     php-mcrypt                    x86_64            5.4.16-3.el7          epel          20 k
    Installing for dependencies:
     libmcrypt                     x86_64            2.5.8-13.el7          epel          99 k
    
    Transaction Summary
    ==========================================================================================
    Install  1 Package (+1 Dependent package)
    
    Total download size: 119 k
    Installed size: 331 k
    Is this ok [y/d/N]: y
    Downloading packages:
    (1/2): php-mcrypt-5.4.16-3.el7.x86_64.rpm                               |  20 kB  00:00:00     
    (2/2): libmcrypt-2.5.8-13.el7.x86_64.rpm                                |  99 kB  00:00:01     
    ------------------------------------------------------------------------------------------
    Total                                                           92 kB/s | 119 kB  00:00:01     
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : libmcrypt-2.5.8-13.el7.x86_64                                           1/2 
      Installing : php-mcrypt-5.4.16-3.el7.x86_64                                          2/2 
      Verifying  : libmcrypt-2.5.8-13.el7.x86_64                                           1/2 
      Verifying  : php-mcrypt-5.4.16-3.el7.x86_64                                          2/2 
    
    Installed:
      php-mcrypt.x86_64 0:5.4.16-3.el7
    
    Dependency Installed:
      libmcrypt.x86_64 0:2.5.8-13.el7
    
    Complete!
    [root@guestdev1 ~]# service php-fpm restart
    Redirecting to /bin/systemctl restart  php-fpm.service
    [root@guestdev1 ~]# service nginx restart
    Redirecting to /bin/systemctl restart  nginx.service
    [root@guestdev1 ~]# 

    2015年9月2日 星期三

    選擇性圓角的 UITextField


    最近想試試如何把 UITableView 的 Grouping 設計應用到連續幾個的 UITextField。研究了一會,編寫了以下程序:
    - (void)roundedCorners:(UIRectCorner)corners radius:(CGFloat)radius view:(UIView *)view  {
        CGRect bounds = view.bounds;
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];
    
        //  Set rounded corner mask
        CAShapeLayer *maskLayer = [CAShapeLayer layer];
        [maskLayer setFrame:bounds];
        [maskLayer setPath:maskPath.CGPath];
        [view.layer setMask:maskLayer];
    }

    如果想有邊框的話,可以這樣:
    - (void)roundedCorners:(UIRectCorner)corners radius:(CGFloat)radius view:(UIView *)view  {
        CGRect bounds = view.bounds;
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];
    
        //  Set rounded corner mask
        CAShapeLayer *maskLayer = [CAShapeLayer layer];
        [maskLayer setFrame:bounds];
        [maskLayer setPath:maskPath.CGPath];
        [view.layer setMask:maskLayer];
    
        //  Set rounded corner border
        CAShapeLayer *borderLayer = [CAShapeLayer layer];
        [borderLayer setFrame:bounds];
        [borderLayer setPath:maskPath.CGPath];
        [borderLayer setStrokeColor:[UIColor grayColor].CGColor];
        [borderLayer setFillColor:nil];
        [borderLayer setLineWidth:3.0f];
        [view.layer addSublayer:borderLayer];
    }

    2015年9月1日 星期二

    TIPS 最終輪選


    昨晚舉行最後一輪的 TIPS 淘汰。從 12 支創業隊伍中選出 3 支進行重點培育。原本每隊有十分鐘展示時間,由於時間緊迫,改為五分鐘。跟之前兩次輪選一樣,當晚即場得知結果。

    在所有隊伍展示完畢後,大會決定由選出 3 支隊伍改為 4 支,使得大家都多了一個機會。大會宣佈結果時已經是晚上十時。《!Bag》最終有機會入選 4 隊中的一隊;而師傅更是多年前在亞視參與電腦節目的 Dr.Wong,黃岳永先生。希望在未來的三個月裡,能在各位師傅身上汲收到寶貴的知識與經驗!

    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 部件帶點虛位,抓不緊馬達,導至輪胎出現「八字腳」的情況,得再處理一下...。