jungleford's profileJungleford's Home MSN 总舵PhotosBlogListsMore Tools Help

Blog


    4/21/2009

    【转贴】水木Java版前版主的评论

     

    引用

    谈论 阅读文章
    发信人: qyjohn (Sweet Potato -- 丽江,铜鼓岭...),
    信区: Java
    标 题: 从Oracle收购Sun 公司谈起
    发信站: 水木社区 (Tue Apr 21 12:08:16 2009), 站内

    http://www.qyjohn.net/



    4 月20日,Sun 公司董事会通过决议,同意以每股9.5美元的价格将公司出售给Oracle。虽然还有一些必要的审查和手续,但是两家公司的合并,看起来是不可避免的了。一时间,很多IT领域的朋友众说纷纭,对Sun 公司各种产品和技术的前途提出种种预测。在这里我个人就Sun 公司软件部门的一些产品和技术(包括Solaris操作系统,Java编程语言,MySQL数据库等等)的未来发表一点看法。需要说明的是,虽然我个人在 Sun 公司工作,但是并没有任何机会接触到公司决策层的任何相关资料。因此,在本文中出现的所有观点,仅仅是我个人的观点,而不是我的雇主Sun 公司的观点。

    Solaris操作系统

    在Oracle与Sun 公司共同发表的新闻稿当中指出:Sun 公司所拥有的Java语言和Solaris操作系统是“根本性的长期战略优势”。Solaris操作系统对于Oracle的重要性,由此可见一斑。

    作为一家数据库厂商,Oracle做梦都想要拥有自己的操作系统。在没有自有操作系统的情况下,唯一的选择就是全面支持市面上各种操作系统,根据市场的变化来调整不同操作系统的优先级。2000年之前,Sun 公司正如日中天,在金融、电信、能源等多个关键性领域的装机量排名第一,因此Oracle选择将Solaris作为优先考虑的操作系统。2001年前后,GNU/Linux在服务器端的性能已经相当出色,可以运行在价格低廉的x86处理器上,能够方便地从网络上免费下载到安装文件。更重要的是,大量向往自由的技术人员通过各种渠道分享经验,在网络上很容易找到与GNU/Linux相关的各种文档。与此相反,Solaris需要运行在昂贵的 UltraSparc处理器上(当时x86版本的Solaris 8已经可以免费下载,但是还远远没有达到健壮实用的程度),安装过程烦琐复杂,系统管理员还需要经过Sun 公司的专门培训。随着互联网泡沫的全面破灭,企业对信息系统的性价比提出了越来越高的要求。在这种情况下,Solaris的新增装机量开始下降,无须财务主管审批即可立即部署的GNU/Linux开始占领数据中心。Oracle敏捷地注意到了这个趋势,于2002年推出了名为“坚不可摧的 Linux”(Unbreakable Linux)的客户支持计划,开始向GNU/Linux倾斜。需要注意的是,“坚不可摧的Linux”并不是一个新的GNU/Linux发行版,而是指 Oracle向 Linux用户提供的软件更新以及技术支持等等增值服务。与此同时,Oracle开始加大在操作系统方面的投入,慷慨解囊资助GNU/Linux社区中的多个关键性项目,同时试图构造一个全新的GNU/Linux发行版。由于操作系统的复杂性,Oracle在自有操作系统方面的进展缓慢。由于与IBM 公司的DB2存在正面竞争,尽管Solaris的市场正在萎缩,Oracle依然将Solaris作为优先考虑的操作系统。2006 年,GNU/Linux在数据中心的新增装机量已经超过了50%,Solaris的新增装机量则降低到15%以下。这时候Oracle的首席执行长官 Larry Ellison做了一个聪明绝顶的决定:将Red Hat的图标换成Oracle的图标,将“Red Hat Enterprise Linux”几个单词修改成”Oracle Enterprise Linux”,一举推出了与Red Hat Enterprise Linux完全兼容的Oracle Enterprise Linux,同时推出价格仅有Red Hat一半的客户支持计划。尽管业界对此众说纷纭,Oracle终究是依靠GNU/Linux社区的强大实力摆脱了对Solaris的依赖,同时也过了一把“自有操作系统”的瘾。

    2006年4 月,在被问及是否会考虑收购Red Hat的时候,Oracle的总裁Larry Ellison信心满满地说:Oracle不会收购一家随时都有可能被淘汰的公司。尽管如此,Red Hat成功地用市场份额证明了他们比Oracle更懂操作系统。Oracle可以轻易地将Red Hat和Novell等等公司贡献给开放源代码社区的成果拿来使用,却无法拿来这些公司在开放源代码领域的声望,也无法拿来用户对这些卓有贡献的公司的忠诚,

    这也许是Oracle收购Sun 的原因之一:Sun 懂得操作系统。在文件系统方面,ZFS是目前为止功能最强大的文件系统;在应用开发方面,DTrace能够轻易从内核层和用户层寻找应用程序的瓶颈;在系统安全方面,Solaris Trusted Extension获得了最为全面的EAL 4+认证(包括LSPP, CAPP, RBAC);在超级计算方面,目前世界排名第六的德克萨斯超级计算中心(Texas Advanced Computing Center)运行的是Solaris操作系统。(需要说明的是,排名前五的超级计算机运行的都是不同版本的GNU/Linux操作系统。)尽管新增装机量的增长缓慢,但是在世界各地的数据中心里,依然有10%左右的服务器在运行不同版本的Solaris操作系统。通过收购Sun 公司,Oracle可一举获得操作系统领域的核心技术、人才、声望、以及现有的客户。

    因此,Oracle不会放弃Solaris操作系统。剩下来的问题,是如何继续Solaris操作系统的开发。Oracle是会继续支持目前的 OpenSolaris项目呢,还是会采用传统的闭源方式?我个人的看法是,Oracle有可能在GPL授权协议(有可能是GPLv3)的框架下重新发布 OpenSolaris项目。OpenSolaris目前最大的问题,是硬件兼容性的问题。在x86/x64平台上,尚有大量的声卡、网卡、显卡以及其他外接设备没有OpenSolaris的驱动程序。类似的问题,GNU/Linux社区已经解决得比较好了。相关的驱动,基本上都是开放源代码的,只是由于 GPL协议和CDDL协议之间互不兼容,使得OpenSolaris社区无法利用GNU/Linux社区的这些成果。我在《回顾:OpenSolaris 2008.11》一文中明确指出:使用GPL授权协议发布OpenSolaris项目,在技术上可以解决OpenSolaris项目所面临的困境,在感情上可以消除GNU/Linux社区的敌意。的确,使用GPL授权协议使得GNU/Linux社区也可以充分利用OpenSolaris项目中诸如ZFS和 DTrace等等亮点,但是从长远来看,恐怕是OpenSolaris项目得到的好处要更多一点。毕竟,对于一位普通的开发人员来说,没有ZFS和 DTrace的GNU/Linux已经足够好用,但是没有声卡网卡驱动的OpenSolaris就不太好用了。

    关于开放源代码软件,Larry Ellison有一句名言:“如果开源软件变的足够好了,很简单,我们就把它拿过来用。”现在GNU/Linux在设备驱动方面的优势如此明显,Larry会放过这个机会吗?

    Java编程语言

    谈起Java编程语言,我们首先要明确Java语言目前有三个分支:Java SE(标准版)、Java EE(企业版)和Java ME(嵌入版)。Java SE是Java EE和Java ME的基础,类似于国家自然科学资金的基础性研究项目,基本上是光花钱不挣钱的。Java EE可以认为是Java语言在企业级解决方案中的应用,大部分做Java的公司,除了Sun 公司之外基本上都是依靠Java EE盈利的。最近几年,Java EE俨然是企业级解决方案的事实标准。以中国的情况为例,2008年40%的企业级应用是基于Java EE的,35%是基于.Net的,另有18%是基于单纯的HTML和JavaScript的。Java ME可以认为是Java语言在嵌入式设备方面的应用,譬如说现在大部分的手机都支持Java ME的某个子集。在2006年之前,厂商每生产一台支持Java ME的手机,要给Sun 公司支付一定的授权费用。2006年11月,Sun 公司启动了名为PhoneME的开放源代码项目,这个收入就变得不是十分可靠了。

    在如上三个分支中,Oracle最感兴趣的显然是Java EE。但是在收购Sun 公司之前,Oracle已经收购了这个领域的大牛BEA。以应用服务器(Application Server)为例,在中国2008年BEA的WebLogic的市场份额为27%,仅次于IBM的WebSphere(29%),Oracle自己的应用服务器占7%,而Sun 公司的应用服务器(GlassFish)仅占4%。又以门户服务器(Portal Server)为例,在中国2008年BEA的WebLogic的市场份额为32%,比IBM的WebSphere(31%)还要高一个百分点,Oracle自己的门户服务器占10%,而Sun 公司的门户服务器仅占7%。显而易见,让Oracle暗自动心的不是Sun 公司在这个领域的市场份额,而是Sun 公司作为Java语言的发明者在这个领域领导地位。可以想像,在两家公司合并之后,Oracle必然会将Sun 公司目前的Java EE部门一分为二 --写标准和申请专利的继续写标准和申请专利,开发应用服务器的则并入原来的WebLogic部门。至于Sun 公司自己的应用服务器GlassFish,至少这个品牌想来是不会再用了。下一代的Java EE参考实现,叫做Oracle WebLogic显然要响亮得多。按照同样的推理,Sun 公司原来叫做Java企业系统(Java Enterprise System, JES)的那套东西,本来占到的市场份额就很小,合并之后跟Oracle现有的中间件产品线发生冲突,也将逐渐退出历史舞台。

    Java ME是一个比较难办的问题。随着各种高速无线网络的普及,移动与嵌入领域正在变成下一个金光闪闪的企业级取款机,但是Oracle在这个领域却毫无经验。我个人的观点,是Oracle会让这个部门继续独立运作一段时间,但是会指派一位党委书记(有可能是从外部新招来的)前来参观学习。等这新来的党委书记熟悉了Java ME部门的业务之后,才开始对该部门进行调整,并且调整的幅度不会很大。

    Java FX的去留,要取决于Java ME的命运。我们知道,不管Java FX的桌面版做的有多好,在桌面这个领域是肯定收不到支票的。Java FX如果想要挣钱,就必须能够在手机上流畅地跑起来 --这个事情,不仅仅是改进Java FX本身那么简单,还需要考虑手机的处理能力,以及跑在手机上那个Java虚拟机的效率。

    不管是Java EE还是Java ME,都严重依赖于Java SE。如果底层的虚拟机做的不够好,上层的框架搭得再好都是白搭。Sun 公司自己的Java虚拟机,有很多独到之处,执行效率也不错。两家公司合并之后,Oracle之前从BEA那里获得的JRockit估计要遭殃。 Oracle是一家注重实用的公司,因此Java虚拟机下一步将注重于提升服务器端的性能,某些只有桌面端才用得上得功能,其优先级估计就要低一点了。在这一点上,Java虚拟机和GNU/Linux近年来的发展趋势基本上是一致的。

    熟悉Java开发的朋友可能会问:NetBeans呢?这可是Sun 公司花了10年心血精心培养常来的宝贝。在下任何结论之前,我们还是先看看2008年Java集成开发环境的市场份额。根据CSDN提供的每年一度程序员大调查数据,在中国这组数字大概是这样的:NetBeans占19.3%,基于NetBeans的Sun Java Studio占4.5%,Eclipse JDT占52%,基于Eclipse的JBuilder占5.5%,基于Eclipse的IBM WebSphere Studio占2.8%,基于Eclipse的BEA WebLogic Workshop占6.5%,IntelliJ IDEA占2.2%,Oracle自己的JDeveloper占1.2%。乍看起来,NetBeans以及基于NetBeans的集成开发环境占了 23.8%的市场份额,似乎是Oracle白白占了个大便宜。再仔细想想,NetBeans是一个免费的产品,Sun 公司大力发展NetBeans,指望的是开发人员通过使用NetBeans将其开发的产品部署在自家的应用服务器等部署环境上,这样才能够卖出产品和服务。在过去四年中,虽然NetBeans的市场份额逐年稳步提升,但是在拉动其他产品方面的作用非常有限。Sun 公司之所以坚持做了下来,是因为过去十年的惯性实在是太大,要想停下来的话不管在内在外都免不了要大折腾特折腾一场。换句话说,这些年来Sun 公司大力发展NetBeans确实保住了面子,但是底下里却输掉了钱包。这种死要面子活受罪的事情,Oracle的Larry Ellison是断然不会做的。

    MySQL数据库

    2008年3 月,Sun 公司以10亿美元的代价收购MySQL,被Jonathan Schwartz认为是“现代软件史上最重要的并购案”。如此重要的一个角色,在在Oracle与Sun 公司共同发表的新闻稿当中并没有提及。很多业内人士认为,由于MySQL与Oracle的数据库业务之间存在直接的竞争关系,很有可能会被Oracle所抛弃。如果我们将数据库业务这个市场看成一个整体,Oracle与MySQL之间毫无疑问是相互竞争的。但是,如果我们进一步对这个市场进行细分,结论就有可能不太一样。

    原MySQL公司的首席执行长官Marten Mickos曾经说过:“如果要在开源软件上取得成功,那么你需要服务于:(1)愿意花费时间来省钱的人;和(2)愿意花钱来节约时间的人。”拿数据库这个市场来说,MySQL所服务的,大部分是第一种用户,小部分是第二种用户;Oracle所服务的,大部分是第二种用户,小部分是第一种用户。MySQL 所拥有的用户数量更多,因为不愿意花钱的人总是比愿意花钱的人多;Oracle所拥有的用户质量更高,因为愿意花钱的都是优质客户。Orqcle更多地被使用于中大型企业应用,MySQL更多地被使用于中小型企业应用,不过这个界限并不严格。因此,MySQL的用户群和Oracle的用户群之间存在一定的重叠,但是重叠的程度并不是很大。Oracle的推广是自上而下的,通过专业广告树立权威形象。一位普通的IT从业人员提起Oracle,可能会觉得 Oracle很强大,什么任务都可以胜任。MySQL的推广是自下而上的,通过口口相传培育用户信心。一位普通的IT从业人员提起MySQL,可能会觉得 MySQL同样很棒,“对付这样的应用足够了”。

    但是这并不代表Oracle对MySQL的用户不感兴趣。2005年10月,Oracle收购了与MySQL关系密切的InnoDB。当时 InnoDB为MySQL提供一些事物和外键方面的技术,主要使用于比较复杂的应用当中,对于一般的应用基本上没有什么影响。Oracle收购 InnoDB的本意是希望通过拿走MySQL中的优秀特性来打压MySQL,阻止MySQL进入中大型应用这个市场。遗憾的是开发人员普遍将Oracle 的收购行为理解成对MySQL的恐惧,并且进一步得出MySQL的性能已经足以与Oracle相竞争的推论,反倒帮MySQL做了一次活生生的广告,加速了MySQL的普及。到2008年3 月Sun 收购MySQL的时候,MySQL在数据库业务领域的市场份额已经达到25%以上,更拥有了象Google、Yahoo!、YouTube这样的标杆性用户。

    现在一切都顺理成章了,通过对Sun 公司的收购,不管你用的是MySQL还是Oracle,你都是Oracle的用户了。请记住,MySQL被Sun 公司收购之后,基本上是处于独立运作的状态,其现金流还是正的。只要Oracle表示继续支持MySQL数据库,就能够赢得MySQL社区的支持,并在适当的时候向他们提供更好的(要掏钱的)产品或者是服务。在未来的两到三年里,MySQL还是会作为一个独立的产品存在。从长远来看,同时维护多个具有相同或者相似功能的产品会造成用户的困惑。因此,MySQL最终还是需要融入Oracle现有的产品线,只是要等到Oracle将MySQL现有的用户群消化掉而已。

    开放源代码

    通过这笔金额高达74亿美元的交易,Oracle还将得到一个赠品:按照源代码的行数来计算,Oracle将成为世界上对开放源代码社区贡献最大的实体。从操作系统(OpenSolaris)到编程语言(OpenJDK),从数据库(MySQL)到应用服务器(GlassFish),从开发工具(NetBeans)到办公套件(OpenOffice),这些源代码几乎无所不包。这个赠品来得比较突然,估计Oracle还没有想好要怎样去处理它。

    Oracle对开放源代码的态度,可以用四个字来总结:拿来主义。如果一个开源软件足够好用,直接拿过来集成到Oracle的产品中就是了,没有必要为其支付任何费用。用Larry Ellison自己的话来说:“我不能够给开放源代码软件开出上亿美元的支票,因为这并不能够使我们在竞争中得到优势。我们能够做的,别人也能够做。”可惜的是,Oracle收购了InnoDB,并没有拉拢到MySQL的用户;Oracle推出了Oracle Enterprise Linux,也并没有能够拉拢到Red Hat的用户。开放源代码的价值,在于围绕该技术所形成的社区,这个社区包括该技术的开发人员和用户。只有这个社区成了规模,才能够给社区领袖带来经济价值。在这一点上,Marten Mickos看得要比Larry Ellison更为透彻。

    和Oracle相比,Sun 公司在开放源代码方面显然拥有更多的实战经验。在过去的四年里,只要是可以开放源代码的软件资产,Sun 公司基本上都开放源代码了 -- 不仅仅是软件,连其最新版本的处理器UltraSparc T2的设计都是开放源代码的。这也难怪有人这么评论道:“在这场轰轰烈烈的开放源代码运动中,Sun 公司无疑是开放得最为彻底得一个。从处理器到操作系统,从编程语言到开发工具,从数据库到办公环境,无一例外。”问题在于,作为一家挂牌交易的上市公司,开放源代码的举措并没有能够使公司摆脱财务上的困境,最终被Oracle收入囊中。Sun 公司的这些“实战经验”,到底有多少能够为Oracle所借鉴,是个值得进一步探讨的问题。

    结语

    我于2004年10月满怀仰慕之情加入Sun 公司。在过去的4 年多时间里,Sun 公司一直处于动荡之中。每隔三五个月,就来一次结构调整,让大家紧张一阵。这几年来,大大小小的调整经历了不少,竟然慢慢地也就习惯了。这一次经济危机,心里也知道公司的情况非常紧张,但是没有想到竟然这么快就要被卖掉。就借用《金刚经》中的几句话,作为这篇文章的结语吧。

    一切有为法,如梦幻泡影,如露亦如电,当做如是观。

    关于作者:

    蒋清野,1999年获得清华大学学士学位,2000年获得美国伊里诺大学香槟分校硕士学位,目前是Sun 中国技术社区的高级经理,同时任北京交通大学软件学院的客座讲师。在加入Sun 公司之前,蒋清野曾就职于北京中基超威信息技术有限公司(AMD公司的子公司),负责Linux操作系统的裁减与驱动开发。在此之前蒋清野就职于美国导航与控制公司,负责惯性导航、人工智能和嵌入式系统等多方面的研发。蒋清野的个人博客地址为http://www.qyjohn.net/

    --
     ("`-''-/").___..--''"`-._                         云与清风常拥有,
      `6_ 6  )   `-.  (     ).`-.__.`)                 冰雪知音世难求。
       (_Y_.)'  ._   )  `._ `. ``-..-                  击节纵歌相对笑,
      _..`--'_..-_/  /--'_.' ,'                        案上诗书杯中酒。
     (il),-''  (li),'  ((!.-'                              2000.12.31
    ______________________________________________________________________


    ※ 修改:·qyjohn 于 Apr 21 12:22:43 2009 修改本文·[FROM: 119.73.251.*]
    ※ 来源:·水木社区
    http://newsmth.net·[FROM: 119.73.251.*]


    9/3/2008

    RAP还不够成熟

    毫无疑问,IBM把RAPinnoopract弄过来是一件很好的事情,它给了在Eclipse上开发RCP的程序员这样一种憧憬:桌面application的代码可以近乎“无缝地”迁移到Web2.0上,这给很多不懂Ajax为何物或者厌恶浏览器端脚本开发的人带来兴奋,至少让本鸟小兴奋了一下。前老大要我们“做做看”,能不能把我们的RCP桌面应用迁移过去。于是本鸟花了一周多时间小试了一下,一点一点改的话,UI倒是能出来,而且也确实很炫,挺能忽悠人的,但Eclipse里的项目工程放眼望去,那是一片红叉叉……可见RAP对RCP的完全适配还要花一段时间,但值得让人期待。

    目前发现的问题(或者说,我暂时还没有找到在RAP上相应的API):
    • 不支持帮助系统
    • 不支持某些Action,包括CUT/COPY/PASTE这样常用的Action
    • 不支持OS相关的API,从前是在org.eclipse.swt.internal.win32.OS中
    • 不支持键盘事件
    • 不支持拖放
    • 不支持高级光标
    • 不支持System tray(当然,这是web应用)
    • Graphics系统跟RCP差距较大,像Color/Font这样的基本元素都是只读的
    • 如果你使用了依赖RCP插件的第三方插件,那对不起,你得hack源代码和配置文件让它们依赖RAP插件
    7/3/2008

    【江湖传闻】IcedTea/OpenJDK通过了TCK测试

    http://www.infoq.com/news/2008/06/icedtea_tck
    http://www.infoq.com/cn/news/2008/06/icedtea_tck

    IcedTea:首个100%兼容、开源的Java

    作者 R.J. Lorimer译者 张龙 发布于 2008年6月26日 下午8时42分

    社区
    Java
    主题
    开放源代码,
    社区,
    治理,
    许可证
    标签
    GNU,
    Java SE

    本周有报道称RedHat发起的IcedTea项目(连同OpenJDK一起),已经通过了Java兼容性测试工具(TCK)的测试,达到了100%的兼容,正式成为首个通过TCK兼容性测试的完全开源(GPL协议)的Java实现。 

    本周IcedTea项目到达了一个重要的里程碑——包含在Fedora 9(x86及x86_64)中的最新的OpenJDK通过了TCK严格的测试。这意味着它提供了所有必需的Java APIs并且在行为上与其他Java SE 6实现类似——与Java平台可移植的目标一致。

    大家都认为通过TCK测试是一个了不起的成就:

    Java TCK是一个复杂的工具和文档套件,用来验证Java实现是否遵从Java规范。它包含80,000多个测试以及100多万行代码。

    就像早前在InfoQ上讨论的那样,IcedTea项目通过OpenJDK成为一个100%的基于GPL协议的Java实现,并且使用GNU Classpath项目的相应部分替换掉了余下的5%的私有组件代码。

    IcedTea项目由GNU Classpath小组创建,同时由于需要使用开源实现替换掉所有的私有代码,因此一些RedHat开发者也加入其中。GNU Classpath将OpenJDK中的私有代码替换为GPL协议的代码,这使得使用OpenJDK构建的IcedTea更加适合如RedHat的Fedora Linux这样的平台。由于IcedTea的一部分贡献,Fedora 9包含了功能完全的OpenJDK包。 

    其他的开源Java实现,如Apache Harmony尚没有通过TCK测试,然而并不是所有的困难都与技术相关。早在2007年4月,Apache软件基金会就向Sun公司发送了一封公开的邮件,希望解决使用TCK测试Harmony平台的关键的许可协议问题;许可Harmony小组以开源的方式合法运行TCK。Sun回复了该公开邮件,他们说还没有决定向Harmony小组授权,因此他们仍无法运行TCK。

    IcedTea项目没有像Apache Harmony那样遭受到相同的协议问题,因为Sun已经提供了TCK许可协议的一个特别版本,面向派生自OpenJDK的任何Java实现;这是Apache Harmony所无法获得的东西。

    InfoQ将继续报道开源Java实现相关的新闻。

    5/8/2008

    Oops! Java 7 Module System (JSR-277) will support OSGi!

    http://www.adam-bien.com/roller/abien/entry/hell_freezes_over_java_7

    Hell Freezes Over - Java 7 (JSR-277) Module System will support OSGi

    During the general session there was an official announcement - Java 7 Module System (JSR-277) will support both - its own format IAM - as well as OSGi. Great "news" for Java - and it should stop some friction/discussion in the community. So this announcement is double-great :-).

    4/11/2008

    【转贴】记忆最少的魔方玩法

     

    这页我们介绍一个新的魔方还原方法,这个方法可以说是记忆量最小的。他的特点是在第一第二层留下一个角先不对好,我们知道之所以我们的算法越到后面越复杂就是因为我们需要保持前面对好的成果不能破坏,这样我们就有了很多限制,这个方法就是巧妙在,在一开始留下一个缺陷,这样,我们后面可以不断的利用这个缺陷,限制就小了,算法自然就简单。感谢Mark Jeays让我学会了这个方法

    关于java applet动画的播放和使用请访问入门魔方玩法



    第一步和入门魔方玩法一样,我就照抄啦。

    (第一步)在第一面做一个十字,形成如下的样子:魔方玩法之顶面十字

     

     


    魔方玩法之底面十字的算法

    注意啊,你对好的十字必须如上图,每个侧面的棱和中心是同色的。做成这步的方法很多,我建议你自由发挥。如果实在有困难,我这里提供一个万全的办法,就是把中间层含有蓝色的棱色块变到底面上去,然后对好侧面颜色,再翻上来。我这里就举一个例子大家就应该明白了,对于左图B位置,只需要下面3步,魔方

    F  D R2180°
         
    初始状态 色块 转到底面 旋转底面,对好侧面黄色 翻上来

     

    我说的够清楚了吧。而对于AC位置你可以旋转该面,让其变到BD位置。如果某个棱色块的蓝色面已经在顶面或底面,相信大家会有办法解决的。 你要记住的是,如果遇到困难,就把蓝色变到底面,在底面上你是可以任意旋转的。  有时候,你会碰到这样的情况,色块转到底面时影响了已经对好的红色面,这时候,你需要在最后一步之前恢复红色面的位置。具体操作见下

    魔方小站)

      F D F'
    初始状态 色块 转到底面,但
    这影响了对好的红色侧面
    旋转底面,对好侧面黄色 恢复红色
    R2180°       

    动画会自动播放,你也可以用播放条右边的按钮一步一步看。

       

    照上面说的,你重复做4个棱,应该就可以做好十字啦。

    这里我给初学者建议一种更清晰快速的方法,蓝色棱变到底面之后 ,可以不急着把它翻上去,可以变成左图这个样子,注意在底面上4个棱可以是任意顺序,这会给你减少很大难度,这里是两个例子,给大家开阔下思路,

       

    最后把他们逐一对好侧面颜色翻上去就行啦。比如:

    下面我要说说标记。你没准注意到上个表格里的一些奇怪的字母,那些字母的意思很简单,

    F = front face 前面 B = back face 后面 R = right face 右面
    L = left face 左面 U = up face 上面 D = down face 下面

    以上面的表里的标记为例,F就代表前面顺时针转90°,F'代表前面逆时针转90°,R2代表右面转180°,就这么简单,大家明白了吧。


    (第二步)对好第一面,但是留下一个角,形成:

    具体留下哪个角,你自己决定,做好这一步其实你只要学会一招就够了。那个蓝色的角色块,转来转去之后就6种位置,

    玩魔方第一面角块的算法玩魔方第一面角块的算法1
    对于A位置,只需下面3步,魔方

    F  D  F' 
    初始状态 此步很巧妙,同时达成两个目的:一个是让顶层的目标角位置到底层来“接应”角块,另一个是让角块也准备到了应有的位置。 角块 转到目标位。 转回顶层。
    魔方玩法之对角线镜像

    注意哦,我们弄上去的那个小角块必须颜色也要对应好。比如我们的小角块必须上到角,不能上错哦,否则T字就出不来啦。可能有的朋友已经觉得我像唐僧了,不过确实有的朋友有这个问题的,我还是要说的详细一点。

    而对于B位置,其实完全一样,就是把刚才的3步对于顶面对角线做一个镜像

    如左图,对于顶面对角线做一个镜像,我们将在后面无数次的遇到,所以请大家一定注意这个镜像的意义。

    上面F D F'对角线镜像就是R' D' R,具体请看,

     



    此动画设为不自动播
    放,请按播放键开始
    R'  D'  R 
    B位置的图就是A位置的对角线镜像,所以他的算法就是FDF'对着对角线照镜子。 F对角线镜像就是R',大家应该很明白吧,参看一下上面镜子的图片。 D的镜像就是D' F'的镜像就是R
     

    而对于C,D,E,F位置,你总可以用旋转侧面底面将其转到AB位置。这里是几个例子:

    对于F 对于C 对于E
     
         

    这样再重复做2个角,你就会得到


    (第三步)放第二层的棱色块,但是还是留下一个,变成形如

    留下的那个棱和角颜色是对应的。

    这一步你就会看出留下一个缺口的好处了。我们放入一个第二层的棱非常的简单。首先我们把魔方要翻过来了,蓝面朝下,绿面朝上。现在,首先,你要放哪个第二层棱色块,就把我们空缺的那个角移到它底下,然后, 根据色块的位置应用F' U FR U' R'

    例1

      1 2 3 4
    D' F' U F

    例2

      1 2 3 4
    D' R U' R'

    你只要记住总是颜色叉开的那个面总被先“切开”,基本上你就记住了。如果你熟练了之后,根据色块不同位置,第3步也可以是U2等。

    会有一些情况下,你需要的棱色块不在顶面,而在第二层的错误位置或者朝向,这时咋办?首先,你要先做在顶面上的那些, 可能不听话的棱色块会自己变到顶面上,如果最后他还是不听话,如左图,你就随便用一遍上面例1或例2的算法,他就会变到顶面啦,例如,

     


    (第四步) 对好剩下的5个棱色块

    这一步我们分成两个阶段,

    第一阶段  第二阶段

    我们留下空缺的右后的棱色块,在这里又要起大作用啦。我们下面要做的就是不停的把这个右后的棱色块移出来,再把我们将要操纵的棱色块填入进去,这样反复几次第一阶段就完成啦。

    你要记住我们的顺序是先出后进。这个先出后进有两个方式供你选择,一个是R' Ux R,一个是B Ux B',其中Ux代表你任意旋转顶面, 用哪个方式是当前右后位置棱色块的绿色面朝向决定的,大家明白吧 ,绿色出来后要朝上。每次应用R' Ux RB Ux B'之前,你要旋转顶面把要出来的棱色块 的位置给准备好。Ux当然不是乱转,是要把下一个要摆的棱色块转到那个即将插入的位置

    说得我自己都不明白了,呵呵,看来我只能举例子了。

    首先我们有这样一个形态。

       拖拽动画你就可以看到背面的样子,下面三步分别对好3个顶层棱色块。

      开始 动画 说明 成为
    1 R' U' R
    这一步就是转出右后绿色块,同时插入绿色块。
    2 U B U2 B'
    第一个U是给绿色块准备位置, 即将出来的绿色块将出现在上后位置,并且绿色块的位置是的绿色块逆时针 上一个,也就是左图里的上左这个位置,所以我们要这样转,然后第三步的U2则是插入绿色块。
    3 U R' U' R
    没啥好说的。

    我想大家应该明白了吧,不明白我也没办法了,再看看就好了:)

    另外的时候,R'或者B“藏”一个色块下去,这个“藏”也很有学问,我希望大家钻研一下,这个藏可以起到一些有意思的作用,我还没太钻研透彻。

    这样第一阶段就完成啦。

    下面进入第二阶段。这个阶段是唯一需要记忆一下的阶段。我们剩下的就是右后右上这两个位置吧。他们会有这三种情况,

    1 你的两个棱色块都在正确位置,但是朝向不对,肯定是两个朝向都不对啦,不然你的魔方就肯定还原不了了。那么你就应用 B U' B' U R' U R U'
    2 你的两个棱色块在魔方右面是相同的颜色,并且和右面中心块也一样颜色,那么你就应用

    U' R' U' R U' R' U' R U'

    3 两个色块既不是正确位置右面也不同色,你就应用

    B U B' U B U B' U2

    看似这些需要记一下,其实如果想不起来你就自己试试,这些算法基本上会和你的直觉一致的。

    基本的意思就是不断的R',R或者B,B',每动一次顶面就旋转90度。2,3情况是顶层是朝一个方向转,1情况是先逆后顺,1情况有点特殊,2,3情况大家观察一下,其实2,3情况是一模一样的,2情况第一步U'之后,大家看,这时候2情况就是3情况的对角线镜像了。所以他们的算法也就互为对角线镜像。说的有点笼统,不过我想有的朋友已经明白了。

    下面是2,3情况整个魔方顺时针转过90度后的情形。我们只看棱和绿棱,两图互为对角线镜像。可能有的朋友在这里会有点迷惑,这个对角线镜像不是严格的,请观察下面图一中右面绿相对位置关系,和图二前面绿的相对位置关系,他们是等价的 ,他们存在着某种对称性。所以图二的解法就是图一的对角线镜像。

    2情况第一步U'之后 3情况

    (第五步)摆好五个角块的位置,但不管朝向

    这步我们要把5个剩下的角块归为到颜色正确的位置。

    基本上你用一个很简单的算法就搞定了:L D2 L', 当然如果你想高效率可以再加上他的对角线镜像 F' D2 F。你应该注意到L D2 L'F' D2 F他们都是自己本身的逆算法。也就是说用两次L D2 L'魔方就回到原样。

    我们这一步就是要不停的调换右下后前上左两个角以达到调换5个角顺序的目的。首先观察右下后角的颜色, 然后旋转顶面让对应该颜色的正确位置到达前上左角。

    请注意,这个正确位置是由顶层的绿色的棱色块决定的,比如我们要找绿角色块的位置,就要把绿绿所夹的这个角转到前上左

    然后应用L D2 L',这时第一个角色块就到位了,但你的魔方会有一点乱,没关系,再次观察右下后角的颜色,旋转顶面将这次右下后颜色的正确位置转入前上左,再应用L D2 L'。你这样一次操作2个L D2 L'就对好了两个角。如果一开始右下后就是那个正确的色块,你就把一个位置错误的色块摆在前上左,然后同样方法开始就可以了。

    这样做最多3次,你的所有角色块就都会到正确位置。

    F' D2 FL D2 L'的对角线镜像,可以起到同样的作用。

    但是不光这么简单,这里有一个细节可以优化我们的算法,如果你发现,右下后角的绿色朝后,你就用L D2 L',如果绿色朝右你就用F' D2 F, 这个不用背,你稍微想一下转的过程就明白了。如果绿色朝下。。。那就没办法了,你随便用哪个吧。

    这样做你会发现不但角色块位置可以对好,朝向也可以对好,自然节省了我们下一步的工作。当然在一次操作里,只能用两个L D2 L'或两个F' D2 F,不能混着用。

    下面这个例子用两个操作完成的。


    (第六步)调整五个角块朝向,最终完成魔方

    这步很简单,还是用L D2 L'F' D2 F。首先你找到一对角色块,他们要处于同一个面上,而且一个要顺时针翻转,一个要逆时针翻转。

    所谓顺时针翻转的意思是,你目光穿过一个角的顶点和魔方的体中心,你看到的那个角的三个颜色需要顺时针转一下,才能达到正确的朝向,比如左图离你眼睛最近的绿角,就是需要顺时针 翻转。

    把这两个角色块放在顶面,这时绿色面可以不一定朝上了,找到那个顺时针的放在前上左角,应用L D2 L' F' D2 F,然后你会发现你要转的那个角色块已经翻转好了,但是魔方是乱的,这时,找到那个需要逆时针转的角块,旋转顶面让他转到到前上左角,应用刚才算法的逆算法 F'D2 F L D2 L',也就是前半后半颠倒,好啦,你现在应该对好两个角了。如此重复,最多3次操作。所有的角色块都会对好了。

    当然如果你想先翻转那个逆时针的,就先用F'D2 F L D2 L'再用L D2 L' F' D2 F

    也有的情况你要翻3个角,他们都是要顺时针或逆时针翻转的,如左图,你就先做两个,剩下的两个自然会一顺一逆了。

     

    如果你发现你只需要翻转2个角色块,而他们处于魔方的体对角线上,那么你就旋转一个面,让他们处于同一面上,应用算法之后你通常需要做一个转2面的调整就可以成功还原魔方了。

    ,这个例子里我们 是先转的逆时针的。

     

    另外Mark Jeays给出了一套介绍此玩法的视频,在这里,很不错,建议大家去看看。

    欢迎朋友们转载这篇文章,请注明转自魔方小站(http://www.rubik.com.cn)就好了。 

    12/1/2007

    SmartCalendar relaunched

    最近家里有点闹心的事,没来更新。

    SC 0.1β在sourceforge上停了一年多了(参见2006年3月14日3月22日两贴),现在重新拾起来完全是因为做那个被cancel项目激励的,从这个项目上得到了pattern上的更进一步的认识,于是思考这些经验是否可以用来重构SC。要感谢水木Java版那些对开源保持热情的年轻的人们,zms、kabbesy、dev、cjmm……,因为他们牵头创建了这个水木自己的开源项目站点:SMTHJava

    目前差不多做成型的是一些基本widget,完全GUI-independent,以及它们的Swing和SWT实现,这些基础widget是用来拼时钟/日历这些高级widget的积木块。想法就是类似IoC那样运行时注册,发现,并启用具体采用哪一套GUI Adapter实现方案(Swing or SWT)。简单介绍几个基本概念:

    ● Iterator(遍历器)

    这是在0.1β里就用到的概念。我们观察一个acceptable的日历组件应该有这么一个特征:可按输入(按钮或输入)转到指定月/年上,尤其是相邻的前/后一个月/年。这个行为往往可以适用到很多组件上,譬如通常用到的table“翻页”行为,譬如VB流行的年代常用的DAO/ADO组件。所以我这里抽象出一种行为叫Iterator,“可遍历”,当然它是一个interface,它包含这么几个最常用的方法:

    moveXXX():如moveFirst/moveLast/movePrevious/moveNext,即这个数据结构是“可游动”的,而且是“可线形游动”的(movePrevious/moveNext,而moveFirst/moveLast是两个特殊的游动方式)。

    getXXX():如getFirst/getLast/getPrevious/getNext,我们知道设计栈(Stack)这种数据结构的时候为方便起见会加上一个peek()方法,意思是让你得到栈顶元素而不将其弹出栈(瞟一眼但不去动它),这里也是类似的意思,得到某个位置上的元素而不移动游标。

    getCurrentItem()/setCurrentItem():顾名思义,得到当前游标上的元素或移动游标到某个元素。这是一种非线性遍历方式。

    isRollback()/setRollback():这个名字不知道是不是起得合适,我的本意是这个遍历器是不是“可循环”的,即到达头或尾再往下遍历是不是可以跳到尾或头开始,如果是循环队列的话需要做模运算确定index。

    我们看到“遍历器”实际上是一个增强型的队列(循环或非循环),在java.util包中你也能找到Iterator这个接口,但它是单向线性遍历的,只有next()方法。在这个接口上我写了几个基础遍历器,用于封装对整数的遍历,对List(线性列表)的遍历,对日历的遍历,这几个是GUI无关的组件;在GUI中有继承扩展了几种,如对文本框(尤其是格式化文本框)的遍历,对combo box的遍历。

    ● IterableWidget(可遍历组件)

    Iterator是个什么东东呢?简单的说它就是一个helper,可以用来告诉UI应该怎么做,如果要扯到MVC的话,Iterator就是一个controller,UI是view,Iterator要遍历的东西(比如comobox的item list)就是model了。我定义IterableWidget是这么一个玩意,它将一种UI和一个Iterator绑定在一块,这就成了一种稍微高级一点的GUI组件。我们能够想到的有哪些“可遍历组件”呢?上面说了,显示整数的文本框,combo box,spinner,我要做的calendar界面,可翻页的table,DAO/ADO组件等等。

    ● IterateAction

    IterableWidget仅仅是“可遍历”,要激发它动作需要通过另一个组件(譬如按钮),我定义了一个IterateActionButton的组件用于把一个按钮和它要激发的遍历操作的若干个IterableWidget绑定在一起,这个按钮去激发IterableWidget的helper(即Iterator)进行遍历操作。

    ● Adapter

    这里需要对泛型、Adapter模式和IoC稍微有点了解了。我的目的是想达到GUI-independent,对比Swing和SWT,你会发现它们差得十万八千里,除了Object这个爪哇人都知道的根对象,两者竟然没有交集,那你怎么来搞GUI无关性?怎么抽取共同行为?于是乎,泛型就来了吧?把一个具体的GUI对象适配成我这套GUI library当中的对象,具体要用的时候(比如布局,这个GUI-independent做不了)再getAdaptee()还原成具体的GUI对象(Swing或SWT或其它什么玩意)。不管怎么样,地球人总有一套必不可少的公共组件:按钮、标签、文本框、容器、对话框、窗口……,再高级一点就表格、树……,更高级一点就像我们要做的这个日历等等。widget越基础,行为就越容易抽象。

    ● 一点puzzle

    写的时候往往是反复重构,解耦程度越高,重构的代价就越低,这也符合agile的办事风格。我比较为难的是权衡保留泛型参数的规模上,如果你内部属性的类型要做到“精确”,势必要有较多的泛型参数来约束,这个好处是减少类型检查的hard code,但泛型参数的增加会随着类库的继承和复用层次的增长而增长,这是很讨厌的一件事,因为你会发现为了创建一个对象需要指定N多个你并不关心的这个对象内部属性的具体类型。所以,我妥协了,人是容易妥协的动物,我对一个widget通常只用一个泛型参数(如果它需要用泛型的话),这个参数就是指代它需要适配的那个GUI组件的类型;所有接口,目前只有IAdapter使用了泛型,因为我们需要得到adaptee,其它接口只定义行为;widget内部如果用到composite的widget的话,都用这个widget的接口类型。

    以上大概通过代码更好理解一些,代码我放单位的机器上了,过两天传上来。

     

    重新启动的SmartCalendar项目主页在这里,主页快照:

     

    smartcalendar (活跃度12)

    可扩展的时钟/日历组件库.

    详细介绍

    一个可扩展的时钟/日历组件,来源于我在2006年3月在sourceforge上开的项目SmartCalendar 0.1β版。原始创意来源于对JDK没有提供日历选择框组件的不满,因为JFileChooser和JColorChooser两种Dialog都实现了。此类例子在网上多得是,于是考虑做成一个可扩展的API库,可以提供给其他人员进行二次开发。0.1β版提供了 数字时钟/模拟时钟/月历/年历 高级Swing组件,以及 月历/年历 的日期选择框组件,总的来说这一版的代码耦合度还是密了些,供二次开发的伸缩度不够理想。另外,SWT从3.3开始提供DateTime Widget,所以单纯的日历组件意义已经不大。

    本项目(0.2版)希望达到如下目标:

    • GUI independency:即对GUI实现进行抽象和适配,提供一个更统一的Adapter,以适应不同的GUI库;提供SmartCalendar所依赖的几个基础Widget
    • 充实上述四种组件
    • 至少提供Swing和SWT两种具体实现
    • 提供日程表组件
    • 中国农历系统(ChineseLunarCalendar,视情况而定,是否有一个全面的算法?)

    长期目标:

    • 0.2版仅follow SUN JDK的Calendar API,考虑到Joda-Time项目已加入JSR,未来也应给予支持
    • 逐渐扩充为一个GUI独立的RCP抽象组件库(GUI-independent Widget Library)

    更长远的目标:

    • 考虑分离出一个"微内核",或者说"极小内核"的JVM,甚至小于J2ME(是否可能仅仅是native的?),仅提供虚拟机运转的最基本服务,其它的API都可以抽象化,以适配不同厂商的具体实现,这个项目就是希望定义出这些"微内核"以外的"扩展API"的行为。

    文档

    [编写文档]

    Unable to render {include} Couldn't find a page to include called: smartcalendar_doc

    源代码

    源代码浏览可以访问fisheye
    匿名用户检出最新代码 svn co http://smthjava.org/repo/smartcalendar/trunk/ trunk
    开发人员检出最新代码 svn co https://smthjava.org/repo/smartcalendar/trunk/ trunk --username 用户名

    最新5条更新

     FishEye on repo/smartcalendar (rss_2.0)
    (Recent changes to the "repo" repository under directory /smartcalendar)

    root: init project smartcalendar

    RoadMap

    分布图

    Unreleased
    0.1 ( 28/十一月/07 | 发行报告 )

    进度: 
    没有问题.

    早期版本,延续自sourceforge上开的项目SmartCalendar 0.1β版

    没有问题.

    问题跟踪

    缺陷报告和新功能需求可以通过jira来提交

     SMTHJAVA (1 issues)

    T
    Key
    Summary
    Assignee
    Reporter
    Pr
    Status
    Res
    Created
    Updated
    Due

    New Feature
    CAL-1
    实现农历万年历
    jungleford@smth
    kabbesy@smth
    Major
    OpenOpen
    未解决
    Nov 30, 2007
    Nov 30, 2007

    团队

    创建人:
    jungleford@smth
    开发人员
    jungleford@smth
    kabbesy@smth
    License:
    LGPL

    4/8/2007

    jakarta commons 很有意思

    因为最近工作上的关系,用到了一个页面表格组件eXtremeComponent,其实是看中了它的翻页和灵活的界面可配置特性。这是一个相当好用的tag,但为了实现一个filter查询,譬如可比较数字、日期等的大小,不得不写一个自己的FilterRowsCallback实现,于是去看ec的源代码,发现需要重写一个FilterPredicate的玩意,这个东东实现了jakarta commons组件库里的Predicate接口,这是干什么用的呢?
     
    在网上搜到了某大拿的一个“jakarta commons 笔记”系列,花了大半天的时间看了一下,觉得这个类库做得相当有意思,把很多以前想做而没有做的工作都给封装了。最有启发意义的是它的集合框架里的四大组件:ComparatorPredicateTransformer和传说中的Closure。最早听说的是closure,本来是一个script里的一个特性,就是函数也可以拿来当变量一样的用,譬如
     
    function f1(name)
    {
       var v1 = f2(name){ alert("Hello! "+name); }
       return v1;
    }
    var v2=f1("jungleford");
     
    这个特性近来一直炒作得很火热,甚至有传言说将会加入到下一版J2SE 7.0的语言特性里。其实也就相当于实现了C里面的函数指针的功能,譬如把上面这段改写一下
     
    typedef void (*F)(char* name);
    void f1(char* name, F f)
    {
       f(name);
    }
    void f2(char* name)
    {
       printf("Hello! %s", name);
    }
    int main(int argc, char* argv[])
    {
       f1("jungleford", f2);
    }
     
    也就是说,原来程序的工作流程也是可以当作操作数的,其意义就是流程的抽象和封装,流程也可以template化,而不仅仅是数据类型! 在jakarta commons这四大组件想得更进一步,其中Closure接口是比较泛化的(或者说比较广义的),对应上面的closure或函数指针的语义,其它三个接口则是分别对应三种具体程序逻辑:
     
    Comparator:把关系运算(=,>,<)操作数化,就是得到一个偏序关系。
    Predicate:把判断逻辑(if,switch)操作数化,就是得到一个程序流分支。
    Transformer:把从对象构造另一个对象的过程操作数化。
    Closure:把业务逻辑(广义上的函数)操作数化。
     
    如此看来,closure的引入确是对编程风格的一种正反馈效应,干活到底是越来越方便了。当然commons还有很多其它组件,比如隔三岔五有人问起的正态分布或一些数值计算问题,你都可以在Math组件里找到答案。
    3/31/2007

    寒,Java版的vmware惊现江湖!

    好像现在还只能跑MS-DOS。
    看来我以后的最大梦想就是在jnode上能跑一个这玩意,然后在这玩意上跑一个windows,然后在windows里开始用java开发,嗯…… 

    JPC is a pure Java emulation of an x86 PC with fully virtual peripherals. It runs anywhere you have a JVM, whether x86, RISC, mobile phone, set-top box, possibly even your refrigerator! All this, with the bulletproof security and stability of Java technology.

    JPC creates a virtual machine upon which you can install your favourite operating system in a safe, flexible and powerful way. It aims to give you complete control over your favorite PC software's execution environment, whatever your real hardware or operating system, and JPC's multilayered security makes it the safest solution for running the most dangerous software in quarantine - ideal for archiving viruses, hosting honeypots, and protecting your machine from malicious or unstable software.

    JPC has been developed since August 2005 in Oxford University's Subdepartment of Particle Physics. It can be run on a number of devices, from PC's to mobile phones, and you can see some of the results of JPC in action (more soon!). Some might see JPC as part of a nefarious plot by mad scientists who want to harness every last CPU in the world for their research - but we prefer to see JPC as Java-hardened protection against their buggy programs.

    1/19/2007

    解决两个小问题

    一个是项目里面用到的,后台起一个timer调度任务,发现久了以后app server收SIP消息产生错误,然后就把timer给干掉了。最后发现还是HashMap造成的,HashMap不是一个线程安全的类,多个电话打进来就有可能出问题,报ConcurrentModificationException异常。改成线程安全的Hashtable或JDK 5.0里的ConcurrentHashMap就好多了。
     
    二是试验对Tomcat启用Hibernate,想照着reference上那样用tomcat自身的连接池,需要在server.xml里加一个<context>,由于是用MySQL,还要把它的JDBC驱动jar包拷到全局lib里(即common/lib目录下),发现进入页面总是找不到数据库的connection。无奈只好用hibernate自己的连接池,把server.xml里的<context>去掉,在hibernate.cfg.xml里配上几个<property>,这时可以不必把mysql的jdbc驱动放common下,在自己的web app module的WEB-INF/lib下有即可,这才正常。啥原因有待进一步考察。
     
    还有一个更FT的问题,用MyEclipse创建到MySQL的JDBC连接,死活找不到数据源:Error while trying to connect to database: com.mysql.jdbc.Driver。原来必须到preference的MyEclipse->Database Explorer->Drivers里面把没有勾上的驱动选上。这么做是无可厚非,问题是它也得在Database Explorer透视图的创建或编辑数据源界面里能让你配才好啊,搞得我找了好几天
    12/12/2006

    J2SE 6 is coming!


     

    Java SE 6 is the current major release of the Java SE platform. Sun endeavors to foster the highest level of transparency and collaboration on the platform with the Java community through Project JDK 6, resulting in the following key features.
        » Download Java SE 6


    New Security Features and Enhancements
     
    • Native platform Security (GSS/Kerberos) integration.
    • Java Authentication and Authorization Service (JAAS) login module that employs LDAP authentication
    • New Smart Card I/O API
      » Find out more
     
    Integrated Web Services
     
    • New API for XML digital signature services for secure web services
    • New Client and Core Java Architecture for XML-Web Services (JAX-WS) 2.0 APIs
    • New support for Java Architecture for XML Binding (JAXB) 2.0
      » Find out more
     
    Scripting Language Support (JSR 223)
     
    • New framework and API for scripting languages
    • Mozilla Rhino engine for JavaScript built into the platform
      » Find out more
     
    Enhanced Management and Serviceability
     
    • Improved JMX Monitoring API
    • Runtime Support for dTrace (Solaris 10 and future Solaris OS releases only)
    • Improved memory usage analysis and leak detection
      » Find out more
     
    Increased Developer Productivity
     
    • JDBC 4.0 support (JSR 221)
    • Significant library improvements
    • Improvements to the Java Platform Debug Architecture (JPDA) & JVM Tool Interface
     
    Improved User Experience
     
    • look-and-feel updates to better match underlying operating system
    • Improved desktop performance and integration
    • Enhanced internationalization support
     
    An in-depth summary of Java SE 6 features and enhancements to the platform is provided in the Java SE Umbrella JSR (JSR 270) and the desktop and core feature overviews.
    11/14/2006

    这一天终于到来了!

    不是我结婚,呵呵,而是……
     
    Free and Open Source Java
     
    水木Java版前版主qyjohn的评论
     
    真的是GPL啊!!!!!!!!!!!!
    8/17/2006

    【转贴】Sun年底开放Java源代码 JVM、javac打头阵

    Sun年底开放Java源代码 JVM、javac打头阵
    来源:http://java.csdn.net/n/20060816/93753.html   发表时间:2006-08-17 08:54

    8月16日消息,据国外媒体报道,Sun公司日前表示,将于今年年底前首次公开一部分Java源代码。

      据英国媒体报道,Sun程序及产品开发副总裁Laurie Tolso日前表示,首先开放的是Java编辑器(javac)和Java虚拟机。而其他代码则于2007年年底前开放。

      对此,Sun首席工程师Mark Reinhold给予了证实,称Sun将首度开放Java编辑器和Java虚拟机的源代码。但包括JDK在内的其他源代码的开放日期仍未完全确定。

      在今年5月的JavaOne大会上,Sun曾表示有意开放Java源代码。 

    =========================================================================================

    以下转载自http://java.sun.com/

    Opening Up: Laurie Tolson on Open Source Strategy for the Java Platform
    By Jim Inscore, August 2006  

    Yesterday, Sun Microsystems invited a group of editors and analysts to an update on the status of its plans to open source the Java platform. Rich Green, Executive Vice President for Software, who announced Sun's intention to open source its implementations of the Java platform at the 2006 JavaOne Conference in May, was joined by Laurie Tolson, VP of Developer Products and Programs, and Alan Brenner, VP of Client Systems Group. They talked about open-sourcing the JDK, Sun's implementation of the Java Platform, Standard Edition (Java SE) and also Sun's implementation of the Java Platform, Micro Edition (Java ME). Mark Reinhold, Chief Engineer for Java SE posted a recap of the event in San Francisco in his blog. Simon Phipps, Sun's Chief Open Source Officer, updated press and analysts over breakfast in London just hours after guests left the event in California.

    We sat down with Laurie Tolson to get an update on Sun's plans:

     Jim: Where is Sun in the process of open sourcing the code for Sun's Java platform implementations? When can developers expect to see the code released?

     Laurie: Sun will release several significant components of Java SE by the end of 2006. We don't know exactly which ones yet, but the javac bytecode compiler and the HotSpot Virtual Machine –among other things– are on the table. The rest of a buildable JDK will be released in early 2007. In addition, Sun plans to open source implementations of the Java ME platform (both CLDC and CDC). We intend to roll this out by the end of 2006. Most importantly, we're not doing this in isolation. We want to learn from successful open source projects how best to go about this.

    Developers who are interested in Sun's open source plans for the JDK should check out the brand new area on java.net where they can also join the discussion in a new forum.

     Jim: What license are you planning to use?

     Laurie: Picking a license is a complex decision and Sun is actively requesting input from both open source experts and Java technology developers. We haven't determined which license we will use at this time but we do know that it will be an OSI-approved license. Java technology has many stakeholders: individual developers, corporations, licensees, ISVs and users - balancing their needs will mean compromises.

     Jim: What experience does Sun have with open source?

     Laurie: Sun has a long history both as an open source community member and with open source software. As a company, sharing and participation are some of our core values and we are committed to open source as a core element of our business model.

    As Rich noted in his remarks, the Solaris Operating System is based on the Berkeley Software Distribution (BSD, sometimes called Berkeley UNIX). Sun has also contributed to projects like the Network File System (NFS), GNOME, Mozilla, X.org, and Perl. In fact, some GNU/Linux users may be surprised by the extent to which they are dependent on Sun contributions, both historic and current.

    In addition, Sun has released a long list of products and technologies under open source licenses and helped to create open source communities around projects such as OpenSolaris, NetBeans, OpenOffice.org and Project GlassFish. We're fortunate to be able to draw on the experience of our colleagues who have been involved with these, and other projects, that Sun has opened to their respective communities.

     Jim: Will all of the JDK be open sourced?

     Laurie: Yes, however there may be parts of the platform that will initially be available to developers in binary form if they contain encumbered code. The Java SE code base contains about 6 million lines of code and there are a few encumbrances which we intend to work through with the assistance of the community as quickly as possible.

     Jim: How is open sourcing the JDK good for Sun's customers?

     Laurie: As we open source the JDK, we see a number of critical advantages to customers, including:

    • More ports to an even broader set of hardware and software platforms
    • More innovation and higher quality as new eyes look at the code and contribute enhancements
    • An even healthier Java technology ecosystem, with more opportunities for developers, more competition and choice for deployers, and continued long-term protection of IT investments.
    6/1/2006

    J2SE 5.0 API Doc 中文版完成!

    参见
     
    原来这个项目的负责人就是水木Java版前版主qyjohn啊!
     
    偶当晚随即做了个chm出来
     
    不知道是不是全球最早发布chm中文版本的,娃哈哈哈哈~~~
    5/22/2006

    【传闻】Sun开始支持Eclipse

    发信人: shomaru (爱生活爱靓颖爱子怡), 信区: Java
    标  题: zzSun开始支持Eclipse
    发信站: 水木社区 (Mon May 22 18:00:10 2006), 站内
    Sun开始支持Eclipse
    --------------------------------------------------------------------------------
    2006.05.22  来自:CSDN   LWN

    eWeek报道了Sun 开始向支持Eclipse开发平台的方向发展。“经过数年的竞争和相互鄙视对
    方成就,SUN微系统公司和Eclipse基金会正在积极合作。在17号的一次采访中,参加
    JavaOne大会的Mike Milinkovich——Eclipse基金会的执行官——说Eclipse已经接受了
    Sun对于Eclipse项目的第一次提交。‘到今天为止,我们已经有了来自Sun的第一个提交者
    ,’Milinkovich说。‘他们为Eclipse平台提交了代码,使得SWT[Standard Widget
    Toolkit]能够应用于Solaris x86/Motif上面。
    --
       强极则辱情深不寿谦谦君子温润如玉
       生死由命富贵在天多看少动多做多错
       如临深渊如履薄冰见微知著伺机而行
       心将燥时制之以宁将邪时闲之以贞将求时抑之以舍将浊时澄之以清
       基于对策而非臆测有才而性缓定属大才有志而气和斯为大智用志不纷乃凝于神
    ※ 来源:·水木社区 http://newsmth.net·[FROM: 202.108.130.*]

    =======================================================
     
    发信人: kabbesy (封印者·Annual Anneal), 信区: Java
    标  题: 发个相对原始的·Sun开始支持Eclipse
    发信站: 水木社区 (Mon May 22 21:00:20 2006), 站内
    May 18, 2006
     Sun and Eclipse join together to support Solaris x86 Posted by Ed Burnette @
    1:23 pm
    Digg This!
    A new committer from Sun has joined the Eclipse project and contributed source
    changes needed to support Solaris x86. As of 3.2RC4, Solaris x86 is an
    officially supported build. This was announced during a keynote address by
    Erick Gamma and John Wiegand. I'll have more on the keynote itself in a
    separate article.
    According to Eclipse director Mike Milinkovich, this represents the first Sun
    committer on an Eclipse project, and also set a new record for the quickest
    turn-around from contribution to new platform supported. Sun will be in charge
    of doing the actual builds on their own servers, and sending them to appear on
    the eclipse.org web site. It is hoped that this kind of cooperation can be
    replicated to other platforms, opening up Eclipse to run on a much wider
    variety of machines.
    Eclipse for Solaris x86 is available now from eclipse.org. Go to the downloads
    page, select  "All versions", then "3.2RC4" (or later), and then the package
    for "Solaris (x86/GTK 2)". See bug 84344 for more information.
     
    【 在 shomaru (爱生活爱靓颖爱子怡) 的大作中提到: 】
    : Sun开始支持Eclipse
    :
    --------------------------------------------------------------------------------
    : 2006.05.22  来自:CSDN   LWN
    : ...................
    --
    Good Night . MoCuishle

    ※ 来源:·水木社区 newsmth.net·[FROM: 218.247.140.*]
    5/10/2006

    【资源】JH Labs

    这是一个关注GUI与Java桌面应用的工作组:
     

    JH Labs is the alias of Jerry Huxtable. On this site you will find lots of stuff to do with Java, including source for lots of useful classes and image processing stuff. You'll also find information on stuff I'm working on.

    image editor

    Java Image Editor
    An image editor written in Java using the image filters.Suitable for editing icons or Web images.

    maps

    Java Map Viewer
    A map-viewing application written in Java.Features multiple layers, many import formats, many map projections.

    image processing

    Java Image Processing Pages
    Some articles on image processing in Java and a collection of image filters for Java 1.1, including blur, emboss, lighting effects and texturing. Source code included.

    laoyut managers

    Java Layout Managers
    A collection of useful Java Layout Managers with source code.

    unicode viewer

    Unicode Font Viewer
    A Java applet for viewing the entire Unicode font.

    JAI

    Java Advanced Imaging Classes
    A couple of useful JAI operators and codecs such as Mosaic and XML.

    particles

    Particle System Animations
    An applet which displays a particle system with a control panel to let you produce different effects.

    genetic art

    Genetic Art
    An applet for creating images using a genetic algorithm.

    mess

    Mess
    A Java painting applet for children with special painting tools such as: Baked Beans, Dirty Footprints and Paint Splats.

    games

    Java Games
    A few Java games, including mazes and the Java Train Set.

    fractals

    Mandelbrot Applet
    An applet for exploring the Mandelbrot set and Julia sets.

    flashcards

    Chinese Flashcards
    A simple flashcards applet for Mandarin Chinese.

    jmj3d

    JuggleMaster Java 3D
    An extension to JuggleMaster Java which adds a 3D viewer.

    timeshift

    Time Shift
    A Mac OS X application for changing the speed and pitch of music.

    Tablet Events in Java
    An article which shows how to receive tablet events in Java on Mac OS X.

    4/5/2006

    Jungleford's Home SUN分舵开张!

    年前申请的,但没成功……得到水木Java版前版主,现担任SUN中国社区管理员qyjohn的支持
     
     
    寄信人: qyjohn (Sweet Potato -- 结婚纪念日)
    标  题: Re: Java Docs API中文版第四部分发布
    发信站: 水木社区 (Sat Apr  1 17:55:17 2006)
    来  源: 221.216.159.153
    目前仍然在内部测试阶段,没有几个通过的外部用户。
    你如果感兴趣的话,把你申请的id告诉我,我帮你通过审查。
    【 在 jungleford (风清扬╬孤城斩菜羊) 的大作中提到: 】
    : gceclub里的blog貌似很萧条的样子 :) 刚开张的时候申请了一下,结果没有成功……
     
     
    寄信人: qyjohn (Sweet Potato -- 结婚纪念日)
    标  题: Re: Java Docs API中文版第四部分发布
    发信站: 水木社区 (Wed Apr  5 12:13:44 2006)
    来  源: 192.18.43.17
    已经通过了,有空就把你原来的那些文章县转贴过来先吧。
    【 在 jungleford (风清扬╬孤城斩菜羊) 的来信中提到: 】
    : jungleford
    : 不过近来忙,也顾不上打理blog了 :)
     
     
    于是乎,今天blog终于建立了
    内容也是重复这里的Java部分。不过我纳闷,这么多分舵,灌得过来么?
    3/23/2006

    【SmartCalendar】新增JNLP发布!

    需要你的机器至少有JRE 5.0以及JWS(即Java Web Start,通常JRE和JDK 1.4以后都会带),程序启动地址:
    在弹出的“安全警告”对话框中点“是”。
     
    在我的机器上试验远程启动成功,你愿不愿意试一下?
    3/14/2006

    SmartCalendar 0.1 beta released!

    经过jungleford几个月业余时间的设计、编码、加工和文档化之后,时钟和日历的可视化组件库SmartCalendar终于发布到了sourceforge上,这是本人做的第一个(估计也可能是最后一个)比较正规化的软件,虽然目前规模很小,但个人觉得还是比较有意义的:某种程度上为JDK没有GUI日历组件的问题提供了一种可选的解决方案——当你在用JFileChooserJColorChooser的时候,或许会纳闷怎么没有日期选择框呢?当然,这个工作早已有人做了,我的想法只是提高它的可重用性和规范化一些;锻炼了一些建模能力,理解了一些设计模式的思想;熟悉了一些软件设计规范化和文档化的过程;当然,嘿嘿,也锻炼了一把英语作文。
     
    您可以从https://sourceforge.net/projects/smartcalendar/访问到这个项目的主页。下面是这一版本的intro:
     
    ============================================================
    -------------------------------------

              SMART CALENDAR

         for Java(TM) Applications

    -------------------------------------

    ************
    * CONTENTS *
    ************

    0. History

    1. Introduction

    2. Features

    3. Documentation and API Specification

    4. License and Announcement

    5. Acknowledgements

    6. Contact Me




    0. HISTORY
    ----------

    The latest version of availability is SmartCalendar 0.1 beta.

    - SmartCalendar 0.1 beta [Feb 21th, 2006]



    1. INTRODUCTION
    ---------------

    1.1 Why do?

    As we know, class "Date" and "Calendar" in package "java.util" have provided plenty of functions to deal with the requirements related with time and calendar computation. However, we still feel a bean of GUI form in current JDK library is missing to help us fulfil the same kind of tasks, which is exactly my motivation to develop SmartCalendar.

    1.2 What is it?

    SmartCalendar is a library of graphical calendar beans, including calculagraph and calendar tools. It is purely Java based,and develop environments are:

    - SUN Java(TM) 2 Platform Standard Edition 5.0 Development Kit (JDK 5.0)

    - Eclipse Software Development Kit (SDK) 3.1 with Visual Editor

    1.3 Pre-Requisites

    JRE or JDK 5.0 or above and compatible environments. You can get them from

    http://java.sun.com/j2se/1.5.0/download.jsp

    1.4 Installation

    - Download the latest version from http://SourceForge.net/. Current archive is

      smartcalendar-0.1beta-bin.zip .............. only binary code and documents

      smartcalendar-0.1beta-src.zip .............. only source code and documents

      smartcalendar-0.1beta-doc.zip .............. only documents

      smartcalendar-0.1beta-all.zip .............. full codes, including binary code, source code, and documents

    - Decompress the archive into an arbitrary directory, e.g. "SmartCalendar":

      For Windows OS, use Winzip or WinRAR or similar tools.

      For UNIX OS, use the command "unzip":

          unzip smartcalendar-0.1beta-all.zip -d /SmartCalendar

      Of course you can use OS independent command "jar" as:

          jar xvf smartcalendar-0.1beta-all.zip -C SmartCalendar/

      then the structure is:

      SmartCalendar/
        |
        |_smartcalendar-0.1beta/
            |
            |_bin/
            |   |_   ........................... the binary codes
            |
            |_doc/
            |   |_   ........................... the documents
            |
            |_example/
            |   |_   ........................... some sample codes
            |
            |_src/
            |   |_   ........................... the source codes
            |
            |_build.xml   ...................... ANT build file
            |
            |_smartcalendar.jar   .............. the JAR archive of this library
            |
            |_ChangeLog.txt   .................. the log file of changes
            |
            |_LICENSE.txt   .................... the LGPL file
            |
            |_README.txt   ..................... this file
            |
            |_README-zh_cn.txt   ............... a Chinese version for this file
            |
            |_ReleaseNote.txt   ................ the release note

      In smartcalendar-0.1beta-bin.zip, smartcalendar-0.1beta-src.zip, or smartcalendar-0.1beta-doc.zip, the directory structure is a little different. For example, in smartcalendar-0.1beta-src.zip, you can use the command

          ant

    to rebuild the project, of course, you must add a parameter in your environment variable list to indicate where the apache ANT program is. For convenience, I wrote two scripts, and execute the batch file

          build.bat

    on Windows, or

          chmod +x build.sh
          ./build.sh

    on UNIX-like OS.

    - Setup your environment variables (may be optional, depending on your JRE installation way):

      JAVA_HOME ----------> <your JRE or JDK dir>

      ClassPath ----------> .;%JAVA_HOME%\lib
                                     or
                                     .;%JAVA_HOME%\jre\lib

      Path ---------------> %JAVA_HOME%\bin

    - Launch the sample codes:

      For Windows OS, open a command console, enter:

          cd SmartCalendar\smartcalendar-0.1beta\example
          run.bat

      For UNIX OS:

          cd SmartCalendar/smartcalendar-0.1beta/example
          chmod +x run.sh
          ./run.sh

    If you want to use this library in your own program, just copy smartcalendar.jar to your workspace, and add it to your classpath.



    2. FEATURES
    -----------

    Till now, the development of SmartCalendar is still ongoing, but it already has some basic functionalities including:

    - A suite of graphical clock interfaces:

      * Digital-type clock bean

      * Analog-type clock bean and entire extendable APIs

    - Calendar interfaces:

      * Month calendar interface and default implementation

      * Year calendar bean, actually it is reusage of month calendar bean

    For more details, please refer to "doc/manual.html".



    3. DOCUMENTATION AND API SPECIFICATION
    --------------------------------------

    Manuals and APIs in JavaDoc format are archived in directory "doc/". All of them are HTML pages.



    4. LICENSE AND ANNOUNCEMENT
    ---------------------------

    This project is licensed under the terms defined in LICENSE.txt, it is a copy of GNU Lesser General Public License (LGPL).

    SmartCalendar is an open source project. The source code of the software is available upon requests, but must be marked with "Powered by Samuel Lee" whenever it is redistributed, or "With contributions from Samuel Lee" whenever it is modified. The author will NOT be responsible for legal liabilities caused by any redistribution with or without any modification.

    CAUTION: THIS SOFTWARE MUST NOT BE USED FOR ANY COMMERCIAL PURPOSE WITHOUT THE AUTHOR'S PERMISSION! ANY VIOLATION MAY BE FACED WITH LITIGATION!



    5. ACKNOWLEDGEMENTS
    -------------------

    The codes written by Mitch Goldstein give me lots of ideas and hints, so that I used and modified some of them in my own work. If you are interested in his works, please follow this link:

    http://www-128.ibm.com/developerworks/edu/j-dw-java2d-i.html

    And thanks to my friend Mr. Rong, he revised this document and gave me many advices.



    6. CONTACT ME
    -------------

    If you find any bugs or have any suggestions, please feel free to inform me, and I will appreciate your valuable and selfless help. You can get in touch with me by the following e-mail address:

    smartcalendar@gmail.com

    Thanks for all, and all the luck in the world! Sincerely and truly,

                                                  SAMUEL LEE

    Copyright 2006 The SmartCalendar Project, Samuel Lee
    3/13/2006

    FT,被reject了!

    原因和我猜想的一样,就是license的问题,我昨天试着加了个Other license,把自己anouncement里的东东copy了进去,结果收到的review greetings里面就说“You have selected a license which is not an OSI-approved Open Source license ...”,吓得我赶紧把这条去了,再submit。
     
    此一小节可窥见sourceforge工作效率之高……
    3/12/2006

    【SmartCalendar】准备发布,先睹为快!

    年后到现在有一半时间处于忙碌状态,只能抽空完成intro和manual了。看了sourceforge好像审查还颇严格,不知道通不通得过,主要是license的问题,根据朋友的建议想选LGPL,但又不想让第三方随便拿去参与从事商业活动,矛盾ing……
     
    不管怎么样,毕竟是jungleford第一个比较formal的作品,在发布前先给个临时链接,美其名曰:“preview版”
     
    binary version:
     
    full version: