June 2005 Archives

PricewaterhouseCoopers(普华永道)

| No Comments | No TrackBacks

公司介绍


  合并后的普华永道已成为一个真正的巨人和一家真正的全球性公司,在全球150多个国家拥有800多个办事处。普华永道的领导层深信,公司越大,发展越快;因而新成立的普华永道必将创造一个不可超越的大型公司,并将其竞争对手远远地甩在身后。


  严格地讲,普华永道咨询公司成立仅一年。尽管如此,公司还是在管理咨询领域有不俗的表现。普华永道管理咨询公司是发展最快的咨询公司之一,其1998年的增长率高达40%。更值得一提的是,普华永道的策略咨询现已成为世界第三大策略咨询业务,该业务1998年的销售额达9亿美元。 普华永道的主要服务包括战略变革,流程优化和技术解决方案。主要竞争对手有美国管理系统公司、安达信咨询公司、德勤咨询公司、安永咨询公司、毕马威咨询公司、AT Kearney、Booz-Allen & Hamilton以及麦肯锡咨询公司。


  普华永道管理咨询公司对普华永道在全球,特别是欧洲的业务拓展做出了巨大的贡献。1999年6月,该公司为其在法国的业务增派了约250名咨询员。同时,该公司还通过收购比利时和意大利的其他咨询公司而不断扩大自身规模。


  “新公司服务”——普华永道推出的一项新型咨询服务,旨在协助刚刚起步的高科技公司。普华永道咨询将为公司的前期启动、创建业务模式和吸引投资等方面提供帮助。目前,该公司在高科技领域的客户包括Cisco Systems和惠普公司。


  普华永道管理咨询公司坚信,因特网和电子商务作为一种建立公司—客户关系的新方式,有着重要的战略优势。“电子商务是普华永道的一个重要增长点,”一位咨询员说,“我们已经安排众多最优秀的人才和大量的资金,以使普华永道成为电子商务领域中最重要的一员。”


  普华和永道的合并同时创造了全美最大的政府咨询公司之一——普华永道政府咨询公司。该公司在华盛顿地区共拥有2500名员工,约80%的年收入直接来自美国政府;预计1999年的收入将高达3.5亿美元。


  普华永道正全力培养顶尖的IT咨询人员。为此,公司于1999年在佛罗里达州的Tampa建造了一个方圆23英亩的培训中心,全美750多名未来的咨询员将被送往这里进行为期12周的技术培训。除技术培训以外,接受培训的咨询人员还要通过一系列的讲座和小组活动了解公司及其运作。已经经过培训的IT咨询人员也将在日后的工作中定期的来到Tampa培训中心接受更高层次的培训。

  关于公司的合并,员工们是怎么说的呢?对此,绝大部分人都感到很高兴。一名员工指出:“合并之后,我们的福利待遇改善了。我们享有医疗保健、福利制度以及长达三周的休假。公司的职员享有10天的有薪休假,外加15天的无薪休假(两年后将增加到22天)。


  “合并还带来了其他好处,”一位职员指出,“我们的咨询、审核及税务服务的业务范围明显扩大,其实在某种程度上这已经涵盖了全美所有的大公司。在合并之前,我们两家公司的优势互补:普华在美国以咨询见长,而在欧洲则以审计和税务见长;而永道正好相反。现在,我们在任何一处的任一业务都十分强大。”


企业文化


  “众所周知,”一位职员说,“即使在近两年,普华大华和永道仍以高额薪金而闻名。”当前,在人才市场紧缩的情况下,“普华永道的薪金显得更具竞争力。”职员们称,尽管普华没有加班制度而永道有,“但两家的报酬基本处于同一水平。”


  你也许会自然而然地想到,一个拥有155,000名员工的公司会有一种“国际化”的公司气氛。“事实上,我们就像一个小型的国家!”一位咨询员说。另一位职员则评论道:“普华永道是一家全球性的公司,公司的领导层具有全球化的眼光。”完成海外作业并不难,事实上,公司也常常鼓励我们这么做。他们会将你的丈夫或妻子送来与你相聚——的确,普华永道的激励机制十分优秀。

  普华永道对有经验员工的培训同样是全球范围的。这个名叫“全球入门教程”的培训方案是为有经验的咨询人员开设的。据一位曾参加培训的员工说,培训地点可能在任何地方——法国、西班牙、东京、塞浦路斯或者悉尼。有些员工则呆在亚特兰大或圣路易斯。一位新雇员说:“全球入门教程将帮助你熟悉公司的情况。他们会告诉你第一个月和第一年的工作、生活情况,告诉你在需要时和谁联系等等。我们还做一些小组协作练习,这对那些不习惯在小组中工作的外国员工来说极为有益。我们吃得简直像个皇帝——牛排、龙虾以及数量不限的小虾。”


  和大部分的咨询公司一样,普华永道要求员工长时间地工作。对大多数人来说,“工作时间是由你自己决定的。如果你像其他许多人一样是个工作狂,那么你可以没日没夜地干;如果你只想按公司的规定做,那么你可以只从早上八点干到下午五点,从周一干到周五。”然而,正如那位员工所说,“没人会拿到任何加班费——你只是在完成你的本职工作而已。”另一位员工则抱怨说:“工作时间相当长。平均每周你必须工作50至60小时。”很一大部分工作时间将在出差中度过——尽管咨询员们认为“公司的出差制度相当不错”。出差时,你“将拥有一台膝上型便携式电脑”,“住在舒适的旅馆,享用美味的晚餐”。大部分人整个礼拜都在出差,周一一早离开,直至周四晚才回来。


  对普华永道,甚至对所有的咨询公司来说,如何留住最优秀的员工都是一个倍受关注的问题。然而,员工们称,普华永道为满足职员的需求已做出了卓有成效的努力。“一些人根本无法忍受每周都必须乘飞机穿越美国,但这对咨询工作来说又是不可避免的。”一位员工说,“出于这个考虑,普华永道正努力改进我们的业务模式,以便能够只在小范围内派遣员工。”普华永道的另一项举措是设立“创新”奖金,以确保勇于创新的员工能得到应有的重视。新技术包括电子商务(无论是企业之间或是企业与用户之间)和销售运作自动化等。


员工待遇

   工资上涨已不是秘密,大约两年前Coopers&Lybrand和Price Waterhouse的报酬都不很丰厚,但如今员工们的报酬已从较具竞争力 转变为极具竞争力。公司将收益分享制度扩展至咨询人员,合伙人可 分享收益。


   PricewaterhouseCoopers很重视公司的生活质量,管理咨询服务部正推行“More Nights@Home”计划,意在减少咨询人员离家 的时间,该计划要求员工每周为客户工作五天,四天需呆在客户处, 其余三天便可呆在家中。


   其他咨询人员的福利制度还有“For Your Converience”,该计划已在全美十二处推行。FYC计划照顾了员工的 需要,如:代买礼品或杂货,代替因维修或送货而不得不呆在家中的 员工。大部分服务都是免费的,其余的最多只需花费5美元,大部分员 工都利用了该计划提供的服务。 另外还有“Personal Survival Series”计划,帮助员工缓解生活 。


