2009年3月6日 星期五

SIMD programming -- 雙魚

文件名稱:Cell Broadband Engine Programming Handbook
從第22章「SIMD Programming」開始看
已經看完第一節 SIMD Basics

∮SIMD Basics
1. SIMD: one instruction to be applied to the multiple data elements of a vector in parallel
2. Vectors are also called SIMD operands or packed operands.

→ 一個vector裡有4個element

3. SIMD coding 舉例

→ 一般作法是先把 b[1]、c[3]先load出來,將兩者相加後store回a[2]

→ SIMD作法則是把b、c memory stream都向左shift,利用 vector-add instruction 把數值相加,相加完的數值先向右shift,再存回a中對應的位置。

4. Auto-SIMDization:有些撰寫程式要注意的準則,按照準則能讓程式被Compiler有效地SIMDized
(1) Memory 要 data aligned,data存在記憶體中要盡量對齊。
(2) 盡量用array,不要使用pointer去存取資料。
(3) Function calls are not SIMDizable,因為Compiler可能會不知道function call 裡面的code,最好用 marco 跟 inline。

(4) Trip Count 至少要超過3次,否則Compiler不知道alignment。
→ trip count=4,如果a[0] is aligned 可以 auto-SIMDized

(5) 有相同的Left hand value比較好,可以用select bits instruction來SIMDize。

→ if – else部份可以改成 m[i] = a[i] > b[i] ? a[i] * 2 : b[i] * 3 ;







































2009年3月5日 星期四

多媒體專論課程-論文

我找了五篇論文,其中有一篇張數較少但數學很多,篇名分別是:

  • A Novel Pitch Period Detection Algorithm Based on Hilbert-Huang Transform, 2004
  • Use of Temporal Information: Detection of Periodicity, Aperiodicity, and Pitch in Speech, 2005
  • Speech pitch determination based on Hilbert-Huang transform, 2005
  • A comparison study of improved Hilbert–Huang transform and wavelet transform: Application to fault diagnosis for rolling bearing, 2005
  • A COMPARISON OF DIFFERENTIAL  SCHEMES FOR LOW-RATE SINUSOIDAL AUDIO CODING, 2003

這裡下載。

冠廷提供的paper:

  • AUDIO-BASED COVER SONG RETRIEVAL USING APPROXIMATE CHORD SEQUENCES: TESTING SHIFTS, GAPS, SWAPS AND BEATS
  • ALGORITHMS FOR POLYPHONIC MUSIC RETRIEVAL: THE HAUSDORFF METRIC AND GEOMETRIC HASHING
  • CONTENT-BASED MUSICAL SIMILARITY COMPUTATION USING THE HIERARCHICAL DIRICHLET PROCESS

這裡下載。

文森提供的paper:

  • A model-based approach to partial tracking for musical transcription
  • A Partial Searching Algorithm and Its Application for Polyphonic Music Transcription
  • BINAURAL PARTIAL TRACKING
  • Enhancing the Tracking of Partials for the Sinusoidal Modeling of Polyphonic Sounds
  • IMPROVED HIDDEN MARKOV MODEL PARTIAL TRACKING THROUGH TIME-FREQUENCY ANALYSIS
  • Networks of Adaptive Oscillators for Partial Tracking and Transcription of Music Recordings

這裡下載。

20090305

今天三人報的paper分別是:

showmin: Speech pitch determination based on Hilbert-Huang transform

cent: Enhancing the Tracking of Partials for the Sinusoidal Modeling of Polyphonic Sounds

冠廷: A TEXT RETRIEVAL APPROACH TO CONTENT-BASED AUDIO RETRIEVAL (下載)

2009年3月4日 星期三

師父與弟子

說來慚愧, 這兩年孩子們的到來, 我中斷了多年打坐與頌經的習慣, 幾天前在一次清晨, 家人都還在睡夢之中, 我上了香, 決定打一下坐, 下坐後, 念了三遍心經, 然後準備叫家人起床, 開始一天的活動. 這一天我覺得很好, 所以第二天決定繼續下去. 到了第三天, 也就是2/3.

2/3下午六點回到家聽到師父捨報的消息, 我沒有太多震驚與難過, 因為如師父說的, 他是每一天都準備要死的, 佛也說生命是在呼吸之間的. 對每一個人來說, 這一天總是會到來, 師父說過他發願下一世還要來這人間, 還要出家, 師父說過他會再來, 以師父的願力之大, 我知道師父是不會黃牛的, 所以我的心也是安的.

