Monday, April 30, 2007

Joy -- 享受



每一個陽光明媚的公園裡,
樹叢裏難免有鳥屍,
碎石路上總會有狗屎,

但是當妳漫步時為何要凝住著這些不快,
而不享受陽光,涼風和美艷的花園呢?

溫暖的陽光,清涼的微風,耳邊的爵士樂,樹蔭下的閱讀。
這是窺視天堂的一瞬間。

Any park you go in a good warm sunny day,
always, you will find bird corpse in bushes,
always, you will find dog dropping on gravel path.

But while you stroll down the garden, why staring at those unpleasantness?
Why not just enjoy the warm sun beam, feel the cool breeze and smell the fragrance of Flora?

Warm sun, cool bleeze, jazz by the ear and good reading under shade.
It is a glimps of heaven on earth.

Saturday, April 28, 2007

加拿大遊戲機庫存量速報網站

好厲害,他們怎麼做到的?居然在Costco的網頁還沒有完全準備好就取得了資料!


任天堂的Wii賣的好到不行,一機難求,朋友Michael在遍找不得,到處尋訪之下發現了「ConsoleWatch」這個網站,登記了自己的電郵本來也沒有抱太大的期望,但是一天早上居然看到Costco有貨,直接利用這個網站的連結訂購到了一台。
有趣的是,當時Michael也到Costco自身的網站尋找可是居然沒有找到Wii的販售消息,反而在訂購了後才看到。「好厲害,他們怎麼做到的?居然在Costco的網頁還沒有完全準備好就取得了資料!」

WWW服務問世不過十來年,但是明確的改變了這個世界,許多人對於科技抱著畏戒,但是我個人卻是充滿了信心。

相關資料:
ConsoleWatch - Around the Clock Console Watch

全國免費上網,公開親吻引起暴動──印度

許多中東國家認為網路上的『不良內容』太多因而阻止人民上網,這樣好嗎?



幾年前我在一個廣播節目中被訪問時,被問到有關「許多中東國家認為網路上的『不良內容』太多因而阻止人民上網,這樣好嗎?」的看法。
我回答,歷史上任何企圖封閉以保護自己的政策都為自己帶來了無可彌補的損失,他們可以封閉自己,但是世界的其他部分繼續前進,到後來不過是自己害了自己而已。

最近印度剛剛公布2009年全國人民將會有免費的互聯往服務,印度是世界最大的民主國家,過去因為被宗教所陷,但是這幾年來決定擺脫這個局面,開始注重商業,我相信這是為什麼印度當局做出這個決定的原因。
金融體系的透明加上英文能力,現在開始著重通訊,這些條件會吸引許多西方國家和日本去當地投資。

但是發展的路還是非常遙遠,原因?道德習慣的限制:理查基爾(Richard Gere)在AIDS的宣導集會上作秀時親了當地女星Shilpa Shetty的臉頰,結果引起暴動,法院認為「淫穢,不雅觀」而發出拘票。
兩條新聞前後相差不久,表明「硬體(都市,科技)的建設發展容易,但是軟體(人心)的建設非常難)看來印度還有十來年的路要走。


相關資料:
Broadband to go free in 2 yrs -Telecom-News By Industry -- The Economic Times
Kisses from Richard Gere plunge Shilpa Shetty into India row -- Daily Mail

Friday, April 27, 2007

「享樂」被壓抑的緣由



Joy and Sorrow by 黃中羊
中國的儒教思想屬於「禁慾」系統,因此任何「享受」都被認為是不好的。
連音樂都要講求「中正平和」,其他的就可想而知了。

「熱情」一向也不是被喜歡的「美德」,因此大多數「君子」都變得「老成持重」「喜怒不行於色」,而「享樂」「大聲笑鬧」都會被認為是「沒有修養」的缺失。
再加上「人無遠慮,必有近憂」等說法層層枷鎖之下,人要是只為自己想,享受樂趣就是「自私」「墮落」「不上進」。
連帶著「成大功,立大業」等等的偉大理想開始讓人覺得要是沒有理想,沒有宏偉的目標那就是不如他人。

就這樣的,人人不自知的都替自己立了貞節牌坊,而人性的欲求都被活生生的扼殺。
在這種情形之下,對自己殘忍,當然對他人更是不會客氣,因此動輒以道德掛帥貶斥他人,殊不知道德是「人人心中一把尺,長短寬窄各不同」,因此道德只能用來規範自身,而不能強加於他人。

很不幸的「儒教」成了中國的「顯學」之後,上至朝廷,下至百姓「四平八穩,仁義道德」成了鐵則,凡動機必須是為了天下蒼生,凡行為必須合乎「八股教條,禮義廉恥」。
既然君子們都如此,當然「追尋自我快樂」如此不夠堂皇的行為自然是「草民」的行為了。

我相信就是「享樂」有負面意義的緣由。
「貞節牌坊」雖然高大,但是人的天性可不是如此能夠輕易被消滅,因此也養成了「說一套,做一套」的習慣,到頭來造成中國歷史上「真君子罕見,假道學盈街」的現象。

更不幸的,當「熱情」或「不拘言笑」被限制時,相對的「創造力」也被限制住了。
當「教條主義」「道德導向」成了主流之時,犯錯之人馬上不但會被法律所處罰,還要承受社會道德上的「私刑」。
這也是為何中國人比較會容易唯唯諾諾的向權威屈服的理由。

連「享受」都要擔心後果,那還有什麼事不擔心的?
蓮「享樂」是人的天性都無法接受,那如何談「人性」?
連「看別人享樂」的修養都沒有,那還能有什麼修養?
連「自己享樂」的勇氣都沒有,那「捨生取義」是「厭世」還是「勇氣」?

Tuesday, April 24, 2007

"First They Came ... 自掃門前雪?


The sun by Ismail Shammout
最初納粹來抓共產黨員,我沒有站出來說話, 因為我不是共產黨員。

跟著,納粹來抓社會民主黨員,我沒有站出來說話,因為我不是社會民主黨員。

然後,納粹來抓工黨黨員,我沒有站出來講話,因為我不是工黨黨員。

最後,納粹來抓我,已經沒有人剩下來替我說話了。

When the Nazis came for the communists,
I remained silent;
I was not a communist.

When they locked up the social democrats,
I did not speak out;
I was not a social democrat.

When they came for the trade unionists,
I did not speak out;
I was not a trade unionist.

When they came for me,
there was no one left to speak out.

by Rev. Martin Niemoller, 1945



『個人自掃門前雪,莫管他人瓦上霜』
這個說法原來的含意和「是非只因多開口,煩惱皆因強出頭」同義,「明哲保身」的「智慧」不言自明。但是這是正確的嗎?

當我們看到有人被壓迫,被不公正的欺壓,而我們卻不聞不問,明哲保身,焉知下一次我們將不會成為「河伯的祭禮」?
這和道德無關,沒有人應該因為言論或意見而被處罰。

或許,這是東方文化「敬畏權勢」和「奴性深重」的原點吧?
每個人都希望能夠自由自在的過日子,但是要是連話都不能說,那我們所擁有的除了「虛假」以外還能有什麼?


這一段的翻譯有很多,以上是自英文的直譯翻過來的。
以下是德文原文

Als die Nazis die Kommunisten holten,
habe ich geschwiegen;
ich war ja kein Kommunist.

Als sie die Sozialdemokraten einsperrten,
habe ich geschwiegen;
ich war ja kein Sozialdemokrat.

Als sie die Gewerkschafter holten,
habe ich nicht protestiert;
ich war ja kein Gewerkschafter.

Als sie mich holten,
gab es keinen mehr, der protestieren konnte.

這是英文直譯:
When the Nazis came for the communists,
I remained silent;
I was not a communist.

When they locked up the social democrats,
I did not speak out;
I was not a social democrat.

When they came for the trade unionists,
I did not speak out;
I was not a trade unionist.

When they came for me,
there was no one left to speak out.

Monday, April 23, 2007

肉眼不可見的幸福


HDR (High Dynamic Range)能夠將肉眼所無法辨識的光差都協調在一起,溫哥華的落日因此而得到另一種詮釋,能夠拍到美麗的落日是一種喜悅,如今又多了一種「不可見的幸福」。

『愛』是。。。

 

 
Le Printemps (The spring) by Pierre Auguste Cot
 
