公告區

Work Harder!!!!

2009年7月31日 星期五

目標

先給個作業吧~

在9/14號前

要總題數要做到100題↑(之前寫的包含在裡面)

其中三星題要有十題~

收到的就回應一下吧~

//團訓在最近的週末就會復活了,似乎可以約出來一起寫了XD

2009年7月12日 星期日

點名

如果最近開始團練有多少人能參加呢?XD

2009年7月1日 星期三

暑期團練

開始想要什麼時候開始動工吧XD

//這幾個星期內吧

其實我連要怎麼做都還在構思中

看有沒有什麼意見吧XD

2009年6月20日 星期六

UML Implement Part2

星期二下午在系館

看到的人請推文

不然我會敲你XD

2009年6月8日 星期一

UML Demo

我們是考完後下一週的星期四(6/25)
所以大概是6/23、6/24再動工就好了
大家期末加油!

2009年6月7日 星期日

有關UML

在班板上有po文提到是在考完後的下個星期才要demo

時間下星期會出來(就是哪一組在哪一天報告)

預計在考完後再商量討論的時間

以上

團練暫停

要期末考了

還是先專心準備好了

預計6/21日再度開始!!!

祝大家期末考順利

5/31團練記錄:ACM 260

團練主題:State Space Search

/*Applerman's AC code*/
#include< stdio.h>

int N, map[200][200],win,check[200][200];

int move[6][2]={{-1,-1},{-1,0},{0,-1},{1,0},{0,1},{1,1}};


int isBound(int i,int j);

void move_W(int i,int j);

void check_W(int i,int j);

int init(int N);


int main(){

int case_N=1,i,j;

char win_C[2]={'B','W'},str[201];

while(scanf("%d\n",&N)==1){

if(N==0) break;

for(i=0;i< N;i++){

gets(str);

for(j=0;j< N;j++)

if(str[j]=='w') map[i][j]=1;

else if(str[j]=='b') map[i][j]=0;

}

init(N);

win=0;

for(i=0;i< N&&(!win);i++)

if(map[i][0]&&check[i][0])

check_W(i,0);

printf("%d %c\n",case_N++,win_C[win]);

}

return 0;

}

int isBound(int i,int j){

if( (0< =i&&i< N) && (0< =j&&j< N) )

return 1;

return 0;

}

void check_W(int i,int j){

int k;

check[i][j]=0;

if((j==(N-1)&&map[i][j]==1)||win==1){

win=1;

return;

}

for(k=0;k< 6;k++)

move_W(i+move[k][0],j+move[k][1]);

return ;

}

void move_W(int i,int j){

if(isBound(i,j))

if(map[i][j]&&check[i][j]) check_W(i,j);

}

int init(int N){

int i,j;

for(i=0;i< N;i++)

for(j=0;j< N;j++)

check[i][j]=1;

}


這一次的題目比較簡單

因為白及黑的行為模式已經確立

而且題目又很準確的說

「不會平手」

所以比較投機的方式就是只檢查一方會不會贏XD

//拖了這麼久才po真抱歉 冏

2009年5月28日 星期四

2 Examples

Report Card :
ID,CourseName01,Grade01,CourseName02,Grade02,......
1,國文上,92,普通物理學甲上,100,計算機程式設計,100

Account_Password :
account,password
b97902020,neverRevoke

JAVA - 字串轉換

1. 由 基本資料型態轉換成 String

String 類別中已經提供了將基本資料型態轉換成 String 的 static 方法
也就是 String.valueOf() 這個參數多載的方法

有下列幾種

String.valueOf(boolean b) : 將 boolean 變數 b 轉換成字串

String.valueOf(char c) : 將 char 變數 c 轉換成字串

String.valueOf(char[] data) : 將 char 陣列 data 轉換成字串

String.valueOf(char[] data, int offset, int count) :
將 char 陣列 data 中 由 data[offset] 開始取 count 個元素 轉換成字串

String.valueOf(double d) : 將 double 變數 d 轉換成字串

String.valueOf(float f) : 將 float 變數 f 轉換成字串

String.valueOf(int i) : 將 int 變數 i 轉換成字串

String.valueOf(long l) : 將 long 變數 l 轉換成字串

