2005年11月21日
#
DoSWF 是一款非常好用的flash加密混淆工具,相比其他混淆工具,DoSWF的功能更加强大,混淆的也更彻底.
1.支持as2及as3的加密。目前反编译器完全看不到代码
2.支持对as3的混淆,让反编译器看到的是一堆乱码
3.支持对as3注入随机代码,让反编译软件直接崩溃退出
4.支持一个项目多个swf同时处理(doproject特性)
5.支持对swc文件的加密
6.方便对as3的swf添加文字、图片水印
7.支持对as3的swf进行剔除重组,方便模块开发
DoSWF主要分为3个不同的版本:
MINI是DoSWF的一个简易版,拥有DoSWF最基础的加密、混淆功能。优点就是使用很简单.
PROJECT版主要是针对项目处理而发布的。它可以一次对多个swf文件进行综合批量处理。
PROFESSIONAL版即DoSWF专业版。拥有MINI版和PROJECT版所有功能。同时还有更多的特性,比如添加水印,剔除,使用域控制等
MINI版本的价格只要人民币50元,对于普通个人来说仅仅是相当于一本书的价格.
经过测试.混淆加密过后的文件不会被SwfScan和Sothink等反编译工具破解,值得推荐!!
DoSWF的地址: http://www.doswf.cn/
在写Fgantt的过程中发现一个奇怪的问题,相同的代码编译出来的swf在其他浏览器下都正常,
但是在360浏览器这样的嵌入IE内核的浏览器下确出现问题.
stage.stageWidth在swf加载后能够正常的得到正确的值,但是在360浏览器下却得到0.
而且不同的是360加载完swf后会触发一个Resize事件,这个记得在以前做js框架的时候也发现过.
IE FF 等不会触发.
触发过resize事件后,才能正常得到stageWidth的值.
挺奇怪的现象,这样导致原有的代码出现了问题.
看来浏览器的不同还是会影响swf中的某些机制或者属性.
FGantt 实现了网络图.
20091106更新:
(1)解决360浏览器下无法打开的bug.
(2)调整颜色显示,解决Flash9下绘制错误的bug.
初步实现了甘特图的基本功能,基于flex3构建,跨平台 跨浏览器 :)
重写了FGantt,不再基于flex架构.具体参见:
http://www.blogjava.net/znjqolf/archive/2009/09/24/296311.html
很久没更新,最近一直在研究的东西
MSNP12, LUCENE, IBATIS
"易用性等方面确实还有一定的差距,java的版本取胜都是在其企业级定位上"
这点我非常的赞同.
企业级的定位使它的功能强大了,
同时易用性就相对削弱了一些. "
看到这些话就忍不住想骂人? 什么是企业级应用? 企业级应用是易用性差的借口么? 难道就只有java能做企业级应用,php,asp就只能做做网站? taobao,ebay不算企业级应用么????..... ...
为了通用,从头到尾都是utf-8.
而webwork中JakartaMultiPartRequest对于多编码的处理并不如意.
apache的fileupload对于上传文件名为中文的需要首先指定HeaderEncoding的编码.
而webwork对于MultiPartRequest的request并没有设置encoding编码
详见DispatcherUtils.java中 387行
if
(encoding
!=
null
&&
!
MultiPartRequest.isMultiPart(request))
{
try
{
request.setCharacterEncoding(encoding);
}
catch
(Exception e)
{
LOG.error(
"
Error setting character encoding to '
"
+
encoding
+
"
' - ignoring.
"
, e);
}
}
如果没有指定HeaderEncoding, 那么默认采用request的encoding,如果request也没有指定则采用系统的编码.
这里并没有指定request的encoding,往往导致上传文件的名字乱码.
自定义一个MultiPartRequest,设定一下就ok了
对于同时提交的表单域(form)参数,由于在form中指定的enctype的关系,并不能直接用request.getParameter()才取, 只能通过FileItem.getString()的方式.这里也是上面的问题, 取的CharacterEncoding是request中的,由于webwork的原因不一致.同样需要指定一下.
这样form和上传同时提交,参数,附件名都正常了 :)
打开你的firefox, 输入:
about:
about:config
about:credits
about:buildconfig
about:cache
about:plugins
about:mozilla
以前还真没有注意到.:)
ZK 一个开源的ajax web框架,基于事件驱动的组件,通过标记语言来设计组件来简化开发人员的工作。显著的一个特点是使用类似XUL的标记语言来定义组件。
其实我对这种类似桌面的开发方式来开发web程序一点都不感冒,因为封装的东西太多,势必影响扩展性。而且对应的社区也很少,很多因素影响。
一个企业应用对于框架,技术并不是最重要的,需求和人员的素质等等因素也是很制约的。 很多开源的东西,在我看来只是 “看起来很美!” 回过来说zk,能以这种方式来开发也许能给我们很多启发。
有兴趣的可以去看看:
zk
http://zk1.sourceforge.net/
昨天研发中心项目组一起聚餐,聊起了软件的发展问题。
对于一个软件公司,究竟是买软件还是买服务? 买软件做项目,必然要设计到软件的开发定制,前期的投入是不可避免的,后期的维护成本也是很高的,客户的需求是无止境的,往往上千万的项目做下来却是亏本的。 从另外一个角度来看,软件究竟是什么? 在我看来,软件就是一种特殊的服务,这里的服务不是指人的因素,而是机器,是软件,用我们老大的话来讲,用人去做服务一定是亏本的。
心里也一直有一种设想,或许以后不再依靠出售软件,做项目来生存,而是出售服务,尤其是基于bs结构的服务。想想google的email,BSP,RSS reader等等,或许很快在线的erp,在线的crm, oa,cms等等就会变成现实,当然这里很重要的一点就是要做到行业的标准,需要客户来认同你,信任你。
这里的情景很像现在的网游,我提供服务,你提供数据,数据集中存放,我提供个性化的定制,提供相关联的信息(类似gmail中的广告),针对特殊用户做增值服务。
看看37signal,一个人被很多人认为是一个很伟大的企业。我们好好思考一下,是不是应该做点什么?
图形化的组件,让人感觉又回到了vb时代,虽然不是很认同Echo2的机制,但是看到能以这样的方式来做WEB,赞一个。^_^
图形组件库,事件驱动机制,完全OO的UI的开发模式,再加上强大的EchoStudio,感觉一切都完美了很多。
EchoStudio由于是商业软件,有一定的试用期,最不爽的就是把以前的css完全用stylesheet来替代,可是竟然没有看到相关的schema。只能用EchoStudio来做stylesheet,这不是逼着你买么? 没办法,只能crack了,反编译了一下,暗自庆幸。嘿嘿,代码竟然没有混淆,很容易找到了验证代码。哈哈javassist2分钟搞定。不过作为一个软件开发人员,还是小小的BS一下自己.....
由于下大雪,机场关闭。原定8:20的飞机,晚点到中午2点多才飞,害的我早上6点多就爬起来往机场赶。 瞌睡 Zzz...
WebWork 2.2 Released at January 11, 2006
新版本是非常值得期待的.
Full support for Java 5 Annotations and Generics
Rich AJAX support using DWR and Dojo
New QuickStart tool makes development easier than ever
Tons more documentation with over 900 PDF pages!
Client side validation using AJAX or plain JavaScript
Built in support for Continuations
JSR168/Portlet support for several popular Portlet servers, including Pluto
Rich UI template framework with native support for JSP, FreeMarker, and Velocity
Native support for Spring and Pico IOC containers
More intelligent error reporting
Developer Mode makes building webapps even easier with improved error reporting
Simplified tag syntax
Advanced data binding framework that works with any object, including domain objects
2.2版本是WebWork的一个新的里程碑, 接下来的主要精力将会投入到Struts Action Framework Version2.0
JBPM的流程定义中对于页面绑定并没有什么好的办法.
"大枪"是修改了JBPM的源代码,来支持比如"<Task name="aa" url="/xx/yy.jsp">"的表示方法,这样的处理效果可能不是很好,需要修改相应的源代码,升级的时候也要同样修改.
我采取了另外一种折中的方法,建立一个关联表,或者作个配置文件,url和相应的task name对对应关系.
运行时得到相应的Task对象,得到相应的name,从对应表中取出绑定的页面进行加载.
什么是AHAH?
AHAH:(Asychronous HTML and HTTP)
简单来说,AHAH是一种利用JavaScript动态更新web页面的技术.他通过XMLHTTPRequest来获得动态的html,填充到 web页面中。
和AJAX的关系?
AHAH被认为是一种比AJAX(Asynchronous JavaScript and XML)更简单的web开发方式,严格意义上来说AHAH是AJAX的一个子集,因为(X)HTML本身及时一个特殊形式的XML,但是最为子集的AHAH却有特殊的和有用的特性:
1.无需定义XML schemas可以使设计时间大幅减少
2.使用已有的HTML页面从而避免必须提供特殊的Web服务
3.所有的数据通过浏览器可识别的HTML传输,从而可以很容易的调试和测试
4.HTML直接包含在页面的DOM对象中,无需解析
5.HTML设计者可以使用CSS来格式化显示,无需程序员使用XSLT转换
6.所有的处理都在服务器端完成,客户端不需要编写任何程序
实事上,任何内容的最终都是要转化成浏览器可识别结果,展现在浏览器上。很难想象出转化成自定义的XML格式比HTML有什么优点
参考ahah.js 和 jah.js
Send AHAH Request
1 function ahah(url,target) {
2 // native XMLHttpRequest object
3 document.getElementById(target).innerHTML = 'sending';
4 if (window.XMLHttpRequest) {
5 req = new XMLHttpRequest();
6 req.onreadystatechange = function() {ahahDone(target);};
7 req.open("GET", url, true);
8 req.send(null);
9 // IE/Windows ActiveX version
10 } else if (window.ActiveXObject) {
11 req = new ActiveXObject("Microsoft.XMLHTTP");
12 if (req) {
13 req.onreadystatechange = function() {ahahDone(target);};
14 req.open("GET", url, true);
15 req.send();
16 }
17 }
18 } Receive AHAH Request
1 function ahahDone(target) {
2 // only if req is "loaded"
3 if (req.readyState == 4) {
4 // only if "OK"
5 if (req.status == 200 || req.status == 304) {
6 results = req.responseText;
7 document.getElementById(target).innerHTML = results;
8 } else {
9 document.getElementById(target).innerHTML="ahah error:\n" +
10 req.statusText;
11 }
12 }
13 }
Executing Javascript
由于浏览器在插入HTML的时候并不会执行<script>标签中的代码,所以你可以利用下面的方法来解决 document.getElementById(target):
1 var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
2 var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
3 var bMoz = (navigator.appName == 'Netscape');
4 function execJS(node) {
5 var st = node.getElementsByTagName('SCRIPT');
6 var strExec;
7 for(var i=0;i<st.length; i++) {
8 if (bSaf) {
9 strExec = st[i].innerHTML;
10 }
11 else if (bOpera) {
12 strExec = st[i].text;
13 }
14 else if (bMoz) {
15 strExec = st[i].textContent;
16 }
17 else {
18 strExec = st[i].text;
19 }
20 try {
21 eval(strExec);
22 } catch(e) {
23 alert(e);
24 }
25 }
26 }
27
注意:
1.由于IE返回的tag标志都是大写,所以你必须搜索SCRIPT而不是script.在firefox中也保留大写的形式.
2.不要用//的注释方式,用/**/的方式来代替,在每一个声明句后面加';'
(未完..)
昨天和一个朋友去参加了上海BEA User Group.这次活动的Topic主要有Dlee的Ajax in action , Moxie 的软件的良性文化 ,Bea 顾问的 SOA相关介绍 还有最后的重头戏 Robbin的领域模型。
Yanger的主持还是比较精彩的,BEA的组织也比较到位,活动中还穿插了魔术表演。整天的氛围还是不错的,各位的演讲也是很精彩的,但是由于活动时间过长了,感觉最后Robbin的讲演还是有些没有尽兴。
每个Topic都是可以深入讲下去的,但是一个下午的时间要讲4个Topic,时间太仓促了,每个Topic也只是泛泛的介绍了一下概念,感觉还不如去看JavaEye的帖子。有些失望。
应该采用BUJG的方式,一次关注一个Topic,深入的讲下去,不过想想这也算是BEA的商业活动,要达到一定的商业目的。:)
讨论技术看来还是自发的组织比较好。
留个纪念。
2005对我个人来说发生了很多难以忘记的事情。希望2006能有个好的开端。也祝各位新年快乐!
对于每个系统来说,权限都是一个很重要的组成部分,贯穿于整个系统功能,甚至包括数据。RBAC是一个很好的模型,对于复杂的处理更多的还是和业务紧密联系在一起,所以对于组件形式的RBAC产品还很难做到的。
对一个用户来说,权限主要包括2个部分,data和action,其组合形式对我们来说就是一个view,每个权限对应一个相应的view。在这里我用三维的坐标来思考,data和action是相应的x,y轴,不同的data,action组成一个业务视图,从三维的角度来看是一个2维的的平面,我们的系统功能也就是由不同的平面来做成的。
权限可以看作z轴,view在不同的权限上会有不同的表现形式,展现不同的数据,不同的操作。这样权限,数据,操作看起来就会清晰很多。
我所设想的应该是这样的一种方式:view由不同的view component和action component组成,这里view只是一个模板,没有任何业务数据。
提供一个类似PrivilegeViewFactory的类,传入view模板,和相应的角色(用户,组。。),生成相应的PrivilegeView,然后由业务逻辑去填充数据,这样可以容易做到权限和view的分离,层次也比较清晰。
每个view component要实现相应的权限接口,要根据不同的角色生成不同的view component。比如DataGrid,不同的角色看的列是不同的,甚至数据内容也是不同的,更细粒度的看,业务不同字段的的数据也是不同。这部分是和ui绑定的,也是最复杂,工作量最大的部分。
和我当初的设想的一样,ajax桌面开始爆发了。当初看到netvibes的时候还是测试版本,现在功能已经很强大了。
类似的平台已经有一下9个:
1.
Eskobo2.
Favoor 3.
Google 4.
Goowy(基于flash, 非Ajax)
5.
Microsoft Live 6.
Netvibes 7.
Pageflakes 8.
Protopage 9.
Zoozio基于ajax的rich application必然是个大的趋势,而web os是这里面很重要的部分,是rich application的all in one。我不敢说这就是web 3.0,当人们对2.0还很模糊的时候更不应该做这样的揣测。不过有一天,真有可能会像《24小时》所描绘的那样。这也验证了sun的一句经典的话:"网络就是计算机". 顺便BS一下 "
我的博通", 简直就是netvibes的翻版。拜托,抄也抄的有点道德。
Flickr和Del.icio.us都已经被它收归旗下.对于新兴的web2.0模式的探索者来说无疑是一个强有力的兴奋剂.收购可能对于这样的网站来说是最好的方式.在现有的条件下,无法找到可行的盈利方式,收购是最好的模式.人气+资金,相信以后会做的更好.
几个月前就关注的milliondollarhomepage今天已经达到847000了,我从来没有鄙视这样的行为,一直都认为好的创意是非常重要的,技术大家都会,但是你不是第一个能想到的. 所以类似芙蓉姐姐的东西我从来不去关心,自然会自生自灭的,用不着我们去浪费时间去讽刺和挖苦. 时间会说明一切.
换个角度来看,做个假设,如果第一个百万首页是发生在国内,我想结果绝对不像1baiwan现在那样的那么轻松.
国外对待新事物的发展还是保持很中立的态度的,至少没有用舆论来抹杀它.
快圣诞了.希望能得到意外的惊喜. 嘿嘿
上海的天气真是太变态了。前天还是10-20度,今天气温突然下降了10多度,最低已经降到了0下,看到路上已经结冰了。换衣服都来不及,赶快找出棉袄,带上手套。冷。。。 第一次感到冬天来了。
以前一直没用过docbook,数据和显示分离的好处是显而易见的。这个有点类似MVC.^_^
很多开源的文档都是用docbook来处理的,数据和显示分离,未来的趋势,再也不用在word中搞排版了,就好像html中的div+css,爽啊。
一些关于docbook的文档:
Writing Documentation Using DocBook
DocBookAuthoringTools
DocBook学习
当需要取到鼠标点击相对于层的位置信息时,在ie下可以用event.offsetX, evnet.offsetY,在Firefox下是event.layerX, event.layerY。但是firefox下总是有问题,取到的不是相对于层的坐标,而是pageX,pageY。 Google了半天也没有发现什么解决办法,最后在一个网站看到一个例子,原来在层中要设置position为absolute或者relative。
OK,问题解决,这点问题竟然让我花费了2个小时。 :(
感恩节的由来:
在美国,每年11月的最后一个星期四是举国同庆的感恩节,规定从这一天起休假三天。即使远在异乡的美国人也都要在节日前赶回去与家人团聚,共庆佳节。美国人对感恩节重视的程度,堪与传统的盛大节日-圣诞节相比。
为什么叫感恩节呢?追根溯源,感恩节是和美洲古代的印第安人,特别是和玉米的种植有十分密切的关系。1620年9月6日,一批英国清教徒难以忍受宗教的迫害,搭乘“五月花号”木船驶往美洲。他们在疲劳、饥饿、寒冷和疾病的袭击下在大西洋上漂泊了65天,最后到达北美殖民地的普利茅斯。
当时正值冬季,气候严寒,田野寂寥。当地印第安人慷慨地拿出贮藏越冬的玉米和土豆,送去猎获的野鸭和火鸡。春天来了,印第安人教他们种植玉米和南瓜,饲养火鸡。白人移民和印第安人建立了亲密的友谊。这年秋季玉米丰收,移民们举行了丰盛的感恩会,用烤火鸡和玉米糕点款待印第安人。印第安人带着各种玉米制品、烤火鸡、南瓜馅饼、野葡萄以及玉米酒浆等参加晚会,人们欢唱歌舞,通霄达旦。以后在每年玉米收获后的11月底,定居在这里的白人移民都要举行感恩会,家家烤火鸡,烹制玉米食品,款待印第安人。长此以往,这种感恩会就成为一种惯例。但是,当时感恩节的时间并不固定,直至1863年,美国总统林肯宣布把感恩节定为全国性的节日,号召人民同心同德,为美国的繁荣昌盛作出努力。为了纪念感恩节,在普利茅斯城的萨摩特大街修建了一座巨大的移民先驱者纪念碑。高达10米的乳白色先民雕像,搭着披肩,手指苍穹,在四块大理石浮雌上描述了到普利茅斯未的第一批移民的故事和感恩节的渊源。现今,玉米制品仍然是欢度感恩节的不可缺少的食品之。
由于现在产品是一个ERP系统,对于工作流的需求并不像我曾经做过的政府审批系统的复杂。所以对于工作流的的技术选择,范围也相对广的多。XPDL相对要熟悉一些,但是看了相关的开源框架,研究了一下Shark,发现了很多问题。对于Shark这样庞大的工作流系统,要整合到产品中,单从技术角度来看就会有很多问题,DODS很难替换成Hibernate,系统代码量庞大,也不利于改进,所以综合考虑,最终选择了JBPM这个开源工作流。
产品中需要一个工作流设计器,JBPM的设计器基于Eclipse,这点不符合我们的要求。我们需要的是Online WorkFlowEditor,直接在页面上画出流程图,直接在页面上发布,省去了流程文件的上传发布的一系列操作。所以最后采用了Applet的方式,当然我们把jre安装环境集成到了系统中,页面检测IE的jre选项,自动安装JRE插件。
Applet采用了Jgraph这个开源库,用了下,确实很不错,几个demo做的也很漂亮。
项目中做的设计器,画好流程图,对于每个节点,选择相应的组件,生成后直接上传到服务器端。下面是一个截图: