發表文章

目前顯示的是 十一月, 2012的文章

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

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

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

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

如何做個好的測試工程師

你心目中的測試工程師是做什麼的?或許很多人的答案是「按照測試文件的步驟進行,並且產出報告」。事實上,我相信這是大部分的老闆心中所想像的畫面,無怪乎想到測試工程師的時候都直接聯想到廉價的工作(恩,聽說某家科技公司把所有的QA部門都裁了 ...)。講真的,這樣想的人,也太小看測試工程師了。下面我列出我心中對測試工程師的標準,這樣以後再有新進同事近來擔任測試工程師的時候可以拿來當作教材。話先說在前面,這只是我個人的經驗所整理出來的文章,所以難免會有缺漏,以後有想到的話再補充吧(還要加上我有動力的話 ... )

要做出有用、明確的報告。

什麼叫作有用、明確的報告?先講一下我之前的故事(之前好像也在 Blog 提過了,不過發生過很多遍,人物也都不同)。有人找我處理電腦上的問題(這似乎是念CS的原罪),只留下一句話:「電腦無法上網了,會不會是中毒了啊?」這是我最討厭聽到的問題!(不過已經見怪不怪了,所以還是可以控制情緒)為什麼討厭這樣的問題,因為理由太多了!!就好像跟醫生說肚子痛,可能發生的原因從脹氣、拉肚子,一直到胃癌都有可能,一句肚子痛,你是要醫生給你什麼答案。電腦無法上網,可能是電信公司的問題(我最常推卸的對象,真是對不起電信公司,不過這可以讓我用最短的時間結束對話)、網路設定問題、家用網路設備的問題,當然也有可能是中毒。那不公平,一般人沒有相關的專業知識啊,所以醫生要負責做檢查的工作!沒錯,醫生要負責做檢查,在軟體產品上,做檢查的責任就是在測試工程師身上。

我在這邊說的報告,不是那種紙本,要寫的很囉哩囉唆滿足客戶需求的那種文件(當然這個技能非常重要),而是在跟開發工程師回報的時候,要很明確的講出到底發生了什麼狀況!死亡信息(Log)有哪些?是 Kernel Panic 還是 Segmentation Fault?請不要以一句「系統掛了」來總結所有的 Bug!並且還要根據 Log 做出初步的判斷,不要把開機以來的幾千行 Log 看也不看就直接貼給開發工程師。

這不公平,我只是小小的測試工程師,我又搞不懂那些 Log 在寫什麼,整個產品的功能是什麼、架構如何?Well,一般來說,Log 寫的是英文吧?雖然我不否認很多開發工程師,包含我在內,Log寫的很爛,但還是可以讀吧?不了解整個產品?那你憑什麼擔任測試工程師?要重複操作,我找個國中生來就好了。測試工程師不能夠以不了解系統作為藉…

UDP Broadcast Socket Programming Example

今天要紀錄的程式是 UDP Broadcast Socket Programming。其實理論上只要設定 Option 就好了,根本不需要把整個程式碼放上來,但是呢?因為之前紀錄了 TCP 的 Socket Programming,因為偷懶沒有寫一個  UDP 的版本,所以就用這東西來代替吧!

Server:


#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 <fcntl.h>// for fcntl() #include <errno.h>#include <sys/epoll.h>#define BUFSIZE 1024 // Size of receive buffer staticint make_socket_non_blocking (int sfd ){int flags, s; flags = fcntl (sfd, F_GETFL,0);if(flags ==-1){perror("fcntl");return-1;} flags |= O_NONBLOCK; s = fcntl (sfd, F_SETFL, flags);if(s ==-1){perror("fcntl");return-1;}return0;}intmain(int argc,char*argv[]){int sockfd;// Socket descriptors for serverin…

靈修心得~上帝的榮耀

好久沒寫靈修分享了。這到不是說沒有靈修的收穫,或是沒有值得紀錄的亮光,但總歸一個字:「懶」。今天晚上因為要靈修分享的關係,所以就把前一陣子的靈修心得整理紀錄如下。希望下一篇不會隔這麼久 ...

經文:以弗所書第一章

