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;
參考資料

2011年8月23日 星期二

樂透號碼產生器

所謂樂透號碼,就是從某範圍整數中,隨機且不重複的選取其中幾個。例如台灣的今彩就是從1到39當中選5個。要從電腦隨機產生一組號碼,比較基本的有以下兩種

1.每個號碼隨機選號,選重複的再去掉。但是這方法很笨,而且選號一多就會慢到不行。

2.模仿開彩方式,按照正確機率依序選擇號碼。以今彩為例,抽中39號的機率是5/39,下一步驟抽中38號的機率就變成5/38(上步驟未抽中39號)或4/38(上步驟抽中39號),依此類推。

第二個方式顯然快多了。下面awk程式(lottery.awk)實現此作法

在類似unix系統環境下,實行

echo "1 39 5" | awk -f lottery.awk

或是perl:
#!/usr/bin/perl
$min=$ARGV[0];
$max=$ARGV[1];
$needed=$ARGV[2];
$available=$max-$min+1;
while (@selected < $ARGV[2]) {
if(rand() < $needed/$available) {
push(@selected, $available);
$needed -= 1;
}
$available -= 1;
}
foreach $number (@selected) {
print($number . "\n");
}


執行
$./lottery.pl 1 39 5

會印出1~39隨機取5個的數字

2011年8月16日 星期二

程式研究:akka的remote actor

akka的remote actor 是個神奇的東西,自動幫你處理了傳輸格式,你只要關心scala當中跟actor互傳的信息就好了。不過要讓akka 首頁上那段非常簡短的程式碼跑起來,需要不少準備。

首先是sbt,這是scala用的build tool,設定檔完全用scala語法表達,簡單方便。
執行sbt只需要一個jar檔和一個script,windows是bat檔,linux是shell script,設好了之後任意目錄下
執行sbt,回答問題之後就會自動產生目錄架構,之後就可以開始寫設定檔和程式了。
設定檔都在project目錄下,源代碼在src目錄下
project/build 之下,建立一個Project.scala,內容如下:
import sbt._
class ChatProject(info: ProjectInfo) extends DefaultProject(info) with AkkaProject {
val akkaRepo = "Akka Repo" at "http://akka.io/repository"
val akkaSTM = akkaModule("stm")
val akkaRemote = akkaModule("remote")
}


project/plugins 之下,建立一個Plugins.scala,內容如下
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
val akkaRepo = "Akka Repo" at "http://akka.io/repository"
val akkaPlugin = "se.scalablesolutions.akka" % "akka-sbt-plugin" % "1.1.3"
}


之後在sbt下,執行reload和update,就會按照上述的設定抓好必要的檔案並決定從屬關係
之後執行console,可以在此環境下直接執行scala的類似直譯器。

打開第二個command prompt視窗,在工作目錄下再運行一個sbt,此視窗當作client用,第一個視窗當作server,兩個視窗都執行console
server視窗輸入
import akka.actor.Actor
import Actor._
class HelloActor extends Actor {
def receive = {
case "Hello" => self.reply("world")
}
}
remote.start("localhost", 9999)
remote.register("hello-service",actorOf[HelloActor])


client視窗輸入
import akka.actor.Actor
import Actor._
val actor = remote.actorFor("hello-service", "localhost", 9999)
val result = actor !! "Hello"


這樣就收到了server傳來的訊息了。把server當成一個actor用 akka 1.1.3的文件

2011年8月2日 星期二

程式語言研究:scala 1.9

半年前發覺一個有趣的語言scala,它企圖結合編譯式和直譯式語言,以及物件導向和函數導向語言的優點,形成一套有趣卻眉角很多的程式語言,不管怎樣比java好很多是真的,但是發覺缺點主要有兩個,第一是型別參數,因為型別可以不固定,但是卻必須遵從某種形式,第二是仍然擺脫不了java,光靠scala自己仍是不足,經常必須要去用到java的物件或函數。換句話說就是只學了scala仍然不夠,還是得學java,變成想要用scala的話得學兩種語言,相當麻煩。

