Node.js 從無到有 – 做一個簡易部落格(一)

近年最熱門的程式語言我想非 Node.js 所用的 JavaScript 莫屬。過去 JavaScript 只存在於前端網頁的互動介面,現在則是包含伺服器端的程式撰寫也都能用相同的程式語法來寫,我想這世界上大概找不到第二個守備範圍如此廣泛的程式語言了。

繼續閱讀 “Node.js 從無到有 – 做一個簡易部落格(一)"

想建造自己的 Cloud9 雲端環境?兩步驟讓你擁有!

Cloud9 SDK

我們曾經介紹過 Cloud9 這一個雲端環境,當時所介紹的是官方所提供的版本,那一定會有人想問:「有沒有可以自行架設的版本呢?」

答案是,有的!

繼續閱讀 “想建造自己的 Cloud9 雲端環境?兩步驟讓你擁有!"

在找免費的電路模擬器?123D Circuits 滿足你的願望!

123D CIRCUITS

又快過完一個學期了,是否正在為專題煩惱呢? 或是你正因為學校所教的電子電路課程在家無法實做而感到麻煩嗎? 還是說你是一位剛剛接觸 Arduino 的自造者(Maker),對於自己所創造的東西不會動又找不出原因而感到煩躁?

試試 123D CIRCUITS 吧!這個由 AUTODESK 提供的線上模擬器擁有相當全面的功能,你只需要打開瀏覽器、登入這個網站然後你就可以開始接線路還能在上面寫 Arduino 程式來測試呢!如果你還有印象,之前發表過的 Arduino 教學文章也有用到這個網站。

繼續閱讀 “在找免費的電路模擬器?123D Circuits 滿足你的願望!"

Beaglebone Black – 透過 NodeJS 使用 RF24 Library

RF24 是一個相當完整的 nRF24L01 函式庫(library),它目前支援許多平台,例如 Arduino、樹莓派等等,先前有草草的介紹過。

最近因為在使用 Beaglebone Black (BBB) 這個單板電腦在做些實驗,需要用到 nRF24L01,本來是想直接用已寫好並放在 NPM 中的套件,結果發現無法使用,於是就想起了 RF24 有支援到 BBB,但遇到了些麻煩。

因為我只想用 NodeJS 去做大部分的控制,並不想要用 RF24 那種全 C/C++ 的方式來做,所以我就寫了一個簡單的程式來讓 NodeJS 與 RF24 能夠傳遞訊息並且操作 nRF24L01 模組。

繼續閱讀 “Beaglebone Black – 透過 NodeJS 使用 RF24 Library"

Ubuntu – 讓 Sendmail 以 Gmail 的 SMTP 來發送信件

前陣子我在設定實驗室在用的伺服器,為了一些需求,要從伺服器寄送一些電子信件出來。不過之前的經驗是,直接從伺服器送出的信件會被當作是垃圾郵件,所以這次想透過 Gmail 的 SMTP 來送信件,而實測結果是這樣的方法的確不會再被當做垃圾郵件了。

繼續閱讀 “Ubuntu – 讓 Sendmail 以 Gmail 的 SMTP 來發送信件"

免安裝!Cloud 9 讓你打開瀏覽器就能寫程式!

免安裝-Cloud 9 讓你打開瀏覽器就能寫程式

身為一位程式設計師,是否常覺得一些開發環境實在是笨重又肥大呢? 或者覺得輕巧自由而且許多前輩們愛用的 VIM 或 EMACS 難以駕馭? 這裡有一款你只需要準備好對應的環境,你只需要開啟瀏覽器,就能開始寫程式的工具,它叫做「Cloud 9」!

繼續閱讀 “免安裝!Cloud 9 讓你打開瀏覽器就能寫程式!"

NodeJS – 為 console.log 加上時間與檔案紀錄。

如果你有開發 Node.js 的經驗,一定相當常運用其內建的 console.log() 來作為 Debug 的方式之一。

而當整個系統完成或上線之後,就比較無法使用這種方式去找後續發生的問題,因為我們不見得能看到系統端終端機中的內容,但若為了這個紀錄功能要多寫一個 function 然後替換掉原本拿來 debug 用的 console.log …這也太麻煩了吧。

幸運的是,JavaScript 允許你用 Override 的方式來覆寫原有的程式,改成你所需要的樣子。

等一下我們就要來覆寫 console.log 這個 function 來為它加入時間戳記以及寫入一個檔案作為紀錄的功能。

開始之前

在這支程式中,我為了方便產生時間格式,有使用到 date-utils 這個模組,所以請記得在你的 Node.js 專案資料夾中安裝

npm install date-utils --save

並在程式碼上方加入

require('date-utils')

已便使用這個模組提供的 toFormat 功能。

程式碼

在你的程式中加入:

// log override
console.log=(function() {
      var orig = console.log;
      return function() {
        try {
          var tmp=process.stdout;
          process.stdout=process.stderr;
          // get now
          var now = new Date();
          // format time
          var now_formated = now.toFormat("YYYY-MM-DD HH24:MI:SS");
          var strDate = '[' + now_formated + '] ';
          if (Buffer.isBuffer(arguments[0])) {
            arguments[0] = strDate + arguments[0];
          } else if (typeof arguments[0] !== 'object') {
            arguments[0] = strDate + arguments[0];
          } else if (typeof arguments[0] === 'object') {
            arguments[0] = strDate + JSON.stringify(arguments[0]);
          }
          orig.apply(console, arguments);
        } finally {
          process.stdout=tmp;
        }
    };
})();

然後執行你的程式,應該就會看到類似下方的訊息,這樣是不是更好紀錄與找問題了呢?

[2015-12-19 20:15:35] Hello, World!

參考來源:http://davidherron.com/blog/2014-04-26/overriding-consolelog-nodejs-and-other-thoughts-about-logging-node-apps

Arduino Basic (6) – AnalogRead 類比輸入

前面幾節講的都是數位的處理,也就是只有 0 和 1 兩種訊號,但我們的世界並不是只有 0 和 1 兩種訊號而已,我們還有更複雜的類比訊號。

諸如電壓、聲音、光亮、溫度等等的,都無法單純的由 0 和 1 構成。

那當我們需要處理這些訊號的時候該怎麼辦呢?

這時候就是 ADC (Analog to Digital Convert, ADC) 出場的時候啦!

繼續閱讀 “Arduino Basic (6) – AnalogRead 類比輸入"