网友观点


公司主页:http://www.pwcglobal.com

企业推荐

| 2 Comments | No TrackBacks

咨询{分行业,不断更新}: -------------------------------

华通现代:http://www.acsr.com.cn/
广州网盈:http://www.mondi.com.cn/

普华永道:http://www.pwcglobal.com/

在项目开发的过程当中,项目组开发成员的编程风格差异和数据库操作语句SQL的灵活性给项目组带来了越来越多的操作和维护难度。
比如:
从user表中取出所有数据,有的人会写成 ’ select * from user’ ,有的人会写成 ‘select all from user’,虽然在操作中不会有任何的错误,但在其他人读程序的过程时就会产生不好的感觉。
如果这种程序差异在项目中的数量级很多,那么在开发的过程当中程序就会出现各种各样的风格,在维护的过程中就会拼命的挠头并诅咒那些当初写程序的人(呵呵,至少我会毫不客气的骂人的)。

为了整篇文章的举例,现在我们在数据库中建立如下表
TBL_USER
USERID BIGINT
USERNAME VARCHAR(20)
PASSWORD VARCHAR(20)
CREATETIME DATE

TBL_USER_INFO
USERID BIGINT
EMAIL VARCHAR(64)
MOBILE VARCHAR(13)


一:分析

A) 分析select语句

于是使用XML来封装数据库操作语句成为项目规范化操作的第一步骤。在这个步骤中,我们将举几个例子来逐步实现封装的目的。
比如 “ SELECT USERNAME, PASSWORD FROM TBL_USER ” 这个语句,分析成XML文件时可以有各种各样的写法,我们现在使用如下的表达方式:
分析1)
1
2
3
4
5

6

在第一行的句子中使用 dbtrans 为节点名称,
属性name为这个交易的名称,这里为”selectUser”,
属性table为索取表的名称,这里为”TBL_USER”,
属性method为操作数据库的方法,这里为”select”,
子节点意思为从数据库读取数据。
子节点为读取的数据库字段,其中:
属性name为字段的名字,
属性type 为字段的类型,这里设置类型在后面的程序中可以体现出来。

对于” SELECT USERNAME, PASSWORD FROM TBL_USER WHERE USERID=123 “语句,我们根据上诉的分析,则可将XML描绘为:
分析2)
1.
2.
3
4

5
6
7
8

9

如果使用的是like操作,我们可以将第3句描述成为

对于” SELECT USERNAME, PASSWORD FROM TBL_USER ORDER BY USERNAME DESC “这个语句,XML如下分析
分析3)
1.
2
3
4
5

6
6

这样的语句分析基本上可以完成了绝大部分的普通数据库的select语句的操作,但是毕竟还是会有一些我们无法预料的数据库操作语句会出现,比如
“SELECT USERNAME, PASSWORD FROM TBL_USER WHERE CREATETIME >’2003-7-16’ AND CREATETIME<’2003-9-16’时,同时出现了CREATETIME在 之中,这时我们可以将XML描绘成为

”>

但即使使用了以上的变通方法,还是会有很多的特殊语句是无法完成的,比如 “ SELECT COUNT(*) FROM TBL_USER “, 这时的操作会出现使用XML语句无法描绘的时候,这个时候我们就可以引入了special这个属性,例如:
分析4)
1.
2

这个属性的意思是将所有的特殊交易都特殊表现出来。


B)分析INSERT语句

INSERT 语句在关系型数据库中操作可以说是最麻烦的一条语句了,因为如果你需要在TBL_USER和TBL_USER_INFO表中建立一条对应的数据时,你需要知道插入数据库的主键的值,在JDBC3.0中可以使用Statement.RETURN_GENERATED_KEYS来获取,但是如果为了兼容性考虑,我们在操作过程之中决定采用另一种办法来实现。
我们在数据库中建立一个表,名为:TSYS_PRIMARYKEY,其中包括三个字段,如下:
TSYS_PRIMARYKEY
KEYID BIGINT
TABLENAME VARCHAR(64)
PRIMARYKEY VARCHAR(30)
其中TABLENAME保存表名,PRIMARYKEY保存主键的名称,KEYID保存主键的值,这样的做法目的是在insert语句操作前,先取到现在主键的值,并将该值加1,成为现有的主键,然后进行insert操作,操作完成之后我们还需要update一下TSYS_PRIMARYKEY这个表,确保数据的同步。
现在我们开始分析 INSERT语句了,
INSERT INTO TBL_USER ( USERID, USERNAME, PASSWORD ) VALUES ( 100, ‘test’, ‘test’ )
INSERT INTO TBL_USER_INFO ( USERID, EMAIL, MOBILE ) VALUES ( 100, ‘test@test.com’, ‘1234567890’ )

描绘为XML文件时我们可以描绘如下
分析5)
1.
2
3
4
5
6

7

以及
1.
2
3
4
5
6

7


C) 分析DELETE语句

Delete语句最常用的可以分为两种,一种是按照键值删除,一种是全部删除,为此我们将此操作划分为两种类型,delete和clear
对于delete类型,举例为:
DELETE FROM TBL_USER_INFO WHERE USERID=123
描述为:
分析6)
1.
2
3
4

5

对于clear类型,举例为:
DELETE FROM TBL_USER_INFO
描述为:
分析7)
1.
2


D)分析UPDATE语句

从update通常的操作我们可以知道使用XML表述时将会出现两种tag,包括,比如:
UPDATE TBL_USER_INFO SET EMAIL=’aaa@aaa.com’ WHERE USERID=123
描述称XML为:
分析8)
1.
2
3
4

5
6
7

8

二:程序设计

好的,在分析了XML文件之后需要我们进入到程序的设计上来了。从以上实现的分析我们可以清楚的看到要实现以上操作,我们必须要做到以下几步:
1:读取XML文件
2:定位相应的交易节点
3:拼SQL 语句
4:数据库操作
5:取数据
6:返回数据

其中针对第一步的读取文件,我们可以封装所有的XML parse语句以及前期的操作封装
进入一个类之中,这里我们命名为 XMLLoadFile。

交易处理的过程包括2,5,6三个步骤,可以封装成XMLTransaction类中。当然返回数据这个操作可以单独抽出来作为一个相应的返回类,如果这样是为了在返回的数据报文做处理,比如可以返回XML,Vector或者Hashtable或Map等。这里暂定返回数据为Vector类型,所以将第6步封装进来。

拼装SQL语句,独立建立一个类(XMLCombine),当然也可以分为多个,比如SelectCombine,insertCombine等,这里我们进行统一封装。

