發表文章

目前顯示的是 2015的文章

當「翟本喬」遇到「國小校長」

按照慣例,先記錄本次的事件。本次參與的角色有3個人,柯文哲市長、國小校長以及翟本喬。他們的言論如下:

柯市長:刪除「台北市各國民小學寒暑假作業實施要點」,廢除國小制式寒假作業。
國小校長:台北市長柯文哲「割錯了盲腸」,我國學子一整年比國外少了三個月自我精進課業,素質堪憂,競爭力下降,都是可預期的結果。
翟本喬:統一規定的寒暑假作業,正是讓我國學子一整年比國外少了3個月追求創新,自我精進課業以外知識的機會。盲腸的確是割錯了,該割的是文中這種思想。

這裡先不管柯市長的政策,因為根據網路上的說法,所謂刪除「寒暑假作業實施要點」基本上是讓作業的決定權回歸到學校身上,我個人覺得挺好的,畢竟是讓第一線的教育人員來按照現場狀況決定,應該是會比讓遠離教育現場的「專家們」做決定來的好。而很明顯國小校長的解讀是「刪除作業」,似乎和柯市長的決策不太相同。當然我不確定按照台灣的制度,會不會因為沒有實施要點就沒有出作業的法源依據這一類的看法就是了 ...

以前小時候放假前都會收到一本作業,內容五花八門,國英數理化無所不包,還有美勞、音樂等莫名其妙的作業。以我個人來說,我到希望整本作業都是數學作業,這樣我大概兩三天可以全部做完。如果是作文的話,雖然很討厭,要花很多時間,但還在能處理的範圍。如果是美勞 ... 哈哈哈,那就麻煩了。那可是我完全無法處理的東西,像是紙雕、燈籠、肥皂彫刻等 ... 每次都想用這些作業跟人家換數學作業,還好有我的表舅出手相助。

對我來說,重點不在乎寒暑假作業,而是學生的學習動機。以我個人當過課輔班老師的觀察,現在學生的學習動機是很薄弱的。要我相信現在的學生會「自我精進課外知識」...老實說,我認為比率是很低的。There is no Royal Road to Learning。學問之途無皇家之路。所以翟本喬認為需要讓學生自主學習、自訂計劃、修習課外的知識,我認為學生不太會去自主自發的追求知識。的確,我不喜歡過去寒暑假作業的出法,但是我認為在小學的階段,逐步引導學生去學習是有必要的。而作業是一種手段,不管是複習、或是去接觸新知,都好。

接下來談談翟本喬所想要割掉的那種思想。很多時候大家都在說,創新很重要,課外知識很重要,但是呢 ... 我很懷疑翟本喬是真的這麼認為的。如果今天有個小學生,利用寒暑假的機會將某個電動給全破了,並且為了造福同班同學,把自己的經驗打成圖文並茂的功略…

聖誕分享:以馬內利

經文:
太1:18-25耶穌基督降生的事記在下面:他母親馬利亞已經許配了約瑟,還沒有迎娶,馬利亞就從聖靈懷了孕。她丈夫約瑟是個義人,不願意明明的羞辱她,想要暗暗地把她休了。正思念這事的時候,有主的使者向他夢中顯現,說:「大衛的子孫約瑟,不要怕!只管娶過你的妻子馬利亞來,因她所懷的孕是從聖靈來的。她將要生一個兒子,你要給他起名叫耶穌,因他要將自己的百姓從罪惡裡救出來。」這一切的事成就是要應驗主藉先知所說的話,說:「必有童女懷孕生子;人要稱他的名為以馬內利。」(以馬內利翻出來就是「 神與我們同在」。)約瑟醒了,起來,就遵著主使者的吩咐把妻子娶過來;只是在孩子出生以前,並沒有與她同房。約瑟給孩子起名叫耶穌。25 只是沒有和她同房,等她生了兒子(有古卷:等他生了頭胎的兒子),就給他起名叫耶穌。