公園中一隻靜靜的看著你的松鼠,讓你不由自己的想將手中的爆米花分一些給他。
睡房裡一滴小孩臉頰上的眼淚,讓你不由自己的希望自己能有無上的力量,能雙手一揮而讓這個小孩永久沒有痛苦。
雖然不多,時間也不長,更可能也做不到,但在那一剎那,當事人確確實實的感到愛。

可是
公園中的人雖多,不是每個人都對松鼠有一樣的反應,
世界上的人不少,未必的每個人都對淚珠有一樣的感覺,
小孩的雙親和其他人的感覺更是不同。

每個人對事物的反應都不同,某些人比較能夠付出「愛」,而某些人則否,
或許這有生理上或心理上的解釋,但是「因人,因時,因對象而異」則是肯定的。

It's Jazz! 創新的代價


The Colors of Jazz by TONY SCOTT
It's Jazz!

大約是十八九歲的時候,每個週末最大的消遣就是到統一飯店的Lounge去聽Piano Jazz,還記得那位菲律賓的鋼琴手名字叫Manny,我最經常點的一條曲子是「My fair lady」中的「I could have dance all night」。
許多人可能認為在飯店的Lounge約會一定所費不斐,事實上正好相反,在當時,除了飯店的住客外Lounge根本沒有什麼外來的客人,因此消費都非常合理,以招徠客人。
既使當時的飯店之尊─圓山飯店,其咖啡廳一杯咖啡的消費也不過三十元而已,比起當時金咖啡的咖啡要五十元幾乎只是半價,而且圓山用的茶具還是銀器和英國骨瓷。

我有一位朋友S也喜歡Jazz,由於在菲律賓住過,S特別喜歡Philipino Jazz。
由於內人身體不適,因此只有S夫婦和大獸及我四人去新發現的Cellar Jazz club一探究竟。
CJC就在我家附近,但是我從來沒有注意到,之所以發現這一家還是因為另一位朋友的女兒介紹才得以知道咫尺之處就有這麼一家Jazz Club。

CJC的裝潢雖然簡單但是微暗中閃爍的燭光,牆上諸Jazz名家的海報和CD輕柔的音樂都讓人溶在一種輕鬆蘇緩的感覺之中。
S左右張望了一番,甚決滿意的坐了下來,點了一杯紅酒,而我則點了名為「Slow Swing」的咖啡,大獸點了咖啡『The Jazz』,S嫂點了Carret cake,和一盤Cheese,幾個人打算享受一下輕鬆的晚上。

不久樂師們陸陸續續的走上場,一個名為『Field』的Band,一支SAX,一位鼓手,『ㄡ,居然還有一位小提琴手,這個不尋常』S說道。
是的,非常不平常,但是在當時我們還不知道有多不平常。

以下的半個小時,客氣的說來我只能以『折磨』兩字來形容。
那是一場沒有主題,三種樂器彼此放大音量相互叫囂,逞其樂器之所能發出各種人耳無法忍受的噪音的交雜。
沒有合弦,沒有主題,沒有伴奏,有的只是肆意的表現。

我們以不可思議的眼光尋求對方的意見,這是一場玩笑嗎?還是音樂家的惡作劇?我們走錯地方了嗎?這裡是地球嗎?
每一個演奏者分明是非常的盡力在演奏,至少他們非常的陶醉在自己的『音樂』中,小提琴的琴弓以我從未看過的角度和手法滑過琴弦的每一個角落,偶而用手指拉彈,偶而用琴弓敲打。
很明顯的,演奏者試圖以不尋常的方法來表現音樂,但是為什麼結果好像是啞了喉嚨的貓在廣播系統前叫春?

三十分鐘的轟炸之後,他們的表演結束了,此時喇叭中傳來的「Feeling of Love」美的有如天韻下凡。
不久另一個Band上台,鼓手還帶了自己的cymbal(鼓手的金屬圓盤,我不知道中文叫什麼),一支吉他,一支Double Bass還有一支Baritone。
幾位演奏者的年齡比前一組略大,大概都在三十五以上,手上拿著的樂譜也比前一組厚上一倍(是的,前一組也有樂譜,雖然我看不出任何地方需要樂譜),我們心懷盼望,或許這一組會很不同,結果沒有讓我們失望,非常不同,假如第一組是「尖叫」,這一組就是「砲轟」,聲量之大,節奏之猛只有過之而無不及,唯一比較好的部分是這一組有著主題旋律,雖略嫌單調,但是畢竟有固定的主題。
演奏完有人叫好,我們四人就在第二曲結束的掌聲中迅速脫離現場。

到了外面,感到冬夜的一片寂靜,突然覺得異常的舒服。
朋友笑著對我說「我一直以為我們是朋友,沒想到你必須如此的摧殘我才高興!」四人都笑的直不了身。

回到家中,我問大獸,「你也拉小提琴,你也喜歡Jazz,告訴我,你認為他們(演奏者)聽過別人的Jazz沒有?」,「看來那麼喜歡音樂,肯定有。」。
「你認為那幾個人懂不懂什麼是Jazz?」大獸想了想「他們懂。」肯定的點了點頭。
「那,他們會不會演奏?」「不但會,而且小提琴和吉他的兩人技術都非常好,至少絕對比一般人來的好很多。」
「那為什麼我們聽的那麼難過?」「It simply not our type (因為我們無法接受)。」
「你認為有人能接受嗎?」「有吧?」大獸聳聳肩「現場不是還有人拍手叫好嗎?」

或許吧?當然拍手的理由有很多,或許是他們的親友,或許是諷刺的鼓掌,或許我們不夠醉(大獸言),更或許…我單純的不瞭解他們的感受而已。
藝術家必然有追求自我表現的熱情,但是並不是所有的自我表現都能為他人所接受,或許所謂「偉大的藝術家」不過是正好他們的喜好較能滿足大眾而已。但是不論偉大與否,他們應該都已經滿足了自我的追求吧?
我突然深深的感覺到,想要走出前人未曾走的路有多麼的不容易。

洗過澡,正我將這一段經歷寫入我的日記時,大獸的房中流出串串Jazz的音符。「Dad,要不要聽聽我的Jazz collection?」
「Sure。」我起身,走進大獸的房間,至少,目前我還能瞭解我兒子的喜好,也希望我永遠能瞭解。

Sunday, April 22, 2007

反論「福慧雙修」

by 月夜天翔

若一個人的「福」必須藉助於他人或社會的評價則會陷入「道德」「流行」「接受」的困境,而遠離心安喜樂


假如用Google搜查「福慧雙修」的話,你會看到許多佛教界的人都相信此說,但是我認為這個說法根本上有問題……


原文

>>“在遠離城市的深山裡,有師兄弟二人在修行。師兄只管修福,不求智慧,所以一直到年老死了,還是愚昧痴鈍,對於佛法了生脫死的真理,一竅不通。”

>>“師弟認為般若的妙智慧,才能指引眾生度過生死的苦海。智慧如人眼睛,沒有眼睛的人,行路一定有墬坑落塹,喪失慧命的危險。他因此疏忽福德,一心一意精勤修慧,結果證得了阿羅漢果位。”

>>“師兄逝世後數年,師弟進城去教化眾生。由於他只修慧不修福,與市民沒有緣份,時常挨餓,得不到供養。他就來到皇宮想責問國王,忽然看到國王所騎坐的大白象,身披瓔珞珠寶,叮噹作響。”

>>“師弟入定觀察,發現這隻無知的大白象,就是前世修福不修慧的師兄啊!他恍然大悟地感嘆道:

>>【修福不修慧,大象披瓔珞;修慧不修福,羅漢應供薄。】”

「大象披瓔珞」是福氣嗎?
對大象來說「瓔珞」是無用之物,更是累贅,被豢養在宮中想來也不得自由(當然高不高興只有大象自己知道),大象的福份何在?

假設「羅漢空托缽」是可以接受的比喻,那羅漢是有智慧的但是沒有福份(無緣可化),這個比喻對於「修慧不修福」合用,但是「大象披瓔珞」的比喻就有點不合了。。
要是說有一個白痴被照顧的好好的,每天高高興興的,那「修福不修慧」的敘述大概就合適了,但是如此一來,修慧何用?:)

感覺上這個比喻滿世俗的,因為提出這個「喻」的人很明顯的把瓔珞加身當作福氣,但這是物慾而不是福吧?
「瓔珞」也對應於「名利」,「他人的景仰,羨慕」,但是這真的是福氣嗎?
從這一點再繼續深究下去的話馬上就會出現「福」的定義問題。究竟什麼是福澤?

