大梦想家

5年开发工程师,2年实施经理,X年售前顾问,......
数据加载中……

2008年3月3日

Could not instantiate class XXX from tuple at AliasToBeanConstructorResultTransformer 的处理办法

今天客户方服务器上突然有一个功能保存了,查看日志信息后发现,错误信息:

Could not instantiate class XXX from tuple at AliasToBeanConstructorResultTransformer...

Google了很久才发现有可能是HQL语句中别名的问题,具体原因未知,现在处理办法是,将下面的语句中的别名去掉:

StringBuffer hql = new StringBuffer("select new ContractItem(l, "
+ " pi.unitPrice, " + " pi.currencyType, " + "pi.currencyTypeDisplay," + " pi.units, "
+ " sum(pi.quantity + pi.adjQuantity), " + " pp, " + " pi.task) "
+ " from PurchasePlanItem pi " + " join pi.purchasePlan pp"
+ " join pi.priorList l " + " where l.supplierNo = ?  "
+ " and pp.id in (");
具体是否可以解决,还要看一会儿的部署情况。

posted @ 2013-01-09 10:57 阿南 阅读(2256) | 评论 (0)编辑 收藏
在企业内部部署Chrome的课前预习

    上篇文章中我简单阐述了军工企业信息化遇到的困境,而我们公司(西安融智软件有限公司www.xardmu.com)则主要是面向军工企业进行软件产品的研发和定制项目的开发的。
    在产品实施和项目研发过程中,我们的前端技术人员需要做大量的浏览器兼容性的工作。痛苦至极啊~而且,即便完成了兼容性的修改,浏览器端的JS解析又变成了巨大的瓶颈!例如我们有一个项目为了提高用户使用的时的方便性,使用了EXTJS4,结果在IE6下性能极其低下。我们的P8是一个项目管理软件,需要使用到基于EXTJS的Gantt组件,但是此组件在IE6下十分不稳定,而且经常导致IE6崩溃。
   介于上面的种种问题,我们开始寻找从浏览器上解决问题的方法,例如使用FireFox或者Chrome,因为军工企业都有域,所以通过域安装一款软件是十分容易的。经过权衡,我们决定使用Chrome做为我们软件的入口。
   在企业内部署Chrome其实有三种方式:
   1.直接使用Chrome的某一个版本,对此版本进行精简和简单的参数配置,或者内置一些自定义的插件,直接进行部署。
   优点:技术门槛较低,只需要简单的精简安装文件和配置参数即可。
   缺点:无法通过统一的策略管理局域网内所有的部署情况和策略。
   2.使用Google提供的Chrome商业版,通过Google提供的商业版可以轻松定制自己企业内部的Chrome,并生成分发文件,同时可以通过配合域策略完成对局域网内的客户端的行为进行限制。
   优点:此版本是11年放出的,一直和多个大型企业紧密合作,相信不久将会形成更加完善的方案,从而在企业级应用市场站稳脚跟。
   缺点:需要在线安装。
   3.使用Google的Chrome Frame,一个让披着IE外壳的Chrome,拥有Chrome的所有性能,只是披着IE的外壳而已。
   优点:对于较老一些的企业,而且企业内部又拥有大量的IE时代产物的企业,绝对是一个好选择。
   缺点:需要在线安装。原有软件代码需要修改,才能在用户浏览时使用Chrome模式。

   看到痛苦了吧?都需要在线安装。看来下一步只能开始研究Chrome的源码,修改并编译属于自己的浏览器了。。。

posted @ 2013-01-03 12:37 阿南 阅读(496) | 评论 (0)编辑 收藏
查询Oracle的BLOB类型

最近在做项目的过程中,有些时候需要用Oracle的BLOB/CLOB类型存储一些很长的文章,一直不知道怎么来进行相关的检索,经过不懈的努力,终于能够解决这个问题了。查询语句如下:
 
select count(*) from 表名 where dbms_lob.instr(表名.列名, utl_raw.cast_to_raw(convert('关键词','utf8')), 1, 1) > 0;
 
需要注意的是,这个解决方案只能查询BLOB/CLOB中存储的是经过处理的字符串。
 
本方法在Oracle 10g上测试通过
转自http://commandos.blog.51cto.com/154976/128732

posted @ 2010-06-17 11:03 阿南 阅读(830) | 评论 (0)编辑 收藏
谁不知道构架?

    作为一个技术人员,谁不知道构架?

    前一段时间公司找开发人员谈心,有位领导问一位开发人员,大致对话如下:

    A:“你了解咱们现在产品的构架吗?能不能谈谈你对构架的看法?”

    B:“… …”

    A:“说说看吧~”

    B:“我不懂构架!构架是什么?咱们现在的产品还有构架呢?”

    作为一个有3年工作经验,2家公司经历的VC程序员来说,我觉得,这几年的积累是白做了!这样的思想永远都只能停留在写程序上~

    一个产品没有构件,就如同一个人没有灵魂一样!他不是没有,只是你没有去思考,没有去发现他而已!

    我记得袁洪刚说过,“一个伟大的产品背后一定有一个伟大构架师!”,我坚信这一点~产品好坏一方面决定于对现实问题的解决程度,另一方面是构架的好坏!

    几年前,中国的软件公司里面很少出现构架师/架构师这样的角色,这几年开始有改观了,越来越多的人开始认识到很多错误的问题,其实从一开始就是错的。很多事情并没有谋定而后动。一味的追求简单,到最后变成了下线很简单了!

   说自己不知道构架的开发人员有两种,新手和没有思想的新手,拼命的同时我们也应该停下脚步想想,抬起头看看天空。别总把经验的缺失都归结于时间的长短,更应该想想自己是否真的积累过。

