Saturday, February 6, 2016

2016年除夕前的感悟- 易經之『大有』

goldenRule2016

2016所要實踐的一句話,出自易經,其中一卦: 大有。
大有,柔得尊位,大中而上下應之,曰大有。其德剛健而文明,應乎天而時行,是以元亨。
老實講,我聽不懂,或許有些感覺,但我寫不出來。
但有種解釋如下加上我解釋的:

柔順謙遜,精中求細,剛健文明,應乎天時。

前兩句話是某本書抄來的,後面兩句是我補的。
就算不是易經的本意,至少是我目前的領悟。
精中求細其實並不存在於易經的解釋中,但我喜歡這句話,於是我就不改變他了。

我解釋如下:
柔順的表達來解決問題,圖在團結與大心。對執行一個計畫,如果沒有團結,大概什麼也做不了。心很大,才有可能團結不被小事件破壞。

謙遜的語調來面對同僚,圖在同人(易經另一卦),大概意思是獲得眾人追隨,團結後成為眾人的向心力。

精中求細,確保產品品質與進度

剛健文明,信念與判決(非判斷)剛強果斷,語言文字敘述準確清楚。

應乎天時,針對schedule做出最佳的計畫判斷,並做對的事,並程式化自己成為當下所需之角色。

或許你會覺得奇怪,易經不是拿來算命的嗎?難道我我算到此卦嗎?
不是的,我自己不會算命,我只想實踐這個卦,看能不能得到這個卦。

其實在2015年,是特別的一年,真是幸虧有我現在的夥伴。
因此我有非常多的體悟,但總找不到一個玩整時間將它寫下來。
也一直想把這些體悟濃縮在幾句話中,送給未來的自己,給需要的人,如果能透過那段話完全解釋,那是最美好的結果了。
不過之前寫了一篇『峰與谷』的卡片,我想想了解的就先看那篇文章吧。
http://gogosatellite.blogspot.tw/2016/02/blog-post.html
最後我再寫一次,

柔順謙遜,精中求細,剛健文明,應乎天時。

Thursday, February 4, 2016

峰與谷 讀後感

峰與谷

峰與谷

http://www.books.com.tw/products/0010453641

作者:Spencer Johnson,M.D.
史賓賽 強森博士
Makeing Good And Bad Times
Work For You- At Work And In Life.
http://www.books.com.tw/products/0010453641

這本書寫得太好了,我不多說了。 最後主角將老者所帶給他的領悟寫成一個卡片。

卡片

面對順境與逆境

擁抱現實。

無論你是暫時在高峰或低谷裡,問自己:這件事情的實際狀況是什麼。

如何脫離低谷

找出濳藏在逆境裡的契機,加以利用。

放輕鬆,低谷總會過去。怎麼陷進低谷,就反其道而行。
跳脫個人框架:在工作上多盡一份心力,在生活裡多一份體貼。避免和別人做比較。
找出濳藏在逆境裡的契機,趕快採取行動,這樣對你最好。

如何在高峰待久一點

對順境感恩,明智的經營順境。

謙卑,感恩。多做當初讓你爬上高峰的事。好還要更好。
多為別人盡心。為日後的低谷預留資產。

要到達下一座高峰

追求理想願景。

想像自己沈浸在美好未來的樣貌,要描繪出具體,可信的細節,不久之後,你就會為了實踐願景而樂於吃苦耐勞。

幫助別人:

樂於與別人分享!

協助別人也學會面對順境和逆境。

Monday, February 1, 2016

Golang的環境設定與檔案結構

go_file

Golang的工作目錄

一直以來我都是用簡單的方式寫Go語言。在任何一個目錄下。 利用

 go run a.go
 or 
 go run *.go

的方式,並沒有太在意檔案結構的問題。 由於在sublime的環境下,檔案結構的問題就出現了。所以特別研究一下,將這一部分標準化。

GO環境設定

在.bashrc下的重要環境參數

export GOROOT=/usr/local/go
export GOPATH=$HOME/golang/projects/routetest
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin

其中$GOPATH$GOBIN在這次討論中是最重要的兩個參數。

檔案結構

一般說來我們會在$GOPATH下建立以下目錄

