統計學 – 交大修課心得

calculator

課程資料

統計學

開課:陳志榮老師

修課年度:101電機學院

使用的課本是《Engineering Statistics》

教了如下章節:

  • Chapter 1. The Role of Statistics in Engineering
  • Chapter 2. Data Summary and Presentation
  • Chapter 3. Random Variables and Probability Distributions
  • Chapter 4. Decision Making for a Single Sample
  • Chapter 5. Decision Making for Two Samples
  • Chapter 6. Building Empirical Models

使用投影片上課,老師通常會針對字面上做詳盡的解釋,並且對許多公式用黑板運算與證明。下課找老師問問題或者寄 email 給老師都會得到熱心的回答。

評分方式

評分方式是:

  • 點名五次: 2x5 = 10%
  • 作業: 30%
  • 期中考: 30%
  • 期末考: 40%

總分 110%,超過百分以百分計,記得好像 50~60 分都算 60,其餘不調分。

點五次名當作加分依據,點名的時候會開一份有照片的文件點名,若遲到而沒有點到則不補點,不過若有公事等原因可以和老師說明。點完5次名後的第一堂課可以發現出席率顯著的下降。

作業的話就是從課本挑習題。因為有很多統計分析,有時也要製作圖表,所以單純用手算或者使用計算機可能都不太有辦法。因此主要是使用統計軟體,課本是使用 Minitab,這套學校有授權可以下載使用。不過老師也有推薦 R,據說在學術界滿常用的。

自己因為上課有些聽不太懂,所以大部分是利用做習題的機會才弄懂課本上教的東西。說起來做練習幫助真的滿大,一開始曾試圖用閱讀的方式預習這本課本,也沒有太大成效。有鑑於習題眾多若想一一練習恐難持續,在此提供本學期作業題號,供預習的人參考:

  • Chapter 4: 13, 14, 39, 42, 44, 59, 60, 62, 65, 67, 71, 75, 76, 83, 95, 96
  • Chapter 5: 3, 11, 13, 22, 23, 41, 44, 46, 55, 62, 63, 66, 67, 68, 70
  • Chapter 6: 4, 10

這堂課的內容應該要有修過機率才比較容易理解,不過如果只是要拿到考試成績的話應該不難。考試幾乎就是考背公式,通常是 50 格,一題兩分。期末考有考一題兩分的證明。考試範圍只有 4-4~4-9, 5-2~5-7, 6-2,不過上課的範圍較多,尤其期初會上不少機率,老師說是當作複習。期末考前的時候因為有點背不下去所以突然一時興起的做了一部分公式的表,考試的題目其實就類似表中 Formulas 部份的內容,看完以後或許對於考試內容就有些感覺了:〈Statistics Notes〉

結語

認真說起來這堂課的負擔不會太重,不過每次作業其實都要花很多時間才能寫完。老師說寫考卷的時候如果有未定義的符號都須自己定義,所以筆者每此都寫了很多,幾乎都是最晚交卷的十人之一。不過總覺得可能不用寫到這種地步,因為在確認成績時其實發現普遍分數都還不錯。

還是要強調寫作業的重要,筆者在做習題的過程中對假設檢定的了解增加不少。為了準備考試而背公式時雖然會有點枯燥,不過因為不會有太多變化所以也很令人安心。

上完以後對於以前機率上學到的東西可以做什麼應用多了一點點認識。

語言學概論(一) – 交大修課心得

languages

課程資料

語言學概論(一)

開課:潘荷仙老師

修課年度:101外文系

使用的教科書是《Language Files》,雖然看起來很厚不過其實語言簡練十分易讀,順帶一提這本書似乎有在台灣出版,因此相對其他外文教科書而言特別便宜,甚至在某些網路書店上訂似乎比華通的團體價還低廉。(不過筆者發現的時候已經來不及了)

國內的語言學概論書籍除了這本外通常好像還會用《Contemporary Linguistics》《An Introduction to Language》

據稱最後一本是最簡單的,《Contemporary Linguistics》則最難懂。筆者曾試圖讀過《Contemporary Linguistics》,確實有點難上手。根據觀察,交大外文系每年語言學概論常會由不同老師開課,使用的書籍也會因而有差異。雖然上下學期也是不同老師,不過同一屆會接續使用同一本課本。

這學期一共上了4個章節:

Chapter 1: Introduction, File 1.0~1.4

介紹語言學的研究課題,提出一些常見的語言迷思。介紹如何界定語言,以及 Design features of language (書中版本和 Wikipedia 上略有不同)。

Chapter 2: Phonetics, File 2.0~2.3, 2.5, (2.6)

介紹對語音的研究,主要重點會放在發聲的部份,會敘述人的口腔等發聲構造,並且根據發聲特性分類英語中的子音母音

像是子音是以 Voicing, Place of articulation, Manner of articulation 等分類。母音則是以 Height, Tongue Advancement, Tenseness, Roundedness 等分類。

課堂上也會介紹 International Phonetic Alphabet (IPA) 這個音標系統。最後還有講到一些其他像是重音語調、長度等發音特性。

Chapter 3: Phonology, File 3.0~3.3, 3.5

這章則會介紹如何分析各種語音在語言中的分佈以及角色。提出人類會將數種不同語音當作同一種語音來理解的現象,區分 Phonemes and Allophones 的差別,並簡介 Phonological Rules。

Chapter 14: Animal Communication, File 14.0~14.3

介紹動物溝通方式和人類語言的差別,觀察幾種動物,包含小鳥和蜜蜂的溝通方式。並介紹一些研究者嘗試教導動物語言的計畫以及結果。