這一天, 我也如往常地忙完孩子的事, 陪孩子上床睡覺, 2/4清晨一樣打坐後叫家人起床. 一樣如往常到學校做事, 我的表面也如往常一樣平靜, 遇到同事一樣地寒暄, 不過我的胸口一直好似有什麼東西梗著, 下午接完德恩回家, 我打開電視, 電視裡播著跟師父有關的消息, 我一邊忙著準備晚餐, 陪家人吃完晚餐, 孩子的媽咪幫孩子洗澡時, 我得空坐下來, 一樣看著電視.

一直到電視裡出現師父為四川地震祈禱的那張照片, 這畫面一閃即逝, 但是我的淚水終於如潰堤一般流了下來.



1996年, 我的母親患了重病, 當時我許願不再吃肉與願意減壽一紀, 希望母親可以好起來, 母親在1997年初動手術後, 漸漸康復, 母親出院後, 我接她到新竹與我同住, 以便一邊照顧. 母親在新竹期間, 我們會一起看宗教節目, 那時的我, 其實對法鼓山是陌生的. 偶而看到師父, 覺得師父是一位親切與有學問的出家人, 看起來跟其他的法師有很大的差別, 他的樣子比較像做學問的人, 這一點跟我的職業相同, 後來知道師父在日本拿博士學位後, 我更尊敬師父了, 因為那個年代在日本拿博士非常不容易, 尤其是人文方面的.

母親在六月份康復回到彰化老家, 我則回到平常的教學研究的常軌. 有一天, 我看到華視的法鼓山的節目裡, 有一個出家生活體驗營活動, 時間是在七月底, 訊息一閃而逝, 但是我的記憶力一向不錯, 記下了電話號碼, 當時, 我在七月份有一個國際會議要出國報告, 回來剛好可以趕得上, 我心中好奇, 想想左右無事, 我又是單身一人, 於是打電話去報名, 沒想到卻額滿了. 我心中在想, 這是什麼樣的活動, 怎麼一下子就額滿了, 不過負責人還是要我留下電話號碼, 假如還有空額才通知我. 我也不以為意, 出國後就把這件事忘了. 回國的第二天, 我被通知剛好有人退出, 我就決定參加了.

因為當值的法師跟我說不必帶什麼東西, 報到當天, 我也就真的只帶兩套換洗衣物以及車資. 坐著由農禪寺準備的車子到了法鼓山. 老實說, 這也是我第一次到農禪寺.所以著實花了一番功夫才找到農禪寺.

在此之前, 我不但是跟師父與農禪寺沒有任何淵源, 連跟任何道場都沒淵源, 所以一般佛教信眾會的日常禮儀都不知道, 當然更不知道早晚課頌, 禪七, 佛七, .....等等之類的事務了, 等我到了法鼓山, 我發現除我之外, 參加的師兄們應該都是資深的悅眾菩薩. 現在回想起來, 我真是福緣深厚. 不過剛到法鼓山時我可不這麼想.

因為, 等到主持活動的法師宣布要在舊大殿旁(現在的居士寮)落髮, 我才發現情況有點不對, 因為跟我想像的救國團營隊不太一樣, 這是玩真的. 我一再猶豫要不要打道回府, 不過我的個性是一旦凡事起了頭就會做一陣子, 等了解狀況再做打算, 何況法師也說中途可以退出, 反正理光頭髮也不算是太嚴重的事.

我被分配到二班二號, 寮房是在大殿左側, 小小的一個位子, 跟我平常睡的比起來算小的, 真怕半夜踢到隔壁的師兄. 第一天晚上, 師父出來做了簡單的開示, 要我們安心, 把外面的一切忘掉, 師父的開示很風趣, 跟我在電視上看到的師父差不多, 不過很奇怪的是我的心中對師父起了一種莫名的親近心, 同時也伴雜著一點敬畏心, 對一向高傲的我, 這是不太常見的.

雖然我是連問訊都不知道是什麼的, 不過經過了前一天的演練以及臨時請教二班的班長一些日常應該注意的禮儀, 第二天的剃度典禮算是沒出糗, 這一天, 天氣非常熱, 加上攝影用的燈光, 讓我既熱, 眼睛又不舒服, 當時我在想, 典禮完我就該下山了, 反正知道是怎麼一回事了.

師父在典禮的開示說明了出家的功德一節讓我決定再待下來, 因為雖然母親開刀後狀況良好, 假如真是如師父所說, 那麼出家七天的功德我可以回向給母親, 哪真不錯呢! 所以我又決定留下來了.

就這樣, 每一天我都有一點理由想要打道回府, 不過因為師父的開示實在精彩讓我捨不得就這樣走人, 到後來, 我變得一點想走的意思也沒有了.

捨戒的前一天, 師父開示, 要我們從內觀自己的心, 對於一生的所造諸業,, 自內心慚愧與懺悔, 對於一個像我這種自小就心高氣傲, 課業一帆風順, 從來就不服人的人, 我第一次見是到內心的陰暗處, 師父的開示開啟我認識自己的門. 那一刻, 我痛哭失聲, 不能自己.

