2009年12月29日 星期二

如何自動計算 SPBRG

Introduction

本文說明如何自動計算 PIC18 MCU 的 SPBRG (Baud Rate Generator)。

Highlights

本文討論下列項目:

  • Baud Rate 計算公式
  • 自動計算 SPBRG
  • PICMultiCalc 工具

Baud Rate 計算公式

  • USART 的 Baud rate 主要是由 SPBRGH (high byte) 和 SPBRG (low byte) 這兩個位元組決定
  • BRGH (TXSTA<2>) 決定 High 或 Low speed baud rate, 將 BRGH 設為 1 可讓實際值更接近想要的 baud rate
  • BRG16 (BAUDCON<3>) 用來決定 8-bit 或 16-bit mode, 當 BRG16 設為 1 時,就要搭配 SPBRGH 來設定 baud rate
  • 設定 BRGH 或 BRG16 可以減少 baud rate error

Baud rate 計算公式表:

2009年12月26日 星期六

SSH Secure Shell 軟體介紹

大綱

  • What's SSH Secure Shell
  • 軟體操作簡介
  • 建議的環境設定

What's SSH Secure Shell

  • SSH Secure Shell 是 SSH Communication Security 這家公司出的 SSH 連線軟體
  • 有良好的 GUI 操作介面,除了遠端終端機,還可以做檔案傳輸
  • 原本是免費下載的,新版 4.0 開始改成收費制,產品也更名為 SSH Tectia。不過網路上還是可以找得到 3.2.9 免費版
  • 官方網站: http://www.ssh.com/

軟體操作簡介

執行 Secure Shell Client,程式位置在【開始 / 程式集 / SSH Secure Shell / Secure Shell Client】:

2009年12月25日 星期五

[PIC] 如何辨別 PIC MCU Device

Introduction

本文說明如何分辨 PIC MCU Device。

Highlights

本文討論下列項目:

  • Device ID 簡介
  • 如何讀取 Device ID
  • 如何辨別 MCU
  • 如何對照 Revision 符號

Device ID 簡介

記憶體 0x3FFFFE-3FFFFF 這個位置有特殊的用途,這兩個 bytes 儲存了 PicMicro 的 Device ID。Device ID 是 Microchip 設定的,當需要分辨 device 的時候會用得到。Device ID 可以用 Device Programmer (ex: ICD2) 或者是在程式裏以 TBLRD 指令讀出來。

Device ID 裏含有兩個資訊:

  1. Device ID bits: 由 DEVID2 和 DEVID1 bit7~5 共 11 bits 組成
  2. Revision ID bits: 由 DEVID1 bit0~4 共 5 bits 組成

2009年12月24日 星期四

[PIC] Blinking a LED

Introduction

本文說明如何控制 LED 讓燈號閃爍。

Highlights

本文討論下列項目:

  • 控制 LED 讓燈號閃爍
  • 使用 C18 Delay Functions 延遲時間
  • 使用 Timer 與 Interrupt 控制 LED 燈號

看完本文後,你將可以完成下列工作:

  • 使用 C18 Delay Functions 延遲時間
  • 使用 MPLAB SIM 計算程式執行的時間
  • 計算 Timer 計數值
  • 撰寫中斷處理函式 - ISR (Interrupt Service Routine)

建立 Project

底下有數個版本的 LED 燈號控制程式範例,請參考 [PIC] Create a New Project with MPLAB 建立各個專案。

[PIC] Create a New Project with MPLAB

Introduction

本文說明如何使用 MPLAB 建立一個新專案。

Highlights

本文討論下列項目:

  • Creating a New Project
  • Building the Project
  • Programming the Device
  • Running the Program

看完本文後,你將可以完成下列工作:

  • 使用 Project Wizard 建立 Project
  • Assemble and link the code, and set the Configuration bits
  • Program the chip and run the program

Creating a New Project

第一步是在 MPLAB IDE 裏建立 Project 跟 Workspace. 通常一個 workspace 裏只會有一個 project。

  • 一個 Project 包含建立應用程式所需的檔案,如 source code, header files, library 等,以及編譯 project 的選項設定。
  • 一個 Workspace 包含一個或多個 projects, 所用的 device 資訊, debug/programmer 工具, 以及 MPLAB IDE 的 Configuration settings 等