期中考前的範圍是第 1、14 章和第 2 章的前部份,這部份大約是對語言研究的簡介。期末考則注重在第 2、3 章,尤其注重於音韻分析。

上課方式

上課主要是透過投影片上課,老師並不會提供投影片下載,不過因為內容在課本上都有所以影響不大。上課的速度不算快,一堂課的內容可以很快的複習完,筆者在這學期中已經把課本有上的範圍重看許多遍。

除了上課以外,期中的時候有請國外學者演講。也曾觀看過跟教導動物語言有關的影片,並且撰寫相關作業。另外期末也有看電影,不過來不及看完。

比較特別的是曾經有一堂課老師要大家把棒棒糖放在舌頭上並且發聲,以觀察各種發聲時舌頭的位置,不過筆者一直有些笨拙無法感覺出什麼所以然。

個人覺得老師講課的水準很高,很容易讓人專心以及理解。雖然老師有時會展現出很嚴格或者有點兇的模樣,不過習慣以後會發現老師人其實不錯。

進入 Phonology 以後,會花很多堂課的時間解問題,這時會按照學號輪流請同學上台寫題目並一起檢討。此外大考前有段時間會讓同學問問題以準備考試。

評分方式

配分方式為:

  • 小考: 6% x 4 + 5% x 2 = 34%
  • 期中: 30%
  • 期末: 30%
  • 一份作業: 6%
  • 演講時提問加分: 2%

不過除了期中期末考是一開始就確定以外,其他部分是看考了幾次小考才決定的。每次考完E3上就會顯示自己的分數,因為不調分所以到了後期就可以大概知道自己期末成績是多少。

平時不點名,只有演講那天老師說不來就直接當掉。筆者覺得蹺課的話太可惜了,每堂課真的都值得一聽。因為是大一的課所以應該不需要什麼基礎。不過因為考試作業都要用英文回答,所以英文能力好的話應該會有幫助。這堂課雖然是必修不過學分數一學期只有兩學分,所以份量不會很多。

因為考試次數很多所以平常就常常會複習課本,老師還曾經假裝要考試來讓大家唸書,結果原來是虛驚一場。

考試題目基本上都不會太難,小考通常每次只有一兩題,只要有認真讀課本應該能有把握。期中考是直接從課本習題中抽考,期末考的題目則是與課本習題題型相同的變形。題型有申論、填充、分析、名詞解釋等等。一些子音和母音的發音特性以及 IPA 音標都要背得很熟,這樣在作分析題目的時候會比較方便。

唯一的作業是要分析某個叫 Koko 的猩猩的手語逐字搞,老師好像是為了避免抄襲所以偏好以小考來代替作業的作用。不過因為期中期末會考很多課本習題,所以其實習題幾乎都會寫過一次。也因為過程中花了很多時間研究課本習題,就順便分享出來供大家參考:〈Language Files 11th Problems〉(不過正確性無法確認)。寫完以後會感覺考試的題目比習題簡單一些。

結語

因為是孤身一人到外系修課,班上幾乎也沒有認識什麼人,修習起來真的難有照應。然而,自己覺得這真的是一堂上起來很開心的課,好久沒有課能讓我如此專心了。學過各種語音的發音方式後似乎能釐清發音上的一些疑問(雖然不見得對正音有幫助就是),而進行音韻分析也讓我對語言的認識多了幾分。筆者恰好沒有認真背過任何音標,第一次背就是 IPA,發現配合發音特性分類的話其實很容易記憶。

另外一個雖然應該早就知道不過上了課才又想起的是語言和文字的分別:「小孩總是能自然的學會語言,但所有的人都需要教導才能學會閱讀與寫作。」或許這也能解釋一些外語學習的現象吧。

一開始聽到語言學確實會有點畏懼,不過結果對我而言算是滿有趣的學科,雖然其實也只有碰觸到最粗淺的部份啦!

這堂課下學期應該會繼續進入構詞和句子的結構分析簡介。

電腦安全概論 – 交大修課心得

security

課程資料

電腦安全概論

開課:謝續平老師

修課年度:100資工系

這堂課使用的教科書是《Introduction to Computer Security》,這本課本寫的非常清晰易懂,讀起來十分流暢。上課內容就是針對各種資安議題做簡介,包含:

  • Physical Security
  • Operating Systems Security
  • Malware
  • Network Security
  • Web Security
  • Cryptography
  • Security Models and Practice
  • Distributed-Applications Security

可參考書的目錄:〈Table of Contents〉

老師說電腦安全概論是資安系列中最基礎的課程,若上完以後對其他相關課程應該比較容易上手。不過其實筆者因為必修中有密碼學概論,所以反而是後來才修電腦安全概論。這兩門課都是資安學程的課程。

上課方式

上課的時候使用投影片講課,老師的步調適中,且講解也很易懂。如果有疑問,老師很歡迎發問。除了上課以外,也曾邀請講者前來演講,主題跟手機安全有關。

老師說有太多人試圖攻擊他,所以不要寄 email 給他,多半收不到,最好直接打電話。如果有問題也可以詢問助教,他們都很樂意回答問題,而且老師也說是能力非常優秀的學生。

記得老師曾說過他有學生在 Mozilla Taiwan 工作,除了技術前瞻以外據說薪資也非常優渥,除此之外也有不少學生擁有許多優秀的成就,看得出來老師很以他的學生為榮。

考試作業