這段經文在教會中是非常熟悉的,特別是在聖誕節的時候。雖然有研究指出耶穌並不是真的在聖誕節那天降生的,但不管是哪一天,基督徒都當每時每刻紀念這關乎萬民的大好信息。而聖誕節這個日子不過就是更方便基督徒傳揚福音的一個契機罷了(不過我也不排斥聖誕大餐就是了)。在這段經文當中,約瑟發現馬利亞還沒有結婚就有了身孕,於是想要默默地放棄這門婚事,但上帝透過天使告訴他:「這是上帝奇妙的救贖計劃。」於是約瑟就很順服地遵行上帝的命令娶過馬利亞,這一切的事是要應驗舊約先知以賽亞所記載的話。到底以賽亞說了什麼呢?經文紀錄在下面。

賽7:1-16烏西雅的孫子、約坦的兒子、猶大王亞哈斯在位的時候,亞蘭王利汛和利瑪利的兒子、以色列王比加上來攻打耶路撒冷,卻不能攻取。有人告訴大衛家說:「亞蘭與以法蓮已經同盟。」王的心和百姓的心就都跳動,好像林中的樹被風吹動一樣。耶和華對以賽亞說:「你和你的兒子施亞雅述出去,到上池的水溝頭,在漂布地的大路上,去迎接亞哈斯,對他說:『你要謹慎安靜,不要因亞蘭王利汛和利瑪利的兒子這兩個冒煙的火把頭所發的烈怒害怕,也不要心裡膽怯。因為亞蘭和以法蓮,並利瑪利的兒子,設惡謀害你,說:我們可以上去攻擊猶大,擾亂他,攻破他,在其中立他比勒的兒子為王。所以主耶和華如此說:這所謀的必立不住,也不得成就。原來亞蘭的首城是大馬士革;大馬士革的首領是利汛。(六十五年之內,以法蓮必然破壞,不再成為國民。)以法蓮的首城是撒馬利亞;撒馬利亞的首領是利瑪利的兒子。你們若是不信,定然不得立穩。』」耶和華又曉諭亞哈斯說:「…

從「跨界計劃」反思

最近有則新聞報導:「城市豐收教會失信案 康希牧師與五被告罪名成立」。其實這個案子很多年以前就開始進入司法調查,主要被檢調偵察的理由是康希牧師將教會的「建堂基金」挪用到「跨界計劃」。對相信康希牧師的人來說,移動這筆錢是為了福音的緣故;不相信康希牧師的人則認為這叫作「中飽私囊」。Well ... 這部份不置可否,惟上帝鑑察他們的內心。這裡也不去討論教會內的金錢使用問題,像是教會的錢能不能拿去做投資(其實這個問題在我們教會也曾在長執會提出來過,最後的結論是只做定存,當然會去找利率較高的銀行就是,不過這是另外一個故事了 ...)。今天我在意的是「跨界計劃」。

什麼是「跨界計劃」?按照城市豐收教會該計劃的官方網頁:「跨界計劃是城市豐收教會宣教努力的一部份,是透過藝術和娛樂的媒介接觸不上教會的人,特別是青少年。不過這樣的概念並不侷限於藝術與娛樂界,它同樣是用於商業、教育、媒體等領域,就像主耶穌在大使命所教導的:要往普天下去,這天下就是指我們現代數會的組織架構或秩序。」

在我的理解裏面,這個計劃是透過流行音樂、染髮等時下青少年喜歡的元素,把青少年吸引到教會。 估且不論城市豐收教會他們時常教導的「成功神學」合不合聖經,甚至也先不管何耀珊牧師(聽說她要大家稱她為牧師)的這些音樂以及生活到底有沒有將人帶入教會,起碼這個「跨界計劃」的宗旨看起來很不錯,不是嗎?

當我在思考的時候,我想到了兩個朋友。第一個人對我說:「我不想讓外邊的人覺得基督徒都長的那樣子,我希望讓他們看到不一樣的基督徒」另一個人則是:「我覺得教會內的人看起來都太優秀了,這樣壓力好大」聽起來這就是「跨界計劃」存在的目的不是嗎?

我在想的問題是:「到底基督徒該是怎樣的人啊?」什麼叫作:「不要成為長的那樣子的基督徒?」

