發表文章

目前顯示的是 2013的文章

Node Knockout Taiwan 2013 駭客松活動報名開跑!

Node Knockout Taiwan又要來啦,將於11/9(六) - 11/10(日)舉行!這是一個讓Hacker、程式開發者們熱血沸騰,挑戰48小時不間斷開發的Node.js Hackathon(駭客松)鐵人活動。不用煩腦吃飯、零食、飲料、住宿等生活問題,主辦單位將解決所有的問題,讓你在有限時間內,專心與自己的隊友們從無到有打造自己的作品,並與來自各方的好手們互相交流,贏得比賽。無論你是學生、職業開發者還是從事非程式相關職業的人,都歡迎來共襄盛舉!

立即報名網址:
http://nodeknockout.nodejs.tw/

後記

筆者也將會參加這個活動,但還沒找到隊友,也還沒想好題目,有興趣的人可以來湊團。:-P

對了!別偷跑!逼自己48小時內完成作品,才能挑戰自己的極限!超越自己!

重新開發的DBus Module for Node.js

Stem OS仍持續開發中,最近針對移植到Cubieboard的工作做了很多努力,為了改善穩定性和增加更多功能,我們重新開發了DBus的模組,讓然後直接跳個大版本號到v0.1。但目前仍處於最後測試階段,待穩定後會上傳至NPM,讓任何人都可以使用。有興趣嘗鮮的人,仍可去git repository,從development分支下載回來使用。新的DBus模組為了縮小footprint,更適合嵌入式應用,避免引入GLib,為了提升效能,也不使用GContext來處理event loop ,而是完全採用純C/C++和libuv來實作。此外,舊版的模組一直有個問題,就是大多數功能以同步(Sync)方式在執行,也有與非同步(Asynchronous)設計混搭的情況,導致Node.js程式執行上會不順暢,且有嚴重開發邏輯不一致的問題。有鑑於此,在新的實作中,API被重新設計過,全面採用非同步的設計邏輯。為了讓DBus的操作能更貼近JavaScript 的習慣,也模仿EventEmitter的on()和emit()方法去操作Signal。除了效能和邏輯的改進之外,新的DBus模組支援了同時建立多個connection的能力。這意味著,開發者可以在同一個process上提供多個DBus的服務。利用這個新特色,我們得以減少StemOS系統上常註程式的數量。最後,需要注意的是,大量的重新設計,讓新模組的API與舊版完全不相容,如你不打算改寫你的程式,就不該升級到v0.1版本。後記做了這麼多年OS的東西,各種用途的系統都有不少經驗,但現在仍然覺得到這是個費力又繁複的工作呀。不過,努力累積成果,搭上Node.js的列車。最後能對人大聲說這是我們自己設計的JavaScript OS,其莫大的成就感將無可替代!

Hacker 精神,就是一種認真過活的精神

在這一年平淡的公務員生涯裡,想起了某人的一句話:『一年的經驗,重覆了 N 次。』,這幾年自己做過了一些案子,也與很多人交流,發現,這現象似乎真的在業界是很常發生的。在工作上,一件事或東西只要搞到不要出問題的程度就好,所以永遠也僅此於做完交差,解決完大多能預期的眼前問題,然後交差。所以,在這樣的生態中,無論對任何事,進一步的探討、研究和改進,都是種奢望,更不用想從東西的根本改善。

在這樣的情況下,我們仍然敢說我們有 N 年經驗嗎?

當然,就國內企業的現況和體質來說,想要活的好、拉高員工薪資都還是個問題。我們目前無法期望國內企業們能像 Google 等一些公司那樣,讓每個員工除了完成工作外,也可以有機會挑戰自我和做天馬行空的嘗試、研究,進而改進和發展出許多能開花結果的東西。

但是,撫心自問,就算工作上、公司不給我們這樣的機會,我們又是否願意自己投資去花這些看似沒立即意義的時間呢?