這堂課有三次期中考,學期初就會公佈考試的日期。考試內容偏重觀念,有簡答、分析、申論等等。可以感覺到老師出題有特別挑選,所以幾乎不會有需要大量背誦的題目,再加上助教都不吝於給分,只要對課程內容有一定理解,應該不難拿分。

有四次小考,通常不會事先通知,而會在上課中突然考試,通常只考一題至兩題。主要是複習性質,所以占分不高,取三次最高分。

平常不點名,只是因為有突擊小考所以如果蹺課還是有差,而且老師有時會考一些只有口頭有講而課本和投影片都沒有的東西,所以有聽課還是比較好。

這學期的作業有兩個,主要是做些分析並撰寫簡短的報告。第一個是撰寫暴力窮舉密碼的程式,以及說明如何防範暴力破解密碼。第二個則是利用 Nmap 掃描自己的電腦,並簡單分析。

每年的 projects 主題都不相同,每個 project 之間都有些許的關聯性,最後將所學組合成一個大程式。沒有分組,每個人交一份作業。這學期內容主要是透過 Windows API 實作一些功能,來完成一個鍵盤測錄程式,程式是使用 C++ 撰寫。

第一個 projcet 是透過 Winsock 和伺服器建立 TCP 連線並交換指定訊息。

第二個 project 是透過 Hooking 的方式測錄使用者的鍵盤輸入。

第三個 project 則是實作完整的 key logger 以及對應的伺服器程式,程式會測錄鍵盤輸入然後跟伺服器建立連線,透過 RC4 將結果加密並傳送到伺服器上。這個 project 中同學也可以實作各種加分功能,像是開機自動執行,隱藏程式,支援斷線重連等等。

結語

這堂課在各方面而言都非常值得,老師和助教人都很好,講課也很不錯。考試主要考觀念,所以不用太多背誦,只需理解,同時又不會改的太嚴。作業不會花上太多時間,但是又可以讓人學到東西。除此之外,給分也相當不錯。而且除了教材以外,在課堂上偶爾也能聽到一些有趣的消息。

目前資安的議題真的非常值得去接觸,老師也說擁有資安背景的人在業界是很吃香的。而據說在台灣,交大的資安課程資源也是數一數二,真的推薦大家來上這堂課。

正規語言概論 – 交大修課心得

課程資料

正規語言概論

開課:黃廷祿老師

修課年度:100資工系

這門課的課題是基礎的計算理論,研究什麼是電腦的能力和極限。介紹各種計算模型,例如 DFA, NFA, PDA, Turing machines 等等,以及其相對應的正規語言,如 regular languages, context free languages, Turing-decidable languages 等等。也會探討問題間的 Reduction 以及問題的 Complexity。使用的課本是《Introduction to the Theory of Computation》,更多相關議題可參考:〈正規語言概論〉

上課方式

上課是用老師自己編的講義作為投影片講解,有時也會配合課本的頁面。老師上課時常會點同學回答,如果有同學打瞌睡他也會熱心的叫醒大家。老師會記人的名字,筆者就曾被點名回答題目。有時老師的穿著頗為正式,下課時如果問老師問題,他會不耐其煩的細心講解。作業通常是先在上課時宣佈,其後再公佈於課程網頁上。他偶而會在上課時突擊小考。

他曾說資工有很多課會消失於時代的演進之中,但這堂課是歷久不衰的。

好像是因為有同學懷疑課本的文法,所以老師有一次和我們談談學習英文的重要性,還跟我們說學校的圖書館有 iPad 可以出借,介紹了可以在其上使用的 Merriam-Webster 英英字典(有真人發音),以及 New York Times 等讀物。

順帶一提,筆者也有用過《Longman Dictionary of Contemporary English》以及《Collins COBUILD Advanced Learner’s English Dictionary》,這三者都是非常優秀的英英字典,除了紙本外也都附有 PC 版光碟。關於英英字典也可參考:〈辭典選用的基本觀念〉〈哪本辭典的定義最好?〉

考試作業

這堂課的負擔其實沒有很重,通常是數個禮拜老師才會在上課時宣佈習題。習題內容為課本的練習題,每次都只有一兩題,很快就會寫完,有時老師也會自己出題。

基本上是不點名,只有一次發了問卷調查作為點名,不過因為上課時有突擊小考,加上作業都在上課先宣佈的關係,建議還是不要蹺課比較好。

突擊小考的內容多半是剛剛才講過的內容,所以上課專心能有回報。考題不難,通常只有一題,若對課本有一定的熟悉度,應能很快寫完。

除此之外,還有期中考和期末考。老師會在事前公佈考古題,從考古題看來,以前的考試型態似乎有不少證明題。不過這次的期中考意外的沒出證明題,而且題型偏向簡單,多數人都考的不錯。期末考出了幾題證明,不過也滿基本的,考古題感覺難很多。

考試題型分別為是非題、選擇題,及最後的簡答、計算與證明題。所有的考試都是 open book,可以自由查閱課本、講義,或任何自帶紙本參考資料。也因此考的題目都會有變化,不會跟考古題一樣。

結語

這門課使用的課本其實內容不多,而且由於較為理論與數學,可以邊看邊思考,閱讀起來並不枯燥,筆者暑假時利用通勤的時間,把課本看完了一遍,覺得幫助頗大。《Intro. to the Theory of Computation》這本書真的寫得不錯,算是在資工教科書中,十分易讀的課本之一。

由於老師出的練習題實在太少,令人感覺不踏實,所以筆者也將課本裡附有答案的習題寫過了一遍。老師並不會出一些刁難的問題,基本上只要細讀課本與講義,考試和作業應該都能把握。