太11:29 心裡柔和謙卑,你們當負我的軛,學我的樣式;這樣,你們心裡就必得享安息。 

約15:5 我是葡萄樹,你們是枝子。常在我裡面的,我也常在他裡面,這人就多結果子;因為離了我,你們就不能做什麼。

加5:22,23 聖靈所結的果子,就是仁愛、喜樂、和平、忍耐、恩慈、良善、信實、溫柔、節制


基督徒應當只有一種生命,那就是連於基督的生命;基督徒應當只有一位效法的對象,那就是基督耶穌本身。所以根本不該有「那種類型的基督徒」這樣的形容詞,因為基督徒應當只有一種類型,就是「像基督的類型」,當然我們做的並不完全就是了。那,…

課綱微調大戰

最近台灣最火紅的新聞應該就是「課綱微調」的事件了,「微調」相關的內容可以參考「【懶人包】課綱「微」調嗎?」。後來也演變出學生到教育部前靜坐,甚至出現燒炭自殺的悲劇。但從在這一連串的事件當中,與其討論「課綱」的內容,我覺得有其他議題更值得深思。所以在下面我紀錄了自己的想法。

1. 歷史有所謂的中性論述嗎?

在課綱的討論過程中,很常聽到有人說:「歷史應該要做中性的描述。」他們的意思應該是指「不要把老師(政府?)的解釋強加到學生身上」,所以歷史紀錄最好沒有任何的褒貶,只單純的紀錄事件,由學生自己去詮釋。這聽起來是非常理想的境界,但有可能嗎?

我不是歷史學者,但反正我不是要參與歷史學術論文發表,而且這裡又是我的部落格,所以就隨我說了。我認為不可能!因為每個人都會有自己的喜好、偏愛,會從各式各樣的角度去看事情後進行紀錄,因此要一個人毫無偏見的紀錄歷史是不可能的。第二,我很懷疑語言有所謂的中性辭彙,上過方老師的 GRE 課程,每個英文單字他都可以給你講出十幾二十個同義詞,問題是那些字真的都是一樣嗎?在程度、輕重、褒貶上或多或少都有程度上的差異。該用哪個字是由誰來決定的呢?那如果歷史的陳述不是客觀的話,會造成什麼影響呢?

過去,中國的歷史記載方式是「春秋筆法」、「微言大義」,造成東方世界一種「文史哲不分家」的特性,這也意味著在歷史的陳述裏面,要宣揚一些價值倫理的觀念。這會不會有洗腦的效果,可能會,但即使如此,許多的人還是發表不同意史官見解的文章(如縱囚論),這代表人還是可以在同樣的歷史課本中做出不一樣的詮釋,既然這樣,何苦要追求的一個幾乎不可能達成的中性歷史呢?

2. 政府有調整課綱的權力嗎?

其實這個問題本來應該這麼問:「政府可以強行推動大中華史觀嗎?」之前在節目上聽到高中生說他無法接受自己的小孩(其實應該是說學弟妹比較恰當)接受這樣的史觀,而要接受以台灣為主體的史觀。好,那我們把上面的問題換一下,請問:「政府可以強行推動台獨史觀(或是講好聽一點:以台灣為主體的史觀)嗎?」Well ... 你說呢?這兩個的差異是「對」或「錯」的差異嗎?如果是的話,那還算是中性的歷史陳述嗎?我自己當然有自己的史觀,而且我也不諱言比較偏其中一種,但不管你持怎麼樣的看法,請別忘了對面有跟你不一樣的人。很多批評的人說課綱調整委員不是台灣史的專業人員,別忘了,就站在例外一個立場的人,台灣史應該要放在中國…

TCP 和 UDP 共用同一個 Port?

這幾天在做網路實驗,利用 iperf3 來觀測流量的時候,發現一個神奇的地方,那就是 iperf3 在設定 server 端的時候,不用指定是 tcp 還是 udp,這跟 iperf 第2版以前是不一樣的。

iperf2:

SYNOPSIS
      iperf -s [ options ]
      iperf -u -s [ options ]
GENERAL OPTIONS
      -u, --udp
           use UDP rather than TCP

