26
April
2009

學術圈與老鼠會0

一個老板一輩子帶出二十個博士畢業生應該不過份。假如只有十個人想在大學找教職職。

一個博士生在畢業之前,通常得生產一兩篇到數十篇不等的paper。在一些熱門的領域,像網路,論文的接受慮可能只有十幾percent,或更少。但是,期刊與會議的數量基本上不太有變化。(但垃圾期刊和垃圾會議應該會持續增加,以清理每日增長的垃圾paper。)

高等教育機構的數量大致也是不太變化的。像台灣十幾年前這種大量成長、產生職缺的情況,終究不會是常態。所以呢?每年製造出來的博士生要找教職當然就不容易了。

然後,一個畢了業的博士生進了大學當教授,馬上又要開始帶新的博士生。然後重覆以上的循環。

這不是老鼠會嗎?

7
November
2008

關於LISP0

關於窮舉法的一點想法…

會舉,比不會舉好。舉得太久沒完沒了,不如舉得恰到好處。
如果舉得沒完沒了,拿出剪刀來prune一下,看他停不停。
如果有錯,不要怪深度不夠。咳,堆疊的深度。

3
September
2008

Google Chrome瀏灠器的漫畫0

今天看到Google Chrome這個新的web browser的介紹漫畫。我不禁佩服Google這群工程師。

在一個強調multi-threading的好處的時代,他們反其道而行,用multi-process的架構來做瀏覽器。

不知道非資訊科系的使用者,看這些漫畫會不會看不懂,還是也能夠appreciate這裡頭漂亮之處?如果這樣的話,這個畫漫畫的工程師,不但知道自己幹什麼,還真正有能力表達到讓凡人也能夠看得津津有味!

至少,對我這個OS已經不知道念了幾遍的老資工學生來說,我是一路看一路拍案叫絕。看到OS教科書中的那些課題,在瀏覽器設計的過程中遇到、解決,所有學過的東西,忽然就鮮明起來了。

24
August
2008

助教交接0

花了好幾個小時的時間,把過去三年來秋季擔任助教這門課的所有作業通通修訂、列印了出來。解答與批改重點也都重新看過一次。還把上一任助教遺留給我的東西通通瞄過一次,該整編的合併,該丟的丟。

希望接我工作的那位助教,可以節省不少摸索的時間。不過,我想如果他沒有把所有的作業都自己做過一次,大概根本不可能appreciate我所做的事情。問題是,作業之多,到我今晚數了一下,才發現平均每週超過一個作業。

不過,不知道這學期要改成用Office 2007,過去這麼多年來(我手上最老的列印本,有一份1997年留下的作業說明)所累積的材料,會變成什麼樣的面目,會存活下多少。

我只能說,祝這位助教好運了。

9
June
2008

作業系統 硬體 組合語言0

最近拖著身體把80386 protected mode有關的處理器設計與組合語言的支援給看完,才終於解答了我許多積壓在心中超過十二年的疑惑。舉幾個以前念OS時的問題:

一般用戶的程式不能執行privileged CPU instructions,須透過system call為之。這只不過是一個program counter的切換,在excution path上的指令(instructions),難道就不能直接拷到用戶的程式?保護的柵門到底設在哪?執行的privilege level又在哪裡切換?

「先佔式(preemptive)多工作業系統」如何可以做到preemption?作業系統是程式,用戶的程式也是程式,CPU只有一個,用戶程式不讓,作業系統的程式要如何跑起來叫用戶的程式休息?第一個天真的想法是timer interrupt送出後會喚醒OS程式。那,用戶的程式是先由硬體直接swap out嗎?硬體怎麼知道在目前的OS下,一個user process的PCB (process control block)裡有哪些資訊要存?又怎麼知道去哪兒locate OS的code?第二種修正的天真想法是timer interrupt造成對應的ISR (interrupt service routine)被執行,ISR去叫出OS的scheduler和dispatcher。等等,excution path是從user program被中出中斷到這裡來,現在要叫scheduler來跑,是不是自己要先swap out出去?那麼誰來跑IRET(interrupt return) instruction?自己怎麼swap out自己?(program counter存完後馬上又變了。context switch如果無法一個動作做完,一邊存狀態一邊狀態就又改變了。)

在講virtual memory時,有許多硬體(MMU; memory management unit)需要支援的功能。80386上長什麼樣子?

user thread與kernel thread的對應有三種。1:1,m:1,m:n。看起來很合理。它們的程式碼和硬體互動具體是怎麼一回事?

如何利用硬體的支援來實作multithread?

現在,把80386的segmentation、privilege control、paging、exception handling通通咀嚼過一番,以前OS恐龍本念了十遍以上依舊想不通的許多問題,現在(大概)全都豁然開朗。

以前,Donald E. Knuth講了一句話:「I really don’t think that you can write a book for serious computer programmers unless you are able to discuss low-level details.」(Knuth的演算法聖經The Art of Computer Programming是用組合語言寫範例程式。)