数据库操作单独封装成一个类,XMLExecuteSQL。

以上所有的类统一了一个出口类,这里为XMLUtils。这个类提供的几个方法为外部数据操作的主要方法,比如select, insert, delete, update等,还有提供外部程序存取数据的几个方法,比如:setTransNode(设置交易节点),setTransValue(设置交易数据值), setTransKeyValue(设置交易键值数据值)


三:外部程序调用

对于select语句,分析1)所需编写的程序如下
XMLUtils util = new XMLUtils();
util.setTransNode(“selectUser”);
Vector vRtn = util.select( con );

分析2)为
XMLUtils util = new XMLUtils();
util.setTransNode(“selectUserByKey”);
util.setTransKeyValue(“userid”, 123 );
Vector vRtn = util.select( con );

对于insert语句,分析5)程序如下
XMLUtils util = new XMLUtils();
util.setTransNode(“insertUser”);
util.setTransValue(“username”, “test” );
util.setTransValue(“password”, “test” );
Vector vRtn = util.insert( con ); //假设操作成功
long userid = ((Long)((Hashtable)vRtn.elementAt(0)).get(“userid”)).longValue();

util.setTransNode(“insertUserInfo”);
util.setTransValue(“userid”, userid );
util.setTransValue(“email”, “test@test.com” );
util.setTransValue(“mobile”, “1234567890” );
Vector vRtn = util.insert( con );

对于 delete语句 分析 6)程序如下
XMLUtils util = new XMLUtils();
util.setTransNode(“deleteUser”);
util.setTransKeyValue(“userid”, 100);
util.delete( con );

对于update语句,分析 8)程序如下
XMLUtils util = new XMLUtils();
util.setTransNode(“updateUserInfo”);
util.setTransKeyValue(“userid”, 123);
util.setTransValue(“email”, “aaa@aaa.com”);
util.update( con );

大家在看这些SQL的操作时,是不是觉得很工整,也很舒服呢?这样做的好处很多,程序员可以不必太多的去拼写SQL 语句,封装的操作可以使所有程序员的程序都可以写的很工整,并有统一的风格。
Good Luck, Enjoy.

Keli thisishnh@163.com


word文档放置于此 http://keli.nease.net/XMLDB.doc

最新jar包放置于 http://keli.nease.net/iartbean/iartbean.jar

Sample 放置于 http://keli.nease.net/iartbean/Sample.java
import com.iart.DataBase.XMLControl.*;
import com.microsoft.*;
import java.sql.*;
import java.util.*;
public class Sample{

public static void main( String[] args ){

XMLUtils util = new XMLUtils();
Connection con = null;
try{
System.out.println("[StartupServlet]begin ==============================================");
util.StartupServlet();
System.out.println("[StartupServlet]end ==============================================");
con = getConnection();
System.out.println("[GetConnection]"+ con.toString() );
//
/* util.setTransNode( "clear" );
util.clear(con);

util.setTransNode( "setpassbyname" );
util.setTransValue( "logonname", "keli2" );
util.setTransValue( "username", "keli3" );
util.setTransValue( "password", "hnh3" );
util.insert(con);
*/

util.setTransNode("backemail","selectRespCode");
//util.setTransKeyValue( "starttime","2003-08-22 00:00:00.0" );
//util.setTransKeyValue( "endtime","2003-08-22 23:59:59.0" );
//util.setTransKeyValue( "docstatusid","2" );

//util.setTransValue( "createtime","CURRENT_TIMESTAMP" );



/* util.setTransNode("insertDocument");
util.setTransValue( "doctypeid", "2");
util.setTransValue( "docstatusid", "1" );

Vector vRtn = util.insert(con);
*/
Hashtable vRtn = util.select(con, 0, -1 );
System.out.println(vRtn.toString());
System.out.println(((Vector)vRtn.get("DATA")).size());

util.setTransNode("backemail","selectRespCode");
vRtn = util.select(con, 2, 20 );
System.out.println(vRtn.toString());
System.out.println(((Vector)vRtn.get("DATA")).size());

vRtn = util.select(con,3, 20 );
System.out.println(vRtn.toString());
System.out.println(((Vector)vRtn.get("DATA")).size());
/* util.setTransNode("selectmaxdoc");
Vector vResult = util.select(con);
Long docid = (Long)((Hashtable)vResult.elementAt(0)).get("docid");

util.setTransNode("insertEmail");
util.setTransValue( "mid", docid.toString());
util.setTransValue( "subject", "test" );
util.setTransValue( "targetaddr", "test@test.com" );
util.setTransValue( "sourceaddr", "test@test.com" );
util.setTransValue( "content", "test@test.com" );

util.insert(con);



util.setTransNode("selectemail");
Vector vResult1 = util.select(con);



for( int i=0; i< vResult1.size(); i++ )
{
Hashtable vColumn = (Hashtable)vResult1.elementAt(i);
if( vColumn != null )
System.out.println("1"+vColumn.toString() );
}

*/

/* util.setTransNode( "deletebyname" );
util.setTransKeyValue("logonname", "keli");
util.delete(con);

util.setTransNode("getpassbyname");
util.setTransKeyValue( "logonname", "%keli%" );
Vector vResult2 = util.select(con);

for( int i=0; i< vResult2.size(); i++ )
{
Hashtable vColumn = (Hashtable)vResult2.elementAt(i);
if( vColumn != null )
System.out.println(vColumn.toString() );
}
*/
}catch( Exception ex )
{
ex.printStackTrace();
}finally{
try{
con.close();
}catch(Exception ex1)
{
System.out.println(ex1.getMessage());
}
}

}

public static Connection getConnection() throws Exception{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String strCon = "jdbc:microsoft:sqlserver://localhost:1433;User=nlc;Password=nlc;DatabaseName=nlc";
Connection conn = DriverManager.getConnection(strCon);
return conn;
}


}

用缓冲技术提高JSP应用的性能和稳定性
一、概述

在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来;有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息。所有这一切都属于复杂信息的例子。在Web页面中加入过多的复杂信息可能导致Web服务器、数据库服务器负荷过重。JSP代码块缓冲为开发者带来了随意地增加各种复杂信息的自由。

JSP能够在标记库内封装和运行复杂的Java代码,它使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便。现在已经有许多标记库,它们或者是商业产品,或者是源代码开放产品。但这些产品中的大多数都只是用标记库的形式实现原本可以用一个简单的Java Scriptlet实现的功能,很少有产品以某种创造性的方式使用定制标记,提供在出现JSP定制标记库之前几乎不可能实现的用法。

OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。虽然已经有一些供应商在提供各种形式的缓存产品,但是,它们都属于面向特定供应商的产品。OSCache能够在任何JSP 1.1兼容的服务器上运行,它不仅能够为所有用户缓冲现有JSP代码块,而且能够以用户为单位进行缓冲。OSCache还包含一些提高可伸缩性的高级特性,比如:缓冲到磁盘,可编程的缓冲刷新,异常控制,等等。另外,正如OpenSymphony的其他产品,OSCache的代码也在一个开放源代码许可协议之下免费发行。

