随笔 - 170  文章 - 536  trackbacks - 0
<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

我参与的团队

随笔分类(103)

搜索

  •  

积分与排名

  • 积分 - 410546
  • 排名 - 134

最新评论

阅读排行榜

IntelliJ IDEA 10.0 发布了,放出 IntelliJ IDEA 10.0 的注册机下载。点击下载
posted @ 2010-12-18 09:56 steady 阅读(5866) | 评论 (4)编辑 收藏
     摘要:   阅读全文
posted @ 2009-12-14 20:06 steady 阅读(10540) | 评论 (26)编辑 收藏

  开始并没有关注这么一个购物搜索的东西,以为只是上网按关键词查查东西,昨天无意中看了说明,发现它远远不是这么简单的东西。它有着一般购物搜索无法相提并论的强大功能,那就是——条形码搜索。

  摄像头对于强大的 Nokia S60 系列手机来说,早已成了标配,扫描条形码等功能,也早就成为手机很容易完成的功能了,但是却很少有人把条形码和网络进一步结合。有道购物搜索是我看到的第一个完成这样功能的软件。其实用起来很简单,手机有个能自动对焦的摄像头和能上网就行了,拿摄像头对准商品条形码处扫描一下,然后会自动上网搜索相关产品,甚至连拍照键都不用按了,一切都是自动完成的。产品数据库也比较丰富,拿身边的小东西随便扫了下,水溶C100,益达木糖醇,各种书籍(书籍的数据库应该是最全的,手边的书全部都能找到)。

  这是一个相当有创意的产品,当然,这个条形码数据库也不是容易得到的,但是这个数据库和后台有道搜索结合,就形成了一个非常完美的应用方式,这应该是我看到的让我眼前一亮的手机软件之一了。

posted @ 2009-08-17 17:26 steady 阅读(2055) | 评论 (0)编辑 收藏

   为了在家里唱K,去拷了个24000首的歌库,然后配置随盘送的后羿礼光卡拉OK软件。或许这个软件太专业了吧,以至于想随便配配就能玩不是件容易的事情。用我机子里装的 KMPlayer 是根本都放不出来的,音乐视频都是没有的,然后拿各种播放器一个个试。用了暴风影音(老版本的,新版是垃圾),完美解码,默认安装的情况下都是可以出视频的,声音是完全没有的。无奈,只得逐一试下各个选项了,最后发现只有 MPEG2 音频编码器设置成 SPDIF 的时候,才会有声音。之前在网上找的各种解决方案都要注册,注册后还没给你个有效的解决方案,要你重装系统什么的,还是靠自己吧。估计是做这套软件的人比较菜,初始化声音只用了默认的一种音频解码方案,而且你还得恰好装了这个解码器才行,否则,一个个试吧。

  用了软件以后,就和歌厅的选歌界面很像了,不然这么多歌曲,用手工选也是很痛苦的事了。

  另外,我用创新 Audigy ZS 声卡 + 得胜 TS-6310 无线麦克风 + 黑钻双子星XP 音箱 + 软件歌库,基本能做一个小小的家庭卡拉OK 中心来玩了。

posted @ 2009-08-17 17:23 steady 阅读(4282) | 评论 (0)编辑 收藏

  为了编译方便我把 servlet-api.jar 和 jsp-api.jar 和其他 jar 包都放在一起,在 ant build 的时候就会一并被拷到 Web 项目的 WEB-INF/lib 下,不过这次因此出现了一个 jsp 页面的编译错误,所有的 jsp 页面打开都会在页面上报编译错误,后台无任何信息。考虑到 jsp 页面的编译可能和 jsp-api.jar 有关,于是将 WEB-INF/lib 下的 servlet-api.jar 和 jsp-api.jar 移走,问题解决。

  后来发现放在里面的这两个包是 tomcat5.5 的,是 JSP 2.0 规范的,而部署的服务器是 tomcat 6.0 是 JSP 2.1 规范的,两者可能有一定的冲突,才导致这样的错误。

posted @ 2009-08-17 17:22 steady 阅读(2550) | 评论 (0)编辑 收藏

  在用 SVN 的时候出现了这样一个小问题,害得我折腾了半天,一个小小的 s 却是罪魁祸首。

  因为项目路径切换,需要从 https://server/trunk 切换到 https://server/tag/1, 不过在文档中后者写成了 http://server/tag/1,恰好 SVN server 用 HTTP 和 HTTPS 都是可以访问的,所以没觉得这个东西有什么错误。不过使用 SVN 做 switch 操作的时候却总是出现 https://server/trunk is not the same repository as http://server/tag/1,感觉很奇怪,问了一下相关负责人,当时也没有发现什么问题,不过还是没法操作,最后无意中把 http://server/tag/1 换成了 https://server/tag/1,一切 ok。

  被这个问题折磨的比较郁闷了,可能是 SVN repository 不能在 HTTPS 和 HTTP 之间切换吧。

posted @ 2009-08-17 17:21 steady 阅读(3000) | 评论 (0)编辑 收藏

  其实嘛,浏览器对大多数人来说,都是每天必用的软件了,不过在国内来说,其实也没啥悬念,IE 占据了绝大多数的份额,在加上个挑战者 Firefox 在占据着国内微不足道的份额,在加上 Google Chrome 以及其他份额更少的诸如 Opera 之类的,估计一百个人也找不到一个在用吧。

  不过嘛,国内倒是有个不大一样的地方,我们国人比较善于做壳,于是我们有很多“国产浏览器”可以用,最著名的或许要算 Maxthon 遨游了,当然这也是我最喜欢的浏览器,也是我上网闲逛必用的浏览器,当然了,Maxthon 这个东西嘛不是太稳定,有时候会出现一些莫名其妙的问题,于是换标准的 IE 来用。当然用 Maxthon 也有用 Maxthon 的道理,一个是同步收藏夹,一个是手势功能,当然还有若干细微的功能也挺不错,弥补了 IE 的不足吧。不过 Maxthon 不能用 IE 的 Toolbar 和 Plugin 之类的,而独创了直接的一套插件体系可谓是一大败笔,于是很多时候为了一些功能,不得不用回 IE,Maxthon 只能成为我瞎逛的首选了。

  说到后起之秀 Firefox 嘛,其实说实话,我对它并不感冒,因为它的速度实在不敢让人恭维,或许 Firefox 让我唯一感冒的东西是 Tor 和 Firebug 吧。更多时候我选择用 Chrome 来替代 Firefox,因为 Chrome 够快,不得不承认,Chrome 是最快的浏览器,特别是在对 JS 的处理上,大大优于前两者。而且启动还有个访问页面列表的大缩略图,对于我这种懒得输网址的人来说,可谓是大大的方便,于是 Chrome 成了我逛技术类网站的首选了。

posted @ 2009-07-07 11:19 steady 阅读(1927) | 评论 (0)编辑 收藏
上午看完变形金刚,这样的娱乐大片看了感觉就是很爽,不用为复杂的情节去思考,紧张刺激的情节中不乏幽默,最有意思是看到我们公司(Cisco Webex)在变形金刚2里做的远程恋爱系统的广告。

Cisco Webex Transformers2

Cisco Webex Transformers2

posted @ 2009-07-06 14:13 steady 阅读(1925) | 评论 (0)编辑 收藏

  在Java世界里打拼也好几年了,也看到了各种不同技术的浮浮沉沉,倒是发现了一个简单的规律,最简单的东西往往是最有用的,简单的软件也是种美。

  在 Java Web 领域,曾经有无数各种各样的框架,Struts1/2,JSF,Echo1/2,Tapestry,Wicket,等等等等了,这么多不同的框架代表了两个不同的方向,除了 Struts 这个是基于请求的,其他几个都是算是事件驱动的,但是后面几个在整个市场上所占的份额也赶不上 Struts 一家。HTTP 请求本来是很简单的,而 Struts 就是基于这样简单的概念,但是却有无数人希望重现 VB 时代的那种拖拖拉拉的编程方式,希望用事件驱动一切,但是大部分人都失败了。失败的原因也其实不那么复杂,有的是不够成熟,像 JSF 这样被 Sun 官方大力推崇的框架,但 Ajax 出现的时候,JSF 中想灵活的用 Ajax 都成了一种奢望,有的是资料太少了。像 Echo2 这样的框架资料,少的跟珍惜保护动物似的。

  当然也不是没有成功的,微软凭借其强大的开发实力,和开发工具的配合,加上没有给 ASP.net 用户更多选择余地,取得了无人匹敌的成功。但是这个成功在 Java 世界是不会拥有的,Java 世界没有微软这样的巨头,Java 世界中拿得出手的几个开发工具,Eclipse,Netbeans,IDEA,在所见即所得的开发上远远的落后于 Visual Studio。相比微软帝国,Java 世界多的是中小型的,开源的工具产品。规模上都远远落后于微软,Java 世界唯一可走的路便是简单了。对 Java 世界来说,简单不仅仅是种美,更是生存之道。

  起初作为 Java 世界 PK 微软产品的重头戏,EJB 在学院派的力捧下诞生了,EJB 似乎从来都不打算让人活的轻松,一个简单的东西非得搞的复杂无比才行。而且其持久层 Entity Bean,似乎连基本功能都没能实现,更别谈大规模使用了。EJB 1/2 的时代是开发人员永远无法忘却的噩梦。

  Java 世界也从来不缺活跃分子,Rod Johnson 这个有种音乐家气质的牛人凭借自己多年的积累,推出了 Springframework,这样一个基于 IoC 和 AOP 两个概念的简单易用的框架,完成了很多起初只有 EJB 才能完成的工作,Spring 也一夜成名,成为 Java 世界使用最为广泛的轻量级应用框架。

  几乎是同时,来自澳洲的小帅哥 Gavin King 也在用一种与众不同的方案去替代现有比较复杂的 Java 持久化方案,最后他的 Hibernate 也成为替代原有 EJB 持久化方案的选择。相对简单的 Hibernate 也取得了巨大的成功。

  其实这样的例子在 Java 世界也非常多,以至于后来来自于 Ruby 开发社区的 Ruby on Rails 的出现,给了 Java 开发者当头一棒,原来还有更简单的做法哦。于是 Java 世界慢慢的开始对多种脚本语言进行支持,包括 Ruby,以及后来自创的 Groovy。以此去打造类似 RoR 那样简单的开放方式。

  生活其实是很简单的,软件开发其实也是一样,用简单的方式,去打造简单的软件,Java 世界用无数失败的教训证明了这一点。像我呢,也喜欢用这样简单的方式去工作,最喜欢 IDEA 去写代码,最喜欢 Struts2 + Spring2 + Hibernate3 这套组合,最最喜欢的是简单,因为简单是最美的工作方式。

posted @ 2009-06-23 16:08 steady 阅读(3222) | 评论 (6)编辑 收藏

  为了实现工作流中对脚本的支持,简单的玩了一下 BeanShell,这个小小的嵌入式 Java 代码解释器可以将  Java 语言像动态脚本一样执行,几行命令,它就能把一段 Java 代码给玩转。

  工作流中有个这样的简单案例,当一笔单子金额大于 50万时,应该将任务分配给 Senior Agent 处理,否则交给 Junior Agent 处理,我们用 BeanShell 简单模拟这段脚本。

    public static void main(String[] args) throws Exception {
        Interpreter i = new Interpreter();
        i.set(”price”, 1000000);
        i.set(”user”, “”);
        i.eval(”if(price > 500000)\n” +
                “user = \”SeniorAgent\”;\n” +
                “else \n” +
                “user = \”JuniorAgent\”;”);
        System.out.println(i.get(”user”));
    } 

  运行结果是打印出了:SeniorAgent

  可以看出,BeanShell 用非常动态化的方式,完成了我们一个简单的案例的处理,这里,我们只需要将需要解析的 Java 语言的脚本交给 BeanShell 的 Interceptor,并把脚本中用到的参数值传入,就可以了,最后,我们把运算结果赋给一个变量,然后获取变量结果,就可以了。

  看到 Developer Works 网站上有一篇 BeanShell 实现公式管理的文章:http://www.ibm.com/developerworks/cn/java/l-formula/index.html,可以参考一下。

From:
http://www.steadyxp.com/archives/851.html

posted @ 2009-02-26 09:56 steady 阅读(3257) | 评论 (1)编辑 收藏

  服务器上用 HttpClient 远程调用另一台服务器的一些资源,但是用 netstat 查看经常出现了很多的 CLOSE_WAIT 的连接,最后追查原因,是因为 HttpClient 的 method.releaseConnection() 并不是强制释放连接,为了减小连接数,使用了如下解决方案。在 HttpClient 完成请求后的 finally 块里面这么写。

    } finally {

           if (method != null) {

              try {

                  method.releaseConnection();

              } catch (Exception e) {

                  logger.error("-------> Release HTTP connection exception:", e);

              }

           }

           if (client != null) {

              try {

                  ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();

              } catch (Exception e) {

                  logger.error("-------> Close HTTP connection exception:", e);

              }

              client = null;

           }

       }


原文:http://www.steadyxp.com/archives/832.html
posted @ 2009-02-23 13:49 steady 阅读(4367) | 评论 (0)编辑 收藏

前两天 IntelliJ IDEA 8.0 发布了,在第一时间放出 IntelliJ IDEA 8.0 的注册机下载。点击进入下载页面 原版下载

posted @ 2008-11-10 16:54 steady 阅读(15398) | 评论 (12)编辑 收藏

  从淘宝第一个开始屏蔽百度以来,国内很多主流的 SNS 网站和大型的内容性质的网站都开始或即将开始屏蔽百度了,这些网站包括校内网、海内网等国内主要SNS网站,以及搜狐博客、51.com等网站。从SNS社区的说法,他们屏蔽搜索引擎是为了保护用户的隐私,但更多的是在保护自己的利益,比如说淘宝是在保护其极为客观的商品信息,而SNS是在保护对其最有价值的用户信息,特别从搜狐博客来看,更多的是希望提高其搜狗搜索的内容价值,总的来说,东西绝非单纯,纯粹是一种商业上的运作了,淘宝网敢第一个站出来跟百度斗,其他预谋已久的各大SNS网站跟着后头就跟着杀出来了。

  这段时间百度又跟三鹿奶粉事件牵扯上了一些不清不楚的关系,搞的百度最近也疲于解释这些事,当然大家也不会真的相信这种解释了,因为百度在搜索结果人工干预上已经受到非常多的人的抱怨,我们也完全相信百度能干得出这样的事情,具体是因为这次风险大还是嫌钱少了没有去做,我们就不得而知了。

  附一些主要网站的 robots.txt 文件,证明一下百度是如何被屏蔽的。

http://www.xiaonei.com/robots.txt
# Robots.txt file from http://www.xiaonei.com
# All robots will spider the domain

User-agent:BaiduSpider
Disallow:/

http://blog.sohu.com/robots.txt
User-agent: Googlebot
Disallow:

User-agent: baiduspider
Disallow: /

User-agent: Nutch
Disallow:

User-agent: *
Disallow: /

http://www.taobao.com/robots.txt
User-agent: Baiduspider
Disallow: /

User-agent: baiduspider
Disallow: /

From: Steady Blog 国内主流SNS开始屏蔽百度

posted @ 2008-09-17 17:15 steady 阅读(3655) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2008-09-15 22:24 steady 阅读(2621) | 评论 (0)编辑 收藏

  看到在 DBA Notes 的文章(支付宝 + Firefox)说支付宝已经开始支持 Firefox 了。

  目前支付宝对 Firefox 支持的说明:
  1. 支持 Windows 平台的 Firefox ,支持版本:Firefox 1.5、2.0、3.x;届时还将提供自动安装功能,现在准备尝试的用户可以到 Mozilla 站点上
下载支付宝安全控件(AliPay Security Control)(也欢迎广大 Firefox 爱好者在留言中给我们提一些反馈意见);
  2. 目前在 Windows 平台下的 Firefox 下暂时还不提供对安全证书的支持,但是对安全证书的支持已经提上日程;
  3. 对 Linux 平台下 Firefox 的支持已经在内部测试中,预期近期内即可发布;

  可以说,这个是网银及电子支付业务的一大进步,支付宝可以说是第一个支持 Firefox 浏览器的支付解决方案,是第一个没有使用 ActiveX 实现的解决方案,同时,据支付宝方面的说法“我们目前所开发的 Firefox 插件,未做任何修改,就可以较正常运行在苹果的 Safari,和 Google 的 Chrome 浏览器上。经过分析发现,除了接口方案稍有区别,其大体的结构,还有页面的Embed 标签等都是兼容的,相信经过后续的改进,为 Firefox 所开发的安全控件和所修改的页面,只花很小的代价就可以运行在苹果和谷歌的浏览器上”,对于这方面技术的研究,不光是实现了一个功能,更重要的是,证明了在于非 IE 浏览器下同样可以实现类似 ActiveX 的功能,这样为 Firefox 和 Chrome 浏览器的后续发展提供了有力支持,虽然我用的最多的是 IE,但是 Firefox 和 Chrome 都有令我舍弃不得的好用功能,我想在多家浏览器竞争中,我们会得到更多更好的东西。阿里巴巴是一个重视技术,重视创新,有远见的好企业,赞一个,相反,在相同的电子支付领域,国内多数主流银行的网银服务在这方面几乎不做任何技术创新,改进现有蹩脚的产品,让用户长期忍着去用他们让人作呕的产品,相比较而言,阿里系的主要产品后面都有 UED 的工作,因为用户才是他们最重要的。

From: Steady Blog - 支付宝终于支持Firefox了
posted @ 2008-09-14 22:03 steady 阅读(3516) | 评论 (4)编辑 收藏

  在 Web 2.0 的概念被极度热炒,Ajax 这样旧瓶装新酒的技术的应用场景被极度放大,因为 Google 做 Ajax 大家都跟着做,但是这样大家往往忽略了另外一个更为简单有效的 Web 端应用平台 Flash,其实,很多应用场景下,我们可以用 Flash 轻松构建出非常漂亮的互联网应用。通过最近的一些爬网的使用,找到了一些国内外的一些优秀的 Flash 应用平台,来和大家做一些分享。

  首先要介绍的是Buzzword,它的前身是 buzzword.com,前几个月已经被 Adobe 收购,这是一个很炫很好用的在线版 Word,这个来自于 Flash 东家的东西还是相当的夺人眼球的。直接打开了他的 demo,我们可以看到下面这样的编辑效果。

  第一次使用 Buzzword 就被其几乎和 Word 相似的流畅的编辑操作,强大的表现效果所震惊,无论是文字编辑功能,还是非常灵活的图片自由布局,以及简单好用的表格编辑功能,包括批注等,用起来都是非常的顺手,丝毫感觉不出这是在 Web 上使用,在线编辑的文件可以自由的保存在网上或是共享给好友,甚至能方便的导出成 Word,PDF 等格式的文档,同样他还能导入我们在本地编辑的 Word 文件,继续在 Web 上编辑使用。

  当然美中不足的是,Buzzword 暂时还不支持中文,我们只能编辑英文的文档,另外它的编辑功能和 Google Doc 这样的前辈比起来,也是有一定差距的,它的在线协作功能,和 Google Doc 这样的强手比起来还是逊色不少。

  总体来说,buzzword 给我们一个全新的体验,原来我们在浏览器里也是可以如此流畅的使用和 Word 这样的应用,不得不说,在此方面,Flash 相对 JavaScript 是技高一筹。

  下面我们再来看看一个 Flash 版的在线视频系统,来自于 Webex,这个当今世界上最大的网络会议系统提供商,同样也是顶级的 SaaS 服务提供商,最近也在尝试着推出了几款基于 Flash 的网络会议系统,我介绍其中一个比较酷的,Video Room,是一个在线的多人视频聊天室。因为是 Flash 的,也就不需要下载客户端,也不要装 ActiveX 控件了。

  在 QQ 或者其他聊天工具上,我们也会看到同样的效果,但是,想想看我们其实是很幸福的,因为我们有 QQ,老外可就没这么爽了,MSN 或者 Skype 还没有这么强的多人在线视频呢,在网页上就能玩转视频聊天,还是个很酷的,特别是当你能即时接收到新的视频聊天请求时实时弹出的仿 MSN 的对话框,让你感觉不到这其实是一个网页。不过这个 Video Room 只提供给我们最基本的视频音频功能,不过拉一帮久未谋面的兄弟进来吵吵闹闹还是很适合的哦。

  看完了一些国外大公司做的 Flash 应用,我们再把视线集中到国内,让我们看看联想实验室给我们带来的一些有意思的东西,其中我们可以看到一个叫做 Best4c 的在线版绘图工具,可以说这就是一个在线版的 Visio。

  我们可以用像操作 Visio 一样拖一些组件到编辑区域,然后用线把他们连起来,拼成我们需要的图,如果这不是在浏览器里面进行的操作,我们或许真的会把他当成本地运行的软件呢。Best4c 另外还提供给我们一套在线版的 PowerPoint 工具,让我们可以在线的制作自己的 PPT。虽然总的来说,best4c 提供的东西不是很产品化,使用起来不是太人性化,但是他也向我们证明了,国内在这方面的开发也在进行中,我们也在努力的和世界一同进步。

  从以上一些应用我们可以看到,其实我们一直以来几乎可以说是赖以为生的 Office 系列软件,在线通讯软件,通过 Flash 强大的图形功能,让传统的单机应用变成了网络应用,无论是在效果上,还是开发成本,和纯的 HTML + JS + CSS 的传统 Web 应用架构相比,有了较大的改进。从 Flash 成为 Adobe 的一个重要成员,Flash 就开始一步步的蚕食互联网,前几年 Flash 携 FLV 几乎是将微软的 WMV 和 ReadNetworks 的 RMVB 两大流媒体从在线视频上彻底的赶了出去,而这几年,Flex 的推出,让企业应用的前端开发变得简单,去年推出的 AIR 则是更加深化了 Flash 平台在个人电脑中的影响。这一切我们可以看到,Flash 正以前所未有的速度改变着互联网。如果你现在在为企业应用的前端界面而头疼,Flex 可以帮你找回当年 VB 时代的感觉,如果你在做工作流平台的在线流程编辑器,或许你可以考虑一下 Flash,它或许能让你更简单的开发这样的图形应用。

