Category Archives: 技术乱弹

Astonish Presentation using CSS3 and JavaScript

With the ability of CSS and manipulate with JavaScript. Astonishing effect can be created. Here are some examples of those really cool presentation http://impress.github.io/impress.js/#/overview http://parhumm.github.io/presentation-learning-to-design/#/title http://pkoperek.github.io/bytecode-presentation/#/title http://programma.piratenpartij.be/#/digitalisering http://hashdog.com/brochure/#/slogan http://bartaz.github.io/meetjs/css3d-summit/#/learn

Jython Remote debug

It is all empty in the office this days. Most Swedes went for summer vacation. So I am not very busy and can spend some time to play technology. There are few ways to debug a problem. print information to debug file, then analyze the debug file. Some problem only can use this way to […]

AAA, Authentication,Authorization, Accounting

工作中一直接触到这几个词,对这个概念也一直是一知半解的,反正就是和安全相关的几个词。特别是Authentication, Authorization这两个词特别容易搞混。 这两天有空看了下Apache Shiro,顺便把这几个概念的理解记录一下。以后搞混的时候可以再看看。 在Authentication鉴权:简单一点就是你是谁。 就像我们看电话号码来确定对方是否是骗人的,有一个手机打过来说你的银行账户怎么了,那肯定是假的。这个电话号码相当于用户名。 如果朋友的手机给我发了一个短信,说急着用钱,让我给打点过去。那光凭这个电话号码还不够,那只是一个用户名,我们还需要一个密码。那我会打个电话过去确认一下这个信息是朋友发过来的。朋友的声音就相当于这个密码。 Authorization授权:就是你能干什么。 我虽然确定了朋友的身份,但是不同朋友能借钱的数量是不一样的。一般朋友的话可以借几百,好一点的可以借几千,哥们级别的可以借几万。当然再多我也没有:-(。 我们做软件的时候也一样,把在软件上能做的事情做一个列表,每一个列表项就是一个权限。怎么把权限分给用户有三种方式。第一种是直接将权限分配给用户,用户A可以做1,2,3,用户B可以做4,5,6。第二种就是将权限分给角色,再让用户属于某个角色或几个角色。第三种是混合方式,用户除了属于某些角色之外还能直接加一些权限。 Accounting记账:你干了什么。这些记录下来的信息可以用于多种用度。 Accounting记录的东西可以用于安全审计(Security Audit),如哪个用户什么时候登录了,什么时候干了什么事。 Accounting记录的东西还可以管理、优化和计划等,如某些功能用的多了那么我们就对这方面做优化。 Accounting的东西可以提供给计费系统。

软件测试干什么用

软件测试干什么用?最平常的回答就是提高软件质量。 测试人员一般根据什么来测试软件呢?我估计是软件设计文档。但是仅根据软件设计文档来测试软件大大的限制了测试的功效。如果和设计不符,测试人员就会报一个问题。但是如果测试用例很难编写,测试人员一般不会报问题。 而这正是问题所在。一个程序如果单元测试很难编写,那就是程序内部结构不咋的。一个软件如果系统测试很难编写,那就是软件架构不咋的。所以如果发现单元测试很难编写,就需要考虑重构程序了。所以如果发现系统测试很难编写,就需要考虑调整架构了。

JSON嵌套支持

Oryx采用JSON用来描述模型。虽然JSON简单,但是动不动几千行的代码实在看的眼花缭乱。更何况有相当多的重复描述,改起来非常不便,一改要改好几个地方。顺手写了一个可以处理嵌套JSON的JAVA类,如在属性中有”$name.json”,表示将name.json文件包含进来,name.json可以是一个JSONObject也可以是一个JSONArray。多重嵌套也支持。 代码如下:

为Oryx添加一个按钮

Oryx界面的最上方是一条工具栏,工具栏中用于多模型的各种处理。第一眼就看见保存和另存好像重复了。当时想当然的认为这是Oryx的一个问题。后来才发现原来此保存非彼保存。第一个用于保存的数据库,第二个用于保存到文件系统。只是图标和提示都一样。右面图片中的Description就是鼠标放上去之后的那个tooltip。我把两个分了一下,在i18n目录下的translation_**.js中将描述写成不一样就可以了。 Oryx采用的JS语法相当的复杂,我实在是不是特别明白。反正依葫芦画瓢把它做出来了。我把file.js拷贝成deploy.js,放到同一个目录下。只保留一个Plugin,在construct只留下一个按钮注册,再留下一个对应的按钮处理函数,其它的都可以不要。生成deploy.js后还需要将这个plugin加入到根目录下的plugins.xml中。 试了好多次才在界面上出现加入的按钮,后来发现做这种修改的时候一定要把浏览器的缓存清除一下,要不然还是使用老的代码,会以为改错了呢!

Oryx插件stencil set设计

Oryx采用开放的插件设计,界面插件称为stencil set,可以方便的添加一个stencil set。Nicolas Peters有一篇学士论文Oryx Stencil Set Specification(和他的论文相比,我当年的论文简直是狗屁),中间不但讲述了规范,还有一个实际的例子。论文可以从下面网址下到http://code.google.com/p/oryx-editor/downloads/list。 设计一套新的stencil set最好的方法是从Oryx默认提供的workflownets开始,拷贝修改。 Oryx将一个图形模块称为一个stencil,为一种模型设计的一套图形模块称为stencil set。Oryx引用的方式为从editor.xhtml->json->view&icon。editor.xhtml引用哪个json文件会被使用;json文件中定义有哪些图形模块,图形模块如何显示(在view和icon中定义),每个图形模块有哪些属性,图像模块之间怎么连接,模型模块怎么包含等等。 在主页xhtml文件中指定哪个json文件会用到。 在json文件的开头定义基本属性。 “title”:”xFlow”, “namespace”:”http://www.xflow.org#”, “description”:”X Flow”, 在json的stencils中定义每个图形模块。Workflow Net的json文件中定义了一个diagram的,用于定义主界面的属性定义。 type属性可以是node,普通的节点;也可以是edge,用于连接节点。 id属性在一个stencil set中必须唯一。 view属性用于如何显示SVG矢量图。w3schools的教程看来之后基本就会了http://www.w3schools.com/svg/default.asp。 icon属性用于显示图标。 roles属性用于节点之间如何连接。在后面rules中说明。 properties用于指定节点有哪些属性。 需要注意的是,stencils中定义的顺序就是实际显示的顺序。containmentRules中定义的顺序和显示顺序没有关系。 connectionRules用于指定如何连接。下面的例子中,所有role为nodeSource的节点可以连接到role为nodeTarget的节点 “connectionRules”: [ { “role”:”controlflow”, “connects”: [ { “from”:”nodeSource”, “to”:”nodeTarget” }, ] }

Oryx开发环境建立

Oryx是一个用于业务建模的WEB框架。是几个波茨坦大学的几个学生的毕业设计。现在已有很多种业务建模语言的插件(stencil set)可以使用,像BPEL、BPMN、UML这些常用的建模语言已经可以直接使用。 大部分业务建模工具采用先放节点A,再放节点B,然后再让节点A指向节点B。这种方式总是感觉不是很方便,多了一个没有必要的步骤,而且节点A能不能指向节点B呢?我发现有两种比较好的处理方式。一种是Oryx采用的,先放置节点A,可以知道节点A可以到哪些节点,直接拉出这个节点。这样既少了一个步骤,又避免了记忆模型。还有一种是ActiveVOS采用的,先放置节点A,在把节点B粘到节点A上。ActiveVOS是商业软件,玩不了,只能玩玩Oryx了:-)。 Oryx是一个相当开放的框架,支持一种新的建模语言相当方便。当然开源总是有些这样那样的缺点,要用起来得费劲些。我把我设置Oryx的开发环境记录一下。希望对后来人有些借鉴意义。 代码可以从SVN直接下载,下载地址http://oryx-editor.googlecode.com/svn/trunk/。下载得费些时间,相当的大,超过300M。下载的代码可以直接导入到Eclipse工程中,但是Oryx把两部分(客户端Oryx和后端backend)放在一个Eclipse工程中。这种方式要扩展调试就不太方便了。所以我就把它拆成两个项目,采用的方式为先用Oryx本身提供的ANT生成WAR包,再根据WAR里有哪些内容从Oryx源码中获取。 然后准备执行环境,Oryx默认使用PostgreSQL数据库存储。由于Oryx使用Hibernate为底层存储,所以我猜其它数据库估计也可以,修改一下hibernate.cfg.xml应该就可以了。我安装了PostgreSQL8.4,还必须安装Python 2.6,在wiki上说需要Python 2.5,但是我试了Python 2.5不工作(原因应该是PostgreSQL8.4显式依赖python26.dll)。安装好了之后执行下面语句创建用户、创建数据库、执行SQL语句创建表函数等。Oryx后端poem使用的默认密码是poem,如果用其它密码,那么需要修改hibernate.cfg.xml。 createuser -U postgres –echo –-pwprompt –encrypted poem dropdb -U postgres poem createdb -U postgres –echo –encoding utf8 –owner poem poem psql -U postgres –dbname poem –file db_schema.sql Oryx使用了相当多的Java Script,而且Oryx将它们打包成一个文件oryx.debug.js。如果想要调试或修改就会很麻烦。我自己生成了一个xhtml文件,把build.xml中所有concat的js加到xhtml中,这些js包含Core的,还有Plugins的,具体用了哪些Plugins的js可以从plugin.xml中得到。

好用的JAVA反编译工具

这段时间在学习一个软件,只有文档实在是看的不得劲。在网上找了一个工具JD-Eclipse,用起来相当方便。建立一个Eclipse工程,把所有的JAR包放进去,相看什么类直接用CTRL+SHIFT+T看就可以了,还可以在不同类之间直接导航。 JD-Eclipse主页:http://java.decompiler.free.fr/?q=jdeclipse 安装可以通过Eclipse在线更新,更新地址:http://java.decompiler.free.fr/?q=jdeclipse。也可以下载之后再安装,下载地址:http://java.decompiler.free.fr/jd-eclipse/update/jdeclipse_update_site.zip。

HSQLDB不同版本的区别

想在HSQL中使用SELECT FOR UPDATE, 发现在HSQLDB1.8.1中不支持. 更新到hsqldb-2.0-rc9, 测试可以运行. 启动Server的命令稍有不同. 在1.8.1中使用下面语句初始化 String[] args = { “-database.0”, “mem:d”, “-dbname.0”, “xdb” }; org.hsqldb.Server.main(args); 在2.0中类的位置有变化, 使用下面语句初始化. String[] args = { “-database.0”, “mem:d”, “-dbname.0”, “xdb” }; org.hsqldb.server.Server.main(args);