最後的一天, 我不想走了, 想留下來在師父身邊繼續學習, 但是該來的總是要來, 捨戒儀式進行時, 我再一次流淚, 這次是流下不捨的淚水. 師父勉勵我們, 在學佛的路上精進, 這一次雖然捨戒了, 以後因緣具足時還是會有機會再一次出家的. 師父說他發願要生生世世來這娑婆世界出家, 當天我也發願以後要跟著師父出家的.

經過了這一次的活動, 我知道了今生安身立命的方式, 對於多數學佛的人該了解的事情也略知一二, 也從這時開始, 我才開始研讀師父的著作, 第一與第二本書就是正信的佛教與學佛群疑, 這是果品法師賜給我的, 我也非常感念法師的恩惠, 也從這兩本書開始, 我漸漸了解佛法歷來被誤會的地方, 老實說, 我過去以為佛教就是我家裡一般跟道教或其他信仰那樣的宗教呢!

此後, 我只要周末有空, 就會前往農禪寺聽師父開示, 即使偶有師父不在寺裡的時候, 也常有其他法師代為開示. 此時, 師父在進行一系列關於楞嚴經的開示, 本來楞嚴經對我這剛開始學佛而國學基礎又很淺薄的人是太太難了, 但是當師父用說故事的方式, 風趣又詼諧, 讓一向對古文, 尤其是佛經這類語意艱深感到頭痛的我, 很快地抓住他的要點, 而師父講解七處徵心八還辨見的時候, 在開始我是覺得很好玩的, 而且非常合乎做研究的羅極與辯證法則, 可是回家後, 深思師父的開示以及細讀經文中這段文字後, 我起了恐怖心與慚愧心, 因為, 我自己常連自己在想什麼都不清楚, 無法掌握, 而我自己還在當人家的老師呢!! 這怎麼了得.

接下來, 我參加了農禪寺的初級禪訓班, 開始自己在家裡學著打坐, 並且開始讀金剛經, 我除了聽師父對於金剛經的開示之外, 也讀師父的老師道源法師的講錄.

這時, 果品法師要找一位幫忙錄音的義工, 我剛好對音響與錄音略知一二, 所以即使師父不在的時候, 我也會在農禪寺幫忙整理一些舊的錄音, 遇到師父開示的時候, 我則是負責當時的錄音以及事後剪接的工作. 這份差事對我而言是自出生以來三十多年, 能學到對我一生影響最大的事情.

那時師父的身體狀況還很好, 在多次的禪七與禪三, 師父每天都會有二到三次的開示,而且是親自來講, 不是透過錄音或錄影, 我經常就蹲在師父的後面進行錄音工作, 我從耳機裡, 從喇叭裡, 從近距離裡, 聽著師父的講話, 經常地歡喜讚嘆, 也慶幸自己的福報, 仿佛自己也一起在打七一樣, 當時 , 我除了整理的工作之外, 也會跟著一起打坐, 而晚上在大家就寢後, 如果白天還沒整理完錄音, 就還要做完才睡覺, 而一大早就要起床準備, 睡眠很少, 但是整天都精神奕奕的, 一點也不覺得累.

這樣的日子過了近一年, 不過我一直沒有真正跟師父當面講過話, 要說有的話, 就是那一天我剛好在農禪寺的樓上整理資料時, 因為感到有一點累, 所以出來透透氣, 又剛好師父走進來, 我本來要閃身讓師父可以過去, 師父親切突然地問我, 整理的工作累不累, 我還記得我當時用抖顫的聲音回說, 還好, 那時我的腳直發著抖呢!

師父給我的多是智慧上的啟發, 師父對義工們也一向很親切, 那為什麼我會不敢找師父直接問問題呢? 甚至跟他講話都會發抖呢? 這是有兩段故事的. 第一次是我自己參加禪三的時候, 師父在第二天上午的開示時發生的. 我還記得我當時坐在師父右手邊第二排. 這是我第一次正式參加禪修的活動, 雖說看過多次別人打禪七, 自己來還是不一樣. 那時的我因為學校的事情放不下, 因此打坐的時候, 可能包含其他非打坐的時候, 我都在想我自己研究上的一些問題. 人是坐在禪堂裡, 但是心還在外面. 而師父開示時, 我還是一邊聽開示, 一邊在想著研究, 老實說, 我真的忘了師父當時開示時講了什麼, 只知道師父突然頓了一下, 話鋒一轉, 把臉朝向我的位子, 口氣突然嚴厲起來, 說有人坐在這裡, 心裡還在想研究. 我當時嚇一跳, 心裡在想, 怎麼有可能? 然後師父又回到前面的話題, 而我的注意力又開始分散, 又回去想我的研究, 然後第二次師父又轉過頭來好像對著我說, 人就是心猿意馬, 師父還是怎麼都拉不回來, 這樣不能放下俗世的事, 怎麼禪修呢? 我當時嚇出一身冷汗, 再也不敢亂想了.

