归档于 ‘技术与经验’ 分类
移动办公或多重网关的网络环境下,经常需要切换网络配置,为了图方便写了一组切换IP的脚本。 具体用法是在命令行执行“ConfigNet.bat IP1"切换到网络环境1,……,执行"ConfigNet.bat IPn”切换到网络环境N. 注: 如果多重网络环境不是同时运作,可以考虑使用windows系统网络的特性,为网络设置多重网络地址, 操作系统可根据还环境自行切换. 1. 建立网络环境1下的shell文件,IP1.sh 其中,文件中的**IP1需要替换为对应于网络环境1下的各IP地址。IP1.sh的内容如下: #IP1.sh # Interface configuration pushd interface reset all popd # Interface IP Configuration pushd interface ip set address name = "本地连接" source = static addr = yourIP1 mask = yourMaskIP1 set address name = "本地连接" gateway = yourGateWayIP1 [...]
同事发布一个在线查询的WebService,总是遇到麻烦,于是就去看看。稍微浏览之后,问题还没有定位,但发现了一个不合理的地方:将虚拟目录配置在长文件名之下,并且路径包含有空格。但同事说在这个版本下这样的情况好像是允许的,并且他已经指定成了短文件名,比如:"C:Progra~1Micros~4WS”。 这让我想起了另一件事,老婆是计算机专业的老师,前几天晚上看到她在为《JSP基础编程》备课,讲义的一节是对JSP注释语法的讲解。她的讲义很详细,详细阐述了注释有多种,其中:<%– comment –%>中的Comment字符串是不被解释的,而<!– comment [ <%= expression %> ] –> 中则可以放入类似示例中的expression语句,并且会被解释的。 诸如此类的事例举不胜举,技术人员往往陶醉于模棱两可的细节中,更因为自己掌握了细节之间的差异、细节在不同的环境及系统之间的差异而沾沾自喜。 然而,在我看来,既然有相当一部分Web Server不允许路径包含空格,那么有何必非要使用一个带空格的长文件名,用~1、~4的方式指定更是自找麻烦,并且颇有奇技淫巧的意味。同样,注释就是注释,何必在里面包含逻辑?即使当时清楚自己的所为,也比将为以后的维护和其他人的理解带来麻烦,更何况这是对初次接触这个领域的学生所授的基础课程。 绝大多数技术人员却长期沉浸于此。看了很多花花绿绿的东西,从来不去想其中的思路和概念,而是将将这么一句挂在口头:“好牛啊”,更甚者如果是类似自己公司的软件,就立马准备照抄其中的某些“精彩之处”,并扬言曰“人家这么做自然有他的道理”。且慢,动手之前是不是应该考虑这两个问题:1、人家到底是怎么做的?2、他的道理到底是什么?3、这个道理是否对我们适用?4、我们既然是踩着人家向上爬,怎样才能做的更好,又依据什么样的道理呢? ……。 不去思考,不愿总结归纳;脑袋里就喜欢塞满各种看似巧妙的东西,小脑壳就那么大,到底能塞进多少内容呢?错将技巧当技术,无疑于本末倒置,万望诸位同仁引以为戒。
看到一个网友提问:如何在java中调用Dll,他写的程序出了一些问题。他的问题如下: 我用VC做了一个Image.dll,请问: 我用java调用 public class kk { static { System.loadLibrary("Image"); } public kk() { } private native void OnBtnOpenFile(char [] ll); public void text() { String kk="d:\1.bmp"; char[] mm=kk.toCharArray(); OnBtnOpenFile(mm); } public static void main(String[] argo ) { [...]
在基于Java的软件系统的构建过程中,开发人员经常会遇到词法解析、语法解析等问题,比如:在报表系统的中一般需要支持单元格计算公式(类似于Excel的公式),在某些系统的数据转换过程要实现自定义的转换规则脚本。面对这一类问题,我们最终需要的是一个针对问题域的词法及语法解析器,通常的实现方式不外乎有以下几种: 1. 自己实现全部过程 当所涉及语法非常简单(一般只有一两句原语)时,可以选择该方式。 优点:最直接,自然而然的选择;如果开发人员理论基础扎实的话不需要额外的学习负担。 缺点:要求有一定的理论基础;不利于扩充、或设计良好利于扩充但随着未来需求的改变及新语法的不断增加使扩充的开发成本不可控;测试成本增加;因未经过应用检验而存在风险; 2. 使用第三方的脚本引擎 当所涉及的语法及其复杂(需要支持比较复杂的脚本,甚至需要实现一种新的程序设计语言时,类似于Brio Query中提供的自定义脚本功能)时,可以选择该方式。目前,在互联网上有很多第三方脚本引擎(如:针对应用有:Netscape Script Engine、JavaRhino、BeanShell、IBM BSF、Tcl-Java等,针对Delphi应用有:Innerfuse Pascal Script 3,对微软体系有Microsoft Script Engine。这些引擎的具体情况不在这里讨论)可以选择,只需要少量的编程工作这些脚本引擎大多都可以内嵌到宿主应用程序中,为宿主应用程序提供脚本支持功能。 优点:开发工作量少;部分引擎已经得到广泛应用的验证;具有复杂的脚本支持能力,可以提供类似于程序设计语言的处理能力。 缺点:脚本的语法由使用的引擎决定,往往比较复杂,对于处理简单问题的场合显得过于累赘;系统中需要引入第三方的类库/控件;要求最终用户学习引擎所规定的脚本语法;某些引擎在访问应用系统的运行时对象时能力有限。 3. 使用语法解析器生成器 使用过Unix的同志一般会知道在Unix中有Yacc/Lex,C语言的编译器生成器。在Java中,也有相应的工具。此方法使用JFlex/Java_Cup生成语法解析源码。本人使用这种方法成功的实现了类似Excel那样的公式,支持多种运算及函数,可以维护上下文,可以在表达式中引用系统的对象体系,可以执行动作,并且可以任意扩展而不需要修改解析源码。 关于JFlex与Java_Cup的文档你需要自己到下面的链接中仔细看看。其中关键的部分是需要定义你的语法及词法分析文件,类似于BNF表达式。 主要步骤如下(为了方便,这里仅仅以四则运算为例,这个例子也是编译器构造工具的通用例子,满世界都采用它。): 当然首先你必须下在JFlex与Java_cup,并解压到特定目录,假定二者的目录分别是${JFlex_home}、${Java_Cup_home}。 3.1定义JFlex词法分析文件calc.flex /* This example comes from a short article series in the Linux Gazette by Richard A. Sevenich and Christopher Lopes, titled "Compiler Construction Tools". The [...]











