我的外部記憶區

2006年5月23日星期二

快樂的守則

起步

  1. 早上一起身便對著鏡依起棚牙,開心的豬頭炳,幾時也開心過憂鬱小生。
  2. 越早起身越好,晏起床的人總好像不大快樂。
  3. 無論怎樣忙,一定要食早餐,而且一定要把早餐慢慢歎。一早起來便趕喉趕命,整天都會有『唔知為乜』的感覺。
  4. 大解後才出門。

待人

  1. 喜歡你喜歡的人,討厭你討厭的人,待人毋須平等。
  2. 告訴你喜歡的人你喜歡他╱ 她。
  3. 無關重要的人誤會了你,便由得他們一錯再錯。
  4. 無條件為喜歡的人辦事。
  5. 無端白事送件禮物給自己喜歡的人。
  6. 待人以誠,對方不誠便立即遠離,勿拖拖拉拉,做大戲才須好頭好尾。
  7. 任何條件也不為討厭的人辦事;雖小氣,免勞氣。

裝修

  1. 不要在白鴿籠內建造羅馬柱。
  2. 客廳不置組合櫃,空間頓增加七倍。
  3. 別讓室內設計師把你的房子設計成他認為理想的房子,除非你打算與他同居。

財政

  1. 不打算炒賣任何東西,便無忌。
  2. 帳單收到立即付,便無牽無掛。
  3. 可以送錢給人,別借錢給人。當然也可以不送錢不借錢給人。
  4. 可以有多少錢,並不是由自己決定的,毋須一天到晚『數住』。
  5. 間中買貴了,不值得耿耿於懷。
  6. 床單至少有兩張,信用卡只需一張。

從簡

  1. 不動用自己不懂的字眼。
  2. 不去了解自己不明白的人。
  3. 週末 ╱假期不一定需要有節目。
  4. 不講大話便不用記住講過什麼。
  5. 不扮野便不用記住要扮左乜野。
  6. 不要看不順眼的人 ╱事物,別看需要邊看邊罵的東西,一年頂多看一次半次好了,例如港姐選舉。
  7. 不用應酬你認為是『應酬』的飯局 ╱聚會 ╱出席等等。
  8. 把 Appointment Book 丟掉,你不是牙醫。
  9. 你不需要兩隻手錶,當然更不需要兩副面孔,徒增添維修費用。

接吻

  1. 別濕吻不愛的人,手尾好長。
  2. 更加不可濕吻權貴的屁股,乾吻、甚至輕啄也不宜。
  3. 接吻時,全情投入,別看鐘錶,別看股價,別看天地萬物。
  4. 保持舌頭清潔。
  5. 吻時別嚼香口膠,也不要把對方當作香口膠來嚐。
  6. 有冇人錫,都要錫自己。

飲食

  1. 每天至少吃兩個水果。
  2. 眼睛多吃冰淇淋,便可減少眼火爆。
  3. 路過涼茶鋪,不妨幫襯一下-有無幫助不重要,自己覺得好便是好。
  4. 茶樓酒館宜少去,免得二手煙頂住你個肺。
  5. 雞肋及其他食之無味的東西,毫不可惜地棄之。
  6. 飲水,飲水,再飲水。

睇戲

  1. 遠離慘情片,尤其是那些真摰動人的;哽咽有礙呼吸,好辛苦。
  2. 看不明白大師的電影,不用內疚,也不必扮欣賞。
  3. 睇戲當然要吃零食。
  4. 拒絕看配了廣東話的外語片,尤其是成人電影。
  5. 請女人看極度驚慄片之前,自己先獨自看一次,免得屆時出醜。
  6. 專心看戲,不分心在戲院偷錄。
  7. 睇鹹片不要拗劇情。

工作

  1. 適可而止。

得失

  1. 過後不過一啖笑,記住起身依起棚牙,性感豬頭炳嚇不死人也嚇死自己,好happy 。

悲觀的人說「知易行難」,樂觀的人說「知難不難」。

2006年5月18日星期四

十種可頭腦清醒的大腦體操

試試以下10種在生活中可以簡單實踐的大腦體操,培養健康生活模式,讓你的大腦更靈光!

加州大學洛杉磯分校記憶門診與老化中心主任斯默爾在所著《讓大腦變年輕》中說,預防大腦加速老化,總比想辦法修補受損腦細胞容易,對抗大腦老化永遠不嫌遲也不會太早。

與其迷信神奇的聰明藥,或花大把銀子去上大腦補習班,不如試試以下10種在生活中可以簡單實踐的大腦體操,培養健康生活模式。


玩出創造力

即使是初學者,面對需要動腦思考、判斷、布局的遊戲(如橋牌、西洋棋、象棋),每一步都能想出10種以上的玩法。紐約市愛因斯坦醫學院一項21年的研究發現,每星期至少玩一次遊戲(如西洋棋、橋牌等)的老年人,比不玩遊戲的老年人減少50%罹患老年痴呆症的機會。   

培養急速反應能力

  任天堂等電動玩具、小鋼珠能訓練快速反應能力,並且在快速集中注意力後得到相對放鬆。喬治華盛頓大學神經學教授瑞司塔克建議工作空檔時玩丟紙團遊戲:背對垃圾桶約六英尺處,手拿紙團快速轉身將紙團丟進垃圾桶。   

生活裡創造新經驗

一成不變的生活方式會扼殺腦力,杜克大學腦神經生物學家凱茲在《讓你大腦new一下》中鼓勵人們破除生活慣例,創造新經驗。例如挑選全新的路線上班上學,搜尋新路上有什麼聲音、哪種味道、哪種風景;每天到不同的餐館吃飯,嘗新滋味,讓感官經驗多元。   

體驗自助旅行的樂趣

旅行的意義在于開闊視野、感受新環境的刺激,所以出國旅行應避免參加大型旅行團或通華語的市區導覽團,盡量選擇自由行或自助旅行,最好能租車或搭乘大眾交通工具。到當地的市集逛逛,多花一點時間在調味料或香草區,聞聞看你未曾接觸的味道,和當地人聊天,使大腦保持能隨時面對新問題的最佳狀態。意想不到的挑戰將使大腦神經細胞有機會發展新連結。   

用音樂放鬆心情

據說聽莫紮特的音樂可以改善空間感,促進大腦邏輯發展,然而領有美國音樂治療協會AMTA証照的專業音療師徐綺蘋說,所謂“莫紮特效應”是媒體斷章取義和市場炒作的結果,當初主持莫紮特效應研究的學者後來表示,該項研究樣本過少、研究時間太短,不能証明莫紮特音樂對于大腦發展有長期助益。但是音樂對大腦還是有積極的作用的。

吃對食物

富含Omega3脂肪酸的食物有助于腦細胞保持柔軟有彈性、降低罹患心血管疾病以及中風的風險,例如酪梨、油菜籽油、亞麻仁油、橄欖油、綠色葉菜類、鮭魚、鮪魚、鱒魚等。而蔬果中所含的天然抗氧化劑能保護腦細胞不受自由基侵害並增強記憶力,例如梅子、葡萄幹、藍莓、草莓、菠菜、李子、青花菜、柳橙等。   

閱讀是全腦活動

閱讀時帶動視覺皮質,手要翻書眼睛要動,書本上的字轉成音、音儲存到前腦變成意,閱讀提升智能。每讀一個字就會激發相關的字,因此也可以提升創造力和想象力。   

激活全感官經驗

觀察小嬰兒認識新事物的步驟,一定是動手摸、看看它,然後聞一聞、咬咬看。專家建議,激活多種感官做同一件事,加入平常少用的感官如嗅覺、觸覺,避開大腦預期的模式,能建立新的神經連結地圖。例如回家時閉起眼睛找電燈開關,回憶拖鞋放哪、桌椅在哪、房間的方位。   

運動讓大腦年輕

  運動會刺激天然抗憂鬱荷爾蒙腦內啡的釋放,減輕壓力;而打球或做家務事等制式工作能壓抑掌管情緒的杏仁核無故發射,不讓壞情緒來搗蛋。有氧運動則會促進身體新陳代謝,把氧氣帶上腦袋。伊利諾大學腦神經科學家克空比建議,每天15分鐘的快走就能保持良好體能狀態,並減緩腦神經細胞流失速度。   

留白思考

大腦體操不是讓大腦累到不行。斯坦福大學研究發現實驗室動物長期暴露在壓力荷爾蒙下,會使海馬記憶學習中樞有萎縮現象。

麻省的威廉斯學院心理學教授索羅門說,壓力將使你無法集中注意力,大腦記憶能力也降低。專家建議,工作再忙每天都記得留白半小時到一小時時間,整理思緒,靜坐、冥想都是紓壓的好方法。

2006年5月15日星期一

花支語

1朵 一見鍾情、你是我的唯一、唯一的愛、對你情有獨鍾、心中只有你、你是唯一

2朵 你儂我儂、心心相印、世界只有我和你

3朵 我愛你、山盟海誓

4朵 誓言、承諾、海誓山盟

5朵 無怨無悔

6朵 順心如意、順利、永結同心、願你一切順利

7朵 天天想你、相逢知心、求婚、祝福、喜相逢、祝你幸運

8朵 珍貴彌補、歉意、彌補、深深歉意、請原諒我

9朵 天長地久、長相廝守、堅定的愛、長相守、堅定、彼此相愛久長

10朵 十全十美、完美的你、完美的愛情

11朵 最愛、最愛的你、雙雙對對、一心一意、今生最愛還是你

12朵 比翼雙飛、求婚、圓滿組合、心心相印

13朵 暗戀、暗戀的人

17朵 暗戀、暗戀的人

20朵 兩情相悅、一生一世、永遠愛你、此情不渝

21朵 我的最愛、最愛

22朵 兩情相悅、雙雙對對

24朵 無時無刻、思思念念、思念(24小時無時不思念)

30朵 不需言語的愛

33朵 我愛你、三生三世、非常愛你、深情呼喚我愛你

36朵 我心屬於你、浪漫心情、全因有你

44朵 至死不渝、山盟海誓、恆古不變的誓言

50朵 無怨無悔、無悔的愛

55朵 無怨無悔

56朵 吾愛

57朵 吾愛吾妻

66朵 順利、事事順利、情場順利、六六大順、細水長流、真愛不變

77朵 喜相逢、求婚、情人相逢、有緣相逢、相逢自是有緣

80朵 彌補

88朵 彌補歉意、用心彌補一切的錯

99朵 長相廝守、堅定不移的信念、天長地久、地老天荒、永恆的愛 知心相愛恆久遠

100朵 白頭偕老、百年好合、愛你億萬年、百分之百的愛

101朵 直到永遠、無盡的愛、唯一的愛、你是我唯一的愛

108朵 求婚、嫁給我吧、無盡的愛

111朵 無盡的愛

