用au3写的一个代码行统计工具

当初想写这个东西起因是组里要统计代码量,苦于市面上没有可以统计SQABasic(Rational Robot使用的脚本语言),Y哥立马写了个macro出来完成了这个任务。当时我正好在学AutoIt,心想怎么着也得整个GUI版的出来吧,于是就回家捣鼓了一通,fakeLOC就诞生了。

fakeloc.jpg

AutoIt本来是用来做windows下的GUI自动化的,却被我用来搞这个事情,我真是不务正业的典范。。。另外,我不得不承认,这个东西的效率非常低,这是受au3本身语言特性限制的,我也没有办法。。。

大概测试了一下,准确度应该还行吧。当然,如果你喜欢使用嵌套注释,我敢向你担保统计结果一定是不准确的,懒得伤脑筋去处理这种变态的注释风格。。。

统计了下au3 3.3.1.1汉化版自身的源代码,代码行103254,注释行59702,空行25648

又统计了一下我毕业设计的项目源码,代码行10984,注释行353,空行613。注释只占3%,我真是相当懒啊

挣扎了许久,把源码一起打包放上来。

利用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>

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