Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions course-115/HACKMD_WORKFLOW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# HackMD 與 GitHub 教材工作流程

## 決策

目前不導入 HackMD API。

先使用 HackMD 內建的 GitHub Sync,原因如下:

- 只有兩個班級入口與一組共用教材,尚未達到需要批次自動化的規模。
- 教師平常以 HackMD 編寫授課內容,HackMD 應維持正文來源。
- GitHub 主要保存程式、Notebook、素材與 Markdown 版本。
- API 會增加 token 保管、權限、更新衝突與錯誤覆寫風險。

## 單一來源

| 內容 | 主要來源 | 另一端用途 |
|---|---|---|
| 課堂講義與每週筆記 | HackMD | GitHub 保存版本 |
| Python 程式與 Notebook | GitHub | HackMD 放連結與操作說明 |
| 班級公告與期限 | 各班 HackMD 首頁 | 不需同步 |
| 固定圖片與下載檔 | GitHub `assets` | HackMD 引用 |
| 學生課堂筆記 | 學生自己的 HackMD | 只繳連結 |

同一份 Markdown 在一段編輯期間只能有一個主要來源。不要在 HackMD 與 GitHub 同時修改後再互相覆蓋。

## 建議目錄

```text
course-115/
├─ README.md
├─ common-syllabus.md
├─ notes/
│ ├─ week-01-hackmd-markdown.md
│ ├─ week-02-python-ai-workflow.md
│ └─ ...
├─ labs/
│ ├─ common/
│ ├─ day/
│ └─ night/
├─ assets/
└─ templates/
```

目前第一週教材位於 `course-115/week-01-hackmd-markdown.md`。與正式 repo 整合時,可移至 `notes/`,並同步修正連結。

## 初次連結

每份共同教材各自連結一個 GitHub Markdown 檔案:

1. 在 HackMD 開啟共同教材。
2. 開啟「Versions and GitHub Sync」。
3. 安裝並授權 HackMD GitHub App,只開放需要的 repo。
4. 選擇 repo、分支與對應檔案。
5. 確認換行規則。
6. 建立命名版本,例如 `W01 初版`。
7. 將命名版本推送至 GitHub。

建議對應:

```text
HackMD:W01|HackMD、Markdown 與第一份媒體筆記
GitHub:course-115/notes/week-01-hackmd-markdown.md
```

## 每週發布流程

### 課前

1. 在 HackMD 修改共同教材。
2. 用閱讀模式完整檢查一次。
3. 測試所有連結、圖片、程式碼與分享權限。
4. 儲存命名版本,例如 `W03 上課版`。
5. 從 HackMD 推送到 GitHub。
6. 在日間部與進修部首頁貼上同一份共同教材連結。
7. 各班首頁補上不同的日期、作業與分流活動。

### 課後

1. 修正上課時發現的錯誤。
2. 儲存命名版本,例如 `W03 課後修正版`。
3. 再推送至 GitHub。
4. 程式或 Notebook 若有修正,直接在 GitHub 維護,再更新 HackMD 連結。

## 衝突處理

如果 GitHub 檔案已被修改:

1. 暫停從 HackMD 推送。
2. 先比較 HackMD 與 GitHub 版本。
3. 決定哪一端是這次變更的正本。
4. 將差異合併至正本。
5. 儲存 HackMD 命名版本後再同步。

不要直接選擇整份覆蓋,尤其是學生或協作者已在 GitHub 提交修改時。

## 何時才需要 HackMD API?

符合以下任一情況,再導入 API:

- 要一次建立完整 18 週筆記。
- 要每天或每週自動備份所有課程筆記。
- 要批次更新兩班首頁的週次與連結。
- 要從其他系統自動發布公告或產生筆記。
- 要建立課程儀表板,讀取多份筆記的標題、標籤與更新時間。

不建議用 API 做無人監督的雙向同步。

## 未來導入 API 的最低安全規範

1. Token 只能放在環境變數或祕密管理服務,不得寫入程式、Notebook 或 HackMD。
2. 自動化程式預設只讀;確認備份與差異後才開放更新。
3. 更新前先下載原始內容並保留時間戳記版本。
4. 維護 `noteId` 與 repo 檔案的明確對照表。
5. 每次更新只指定一個方向,不做自動雙向合併。
6. API 回傳失敗時停止,不以空內容覆蓋筆記。
7. 定期撤銷不再使用的 token。