資料庫系統概論 – 交大修課心得

computer

課程資料

資料庫系統概論

開課:梁婷老師

修課年度:100資工系

這學期因為 project 在期末考前一個月就要交了,所以課程也變更了一下順序。

期中考範圍:

  • Databases and Database Management Systems - 資料庫系統簡介,包含其和傳統儲存方式相比的優點
  • ER and EER Model - 使用圖像方式協助設計資料模型
  • Relational Model
  • Relation Schema Design and Functional Dependencies - 怎樣的資料表格設計才是好的設計?
  • Relational Design Algorithms and Further Dependencies

上半學期主要教我們如何將想儲存的資料,設計成適當的格式以儲存於資料庫之中。好讓我們可以開始設計專題的資料庫。後期就比較注重於資料庫系統背後的原理與架構了。

期末考範圍:

  • SQL - 一種標準化存取資料庫的語言
  • Relational Algebra - 關聯式資料庫數學理論
  • Disk File
  • File Structure - 資料庫系統檔案儲存的實做方式
  • Transactions
  • Concurrency
  • Recovery - 資料庫系統如何從當機中復原,保證資料狀態的正確性?
  • Query Optimization

使用的課本是《Database System: Models, Languages, Design, and Application Programming》,美國版書名是《Fundamentals of Database Systems》。選擇此書的原因是因為,老師覺得這本比起《Database System Concepts》容易理解。個人也稍微看過《DSC》那本,我也覺得《DSMLDAP》是比較好理解的。

不過由於老師上課投影片結合多家書籍內容,而其中許多採用的定義其實跟課本不太一樣。像是 primary index, cluster index 的定義等等,都與所使用教科書不同,需多加注意。而像是 extendible hashinglinear hashing 的操作,也和課本細節有些微不同, 考試可能會出現。

上課方式

用投影片教學。老師曾說每個讀資工系的人都有個夢想是創造自己的程式語言。她也曾想過。老師很希望有人問她問題,害羞的話寄電子郵件也無妨。

評分方式

評分如下:

  • 小考成績 15%
  • 期中考成績 30%
  • 期末考成績 30%
  • project 35% (proposal 20% demo 80%)

總分 110 分,所以就沒有調分了,最後平均約 72.5,大概有 16 的同學 90 以上。

小考方面總共有 7 次,有時會事先通知要小考,有時不會。7 次中,取三次高分採記。由於似乎也剛好有三次小考是有交的就直接算 100 分,所以算是點名性質,也因此不會另外每次點名。

小考可以 open book,也可和同學討論。期中期末都是 close book,這點跟去年不太一樣。

Project 的部份是1~2個人一組,以網頁界面實做一個資料庫應用程式。像是訂書系統、選課系統等等。期目自訂,一開始要先交一個 proposal,設計資料庫 schema 等等。接著再去 demo,並交一份介紹投影片。demo 感覺只要沒有什麼 bug,分數就不錯。排版應該不太佔分。

程式語言不限定,一般是用 PHP。不過特別規定不能使用一些太強大的資料庫套裝功能,而要自己直接用SQL操作。我們這組採用的是 Python 配合 Django,當然就不能使用裡頭的 models 了。

原始碼可以在 github 上觀看:animedbs。真的做了好久,簡直是心血結晶!

設計 SQL 時使用了 MySQL Workbench,感覺幫助良多。

結語

基礎方面,理論的部份還好。實做 project 的話,有些相關經驗會有幫助。我覺得這堂課修起來最辛苦的地方有兩個,首先是 project,似乎是一開始的 proposal 不小心把資料庫設計的太複雜,所以花了很久的時間才實做完成。尤其這學期我剛好修了不少實做課,所以感覺力不從心。不過可以使用任意語言這點滿令人高興的,一直想學 Django ,這次終於有機會使用。

另外一個辛苦的地方大概是定義不清的問題吧,因為投影片採用各家書籍,有時會出現不同定義,例如 natural join, equi-join,老師是說使用哪種定義都可以。不過也有一些是投影片只有一種講法,但和課本不同的情形。也有遇到公佈的小考解答解法跟老師教的其實不太一樣。助教表示僅供參考。另外就是 B+ tree 要怎麼刪除資料,課本沒有寫出詳細演算法,可能也得細心多看才能理解。這些小問題需要多加注意,所以有時滿困擾的。

平常這堂課都會有一些不同年級的同學來修。這學期應該是因為跟專題(一)衝堂,所以修課人數非常少,只有四十幾個人,相比起來是溫馨的小班教學。

辛苦的一學期終於結束了,覺得很開心。

嵌入式系統設計概論與實作 – 交大修課心得

digital-camera

課程資料

嵌入式系統設計概論與實作

開課:曹孝櫟老師

修課年度:100資工系

上課時針對嵌入式系統各方面探討,包含 bootloader 原理,OS,硬體,開發,業界情況,一些嵌入式作業系統、開發工具。實驗用的板子是是 ARM 平台,並常使用 linux 系統,所以也會提到這部份的課題。在 OCW 網站上有影音可看:〈嵌入式系統設計概論與實作〉

實驗部份主要是利用 PCM7230 板子做實驗,包含燒錄開機程式和作業系統等等。最後的實驗和專題則是在 Openmoko 手機平台上進行,不過老師說每年不一定一樣。

老師上課時有提到一本教科書《Real-Time Concepts for Embedded Systems》,內容主要是嵌入式系統實做的一些概念。如果要跟實驗比較相關的話,推薦《Building Embedded Linux Systems》,尤其對實驗 1 非常有幫助。