漸漸地, 我感到在農禪寺的日子讓我覺得很自在, 我開始嚮往出家的日子, 不過多數的原因跟當時我的處境有關. 那幾年裡, 我身邊有幾位認識的人相繼離世, 我的祖父與母親均罹患癌症開刀, 我的生活, 事業, ....等幾乎都不是太順利, 而在農禪寺裡, 我似乎找到一個一般人稱的安身立命的所在, 可以舒適安逸地過日子, 不必擔心多餘的雜事, 而聽法師說, 要是父母親人生病了, 還是依樣可以回去照料一切, 不是說一出了家就六親不認, 棄父母於不顧了, 我心裡最放不下的一部分的顧慮也沒了. 那時, 紐約農禪寺新建的象崗道場需要一位通英文, 且熟悉當地環境的法師, 而我在紐約念書多年, 英文不是頂好, 但是還應付得過去, 想到出了家後還可以回到我喜歡的都市過日子, 實在太美好了. 那時, 我的心裡在盤算著如何回家說服父母親關於我想要出家這件事.

正當我自我陶醉在自己對未來美好日子的幻想, 在一次的護七的錄音工作, 師父在前面開示, 講的是默照的方法, 而我因為已經聽過了兩三次, 所以又開始幻想以後在象崗的日子了, 突然師父又是話鋒一轉, 說起了修行與出家的功德, 並且說明出家是為了渡眾生, 而非求一己之安樂, 假如只是為求一己安樂來出家, 豈不是對不起佛與師父的教誨, 講到這裡, 當時師父的語氣其實是變得蠻嚴厲的, 而我也聽得出了一身的汗, 心中感到非常慚愧與懺悔, 虧得自己號稱讀了那麼多本經典, 講起經典裡的道理也頭頭是道, 打起坐來也可以一兩小時不下坐, 打坐時也可以做到似乎身體輕安甚至消失, 可是老實說心裡一點也沒有轉變, 還是大凡夫一個.

師父開示完後, 經過我的身邊, 好似有意地望著我, 當我的目光接觸到師父的眼神時, 我慚愧地低下頭來, 當師父離去時, 我跪在地上, 感謝師父的教誨. 那一次的禪七結束前, 師父照例開示要大家報佛恩, 報師恩與報眾生恩, 要能慚愧與懺悔, 要能努力修行, 有朝一日也可以渡眾生的, 而在家修行的人對於接引眾生有時會更方便, 要我們努力, 參加禪七的師兄師姐很多都掉下眼淚, 而我更是慚愧得無地自容, 哭得比誰都厲害.  因為這話正是說給我聽的.

自此, 我遇見師父時, 總是低頭繞路, 似示有意躲著師父, 因為我實在是怕師父一言或一語就洞穿了我的心思, 而我的心裡深處確實是如此不堪的啊! 可是我還是常常找機會在可以望見師父身影的地方靜靜地以無比敬仰的心仰望著師父.

自此, 我再也不敢自己大言不慚地說自己是師父的弟子, 也不再動不動就搬出佛經來教人要怎樣怎樣, 不再見人就以阿彌陀佛跟人打招呼, ..., 等, 甚至不輕易讓人覺得我是一個學佛之人, 平常跟朋友同事相處總是嘻嘻哈哈地, 因為吃素, 朋友總是會問我是否是因為宗教因素, 我總回答不是, 只有在人問我有皈依否, 皈依師父是誰時, 我才會回答, 因為自知自己的淺薄, 怕有辱師門, 對於出家一事是暫時不敢提了. 師父提到他生生世世都要出家來幫助眾生的, 我也同樣發願有一天我也是要跟著師父出家的.

跟師父最近距離接觸的一次是帶著一群十幾位中華大學的學生到農禪寺辦活動的一天晚上. 那時我是學校佛學社的老師, 這社團的人數不多, 活動也少, 我自願擔任指導老師, 其實是很惶恐的. 我用我初淺的知是教學生看一些經典, 也辦一些佛教文物與書的展覽, 也請過知名人士如陳履安先生蒞臨演講, 但是總覺得長此以往是不夠的, 所以帶著學生到農禪寺進行三天的參訪, 蒙果品法師慈悲, 安排了數位法師帶著學生打坐, 做功課, 講解行儀, ..., 等等, 當果品法師知道其實多數同學並未皈依時, 法師馬上答應請師父為同學們皈依, 那天晚上九點多, 師父走了下來, 在大殿為同學皈依並講解皈依的道理, 隨後親自為每一位帶上刻有觀世音菩薩的項鍊, 期許大家要盡心盡力, 利他利己. 當師父將項鍊掛在我的頸上, 師父的手接觸到我的頭頂時, 我的全身如觸電一般, 感動到眼淚又掉了下來. 師父真正是有如孔子一般的望之儼然, 即之也溫的長者.

