Vincent Thinking

All about Vincent's work and life

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 0 文章 :: 183 评论 :: 0 Trackbacks

2005年12月21日 #

posted @ 2010-03-29 22:26 Vincent Thinking 阅读(832) | 评论 (0)编辑 收藏

DatePicker
posted @ 2010-03-15 23:23 Vincent Thinking 阅读(952) | 评论 (0)编辑 收藏

Grid篇(100列,10000行)
posted @ 2010-03-15 23:14 Vincent Thinking 阅读(943) | 评论 (0)编辑 收藏

ps:Aurora是一套正在开发中的actionscript3的ui框架. Buttons按钮篇:
posted @ 2009-11-09 17:17 Vincent Thinking 阅读(299) | 评论 (0)编辑 收藏

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/
posted @ 2009-11-09 17:09 Vincent Thinking 阅读(1470) | 评论 (0)编辑 收藏

在写Fgantt的过程中发现一个奇怪的问题,相同的代码编译出来的swf在其他浏览器下都正常,
但是在360浏览器这样的嵌入IE内核的浏览器下确出现问题.
stage.stageWidth在swf加载后能够正常的得到正确的值,但是在360浏览器下却得到0.
而且不同的是360加载完swf后会触发一个Resize事件,这个记得在以前做js框架的时候也发现过.
IE FF 等不会触发.
触发过resize事件后,才能正常得到stageWidth的值.
挺奇怪的现象,这样导致原有的代码出现了问题.
看来浏览器的不同还是会影响swf中的某些机制或者属性.
posted @ 2009-11-08 00:13 Vincent Thinking 阅读(547) | 评论 (0)编辑 收藏

FGantt 实现了网络图.

20091106更新:
(1)解决360浏览器下无法打开的bug.
(2)调整颜色显示,解决Flash9下绘制错误的bug.


posted @ 2009-11-02 14:45 Vincent Thinking 阅读(4587) | 评论 (16)编辑 收藏

初步实现了甘特图的基本功能,基于flex3构建,跨平台 跨浏览器 :)
 重写了FGantt,不再基于flex架构.具体参见:
http://www.blogjava.net/znjqolf/archive/2009/09/24/296311.html

posted @ 2009-07-16 00:14 Vincent Thinking 阅读(1180) | 评论 (0)编辑 收藏

很久没更新,最近一直在研究的东西
MSNP12,  LUCENE, IBATIS

posted @ 2006-08-12 15:10 Vincent Thinking 阅读(530) | 评论 (0)编辑 收藏

"易用性等方面确实还有一定的差距,java的版本取胜都是在其企业级定位上"
这点我非常的赞同.
企业级的定位使它的功能强大了,
同时易用性就相对削弱了一些. "


看到这些话就忍不住想骂人?  什么是企业级应用?  企业级应用是易用性差的借口么? 难道就只有java能做企业级应用,php,asp就只能做做网站? taobao,ebay不算企业级应用么????..... ...
posted @ 2006-05-31 23:17 Vincent Thinking 阅读(809) | 评论 (0)编辑 收藏

public   class  ActionMapperFactory  {
    
    
protected   static   final  Log LOG  =  LogFactory.getLog(ActionMapperFactory. class );

    
private   static   final  HashMap classMap  =   new  HashMap();

    
public   static  ActionMapper getMapper()  {
        
synchronized  (classMap)  {
            String clazz 
=  (String) Configuration.get(WebWorkConstants.WEBWORK_MAPPER_CLASS);
            
try   {
                ActionMapper mapper 
=  (ActionMapper) classMap.get(clazz);
                
if  (mapper  ==   null {
                    mapper 
=  (ActionMapper) ObjectFactory.getObjectFactory().buildBean(clazz,  null );
                    classMap.put(clazz, mapper);
                }


                
return  mapper;
            }
  catch  (Exception e)  {
                String msg 
=   " Could not create ActionMapper: WebWork will *not* work! " ;
                LOG.fatal(msg, e);
                
throw   new  RuntimeException(msg, e);
            }

        }

    }

}


明白的告诉我一下,谢谢. 觉的有点问题...
posted @ 2006-05-31 22:55 Vincent Thinking 阅读(1741) | 评论 (0)编辑 收藏

为了通用,从头到尾都是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和上传同时提交,参数,附件名都正常了 :)
posted @ 2006-04-25 18:24 Vincent Thinking 阅读(1378) | 评论 (2)编辑 收藏