本文以一个假想的拍卖网站设计过程为例,介绍OSCache的工作过程。这个假想的Web网站将包含:一个报告最近拍卖活动的管理页面;一个功能完整、带有各种宣传信息的主页;一个特殊的导航条,它包含了用户所有尚未成交的拍卖活动信息。

二、管理页面

拍卖网站包含一个管理报表,数据库服务器需要数秒时间才能创建这样一个报表。报表生成时间长这一点很重要,因为我们可能让多个管理员监视系统运行情况,同时又想避免管理员每次访问时都重新生成这个报表。为了实现这一点,我们将把整个页面封装到一个应用级的缓冲标记之内,这个缓冲标记每隔1小时刷新。其他供应商提供的一些产品也具有类似的功能,只是OSCache比它们做得更好。

为简单计,我们将不过多地关注格式问题。在编写管理页面时,我们首先把标记库声明加入到页面:


<%@ taglib uri="cachetags" prefix="cache" %>


接下来我们要用cache标记来包围整个页面。cache标记的默认缓冲时间是1小时。

.... 复杂的管理报表 ....


现在管理页面已经被缓冲。如果管理员在页面生成后的一个小时之内再次访问同一页面,他看到的将是以前缓存的页面,不需要由数据库服务器再次生成这个报表。

三、主页

拍卖网站的主页显示网站活动情况,宣传那些即将结束的拍卖活动。我们希望显示出正在进行的拍卖活动数量,当前登录用户数量,在短期内就要结束的拍卖活动的清单,以及当前时间。这些信息有着不同的时间精确度要求。网站上的拍卖活动通常持续数天,因此我们可以把缓冲有效拍卖活动数量的时间定为6个小时。用户数量的变化显然要频繁一些,但这里我们将把这个数值每次缓冲15分钟。最后,我们希望页面中显示的当前时间总是精确的页面访问时间。

在主页中声明标记库之后,我们首先以不带缓冲的方式直接输出当前日期:

现在是:<%=new java.util.Date()%>


接下来,我们要显示一个清单,列出那些将在短期内结束的拍卖活动:

    <% // 构造一个包含最近拍卖活动的Iterator Iterator auctions = .... while (auctions.hasMore()) { Auction auction = (Auction)auctions.next(); %>
  • <%=auction%>


最后,我们希望显示出正在进行的拍卖活动的数量,这个数字需要缓冲6小时。由于cache标记需要的是缓冲数据的秒数,我们把6小时转换成21600秒:

<% //查询数据库得到拍卖活动总数 int auctionCount = .... %> 本网站正在进行的拍卖活动有<%=auctionCount%>个!


可以看到,我们只用少量的代码就构造出了一个带有复杂缓冲系统的主页。这个缓冲系统对页面各个部分分别进行缓冲,而且各个部分的缓冲时间完全符合它们各自的信息变化频繁程度。由于有了缓冲,现在我们可以在主页中放入更多的内容;而在以前没有缓冲的情况下,主页中放入过多的内容会导致页面访问速度变慢,甚至可能给数据库服务器带来过重的负载。

四、导航条

假设在规划网站的时候,我们决定在左边导航条的下方显示购物车内容。我们将显示出用户所拍卖的每一种商品的出价次数和当前报价,以及所有那些当前用户出价最高的商品的清单。

我们利用会话级的缓冲能力在导航条中构造上述功能。把下面的代码放入模板或者包含文件,以便网站中的其他页面引用这个导航条:

<% //提取并显示当前的出价信息 %>


在这里我们引入了两个重要的属性,即key和scope。在本文前面的代码中,由于cache标记能够自动为代码块创建唯一的key,所以我们不需要手工设置这个key属性。但在这里,我们想要从网站的其余部分引用这个被缓冲的代码块,因此我们显式定义了该cache标记的key属性。第二,scope属性用来告诉cache标记当前代码块必须以用户为单位缓冲,而不是为所有用户缓冲一次。

在使用会话级缓冲时应该非常小心,应该清楚:虽然我们可以让复杂的导航条减少5倍或10倍的服务器负载,但它将极大地增加每个会话所需要的内存空间。在CPU能力方面增加可能的并发用户数量无疑很理想,但是,一旦在内存支持能力方面让并发用户数量降低到了CPU的限制之下,这个方案就不再理想。

正如本文前面所提到的,我们希望从网站的其余部分引用这个缓冲的代码块。这是因为,当一个用户增加了一个供拍卖的商品、或者出价竞购其他用户拍卖的商品时,我们希望刷新缓冲,使得导航条下一次被读取时具有最新的内容。虽然这些数据可能因为其他用户的活动而改变,但如果用户在网站上执行某个动作之后看到自己的清单仍未改变,他可能会感到非常困惑。

OSCache库提供的flush标记能够刷新缓冲内容。我们可以把下面的代码加入到处理用户动作且可能影响这一区域的页面之中:


当用户下次访问它时,navbar缓冲块将被刷新。

至此为止,我们这个示例网站的构造工作已经完成且可以开始运行。下面我们来看看OSCache的异常处理能力。即使缓冲的内容已经作废,比如在缓冲块内出现了Java异常,OSCache标记库仍旧允许我们用编程的方法显示这些内容。有了这种异常控制功能,我们可以拆除数据库服务器和Web服务器之间的连接,而网站仍能够继续运行。JSP 1.2规范引入了TryCatchFinally接口,这个接口允许标记本身检测和处理Java异常。因此,标记可以结合这种异常处理代码,使得JSP页面更简单、更富有条理。

OpenSymphony正在计划实现其他的缓冲机制以及一个可管理性更好的主系统,它将使我们能够对缓冲使用的RAM和磁盘空间进行管理。一旦有了这些功能,我们就能够进一步提高网站的响应速度和可靠性。

【结束语】 OSCache能够帮助我们构造出更丰富多彩、具有更高性能的网站。有了OSCache标记库的帮助,现在我们能够用它解决一些影响网站响应能力的问题,比如访问量高峰期、数据库服务器负荷过重等。

心目中的编程高手[转贴]

| No Comments | No TrackBacks

MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, and
why?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。

Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi
和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他想看
看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。当然是传
说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加
上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN TCP/IP加入BSD,因
为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封喉,很快就写出了高性能
的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发TCP/IP Stack,谁知他们的代码还不
如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿
T-shirt不象现在,还是相当散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,
你读协议,然后编程就行了。

最令偶晕倒的是,B伯伯硕士毕业 后决定到工业界发展,于是就到了当时只有一间办公室的
Sun, 然后他就把Sparc设计出来了...... 象这种软硬通吃的牛人,想不佩服都不行的说。
据Bill Joy的同事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键
之处,B伯伯发言,直切要害,提出漂亮的构想,让同事们彻底崩溃。对了,他还是Java
Spec和JINI的主要作者之一。