一個人子孫滿堂,旁人都會說「你好福氣啊」,但是這是「他人的羨慕」,這是福氣嗎?難道小孩成群沒有其相對的痛苦嗎?那這是「福澤」嗎?。
一個人升官發財,往往會覺得高興,但是這是「物慾」還是「福澤」?官位越大,錢財越多「物慾」就越強,這是福澤嗎?
一個人所乘的飛機失事,除了他以外自己的親人通通死亡,這是「福澤」嗎?

我個人認為,都是,也都不是。
子女成群有其幸福也有其痛苦,懂得去體會之中的幸福之人才是有福澤的人。
升官發財,懂得去享受但卻不執於享受的才是有福澤的人。
僥倖免於死亡,雖然難過,但是懂得重新拾回人生,不讓痛苦吞沒自己才是有福澤的人。

因此,
子女成群不是「福澤」,懂得體會其中好處的才是「福澤」。
升官發財不是「福澤」,懂得不執於「物慾」的才是「福澤」。
免於死難不是「福澤」,懂得接受痛苦,繼續人生的才是福澤。
若這些說法為真,則「羅漢空托缽」也沒有「不修福」的問題了,因為要是羅漢「慧」夠的話,他自然不會介意缽中是否無一物。

有別於「漸悟」,禪宗講求「頓悟」,一個人可能思考一個問題一年,但是「覺悟」卻只是一剎那,而在沒有覺悟之前無論他思考的如何辛苦他仍然是懷疑猶豫而沒有覺悟。

「羅漢」要是無法瞭解缽中「無一物」和「有物」都沒有差別(一休大師往往幫人打工以換取食物)而都是緣法,為此而心有所動的話那就沒有「慧」的存在。因此這個「羅漢」是「修慧未成」而不是「修慧不修福」。
也就是說「慧」的獲得(頓悟)方才是「福」的開始。
而「福澤」應該可以解釋為「心安喜樂的心境」。
因此,「福」必須是「自主」的,不能依賴外在的力量,因為若一個人的「福」必須藉助於他人或社會的評價則會陷入「道德」「流行」「接受」的困境,而遠離心安喜樂。

Friday, April 20, 2007

反論「以色列教育孩子的方式」

by 月夜天翔

: 原文連結 :

一位朋友為這篇文章非常感動,我也發現此篇文章在網路上傳播甚廣,但是以下幾點內容非常可疑。
在特拉維夫的大街上,我壓根不知道怎樣才能生存下去。
我從上海帶去的積蓄只能維持3個月的生活開支,我必須找到賺錢的辦法,還要早日把孩子接到我身邊。我苦攻希伯萊語,學最基本的生活語言,然後,我在路邊擺了個投資最小的小攤賣春捲。


首先,她在以色列賣春捲給以色列人吃,但是以色列人對於吃的忌諱非常多,有關豬的不吃,有殼無鱗的海產也不吃,有些比較傳統的猶太人甚至連羊肉都必須是經過宗教屠宰儀式才肯吃(因此若有選擇,猶太人只會從猶太人的屠夫處買羊肉。)。
我很難想像在一個吃的忌諱如此多的國度裡面賣群眾不熟悉的食物能夠在一年內賣春捲賺到足夠的前將三個小孩接過去。

首先,我們家確立了有償生活機制,家裏的任何東西都不再無償使用,包括我這個母親提供的餐食和服務。在家吃一頓飯,需要支付給我100雅戈洛的成本費用,洗一次衣服需要支付50雅戈洛……在收取費用的同時,我給予他們賺錢的機會,我以每個春捲30雅戈洛的價錢批發給他們,他們帶到學校後,可以自行加價出售,利潤部分可自由支配。


其次,在學校裡面賣食物?首先,學校是不大可能准許外來的食物在校園內販賣,我和大獸(兒子)談起了這個故事,大獸的直接反應是「不可能」,我好笑的問他為什麼如此武斷,他的回答是「因為校長本身必須為學生的安全負責,因此不可能任意讓他人來販賣食物。」
原來大獸曾經和朋友在學校外面賣波霸奶茶,雖然是在校長的職權範圍之外,但是校長還是「建議」大獸和他的朋友停止他們的小小營業。

現在仔細回想起來,假如以色列人是如此的精打細算,有可能讓一個外來人私自在學校裡面販賣食物嗎?
且況,要賺錢的話學校不會自己賣嗎?這還是(依作者的說法,精打細算的猶太人)開的學校呢。


以上是直接和猶太人有關的部分,其他至於和自己的小孩算帳,我真的很難想像,要是親子關係不好的話豈不是火上添油?而問題是,經常處在同一個屋簷下,難免有磨差,這種作法基本上是認為小孩的價值觀一定會和自己一致才敢這個作法,很不幸的,一如沒有兩個人是一樣的,小孩也永遠會發展出自己的價值觀。
孩子,我相當一個富豪的媽媽…

期望,慾念充乎其間,那要是小孩天生有障礙,或運氣不好,那時候家庭會幸福嗎?

最後,這個故事中的主角是在1993年五月將小孩接過去的,而拉賓是在拉賓是1995年11月4日被刺身死,也就是說她和他的小孩不但在短短的兩年內(那還要拉賓見過他之後馬上被刺),從幾乎一無所有到能賺到足夠開餐廳的錢,而且生意好到能讓當時的總理拉賓注意到。
不是說不可能,但是也未免太神奇了一點。

不是我多疑,而是網路的好處就是資訊多,但是壞處是假資訊更多,因此我養成了處處懷疑的個性,當然有可能都是我自己的瞎疑心,若有謬誤還請多多包涵。

: 原文連結 :

後記:
以色列 2006 年五月 平均月薪是 7,333 Shekels.
依照原文的說法「我的春捲小攤,每天能賺到十來個謝克爾」既使是30 shekels也不過是30*30=900,算1000shekels 好了,在任何國家要以當地平均薪水的1/7(調整後)來養活一家四口恐怕是非常非常之困難,加上語言不通,我很難相信這是真的故事。

參考資料:
Israel Studies: One Solution to Classroom Bias http://www.jewishbroadcasting.tv/wjd/september05/freedman.html
Israel Economy http://en.wikipedia.org/wiki/Israel#Economy

pain 痛苦


"Breaking Boundaries" by Bitten Foster


「人生難免痛苦,但是比痛苦更傷人的是對於痛苦的恐懼。」

"The fear of pain is worse then pain itself."

Peek-A-Boo Modified: Add 'Summary only' at top

Peek-A-Boo is great! but I decide to add a extra 'summary only' link at top of the full post.

There is 2 thing I will have to do.
1. backup your template. ( always, always... trust me , I know..)
2. Adding a 'top link' into html.
Add the part in highlight into html (remeber to click 'Expand widget template'):
<blockquote class='code'><em><span id='hidelink2' style='display:none'>
<p><a expr:onclick='"javascript:hideFull(\"post-" + data:post.id + "\");"' href='javascript:void(0);'>Summary only (只顯示摘要)...</a></p>
</span>

<style>#fullpost {display:none;}</style>
<p><data:post.body/></p>
<span id='showlink'>
<p><a expr:onclick='"javascript:showFull(\"post-" + data:post.id + "\");"' href='javascript:void(0);'>Read More (全文);...</a></p>
</span>
<span id='hidelink' style='display:none'>
<p><a expr:onclick='"javascript:hideFull(\"post-" + data:post.id + "\");"' href='javascript:void(0);'>Summary only...</a></p>
</span>


2. Let javascript to turn it on or off depends on current stats.
Add the part in highlite into 'hackosphere.js'


function showFull(id) {
var post = document.getElementById(id);
var spans = post.getElementsByTagName('span');
for (var i = 0; i < spans.length; i++) {
if (spans[i].id == "fullpost")
spans[i].style.display = 'inline';
if (spans[i].id == "showlink")
spans[i].style.display = 'none';
if (spans[i].id == "hidelink")
spans[i].style.display = 'inline';
if (spans[i].id == "hidelink2")
spans[i].style.display = 'inline';

}
}




function hideFull(id) {
var post = document.getElementById(id);
var spans = post.getElementsByTagName('span');
for (var i = 0; i < spans.length; i++) {
if (spans[i].id == "fullpost")
spans[i].style.display = 'none';
if (spans[i].id == "showlink")
spans[i].style.display = 'inline';
if (spans[i].id == "hidelink")
spans[i].style.display = 'none';
if (spans[i].id == "hidelink2")
spans[i].style.display = 'none';

}
post.scrollIntoView(true);
}


