Sammy's profile廖 显 Sammy.liaoPhotosBlogLists Tools Help

Blog


    30 March

    纯粹的蓝

    这个周末,在公司看邮件,哪里也不想去,屋子里有一些灰,门窗都紧闭,不知道哪里跑进来的,打扫了,又会有。最近,在谈关于中国热钱的问题,如何留住热钱,把投机转化为投资,我觉得,其实还是应该依靠教育带动的人才培养,以及公共服务升级带动的城市吸引力提升。不然,老是灰朦朦的北京,谁想久待啊?
     
    我记得上海的天是很蓝的,那天晚上还在人民广场散步,突然觉得,头上的天的颜色,蓝的很美...不觉想起那时的生活。佳佳总问我为什么不在北京秀厨艺了,真的,真的,找不到那样的心情...
     
    中国,不缺钱,缺人才,缺工艺,缺好的投资环境(自然环境以及政府公共服务环境),中国需要更多一点这样纯粹的蓝...
     

    April 4早晨,又是一个周末,天气蛮好,今天早上起来看新闻,奥巴马终于发话了:我们政府从来没有承诺一定要收购通用汽车,如果他们还没有拿出一个像样的整改方案的话,破产也是一个无奈的选择。接着,通用汽车总裁瓦戈尔应声倒下。可能很多人会感觉是在看美国人的笑话,不过我像问问,当大洋彼岸的美国正在一个来之不易的聪明的总统的领导下,对腐朽的资本主义大锅饭,甚至资本主义贪婪下狠心的时候,中国同时在做什么?

    我常常不自觉地会思考一个愚蠢,并且不可能的假设: 如果中国的国有银行,背后没有政府的信用担保,那情况又会怎样?这次,中国政府在资本主义所谓的经济危机下发钱、发物,想促进经济的复苏,这个本来是好事,但是地方政府张开了大嘴吃呀吃,这个使我联想到了街上的乞丐,如果你一天发善心,给了他1万块钱,一个月以后,当他用完了所有的钱,依然还是街上的一个乞丐,所以,中国不缺物质为载体的改革,缺的一批高素质的国民(这个好像我导师王伯庆现在事业的目标吧,呵呵, anyway),更重要的是这些人,来了中国以后,我感觉是应该留的下来,留下来的缘由不是说依靠“关系”而是一个相对公平的筛选通道,以及一个健康的公共竞争体系,让他们成为社会主流的实干者。世界以后的经济体变革,又不是打仗,绝对不是靠人多,而是靠精英。小唐,决定移民澳洲了,在我看来,又一个想做事情的青年,对于中国失去了应有的希望。 这次本来应该是属于资本主义的经济危机下,我感觉,中国都不知道该干嘛了,哎,一群无头的苍蝇...

    很久没有用英语写博客了,我发现,其实我还是习惯用中文。

    为什么在成都,就不能看见蓝的那么纯粹的蓝天呢?

    April 10 今天早上起来看到一篇关于郎咸平的专访文章,题目是《我们最大的问题是投资营商环境的恶化》,看来是我的声音虽然小,但是有人声音还是比较大的...呵呵

    20 March

    一种孤独的自由——关于美国的印象

    金融危机,Apple公司在这个时候推出了新款最便宜的似乎要被人们遗忘掉的iPod系列—— iPod Shuffle,这款容量是以前一倍,并且“能说话”的小东西,似乎又立刻引起了大家的关注。Shuffle原意为:弄乱,乱堆,随意堆放的意思,有一种随心所欲的自由因子在里面,当然在这个时期,能再进行创新,实属不易。

     关于美国,在我这个从来没有踏上过这片国土的外乡人来说,应该是陌生的,对于美国的印象也是在于那些大量冲击着我们的视觉的美国电影,以及富有商业气息的流行文化麦当劳,以及带有圆滑的美国口音开始的。不知从何开始,美国开始定位在于创新,世界的创造中心,有一句话是这样说的:如果美国人产生了一个好的主意,那么请把它交给日本人把它变成产品,然后,再交给中国人把它规模化,然后只要卖出去,就可以再让印度人负责它的售后服务(呼叫中心),那么美国人可以空更多的时间来思考了,创意也因此产生。我以前对于这个故事深信不疑,以致后来出了一本书叫做《The world is flat》,我也买上一本,细细咀嚼其中的美味,但是,很多时候,你感觉,美国人也是疯狂的,《Transformers:Revenge of the Fallen》公映了,看着里面强烈而又疯狂的视觉冲击,以及美妙绝伦的画面,有时你都在想为什么一部《满地尽带黄金甲》为什么都可以在国内拿到如此高的票房。那么逼真的影视画面,让自己带着爱国主义的骄傲下面,又隐藏着一种说不出的感叹,美国的文化,是如此的真实而又强大。

    为什么?

    那天我共享了一部音乐的MV,是Oren Lavie 唱的,不过一下吸引我的却是那个MV的创意,不禁又联想到很多歌手的身上,总是带着那种孤傲、另类、以及富有才气的孤独与狂热。

    我总是在找为什么要去西方世界的理由,我的朋友一个一个的过去了,不应该仅仅只是物质,因为对于我们从小深受爱国主义熏陶,以及有一些文化基础,不会仅仅因为这个理由过去的。后来,或者今天,我似乎,发现了中国与世界的不同:

    共性与个性。

    现在,中国开始热闹起来,世界开始关注,但是,我们获得金钱的同时,不知道,我们失去了多少自己本来应该有的个性文化,中国古老的首都北京,所剩下的城墙已经不多,听说,又要因为要建一个四四方方的高楼,而拆掉一组四合院,我不知道,这种没有创造性的共性制造,在中国还会继续到多久?当然,也为没有任何个性的所谓创新口号一再的失望。中国可以把世界任何的东西都成规模,任何的东西,但是除了创造。

     中国很热闹,美国很孤独,不过,这是一种孤独的自由... ...

    PS: 补充一点,当我的同事天天乐道于“阿迪王”这类的“山寨”产品的时候,其实,我很反感,当一个国家把知识层面的侵权当作是一种平常的乐子的时候,有点像当年鲁迅写的人血馒头的感觉,我们不追求西方的奢侈,但是我们应该正大光明的向前走... ...

    15 March

    JPivot+Mondrian

    一、引言

    Mondrian官方网站(http://mondrian.pentaho.org/)给出的定义是 Mondrian is an OLAP server written in Java. It enables you to interactively analyze very large datasets stored in SQL databases without writing SQL. 

    Mondrian是一个OpenSource的基于关系数据库的分析服务器,遵循MDX、XML/A和JOLAP标准。Mondrian是一个BI开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。首先应该到http://sourceforge.net/projects/mondrian/下载mondrian的最新版本。

    二、Mondrian Architectrue 

    Mondrian从架构上可以分为四个层次:表现层、计算层、聚合层、存储层。 

    计算层:分析、验证、执行MDX语句, 先计算坐标轴,然后再计算每个单元格的值,从效率上的考虑,计算层批量从聚合层获取单元格数据集合。 

    聚合层:聚合层中缓存了多维查询结果,即单元格的数据集合,如果计算层所需要的数据不在缓存中,从存储层中进行查询获取数据并缓存。 

    存储层:采用关系数据库实现,一般采用星型模型构建,提供维表、事实表和聚合表。 

    系统部署结构上,可以分三层结构分开部署,将表现层部署在一台机器上,计算层和聚合层部署在第二台,存储层部署在第三台。 

    根据OLAP服务器数据存储技术,可以分为ROLAP和MOLAP,Mondrian采用ROLAP技术。 

    在ROLAP的多维模型组织和存储数据中,比较常用的方式是星型模式,由一个事实表和一组维度表组成。维度必须预先确定,可以是一般的星型架构,也可以是比较特殊的父子架构、雪花架构等。在ORACLE数据库中,我们能够按照维度进行预先的统计、分类、排序,创建大量的实体化视图。对于没有实体化视图类似功能的数据库,我们也可以创建大量的临时聚合表,这样当用户进行比较高级的分析的时候,不用访问数据量庞大的基础事实表,只需要在我们已经形成的实体化视图或聚合表上作进一步的聚合就可以了,这样能够大大提高查询分析的效率,并且减少占用的系统资源。 

    在使用聚合表方面有一个关键的技术称之为"聚合感知"技术,只有OLAP引擎必须能够根据多维查询中的维度信息,从适当的聚合表中提取数据,否则聚合表形同虚设。另外在多维模型设计中,设计正确的聚合表也是很关键的。不恰当的设计导致将聚合表的不能满足多维查询的需求,每次从事实表取数据,开销是非常大的。 

    Mondrian采用关系数据库存储事实表,其本身不具有"聚合感知"的技术,当需要从比较明细的事实表中汇总数据时,性能就比较差了。但是如果关系数据库能够支持实体化视图或其他聚合技术,那么就可以利用关系数据库的技术透明的提高系统性能。我们可以利用Oracle实体化视图来提高Mondrian的效率。

    三、Mondrian开发 

    Mondrian开发顺序的分为4个步骤。 

    1、创建Mondrian cubes (Schema文件)

    Schema元模型包括维度(Dimensions)、层次(Hierarchies)、级别(Levels)、和成员(Members)等。Mondrian要根据它来从关系数据库中聚合数据响应MDX语法的查询。可以说Schema文件是Jpivot+Mondrian架构应用中最核心,最关键的文件。JPivot+Mondrian Demo的/WebRoot/Web-Inf/pasmondrian.xml文件就是基于XML的,用于映射OLAP的数据库结构,以供Mondrian服务器响应MDX语句查询的Schema元模型文件。Schema元模型的定义文件较复杂。幸运的是有开源工具CubeDesigner可以帮我们生成该文件,虽然该工具刚推出不久,并不成熟、稳定,还有许多BUG存在,但它至少可以生成一个大致的文件框架,可以大大减轻工作量。 

    Mondrian cubes 创建有多种办法,最原始的办法就是用手写。Mondrian现在有自己的Cube创建平台——workbench。下载地址http://sourceforge.net/project/showfiles.php?group_id=35302。目前版本为workbench-2.3.2.9247。该平台有三个功能:生成Schema,执行MDX和JDBC Explore。经测试该平台对Mysql数据库可以成功使用,但对Oracle数据库报错如下:“10:56:50,062 INFO  [MondrianProperties] Mondrian: loaded 0 system properties 10:56:51,406 ERROR [JDBCMetaData] java.sql.SQLException: ORA-01424: 转义符之后字符缺失或非法”。 

    一、下载workbench-2.3.2.9247.zip后解压缩,运行workbench.bat文件
    file-->new-->schema

    二、使用 

    1.配置数据库
    tools-->Preferences
    在弹出的对话框处填写JDBC连接信息。
    注意:要把相应的JDBC驱动包拷贝到workbench-版本号\lib目录下。 

     2.制作***.mondrian.xml(立方体) 

    另外一种方法,就是用Pentaho Cube Designer 去创建 Mondrian cubes。
    下载CubeDesigner-0.7.2.0_Win32.zip,解压后运行CubeDesigner.exe。

    第一步:创建new cube,定义数据源 

    定义Cube Name——选择数据源——编辑JNDI Name——Driver——Connect String——Username/Password,然后Test连接是否成功。

    第二步:定义数据模型和Table Mapping

    选择数据库——选择Table/View——双击抽取目标数据——定义Mapping——选择要显示的字段。在这步数据模型建立的查询中,还可以定义where condition,group by,having,order by等。

    第三步:选择事实表和定义度量

    第四步:创建Dimensions及hierarchy,level

    第五步:生成Schema及Publish或者保存 

    在最后一步中,如果定义的Schema文件有错误,则看不到XML Source并且无法保存结果!要注意维度和度量的定义! 

    至此,在保存的目录下就生成三个文件:***.mondrian.xml,***.properties,***.xaction。其中***.mondrian.xml就是我们所需要的Cubes。 

    2、创建MDX查询

    第一步,将上述生成的***.xml文件放在Tomcat_HOME\webapps\mondrian\WEB-INF\queries目录下。

    第二步,编写MDX查询语句

    使用JPivot的<jp:mondrianQuery>标签定义一个MDX查询语句,代码如下:

    Java代码

    1. <jp:mondrianQuery    
    2. id="query01" jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver"  
    3.                jdbcUrl="jdbc:oracle:thin: @172.16.31.51:1521:orcl"  
    4.                jdbcUser="stat"  
    5.                jdbcPassword="stat"  
    6.                catalogUri="/WEB-INF/queries/AAA_MONTH_CUBE.xml">   
    7. select {[Measures].[SUM of AAA_MONTH.USERCOUNT],[Measures].[SUM of AAA_MONTH.UPWARDDOC],[Measures].[SUM of AAA_MONTH.DOWNWARDDOC]} ON COLUMNS,{[DIM_TIME.TIME_ID].[DIM_TIME.YEAR].Members} ON ROWS from [AAA_MONTH_CUBE]   
    8. </jp:mondrianQuery>  
    <jp:mondrianQuery 
    id="query01" jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver"
                   jdbcUrl="jdbc:oracle:thin: @172.16.31.51:1521:orcl"
                   jdbcUser="stat"
                   jdbcPassword="stat"
                   catalogUri="/WEB-INF/queries/AAA_MONTH_CUBE.xml">
    select {[Measures].[SUM of AAA_MONTH.USERCOUNT],[Measures].[SUM of AAA_MONTH.UPWARDDOC],[Measures].[SUM of AAA_MONTH.DOWNWARDDOC]} ON COLUMNS,{[DIM_TIME.TIME_ID].[DIM_TIME.YEAR].Members} ON ROWS from [AAA_MONTH_CUBE]
    </jp:mondrianQuery>

    <jp:mondrianQuery>标签及其属性,可参考JPivot文档。 

    3、编写OLAP展现页面

    在Demo的/WebRoot/pasmondrian.jsp利用JPivot及WCF一系列JSP标签展现Mondrian服务器返回的OLAP数据集。
    具体代码参见DEMO相关文件;JPivot及WCF标签用法参考相关文档。
    最后,在web.xml文件中加入映射:

    Java代码

    1. <filter-mapping>   
    2.     <filter-name>JPivotController</filter-name>   
    3.     <url-pattern>/AAA_MONTH_CUBE_QUERY.jsp</url-pattern>   
    4. </filter-mapping>  
    <filter-mapping>
        <filter-name>JPivotController</filter-name>
        <url-pattern>/AAA_MONTH_CUBE_QUERY.jsp</url-pattern>
    </filter-mapping>

      
    4、程序典型流程

    1、用户发出 pasmodrian.jsp?query= pasmodrian的请求

    2,pasmodrian.jsp上的<wcf:include>根据query参数,匹配/WEB-INF/query/下的pasmodrian.jsp来获取数据

    3,pasmodrian.jsp上的<jp:mondrianQuery id="query01">查询数据,放入到query01变量中

    4,pasmodrian.jsp上的<jp:table id="table01" query="#{query01}"/>根据query01的结果(领域数据)准备显示OLAP表格所需的数据(显示数据)

    5,pasmodrian.jsp上的<wcf:render ref="table01" xslUri="/WEB-INF/jpivot/table/mdxtable.xsl"/>根据table01的结果,使用xsl,渲染出OLAP表格。

    6,循环第4,5步,使用<jp:navigator>等tag准备navigator,chart的数据然后用<wcf>渲染出图表和导航系统.

    整个流程,第2步的pasmodrian充当Controller调用第3步的Model层,然后第4,5步执行从领域数据(比如一些java bean)中转换出格式整齐的,需要显示的数据(比如一段xml),再用xsl将其渲染为最终的表现形式。

     
    5、 优点

    1、基于JSP Tag的展现层,不需要安装任何插件即可运行;

    2、可以轻易集成到 web 项目中。 

    6、 缺点

    1、没有完善的帮助文档、开发手册和错误指南,遇到问题不能迅速解决;

    2、不支持SQL直接查询,需要编写MDX语句及Schema元模型定义文件,要求程序员对OLAP数据模型及数据仓库思想、理论的认识较高,学习成本高;需要相当高的熟练度才能达到快速开发的目的。

    3、相关开发工具(如:报表生成器、可视化的多维报表开发工具等)缺乏,基本上处于代码级的开发。
       

     四、结论

        JPivot+Mondrian架构,由olap核心引擎响应来自JPivot表现层的MDX语法查询,返回多维查询结果,最终由JPivot展现多维数据。功能相当单一。JPivot和Mondrian项目均处在成长的阶段,在开发工具、文档及技术支持等方面做得还不够。

    14 March

    Her Morning Elegance / Oren Lavie

          

       人的一天或者一生便在这个大大的双人床上演绎了出来,我们从床上赤裸的诞生,然后在夜里或白天做各种梦,我们不断的行走,不分昼夜。我们不断的相遇而又错过,最终我们还是安然躺在床上开始闭上眼睛,告别这个陌生而又熟悉的世界。

    歌词:
    Sun been down for days                早已沉落的太阳似乎已经安睡了好几天。
    A pretty flower in a vase               一朵美丽伊人的花朵静静地插在一个古老的花瓶里。
    A slipper by the fireplace               斑驳的壁炉旁放着一只早已遗落的拖鞋。
    A cello lying in its case              一把沉默的大提琴也熄灭了往日的声息。

    Soon she’s down the stairs                 她开始缓缓的走下楼梯。
    Her morning elegance she, wears             开始了她高雅而精致的一天,她穿上衣服。
    The sound of water makes her dream            开水煮沸的声音使她开始想沉睡做梦,
    Awoken by a cloud of steam               但她被那冒起的云团般的水蒸气惊醒。
    She pours a daydream in a cup              她把自己的白日梦倾倒进杯子里,
    A spoon of sugar sweetens up              舀起一勺浓浓的白糖。

    And she fights for her life as she puts on her coat        她穿上厚重的外套开始为她的生活而奋斗,
    And she fights for her life on the train               她缓缓的登上火车为她的人生而拼搏。
    She looks at the rain as it pours                 她开始凝望着窗外倾盆而来的大雨。  
    And she fights for her life as she goes in a store         她开始走进商店为她的饥食而求索。
    With a thought she has caught by a thread               她的思想开始理一丝头绪。
    She pays for the bread and she goes                  她为买的面包付款然后离开。
    Nobody knows                                  一切回到原地,没有人知道。

    10 March

    两会期间谈经济

     

      北京郊外三月天     

       今天,Google的股价,终于跌破了300美元,以前有人预计Google将在这次经济危机当中逆流勇上,甚至继续会超过纳斯达克指数,但是,当世界所有的信心都在慢慢消亡的时候,Google也不会幸免的。( GOOG  290.89   -17.68  -5.73% 91.72B ),应该说从人们对于Google的信心缺失可以恰当的反映到整个IT行业面。

    前几天,有空关注一下两会,人大的提案已经全部提交完毕,不过在一些提案的提法上,很明显的看得到一些肤浅之治的思想。比如,现在大学生就业难,那么就鼓励大学生自主创业,降下身段到社会底层锻炼,或者干脆国家补贴钱,进行再岗前的实习培训,不过主要矛盾是这个么?我认为,更深的是应该继续加速大学教育的改革进程,多培养一些真正有能力的大学生,而不是“混文凭”的,特别是大学与社会实用性的衔接上,多给点“政策”;另一方面,应该在政府服务体制系统上,多给年轻人一些扶持,多一些“通道,如何真正的利用知识创造价值,如何把整个社会的服务质量提升,以及当地政府的“眷顾”,这些才能真正的把人才创造价值下去,而不仅仅只是看到病了治一下,看到差不多要好了,就不管了,其实,真正的病症却还是遗留着,没准哪天又爆发了,政府又出钱,循环往复,乐此不疲... ...

    另一条,这次两会提到农业,到处炫耀的便是取消了农业税,使得农民种粮积极性提高。从国家粮食安全来讲,这固然是好事,但是,在西方农民种粮不交税早就是天经地义的事情了,甚至,你种粮国家还应该给你补贴,倒拿钱。我这里并不是反对国家取消农业税,而是说,现在农民种粮不积极,是嫌钱少(相对的),你减税,甚至补贴,他乐了,开始种粮,过一阵子,他又开始嫌钱少,又不种粮,你怎么办?卖地给他?还是给他更多的补贴?如果他还嫌少呢?其实,关于农村问题,不是一个简单的免税不免税的问题,农村问题,一个是农产品价格低,农民收入少,但是这个价格低是相对的,相对于现在由城市房地产带动起来的工业品通货膨胀引起的,农民一看,我家里可以种地,但是种一辈子,还买不起城里的一套房子,那还种什么?甚至还不如进城当个洗碗工一年的收入高,因此大量的农村劳动力涌入了城市,第一,补给了“中国制造”的廉价劳动力,但是同时,危机到了国家的粮食安全。怎么解决这个问题呢?不是单方面的,千方百计的留农民在地里,这个是留不住的,第一,你给不起钱,第二,农民的“小农意识”绝对是跟着money走的,那怎么解决?很好办,让农村的耕地动起来,让愿意种地的人去种地,愿意到城市的人去城市,现在的情况是,农村是人很愿意把“自己”投资到城市的建设当中,但是“城市”的资本却很难在农村找到机会,因此,怎么给予“城市”资本到农村的政策,让农业也能产生等于工业品,甚至高于工业品的附加值效益,自然,“种粮”的人会越来越多。拿房地产来讲,其实现在很多城市人很愿意去农村居住的,但是,要不就是“小产权房”,要不就是耕地的限制。我只能说,如果不让有“知识”的城市人“下乡”,那么农村就一直不可能有机会。农村问题,需要的是双向互动,而不是单向的,这才是问题的关键。

    当然,如何,让地方政府脱离对于单一房地产收入的依赖,让银行脱离“和房地产商是绑在一起的蚂蚱”的形象,利用科技行业,达到政府收入的多元化,智能化,通过政府效能改革,达到集约型政府的塑造,其实也是变相的解决了以上两个问题。

    不过这次两会,最得志的应该是马云了吧,两会央视用新闻给他打广告,电子商务,即解决了大学生的就业,自主创业,以及沿海城市的工业品滞销,还包装着高科技概念的信息科技产业,淘宝、阿里巴巴仿佛成了这次中国遭遇经济危机的救世主,呵呵,看来,马云越来越有“首富”相了。

    待续... ...