2011年6月28日 星期二

打開了之後……

當我忍不住打開一道門之後…
就開始多多少少有東西加了進來

人事、聲囂……

越來越多、越來越多…不停的塞了進來


現在回頭看,已經是喧鬧不堪了!!
沒有多掌握到什麼,反而失了大局。



這就是衝動嗎??…………

2011年6月23日 星期四

[ linux ] ssh (1)

★ 大量使用 SSH 發送指令時,可以在 ~/.bash_profile 裡加入一些 alias 節省自己的時間
alias opssh='ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.op -lroot'
alias opscp='scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.op -o user=root'
StrictHostKeyChecking  這個參數設成 no 時,可能在第一次登入時,不用打 yes。




★ 從 batch 上灑 job 讓 worknodes 自行確認正反解
for((i=190; i<200; i++)); do ssh worknode-$i.doman.name "host \`hostname -i\`"; done





★ 下面兩個例子,利用SSH 查看底下的 node 的特定 process 
並執行 kill 來砍掉特定的 process ~~


for i in `cat host_list2`; do opssh $i "hostname; ps aux|grep job_snmp"; done


for i in `cat host_list2`; do opssh $i "hostname; kill -9 \`ps aux|grep job_snmp|awk 'BEGIN {FS=\" \" } {printf \$2 \"\t\"}'\` "; done



上面比較特別的是在兩個雙引號  " "   之間的指令~,如果有特殊字元要記得用反斜線跳脫。

像  執行會用到的  ` `    
awk  內用的到的 " "


2011年6月19日 星期日

[ linux ] time 時間控制

在 linux 下使用 shell script,
要進行一些定時的動作,雖然沒有辦法像 c 直接摳 lib準給你看~
但也是有一些做法啦~~

下面是我使用的方法、有土法煉鋼的感覺XD

首先是用 date 來叫系統的時間,標計不同動作之間所花費的時間。
再利用 sleep 把剩下的時間花掉。
這裡 sleep 的時間是變數。會隨著每次執行時,經過不同時間標計,跟欲停等的時間相減。

這樣就可以讓程式更精確的掌握時間。

date 指定輸出時間,可以使用 %N 輸出位數到達 ns (雖然極限還是要看系統本身)。
這樣就可以讓 sleep 時間更精細。

下面的例子是假設我執行一個動作,是 sleep $1 輸入的時間。
那我想要每十秒做一次。
t1, t2 是兩個不同時間的標計
那 t3就是用來計算剩下來,要等待的時間。

[root@local tmp]# cat time_test.sh
#!/bin/bash
time_step=10.0
t1=`date -u +%s.%N`
sleep $1
t2=`date -u +%s.%N`
t3=` echo "scale=9; $time_step-($t2 - $t1)" |bc -l`
sleep $t3
[root@local tmp]# for ((i=1; i<=3; i++)); do  time sh time_test.sh 2.222; done

real    0m10.015s
user    0m0.000s
sys     0m0.000s

real    0m10.017s
user    0m0.000s
sys     0m0.000s

real    0m10.017s
user    0m0.000s
sys     0m0.004s

上面用 time 來幫忙測試修正後的準度是多 0.015秒左右。


現在改成真實情況下~~~現在我要監況系統上 每秒鐘 page 的變化。


#!/bin/bash
while [ 1==1 ]; do
        tt=`date -u +%s.%N`
        #echo -ne "$tt"|awk 'BEGIN {FS="."} {printf $1 "\t" }'
        echo -ne "$tt\t"
        cat /proc/meminfo|awk '{ FS=" "} $1=="Dirty:"|| $1=="Active:"||$1=="Inactive:" {printf $1 "\t" $2 "\t" }'
        echo
        t2=`date -u +%s.%N`
        t3=`echo "scale=9;1-($t2-$tt)"|bc -l`
        sleep $t3
done
cat /proc 下的一些系統資訊
再 pipe 一個 awk  的指令,指定抓出 dirty, active, inactive page 容量的這三個資訊。
從結果看來,每次抓取 data 的時間可以控制在 0.005秒左右的時間誤差。