還記得,在某一次的朋友引見中,認識了年輕時曾在 NeXT(就是 Steve Job 創辦的那家電腦公司,其系統就是現代 Mac OS X 的前身)工作過的人,他大方跟我聊起了許多年輕時的故事。其中,最讓我有感覺的一個故事,就是早在 90 年代,Mach kernel 和 OS 就已經被移植到 X86 架構的 PC 上(註:X86 版的 Mac,是 2005 年之後才有的)。而更重要的是,在當時 Steve Job 完全不知道這件事,是 RD 私底下的熱血行徑。雖然不知是真是假,但我仍一直在思考著,這件事有可能在國內的企業中發生嗎?有多少人會在下班後,仍然花時間去投入這樣的工作?這對理解 Hacker 文化和精神的人,應該不會太過驚訝,但這對許多一般人來說可能永遠無法理解。

回頭看看,我比較幸運,還沒畢業就選擇了創業一路,別人沒辦法給我機會,我給了我自己機會。基本上在發展自己產品的過程中,就是在挑戰自我、不斷的創造、改變和嘗試,所以雖然在業界也打滾了幾年,至少還沒有停止過學習和研究的念頭,更不惜一切追求自己的目標,過程中對自己沒有交差了事,只有達到一個個里程碑。

更幸運的是,身為一個愛 Coding 的傢伙,在偶然的機會一腳踏入了 Open Source 的世界,這世界沒有苟且,隨時隨地都有人虎視耽耽把眼前的軟體做改進。你不自覺就感染了這樣的動力,狠狠的盯注各式各樣的軟體,在機會來臨時,就改得…

jsdx-disk 讓你使用 JavaScript 管理儲存裝置

Stem OS』是一個 JavaScript 作業系統,內建 Node.js 和許多 JavaScript 的系統 APIs。如果你有在筆者的開發動態,就會發現 Stem OS 是我們 Mandice 團隊目前的開發重點和產品,我們一直期望能讓懂 JavaScript 的人,都可以來開發系統程式、嵌入式系統,此外,也想運用 JavaScript 語言的流行度,讓嵌入式系統開發門檻降低,使其更為簡單、快速。如果你家中有看似沒用的舊電腦,在安裝 Stem OS 之後,便可以立即用 JavaScript 自行寫一些應用程式,賦予這舊電腦全新的用途。還記得,在今年的 OSDC 活動上,小弟上台給了一場 lightening Talk,即是探討如何將舊電腦改造成一個無紙化傳真機,而改造的時間只需要 5 分鐘,包括安裝 Stem OS 和寫幾行 JavaScript 程式。有興趣的人可以參閱當時的投影片『JSDC 2013 簡報釋出!NPK 與 JavaScript OS (Stem) 登場!』。

JavaScript 語言的好處就是用它寫的程式無需編譯,效能也不俗,這意味著,當你在開發 PC 平台之外的嵌入式裝置(如:ARM),你不必再忍受跨平台編譯(cross-compile)的痛苦,可以很快速開發你的應用。此外 Stem OS 已經將系統和硬體的支援都已經為你處理好,也提供許多低階的系統 APIs,且一開機就是跑你的專屬程式,你可以專心的打造自己的嵌入式應用,完全不用再煩腦和花大量時間在系統整合和移植的開發上。

既然 Stem OS 已經將許多系統功能包裝成 APIs,讓 JavaScript 可以透過這些介面從 UI 控制到硬體,代表我們實際上做了很多這方面的準備工作,本文將要提到的 jsdx-disk,便是其中之一。

jsdx-disk 顧名思義是一個控制硬碟的系統 APIs,你可以用他掛載(Mount)、切割磁區(Partition)和格式化(Format)硬碟。更進一步,你可以用他監控系統上的儲存裝置,以及取得這些儲存裝置的硬體資訊,更進一步處理熱插拔(Hotplug)的行為。在 Stem OS 中,我們以 JavaScript 寫了一支常註程式(Daemon),監控熱插拔隨身碟,自動掛載(Automount)的機制,而這功能就是運用了 jsdx-disk。