1999年, 我與我的同修結婚, 2000年, 因為工作的關係遷徙台南, 由於路途較遠, 到農禪寺去的機會就少了, 2002年同修患病, 在治癒後需要長時間服藥與照顧, 2005年後, 我的女兒, 德恩與慈恩相繼出生, 日常我就透過師父的節目跟著孩子們一起看, 每次德恩在電視裡看到師父時都會說要聽師父講話. 而我也就只有在重大典禮時才會過去幫忙, 但是每當在人群中見到師父, 我的敬仰之心依然, 但是每次看到師父日益佝僂的身體, 我的心又是那麼的捨不得, 就這樣 胸口總是漲得滿滿地, 眼淚總是在眼睛裡打轉.

我的身體自小就不好, 每隔幾年就會生一場大病, 每次身體微恙, 我往往會停下手上做到一半的事情, 等身體恢復時, 又往往因為外在現實的因素, 沒能延續之前做到一半的事情, 我常在想, 師父的身體比我還差, 為什麼師父可以一路走來, 不屈不撓呢? 即使在身體狀況不好的時候呢? 我想這是因為師父的心的力量太強大了. 這讓我想起兩件事情. 第一件事是有一年, 師父去看牙齒, 牙醫師也是師父的弟子, 由於太過於戰戰兢兢, 反而不慎, 沒拿好鑽子, 把師父的嘴鑽破了一個大洞, 流了許多血, 可是師父那天原定要講開示的, 回到農禪寺, 師父還是照原訂計畫上堂, 講到一半, 師父痛得瞇起了眼睛, 拿出手巾, 將血吐到上面, 一邊笑著說, 他那是痛, 不是苦, 打坐時, 腳痛就注視著這痛, 一下就過去了, 但是心中不要有覺得這是苦, 要是覺得苦就不對了, 說的大家一邊笑,卻也一邊難過. 接著師父果然用接著的幾十分鐘的時間不間斷地把方法講完, 等師父下了座 , 那時學員們都還在拍手, 可是我在後方錄音的坐位上看到師父痛到摀著嘴, 彎下了腰, 那一幕只有我跟少數幾位法師看到. 我是又欽佩又心疼呀! 另一次是果品法師轉述的, 那是有一次, 師父帶團到大陸去, 遇到一個階梯級數很多的建築或是山, 那時大家還在想, 這麼高的階梯要爬上去, 一般年輕人都不容易了, 何況師父! 只見師父意態安詳地, 慢慢地一步一步往上走, 一邊走還可以一邊看周圍的景物, 隨行的人與法師卻一個個由跟在師父身邊而慢慢落後, 等師父臉不紅氣不喘地到了頂端, 很多隨行的人還停在半途休息呢! 能跟師父同時走到頂端的人也是氣喘吁吁的. 果品法師回憶說: 出國前師父還因為身體不適, 看了醫生, 那時大家還在想是否要取消出國的活動呢!

今年, 我打電話給林江標師兄拜年, 師兄說師父生病了, 今年過年沒有出來講話. 又說去年師父為了法鼓大學的成立與招生還在努力, 有一次師父病得重了, 都沒了呼吸了, 大家都不知道師父是入定去了還是捨報了, 那時果廣法師在師父耳邊輕輕說著, 師父, 您還不能走, 眾生還需要您啊! 聽說師父眼角滴下一滴慈悲的淚水, 張開眼睛, 說是要大家不必擔心. 去年我聽到師兄的轉述時, 心中既感恩又難過, 師父為了眾生真的是無比的辛苦呀!