上課方式

上課主要是使用投影片上課。老師非常能言善道,有時一張投影片就可以講一節課。說話速度很快,內容也很有趣,有時會有一些經驗談。雖然因為不點名,而且上課內容跟實驗內容也沒有絕對關係,加上又不考試,所以後期學生較少。然而其實是很值得一聽的。

實驗的方面是以兩人為一組,每組會發一份板子等實驗用具。要自己找時間去做,然後在星期三晚上去 demo。由於一開始的實驗需要用到 RS232parallel port,但是最近的電腦很少支援,所以也有額外開放時間讓同學到實驗教室使用電腦。

評分方式

沒有期中期末考和小考,所有評分就由 8 次 lab 和最後的期末 project 決定

  • Labs 80%
  • Final Project 20%

有時候lab會有額外的 bonus 可以做,不過最後lab評分似乎是看大家做的情形來決定分數,所以如果大部分的人都有做 bonus 的話,就得做完所有 bonus 才能得到滿分。本學期課程中僅有 lab 3 的 bonus 可以讓分數超過該次實驗的滿分。

考試作業

每次實驗都需繳交報告,有時也得繳交原始碼。期末專題的部份,需繳交 proposal, slides, report,最後以簡報方式介紹自己的專題,並實際 demo。

一開始的實驗因為剛在熟悉環境所以每兩個星期交一次,後來的實驗就是每星期一次了。Lab 主題如下:

Lab 1 - Environment Setup/System Installation/Hello World

在 PC 上建立 PCM7230 平台的 toolchain,包含 gcc cross compiler, 編譯 glibc,以及燒錄開機程式, linux kernel,檔案系統等等。並執行 hello world 程式。

Bonus:

  • 撰寫 echo 程式透過 RS232 和 host 溝通。
  • 設定開機時自動執行程式。

Lab 2 - Bootloader

重新編譯 Intrinsyc i-boot-lite bootloader,加上自訂訊息,以及新增多重開機功能。實際燒錄至板子上。

Bonus: 研究 bootloader 的組語程式碼,並加上註解說明程式流程。

Lab 3 - Non-OS Embedded Application

移除 iboot bootloader 中的不必要功能,縮減大小。新增檔案加密功能,可以加密放置在 CompactFlash Card 上的檔案。

Bonus:

  • 在 CF Card 插入時自動加密其上特定或所有檔案。
  • UBoot bootloader 移植到 PCM7230 平台上。
  • 修改 UBoot,使其可以有監聽網路封包的功能。

Lab 4 - Windows CE

透過 Windows CE .NET Platform Builder 4.2 編譯並安裝 Windows CE 至板子上,透過 eMbedded Visual C++ 4.0 撰寫 hello world 程式至板子上。

Bonus:

  • 縮減 WinCE 作業系統大小。
  • 開機時自動執行 hello world。

Lab 5 - Linux Kernel and Root Filesystem

重新編譯 Linux 核心,並修改檔案系統,安裝 bash ,設定開機時自動執行程式。

Bonus: 透過各種方法縮減核心大小。

Lab 6 - Interrupt Tracing and Simple Device Driver Programming

在 linux 核心中插入訊息,觀察中斷發生流程。編譯範例驅動程式,觀察滑鼠移動時的印出訊息。

Lab 7 - Network Packet Tracing

修改 linux 核心以及 /proc 檔案系統,實做簡易網路封包監聽功能。

Lab 8 - Burning U-boot/Kernel/Root Filesystem for Openmoko

利用 Openmoko 官方提供的工具燒錄 bootloader / kernel / root filesystemNeo FreeRunner 手機上,然後執行範例程式,觀察重力加速器的數值。

Final Project

利用 Openmoko 手機平台,配合至少一種感應器,實做創意專題。也提供材料費可以購買外裝感應器。

結語

自己覺得整個課程最難的地方其實是第一個實驗,要安裝 linux 作業系統(也可安裝在 Virtual machine 上),而且因為要建立的 toolchain 平台是非常古老的版本,所以常會有奇妙的相容性必須解決,或者得使用非常古老的 linux 作業系統,途中常常要自己 Google 才能找到答案。

由於 RS232 的接頭實在太難找,但一開始沒有開放電腦教室,我們還曾去順發購買線材,從主機板上剛好有的 RS232 接頭接出來。(如果主機板完全沒有 RS232 的話,想買 RS232 卡會非常貴,不切實際)

後期的實驗大致上只要照著實驗講義做就不會有問題,如果有問題,通常是硬體有問體。(確實也曾遇到不少次硬體問題)不過在做 WinCE 實驗時,會有一些軟體似乎要在 Windows XP 上才能跑。(或者也可能是 32-bit / 64-bit 等問題)所以感覺修這堂課也重灌了很多次作業系統 (笑)

整體來說嵌入式其實不像之前學長們說得那麼辛苦,至少跟這學期的編譯器和人工智慧比起來似乎輕鬆不少,這學期也要感謝組員的幫忙所以才那麼順利。

微處理機系統實驗 – 交大修課心得

mother-board-581597_640

課程資料

微處理機系統實驗

開課:陳添福老師

修課年度:100資工系

撰寫在 microcontroller 上執行的程式,利用實驗版或甚至麵包版,實際使單晶片和環境互動。所謂的 microcontroller,指的是把中央處理器、記憶體、各種輸入出介面等等都整合在一起的小型計算機。