iperf3:

SYNOPSIS
       iperf3 -s [ options ]
       iperf3 -c server [ options ]
CLIENT SPECIFIC OPTIONS
      -u, --udp
           use UDP rather than TCP

這代表 TCP 和 UDP 的 Socket 是可以同時使用同一個 Port 的。其實我一直以為是不行的(這就叫作孤陋寡聞 ...)。為了實驗起見,我自己寫了一個小小的 Echo Server,在指定的 Port 上同時監聽 TCP 和 UDP,來看看是否能夠運作(Client的程式就不附在上面了)。

#include <stdio.h> // for printf() and fprintf() #include <sys/socket.h> // for socket(), bind(), and connect() #include <arpa/inet.h> // for sockaddr_in and inet_ntoa() #include <stdlib.h> // for atoi() and exit() #include <string.h> // for memset() #include <unistd.h> // for close() #include <sys/time.h> // for struct timeval {} #include <fcntl.h&…

靈修分享:祂必成就這事

好久沒有寫靈修分享了(恩,我的列王記好像也欠了超久的)。主要的原因是覺得自己的靈修生活似乎有不穩定的趨勢。本來我是利用到公司吃早餐前的時間靈修,不過因為愈來愈忙,出差次數增多,還有出門時間延後等因素,變得有一天沒一天的。當然這些都是藉口,願上帝保守我能更喜悅祂的話語,每日更親近祂。

最近在靈修的內容是保羅書信,而這段經文對我來說是上帝的提醒,更是上帝那寶貴的恩典。不過下面的分享就不牽扯「三元」和「二元」的討論了。(因為那不是我這次的靈修收穫啊)

帖前 5:23,24 願賜平安的 神親自使你們全然成聖!又願你們的靈與魂與身子得蒙保守,在我主耶穌基督降臨的時候完全無可指摘!那召你們的本是信實的,他必成就這事。

在這裡,保羅說:「願上帝使你們(基督徒)全然成聖...完全無可指摘」,聽起來很好啊,但對我來說有時候卻不是那樣的開心 ... 因為我比人更清楚,自己內心到底有多少得罪上帝的地方(雖然實際上可能更多就是了)。的確,基督徒常常會說「因信稱義」、「靠寶血罪得赦免」這一類的話,但我更了解神是烈火(來12:29)。當看到聖經中帖前的那些教訓(帖前4:1-12),我也在問我自己做的到嗎?如果可以下注的話,我一定下「做不到」這邊。「遠避淫行、成為聖潔」,難啊,特別在登山寶訓之後,行為已經不容易了,更何況是人心呢?嫉妒、相恨、邪情、私慾 ... 我自問我又哪一項沒有了,等看到神的時候,大概只會說:「禍栽,我滅亡了」(可能也不用講話就被擊殺了)

加6:7 不要自欺,神是輕慢不得的。人種的是什麼,收的也是什麼。

感謝上帝,因為聖經在這裡很明確的定義了主詞:「神」「召你們的」。不是我,而是上帝。上帝要保守我全然成聖,並使我無可指摘!坦白說,我不知道祂要怎麼做,我自己也看不到這樣的可能,我自己有多壞我比任何人都更清楚(雖然上帝可能會說,你對你的壞了解的還不夠多呢)。但祂是信實的!而且祂必成就這事!這是一個安慰、這是一個應許、更是一個盼望,好叫有一天我能對上帝說:「是的,我願祢快來」(有時候不得不承認,這是很可怕的話)。我還是說,我不知道上帝會怎麼達到,我只知道我依然在這樣的罪惡中掙扎,但求神憐憫我,按著祂的旨意待我,使我能成為新造的人。

羅8:16 聖靈與我們的心同證我們是神的兒女。

怎麼知道我是被召的呢?惟聖靈為我做見證。



popen 程式範例