Thursday, April 19, 2007

AJAX Label - Tuned 加強版

AJAX Label from Deepak 非常適用於帖數多的部落格。
由於AJAX Labels每次只抓取和標籤有關的帖子,因此就算帖數再多也不會造成下載拖牛車的情形。
我為一不滿的部分是AJAX Lables所顯示出來的資料中,相關標籤無法被click。
經過一番研究後,我將之改成所有傳回的相關標籤都可以被連結到新的標籤搜尋。

The AJAX Label from Deepak is great!
Especially if you have a couple hundreds of posts in your blog.
Since it only retrieve the label you chose from Blogger, it is capable to deal with large blogs.
But the label list in the result entry is not click able.
I took the liberty to add this feature into original code.

The file is ajaxlabels.js

find the line
catdisplay.innerHTML+=xentry.category[j].term;

and change it into
catdisplay.innerHTML+='<a href="javascript:getCat(\'' + xentry.category[j].term + '\')" >'+xentry.category[j].term+'</a>';

Wednesday, April 18, 2007

Quiet corner in a silver world

0107

Sometime quietness is ultimate beauty
有時無聲就是美

Preview web page in different screen size ─ 檢視解像度

type or copy-paste this into the address bar: javascript:top.resizeTo(800,600). You will see what others with small screen see.

javascript:top.resizeTo(800,600)
javascript:top.resizeTo(1024,768)
javascript:top.resizeTo(1280,1024)

Origin:
Blogger Tips and Tricks

抽象主義的催生者 - 康丁斯基 Wassily Kandinsky (節錄)


本篇文章節錄自 阿特拉斯部落格 謝謝 sinner

「直角」表現一種冷靜、抑制的情感,「銳角」表現出一種尖銳的、運動感的特性,「鈍角」則是一種軟弱的無力感
- Wassily Kandinsky (1866 – December 13, 1944)



我們知道,畢卡索是立體主義的繪畫大師,在立體主義之後,抽象幾何的藝術風格,變成了二十世紀重要的表現形式,康丁斯基(Kandinsky,1866 - 1944)便是抽象主義的催生者,他也是多才多藝的畫家、教育家。 康丁斯基的抽象畫以直角、銳角、鈍角、直線、曲線、圓圈等等元素所構成,我非常喜歡康丁斯基對於幾何元素的詮釋,好比他談到:「直角」表現一種冷靜、抑制的情感,「銳角」表現出一種尖銳的、運動感的特性,「鈍角」則是一種軟弱的無力感。例如在《On Points》(1928), 康丁斯基讓各種「角」在畫面裡堆疊、彼此衝擊,以尋求一種創新的造型呈現。



這幅抽象畫,中央的眾多三角形,由上而下聚焦在由三條平行直線所構成的長方體上。而同時這股力量又由與之相反的三角形分散出去,形成兩股力量間的相互對峙,從而產生畫面的張力——換句話說,簡單的幾何構圖,也能給予我們許多的想像。這裡可以觀察到「抽象」,便是抽離形象中具象的成分,提煉出純粹的色彩與線條,使那不再能辨認的事物,轉化為繪畫的純粹元素。抽象主義畫家們,通過線、塊面、形狀、色彩與拼貼,來傳達各種情緒,激發人們的詮釋,碰撞出更多想法。讓我們先思考一下,當代數位藝術的某些內涵,是不是跟抽象主義的精神很類似?



緊接著,我們來欣賞康丁斯基的《Several Circles》(1926)。對於這幅畫,康丁斯基的詮釋就更精采了,他曾經這樣談《幾個圓圈》:「為什麼圓圈讓我動心?因為:1——它是最謙虛的形狀,但卻我行我素地自成一體;2 ——它很明確,但又可作無窮的變化;3——它同時是既穩定又不穩定的;4——它同時是既順服又倔強;5——它是帶給自己無數張力的張力。」康丁斯基繼續說,圓圈是巨大對抗的結合,它把離心力與向心力結合在一種形狀,一種平衡之中。在幾種基本形狀裡,圓形是第四空間最明顯的標誌。從這裡可以看出,康丁斯基有著豐富的思想,他常常把形象、幾何與色彩,甚至是音樂等等,詮釋得很透徹。

Searchable Blogger Labels 標籤搜尋




The problem with Blogger's label is after intensive usage it tends to grow to a size which is impossible to manage.

This Label Search function is an extension of Beautiful Beta's TOC widgets.
It will allow you to quick search any label you have.
Best of all is, this is case-sensitive partial search, so you can use 'Eng' or 'glis' it will all find 'English' for you.
Now all we need is an 'and' 'or' 'not' operand to this search..

ps. this opens a possibility of using my.favorite.photo as tag.
Since if you type in 'photo' the list will all the files containes
my.favorite.photo
2005.trip.photo
flower.photo.collected
it is much easy to chose from.
and if you are good , just type 'te.phot' you get 'my.favorite.photo'

Blogger標籤(labels) 最大的問題是經過大量的使用之後,標籤的數量變得龐大而且難以管理。
一如Google的作法,我擴充了Beautiful Beta的目錄原件(TOC Widget)增加了『標籤檢索』功能。
更重要的是,這個檢索是「部分檢索」因此鍵入「Chi」或「nes」都會讓你找到「Chinese」。
現在我們所需要的只是「或」「和」「非」等邏輯運算而已。

附註: 「部分檢索」提供了使用新標籤可能性。我們可以用 「my.favorite.photo」當標籤。
因為你只要鍵入「photo」就能找到以下的標籤
my.favorite.photo
2005.trip.photo
flower.photo.collected
標籤變得非常容易使用。
假如你真的要快的話,可以鍵入 「te.phot」 你就會找到 'my.favorite.photo'而不是其他的標籤。

<form action="#" name="label_search">
<input onkeyup=" javascript:filterPosts(document.label_search.target.value)"
name="target" type="TEXT"/>
</form>

文化侵略?

喜歡,吸收且接受外國的文化就是被「征服」嗎?


這個字眼滿值得懷疑的,為什麼文化會和侵略扯上關係呢?
喜歡,吸收且接受外國的文化就是被「征服」嗎?
那麼我們的一天為什麼是24小時,一個月為什麼有30,31,28天之別呢?
我麼的算術,數學為什麼用阿拉伯數字呢(雖然是印度人發明的)。
金庸的小說裡面有許多部分是來自大仲馬氏的「基督山恩仇記」和捷克倫敦的「海狼」那是否他也是「被征服者」呢?
電腦是西方人發明的,那是否表示我也被征服了嗎?
如此的看待外國文化,強行的分出「他們的」,「我們的」會不會心胸太過狹窄呢?
「侵略」的意義為「被侵略」的一方是非出於自願的(為武力所脅迫,為毒品所迷亂)且物理上的無法抗拒。
「文化」通常會融入我們得生活中讓我們變得更美好,我真的看不出有「侵略」的疑慮存在。

捍衛本國的文化?發揚固有思想?
太極劍的精髓是「忘掉原本的劍招」,心中存了「他」「我」之別,思路就會有問題的。
我個人覺得過度熱衷於「本國文化」和盲目的崇尚「異國風情」都有著一樣的危險。
最好的方法正如開放社會中的女子服裝款式一般,今天西方羅馬,明天東方神秘,週而復始,進而互相影響,改進。

附帶說一下「雜交」在某些社會中是很平常的,文明古國中的希臘講究肉體美,崇尚肉體的快感,我並不覺得和中國的守貞操的觀念比較起來有何低下之處。
各有各光明和其黑暗的一面,兩個國家中都一樣的有因為「愛」和「性」而發生的悲喜劇。
瑞典有「社會認養」制度(我記得瑞典人同「姓」的人非常多,因為父親往往不知是誰)
想對這些國家原封不動的將儒家的「貞操」觀念慣輸給他們,其困難度就好像要中國「性開放」一樣的不可思議。
個人覺得應該做的是「瞭解自己,塑造自己的喜好,讓自己變得更好」後,將自己的心得和他人交換,不要為「本位主義」所惑,如此一來,外來文化和本土文化融合慢慢的自然會產生新的,屬於我們自己新的文化。

Tuesday, April 17, 2007

什麼是「愛」?



Endless Love by Alfred Gockel
「愛」可以和「犧牲」「奉獻」連用,也可以和「佔有」「嫉妒」在一起。
「愛」可以是提升人至神性的地步,人類行為的至高點,但是也可以「因愛生恨」而讓人變成怪物。

