by agate - Published: 2009-08-17 [9:02 上午] - Category: 软件使用

Fitx 这个开源的优秀输入法让我在 linux 下体会到如同 windows 下搜狗输入法那样的舒服. 良好的速度, 流畅的输入体验, 完整的用户词库导出导入功能. 我觉得在 linux 下, 没有什么输入法能让我如此着迷的了.

Fitx 是 http://fit.coollittlethings.com/ 出品的. 同样地, 也有 mac 版本. 同样是好用得不得了. 但是可惜的是目前免费的 MAC 版本官方已经不再更新了. 我想估计是资金问题吧. 不过如果好用的话, 我会考虑购买一个的.

不过说回来, 我还是喜欢免费的午餐. 特别是 linux 下. 我们可以通过 svn 导出 http://code.google.com/p/fitx/ 里头的源文件. 然后自行编译安装.

具体步骤如下.
1. $ svn co http://fitx.googlecode.com/svn/branches/fitx-autotool fitx-autotool
2. $ cd fitx-autotool
3. $ ./autogen.sh
4. $ make deb && sudo dpkg -i ../fitx_*.deb

其中遇到任何错误基本是没有安装完整的编译工具导致. 请查看 log 并安装对应的编译帮助工具即可.
最后执行那个生成的 deb 安装包就 ok 咯!

Tags: [ , , ] - Comments: Comments
by agate - Published: 2008-05-01 [9:42 下午] - Category: 程序编码

不知道各位使用 Struts1.x 的朋友们晓得不晓得,Struts1.x 的 org.apache.struts.action.Action 中有两个 execute 方法,在我们使用 eclipse 的自动完成 override 功能的时候要是不小心给弄错了你就等着迎接一个不报错的空白页面吧!让我们看看代码:

// one execute
public ActionForward execute(ActionMapping mapping, ActionForm form,
	HttpServletRequest request, HttpServletResponse response) {
	//code...
}
// another execute
public ActionForward execute(ActionMapping mapping, ActionForm form,
	ServletRequest request, ServletResponse response) {
	//code...
}

好,公布结果!只有 override 上面这个 execute 才能起作用。如果你 override 的是下面这个 execute 的话,很不幸,您调用这个 action 的时候响应给你的是一个空白的页面,你也别想得到任何 exception 的提示!

在 eclipse 中我导入了 struts1.x 的 src 路径,并通过 Open Call Hierarchy 查找调用上面第二个 execute 的类时发现竟然没有调用者!换句话说当我们实现第二个 execute 的时候(没有实现第一个 execute ),是根本没用的!程序根本不会调用到我们 override 的那个 execute 只会傻傻地调用第一个 execute 的默认实现,返回一个 null

那第二个 execute 有什么用呢?我觉得他不是用来给我们重写的,看看它的内容:

public ActionForward execute(ActionMapping mapping, ActionForm form,
	ServletRequest request, ServletResponse response)
	throws Exception {
	try {
		return execute(mapping, form,
			(HttpServletRequest) request,
			(HttpServletResponse) response);
	} catch (ClassCastException e) {
		return null;
	}
}

在我看来,其实它是为了当一个请求是一个非 http 请求的时候,作为一个前端转换器,重新包装请求和响应,然后才交给真正的,也就是我们的第一个 execute 方法来实现。这个从 src 的注释中我们也可以比较清晰的了解:

Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic. Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

所以……当你重写这个 action 的 execute 方法时,注意咯!是重写那个参数是 http-request/response 的 execute哦!!!

这里严重鄙视一下 struts1.x 的编码态度!

by agate - Published: 2008-04-02 [5:45 下午] - Category: 程序编码

虽然如今的ws标准都已经很智能了,大多的数据类型都可以识别。但是在GlassFish中,发布的ws方法中参数和返回值不可以为hashmap的,但是如果非要要使用键值对该如何使用呢?
最简单的方法就是再次包装:

public class MapBean {
	private HashMap<String,String> hm;
	public HashMap<String, String> getHm() {
		return hm;
	}
	public void setHm(HashMap<String, String> hm) {
		this.hm = hm;
	}
}
@WebService()
public class HelloWorld {
	public HelloWorld() {
	}
	@WebMethod
	public MapBean getMapBean(HashMap<String,String> hm) {
		MapBean mb = new MapBean();
		hm.put("server", "serverHashMap");
		mb.setHm(hm);
		System.out.println("Hello HashMap...");
		return mb;
	}
}

这样,加一层包装之后,就可以间接地使用Map了。

by agate - Published: 2008-04-01 [7:44 下午] - Category: 历程, 程序编码

IOC(DI)即依赖注入,参见的就是Spring的IOC容器,实现就是实现符合java bean的规范的带有无参构造函数的带有对应set和get方法的一个java类(pojo)。前面都是废话,我们都知道注入一般就是使用set方法,对需要的成员变量进行动态的赋值指向。一般get没有什么用,所以我们用spring管理的时候一般只需写入需要注入对象的set方法即可。

但是今天开发展现层的时候……我用struts的表单自动注入的特性写了一个CRUD模块,当然我还是使用原先的逻辑:只写set方法。结果值没有正确被赋值(有的时候只有部分值被获取)。而且发现如果是简单的数值类型的参数在只设置set方法的情况下是可以被赋值的,但是要是参数是一个ValueObject这样的一个实体对象:

public class User {
	private String userName;
	private String userPwd;
	// --------other private property
	// --------setter
	// --------getter
}

那么,如果我们在action中只对user属性写了set方法

public class UserAction {
	private User user;
	// --------setter
	public String execute() {
		// --------code...
	}
}

那么经过我不下10次的不同试验,保证是无法正确赋值的!因为……还缺了个get方法。也不知道具体原因是什么(猜想在struts2的IOC中,对于复杂对象的注入可能同时用到了set和get方法),但是经验告诉的是set和get方法最好都写!

by agate - Published: 2007-08-30 [9:35 下午] - Category: 历程

自己一直想为以后留下些什么,似乎软件这个东西很虚无的,写了也就写了,终归不是自己的!突发一个想法,把那个easybean继续下去,就借用命名空间的easytool申请了一个google的code开源项目空间!

项目地址:http://code.google.com/p/easytool/

Tags: [ , ] - Comments: Comments