小松鼠嚇了一跳,有了魔法眼鏡後,這世界看起來完全不一樣了

2008年1月31日 星期四

利用 PEP 263 做 Python Metaprogramming

Python 有一個功能(PEP 236),就是指定 source code 的 encoding,所以我們能夠方便的用 big5 碼、utf-8 碼寫程式。
比方檔案 u8.py
# encoding: bbx
print "Origninal program"
就代表著 source code 的編碼是 bbx。
當然 bbx 這個編碼是不存在的,你執行個程式會發生錯誤。但也正是因為他不存在,所以能夠讓我們利用,比方下面的 bbx.py
import encodings,codecs
from encodings import big5
class reader(big5.StreamReader):
def readline(self, size=None, keepends=True):
rtn=big5.StreamReader.readline(self,size)
if not rtn:
rtn = u'%s\n'%extra.pop() if extra else u''
#print [rtn]
return rtn
def search_function(s):
if s=="bbx":
b5=encodings.search_function("big5")
return codecs.CodecInfo( name='bbx', encode=b5.encode,
decode=b5.decode,
incrementalencoder=b5.incrementalencoder,
incrementaldecoder=b5.incrementaldecoder,
streamreader=reader,
streamwriter=b5.streamwriter)
return None
extra=u"""
print '.........start..........'
print 'Extra lines'
print '..........end...........'
"
"".split("\n")
extra.reverse()
codecs.register(search_function)
if __name__=="__main__":
execfile("u8.py")
指定了 encoding bbx 的解碼方式,然後讓 python 執行 u8.py。
因為 u8.py 設定的編碼方式是 bbx,所以 python 會根據 bbx.py 新定義的的 readline 來讀取 u8.py 檔案。
bbx.py 的編碼方式基本上是 big5,但是多了一個變化,會在檔案後面多加上三行程式碼。
所以執行 bbx.py 之後,除了正常的 execfile u8.py 外,最後還會多加上行。
我們還可以把 bbx.py 放入 site-package 目錄中,並且在 site-package 目錄下建立 bbx.pth,裡面放入一行
import bbx
這樣,python 在執行自動會註冊 bbx 這個編碼,這樣,我們就能直接用 python 執行 u8.py 這個檔案了。
理論上,你可以用 readline 餵 python 吃任何東西。比方說,也許你的編碼器可以把 Lua 程式碼轉成 python 程式碼,可以把 java 轉成 python 程式碼,可以把把中文程式語言轉成 python,可以利用像是 easy extend 增加 python 的功能,或者簡單一點,把所有的內建 type 如 string, long, int 換成 proxy type, 讓你能如做比方做 "aaa".x=3 這類事情。
唯一的差別是,你不用 python fiber.py u8.py 或者 zhpy u8.py 這樣來執行你的程式,你直接 python u8.py 就能執行的你程式了。
更好的是, execfile, import 可以直接用,你的程式碼完全是合法的 python 程式(算是吧)。

2008年1月29日 星期二

Mardi Gras 珠珠嘉年華 (上)


很多人對於 Mardi Gras 和珠珠(Beads)的第一印象是 Girls Gone Wild 的 Flesh for Beads。其實 Mardi Gras 和珠珠的意義比這個要深遠的多。
簡介
Mardi Gras 是法文 Fat Tuesday的意思,是嘉年華會的最後一天。沒錯,和巴西里約熱內盧的那個是同一個節慶,從聖誕節後第十二天(一月六日)一直到復活節前四十六天。除了里約熱內盧外,紐澳良、威尼斯的 Mardi Gras 慶典也很盛大。詳細可以參考 Wikipedia 的描述。
在 Mardi Gras 的花車遊行時,有一個習俗是花車上的人會向群眾丟出珠珠的習俗,這個習俗從哪裡來的,有多久了,我不清楚,不過在美國還挺風行的。 Flesh for Beads 只是關於這個習俗的一部分而已。
我認為這個花車向人群丟出珠珠的習俗,相當有趣,影響可能比表面上看來的要大。這個習俗其實背後有很大的教育意義。
為何搶珠珠
搶珠珠的人,有小朋友,也有大人。也許小朋友會更為重視這些珠珠,但各種年齡層的人都有。珠珠其實並不貴,沒有太多金錢上的價值,大家之所以會去搶,一部份是有趣,一部份是虛榮。而有趣的背後,其實也還是虛榮當作動力,就像是下棋、賭博、打球,要是沒有輸贏,畢竟就比較沒勁。我用虛榮這個詞,沒有不好的意思,而這個虛榮,其實沒有那麼「虛」。
你如果能夠拿到越多珠珠,就代表你很行,是一種榮譽。而這個所謂的很行,不是像打球或者下棋那樣,代表你身手矯健、思慮清晰,而是代表著一種「對於人的能力」的肯定。
什麼意思呢?雖然丟珠珠的人,本來就打算要把珠珠送出去, All beads must go,要來個清倉大贈送。問題是路上人這麼多,這些珠珠他要送給誰?

要求的能力
身為群眾之一,這時你要達到的任務是無中生有,在沒有任何實質回報的情形下,你要讓他願意把珠珠給你,或至少願意在你面前把珠珠丟出去。
眼明手快、思慮清晰對於搶到珠珠是有幫助的,你的守備範圍比較大,選擇好的地段,都有助於你的收穫,但是關鍵是提出要求的能力,請別人幫忙的能力。
最基本的一點是,你要清楚的表達你的訴求,最低要求是,你要讓別人知道「你要珠珠」,至少要讓他看到你,看到你伸手。
但光是這點是不夠的,因為滿街的人都在表達這個要求。在這之上,就是八仙過海各顯神通的時候了。

別人為什麼要幫你
這時,你要問自己,如果在花車上的人是你,你會不會把珠珠丟給群眾中的自己?
你要讓車上的人最容易看到你,所以你要佔據顯眼的位置,手和身體要動,因為活動的物體容易被注意到,比「背景」容易一點。發出一點聲音也沒有壞處。
再來就是要掌握你的「優點」,你是可愛的小朋友?還是漂亮美眉?你的笑容讓人很感覺很親切嗎?這裡有些能力是可以練習培養,可以放大的,但是有一部分就很現實了。但即使先天條件不如人,那也要盡量培養讓人第一眼就感覺親切的感覺。
除了給人直接的親切感之外,你也可以問問自己可以給對方些什麼?拿來當作交換?也許用有實際價值的東西就失去意義了,但是熱情的歡呼尖叫總可以吧。
死纏爛打也許也是一招,主動而明確的伸手去要,總之要給對方一個理由,任何一個理由,讓他把珠珠給你。

以上都不重要
以上的「招數」不是重點,重點是總之,在這個丟珠珠的習俗裡面,小朋友、青少年學習到了「向別人要求」的能力,求人的能力。或者更明白的說,是「搶奪社會資源」的能力。
這個能力的關鍵在於一個不可言喻的眼神,在於時機,不是我能用文字說清楚的。只有在實戰中能磨練。
大部分的社會資源和機會,是掌握在別人手上的,升遷的機會、生意的機會都是。當上面的職位有空缺的時候,別人為什麼要給你?你要給丟珠珠的人一個給你理由。
在搶珠珠的「遊戲」中,小孩鍛鍊到了這種能力。即使沒有鍛鍊到,至少也讓他們趁早瞭解到現實,找到妥協的辦法。

2008年1月26日 星期六

BBS Lua: 繪圖模式


這主要是對[MMDays專欄] 我們需要開放什麼平台?從PTT Lua與Gaaan談起的回應。但不是針對該篇的主要內容,因為 comments 裡面的許多留言已經夠多了。
我主要只對裡面的拿老遊戲來挑戰 BBS 的多媒體效果來做一些回應回憶。
其實一般傳統的文字終端機早就能夠提供繪圖能力了,比那些老中文遊戲還要早就有了。
先不要其他知識,光是把字體縮小,文字長寬欄位增加,就能有不錯的效果了,這就是所謂的 Ascii-art、aalib 做的事情。就連整部 Matrix 的電影都能在文字終端機中顯示了(其實 mplayer 和很多其他 opensource 的軟體會支援 aalib 的 output,所以你其實可以放任意一部你喜歡的電影),還可以在文字 Terminal 上玩 Quack
除了Ascii Art 外,其實傳統終端機是真的可以畫圖的,參考這個
Graphic GUI Capabilities of Text Terminals
有一堆可以在文字終端機畫圖的增強功能指令集,像是 Tektronix 4014,算是工業標準,就連最正宗的 xterm 也支援。它的繪圖功能可以畫出 12bit 顏色的圖,解析度也足夠。一些標準的 plot 軟體也支援這個指令集。
其他一些終端機軟體,也支援各自的非標準指令集,像是 netterm ,雖然應該沒有繪圖指令集,但是理論上(其實算是安全漏洞)可以辦到更多事情,包含開啟小畫家。
不過古時候,大家都是用 DOS NCSA telnet 連 BBS, xterm 還太高檔,不是大家都能用。我忘了 NACA telnet 是否有支援繪圖指令(根據 wikipedia 是說有支援 Tektronix 4014 ),但不要忘了,當時大家用的是倚天中文系統、國僑、零壹中文系統,這些中文系統是有繪圖指令的,甚至早期的中文遊戲也是利用這些指令來畫圖(不過很多 BBS 會擋這個中文繪圖指令集,至少轉信的時候會)。
這些方法十幾年前就有了。
所以說寫這些沒用的功能要做什麼?
引述 ttyquack 作者的話(回答為什麼要寫這個軟體):
If you have to ask why, you're not a member of the intended audience. Please go on about your business and accept my apologies for this distraction.
為什麼要在 vim, emacs, utorrent, ptt2, word (, 或者漢書)裡面玩 tetris?
Because we can。

2008年1月23日 星期三

用 python 寫的 BBS-Lua 模擬器


這一陣子,PTT2 上piaip 發展的 BBS-Lua 開始慢慢流行起來,也就在 BBS 文章中寫小程式的新功能。我不會 Lua,但是覺得挺有趣的,原本打算寫個在 web browser 上的 Lua 解譯器玩玩,那時一方面還不知道有個叫做 JS/CC的東西,另一方面,要在 browser 上模擬文字終端機又要花另外一層功夫,所以打算先用 python 寫,然後看看能不能用 pyjamas 轉成 javascript。
因為這個目的,所以選擇使用 PLT。果然也挺好用的,參考了 Lua 的 Reference Manual,就在完全沒寫過 Lua 程式的情形下,完成了這個模擬器。
說這個模擬器有什麼用,還真沒什麼用,不過就是有趣而已。

困難點
語法的部份還簡單,plt 配上 reference Manual 上的 BNF,大致上就是搬過來。語意上的部份就麻煩了,畢竟像前面說的,我其實沒有寫過 Lua 程式。結果裡面有很多小麻煩,比方 lua 的 table 結構, anonymous function、所有的數字都是浮點數、scope 。此外我對於 metatable 的語意也不太了解,更麻煩的是多變數參數的傳遞和設定。
為了解決這些問題,所以額外的在 python 中模擬出 table 這個 class 和 anonymous function 的方法,雖然都還不完整。
真的要完整,應該要另外再寫個多變數的 class,翻譯出來的程式碼才會比較好看。
現在雖然程式可以跑,但很多地方我也只是弄成讓程式可以跑而已。

使用方式
下載 pylua.tgz 。解開之後,直接利用 python (2.5)執行。
比方要跑 test3.lua,就執行
python plmain.py test3.lua
就可以了,然後會自動產生 test3.lua.py 這個翻譯過之後的程式碼。
翻譯程式碼的功能的功能本身與系統無關,但模擬 bbsL 的功能需要你的終端機支援 VT100/ ANSI color。而 getch 功能則需要 termios,這個是 unix-like 系統下才會有的。
我的發展環境是 cygwin,所以 cygwin 下跑是沒有問題的。
不是每個程式都能跑,但至少 BBS-Lua 上的第一個知名大作「貪食蛇」是可以順利模擬成功。
此外打字練習、一些動畫也能成功。部份受歡迎的遊戲如打磚塊,則需要簡單的 patch (兩行而已)。一些 3D 程式和炸彈超人可以某種程度的進入,但是無法真的 in game。

README
PyLua 這是一個簡單 Lua -> Python 的翻譯器和模擬器
主要是模擬一些 ptt2 的 BBS LUA (由 piaip 設計的)
這個模擬器沒有太多實際用途,而且也很不完整,只是練習寫的程式
( test?.lua 幾乎都比 pylua.py+plmain.py 還要大)

執行方式:
python plmain.py test3.lua
接著,就會執行 test3.lua 並且產生 test3.lua.py 。
以後可以直接 python test3.lua.py
.lua 的編碼是 utf-8,產生的 .py 編碼是 big5(因為我的終端機是 big5的)。
測試環境是 cygwin,理論上, linux 上應該也可以跑。
要改變編碼的話,請修改 plmain.py。

檔案分成:

plmain.py 主程式
pylua.py Lua Parser
bbsL.py stringL.py tableL.py mathL.py 簡單的程式庫模擬

yacc.py 這兩個檔案是 David Beazley 的 Ply
lex.py PyLau 的 Parser 是利用 Ply 建立的

測試範例
test1.lua Tm Calculations for Oligos 作者: phyton
test2.lua 打字練習 作者: realkillman
test3.lua 貪食蛇 作者: piaip
test4.lua 打磚塊 作者: phyton
(修改 math.modf(x)+1 成math.modf(x)[0]+1)
test5.lua 打字練習 作者: Feis
test6.lua 炸彈超人 作者: icespiritual
test7.lua 3D物體顯像 作者: realkillman
test8.lua 搬數字 作者: hrs113355 (兩個簡單修改)
test9.lua 小方格點螢幕 作者: phyton

test 1,2,3,5,9 成功。
test 4,8 需要簡單修改一兩行 source。
test 6,7 失敗,一些小問題可以簡單排除,但是還有一些比較麻煩的問題。

2008年1月15日 星期二

八仙跳海 你一拳 我一腳

王世堅的這次跳海事件,成為這幾天最熱門的新聞。很不幸的,我們又看到了集體暴力的事件。
脫掉情緒上的因素,很清楚的,這個所謂的「承諾」,只是一件小事情,根本算不上誠信問題。
我相信這些嘲弄的人之中,不少都說過或聽過:「阿扁的話能聽,大便都能吃了」這樣的話,你絕對不會因為阿扁說了某句中肯的話,要求這些人吃大便或者責問他們為什麼不去以王世堅標準追打那些名嘴。
即使你要認真追究王世堅的跳海承諾,給他一個月,或者至少一個星期、三天的時間,如果那時候他還沒跳,再來追打也不遲。
在媒體施行集體暴力,逼人太甚的情形下,王世堅企圖用他的王氏幽默回應(曾包圍 TVBS、黃道吉日等等),媒體又再度抓著他的「黃道吉日」一詞挖苦。
好吧,也許你會說,王世堅是有理由讓人討厭的。他鬧過很多有爭議的新聞。先不論他現在的公眾形象是否是被媒體塑造出來的,就像他自己提到的,當初中天記者被群眾攻擊時,他的確有挺身保護,這是有畫面有新聞的。
王世堅就像任何一個人一樣,他也是有好的一面,有壞的一面。你要嘲弄他,就應該針對他做錯的事情去著手。既然王世堅那麼差勁,應該很容易找到他更值得批判的行為吧?
單單就八仙跳海事件來說,嘲弄王世堅的行為,與青少年隨意毆打外勞、校園霸凌事件的本質無異。
看到這裡,也許你多多少少也同意,八仙跳海事件做的有點過頭,但同時你也會認為,你不像媒體或其他人那樣,你只是小小的嘲弄他,只有「適度」的嘲諷他,完全是合理的教訓。你會說,即使他不是罪大惡極,但畢竟還是說了大話吧,稍微挖苦嘲笑他,也只是剛好而已吧!
但所謂的群體暴力,就是每個人一拳、一腳,或者冷言冷語,個別來看,每個人都只是小小的、適度的、在合理範圍的懲罰「犯錯者」,但最後加總在一起,力量卻是很巨大的。
每個人也都看到最後的群體暴力結果,但每個人也都認為自己所要負擔的責任很小、或者根本不是自己的責任。
類似,但是效果相反的現象是,有時媒體會報導某些值得同情的不幸事件,然後許多人都會舉手之勞的捐一點錢,最後聚集的金錢數量往往大得可怕,遠遠超過當初預計的金額。暴力也是一樣,只是比較無形。
不同的是,每個捐錢的人都會自認多少有一點「貢獻」。
更值得注意的是,這個事件是從網路開始,傳統媒體才跟進。網路是很方便的互動媒體,由於某種程度的匿名性、間接性,是群眾暴力的絕佳平台。

還原跳海「承諾」當時場景:

我想,王世堅的意思很清楚,他不是用跳海來挑釁,說對手弱,剛好相反,他是說對手強,自己是最後一道防線,是用跳海在表示自己責任重大。
這就像是馬英九的「當你是人」被扭曲成「不是人」一樣,斷章取義,脫離情境。

延伸閱讀:
自由電子報 - 八仙過海我跳海 王世堅「玩笑話啦」
觀感:跳海事件之落井下石對嗎?
[Chitekim Blog]王世堅會跳海嗎??
69: 跳海事件的關鍵字
看!!!王世堅擇期兌現跳海承諾-票選跳海地點
看!!!票選王世堅要去哪跳海?
王世堅跳海 Vs. USB電暖坐墊
Takol Living Here - [多想一分鐘,你可以不用跳海]
69: 王世堅大家等著你跳海喔 ~ ^_
王大大,你什麼時候要跳海?
王世堅棄政 擇期兌現跳海承諾-Yahoo!奇摩新聞
廢業青年日記: [Twitter] 王世堅之夜
王世堅棄政 擇期兌現跳海承諾-Yahoo!奇摩新聞
自由電子報 - 國民黨若全上 王世堅要跳海 (自由時報,人家中天都解讀成「王世堅絲毫不敢大意」,你偏偏要說「王世堅對自己的選情信心滿滿,揚言如果國民黨在北市八仙過海,他就去跳海。」,這不是借刀殺人嗎?)

2008年1月13日 星期日

魔術、科學、心靈和兩則新聞


隨著科技的進步,相信魔法存在的人越來越少了。魔術帶給人的驚奇感也越來越少,人們看到魔術之後也許還有疑問或好奇,但已經不再是感嘆宇宙的神奇或者懷著對於未知世界的驚嘆,而是「好厲害,怎麼藏的?」「這樣的手法很難練吧,要練很久吧」。
許多過去只有魔法才能辦到的神奇的事情,現在使用科技輕易都能辦到。與遠在千里外的人溝通,看到遙遠地方的事物,讓物體飄浮在空中。
所以有人說,現代的魔術要朝兩個方向發展,不然就是朝向更大更難的部分跑,把自由女神變不見、把月亮變不見、把火星變不見。或者朝向更神秘的心靈部分走,因為科技對於心靈還是沒有太多的辦法。

著名的科幻小說家,Arthur Clarke 說過:
"Any sufficiently advanced technology is indistinguishable from magic."
「任何足夠先進的科技與魔術無異」
而 Ashleigh Brilliant 則說:
"The difference between science and magic is that magicians usually know what they're doing."
「科學和魔術的唯一差別就是,魔術師通常知道自己在做什麼」
哲學家 Will Durant 說:
"Magic begins in superstition and ends in science."
「魔術始於迷信,終於科學」

兩則科學新聞
Mind Reading Is Now Possible - 電腦能夠以 78% 的精確度分辨人類腦中想的是榔頭還是鉗子。這個還沒有完全公認,但根據新聞,是第一個有關腦中想法「內容」的實驗結果。主要是依據 fMRI 來做的。
Hypnotism changes the brain: Study這個新聞應該有點久,主要是說,催眠確實能夠讓人忘掉事物。雖然也許對於催眠師來說,這不是新聞,但的確是最近科學上才能確認這件事情,而且確認說某種程度上,是真的忘掉,而不是假性忘掉。
回到一,也許就連心靈魔術,也要往更高更遠更強的部分發展吧!


Keith Barry 讓一個人忘記自己名字

Keith Barry 的 Black Ops Hypnosis

Derren Brown 地鐵催眠



2008年1月12日 星期六

模糊詞彙的共鳴

我爸的演說其實是很有一套的,常常能夠引起共鳴和熱烈的迴響。這裡面自然是有肢體以及聲音等等非內容的因素,不過呢,但也有內容方面的因素。
內容方面,我觀察到兩個現象,第一個是他的價值觀很「正確」而「標準」,由於大多數的人長期受到標準價值觀的洗腦薰陶,碰到這些「正確」的言論,自然會產生標準而正確的反應。就像千里眼系列的女主角岬美由紀施展龜派氣功的橋段一樣,眾人應聲倒地。我想這也就是「後見之明」實驗背後的原理之一(這個實驗應該在 Mind Hacks 中有提過)。
另外一個就是這篇的主題,模糊性詞彙。模糊詞彙是一個在很多場合下相當有效的技巧,可以用來產生共鳴和「意義」,例如魔術。可以參考心靈術和魔術的書, Kenton Knepper 的 Wonder Words 1。
以下我用一些方式來說明:
Just Do It!
這是一個經典的例子。這個句子沒有清楚說 "It" 是什麼? Do 是什麼動作?就連 Just 都有幾種不同的解釋,比方「只要去做」、「就是去做」、「現在去做」。
因此,聽到這個句子的人,自然會用自己的經驗去賦予這個句子意義,套入適當 Do 和 It。所以銀行搶匪可能也會認同, Just Do(搶) It(銀行)。
所以這樣的句子自然可以影響較廣泛的人,引起共鳴。這類 Slogan、廣告詞的目的本來就是要引起共鳴,所以使用這個技巧是相當巧妙的。

抽象<->具體互換產生的錯覺
另一層的意義,就是暗示你 Just Do(買) It(鞋子)! 沒有人知道 Just Do It 跟運動鞋有什麼關係,但是一旦當你對這句 Slogan 產生共鳴後,除了莫名其妙的你對這個商標產生熟悉感和認同感外,看到這個句子,你會聯想起這個廠牌的鞋子,自然而然的把 It 賦予在鞋子上。
不要忘了,先前你已經因為自身的經驗,同意了 Just Do It 這句話。現在 It 變成鞋子了,那要怎麼去 Do 鞋子呢?你的頭腦會自動填補這個缺口。
這也是模糊詞的另一個妙用,這是 抽象->具體 ->抽象 -> 具體的過程。
一開始是模糊的句子,然後你用自身經驗去找特例,賦予意義,然後回到抽象概念,同意這句話。最後他再利用你同意這句話的基礎上,賦予這個句子另外一個具體的意義,讓你被迫同意他。
因為這一切是你自己(潛意識)推理出來的,而不是他告訴你的,所以你會更容易被這個結論說服。

Impossible is Nothing
這也是另外一句廣告詞,其實你注意的話,很多廣告詞都是用這類模糊的字眼,用以產生共鳴。
Is 或者「是」的意義很模糊的。「玫瑰是紅色的」、「這部車子是我的」、「6*9是54」、「我是魔術師」,「台灣最大的民間團體是去死去死團」,這些「是」的意義都不太一樣,有些是定義、有些是屬於、有些是所有權的概念,當然平常我們依照情境,只要仔細想想,就能判斷這個「是」到底是哪種用法。但是 "Impossible is Nothing" 則不然,因為 Impossible 和 Nothing 的意義都不太明確,所以其實你不容易判斷這個「是」到底是哪種。

我是外省人 反對蔣介石
這句話的來源取自我是外省人 ,反對蔣介石。我們不討論「我是外省人這句話」背後暗示的意義,因為這句話本身並不會太模糊。模糊的是第二句「反對蔣介石」這句話。
什麼叫做「反對蔣介石」?你可以「反對石頭」、「反對太陽」、「反對銅鑼燒」嗎?
反對蔣介石是要反對蔣介石存在、反對蔣介石活著、還是反對他當總統?這裡面的解釋可以很多。經由前面說的「抽象<->具體」的法則,你可以在他的很多作為中找到你不認同的作法,或者很多作法的你不認同的面(另外一些人,也可能經由「抽象->具體」法則找到一些他認同的作法,或者作法他認同的面,不過這點稍後再討論)。
這時候,再經由抽象->具體->抽象,把這個認同點轉換成「去蔣化」等等其他的模糊的詞彙。
當然,作為一個 Slogan,利用模糊化是常見的手法,就像前面說,廣告詞都是這樣。
上面連結裡面有詳細的內容與論點邏輯,不過不在本篇文章討論的範圍。我只補充一點,模糊化的說法,在 Cold Reading 中也很重要,因為你可以「把 Maybe 變成 Yes,把 No 變成 Maybe」,也可以「事後具體化」。
事實上,就宣傳語而言,我覺得甚至要更模糊化一點,不妨改成「我是所謂的外省人,我不崇拜蔣介石」,這樣雖然稍微長了一點點,但還能接受,而且能夠產生更大的共鳴,代表更大的力量(共鳴、力量也是模糊化用語)。

權威的建立與友善的印象
看到前面應該會發現,模糊化詞彙其實是兩面刃,因為讀者或者聽眾,同樣的能夠選擇對你不利的解釋。所以誘導對象去尋找對你有利的解釋,是很重要的。
其中一個就是權威的建立,另外一個是建立友善的印象。假設你是一個德高望重的學者、素有名聲的預言家,你講的一些模稜兩可、晦澀不明的語句,別人如果相信你,會想辦法「聽懂」你,所以自然會去賦予你句子「好的意義」。更妙的是,即使他們找不到適當的意義,他們常常也只會認為是自己資質不夠,沒能聽懂你在講什麼。
相反的,如果別人的目的本來就是要反駁你,那就是完全相反的一回事了。
「你要先知道你要找什麼,才能找到」。

使用正確的詞
正確之所以正確是是有道理的。
前面說過我對我爸的的第一個觀察,使用「正確」的詞彙,「正義」、「人品」、「法治」等等,也是一個很重要的法則。如果你開宗明義就說「在步調快速、冷硬科技產品充斥的現代社會中,我們更應該珍視正義、人品與溫情,而創造幸福祥和的社會與人生是我們畢生的追尋」,雖然這實際上只是完全無意義的一段話,但如果我的開場白講這一段話,即使你覺得八股也好,你會自然陷入一種這傢伙講的話我會同意的想法(八股有時代表著「我早就知道了」)。
但更有可能的是,你會被某一部份打動。首先,你得同意第一句,因為那只是事實陳述。第二句你最少也會有某種程度的認同,而且,我亂槍打鳥,「正義、人品、溫情」三樣,很可能會打中一項你感觸深刻的核心價值。只要打中一槍就夠了。最差最差的情形,你也不可能反對,因為「正義、人品、溫情」這三個詞彙的意義其實都是你自己賦予的。
「更應該」的更是和古人、其他現代人、還是以前的自己比較?
第三句也是,沒有人會否認幸福的人生(或者社會,這裡是打兩槍)不是你的追尋,因為「幸福」的意義也是你賦予的。
而且這三句話,老實說,邏輯上的關連性很低。但這不重要,一旦建立了這個假象,我接下來的論點混亂、邏輯散漫都無所謂,因為你會自動幫我解釋。
這一切都是幻覺,It' s all in your mind!
(相反的,某人喜歡用「道德是什麼,可以吃嗎」這類的開場,當然就有完全相反的效果。)

流行的詞彙
如果你注意到的話,流行的詞彙也常常帶有模糊的味道。比方 M型社會,比例原則,某某事的邏輯、某某事的哲學、宅,這些用法都脫離了原本的定義。「愛台灣」的愛要怎麼愛,台灣是什麼也都有解釋的空間。「王建民做出一個投球的動作」的動作,跟 Do 一樣,是個模糊的詞彙,而就算王建民不是真的投球出去,你也可以解釋「他只是做出一個投球的動作,但是並沒有真的投出去」。
還有「對」這個詞,到底是什麼東西「對」?也留給你解釋。你也可以很方便的忽略它。
「奈米高科技產品」中,到底是什麼東西的那個部分奈米也沒人知道,高科技到底長多高,也沒人計較。

努力必然有收穫
和字面上的意義不同,這個法則可以參考心靈魔術師 Luke Jermay 的 Reversed Gestalt Moment 或者 Banachek 的“Psychological Subtlies” 中的 “Remedies or the Old Witch Doctor”。
簡單的說,就是「他煞費苦心的做了這麼多事情,一定會有什麼事情發生吧!」。
今天如果你是幼稚園老師,你聽到小朋友講 "Impossible is Nothing" 或 "Just Do It",你可能會一笑置之,或者糾正說 "Nothing is impossible"才對。
但是現在是電視上播放的廣告、各地大大的看板上面,被特別強調的句子。這時候,你會自然認為「他們花大筆金錢和精力,宣傳這樣的句子,這個句子總是該有些什麼意義吧?」,這時,你就會進行尋找意義的程序。

妳的把戲我全看穿了
平常生活中,想要像日劇圈套中的山田奈緒子或者魔術師系列中的里見沙希一樣,看穿罪犯或神棍的魔術手法,是不太容易的。因為沒有太多罪犯會用(一般人不懂的)魔術手法來犯罪。
但是模糊詞彙的手法倒是常常可以看到。雖然他們不見得是犯罪或者騙人,但瞭解這個手法後,你也可以大聲說:「妳的把戲我全看穿了!」。

2008年1月10日 星期四

M型憤怒,現在才怒會不會太晚了點

這篇M型你個大頭!還有一些其他類似的文章,都在批鬥現在濫用、亂用「M型社會」這個詞的現象。
我絕對同意「M型社會」是個濫用詞,甚至我對「藍媒陰謀論」採取某種保留的態度,而且相信其中多多少少有人為的操作。
問題是,被濫用的詞實在太多太多了,光挑一個出來批,實在沒什麼意思,我們多列幾個現在或者過去被濫用的詞出來。

台灣之光:因為普遍黑暗才需要光吧(我前面也有文章討論到這個,不過重點不是這個詞被濫用)
愛台灣:只是把以前的「國」換成「台灣」而已。因為沒有人知道愛台灣到底是什麼,所以需要不斷舉例「這就是愛台灣啦」,才能彼此溝通。
比例原則:一堆人開口閉口比例原則,但是沒幾個人知道比例原則是怎麼個比例法的。
無限上綱:無限有那麼容易嗎?
:這個比較像是口頭禪,一堆人沒人問話,就在那裡對來對去。大概是受到新聞或者談話節目影響吧,因為新聞裡面的記者,常常會聽到一些觀眾聽不到的問句。
偽議題:其實我只知道偽命題 Pseudo-Proposition 是什麼,一般人所謂的偽議題大概比較像是「假設性的議題」、「別有目的的議題」、「炒出來的話題」。
邏輯、哲學、科學、電磁波、量子、場、能量、常態分佈、套套邏輯......:太多了,列不完,有幾個誤用的歷史之久,可能辭典都把誤用法放進去了。
老梗:只有老,沒有梗。橋段、構想、創意、理念、典故、意義,全部變成「梗」了。梗差不多就等於「東西」。梗這個字包涵範圍太廣,所以幾乎沒有意義了。於是「老梗」就只剩下老傳達出意涵。
奈米、全球化、藍海、樂活、極簡、低調奢華、混搭:老梗了。
:最近突然在媒體上流行起來了,反正原來是 Hot的,現在就是夯。
當下:現在、時下、當時全部變成當下了。
動作:好像前一陣子還挺常看到的,完全是個贅詞。例:王小明當下一整個正在進食吃飯這個動作...... 對。

其實這些濫用語,就像美國年輕人愛說 like一樣,外人聽起來很刺耳,但是對他們來說,代表著一種歸屬感、同一國的認同感。台灣也很多網路用語。腦殘、Orz都算是,這兩個也都有新聞。 Orz 就不用說了,上星期新聞有法官判決年輕人網路公然侮辱,只因為腦殘這兩個字。
其實「M型社會」這個詞也是一樣,他指代表著一個流行文化上的歸屬感,不管你喜不喜歡,這是一個自然的社會現象,你用大家流行的詞,容易產生認同感、產生共鳴。即使那些用這個詞的人知道這個詞被誤用、濫用(雖然大多數的情形下,我懷疑這點),他絕對也有足夠的理由來利用這個流行詞來快速和讀者產生共鳴、吸引讀者注意。
我很小的時候就怒過了,那時因為楚留香流行「輕功」這個詞,也流行「愛現」這個詞,我發現同學常常用這個些流行詞,但是每個人用的意思和場合都不完全相同,他們只是用而已,就像憋四和大頭蛋那樣,聽到某些詞就會呵呵笑,卻不見得真的在意詞的意義(那時真的很小)。我是到很後來才知道那些詞的意義從來就不是重點。所以雖然當時我也是試著在一些安全的場合下,有意使用這些流行詞,但卻保持了很長時間的疑惑、以及一段時間的憤怒(怒他們怎麼不知道意義就敢使用)。其實根本沒什麼好怒的,「詞的意義就是它在語言遊戲中的用法」
重點從來就不是詞的意義,而是歸屬感,而是再次確認我們可以信賴他人,確認他人是同一國的。這點除了自如同猩猩一樣的社群意識外(象徵著戰與不戰的差別),在現在社會中更加強了他的意義。
現在的社會很大,你很容易碰到陌生人,你更需要一些東西來說服自己,讓你能夠相信別人,相信別人跟你遵守同樣的道德規範、同樣的價值觀。語言是一項,他代表著你和他生活在相似的環境下、看相同的電視。甚至就連日期也是一樣。一月一日有什麼特別的?但是因為大家都覺得他特別,所以他就特別了。所以越是現代的社會,越需要跨年活動,這能讓大家有那麼一點理由相信,還有數十萬、數百萬的人,至少和我有一點點共同點,相信同一套法則,有類似的信念,遵守相同的遊戲規則。所以過節的氣氛是快樂的,中秋節、端午節、聖誕節都一樣
舉個聖誕節的例子最明顯。如果你在都是基督教的國家,像是美國好了,表面上,當然大家尊重你有不同的宗教信仰,尊重你過 Hanukkah 或其他節日而不過聖誕節,官方說法要說 Happy Holiday才政治正確,但是感恩節一過,大家都開始聖誕布置,裝飾屋子。你當然可以不這麼做,但是你會變成社區裡的怪人。也許你可以承受這一點。但是你的小孩在學校時,其他同學都高興的分享聖誕節收到哪些禮物,他們要怎麼做呢?這不是宗教信仰的問題,而是你上不上道的問題。
情人節也是一樣,他背後的商業陰謀論不是問題,因為大家都知道,只是不關心。問題是你上不上道。

2008年1月6日 星期日

GoogleBack Machine

像是壞狗這類的寄人籬下型 Ajax 應用,一個大問題是無法儲存。
比方向是壞狗不道德,儲存搜尋出來的結果,或者編輯常用關鍵字清單。壞狗疊疊樂中,如果那些列表能夠讓使用者自行修改多好。又如果能夠定期紀錄排名,然後追蹤,不是能夠更有用嗎?
理論上既然能夠利用別人的服務來自動讀取資訊,那應該也可以利用別人的服務來自動儲存資訊吧,但這樣其實多半代表這個服務有一些安全上的疑慮,主要原因有三個:
  1. 大多數的服務提供者並不希望自己的儲存空間被他人自由利用。畢竟不是慈善事業。
  2. 就算提供了給使用者儲存的空間,這個私人空間如果能夠被壞狗這類網頁寫入,那這已經算是 XSS 的漏洞了。
  3. 就算真的能利用某種方式,在某個空間中自動儲存東西(不管是公開或私人空間),那麼別人也可能用相同的方式來破壞或者干擾我儲存的資料。
所以其實仔細想一下,好像除了利用 cookie 或者利用 Google Gear 之外,別無他法。但兩個方式都不完美,前者儲存量太少了,後者要另外加裝軟體。
在繼續這個主題之前,我們先看一個服務,Wayback Machine 。這個服務主要是自動將整個 Internet 做備份。但有個缺點,就是新的資料無法很快更新,他只提供六個月之前的資料,而且更新的頻率你也無法控制。
另外有一個服務叫做 Hanzo:Web,就是讓你自己客制化的 Wayback Machine,你可以自己定義多久抓一次,要抓哪些網頁。不過這個服務會提供多久還不清楚,而且也抓不到 script 生成的動態資料。
現在我們可以利用 Mashup 來 DIY 一個 Wayback Machine,而且能抓到 Script 生成的資料。
其實很簡單,我用 Openkapow 寫了一個機器人,你只要利用下列的網址http://service.openkapow.com/weijr/googleback.rss?URL=http://slashdot.org
就能產生一個包含 slashdot.org 網頁內容生成的 RSS。
把slashdot.org 換成其他的網址,就能變成其他的網頁內容。
好吧,但是這樣並沒有辦法儲存舊網頁啊?這就是 Mashup 的精神了,接下來,你用 Google Reader 來訂閱這個 RSS, Google Reader 自動幫你把舊的 feed 存檔。接著再利用 Google Reader 提供的分享功能,產生 feed(配合 c=xxxxxx的參數,可以讀取舊的資料)。再利用 google feed API,就能造出一個 Google Back Machine了。

Remark
  1. 這樣只能替單一的網頁做備份,但 OpenKapow 有 Crawl 的功能,技術上你可以砍站,或者做個 Sitemap 來備份 Sitemap 中的連結。但雖然 Openkapow 遵守機器人協定,這個還是太有侵略性了,所以自己寫比較好。
  2. Google Reader 的 feed 會過濾掉一些 html語法的東西,所以要完整的網頁資訊,最好先將 html 語法編碼成安全的文字。
  3. Openkapow 似乎不支援 Ajax ,但支援許多script 語法。如果你要儲存動態產生的資料,可以特別的寫些網頁,然後利用 script 產生一些內容。最後再用 Openkapow 抓取動態內容。
回到壞狗疊疊樂的例子。如果我想要每個星期紀錄一次「話題女王」的排名,那麼直接利用上面的 GoogleBack Machine 法,似乎不錯。但是壞狗因為用到了 Ajax,所以 OpenKapow 其實無法正確的生成內容。
理論上,我可以用 OpenKapow 做一個和壞狗疊疊樂相同的功能的機器人,產生報表,然後用 Google Reader 紀錄。配合 GoogleBack 的概念,我可以利用壞狗的名單 script,產生一個 google url 搜尋列表,然後用 OpenKapow 機器人去抓這些 Google 搜尋結果就可以了。這樣我只需要維護一份清單。
至於名單的紀錄就比較麻煩,但是我可以利用 Kapow,產生包含名單的 feed,然後讓使用者訂閱這些 feed。最後再用 Cookie 紀錄使用者的 Google Reader feed 網址就可以了。這樣還能支援無限 Undo 的名單編輯。
Hanzo:web 還有 Google 筆記本也可以做類似的運用。

2008年1月2日 星期三

壞狗疊疊樂

繼之前的壞狗不道德搜尋引擎(感謝有興趣的朋友的試用,大陸的朋友 Matrix也將該文貼到Solidot上了),我們又有了一隻新壞狗:「壞狗疊疊樂」。簡單的說,壞狗能幫你看看誰在網路上最紅最有名?是星光幫還是斧頭幫?林志玲還是馬英九?朱學恆還是林一平?豬頭、蔡頭還是蔣友柏?XDite 還是丁丁大站?
名稱由來:
在 Mobile01 以及其他地方,常常會看到一些「比較文」,其中不能免俗的,會有所謂的「疊疊樂」圖片,把要比較的手機、PDA、電腦,甚至汽車、自行車,疊在一起,讓讀者能一目了然,對於這些小玩意的外型做最直接的比較。
壞狗疊疊樂就是取其中「比較」的含意。從 Yahoo 、Google 開始成為網路重心以來,我們常常會用搜尋結果數量來當作熱門度指標,比方「其實我比你有名」這篇,就是一個典型的例子。
有需求,就會有人發展工具。相關的工具從很早以前就有了。現在甚至已經有官方的工具, Google TrendsYahoo Buzz。但你要有名到變成星光幫、馬英九、蔡依林、謝長廷、Monkey,Google Trends 才會幫你畫圖。
壞狗疊疊樂不但幫你一次算出各式各樣的 Google 搜尋結果數量,而且還讓你把各種結果放在一起,玩疊疊樂。
網址:
壞狗疊疊樂
壞狗(疊疊樂和不道德搜尋)的特點在於,沒有主機,完全寄生於 Google 的服務上,純 Ajax。
這些特點一方面是優點,另外一方面也是限制。
有時 Google 會把壞狗當成是惡意軟體,不讓你連線,這時,你可以設定 Proxy試試看,比方說 Hinet 的可以設成 proxy.hinet.net 80,很有可能就能連了。
另外也可以試試看用匿名瀏覽的方式,只是這樣會很慢。
使用說明:
一開始使用壞狗疊疊樂的時候,可以點選左邊預先設定好的列表,看看誰是台灣最紅的名模?星光幫裡面誰最紅?總統候選人誰人氣最旺?飛輪海紅還是F4 紅?
然後,你可以清空所有結果、從上面搜尋框加入新的關鍵字,點選不同欄位改換排序。
也可以編輯右側的文字名單,一次整批搜尋,或者紀錄到左邊暫存。
你可以把右側名單複製,然後留在自己電腦的文字檔中。下次用壞狗疊疊樂的時候,直接貼回到右側的文字框中,然後按送出,就能整披查詢了。