John Carmack,ID Software的奠基人和首席程序员。上个月和一个搞图形的师兄聊天,他
竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些
隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能
让人惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom,
doomII, Quake...每次都把3-D技术推到极限。

J哥哥的简历上说自己的专长是"Exhaust 3-D technology",真是牛人之言不我欺的说。做J
哥哥这样的人是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡” ,不然如
果他的游戏不支持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听取他的意见,
修改了不少API。当然,J哥哥在结婚前十数年如一日地每天编程14小时以上, 也是偶们凡
人望尘莫及的。对了,J哥哥高中肆业(?),可以说是自学成才。不过呢,谁要用这个例子
来为自己学习不好辩护,就大错特错了。

那Leonardo Da Vinci还是自学成才呢(人是私生子,不能上学)。普通人和天才还是有区别
的。对了,其实偶们叫“达芬奇”是相当不对的,因为Vinci是地名,而Da Vinci就是从
Vinci来的人的意思。换句话说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意
思。叫别人“Da Vinci”就不知所谓了。嗯,扯远了,打住。

David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。
当初他和手下在微软一周内把一个具备基本功能的bootable kernel写出来,然后说:“who
can't write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管
理1500名开发员,自己还兼做设计和编程,不改coder本色啊。

D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。 日常交谈F-word不离口。他
面试秘书时必问:"what do you think of the word 'fark'?" ,让无数美女刹羽而归。终
于有一天,一个同样火爆的女面对这个问题脱口而出:"That's my favorite word"。于是
她被录取了,为D爷爷工作到NT3.5发布。

Don Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学
数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知道Anders Hejlsberg,或者学
Linux不知道Linus Torvalds一样,不可原谅啊。 为了让文章完整,就再罗唆几句吧。高爷
爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别人时收一两
千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,
学者本色的说。想想那可是60年代初啊,高爷爷写编译器写多了,顺带就搞出了个
Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan
Kay等众多高高手参加)总是第一,写的Tex到86年就code freeze,还附带2^n美分奖励等等
都是耳熟能详的,偶就不饶舌乐。

顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可谓
字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有学究
气,不失轻快跳脱。记得几年前读Concrete Mathemathics,时不时开怀大笑,让老妈极其
郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完全是高爷
爷的功劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我们的写作老师
极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和的微笑,颇有
仙风道骨,正好和他的仙文相配的说。

高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐献
了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,The Tex
Book等,更不用说足以让他流芳百世的Tex乐。

Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M. Riche老
大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan 9的主要作
者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天
辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用的操作
系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自
然不是池中物,于是他和DMR怒了,在1969年到1970间用汇编在PDP-7上写出了UNIX的第一个
版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把
Unix用C重写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。

Ken爷爷还有段佳话: 装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快大
家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell Lab里的科学家都心比天高,
当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,然
后重新编译了整个UNIX。就在大家都以为“这个世界清净了”的时候,他们发现Ken爷爷还
是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷
了14年,直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不在Unix代码里,
而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码,就自动生成后门代码。而整
个Bell Lab的人,都是用Ken爷爷的C编译器。

(6)Rob Pike, AT&T Bell Lab前Member of Technical Staff ,现在google研究操作系
。罗伯伯是Unix的先驱,是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开发
Unix的猛人,UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小
,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是,罗伯伯还是1980年奥运会射箭的银
牌得主。他还是个颇为厉害的业余天文学家,设计的珈玛射线望远镜差点被NASA用在航天飞
机上。他还是两本经典,The Unix Programming Environment 和 The Practice of
Programming 的作者之一。如果初学者想在编程方面精益求精,实在该好好读读这两本书。
它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统,并且是著名的
blit 终端的作者。当然了,罗伯伯还是号称锐意革新的操作系统,Plan9,的主要作者。可
惜的是,Plan9并没有引起多少人的注意。罗伯伯一怒之下,写出了振聋发聩的雄文
Systems Software Research is Irrelevant,痛斥当下系统开发的不思进取,固步自封的
弊病。虽然这篇文章是罗伯伯含忿出手,颇有偏激之词,但确实道出了系统开发的无奈:开
发周期越来越长,代价越来越大,用户被统一到少数几个系统上,结果越来越多的活动是测
量和修补,而真正的革新越来越少。

就在罗伯伯郁闷之极的时候,google登门求贤来乐。如果说现在还有一家大众公司在不遗余
力地把系统开发推向极致的话,也就是google了。随便看看google的成果就知道了。具有超
强容错和负载平衡能力的分布式文件系统GFS (现在能够用100,000台廉价PC搭起一个巨型分
布系统,并且高效便宜地进行管理的系统也不多哈),大规模机器学习系统(拼写检查,广告
匹配,拼音搜寻。。。哪个都很牛的说),更不用说处理海量并行计算的各式google服务
了。Rob在System Software Research is Irrelevant里萧瑟地说现在没有人再关心系统研
究的前沿成果了。想不到他错了,应为google关心。google网络了大批功成总是试图吸取系
统研究的最新成果。想必Rob Pike在google很幸福。愿他做出更棒的系统。

