Oracle 所有的hints

2009年1月3日

oracle 10g 有64个hints , 11g 增加到71 个, 下表中红色的代表已经过时的, 粗体的是11g 新增, CBO 中RULE hints 当然也不算了.

Optimization Goals and Approaches (2)

Access Path Hints (17)

Other (20)

Join Operation (7)

ALL_ROWS

FIRST_ROWS

RULE

CLUSTER

FULL

HASH

INDEX

NO_INDEX

INDEX_ASC

INDEX_DESC

INDEX_COMBINE

INDEX_JOIN

INDEX_FFS

INDEX_SS

INDEX_SS_ASC

INDEX_SS_DESC

NATIVE_FULL_OUTER_JOIN

NO_NATIVE_FULL_OUTER_JOIN

NO_INDEX_FFS

NO_INDEX_SS

APPEND

NOAPPEND

CACHE

NOCACHE

CURSOR_SHARING_EXACT

DRIVING_SITE

DYNAMIC_SAMPLING

MODEL_MIN_ANALYSIS

MONITOR

NO_MONITOR

OPT_PARAM

PUSH_PRED

NO_PUSH_PRED

PUSH_SUBQ

NO_PUSH_SUBQ

PX_JOIN_FILTER

NO_PX_JOIN_FILTER

QB_NAME

RESULT_CACHE

NO_RESULT_CACHE

USE_HASH

NO_USE_HASH

USE_MERGE

NO_USE_MERGE

USE_NL

USE_NL_WITH_INDEX

NO_USE_NL

Join Order (2)

Query Transformation (13)

XML (2)

Parallel Execution (5)

ORDERED

LEADING

FACT

NO_FACT

MERGE

NO_MERGE

NO_EXPAND

USE_CONCAT

REWRITE

NO_REWRITE

NOREWRITE*

UNNEST

NO_UNNEST

STAR_TRANSFORMATION

NO_STAR_TRANSFORMATION

NO_QUERY_TRANSFORMATION

NO_XMLINDEX_REWRITE

NO_XML_QUERY_REWRITE

PARALLEL

NOPARALLEL*

NO_PARALLEL

PARALLEL_INDEX

NO_PARALLEL_INDEX

NOPARALLEL_INDEX*

PQ_DISTRIBUTE

 

 

参考资料

http://www.dbasupport.com/oracle/ora11g/Optimizer-Hints.shtml

Oracle

SQL Developer 的几个小技巧

2009年1月3日
  1. 录制脚本并回放 , 比较适合用于重复的工作.

    From the JDeveloper 10g (10.1.3) Documentation:
    To define accelerators for recording and playing back:
    1. From the main menu, choose Tools then choose Preferences.
    2. In the Preferences dialog, select the Accelerators node.
    3. On the Accelerators page, in the Category list select Code Editor.
    4. In the Actions list, select Macro Toggle Recording.
    5. Put the focus in the New Accelerator field, and enter an accelerator by pressing the key combination on the keyboard.
    6. To add the accelerator you have suggested for beginning and ending the recording of macros, click Add
    7. Now, in the Actions list, select Macro Playback.
    8. Repeat steps 5 and 6 to assign an accelerator for playing back the macro.
    9. Click OK.
    To record a macro:
    1. Open the source file in an editor.
    2. To begin recording, press the key combination you have defined for recording macros.
    3. Now enter the keystroke sequence you wish to record.
    4. To end recording, again press the key combination you have defined for recording macros.
    To play back a macro:
    1. Open the source file in an editor.
    2. Position your cursor in the open file.
    3. Press the key combination you have defined for playing back macros.

  2. Gather Statistics on multiple tables at once

    DESCRIPTION
    A snippet to gather stats on multiple tables (owned by your schema)

    CODE
    BEGIN FOR x IN (SELECT * FROM user_tables WHERE table_name IN (’table1′, ‘table2′, ‘table3′))

    LOOP DBMS_STATS.gather_table_stats (ownname => USER , tabname => x.table_name , partname => NULL , estimate_percent => DBMS_STATS.auto_sample_size , block_sample => FALSE , method_opt => ‘FOR ALL INDEXED COLUMNS SIZE 254′ , degree => NULL , granularity => ‘ALL’ , cascade => TRUE , no_invalidate => FALSE );

    END LOOP;

    END;

    /

     

  3. 查找为什么某一sql 的 query rewrite 没有用

    CREATE GLOBAL TEMPORARY TABLE rewrite_table(
    STATEMENT_ID VARCHAR2(30), — id for the query
    mv_owner VARCHAR2(30), — owner of the MV
    mv_name VARCHAR2(30), — name of the MV
    SEQUENCE INTEGER, — sequence no of the error msg
    QUERY VARCHAR2(4000), — user query
    MESSAGE VARCHAR2(512), — EXPLAIN_REWRITE error msg
    pass VARCHAR2(3), — rewrite pass no
    flags INTEGER, — associated flags
    reserved1 INTEGER, — currently not used
    reserved2 VARCHAR2(10)) — currently not used
    ON COMMIT PRESERVE ROWS
    /
    – Execute anonymous block to give detailed Query Rewrite confirmation
    DECLARE
        l_stmt VARCHAR2 (4000);

        l_task_name VARCHAR2 (30);
    BEGIN
        DELETE FROM rewrite_table;
        l_stmt := ‘<< put query text here >>’;
        dbms_mview.explain_rewrite (QUERY => l_stmt , mv => ‘<>.<>’ — (or put NULL here for all MViews)
    , STATEMENT_ID => ‘MV_Explain_RW1′
    );
    END;

    /
    – Query the results
    SELECT *
    FROM rewrite_table
    ORDER BY SEQUENCE;

 