123朵 愛情自由、自由之戀

144朵 12×12愛你日日月月、愛你生生世世

365朵 天天想你、天天愛你

999朵 天長地久、愛無止休長相廝守、至死不渝、無盡的愛

1001朵 一輩子的最愛、一心一意、直到永遠、忠貞的愛至死不渝

10000朵 愛一萬年

2006年5月8日星期一

失落的寶物 --約櫃、聖杯可能藏在丹麥波荷木島

中時電子報 03:20 閻紀宇譯

在丹麥學者哈根森與英國學者林肯合著的新書-「聖殿騎士團的神秘島」說,基督教與猶太教失傳多年的兩件最神聖寶物-「約櫃」(Arkof the Covenant)與「聖杯」(Holy Grail),可能是被十字軍時代的軍事宗教修會「聖殿騎士團」埋藏在波羅的海的波荷木島,而且時間長達近八百卅年。波荷木島現屬丹麥,面積五百八十七平方公里,島上約有四萬五千名居民。

哈根森和林肯綜合歷史文獻與考古發掘,發現聖殿騎士團曾在一一一八年至一一二七年之間,前往耶路撒冷的聖殿山搜尋,而根據法國沙爾特大教堂(聖殿騎士團的重要基地)的石柱浮雕圖案顯示,聖殿騎士團這次搜尋的目標應該就是約櫃,並且很可能已經完成任務。至於聖杯的部分,依據傳說,負責安葬耶穌的「抹大拉的馬利亞」與「亞利馬太的約瑟」將聖杯帶往法國南部的雷恩勒夏陀,而當地正是聖殿騎士團的重要據點之一。

在聖經等古老文獻的記載中,「約櫃」是一只由皂莢木與黃金打造的方櫃,其中存放著刻有十誡的兩塊石版,十誡是由上帝在西奈山授予摩西,代表上帝與以色列人所立的約法。聖杯則是耶穌基督在上十字架前,與十二門徒在「最後的晚餐」中所用的酒杯。好幾世紀以來,歷史學家與考古學家不斷搜尋蛛絲馬跡,試圖找出這兩件無價之寶的下落,但是迄無所獲。甚至連美國好萊塢都曾以約櫃為主題,拍了「法櫃奇兵」賣座電影。

至於「聖殿騎士團」則是中古歐洲(十字軍東征時代)最著名的基督教軍事宗教修會。一一一九年前後,八或九名法國騎士為了保衛十字軍所建立的耶路撒冷拉丁王國與基督教朝聖者,創建了「基督與所羅門聖殿貧窮騎士團」,後世稱為「聖殿騎士團」。這個團體興盛了一百餘年,藉由劫掠、貴族奉獻與教皇特權累積了大量財富,但是在一三一二年遭教皇解散;一三一四年,聖殿騎士團最後一任大頭領遭宗教法庭以火刑處死。歷來有許多學者猜測,聖殿騎士團的財富至今仍埋藏在歐洲、北美洲甚至北非的某個神秘地點。

據哈根森與林肯研究,聖殿騎士團創始人的祖先正是來自波荷木島,這個島位置偏遠,不會引人注目,而且面積不大,容易防禦,因此聖殿騎士團除了在島上建立了許多座圓頂教堂,後來並埋下其最重要的寶藏,時間可能在一一六二年前後,當時聖殿騎士團正在波羅的海沿岸與異教徒作戰。哈根森與林肯發現,波荷木島上這些圓頂教堂的位置分佈圖形暗藏玄機,具有精確的數學性,可能正是一份指點迷津的藏寶圖,其中一部分顯示出等邊六角的大衛王星形,可能是最重要的線索。

Unix痛恨者手冊2:第七章:Find

Unix最為恐怖的是,不管你被它開過多少次瓢,你總是沒法失去知覺。它就這麼開來開去,沒完沒了。

——Patrick Sobalvarro

在一個龐大的文件系統中遺失個把文件是常有的事(想像一下大海撈針)。現在由於更大更便宜的磁盤的出現,PC和Apple用戶也遇到了這樣的問題。為了解決這個問題,系統往往提供一個搜索程序,根據各種條件(比如文件名稱,類型,創建時間等等)進行文件搜索。Apple Macintosh和微軟Windows都提供強大、方便、穩定的文件搜索程序。這些搜索程序的設計中考慮到了用戶習慣和現代網絡。Unix的搜索程序find考慮的則不是用戶,而是cpio,一個Unix備份工具。Find沒能預見到網絡的存在和文件系統的新功能(如符號鏈接),即使是經歷了反覆修改,它還是無法很好工作。於是,儘管它對於遺失文件的用戶意義重大,find還是不能穩定、正常的工作。

Unix的作者們努力是find跟上系統其他部分的發展,但這並不容易。今天的find有各種特殊的選項用於處理NFS文件系統,符號鏈接,執行程序,交互式地執行程序,甚至直接使用cpio或cpio-c格式對找到的文件進行歸檔。Sun公司修改了find,添加了一個後台程序建立系統上每個文件的索引數據庫,由於一些奇怪的理由,當你不加任何參數執行"find filename"時,這個數據庫被用於進行搜索,(夠安全 的,是吧?) 即使有個這麼多修修補補,find還是不能正常工作。

例如,csh見到符號鏈接會順著走下去,但find不會:csh是伯克利(符號鏈接的發源地)的傢伙們寫的,可是find是從AT&T的原始時代開始就有了。就這樣,東西方的文化差異激烈地碰撞了,造成了巨大的混亂:

日期: Thu, 28 Jun 1990 18:14 EDT 發信人: pgs@crl.dec.com 主題: more things to hate about Unix (更多恨的理由,就在Unix) 收信人: UNIX-HATERS 這個是我的最愛。我在一個目錄下工作,想用find去找另一個目錄裡的文件,我是這麼做的: po> pwd /ath/u1/pgs po> find ~halstead -name "*.trace" -print po> 看來沒有找到。不過別忙,看看這個: po> cd ~halsead po> find . -name "*.trace" -print ../learnX/fib-3.trace ../learnX/p20xp20.trace ../learnX/fib-3i.trace ../learnX/fib-5.trace ../learnX/p10xp10.trace po> 嘿!文件就在那裡呀!下次如果你想找一個文件,記住隨機到各個目錄下轉轉,說不定你要的文件就藏在那裡呢。Unix這個廢物。

可憐的Halstead同志的/etc/passwd記錄一定是使用了符號鏈接去指向了真正的目錄,所以有的命令工作,有的不工作。

為什麼不改改find,也讓它順著符號鏈接呢?這是因為任何一個指向高一級目錄的符號鏈接都會把find引入死循環。要處理這種情況需要精心的設計和小心的實現,以保證系統不會重複搜索同一個目錄。Unix採用了最簡單的做法:索性不處理符號鏈接,讓用戶自己去看著辦吧。

聯網系統變得越來越複雜,問題也越來越難以解決了:

日期: Wed, 2 Jan 1991 16:14:27 PST 發信人: Ken Harrenstien 主題: Why find doesn't find anything (為什麼find什麼也找不到?) 收信人: UNIX-HATERS 我剛剛發現為什麼"find"不再工作了。 儘管"find"的語法非常噁心怪異,我還在勉強用它,以免幾小時泡在在迷宮似的文件目錄中去尋找文件。 在這個有NFS和符號鏈接存在的勇敢新世界裡,"find"沒用了。我們這裡的所謂文件系統是由眾多文件服務器和符號鏈接組成的一團亂麻,"find"哪個也不想去處理,甚至連選項也不提供... 結果是大量的搜索路徑被無聲無息 地忽略了。我注意到了這個,是在一個很大的目錄下搜索時結果一無所獲,最後發現是因為那個目錄是個符號鏈接。 我不想自己去檢查每一個交給find的搜索目錄——這他媽應該是find的工作。我不想去每次這類情況發生時都要去調查一下系統軟件。我不想浪費時間來和SUN或者整個Unix黨徒們做鬥爭。我不想用Unix。恨,恨,恨,恨,恨,恨,恨,恨。 ——Ken (感覺好些了,可還是有點惱)

如果想寫個複雜一點的shell腳本對找到的文件進行處理,結果往往會很奇怪。這是shell傳遞參數方式所產生的悲慘後果。

日期: Sat, 12 Dec 92 01:15:52 PST 發信人: Jamie Zawinski 主題: Q: what's the opposite of 'find?' A: 'lose' (問題:'find'的反義詞是什麼? 答案:丟失) 收信人: UNIX-HATERS 我想找出一個目錄下的所有的沒有對應.elc文件存在的.el文件。這應該不太難,我用的是find. 不過我錯了。 我先是這麼幹的: % find . -name '*.el' -exec 'test -f {}c' find: incomplete statement 噢,我記起來了,它需要個分號。 % find . -name '*.el' -exec 'test -f {}c'\; find: Can't execute test -f {}c: No such file or directory 真有你的,竟然沒去解析這個命令。 % find . -name '*.el' -exec test -f {}c \; 咦,似乎什麼也沒做... % find . -name '*.el' -exec echo test -f {}c \; test -f c test -f c test -f c test -f c .... 明白了。是shell把大括號給展開了。 % find . -name '*.el' -exec test -f '{}'c \; test -f {}c test -f {}c test -f {}c test -f {}c 嗯?也許我記錯了,{}並不是find使用的那個「替換成這個文件名」的符號。真的麼?... % find . -name '*.el' \ -exec test -f '{}' c \; test -f ./bytecomp/bytecomp-runtime.el c test -f ./bytecomp/disass.el c test -f ./bytecomp/bytecomp.el c test -f ./bytecomp/byte-optimize.el c .... 喔,原來如此。下面該怎麼辦呢?我想,我似乎可以試試"sed..." 可我忘記了一個深刻的哲理:「當遇到一個Unix問題的時候,有的人會想『我懂,我可以試試sed.』這下他們有兩個問題去對付了。」 試驗了五次,閱讀了sed手冊兩遍,我得到了這個: % echo foo.el | sed 's/$/c/' 於是: % find . -name '*.el' \ -exec echo test -f `echo '{}' \ | sed 's/$/c'` \; test -f c test -f c test -f c .... OK, 看來只能去試試所有shell引用的排列組合了,總會有一款和我意吧? % find . -name '*.el' \ -exec echo test -f "`echo '{}' \ | sed 's/$/c'`" \; Variable syntax. % find . -name '*.el' \ -exec echo test -f '`echo "{}" \ | sed "s/$/c"`' \; test -f `echo "{}" | sed "s/$/c"` test -f `echo "{}" | sed "s/$/c"` test -f `echo "{}" | sed "s/$/c"` .... 嗨,最後一個似乎有戲。我只需要這麼幹一下: % find . -name '*.el' \ -exec echo test -f '`echo {} \ | sed "s/$/c"`' \; test -f `echo {} | sed "s/$/c"` test -f `echo {} | sed "s/$/c"` test -f `echo {} | sed "s/$/c"` .... 別急,這是我想要的,可是你為什麼不把{}替換成文件名呢?你再仔細瞅瞅,{}兩邊不是有空格麼?你究竟想要什麼? 哦,等等。那個反單引號間的引用被當成了一個元素。 或許我能用sed把這個反單引號過濾掉。嗯,沒戲。 於是我用了半分鐘去想如何能運行"-exec sh -c..."之類的東西,終於出現了曙光,寫了一段emcas-lisp代碼去做這件事。這不困難,挺快的,而且工作了。 我真高興。我以為一切都過去了。 今天早上我洗澡的時候突然想到了另一種做法。我試了一次又一次,深深墜入了她的情網,意亂情迷,無法自拔。醉了。只有罕諾塔的Scribe實現曾給過我這樣的快感。我僅試了12次就找到了解法。對於每個遍歷到的文件它只產生兩個進程。這才是Unix之道! % find . -name '*.el' -print \ | sed 's/^/FOO-/'|\ sed 's/$/; if [ ! -f ${FOO}c]; then \ echo \ $FOO; fi/' | sh BWAAAAAHH HAAAAHH HAAAAHH HAAAAHH HAAAAHH HAAAAHH HAAAAHH HAAAAHH!!!! —Jamie

