Linux patch 的產生與使用

假如要 merge code 的話, SVN 有些現成的 function 可以用. 不過對於兩個沒有直接血緣關係的 branch (或者說因為 merge 又 copy 把原來的關係弄混了), merge function 就會失靈. 我猜 merge code 的時候, 看到 skipped missing target 或許就是這樣來的.

此時, diff 和 patch 應該可以幫得上忙. 首先產生 diff.

diff -parameter oldURL newURL>patch_file

parameter 可能是 ruNp 或是 ruNa

r 表示 recursive 比較下面的所有子目錄 

u 表示以統一的方式來表示檔案間的不同, ‘-‘ 表示刪除, ‘+’表示新增.

N (= new-file) 表示某個 file 可以對應到同一個目錄底下的空 file, 因為這個 file 本身可能是新增或是刪除的.

p 對 C 語言的意義是: 可以比較兩者 function 的不同

a 表示是 ascii file, text file

例如: diff -ruNa oldDirectory newDirectory > patch_file

—————————————————

接著要 patch, patch 的格式是 patch -pX

X = 0, 表示從第一層目錄 patch, X = 1, 表示從第二層目錄 patch,…

例如:

cd /D1/D2/D3

cd ../../..

patch -p2 < patch_file

這樣會 patch 到 D3 這一層

98 年股市開休市日期與交割新制宣導

中華民國98年有價證券集中交易市場開(休)市日期表

 

名稱

 

星期

     

中華民國開國紀念日

1 1

1 2

1 1 日依規定放假1日。

12調整放假。

補行交易

110

12調整放假,於110(星期六)補行交易。

補行交易

117

130調整放假,於117(星期六)補行交易。

農曆春節前最後交易日

121

12223日市場辦理交割。

農曆春節後開始交易日

2 2

農曆春節後開始交易日。

勞動節

5 1

依規定放假1日。

端午節

5 28

5 29

1.     528依規定放假1日。

2.     529調整放假。

補行交易

66

529調整放假,於66(星期六)補行交易。

 

9822起即將實施新制款券交割制度宣導

簡而言之,交割日提早一天.

成交日(T)

交割款轉入劃撥交割帳戶(T+1)

完成交割 (T+2日,10點)

 

__VA_ARGS__ 與 ## 小檔案

 

我大致整理出要點, 供急功近利的新手參考.

1. __VA_ARGS__ 顧名思義, 就是一個可變的參數.

例如: #define ABC(format,…)   printf(format, __VA_ARGS__);

注意最後這個分號.

2. 假如實際參數是 0 的話, 會發生下面的問題

 ABC(“%s") –> printf(“%s",);

為了除去這個逗號, 可以用 ## 來提示 compiler.

例如: #define ABC(format,…)   printf(format, ##__VA_ARGS__);

3. 由於 __VA_ARGS__ 有點礙眼, 所以它可以被抽象化成一個變數.

例如: #define ABC(format,…)   printf(format, ##arg);

4. 以上講的是 macro 的使用, 在 function 當中一樣可以用

例如: int function(char *argv, …)

這個可以用來處理 command line 參數的情況, 因為參數可多可少.

function 當中可以用 ##__VA_ARGS__ 來傳遞 … 所代表的值給其他 function.

或是透過 va_list, va_start, va_arg, va_end 這四個標準函式庫把 argv 裡面放的東西一一取出來. 用法參見:

http://www.cplusplus.com/reference/clibrary/cstdarg/va_start.html 有使用範例

http://ehome.hifly.to/showthread.php?s=&threadid=329 有原始 macro code, 也有範例, 呃…, 還有一連串的討論.

———————————————

關於如何巧妙運用 __VA_ARGS_, 在網路上的這篇文章, 有很好的介紹, 大家可以去看.

http://www.jeffhung.net/blog/articles/jeffhung/1012/ 

八卦之八卦

我有個 MSN 上的朋友, 從很早以前就把暱稱固定在 “地升謙" 了. 何謂也? 呃, 不好意思, 我沒有去問他, 問他就不八卦了, 我只是隨便猜一猜.

八卦可以衍生為 64 卦, 天澤火雷風水山地可以組合成天天、地地這樣的樣式. 不過其中只有地山謙, 地風升, 沒有地升謙這回事. 不過一個 “升", 一個 “謙", 我給它一個新的卦象叫 “陞遷"~~~也許是朋友想陞遷了. 這樣夠八卦了吧!

這六十四卦的卦象大概是長這樣:

天天

天風

天山

天地

風地

山地

火地

火天

大有

水水

水澤

水雷

水火

既濟

澤火

雷火

地火

明夷

地水

山山

山火

山天

大畜

山澤

火澤

天澤

風澤

中孚

風山

雷雷

雷地

雷水

雷風

地風

水風

澤風