posted @ 2009-07-03 16:33 阿南 阅读(1633) | 评论 (6)编辑 收藏
EJB3下无状态会话Bean发布为WebService

    无状态会话Bean发布为WebService是非常有意义的,因为如果我们将每一个EJB模块按照SOA的思想做成一个一个独立的服务模块(这里不讨论SCA,我认为Apache的SCA框架还不够强大,文档还不够全面),同样的代码在JavaEE体系之内的应用程序可以直接使用EJB3直接访问,JavaEE体系之外的应用程序可以直接使用WebService访问,这一点是非常有意义的。

    下面要考虑的就是如何只写一份代码,让它能做两样事情。

    网上有大量的使用EJB3发布WebService的教程,但是这些教程都是一个人写的,基本上没有太大的参考价值。最重要的是,他写的元注释都是写在实现类上的,接口上没有做任何描述。这种做法有两个问题,第一如果你的会话Bean使用了EM,那么麻烦了,JAXB在做绑定的时候不认识接口;第二WSDL文件的描述实际上应该是基于接口的描述,应该和实现类没有太大的关系。

    看看网上流行的代码:

 

1@WebService(name = "PurchaseArrival", serviceName = "PurchaseArrivalService"
2@SOAPBinding(style = SOAPBinding.Style.RPC) 
3public class PurchaseArrivalImpl implements IPurchaseArrival {

 

注意,基于RPC绑定模式下List,Set一类的接口都是不可传输的,这点会很麻烦,要用必须用实现类。

看看我的代码:

接口:

 

1@WebService(name = "ILogRemoteService",targetNamespace = "http://www.glnpu.com/dmp/xml"
2@SOAPBinding(style = SOAPBinding.Style.DOCUMENT) 
3public interface  ILogRemoteService {

 

实现类:

 

1@Stateless 
2@Remote(ILogRemoteService.class
3@WebService(endpointInterface = "com.glnpu.dmp.server.service.base.log.ILogRemoteService",serviceName = "LogRemoteService"
4public class LogRemoteService extends BaseService implements ILogRemoteService {

 

这个WebService是针对接口发布出去,而且使用的DOCUMENT样式,可以直接使用List、Set的接口。

这个WebService生成的WSDL文件很有意思:

 

 1<definitions name="LogRemoteService" targetNamespace="http://impl.log.base.service.server.dmp.glnpu.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://www.glnpu.com/dmp/xml" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.log.base.service.server.dmp.glnpu.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 2
 3<import location="http://127.0.0.1:8080/LogRemoteServiceService/LogRemoteService?wsdl&resource=ILogRemoteService_PortType25057.wsdl" namespace="http://www.glnpu.com/dmp/xml" />
 4
 5<service name="LogRemoteService">
 6
 7<port binding="ns1:ILogRemoteServiceBinding" name="LogRemoteServicePort">
 8
 9<soap:address location="http://127.0.0.1:8080/LogRemoteServiceService/LogRemoteService" />
10
11</port>
12
13</service>
14
15</definitions>
16
17

 

里面有import来指引到真正的WSDL文件。这样很容易将会话Bean变成WS~一样的代码两样的功能,超值!

posted @ 2009-07-02 13:54 阿南 阅读(1926) | 评论 (0)编辑 收藏
Wazaabi 2.0 让我看到了自定义界面设计器的希望

    Wazaabi 2.0 基于 Eclipse3.4/EMF/GEF 的动态界面设计和现实组件,依赖EMF进行界面描述,依赖GEF进行界面显示。

    比较起XUI,XSWT,它的设计器更加的完善,功能比较1.0版本也有很大的提高,而且作者也提出了使用EMF进行数据绑定的思路和实现。

    麻烦的是它本身只提供了Fill和Row两种布局,Button、Text、List、Label这些基本控件。还好作者的文档功底不错,简单几张图就把自己的设计思路描述的清清楚楚,高手所为,赞一个!

   在它基础上可以很简单的进行扩展,而且比扩展VE要简单的多~这是我喜欢的!现在对它的使用本人还是处于观望态度,一方面等待它的持续更新,另一方面等待E4的激动人心的放出!

    有兴趣的朋友可以看看http://www.wazaabi.org/index.php?title=Main_Page

posted @ 2009-07-01 10:13 阿南 阅读(1968) | 评论 (1)编辑 收藏
不怕错,就怕不认错

    明显第一种构架比第二种构架好很多,但是我们偏偏在第二种构架上面挣扎了半年的时间。

    总是有各种各样的接口和推辞说业务太复杂,客户催的太紧,没办法把业务放到服务器上,成本太高了!已经是2009年了,10年前大家就意识到维护是关键,业务一定要封装,不能分散于客户端… …10年后的今天我们竟然还在挣扎!完全没有思想,完全没有设计,完全没有接口,完全没有OO… …!!!

    项目告一段落我要拼命的重构,彻底抽离公共业务,彻底剥离特殊业务,我要OO,我要接口,我要设计,我甚至还要SOA!

    我错了!我认错!可是为什么公司还有那么多的人还是不认错呢?做了10年的产品,10年前的东西竟然比10年后的东西还好用!做了10年还是死缠烂打在10年前的原型之上~他们比我更悲哀~

posted @ 2009-06-30 16:36 阿南 阅读(463) | 评论 (3)编辑 收藏
Lock wait timeout exceeded; try restarting transaction

   粗心大意,老犯错!

   今天上午在调试EJB3调用WebService时一直遇到MySQL报出的这个问题。郁闷坏了,只是执行了一句update而已,就导致这样错误… …

   经过半个小时排查,终于找到问题所在了。原因是分布式事务引起的。

   场景描述:

EJB3操作A表-->调用WebService-->WebService操作B表

    在操作A表的时候需要等待WebService的调用,如果没有异常,则可以提交事务,如果出现异常,则不能提交事务;

    在操作B表的时候需要处理异常;

    一个简单的分布式事务,一般情况下是没有问题的~但是由于我的粗心大意,做成了EJB3也在操作B表,这样就导致了表被锁死的情况出现~真是郁闷啊!

posted @ 2009-04-23 21:41 阿南 阅读(4260) | 评论 (0)编辑 收藏
如何使用代码重启RCP程序?

    以前我们的产品重启RCP应用程序的时候都是找到本地路径的EXE程序,然后使用:

1Runtime runtime = Runtime.getRuntime();
2runtime.exec("cmd.exe /c " + excuteStr );


重新启动应用程序,太复杂,而且上次打开的参数都会丢失。

    今天早上翻看了一下Eclipse的org.eclipse.update.ui CVS,找到了:
PlatformUI.getWorkbench().restart();
使用这个重新启动RCP应用程序,非常的方便,而且参数都在,即使在开发环境下也一样没有问题!

posted @ 2009-03-17 18:53 阿南 阅读(1547) | 评论 (1)编辑 收藏
How to show taskbar icon when use splash?

    这个问题非常的重要!
    做过RCP开发的朋友应该都遇到过,使用AbstractSplashHandler做的登陆界面,在windows的任务栏上面是不会显示的,这个问题让客户用起来很麻烦,总是动不动就找不到登陆界面了!现在有解决办法了~

 1Here is the modified Code of the InteractiveSplashHandler Class:
 2
 3
 4    private Shell splash;
 5
 6
 7    public void init(final Shell splash) {
 8        // Shell replaced by one with task bar icon
 9        // (old Style: SWT.TOOL, new Style: SWT.NO_TRIM)
10        replaceShell(splash);
11        // Store the shell
12        super.init(getSplash());
13        // Configure the shell layout
14        configureUISplash();
15        // Create UI Colors and Fonts
16        createColorsAndFonts();
17        // Create UI
18        createUI();
19        // Create UI listeners
20        createUIListeners();
21        // Force the splash screen to layout
22        splash.dispose();
23        getSplash().layout(true);
24        // Keep the splash screen visible and prevent the RCP application from
25        // loading until the close button is clicked.
26        doEventLoop();
27    }

28
29
30    private void replaceShell(Shell splash) {
31        Shell newSplash = new Shell(Display.getCurrent(), SWT.NO_TRIM);
32        newSplash.setBackgroundImage(splash.getBackgroundImage());
33        newSplash.setBounds(splash.getBounds());
34        newSplash.setFont(splash.getFont());
35        newSplash.setVisible(true);
36        setSplash(newSplash);
37    }

38
39
40    public Shell getSplash() {
41        return splash;
42    }

43
44
45    public void setSplash(Shell splash) {
46        this.splash = splash;
47    }

48
49

稍稍进行改造,就可以了~

posted @ 2009-03-15 20:59 阿南 阅读(1287) | 评论 (0)编辑 收藏
VE真的回来了

    VE已经死亡很久了,整个Eclipse社区中,最悲壮的真的要属VE了。
    伟大的目标,没落的贵族!记得去年在北京的时候,经常有朋友问我VE怎么安装。呵呵VE2.0开始安装真的很复杂,偌大的Eclipse-WIKI里面还真的没有写多少关于VE安装的内容。
    去年下载过VE的源码,打算在VE的基础上做一个自己的设计工具,但是研究了很久,发现CVS上的源码都过于陈旧了,然后就再也没有关注过它了。
    很久没有真正的关注过Eclipse了,今天上来看看,发现VE真的回来了!
    现在VE的领导者是深圳的亚松(在西安有分公司,我还真想去试试... ...),而亚松最让我崇拜的大牛就是Yves YANG,呵呵,EclipseWord的大牛哦!
    我在自己公司的产品里面也引入了建模的概念,下一步就是根据模型来生成界面,再下一步就是改造VE,让二次开发人员开发起来更容易更加简单。
    祝福VE,希望有了亚松,VE会更好。
 

预告下一个系列文章:
    企业信息系统建模的思考;
    新VE源码分析;
   

posted @ 2009-03-15 15:38 阿南 阅读(1500) | 评论 (1)编辑 收藏
最好的软件界面绘制工具http://www.balsamiq.com/

我见过最好的软件界面绘制工具http://www.balsamiq.com/
真正能达到又快又好!





posted @ 2009-02-11 11:38 阿南 阅读(2380) | 评论 (0)编辑 收藏
初谈激情

    做人何惧艰险,豪情不变年复一年,做人有苦有甜,善恶分开两边,都为梦中的明天!
    上面这段签名是抄老莫的,每读一次都会有不同的体会。
    没有维护Blog已经有两个多月了,这两个月一直在北京出差,已经待了两个月了,还得再待一个月!每次出差离开西安总是感觉不舒服,而且从心里要好长时间才能适应,所以就一直没有维护Blog。
    晚上和一位美女吃饭,聊天中突然聊到了这个问题,仔细想想为什么做什么都觉得没有意思?为什么会不适应外界环境的改变?为什么觉得一切都不爽?
    是因为没有了激情,最近缺少了激情!缺少了创造的激情,缺少了生活的激情,缺少了工作的激情,缺少了写Blog的激情... ...
    重拾激情,这才是重要的!做人何惧艰险!人生路上本来就充满了艰险,要勇敢面对,无论是失意还是快乐... ...何必在乎得失,终究一切都会过去!抓紧时间,去实现自己梦想!

posted @ 2008-07-20 23:45 阿南 阅读(463) | 评论 (4)编辑 收藏
Eclipse3.3-3.4MX多国语言项目放出

    老版本的Eclipse多国语言项目只维护到3.2.1版本,以后就再也没有维护了,我觉得主要的问题是,语言包太大,一个包中会有多种语言,对于RCP版本的产品汉化起来很不舒服,明明我只要中文,结果要加入N个语言进来,而且还是20M的包~
    Eclipse的http://download.eclipse.org/eclipse/downloads/最近刚刚放出一个叫做Babel project的项目,这个项目就是在解决国际化的问题,这个项目旨在为每一个插件提供独立的单语言包,这样在做RCP项目的时候,可以根据需要,打不同的包就可以了~!
    周五的下午测试了一下,汉化率绝对在99%以上,而且很多地方的汉化还是很到位的~再有哪些客户看不懂的地方的了~
    只是有一个很小的麻烦,就是RCP原来的异常对话框中的内容,每一句后面都会有\n,莫非多国语言的时候\n被转义了?
    希望可以得到改进!

posted @ 2008-04-27 09:33 阿南 阅读(3152) | 评论 (4)编辑 收藏
来自Neil Bartlett 的OSGI BOOK 一个预览版本放出

    Neil Bartlett的当下工作就是完成《OSGi in Practice》,今天他在Blog中已经放出了本书的一个预览版本(第二章)。一下是书的目录:

  • Introduction
  • First Steps in OSGi
  • Bundle Dependencies
  • Introduction to Services
  • Example: Mailbox Reader GUI
  • The Whiteboard Pattern
  • Declarative Services
  • The Extender Pattern
  • Integrating Third-party Libraries
  • Building Web Applications

    从PDF的授权看是“署名的,非商业的,可流传的”,我估计这本书上市的时间应该很近了,而且官方的PDF版本也会同步推出的~

    喜欢的朋友可以下下来看看,写的很详细,个人认为是本好书,而且此作者应该是Eclipse基金会的人,所以对OSGI的理解也不错有什么问题~

  • ps:连接地址:http://neilbartlett.name/blog/osgibook/

    posted @ 2008-04-18 12:41 阿南 阅读(1623) | 评论 (3)编辑 收藏
    SQL文件中有Functions,Type如何在sqlplus中执行?

        SQL文件中有Functions,Type,那么在sqlplus中要start直接执行SQL文件怎么办?例如:

    CREATE OR REPLACE FUNCTION strcat(input varchar2 )
    RETURN varchar2
    PARALLEL_ENABLE AGGREGATE USING strcat_type;

        将上面的Functions写入SQL文件中,然后在sqlplus中用start执行此文件,后果是此Functions并没有被创建到数据库中,在后面加上commit;也是没有用处的,提示的效果是SQL并没有结束,sqlplus并没有真正执行。

        这怎么办?Google了老半天,也没有人写到这个问题,但是看看人家写Functions和我写的有一点点区别,修改一下!

    CREATE OR REPLACE FUNCTION strcat(input varchar2 )
    RETURN varchar2
    PARALLEL_ENABLE AGGREGATE USING strcat_type;
    /

        在Functions最后一行加上一个/,再执行就OK了~看来sqlplus是把/作为一个Functions或者Type的结束符了!大家注意了!

    posted @ 2008-04-15 16:04 阿南 阅读(1845) | 评论 (2)编辑 收藏
    注意!Shell.open()

        Shell.open()非常重要!

        今天在做SWT中显示OCX控件,照着Demo写的,但是不知道为什么每次执行到:Variant pVarResult = auto.invoke(dispIdMember, rgvarg);

       JVM都会直接退出~error如下:

    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x73d321b9, pid=3696, tid=2208
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
    # Problematic frame:
    # C  [MFC42.DLL+0x21b9]
    #
    # An error report file with more information is saved as hs_err_pid3696.log
    #
    # If you would like to submit a bug report, please visit:
    #   http://java.sun.com/webapps/bugreport/crash.jsp
    #

    [error occurred during error reporting, step 270, id 0xc0000005]

    寻便了网络也没有解决办法,刚开始以为是JVM版本的问题,于是换了3个版本都是同样的问题~真是郁闷!

       最后通过和Demo代码的比较,发现Demo中有一句shell.open(),注释掉此句,Demo也是引起JVM退出!在代码中加入shell.open(),搞定!

       原来这个open方法还有这么多的玄机啊,但是javadoc上却只字未提!

    posted @ 2008-04-14 20:10 阿南 阅读(2062) | 评论 (0)编辑 收藏
    今天愚人节,被Google欺骗了!

    早上看到Google的人肉搜索的招聘广告,兴冲冲的发了邮件,申请,结果:

    尊敬的朋友,
    非常感谢您在4月1日积极参与谷歌人肉搜索志愿者招聘,这是谷歌于2008年4月1日"愚人节"推出的让大家"会心一笑 暂解烦忧"的小笑话,在此谨祝大家"愚人节"快乐,天天快乐。
    如果您对谷歌公司招聘感兴趣,欢迎进一步登录我们的招聘网站寻找自己真正心仪的职位。http://www.google.cn/intl/zh-CN/jobs/
    谷歌肉搜组
    Dear Friends,
    Thank you very much for your interest in the job positions of Google's "Grassroots search" volunteers on April 1. This is a joke that Google China does on April 1, 2008 to give you some light-hearted mood. Hope you laughed because of it :-). Here, we want to wish everyone "Happy April 1st day and Happy Everyday."
    Google Grassroots Search Engineer and Product Group

     

    晕~被欺骗了!写的跟真的一样的:

    关于人肉搜索

    什么是人肉搜索?

    人肉搜索与刺青、美白、护肤、减肥等直接在人肉上施行的种种行为无关。顾名思义,人肉搜索就是利用现代信息科技,变传统的网络信息搜索为人找人,人问人,人碰人,人挤人、人挨人的关系型网络社区活动,变枯燥乏味的查询过程为一人提问、八方回应,一石激起千层浪,一声呼唤惊醒万颗真心的人性化搜索体验。人肉搜索不仅可以在最短时间内揭露某某门背后的真相,为某三某七找到大众认可的道德定位,还可以在网络无法触及的地方,探寻并发现最美丽的丛林少女,最感人的高山牧民,最神秘的荒漠洞窟,最浪漫的终极邂逅…… 人肉搜索追求的最高目标是:不求最好,但求最肉。

    谷歌为什么要创建人肉搜索引擎?

    谷歌自进入中国市场以来,一直致力于根据本地需求改进用户的搜索体验。谷歌很早就意识到,自发的、分散的、有意或无意的人肉搜索行为早在中国互联网诞生之初就存在并茁壮成长着。中国互联网界发生的几乎每一起重大事件,尤其是娱乐性事件,都有可能成为人肉搜索技术的试金石。为了丰富人民群众的业余文化生活,为了使广大网民在最短时间内赶超人肉搜索的世界水平,谷歌决定投入巨资打造亚太地区最大的人肉搜索引擎。

    谷歌人肉搜索引擎有哪些特点?
    • 规模最大:第一期工程拟招募人肉搜索志愿者2500万名,完成后将成为亚太地区最大的人肉搜索引擎。
    • 创新最多:256项专利技术,1024篇相关论文,4096次用户调研,65536轮预览版测试。
    • 领域最全:搜索范围涵盖娱乐、影视、体育、社会、名人、百姓、历史、地理、物种、太空等领域。
    • 速度最快:平均查询响应时间32秒。
    • 挖掘最深:曾在预览版测试中,用时128秒,成功定位了中国大陆生产的第一只自动冲水马桶。

    人肉搜索招聘需求

    人肉搜索志愿者管理专员

    组织和领导以志愿者为核心的超大规模人肉搜索团队,整合来自数千万搜索志愿者的小道消息,从茫茫人海中发掘信息背后的奥秘。严格管理,制止人肉搜索过程中可能出现的扯皮、造假、谣传、起哄、攻讦、谩骂等不文明行为,创造合理、有序、创新、务实的人肉搜索新秩序。

    能力要求:

    • 博士以上学历
    • 管理学、传播学或相关专业毕业
    • 掌握五种以上方言
    • 有八卦主义精神和凡事不着调作风者优先

    请将您的中英文简历以文本或HTML的格式发至renrou-jobs@google.com, 并在邮件的标题中注明“人肉搜索志愿者管理专员”。邮件正文请使用中文,所有英文信息请以附件形式提交。

    人肉搜索志愿者(兼职)

    在业余时间为人肉搜索引擎奉献智慧、汗水和好心情。利用谷歌研发的人肉搜索平台,与其他数千万志愿者并肩工作,使用并行人肉计算的方式,对疑难问题坚持不动摇、不软弱、不抛弃、不放弃的肉骨茶原则,为广大网民提供第一手的,带有人情味儿的,具有震撼力和可传播性的搜索结果。

    能力要求:

    • 学历不限,专业任选
    • 有强烈的好奇心和求知欲
    • 对常人无法获取的信息有敏锐的感知能力和打破砂锅问到底的坚定信念
    • 自备联网电脑一台,电话机一部,粉笔若干,餐巾纸一箱,《八卦人物风云榜》16开大字本一套共40册

    请将您的中英文简历以文本或HTML的格式发至renrou-jobs@google.com, 并在邮件的标题中注明“人肉搜索志愿者(兼职)”。邮件正文请使用中文,所有英文信息请以附件形式提交。

    致猎头公司:对于未签约的猎头公司提供的简历,谷歌将不支付任何费用。

    posted @ 2008-04-01 10:24 阿南 阅读(729) | 评论 (2)编辑 收藏
    RAP再次放入令人振奋的Demo

        此次RAP放出了draw2d_in_RAP的Demo,主要展示的是draw2D在RAP框架上的应用,还没有下载真正的Demo试用,但是从视频上看,好像是融合了flex来做图形展示和拖拽,有兴趣的朋友可以看看Demo的代码,然后告诉我~

        上次e4放出的基于web的IDE就使用flash作为代码展示和编辑的编辑器,看来Eclipse社团也感觉到纯的js基本上不能完成任务了。

    Demo下载地址:http://www.innoopract.com/fileadmin/user_upload/Bilder/Films/draw2d_640x480.mp4

    posted @ 2008-03-27 12:29 阿南 阅读(2534) | 评论 (2)编辑 收藏
    微软真的来搅局吗?

        关注过上一篇文章的朋友,基本都对最后说到的微软要支持SWT的开发提出了不少自己的看法。
        下面我们再来看看来自cnBate.com的新闻:

    Java程序员们可能会经常遇到Windows下的UI问题,Java程序总是和Windows的外观统一不起来,特别是Vista,难度更高.
    而现在,微软微软宣布它将为Eclipse基金会提供了标准的widget工具,这意味着Java将与Windows Presentation Foundation实现互通,允许应用程序原生采用Windows VIsta的外观.

    这也是微软未来开放计划的一部分,微软认为一个日益开放,透明的方式正在出现.之前,微软还成立了Linux的互操作性实验室,并与JBoss,Zend Technologies等公司实现了技术合作.

        微软真的在开源,不但支持了Linux,而且还来关注SWT,而且还有微软最近在收购Yahoo!,它最近非常关注开源事业,也许他真的要搅局,也许他真的是想做些事情,也许几年之后微软摇身一变真的变成了一个开源斗士了!
       微软更换了首席构架师,他的做事风格在改变,我想微软是在向开源界证明自己的实力,是想让人们相信自己,也许过几年微软还果真出了一个开源版本的windows了~

    posted @ 2008-03-21 12:34 阿南 阅读(1928) | 评论 (4)编辑 收藏
    Eclipse4.0放出部分Demo

        早上,习惯性的打开GoogleReader,看看世界的变化。发现Planet Eclipse上已经有参加EclipseCON2008的朋友把Eclipse4.0(简称e4)Demo地址以及一些截图放到Blog上了~我们就来欣赏一下Eclipse的巨大变化吧!

        呵呵,是不是很可怕,一个基于web的开发工具?我在Eclipse的Wiki上已经看到这个截图的Demo了,但是还没有时间试用~
        此次放出的e4的demo基本上都是swt的调整,比方说可以使用swt来做flex,使用swt来做DOJO~,从这些方面就可以看到Eclipse正在向基金会想想的那样为e4提供一个基于web应用的平台,我想这个平台应该就是RAP了~而且从Demo上看,e4将会大大的涉足到web应用领域中,期待他们为我们带来再一次的惊呼!!!
        http://wiki.eclipse.org/E4/Running_the_demos  (e4的demo)

        还有一个令人振奋的消息,不知道是好事还是坏事-----微软已经决定进入Eclipse基金会,并打算开始资助SWT项目了。
       

    posted @ 2008-03-20 12:46 阿南 阅读(4144) | 评论 (9)编辑 收藏
    Planning for Eclipse 4.0(来自InfoQ)

    Earlier this week, the teams and developers working on the various projects of Eclipse began an intense debate regarding the next steps in the future of Eclipse, all triggered by the announcement of the incubation project titled 'e4' on the Eclipse committer mailing-list:

    The Eclipse Project PMC is announcing a new component, called E4, as part of the Eclipse Project Incubator.

    Component Description: 

    During the Eclipse Project 3.4 release cycle, one of the important plan items was "Create the Eclipse 4.0 Plan". The intent of this work was to identify the most pressing issues that would impact the ongoing success of Eclipse, and come up with a plan to address them.  The result was the design of a new platform "e4", which will be the basis for Eclipse 4.0. 

    The goal of the e4 component is to provide a public venue for the initial explorations that were done, leading up to the e4 design. We expect to continue to work in this area until we have reached consensus on how the full e4 effort will be structured.
    The e4 moniker is a reference to Eclipse 4.0, which would be the next major release number for the classic Eclipse distribution and platform projects. The last three major Eclipse releases shared these version number relationships: Callisto corresponded to the Eclipse platform v3.2, Europa corresponded to the Eclipse platform v3.3, and the upcoming Ganymede release corresponds to the Eclipse platform 3.4.

    Historically it has been common practice for these plan documents to outline the thematic goals for a given release of what is commonly called the Eclipse top-level project. Traditionally, the top-level project has encompassed the Eclipse platform, the Java development tools, the Plug-in development tools, and all other components of the commonly referred-to Eclipse 'classic' distribution (the Java and Eclipse Plug-in IDE). This plan format has been used since the 2.1 release of Eclipse, and each prior plan is available on the Eclipse top-level project site. The e4 announcement is a somewhat different approach in that community involvement is being asked prior to the drafting of any plan.

    Initially, the e4 project is little more than a community gathering point; a place to track early changes and ideas in code. The goal of opening this project now has been described by many of those involved as an effort to get community input and ideas at EclipseCon 2008, and to then begin drafting a plan based on the community input after that point. Kevin McGuire, an Eclipse committer who primarily works on the Platform UI team, described e4 in this way:

    We on the platform team care passionately about Eclipse. We know you do too. We want to see it live a long, healthy life. We want it to serve its community as best it can. When we can’t achieve that it makes us sad. It’s clear to us that for Eclipse as a platform to remain long lived, vibrant, and relevant, it must be able to change. But the weight of a zillion plug-ins, projects, and API means the path of least resistance is stagnation, and the effort to effect change given the current constraint system is becoming monumental.

    Therefore, two things must happen:

    1. A new space must be carved out in which experimentation can happen, leading to change.
    2. New people must get involved, bringing with them their energy, ideas, requirements, knowledge, passion.

    These two are intrinsically tied.

    That is e4.

    While there was some heated discussion over the format and approach of the initial project announcement, the e4 project is likely to become a central test-bed for the various transformations that Eclipse will go through to reach its next major milestone. In the past, major version number increments for Eclipse have represented significant changes for the Eclipse project. The transition to Eclipse 3.0 encompassed the move of Eclipse to the OSGi platform, the announcement and creation of Eclipse rich-client platform, and both a look-and-feel and performance overhaul. The expectation is that Eclipse 4.0 will also represent such a major shift.

    InfoQ will continue to cover future Eclipse planning decisions as they become available.

    posted @ 2008-03-15 18:38 阿南 阅读(1944) | 评论 (2)编辑 收藏
    EclipseCON2008 only 1 week left!

        EclipseCON2008 only 1 week left!
        又一次开源界的盛会EclipseCON2008就要召开了~据我了解此次盛会将会吸引更多的开源厂商,领袖,开发者参与,其中就有来自微软的Sam Ramji(微软开源的Labs),关于OSGi的讨论依然是重头戏。
        虽然Eclipse的RAP的发布也有半年多了,也在开源界引起了不小的反响,但是RAP还是没有得到广泛的应用,来自RAP的主力开发商Innoopract Informationssysteme GmbH的消息,此次EclipseCON2008大会也会给RAP带来更多的利好消息,毕竟关于RAP的讨论被安排在第二场,仅次于第一场OSGi的议题。
        Eclipse4.0也被提上了讨论日程,在介绍中提到,Eclipse3.0主要在力推RCP平台,而Eclipse4.0将会将会带来一个全新的用户界面以及新的用户体验,将带领Eclipse进入到WEB应用中,我想在Eclipse4.0的时候RAP应用,将变成Eclipse的主推平台了。
        还有很多关于其他项目的讨论,但是我一直关注的VE的消息,好像还是不被人们注意,可见VE基本上已经死亡,而且我认为可以算是Eclipse基金会中比较失败的一个项目了!
       预祝此次大会硕果累累,祝Eclipse越走越好!

    posted @ 2008-03-08 12:52 阿南 阅读(1097) | 评论 (0)编辑 收藏
    使用JRuby为你的客户端助力

        预言了两天,终于决定在我们的RCP客户端中增加执行JRuby的功能。说是预言其实也没有什么好预言的,JRuby早有耳闻,Ruby也一直在学习。其实要解决的问题只有一个---解决Java实例如何给JRuby,然后有JRuby操作,其实不难,JRbuy官方的WIKI上有一个例子,但是那个例子有太多硬编码的问题,稍稍改造,将硬编码的内容抽取到JRuby中,就好了~

        我想说的其实是在RCP中加入JRuby的作用是:

        实施人员只需要写脚本就可以随意操作界面上的任意东西;

        使产品更进一步达到零二次开发的阶段;

        使用JRuby来开发SWT的界面,还是有比较复杂,在熟悉SWT开发和JRuby的情况下画一个比较复杂的界面时候就会非常复杂!这里还是建议使用类似于XSWT等XML界面描述语言,然后配合脚本完成功能。

    下面给出一个可以在运行JRuby的SWTShell:

    package com.glnpu.jruby;

    import java.util.ArrayList;
    import java.util.List;

    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Text;
    import org.jruby.Ruby;
    import org.jruby.javasupport.JavaEmbedUtils;
    import org.jruby.runtime.builtin.IRubyObject;

    public class RunJRUBY extends Shell {

        private RunJRUBY run;
        private Text text;
        /**
         * Launch the application
         * @param args
         */
        public static void main(String args[]) {
            try {
                Display display = Display.getDefault();
                RunJRUBY shell = new RunJRUBY(display, SWT.SHELL_TRIM);
                shell.open();
                shell.layout();
                while (!shell.isDisposed()) {
                    if (!display.readAndDispatch())
                        display.sleep();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * Create the shell
         * @param display
         * @param style
         */
        public RunJRUBY(Display display, int style) {
            super(display, style);
            run = this;
            createContents();
        }

        /**
         * Create contents of the window
         */
        protected void createContents() {
            setText("SWT Application");
            setSize(500, 375);

            text = new Text(this, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP | SWT.H_SCROLL);
            text.setBounds(0, 0, 492, 312);

            final Button button = new Button(this, SWT.NONE);
            button.addSelectionListener(new SelectionAdapter() {
                public void widgetSelected(final SelectionEvent e) {
                    Ruby runtime = Ruby.getDefaultInstance();
                    try {
                        //允许传对象,作为参数给JRuby
                        IRubyObject rootRubyObject = JavaEmbedUtils.newRuntimeAdapter().eval( runtime, text.getText() );
                        JavaEmbedUtils.invokeMethod( runtime, rootRubyObject, "run", new Object[] {run}, null );
                        //不传对象,直接运行JRbuy
                        //runtime.evalScriptlet(text.getText());
                    } catch (Exception e1) {
                        System.err.println(e1.toString());
                        e1.printStackTrace();
                    }
                }
            });
            button.setText("button");
            button.setBounds(335, 326, 48, 22);
            //
        }

        @Override
        protected void checkSubclass() {
            // Disable the check that prevents subclassing of SWT components
        }

    }

    下面是可以执行的JRuby代码:

    require 'java'
    module SWTTest
      include_package 'org.eclipse.swt'
      include_package 'org.eclipse.swt.layout'
      include_package 'org.eclipse.swt.widgets'
      include_package 'org.eclipse.swt.events'
    end
        class TestDialog < SWTTest::Dialog
          @shell
          @parentShell
          def initialize shell
              super(shell, SWTTest::SWT::NONE)
              @parentShell = shell
              open
          end
          def open
              createContents()
              @shell.open();
              @shell.layout();       
          end
          def createContents
              @shell = SWTTest::Shell.new(@parentShell, SWTTest::SWT::DIALOG_TRIM | SWTTest::SWT::APPLICATION_MODAL)
              @shell.setSize(500, 375);
              @shell.setText("SWT Dialog");
              button = SWTTest::Button.new(@shell, SWTTest::SWT::PUSH)
              button.setText("Test Button 1")    
              button.setBounds(147, 116, 48, 22);
          end
        end
      class TestMain
          def run shell
              TestDialog.new shell
          end
      end
      TestMain.new

    在JRuby代码的最下面有一个TestMain的类,主要是用于调用的~这一点是和其他的写法不同的!

    至于它有多强大,就看大家怎么用了~而且java和JRuby是运行在同一个JVM之上的,它可以使用此JVM下的所有对象!

    posted @ 2008-03-07 09:20 阿南 阅读(1279) | 评论 (4)编辑 收藏
    微软研发:制胜策略(实用方法三)

       不要用年终考评来订立学习目标,要利用年终考评来记录个人的成长。

        要让每一位程序设计师都明白,写出零错误程序是很不容易的,所以应该多花功夫用各种方法做最彻底的测试。

        纠正程序设计师以为加除错码会花太多时间的观念,应该训练程序设计师第一个反应是考虑加上除错码是否有道理,第二是考虑加除错码是否符合项目的目标与工作的优先级。

       不要让凡事不能的态度阻碍了创新。

       不要让程序设计师以为使用者并不在乎软件的质量。

       不要给使用者次品,宁愿延期交货,务必追求质量完美。

       程序设计师必须经常以使用者的观点来看自己写的程序,程序设计师必须能体会使用者的感受。

       在包装盒里的每一件东西,都是产品的一部分。

       将程序的可共享性当作优先考虑的目标之一,否则程序设计师将经常做重复的工作。

       从您的每件工作中创造最大的资源,不管是利用现有的杠杆,或是创造新的杠杆。

       如果进度发生落后,那表示有个地方出错了。您应该找出问题,并加以解决,不要一味要求组员加班,在问题没有解决之前,加班是没有用的。

       别误信加班等于增加生产能力,长期的加班只会伤害生产能力,对项目没有帮助。

       周末是属于组员私人的时间,不是公司的。公司不应该以打败竞争对手为理由,要求员工周末加班。

       强调思考的重要性,而不是长时间工作。

       训练开发小组懂得在正常工作时间内掌握好工作的效率,不要让他们超时工作,因为超时工作只是浪费时间的假面具。

       与程序设计师共同研拟出一份每日活动的时间表,把无法预期的临时公务变成固定时间处理的事情,并且把程序开发的工作放在最优先的地位,不要让其他次要的事情干扰到写程序。

       主管应该把自己视为团队中的一分子,与其他人平等,而不是高高在上。

    posted @ 2008-03-05 12:54 阿南 阅读(1195) | 评论 (0)编辑 收藏
    微软研发:制胜策略(实用方法二)

        用看程序的方式找错,是既懒惰又无效率的方法;

    随时睁大雪亮的眼睛,看看是不是有个悬而未决的问题,一定要有个人(或是由主管自己)来负责研究到底哪里出错,也许这种研究既花时间又无聊,但总比灾难发生之后再来花好几个星期收拾残局要好得多。

        问了错的问题,而导致错的答案,训练自己问出正确的问题!

    如果您能很清楚告诉别人,您想要的究竟是什么,这样别人才能给您真正需要的帮助,而不是做一些似是而非的虚工。

        勉强自己接下不可能完成的任务,实在是以长痛代替短痛的做法,而且长痛的是整个团队,该拒绝的时候绝对不能含糊;

        不要为了讨好别人而伤害双方的工作进程,您永远要根据自己的目标,做适当的决策。

        必须保护项目不受外界的左右,尤其是当这种操控来自特权人物之手。

        副产品对公司或产品都没有策略上的价值,充其量只是一种消费者回馈。

        不值得开发的功能就不要做。

        软件产品的开发,不能只为了有趣、挑战性,或是够有个性够令人眩目。

        遵循标准重于一切,特别是关于使用者界面的部分。

        确定您所要求的报告真的值得属下暂停工作,花那么多时间去写。

        请注意定期会议的价值,确定它值得每个人放下手上的工作。

        召开任何会议之前,请确定本次会议的目的是什么,达成这个目的的条件是什么,然后,务必达到开会的目的。

        不要利用进程表来驱使项目的进行,这对小组的士气伤害太大了。

        让日程表维持适度的紧迫,但又是可以做到的,好让组员振奋、不松懈,专心致力于项目的推进。

        绝对不要草率定出不可能的期限,导致组员为了赶进度而损害产品的质量。

        把长期的大项目,分成几个完整而独立的小项目,各小项目必须有一个主题。

        为了保持创意的活力和团队士气,必须让每一个小项目都有令人兴奋的结果。

        不要让程序设计师的学习停滞不前,要让程序设计师有机会磨练不同领域的技术,培养十八般武艺样样精通的组员。

        训练新进程序设计师时,先培养他对整个公司所有项目都有价值的技术,然后才培养本项目独有的技术。

        不要舍不得放您最优秀的程序设计师到别的项目去。如果他在您的项目已经没有新的东西可学,为了公司和他个人的前途,您应该把他推荐到别的项目,让他的成长永不间断。

        确定每位组员、每两个月都有一项技术上进步。

        一发现某处需要改进,就立即采取更正的行动。

    posted @ 2008-03-04 08:47 阿南 阅读(1366) | 评论 (1)编辑 收藏
    微软研发:制胜策略(实用方法一)

    首先还是先看一下书评。

    下面是来自china-pub的书评:

    作者详细描述了他在美国领导项目的各种实际的策略方法,教您如何开发高质量的软件,而且绝不延误。本书是为每一位从事研发工作的朋友而写,相信您在读过本书之后,一定急于推荐给您的主管、同事和您的朋友。

        卓越的领导者从不同的角度看世界。若是公司被大火烧得精光,他非但不为丢饭碗惊慌,反而利用火焰来烧烤一顿大餐。当每个人都摇头离去,卓越的领导者仍有充分的信心保持乐观,对每件事都从正面角度来思考。就因为凡事都看光明面,卓越的领导者并不把失败当失败,反将其当作学习克服障碍的经验。正因如此,卓越的领导者乐意尝试各种稀奇古怪的想法,并从中获得重大的突破,即使不成功,他只把这次经验当成获得信息的方式之一。这种领导人不一定要有经验,而是需要强烈的进取心和明确的理想,能够将理想与他人沟通,鼓舞他人共同追寻理想的能力,再加上一点机会,这就是能将理想实现的卓越领导者。

        每当有人完成了一项新的功能或特色,就发个e -mail 给大家。

    例如:

    “我已完成Faxmangler 的搜寻与取代功能。Frank”
    主管应该看一下结果,然后回一个:
    “我检查过F a x m a n g l e r的搜寻与取代,不太顺畅,请再修改。Hubie”
    或是:
    “很好,继续加油!Hubie”
    想想看,如果大家经常收送这类正面的e - m a i l,一定会觉得充满干劲,这和可恨的进度报告多么不同!程序设计师会很乐意看见这类的好消息,当自己送出完成工作的信息时,也会很有成就感;没有人会觉得这是很讨厌的报告。

        每当进度快要落后了,就到我的办公室私下讨论原因,我们一起开动脑筋寻求解决之道。

    例如:

    当某位程序设计师觉得自己可能要落后了,我会和他谈,研究将来如何避免这种事情。是我们在制定进程时疏漏了某一个重要环节吗?或是时间表定得太乐观了?是不是有个错虫( b u g )在作祟,害得程序很难写或无法测试?不论问题是什么,我们一定想办法解决掉,并且预防它将来再发生。

        尽可能减少项目中小组彼此间的依赖。

        目标越是明确,达成目标的过程就会越有效率。

        建立最适当的程序设计优先考虑顺序,并且让所有的程序设计师确实遵守。

    排出一个优先级表:

    • 体积大小(size)
    • 速度(speed)
    • 坚固性(robustness)
    • 安全性(safety)
    • 可测试性(testability)
    • 容易维护(maintainability)
    • 简洁(simplicity)
    • 再用性(reusability)
    • 可移植性(portability)

       一旦您掌握了这个概念,把它应用在项目上,您可以大声说自己确实是在聪明地工作,而不是辛苦地工。

        一发现Bug就立即清除掉,别拖延。

    作者给出的提示:

    错虫愈晚清除,时间花得愈多。

    在开发的过程就立即除虫,可以让您早些学到经验,然后就不会再犯同样的错误;相反地,如果到了项目后期才发现,您可能已经犯过多次同样的错误而不自知。

    发现错虫而立即除错是一种缓冲器,提醒那些讲求快速而不够谨慎的程序设计师,以后多加小心。

    若能保持没有任何错虫,您就能比较准确估出项目的完成时间。

    要求错虫随时发现随时改,等于是在开发过程中引进一个小小的质量管理机制,多方的防微杜渐,保护产品的正确性。

        学习前人的经验;

        好方法要让大家分享;

        项目只要有偏差,就需要调整,绝对不可以放任自流!

        定期暂停手边的工作,然后往前思考,随时做必要的修正,以避免未来的大障碍。

    有什么事情是我今天能做,而且可以帮助项目在未来几个月内顺利进行的?

    posted @ 2008-03-03 08:34 阿南 阅读(1415) | 评论 (0)编辑 收藏