String.valueOf(Object obj) : 將 obj 物件轉換成 字串, 等於 obj.toString()

用法如:
int i = 10;
String str = String.valueOf(i);
這時候 str 就會是 "10"

2. 由 String 轉換成 數字的基本資料型態

要將 String 轉換成基本資料型態轉
大多需要使用基本資料型態的包裝類別

比如說 String 轉換成 byte
可以使用 Byte.parseByte(String s)
這一類的方法如果無法將 s 分析 則會丟出 NumberFormatException

byte :
Byte.parseByte(String s) : 將 s 轉換成 byte
Byte.parseByte(String s, int radix) : 以 radix 為基底 將 s 轉換為 byte
比如說 Byte.parseByte("11", 16) 會得到 17

double :
Double.parseDouble(String s) : 將 s 轉換成 double

float :
Double.parseFloat(String s) : 將 s 轉換成 float

int :
Integer.parseInt(String s) : 將 s 轉換成 int

long :
Long.parseLong(String s) : 將 s 轉換成 long

2009年5月27日 星期三

5/30團練

這次改到下午好了
13:00-16:00
有意者請推文~

2009年5月24日 星期日

5/24團練結果-ACM10325及ACM10228

團練參考網址:
Inclusion-Exclusion Principle
http://www.csie.ntnu.edu.tw/~u91029/Inclusion-ExclusionPrinciple.html
Extremum
http://www.csie.ntnu.edu.tw/~u91029/Extremum.html




/*JW's AC Code in ACM 10325*/

#include<stdio.h>
#define MAX 16

long long n,m;
long long marray[MAX];

void init(long long array[MAX])
{
long long i;
for(i=0;i<MAX;i++)array[i] = 0;
}

long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}

long long lcm(long long a,long long b)
{
return a/gcd(a,b)*b;
}

long long backtrack(long long c,long long w,long long d)
{
if(c==m)return w*(n/d);
return backtrack(c+1,w,d)+backtrack(c+1,-w,lcm(d,marray[c]));
}

int main()
{
while(scanf("%d%d",&n,&m)==2)
{
init(marray);
long long i;
for(i=0;i<m;i++)scanf("%lld",&marray[i]);
printf("%lld\n",backtrack(0,1,1));
}
return 0;
}



/*ApplerMan's AC code in ACM 10228*/

#include<stdio.h>
#include<math.h>

double countDistance(double x1,double y1,double x2,double y2){
return pow((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2),0.5);
}
double totalDistance(int N,double point[100][2],double x,double y){
int i;
double total=0;
for(i=0;i<N;i++){
total+=countDistance(x,y,point[i][0],point[i][1]);
}
return total;
}
double xbisection(int N,double point[100][2],double y,double a, double b){
double fa,fb,c=(a+b)/2,fc=totalDistance(N,point,c,y),d;
for(d=fabs(b-a)/4;d>1e-5;d/=2){
a=c-d,b=c+d,fa=totalDistance(N,point,a,y),fb=totalDistance(N,point,b,y);
if(fa<fc) c=a,fc=fa;
else if(fb<fc) c=b,fc=fb;
}
return fc;
}
double ybisection(int N,double point[100][2],double a,double b){
double fa,fb,c=(a+b)/2,fc=xbisection(N,point,c,0,10000),d;
for(d=fabs(b-a)/4;d>1e-5;d/=2){
a=c-d,b=c+d,fa=xbisection(N,point,a,0,10000),fb=xbisection(N,point,b,0,10000);
if(fa<fc) c=a,fc=fa;
else if(fb<fc) c=b,fc=fb;
}
return fc;
}
int main(){
int M,N,i;
double point[100][2];
scanf("%d",&M);
while(M--){
scanf("%d",&N);
for(i=0;i<N;i++) scanf("%lf %lf",&point[i][0],&point[i][1]);
printf("%.lf\n",ybisection(N,point,0,10000));
if(M>0) printf("\n");
}
return 0;
}





團練討論:

ACM10325:

須使用long long 避免WA
如以下測資
2000000000 14
1073741789 1073741783 1073741741 1073741723 1073741719 1073741717 1073741689 1073741671 1073741663 1073741651 1073741621 1073741567 1073741561 1073741527
答案是1999999986
long long 在dev c++使用%I64d;
在Linux下使用 %lld
上傳皆使用%lld