這三個目錄的學問實在太大了,必須要好好說明一下。 首先 工作目錄是在src下,最好的方式是在此目錄下建立一個 github.com/專案名/子專案目錄如下

而我的工作區域就在github.com/jonah下,先列出我目前的工作目錄下的檔案

golang中我們會有package main這樣的標示方式,而在route目錄下即為我們package main的工作區域,換句話說,在此目錄下都可以宣告為package main

hhandle是我特別做的一個lib區域,亦即package hhandle的區域。

任何lib可在jonah下的工作區域創建。其package名稱可任意,但最好是跟目錄相關。 這樣做的好處是,我們可以在route.go下import自己創建的lib,如下

import (
        "fmt"
        "github.com/jonah/hhandle"
)

這樣的做法是官網推薦的方式。

https://golang.org/doc/code.html

我們來看看這樣做到底有什麼好處。 當我們需要第三方Lib的時候我們會用下列的語法獲得

go get github/gorilla/mux

此時mux的source code會安裝在src/github.com/gorilla目錄下,而.a檔會被放置在pkg目錄下,如下結果

基本上我們自己的工作目錄,與第三方的工作目錄是處在同一個檔案位階下,其實,這樣的想法的確大大的簡化了工作目錄應該在哪裡的問題。 因此我們的import可能會變成以下這樣

import (
        "fmt"
        "github.com/jonah/hhandle"
        "github.com/gorilla/mux"
)

我們自己寫的lib與第三方的lib的import方法是完全一樣的。其實這麼做是有一種簡潔的美感,與對稱性。

如何做出.a檔與執行檔

當我們從第三方下載的lib我們除了獲得source檔外,我們還獲得.a檔並會自動安裝於pkg/linux_amd64/github.com下,當然這需要GO環境設定符合我們之前的設定。 我們在我們創建的lib下hhandle目錄下執行

go build
go install

你會發現pkg/linux_amd64/github.com下會多出jonah/hhandle.a的檔案。

注意這是lib目錄,亦即我們宣告的package 不為main。 我們來看看如果我們在main目錄下執行上述指令會發生什麼事情

/bin目錄下產生了一個執行檔route。當我們在main下執行go build時,會產生執行檔routesrc下的route目錄。而當執行go install時會將route執行檔搬移到bin目錄下。 當然這是因為我們的環境設定,是做如下的設定

export GOBIN=$GOPATH/bin

很妙的,當我們在我們自創的lib下(import hhandle),我們執行go buildgo install得到的結果是跟在main下(package main)是完全不同的。 這也就是說為什麼我一開始說,這部分的學問實在很大的原因。GO環境變數的搭配,與工作目錄,與go的相關指令,有著很大的關聯性。

Friday, January 29, 2016

golang與sublime

gosub

Golang安裝與環境設定

wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz
sudo tar -xzf go1.5.linux-amd64.tar.gz -C /usr/local
GO環境設定 /etc/.bashrc 中設定
export GOROOT=/usr/local/go 
export GOPATH=$HOME/golang/projects/foo
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOROOT/bin
我們先建立GO project位置
mkdir ~/golang/projects/foo
mkdir ~/golang/projects/foo/bin
mkdir ~/golang/projects/foo/pkg
mkdir ~/golang/projects/foo/src

SUBLIME安裝

這時候我們開始安裝sublime3。
sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer
安裝完後透過sublime設定環境變數 preference ->package Setting -> go sublime-> setting Default -> env
//"env": {},
    "env": {
        "GOROOT": "/usr/local/go",
         "GOPATH": "~/golang/Projects/foo"
     },
透過sublime自帶的安裝plugin,這點實在太優秀了。
ctrl+shift+p
install -> enter
gosublime -> enter
sidebarenhancement -> enter
go build -> enter
可以試試看環境對不對了,我們應該可以看到fmt下所有的function。

Ctags Plugin 安裝

安裝ctags,追蹤source code。雖然經驗上ctags很容易找錯,但我還是裝看看。
在sublime環境中安裝ctags plugin
ctrl+shift+p
install -> enter
ctags
在ubuntu環境中安裝ctags
apt-get install ctags
接下來在sublime的編輯鈕中,build ctags
find->ctags->rebuild ctags
然後你可以透過下列shourtcut key完成function追蹤。
ctrl+shift+.
ctrl+shift+,

