2022 Fall 課程 w8

2022 Fall 課程進入第八週, 就計算機程式與電腦輔助設計實習等課程的架構, 其核心都是繞著網站運作.

計算機程式課程核心

一言以蔽之, 計算機程式課程的核心, 就是教導如何在網站上執行程式, 假如只是考慮到網站的前端, 就是讓學員了解如何運用 html、css 與 Javascript, 若涵蓋網站後端, 則指如何使用 Python 程式與網站前端互動.

然而對機械設計流程之後的應用而言, 在網站上執行程式的重點, 是如何利用網路與程式在網站上進行機電系統模擬.

網站

KMOLab 課程的網站雖然以 Github Pages 上的網站為主, 但是在轉換為 html 超文件網站之前, 使用者可以透過網站前端與後端的計算機程式與 CAD 套件互動, 然後再設法將模擬或設計的機電資系統結果呈現在 Github Pages 網站上.

由於 Siemens NX 套件的 NXOpen 程式延伸架構允許利用 Python 程式編寫 API 程式, 因此就網站前端的程式語言選擇, 並非直接使用 Javascript, 而是採用 Brython. 也就是使用者可以在網頁上編寫 Python 格式的 Brython 程式, 然後再轉為 Javascript 執行. 至於後端則使用 CPython + Flask 設法與 NX 、Solvespace 及 Coppeliasim 進行互動.

2022 Fall 各學員的網站倉儲採用 Github Classroom 配置, 也就是讓各學員的個人課程倉儲位於計算機程式 (cp2022) 與電腦輔助設計實習 (cad2022) 的 organization 代號下: mdecp2022 與 mdecad2022.

目前 Github Pages 上的倉儲只能顯示最新版特定 branch 上的資料, 因此若希望靜態或動態網站能夠將曾經改版的歷史資料逐一呈現, 則必須在自行架構的同步倉儲中利用網際程式, 或將倉儲的歷程資料同步轉入 Fossil SCM 的 Docs 網站才可達成.

這裡所謂的網站指符合 WWW 網路協定規範的伺服器, 假如只是純粹在 Ubuntu 或 Windows 上希望透過 WWW server 伺服網頁, 可以採用 Nginx, 其中可以設定為 http 伺服或加上 LetsEncrypt 設定為 https 伺服.

至於區分靜態與動態網站的關鍵在於是否可透過程式方法, 直接登入 WWW 網站修改內容, 一般來說, 靜態網頁的內容修改, 是修改 html, css 或 Javascript 資料, 該靜態網站的 html 檔案並無讓管理者登入的選項, 但動態網站則通常透過 server 端的程式來產生網頁, 而這些網頁可以採用純 html 的方式儲存, 也可透過 Database 的方式儲存.

使用者可以將靜態網站視為一個網站最終呈現給使用者的資料, 而動態網站則可以透過程式方法, 配合組織內的各種運作流程來呈現網站內容. 而這些產生網站資料的流程允許置入審查機制或各種內部管理流程的運作後才產生配置在網站上的內容. 然而隨著 Javascript 前端程式的蓬勃發展, 靜態網站與動態網站的區別可以透過網站內容是否牽涉伺服器上的程式運作而定. 網站內容所執行的程式僅依賴網站前端的程式者可視為靜態網站. 而網站內容除了網站前端程式外, 還包括網站後端 server 程式的搭配才產生網站內容者, 則可視為動態網站.

程式的編寫與儲存

計算機程式課程的推動, 在各學員都能透過 Github Pages 呈現個人倉儲網站內容之後, 就可以直接在個人的靜態網頁中呈現其學習計算機程式語言的歷程. 由於各學員所編寫的 Brython 被要求儲存在其帳號下的 Gist 區域, 因此每次的程式內容改版都能透過版次號碼擷取, 假如再要求各種程式開發過程, 必須仔細透過程式註解說明各段程式編寫的構想與採行方法, 如此便可經由各學員繳交程式的改版歷程所參照的資料或構想判定其原創程度.

例如: 各學員在 Gist 上編寫程式時, 必須先提供程式編寫目的, 編寫構想, 編寫參考資料與所擬採行的步驟後, 再逐一實現程式內容.

計算機程式問題

以下為 1a 計算機程式學員的靜態網頁連結:

以下為計算機程式 1b 修課學員的個人倉儲靜態網頁連結:

2D 靜態繪圖

2D 動態繪圖

2D 機構模擬

電腦輔助設計與實習課程核心

CAD 課程的重點是利用電腦輔助設計套件進行產品設計, 而 KMOLab 所使用的套件包含 Siemens NX, Solvespace 與 Onshape, 機電模擬系統則採用 CoppeliaSim.