COSCUP 2013 is coming!

今年 COSCUP 很有錢、很盛大,整個活動從中研院移師到了台北國際會議廳,議程多達八軌。很難想像三四年前,自己幫忙 COSCUP 辦活動時的情景,和今天相較之下,當年的活動實在迷你,大家都希望哪一天能殺入台北國際會議廳。沒想到,COSCUP 靠後起之秀多年來的努力,真的在今年達成所有人的願望!我們真的要為這些工作人員和總召柏強喝采!謝謝他們每年不辭辛勞的貢獻!

慚愧的是,COSCUP 長越大,更顯得我小小的講者的微不足道,如今我唯一能貢獻的,大概就只剩對 Open Source 的熱情。因此,自去年在 COSCUP 2012 的國際舞台『發表退學宣言』後,這個大學讀了七年還是沒畢業的我,今年仍厚著臉皮投了稿,稿也被入取。這邊非常感謝議程審核人員的親睞,讓我贏得今年的一段宣言時間,還有開賣一分鐘內就沒有的入場門票。 :-)


至於我這次要講的主題是:『我用 Node.js 開發自己的 Web 瀏覽器?』

時間地點是:COSCUP 2013 第二天(8/4) 10:00,101CD 場。

其實,正當投稿截止之際,當時熱映的『鋼鐵人3』給我了很大的啟示。不禁思考,身為工程師的我們,是否已經被工具和自己曾經所創造的東西所束縛了?如果我們今天把眼前的電腦給砸了,是否全身上下功力全失?無法有任何作為?

這樣的概念,套在 JavaScript 這個近年來很夯的語言上,更是貼切不過。對很多人而言,失去瀏覽器為依靠的 JavaScript,令人感到不安、充滿焦慮,好像就不知道能用 JavaScript 做什麼事了。所以,為了破除迷思,就面對他吧!這是一個小小的實驗,讓我們嘗試用 JavaScript(Node.js) 打造自己的網頁瀏覽器,支援 HTML5/CSS3/WebGL 等最新標準的瀏覽器!

如果你至今還是無法完全明白 Node.js 的能耐,期待與你見面交流。

【玩轉 Cubieboard】安裝 u-boot 到 SD Card

當你得到 Cubieboard 後,首先要做的就是學習如何啟動你的作業系統。Cubieboard 可以支援 SD Card 啟動,這通常也是最容易入門的 Embedded System 開機方法。你只要準備一張 Micro SD Card,切割出分割區,然後把 Bootloader 和作業系統放進去即可。

安裝 u-boot

Cubieboard 使用的是 u-boot 做為 bootloader,你必須先下載 Source Code 然後 Compile:
git clone https://github.com/linux-sunxi/u-boot-sunxi.git make Cubieboard CROSS_COMPILE=arm-linux-gnueabihf-
如果你的系統 toolchain 都已經安裝完成,且都沒有問題,u-boot 會順利編譯通過,然後你會在 u-boot 的目錄裡得到兩個檔案:
spl/sunxi-spl.binu-boot.bin
有了這兩個檔案,安裝 u-boot 就不是什麼問題,只需要使用 dd 指令來把 bootloader 寫入 SD Card:
dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8 dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
註:/dev/sdb 是 SD Card 的裝置路徑,請依照你系統上的實際狀況,填入正確路徑。


後記

有趣的是,很久沒有玩開發板了,自從兩年多前開始陸續投入各廠商的專案後,所碰到的 ARM Board,清一色都是客製化的產品樣板。而幫大廠商做產品,和自己玩開發板相當不一樣,同樣是驅動程式有問題,要做的是打電話罵人;如果會當機,快打電話罵人;如果缺任何東西,打電話罵人就對了!所以,在客戶的專案中,做最多的總是證明硬體廠商的問題,讓硬體廠商們心甘情願幫你把問題排除。雖然還是要熟悉 Debug 的技巧,但多半不用自己煩惱『該怎麼辦』,只需要下指導棋。因此,自己也慢慢養成很多惰性,除非是真的沒人可以幫你,才肯親自出手跳下去從底層到應用程式,深入修正問題。