MPLAB IDE 裏有一個叫做 Project Wizard 的工具可以用來建立新 Project。

2009年12月23日 星期三

把 DokuWiki 變成一個 Windows Service

隨身碟版 DokuWiki 內附一個陽春版 Apache (mapache.exe),mapache.exe 本身有變成 Windows Service 的能力。如果你用的是 隨身碟版 DokuWiki ,只要照著底下的步驟做,很輕鬆就可以把 DokuWiki 變成一個 Windows Service:

把 DokuWiki 變成一個 Windows Service

指令語法為:

範例:

Windows Service 移除辦法

image

參考資料

隨身碟版 DokuWiki

Introduction

本文說明隨身碟版 DokuWiki (DokuWiki on a Stick) 的安裝步驟,並簡單說明介面語系、時區的設定。

Highlights

本文討論下列項目:

  • 安裝步驟
  • 設定中文介面語系
  • 設定 Asia/Taipei 時區
  • 解決中文檔名編碼問題

安裝步驟

隨身碟版 DokuWiki 的安裝很簡單:

  1. DokuWiki on a Stick 這邊下載最新版 (我寫這篇時,用的是 2008-05-05 的版本)
  2. 解開壓縮檔 (避免水土不服,最好解到沒有中文路徑的資料夾)
  3. 執行 mapache.exe 即可

接著打開瀏覽器連到http://localhost:8800 就可以開始使用 DokuWiki。預設管理帳號/密碼為 admin/admin。

Arduino Overview

我做了一份 Arduino 的簡報,可以在這個鏈結中取得:Arduino Overview

2009年12月13日 星期日

ASP.NET 網頁表單驗證與授權示範

Introduction

本文示範 ASP.NET 網頁表單驗證(form authentication)與授權機制。

Tested on WinXP IIS5.1 and Win2003 IIS6.0

Highlights

本文討論下列項目:

  • 設定 ASP.NET application web.config 啟用 Form Authentication 機制
  • 建立用來做使用者身分驗證的 login 頁面
  • 使用 HTTP Handler 註冊特殊副檔名的處理程式

看完本文後,你將可以完成下列工作:

  • 使用 web.config 設定 Form Authentication
  • 撰寫程式驗證使用者帳號與密碼
  • 為機密文件加上權限管制

範例情境

範例情境說明:

  • 網站部份資源有權限管制(例如網頁程式, 文件, 圖片或其它檔案),未經身分確認不准存取。
  • 若想存取受管制的資源,系統會自動顯示「登入頁面(Login.aspx)」進行身分確認

範例檔案:

  • SecureFolder 資料夾裏的(.aspx)網頁要做權限管制
  • 例: SecureFolder 裏有個 ProtectedPage.aspx,未經授權不得存取
  • 使用者若存取 SecureFolder/ProtectedPage.aspx,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認
  • SecureFolder 資料夾中的部份文件也要做權限管制,例如 .png 和 .pdf 檔
  • 使用者若存取 SecureFolder 中的 .png 和 .pdf 檔,系統會自動顯示 SecureFolder/Login.aspx 進行身分確認

網頁存取流程圖如下:

image