参考资料

http://htmldb.oracle.com/pls/otn/f?p=42626:54:1827078984577445::::P54_ID:341

 

http://htmldb.oracle.com/pls/otn/f?p=42626:28:1827078984577445:pg_R_1309346028248444550:NO&pg_min_row=16&pg_max_rows=15&pg_rows_fetched=15

 

http://htmldb.oracle.com/pls/otn/f?p=42626:29:1827078984577445::NO::P29_ID:401

Oracle

BIRT 新ODA驱动 Hibernate Data Source

2009年1月3日

jboss tools 在新的3.0 版本中推出了一个更好的跟TPTP 和 BIRT 集成的计划, 下面主要介绍它添加的新的birt 功能

 

1. 新的oda 驱动, hibernate data source.

    在你安装完了birt all in one + jboss tools 之后,如果你创建报表,你会发现多了一个hibernate data source 可以作为数据源了.

HbDataSource1

 

HbDataSource2

如果你不是用JNDI 控制数据源,就不用填JNDI URL. 注意其中的Configuration 是选的Hibernate Console Configuration. 你要先创建hibernate console configuration. 它真正的参数也就是在hibernate.cfg.xml 里面读取的.

 

2. Hibernate Data Set.

    有了hibernate data source 当然有配套的hibernate data set了.  只不过这次选的不是table 和sql 了. 而是你程序里面的对象和HQL .

HbDataSet

 

如果你喜欢jboss 的seam 框架, 它也有一个新的seam 标签包装了birt .不知道是不是全部属性都包括了, 大家可以去看看.

 

参考资料:

http://docs.jboss.org/tools/whatsnew/birt/birt-news-1.0.0.Alpha1.html

jboss tools 3.0 的一部分新功能

 

http://docs.jboss.org/tools/movies/

告诉你怎么样使用jboss tools 的flash demo, 里面有教你怎么生成代码和创建console configuration的.

BIRT

还牛B不

2009年1月2日

http://www.wangtam.com/50226711/ecbaeieie_165430.php

 

看到这个笑话,当作新年开始

kuso_20a3897c88a5fd52b9db854751db212b

一国王选婿,拉一牛至河边说:谁能让这牛先点头后摇头再跳到河里,我就把公主嫁给他。
一屠夫上前对牛说:挺牛B啊?牛点头。
屠夫又说:认识我不?牛摇头。
屠夫一刀扎在牛屁股上,牛负痛跳入河中。
国王嫌屠夫手段粗暴,屠夫要求再试一次,国王允。此牛又被拉到河边。
屠夫上前对此牛说;认识我了不?牛点头。
屠夫又说:还牛B不了?牛摇头。
屠夫笑着说:知道咋办了不?牛转身跳入河中

生活

到底有多少面向BI的数据库

2009年1月1日

BI作为一个方兴未艾的领域, 在我们还没来得及数清到底有多少BI 工具提供商的时候, 大大小小的专门面向BI的数据仓库解决方案已经进入竞争激烈的市场, 其中不乏传统的数据库大鳄,更有不少新兴的创业公司,当然也少不了开源数据库厂商的参与.

 

除开传统的商业智能方面数据库四大天王:teradata , oracle,ibm, microsoft 之外, 也有不少后期之秀不断挑战,像是我们熟知的"以列为导向的"Sybase IQ . 除开我们众所周知的明星之外, 下面介绍一些大家不太熟悉的有潜力的挑战者, 让我们开始这场选秀活动吧(Rock and Roll) :!

bidatabasequadrant

                    Garnter 的数据库魔力四象限

我们看到最接近Sybase IQ 的Netezza 公司是非常有实力的挑战者之一 , 它的主要特点就是面向商业智能并且专注于商业智能领域的应用,其主要产品为Netezza Performance Server系列数据仓库专用设备,为了能够分析商业数据,其数据仓库专用设备中整合了数据库、服务器和存储等各项功能, 你可能对这家公司不太熟悉,但是这家成立于2000年的公司早已经是中高端市场的老大了, 早已经是混的风声水起,即使是Oracle Open World 大会上,oracle 与hp 推出了硬件和软件组合的两款Exadata Programmable Storage Server 和HP Oracle Database Machine , Netezza 一样毫不含糊, 立刻展开针对这个组合的宣传,Netezza is fast, Netezza has more processing power, Netezza handles analytics inside the box,netezza is integrated in one box,from one vendor, netezza needs no tunning or indexing, 甚至打出了连圣诞老人都想要netazza 的广告, 专门针对oracle 销售策略,俨然一副我是老大,就算你是oracle 和hp 跟我抢食也要看你有几分斤两.

