2011年8月6日 星期六

丹特麗安的書架(手工)

這一季的新翻動畫~~
在劇中描述著各種幻書,如何因為擁有者的心態產生不同的效應
女主角"妲麗安"為通往"丹特麗安"書架的入口~





下面是過場畫面的手工……


進度 1% 時
Zoom in (下圖)
































目前進度到這……剩下的太難了…
估計大約是 10%左右吧……"汗"




原型:

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

2011年5月29日 星期日

[ linux ] date

在 linux 下,要碰到時間相關的事情~
就不得不用到內建的程式  data
下面來介紹幾個常常用到的功能……


date
輸出系統時間。


date +%s
輸出unix 時間
是從 utc 時間  1970/01/01 00:00:00 起~到現在的總秒數~

如果要自訂輸出時間的格式~
date +"%Y/%m/%d %Z %H:%M:%S"
2011/05/29 UTC 15:08:16


%Y   年
%m   月
%d    日
%Z    時區
%H    小時
%M   分鐘
%S    秒

後面的 小時、分、秒 都是大寫~ 這樣可以跟 月份的 m 做區分,蠻好記的。
如果忘記的話,可以直接 date --help
裡面會有更多細部的參數可以用~~~


再來是查詢時間的用法~~
date -d ' -2 day'
在 -d 這個 option後接上要查的時間
例子是兩天前,也可以有其它的間隔~~ 
像是  hour week year 都可以~~

打數字也OK,它的接受度出乎我的意料:p

date -d ' 2011/11/11 UTC 12:12:12'
Fri Nov 11 12:12:12 UTC 2011

這時候會想說為什麼要打數字…? 因為,它可以用在時間格式的轉換~
在做一些監控的 service 時,直接把時間統一指定成 UTC 時間的  unix 格式是很方便的!
可以開個變數 ~
WhatTime=`date -u +%s`
echo $WhatTime
( -u 是指定時區為  UTC )

那如果是從其它軟體、系統下載入的時間,也可以寫個 bash 呼叫  date來做格式轉換~
date -d ' 2011/11/11 UTC 12:12:12' +%s
1321013532
只要再後面補個 + 再打上自己想要的輸出格式~~

date  常用的功能也介紹差不多了~~

下面要不忘提醒一下,校正時間相關的指令
在爽爽的使用這些系統時間時,如果沒有把時間同步做好的話
收集到的數據可信度就會下降啦!!

對時用的軟體  ntpdate
可以直接手動執行校時動作
ntpdate <校時網址>

台灣的有下面幾個可以用~~~  (在 時間標準局 網站上可以查得到)
tock.stdtime.gov.tw
watch.stdtime.gov.tw
time.stdtime.gov.tw
clock.stdtime.gov.tw 
tick.stdtime.gov.tw

