警告:heroku 用戶請勿進行此動作,否則後果自負。(heroku 有自己的版本)
參考 https://github.com/nodesource/distributions
簡單來說就是新增個來源位置,然後直接 apt-get
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
sudo apt-get install -y nodejs
20171010更新:
同樣的道理,要裝 6.x 版就是把5改成6,要裝 8.x 版就是把5改成8,依此類推
常用資訊速查
▼
2016年2月29日 星期一
2016年2月28日 星期日
抽樣分配的整理
http://lmh-ymh.myweb.hinet.net/Stat1/ch7.htm
這個網頁整理得很完整,還包含了理論分配的整理
http://homepage.ntu.edu.tw/~huilin/2008-1/ch9.pdf
詳盡的說明
http://sites.stat.psu.edu/~ajw13/stat500_su_res/notes/lesson05/lesson05_03.html
英文的網頁,寫得滿不錯
https://www.ma.utexas.edu/users/parker/sampling/repl.htm
有些重要的概念,像標準誤(standard error),就是樣本均數的標準差;with replacement (每次抽後放回) 才是母體變異數/n 的無偏估計量;without replacement (每次抽後不放回,相當於一次抽n個) 並非母體變異數/n 的無偏估計量;這些概念在這個 UT 的網頁都解釋得很詳細。
http://homepage.ntu.edu.tw/~sschen/Book/Slides/Ch14TS-Boot.pdf
所以回過頭來說,抽樣數是否必需小於樣本數呢?當然是不需要的。實務上最廣泛的應用就是蒙地卡羅法模擬法的好兄弟, bootstrap (提靴法) 這種重新取樣 (resampling method) 。
這個網頁整理得很完整,還包含了理論分配的整理
http://homepage.ntu.edu.tw/~huilin/2008-1/ch9.pdf
詳盡的說明
http://sites.stat.psu.edu/~ajw13/stat500_su_res/notes/lesson05/lesson05_03.html
英文的網頁,寫得滿不錯
https://www.ma.utexas.edu/users/parker/sampling/repl.htm
有些重要的概念,像標準誤(standard error),就是樣本均數的標準差;with replacement (每次抽後放回) 才是母體變異數/n 的無偏估計量;without replacement (每次抽後不放回,相當於一次抽n個) 並非母體變異數/n 的無偏估計量;這些概念在這個 UT 的網頁都解釋得很詳細。
http://homepage.ntu.edu.tw/~sschen/Book/Slides/Ch14TS-Boot.pdf
所以回過頭來說,抽樣數是否必需小於樣本數呢?當然是不需要的。實務上最廣泛的應用就是蒙地卡羅法模擬法的好兄弟, bootstrap (提靴法) 這種重新取樣 (resampling method) 。
2016年2月24日 星期三
2016年2月20日 星期六
用 R 結合 org mode 來學"統計學"
因為能與 org mode 整合,因此打算慢慢整理一些資源,平台暫以 ubuntu 為主,這樣的組合比較符合開源的精神
ptt 上 andrew43 開的書單: https://www.ptt.cc/bbs/R_Language/M.1383500407.A.55D.html
就敘述統計的部分為例
https://en.wikibooks.org/wiki/R_Programming/Descriptive_Statistics
http://sas-and-r.blogspot.tw/search/label/descriptive%20statistics
安裝
請參考去年7月的拙作 在ubuntu 14.04上安裝 R & RStudio
書單
ptt 上 andrew43 開的書單: https://www.ptt.cc/bbs/R_Language/M.1383500407.A.55D.html
資源
就敘述統計的部分為例
wikibooks
https://en.wikibooks.org/wiki/R_Programming/Descriptive_Statistics
SAS and R
http://sas-and-r.blogspot.tw/search/label/descriptive%20statistics
2016年2月18日 星期四
ubuntu 上安裝官網上的最新版 nodejs
警告:heroku 用戶請勿進行此動作,否則後果自負。(heroku 有自己的版本)
參考: http://exponential.io/blog/install-nodejs-on-linux/
(改變了兩個動作,一是解壓縮,二是 PATH 的設定;前者是因官網抓的檔案壓縮格式有改變,後者是因為 $HOME/opt/node/bin 需要放在前面以蓋掉原來的設定)
- mkdir -p ~/opt/packages && cd $_
- 到 nodejs 首頁抓編譯好的執行檔,放在剛建好的目錄
- tar Jxvf node-v4.3.1-linux-x64.tar.xz #(檔名請依實際抓到的檔案修正)
- ln -s ~/opt/packages/node-v4.3.1-linux-x64/ ~/opt/node #(目錄名請依實際抓到的檔案修正)
- gedit ~/.profile #(gedit可換成任何習慣使用的文字編輯器)
- 在末尾加上以下文字,存檔後重開機
# include locally installed packages in PATH
if [ -d "$HOME/opt" ]; then
PATH="$HOME/opt/node/bin:$PATH"
fi
參考: http://exponential.io/blog/install-nodejs-on-linux/
(改變了兩個動作,一是解壓縮,二是 PATH 的設定;前者是因官網抓的檔案壓縮格式有改變,後者是因為 $HOME/opt/node/bin 需要放在前面以蓋掉原來的設定)
2016年2月15日 星期一
Yet another social bot for Twitter, Facebook, etc
https://www.livecoding.tv/rancoud/
有空也想來玩玩,先記著先;作者是法國人的樣子,他的專案放在
https://github.com/rancoud/RTwitterBot
顯然很多社團被重覆、相同文章洗版,在技術上是沒有什麼問題才對
有空也想來玩玩,先記著先;作者是法國人的樣子,他的專案放在
https://github.com/rancoud/RTwitterBot
顯然很多社團被重覆、相同文章洗版,在技術上是沒有什麼問題才對
2016年2月14日 星期日
machine learning 資源
欣聞林軒田老師開放 machine learning 資源供下載,轉錄其動態如下:
_________________________________________________________________
「機器學習技法」在 NTU-Coursera 上短期內的最後一次重播也已經結束。近期借調至 Appier 後非常忙碌,短期內應該不會重開線上課程。
和「機器學習基石」一樣,我個人的看法是已經錄好的課程最終應該成為公共財。所以利用今天坐火車回台北的時間,我把「機器學習技法」的十六講六十五段影片標題整理了一下,即日起在 Youtube 上公開該課程所有的影片。
https://www.youtube.com/playlist?list=PLXVfgk9fNX2IQOYPmqjqWsNUFl2kpk1U2
投影片則早已放在這裡給大家參考。
http://www.csie.ntu.edu.tw/~htlin/mooc/
敬請各位朋友繼續討論指教,謝謝。
祝大家新春佳節愉快,情人節快樂,也許可以想像未來用機器學習幫你找到最速配的情人!
同場宣傳:「機器學習基石」的影片們
https://www.youtube.com/playlist?list=PLXVfgk9fNX2I7tB6oIINGBmW50rrmFTqf
___________________________________________________________________
2016年2月13日 星期六
github 上托管之 javascript 專案以 node.js 執行之 console 程式之持續整合 (CI)
what's CI ? why ?
從戰略的高度來看,整個 use case 可以由這篇來總結: CI 怎樣帶你遠離平庸?
用比較通俗的話來說,就是建立一個低成本的工作流程
where & when
如標題所言,本文特別要討論的場景是:“github 上托管之 javascript 專案以 node.js 執行之 console 程式”,因為這剛好也是手上案子的實際情況
how
從戰術的高度來說,目前 github 上流行的套餐可以如此總結: mocha + chai + Travis CI + Codecov 使用流程
简单来说,就是使用 mocha 作为测试框架,chai 作为断言库,将项目交给 Travis CI 做自动测试,交给 Codecov 做覆盖率测试。
如果工作流程套用的是 github flow ,那麼協作者會提出 pull request , 此時 code review 可以再參考 代碼審查(Code Review)with GitHub Flow
p.s. github 專案上炫目的 icon 要如何打上去呢? 參考 在github中加入图标
which (alternatives)
Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率 ,覆蓋率測試使用的不是 codecov 而是 istanbul , 另外還有 “自动触发mocha测试” 的小技巧
ref
2016年2月12日 星期五
gnu global + emacs 在 ubuntu 中的安裝及使用
- sudo apt-get install global
- 在 emacs 中執行 M-x list-packages , 進入 elpa ,安裝 ggtags (請注意是兩個 g )
- 在要瀏覽原始碼的目錄中執行 gtags
- 在 emacs 中,要瀏覽原始碼的 buffer 執行 M-x ggtags-mode
- 使用以下指令進行跳轉
--- -------
C-c Prefix Command
ESC Prefix Command
C-c ESC Prefix Command
M-. ggtags-find-tag-dwim
M-] ggtags-find-reference
C-M-. ggtags-find-tag-regexp
C-c M-SPC ggtags-save-to-register
C-c M-% ggtags-query-replace
C-c M-/ ggtags-view-search-history
C-c M-? ggtags-show-definition
C-c M-b ggtags-browse-file-as-hypertext
C-c M-f ggtags-find-file
C-c M-g ggtags-grep
C-c M-h ggtags-view-tag-history
C-c M-i ggtags-idutils-query
C-c M-j ggtags-visit-project-root
C-c M-k ggtags-kill-file-buffers
C-c M-n ggtags-next-mark
C-c M-o ggtags-find-other-symbol
C-c M-p ggtags-prev-mark
C-c M-DEL ggtags-delete-tags
2016年2月7日 星期日
"Learning JavaScript Design Patterns" 讀書筆記
*** 重要
**** 函數
***** 函數是物件****** 可在執行期動態建立
****** 可做為變數值,類似C中的指標/參考, 但又具有屬性/方法
******* 記憶模式 Momento
***** 具有特定的作用範圍
****** hoisting對以var宣告的函數,具有var的作用特性
****** 匿名函式:不污染命名空間
***** 靜態方法vs原型方法;類別呼叫vs物件呼叫
**** 模組模式
***** namespace以樹狀結構組織功能,捨棄java中利用實體目錄的對應方式
***** 宣告相依性
明確限定範圍、使用區域變數以加速
***** private+public
函數中var宣告的成員均為private,必需以附加到this(或任一全域變數)的函數讓外界存取
***** 匿名立即函式/Closure?
提供private作用域,傳入全域物件,回傳物件(或建構函式)
**** 原型 prototype
***** Function.prototype.bind()--改變作用域***** 只要是可重複利用的成員 ,例如方法 ,都應該放進原型裏
**** new的作用
***** 產生空白物件,並命名為 this,最後隱含回傳**** 物件
***** = mutable hash 可改變的雜湊表***** 成員可用 value = object[key]存取
***** singleton / 自我定義建構式
*** 次要
hoisting: var宣告自動被提前到函式頂端
"use strict": 使this不再自動指向全域物件,減少函數不是為產生物件而撰寫時所造成的意外
2016年2月6日 星期六
javascript 中的"閉包( closure )"
定義:
(有沒有講了半天依然沒聽懂的感覺? 我覺得還是寫個 compiler 之後才會比較了解的XD)
閉包是一種特殊的物件,其中結合了兩樣東西︰函數,和函數所建立的環境。環境由任意的局域變數所組成,這些變數是由在閉包建立的時間點上存在於作用域裡的所有變數。
白話文:
只要直接在函數裏引用外層的變數,然後當我們將「函數封閉起來傳回」時,該函數仍然可以正常使用,這就是閉包的概念了。
其實許多的 event handler 都已經採用了 closure 的概念了,它不但是一個 callback 的機制,而且還能存取到定義處所見的變數,因此是一個有效的模組化技巧。
當然你可以說 C 不就已經有函數指標,可以拿來當成 callback 的機制了嗎? 是的,但是 javascript 的語法,可以在函數內部定義另一個函數,不管這個語法是有意造成或無意的,它促成了模組化之外更進一步的 namespace 的控制--除了得到 callback 的函數,沒有人看得到這個 callback 。
當然你可以說 C 不就已經有函數指標,可以拿來當成 callback 的機制了嗎? 是的,但是 javascript 的語法,可以在函數內部定義另一個函數,不管這個語法是有意造成或無意的,它促成了模組化之外更進一步的 namespace 的控制--除了得到 callback 的函數,沒有人看得到這個 callback 。
參考資料:
2016年2月5日 星期五
nodejs 在 windows 平台的套件安裝問題--Windows users are not happy. #629
https://github.com/nodejs/node-gyp/issues/629#issuecomment-151018292
我也不高興了,喵的~
https://github.com/nodejs/node-gyp/issues/629#issuecomment-151018292
而且有 9GB 這麼大(扔)
https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245
下載網址在 https://www.microsoft.com/en-us/download/details.aspx?id=49983
安裝時記得選自訂,還要選安裝SDK
最後設定個環境變數
c:\>npm config set msvs_version 2015 --global
回過頭來說原作者真是酸度破表卻又不失禮數,沒有問候、4個英文字母、身體的任何部位,真是英文寫作的典範。以下摘錄幾句佳句試譯:
As I said, I'm pretty much a newbie and I don't even know what node-gyp does, but what I DO know is that it's a pain to run Windows and install a project with node-gyp as a dependency.
(如我所言我還是個菜逼巴的新丁,巴啦巴啦巴啦,但是我至少知道在你M$的平台上執行、安裝 node 的專案是有多TMD 的麻煩了)
It's bizarre that a nodejs developer needs to install visual studio (even the express edition) in order to be able to work on Windows.
(要個 nodejs 的開發者去安裝 VS (即使是最不佔空間的版本也要佔上9G,以SSD時價來說也要兩個排骨便當的錢你看看),這不是很.奇.怪.嗎?)
With that being said, I'd like to know from all of you what should we do to make windows users fall in the pit of success?
(說了這麼多,我倒是真的很想知道 M$ 的豬諸公們,我們窗戶系統的使用者要怎麼做才能夠不小心的掉到成功安裝/執行的小坑裏呢?)
PS. npm 基本指令
我也不高興了,喵的~
原因
https://github.com/nodejs/node-gyp/issues/629#issuecomment-151018292
解答
我相信對某些人來說 Visual Studio 是必裝的,不過很多人不是OK?(喵的)而且有 9GB 這麼大(扔)
解答2,大推(最多還是要佔掉4G空間就是,我是被用掉3.3G)
https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245
下載網址在 https://www.microsoft.com/en-us/download/details.aspx?id=49983
安裝時記得選自訂,還要選安裝SDK
最後設定個環境變數
c:\>npm config set msvs_version 2015 --global
雜感
回過頭來說原作者真是酸度破表卻又不失禮數,沒有問候、4個英文字母、身體的任何部位,真是英文寫作的典範。以下摘錄幾句佳句試譯:
As I said, I'm pretty much a newbie and I don't even know what node-gyp does, but what I DO know is that it's a pain to run Windows and install a project with node-gyp as a dependency.
(如我所言我還是個菜逼巴的新丁,巴啦巴啦巴啦,但是我至少知道在你M$的平台上執行、安裝 node 的專案是有多
It's bizarre that a nodejs developer needs to install visual studio (even the express edition) in order to be able to work on Windows.
(要個 nodejs 的開發者去安裝 VS (即使是最不佔空間的版本
With that being said, I'd like to know from all of you what should we do to make windows users fall in the pit of success?
(說了這麼多,我倒是真的很想知道 M$ 的
PS. npm 基本指令
2016年2月4日 星期四
工程師最討厭做的事情--兼論以 org mode 實踐 literate programming
網路上看到的,工程師最討厭做的事情
可是老師,有辦法讓寫文件、註解,就像是一陣風吹過那樣的輕鬆嗎?
曾經有人提出這個想法,叫做 literate programming (神人就是神人,想法總是領先時代)
看看手頭的工具,我覺得內建 /*…*/ 等區塊形式註解的語言比較有辦法無痛的實作它;結合 org mode 的話,就是把說明文字打在註解區塊中,在需要看文檔時切到 org mode 這樣。
- 寫文件
- 寫註解
- 寫測試
- 別人不寫文件
- 別人不寫註解
- 別人不寫測試
可是老師,有辦法讓寫文件、註解,就像是一陣風吹過那樣的輕鬆嗎?
曾經有人提出這個想法,叫做 literate programming (神人就是神人,想法總是領先時代)
看看手頭的工具,我覺得內建 /*…*/ 等區塊形式註解的語言比較有辦法無痛的實作它;結合 org mode 的話,就是把說明文字打在註解區塊中,在需要看文檔時切到 org mode 這樣。
2016年2月3日 星期三
GNU GLOBAL / GTAG : 靜態程式碼分析的王者
為何要說 GNU GLOBAL / GTAG 是靜態程式碼分析的王者呢?
相較於 cscope / gnu cflow / ctags / etags 等類似的解決方案,它可以正確的得到巨集展開的結果,而且有 incremental 的更新,在 code base 會變動時是一大利多啊~~
http://www.gnu.org/software/global/global.html 官網,感覺是原作者捐給FSF的
http://www.gnu.org/software/global/globaldoc.html 說明文件
http://ldshyu.blogspot.tw/2013/06/coding-tag.html 中文的各tag系統比較
https://github.com/whatot/whatot-dot/blob/master/vim/global.md 中文介紹
執行 gtags 及 htags 之後,會產生 HTML 目錄,它的子目錄有以下內容:
J: #include 交互參考資料,此標頭檔在什麼檔案的什麼位置被參考到了
D: identifier 交互參考資料,此符號在什麼檔案的什麼位置被參考到了
S: html 化的原始碼
相較於 cscope / gnu cflow / ctags / etags 等類似的解決方案,它可以正確的得到巨集展開的結果,而且有 incremental 的更新,在 code base 會變動時是一大利多啊~~
http://www.gnu.org/software/global/global.html 官網,感覺是原作者捐給FSF的
http://www.gnu.org/software/global/globaldoc.html 說明文件
http://ldshyu.blogspot.tw/2013/06/coding-tag.html 中文的各tag系統比較
https://github.com/whatot/whatot-dot/blob/master/vim/global.md 中文介紹
執行 gtags 及 htags 之後,會產生 HTML 目錄,它的子目錄有以下內容:
J: #include 交互參考資料,此標頭檔在什麼檔案的什麼位置被參考到了
D: identifier 交互參考資料,此符號在什麼檔案的什麼位置被參考到了
S: html 化的原始碼
2016年2月2日 星期二
大型專案的原始碼分析--兼論 preprocessor
在分析原始碼的時候,遇到巨集定義總是令人又愛又恨;愛的是它在寫得好的時候(或讀的人狀況好的時候XD)是可以增進理解;恨是是當它寫得不好,或已經看得很累的時候,這時經常理解不能(冏rz)...
例如,原來 Makefile 當中有以下指令:
可TMD那精美的死線還是擺在那裏啊,怎辦呢?只好直面 preprocessor 了!
(先導知識: GNU: The C Preprocessor 導讀 )
方法一:改寫 Makefile 以展開所有巨集,順便得到 #include 路徑
例如,原來 Makefile 當中有以下指令:
.c.o:
@$(MKDEPDIR)
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) $<
將上述指令改寫
.c.o:
@$(MKDEPDIR)
$(CC) -E $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) -o $@ $<
然後在 terminal 中,執行以下指令
rm *.o
make
rename -v s/\.o/\.i/ *.o
如此可得到副檔名為 *.i 的展開的原始碼,所有的 #include 還有巨集定義等等都被展開了。還有一些 gcc 的參數可以讓輸出比較好看,例如 -CC 可以保留註解等,就按各人需要調整囉~~
(正統的做法參見 http://www.gnu.org/software/cflow/manual/html_node/Makefiles.html#Makefiles)
(前提是你要很熟 Makefile 的語法)
為何需要這個呢?因為目前基於 tags 的原始碼分析程式,無論是 ctags, cscope, gnu cflow ,遇到 INLINE 的函數都失效,只好暫時先這樣處理…但很奇妙的 gnu global / gtags 可以正確處理 ,之後肯定要專文介紹一下
(正統的做法參見 http://www.gnu.org/software/cflow/manual/html_node/Makefiles.html#Makefiles)
(前提是你要很熟 Makefile 的語法)
為何需要這個呢?因為目前基於 tags 的原始碼分析程式,無論是 ctags, cscope, gnu cflow ,遇到 INLINE 的函數都失效,只好暫時先這樣處理…但很奇妙的 gnu global / gtags 可以正確處理 ,之後肯定要專文介紹一下
方法二:利用之前執行 make 觀察 stdout 得到的 -I 參數,以 --cpp -I 參數執行 gnu cflow
根據先前執行 make 的螢幕輸出,得到 -I 參數,以 emacs 24.5 的原始碼為例:
cflow --cpp -b --emacs -T \
-I. -I../lib -I./../lib -I/usr/include/gtk-3.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/libxml2 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/freetype2 -I/usr/include/p11-kit-1 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
vm-limit.c dispnew.c frame.c scroll.c xdisp.c menu.c xmenu.c window.c charset.c coding.c category.c ccl.c character.c chartab.c bidi.c cm.c term.c terminal.c xfaces.c xterm.c xfns.c xselect.c xrdb.c xsmfns.c xsettings.c gtkutil.c emacsgtkfixed.c dbusbind.c emacs.c keyboard.c macros.c keymap.c sysdep.c buffer.c filelock.c insdel.c marker.c minibuf.c fileio.c dired.c cmds.c casetab.c casefiddle.c indent.c search.c regex.c undo.c alloc.c data.c doc.c editfns.c callint.c eval.c floatfns.c fns.c font.c print.c lread.c syntax.c unexelf.c bytecode.c process.c gnutls.c callproc.c region-cache.c sound.c atimer.c doprnt.c intervals.c textprop.c composite.c xml.c gfilenotify.c profiler.c decompress.c xfont.c ftfont.c xftfont.c ftxfont.c fontset.c fringe.c image.c xgselect.c terminfo.c lastfile.c \
-o emacs.b.cflow