posted @ 2008-09-08 15:44 steady 阅读(1880) | 评论 (1)编辑 收藏

  2008年8月29日,W3C 的Web IDL 工作草案正式发布,令人惊奇的是在规范说明中竟然出现了“周杰伦”的名字。

  Web IDL(Interface Definition Language,接口定义语言)该规范定义了一个OMG IDL 3.0的语法子集,用来规范定义的接口。Web IDL 是一个具有多种功能的IDL 变量,便于规范Web平台中的常用脚本对象的操作。其中包括了大量的扩展功能,以及捆绑了针对ECMAScript 3rd Edition 和Java的语言工具。

  令人惊奇的是,在规范说明书的3.8.9. Stringifies小节,“周杰伦”的名字赫然出现在示例代码中,堪称为以中文名出现在W3C规范里的第一人。(使用 UTF-8 编码查看)

截图:

介绍:http://www.w3.org/TR/WebIDL/
来源:CSDN

posted @ 2008-09-06 08:18 steady 阅读(1898) | 评论 (7)编辑 收藏

  jBPM 是一个非常优秀的开源工作流引擎,虽然他不是一个一站式的工作流平台,不过它已经为我们提供了比较丰富的底层操作,为了满足特定的项目需求,我们一般需要对其进行二次开发,才能适用于具体的业务需求。

  其中一个主要的扩展点是针对 TaskNode 进行的用户的分配。TaskNode 是 jBPM 中一个非常重要的概念,一个任务节点可以包含若干个任务,不同的任务可以由不同的人来完成,任务实例被分配给 actorId 来完成,其中指定到人的分配工作就是 Assignment 要处理的,这也是我们需要定制的功能,为了实现用户的分配,我们需要实现 AssignmentHandler 接口,接口原型如下。

public interface AssignmentHandler extends Serializable {    
    void assign(Assignable assignable, ExecutionContext executionContext) throws Exception;
}

  通常用代码实现的话,我们可以让一个类实现这个接口,并在 swimlane 或者 tasknode 中的 assignment 指定该类。但是,这样的灵活性是显然不够的,在系统的使用过程中,分配策略会不断的进行调整,因此我们需要更为灵活的解决方案,jBPM 本身可以使用基于 Bean Shell 的脚本来写分配策略,但是 Bean Shell 不是那么强大,我们需要更为强大的解决方案,因此,我们选用了已经被 JBoss 收为旗下的 JBoss Drools 4.0 规则引擎 (在 3.0 的时候曾经改名为 JBoss Rules,4.0 又改回来了)

  完整版本请查看:http://www.steadyxp.com/archives/120.html

posted @ 2008-09-05 15:29 steady 阅读(2293) | 评论 (0)编辑 收藏

  一年来您可能听说 Google 在做新能源,在做手机平台,这下 Google 又要发射自己的卫星了。

  Google和GeoEye签署一项排外性协议,Google购买GeoEye即将发射的GeoEye-1号卫星图像的在线独家使用权,之前Google已经与另一家主要的卫星影像提供商DigitalGlobe达成排他性协议。

  GeoEye-1号卫星是目前最先进的高分辨率民用遥感卫星,将在本周发射,火箭的外壳将打上Google的logo。GeoEye-1重4,300磅,将在423公里轨道运行,能分辨地面41厘米大小的物体,但鉴于GeoEye与美国政府之间的许可协议,Google只能使用50厘米精度的卫星图片。"

  我们过去看到过各式各样上面有 Google Logo 的东西,像笔啊,茶杯啦,我也有一个 Google 送的纸袋,这下连火箭上也有了 Google 的 Logo,这下 Google 的 Logo 走出了地球,飞上了太空。相信不久,Google Earth 也将走向高清时代。

posted @ 2008-09-05 15:28 steady 阅读(1254) | 评论 (2)编辑 收藏

  番茄花园美化修改版Windows XP的作者、软件下载网站番茄花园(tomatolei.com)站长洪磊的父亲19日晚22:50独家向新浪科技证实,洪磊已经于15日(上周五)被警方拘留审查,网站被关闭,服务器及洪磊的笔记本被警方带走,为洪磊提供的技术开发支持的成都红果科技有限公司也被查封。

  据知情人士透露,由于此案是直接由上级机关指派给苏州公安局虎丘区派出所要求查处,并且负责破案的不仅仅是苏州方面,因此很早就有人猜测这是微软方面直接参与促成的事件。

  8月20日中午,微软中国也向媒体正式作出了回应称,“番茄花园从事的软件盗版活动在相当长的一段时间以来十分猖獗,包括微软在内的众多国内外软件公司的权益均受到了严重损害,鉴于此,微软日前和其它软件公司就番茄花园网站的侵权犯罪活动,向国家版权局和公安部进行了投诉,并得到了高度重视。”

  上个月可能最受大家关注的新闻就是这条了,或许大家会简单的认为这次事件纯属微软的反盗版行为,但是这次事件绝不仅仅是简单的反盗版,微软之意在于一箭双雕,一方面严重的打击了最大的盗版源,另一方面为其在中国面临的反垄断调查提供筹码,更深层次的意义在于消灭 Windows XP 在市面上的流行。

  让我们来看看和微软反垄断相关的一些相关动作的时间吧:

  7月31日,董正伟向商务部、国家工商总局、国家发改委发出《请求保护公民财产权益的建议申请书》,建议对微软开展反垄断调查,罚款10亿美元,并责令其公开程序源代码,并建立微软产品的价格听证制度。

  微软做出的回应是:

  “由于微软大部分以非正版方式存在,正版产品市场份额很小,因此微软在中国构成垄断的前提不存在。”微软公司资深副总裁、微软(中国)有限公司董事长张亚勤称。这是微软高管自中国《反垄断法》8月1日实施后第一次正面回应微软在中国的垄断问题。

  从时间上来看,我们可以认为打击番茄花园是微软为了上面这个回应的提供一个有效证据,增加其在反垄断调查方面的筹码。

  最后大家可能忽略了另外一个不是那么重要的信息:

  据国外媒体报道,微软此前表示,将于2008年6月30终止Windows XP操作系统OEM(原始设备制造商)版和简装版的销售(系统集成商的相应终止日期向后延迟到2008年12月31日)

  也就是说,我们现在已经无法买到正版的 WindowsXP 了,而面对兼容性的问题,对硬件要求过高的问题,也是 Vista 普及的重大瓶颈,特别是在国内 WindowsXP 改版如此流行的情况下,Vista 推广受阻,微软一定会想办法去给盗版 WindowsXP 市场来一次釜底抽薪,让 Vista 在正版和盗版市场的占有率同步提高。

  可以说,这次微软打击番茄花园在各个方面都给微软带来了不少的好处,可谓是一个妙招,而番茄花园站长洪磊也就成为了继珊瑚虫以后的有一个商业利益的牺牲品了。

posted @ 2008-09-05 10:02 steady 阅读(1626) | 评论 (2)编辑 收藏

大家可以去 Google Chrome 的官方网站去下载:
http://www.google.com/chrome

Google chrome特性是:

  • 从界面来看,我们设计了一个简单而高效的浏览器窗口。对大多数人来说,浏览器本身并不重要,它只是一个能够运行互联网网页、网站和网络应用等重要程序的工具。正如谷歌的经典主页,谷歌浏览器延续了简洁、快速的设计理念,帮助用户快速准确地到达目的地。
  • 从根本上讲,我们提供了一个能更好地支持各种复杂网络应用的浏览器基础平台。通过让每一个标签相互独立开来,从而避免了两个标签页产生冲突的可能,同时面对来自恶意网站的攻击,谷歌浏览器提供了更好的保护。我们提高了浏览器整体上的速度和响应度。我们还建立了一个更强大的 JavaScript 引擎 V8,以便为下一代网络应用技术提供支持,这些网络应用在目前的浏览器上几乎不可能实现。
  • —–来自Google黑板报“浏览器的新视角

Chrome并非基于Firefox,而是基于苹果的WebKit引擎。尽管Safari并没有获得巨大成功,但WebKit却向它提供了一大优势:速度。WebKit和谷歌开发的V8 java脚本渲染引擎联手,理论上将使Chrome在速度上“百尺竿头,更进一步”。即使Chrome的功能达不到出色的水平,也将成为Firefox的强大竞争对手。