但是,玩開發板可不是這麼一回事。有問題?你自己搞定吧。搞不定?問 Google 大神吧。還是不行?慢慢看官方或是社群的 Source Code,全面理解…

跟猴兒一樣精的 Cubieboard

圖片
我們的團隊,最近取得了『Cubieboard』這開發板的代理權,負責台灣、香港等地的銷售和市場發展。這是很令人興奮的,因為我們好久沒有辦法全心全意開發自己想開發的東西、研究自己想研究的技術、打樣、以及對客戶驗證自己的想法,現在,終於可以名正言順的投入,利用這通用平台做一些不一樣的事情。


開發板顧名思義就是可以讓你開發的硬體、讓你用軟體控制的裝置,如果你有任何想法,都可以在上面做實驗,或是 DIY 打造出外面買不到的裝置,甚至做出產品原型。如果你有興趣,無論是個人和公司團體,歡迎與我們聯絡﹝frankie@mandice.com﹞。

JSDC 2013 簡報釋出!NPK 與 JavaScript OS (Stem) 登場!

最近比較忙,一直拖到現在,才有點時間上傳我在今年 JSDC 的簡報。這次,給的講題是『我編譯故我在:誰說 Node.js 程式不能編成 Binary』,主要探討怎麼使用 NPK 打包你寫的 Node.js 程式,以及把 JavaScript 程式碼編譯成二進位(Binary)檔,甚至是進一步的加密設計。NPK 雖然還只是初版,目前支援了三種博君一笑的封裝等級:卸妝(Remove mock-up)、媽媽不認識(Mom doesn't recognize)、爸爸不認識(Dad doesn't recognize),有興趣了解這三種等級不同的人,可以參考我的簡報:

當然,參加這種活動需要的是熱血,不在 Lightening Talk 閃電秀登場一下怎麼可以呢?於是當天毫不考慮的搶了一個名額,用短短的五分鐘介紹 Mandice 團隊最近在做的 JavaScript OS - 『Stem』。在 Stem 的平台之下,無論你是否為嵌入式系統或作業系統的高手,只需要懂 JavaScript 和純粹的 Web 相關技術,你就可以開發自己的嵌入式應用,或讓你的舊電腦或開發板有全新的用途。


後記

大家都知道,做外包工作,一向很難累積東西,唯一能累積的,就是設計工具以加速自己做案子的速度。因此,Stem OS 就是我們經歷過許多的案子後,自己設計的平台,讓我們可以盡可能完全用 JavaScript 快速開發嵌入式系統,然後結合硬體開發設計各式應用。在 Stem 裡,只需要懂 JavaScript 和 Web 相關技術,就能勝任開發工作,實現你心中的 Idea。如果說 3D Printer 是可以讓你快速打造模型實體,那 Stem OS,就是能將你心中的 Idea,化為空硬體的靈魂,Idea 的 3D Printer。

這對創業者、創新者和非資訊產業的公司來說,都是一個可以快速切入設計產品和自家工具的機會,不妨嘗試看看。:-)

如果有任何需求,無論是顧問、教育訓練還是合作開發,都歡迎與我們 Mandice 聯絡,或來信到 fred@mandice.com。

NPK 釋出!打包你的 Node.js 程式!

NPK』是什麼?一個打包 Node.js 程式的工具,之所以會有這個工具,完全是拜下周(5/18 - 5/19)將在中研院舉行的 JSDC 所賜。因為這次筆者也有個 Talk,將探討如何去編譯我們寫出來的 Node.js 程式,所以過程中便寫出了這樣一個工具。

