Po-Ying Chen


你用什麼 Framework?

不是很願意接受前端 Framework 的原因

身為前端這個沒意義的問題實在很常被問到,所以就以他當標題,跟內容不是那麼相關。

可搭配 Tom Chen 的回應文章一起閱讀,很期待從這些討論中學到一些東西。

為什麼寫這篇文章?


這篇文章是為了解釋前一篇文章而生的,前一篇提到個人不習慣使用 Framework,我覺得我得給出點理由,沒有批評 Framework,只是寫出自己的想法。所在位置不同,考量不同,可能會得出不同的結論,或許一年之後我的想法會有點不同也不一定。

曾經問過自己的問題


Node.js 搭 nginx

今天把兩三個服務放到同一台 Server 上,需要用 vhost,以前我通常直接 Node.js 作掉,但是這是比較重要 production 的服務,所以想說用一些比較多人推薦的作法。

這邊我遇到的問題都跟 Node.js cluster 有關:

  1. 通常 production 上一定會使用 cluster,讓 server 的資源有效利用(像是 pm2 就有包含這部份),我應該把 cluster 拔掉,直接用 nginx 嗎?如果不換的話會不有什麼效能差異?
  2. production 上也會監看 process,死掉的時候要重新啟動,這種情況在 Node.js 上不可避免,所以一定要處理。使用 cluster 的時候通常會在 mater…

Node.js 舊專套用 Sentry

Koa + Bunyan 作法紀錄

Sentry 的 Node.js client raven-node 提供的 API 不是 Node.js 下比較容易使用的 stream,而是他們跨語言統一的介面。Node.js 下的 logger module 大部分都吃 stream,想要以比較無痛的方式使用 Sentry 就要想辦法把 raven client 包成 stream。

Logger 無痛套用 Sentry


這邊可以拆成兩部分(可以是兩個 module),一個 writeable stream 接收 sentry 格式的 json 物件,一個 transform stream 將 logger 的輸出轉…


Pipeline/Concurrency 練習(Go)

Node.js 開發者學習 Golang Channel 之路

以前在 Node.js 下很習慣從 Readable Stream(stdin)讀入資料,中間透過一個或多個的 Transform Stream(可能是個獨立的 Module)處理資料(修改、過濾等動作),最後從 Writable Stream(stdout) 輸出:

process.stdin
.pipe(byline())
.pipe(parse())
.pipe(doSomething())
.pipe(stringify())
.pipe(process.stdout);

redis-mount: FUSE + Go 的小實驗


半年前開始有使用到 redis,開發時在檢查資料上遇到一點小問題,單純使用 redis-cli 很不方便,我們常常會使用 KEYS 指令列出所有或所有有包含某個前綴的 key,資料稍微多一點就沒辦法快速有效的看出整個 redis server 儲存資料的狀況,或是我想快速搜尋包含某個字串的所有資料也很不方便。那時有找了一些現成工具,像是 Redis Desktop Manager,不過用他看資料比較不方便,像是可能某個 key 裡面是單純的 db 回傳資料,以 Node.js 來說這樣的資料會是 JSON 格式,如果用 RDM 看,我們會看到沒有展開的 JSON,幾乎不可閱讀,所以有了把 redis 變成 File System 的想法。使用 Golang 來實作純粹是想藉機試試 Golang 而已,沒有特殊原因。


人生第一個 Node.js Addon 的開發歷程

同一個 Addon 三年寫三遍

對一個前端而言 C++ 真的不是一很好親近的語言,平常碰到的機會很少,三年前除了學校課程之外,基本上自己從沒寫過 C++,所以可算做完全不會,可想而知,第一次寫的時候極其悲慘。

當初為了要使用程式查詢圖書館的資料,開始尋找可行的方式,z39.50 是我找到唯一用來跟圖書館溝通的方式,C、C++、Python、Ruby、Perl 都有 z39.50 的 Library 可以使用,但就是沒有 Node.js 的 Library。那時候碰 Node.js 不到一年,正想好好練習 Node.js 技巧,用其他語言的話分散我對 Node.js 的學習力道,所以只好自己想辦法克服這個問題,撰寫 Binding 是條捷徑。


讓 Docker 好用一點的小工具

自訂指令,讓 Docker 更貼近我的習慣

Docker 很方便,但是有些小地方總是覺得好麻煩,像是上圖,我們只不過是需要個 ip 卻必須先下一次 docker inspect 看看回傳資料結構,然後再下一次帶 format 選項的 inspect 指令,如果可以自訂一些短名稱來作對應不是很棒嗎?再來一個例…


Python 練習:CLI Framework

自己常用一些 library 是練習新語言的好題目,這次因為有些專案需要寫 cli 工具,但又沒一個 cli 的 parser/framework 用的習慣,所以就開幹!(警告:本文純很自嗨)

GitHub: https://github.com/poying/puppet

不要有任何一行無意義的程式


寫 python 的時候常常會看到這樣一行程式碼:

if __name__ == '__main__':

為什麼會有這行呢?我自己的想法:


中文網路字體 Dynamic Subsetting

2014 年的個人實驗

去年年初想要使用中文字體在網頁上,但找不到開源的 Dynamic Subsetting 實作,現有的服務都是收費服務,要不然就是有條件的免費,這些都不是我所想要的,所以開始研究各種作法。今年一月初的時候也嘗試出可行的方式,不過最近幾個月內沒有什麼時間把程式碼整理乾淨,先寫一篇文章確保花的時間沒有浪費(非常有可能之後就懶得整理扣了)。

用途相近的網路字體實作


其實要求不多的話現在就已經有很多開源專案可使用,他們大部分使用 FontForge 有些則是使用 sfntly 的 java cli 工具。

  • FontForge 的缺點很明顯,我們必須把整個字體…

從不用 PTT 到寫了一隻 BOT

前幾天公司說要爬 PTT 文章資料,包含 IP、作者、標題、內容、回文,反正就是能抓的都抓,在接到這項任務之前(四天前)根本不會想逛 PTT,實在太醜了,我最多只到過主功能表而已…

原本老闆是說從 Web 抓,不過那真的有點寫膩了,閒來沒事本來就會到處抓抓,所以選擇使用 Telnet,嘗試點不一樣的東西才有…


前端 CommonJS 工具(續)


上一篇簡單介紹簡單了一些 CommonJS 工具,這篇文章將會專門說明怎麼使用 Duo。

  1. Duo 安裝
  2. Component.io/Duo 設定檔
  3. 第三方 Component
  4. 基本使用
  5. 自動化工具
  6. 搭配 Makefile
  7. 監看檔案變化
  8. Duo JavaScript API
  9. 測試
  10. 搭配 Koa
    1. 基本用法
    2. 依據正式、開發環境自動開關選項
    3. Cache (ETag…