利用ScriptEngine实现简单公式的计算

做金融软件的测试常常涉及到公式的计算,出于通用性及可维护性的考虑,我们不希望把计算过程固化到自动化脚本里,因此我们设计了一个数据文件,里面存储了各种费用的计算公式,如:Total Fees = Local Fees + Local Tax + Other Fees.

这其中的Total Fees, Local Fees, Local Tax, Other Fees都是一个独立的VP点,我们已经从被测程序的GUI界面上抓取到了实际结果,那么用实际值替换以后的公式会变成:10 = 2 + 3 + 5。那么我们需要做的就是验证这个等式成立。

这里列举的是最简单的情况,实际中可能会出现乘除法甚至带括号的复杂运算,看起来我们需要实现一个四则运算类来完成这个工作。利用Stack把中序表达式转换成后序表达式,然后进行逐项计算,再遇到有括号的情况,会更复杂,我看到网络上的很多Calc类在处理含括号表达式时都会出错。

其实我们不需要这么大的工作量,Java 1.6提供了ScriptEngine接口,使得我们可以调用脚本引擎,如此一来我们只需要区区几行代码就能搞定这个复杂的问题啦:

public static boolean calcVP(String formula, double actVal) {
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    Object calcResult = null;
    try {
	calcResult = engine.eval(formula);
    }
    catch (ScriptException e) {
	// TODO: handle exception
    }
    if (calcResult != null) {
	double expVal = Double.parseDouble(calcResult.toString());
	return actVal == expVal ? true : false;
    }
    return false;
}

一个方法起到了一个class的作用,而且Javascript引擎支持什么运算我们就支持,厉害吧~ScriptEngine是个很有用的特性,多多研究加以利用可以节省很多项目成本。

隐藏email地址防范垃圾邮件的方法

我们有时候需要在网络上发布自己的邮箱地址,但是这么做的后果往往是不久之后你就会收到源源不断的垃圾邮件。通常应对这种问题的方法是,留邮箱的时候把@换成#,然后告诉人家“请把#换成@再给我发邮件”,何其繁琐!

狮子座是极端完美主义者,所以我绝对不允许这么不友好的情况出现,如何在方便浏览者的同时也最大限度的保护自己的邮箱呢?只有想不到,没有做不到。跟着我一步一步走向BT之路吧~

Solution 1: 用脚趾头都想得到对不对?邮箱采集程序识别的是html源码,那么我不给它文字不就完了,所以最简单的办法,发布的时候用图片吧,像这个样子

这样,你的问题解决了,可是别人呢?人家没法复制你的邮箱了,他还得一个一个字母地把你的email地址敲出来,看来我们还需要更人性化一点

Solution 2: 不如给图片加个链接吧,这样只需要单击它就能发送邮件了,所以,聪明的你一定想到了<a href=mailto:mail@domain.com>对不对?可是这么做的话,你的地址不是还是写出来了么。。。所以我们需要加工一下

<a href="javascript:navigate("mai" + "lto:" + "mail" + "@" + "lurenfake.com")"><img src="email.png" /></a>

把它拆了,再用javascript拼起来,这样大概可以防范绝大多数的骚扰了吧。

但是,其实,我们还有更变态的方法的。。。想看不?

Solution 3: 首先你需要找到一张ASCII码表,c语言教材的附录里有,我传一张上来

现在,对着这张表,把你的email地址翻译一下吧,然后替换下面程序里的mailArr数组

<script type="text/javascript">
    var mailArr = [109, 97, 105, 108, 64, 108, 117, 114, 101, 110, 102, 97, 107, 101, 46, 99, 111, 109];
    var img = "<img src=\"email.png\" />";
    var mail = "";
    for(var i = 0; i < mailArr.length; i++)
    {
        mail += "&#" + mailArr[i] + ";";
    }
    document.write("<a href=\"mailto:" + mail + "\">" + img + "</a>");
</script>

把这段代码贴在你要贴邮箱的地方吧,没有人能骚扰到你。

关于gravatar

这个大概看起来会像一篇软文,但是我没有得到它的任何好处,只是我觉得推广它非常有必要,至少我很喜欢

Gravatar是Globally Recognized Avatar的缩写,是Web2.0时代的产物。Web2.0的特点是它提供的是服务而不是产品,这个服务能干什么呢?它把一个email地址和一张图片关联起来,这样当你在任何支持gravatar服务的blog或bbs上留言时,只要你提供了你的email地址,就能显示你设定的头像。cool?

在我的博客上,就提供了gravatar支持,比如我发表评论的时候就是这个样子:

留言.png

我的头像不错吧~~

那么怎么拥有自己的头像呢?follow me~

Step 1. 到http://www.gravatar.com注册一个账号,如果你的英文差到连该点哪个按钮去注册都认不出来,我也不会教你的。。。

Step 2. 你需要登录你注册时填写的email地址去激活账号,激活之后登入gravatar网站,就可以上传头像了,上传完成后会让你选显示分级,一般就选G吧,限制级?那就得选X。。。

Step 3. 发表评论,邮箱填你注册gravatar的那个邮箱,然后,你就能看到你的头像出现在评论里啦~

Enjoy it~

与IE斗,其乐无穷

奋战了无数个日夜,终于把这个博客给建起来了

我本来叫路人甲,谁知道lurenjia.com这个域名在7月份被人给抢去了,晚了一步啊。。。某一天突然灵光一闪就想到了路人假,lurenfake看起来倒是比lurenjia要更有文化一点~备案花了6天,还是比较快的。

程序用了小ASaBlog-X 2.0,改了好多bug,以至于我都不记得改了哪些地方了

然后淘到一个WP的皮,感觉很简洁,移植到Sablog可真是把我给累死了,做前端真不是人干的活。。。为了杯具的IE6,不知道花了多少工夫,写了多少无谓的代码。。。以后谁用IE6我就跟谁急!

这里要感谢几个无敌的调试工具,firefox + firebug,IEtester + Debugbar,没有它们,我会被折磨到死的。。。

目前看来还是比较满意的,总算有自己的窝了,哈哈,开心~

睡觉去~