OK, 在下水道裡玩捉迷藏挺有意思的吧?第8章就在歡聲笑語中這麼結束了。下回書我們就要開始編程了,還記得小時候那個可愛迷人的護士阿姨是怎麼對你說的麼?

「牛牛別怕,不疼的。」

Unix痛恨者手冊:第三章:文檔

文檔什麼文檔

「使用UNIX進行操作系統教學的一個好處是,學生的書包能裝下所有的UNIX源代碼和文檔。」
—— John Lions, 新南威爾士大學,1976年在談論UNIX版本6時說的一段話。
多年以來,有三個獲得UNIX有關知識的簡單途徑:
閱讀源代碼寫一個自己的UNIX給寫UNIX的程序員打電話(或是發email)
和荷馬史詩一樣,UNIX被口頭傳誦著。如果不成為內核黑客,你就不可能是一個嚴肅的UNIX用戶——或者至少應該在身邊有個觸手可及的內核黑客。那個確實存在的文檔——man手冊——不過是一些已經知道自己在做什麼了的人所收集的一些備忘錄。UNIX的文檔是這麼簡潔,你能在一下午讀完它。
[編輯]
在線文檔

man工具是UNIX文檔系統的基礎。man接受你輸入的參數,找到相應的文檔文件,把它輸出到nroff(還包括一些地球上沒有其他地方使用的一些文本格式宏),最後結果被發送到pg或more。
起先,這些零碎文檔被叫做」man頁」(man pages),因為這些文檔多為一頁左右(多數情況是少於一頁)。
man對於那個時代是個不錯的玩意,但那個時代早已一去不復返了。
多年來,man系統不斷發展成熟。值得稱讚的是,它並沒有像UNIX的其他部分一樣搞得代碼混亂程序難懂,可是它也沒變得更有用。事實上,在過去的15年中,UNIX的文檔系統只有了兩處改進:
catman. 程序員曾「驚喜地」發現除了nroff格式以外,他們還能存儲處理過的文檔文件,這樣文檔調出的速度就更快了。 對於今天的快速處理器,catman似乎不那麼需要了。
但是許多nroff處理過的文檔文件仍然佔據著用戶的幾兆磁盤空間。makewhatis, apropos和key (最終構成了man –k功能)是一個對man手冊進行索引的系統,這樣即使不知道程序的確切名字也能進行查詢。
與此同時,電子出版的勢頭早已超過了man手冊。使用今天的超文本系統你能用鼠標從一篇文章跳到另一篇文章;與之相比,man手冊僅僅在末尾提供」SEE ALSO」一節,讓用戶自己再man下去。在線文檔的索 引功能又是如何呢?今天你可以買到CD-ROM上的牛津英語詞典,它對其中的每一個詞都加了索引;可是man手冊還是僅僅對命令名和描述行進行索引。今天甚至連DOS都提供了有索引的超文本文檔。可是man手冊還是採用適合DEC打印終端的80列66行的格式。
公平點說,有些廠商是在看不下去,提供了自己的超文本在線文檔系統。在這些系統上,man手冊走到了進化的盡頭,常常不是過時了,就是根本不存在。
[編輯]
「我知道它就在這裡,可就是找不到」

對於今天還在使用man手冊的人來說,最大的問題是告訴man你要的man手冊就在那裡。在以前,查找man手冊是很容易的:全都在/usr/man下頭。後來man手冊按章節分成了不同的目錄:/usr/man/man1, /usr/man/man2,/usr/man/man3等等。有的 系 統甚至把「本地」man手冊也放在/usr/man/man1下。
當AT&T發佈系統V的時候,情況變得費解了。/usr/man/man1目錄變成了/usr/man/c_man,似乎字母比數字更好記。在有些系統上,/usr/man/man1變成了/usr/local/man。那些銷售UNIX應用程序的公司開始建立自己的man目錄。
最終,伯克利修改了man程序使得它能對環境變量$MANPATH中指定的一系列目錄進行查找。這是個偉大的想法,只有一個小毛病:它不工作。(以下省略100字, 因為我太懶了,內容也有些太過時了,Linux上的 man 還是不錯的,除了無法獲得shell內部命令的man手冊,當然,man bash是一個選擇
-- me)。
[編輯]
這個就是內部文檔?

一些大的UNIX工具也提供自己的文檔。許多程序的在線文檔是一行叫人費解的 「使用」(usage)說明。下面是awk的「使用」說明:
% awk
awk: Usage: awk [-f source | 『cmds』] [files]
是不是挺有用的?複雜一些的程序有著更深入的在線文檔。不幸的是,它們有時候描述的似乎不是你正在運行的程序。
Date: 3 Jan 89 16:26:25 EST (Tuesday)X-Virus: 6From: Reverend Heiny To: UNIX-HATERSSubject: A conspiracy uncovered (陰謀被揭露了)

經過幾個小時的專心研究,我得出了一個重要的結論:

UNIX是狗屎 (UNIX sucks)

現在,你可能覺得很驚訝,但這是事實。這項研究已經被遍佈全球的研究人員所證實了。

更為重要的是,這不僅僅是攤狗屎,而是又稀又粘的臭狗屎,是大寫的臭狗屎。看看下面這個例子,你就知道了:

toolsun% mail
Mail version SMI 4.0 Sat Apr 9 01:54:23 PDT 1988
Type ? for help
「/usr/spool/mail/chris」: 3 messages 3 newN 1 chris Thu Dec 22 15:49 19/643 editor saved 「trash1」N 2 chris Tue Jan 3 10:35 19/636 editor saved 「trash1」N 3 chris Tue Jan 3 10:35 19/656 editor saved 「/tmp/ma9」& ?Unknown command: 「?」&
什麼樣的系統環境(特別是這個到了能開車、投票、喝啤酒年齡的傢伙)會拒絕一個它讓使用的命令?
為什麼用戶手冊是如此脫離現實?
為什麼這些神秘的命令是這麼和功能不符?
我們不知道Heiny的問題是什麼;和我們上面提到的一些問題一樣,這個bug似乎已經被修正了。或者說,它被轉移到了其他程序中。
Date: Tuesday, September 29, 1992 7:47PMX-Virus: 6From: Mark Lottor To: UNIX-HATERSSubject: no comments needed (無需多說)

fs2# add_clientusage: add_client [options] clientsadd_client -i | -p [options] clients-i interactive mode – invoke full-screen mode

[還有一些選項,這裡省略了]

fs2# add_client -i

Interactive mode uses no command line arguments
[編輯]
如何得到真正的文檔

實際上,UNIX最好的文檔是經常用strings處理程序二進制代碼。使用strings你能得到所有程序中定死了的文件名,環境變量,未公開的選項,怪異的錯誤信息等等。比如,如果你想知道cpp是如何去查找頭文件的,你最好使用strings而不是man:
next% man cpp

No manual entry for cpp.

next% strings /lib/cpp | grep //lib/cpp/lib//usr/local/lib//cppnext%

嗯…別著急

next% ls /libcpp* gcrt0.o libssy_s.acpp-precomp* i386/ m68k/crt0.o libsys_p.a posixcrt0.onext% strings /lib/cpp-precomp | grep //*%s*///%s/usr/local/include/NextDeveloper/Headers/NextDeveloper/Headers/ansi/NextDeveloper/Headers/bsd/LocalDeveloper/Headers/LocalDeveloper/Headers/ansi/LocalDeveloper/Headers/bsd/NextDeveloper/2.0CompatibleHeaders%s/%s/lib/%s/specsnext%

我真笨。NEXTSTEP的cpp使用了/lib/cpp-precomp。你不可能在man手冊中發現這些。

next% man cpp-precomp

No manual entry for cpp-precomp.
OK. 這一切究竟是因為什麼?這一切究竟是從何而來?下回分解。
上回書說到源代碼是最好和唯一的文檔,根本原因是因為UNIX是...
給程序員用的,不是用戶
別因為UNIX蹩腳的文檔而責怪Ken和Dennis。 UNIX剛開始建立文檔時並沒有遵守業界流行的文檔標準,一些bug和潛在的陷阱,而不是程序的功能,被記錄了下來,這是因為讀這些文檔的人往往就是UNIX系統開發者。對於許多開發者來說,man手冊不過是收集bug報告的地方。那些針對初級用戶、程序員和系統管理員提供文檔的觀念是新玩意。可悲的是,由於70年代建立的UNIX文檔系統,這一觀念實現的並不是很成功。
UNIX世界認識到了這些文檔方面的現狀,但並不覺得有什麼大不了的。《UNIX生活》很客觀地說明了UNIX對於文檔的態度:
UNIX源代碼是最好的文檔。畢竟,這是系統用以決定該如何運行時所參照的文檔。文檔用來解釋代碼,經常是一些不同的人在不同的時間寫成的,而這些人往往不是寫代碼的人。你應該把這些文檔看作是指南。有時候這些文檔不過是些期望而已。
但是,更一般的做法是去源代碼中尋找未被文檔化使用方法和功能說明。有時候你會發現一些文檔中記錄的功能其實並沒有被實現。
這還只是針對用戶程序。對於內核,情況就更為糟糕了。直到最近,還沒有廠商提供的設備驅動編寫和內核級調用函數的文檔資料。有人開玩笑說:「如果你覺得需要閱讀關於內核函數的文檔,那麼很可能你本來就不配使用這些函數。」
真相恐怕更為邪惡。之所以沒有內核文檔是因為AT&T把它的代碼看成是商業機密。如果你想寫一本說明UNIX內核的書,那麼你就等著入被告席吧。
[編輯]
源代碼就是文檔