以前,資工教組合語言時,因為時空的環境(當時在雖有pentium,但PC上只有DOS與Windows 3.1,Linux剛誕生,AT&T的BSD官司也還沒結束),組合語言的課重在與高階語言的連結以及單一指令的講解,和一些議題如定址(addressing)、I/O。我們甚至沒有好好談到interrupt的處理,更沒有提80386的特有功能。

現在的我,如果是大學生,在以前那所學校重上這些課,會不會還有同樣的問題?不過,我倒是能肯定,我當年雖因鑽入這些牛角尖不得解答而放棄學業,如果當時這份(相對來說)易懂的資料放我面前,我大概鑽到一半,同樣會放棄學業吧!?

By the way,推薦這本二十年前的好書!James Turley, Advanced 80386 Programming Techniques.

26
May
2008

thread and distributed object0

寫過multithreading和distributed object的projects,現在翻出恐龍本的OS教科書,終於有一切原來如此的感覺。

十多年前,還沒有Java (which supports both),Windows也還沒有multithreading,甚至是multiprocessing還是non-preemptive,distributed object主流是CORBA和COM,資工的學校教育,也沒有在講OS理論前先讓大家有實作的經驗。一切便如天馬行空不知所云。

至少,對於我這種缺乏抽象思考能力的人,是這樣子。

現在資工(至少我的母校如此)的學生,不管課程的安排,或是現今科技的availability,真的比我們當時幸福的太多了。

乃至數學的學習,現在有方便的繪圖和代數計算工具,光這一點,就不知能解決掉多少當時微積分帶給我的挫折。

6
May
2008

意外的收穫7

這學期結束了,最最意外的收穫,不是這學期沒有A,而是我終於把所有的letter grade給集滿了。

以後,我的letter grade也要開始吃素。不再雜食了。

8
April
2008

抄襲1

一個助教,一年領一萬五美金加上學費豁免,沒有抓到學生作弊,是助教瀆職。

一個助教,抓到學生作弊,卻沒回報老師,是助教瀆職。

一個老師,聽到助教說有學生作弊,卻怕麻煩不想處理(在UF,作弊是會在學生法院上雙方對簿公堂的),是老師瀆職。

一個老師,每年作業不換、project內容不變,讓學生可以輕易作弊,是老師瀆職。

一個學生,遠渡重洋受教育,卻拿國內念大學的那一套出來,是自己的墮落與與初心的遺失。

以上,我通通聽過或看過。

大部份的抄襲,發生在同一種族的學生之間。在彼此之間,是公開的秘密,卻又在這方面展現十足的團結,不會讓非我族類知道。

這一篇,只能寫到這裡了。

6
April
2008

HTML教學0

相關舊文:尋找HTML編輯器

後來,我找到了blumentals.net這家位在拉脫維亞的小軟體公司所寫的HTML編輯器。這真的是網頁美工和程式設計師的好幫手。讓我得以在一半的節數,比去年多教將近一倍的內容(3-4倍的效率)。而且,我相信學生真的有懂。

採用他們的HTMLPad 2007的結果,不但讓學生省掉許多冤枉時間,而能學更多,也讓我省掉許多力氣。去年,大部份的時間,我花在等學生打字、幫學生找出silly typos上頭。今年,我幾乎再沒遇過這樣的狀況。學生也沒有因為HTML的門檻降低,而減少理解,因為這個軟體不是「所視即所得」,所以學生還是學會了所有我教過的HTML tags, attributes, 和CSS。因為這套軟體,我有辦法讓學生專注在基本觀念和理念的學習。

如果能多給我一到兩節課(這學期只花四節在HTML上),我大概可以教完所有我對HTML/CSS的所學(其實大半都嘛是為了教課而學的),用我自己消化過的話。

這裡有我的上課大綱,其中4/9的outline仍會更新:
Read the rest of this entry »

26
March
2008

研究者的焦慮1

一位學長在他的blog裡的一篇文章,把我從碩士班以來對於研究一事的焦慮都寫了出來。我一直覺得自己不對,這麼多年來卻始終沒有辦法像他這麼精準地把原因描述出來。

20
March
2008

Optimal Binary Search Tree0

自己的資格考都顧不活了,竟然還有辦法回答別人optimal binary search tree的問題,把所有的符號在幾分鐘內通通回憶起來,公式通通導了一次,並且與實際的例子做連結。

也許下一次,我應該帶頭把要考的人抓來教。這樣應該自己就可以考過了。

9
March
2008

PATRICIA0

Horowitz的資料結構教科書裡,末章介紹的一個樹狀資料結構,叫作PATRICIA,是1968年由D. Morrison發表的。

Morrison的官方說法,PATRICIA是Practical Algorithm to Retrieve Information Coded in Alphanumeric的縮寫(acronym)。

2000年時,我第一次讀到這個資料結構,心裡想的是:「你拿這話去騙你的學生吧!」我始終相信,Patricia一定是他老婆、女兒、前女友、某個沒追到的女友的名字才合理。不然哪有人會去想這麼長的縮寫語呀?

29
February
2008

遺失的論文1