ACM10228:

這題除了演算法,還要用些數學概念
切割xy平面去找極小值,
這題無特定公式可以直接求解,
在xy平面上,每一點對應到一個f(x,y)
f(x,y)即為一個曲面函數
求曲面上極大極小值要用lagrange
所以這題直接用切割平面的方式找極小較為容易
這意這題f(x,y)只出現一個極值,故可以不必分段找極大極小
因為他只有一個極小。

2009年5月23日 星期六

5/24團練

5/24 團練

練習ACM題目

預計9:00~12:00

可出席者請推個文吧!

還有panda上次的團練成果還沒PO上來哦

要不要我來用XD

另外~祝英檢中高級順利通過初試!

UML-Implement Time

端午節5/28(四)

八點整! R217!

不見不散!

一次搞定!!




ps.請看到的回應一下

2009年5月22日 星期五

給蘋果人

記得決定時間後po個文

2009年5月21日 星期四

UML - Class

class Course {
int courseID;
int credit
String courseName;
String professorName;
boolean[] student;
String department;
int restrictionID;
int[] time;
String location;
String P.S.;
}

class Human {
String name;
int ID;
}

class Student extends Human {
String department;
Schedule mySchedule;
}

class Prfessor extends Human {
String department;
}

class Administrator extends Human {
}

class Schedule {
String[] timeTable;
Course[] courses;
}

class ReportCard {
double[] grade;
String[] courseName;
int ID;
}

class OldSystem {
}

JAVA - 其他技術

這個是用來停止的
下面是停止兩秒

try {
Thread.sleep(2000L); //2 Seconds
}
catch (Exception e) {}


這是用來刷掉螢幕的
似乎是控制碼
可跨平台

System.out.println(((char) 27)+"[2J");

JAVA - 檔案處理

發現BufferedReader還好用的
大家還是多學學比較好
這個裡面有包含讀和寫了

import java.io.*;

public class FileIO {
public static void main(String[] args) throws IOException {
BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));

String fileName = keyin.readLine();

FileReader fileInput = new FileReader(fileName);
BufferedReader fr = new BufferedReader(fileInput);

String Temp;
String Data = "";

while((Temp = fr.readLine()) != null)
Data += Temp + "\n";

System.out.println(Data);

fileName = keyin.readLine();
FileWriter fw = new FileWriter(fileName);

fw.write(Data);
fw.flush(); //This is important,without it,the file won't be written.
}
}

Java的getch()

getch()在c當中
是用來讀入字元
但是不用按enter就會進行下去
簡單講就是「press any key to continue」的功能

在小的用盡全力google了兩天後
確定是沒這個東西了
所以設計出來的感覺可能會有些不一樣

之後請問田神後
知道還有「jni」可以試試(據說是讓java去跑c的code)
不過會造成沒辨法跨平台
再取捨吧~

2009年5月20日 星期三

JAVA - Keyboard Input

正如蘋果人所言
在java 6 之後
多了這個方法來讀取
十分的方便
不過在esclipse中不能使用
請注意

import java.io.Console;

public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");

Console console = System.console();
String name = console.readLine();

System.out.println("您輸入的名稱:" + name);
}
}


還有更方便的
輸入之後不顯示出來
這在打密碼時很重要

import java.io.Console;

public class ConsoleDemo {
public static void main(String[] args) {
System.out.print("請輸入名稱:");

Console console = System.console();
String name = console.readLine();

char[] password = console.readPassword("請輸入密碼:");
System.out.println("您輸入的名稱:" + name);
System.out.println("您輸入的密碼:" + new String(password));
}
}

UML - flow of event 工作分配

1. Login - 3M
2. View Course - JW
3. Register Course - JW
4. Distribute Course - JW
5. Add Course - 3M
6. Give Out Result - AP
7. View Report Card - DP
8. Submit Grade - DP
9. Billing - AP
10. Grading - DP

2009年5月19日 星期二

UML死線

嘖嘖
明天就是死線了
記得在下午78到地下室集合
以上

2009年5月18日 星期一

關於750的輸出格式

想請問兩位這一題過了嗎?

他的標準輸出格式到底是怎麼樣子的呢?

2009年5月16日 星期六

5/18早上開團

