diff --git a/README.md b/README.md index 74f6a63..2805aa3 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ - [🧭 雙軌課程架構](courses/) - 日間部/進修部入口與共用原則 - [🚀 快速啟動指南](docs/QUICKSTART.md) - 各專案快速啟動 - [📖 學習路徑規劃](docs/LEARNING_PATH.md) - 課程學習建議 +- [🗓️ HackMD 每週教學講義](docs/HACKMD_WEEKLY_GUIDE.md) - 18 週完整教案與 GitHub 教材連結 - [📝 更新日誌](docs/CHANGELOG.md) - 專案更新記錄 - [範例程式碼下載](#範例程式碼下載) - [環境設定](#-快速開始-推薦使用-uv) diff --git a/courses/evening/README.md b/courses/evening/README.md index 5634d22..84a938e 100644 --- a/courses/evening/README.md +++ b/courses/evening/README.md @@ -5,8 +5,11 @@ 承接學生可能具備但程度不一的 Python 經驗,以「程式如何和網路服務合作」為主線,從 HTTP/JSON、開放資料、API 與 Web service,走到可展示的雲端應用及分組專題。 - [前一學年課程主頁(HackMD 書本模式)](https://hackmd.io/@wiimax/Hy4cF6OOgx) +- [HackMD 每週教學講義母稿(18 週完整教案)](../../docs/HACKMD_WEEKLY_GUIDE.md) - [repository 快速開始](../../docs/QUICKSTART.md) +> 每週的目標、課前任務、150 分鐘課堂流程、分層挑戰、作業與 exit ticket 已整理在教學講義母稿。HackMD 保留公告與課堂互動,程式碼及作業規格以 repository 版本為準。 + ## 建議單元順序 | 單元 | 核心概念 | Repository 實作 | 檢核成果 | diff --git a/docs/HACKMD_WEEKLY_GUIDE.md b/docs/HACKMD_WEEKLY_GUIDE.md new file mode 100644 index 0000000..8dddee8 --- /dev/null +++ b/docs/HACKMD_WEEKLY_GUIDE.md @@ -0,0 +1,341 @@ +# 多媒體系統:HackMD 每週教學講義(Python、API 與雲端應用) + +> 本頁是 [HackMD 課程首頁](https://hackmd.io/@wiimax/SJemnYy8fg) 的**可版本控制母稿**,適用於進修部一年級。教師可將本頁貼入 HackMD,保留當週公告與互動區;程式、Notebook 與作業規格則以 GitHub 為準,避免兩邊各自修改。 + +## 這份講義怎麼用 + +### 學生每週固定流程 + +1. **課前 20–30 分鐘**:讀「先備任務」,完成環境或概念檢查。 +2. **課中 150 分鐘**:概念短講 → 教師示範 → 引導實作 → 挑戰題。 +3. **下課前 10 分鐘**:提交 exit ticket;寫下今天會做的事與仍不懂的事。 +4. **課後 60–90 分鐘**:完成最小作業,將程式、結果與反思放在同一份 Notebook 或 repository。 + +遇到連結、套件或 API 失效時,先到 [Issues](https://github.com/willismax/MediaSystem-Python-Course/issues) 搜尋;回報時附上作業系統、Python 版本、完整錯誤訊息與重現步驟,**不要附 API key**。 + +### 教師維護分工 + +| 內容 | 唯一來源 | HackMD 怎麼呈現 | +|---|---|---| +| 臨時公告、上課日期、分組、課堂問答 | HackMD | 直接更新 | +| 教學流程、評量與每週索引 | 本文件 | 學期初同步,異動回寫 GitHub | +| Notebook、範例程式、作業模板 | GitHub 各模組 | 使用固定連結,不複製程式碼 | +| 當學期穩定版 | Git tag/Release | HackMD 註明 tag 與檢查日期 | + +同步後請在 HackMD 頂端註明:`教材版本:|最後檢查:YYYY-MM-DD`。相對連結適合在 GitHub 閱讀;貼到 HackMD 時,請改用 `https://github.com/willismax/MediaSystem-Python-Course/blob//...`。 + +## 課程成果與評量 + +完成課程後,學生應能: + +- 讀懂 Python 程式與錯誤訊息,將問題拆成函式並處理例外。 +- 說明 URL、HTTP request/response、JSON、API 與 Web service 的關係。 +- 合法取得資料,清理後以互動介面或 Web API 呈現。 +- 使用環境變數保護密鑰,為核心邏輯撰寫測試並留下執行文件。 +- 以 GitHub repository 交付可重現專題,說明資料來源、限制、分工與改善方向。 + +| 評量項目 | 比例 | 可觀察證據 | +|---|---:|---| +| 每週實作與 exit ticket | 25% | 可執行 Notebook、截圖/輸出、短反思 | +| 階段檢核 | 20% | Python、HTTP/API、Flask 三次小檢核 | +| 期中資料應用 | 20% | API 資料取得、清理、視覺化及來源說明 | +| 期末分組專題 | 30% | 程式、README、測試、展示、個人貢獻 | +| 課堂參與與同儕回饋 | 5% | code review、除錯紀錄、展示回饋 | + +## 開課前:環境與診斷 + +### 必備工具 + +- Git、GitHub 帳號,以及可執行 Python 3.10 以上的環境。 +- 本機建議安裝 `uv`;無法安裝者可使用 Google Colab。 +- 先完成 [快速開始](QUICKSTART.md),再 clone 教材: + +```bash +git clone https://github.com/willismax/MediaSystem-Python-Course.git +cd MediaSystem-Python-Course +git status +``` + +### 10 分鐘程度診斷(不計分) + +請不用 AI,寫出一段程式:接收一組分數、排除非數字資料、計算平均並輸出及格人數。依結果分流: + +- **A 基礎補強**:不熟悉 list、迴圈或函式,先做 `01.Intro-Python` 基礎 Notebook。 +- **B 標準路徑**:可完成但缺少錯誤處理,依每週必做活動前進。 +- **C 延伸挑戰**:能拆函式並測試,優先做挑戰題、協助 code review,不代替同學完成作業。 + +--- + +## 第 1 週|課程導覽、開發環境與可重現成果 + +**本週問題:** 為什麼「在我的電腦可以跑」還不算完成? + +- **學習目標**:辨識 terminal、Python、Notebook 與 repository;能 clone、啟動 Notebook、執行 cell 並解讀第一層錯誤。 +- **課前任務**:登入 GitHub;閱讀 [repository 首頁](../README.md) 與 [快速開始](QUICKSTART.md)。 +- **課堂節奏**:20 分課程地圖與評量;30 分環境示範;50 分 clone/啟動;35 分修改並重跑 Notebook;15 分 pair debugging。 +- **引導實作**:從 [`01.Intro-Python`](../01.Intro-Python/README.md) 選一份入門 Notebook,新增 Markdown 自我介紹、執行三個 cell,故意製造一次 `NameError` 後記錄修正方式。 +- **檢核點**:能指出目前路徑、Python 版本、輸入與輸出;錯誤截圖必須包含訊息而非只有「不能跑」。 +- **課後產出**:一頁環境紀錄(裝置、OS、Python 版本、啟動指令、成功畫面、遇到的問題)。 +- **Exit ticket**:`git clone` 與下載 ZIP 有何差異? + +## 第 2 週|Python 資料型態、容器與媒體 metadata + +**本週問題:** 程式如何表示一筆真實世界資料? + +- **學習目標**:使用字串、數值、布林、list、dict;以索引與 key 取得值;分辨型態轉換和資料遺失。 +- **課前任務**:複習變數及 `type()`;準備一張自行拍攝或可合法使用的圖片。 +- **課堂節奏**:25 分型態短講;35 分容器 live coding;55 分 metadata 實作;25 分錯誤分析;10 分互評。 +- **引導實作**:完成 [`media/image`](../media/image/README.md) 的基礎活動,把檔名、寬、高、模式與格式整理成 dict,再產生一句人能閱讀的摘要。 +- **常見迷思**:`"1920"` 不是 `1920`;解析度不是檔案大小;dict key 不存在時會出現 `KeyError`。 +- **分層挑戰**:A 完成單張;B 比較三種格式;C 寫函式批次整理並對缺值提供預設值。 +- **課後產出**:媒體規格比較表與 150 字觀察。 +- **Exit ticket**:何時應使用 list,何時應使用 dict? + +## 第 3 週|條件、迴圈、函式與除錯 + +**本週問題:** 如何讓重複操作變成可測試、可重用的步驟? + +- **學習目標**:用條件處理不同輸入;用迴圈處理集合;以參數、回傳值拆分函式;讀 traceback 最後一行。 +- **課前任務**:完成第 2 週資料三筆,標記其中一筆為無效輸入。 +- **課堂節奏**:30 分控制流程;30 分函式;30 分 traceback 導讀;50 分重構;10 分同儕檢查。 +- **引導實作**:將「檢查寬高 → 計算像素數 → 分類尺寸 → 產生摘要」拆成至少兩個函式;測試正常值、邊界值、錯誤值。 +- **檢核點**:函式不依賴未說明的全域變數;錯誤訊息對使用者有意義;不使用空白的 `except`。 +- **課後產出**:函式版程式、三組輸入輸出、一次除錯紀錄。 +- **Exit ticket**:`print()` 與 `return` 的用途有何不同? + +## 第 4 週|網路、URL 與 HTTP request/response + +**本週問題:** 瀏覽器輸入網址後,資料如何回來? + +- **學習目標**:拆解 URL;區分 client/server;說明 method、status code、header、body;辨認 2xx、4xx、5xx。 +- **課前任務**:閱讀 [`03.Request`](../03.Request/README.md);從瀏覽器開發者工具找一筆 request。 +- **課堂節奏**:35 分概念與圖解;25 分開發者工具;45 分 Requests 示範;30 分狀態碼實驗;15 分概念圖。 +- **引導實作**:用 `requests.get()` 取得公開端點,印出 URL、status、content-type、前 200 字內容,加入 timeout 與失敗分支。 +- **安全提醒**:遵守網站條款與 robots 規範;不繞過登入、付費牆或存取控制;設定合理頻率。 +- **課後產出**:一張 request/response 流程圖,加上成功與失敗各一次的觀察。 +- **Exit ticket**:收到 404 是否代表「沒有網路」?為什麼? + +## 第 5 週|JSON、API 參數與開放資料 + +**本週問題:** API 回傳的巢狀資料,如何變成需要的欄位? + +- **學習目標**:讀取 JSON object/array;使用 query parameters;查 API 文件;記錄資料來源與更新時間。 +- **課前任務**:選一個免 key 的政府開放資料集,寫下端點、欄位與授權。 +- **課堂節奏**:25 分 JSON 對照 Python;30 分文件閱讀;60 分 [`擷取API資料.ipynb`](../03.Request/擷取API資料.ipynb);25 分欄位字典;10 分互查。 +- **引導實作**:提出一個可由資料回答的問題,只保留必要欄位,輸出前五筆並解釋每欄單位。 +- **常見迷思**:API 有回應不等於資料正確;空陣列可能是合法結果;畫面顯示日期不一定是資料更新日期。 +- **課後產出**:原始資料樣本、欄位字典、來源/授權、研究問題。 +- **Exit ticket**:JSON 的 `{}` 與 `[]` 分別對應哪種 Python 容器? + +## 第 6 週|可靠的 API 程式:分頁、timeout 與例外 + +**本週問題:** 網路慢、資料缺漏或服務拒絕時,程式應怎麼做? + +- **學習目標**:處理 timeout、非 2xx、JSON 解析失敗與空資料;理解分頁、速率限制、重試及快取。 +- **課前任務**:為第 5 週程式列出至少四種失敗情境。 +- **課堂節奏**:30 分 failure taxonomy;35 分防禦式程式;55 分故障注入;20 分 pair review;10 分整理。 +- **引導實作**:替 API 函式加入 `timeout`、`raise_for_status()`、明確例外訊息及本機範例資料 fallback;不可無限重試。 +- **分層挑戰**:A 顯示友善錯誤;B 完成分頁;C 加入有限次 exponential backoff 並記錄 log。 +- **課後產出**:成功、無資料、錯誤狀態、timeout 四種測試紀錄。 +- **Exit ticket**:為什麼重試不一定能修好 401? + +## 第 7 週|資料清理、Pandas 與視覺化敘事 + +**本週問題:** 如何避免用一張「好看的圖」說出錯誤結論? + +- **學習目標**:建立 DataFrame;處理缺值、重複、型態與單位;選擇合適圖表;寫出有限度的結論。 +- **課前任務**:閱讀 [`01.Intro-Python`](../01.Intro-Python/README.md) 中 Pandas 與視覺化教材。 +- **課堂節奏**:30 分整潔資料;35 分清理示範;55 分個人資料集實作;20 分圖表診所;10 分回饋。 +- **引導實作**:保留清理前後筆數,產生一張有標題、單位、資料來源的圖,並用三句話說明發現、證據、限制。 +- **檢核點**:座標軸不誤導;類別與連續資料選圖合理;不把相關說成因果。 +- **課後產出**:期中作品草稿:研究問題、清理步驟、圖表、初步結論與限制。 +- **Exit ticket**:刪除所有缺值可能造成什麼偏差? + +## 第 8 週|期中資料應用發表與同儕審查 + +**本週問題:** 別人能否依我的文件重現相同結果? + +- **學習目標**:以短講清楚呈現問題、資料、方法、發現與限制;依 rubric 提供具體回饋。 +- **課前任務**:清除 Notebook 多餘輸出,從頭 Run All;確認沒有 token、個資或不明授權素材。 +- **課堂節奏**:20 分示範與規準;90 分每組 5 分鐘展示+3 分鐘問答;25 分交叉重現;15 分修正計畫。 +- **繳交內容**:Notebook、必要的小型資料樣本或下載方法、README、資料授權、三種以上測試輸入。 +- **同儕回饋句型**:「我能重現……」「我在……卡住」「證據支持……」「若加入……會更清楚」。 +- **課後產出**:依兩項同儕意見修訂,附修改前後摘要。 +- **Exit ticket**:你採納與不採納哪一項建議?理由是什麼? + +## 第 9 週|Gradio:把資料流程做成互動原型 + +**本週問題:** 如何讓不會寫程式的人也能操作成果? + +- **學習目標**:分離核心函式與 UI;選擇輸入/輸出元件;驗證空值、範圍與格式;理解分享連結限制。 +- **課前任務**:閱讀 [`02.Gradio`](../02.Gradio/README.md),把期中核心流程整理成單一函式。 +- **課堂節奏**:20 分互動流程;35 分元件示範;60 分原型;25 分可用性測試;10 分修正。 +- **引導實作**:建立最少一個輸入、一個輸出與一段使用說明;錯誤不能只顯示 traceback。 +- **分層挑戰**:A 包裝文字函式;B 串接第 6 週 API;C 加入範例、狀態提示與快取。 +- **課後產出**:可執行 Gradio 程式、三位同學的任務測試、改善清單。 +- **Exit ticket**:為什麼 UI 函式不應塞入所有資料處理細節? + +## 第 10 週|Flask 與 Web 應用基本結構 + +**本週問題:** Gradio 原型與一般 Web service 有什麼不同? + +- **學習目標**:理解 application、route、request、response、template;啟動 Flask 並新增頁面。 +- **課前任務**:閱讀 [`05.Flask`](../05.Flask/README.md);完成依賴安裝。 +- **課堂節奏**:30 分 Web framework;35 分 `flask01` 導讀;55 分新增 route;20 分兩人互測;10 分回顧。 +- **引導實作**:啟動 `flask01`,加入 `/about` 與動態參數頁;以瀏覽器和 `curl` 各測一次。 +- **檢核點**:不要使用 production 模式公開 debug server;route 名稱與回應內容清楚;啟動指令寫入 README。 +- **課後產出**:小型網站、路由表、成功與 404 測試。 +- **Exit ticket**:route、URL 與 Python 函式如何連在一起? + +## 第 11 週|REST API、CRUD 與輸入驗證 + +**本週問題:** 怎樣的 API 讓使用者能預測它的行為? + +- **學習目標**:用 resource 思考 endpoint;配對 GET/POST/PATCH/DELETE;使用狀態碼;驗證 request body。 +- **課前任務**:閱讀 [`flask06-api`](../05.Flask/flask06-api/) 程式,畫出現有 endpoint。 +- **課堂節奏**:30 分 REST/CRUD;30 分 API 導讀;60 分新增功能;20 分交換測試;10 分文件。 +- **引導實作**:完成一個 resource 的 list、create、detail;對缺欄位、錯型態、找不到資料回傳一致 JSON 與適當狀態碼。 +- **安全提醒**:不要信任前端輸入;回應不得洩漏 stack trace、secret 或其他使用者資料。 +- **課後產出**:endpoint 表(method、path、輸入、成功/失敗回應)與 curl 測試。 +- **Exit ticket**:新增成功為何通常不是回傳 200 就結束? + +## 第 12 週|SQLite、schema 與資料持久化 + +**本週問題:** 程式關閉後,資料如何仍保持一致? + +- **學習目標**:理解 table、row、column、primary key;執行參數化 CRUD;設計最小 schema。 +- **課前任務**:閱讀 [`10.sql`](../10.sql/README.md),列出專題可能保存的三種資料。 +- **課堂節奏**:30 分關聯資料概念;30 分 SQLite 示範;60 分 CRUD;20 分 schema review;10 分備份討論。 +- **引導實作**:完成 [`SQLite資料庫CRUD.ipynb`](../10.sql/SQLite資料庫CRUD.ipynb) 核心活動,再把第 11 週記憶體資料替換為 SQLite。 +- **檢核點**:使用參數化 query,不以字串拼接使用者輸入;測試重複 key 與不存在資料。 +- **課後產出**:schema 圖、建表語句、CRUD 範例與資料庫重建方式。 +- **Exit ticket**:primary key 解決了什麼問題? + +## 第 13 週|pytest、自動測試與可維護程式 + +**本週問題:** 修改功能時,怎麼知道沒有弄壞舊功能? + +- **學習目標**:使用 arrange-act-assert;撰寫正常、邊界、錯誤案例;區分 unit 與 API test。 +- **課前任務**:閱讀 [`07.Pytest-DEMO`](../07.Pytest-DEMO/README.md),執行既有測試。 +- **課堂節奏**:25 分測試觀念;30 分 demo 導讀;60 分專題測試;25 分刻意製造 regression;10 分回顧。 +- **引導實作**:為第 11 或 12 週功能寫至少三個測試;先看測試失敗,再修到通過。 +- **常見迷思**:測試通過不代表沒有 bug;coverage 高不等於測試有意義;不要依賴測試執行順序。 +- **課後產出**:測試檔、執行指令、失敗到成功的紀錄。 +- **Exit ticket**:哪一個邊界案例最可能被你漏掉? + +## 第 14 週|第三方 API、密鑰、隱私與 AI + +**本週問題:** 能呼叫外部服務,是否就適合把資料傳出去? + +- **學習目標**:以環境變數管理 secret;判斷資料傳送範圍、費用與服務限制;提供無 key fallback。 +- **課前任務**:閱讀 [`11.AI`](../11.AI/README.md) 或 [`06.Line-bot-fly-flask`](../06.Line-bot-fly-flask/README.md),不必先申請付費服務。 +- **課堂節奏**:30 分 threat model;30 分環境變數;45 分受控串接;30 分隱私情境;15 分揭露聲明。 +- **引導實作**:使用 `.env`/系統環境變數(不 commit)讀取測試 key;在 README 提供 `.example` 欄位與本機替代方案。 +- **安全檢核**:搜尋程式、Notebook 輸出與 Git history;若曾洩漏 key,立即撤銷並重發,刪除檔案並不足夠。 +- **課後產出**:資料流圖、風險表、AI/第三方服務揭露聲明。 +- **Exit ticket**:為什麼把 key 寫在前端或 Notebook 隱藏 cell 仍不安全? + +## 第 15 週|部署、環境設定與可觀測性 + +**本週問題:** 本機程式搬到雲端後,哪些假設會失效? + +- **學習目標**:區分 code/config/data;理解 port、dependency、log、health check;留下可重現部署紀錄。 +- **課前任務**:整理啟動指令、依賴及環境變數;選擇免費平台或本機部署展示。 +- **課堂節奏**:30 分部署模型;30 分設定檢查;55 分部署/本機等價演練;25 分 log 除錯;10 分復盤。 +- **引導實作**:讓應用從環境讀取 port/secret;加入 `/health`;以新環境依 README 重建。平台政策變動時不以付費部署作為評分門檻。 +- **檢核點**:log 不含 token/個資;錯誤能定位但不向外洩漏內部細節;服務無法公開時提供錄影與重現步驟。 +- **課後產出**:部署 URL 或本機重現紀錄、health check、一次 log 除錯案例。 +- **Exit ticket**:health check 正常能保證所有功能正常嗎? + +## 第 16 週|期末專題 Sprint:需求、架構與最小可行成果 + +**本週問題:** 在有限兩週內,最小但完整的成果是什麼? + +- **學習目標**:定義使用者與問題;縮小範圍;分離 must/should/could;建立 issue 與分工。 +- **課前任務**:每組準備一頁提案:使用者、痛點、資料/API、輸入輸出、最大風險。 +- **課堂節奏**:25 分優劣案例;35 分提案 pitch;35 分架構與資料流;40 分第一個 vertical slice;15 分站會。 +- **最低規格**:一條端到端可操作流程、一個外部資料或媒體來源、輸入驗證、至少三個測試、README、來源/授權與限制。 +- **不接受**:只有投影片、完全照抄 tutorial、以付費功能掩蓋無法重現、commit 中含 secret、無法說明組員貢獻。 +- **課後產出**:proposal、看板、架構圖、第一個可執行版本。 +- **Exit ticket**:本週刪掉哪項功能,讓核心價值更可能完成? + +## 第 17 週|整合測試、可用性與發布前檢查 + +**本週問題:** 真實使用者會用什麼方式弄壞我們的作品? + +- **學習目標**:設計端到端情境;進行可用性測試;檢查授權、個資、secret、錯誤與文件。 +- **課前任務**:功能凍結;完成 [`media/ethics`](../media/ethics/README.md) 發布前檢查。 +- **課堂節奏**:20 分測試說明;50 分跨組黑箱測試;35 分修復 blocker;30 分 README 重現;15 分展示彩排。 +- **測試情境**:首次使用者、空輸入、超長或錯型態輸入、API 離線、無資料、重複操作、全新環境。 +- **Definition of Done**:核心流程可用;測試通過;安裝與啟動清楚;授權與限制揭露;demo 失敗時有備案。 +- **課後產出**:測試報告、修正清單、release candidate、3–5 分鐘展示腳本。 +- **Exit ticket**:目前最大殘餘風險及因應方式是什麼? + +## 第 18 週|期末成果發表、個人反思與課程收束 + +**本週問題:** 如何用證據說明作品解決了問題,而非只列出技術? + +- **學習目標**:展示問題到成果的完整故事;回答技術取捨;提供尊重且具體的回饋;辨識下一步學習方向。 +- **課前任務**:建立 release/tag;以全新環境最後重現;備妥離線影片或樣本資料。 +- **課堂節奏**:15 分規則;105 分每組 7 分鐘展示+5 分鐘問答;20 分同儕投票與回饋;10 分個人反思。 +- **展示順序**:使用者問題 → 操作成果 → 資料流/架構 → 測試證據 → 限制與倫理 → 下一步;不要逐頁朗讀套件介紹。 +- **最終繳交**:release 連結、README、程式與測試、資料/素材授權、展示影片(若有)、分工紀錄、每人 300 字反思。 +- **Exit ticket**:如果再多一週,你會優先改善哪個經測試證實的問題? + +--- + +## 期末專題評分規準 + +| 面向 | 優良 | 達標 | 待改進 | 比例 | +|---|---|---|---|---:| +| 問題與使用者 | 需求有證據,範圍清楚且成果回應需求 | 能說明目標使用者與基本情境 | 只有技術名稱,無具體使用情境 | 20% | +| 技術整合 | 資料流清楚,合理整合 API/資料/介面 | 核心流程可執行,能解釋主要程式 | 大量照抄或無法解釋、核心不通 | 25% | +| 可靠性與測試 | 正常、邊界、失敗情境皆有證據與處理 | 有基本驗證與三個有效測試 | 只展示成功路徑或無測試 | 25% | +| 文件、安全與授權 | 新環境可重現,secret/隱私/來源處理完整 | README 可啟動,未洩漏 secret,列出來源 | 文件缺漏、來源不明或含敏感資料 | 15% | +| 展示、分工與反思 | 展示聚焦取捨,各成員貢獻可追溯 | 能完成展示並說明分工 | 只有少數成員理解或無貢獻紀錄 | 15% | + +## 每週作業共用繳交模板 + +```markdown +# 第 N 週:題目 + +## 我想回答的問題 + +## 環境與啟動方式 +- Python 版本: +- 安裝/啟動指令: + +## 實作結果 +- 正常案例: +- 邊界或失敗案例: + +## 資料/素材來源與授權 + +## 我遇到的問題與解法 + +## 本週反思 +- 我現在能獨立完成: +- 我仍需要協助: +- 我下一步會嘗試: +``` + +## 助教快速檢核表 + +- [ ] 從頭執行可完成,或已說明外部服務限制與替代方案。 +- [ ] 有自己的問題、輸入與解釋,不只是保留範例輸出。 +- [ ] 正常與至少一個失敗/邊界案例可觀察。 +- [ ] 啟動方式、依賴、資料來源與授權清楚。 +- [ ] Notebook、commit、截圖及 log 沒有 API key、token 或個資。 +- [ ] 使用生成式 AI 時,已揭露用途並能口頭解釋及修改產出。 + +## 延伸與分流索引 + +完成核心 18 週後,可依專題需求選擇: + +- **瀏覽器自動化**:[`04.Playwright`](../04.Playwright/README.md)(優先)或 [`04.Selenium`](../04.Selenium/README.md),只擷取允許存取的內容。 +- **電腦視覺**:[`08.OpenCV-Mediapipe-DEMO`](../08.OpenCV-Mediapipe-DEMO/readme.md),先確認攝影機、裝置效能與肖像同意。 +- **媒體概念**:[`media/image`](../media/image/README.md)、[`media/audio`](../media/audio/README.md)、[`media/video`](../media/video/README.md)。 +- **實用作品**:[`09.Apps`](../09.Apps/README.md);將範例改成有明確使用者與測試的作品。 +- **AI 應用**:[`11.AI`](../11.AI/README.md);不得把個資或未授權內容直接傳給第三方服務。 + +日間部「媒體素養與實作」不應直接套用本週次表,請改走 [日間部課程地圖](../courses/day/README.md);兩班共用原則見 [雙軌課程架構](../courses/README.md)。 diff --git a/docs/README.md b/docs/README.md index bbad348..f00a35a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,7 @@ | [🧭 雙軌課程架構](../courses/README.md) | 多媒體系統日間部/進修部入口、共用教材與維護策略 | 教師、助教、兩班學生 | | [☀️ 日間部課程地圖](../courses/day/README.md) | 影像、音訊、視訊與互動媒體路徑 | 日間部四技一年級 | | [🌙 進修部課程地圖](../courses/evening/README.md) | Python、API 與雲端應用路徑 | 進修部一年級 | +| [🗓️ HackMD 每週教學講義](HACKMD_WEEKLY_GUIDE.md) | 18 週課前、課中、課後活動、檢核與專題 rubric | 教師、助教、進修部學生 | | [🚀 快速開始](QUICKSTART.md) | 各專案快速啟動指令 | 所有使用者 | | [📚 學習路徑](LEARNING_PATH.md) | 完整課程規劃與建議 | 初學者、課程學習者 | | [📝 更新日誌](CHANGELOG.md) | 專案更新記錄 | 開發者、維護者 |