在这个简洁到只有一个搜索框的页面上,算上logo,整个页面只有11K大小,用33.6的Modem下载,只需3秒钟。你可以计算一下雅虎、新浪的首页,那些充满密密麻麻的文字和图片,Flash广告和弹出窗口的首页,真的比Google的首页更值钱吗?
在很多人眼里,Google真是傻到极点,放着大好的资源不利用,不拿来换钱,还要辛辛苦苦地推广AdWords,首页一个banner甚至button,抵得上多少AdWords啊。很多商人总爱把小聪明当成大智慧,以为在一条100米长的马路上布置1000块广告牌,就代表聪明,以为把每片树叶都贴上一张
广告就代表智慧。这样的商人在中国很多,所以我们经常听到某个风景名胜盖起了楼堂馆所,修上了索道,全然不懂什么叫煞风景。
我一直都小心翼翼地浏览国内的网站,从最大的门户,到最小的个人网站,一水的密密麻麻,不容你喘息。而且还常常有些背后的小动作,一些欺骗性的陷阱,一不留神就被引到了一个你没打算去的地方,或者在你的机器上装上了个什么东西。
大概是穷怕了吧,尽管已经有点钱了,但他们还是精心算计着每一寸空间,生怕有什么地方没利用好,浪费了。挺好的一客厅,就被这么算计着算计着,没了落脚的地儿。在他们看来,天安门广场那么大一块地皮,不盖上写字楼,实在是一种不可原谅的浪费,损失多少租金啊。
我不知道上市以后的Google会怎么做,我所知道的是,此前6年,Google不仅一直在坚守其美学原则,而且一直在坚守其商业原则。也正是因为这样,Google成了当今最被看好的互联网公司。表面上看,Google损失了首页的直接商业收益,但它得到了用户。而所有的广告商之所以愿意给你钱,不是因为你有多值钱,而是因为你的用户值钱。Google去年收入10亿美元,是整个中国互联网广告市场总额的8倍。
当然,Google也有它的烦恼,它很难像雅虎那样拿到大企业的广告,AdWords这种广告形式,更多的只是吸引一些小公司的产品广告。不过,既然它已经拥有了数量庞大的用户群,相信它总会有办法以某种形式将其中的价值置换出来,不一定非要用广告去填充它简洁的首页。
国内网络公司,把大部分脑力用于讨好广告客户,实际上表明他们对自己的用户缺乏尊重。广告客户喜欢什么位置,他们就把什么位置放上广告,很少会顾及用户的感受。这种小聪明总有一天会遭到报复。

  Blog已经不单单是网民们写写"日记"的地方了,它已经越来越多的被用在了商业领域。比如宣传产品、与雇员们交流或是管理一个商业项目。

  Blog是前几年兴起的一种新的网络服务。起初它就像个人论坛一样被用于网民们记录自己的生活,记录自己的情感。现在很多公司发现这种方便廉价的手段也可以用来开发市场和增强内部交流。管理的一个关键就在于认识到尽管很多人的语气很叛逆,但是他们也有建设性的点子。

  最近,有些公司解雇了在个人Blog上谈论上司的员工。一些公司也开始制定了严格的Blog管理规章,或者建立自己的Blog以控制敏感信息。但是,这些公司也给了员工一些自由,因为透露公司内部的一些消息有时也能起到宣传的作用。

  微软的技术人员Robert Scoble表示,Blog的魅力在于知识的共享。他指出,一个有趣的Blog往往强过在Google上大批的广告。潜在顾客们往往会怀疑那些附费广告,但是一个知识性的Blog就显得要可信得多。只要能够合理的控制敏感信息的外流,Blog将成为宣传产品和公司文化的一把利器。

  以前Scoble的Blog上有很多微软的负面意见。但现在,微软雇佣了这位Blog高手来专门宣传公司的内部文化和信息。这家公司目前有1500名写Blog的员工,而Scoble对他们的要求只有一个:放聪明些。

  导语:北京时间6月23日,国外媒体近日发表分析文章称,Google和雅虎的最终目标都是在网络搜索领域独步天下,从这一角度来看,两家公司可谓殊途同归。但是,两家公司在企业文化、管理结构和运营方式等方面都有着很大的不同,到底哪家公司的模式更适应当前和未来的互联网产业呢?下面我们从多个不同的方面分析这一问题。

  雅虎硅谷办公室的墙上张贴着各种古怪的设计图纸,其中甚至包括一个便携式鸟笼。这些设计的共同之处在于都已经获得了专利,雅虎张贴这些图纸的寓意在于:既然鸟笼都可以获得专利,那么只要用心,雅虎的员工都能够提出好的创意。这些海报是雅虎“创意工厂”计划的一部分,该计划旨在促进雅虎公司内部的创新。根据这一计划,雅虎要求员工提出各种改进意见,涉及范围从雅虎产品直到办公场所。

  总部同在美国加州的Google则采用完全不同的方法鼓励员工创新。在Google公司,工程师们每周有一天的时间可以从事个人感兴趣的项目。这种宽松环境催生了Google新闻和社交网络网站Orkut等新型服务,尼尔森互联网研究公布的数据显示,Google新闻平均每月都能吸引710万名访问者。

  Google和雅虎都希望从网络广告业务中获取更多的利润,可以说,雅虎同Google之争已经演变成为对不同类型企业文化的一种考验。到底何种企业文化更适合互联网公司呢?是雅虎的“好莱坞”风格,还是Google这样的天才竞技场?

  这一问题的答案也许会对未来数年内互联网公司的组织形式产生深远的影响。如果雅虎胜出,投资者将会更为青睐特里-塞梅尔(Terry Semel)这样有媒体背景的CEO;而如果Google继续保持强劲的增长势头,投资者就会更为看好埃里克-舒密特(Eric Schmidt)这样技术专家类型的CEO。

  《跨越鸿沟》的作者杰弗里-摩尔(Geoffrey Moore)表示:“相对而言,Google更依赖于员工的个人发挥。Google一直在挖掘员工的潜力,并为员工提供了一个宽松的环境。雅虎过去也是如此,但在塞梅尔领导下,雅虎已经转型为一家纪律严明的更成熟的公司,但创新能力可能不如从前。”

  雅虎和Google在本质上有着很多相似之处,但却走上了两条不同的道路。1994年,斯坦福大学电子工程专业博士研究生戴维-费罗(David Filo)和杨致远创建了他们的第一个搜索引擎。两年以后,同为斯坦福大学博士研究生的拉里-佩奇(Larry Page)和塞吉-布林(Sergey Brin)共同创建了搜索引擎“Back Rub”,这就是Google的前身。当时,他们的第一台数据中心就放在佩奇的宿舍里。1998年,当佩奇和布林创建Google时,他们甚至征求了好友费罗的意见。Watch.com的编辑丹尼-沙利文(Danny Sullivan)表示,Google同雅虎的最大区别在于,佩奇和布林仍在运营Google,而费罗和杨致远已经不再负责雅虎的日常运营。

  雅虎和Google的碰撞并不仅仅体现在企业文化上,它们在很多业务领域都开展了激烈的竞争,特别是网络广告业务上。最近三年里,雅虎的核心业务主要围绕网络搜索和相关广告展开。目前雅虎在网络搜索广告市场仅次于Google,它的很多技术都可以同Google媲美。尽管Google管理层否认Google将成为门户网站,但随着业务范围的扩展,Google同雅虎的相似之处越来越多。Google已经推出了免费电邮、社交网络、发布工具、地图、购物、新闻、视频搜索、品牌广告销售等多项服务。

  Google和雅虎都希望能在年产值80亿美元的网络搜索广告市场占到更多的份额。更为重要的是,搜索广告正日益成为利润丰厚的品牌广告市场的一部分。据高盛公司称,今年全球网络品牌广告的销售额将增长21%,由113 亿美元增至182 亿美元。今年第一季度,Google和雅虎的增长势头都十分强劲。其中,Google第一季度营收为12.6亿美元,同比增长近一倍;净利润为3.692亿美元,达到去年同期的六倍。雅虎第一季度营收为11.7亿美元,同比增长35%;净利润为2.05亿美元,同比增长近一倍。目前Google的市值为760亿美元,而雅虎为510亿美元。

  不过,Google和雅虎拓展广告市场时所采用的方法完全不同,这充分反映出两家公司管理层在专业技能方面的不同。塞梅尔在雅虎处于低谷时加盟,取代了前任雅虎CEO蒂姆-库吉尔(Tim Koogle)。塞梅尔一向以工作雷厉风行著称,同时他一直与好莱坞保持着良好的合作关系。一年之后,塞梅尔将前CNET网络高管丹-罗森维格(Dan Rosensweig)招至麾下,出任雅虎首席运营长。上任以后,罗森维格采取了大幅度削减支出以及将盈利目标下放到个人等措施,对于雅虎的发展起到了一定的作用。

  削减支出并不意味着雅虎在收购方面缩手缩脚。2002年到2003年期间,雅虎分别以2.35亿美元收购了搜索引擎Inktomi,以4.36亿美元收购了招聘网站HotJobs,以及以17亿美元收购了Overture公司。尽管2004年净利润大幅度增长,雅虎仍然在财务上采取较为保守的策略。雅虎一直在系统地考察和收购潜力巨大的新兴厂商,例如雅虎上周宣布收购VoIP厂商DialPad,其它例子还包括收购照片标注网站Flickr和电子邮件厂商Oddpost。这几笔收购涉及的金额很小,雅虎没有公布相关的财务条款。

  很多分析师认为,雅虎正进入一个全新的时代,由高科技创新厂商转型为媒体厂商。雅虎目前正在修建好莱坞总部,并努力打造一个以前ABC高管罗伊德-布劳恩(Lloyd Braun)为首的娱乐业务团队。 消息人士称,塞梅尔将花费更多时间在好莱坞。因为在好莱坞,雅虎可以更好的同内容供应商合作,获得内容授权,并共同开发原创内容。

  当然,这并不意味着雅虎会忽略自身的技术。在收购Overture公司时,雅虎还收购了AltaVista和Inktomi。通过这几起收购,雅虎获得了业内顶级的技术人员。雅虎最近还从美国国家航天局喷射推进实验室挖来了火箭专家萨玛-法亚德(Ysama Fayyad),全权负责雅虎研究实验室。

  2001年,Google聘请了前Novell公司CEO施密特。Google在招股说明书中称,该公司当前的组织形式是三人共同执政。从表面上看,施密特是Google的掌门人,但他的权力要同佩吉和布林共享。尽管25亿美元的现金储备以及宽松的环境使得Google有条件不断尝试各种新服务,但批评人士对于Google能否有效的管理创新提出了质疑。例如,Gmail免费电子邮件服务已经测试了两年多的时间。

  在收购方面,Google也鲜有大手笔。Google的收购对象通常是知名度很小的新兴增长企业,例如搜索公司Kaltix、广告技术厂商Applied Semantics以及博客软件供应商Pyra实验室。Google最厉害的武器是工程师。今年第一季度,Google的研发预算为8000万美元,达到去年同期的两倍以上。此外,Google还在不断吸引业内顶级人才的加盟,前微软和BEA系统的编程专家亚当-波斯沃斯(Adam Bosworth)就是一个很好的例子。到目前为止,雅虎还没有公布研发预算。

  Google管理层十分清楚,他们只有继续创新才能够保持领先优势。业界预测Google将推出自己的网络浏览器,甚至是瘦客户端操作系统,如果这一切变为现实,Google将成为软件霸主微软的强劲竞争对手。消息人士近日透露,Google将于年内推出一款电子支付系统,直接挑战eBay的PayPal网络支付服务。

  尽管Google市值领先,但在与广告行业的关系方面,雅虎占据了上风。在广告专家温达-米兰德(Wenda Millard)的带领下,雅虎的销售团队将目光瞄准了传统的合作伙伴和广告代理。雅虎内部还有一个电信营销部门,其主要职责是与小型代理和公司联系,促使它们与雅虎合作。相比而言,Google的策略更依赖于分类广告,注重的是技术而不是关系。美国科技研究公司的财务分析师罗布-桑德森(Rob Sanderson)表示:“雅虎品牌广告业务的规模更大,Google则完全依靠搜索业务。”

  财务分析师和行业观察人士认为,在未来的互联网经济中,Google和雅虎有着共同增长的空间。但他们担心,Google可能会同雅虎一样经历几年的艰难时期。杰弗里-摩尔表示:“我相信Google也会遇到发展瓶颈,这势必会给该公司业绩带来很大的影响。”(马丁)

