星期六, 12月 12, 2009

將Ubuntu安裝在PS3上

PSUbutu
http://psubuntu.com/wiki/InstallationInstructions/show?time=2009-12-08+23%3A31%3A45



安裝下載
http://cdimage.ubuntu.com/xubuntu/ports/releases/9.10/release/

在線項目管理蒐集

趣客
http://www.trikr.com/

快做網
http://www.ftodo.com/Default,ftodo

忙吧
http://www.mangbar.com/

易度
http://everydo.com/

專案開發

專案開發,使用工具

Issue Tracking(RedMine Mantis BugZilla tarc Dotproject XPlanner Onepoint ]projectopen[)

版本控制(SVN、CVS、Git、TD)

WIKI(dokuwiki)

星期日, 11月 29, 2009

庖丁分詞器(paoding)使用要注意的事

可以將字典位置設定在系統變數
也可以設定在paoding的jar檔中
的paoding-dic-home.properties
將原本的(系統環境變數)
#paoding.dic.home.config-fisrt=system-env
設定為(本檔案)
paoding.dic.home.config-fisrt=this

並且指定詞典位置
paoding.dic.home=E:/lib/paoding-analysis-2.0.4-beta/dic/

最後用zip檔案打開paoding-analysis.jar檔更新paoding-dic-home.properties


不要用記事本編輯字典(有BOM問題)
字典必須式UTF-8編碼
詞典修改完後要刪掉.compiled檔

星期四, 10月 29, 2009

台灣在網域界已經獨立了?

這網址www.google.co.Taiwan/adsense ,是騙人的吧,還是台灣在網路界已經自己獨立了



CodeGear RAD Studio 2010出了喔

一般人也許不知道 codegear 是什麼產品,但 borland 這個曾經是程式設計開發工具的風雲人物,大家就不陌生了,
而 codegear 就是 borland 把程式設計開發工具(簡稱 ide)分割出來的產品(公司名embarcadero),
codegear rad studio 2010 為其最新力作,其中包含了delphi 、c++ builder、和 turbo c++ 等著名工具,
可開發 vcl、.net 和原生 win 32的程式,
其中 rad studio's delphi prism™ 可開發.net 和 mono (linux 版的 .net) 應用程式,並包含了最新的 .net技術,
例如asp.net, winforms, wpf 和 linq等。
如果剛剛接觸程式設計,想學 c/c++、pascal等,這個ide決對不可以錯過。
分享的版本為 architect 版,最高級版本喔




Delphi新版本(D2010)簡介:

1.多核的支持/異步方法(VC中早就擁有的OpenMP,在Delphi中也很快就有了)
2.內置的Direct 2D模塊及開發庫
3.將會擁有一個能同時運作於x86和x64的IDE,在此IDE下將會有跨平台編譯器,能夠編譯用於linux和MAC的應用程序。 (一次編碼+選擇編譯器=多個平台下可運行的副本,對於遊戲開發太有用了,我們再也沒有必要特地為linux或MAC開發遊戲,拿Windows下的代碼來重新編譯吧)
4.將會支持windows7下的觸摸式編程,對手勢事件的感知,比如說一個手指從屏幕劃過,或者兩個手指從上移動到下,甚至是用一個手掌來拍屏幕,這些不同的動作都能感知到,並且處理它們。 (Windows7的特性,微軟曾表示,會發布用於VC的Touch開發SDK,但是沒有計劃將該SDK集成到IDE,Delphi將是Win7下RAD Touch開發的領路者)
5.將會支持手持設備的開發,比如說工業的設備,或是手機
6.強化的DataSnap,將可以完美的支持在Delphi, C++Builder和Delphi Prism之間傳遞數據
7.可以調試數據庫中的存儲過程(Store Procedure)和函數(Function),並幫助數據庫找出問題
8.多人合作模式的進化,避免寫過多過長的代碼,CodeGear將進一步致力於減少代碼量,在提高開發效率的同時,也保證產品的質量(這才是Delphi的真正意義所在!! )
9.將支持雲計算(這個不用說了吧,現在廣為流行的雲計算)
10.將支持函數式編程,這需要很多時間,據David估計是兩年後會實現

