發表文章

GCC Built-in Functions

最近上課的時候鬧了一個大笑話(而且那門課還是組合語言不是程式設計...)。我寫了下面這隻程式:
int main() { printf( "Hello\n" ); return 0; } 很明顯,這程式沒有 include 任何 header file,理論上應該是要包含 stdio.h。在編譯的過程中,compiler 吐出了下面的警告信息 (不是錯誤信息唷):

test.c: In function ‘main’:
test.c:3:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
     printf( "Hello\n" );
     ^
test.c:3:5: warning: incompatible implicit declaration of built-in function ‘printf’
test.c:3:5: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

但是程式會動,還是可以印出 Hello 的字樣。為什麽?我這時候信誓旦旦的跟大家說,因為 printf 在 libc.so 裡面有,因此就算編譯的時候找不到,gcc 在連結 libc.so 的時候還是會看的到 printf ,所以這時候還是可以執行的。為了證明這件事情,我用 nm 去看一下編出來的 test.o

0000000000000000 T main
                 U puts

等一下, where is my printf?? ...在學生面前要保持鎮定,大概 printf 在系統裡被改成 puts ... 然後再做實驗給同學看,這次換成利用 libm.so 的 pow 函式。
int main() { printf( "2^3 = %f\n", pow( 2.0,3.0 ) ); return 0; } 然後說,這時候應該一定會有警告,而且程式還跑不起來,因為沒有 link 到 libm.so (我可沒有 -lm 的選項啊)。結果 ... 居然可以跑 ... …

基督徒要如何處理「尤西弗羅困境」?

最近看到一段有趣的影片,在談到哲學上存在已久的難題,或者應該說是有沒有任何權威可以作為「善」的基礎。這個難題叫做「尤西弗羅困境」。

要說明「尤西弗羅困境」,我來抄一下 Wikipedia 上面的說明:


好的事物之所以好是由於上帝指定它們為好;上帝規定某些事物為好的是由於那些事物本身就是好的。 很明顯,這兩種宣告是互相衝突的。
如果採用第一種說法的話,那麽如果上帝說:「說謊是好行為」,難道我們就要這樣接受嗎?如果採用第二種說法,那麽就存在一個比上帝更大,上帝不得不接受的準則囉。基於這個困境所帶來的難題,有些哲學家認為過去的經典或是偉人並不能夠成為道德的準則。對基督徒來說該如何處理這個問題呢?
其實基督徒的答案很簡單。
路18:19 耶穌對他說:「你為甚麼稱我是良善的?除了神一位之外,再沒有良善的。 約1:9-10那光是真光,照亮一切生在世上的人。他在世界,世界也是藉着他造的,世界卻不認識他。 雅1:17 各樣美善的恩賜,和各樣全備的賞賜,都是從上頭來的,從眾光之父那裡降下來的,在他並沒有改變,也沒有轉動的影兒。 約壹1:5神就是光,在他毫無黑暗,這是我們從主所聽見又報給你們的信息。
根據聖經的啟示,唯有上帝的真正善的本體。也就是由上帝來決定何為善、何為正義、何為愛。所以,好的事物之所以為好,是因為上帝決定這是好的。
那我們應該怎麼回覆柏拉圖在這個困境所提出的問題呢?像是「如果上帝決定說謊是好的」,那樣怎麼辦呢?請注意,當我們人類提出這個問題的時候,是先從自己的頭腦來判斷,我們相信自己的邏輯思考能力勝過相信上帝的啟示。從這一刻起,人就已經把自己高抬超過上帝了。正如同性戀往往抬出「愛」的口號,卻忘了「愛」的本體的上帝並沒有認同這是愛。所以造成這個困境的不是上帝,是我們自己得罪了上帝。

靈修分享:我們在意的點是 ... ?

幾個月前從網路上看到一個很有趣的實驗。我先把影片的連結放在下面:
Jacob Dufour: "Who said it: Jesus or Satan?"

網路上也可以找到中文字幕的版本,不過我就不放了。簡單敘述一下他做了一個什麼實驗。Jacob 在自己的 FB 上面放上了一段經文:

Luke 4:7 If you worship me, it will all be yours.

然後在下面寫著,如果你同意的話,請說 Amen。令他訝異的是,短短的時間內他就收到了幾百個 Amen (還包含哈雷路亞、讚美上帝之類的)。我們來看看這段經文到底在說什麽。

路4:5-8 魔鬼又領他上了高山,霎時間把天下的萬國都指給他看,對他說:「這一切權柄、榮華,我都要給你,因為這原是交付我的,我願意給誰就給誰。你若在我面前下拜,這都要歸你。」耶穌說:「經上記着說:當拜主-你的神,單要事奉他。」

從這段經文可以很清楚的看出來,路加福音4:7是魔鬼在講的。那基督徒門到底在阿們什麽。所以 Jacob 說很多時候基督徒在引用聖經的時候,根本不曉得聖經在說些什麽就隨己意在引用,試圖讓聖經站在和自己相同的立場,來證明自己是對的。之後 Jacob 又談到了福音、救恩還有成功神學的問題等。

