关注的太多,似乎太累了。于是整理一下路线,在有空的时候关注:
web presentation Framework:
JSF ajax(Struts似乎没有研究必要了,虽然早就用了好久,但是源码没有通读过,现在看来还是观望struts Ti后再说)
Spring
Hibernate
足够了,不继续累自己了……

posted @ 2005-12-05 15:47 BlueO2 阅读(309) | 评论 (0)编辑 收藏

http://bennolan.com/behaviour/   为了避免在html中引入过多的script tag,尤其现在富客户端应用很火的时候,script写的就越发的多。
官方网站举了一个这样子的例子

<div id="image_16209134_normal">
<script language="Javascript">
photo_hash['
16209134'] = new Object();
photo_hash['
16209134'].title =
 '2am on Saturday';
</script>
<h4 id="title_div16209134" 
    style
="margin-bottom: 0px; margin-top: 0px;">

    2am on Saturday
</h4>
<script type="text/javascript">initPhotosUserPageTitle_div('16209134');</script>

这是Flickr上面一段代码。确实,它使得代码阅读起来结构不清晰了。Behavior应用之后,不需在元素上写明触发事件要执行的方法,比如
<a onclick="this.parentNode.removeChild(this)" href="#">
Click me to delete me
</a>
而变成了
<ul id="example">
<li>
<a href="/someurl">Click me to delete me</a>
</li>
</ul>
那么javascript如果找到这个a链接并加上onclick事件方法的呢?采用css selector

var myrules = {  
'#example li' : function(el){  
el.onclick = function(){   
this.parentNode.removeChild(this);  
} }};
Behaviour.register(myrules); 确实看起来,html清爽了,但是,却引入了其他的元素。ok,我们可以为每个控件定义id,其实也未尝不可,asp.net不也是web component开发的时候都定义id的么?可似乎又脱裤子放屁之嫌。在维护一个对某一组应用相同样式或响应
相同方法的html控件上应用behavior,有意义,起码不必每个上面都写上onclick之类的,但是对于更普遍的应用,每个html控件要做得事情是不同的啊。那个时候,不但用behavior代码量增加了,而且维护一个var myrules里的内容和去删除控件上的onclick其实工作量差不多。真正的应用可不是demo啊,列出来一排link写着remove me,然后执行一样的动作。
不过正如我上面说的,还是有一定的应用场景的,大家可以在有此需求的时候考虑,还有一Behaviour.js





posted @ 2005-11-24 23:10 BlueO2 阅读(933) | 评论 (1)编辑 收藏

     摘要: 本想翻译IBM的一篇文章 Build apps using Asynchronous JavaScript with XML 但是发现不如就按照那个方式想怎么写就怎么写。之后有时间了会把其中的一个系列从基本应用到使用DWR框架的翻出来,也许对一些被AJAX buzz word一直骚扰但是没亲密接触的人有些用处。嗯,把dojo也列入计划吧,但愿我能坚持。由于JAVA版 servlet+web.xml...  阅读全文

posted @ 2005-11-24 00:21 BlueO2 阅读(1565) | 评论 (1)编辑 收藏

我不知道CMMI都影响了些什么,除了留给我无尽的meeting和文档,但是迭代周期,构建频率,测试方法等等跟开发息息相关的却没有任何实质性指导。我不知道这个是不是就是根据我们这个没做前号称超级轻松 时间超级富裕tailor过的结果。
可是CMMI就像大象,即使体格小,也是象,一旦计划制定了,似乎无论情况怎样,都无法迅速反应。像我们这个小小的,需求拿了一个多月,编码却只有 2周的项目,CMMI没有任何控制的迹象。可能说:没有CMMI你们更加混乱。会么?我看不出来还能再混乱到什么地步了。
在客户在海外,需求不明,QA反应迟钝的情况下,CMMI只能让我们用meeting来充斥一次次等待客户确认需求的时间。
我相信如果用敏捷方法指导开发绝对不会导致目前的混乱局面。首先测试一方面,我感觉V MODEL十分适合,在需求拿到了 demo产出的时候,function test case就应该设计出,那个时候会让我们尽可能少的去想实现,而把用户体验和功能彻底做好。而high level design完成的时候 Intergrated Unit test case就应该设计完成(也许对一个技术十分不成熟的团队来说此要求过高,大家没有任何设计测试用例的经验),当detail design完成的时候,Unite Test case 也应该随之产生,这样也不知不觉地开始了测试驱动开发。而我想周围的同事都习惯性的写好了一个功能点了部署到服务器,跑一下,出错了以后,根据tomcat可怜的报错信息开始跟踪调试,无数的log.debug更甚至无数的system.out。这个还好,仅仅影响效率而已。可是没有任何对迭代的指导,导致各自为战,马上要集成了,哇,崩溃了。一个程序集成的时候是麻烦最大的时候。大家自己的模块集成单元测试都没做好,怎么能做这种IT呢?如果我们至少一周构建一次(根据开发计划,因为我们不是一个敏捷团队),怎么会导致今天这种崩溃的局面呢?まいたな!
事总要有人做的,程序员修炼三部曲之项目自动化之道已经躺在我的枕边。但愿我的努力和大家这次的教训能让我们下个项目在deliver之前不用再集体加班……

posted @ 2005-11-09 22:56 BlueO2 阅读(336) | 评论 (0)编辑 收藏

软件即服务,微软可能迟迟不肯承认不愿意拥抱这种趋势的原因,可能就是服务目前还停留在通过网络提供的阶段(可能也只有通过网络才能体现这一理念),而软件通过服务暴露给客户,就意味着对操作系统的淡化--这一微软赖以发家的金母鸡,当然还有office。而为何微软又开始承认此趋势呢?可能只有bill gates才知道。可能大家都这么设想软件的未来,并且Google之类的公司也一直在向此方向努力,给了微软太大的压力。www.live.com 这个被微软提升到了战略高度的雏形产物,说实话,我太笨,在没看到各种解说可评论之前还没看出来与以前myMsn有何差别。不过可能就是理念不同,将来发展方向不同吧。MyMsn主要给用户一个信息的集合点,一个个人信息的门户,当你add content的时候,你得到的是FOX BBC等新闻 天气预报等咨询。而window live add content将来可能会添加服务,软件的服务,比如微软也说过要把office作为服务提供,将以授权形式的收入转化为广告盈利。微软一直都是一个创新型的公司,不知这次的绝地反击,会给google YAHOO AOL等公司带来怎样的冲击。
BTW,一直想实践一下webwork(or JSF)+hibernate的应用,中间搭配spring or EJB,可是总是想起码要做点有意义的东西吧。什么有意义呢?想来想去,重新发明个轮子的,谁让我没创意呢,做个个人portal。也许以后每个人的操作系统都是网络定制的呢……

posted @ 2005-11-07 16:30 BlueO2 阅读(403) | 评论 (0)编辑 收藏

http://www.google.com/reader
google又提供了一项新服务,其实这种服务早就有,比如bloglines国内的gougou.com,google并非所有都是最有创意的,但是google的推出总是伴随着改良,不但用户体验绝对做的没话说,功能上总是毫不逊色。而google几乎成了创新的代名词,及时这种rss订阅,大家肯定也会像我一样迫不及待用上google,看看到底和大家的有什么不同。我真的是越来越离不开,可怕的是google成为了几乎最了解我的人,通过他的强大的数据库,他存储着我喜欢搜索什么信息,都与什么人email来往,喜欢读什么新闻,将来shopping的站点本地化了,它还会知道我喜欢去什么店,喜欢搜索什么品牌的衣服,加上Map服务,它知道我比较经常去哪里出差,居住在哪里……知道了这些有什么用?如果我是一个音乐发烧友,某一天google把taobao收购了,它天天在我耳边告诉我xxx以低价拍卖xxxmp3 xxx MD,我能不去看么?google知道我喜欢川菜,适当的时候,友好的方式,提醒我川外川正在打折,我能不去么?而google收购的okut社会关系网络网站,我的朋友的资料它都可以掌握。google为我们提供的服务越多,它就越了解我们,而我们就越离不开google.记得看杂志,office11(2003)设计的时候要依托sharepoint server,大家都在线上,系统使用office,office就是一个大网络,最终没能实现而已。当初微软不惜动用重金打造IE,因为B/S架构下的应用,客户们不会依赖操作系统,而是浏览器。浏览器的习惯养成了,并且一切工作都通过网络进行,客户们甚至会因为windows不和mozila兼容而使用linux吧。应用越来越多的需要online方式工作,我感觉office最后就应该是一个富客户端而已,每个企业都有一个未来版本的sharepoint or xxx server,员工拥有的仅仅是一个office富客户端,大家联机协同办公,甚至通过自己的share point server 与外界沟通,广域网协同办公。office不是正在订制标准么?微软不参加很正常,当office办公软件成了标准,比如说文件交换格式(office 2003对xml支持很好了吧),那么,微软无法一家独大了,我甚至可以通过google的在线服务,或者为了便捷下载很小的客户端将文件编辑然后客户用他们购买的windows office打开观看,通过Google talk or msn沟通。我们日常公司里大多数数据并非存在与数据库,而是成千上万的office documents,如果office成了标准,google就可以提供企业局域网搜索服务,按照标准文件格式搜索。
不过google想撼动微软,我感觉一定还要开发操作系统的,硬件越来越便宜,客户端还是要执行大量复杂的运算,并不会成为网络中的一个通过浏览器看世界的小终端。我不是为微软咸吃萝卜淡操心,而是,google确实给了我们很多惊喜,不管战况怎样,胜利的都是我们用户。

posted @ 2005-10-09 22:50 BlueO2 阅读(336) | 评论 (0)编辑 收藏

也算是Struts in Action的读书笔记吧~~~
1 实现业务层接口
public class ArticleForm extends ActionForm implements ArticleBean{
//...
}
调用ArticleBean articleBean = (ArticleBean)form;
articleModel.update(articleBean.getKey(),articleBean);
2  手动初始化
ArticleForm aForm = (ArticleForm)form;
ArticleBean aBean = new ArticleBean(aFrom.getxxxx..,.,.,.);
4 提供工厂方法
ActionForm中封装此方法
public ArticleBean getArticleBean(){
ArticleBean aBean = new ArticleBean(
this.getXXXX,
this.getXXXX,
......
)
}
5 传递Map对象
用BeanUtils包或者手动产生于ActionForm
public Map describe(){
  map = new HashMap();
  map.add("xx",this.getXXX());
  map.add("xx",this.getXX());
    //......
}
6 反射传递数据
写于action
BeanUtils.copyProperties(myBusinessBean,myActionForm);
  //Business Object's somemethod
BeanUtils.copyProperties(myActionForm,myBusinessBean);

posted @ 2005-10-08 15:40 BlueO2 阅读(509) | 评论 (0)编辑 收藏

我什么时候也起这么恶心的题目了,可能和某些同志混久了,也喜欢抓眼球了。言归正传,banq老爷子(这么叫挺可爱的),就是jdon创始的那个banq,其实我一直有些佩服有些BS的复杂情绪看待这样一个人,banq技术上确实有几下,起码不是只会吵架的人,能研究些东西,但是,看他吵架和写东西确实不是很舒服,总是感觉什么东西都是他banq的最好,他的jdonframework比spring先进阿,HiveMind框架的思想他早就有啊之类的……翻翻帖子,看看gigix robbin怎么和banq结的梁子,有时候不禁喷饭。但是似乎所有大牛都有个特点,什么东西都要评头品足,我就纳闷,世界上有这样的人么?什么东西都研究的明明白白的。今天好不容易闲了,去jdon看看热闹,看有人吵架每(这心里够bt),结果看到banq解答的struts问题的帖子,sigh,要是普通人我早就反驳了,可是因为是banq,我又再次翻出来以前看的资料和源码才敢指出:banq,u r wrong.而且是很基础的很本质的错误。问题如下:
感觉Struts标签太繁琐了,想用 struts+velocity ,但是页面如果没有html:form等struts标签,页面的form elements 是否能赋值到formbean中,formbean中的validate方法是否还有效。
banq的理解:
当然不会有效。每个字段实际是通过:
<html:text name="ACTIONFORM名称" propert=""
其中name很重要,指定了使用哪个ActionForm。
俺给个解答,也请指出不足和理解上的偏颇:
name:The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized.
Any JavaBean can be used with the Struts JSP tags to populate a control. But to provide automatic validation of the input, Struts uses its own JavaBean subclass,called the ActionForm.
The ActionForm solution
The Struts solution to HTTP parameter handling is to transform the input fields into JavaBean properties. When a property on the ActionForm matches a parameter in the request, the framework automatically sets the property to the value of the parameter. A Struts developer can work with a trusty JavaBean and leave the HTTP rigmarole to the framework.To harvest request parameters, all the Struts developer needs to do is provide an ActionForm with JavaBean properties that match the names of the HTTP parameters. The rest is automatic.

具体如何automatic解析,ActionForm如何被控制,有空再写,毕竟struts研究的系列心得才进行了很少篇blog,现在忙着webwork2 hibernate spring

posted @ 2005-10-08 12:13 BlueO2 阅读(393) | 评论 (0)编辑 收藏

今天晚上被讨厌的vba郁闷,以后谁再跟我说vb简单易用我跟谁急。由于计划上每天都要继续讨论java基础语言特性,所以最近也返璞归真,重读thinking in java。发现了一个问题如下:
在第9章 持有你的对象arrays的比较章节,有如此代码片断:
String[] s1 = new String[5];
Arrays.fill(s1,"hi");
String[] s2 = {"hi","hi","hi","hi","hi"};
System.out.println(Arrays.equals(s1,s2));
输出结果true
Bruce给出的解释是s1的所有元素指向同一个对象,s2却拥有5个不同对象,但是Arrays.equals比较的是内容,还特意强调通过Object.equals(),所以结果为true.
首先,我们看看Arryas.fill(s1,"hi")如何工作:
SRC:
public static void fill(Object[] a, Object val) {
        fill(a, 0, a.length, val);
    }
public static void fill(Object[] a, int fromIndex, int toIndex,Object val){
        rangeCheck(a.length, fromIndex, toIndex);
        for (int i=fromIndex; i<toIndex; i++)
            a[i] = val;
    }
显然所有的s1中原素指向了相同的一个对象"hi"这里Bruce没错,那么后面的s2是否拥有5个不同的对象呢?我们做以下代码测试(其中捎带着String类型的测试)
import java.util.Arrays;
public class profit{
        public static void main(String args[]){
                String s1 = "Hi";
                String s2 = "Hi";
                String s3 = new String("Hi");
                String s4 = new String("Hi");
                if(s1==s2) System.out.println("s1 s2 equal");
                if(s3==s4) System.out.println("s3 s4 equal");
                //System.out.println(s3.hashCode());
                //System.out.println(s4.hashCode());
                String[] strArray = new String[2];
                Arrays.fill(strArray,"hello");
                if(strArray[0]==strArray[1]) System.out.println("strArray equal");
                String[] strArray2 = {"hello","hello"};
                if(strArray2[0]==strArray2[1]) System.out.println("strArray2 equal");
                String[] strArray3 = {new String("hello"),new String("hello")};
                if(strArray3[0]==strArray[1]) System.out.println("strArray3 equal");

输出结果:
---------- Run ----------
s1 s2 equal
strArray equal
strArray2 equal

Output completed (1 sec consumed) - Normal Termination
首先,各位应该明白最基础的东西 ==实现的比较是浅比较,就是非reference指向的具体对象内容,而是是否指向了同一个对象。第二,String类型被设计为非可变类,就是说 String s1 = "hi";与String s2 = "hi";其实指向了同一个对象,只有用new构造函数的时候才会产生新的对象,而不管内容是否已经在内存中存在。如下文字阐述了一些:
s = new String("Initial Value");
每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。
上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同
ok,回到我们的话题上来String[] s2 = {"hi","hi","hi","hi","hi"};是否产生了5个不同的对象呢?我写的简单的测试代码

String[] strArray2 = {"hello","hello"};
 if(strArray2[0]==strArray2[1]) System.out.println("strArray2 equal");
的结果大家应该得出了结论了吧。
那么,bruce给出的代码的结果之所以为true就是因为,这么多个数组中的成员"hi"其实都是同一个对象。那么我们继续看Arrays.equals是否比较的内容呢?
SRC:
public static boolean equals(Object[] a, Object[] a2) {
        if (a==a2)
            return true;   //如果指向同一对象,当然是相同的,返回true
        if (a==null || a2==null)
            return false;  //如果为null就没有相等的一说,false

        int length = a.length;
        if (a2.length != length)  //长度不同
            return false;

        for (int i=0; i<length; i++) {
            Object o1 = a[i];
            Object o2 = a2[i];
            if (!(o1==null ? o2==null : o1.equals(o2)))  //此处为关键,object的equals比较,Arrays.equals并没有专门为String类型重载此方法,全部都依赖Object的方法比较
                return false;
        }

        return true;
    }

那么我们再看看Object这个树根的equals方法吧:
public boolean equals(Object obj) {
 return (this == obj);
    }

短短几行代码,但是,是浅比较毫无疑问,所以,bruce说的,依赖的是Object.equals,比较的是内容,更是错误的。
但是必须强调的是,当String数组传递进来的时候,由于java的RTTI执行期型别辨识,Arryas.equals调用的其实是String.equals方法,而String.equals方法是比较内容的,所以,此处我想是bruce没有说明白,而又偏偏列举了String的例子。如果是自己写的类有没有复写equals方法,此时就调用Object.equals了,那么根本不可能比较内容,所以Arrays.equals大家一定要知道怎么回事再用。

posted @ 2005-10-08 12:05 BlueO2 阅读(497) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 

posts - 29, comments - 3, trackbacks - 0, articles - 0

Copyright © BlueO2