以上的10條,足以讓我們激動了吧? Win7的特性,據我所知,微軟內部有SDK,但是卻從未打算在語言,或是IDE上體現出來,Delphi將在Touch Development上引領一個時代。同時,類似於Erlang的分佈式,函數式編程,雖說要比較久才能看到,但是由此我們看到了CodeGear的努力。

然後是一些FAQ,David親自回答了我們的問題,並且對Delphi的將來,他也是非常的樂觀
對於我們來說,我們自然是希望了解得越多越好,有些問題也問得很尖刻,但是David還是給出了讓我們較為滿意的答复

一、技術類

1. Delphi什麼時候能原生支持類似於parallel.for的多核並行開發?
[David] Delphi肯定會支持多核並行的開發,但是不是現在,可能是下一個版本

2.有計劃讓Delphi發展成類似於Erlang的分佈式語言嗎?是否會提供分佈式開發庫?
[David]似乎DataSnap已經能夠滿足類似的需求了,你可以用它來做分佈式應用。當然我們是有計劃實現分佈式的函數式編程的,這需要大幅修改編譯器

3. B/S開發能否加強?能否使用類似於JSP/PHP的模式?
[David]我們現在重點在VCL for the Web上,VCL for the Web 11和以往的版本相比有著天壤之別,它可以像一般的Delphi開發那樣,拖放式開發,也可以支持RIA。 VCL for the Web 11已經可以支持IIS等許多服務器了。我覺得它已經很強了。 (VCL for the Web 11已經可以被部署在支持IIS,Apache,ISAPI,NSAPI等各種服務器上,並且可以實現不需要本地運行時庫的RIA應用,比 Silverlight或是Flash都來得優越)

4.能否支持Native RIA?能否不需要用戶安裝類似於SilverLight的運行時庫
[David] VCL for the Web的目標與Silverlight不同(其他的內容參考上一條)

5.是否有計劃實現針對敏捷開發的Delphi Doc?
[David]新版本的Delphi會帶有一個Source Control System,用於滿足多人合作開發的需求,它的功能比單純的Document強得多

6. Delphi的類能否被序列化成XML?能否從XML加載一個類?
[David]從XML加載類是不可能的,類裡邊的方法不能夠通過XML來描述,我是指Native的語言都不可能這樣,如果想在Server和Client之間傳遞一個類的話,可以用DataSnap

7.什麼時候能支持x64的操作系統?
[David] x64的計劃很早就有了,但是我們沒有足夠的人力,估計還要再等下個版本,或許是2011年?

8.有打算支持跨平台嗎?特別是移動應用平台,如Symbian和Windows Mobile
[David]跨平台肯定會支持的,而且我們以前也做過kylix,但是很可惜的,Borland覺得kylix是浪費時間,於是終止了它。但是現在它又被提上日程了。 Windows Mobile?可以用Delphi Prism開發,其實我自己的感覺,用Visual Studio可能更好(David都認為開發WM的程序用.NET比較好,看來Delphi不太會往WM方向發展了)

二、意見類

9.反射機制能再做得好一點嗎?我們想放棄RTTI
[David]這的確是需要考慮的地方,當然RTTI我們不會放棄的

10.希望在支持Unicode的前提下,讓新版本的Delphi能兼容老版本的代碼
[David]很抱歉這是不可能的,從老版本移植代碼過來,由於Unicode的問題,必須修改一些代碼。我們也在努力的使這個修改變得更少。 (這點我個人還是難以認同的,理由還是那句話,為什麼VC可以而Delphi不行)

11. Delphi2009的bug多得難以忍受,不知Delphi2010是否會改善?
[David]現在的Update3應該沒有多少bug了吧?我記得上次修正了300多個問題,如果是用的早期版本,還是換上update 3吧。 Delphi2010會在Delphi2009 update3的基礎上進行改進,不會再帶上以前的bug的。

12. IDE是否能夠支持將Delphi代碼轉換成其他語言,並按用戶的喜好用不同的編譯器來編譯?
[David]不同的語言使用不同的運行時庫,就算語法上可以轉換,也無法將運行時庫轉換了。而且語法上的轉換也需要花費大量的勞動,並且沒有意義。