[root@root local]# sh view_page.sh
1308418954.922866000    Active: 528868  Inactive:       14413628        Dirty:  0
1308418955.927929000    Active: 528768  Inactive:       14413628        Dirty:  24
1308418956.932796000    Active: 528772  Inactive:       14413624        Dirty:  32
1308418957.937796000    Active: 528836  Inactive:       14413624        Dirty:  32
1308418958.942785000    Active: 528828  Inactive:       14413624        Dirty:  32
1308418959.947850000    Active: 528840  Inactive:       14413624        Dirty:  120
1308418960.952689000    Active: 528856  Inactive:       14413624        Dirty:  120
1308418961.957697000    Active: 528848  Inactive:       14413628        Dirty:  120
1308418962.962704000    Active: 528836  Inactive:       14413628        Dirty:  148
1308418963.967793000    Active: 528848  Inactive:       14413628        Dirty:  148
1308418964.972579000    Active: 528876  Inactive:       14413620        Dirty:  8




當然,這些都只是以現有的 bash 組合一些工具,盡可能的做出來。
我相信如果使用程式語言,應該還有更精確、嚴謹的作法~~~

改天有機會再研究嘍~~~~

2011年6月12日 星期日

忙錄有感…

看的多,記的少。
       做的多,寫的少。
經歷的多,留下來的很少………

2011年6月5日 星期日

抽象化。

前一陣看到一個有趣的議題~它描述資訊世界中,眾多的抽象化處理。
雖然為我們帶來很多便利;提升不少程式設計師的產力。
但卻也在這個世界埋下了,有機會造成崩壞的因子。

它舉了 TCP/IP 為例子,TCP 是一個"可靠的網路傳輸協定,但是它卻是建在 IP 這個不可靠的通訊協定上。
這可以有兩種說法~一種是,利用 TCP 的各種確認機制盡力達到"非常可靠"。另一種說法就是…拿上層的協定來催眠自己,說這整個過程沒有問題了!!

(目前 TCP/IP 我完全沒有什麼概念,並沒有辦法很細節的解釋上面的例子)

不過,這個議題還是引起我的注意~~
它另外題到了 SQL語法的例子;相同動作,不同 query 的語法,會造成效率很大的差距。
這就是一個很常見,在抽象化之後,被架空的結構。
也就是就你眼前所見,完全沒辦法理解它發生的原因。因為底層有太多太多的步驟被包裝成來了!!
當這些包裝的發展越來越好的時候,能進入這個圈子的人就變多了~
可是懂得包裝下,複雜繁鎖、重重機關的人將變少了


大量的工具、語法,幫我們把背後的工作都包裝起來~
SQL 我們不用寫排序、列表的程式,不用去看現在最快的演算法是什麼。只要會下 SQL query 就好了。
寫 Email、寫網誌~我們不用手刻檔頭、不用自己加標籤。
在系統上,我們寫入檔案,不用管它要寫到哪個磁柱的那個磁區。它的上層還有 Block map , Block group 才到記憶體的 page layer 。
多的是抽象處理時,帶來的便利~~~

不過不知道哪天、哪個程式上,產生了一個 bug 會讓整個系統崩潰,讓大家措手不及。

避免那個世界末日的來臨?
在程式語言上,可能可以在編譯器上動手腳。確認程設工程師的語義。提高面對不同寫作習慣的理解~~bababa。
( 這些可能就是現在寫編譯器的人在做的事吧? 好好奇喔…)

但是程式言自己本身語法的正交性,這個就是天生的了…已經問世的語言,他們大概沒辦法在語法上做什麼太大的更動…除非是砍掉重練。

目前我還只是初涉資訊這個領域,對於發展的過程、歷史大多一知半解,打打嘴砲。或許改天了解更多之後,會再對這個議題有不同的看法~^ ^





題外話~~抽象化聯想到的一些往事……
大學在修量子物理時,就大量使用很多抽象的算子、算符來代替每個粒子位置、動量…
看到題目時,常常就只是無腦的把它的算符列一列,式子套一套就衝了。
埋頭算了一大票~~回頭看時,都忘記我算的這些都東東都不單單只是個數字,都還有他們要滿足的物理定律。
這應該也可以算是抽象化造成錯誤的直覺……。
裡頭…也因此有人的想法被架空了~~~ㄏㄏ

2011年6月2日 星期四

[ chrome ] Yet Another Google Bookmarks Extension

Yet Another Google Bookmarks Extension
一套整合 google bookmarks 的外掛

可以直接在 chrome 的工具列上點開 google bookmarks
它把 bookmarks 的標簽做資料夾,遊覽起來非常方便。

要新加網頁到 google bookmarks 的話,可以直接右鍵。
它已經把選項放到右鍵的欄位裡了。
https://chrome.google.com/webstore/detail/jdnejaepfmacfdmhkplckpfdcjgbeode