簡介 .NET 的 Server 端資料驗證機制: DataAnnotation Validation

就一個應用系統而言, 對資料格式或資料正確性的驗證是保障系統能正常運作的重要基本動作.  目前大部份應用系統都是 Web-Based, 因此在使用者輸入資料的驗證部分, 可以選擇在 Client 端 (即 Browser 或 App) 做驗證, 也可以在 Server 端做驗證, 或是兩者都做.  在 Client 端的資料驗證, 一般比較常見.  在 Visual Studio (VS) 的開發環境中, 提供有資料驗證的控制項, 可以直接拉到頁面上來驗證使用者輸入的資料.  在 Client 端的資料驗證, 基本上都是透過 JavaScript 程式來進行, 這種方式雖然可以比較不影響 Server的效能, 但是主要缺點是瀏覽器上面的 JavaScript 有可能會被關掉, 導致沒辦法做資料的驗證.

繼續閱讀 “簡介 .NET 的 Server 端資料驗證機制: DataAnnotation Validation”

Linux 系統中 Docker 的設計與實作

Docker 和 Linux Container (LXC), BSD 的 Jail, 都是屬於 Lightweight Container (輕量級容器).  Docker 可以讓一個應用系統及其所需要的執行環境, 如系統設定, 環境參數和程式庫等, 打包成一個可以獨立執行的 Image.  和 VM 比起來, 因為 VM 需要安裝完整的作業系統, 而Docker 等 Lightweight Container 因為直接使用作業系統上的資源, 不需要安裝作業系統, 因此需要較少的資源, 在同一台實體機上可以部署更多應用系統, 有更高密度, 啟動時間也較短, 只需要約幾個 msec, 和啟動 VM 約需幾秒鐘相較, 要比 VM具有較好的彈性

繼續閱讀 “Linux 系統中 Docker 的設計與實作”

Linux 檔案系統的資料結構

我們在開發應用系統或寫程式時, 大多會使用到檔案來存取資料, 雖然目前許多應用系統會直接連接資料庫, 但是資料庫也會使用檔案對資料做存取的動作, 因此檔案系統在大部份作業系統中都是一個重要的部分.

在 Linux 或其他 Unix-Based 的系統中, C 語言是最主要的語言. 在 C 語言中關於檔案的功能大部份都透過 Standard I/O Library 來完成 (也就是最常見的 printf 和 scanf 等 function). 在此我們要介紹的是更低階的檔案功能, 一般稱之為 File I/O, 這些功能都是直接作系統呼叫. 在 File I/O, 開啟檔案是使用 open 這個 function (在Standard I/O 是使用 fopen). 開檔成功後系統會傳回一個叫做 File Descriptor (FD) 的整數, 後續關於這個檔案的動作及功能都要使用這個 FD, 如檔案讀寫等, 都要傳入這個FD當做參數.  FD 基本上是一個Index, 而 FD 也是檔案系統的資料結構中, 唯一使用者程式能夠看到的部份. 開啟檔案相關的資料結構如下圖所示.  需要注意的是圖中稱為 Table 的資料結構其實都不一定真正使用 Table 的形式. 繼續閱讀 “Linux 檔案系統的資料結構”