Third Party 套件 and auto-completion

可以auto-completion是我選擇sublime的出發點,VIM目前我是無法成功設定auto-completion的。 我們還沒測試如果安裝third party套件後是否還能夠auto-completion。 答案是不行,因此還需要以下的解法才可以,很簡單的。
首先我們先找個套件安裝看看,用mux好了。
go get github.com/gorilla/mux
別忘了安裝git在ubuntu中,否則會報錯
apt-get install git
依照上述方式設定,go get安裝的pkg 會落在$GOPATH中,即你的工作目錄中。 此時先安裝的套件,你會發現無法auto-completion。 這時候你要
cp golang/projects/foo/pkg/linux_amd64/github.com/gorilla /usr/local/go/pkg/linux_amd64/github.com/. -rf
如此一來,就可以auto-completion了,程式碼寫起來也輕鬆多了。

VIM enable

preference -> setting-User
取消ignore_package的設定。
ignore_packages:[
    ""
]
此時你在sublime的操作就跟VI很像了,最特別的是當你:w儲存檔案時,sublime會幫你從新整理檔案的格式。 不再害怕出格式混亂的現麵條式程式碼了。

Wednesday, January 6, 2016

jenkins and git server

jenkinsNgit

Install Git Server

安裝方法於Ubuntu14.04 1。 原本要裝個GitLab來做實驗,但發現實在太複雜了。 因此決定簡單裝個Git Server來玩玩就好。
在Server端
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo install git git-core
$ cd /var/git (目錄位置可以自己決定)
$ sudo mkdir newproject.git
$ cd newproject.git
$ sudo git --bare init
在Client端
git clone ssh://root@localhost:/var/git/newproject.git
接下來測試一下 簡單寫個python小程式 test.py
import commands
commands.getoutput("ls > /tmp/scrrr")
在Client端commit試試看
git add test.py
git commit -m 'adding test.py
git push origin master
把之前的newproject.git砍掉,再試試看clone新的看看
git clone ssh://root@localhost:/var/git/newproject.git
Client
ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub root@172.16.235.128:/tmp/git-admin.pub
Server
apt-get install gitolite
useradd -s /bin/bash -m -G sudo -d /home/git git
su - git
gl-setup /tmp/git-admin.pub
Client
git clone git@172.16.235.128:gitolite-admin.git
現在我們可以用git了

與Jenkins整合

每兩分鐘更新一次再Build periodically的schedule中設定
*/2 * * * *
Jenkins上選擇 https://github.com/jonahwu/test 作為在Jenkins上的Repository URL
這部分只能用http,不能用git,因此之前的git安裝無法運作在Jenkins上。
安裝完後每兩分鐘就會去github上下載代碼,而此下載位置為
/var/lib/jenkins/job/tt/workspace/
/var/lib/jenkins/job/tt/workspace/default
此內容包含
a.py
readme
haha.txt
有趣的事,下載的位置會直接解開在workspace下,並且同時也放在default裡。我以為他應該會解在自己的目錄,結果不是。
在shell script中,因為此目錄為系統可看見的目錄,我們可以直接用
python a.py

  1. http://rexxoncoding.blogspot.tw/2015/03/ubuntu-linux-git-server.html 

Monday, December 14, 2015

如何在blog貼上code

經過一番折騰,我不想用任何改變 CSS的方式貼code了。

我採用,先將code轉成HTML後,在BlogSpot中切換成HTML mode後,將轉成HTML的Code直接貼上。
轉code網站為下

http://hilite.me/

好處是有各種語言Golang, Python等。

另外一種方式是選擇一個編輯器再轉成HTML並貼在blogspot的html編輯器內。
編輯器,我選擇用markdown編輯器。目前在MAC下測了三款Markdown editor
1. MOU
2. TYPORA
3. MACDOWN
最後選擇MACDOWN因為轉成HTML與blogspot相容性最佳,也就是,在編輯器上呈現的跟blogspot呈現的最接近。
以下為測試結果,與編輯器內非常接近。

lala

我不知道拉
我我我
hahaha

我我我

package main
import (

)