這堂課使用的微處理機為 8051,使用的語言一開始為 8051 的組合語言,但到後來多半用 8051 C 來做更複雜的操作。其他一些跟這門課相關的議題:〈微處理機系統實驗〉

上課方式

使用投影片上課。雖然官方上有分上課和晚上的上機時間,不過老師比較喜歡連在一起上,所以在開學時就把上課改成上機前的晚飯時間。上機課兩人一組,在工三二樓的電腦教室上課。

評分方式

沒有期末考和小考。由於學生要求,所以沒有期中考,所有評分就由 10 次 lab 和最後的期末 project 決定。Lab 做不出來都可以補 demo,不會扣分,不過每次的實驗報告要準時交。

評分比例和每次實驗的成績一直都沒有公佈,建議如果往後有機會修習的話可以向老師要求公佈所有原始成績。

考試作業

Lab 主題如下:

  • Lab 1 - LED:控制 LED 燈,使其輪流閃爍。
  • Lab 2:讀取按鍵輸入,在矩陣顯示器上顯示數字
  • Lab 3 - 七段顯示器 + 麵包版:操作 7 段顯示器,顯示特定數字。一開始先是實驗版上的顯示器,接下來要自己接麵包版。
  • Lab 4 - Keyboard I/O:用 4x4 數字鍵盤配合七段顯示器製作計算機。
  • Lab 5 - Timer/ Counter:透過計時器製作時鐘,透過計數器計算按鈕按下次數。
  • Lab 6 - 8051 Interrupt:透過外部按鈕中斷控制LED。透過計時器中斷控制七段顯示器,達成倒數時鐘。跟上次 Lab 很像,只是透過中斷,可以達成更精準控制。
  • Lab 7 - LCD:用 LCD 顯示數字,製作可調整的鬧鐘等等,這裡常會遇到硬體問題,值得注意。
  • Lab 8 - 8051 RS232 序列傳輸:透過 RS-232 接頭和電腦通訊,可以在終端機上顯示文字,也可以接收鍵盤輸入終端機的內容。在這 Lab 裡,使用的是 Windows 內建的「超級終端機」,不過其實用 PuTTY 也可以連,而且還可以用控碼等等來達成特殊效果,在期末專題時或可一試。近年的電腦,慢慢沒有 RS-232 接頭了…
  • Lab 9 - External Memory & ADC:將程式燒錄到外部記憶體,再讓 8051 從記憶體中開始執行。另外還有讀取光敏電阻/熱敏電阻的訊號。
  • Lab 10 - 8051 周邊 I/O:玩玩磁簧開關、蜂鳴器、繼電器等等元件,為專題準備。

最後幾個星期就是做期末專題,大家點子都不太一樣。這期間要上台報告兩次,一次是專題構想,一次則是最後講解專題。大家可以觀摩彼此的專題,最後還有觀眾投票,前幾名有神秘小禮物。

筆者這組的期末專題是一個搶答遊戲,利用 RS-232 從電腦終端機顯示題目,兩個玩家透過按鍵搶答,答對時玩家的四驅車會前進,誰先到達終點即獲勝,題目中也有利用蜂鳴器來實做的猜歌題。也有同學是做打地鼠遊戲。

結語

這堂課重要的就是實驗啊,所以都不點名,也沒有考試。注意到作業投影片和上課投影片常常當天才放上去,所以對我而言想提早準備也有點辛苦。

這門課感覺最花心力的其實是硬體問題,組語和 C 的語法其實不多。記得最後做期末專題時我們還用了烙鐵之類的,記得我烙了半天弄不好,還有熱心的朋友跑來幫我。

然後就是,買材料還滿花錢的,本來想用紅外線模組,不過失敗了,似乎限制頗多,不見得能達到想要的效果。

延伸閱讀

密碼學概論 – 交大修課心得

padlocks

課程資料

密碼學概論

開課:陳榮傑老師

修課年度:100資工系

探討加密背後的數學原理,如何在第三方可以攔截或假造訊息的情況下,加密訊息以保證僅有信任的人可以得知真正的內容。也會討論延伸的議題如 digital signature, secret sharing 等等。一些相關議題也可參考:〈密碼學概論〉

上課方式

老師會用自己的投影片,配合 Windows 筆記本的手寫講解,再加上課本頁面。平常不點名,只有一次要簽名,不過有事先提醒。由於要實做加密演算法,可能要稍微寫過 C/C++ 程式會較好。另外,若有學過離散數學的話,對 RSA中國餘式定理等等原理也會較熟悉。據說網路安全和電腦安全概論也和此課程有些重疊。老師也常向我們推薦下學期開的橢圓曲線密碼學,是這堂課中部份課題的延伸。這幾門課都是資安學程的課程。

評分方式

評分方式為:

  • Homeworks 25%
  • Midterm 35%
  • Final Exam 40%

作業主要分兩種,一種是紙筆作業,主要是一些計算題,考試大部分的題型都是作業習題,只有改動數字,所以作業值得反覆練習。另一種作業則是程式作業,實做各種加密演算法,透過 E3 繳交之後,助教會逕行批改,不過要一直到期末考結束後才知道自己的分數。似乎有不少人的程式作業分數因不明的原因偏低,不過向助教反應後都有提昇。

據稱每年的程式作業都會選擇不一樣的加密法,不過加密法的演算法老師都會給,這學期實做了 RC4 以及 SHA-1。筆者也把自己的程式碼釋出於 github,可以當作參考:100-crypto

考試方面,有一個期中考和一個期末考。總分都會超過 100 分,題目主要出自習題及考古題,不過也會有新的題目。期末考提前一個星期考完,所以最後一個星期都沒有課。

