2008年3月11日

今天跟小J讨论SSH框架在国内如此的火爆,小J表示 SSH框架在分布式上有很大的瓶颈。像ejb可以吧不同的层放在不同的服务器上,然后用jms通信,SSH框架毕竟还是轻量级的,对于分布式部署支持不够完善。
师兄说HX银行的企业网银、个人网银采用的Struts+Hibernate的开发框架,个人表示这种网银系统难道也很轻量级了吗?

希望各位大侠来一起讨论学习。

posted @ 2011-08-28 12:24 Robert Su 阅读(2610) | 评论 (4)编辑 收藏

之所以想写这个东西,是因为中国正处于一个快速转型的过程,各个社会阶层的变迁动荡很大,在这种动荡的变迁语境下,由于缺乏统一的价值观和文化继承,八仙过海各显神通,有些人抓住了这些机遇,一夜暴富,有些人含辛茹苦,至今尚不得温饱。抚今追昔,希望对未来能有所警示。

  我是个70年代的人,从事了大约5年左右的私人股权投资,从最初的风投做起,最后转到PE行业。我们最关心的就是下一次浪潮或者机遇在哪里,适合谁,不适合谁,适合哪个行业,不适合哪个行业,我在平时闲聊的基础上拓展下,汇总如下,大家多多指正:

  1、70年代末到80年代初:投机倒把、个体户,被主流国营经济拒之门外的人,掀起袖子走上个体经济的道路——代表人物傻子瓜子。(这个机遇当时可是冒政治风险的,估计抓住的人不多,这一次机遇转型的人生活最为艰辛,虽然后来大多无果而终,但在那个时代,确是敢为天下先,率先走上了以财富确立幸福的道路)——现在我们还有这样的机会么?

  2、85年开始到80年代末:乡镇经济,乡镇企业家,依托村或者集体社,利用自身在原有社会团体内(村内)的声望或者职务(村长,支部书记),集资办起了村里加工厂,其中以苏南模式最为典型——代表人物:华西村。


    3.(我自己添加) 80年代末,你去海南炒房子了吗?经济特区的建设和海南的划省,让无数人赚到了人生中的第一桶金,然而你又全身而退了吗?


    4,(我自己添加)90左右,你开游戏厅了吗?你第一时间把特区的新鲜事物带回家乡了吗?如果有,那么你想必早可以退休了。


    5、90年代初:股票认购证——你当时通宵排队了?你收购了多少?代表人物——德隆唐家兄弟,第一桶金就是这样来的。


    6、90年开始到90年代中期:价格双轨制——你当时有权利么?你有关系么?你有额度么?代表人物——我不想说。


    7、90年代中期:期货。尽管很雏形,尽管“很黄很暴利”,但不可否认,当初炒期货,不知聚集了多少豪强,也不知聚集了多少血泪,以致于当时的期货大鳄住酒店,甚至连最亲近的人都不知道他住那个房间,不少黑社会顺道生意大发。 代表人物,我的老板,硕果仅存的几个经历327事件后的大鳄,第1桶金就是7亿人民币纯利,当时他才29岁。


(以下为我自己添加,另一知名的代表人物中财系魏东。当年我一些朋友还只是怀揣这几百元钱的穷小子,一夜之间,变成百万富豪,又有人从百万富豪一夜间又变成穷光蛋;老家江浙的很多大户虽然没什么学历,可在327中坚定的站在中经开一方,成了最后盛宴的分享者;黑社会老大为了让我一个大哥帮忙炒期货,拍出了100万的现金,找来了10几个没开过苞的小美女当见面礼,10几年过去了,他们再提起那段岁月的时候依然认为那是他们人生中最美好的一段时光。)


   8.(我自己添加)97年亚洲金融危机,十年的轮回,相同的道路,索罗斯一心以为自己可以把香港打到,他不就是管金生的翻版么? 朱总一句不惜一切代价保卫香港,无数嗅觉灵敏的江浙炒家蜂拥到香港市场,不到半年时间,恒指从6000点回到10000点,几倍的无风险收益落袋了。


   9、90年代后期:国退民进。庞大的国有资本变卖,郎闲平一句“民营资本在国退民进的盛宴中狂欢”道出了当时的实质。俄罗斯休克疗法在一夜间做的事情,我们从97年开始用3年做完,不知道多少个人利用种种渠道,抓住了这样的廉价买卖的机会,为自己奠定了后续发展的产业基础。代表人物——太多了,您知道的肯定不比我少。


   10,(我自己添加)90年代你开始投资辅助产业了么?当别人出国聪明人开始培训出国,当别人考研聪明人开始培训考研,当性病,未婚先孕越来越多,你想过开设男性医院,女性医院,性病医院么?当家家户户开始普及家电,你想过进入流通领域么?当新的零售模式已经兴起,你想过尝试么?


   11、90年代末期:股票以519为开端,大幅度的上涨,你参加了么?


   12、90年代末期到2002年:网络时代的到来。你投资个网络公司么?你开设了这样的企业么?你拿着这样的融资计划书找过风投了么?(自己添加)哪怕你是第一家开网吧的,赚个一千万也不是什么难事情啊。


   13、90年代末期到2007年。楼市上涨。你买房了么,你投资了几套?炒房团你参加了么?


   14、2000年开始到2005年。世贸的加入给外贸出口加工业带来的机遇,你是否在这个行业?你是否做货代?你是做纺织品出口?


   15. (自己添加)2003年的非典,你第一时间囤积消毒液了么?你能想象你能想象一瓶消毒液一夜之间价格翻十几倍的疯狂么?


   16、2003年到2007年。你有没有参与投资非流通股?想不到随后几年开始全流通了吧?


   17. (自己添加)04年到06年,你参与期货市场了么?你知道10万元两年间就可以让一个人财务自由么?还有比单边行情赚钱更简单的么?你只需要不断用浮赢加仓。


   18、2004年到2008年。你开矿了么?你是不是矿老板?随便什么矿,后面几年的商品大牛市在等你。


   19、2007年。股票大牛市。不要告诉我你没参加,或者你是2008年春天才进股市的。


   20.(自己添加)08年,金融危机中你看到机会了么?你还在讨论失业,害怕裁员么?你没有看到期铜的单边走势么?你不知道06年商品期货的大牛市重新回归了么?


   21(自己添加)08年末到现在,温总理的4万亿让你看到机会了么?你参与到了十年难遇的国民财富分配当中来了么 ?
 

    30年间,无数次机遇(或者更多的我不知道,或者有些可能大家以为不算),多少人的财富起起落落,社会阶层的演进更替一层接着一层。



  什么是聪明的人,富翁是如何发家的,看看这些机遇,再想想自己。。。。。

 

  暂且不论社会道德,暂且不讨论资本原罪——我不是一个空洞的理想主义者,我知道很多人都想让自己过的好点,让自己的父母家人过的好点,我也知道他们都不是坏人或者冷血的人,这种追求财富的愿望很单纯很朴素很简单——我只是回顾下过去,想看看将来还有什么机会,属于你,属于我,属于不含金钥匙出生的草根大众。

posted @ 2010-10-09 00:12 Robert Su 阅读(377) | 评论 (0)编辑 收藏

MIT研究人员开发出名为KarDo的软件,能自动配置电子邮件账户,安装杀毒软件,或者设置VPN。

KarDo只需要观察管理员执行一次任务,就可以在运行不同软件的电脑上实施同样的工作。根据Forrester和Gartner的分析小组所说, 企业每年花费在简单重复的IT任务上的资金达数十亿美元。KarDo能将这笔开销削减20%之多。在某些方面,KarDo与记录宏命令—用户在电脑上的一 系列操作—的软件有相似之处。但KarDo会尝试学习每个操作的目的,从而在今后更广泛地使用该操作。当IT员工想要KarDo学习一项新任务时,只需要 事先按下“开始”按钮并在结束后按“停止”即可。

posted @ 2010-10-07 14:41 Robert Su 阅读(330) | 评论 (0)编辑 收藏

工作中最常用到的统计方法有哪些?根据我自己的经验给举些例子。

1.通过一部分用户样本预估整体的用户情况。比如,你的网站用户有200万注册用户,你要征询他们对于网站改进的意见,你需要给他们发邮件问卷。但 由于种种限制,你不能每个用户都发,而且你收到的有效问卷只有1500多份。你要明确一下,你收集到得1500多份问卷到底多大程度上可以带代表200万 的整体。这时候,你要预估误差范围(margin of error)。如果你征集到的有效有碰巧有52%的支持方案改进,你能说多一半的人都支持么?当然不能,因为你的误差范围可能就有2.5%左右。当然误差 的范围和你选定的置信度相关(Confidence Level),这里由于时间的限制我就不细说了。

2.根据用户的行为和特征对用户进行细分。这里需要用到聚类的概念,通过相似性的计算,来将行为和特征相近的个体用户归为一类。比较常用的归类算 法,比如K-均值法。例如,你做一个B2B的电子商务网站。你会考虑用哪些标准来划分用户比较好,如厂家的规模,产品所属的行业,还是他的商业模式(生产 厂家、外贸公司、批发商、零售商)等等。

3.网站设计与商业目标的相关性分析。网站都会经常做改进,如果你有都有相关的历史记录可以分析出哪些设计的改进提高的用户的活跃度或者转化率。通 过相关性分析,你可以知道哪些设计的改进对于用户的活跃度或者转化率更大;你还可以知道哪些设计元素的改进可以互相促进商业目标的完成,哪些则不起作用, 或者反作用。(当以,这些分析都基于你已经剔除了运营和推广活动对你造成的干扰)

4.网站整体用户体验的度量。面对每天几十上百的网站数据的各种指标,相信有相当一部分人包括老板们都看不懂。据说google的各种指标有 2000多个。这些数据指标对于用户体验的衡量到底有多大意义,也许没有一个人可以完全说清楚。这时候,网站需要一个类似股票大盘指数的指标来衡量网站整 体用户体验,及其变化趋势。这需要对数据进行长期的跟踪,统计,相关性比较才能完成。

posted @ 2010-07-31 22:04 Robert Su 阅读(367) | 评论 (0)编辑 收藏

Oracle JDeveloper,这是 Oracle 提供的免费 Java IDE

posted @ 2010-02-06 15:59 Robert Su 阅读(294) | 评论 (0)编辑 收藏