大過

澤雷

風風

風天

小畜

風火

家人

風雷

天雷

無妄

火雷

噬嗑

山雷

山風

火火

火山

火風

火水

未濟

山水

風水

天水

天火

同人

地地

地雷

地澤

地天

雷天

大壯

澤天

水天

水地

澤澤

澤水

澤地

澤山

水山

地山

雷山

小過

雷澤

歸妹

 

這裡面還出過很多成語, 比方說否極泰來. 就是天地的, 倒轉之後就變成地天的.前面那掛是外掛, 表示外在、對外、外界的影響, 後面那一掛就是內掛, 表示內在、對內、內心. 所以地天表示由地而天, 由小而大, 並不是天地無用. 由剝而復也是其中產生的成語.

以前我也有一位長官讀過易經, 他說可以從其中領悟很多道理. 不過我最近看的一本書講到了另外一個真理, 那就是用片面的領悟去推廣到萬事萬物, 其實是殘缺不全的. 所以, 對於事物的感慨可以當作思考的引子, 但是不能因此而預做結論.

不能容於俗世, 算不上人才. 即使讀通了易經, 若不會做人, 不食人間煙火, 也只能當個講課大師、心靈導師、宗教領袖. 真正的人才, 是需要在俗世中發揮的.

—————————————

根據很有學問的朋友  補充: “三陽開泰也是出自易經, 還有, 金庸偷最多, 降龍18掌裡面 亢龍有悔,潛龍勿用 見龍在田,飛龍在天… 好多都是.

由剝而復, 三陽開泰的解釋:

http://web2.nmns.edu.tw/PubLib/NewsLetter/88/136/13.html

與 “龍" 有關的解釋, 九五之尊的出處:

http://www.chineseclassic.com/13jing/yi/ch01.htm

http://blog.roodo.com/cominion/archives/787412.html

降龍十八掌完整出處: (copy 自 wiki: )

  1. 亢龍有悔乾卦上九)
  2. 飛龍在天乾卦九五)
  3. 龍戰於野坤卦上六)
  4. 潛龍勿用乾卦初九)
  5. 利涉大川(大畜、同人、未濟等卦多次出現)
  6. 鴻漸於陸漸卦九三)
  7. 突如其來離卦九四)
  8. 震驚百里震卦彖辭)
  9. 或躍在淵乾卦九四)
  10. 神龍擺尾(原名履虎尾,履卦九四)
  11. 見龍在田乾卦九二)
  12. 雙龍取水
  13. 魚躍於淵
  14. 時乘六龍乾卦彖辭)
  15. 密雲不雨小畜卦辭)
  16. 損則有孚損卦彖辭)
  17. 履霜冰至坤卦初六)
  18. 羝羊觸藩大壯上六)

SVN 小筆記

SVN (Subversion) 是一個免費的版本管理系統, 雖然很浪費空間, 但是功能強大. 它的基本功能 check out、update、commit 大家應該都會吧! 我來講一下比較會讓人暈頭的 merge 和 switch.

Switch 相對簡單, 只要下 switch, PC 硬碟上的目錄就可以從 server 的 A 目錄改成對應 B 目錄. 這有甚麼用呢? 當我們改 code 改了半天,  可能既要 commit A 目錄, 又可以 commit 到 B 目錄. 如果一開始的 code 是從 server 的 A 目錄 check out 出來的, 那麼 commit 回 A 目錄當然不成問題. 可以要 commit B 目錄的話, 就沒那麼直覺了.

因為這個 PC 上的 A 目錄與子目錄裡面有很多 .svn 的隱藏檔 (每個目錄一個), 所以它硬是要效忠於 server 上的 A 目錄 (儘管名稱可以不同). 若是把 .svn 都砍掉, 倒是可以把它 copy 起來, 再蓋到 PC 上的目錄 B, 接著再 commit. 不過這樣做就太痤了. Switch 可以直接讓 .svn 的效忠對象改變, 這樣就省了很多了麻煩.

再說到 merge. 一般手工 merge code 當然是看看有甚麼 diff (difference). 但是 SVN 有現成的 merge 指令讓我們 merge A version 到 B version. 在此處有幾個東西要注意: (1) Merge from older version to newer version. 如果把順序弄反的話, 就會變得亂七八糟. (2) 可以在 PC 上的 A 目錄 merge 或是 B 目錄 merge. 選擇 PC 上的目錄決定了merge 的結果對應到 server 上的哪一個目錄, 它與 start URL 與 end URL 為何沒有關係.

此處的 merge 結果可能還需要手工修正, 但假如目錄 B 是從 frozen 的目錄 A branch 出來的, 那麼 A-B merge 的結果就等於目錄 B 蓋掉目錄 A. 此時拿 merge 的結果再 commit 成新版就好了, 也是相當方便!