1.9版新增功能中最有趣的還是maxBy, minBy, permutations 和 combinations這幾個在collection中的方法,後面兩個組合學的函數還是遵從辭典式排列的,不過一般這種函數輸出都會照辭典式排列就是。

scala自帶的actor其實還不夠好用,配合akka服用會愉快許多。

2011年7月10日 星期日

鹹豬手事件簿



「鹹豬手事件簿」這電影讓日本男人搭電車時手舉得高高的,就怕被認為色狼。

原因不是因為色狼被閹掉然後雞雞拿去去煎煮炒炸或被粗勇大男雞姦一百次,而是因為無辜的人被當作色狼判刑,審判過程冗長而痛苦,最後的結果還是判刑,這比殺的血淋淋的影片更可怕,因為這確實是有發生過,而且很可能會繼續發生。

這電影完全不是一個娛樂片,因為裡面沒有慷慨激昂,沒有灑狗血也沒床戲,正義也不會勝利,有的只是現實和...現實。我最討厭的是日本片通常愛說教,這片子的說教卻讓我覺得恰如其分。

2011年6月19日 星期日

蚊子海岸

蚊子海岸


這是一個很好的劇本,但是哈里遜福特的演出卻造成了矛盾,導致這電影不能成為一個經典好片,否則它是有這資格的。

艾利福克斯是一個憤世嫉俗的理想主義者,同時也是一位天才發明家。他放棄了美國的一切,帶著家庭到中南美洲叢林裡想過新生活,由於他的發明才能,使得一開始獲得了相當的成功,但是他那過度激烈的危險個性最終帶來了他自己的失敗和毀滅。我看完這電影是猜這劇本原本是這個樣子的,後來查證果真如此。但是哈里遜福特演起來就只是一個天真的理想主義者,看不到什麼壞的成分,導致後來他搞破壞的劇情跟他演出的個性格格不入(這就是我上面說的矛盾)。

這電影還頗長,想必也是因為原著的關係。但是也不知道該不該責怪哈里遜福特,也許應該怪導演,這個艾利福克斯的角色本來就不易演,而整個劇情全都是以這角色為中心,這角色沒弄好,其他人怎麼演也是白演了。不過因為劇本好的關係,拍攝方面也還好,所以這電影仍然不能說是一部大爛片就是了,如果不想看小說的話,仍然可以觀賞的。

2011年5月9日 星期一

虎頭蛇尾的重案對決



預告片。重案對決:I will kill everyone
(裡面提到的劇情都是預告片中有的,所以可以放心收看)

雖然説他虎頭蛇尾,但是並不難看就是了。我喜歡這種劇本,演員的演出也都不錯,只是最後破解克萊德的秘密時顯得克萊德過度粗心,把前面的精細鋪陳打了一巴掌一樣。

克萊德家裡慘遭劇變後,身為美國反恐智囊的克萊德花了十年的時間準備了一個精細的計畫對當時的兩個犯人,對整個城市,整個司法體系復仇。十年前男主角的黑人檢察官(傑米福克斯飾演)為了成功將其中一個犯人定罪,做了某種妥協,十年之後他為了這個妥協付出了慘痛的代價。克萊德對兩個犯人復仇完畢之後被捕,但是沒想到這才是他計畫的開端。整個故事一直到傑米福克斯身邊的人不斷被殺,一直到克萊德宣告「I will kill everyone」時到達高潮,因為前面的劇情已經讓觀眾徹底了解到,他是做得到的。

最後半小時依照慣例是克萊德的手法被發現的時候,問題是這個發現的過程顯得克萊德太過粗心,完全不像一個擁有黑暗騎士中小丑的智慧,一個十年大計所會犯下的錯誤,也讓克萊德的光環瞬間退色,更讓我覺得太容易了,白費了前面的鋪陳,相當的可惜。即便如此,imdb上的評分也有7.2,這在同類型片中算是高分了(奪魂鋸1也才7.7),娛樂價值肯定是有的,片中的道德衝突不在於克萊德應不應該復仇,而是傑米福克斯訴訟過程該不該妥協。主題訴求也很明確。

