瞿旭民 (kevinbird61)
成大資訊所 @ToolBuddy
JAN 04, 2018
@NCKU-CCNS
關於我 & ToolBuddy
Why Node.js?
為何要造輪子?
About docoGen
About papoGen
未來規劃 & 總結
學習後分享,發現不足後繼續學習的良性循環出發
成大許多課程的不足:
實作太少、缺乏實際演練 (看著虛擬碼止渴)
將修過的所有課程都記錄自己的思路,並實作有趣、有難度的程式碼來學習 !
自行開發專案、學習 Tutorial 撰寫都很歡迎!
利用一己之力來慢慢改變周遭的環境吧!
LuisHsu
Daniel Chen
yih6208 (李庭宇)
Yung-Sheng Lu
Nienzu
Join us!
1. JavaScript
2. Python
3. C#
4. Java
5. PHP
6. Go
7. Swift
......
從前端擴展到後端,
跳脫瀏覽器上運行的限制
能像一般程式的開發
gtop - htop 的 Node.js 版本
Electron - 桌面應用開發
Meteor - Web APP 打包
Fig. - gtop
比起 C/C++ 開發,
Node.js 擁有大量的模組!
npm package
大大加速程式開發的進程!
但還是有其定位在!
Rust 能達到對於 Concurrency、安全和穩定性的更高需求
Rust 開發成本低,有逐漸取代 C/C++ 在系統程式的地位
參考連結 (Node相比传统服务端技术栈好在哪里?)
slides.com 就是基於 reveal.js 的應用!
e.g., 陳鐘誠老師的教材許多都是以 Node.js 做開發 (scijs)
希望大家會喜歡這些工具!
有時候很多人覺得多此一舉,像是架設網站的工具有 Jekyll、reveal.js 這種好用的工具,幹嘛再自己土炮一個呢?
我認為有幾個好處......
自訂格式的需求
透過自己想要方式來達到相同功能
透過實作來思考學習
經過自己的實驗證明,再製作工具的過程中,
因為需要某種功能,就必須需思考如何完成!
喔耶!
是我第一個以 Node.js 開發的工具
以做出一個能夠簡單撰寫論文的工具為出發
挑選 LaTeX 格式作為後端
以 Markdown / JSON 格式為輸入
透過簡單的格式撰寫後,生成看似很專業 README
後來轉變為一般專案內的說明文件使用
原本名稱是 docGen,發現已經被註冊過了,
所以改名為 docoGen
之後的作品也都習慣性地加上了 o
找上了同學,趁他很閒的時候 拉他入坑 XD
有了編寫同一種文檔格式,同時產生網站、文件 (PDF) 的想法
於是乎請他幫忙處理 靜態網頁的生成!
產生 LaTeX PDF 的模組
透過 簡單的方法 產生負責的 LaTeX 格式,
解決 撰寫 LaTeX 的困難點
none, text, list, table, formula, code, figure, restful-api
JSON 文檔
PDF 文件
Fig. - docoGen WebUI 頁面
只要指定 Project 根目錄 即可!docoGen 會蒐集根目錄下的
所有 script file 來合併產生目標檔案!
相對路徑 的處理!
e.g., 圖片、程式碼檔案
生成的順序由 Priority 指定
透過 "content" -> "type"
指定 8 種不同的型態
依格式編輯 "data" 的內容
嘗試透過更直覺的方法產生
採用 Markdown 格式輸入
比起 JSON 有可讀性更好、
且更好撰寫!
LaTeX 需使用很多符號 來做標記,需注意 LaTeX 格式
e.g., 不能隨便使用 '&' 的符號
pdfLaTeX 編譯模組自己寫的不完整
Pipe error / Exception 訊息處理會影響使用者體驗
語法解析沒考慮周全
目前 Markdown 是透過 AST 格式 下去解析
語法解析沒考慮足夠周全,當時的 Parser 偏向硬幹
WebUI 的相依性太高!
除了在 macOS 上可以直接 install package 之外,其他系統
需要直接 clone 原始碼才能搭配 docoGen 一同使用
這讓我想額外製作新的模組,學習靜態網站建置的原因 !
- papoGen 的誕生
將相依性降到最低,並且做成 CLI 工具
延續 docoGen 的概念,使用 JSON 格式作為輸入
以 pug.js 作為模板,讀取使用者的資料後產生網站
原本名稱是 paperGen,發現又被註冊過了,
所以改名叫 papoGen
使用者編寫好資料
透過 papoGen 指令 給予生成參數
papoGen 依據參數處理
提取版型 (doc, resume) 及 CSS 資源
將資源 (圖檔、程式碼檔案) 複製到目的地
生成網頁程式碼並儲存
使用者可以依據喜好分別指定模板、來源格式!
以下將詳細介紹 !
目前提供二種模版: doc 與 resume
參考原始碼中 lib/template 下的 *.pug 檔案
允許自行新增模板
在 lib/template 下新增 <template name>.pug
依照格式自行撰寫模板
利用 pug 可以分檔的特性,大幅上升模板的可讀性!
目前使用 PaperCSS 作為 CSS 樣式
未來將支援 更多不同的 CSS 樣式!
透過 pug 可依據想要的 CSS 來實作模板!
e.g., custom tag name, class name.
papoGen 提供 透過指令產生範例模板
使用者編輯後再 透過指令生成目標網站
papogen -s test/md -o docs/md -g md -m md_doc -t Graph\ Theory
課程中草率的證明、多數答案都是由 "結果" 推原因
圖形理論在選課名單上被列為玄學
找了許多資源,在吸收並了解後撰寫教學
樂於分享!
透過 Python 來操作網路模擬環境的建置
學習好用的工具!
紀錄學習的步伐,提供其他有興趣的同好使用
或是想來玩?