Oracle公司将于近日宣布把该公司的J2EE应用开发工具JDeveloper向软件开发者免费发放。

Oracle的J2EE开发工具JDeveloper 10g是一个完整的SOA开发环境,其中包括了web service的相关功能、UML建模功能、业务流程处理功能等SOA的重要特性。Oracle计划于下周正式宣布将JDeveloper 10g面向开发者免费发放,该消息是由Or acle负责中间件业务的副总裁Rick Schultz透露的。

消息全文请看:http://www.line56.com/articles/default.asp?articleID=6658&TopicID=4

6月23日消息 据外电报道,甲骨文将在下周于旧金山举办的JavaOne会议宣布,Java开发工具JDeveloper将向免费向用户提供。

  目前,这一工具软件的售价为995美元,6月2 8日以后就会免费提供。之后推出的版本也将免费。

  据甲骨文副总Rick Schultz称,这款工具软件是一种SOA开发环境,其特色有基于IDE与UML的模块化、BPEL(业务流程执行语言)流程化设计师功能以及网络服务性能。

  Schultz称,这款产品相当成熟,对其实行免费化的原因并不是针对Eclipse Java IDE开放源码软件。甲骨文此举的主要目的是为了扩大JDeveloper普及率,带动人们对该公司Fusion计划中间件的兴趣。

  近期,BEA系统公司、Macromedia和Borland公司纷纷采用了Eclipse IDE。但是Schultz称JDeveloper免费的原因不是针对Eclipse。他表示:“事实上,甲骨文还为Eclipse基金会做了一些工作,而且JDeveloper也不仅仅是一个IDE。”

  据一位分析家称,甲骨文此举是针对SAP NetWeaver中间件平台。

  甲骨文将继续对JDeveloper有关的专业服务收费。对于那些已经购买JDeveloper注册号的用户,甲骨文也不会退费。Schultz称,软件被注册使用以后,没有退费这一说法。

  Schultz还说,甲骨文还将在JavaOne会议上宣布,该公司计划领导一个Eclipse项目来提供一个基于JSF(JavaServer Faces)介面的工具,这是一个建立JAVA应用软件用户介面的规范。这也是在为甲骨文中间件造势。该项目的目的在于简化采用JSF制作应用软件的过程。

  同时,在这次会议上甲骨文还会宣布他们加入Apache MyFaces项目的消息。MyFaces的目的在于推行JSF免费开放源码。(完)

  美国东部时间6月23日11:17(北京时间6月23日23:17)消息,为找到新收入来源并平息卖家们的不满,eBay周四名推出了名为ProStores的新服务,中小型卖家们可借此自建具有唯一Web地址的网站,并可独立于eBay之外来开展业务。

  ProStores服务的基本收费为每月6.95美元,并收取交易额0.5%至1.5%的费用。用户可把定制化的网站与他们eBay的网点相连接,还可使用Paypal在线支付系统。在此之前, eBay的核心拍卖业务年收入增长速度呈下降趋势,这一点在美国和德国显得较为突出。除加大进军中国及印度市场的步伐外,eBay还于在线分类广告、房地产及其它新兴业务上进行了尝试,以保持自己在欧美电子商务市场的高增长势态。

  eBay高级副总裁及杂货主管迈克尔-迪林(Michael Dearing)表示,过去数年中,eBay一直在致力于发展在线拍卖之外的新业务,其中就包括向中小型卖家提供咨询服务,以帮助他们创建自己网站。迪林称,在eBay的大卖家中,已有三分之一开办了自己的电子商务网站。但对10多万小型卖家来说,他们除了在eBay上的网站外,目前还没有建立起属于自己的网站。

  迪林说:“我们希望卖家们在业务上取得更好成绩,因此而推出了相应产品和服务。虽然市场培育不是一天两天就能完成,但我们知道卖家们正为此而努力,而ProStores服务正好可以对他们提供帮助。”

  今年一月,eBay在一封发给卖家们的简短电子邮件中表示,将提高卖家们租用eBay网站的月收费,即由以前的9.95美元上涨到15.95美元;除此之外,为期10天的标准目录收费也由20美分上涨到40美分。此举激怒了大量小型卖家,认为eBay的这种做法是在分抢自己利润。为平息卖家们的怒气,eBay半年后推出了ProStores服务。

  2004年期间,eBay纯利润为7.782亿美元,现金储备达13.3亿美元。eBay首席执行官梅格-惠特曼(Meg Whitman)周四表示,今后可能进行分红或回购股票。与美国其它科技公司类似,eBay此前从未进行过分红,而更愿意将利润用于研发、市场营销及其它业务支出。惠特曼对参加年度大会的100名左右股东说:“在出台战略储备措施时,我们并不反对向股东们返还现金。但我们必须对此进行全盘考虑。”

  自去年12月份以来,eBay股价下跌了40%,周四其股价为35.63美元。一位股东表示,自己对eBay股价下滑表示担忧。惠特曼则认为,没有必要为此担心。惠特曼说:“着眼于长期发展,我们对eBay的未来市场业绩很有信心。”

