Let's Play Node.js

瞿旭民 (kevinbird61)

成大資訊所 @ToolBuddy

JAN 04, 2018

@NCKU-CCNS

Outline

  • 關於我 & ToolBuddy

  • Why Node.js?

  • 為何要造輪子?

  • About docoGen

  • About papoGen

  • 未來規劃 & 總結

About

kevinbird61 & ToolBuddy

kevinbird61

  • 研究主軸 -
    Programmable data plane 架構
     

  • 對土砲很有興趣!

  • 以製作順手的小工具為樂!

About

  • 學習後分享,發現不足後繼續學習的良性循環出發

  • 成大許多課程的不足:
    實作太少、缺乏實際演練 (看著虛擬碼止渴)

  • 將修過的所有課程都記錄自己的思路實作有趣、有難度的程式碼來學習 !

  • 自行開發專案、學習 Tutorial 撰寫都很歡迎!
     

利用一己之力來慢慢改變周遭的環境吧!

About

LuisHsu

Daniel Chen

yih6208 (李庭宇)

Yung-Sheng Lu

Nienzu

About

ToolBuddy Partners

Join us!

Why              ?

先看張圖吧![原文連結]

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、GoLang 等語言的崛起

Node.js 在某些方面的宰制力已經不及以往

  • Node.js 在 Performance Concurrency 上的不足

  • 在部署 Server 的應用上不及 GoLang 的強大

參考連結 1 | 參考連結 2

  • Rust 能達到對於 Concurrency、安全和穩定性的更高需求

  • Rust 開發成本低,有逐漸取代 C/C++ 在系統程式的地位

參考連結 (Rust vs. Node.js)

Server

System

還是要對           

有愛啊!

slides.com 就是基於 reveal.js 的應用!

我曾用              做過的應用......

  • 以 Server 居多 - 當初從架設 Server 開始學習 Node.js

    • 自製皇室戰爭的及時連線

    • 專案需要的 APP 後端 (mongoos, esequelize, etc.)

    • 專題使用的一般網站架設

    • 共通點:真的很快可以完成!

    • 缺點:單執行序的侷限

  • 應用工具

  • 手機 APP - by Meteor

對此我覺得             定位應屬於

e.g., 陳鐘誠老師的教材許多都是以 Node.js 做開發 (scijs)

應用工具的實作

我在            上開發的心得

希望大家會喜歡這些工具!

所以今天為大家帶來......

為何要造輪子?

現有許多工具,為何要土炮

有時候很多人覺得多此一舉,像是架設網站的工具有  Jekyll、reveal.js 這種好用的工具,幹嘛再自己土炮一個呢?

我認為有幾個好處......

  • 自訂格式的需求

  • 透過自己想要方式來達到相同功能

  • 透過實作來思考學習

透過實作學習!

  • 可以透過他人的工具、也可以自己自幹一個
     
  • 反覆以上的過程後,會發現自己好像變強一點點 XD
     
  • 建立自信後,會讓自己投入一個良性的學習循環中!

經過自己的實驗證明,再製作工具的過程中,
       因為需要某種功能,就必須需思考如何完成!

這也是今天來傳教分享的目的

歡迎加入 ToolBuddy

喔耶!

  • 是我第一個以 Node.js 開發的工具

  • 以做出一個能夠簡單撰寫論文的工具為出發

  • 挑選 LaTeX 格式作為後端

  • Markdown / JSON 格式為輸入

  • 透過簡單的格式撰寫後,生成看似很專業 README

  • 後來轉變為一般專案內的說明文件使用

About

原本名稱是 docGen,發現已經被註冊過了,

       所以改名為 docoGen

之後的作品也都習慣性地加上了 o

  • 找上了同學,趁他很閒的時候 拉他入坑 XD

  • 有了編寫同一種文檔格式,同時產生網站、文件 (PDF) 的想法

  • 於是乎請他幫忙處理 靜態網頁的生成

Modularize

docoGen

  • 產生 LaTeX PDF 的模組

  • 透過 簡單的方法 產生負責的 LaTeX 格式,
    解決 撰寫 LaTeX 的困難點

docoGen WebUI

  • 產生 靜態網站 的模組
  • 增加 docoGen 對於 文件的支援性

目前支援 8 種型態

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

  • 嘗試透過更直覺的方法產生
     

  • 採用 Markdown 格式輸入
     

  • 比起 JSON 有可讀性更好
    更好撰寫

 

