發表文章

S.O.P. Standard Operating Procedure 標準作業程序?

從題目上的問號就知道本文作者對這東西到持著懷疑的態度 ... 先來看看兩則新聞(理論上引用是應該附上連結的,但因為時間久了就會找不到,所以大意描述之) 1. 「院長,快來救命!」 劉揆眼眶紅 對於夜宿高雄,新聞局長蘇俊賓解釋「這是前一晚就決定的。」他說「 災情超乎預期,不能沿用既定的SOP(標準作業程序) 」;據悉,九二一地震發生時,劉兆玄任副閣揆,第一時間也曾夜宿南投災區。 2. 英勇對抗搶匪是錯的? 銀行員遭開除! 27日當天,一名身形消瘦、頭戴便帽、穿黑色衣服和戴太陽眼鏡的29歲遊民,把一個黑色背包推過櫃台,要吉姆裝錢。當時,吉姆想確定這遊民是否真的持有武器,便衝向這名遊民,遊民隨即從大門逃跑,吉姆則緊追在後,並在路人的協助下,制伏這名搶匪,等待警察前來處理。 但銀行給行員的訓練和要求,是要遵行搶匪的要求、避免對抗,讓搶匪能儘快離開銀行,勿使危險情勢升高,因為這些錢已有聯邦保險。 警方和聯邦調查局也不鼓勵這種與搶匪對抗的行為,西雅圖警察巡官惠特康指出,當面對暴力犯罪時,最好要順從,貿然採取行動或予以對抗,可能導致本人或旁觀者受傷,於是吉姆就在30日被開除了。 好了,請問觀眾, 「標準作業程序」到底該不該讓使用者因時制宜的調整? 如果能調整,調整出了問題是誰的責任? 如果不能調整,既有的程序無法應付眼前的情況時,該怎麼辦呢?? 東方人和西方人對事情的看法有很本質上的差異(當然隨著西方教育的影響,越來越趨於一致)。東方人很少談到實用的方法論,往往都是講求原則性的東西,實務的部分看個人的領會、造化。舉例來說,孫子兵法一書裡面沒有任何實質的戰術,而是粗略的原則;孔子的教育方針也僅是概念性的,對不同學生的相同問題可以給出不一樣的答案。而西方呢?講求明確,一步一字都要詳細記錄,所以很強調「量化」的概念,因為唯有數字化了以後才可以進行統一的評量,但也因為數字化以後,缺乏的彈性而變的死板。用一句話來說, 東方是類比的思考方式、西方則是數位的想法。 這也造成東西方管理模式嚴重的差異。 那有什麼好處跟壞處呢? 以武俠小說作比喻,東方人的練功方式會按著個人的資質而有很大的高低落差;西方人的練功方式則比較容易產生出一批整齊畫一的好手,但很難產出一流的高手。 為什麼提到這個?回到最初的問題,S.O.P.到底能不能隨著使用者自己調整呢?請注意,我說的是使用者,而不是制訂 S.O.P. 的...

仙劍賦

實在是太佩服某些遊戲玩家了,玩遊戲可以玩到寫出古文來... 坦白說,我不能評價出這篇賦的好壞,但單單能寫出來就很令人驚豔了。 Youtube 上還有歌唱 MV 版唷。 仙劍賦: 白蓮殞 桃落澗 仙靈洞天 (仙劍奇俠傳一: 趙靈兒 ) 蒼穹明月 茫茫無言 (仙劍奇俠傳一: 林月如 ) 笛音魂繞奴顏 (仙劍奇俠傳一: 阿奴 ) 媚影閃現水漣 (仙劍奇俠傳二: 蘇媚 ) 仙霞之綺 秀雲滿巔 (仙劍奇俠傳二: 沈欺霜 ) 還魂幽草誰憐 (仙劍奇俠傳三: 唐雪見 ) 劍魂等待千年 (仙劍奇俠傳三: 龍葵 ) 萱葉紅 幾許寂寞無人擷 (仙劍奇俠傳三: 紫萱 ) 飄絮染野 花蕊風中潛 (仙劍奇俠傳三外傳 問情篇: 王蓬絮 ) 室韋遠 麓疆鄉遣 (仙劍奇俠傳三外傳 問情篇: 溫慧 ) 琉璃碎 箜篌斷弦 (仙劍奇俠傳四: 柳夢璃 ) 硃砂點眉 菱花黯退嬌顏 (仙劍奇俠傳四: 韓菱紗 ) 輕嘆宿緣斷紅顏 青衣袂 形如飛 逍遙難解 (仙劍奇俠傳一: 李逍遙 ) 佩環獨缺 鯉魚錯願 (仙劍奇俠傳二: 王小虎 ) 渝州竹林語綿 (仙劍奇俠傳三: 景天 ) 蒼生連理堪選 (仙劍奇俠傳三: 徐長卿 ) 南宮之外 煌如火琰 (仙劍奇俠傳三外傳 問情篇: 南宮煌 ) 孤星流 白髮瀑懸 (仙劍奇俠傳三外傳 問情篇: 星璇 ) 望舒寒 墓邊誰言 (仙劍奇俠傳四: 雲天河 ) 紫晶湮 韶華轉瞬已百年 (仙劍奇俠傳四: 慕容紫英 ) 羲和曾見 鳳凰醉蔭間 (仙劍奇俠傳四: 玄霄 ) 仗劍行 憔悴紅顏 江湖夢 情仇難滅 君子如玉 劍勢揮灑如虹 空現悲 酌去思淚 尋仙音 償還前緣 終離別 怎料緣滅 盛世紛繁 曲終人散成幻 卻道是 此生不悔