………

任何一個現象會擁有如此多相互衝突的定義通常只有一個可能性,以上這些「愛」的定義所說的並不是單純的愛,而是摻雜者其他的感情。


從來沒有一個名詞的含意是如此的複雜而又相互衝突的,

「愛」可以是「付出」也可以是「佔有」。
「愛」可以是「剎那」而維持「永恆」。
「愛」可以存在於人神之間,男女之間,親子之間,人和物之間。
「愛」可以是美好的喜劇,但是也可以是悲劇。
「愛」可以和「犧牲」「奉獻」連用,也可以和「佔有」「嫉妒」在一起。
「愛」可以是提升人至神性的地步,人類行為的至高點,但是也可以「因愛生恨」而讓人變成怪物。

為什麼?

任何一個現象會擁有如此多相互衝突的定義通常只有一個可能性,以上這些「愛」的定義所說的並不是單純的愛,而是摻雜者其他的感情。
讓我們假設「愛」是美好的,那或許我們可以將事情單純化。
親情之愛的最高點是父母願意為小孩付出生命。
男女之愛的最高點是「同生共死,不忍獨活」。
陌生人之間愛的最高點是「捨己救人」。
人對事物之愛的最高點是「鞠躬盡瘁,死而後已」「衣帶漸寬終不悔」。
人神之愛的最高點是「託付未來」。

整理之後我們得到「付出」。
當我們願意為之「付出」時,是「愛」的最高點。
讓我們假設「愛」就是「付出」,但是是什麼樣的付出呢?
連生命都可以付出時,大概已經無所謂「報償」了,大多數的父母為拯救小孩而可能一死時,既使沒有希望也不會放棄,寧可犧牲也要試,因此這個行為和後果也沒有關係。
因此假如以上的論點是正確的,那麼「愛」是「無條件,不計結果的付出」。

那,一般所說的「愛」除了「付出」以外還有什麼摻雜著呢?
「愛」可以是「付出」也可以是「佔有」。既然我們假設「愛」是付出,那「佔有」又是怎麼一回事呢?
「佔有」是「慾望」,而慾望也是人類感情之一,那有沒有可能當我們談到「愛」時,事實上我們把「愛」和「慾」夾雜在一起呢?

「慾」非常強烈的感情,是生物賴以生存的驅動力(食慾,性慾,求生慾),當不得滿足時,不安,傷心,嫉妒,憤怒,有時甚或死亡(包括自殺)。

男女戀情一旦破滅時這些反應幾乎無一可免,這是因為「慾念」的不得滿足。
親子關係一旦子女讓父母失望時,這些反應也是必然的,這是因為「期望」的不得滿足,而「期望」是美化過的「慾念」。

因此,我們可以猜測,一般論的「愛」通常是「愛與慾」的混合體。
而「愛」是付出,而「慾」是佔有。

而所謂的愛情,基本上是「慾」的化身,但是到了某個時點,有一方(或雙方)願意無條件的為對方付出一切,不論時間的長短,這時這兩個人之間才有了真正的「愛」。
基於陌生人之間的關係都是封閉而自我保護的,因此當兩個人對彼此發生興趣(或性趣)時通常會願意彼此配合,在某個程度上這也是一種付出,雖然不是無條件的,但是卻和「愛」有著其共同性。
若順利發展出無條件的「愛」的話,就被認為「一見鍾情」,否則只是「一場遊戲,一場夢」而已。

最後,「愛」重不重要呢?如何得到「愛」呢?

先說「如何得到愛」,「愛」是無法強求的,飄然而至,渺然而逝,但是先決條件是「不對對方有所求」。
由於「愛」的本質是「付出」,一旦「慾望」主宰了兩者之間的關係,「愛」就必然難以落腳。

至於「愛」重不重要呢?

不但重要,而且是人類唯一的救襩。
請不要誤會,這和宗教無關,我有純邏輯上的理由,只是我找不出更好的形容詞,以下是理由:

沒有人生是完美的。
假如以一盛水的玻璃杯杯水來代表人生,而以水滿的程度來代表完美度。
因此,沒有任何一杯人生的玻璃杯是滿的(沒有完美的人生)。
有的人專注於滿的部分(半杯滿),有的人專注於空的部分(半杯空)。
人類由此被分為兩類,幸(滿意於我所擁有)與不幸(不滿意於我所沒有)。

但是,人生的水杯總有空的一天(疾病,痛苦,死亡)。

既始是最有想像力的人也無法從一杯完全空的水杯中找到水(滿意)。
因此唯一的希望是能夠將他人的杯子(人生)當成自身的延續。
雖然自己的杯子空了,但是還有其他的杯子。

因此你可以瞭解,光是在意自身的人到了那一天,他無處可逃。
而越是願意為他人付出的人,越能以他人的樂而樂,以他人的悲而悲,而到最後,他們對於自身的不幸比較有抵抗力。
而「付出」就是「愛」的表現,因此「愛是人最後的救襩」

夜間飛行



Night Flight by Michael Parkes

我喜歡幻想,
尤其是在星光燦爛的夜裡,
白天不會出現的怪物們在晚上的冥思中都會跑出來。

有些是有著多個面孔,深不可測的怪物,名為「真相」,
有些穿著著亮晶晶的鋼鐵外殼,但是確有著稻草的心,叫做「詭論」,
有些更是穿越時空,只活在心靈深處,偶而出遊的,稱為「靈感」,

他們通常稍縱即逝,恍若天際的星雨,
但是偶而他們也會駐足,要求玩躲躲貓。

有人說「人生是收集回憶的旅行」,
而「旅行是對於新經驗的探索」,

就這樣的一次又一次,
我在月夜中遨翔,不停的回憶,不斷的探索。

必須說中文的加拿大人

我不認為『多會一種語言就是多一分機會』,因為往往「Jack of many trade, master of none」,分心多樣,到頭來也有可能一事無成。

……

「中國人的小孩要懂中文」那中國人的小孩要不要懂文言文呢?要不要學書法呢?要不要學二胡呢?那到頭來「加拿大的小孩」有沒有空學英文,讀英國古典文學,練小提琴呢?
假如文言文,書法和二胡是非必要的,那標準在哪裡呢?


一如大多住在異國的中國父母,我也曾面對過傳承的問題,最簡單的一個就是『小孩的中文』。
也一如多數的僑居在外的父母親,每個星期六我將大獸送到中文學校去讀中文。這麼簡單的事情能有多難決定?
畢竟語文就像工具一樣,總是越多越好不是嗎?多學會一種語言就如同出門多帶一把雨傘,當必要的時候會大有幫助的不是嗎?

乍看之下這是理所當然的道理,但是卻有著潛在的問題。
要是一直都不下雨,那每天帶著一把雨傘真的不能說是很聰明的決定。
畢竟多帶一份工具就是多一份負擔,而有些旅程是負擔越少越好,出們東西帶了一堆行李的人往往都不善於旅行。
人生也是如此。

因此,我不認為『多會一種語言就是多一分機會』,因為往往「Jack of many trade, master of none」,分心多樣,到頭來也有可能一事無成。

其次,「傳承」,有的人會認為「中國人當然要懂中文」,問題是,我的小孩並不是中國人,技術上來說他是加拿大人。我應不應該強迫要求一個加拿大人要懂中文?
「中國人的小孩要懂中文」那中國人的小孩要不要懂文言文呢?要不要學書法呢?要不要學二胡呢?那到頭來「加拿大的小孩」有沒有空學英文,讀英國古典文學,練小提琴呢?

假如文言文,書法和二胡是非必要的,那標準在哪裡呢?

大獸上中文學校沒多久,就不肯做功課了,不只是中文的功課而是所有的功課,因為他的白人同學不用學中文,星期六可以玩。
父母可以勸,可以買他喜歡的東西來當驅動力,但是壓力慢慢的上升,父母也是人,也有心情的高低起落,到頭來難免的衝突經常發生。

我和大獸長談了一陣,我也問了自己許多問題,來加拿大之後我「寫」過的中文字不超過五十個。我的筆記本,幾乎都是英文和日文,為什麼?因威寫起來快。
我和大獸達成協議,字可以不寫,但是說讀和聽要懂,對小孩來說不用寫字大概是最高興的事,大獸很爽快的答應了。