命裡注定,AT&T的計劃弄巧成拙了。由於沒有文檔,瞭解內核和應用程序的唯一途徑就是閱讀源代碼。結果是,UNIX源代碼在在最初的20年中被瘋狂的盜版。咨詢人員,程序員和系統管理員去搞UNIX源代碼並不是為了重新編譯或製作出售自己的UNIX版本,他們需要文檔,而源代碼是唯一的選擇。UNIX源代碼從大學流向周邊的高科技公司。這當然是非法的,但是情有可原:UNIX廠商提供的文檔不夠用。
這並不是說源代碼中有什麼值錢的秘密。所有讀過UNIX代碼的人都被下面的一行粗暴註釋驚呆過:
/* you are not expected to understand this */ (/* 沒指望你能明白 */)
儘管這行註釋最開始出現在UNIX V6內核中,但是幾乎所有的原始AT&T代碼都差不多,其中充滿了內聯手動優化和怪異的宏。寄存器變量被冠以p, pp和ppp這類的名字。「這個函數是遞歸的」這樣的註 釋 似乎表明遞歸調用是什麼難理解的概念。事實上,AT&T在文檔方面好為人師的態度只不過是其寫代碼的馬虎態度的一個反映。
要識別一個蹩腳手藝人其實很簡單:你會看到裂縫上的油漆,一個接一個的補丁,所有東西被膠帶和口香糖勉強湊合在一塊兒。必須承認:如果想從頭建立和重新設計什麼,必須要多思考,多下功夫。
Date: Thu,17 May 90 14:43:28 -0700X-Virus: 6From: David Chapman To: UNIX-HATERS

這是man man中的一段,挺有意思:

DIAGNOSITICS

如果你使用-M選項而且給出的路徑並不存在,那麼輸出的錯誤信息可能有點兒不對。比如/usr/foo/目錄不存在,如果你運行:

man –M /usr/foo ls

那麼你得到的錯誤信息是「No manual entry for ls」(「沒有ls的手冊記錄」)。正確的錯誤信息時告訴你目錄/usr/foo不存在。

有寫這段說明的功夫,恐怕足夠修改這個bug了。
[編輯]
無言UNIX:課程設置建議

Date: Fri, 24 Apr 92 12:58:28 PTX-Virus: 6From: cj@eno.corp.sgi.com (C J Silverio)Organization: SGI TechPubsNewsgroups: talk.bizarreSubject: UNIX Without Words (無言UNIX)

[在一場關於文檔無用論的激烈辯論中,我提出了下面這個建議。我膽子小,所以現在才敢公開,供大家參考。]

UNIX Ohne Worter (不會翻 – me)

我被這裡散步的文檔無用論觀點深深折服了。事實上,我進一步認為文檔就是毒品,我對於它的依賴性是人為造成的。在專業人士的幫助下,我想我能夠戒掉它。

而且,我的良心告訴我不能再靠販賣這種毒品為生了。我決定回到數學研究院脫胎換骨,徹底從這個寄生蟲一樣的職業中脫身。

雖然下面這份文檔似乎表明了我中毒有多麼深,可我還是覺得下一版SGI中應該把它提供給用戶。這不過是暫時之舉,以後會把它搞掉的。

這是我的建議:

標題:「無言UNIX」

對像:UNIX新手

簡介:提供在沒有文檔條件下使用UNIX的通用策略。展示在沒有文檔條件下摸清任何操作系統的通用原則。

內容:

介紹:「無文檔」哲學簡介為什麼手冊是惡魔為什麼man手冊是惡魔為什麼你還是應該讀這份文檔「這將是你讀的最後一份文檔!」

第一章:如何猜測可能存在哪些命令

第二章:如何猜測命令名

UNIX的怪異縮略命名法案例:grep

第三章:如何猜測命令選項

如何破解怪異的使用說明案例:tar如何知道什麼時候順序是重要的案例:fine

第四章:如何知道運行正確:沒有消息就是好消息

從錯誤中恢復

第五章:口頭傳統:你的朋友

第六章:如何獲得和維持一個活生生的UNIX高手

如何餵飽你的高手如何讓高手高興提供全部新聞組連接的重要性為什麼你的高手需要最快的計算機免費可樂:高手的長生不老藥如何保持高手身體健康高手什麼時候睡覺?

第七章:常見疑難:你的高手不理你了

識別愚蠢的問題如何安全地提出愚蠢問題

第八章:如何承受壓力

如何對待失敗

註:可能只有6、7章才是真正需要的。是的,這才是正路:我把它稱為「UNIX高手馴養指南」。

OK, 再也沒有文檔了。下回書將帶你進入sendmail的美好世界,為什麼「使用sendmail的感覺和得了花柳病一樣。」?下回分解。

標題: 第八章 csh, pipes和find (part 1)

UNIX演義又開始了,本來這回書要表一表sendmail和花柳病的關係,不過sendmail似乎已經從良了,從良妓女比貞節烈女對我們民族的貢獻要大得多,所以不想再找她麻煩了,對妓女發展史和性病鬥爭史感興趣的,我們可以私下交流。

作為程序員而不是妓女的你,可能對UNIX的編程環境更感興趣,所以這一節中介紹一下UNIX Shell的歷史。我GPL,你沒花錢,所以只能任我擺佈,我上什麼你就吃什麼,不 要廢話。

GPL的好處在於你不必為自己的工作負責,也不必對用戶負責,所以sourseforge上充斥著良莠不齊的自由項目。我希望我的心上人也能理解這一點,這一切的開始並不是為了什麼價值、責任、過去或是未來,這一切甚至不是為了現在,這一切只是源於passion。

在大海吐出的每個泡沫中在上班路上吸入的每一粒塵埃中在過去歲月的每一次陣痛中在一次一次睡去和醒來中在天氣預報和新聞聯播中在七月流火和九月授衣中在七月長生殿七日中在矢車菊和芙蓉中在長繩紀日中在天長地久中在你身邊在我心裡無須尋求意義

第八章 csh, pipes和find

強有力的工具給強有力的傻瓜

「有些操作系統從沒有被好好計劃,以至於只好用反芻的噪音來命名它的命令(awk, grep, fsck, norff),我想到這個就反胃。」

—— 無名氏
UNIX所謂的「強大工具」是個騙局。 這不過是UNIX為了那些東拼西湊的命令和工具所打的幌子。真正的強大工具不需要用戶付出太多努力就能提供強大的功能。任何會使改錐和鑽頭的人都會用電動改錐和電鑽。他們不需要搞懂電學、電機、轉矩、電磁學、散熱或維護。他們只需要把它通上電,帶上安全眼鏡,然後打開開關。許多人連安全眼鏡也不省了。你在五金商店裡找不到有致命缺陷的工具:它們不是根本沒能投放市場,就是被訴訟搞得焦頭爛額。
UNIX設計者的最初目標是提供簡單的工具,然而現在的工具則充滿了過分的設計和臃腫的功能。比如ls這個列文件的命令竟然有18個選項,提供從排序到指定顯示列數的種種功能,而這些功能如果用其他程序實現會更好些(以前正是這樣的)。find命令除了查找文件以外還輸出cpio格式的文件(而這個功能其實用UNIX名聲狼藉的管道很好地實現)。今天,和UNIX類似的電鑽將有20個旋鈕,連著不標準的電源線,不匹配3/8英吋和7/8英吋的鑽頭(而這一點會在手冊的BUG一章中說明)。
和五金店裡的工具不同,許多UNIX強大工具是有缺陷的(有時對文件是致命的):比如tar的不接受超過100個字符的文件名;又比如UNIX調試器總是垮掉,這還不夠,它的core文件將覆蓋你自己的core,讓你下次可以用調試器去調試調試器在調試調試器中生成的core。
[編輯]
Shell遊戲

UNIX的發明人有個偉大的想法: 把命令解析器作為一個用戶程序實現。如果用戶不喜歡缺省的命令解析器,他可以自己寫一個。更重要的是,shell能夠進化,這樣shell將不斷進步,變得越來越強大,靈活和易用,至少理論上是這樣。
這真是個偉大的想法,不過弄巧成拙了。功能的逐漸增加帶來的是一團糟。因為這些功能沒有經過設計,只是在不斷演化。和所有編程語言所遭到過的詛咒一樣,那些利用這些功能的既存shell腳本成為了shell的最大敵人。只要有新的功能加入shell,就會有人在自己的腳本中使用它,這樣這個功能就從此長生不老了。壞主意和臭功能往往怎麼也死不掉。
於是,你得到了一個不完整、不兼容的shell的大雜燴 (以下每個shell的描述都來自於他們各自的man pages):
sh 是個命令編程語言,用於執行來自終端或文件的命令。Jsh 和sh一樣,但具有csh風味的工作控制 (job control)Csh C類型語法的shellTcsh emacs編輯口味的cshKsh KornShell,你的另一個命令和編程語言Zsh Z ShellBash GUN Bourne-Again Shell (GNU Bourne復出Shell)
五金商店裡的螺絲刀和鋸子,儘管可能來自3、4個不同的廠商,但操作方法都差不多。典型的UNIX在/bin或/usr/bin下存了成百個程序,它們來自眾多自以為是的程序員,有著自己的語法、操作範例、使用規則(這一個可以當成管道,而那一個則操作臨時文件),不同的命令行參數習慣,以及不同的限制。拿grep和它的變種fgrep, egrep來說,哪一個是最快的?為什麼它們接受的參數都不一 樣,甚至對正則表達式的理解也不盡相同?為什麼不能有一個程序提供所有功能?負責的傢伙在哪兒啊?
當把命令之間的種種不同都深深烙在腦海中後,你還不能避免被驚著。
[編輯]
Shell Crash

下面這條消息來自哥倫比亞大學編譯原理課程的BBS。
Subject: Relevant UNIX bugOctober 11, 1991

W4115x課程的同學們:

我們剛學習了活動記錄(activation record),參數傳遞(argument passing)和函數調用規則(calling conventions),你們是否知道下面的輸入將讓任何一個cshell立刻崩潰?

:!xxx%s%s%s%s%s%s%s%s

你們知道為什麼麼?

以下的問題供你們思考:

Shell遇到 「!xxx」會做什麼?