注意是5/18 9:00-12:00
9:10前msn請上線

早上UML調課
就來練習吧~

要參加的回覆一下~

UML

Use Case Diagram
JW-Course Registration System
AP-Billing System
3M-Login System
//-The Relationship between systems
3M-Old System VS New System
DP-Report Card System

Class Diagram
3M-Log in
-New System
-User Account
-Student
-Professor
-Administrator

JW-View Courses
-Student
-Professor
-Administrator
-Courses
-New System

JW-Courses Register
-Student
-New System
-Course
-Schedule
-Report Card
-Professor

JW-Add Course
-Professor
-New System
-Course

AP-Distribute Course
-New System
-Course
-Schedule
-Bill

AP-Result
-Bill
-Student
-New System
-Schedule
-Professor
-Course

DP-Grading
-New System
-Report Card
-Professor

DP-View Report Card
-Student
-Report Card
-New System

DP-Submit grades
-Old System
-New System
-Administrator
-Report Card

2009年5月3日 星期日

5/3團練記錄

參考網站:http://www.csie.ntnu.edu.tw/~u91029/Permutation.html

做了一題練習
因為在審題上出了問題
An upper case letter goes before the corresponding lower case letter.
這一句話的意思是
當我們在排序時
大寫是在小寫前面的
所以
比如說input是
AaBbCc
在沒有處理的前提下
第一個output可能會變成
ABCabc //也就是字典順序
這一點要注意

/*JW's AC Code in ACM 195*/

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 1024

char Input[MAX]; //輸入
char ans[MAX]; //存排列的結果
char used[MAX]; //用過的

int cmp1(const void *a,const void *b)
{
return (*(char*)a-*(char*)b);
}

//Quick Sort用
int cmp2(const void *a,const void *b)
{
return (tolower(*(char*)a)-tolower(*(char*)b));
}

//排列
void p(int k,int len)
{
if(k==len)
{
int i;
for(i=0;i<len;i++)printf("%c",ans[i]);
printf("\n");
return;
}
char LastLetter='\0';
int i;
for(i=0;i<len;i++)
{
if(used[i]==0 && LastLetter!=Input[i])
{
LastLetter=Input[i];
used[i]=1;
ans[k]=Input[i];
p(k+1,len);
used[i]=0;
}
}
}

int main()
{
int N;
scanf("%d",&N);
int i;
for(i=0;i<N;i++)
{
scanf("%s",Input);
int len=strlen(Input);
int j;
for(j=0;j<len;j++)used[j]=0;
qsort(Input,len,sizeof(char),cmp1);
qsort(Input,len,sizeof(char),cmp2);
p(0,len);
}
return 0;
}





/*ApplerMan's AC Code in ACM 195*/
#include<stdio.h>
#include<string.h>
#define MAX 1000

int charNum[52],length;
char solution[MAX];//解答

void permutation(int k,int n){
int i;
if(k==n){
for(i=0;i<n;i++){
printf("%c",solution[i]);
}
printf("\n");
return ;
}
for(i=0;i<52;i++){
if(charNum[i]>0){
charNum[i]--;
if(i%2==0){
solution[k]=(i/2)+'A';//取出來
}
else{
solution[k]=(i/2)+'a';//取出來
}
permutation(k+1,n);
charNum[i]++;
}
}
}

void input(void){
int i;
char str[MAX];
gets(str);
length=strlen(str);
for(i=0;i<length;i++){
if('A'<=str[i]&&str[i]<='Z'){
charNum[(str[i]-'A')*2]++;//編入
}
else if('a'<=str[i]&&str[i]<='z'){
charNum[(str[i]-'a')*2+1]++;//編入
}
}
}

void init(void){
int i;
for(i=0;i<52;i++)
charNum[i]=0;
}

int main(void){
int N;
scanf("%d\n",&N);
while(N--){
init();//負責初始化
input();//輸入部分
permutation(0,length);//遞迴
}
return 0;
}

//charNum[0]表示A的數量
//charNum[1]表示a的數量
//charNum[2]表示B的數量

2009年5月1日 星期五

田神訪談記錄

