2012年5月7日 星期一

博大精深的角換


 (銀將按照箭頭上去之後,有三種選擇:2七銀就是棒銀,3六步就是準備早繰銀,4六步就是準備腰掛銀)
博大精深系列第二彈。

換角之後雙方都面臨了一個危機,就是隨時會被角行打入,不論是直接打入敵陣,或是封鎖飛車頭上一格,或是直接王手飛車,都很有威力。職業棋士長年的實戰演化出來的結果,只剩三種下法
1. 棒銀
2. 早繰銀
3. 腰掛銀

但是這三者互相克制,形成剪刀石頭布的循環,1剋3,3剋2,2剋1

腰掛銀對棒銀的話,飛車頭容易受攻,很快陷入不利

早繰銀對棒銀,則不但飛車頭保護良好,而且還有4五角攻擊對方飛車頭,使棒銀無法得逞,即使用了升田流自陣角對應,也只是一個陷阱招,對方不中招仍然不利。

早操銀對腰掛銀 ,後者可以用雙銀將直接鎖住對方銀將,使對方銀將無法進攻。

那麼到底要怎麼下呢?雙方開局博弈的均衡就是雙方都用了腰掛銀,最後不是雙方先後同形,黑方稍微有利,就是白方轉成全防禦腰掛銀,雙方都很難下。

2012年1月31日 星期二

先裝了Linux,再裝windows,結果linux開機程式被覆蓋要怎麼辦


答案很簡單,參考這一篇
簡單敘述相關段落如下

首先用liveCD進入 Linux,在命令行執行grub,進入grub後,找出stage2檔案:
grub> find /boot/grub/stage2
(hd0,0)
這是範例,你得到的結果未必是(hd0,0),端視你當初安裝Linux在哪一顆硬碟的哪一個分割區而定。
stage2檔案包含了開機選單,這時告訴grub你要用哪一個開機選單:
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
接下來告訴grub要在哪裡放置stage1檔案。這個地方就是你的BIOS所指定的開機碟,通常是第一顆硬碟,所以:
grub> setup (hd0)
之後的訊息就是grub會去檢查stage1, stage2, stage1_5檔案,然後把相關資訊紀錄在開機碟的MBR上面,最後列出...succeeded Done. 的字樣,代表安裝成功。

這是PCLinuxOS的流程,其他版本的話只要是要grub,道理都相同。grub處理開機的方法是電腦會從開機碟的MBR中執行stage1,stage1會指示電腦載入stage1_5,把一個簡單的磁碟系統載入ram當中,再去讀取stage2的選單,依據選單內容載入Linux作業系統,或是把控制權交給另一個開機程式(例如windows的開機程式)。

2011年12月22日 星期四

人猿星球和星球崛起

人猿星球(planet of ape),是1968年的經典電影。故事內容是小說改編,具有相當的深度,演員演出也都到位,因為故事結構良好,寓意明確,所以類似的故事經常被其他電影或小說摹仿。
所以沒看過人猿星球的人現在去看,會覺得劇情似曾相識。 至於新的猩球崛起,若真要跟老前輩比是比不過的,不過人物感情上有較細膩的描述,不論是主角父子,主角和猩猩,或是猩猩和猩猩都很有戲。元祖電影的每一部續作都破壞了元祖的設定,猩球崛起也不例外。被破壞的點是在人猿星球原本的設定是人類自己退化掉(戰爭,文化,環境,人口等種種因素。當然電影中一直暗示是核彈,但是為何核彈會丟呢?就是上面那些因素),猩球崛起卻編造了另一個理由,搞得像是偶然一樣,更破壞了元祖的警世意味,是比較可惜的部份

2011年12月20日 星期二

編輯程式常用gvim指令

自動完成:Ctrl + p 向上搜尋匹配並自動完成,Ctrl + n 向下
移動至匹配括號:%。跟v結合可以很快選擇依括號內區域
變更部份文字:c + 移動指令
搜尋:/pattern
取代::1,$s/s1/s2/g 將s1取代為s2
顯示(取消)行號: :set number (:set nonumber)
編譯目前的java檔案::!javac %

2011年11月9日 星期三

神奇的linux/unix運算程式dc

dc是一個linux/unix指令列工具,完全運用stack做運算

用它可能沒什麼特別的好處(除了可能會很快之外。照理說這種純stack運算的語言可以做到飛快),但是如果想對程式運作有更深的了解,花點時間玩一下會有幫助,因為所有程式的函數呼叫控制都是用stack完成。

寫了一個hanoi tower自娛用,執行dc -f hanoi.dc就可以了
hanoi.dc的內容如下:
#function z : move source to destiny
[[ ]n ls n [ -> ] n ld n [ ]p]sz

#function Q : quit and clear top of stack n,s,d,i
[LnLsLdLi sbsbsbsb q]sQ

#function X(n,s,d,i) : hanoi tower function,
#n: number ; s: source ; d: destiny ; i: intermediate
[
 ln 0=Q
 ln 1- Sn
 li ld Si Sd ls Ss
 lXx
 lzx
 ln 1- Sn
 li ls Si Ss ld Sd
 lXx
 LnLsLdLi sbsbsbsb  #this line clears the top of parameter stacks
]SX

[number of disk:]P?
[start pillar:]P?
[destination pillar:]P?
[intermidiate pillar:]P?
SiSdSsSn
lXx

2011年10月26日 星期三

五個為什麼


印度神話世界觀


小孩:為什麼我們能站著不會往下掉呢?
錯誤的回答示範
"因為有大地支撐啊"
"那大地不會往下掉?"
"因為有四大神州支柱啊"
"支柱下面呢"
"有四隻牛啊"
"那牛下面呢"
"有八隻象啊"
"那象下面呢"
"有一隻大烏龜啊"
"那烏龜下面呢"
"..."(一巴掌打過去)
正確的回答方式
"因為有大地支撐啊"
"那大地下面"
"還是大地自己啊"
(完)

雖然看起來是狡猾的循環論證,但是實際上卻沒有錯
因為地球是球形,真的是大地互相支撐,不用再往下撐了

在被人不斷追根究底的追問時,能夠有本有據的連續回答出五次,這已經代表你算是一個博學多聞的人了。

2011年9月22日 星期四

postgresql 中階層式資料表查詢

comment_id | parent_id | author | comment
------------+-----------+--------+---------------------------------
1 | 1 | Fran | What's the cause of this bug?
2 | 1 | Ollie | I think it's a null pointer
3 | 2 | Fran | No. I checked for that.
4 | 1 | Kukla | We need to check invalid input.
5 | 4 | Ollie | Yes, that's a bug.
6 | 4 | Fran | Yes, please add a check.
7 | 6 | Kukla | That fixed it.
以上列資料表為例(SQL Antipatterns, Bill Karwin, p36.),每一列都有一欄指向父親,最上層的父親欄位設為1(用null可以解決問題,但是很奇怪。因為null在sql中的邏輯意義是"未知",而不是"沒有",總之必須要有一個辦法表示root。設成1之後避免recursive query跑不完的辦法是把下面code當中的union all 改成union)。

如果資料庫有支援遞迴式查詢,用上述的結構實現階層式資料的話,也能用簡單的查詢查出資料。例如要查出4號comment為根的subtree,在postgresql只要運用以下查詢查詢即可
with RECURSIVE subtree_4(comment_id, parent_id) as (
select comment_id, parent_id from comments where comment_id = 4
union all
select c.comment_id, c.parent_id
from subtree_4 sub, comments c
where c.parent_id = sub.comment_id
)
select * from subtree_4;
參考資料