本來這個事情就這樣的可以結束了,但是卻沒有這麼的單純,因為不寫就無法交功課,有些人認為小孩不做功課是壞事,而我沒有興趣討論事情的好與壞,我只問了大獸「上中文學校就必須寫字,你要不要?」
大獸膽怯的搖了搖頭,看著他膽怯的樣子,心中一陣痛,我告訴自己「一個習於父母約束壓力的小孩,長大之後也會習於被他人壓抑,甚或壓抑他人,這絕對比不懂中文來得嚴重。」
「這是你的人生,你要是不願意的話就說吧,自己的事情自己做決定。」,他堅定的表示他不想去,我讓他退出了中文學校。

那是四年前的事情,雖然離開了中文學校但是由於他自發性對對中文有興趣,會話能力還算不錯,去年春天他嘗試自己一個人坐飛機回台北度春假,坐捷運到處逛。
我不知道往後的發展如何,但是大獸能說能聽,當有必要的時候,他也會自行的去學習讀和寫。
與其讓中文變成他的負擔,不如以較少的精力保留了說和聽的能力,至於讀和寫,文言文,書法和二胡,讓他依自身的興趣和需要而自行發展吧。

反論「永保生命的熱誠」

朋友寄來
吳德淳先生的演講內容,此篇是個人對於其內容的若干不同意見:
原文連結

假如『窮人人生過不好』,那請問,擁有多少錢財算脫離「窮」字?十萬,百萬,千萬?百億,千億?是由誰來決定這個數字呢?我相信這個數字只有自己能回答,意即「滿足即為富」,那請問「一個沒有錢的人就沒有資格滿足嗎?」
假如「病患人生過不好」,那請問,殘障病痛的人是否就與「幸福人生」絕緣了呢?



原文:

>>1. 人生要過得好需要三個條件:健康、金錢 與愛。
>>2.一般人有一百的能力,卻只有用十出來, 只要能多用百分之一或百分之二,我們就會變成愛因斯坦。
>>3.成功 = 目標(百分百,且是很明確的) + 方法(無限種)。



一。>> 「人生『要』過得好,『需要』三個條件 健康、金錢與愛 」

這一段敘述中包含了兩個「要」字,「要」代表慾望,一旦慾望不得滿足時大概生活無法過得好的。

假如『窮人人生過不好』,那請問,擁有多少錢財算脫離「窮」字?十萬,百萬,千萬?百億,千億?是由誰來決定這個數字呢?我相信這個數字只有自己能回答,意即「滿足即為富」,那請問「一個沒有錢的人就沒有資格滿足嗎?」
假如「病患人生過不好」,那請問,殘障病痛的人是否就與「幸福人生」絕緣了呢?

請不要忘記,所有的生物都患了一個不治的病「死亡」,我們終將會死,要是我們光恐懼「死亡」而無法享受人生,那再健康,有名利也是枉然,然而病痛之人也一樣,要是能無懼於自身的病痛而去享受親情,友情,愛情等生命中其他的好處,那病痛者仍然無法享受幸福嗎?

到底多少幸福才是「好人生」呢?
「人生」是可以被打分數用來彼此比較的遊戲嗎?人生的幸福,好與不好有標準嗎?

「幸福」是絕對主觀的,在病痛徹骨的病床邊緣也有親友的傾心關懷,在死亡瀰漫的戰區也有戰友的相對扶持,不錯那都是痛苦的地方,但「人生」本來就是如此的一個地方,唯有當事人自身覺得幸福時他才是幸福的,於他擁有多少錢,身體的狀況,社會地位和學識才智無關。

瞭解了以上這一點,我想其他都是多講的了。
但是除此之外的誤導還有許多…

二。 >>『一般人有一百的能力,卻只有用十出來, 只要能多用百分之一或百分之二,我們就會變成愛因斯坦。』

一萬的百分之十是一千,一百萬的百分之十是十萬,而十萬肯定比一千多很多,既使愛因斯坦真的只用了大腦的百分之十一但是卻不表示他的智商和我們相等。

能力要和自己比較,只要我們能比昨天的我進步那就是值得高興的事情,拿自己的能力去和他人甚或愛因斯坦比較那是庸人自擾。

三。>>3.成功 = 目標(百分百,且是很明確的)+ 方法(無限種)。

要是成功是建立在目標之上的話那所有的登山家若不是窮就是白癡了,因為他們可以坐直昇機上去。
一場戀愛令人心醉神迷的是過程,一場球賽令人興奮呼喝的也是過程,要不是過程,這一切人生的活動都會變得淡而無味。

也有人說成功的意義是「對自身的行為感到滿足」,而這一個定義之中沒有「目標」存在,我也很難想像一個憑作弊或賄賂而達到目標的人會覺得滿足,但是要是沒有「滿足」那「成功」有何用?。

原文連結

Table of Content Installed

Thanks to Hans in Beautiful Beta, you are the man Hnas :)

instructions after the jump

Step 1: Back Up your Template.

Step 2: Add a HTML Page Element
Edit your template in HTML-mode, and look for the <b:section> with id=main. This is the section that holds the Blog posts.
Change that line as follows:

<b:section class='main' id='main' maxwidgets='2' showaddelement='yes'>


Save the template and switch to the Page Elements Tab.
Add a HTML page element above your Blog Posts element.
Leave the title blank. Add the following html:

<div id="toc"></div>


Save your template.

Step 3: Add a Sidebar HTML-element
Now add a HTML-element to the sidebar. Set the title to "TOC".
For the contents, enter:


<div id="toclink"><a href="javascript:showToc();">Show TOC</a><br/><br/></div>
<script style="text/javascript" src="http://home.planet.nl/~hansoosting/downloads/blogtoc.js"></script>
<script src="http://YOURBLOG.blogspot.com/feeds/posts/default?alt=json-in-script&max-results=999&callback=loadtoc"></script>


Replace YOURBLOG with the name of ...... exactly.
Oh yes, and save.

Step 4: Add custom styles to the skin of your template.
New id's and classes are:
#toc : the div-wrapper that contains the TOC
.toc-header-col1 : header of column 1
.toc-header-col2 : header of column 2
.toc-header-col3 : header of column 3
.toc-entry-col1 : cell in column 1
.toc-entry-col2 : cell in column 2
.toc-entry-col3 : cell in column 3

For your convenience: Beautiful Beta uses the following styling:

<style type="text/css">
#toc {
border: 0px solid #000000;
background: #ffffff;
padding: 5px;
width:500px;
margin-top:10px;
}
.toc-header-col1, .toc-header-col2, .toc-header-col3 {
background: #ffd595;
color: #000000;
padding-left: 5px;
width:250px;
}
.toc-header-col2 {
width:75px;
}
.toc-header-col3 {
width:125px;
}
.toc-header-col1 a:link, .toc-header-col1 a:visited, .toc-header-col2 a:link, .toc-header-col2 a:visited, .toc-header-col3 a:link, .toc-header-col3 a:visited {
font-size:80%;
text-decoration:none;
}
.toc-header-col1 a:hover, .toc-header-col2 a:hover, .toc-header-col3 a:hover {
font-size:80%;
text-decoration:underline;
}

.toc-entry-col1, .toc-entry-col2, .toc-entry-col3 {
padding-left: 5px;
font-size:70%;
}
</style>


You can add this to the <b:skin>-part of the template, or insert it in the sidebar widget.

If you have more than 100 posts, you have to duplicate the JSON-script-call that is in your sidebar several times, each time with a different start-index. If you have more than 100 posts, you need 2 calls like this:
<script src="http://YOURBLOG.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=100&callback=loadtoc"></script>
<script src="http://YOURBLOG.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=101&max-results=100&callback=loadtoc"></script>

Monday, April 16, 2007

PullQuote (格言引用)installed

這是『格言引用』模組
thiis is a pull quote example

<blockquote class="pullquote" >this is a pullquote</blockquote> :
this is a pullquote


<b><blockquote class="goodquote" >this is a goodquote</blockquote></b>:
this is a goodquote


<blockquote class="goodquote" >this is a goodquote</blockquote>
this is a goodquote


Since I disable float attribute, the text will be inlined.
<blockquote class="code" >this is a code segment</blockquote>
this is a code segment




To install a Pullquotes in Blogger

add following code in data definition area

<Variable name="pullquoteBgColor" description="PullQuote Bg Color"
type="color" default="#333" value="#333333">
<Variable name="pullquoteTextColor" description="PullQuote Text Color"
type="color" default="#333" value="#ffff66">
<Variable name="pullquoteBoarderColor" description="PullQuote Boarder Color"
type="color" default="#333" value="#333333">