2/15這天, 我一大早就跟著林江標師兄的車子到了法鼓山, 前一天還是大太陽的日子, 到了山上, 我試著用雙腳在法鼓山的每一條路上走著, 我想像著這些都會是師父走過的路, 我的辦公室裡放著師父站在七顆樹下的照片, 我也一個人在樹下靜靜地坐著. 我走到大殿裡, 看著我最親愛的師父平靜地坐著, 示現著人生的無常. 這一天一早就飄起雨來了, 但是身上只是微濕而已, 我近年身體不算好, 所以覺得有點冷. 看著大家忙著, 我的心中沒有悲傷, 我只是靜靜地看著, 想著, 當年第一次參加出家生活體驗營時, 我記得的師父所講的話, 以及那時師父清瘦的身影. 中午時分, 雨停了, 隨著典禮的開始, 我選擇不到大殿那邊去, 而回到居士寮那邊看著轉播, 這居士寮的外在跟十多年前我第一次來法鼓山的時候沒有大多變化, 彷彿歲月就停在1997年時一樣, 可是除了看電視節目之外, 我再也聽不到師父親自出來講話了, 但是師父講過的, 寫過的, 我以後會時時取出來溫習, 就好像師父從來也沒有離開過一樣, 而師父也確實從來沒有離開過我, 即使我沒有經常跟在師父跟前. 師父是來了又去了, 師父也是沒有來也沒有去的. 師父在大殿裡示現著無常的同時, 師父也無所不在地示現著, 如同佛在數千年前所宣講的: 常, 樂, 我, 淨.

我的耳裡一直沒有聽到電視裡的話語, 直到當方丈法師講話時, 心頭一震,  我知道是該跟師父說再見了, 我看著師父帶著眾人走到園區, 我的眼淚無法停下來, 雖然我知道這眼淚實在多餘, 可是我就是忍不住. 師父用最平凡的方式, 示範了一個人從出生到捨報, 可以是這麼的簡單, 簡單到無比輝煌的地步, 真是可以思議, 也真是不可思議.

從下午三時許, 天空又下起雨來, 不過奇特的是, 我身體不再感到寒冷, 我站在法華鐘旁, 聽著法師們, 一遍又一遍地敲著鐘, 好像師父在對我說話, 再次一遍又一遍地嵌進了我的心裡. 師父用這山, 這水, 這音聲, ...., 等等慈悲地對我說法.

我是個駑鈍的人, 到現在, 身上的壞習氣還是改不過來. 喜怒哀樂, 貪嗔癡, ..., 等等, 一樣也沒少過. 今天的我, 要是有一點點可取的地方, 那還是拜師父的殷殷教誨所賜. 十多年前, 師父在國父紀念館所講的四要: 需要, 想要, 能要, 該要, 讓我受用無窮, 師父說過, 需要的不多, 想要的太多, 需要的可以要, 想要的不重要, 一語道盡身為凡夫的我的問題, 到了今天, 我仍然是想要的太多, 可是每當想到師父的話, 我總是可以在陷溺更深的邊緣脫身. 師父說慈悲沒有敵人, 智慧不起煩惱, 我卻常常自以為是正義的使者, 動不動就指摘別人, 樹敵無數, 致生無窮煩惱. 師父講如何面對, 接受與處理事情時, 我總是因為嗔心與癡念太重, 往往無法把事情處理得圓融, 而事後又因為自己的執著而煩惱, 但是當想到師父說要放下時, 我總是以慚愧與懺悔的心, 提醒自己要注意自己的心念. 師父說的四感: 感恩、感謝、感化與感動, 讓我在從事教職工作時, 不斷提醒自己不要好為人師, 要感謝我的學生們給我成長的機會, 要從他們身上學習他們的優點, 提醒他們要開發自身的潛能, 而不要試圖感化學生, 要取法先聖先賢的師道, 處處為學生著想, 要努力於自己的專業研究, 要提醒自己堂堂正正, 誠誠懇懇地教學, 希望能夠感動學生, 希望學生日後可以把良善的種子傳給他們身邊的每一個人.  凡此種種, 受之於師父的恩惠與教導太多, 但是實踐的又太少, 我又是感恩, 又是慚愧, 只能在日後更加努力, 以報眾生恩, 以報佛恩, 以報師恩.

每當我失去勇氣與信心之際, 我總是會把師父的歸程再拿出來讀, 想到師父幼年時的困苦, 以一個國小學歷的人,  拿到當時非常困難才可以取得的博士學位, 這是必須經過一番艱辛的苦讀以及擁有超人的毅力才做的到了, 而拿到學位後, 原本可以找個教職, 輕鬆過日子, 師父選擇遠渡重洋, 在剛開始的期間過著窮到撿剩菜來吃的地步. 然後才開創了今天的法鼓山, 師父的老師說過: 道心之中有衣食, 衣食之中無道心, 師父的道心真如須彌山啊! 這幾年即使法鼓山已經極具規模了, 師父還是不辭辛勞地, 弘法利生, 直到捨報時, 仍然說"虛空有盡, 我願無窮", 還要再回來人間繼續他未完的工作, 師父真是這個年代的眾生的觀世音菩薩與地藏王菩薩.