公司网址:http://www.netezza.com/

 

Greenplum 也是非常耀眼的新星之一 , 其首要目标就是直指PB 级别的超大型数据仓库, 其shared-nothing 的架构更是不像Teradata 和netezza 一样需要专属高端硬件配合, 任何Intel , AMD 芯片的普通服务器都能很容易的搭建集群环境, SQL Parallel Process + MapReduce 技术优势更是其宣传的最大卖点,Teredata 共有5家客户达到PB 级别,其中ebay 和walmart 的级别更是2PB 和 1.1 PB , Greenplum 这个运行在普通PC Server 上通过集群的高性能数据库相信在不久的将来也会很快有真正的PB 级别的案例产生. 在获得Sun ,SAP 等公司的风投后共获得4200万美元资金,更在中国建立合作伙伴关系开发国内市场,SUN 更是直言不讳的想通过Greenplum 的优势杀入商业智能市场,带动其服务器,储存和Solaris 的销售, 国内的淘宝团队也开始考虑使用greenplum + hadoop 的技术构建商业智能平台, 它不仅支持SQL、MapReduce、R、Pythons 等编程语言,新的3.2 功能还增加了GUI , 性能管理器的功能. 如果你嫌Teredata 和 Oracle RAC 太昂贵的话, Greenplum 一定在你构建超大型数据仓库的考虑范围之内. 注意它虽然构建在Postgresql 之上,但是数据库本身是闭源的商业产品, 因为Postgresql 是BSD license 的.

首页: http://www.greenplum.com

http://rdc.taobao.com/blog/dw/archives/category/greenplum

淘宝的一些greenplum 研究.

 

DATAllegro  是一家已经被microsoft 收购的公司,为了补充SQL Server 在商业智能方面的应用. 它同时也提供专属的硬件,microsoft 收购之后已经着手进行整合,产品的最终版本可能要到2010年上半年才能面世. 数据库的规模大概在百T左右.

http://www.datallegro.com/

 

Kognitio是一家提供数据仓库主机托管解决方案提供商(APS),第一次进入Gartner , 主要市场针对UK.

http://www.kognitio.com

 

Sand Technology 是一家加拿大的公司,主要市场在UK,Germany , US. 也是基于列的数据库, 主要强调用廉价的低速磁盘获得可接受的查询性能.

http://www.sand.com/

http://www.dbms2.com/2008/12/16/introduction-to-sand-technology/

 

除了能够上Garnter 的一些厂商之外,还有很多商业产品都各自有其技术优势: 像是Clearpace   比较强调数据归档和压缩,查询性能也能够与Oracle 匹敌(当然没有Netezza 那么肯定的强调) .

还有vertica , 也是强调基于列和网格的数据库,也能进行高性能的分析查询.运行于普通的硬件上,大客户包括JP Morgan Chase 等,Vmware 上还有一个装好的vertica analytic database 虚拟机给你玩, 它的ETL 性能测试还刷新的新的ETL记录,一小时转载了5.4TB 的数据.

http://www.vmware.com/appliances/directory/1266

vmware 虚拟机的下载地址.

 

kickfire 一家基于mysql 数据库,但是面向商业智能的基于列的数据库提供商.

还有太多就不一一列举了

http://www.paraccel.com

http://db.cs.yale.edu/hstore/

http://www.asterdata.com

http://www.exasol.com/

http://pyrrhodb.msroot.paisley.ac.uk/org/

每个都是各有强调重点, 技术特长不一.

 

就像OLTP 数据库中众多的厂商也没有阻止开源数据库的脚步,data warehouse 数据库中自然也不乏开源的身影.