結語

老師說他本來沒有要教橢圓曲線密碼學,不過後來和助教討論之後,發現這學期同學的成績似乎比較好,所以最後就教了(笑)。筆者比較過兩個學期的期末成績,這學期的高分群真的比較多。

我也研究了一下老師使用的教科書,在上學期使用的是《An Introduction to Mathematical Cryptography》,這學期使用的則是《Cryptography, An Introduction》。後者省略了許多細節,而且完全沒有練習題。前者對數學背景寫得比較詳細,筆者多以那本配合老師的講義使用。不過其實兩本書的內容有些是沒有重疊的。

在課程大綱上特別標記了前者在圖書館有電子書下載,後者則是可自由下載的開放電子書。老師似乎是希望同學可以不用花那麼多錢買教科書。筆者剛開始為了能在上課時參考課本,到影印店影印了課本,不過到後半學期就幾乎沒看,而且整本書有教的部份其實也不多,現在覺得其實沒有影印的必要性。

作業習題和考古題得多做,考試題型大多數都從裡頭出來。

筆者一開始先是閱讀《An Introduction to Mathematical Cryptography》來打底,在上課時一開始是配合影印本,邊聽課、邊查閱資料。期中之後的數個星期,看完了《Intro. to Math Cryptography》,就比較少在課後複習,尤其老師恰巧一直沒派手寫作業,又覺期中這樣有很多考古題的考試型態尚可臨時抱佛腳,或許因此稍微懈怠。課程進入橢圓曲線後,上課便以老師的投影片為主,不再閱讀課本。到了期末時,其實讀起來覺得有點趕,現在想來應該要提前複習投影片才是。

心理疾病介紹 – 交大修課心得

medicines

課程資料

心理疾病介紹

開課:高之梅老師

修課年度:100通識(群己)

介紹各種心理疾病,一開始先簡介各大心理學派及其對心理疾病的解釋,接下來的主題分別是:

  • 焦慮及適應問題 - 畏懼症、恐慌症、強迫症
  • 情緒低落與憂鬱
  • 自我傷害行為
  • 創傷後壓力症候群及災難心裡反應
  • 悲傷與失落
  • 情感性疾患 - 躁鬱
  • 精神分裂症及相關知覺障礙
  • 發展心理問題:人格障礙發展心理問題 - 自閉症、阿茲海默氏症

參考書目為:《變態心理學(修訂版)》,這本書很大一本,我從浩然借來以後,因為難以閱讀,所以很快就還了。由於考試還滿簡單,沒看這本書應該也沒什麼關係。英文版為《Abnormal Psychology》

上課方式

用投影片上課,有時會小點名或者讓同學臨時分組討論。這學期是討論憂鬱症與自我傷害的故事,讓大家分享聽聞過的經驗。我覺得討論的經驗十分有趣。

因為老師語調有點緩慢,上課時有些同學其實在看自己的書。不過有時會播放疾病相關電影,這時大家多會專心觀影,確實有許多精彩橋段。放過的影片有愛你在心口難開、伴我情深、時時刻刻、飛越杜鵑窩等等。

評分方式

評量的方式為:

  • 出席 40%
  • 口頭報告 30%
  • 期末考 30%

平常偶爾會點名,也曾有早到的加分。

在一開始上課時就會請同學自行分組,約 7~8 個人一組。每組要決定報告一種心理疾病,會在接近期末時開始進行各組報告。報告的形式為簡報口頭報告,各組多會配合相關電影講解。

我們這組還演了小劇場 =w=b

報告的氣氛還算和諧,老師不會特別說各組的缺點。

期末考主要是是非題,最後還有問答題是要根據上課播放過的影片來敘述各種心裡疾病的症狀。題目寫起來還算簡單,不過也沒有信心可以完全寫對。無法得知最後期末考的成績,最後我的學期成績是 86 分。

結語

老師感覺很和善,她說最好要有修過普通心理學,不過感覺影響沒有很大。整學期下來 loading 不大。雖上課本身有點枯燥,不過因為分組報告,得到了一些團隊合作的經驗,也認識了一些人,真的很感謝組員的幫忙,也讓我學到不少。考完期末考時,老師還為我們的其他期末考加油打氣!

組合語言與系統程式 – 交大修課心得

assembly

課程資料

組合語言與系統程式

開課:陳永昇老師

修課年度:99資工系

組合語言的部份使用的是《Assembly Language for x86 Processors》,教了以下章節:

  • 1. Basic Concepts
  • 2. x86 Processor Architecture
  • 3. Assembly Language Fundamentals
  • 4. Data Transfers, Addressing, and Arithmetic
  • 5. Procedures
  • 6. Conditional Processing
  • 7. Integer Arithmetic
  • 8. Advanced Procedures
  • 9. Strings and Arrays
  • 10. Structures and Macros
  • 13. High-Level Language Interface
  • 14. 16-Bit MS-DOS Programming
  • 17. Expert MS-DOS Programming

系統程式的部份使用的是《System Software: An Introduction to Systems Programming》,教了以下章節:

  • 1. Background
  • 2. Assemblers
  • 3. Loaders and Linkers
  • 8. Software Engineering Issues

額外有出了一份寫 DOS 病毒的作業,可以學習一些感染 EXE 檔的技巧。

本門課的組語主要是用 MASM 組譯器的格式,同時也會運用到教科書中的諸多 routines。由於老師並不會特別教導組譯環境的設置,同學需自行閱讀教科書及作者網站,我寫了一種環境設置的方法和其他一些跟這門課相關的議題:〈組合語言與系統程式〉

