發表文章

目前顯示的是 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)的機制,而這功能就是運用了 js

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.bin u-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 大神吧。還是不行?慢慢看

跟猴兒一樣精的 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 程式,讓執行效能提升。 想要打包自己寫的程式,讓他合併成一個,以方便

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 是正確的邏輯行為,所以,勉強接受他吧。