# 醫學數位內容教學課綱
# [課程目標](https://mos2718.github.io/MICexp/S0_Introduction2021.pptx)
* 使用工具及範例程式,分析常見的醫學數位內容
* 搭配應用情境,了解資訊整合流程
* 基於範例程式及應用情境,用以致學,了解實際應用所需資訊知能
* 參與醫資開發團隊,探索健康醫療未來發展
* 學會做專案(應用知識)
### 相關資料
-- [HackMD使用教學](https://hackmd.io/s/tutorials-tw)【HackMD】
-- [Victoria學姊線上共筆範例](https://hackmd.io/@victoriatjia/fhir-sr-bmd)【HackMD】
-- [會議記錄彙整](https://hackmd.io/@YL245/Hk5ponLvp)【HackMD】
-- [會議記錄與專案管理](https://hackmd.io/7PqtWOkbQp6SV0JXLz6oSg?view)【HackMD】
# 開發環境安裝
## 單元目標
:::info
本單元確保學生能夠順利建立起醫學數位內容的開發環境,為後續的課程內容做好準備~
:::
* 理解醫學數位內容開發的基本(應用)需求
* 學習安裝和配置開發環境:VS code
* 熟悉開發環境的基本操作:如何運行JS檔案
* 解決安裝和配置中的常見問題
## 相關教材
### 醫學數位內容開發的基本(應用)需求
-- [臨床資訊化作業的挑戰](https://moodle.tcu.edu.tw/mod/url/view.php?id=535047)【PPT】
### 開發環境:VS Code
1. 軟體安裝網址:[點擊下載VS Code軟體](https://code.visualstudio.com/Download)【Link】
1. VS code 安裝教學:(可選適合自己的學習方式)
-- [HackMD筆記式教學](https://hackmd.io/_pq0ubqFTtKFNFvrQGOR-g)【HackMD】
-- [PPT教學](https://mos2718.github.io/js2020/VSCode/VS-Code%20introduction.pptx)【PPT】
-- [影片講解教學](http://203.64.84.150:51888/user5/JS/2023-01-06VScodeInstall.mp4)(VS Code安裝 + JSON 資料處理基本執行操作)【MP4】
常用套件安裝:Live Server(運行程式)、<font color="#A1A1A1 ">C語言套件(撰寫C語言程式)</font>
## 練習
### 練習1:HackMD的使用
-- 在 hackmd 上發布你在大學期間最想做得五件事(並在其中兩件事注明可與師長共同進行)
-- 條列的事情須具備具體施行方案,例如,“增進程式能力”可改為“每周上機練習程式至少 20 小時”。又如,“增進專業能力”可改為“每學期至少參加五次專業領域研討會,並產生至少三份整理完善的新的報告,並與師長討論”。
-- 請將 hackmd 連結貼到 moodle 作業繳交區。
-- <font color='#F6892F'> 參考資料:學長姐提供之HackMD使用簡報</font>
* [影片講解教學](https://drive.google.com/drive/u/0/folders/11TZFHisTS09rimjQOpHr9MKhtSbPxSl8)【MP4】
* [PPT教學](https://docs.google.com/presentation/d/1ZpLmQL7YzpE-fkYj7A7bhxxKeD8gqZntIc-mNQo5Z0s/edit#slide=id.p)【PPT】
### 練習2:完成VS Code軟體安裝
-- 安裝完成後截圖上傳。
## 補充教材/網絡資源
暫無。
# 數位資料解析
## 單元目標
:::info
本單確保學生具備使用JSON程式碼處理數位醫學資料的基本技能,並能夠應用在實際的FHIR標準環境中。
:::
* 理解JSON程式結構與語法
* 編寫和運行JSON程式:HTML、JavaScript
* 解讀並修改現有JSON程式
* 使用JSON格式建立FHIR標準的資料程式
* 使用JSON程式碼對內容進行上傳和調閱
* JSON常見錯誤分析
## 相關教材
### HTML、JS for FHIR 快速入門
[健康醫療標準化網頁前端應用入門](https://mos2718.github.io/js2020/Introduction/HTMLandJSIntrocuction.pptx)【PPT】
### 什麼是FHIR?
[FHIR入門概述](https://docs.google.com/presentation/d/1Rvs-tLnaeBwySCBilnaXKXHLMzveGn4w/edit?usp=drive_link&ouid=107126242390772765102&rtpof=true&sd=true)【PPT】
### <font color='#9AD88A'>HTML入門(待補充教材)</font>
1. HTML基礎結構
2. HTML常見的排版標籤
3. HTML常見的輸入標籤
### JSON程式結構與語法
1. [JSON 資料概述](https://hackmd.io/D2mj64z6SBSN7LikIzoscA)【HackMD】
2. [解析JSON資料](https://hackmd.io/IR8fP9zNSVO7UXeaSTYcJQ)【HackMD】
3. 運行JSON讀寫程式:
-- [程式範例練習配套教學說明](https://hackmd.io/2Cl5ua_eRmSVGyaGLd2U-A)【HackMD】
-- 範例程式下載區:[JSON read and set data JS 程式範例](https://drive.google.com/drive/folders/1YR3vQziMDF9AGttMOje4afbNENvqHJev?usp=sharing)【Code】
4. 上傳及調閱JSON資料
-- 範例程式下載區:[資料上傳及調閱範例程式](https://drive.google.com/drive/folders/1lEfKNEIa1rzgVpDrpaHKdo6QDpjP24H7)【Code】
### <font color='#9AD88A'>FHIR Resource介紹</font>
-- [FHIR Resource](https://hackmd.io/bWEZu4J1STS7yA18H6yvUw#FHIR-resources)【HackMD】
### JSON常見錯誤分析
暫無可整理檔案。
## 練習
### 練習1 : 使用 JS 讀寫JSON資料
-- 請參考所給的JS操作說明檔案,了解如何使用JavaScript(JS)讀寫JSON資料。
### 練習2 : 使用 JS 上傳及調閱 JSON data
1. 請參考所給的JS操作說明檔案,了解如何使用JSON程式碼對數位醫學資料進行上傳和調閱。
2. 上傳: 使用JSON參考程式碼,修改程式碼內容,並實現將模擬的醫學資料上傳到FHIR伺服器的功能。
3. 調閱: 再次使用JSON參考程式碼,實現對上傳的資料進行調閱的功能。
## 補充教材/網絡資源
### W3 School 教學網站:
[什麼是HTTP?](https://www.w3schools.com/whatis/whatis_http.asp)【Link】
[什麼是HTML?](https://www.w3schools.com/whatis/whatis_html.asp)【Link】
[什麼是JavaScript?](https://www.w3schools.com/whatis/whatis_js.asp)【Link】
### <font color='#9AD88A'>JSON for FHIR 教材</font>
[練習合集(新增病人、組織、檢測等)](https://hackmd.io/lpYGm11LT9me4c08HFiU-w?view#FHIR-Introductory-exercise)
### FHIR概述
[FHIR醫護表單初體驗](https://www.youtube.com/watch?v=utBMt4IOljc)【Youtube】
# 檔案或串流資料解析
## 單元目標
:::info
本單元確保學生具備解析不同檔案或串流資料的能力,並能夠有效地轉換不同格式的數位醫學內容。
:::
* 理解不同資料編碼和存檔方式: 文字檔及數位檔。
* 使用工具(含 AI)及範例程式,解析常見的醫學數位內容。
* 學習檔案(或串流)與程式中變數資料轉換。
* 實現檔案格式轉換的讀寫範例程式。
## 相關教材
### [資料儲傳與資料處理說明:](https://moodle.tcu.edu.tw/mod/resource/view.php?id=537291)【PPT】
:::success
- 電腦以一個個 byte 儲存及傳輸資料
- 程式會定義字元、整數、浮點數等資料型態,以利運算及資料處理
- **程式讀取檔案或網路傳輸的資料後,須轉成對應的資料型態處理**。要儲存或傳輸資料前,程式將資料轉換成一個個 byte ,以利網路及檔案系統處理。
:::
### 1. 資料編碼存檔方式
- 文字檔(CSV, XML, JSON, FHIR JSON...)
– CSV 檔結構簡單,許多軟體支援匯入匯出,很常用,但無明確規格定義
– XML, JSON 檔,可進一步清楚定義結構化文件。 IT 人員必須熟悉處理 XML, JSON 之程式與套件(C,JS, VS code)
– FHIR JSON 或 XML,基於國際標準,可有定義明確之欄位及編碼系統
– 文字檔可用一般文字編輯軟體解析,亦於了解及處理,但以文字格式紀錄訊號或影像,資料量將倍增
- 數位檔
– 內含許多不同資料型態的資料,如病人基本資料、就醫資料、波形資料
– 病人及就醫資料可為文字型態(ASCII + 中文碼)
– 波形資料可能的資料型態:文字型態數值、數值資料:1,2,4 byte int, 2,4,8 byte 浮點數
– 數值資料需判斷 sing 及 unsigned、 big endian little endian、資料有無壓縮等議題。對不熟之 IT 人員是大挑戰
– 與程式當中處理變數及結構化物件不同,資料以 byte stream 方式存檔或交換。必須有明確的規格,方利於資料解析(但資工相關科系課程大多沒教)。格式範例:
— EBM 檔: tag length value 資料結構
— DICOM 檔: tag、 length、value 或 tag、VR(資料型態)、length value 資料結構資料結構
— MIT ECG: 檔案說明、標記、訊號資料分離
— 建議的資料結構,描述資料與訊號資料分離,描述資料(FHIR documentReference),訊號 2 byte little endian unsigned int (資料匯出或傳輸互通頂層,無壓縮、無加密)
### 2. 解析混含型態結構化檔案(或串流)的挑戰
- A 程式產生的檔案,B 程式解讀常發生問題
-- 規格文件不清楚、難以看懂、對文件認知有差異、不知如何基於說明文件撰寫解析程式
-- 須了解基礎資料型態轉換
--- 如 big endian 與 little endian 互轉,bytes 轉 int or float,處理中文碼
- 通用物件之夢想
-- 工程師(不論資深或資淺) 常想設計通用之資料物件(害人害己)
--- 如 DICOM part 5 定義的規格,可存放任何臨醫資料。影像、報告、波形(如 DICOM ECG)、影片、放腫定位資料(DICOM RT)...
--- 但實際的軟體往往僅能處理部分 DICOM 物件。原因:
---- 須熟悉 DICOM Part 3 定義的所有物件,及熟 Part 5 DICOM 資料編碼(內含不少 options)
#### 解決方式
- 文字資料以 JSON or XML 資料處理
- 數值資料以單一資料型態(int, float...)存檔或傳輸
- 壓縮之圖片或影片,僅支援少數幾種通用之壓縮規格
### 3. 程式變數之資料型態(以 C 為例)
- char,unsigned char: 1 byte
- short,unsigned short : 2 bytes
- int,unsigned int: 4 bytes
- float: 4 bytes
- double: 8 bytes
- [詳細的說明參考](https://learningmicro.wordpress.com/data-types-and-there-sizes-in-c/)
- char and string 文字資料型態
-- ASCII (含英文、數字、及鍵盤輸入符號 及排版控制字元)
-- 支援各國文字之編碼,如 UTF8
- 程式中還會基於上述資料型態組成常見的資料結構:陣列、字串、與物件(class),最後會將程式處理的結果存成資料檔(格式相當精采多樣)
### 4. C read file example
```cpp
unsigned char buffer[2000];
FILE * pFile;
pFile = fopen ("d:\\img\\3.txt", "rb");
fread (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
int i;
for(i=0; i< 2000;i++)
{ printf("index:%d, value: %03d, %02x, ASCII:%c\n",i, buffer[i], buffer[i],buffer[i]); }
```
註 1. 不同的作業系統,相同名稱資料型態,資料長度可能不一樣,如 int 在不同作業系統,資料長度可為 2,4,8 bytes。[參考](
https://stackoverflow.com/questions/5401701/does-the-size-of-data-types-in-c-depend-on-the-os)
註 2. widows 及 linux, int 及浮點數 bytes 列排次序不同,程式從檔案或網路讀資料,轉換成變數須注意。 [Big-Endian 與 Little-Endian](
https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/)
註 3. 其他程式語言也有訂立類似的資料型態, Java, C#, python, JavaScript
### 5. C fwrite example
```cpp=
char buffer[4]={'a','b',65,66};
FILE * pFile;
pFile = fopen ("d:\\dataRet\\ret1.dat", "wb");
fwrite(buffer , sizeof(char), sizeof(buffer), pFile);
int data = 3;
fwrite(&data, sizeof(int), 1, pFile);
fclose (pFile);
printf("file write complete\n");
```
## 練習
-- 在程式當中設定 name(string), age(int), weight(float) 等變數,將你的資料寫入變數後,將資料存檔。
## 補充教材/網絡資源
整理及替換?:[本部分教材(原始版本)](https://hackmd.io/lw-wxcs_Rhm1o0_QP4Eddw?view#%E5%8F%83%E8%80%83%E9%80%A3%E7%B5%90)
- [byte(8bit) 16 進制表示](https://zh.wikipedia.org/zh-tw/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6)
- [ASCII](https://zh.wikipedia.org/wiki/ASCII)
- [Base64 編碼](https://zh.wikipedia.org/zh-tw/Base64)
# CSV及JSON資料
## 單元目標
:::info
本單元確保學生能夠有效地處理和轉換CSV檔案中的醫學資料,並了解JSON格式的應用,以擴展他們的數位內容處理技能。
:::
* 理解CSV檔案格式
* 學習讀取及呈現CSV檔的程式
* CSV to FHIR應用範例
* 理解JSON資料格式
* 應用JSON與CSV的資料轉換
## 相關教材
- [CSV 概述](https://hackmd.io/k3RH4UyEQeW4rxiLOER0bg?view)【HackMD】
- CSV 檔與 JSON 資料的格式轉換
## 練習
### 練習:讀取及呈現 CSV 檔
1. 請將以下 CSV 資料再加一列,記錄你的學號、姓名、及住址
```csv
111316007,蕭家閎,台中
111316008,陳每每,Taipei
```
2. 將準備好的資料存檔
3. 參考以下程式,讀取你的存檔資料
-- [參考程式](https://hackmd.io/lw-wxcs_Rhm1o0_QP4Eddw?view#C-read-file-example)【HackMD】
4. 錄製你的修改的程式及執行結果畫面,繳交錄製結果
## 補充教材/網絡資源
### OBS studio 軟體安裝
1. 參考以下連結安裝 OBS Studio
-- 軟體安裝網址:[點擊下載OBS Studio軟體](https://obsproject.com/)【Link】
-- 安裝說明:[OBS_Studio軟體安裝使用及相關設定說明](https://www.yzu.edu.tw/admin/aa/files/aatsc/OBS_Studio%E8%BB%9F%E9%AB%94%E5%AE%89%E8%A3%9D%E4%BD%BF%E7%94%A8%E5%8F%8A%E7%9B%B8%E9%97%9C%E8%A8%AD%E5%AE%9A%E8%AA%AA%E6%98%8E.pdf)【PDF】
2. 執行 OBS 錄製一段影片 (2分鐘即可,可呈現個人風格或喜好),將影片分享到作業繳交區。可直接上傳檔案。或使用 google 雲端,分享 URL。