上課方式

使用投影片上課,大抵上上課氣氛很自由,不會有什麼壓力。由配分可見它是以實作為主的課程,本文也以介紹作業為主。

每份作業都需 demo(包含期末 project 在暑假 demo),是在 demo 時從 E3 上下載之前上傳的程式碼,由於並不會事先公佈所有的測資,所以要細心一點。組語作業如果有多做功能可以主動向助教提出,可以得到不等的額外加分。

另外,事後會公佈全班的 code 供大家學習參考。上到最後一堂課時會有一張特別的投影片:師:「永生難忘」。

不點名,但是有來上課的話可以提早得知作業。作業投影片通常在宣佈後一星期放上E3。此外,死限延期或其他特殊事項也是只有在上課時公佈,或者在上課時提早公佈。

評分方式

這門課的配分是這樣的:

  • 60% 4次組語作業
  • 25% SIC/XE 組繹器(可用任意語言寫)
  • 15% 期末考

沒有期中考,不過另外有一個期中組語上機考,是考較為簡單組語程式題目,也可攜帶參考資料和作業原始碼,但若未通過則 4 次組語作業不能算分。

根據前人的經驗,只要作業都滿分,就算期末考六十幾分也能得到 99,有付出就有收穫。

考試作業

作業通常會在上課公佈,晚一點則會公佈在 E3,死限通常在星期日的夜晚。

第一個作業是三個組語小程式:

  1. 輸入兩個 32-bit 正整數,輸出其最小公倍數。
  2. 輸入一個日期,輸出那天星期幾。
  3. 輸入一個正整數,輸出所有比它小的質數。

第二個作業是用組語寫一個 finite-state machine 可以解析一行輸入的組合語言(MASM 格式),如:

1
2
3
4
5
6
7
8
9
Input=> L1: sub ecx, var   ; substract ecx by var

Result=>

        LABEL             L1
        INSTRUCTION       sub
        REGISTER          ecx
        IDENTIFIER        var
        COMMENT           substract ecx by var

如果有錯誤輸入,該錯誤 token 輸出 unknown,但其後的正確 token 仍需正確辨識。不需判斷 grammar 錯誤,如 mul 應該只能接受一個 operand:

1
2
3
4
5
6
7
Input=> mul eax, 5

Result=>

        INSTRUCTION       mul
        REGISTER          eax
        INTEGER           5

禁止使用 .IF .WHILE 等 directives

第三個作業是寫一個計算機,可以計算輸入運算式結果,支援 + - * / ( ),如 2+4-6*2 = -6。輸入運算式最長為 100 字,數字長度最長也是 100 位(需使用大數運算)。

第四個作業是 16-bit DOS programming:

  1. 寫一個 TSR 鋼琴程式,鍵盤需可正常輸入,但按下按鍵會發出聲音。
  2. bonus(這題本來不是 bonus,後來更改評分):寫一個 TSR 病毒程式,執行後會常駐於系統中,在你開啟另一個 exe 檔時感染該執行檔,使其執行被插入的程式碼(如列印一行字),但仍保持原有的功能。

期末 Project期限在期末考後的一個星期後。是要以如《 System Software: An Introduction to Systems Programming》 一書的格式,撰寫一個 SIC/XE 組譯器可以產生 relocatable object program。

其中 60% 要支援所有 addressing modes, 教到的 assembler directives,以及以下除外的指令:浮點數運算、SW register 相關指令,SIO, TIO, HIO,LPS, STI, SVC,SSK。

40% 佔分則為:Literals, Symbol-defining statements, Expressions, Program Blocks and Control Sections。

我有把一部分的作業原始檔放在 github 上,可供參考:99-asm

上機考有三題:

  1. 印出 Pascal’s triangle
  2. 給一個長度 4 字串,輸出任一重排後字串。
  3. 給兩個最多 40 位的二進位數字,輸出相減後結果。

不需全部解出也算通過。

期末考的題目主要配分是系統程式占的較重,所以不要只看組語的部份。仔細觀察可以發現,題目大多為課本習題,特別是系統程式的部份。這次的組語大多為選擇題,系統程式相對較難。老師會給考古題,不過有重疊的題數大概只有一兩題。

結語

想要預習或自修的話,《 Assembly Language for x86 Processors》 這本書每章背後都有程式練習題,筆者做過幾章,覺得挺有幫助,感覺跟程式語言有關的課練習都是十分重要。組語的教學也可以參考小木偶的網頁

系統程式部份可以邊寫組譯器邊看,這樣會有更深的理解。自己修這門課花了很多心思在作業上,不知不覺就會忘了讀系統程式。但這門課的系統程式部份實際上佔分滿多的。

雖然沒有期中考確實讓期中的壓力減輕不少。但對筆者而言,組譯器的撰寫顯得有些匆忙,逼近期末考周時,因為要準備考試,沒時間寫期末 Project。即使考完期末考,最後一個星期忙著搬宿舍,能寫的時間不是很有彈性,不得已得花很長得時間連續不斷寫 Project,寫到最後動力遞減,很容易想放棄。

現在想起來,我認為最好可以一開學就開始寫 SIC/XE 組譯器,一方面可以邊寫邊看課本來準備期末考,二方面透過時段的切割可以避免學期末擠在一起時的壓力。

況且其實一開學就會說期末 project 是什麼了,就算最後發現要求不太一樣,也依然有理解系統程式課程的好處。

延伸閱讀