then insert this code segment:
.pullquote {
width: 15%;
background-color:$pullquoteBgColor;
/* background-image: url(http://home.planet.nl/~hansoosting/images/quotes_grey.gif); */
background-image: url(http://fontalis.com/images/quotes_grey_small.gif);
background-repeat: no-repeat;
color:$pullquoteTextColor;
float: right;
border:1px solid $pullquoteBoarderColor;
font-weight:bold;
line-height:120%;
padding:40px 10px 10px 10px;
margin-top:10px;
margin-left:10px;
}

Thanks to Hans of Beatuful Beta

Calendar Archive Installed

Blogger Calendar Archive
by PurpleMoggy


Installation instructions:

Go to Template -> Edit HTML and add the following between the <head> tags

<script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.0/build/calendar/calendar-min.js"></script>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.0/build/calendar/assets/calendar.css"/>

Now add the following between the <head> tags (beneath what you already added)

<script type="text/javascript">
//<![CDATA[
/*
Created by: PurpleMoggy
http://purplemoggy.blogspot.com
*/

var _yourBlogUrl = "http://purplemoggy.blogspot.com"; //edit this
var _yourBlogTimeZone = "-08:00"; //edit this

_yourBlogTimeZone = encodeURIComponent(_yourBlogTimeZone);

var _dayTitles = new Array("","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","");

YAHOO.namespace("example.calendar");

function cal1Init() {
YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar("cal1","cal1Container");
YAHOO.example.calendar.cal1.addMonthRenderer(1, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(2, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(3, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(4, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(5, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(6, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(7, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(8, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(9, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(10, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(11, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.addMonthRenderer(12, YAHOO.example.calendar.cal1.renderBodyCellRestricted);
YAHOO.example.calendar.cal1.selectEvent.subscribe(mySelectHandler, YAHOO.example.calendar.cal1, true);
YAHOO.example.calendar.cal1.changePageEvent.subscribe(myChangePageHandler, YAHOO.example.calendar.cal1, true);
YAHOO.example.calendar.cal1.renderEvent.subscribe(syncMonthYear);
YAHOO.example.calendar.cal1.render();
myChangePageHandler();
};


var myChangePageHandler = function(type,args,obj) {
var month = YAHOO.example.calendar.cal1.cfg.getProperty("pagedate").getMonth() + 1;
if (month.toString().length == 1) {
month = "0" + month;
}
var year = YAHOO.example.calendar.cal1.cfg.getProperty("pagedate").getFullYear();

document.getElementById("cal1Titles").innerHTML = "";
_dayTitles = new Array("","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","");

checkPostsForMonth(month, year);
};

function checkPostsForMonth(month,year) {
document.getElementById("cal1loadimg").style.display = "block";

var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
var theUrl = _yourBlogUrl +"/feeds/posts/summary?alt=json-in-script&callback=checkPostsCallback&published-min=" + year + "-" + month + "-01T00%3A00%3A00" + _yourBlogTimeZone + "&published-max=" + year + "-" + month + "-31T23%3A59%3A59" + _yourBlogTimeZone + "&max-results=100";
script.setAttribute("src", theUrl);
document.documentElement.firstChild.appendChild(script);
};

function checkPostsCallback(json) {

if (json.feed.entry) {
for(i = 0; i < json.feed.entry.length; i++) {
var month = json.feed.entry[i].published.$t.substr(5,2);
var year = json.feed.entry[i].published.$t.substr(0,4);
var day = json.feed.entry[i].published.$t.substr(8,2);
var date = month + "/" + day + "/" + year;
var href = json.feed.entry[i].link[0].href;
var title = json.feed.entry[i].title.$t;

if (day.substr(0,1) == "0") {
day = day.substr(1);
}

document.getElementById("cal1Titles").innerHTML += "<li><a href='" + href + "'>" + title + "</a>";
_dayTitles[day] += "<li><a href='" + href + "'>" + title + "</a>";

YAHOO.example.calendar.cal1.addRenderer(date, myCustomRenderer);

}
YAHOO.example.calendar.cal1.render();
}

document.getElementById("cal1loadimg").style.display = "none";

};


function showDayTitles(day) {
document.getElementById("cal1Titles").innerHTML = _dayTitles[day];
}


var myCustomRenderer = function(workingDate, cell) {

var day = workingDate.toString().substr(8,2);
if (day.substr(0,1) == "0") {
day = day.substr(1);
}


cell.innerHTML = '<div onmouseover="showDayTitles(' + day + ');"><a href="javascript:void(null);" >' + YAHOO.example.calendar.cal1.buildDayLabel(workingDate) + "</a></div>";
YAHOO.util.Dom.addClass(cell, YAHOO.example.calendar.cal1.Style.CSS_CELL_SELECTABLE);
YAHOO.util.Dom.addClass(cell, YAHOO.example.calendar.cal1.Style.CSS_CELL_HIGHLIGHT1);
return YAHOO.widget.Calendar.STOP_RENDER;


}

var mySelectHandler = function(type,args,obj) {
var dates = args[0];
var date = dates[0];
var year = date[0];
var month = date[1];
if (month.toString().length == 1) {
month = "0" + month;
}
var day = date[2];

var element = YAHOO.util.Dom.getElementsByClassName("d" + day, "td", "cal1Container")[0];

if (day.toString().length == 1) {
day = "0" + day;
}

if (element.className.indexOf("highlight1") != -1) {
window.location = _yourBlogUrl + "/search?updated-min=" + year + "-" + month + "-" + day + "T00%3A00%3A00" + _yourBlogTimeZone + "&updated-max=" + year + "-" + month + "-" + day + "T23%3A59%3A59" + _yourBlogTimeZone;
}

};

var changeDate = function() {
YAHOO.example.calendar.cal1.setMonth(parseInt(YAHOO.util.Dom.get("cal1monthselect").value));
YAHOO.example.calendar.cal1.setYear(parseInt(YAHOO.util.Dom.get("cal1yearselect").value));
YAHOO.example.calendar.cal1.render();
myChangePageHandler();
}

var syncMonthYear = function(type) {
YAHOO.util.Dom.get("cal1monthselect").value = parseInt(YAHOO.example.calendar.cal1.cfg.getProperty("pagedate").getMonth());

var fullYear = parseInt(YAHOO.example.calendar.cal1.cfg.getProperty("pagedate").getFullYear());

var isYearFound = false;
var i = 0;
while(i < document.getElementById("cal1yearselect").options.length && !isYearFound) {
if (document.getElementById("cal1yearselect").options[i].value == fullYear) {
isYearFound = true;
}
i++;
}
if (!isYearFound) {
var option = document.createElement("option");
option.setAttribute("value", fullYear);
var text = document.createTextNode(fullYear);
option.appendChild(text);
document.getElementById("cal1yearselect").appendChild(option);
}

YAHOO.util.Dom.get("cal1yearselect").value = fullYear;
};

YAHOO.util.Event.addListener(window, "load", cal1Init);
YAHOO.util.Event.addListener("cal1dateselect", "click", changeDate);
//]]>
</script>

Finally, go to Template -> Page Elements and add a new HTML/Javascript element with the following

<div id="cal1wrapper">

<div id="cal1select">

<select name="cal1monthselect" id="cal1monthselect">
<option value="0">January</option>
<option value="1">February</option>
<option value="2">March</option>
<option value="3">April</option>
<option value="4">May</option>
<option value="5">June</option>
<option value="6">July</option>
<option value="7">August</option>
<option value="8">September</option>
<option value="9">October</option>
<option value="10">November</option>
<option value="11">December</option>
</select>
<select name="cal1yearselect" id="cal1yearselect">
<option value="1995">1995</option>
<option value="1996">1996</option>
<option value="1997">1997</option>
<option value="1998">1998</option>
<option value="1999">1999</option>
<option value="2000">2000</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
</select>
<input type="button" value="-->" id="cal1dateselect"/>

</div>

<div id="cal1Container"></div>
<div style="clear:both;"></div>

<div id="calbackloadimg">
<pre id="cal1loadimg" style="display:none;"><img src="http://img239.imageshack.us/img239/9057/40lf8.gif" style="vertical-align:middle;"/> Loading...</pre>
<pre id="cal1Titles"></pre>
</div>

</div>

Required Modifications
In the 2nd code-box above, you'll need to edit the following 2 variables

_yourBlogUrl needs to be changed to your blog URL (don't add the trailing slash)
http://purplemoggy.blogspot.com <-- CORRECT
http://purplemoggy.blogspot.com/ <-- WRONG

_yourBlogTimeZone needs to be changed to the timezone offset that your blog is set to
If your timezone is UTC-08:00 then you'd enter -08:00 here
If your timezone is UTC-07:00 then you'd enter -07:00, etc.


You should be able to modify just about everything from the CSS file. You'll have to download it here and upload it somewhere else of your choosing.
http://yui.yahooapis.com/2.2.0/build/calendar/assets/calendar.css

There's 3 images here that you could also replace.
is defined in the CSS
is defined in the CSS
is located towards the bottom of the 3rd code-box above. It's the Arrows image from http://www.ajaxload.info/

Note: I removed Calendar Archive, because it is redundant with 'recent post' and it has bigger overhead.

Peek-A-Boo Installed

Installation instruction after jump.


Step 0:
Back-up your template before modifying it.

Step 1:
Add the following javascript code to the head of your template. You can place it just above the </head>-tag.
<script type='text/javascript' src='http://www.anniyalogam.com/widgets/hackosphere.js' />


Step 2:

Find the includable named 'post' in your template, and change it so that it is exactly as shown below (the code in highlite has to be added):

<b:includable id='post' var='post'>
<div class='post'>
<a expr:name='data:post.id'/>
<b:if cond='data:post.title'>
<h3 class='post-title'>
<b:if cond='data:post.url'>
<a expr:href='data:post.url'><data:post.title/></a>
<b:else/>
<data:post.title/>
</b:if>
</h3>
</b:if>
<div class='post-header-line-1'/>

<div class='post-body' expr:id='"post-" + data:post.id'>
<b:if cond='data:blog.pageType == "item"'>
<p><data:post.body/></p>

<b:else/>
<style>#fullpost {display:none;}</style>
<p><data:post.body/></p>
<span id='showlink'>
<p><a expr:onclick='"javascript:showFull(\"post-" + data:post.id + "\");"' href='javascript:void(0);'>Read More...</a></p>
</span>
<span id='hidelink' style='display:none'>
<p><a expr:onclick='"javascript:hideFull(\"post-" + data:post.id + "\");"' href='javascript:void(0);'>Summary only...</a></p>
</span>
<script type='text/javascript'>checkFull("post-" + "<data:post.id/>")</script>
</b:if>

<div style='clear: both;'/> <!-- clear for photos floats -->
</div>
</div>
.... rest of template code ....

Save your template.

Step 3:
In the Settings - Formatting tab go to the bottom and enter the following post-template:

Type your summary here.
<span id="fullpost">

Type the rest of your post here.
</span>

Modify on side margin (cosmetic)


change

#header {
margin: 0 1%;


into
#header {
margin: 0 0.5%;

change
h1.title {
padding-top: 38px;
margin: 0 1% .1em;

into

h1.title {
padding-top: 38px;
margin: 0 1% .1em;
#header .description {
display: block;
margin: 0 1%;


into

#header .description {
display: block;
margin: 0 0.5%;

change
#content-wrapper {
margin: 0 1%;

into

#content-wrapper {
margin: 0 0.5%;

Second Sidebar Installed.

Thanks to Hans of Beautiful Beta

Installation instruction after jump.

This Layout has 4 sections: Header, Main (with the Blog Posts), Sidebar and Footer.
The HTML-template looks like this (the line-numbers are added for reference only):

010: <body>
020: <div id='outer-wrapper'>l<div id='wrap2'>
030: <!-- skip links for text browsers -->
040: <span id='skiplinks' style='display:none;'>
050: <a href='#main'>skip to main </a>
060: <a href='#sidebar'>skip to sidebar</a>
070: </span>
080: <div id='header-wrapper'>
090: <b:section class='header' id='header' maxwidgets='1' showaddelement='no'>
100: <b:widget id='Header1' locked='true' title='Second Sidebar (Header)' type='Header'/>
110: </b:section>
120: </div>
130: <div id='content-wrapper'>
140: <div id='main-wrapper'>
150: <b:section class='main' id='main' showaddelement='no'>
160: <b:widget id='Blog1' locked='true' title='Blog Posts' type='Blog'/>
170: </b:section>
180: </div>
190: <div id='sidebar-wrapper'>
200: <b:section class='sidebar' id='sidebar' preferred='yes'>
210: <b:widget id='BlogArchive1' locked='false' title='Blog Archive' type='BlogArchive'/>
220: <b:widget id='Profile1' locked='false' title='About Me' type='Profile'/>
230: </b:section>
240: </div>
250: <!-- spacer for skins that want sidebar and main to be the same height-->
260: <div class='clear'> </div>
270: </div> <!-- end content-wrapper -->
280: <div id='footer-wrapper'>
290: <b:section class='footer' id='footer'/>
300: </div>
310: </div></div> <!-- end outer-wrapper -->
320: </body>

Lines 010 and 320 are the body-tags. All your code has to be between these two tags.

Lines 020 and 310 are the div-tags for two wrappers, the wrapper called "outer-wrapper" and the wrapper called "wrap2". In CSS you can define fonts, colors, and other styling for these wrappers. We'll look into CSS later in this tutorial.

Lines 080 to 120 contain the header. As you see, there is a div-wrapper (080 and 120), section-tags (090 and 110) and the widget that contains the header itself (100).

Lines 130 to 270 contain the content. Content means here: blog posts and sidebar. There is a div-wrapper called "content-wrapper" (130 and 270), and inside this wrapper there are 2 more wrappers: the "main-wrapper" (140-180) and the "sidebar-wrapper" (190-240).

Inside the main-wrapper we find the main-section (150 and 170) with the Blog-widget (160). This widget contains your posts.

Inside the sidebar-wrapper we find the sidebar-section (200 and 230) with an Archive-widget (210) and a Profile-widget (220).

And finally we have a Footer (280-300).

Now that we understand the structure, let's take a look at the formatting of this template. In the stylesheet you will fund the following code:

#outer-wrapper {
width: 660px;
padding: 10px;
....... }

#main-wrapper {
width: 410px;
float: left;
....... }

#sidebar-wrapper {
width: 220px;
float: right;
........ }

The outer-wrapper has a width of 660 pixels. The padding is set to 10 pixels, so that everything that is inside the outer-wrapper stays 10 pixels from the border. So that leaves 660 - 20 = 640 pixels for main-wrapper and sidebar-wrapper.
The main-wrapper has a width of 410 pixels, and floats to the left.
The sidebar-wrapper had a width of 220 pixels, and floats to the right. Together, main-wrapper and sidebar-wrapper have a width of 410 + 220 = 630 pixels. In the middle there is a space of 640 - 630 = 10 pixels.
So, if we want to squeeze in a second sidebar, we have to do something to create space. As it is now, it won't fit in.



Adding a second sidebar.

First, we will add the sidebar to the structure of the template, then we will add it to the CSS, and make it fit into the page.

Step 1: Backup the template.

Step 2: Make your right-sidebar unique.
Change lines 190 and 200:
190: <div id='right-sidebar-wrapper'>
200: <b:section class='sidebar' id='right-sidebar' preferred='yes'>

In your CSS style-sheet, change "#sidebar-wrapper" to "#right-sidebar-wrapper".
If you save your template now and view your blog, it should look okay.

Step 3: Add a left sidebar by adding new lines of code:
131: <div id='left-sidebar-wrapper'>
132: <b:section class='sidebar' id='left-sidebar' preferred='yes'/>
133: </div>
Now save your template, and take a look at the Page Elements tab.

You can see there is a new section, just below the header and above the posts. But it is not at the left side of the screen jet. Therefore, we have to add some CSS.

Step 4: Add CSS for the left sidebar.
In your CSS-style sheet, add the following code:
#left-sidebar-wrapper {
width: 220px;
float: left;
word-wrap: break-word;
overflow: hidden;
}
Your Page Layout tab will show something like this:

The sidebar-section is now to the left, but your right-sidebar is suddenly below your posts. That is because the width of 2 sidebars and a main-section counts up to 840 pixels, and that is more than the width of the outer-wrapper (660 pixels).

Step 5. Change outer-wrapper and header-wrapper width.
In your CSS-stylesheet look for the #header-wrapper and #outer-wrapper definitions, and change the width from 660 to 860.

Step 6. Add a page element.
Now finally, add a page element to your left sidebar.