Shell遇到 「!xxx%s%s%s%s%s%s%s%s」會做什麼?
為什麼cshell會崩潰?
你將如何修改有關代碼來解決這個問題?
最重要的一點:
當你(是的,就是你)將這個前途遠大的操作系統用21個字符治服的時候,你覺得天理能容麼?
你可以自己試一試。根據UNIX的設計,如果shell垮掉了,你的所有進程將被殺死,你也會被踢出系統。其他操作系統在遇到非法內存訪問錯誤時會彈出調試器,但不是UNIX。
可能這就是為什麼UNIX shells不讓你在shell的地址空間裡動態加載自己的模塊,或者直接調用其他程序中的函數。如果這樣就太危險了。一步走錯,唉喲,你已經被踢出門外了。愚蠢的用戶是應該被懲罰的,程序員的錯誤更是不可容忍。
下回書裡我們將進入色彩斑斕的UNIX語法世界。

Unix痛恨者手冊2:第四章:Shell變量

當然Alan還不算最倒霉的,至少他沒試過shell變量。 我們前面說過,sh和csh對shell變量的實現不太一樣。這本來沒有什麼,可是一些shell變量的語義(比如定義的時刻,改變的原子性等)沒有被好好說明或定義。總會遇到一些奇怪反常規的shell變量,只有反覆試驗以後才能明白。 日期: Thu, 14 Nov 1991 11:46:21 PST 發信人: Stanley's Tool Works (lanning@parc.xerox.com) 主題: You learn something new every day (每天都有新發現) 收信人: UNIX-HATERS 運行一下這個腳本: #!/bin/csh unset foo if ( ! $?foo ) hen echo foo was unset else if ("$foo" = "You lose") then echo $foo endif 會產生如下錯誤: foo: Undefined variable. 如果要讓這個腳本"正確工作",你必需求助於以下這個腳本: #!/bin/csh unset foo if ( ! $?foo ) hen echo foo was unset set foo else if ("$foo" = "You lose") then echo $foo endif [注意,我們必須在發現foo沒有被定義的時候'set foo'.] 清楚了麼?

Unix痛恨者手冊2:第三章:聽"chdir"的還是聽"cd"的?

Unix在漫長的演化過程中幾經易手,這些Unix系統開發者把Unix引向了不同方向,他們之中沒有一個人停下來考慮一下自己的做法會不會對和其他人發生衝突。
日期: Mon, 7 May 90 22:58:58 EDT
發信人: Alan Bawden
主題: cd ..: I am not making this up (cd ..: 這不是我編造出來的)
收信人: UNIX-HATERS

有什麼命令能比"cd"更直接了當的呢?讓我們看這個簡單的例子:"cd ftp"。如果我的當前目錄/home/ar/alan中有個子目錄叫做"ftp",那麼它就變成了我新的當前目錄,現在我在/home/ar/alan/ftp下了。簡單吧?

現在,你們知不知道"."和".."?每個目錄都會有兩個記錄:"."是指該目錄自己,".."是指父目錄。在上面的例子中,如果我想回到/home/ar/alan,只要敲"cd .."就可以了。

現在假設"ftp"是一個符號鏈接。假設它指向的是目錄/com/ftp/pub/alan。如果執行"cd
ftp",我的當前目錄將是/com/ftp/pub/alan。

和其他所有目錄一樣,/com/ftp/pub/alan也有一個叫".."的記錄,它指的是父目錄:/com/ftp/pub。如果我想進入那個目錄,我敲入命令:

% cd ..

猜一下我現在在哪兒呢?我又回到了/home/ar/alan!shell(準確的說是人工智能實驗室裡用的tcsh)認為我其實是想回到那個裝有符號鏈接的目錄。現在我必須使用"cd ./.."才能進入/com/ftp/pub。


==Shell編程==

Shell程序員和《侏羅紀公園》裡的恐龍製造者有些類似。他們手上沒有所需的完整材料,所以不得不用一些亂七八糟的材料填充。儘管有著無窮的自信和能力,他們似乎並不是總能控制住造出來的那些玩意。

理論上說,使用Shell編程比用C語言要有很多好處:Shell程序移植容易。這指的是使用shell「編程語言」寫的程序能夠在不同的體系結構和不同的Unix變種上運行,因為shell會解析這些程序,而不是把這些程序編譯成機器碼運行。而且,標準Unix Shell sh 自
從1977年以來就成為Unix中不可或缺的一部分,所以你可以在許多機器上找到它。

讓我們來驗證一下這個理論,寫個腳本列舉目錄下的所有文件,並使用file命令來顯示文件的類型:


日期: Fri, 24 Apr 92 14:45:48 EDT
發信人: Stephen Gildea
主題: Simple Shell Programming (簡單Shell編程)
收信人: UNIX-HATERS

同學們好。今天我們將學習"sh"編程。"sh" 是個簡單,用途廣泛的程序,讓我們先看個基本的例子:

打印一個目錄下所有文件的類型

(我聽到你們在後面說什麼了!那些已經會了的同學可以寫個腳本在遠程啟動一個X11客戶端,不要吵吵!)

我們學習sh編程的同時,當然也希望自己的程序是健壯,可移植和優雅的。我假設你們都讀過了相應的man手冊,所以下面這個實現應該很簡單:

file *

很不錯,是不是?簡單的答案給簡單的問題;符號 * 用來匹配目錄下的所有文件。嗯,不一定。以點(.)開頭的文件會被忽略,*不會匹配它們。也許這種情況很少發生,但既然要寫健壯的程序,我們將使用"ls"的一個特殊選項:

for file in `ls -A`

do

flie $file

done

多麼優雅,多麼健壯!不過,唉,一些系統上的"ls"不接受"-A"選項。沒問題,我們使用"-a"選項,然後再去掉"."和"..":

for file in `ls -a`

do

if [ $file != . -a $file != ..] then

file $file

fi

done

不是那麼優雅,但至少是健壯的和可移植的。你說什麼?"ls -a"也不是哪裡都能用的?沒問題,我們用"ls -f"好啦。它還快一點呢。我希望你們能從man手冊中看到所有這些東西。

唔,可能不是那麼健壯。Unix文件名中除了斜槓(/)以外可以使用任何字符。如果文件名中有個空格的話,這個腳本就完蛋了,這是因為shell會把它當成兩個文件名傳給"file"命令。不過這也不是太難對付。我們只要把它放到引用中就可以了:

for file in `ls -f`

do

if [ "$file" != . -a "$file" != ..]

then

file "$file"

fi

done

你們中可能已經有人看出來了,我們只是減少了問題,但還是沒有完全解決。因為換行符也能用在文件名中。

我們的腳本不是那麼簡單了,看來得重新評估一下我們用的方法了。如果我們不使用"ls"就不用費勁去處理它的輸出了。這個怎麼樣:

for file in * .*

do

if [ "$file" != . -a "$file" != ..]

then

file "$file"

fi

done

看起來不錯。能夠處理點(.)文件和有非打印字符的文件名。我們不斷把一些稀奇古怪的文件名加入到測試目錄下,這個腳本始終工作得很好。然而有個傢伙用它測一個空目錄,這時候 * 產生了"No such file"(沒有這個
文件)的輸出。不過,我們當然可以繼續處理這種情況...

....到了這一步uucp可能會嫌我的這封郵件可能,看來我只能到此為止了,請讀者去自己解決剩下的bug吧。

Stephen
還有一個更大的問題Stephen沒有想到,我們從一開始就有意隱藏著:Unix file 命令不工作。
日期: Sat, 25 Apr 92 17:33:12 EDT
發信人: Alan Bawden
主題: Simple Shell Programming (簡單Shell編程)
收信人: UNIX-HATERS

喔!別忙。再仔細看看。你真的想用'file'命令?如果誰想開心大笑一場可以馬上去找一台Unix機器,在有各種各樣文件的目錄下敲命令"file *"。

例如,我在有各種C源代碼文件的目錄下運行"file"——這是一些結果:

arith.c: c program text

binshow.c: c program text

bintxt.c: c program text

看起來還不錯。不過這個就不太對了:

crc.c: ascii text

看到了麼?'file'並不是根據後綴".c"去判斷的,它對文件的內容採用了一些啟髮式(heuristics)算法。很明顯crc.c看起來不那麼象C代碼——儘管對我來說它就是。

gencrc.c.~4~: ascii text

gencrc.c: c program text

估計我在第4版本以後做了一些修改,使得gencrc.c更像是C代碼了...

tcfs.h.~1~: c program text

tcfs.h: ascii text

很明顯第1版本以後的tcfs.h不太像是C代碼了。

time.h: English text

沒錯,time.h看起來更像英語,而不是一般的ascii碼。我不知道'file'是不是還能判斷出西班牙語或法語。(順便說一下,你的TeX文檔會被當成"ascii text"而不是"English text",不過這有點兒跑題了)

words.h.~1~: ascii text

words.h: English text

這可能是因為我在第1版本以後在words.h中加入了一些註釋。

我把最精采的留在最後:

arc.h: shell commands

Makefile: [nt]roff, tbl, or eqn input text

都錯得一塌糊塗。我不知道如果根據'file'的判斷結果去使用這些文件會造成什麼結果。


—Alan

Unix痛恨者手冊2:第六章:管道

Unix受虐狂們,歡迎來到Unix下水道。

「在我們這個世紀,巴黎下水道仍是一個神秘的場所。如果知道自己的下面是個可怕的大窖,巴黎會感到不安。」 —— 雨果 《悲慘世界》

下面只是我自己對Unix的看法。大約六年前(當我有了第一台工作站的時候),我用了很多時間學習Unix。應該學得算是不錯的。幸運的是,腦子裡的這些垃圾正隨著時間的推移慢慢降解。可是,自從這個討論開始以來,不少Unix支持者發給我例子來「證明」Unix的強大。這些例子當然喚起了我許多美好的回憶:他們都是用一種最怪異的方式去實現一些簡單而無用的功能。

有個傢伙發了篇貼子講述一個shell腳本是如何讓他獲得「圓滿」的(這個腳本使用了四個噪聲一樣的命令把他所有的'.pas'後綴的文件改名為'.p'文件)。可我還是想把自己的宗教熱情留給比改幾個文件名更重要的事情上。是的,這就是Unix工具留給我的記憶:你用大量的時間去學那些複雜奇特的花架子,可到頭來卻是一場空。我還是去學些有用的真功夫吧。

——Jim Giles Los Alamos國家實驗室

Unix迷們拜倒在管道(pipe)的真善美之下。他們他們歌唱管道:沒有管道就沒有Unix。他們異口同聲地頌揚管道:「管道能夠讓你用簡單的程序去構造更複雜的程序。管道能夠以意想不到的方式去使用命令,管道使得實現更為簡單。」不幸的是,頌歌對Unix的作用並不比對偉大旗手的要好多少。

管道並不是一無是處。模塊化和抽像化是建立複雜系統中所必需的,這是計算機科學的基本原則。基本工具越是優秀,用其建立的複雜系統就會更為成功,可維護性也越高。管道作為構造工具還是有價值的。

以下是個管道的例子:

egrep '^To:|^Cc:' /var/spool/mail/$USER | \  cut -c5- | \  awk '{ for (i = 1; i <= NF; i++) print $i}' | \  sed 's/,//g' | grep -v $USER | sort | uniq 

