ruby on rails 上安装及使用rspec

Jul 23 2010

rspec 是 ruby 中最有名的测试框架。针对于rails,rspec有个很好的插件 rspec-rails 本文介绍这个插件的安装。
1 安装rspec: $ gem install rspec
2 安装rspec-rails:$ gem install rspec-rails
3 在rails目录下运行:$ ruby script/generate rspec
4 Spec::Rails可以生成model rspec 和 restful controller
命令如下:ruby script/generate rspec_scaffold purchase order_id:integer created_at:datetime amount:decimal
同样也可以生成只生成model和rspec:ruby script/generate rspec_model person
或者controller:ruby script/generate rspec_controller person

No responses yet

python 插入排序和 快速排序

Jul 11 2010

#python 写的 插入排序和 快速排序

def insert_sort(seq):
    for i in range(len(seq)):
        j=i-1
        value=seq[i]
        while(j>=0and seq[j]>value):
            seq[j+1]=seq[j]
            j=j-1
        seq[j+1]=value
    return seq
def quick_sort(seq):
    if(len(seq)<=1):return seq
    #把seq[0]作为中值
    left=[y for y in seq[1:] if y < seq[0]]
    right=[y for y in seq[1:] if y >= seq[0]]
    return quick_sort(left)+[seq[0]]+quick_sort(right)
 
if __name__ == "__main__": 
    seq=[5,3,6,7,1,9,3]
    print insert_sort(seq)
    print quick_sort(seq)

No responses yet

算法:Java 版 汉诺塔

Jul 08 2010

算法:Java 版 汉诺塔

package test;
 
public class Tower {
 
	public static void main(String[] args)throws Exception{
		move(4,'A','B','C');
	}
 
	public static void move(int n,char from,char to,char mid){
		if(n==1){
			System.out.println("把盘子"+n+"从"+from+"移动到"+to);
			return;
		}
		move(n-1,from,mid,to);
		System.out.println("把盘子"+n+"从"+from+"移动到"+to);
		move(n-1,mid,to,from);
	}
 
}

No responses yet

算法:关于二进制

Jul 08 2010

package test;
 
public class BitAdd {
 
	/**
	 * 算法,给定一个二进制数n中1所在的位置,求3*n的二进制表达式中1的所在位置
	 * 例如 50 的二进制位110010 那么这个二进制数1的位置为{1,4,5},50*3=150 求150的二进制数的1所在位置 
	 * 先利用2*n等于n左移以为,计算出2*n,再2*n+n 得出解,解最终打印出来了。关键步骤就是二进制加法。
 
	 */
	public static void main(String[] args) {
		int[] A={1,4,5};
		int[] B={2,3,4,5};
		Bit3Times(A);
		System.out.println("");
		Bit3Times(B);
 
	}
	public static void Bit3Times(int[] A){
		int[] B=new int[A.length];
		int[] C=new int[A.length+1];
		for(int i=0;i<A.length;i++){
			B[i]=A[i]+1;
			C[i]=A[i];
		}
 
		for(int i=0;i<C.length;i++){
			if(i<B.length){
				for(int j=0;j<B.length;j++){
					if(C[i]==B[j]){
						C[i]=C[i]+1;
						break;
					}else if(B[j]<C[i+1]&&B[j]>C[i]){
						C[B.length+i]=B[j];
					}
				}
			}
		}
		if(C[B.length-1]==B[B.length-1]){
			C[B.length-1]++;
		}
		int num=0;
		for(int i=0;i<C.length;i++){
			if(C[i]>0) num++;
			System.out.printf("%s,", C[i]);
		}
	}
 
}

No responses yet

Hibernte 1:n 最佳抓取策略

Mar 10 2010

Hibernte 1:n 最佳抓取策略
在orm中实体1:n关联时,要考虑两个问题,分别是经典的n+1问题,和笛卡尔积问题。所以要避免使用默认抓取策略,同时尽量减少结果。hibernate作为最主流的java orm。一般的的优化原则是使用batchsize减少子查询的sql数量,同时在one一端使用懒加载,并且用subselect或者join来代替默认的关联加载。
上代码:

@Entity
@BatchSize(size=10)//因为一般要获得post,都会调用creator,所以使用预抓(EAGER)策略,同事设置预抓持为10
public class User extends BaseEntity{
@Id @GeneratedValue
@Column(name="id")
private long id;
@OneToMany(mappedBy="creator",fetch=FetchType.LAZY)//懒加载
@Fetch(FetchMode.SUBSELECT)//使用JOIN会产生笛卡尔积的问题,subselect策略是Hibernate.org推荐的解决N+1问题策略
private Set posts=new HashSet();
......
}
@Entity
public class Post extends BaseEntity {
@Id @GeneratedValue
@Column(name="id")
private long id;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(nullable=false)
private User creator;
....
}

No responses yet

用perl脚本解决ant…非法字符:\65279…的问题

Feb 21 2010

用perl脚本解决ant…非法字符:\65279…的问题


用ant管理项目,编译时发现有些utf8编码的java文件无法编译,
报错是…非法字符:\65279…。

在网上查N多与ant有关的文章,但是大多数的解决方案都不是很理想。因为文件比较多,而且我的
机器上也没有装editplus。
索性自己用perl写了一个脚本
如下:

#remove the utf-8  BOM for Ant
sub remove_bom {
	#open( my $in, "+<", "src/com/umpay/wap20/mobileProxy/MobileProxy.java" );
	foreach my $filename (@_) {
		print $filename,"\n";
		open( my $in, "+<", $filename );
		@lines = <$in>;
		$line1 = $lines[0];
		$t_chk1 = substr( $line1, 0, 1 );    #0xef -> 239
		$t_chk2 = substr( $line1, 1, 1 );    #0xbb -> 187
		$t_chk3 = substr( $line1, 2, 1 );    #0xbf ->191
		if ( ord($t_chk1) == 239 && ord($t_chk2) == 187 && ord($t_chk3) == 191 )
		{
			$line1 = substr( $line1, 3 );
			seek( $in, 0, 0 );
			print $in $line1;
		}
		close $in;
	}
}
&remove_bom("src/com/umpay/wap20/mobileProxy/MobileProxy.java"
,"src/com/umpay/wap20/security/GeneralKeyPairs.java"
,"src/com/umpay/wap20/security/RSAUtil.java"
,"src/com/umpay/wap/pages/WML.java");

其中remove_bom方法就是处理有问题的文件的方法。
把你的项目中出现问题的文件名称一个一个的放到remove_bom的参数列表中就可以了。ant,BOM,ant,BOM
最后运行这个perl文件。之后再运行ant就可以了。

No responses yet

Older posts »