Q1 老師當初是怎麼學的,如何從不會到能夠比ACM World Final?
在剛入大學時,和兩個IOI強者的高中同學組隊,也因此從同學那裡學到了很多,除了教會當時的教授不少東西之外,也提供了不少書籍作為參考,而教授本身對於閱讀書籍本來就有興趣,因此學到了很多,學習的方式則是辨固定時間的讀書會,一次兩到三個小時,當時由於Online Judge的網站剛開始出現,因此有一股風潮在資訊系出現,這樣的風氣也有一些幫助,到了大二時,開始更為嚴肅看待比賽這件事,而且當時大陸的隊伍也開始參賽了,所以壓力相對的也比較大,之後在努力之下才到了ACM World Final,在學習方面,教授認為,重點在於知道用什麼方法去解決一個問題,如何從數學的思考轉移到程式的演算法上的思考,同時教授也提出了一個以往自己的訓練的方式,就是一種在紙上寫程式的方法,這種方式可以鍛練自己在self compiling和self testing上的能力。

Q2 ACM比賽時的解題方向?
分析題目(找出比較ok的題目)
分出三種類別
第一類的題目重點在速度
第二類的題目重點在做出自己能力能及的題目
第三類的題目重點在於團隊合作解出(最難的部分)

Q3 現在的學習風氣和過去的感覺有什麼不同?
和過去比較起來,現在的機會多很多,並不是說不好,而是讓競爭的感覺沒有以前那麼強烈,過去的競爭壓力大,若是不努力的話,本來在你之後的人很快就會追上來,也因此才會加倍的努力。

Q4 我們這樣的練習方式妥不妥?也就是利用題目來磨練觀念。
剛開始是好方法,但長久來說還是把重點放在了解演算法的內容進而活用。

Q5 還有如何進步,是看別人寫的code嗎?哪裡有資源?
看別人寫的code是個不錯的方法,而且可能還蠻需要的,可以在其中找一些自己覺得很好的方式,進而內化了解,同時在比賽時,也有很高的可能性需要幫別人debug(包括平時),因此看別人的code是個不錯的學習方式,資源方面,可以看一些有solution和別人寫的code的地方,例如NTU online judge,如果需要的話,可以和助教伸帳號。

Q6 這些比賽對於未來的幫助。
可能有,但是大多數的時候,能夠在比賽中有所表現的人,在各方面的課業表現上都不會太差,也因此我們不能說有絕對的關係,但不論之後在比賽有沒有得到好成績,若是願意在這方面努力的話,實力就會有一定程度的累積,那就夠了。

Q7 ACM比賽的學習和準備上的方法。
重點在還是在於有固定的讀書會,首先可以先召集一些人(約3-5個),然後可以先讓每個人分享一下自己學到的一些演算法之類的,並且一起練習分享等,頻率方面則是一個到兩個星期一次,一次兩到三個小時。


----------------------------------------------------------------------------------

因為是隔了一天才整理好,內容方面可能會有一點出入,所以任何覺得怪怪的地方都有可能是我寫錯了,也可能是記錄時誤解教授的意思,有問題請提出吧~

2009年4月30日 星期四

5/3早上開團

老樣子九點到十二點
要參加的就回覆一下吧~

如何在網誌中po程式碼

在建立新文章時
在右上角選修改html
之後在你要po的程式碼的上下加入

<pre class="prettyprint">
程式碼
</pre>


//上面的<>都被我改成全形的了,不能直接copy來用
就可以了

補一下
如果是<這個符號在code裡的話
要改打<
>則改成>


附上官網:
http://google-code-prettify.googlecode.com/svn/trunk/README.html

2009年4月29日 星期三

JAVA HW04

想法一:讓POOBoard、POODirectory及POOSLine都inherit POOItem
並在POOItem裡宣告三者

public class POOItem {
public static final int BOARD = 1;
public static final int DIR = 2;
public static final int SLINE = 3;

public POOBoard Board;
public POODirectory Dir;
public POOSplitLine SLine;
int typeID;
}

//POOBoard的一部分
public class POOBoard extends POOItem {
private static final int MAXARTICLES = 1024;

public String Name;
private int nArticles;
private POOArticle[] Articles;

public POOBoard(String name){
this.Name = name;
super.Board = this; //<-這裡
super.typeID = POOItem.BOARD; //<-還有這裡
Articles = new POOArticle[MAXARTICLES];
nArticles = 0;
}
}