2003年初投搞出去的一篇論文,始終沒有回應。

今天,收到以前老板來信,叫我週一前把格式改成另一個會議的格式,然後submit出去。

我已經洗手了,怎麼可能再叫我去揀垃圾?就是為了洗手才出國的呀!

妓女比論文品質不佳的學者,對社會的貢獻還更大。可惜,我沒本錢當妓女,能力也只能生品質不佳的論文,悲哀!

27
February
2008

報告前0

相關舊文:考前

從過去的日記為證,今天的狀況不是第一次了。

吃下的東西不知凡幾,一罐香椿醬(how much salt and oil?),現在心跳好快。可惜沒有血壓計。

絕對不是因為怕英文報告,因為以前在台灣念研究所時,第一次group meeting我就曾用英文報過一整小時。

說實話,實在是逃避心態罷!

24
February
2008

Data representation is the key1

花了過去四天把這學期一門課的sudoku project寫完80%。目前,程式已經實作了「Sudoku Solver」網站上所提的四種策略

第一天,把sudoku(數獨)的合法性檢查寫完,這樣已經可以解出某些最簡單的問題了。

第二天,雖然寫了一天一夜,卻幾乎停滯不前。只實作了「看起來」最簡單的策略A。到第三天才寫出正確能跑的程式。這時候,程式已經可以拿來解該網站上2/3的「hard sudoku」了。這其中,大部份的時間都在修改維護統計資料的規則。

第三天後半與第四天,如行雲流水,一口氣實作了策略B-D。雖然有些沒有寫完N=3與4的情況,但已經足以解出所有三十個「hard sudoku」了。

第一次將project公布時,老師講解完sudoku的規則後,一再強調要大家仔細想想。「Data representation is the key!」

如是如是,真是這樣!如果不是(幸運地?)定義了好的資料結構,實作後面幾個策略時,我一定會東一個包、西一個包。因為,這些資料結構在後面所有的策略都會一再始用到。而我停滯的那一整天,正是在一步一步地核對出它們哪裡出錯。

目前,策略F我也已經完成了草稿,可以很清鬆地寫出來。

Logic programming paradigm真是有趣!

兩年前的十二月,從好友的婆婆知道sudoku這遊戲。沒多久,看到當時一個初來美國的朋友每天在玩,我心中頗不以為然。我總覺得對於一個電腦工程師來說,所有有鐵則可循的事,都要讓他自動化。雖然不會每個人都同意—消磨時間也是一種樂趣嘛!只是因為已經有人寫出來了,我課業與工作自顧不暇,也就不再想過這個問題。

這學期聽到有課程以它為project,讓我整個性奮了起來。與當時的算法(algorithm:)不同,用的語言更是不同,收穫也完全不同!(當時初步的構想,是解聯立方程式。現在看起來頗蠢。)

相關網站:

21
February
2008

Sudoku Solver2

用CLIPS這套專家系統開發工具來寫Sudoku解法產生器.

一個晚上通宵, 寫了一個能作最簡單檢查, 足以解初級Sudoku的版本. 整個程式加起來大概只有幾十行. 我想如果用Java或C, 恐怕要長很多.

不過, 程式雖短, 卻是行行血淚.

9
February
2008

差一點0

只差一點,我這學期就會捲進一個完全沒有修的課的project。

思忖過去的經驗,我決定絕不可再讓自己下海,只在岸邊先教基本動作(debug、程式架構),並且吆喝指引目標。但是出了狀況,我不可以剝奪救生員(TA)的表現機會。:)

13
January
2008

異地而處0

當了會長,與我的副會長還有幹部群開始運作,才終於深刻地體會自己的老板要的是什麼、期望在哪裡。

才深深明白我與老板間,是個多爛的屬下與同事!

沒有想到這是我收穫最大的一件事。

昔者已矣,來者可追。


然後,我做不好的,我還是得要要求我的幹部做到。

丟臉。

2
December
2007

程式抄襲技巧 之一3

Eclipse裡,右鍵選單中,有個「Refactor」子選單,裡頭的「Rename…」是所有想程式抄襲的人,第一個要學會的工具。

先到任何一個java程式檔,標選一個method的名字,然後rename,所有該project的該method call,全部都會自動修改。

同樣地,class name也要改。下一個改的是field names和local variable names。

總共時間,應該不會超過二十分鐘。

我說過,好好花點時間學Eclipse,不會後悔!:)

待續…

28
November
2007

比囉唆0

PLP的最後一次作業,班上一位強者同學給了我他的版本讓我「參考」。好吧!我承認本來是要抄的。

我跟同學V討論時,嘴裡抱怨著:「這個男人真是囉唆,答案寫得又臭又長。」

更重要的是,我昨天就只出他其中一題肯定寫錯了。另外還有一題我也直覺認為他寫得不對。

只是,昨夜已經累到沒力思考,只得將程式先交出去,手寫部份遲交。

晚上,終於花了兩小時,把自己的論點寫(formulate)下來。結果,篇幅是那位強者同學的將近三倍。

還好,我不當男人久矣…