symbol.sh ~~查詢 Symbol 的好用工具

先來看一下何謂 Symbol Table (以下來源: Wiki) In computer science, a symbol table is a data structure used by a language translator such as a compiler or interpreter , where each identifier in a program's source code is associated with information relating to its declaration or appearance in the source , such as its type, scope level and sometimes its location. 在 Linux 下,我們可以使用 nm 這個指令來列出 Object 裡面 Symbol Table 的內容。 下面這隻 Script 可以快速查出特定的 Symbol 出現在哪一個 Object 裡面 感謝原作者 parrot 大方提供。 #!/bin/bash if [ $# == 0 ]; then @@@@ echo "Usage: $0 " @@@@ echo " @@@@@ : $0 " @@@@ echo "" @@@@ exit fi dir=. if [ $# == 2 ]; then @@@@ dir=$2 fi echo "--------------------------------------------------------------------------------" echo "Processing ..." echo "" list=`find $dir -regex ".*\. o " -or -regex ".*\. a " -or -regex ".*\. sa " -or -regex ".*\. so " -or -regex ".*\. ko "` for x in $list do @@...

Openswan Porting to Pronghorn-Metro 實務經驗分享 06

最後一回精彩大結局~ # ipsec --help 理論上來說,這個指令會 show 出所有支援的指令,但...沒 show 出來...。看了一下,show 指令的方式也夠奇特,居然事先用 ls 讀 /usr/local/libexec/ipsec/ 下面的檔案,然後在用 egrep 進行過濾的動作... 好傢伙。因為我懶的去安裝 egrep 了,就把 ipsec 這隻 script 稍微改寫一下,達到相同的目的(不過好像沒完全濾完,管他的,反正我也只用那幾個指令) 正當我把一切都準備好了以後,鼓起勇氣執行: # ipsec setup start 產生了下面的 Log: ipsec_setup: Starting Openswan IPsec U2.4.5/K2.6.17-uc1-adi3... ipsec_setup: modprobe: module ah4 not found. ipsec_setup: modprobe: failed to load module ah4 ipsec_setup: modprobe: module esp4 not found. ipsec_setup: modprobe: failed to load module esp4 ipsec_setup: modprobe: module ipcomp not found. ipsec_setup: modprobe: failed to load module ipcomp ipsec_setup: modprobe: module xfrm4_tunnel not found. ipsec_setup: modprobe: failed to load module xfrm4_tunnel ipsec_setup: modprobe: module xfrm_user not found. ipsec_setup: modprobe: failed to load module xfrm_user ipsec_setup: modprobe: module hw_random not found. ipsec_setup: modprobe: failed to load module hw_random ipsec_setup: modprobe: module pa...

Openswan Porting to Pronghorn-Metro 實務經驗分享 05