最近公司有個案子在做 WiFi 管理系統,透過集中式的控制器(AC,Access Controller)來管理轄下的 AP(Access Points,CAPWAP 的用語是 WTP)。嗯,有些 sense 的人應該就會知道說:「啊,你在做 CAPWAP」,Bingo!不過這篇沒打算要介紹 CAPWAP,下次有機會來講講 CAPWAP 的故事(不是技術,因為技術的部份我覺得很無聊,所以來講講故事和我的一些心得)。在做的時候遇到一個問題,廠商提供的平台,但卻沒提供人來進行系統整合。簡單來說,就是版子往我桌上一扔,就說:「給我在上面做這個功能」,然後時間短的不像話。額外抱怨一下,他選的 AC 平台比 raspberry pi 的效能還差,居然還敢跟我開口要一堆功能 ... 。理論上來說,AC 會把 WTP 的相關資訊帶到各 WTP,然後這時候 WTP 的 capwap daemon 會對核心層的 driver 進行設定。

一般說來,這種設定的方式是透過 ioctl 的溝通管道,最常見的範例程式就是 ifconfig,透過上下層定義好的 SIOCSIFFLAGS(Socket I/O Control Set Interface Flags)來進行溝通,所以一般來說這是屬於系統平台人員所要處理的問題。可是對於那種把版子跟一堆文件丟在我桌上,又不給我足夠時間的傢伙,我才懶得幫他查 WiFi driver 上需要的 SIOCSFFLAGS 勒。但案子又要進行,那要怎麼辦呢?所以我決定採取最單純的作法:直接呼叫系統的 WiFi 控制指令,如 iwpriv、wlanconfig 等,透過這些指令直接呼叫來取得並設定相關參數。缺點很明顯,就是效能會比較差,但一來是差不了多少(在意效能就給我拿比較像話的版子來!),二來是我相信對方提供的這些指令應該是測試過了,代表系統應該已經整合完畢了(我覺得是我一廂情願,但起碼對方無法還口,要合作也拿點誠意來吧)。

下一個問題是,要怎麼執行系統指令?最直覺的作法,用 system 的函式,問題是我要怎麼撈回傳的資料呢?因此這篇文章就來紀錄另外一支系統函式:popen 的用法。先來看看 man 的說明吧。

The  popen()  function  opens  a  process by creating a pipe, forking, an…

自訂 Bash Prompt

以前在使用 shell 的時候,會覺得 prompt 所顯示的「目前所在目錄位置」實在是太長了,但是拿掉又有點不方便。結果看到同事很聰明的讓提示字元換到下一行,所以也決定來這樣幹。

Bash Profile Generator 是一個動態的 Bash Prompt 產生器,就用這個打造自己喜歡的 Prompt 吧。

pthread_create 會多建立一個 thread 的原因

之前在執行某個客戶的案子時,被問到一個問題:「你說你們程式開了兩個thread,那為什麼透過 ps 指令觀察到的個數卻是 4 個呢?」(ps 的指令為 ps -L,可以透過 PID 和 LWP 這兩個欄位看出來),一時之間不知道怎麼回答。之後由同事 York 在 man pthreads找到了下面的答案。

 Linux implementations of POSIX threads
       Over time, two threading implementations have been provided by the
       GNU C library on Linux:

LinuxThreads
              This is the original Pthreads implementation.  Since glibc
              2.4, this implementation is no longer supported.

NPTL (Native POSIX Threads Library)
              This is the modern Pthreads implementation.  By comparison
              with LinuxThreads, NPTL provides closer conformance to the
              requirements of the POSIX.1 specification and better
              performance when creating large numbers of threads.  NPTL is
              available since glibc 2.3.2, and requires features that are
              present in the Linux 2.6 kernel.

從上面我們可以知道,Linux 在 pthread 上的實作方成兩種,LinuxThreads 和 NPTL,其中 NPTL 是比較新的實作方式。而在 LinuxThreads 的章節則提到了:

In addition to the m…

靈修分享:以賽亞書1:1-3

本來今年有個夢想,就是希望能和老婆一同好好的靈修。當然這個願望是否能成真取決於我們家中的「第三者」。以目前她晚上活碰亂跳的情形來看 ... 恐怕這個願望要在延後了。這篇靈修心得是我和老婆今年第一次(也是唯一的一次)一起查經的心得,盼望很快能有第二次囉。

