[MOOCs][coursera]R-Programming 學習心得

前言: 主要是想了解一下,R-Programming 有什麼樣在大型資料處理上的優點.以及為何許多Data Science 都會選擇使用R作為資料處理的主要程式語言. 這一篇是一個月來的修課心得,主要整理一些自己的筆記. 心得: 學習玩 R Programming 會覺得其實R是蠻值得花時間學習的.個人提供一些心得如下: R的資料型態很特別,很”資料導向”. 詳細可以參考這篇R資料格式教學 R對於資料的操作也很特別,尤其是對於data frame的操作思維是其他語言不容易見到的. 透過 row 跟 col 直接來尋找,取出並且操作. 許多函數都相當的直覺,很適合初學者學習.比如說想找有幾筆資料就打nrow()想知道欄位名稱就打colnames(),要算平均就打 mean().也難怪聽說R都是一些數學很好但是可能是程式設計的初學者. 課程筆記: 第一週 課程內容: 本週課程內容主要是教導基礎的R-Programming,R的資料格式提供了不錯的資料處理能力.舉幾個例子來說: vector 產生指令: c( ... ) 產生出的vector會變成同一個class,不同元素會採取比較寬鬆的class來包括 如果你打 x <- c(1, 'a') 則會把全部元素轉成 character (包括 1) list 產生指令: list( ... ) 跟vector不同,每個元素可以是不同class 操作方式: 給值: x <- list('a', 2, TRUE) 取用: x[[1]] # 'a' matrix 產生指令: matrix( ... ) 每一個元素都是integer 可以直接給值 x <- matrx(1:6, nrow=2, ncol=3) 也可以透過 cbind() (column bind) 或是 rbind() (row bind) 來組合出matrix 資料處理上,R 其實還挺方便的: x <- list(10, 5, 7, 20, 1, 3) // 找出 所有 x > 10 x[x > 10] [[1]] [1] 20 // 找出 x>10的index which(x>10) 第二週 課程內容: 主要講解control flow (if, for, while …) 跟Function and scope. 主要提提scope: Function中可以define function: #cube 裡面還有一個 function n*n cube<-function(n){ sq<-function() n*n n*sq() } Free variables #指的是並沒有被清楚assign 的變數 cube<-function(n){ sq<-function() n*n n*sq()+y } # 這個例子裡面 y就是 free variables Lexical scoping v.s. dynamic scoping lexical scoping: free...
繼續閱讀

[新聞與心得]微軟開源winobjc

本日最紅的github (不到24h 超過2000+ star),莫過於微軟的winobjc,玩了一天分析一下: ###先講結論: ####想使用的話.. 還不用急著用.. 除非你想幫微軟土炮iOS 所有foundation XDDD 首先這是一個把你的iOS App ObjectC的code 透過vsimporter轉出一個 VS solution.然後透過VS2015 的clang compiler 編譯成 Windows Universal App (or Windows Phone App) 你能想到的 UIKit AVFoundation 都是土法透過DX11自幹出每一個功能(reverse engineering)… 所以要開源請大家一起幫忙土炮 3.除了github 上面提到的一狗票還沒成功之外,其實就算是UIKit 也有很多基本的class功能也都沒有土炮出來.. 更複雜的BLE 跟Map當然也都還沒有 (等你幫忙XD,有人說.. 路還很遠) License 採取MIT不過不少人看到裡面的程式碼都是copy & paste 很多其他的人的心血 BigZaphod/Chameleon 跟 mono/CocosSharp .. 應該有更多…. 根據微軟說的.. 這部分的核心 clang compiler 不會 open source XDDDD 參考資料 Hacker News MSFT Blog
繼續閱讀

[Golang]透過brew來做Golang的版本切換

