随笔 - 65  文章 - 110  trackbacks - 0
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

第一个Blog,记录哈哈的生活

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

今天安装了 svn 服务端。
为什么写呢?因为和以前安装的不一样。
有什么不一样呢?
1、方便了很多
2、安装了 viewvc

为什么要安装 viewvc,而不是fisheye呢?
不是因为viewvc比fisheye好,就是因为刚才的第一点,方便。

以前安装 svn 都是直接下载一个 svn windows 版的压缩包,解压,bin目录加到path里,使用 sc 命令用 svnserve 建个服务,启动,完成。
其实这个步骤还是很简单的,就是在使用 sc 建 service 的时候,命令行有些复杂而已。
但这样只能使用 svn://xxx/xxx 来使用,而且不能在 web 上看到版本库,那么,就想了点儿办法,安装一个 apache 吧,然后根据文档,一顿猛配,相当的麻烦。好处就是,可以使用 http://xxx/xxx 来使用,而且可以在 web 上浏览到最新的版本内容,虽然 web 功能土了点儿,但至少可以使用了。有的时候,深得这样不爽,就再加个 fisheye,我个人相当喜欢 fisheye 这个软件,以至于花了点儿时间破解了一下,需要的可以在 blog 上找一下,不是暴力的那种,是半注册的,可以跟着升级的那种。

但是,唯一,也是最大的问题,就是麻烦,安装这一套东西,那是相当的麻烦啊。

今天发现了一个方便的办法。

下载三个东西:
1、CollabNet Subversion Server
2、python
3、python win32api

安装过程和下载不太一样。
1、python
2、CollabNet Subversion Server
3、python win32api

2、3顺序无所谓的。

然后,就拥有了一个 svn + apache + viewvc 的环境了,相当的方便。
我喜欢。

呵呵…… ^_^
posted @ 2008-08-05 21:28 哈哈的日子 阅读(54) | 评论 (0)编辑 收藏
1、我想做什么
2、我该做什么
3、我要做多久
posted @ 2008-06-12 22:31 哈哈的日子 阅读(65) | 评论 (0)编辑 收藏
可以直接将 plugin 放到 dropins 目录下,即可自动完成安装。

dropins 目录支持下列形式的结构。

1、
 eclipse/
dropins/
org.eclipse.core.tools_1.4.0.200710121455.jar
org.eclipse.releng.tools_3.3.0.v20070412/
plugin.xml
tools.jar
... etc ...
...


2、

 eclipse/
dropins/
eclipse/
features/
plugins/


3、

 eclipse/
dropins/
emf/
eclipse/
features/
plugins/
gef/
eclipse/
features/
plugins/
... etc ...

4、 

 eclipse/
dropins/
emf.link

最后一种就相当原来的 links 目录,只要写
path = ...
就可以了。
posted @ 2008-04-13 13:02 哈哈的日子 阅读(1465) | 评论 (0)编辑 收藏
batch_size 即同时提交数据的数量,原本与事务并没有什么关系,但如果涉及到同一张表数据的同一种操作,可能就会发生微妙的关系了。

场景如下:
场景一:使用 spring 控制事务,将方法事务配置为 not_supported,向同一张表中插入两条数据,保证第一条数据正常插入,而第二条数据受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:两条数据均失败。
原因:hibernate 将两条插入放到了同一个 batch 中,提交同时失败了。

场景二:同样使用 spring 控制事务,将方法事务配置为 not_supported,向第一张表中插入一条合法数据,成功,向第二张表插入数据,受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:第一条数据成功,第二条失败。
原因:hibernate 分别插入数据并提交,在无事务的情况下,第一条成功,第二条失败。

那么如何让场景一得到预测结果呢,一个简单的解决方法,将 hibernate.jdbc.batch_size 设置为 1,即可。

所以,即使控制了事务,也未必能够得到期望的结果,还需要考虑某些特殊的场景带来的影响。
posted @ 2008-03-06 14:18 哈哈的日子 阅读(1017) | 评论 (2)编辑 收藏
CenquaCrack.rar