建議的環境變數名稱:

```text
HACKMD_API_TOKEN
```

## 圖片與附件

- 課堂臨時示範可使用 HackMD 上傳。
- 會長期使用的教學圖片放在 GitHub `assets`,並使用清楚檔名。
- 學生上傳圖片前需確認本人有權公開。
- 圖片需撰寫替代文字。
- 不把含個資的原始照片放進公開 repo。
80 changes: 80 additions & 0 deletions course-115/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# 多媒體系統 115 學年度課程中心

這個資料夾提供日間部與進修部共用的課程主幹。兩班使用同一套核心教材,再依學生背景調整活動、作業支架與專題自由度。

## 課程入口

- 日間部:[Thu 多媒體系統115(日)資工一](https://hackmd.io/@wiimax/SJemnYy8fg)
- 進修部:[Sat 多媒體系統115(夜)資工一](https://hackmd.io/@wiimax/ryNWHeqSzg)
- 程式與範例:[MediaSystem-Python-Course](https://github.com/willismax/MediaSystem-Python-Course)
- Azure 延伸教材:[azure-multimedia](https://github.com/willismax/books/tree/main/azure-multimedia)

## 課程定位

> 用 AI 協作開發多媒體系統,並能說明媒體資料如何表示、處理、傳輸與驗證。

學生完成課程後,應能:

1. 說明影像、聲音與影片的基本表示方式,以及格式、壓縮與品質之間的關係。
2. 使用 Python 與現成函式庫處理至少兩種媒體資料。
3. 將媒體處理功能包裝成可操作的應用程式。
4. 使用生成式 AI 協助規劃、實作與除錯,並留下驗證過程。
5. 妥善處理 API 金鑰、個人資料、素材授權與 AI 生成內容。
6. 展示作品,說明關鍵技術選擇、限制與改善方向。

## 教材架構

- `common-syllabus.md`:18 週共同課程地圖、日夜間分流與評量方式。
- `week-01-hackmd-markdown.md`:第一週可直接貼入 HackMD 的學生版教材。
- `hackmd-homepage-snippets.md`:日間部與進修部首頁可直接貼上的課程區塊。
- `HACKMD_WORKFLOW.md`:HackMD 與 GitHub 的分工、同步流程及 API 採用條件。
- `templates/weekly-note.md`:後續週次的共同教材模板。
- `templates/ai-usage.md`:學生專題的 AI 使用紀錄模板。

## 日夜間分流原則

共用內容約占 70%,班別調整約占 30%。不是準備兩套投影片,而是在同一份教材中標記三種區塊:

- `共同必學`:兩班都完成。
- `日間引導`:增加概念比較、逐步操作與固定題型。
- `進修挑戰`:增加選題彈性、整合需求與專題工作時間。

日間部不降低專業內容,而是縮小每次實作範圍並增加檢核點。進修部仍需完成共同基礎,但可把更多課堂時間用於自選專題。

## 內容取捨

### 核心內容

- Python/Colab 與 Git 基礎
- Markdown 與 HackMD
- Pillow、NumPy、OpenCV
- 聲音取樣、音訊處理與語音辨識
- 影片影格、容器、編碼、FFmpeg 與攝影機輸入
- MediaPipe 或其他即時多媒體應用
- Gradio/Flask
- 多模態 AI API
- 測試、金鑰管理、著作權、個資與無障礙

### 延伸內容

- Requests 與外部資料 API
- SQLite
- LINE Bot
- pytest 的完整測試流程
- Azure、GCP 或 Zeabur 部署

### 不列入共同主幹

- Selenium
- Playwright
- 大型雲端平台的完整服務導覽

這些內容仍可保留在原 repo,供專題需要時使用,但不占共同課程週次。

## 教材維護原則

1. HackMD 是授課正文與課堂互動入口。
2. GitHub 保存程式、Notebook、固定素材與 Markdown 版本。
3. 每份共用 HackMD 筆記對應 repo 中的一個 Markdown 檔案。
4. 兩班首頁只放班級公告、日期、作業期限與共同教材連結。
5. 不在 HackMD 與 GitHub 同時修改同一份 Markdown;依 `HACKMD_WORKFLOW.md` 操作。
88 changes: 88 additions & 0 deletions course-115/common-syllabus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# 多媒體系統 115 學年度共同課程地圖

## 課程設計比例

| 面向 | 日間部資工一 | 進修部資工一 |
|---|---:|---:|
| 多媒體概念 | 35% | 20% |
| 引導式實作 | 35% | 20% |
| AI 協作與驗證 | 15% | 20% |
| 專題整合 | 15% | 40% |

比例代表課堂投入重點,不直接等同成績配分。

## 18 週進度

| 週次 | 共同主題 | 日間部安排 | 進修部安排 | 主要產出 |
|---:|---|---|---|---|
| 1 | 課程導覽、HackMD、Markdown、媒體系統初探 | 完成指定語法與媒體觀察表 | 自選主題完成個人媒體名片 | 個人 HackMD 筆記 |
| 2 | Colab、Python、檔案與 AI 協作規範 | 逐步練習變數、函式、檔案路徑 | 快速複習後進行小型改作 | 第一個 Colab |
| 3 | 數位影像:像素、解析度、色彩通道、格式 | 參數比較與概念題 | 自選照片做格式實驗 | 影像觀察紀錄 |
| 4 | Pillow、NumPy 影像處理 | 裁切、縮放、旋轉、濾鏡 | 批次處理或自選效果 | 影像處理程式 |
| 5 | OpenCV 與電腦視覺 | 固定輸入與可重現結果 | 自選偵測或辨識任務 | 視覺小作品 |
| 6 | 數位聲音:取樣率、位元深度、波形、格式 | 比較參數與檔案大小 | 自選錄音素材分析 | 聲音觀察紀錄 |
| 7 | 音訊處理與語音辨識 | 剪輯、音量、轉檔、逐字稿 | 字幕、摘要或會議紀錄工具 | 音訊小作品 |
| 8 | 影像/聲音迷你專題 | 教師提供題目與檢核表 | 自訂需求與完成條件 | 期中專題草稿 |
| 9 | 期中展示與個別說明 | 概念說明與操作驗證 | 設計決策與問題回顧 | 期中作品 |
| 10 | 數位影片:影格率、解析度、容器與編碼 | 參數比較 | 自選影片案例分析 | 影片觀察紀錄 |
| 11 | FFmpeg 與 OpenCV 影片處理 | 指定轉檔、擷取與合成 | 建立批次或半自動流程 | 影片處理程式 |
| 12 | 攝影機、MediaPipe 與即時互動 | 指定手勢或姿態範例 | 自訂互動行為 | 即時互動作品 |
| 13 | 多模態 AI:文字、影像、聲音與影片 | 使用固定資料驗證輸出 | 比較服務或設計工作流程 | AI 驗證紀錄 |
| 14 | Gradio/Flask、API 與金鑰管理 | 完成指定介面 | 整合自選專題功能 | 可操作原型 |
| 15 | 雲端概念、部署、記錄、費用與清除 | 觀摩或完成教師指定路徑 | 可選 Azure、GCP、Zeabur 或其他平台 | 部署紀錄 |
| 16 | 期末專題工作坊一 | 依檢核表完成核心功能 | 需求、架構與里程碑審查 | 專題 Alpha |
| 17 | 期末專題工作坊二 | 測試、錯誤處理與說明練習 | 使用者測試與整合改善 | 專題 Beta |
| 18 | 成果展示與個人口頭說明 | 操作、概念與程式抽問 | 問題、決策、限制與反思 | 期末作品 |

## 參考評量方式

### 日間部

- 每週概念檢核與課堂參與:20%
- 引導式實作:30%
- 期中迷你專題:20%
- 期末整合專題:25%
- AI 使用紀錄與個人口頭說明:5%

### 進修部

- 共同基礎與課堂參與:15%
- 階段實作:20%
- 專題里程碑:20%
- 期末整合專題:35%
- AI 使用紀錄與個人口頭說明:10%

實際配分仍需配合學校規定、授課時數與缺曠課辦法。

## 共同專題規範

每組或每位學生至少繳交:

1. 可操作的作品或可重現的執行方式。
2. `README`:問題、使用者、操作方式、系統架構與已知限制。
3. 輸入與輸出範例。
4. 測試紀錄:正常、邊界與錯誤輸入至少各一例。
5. `AI_USAGE.md`:AI 建議、採用或拒絕理由、驗證方式。
6. 素材來源與授權說明。
7. 個人口頭說明;團體作品仍需個別回答。

## 可選專題方向

- 照片整理、標註、格式轉換或影像增強工具
- 語音逐字稿、摘要與字幕工具
- 短片剪輯、精華擷取或影片資訊整理工具
- 攝影機手勢、姿態或互動展示
- 多媒體搜尋與問答工具
- 結合生活或工作情境的自選題目

題目不以功能數量評分。核心功能可重現、媒體概念使用正確、能說明 AI 產出如何驗證,比堆疊服務更重要。

## AI 協作規範

學生可以使用生成式 AI,但需遵守三項原則:

1. **可以生成**:可用於構想、程式、說明、測試案例與除錯。
2. **必須驗證**:不得只以「AI 說可以」作為正確證據。
3. **能夠說明**:需說明關鍵程式、參數、輸入輸出與限制。

不得將帳號密碼、API 金鑰、未授權個資或不適合公開的素材貼給外部 AI 服務。
72 changes: 72 additions & 0 deletions course-115/hackmd-homepage-snippets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# 兩班 HackMD 首頁貼上區塊

以下區塊分別貼到日間部與進修部既有 HackMD 首頁。請將 `<W01_COMMON_NOTE_URL>` 換成第一週共同教材的 HackMD 閱讀連結。

## 日間部首頁區塊

```markdown
## 多媒體系統 115 學年度

> 用 AI 協作開發多媒體系統,並能說明媒體資料如何表示、處理、傳輸與驗證。

### 本週課程

- [W01|HackMD、Markdown 與第一份媒體筆記](<W01_COMMON_NOTE_URL>)
- 課堂任務:完成「我的多媒體名片」HackMD 筆記
- 本班活動:兩人一組交換檢查標題、連結、圖片替代文字、分享權限與個資
- 繳交方式:(請填入表單、Teams 作業或指定位置)
- 截止時間:(請填入)

### 本班學習方式

- 每週先理解一個多媒體概念,再完成一個可操作的小實作。
- AI 可以協助構想、寫程式與除錯,但結果必須驗證,也要能用自己的話說明。
- 課程共用程式與範例:[MediaSystem-Python-Course](https://github.com/willismax/MediaSystem-Python-Course)

### 上課前準備

- [ ] 可以登入 HackMD
- [ ] 準備 Google 帳號,以便使用 Colab
- [ ] 確認可以開啟 GitHub
- [ ] 不要在公開筆記放入密碼、API 金鑰或未經同意的個資
```

## 進修部首頁區塊

```markdown
## 多媒體系統 115 學年度

> 用 AI 協作開發多媒體系統,並能說明媒體資料如何表示、處理、傳輸與驗證。

### 本週課程

- [W01|HackMD、Markdown 與第一份媒體筆記](<W01_COMMON_NOTE_URL>)
- 課堂任務:完成「我的多媒體名片」HackMD 筆記
- 本班挑戰:選擇生活、社團或工作流程,以 Mermaid 畫出媒體資料如何取得、處理、儲存與分享
- 繳交方式:(請填入表單、Teams 作業或指定位置)
- 截止時間:(請填入)

### 本班學習方式

- 共同基礎會在課堂完成,專題題目與工具保留較多選擇。
- 可使用自己的工作或生活問題發展專題,但每個階段都要提出可檢查的成果。
- AI 可以協助構想、寫程式與除錯,但結果必須驗證,也要能說明採用或拒絕建議的理由。
- 課程共用程式與範例:[MediaSystem-Python-Course](https://github.com/willismax/MediaSystem-Python-Course)

### 上課前準備

- [ ] 可以登入 HackMD
- [ ] 準備 Google 帳號,以便使用 Colab
- [ ] 確認可以開啟 GitHub
- [ ] 可先想一個希望用影像、聲音或影片改善的生活/工作問題
- [ ] 不要在公開筆記放入密碼、API 金鑰或未經同意的個資
```

## W01 共用筆記建立方式

1. 在 HackMD 建立一份空白筆記。
2. 開啟「Versions and GitHub Sync」。
3. 將筆記連結到 `course-115/week-01-hackmd-markdown.md`。
4. 從 `course-115-hackmd-materials` 分支拉入內容;PR 合併後改連結 `main`。
5. 用閱讀模式檢查程式碼區塊、Mermaid、連結與分享權限。
6. 把閱讀連結填回兩個首頁的 `<W01_COMMON_NOTE_URL>`。
Loading
Loading