close
所謂的pair programming
就是指兩個人只用一台電腦一起寫程式

在software engineering上 這是一種促進程式開發效率的方法
看似冗員 實際上兩個人一起寫可以減少bug 並促進思考
當然 如果兩個人關係不好 或是能力都非常好
pair programming就沒有好處了

這兩週的programming studio我們要做的
就是以pair programming的方式寫一個Image editor
而且 我的partner是同一個discussion section的Robert

一開始我相當的頭痛 畢竟我英文爛到家
怎麼跟一個外國人pair programming?
不管如何 船到橋頭自然直

Robert用的程式語言是Java 因為我想學Java 而且Java有蠻多好用的東西
所以我們就使用Java(另外一組用Ruby.........)
因為Robert比較熟Java 所以幾乎都是他在輸入程式
我只負責在旁邊看 他一邊講解

第一次的meeting沒有多大的進展
只是把Robert之前寫的視窗程式拿來發展我們的介面
影像處理的部分沒什麼進展
所以我們約好各自回去查一些資料 第二次meeting再寫

回去之後 我花了好一段時間尋找可以使用的api
並在網路上四處尋找sample
原本看到JAI 為了使用JAI還載了一堆東西
但最終看不懂 還是選擇J2D
然後違背pair programming的原則 自己寫了數個method

第二次meeting的時候 是情就順利多了
有了我寫的那幾個method 我們很快(也花了數個小時)的把所有functionality解決
只是rotation怪怪的

Rotation method 1:
因為旋轉的結果會造成bounding rectangle的變異 情況比resize複雜的多
最簡單的方法就是用旋轉後的任兩個vertices 計算新的bounding rectangle
但如果旋轉數次就會造成問題 譬如我們以第一次旋轉後的bounding rectangle
去計算第二次的 然後以第二次的去計算第三次的 則bounding rectangle將會越來越大
解決的方法 是紀錄原本圖形的任兩個vertices
每次旋轉時 都用這兩個vertices去計算新的bounding rectangle
再加上一些細節 我的algorithm如下:
1. 以目前img I1的bounding rectangle計算旋轉後的bounding rectangle R1
2. I1移至新R1的中心 產生新的img I2
3. 選轉新的img得到I2'
4. 用原始img的任兩個vertices計算旋轉後的bounding rectangle R2
5. I2'貼到R2上 並將I2的中心對應到R2的中心

我在家試的時候OK
可是Robert那個天才就是有辦法測出失敗的例子
導致discussion section後半 跟Nicholas又討論起為何會如此
最後結論是乾脆保留原本圖形和記錄目前旋轉角度
每次要旋轉的時候 就加上原本的旋轉角度 然後旋轉原本的圖形
而不是上次旋轉後的圖形

因此在第三次的meeting時 我們以這樣的方式修正了rotation
然而 我不得不說Robert是天才 這樣的作法還是在他面前破功
檢討之後 我才發現不能先計算旋轉後的bounding rectangle
然後將圖貼上才旋轉 這樣會造成如果bounding rectangle不bound原本圖形時
原本圖形會被cut off
所以應該計算bounding square旋轉後再換成bounding rectangle

rotation是解決了 redo/undo卻出了大麻煩
我們把panel放進linkedlist 再拿出來時卻無法重繪
搞了半天之後 終於決定將問題留到meeting 4

meeting 4一開始仍不是很順利
不過我把square的概念加到rotation method 1之後就解決上一次discussion section的問題
好在這次沒再被Robert破功
Robert想用一個我不太理解的方式做undo/redo
但是後來失敗了
就換我接手 將畫圖所需要的資料丟進stack的方式做undo/redo
好在成功了....

因為Robert是奧地利人 用的是德文鍵盤 而且是ASUS的電腦
我第一次接手用的時候不會用
他居然說"How? This is Taiwaness' computer!"
又有一次我不小心按錯鍵 他鍵盤上p旁邊有一個u上面兩點的符號
他說念"淤" 又說o上面兩點念什麼什麼的....
我就說"我朋友說德文有時候聽起來像是想吐"
他很有趣的回答"那是他沒聽過我說 他一定都是聽電視上的"

第二次的discussion section很快就結束了
只花30分鐘 而且是我用破英文講的
Nicholas問我們這次有沒有比較快
其實 大半時間都花在解決小問題 要寫好的GUI真的很麻煩

心得:
語言是一個大問題 Robert是一個有趣的奧地利人

arrow
arrow
    全站熱搜

    Chifatty 發表在 痞客邦 留言(1) 人氣()