看明白了麼?這個程序通過讀取用戶的郵箱,得到用戶所在的郵件列表(差不多是這個意思)。和你家裡的水管一樣,這個Unix管道也會在特定情況下神秘地破裂。

管道有時的確很有用,但它通過連接標準輸入輸出的方式進行進程間通訊,這個機制限制了它的應用。首先,信息只能單向流動。進程無法通過管道進行雙向通訊。其次,管道不支持任何形式的抽像。發送方和接收方只能使用字符流傳輸信息。比字符稍微複雜一點的對象是不能通過管道直接傳輸的,必須串行化為字符流以後才成,當然接收方必須對得到的字符流進行重新組裝。這意味著你無法傳輸一個對像以及用於建立這個對象的定義代碼。你無法傳輸指針到另一個進程的地址空間。你無法傳輸文件句柄或socket句柄或文件權限屬性。

冒著被罵做自以為是的風險,我們認為正確的模型應該是過程調用(本地的或是遠程的),用以傳遞第一類結構(first-class structures)(這是C語言從一開始就支持的)和函數組合(functional composition)。

管道對簡單任務是不錯的,比如文本流處理,但用它來建立健壯軟件就顯得有些捉襟見肘了。例如,早期關於管道的一篇論文中說明了如何使用管道把一些小程序組合在一起來構成一個拼寫檢查程序。這是體現簡單性的經典之作,但如果真的用來檢查拼寫錯誤就再糟糕沒有了。

管道在shell腳本中有經常能露一小手。程序員用它實現一些簡單而脆弱的解決方案。這是因為管道使得兩個程序之間產生了倚賴關係,如果你修改了一個程序的輸出格式,就必須同時修改另一個程序的輸入處理。

大多數程序是一步步建立起來的:首先制定程序的需求規範,然後程序的內部逐漸成型,最後寫一個輸出處理函數。管道則不把這一套放在眼裡:只要有人把一個半生不熟的程序放到了管道中,其輸出格式就定死了,不管是多麼不一致,不標準和低效,你都只能認命了。

管道不是程序間通訊的唯一選擇。Macintosh就沒有管道,我們最喜歡的Unix宣傳手冊是這樣寫的:

但是,Macintosh採用的則是截然相反的一種模型。系統不和字符流打交道。數據文件具有更高的層次,總是和特定的程序相關的。你什麼時候把一個Mac程序的輸出傳給另一個過?(如果能找到管道符都算你運氣)程序自成一體,你必須徹底明白自己在幹嘛呢。你無法把MacFoo和MacBar搞到一起。-— 摘自 《Unix生活》 Libes和ressler著

是呀,這些可憐的Mac用戶。如果無法把字符流通過管道四處亂傳,他們怎麼能在文檔中插入繪畫程序製作的圖片?怎麼能插入一個表格文檔?怎麼能把這個東拼西湊成的用電子郵件發出去?接到以後又怎麼能無縫地對它進行瀏覽和編輯,再回復回去?沒有管道,我們不能想像這一切在過去的十年中是如何被Macintosh做到的。

上次你的Unix工作站和Macintosh一樣有用是什麼時候?上次你能在它上面跑不同公司(甚至是同一公司的不同部門)的軟件是什麼時候?更不用說這些軟件能互相通信。如果Unix真做到了這一點,那是因為Mac軟件開發商拼了老命把他們的軟件移植到了Unix上,寄希望於讓Unix看起來像Mac一些。

Unix和Macintosh操作系統的根本區別是,Unix是為取悅程序員而設計的,而Mac是為了取悅用戶。(Windows一門心思想取悅的則是會計,不過這有些跑題了)。

研究表明管道和重定向是難於使用的,不是因為想法本身,而是由於其隨意和不直觀的限制。Unix自己的文檔早就指明了只有Unix死黨才能體會管道的妙處。

日期: thu, 31 Jan 91 14:29:42 EST 發信人: Jim Davis  收信人: UNIX-HATERS 主題: Expertise (專業知識)  今天早上我讀到《人機接口雜誌》上的一篇文章《計算機操作系統專業知識》,是Stephanie  M. Doane和其他兩位作者寫的。猜猜他們研究的是什麼操作系統?Doane對Unix新手、中手和專家的知識和表現進行了研究,下面是一些摘要:  「只有專家能夠使用Unix特有的一些功能(例如管道和重定向)來構造命令組合」  換句話說,Unix的每個新功能(除了那些從其他系統上生搬硬套過來的)都是如此怪異,以至於必須經過多年同樣怪異的學習和實踐才能掌握。  「這個發現有些出乎意料,因為這些正是Unix的基礎功能,而且這些功能是所有初級課程都會涉及的」  她還引用了S. W. Draper的一些文章,Draper相信:  「世上根本沒有什麼Unix專家,如果專家指的是這樣一些人,他們窮盡了某專業的所有知識,無需再學習什麼了。」  這一點我不能苟同。在學習Unix各種荒謬技術的征途上,已經有無數人被「窮盡」了。  

有些程序甚至吃飽了撐的,把管道和文件重定向區別對待了:

發信人: Leigh L. Klotz  收信人: UNIX-HATERS 主題: | vs. < (|對<) 日期: Thu, 8 Oct 1992 11:37:14 PDT  collard% xtpanel -file xtpanel.out < .login unmatched braces unmatched braces unmatched braces 3 unmatched right braces present  collard% cat .login | xtpanel -file xtpanel.out collard%  你自己琢磨琢磨吧。

佩服日本人的理由

佩服日本人,喜歡遊日本,有九千九百九十九個無可辯駁的理由:日本人生活整潔,日本人性好寧靜,日本的庭園布局優美而和諧,日本人崇尚含蓄。日本的電影好看,雖然大師黑澤明早已逝世,《羅生門》和《留芳頌》已成絕響,但幸好還有一位「小黑澤明」,叫做山田洋次,他的《黃昏清兵衛》、《隱劍鬼爪》,還是人看得熱淚盈眶。

香港人,特別是青少年,喜歡日本,從哈Kitty、鹹蛋超人到本龍一和宮澤里惠,如果有人做一個問卷,問香港的消費享受一族,叫做「我喜歡日本的九百九十九個理由」,一定有豐富多采的結果。如果問我,我佩服日本的理由比較特別:我喜歡日本的報紙、雜誌、書,日本文字通通是直排。

我欣賞日本人對於傳統的這一點點執。論學習西化,日本比她的許多鄰近國家都學得深澈、學得成功,英國的君主立憲、德國的紀律、法國的藝術品味,自從明治維新以來,一一都學得很精確而高明。

日本詞彙中有許多英語的直譯,日本內閣出席慶典,至今還穿英國維多利亞時代的燕尾官服、戴高帽子,但是對待自己的語文,日本人絕不模仿英文的橫排,日本報刊的文字都是直排的:由《讀賣新聞》到岩波文庫司馬遼太郎的歷史論著,從旅行雜誌到漫畫的對白,日本人硬是不要「西化」,至今仍堅持直排。

因為日本人知道:雖然報刊書籍,都要與時俱進,圖畫美工,也入侵了文字的疆域,但日文的結構,跟英文不同,日文的閱讀方式,必然是從上到下、由右至左,最順應讀者的心理意識,日本人知道,日文一旦橫排,雖然對一干美工排版人員的工作最方便,但文字的世界,不可以圍一個報刊美工組而團團轉,而是為了一個國家的所有讀者。日本人在小事細節之間最懂得體貼,包括書刊文字對直排的堅持,因為只有他們才明白,所謂西化,應該「西」到什麼程度,不超過哪一條界線。我欣賞日本人這一份民族尊嚴、品味,以及普通常識(Common Sense)。日本在現代化的過程中,懂得擷取什麼、摒棄什麼,除了第二次世界大戰的侵略,They always made the right choice。

包括對書刊日文直排之堅持。每一次去日本,參觀東京的紀伊國書屋,我都很悔恨自己不像蔡瀾一樣會讀日文,摩挲一本本直排的日文書,但見印刷精美,文字的視覺纖麗無匹,日本的民族智商太高了,就令人覺得,單憑這一點,日本人是東亞文化的驕傲,在心中,我向大和民族致敬。

陶傑

傑出人士的20個好習慣

在研究大量成功企業領導者的案例后,我們發現,這些最优秀的企業領導人知道自己需要什么,并能盡全部的努力去達到自己的目標,他們懂得做人、善于決策、充滿熱忱、持續創新、架构關系、激勵團隊以及贏得擁戴……最成功的企業家所共同具有的良好習慣和素質,使得這些企業領導人能夠脫穎而出。

第一個習慣:懂得做人。

會做人,別人喜歡你,愿意和你合作,才容易成事。怎么讓別人喜歡自己呢?好的企業領導者都習慣于能真誠地欣賞他人的优點,對人誠實、正直、公正、和善和寬容,對其他人的生活、工作表示深切的關心与興趣。 台灣著名企業家張忠謀在黑金橫行的社會大環境下依然從來不走后門、不走政商關系,更拒絕鑽法律漏洞,贏得企業界和民眾的极大尊重,官員也因此從來不敢故意刁難他的企業。

第二個習慣:善于決策。

面對不斷變化的市場,企業經營方案總是不止一個,決策就是要對各种方案進行分析、比較,然后選擇一個最佳方案。企業領導者的价值在于“做正确的事情”,同時幫助各階層的主管“把事情做正确”。 四川長虹總裁倪潤峰1996年率先拿起价格武器將彩電大幅降价,從而确立國產彩電的主導地位,正是看准市嘗果斷決策的典型。


第三個習慣:相信自己。

成功的企業領導者都有很強的信心,他們既會在自己內心里相信自己,也會在公眾面前表現出這种自信心。成功學的研究成果表明:成功的欲望是創造和擁有財富的源泉。 英特爾總裁葛洛夫認為“衹有偏執狂才能生存”,堅持与自信成就了英特爾今天的偉業。


第四個習慣:明确目標,什么是領導?

世界級企管大師班尼士下了個定義:“創造一個令下屬追求的前景和目標,將它轉化為大家的行為,并完成或達到所追求的前景和目標。”企業領導者們知道,要使員工能奉獻于企業共同的遠景,就必須使目標深植于每一個員工的心中,必須和每個員工信守的价值觀相一致﹔否則,不可能激發這种熱情。 有“神奇教練”之稱的米盧蒂諾維奇已經創造紀錄,他所帶的每支隊伍都有一個明确的目標,就是打進世界盃的決賽圈。


第五個習慣:充滿熱忱。

熱忱有時候比領導者的才能重要,若二者兼具,則天下無敵。產生持久的熱忱方法之一是定出一個目標,努力工作達到這個目標,而在達到這個目標之后,再定出另一個目標,再去努力達到。這樣做可以提供興奮和挑戰,如此就可以幫助個人維持熱忱而不墜。