(圖片來源:http://www.asp.net/learn/security/tutorial-07-vb.aspx)

設定 Web.config 啟用 Form Authentication 機制

  • 打開檔案總管,切到網站根目錄,例如 C:\InetPub\wwwroot
  • 編輯 Web.config 並加入下列設定,這會啟動 Form Authentication 機制。若根目錄下沒有 Web.config,請自行建立:
  • 將下列設定加到 system.web 元素下:

  • 上述設定說明:
    • loginUrl: 設定用來驗證使用者身分的網頁
    • 使用 credentials 設定使用者帳號與密碼,範例中設了 cooper 和 jason 兩個帳號。
      • passwordFormat: 設定密碼加密方式,可使用 SHA1 或 MD5 加密,Clear 表示不加密
  • 將下列設定加到 Web.config 中:
  • 上述設定說明:
    • 設定 SecureFolder 資料夾裏的檔案必須經過身份確認才能存取
    • <deny users=”?” /> 這行用來拒絕匿名使用者
  • 關閉並儲存 Web.config
  • 完整的 Web.config 內容如下:

建立 Login 頁面

  • 在 SecureFolder 下建立一個 Login.aspx
  • 將下列程式碼貼到 Login.aspx
  • 關閉並儲存 Login.aspx

建立受權限管制的網頁程式(ProtectedPage.aspx)

  • 在 SecureFolder 下建立一個 ProtectedPage.aspx
  • 將下列程式碼貼到 ProtectedPage.aspx
  • 程式說明: 利用 HttpContext.Current.User.Identity.Name 取得登入者名稱
  • 關閉並儲存 ProtectedPage.aspx

測試身分驗證範例程式

image

  • 按下 Enter, 如下圖,此時若有顯示登入頁面(Login.aspx),代表程式有正常執行:

image

  • 帳號欄輸入 cooper,密碼欄輸入 mypass,按下 Login 鈕登入。如下圖,此時若有顯示歡迎畫面,代表程式有正常執行:

image

  • 按下登出鈕,回到登入頁面,這次任意輸入不存在的帳號與密碼,按下 Login 鈕。如下圖,此時若有顯示 “您輸入的帳號或密碼有誤,請重輸登入。” 的錯誤訊息,代表程式有正常執行:

image

使用 HTTP Handler 註冊特殊副檔名的處理程式

  • 在網站根目錄建一個 bin 資料夾
  • 寫一個 FileVerifier.vb 放在 bin 資料夾裏,檔案內容如下:
  • 開一個 DOS 視窗,切換到 bin 資料夾
  • 執行底下指令把 FileVerifier.vb 編譯成 FileVerifier.dll (若找不到 vbc 指令,請打完整路徑,例如 C:\Windows\Microsoft.Net\Framework\V1.1.4322\vbc.exe) :
  • 修改 Web.config,在 location 元素底下加上底下 httpHandlers 三行設定:
  • 關閉並儲存 Web.config
  • 開啟 IIS, 在網站上按右鍵,點內容>主目錄,畫面上就會顯示網站主目錄設定的視窗,如下圖:

image

  • 按下設定鈕,在 “應用程式副檔名” ListView 中找出 .aspx,按編輯鈕,畫面上就會顯示 “新增/編輯應用程式副檔名對應” 視窗,如下圖:

image

  • 選取執行檔欄位中的字串,按下Ctrl + C 將字串複製到剪貼簿,按取消鈕關閉視窗
  • 按下新增鈕,畫面上會再顯示新的 “新增/編輯應用程式副檔名對應” 視窗,在執行檔欄位上按 Ctrl + V貼上剪貼簿的內容
  • 副檔名欄位中輸入 png (WinXP IIS5.1 須輸入 .png),如下圖:

image

  • 確定鈕關閉視窗
  • 放一張 png 圖檔到 SecureFolder 資料夾中,例如 logo.png
  • 打開 Browser,在網址列輸入 logo.png 的網址,例如 http://localhost/SecureFolder/logo.png,如下圖:

image

  • 按下 Enter,如下圖,若有顯示登入頁面,代表程式有正常執行:

image

  • 輸入正確的帳號與密碼,按 Login 登入,此時畫面若有顯示 Logo,代表程式有正常執行:

image

  • 照相同的步驟為 pdf 設定副檔名對應,即可為 pdf 檔加上權限管制

參考資料

保護網站的 mdb 檔

Introduction

本文說明如何保護網站上的 mdb 檔。

Tested on WinXP/IIS5.1 and Win2003/IIS6.0.

Hightlights

本文討論下列項目:

  • 設定 IISASP.NET Web.config 保護 mdb 檔

看完本文後,你將可以完成下列工作:

  • 使用 IIS/ASP.NET 保護 mdb 檔,避免讓人利用 Browser 取得含有重要機密的 mdb 檔

保護 mdb 檔

保護 mdb 檔涉及下列工作:

  • Task 1, 設定 IIS 的 .mdb 副檔名對應到 ASP.NET ISAPI
  • Task 2, 設定 ASP.NET 將 .mdb 對應到 HttpForbiddenHandler HTTP handler
Task 1, 設定 IIS 的 .mdb 副檔名對應到 ASP.NET ISAPI
  • 啟動 IIS
  • 點選網站,在要設定的網站專案上,按滑鼠右鍵>內容>主目錄,IIS 的設定視窗就會顯示在畫面上,如下圖:

image

  • 按下應用程式設定值中點設定(G)…鈕, 應用程式設定視窗就會顯示在畫面上,如下圖:

image

  • 在應用程式副檔名 ListView 中,點 .aspx 副檔名,點編輯鈕,新增/編輯應用程式副檔名對應 Dialog 就會顯示在畫面上,如下圖:

image

  • 執行檔欄位中的內容複製到剪貼簿,按取消鈕關閉視窗
  • 新增鈕,新增/編輯應用程式副檔名對應 Dialog 就會再顯示在畫面上,這次在執行檔欄位中貼上剪貼簿中的資料,在副檔名欄位中輸入 mdb(WinXP IIS5.1 須輸入 .png),如下圖:

image

  • 按下確定 關閉 IIS

Task 2, 設定 ASP.NET 將 .mdb 對應到 HttpForbiddenHandler HTTP handler
  • 打開檔案總管
  • 編輯網站根目錄下的 Web.config (若根目錄下沒有 Web.config,請自行建立檔案)
  • 在 system.web 元素下加入底下 httpHandlers 三行設定:
  • 關閉並儲存 Web.config
測試下載 mdb
  • 放一個 mdb 檔到網站根目錄下,例如 Sample.mdb
  • 打開 Browser, 在網址列輸入 http://localhost/Sample.mdb 並按下 Enter
  • 如下圖,若 Browser 視窗有出現 “不服務此類型頁面…副檔名 '.mdb' 可能不正確” 的訊息,代表 mdb 的保護設定有成功執行:

image

備註

  • 我 WinXP/IIS5.1 用的 .NET 版本是 v2.0.50727,實測的結果,「Task2, 設定 ASP.NET 將 .mdb 對應到 HttpForbiddenHandler HTTP handler」這個步驟不做也是可以的。

參考資料

Function Pointer Slide

我做了一份 Function Pointer 的簡報,可以在這個鏈結中取得:Function Pointer.rar

Linux kernel Overcommit and OOM

Introduction

本文介紹 Linux Kernel Overcommit 與 OOM(Out Of Memory) 管理機制。

HighLights

本文討論下列項目:

  • Overcommit 與 OOM 簡介
  • Kernel's Overcommit Behavior

Overcommit 與 OOM

資源有限,實際記憶體就那麼多,當想使用比實際記憶體還大的空間時,稱之為過量使用 (Overcommit),過量使用伴隨而來的就是所謂 OOM (Out Of Memory) - 記憶體耗盡現象。

Kernel's Overcommit Behavior

Linux 提供三種 Overcommit 處理模式,管理者可以設定 /proc/sys/vm/overcommit_memory 這個檔案內的數值以改變 Overcommit 模式:

  • 0: 使用預設的 Overcommit 機制,當記憶體 Overcommit 時,Kernel 會挑選一個最不重要且又佔用很多記憶體的 Process 並使用 OOM Killer 終止它。
  • 1: 永遠允許 Overcommit
  • 2: 不允許 Overcommit。當使用這個模式時,全部可配置的記憶體(Total commit) 不可超過 swap + RAM * overcommit_ratio。

舉個例子: 系統上有 256MB RAM 及 256MB swap,假設想限制的 Overcommit 目標為 384MB,256MB + 50% * 256MB = 384MB,故應將 overcommit_ration 設為 50:

也可以使用 sysctl 指令來設定 overcommit_memory 及 overcommit_ratio,例如:

/proc/sys/vm/overcmmit_ratio 預設為 50。

參考資料

2009年12月12日 星期六

Subversion keyword substitution

何謂 Subversion keyword substituion?

假如把 keyword substituion 功能打開,那麼當程式碼被 check in/commit 到 subversion server 的時候,檔案中的 $Id$ 標籤就會自動展開。也就是說,如果有這麼一行:

程式碼被 commit 之後,內容會變成類似這樣子的東西: 表示 calc.c 這個檔案的 Revision Number 是 148,上次更新日期是 July 28, 2002,修改人是 sally。

打開 keyword substituion:方法其一

  • 在任一個資料夾上按右鍵,選 TortoiseSVN → Settings 打開 “TortoiseSVN Settings” 視窗:

image

  • 按一下【Edit】按鈕編輯 Subversion configuration file:

image

  • 把 enable-auto-props = yes 這行前面的 # 字註解符號拿掉,並且在 [auto-props] 區段中輸入底下這行:\

image

  • 儲存並關閉設定檔,日後當你在新增或匯入(import)檔案時,keywords substitution 就會發揮功用,如下:

image

兩點注意事項
  1. keywords substitution 只要設一次就好,TortoiseSVN 會對電腦上所有 Project 套用同樣的設定。
  2. 上面的設定只有對「新增或匯入的檔案」才有效,對既有的檔案是無效的。如果要對既有的檔案設定 keywords substitution,請使用底下第二個方法。

打開 keyword substituion:方法其二

如果要對既有的檔案設定 keywords substitution,請照底下步驟做:

  • 選取要套用 keywords substituion 的檔案(可一次選取多個檔案),按右鍵選 TortoiseSVN → Properties:

image

  • 按下【Add】鈕:

image

  • 在 Property name ComboBox 下拉選單中選擇 svn:keywords,然後在 Property Value 輸入 Id:

image image

  • 最後按下【OK】鈕,然後將檔案 commit 上傳,既有的檔案就會套用 keywords substitution 了。

參考資料

Dev-C++ 無法 debug

問題說明

我在寫一些 C/C++ 小程式,使用 Dev-C++ 這個免費又好用的 IDE 開發工具。我用的版本是 Dev-C++ 5.0 beta 9.2 (4.9.9.2) with Mingw/GCC 3.4.2。在 debug 程式時,Dev-C++ 一直出現 “Your project does not have debugging information, do you want to enable debugging and rebuild your project?” 這個訊息:

image

不管按多少次 Yes,就是沒辦法 debug。我想這應該是 Dev-C++ 的臭蟲,它沒有正確傳達要產生 debug information 的訊息給 gcc。

解法

  • 方法一:修改 “Project Options” (Project→Project Options→Compiler→Linker),把 “Generate debugging information” 改成 Yes。不過這個方法有個缺點,每個需要 debug 的專案都做同樣的動作:

image

  • 方法二:修改 “Compiler Options” (Tools→Compiler Options→Settings→Linker),在底下視窗的兩個 textbox 中都輸入 -g,並把兩個 chekbox 都打勾,讓 gcc 每次編譯時都產生 debugging information,一勞永逸:

image

VisualSVN Server 簡介

VisualSVN Server 是什麼

VisualSVN Server 是 Subversion, Apache 和 MMC(MS Management Console) 的統包(Turnkey),好處有:

  • 免費下載
  • 檔案小,V1.7 版才 3.77MB
  • GUI-based 介面,操作簡單
  • 內建帳戶管理,亦支援 Windows, Active Directory 認證

image

安裝步驟

image

  • 開始安裝, 完成時安裝精靈會詢問你要不要開啟 VisualSVN Server Manager

image

使用範例

  • VisualSVN Server Manager 首次執行的畫面

image

  • 先按 Create new user 建個帳號來試試

image

  • 用剛剛建好的帳號瀏覽網頁,登入畫面如下:

image

VisualSVN Server 顯示目前還沒有 Repositories:

image

  • 來建個 Repository 試試:

image

image

網頁上可看到剛建好的 sample repository:

image image

  • 也可以用 TortoiseSVN Client checkout

image

參考資料

  • VisualSVN Server

  • VisualSVN - A Visual Studio plug-in that integrates Subversion and TortoiseSVN seamlessly with Visual Studio.

後記

  • VisualSVN 宣稱支援 Active Directory 認證,在 VisualSVN Server Properties 視窗的 Authentication 這裏有看到兩種認證方式 (1) 內建認證 和 (2)Windows 認證,但卻沒看到 Active Directory 的認證方式,不曉得 Active Directory 認證要怎麼做?

image