比较有名的像是Infobright (http://www.infobright.org) , 这是一个基于mysql 的储存引擎, 同样也是基于列计算, 其最大的宣传重点在于高压缩比率和知识网络, 宣传的压缩比率经常在10:1 – 40:1 之间, 其知识网格技术可以不使用索引也能够进行高效率的查询运算.另外还有高速的数据装载工具, 当然还有一些技术上的限制比如缺乏国际支持, 并发性不高, 不能利用多核,没得到Windows或Solaris支持,没有ALTER TABLE有关的支持等, 详情可以查看

http://tech.it168.com/a2008/1024/209/000000209206.shtml

 

Bizgres(http://bizgres.org) , 是一个多厂商合作的,主要由greenplum 领导,基于postgresql 的商业智能数据库, 它最大的强调重点就是和其他开源的商业智能工具和平台提供商有很好的合作,像是JasperSoft reporting tools 和Kinetic Networks ETL tools

 

enterprisedb (http://www.enterprisedb.com) , 在基于postgresql 的基础上构建了OLTP 的数据库,主要走商业路线, 在商业智能领域则是另外一款产品grid sql , 或者说postgresql plus , 听名字就知道强调网格计算, 使运行在普通PC Server 上的数据库可以轻松进行并行计算完成复杂查询,再加上postgresql 本来就有的不少高级特性(物化视图,bitmap index 和分区) , 使得在中小型数据仓库中也值得一试.

 

MonetDB (http://monetdb.cwi.nl/) , 强调其在数据挖掘上的应用,OLAP , GIS, XML Query , 文本和多媒体查询. 有windows 和linux 两个版本, 如果你有特殊的商业智能应用,或者科研机构之类的可以研究一下.

 

LucidDB (http://www.luciddb.org/) 将是今天最后一个介绍的数据库, 它强调自己是第一个也是唯一一个只为数据仓库目的建造的数据库,同样也有 列储存,bitmap indexing , hash join/aggregation 等常见数据仓库技术, 新版中强调在线热备份和基于时间点的快照功能, 另外一个最大的特色就是和开源的商业智能厂商之间有很好的合作, 像是开源ETL工具中的kettle 和talend 都有其插件帮助装载数据, 还有pentaho 最有名的产品,开源OLAP 中的实际标准mondrian 的支持:automatic Mondrian aggregate table designer add-onMondrian source replication . (注: mondrian aggregate 是pentaho 2.0 新功能之一, 查看我写的pentaho 2.0 新功能一览(http://www.gemini5201314.net/?p=108) )

它同时是Eigenbase 项目的一部分,主要也是强调商业智能和数据仓库这一块的一个项目,和一个商业的中间件sqlstream 可以很好的组合( stream processing ,the SQLstream continuous query engine , 实现实时数据仓库的一个中间件,主要做CDC change data capture, mondrian 的主开发者很喜欢这个东西, 他已经写了两篇介绍这个玩意

http://julianhyde.blogspot.com/2008/12/streaming-analytics-over-content-feeds.html

http://julianhyde.blogspot.com/2008/12/streaming-content-feeds-part-2-forging.html

 

好吧,今天就到这里吧,Until next time.

BI, Database

Boston Legal 大结局

2009年1月1日

12月9号,boston legal 就大结局了, 一直都想写点什么记录一下

从第一集的casual monday 到第二季的kelly nolan 有条理的辩论,再到s4e17的最高法院之战,一直到最后结局, 这部最受欢迎的美国法律剧一直陪伴了我们5年,终于落下了它的帷幕, 最后还是想说点什么做个"读书笔记" 吧.

一个就是s2e01 的kelly nolan 案子 , 也看过其他的法律剧,像是shark 里面,不少的人用毒树之果排除了很多关键性的证据,而在kelly nolan 这个案子中,可以说根本没有任何证据,不知道为什么这个案子会立案, 从最后closing 来看, Alan 也是非常精彩的抓住陪审团的心理"想要没有证据定罪来取乐",不过还是要很大程度上归功于Denny 跟Shirley 跟Alan 说的几句话,Shirley 说"他们想要定kelly的罪", Denny 这是叫Alan "keep going util you get a reasonable doubt",

从我个人来说, 如果我是陪审团我肯定会判kelly 无罪,这跟Alan 做不做closing 没有关系,因为没有证据, 但是从电视剧中看的话,我可能会倾向于判她有罪, 尤其是最后Alan 说"你很清楚一审不二判, 我真的要知道真相" . kelly 笑了一下,然后说没有. 感觉上像是kelly 本身就有某种颜面神经方面的优势(像那个不会笑的小女孩) , 杀了她老公之后 , 没有处理好现场, 所谓自杀来陷害kelly 这个理由太过于牵强.

 

而s4e17 的最高法院之战更是不得不提.

这个案子是接第一季最后一集Texas 杀了那个智力有问题的青年之后重回"是否该判智障儿童死刑合宪法的问题" , 编剧很明显的倾向就是"不管他们有没有官方证明,IQ 低于80 就不该杀他们,不管他们是否清白" ,因为这种起诉非常不可靠,Texas 故意搞两个州最高法院来加速判决过程, Louisiana 故意降低智障儿的IQ 来扩大死刑范围, 估计并不符合编剧的意愿和national consensus ,

Texas 那个是吸了毒,然后在警察的怂恿下认了罪,至于是否清白很难说清楚, Alan 和编剧他们看来这种事实清白说不清楚的情况不应该判死刑, 而Leonard Serra 干脆来个IQ 只有70 , 事实完全清白, 没有决定性物证可以判刑, 看起来所有有利的一边都站在alan 一边,至少我们是这么想的,但是这个案子最难最难最难最困难之处就在于没有任何抗辩理由,可以说完全没有任何可以摆得上最高法院台面的抗辩理由让supreme court 可以放了他的.

这个陈词可以以两次roberts 打断alan 分为三段.

第一段主要说当前的national consensus 并不是支持对child rapist 判死刑,主要是害怕杀错人, 而儿童起诉案尤其的不可靠, 在这个案子中, 当儿童的口供作为唯一定罪依据的时候, 判死刑可能会把已经搞错的冤案变的无法挽回, 而什么当家庭成员被卷进来的时候,没有孩子想控告自己家庭成员等等, 估计alan 自己都不相信这些鬼话, 尤其是alan 并不是天生反对死刑,他反对死刑主要是因为怕杀错了人,他知道美国的司法体系一边让富人通过合理怀疑,毒树之果和一审不二判原则逃脱法律制裁,而另一方面穷人根本没钱请高价律师来证明自己的清白与否,警察有时候只是为了完成任务随便抓个人把所有可能潜在的证据都往身上推,遇到可能关键性的证据不符合,可能故意不出示出来, 而alan 本身就不相信这些东西,他并不反对死刑,从s4e06 Patrice Kelly 的女儿被Sean Harmon 杀了,alan 在最后庭辩上说的,I’m so against death penalty ,but feel his death is so good. 当一个律师不相信他所说的话,表现出来的效果就很差,而本身supreme court 就是支持死刑的,所以这一点根本就不是alan 的抗辩的依据.

既然supreme court 本身支持死刑, 就转向IQ 和事实清白问题, 被告并没有官方证明,而事实清白是不能作为在supreme court 上辩解的理由的,supreme court 的判决不是针对某个个人,而是针对所有其他法庭判决的依据的, 一般来说对child rapist 还是倾向于判死刑的, 很难为了一个个例就让其他所有判决都不判死刑, 所以大法官Alito 说"Factual innocence is not something you get to argue" 的确是supreme court 的一贯作风,只不过对于这个case 来说,他们要杀的是一个IQ 只有70的智障儿童显得太没有同情心了,Alito 显然是不受编剧的喜欢, 他的思路的确是代表了supreme court 的一贯作风,甚至是任何一个上supreme court 打官司的律师的常识, 这句没有同情心的话有Alito 说出来只能说明他不受编剧的欢迎而已.

国民共识和IQ,事实清白都不能成为理由, 然后又被roberts 以无上权威打断了,Alan 就开始发飙了, 这一段只能代表编剧的个人色彩, 哪有人敢在supreme court 攻击最高大法官的, 尤其是他非常想要救这个孩子, 在他轮番攻击完scalia, alito ,roberts 之后,还顺便调戏了一下thomas (英汉词典上thomas 的意思是 指控某人性骚扰,被性骚扰), 第二次被roberts 打断,进入第三段.

第三段就开始了Alan 以无任何法律依据的,以良知和同情心来敲动supreme court 胜利的大门, 也是最无奈的,不是办法之中的最后杀招, 用他自己所坚信的原则带领自己抗争,用他最擅长的用自己的情感来打动别人,只不过这次不是12个"天真无邪"如Denny 般的陪审团,而是9个权利无限大的"很黄很暴力"的最高法院法官,正义justice 的同义词, 从Leonard Serra 不是社会败类,他心智只是个孩子谈起,再到他是个黑人,Louisiana 只杀黑人难道就是"法律面前,人人平等"吗, 最后认错,说自己觉得supreme court 总是代表我们的良心和同情心, 告诉他们杀掉一个清白的智障儿童非常的不人道, 并且在最后完成自己对leonard 的承诺,告诉这些大法官他是无辜的,并且最重要的是他不想死.

相信每一个看过这一集的人都会在这里被深深的触动,而且翻译出中文的字母效果也非常不错,尤其是那句"法官们通常都很黄很暴力,你可千万别很傻很天真"翻译的都比较有趣,唯一个人觉得不太协调的是其中不应该有Jerry 和Dana 的,尤其Dana 又不是后来的角色,把前面一个律师的辩词说的在有理有据一点,让这个案子在变难一些,把alan 模拟法庭辩论的一段变长一点, 顺便再多介绍一点各个法官的特性, 从而让整集都集中在最高法院之战上.

另外一个不得不介绍的关于剧中不断反复的嘲笑supreme court 和政府的地方:

从Denny 一开始说supreme court 开庭的宣读oyez 变成oh ,yes 开始(Denny 也把hope springs eternal  搞错成了hope springs a kernel),    supreme court 的开场

Oyez! Oyez! Oyez! All persons having business before the Honorable, the Supreme
Court of the United States, are admonished to draw near and give their attention, for the Court is now sitting. God save the Unites States and this Honorable Court!

然后一路攻击Louisiana 通过的是一项野蛮的法律,被robert 打断之后发表直接攻击alito , scalia 和robert ,最后提到2000 总统大选这一"永远最具争议的"supreme court 的"永远的痛". 那句

invented new law to decide a presidential election,for god sake.If that’s the way it’s gonna be,then at least
have the decency to put your names on ballots like the rest of the politicians ,so that we,the people,get a voice.

又被roberts打断了, 我不知道是roberts 是觉得我没参加这件事,别往我身上扯还是 现在我是这里的老大 ,什么时候轮到你来教训我. 以及最后"阳台夜话"上继续嘲笑scalia 血管爆裂(rupture a blood vessel), alito 不让黑人和女孩进Princeton. 继续逗thomas等.

 

相对于第二次进supreme court ,alan 为了denny 的药进行争辩,一个是编剧只是为了一个大结局, 第二个是这次明显的最高大法官比较倾向于给"临死之人以未经FDA批准的药物", alan 本来就比较占优势, 而且关键是最高大法官都年纪不小了,除了那个05年就以50岁的roberts 接任最高大法官以外,他们还是怕自己有天不行了, 也说不定需要某种FDA 没准许的药物的, 尤其是前任老大 Rehnquist 80岁就挂了(Denny 要跟他赤身肉搏的那个) , 他们个个都不小了,为自己留条后路.

不过第二次最高法院之行还是一样嘲笑了最高法院关于2000 总统大选的判决, 就是roberts 说: 你要知道我们的判决并不是一次只针对一个人, alan 问: 为什么这个不能只判给denny , 显然还是嘲笑2000 supreme court 干预总统大选,并且在最后说当前判决只对目前的情况有效, 这一"前无古人,后无来者"的判决显然还是supreme court 的永远的痛, 即使30年后,现在参与此事的7个在职的大法官和 Sandra Day O’Connor 都不在了,也消除不了这个永远的争议话题.

 

最高大法官的个人特色也在剧中表现一二, 像是roberts 永远的武断权威, supreme court 永远标志性的人物和老大哥scalia ,不知道Rehnquist 挂了之后,Bush 没有提名他当最高大法官他会不会有点不爽,roberts 那小子50岁就当最高大法官,枉我2000年大选中支持你, 还有那位颇受争议的Alito ,两次都找的是个有点胖的人来演,不知道有没有其他含义,wikipedia中他的照片上并不胖, 还有每次都被开刷的thomas ,竟然被alan 以Anita Hill 逗开口了.当然这纯粹是编剧的个人爱好而已. 那个对Denny "着迷"的Gingsberg 也是非常容易辨认出来, 在两次中都说了一点话的 Stephen Gerald Breyer (坐最左边的那个老头) 看得出来编剧也是比较喜欢他的, 所以在第一次高院之战说"被告没有官方证明"之后, 由Alito 说出了 "Factual innocence is not something you get to argue" 这句吃力不讨好的未免太不近人情的话. 另外两名大法官David Hackett Souter 和John Paul Stevens 没有说话我倒并不奇怪,剧情只有那么长 ,但是那位全美任何一个律师都知道的在supreme court 打赢官司最重要人物的Anthony Mcleod Kennedy 居然没有说话,而且是两次居然都没有说话,未免也太没有满足观众的胃口了.

剧中除了对最高大法官的个人攻击以外, 还包括了多处对政府的嘲笑, 像是Denny 对leonard 说的" 他们会让你当FEMA 的头 ", FEMA 是美国联邦应急管理局,却在卡特里娜飓风和新奥尔良大洪水的时候都没有派出军队进行控制局面, 实在是不敢想象,相比较我国的汶川大地震那种全国上下一心,完全都不一样.  还有总统投票的时候,Denny 说他投麦凯恩是因为Bush 的糟糕统治会让更多人去加拿大救三文鱼和让更多女人心碎, 这可以让这个每次都投共和党的富人带来更多好处.

我是在12月15号看的最后大结局,当时字幕还没有出来,有一些快速的对话都没有听懂, 这次元旦才看了出的大结局的字幕,说实话,很是失望,最后翻译的很烂, 抛开为故意躲开审查而把中国翻译成C 国这个非技术性原因之外, 里面的翻译太过于死板,只能说词都翻对了,就是没达意, 大概是没有官方出的脚本, 质量的确是不敢恭维. 远没有达到那个s4e17 的" 那些法官通常都很黄很暴力,你可千万不要很傻很天真" 翻译的水品.

 

抛开boston legal 两次supreme court 攻击2000 年总统大选之外,另一个艾美奖得主<Reccount> , 中文翻成"选票风波", 也可以推荐大家去看看, 里面的写实手法记录的那种巅峰权力之战, 还是非常精彩的. 里面的每个人物都非常的有个人特色, 对于最后的判决我其实还是有一点疑惑的, supreme court 最后有两个判决,一个是7:2 的判决认为的确是违反了平等保护法案,另一个是5:4 的判决判Bush 胜出, 5:4 的那个判决的确是有记录可查的, 不过7:2 的那个判决没有记录可查而且的确是太具有政治话倾向了, 只有两位由克林顿提名的大法官Stephen Gerald Breyer 和 Ruth Bader Ginsburg 投了民主党的票? 不知道是不是编剧想要表达个人的某种观点.

ok ,不管你喜欢或不喜欢Alan 和Denny , 这部陪伴了我们5年的法律剧已经落下了帷幕, 其中很多地方还是非常值得讨论的, 对于学习英语也是非常不错的一个教材.

 

参考资料

http://en.wikipedia.org/wiki/U.S._Supreme_Court

http://en.wikipedia.org/wiki/List_of_Justices_of_the_Supreme_Court_of_the_United_States

生活

一个 js 提高性能小技巧

2008年12月31日

当我们在程序中使用循环的时候, 无论任何编程语言,把要经常用的变量进行赋值,在循环中会取得一定的性能提升,下面是一个例子, 使用的jquery.

var cached = $('.someElement');
cached.addClass(’cached-element’);

 

 

console.time('test');
for (i = 0; i < 1000; i++) {
$(’.the’).text(i + ‘ ‘);
}
console.timeEnd(’test’);
// ~260ms
console.time(’test2′);
var the = $(’.the’);
for (i = 0; i < 1000; i++) {
the.text(i + ‘ ‘);
}
console.timeEnd(’test2′);
// ~30ms

使用了firebug 的api 进行计时. javascript 性能运算firebug api 计时很常见.

这个技巧适用于任何编程语言.

 

参考资料

http://jquery-howto.blogspot.com/2008/12/caching-in-jquery.html

他的标题有点费解,不过这种tip 还是非常管用的.

AJAX

BIRT 一些基础问题解答

2008年12月29日

本来跑去birt-exchange.com 去下一个关于birt 用store procedure 作dataset 的文档, 看到有个中文版,就跑去actuatechina.com 下, 结果还要注册(我讨厌下东西的时候注册,我特别懒,最讨厌注册这种事) , 后来就注了个册,然后随便看了几个帖子,发现都是一些基础问题,因为很多时候BIRT的文档不可能集中在一个地方, 所以的确给很多喜欢BIRT 的朋友学习造成了一些麻烦,也有朋友抱怨说BIRT文档不好, 其实不是BIRT 文档不好,而是有很多问题都是实际的应用一个一个去解决,不可能有一份文档告诉你所有BIRT问题该怎么解决, 这就像我给你一份Java 的api 文档,你不可能知道所有java 代码该怎么写一样,还是要一个一个具体问题对应的解决, 最重要的是有示例 , 一个例子顶千言,这就是为什么需要BIRT的newsgroup , birt-exchange.com , actuatechina.com 这些资源去回答问题的, 所以没有什么必要抱怨什么没有文档, 我给你一份oracle 的参考大全,你就能成为最牛的DBA吗? 肯定不可能呀 .

下面列出一些常见的问题.

1. 作者: wc188996

希望能够在 BIRT CHART 的 category Series 上也能够实现钻取功能。有点时候在很多工程里category Series会包含很多内容,但是图片上的信息也不能完全显示,需要在category Series 上实现带参数的钻取功能。category Series可以很轻松的包含十几个甚至几十个项目,所以这点还是很实用的。
例如:在我的附件中饼图的这些个乱码上的位置,能否添加钻取功能。客户需要,郁闷啊。

birtchartdrill

答: BIRT的交互功能和script 一向是我最喜欢的, 图表的交互功能我个人认为可能是报表中最强的,(有希望打败它的可能只能在flash 图表里面找,它商业版里也有支持flash 对象的).   在一个chart 的y series 里面点击interactivity , 里面列出所有事件,选启动的mouse click 或mouse double click .Action 选Hyperlink, 然后连接你的另一个报表. 我前一个在BIRT里面高亮行的例子中http://www.gemini5201314.net/?p=151 ,那个图表就是选的Action –>Invoke Script.   如果你不是点饼图,而是点旁边的数值,就选Legend里面的interactivity , 注意Legend 还有一个Behavior 属性, 反正你都点着试一下就知道了.

 

作者: mjianguo

在birt2.3中,我用JDBC连数据库,创建数据集,创建参数(注:我用的是list box,Dynamic,此时没有选Allow Multiple Values),然后edit数据集,在Query中加入?,
在Paremeters中加入参数,Preview results ,没有问题。
此时我将一个参数中的Allow Multiple Values选中,Preview results时报表中就没有值了?
查看原因:edit数据集,点击Parmeters进入查看参数时,在上面显示此行错误:The report parameter ‘ipadd’ allows multiple values, which can not be used to link with data set parameter.
请问我该如何使用Allow Mulitple Values此选项?在SQL中要做什么变化吗?
不知说清楚了没有,请各位大侠指点迷经。。。先谢谢了

答: Query中的参数不支持link到allow multiple value的parameter 其中有个bug 跟它相关(2.3.1 以修正),

https://bugs.eclipse.org/bugs/show_bug.cgi?id=235252

这个bug 修正的是UI上要提示dataset 里面不能用parameter link 上UI要有提示的.

你的query 里面不能link multiple values 是因为java.sql.PreparedStatement 里面不可能setParameter(position,String[] params) 接受数组这种参数, 如果你要接受多个参数值可以:
1. dataset 的filter 里面加 xxx in params["allow multiple values"]
2. 或者在property binding 里面写 this.query.text="手工把params["multiple"]拼起来的sql"

 

作者: sanegod

我有这样一个需求,如附件need.jpg所示:
表格里有嵌套表!每个表绑定不同的数据集;
我有5个数据集,数据集1绑定在外层表,其他是4数据集绑定在内部的嵌套表上
z_in,z_out,z_in_cz,z_out_cz;
每个表格都一个结果,现在我想要实现:
z_in-z_out-z_in_cz-z_out_cz他们想减的结果放在aihaochazhi那个表里;
由于是四个数据集,不知道怎么实现!请大家帮忙!
把是个数据集的语句弄到一个数据这个办法考虑过,实现不了我的需求,我一定要用到4个数据集的!谢谢大家了!

答: 使用joint data set 把四个dataset 连起来,
你虽然知道每个结果肯定只有一个值,但是dataset 不可能知道呀,要是一dataset 有3个值,一个dataset 有5个值,你说最后的表格怎么画出来的.
只要你的四个dataset 使用的是同一个数据源,肯定可以用一个sql 跑出来, joint data set 一般用在不同的数据源直接dataset 连接

 

作者: iskytek

。。。。。。。。。。。。。。 交叉报表怎么没有分页选项

答 : 在crosstab 的row area 和column area 里面都有page break 选项呀, 分别是竖直分页和水平分页

 

1,birt导出PDF,如果内容是字母或数字过长,就会被截掉,怎么解决??
2,birt的WEB预览页面跟导出的PDF或打印出的样子不一样,那预览还有什么用?

答 1. 你在advanced tab 里面指定它的width 属性.
    2. 它的WEB 预览是html 的呀, 你pdf 当然是不一样的.

 

作者: qxyang007

目前我用的MVC框架,现在要用spring在后台调用birt,请问一下,该如何调用?网上说要重载一个方法renderMergedOutputModel,但,又没有实例,请教高手,能说明一下吗?急啊!谢谢了!

答 : 可以参考一下springside 的方法.
http://www.springside.org.cn/docs/reference/Birt.htm

 

我在googlecode 上建的一个收集report 示例的项目. 目前主要是birt-exchange.com 上的

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

 

参考资料

http://www.birt-exchange.com/devshare/designing-birt-reports/588-create-data-source-on-stored-procedure-in-birt/#description    使用store procedure 做dataset.

http://www.actuatechina.com/thread838.html#post4250    四dataset

http://www.actuatechina.com/thread40.html    交叉报表

http://www.actuatechina.com/thread782.html     link multile values

http://www.actuatechina.com/thread852.html

BIRT, Report

Kettle 不能启动ClassNotFoundException

2008年12月29日

我个人重来都是没有碰到过这个错误的,不过最近有个朋友从itput 看到我写的关于kettle 的文章,问我这个问题, 后来找到几种可能性, 主要可能是发生在Windows 2000 上, 我用的是xp  ,还没碰到过, windows 2000 的command line 最大可以有2047 个字符,xp是8091 , kettle 3.0 之后加载的东西太多了,所以有些jar 加不进去,解决办法如下:

1. 把kettle 尽量放在顶层目录比如 E:/pdi 下,减少字符长度

2. 把libext/JDBC 目录下的不用的数据库驱动删掉,比如你只用mysql 和oracle 就只保留mysql-connect-xxx.jar 和ojdbc12.jar 其他的都删掉,

3. 在xp 系统下把cmd.exe 文件拷贝到2000 下, 这个字符串长度限制是写死的,xp 的长度限制为8091.

 

另外需要注意的是至少需要jdk 1.5 以上才能运行, 1.4 是不行的, 我用的是jdk 1.6 的, 点那个kettle.exe 文件它还报错说要jdk 1.5 , 不用exe 文件启动,直接点spoon.bat 启动就是好的.

 

 

参考资料

http://tech.it168.com/d/2008-03-21/200803211924754.shtml

开源ETL工具kettle系列之增量更新设计技巧

 

http://tech.it168.com/n/2008-03-21/200803211716994.shtml

开源ETL工具kettle系列之建立缓慢增长维

 

http://tech.it168.com/d/2008-03-18/200803171550713.shtml

开源ETL工具kettle系列之动态转换

 

http://wiki.pentaho.com/display/EAI/Windows+2000

pentaho wiki 上说的解决方法

 

http://support.microsoft.com/kb/830473

windows 长度限制

ETL, Kettle

BIRT 报表高亮选中行

2008年12月28日

在HTML中,要高亮选中一行非常简单,在<tr> 标签上加上onmouseover 事件和onmouseout , 然后使用this.style.backgroundColor=xxx 来表示 , 比如如下代码

<table border="1">
<tr onmouseover="this.style.backgroundColor=’red’;" onmouseout="this.style.background=’white’">
<td>hello world   hello world</td>

<td>hello world   hello world</td>

<td>hello world   hello world</td>
<td>hello world   hello world</td>
</tr>
</table>

 

BIRT 报表中当然也是可以嵌入HTML 和javascript 的, 通过在 "Text" 元素中选择 "HTML" 和 Formatting 格式.

birt-exchange 上有一个例子演示了如何在html 中鼠标移动的时候高亮选中一行,里面同时也演示了在对应的图表上怎么样鼠标移动时对应的表格里面的行也被高亮选中.通过在 chart 上的y轴添加一个onmouseover 事件.

另外一个需要注意的就是里面的<tr> 元素的id 是通过 bookmark 属性确定的. 这个例子中,bookmark 的值就是row["Country"] . 其余也不用多说.仔细看例子就知道了. 里面用来一点javascript . 可以学学怎么样取得table 的id 的.

 

 

参考资料

http://www.birt-exchange.com/devshare/designing-birt-reports/571-mouseover-highlight-for-tables-and-charts

BIRT