https://github.com/cfsghost/npk

事實上,目前的 NPK 不是個新東西。JavaScript 經過多年的發展,早已經有非常多合併 JavaScript 程式碼的工具可以使用,對於前端工程師來說,是再尋常不過。不過,針對 Node.js 的程式碼,這樣的工具卻相對來說非常少。

如果你想嘗試使用看看,可以立即用 NPM 來安裝 NPK:
npm install npk -g
以 NPK 裡的範例專案為例,你可以直接下命令打包該專案:
npk tests/purejs/
接著你可以在輸出的資料夾中找到打包好的檔案:
tests/purejs/out/app.js/
甚至是直接執行他:
node tests/purejs/out/app.js/app.js
NPK 工具定義了一個新的屬性『npk_target』在 package.json,用來讓程式人員自行決定要合併和連結哪些 JavaScript 程式(像過去為 C/C++ 等語言寫 Makefile),可以參考 NPK 內附範例專案的 package.json。

最終目標『編譯』成二進位格式(Binary)

在與一些企業以及同業分享 Node.js 技術和其未來發展時,時不時會有人提出一個問題:『我們能不能編譯自己寫的 Node.js 程式?』這個問題,往往會開始引發一長串的討論,有一些人為終止這個問題,甚至會開始引用 JavaScript 語言的設計宗旨:『明碼保存,不需要預先編譯』,來強調我們不應該把 JavaScript 的優勢給閹掉。當然,這樣一廂情願的說法,是不可能消除許多人的疑慮,尤其是和 Open Source 路線不熟的企業,或是被『壞客戶欺負』的工程師。

有些眼睛比較亮的人,或許已經發現到,這其實是個複合性的命題,會提出這個問題的人,多半想要知道或得到的是:
能否透過預先編譯 JavaScript 程式,讓執行效能提升。想要打包自己寫的程式,讓他合併成一個,以方便釋出或管理。保護自己的程式碼。
這些都將會是 NPK 的目標,…

OSDC.TW 2013 簡報釋出!使用 JavaScript 大搞桌面應用和嵌入式系統!

OSDC.TW 2013 順利在中央研究院國際會議廳閉幕,但一如往年,失落感接踵而來。為了這次的 Talk,可說是花了不少工夫,除了研究 Webkit 的內部實作,以及 V8 JavaScript Engine 之外,最後也發表了一個新的 JavaScript 作業系統『Stem』,一個可以完全用 JavaScript 和 Web 技術去開發應用程式的嵌入式作業系統。Stem 落實了用 JavaScript 語言開發嵌入式系統的理想,並簡化嵌入式應用開發,讓人人都能輕鬆躍過以往嵌入式系統開發的艱澀門檻。

這邊釋出當天的簡報檔,有興趣者可自行參閱:

此外,對 Stem 有興趣的人,可以拜訪專案網站:

http://stem.mandice.org/

也可以在 IRC 上交流:

英文頻道:irc.freenode.net #stemos
中文頻道:irc.freenode.net #stemos-zh

註:目前 Stem 已釋出 x86 版本的安裝鏡像檔,近期內將會釋出 ARM 的版本,敬請期待。有興趣參與開發者,歡迎來信一同交流。

這年頭,你只需要懂 node-webkit !

極為幸運,今年初的投稿被 [OSDC 2013] 錄取,本次主題是『node-webkit』,將於 4/20(六)早場起,全面進攻。

你可能在問什麼是『node-webkit』?完全搞不清楚頭緒?身為 JavaScript 和 Node.js 的重度使用者,問問自己內心吧!不用懷疑,你最想要的東西,就在眼前。試著想像,一個沒有邊框又可獨立執行的瀏覽器,裡面跑著你用 JavaScript + HTML5 寫的應用程式,有如原生的桌面應用程式,當你想發行並釋出程式時,還能打包成一個獨立運作的執行檔,令人垂涎三尺呀!

