發表文章

目前顯示的是 二月, 2014的文章

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

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

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

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

靈修分享:充滿誘惑的提案

耶穌說:「你們必曉得真理,真理必叫你們得以自由。」(約8:32)。這節聖經基督徒大概都很熟悉,問題是基督徒大概常常不覺得很自由。為什麼?因為當基督徒讀到登山寶訓的時候,常常會覺得這明明是新約,怎麼比舊約還要律法,要求這麼嚴格,除了外在的行為,還會鑑察自己的內心,而偏偏耶穌又說:「你們若愛我,就必遵守我的命令。」(約14:15),這樣壓力好大唷。這在人是不能,但靠著上帝的恩典,凡事都能(太19:26)。感謝上帝!不過今天的分享不是在這裡,而是在主日聽賴長老講道的時候,突然浮起的另外一個問題...

如果,上帝願意給你一個機會,使你一切手所做的盡都順利,而且你完全不用聽從祂的吩咐(也就是可以胡作非為:p),你覺得這個提案怎麼樣?

乍聽之下很棒吧!雖然大部分的基督徒應該會直接大笑說:「怎麼可能?」,可能還會引經據典的來說這根本是天方夜譚,所以根本就不需要考慮這個問題。但或多或少,內心也會有點心動吧。然而,這個提案並非空穴來風,而是曾經出現在聖經當中的...

出33:1 耶和華吩咐摩西說:「我曾起誓應許亞伯拉罕、以撒、雅各說:『要將迦南地賜給你的後裔。現在你和你從埃及地所領出來的百姓,要從這裡往那地去。
出33:2 我要差遣使者在你前面,攆出迦南人、亞摩利人、赫人、比利洗人、希未人、耶布斯人,
出33:3 領你到那流奶與蜜之地。我自己不同你們上去;因為你們是硬著頸項的百姓,恐怕我在路上把你們滅絕。」
出33:14 耶和華說:「我必親自和你同去,使你得安息。」
出33:15 摩西說:「你若不親自和我同去,就不要把我們從這裡領上去。
出33:16 人在何事上得以知道我和你的百姓在你眼前蒙恩呢?豈不是因你與我們同去、使我和你的百姓與地上的萬民有分別嗎?」
出33:17 耶和華對摩西說:「你這所求的我也要行;因為你在我眼前蒙了恩,並且我按你的名認識你。」

在這個故事裡,上帝對摩西說,我派遣使者在你們面前,幫你們驅除一切的敵人,只是我不與你們同在,免得我因著怒氣而滅了你們。這真是一個誘人的提案,一來可以不花一兵一卒就可以佔領迦南地;二來也隱含著,你們可以胡作非為,而且我不會因此而懲罰你們。這提案有多大的吸引力呢?從之後的故事來看,約書亞爭戰了老半天,過約旦河、取耶利哥城、敗走艾城又取回來、打敗五王聯軍,到老年的時候,仍然還有許多未得之地(書13:1),在士師記的時候,一開始還能逐步趕出…

Linux UK Communication: Netlink

上一篇文章所介紹使用的 Linux User/Kernel 溝通方式:Character Device,是一個很標準的範例程式,過去在公司的案子開發上也大多採用這種方法(另一種方法是 ioctl )。這個方式最大的好處是簡單,而且移植性高,因為從很早以前的 Linux Kernel 就已經支援了(2.4,你問 2.2?抱歉,我沒那麼老 ... )缺點呢?Kernel Module 只能夠被動的等待 User Space 的程式呼叫,無法主動進行溝通。

Linux Kernel 最近發展的方向,在 UK 這一塊盡可能改採 Netlink 的方式來進行通訊。這是一個很簡單的思維:既然所有網路的封包都會到 Kernel 去進行處理,那我為什麼不直接把網路封包拿來當作給 Kernel 的訊息呢?而 Kernel 要和 User Space 的程式溝通時,只要製作一個網路封包往 socket 丟不就好了嗎?於是 Netlink 就誕生了。先說缺點,因為算是比較新的技術,所以 API 的介面改的很快,因此程式似乎也要常常變動。下面是由同一位同事 taco 所撰寫的範例。(其實我本來想自己寫的,但 ... 懶啊)

Kernel:
#include <linux/types.h>#include <linux/kernel.h>#include <linux/netlink.h>#include <net/sock.h>#include <linux/sched.h>#include <linux/module.h>#include <linux/init.h> MODULE_AUTHOR("tacolin"); MODULE_DESCRIPTION("NETLINK KERNEL TEST MODULE"); MODULE_LICENSE("GPL");#define NETLINK_TEST 17#define MAX_PAYLOAD 512staticstruct sock* g_pSocket =NULL;staticvoid recv_msg_from_user(struct sk_buff *pSkb,char* pRecv…

Linux UK Communication: Character Device

這是同事 Taco 撰寫的範例,在經過作者同意後厚顏無恥的列在 Blog 上。畢竟人家都寫好了啊,要我自己在寫一份有點懶。為了紀念原作者(明明就還活著,說啥紀念),所以沒有任何地方更動(應該是懶惰吧)

這個範例和我平常的習慣不同,一般來說我只會寫一個範例檔,不喜歡拆成兩個,而且愈簡單愈好。 但這同事和我的習慣不同,也很好,因為可以很簡單的看出兩個檔案的分工,特別是 taco_1.c,可以直接拿來建立各樣的 kernel module 範例,這個習慣值得我學習。

taco_1.c
#include <linux/types.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h> MODULE_AUTHOR("tacolin"); MODULE_DESCRIPTION("CHARACTOR DEVICEL TEST MODULE 2"); MODULE_LICENSE("GPL");externint register_device(int major,int minor);externint unregister_device(int major,int minor);staticint __init kernel_module_init(void){ printk("[KERNEL-PART] %s\n", __func__);if(0> register_device(125,0)){ printk("[KERNEL-PART-ERROR] register device failed\n");return-1;}return0;}staticvoid __exit kernel_module_exit(void){ printk("[KERNEL-PART] %s\n", __func__);if(0> unregister_device(125,0)){ printk("[KERNEL-PART-ERROR] unregister device failed\n&q…

IPC: Unix Domain Socket

要讓系統中的兩個 process 彼此溝通該如何處理?過去常見的守法有 pipeline、shared memory 等,不過其實我一個都沒有用過。我比較喜歡的作法是 socket programming,在兩個 process 間建立 network socket,因為這樣的概念最簡單(我一向很懶)。

問題是,使用 network socket 會造成效率上的浪費,儘管兩個 process 都在同一台機器(localhost)上,但是還是會到 kernel 的 TCP/IP Stack 裏面逛個一圈,這在執行上勢必會有效能的浪費。既然都已經在本機了,那又何必經過網路層的處理呢?今天要介紹的 IPC 技術就是一個解決這問題的方案: Unix Domain Socket。從下面的範例上來看,寫法和 network socket 幾乎一模一樣。所以就不多做介紹了,直接看程式吧。

#include <stdio.h>// for printf() and fprintf() #include <sys/socket.h>// for socket(), bind(), and connect() #include <sys/un.h>// for struct sockaddr_un#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>// for fcntl() #include <sys/epoll.h>intmain(int argc,char*argv[]){struct sockaddr_un unixSocketAddr;// Unix Domain Socketint unfd;// Unix Socket FDstruct sockaddr_un unixSocketDstAddr;// Unix Domain Socketstru…

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

如何利用 Wireshark 來監聽 IEEE 802.11 的管理封包