之後,可以把對時動作寫進 crontab 裡,讓系統每天自動幫你對時~~
vim /etc/crontab
加入下面這一行 
10 5 * * * root /usr/sbin/ntpdate tock.stdtime.gov.tw  &> /dev/null
( 對時的時間是 每天的 5 點10 分,如果要改成早上四點可以寫成…
10 4 * * * root /usr/sbin/ntpdate tock.stdtime.gov.tw  &> /dev/null


下面補個快速查詢表^ ^

date

date +%s

date +"%Y/%m/%d %Z %H:%M:%S"
2011/05/29 UTC 15:08:16

%Y   年
%m   月
%d    日
%Z    時區
%H    小時
%M   分鐘
%S    秒

#hour week year 
date -d ' -2 day'

date -d ' 2011/11/11 UTC 12:12:12'
Fri Nov 11 12:12:12 UTC 2011

WhatTime=`date -u +%s`
echo $WhatTime
( -u 是指定時區為  UTC )

date -d ' 2011/11/11 UTC 12:12:12' +%s
1321013532
只要再後面補個 + 再打上自己想要的輸出格式~~

ntpdate <校時網址>



2011年5月25日 星期三

Define some search engine about EGI grid operation on chrome

Add there link on   Tool> Option >Search engine manager

Some web page we'll frequently to use... like EGI GUSS ticket system, GOCDB, ROCNagios, bababa... ...
I define some engine as below.

engine Des.       Keyword        engine_link
GGUS                    ggus                  https://gus.fzk.de/ws/ticket_info.php?ticket=%s

Twiki_cern            cernsearch      https://cernsearch.web.cern.ch/cernsearch/Twiki.aspx?query=%s&scope=EGEE
GOCDB                 gocdb             https://gocdb4.esc.rl.ac.uk/portal/index.php?Page_Type=Submit_Search&Search_String=%s
RocNAGIOS          rocnagios        https://rocnagios.grid.sinica.edu.tw/nagios/cgi-bin/status.cgi?hostgroup=site-%s&style=overview
RocNAGIOS_host   rocnagiosh      https://rocnagios.grid.sinica.edu.tw/nagios/cgi-bin/status.cgi?host=%s
glite-APEL              apel                http://goc-accounting.grid-support.ac.uk/rss/%s_Sync.html





GGUS
When you want to open the ticket #00000
Then you can type only "ggus<tab>00000" Then open the ticket page.

GOCDB
GOCDB save the site page no any site information on the link.
Some time we need to find service or site on GOCDB.
Only can use there search engine.
Now, add the search into chrome.

RocNAGIOS (for APROC)
type the sitename to link your site service status page.

RocNAGIOS (for APROC)
type the service name

glite-APEL
type your site name to open the accounting data publish status about your site.


------------------------------------------------------------------------------
GGUS update the link......
GGUS                    ggus                  https://ggus.eu/ws/ticket_info.php?ticket=%s

XOR 運算子

Xor 運算子

在 C++ 裡面是用   ^  或是  XOR
兩變數相互作位元的羅輯互斥運算。

用個例子來介紹一下它的運算
A     0 1 0 1 1
B     0 0 0 1 0
----------------------------   A, B 分別是表示某個二進位的數字
C     0 1 0 0 1

C=A^B

由上面可以簡單看出,如果是 0 0 的組合得出來還是 0
如果是 1 0  就是 1
1 1 則得出 0

有幾個特別的情況~~
1. 任何數對零作用都是自己。
A  1 0 1 1
B  0 0 0 0
-------------
    1 0 1 1   = A
2. 自己對自己作用變成零。
A 1 1 1 0
B 1 1 1 0
-------------
   0 0 0 0 = 0

3. 照順序做下面三個指向完,A B 的值就對換了。
A = A ^ B
B = A ^ B
A = A ^ B


★ 這個算子的特性可以用做一些 mapping 、 換位的動作。


我會發現這個有趣的算子是在跟同事討論一個測網路流量的軟體中發現的~
程式的運作原理是指定一塊空間的資料,然後用 MPI 的function 讓它在 nodes 間互相copy。
那這時候,它必需要指定copy 檔案到除了source 端以外的其它node。
這時候就可以用上這個算子了。

把自己 rank 的編號當成 A 依度對 B( 0<B< max ) 作用。
就可以得出目的地了 ( max - 1 個)

int pair(int np,int p,int k)
{
    int q;
    q = p^k;
    if(q>np-1)
       return(-1);
    else
      return(q);
}



總覺得這種算子應該還有一些其它用途~
改天有聽到,再補充吧~~~


2011年3月10日 星期四

ubuntu Rhythmbox EQ plugin

Rhythmbox 是 ubuntu 底下內建的音樂播放程式。
不過有些常用的功能,它並沒有寫進程式裡。
像是等化器( EQ ) ,下面就是提到要如果自己下載安裝它的 EQ外掛。


Rhythmbox Equalizer
為一套 Rhythmbox 的外掛,通過在網路下載 .tar.gz 檔
自行解壓縮到正確的路徑。
之後就可以在 Rhythmbox > 工具  叫出等化器的調整面版了。


#下載外掛程式
wget rbeq-X.X.tar.gz

#複製、解壓縮到家目錄下的 .gnome2
cp /home/user_name/.gnome2
tar zxvf rbeq-X.X.tar.gz

#解開來它的目錄結構為:/rhythmbox/plugins/rbeq
#COPY 一份到系統內

cd rhythmbox/plugins
sudo cp -r rbeq /usr/lib/rhythmbox/plugins/

#之後直接打開Rhythmbox 就可以看到了









2011年3月3日 星期四

[chrome] switch to tab

Chrome 的連結列工具 omnibox?
http://blog.chromium.org/2011/02/extending-omnibox.html


討論串提到的幾個外掛。
Switch to Tab ( sw )
https://chrome.google.com/webstore/detail/gbfhhcljihbgcobpfnceegfmooomhhli#
History Search ( h )
https://chrome.google.com/webstore/detail/bojcckfnoicpmfgjhhoncpinbmechmkl#


switch to tab
chrome 在一個視窗下同時開很多子分頁時,它並不會為了保留等寬的tab
而在左右兩邊留下移動的鍵頭。

但缺點就是很難分辦那些密密麻麻的tab 是什麼分頁了。

switch to tab 就是用 omnibox 的工具,讓你用該搜尋工具找到你要的tab。
key work ( sw )

history search 一定是一個使用 omnibox 搜尋自己的 history
目的一樣是為了能更快、更方便的找到自己要的網頁。

不過兩個外掛主要都是針對網址搜尋。
如果對網址沒有印象的話,就不太好用了。




另外一方面:
便利 <=> 隱私

  1. http://www.zdnet.com.tw/news/software/0,2000085678,20131482,00.htm
  2. http://chinese.engadget.com/2010/12/08/google-spruces-up-chrome-with-instant-search-from-the-omnibox-o/

2011年2月2日 星期三

免年~新春年假開跑嘍~~~

告別虎年,2011的免年~~~~
在新春期間除了一些例行性的活動外
其它多出來的時間,可以任由自己喜好來決定要把它壓在哪些事情上XD


一直以來都有計畫著,想要整理我電腦長久以來累積的資料。
包含日劇、動畫、音樂、原文書……等。

整理時,就順便複習起來了~之類的!?

像這樣一部一部翻看、然後寫寫記錄
回憶以前觀看時的心得,還有那個時間點下發生的種種~

開音樂一首一首聽~~
像是大一時剛買耳罩式耳機,戴著睡覺時都聽"零"、"獨立"…
大學某次寒假重打Diable時,黃義達的"那女孩對我說"剛出XDDD
瘋跑跑卡丁車時,都聽"舞孃"~~




今年這個過年,是在台中住這麼多年以來~
再次搬回桃園住。
趁年假時在房間裡繞繞走走
摸摸小東西、看看小說~~~也無非是一個不錯的選項!




那說了這麼多了,來結個尾~
希望新的一年,凡事都可以快樂順利^ ^

2011年1月9日 星期日

code test

<pre class="brush: html;">this is a test</pre>




#!/bin/bash
if
fi
some thing work 
echo