前一兩個月,終於下定決心要考一張認證出來.目標就是 LPI Level 1.
這個認證是關於 Linux 的認證,分為 101 與 102 兩個 Exam, 換言之,這兩個 Exam 都考過了,才會得到 LPI Level 1.
我花了一個月的時間看書跟上網作模擬試題,當然,都是斷斷續續的看,畢竟還是要上班呀.
不知不覺,一下就到了 9/25.
9/25正是我考試的日子.雖然,在之前已經作了萬全的準備,但還是很緊張.好死不死的,又下雨,真是應了一句話”屋漏偏逢連夜雨.”
提早到了考試地點-板橋巨匠,被巨匠的櫃檯小姐看出來我很緊張~~還被她安慰了一下~~呵呵~~
看來真的是太久沒考試了,嗯,我算算,也有四五年沒考試了吧~~
幸好考試很順利地通過~~
^_^
接下來就要整理房子,結婚啦~~
暫時沒有時間準備,看來要到 11 月或 12 月才能繼續 LPI 102 囉~~
Internet Tetris
client:
1.listen server 的 packet 以做相對應的處理
2.將 user 的動作(與方塊相關的,如消去,旋轉,落下…等等,傳送到 server)
僅把動作送出去,對圖形的處理仍由 client 處理
3.與方塊相關的流程,圖形處理(自行產生下一個方塊)
server:
1.listen client 的 packet,轉送到其他 client
流程:
說明:
1.Server為一模組,只做 Listen, 然後轉送,為以後可能有多遊戲共用,所以支援 thread;日後 Server 端則獨立,除非有bug,否則不變動.
使用者的 USE CASE 敘述
1.選擇我要連線
遊戲嘗試向Server發出訊息
如果得到成功的回應,則開始遊戲
遊戲會亂數產生方塊,並且一直等待使用者的反應(旋轉,落下,移動)
在方塊產生後,方塊會一次落下一格,直到碰到障礙物為止
接著會畫出來
並且送訊息給Server
當方塊落下後,遊戲判斷是否可以消去方塊
若消去,畫出消去,並送訊息給Server
並且產生下一個方塊
偶爾會產生特殊的武器,使用者可以依據武器的特性來做出反應
2.選擇當主機
遊戲會檢查Server是否起始,若沒有,則起始 Server 的服務.並送出訊息給Server說要等待其他使用者進入.
有的話就送訊息給Server要建立.
等待Server給的通知.
當有通知後請參考1
Server的部分
起始後,會先建立Listen thread
Listen thread會持續聽取傳來的message,訊息定義如下:
new game: 若訊息是要建立新遊戲,則建立 Send thread, 佇列, 和清單,並開始服務
同時把ip位址放到清單中.
(會傳來ip位址以及建立新遊戲的訊息)
要求連線: 若訊息是要求連線,則把ip位址放到清單中,並且依據清單送出可以開始的訊息到佇列中.
(會傳來ip位址以及要求連線的訊息)
轉送: 若是遊戲的訊息,則依據傳來的ip位址,和清單比對,不相符的ip位址,則把訊息以及清單的ip位址放到佇列中.
(會傳來ip位址,以及要告訴其他使用者的訊息)
Send thread:
會持續去檢查佇列,如果有需要送出,則把訊息送出.
佇列:
佇列主要是存放訊息,是的,Listen thread會一直將訊息塞到這裡去.
清單:
這張清單主要是存放連線上來的電腦的ip位址.
方塊類別(Tile)
狀態:9×9 matrix
旋轉: rotate
武器(寶物)類別(Weapon)
佔掉的位置為9×9
以圖形表示
會有發射,爆炸,壓掉,亂數消去的動作
遊戲類別(Game,應該也可說是Form本身)
控制遊戲主要流程
Server類別(Server)
thread list:紀錄產生後的thread的id
佇列 list: 這個list裡面就是放佇列
清單 list: 這個list裡面就是放清單
listen thread id
訊息類別(Message)
Body 訊息內文,基本上為一字串
1~10表示Game種類
11表示訊息種類
2~15表示為傳送來的ip位址
16~以後表示是訊息本身內容,基本上Server並不認識這段訊息,只是忠實的送出
VFP7 與 Web Service
前言
建立Web Service
建立Web Service Client 端程式
使用其他語言建立的 Web Service
與資料庫結合
結論
參考資料
前言
VFP 這項產品一直被謠傳微軟將不再支援,但在今年六月,微軟將VFP7自Visual Studio.NET中獨立出來銷售,總算是打破了這個謠言。此外,也為這項產品添加了不少功能,比如 Intellisense、對COM的更完整支援、SOAP與Web Service 等等。這裡就為各位解說新增的SOAP與Web Service功能。
SOAP 與 Web Service 這兩個名詞,相信我不用再多做解釋了,大家在這一陣子的耳濡目染之下,應該都大致了解,在此就不再贅述。如果想了解的人請參考前幾期RUN!PC李維老師的文章,有詳細的解說。
建立Web Service
首先讓我們來製作 Web Service,稍後,再來撰寫如何使用 Web Service 的 Client 端程式。
要使用VFP7製作Web Service之前,請先在[Internet 服務管理員]中,新增一個虛擬目錄,在此,我們先命名為 WebServices。
接下來得製作一個COM元件,在這裡我們就以一個簡單的相加函數來作為一個範例。
請先建立一個新專案,名稱叫做MyWebService,在Project Manager(專案管理員)中,切換到 Program頁籤,點選 ”New”,將下列這段程式碼貼到裡面去,然後存檔為 prog1.prg。
DEFINE CLASS MyCalculator AS session OLEPUBLIC Name = "MyCalculator" PROCEDURE doAdd Parameters A , B Return A+B ENDPROC ENDDEFINE
這一段程式碼只是將傳入的兩個參數做一個簡單的相加而已。
接著就要進行編譯的工作了,點選”Build”,建立的型態選為”Single-threaded COM Server(dll)”,按下 ”確定” 來建立一個dll型態的COM伺服器。
建立完成後,你會發現VFP7為你產生了一個mywebservice.dll,並已經為你註冊到電腦中了,讓我們驗證一下VFP7是否已經編譯成功,請在命令列中依序輸入:
obj=createobject(“MyWebService.MyCalculator”) ? obj.doAdd(100,100)
如果成功的話,你應該會看到VFP7回應了 200 這個答案,表示COM伺服器已經建立成功。
VFP7提供了一個方便的精靈,讓你可以直接在VFP7的整合環境中建立 Web Service,而不需要另外去執行 SOAP toolkit 來製作。
請你在Project Manager中,以滑鼠右鍵點選叫出快捷選單,選擇Builder。此時,會出現一個選擇精靈的對話方盒(如圖),選擇Web Services Publisher,並按下確定。
接著會出現Web Services Publisher這個對話盒(如圖),我們按下 “…” 按鈕,去搜尋我們剛剛建立的MyWebService.MyCalculator COM伺服器。找到並確定之後,再按下”Advanced”,讓我們看看可以再多做些什麼設定。
在 Advanced 設定中,我們可以指定
- WSDL 產出的位置。
- SOAP Listener型態。
- IntelliSense的Script名稱。
- 告訴VFP7在Project Build之後,是否自動產出相關的 Web Service 檔案。
- 產出的WSDL檔案是否要以UTF-16 Unicode作為預設編碼。
在確定所有設定無誤之後,按下 Generate,Web Service Publish精靈就會利用SOAP toolkit為我們在指定的位置產出Web Service的相關檔案。
Web Service Client 程式
那麼,我們要如何使用這個 Web Service 呢?
讓我們寫一個簡單的 form 來呼叫
請開一個新檔案,類型選為Form (表單),在表單裡面放置一個按鈕(如下圖),在按鈕的OnClick事件內放置如下的程式碼:
x = CREATEOBJECT("MSSOAP.SoapClient") x.MSSoapInit("http://ellery/webservices/MyCalculator.WSDL", , "MyCalculatorSoapPort") =messagebox( str( x.doAdd( 100,100 ) ) )
執行這個表單,在click按鈕之後,你會發現你並沒有辦法呼叫!!是VFP7的bug嗎??
首先,因為soap物件會利用 wsdl 檔案做 Initialization 的動作,所以我檢查了一下產出的 wsdl:
…略… <message name='MyCalculator.doAdd'> </message> <message name='MyCalculator.doAddResponse'> <part name='Result' type='xsd:anyType'/> </message> …略…
在這裡 SOAP toolkit wizard 並沒有為我們的 COM 元件產生參數的宣告。
產出的 WSDL 碼應該是下面這樣子才對的呀.
…略… <message name='MyCalculator.doAdd'> <part name='A' type='xsd:int'/> <part name='B' type='xsd:int'/> </message> <message name='MyCalculator.doAddResponse'> <part name='Result' type='xsd:anyType'/> </message> …略…
為了這個疑惑,我將問題貼到 Microsoft Newsgroup(http://communities.microsoft.com/newsgroups/default.asp) 和 Universal Thread(http://www.universalthread.com) 網站去詢問,過了兩天,就有了結果,兩個地方給我的回答都是相同的,我們必須將PROCEDURE doAdd 的宣告修改為
PROCEDURE doAdd(A as Integer, B as Integer)
並把 parameters 敘述移除。
修改後,重新 Build、利用 Wizard 發布之後,再執行剛剛我們建立好的 client 端Form,你應該就可以看到Web Service 被起始後的結果了。
使用其他語言建立的web service
為了驗證一下,VFP也能使用其他語言或其他平台上建立的 Web Service,我們仿效李維老師於RUN!PC 90 期文章中所寫的範例,寫一個取得溫度的簡單範例。
請依照下圖來製作一個表單:
然後,在”取得溫度”按鈕的 onclick 事件中,置入下列程式碼:
LOCAL obj obj = CREATEOBJECT("MSSOAP.SoapClient") obj.MSSoapInit("http://www.xmethods.net/sd/2001/TemperatureService.wsdl") thisform.text2.value=obj.getTemp(thisform.text1.value)
在執行這個表單之後,在州代號的欄位中,輸入 07060,再按下 “取得溫度” 按鈕,下面的當地氣溫欄位便顯示出氣溫,表示可以正確的呼叫!
與資料庫結合
VFP為了因應 XML 的流行,在這個版本中添加了與XML 相關的三個函數:CURSORTOXML()、XMLTOCURSOR()、XMLUPDATEGRAM(),正好可以用來在 Web Services 中傳遞資料。
請在Project Manager中,新增一個程式檔(program),然後將下列的程式碼加入,並命名為 prog2.prg:
DEFINE CLASS tastrade AS session OLEPUBLIC Name = "tastrade" PROCEDURE getAllEmployee() LOCAL handle as Integer LOCAL lc_xml as String handle=SQLSTRINGCONNECT("Driver=Microsoft Visual FoxPro Driver;” + ; “UID=;PWD=;” + ; “SourceDB=C:\WebService\Data\testdata.dbc;” + ; “SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;” + ; “Collate=Machine;Null=Yes;Deleted=Yes;") =SQLEXEC(handle, ; "select emp_id, last_name, first_name, title from employee order by emp_id", ; "employees") =sqldisconnect(handle) CursorToXML("employees", "lc_xml") RETURN lc_xml ENDPROC PROCEDURE updateEmployee( c_request as string ) LOCAL handle LOCAL o_xmlDom, o_nodelist1, o_nodelist2, o_nodeEmployee, o_node LOCAL strWhere as String , strSet as String , strSql as String LOCAL ll_cycle as Boolean , ln_ret as Integer c_request=STRTRAN( c_request, 'encoding="Windows-1252" ', "" ) o_xmlDom=CreateObject("Microsoft.XMLDOM") o_xmlDom.async="false" o_xmlDom.loadXML(c_request) * parse xml and combine update-sql syntax IF o_xmlDom.hasChildNodes() ELSE RETURN ENDIF * create connection handle=SQLSTRINGCONNECT("Driver=Microsoft Visual FoxPro Driver;” + ; “UID=;PWD=;” + ; “SourceDB=C:\WebService\Data\testdata.dbc;” + ; “SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;” + ; “Collate=Machine;Null=Yes;Deleted=Yes;") strWhere="" strSet="" l_cycle=.F. for each o_nodelist1 in o_xmlDom.documentElement.childNodes FOR EACH o_nodelist2 IN o_nodelist1.childNodes * initialize variables if o_nodelist2.nodeName="updg:before" FOR EACH o_nodeEmployee IN o_nodelist2.childNodes FOR EACH o_node IN o_nodeEmployee.childNodes IF o_Node.nodeName="emp_id" strWhere=strWhere+o_Node.nodeName+"="+"'" + ; TRANSFORM(o_Node.text,"@J 999999") + "' and " ELSE strWhere=strWhere+o_Node.nodeName+"="+"'" + ; o_Node.text + "' and " ENDIF NEXT NEXT ENDIF IF o_nodelist2.nodeName="updg:after" IF NOT o_nodelist2.hasChildNodes() ELSE FOR EACH o_nodeEmployee IN o_nodelist2.childNodes FOR EACH o_node IN o_nodeEmployee.childNodes IF o_Node.nodeName="emp_id" strSet=strSet+o_Node.nodeName+"="+"'" + ; TRANSFORM(o_Node.text,"@J 999999") + "'," ELSE strSet=strSet+o_Node.nodeName+"="+"'" + o_Node.text + "'," ENDIF NEXT NEXT ENDIF l_cycle=.T. ENDIF IF l_cycle = .T. * generate sql syntax strWhere=LEFT(strWhere,LEN(strWhere)-4) IF EMPTY(strSet) strSql="Delete from employee where "+ strWhere ELSE strSet=LEFT(strSet,LEN(strSet)-1) strSql="Update employee set " + strSet + " where " + strWhere ENDIF * call sqlexec() to send update-sql * and we can update our database ln_ret=SQLEXEC(handle,strSql) l_cycle=.F. strWhere="" strSet="" ENDIF NEXT NEXT * disconnect =sqldisconnect(handle) ENDPROC ENDDEFINE
這段程式碼裡面包含了一個類別,類別裡面包含了兩個方法:
getAllEmployee 利用 SPT 這組函數取得所有員工的員工編號、姓、名以及職稱,然後再利用 CURSORTOXML() 函數將 Cursor 資料轉換為 XML並傳回。
UpdateEmployee 則依據傳來的 update xml 資料作分析並更新。
再依照之前建立 Web Service 的步驟再做一次 Build COM 元件以及發布的動作。
接著,讓我們來撰寫 client 端的畫面,請依照下圖放置一個 Grid 控制項還有兩個 Button 控制項,然後同樣地,將下列的程式碼分別置放到兩個按鈕的 onclick 事件中。
在 Retrieve 按鈕的 onclick 事件中置放如下程式碼:
LOCAL x as Object , lc_xml as String *因為在[Update]按鈕中的 xmlupdategram() 函數需要設製 buffermode 並將 multilocks 設為 True SET MULTILOCKS ON IF USED("employee") thisform.grid1.RecordSource="" USE IN employee ENDIF x = CREATEOBJECT("MSSOAP.SoapClient") x.MSSoapInit("http://ellery/webservice/tastrade.WSDL") lc_xml=x.getAllEmployee( ) XMLToCursor(lc_xml,"employee") thisform.grid1.RecordSource="employee" thisform.Refresh() SELECT employee =CURSORSETPROP("buffering",5)
在 Update 按鈕的 onclick 事件中置放:
LOCAL lc_ret LOCAL x, lc_xml *檢查是否已經取得資料 IF NOT USED("employee") =MESSAGEBOX("[Retrieve] button not pressed!") RETURN ENDIF *產生異動的 xml lc_ret=XMLUPDATEGRAM("employee") IF EMPTY(lc_ret) &&如果沒有異動,發出警告 =MESSAGEBOX("You don't update any thing") ENDIF =MESSAGEBOX(lc_ret,"XMLUPDATEGRAM() generates following codes") *將資料更新回去! x = CREATEOBJECT("MSSOAP.SoapClient") x.MSSoapInit("http://ellery/webservice/tastrade.WSDL") x.updateEmployee( lc_ret ) SELECT employee
然後將這個表單命名為 form2,然後讓我們執行這個表單。
當我們按下 Retrieve 時,這個 client 端的表單就會為我們取回 Server 端的XML資料,並利用 XMLTOCURSOR() 轉換為 Cursor,以便能順利與 VFP 的控制項結合。
當按下更新的時候,我們也能利用 XMLUPDATEGRAM() 函數取得需要更新的必要資料,送回 Server 端,讓 Service 端能根據這份資料來更新資料。
結論
VFP 在7.0版之後就不再被包含在 Visual Studio.NET 之中,但是,VFP開發小組承諾會繼續為這個產品添加更多的功能以迎合使用者的需求。就我個人而言,對 VFP 仍懷有一份特殊的情感,尤其是在使用其他語言開發資料庫時,有時候仍然會忍不住有 “唉!怎麼沒有這個功能,VFP就有” 這個想法,所以我還是會繼續看相關的 VFP 資料。
不過,我感覺到微軟雖然對 VFP 的使用者作出了相當的承諾,可是,從 5.0 到 6.0 到 7.0 ,除了使用者介面與開發COM元件的支援外,其實並沒有什麼太大的改進,我想很多人也會和我有一樣的看法吧。
參考資料:
MSDN – Walkthrough: Creating Web Services with Visual FoxPro
RUN!PC 90 期
XML 網頁製作徹底研究 旗標出版
夢境 – 小學與營長
又作了一個詭異的夢~
地點像是以前的小學~
我好像為了一個很正當的原因遲到了,躲了起來~
我心裡很害怕,因為以往從來沒遲到過~
一直想跟老師說些什麼~卻又提不起勇氣~
後來
聯絡到我的好友
打算在某節課下課的時候混進去~~
但是在下課的時候
被老師抓到了~
老師當然責罵了一會,
我鼓起勇氣跟老師說明原因~
後來就被校長帶走
很奇怪的是
校長居然是我當兵時的康營長(還是蠻懷念這位營長的呢)~~
校長跟我談話,問明原因之後~
跟我要了家庭聯絡簿拿出來~
然後開始寫字~
接著告訴我”我會把聯絡簿交給你的導師,你先回去吧!”
===
沒了~~~
「天蠶變」讀後感
前幾天看到電視上有在上映「新天蠶變」,就想起童年時的「天蠶變」.
然後就想,這故事到底是什麼呀?作者又是誰呢??
於是心血來潮的利用 Google 去搜尋,居然被我找到了~~今天就偷偷利用上班的時間把它給看完了~~ ^_^
原來「天蠶變」的作者是黃鷹~內容還不錯~平舖直述的~也因此讓我能很迅速的瞭解雲飛揚為什麼在武當派被人冤枉,又為什麼學成絕世武功~~不過我個人認為要翻拍成對電視劇的話,就嫌不足了~
有很多的地方,作者都偷懶,並沒有詳述~很簡單的用文字把情節帶過去~我想可能是出版社或報社催促的緣故吧~~
結局挺出人意料的,幾乎所有人都死光光了~給人滄涼的感覺~~
呼~~~
CVS 簡易說明
我們先假設 192.168.0.1 有安裝 cvs server
並且有三個專案在上面
怎麼用??
0. 確定自己電腦上有安裝 cvs
一般來說,如果是 Red Hat 或 Mandrake,那麼預設會有安裝
如果是其他的,我就不知道了
請到 www.cvsroot.org 去下載套件並安裝之
1. 設定
#當然你如果習慣用 vi, 這邊的 EDITOR 就設為 vi 的路徑
export EDITOR=/usr/bin/vim
#此處的 username, 要替換為自己的 username
export CVSROOT=:pserver:username@192.168.0.1:/home/cvsroot
export CVSREAD=yes
你可以把這些敘述放到 /etc/profile 或 /root/.bash_profile 裡面
免得以後每次用的時候還要再打一次
2. login
輸入
cvs lgin
cvs 會要求你輸入密碼,此密碼就是你在 192.168.0.1 上的密碼
3. checkout 將專案下載到你的電腦上
所以你可以打
cvs checkout clockd
cvs checkout helloworld
cvs checkout qt
把專案下載到自己的電腦上
4.
做完 checkout 後,你可以看到自己的電腦上出現了專案
先輸入 cvs edit xxxx
然後就可以做編輯了,你可以試著亂改, 加上一些註解或無聊的程式碼
做完修改後,當然要放回 server 囉
你可以用
cvs commit [檔案名稱]
指令來更新回 server, 更新之前, cvs 會打開 editor 讓你輸入一些文字,為這次的修改作一些說明
對了,如果別人在你修改之前修改了這個檔案,那麼 cvs 會自動將檔案作合併,讓你再去做編輯,請務必玩一玩
5.
如果要看目前的狀況,就打
cvs status [檔案名稱]
cvs diff [檔案名稱]
cvs history [檔案名稱]
來查看各種狀況
6.
不想要這個檔案加入版本管理的話,得先刪除該檔案後,再使用
cvs remove [檔案名稱]
來移除
7.若要登出 cvs server,則輸入 cvs logout 即可
autofs 的應用
這是在這一期(2002/05)的 Linux Journal 看到的~~
以下是我的摘錄:
首先先假設你已經有了一堆 iso 檔案~
如果沒有
你可以用 cat /dev/cdrom > image1.iso 來建立 iso 檔案
要不然也可以利用免費的 iso buster 來建立 iso 檔案
再放到 Linux 上去
我們把這些 iso 檔案都放到 /mnt/images 下面
然後安裝 automount 套件~~
這個套件,CD 裡面應該就有附上了~
安裝以後,利用 chkconfig –list automount
確定 automount 會開機時自動啟動.
編輯 /etc/auto.master,
加上
/mnt/isosrv_auto /etc/auto.isorv –timeout=60
這表示 automount 會參考 /etc/auto.isorv 這個設定檔,自動掛載設定中的檔案系統到 /mnt/isosrv_auto 下
建立 /etc/auto.isorv
加上
image1 “tab” -fstype=iso9660,ro,loop “tab” :/mnt/images/redhat73_1.iso
上面這行的 表示要用 tab 分開(這是我自己實驗後的心得,automount 似乎會認格式)
image1 表示會在 /mnt/isosrv_auto 下建立的目錄名稱
-fstype=iso9660,ro,loop 表示檔案系統及參數
:/mnt/images/redhat73_1.iso 表示來源的所在位置
這樣設定之後
當你 ls /mnt/isosrv_auto/image1 的時候,linux 就會自動幫你掛載上去了
因為 ls /mnt/isosrv_auto 的時候,並沒有東西顯示,也因此無法得知有什麼目錄可以使用,此時可藉著 symbolic link 解決此問題
舉例來說,我們又另外建立 /mnt/CDs
然後在 /mnt/CDs 下建立 symbolic link 連結到 /mnt/isosrv_auto/image1
ln -s /mnt/isosrv_auto/image1 image1
這樣當你 ls /mnt/CDs 的時候
不就知道有什麼目錄了嗎?
套件的名字是叫做 autofs
後記:後來才知道除了 isofs 之外,這也能把一些其他的 filesystem 掛載進來,所以能應用的範圍就更廣囉.比如說可以配合 crond 用在自動備份上面,也是非常方便的呢. ^_^
cvsweb.cgi
前幾天, 友人找到一個不錯的 cvs web 介面,粉漂亮
是用 Perl 寫的CGI,於是我試著把他裝在 cvs server 上面~
一般的安裝方法,就是找到你的 httpd 伺服器,然後放在 cgi-bin/ 下面
以 redhat 為例,就是放在 /var/www/cgi-bin/ 下面
並且把執行的屬性改為執行~執行的擁有者改為適當的擁有者
但是在安裝以後
發現友人給我的檔案無法使用
於是我 follow 該檔裡面的網址前去下載~~
網址如下:
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/cvsweb.cgi/
下載之後
發現仍然無法使用
他告訴我還需要
cgi-style.pl
我的老天,網海茫茫,到哪裡去找??
後來突然發現
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/
這邊就可以看到 cgi-style.pl
下載之後
又發現我沒有 cvsweb.conf
於是再次從
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/
找到 cvsweb.conf
這樣子,檔案就全部到齊了
請用編輯器打開 cvsweb.cgi, 找到以下這行
for (“$mydir/cvsweb.conf”, ‘/usr/local/etc/cvsweb/cvsweb.conf’) {
加入 /etc/cvsweb.conf,於是就變成
for (“$mydir/cvsweb.conf”, ‘/usr/local/etc/cvsweb/cvsweb.conf’,’/etc/cvsweb.conf’) {
然後再用編輯器打開 cvsweb.conf, 找到以下這行
@CVSrepositories = (
…….
);
這個 Perl 陣列裡面就是你的 CVS 存放的位置也就是 CVSROOT 所指的位置
請修改之以符合你的環境.
假設,你的 CVSROOT 是 /home/cvsroot/, 裡面有一個 respository 為 libs
那麼裡面就應該是
‘libs’ => [‘libs’, ‘/home/cvsroot’],
緊接著@CVSrepositories 下面,你會看到 %MIRRORS
如果你的 CVS Server 有 Mirror 的話
也請修改,否則的話,就把他清成空的,像是這樣~
%MIRRORS = (
);
修改之後,再打開瀏覽器去執行,果然看到 cvsweb 漂漂的畫面
一切就大功告成了~~
夢境 – 老師
那是專三或專四的時候
炎熱的下午
幾個同學趁著下課
跑去籃球場打籃球~
十分鐘哪夠他們打球呢~
很快就上課了
那堂是國文課~
我隔著窗子對著他們叫說”上課了!”
國文老師說:”由他們去吧~”
X X X
國文老師不繼續教我們了
那天是老師最後一天上我們的課
上完之後
我哭了
哭的很傷心,非常傷心
我已經很久沒有這樣子嚎啕大哭了~~
X X X
我發現我還在床上
臉上也沒有淚滴~
甚至我弟也沒被我的哭聲驚醒~
可是我的感覺是如此的真實~
罷了~~我繼續陷入半夢半醒~~
朦朧間
想起了教過我的幾位國文老師~~
國中的劉老師,林老師(應該沒記錯姓)
五專的陳老師(他正好跟某知名鋼琴音樂家同名同姓)~
真是非常謝謝他們
培養我欣賞詩文,國文的能力~
真的,非常謝謝他們~~
^_^
夢境 – 輪船,河岸與港口
嘿
今天早上又作夢了~~
有些地方已經忘記了~~
依照西藏羅桑倫巴喇嘛所說,夢境容易被遺忘,必須要經常訓練,才能記得~~
=====
眼前是一片寬廣的河岸~
橋橫亙在大河之上,連接兩岸~
天色像罩了一層霧似的~昏暗~
陽光試圖透進來,為昏暗添上了幾筆色彩.
輪船在靠近岸邊的地方沉了
我乘著小船在輪船附近
在岸邊
我看到一根鐵柱上
附著許多磁鐵
我一一拾起~~
=====
就這麼著
就這些~~
蠻不錯的小說開頭~
有點村上風
^_^