我弟倒是說了另外一種見解:「姑且不論他寫出經文的出處,如果沒有出處,把這經文視作敬拜上帝到好像也說的通吧」

的確,似乎不是不行。可是我發現了另外一件事情,當我們在看這經文的時候,我們的重點是放在 worship ?還是放在 it will all be yours?我們敬拜上帝,是因為祂配得敬拜?還是有好處給我們?我們當思想耶穌的回應:

當拜主-你的神,單要事奉他。



靈修分享:激情過後

書24:14-15 「現在你們要敬畏耶和華,誠心實意地事奉他,將你們列祖在大河那邊和在埃及所事奉的神除掉,去事奉耶和華。若是你們以事奉耶和華為不好,今日就可以選擇所要事奉的:是你們列祖在大河那邊所事奉的神呢?是你們所住這地的亞摩利人的神呢?至於我和我家,我們必定事奉耶和華。」

這段經文對大部分的基督徒來說應該是耳熟能詳的。特別是那句「至於我和我家,我們必定事奉耶和華」更是大部分人家中的擺設。這段經文其實可以看作是約書亞的遺言,在約書亞離世之際,他看著這批以色列的百姓,我猜他心中應該跟摩西一樣放不下心來,所以又把以色列人召聚起來,並且給他們最後的叮嚀,要他們專心事奉耶和華。

但今天的重點不在約書亞身上,我想來看看以色列人的反應。事實上,如果是我自己在當下的環境,我會不會說出:「好啊,我就來選看看,看是巴力、亞施他錄比較厲害,還是耶和華比較厲害」我想,在當下的「氣氛」,應該沒人會做這樣的發言吧,當然也不排除在那個時候講這種話,或許會被拖出去用石頭打死吧

書24:16-18 百姓回答說:「我們斷不敢離棄耶和華去事奉別神;因耶和華-我們的神曾將我們和我們列祖從埃及地的為奴之家領出來,在我們眼前行了那些大神蹟,在我們所行的道上,所經過的諸國,都保護了我們。耶和華又把住此地的亞摩利人都從我們面前趕出去。所以,我們必事奉耶和華,因為他是我們的神。」

理所當然的回答,正如所預料的那樣。問題在於,在這之後呢?熟悉聖經的人應該知道,在約書亞記之後就是士師記,士師記充滿了墮落的輪迴,這群信誓旦旦說:「我們斷不敢離棄耶和華」的百姓,在短短幾年之間就背棄自己的上帝,去隨從外邦的風俗,跟從外邦的偶像。令人意外嗎?似乎也不會,畢竟他們的長輩們,經歷過十災後,面對法老的軍隊一樣在埋怨,通過紅海,卻連摩西上西乃山短短的日子都等不了而造了金牛犢。這難道會令人意外嗎?

看看現在,在佈道會、培靈會、奮興會(台灣好像比較少奮興會之類的活動 ...)之中,多少人流淚決志、獻身,但之後呢?遙想以前在學生團契準備福音隊的時候,為了讓參加的契友有傳福音的熱忱,我帶大家查了以西結書16章,讓他們體會上帝的心意,上帝的愛。過程中有人流淚告訴我:「我從來沒想過自己是多麼的得罪上帝」,於是乎在激勵過後,大家更加的認真準備該次的福音隊。然而,那些隊員現在在哪裡呢?反視我自己,似乎和過去學生時代比起來,好像也後退了不少 ...

利用 printf 來把值寫入某個變數

在 C 語言中,透過 printf 來印東西一點都不稀奇。但你知道 printf 也可以拿來寫值嗎??

看看下面的範例,看看會印出來什麼東西。

#include "stdio.h" int main() { int val; printf("bala %n bala\n", &val); printf("val = %d\n", val); return 0; }
印出來的結果如下:

blah  blah
val = 5

為什麼呢?如果我們去查 manual 的話,可以看到下面的定義:

n

The number of characters written so far is stored into the integer indicated by the int * (or variant) pointer argument. No argument is converted.

也就是使用 %n 的時候,他會把到目前為止已經印出多少個字元的數目給寫入一個 int 的變數。常見的做法在於對齊,如下面的程式

int n; printf("%s: %nFoo\n", "hello", &n); printf("%*sBar\n", n, " ");

但只有這樣嗎?其實,%n 也可以拿去寫值到程式內特定的記憶體位置喔,只要你好好的處理 pointer 的部分的話。所以 printf 其實比想像的還要危險呢。

淺談資訊教育與CT+X,以及我反對的理由

“If I were a French student and I were 10 years old, I think it would be more important for me to learn coding than English” Tim Cook