打开你的firefox, 输入:

  • about:
  • about:config
  • about:credits
  • about:buildconfig
  • about:cache
  • about:plugins
  • about:mozilla

    以前还真没有注意到.:)

  • posted @ 2006-04-20 21:46 Vincent Thinking 阅读(341) | 评论 (0)编辑 收藏

    ZK 一个开源的ajax web框架,基于事件驱动的组件,通过标记语言来设计组件来简化开发人员的工作。显著的一个特点是使用类似XUL的标记语言来定义组件。

    其实我对这种类似桌面的开发方式来开发web程序一点都不感冒,因为封装的东西太多,势必影响扩展性。而且对应的社区也很少,很多因素影响。

    一个企业应用对于框架,技术并不是最重要的,需求和人员的素质等等因素也是很制约的。 很多开源的东西,在我看来只是 “看起来很美!” 回过来说zk,能以这种方式来开发也许能给我们很多启发。
     
    有兴趣的可以去看看:
    zk http://zk1.sourceforge.net/
    posted @ 2006-03-14 21:40 Vincent Thinking 阅读(4099) | 评论 (2)编辑 收藏

                                                                         HSQLDB简介 
                                                                         

    Vincent 2006年2月24日
     
    一 什么是HSQLDB? 
            HSQLDB是一个用java编写的关系型数据库,它支持ANSI-92 SQL (BNF tree format) plus SQL 99 and 2003 enhancements. 它提供了一个非常小而快速的数据库引擎,同时提供了相关的JDBC驱动和一些实用的工具。
     
             最新的HSQLDB版本为1.8.0 ,经过了1年的开发,和1.7.2相比,1.8.0的功能更加强大, 对数据库的容量支持达到了8GB,性能也更加出色。和当年相比,HSQLDB已经不仅仅很多人眼里的玩具,完全可以胜任商业的需求。(OpenOffice.org 2.0的数据库引擎为HSQLDB1.8.0)
     
    这里有一张数据库的performance test对比图(HSQLDB的性能远远超过其他的数据库)
     


    二 HSQLDB介绍

     1.1 简介


    hsqldb.jar 包含所有的组件(数据库引擎,jdbc驱动, 数据工具), 不同的命令用来执行不同的组件。
    hsqldb.jar主要包含了一下组件: 

    HSQLDB RDBMS                数据库引擎
    HSQLDB JDBC Driver          JDBC驱动
    Database Manager            管理工具
    Query Tool (AWT)            查询工具
    Sql Tool (command line)     SQL工具


    1.2 运行工具(Running Tools) 

          所有的工具都以jar的方式来运行,下面的例子讲运行AWT方式的DataBase Manager,我们假设hsqldb.jar位于../lib目录中

     java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager 

    Hsqldb工具的主类:

    org.hsqldb.util.DatabaseManager 
    org.hsqldb.util.DatabaseManagerSwing
    org.hsqldb.util.Transfer
    org.hsqldb.util.QueryTool 
    org.hsqldb.util.SqlTool 

    其中,DatabaseManager和SqlTool都可以有命令行参数,你可以用-?来察看它们有什么参数。DatabaseManager和Transfer都有图形界面可以更好地交互。
     
    1.3 运行HSQLDB
     
    HSQLDB可以通过多种不同的方式来运行,通常把它分为Server模式和In-Process模式(也叫做Standalone模式),对于每种模式,Jar中都有相应的子程序来运行HSQLDB。
     
    每个HSQLDB数据库包含2到5个命名相同但扩展名不同的文件组成,他们位于同一个目录下。例如,名为“test”的数据库包含了以下几个文件: 

    test.properties
    test.script
    test.log 
    test.dat 
    test.backup

    properties文件包含了数据库的基本配置,script文件包含了Table的定义和其他相关的数据对象,以及non-cached表的数据。log文件记录了数据库最近所做的更新。dat文件包含了cached表的数据,backup文件是上一次数据库持久化后的压缩备份文件,所有的这些文件都是最基本的,绝对不能删除。如果你的数据库没有缓冲表(cached table),test.data和test.backup文件是不会存在。此外,HSQLDB数据库可以链接到磁盘上任何地方任何格式的文本文件,比如CSV 列表。
     
    当"test"数据库正在运行时,test.log文件用来记录所有的操作记录,"test.log"文件将在数据库正常关闭(ShutDown)情况下自动删除。否则(在非正常退出的时候),它将用来在下次启动HSQLDB时恢复"test.log"中记录的更新操作。"test.lck"文件也可以用来记录数据库是否被打开,它在HSQLDB正常退出的时候会被移除。有些情况下,HSQLDB会生成"test.data.old "文件,但随后会被删除掉。

    注意: 当HSQLDB引擎关闭数据库的时候,它会产生扩展名为.new的临时文件,然后会把这些文件重命名为上面所列出的文件的名称。

    posted @ 2006-02-24 19:55 Vincent Thinking 阅读(1935) | 评论 (1)编辑 收藏

    faint...
    posted @ 2006-02-20 09:45 Vincent Thinking 阅读(251) | 评论 (0)编辑 收藏

    昨天研发中心项目组一起聚餐,聊起了软件的发展问题。

    对于一个软件公司,究竟是买软件还是买服务? 买软件做项目,必然要设计到软件的开发定制,前期的投入是不可避免的,后期的维护成本也是很高的,客户的需求是无止境的,往往上千万的项目做下来却是亏本的。 从另外一个角度来看,软件究竟是什么? 在我看来,软件就是一种特殊的服务,这里的服务不是指人的因素,而是机器,是软件,用我们老大的话来讲,用人去做服务一定是亏本的。

    心里也一直有一种设想,或许以后不再依靠出售软件,做项目来生存,而是出售服务,尤其是基于bs结构的服务。想想google的email,BSP,RSS reader等等,或许很快在线的erp,在线的crm, oa,cms等等就会变成现实,当然这里很重要的一点就是要做到行业的标准,需要客户来认同你,信任你。

    这里的情景很像现在的网游,我提供服务,你提供数据,数据集中存放,我提供个性化的定制,提供相关联的信息(类似gmail中的广告),针对特殊用户做增值服务。

    看看37signal,一个人被很多人认为是一个很伟大的企业。我们好好思考一下,是不是应该做点什么?
    posted @ 2006-02-15 10:22 Vincent Thinking 阅读(358) | 评论 (2)编辑 收藏

    图形化的组件,让人感觉又回到了vb时代,虽然不是很认同Echo2的机制,但是看到能以这样的方式来做WEB,赞一个。^_^

    图形组件库,事件驱动机制,完全OO的UI的开发模式,再加上强大的EchoStudio,感觉一切都完美了很多。

    EchoStudio由于是商业软件,有一定的试用期,最不爽的就是把以前的css完全用stylesheet来替代,可是竟然没有看到相关的schema。只能用EchoStudio来做stylesheet,这不是逼着你买么? 没办法,只能crack了,反编译了一下,暗自庆幸。嘿嘿,代码竟然没有混淆,很容易找到了验证代码。哈哈javassist2分钟搞定。不过作为一个软件开发人员,还是小小的BS一下自己.....
    posted @ 2006-02-10 14:31 Vincent Thinking 阅读(2733) | 评论 (51)编辑 收藏

    由于下大雪,机场关闭。原定8:20的飞机,晚点到中午2点多才飞,害的我早上6点多就爬起来往机场赶。 瞌睡 Zzz...
    posted @ 2006-02-05 21:31 Vincent Thinking 阅读(258) | 评论 (0)编辑 收藏

    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

    posted @ 2006-01-12 11:09 Vincent Thinking 阅读(859) | 评论 (2)编辑 收藏

    JBPM的流程定义中对于页面绑定并没有什么好的办法.

    "大枪"是修改了JBPM的源代码,来支持比如"<Task name="aa" url="/xx/yy.jsp">"的表示方法,这样的处理效果可能不是很好,需要修改相应的源代码,升级的时候也要同样修改.

    我采取了另外一种折中的方法,建立一个关联表,或者作个配置文件,url和相应的task name对对应关系.

    运行时得到相应的Task对象,得到相应的name,从对应表中取出绑定的页面进行加载.

    posted @ 2006-01-10 20:51 Vincent Thinking 阅读(1097) | 评论 (1)编辑 收藏

    什么是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.不要用//的注释方式,用/**/的方式来代替,在每一个声明句后面加';'

    (未完..)
    posted @ 2006-01-09 09:31 Vincent Thinking 阅读(71731) | 评论 (2)编辑 收藏

    昨天和一个朋友去参加了上海BEA User Group.这次活动的Topic主要有Dlee的Ajax in action , Moxie 的软件的良性文化 ,Bea 顾问的 SOA相关介绍 还有最后的重头戏 Robbin的领域模型。 Yanger的主持还是比较精彩的,BEA的组织也比较到位,活动中还穿插了魔术表演。整天的氛围还是不错的,各位的演讲也是很精彩的,但是由于活动时间过长了,感觉最后Robbin的讲演还是有些没有尽兴。 每个Topic都是可以深入讲下去的,但是一个下午的时间要讲4个Topic,时间太仓促了,每个Topic也只是泛泛的介绍了一下概念,感觉还不如去看JavaEye的帖子。有些失望。 应该采用BUJG的方式,一次关注一个Topic,深入的讲下去,不过想想这也算是BEA的商业活动,要达到一定的商业目的。:) 讨论技术看来还是自发的组织比较好。
    posted @ 2006-01-08 11:14 Vincent Thinking 阅读(269) | 评论 (1)编辑 收藏

    留个纪念。 2005对我个人来说发生了很多难以忘记的事情。希望2006能有个好的开端。也祝各位新年快乐!
    posted @ 2005-12-31 18:06 Vincent Thinking 阅读(201) | 评论 (0)编辑 收藏

    对于每个系统来说,权限都是一个很重要的组成部分,贯穿于整个系统功能,甚至包括数据。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绑定的,也是最复杂,工作量最大的部分。
    posted @ 2005-12-21 12:39 Vincent Thinking 阅读(457) | 评论 (3)编辑 收藏