13. Embarcadero / CodeGear是否有計劃為Delphi編寫類似於微軟MSDN的文檔庫?
[David]我們有CDN,和MSDN差不多的,同樣的架構,而且現在也有很多人向QC提交內容,這些都會被收錄的。 CDN會越來越豐富,Delphi也可以自己更新到CDN的內容。(可以通過CDN查看網路上別人的開發經驗,這點比單純的幫助文檔好得多了,而且這次CG向CDN添加了大量的開發實例)

14. Delphi是否會支持內建的Python或是Perl,甚至是Ruby這樣的腳本?
[David]不會支持,據我所知已經有第三方的廠商支持了吧?

三、方向類

15. Delphi是否打算成為一個平台,是否會提出自己的標準?
[David]我不知道你所說的平台是指什麼,不過Delphi是一個RAD的,擁有很多控件的,能可視開發的工具,它的標準就是現行的標準。

16. Delphi的編譯器是否有開源的打算?
[David]不會開源,這是公司的商業模式決定的,我們還想靠編譯器來賺錢

17. Embarcadero / CodeGear如何看待用戶的體驗?
[David]我們對用戶的體驗非常重視,用戶有任何的問題都可以反饋到QC上來,我們會極積處理採納的。

18. Embarcadero / CodeGear如何看待來自FreePascal /Lazarus的競爭?
[David]我們從來沒有認為FreePascal或是Lazarus會對Delphi構成威脅,Delphi原本就是從Pascal擴展而來的,做了許許多多的擴充,現在組件也非常豐富了,而Lazarus的編譯器遠遠及不上Delphi,它還借用了許多原本屬於Delphi的庫,自己本身的組件很少。如果說跨平台的話,Delphi也很快就有了。 (CG還是很樂觀的,等Delphi的跨平檯面世後,lazarus還會有存活的餘地嗎?)

19. Embarcadero / CodeGear認為Delphi的主要發展方向是怎麼樣的?
[David]我當然希望它成為一個開發語言中的優秀者,最近的工作主要集中在DBX, DataSnap和跨平台的一些事情上。我們當然也希望用戶可以用Delphi來開發一切

部份文章 轉貼自

http://www.programbbs.com/bbs/view12-21556-1.htm

星期日, 10月 25, 2009

TDD開發模式

今天讀了旗標出的Ruby on Rails 黑黃書


裡面講到了TDD開發模式,引起了好奇


上網找了相關的資料,發現國內沒什麼人在討論


TDD開發就書上的定義:



TDD開發模式!!

?
撰寫一段功能程式碼



確定測試失敗(因為還沒建立功能)



只撰寫可以測試成功的程式碼



重構程式碼,確保它的設計對當時來說是最精簡的



以上是他的,中心思想-快速開發,使用者取向

?就像射箭,先畫好紅心,一直修改射箭姿勢,直到射中為止


其他的就先不要管,先求有再求好


開發敏捷~~先讓程式碼長眼睛,明確的目標寫,可以節省需多時間。


TDD

http://wiki.pragmatus.com/index.php?title=Test_Driven_Development_with_Ruby

免費重組軟體__Drfraggler



微軟內建的磁碟重組慢又不好用,試試看免費的重組小軟體吧


主程式大小不到一MB!



Defraggler 免安裝打包版


Defraggler官方網站:http://defraggler.com/

星期五, 9月 11, 2009

CentOS ISO In TAIWAN

目前想在台灣快速的取得CentOS的ISO,可以從學術網路中下載。

國家高速網路與計算中心:http://ftp.twaren.net/Linux/CentOS/
義守大學:http://ftp.isu.edu.tw/pub/Linux/CentOS/
元智資訊工程學系:http://ftp.cse.yzu.edu.tw/pub/CentOS/
靜宜大學資訊學院:http://ftp.cs.pu.edu.tw/Linux/CentOS/

星期六, 6月 06, 2009

ORM

ORM即(Object-relationsla mapping)