第六個習慣:頑強精神。

如果說有一种素質几乎為所有的成功企業領導者所擁有的話那就是頑強精神。所謂頑強,并不是達到愚蠢地步的頑固,它是一种下決心要取得結果的精神。在管理實踐中,作為一個領導者,你手下的人都希望領導是一個不屈不撓的人。衹有你的競爭對手希望你放棄這种精神。


第七個習慣:重視人才。

企業最好的資產是人,企業領導者的美德在于挑選好的合作伙伴。選一個适合的人,比選一個优秀的人來得重要。除了專業所必備的素質之外,他們找人要看3种東西:一是必須精力充沛。有精神、有气派,這樣的人可以走長途,可以感染人,适應變動。二是要正直。考慮個人利益的同時,能夠考慮到公司的利益。三是要有智慧和膽識,有進行思考的能力和魄力。 “蕭何月下追韓信”、劉備“三顧茅廬”都是識人用人的經典例子。


第八個習慣:充分授權。

人的精力是有限的,我們不可能一個人做所有的事。所以,作為一個企業領導必須學會把權力授予适當的人。授權的真正手段是要能夠給人以責任、賦予權力,并要保証有一個良好的報告反饋系統。 美國前總統里根是一個出名的放任主義者,他衹關注最重要的事情,將其它事情交給手下得力的人去負責,自己因此可以經常去打球、度假,但并不妨礙他成為美國歷史上最偉大的總統之一。


第九個習慣:激勵團隊。

組織起一個优秀的團隊,是一件非常艱難和重要的事情。激發起他們的熱情,挖掘出每一位團隊成員的聰明与潛力,并將他們協調起來,是成功的領導者必須具備的一种能力。一個企業領導人必須是一個能激發起員工動力的人。


第十個習慣:終生學習。

衡量企業成功的尺度是創新能力,而創新來源于不斷的學習,不學習不讀書就沒有新思想,也就不會有新策略和正确的決策。孔子說:“朝聞道,夕死可矣。”正是終生學習的最佳寫照。


第十一個習慣:持續創新。

當今世界正面臨著的一個非常嚴峻的現實是:如果你停步不前,你就會失去自己的立足之地。這一點對于任何領導或公司都是同樣的道理。如果你滿足于現狀,你就喪失了創新能力,而創新是人類發展的主要源泉。具有創新頭腦的人是不怕變革的。 耐克不斷改進自己的運動鞋,以适應人類行走和奔跑的需要﹔不斷尋找為當時年輕人所接受的明星作為代言人,希望永遠被認為是“酷”的代名詞,沒有持續創新,已有几十年歷史的耐克就會被年輕一代拋棄。


第十二個習慣:架构關系。

一個好的企業領導者習慣于架构關系。他們知道,關系已成為人際中個人成長、企業成事的重要條件与資源。關系就如同網絡,构架起人与人、群体与群体、企業与客戶、企業与企業之間的互動。為了企業的發展,任何一個領導者都缺少不了“關系管理”。西方國家的大企業常常邀請其它大企業的管理者加入自己的董事會,不僅拓寬了眼界,而且在經營管理中會得到意想不到的助力。


第十三個習慣:抓住机會。

每個人都被机會包圍著,但是机會衹是在它們被看見時才存在,而且机會衹有在被尋找時才會被看見,關鍵在于你如何認識机會,利用机會,抓住机會和創造這些机會。


第十四個習慣:有效溝通。

鄰導者与被領導者之間的有效溝通,是管理藝術的精髓。比較完美的企業領導者習慣用約70%的時間与他人溝通,剩下30%左右的時間用于分析問題和處理相關事務。他們通過廣泛的溝通使員工成為一個公司事務的全面參与者。


第十五個習慣:經營未來。

成功的企業領導人都懂得,未來是屬于那些今天就已經為之做好准備的人。他們用20%的時間去處理眼前那些大量的緊要事情,這衹是為了眼前的生計﹔而把80%的時間留給那些較少但很重要的事情,這是為了未來。


第十六個習慣:贏得擁戴。

一個企業領導人的夢想不管如何偉大,假如沒有擁戴者的認同与支持,夢想仍然衹是夢想。要贏得擁戴者的首要任務就是:認同我們的擁戴者,并找出他們共同的渴望是什么?假如說領導人需要具備什么特殊天賦的話,那就是感受他人目的的能力。


第十七個習慣:勇于自制。

具有高度的自制力是一种最難得的美德。熱忱是促使你采取行動的重要原動力,而自制力則是指引你行動方向的平衡輪。在管理活動實踐中,一個有能力管好別人的人不一定是一個好的領導者,衹有那些有能力管好自己的人才能成功。深圳萬科總裁王石1992年時針對一些房地產幵發商低于40%的不做的暴利心態,提出萬科“高于25%的利潤不做”的口號,如今萬科還健康地活著,當年眾多追逐暴利的企業則大部分已死掉。


第十八個習慣:培養領導。

最成功的領導者是那些把工作授權給別人去做的人,是把下屬培養為領導者的人,是把領導者變為變革者的人。聯想集團董事長柳傳志培養了兩大少帥:楊元慶和郭為,使集團的事業后繼有人、基業長青。


第十九個習慣:注重家庭。

比較完美的企業領導者常把家庭比作登山的后援營地。他們在籌備后援營地(家庭)上所花的時間,絕不能少于實際登山(干事業)的時間,因為他們的生存、登山的高度,常常与后援營地是否牢固和存糧是否充足有關。這些企業領導者還懂得,全面的成功才算真正的成功,他們往往在干事業的同時,能夠兼顧家庭,珍惜幸福的婚姻。


第二十個習慣:經營健康。

許多立志要成功但最后壯志難酬的企業領導人,往往是因為不能戰胜一個最大的敵人,這個敵人就是自己不健康的身体。美國管理界流行著一個觀點:不會管理自己身体的人亦無資格管理他人,不會經營自己健康的人就不會經營自己的事業

Unix痛恨者手冊2:第五章:錯誤碼和錯誤檢查

我們上面的例子沒有指出file命令如何將錯誤返回給腳本。事實上,它根本就沒有返回錯誤。錯誤被忽略了。這不是因為我們粗心大意:許多Unix shell腳本(以及其他程序)忽略所調用程序所返回的錯誤 碼。這個做法是可取的,這是因為沒有標準的錯誤碼。

也許之所以錯誤碼被廣泛地忽略,是因為當用戶敲命令的時候這些錯誤碼很少被顯示出來。錯誤碼和錯誤檢查在Unix陣營中是如此少見,以至於有些程序甚至根本就不費勁去報告錯誤。

日期: The, 6 Oct 92 08:44:17 PDT 發信人: Bjorn Freeman-Benson  主題: It's always good news in Unix land (Unix世界裡都是好消息) 收信人: UNIX-HATERS  看看這個tar程序。和所有的Unix"工具"(似乎不太準確)一樣,tar的工作方式非常奇怪和特別。例如,tar是一個極為樂觀向上的程序,它認為從不會有什麼壞事,所以太從來不返回錯誤狀態。事實上,哪怕是在屏幕上打出了錯誤信息,它返回的仍然是"好消息"  (狀態0)。運行一下這個腳本:  tar cf temp.tar no.such.file  if ( $status == 0 ) echo "good news! No error."  你將得到如下結果:  tar: no.such.file: No such file or directory Good news! No error.  我明白了——我從一開始就不應該奢望什麼一致,有用,幫助良好,快速,甚至是正確的結果...  Bjorn 

OK, 被shell折騰得很爽吧?還沒過足癮?不要緊,下回書我們換個地方,鑽進Unix下水道(pipe)裡體驗無窮的痛苦和快樂

賽局理論

賽局理論很深奧,但應用也很廣,這麼多年來,相關學術能夠屢次獲得諾貝爾經濟學獎,不是沒道理的,迄今還有很多領域值得繼續探究。

回過頭來看,賽局理論可以用在很多領域,從外交、政治、貿易到商戰,但在一般生活之中,也隨處可見其蹤跡,正所謂人生無處不權謀。

依照賽局理論的最簡單定義,就是一種策略思考,透過策略推估,尋求自己的最大勝算或最大利益,從而在競爭中求生存。 巫師的賽局課,第一堂就提到策略思考(Strategic Thinking),關鍵在於「永遠站在對手的立場或角度去思考」,也就是將心比心的去想事情。

他在課堂上出了這道「紅帽與白帽」的問題,很難,但也很容易,只要一轉念,答案很快就出來了。

問題是這樣的: 童話故事中,國王讓囚犯分別戴上紅白二種顏色的帽子,其中,有二頂紅帽,其餘是白帽,並且對囚犯說:「你們之中至少有一頂是紅帽,但不准與他人交談或查看自己帽子的顏色,違者處死。每天放風完,可找牢頭猜你們自己帽子的顏色,猜錯者死,猜對者立即釋放。」

如此,這些囚犯的最佳策略為何?戴紅帽子與戴白帽子的囚犯,可以分別在第幾天因為說對自己帽子的顏色而獲得釋放?還是根本無解?

在這道題目中,假設所有囚犯都是理性的,不靠運氣或機率去猜自己帽子的顏色,也沒有偷偷勾結或作弊的行為,而是完全用腦子去想出並確定自己帽子的顏色。看倌要不要也試試看自己的功力?

課堂上很多同學開始推演,並提出各種答案。但多數人似乎陷入不確定的猜測狀況,各種答案都有,還有人覺得永遠都出不了牢了。若他們真的都是童話故事中的囚犯,恐怕很多人的人頭都要落地,或是一輩子都關在裡頭了。

標準答案是:戴紅帽子的二個囚犯,在第二天放風後回牢房時,都向牢頭正確地說出自己帽子是紅色的,並即獲得釋放。至於戴白帽子的囚犯,則是在第三天都想出自己帽子的顏色,第三天晚上所有囚犯都離開了監獄。

這個答案是怎麼出來的?先來看看第一天,在放風時,戴紅帽子的囚犯,分別看到了自己以外的囚犯中有一頂紅帽子,按照 國王至少有一頂紅帽子的說法,根本無法確定頭上帽子的顏色。至於戴白帽子的囚犯,都看到了二頂紅帽,當然更沒法子確定自己帽子的顏色。所以,第一天所有囚犯都回牢睡覺。

照這樣來看,第二天豈不是一樣的情況。 不,有機會了! 第二天放風時,二個戴紅帽子的囚犯都看到了彼此,靈機一閃,放完風後竟然都去向牢頭報告自已的帽子是紅色的,並立即被釋放。

