2014年9月28日 星期日

一些有趣的 javascript 專案

https://github.com/benweet/stackedit

這是一個 markdown 的編輯器, markdown是與org-mode齊名的輕量級標記語言。

https://github.com/slap-editor/slap

仿 osx 上的 sublime 編輯器

https://github.com/petkaantonov/bluebird

一種名為 promise 的語法(糖),寫出類似try...catch的語法

https://github.com/vthibault/roBrowser

"新仙境傳說"的瀏覽器版(I know...我也驚呆了)

https://github.com/feross/webtorrent

bt 的客戶端

https://github.com/bartaz/impress.js https://github.com/hakimel/reveal.js

簡報工具

2014年9月26日 星期五

pdf.js初探

我覺得這個基於javascript的pdf viewer有前途,主要是因為潛在的線上多人協作的可能性

開發時由於無法參照本地檔案,因此必需配合 web server 來讓本地檔案以 http 協定存取

原作者已經設想此一情況,搭配的伺服器是 node.js 。

先安裝 node.js ,參 http://www.codedata.com.tw/javascript/using-nodejs-to-learn-javascript

(win8用戶請注意:win-Q搜尋 node.js command prompt 的捷徑,按右鍵以管理員身份執行)

以下參考 https://github.com/mozilla/pdf.js

取得完整原始碼(不是prebuild,請按 https://github.com/mozilla/pdf.js 上的download zip)並解壓

打開一個 node.js command prompt ,進入剛才解壓的目錄並執行

node make server

此時網頁伺服器即開始執行。開測試網頁 http://localhost:8888/web/viewer.html

即可看到測試結果

( node make server 是 shelljs 專案中的 make 工具的語法,參  https://github.com/arturadib/shelljs#make-tool )


2014年8月20日 星期三

AnyEvent , POE , IO::Async 的比較


https://blog.afoolishmanifesto.com/posts/concurrency-and-async-in-perl/

這篇文章滿新的,作者比較了這三種事件驅動模式,作了以下結論:

初學者建議用 AnyEvent ,但工作上建議用 IO::Async 或 POE 。尤其是 IO::Async 作者非常推薦,某方面來說可能也是因為這個架構比較新的關係(吧?)。

2014年8月19日 星期二

超酷的逆向代理(reverse proxy):使用bash one liner

參考 http://www.frameloss.org/2013/12/14/wicked-cool-reverse-proxy-with-bash-and-netcat/

Process substitution 是裏面最重要的概念,使得 pipe 可以同時雙向轉送。

File descriptors 也是滿新鮮的概念。檔案和 socket 因此可視為等效,使得 nc/netcat 的功能實質上可以用 cat 來達成。

或許很多程式一開始只要寫成針對 stdio / stdout 就好,再利用這些上述提到的概念,在 shell 的層次導入 socket / network 的參數。

這個小技巧可以 work ,首先要思考的是 proxy 和 nc 的本質。 proxy 本身同時是 server 和 client ,server端接受外來的連線,再利用 client 端將資料轉送到真實的 server 。nc 依執行時所提供的參數,可以是 client ,也可以是 server ,而資料則轉送到該程式自身的 stdin / stdout 。所以在實質上來看,同時啟動一個 nc server 和 nc client ,然後把它們的 stdin / stdout 串起來,就可以等效於一個 proxy。

延伸--bidirectional filter


理想上一個雙向 bidirectional filter 可以插入到這兩個 nc server/client 之間,但是 bash 的版本可能要在4以上 (2010年3月以後)。先檢查版本:

$ echo $BASH_VERSION

利用 mkfifo 建立 4 個具名管道 a b c d,使用<及>運算子將 a output b input 指定給 nc server 的 io ,c output d input 指定給 nc client ,然後將 a input b output c input d output 作為參數啟動 filter 。自行建立的 fileter 如果是用 perl 撰寫,可參考文件如何使用open打開管道。

如果讀寫之間不需要協調的話,那麼這樣形式的 filter 是更為簡單的,讀、寫各兩個管道,所以不需要使用具名管道。指令的形式如下

[ ! -p $pipefwd ] && mkfifo pipeback;#只需要執行一次

[ ! -p $pipefwd ] && mkfifo pipeback;nc -l -p 9090 <pipeback | perl -e "while(<>){print STDERR;}" | nc 127.0.0.2 9999 | perl -e "while(<>){print STDERR;}" > pipeback

如果需要在螢幕上顯示,可以搭配 tee

[ ! -p $pipefwd ] && mkfifo pipeback;nc -l -p 9090 <pipeback | tee >(perl -e "while(<>){print STDERR;}") | nc 127.0.0.2 9999 | tee >(perl -e "while(<>){print STDERR;}") > pipeback

20170202更新:嚴格說來 ssh 才是比較安全的作法,請參考 http://chimerhapsody.blogspot.tw/2015/09/ssh.html
http://chimerhapsody.blogspot.tw/2015/09/ssh.html

2014年8月16日 星期六

驚!! PHP 也可以拿來寫 AP !?

Building Command-Line Applications with PHP

文件言,這個特性是2003年開始支援的。說來慚愧,我是從來沒聽說過... 冏rz

github 上熱門的專案統計

GitHub 上的熱門專案

滿有趣的 ,看來是用討論的熱度來作統計。有時間的話,一定要好好的看一看啊…

perl 竟然幾乎全滅的了…冏rz

看來 javascript / css 真.的.是.很.紅.啊…

如何寫一個模組,並上傳到 cpan


  1. 模組的基本結構和要求
  2. 怎么样写一个模块上传到 CPAN


寫得太好了…

補充幾點:


  1. 模組架構可以用 Module::Starter 來建立,或是使用經典的 Module::Starter::PBP ,可參考 使用 Module::Starter 建立模組框架
  2. 上傳可以用 CPAN::Uploader
  3. 寫模組的風格可以參考 PBP (Perl Best Practices)