可以將資料表轉換為物件的形式,
使得開發人員在對資料庫進行存取的時候只需要使用物件導向的語法、而無須撰寫SQL語法,維持開發過程中物件觀念的一致性

星期二, 2月 24, 2009

作業系統概論

最近在逢甲的舊書攤,敗了本作業系統概論

作者:賈蓉生、胡大源、林金池

裡面有許多用JAVA寫的有用範例
如:
分散式系統架構(Distributed System Structures)

分散式檔案系統(Distributed File System)

分散式系統之整合(Distributed Coordination)

裡面的程式碼很有幫助~!!很少有書會介紹

星期一, 2月 09, 2009

wxWidgets建立按鈕

在wxWidgets中新增一個按鈕元件

要使按鈕元件可以動作

要先注意到定義按鈕、監聽按鈕事件、處理函式

在標頭檔定義處理函式
void OnButtonOK(wxCommandEvent& event);

定義按鈕(這部分IDE會幫你做好)
WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("確定"), wxPoint(424,424), wxSize(75,25), 0, wxDefaultValidator, wxT("WxButton1"));
WxButton1->SetFont(wxFont(9, wxSWISS, wxNORMAL,wxNORMAL, false, wxT("微軟正黑體")));

建立監聽

EVT_BUTTON(ID_WXBUTTON1, p1Frm::OnButtonOK)
^^^^^^按鈕ID ^^^^^^^^^處理函式
監聽需要在BEGIN_EVENT_TABLE和END_EVENT_TABLE之間

再來就是定義函式
void p1Frm::OnButtonOK(wxCommandEvent& event)
{
Destroy();
}

星期日, 2月 08, 2009

[Linker Error] undefined reference to `__cpu_features_init'錯誤

在安裝完wxDev-C++第一次編譯

出現[Linker Error] undefined reference to `__cpu_features_init'
編譯錯誤的訊息

找了一下Google大神,發現是編譯器環境設定的錯誤

將設定調整如下

工具→編譯器選項→目錄→函式庫

新增一筆C:\MinGW\lib

就可以正常使用

前提是要先裝MinGW

不使用VC開發桌面程式

在Windows下想使用C++開發桌面環境
而不使用VC,可以嘗試使用Dev c++
配合GTK+或wxWidgets來開發桌面程式

很多人在桌面環境開發都使用VC,那是
需要付費的商業版本,如果有預算上面
的考量可以考慮Dev C++來當作開發工
具,也是一種不錯的選擇。

wx-devcpp(wxDev-c++)是一套將wxWidget
(誇平台)和Dev c++整合,減少自行整合
設定的麻煩。

下載點


相關教學
http://pcnoproblem.twbbs.org/2008/09/20/wxdevc/

CPP的socket設定