前言: 本來想在Mac OSX上面使用gvm來管理Golang 的版本切換,主要是因為想切到 Go 1.5 beta來玩玩新東西. 不過昨天去GTG聚會之後,學到brew switch之後,覺得整個很威啊… 這裏把幾個筆記記錄一下: ###指令集: 使用brew安裝Golang //把brew的fomulae更新到最新版本 sudo brew update //使用brew安裝Go brew install go 更新版本 //拿目前最新版本 Go 1.5 beta3 舉例 brew upgrade go -v=1.5beta3 --devel //注意.. 就的版本 Go 1.4.2 不會從你的brew位置移除 //可以查詢 brew info go: //目前系統有安裝兩個版本.... 使用的是1.4.2 go: stable 1.4.2 (bottled), devel 1.5beta3, HEAD Go programming environment https://golang.org /usr/local/Cellar/go/1.4.2 (4584 files, 276M) * Poured from bottle /usr/local/Cellar/go/1.5beta3 (5357 files, 277M) Built from source From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb 切換版本 //使用brew switch來切換 brew switch go 1.5beta3 //螢幕顯示 Cleaning /usr/local/Cellar/go/1.2.1 Cleaning /usr/local/Cellar/go/1.4.2 Cleaning /usr/local/Cellar/go/1.5beta3 3 links created for /usr/local/Cellar/go/1.5beta3 //如此就可以切換.... 不過檔案不會移除 反安裝版本 //使用brew uninstall brew uninstall go //只會移除目前使用的版本... 不過由於原本目錄沒有指向新的,所以功能都無法使用 //將目前使用的版本切換到 1.4.2 brew switch go 1.4.2 可能會發生的錯誤 切換Go版本,然後跑go build可能會發生以下的錯誤: package . imports runtime: C source files not allowed when not using cgo or SWIG: atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c mcache.c mcentral.c mem_darwin.c mfixalloc.c mgc0.c mheap.c msize.c os_darwin.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c signal_unix.c stack.c string.c sys_x86.c 解決方式(solution for “C...
繼續閱讀

[研討會心得][GTG14][Golang]第十四次的Golang Taiwan聚會

前言 小孩出生後難得可以參加研討會GTG#14,主要也是想看看Go 1.5的一些新功能介紹. 第一階段: tka - 用 Golang 幫 Ruby 加速 筆記: buildmode=c-shared: 啟動版本: Golang 1.5 beta2 環境: linux / android (win/mac 不支援) 資料結構不同: GoInt8 -> signed char GoString -> char *p, int length Ruby FFI: ruby package to load dynamic libraries. 呼叫方式: require 'ffi' require 'benchmark' module LibGo extend FFI::Library ffi_lib './libgo.so' // (fn) (input) (output) attach_function :fib, [:int], :int end 效能比較 簡單功能 Ruby > golang 五倍 fibinacci Golang > Ruby 二十倍 參數挑選 使用GoString 與 使用C.String 結果: C.String 會比較快 原因: Ruby 轉 Golang string 需要配置兩個參數 (char * 與 length) Q&A C-Shared GC Not tested yet. C++ binding with Go 速度應該沒差 其他: 有介紹到的golang Language package看起來很好用 第二階段: 用 Go 寫前端, GopherJS 優劣分析 Slide: Full-stack go with GopherJS from Poga Po 筆記 ** Fullstack Go** GopherJS Goroutines works in JS JS s signle-thread GopherJS provide roroutine scheduler. Examples: DOM Callback 效能: 測試五千個goroutine來選轉圖片是可以接受. Gocha No dead code elimation Use js not fmt to...
繼續閱讀

[JENKINS]使用Jenkins部署Golang Server