之後的周末, 我照往常一樣在早晨收看師父的節目. 我的女兒們在一旁玩耍, 我跟女兒們講, 師父在說話喔! 你們過來聽, 三歲半的大女兒是認得師父的樣子的, 每次我指著電視上的師父時,  她都會說, 那是師父, 要聽師父講話. 一歲多的小女兒回答說: 那是阿公在講話, 我說: 對! 阿公在講話, 這個阿公是爸爸的師父喔! 她開心的說: 是師父嗎? 要聽師父講話喔! 我抱著他們, 眼裡一樣含著淚水說: 對呀! 你們長大以後要聽師父的話喔!

有來有去, 無來無去. 如來如去. 師父真的沒離開過.

註:

這一路上, 我還要感謝果品法師給親近師父的機會, 並且適時指點我, 也要感謝果東法師, 在師父不在時, 用極為輕鬆和藹的方式關照著我們, 並且為我的同修師姐皈依. 總之, 要感謝的法師與師兄姐太多, 餘不一一.

2009年3月1日 星期日

在 blog 貼程式碼使用 Syntaxhighlighter + PreCode

前言

在上一篇教學後,我們已經可以使用 Syntaxhighlighter 來幫我們排版、美化程式碼了,不過很快地我們就發現單靠 <pre> 去排版還是會遇到問題,當初我覺得可以靠 WLW plugin 解決,沒想到馬上就找到了一個不錯的與 Syntaxhighlighter 整合的 plugin ,不過可惜的是,目前它支援的語法是 Syntaxhighlighter 1.5 的,不過好在有一些間接的 solution 。

這個 plugin 叫做 PreCode ,有趣的是官網稱 PreCode 是 Code Snippet With Syntaxhighlighter Support for Windows Live Writer,而 PreCode 這名字只出現在 binary 中,啊,題外話。

安裝 PreCode

PreCode 的官方網站, 在這裡可以找到安裝檔,安裝很方便,安裝完後可以看到 WLW 視窗右方的工具列多出了一個 PreCode 的選項:ScreenHunter_02 Mar. 01 00.54

使用 PreCode

PreCode 的使用相當直覺,點下 PreCode 後,就會跳出一個對話方塊:

ScreenHunter_06 Mar. 01 00.58 對話方塊已經有 Content 區塊可以貼上程式碼,Format 則建議選擇 pre,Syntax Highlighting 的地方就根據需求設定吧!

跟 Syntaxhighlighter 2.0 共存

第一種方式是手動修改 HTML code ,如果把 PreCode 的產生的 HTML code 打開來看,你會看到:

<pre class="cpp" name="code">#include &lt;iostream&gt;
using namespace std;

int main()
{
cout &lt;&lt; "Hello World\n";
return 0;
}</pre>


pre tag 的 class 的地方使用的是舊的 Syntaxhighlighter 語法,所以手動改成 “brush: cpp” 是一種方式。



第二種方式是開啟 Syntaxhighlighter 的向下相容性,這個方法得修改 blog 的 template 檔,跟上一個教學一樣,只是得多加一行來啟動向下相容!



<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.0.287/scripts/clipboard.swf';
SyntaxHighlighter.all();
dp.SyntaxHighlighter.HighlightAll('code'); // Add this!!!
</script>


參考



在 blog 貼程式碼使用 Syntaxhighlighter

在 blog 貼程式碼使用 Syntaxhighlighter

前言

謠言都說 Web App 的時代來了,可是在 blog 上貼個好看的程式碼片段還是不太容易,以我自己的理解,一來是排版問題、 二來是語言有些符號和 HTML tag 相衝突,例如:C/C++ 的 < > 同時也用在 HTML tag 上,所以當我們寫下:

#include <iostream>

往往會導致 editor 把 iostream 當作HTML tag ,而導致發佈文章後,只看到:

#include

這是因為對於不認識的 tag ,解讀時是可以略過的,所以有些 editor 會在發佈時就清掉這些 tag。此外,為了美觀、可讀性,若是還能讓程式碼貼出後自動支援 syntax highlight 那就更好了!所以這邊就來介紹一個不錯顯示程式碼的好工具—— SyntaxHighlighter。

簡介

Syntaxhighlighter 是好心人 Alex Gorbatchev 利用 JavaScript 搭配 CSS、Flash 開發出來,使用上並不需要 blog host 在 server 端提供支援。不過需要另外的網路空間來存放 *.js, *.swf, *.css, *.png 檔,以前大家流行放在 Google Page 這個免費空間上,不過這個服務去年八月就被 Google 收了,看似能取代 Google Page 的 Google Site 並不讓使用者上傳 js 檔。不過 Alex Gorbatchev 大概是好人作到底吧,他還提供了免費 host 的服務,至於頻寬問題怎樣,我就沒有細究了!