在上一次的最後,我們總算將這隻難纏的天鵝給移植到版子上了,接下來,會一帆風順嗎??(我好希望這答案是肯定句唷 ... ) 首先,來參考一下官方網頁的設定步驟: http://wiki.openswan.org/index.php/Openswan/Configure 首先,來看看自己身上的金鑰 # ipsec showhostkey --left 結果,當然找不到金鑰囉,哼,那就自己產生吧。 # ipsec newhostkey --output /etc/ipsec.secrets 恩,好像有點久ㄟ,畢竟只是版子,運算能力差了點,RSA 又是很需要運算的動作,先去作其他事吧...。天真的我真的去處理其他工作上的事了。幾個小時以後... 「甚麼,還沒算完,到底怎麼了??」嵌入式系統在爛也不是這樣的吧!!於是一氣之下,去看看到底他程式是怎麼寫得... openswan/programs/rsasigkey/rsasigkey.c 33 #ifndef DEVICE 34 #define DEVICE " /dev/random " 35 #endif 恩... /dev/random ... 嗎... 思緒飄回過去。那年,我還是甚麼都不懂得研究生,一個叫做「小龍」的學長正在研究室完版子,那時候他正在 porting 一個叫做 dropbear 的 SSH Server (附帶一題,這是嵌入式系統常見的 SSH Server,跟常見的 Openssh 比起來輕巧多了) 小龍 :阿,總算搞定了 我 :不過就是 porting 一個伺服器上去啊,怎麼能讓學長這麼鬆了一口氣(我真是不知天高地厚) 小龍 :是早就上版子了啦,但一直不知道為甚麼會卡住,剛剛才解決。 我 :卡住? 小龍 :對啊,就是程式執行就會停在那邊。找到理由就很簡單了。聽好了, Linux 底下是透過 /dev/random 去取得 random number,而 /dev/random 會收集系統的 interrupt 來作為產生亂數的 seed。你想想看之前你用 putty key gen 來產生憑證的時候,他是不是有要你敲鍵盤嗎?那也是同樣的意思。而在 Linux 底下,如果他覺得他無法產生「 數學上夠完美 」的亂數,整個系統就會停在那裡,等到收集到足夠的熵。 我 :如果是這樣的話...

Openswan Porting to Pronghorn-Metro 實務經驗分享 04

上次處理到 Openswan 的編譯,最後停在了 endian 的問題,這次能不能順利解決呢? 在使用 GCC 的編譯上,預設為 little-endian,如果要特別編譯成 big-endian 的話,要加上一個 -mbig-endian 的參數,所以,我們再來一遍。 編譯 GMP ./configure --host=arm-linux CC="arm-linux-gcc" CXX="ucfront-g++ arm-linux-uclibc-g++" --prefix=/usr/local/arm-linux CFLAGS= -mbig-endian make make install 然後,在 openswan/Makefile.inc 加上 CFLAGS += -mbig-endian 編譯 Openswan make KERNELSRC=../../ADI/linux-2.6.x ARCH=arm OSDEP=linux USE_NETKEY=yes CC="arm-linux-gcc -L../ADI/romfs/lib" LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar AS=arm-linux-as STRIP=arm-linux-strip programs make DESTDIR=../../ADI/romfs install 過了嗎??沒有!!怎麼可能... 我發現在 make 的時候,回報的信息告訴我說要 編譯 little-endian 的執行檔卻使用 big-endian 的 library 。How could it be?? 我不是連 CFLAGS 都設定好了嗎? 正當一籌莫展的時候,幸好辦公室的同事(Hidding)即時出手相救。他很有耐心的去觀看編譯的過程,發現 在編譯那幾隻程式的時候根本沒有吃到 -mbig-endian! 於是我在打開 Makefile (openswan/program/pluto/Makefile) 來看 ... 天啊... 在編譯的時候根本沒有使用 CFLAGS 嘛(你前面的 CFLAGS 是寫好玩得就是了) 罪魁禍首是下面幾個~ alg_info_test: $(BINNAMEPL...

Openswan Porting to Pronghorn-Metro 實務經驗分享 03

圖片
很好,下一步是編譯 「開放天鵝」OpenSwan 了~ 應該不會有甚麼難度吧(假設語氣)。首先,來乖乖看看安裝文件怎麼說: To use the native (aka, Netkey) stack: 0) Please use at least version kernel version 2.6.6, as prior versions of the kernel have serious bugs in the IPsec stack. 1) From the openswan source directory: make programs 2) As root, install the userland tools: make install 哼,簡單來說,就是 make programs, make install 嘛 (再提醒一下,因為我們沒有使用 KLIPS ... 所以不要去理會 make module 的部份了),編譯的過程並不十分順利,有少部份要進行修改,但都是簡單的修改,所以把修改的地方列在下面而不列出錯誤信息: openswan/programs/pluto/server.c:780 LIST_INSERT_HEAD(&interface_dev, id, id_entry) => LIST_INSERT_HEAD(&interface_dev, id, id_entry) ; openswan/programs/pluto/foodgroups.c: 22 #include => #include linux/ limits.h> 順利的 make 過了,之後就要 install 囉。因為要特別指定安裝路徑,所以指令如下: make DESTDIR=../ADI/romfs install 簡單啊~之後在製作新的 ramdisk,下 make image 的指令... 結果... 它跟我抱怨 romfs 太大?? 奇怪了,這隻開放天鵝是有多肥啊,我看看 ... 天啊... 它把 man/docs 全都放進去了 ... 難怪啊,好吧,那我再把那些 manual, documents 砍掉總可以了吧~ 成功!很高興的開機進去執行 rsasigkey 看看 ... cannot exe...