於專案內使用

  • 課堂作業是最好的宣傳!
     
  • 直接展示
    如何在自己的專案內
    使用 docoGen!

產生 LaTeX 文件的 DEMO

都是需要改進的!

每次嘗試......

  • LaTeX 需使用很多符號 來做標記,需注意 LaTeX 格式

    • e.g., 不能隨便使用 '&' 的符號

  •  pdfLaTeX 編譯模組自己寫的不完整

    • Pipe error / Exception 訊息處理會影響使用者體驗

  • 語法解析沒考慮周全

    • 目前 Markdown 是透過 AST 格式 下去解析

    • 語法解析沒考慮足夠周全,當時的 Parser 偏向硬幹

LaTeX

MD Parser

  • WebUI 的相依性太高!
    除了在 macOS 上可以直接 install package 之外,其他系統
    需要直接 clone 原始碼才能搭配 docoGen 一同使用

模組使用

這讓我想額外製作新的模組,學習靜態網站建置的原因 !

- papoGen 的誕生

  • 相依性降到最低,並且做成 CLI 工具

  • 延續 docoGen 的概念,使用 JSON 格式作為輸入

  • pug.js 作為模板,讀取使用者的資料後產生網站

About

原本名稱是 paperGen,發現又被註冊過了,

       所以改名叫 papoGen

  1. 使用者編寫好資料

  2. 透過 papoGen 指令 給予生成參數

  3. papoGen 依據參數處理

    • 提取版型 (doc, resume) CSS 資源

    • 資源 (圖檔、程式碼檔案) 複製到目的地

    • 生成網頁程式碼並儲存

使用者可以依據喜好分別指定模板、來源格式

        以下將詳細介紹 !

Workflow

  • 目前提供二種模版: doc 與 resume
     

  • 參考原始碼中 lib/template 下的 *.pug 檔案
     

  • 允許自行新增模板

    • lib/template 下新增 <template name>.pug

    • 依照格式自行撰寫模板
       

  • 利用 pug 可以分檔的特性,大幅上升模板的可讀性!

Template

  • 目前使用 PaperCSS 作為 CSS 樣式
     

  • 未來將支援 更多不同的 CSS 樣式

    • 透過 pug 可依據想要的 CSS 來實作模板!

    • e.g., custom tag name, class name.

CSS

  • 嘗試使用 JSON 與 YAML 作為文檔格式
    • 並規劃從 Markdown 轉換的支援
  • 目前支援 8 種格式
    • e.g., card, code, formula, hyper, image, list, table, text.
  • papoGen 提供 透過指令產生範例模板

  • 使用者編輯後再 透過指令生成目標網站

文檔格式

指令支援

Step 1. - 使用者透過指令產生腳本

Step 2. - 開啟檔案編輯

Step 3. - 運行指令產生網頁

Step 4. - 查看結果!

  • 透過套件 markdown-it 支援,轉換最麻煩的部份( 覆蓋 markdown 語法 )

 

  • 轉換成 html 字串後,插入到已設計好的 pug  template

 

  • 更方便寫!也更適合教材、markdown blog 的實作!

Markdown Support

papogen -s test/md -o docs/md -g md -m md_doc -t Graph\ Theory   

Demo - md-doc

未來 & 結語

  • 論文 citation 爬蟲
  • 主要 porting 原本 python 的版本到 js 上,提供使用者另一種選擇來使用!
  • 實驗室網站的 framework,並以 moodle 的功能設計來做開發。
  • 未來希望可以提供一套順手的課程網站、實驗室網站給學校使用

ScholarJS

About

WeboGen

About

也有紀錄學習內容

除此之外......

  • 課程中草率的證明、多數答案都是由 "結果" 推原因

    • 圖形理論在選課名單上被列為玄學

  • 找了許多資源,在吸收並了解後撰寫教學

  • 樂於分享!

  • 透過 Python 來操作網路模擬環境的建置

  • 學習好用的工具!

  • 紀錄學習的步伐,提供其他有興趣的同好使用

Graph Theory

Mininet

如果你相同想法

歡迎加入我們

或是想來玩?

感謝參與!

20180104 - Let's Play Node.js

By Kevin Cyu

20180104 - Let's Play Node.js

introduce my side project and interesting work with Node.js

  • 2,381