Server.exe PortNumber,例如Server 8000
  Client.exe IPAddress PortNumber,例如Client 127.0.0.1 8000
  然後在用戶端的命令列輸入字串,用戶端將會把消息送到伺服器,伺服器再把消息傳回用戶端。
  伺服器端,Server.cpp
  //Server.cpp
  #include
  #include
  #include
  #pragma comment(lib,"ws2_32.lib")
  int main(int argc, char* argv[]){
  //判斷是否輸入了PORT號
  if(argc!=2){
  printf("Usage: %s PortNumber\n",argv[0]);
  exit(-1);
  }
  //將PORT號轉化為整數
  short port;
  if((port = atoi(argv[1]))==0){
  printf("PORT號指定為整數");
  exit(-1);
  }
  WSADATA wsa;
  //初始化套接字DLL
  if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
  printf("Socket初始化失敗!");
  exit(-1);
  }
  //創建Socket
  SOCKET serverSocket;
  if((serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
  printf("創建Socket失敗!");
  exit(-1);
  }
  struct sockaddr_in serverAddress;
  memset(&serverAddress,0,sizeof(sockaddr_in));
  serverAddress.sin_family=AF_INET;
  serverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  serverAddress.sin_port = htons(port);
  //綁定
  if(bind(serverSocket,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
  printf("Socket绑定到PORT失敗!端口: %d\n",port);
  exit(-1);
  }
  //進入監聽狀態
  if(listen(serverSocket,SOMAXCONN)==SOCKET_ERROR){
  printf("監聽失敗!");
  exit(-1);
  }
  printf("Server %d is listening......\n",port);
  SOCKET clientSocket;//用來和用戶端通信的Socket
  struct sockaddr_in clientAddress;//用來和用戶端通信的Socket地址
  memset(&clientAddress,0,sizeof(clientAddress));
  int addrlen = sizeof(clientAddress);
  //接受連接
  if((clientSocket=accept(serverSocket,(sockaddr*)&clientAddress,&addrlen))==INVALID_SOCKET){
  printf("接受客户端連接失敗!");
  exit(-1);
  }
  printf("Accept connection from %s\n",inet_ntoa(clientAddress.sin_addr));
  char buf[4096];
  while(1){
  //接收數據
  int bytes;
  if((bytes=recv(clientSocket,buf,sizeof(buf),0))==SOCKET_ERROR){
  printf("接收數據失敗!\n");
  exit(-1);
  }
  buf[bytes]='\0';
  printf("Message from %s: %s\n",inet_ntoa(clientAddress.sin_addr),buf);
  if(send(clientSocket,buf,bytes,0)==SOCKET_ERROR){
  printf("傳送數據失败!");
  exit(-1);
  }
  }
  //清理Socket占用的資源
  WSACleanup();
  return 0;
  }
  用戶端,Client.cpp
  //Client.cpp
  #include
  #include
  #include
  #pragma comment(lib,"ws2_32.lib")
  int main(int argc, char* argv[]){
  //判斷是否輸入了IP地址和Port
  if(argc!=3){
  printf("Usage: %s IPAddress PortNumber\n",argv[0]);
  exit(-1);
  }
  //把字符的IP地址轉化为u_long
  unsigned long ip;
  if((ip=inet_addr(argv[1]))==INADDR_NONE){
  printf("不合法的IP地址:%s",argv[1]);
  exit(-1);
  }
  //把port轉化成整数
  short port;
  if((port = atoi(argv[2]))==0){
  printf("Port有誤!");
  exit(-1);
  }
  printf("Connecting to %s:%d......\n",inet_ntoa(*(in_addr*)&ip),port);
  WSADATA wsa;
  //初始化套接字DLL
  if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){
  printf("套接字初始化失败!");
  exit(-1);
  }
  //创建套接字
  SOCKET sock;
  if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET){
  printf("创建套接字失败!");
  exit(-1);
  }
  struct sockaddr_in serverAddress;
  memset(&serverAddress,0,sizeof(sockaddr_in));
  serverAddress.sin_family=AF_INET;
  serverAddress.sin_addr.S_un.S_addr = ip;
  serverAddress.sin_port = htons(port);
  //建立和服务器的连接
  if(connect(sock,(sockaddr*)&serverAddress,sizeof(serverAddress))==SOCKET_ERROR){
  printf("建立连接失败!");
  exit(-1);
  }
  char buf[4096];
  while(1){
  printf(">");
  //从控制台读取一行数据
  gets(buf);
  //发送给服务器
  if(send(sock,buf,strlen(buf),0)==SOCKET_ERROR){
  printf("发送数据失败!");
  exit(-1);
  }
  int bytes;
  if((bytes=recv(sock,buf,sizeof(buf),0))==SOCKET_ERROR){
  printf("接收數據失败!\n");
  exit(-1);
  }
  buf[bytes]='\0';
  printf("Message from %s: %s\n",inet_ntoa(serverAddress.sin_addr),buf);
  }
  //清理套接字占用的资源
  WSACleanup();
  return 0;
  }

參考資料:
小新a家
http://www.wretch.cc/blog/mntkey/21030760

如何使用DevCpp寫Socket程式
http://www.twbbs.net.tw/2090793.html

星期六, 2月 07, 2009

VPS整理

網路上有口碑的VPS廠商

http://www.slicehost.com/

http://www.linode.com/

http://www.dreamhost.com/hosting-vps.html

需要VPS的朋友可以參考一下