2012年3月23日 星期五

透過 ssh 遠端存取 git repository

好,今天來寫個我架設「偽 - git server」的作法吧!

為什麼叫做「偽 - git server」呢?因為他不是真的跑起來一支 daemon 去負責 git 的 access,像是 gitolite 或是 gitosis 那樣。(事實上我也不知道該怎麼把那些東西架起來XD)
由於 git 可以透過 ssh protocol 來 access,當然要善用這點!

以下我分為單人各自使用與多人共用來講:

2012年3月17日 星期六

在 bash (zsh) script 中使用 trap

最近在跑分散式的程式,每次測試都要開好幾隻程式在跑。就算可以寫 script 自動開啟,還是會遇到一個很討厭的問題,沒辦法自動關閉那些屬於 worker 的程式。好像解釋的不太清楚....就是我希望在我程式跑完的時候,或是我把程式強迫終止的時候,我可以同時把好幾個 process 也 kill 掉。特別是強迫終止的時候,因為無論我在最後寫好什麼動作,一旦強迫終止就執行不到了。

於是上網尋找解法,找到了 trap 可以用。Trap 這東西,也就是陷阱...我想他的意思是,會讓你指定的那些 signal 掉入陷阱吧...(笑)。不曉得 signal 是什麼的請自行閱讀 manpage 或是上網找。

這裡提供兩個範例,第一個是測試 trap 功能的範例:
這個範例中,我指定 SIGTERM SIGINT SIGHUP 這三個 signal 會被 trap 抓住,而 trap 抓到後所要執行的指令為 "echo TRAP!!; exit"。注意這邊我加上了 exit 讓這個 script 會在接到 signal 的時候終止,否則它只會 echo 出 TRAP!! 後繼續執行它要執行的動作。如果你沒有另外指定別的離開方法,就必須乖乖的等待 script 執行完畢,或是用 kill -9 (送 SIGKILL) 才能終止它了...

再來是第二個範例:
這裡差不多是一個實際使用的 use case 了,參考自:這篇文章。把需要做清理的動作寫進 function 裡,以我最上面提到的情況就是把該關掉的 worker 程式都關掉,在這裡我就印出個 CLEAN UP!! 代替就好XD。然後在 trap 裡設定它負責清理,另外也在 script 正常結束前清理,這樣就可以保證(大概吧?)清理動作一定會被執行,除非是被 SIGKILL 強迫中斷。

對了...我實際在用的時候其實是用 zsh 啦,不過我試過了,用 bash 也可以正常執行沒有問題。我指的是 script 第一行指定的 shell,不是執行 script 的 shell 唷!

另外還有,我認為 clean_up 應該只要負責清理就好,所以最後小小修改,變成了這樣:
以上,請多多指教!<(_ _)>

2012年3月16日 星期五

Talk (March 29): 寫程式?那些老師沒教的事 - Code Smart; Don't Code Hard

這是確定的演講資訊了....多少人願意來就看我的造化了XD


「寫程式?那些老師沒教的事 - Code Smart, Don't Code Hard」

身為一個資工系的學生,經手過的 C 語言程式想必不少。而我們以前都是怎麼寫程式的呢?有沒有想過,也許寫程式這件事不用如此辛苦?在 C 語言的開發過程中,從撰寫、編譯、測試、除錯,中間碰到多少工具?俗話說「工欲善其事,必先利其器」,以往所用的工具是不是真的「夠利」呢?

如果是成大資工系的學生,想必大一都接受過一段慘痛(?)的日子。我們這些小大一,被壓著去用什麼 pietty 連上 server,還要開什麼 vi 來寫程式。「那是什麼東西?難用死了!」是很多人大一時的心聲。寫完之後還要打好多指令,像是「機西西」...呃,我是說 gcc,後面接上好多難懂的參數,才能把程式編譯完成。 但我一直到了大三才慢慢知道,這樣的環境才是 C 語言最快樂的地方,也要在這種環境下,我們才能很輕鬆的掌握 C 語言的全貌。噢,當然不是非要透過 putty/pietty 連上工作站才能使用到這類環境,在 windows 上一樣可以使用功能強大的命令列環境。(透過 cygwin/msys) 未來在外寫程式,仍然需要接觸這些東西的。

除此之外,有經驗的人都知道,我們要隨時備份寫好的程式碼。至少剛剛會動的那個版本要留下來,不然萬一改爛了可能會改不回來。你都怎麼做的呢?backup_01.zip, backup_02.zip, backup_03.zip, ...?跟同學合作 project 的時候,又是怎麼做的呢?「欸我傳給你了喔!」『你改了哪些地方啊?我 copy 不完啦!』
如果你有上述症狀,請立刻撥打下面這隻專線:
0987-987-987 (哩揪北七-揪北七-揪北七)

這場小小的分享,是我個人在學習克服上面這些問題時的心得。其實早就已經有很多好工具可以解決這些問題,端看我們懂不懂得使用。我會介紹到:vim、gcc、make、gdb、git
由於東西太多了,這天我只會做一個通盤的概論,介紹這些工具分別是做什麼用的,而我們又為什麼需要這些工具,以及這些工具可以帶來什麼好處。
歡迎完全沒有概念的朋友們來學習,也歡迎有一些概念的朋友們來一起研究,更歡迎相當有概念的朋友們來給小弟批評指教。鼓勵自行攜帶電腦現場實作!或是帶著你的問題來共同討論!希望可以達成演講50%、討論50%的目標!謝謝 <(_ _)>

時間:3月29日 晚上7:32
地點:成大資訊系館 4261 4263 教室 (地點更新,新教室僅在原教室隔壁)
講者:畢玉泉 (小畢/CrBoy)
講題:寫程式?那些老師沒教的事 - Code Smart, Don't Code Hard

歡迎宣傳、轉貼以及蒞臨指教 :P