Include Clover(2.0.3), Fisheye(1.4) and Crucible(1.2) - Crack by Sea Chang
Crack by Sea Chang - 2007.12.16

posted @ 2007-12-16 10:58 哈哈的日子 阅读(1273) | 评论 (17)编辑 收藏
最好的代码测试覆盖率查看软件。

CloverCrack.rar


Crack By Sea Chang

2007.11.30
posted @ 2007-11-30 21:45 哈哈的日子 阅读(1023) | 评论 (5)编辑 收藏

在学习 lua 的时候,看到了一个生成序列的一个递归算法,比起我以前的算法,要好得很多,学到了。^_^

package com.sea.pc;
public class Permgen {
 
public static void main(String[] args) {
  Permgen permgen 
= new Permgen();
  String[] ss 
= { "a""b""c" };
  permgen.permgen(ss, 
3);
 }
 
public void permgen(Object[] os, int n) {
  
if (n == 0) {
   
for (Object obj : os) {
    System.out.print(obj 
+ "\t");
   }
   System.out.println();
  } 
else {
   
for (int i = 0; i < n; i++) {
    Object t 
= os[i];
    os[i] 
= os[n - 1];
    os[n 
- 1= t;
    permgen(os, n 
- 1);
    os[n 
- 1= os[i];
    os[i] 
= t;
   }
  }
 }
}

 
 

  

posted @ 2007-10-21 15:18 哈哈的日子 阅读(177) | 评论 (2)编辑 收藏
最先遇到的问题是编译的问题,我觉得环境对于一个新手有致命的阻碍作用。可能有人会说,去  google 一下不就完了,可是,实际上新手可能根本就不知道要 google 什么,我学 c 很多次放弃基本上都是环境原因。

这次弄 c 主要是为了和 lua 脚本语言集成,其实用 java 也有得选,luajava 不失为一个好的选择。但是长久以来的小体积什么都不依赖就能运行的 c 程序(.exe)文件对我很有吸引力,因为发布 java 程序就意味着要伴随十几M的jre(哪位知道不用jre的,请务必教教在下),所以,这次决定了,学习 c!

IDE 嘛,就选择了 CDT,实在是太习惯eclipse了,然后就是用 Programing in lua 中copy个例子下来,编译。我靠,错误,想了想,把 lua 的那些头文件加进来,把 lib 目录也加进来,我靠,还是编译不过,崩溃了,放弃。

sigh,c编译是我永远的痛!

一天在公司里,突然想起有个同事是弄 c 的,问问他吧。他人好热情,给我讲了好多。终于明白了,不仅要把 lib 目录加进来,还要指定具体的 lib 文件名字,编译通过,迎来了全新的世界。

经过一段时间的乱弄,终于如愿的把程序编译成动态链接库(windows下的dll),引入到 lua 里,插曲:lua 原来引入动态链接库是全局的 function 叫 loadlib ,我靠,升级到 5.1 竟然改成了 package.loadlib,害我 google 了半天。不过其实 5.1 的 changelog 里是说了的,^_^

我的 lua 终于可以调 c api 了,快乐之情无法表达啊!

来,再做一个使用 c 访问网页的功能,找了半天,决定使用 wininet 库,跑到 ms 的 msdn 上一顿猛找啊,终于,皇天还不负我这个学c有心人,终于在一个 xx 角落里找到了 wininet 的 api,我,我终于可以用他连网了!

经过一会儿的奋斗,终于,从 http://localhost:8080/index.html 中,把自己 tomcat 的主页访问了出来,快乐的瞬间!
马上就发现这个程序有间歇性失忆,一会儿好用,一会儿不好用。共发生过以下几种失忆情况:

1、把代码 copy 到一个函数中,在 main 调用这个函数,程序运行失败!
2、删除了调试用的 printf 方法,程序运行失败!
3、夸张,这个是最夸张的!把 BOOL b = HttpSendRequest(req, NULL, 0, NULL, 0); 前面的 BOOL b = 去掉,只留下 HttpSendRequest(req, NULL, 0, NULL, 0);,失败!!!!!!!这样居然都失败!加上去就好好的运行。精神一度处于崩溃的边缘,眼睛里的血丝一度超过狼人!

左思右想,左改右改,死都不行!

一个声音高叫着:放弃吧,玩会游戏!

放弃了,md,再也不被 c 玩了,俺要玩俺的 java 去,下载 luajava 去,不理你了!
临行前,我恋恋不舍地看了一眼俺的c代码,我靠,突然发现这 xx 代码居然有个问题,这真是豁然开朗啊。

原来是。。。(省略一万字)

LPDWORD n; // LPDWORD 是个 unsigned long *

没初始化!
天啊,这点问题就让我找了这么久啊,我改。
DWORD a = 0;
LPDWORD n = &a;

一切正常。

世界终于清静了……
posted @ 2007-09-06 21:50 哈哈的日子 阅读(312) | 评论 (1)编辑 收藏

Maven Phases

Although hardly a comprehensive list, these are the most common default lifecycle phases executed.

  • validate: validate the project is correct and all necessary information is available
  • compile: compile the source code of the project
  • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package: take the compiled code and package it in its distributable format, such as a JAR.
  • integration-test: process and deploy the package if necessary into an environment where integration tests can be run
  • verify: run any checks to verify the package is valid and meets quality criteria
  • install: install the package into the local repository, for use as a dependency in other projects locally
  • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

There are two other Maven lifecycles of note beyond the default list above. They are

  • clean: cleans up artifacts created by prior builds
  • site: generates site documentation for this project

翻译内容,摘自 IBM

生命周期

在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段:

  • validate,验证工程是否正确,所有需要的资源是否可用。
  • compile,编译项目的源代码。
  • test-compile,编译项目测试代码。
  • test,使用已编译的测试代码,测试已编译的源代码。
  • package,已发布的格式,如jar,将已编译的源代码打包。
  • integration-test,在集成测试可以运行的环境中处理和发布包。
  • verify,运行任何检查,验证包是否有效且达到质量标准。
  • install,把包安装在本地的repository中,可以被其他工程作为依赖来使用
  • deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  • generate-sources,产生应用需要的任何额外的源代码,如xdoclet。
posted @ 2007-08-08 16:30 哈哈的日子 阅读(209) | 评论 (0)编辑 收藏
最近一个朋友做猜数字游戏的解法,我也尝试了一下,在做数据生成器的时候,就希望做一个类型无关的,其实这个问题在去迅雷面试的时候就被问到,不过当时想都没想就放弃了,虽然面试当天回来的时候,完成了一下,但结果还是差强人意。所以想借这个机会弄一下。

在记录一条数据(Record)的时候,我本来使用了 List 实例化成 ArrayList,然后开始算,不过借助 JProbe 看了一下,List.size() 和 List.get(i) 这两个方法因为调用次数太多而占用了大部分的时间,所以第一想法是改成数组。

当我 new Record 的时候,使用的是 list ,自然想把这个 List<T> 转换成数组 T[] ,不过非常麻烦的是 list.toArray(T[]) 中的 T[] 不知道如何得到,不知道如何弄到 T[] 的实例,new T[list.size()] 是没办法的。

第一个反应是从 list 或是 List<T> 定义的 class 中得到成员的类型,然后使用 Arrays.newInstance 来创建一个,我花了好长的时间都没有能够得到,后来和同事聊天时,猜测是不是编译完的 class 文件中根本就没有类型的信息,不过当时没能确定。

晚上接着猜数字的时候,旧事重提,google 了一下,看到了一个非常好的文章。
http://www.ibm.com/developerworks/cn/java/j-jtp01255.html
将泛型说明的非常清楚,其中一句是这样的“Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除)”。

验证了我的想法,在 class 文件中,根本就没有泛型的信息。

实际上,声明一个泛型数据的方法是

T[] array = (T[])new Object[length];

这样,问题解决,对 Java 泛型的理解增加了一些。
posted @ 2007-08-08 00:39 哈哈的日子 阅读(980) | 评论 (3)编辑 收藏
仅列出标题  下一页