有時候聖經讀久了,看到某些經文、某些章節,常常就有一種直覺說:「這段就是在說 ...」而沒有好好的去思想。最近因為靈修進度的關係,我來到了以弗所書,直覺就想,這是一卷談論「合一」的書信,也沒想太多,事實上,有段時間的靈修甚至只是為靈修而靈修。沒想到開始讀第一章的時候,有幾個字不停的浮現出來:「神的榮耀」

1 奉 神旨意,作基督耶穌使徒的保羅,寫信給在以弗所的聖徒,就是在基督耶穌裡有忠心的人。
2 願恩惠、平安從 神我們的父和主耶穌基督歸與你們!
3 願頌讚歸與我們主耶穌基督的父 神!他在基督裡曾賜給我們天上各樣屬靈的福氣:
4 就如 神從創立世界以前,在基督裡揀選了我們,使我們在他面前成為聖潔,無有瑕疵;
5 又因愛我們,就按著自己意旨所喜悅的,預定我們藉著耶穌基督得兒子的名分,
6 使他榮耀的恩典得著稱讚;這恩典是他在愛子裡所賜給我們的。
7 我們藉這愛子的血得蒙救贖,過犯得以赦免,乃是照他豐富的恩典。
8 這恩典是 神用諸般智慧聰明,充充足足賞給我們的;
9 都是照他自己所預定的美意,叫我們知道他旨意的奧祕,
10 要照所安排的,在日期滿足的時候,使天上、地上、一切所有的都在基督裡面同歸於一。
11 我們也在他裡面得(或作:成)了基業;這原是那位隨己意行、做萬事的,照著他旨意所預定的,
12 叫他的榮耀從我們這首先在基督裡有盼望的人可以得著稱讚。
13 你們既聽見真理的道,就是那叫你們得救的福音,也信了基督,既然信他,就受了所應許的聖靈為印記。
14 這聖靈是我們得基業的憑據(原文作:質),直等到 神之民(原文作:產業)被贖,使他的榮耀得著稱讚。
15 因此,我既聽見你們信從主耶穌,親愛眾聖徒,
16 就為你們不住的感謝 神。禱告的時候,常題到你們,
17 求我們主耶穌基督的 神,榮耀的父,將那賜人智慧和啟示的靈賞給你們,使你們真知道他,
18 並且照明你們心中的眼睛,使你們知道他的恩召有何等指望,他在聖徒中得的基業有何等豐盛的榮耀
19 並知道他向我們這信的人所顯的能力是何等浩大,
20 就是照他在基督身上所運行的大能大力,使他從死裡復活,叫他在天上坐在自己的右邊,
21 遠超過一切執…

Linux FD Handler 以及 Timer 機制

好久沒寫文章了 ... 怎麼覺得每次要寫東西都有這種感慨 ... 今天要紀錄的東西是為了工作上的案子所打造的 API。這個案子講穿了就是要實作一個 Protocol。既然是 Protocol,毫無疑問就要去處理封包收送啊、Timer啊,這一類的問題。以前在開發的時候是把這些問題全部丟給 Quagga (Quagga Software Routing Suite) 提供的工具來處理,在更早以前有用過另外一套忘記哪個案子裏面提供的 event loop。現在,龜毛如我,嫌 Quagga 太肥,另外一套又找不到(沒看到我連名字都忘了嗎?),所以只好自己來囉。

整個架構預計採用 epoll 的機制,這樣 socket的處理就完成了;那 Timer 呢?根據研究以後,Linux 有提供 Timerfd 的接口,簡單來說,就是設定定時器,時間到的時候, Linux Kernel會主動送出資料給 Timerfd 的 File Descriptor ,所以有收到東西就知道有 Timeout 的事件發生。這個機制最大的好處是可以配合所有的 FD 處理機制,不管是 poll、select 或是今天我採用的 epoll。

下面就是我設計的 API:


#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/epoll.h>// For epoll#include <sys/timerfd.h>// For timerfd#include "fd_handler.h"// Static Variablesstaticint epfd = -1; // EPOLL File Descriptor. staticint epfdMax; // Max no of FD.staticstruct epoll_event *pEvents = NULL; // Used for EPOLL.staticint …

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

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

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