2011年5月6日 星期五

博大精深的棒銀

棒銀雖說是初學者最愛用的戰法,但是意外的博大精深,任何戰形,無論居飛振飛,中飛或三四間飛車,甚至換角不換角均可用,變化十分複雜,卻充滿魅力。棒銀絕對不是一個簡單直接的戰法,雖然成功的時候局勢會變的很明朗,但是除非對手完全不懂應對,否則不會這麼順利,中途會發生許多變化,是一個看似簡單卻十分萬用且定式很複雜的戰法。

棒銀的理想目標就是銀將在飛車之前,衝入敵陣,理想狀況是飛車成龍王和一威力與金將相當的棋子深入敵陣,至此局勢簡單又幾乎勝定,為了達成此目標有時犧牲角行亦在所不惜。一般認為對抗中飛車棒銀,居玉(玉將沒動)必敗,棒銀的威力可見一班。但是就算真的成功了,也得好好思考攻擊方式,胡亂攻擊仍然會輸的。

棒銀定式非常多,跟別種戰法相比未必有那麼好記,這是學習棒銀必須要注意的地方。職業棋壇中的棒銀名人是日本的加藤一二三(對,他的名字就叫一二三),不過很諷刺的是,他曾經在一次快棋賽中(1989年NHK的比賽,下面的影片連結有詳細說明),輸給當時只有19歲的羽生善治,當時羽生善治用的就是加藤最擅長的棒銀。這一局也成為了名局,有興趣可以到上面的連結觀賞
羽生對加藤

2011年3月18日 星期五

牛頓的啟示

牛頓

牛頓曾經在股市中賠掉所有的錢,並且留下了一句名言:我可以計算天體的運行到每分每秒,但是無法預測瘋狂的人會將股市帶到何處。這個故事最重要的含意,不是物理學大師不適合做股票,而是如果股市當中太多瘋狂的人,誰也算不出股市會被帶到哪裡。瘋狂的人忽多忽空,你又怎知他明天會怎樣想呢?

所以最適合散戶的多空點,就是當股市當中太多瘋狂的人,或是股市當中很少瘋狂的人的時候。後者時機比前者更好,因為前者的股市雖然脆弱,但是還有可能繼續上揚,直到全部的人都瘋掉為止。但是當股市當中很少瘋子,指數會維持長時間的低迷和交易量低迷,跌也跌不到哪裡去了。瘋子可以近乎無窮的增多,但是最少只能是0。

所謂的瘋子,其實有個特徵:他本人就是股市晴雨表。不過因為現代大家都躲在電腦前交易,所以這古老智慧就派不上用場了。

2011年3月14日 星期一

港劇:大時代(無劇透)

年輕時的丁蟹
大時代可說是港劇的代表。劇中演員都是當時一時之選,鄭少秋,劉青雲,劉松仁,周慧敏,藍潔瑛等,演出都十分到位。劇情不斷的引發衝突,十分灑狗血,但是看起來絕不會像台灣劇那麼廉價,三場股票大戰都算有趣。人物性格十分鮮明,令人難忘,尤其是超級怪人丁蟹(鄭少秋飾演),電視劇中再也不會出現這樣性格的人了:表現十分衝動橫蠻,自有一套怪論,內心始終覺得自己有情有義,更深層來看卻是膽小,憊嬾和無賴。監製韋家輝曾經做了一個號稱續作的「世紀之戰」,但是自己也認為始終無法達到當年大時代的程度。

大時代對很多戲劇也都產生巨大的影響。甚至還創造了兩個辭彙:丁蟹效應和大時代效應(大奇蹟日)。凡是鄭少秋的港劇上檔時,港股經常跟著大跌,這種現象稱為丁蟹效應 (因為丁蟹靠放空賺了幾十億 )。若是港股在一兩交易日內劇升劇跌,就稱為大時代效應(或大奇蹟日)。