Syntaxhighlighter 支援的語言很多,有十六種:

  1. Bash/shell
  2. C#
  3. C/C++
  4. CSS
  5. Delphi
  6. Diff
  7. Groovy
  8. JavaScript
  9. Java
  10. PHP
  11. Plain Test
  12. Python
  13. Ruby
  14. SQL
  15. VB
  16. XML

而且支援六種顏色模式,可以點這裡看到預覽:

  1. Default:白色為主。
  2. Django
  3. Emacs
  4. FadeToGrey
  5. Midnight
  6. RDark

另外,值得注意的是,沈寂了兩年,Syntaxhighlighter 才在今年二月初出了 2.0 版,不過與它相關的 plugin 似乎都還沒跟上腳步,所以想安裝 1.5 的人同樣可以參考這篇文章,方法是一樣的。

正文

  1. Syntaxhighlighter 可以在它 Google Code Syntaxhighlighter Project 或是 Alex Gorbatchev 的網站上找到。不過 2.0 目前只能在 Alex Gorbatchev 的網站下載到。(目前 2.0.287 是最新版)
  2. 下載完,解壓縮可以看到幾個檔案和資料夾:
    ScreenHunter_01 Feb. 28 23.44
    1. scripts 資料夾下放著支援的程式語言相關的 JavaScript code。另外有個 clipboard.swf ,是 flash 元件,用來顯示程式碼、支援列印、複製等友善功能。
    2. styles:css 檔。
    3. src:不會用到。
    4. test.html :Syntaxhighlighter  範例。
  3. 請找個網頁空間,上傳 Scripts、Styles裡頭的檔案。Scripts 裡頭的語言種類不一定要全放,選擇想要用的就可以了。找不到網路空間,可以去用 Syntaxhighlighter  作者自己提供的。
  4. 修改 blog 的 template ,這步驟會根據你的 blogger host 而異。以 blogger 為例,請先登入再去範本 -> 修改 HTML,將下列程式片段貼到 </body> </html> 前。為免意外,請先備份原始 template 的程式唷。
    01.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shCore.js" type=text/javascript></SCRIPT>
    02.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shLegacy.js" type=text/javascript></SCRIPT>
    03.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushBash.js" type=text/javascript></SCRIPT>
    04.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushCpp.js" type=text/javascript></SCRIPT>
    05.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/shBrushCSharp.js" type=text/javascript></SCRIPT>
    06.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushCss.js" type=text/javascript></SCRIPT>
    07.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushDelphi.js" type=text/javascript></SCRIPT>
    08.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushDiff.js" type=text/javascript></SCRIPT>
    09.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushGroovy.js" type=text/javascript></SCRIPT>
    10.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushJava.js" type=text/javascript></SCRIPT>
    11.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushJScript.js" type=text/javascript></SCRIPT>
    12.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushPhp.js" type=text/javascript></SCRIPT>
    13.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushPlain.js" type=text/javascript></SCRIPT>
    14.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushPython.js" type=text/javascript></SCRIPT>
    15.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushRuby.js" type=text/javascript></SCRIPT>
    16.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushScala.js" type=text/javascript></SCRIPT>
    17.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushSql.js" type=text/javascript></SCRIPT>
    18.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushVb.js" type=text/javascript></SCRIPT>
    19.<SCRIPT src="http://alexgorbatchev.com/pub/sh/2.0.287/scripts/shBrushXml.js" type=text/javascript></SCRIPT>
    20.<LINK href="http://alexgorbatchev.com/pub/sh/2.0.287/styles/shCore.css" type=text/css rel=stylesheet>
    21.<LINK href="http://alexgorbatchev.com/pub/sh/2.0.287/styles/shThemeDefault.css" type=text/css rel=stylesheet>
    22.<SCRIPT type=text/javascript>
    23.    SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.0.287/scripts/clipboard.swf';
    24.    SyntaxHighlighter.all();
    25.</SCRIPT>
  5. 之後當你要貼上程式碼時,只要切換到 HTML 模式,然後用<pre></pre>框起程式碼的方式就可以了!
    <pre class="brush: your_language">
    你的程式碼
    </pre>



  6. 最後是一個跟 WLW 有關的提醒,當我們切換到 WLW 的模式時,我們輸入的 <, >, & 等符號都不會自動轉換為對應的 &lt;, &gt;, &amp ,因此對於像是 C/C++ 這類語言來說,使用 SyntaxHighlighter 還是無法完全解決貼程式碼的問題,我想這點就必須倚賴 plug-in 來幫忙了! 可參考在 blog 貼程式碼使用 Syntaxhighlighter + PreCode 這篇文章!



參考文章



在 blog 貼程式碼使用 Syntaxhighlighter + PreCode