想法二:和想法一雷同,不過base class只有輸出名字的功能

public class POOParent {
private String name;
public String getName(){return name;}
public void changeName(String name){this.name = name;}
}


想法三:不用extend,直接用陣列

首先
我們先在POODirectory中宣告
POOBoard[] Board = new POOBoard[MAX];
POODirectory[] Dir = new POODirectory[MAX];
我們先在POODirectory中宣告一個"二維的整數陣列"
int[][] A;
A = new int[MAX];
for(int i = 0 ; i<>
A[i] = new int[2];
這個陣列是1024*2的
陣列中的第一個值(A[i][0])代表"類型"
第二個值(A[i][1])代表"位置"
比如說
如果當"類型"的值為0時為splitline、1時為board、2時為directory
那有一二維陣列A[2][1024];
當A[0][0]=1 && A[0][1]=11 時
表示這個Directory的第一個(第零個)位置為一個board,而且是board[11]的內容。

//簡單寫個範例

if(A[i][0]==0)
System.out.println("----------");
else if(A[i][0]==1)
Board[A[i][1]].show();
else if(A[i][0]==2)
Dir[A[i][1]].show();

2009年4月26日 星期日

待解決題目

有一種題目是使用者給定一個冪函數的方程式,

然後用牛頓逼近法求給定範圍內的所有解,

有機會可以來練習。

ps.用到迴圈不斷逼近,直到y座標趨近於0。

ACM482\ACM484檢討-2

過了

(解決未初始化)
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?2nUWyE

(解決多了全形空白)
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?iW5i81

(大師範例)
/*No.484, Author: Anfranion */
http://src.wtgstudio.com/?X93re4


Anfranion大師講解:

sscanf() & strtok()法:

假設有一個複雜的輸入沒有跟你講長度,可以用sscanf()和strtok()搭配存取

char *ptr;
char input[1000];
double num[1000];
int N;

gets(input);

N = 0;
ptr = strtok(input, " ");

do
{
sscanf(ptr, "%lf", num[N]);
N++;
}while( ( ptr = strtok(NULL, " ") ) );

這樣input就會直接以double存在num[]了

/*
發問:
可是就482的狀況來看
用字串的方式存起來不是會方便些?
回答:
應該都可以
或者是不要存double改成char[]
回應:
嗯嗯
*/

ACM482\ACM484檢討

團練參考網址:
http://www.csie.ntnu.edu.tw/~u91029/Indexing.html
練習Indexing
題目ACM482 , ACM484

以下程式碼上傳皆RE,暫時找不出原因,有待查證

/*No.482, Author: JeromeWu */
http://src.wtgstudio.com/?j7I9Ac
/*No.482, Author: ApplerMan */
http://src.wtgstudio.com/?uBQngv
/*No.484, Author: JeromeWu */
http://src.wtgstudio.com/?W0um0f
/*No.484, Author: ApplerMan */
http://src.wtgstudio.com/?5e3F7V

另外ACM484解法參考網址
http://www.yalin.tw/acm/index.php?index=484 (作法為時間與空間的取捨)


探討ACM482題目:
1.儲存資料時必須使用字串,若用double處理格式化輸出出現問題
比如說 5.0 -2 2.00 -> 格式化 5.000 -2.000 2.000

2. linux下用gets會有warning,用fgets安全些,
使用gets的時候和scanf互用時會有問題,加個\n可以解決 ,
比如說
int N;
scanf("%d",&N);
char S[1024];
gets(S);
會有非預期的錯誤
解決方法如下
int N;
scanf("%d\n",&N);
char S[1024];
gets(S);

2009年4月24日 星期五

許久不見的團練

星期日早上九點到十二點
MSN線上集合!

要參加的回應一下吧~

2009年4月19日 星期日

Vim學習資料整理

關於 vim 是什麼的『中文』說明:
http://sites.google.com/site/jeromewufiles/data/features.zh.txt

大家來學 vim:
http://info.sayya.org/~edt1023/vim/
連結失效的話可以載作者的pdf
http://sites.google.com/site/jeromewufiles/data/vim.pdf

Learning Vi/Vim editor:
http://sites.google.com/site/jeromewufiles/data/O%27Reilly%27s-LearningtheviEditor%2C6thEdition.pdf

我自己的.vimrc:
http://sites.google.com/site/jeromewufiles/data/.vimrc

----------------------------------------------------------------
其實長久以來
我一直在觀望說要學Vim(完整地)還是emacs(從頭)
今天查了不少資料
最後還是決定認真學Vim了
目標是Vim的達人!!
上面整理了不少資料
有興趣學的就看看吧

2009年4月18日 星期六

POOBBS的測試檔案

http://sites.google.com/site/jeromewufiles/data/POOBBS.java

用來測試的檔案
對於一些特殊狀況有些錯誤訊息比較好

2009年4月17日 星期五

UML - NetBean

算是很不錯的工具了
//重點是跨平臺XDDDD

下載點:
http://www.netbeans.org/downloads/index.html
//似乎在寫JAVA時也可以用

UML plugins 的介紹:
http://www.netbeans.org/features/uml/index.html
簡易安裝方法
選tools->plugins
接著選available plugins
在右上角的search打uml
會找到一個結果
打勾
之後選左下角的install就好了

簡單的展示及教學:
http://www.netbeans.org/kb/trails/uml.html

別人使用後的心得:
-----------------------------------------------------------------
用了幾天Netbeans UML,除了時不常的沒法生成代碼之外,其餘都還好。

寫點我的體會出來,也算做個總結
優點


1.類圖插入屬性屬性後可以自動產生getter和setter方法,刪除屬性也會自動把getter和setter方法刪除,很方便。
2.很好的代碼生成功能,如果修改了類圖之後重新生成類代碼,已經寫的代碼不會被錯誤的覆蓋,非常智能。
3.導入功能很不錯,不用把所有的類都放在一個uml 工程裏了。
4.生成報表功能很棒,可以直接生成javadoc,方便無比。
5.鍵盤操作支持的很好,幾乎和rose一樣好用。



優點就這麼些了,下面談談缺點


1.代碼生成功能動不動就不好使了,只有把用戶數據刪除才可以繼續使用(windows下的用戶數據在documents and setting/application data目錄下,linux的用戶數據在~/.Netbeans目錄下)
2.導入功能不支持循環導入,比如A工程導入了B工程,那麼B工程就不能再導入A工程了。
3.導入功能做的不夠人性化,折騰了半天我才知道原來是用拖拽來實現導入的,怎麼也沒個菜單項??!!
4.要是支持導入jdk的幾個包就好了,也許有這功能,但我沒找到罷了。
5.幫助文檔太簡單了,都是廢話,明顯是對付,網上的資料也少,只能靠著自己摸索。
6.重構功能太弱,像是圖例改名功能太弱了,模型名字倒是改了,工程目錄裏的xml文件為什麼不改呢?
7.圖例遷移功能太弱,從舊工程遷移到新工程的話,一些對象間的關系就丟失了,還得手工重建,我的建議是再這個功能完善之前,最好工程建好之後就不要再遷移了,否則很累人的。
8.報表功能應該提供RTF格式報表啊,如果客戶需要一份設計文檔,難道要把javadoc風格的文檔給客戶嗎?客戶還不得瘋掉。
9.保存的時候Netbeans容易死掉,我的建議是最好能做一點就存一點,這樣可以減小損失。
10.根據類圖生成java代碼的時候,注釋中的中文都成了Unicode字符。
------------------------------------------------------------------

在youtube上打「netbeans uml」可以找到不少教學影片

網誌新氣象

I have a dream :P

希望讓這個網誌走向分享的方向

除了C語言外

如果有任何的資料想要分享的都可以放這邊

不然一直放著也沒意思

大家一起來建設吧!

2009年3月28日 星期六

突發奇想

不如找田神來指導一下:P
(這是認真的)

久違的文章

期中考後重新動工
目標:我們要到100題!!

2009年2月20日 星期五

明天的團練

要去排戲
晚上才會回來
看兩位要不要自己揪
或者是等我回來XD

2009年2月13日 星期五

快開學了

除了一週一次的團練外有沒有什麼練習的意見?

2009年1月14日 星期三

話說

三個人都有T-Shirt!!!!

2009年1月2日 星期五

新年快樂!

想說來揪團練期末考試題
大家寫了沒?