以賽亞書1:1-3

當烏西雅、約坦、亞哈斯、希西家作猶大王的時候,亞摩斯的兒子以賽亞得默示,論到猶大和耶路撒冷。天哪,要聽!地啊,側耳而聽!因為耶和華說:我養育兒女,將他們養大,他們竟悖逆我。牛認識主人,驢認識主人的槽,以色列卻不認識;我的民卻不留意。

基本上大小先知書對很多基督徒來說都很難閱讀,到也不是有多艱澀難懂的神學(當然如果不包含預言內容的話),而是會覺得這麼這幾個先知一直在罵人啊,你們不煩我們讀者都煩了。其實我也不是不能理解,畢竟某種程度我自己也這麼覺得,除了幾處大家耳熟能詳的經文和故事以外,其他沒印象的地方大多都是在責備南國、北國和外邦人吧。希望這次的閱讀能夠好好去深思每一處的經文。

以賽亞書一開頭就把時間軸給寫了出來,以賽亞的年代橫跨了烏西雅、約坦、亞哈斯和希西家。看到這裡的時候我還蠻訝異的,因為和其他的先知比較起來,以賽亞算是南國先知當中遇到許多好王的呢。

代下26:4,5 烏西雅行耶和華眼中看為正的事,效法他父亞瑪謝一切所行的;通曉 神默示,撒迦利亞在世的時候,烏西雅定意尋求 神;他尋求耶和華, 神就使他亨通。
代下27:2,6    約坦行耶和華眼中看為正的事,效法他父烏西雅一切所行的,只是不入耶和華的殿。百姓還行邪僻的事。...約坦在耶和華─他 神面前行正道,以致日漸強盛。
代下28:1    亞哈斯登基的時候年二十歲,在耶路撒冷作王十六年;不像他祖大衛行耶和華眼中看為正的事,
代下29:2 希西家行耶和華眼中看為正的事,效法他祖大衛一切所行的。

可以看出來除亞哈斯以外,其他人都算是上帝眼中看為好的王。這樣,以賽亞應該會是先知中比較幸福的人,也比較不需要罵人吧。可是看到第2節第3節,上帝卻嚴嚴地責備以色列的百姓不認識祂。為什麼?理論上這時候的百姓應該是最敬畏上帝的時候不是嗎?理論上這時候上帝所說的應該是讚美、安慰和鼓勵,而不是後面一大堆的刑罰吧?在靈修的時候我第一次感到震驚,我沒想到這麼嚴厲的話居然是發生在一個這麼好的時代。

我再進一步去思索,我想約坦的故事給了我一個答案。約坦是個好王,但是百姓卻不是好的…

Netlink Performance 測試

這篇文章的由來在於客戶說的一句話:「Netlink 的效能似乎不太好」客戶口中的不太好指的是 Throughput 只有 10Mbps。本來嘛,我想之後才處理這件事情,但結果我的一個同事 York 抱著追根究底的精神進行了下面的實驗。首先,他用一支 user space 的程式來產生封包到 kernel space 的模組,模組收到以後就將封包打回 user space。簡單來講究是一個 echo 的行為。下面會列出這兩隻程式:

實驗平台:某平台
Kernel 版本:3.10

User Space:

#include #include #include #include #include #include #include #include #include #define NETLINK_TEST 18 //#define MAX_PAYLOAD 1024 //#define MAX_PAYLOAD 2048 //#define MAX_PAYLOAD 4096 #define MAX_PAYLOAD 8192 #define MESSAGE_COUNT 1048576 struct sockaddr_nl src_addr, dest_addr; struct msghdr msg; struct nlmsghdr *nlh = NULL; struct iovec iov; int sock_fd; void main() { int _i = 0; time_t startTime = 0; time_t endTime = 0; sock_fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_TEST); memset(&src_addr, 0, sizeof(src_addr)); src_addr.nl_family = AF_NETLINK; src_addr.nl_pid = getpid(); src_addr.nl_groups = 0; bind(sock_fd, (struct sockaddr*)&src_addr, sizeof(src_addr)); memset(&d…