『node-webkit』顧名思義就是將 Node.js 整合進 webkit(Chrome/Chromium/Sarfari 所用的網頁排版引擎)之中,讓你可以在網頁程式中使用功能強大的 Node.js。這意味著,你完全可以用 Node.js + HTML5 等 Web technology 開發跨平台『桌面應用程式』。由於『node-webkit』狹著 Node.js 以及其強大的第三方模組支援,而使用者介面採用了 Chromium(Google Chrome 的開放源始碼版本)核心當做繪圖引擎,能完全支援當前最新的各種網頁技術(如:HTML5、CSS3、WebGL 等)。因此,只要身為一個前端網頁開發者,都能輕易利用它設計出優雅、炫麗的圖形化介面,然後完成一支獨立運行的桌面應用程式。

如官方網站的範例,在前端網頁程式中使用 Node.js:
<html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> We are using node.js <script>document.write(process.version)</script> </body> </html>
這年頭,你真的只需要懂 node-webkit!我們 OSDC 2013 中研院國際會議廳見!

歡迎洽詢!Node.js on Embedded System 專業技術服務!

經過一年多的孕釀,我們的團隊【Mandice】已有萬全的準備,在此正式對外宣布提供 Node.js on Embedded System 的專業技術服務,歡迎立即來信洽詢。
嵌入式系統開發生態已經改變,今天的 Node.js 已為嵌入式系統帶來全新的面貌,其高效開發的優勢,以及不俗的效能和數不清的現成模組,讓嵌入式系統的產品開發周期以及技術門嵌大大降低。導入使用 Node. js 能讓產品設計者,更能專注於創新和使用者體驗,因應這時代的快速發展。
我們的團隊在這一年間,已經深耕各類 Node.js 相關技術,更結合團隊過去的系統技術和產品經驗,提供了整套的系統軟體平台以及顧問服務給許多合作夥伴和大廠,讓其開始以 Node.js 開發自家產品。至今,已有一些面世或即將面世的產品,使用了 Node.js 的技術開發嵌入式系統,甚至已經著手準備第二代產品,成效相當不錯。
若您也想趕上這班列車,歡迎與我們聯繫,我們將提供您最好的服務。
有意請來信至電子郵件信箱,我們會立即與您聯繫:
fred@mandice.com

Node.js EventEmitter 事件管理神器

如果你已經相當熟悉 JavaScript 的開發,那就肯定對其事件機制不陌生。我們等待一個物件產生事件,去觸發我們設定的 callback 函式,是最常見不過的東西了。不過,如果你想要設計一個自己的物件,並容許別人可以監聽它的事件,要怎麼做呢?

如果你什麼都沒有,你肯定是在自己的物件中宣告一個 event handler 的表,當別人想要針對特定的事件掛上 callback function 時,就記錄在該表內。然後在事件被產生時,去呼較對應事件的所有 callback function。然後,你會設計像 .on() 、off() 和 emit() 之類的方法,讓別人可以使用。

是的,很累。既然事件機制是我們在 JavaScript 中常用的功能,每個物件都寫一次這樣簡單的事件管理,真的很浪費時間。其實,Node.js 本來就有實作這樣的機制『EventEmitter』讓開發者直接使用。

EventEmitter 的使用方法很簡單:
var util = require('util'); var events = require('events'); var MyClass = function() { }; util.inherits(MyClass, events.EventEmitter); MyClass.prototype.ping = function() { this.emit('response', 'pong'); };
實際使用這個 Class 建立物件,然後監聽事件,最後觸發事件:
var myClass = new MyClass(); myClass.on('response', function(msg) { console.log(msg); }); myClass.ping();
後記

把 EventEmitter 的繼承寫在 Class 宣告和 prototype 宣告之間很彆扭,但在 Class 宣告後立即使其繼承 EventEmitter 是正確的邏輯行為,所以,勉強接受他吧。