第一集就播了結局,這也是當時電視劇少見的作法,原本這種手法是電影在用的。只不過到了第四十集的大結局,跟第一集相比,會發現還是有些怪怪的地方,不過這也無傷大雅。就算只衝著鄭少秋的演技,也該看這部戲的。

2011年2月9日 星期三

江戶川亂步

江戶川亂步(1894~1965)

江戶川亂步常被稱為日本本格派推理的祖師爺,但是,很遺憾的,他也是日本最好的本格派推理作家。我說遺憾是因為經過這麼多年,應該要長江後浪推前浪,但是這事並沒有發生,後浪不夠力,始終推不動前浪。唯一一個可以拿出來比的是橫溝正史,但是橫溝正史專攻長篇,擅長亂倫和黑暗的劇情,純論推理,仍然是江戶川亂步比較好。

江戶川亂步的推理很理論化,不過這是小說的特點,太過實際的手法不會構成好看的小說 (若要論及實際,這些精密的殺人案根本不會發生) ,他的作品也喜歡帶入一些心理變態和後設推理(批判別的推理小說),可以說是日本各種推理小說的先驅,也因此被稱為祖師爺。他的後設推理常常是一針見血,令人叫絕,例如D坡殺人案,就狠狠的打了一些非常牽強的密室推理一巴掌。他一生推廣推理小說,並且帶出了日本推理小說的風潮,可惜的是本人作品不多,甚至還有少年推理,例如怪盜二十面相這種專門寫給小孩子看的推理小說,這些對大人來說就太過幼稚,沒什麼觀賞價值,可是為了生活,他還是得寫這種東西。

他最好的推理小說都是短篇或中篇,大概不會超過五萬字的那一種。其中我認為最好的,是D坡殺人案和心理測驗。其實他的短篇質量都很高。他的筆名江戶川亂步(本名平井太郎),日文發音就是推理小說之父Edgar Allen Poe(美國作家愛倫坡) 的諧音,也寫過一篇向愛倫坡致敬的中篇「何者」,不過做了比愛倫坡的「汝即真兇」更大膽的嚐試。我的結論是,沒讀過江戶川亂步,等於沒讀過日本的推理小說。

2011年1月12日 星期三

劍雨(有劇透)

天竺神仙索,就此失傳!哇哈哈!

就是這陸竹,林熙蕾寫真有這麼好看?

這片的武打不錯,細雨的軟劍,彩戲師的魔術,以及雷彬的飛針都相當有特色。劇情方面雖然是武俠老梗的集合,但是楊紫瓊和王學圻演出都相當不錯,所以整體還是值得一看。

劇情方面主要就兩個缺失,第一是人鳳身為武學高手的身分,在開頭的圍殺應該要表現的更明顯一點,例如可以讓他多點武打動作,而不是隨隨便便帶過。第二是轉輪王身為小太監這也不太對勁。不是說魔王不能是個小太監,而是以他身手和才能,心機,創立掌握天下的黑石會,他想當大太監是一定當的成,當個小太監究竟有何特別的好處?好過當上大太監?整天做些有的沒的雜事,他又如何實行陰謀?至於他真正的願望,雖然不甚合理,但是卻是一個有趣的設計,個人認為不算劇情缺點。一開始那位愛上細雨的佛法武學第一的和尚,反而因為刻劃不夠顯得有點莫名奇妙,忽然出現又忽然死掉,天外飛來一筆,有點不知所謂。如果跟細雨過去有什麼長久的因緣,會自然一些,可惜他只是看人家長的漂亮就精蟲衝腦,像看了林熙蕾寫真集的國中生一樣,這樣也叫佛法第一就對了。

最後就是這雷彬也太窮了一點,黑石會薪水有這麼低?忽然覺得很同情他。