企业信息门户Jetspeed
企业信息门户门户可以让终端用户可以很方便的访问网络 资源(应用、数据库等)。用户可以通过Web浏览器、WAP手机、寻呼机以及其它一些智能设备来访问Portal。Jetspeed就像是中心的控制器, 可以很方便地以各种形式展示那些来自不同数据源的数据。
  • 开发语言: Java
  • 授权协议: Apache License 2.0
  • 项目主页: http://portals.apache.org/
  • 文档地址: http://portals.apache.org/jetspeed-2/
  • 下载地址: http://portals.apache.org/jetspeed-2/download.html
  • Demo:

  • the standard portal demo or
  • the web 2.0 desktop demo.
  • 企业信息门户-Liferay 
        1、提供单一登陆接口,多认证模式(LDAP或SQL);
        2、管理员能通过用户界面轻松管理用户,组,角色;
        3、用户能可以根据需要定制个性化的portal layout;
        4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
        5、支持主流的数据库,如PostgreSQL,MySQL;
        6、使用了第三放的开源项目,如Hibernate, Lucene, Struts;
        7、支持包括中文在内的多种语言;
        8、采用最先进的技术 Java, EJB, JMS, SOAP, XML;

    http://www.liferay.com/

    posted @ 2009-12-14 21:34 Robert Su 阅读(299) | 评论 (0)编辑 收藏

    企业信息化web2.0化,但是一直都没有系统的梳理过,今天发到这里留做今后讨论。


    图非原创
     

    SNS 的思路其实完全引入到CRM以及企业OA中,当工作流程中了有了处理的信息,应该将信息实时推送到个人client上。而这个client应该与个人blog、mail系统、视频会议系统关联起来的。至于视频会议系统将来肯定不会是必须要大家聚集到某个会议室里面,跟另外几个坐在会议室里面的人一起开会议,将来视频会议系统必然是非常灵活的,可以采取多种形式的。

     

    另外个人觉得未来企业信息化以及Enterprise Architecture的一个方向是移动化,可以保证信息随时可以传送到需要的个人那里。

    先写这么多,这篇文章等我从事企业信息化工作之后希望可以重新写的很深刻。

    ___________________________2009.12.27___________________________________
    09年10大开源软件中涉及到企业信息化的系统有

    1. 内容管理系统Drupal
            6. 开源ERP系统LedgerSMB

            8. 办公软件OpenOffice
            9. ERP系统OpenBravo ERP

    posted @ 2009-12-08 10:13 Robert Su 阅读(398) | 评论 (1)编辑 收藏

    10.白名单(Whitelisting)

    跟上恶意软件特征已经不可能了。比如,赛门铁克在2008年一年推出的反病毒特征已经超过了该公司在过去17年所推出的总和。如今,不仅病毒、蠕 虫、木马越来越多,而且有能力变种规避特征对比侦测或使用密码对自身进行加壳的病毒数据也在增长。对于不断增长,设计复杂的恶意软件,白名单可能是唯一的 解决办法。

    白名单与一个干净无恶意软件的台式机或服务器镜像启动。白名单软件将对那些用一个或多个用密码编写的文件进行识别。然后,管理系统中的监控代理标示 任何未在哈希表(HashList)中的执行文件或阻止它们运行。大部分公司会分发跨企业的标准系统镜像,所以白名单是一个最有效的确保安全的办法。

    白名单需要进行一个文件转变。在当今许多企业中,用户仍然有许多办法控制在他们的台式机或笔记本电脑上运行的内容。但是由于更加复杂的新恶意软件急 剧增长,利用恶意软件实施攻击的有组织犯罪案件数量也在增长,在企业安全领域中,白名单可能将是我们战胜恶意软件的唯一的希望。

    9.跨平台移动应用开发

    近几年来,移动设备上的企业应用一直没有得到很好地普及,主要有两个原因,一个是因为开发者需要耗费大量的时间去学习如何为智能设备编程,另外是因 为不同设备间的应用移植性不好。这也是为什么InfoWorld认为“跨平台移动应用开发”是2009年新兴企业技术的主要原因:

    跨平台移动应用开发环境,比如Rhomobile的Rhodes框架,可以让开发者写一次应用,但能在多个不同的设备上运行,如iPhone、Windows Mobile和BlackBerry等,提供了很多很炫的功能。

    对于企业来说,跨平台应用开发可大力促进研发和部署行动应用。你不可能让每位雇员都使用相同的智能手机,即使你做到了,针对特定平台的应用也让你局 在了一个平台上。通过跨平台应用开发,你在开发应用程序时,将可以不用再针对特定平台进行研究,所开发的应用也可以在许多设备上运行。未来,广泛部署移动 企业应用将成为现实。

    8. 节能硬件

    我们都知道“两种绿色”的内容是:通过降低能源消耗保护地球和节省资金。实现这两个目标的技术已经找到了进行服务器、台式机和其它硬件的方法,但是在一些情况下,只有出现更好的软件支持才会出现效益。

    更有效的电源适配器和在不需要时能够自动降低速度或关闭的硬盘正在被广泛应用。要想让不活动的内核、主板或其它部件睡眠,多核CPU通常需要在操作系统或应用层级被告之。

    电源适配器是最简单的节能办法。它们不需要软件支持,就可以实现上述两个目标。在AC-to-DC转换过程中,它们几乎不浪费电能,几乎不产生热量 —这也降低了冷却所需的电力。80 Plus认证项目鼓励生产厂商生产转换效率至少达80%的电源适配器。此前,老的电源适配器的转换效率只有50%,也就是说只有一半的电力被传输到了主板 上,另外50%的电能变成了热能。多家存储厂商也开始生产能够在不使用时降低转速或关闭的硬盘。最新的CPU、主板和网卡等硬件也开始引入节能概念。

    7.多核芯片

    主要的处理器厂商在时钟频率上撞到了墙。处理器时钟频率的每一次增加带来的都是电能的大量消耗,任何一次性能的提升,随之而来的是大功耗和高热量。

    有鉴于此,处理器厂商从单线程转向了多线程,随后又从单一快速核设计转向了多个虽然速度较慢但是可并行执行代码的多核。时钟频率已经不再是制约计算的瓶颈,取而代之的是吞吐量。

    多核芯片耗电量低,发热量小,工作效率更高。在服务器领域,他们正是IT人员梦寐以求的芯片。

    6.固态硬盘

    虽然固态硬盘在上个世纪就已经出现,但是最近才开始推出大量新产品,并且价格也大幅下降。在过去,固态硬盘主要用于那些需要尽可能高性能的应用程 序。如今,固态硬盘已经被广泛应用,如使用固态硬盘做为外部缓存以提高应用程序的性能。与传统机械硬盘相比,固态硬盘的价格仍然偏高,但是与添加服务器内 存条相比,它们还是便宜多了。

    与传统机械硬盘相比,固态硬盘不仅读写速度更快,而且支持更高的传输速率,更为省电。不足的是,固态硬盘的寿命较短,因为固态硬盘中的每一个单元的写入次数有限。

    5. NoSQL数据库

    数据正前所未有的流向每个角落。“SQL”与“数据库”可以互换的日子正在快速消逝,部分原因是老式关系型数据库无法处理来自Web 2.0应用的大量数据。

    对于NoSQL数据库这个概念,在刚提出时就遇到了很大的挑战,因为目前几乎所有的大型应用采用的都是关系型数据库,或者说SQL数据库。 NoSQL的推出,无异于一场革命。NoSQL数据库对于那些如安全日志或者系统日志等结构化不强的数据而言,使用起来很顺手。另外,因为缺少对数据的控 制,NoSQL数据库处理数据的速度也很快。

    4. I/O 虚拟化

    I/O虚拟化解决了运行诸如Vmware、微软Hyper-V等虚拟化软件的服务器所出现的问题。当大量的虚拟机在一个单一服务器上运行时,I/O 将成为一个重要的制约VM与网络通信以及VM联接后端存储的瓶颈。I/O虚拟化不仅可以在一个单一服务器上更加容易的在跨多VM分配带宽,它还为动态管理 物理服务器池和存储池找到了一个解决方案。

    3.重复数据删除

    数据是所有公司的血液。问题是如何处理这些数据。据IDC观察,企业的数据每18个月就会翻一倍,直至存储系统崩溃。导致这一问题的原因经常是因为 要遵守公司保存信息与文件的规定。更为重要的是这些数据在商业价值方面都没有有效期。对多年前的数据进行分析可以帮助用户把握发展趋势,预见未来,预测客 户的行为等等。

    为此,我们必须要找到一种可以降低数据存储量,又无需牺牲有用数据。在这里我们要感谢重复数据删除。

    2.桌面虚拟化

    桌面虚拟化已经出现在了我们身边。你可能会说,桌面虚拟化在上世纪九十年代中期就已经出现。不过,今天的桌面虚拟化已经从我们大多数人在两年前或三前年所想象的有很大区别。另一个里程碑是:新技术以桌面管理程序形式出现。

    1. MapReduce

    MapReduce是Google在2004年提出的一个软件架构,主要用于大规模数据集的并行运算,它通过把对数据集的大规模操作,将其分发给网 路上的每个节点实现可靠性。在Google内部,MapReduce得到广泛的应用,比如分布排序、Web连接图反转和Web访问日志分析等。提到为什么 将MapReduce放在第一位,InfoWorld解释说:

    某种程度上来说,这是考虑到MapReduce的独特创新,它使得从前只能在大型商业硬件上所做的事情,在普通的PC机上即可操作——处理千兆级别 的数据。在亚马逊的Amazon Elastic MapReduce产品中,以Web服务的方式很好地应用了MapReduce的实现——Apache Hadoop。而且,MapReduce还被集成进一些来自IBM、Oracle等公司的主流解决方案,现在它们云计算所用的服务器中可能就跑着 MapReduce

    posted @ 2009-11-24 02:02 Robert Su 阅读(366) | 评论 (1)编辑 收藏

    症状:
    IE报错。
    系统状态栏会自己变样式。
    360安全卫士的主程序、还有卡巴斯基的程序文件被删


    还在努力杀毒中

    posted @ 2009-10-15 16:04 Robert Su 阅读(314) | 评论 (0)编辑 收藏

    所读文章
    常用Flex IOC框架比较分析  http://www.infoq.com/cn/articles/ioc-frameworks
    Flex 与 Spring 框架  http://www.riameeting.com
    Spring BlazeDS Integration简介与入门 http://www.infoq.com/cn/articles/spring-blazeds-integration

    Spring与IOC现在是开发人员的常识了,IOC(Inversion of Control)也成为软件开发中非常流行的一种设计模式。

    Spring的横空出世完全颠覆了传统Java服务端的开发方式。它鼓励通过依赖注入的方式来装配POJO,这极大地简化了应用的开发与测试。

    Spring的核心配置是通过Java bean实现的。借助于bean,任何Java类都能被公开成为服务。
    IoC是Spring的核心。IoC的作用:
    借助IOC,可用一个独立的对象为其他对象的数据成员填充正确的实现,而不是由这些对象自己负责此项工作。这样做的好处有两个。
    第一,可将对象的数据成员 声明为接口,从而将对象与其具体实现分离(即契约式设计,design by contract)。
    第二,可从对象中删除创建逻辑,可以使对象的用途更为明确。

    实现:

    一般有两种最常见的对象配置方法:

    • 对象实例化(例如:var myObject = new Object()
    • 对象查找(例如:var myObject = registry.getMyObject()

    而利用IOC,你可在一个独立层中实例化应用程序要用到的对象,并传入它们所需的依赖。具体来说,最常见的实现方法也有两种:

    • Setter注入(例如:instance.myObject = new Object()
    • Constructor注入(例如:instance = new Instance( new Object() )

    一个IOC框架,通常由如下三个部分组成:配置、工厂和注入机制。

    配置

    我们可以在配置中描述对象之间的关系。最常用的配置描述方法是在文件中声明。这样的文件有时候也被称为上下文文件(context file)。也可以用元数据/注释(metadata/annotation),甚至直接在程序中描述配置。/

    工厂

    工厂负责配置的解析和所有对象的准备工作,程序一旦运行,就可以根据需要取得这些对象。

    在经典的Spring框架(最流行的Java IOC框架)中,所有对象(我称其为客户对象)都由IOC容器负责准备,并且它们以接口形式声明自己的依赖。在配置文件中,被声明的依赖都被设置为对应的实现类。

    注入机制

    所谓注入机制,是指如何将工厂创建的对象实例注入到应用或其他对象。

    就Spring Web应用而言,注入方法是通过web.xml来实现的。Spring会监听Web应用上下文的加载事件,并利用钩子捕获类加载器的行为,从而分离出任何 需被创建的对象。此后,若有需要,工厂将实例化对象,并填充它所需的依赖。当然在向应用返回对象之前,这些依赖本身也可能需要实例化。这个过程即所谓的 “(将依赖与对象)捆绑在一起”。

    在Flex中,类的加载原理有所不同,因此捆绑方法也就不同。目前有两种方法:

    • 客户对象直接从工厂请求(已捆绑好的)对象
    • 利用内置的Flex事件机制(用于实例化视图)触发注入

    看了一些文章之后发现还是不能够很好的了解Flex IOC框架比如spring Actionscript与Spring BlazeDS Integeration 到底有何不同。
    到spring官方网站一看究竟,目前Spring官方网站上有两个项目:
    Spring BlazeDS Integration
    Spring Ationscript

    这两个项目让你在客户端的Actionscript编码中以及服务端的Java编码中,都能够使用Spring的各种优秀特性。

    两者的不容之处在于

    Spring BlazeDS Integeration 允许你在服务端使用Spring容器来组织你的代码,维护的你代码依赖。并且,把你的服务通过相应的配置暴露给客户端。

    Spring Actionscript则是一个基于Actionscript代码的Ioc容器(目前还不支持AOP).可以让你在客户端使用Ioc管理依赖注入.


    下面分别看下,首先来探讨下Spring Actionscript以及其它的IoC框架。



    Spring ActionScript

    Spring ActionScript前身为Prana,因其成熟度高,成为了一个知名框架。

    核心概念

    任何使用过Spring的Java或.NET版本的人,都会很快熟悉Spring ActionScript。你在运行时加载的配置文件,可以给工厂提供足够信息,用于实例化被应用请求的任何对象。

    基本配置

    在标准例子工程中使用Spring ActionScript,需如下三个基本步骤:

    1. 创建文件application-context.xml
    2. 初始化应用中的工厂对象
    3. 在你的视图层(或其他任何地方),根据需要从工厂获得对象以供使用

    对象工厂和对象配置

    在Spring ActionScript中,对象声明在应用可访问的XML文件(通常命名为application-context.xml)中。此配置文件由XMLApplicationContext(是ObjectFactory的子类)加载。


    Spring ActionScript是一个优秀的、成熟的、开发活动十分活跃的IOC框架,任何用过Spring框架的人都熟悉的。

    以XML形式声明对象存在一个问题,即在XML中声明一个类,并且这个类没被包含在SWF中(因为在你的应用中没有对它的直接引用)时,Flash Player会在运行时抛出异常。其解决办法是创建一个ActionScript类,声明它对上下文XML的依赖,并将此类包含在应用中。


    Parsley

    • 框架:Parsley
    • 网站:http://www.spicefactory.org/
    • 开发者:Jens Halm
    • 版本:2.0.0
    • 许可:开源
    • 配置:XML/MXML/ActionScript

    Parsley也是一个成熟的IOC框架,最初灵感来源于Spring。它近期经历过一次较大规模的重写。新版本支持一些本地Flex特性,如绑定和元数据,使你在配置你的工程时有更多更好的选择。

    核心概念

    Parsley的核心概念是源自于Spring的上下文,也即应用的依赖注入的配置。

    Parsley的配置现在支持多种形式,其中包括XML和MXML。你可以使用本地的MXML标记或Parsley库提供的自定义MXML标签。Parsley使用元数据标签实现对注入机制的支持,这和Swiz框架是类似的。

    Parsley还支持消息模式。基本不需代码干预,你就能将你的对象配置为事件源或事件处理器。在这个例子中,我会用这个特性替代Controller模式。

    基本配置

    Parsley的配置分三个基本步骤:

    1. 创建Config.mxml文件。
    2. 在应用的根部初始化一个Context对象。
    3. 在你的视图中,用Inject元数据实现依赖的注入。

    准备配置文件的方法有多种,不过在这个例子中,我使用支持本地标记和Parsley标签的MXML文件。这种方法的好处是在编译时就将类引入,当然这样一来,也就不能直接修改已被编译的应用的配置了。

    对象工厂和对象配置

    在Config.mxml中,你能看到应用中用到的从域模型到代理的所有对象。声明这些对象的方式有两种:

    1. 标准的MXML
    2. 使用Parsley的对象定义标签

    在后面的内容中,我将详细介绍这种方法。

    总结

    经过其他一些框架的不断启发,新版本的Parsley已发展成为一个完整的IOC框架。它还支持模块式开发和上下文卸载。在模块化Flex应用开发日益盛行的今天,这无疑是一个十分重要的特性


    Spring BlazeDS Integration
    其目标是:开发者可以利用Spring开发模型通过Adobe Flex、BlazeDS、Spring以及Java技术创建RIA。这样我们就可以通过BlazeDS公开Spring管理的服务而无需额外的配置文 件。其优势在于将Spring的易用性与Flex、BlazeDS以及Java整合起来以共同创建应用。
    Spring的核心配置是通过Java bean实现的。借助于bean,任何Java类都能被公开成为服务。

    为了将这些bean公开成为Flex客户端所用的远程服务,Integration项目采用了Spring Web MVC。Spring Web MVC将DispatcherServlet作为一个中央分发器,用以处理任何类型的HTTP请求或是基于HTTP的远程服务。我们可以通过相同的 JavaBean配置方式来配置该DispatcherServlet以将请求转发给相应的处理器进行后续处理。


    posted @ 2009-09-30 11:49 Robert Su 阅读(1994) | 评论 (1)编辑 收藏

    public class B extends Object{
            
    static{System.out.println("Load B");
        }

        
    public B(){
            System.out.println(
    "Create B");
        }

    }

    public class A extends B{
        
    static {
            System.out.println(
    "Load A");
        }

        
    public A(){
            System.out.println(
    "Create A");
        }

    }

    public class testClass {
        
    public static void main(String[] args){
            
    new A();
        }


    }
    写出程序运行结果:

    Load B
    Load A
    Create B
    Create A

    欢迎大家留言发散讨论

    posted @ 2009-09-26 18:38 Robert Su 阅读(605) | 评论 (1)编辑 收藏

    在 myeclipse 的 preferences-属性 中搜索 javascript,搜到以后把它的Editing files 下的 Encoding 改为 Chinese,National Standard 就好了 也就是 GB18030

    posted @ 2009-09-07 17:03 Robert Su 阅读(800) | 评论 (1)编辑 收藏

    an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)

    session出错下次使用的时候报错


    这个bug解决方法还没搞清楚

    posted @ 2009-09-07 11:28 Robert Su 阅读(3175) | 评论 (0)编辑 收藏

    问题描述:
    网上关于extjs的comboTree已经层出不穷了
    利用tpl显示tree不是问题
    关键是combo的显示值
    网上的例子多是

    comboxWithTree.setValue(node.id);
    但是这样的显示跟post值不一样

    tree1.on('click',function(node){
           
            var Record = Ext.data.Record.create(
                {name: 'id', mapping: 'id'},
                {name: 'text', mapping: 'text'}
           ) ;
           var t = new Record({
                id: node.id,
                text: node.text
                }
           )
         
           comboxWithTree.getStore().add(t);
           console.debug(comboxWithTree.getStore().data);
           comboxWithTree.setValue(node.id);
           comboxWithTree.collapse();
        });

    posted @ 2009-09-01 18:18 Robert Su 阅读(1465) | 评论 (0)编辑 收藏

    把 WordPress 作为 CMS 来使用在2.1版本变得更加容易,只需5个简单的步骤并且不需去修改复杂的代码就能实现。

    1. 创建一个页面并命名为 home 作为开始页面,并给其 page order(页面顺序)为0。
    2. 创建一个空的页面并命名为 weblog 并给其 page order(页面顺序) 为99。
    3. 在管理界面,选择 option(选项) > reading(阅读),将上面创建的 home 作为 front page(开始页) 和 weblog 作为 posts page(文章列表页面)。
    4. 通过这个函数 wp_list_pages(’sort_column=menu_order&title_li=’) 创建网站菜单。
    5. 使用一个插件使得页面也能够被搜索。
      可以选用 Search Everything 这个插件。

    当为你的 CMS 创建页面的时候,确定页面顺序必须在0和99之间。这样的话,菜单中的第一个就是 home,最后的是 weblog,当然你可以根据你自己的需求更改。

    posted @ 2009-08-26 22:22 Robert Su 阅读(134) | 评论 (0)编辑 收藏

    浏览主页都不行

    建设中

    您想要查看的站点当前没有默认页。可能正在对它进行升级和配置操作。

    请稍后再访问此站点。如果您仍然遇到问题,请与网站的管理员联系。


    如果您是网站的管理员,并且认为您是由于错误才收到此消息,请参阅 IIS 帮助中的"启用和禁用动态内容"。

    要访问 IIS 帮助
    1. 单击开始,然后单击运行
    2. 打开文本框中,键入 inetmgr。将出现 IIS 管理器。
    3. 帮助菜单,单击帮助主题
    4. 单击Internet 信息服务

    posted @ 2009-08-25 23:16 Robert Su 阅读(178) | 评论 (0)编辑 收藏

    youku为什么不推出类似ipod itouch之类的播放器?

    个人认为这样的播放器+ PC客户端管理(流媒体到播放器)工具是很有市场的

    苹果的成功经验已经有了,要做的只是  UI设计+工业设计

    估计youku现在没上市缺钱,上市之后会有此类开发计划吧。

    土豆的UI简直就是对人眼的摧残。

    posted @ 2009-08-17 09:05 Robert Su 阅读(287) | 评论 (0)编辑 收藏

        public List findByInstance(IInsInfo instance) {
            log.debug(
    "finding IInsInfo instances with given IInsInfo instance");
            
    try {
                Criteria crit 
    = getSession().createCriteria(instance.getClass());
                Criterion iname 
    = null, gdfield = null, kind = null, property = null;
                Conjunction conjunction 
    = Restrictions.conjunction();// 合取
                
    //
                if (instance.getIname() != null)
                    
    if (!instance.getIname().equals(null)) {
                        iname 
    = Restrictions.like("iname""%"
                                
    + instance.getIname() + "%");
                        conjunction.add(iname);
                    }
                
    if (instance.getGdfield() != null)
                    
    if (!instance.getGdfield().equals("")) {
                        gdfield 
    = Restrictions.eq("gdfield", instance.getGdfield());
                        conjunction.add(gdfield);
                    }
                
    if (instance.getKind() != null)
                    
    if (!instance.getKind().equals("")) {
                        kind 
    = Restrictions.eq("kind", instance.getKind());
                        conjunction.add(kind);
                    }
                
    if (instance.getProperty() != null)
                    
    if (!instance.getProperty().equals("")) {
                        property 
    = Restrictions.eq("property", instance
                                .getProperty());
                        conjunction.add(property);
                    }

                crit.add(conjunction);
                
    return crit.list();
            } 
    catch (RuntimeException re) {
                log.error(
    "find by IInsInfo instance failed", re);
                
    throw re;
            }
        }

    posted @ 2009-08-16 11:14 Robert Su 阅读(644) | 评论 (0)编辑 收藏

    Ext.Ajax.request({
                url : '../../topicInfo/topicInfoNode.htm',
                success : getTopicInfoArray,
                method : 'post'
            });

    function getTopicInfoArray(response, options) {
        topicInfo_arr = eval(response.responseText);
        Ext.onReady(renderAll);
    }

    也可以用Ext.util.JSON.decode()方法搞定

    posted @ 2009-08-06 10:28 Robert Su 阅读(323) | 评论 (0)编辑 收藏

    SELECT b.id, b.name, a. COUNT
    FROM (SELECT adminlevel, COUNT(*) AS [count]
            FROM hrdc.i_ins_info
            GROUP BY adminlevel) a, hrdc.b_adminlevel b
    WHERE a.adminlevel =* b.id

    或者写成

    SELECT b.id, b.name, a. COUNT
    FROM (SELECT gdfield, COUNT(*) AS [count]
            FROM hrdc.i_ins_info
            GROUP BY gdfield) a RIGHT JOIN
          hrdc.b_field b ON a.gdfield = b.id


    这是右连接的一个例子

    inner join(等值连接) 只返回两个表中联结字段相等的行
    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    on 指定表间联结字段及其关系的等号 "=" 表达式, 返回 true 或 false. 当表达式返回 true 时, 则查询中包含该记录.



    7.5.2

     程序代码
    Update (ctarticle AS a LEFT JOIN ctclass AS c ON a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid
    SET tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid
    Where a.classid=23 AND a.nclassid=0 AND tagid is not null


    7.5.1

     程序代码
    Update (ctarticle AS a LEFT JOIN (ctnclass AS c LEFT JOIN ctclass AS d ON c.classid = d.classid) ON a.nclassid = c.nclassid AND a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid SET tag=d.class+' '+c.nclass, b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid Where a.classid=23 AND a.nclassid=197;


    7.5 更新操作

    74.5 左连接中数据的筛选

     程序代码
    Insert INTO cttag(articleid,classid,nclassid) Select a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on a.articleid=b.articleid where b.articleid is null

    //本语句功能为, 显示主表的全部内容, 插入数据到副表中没有的数据
    //主要作用为: 让数据减少冗余

    7.4.4.1 上例中的延续

     程序代码
    Select a.*, b.*, c.*, d.*
    FROM cttag as d left join ((ctarticle AS a LEFT JOIN ctclass AS b ON a.classid=b.classid) LEFT JOIN ctnclass AS c ON a.nclassid=c.nclassid) on d.articleid=a.articleid;


    7.4.4 显示文章表中的全部, 调用类别表中的栏目

     程序代码
    select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid

    //作用, 有时在文章表中包含了在个别类别表中没有的数据, 用这个语法可以读出文章表的全部数据
    //a 为 文章表, b 为主类别, c 为子类别

    7.4.3 同上例, 选择追加数据时加上空格

     程序代码
    Insert INTO cttag(articleid,classid,nclassid,tag)
    Select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass
    FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=4 and a.nclassid=154;


    7.4.2 连接N个表, 并追加数据到其中一个表, N=4

     程序代码
    Insert INTO cttag(articleid,classid,nclassid,tag)
    Select a.articleid,a.classid,a.nclassid,d.class+c.nclass
    FROM (ctarticle AS a left join (ctnclass c left join ctclass d on c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid) LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

    //解读
    插入到 表2(栏1,栏2,栏3,栏4)
    选择 别名a.栏1, 别名a.栏2, 别名a.栏3, 别名d.栏4 加上 别名c.栏5
    从 (表1 别名a 左连接 (表3 别名c 左连接 表4 别名d 在 别名c.栏2 等于 别名d.栏2) 在 别名a.栏2 等于 别名c.栏2 和 别名a.栏3=别名c.栏3) 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏2=1 和 别名a.栏3=1

    7.4.1 连接两个表, 并追加数据到其中一个表

     程序代码
    Insert INTO cttag(articleid,classid,nclassid)
    Select a.articleid,a.classid,a.nclassid
    FROM ctarticle AS a LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;

    //解读
    插入到 表2(栏1,栏2,栏3)
    选择 别名a.栏1, 别名a.栏2, 别名a.栏3
    从 表1 别名a 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏4=1 和 别名a.栏5=1

    7.4. 左连接

    7.3.1 同步两表的数据

     程序代码
    Update ctarticle a INNER JOIN cttag b ON a.articleid = b.articleid SET b.classid=a.classid, b.nclassid=a.nclassid;

    //解读
    更新 表1 别名a 联接 表2 别名2 在 别名a.栏1 等于 别名b.栏1 设置 别名b.栏2 更新为 别名a.栏2, 别名b.栏3 更新为 别名a.栏3

    7.3 右外连接

     程序代码
    select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20

    查询别名 a,b 表, 只匹配 b 表中的内容.

    7.2.3 添加数据到连接表之一

     程序代码
    Insert INTO cttag ( tag, articleid ) Select top 1 b.tag, a.articleid FROM ctarticle AS a left JOIN cttag AS b ON a.articleid = b.articleid Where a.articleid order by a.articleid desc;


    7.2.2 变通中的用法二

     程序代码
    Insert INTO bureply
    Select b.*, a.classid, a.nclassid
    FROM article AS a INNER JOIN reply AS b ON a.articleid = b.articleid
    Where classid=50;


    7.2.1 实际应用中的变通

     程序代码
    Insert INTO butag ( tag, articleid, classid, nclassid)
    Select b.tag, a.articleid, a.classid, a.nclassid
    FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
    Where classid=24;


    7.2 添加数据到其他表

     程序代码
    Insert INTO butag ( tag, articleid )
    Select b.tag, a.articleid
    FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
    Where a.articleid<>False;

    //解读
    添加到 接收表(列1,列2)
    选择 别名b.列1, 别名a.列2
    从 表1 表名a 联接 表2 表名b 在 别名a.列c 等于 别名b.列c
    在哪里 别名a.列c 不等于 没有

    7.1.1 实际应用中的变通

     程序代码
    Select b.tag, a.articleid, a.classid, a.nclassid
    FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
    Where a.classid=24;


    7.1 查询

     程序代码
    Select b.tag, a.articleid
    FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid
    Where a.articleid<>False;

    //解读
    选择 别名b.列, 别名a.列
    从 表1 别名a 联接 表2 别名b 在 别名a.列c = 别名b.列c
    在哪里 别名a.列c 不等于 没有
    注: as 不是必要

    7. 外连接——交叉查询

    posted @ 2009-07-26 16:12 Robert Su 阅读(228) | 评论 (0)编辑 收藏

    近期做了几个小项目,需要的总结的东西很多。
    需要记下的东西亦很多……
    1、IT服务是业务驱动的,是给公司服务,为商业服务,成败不完全由IT技术决定。
    做为一个学生,我总是去追求那些更炫更酷的东西,也总期待在项目中应用更多的新东西。但是我始终没清晰一点,作为一个服务,首先要考虑自己的工作能给自己的服务对象提供多大的价值,怎样对他们的工作有更大的帮助。
    需求获取一定要重视,这方面也有待于今后进一步积累。

    2、任务分配。

    单纯按照模块来分任务也许有时候对于小团队来说比较灵活方便。但是肯定不是那么简单的,因为缺点特明显,就是这样会导致没有一个统一的规范。可是又不想合作的同学只会做一块,想让他对整个架构有个清晰的理解。按层划分下次尝试下。

    3、项目设定范围一定清晰明确。

    中途被打断了好几次,唉,好多感触都写了这么点。回头有感了再补充

    posted @ 2009-07-23 11:45 Robert Su 阅读(135) | 评论 (0)编辑 收藏

    E:\Mtk工程\MTK_B818>make project gprs resgen
    make\option.mak:2224: WARNING recommend set FS_CHECKDRIVE_SUPPORT=TRUE when MSDC
    _CARD_SUPPORT_TYPE!=NONE
    找不到文件
    已复制         1 个文件。
    if /I "UNISTAR25_GEMINI" EQU "NEPTUNE162" \
                    (if exist .\plutommi\customer\CustResource\UNISTAR25_GEMINI_MMI\
    resource_shortcuts.c \
                       (copy /y .\plutommi\Customer\CustResource\UNISTAR25_GEMINI_MM
    I\resource_shortcuts.c .\plutommi\Customer\CustResource\resource_shortcuts.c) \
                    )
    100% 已复制 已复制         1 个文件。
    100% 已复制 已复制         1 个文件。

    E:\Mtk工程\MTK_B818>

    命令打完执行上面的就没了,不知道这个工程为什么无法编译资源……
    此问题困扰我很久终于发现了问题所在
    ..\plutommi\Customer中缺少了四个temp文件
    remakeResource.tmp
    ResGenerator.tmp
    ResGenerator_HW.tmp
    UpdateSkin.tmp

    这四个temp文件考过来就可以了
    但是为什么会缺少这四个temp文件目前还没时间去考证

    posted @ 2009-06-07 15:10 Robert Su 阅读(673) | 评论 (1)编辑 收藏

    '"g:\progra~1\arm\adsv1_2\bin\tcc.exe"' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    can't open ~MMI_features_check.obj
    tools\make.exe: *** [mmi_feature_check] Error 2


    解决办法:

    =>make\Option.mak中DIR_ARM路径没有改

    g:   =>   c:

    posted @ 2009-06-04 19:21 Robert Su 阅读(847) | 评论 (0)编辑 收藏

    官方地址:

    http://www.efflex.org/

    源代码下载:

    http://code.google.com/p/efflex/

    posted @ 2009-05-30 18:26 Robert Su 阅读(385) | 评论 (0)编辑 收藏

    Failed to connect; session timed out.
    Ensure that:
      1. You compiled your Flash application with debugging on.
      2. You are running the debugger version of Flash Player.

    安装的是debug版本,当时debug mxml的时候直接运行,断点没起作用
    launching完之后提示上面一段话

    怎么回事?不理解

    终于搞定!每次都是把flash player装了卸,卸了装
    设置里面来回折腾半天……忘记怎么改了了
    记得了我第一时间记这里

    posted @ 2009-05-27 17:05 Robert Su 阅读(940) | 评论 (2)编辑 收藏

    请推荐比较好的开源电子商务系统,在此先谢过
    我查了几个比较出名的,但是都太重量级了点
    有没有比较轻量级的呢?请大家帮忙推荐

    我会将结果写一篇贴与大家分享

    posted @ 2009-05-06 11:36 Robert Su 阅读(184) | 评论 (0)编辑 收藏

    1、amazon
          Amazon的分布式key-value存储系统(dynamo)的论文

    2、ebay
          ebay架构演变历程(The eBay Architecture)
          ebay架构原则(eBay architecture principles)
          ebay的自动化(Teaching machines to fish) 

    3、facebook
          facebook的缓存系统
          facebook的架构

    4、fotolog
          扩展世界上最大的图片blog社区

    5、google
          GFS介绍
          GFS论文
          Mapreduce介绍
          Mapreduce论文
          Google在web前端方面的经验(even faster websites)
          建设大型可扩展的IRS系统的挑战(challenges in building large-scale IRS)
          松耦合分布式系统中的锁服务(lock service for loosly-coupled distributed system)
          “滚木移石”不停机升级策略论文(modular software upgrades for distributed program)

    posted @ 2009-04-30 20:43 Robert Su 阅读(151) | 评论 (0)编辑 收藏

    闷骚技术大牛方向:必需精通数据结构、操作系统、c/c++、汇编、TCP/IP。。。
    架构师方向:必需精通架构设计、负载均衡、服务器优化、应用服务器优化。。。
    项目经理方向:技术要全面,各方面都要懂一些,需求挖掘,进度掌握,团队建设,与客户打交道。。。
    部门经理方向:除了上面项目经理所需掌握的技能,还要加上与领导沟通,与其它部门保持关系平衡
    销售方向:性格外向,脸皮厚,EQ高,擅长忽悠(以通过测谎仪为标准),有丰富的社会关系,会唱歌喝酒写PPT,女性的话胸部要大,脸蛋要漂亮。
    自己创业方向:上面的你全都要会

    posted @ 2009-04-29 10:22 Robert Su 阅读(1537) | 评论 (7)编辑 收藏

    朋友推荐的
    非常不错
    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466

    特意来这里跟大家分享
    使用方法很简单,安装之后office2003便可以打开office2007格式的文档(docx,xlsx等格式)

    posted @ 2009-04-27 13:51 Robert Su 阅读(22515) | 评论 (20)编辑 收藏

    http://www.kasulo.ws/

    posted @ 2009-04-15 17:08 Robert Su 阅读(133) | 评论 (0)编辑 收藏

    當我使用Flex Builder要執行debug的時候 他會出現
    C:\WINDOWS\system32\Macromed\Flash\Flash10b.ocx

    Flex Builder cannot locate the required debugger version of Flash Player. You might need to install the debugger version of Flash Player 9 or reinstall Flex Builder.

    Do you want to try to debug with the current version?

    这个问题的原因是由于flashplayer 升级到10了

    posted @ 2009-04-15 12:22 Robert Su 阅读(523) | 评论 (0)编辑 收藏

    List<Integer> projectids= projectServiceManagementService.listProjectByUserID(userid,usertype);
        if( projectids.size()!=0 && projectids != null){
         projectLists = projectServiceManagementService.getProjectListbyIds(projectids);
        }

    这段代码中会有bug,bug在于当projectids 为null的时候 projectids.size()这个地方已经报错了

    所以正确的写法应该是   if(  projectids != null && projectids.size()!=0 )

    posted @ 2009-04-10 22:03 Robert Su 阅读(733) | 评论 (3)编辑 收藏

    synergy

    posted @ 2009-04-07 15:52 Robert Su 阅读(222) | 评论 (0)编辑 收藏

    1、Form中的dateField放到一个Ext.Window上之后依然会在firefox上出现过长问题,之前提到的方法不好使
    2、一个Combo放到一个window上,远程加载数据
    当关掉窗口之后,第二次打开这个带有combo的窗口,点下拉按钮,不显示数据
    但是通过firebug看,数据已经取回来了

    解决办法
    var Select_Project_Combo = function(){
        var store = new Ext.data.JsonStore({
            url: '/meetingseasy/projectService/listProjectAll.action',
            root: 'projects',
            fields: ['projectid', 'projectname']
        });
        var config = {
            store            : store,
            displayField    : 'projectname',
            valueField        : 'projectid',
            typeAhead        : true,
            triggerAction    : 'all',
            //editable        : false,
            emptyText        : '选择工程...',
            selectOnFocus    : false,
            listeners : {
                select : function(combo, record, index) {
                    var projectid = record.data.projectid ;
                    
                    Ext.Ajax.request({
                        url : 'meetingseasy/acceptProjectid.action',
                        success : selectProject_responseFn,
                        method:'POST',
                        //failure : responseFn,
                        params : {'projectid' : projectid}
                    });    
                }
            }
            };
        function selectProject_responseFn(){
            //alert("combo");
            //var win = Ext.getCmp(projectComboWin);
            //console.log(win);
        }
        Select_Project_Combo.superclass.constructor.call(this, config);
    }
    Ext.extend(Select_Project_Combo,Ext.form.ComboBox,{});



    //Ext.ComponentMgr.registerType( 'ProjectCombo', ProjectCombo);
    var SelectProject_windows = function(){
       var _selectProjectCombo = new Ext.form.ComboBox({
                    id : 'projectComboWin',
                    ……
                    store : new Ext.data.JsonStore({
                         url: '/projectService/listAll.action',
                        root: 'projects',
                        fields: ['projectid', 'projectname']
                    })

        });
        
        var config={
            title : '选择**项目',
            width : 400,        height : 200,
            resizable : true,
            //closeAction : 'hide',   //就是这句话,当combo直接放在windows里面的时候,跟随windows对象的生命周期,如果这里为hide的话,windows下次打开的时候没变,而combo变了。所以下拉菜单不好用

            modal : true
            ,items : _selectProjectCombo
        }
        SelectProject_windows.superclass.constructor.call(this, config);
    }
    Ext.extend(SelectProject_windows,Ext.Window,{});

    posted @ 2009-04-05 04:56 Robert Su 阅读(921) | 评论 (2)编辑 收藏

    今天报bug说,dataview数据重新load之后没有刷新

    我在dataview中加了     refresh : function(data) {
                        store.reloads(data);
                },
    提示reloads未定义~

    改成refresh : function(data) {
                        store.reload(data);
                },
    之后初次render dataview的时候不停的reload~

    posted @ 2009-04-01 23:03 Robert Su 阅读(1037) | 评论 (0)编辑 收藏

    现在action中有一个List<Day>  days;

    Day对象的定义
    public class Day{
       private List<Event> eventMorningList;
    }
    Event对象定义

    public class Event{
        private Integer id;
        private Integer name;
    //    get set method
    }

    这个怎么显示输出比较好啊
    打算做一个日历表那样的形式

    一个周有一个列表,每天有一个list,list中是Event
    我现在用freemarker,这样写好像是错误的
    <#list days as pm>
        ${ pm.Event.name}
    </#list>
    输出event name

    因为在action直接拼table太麻烦了,感觉可视化效果不好,故打算采用freemarker这种标签语言
    但是好像freemarker不能搞对象中对象的属性嘛
    请教大家怎么搞?

    谢谢大家给俺指点~

    posted @ 2009-03-31 02:39 Robert Su 阅读(1305) | 评论 (6)编辑 收藏

    查了文档以及别人做的flash样式表
    说是这句话
    <mx:horizontalAxisRenderer> <mx:AxisRenderer labelRotation="45" /> </mx:horizontalAxisRenderer>

    但其实根本这句话好像不是我所需要的
    我需要是坐标轴上的字显示旋转


    所以只需要导入
    @font-face
    {
        src: local("MyriadWebPro.ttf");
        font-family: EmbeddedArial;
    }

    .myLineChart
    {
        font-family: EmbeddedArial;
    }

    字体需要MyriadWebPro.ttf下载
    这个字体导入之后不需要加<mx:AxisRenderer labelRotation="45" />
    方法就可以实现旋转~
    如果加了反而坐标重叠

    posted @ 2009-03-30 15:15 Robert Su 阅读(1091) | 评论 (0)编辑 收藏

    .x-date-middle {

        
    padding-top:2px;padding-bottom:2px;

        
    width:130px/* FF3 */

    }

    在页面中加入此CSS样式表

    posted @ 2009-03-26 00:05 Robert Su 阅读(712) | 评论 (0)编辑 收藏

    今天遇到一个FLEX的问题,需要对一个传入的变量参数添加监听事件
    搜了下,只有在RIACHINA找到答案,版主cimmicola给出了很好的解答
    **************************************
    一般用set 访问符来定义这样的变量
    例如 public var sss:string →
    private var _sss:string;
    public function set sss(value:string){
        _sss = value;
        dispatchEvent(new Event("sssChanged"));
    }
    public function get sss():string{
        return _sss;
    }
    这样写虽然是代码多了很多,不过方便日后的扩展。

    posted @ 2009-03-21 15:05 Robert Su 阅读(586) | 评论 (0)编辑 收藏

    var str:String = Application.application.parameters.myparam;

    在js中这样写
    var swfurl = "myswf.swf?progId=" + idVal;
        swfobject.embedSWF(swfurl, "repchartdiv", "1024", "500", "9.0.0", "expressInstall.swf");

    也可以写成

    var attributes = {
          "progId": idVal
        };
        
        swfobject.embedSWF("myswf.swf", "repchartdiv", "1024", "500", "9.0.0", "expressInstall.swf", null, null, attributes);



    posted @ 2009-03-21 14:03 Robert Su 阅读(1930) | 评论 (0)编辑 收藏

    http://www.freepint.com/gary/direct.htm#top


    大多数搜索引擎存在着非常大的问题,很多人已经意识到这个问题了。
    现在的问题是,海量的网络有一些通用搜索引擎——谷歌、百度抓取不到的“看不见的网页”
    这部分网页比例是比较高的;
    特别由于AJAX 以及RIA的大量应用,crawler面临挑战不小……
    待续

    There's a big problem with most search engines, and it's one many
    people aren't even aware of. The problem is that vast expanses of the
    Web are completely invisible to general purpose search engines like
    AltaVista, HotBot and Google. Even worse, this "Invisible Web" is in
    all likelihood growing significantly faster than the visible Web
    you're familiar with.
    So what is this Invisible Web and why aren't search engines indexing
    it?  To answer this question, it's important to first define the
    "visible" Web, and describe how search engines compile their indexes.

    posted @ 2009-03-17 17:19 Robert Su 阅读(217) | 评论 (0)编辑 收藏


    现在遇到的问题是生成折个每周事项的表格是逻辑乱了~
    以下是Javascript代码:
    顶部周一周二是另一个循环生成的,现在是下面的日期这块出现了问题
    我现在想只显示上下午,但是由于事件Item的日期判断这块现在很乱
    发到首版来讨论下这个问题


           var _minutesPerStep = 0;
           var _stepsPerHour = 0;
           

            var _tr, _td;
            var _stepCounter = 0;
            var _dayIndex = 0;
            var _hourIndex = 0;
            var _totalSteps = 24 * _stepsPerHour;
            for (var _steps = 0; _steps < _totalSteps; _steps++) {
                if(_steps==12){
                _tr = _table.dom.insertRow(_steps);}
                //timerows
                _dayIndex = 0;
                for (var _days = 0; _days < 8; _days++) {
                    if (_days == 0) {
                        if (_stepCounter == 0) {
                            _tr.className = "HourDivider";
                            _td = _tr.insertCell(_dayIndex++);
                            _td.style.width = _firstColWidth + "px";
                            _td.rowSpan = _stepsPerHour;
                            _td.className = "Time";
                            _td.innerHTML = (_hourIndex > 9 ? "" : "0") + (_hourIndex++) + ":00";
                            if (_steps === 0) {
                                _tableContainerCell = Ext.get(_td);
                            }
                        }
                        else {
                        
                            _tr.className = "StepDivider";
                        }
                    }
                    else {
                        _td = _tr.insertCell(_dayIndex++);
                        _td.className = "TimeStep";
                        _td.day = _days;
                        _td.step = _steps;
                        _td.ddTarget = new Ext.dd.DDTarget(_td, "Calendar");
                    }
                }
                _stepCounter = _stepCounter == (_stepsPerHour - 1) ? 0 : _stepCounter + 1;
            }
        }


    posted @ 2009-03-16 01:44 Robert Su 阅读(929) | 评论 (0)编辑 收藏

    [RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]
     at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()
     at mx.rpc::Responder/fault()
     at mx.rpc::AsyncRequest/fault()
     at DirectHTTPMessageResponder/securityErrorHandler()
     at flash.events::EventDispatcher/dispatchEventFunction()
     at flash.events::EventDispatcher/dispatchEvent()
     at flash.net::URLLoader/redirectEvent()

    报错如上
    是我把flex里的release版本直接放到页面中出息此提示的
    先挖坑~

    原来我的url写的问题,比如
    url = 'http://202.111.11.1/appliaction/datasource.*'
    这样会被flash player以为是romote web Service
    url = /appliaction/datasource.*'这样就对了

    posted @ 2009-03-14 11:45 Robert Su 阅读(900) | 评论 (0)编辑 收藏

    tbar: [
                blockedtype,'-',{text:'封堵验证',handler:do_checkBlockedVideok,iconCls:'block'}
                ,'-',
                {text:'刷新',iconCls:'refresh'
                },'-',new Ext.Toolbar.Fill(),'-',
                {text:'编辑',iconCls:'add'
                },'-',
                {text:'导出Excel','-','已封堵数量:[0] 未封堵数量:[0] 总数量:[0]'
                ]

    这里注意下 Ext.Toolbar.Fill()
    充满组件把'导出Excel'顶到最右边

    CSS:
    <style type="text/css">
    .add {
                background-image:url(../icons/add.gif) !important;
            }
            .delete {
                background-image:url(../icons/delete.gif) !important;
            }
            .save {
                background-image:url(../icons/save.gif) !important;
            }
            .block {
                background-image:url(../icons/block.gif) !important;
            }
            .refresh {
                background-image:url(../icons/refresh.gif) !important;
            }
            .in {
                background-image:url(../icons/in.gif) !important;
            }
            .out {
                background-image:url(../icons/out.gif) !important;
            }
    </style>

    posted @ 2009-03-13 18:07 Robert Su 阅读(5710) | 评论 (0)编辑 收藏

    Case:
    action需要同时向两张表中添加数据
    比如一个是class 一个是video
    每次都是一对多的关系~每一次插入的Video的classID是相同的

    video表中有个字段是classId 对应的是的class中的主键   ID

    ID是sequence生成的
    那我批量插入video的时候怎样获取class_ID_sequence生成的id值呢?

    思路:
    我观察到Hibernate做插入的时候每次插入记录的时候会首先查询sequence

    select CLASS_ID_SEQ.nextval from dual
    那怎样获取到这个select的值呢?

    获取到这个值可以直接给
    video.setClassID(classID)

    请大家讨论并指教~

    ***************整理如下*******************
    执行完这句sql语句select CLASS_ID_SEQ.nextval from dual之后,class这个对象已经执行过setId方法,所以当前它的id值可以获得getId方法得到;
    可以直接在在action这样写
    Long id=class.getId();


    感谢隔叶黄莺

    posted @ 2009-03-11 13:49 Robert Su 阅读(5170) | 评论 (6)编辑 收藏

    [RPC Fault faultString="HTTP request error" faultCode="Server.Error.Request" faultDetail="Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: 流错误。 URL: http://localhost:8080/vbm/videoTrackHist/videoTrackAdd.htm"]. URL: http://localhost:8080/vbm/videoTrackHist/videoTrackAdd.htm"]
        at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()[C:"autobuild"3.2.0"frameworks"projects"rpc"src"mx"rpc"AbstractInvoker.as:220]
        at mx.rpc::Responder/fault()[C:"autobuild"3.2.0"frameworks"projects"rpc"src"mx"rpc"Responder.as:53]
        at mx.rpc::AsyncRequest/fault()[C:"autobuild"3.2.0"frameworks"projects"rpc"src"mx"rpc"AsyncRequest.as:103]
        at DirectHTTPMessageResponder/errorHandler()[C:"autobuild"3.2.0"frameworks"projects"rpc"src"mx"messaging"channels"DirectHTTPChannel.as:362]
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()

    当本地服务器关闭时,没有成功错误响应的时候flex builder报错如上

    代码:  
        var param:URLVariables = new URLVariables();
        param.query = query;
       
        var v:HTTPService = new HTTPService;
        v.method = URLRequestMethod.POST;
        //v.method = 'POST';
        v.resultFormat="text";
        v.url = url ;
        v.send(param);


    posted @ 2009-03-10 16:22 Robert Su 阅读(1175) | 评论 (0)编辑 收藏

    昨天一直被一个问题困扰,关于XMLlistCollection的赋值问题
    问题概述:
     <mx:DataGrid  id="videoList" dataProvider="{gridData}" ...

    gridData定义
    [Bindable] public var gridData:XMLListCollection = new XMLListCollection();

    gridData的取值来自于
    <mx:HTTPService id="videoXml"  method="POST" url="{serviceUrl}" resultFormat="e4x" result="loadDataOk();"  />
     <mx:XMLListCollection id="videoSrc" source="{videoXml.lastResult.webVideos}"/>

    这样的做的目的在于想把每次请求回来的数据累加——“ +=”

    之前一直错误的赋值方式:
    gridData=videoSrc
    这样会导致dataProvider与gridData指向同一个对象,与指针一样。

    所以当HTTPService 返回数据改变, videoSrc改变的时候,DataProvider里的数据都是videoSrc当前数据
    而大小已经变成了gridData一样的大小了

    改正后代码
    if(gridData.length==0){
         //gridData=videoSrc; //错误代码
         gridData = new XMLListCollection((XMLList)(videoSrc.source));
        }else{
         gridData=MergXMLCollect(gridData,videoSrc); 
        }

    posted @ 2009-03-06 13:37 Robert Su 阅读(1750) | 评论 (0)编辑 收藏

    发送参数为

    deleteId:["3161104","3160521","1465591"]

    那我在action中的deleteId该定义成何种类型才能正常接收呢?

    问题解决了,在action中定义成List<String>
    就可以

    posted @ 2009-03-04 15:36 Robert Su 阅读(381) | 评论 (1)编辑 收藏

    Ext2.0对框架进行了非常大的重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext的控件,Ext组件是由 Component类定义,每一种组件都有一个指定的xtype属性值,通过该值可以得到一个组件的类型或者是定义一个指定类型的组件。
            组件大致可以分成三大类,即基本组件、工具栏组件、表单及元素组件。
    基本组件有:

      xtype            Class
    -------------    ------------------
    box              Ext.BoxComponent  具有边框属性的组件
    button           Ext.Button  按钮
    colorpalette     Ext.ColorPalette 调色板
    component        Ext.Component 组件
    container        Ext.Container 容器
    cycle            Ext.CycleButton 
    dataview         Ext.DataView 数据显示视图
    datepicker       Ext.DatePicker 日期选择面板
    editor           Ext.Editor 编辑器
    editorgrid       Ext.grid.EditorGridPanel 可编辑的表格 
    grid             Ext.grid.GridPanel 表格
    paging           Ext.PagingToolbar 工具栏中的间隔
    panel            Ext.Panel 面板
    progress         Ext.ProgressBar 进度条
    splitbutton      Ext.SplitButton 可分裂的按钮
    tabpanel         Ext.TabPanel 选项面板
    treepanel        Ext.tree.TreePanel 树
    viewport         Ext.ViewPort 视图
    window           Ext.Window 窗口

    工具栏组件有
    ---------------------------------------
    toolbar          Ext.Toolbar 工具栏
    tbbutton         Ext.Toolbar.Button 按钮
    tbfill           Ext.Toolbar.Fill 文件
    tbitem           Ext.Toolbar.Item 工具条项目
    tbseparator      Ext.Toolbar.Separator 工具栏分隔符
    tbspacer         Ext.Toolbar.Spacer 工具栏空白
    tbsplit          Ext.Toolbar.SplitButton 工具栏分隔按钮
    tbtext           Ext.Toolbar.TextItem 工具栏文本项

    表单及字段组件包含:
    ---------------------------------------
    form             Ext.FormPanel Form面板 
    checkbox         Ext.form.Checkbox checkbox录入框
    combo            Ext.form.ComboBox combo选择项
    datefield        Ext.form.DateField 日期选择项
    field            Ext.form.Field 表单字段
    fieldset         Ext.form.FieldSet 表单字段组
    hidden           Ext.form.Hidden 表单隐藏域
    htmleditor       Ext.form.HtmlEditor html编辑器
    numberfield      Ext.form.NumberField 数字编辑器
    radio            Ext.form.Radio 单选按钮
    textarea         Ext.form.TextArea 区域文本框
    textfield        Ext.form.TextField 表单文本框
    timefield        Ext.form.TimeField 时间录入项
    trigger          Ext.form.TriggerField 触发录入项

    可用的vtype列表:
    alpha,alphanum,email,url

    posted @ 2009-03-04 10:43 Robert Su 阅读(495) | 评论 (0)编辑 收藏

    效果如下图所示:
    控制代码在GridPanel中

    loadMask: true






    11

    posted @ 2009-02-16 10:43 Robert Su 阅读(1212) | 评论 (2)编辑 收藏

    在调试JavaScript时可以在代码中加入一些行,来作为判断条件
     1,alert();
     如果你的代码出错崩溃了,你可以在预期出错位置之前加入该语句,判断错误是否在该位置之后!多次加入,就可以逐渐靠近错误位置了;如果使用alert() 只是为了查看变量值,有时候将变量值在window.status上显示出来更好;
    2,confirm();
    该函数会根据你的选择返回true或者false,于是你可以选择分支执行了;
    3,prompt();
     这个就更厉害了,你可以使用它把你的变量值给修改了;比如:s="我不知道";s=prompt("请设定",s);你可以在这里把s给修改成"我爱 你!",嘿嘿! 让程序有应付某些异常的功能是必要的: 要想得到详细的错误报告你可以使用 window.onerror 或 try..catch 语句。这会让代码直接运行,不会因某个错误而终止挂起,从而在代码执行完成后报告出所有的错误。 建议: 把代码缩排做好;养成一些良好的习惯,通俗说是风格。 调试工具: 工具有很多,用着顺手就好了,我有VS就不需要别的了。这里有很多别人列举的工具,我也没用过:


    在IE中一定要启用错误报告。如果使用的是 windows,可以利用 Microsoft Script Debugger。如果需跟踪一个错误,你可以利用角本中的 debugger 关键字控制角本在调试模式下执行。
    推荐主要使用 ie 测试,用 op7 或 moz 来调试。
    在 Op7 当中,一定要启用 在JavaScript Console 中 JavaScript 错误报告。
    Op7 的 JavaScript Console 远比 ie 错误报告要好些,拥有更好的代码跟踪功能,更容易看到函数调用来源。并且可以报告出正确的错误行,不同于 iew 。 在 moz 中有很多工具。可利用 Mozilla JavaScript Console,它可以报告错误和警告,并且允许做简单的角本赋值。可以启用严厉警告提示出许多潜在错误位置。可以使用 DOM Inspector 显示 document 树,stylesheets 树,computed styles,JavaScript 对象。
    可以用 Venkman (Mozilla JavaScript Debugger)获取更高级的 JavaScript 调试工具。可供使用的有 Ian Hickson’s JavaScript Evaluation Sidebar 或者 Jesse Ruderman’s JavaScript Environment、view scripts bookmarklet、JavaScript Shell 或者 view variables bookmarklet 或者 ViewScripts bookmarklet 。 在 konq 当中,靠自己的力量要更多些,使用一些源代码的技巧。
     在 saf 中需要启用隐藏调试菜单(Hiden debug menu),不用在系统控制台显示毫无意义的错误信息,使用 Show DOM Tree 功能会更有用。如果你启用了显示调试菜单,Safari不运行,在终端使用下面的命令: defaults write com.apple.Safari IncludeDebugMenu 1

    posted @ 2009-02-12 15:44 Robert Su 阅读(311) | 评论 (0)编辑 收藏

    今天遇到一个容易忽略的问题,是两个Long类型的比较~~

    if (v.getId() == ids[i]){
                          ……
                        }

    getId()中返回值是Long id
    ids定义是Long[] ids

    但是这里v.getId() == ids[i]一直不为真,导致程序输出结果有误

    应该如下:

    if (v.getId().longValue() == ids[i].longValue()){……}

    posted @ 2009-02-10 12:18 Robert Su 阅读(833) | 评论 (0)编辑 收藏

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
    <mx:XML source="t.xml" id="stockData" />
    <mx:Panel title="Stock Data" width="100%" height="100%" layout="vertical"
    paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">

    <mx:HBox><mx:Label text="Start Day" />
    <mx:HSlider minimum="0" maximum="30" id="dayslider" snapInterval="1" />
    </mx:HBox><mx:DataGrid dataProvider="{stockData..day.(num >= daySlider.value )}" width="100%" height="100%">
    <mx:columns>
    <mx:DataGridColumn dataField="num" headerText="day" />
    <mx:DataGridColumn dataField = "compa" headerText="Company A" />
    <mx:DataGridColumn dataField = "compb" headerText="Company B" />
    </mx:columns>
    </mx:DataGrid>
    </mx:Panel>
    </mx:Application>


    为什么没效果~效果应该是下图所示


     

    哪位大侠知道的给帮忙看下吧~

    posted @ 2009-01-24 15:46 Robert Su 阅读(219) | 评论 (0)编辑 收藏

    http://www.infoq.com/cn/articles/flex-xml-json

    Flex与JSON及XML的互操作


    http://www.airia.cn/FLEX_Directory/

    FLEX教程

    http://www.adobe.com/cn/devnet/flex/quickstart/coding_with_mxml_and_actionscript/

    adobe官方入门教程



    posted @ 2009-01-18 00:40 Robert Su 阅读(157) | 评论 (0)编辑 收藏

    http://www.cnblogs.com/analyzer/archive/2008/01/25/1052333.html

    posted @ 2009-01-18 00:00 Robert Su 阅读(144) | 评论 (0)编辑 收藏

    create or replace view v_allinfo_stat_by_site as
    select a.*,b.BLACK_COUNT,b.WHITE_COUNT,b.GRAY_COUNT,b.AUTHOR_COUNT,group_count,audit_count,vblog_org_count,valbum_count from v_video_stat_by_site a,
    v_vblogger_stat_by_site b,
    (select count(*) group_count,site_id from vblogger_group group by site_id) c ,
    (select count(*) audit_count,site_id from audit_web_video group by site_id) d ,
    (select count(*) vblog_org_count,site_id from vblogger_org group by site_id) e ,
    (select count(*) valbum_count,site_id from valbum group by site_id) f
     where a.site_id = b.site_id(+) and
     a.site_id = c.site_id(+) and
     a.site_id = d.site_id(+) and
     a.site_id = e.site_id(+) and
     a.site_id = f.site_id(+)
     order by a.all_count desc;


    c,d,e也是相当于视图
    a、b本身就是视图


    存储过程
    create or replace procedure UPDATE_VBLOGGER_MONTHLY_WEEKLY as
      v_now_date  NUMBER;
    begin
    --按月统计
       SELECT TO_NUMBER(TO_CHAR(sysdate,'YYYYMM'))INTO v_now_date FROM dual;
       update vblogger v set v.monthly_video_count=0;
       update vblogger v set v.weekly_video_count=0;
    COMMIT;   
       update vblogger v set v.monthly_video_count=(select count(*) from web_video w where GET_TIME_FORMAT(1,w.video_day)=v_now_date and v.site_id=w.site_id and v.name=w.video_author group by w.site_id,w.video_author) ;
    --按周统计
         SELECT TO_NUMBER(TO_CHAR(sysdate,'YYYYFMWW'))INTO v_now_date FROM dual;
         update vblogger v set v.weekly_video_count=(select count(*) from web_video w where GET_TIME_FORMAT(3,w.video_day)=v_now_date and v.site_id=w.site_id and v.name=w.video_author group by w.site_id,w.video_author) ;
    COMMIT;
    end;

    posted @ 2009-01-17 10:56 Robert Su 阅读(591) | 评论 (0)编辑 收藏

    后台是spring + hibernate + freemarker

    这个模块也是整个系统中的一小部门。从中对于XSL的使用,XSL很好很强。



    并且对EXT中的vtype验证方式有了更加全面的总结。


    贴代码:RssAction.java

    public class RssAction extends BaseActionSuport {
        private static RssService rssService;
        private Collection<Rss> rsses;
        private static final Logger logger = Logger.getLogger(RssAction.class);
        private String rssname; // RSS名称
        private String rssurl; // RSS地址
        private String defaultUrl; // defaultUrl地址
        private String url;// URl地址
        private String rssPath;
        private Long deleteId;

        public Long getDeleteId() {
        return deleteId;
        }

        public void setDeleteId(Long deleteId) {
        this.deleteId = deleteId;
        }

        public String getRssname() {
        return rssname;
        }

        public void setRssname(String rssname) {
        this.rssname = rssname;
        }

        public String getRssurl() {
        return rssurl;
        }

        public void setRssurl(String rssurl) {
        this.rssurl = rssurl;
        }

        public String deal() {
        try {
            Rss rss = new Rss();
            logger.debug("rssname:" + rssname);
            logger.debug("rssurl:" + rssurl);
            rss.setName(rssname);
            rss.setUrl(rssurl);
            rssService.create(rss);
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        return this.SUCCESS;
        }

        public String rssDelete() {
        try {
            logger.debug("deleteId:" + deleteId);
            rssService.deleteById(deleteId);
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        return this.SUCCESS;

        }

        public String listAll() {
        try {
            rsses = rssService.listAllRss();
            return this.SUCCESS;
        } catch (Exception e) {
            logger.error(e.toString());
            return this.ERROR;
        }
        }

        public String getRss() {
        HttpURLConnection conn = null;
        InputStream ios = null;
        ByteArrayOutputStream out = null;
        ActionContext ctx = ActionContext.getContext();
        HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);

        try {

            URL addr = null;
            if (url == null || url.trim().length() == 0) {
            addr = new URL(defaultUrl);
            } else {
            addr = new URL(url);
            }
            conn = (HttpURLConnection) addr.openConnection();
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
            conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            conn.setRequestProperty("Accept-Language", "zh-cn");
            conn.setRequestProperty("Accept-Charset", "gb2312,gbk,utf-8;q=0.7,*;q=0.7");
            String contentType = conn.getContentType();
            String contentEncoding = conn.getContentEncoding();
            int statusCode = conn.getResponseCode();
            int length = conn.getContentLength();

            if (logger.isDebugEnabled()) {

            // logger.debug("contentType:" + contentType);
            // logger.debug("contentEncoding:" + contentEncoding);
            // logger.debug("statusCode:" + statusCode);
            // logger.debug("length:" + length);
            }
            if (contentEncoding == null) {
            if (contentType != null) {
                contentEncoding = getCharSet(contentType);
            }
            if (contentEncoding == null) {
                contentEncoding = "UTF-8";
            }
            else if(contentEncoding.equals("ansi"))
                contentEncoding = "GBK";
            }
            ios = conn.getInputStream();
            out = new ByteArrayOutputStream();
            
            byte buffer[] = new byte[1024];

            int len = 0;
            while ((len = ios.read(buffer)) != -1) {
            out.write(buffer, 0, len);
            }
            out.flush();
            logger.debug("contentEncoding:" + contentEncoding);
            String rssData = new String(out.toByteArray(), contentEncoding);
            //logger.debug("rssData:"+rssData);
            String rssDa = rssxsl(rssData);
            request.setAttribute("rssData", rssDa);
            request.setAttribute("Encoding", contentEncoding);
            return this.SUCCESS;
        } catch (Exception e) {
            logger.error(e.toString());
            e.printStackTrace();
            return this.ERROR;
        } finally {

            if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }
            if (ios != null) {
            try {
                ios.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }

            if (conn != null)
            conn.disconnect();

        }
        }

        public RssService getRssService() {
        return rssService;
        }

        public void setRssService(RssService rssService) {
        this.rssService = rssService;
        }

        public Collection<Rss> getRsses() {
        return rsses;
        }

        public void setRsses(Collection<Rss> rsses) {
        this.rsses = rsses;
        }

        public String getName() {
        return rssname;
        }

        public void setName(String name) {
        this.rssname = rssname;
        }

        public String getRssPath() {
        return rssPath;
        }

        public void setRssPath(String rssPath) {
        this.rssPath = rssPath;
        }

        public String getRssUrl() {
        return rssurl;
        }

        public void setRssUrl(String rssUrl) {
        this.rssurl = rssurl;
        }

        public String getUrl() {
        return url;
        }

        public void setUrl(String url) {
        this.url = url;
        }

        public String getDefaultUrl() {
        return defaultUrl;
        }

        public void setDefaultUrl(String defaultUrl) {
        this.defaultUrl = defaultUrl;
        }

        private String getCharSet(String contentTypeEnd) {
        if (contentTypeEnd != null) {

            int pointer = contentTypeEnd.indexOf('=');
            if (pointer > 0) {
            String result = contentTypeEnd.substring(pointer + 1);
            result = result.trim();
            if (result != null) {
                if (result.length() > 0) {
                if (result.charAt(0) == '"') {
                    if (result.charAt(result.length() - 1) == '"') {
                    result = result.substring(1, result.length() - 1);
                    }
                } else if (result.charAt(0) == '"'') {
                    if (result.charAt(result.length() - 1) == '"'') {
                    result = result.substring(1, result.length() - 1);
                    }
                }
                }
            }
            return result.trim().toLowerCase();
            }
        }
        return null;
        }

        private String rssxsl(String rssData) {
        String formerStr = "";
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        String path = request.getRealPath("");
        path = path + rssPath;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        XMLWriter writer = null;
        try {
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(path));
            transformer.transform(new javax.xml.transform.stream.StreamSource(new StringReader(rssData)), new javax.xml.transform.stream.StreamResult(out));
            formerStr = new String(out.toByteArray(), "UTF-8");
            formerStr = removeXmlHead(formerStr);

        } catch (Exception e) {
            logger.error(e.toString());
        } finally {
            if (writer != null) {
            try {
                writer.close();
            } catch (IOException e) {
                logger.error(e.toString());
            }
            }
            try {
            out.close();
            } catch (IOException e) {
            logger.error(e.toString());
            }

        }
        return formerStr;

        }

        private String removeXmlHead(String content) {
        if (content == null) {
            return null;
        }
        content = content.trim();
        if (content.indexOf("<?xml") != 0) {
            return content;
        }
        int index = content.indexOf("?>");
        if (index < 0) {
            return content;
        }
        content = content.substring(index + 2);
        return content;
        }
    }


    RssServic.java代码

    import java.util.Collection;
    import gov.ict.mcg.vbm.pojo.Rss;

    public interface RssService {
         public void create(Rss rss) throws Exception;
         public void deleteById(Long id) throws Exception;

         public Collection<Rss> listAllRss() throws Exception;
    }

    RssServiceImp.java 代码:

    import java.util.Collection;

    import org.apache.log4j.Logger;

    import gov.ict.mcg.vbm.dao.RssDao;
    import gov.ict.mcg.vbm.pojo.Rss;
    import gov.ict.mcg.vbm.services.RssService;

    public class RssServiceImpl extends BaseService implements RssService {

        private static final Logger logger = Logger.getLogger(RssServiceImpl.class);
        private RssDao rssDao;

        public RssDao getRssDao() {
        return rssDao;
        }

        public void setRssDao(RssDao rssDao) {
        this.rssDao = rssDao;
        }

        public void create(Rss rss) throws Exception {
        try {
            rssDao.create(rss);
        } catch (Exception e) {
            throw new Exception();
        }
        }

        public Collection<Rss> listAllRss() throws Exception {
        return rssDao.listAll();
        }

        public void deleteById(Long id) throws Exception {
        try {
            rssDao.deleteByIdCommit(id);
        } catch (Exception e) {
            throw new Exception();
        }
        }

    }

    下面是控制显示的simple.xsl

    <xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema"
    version="1.0" exclude-result-prefixes="xsl ddwrt msxsl rssaggwrt"
    xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
    xmlns:rssaggwrt="http://schemas.microsoft.com/WebParts/v3/rssagg/runtime"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:rssFeed="urn:schemas-microsoft-com:sharepoint:RSSAggregatorWebPart"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:rss1="http://purl.org/rss/1.0/" xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
    xmlns:atom2="http://purl.org/atom/ns#" xmlns:ddwrt2="urn:frontpage:internal">

    <xsl:template match="/">
    <xsl:for-each select="/rss/channel/item">
    <div class="item">
     <div><h4><a href="{./link}" target="_blank"><xsl:value-of select="./title"/></a></h4></div>
     <div>
         <font style="font-weight: bold" face="Courier New" size="2" bold="true">标签: </font><font face="Courier New" size="2">
         <xsl:value-of select="./itunes:keywords"/>     ||       
         <xsl:value-of select="./pubDate"/></font>
    </div>

     <div class="content" id="content">
     <xsl:value-of select="./description" disable-output-escaping="yes"/>
     <xsl:if test="system-property('xsl:vendor')='Transformiix'">
     <script type="text/javascript">
     var element = document.getElementById("content");
     element.innerHTML = element.textContent;
     </script>
     </xsl:if>
     </div>
    </div>
    </xsl:for-each>
    </xsl:template>

    </xsl:stylesheet>

    posted @ 2009-01-13 22:42 Robert Su 阅读(1817) | 评论 (8)编辑 收藏




    subclipse的版本也是1.4,怎么会一直提示这个错误啊?哪位知道这个错误啊

    posted @ 2009-01-13 16:39 Robert Su 阅读(219) | 评论 (0)编辑 收藏

    之前做联合查询很慢也很麻烦;需要对web_video表跟webvideo _day视图做联合查询,但是速度奇慢
    select a.* from web_video a  webvideo b where a.id=b.id and a.site_id=?

    换成这种方式之后就快多了
    select a.* from web_video a where a.site_id=? and a.video_day=to_number(to_char(sysdate, 'yyyymmdd'));

    video_day是一个物化视图 MATERIALIZED VIEW——可以大大提高数据库查询的速度。

    posted @ 2009-01-12 21:55 Robert Su 阅读(247) | 评论 (0)编辑 收藏

     看到网上说select * from ( select row_.*, rownum rownum_ from (sql) row_ where rownum <= ?) where rownum_ >?
    这种方法是最快的,特做实验验证之

    select row_.*, rownum rownum_ from (select * from web_video) row_ where rownum BETWEEN 1 and 100
    0.05675s 0.1181s
    select row_.*, rownum rownum_ from (select * from web_video) row_ where rownum BETWEEN 100 and 1000
    22.269s
    select * from ( select row_.*, rownum rownum_ from (select * from web_video) row_ where rownum <= 100) where rownum_ >0

    0.156s
    select * from ( select row_.*, rownum rownum_ from (select * from web_video) row_ where rownum <= 1000) where rownum_ >100
    0.037s

    posted @ 2009-01-06 00:41 Robert Su 阅读(166) | 评论 (0)编辑 收藏

    /**
        Create an Ext.tree.TreePanel in the passed Element using
        an XML document from the passed URL, calling the passed
        callback on completion.
        @param el {String/Element/HtmlElement} The tree's container.
        @param url {String} The URL from which to read the XML
        @param callback {function:tree.render} The function to call on completion,
            defaults to rendering the tree.
    */
    function createXmlTree(el, url, callback) {
        
    var tree = new Ext.tree.TreePanel(el);
        
    var p = new Ext.data.HttpProxy({url:url});
        p.on(
    "loadexception"function(o, response, e) {
            
    if (e) throw e;
        });
        p.load(
    null, {
            read: 
    function(response) {
                
    var doc = response.responseXML;
                tree.setRootNode(treeNodeFromXml(doc.documentElement 
    || doc));
            }
        }, callback 
    || tree.render, tree);
        
    return tree;
    }
     
    /**
        Create a TreeNode from an XML node
    */
    function treeNodeFromXml(XmlEl) {
    //    Text is nodeValue to text node, otherwise it's the tag name
        var t = ((XmlEl.nodeType == 3? XmlEl.nodeValue : XmlEl.tagName);

    //    No text, no node.
        if (t.replace(/\s/g,'').length == 0) {
            
    return null;
        }
        
    var result = new Ext.tree.TreeNode({
            text : t
        });

    //    For Elements, process attributes and children
        if (XmlEl.nodeType == 1) {
            Ext.each(XmlEl.attributes, 
    function(a) {
                
    var c = new Ext.tree.TreeNode({
                    text: a.nodeName
                });
                c.appendChild(
    new Ext.tree.TreeNode({
                    text: a.nodeValue
                }));
                result.appendChild(c);
            });
            Ext.each(XmlEl.childNodes, 
    function(el) {
    //        Only process Elements and TextNodes
                if ((el.nodeType == 1|| (el.nodeType == 3)) {
                    
    var c = treeNodeFromXml(el);
                    
    if (c) {
                        result.appendChild(c);
                    }
                }
            });
        }
        
    return result;
    }

    回头有空添加详细注解~~原文中6楼有更详细的解答  http://extjs.com/forum/showthread.php?t=3987




    posted @ 2008-12-30 11:23 Robert Su 阅读(926) | 评论 (0)编辑 收藏

    Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'RssService' defined in ServletContext resource
     [/WEB-INF/vbm_dao.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException:
     Invalid property 'rssDao' of bean class [gov.ict.mcg.vbm.services.impl.RssServiceImpl]: Bean property 'rssDao'
     is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'rssDao' of bean class
    [gov.ict.mcg.vbm.services.impl.RssServiceImpl]: Bean property 'rssDao' is not writable or has an invalid setter method.
     Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:793)


    原因:
    RssServiceImpl类中忘记添加dao的get set方法~~~

    posted @ 2008-12-29 17:14 Robert Su 阅读(273) | 评论 (0)编辑 收藏

    Eclipse3.2装WTP时提示我需要需要3.4的功能组件
    直接download~~~eclipse-jee-ganymede-win32.zip
    就可以了

    posted @ 2008-12-26 11:09 Robert Su 阅读(550) | 评论 (0)编辑 收藏

    把日期改成int型的,比如20081029
    然后对这个字段建索引

    posted @ 2008-12-19 10:23 Robert Su 阅读(183) | 评论 (0)编辑 收藏

    cosmos框架主要用来做中小项目开发,丢弃了传统的SSH架构,利用纯的Servlet+JDBC实现数据库操作。开发Web项目,可以实现无需写Java代码, 而实现业务逻辑,并且由于不需要写Java代码,因此,可以不需要重启和重新部署项目,就可以直接测试,达到了开发->刷新测试的水平。根据目前多 个项目的应用实践看来,基本上可以提高一倍到2/3的开发时间,而且性能比起SSH架构还要高,框架还要更加轻量级。因此,这个框架还是比较能够体现敏捷 开发的思想的。

    由于框架摒弃了Hibernate的O/R Mapping工具,因此有一个比较大的问题就是关于数据库移植性的问题,但是,根据公司对于中小项目的经验,一旦客户要移植数据库,几乎就需要重新实现业务逻辑了,因此,对于中小项目来说,这是一个不错的选择。

    ——————
    官方介绍:

    cosmos框架 是一个对于底层数据库、Web服务、JNDI等进行统一界面封装的框架,提供统一的调用接口,并采用命令设计模式,将所有需要调用的命令放置到数据库(或 者其他域)中去,从而可以改变传统的j2ee应用调试的流程:开发-部署-测试或者开发-部署-重新启动-测试,达到像PHP、PERL那样的开发 ->测试的模式。有效地提高了开发速度。

    由于其抛弃了所有的中间层次,包括像Struts、Spring、Hibernate这样的框架,调用数据库应用直接用JDBC的方式进行,因此有效地提高了运行性能。 由于开发的代码可以完全放置到数据库中,因此,可以比较容易地实现共享开发,从而有效地调动起开发人员的积极性。 在cosmos框架中开发一个数据库应用的流程是:开发SQL语句或者存储过程或者函数;然后开发JSP页面进行展示;最后测试结果。完全地省略了开发Java代码的过程,因此,有效地提高了开发速度。 cosmos框架是一个能有效地应用于中小项目的框架,可以供开发人员快速建立原型,从而实现敏捷开发的目的。 在框架中还包括权限和认证的部分框架,因此,用户可以简单地实现用户认证和系统权限的功能。


    http://code.google.com/p/cosmos4j/

    posted @ 2008-12-18 16:56 Robert Su 阅读(601) | 评论 (0)编辑 收藏

    谷歌对亚洲市场的关注,使这家公司在《亚洲华尔街日报》举办的“亚洲最受尊敬跨国公司”读者调查中,排名大幅度提升。在“最能满足消费者需求的创新公司”分类排行榜上,谷歌位居榜首。这是该公司连续第二年蝉联创新公司的冠军。这一排行榜评选的是读者心目中最善于向市场提供新产品和新服务的公司,以及客户服务最为周到的公司。

    <汉译英>

    The Asian focus has helped propel Google up the charts in The Wall Street Journal Asia's reader survey of Asia's most-admired multinationals. Google grabbed the No. 1 spot in the featured category, 'Innovative in Responding to Customer Needs.' It is the second survey in a row Google has held the top spot as an innovator, a category that asks readers to tell us which companies they consider best at bringing new products and services to the market as well as at employing sophisticated customer service.

    posted @ 2008-12-15 00:57 Robert Su 阅读(112) | 评论 (0)编辑 收藏

    现在这个Grid的右键弹出菜单存在一个问题就是右键单击的时候无法直接选择Grid中的一行
        //right menu
                grid.on('rowcontextmenu', rightClickFn,grid);
                
    var rightClick = new Ext.menu.Menu({
                    id:'rightClickCont',
                    items: [
                        {
                            id: 'rMenu1',
                            scope:
    this,
                            text: '审核:1',
                            handler:
    function(){auditWebVideoSecond(grid,1,true);}
                        },
                        {
                            id: 'rMenu2',
                            scope:
    this,
                            text: '审核:2',
                            handler:
    function(){auditWebVideoSecond(grid,2,true);}
                        },
                        {
                            id: 'rMenu3',
                            scope:
    this,
                            text: '审核:3',
                            handler:
    function(){auditWebVideoSecond(grid,3,true);}
                        },
                        {
                            id: 'rMenu4',
                            text:'审核:4',
                            scope:
    this,
                            handler:
    function(){auditWebVideoSecond(grid,4,true);}
                        }
                    ]
                });
                
                
    function rightClickFn(grid,rowIndex,e){
                    e.preventDefault();
                    rightClick.showAt(e.getXY());                    
                }
    function auditWebVideoSecond(videoGrid,flag,change){
        
        
    var datas = grid.getSelectionModel().getSelections();
        
    if(datas.length <= 0)
            
    return;

        
    if(!inputwindow){
             
    var form = new Ext.form.FormPanel({
                            
    //baseCls: 'x-plain',
                            labelWidth: 55,
                            frame:
    true,
                            id:'inputwindow_form',
                            items: [
                             {
                                xtype:'fieldset',
                                title: '处理建议',
                                collapsible: 
    false,
                                autoHeight:
    true,
                                width: 
    350,
                                defaults: {width: 
    330},
                                defaultType: 'textarea',
                                items: [{
                                    hideLabel:
    true,
                                    xtype:'textarea',
                                    name: 'remark',
                                    height:
    80,
                                    id: 'remark'
                                }]},
                                 {
                                xtype:'fieldset',
                                title: '节目来源',
                                collapsible: 
    false,
                                autoHeight:
    true,
                                width: 
    350,
                                defaults: {width: 
    330},
                                defaultType: 'textfield',
                                items: [{
                                    hideLabel:
    true,
                                    xtype:'textarea',
                                    height:
    40,
                                    name: 'program_source',
                                    id: 'program_source'
                                }]},
                            {
                                xtype:'fieldset',
                                layout:'column',
                                id:'priority_group',
                                title: '节目重要程度',
                                collapsible: 
    false,
                                autoHeight:
    true,
                                width: 
    350,
                                items: [
                                {
                                    width:
    60,
                                    layout: 'form',
                                   
    // labelWidth: 10,
                                    items: new Ext.form.Radio({id:'priority0',name:'priority',value:"",hideLabel:true,boxLabel:'无',checked:true})
                                },
                                 {
                                    width:
    80,
                                    layout: 'form',
                                    
    //labelWidth: 40,
                                    items: [new Ext.form.Radio({id:'priority1',name:'priority',value:"0",hideLabel:true,boxLabel:'一般'})]
                                },
                                 {
                                    width:
    80,
                                    layout: 'form',
                                    
    //labelWidth: 40,
                                    items: [new Ext.form.Radio({id:'priority2',name:'priority',value:"1",hideLabel:true,boxLabel:'重要'})]
                                }]                            
                                
                            }
                            ]
                        });
                        
                       inputwindow 
    = new Ext.Window({
                                        title: '处理建议',
                                        width: 
    400,
                                        height:
    300,
                                        layout: 'fit',
                                        bodyStyle:'padding:10px;',
                                        buttonAlign:'center',
                                        resizable:
    false,
                                        closeAction:'hide',
                                        modal:
    true,
                                        items: form,
                                        buttons: [{
                                            text: '保存',
                                            id:'save_function',
                                       },{
                                                        text: '取消',
                                                        handler:
    function(){
                                                            inputwindow.hide();
                                                        }
                                                    }]
                                                });            
                                            
                                    }
                     
       
    if(flag =='1')
       inputwindow.setTitle('处理建议[1]');
       
    else if(flag =='2')
       inputwindow.setTitle('处理建议[2]');
       
    else if(flag =='3')
       inputwindow.setTitle('处理建议[2]');
       
    else if(flag =='4')
       inputwindow.setTitle('处理建议[4]');
       inputwindow.show();
       

    }


    posted @ 2008-12-12 17:36 Robert Su 阅读(685) | 评论 (0)编辑 收藏

    一个树形菜单静态化到客户端成一个数组的测试js:
    var tree_arr=[[1,'新浪播客','0'],[2,'tom','0'],[3,'网易播吧','0'],[4,'新浪播客子博客1','1'],[5,'新浪播客子博客2','1']];

    var root=new Ext.tree.TreeNode({
          id:
    "root",
          text:
    "控制面板",
          expanded:
    true
    });
    var mytree=new Ext.tree.TreePanel({
          el:
    "tree",
         
          animate:
    true,
          title:
    "Extjs静态树",
          collapsible:
    true,
          enableDD:
    false,
          enableDrag:
    false,
          rootVisible:
    true,
          autoScroll:
    true,
          trackMouseOver:
    false,//false则mouseover无效果
          useArrows:false,
          width:
    150,
          lines:
    true 
      });
    function get_root()
    {
        
    var result=new Array();
        
    /*
        for(var i=0; i<tree_arr.length; i++)
            if(0 == tree_arr[i][2])
               root.appendChild(new Ext.tree.TreeNode({
                      id:tree_arr[i][0],
                     text:tree_arr[i][1]
             }));
        
    */
        
    var j=0;                
         
    for(var i=0; i<tree_arr.length; i++){
         
    if(0 == tree_arr[i][2]){
         result[j
    ++]=tree_arr[i];
             }
         }
        
    return result;
    }
    function get_sub(parentId)
    {
        
    var result=new Array();
        
    /*
        for(var i=0; i<tree_arr.length; i++){
            if(0 != tree_arr[i][0]){
                //var temp=Ext.tree.getNodeById(tree_arr[i][0]);
                alert(mytree.getNodeById('1'));
                mytree.getNodeById('1').appendChild(new Ext.tree.TreeNode({
                      id:tree_arr[i][0],
                     text:tree_arr[i][1]
                                 }));
            }    
        }
        
    */
        
    var j=0;
        
    for(var i=0; i<tree_arr.length; i++){
        
    if(parentId==tree_arr[i][2]){
        result[j]
    =tree_arr[i];
        j
    ++;
        }
        }
        
    return result;
    }


    //生成标签页
    var tab = new Ext.TabPanel({
                region:'center',
                deferredRender:
    false,
                activeTab:
    0,
                resizeTabs:
    true// turn on tab resizing
                minTabWidth: 115,
                tabWidth:
    135,
                enableTabScroll:
    true
            });

    Ext.onReady(
    function(){
       
    //layout
       var viewport = new Ext.Viewport({
            layout:'border',
            items:[
                
    new Ext.BoxComponent({
                    region:'north',
                    el: 'north',
                    height:
    80
                }),
    new Ext.BoxComponent({
                    region:'south',
                    el: 'south',
                    height:
    25
                }),{
                region:'west',
                id:'west
    -panel',
                split:
    true,
                width: 
    200,
                minSize: 
    175,
                maxSize: 
    400,
                margins:'
    0 0 0 0',
                layout:'accordion',
                title:'系统菜单',
                collapsible :
    true,
                layoutConfig:{
                    animate:
    true
                    },
                items: [
                    {
                        title:'EXT控件使用',
                        border:
    false,
                        html:'
    <div id="tree-div" style="overflow:auto;width:100%;height:100%"></div>'
                        
    //iconCls:'nav'
                    }]
                },
            tab
    //初始标签页
             ]
        });

        
    //设置树形面板
        var Tree = Ext.tree;
        
    // set the root node
        var root = new Tree.AsyncTreeNode({
            text: 'Ext JS',
            draggable:
    false,
            id:'root'
        });

    var resultRoot=get_root();
    for(var i=0;i<resultRoot.length;i++){
        
    var rootNode=new Ext.tree.TreeNode({
                      id:resultRoot[i][
    0],
                     text:resultRoot[i][
    1]
             });
     
    var resultSub=get_sub(resultRoot[i][0]);
     
    for(var j=0;j<resultSub.length;j++){
        
    var subNode=new Ext.tree.TreeNode({
                      id:resultSub[i][
    0],
                     text:resultSub[i][
    1]
             });
         rootNode.appendChild(subNode);
     }    
      root.appendChild(rootNode);
    }                    

    var contextmenu=new Ext.menu.Menu({
        id:'Context',
        items:[{
            text:'R_menu1',
            handler:
    function(){
                alert('click');
            }
        }
        ]
        
    });    

    mytree.on('contextmenu',
    function(node,e){
        e.preventDefault();
        node.select();
        contextmenu.showAt(e.getXY());
    });    
        
    mytree.setRootNode(root);
    //设置根节点
    mytree.render();


    });
    Ext.fly(A) is null 开始的时候一直提示这个错误~
    后来发现firebug一直提示这个错误,每次调试的时候清空下cache比较好~~~

    posted @ 2008-12-12 10:39 Robert Su 阅读(11877) | 评论 (1)编辑 收藏

    今天数据库直接超过4G,查了下原来是索引问题,一个索引占了2G大小~~

    posted @ 2008-12-09 11:53 Robert Su 阅读(205) | 评论 (0)编辑 收藏

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
     <display-name>系统</display-name>
     <context-param>
      <param-name>log4jConfigLocation</param-name>
      <param-value>/WEB-INF/log4j.properties</param-value>
     </context-param>
     <!-- ContextConfigLocation -->
     <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/vbm_action.xml,/WEB-INF/vbm_hibernate.xml,/WEB-INF/vbm_dao.xml</param-value>
     </context-param>

     <!-- 著名 Character Encoding filter -->

     <filter>
      <filter-name>encodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
      </init-param>
     </filter>
     <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      <init-param>
       <param-name>config</param-name>
       <param-value>struts-default.xml,struts-plugin.xml,struts.xml,struts_books.xml</param-value>
      </init-param>
     </filter>

     <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
     <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
     <!-- 加入jpaFilter,是为了不让hibernate的session过早关闭,因为有的action会通过ajax动态调用 -->
     <filter>
      <filter-name>jpaFilter</filter-name>
      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
      <init-param>
       <param-name>entityManagerFactory</param-name>
       <param-value>entityManagerFactory</param-value>
      </init-param>
     </filter>
     <filter-mapping>
      <filter-name>jpaFilter</filter-name>
      <url-pattern>*.htm</url-pattern>
     </filter-mapping>
     <!-- Listener contextConfigLocation -->
     <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>
     <!-- Listener log4jConfigLocation -->
     <listener>
      <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
     </listener>
     <!-- Spring 刷新Introspector防止内存泄露 -->
     <listener>
      <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
     </listener>
     <!-- session超时定义,单位为分钟 -->
     <session-config>
      <session-timeout>10</session-timeout>
     </session-config>
     <!-- The Welcome File List -->
     <welcome-file-list>
      <welcome-file>index.html</welcome-file>
     </welcome-file-list>
    </web-app>

    posted @ 2008-12-08 11:18 Robert Su 阅读(217) | 评论 (0)编辑 收藏

    Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

    我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。

    Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

    欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。

    Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

    要不断交付可用的软件,周期从几周到几个月不等,且越短越好。

    Business people and developers must work together daily throughout the project.

    项目过程中,业务人员与开发人员必须在一起工作。

    Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

    要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。

    The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

    无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。

    Working software is the primary measure of progress.

    可用的软件是衡量进度的主要指标。

    Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

    敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持恒久稳定的进展速度。

    Continuous attention to technical excellence and good design enhances agility.

    对技术的精益求精以及对设计的不断完善将提升敏捷性。

    Simplicity--the art of maximizing the amount of work not done--is essential.

    要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。

    The best architectures, requirements, and designs emerge from self-organizing teams.

    最佳的架构、需求和设计出自于自组织的团队。

    At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

    团队要定期反省如何能够做到更有效,并相应地调整团队的行为。

    posted @ 2008-12-06 12:25 Robert Su 阅读(132) | 评论 (0)编辑 收藏

    ExtJS例子中的分页是基于JSON来传递对象的
    xmlReader跟JSONReader是有差别的
    今天遇到一个分页问题一直困扰我,总是得不到正确的总数据数。
    后来发现xmlReader中的总记录表示为totalRecords而JSONReader对应的是totalCounts



    posted @ 2008-12-06 11:49 Robert Su 阅读(1021) | 评论 (0)编辑 收藏

    今天跟师兄聊天,他说的一句话令我印象非常深刻——“搞编程3、4年如果还来问你搞java还是C,其实还是很傻逼”
    仔细想想很有道理,搞编程这么久了,其实语言对于程序来说限制很少,关键是对于整个系统体系的理解与把握。

    平时做好很明确的项目规划、进度管理、版本控制,其实这些虽然对于学生来说可能用到的不是特别多,但是还是应该养成良好的习惯

    另外平时做这些代码工人的工作也许对将来找工作意义不是特别大,所以有必要自己合理的安排下时间学习下其他的

    posted @ 2008-11-28 16:32 Robert Su 阅读(174) | 评论 (0)编辑 收藏

    由于项目要部署在weblogic上,装了一个weblogic来测试运行。
    安装配置完之后提示

    ***************************************************************************
    The WebLogic Server did not start up properly.
    java.io.InvalidClassException: javax.management.MBeanAttributeInfo; local 
    class incompatible: stream classdesc serialVersionUID = 7043855487133450673, local class serialVersionUID = 8644704819898565848
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:
    562)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:
    1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:
    1496)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:
    1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:
    1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
    1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:
    1329)
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:
    1667)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:
    1323)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:
    1947)
        at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:
    480)
        at javax.management.MBeanInfo.readObject(MBeanInfo.java:
    669)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
    25)
        at java.lang.reflect.Method.invoke(Method.java:
    597)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:
    974)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:
    1849)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
    1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:
    1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:
    351)
        at weblogic.management.internal.TypesHelper.getMBeanInfo(TypesHelper.java:
    261)
        at weblogic.management.internal.TypesHelper.getAdminOrConfigMBeanInfo(TypesHelper.java:
    366)
        at weblogic.management.internal.ConfigurationMBeanImpl.
    <init>(ConfigurationMBeanImpl.java:128)
        at weblogic.management.AdminServer.
    <init>(AdminServer.java:59)
        at weblogic.management.AdminServerAdmin.initialize(AdminServerAdmin.java:
    245)
        at weblogic.t3.srvr.T3Srvr.initializeHere(T3Srvr.java:
    753)
        at weblogic.t3.srvr.T3Srvr.initialize(T3Srvr.java:
    664)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:
    342)
        at weblogic.Server.main(Server.java:
    32)
    --------------- nested within: ------------------
    weblogic.management.configuration.ConfigurationException:  
    - with nested exception:
    [java.io.InvalidClassException: javax.management.MBeanAttributeInfo; local 
    class incompatible: stream classdesc serialVersionUID = 7043855487133450673, local class serialVersionUID = 8644704819898565848]
        at weblogic.management.internal.TypesHelper.getMBeanInfo(TypesHelper.java:
    266)
        at weblogic.management.internal.TypesHelper.getAdminOrConfigMBeanInfo(TypesHelper.java:
    366)
        at weblogic.management.internal.ConfigurationMBeanImpl.
    <init>(ConfigurationMBeanImpl.java:128)
        at weblogic.management.AdminServer.
    <init>(AdminServer.java:59)
        at weblogic.management.AdminServerAdmin.initialize(AdminServerAdmin.java:
    245)
        at weblogic.t3.srvr.T3Srvr.initializeHere(T3Srvr.java:
    753)
        at weblogic.t3.srvr.T3Srvr.initialize(T3Srvr.java:
    664)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:
    342)
        at weblogic.Server.main(Server.java:
    32)
    --------------- nested within: ------------------
    weblogic.management.configuration.ConfigurationError 
    - with nested exception:
    [weblogic.management.configuration.ConfigurationException:  
    - with nested exception:
    [java.io.InvalidClassException: javax.management.MBeanAttributeInfo; local 
    class incompatible: stream classdesc serialVersionUID = 7043855487133450673, local class serialVersionUID = 8644704819898565848]]
        at weblogic.management.internal.TypesHelper.getAdminOrConfigMBeanInfo(TypesHelper.java:
    377)
        at weblogic.management.internal.ConfigurationMBeanImpl.
    <init>(ConfigurationMBeanImpl.java:128)
        at weblogic.management.AdminServer.
    <init>(AdminServer.java:59)
        at weblogic.management.AdminServerAdmin.initialize(AdminServerAdmin.java:
    245)
        at weblogic.t3.srvr.T3Srvr.initializeHere(T3Srvr.java:
    753)
        at weblogic.t3.srvr.T3Srvr.initialize(T3Srvr.java:
    664)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:
    342)
        at weblogic.Server.main(Server.java:
    32)
    ***************************************************************************

    折腾了半天发现是因为weblogic8.1只能对应JDK1.4
    这个确实不如Tomcat方便




    posted @ 2008-11-27 10:36 Robert Su 阅读(187) | 评论 (0)编辑 收藏

    系统爬虫部分已经相当完善了,现在开始做前段开发,html+avaScript+spring+Hibernate
    ExtJS其实还是很强大,感觉有种webservice编程的感觉

    今天MyEclipse中可以连到数据库上,并且可以显示各个表,可是写个Junit test 抛出异常
    Javava.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
    JUnit控制台输出是这样的

    Could not connect to:  : 11716            
    java.net.SocketException: Unrecognized Windows Sockets error: 
    10106: create
        at java.net.Socket.createImpl(Unknown Source)
        at java.net.Socket.
    <init>(Unknown Source)
        at java.net.Socket.
    <init>(Unknown Source)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.connect(RemoteTestRunner.java:
    560)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
    377)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
    196)



    奇怪的是我用笔记本写个测试连接就没问题;
    不知道是Myeclipse出了问题还是系统出了问题,之前装各种服务器把系统搞的有点毛病;
    希望这里有高人看到了给指点下这个问题原因在哪里~小弟先谢过

    posted @ 2008-11-25 12:31 Robert Su 阅读(301) | 评论 (0)编辑 收藏

    <script>
    function a()
    {
    alert('some thing');
    }

    Ext.onReady(function(){
    Ext.get("btnAlert").addListener("click",a);
    });
    </script>
    <input id="btnAlert" type="button" value="alert框" />

    addLinster方法的另外一个简写形式是on
    Ext.get("btnAlert").on("click",a);
    ExtJS支持事件队列,可以往对象的某一个事件中添加多个事件响应函数——

    Ext.onReady(function(){	
    Ext.get("btnAlert").on("click",a);
    Ext.get("btnAlert").on("click",a);
    })






    posted @ 2008-11-24 23:09 Robert Su 阅读(104) | 评论 (0)编辑 收藏

    Ext.onReady(function(){
        Ext.QuickTips.init();

      

        var dateMenu = new Ext.menu.DateMenu({
            handler : 
    function(dp, date){
                Ext.example.msg('Date Selected', 'You chose {
    0}.', date.format('M j, Y'));
            }
        });

        
    var colorMenu = new Ext.menu.ColorMenu({
            handler : 
    function(cm, color){
                Ext.example.msg('Color Selected', 'You chose {
    0}.', color);
            }
        });

        
    var menu = new Ext.menu.Menu({
            id: 'mainMenu', 
            items: [   
    //定义菜单中的元素
                {
                    text: 'I like Ext',
                    checked: 
    true,     
                    checkHandler: onItemCheck
                },
             
               '
    -',  //添加菜单上的分隔符
               {
                    text: 'Radio Options',
                    menu: {      
    //定义二级菜单
                        items: [
                          
      '<b class="menu-title">Choose a Theme</b>',
                            {
                                text: 'Aero Glass',
                                checked: 
    true,
                                group: 'theme',
                                checkHandler: onItemCheck
                            }, {
                                text: 'Vista Black',
                                checked: 
    false,
                                group: 'color',
                                checkHandler: onItemCheck
                            }
                        ]
                    }
                },
                {
                    text: 'Choose a Date',
                    iconCls: 'calendar',
                    menu: dateMenu

                },
                {
                    text: 'Choose a Color',
                    menu: colorMenu    //这里前面定义了

                }
            ]
        });

        
    var tb = new Ext.Toolbar();  
        tb.render('toolbar');

        tb.add({
                text:'Button Menu',
                iconCls: 'bmenu',  
    //
                menu: menu  //分配menu到toolbar
            });

        
    // functions to display feedback
        function onButtonClick(btn){
            Ext.example.msg('Button Click','You clicked the 
    "{0}" button.', btn.text);
        }

        
    function onItemClick(item){
            Ext.example.msg('Menu Click', 'You clicked the 
    "{0}" menu item.', item.text);
        }

        
    function onItemCheck(item, checked){
            Ext.example.msg('Item Check', 'You {
    1} the "{0}" menu item.', item.text, checked ? 'checked' : 'unchecked');
        }

        
    function onItemToggle(item, pressed){
            Ext.example.msg('Button Toggled', 'Button 
    "{0}" was toggled to {1}.', item.text, pressed);
        }

    });


    在html中加入
        <div id="toolbar"></div>

    posted @ 2008-11-18 16:50 Robert Su 阅读(2978) | 评论 (4)编辑 收藏

     计算CPU利用率:
      1,   取出系统中CPU个数;     
      2,   取出当前系统时间(Ticks个数),减去原来保存的系统时间,得出从上次取值到目前的系统时间差;     
      3,   取出系统当前空闲时间,减去原来保存的空闲时间,得出这个时间段空闲时间     
      4,   用这个时间段空闲时间除以系统时间,得出这段时间系统的CPU空闲率     
      5,   用100-(系统的空闲率)/(CPU个数)所得的值就是CPU占有率     


        请问这个算法是否适用于多处理器情况?
        是否直接除以CPU个数就ok了?

    posted @ 2008-11-11 16:36 Robert Su 阅读(535) | 评论 (0)编辑 收藏

    java是一种解析性的语言,可是多了一个中间步骤,就是把源代码编译成class文件,不过此编译非编译器的编译,因为class里面不是机器语言或汇编语言,而是经过编码的8位字节二进制流。JVM是java的解析器。

    python是一门地地道道的解析型语言。
    它们之间的效率谁更高呢?

    大头 23:56:14
    “如果相同功能的class和python,class执行要快,因为class已经全部翻译好了,python还要一句一句解析。”

    Java多了编译成class的过程,所以效率相对于python要慢一些。

    事实上python也可以产生class一样的东西
    字节编译的.pyc文件
    “输入一个模块相对来说是一个比较费时的事情,所以Python做了一些技巧,以便使输入模块更加快一些。一种方法是创建 字节编译的文件 ,这些文件以.pyc作为扩展名。字节编译的文件与Python变换程序的中间状态有关(是否还记得Python如何工作的介绍?)。当你在下次从别的程序输入这个模块的时候,.pyc文件是十分有用的——它会快得多,因为一部分输入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。所以,现在你知道了那些.pyc文件事实上是什么了。”——《python简明教程》


    (烦请明白的看到了错误之处给指正:)

    附:
    编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
    解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.

    posted @ 2008-11-08 00:16 Robert Su 阅读(4436) | 评论 (0)编辑 收藏

    利用类库MySQLdb
    实例代码如下:

    import MySQLdb
    conn 
    = MySQLdb.connect("localhost","root","111","test")
    c
    =conn.cursor()
    c.execute(
    """select * from name""")
    out 
    = c.fetchall();
    print out

    posted @ 2008-11-06 16:51 Robert Su 阅读(802) | 评论 (0)编辑 收藏

    从Pythoner赖勇浩的blog看到一篇文章关于利用python来进行图像处理的,很是觉得好玩,于是试验了下。
    Python Imaging Library--PIL
    import Image
    img 
    = Image.open('test.bmp')
    print img.format, img.size, img.mode
    new_img 
    = img.convert('L')
    new_img.show();
    new_img = img.convert('L')是把图像转换为灰度。
    打开PIL的handbook研究一番

    截取图像中的一块box大小
        box = (100, 100, 400, 400)
        region = im.crop(box)

    图片逆时针旋转90度
    im.transpose(Image.ROTATE_90)
    图片逆时针旋转270度
    im.transpose(Image.ROTATE_270)
    图片倒置(逆时针旋转180度)
    im.transpose(Image.ROTATE_180)

    out = im.transpose(Image.FLIP_LEFT_RIGHT)     左右互置
    out = im.transpose(Image.FLIP_TOP_BOTTOM)  上下互置

    用ImageFilter模块来进行图像增强:
    Point Operations:
    # multiply each pixel by 1.2
    out = im.point(lambda i: i * 1.2)

    (未完待续)
    http://www.pythonware.com/library/pil/handbook/index.htm

    附:赖老师的文章:用python做图像处理 http://blog.csdn.net/lanphaday/archive/2007/10/28/1852726.aspx

    posted @ 2008-11-06 15:38 Robert Su 阅读(648) | 评论 (0)编辑 收藏

    今天新系统装完IIS测试之后,又装了一个office 2007(daob)、跟D-tool,然后IIS直接无法启动。
    重新安装也不行。
    到微软官方网站找解决办法,恢复MMC还是无济于事

    最终解决办法很简单,先把os安装盘装入光驱,卸载IIS,然后重新安装,ok了

    posted @ 2008-11-06 13:44 Robert Su 阅读(144) | 评论 (0)编辑 收藏

    #include "stdafx.h"
    #include 
    <iostream>
    #include 
    <vector>   
    using   namespace std;   


    void   vect(vector<int>   &ve)   
    {   
              ve.push_back(
    100);   
    }
       
        
    void   main()   
    {   
              vector
    <int>   v;   
              vect(v);
              
    for (vector<int>::iterator it = v.begin();it != v.end();++it)
              cout
    <<*it<<endl;}

              cin.
    get();
    }

    posted @ 2008-10-10 11:10 Robert Su 阅读(4629) | 评论 (0)编辑 收藏

     

    #include <iostream> 
    #include 
    <vector> 

    using namespace std; 
    int main()
    int ia[] = {1,2,3,4,5,6,7,8,9}
    vector
    <int> ivec(ia,ia+9); 
    vector
    <int> tvec(ia,ia+9); 
    for (vector<int>::iterator it = ivec.begin();it != ivec.end();++it)
    for (vector<int>::iterator iv = tvec.begin();iv != tvec.end();++iv)
    cout
    <<*it<<"*"<<*iv<<"="<<*it * *iv<<" "
    if(*iv == 9
    cout
    <<endl; 
    }
     
    }
     
    }
     

    posted @ 2008-10-08 15:34 Robert Su 阅读(1429) | 评论 (0)编辑 收藏

    111
    import sys
    def readfile(filename):
            
    '''Print a file the standard output.'''
            f 
    = file(filename)
            
    while True:
                    line 
    = f.readline()
                    
    if len(line) == 0:
                            
    break
                    
    print line, #notice comma
            f.close()

    if len(sys.argv) < 2:
            
    print 'No action specified.'
            sys.exit()

    if sys.argv[1].startswith('--'):
            option 
    = sys.argv[1][2:]
            
    if option == 'verison':
                    
    print 'Version 1.2'
            
    elif option == 'help':
                    
    print '''\
    This program prints files to the standard output.
    Any number of files can be specified.
    Options include:
            --version : Print the version number
            --help    : Display this help
    '''
                    
    else:
                    
    print 'Unknown option.'
                    sys.exit()
    else:
            
    for filename in sys.argv[1:]:
                    readfile(filename)
    运行提示:
    D:\python>python cat.py
      File "cat.py", line 27
        else:
           ^
    SyntaxError: invalid syntax

    谁知道这个哪里出错了啊

    posted @ 2008-08-15 17:41 Robert Su 阅读(1205) | 评论 (2)编辑 收藏

     

    #include <stdio.h> 
    void ShowMe() 

      printf(
    "showme\n"); 

    int add(int value,int value1) 

      
    int * pAdd=&value; 
      
    int* value2=pAdd-1
      
    *value2=*value2-0x0e
      
    return (value+value1); 

    /* 
    */ 
    int add3v(int v,int v1,int v2) 

      
    return (v+v1+v2); 

    int main(int argc, char* argv[]) 
    {    ShowMe(); 
          
    int temp=add(10,12); 
          
    int te=add3v(3,4,5); 
            printf(
    "%d,%d",temp,te); 

            
    return 0
    }

    这个程序输入在VC下是一直是showMe,死循环
    结果是:不停的调用showme()。
    showme
    showme
    showme
    showme
    showme
    showme
    showme
    。。。


    请教了同学,找出了答案
    这个是自动变量存储栈,传给函数的参数是以栈这种结构来开辟暂时存贮空间的。现在的C++编译器处理函数参数后按照参数表的顺序往临时开辟的栈空间中压入数据,以这段程序来说~先压进value,再压进value1,而函数内部语句的执行代码也是以栈的形式存贮的
     ShowMe();这段程序的执行代码是最先被压入函数的执行栈中的,int temp=add(10,12); 地址要高于ShowMe();这个函数的地址
    ,int temp=add(10,12); 把地址又改回里低地址。
    局部函数的参数
    函数内代码的执行,都是按照栈这种方法进行的

    这道题目不能说没有意思,主要考察了基础的汇编以及堆栈知识。
    int* value2=pAdd-1;
    *value2=*value2-0x0e;

    这里明显修改了add函数返回地址,刚恰好showme()的入口地址,所以就
    add->showme->add->showme ...
    不停的调用下去。


    posted @ 2008-08-08 18:14 Robert Su 阅读(1472) | 评论 (0)编辑 收藏

    去年的一道面试题,想起来了,顺遍把代码贴到这里
    两个数组合并到一起,然后排序;用set确实比较方面了

    #include<iostream>
    #include
    <set>  
    #include
    <iterator>
    #include
    <algorithm>  
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {

        
    int a[5]={2,5,1,2,3    };
        
    int b[10]={8,9,5,9,7,1,3,4,4,6};

        
    set<int>ist(a,a+sizeof(a)/sizeof(a[0])); 
        
    set<int>::iterator  itor; 
        
    set<int>it(b,b+sizeof(b)/sizeof(b[0]));
        
    set<int>::iterator p;
        
    for( itor = ist.begin();itor !=ist.end();++itor)   
        { 
            cout
    <<*itor<<endl;
        }
        
    for(p=it.begin();p!=it.end();++p)
        { 
            cout
    <<*p<<endl;

        }
        cout
    <<"合并后:"<<endl;  

        
    set<int>su;
        
    set<int>::iterator q;
        set_union(ist.begin(),ist.end(),it.begin(),it.end(),inserter(su,su.begin()));

        
    for(q=su.begin();q!=su.end();++q)
        {
            cout
    <<*q<<endl;
        }
        
    return 0;
    }

    }

    posted @ 2008-08-08 15:26 Robert Su 阅读(1277) | 评论 (0)编辑 收藏

    今天qu推荐了一个软件给我——Cardio Calipers
    一款刻度尺软件,可以测量屏幕上某个东西的长度,挺好玩的,很有想法:)

    下载地址:
    http://www.iconico.com/cardioCaliper/

    附截图




    这个尺子通过鼠标可以旋转,拉长缩短

    posted @ 2008-08-07 15:50 Robert Su 阅读(2629) | 评论 (5)编辑 收藏

    操作的系统的多进程实现了___________
    多线程的根本是________________
    JVM线程调度方式是______________

    posted @ 2008-07-24 10:37 Robert Su 阅读(1072) | 评论 (0)编辑 收藏

    今天晚上真的非常郁闷.本来心情高涨的要继续写程序.但是老乡给我传了一个抓包程序要我帮他测试下,一装直接蓝屏.
    一开机就蓝屏,可以进安全模式,删了该删的还是继续蓝.
    这哥们居然下线睡觉去了.

    装进去系统盘,提示找不到OS
    可是我把Ubuntu的盘放进去,居然就出现提示,问我要不要安装.....

    奇怪...
    哪位这方面的行家给指点一下啊

    posted @ 2008-06-25 02:48 Robert Su 阅读(406) | 评论 (0)编辑 收藏

    package image;
    /**
     * Robert.SU
     */
    import java.awt.*;
    import java.awt.event.*;


    public class LoadFromAppli extends Frame{
        
        private static final long serialVersionUID = 1L;
        Image im;
        public LoadFromAppli(){
            im=Toolkit.getDefaultToolkit().getImage("E:""1.jpg");
            addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
        }
        public void paint(Graphics g){
            g.drawImage(im, 20, 20, this);
        }

        public static void main(String[] args){
            LoadFromAppli f = new LoadFromAppli();
            f.setSize(200,200);
            f.show();
        }

    }

    Paint方法显示图像

    posted @ 2008-06-23 15:43 Robert Su 阅读(818) | 评论 (0)编辑 收藏

    很久都是用eclipse来写java程序
    今天看core java,做上面的练习,居然welcome都出java.lang.NoClassDefFoundError这样的错误
    找了半天才发现是新系统,没有设置classpath

    设置了居然还是不行

    C:\Program Files\Java\JDK1.5\lib;C:\Program Files\Java\JDK1.5\lib\tools.jar

    都是长时间不练习的原因~~~
    应该在前面加   .;

    .;C:\Program Files\Java\JDK1.5\lib;C:\Program Files\Java\JDK1.5\lib\tools.jar

    少了 < .; > 就造成巨大的差别
    在沒有做任何设定之下 , 预设的CLASSPATH就是一个 .
    这个 . 代表 命令提示字元的当前目录
    没设定比设定错误还要好一点(对新手而言) , 只要 .class 在当前目录 , 还是可以执行程序的

    但是你若下了设定
    SET CLASSPATH=C:"j2sdk1.4.1_03"lib;C:"j2sdk1.4.1_03"lib"tools.jar;
    少了这个. 若你当前的目录却不是 C:"j2sdk1.4.1_03"lib , 就會发生NoClassDefFoundError

    正確的設定
    SET CLASSPATH=.;C:"j2sdk1.4.1_03"lib;C:"j2sdk1.4.1_03"lib"tools.jar;
    表示當前的目錄 , C:"j2sdk1.4.1_03"lib" , 以及 tools.jar 內的class都可以載入



    posted @ 2008-06-04 03:19 Robert Su 阅读(25832) | 评论 (5)编辑 收藏



    这条曲线不需要过多的说明
    2008 年 5 月 19 日 14 时 28 分
    之后的三分钟

    posted @ 2008-05-23 01:37 Robert Su 阅读(183) | 评论 (0)编辑 收藏

    通讯的力量

                          ——汶川地震之后

           四川汶川地震以来,救援工作苦于通讯的中断而无法有效的开展。甚至中国之前的一则广告(广告宣称某次地震中,中国移动基站正常工作使得人员获救)还成为人们的笑柄。在重灾区仅有几部卫星电话可以使用。

           笔者立即联想到了曾经的“铱星计划”,那个伟大的计划!也许铱星正常投入运营的话,全世界的灾害救援工作就会得以在信息通畅的情况下快速开展。摩托罗拉发起的“铱星计划”被称为世界科技史上最了不起的、最可惜的、也是最失败的项目之一。

           它是由77颗近地卫星组成一个覆盖全球的卫星系统,由于铱元素有7个原子,所以该计划命名为铱星计划,虽然后来卫星由于预算削减了11颗。

           铱星计划确实是科学史上一个宏伟的计划,它试图通过卫星与卫星之间的传输来把地面的蜂窝移动系统搬到了天上。这样就不需要数目众多的地面基站。当遇到汶川地震这样重大的自然灾害的时候,照样可以保证通信的顺畅。

           而地面的蜂窝移动通信系统,不论是CDMA还是GSM,都是“地上”通信系统,都需要数目众多的基站来进行信号通信。当地震发生的时候,地区内基站的电源供应被切断,基站的电池维持时间又很短,基站在没有电源供应的情况下就无法正常工作,只能被迫退出服务。当区域内一定数目的基站无法正常工作的时候,这一区域内的用户手机自然无法得到信号。

    也许有人不禁要问,那为什么在几百里外的成都,手机在地震当时也完全成为摆设。那里地震远没有损坏基站的程度啊?

    每个基站承受的手机接入是有数的,其他地方大面积基站退出服务,而与此同时,国内其他省份的电话都打入到四川,话务量瞬时高峰,核心网的承载冗余达到临届,导致话务拥塞的出现。这其实是正常的。

    很多用户抱怨中国移动、联通不可靠,其实这也是对他们工作的一种误解。从抢修速度来看,国内的几大通信运营商的反应速度还是很迅速的。

    另外还有很多网友说华为不爱国,捐款才500W RMB,这其实也是误解,据笔者通过华为员工了解,华为此次捐给四川震区的设备总价值就近一个亿,国内员工的捐款高达1300万人民币,国际员工比这个数目更多,只是统算在海外捐款里面。

    与这次通信网瘫痪形成对比的是因特网,当电话打不通的时候,我们只有通过网络来了解信息,以及救援工作的进展,通过上网来与成都的同学、朋友保持联系。在成都的高校中,IP电话超市门口排起长长的队伍,IP电话又称互联网电话、网络电话。

    那为什么手机没信号,电脑上网却可以畅通无阻呢?原因很简单,传输数据的光缆没事,中转数据的中心机房没事。这次事件也并不能说明Internet当初的架构就比蜂窝式通信的架构先进。上次台湾地震的时候,海底光缆受到地震损坏,我们访问国际网站还是一样受阻。

    那为什么上次台湾省地震的时候光缆震断导致全国性的网络缓慢,而这次遇到更强的地震灾害,没有出现大面积网络瘫痪?这主要是因为台湾海峡震断的那条光缆是主干传输线,而这次成都、绵阳市区震情相对不是那么严重,主干网经过的地区没有大面积地震灾害,同时相对于海底光缆,陆地传输线路受保护相对好些。

    毋庸置疑,信息的通畅对抗震救灾有着至关重要的作用,往往在灾难面前我们才意识到通讯的力量,期望灾区的通信,灾区的一切可以早日恢复正常。也期望通讯技术在自然灾害来临的时候照样正常工作,那时通讯的力量还会真正体现。



    (请大家指正)

    posted @ 2008-05-16 10:51 Robert Su 阅读(1304) | 评论 (5)编辑 收藏

    widget……
    当了解这个东西的意义的时候,也许就会崇拜Yahoo工程师
    当认真阅读Yahoo Map API并对比Google Map API,以及Yahoo 翻译软件的时候,也许才明白为什么微软要收购Yahoo,也会了解,微软的开价其实不高。
    除了发明java以外,Sun还有Solaris,它很强大,是我们使用的windows没法比的,当然也没有必要比,user不一样,DTrace一个就足够说明了。。。

    Sun的创始人之一Joye Bill,他发明了BSD、NFS、TCP/IP、C shell。Sun的Sparc芯片八核,每个core支持四个线程 == 32 个 P4

    Sun已经把这些都开源了,IBM也大力提倡开源,Apache就是IBM资助的。所以LAMP,Sun不会收购,顺便说一句,开源也分开源协议的,这里就不做赘述。
    Just like IBM的服务器可以100年可以不down机,所以他的Thinkpad比Dell、联想的要可靠。不要跟不懂的计算机的人一样,大肆叫嚣“联想把IBM收购了”,so ******

    Oracle现在市值很高,最高1000亿$ , 现在Sun的市值110亿$,IBM--1310,所以请不要再说Sun收购甲骨文这种蠢话
    Sun发明了java,可却没有在java上面赚到一分钱,而赚的最多的是IBM & Oracle


     

    This is the last time.

    posted @ 2008-05-12 04:19 Robert Su 阅读(180) | 评论 (0)编辑 收藏

    当得知谷歌金山词霸(http://g.iciba.com/)发布的消息之后,我第一时间下载并安装了这款软件。
    先谈下大体印象
    1、界面清新了很多;
    2、启动速度大大提高,本人的笔记本比较老,性能不是很好,在Eclipse运行的状态下,运行金山词霸还是有些负荷高,不过谷歌金山词霸占用内存显然没有原先的版本那么大;
    3、主界面简洁明了“词典、例句、翻译”——字词、句、全文,so good,so powerful:)

    我之前参与过一些教材的翻译,当时用的辅助工具是“灵格斯”,那时感觉这个软件很小巧实用,里面集成了很多家的全文翻译,比如Google翻译、yahoo翻译,不过现在这款软件已经变烂了。
    言归正传
    深入使用……
    我在谷歌词霸中输入“龙”首先分别按照词典给出了不同的条目,非常简洁


    当我双击某个单词的时候,谷歌词霸会执行查询,这点是值得称赞的改进。
    我非常欣赏的是Google词典,当我查龙的时候,我明白了国外人所认为的dragon,并不是我们传统中的龙,而是“恶龙”,应该翻译成Loong。
    有人提到谷歌金沙词霸对Firefox支持不佳,我的版本是2.0.0.14,不存在这样的问题。
    还有谷歌词霸的语音功能,对中文的朗读不支持,不过英文单词的发音还是没有问题。
    暂时写到这里……

    posted @ 2008-05-09 14:27 Robert Su 阅读(3229) | 评论 (7)编辑 收藏

    ERROR:JDWP Unable to get JNI 1.2 environment ,jvm-> GetEvn() return =-2
    原因:tomcat-eclipse-plugin插件启动报错
    ERROR:JDWP Unable to get JNI 1.2 environment ,jvm-> GetEvn() return =-2

    原因:JDK版本问题
    查阅Java Doc,发现其中有这么一段话: 

    http
    ://download.java.net/jdk6/docs/api/java/io/Console.html 

    "Whether a virtual machine has a console is dependent upon the underlying platform and also upon the manner in which the virtual machine is invoked. If the virtual machine is started from an interactive command line without redirecting the standard input and output streams then its console will exist and will typically be connected to the keyboard and display from which the virtual machine was launched. If the virtual machine is started automatically, for example by a background job scheduler, then it will typically not have a console." ">http://download.java.net/jdk6/docs/api/java/io/Con..." 

    翻译一下: 

    虚 拟机是否有一个控制台Console取决于所依赖的平台和虚拟机解析该方法的方式。如果虚拟机是从一个交互式的命令行中启动的,而没有重定向标准输入和输 出流,那么虚拟机会自动的连接到键盘作为标准输入,并且把启动虚拟机的地方作为标准输出。如果虚拟机是自动启动的,例如通过后台的一个任务计划,那么典型 的情况就是没有Console控制台
    ......。 

    于是,思考一下我们运行上面程序的地点
    &mdash;&mdash;Eclipse等集成开发环境,这对于上面描述中的把启动虚拟机的地方作为标准输出来说是不合适的,这里的Console()返回的默认情况下是Null,于是就产生了上面的出错信息。(也许未来Eclipse会有所改进吧) 

    怎么解决该问题呢?这里提供两条思路给大家(已经实际操作过,可以实现功能的正常运作) 

    1、使用命令行进行运行,编译可以使用集成开发环境。这样可以完成标准输出。 
    2、在程序中重定向标准输出到其他的设备或者方式(例如写到文本文件),这样也可以
    "比较不方便的"完成该功能。






    posted @ 2008-04-13 23:01 Robert Su 阅读(3969) | 评论 (7)编辑 收藏

     

    D.O.H. Unit Testing

    http://dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/d-o-h-unit-testing

    Testing Widgets for Accessibility

    http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/writing-your-own-widget-class/testing-widgets-

    D.O.H. Command Line

    http://dojotoolkit.org/forum/dojo-core-dojo-0-9/dojo-core-support/d-o-h-command-line

    AntDojoUnit Test集成问题

    http://trac.dojotoolkit.org/changeset/6867

    http://trac.dojotoolkit.org/ticket/673

    posted @ 2008-04-03 14:55 Robert Su 阅读(377) | 评论 (0)编辑 收藏

    通过Ant Jetty plugin我们可以在ant构建脚本中直接启动Jetty。

    <project name="Jetty-Ant integration test" basedir=".">
      
    <path id="jetty.plugin.classpath">
        
    <fileset dir="jetty-lib" includes="*.jar"/>
      
    </path>
      
    <taskdef classpathref="jetty.plugin.classpath" resource="tasks.properties" loaderref="jetty.loader" />

      
    <target name="jetty.run">
        
    <jetty />
      
    </target>
    </project>





    posted @ 2008-03-20 11:11 Robert Su 阅读(773) | 评论 (0)编辑 收藏

     [report] nothing to do: no runtime coverage data found in any of the data files

    Ant与Emma集成的时候总提示这种错误。。。查了下Emma QA说是runtime与metadata


    源代码如下,哪位遇到过这种问题。。

    <?xml version="1.0"?>
    <project name="Toccata Code Quality" default="init" basedir=".">
        

            
        
    <property name="junitJar" value="lib/UT/junit.jar"/>
        
    <property name="emmaJar"  value="lib/UT/emma.jar"/>
            
        
    <!-- 目录配置 -->
        
    <property name="base.dir" location="."/>
        
        
    <property name="lib.dir" value="./lib"/>
        
    <path id="classpath.main">
            
    <pathelement location="${build.src}" />
        
    </path>
        
    <property name="build.dest" value="./src/classes"/>
        
    <property name="build.test.bin" value="./src/classes/test"/>

        
        
    <property name="build.javadocs" value="./src/UT/doc"/>
        
    <property name="build.report" value="./report" />
        
    <property name="build.src" value="./src/UT/" />
        
    <property name="build.test" value="/src/UT/test" />
        
    <property name="build.instrument" location="./instrbin" />
        
    <property name="coverage.dir" location="${base.dir}/report/UT/coverage" />

        
    <property name="emma.enabled" value="true" />
        
    <!--指示需要注入字节码的Java类的路径-->
        
    <path id="classpath.main">
            
    <pathelement location="${build.dest}" />
        
    </path>
        
        
    <path id="emma.lib">
                
    <pathelement location="lib/UT/emma.jar" />
                
    <pathelement location="lib/UT/emma_ant.jar" />
        
    </path>
        
        
    <taskdef resource="emma_ant.properties" classpathref="emma.lib" />

        
    <target name="init">
            
    <mkdir dir="${build.instrument}"/>
            
    <mkdir dir="report/UT/htmlreport"/>    
            
    <mkdir dir="${build.dest}"/>
        
    </target>
            
        
    <target name="compile" depends="init">
                
    <javac destdir="${build.dest}" srcdir="${build.src}/ibm" debug="on">            
                    
    <classpath>
                        
    <pathelement location="${junitJar}"/>
                        
    <pathelement location="${emmaJar}"/>
                    
    </classpath>
                
    </javac>
                
    <copy todir="${build.dest}">
                    
    <fileset dir="${build.src}/ibm">
                        
    <include name="**/*.class"/>
                        
    <exclude name="**/*.java" />
                    
    </fileset>
                
    </copy>
        
    </target>
        
        
    <target name="compile-test">
            
    <mkdir dir="${build.test.bin}" />
                    
    <javac destdir="${build.test.bin}" debug="on">
                        
    <src path="${build.test}" />
                        
    <classpath location="${build.dest}">
                            
    <pathelement location="${junitJar}"/>
                        
    </classpath>
                    
    </javac>
                    
    <copy todir="${build.test.bin}">
                        
    <fileset dir="${build.test}">
                            
    <include name="**/*.class"/>
                            
    <exclude name="**/*.java" />
                        
    </fileset>
                    
    </copy>
        
    </target>

        
        
        
    <!--对编译在路径build.src中的Java类注入字节码, 并且把注入字节码的新Java类存放到路径build.instrument-->
        
    <!--覆盖率的元数据存放在路径coverage.dir中-->
        
    <!--插入字节码-->
        
        
    <target name="instrument" depends="compile">
                
    <emma enabled="${emma.enabled}">
                    
    <instr instrpathref="classpath.main" 
                            destdir
    ="${build.instrument}" 
                            metadatafile
    ="${coverage.dir}/metadata.emma" merge="true">
                        
                    
    </instr>
                
    </emma>
                
    <copy todir="${build.instrument}">
                        
    <fileset dir="${build.dest}">
                            
    <include name="**/*.class" />
                            
    <exclude name="**/*.java" />
                        
    </fileset>
                
    </copy>
        
    </target>
        
        
    <target name="run" depends="compile">
            
    <junit fork="true" forkmode="once">
                            
                
    <jvmarg value="-Demma.coverage.out.file = ${coverage.dir}/metadata.emma" />
                
    <jvmarg value="-Demma.coverage.out.merge = true" />

                
    <classpath>
                    
    <pathelement location="${build.src}/"/>
                    
    <pathelement location="${junitJar}"/>
                    
    <pathelement location="${emmaJar}"/>
                
    </classpath>
                
                
    <formatter type="xml"/>
                
    <!-- formatter用于格式化测试输出结果 -->
                
    <batchtest haltonfailure="no" todir="report">
                    
    <fileset dir="${build.test}">
                        
    <include name="**/*Test.java"/>
                    
    </fileset>
                
    </batchtest>
            
    </junit>
            
    <junitreport todir="${build.report}/UT/htmlreport">
                
    <fileset dir="./report" id="id">
                    
    <include name="*.xml"/>
                
    </fileset>
                
    <report todir="${build.report}/UT/htmlreport" format="frames" Styledir="./report/XSL">
            
    </report>
                
            
    </junitreport>
            
    <echo message="end running junit test"></echo>
        
    </target>


        
    <target name="coverage_report" depends="instrument,compile">
                
    <!--如果属性emma.enabled的值是true,就生成代码覆盖率报告 -->
                
    <emma enabled="${emma.enabled}">
                    
    <report sourcepath="${build.src}/ibm"
                        sort
    ="+block,+name,+method,+class"
                        metrics
    ="method:70,block:80,line:80,class:100">
                        
                    
                        
    <fileset dir="${coverage.dir}">
                            
    <include name="*.emma" />
                        
    </fileset>
                        
                        
    <html outfile="${coverage.dir}/coverage.html" />

                    
    </report>
                
    </emma>
        
    </target>
        
        
        
    <!-- checkstyle -->
        
    <taskdef resource="checkstyletask.properties" classpath="lib/checkstyle/checkstyle-all-4.4.jar" />
        
    <target name="checkstyle_report">
            
    <checkstyle config="conf/checkstyle/bpf_checks.xml">
                
    <fileset dir="src" includes="**/*.java" />
                
    <formatter type="plain" />
                
    <formatter type="xml" toFile="report/checkstyle/checkstyle_errors.xml" />
            
    </checkstyle>
            
    <xslt in="report/checkstyle/checkstyle_errors.xml"
                out
    ="report/checkstyle/checkstyle_report.html" 
                style
    ="conf/checkstyle/checkstyle-frames.xsl" />
        
    </target>

    </project>




    posted @ 2008-03-18 12:03 Robert Su 阅读(1401) | 评论 (2)编辑 收藏

    说起中国的通信行业,不能不提眼下非常火的3G,非常火的TD-SCDMA,也不能不提下华为和中兴,这两个近年来走出国门,在国际市场杀出血路的民族企业的代表,要不是他们积极的走出去,和国际巨头博弈,才有了今天的发展,才有了中国企业能够在4个主流3G技术上都有所斩获的成绩。
    中国在国际通信界还是有所斩获的。
    可与之对比的中国软件行业,却始终还没有大的成就,始终在给别人当蓝领,软件蓝领。可以说都还没有跟上国际软件行业的步伐。
    ……

    posted @ 2008-03-13 15:08 Robert Su 阅读(153) | 评论 (0)编辑 收藏

     硅谷一位最成功的 CEO 讲,凡是和微软合作的公司,最后都没有好结果。IBM 是其中第一个吃亏者。当时只对大客户感兴趣的IBM 决定和微软共同开发微机的新的操作系统 OS/2,以谋求在未来微机的软件市场占得先机。可盖茨不是这么想的,他不想与巨大的IBM

    分蛋糕吃,于是暗度陈仓,一方面在与IBM的研发中挣点小钱,另一方面暗地研发windows。当windows诞生的时候,微软帝国就形成了。

        IBM的企业文化中有一条是诚实守信,可IBM显然还没有像微软一样对孙子兵法深入研究——兵不厌诈。

     
    在中国吃亏最明显的就是金山。金山废了好大力气才使得
    WPS 可以兼容office文档,微软意识到不可以,于是跟金山合作,当他弄明白金山WPS内部代码之后,在新版的office中,直接对WPS封杀。一个无法兼容office文档格式的办公软件显然是卖不出去的。

    说来还真是奇怪,看看那些跟微软合作过的公司。我搜了一下那些曾经与微软进行过技术合作的大公司,业界的霸主,结果都比较的不乐观,江河日下。

    Palm,摩托……

    Palm曾经是掌上计算平台的绝对王者,当现在google如此热衷手机平台的时候,大家才意识到,原来移动平台(手机、PDA)就是下一场革命的主战场,谁占领这个计算平台谁就如同当今微软在PC OS的地位。palm把握了先机,可他们没有把握这次机遇,他们选择了与微软合作,合作的结果是什么?Windows   Mobile的壮大,palm OS的萎缩。
     

    其实再反观那些一直拒绝与微软进行合作的公司。苹果、Sun……

    苹果一直不在自己的苹果机上使用微软的windows视窗,也不肯将自己的Mac视窗与微软进行合作开发。当时比尔盖茨写信给苹果总裁,希望可以通过投资或者授权的方式来与苹果进行合作,一起开发Mac OS,苹果不为所动,也许苹果错失了一次领导PC标准的机会,可苹果迷们应该庆幸,苹果依然健在。

    还有Sun,一个从诞生之处就拒绝与微软进行合作的公司,Scot McNealy甚至说sun唯一不能兼容的就是微软。 IBM会认为Sun狭隘,也许正是这种狭隘,才有了JAVA,才保证了Java独立于微软的操作系统(事实上微软在得到sunjava使用许可后做的第一件事情就是消灭了网景)。

        IBM、苹果以及SUN都是令人尊敬的公司,可我却从来都不崇拜微软,看看微软为计算机的发展带来过什么?

    posted @ 2008-03-11 11:04 Robert Su 阅读(889) | 评论 (0)编辑 收藏


    posts - 103, comments - 104, trackbacks - 0, articles - 5

    Copyright © Robert Su