2012年9月24日 星期一

SVN

檔案庫(Repository)
版控系統中需要有一個存放檔案的地方,這個地方稱為 Repository ,在 Repository 中存放了整個專案的所有版本,Repository 在不同的版控系統中有不同的儲存方式(如檔案、資料庫),Repository 是整個版控最重要的地方,所有使用者都需要從 Repository 取得或更新檔案,因此選擇一個穩定安全的機器來存放 Repository 是必須的,Subversion 可以支援使用http://、https://、file:///、svn://、svn+ssh:// 多種通訊協定。
工作區(WorkSpace)
前文提到檔案庫中存放了所有的版本,但使用的實務上不可能需要全部的版本,因此我們會從檔案庫中取得需要的版本(通常是最新版)複製到自己的硬碟中,而這些存放於本機硬碟的檔案可稱為本機副本(Local copy)存放的地方稱為 Workspace 。
取得檔案(Checkout)
開始一份工作的時候,工作區並不會有任何檔案,這時候就要選擇檔案庫中需要的專案來執行 Checkout ,版控軟體會從檔案庫中複製指定的版本(通常是選擇最新版)到你的工作區形成本機複本,這個本機複本與檔案庫的目錄結構是一樣的,用一個專案的角度來看只有第一次需要使用 Checkout
送交檔案(Commit)
當你在工作複本中完成了你的工作(比如寫好一個功能),就需要將你的變動 Commit 到檔案庫中,在 Subversion 中沒有 Commit 之前的異動其他成員都不會知道。(往後文章會提出適當的 Commit 時機)
更新檔案(Update)
在多人使用的環境下,整個檔案庫的檔案是會同時被多人修改的, Subversion 並不會即時抓取這些異動,必須等到您使用了 Update 功能,版控軟體才會將檔案庫和你的差異更新至你的本機複本中,在 Subversion 中預設會檢查使用者在送交檔案之前該檔案有沒有被異動,如果有異動會強迫使用者先執行 Update 。
分支(Branch)
利用分支的功能可以有效隔離主線,當開發程式時想重構、測試寫法、開發新功能,這些可能不會那麼快處理完畢,而且可能會造成現有功能影響的動作都應該在分支下執行,執行完畢確認後再合併主線就可以大幅降低在開發時期對主線的影響,往後對於分支還會再提,現階段只需要記住分支內你隨便玩都不會干擾別人。
合併(Merge)
當兩個使用者修改了同一份檔案,在 Subversion 中是採取「樂觀鎖定」的作法,也就是並不會限制一份檔案只有一個使用者才可以修改,而是在更新檔案的時候才去檢查衝突,假設 工程師 A 異動了檔案中的 1~3 行,而工程師 B 使用者異動了檔案中的 5~10行,工程師 A 先行送交檔案,接者工程師 B 要送交的時候系統會發現版本不同而要求先執行更新檔案,檔案更新的過程中會偵測到兩個版本的異動並無衝突而自動合併(Merge)異動。
衝突(Conflict)
基於以上案例如果工程師  B 異動了 3~10 行,這時候因為同時異動到了第 3 行所以版控軟體無法自動合併,就會發出 Conflict 警告,需要使用者自行解決衝突。(請注意發生衝突後越早解決對系統影響越小)
因為衝突和合併的文字敘述感覺不是那麼容易理解,所以 demo 做了兩張圖來解釋,看圖就應該很清楚了

1.

免費SVN 空間PojectLocker &TortoiesSVN 烏龜SVN使用

http://www.projectlocker.com/
image
在See Plans & Pricing中,來進行註冊及申請
2.選擇註冊資料
image
3.確定資料
image
4.填寫資料(帳號,為email
image
5.最後確認
image

使用tortoisesvn

6.下載software& setup
http://tortoisesvn.net/downloads.html
7.checkout(在某一目錄下
image
8.其檔案庫(Repository) 位置
image
image
 
Subversion visually explained in 30 sec - svn tutorial
http://coding-time.blogspot.tw/2008/04/subversion-visually-explained-in-30sec.html




















2012年9月10日 星期一

字串

定義
string是由零個或多個字符(字母)的有限序列組成。
p.s:其string與list相似,但string是用在字串上。
  1: ADT 串(string)
  2: Data
  3:  串中元素由一個字待組成,相鄰元素具有前、後的關係。
  4: operation
  5:  StrAssign(T,*chars):生成一個其值等於字符串常量chars的串T
  6:  StrCopy(T,S):串S存在,並複制到T中
  7:  ClearString(s):串存在,將串清空
  8:  StringEmpty(s):若串S為空,回傳true.
  9:  StrLength(S):返回串S的元素個數
 10:  StrCompare(S,T):若S>T,回傳>0;S=T回傳0;S<T回傳<0
 11:  Concat(T,S1,S2):串T為S1,S2組成.
 12:  SubString(sub,S,pos,len):串S存在,1<pos<strlength(s).
 13: 且0<len<strlength(s)-+1.回傳S的第pos個字符長度為len的字串.
 14:  Index(s,t,pos):串S,T存在,T是非空字串,1<pos<strlength(s).
 15: 若串S存在和串T有相同的字串,則返回它在串S中第pos個字符之後
 16: 第一次出現的位置,否則傳回0
 17:  Replace(S,T,V):串S,T 及V存在,T為非字串,用V替換串S中出現的所有與T相同字串.
 18: StrInsert(S,pos,T):串S和T存在,1<pos<strlength(s)+1
 19: 在串S的第pos個字符之前插入串T
 20:  StrDelete(s,pos,len):串S存在,1<pos<strlength(s)=len+1,從S中刪除
 21: 第pos後的len字元
 22: 
 23: endADT

2012年9月5日 星期三

程式設計專家手冊(the practice of programming) 筆記1

第一章 風格
主要的議題有: 描述性的名稱、表示式的清晰、直觀的控制流程(control follow)、程式碼和註解的可讀性以及一玫性和利用慣用法。
良好的風格應該是一種習慣。如困你從一開始撰寫程式時就考慮到風格問題,而且花時間去修改,那麼就可以培出良好的習慣。一但出習慣,就能在下意識的狀庇下處理許多細節,即使程式碼是在壓力下趕出的。

第二章 演算法與資料結構
   選擇演算法時,可先評估各種可能的演算法和資料結構。及其輸入的資料量大小及性質(成長否?)來排除會因資料大小而需改變的演算法。
若許可應先採用芋種函式庫及語言本身的功能,若無法逹成時,則先以最簡單方法處理。並加以測試是否可符合要求(不合時再修改)
   而其資料結構種類(串列、樹等),對於特定的環境下對效能的影響很大。其各種類資料結構都有基本的操作(建立、新增及刪除等)

而每個操作都有一個預期的運算時間,它表示著對於資料型庇對於特別應用的合適程度。如陣列的存取為O(1)常數時間存取,但其新增刪除則需O(N)。
以此來做為問題的演算法及資料結構的選取。