具有可攜性的命令稿 shebang

傳統上,命令列程式使用 C (或 C++) 這類編譯語言來撰寫,其他替代的編譯語言像是 D、Go、Rust 等也可以考慮。不過,我們也可以用命令稿來撰寫命令列程式,在類 Unix 系統上,命令稿的選擇很多,除了 Bash、tsch 等 shell scripts 以外,也可以用 Perl、Python、Ruby 等語言製作命令稿。類 Unix 系統使用檔案第一行的 #! (shebang) 來決定命令稿實際運作的語言。這篇短文就是要談談如何 (儘可能地) 寫出具有可攜性的命令稿 shebang。 註:本文的可攜性是指讓此命令稿在類 Unix 系統間流通。 早期有些書會用這樣的方法寫 shebang: #!/usr/local/bin/perl print "Hello Worl...
「點我閱讀更多」

Rust 或 Go (Golang) 何者較適合做為後端語言

網路論壇上有許多討論這個議題的討論串,像是這個。Rust 和 Golang 分別問世將近十年,這段時間已經足以了解其趨勢,從相關流行度統計來看,Golang 是很明顯的優勝者。部分程式設計者可能會感到疑惑,明明 Rust 具有許多 Golang 沒有的優勢,為什麼 Golang 反而比較流行呢? 理論上 Rust 和 Golang 不應該放在同一個基準點上來比較。Rust 基本上是強化過安全性的 C++;和 C++ 類似,Rust 的語言特性也相當豐富。相對來說,Golang 設計理念向 C 靠攏,但其實是和 Java 類似的應用程式語言,而非 C (或 C++) 般的系統程式語言。但是,就像 C++ 也是可以拿來當做另一個 (困難版的) Java,用來寫應用程式,Rust 和 Go...
「點我閱讀更多」

建立前後端分離的前端專案

傳統的網頁程式是以後端技術為中心,由後端來處理網頁路徑 (routes) 並輸出頁面。現在的網頁程式強調 SPA (single page application) 的概念,儘量減少重新載入整個頁面的次數,改用 AJAX 局部更新頁面內容;許多新的網頁程式都會使用 SPA 來增進使用者體驗,一些成功的實例像是 Gmail 等。這個概念就催生出許多的前端框架,像早先的 Backbone.js 和現在的前端三雄 (Angular, React, Vue) 等。 在工程上,將前後端拆成兩個專案也有一些好處,像是利於團隊分工。在這個思維下,後端用來實作商業邏輯及橋接資料庫,前端用來傳接資料及輸出頁面;前端的程式設計師不會直接動到後端的專案,反之亦然。將專案拆開後,前端只要用靜態網頁主機就可以...
「點我閱讀更多」

為什麼要用 (或不用) jQuery

在 Netscape vs. Internet Explorer 的瀏覽器大戰時代中,jQuery 的確幫助許多開發人員解決瀏覽器不相容的議題。然而,近幾年來 jQuery 過時的呼聲不斷高張,一方面是現在瀏覽器在標準化已有改善,jQuery 的角色相對弱化;另一方面,jQuery 的範式 (paradigm) 是以 DOM 為中心,而現在新的思維是以資料為中心。那麼,是不是我們已經不再需要 jQuery 了呢? 我們可以從以下數個面向來考量是否要使用 jQuery: 市佔率 函式庫大小 對 Internet Explorer 的支援度 DOM 導向 vs. 資料導向 難易度 市佔率 現在新的網頁前端學習教材通常會著重在 Anguar、React、Vue...
「點我閱讀更多」

以 C 語言實作龍與地下城 (Dragons and Dungeons) 風格的骰子

學習程式設計時,除了學習其語法外,運用已知的語法來實作一些小型程式,更有助於澄清我們對於程式語言的理解是否正確。在本例中,我們使用 C 語言來實作龍與地下城 (Dragons and Dungeons) 遊戲中著名的 d20 骰子系統,雖然在這麼短的範例無法做出電腦遊戲,實作遊戲中的骰子也是程式設計中常見的一項課題。 介紹 在遊戲中,隨機性 (randomness) 可增加遊戲的趣味,避免遊戲結果太過固定、可預期而感到乏味。在桌上遊戲中,透過 (公正的) 骰子來達到隨機性,在電腦程式中,則是透過隨機函式來生成亂數。龍與地下城原本是桌上遊戲,後來有數家電腦遊戲廠商將其做成電腦遊戲,像是柏德之門 (Baldur’s Gate)、冰風之谷 (Icewind Dale)、絕冬城之夜 (Ne...
「點我閱讀更多」