就是這一句話,帶動了全球學習資訊的風潮。身為資訊老師,應該要慶幸這股風潮帶來的無限商機,也不需要擔心失業的問題?我們政府開始在108課綱將資訊教育帶到了國中小的階段,而大部分的大學也開始推行所有的學生在畢業前要學過程式語言,甚至還要通過認證!簡單來講就是把英文的那一套搬到程式語言來就是了。

但其實我個人不太贊同這個想法,所以在這邊寫下我的理由同時也發發牢騷。

什麼是資訊教育?我聽過幾個課綱委員的分享,他們說:「不要再讓我們的小孩在電腦課上學習開關機和 Office 了,他們應該來學習程式語言,並開始接觸運算思維。」在程式語言的部分,如果覺得 C/C++/JAVA/Python 太難了,沒關係,我們還有 ScratchBlockly 等的圖像式語言,讓學生自然而然的學會電腦的運算邏輯。在運算思維的部分,說穿了就是資工系的演算法課程,不過因為要教比較小的小朋友,所以我們應該要在生活中發現在些重複的 pattern ,讓學生自然而然的學會歸納,並將重複的事情交給電腦來處理。這些課綱委員毫無疑問充滿著使命感(或者說是信仰),我一點都不會質疑這件事,問題是我不贊同這份使命感的內容。

反對的理由有幾個。第一,每個人真的適合走資訊嗎?我自己現在正在教一些國中老師,期望他們受訓後可以成為合格的資訊老師,之後回到學校去教資訊課程。但很多人都告訴我,他們看著電腦螢幕但不知道該怎麼動手,有更多人是因為超額問題硬著頭皮來上的。到學校的現場也是一樣的,真的所有的學生都要學這東西嗎?他們已經有著眾多的科目,國英數理化地歷生體美 ... 每個領域都認為自己的東西最重要,然後我們會繼續說:「這個競爭的時代,怎麼能輸在起跑點呢?」,卻忘了我們這些所謂的大學老師不都是上大學才開始學程式。不停加上去的結果就是什麼都學不好。再加上一定要給成績、分高低,所有的課綱都會被扭曲,我班上的學生就直接告訴我,現場一定會有現場的做法。可是這些是課綱委員永遠看不到的部分,他們每次視察都只會看到最美好的一面,就像台灣一貫以來的粉飾傳統,那些都絕對不會是…

靈修分享:亞略巴古的演講

亞略巴古的演說是使徒行傳一篇非常著名的講道。基督徒往往用這段經文來說明上帝的屬性,同時也會參考這段經文作為和外邦人互動的一個參考方式。最近因為團契查經查到這一段,重新思想後看到了以前沒有考慮過的面向,在這邊記錄一下。

徒17:16-34保羅在雅典等候他們的時候,看見滿城都是偶像,就心裏着急;於是在會堂裏與猶太人和虔敬的人,並每日在市上所遇見的人,辯論。還有伊壁鳩魯和斯多亞兩門的學士,與他爭論。有的說:「這胡言亂語的要說甚麼?」有的說:「他似乎是傳說外邦鬼神的。」這話是因保羅傳講耶穌與復活的道。他們就把他帶到亞略‧巴古,說:「你所講的這新道,我們也可以知道嗎?因為你有些奇怪的事傳到我們耳中,我們願意知道這些事是甚麼意思。」(雅典人和住在那裏的客人都不顧別的事,只將新聞說說聽聽。)
保羅站在亞略‧巴古當中,說:「眾位雅典人哪,我看你們凡事很敬畏鬼神。我遊行的時候,觀看你們所敬拜的,遇見一座壇,上面寫着『未識之神』。你們所不認識而敬拜的,我現在告訴你們。創造宇宙和其中萬物的神,既是天地的主,就不住人手所造的殿,也不用人手服事,好像缺少甚麼;自己倒將生命、氣息、萬物,賜給萬人。他從一本本:有古卷是血脈造出萬族的人,住在全地上,並且預先定準他們的年限和所住的疆界,要叫他們尋求神,或者可以揣摩而得,其實他離我們各人不遠;我們生活、動作、存留,都在乎他。就如你們作詩的,有人說:『我們也是他所生的。』我們既是神所生的,就不當以為神的神性像人用手藝、心思所雕刻的金、銀、石。世人蒙昧無知的時候,神並不監察,如今卻吩咐各處的人都要悔改。因為他已經定了日子,要藉着他所設立的人按公義審判天下,並且叫他從死裏復活,給萬人作可信的憑據。」
眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」於是保羅從他們當中出去了。 但有幾個人貼近他,信了主,其中有亞略‧巴古的官丟尼修,並一個婦人,名叫大馬哩,還有別人一同信從。

對基督徒來說,保羅這篇講道講的真好,不但講出了上帝的超越性(像是不住人手所造的殿、也不是金銀石的彫刻),也帶出了耶穌基督復活的大能。但最近我才注意到眾人的反應:「眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」」不曉得你看到這一段有什麼感想?可能我是玻璃心吧,如果我是保羅,我大概會非常非常的難過,看起來似乎沒有人理會這個福音、這篇講道。這篇被基督…