##前言 想要把Server部署(deployment)自動化,於是又把Jenkins拿出來用. Service Deployment PHP Service 要部署PHP Service其實很簡單,主要就是把檔案*.php複製到apache目錄底下就好. 在Jenkins抓完Git之後,新增一個”執行Shell” echo "Deploy server1..." mv pserver1/*.php /var/www/html/server1/ Go Service 由於Server上的Golang Service使用screen在背景跑.要部署要分成幾個階段: Build Go execution file 這裏有兩個approach一個是使用Go Plugin for Jenkins,而我是直接使用command line跟系統參數.確認go env可以抓到正確的環境參數: 在Jenkins抓完Git之後,新增一個”執行Shell” echo "Building Go SERVER" export GOPATH=/YOUR/GOPATH cd YOUR_GO_PATH rm ORI_GO_EXECUTION_FILE go build -v Kill current service and start new service 在Jenkins build好Go之後,新增一個”執行Shell” echo "Deploy Server" cd /YOUR/PATH sudo ./go_server_restart.sh 這裏有shell script 的內容: #!/bin/sh cd /YOUR/PATH COMMAND_GO_SERVER=/YOUR/PATH/go_server go_server_pid=`pidof ${COMMAND_GO_SERVER}` if [ $go_server_pid ]; then date +"%Y/%m/%d %H:%M:%S-Go Server Restart" kill -9 $go_server_pid sudo screen -d -m ./go_server date +"%Y/%m/%d %H:%M:%S-Restart completed" else sudo screen -d -m ./go_server date +"%Y/%m/%d %H:%M:%S-Start completed" fi 關於Jenkins權限 這裏要注意,如果要跑mv 或是kill -9 需要有root的權限,這樣需要把jenkins的權限調高.細節可以參考How to run a script as root in Jenkins? 修改Sudoers sudo visudo 增加jenkins ALL = NOPASSWD: ALL 如果要更改檔案後commit回去 [2015/10/21 update] 如果希望能更改檔案後,自動的push回去的話. 主要要參考這一個stackoverflow 主要的問題是jenkins的每一個action裡面的git 是沒有紀錄的(因為是工作區) 所以解決方式是跑git checkout master.不過這樣一來在那邊的git 的id 會亂掉. 比較建議的做法是另外開一個資料夾,然後把檔案複製過去再去commit jenkins a repo build file copy destination files to b folder (the same a repo)...
繼續閱讀

[Golang]將開發環境從sublime text切換到vim

##前言 主要是vim-go版號進步到了1.1,在社群裡面大家一面倒都使用vim來作為Go的開發環境.所以還是來試試看. ##安裝 初始VIM環境 清乾淨環境,避免之前有裝過太多plugin rm -Rf ~/.vim rm ~/.vimrc 安裝vim-pathogen 先要先裝vim-pathogen,這個可以幫助我們接下來要安裝的一些工具. mkdir -p ~/.vim/autoload ~/.vim/bundle && \ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim 接下來要編輯vim ~/.vimrc: execute pathogen#infect() 安裝Vim-Plug 先裝vim-plug,來管理vim的plugin curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 透過Vim-Plug安裝 Vim-go 記得還得編輯設定檔 vim ~/.vimrc 把以下加上去 call plug#begin('~/.vim/plugged') Plug 'fatih/vim-go' call plug#end() 還沒完,還需要啟動pluginstall vim :PluginInstall 他會把vim-go裝起來,透過vim 去打開go檔案,就會有基本的syntax highlighter 一些vim-go進階設定 根據vim-go作者建議,你可以把以下部分加上去vim ~/.vimrc: 打開各種syntax highlighter let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_structs = 1 let g:go_highlight_operators = 1 let g:go_highlight_build_constraints = 1 各種快速鍵,其中 代表的是 '\' au FileType go nmap <leader>r <Plug>(go-run) au FileType go nmap <leader>b <Plug>(go-build) au FileType go nmap <leader>t <Plug>(go-test) au FileType go nmap <leader>c <Plug>(go-coverage) 把go-fmt 換成 go-import 強烈推薦 :p let g:go_fmt_command = "goimports" 初始安裝完成 到目前為止,你可能會需要使用的功能如下(都是在vim下面) #Save it and check goimport result :w #Build current project :GoBuild #Run it :GoRun #Run Go Run directly \r #Run Go Build directly \b #Go to definition g d monokai 顏色配置 如果你跟我一樣喜歡sublime text的monokai配色,你一定要跟我這樣弄: 從fatih/molokai下載molokai.vim 到...
繼續閱讀