他們是怎麼知道的?情況不是與第一天一樣的嗎? 當然不一樣。原來,在第二天,兩個戴紅帽子的囚犯在放風時都看到了對方,這時就尋思,對方第一天若看到其他囚犯都是白帽子,就可以確定頭上戴的就是「至少一頂」的紅帽子,第一天就可以走了。

所以,對方第二天放風時還在的原因,就是他在其他囚犯中至少看到了一頂紅帽子,所以無法確定帽子究竟是紅色或白色。 既然如此,自己看到的,除了對方是紅帽子,其他人都是白帽子,而對方卻又看到至少一頂紅帽子,這代表自己戴的一定是紅帽子,對方才會在一天時無法做決定。

兩個戴紅帽子的囚犯都是同樣的思考,所以第二天就都撒喲娜拉了! 至於其他戴白帽子的囚犯,第三天放風時,發現二個戴紅帽子的囚犯都被放出去了,尋著一樣的思路去理解,跟著就瞭解除了這二人外,其他人都是白帽子。所以當天放風完,所有囚犯都猜對自己帽子的顏色,並都走出大牢。

你猜對了嗎?還是腦筋已經打結了。這的確有點傷腦筋,但其實只是觀念一轉,如同先前所說的「永遠站在對手的立場角度去思考」,答案就出來了。不難吧!

生活中很多時候也充滿了類似的情境,很多問題解不出來,就是因為只想到自己,沒能去思考到別人怎麼想,結果是把自己給困住,掙脫不開。策略思考可以很權謀,也可以很人性,重點是「將心比心」,真的可以解決很多問題。

奶茶迷必看

有時候,有些問題,問了也是徒然,就好似奶茶所用的茶葉,十個有九個茶水師傅都唔會答你。無他,每位師傅都有自己的秘方,所用的茶種、份量,都是自家研製,屬高度機密。因此,歎勻以下7杯奶茶後,還是把所有問題藏於心底,奶茶的香、濃、滑、厚,統統心照便算。

祥興咖啡室---捧場客粒粒巨星

地址:跑馬地奕蔭街9號

店舖開了56年,仍保留昔日的面貌,是跑馬地碩果僅存的舊式茶餐廳。由於地處富貴區,不少明星都是常客。兩旁的牆壁便掛起明星茶客的簽名,如鄭裕玲、鄧光榮等,而今次喬裝侍應的黎耀祥,亦曾在此留名。

嘉樂冰廳---老闆堅持親自出手

地址:荃灣新村街40號B地下

嘉樂的奶茶,夠滑之餘,有茶的甘香,是市面少見。麥生用了4種茶葉沖成,包括香味佔優及貴價的立頓、茶味濃的車仔以及其餘兩種粗幼不一的茶葉。有別於茶壺沖法,麥生以舊式茶膽沖茶,好處是沖好的茶,仍能保存較耐的時間而不會變質。

枝記麵家---甘香醒胃

地址:香港巴丙頓道1號M4A地下

當然盧先生又並非孤芳自賞,佢杯奶茶真係好夠茶味。雖然只用兩種茶葉沖成,但如老闆所說,茶已夠香,而且飲完一杯,胃部舒暢無比。特別推介呢度凍奶茶,呷了一口,口腔內仍留有甘香。

祥利冰室---特香無苦澀

地址:北角電氣道120號地舖

以茶壺沖製,用上3隻茶葉,水夠滾,沖茶時間掌握恰當,沖出來的奶茶有獨特的茶香,但唔會澀。

海記---圍村人奶茶

地址:粉嶺聯和墟街市2樓熟食中心10號舖

老闆彭生是粉嶺圍圍村人,在粉嶺沖奶茶已有數十年,現仍有不少老顧客每天捧場。重本茶葉:選用4種貴價的錫蘭茶葉,4種茶葉粗幼不一,茶味各有千秋,卻配合得宜,混合而成的奶茶,未入舖已聞到。

蘭芳園---經典必試

地址:中環結志街2號前

大牌檔式絲襪奶茶,家已買少見少,有50年歷史,可說是香港最出名的茶檔之一。符合4大標準:說是經典,當然符合濃、滑、香、厚四大標準。若不嫌天口熱,可試試在牌檔歎茶,懷舊一番。

金鳳茶餐廳---必飲凍奶茶

地址:灣仔春園街41號地下

另一經典,堪稱全港最旺茶餐廳之一,亦因流量多,奶茶夠新鮮。出名無冰:來金鳳必飲凍奶茶,因奶茶不加冰,直接雪凍,能保持茶的濃度,凍飲都有茶味。

Unix痛恨者手冊2:第二章:多向前掃瞄一個編輯字符真的這麼困難麼?

哪怕是Unix「專家」,也要暈菜了。下面再來看看Milt Epstein的這個例子,他想寫個shell腳本獲得實際被敲入的命令行,而不是那個經shell處理後的結果。他最後發現這並不容易,因為shell為命令做了太多的「好事」。要做到這一點,需要各種稀奇古怪的變形技術,連Unix專家也會望而卻步。這就是Unix的典型做法:把簡單的東西搞得異常複雜,這只是因為這些東西在Unix誕生之時從沒被仔細考慮過:

日期: 19 Aug 91 15:26:00 GMT 發信人: Dan_Jacobson@att.com 主題: ${1+"$@"} in /bin/sh family of shells shell scripts 收信人: comp.emacs.gnu.emacs.help, comp.unix.shell  On Sun, 19 Arg 91 18:21:58 - 0500 Milt Epstein  寫到:  Milt> "${1+"$@"}"究竟是什麼意思?我估計這是用來 Milt> 讀取其餘的命令行參數,但我不敢肯定。  這是/bin/sh裡用來完整複製命令行參數的一種方法。  它的意思是:如果有至少一個參數(${1+),那麼用所有參數("$@")來替代以保留所有的空白字符。  如果我們只使用"$@",那麼在沒有參數的情形下會得到""而不是我們想要的空參數。  那麼,為什麼不使用"$*"呢?sh(1)的man手冊是這樣說的:  雙引號之間的參數和命令會被替換,shell會對結果加上引用,以避免解析空格或生成文件名。如果$*出現在雙引號之中,各個參數之間的空格會被加上引用("$1 $2 ..."),而如果$@出現在雙引號之中,各個參  數 之間的空格不會被加上引用("$1""$2" ...)。  我認為${1+"$@"}一直可以兼容到「版本7」的shell。  老天!一直兼容到「版本7」。

膠樽底部號碼

電郵內容

原來每個膠樽器皿的底部都有個數字。假若數字在"05"或以上就可以循環再用,而數字越大越安全。


假若細過"05"即"04"或以下,甚至沒有數字的話,請即棄掉,因它會發放致癌的有毒化學物質,特別是女性患子宮癌的機會也大大提高。


文章分享

膠樽底部的數字,只是用來區別塑膠的種類,如"1"是polyethylene terephthalate, "5"是polypropylene, (請勿問小弟中文名,一切只從chem書 copy得來)"7"係指其他,數字作用只是在回收時方便分類!

而且,平日最常回收的膠樽,正是1號膠樽,怎可能說只有5號以上的才能回收?

source: http://erato.hkistore.net/article/index.php?tool=read&ref=4223


其他資料

麵醬豆腐炆魚滑

材 料

  • 炸豆腐10 件
  • 魚滑(鯪魚蓉)6
  • 菜心8棵
  • 蒜蓉3粒(剁碎)
  • 乾蔥半個

芡汁

  • 麵醬3湯匙
  • 上湯半杯
  • 糖1茶匙
  • 鹽1/2茶匙
  • 老抽1/2茶匙
  • 蠔油2湯匙
  • 紹酒少許

做法

  1. 魚 滑 用 茶 匙 刮 落 已 煮 滾 的 熱 水 中 煮 熟 , 撈 起 備 用 。
  2. 菜 心 用 油 鹽 水 飛 水 , 撈 起 排 在 碟 邊 。
  3. 豆 腐 飛 水 , 撈 起 瀝 乾 。
  4. 燒 熱 少 許 油 , 加 入 麵 醬 、 蒜 蓉 和 乾 , 加 入 魚 滑 和 豆 腐 兜 勻 。
  5. 加 入 其 他 汁 芡 材 料 , 用 生 粉 水 埋 芡 後 上 碟 。

Unix痛恨者手冊2:第一章:歡迎來到元語法(metasyntacitic)動物園

C Shell的元語法操作符帶來了大量和引用有關的問題和混亂。元操作符在一個命令被執行前對其進行轉換。我們把這些操作符叫做元操作符是因為它們不屬於命令的語法成分,它們作用於命令本身。大多數程序員對元操作符(有時也叫做escape operators)並不陌生。比如,C字符串中的反斜槓(\)就是一個元語法操作符;它不代表自己,而是對其後的字符的說明。如果你不希望如此,你必須使用引用機制來告訴系統把元操作符當做一般字符來處理。回到剛才C字符串的例子,如果想得到反斜槓字符,你必須寫成。

簡單的引用機制在C Shell中很難工作,這是因為Shell和它執行的程序之間各執一詞,無法統一。例如,下面是個簡單的命令:

grep string filename;


參數string包含了grep定義的字符,比如?, [, 和]等等,但這些字符是shell的元操作符。這意味著必須對它們進行引用。然而,有些時候可能不需要如此,這和你使用什麼樣的shell以及環境變量有關。

如果想在字符串中尋找包含點(.)或其他以橫槓(-)開頭的模式,這就更為複雜了。

一定要記住對元字符進行正確引用。不幸的是,和模式識別一樣,操作系統的各個部分都充斥著互不兼容的引用標準。

C Shell的元語法動物園裡飼養著七種不同的元操作符家族。斗轉星移,轉眼間動物園裡已經人滿為患了,籠子使用的不再是鋼鐵,而是用錫了。動物間的小磨擦不斷。這七種針對shell命令行的轉換方式是:

別名 alias, unalias


命令輸出替代 `


文件名替代 *, ?, []


歷史替代 !, ^


變量替代 $, set, unset


進程替代 %


引用 ',"

這一「設計」的結果是,問號(?)永遠被shell當成單字符匹配符,它永遠無法被作為命令行參數傳給用戶程序,所以別想使用問號來作為幫助選項。

如果這七種元字符有著清晰的邏輯順序和定義,那麼情況也不會太糟糕。可事實並非如此:

日期: Mon, 7 May 90 18:00:27 - 0700

發信人: Andy Beals

主題: Re: today's gripe: fg %3 (今天之不爽事:fg %3)

收信人: UNIX-HATERS


你可以使用%emacs或者%e來恢復一個任務(如果唯一的話),也可以使用%?foo,如果"foo"出現在命令行中。


當然,!ema和!?foo也可以用於歷史命令替換上。


但是,UCB的豬頭(pinheads)們沒有想到!?foo後面可能伴隨的編輯命令:


!?foo:s/foo/bar&/:p