Google chrome,中文名叫什么好呢?叫“Google 合金”?或者来个跟通俗乃至庸俗的名字“Google 浏览器”?呵呵,不管来什么,这个都是一个好事情。我们都充满着期待,也许过10几分钟,也许还有几个小时,我们都能看到庐山真面目了。不过我突然感觉到自己被来自Google的服务全面包围:Gmail、Gtalk、Google 输入法、Google Analytics、Google  Reader  、 Google notebook,当然还有Google search。有点害怕,如果有天,Google告诉我你的Google 信用卡这个月消费是“1000RMB”,账单如下:…..。我还有什么Google所不知道的?:-(

再看看老外的Blog,几乎全球的技术Blog都在写有关Google Chrome的事情。真佩服Google 如此良好的口碑效应和强大的Marketing能力。有这样好的宣传,何愁没有用户?

posted @ 2008-09-03 08:57 steady 阅读(2008) | 评论 (5)编辑 收藏

城市风景小区目前物业名为安徽合居美尚物业,该物业是刚于本月才成立的物业公司,只有暂定为三级的资质,无论从管理水平,管理资质上都不能达到一级服务标准,物业收费却按一级收费收费,有违《合肥市住宅小区物业综合服务收费指导价标准》的相关规定,但是在众多业主再三要求以及多次提意见之下,仍然没有得到任何答复和解决。

让我们来看看这个物业的所作所为吧
无组织无纪律,解决不了任何问题,遇到投诉一概推托,遇到问题一概无能为力,袖手旁观甚至说风凉话,晚上物业无人值班,出现任何问题没人可联系,更不可能帮忙解决;反而人多势众,一副欺软怕硬的样子,仿佛欺负业主才是正道;物业形同虚设,尤其是保安无所事事,近日来我们小区接连发生2起入户盗窃事件,被盗住户已有6家(5号楼4家,6号楼2家,第一时间,高新区公安局均有记录)。而且盗窃案件是在8.8号连盗四家5天之后又盗2家!!我们的物业“无所畏惧”毫无作为,简直拿业主的生命财产安全不当回事!!

相关恶劣表现不胜枚举!!请问,这样的物业,你们能够忍受吗?请问KFS, 这样的物业你们是怎么熟视无睹的?那么我们这些业主呢?是该行动起来还是继续沉默下去呢?

让大家都来了解一下,城市风景给了我们怎样的房子,又给了我们怎么样的物业?让一切惨不忍睹的行径曝光在众目睽睽之下,让更多的人来了解这个小区!!

posted @ 2008-08-13 14:06 steady 阅读(950) | 评论 (4)编辑 收藏

  淘宝网,国内最大个人网上交易社区正式推出了开放平台(Taobao Open Platform,TOP),用户可通过淘宝开放的API,创建各种不同的电子商务应用。

  淘宝开放平台项目是淘宝软件公司面向3rd App开发者,提供API接口和相关开发环境的开放平台。软件开发者可通过淘宝API来获取淘宝用户信息 (卖方和卖方用户信息,私有信息需要授权)、淘宝商品信息 (全淘宝超过1亿个商品的名称、类目、型号、介绍等信息)、淘宝商品类目信息(全淘宝商品索引及分类明细)、淘宝店铺信息(全淘宝店铺信息)、淘宝交易明细信息(在取得用户授权的情况下,查询每笔交易的详细情况)、淘宝商品管理(淘宝商品的上传、编辑、修改等接口)等信息,并建立相应的电子商务应用。同时,作为淘宝开放平台TOP项目的唯一合作平台——阿里软件平台在其中也扮演着重要的角色,它将为开发者提供整套的淘宝API的附加服务:测试环境、技术咨询、产品上架、版本管理、收费策略、市场销售、产品评估等等。

 

  很多人会联想到之前 Facebook, Google 等互联网巨鳄推出的 OpenAPI,这些主要都是社交类的 API,提供 SNS 相关的服务,从而扩大自己的用户群。但是很多人都认为,淘宝这样的大型个人交易类的网站,用户数据是非常私密的资料,那么淘宝为何要提供开放 API 呢。

  大家不妨将视野放宽,扩大到淘宝以外,聚焦到阿里巴巴旗下的另一个子公司——阿里软件,就能看到淘宝开放平台的目的所在,和 Facebook 不同,Taobao Open API 的目标不仅仅是扩大自己的用户规模,重要的是,阿里巴巴要用这个平台为自己赚钱。或许看到这里,大家都很纳闷,既然是开放平台,都是开放的,如何去赚钱,盈利呢?这个重任被压在了阿里软件身上,这个摇钱树就是近几年一个很热的名词 SaaS。一年前,我们看不出来阿里软件有什么不同的地方,提供了诸如阿里旺旺等工具,而且都是免费的。从今年年初开始,大家就开始感觉到阿里软件的变化,它提供的软件不再是纯粹自己开发的了,更多的是将一些重要的数据接口提供给第三方开发者,第三方开发者利用 Taobao Open API 完成自己产品的开发整合工作后,将自己的软件发布到阿里软件平台上,有客户购买了第三方的服务后,阿里软件就顺理成章的从中抽取佣金。这是一个新颖的模式,也秉承了阿里巴巴一贯的风格,首先让别人赚钱,再自己赚钱。阿里巴巴希望通过淘宝这样一个巨大的商业用户平台,发展出一个 SaaS 的中小软件产业圈。

  淘宝是免费的,淘宝开放平台也是免费的,但是淘宝却慢慢的开始赚钱,并不是提供免费的东西就不能赚钱,人多了,总是有办法赚钱的。

posted @ 2008-08-08 09:31 steady 阅读(4635) | 评论 (5)编辑 收藏
     摘要:   阅读全文
posted @ 2008-08-04 21:38 steady 阅读(2327) | 评论 (5)编辑 收藏

Linux 的安全防护,用 fail2ban 自动封IP

  总以为 Linux 比较安全,被攻击的概率较低,不过我用了非常简单的 root 账户密码 (password),家里的机子两次刚挂上网没半天就被人给改了密码,很是郁闷,不过两次的原因都很简单,挂上网后就开始遭遇不断的试密码,因为密码过于简单,很快就被攻破了,想想看,这也不是个事,密码就算比较复杂,天天也还是会被人试密码,心里总是不爽,找找看有没有什么输错几次密码就自动禁止 IP 的工具。这不,还真找到了个叫 fail2ban 的小工具,通过分析日志来自动 ban 入侵者的 IP,话不多说,装上去用用。

  下载地址在:http://fail2ban.sourceforge.net/rpms/

  找到最新版本的  rpm 包来安装,装好后,稍微根据自己的情况改一下配置就可以使用了。

vi /etc/fail2ban.conf

#以 daemon 方式启动 fail2ban
background = true

#允许尝试次数
maxfailures = 3

#触发 maxfailures 之後的封锁时间(秒); 设为 -1 表示永远封锁
bantime = 3600

#以 findtime (秒) 时间内的错误记录作为 maxfailures 的计数基准
findtime = 600

#排除 IP 范围, 以空白隔开
ignoreip = 127.0.0.1 192.168.0.0/24

#不启用 mail 通知
[MAIL]

enabled = false

#修改自 VSFTPD, 未提及的部份保持原设定
[PROFTPD]

enabled = true
logfile = /var/log/proftpd/proftpd.log
failregex = no such user|Incorrect password

#未提及的部份保持原设定
[SSH]

enabled = true
logfile = /var/log/secure

service fail2ban start

这个服务启动以后,每天都能在 /var/log/fail2ban.log 中看到有攻击的肉鸡被 ban 了。

2008-08-01 09:13:33,532 WARNING: SSH: Ban (3600 s) 205.189.197.66
2008-08-01 12:24:41,943 WARNING: SSH: Ban (3600 s) 121.52.209.5

posted @ 2008-08-02 22:08 steady 阅读(582) | 评论 (0)编辑 收藏
经两次与开发商交涉,未达到预期效果,目前开发商安徽盛通置业对《业主意见书》所反映的种种现象予以否认,并采取不理不采的消极态度对待业主代表的交涉。
盛通置业总经理王文利用其与徽商集团的某种及其特殊的关系,积极压制业主对其的种种投诉,对于这样的情况,小区业主联合起来,积极展开维权活动。
posted @ 2008-07-12 20:39 steady 阅读(489) | 评论 (1)编辑 收藏

业主意见书

致:安徽省徽商集团发展有限公司

由安徽徽商集团发展有限公司(以下简称“你方”)开发的徽商·城市庭院三期·城市风景现已按照《商品房买卖合同》约定的时间通知三期业主(以下简称“我方”)验房,但我方在验房过程中发现诸多有违《商品房买卖合同》中的条款的现象,以及有碍正常使用和存在安全隐患的多处质量问题,并就有关物业的收费有诸多疑议。特向你方提出书面说明,并就赔偿和整改提出我方意见,希望你方慎重对待。

第一条:你方有违《商品房买卖合同》的条款:

1.违反合同第十四条出卖人关于基础设施,公共配套建筑正常运行的承诺,验房当日,上下水不通,供电设施不能正常使用

2.违反合同补充条款中以下物品的规定:

(1)    防盗门:所有进户门都是防火门,而非防盗门

(2)    单元电子对讲保安门:室内未安装

(3)    信报箱:未安装

第二条:有碍正常使用和存在安全隐患的质量问题:

1.消防、智能化设施不完善

2.室内门、窗未按照《建筑安全玻璃管理规定》使用有双面3c认证标志的安全玻璃,阳台栏杆玻璃厚度不符合规范,且与可踏面的间隙过大

3.房屋墙体、楼面多处存在空鼓现象

4.墙面的垂直偏差大

5.配套设施不完善:小区道路、绿化、景观、车库等都未竣工,未达到一个小区正常交付使用的基本标准。

第三条:有关物业方面的疑议:

1.楼书上承诺是信誉较好的深圳长城物业管理有限公司,在我方尚未入住便已撤换,存在虚假承诺嫌疑

2.安徽合居美物业是刚于本月才成立的物业公司,只有暂定为三级的资质,无论从管理水平,管理资质上都不能达到一级服务标准,物业收费却按一级收费收费,有违《合肥市住宅小区物业综合服务收费指导价标准》的相关规定

就以上问题,我方业主经过集体协商,希望你方按以下方式进行解决:

对于第一条已构成违约,按照《商品房买卖合同》第九条的规定进行违约责任和由此造成的经济责任的赔偿,并就未按合同约定的安装、开通在5日内予以符合约定和规范的安装和开通。

对于第二条1、2、3、4项进行维修和更换,并根据每户具体情况进行相关规定的经济赔偿,第5项在10内整改完善完毕,并确保正常存活和使用。

对于第三条在给出合理解释的同时,重新核定收费标准,否则我方将集体不交物业管理费。

此《业主意见书》将委托业主代表亲自送达及挂号信两种方式送达你方。我方要求你方就以上三条涉及的内容,按照我方要求在最先送达之日起3日内就解决办法和期限做出书面回复。

我方将保留媒体曝光、政府部门投诉以及追究你方法律责任的权利,希望你方予以重视,积极解决。

本《业主意见书》尚未涉及事宜,我方将提出另外要求。

业主签字:

posted @ 2008-07-10 21:12 steady 阅读(600) | 评论 (1)编辑 收藏

转自:http://www.hfhouse.com/Forum/dispbbs.asp?boardID=141&ID=313451&page=1

现在已近午夜,却毫无倦意,不是不想睡(都是打工一族,明早还得早起辛辛苦苦赚生活费),而是睡不着。因为我已经出离愤怒了!

上班十年,节衣缩食,精打细算,只想能攒下一点钱,买套房子,好把远在老家辛苦了一辈子的年迈双亲接来安享晚年,尽一点赤子之心!

于是,07年,思量再三,相信了徽商集团和盛通置业的宣传,走近了城市风景的售楼部;

于是,本人十年积蓄 + 父母一辈子的积蓄 + 卖掉老家小城的房产,终于从KFS和售楼小姐的口中换回了一句承诺——08年6月底交房!

于是,我和我的亲人充满了希望,似乎美好的生活已经开始向我招手!

于是,我选择了信守承诺,安心等待!

于是,08年7月初,当谜底终于揭开的时候,我发现自己————很傻很天真!

墙面弯曲(有凸有凹),颇有流线型美感;

地面倾斜(高低不平),彰显不对称之美;

主卫客卫、墙顶墙体、水管自身,无处不漏;

从卫生间地面到过道墙壁,从主卧墙面到客厅四周,到处空鼓;

从厨房到卫生间,所有需要外接笼头之处均被深埋在墙体中等待我们业主将来挖掘;

至于防盗门关不上,窗户/门把手没装,插头面板没有、S弯管缺少、小区绿化。。。。。。我已学会视而不见!

这样的“房子”就是当初承诺的城市“风景”吗?

这样的“房子”符合交房条件吗?

这样的“房子”能够通过竣工验收吗?

换言之,一件大家可能花了毕生积蓄购买的昂贵商品,在质量明显严重不合格的情况下,能够做到强迫大家接受,并且大家不能拒绝否则就要罚款吗?

于是,事实再一次告诉我们,KFS能够做到!并且,它已经开始在这样做了!!

作为风景的业主,当下的我们,需要的不仅仅是生气、愤怒和失望,最重要的是,现在我们应该怎么办?!

posted @ 2008-07-10 21:02 steady 阅读(527) | 评论 (1)编辑 收藏
本帖转自:http://bbs.hefei.cc/viewthread.php?tid=2180695&extra=page%3D1

以前看到不平的事情,即使跟自己没一点关系的,只要我觉得有必要的,我都会发帖骂下。这次,请大家让我为自己自私一回,骂一骂欺负到我头上的开发商。
       去年,我家里人拿出了三代人的积蓄,在城市风景(长江西路888号)买了个小窝,从那时起啊我就日日盼,夜夜盼,希望早日能住进去,以至于每个月都要去工地上看看。(合同上约定是2008年6月30日交房
       我在2008年3月份就看出了问题,因为我所在的那栋楼根本就没人干活,一连好几个月都是如此,后来售楼部又接连几次通知要我去买停车位,我才明白,很可能是开发商资金链断裂了。紧张,不安。
        2008年5月30号,我又来到了现场,只见我的那栋楼,进度和几个月前看到的一样,相比以前的差别只不过有人在干活了。天啊,一个月内能赶完吗?!我那栋楼一楼还有的墙没砌,有的楼板没装,空着好大的洞。我把这担心传达给了售楼部。售楼小姐信心满满地说,没问题,绝对能交房。于是我继续等待。
         2008年6月22日,交房的前一周周末,我又去看了,楼板仍未装,墙仍未砌,阳台玻璃未装,窗户没装,售楼小姐仍是信心满满,我只好悻悻地回去了。
         而这天之后的这一周里,我几乎每天都打电话给售楼部,问他们有没有发收房通知书。他们说发了。我从周一等到周六就是没有收到
       2008年6月29号(收房的前一天)又去了趟,居然还有工人在我家里砌墙
        到2008年6月30号还没收到收房通知书,只好自己到售楼部看看了。先去自己的小窝看了下,不管是入户门还是房间里面的玻璃门,一个都没装,水电气一个都没通,窗户完全没装好根本关不上,窗户边上还露着塑料泡沫,客厅里还有水管露在外面,书房里还有电线铁管露在外面,两个厕所和卫生间都在往下滴水,但是看一看自己房子的水龙头还没装。我愤怒了,不,已经出离愤怒了!怒气冲冲地跑到了售楼部,看到了与我同样怒气冲冲的业主们。只有很少的业主收到了收房通知书,一问才知道,开发商故意把收信地址写得很模糊,不给你电话通知,想让你收不到不来收房,能拖多久就拖多久,然后就是你违约,他没违约。无耻啊无耻,房子搞的不成玩意,难道还想强行交房?!开发商后来的一席话让我更是气不打一处来,今儿你收也得收,不收也得收:只要房屋结构出来了你就可以收房了(可笑,你搭几根柱子,装几块楼板,我们就能入住了是吧?!)违约金是没有的(那签合同约定干嘛)7月份不管没收没收物业费是要交的。后来又得知,一级资质的物业长城物业已于最近换成了开发商新成立的三级资质的物业,收费不变(1.1/每平方),每个月还要多收40元的公共能耗费。天啊,真牛的开发商,真厚脸皮的开发商。又找了家验房公司查查还有什么问题,查出来以后吓了一大跳,密密麻麻地写满了验房单:1、房屋内有空鼓十多处;2、垂直度超标几处;3、房顶不平几处;4、空调插座不合要求几处;————————还包括我自己一眼就能看出来的问题,共计三十项。回到售楼部,看到售楼部黑板上贴的文件,怒火再次充满胸腔几乎要迸发出来,1、入户门的合格证书上一个防盗的字样都没有,只说是防火门,而合同上约定的是防盗门,这两者的价格相差一倍;2、居然真的还有竣工验收备案表,上面还有人签字了,在这里通报下他们。
监理公司是:合肥南巽建设项目管理咨询有限公司
总监是:卞鑫
我就想问问卞总监,这么多问题的房子,您是怎么验收合格的呢?您怎么就敢往表上签字的呢?水管暴露在外,那么明显,您就看不见吗?
还有更搞笑的事情,所有房子的验收日期都是2008年6月26号,而6月29日的时候有的房子的墙都还没砌好,您怎么就验收通过了?怎么一下子在一天之内把小区内所有的房子都验收了?

我人肉搜索了下这个总监:
序号 姓名 性别 聘用单位 注册专业1 注册专业2 执业资格证书编号 岗位证号
55 卞鑫 合肥南巽建设项目管理咨询有限公司 房屋建筑工程 0012350

这位总监总监了不少项目,可谓是经验丰富,如:
1、南巽创景花园项目总监卞
2、合肥市建设委员会


合建质安[2007]269号





合肥市2007年建设工程质量


监督执法检查情况通报

四、典型案例


(一)质量控制较好的工程


1、创景花园5#楼


建筑面积:13412m2,结构/层次:框剪/24层;


建设单位:创景物业公司;项目负责人:张保安


施工单位:浙江歌山建筑公司;项目经理:张权平


监理单位:合肥南巽监理公司;总监:卞鑫


工程质量评价:现场实物观感质量好,现场管理有序;施工、监理单位的质量保证体系运行良好;施工、监理资料齐全。

    卞鑫还是某次评选评的的优秀监理工程师,对于这个人我没什么好说的。
    如果是开发商伪造他的签名,我向他道歉,并将和他一起追究开发商伪造文件的问题;
    如果真是他的签名,他就是混蛋之极、胆大包天、不负责任,吃喝卡拿要的典型,趁早还是从监理界滚蛋!
    我们小区里并不是每栋楼都是这样,据说是有别的公司挂靠徽商集团建设的。合肥的那家公司就做的很好,不少业主都收房了,而我所在的楼,很不幸,听说是淮南的公司开发的,惨不忍睹,几乎没有业主收房!我们都在收房单上写上:问题很多,拒绝收房(写是因为怕开发商说我们没来收房,说我们违约)
    我们将近60户业主100多人已于2008年7月6日在小区内进行了集会,集体签名,选出了业主代表,并向开发商递交了定期整改、赔偿协议书,如果开发商再不出面处理,我们将诉诸法律和媒体!
城市风景业主维权在行动!

如果您是城市风景的业主,请顶下这个帖子,这是为您自己的未来考虑;

如果您是已经买房未交房的业主,请顶下这个帖子,这是您学习维权经验的机会;

如果您是已经即将买房未交房的朋友,请顶下这个帖子,这很可能是您将来要走的一步;

如果您是暂时不考虑买房的朋友,请顶下这个帖子,看我们如何跟开发商斗智斗勇!

谢谢诸位!

posted @ 2008-07-08 20:51 steady 阅读(1445) | 评论 (12)编辑 收藏
开发商安徽盛通置业在没有满足交房条件的情况下,就向业主发出了交房通知书,引起业主强烈反应。

7.6号,三期业主集体聚集小区,商讨维权方案,并集体签名授权业主代表代表维权

7.7号,业主代表得到的反馈:今天上午接到销售部电话,说是老总出差了,于是我们就找到高新区质检站并将业主意见书给了质检站,下午质检站的一个林质检员到城市风景现场了解情况,有开发商分管工程的副总和工程部经理陪同,看来几家的情况后,质检站承认房屋质量确实存在质量问题,并由工程部人员、质检员和业主代表开会协商。工程部表示会尽快进行修复。我方要求要求以开发商的名义书面就《业主意见书》逐条在明确时间内给予答复解决。工程部表示认可,并按照我们要求的期限,周三给予明确答复。
posted @ 2008-07-07 22:28 steady 阅读(942) | 评论 (15)编辑 收藏
  周末的时候,淘宝对后台又做出了一次较大的升级,主要是在用户体验方面的调整,其实淘宝今年以来,基本上每个月都会有这方面的调整,也说明了淘宝用户体验部门的成果了。
  第一次让我觉得有用的改动就是对收藏的调整,不用出现登录页面了,用一个弹出层解决了这些问题。前不久对评价的改动,让用户做出好评不需要点这么多按钮了。
  这次改动我感觉是对我买到或者卖出的东西等一系列功能做出调整,比如说可以直接在列表里面关闭项目了,也是一个弹出层解决的问题。同时,也让页面更加简洁清爽,当然同时也会伴随用户的不适应。
  其实我们更喜欢简单易用的系统,每次操作要输入很多或点很多都是很折磨人的,毕竟上网应该是简单,轻松的。Web 发展到现在,单纯的页面跳转与刷新越来越不流行了,Ajax 的真正价值开始被越来越多的网站开发团队理解与运用。
posted @ 2008-06-11 23:09 steady 阅读(631) | 评论 (1)编辑 收藏
今天在看荣登 Jolt 大奖的 The Art of Project Management,其中最让我深有感触的是这样一段话:
The simpler your view of what you do, the more power and focus you will have in doing it. If we can periodically maintain a simple view of our work, we can find useful comparisons to other ways to make things that exist all around us. There will be more examples and lessons from history and modern industries that can be pulled from, compared with, and contrasted against. This is similar to the concept defined by the Japanese word shoshin, which means beginner's mind, or open mind, an essential part of many martial arts disciplines. Staying curious and open is what makes growth possible, and it requires practice to maintain that mindset. To keep learning, we have to avoid the temptation to slide into narrow, safe views of what we do.

确实,最近已经很久没有太多兴趣去学习新的东西了,包括曾经非常有兴趣的 ruby,真想回到当年刚毕业的时候,用那样的热情,精神去学习。或许今天算是一个起点吧,毕竟很久很久没有做下来,好好的看一本书,好好的想着作者要告诉你的东西。

给自己开了个书单,好好努力,用 beginner's mind 去感受世界,感受前人的智慧。
posted @ 2008-05-26 14:27 steady 阅读(375) | 评论 (0)编辑 收藏
什么是 ESB(Enterprise Service Bus)?
对于这个问题,长期没有搞清楚,就连我自己也很难说清楚这到底这是个什么样的概念,我引经据典来大致的描述一下这个概念。

第一个定义来自于:O'Reilly 的 《Enterprise Service Bus》

The ESB concept is a new approach to integration that can provide the underpinnings for a loosely coupled, highly distributed integration network that can scale beyond the limits of a hub-and-spoke EAI broker. An ESB is a standards-based integration platform that combines messaging, web services, data transformation, and intelligent routing to reliably connect and coordinate the interaction of significant numbers of diverse applications across extended enterprises with transactional integrity.

An extended enterprise represents an organization and its business partners, which are separated by both business boundaries and physical boundaries. In an extended enterprise, even the applications that are under the control of a single corporation may be separated by geographic dispersion, corporate firewalls, and interdepartmental security policies.

另外一个定义来自于:维基百科的ESB定义
它是面向服务架构的实现。
它通常是操作系统和编程语言无关的;
它应能在Java和.Net应用程序之间工作。
它使用XML(可扩展标识语言)作为标准通信语言。
它支持Web服务标准。
它支持消息传递(同步、异步、点对点、发布-订阅)。
它包含基于标准的适配器(如J2C/JCA),用于集成传统系统。
它包含对服务编制(orchestration)和编排(choreography)的支持。
它包含智能、基于内容的路由服务(itenerary路由)。
它包含标准安全模型,用于ESB的认证、授权和审计。
它包含转换服务(通常是使用XSLT),在发送应用和接收应用之间转换格式,简化数据格式和值的转换。
它包含基于模式(schema)的验证,用于发送和接收消息。
它可以统一应用业务规则,充实其它来源的消息,分拆和组合多个消息,以及处理异常。
它可以条件路由,或基于非集中策略的消息转换,即不需要集中规则引擎。
它可监视不同SLA(服务级别合约)的消息响应门限,以及在SLA中定义的其它特性。
它(常常)简化“服务类别”,向更高或更低优先级用户做出适当的响应。
它支持队列,在应用临时不可用时用来保存消息。
它由(地理)分布式环境中的选择性部署应用适配器组成。

总的来说,ESB 提供了跨平台,跨部门,跨应用系统的服务整合的基础平台,就我们目前对项目的理解,我们或许还没有达到这个 level,我们提供的应该是个办公应用平台,除非我们确实会进行跨部门,跨业务的服务整合,那样我们真的是在做 SOA 了,那就有的折腾了。

不多说了,进入下一个主题 OSGi。
posted @ 2008-05-26 14:26 steady 阅读(411) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2008-02-26 08:56 steady 阅读(1559) | 评论 (3)编辑 收藏

绑定在淘宝上的 SaaS 的阿里软件网店版,应该还是会有一些高级卖家愿意每天花一块钱用的,里面确实提供了一些比较有用的功能,当然不足的地方也是非常的多。

先说好的吧:首先,E客服就是比较有意思的东西,解决了很多客服平台的问题,过去我们为两个项目做的在线客服,跟它比起来,还是有差距的。平常店里可以同时有几个人一起打理,而且不会出现一个旺旺多个人使用的情况,它用的是子帐号的概念,各人独立一块,互不干涉。还是很不错的东西。

打印快递单应该也是个比较有意思的功能,如果货物量大的话,这个功能绝对是不可少的,大大减小了人力成本。不过估计我现在还是用不上的。

商品定时上架是个很好的功能,就是针对淘宝设计的功能,如果熟悉淘宝搜索结果规则的人,会很好的去利用这个规则,让自己的货物在最佳浏览时间出现在搜索靠前的位置。而定时上架就很好的解决了这个问题,如果有效利用的话,绝对会让你的商品卖的更好的。

在说一些不好的吧:首页有个统计最热卖的东西,但是没有找到热卖产品的排名,这个东西应该是挺有用的吧,不过似乎没有提供。查看报表里面,经常会刷不出图片,估计是 IE 的 Cache 原因,不再重新加载图片了。进销存这个东西没有和销售报告结合起来,应该算是一个缺憾了,希望下一个版本能有更多的东西。不过,不知道下个版本要到哪年,上个版本似乎已经发布半年了。

From:谈谈阿里软件网店版
posted @ 2008-02-21 16:46 steady 阅读(800) | 评论 (0)编辑 收藏

卡巴斯基这个俄国人做的杀毒软件呢,一直比较彪悍,经常见到什么东西都一阵嘶吼,然后你正常使用的软件也就挂了,QQ啊,这样的主流应用也是经常在它的误杀范围内。

 对于开发人员来说,因为卡巴斯基更是会有诸多不爽的问题,下面列举一二,是我的惨痛教训,也和大家分享一下。

  1. SVN 问题:如果你使用 SVN 做配置管理的话,有时候 check in 代码会半天没有反应,如果这时候你把卡巴禁用,就一切正常了。
  2. IntelliJ IDEA 端口冲突问题:用 IDEA 启动 Tomcat 时,使用了 8080 或者 80 端口,经常会启动就报端口冲突,而端口绝对是没有被其他应用程序占用的,而在独立的 Tomcat 下运行没有出现这样的问题,把卡巴对这些端口的监控关闭就一切正常。

这两个问题都是比较郁闷的,卡巴斯基很强悍,却总是让人很无奈。

From:对开发人员不友好的卡巴斯基
posted @ 2008-01-29 10:18 steady 阅读(1956) | 评论 (7)编辑 收藏

Jolt Awards 是软件界的盛宴,被誉为软件界的奥斯卡,每年的 Jolt 中,能够看出软件开发领域的发展和未来的趋势,让我们来关注一下今年的大奖得主吧。 

上周 Summer 推荐 Beautiful Code 的时候,也顺便找到了今年的 Jolt Awards Finalists,接着榜单,闲聊一下。

General Books
  Beautiful Code Edited by Andy Oram and Greg Wilson O’Reilly
Geekonomics: The Real Cost of Insecure Software by David Rice Addison-Wesley Professional
Manage It!: Your Guide to Modern Pragmatic Project Management by Johanna Rothman Pragmatic Bookshelf
Myths of Innovation by Scott Berkun O’Reilly
Outside In Software Development by Carl Kessler and John Sweitzer IBM Press
Release It!: Design and Deploy Production-Ready Software by Michael T. Nygard Pragmatic Bookshelf
Technical Books
  Continuous Integration: Improving Software Quality and Reducing Risk By Paul Duvall, Steve Matyas, Andrew Glover Addison-Wesley Professional
Fuzzing: Brute Force Vulnerability Discovery By Michael Sutton, Adam Greene, Pedram Amini Addison-Wesley Professional
Head First SQL Your Brain on SQL—A Learner’s Guide by Lynn Beighley O’Reilly
The Rails Way by Obie Fernandez Addison-Wesley Professional
WPF Unleashed by Adam Nathan Sams Publishing
xUnit Test Patterns: Refactoring Test Code by Gerard Meszaros Addison-Wesley Professional

图书方面,看上去几乎是被 O’Reilly 和 Addison-Wesley 给垄断了,Pragmatic Bookshelf  也在其中占有了一席之地。图书中,最大的赢家应该是,Beautiful Code,我在国内某家被我批评过的IT书店上看到了挂上了期数的预告,名字叫《代码之美》,似乎有抄袭《数学之美》的嫌疑,第一次看到这么多作者一起写出来这么好的书,33 章的书,就包括了 33 个来自于不同领域的作者,共同创造了如此完美的代码,在 O’Reilly 的牵线搭桥下,造就了 Beautiful Code,如果有机会,我希望能由东南大学出版社出版这本书的英文影印版,让我们细细的品味。

Head First 的新书 Head First SQL Your Brain on SQL 也登上了 Jolt 的舞台,之前 Head First Design Pattern 和 Head First OOAD 是如此通俗的把面向对象的两个经典内容:设计模式和面向对象的分析与设计,聊家常一般的摆在我们的面前,精妙的内容组织,浅显易懂的语言,就连我们这些非常怕看英语的人看起来都毫不费力,不愧为大师级的功力。而这本新书料想也会给 SQL 的新手带来一种全新的体验吧。

Pragmatic Bookshelf 这个书系自从《Pragmatic  Programmer》 开始,就不断的扩大其影响。从程序员修炼三部曲中,告诉了我们版本控制,单元测试,持续集成这三个开发者的基本工具。随后的 Pragmatic  Ajax 把 Ajax 推到了大家的面前。当 Ruby on Rails 开始流行的时候,Programming Ruby 和 Agile Web Development with Rails 都在一版二版的洗礼中不断的升华,已经成为 RoR 开发的经典之作。这次的 XX It 系列又从软件项目管理角度来 Pragmatic 。我似乎看到过 Ship It 还有 Deploy It 这两本,或许也是这个系列里的吧。

The Rails Way 我一开始当成了 The Ruby Way,其实后者的风格我比较喜欢了,于是又套用了它的名号来了个 The Rails Way,虽然现在还没有拿到,我想这本书会给我们一些新意的。

Development Environments
  Alpha Five version 8 Alpha Software Inc.
CodeRush/Refactor! Pro Developer Express Inc.
IntelliJ IDEA JetBrains
Komodo IDE 4 ActiveState
NetBeans IDE 6 Sun Microsystems
QNX Momentics IDE 4 QNX Software Systems
Web Development Tools
  3rdRail CodeGear
Adobe ColdFusion 8 Adobe Systems, Inc.
Appcelerator Platform Appcelerator, Inc.
IntelliJ IDEA JetBrains
NetBeans IDE Sun Microsystems
RSSBus /n software

开发工具大奖上已经看不到了 Eclipse 的身影,而 IDEA 依然在榜单上活跃,而我也是一如既往的使用它,即便是在 Rails IDE 中,IDEA 凭借其 Rails 插件,加上它的基础,用起来还是相当的顺手,目前除了不能 Debug,我似乎没有其他不满的地方。

Netbeans IDE 在年末闪亮登场后,带来了一个更轻更小,更完整的开发工具包,而 Eclipse WTP 一个包动辄就是 2xxM,虽然功能很齐全,不过体积实在是有些过分了,并且没有一种 IDEA 的那种让人很爽的感觉。我没有用完整的 Netbeans 包,因为 Java Web 开发已经习惯了 IDEA + Eclipse 的组合,我只关注了一下 Ruby IDE,功能上来说,确实有其独到之处,不过在写代码上还不能达到非常流畅的速度。不过 Netbeans 在两年里就来了个咸鱼翻身,我们要说 Sun 很努力了。

Libraries/Frameworks
  Eclipse Modeling Project Eclipse
Guice Google Inc
JasperReports JasperSoft
Qt Jambi Trolltech
Spring Framework SpringSource
Zend Framework Zend Technologies

在开发框架上最活跃的依然是 Java 平台,这和 Java 平台一直以来保持的很好的开源社区是分不开的。EMF,Guice,JasperReports,Spring Framework 这几个一直都是 Java 领域最热门的开源项目。

Google Guice 在 Google 的天才程序员 Bob Lee 的创意中诞生了,采用了一种全新的依赖注入的方式,将效率提高了传说中的 100 倍,虽然对这个数据我不是太在意,而在 Spring 如此成熟的进入 2.0 后,却有一个后辈小生提出了全新的思路,而 Spring 2.5 也接受了这样的思路,调整了一些依赖注入的策略,在性能上有了不小的提高。

经营着 Spring 的 interface21 为了凸显其 Spring 的品牌,改名为 SpringSource,并且推出了一本《Spring In Production White Paper》,希望能够在企业应用中占有更大的份额。

作为 PHP 的领头羊的 Zend 在 Rails 推出后再也按耐不住了,PHP 一定要有一套官方的 Framework,而且它的特性要很像 Rails,于是 Zend Framework 诞生了,这在几乎没有框架概念的 PHP 中注入了一种新的活力,Rails 不光激起了 Java 世界的广泛关注,在无数个类 Rails 框架后面,Zend 从 PHP 官方的角度接受了 Rails 的思想,改善 PHP 的开发。而 Java 世界里,Grails 也伴随这 Groovy 1.5 的推出,伴随着 Grails 的第三个 RC 版,即将走到 1.0 版本。Rails 带给了 Web 开发无穷的活力。


聊聊 Jolt Awards 2008
posted @ 2008-01-12 22:23 steady 阅读(3754) | 评论 (3)编辑 收藏

  第一次用 Zoundry 客户端工具来发布博客,WordPress 还是不错的博客了,提供了 XML-RPC 方式的远程提交接口,我们可以比较容易的把我们的博客发布到 WordPress 上。

  老外对这方面的支持工作还是做的不错的,国内的同类系统往往只考虑到功能,好一点的考虑到性能,而在这些新技术带来的扩展性的增强上似乎没有太多的理解,虽然 WordPress 在功能上和国内的很多博客有一定的差距,但是人家支持插件,这样就可以让地球人都上来扩展一把。Eclipse 的插件风风火火的做了几年,现在人似乎没有不用插件开发的了。

  老外在 Web 2.0 中又很多好的思想,技术,拿到国内来就有点变味了,虽说国人在 Web 2.0 技术上跟进的速度还是相当的快,不过思想还是又相当的差距的。

  要好好学学人家做东西的思想,而不仅仅是技术。

posted @ 2008-01-04 16:42 steady 阅读(981) | 评论 (0)编辑 收藏

该文章被发布在我的新博客中:http://4think.cn/blog/index.php/archives/25

  市面上这么多的IM工具,每次打开的时候就要开上一堆,还不时的有个新的IM工具出来,加上一两个及其有吸引力的功能,然后又不得不装上,搞的每次开机以后总是要开上一大堆的IM,比如QQ啦,MSN啦,还有Yahoo,Google Talk,飞信,Skype,真的挺麻烦的。

  一年前的时候,突然听说 Yahoo 可以和 MSN 互通了,于是从此就没用过 MSN 了,也是对 Microsoft 歧视国内用户的一种不满吧,这么多IM工具,最不稳定的也最为常用的要属 MSN 了,虽然飞信这样“国”字号的软件似乎更加的不争气,就原谅他吧,谁叫他是咱最有钱的移动运营商呢。可以说,MSN 的掉线率是相当的高,登录速度也是惊人的,在公司内部传文字的效率呢更加不用说了,反正没有人走的快。不过据我们去过美国的一些同事说,MSN 在美国速度是非常快的,包括其下属的 hotmail,MSN Space,怪不得这么被推崇了,不过没办法,毕竟是在国内,属于不被重视的使用群体,大不了就不用了,于是机子里再也没有出现过 MSN,所有重要的好友都加到 Yahoo 里了。

  其实说来 Yahoo 也是个比较不争气的东西,功能嘛,没啥强的,不过吃内存的能力还挺强,印象中也就 Skype 可以和他有的一拼,不过好歹人家 Yahoo 还是比较重视中文用户的,起码光缆断的时候还是能用的,而且相关的本地化服务也还是有一定的可用性的,Yahoo的邮件提示是最为迅速的,基本上是新邮件来到5秒之内就得让你知道,这个功能还是挺体贴用户的,其实我的一些 IM 的一个重要作用就是 check email,比如说 Google Talk。Yahoo 的客户端程序其实是比较不稳定的,群聊功能是个杀手,一次领导通知事情,让大家开个会,结果一位老兄图方便,Yahoo 把大家全部加进来了,大家的机器全部死翘翘,只好 reset 重启,自此以后,这个功能再也不敢使用了,Yahoo 工具箱里有个看股市行情的插件,不过这个曲线也太不本地化了,中午休息的时间也画在上面,一条长长的直线,怎看都别扭。没办法啊,公司里唯一允许的 IM 工具,不得不装,也就不得不去忍受这些了。

  Google Talk 其实是我用的最多的,极为简洁,拥有我需要的主要功能,email 通知,语音,文本聊天,传文件(大家都喜欢装中文版的,没这个功能,所以也基本找不到人传文件),其实还有一点重要的就是所有聊天记录都会保存在 Gmail 里,在哪都不会丢失,也很连贯,这对于我们经常讨论需求的人就不会有上句没下句的了。也不用担心聊天记录留在本地泄密。另外还有一点,传代码的时候绝对不会变成一堆笑脸什么的。Google Talk 其实功能上是相当有限的,但是我却非常喜欢,简洁就是美了。

  下面隆重出场的是唯利是图、忘恩负义外加极端不安全的 QQ 了,如果不是这么多好友在里面,我是不会开 QQ 的,当然 QQ 作为国内用的最多的 IM 工具(其实叫他聊天工具更确切),QQ 还是有相当多的优势的,首先网络稳定性好,传文件速度快,有远程协助功能,语音质量也不错,可以看 IP(还不都是珊瑚虫的功劳,被忘恩负义的腾讯扼杀了),有群聊功能,也是最适合某些夜晚不甘寂寞的人寻找刺激的工具了,其他的功能我是不大能想到的了,更不用说去用了,所以嘛,QQ 对我来说,太大了,太花哨了,对公司来说也是的,基本上正规的公司,没有哪个不封 QQ 的,所以嘛,QQ 只能被远远的拒之于企业应用的门外,腾讯的 RTX 也就不是那么容易进入企业市场的,谁让你这么花哨,看了就不想好好工作了。

  Skype 这个东西嘛,对我用处不大,自从充值卡被封事件以后就不再常开了,开会的时候才会去用,毕竟多人语音聊天功能还是挺不错的。

  国外的大部分 IM 工具都开放互通了,包括 MSN 和 Yahoo,Google Talk 也在和 MS 谈互通的问题,国内的 IM 互通嘛,似乎完全不可能,国外那几家都不是靠 IM 吃饭的,腾讯就不一样了,如果不保持其 QQ 的占有率,疯狂的扼杀非“官方”的客户端,LumaQQ 这么优秀的跨平台解决方案也就被腾讯自己和谐掉了,最近对珊瑚虫下狠手也表示其在此方面的决心,呵呵,我的 QQ 从此不升级了。

posted @ 2008-01-02 11:27 steady 阅读(2004) | 评论 (4)编辑 收藏

每个人在开发的时候,都会根据自己的喜好选择一些好用的工具,当然,通过一些年头的积累,我自己也有了这么一些顺手的工具,就把这些还不错的东西拿出来和大家分享吧。

CyberArticle (网文快捕)

  我们在查看资料,或者遇到问题上网搜索的时候,经常会想把自己看到的一些好东西保存下来,以后需要用的时候可以找到,有人把东西复制下来保存成文本,有人用 Word 文档,也有人直接保存页面,这些方法固然是可以,不过以后找起来可就比较麻烦了。我们需要一个带分类的文档管理工具。

  在对一堆工具的筛选之后,我选中了 CyberArticle,也就是网文快捕,安装以后,在浏览页面时,IE 和 FF 的右键会出现保存全文,保存选中部分这样的选项,我最喜欢的是保存选中部分这个功能,毕竟我们并不需要一个网页中一些不相关的文字和图片。CyberArticle 可以完整的把文章内容或选中部分的内容保存下来,无论是图片或者其他什么的,都能较好的支持。在保存下自己喜欢的内容后,我们可以手工把这些内容分类,以后会比较容易的找到自己需要的东西。

  另外 CyberArticle 中比较有用的功能是生成电子书。我们在网上搜集到一堆某一类别的文章,为了与他人分享或者便于携带,我们可以把这一个独立的类别的内容导出成 CHM 或 EXE 版本的电子书。

  CyberArticle 可以到 http://www.wizissoft.com/cn/index.aspx 下载,强烈建议使用最新的 5.0 版(只要25块钱),旧的版本会有相当一部分的文章保存不下来。


链客中国,写文章也可以赚钱哦
posted @ 2007-11-29 10:59 steady 阅读(2058) | 评论 (11)编辑 收藏
    昨天看到新闻,IBM 在其网站上放出了 Lotus Symphony 的 beta 版,看上去有点 Office2007 的一套办公产品,最重要的是它是基于 Eclipse-RCP 平台的,如果说 IBM 让 Lotus 去做一个标准的 Windows 应用像 Office2007 到没有什么奇怪的,关键在于它是 Eclipse 平台的,IBM 在一个强大的 Eclipse 平台上,构建出了一个向 Microsoft 最核心产品叫板的应用,这大大的壮大了 Java 爱好者的威风。

    过去我们 Swing / SWT 做的东西似乎很难有直接面向普通用户的优秀的应用,这次 IBM 是代 Java 出了重重的一拳,Eclipse 平台不但是与 Microsoft 的 Visual Studio 叫板,甚至可以和 Office 叫板了。

    从另一方面来说,从 Lotus Symphony 的推出,IBM 进一步亮相了 Eclipse RCP 的高级 UI 组件,传统的 Eclipse 开发出的东西,千篇一律,没有太大的界面差别,但是 Lotus Symphony 上却不太容易让人联想到 Eclipse,除了看到启动画面上 build on eclipse 的只有,还有一些熟悉的菜单项,和 PlugIn 相关的内容才会发现,哇,这个酷酷的应用原来是 Eclipse 平台上的产品。

    当然 Lotus Symphony 并没有说是开源的,这些新的,酷酷的 UI 组件也并没有向开源社区开放,按照 IBM 最近几年的惯例,迟早是要捐出来的,但前提是先做几套东西,卖点钱再说,Eclipse WTP 的很多东西来源于 WSAD,很多 Eclipse 的插件也是来源于 Rational 的产品,只是 IBM 觉得没有什么商业价值了,才捐出来。

    其实我是非常希望 IBM 能尽快和大家分享 Lotus Symphony 的成功经验,也希望更多的 Eclipse 爱好者能够开发出更多强大的应用,特别是桌面级应用,让更多的人看到,Java 在成长,在进取。


---------------------------------------------------
顺便做个小广告 链客中国 www.linkedcast.cn 上线运行,欢迎广大 Blogger 使用


链客中国,写文章也可以赚钱哦
posted @ 2007-09-23 08:40 steady 阅读(1115) | 评论 (8)编辑 收藏
Java Web 应用似乎总有这样的情况,有事没事总是要在 URL 后面加上个 jsessionid,而且似乎不能使用配置的方式直接禁用 URL 传递 sessionid,这样,就比较容易造成安全性的问题,或者在浏览器地址栏里留下一堆很不好看的地址,在 Struts2 中,使用了 url 标签的所有链接,甚至 CSS, JS 这样的东西,都会加上 jsessionid,如何去禁用呢,搜索国内的相关文章,无功而返,询问我们过去的架构师,也没有做过,只好想办法去找国外的网站,找到了这样的一篇文章。

http://randomcoder.com/articles/jsessionid-considered-harmful

通过加入 Filter 的方式过滤掉 URL 中包含的 jsessionid,再重新包装 Response 返回给浏览器。

因为没有太多东西,就不多解释了,大家拿了用就可以了。

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Servlet filter which disables URL-encoded session identifiers.
 * <p/>
 * <pre>
 * Copyright (c) 2006, Craig Condit. All rights reserved.
 * <p/>
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * <p/>
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 * <p/>
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * </pre>
 
*/
@SuppressWarnings(
"deprecation")
public class DisableUrlSessionFilter implements Filter {

    
/**
     * Filters requests to disable URL-based session identifiers.
     
*/
    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
// skip non-http requests
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            
return;
        }

        HttpServletRequest httpRequest 
= (HttpServletRequest) request;
        HttpServletResponse httpResponse 
= (HttpServletResponse) response;

        
// clear session if session id in URL
        if (httpRequest.isRequestedSessionIdFromURL()) {
            HttpSession session 
= httpRequest.getSession();
            
if (session != null) session.invalidate();
        }

        
// wrap response to remove URL encoding
        HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(httpResponse) {
            @Override
            
public String encodeRedirectUrl(String url) {
                
return url;
            }

            @Override
            
public String encodeRedirectURL(String url) {
                
return url;
            }

            @Override
            
public String encodeUrl(String url) {
                
return url;
            }

            @Override
            
public String encodeURL(String url) {
                
return url;
            }
        };

        
// process next request in chain
        chain.doFilter(request, wrappedResponse);
    }

    
/**
     * Unused.
     
*/
    
public void init(FilterConfig config) throws ServletException {
    }

    
/**
     * Unused.
     
*/
    
public void destroy() {
    }

-------------------------------------------------------------------------------------------------
顺便做个小广告 链客中国 www.linkedcast.cn 上线运行,欢迎广大 Blogger 使用

链客中国,写文章也可以赚钱哦
posted @ 2007-09-08 20:13 steady 阅读(5655) | 评论 (4)编辑 收藏
在过去使用 Spring 整合 Hibernate 的时候,都是用这样的配置方式。

<bean id="sessionFactory" lazy-init="true"
      class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    
<property name="mappingResources">
        
<list>
            
<value>resources/icustomer/Contact.hbm.xml</value>
            
<value>resources/icustomer/Customer.hbm.xml</value>
        
</list>
    
</property>
    .
</bean>

每当需要加入一个新的 VO 时,我需要过来修改配置文件,来引入对新的 VO 的支持。

现在我使用的时候,是这么配的:
<bean id="sessionFactory" lazy-init="true"
      class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    
<property name="mappingLocations">
        
<list>
            
<value>classpath:resources/**/*.hbm.xml</value>
        
</list>
    
</property>
    .
</bean>

做项目开发的时候,就再也没有改过配置。
posted @ 2007-08-17 13:58 steady 阅读(1916) | 评论 (5)编辑 收藏
因为有一个 Struts2 网站发布,需要整合一个论坛来使用,公司的一个项目过去曾经整合过一个英文论坛,但似乎不能满足我们的需求,需要找一个成熟稳定的中文论坛,与我们的系统结合。

最终选择了 Discuz 作为我们的论坛系统,主要是因为它提供了一套可用的 Passport API,来直接与我们现有系统进行整合。

下面摘录 Discuz 文档中的内容来说明整合原理,随后的几篇中,将详细描述具体的整合过程。

假设已设置如下变量或参数

  • 挂接 Discuz! Passport 的应用程序假设为一套 PHP 语言编写的 CMS 系统
  • Discuz! 的 URL 为 http://www.myforums.com
  • 应用程序的 URL 为 http://www.mywebsite.com
  • 应用程序的注册页面为 http://www.mywebsite.com/register.php
  • 应用程序的登录页面为 http://www.mywebsite.com/login.php?action=login
  • 应用程序的退出页面为 http://www.mywebsite.com/login.php?action=logout

开启通行证后的用户登录流程

  • 如果用户在论坛点击“登录”,则转向到事先设置好的应用程序登录页面(http://www.mywebsite.com/login.php?action=login),并在登录页面的 URL 中加入参数 forward(加入 forward 后的链接例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在登录后将用户导向到指定的 URL。

  • 应用程序收到此请求后,按照惯例生成表单,并增加一个表单变量,将 GET 方式传递过来的 forward 参数通过表单进行传递。

  • 用户在应用程序的表单中填写登录信息,并提交到应用程序的登录验证程序。应用程序验证用户提交的用户名和密码的合法性:

    • 如果不通过:提示用户名密码错误,要求其返回上一页重新填写。

    • 如果通过,需要进行如下操作:

      • 设置自身 Cookie 或 Session,使得应用程序自身处于登录状态。

      • 检查表单中是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中。

      • 通过 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,将登录请求传递到论坛进行处理。其中 auth 用来将用户信息与资料以特定的格式,加密传递给论坛,forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证前面两个变量的有效性。auth、forward、verify 格式与结构将在后面进行说明。


  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 auth 和 forward 变量是否合法,如合法则继续,否则终止。

    • 将 auth 根据既定算法解密,并还原成数组,数组的内容与格式将在后面进行说明。根据数组中的内容,检查此用户是否存在。如存在,则根据上述数组中的内容 UPDATE 论坛中相应的用户资料。如不存在,则使用数组中的信息 INSERT 到论坛用户资料表中。

    • 论坛设置 Cookie 或 Session,使得论坛自身处于登录状态。

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。


  • 至此,登录流程结束

开启通行证后的用户退出流程

  • 如果用户在论坛点击“退出”,则转向到事先设置好的应用程序退出页面(http://www.mywebsite.com/login.php?action=logout),并在登录页面的 URL 中加入参数 forward(例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在退出后将用户导向到指定的 URL。

  • 应用程序收到此请求后,清除自身 Cookie 或 Session,使得应用程序自身处于非登录状态。

  • 检查是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中

  • 通过 header('Location: http://www.myforums.com/api/passport.php?action=logout&forward=http://yyy&verify=zzz') 的方式,将退出请求传递到论坛进行处理。其中 forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证 forward 变量的有效性。forward、verify 格式与结构将在后面进行说明

  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 forward 变量是否合法,如合法则继续,否则终止。

    • 清楚论坛的 Cookie 或 Session,使得论坛自身处于非登录状态。

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。


  • 至此,退出流程结束。

开启通行证后的用户注册流程

  • 如果用户在论坛点击“注册”,则转向到事先设置好的应用程序注册页面(http://www.mywebsite.com/register.php),并在注册页面的 URL 中加入参数 forward(例如 http://www.mywebsite.com/register.php?forward=http://www.myforums.com/index.php),用于在注册后将用户导向到指定的 URL

  • 应用程序收到此请求后,按照惯例生成表单,并增加一个表单变量,将 GET 方式传递过来的 forward 参数通过表单进行传递

  • 用户在应用程序的表单中填写注册信息,并提交到应用程序的注册验证程序。应用程序验证用户提交信息的完整性和合法性:

    • 如果不通过:提示其问题所在,要求其返回上一页重新填写

    • 如果通过,需要进行如下操作:

      • 将用户资料插入到应用程序自身用户数据库中

      • 设置自身 Cookie 或 Session,使得应用程序自身处于登录状态

      • 检查表单中是否提交了 forward 变量,如有,则意味着注册请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛注册后能够跳转回到应用程序中

      • 通过 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,将注册请求传递到论坛进行处理。其中 auth 用来将用户信息与资料以特定的格式,加密传递给论坛,forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证前面两个变量的有效性。auth、forward、verify 格式与结构将在后面进行说明


  • Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:

    • 根据 verify 判断 auth 和 forward 变量是否合法,如合法则继续,否则终止

    • 将 auth 根据既定算法解密,并还原成数组,数组的内容与格式将在后面进行说明。根据数组中的内容,检查此用户是否存在。如存在,则根据上述数组中的内容 UPDATE 论坛中相应的用户资料。如不存在,则使用数组中的信息 INSERT 到论坛用户资料表中

    • 论坛设置 Cookie 或 Session,使得论坛自身处于登录状态

    • 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL


  • 至此,注册流程结束

    本部分中,加下划线显示的部分,是需要对您的应用程序进行更改的部分,事实上,这部分更改会非常容易和方便。

posted @ 2007-08-11 17:30 steady 阅读(3258) | 评论 (3)编辑 收藏

Reschedule
rescheduleJob(String triggerName, String groupName, Trigger newTrigger)

在进行 reschedule 操作的时候,我们通常只需要修改 Trigger 的时间,这时候我们只需要重新 new 一个含有新的 Schedule 时间的 Trigger 对象,reschedule 一下就可以了。

Unschedule
unscheduleJob(String triggerName, String groupName)

进行 unschedule 的时候,我们只需要知道名字和 group 就可以了。

进行 Schedule 操作前后,Database 中的相关数据都会被更改,在执行 unschedule 或者该 schedule 已经执行过,数据库中的 trigger 信息都会被删除。

posted @ 2007-08-03 09:00 steady 阅读(1645) | 评论 (4)编辑 收藏

Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具,最近因为项目的需要,简单的用到了 Quartz 的一些功能,对项目中使用 Quartz 的一些问题做简单的记录。

在 Quartz 的应用中,我们用到了以下的一些东西,ScheduleFactory, Scheduler, Job, JobDetail, Trigger,简单说明一下他们的用途。

SchedulerFactory 是 Scheduler 的工厂,我们可以从中获得受工厂管理的 Scheduler 对象。

SchedulerFactory scheduleFactory = new StdSchedulerFactory();
Scheduler scheduler = scheduleFactory.getScheduler();

Scheduler 是一个计划集,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。
我们可以从 SchedulerFactory 中取得 Scheduler。

接口Job是每个业务上需要执行的任务需要实现的接口,该接口只有一个方法:

public interface Job {
    public void execute(JobExecutionContext context)
        throws JobExecutionException;
}

我们可以在里面定义我们的 Job 执行逻辑,比如清除过期数据,更新缓存等。

JobDetail描述了一个任务具体的信息,比如名称,组名等等。
JobDetail jobDetail = new JobDetail("SayHelloWorldJob", Scheduler.DEFAULT_GROUP, SayHelloWorldJob.class);
在上面的构造方法中,第一个是任务的名称,第二个是组名,第三个就是实际当任务需要执行的回调类。

Trigger顾名思义就是触发器,Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是:
1.你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件
2.当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。

目前的Quartz实现中,存在两种Trigger,SimpleTrigger和CronTrigger,SimpleTrigger用来完成一些比如固定时间执行的任务,比如:从现在开始1分钟后等等;而CronTrigger(没错,和unix的cron进程的含意一样)用来执行calendar-like的任务,比如:每周五下午3:00,每月最后一天等等。

在我们项目中,都是一些固定时间的 Job,所以只用到了 SimpleTrigger。
Trigger trigger = new SimpleTrigger("SayHelloWorldJobTrigger",Scheduler.DEFAULT_GROUP,new Date(),null,0,0L);
这个构造方法中,第一个是Trigger的名称,第二个是Trigger的组名,第三个是任务开始时间,第四个是结束时间,第五个是重复次数(使用SimpleTrigger.REPEAT_INDEFINITELY常量表示无限次),最后一个是重复周期(单位是毫秒),那么这样就创建了一个立刻并只执行一次的任务。

但我们定义好了 JobDetail,Job,和 Trigger 后,就可以开始 Schedule 一个 Job 了。

scheduler.scheduleJob(jobDetail, trigger);

这条语句就是把job和Trigger关联,这样当Trigger认为应该触发的时候就会调用(实际上是Scheduler调用)job.execute方法了。

scheduler.start();
千万别忘了加上上面的语句,这条语句通知Quartz使安排的计划生效。

关于execute方法的参数JobExecutionContext
JobExecutionContext就和很多Context结尾的类功能一样,提供的运行时刻的上下文环境,JobExecutionContext中有Scheduler,JobDetail,Trigger等很多对象的引用,从而当你在execute方法内部须需要这些对象的时刻提供的便利。

在项目中,我们把需要执行的 Job 相对应的一些信息放在 JobExecutionContext 中,在 Job 执行的时候可以调用。

jobDetail.getJobDataMap().put(userid, id);

在 Job 中,我们可以拿到相关的 Context 信息:

jobExecutionContext.getJobDetail().getJobDataMap().getInt(userid);

JobDetail和Trigger的name和group
Scheduler实例对应了很多job和trigger的实例,为了方便的区分,Quartz使用name和group这两个特性,正如你想向的一样,同一个group下不能有两个相同name的JobDetail,Trigger同理,同一个Scheduler下不能有两个相同group的JobDetail,Trigger同理,JobDetail和Trigger的完全限定名为:group + name

为了让服务器重启以后,我们的 Scheduler 信息仍然不丢失,我们通常采用数据库持久化 Scheduler 的信息。
DBScript 在 Quartz 的下载包中的:quartz-1.6.0\docs\dbTables 下,选择自己使用的 DB 相应的 Script 导入数据库就可以了。
在应用中,我们需要配置一个 quartz.properties 才能正常使用 DB。我们可以在 quartz-1.6.0\examples\example10 中找到该文件的样例,稍作一些修改,就可以放到自己项目源码的根目录下使用了。

设置 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 即可启用基于 JDBC 的 Quartz 信息持久化。

根据项目情况设置以下配置信息:
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/myapplication
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password =
org.quartz.dataSource.myDS.maxConnections = 5

但是光设置了 Database 不够,我们还需要在 Application 启动的时候自动启动 Scheduler 才行,我们只需要简单的写一个 Servlet 的 Listener 并在 web.xml 中声明该 Listener ,在 Servlet 容易启动的时候,Scheduler 就开始自动执行。

public class ScheduleStartListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        try {
           scheduleFactory.getScheduler().start();
        } catch (SchedulerException e) {
           // write log
        }
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        try {
           scheduleFactory.getScheduler().shutdown();
        } catch (SchedulerException e) {
           // write log
        }
    }
}

在 web.xml 里面加入以下配置:
<listener>
    <listener-class>org.agilejava.scheduler.ScheduleStartListener</listener-class>
</listener>

以上简单的记录了在项目中关于 Quartz 的一些应用,如果有什么新的使用心得,会在后面继续加入的。

posted @ 2007-08-02 16:28 steady 阅读(3532) | 评论 (4)编辑 收藏
     摘要: 2007年上半年开放式基金资产净值规模前20基金公司
2007年上半年股票型基金净值增长率前20位
2007年上半年积极配置型基金净值增长率前20位  阅读全文
posted @ 2007-07-02 22:12 steady 阅读(2024) | 评论 (1)编辑 收藏

前几天的快速下跌中,华夏大盘没有像它在涨的时候那样成为领涨的基金,每次总要在倒数几名里面找它,而且这几天的跌幅总是紧挨着广发小盘,这又是为何呢?这几天华夏大盘并没有像它名字一样跑赢大盘,反而远远的落后于大盘。

在晨星网上的基金风格箱来看,华夏大盘主体是投资中盘型股,从华夏大盘这几天的变化幅度来看,比较接近中证指数的中小盘指数,这样来看,华夏大盘显然不是真正的大盘。

或许华夏大盘可能持有了有很多都是上半年被炒高的题材股,或许这样才能够使之成为上半年领涨基金的一枝独秀,成为疯长期少数能跑赢大盘的基金。但随着 530 的巨大打击下,题材股都被拦腰截断,小盘股的日子变的不那么好过了。

华夏大盘下半年还能继续领涨吗?我看有点玄。

posted @ 2007-07-02 22:06 steady 阅读(351) | 评论 (0)编辑 收藏
    通过银基通购买基金是相当的方便的,可选余地也是非常的大,但是享受的优惠会比较少一点,能买到的基金数量也比直销要少一点,另外能做的操作也比直销要相对少一点,比如说转换,在银基通中,有的基金就不能互相转换。

    首先说一下优惠情况,一般标准情况下,股票类的基金申购费用大约是 1.5%,在招行银基通上购买基金,费用就是 1.5%,没有优惠,最近在工行上购买基金可以享受 8 折优惠,也就是 1.2%,建行是什么情况就不得而知了,没有办证券卡,进不去,在这一点上,建行有这么一点小小的优势。

    招行银基通上购买基金基本都是 1000 元起的,设立的门槛非常的低,每次递增也是最少为 1000 元,而工行的入门门槛就高了不少,最低要 5000 起,对于我等工薪阶层,要一次性的凑齐 5000 元才能去工行买基金,实在是不爽的,其每次递增的额度也是 1000 元。

    另一方面来说,也是说银行的问题,对于招行来说,大部分网点都配有自动存款机,每次买基金去存款就不用这么麻烦,不用在柜台上排队了,另外在银行下班以后也可以在存款机上进行存款操作,这样就不用赶着银行上班的时候才能去存钱了,当然也会碰到机子不能用的时候,有一次晚上十点去存钱,连续跑了两个网点都发现存款机钱已存满。但是对于工行建行的绝大多数网点就必须在上班时间跟着大家后头排队了。

    用了两篇的篇幅把银基通购买基金的一些情况简单的总结了一下,后面准备说一下用网银直接在基金公司的直销站点上购买基金。
posted @ 2007-07-01 13:58 steady 阅读(453) | 评论 (1)编辑 收藏
    相信能看到我这篇文章的人如果是基民,相信你的首选购买基金的方式会是网银,虽然没有用过所有的网银,但就我用过的几个网银来乱弹一些自己的看法。我在这里说的都是股票型或者配置型基金。

    我用过的网银包括,招行,建行,工行。网银上都直接有代销基金的功能,招行叫做银基通,里面可以买到超过 250 种以上的基金,建行的网银因为必须要办证券卡才能买基金,所以实在是懒得去办这个破卡,工行上代销的种类也算是不少,但相对招行来说,还是有相当差距的。

    在网银上购买基金的申购确认和赎回到帐时间也各自不同,从确认时间上招行是 T+1 天,其他银行没有试过,而赎回到帐时间各自有所不同,招行的一般是 T+4,在 T+4 天上午 9:00 后可以到帐,工行和建行是 T+5 天,好像农行,中行,民生,交行都是 T+7 天。

    据说建行的网银账户和证券卡账户是独立的,从网银转到证券卡上的钱第二天才能够转回网银账户,而且放在证券卡账户上的钱是没有利息的。而招行的网银与投资账户之间的转账是随意的,并且投资账户上的钱是有利息的。

    关于网银要说的话还是很多的,想睡觉了,哪天有空的时候继续补上。
posted @ 2007-06-30 23:30 steady 阅读(527) | 评论 (0)编辑 收藏

其实本来不该把这些东西也写到这里来的,不过也懒得把自己的 Blog 同时放在几个不同的地方了,实在是麻烦,于是,便在这里乱弹一些生活方面的内容。

这半年来中国股市实在是太火了,牛气冲天的飞奔直冲 4300 点,没料到被一道名为“印花税”的紧箍咒套住,便是有哪怕通天的本领,也牛不起来了。开始了震荡行情,这一来二去的,就看到了周围的人被深度套牢,很多人看我买了基金也便开始问我如何如何,其实嘛,没有太多的东西,选对了,买了放着就不管了。

其实选基金还是比较有一些讲究的,我一开始选的几个基金就因为表现不佳已经被我抛弃了,第一个:南方稳健,Google 一下,此基得奖无数,自从我买了以后基本没怎么涨过,除去申购赎回费用一个月给我赚了 2%,实在是没什么意思,卖了它,后来才得知,原来过去让此基频频得奖的基金经理已经投靠建信了,现在倒是把建信优选搞得很火。此次购买基金犯了一个错误,对基金经理不了解。

随后买了易方达平稳,又是一个带稳的,所以走势一直很平稳,一个月下来,也不过收入 5%,转为易方达策略成长,此基在晨星上排名五星,不过经过一个月的震荡,整体表现还不错,入账 13%,但是晨星最新的评级表明,易策已经只是个三星基金了。

我最为满意的要数南方绩优成长了,虽然不足一年,晨星上没有排行,涨幅前几也不见其踪影,但是在六月份这样的巨幅震荡的行情下,一个半月仍然能够净增 16%,还是相当的满意的,而且昨日处在排行榜第一位,选得没错。

虽然这里都是 Java 方面的讨论,如果遇到基金方面的同好,可以切磋一番,大家互惠互赢。

posted @ 2007-06-28 23:22 steady 阅读(403) | 评论 (4)编辑 收藏

上一篇中我们说到了,如何使用 HttpClient 抓取所需要的数据,接下来介绍一下如何对这些数据进行处理。基本的处理原理是使用正则表达式进行内容的匹配。

为了便于处理,我们首先把使用 HttpClient 抓取到的数据做一些简单的处理。

第一步要做的就是删除回车符,当然我不会写含有回车符的正则表达式才会这么写的,当然如果您有更好的方法也可以不用这么做。

代码很简单:

1protected String removeEnter(String response) {
2    response = StringUtils.replace(response, "\r\n""");
3    response = StringUtils.replace(response, "\n""");
4    return response;
5}

接下来就可以使用正则表达式来对所抓取的内容进行匹配了:

正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式,它描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。正则表达式在字符数据处理中起着非常重要的作用,我们可以用正则表达式完成大部分的数据分析处理工作,如:判断一个串是否是数字、是否是有效的Email地址,从海量的文字资料中提取有价值的数据等等,如果不使用正则表达式,那么实现的程序可能会很长,并且容易出错。对这点本人深有体会,面对大量工具书电子档资料的整理工作,如果不懂得应用正则表达式来处理,那么将是很痛苦的一件事情,反之则将可以轻松地完成,获得事半功倍的效果。

在这里,我使用了 Jakarta-ORO 作为正则表达式工具来进行匹配。

Jakarta-ORO是最全面以及优化得最好的正则表达式API之一,Jakarta-ORO库以前叫做OROMatcher,是由Daniel F. Savarese编写,后来他将其赠与Jakarta Project,读者可在jakarta.apache.org的网站下载该API包。
因为在这里我们不需要用到太多正则表达式的知识,仅仅是简单的用用而已,所以几行简单的代码就可以解决问题:
protected String match(String response, String template, int index) {
    Perl5Util engine 
= new Perl5Util();
    String name 
= null;
    
if (response != null{
        
if (engine.match(template, response)) {
            name 
= engine.group(index);
        }

    }

    
return name;
}

第一个参数 response 表示抓取到的页面源码,第二个参数 template 表示我们预先设定的模板,第三个表示第几个匹配。返回的结果是匹配成功的 group 中的内容。

于是我们可以这样的调用它:

String template = "/(沪综指)</font></b></a> <span id=\"STK1\">(\\d{4,5}\\.\\d{1,4})</span>";
String name 
=  match(response, template, 1);
String index 
=  match(response, template, 2);

注意一下,我们正则表达式前后都有 "/"。
另外,我们用() 括起来的部分表示我们要匹配的内容,所以这里 name 可以匹配到 沪综指,index 可以匹配到大盘的点数。 

该匹配对应于: http://web7.jrj.com/homev1/StockIndex.htm
为了防止页面以后打不开了大家找不到,我把其中相关的匹配部分的页面源码也发出来:

<href=javascript:ShowImg('000001',2) target=_self><b><font color=#000000>沪综指</font></b></a> <span id="STK1">3914.20</span> <span id="STK2" class="c1"><img src=/HomeV1/images/down.gif width=8 height=8>164.40</span> <href=javascript:ShowImg('399001',1) target=_self><b><font color=#000000>深成指</font></b></a> <span id="STK3">12882.17</span> <span id="STK4" class="c1"><img src=/HomeV1/images/down.gif width=8 height=8>701.53</span> <href=javascript:ShowImg('399300',1) target=_self><b><font color=#000000>沪深300</font></b></a> <span id="STK5">3858.52</span> <span id="STK6" class="c1"><img src=/HomeV1/images/down.gif width=8 height=8>181.96</span> <b>香港恒生</b> <span id="STK7">21938.22</span> <span id="STK8" class="c3"><img src=/HomeV1/images/up.gif width=8 height=8>232.66</span> <b>道琼斯</b> <span id="STK9">13414.48</span> <span id="STK10" class="c1"><img src=/HomeV1/images/down.gif width=8 height=8>13.25</span> <b>纳斯达克</b> <span id="STK11">2612.02</span> <span id="STK12" class="c3"><img src=/HomeV1/images/up.gif width=8 height=8>6.67</span> 
<div id="indexdata"><object id="STKData" width="0" height="0" classid="CLSID:333C7BC4-460F-11D0-BC04-0080C7055A83" viewastext><param name="FieldDelim" value="F"><param name="DataURL" value="/HomeV1/text/StockIndex.htm"><param name="UseHeader" value="true"></object><input type="hidden" id="STKValue" datasrc="#STKData" datafld="a" name="STKValue"></div>

因为我不是为了介绍正则表达式而写这篇文章的,所以对正则表达式不会做太多的介绍,如果大家对正则表达式有兴趣或想进一步了解的话可以参考:

JAVA中正则表达式的应用
http://www.ibm.com/developerworks/cn/java/l-regp/part1/index.html
http://www.ibm.com/developerworks/cn/java/l-regp/part2/index.html


另外因为为了抓取其他东西,代码已经被我改的面目全非了,暂时就不方便贴出来了,请大家谅解,如果大家有什么疑问的话可以和我联系,我会尽量说明清楚的。
posted @ 2007-06-28 22:58 steady 阅读(1761) | 评论 (2)编辑 收藏

    最近股市大牛,相信这里的不少朋友都在炒股,当然上班时间老是开着网页看股市或是盯着红红绿绿的专业股票软件是总是担心被周围同事看到的,但又不时的想着大盘是涨了还是跌了,自己的股票又是如何呢。

    于是用 Java 写了一套简单的股市信息跟踪的小程序,Console 的,用于抓取相应的股市信息并显示到 console 中,谁也不会想到这个东西会是用来看股市的吧。

    这套小小的程序用到了几个非常简单的技术,HttpClient 和 正则表达式。程序功能非常简单,找到含有股市数据的页面,使用 HttpClient 抓取下来,通过正则表达式匹配自己需要的内容,在 Console 上打印出来。

    准备花两篇文章简单的介绍这个小系统中的实现细节,当然这只是简单的介绍,其实我们再稍微用点其他的技术,可以做出更多更实用的小工具。比如我就写了个小爬虫,把某个基金网站上的基金净值数据爬来了,足足有10W条,供我做基金形势分析之用,拿到这些原始数据,再动用一下自己的头脑,再配合一些方便的工具,比如 Excel,我们便可以用实际数据去辅助投资理财。

        首先我们来简单的介绍我们用到的第一个工具,HttpClient。

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
    以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自动转向
支持 HTTPS 协议
支持代理服务器等

HttpClient 可以在http://jakarta.apache.org/commons/httpclient/downloads.html下载

HttpClient 基本功能的使用
GET 方法
使用 HttpClient 需要以下 6 个步骤:
1. 创建 HttpClient 的实例
2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址
3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
4. 读 response
5. 释放连接。无论执行方法是否成功,都必须释放连接
6. 对得到后的内容进行处理

根据以上步骤,我们来编写用GET方法来取得某网页内容的代码。

根据这样的过程,我们便可以写出一个简单的抓取页面的方法,该方法返回抓到的页面数据。传入的参数是页面的 URL。

protected String getURLResponse(String url) {
 try {
  HttpClient client = new HttpClient();
  GetMethod method = new GetMethod(url);
  int returnCode = client.executeMethod(method);
  String response = null;
  if (returnCode == 200) {
   response = EncodingUtil.getString(method.getResponseBody(), "gb2312");
  }
  method.releaseConnection();
  return decode(response);
 } catch (Exception e) {
  return null;
 }
}

HttpClient 是一个很实用的工具,用它,我们可以做很多和 Http 有关的事情。
大家可以参考: http://www.ibm.com/developerworks/cn/opensource/os-httpclient/ 来初步了解 HttpClient 的功能。
或是去找找 Jakarta.Commons.Cookbook 或者 Jakarta.Commons.Online.Bookshelf,上面介绍了包括 HttpClient 在内的很多 Apache Jakarta Commons 项目,相信合理使用,会让你事半功倍的。

下一篇我们将介绍一下如何用正则表达式处理我们抓取到的数据。

posted @ 2007-06-21 22:11 steady 阅读(1897) | 评论 (5)编辑 收藏
     摘要: Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成
1.Java虚拟机提供了Java调试的功能
2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试  阅读全文
posted @ 2007-06-18 16:20 steady 阅读(789) | 评论 (0)编辑 收藏

最近在把在 tomcat 5.5 上开发的项目 deploy 到 JBoss 4.2 上时,在操作一段时间就会出现 java.lang.OutOfMemoryError: PermGen space,开始以为是代码中存在死循环的地方造成这样的问题,但是后来发现,出问题的地方都是随机的,并不是某一处造成这样的问题出现,怀疑是内存泄露,通过增大 heap 内存的方法来尝试,依然不行,但是同样的问题却并没有在 tomcat 中出现过,难道是 JBoss 的问题?

在网上做了一番搜索得到一些相关的内容。

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法,在 run.bat 中加入:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。

另外,如果 heap 内存不足出现 java.lang.OutOfMemoryError: Java heap space 时,可以通过 -Xmx512m 指定最大 heap 内存来解决这样的问题。

posted @ 2007-06-17 20:13 steady 阅读(16742) | 评论 (7)编辑 收藏

JBoss 4.2 GA 已经发布有一段时间了,主要还是一些 bug fix 已经一些新的包的加入。感觉比较爽的是解决了过去不太好用的一些地方。

过去在用 JBoss 4.0.5 的时候一直被 Log 的问题困扰,如果在自己的项目里加入 log4j 和 common logging 的话,必然会出错,所以我们不得以,必须通过一些调整手段来处理这样的问题,也就是每次在 tomcat 下调试的应用,需要改点东西才能 deploy 到 JBoss 上去,但使用了 4.2 以后就没有这样的问题了,在 tomcat  下用的包直接放过去,没有做任何的修改就可以正常使用了。

因为我项目用的是 commons-lang 2.3 而 JBoss 4.0.5 用的是 2.1 每次使用 commons-lang 2.1 里面没有的方法时,就会出现 NoSuchMethodException,最后只好把 JBoss 下所有的 commons-lang 的包用 2.3 的替换掉,而 4.2 已经没有这个问题了,2.3 已经可以正常使用了。

默认的 JBoss 4.2 我只能用 localhost 访问,不能用 IP 地址访问,后来发现,需要修改 jboss-4.2.0.GA\server\default\deploy\jboss-web.deployer\server.xml 把 Connector 下面的 address 改成对应的 IP 或者 0.0.0.0 就可以用 IP 访问了。 

后面附上了 Release Note 中的一些内容。

This is the final release of JBoss Application Server v4.2.0. JBoss AS 4.2 is a stepping stone from JBoss 4.0 to JBoss 5.0. It combines a lot (but not all) of the exciting new features of JBoss 5, but based on the stable 4.x MicroKernel architecture.

Highlights

    * JDK5 is *required* to run JBossAS 4.2.x. The decision was based on the fact that JDK1.4 is phased out and the reality that a lot of people like Java Annotations support and want to combine EJB3 and JBoss Seam components with JBossAS. JDK6 is not formally supported yet, although you may be able to start the server with it. JDK6 support will come with JBossAS 5.x.
    * JBoss EJB3 is now deployed *by default* in JBossAS 4.2.x The fact that we base on JDK5 makes our life easier in this regard, meaning we don't have to maintain jdk5 code retro-weaved for jdk1.4 runtimes, and we can include by default components that require jdk5 to run.
    * JBoss Web v2.x is the web container in JBossAS 4.2, an implementation based on Apache Tomcat that includes the Apache Portable Runtime (APR) and Tomcat native technologies to achieve scalability and performance characteristics that match and exceed the Apache Http server. In the absence of the native libraries in the JBoss classpath, JBoss Web falls back to the standard non-native connector mode. The native libraries need to be downloaded and installed separately.
    * JBoss Transactions v4.2 is the default transaction manager for JBossAS 4.2. JBoss Transactions is founded on industry proven technology and 18 year history as a leader in distributed transactions, and is one of the most interoperable implementations available. The JTA version of JBoss Transactions included with the server provides for fully recoverable transactions. For distributed transaction support the JTS version of JBoss Transactions will need to be used. Furthermore, it is always possible to fall back to the legacy JBossTM fast in-memory transaction manager implementation, if necessary.
    * JBossWS is the web services stack for JBoss 4.2 providing Java EE compatible web services. It has been upgraded to v1.2.1.GA
    * JGroups/JBossCache were upgraded to the latest releases. The server is already configured to support channel multiplexing, when it becomes available.
    * JBoss Remoting was upgraded to the latest stable 2.2.x version. This was done in order to align dependencies with the thirdparty libraries required by the new JBoss Messaging, which means that, if you want, you can replace the default JBossMQ messaging provider with JBoss Messaging, without having to revert to a scoped deployment.

posted @ 2007-06-07 10:09 steady 阅读(2718) | 评论 (1)编辑 收藏

其实 Confluence 的破解并不算难,不过在网上不是太容易找到直接能用的方案,小试了一把,发现最主要的是要处理一个 atlassian-extras-0.7.20.jar 的文件,com\atlassian\confluence\page 这下面有一个 Key.page 文件,其实这就是密钥文件了,破解的一般方法就是自己生成一个自己所知道 Key 的密钥文件,并替换掉原来的,再用这个已知的 Key 生成自己需要的密码。比 JIRA 要稍微复杂一点了。

附件里附上一个弄好的东西,直接替换已经安装的 lib 下的 atlassian-extras-0.7.20.jar 文件,然后用 keygen 生成 key 就可以用了。

下载地址见:http://www.agilejava.org/space/?1/action_viewspace_itemid_188.html

posted @ 2007-01-29 08:51 steady 阅读(2051) | 评论 (0)编辑 收藏

    新的一年开始,按理说要对去年的什么东西做一番总结了,当然总结很多了,这次先总结一下 JSF 了,毕竟这对我来说是今年最主要的技术方向,对它也算是比较熟悉了,虽然没有非常深入的去研究它,但从一年多的使用和理解来说,还是有不少自己的心得的,在新的一年到来之际,把这些东西记录下来,重新记起这个让我欢喜让我忧的 JSF。静观这一年 JSF 的发展,没有太多的兴奋,也没有太多的欢喜,更多的是平静,与同一时间大红大紫的 Ajax 和 RoR 相比,JSF 带给我们的更多是平静,静的让人心里发慌,上半年可以说还是稍有一些波涛了,而随着月份的数字越来越大,波涛是越来越小了。   

    可以说各大厂商在互相妥协让步的基础之上,把 JSF 实用化的实现版本的重任交到了 Apache Myfaces 项目上,而 Oracle 也将其 ADF Faces 的实现捐给了 Apache,而现在我们可以见到的 JSF 实现也主要就是 Myfaces 了,当然 Sun 自己也有一套实现,当然这只是一种不够健壮,并且功能有限的实现版本,一般不会拿来做正式的项目的。刚过完年 Myfaces 1.1.2 和 Tomahawk 1.1.2 正式发布,这是过去 Myfaces 1.1.1 的一个 bug 修复版本,离上一个版本已经有半年左右的时间了,而项目组的同事们也在与 Myfaces 1.1.1 的 bug 斗争了半年才用到这个新的版本。随后的 Myfaces Core 1.1.3 / 1.1.4 则在几乎一个月内发布,而 1.1.5 和 Tomahawk 1.1.4 则至今没有动静,虽然由 Myfaces 每次发布带给我们的 new feature 已经不是那么的多了,但是还是期盼新的版本能够给我们带来新的惊喜。

    五月份的时候 JavaEE 5 最终标准发布了,JSF 1.2 终于被正式提上了日程,这是一个对过去标准的一个修复版本,修正了上一个标准中的诸多问题,比如 JSTL 兼容性问题,还有一些细节性的改动,都是过去在 JSF 1.1 标准中非常折磨人的问题,但新的 1.2 标准依赖于 JDK 1.5,依赖于一系列新的 JavaEE 5 的 API,比如 Servlet 2.5, JSTL 1.2 而这些新的 API 也是在紧锣密鼓的开发中,所以 Myfaces 1.2 的开发进程也一直很慢,因为其中出现的问题不光是 Myfaces 自己的问题,或许还有 Tomcat 6 的问题,或是其他的问题。而另一方面 Sun 也发布了一个 JSF 1.2 的实现版本,是由 JSF 1.2 的标准的主笔领导开发的,按照我对于 Sun JSF 上个版本的表现,我对于这个新的实现也不抱有太多的希望,或许它更多的只是一种象征了,象征着 JSF 1.2 的正式推出。

    开源领域的 JSF 相关的项目发展缓慢。Myfaces 在一年内没有给我们带来太多的惊喜。曾经做为黑马出现的 JSF 扩展框架 Shale 至今还没有给大家带来一个满意的答复,一直以 develop 版本发布出来给大家尝鲜用,虽然慢慢的在前进,但是却很难带给大家什么惊喜,或许会被人逐渐的淡忘。而去年年底由 Oracle 捐给 Apache 的 ADF Faces 也是至今没有太大的动静,同样作为兄弟项目的 Struts 2 从提出到现在也有一年了,还没有能提供一个正式的版本给我们用,作为 Apache 的项目,这样的发布速度,确实很让人不能满意,而作为另一个大型的开源组织 Eclipse,则在一个个 Milestone 下有条不紊的向前推进,不断蚕食着别人所占据的地盘。

    作为 JSF 整体应用平台一个重要的部分,第三方组件库的发展有不小的突破,但是真正的应用度似乎不是很高,这一年内出现了很多优秀的商业,开源的组件库,除去上面我们提到的 Myfaces Tomahawk, Oracle ADF 之外,还出现了 ICEFaces, BackBase,WebGalileo Faces,另外在 .Net 领域的组件提供商 Infragistics 也通过收购发布了 NetAdvantage for JSF 2006 这样的组件库。另外一直在 JSF IDE 上有所作为的 Exadel 公司也在 JSF 组件上插上一手,一方面发布了其开源的 JSF 框架 Ajax4JSF 另一方面在其基础上提供了一个商业的 JSF 组件库 VCP,这样的方式确实有一套,可以同时抓住两方面的市场。另一方面国内也出现了像金碟这样基于自己 Apusic Application Server 的开源 JSF 组件库,是一件值得我们国人骄傲的事情,不过由于其只能够运行于 Apusic 上,使其应用面受到了不小的限制。

    让我们再来看看这一年 JSF 相关 IDE 在今年的作为了,在 06 年春节期间,一些支持 JSF 的 IDE 像赶集一样不断的推出来,先后有 MyEclipse 4.1 GA,Sun Java Studio Creator 2, Oracle JDeveloper, BEA Workshop Studio 3.0,在这一段时间推出。MyEclipse 和 BEA Workshop 是 Eclipse 的插件,而 JDeveloper 和 Creator 是基于 Swing 的,不过随着时间的推移,大家真正在用的 JSF 开发工具也主要就是 MyEclipse 和 Workshop,不过 MyEclipse 在 JSF 上想和 Workshop 拼,还需要一些时日了,另外在九月份正式发布的 IntelliJ IDEA 6.0 也开始支持 JSF 了,当然是用其独特的方式去支持,虽然不提供图形化的所见即所得的开发方式,但由于其 IDE 内部各个部分间完美的组合,使得其在写代码的感觉上要远远超过的其他竞争者,这也正是独立 IDE 和插件 IDE 一个重要的功能区别。

    纵观 06 年的 JSF 的发展历程,我还是对 07 年的 JSF 的发展很期待,希望 Myfaces 基于 JSF 1.2 的实现能够尽快的推出,也能够有更多更好的开源组件库的出现。

posted @ 2007-01-05 09:22 steady 阅读(2202) | 评论 (6)编辑 收藏

    昨天看到《精通EJB3.0》的中文版出来了,虽然早就在预料之中了,不过多少还是有一点想法的,终于第一本 EJB 3.0 的书正式出来了,对目前 EJB 3.0 的追逐总归是有了点方向,但我仍然感觉,EJB 3.0 不可能像 EJB 2.0 那样火了,Java 世界已经进入了多元化时代,Spring 已经逐步的蚕食了 EJB 说占有的份额,用其简单灵活的配置吸引了无数人的眼光,从另外一方面来说,标准的东西毕竟是标准,从制定到实现的周期比较长,如果中间出现了新的需求,一些问题,都需要等到下一个标准中去实现,而开源的就比较灵活了,有问题可以随时调整,所以会带给大家更为 agile 的感觉,不过对于大公司大项目而言,他们并不希望这样的灵活性,他们需要的是风险小,稳定,所以 EJB 3.0 对于一些大型的企业应用来说依然需要的是 EJB,因为有 IBM 和 BEA 这样大公司的支持了,不过自从五月份 JavaEE 5 规范正式定稿,这两大公司都没有拿出真正的 EJB 3.0 的产品出来,倒是 JBoss 在标准出来后很快就拿出了可用的产品,这样也可以看出来,IBM 和 BEA 没有像过去几年对于 EJB 2.0 那样的重视了,他们关注的是 SOA 的市场,毕竟 SOA 在 EAI 方面比 JavaEE 强了很多。

    对于分布式对象领域,EJB 3.0 还是有着不错的竞争优势的,毕竟这是他的传统优势,在群里面和大家聊天的时候,寒江也提到过用 RCP + EJB 3.0 作为方案,其实这也是一套不错的应用方案。

    EJB 3.0 比 EJB 2.0 确实要轻了很多,但并没有给我们太多的惊喜,因为 EJB 3.0 给我们带来的大部分新鲜都已经被 Spring 和 Hibernate 捷足先登了,我个人也是比较喜欢 Spring 和 Hibernate 来做项目,毕竟用起来会更加的灵活,更加的强大,特别是新版的 Spring 和 Hibernate 同时都支持了 JPA 的标准,又一次的在 JavaEE 应用上和 EJB 3.0 展开了下一轮的竞争,一切都好,就看你怎么选择,我选择的是 Spring + Hibernate,或许更加熟悉一些又或许更加轻量,更加 agile。

posted @ 2006-12-15 12:41 steady 阅读(1344) | 评论 (0)编辑 收藏

    一直从dearbook创办起就在 dearbook 买书直到现在,已经成为了钻石VIP会员了,经历了 dearbook 发展中的种种,不过说起来 dearbook 的服务确实不像其标语中说标榜的"第二书店,第一服务",从我这么多年和他们打交道的经验来说,服务确实很难让人满意。

    过去一开始的时候,都是采用在网上选书,然后邮局汇款,发邮局包裹的方式,效率很低,也很麻烦,每次总是要往邮局跑两次,最大的问题是,网上列出来的书,往往是不一定有货的,有一次买书,选了一堆书最后发现就一本书有货,最后拿到手的只有那一本书,很是郁闷,这样就余下了一些钱在 dearbook,然后又用这些钱继续去买其它的书,最后在升级会员的时候,这些余款购买的书又没有记入积分中,升级的时候就差了这么几分,最后催了好几次才把自己会员资格提高。

    随着和当当网合作以后,付款和收货方面确实有很大的改善,付款直接用网上银行,直接送货上门,都大大的提高了我买书的兴趣,不过 dearbook 网站系统很不争气,频频出现问题,首先发现一个明显的 bug 就是在收藏夹里删除一些书籍的时候,收藏夹就变乱了,都是一些莫名其妙的书,再打开一下这个页面就好了。接着是在和 CSDN Passport 整合的时候,收藏夹里的书彻底丢光了,而这时候没有人告诉我怎么回事。

    在与当当网的合作中dearbook 的积分系统也频频出现问题,当当网是用 Email 账户登录的,dearbook 积分系统也是用 Email 账户登录的,当我修改了当当网的 Email 以后,dearbook 积分系统也换成了新的 Email,但原有 Email 对应积分没有转到新的 Email 帐号上来,打电话去问,答曰,没有提供合并积分的功能,于是一堆积分就泡汤了。

    dearbook 和当当网的价格几乎就没有同步过,并且和自己网站的一些横幅广告的也不符,有一次人邮的书全场七折,随便打开页面进去看,几乎没有一本书是打七折的。
 
    dearbook 的到书时间也是比较慢的,比如最近的 Webwork in Action,我问过译者,已经出版了,并且在 China-Pub 上已经有了,但过了好几天 dearbook 才上架。

    最近积分比较多,在 dearbook 换了两本书,最后收包裹的时候,只收到一本书,觉得奇怪,打电话去问,才把第二本书给重新寄过来,浪费了我几分钟的电话费

    这次 dearbook 又心血来潮的要把 D币积分转换为 C 币,因为过去在两个Email 账户上都是有积分的,所以想转换到同一个账户上,结果当我在 CSDN 上修改了 Email 地址后,却发现我过去的积分就消失了,很是郁闷。昨天发了邮件,今天打了电话,到现在也没有人给我答复,看了一下账户里的 C 币,还是不对。

   还有就是 webmaster@dearbook.com 这个邮箱,发过几次邮件,从来没有回音。不知道这个公布在网上的联系邮箱到底起的是什么作用。
 
    以上所描述的东西,都是我在 dearbook 这三年来遇到的一些情况,很多细节并没有一一罗列,也没有带有个人的感情色彩,只想说明,dearbook 的 “第二书店,第一服务”这个口号似乎只是在叫叫而已。
posted @ 2006-12-07 22:32 steady 阅读(1687) | 评论 (8)编辑 收藏

关于敏捷问题

周末听 rocket 介绍了一些来自 thoughtworks 关于敏捷的一些思想,同时也引发了大家的一些思考和讨论。从一种角度来看, Agile 体现了一种软件开发最根本的问题,就是由人在一定的时间内开发出高质量的软件,Agile 更加注重人在整个活动里的作用,而传统的瀑布模型中,似乎更加注重文档等,也就是我过去所在的公司,一切开发都由文档驱动,在这样的情况下,团队中每个人都是可以被替代的,从某种意义上来说,降低了软件开发的风险,但是效率却很难提高。而 Agile 注重的一个方面就是 pair,通过拉近人与人之间的具体来加快信息在团队中的流转速度,使信息像水流一样源源不断的流动,这样在 change 发生时,能够得到更快的响应,而瀑布模型则需要慢慢的由文档传播开来,传递速度和面都比较有限。

虽然 thoughtworks 给了我们一个极具诱惑的 Agile 果子,某种意义上来说是建立在他们公司利益基础上的,真正的去做 Agile 需要更加清醒和理智的想问题。Agile 是一种实践的方法论,需要大量实践和经验才能真正的去理解它,另外一方面,从传统的开发方式转型至 Agile,多多少少都会有过去残留的痕迹,而这些看不见的痕迹,可能会暗暗的抹杀 Agile 最初承诺的效果。

Agile 是一种好东西,某种意义上,资本家从开发人员手里榨取了更大的价值,这是建立在效率提高基础之上的,但它却散发着无比的诱惑,或许大家希望自己少写一些文档,或许大家厌倦了瀑布模型的流程,或许。。。。

posted @ 2006-11-30 08:38 steady 阅读(631) | 评论 (0)编辑 收藏

    这里我们要将 Tapestry 与其它主要的 Java Web 框架做一番比较,包括 Struts,JSF。

    Struts 是一个 Action 方式的 Web 框架,所有的请求直接对应了相应的 Action,我们需要通过一些相应的技巧性处理才能把我们在页面上的 Click,Value Change 等转换到后端对应的 Action,抽象程度显得不够高,并且这样会使 Struts 在处理一些较为复杂的页面时配置过多,造成开发和维护上的繁杂。另外 Struts 默认使用的 Tiles 模板框架使用了 <jsp:include> 方式的拼装页面技术,并且在每个页面都需要配置,这样的话,又增加了不少的配置量。在Struts中,经常需要使用标签库通过 EL(Expression Language)来显示组件ActionForm中内容,这就涉及到一个结合的问题,标签库是别人写的,而且 Struts 在这方面并没有确定的标准,如何才能让自己的组件库和现有的组件库很好的结合,难度和麻烦就体现在这个结合点上。

    JSF的视图层开发的基本思路和Struts差不多,只不过换了不同标签库,也需要标签库+组件的结合思考,不过因为组件这里是通用组件,没有什么限制,并且遵循了一个共同的标准,所以这样比Struts要轻松一些。JSF 提供了一套完整的生命周期和组件标准,我们很容易的为其定制一些组件和使用现有的组件库。另外JSF采用了事件驱动的方式,同一个页面对应的多个 Action 请求会比较直接的通过 EL映射到后端对应的 Java 方法上,从而大大减少了复杂页面的配置量。但是在默认情况下,JSF 每个页面的都需要配置其单独的导航,如果页面导航复杂的话,配置还是不少的。JSF 在默认情况下并没有集成模板引擎,但是开源的 Facelets 模板引擎提供了类似 Tapestry 的模板方式,从另外一种方式简化了 JSF 的开发。JSF 采用了 HTML 页面保存组件树的机制,页面的所有组件和组件状态被序列化到页面中或者 Session 中,这样的话,如果在页面上 Javascrīpt 通过修改 DOM 的方式修改页面的组件,会导致页面和组件树不一致,导致 JSF 无法正常工作,但是可以通过 Ajax 方式向服务端发出更新组件树的请求,但这样需要走完 JSF 整个生命周期,显得较为笨重,所以从架构上来看,JSF 在处理页面问题上不够灵活,也不够 Ajax 化。

    Tapestry使用了组件库的概念替代了标签库,没有标签库概念,这样就没有标签库和自己的组件需要结合的问题,都是组件的使用,组件中分Tapestry标准组件和自己定义的组件,这也是接触了JSP体系的人学习Tapestry面临的一个思路转换。这样极大的减小了页面修改而带来的修改难度。同为事件驱动的框架,在配置上 Tapestry 有着和 JSF 类似的优势,我们只需要简单的在 XML 文件里配置事件和后端方法的对应关系,或者使用 OGNL 直接在页面中与后端方法建立关联。在页面导航上,Tapestry 是根据监听器方法的返回值而确定,这样就省去了页面导航部分的配置。Tapestry 的模板技术天生就是其优势所在,这样的方式将前台页面的制作和后台业务系统的开发完美的结合在一起。Tapestry 因为没有 JSF 这样的组件树绑定的方式,就能够比较容易的和 Ajax 绑定在一起,目前开源的 Tacos 组件库就提供了很多这样的组件,并且整合了 Dojo Toolkit 使得我们开发页面中有了更多好用的组件,并且只需要很简单的配置工作就可以使用功能强大的 Web 组件和 Ajax 功能。

    另外,JSF/Tapestry不只是支持HTML,也支持多种客户端语言如WML或XUI等。

posted @ 2006-11-22 14:20 steady 阅读(1416) | 评论 (1)编辑 收藏

    虽然看起来两者似乎没有什么联系,但是看起来 工作流 的一些概念和状态图有着惊人的相似之处,或许是我过去对 UML 的理解太少了,而对 UML 的理解有仅限于 Class Diagram 和 Sequence Diagram,而且仅仅是一些粗浅的认识,而在和 Sze Hung 老大以及 james 讨论问题的时候,也经常遇到状态机的概念,或许是我在这方面太过于薄弱了。今天在 dearbook 定的 UML User Guide 2nd 也到了,这本凝聚了 Rational 三巨头的心血之作中贯彻着这样的思想。希望能够从中吸取更多精华吧。

    很多粗人都常常认为 UML 只是画图的东西,三两页就可以讲完的东西,何必弄这么多呢,还印出 n 多本书,简直就是骗钱了。其实说来,UML 难道仅仅是一种图形工具吗,它凝聚了更多更深刻的 OOP 的概念,在各种各样的应用中才发现,原来 UML 比我开始想想的要丰富的多。

    看过一些人在网上的评论,才发现,其实人民邮电出版社和机械工业出版社的书其实并不是太差了,只是机械的纸实在是说不过去,在我书架上放的一堆书中,原来清华大学出版社的书是最差的,无论从纸张,从排版,从翻译,因为有康博这样被骂死也还要出来招摇撞骗的所谓翻译团队。近些年来,一些出版社都开始建立了一些自己的图书品牌,比如说电子工业出版社的“博文视点”,比如人民邮电出版社的“图灵系列”,我个人感觉其中的书的选题和印刷都还不错,虽然也会有一些比较烂的作品出来了。

posted @ 2006-11-17 08:54 steady 阅读(738) | 评论 (1)编辑 收藏

  今天看了一篇很有意思的文章, http://www.blogjava.net/uiiang/archive/2006/10/30/77993.html ,介绍了种种项目中的编码的恶习,其中很多的东西看起来真的是很搞笑,比如趴在Tab上睡着了那个,用中文做变量名的,还有 if(condition) a  else a 那个也比较搞笑,算是夸张了点。

  不过想想看,自己一直都在算是比较正规的软件企业,编码规范还是有一定的要求的,不会出现这么搞笑的问题,不过有些问题还是会经常的犯,比如说,又一次看一个同事写一个方法写了 1500 行,我立刻让他改,最后精简代码,分开写,也算是减少到可以接受的程度,另外一个恶习就是复制代码,很多开发人员自身都是不怎么会写代码的,做开发就是找过去相识的,复制,粘贴,改,所以会出现一堆比较搞笑的问题,于是,错误便不是自己犯的了,人家写错了,自己也就抄错了,我在第一次参加 Code Review 的时候就碰到这个情况,我自己的东西都是自己手工写的,出现了一些问题,被大家指出来了,其它人写的东西都是抄来抄去,发现问题都不是自己的,因为改过去的代码需要上面授权,还有一堆测试要重做,所以看大致是可以用的也就蒙混过关了,造成了越来越混乱的代码。

  其实说来要把代码写的更好一点没有想象中那么难的,凡事从小做起,从点滴做起,慢慢的把一些好的东西变成自己的习惯,重要的是要积累,而不是放任自流,多去看看人家著名的开源项目,看看人家代码是怎么写的,多去和自己的比较,然后善于用一些 Audit 工具评估自己的代码,让自己对自己的代码中出现的问题有一个更明确的认识,然后慢慢的去改变自己的习惯,其实从长远角度来说对自己有很大的好处的,起码自己的编码能力提升了,基础更加稳固了,有能力去胜任更高级的工作,不然,天天复制别人的代码,自己又天天只能写出来一些不符合规范的代码,而自己又天天不去想不去问,一直这样下去,开发能力还能提高吗?

  其实我还是很喜欢一本书《代码大全 2nd》,今年上半年才出来的中文版,里面针对我们开发的时候出现的问题给出了很多规范和解决方案,我会经常抽空去看看这本书,然后想想自己该如何去改善自己的开发习惯,去写出更好的代码,另外就是用一些 Audit 工具去针对自己的代码做出一些评审,比如 CodePro,另外我们一些同事在 Maven 上用一些插件对 CVS 上的代码做出 Audit 并发布在项目站点上,这些都是不错的手段了。

  其实说来最重要的还是自己的态度,工具,好的方法都不能转变对于开发恶劣的态度的。

posted @ 2006-10-30 16:40 steady 阅读(1721) | 评论 (6)编辑 收藏
     摘要:   阅读全文
posted @ 2006-10-26 14:01 steady 阅读(2029) | 评论 (0)编辑 收藏
     摘要: 这几天突发奇想,过去通过一些对 Navigation 的实现来省去了 JSF Navigation 的配置,现在又有新的想法了,能不能在 face-config.xml 中连 Managed Bean 都不要配置了呢,答案是肯定的,并且在实践中也得到了证明。  阅读全文
posted @ 2006-09-05 10:16 steady 阅读(3560) | 评论 (2)编辑 收藏
    花了近一周的时间,把 iCustomer 大改了一番,其实说来也没有特别大的变化了,修改的东西只不过是一些过去的一些bug和网上朋友们的一些建议,其实重点还是放在改 bug 上,另外就是 Order 这部分系统的领域模型重构,Order 与 OrderItem 之间的关联由原来的 one-to-many 改成了现在的 composite-element 方式,参考了 Hibernate Reference 的内容,从理解上来说这样的关联方式也是比较合适的,有过去的松散的关联方式换成了现在这样紧密的关联方式。通过前面近两个月对 Hibernate 概念更深层次的思考与理解,现在在处理起这样的问题都变得轻松了很多,没有那么多的问题会很让我在开发中卡壳,而且是那种一卡就卡上个好几天不能解决的。当这样的关联关系复杂了以后,Hibernate 的功效才更好的发挥出来了,我们拿关联对象就不用再写一堆方法去拿了,需要的时候去取,Hibernate 就会自动的取帮你取好。实际上这次改 Order 部分时候,很多情况下都是在删过去的代码,过去的方式真的太复杂了,全部要自己手工一个个的去拿,简直就是把 Hibenate 当 SQL 用,从思想上来说,这显然是不正确的。

    另外想想看,如果在一个项目中用起 Hibernate 或者使用同样方式的 EJB3 Persistence 真的会存在着太多的风险了。Hibernate 走的是方式上的变革,我们必须去用新的思想去考虑问题,而不是仅仅用用它而已,我们需要从对象建模的角度就开始考虑 ORM 的存在,以对象为中心的方式去组织业务逻辑,而不是以表为中心去组织,刚开始用 Hibernate 的时候,大部分情况还是在考虑表如何如何的,但是用了一段时间以后,发现这样的方式和 Hibernate 真正的核心思想相差太大了。所以说要正确的去用 Hibernate 决不是看了一两本书,做了几个简单的 CRUD 就可以的了,需要在许多复杂关联中经受考验才可以,而一个要很好的去用 Hibernate 的项目,一定是要有这样经验的人去做才可以的,几个刚翻几页书,知道怎么用就去拿 Hibernate 做项目的人真的还是远远不够的,这种情况在 iCustomer 0.1 版本中表现的非常突出,混乱的配置和关联关系,让使用了 Hibernate 后,代码未减反增,我努力在 0.2 的版本中做出一些修改了,当然只是比原来好了一些,离真正理想的情况还是有差距的。当然有空我会把这样的一些经验和大家分享一下,让大家在学习 Hibernate 上少走一些我曾经走过的弯路了。

    又用回了 JSF,开始发现这样的方式真的有很多的好处了,而且在 JSF 的使用和经验上有一些积累,用它来建立一个不大的项目经验应该是足够的了。Backing Bean 的方式比 Action 的方式配置文件的数量上要减少了很多,说能够减少到原来的 1/4 甚至更多都不为过了,因为我们一般情况下一个 Backing Bean 对应一个页面,只需要配置一处,而一个页面中如果有很多操作的话 Action 方式就需要配置很多了,比如一个查询页面,查询需要一个 Action,查看查询的一个记录需要一个 Action,删除记录需要一个 Action,修改一条记录又需要一个 Action,算起来正好 1:4,是不是省了很多配置呢,在结合扩展的 Navigation 方式,连 Navigation 都不需要配置了。配置文件真的少了很多了。

    用到了一个 Tomahawk 组件中独有的 forceId 属性,不能说有多爽,但是可以让你在写 JavaScript 的时候省了好一些代码了,过去一个组件的 id 生成出来就是 form:cid 的形式,而用了 forcdId = "true" 后,生成出来的 id 就是你在组件的 Tag 中实际定义的值,当然用的时候也要小心了,千万不能重复,包括同一页面中不能重复,也包括一个页面中包含另外一个页面时不能重复 。
posted @ 2006-08-21 11:15 steady 阅读(1766) | 评论 (1)编辑 收藏

    连续三天做了三场 Share Session,讲了一些关于系统开发的三个层的东西,Web Layer / Business Layer / Persistence Layer 分别以各个层面最优秀的技术为例和组内组外的同事们分享了一些我关于这些技术的理解。

    虽然说讲的还不是很好了,但是这三天却给了我很大的提高,不仅仅是技术上面,更多的是在一种表达能力方面的。可以说是第一次真正意义上的上台讲东西了,因为面对的不光是同组熟悉的同事,还有很多不是太熟悉的,还有几位老大,甚至在最后一次讲JSF的时候,大老板还进来坐了一会,压力还是挺大的,虽然要讲的东西已经在之前在脑子里演练无数次了,但是要想把自己想的东西和别人讲清楚,的确不是那么容易的事情了,当发现下面的同事满脸的迷茫,就得赶紧换一个角度来说明问题,不过还算过得去的是,自己并没有太多的紧张了,虽然是第一次正式的在台上讲东西,面对面的对着大家,不过自己要讲的东西心里还比较有底,心里比较踏实了,于是也就没有太多的紧张了。

    通过三天对各个方面的技术的介绍和总结,其实也不知道大家真正能理解多少,因为太多东西没有经过实践是不会有太深刻的理解的,虽然有些东西当时是听懂了,但是却不会深深的刻进你的脑子,时间一长就忘记了。三天里,总结了这一年来我对 Java Web 开发的几个方面的理解了,虽然这一年学到了很多很多,但还有太多太多的不了解了,有些东西当自己看的时候觉得自己了解,但是当需要把这个东西和别人分享的时候,却发现自己有太多太多的不知道了。

posted @ 2006-07-22 10:29 steady 阅读(700) | 评论 (2)编辑 收藏
    似乎很久没有写些什么了,因为最近想的太多,做的太少了。
    第一次发现 Hibernate 原来并不是自己过去想像的那样简单,它很复杂,很强大,却能让你最后要做的事情变的很少,虽然它带来了如此多的好处,但如果想真正的用好它,必须有一个非常熟悉它的人在你的团队里,这样才能够最大的发挥它的巨大威力。虽然每个人都可以花不多的时间去用会 Hibernate ,但却只有很少的人能够灵活的驾驭它,让它为你服务,因为它同传统的关系数据库可以说是截然不同的两条路,从玩 SQL 走过来的人,多多少少会受到它的限制,而变得不易接受ORM,像我就是一个典型了,当得到高手指点的时候,发现过去的很多想法偏离轨道还是挺远的了,幸亏有人指点,得以走回正道。
    作为 J2EE 中另一个骄傲,Spring 也以它的独特观点改变了 J2EE 的世界,过去用 Spring 只是稍微理解了它的 IoC 的思想,和简单的使用了它的 Transaction 管理功能,最近细看了一下它的 AOP 感觉震动还是挺大的。基于 Interceptor 的 AOP 真的是很好用,也很强大,甚至于说,它会是一种改变 Java 开发模式的一种动力了,虽然只是刚开始看看,没有什么深刻的理解,但却也能够有一些很大的感触了,或许 AOP 在目前还是刚刚起步,或许太多的人没有接受它理解它,AOP 的应用层面还是比较低了。
posted @ 2006-07-11 12:11 steady 阅读(2330) | 评论 (7)编辑 收藏

用 Hibernate 碰到一个很傻的问题,在 iCustomer 中有这样的关联,有服务记录,该记录会与 Customer 关联,当时为了在不需要的时候不在 VO 里 new 出 Customer,用了这样的写法。

public Customer getCustomer() {
 if (null == customer) {
  customer = new Customer();
 }
 return customer;
}

这样看似没有问题,当使用到 Customer 的时候才会创建该对象。但是每次却会报告脏数据错误,其实最重要的是我忽略了一个问题,这个方法同样会被 Hibernate 调用,在 null 的时候给 new 出一个相应的 Customer,这样就会出现问题了,如果你把 Customer 设成 null,Hibernate 调用该方法时就会自动给你 new 一个 Customer,并没有任何 id,这样在保存的时候会引发脏数据错误。所以一定要避免这样的写法。

别人给出的建议是把这样的 new Customer 的逻辑放在外面写,手动处理 Customer 的创建。页面上传递的是 Customer 的 id,后台手动加载 Customer 的 PO,然后 set 给 Support。

posted @ 2006-07-04 18:30 steady 阅读(790) | 评论 (0)编辑 收藏

  经过大约四个月的开发,和五位开发设计及美工人员的努力,AgileJava iCustomer 的第一个不是那么稳定的版本终于拿出来了,我们终于走出了我们的第一步,在这期间,我们也得到了很多朋友的支持和帮助,我们要感谢这些支持者的贡献。

  在这个阶段里,我们团队成员一起把我们研究 JSF, Spring, Hibernate,以及 Acegi 的成果都集中在这个项目中了。虽然很多东西都只是那么点点滴滴,但是在这期间有很多朋友在积极的帮助我们,参与我们的 OpenDoc 活动,把自己的宝贵时间分享出来,为大家带来了很多很好的文档,上周末,我们得到了 javascud 的大力支持,我们有了自己的 SVN,有了自己的 JIRA,这样的话,我们便可以建立我们自己的协作开发平台,让我们的经验和更多的朋友分享,同时,我们也欢迎更多的朋友能够参与到我们的开源活动中来,因为有了你们,我们才可以更壮大,因为有了你们,我们才可以更成熟,因为有了大家的齐心协力,我们才能为了一个共同的目标去奋斗,因为有了大家的协作,我们才会在共同努力中进步。

  开源也不是一句口号,我们只想用我们自己的行动来证明这一切,正因为我们是热爱开源的,所以我们才会去努力做的更好;正因为我们有着一个奋斗目标,我们才会孜孜不倦的去奋斗。此前 SpringSide 为我们做出了一个榜样,EasyJF 让我们梦想在自己的努力中实现,CowNew 也成为我们开源一个很好的先例,正是因为大家有这个梦想,有这些前辈们的努力,我们才看到国内开源的希望。

  其实我们更希望做到的,只是让新的技术能够更贴近实践了,让大家的实践能够更容易,让大家的开发能够更轻松,所以我们才从过去只是为了朋友做的一个小小的系统中找到方向,所以我们的开源团队名称叫做 AgileJava 就是为了让我们的开发更敏捷。

  下面我简单的介绍一下我们现在已有的系统和我们未来的目标:

  AgileJava iCustomer 系统是一套开源的 CRM (客户关系管理) 系统,使用了新一代轻量级 J2EE 技术: JSF,Spring,Hibernate, Acegi 等作为系统的基础开发框架,力图打造一个轻快好用的 J2EE 应用。

  在系统开发过程中,我们同时将系统中的基础框架以及大量可以简化 J2EE 应用开发的组件从应用中抽取出来,并独立提供给广大开发人员,作为项目开发的基础框架,为大家进行快速开发提供支持。我们为该框架命名为 AgileJava Framework。 AgileJava Framework 的目标是致力于为广大开发者提供一个敏捷高效的 J2EE 快速平台。

  另一方面,我们将以此框架为基础,通过 Eclipse Plugin 的方式提供一套完整的基于代码生成的解决方案,用于快速生成应用的基础代码。该开发工具同样沿用我们 AgileJava 的名称,叫做 AgileJava Studio。 AgileJava Studio 将致力于减少开发工作中的重复劳动,给开发者带开更好的开发体验。

  我们将会将 AgileJava iCustomer, AgileJava Framework, AgileJava Studio 作为开源项目来运作,一方面建立一个完整的企业级的客户关系管理系统,另一方面建立一个为 J2EE 项目提供快速开发能力的基础框架和开发工具。

  因为国内的开源模式一直没有什么好的先例,并且开源的路线在国内因为一些误解方面的问题,一直没有很好的发展起来,虽然我们选择了开源,但是我们更多的希望只是通过一个完整的企业级应用的方式来探索开源的方向,并为我们中小型企业级应用打造一个方便易用功能强大的解决方案,用我们的实践带给所有参与者一些经验,无论是开源方面的经验,还是在轻量级 J2EE 应用开发的经验。虽然国内很多软件企业都在用这些技术,但因为版权的问题,无法和更多的朋友分享,所以我们更需要一个开放的交流环境,通过这样开源的方式,通过大家的努力,把我们在实践中的经验拿出来,和大家分享,共同促进我们软件开发的大环境的改善,共同提高大家的开发能力和开发水平。

  在这里,我们鼓励的是一种知识共享,通过这样的共享,我们把我们自己拥有的一份知识扩展到大家拥有的无数份知识。我们通过自己的实践,我们能够更深入的去了解了现有的各种技术的长与短,通过大家的交流与协作,我们在知识上互相弥补。通过这样的实践,我们不光是再做我们这个系统,更多的是我们有了更多的思想,更多的经验,我们有能力去打造更好的系统。

  我们目前采用了以 JSF, Spring, Hibernate 为中心的主体框架,并努力使之扩展到一个中小型商业应用所需要的主要技术领域,并使之更简单易用。

				 目前采用的技术:
 JSF (Myfaces Implement),完整的视图层解决方案,一个标准的事件驱动的 MVC Framework。
 Spring Framework : 其 IoC 容器为我们的业务对象控制带来了很大的便利。
 Hibernate 3 : 目前最优秀,使用面最广的 ORM Framework。
 Acegi : 一个基于 Spring 的通用 Security Framework。
 Quartz : Java 世界最好也几乎是唯一的 Job Schedule 工具,为我们调度 Batch Job 提供了很大的便利。
 Shale : struts 社区在 JSF 领域的重大贡献,以 JSF 为基础为我们提供了一系列好用的东西。

		
				 预计后面准备采用的技术:
 Compass + Lucene : Java 世界里最好用的开源 Search Engine 组合,Compass 使 POJO 能够更方便的去使用 Lucene 的底层引擎。
 BIRT : Eclipse 社区贡献的一个重量级 BI 应用。当第一眼看到它时,就抛弃过去的 iReport + JasperReport 的组合了,够专业。
 Facelets : 为 JSF 量身定做的模板框架,JSF 的 Fans 们不用再靠着 struts 的 tiles 也能活啦。
 AjaxAnywhere : 不用写 JavaScript 也能 Ajax ,它为我们提供了这样的可能。
 ICE Faces Component : 当它的第一个beta版本出来的时候,我就对它颇有兴趣,或许是目前免费的 JSF 组件库中最好的 Ajax 实现了。

		

  我希望能够有更多热爱开源的朋友加入到我们的行列中来,不论你来自何方,做着什么样的工作,只要我们有着开源的这个共同的目标,我们就可以共同的去为着自己的爱好,自己的理想,自己的信念所奋斗,记住,开源决不是三分钟的热度,需要你持之以恒的奋斗。

  如果你对我们的项目和活动有兴趣,欢迎加入我们的行列:http://www.agilejava.org/java/read.php?tid=378
posted @ 2006-06-05 09:00 steady 阅读(2751) | 评论 (10)编辑 收藏
     摘要:   阅读全文
posted @ 2006-06-01 14:18 steady 阅读(371) | 评论 (0)编辑 收藏
    昨天去了趟上海,参加了一下 Sun 的解决方案大会,不过这次大会并不是面向开发者的,更多的是面向公司决策层的领导们,不过听听看也有机会更多的去了解 Sun,去了解这个 Java 的创始者。了解它们的一些理念。
 
    其实 Sun 主要是靠卖服务器赚钱的,Java 和其它的软件不能为 Sun 直接带来经济效益,这和 IBM 和 BEA 都是不同的,几乎上午 Sun 官方的人员宣传的都是这个主题,这次会议鼓吹了 Sun S4次方的一个概念,也就是 Server * Storage * Software * Service,另外有一方面就是介绍它们的节能服务器,号称 CPU 功耗只有其它同等机器的 20%,虽说没有具体见识到,不过也比较惊讶与此的了,Sun 开始转移话题,在这些方面做文章了。
 
    上午来自阿里巴巴的嘉宾介绍了一下他们基于 J2EE 平台的一系列产品以及介绍了淘宝网是如何经受起每天 1.5 亿次的点击率的,不过这个数字确实是一个天文数字了,如果没有一个好的平台和架构的话,是很难承受如此之大的访问的,而这一套系统,只花了8个月,大约8000个 manday 的人力就完成了,除了 Java 难道还有更稳定高效的解决方案,我想微软在摇头,PHP 也在摇头,这样才是 JavaEE 价值的真正体现了,要做出好的,别人做不了的东西。
 
    下午倒也没有什么太吸引人的东西了,虽然有来自 BEA 的一场关于 SOA 的主题演讲,不过来的只是一个 Senior Consultant,还是一如既往的鼓吹 SOA 的理念,虽然 SOA 快要真正的开始了,但是还是缺少一些实际性的东西来支持它,证明它,很多都还是概念,很多都太抽象,让人无所适从。
 
    下午有一个 Sun 大中华区的 Director : Anderson Wong 来继续宣传 Sun 的一些整体的解决方案,没有听太仔细,但有种概念,Sun 提供了一个整套的解决方案而不像其它的方案不够全面,还需要与许多其它的方案整合。Sun 也表示了他们的一种理念,在软件方面的,他们希望能有更多的软件开发商和服务商通过免费使用他们的软件,包括 OS 包括 Java 开发工具等等了,然后为用户提供解决方案,同时带动他们的服务器市场。当有人问到为什么要这样的做,Sun 很明确的表示了,Sun 和 IBM 还有 BEA都是不同的,Sun 是卖服务器的。
 
    最后去听了关于 JCOE 的一个专题,很抽象的一个概念,被讲的这个也不是那个也不是,很莫名其妙的一个东西,不过还是从上面得到了一些启发,关于我们公司核心框架的价值问题,有些类似 CMMI 之类的东西,通过一些标准化的方式,来提高软件开发的质量和效率,不知道有没有理解错,不过他们讲的真的不是很清楚啦。
posted @ 2006-05-31 09:46 steady 阅读(1212) | 评论 (1)编辑 收藏
     摘要: 过去的一段时间,一直有人拿 JSF 的 Navigation 当靶子,批评 JSF,其实细心的人会发现,在 Java 世界,这样的批评常常是很片面的,几乎所有成熟的应用框架,在除了实现某些默认的功能外,还保留一些扩展的接口,提供了相当的扩展性,比如说 struts, spring 等很多的 web framework 都提供了很多扩展的接口,当然,JSF 也一样。JSF 的 Navigation 中,我们一个 page 都有一个 from-view-id ,它的每个 navigation 出口 to-view-id 都必须定义,所以在不同的 from-view-id 中会有一些重复的 to-view-id,并且每当有一个新的 navigation 路径,我们都必须配置这个路径,才能够在 action 中正确的转向我们这个路径。很多情况下,这样的方式用起来都不是很爽,我们需要有一些简单的方式,我们在 action 事件中,直接 return 一个 page 的 path 就会直接 forward 到这个 page ,在用的时候会方便一些,有没有办法去做到呢?  阅读全文
posted @ 2006-05-29 08:52 steady 阅读(2403) | 评论 (2)编辑 收藏
为了开展 iCustomer 以及 AgileJava 系列开源项目,特别申请了 AgileJava.org 域名。今天把域名转向做好了,以后大家可以直接用新域名访问本站了。
posted @ 2006-05-27 14:45 steady 阅读(367) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2006-05-26 12:52 steady 阅读(834) | 评论 (3)编辑 收藏

自从公司与 Borland 建立了合作关系以后,一直在推 Borland 的 ALM 产品,包括 Together Architecture, CliberRM, StarTeam 等了,当然全都是合法授权的版本。我们这个项目作为公司第一个全程采用 StarTeam 的项目,从开始到结束前后两个月,一直是以 StarTeam 为中心进行开发的,虽然还没有时间去尝试一些 StarTeam 的特色功能,比如 Change Request 管理之类的,仅仅是作为一般的配置管理工具用的,当然它所宣传的良好的协同特性都是没有怎么用到的。

StarTeam 对于我们最有价值的一件事要算是它的缓存机制了,对于跨地域的团队协作有不错的帮助,StarTeam 的缓存机制能够有效的加速 check out 文件的速度。对于两个在不同地点协作开发的团队,一般会通过专线互连,两边的机器都在同一个局域网内,但受到专线带宽的限制,速度还是会很慢的,过去使用 VSS 作为配置管理工具,从找到到 check out 出一个十几k的文件都要花上三分钟,用 CVS 因为在传输的过程中会进行压缩,有一点点的改善,不过还是比较慢的,当然 ClearCase 这样的东西更是慢的出奇了,一个小时都拿不了几个文件。缓存机制可以说是我感受到 StarTeam 对我们最大的好处了,check out 一个1M左右的 folder 一般只要 10 秒左右,主要原因还是因为 StarTeam 的 MPX 机制,当一个人 check out 一个远程文件,就会形成一个本地缓存,当本地的其它用户请求同样的文件,这时候就不再是从远程的服务器端获取,而是在本地这个缓存的机器上获取,感觉有点像 BT 的原理,竟然也用到这样的企业级开发应用中来了,比较的有意思。

虽然这个好处已经让 StarTeam 在我们这样的团队结构下发挥了很大的作用,不过它的一些操作上和细节上的问题还是很不能让人觉得爽,特别是以 Eclipse Plugin 形式发布的 Client,稳定性真的很差,经常莫名其妙的就与服务器失去连接,但同时开的 Windows Client 却一点问题没有,很稳定的在工作着。另外一方面,Plugin 的同步功能好像不够快,有人 check in 了一个文件,半天都看不到,但 Client 没有这个问题,立刻就刷新了。

Plugin 的同步功能还是挺好用的,感觉比 CVS 的同步要好用一些。直接点在项目的每一级文件夹下,直接就可以看到这个文件夹或 package 下有多少需要同步的文件,然后选中需要 check in / check out 的文件,Run 一下就可以了。不过 Run All 按钮在 Run 按钮旁边可能会有一些问题了,也造成了我们这边的一些错误操作,延误了一些时间。因为有人不小心删除了本地文件,同步的时候,会要求同时也删除服务器端的文件,点 Run 的时候不小心点到 Run All,服务器上的东西都没了,只好 rollback 了,花了不少的功夫。

posted @ 2006-05-18 09:20 steady 阅读(4643) | 评论 (8)编辑 收藏
     摘要:   阅读全文
posted @ 2006-04-25 21:24 steady 阅读(2554) | 评论 (1)编辑 收藏
虽然没有参与,不过值得庆祝了。
posted @ 2006-04-20 15:39 steady 阅读(481) | 评论 (1)编辑 收藏
     摘要:   阅读全文
posted @ 2006-04-10 13:02 steady 阅读(402) | 评论 (0)编辑 收藏
     摘要: 好久没有写点东西了,这次想把JSF中的分页系列文章再扩充一点,说明一下查询和分页结合的情况,当我们把查询条件和查询结果放到一个页面上时,查询还是非常容易实现的,甚至不需要我们手工去从数据库中查询。  阅读全文
posted @ 2006-03-28 19:12 steady 阅读(6663) | 评论 (5)编辑 收藏
     摘要: 为了让更多的朋友了解 JSF ,也让 JSF 变得对大家不那么陌生,我和一些积极贡献的朋友们在 BlogJava 和我的 JSF 论坛上开展了 JSF OpenDoc 活动,目的是为了把更多更好的 JSF 资料奉献给大家,目前包括两部分 《 JSF Cookbook 》主要是把使用上常见的问题拿出来和大家分享,为了让大家能够更好的找到自己问题的解决方案,第二部分 《 JSF OpenDoc 》主要是翻译国外的优秀文档,把这些好的文档中文化,让更多的人能够更容易的去学去用 JSF。  阅读全文
posted @ 2006-03-08 10:28 steady 阅读(1961) | 评论 (4)编辑 收藏
     摘要: 好久都没有去写点东西了,不过最近也没有太多的时间去专门研究一些东西,就把我在实践中的一些经验拿出来和大家分享。因为 iCustomer 这个使用 JSF 的项目,最近一直在尝试解决一些过去遗留下来的问题,比如说验证之类的,还有防止重复提交页面,最后加上一个日期转换的问题。  阅读全文
posted @ 2006-03-07 09:57 steady 阅读(2966) | 评论 (2)编辑 收藏
     摘要: 在后面的时间里,我会陆续的把我在 JSF 学习过程中的一些心得体会以及一些值得参考的代码拿出来,整理成 JSF Cookbook 系列,并逐步发布出来。当然在整理的过程中因为个人能力有限,难免会出现错误和遗漏,请高手多多指点,谢谢。只希望这些资料对大家学习JSF带来一些便利。因为个人时间有限,速度可能会有些慢,请大家原谅,也希望有兴趣的朋友也能投入到资料的编写过程中来。

本部分包括。

1.什么是 JavaServer Faces
2.下载 JSF 的实现版本  阅读全文
posted @ 2006-02-17 15:41 steady 阅读(2914) | 评论 (8)编辑 收藏

    连续几天的超疲惫工作,有些扛不住了,身体上倒也还过得去,只是精神上有些痛苦,对 IBM 的不易用性已早有耳闻,今天一见,果真不凡,不光是东西本身很复杂,而且还会有一些莫名其妙的冲突,IBM 本身和 Sun 就是在不断的明争暗斗,总是会在某个阴暗面弄的和 Java 标准有些不太兼容了,调了三天的 Websphere + DB2 终于把跑到基本能用了,还好这两个东西试用期长,要是还只有一个礼拜就惨了。

    对 iCustomer 的理解慢慢的在加深,技术准备也到了差不多可以开工的程度了,只是心里对 Unit Test 部分不大放心,因为从来没有大规模的用过它,虽然对 XP 和 TDD 的以高度测试为中心的,但是对于传统的项目,这样的测试是很令人厌倦的,虽然说软件开发产出的是代码,但是,从来没有人敢否认测试的重要性,之所谓“软件质量是测出来的”也正是这么回事。

    一直向往着开源,向往着新的软件开发模式,一种轻松自由的,充分发挥人的作用的模式。开源为我们带来了很多,甚至在改变着软件世界的格局,从 Linux 从一开始就改变了世界,Apache 的应用无处不在,在 Java 世界 Hibernate 改变着 Java 的标准,Spring 在自己的领域不断发展,推动了整个 J2EE 的进步,JBoss 即将被 Oracle 收购的消息也显示出大型商业公司对开源的关注程度,开源不仅仅是免费的代码,更主要的是,它已经成为一种文化,悄悄的改变着世界。

posted @ 2006-02-16 09:20 steady 阅读(400) | 评论 (2)编辑 收藏
     摘要: Tiles是Struts中提供的一个优秀的模板技术,在JSF中,默认并没有提供这样的模板技术,但是,我们可以很容易的集成Struts中提供的Tiles到JSF中,现在,Tiles从Struts中独立出来了,我们也可以在JSF中使用Shale中提供的Standalone Tiles。  阅读全文
posted @ 2006-02-08 17:26 steady 阅读(2960) | 评论 (3)编辑 收藏
     摘要: 这是我最近三个月从学JSF开始做的一个实践项目,我在这里写的一些关于JSF的文章和随笔都是在这个项目基础上的,现在我把它拿出来和大家分享,同时也希望对此项目有兴趣的朋友能够投入到项目中来,也希望我的一些经验能给大家带来一些学习上的便利。同时也请高手多多指点,就让我们在学习和实践中共同进步。  阅读全文
posted @ 2006-02-08 09:26 steady 阅读(3144) | 评论 (1)编辑 收藏
     摘要: 因为最近三个月一直在做关于JSF方面的研究和实践,积累了一些小小的经验,而现在国内的JSF的应用还停留在初步探索阶段,经常有朋友会对这方面很有兴趣,但苦于找不到合适的资料。所以我在前些时间整理和翻译了一些资料,但这还是远远不够的,随后我有一个想法,想根据我的实践和经验编写一份Cookbook形式的参考资料,希望能对大家有一些帮助。  阅读全文
posted @ 2006-01-29 13:55 steady 阅读(2208) | 评论 (6)编辑 收藏
     摘要: 对于各种不同的Java应用,国际化的问题总会给我们非英文用户带来一些麻烦,在JSF中也一样,在实践中碰到了一系列不容易解决的问题,最终解决的大部分的问题,也完成了一个小项目,我把我的一些经验拿出来和大家分享一下,希望能让大家在这些地方少走一些弯路。  阅读全文
posted @ 2006-01-20 20:39 steady 阅读(2173) | 评论 (1)编辑 收藏
     摘要: 改变Tree中的内容 (当展开树的节点时,在后台延迟加载) 在邮件列表中有很多关于这项任务的问题和讨论,我(Marcel,一个 JSF 的初学者)在这里总结一下。如果你有更好的解决方案,请更新这些文字。 在这里存在的一个问题就是我要这样把“+”图标去掉: ·         <t:tree2 ....  阅读全文
posted @ 2006-01-13 19:28 steady 阅读(3036) | 评论 (1)编辑 收藏
     摘要: 在我的 blog 中,JSF 的Tree2 组件一直都是一个热门的讨论话题,为了向大家介绍更多关于Tree2的内容,我翻译了这篇原产于 Apache Myfaces 社区的介绍 Tree2 的文章,希望大家能够对 Tree2 有更深的认识。  阅读全文
posted @ 2006-01-13 12:59 steady 阅读(2503) | 评论 (1)编辑 收藏

         工欲善其事,必先利其器。做JavaWeb开发也不例外,一个好的工具,往往会达到事半功倍的效果。开发JSF有着无数好用的工具,基本上都是Eclipse的插件,BEA Workshop(前身是NitroX)ExadelMyEclipse等等,当然IBM Rational RSABorlandJBuilder还有OracleJDeveloper都具备这方面的开发功能,但是因为太过庞大了,就不推荐了,我重点推荐的是WorkshopExadel

         BEA Workshop,其前身NitroX曾经获得过Jolt奖,十月份的时候,被BEA收购,改名为BEA Workshop(并非BEA WebLogic Workshop)Workshop是一款针对HibernateJSFStrutsTilesJSP的专业化Eclipse工具,而且最新的3.0M2版本提供了对最新版本的Myfaces 1.1.1WYSIWYG支持,使用非常的顺手,我最近几个月都一直使用它来进行StrutsJSF方面的开发。

         该软件可到:http://www.m7.com/downloadNitroX.do 下载。

         Exadel却并不怎么出名,但是它的JSF编辑功能却很出色,最近版本3.05,我们公司开发JSF时用的开发工具。有很多出色的特性,如对Struts的支持,除了常规的导航流图,配置编辑,可视化验证,之类,还直支持TILES的可视化,这点有很大进步,但是和NitroX比还是有些差距,后者能够支持JSP编辑器中的TILES WYSWYG效果。还有个有趣的特征是Struts配置文件的Debug, 直接在图形上就可以设置断点。

         该软件可到:http://box.exadel.com/exadelproducts/app_products.process.main.start?_action=products 下载

在周围开发JSF的大多数人看来,这两款工具可以说是目前最为强大的JSF开发工具了,虽然它们都有种种的不足,但是它们却在不断的在应用中改变着,进步着,相信随着JSF的不断成熟,我们会有更多的选择。(如果需要破解的话,可以到我的论坛下载http://www.js66.com/java/read.php?tid=54&page=1&toread=1

posted @ 2006-01-11 09:32 steady 阅读(9573) | 评论 (22)编辑 收藏
     摘要: JSF中默认并没有提供客户端验证机制,这就需要使用其他的方法来验证,Shale已经为我们做好了,通过封装commonsValidator,实现了非常方便易用的客户端验证。  阅读全文
posted @ 2006-01-05 09:25 steady 阅读(4529) | 评论 (7)编辑 收藏
     摘要: 前面一篇直接使用了Myfaces中的两个Component完成了一个简单的分页,这里将会介绍一种On-demand loading的方法来进行分页,仅仅在需要数据的时候加载。  阅读全文
posted @ 2005-12-30 10:30 steady 阅读(14968) | 评论 (21)编辑 收藏
     摘要: 对于大多数Web应用,分页都是必不可少的功能,当然在JSF中也一样,我在这里用两篇文章介绍两种方法来展示一下,如何在JSF中实现分页。  阅读全文
posted @ 2005-12-29 20:55 steady 阅读(12426) | 评论 (2)编辑 收藏
     摘要: CodePro AnalytiX 的破解文件。  阅读全文
posted @ 2005-12-16 14:02 steady 阅读(1146) | 评论 (6)编辑 收藏
     摘要: 最近一直在用JSF,遇到了一些很奇怪的事情,昨天花了点时间仔细分析了一下,找到了一个主要问题,就是JSF和JSTL之间的互操作存在着兼容性问题。  阅读全文
posted @ 2005-12-15 15:35 steady 阅读(4025) | 评论 (0)编辑 收藏