發表文章

目前顯示的是 2013的文章

SSH Reverse Tunnel

很實用的指令,所以特別紀錄下來。其實這東西我碩士班的時候就已經有在用了,用的理由很簡單,只是為了要連回學校下載 paper,而下載 paper 要使用瀏覽器,所以透過這個招式連到防火牆後面的遠端桌面。什麼?你問我怎麼不使用學校的 proxy,天曉得?那時候就是沒想到嘛!不過那時候是用 putty,現在把指令紀錄下來,以供未來的自己查詢。

指令如下:

ssh -NfR7777:localhost:22 id@myhost.com

-N: Do not execute a remote command.  This is useful for just forwarding ports (protocol version 2 only).

-f: Requests ssh to go to background just before command execution.

-R: [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

我同事 Peter 教我一個好記的方式: Need for Reverse.

如何將Linux打造成OpenFlow Switch:Openvswitch

圖片
因為工作上被指派去做SDN,自然需要SDN的網路設備才可以。問題是SDN Switch賣的超級貴的,一台差不多要30萬台幣。這跟當初推廣SDN的人說法完全不一樣!他們當初說SDN網路設備會變得比較便宜,因為網路設備上不需要在堆疊這麼多的網路協定,因此硬體可以Cost Down,也可以省下軟體的錢。問題是,如果單單賣純種SDN Switch根本是不可能的事情啊,因為缺少可以在上面跑的軟體和控制器,所以只好保留傳統設備上的功能,再多加OpenFlow的支援,並提供給使用者選擇的開關。這樣當然只會更貴不會便宜啊!!

在沒錢、沒人、沒資源的情況下,要怎麼辦呢?用模擬軟體?可惜要Demo的時候行不通。那就只好自己來打造一台SDN Switch了。雖然沒有晶片的支援,但只要不牽扯到效能的話,應該沒太多問題。下面是我和同事想過的一些解決方案:
自己打造OpenFlow的Agent,反正OpenFlow的網路協定並不複雜,然後透過Linux Kernel的netfilter來模擬晶片的行為。因為是用軟體模擬,所以效率會比較差,但反過來說,因為是軟體,所以我可以滿足所有OpenFlow的要求,不會有做不到的事情。不過這個提案被一個PM的同事封殺了,理由是這不能賣錢 ... 有一個同事找到一個有趣的專案FlowForwarding。這個專案提供了Open Source的OpenFlow Agent: LINC。LINC是用Erlang所開發的軟體。雖然我根本不會Erlang,但程式語言不是我考慮的重點,我好奇的是它要怎麼模擬晶片來處理封包。從網頁上看到,LINC在使用上需要libpcap的函式庫,初步猜測,LINC應該是把所有的封包透過libpcap攔截到user space以後進行修改。這樣做的效率應該會比我的解決方案更差。OpenVswitch。這是大部份產品的解決方案。我聽過一堆公司宣稱自己有了SDN Switch,而內容只不過是把Openvswitch移植到自己原有的產品上罷了。一樣,我好奇它要怎麼模擬晶片來處理封包,看了編譯過程,它會產生openvswitch.ko,在加上它利用bridge的特性,所以應該是在linux bridge那邊進行hook後修改。 考量到移植的方便性,所以後來我個人選擇openvswitch作為SDN Switch的解決方案。在開始介紹移植步驟前,…

SDN的迷思

軟體定義網路Software Defined Networking,簡稱SDN,是一個最近當紅的網路技術與研究題目。在工作上被分派到這個任務的我,除了要撰寫一大堆計劃書以外,還必須面對一堆長官的「刁難」和「冷嘲熱諷」。美其名叫作計劃審查,但我覺得和他們報告根本就是對牛彈琴、他們根本就是鴨子聽雷,然後在發表一堆可笑的「真知灼見」,如果不是因為他的位置比較高,真想把他們捻下來訓一頓,台灣的研發會走到今天這個地步,這群人的思維要附上很大的一部份責任。下面紀錄一些這些人的經典語錄:

技術方面不是重點啦,重點是能帶來多少的市場效益 ...(這位長官,你知道這次的報告是創新前瞻的計劃嗎?能帶來立即明顯效益的還叫作創新前瞻嗎?)恩,我剛剛沒在聽(喔,原來你根本沒聽嘛)... 你應該想想其他網路廠商像是cisco他們的看法,還有能對台灣產業界帶來多少的幫助(...第1,我剛剛就提過了;第2,Cisco根本一開始就反對這樣的模式,後來不得已而轉型,今天你在叫我回去參考Cisco?第3,這個計劃才多少錢而已,要我揹負台灣產業的成敗?)你不可以因為這個技術新的就來提計劃(所以要提舊的?)要做好效益評估...(我是RD還是策略規劃師?你長官的位置下來我做好了)聽起來不錯,我想,先給你兩個人夠不夠?(很夠了,我想拿來應付會內的文件產生應該足夠了...) 其實還有更多,只能說無能的長官比競爭對手更可怕 ...

離題了,其實今天會寫這篇文章主要是想要回答一個問題:「有什麼事情是傳統網路架構做不到,而透過SDN可以解決的?」這種問題你去問一堆推動SDN的人,他們也許可以講的很頭頭是道,事實上,我也可以,畢竟對外也講過、報告過很多次了。但因為站在技術開發者的角度,有些話是當時講不出來的,這裡紀錄的是我內心真正的想法。

在回答這個問題以前,先來看看到底什麼是SDN?SDN說穿了就是下面幾個特性:
切割控制層和資料層:讓網路設備負責執行資料的處理,而將網路控制權從網路設備中抽離。這樣最大的好處是可以簡化網路設備的成本並提升效率。高效的網路處理晶片。這個晶片可以處理所有L2-L4的封包。 這裡指的是晶片有能力處理封包,但是要怎麼處理要透過集中控制器來決定。集中式控制:所有網路設備控制權被集中到一台控制器。所以傳統網路在設計上的分散式架構被打破了,也因此,傳統網路很多的行為是不必要的,如Flooding。畢…

列王記:約沙法

亞哈的份量比預期的多上很多,看來以利亞和耶洗別幫了不少忙。接下來把目光重新放到南國猶大。下一個要登場的君王是約沙法,約沙法是亞撒的兒子,也是個敬畏耶和華的君王。關於約沙法,列王記裏面的記載不多,大部份都在歷代志下,所以經文參考會以歷代志為主。

姓名:約沙法
國家:南國猶大
對應的南國君王:亞哈、亞哈謝、約蘭

聖經記載:
1. 約沙法做王(代下17、王上22:41-47)
2. 拉末之戰(代下18-19:3、王上22:1-39)
3. 不是為人,乃是為耶和華(代下19:4-11)
4. 勝敗不在乎你們,乃在乎 神(代下20:1-30)
5. 約沙法和亞哈謝(代下20:31-37、王上22:48-50)
6. 約沙法和約蘭(王下3)

1. 約沙法做王(代下17、王上22:41-47)

不管是列王記還是歷代志,對壞王的描述都常都一樣,就是「效法他列祖、不遵行上帝的道」,而對好王的描述也都類似,只是把上面那句話改成「遵行上帝的道」。耶和華與約沙法同在,因為約沙法只尋求他父親的神,就是那創造天地的萬軍之耶和華。在歷代志那邊特別提到一句話:「他高興遵行耶和華的道」,約沙法是發自內心遵行上帝的命令。很多基督徒,包含我自己,有時候或多或少會覺得遵行上帝的命令好苦,會有內心的掙扎。這種天人交戰有勝有敗,求神憐憫。但約沙法是「高興」遵行上帝的道,沒有勉強、出於甘心樂意,這樣的評價真是何等的難得。怎樣才能甘心的遵行上帝的話?詩40:8那邊提到「我的神啊,我樂意照你的旨意行;你的律法在我心裡。」這是彌賽亞詩篇,但也教我們知道,要甘心樂意遵行上帝的話,必須把上帝的話刻在自己的心上,以上帝的心意為自己的心意,這樣按照上帝的心意行事就不會跟自己的老我產生衝突,而得享喜樂。願上帝保守我的心,使我能夠出於樂意的遵行上帝的話。

和其他猶大的好王不太一樣的地方是,約沙法他深知「樂意遵行上帝的話」的秘訣,所以他派了眾多的大臣、利未人到各城各鄉,用上帝的律法書來教訓百姓,好叫百姓也可以得知上帝的話語。約沙法很看重神學教育,那我呢?我常常在想,有小孩以後,我要好好的教她學習上帝的話語。現在有了小孩,我才在想,養小孩好花時間唷,怎麼自己的時間都沒了呢?有時候看著她,心中只希望她趕快睡覺吧,不要哭不要鬧。我在想,等她唸書以後,我還會記得要好好地教她讀聖經嗎?還是把她放給學校,讓功課佔據她的時間並釋放我的自由?我不…

Linux 的好用指令:time

Well ... 寫程式常常要寫一個功能,那就是程式執行了多久。過去的作法往往是寫在程式內部,雖然不困難但是很煩。今天聽到一隻 Linux 的指令可以輕鬆達成我要的功能:time。不是新東西,只能說是自己孤陋寡聞。

用法如下:

$ time ./multicoretest parallel 4
Creating thread 0
Creating thread 1
Creating thread 2
Thread 1 started
Thread 0 started
Task 0 started
Thread 2 started
Task 2 started
Creating thread 3
Task 1 started
Main completed
Thread 3 started
Task 3 started
Task 0 completed with result 2.996422e+06
Thread 0 done
Task 3 completed with result 2.996422e+06
Thread 3 done
Task 1 completed with result 2.996422e+06
Thread 1 done
Task 2 completed with result 2.996422e+06
Thread 2 done

real    0m1.806s
user   0m6.444s
sys    0m0.000s



real time 表示後面所接的指令或程式從開始執行到結束時間。user time 表示程式在 user mode 所佔用的 CPU 時間總和。system time 表示程式在 kernel mode 所佔用的 CPU 時間總和。



ㄟ...real 比 user 還要大ㄟ?這是因為這個範例有開 thread,而我的電腦是4個核心的緣故。

Pthread Example

說真的,我不喜歡寫 Multi-thread 的程式,因為討厭處理 thread 之間的同步問題(我這個人就是怕麻煩!)但怕以後可能會用到,所以還是留下一些範例程式以後可以參考。所有範例程式都是從網路上找來再加上一些修改後放上。

總共有兩個範例,第一個範例是單純的使用 multi-thread 的功能,可以比較 multi-thread 和 single-thread 的效率差異。程式碼如下:

#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <math.h>/* A task that takes some time to complete. The id identifies distinct   tasks for printed messages. */void*task(int id){int i;double result =0.0;printf("Task %d started\n", id);for(i =0; i <9000000; i++){ result = result +sin(i)*tan(i);}printf("Task %d completed with result %e\n", id, result);}/* Same as 'task', but meant to be called from different threads. */void*threaded_task(void*t){long id =(long) t;printf("Thread %ld started\n", id); task(id);printf("Thread %ld done\n", id); pthread_exit(0);}/* Run 'task' num_tasks times serially. */void*serial(int num_tasks){int i;for(i =0; i < num_tasks; i++){ task(i)…

列王記:亞哈

作為列王記中知名度超高的壞王(雖然他的知名度某種程度是來自他老婆跟他的仇敵),亞哈的生平有許多地方是值得我們反省和思考的。說真的,我個人並不討厭亞哈。亞哈是個很實際的人,在他軟弱的心志下,或許也有一顆小小順服神的心,只是在外在環境、老婆壓力下而消磨殆盡。我並不是要幫亞哈開拖責任,亞哈是不討神喜悅的王,但當我們指責亞哈的時候,更應當想想,自己會怎麼做?也許,我們的所作所為和他並沒有兩樣。

寫亞哈的部份有另外一個很掙扎的地方,那就是亞哈親點的仇敵~以利亞的部份要不要寫呢?(同樣的掙扎大概會出現在之後的以利沙身上吧)但出於完整度,決定連以利亞的部份一塊寫,並且併入亞哈的部份。(另外開專欄?累死人了)

姓名:亞哈
國家:北國以色列
對應的南國君王:約沙法

聖經記載:
亞哈繼位(王上16:28-34)以利亞的預言(王上17:1-7)以利亞與撒勒法的寡婦~上帝的供應(王上17:8-16)以利亞與撒勒法的寡婦~上帝的作為(王上17:17-24)以利亞與俄巴底(王上18:1-16)迦密山上的鬥法(王上18:17-40)一小片雲、一大片雨(王上18:41-46)何烈山的顯現(王上19:1-18)撿選以利沙(王上19:19-21)你們就知道我是耶和華(王上20:1-30)仁慈?(王上20:31-43)拿伯的葡萄園(王上21)亞哈之死(王上22:1-39)1. 亞哈繼位(王上16:28-34)

暗利死了,他的兒子亞哈繼承了他的位置。這段聖經簡單的描述了這時候的背景,也帶出了為什麼以色列人會拜巴力的由來。過去以色列人以虛無之神來取代耶和華,而如今則是正大光明的把外邦的偶像引入國內,所以聖經才會給亞哈這樣的評語:「他所行的惹耶和華─以色列 神的怒氣,比他以前的以色列諸王更甚。」

亞哈的墮落從哪裡開始?從他娶了聖經中最惡名昭彰的皇后耶洗別開始。亞哈做錯了什麼?他只是蓋了巴力、亞舍拉的廟來討老婆的歡欣,畢竟人家大老遠嫁過來,難免會想家,要給人家一些親切感啊~這種作法不就跟乾隆為了香妃在京城打造回族部落一樣嗎?照理來說是浪漫的愛情故事。然而,神不喜悅這件事情,因為這也是所羅門王墮落的開始。在 BBS 網路上的男女板、婚姻板常常出現的問題,就是男女朋友間的信仰不同、夫妻間的信仰差異,這時候大多數的人都會回復說:「要有包容力」「最好彼此之間不要互相干擾,你去你的教會,我上我的佛堂」(以前通常都是基督…

葡萄酒的諺語

今天去聽顏慶章前部長的演講,後面有提到紅酒的一些諺語,覺得很有趣,紀錄在下面(演講本身呢?就還好 ... 雖然是場好演說,內容卻沒有太多的新意):

Drinking good wine with good food in good company is one of life's most civilized pleasures.
Michael Broadbent

Men are like wine - some turn to vinegar, but the best improve with age.
Pope John XXIII


列王記:拿答、巴沙、以拉、心利、暗利

讀列王記的時候,最沒存在感的大概就是下面這五位王了,跟三國演義裏面那些不到三回合就被手起刀落的無名上將差不多,記不得是很正常的。而且因為是北國君王的關係,歷代志幾乎不會有什麼補充的資料。之所以把這五位放在一起 ... 純粹是因為要擴充篇幅的緣故,哈哈。

姓名:拿答、巴沙、以拉、心利、暗利
國家:北國以色列
對應的南國君王:亞撒

聖經記載:
拿答作王以及下場(王上15:25-28;王上15:31)巴沙叛變(王上15:28~王上16:7) 以拉作王以及下場(王上16:8-14)心利的七日王朝(王上16:15-20)暗利作王(王上16:16-28)1. 拿答作王以及下場(王上15:25-28;王上15:31)

現在焦點再回到北國來,耶羅波安死了以後,拿答繼承了他的王位。按照聖經的記載:「拿答行耶和華眼中看為惡的事,行他父親所行的,犯他父親使以色列人陷在罪裡的那罪。」他父親耶羅波安犯了什麼罪?複習一下,他父親耶羅波安造了金牛犢,以虛無之神來取代耶和華,惹動上帝的怒氣。其實看到這裡,我第一個想到的是耶羅波安的另外一個兒子,那個在神眼前蒙恩卻短命的亞比雅。為什麼亞比雅在同樣的環境裏面,卻能在神眼中顯出善行,而這個拿答,卻在同樣的環境中走了跟父親一樣的路呢?環境或許會影響一個人,但這卻不能當作是藉口。上帝沒有因為拿答沒有個好的榜樣,就減輕他的過犯 ...

環境 ... 最近生了女兒,看著她的臉,我不知道她的未來如何?她是不是蒙上帝撿選呢? 考慮到現今的時代,我該怎麼教她呢?這些和上帝的真理抵觸的價值觀,我又能守護她到幾時呢?說真的,我一點自信也沒有。所以我只能為她祈禱上帝,懇求上帝的憐憫,願上帝護祐她。

2. 巴沙叛變(王上15:28~王上16:7)

巴沙殺了拿答並奪取了王位,統治以色列長達二十四年,然而他所作所為和耶羅波安、拿答一模一樣,仍舊不肯歸向耶和華。基本上同樣的事情在列王記中不停的出現,也無怪乎很多人(包含我老婆在內)會對列王記這麼厭煩了 ... 

在這裡引起我好奇的,是先知耶戶。耶和華的話臨到耶戶,要他去指責巴殺的過犯。雖然看起來是對巴沙的所作所為進行審判,但又何必派遣先知呢?直接處罰不就好了嗎?可是上帝卻仍舊派了先知去,在我看來,這是上帝的憐憫和提醒。作為一個讀者,實在不覺得以色列有什麼值得憐憫之處,可是在聖經中卻發現有多少先知不停的去和以色列講道,提醒他們所犯的錯…

仙劍奇俠傳五、五前傳主題詩

姜雲凡

山風桀驁雲輕狂 浮生癡情化劍芒
浪跡滄海問世道 笑看恩仇又何妨

唐雨柔

荷塘玉影伴青波 細雨輕舞映珠紅
朝露漂泊無怨悔 隻願漣漪心湖中

龍幽

銀龍漫舞動九霄 長戈幽影任獨翱
芳草無心風不語 回首前塵羽飄搖

小蠻

山花嬌豔水色青 野蠻仙子鬼靈精
少女滿懷情蠱夢 輕唱牛郎織女星


夏侯瑾軒

隨意青衫書世陌,炎涼漫映北軒窗。
雲深何處歸來處,長效天都山水郎。



搖搖葭色水間輕,澹澹風歌越蓼汀。
自許飄蓬銘入璧,約開瑜葉上雲屏。

暮菖蘭

杏雲燕雨蘭初上,寂寞妍姿開霧崖。
明月曾經川岸去,怎知碎影竟硃砂。

姜承

霜刃何當承玉甌,依稀梅淺斂灼流。
劍折忿起千鈞亂,朔氣滄瀾捲鐵鍪。

謝滄行

行劍江湖松徑老,臥聽空谷水雲生。
三山煙雨一盅酒,落拓悠然笑樹橫。

皇甫卓

錚然劍骨酬知己,熾血一腔付舊遊。
輕易王侯興滅事,嶙峋浩氣照山樓。

凌波

玉山飄渺望蓬萊,碧落星河隻手摘。
誰看青蛾舒羽袖,東風不上鳳凰臺。

悼亡詞:

霞霽風光染與,知音故千波傾盡嫣然
細雨後秋魂過際,曾見輕帆
非很緣慳情厚,碧霄外心念如磐
忘川上,年年霧鬢煙簪

龍溟

挽就鐵馬蕩長戈,斬卻風月破夢澤。
此身不是白雲客,紫衣深重掩山河。

悼亡詞:

北望嵐關興平板蕩,君王百世猶耽
旌獵獵嶙嶇朔氣,吹向天南
家園此身承負,徒嗟嘆好夢難勘
霜澤畔,深重紫衣長掩河山

厲岩

千重岩碎蒼煙斷,日暮江寒去不還
欲刻歸舟舟已遠,蕭然颯遝故人關。

結蘿

偶得君子問瑤芳,遂繫絲蘿與少狂。
夜落螢飛追皓魄,曉來花放醒寒江。

古劍奇譚官方主題詩

主題詩

百世山河任調換,一生意氣未改遷;
願從劫火投身去,重自寒灰飛赤鸞;
滄海桑田新幾度,月明還照舊容顏;
琴心劍魄今何在,留見星虹貫九天。

百里屠蘇 壹

古劍鐵衣映清輝 百劫閻浮一念微
許向長空傾碧血 由他業火寸身催

百里屠蘇(少年) 貳

少年十二余 神寒似玉削
振袖拂蒼雲 仗劍出白雪
眼底無故人 世事冷如鐵
誰與長相約 眉間刺新血

風晴雪 壹

青絲銀櫛別樣梳 天付婆娑入畫圖
好向寒節報花信 春風一脈動幽都

風晴雪 貳

忽如春風至 贈我久馨芳
暖雪回新候 晴風解嚴霜
壽無金石固 隨時愛景光
與君一執手 衣袖十年香

方蘭生 壹

瑯嬛久覓紫雲鄉 半枕清風鶴夢長
六藝四書全拋卻 一身盡染素心香

方蘭生 貳

庭中生嘉樹 華葉自飄搖
溫然發秀質 馥蘭映瓊瑤
相逢為君飲 攜手即知交
跋扈正少年 豈論梓與蒿

襄玲 壹

額前未肯點胭脂 懶把相思細細知
笑裏鞦韆輕自語 背人鬥草弄晴絲

襄玲 貳

誰家女兒嬌 垂髮尚年少
樹下抱香眠 泉邊掬影笑
徘復愛顏色 隔花昵青鳥
嬉遊終日夕 不覺晴光老

尹千觴 壹

江湖肝膽風波促 萬里雲山醉夢真
漫舉觥籌殷殷勸 石火光隙寄此生

尹千觴 貳

久把江湖宿 落拓年復年
換醪濯塵骨 釣月伴酒仙
多情誰似我 甘為紅塵耽
隨處埋骨地 何需有青山

紅玉 壹

九重環佩艷琳琅 一段紅綃旖旎長
昔日匣中三尺水 曾與明月鬥青霜

紅玉 貳

昔宿無性靈 久被東風誤
多謝彼君子 為我一回顧
霜雪凝精神 桃花鑄肌骨
還報一寸心 愿同塵與土

歐陽少恭 壹

鳳前獨坐弄琴箏 明滅蓬山九萬程
偏有漏長驚永夜 夢魂又覺第幾生

歐陽少恭 貳

輕雨滋長草 重風促短蟬
物華長往復 身世縹緲間
野洲唳孤鶴 微雲暮楚天
何以飄零去 何以少團圞
何以別離久 何以不得安
指雲問天道 聲盡血斑斕

遊戲修改:天翔記

自從國中被我兩個同學推入「三國志」的無底洞以後,「三國志」和「信長之野望」就一直是我主要玩的遊戲。每一代都有其特色和精華,當然也有一些我討厭的機制。但大體來說我都會花時間下去玩(而且還會全破不少次),除了 ... 天翔記。

我本人是個種田派和公仔收集派的玩家,很遺憾的,「天翔記」是一款窮兵黷武的遊戲,這實在讓我很難上手。遊戲試圖要表現出「成長」的概念,這很好!但是到遊戲裏面就會發現 ... 一個剛出生的名將和久經戰陣的凡將是根本無法比擬的,這讓「天才」這兩個字在遊戲中基本上是不可能出現的。我認同能力不會一開始就全滿而要成長,但你差距也不可以高到這種程度吧!這樣完全不可能有名將的成長空間(因為在年輕時就被幹掉了)。此外,電腦的成長速度根本是用作弊來形容!我自己的經驗,當我用島津家努力違反自己的天性,一天到晚作戰時,卻發現「立花道雪」這老怪物的能力老早就上升的比我快30點,而且我主力培養的還只有義弘一個人而已 ... 經過一番奮戰,總算擊退道雪,天曉得下一季又再一次看到他,能力還比之前更高,我島津義弘都沒成長這麼快啊 ... 於是我關檔了。

可惜沒有威力加強版... 沒有就算了,那就自己來寫一個存檔修改器吧,當中也查了不少格式的資料,最後玩成品記載在下面:


#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>struct nb6man {unsignedshort dummy;unsignedchar p_max;unsignedchar b_max;unsignedchar w_max;unsignedshort p_real;unsignedshort b_real;unsignedshort w_real;unsignedchar charming;unsignedchar ambition;unsignedchar loyalty;unsignedshort merit;unsignedchar blood;u…