下載 NX2027 lite 可攜版本

下載 Solvespace 3.1 版 for Windows

下載 CoppeliaSim 4.3.0 rev12

Onshape 建立教育版帳號.

因為電腦輔助設計與實習課程承接先前以 Brython 及 Python 為核心的計算機程式課程, 因此透過 python-solvespace 可以解 2D 設計約束條件, Python for NX 可以利用 NXOpen 中的 Python API 處理零組件設計, 利用 Onshape-clients 也能與 Onshape 零組件進行延伸互動. 當零組件設計繪圖完成後轉入 CoppeliaSim, 則可以利用 Python remote API 執行控制系統設計. 最終將完成的零組件設計與前述網站結合則除了透過 threejsFrontend 外, 也可自行利用 Pyweb3d 完成.

以下為電腦輔助設計與實習課程 2a 修課學員的個人倉儲靜態網頁連結:

以下為電腦輔助設計與實習課程 2b 修課學員的個人倉儲靜態網頁連結:

cmsimde

cmsimde 是一套利用 Python 與 Flask 建立的網際內容管理系統. 利用 cmsimde 與 Github Classroom 配置使用者網站的複雜度, 其中大部分來自電腦輔助設計室的網路環境與自架伺服器都只部署在純 IPv6 的網路環境中. 其實 IPv6 網路協定早在 1995 年便已推出, 但台灣至今的 IPv6網路部署也僅達到將近 50%. 就連 github.com 截至目前的 git clone 與 git push 都還僅支援 IPv4. 因此在僅有 IPv4 的網路環境下, 或僅有 IPv6 的電腦輔助設計室與自架伺服器的各別協定使用, 都必須選擇性設定雙網路協定的代理主機.

上課時段將電腦輔助設計室直接連結到系主幹的目的, 是為了取得最大對外連線頻寬, 且避開許多錯誤設定的 IPv4 伺服器所造成的網路封包阻絕效應. 但其結果就是必須在純 IPv6 的網路環境中工作, 而當學員回到宿舍或其他網路連線條件下, 又幾乎都在 IPv4 的網路協定下工作, 為因應這兩種互不相容的網路環境, 最佳的設定就是使用兩套可攜的隨身系統, 分別在不同網路協定下運用.

道理雖然簡單, 但由於其他課程並未觸及 IPv6, 且即便在中華電信的網路連線下, 也並非全時提供 IPv6 網路環境, 因此造成許多初學者使用 cmsimde 網站與 Github 倉儲上的諸多困難.

要克服網路與電腦使用上的諸多問題, 唯一的方法就是先了解基本原理, 然後再逐步依照教學流程設定後, 仔細比對網路連線原理, 多多針對不同使用情境加以調適練習就可逐步熟悉各種設定細節.

使用 cmsimde 建立網站的另外一項瓶頸也來自子模組的使用, 最早將 cmsimde 用於 Github 倉儲與網站設定的背景是, 各使用者可以在既有 cmsimde 子模組的架構下, 透過 user.py 採 Blueprints 延伸各種網際內容管理或電腦輔助設計前後端流程的功能. 但隨著 Github Classroom、 MS Teams 與多種 CAD 套件的導入, 延伸程式的編寫門檻越堆越高, 這幾年的課程即便推展至 KMOLab 的協同產品設計課程, 進度也難以觸及 user.py 的範圍.

尤其最近幾年的手機軟硬體功能已經足以與電腦並駕齊驅, 將手機與平板的應用導入課程已經是必然的趨勢, 因此接下來必須進一步思考是否重新架構 cmsimde 與學員個人倉儲及網站的配置, 刪除子模組的配置, 直接以 cmsimde 目錄導入, 如此至少可以免除 ssh 與 https 網路協定的雙重設定, 以降低配置上的複雜度.

stud.cycu.org

2022 Fall 由於 Heroku 取消免費帳號的使用, 且 Replit 的免費帳號資源過少, 導致在廣域網路上必須自行配置所有學員的動態網站伺服器, 也就是 stud.cycu.org 主機的啟用與配置.

為了讓兩百多名學員能在同一台伺服器上執行動態網站, 各學員必須遠端登入伺服器使用 shell script 指令, 並以 Filezilla 的 sftp 降低學員對 Linux 指令不熟悉所造成的檔案編輯與配置問題. 其中用來查核個人是否啟動 python3 server.py 的 ps 指令為 ps axo pid,comm,user | grep "server.py" 只是 Quota 與 port 使用權限的配置仍需進一步思考最佳管理模式.

TCExam

2022 Fall 重啟線上考試後, 重新啟用 TCExam, 目前正朝讓各學員自行出複選題目建立題庫的可行性.