Google公开部分AJAX应用源代码

| No Comments | No TrackBacks

Google近日公开了该网站AJAX应用的部分源代码。首先公开的是Google AJAXSLT库的源码。

Google已经有很多基于AJAX技术的应用,例如Google Maps、Google Suggest和GMail。AJAXSLT是一个JavaScript的XSLT实现,用于在AJAX应用的web页上解析/展示XML文档。由于XSLT需要用到XPath,因此AJAXSL T库还包括一个可以独立使用的、基于JavaScript的XPath实现。

下载地址:http://goog-ajaxslt.sourceforge.net/

其他基于JavaScript的XSLT实现还包括:

The XSLT/JavaScript Interface in Gecko
XJL: The eXtendable Javascript Library

  很多 Web 开发人员喜欢 PHP 的丰富功能和简单易用,但有时候他们需要访问 J2EE 应用程序服务器中已有的业务逻辑。本文将通过一些例子说明如何通过 PHP 5 中新的 SOAP 扩展使用 Web 服务来访问 J2EE 应用程序,而不必脱离 PHP 环境,也不用学习新的编程模型。

  PHP、Web 服务和 SOAP 简介

  本文将介绍如何从 PHP 脚本中访问企业应用程序。您可能是一位 PHP 程序员,需要为部门 Web 应用程序编写代码,以便访问公司总部以 Web 服务方式提供的服务。您或许是一位有经验的 J2EE 开发人员,希望多了解一点 PHP 及其应用。本文中的例子是一个运行在 IBM WebSphere? 应用程序服务器上的 Enterprise JavaBean(EJB),但本文并没有讨论 Web 服务的部署。它的主要目标是介绍如何从 PHP 中使用 Web 服务,这一点可以应用于各种 Web 服务实现。
......
原文:http://www.yesky.com/SoftChannel/72342371945349120/20050408/1933185.shtml

php与apache是公认的网站服务器组合最佳搭档,为体验现在最新版本的新功能,我们需先来配置一个运行环境,下面实现Apache Version Apache/2.0.50 (Win32) PHP/5.0.0 的组合安装:

php一直都存在两种运行方式:
一。以apache模块方式运行。它的好处是运行速度,推荐这种方式
二。以cgi 方式运行。php3 在windows环境下只能以这种方式, 而以后的版本则没有该限制

准备工作:

apache2 windows版下载:www.apache.org
php5 windows版下载:www.php.net

apache2 安装目录:X:\servdemo\apache2
php5 的安装目录:X:\servdemo\php5


一。作为apache模块的安装

先将php5目录下的 php5apache2.dll拷贝到 X:\servdemo\apache2\modules目录下。

修改 httpd.conf 文件,添加下面几行:

LoadModule php5_module modules/php5apache2.dll
#AddModule php5.module.c !这句在别的地方查到需要,我这有这句就不行,去掉就可以了
AddType application/x-httpd-php .php


这时保存并用apache -t 测试会出现如下问题:(不要紧,其实还没完呢。以前版本到这就结束了吧,但php5就不行了。)
Syntax error on line 137 of X:/servdemo/Apache2/conf/httpd.conf:
Cannot load X:/servdemo/Apache2/modules/php5apache2.dll into server: \xd5\xd2\xb2\xbb
\xb5\xbd\xd4\xcb\xd0\xd0\xb4\xcb\xd3\xa6\xd3\xc3\xb3\xcc\xd0\xf2\xcb\xf9\xd0\xe8
\xb5\xc4\xc4\xb3\xb8\xf6\xbf\xe2\xce\xc4\xbc\xfe\xa1\xa3


现在把php5目录下的 php5ts.dll 拷贝到 apache2\bin 目录下或 windows 的系统目录下:
windows\system(win9x),winnt\system32(win2k及以上)

现在就可以启动 apache 服务器了还有错误吗?(有,不会吧???)

再写个脚本试试吧,来个简单点的 test.php
phpinfo();
?>

二。以CGI方式安装

在httpd.conf中加入:

ScriptAlias /php5 X:/servdemo/php5

AddType application/x-httpd-php .php

Action application/x-httpd-php /php5/php-cgi.exe
注:在php4及以前的版本中没有这个程序,这回带了那就直接用它了。

保存

测试一下吧


另外,再顺便写个知识点吧:apache服务器下中文乱码的问题解决方法

在 httpd.conf 中有一行:
AddDefaultCharset ISO-8859-1

将它改为:
AddDefaultCharset gb2312

AddDefaultCharset off

在更改后先把缓存清空一下,否则你