2008年12月30日星期二

听人大教授周孝正讲以色列的故事

http://club.cat898.com/newbbs/dispbbs.asp?boardid=1&id=2618863

讲述:周孝正 整理:一点五

同学们,今天我准备调整一下原有的课程,就当前以色列和巴勒斯坦冲突谈谈个人看法,我的第一个观点是,在信息不对称的情况下,不要轻易下自己的结论;第二,我个人的知识和经历告诉我,以色列是个好国家,这也是我今天讲课的主要内容。

有一次我在校内网看同学们发的图片,有一张图片引起了我的深思。这张图片的标题叫“英雄”,图片上是一个赤手空拳的巴勒斯坦青年,站在长长一列以色列坦克面前,硬是把这列坦克给拦停了。

同 学们,这个巴勒斯坦青年确实是“英雄”,敢以血肉这躯和全幅武装的坦克抗衡,但是同学们想过没有,在处于“敌对”的情况下,有几个国家的坦克会停下来?当 年日本侵略中国的坦克不会停,侵入格鲁吉亚的俄罗斯坦克不会停,但以色列的坦克停下来了,这样的士兵、这样的国度,我个人认为,才是真正的英雄,当之无愧 的英雄。

有一年我到福建做个调查,福建省政府的高官,给我讲了这么一个故事:

几年前,耶路撒路发生了一起公交车爆炸的恐怖袭击,炸死了十来个人,其中包括两名中国人,这两名中国人都是福建人,是去打工的。以色列政府立刻与中国方面联系协商赔偿事宜,但经过中国领事馆的核实,此两人系偷渡客,属于非法入境,于是使馆方面不再配合。

后来,以色列政府专门开了一个会,会议认为,在以色列国土上无辜死亡的人,政府都有责任对其负责,至于这个人偷渡与否,那是另外一回事。会议最后决定,对两名死难的中国人一视同仁地按照国民待遇善后。

  会后,以色列政府派专人到福建找到两位农民工的家人,抚恤金标准如下:

死 者健在的父母按照每月1100美金的标准发放直到老人去世;未成年子女按每月1100美金的标准发放直到成年;有妻子的按照每月1700元美金发放直到去 世。死者家属要求一次性支付,以色列政府也同意了,最后支付的金额是每位死者赔偿70万美金。所有相关的调查费用全部由以色列政府负担。

消息传开,在福建掀起了去以色列打工的狂潮。福建省政府的官员说,怎么挡也挡不住。以色列政府就是这样对待偷渡打工者的:没发现,你就在那儿打工;发现了,政府出钱购买机票送你回国;死了,按照以色列国民标准抚恤。

2001年,云南丽江发生了以色列游客不慎在虎跳峡落水的事故,经中国方面寻找无果,为此,以色列政府派专机来丽江,带着专业的搜救设备和一个专业搜救队,并高薪雇佣中国人沿江几百里进行拉网似的搜索,活要见人,死要见尸,时间持续一个多月。

同学们,一个这样对待它国和自己死去国民的国家,不管你怎么说,我都坚信,这是个好国家。

任何一个稍微了解以色列的人,至少不会对以色列产生恶感。中国人喜欢把自己的近代史说成是“多灾多难”,那其中有很多是我们自己的原因,犹太人却几乎完全因为外因,几千年来一直灾难深重,这一切,仅仅因为信仰。

这个苦难的民族,在多年的战乱动荡中,在长期的漂泊迁徙中,在饥饿和苦难、杀戮和欺侮的磨难中,他们始终坚持自己的信仰,在逆境中砥砺发奋,顽强发展,不仅没有倒下,竟奇迹般地在科技、军事、教育、现代农业等领域获得举世瞩目的巨大成就。

这个仅有1000多万人口的民族,涌现出了一大批伟大人物:爱因斯坦、弗洛伊德、海涅、拉斐尔、季诺维耶夫、卓别林、洛克菲勒、索罗斯……,这个民族和这些伟人为世界文明做出了杰出贡献。

一 般人只知道犹太民族善于经商,殊不知犹太民族特别重视教育,他们把学习作为终生的使命,重智慧胜于重金钱。有一项调查显示,全世界人均读书最多的藏书最多 的都是以色列人。犹太民族还特别重视儿童教育,他们在儿童教育方面研发的教具、教材、课程模式等被许多国家所采用。一个国家越相信自己的未来,越会重视自 己的儿童教育。一个建国以来一直战火不断、四面楚歌的国家,如此重视教育,如此重视儿童教育,这样的国度值得我们每一个人景仰。

2008年12月24日星期三

JMS CreateSession参数

createSession(paramA,paramB);
paramA是设置事务的,paramB设置acknowledgment mode
paramA设置为false时:paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
paramA设置为true时:paramB的值忽略, acknowledgment mode被jms服务器设置为SESSION_TRANSACTED 。
Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。
Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息。
DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。

2008年12月15日星期一

APR server侦听

static apr_status_t do_listen(apr_socket_t **sock, apr_pool_t *mp)
{
apr_status_t rv;
apr_socket_t *s;
apr_sockaddr_t *sa;

rv = apr_sockaddr_info_get(&sa, NULL, APR_INET6, DEF_LISTEN_PORT, 0, mp);
//取得Socket地址
if (rv != APR_SUCCESS) {
return rv;
}

rv = apr_socket_create(&s, sa->family, SOCK_STREAM, APR_PROTO_TCP, mp);
//建立Socket对象
if (rv != APR_SUCCESS) {
return rv;
}

/* it is a good idea to specify socket options explicitly.
* in this case, we make a blocking socket as the listening socket */
//设置属性
apr_socket_opt_set(s, APR_SO_NONBLOCK, 0);
apr_socket_timeout_set(s, -1);
apr_socket_opt_set(s, APR_SO_REUSEADDR, 1);/* this is useful for a server(socket listening) process */
//将Socekt地址绑定到Socket对象
rv = apr_socket_bind(s, sa);
if (rv != APR_SUCCESS) {
return rv;
}
//建立侦听
rv = apr_socket_listen(s, DEF_SOCKET_BACKLOG);
if (rv != APR_SUCCESS) {
return rv;
}

*sock = s;
return rv;
}

中国最坏的六种人

1,民主的敌人,比如形形色色的专权者。因为,专制或者说缺少民主,是中国一切政治经济社会弊端的总根源。

2,愚昧的国民,比如形形色色的左粪(或者说得直接一点,范围小一点,就是文革余孽。)因为,愚昧的左粪是滋生中国专制政治的一大温床和思想文化基础。

3,贪污腐败的官员,包括企事业单位各类干部和专业技术人员(他们手中握有的也是一种权力资源)。因为,贪污腐败是是中国一切政治经济社会弊端及其他一切不公平现象的集中体现和直接原因,也是中国专制政治的必然结果。

4,猖狂致富的不法奸商。但是他们总体上还得仰仗贪官污吏。

5,学术虚伪、学术愚民、没有良知、为虎作伥的知识分子。他们在思想本质上或经济政治利益上与贪官、奸商沆瀣一气,分一杯羹。

6,黑社会、偷扒抢骗等刑事犯罪分子。但是他们中相当一部分只是社会腐败和社会不公的派生物。

最后,要说一句的是,中国的老百姓,我们的父老乡亲,还是好人多,尽管他们也是凡夫俗子,在这个世俗的社会,免不了有这样或那样的缺点。总之,世上好人多,中国也不例外,这是我,作为一个中国人的起码的信念。

有点韩非--《五蠹》的意思

2008年12月4日星期四

13.1 server side programming(急用,先写)

A typical server process opens a listen port, and listen to the port for any client process to connect. Then, it accepts the client's connection, and communicate with the client using their network protocol. Although the network protocol depends on your application, the basic structure of server code is almost same.
典型的服务器进程是打开一个端口,然后为客户端连接侦听它。这样我们就可以接受客户端连接,和客户端进行各种网络协议的通信。尽管客户端应用各种网络协议,但最基本的服务器代码还是差不多的。

At first, we have to create a socket address object, apr_sockaddr_t. In traditional socket programming, socket address structure would cause confusion. In contrast, libapr's socket address structure is simple. It can hide chaos among various platforms and IPv4/IPv6 stacks. We can create the object by apr_sockaddr_info_get(). The prototype declaration is as follows:
首先,我们必须要创建一个socket地址对象,apr_sockaddr_t。socekt地址结构常常导致传统项目混乱,相比之下libapr的socket地址显得简单多了。它能隐藏不同平台,IPv4/IPv6之间细节的处理。我们能用 apr_sockaddr_info_get()创建一个对象,典型的用法如下:

/* excerpted from apr_network_io.h */

APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa,
const char *hostname,
apr_int32_t family,
apr_port_t port,
apr_int32_t flags,
apr_pool_t *p);
The first argument is result argument. The second argument is a hostname, or an IP address. I'll describe it later. The third argument is address family. It is usually APR_INET. If you intend to use IPv6, please specify APR_INET6. The fourth argument is a port number. Server side program should specify the port number to listen. For example, if you're creating a Web server, you might have to specify number 80. As you will see, client side program specifies the port number of the remote server. So, if you're creating a Web browser, you might have to specify number 80, too. Note that you can set the port number to zero. If so, the system selects a port number, which is available. The fifth argument is flags. In most cases, it is 0. The final argument is memory pool to use.

第一个参数是返回结果;第二个参数是主机地址,或者是IP地址,在后面将详细说明。第三个参数是个地址家族,它常常是APR_INET。如果你使用IPv6,请使用APR_INET6;第四个参数是端口号码,服务器端是侦听端口号。例如,你创建一个Web服务器,应该使用端口80,因为Web浏览器默认使用端口80。注意你也可以使用端口0,这样的话,系统将自动分配一个可用的端口号;第五个参数是个标记,在大多数情况写0;最后一个参数是正在使用的内存池。

We are back to the second argument. As you will see in client side programming below, client program generally specifies the server(remote) hostname or IP address. In contrast, server program should specifies its local address, and it binds the socket address object to a socket by apr_socket_bind().

我们再回到第二个参数。在后面你将看到客户端程序怎么使用远程服务器主机名或者IP地址。这里,服务器端应该通过 apr_socket_bind()去指定socket地址对象。

What value is allowed as a local address? One choice is a solid address or hostname. Namely, if you are creating a yahoo server, you can specify "www.yahoo.com" or "66.94.230.38". In general, such values are supplied by configuration files. Second choice is loopback address, i.e. "127.0.0.1" or "localhost". It works and it's valid. However, in such a case, only a client process running on the same host can connect to the server. If your purpose is to allow only local processes to connect to your server, specifying loopback address is a right choice.
局部地址应该选取个什么样的值呢?第一个办法是固定IP地址,或者服务器名,例如创建一个yahoo服务器,可以选择“www.yahoo.com”或者"66.94.230.38"。在一般情况下,这样的值需要通过配置文件完成。第二个办法是使用有效的Loopback地址"127.0.0.1" or "localhost"(回环地址,这个名词特别扭),这样的话,只有运行在服务器上的程序才能连接到服务器。如果服务器程序的想法就是只让本机访问的话,这样做无可厚非。

The other choice is to specify NULL or APR_ANYADDR(="0.0.0.0"). They imply that the server will bind all network interfaces to a socket. Accordingly, in such a case, any client process can connect to the server via a solid address or loopback address. Internally, NULL is better than APR_ANYADDR. As a result, it's usually good to specify NULL as the second argument of apr_sockaddr_info_get(). There is one exception. When the server host is multihome host, i.e. it has multiple solid IP addresses, and you don't want some IP addresses available from remote hosts, you shouldn't specify NULL. You must bind solid IP addresses to the listening socket.

另外一个办法就是使用NULL或者APR_ANYADDR(="0.0.0.0")。它能让服务器绑定网络接口到socket。相应的,这种情况下,任何客户端都能访问服务器物理地址或者Loopback 地址。通常NULL比APR_ANYADDR要方便。我们常常使用NULL作为apr_sockaddr_info_get()的第二个参数。但是这里有个例外,当服务器是多IP的机器,我们又需要屏蔽其中一些IP段地址,我们只能绑定侦听的绑定的物理地址。

Next, we create a socket object, apr_socket_t. In traditional socket progamming, socket type is just integer, and it acts as a file descriptor. apr_socket_t is opaque type and it hides such the OS dependencies. We can create socket object by apr_socket_create(). The prototype declaration is as follows:

下面,创建一个socket对象,apr_socket_t。在传统项目中,socket类型是一个整形,或者像一个文件描述符。这里apr_socket_t是一个不透明的类型,并且隐藏了操作系统的属性。我们可以通过apr_socket_create()创建Socket对象,属性定义如下:
/* excerpted from apr_network_io.h */

APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new_sock,
int family, int type,
int protocol,
apr_pool_t *cont);


The first argument is result argument. The second argument is address family. It is same as one of apr_sockaddr_info_get()'s third argument. Later, we make a relation between socket address object and socket object. In which, if they have different address family, it fails. The third and fourth arguments are socket type and protocol type. In general, all you have to know is two combinations. One is SOCK_STREAM as type and APR_PROTO_TCP as protocol. The other is SOCK_DGRAM as type and APR_PROTO_UDP as protocol. The final argument is memory pool to use.
第一个参数是结果返回参数;第二个参数是地址家族,它和 apr_sockaddr_info_get()第三个参数作用相同,之后我们将建立Socket地址对象和Socket对象之间的关系。他们必须有相同的地址家族。第三个和第四个参数是Socket类型和通信协议类型。总之,开发者必须知道这两个类型。一通常,一个是SOCK_STREAM,另外一个是APR_PROTO_UDP。最后个参数是使用的内存池。

Now, let's take a look at server-sample.c. The following is a typical code of server side to create a TCP listening socket.
让我们看看 server-sample.c 。下面是服务器端建立TCP侦听的典型代码:
/* excerpted from server-sample.c, but I omitted error checks */

apr_sockaddr_t *sa;
apr_socket_t *s;

apr_sockaddr_info_get(&sa, NULL, APR_INET, DEF_LISTEN_PORT, 0, mp);
apr_socket_create(&s, sa->family, SOCK_STREAM, mp);
apr_socket_bind(s, sa);
apr_socket_listen(s, DEF_SOCKET_BACKLOG);

There are two application dependent constant numbers, DEF_LISTEN_PORT and DEF_SOCKET_BACKLOG. Don't care about them.
两个常量DEF_LISTEN_PORT 和DEF_SOCKET_BACKLOG,不用管他们。

You can find two new APIs, apr_socket_bind() and apr_socket_listen(). By calling apr_socket_bind(), we can make a relation between socket address object(apr_sockaddr_t) and socket object(apr_socket_t). We call it binding the address to the socket. Then, by calling apr_socket_listen(), we change the socket's status to listening. It means we allow the socket to accept connections from remote clients. The second argument of apr_socket_listen() is length of the internal queue. The queue is a waiting queue of remote clients. They wait in the queue in (OS)kernel until the application accepts them. The length is historically called backlog. If you are not sure about proper value, I suggest you to use 'SOMAXCONN', which is a system default max value.
介绍apr_socket_bind() 和 apr_socket_listen()这两个函数,apr_socket_bind() 这个函数负责建立Socket地址对象和Socket对象之间的关系。apr_socket_listen()改变Socket的状态,使得Socket可以处理远程客户端连接请求。apr_socket_listen()的第二个参数是远程客户端请求的队列长度,这个队列由操作系统维护,直到应用程序处理他们。这个长度代表了能够积压的最大限度。如果程序没有特别要求,建议使用SOMAXCONN,它表示才做系统默认的最大值。

Next, we have to handle new connections from remote clients. At first, we have to call apr_socket_accept().
接着我们将处理远程客户端的请求。首先,使用apr_socket_accept()这个函数。

/* excerpted from server-sample.c, but I omit error checks */

apr_socket_t *ns;/* accepted socket */
apr_socket_accept(&ns, s, mp);

The second argument of apr_socket_accept() is the listening socket that we create above. Here, we get another socket object, named 'ns', accepted socket. From socket object creation's perspective, apr_socket_accept() is similar to apr_socket_create(). Namely, apr_socket_accept() also creates a new socket object. The first argument is result argument. Note that the newly created socket object is completely different from the listening socket object, which is passed as second argument to apr_socket_accept(). After returing from apr_socket_accept(), the listening socket is still just listening socket. It means we can continue to call apr_socket_accept(), and when the other remote client connects to the server, we're going to have a yet another socket object from apr_socket_accept(). After apr_socket_accept(), we have to handle two sockets independently. In general, we have the listening socket keep listening, and we have the accepted socket talk network protocol with the remote client. In server-sample.c, we send a simple HTTP request and receive the response.

apr_socket_accept() 第二个参数是我们之前创建的侦听Socket。apr_socket_accept()和 apr_socket_create()相似,第一个参数也是返回结果,创建了新的Socket对象。值得注意的是这个新的Socket和apr_socket_accept() 第二个参数是两个完全不同的Socket对象。apr_socket_accept() 第二个参数仅仅是个侦听Socket,需要继续去侦听新的客户端请求。而新的Socket对象将和已经相应的请求进行通话,他处理请求和发回响应。

To send and receive using socket, we call apr_socket_send() and apr_socket_recv(). Their prototype declarations are as follows:
接受请求和发回响应,需要apr_socket_send() and apr_socket_recv()这两个函数,他们的声明如下:
/* excerpted from apr_network_io.h */

APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf,
apr_size_t *len);
APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock,
char *buf, apr_size_t *len);


They are similar to apr_file_read() and apr_file_write() described above. The first and second argumnts are needless to explain. The third argument of both is value-result argument. By which, we specify the input buffer's length on entry and get the output result's length on exit. apr_socket_send() returns the length of sent bytes. apr_socket_recv() returns the length of received bytes.
这两个函数和之前的 apr_file_read(), apr_file_write() 两个函数相似,第一和第二个参数不需要解释了,第三个参数同时是输入和返回结果。 先指定Socket对象,缓冲,缓冲长度,然后得到结果长度。apr_socket_send()返回的是发送字节数。apr_socket_recv()得到的是接受字节数。

2. libapr skeleton code

I believe it is a good idea to write 'skeleton code' at first, when you start to learn a new library or a new framework programming. 'skeleton code' is the smallest source code, but you can compile and execute it (although it usually do nothing useful).

当我们学新的LIB或者框架时,龙骨代码是个不错的点子,这玩意包含了代码的最小单元,但是却不做任何事情。

Fortunately, libapr's skeleton code is much simpler than other modern frameworks. Let's take a look at apr-skeleton.c. We call apr_initialize() at the initialization, and call apr_terminate() at the finalization. That's all. As you can imagine, the code does nothing.

运气不错,APR的龙骨代码比起其他框架非常精炼,打开apr-skeleton.c,

int main(int argc, const char *argv[])
{
apr_status_t rv;

/* per-process initialization */
rv = apr_initialize();
if (rv != APR_SUCCESS) {
assert(0);
return -1;
}

/* application impl. */

apr_terminate();
return 0;
}


调用apr_initialize()进行初始化,调用apr_terminate()完成,就这些,也正如你所想,这段代码什么也没做。

Here, we have some libapr programming styles and rules:

* naming rule is very simple and clear.
* opaque data types are commonly used (a.k.a. incomplete types)
* most of return types are apr_status_t. As a result, result-arguments are commonly used.
* memory pool rules

我们给出一些libapr编程的风格和规则:
* 命名规则非常简单和清楚。
* 不透明类型被广泛地使用。(又名不完整类型)
* 返回结果或是结果输出参数大多数返回类型为apr_status_t。
* 内存池规则。

We are able to see these styles in the following code.

/* excerpted from mp-sample.c */

apr_status_t rv;
apr_pool_t *mp;
rv = apr_pool_create(&mp, NULL);

I will describe the meaning of the code. Here, please take a look at only style. You can see apr_ prefix. The apr_ prefix indicates that the symbol is in libapr naming scope. You can see _t suffix. It indicates that the symbol is a type name.

我们经常能看见以下这种代码:
/* excerpted from mp-sample.c */

apr_status_t rv;
apr_pool_t *mp;
rv = apr_pool_create(&mp, NULL);
apr_为前缀表示是LIBAPR的代码,_t表示是一种抽象类型,多数都是结构体。

apr_pool_t is opaque type. It means the type's structure is not public. By OO(Object Oriented) terminology, all member variables are private. You can't touch them directly. Furthermore, you can't see them in public header files. All you can do for the type is to call APIs such as apr_foo_bar() functions. Most importantly, you can't allocate their instance memories directly. All you can do is to call construct APIs. Only libapr knows how to construct and destruct the objects.
apr_pool_t是一个分装的类,这意味着类型的结构体不是公开的,根据OO(面向对象)的思维,所有成员变量都是私有的。我们不能直接操作他们,此外,我们也没必要去关心公共头文件。例如我们会用到名字像apr_foo_bar()这样的函数,要注意的是,我们并不需要关心怎么去给他们分配内存,当我们需要调用这些API的时候,libapr知道怎么去构造和销毁他们。

As you see, apr_pool_create()'s return type is apr_status_t. apr_status_t is either status code or error code. apr_status_t is a commonly used as return types of most APIs. Accordingly, we can get results from functions by arguments. Such arguments are called result-argument. There are many result-arguments in the libapr world.
正如你所见,apr_pool_create()返回类型是 apr_status_t, apr_status_t是一种状态码和错误码。 apr_status_t是最常用的返回类型。相应的,我们能通过各种参数调用函数来得到各种类型的结果。当然,libapr也使用了相当多的返回参数。

In general, if you see apr_foo_t type, you will see apr_foo_bar() functions, which are related to apr_foo_t type. The following code is a typical pseudo code.

/* pseudo code of libapr. error checks omitted */
apr_status_t rv;
apr_foo_t *foo;
rv = apr_foo_create(&foo, args...);/* create a @foo object by @args */
rv = apr_foo_do_something(foo, args...); /* do something with @foo */
apr_foo_destroy(foo);

一般情况下,如果看见apr_foo_t类型,一般会有apr_foo_bar()方法,他使用到apr_foo_t类型,如这种很典型的代码。

1. Tutorial Availability

Please look for updates on http://dev.ariel-networks.com/apr/.

转载出自

http://dev.ariel-networks.com/apr/


该系列均是出自这里,后面的内容不再特殊说明

2008年11月25日星期二

我们织,我们织

忧郁的眼里没有眼泪,
他们坐在织机旁,咬牙切齿:
“德意志,我们在织你的尸布,
我们织进去三重诅咒——
我们织,我们织!
“一重诅咒给那个上帝,
饥寒交迫时我们向他求祈;
我们希望和期待都是徒然,
他对我们只是愚弄和欺骗——
我们织,我们织!

“一重诅咒给阔人们的国王,
我们的苦难不能感动他的心肠,
他榨取我们最后的一个钱币,
还把我们像狗一样枪毙——
我们织,我们织!

“一重诅咒给虚假的祖国,
这里只繁荣着耻辱和罪恶,
这里花朵未开就遭到摧折,
腐尸和粪土养着蛆虫生活——
我们织,我们织!

“梭子在飞,织机在响,
我们织布,日夜匆忙——
老德意志,我们在织你的尸布,
我们织进去三重诅咒,
我们织,我们织!”



——海涅

2008年11月24日星期一

空姐

1、(登机中,空姐MM在机门口迎客,上来一位帅哥……)

  空姐MM:“欢迎您登机,请问您是什么座?”

  帅哥:“我是天蝎座,你呢!”

  空姐(一脸害羞状):“真的嘛,好巧噢,我也是天蝎座耶……”

  后面排队的乘客晕倒。

  2、(登机完毕,广播响起……)

  空姐:“女士们,先生们,欢迎乘坐本次航班,请您坐在跑道上,系好安全带,我们

  的飞机马上就要起飞了……”

  乘客暴寒……

  3、(飞机处于起飞状态中,轰鸣声甚大,空姐A与空姐B坐在头等仓闲聊……)

  空姐A:“看,那个旅客的鼻毛露出来了,呵呵~”

  空姐B:“ 听不见,你说什么?”

  空姐A只好又大声重复了一遍,结果空姐B依然摇头示意听不见。

  这时,那名旅客走了过来,凑到空姐B耳边说:“小姐,她说我的鼻毛露出来了!”

  -_-!!

  4、(飞机终于“爬”上高空,进入平稳飞行状态,空姐开始送饮料……)

  “叮咚~”

  一名男乘客按响了呼唤铃。

  空姐:“先生,请问有什么需要帮助吗?”

  男乘客默然。(可能第一次坐飞机,他有点紧张。)

  空姐解释:“这是呼唤铃,如果有什么需要再按它,我们会及时帮助您!”

  乘客男点点头。

  可还没等空姐MM回到坐位,呼唤铃又响了。空姐MM回头一看,只见乘客男站起来,嘴

  对着呼唤铃大声喊到:“可乐~加冰~”

  空姐:……

  5、(空姐继送饮料中……)

  “太太,您好!请问要喝点什么吗?”

  中年女乘客不好意思地说:“不喝,不喝。”

  于是空姐小声地说:“免费的哦……”

  女乘客:“啊?免费的啊!我要一杯橙汁,一杯可乐,一杯咖啡,还要……”

  说完,这名女乘客想想,又从包里拿出一个瓶子说:“再给我灌点豆浆在里面!我要把

  飞机票喝回来。”

  空姐晕眩……

  6、(空姐打起精神继送饮料中……)

  空姐:“先生您是喝橙汁还是喝苹果汁?”

  旅客:“你们这儿的橙汁有苹果味儿的吗?”

  空姐继续晕眩中……

  7、(空姐扶墙送饮料中……)

  空姐:“您好,请问有什么可以帮您的吗?

  旅客:“能要一杯水吗?”

  空姐:“当然可以,矿泉水吗?”

  旅客:“有果汁吗?”

  空姐:“有,橙汁和桃汁请问需要哪一种?”

  旅客:“有可乐吗?”

  空姐:“有,需要加冰吗?”

  旅客:“那给我一咖啡吧!”

  空姐:@%¥@^&×……

  8、(空姐MM手拿两 咖啡回?客舱……)

  这时,一位旅客指着窗外问空姐:“小姐,这是什么湖啊?”

  空姐MM回答:“咖啡壶。”

  旅客晕眩中……

  9、(叮咚,呼唤铃又响了……)

  旅客:“小姐,有指甲剪吗?”

  空姐:“您当我是小叮当啊……”

  10、(机舱集体无语中,飞机平稳地飞行着,这时,广播里传来了机长愉快的声音……)

  “女士们,先生们,我是你们的机长,欢迎大家乘做本次航班,我想告诉大家的是…

  …啊!天哪!!”

  机长话说了一半,突然发出了一声KB的惊叫,之后,广播里就再没有声音了。这时

  ,所有的乘客都吓话坏了,连空姐也害怕的不知所措,机舱内鸦雀无声……

  过了好一会,广播终于传来了机长的声音:

  “女士们、先生们,真对不起,让大家受惊了。发生了一点小小的意外,刚才乘务员

  给我到咖啡的时候,不小心把咖啡撒在了我的衬衣上,不信你们来看,都湿透了!”

  这时,机舱里响起一个乘客怒气冲天的抱怨声:“衬衫湿了算什么,你来看看我的裤

  裆!”

  机长晕眩中……

  11、(不知不觉,供餐时间又到了,空姐MM开始送食品……)

  空姐:“先生,我们有鸡肉米饭和鱼肉米饭,请问您吃哪种?”

  旅客:“排骨!”

  空姐:“先生,我们有鸡肉米饭、鱼肉米饭,请问您选哪种?”

  旅客:“排骨!”

  空姐(沉默片刻后):“我们有鸡排骨和鱼排骨,您吃哪种?”

  12、(空姐继续送饭中……)

  空姐:“鱼肉米饭和猪肉米饭请问要哪种?”

  旅客:“我们两个要猪,他要鱼!”

  13、(空姐继续晕眩送饭中……)

  空姐:“请问牛和鱼您喜欢哪种?”

  乘客:“好的,我要‘牛和’。”

  空姐:“是牛,和鱼。”

  乘客:“哦!那我要‘和鱼’。”

  14、(用餐完毕,空姐开始收餐盘……)

  一个旅客指着吃得干干净净的餐盘(连根菜叶都没剩下)抱怨道:“小姐,你们的餐

  食太差了,简直就是狗食!”

  空姐无语中……

  15、(大多数乘客都递上餐盘便于乘务员收取,而一名靠窗的乘客无动于衷,空姐MM伸手

  够不着,于是……)

  空姐:“先生,麻烦您把餐盘递一下好吗?”

  那名乘客傲慢地回答:“你是服务员,还是我是服务员?”

  空姐很礼貌地回答:“是的,先生!我是服务员,但我不是长臂猿!”

  16、(飞机飞临北京上空,准备降落中……)

  飞机落地前,空姐要做好签封工作,可是刚签封完就有一名旅客向空姐要可乐。

  空姐:“对不起,我们都‘封’了”。

  旅客怒答:“至于嘛!我就要个可乐,你们就疯啦?”

  空姐:……

  17、(飞机还在滑行中,旅客就已经都站起来拿行李了,为了安全,空姐又拿起了广播…

  …)

  原本,空姐MM应该说:“女士们,先生们,我们的飞机还在滑行,请您坐好,并关闭

  头顶上方的行李架。”结果,她一着急广播成了:“女士们,先生们,我们的飞机滑得还

  行……”

  这时候,“叮咚~”内话机又响了,里面传来机长的声音:“谁夸我呢?”

  空姐崩溃中……

  18、(飞机终于停下了,空姐MM心里老想着赶班车去东直门肯德基餐厅和男友约会,于是

  广播又传来如下温馨提示……)

  “女士们,先生们,我们的飞机已经抵达首都北京东直门肯德基机场……再见~”

  旅客疯了……

对android布局的看法

Android的布局。
之前对于XML的布局方法一直看着不爽,感觉很乱的样子,但时间长了我渐渐发现,这种程序代码与界面布局完全分开的方法非常顺手,该布局的地方都到main.xml里去写,甚至界面中显示的字符串都可以集中到string.xml文件中,而主程序的".java"文件中则完全用于编写代码,思路非常清晰。

首先按照程序的目录结构大致分析:
res/layout/ 这个目录存放的就是布局用的xml文件,一般默认为main.xml
res/values/ 这个目录存放的是一堆常量的xml文件
res/drawable/ 存放的是一些图片什么的,当然图标也在这里


下面主要对layout下的xml文件做个介绍,顺便也把布局的方法总结一下:
·文件的开头

这是在说明xml版本及字符编码

·紧接着到了关键的部分:


其中开头的"LinearLayout"是布局的方式,可以有很多种,最常用的应该就是Linear了,其他的布局方法等下在后面总结。
接着android:layout_width(height)="wrap_content"是在设置这部分布局的宽高,也可以是绝对值,当然设置为绝对值时要标上单位。

·在就之间可以添加控件了,比如要添加一个名字为btn的Button控件,并且Button上显示的文字是"Test!",可以这样写:

2008年11月23日星期日

保守估计要活过113岁,养老保险才保本!

现在的政策是 养老保险 个人交工资8% 单位交22%
 就是说 你的工资收入的30%用来交你的养老保险
 等你退休的时候是65岁,如果一般工作年龄是25岁,就是说你要工作40年。(别说只交15年,如果不交到65就断的话,你那22%养老保险就都打水漂了,只能拿你交的8%)
 那么你这40年的工资收入30%用来交养老保险。
  
 然后就是退休。
 关于退休工资
 已经有人计算过
 里面分析和计算很详细
 每个月你拿到的退休金“25年后的养老金相当于目前998元,普遍高于各地最低工资啊。这只相当于目前4000月收入的25%不到。”
 高高超过4000工资的,将远远低于你工资的25%
 咱们就按照给的高算,就是给你工资的25%。
  
 那么公式就是
  
 工资*40年*30%=工资*X年*25%
 X=48年
 48+退休年龄65=113岁
  
 就是说
 除非你活过113岁,否则你都领不完自己上交的那部分养老保险。
 大家要努力活过113岁,否则就是赔本啦!
 锻炼身体是正经!
 收入超过4千的,请活的更长些!

KD言论精选

1.


"Give me your tired, your poor,
Your huddled masses yearning to breathe free,
The wretched refuse of your teeming shore.
Send these, the homeless, tempest-tossed to me.
I lift my lamp beside the golden door!"

“把你们的那些人给我吧,
那些穷苦的人,
那些疲惫的人,
那些蜷缩在一起渴望自由呼吸的人,
那些被你们富饶的彼岸抛弃的,
无家可归,颠簸流离的人,
把他们交给我,
我在这金门之侧,
举灯相迎”




2

其实,在一个未经启蒙的社会里,先知先觉的人总是少数,多数人还是愚夫愚妇,勒旁笔下的乌合之众。这点说出来很残酷,但这是现实。
问题是,这帮乌合之众由谁来掌握,由谁引导,由谁控制,或者说,被谁用来当枪使,当炮灰。谁能迎合这群乌合之众,谁就能掌握天翻地覆的力量。以前毛大爷之所以成功,就在于毛大爷会迎合乌合之众,抓住他们想共别人的产,分别人的钱,一步登天的幻想,取得了成功。乌合之众们可悲之处在于,他们为别人肝脑涂地,最后结局是兔死狗烹,过了很多年他们才会发现他们被愚弄了,被欺骗了,于是就有新的骗子出现,继续忽悠着他们肝脑涂地。。。




3


当发生变故时,有能力采取行动的人,就有责任采取行动。


4

至誠之道,可以前知。國家將興,必有幀祥;國家將亡,必有妖孽。見乎起蓍龜,動乎四體。禍福將至:善,必先知之;不善,必先知之。故至誠如神。

5

何止是80年,其实从1952年赫尔辛基奥运会参加一次之后,中国以政治理由抵制了1956墨尔本、1960罗马、1964东京、1968墨西哥城、1972慕尼黑、1976蒙特利尔、1980莫斯科共7届奥运会


6

1899年冬 山東肥城發生英國傳教士卜克斯被殺案件,列強抗議後,巡撫毓賢被免職,新任巡撫袁世凱在山東鎮壓義和團。毓賢向慈禧提出招安義和團的建議
1900年1月 慈禧發布袒護義和團的詔令,除了向團民發放餉銀外,還邀請義和團首領到天津開壇聚眾。於是山東拳民湧入直隸,燒教堂、殺洋人,並到處毀壞鐵路及電線桿等洋物
1900年6月10日 義和團拳民開始大舉入京,在北京放火燒掉教堂和一切與外國有關的事物,集體屠殺教民
駐天津的各國領事組織二千人的聯軍,乘火車增援北京十一國公使館。因為鐵路被破壞,受阻於天津城外的楊村、廊坊一帶,與清兵及義和團展開戰鬥,結果失敗
1900年6月13日 義和團進入內城,燒毀十一所教堂,有三千多名天主教徒逃入天主教北堂,二千多名基督教徒逃入東交民巷的使館區
1900年6月16日 慈禧召開御前會議後,曾發出勒令解散拳民的上諭
1900年6月17日 慈禧收到洋人出兵及要求她歸政於光緒的情報,態度轉變
1900年6月20日 德國駐華公使克林德代表各國至總理衙門要求保護,途中被清兵伏擊殺害
1900年6月21日 清政府以光緒的名義,向英、美、法、德、義、日、俄、西、比、荷、奧十一國同時宣戰,義和團及朝廷軍隊圍攻各國在北京的使館
1900年7月14日 聯軍占領天津
1900年8月16日 聯軍占領北京城,慈禧與光緒逃到西安,命令官兵剿滅義和團
1900年9月7日 清廷發布上諭剷除義和團,同時派慶親王奕劻及李鴻章為特使,與各國和談
1901年9月7日 簽署「辛丑條約」

7

当道借机转移愤怒,白痴积极配合鼓噪。
物价民生股市腐败,哪有爱国装比实在。

8


我们的教育就是年青时,你要忽略你的良心。先和淫荡订立契约,再和邪恶签订盟约,与谎言达成共识,如果不够,再与暴戾恣睢建成联盟。这里没有信仰,无神论的国度里充斥着魑魅魍魉的身影,妖魔鬼怪的踪迹,这里是牛鬼蛇神的乐园,衣冠禽兽的天地,欺骗无所不在,谎言无所不能,煽动仇恨吧,制造斗争吧,人类这些小猪崽很乐意自相残杀。双肩狭窄的人们无一例外地干出许多蠢事,用各种手段愚弄同类,腐蚀心灵。他们把自己的行为动机称作荣誉,为了虚妄的真理,互相撕咬成千万个碎片,速度之快,难以置信。失败者倒下去的时候,从不忏悔,只后悔自己没有得上狂犬病与疯牛病。极权主义的本质:无所不在的谎言,深入人心的恐怖与令人发指的暴力是三位一体,这是我们新的宗教,要把天堂建立在大地。它叫嚣着上帝是骗子,佛陀是虚无,几千年的传统都是迷信,打倒吧,这些顽固不化的奴才,推翻吧,这些残渣余孽的死灰复烬,烧毁了琴棋书画,焚毁了鸡犬桑麻,烟波钓徒被打成走资派,梅妻鹤子是封建复辟,它用一种加减乘除的价值观来清除文化,用开平方来消除人口,用方程式来证明荒谬,并用几何学的结构来稳定自己,如果有人自认掌握着真理,你会发现与他对话是一件难事。它会拿枪指着你的脑袋,再温柔的叫你自愿选择,给你推荐这是科学的方向,还赠送制度的优越,枪杆子里打下了政权,历史的弹道已被扭曲,这个怪胎,虽然它从头到脚都滴着血,却自诩着拥有黄金的比例,妖艳的未来!愚昧的民众快紧跪拜吧,这些只关心交配的可怜虫,终生用难以置信的咒骂来反对一切,却永远不会伸出自己的拳头。不要糟蹋你那珍贵的奴性,这可是生活的资本,通行的象征。先毫不吝啬的表示你的感恩戴德,再痛哭流涕的表示感激涕零,不然小心被放在祭祀的供台,接受群氓的耻笑与朝拜。聆听着,它的号角已经吹响:起来吧,不愿做奴隶的人们,需要你们的血肉去筑成新的长城。





9

又是愤青伤痛时,
混沌年里望京师。
团旗百载犹飞猎,
碧血曾流谁继之?!

10

“谁都不是一座岛屿,自成一体;每个人都是那广袤大陆的一部分。如果海浪冲刷掉一个土块,欧洲就少了一点;如果一个海角,如果你朋友或你自己的庄园被冲掉,也是如此。任何人的死亡都使我受到损失,因为我包孕在人类之中。所以别去打听丧钟为谁而鸣,它为你敲响。”

韩寒高论

1:国际原油最高的价格到过接近150美元一桶,但是现在已经50美元了,按道理说应该要跌到三块多钱一升,为什么国内的油价还不降?

回答:估计是150的时候囤太多油了,结果没涨到250。
但是,我们可以理解为我们都在献爱心,这样会舒服很多,油价只要坚挺一天,政府就能多赚几十亿,油价坚挺几个月,汶川就建设好了。所以,没有捐款的朋友也不用内疚,你以为你能不捐款麽,在不知不觉中,你早就捐了。所以,大家就全当自己升华了吧。

2:为什么中石油和中石化都说他们旗下的很多炼油厂亏损了?
回答:这就好比房地产商卖楼每年赚十亿,但是提供给小区里的免费班车每年要亏损十万,我们指责房地产商暴利,房地产商解释说,我们哪里暴利了,你看,连我们楼盘的班车每年都是亏损的。

3:没有车是不是就和燃油税没有关系?
回答:不是,自己想。


4:为什么政府老是拿中产阶级开刀?
回答:因为政府不能拿穷人开到,穷人一穷二白,穷凶极恶,没有油水而且危险,政府也不能拿有钱有势的开刀,因为他们一想,咦,这不就是我们自己麽,所以只剩下工薪阶层和中产阶级了,他们钱不多,但基数大,而且有拥有一定的物质,害怕失去,所以操作起来很安全。

5:据说要费改税,以前的养路费什么的都变成燃油税,你觉得我们是合算还是不合算。

回答:从长远来看,越重的苛捐杂税,越沉重的人民负担,越不合理的政策,越荒谬的管理,对于这回答:我们的政府虽然对外比较颓势,但在对老百姓做生意方面很有能力的,所以你要看看,你的身份是什么,如果你是个平民,那你基本上是不可能合算的。这个的改革并不能称之为费改税,只能称为费加税。你的养路费只能少交1200元,其他的都是不减免的,包括小小的车船税或者高速过路费甚至国道费等,虽然有关部门宣称,将取消公路养路费、航道养护费、公路运输管理费、公路客货运附加费、水路运输管理费、水运客货运附加费等六项收费,但说实话,我开了十年车,基本上后面五项没有见到过,如果你不经常在水里开车的话,我想后两项你应该也没见到过,所以,你肯定会亏的。
比如上海,我们通常理解每个月交250,一年3000是养路费,但其实不是这样的,每个月只有100是养路费,还有150元是公路建设贷款费,所以,你以后还要交1800,如果你一天开几公里,一年只开两三千公里车,我相信你会赚到政府大概一位数到两位数左右的便宜的。

6: 有民意调查说有74%的人支持燃油税改革。
回答:这就是现在的政府和以前的政府不同的地方,以前政府做事,从来不问民意,现在政府做事,自己制造民意。


6:燃油税到底是好事还是坏事?

回答:从长远来看,越重的苛捐杂税,越沉重的人民负担,越不合理的政策,越荒谬的管理,对于这个国家来说,其实都是好事。

苏联社会主义幽默精选

1.亚历山大、凯撤、拿破仑做为贵宾,参加红场阅兵。
——我要是有苏联的坦克,我将是战无不胜的!亚历山大说。
——我要是有苏联的飞机,我将征服全世界!凯撤说。
——我要是有真理报,世界现在也不会知道滑铁卢!拿破仑说。
2.在苏共二十三次代表大会上,勃列日涅夫作报告,他问:“我们这里有没有敌人?”一个人回答:“有一个,他坐在第四排第十八号位子上。”勃问:“为什么他是敌人?”回答:“列宁说过敌人是不会打瞌睡的,我发现全场只有他一个人没有打瞌睡!”

3.在集体农庄党的会议上将研究两个问题:建造木棚和建设共产主义。在没有木板的情况下,直接研究第二个问题。
4.“苏联和英国的童话传说有什么不同?”
“英国童话的开头通常是:‘很久很久以前。。。。’而我们的则是;‘不远了,不远了。。。。’
5.斯大林做报告说:……共产主义已经出现在苏联的地平线上了……
老工人不知道什么是地平线,回家后问儿子,儿子说:地平线就是能看到却永远走不到的一条线。
6.“同志,你对这个问题有什么意见吗?”党支书问道。
“对,我是有意见,但我不同意我的意见!”
7.话说勃烈日涅夫同志当上苏共中央总书记之后,将在乡下的老母亲接到了莫斯科。老太太来了以后,勃列日涅夫得意洋洋地向老妈展示了一番自己的豪华别墅、高级汽车、名贵家具等等,展示完了后,勃列日涅夫问老太太这一切如何?老太太说:“儿子啊,这一切都很好,但是,共产党来了你怎么办?
8.两个中学同学相遇然后寒暄
您现在在哪工作
中学老师.您呢?
克格勃
啊,您在克格勃具体干什么?
我们负责揪出那些对国家不满的家伙
您的意思是….还有人比较满意?
这些人不归我们管.管他们的是纪委
9.工人说:我们已经是共产主义了,有人问:为什么?工人说:我们实现了各尽所能,各取所需的分配原则.
什么????那人又问, 工人说:你没见我们的领导各取所需,工人各尽所能!
10.“在苏联是否可以存在两党制?”
“不,不可能,因为我们养不起。”
11.——什么在苏联是最常见的?
——暂时的困难。
12.——苏联制度的优越性在哪里?
——成功地克服了在其它社会制度里不会存在的困难。
13.苏联时期莫斯科卢比扬卡(克格勃总部)大楼外。
一个愁眉苦脸的男子一边走路一边自言自语:肥皂没有,电池没有,袜子也没有。。。。。。这时旁边走过来一个看起来象是便衣的人小声对他说:公民同志,您要是再这样诋毁我们伟大的社会住义国家,我就要拿手枪把敲你的脑袋了!
那个男子看看便衣警察,继续自言自语:看看,连子弹也没有。。。。。。
14.在调查表上有这样一个问题:在执行总路线时你动摇过吗?
拉宾诺维奇回答道:“我和总路线一起动摇。”
15.
——拉宾诺维奇,你经常读报纸吗?
——当然,要不我怎么知道我们过着幸福的生活?
16.——共产主义还会有货币吗?
——南斯拉夫的修正主义者说会有,中国的教条主义者说没有,我们是辩证地看待这个问题:有,但不是所有人都有。
17.伊万看电视,是列昂尼德同志在演讲。伊万觉得无聊,换了一个,还是列昂尼德同志在演讲,又换一个,还是他。伊万
一连拨了几十个台,最后累了,准备关电视。这时候电视画面变成了KGB的尤里同志,怒气冲冲地叫:“你再敢换?再敢换?再换判你10年大牢!”
18.一个美国人和一个苏联人谈话.
美国人:我敢在白宫外面大喊,里根下台,你敢吗?
苏联人:有什么不敢的?
说完,苏联人走到克里姆林宫外大喊:里根下台!
19.
拉宾诺维奇到资本主义国家出差,在那里,他给单位拍了一个电报:“我选择了自由。”这事发生后,单位马上召集了党代会谴责拉宾诺维奇,并要做出组织结论。在会议中间,拉宾诺维奇突然走进了会场!全场哑然。
拉宾诺维奇说道:“我非常感兴趣,你们是怎样理解自由的。”
20.——苏联人第六感的什么方面最发达?
——高度的满足感。
21.——为什么我们执行总路线那么慢?
——因为每次党代会转的弯太大。
22.二战结束后一个波兰农村老太看到街上贴着的照片就说像自己的外甥
别人训斥她:瞎说什么,这是斯大林同志
老太:他是干什么的?
答:他赶跑了纳粹
老太急切地问:他能不能把俄国人也赶跑啊
23.一老者人行道闲溜,不慎落入道旁河中。随高呼救命!
两警察闻之,视若不见,仍边走边谈笑如旧。
老者情急生智,随又高呼“打倒勃列日涅夫”!两警察闻之大惊,随急速跳入河中,将老者拖上岸来铐之。
24.在苏联的一次大会上,主持人突然说:下面请认为社会主义好的同志坐到会场的左边,认为资本主义好的同志坐到会场右边。大部分人坐到了左边,少数人坐到右边,只有一个人还坐在中间不动。
主持人:那位同志,你到底认为社会主义好还是资本主义好?
回答:我认为社会主义好,但是我的生活像是资本主义。
主持人慌忙说:那请您赶快坐到主席台上来。
25.——有40颗牙4条腿的是什么东西?
——鳄鱼。
——有4颗牙40条腿的是什么东西?
——政治局
26.“假设你在酒吧里,而一个陌生人坐到你的身边并开始唉声叹气,你该怎么做?”
“立即去阻止这种反苏宣传”
27.“共产主义实现时警察还存在吗?”
“当然不。那时候所有公民都已经学会自己逮捕自己”
28.勃列日涅夫访问印度时,大批印度人到机场欢迎勃列日涅夫。勃列日涅夫便问当时的印度总理英甘地,你是用什么办法让这么多人来欢迎我的?英甘地回答:凡是来欢迎你的人,都能够得到5个卢比(印度货币)的奖励。
后来英甘地到苏联访问时,成千上万的苏联人从机场到莫斯科市内的道路上夹道欢迎。英甘地问勃列日涅夫:你是用什么办法让这么多人来欢迎我的?勃列日涅夫回答:凡是不来欢迎你的莫斯科人,每人罚款5卢布(苏联的货币)
27.一个苏联人家中总是被偷,于是很郁闷的问邻居:“什么时候我们家的东西才能不被偷?”
邻居:“等到了共产主义社会就不被偷了。”
“为什么?”
“因为在社会主义阶段就已经被偷光了。
28.亚当和夏娃是哪国人?
他们没衣服穿,分享一只苹果,还觉得自己活在天堂里,当然是苏联人。
29.你为什么坐牢?
我反对伊万诺维奇。
你又为什么坐牢?
我支持伊万诺维奇。
你呢?
我就是伊万诺维奇。
30.苏联特工对美国特工夸口道:“我们知道你们国家所有核导弹发射井的位置。”美国特工说:“那又有什么,我们知道你们未来20年全体政治局委员名单。”
31.共产主义是科学还是艺术?
当然是艺术,如果是科学就应该先用小白鼠做实验。
32.
亞美尼亞電台播放著機智問答說:
「雞和蛋哪一個先有?」
解答者在一旁暗暗地答道:「從前兩者都有。」
33.在苏联阅兵式上,步兵,炮兵,装甲兵,战略导弹部队依次出场,但在游行最后却走出几个西装革履的人,一个旁边观看的人问:“这几个人是谁?”另一个人回答:“计划经济委员会的。”
34.一对夫妇生了一个孩子,如果长得像父母,那就是按反动的基因学说生出来的,如果长得像他们的邻居,那就是按照李森科的革命的环境决定学说生出来的。
35.戈尔巴乔夫颁布限酒令后,想要买到酒只能在指定销售处排长队来买。
一个莫斯科人排队排烦了,就嚷道:“我要到克林姆林宫把戈尔巴乔夫干掉。”然后转身离去。
一会儿他有回来了,旁边人问他:“已经干掉了吗?”
他说:“干什么干啊!那里的队比这里还长。”
36.一天戈尔巴乔夫到一个农场视察,看到有几头猪,就到猪旁边拍了一张照片。
随行人员在照片上写上:戈尔巴乔夫和猪在一起,但又感到不妥。于是改成:猪和戈尔巴乔夫在一起,可还是感觉不对。最后把照片上的字改成:“左起第三位是戈尔巴乔夫”。
37.莫斯科地铁中。
“公民您好。”
“您好。”
“请问您是KGB(克格勃)的同志吗?”
“不是。”
“您以前是吗?”
“不是。”
“您的直系亲属中有在KGB系统工作的吗?”
“没有。”
“那么请你把脚挪开,你踩着我了。”
38.“可能在美国建成共产主义吗?”
“可能的。但是那样的话我们到哪里买粮食?”
39.“下次选举的结果会是怎样的?”
“没有人知道。有人从中央委员会那里偷走了下次选举的确切结果
40.“为什么有人说匈牙利人喜欢苏联人而讨厌美国人?”
“因为苏联人帮助匈牙利人摆脱了一次专制,而美国人没有解决另外一个”
41.拉宾诺维奇在克里姆林宫里工作,他待在塔楼前望着远方,以便在共产主义到来时及时发出信号。
美国人想要引诱他为他们工作,让它在经济危机到来时发出警告。拉宾诺维奇回答说:
——不,我需要一个固定的工作。
42.美国百万富翁买下苏联国家百货商场,并宜布要免费分发商品。
很快百货商店和通向这里的道路就开始堵塞,并有许多用挑肥拥挤而死伤的人。人们问百万富翁问:
——你为什么要这样做?
——我非常感兴趣,当你们实行按需分配时会是什么样子。
43.苏联领导人坐火车旅行。铁轨到了尽头,火车停下。
列宁号召:“立即发动无产者搞星期六义务劳动,修铁路,直通共产主义!”
斯大林抽着烟斗,严肃地下令:“给我调100万劳改犯来,修不通铁路,统统枪毙。”
赫鲁晓夫敲着皮鞋喊:“把后面的铁路接到前面去,火车继续开!”
勃列日涅夫挥舞着双手说:“坐在座位上自己摇动身体,做出列车还在前进的样子。”
最后,戈尔巴乔夫沉思道:“把火车拆了,到有铁轨的地方再拼装起来。”
于是苏联解体了。
44.苏联邮政发行历届领导人纪念邮票,发行没1个月,邮政宣布紧急停止使用该邮票。
理由是:寄信人不知道往哪面吐唾沫。
45.“有可能在瑞士建立社会主义吗?”
“那是可能的。但是,为什么?瑞士哪得罪你了?”
46.勃列日涅夫即将访问波兰,波兰当局命令一位著名画家创作一幅名为《勃列日涅夫在波兰》的大型油画作为献礼。很不情愿的画家在威逼下接受了工作。画完成后,波兰一高官前来验收,结果让他大吃一惊:画面上是一男一女在豪华的大床上极尽缠绵,窗外的风景是克里姆林宫。
“这是什么?这女的是谁?!”高官愤怒的问。“勃列日涅夫的夫人。”画家答道。“男的呢?!”“勃列日涅夫的秘书。”
“可勃列日涅夫同志在哪里?”“勃列日涅夫在波兰。”画家答道。
47.——为什么共产党员不能接受圣经?
——根据圣经,先有混乱,然后根据上帝的计划引入秩序。共产主义的经验告诉我们,先有秩序,然后混乱就会到来
48.——是什么原因决定了我们能在西方国家买那么多小麦?
——要知道资本主义的最大缺点就是生产过剩。

2008年11月14日星期五

房地产的实质

猪通过勤劳致富有5元钱存在老鼠开的钱庄里。猪打算拿这5元钱建一个小窝,大盖要花2元卖地,花3元搭窝。王八是搞工程的,他想在猪身上挣更多的钱,于是找来当投资顾问的狐狸想办法,狐狸说:这好办。于是找来管地盘的狼,开钱庄的老鼠一起来商议,结果王八从老鼠那里借来200元,用100元卖了狼的地,花了3元把猪窝盖好,花了50元给了狐狸咨询服务费,猪没有地,只好求王八把窝卖给它,王八要价500元,老猪说只有5元买不起,这时候狐狸说服猪去向老鼠借钱,老鼠答应借500给猪,前提是要他连本带利还600元,可以分10年还清,并且产权证拿来抵押。结果成交。猪到最后花了600元买来了猪窝,比他原来的计划高了11倍,猪努力了十年去挣钱还贷。
在这场交易里面,狼,老鼠,狐狸还有王八都挣了钱。以后他们就如法炮制。更多的猪去贷款买房子了,这时候,当商人的驴看到有机可乘,到老鼠那里贷了好多好多的款,把王八盖的房子都买下来,然后以更高的价格卖给了猪。猪的还贷期就越来越长,吃的越来越差,小猪崽子也不敢生了。由于猪的数目越来越少,狼觉得这样下去自己没有猪肉吃了,非饿死不可,于是开始调控,不让老鼠再借钱了。但是王八还没有停止盖房,把自己挣的钱和贷的钱全投入生产了。驴手上的猪窝囤积的很多,卖不动了被套牢了。结果,老鼠,王八,还有驴都挣了好多的猪窝。钱到最后集中到狼手上。
如今,谁都等着狼把钱拿出来救命。聪明的你,如果你是狼,你会拿钱救哪个?

2008年11月4日星期二

06年各省贪官外逃一览表

06年各省贪官外逃一览表
  地  区    人 数  地厅级或以上官员  携带资金
  北京市     225人     58人      25亿
  天津市     122人     19人      14亿
  河北省     340人     26人      31亿
  山西省     236人     41人      17亿
  辽宁省     367人     52人      117亿
  吉林省     117人     14人      26亿
  黑龙江     230人     42人      85亿
  上海市     206人     66人      250亿
  江苏省     313人     40人      140亿
  浙江省     142人     48人      86亿
  安徽省     97人     19人      30亿
  福建省     480人     102人      365亿
  江西省     125人     21人      26亿
  山东省     352人     54人      150亿
  河南省     124人     27人      50亿
  湖北省     365人     33人      60亿
  湖南省     300人     20人      70亿
  广东省    1640人     170人     1550亿
  广 西     217人     25人      55亿
  海南省     140人     22人      27亿
  重庆市     175人     31人      18亿
  四川省     144人     40人      50亿
  云南省     238人     48人      60亿
  陕西省     146人     16人      28亿
  新 疆     260人     24人      30亿

2008年10月27日星期一

Communix操作系统

Communix操作系统最早是两个德国人Marx和Engles开发的(称为Communix基础版,或Communix 1.0和2.0),遵守GPL,它的早期支持者曾经先后组织过两个国际讨论区。
  
  当时少数先进的国家都使用微软的Windows,其他的绝大多数国家要么用DOS,要么作为受Windows主机控制的远程终端,相比之下, Communix支持的机子很少,但移植Communix的努力一直就没停止过。最早是以法国为主的一些人在巴黎、里昂等地移植过,但失败了。此后 Communix分成两条路发展,一条是删除一些不兼容的代码,把Communix移植到Windows运行;反对微软的另一批人在俄国著名程序员 Lenin的领导下,在俄国移植Communix获得成功(第一次发行时称为俄版Communix beta或Communix 3.0beta),一度做到15个主节点、20多个子节点的大规模并行Cluster,并影响到亚洲、东欧、拉美等一些地方。
  
  一个小插曲:在Lenin之后,俄版Communix项目的两个CEO对Communix 3.0正式版出现了意见分歧。占多数的Stalin重视系统安全和运行效率,认为需要在已有的基础上继续优化俄版Communix代码;占少数的 Trotsky认为要把微软干掉,因此必须支持更多的硬件,提供更多的功能。这次分歧以Trotsky失败告终。Trotsky和他的团队后来开发了自己的Communix(称为托版Communix或Communix 4.0),但除了在斯里兰卡短暂地装过一段时间以外,都是小用户。这些用户又加入了很多自己的东西,且互不统一,Trotsky死后没人整理,因此托版 Communix非常乱。而由Stalin的团队打造的Communix 3.0正式版因为过于注重系统安全和效率,导致界面不够友好,娱乐功能少,不能及时更新一些新功能。Stalin的继任者由一个极端走向另一个极端,他们片面追求漂亮界面和娱乐功能,甚至干脆向微软购买这些功能,放弃了系统安全和效率,更不对代码作任何优化,导致系统经常当机和被黑客入侵,最后不得不改装 Windows(据说负责洽谈这次改装项目的经理Yeltsin还拿了不少回扣)。
  
  在俄国成功移植Communix的消息也鼓舞着中国的Communix爱好者们,但早期的努力都不成功。一个姓毛的人说,俄版Communix光是汉化还不行,因为我们的硬件太旧了,短期内也不可能更新,所以必须为我们自己的硬件改写一部分底层代码。这种办法最后成功了,成为低配置计算机移植 Communix的精典范例而载入史册。毛还反对俄版Communix晚期的一些修改,认为这是向微软投降。为了及时清理Communix队伍内部的微软代理人,他发动广大用户学Communix和写Communix,打造一个“六亿神州皆Hacker”的毛版Communix。他的主张遭到开发团队的反对,最后无果而终,但影响持续至今。如今,一个精通毛版Communix的程序员往往被看作是危险的黑客,而那些拿了很多认证的Communix程序员都在跟微软学接轨。但是,代码要开源,人民要编程是无法扭转的世界潮流。
  
  今天,国内外仍有不少毛版Communix支持者。曾有人说尼泊尔的毛版Communix是“盗版”,这就连GPL的基本常识都不顾,堕落到微软版权的泥坑里去了。

烧饼的故事

假设一个市场,有两个人在卖烧饼,有且只有两个人,姑且称他们为烧饼甲、烧饼乙。
    
    假设他们的烧饼价格没有物价局监管。
    
    假设他们每个烧饼卖一元钱就可以保本(包括他们的劳动力价值)
    
    假设他们的烧饼数量一样多。
    
    ——经济模型都这样,假设需要很多。
    
    再假设他们生意很不好,一个买烧饼的人都没有。这样他们很无聊地站了半天。
    
    甲说好无聊。
    
    乙说好无聊。
    
    看故事的你们说:好无聊。
    
    这个时候的市场叫做很不活跃!
    
    为了让大家不无聊,甲对乙说:要不我们玩个游戏?乙赞成。
    
    于是,故事开始了。。。。。。
    
    甲花一元钱买乙一个烧饼,乙也花一元钱买甲一个烧饼,现金交付。
    
    甲再花两元钱买乙一个烧饼,乙也花两元钱买甲一个烧饼,现金交付。
    
    甲再花三元钱买乙一个烧饼,乙也花三元钱买甲一个烧饼,现金交付。
    
    。。。。。。
    
    于是在整个市场的人看来(包括看故事的你)烧饼的价格飞涨,不一会儿就涨到了每个烧饼60元。但只要甲和乙手上的烧饼数一样,那么谁都没有赚钱,谁也没
有亏钱,但是他们重估以后的资产“增值”了!甲乙拥有高出过去很多倍的“财富”,他们身价提高了很多,“市值”增加了很多。
    
    这个时候有路人丙,一个小时前路过的时候知道烧饼是一元一个,现在发现是60元一个,他很惊讶。
    
    一个小时以后,路人丙发现烧饼已经是100元一个,他更惊讶了。
    
    又一个小时以后,路人丙发现烧饼已经是120元一个了,他毫不犹豫地买了一个,因为他是个投资兼投机家,他确信烧饼价格还会涨,价格上还有上升空间,并且
有人给出了超过200元的“目标价”(在股票市场,他叫股民,给出目标价的人叫研究员)。
    
    在烧饼甲、烧饼乙“赚钱”的示范效应下,甚至路人丙赚钱的示范效应下,接下来的买烧饼的路人越来越多,参与买卖的人也越来越多,烧饼价格节节攀升,所有
的人都非常高兴,因为很奇怪:所有人都没有亏钱。。。。。。
    
    这个时候,你可以想见,甲和乙谁手上的烧饼少,即谁的资产少,谁就真正的赚钱了。参与购买的人,谁手上没烧饼了,谁就真正赚钱了!而且卖了的人都很后悔
——因为烧饼价格还在飞快地涨。。。。。。
    
    那谁亏了钱呢?
    
    答案是:谁也没有亏钱,因为很多出高价购买烧饼的人手上持有大家公认的优质等值资产——烧饼!而烧饼显然比现金好!现金存银行能有多少一点利息啊?哪比
得上价格飞涨的烧饼啊?甚至大家一致认为市场烧饼供不应求,可不可以买烧饼期货啊?于是出现了认购权证。。。。。。
    
    有人问了:买烧饼永远不会亏钱吗?看样子是的。但这个世界就那么奇怪,突然市场上来了一个叫李子的,李子曰:有亏钱的时候!那哪一天大家会亏钱呢?
    
    假设一:市场上来了个物价部门,他认为烧饼的定价应该是每个一元。(监管)
    
    假设二:市场出现了很多做烧饼的,而且价格就是每个一元。(同样题材)
    
    假设三:市场出现了很多可供玩这种游戏的商品。(发行)
    
    假设四:大家突然发现这不过是个烧饼!(价值发现)
    
    假设五:没有人再愿意玩互相买卖的游戏了!(真相大白)
    
    如果有一天,任何一个假设出现了,那么这一天,有烧饼的人就亏钱了!那谁赚了钱?就是最少占有资产——烧饼的人!

2008年10月11日星期六

斯德哥尔摩综合症

斯德哥尔摩综合症定义
  斯德哥尔摩综合症(Stockholm syndrome),斯德哥尔摩效应,又称斯德哥尔摩症候群或者称为人质情结或人质综合症,是指犯罪的被害者对于犯罪者产生情感,甚至反过来帮助犯罪者的一种情结。这个情感造成被害人对加害人产生好感、依赖心、甚至协助加害人。
  西方心理学家这样解释斯德哥尔摩综合症:
  人质会对劫持者产生一种心理上的依赖感。他们的生死操在劫持者手里,劫持者让他们活下来,他们便不胜感激。他们与劫持者共命运,把劫持者的前途当成自己的前途,把劫持者的安危视为自己的安危。于是,他们采取了“我们反对他们”的态度,把当局当成了敌人。
斯德哥尔摩综合症的条件
  1、人质必须有真正感到绑匪(加害者)威胁到自己的存活。
  2、在遭挟持过程中,人质必须体认出绑匪(加害者)可能略施小惠的举动。
  3、除了绑匪的单一看法之外,人质必须与所有其他观点隔离(通常得不到外界的讯息)。
  4、人质必须相信,要脱逃是不可能的。
斯德哥尔摩综合症的起源
  1973年8月23日,两名有前科的罪犯Olsson与Olofsson,在意图抢劫瑞典首都斯德哥尔摩市内最大的一家银行失败后,挟持了四位银行职员,在警方与歹徒僵持了130个小时之后,因歹徒放弃而结束。然而这起事件发生后几个月,这四名遭受挟持的银行职员,仍然对绑架他们的人显露出怜悯的情感,他们拒绝在法院指控这些绑匪,甚至还为他们筹措法律辩护的资金,他们都表明并不痛恨歹徒,并表达他们对歹徒非但没有伤害他们却对他们照顾的感激,并对警察采取敌对态度。更甚者,人质中一名女职员Christian竟然还爱上劫匪Olsson,并与他在服刑期间订婚。
  这两名抢匪劫持人质达六天之久,在这期间他们威胁受俘者的性命,但有时也表现出仁慈的一面。在出人意表的心理错综转变下,这四名人质抗拒政府最终营救他们的努力。这件事激发了社会科学家,他们想要了解在掳人者与遭挟持者之间的这份感情结合,到底是发生在这起斯德哥尔摩银行抢案的一宗特例,还是这种情感结合代表了一种普遍的心理反应。而后来的研究显示,这起研究学者称为“斯德哥尔摩症候群”的事件,令人惊讶的普遍。研究者发现到这种症候群的例子见诸于各种不同的经验中,从集中营的囚犯、战俘、受虐妇女与乱伦的受害者,都可能发生斯德哥尔摩综合症经验。以人质为例,如果符合下列条件,任何人都有可能遭受到斯德哥尔摩综合症。
  第1,是要你切实感觉到你的生命受到威胁,让你感觉到,至于是不是要发生不一定。然后相信这个施暴的人随时会这么做,是毫不犹豫。
  第2,这个施暴的人一定会给你施以小恩小惠,最关键的条件。如在你各种绝望的情况下给你水喝。
  第3,除了他给所控制的信息和思想,任何其它信息都不让你得到,完全隔离了。
  第4,让你感到无路可逃。
  有了这4个条件下,人们就会产生斯德哥尔摩综合症。
  警方找来心理学家:三个人质为甚么在最后的性命关头都帮匪徒逃命呢?专家深入研究,结论是:人性能承受的恐惧有一条脆弱的底线。当人遇上了一个凶狂的杀手,杀手不讲理,随时要取他的命,人质就会把生命权渐渐付托给这个凶徒。时间拖久了,人质吃一口饭、喝一口水,每一呼吸,他自己都会觉得是恐怖份子对他的宽忍和慈悲。对於绑架自己的暴徒,他的恐惧,会先转化为对他的感激,然后变为一种崇拜,最后人质也下意识地以为凶徒的安全,就是自己的安全。
  这种屈服于暴虐的弱点,就叫“斯德哥尔摩精神症候群”。一九七四年,美国报业大王赫斯的千金被美国的“新人民军”绑架,最后自己也穿上了军装,参加抢劫银行,感谢恐怖份子。对一个长久的施暴者不杀的恩威,觉得是一种慈悲,不止一两个人质,在地球上,还有长久匍伏在暴政之下的一些古老的民族。他们的苦难太长久,他们已经放弃了自由的希望,不要怪他们为什么甘心自我作贱,他们患了“斯德哥尔摩心理症”。
编辑本段斯德哥尔摩综合症之经典案例
  1977年5月19日,27岁的卡罗离开位于奥勒冈州尤金市的家乡,起程去探访一位住在北加利福尼亚州的朋友。北加利福尼亚州距离奥勒冈州大约有644公里的路程,路上她搭了个便车,车上是一家三口,男主人卡门龙,妻子叫珍尼斯。半途中,她突然被勒令举起双手,蒙上眼睛,卡罗被带到了一个屋子的地窖里。
  卡罗清楚记得卡门龙把她身上的衣服脱去,一条鞭子抽打在她的身上。以后每天,卡罗先被毒打一顿,然后吊在门檐上,脚尖仅仅踮到一点点地面。卡罗刚开始还拼命挣扎,卡罗最初的一段时间完全生活在黑暗之中,卡门龙特意用金属做了一个双层头罩和像棺材一样的箱子,她在里面不能吃、喝、听、看。卡门龙是一个虐待狂,他崇拜古代的奴隶社会,长期沉迷于带有暴力倾向的色情文学,他把卡罗当成自己的俘虏,而自己就是奴隶主。从卡罗的身上,他得到了征服感和占有感的满足。
  在这个小镇,卡门龙夫妇看起来是极为平凡和不起眼的邻居,他们和平常人一样,白天去上班、购物,晚上回家睡觉。卡门龙在当地的一家木材加工厂工作,他们的邻居评价这是很爱安静的三口之家。但是从来没有人了解这一家子的背景。在邻居的眼里,卡门龙是一个沉默寡言的年轻人,他不善和人交友,只喜欢默默一个人干活。卡门龙几年前毕业于当地的一所高中,然后在1973年遇上了当时只有15岁的珍尼斯。珍尼斯患有轻度癫痫病,卡门龙就是看上了她对自己百依百顺的优点。卡门龙认为,只要有男人肯要珍尼斯,珍尼斯一定会为这个男人付出任何代价。
  卡门龙疯起来的时候会把卡罗的头按在水里,直至几乎窒息,或者接通电线,或者用手扼她的脖子。而鞭打是每天的家常便饭,有时卡门龙还拍下卡罗的照片,然后在家里冲洗。每当卡门龙折磨卡罗的时候,他就会变得异常兴奋。卡门龙还想出了千奇百怪的主意来实施自己的虐待欲,包括在地下杂志上剪下一份据称是出售灵魂的契约,强迫卡罗签下。他还在卡罗的阴唇上穿了一个洞,说这是他们的“结婚戒指”,并说希望有一天可以和她生孩子。当确定卡罗不会试图逃跑时,卡门龙决定要和卡罗结婚。自此,卡罗有了更多的自由,她可以每天去洗澡、干家务活,甚至允许她出外慢跑,而卡罗每次总是会回来。一些邻居也开始看到了卡罗,他们都以为她是这家的保姆。
  1980年,卡罗甚至可以到外面打工。实际上已被绑架了三年的卡罗这时有许多机会可以逃跑,但是她并没有这样做。卡罗被囚禁了7年,直到卡门龙的妻子珍尼斯突然良心发现,加上嫉妒卡罗的“得宠”,帮助她逃离了这个地狱。难以置信的是,卡罗在回到自己的家以后,还一直打电话给卡门龙,他哭着企求她回来,而卡罗向他保证决不起诉他。直到卡门龙的妻子珍尼斯离开了卡门龙,找到了一个心理医生,他们聊了将近2个小时,珍尼斯把故事全部说了出来,心理医生报了警。
  1984年11月,卡门龙被正式逮捕。在法庭上,主控官描述了卡门龙最喜爱的一部电影,片中讲述了一个虐待狂绑架了一个年轻的姑娘,并把她变成一个顺从的性奴。这个女孩最终变得忠心耿耿,甚至为她的“主人”牺牲了生命。主控官试图以这种戏剧化的形象,向陪审团证明卡门龙如何深受这部电影的影响,而卡罗也和片中的女孩一样,被卡门龙完完全全洗了脑而丧失了个人的意志。此外,压在卡罗身上的是一种无形的恐惧和枷锁,因为害怕报复,所以她一直不敢逃走。
编辑本段斯德哥尔摩综合症和邪教
  在当今世界中,有一支最可怜的人群,他们是邪教群众。他们多数过着群居生活(现在也有散居的,但是思想受到严格控制),许多人将自己的所有财产捐出,带领一家加入了“教会”。许多人每天劳动十几个小时,超出了常人所能忍受的限度,长期营养不良……
  温馨、亲情、儿女呢喃……早与他们告别。两情相悦、生死相许、柔肠寸断……不啻海外奇谈。理想、前途、梦想……一切与他们无缘。
  他们的目光如待宰的羔羊怯生生,似乎在哀求:“我们没有伤害你们,请你们放了我们,请你们让我们按自己的意愿生活。”他们也极少哭泣,如果哭泣,那是因为他们要离开这个世界了。
  有人说,二十一世纪的瘟疫是恐怖主义,错了!错了!邪教在后面等着哩。它很有耐心。
  由此看来,同样都是精神痴迷状态,然而“进入状态”的途径却不同:斯德哥尔摩症靠“当头棒喝”——一次惊吓就够了,邪教则必须靠日日夜夜的修炼——无休无止地洗脑。除了特殊例子(如弗连克尔等),斯德哥尔摩症来得快去得也快,而邪教却能纠缠你终生。斯德哥尔摩症的潜意识是恋世,邪教的潜意识是厌世。谁的害处大,不言自明。
  1977年,加拿大《蒙特利尔之星报》青年编辑乔希为了解救身陷“创世共同体工程”(CCP,建于美国旧金山)邪教的两名好友〔14〕,“明知山有虎,偏向虎山行”。之前他给自己“打了预防针”,首先阅读大量报刊资料及采访社会学家,了解CCP是韩国富商孙明满“联合教会”招募教徒的一个机构,孙明满是“联合教会”教主,仿照《圣经》编了本五百三十六页的《神旨》供信徒“天天读”,自称“基督再世”,在全世界各地拥有三百万信徒。青年人一旦落入这个组织,就等于陷于无边的苦海中。接着乔希采访CCP受害者的父母,进一步了解到“联合教会”也是一个变相的奴隶企业,他们的孩子“实质上成了为其无偿劳动的奴隶”,一天要劳动近二十个小时,没有休息日,不能顺便外出,失去人身自由,然而所得的报酬仅仅是粗糙不堪的一点食物和拥挤简陋的住处……乔希听得满腔怒火。尽管有了这么多思想“垫底”,可是当乔希进入CCP场部后,仍然被CCP的一切迷住了。他不但救不出朋友,自己差点也陷身其中。如果不是第三拨朋友赶来救出乔希,恐怕他早已签约了;即使这样,当他与CCP人员告别时,还是“差点儿没扑在他们怀里大哭起来”。
  乔希看到了什么?——当他走进CCP总部时,正遇上他们在吃晚饭,一个很大的饭厅,“成百人坐在地板上吃炖白菜”。用不着用什么敏锐目光就能看出,CCP基本群众过着“水深火热的生活”。而CCP不想掩盖这一点,甚至好像在炫耀:“这就是我们的真实生活,可是你们知道为什么我们自愿选择这样的生活?”
  乔希接下去看到——晚饭后,“人们唱了一会儿歌,接着上‘晚课’”。讲课的是一位青年女子(该女子原是心理学教员),大意是,人不能光为自己活着,必须想到全世界。一个人宁可自己饿死也要将食物分给别人吃,这就是CCP的哲学。“我们不能光与自己的父母或亲友共享财富,我们必须与全世界共享。请到我们的布恩威利营地来看看吧!”
  于是乔希去“看看”了。临走前,他充分意识到此行的危险性,便给女友留下了自己签字的声明,请求她在他无法自拔的时候通过法律挽救乔希。
  乔希同几十名志愿者(都是受CCP感召而来的)到了布恩威利训练营地——“新理想天堂农场”。次日凌晨,睡眼惺忪的乔希被人从地板上拉起参加唱“早歌”。一个手拿吉他的男人乐呵呵地对人群喊:“你—们—都—好—吗?”“好——极——了!”人群欢乐地呼喊。唱完早歌后,集训营的“兄弟姐妹”纷纷与新来的志愿者们交朋友,“一男邀一女”、“一女邀一男”把他们都带走了。乔希被一个叫贝西亚的漂亮姑娘拉走了,贝西亚从人群中拖起乔希,亲切地凝视着他:“您多像我的一位朋友呀!”接下来的活动是“交心”。这种交心起先只是互相介绍个人的经历和思想感情,但谈着谈着,到最后不知怎的变成了个人忏悔,变成了痛哭流涕。新来者无不把自己最见不得人的行为和隐私向“兄弟姐妹”袒露,而“兄弟姐妹”则在一旁亲切地安慰他(或她)。
  早饭后是“早课”,贝西亚给新来者讲课,说在这个不平等的世界,要由“我们自己”来创造平等的世界。乔希的心被搅乱了,他觉得贝西亚的话其实也有道理,问题是很少有人去真诚地实行它。
  课后又是谈心,新来者与集训营的“兄弟姐妹”轮换交流。到了晚上,“乔希觉得每一根神经都浸透了集训营所灌输的东西”。他想:“也许他们是对的,也许是应该和他们一起去建立‘一个更好的世界’。”
  第三天下午,营地的一个教师给新来者上“历史”课。老师说了哥伦布的故事后讲:“哥伦布预言他可以远渡重洋的时候,人们讥笑他是‘疯子’;我们比哥伦布更‘疯’,我们要改变整个世界!”乔希与志愿者们热烈地鼓掌,他们的心被深深地感染了,乔希决定留下不走了。但女友按事先约定及时打来了电话:“家人病危,速归!”此刻,乔希似乎被猛击一掌,决定迅速离开。
  然后,乔希的一群朋友来接他,而集训营的“兄弟姐妹”为他列队送行,两军对垒。“贝西亚热烈而温存地拥抱着他,恳求他留下来。乔希望着她清澈的蔚蓝色的眼睛,望着那一张张充满热情的笑脸,差点儿没扑到贝西亚的怀里大哭起来。”
  邪教就是这样,不能刺激,善待它,它是温和的;刺激它,它迅速地变脸,极其危险。
  1978年,加利福尼亚州检察官收到大量信件,揭露生活在圭亚那的人民圣殿教的成员受到非人待遇。检察官将信件签发给司法部,司法部向国务院提交了一份例行公文。国务院打电报给美国驻圭亚那的领事馆,查询这些控告是否属实。领事馆回复:经调查,人民圣殿教并无虐待其成员的现象。
  然而控告的信件仍不断寄来,这种现象引起了加利福尼亚州众议员瑞安的注意。瑞安是人民圣殿教的同情者,他想不如亲自到圭亚那走一趟,写个详细的调查报告,让造谣中伤者无话可说。
  瑞安带着记者团两次采访了位于圭亚那原始丛林中的人民圣殿教乡村公社。
  第一次阳光明媚,他们遇到了鲜花、笑语,第二次便遇到了死亡。
  11月27日下午,两架双引擎飞机从圭亚那首都起飞,向圣殿教的营地飞去。飞机在一个小村镇的简易机场降落。这儿离营地只有几公里远,瑞安一行分别乘两辆卡车,沿着泥泞的道路向营地驶去。
  汽车还没停稳,教主吉姆.琼斯笑吟吟地迎上来,说是早听村民报告,有一个庞大的代表团要来。瑞安简单而客气地对琼斯讲,国内收到了一些控告信,尽管他本人不相信这些控告,但作为众议员,他有责任来了解一下同胞的生活状况。
  琼斯的态度很明朗:欢迎采访。向记者们问候之后,他希望记者“参观所有的设施,随意与人民圣殿教的成员交谈”。
  “这里没有任何限制,你们可以像在家里一样,顺便走走转转。我个人有兴趣要外界了解在我们的公社里人们怎样劳动,我们如何根治我们这个腐朽社会的各种恶习以及在这方面所取得的进展。这里的一切情况你们都可以调查核实……”
  通过遍布在营地各处的喇叭,琼斯通知信徒们暂停手头的工作,全部集中到操场上来。
  整个操场成了欢声笑语的海洋。近千名信徒席地而坐,他们当中有老人,有年轻人,有逗着孩子玩的成年夫妇,很多人手中还拿着干农活或盖房子的工具。尽管衣衫褴褛、面容消瘦,然而人人脸上都洋溢着幸福的表情。望着那一张张兴奋的笑脸,感受那节日一般的欢快气氛,记者们尤其是议员瑞安相信,所谓受尽虐待不过是琼斯对立派蓄意制造的无耻谰言而已。
  散会后,记者们分散开到营地的农场、种植园、养殖场、车间、家庭……随机采访,一般无第三者在场。在几个小时的采访中,记者没有发现一个人回答问题时支支吾吾,或畏缩、害怕。所有的人都赞扬琼斯,说他为了众人的幸福付出了一切。
  前来调查所谓集中营问题的人们,看到的却是一个宁静的村庄,动人的歌词唱出了和平、仁爱和人与人之间的理解和互谅。他们看到的不是什么压迫虐待,而是一大批享有充分公民权利的男女。这些男女选择了孤寂的森林作为他们惟一的城堡,以此来抵御消费、竞争和金钱至上的资本主义拜物社会。
  “夜幕降临了,篝火点燃了,年轻人围着篝火尽情地欢唱。他们歌唱爱情,憧憬着一个美好的世界,在那里没有战争,没有自相残杀。”〔15〕
  瑞安认为没有必有再逗留了,他们广泛采访了公社成员,亲眼看到了各种建设成果——住房、学校、医疗所、食堂、缝纫车间、机械工场、木工车间、锻工车间……“任何人都没有权力禁止成百上千的人自愿生活在丛林里。”他们已经得到了大量的“事实来说话”。不管琼斯和营地成员一再挽留,第二天傍晚,代表团还是登上了卡车,准备离开。此时,数百名教徒弹着吉他唱着歌为他们送行……
  但是——这个世界上有多少个“但是”酿成了悲剧?就在代表团成员即将登上卡车的瞬间,一个营地姑娘乘乱偷偷塞给记者一张纸条。记者迅速将纸条塞入口袋,因为他从姑娘的眼神中看出她十分害怕。车开后,记者打开了纸条,上面的笔迹是颤抖的:“请帮助我们,我们想离开这个地狱。”下面是四个人的签名。这名记者迅速将纸条给瑞安看了。
  瑞安非常恼火:为什么在两天的采访中不说?
  到小村镇后,代表团在镇上过了一夜。镇上的居民第一次向记者们透露,以往曾有营地逃亡者逃到这里,甚至逃到乔治敦(圭亚那首都),但都被武装人员抓回去,以后这些人就失踪了。这一夜大家谁也睡不着觉。
  第二天上午,卡车载上瑞安他们,重新向“琼斯公社”驶去。
  代表团再次来到营地,琼斯感到很意外,他原先以为代表团已经消除了对公社的不信任感,但现只同意瑞安将名单上的人带走。琼斯通过扩音器又一次将所有的人召集在一起,声调“迟疑”,神情“绝望”、“痛苦”。他的近千名信徒与他保持了默契,会场上呈现不祥的寂静。瑞安念了名单上的四个人的名字,四个人战战兢兢走出来,站在记者的身边。人群中逐渐有压抑的哭泣声。当琼斯问还有没有其他人愿意走时,经过一阵沉默,又有一些怯生生的手举了起来,使得愿意回美国的人数增加到了二十个。会场上压抑的哭声越来越大。突然人群中跳出来一个年轻人,用匕首向瑞安的脖子刺去,记者们拦住了他,并把匕首夺下来。琼斯默默地看着这一切,一动不动。经过这场惊吓,代表团带上这二十个人,迅速乘卡车离去。
  以下的事件是众所周知的。琼斯派出一队武装人员乘小型卡车追到机场向即将乘机离开的记者们开火,打死五人,打伤十二人。死者中包括瑞安及递纸条的那位营地姑娘。
  接下来,琼斯带领全体人民圣殿教教徒(包括自己及所有亲信)服毒集体自杀。九百二十三名教徒中,只有两名(都是年轻姑娘)反抗,其余全部如痴如醉,服服帖帖受死。
  死之时,一家人抱在一起,一对对恋人抱在一起,因为他们认为这样子在另一个世界又能相逢。
  人民圣殿教原有严酷的戒律,如青年男女间不能有亲昵行为,夫妻相聚必须报琼斯批准,违犯者受严刑拷打并被捆绑示众,死亡却打破了这些戒律。

2008年10月9日星期四

对美次贷危机的精辟解释

对金融危机最普遍的官方解释是次贷问题,然而次贷总共不过几千亿,而美国政府救市资金早已到了万亿以上,为什么危机还是看不到头?有文章指出危机的根源是金融机构采用“杠杆”交易;另一些专家指出金融危机的背后是62万亿的信用违约掉期(Credit Default Swap, CDS)。那么,次贷,杠杆和CDS之间究竟是什么关系?它们之间通过什么样的相互作用产生了今天的金融危机?在众多的金融危机分析文章中,始终没有看到对这些问题的简单明了的解释。本文试图通过自己的理解为这些问题提供一个答案,为通俗易懂起见,我们使用了几个假想的例子。有不恰当之处欢迎批评讨论。

  一。杠杆。目前,许多投资银行为了赚取暴利,采用20-30倍杠杆操作,假设一个银行A自身资产为30亿,30倍杠杆就是900亿。也就是说,这个银行A以 30亿资产为抵押去借900亿的资金用于投资,假如投资盈利5%,那么A就获得45亿的盈利,相对于A自身资产而言,这是150%的暴利。反过来,假如投资亏损5%,那么银行A赔光了自己的全部资产还欠15亿。

  二。CDS合同。由于杠杆操作高风险,所以按照正常的规定,银行不运行进行这样的冒险操作。所以就有人想出一个办法,把杠杆投资拿去做“保险”。这种保险就叫CDS。比如,银行A为了逃避杠杆风险就找到了机构B。机构B可能是另一家银行,也可能是保险公司,诸如此类。A对B说,你帮我的贷款做违约保险怎么样,我每年付你保险费5千万,连续10年,总共5亿,假如我的投资没有违约,那么这笔保险费你就白拿了,假如违约,你要为我赔偿。A想,如果不违约,我可以赚45亿,这里面拿出5亿用来做保险,我还能净赚40亿。如果有违约,反正有保险来赔。所以对A而言这是一笔只赚不赔的生意。B是一个精明的人,没有立即答应A的邀请,而是回去做了一个统计分析,发现违约的情况不到1%。如果做一百家的生意,总计可以拿到500亿的保险金,如果其中一家违约,赔偿额最多不过50亿,即使两家违约,还能赚400亿。A,B双方都认为这笔买卖对自己有利,因此立即拍板成交,皆大欢喜。

  三。CDS市场。B做了这笔保险生意之后,C在旁边眼红了。C就跑到B那边说,你把这100个CDS卖给我怎么样,每个合同给你2亿,总共200亿。B想,我的400亿要10年才能拿到,现在一转手就有200亿,而且没有风险,何乐而不为,因此B和C马上就成交了。这样一来,CDS就像股票一样流到了金融市场之上,可以交易和买卖。实际上C拿到这批CDS之后,并不想等上10年再收取200亿,而是把它挂牌出售,标价220亿;D看到这个产品,算了一下,400亿减去220亿,还有180亿可赚,这是“原始股”,不算贵,立即买了下来。一转手,C赚了20 亿。从此以后,这些CDS就在市场上反复的抄,现在CDS的市场总值已经抄到了62万亿美元。

  四。次贷。上面 A,B,C,D,E,F....都在赚大钱,那么这些钱到底从那里冒出来的呢?从根本上说,这些钱来自A以及同A相仿的投资人的盈利。而他们的盈利大半来自美国的次级贷款。人们说次贷危机是由于把钱借给了穷人。笔者对这个说法不以为然。笔者以为,次贷主要是给了普通的美国房产投资人。这些人的经济实力本来只够买自己的一套住房,但是看到房价快速上涨,动起了房产投机的主意。他们把自己的房子抵押出去,贷款买投资房。这类贷款利息要在8%-9%以上,凭他们自己的收入很难对付,不过他们可以继续把房子抵押给银行,借钱付利息,空手套白狼。此时A很高兴,他的投资在为他赚钱;B也很高兴,市场违约率很低,保险生意可以继续做;后面的C,D,E,F等等都跟着赚钱。

  五。次贷危机。房价涨到一定的程度就涨不上去了,后面没人接盘。此时房产投机人急得像热锅上的蚂蚁。房子卖不出去,高额利息要不停的付,终于到了走头无路的一天,把房子甩给了银行。此时违约就发生了。此时A感到一丝遗憾,大钱赚不着了,不过也亏不到那里,反正有B做保险。B也不担心,反正保险已经卖给了C。那么现在这份CDS保险在那里呢,在G手里。G刚从F手里花了300亿买下了 100个CDS,还没来得及转手,突然接到消息,这批CDS被降级,其中有20个违约,大大超出原先估计的1%到2%的违约率。每个违约要支付50亿的保险金,总共支出达1000亿。加上300亿CDS收购费,G的亏损总计达1300亿。虽然G是全美排行前10名的大机构,也经不起如此巨大的亏损。因此G 濒临倒闭。

  六。金融危机。如果G倒闭,那么A花费5亿美元买的保险就泡了汤,更糟糕的是,由于A采用了杠杆原理投资,根据前面的分析,A 赔光全部资产也不够还债。因此A立即面临破产的危险。除了A之外,还有A2,A3,...,A20,统统要准备倒闭。因此G,A,A2,...,A20一起来到美国财政部长面前,一把鼻涕一把眼泪地游说,G万万不能倒闭,它一倒闭大家都完了。财政部长心一软,就把G给国有化了,此后A,...,A20的保险金总计1000亿美元全部由美国纳税人支付。

  七。美元危机。上面讲到的100个CDS的市场价是300亿。而CDS市场总值是62万亿,假设其中有10%的违约,那么就有6万亿的违约CDS。这个数字是300亿的200倍。如果说美国政府收购价值300亿的CDS之后要赔出1000 亿。那么对于剩下的那些违约CDS,美国政府就要赔出20万亿。如果不赔,就要看着A20,A21,A22等等一个接一个倒闭。无论采取什么措施,美元大贬值已经不可避免。

  以上计算所用的假设和数字同实际情况会有出入,但美国金融危机的严重性无法低估。

2008年9月18日星期四

Informix查询优化

转载于chinaunix一篇"开发优质高效的INFORMIX数据库应用程序",节选部分内容
查询语句(SELECT)的优化
程序设计中的一个著名定律是20%的代码用去了80%的时间,
在数据库应用程序中也同样如此。数据库应用程序的优化通常可分为两个方面:
源代码的优化和SQL语句的优化。源代码的优化在时间成本和风险上代价很高;
另一方面,源代码的优化对数据库系统性能的提升收效有限。
许多程序员认为查询优化是DBMS(数据库管理系统)的任务,
与程序员所编写的SQL语句关系不大,这是错误的。
一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,
查询规划是经过优化处理之后所产生的语句集合。
DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,
将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,
由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,
最后将执行结果返回给用户。虽然现在的数据库产品在查询优化方面已经做得越来越好,
但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,
因此用户所写语句的优劣至关重要。
1、对查询语句进行优化的理由
下列几方面的原因是我们进行SQL语句优化的理由:
◆ SQL语句是对数据库(数据)进行操作的惟一途径;
◆ SQL语句消耗了70%~90%的数据库资源;
◆ SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;
◆ SQL语句可以有不同的写法;
◆ SQL语句易学,难精通。
从大多数数据库应用系统的实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。
2、查询语句(SELECT)的优化建议
(1)、合理使用索引:where子句中变量顺序应与索引字键顺序相同。
如:create index test_idx on test(bdh, rq, xz)
   索引字键顺序:首先是保单号bdh,其次是日期rq,最后是险种xz,
所以where子句变量顺序应是where bdh<=“P1234”and rq=“06/06/1999”and xz=“DAA”,
不应是where xz=“DAA” and rq=“06/06/1999” and bdh <=“P1234”这样的不按索引字键顺序写法。
(2)、将最具有限制性的条件放在前面,大值在前,小值在后。
   如:where colA<=10000 AND colA>=1 效率高
   where colA>=1 AND colA<=10000 效率低
(3)、避免采用MATCHES和LIKE通配符匹配查询
通配符匹配查询特别耗费时间。即使在条件字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。
例如语句:SELECT * FROM customer WHERE zipcode MATCHES “524*”
可以考虑将它改为SELECT * FROM customer WHERE ZipCode<=“524999” AND ZipCode >=“524000”,
则在执行查询时就会利用索引来查询,显然会大大提高速度。
(4)、避免非开始的子串
例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“24”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。
(5)、避免相关子查询
一个字段的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的字段值改变之后,
子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,
那么要在子查询中过滤掉尽可能多的行。
例如:将下面的语句
select bdh,bf from TabA
where item IN (select item form TabB where TabB.num=50)
改为:select bdh,bf from TabA, TabB
where TabA.item=TabB.item AND TabB.num=50
(6)、避免或简化排序
应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,
优化器就避免了排序的步骤。以下是一些影响因素:
◆ 索引中不包括一个或几个待排序的字段;
◆ group by或order by子句中字段的次序与索引的次序不一样;
◆ 排序的字段来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。
如果排序不可避免,那么应当试图简化它,如缩小排序的字段的范围等。
(7)、消除对大型表行数据的顺序存取
在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,
一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。
避免这种情况的主要方法就是对连接的字段进行索引。例如,两个表:学生表(学号、姓名、年龄……)
和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。
还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,
但某些形式的where子句强迫优化器使用顺序存取。
下面的查询将强迫对orders表执行顺序操作:
SELECT * FROM orders WHERE (cust_num=126 AND order_num>1001) OR order_num=1008
虽然在cust_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。
因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:
SELECT * FROM orders WHERE cust_num=126 AND order_num>1001
UNION
SELECT * FROM orders WHERE order_num=1008
这样就能利用索引路径处理查询。
(8)、对于大数据量的求和应避免使用单一的sum命令处理,可采用group by方式与其结合,有时其效率可提高几倍甚至百倍。
(9)、避免会引起磁盘读写的rowid操作。在where子句中或select语句中,用rowid要产生磁盘读写,是一个物理过程,会影响性能。
(10)、使用临时表加速查询
把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。
但要注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。
五、 其他措施
如何优化一套数据库应用程序,除了以上所述的措施外,还有一些分析并提高效率的措施在实际工作中亦应注意使用。
(1)、利用set explain on语句来分析数据库查找策略。
当发现某一部分INFORMIX语句运行特别慢又找不到原因时,
可在程序中的查询语句之前加入“set explain on”语句,当程序运行时,
在程序运行的当前目录下产生一个“sqexplain.out”文件,
记录了INFORMIX数据库服务器采用何种优化策略来查找数据库。
在该文件中可以发现查找中有无使用索引条件,估计的查找代价等信息。
(2)、数据库在做dbimport后应运行update statistics语句。
当数据库系统用dbimport实用程序完成数据库装载后,应运行update statistics数据库语句保证系统表中统计信息准确,否则将影响数据库优化器的策略和系统运行性能。
例如:select * from test where bdh matches “PC2002*”
test表在bdh字段上建立了索引,但在数据库运行update statistics前,数据库优化查找策略是按顺序查找而不是按索引查找,严重影响了查找速度。
(3)、经常插入和删除的大表应定期运行update statistics high语句。
  对经常插入和删除的大表应定期运行update statistics语句保证系统表中统计信息准确,保证数据库优化器作出正确的优化策略提高系统运行性能。
(4)、对大文件采用load命令装载入库前可先去掉原有的日志方式和去掉索引,等load装载完成后再重建索引和日志,能大幅提高装载效率,避免出错产生。
◆ 去掉原有的日志方式:ontape -S -N dbname
◆ 删除索引:delete index indexname
◆ 用load 装入数据:load from filename insert into tabname
◆ 重建索引:create index to indexname on tabname(colA,colB,……)
◆ 重建日志:ontape -C -B dbname
(5)、针对ESQL/C编程,还应注意程序中的进程的使用
◆INFORMIX数据库中一个事务处理不要跨多个进程。例如:
  begin work;
  ……
  if(fork()==0){ /*子进程处理*/
  ……
  conmit work; /*(或rollback work;)*/
  ……
  }
这种方式,将引起数据库运行效率很低或处理异常。
◆在应用上引入多进程并发处理,充分利用系统资源,能大大提高处理效率。

2008年9月12日星期五

一句话

德国作家尚保罗说过很耐人寻味的话:
人生犹如一本书—愚蠢的人将它草草翻过,
聪明的人却会将它细细阅读,
为什么呢?
因为聪明的人知道,只能读一次。
当还能拥有时——好好珍惜吧:
爱情如此……
友情如此……
亲情更是如此……
最关心你的人……
别只是永远被你排诸于外……
当失去了,流泪又能做什么。

2008年8月6日星期三

奥运放风

因为奥运,迫于国外的压力,如下网站已经解封:(大家多多宣传,传遍你的每个QQ群)
西方媒体:
路透社 http://cn.reuters.com/
维基百科 http://zh.wikipedia.org/
自由亚洲电台 http://www.rfa.org/mandarin/
美国之音 http://www.voanews.com/chinese/
华尔街日报 http://chinese.wsj.com/gb/index.asp
金融时报中文 http://www.ftchinese.com/sc/index.jsp
香港媒体:
明报新闻网 http://www.mingpaonews.com/
明报月刊 http://www.mingpaomonthly.com/cfm/main.cfm
亚洲时报 http://www.atchinese.com/
亚洲周刊 http://www.yzzk.com/cfm/main.cfm
南华早报 http://www.scmp.com/portal/site/SCMP/
南华早报中文 http://olympics.scmp.com/GCO_Simpchi_Index.aspx
苹果日报 http://www1.appledaily.atnext.com/template/apple/sec_main.cfm?
台湾媒体:
联合新闻网 http://udn.com/NEWS/main.html
中国时报 http://news.chinatimes.com/mainpage.htm
自由时报 http://www.libertytimes.com.tw/index

2008年7月31日星期四

装修注意100条

一、水电
1、防水施工宜采用涂膜防水
2、防水工程应该在隐蔽工程施工完成并验收后做
3、防水施工完成后要做2次蓄水试验
4、浴室防水层应该不低于1.8cm
5、地漏、护阳角、管道等地方要多做一次防水工程
6、地漏要用防臭地漏
7、冷热水管左热右冷
8、水管尽量不要从地上走
9、冷水管在墙表要有1cm的保护层,热水管是1.5cm,因此槽要开得深
10、装PPR管要考虑贴好瓷砖的厚度,这样管子不会露出来
11、烧菜只有几分钟,洗菜要很久,水门一定要买大的
12、龙头和台盆要配套,弄不好就装不上去
13、马桶安装不能用水泥,要用硅胶
14、马桶、龙头安装好后要注意保护
15、买马桶时要考虑马桶的坑距
16、洗衣机要考虑是上排水还是下排水
17、卫生间里最好不要装电话,容易受潮
18、卫生间里的镜子要先考虑好尺寸,否则镜前灯很容易就装高
19、卫生间管道最好留检修孔
20、强电弱电不能装一根管子里
21、左零、右相上接地
22、电源插座距地30cm,开关140cm
23、开关不要装在门背后
24、插座多多宜善
25、大功率电器用16A插座,如空调等
26、暗盒要用好的
27、暗盒一定要和面板配套,否则有可能装不上
28、PVC电线管内电线截面面积不得超过电线管截面面积的40%
29、卧室的空调不要对着床
30、空调洞要考虑向外倾斜,否则雨水会进来
31、灯尽量考虑双控
32、卫生间最好安装防溅插座
33、阳台上要考虑安装插座
34、电线槽要横平竖直排好,以后用起来方便
35、公用烟道要装止逆阀
36、买来的电器一定要好好让工人看说明书
37、说明书和保修卡等资料一定要留好


二、泥工
38、水泥超过出厂期三个月就不能用了
39、不同品种、标号的水泥不能混用
40、黄砂一定要用河砂,用嘴尝味道就知道了
41、墙地砖要浸水两个小时以上,阴干后才能贴
42、墙地砖宁可多买几片,不要少买,否则容易出现色差
43、一面墙上不能有两排非整砖
44、插缝完成后要立即对瓷砖进行清理
45、地面贴大理石(浅色),石材背面要做防水
46、阳角处要割45度角
47、地砖要向地漏处倾斜,否则容易积水
48、墙砖碰到管道口要采用套割的形式,这样看起来还是整块的砖
49、地面大理石宜干铺
50、地砖一定要耐脏,防滑,不要光为了好看
51、亚光瓷砖难清理
52、阳台地砖要注意排水方向

三、木工
53、地龙骨最好用烘干落叶松
54、大的木板材买来后就要锯开风干
55、木工进场先要弹房子水平线
56、花色面板一进来就要买油漆刷一遍,防止被弄脏
57、吊扇不能装在吊顶龙骨上
58、花色面板施工时要预先挑色
59、吊顶的吊筋距离墙边不得大于300mm
60、石膏板要用沉头自攻螺丝固定,进入板面1~2mm,并做防锈处理,不能用枪钉
61、石膏板钉子之间的距离不得大于200mm
62、石膏板要与墙有3mm的缝,以便进行防裂处理
63、石膏板阳角处最好做阳角条保护
64、木门的上下冒头处要刷油漆
65、卫生间门套的底部要刷一下防水
66、房门的大小应该一致
67、家具尽量不要让木工做,做也做不好的
68、橱柜尽量买整体的,木工做不好,设计也不行
69、各种尺寸一定要考虑好,改起来比较麻烦了
70、自己做的移门不要做暗轨道,以后没办法维修的
71、卫生间小则尽量做移门,不要做开门,占地方
72、吃不准的木工活一定要与工头多交流,千万不能让他们自做主张
73、钱在手里是硬道理
74、家里有小孩,玻璃要少用
75、一定要让工人好好看图纸
76、厨房抽屉很有用
77、地板木龙骨平整度是5mm
78、毛地板要铺成30度或45度,板和板之间留2~3mm,缝要错开
79、地板和墙之间要留8~10mm的缝
80、复合地板长度超过8m时要考虑伸缩缝
81、尽量少用中密度板做门套
82、铰链和五金一定要用好的
83、浴霸要装在木龙骨上,不能直接装在吊顶上


四、油漆
84、中、深色乳胶漆施工时尽量不要掺水,否则容易出现色差
85、石膏板接缝处要上绷带
86、墙面有缝隙的地方要上的确凉布比较好
87、原来墙面有的腻子最好铲除,或者刷一遍胶水封固
88、尽量买知名品牌的油漆,装修公司推荐或工头推荐的没名气的尽量不要用
89、天气太潮湿,油漆不要刷
90、油漆、涂料的打磨要等完全干透后进行
91、下一道油漆施工必须等前一道油漆干透后进行
92、金属面的油漆要做防锈处理
93、天气太冷,油漆施工质量会差的
94、门油漆时,要用美纹纸贴住铰链和门锁
95、天太热,要注意通风
96、贴墙纸时,要在墙上刷清油
97、贴墙纸时,要把开关、插座的面板卸下来
98、亮光、丝光的乳胶漆要一次完成,补的容易出现色差
99、踢脚线安装好后要用腻子和乳胶漆补一下缝
100、磨砂玻璃要用报纸保护好

2008年7月30日星期三

有点意思,《大话西游》

世界是巨大的枷锁,你不得不重复自己或是别人的生活。
  记得长辈说过:年轻是一种罪过。他们说我们不成熟。
  真切地为自己的不俗喝彩,在深切的郁闷中,突然就看懂了《大话西游》的开头:一位才华横溢又无法无天的青年(孙悟空),根本不喜欢世人摊派给他的大事业(西天取经)。他尤其受不了师父(唐僧)的唠唠叨叨,可世俗条规(观音)又不放过他。为让他悔悟,心甘情愿地去取经,唐僧和观音达成妥协:让他五百年后重新做人。这真是一个宿命的开始。
  师兄曰:“大学的孩子都是玻璃罐里养蛤蟆,前途光明出路不大。”再贴切不过。大闹天宫无非是大学四年的黄金时光罢了,找到工作走上社会任你盖世的才华浑身的个性也自有翻不出的五指山来压。只有戴上紧箍咒取经去,九九八十一难,做一个奇奇怪怪的佛。你别无选择。
  五百年后的悟空叫至尊宝,在五岳山从事一份很有前途的职业——山贼。命运却要他扮演孙悟空,至尊宝只是个过渡罢了。蜘蛛精来了,白骨精来了,菩提老祖来了,牛魔王也来了……都是棋子,安静地立在命棋盘的中央。
  他的路线是早定好的:(1)一个人给他三颗痣(2)戴上紧箍咒(3)打败牛魔王(4)西天取经。可怜的至尊宝什么都不知道,认认真真做山贼,还爱上了白骨精,想和她结为百年之好。
  所有的事都瞒着他接二连三地发生。
  十年前我绝对不知道今天自己会在XX这所城市里打拼,如今已隐隐感受到那冥冥之中的牵引。可怕的是这还绝不是终点,不到游戏结束我不会知道答案。真相将揭晓,在我临死的瞬间。
  给至尊宝三颗痣的人是紫霞仙子。谁说的:总有一个女孩出现,让男孩最终成为男人。而男人永远都不可能得到她,那简直是一定的。
  非常喜欢紫霞的开场白:“现在我郑重宣布,这座山上所有的东西都是我的,包括你。”那样的气贯云霄,像一个童话故事。
  而现实是:这个世界没有什么属于你,包括你自己。也许我们就是为了创造属于自己的东西才来到这个世上,因为年轻,所以押注于爱情。
  至尊宝拒绝了紫霞,他以为自己还爱晶晶。见到晶晶,他又发现紫霞才是真爱。命运一直在同他开玩笑:至尊宝忽然成了孙悟空,千辛万苦找晶晶又爱上了紫霞。而抉择是那样残酷:要打败牛魔王救紫霞,就必须戴上紧箍咒做回神通广大的孙悟空;而戴上紧箍咒就不能有半点情欲,只有取经去。
  为至尊宝不平:不明白在这样的故事里为何爱情总要成为牺牲品,干嘛不让周星弛携紫霞纤纤小手——走先!爱情是那样美丽而脆弱,无法直面生活的琐碎和坚韧。哪段感情又没有绚烂的瞬间和艰难的长久,在一起就会幸福吗,未必。
  为紫霞叫好,"我的生活我做主",一个仙子为了所爱所恨抛弃一切.虽然结局是她没有猜到了.可是她永远留在了人们的心里.
  至尊宝挖开自己的心,看到了紫霞留在那里的一滴眼泪,毕竟曾经沧海过。五百年又五百年,兜了一个大圈子又回到了原地。人没能战胜命运,而人的尊严却在抗争中得到了肯定,人的情感也必将不朽。“生亦何欢,死亦何苦。”大彻大悟。
  紧箍咒,圈住昔日的梦想,圈住棱角分明的个性。
  成熟是一个很痛的词,它不一定会得到,却一定会失去。
  罗曼蒂克、海誓山盟、生死相许……面对爱情这些都是琐碎,不值一提。爱情就是爱情,不是别的什么东西。能与爱情同在的只有生命,其他都滚一边儿去。
  你爱了,难道还不够吗?
  悟空爱了,不论晶晶还是紫霞,他都要将爱情进行到底。
  晶晶爱了,那个弃她而去的悟空,“不能和喜欢的人在一起,做人又怎会开心。”
  紫霞爱了,“谁拔出我的紫青宝剑,谁就是我的如意郎君。”
  爱一个人需要理由吗?
  孙悟空会爱白骨精,*八戒爱上了蜘蛛精。紫霞爱他至深,因为他拔出了一把剑。
  故事里的人找爱人的理由永远千奇百怪:王子要用水晶鞋才能找到灰姑娘,薛宝钗要那有玉的人来配……可生活永远现实得多,芸芸众生,谁又能许谁一个未来,自欺欺人罢了。
  有理由也好,没理由也罢,可还是要爱。让我去,过程就是结果,无悔。至此后漫漫长路我独行。
  爱无须掩饰无须矫做无须患得患失,只要像紫霞一样说:“让我们立刻开始这段感情吧!先亲我一下。”
  晶晶口中道:“我再也不会为这个男人心痛了。”可还是要为他拔剑与人拼命。
  至尊宝梦中也要叫紫霞的名字七百四十一次,不知道的人觉得紫霞一定欠了他很多钱。
  爱是身不由己.
  紫霞说:“就象飞蛾,明知会受伤也要扑到火上。”“我无力抗拒,向你狂奔去。”无可救药的痴迷。
  爱是奋不顾身。
  至尊宝对晶晶说:“你杀了我吧,我不希望你看我的时候心里却想着别的人。”
  晶晶以为:“都是骗我的。”跳下崖去。
  紫霞把身体挡在至尊宝面前,刺进牛魔王的铁叉里。
  一时间,以后的人生如何,大家都无所谓了。连那样宝贵的性命,也打算随时给爱情作了祭品。一个个一头扎进这情爱苦海,宁愿永生永世不得超生。
  爱是深刻莫测的,。
  三十娘流着泪说:“想我春三十娘貌美如花,却跟这么丑的人有了。”这是多少美丽自负的女子的宿命:心中的他是能文能武翩翩少年,枕边人却鼾声如雷大腹便便。谁敢说多年后眼望自己的丈夫不会有如此感觉,真不知幸福还是心酸。不过还是要为他挺
  身而去无限牺牲,像春三十娘为*八戒放下断龙石与牛魔王同归于尽。
  晶晶爱悟空,至尊宝爱晶晶,紫霞爱至尊宝,“他爱你你爱我我爱他”,千古无解的方程。《白马啸西风》里说:“如果你深深爱着的人,却又深深爱上了别人,能有什么法子?”
  所以紫霞说:“爱一个人原来是那么痛苦。”晶晶找不到那个抛弃她的悟空(象不象殷离),告诉至尊宝:“你经过五百年回来要找的不是我。”至尊宝原以为可以与初恋共度今生,谁知初恋的时候并不懂情爱人生。当年被他推开的紫霞已经悄无声息地抵达他灵魂的最深处,而他却不自知。可紫霞死了:“我的意中人是个盖世英雄,有一天他会踩着七色的云彩来娶我,我猜中了前头,可是我猜不着这结局……”
  没有人猜得中结局,一切随风而去。
  恋爱的时候我们都不懂爱情,懂得爱情后却失去了可以相爱的时光。
  最绝望不是他不爱你或他离你而去,最绝望是你忘记了怎么去爱一个人,你已丧失了爱的能力。
  请记住下面的台词:“曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜。等到了失去的时候才后悔莫及,尘世间最痛苦的事莫过于此。如果上天可以给我一个机会再来一次的话,我会对你说三个字“我爱你”。如果非要把这份爱加上一个期限,我希望是一万年!”也顺便记住这段话的原版,在王家卫的《重庆森林》里:“如果记忆是一个罐头,我希望它永远都不会过期,如果一定要加上一个期限的话,我希望是一万年。”
  至尊宝第一次说这番话是骗紫霞,第二次说已痛不欲生。总有一天,你会在灵魂最温柔的一隅为她重复这段话,为了你们即将封存的一万年。“如果有一天我忍不住问你,你一定要骗我。不管你心里有多么不愿意,你都不要告诉我你从来没有喜欢过我。”
  此情可待成追忆
  只是当时已惘然!
  经历过和正在经历着悟空式的命运和紫霞式的爱情,才发现生命的本质是以最低的姿态出现的。
  英雄?你为什么不问问做英雄的代价......

2008年7月28日星期一

埃舍尔魔镜


埃舍尔出生于1898年的荷兰北部。早于1916年,他已经熟识油耗浮雕印刷术。1917年,他在画家史蒂格文的印刷公司制作蚀刻版画。1919年,在贺林的建筑装饰艺术学院修读建筑学。当时得到美术老师梅斯昆泰的熏陶,对装饰设计艺术产生浓厚兴趣,尤其是木刻版画。自那时开始,埃舍尔的生活便于他的作品连在一起,在致给父母亲的书信中,他时常将工作过程一一道说出来。 埃舍尔多次表达数学上有趣的茂比乌斯带。当一条丝带被扭曲后,将两端连在一起,则丝带的正面和反面是相间地连接起来的。但这种曲面带的现象若由平面图画表达出来则毫不容易,1963年的《红蚁》便是这种题材的作品,也是一件稀有的埃舍尔套色版画。埃舍尔在他的著作中,指出特别偏好两色的外型结构,因为图形的本质需要,他才加上颜色。



1961年的《瀑布》是埃舍尔最后期的奇异建筑式图画,他依据彭罗斯的三角原理,将整齐的立方物体堆砌在建筑物上。这种不合情理的结构亦见于1958年的《嘹望塔》,作品中的建筑物和人物手持的立方体都是怪异的。埃舍尔的作品骤看起来没有什么奇怪的地方,但其实当中蕴藏的幻觉事物是最引人入胜的。参观者每每把他们认识的真实世界,与埃舍尔的虚构幻像相混比较,而产生迷惑。例如作品《瀑布》的流水穿流不息,完全违反地心吸力,所表达的图像是毫不合理的。


埃舍尔把自己称为一个"图形艺术家",他专门从事于木版画和平版画。1898年他出生在荷兰的 Leeuwarden,全名叫 Maurits Cornelis Escher。他的家庭设想他将来能跟随他的父亲从事建筑事业,但是他在学校里那可怜的成绩以及对于绘画和设计的偏爱最终使得他从事图形艺术的职业。他的工作成果直到五十年代才被注意,1956年他举办了他的第一次重要的画展, 这个画展得到了《时代》杂志的好评, 并且获得了世界范围的名望。在他的最热情的赞美者之中不乏许多数学家, 他们认为在他的作品中数学的原则和思想得到了非同寻常的形象化。因为这个荷兰的艺术家没有受过中学以外的正式的数学训练,因而这一点尤其令人赞叹。随着他的创作的发展,他从他读到的数学的思想中获得了巨大灵感,他工作中经常直接用平面几何和射影几何的结构,这使他的作品深刻地反映了非欧几里德几何学的精髓,下面我们将看到这一点。他也被悖论和"不可能"的图形结构所迷住,并且使用了罗杰·彭罗斯的一个想法发展了许多吸引人的艺术成果。这样, 对于学数学的学生,埃舍尔的工作围绕了两个广阔的区域:"空间几何学"和我们或许可以叫做的"空间逻辑学"。

2008年7月25日星期五

没有眼泪

分手了,蓝是个很好的女孩,很漂亮也很温柔,虽然很多朋友说我离开她很傻,可我还是放手了,虽然我很舍不的。
第一天, 她没有起床,把自己用被子捂的严严实实的,她宿舍的人都不敢去安慰她,她一天都没有吃饭,连刷牙洗脸都没有,晚上睡觉的时候我听到她在被子里抽泣。
第二天, 今天她吃饭了,是她的宿舍同学强制性的让她吃的,她的眼眶红红的,我总说她是个爱哭鬼,她每次都噘着小嘴说她不是。
第三天, 今天她穿的很妖艳,走进一家酒吧,喝了好多酒,用一种很诱惑的眼光环视全场,好多人上来搭腔“小姐,你好漂亮啊”。她喝了很多,当一个年纪可以做她爸爸的男人对她说“小姐,我送你回家吧”的时候她把手中的酒全泼在他的脸上,那个该死的老头扬起他的手掌就要打下去的时候,小睦他们来了,救了蓝,这一切我都知道,我就在酒吧的一个角落里看着。
第四天, 今天她早早就起床了,忙忙碌碌一上午,然后把自己关在浴室里好久,当舍友们踹门进去的时候都惊呼到:好干净啊。
第五天, 她开始学习了,其实她原来学习很好,我们开始后受我影响她的成绩也退步了,这也好,转移一下注意力,恢复的也快。
三个月后。。。。她做了学生会主席,她考研了。  
一年后。。。。。在她身边的男人很多,比我优秀的也很多,可她根本没在意过,不过她和凌很好,校园里传他们的关系很暧昧。她只是把他当哥哥,可是流言是挡不住的。三年后。。。。。她要结婚了,新郎是凌,她在写结婚请贴,一张,两张,三张,,,写到第十二张的时候她哭了,趴在桌上眼泪完全抑制不住,我上前一看,所有的喜贴新郎写的都是我的名字。我也很想哭,可是鬼魂是不能哭的,我没有眼泪。三年前,我横穿马路,遇上车祸,手里提着要给她庆祝生日的蛋糕。

2008年7月24日星期四

狗狗智商的排名及测试

排名依次是:

1.边境牧羊犬

2.贵宾犬

3.德国牧羊犬

4.金毛猎犬

5.杜宾犬

6.喜乐蒂犬(谢德兰牧羊犬)

7.拉布拉多猎犬

8.蝴蝶犬

9.洛威拿

10.澳洲牧牛犬

11.威尔斯科基犬

12.迷你型雪纳瑞

13.英国跳猎犬

14.比利时特弗伦犬

15.史其派克犬/比利史牧羊犬

16.苏格兰牧羊犬

17.德国短毛指示犬

18.英国可卡/标准型雪纳瑞

19.布列塔尼猎犬

20.美国可卡

21.威玛猎犬

22.伯恩山犬

23.松鼠犬

24.爱尔兰水猎犬

25.维兹拉犬

26.卡狄肯威尔斯科基犬

27.切萨皮克湾拾列犬/波利犬/约克夏埂

28.巨型雪纳瑞

29.万能埂

30.伯瑞犬

31.威尔斯跳猎犬

32.曼彻斯特埂

33.萨莫耶犬

34.纽芬兰狗/澳洲埂/美国斯塔福郡埂/戈登蹲猎犬/长须牧羊犬

35.凯恩埂/凯利蓝埂/爱尔兰埂

36.挪威猎糜犬

37.猴面埂/丝毛埂/迷你品犬/法老王猎犬/克伦伯长毛垂耳猎犬

38.洛威埂

39.斑点狗

40.贝林顿埂

41.爱尔兰猎狼犬

42.库瓦兹犬

43.萨路基猎犬

44.骑士查里王猎犬/德国刚毛指示犬

45.西伯利亚雪撬犬/比熊犬

46.藏獒/灵堤/英国猎狐犬/美国猎狐犬/格里芬犬

47.西高地白埂

48.拳师狗/大丹狗

49.腊肠狗

50.阿拉斯加雪撬犬

51.沙皮狗

52.罗德西亚背脊犬

53.爱尔兰埂

54.波斯顿埂/秋田狗

55.斯凯埂

56.西里罕埂

57.巴哥犬

58.法国斗牛犬

59.马尔济斯犬

60.意大利灵堤

61.中国冠毛犬

62.丹地丁蒙埂/西藏埂

63.英国老式牧羊犬

64.比利牛斯山犬

65.苏格兰埂/圣伯纳犬

66.牛头埂

67.吉娃娃

68.拉萨犬

69.斗牛獒犬

70.西施犬

71.巴吉度猎犬

72.比格犬/獒犬

73.北京犬

74.血堤

75.苏俄牧羊犬

76.松狮犬

77.老虎狗

78.见生吉犬

79.阿富汗猎犬

2008年7月23日星期三

十大经典佛教名句,,你最中意哪条?

经典一:一切皆为虚幻。
经典二:不可说。   
经典三:色即是空,空即是色。   
经典四:人生在世如身处荆棘之中,心不动,人不妄动,不动则不伤;如心动则人妄动,伤其身痛其骨,于是体会到世间诸般痛苦。   
经典五:佛生五色茎,一花一世界,一佛一如来。   
经典六:前生500次的回眸才换得今生的一次擦肩而过。   
经典七:大悲无泪,大悟无言,大笑无声。   
经典八:苦海无边,回头是岸。放下屠刀,立地成佛。   
经典九:菩提本无树,明镜亦非台,本来无一物,何处惹尘埃。   
经典十:我不入地狱,谁入地狱。

2008年7月22日星期二

常用数据库JDBC连接写法

1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jarClass.forName( "org.gjt.mm.mysql.Driver" );cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );

2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jarClass.forName( "org.postgresql.Driver" );cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd );

3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zipClass.forName( "oracle.jdbc.driver.OracleDriver" );cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

4. Sybase(http://jtds.sourceforge.net)jconn2.jarClass.forName( "com.sybase.jdbc2.jdbc.SybDriver" );cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd );//(Default-Username/Password: "dba"/"sql")

5. Microsoft SQLServer(http://jtds.sourceforge.net)Class.forName( "net.sourceforge.jtds.jdbc.Driver" );cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );

6. Microsoft SQLServer(http://www.microsoft.com)Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd );

7. ODBCClass.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );

8.DB2(新添加)Class.forName("com.ibm.db2.jdbc.net.DB2Driver");String url="jdbc:db2://192.9.200.108:6789/SAMPLE"cn = DriverManager.getConnection( url, sUsr, sPwd );

补充Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10JDBC Name: jTDSURL: http://jtds.sourceforge.net/Version: 0.5.1Download URL: http://sourceforge.net/project/showfiles.php?group_id=33291

语法:Class.forName("net.sourceforge.jtds.jdbc.Driver ");

Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password");

orConnection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password");

PostgresqlJDBC Name: PostgreSQL JDBCURL: http://jdbc.postgresql.org/Version: 7.3.3 build 110

Download URL: http://jdbc.postgresql.org/download.html

语法:Class.forName("org.postgresql.Driver");

Connection con=DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");

IBM AS400主机在用的JDBC语法有装V4R4以上版本的Client Access Express可以在C:\Program Files\IBM\Client Access\jt400\lib找到 driver 档案 jt400.zip,并更改扩展名成为 jt400.jar

语法java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());

Class.forName("com.ibm.as400.access.AS400JDBCConnection");con = DriverManager.getConnection("jdbc:as400://IP","user","password");informixClass.forName("com.informix.jdbc.IfxDriver").newInstance();

String url = "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword";

Lib:jdbcdrv.zip

Class.forName( "com.sybase.jdbc.SybDriver" )url="jdbc:sybase:

Tds:127.0.0.1:2638/asademo";

SybConnection connection= (SybConnection)DriverManager.getConnection(url,"dba","sql");

补充两个SAP DBClass.forName ("com.sap.dbtech.jdbc.DriverSapDB");

java.sql.Connection connection = java.sql.DriverManager.getConnection ( "jdbc:sapdb://" + host + "/" + database_name,user_name, password)InterBaseString url = "jdbc:interbase://localhost/e:/testbed/database/employee.gdb";

Class.forName("interbase.interclient.Driver");//Driver d = new interbase.interclient.Driver (); /* this will also work if you do not want the line above */Connection conn = DriverManager.getConnection( url, "sysdba", "masterkey" );

HSqlDBurl: http://hsqldb.sourceforge.net/

driver: org.hsqldb.jdbcDriver连接方式有4种,

分别为:

con-str(内存): jdbc:hsqldb.con-str

(本地): jdbc:hsqldb:/path/to/the/db/dircon-str

(http): jdbc:hsqldb:http://dbsrvcon-str

(hsql): jdbc:hsqldb:hsql://dbsrv

2008年7月15日星期二

据说知道10条的人就是知识渊博的

01 : 人类全身上下,最强韧有力的肌肉,竟是舌头。

02 : 张开眼睛打喷嚏是不可能的。

03 : 憋气自杀也是不可能成功的。

04 : 每一次你舔一张邮票的背胶,你就吸收了十分之一卡路里。

05 : 右撇子平均比左撇子多活九年。

06 : 鳄鱼无法伸出它们的舌头。

07 : 北极熊都是左撇子。

08 : 某些狮子可以一天之内交配50次以上。果真是万兽之王呀...

09 : 鸵鸟的眼睛比脑袋大;而海星至今还没演化出脑。

10 : 跳蚤可以跳过它们350倍身长的距离,相当于一个人跳过一个美式足球场。

11 : 一只被摘掉头的蟑螂可以存活9天,9天后死亡的原因则是过度饥饿? 所以还是当场立刻打死好

12 : 长颈鹿没办法咳嗽

13 : 猫头鹰是唯一能够分辨蓝色的鸟类

14 : 一只鲸鱼一分钟心跳只有九下

15 : 巧克力含有一种称为苯基的化学物质,跟你谈恋爱时大脑里头可以制造出来的东西一样

16 : 只有百分之三十的人可以放大缩小自己的鼻孔

17 : 一只牡蛎的性别会由男变女,此后一生中还会变个几次

18 : 艾菲尔铁塔的草稿蓝图摊开来有超过14000平方呎的面积

19 : 在太空中太空人是没办法哭的,因为没有地心引力,眼泪流不出来

20 : 瞎眼的变色龙还是有能力变色来适应周遭环境

21 : 大象死后还会保持站立姿势

22 : 有些昆虫没有头还可以再活上一年

23 : 达芬奇光是画蒙娜丽莎的嘴唇就花上十二年

24 : 玻璃破掉时,玻璃碎片的时速最高可达每小时三千英哩

25 : 乳牛听音乐时可以供应更多牛奶

26 : 下午摘下的玫瑰比清晨摘下的玫瑰更能持久不枯萎

27 : 一只70磅的章鱼可以穿过一个仅一枚银币大小的洞因为他们没有脊椎

28 : 一只鲨鱼可以侦测到水中仅百万分之一含量的血液

29 : 其实, 河马跑得比人快

30 : 据说看完这篇文章的人都会试着放大缩小自己的鼻孔!

内部类

本文将详细的解释内部类 希望和大家交流. 简单的内部类定义形如这样:
class A{ class B{}} 这样的类被称为内部类,又被称为内隐类. 从简单到深入一步一步的分析内部类的特点。
class OuterClass{
static class A{//静态内部类
public A( ){
System.out.println("Test$A !");
}
}
class B{//非静态内部类
public B(){
System.out.println("Test$B !");
}
}
public void disp( )
{
final int a=10; int b;
class C //成员函数中的局部内部类
{ public C( )
{ System.out.println(“in class C a="+a);
//System.out.println(b);
}
}
C c=new C( );
}
}public class Test extends OuterClass
{
public static void main(String args[])
{ OuterClass.A a=new OuterClass.A(); //建立静态内部类对象

B b=new OuterClass( ).new B();

//建立非静态内部类的对象
//注意这个OuterClass().new B();相当于生成一个外部类的对象,然后在利用外部类对象生成内部类对象


OuterClass t=new OuterClass( );
t.disp( );
//通过外部对象调用一个对象方法的形式,新建立了对象C.
}
}

注意在上面的b在运行时会为0,因为是类属性.

class OuterClass
{
static class A { } //静态内部类
class B { } //非静态内部类
public void disp( )
{
class C{ } //局部内部类
}
}

编译后的将产生下面的一些类文件:

OuterClass.class
OuterClass$A.class
OutClass$B.class
OuterClass$1$C.class
记住以下几句话:

1,一个内部类的对象能够访问创建它的外部类对象的所有属性及方法(包括私有部分)。
//可以闭上眼镜,把这个内部类等同于一个类的一个方法,当然就可以访问这个外部类的
//所有方法和属性,私有方法和属性是属于外部类的,当然也就等同于内部类的.

2,对于同一个包中的其它类来说,内部类能够隐藏起来。(将内部类用private修饰即可)
//只有在内部类中,才能定义一个为private类型的class,因为这时编译器已经把这个类看作这个类的成员了,但是在一般使用时,就是所谓的”顶级类时”,不能使用private,只能是public 或者是friendly. 如果要是想保证一个类不产生任何的对象,请在构造函数中,把构造函数声明成private.
3, 内部类可定义在方法中,称为局部内部类,但它只能使用方法中的final常量。
// 定义在一个方法内的类,又被成为局部内部类,这个类只能使用在方法中的final常量,注意,这个常量是在一个方法中的,那么能否使用一个类中的常量呢?
当然是可以的,因为类中的常量在在一个方法中是可见的.
//
如果把一个类写在了一个if中,比如这样:
class A{
int a = 10;
if(a!=10){
class B{
B(){
System.out.println(a);
}
}
}
}
在编译后会有几个错误呢?
首先那个a没有被定义为final,你有一次上了圈套. 类B同样会被生成出来,只是离开了if域就失效了.
4,内部类可以被定义为抽象类
// abstract 类同样可以在内部类中
5, 非静态内部类不能声明本类的static成员
//只有一个静态的内部类,才可以声明一个static成员,
class A{
static class B{

//如果这里不是一个static类,是不可以被声明这个gg方法的.
static void gg(){
int a = 100;
System.out.println(a);
}
}
}

class aa{
public static void main(String args[]){

A.B hh = new A.B();
hh.gg();


}
}
使用内部类可以非常方便的编写事件驱动程序
这个在写事件驱动时,会有很好的解释.
匿名内部类
在某些情况下,我们只需要内部类的一个对象,那么我们就没有必要给内部类命名,没有名字的内部类我们称为匿名内部类
public class A extends Applet
{ public void init( )
{ addMouseListener( new B( ) );
}
class B extends MouseAdapter
{ public void mousePressed(MouseEvent me)
{ showStatus("Mouse Pressed."); }
}
}
用匿名内隐类修改:

import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class AnonymousInnerClassDemo extends Applet
{ public void init( )
{ addMouseListener( new MouseAdapter( )
{ public void mousePressed(MouseEvent me)
{ showStatus("Mouse Pressed"); } } );
}
}
下面是一个think in java里的例子
public class Pr{

public Concents cont(){
return new Concents(){

private int i= 11;
public int value (){return i;}
};//这里是有一个逗号
}
}
这个Contents是通过默认的构造函数产生的,匿名类的产生也就是一个新类向上转型到父类的过程.
那么如果一个父类没有一个默认的构造函数,应该什么办呢? 那就只有调用一个super()了.
class noname{

Warpping wrap(int x){

return new Warpping(x){

public int value(){

return super.value()*47;
}
};
}
public static void main(String s[]){

noname p = new noname();
Warpping w = p.wrap(10);
}
}

如果在匿名内部类中用到了外部对象 , 就必须保证这个外部对象是final的 。public class PP{

public DD dest(final String dest, final float price){

return new DD(){

private int cost;
{
cost = Math.round(price);
if(cost>100)
System.out.println("Over budget");
}
};
}
publc static void main(String []arg){

PP h = new PP();
DD d = h.dest("haha",11.111);

}
}

2008年7月14日星期一

seam-gen

Seam Gen是什么
Seam Gen(也叫seam)用来生成seam框剪使用的代码,seam.bat(Windows)和seam(Linux/Unix)使用Ant来生成Seam工程和源代码,使用Seam之前必须先安装Ant 1.6(或者更新版本)和支持EJB3的JBoss Application Server(推荐使用4.2.0GA之后的版本。)

seam.bat或者seam命令位于Seam框架的根目录下。

Seam 工程创建和开发命令
setup
使用示例: seam.bat setup
运行向导,设置seam-gen/build.properties文件中的属性,这个命令设置了项目的工作目录,JBoss目录等。另外这个命令也设置了一些其他的关于代码生成的属性,例如model,action和test使用的package,数据库连接等信息。
另外直接编辑seam-gen/build.properties可以达到相同的效果。

create-project
使用示例:seam.bat create-project
根据seam-gen/build.properties文件中的内容,创建工程,包括依赖的类库,ant build脚本,和两个配置文件(开发用和发布用),这个命令也会产生Eclipse和Netbeans所需要的工程文件。使用这个命令建立的工程可以被Eclipse或者Netbeans轻松的引入。

update-project
使用示例:seam.bat update-project
更新项目的类库。

delete-project
使用示例:seam.bat delete-project
删除项目目录,也从JBoss中取消部署,注意这个命令一旦被执行就没有办法回退。

deploy
使用示例:seam.bat deploy
将项目(打包的EAR或者WAR)和数据源部署到JBoss 服务器上。

undeploy
使用示例:seam.bat undeploy
将项目(打包的EAR或者WAR)和数据库从JBoss服务器上删除。

explode
使用示例:seam.bat explode
部署项目(以展开目录的形式,与打包的EAR和WAR对应)和数据源到JBoss服务器上。

restart
使用示例:seam.bat restart
重新启动已经部署的项目(以展开目录的形式)

unexplode
使用示例:seam.bat unexplode
与explode对应,删除服务器上部署的项目(以展开目录的形式)和数据源。

Seam 代码生成命令

new-action
使用示例:seam.bat new-action
创建一个新的java接口和SLSB(Stateless Session Beam),并且连带Seam和EJB3的标注(Annotation)

new-form
使用示例:seam.bat new-form
建立一个Java接口,和SFSB(Stateful Session Bean),并且连带Seam和EJB3的标注(Annotation)。并且建立XHTML的页面,和能够模拟JSF请求的TestNG的测试代码。

new-conversation
使用示例:seam.bat new-conversation
建立一个Java接口和SFSB,并且连带Seam和EJB3的标注(Annotation)。并且添加带有@Begin和@End的方法框架。
new-entity
使用示例:seam new-entity
建立一个带有Seam和EJB3标注的Entity Beam。
generate-entities
使用示例:seam.bat generate-entities
从已有的数据库Schema生成JPA兼容的Entity类。这个命令使用Hibernate的逆向工程工具生成JPA Entity类,Seam EntityHome和 EntityQuery,JavaBean,和Facelets试图(查看,查找,编辑)。

送别

长亭外,古道边,芳草碧连天。
晚风拂柳笛声残,夕阳山外山。
天之涯,地之角,知交半零落;
一觚浊酒尽余欢,今宵别梦寒.。

长亭外,古道边,芳草碧连天。
问君此去何时来,来时莫徘徊。
天之涯,地之角,知交半零落;
人生难得是欢聚,惟有别离多。

2008年7月9日星期三

观沧海

东临碣石,以观沧海。

水何澹澹,山岛竦峙。

树木丛生,百草丰茂。

秋风萧瑟,洪波涌起。

日月之行,若出其中;

星汉灿烂,若出其里。

幸甚至哉!歌以咏志。

龟虽寿

神龟虽寿,猷有竟时。
腾蛇乘雾,终为土灰。
老骥伏枥,志在千里;
烈士暮年,壮心不已。
盈缩之期,不但在天;
养怡之福,可得永年。
幸甚至哉!歌以咏志。
近来喜欢上了曹操的诗歌,是个什么兆头呢?

2008年7月8日星期二

SVN主要命令

<Location /svn>
DAV svn
SVNParentPath e:svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location>



svnadmin create --fs-type fsfs TestRepository


binhtpasswd -c passwd <username>


[groups]
developers = user1,user2,user3,user4
docs = user5,user6,user7
#to allow everyone read access
[/]
* = r
#allow all developers complete access
@developers = rw
#give the doc people write access to the docs folder
[/project/trunk/doc]
@docs = rw

2008年3月25日星期二

Seam学习笔记---Seam的组件

Seam组件

无状态Session Bean


无状态Session Bean组件无法在多次调用之间保持状态。因此,它们通常在不同的Seam上下文中,操作其他组件的状态。他们可以作为JSF的action listener,但是不能为JSF组件的显示提供属性。

无状态Session Bean总是生活在无状态上下文中。

无状态Session Bean是Seam组件中最没趣的了。

Seam无状态Session Bean组件可以使用 Component.getInstance() 或者 @In(create=true) 实例化。它们不能直接使用JNDI或者 new 操作实例化。

有状态Session Bean


有状态Session Bean不仅可以在bean的多次调用之间保持状态,而且在多次请求之间也可以保持状态。 不由数据库保存的状态通常应该由有状态Session Bean保持。这是Seam和其他web框架之间的一个显著的不同点。 其他框架把当前会话的信息直接保存在 HttpSession 中,而在Seam中你应该把它们保存在有状态Session Bean的实例中,该实例被绑定到会话上下文。这可以让Seam来替你管理状态的声明周期,并且保证在多个不同的并发会话中没有状态冲突。

有状态Session Bean经常被作为JSF action listener使用,也可以作为JSF显示或者form提交的后台bean,提供属性供组件访问。

默认情况下,有状态Session Bean会被绑定到Conversation Context。它们绝不会绑定到page或stateless context。

对Session范围的有状态Session Bean的并发请求,会被Seam按顺序串行处理。

Seam有状态Session Bean组件可以使用 Component.getInstance() 或者 @In(create=true) 实例化。它们不能直接使用JNDI或者 new 操作实例化。

实体Bean


实体Bean可以被绑定到上下文变量,起到Seam组件的作用。因为Entity除了上下文标识之外,还有持久标识,Entity实体通常明确的由Java Code绑定,而非由Seam隐性初始化。

Entity Bean实体不支持双向注入或者上下文分界。对Entity Bean的调用也不会触发验证。

Entity Bean通常不作为JSF的action listener使用,但经常作为JSF组件用于显示或者form提交的后台bean,提供属性功能。 特别是,当Entity作为后台Bean的时候,它会和一个无状态Session Bean扮演的action listener联用,来实现CRUD之类的功能。

默认情况下,Entity Bean被绑定到Conversation Context。他们永远不能被绑定到无状态Context。

注意,在集群环境中,把Entity Bean直接绑定到Conversation或者Session范围的Seam上下文变量,与在有状态Session Bean中保持一个对Entity Bean的引用相比,性能比较差。因此,并非所有的Seam应用程序都会把Entity Bean定义为Seam组件。

Seam实体Bean组建可以使用 Component.getInstance()@In(create=true) 或者直接使用 new 操作来实例化。

组件名字


所有Seam组件都需要名字。我们可以通过 @Name 注解来命名组件:

@Name("loginAction") @Stateless public class LoginAction implements Login {     ... }

这个名字是 seam component name,和EJB规范定义的任何其他名字都没有关系。 但是,Seam组件名字就作为JSF管理的Bean Name使用,因此,可以理解为这两个概念是等同的。

@Name 不是定义组件名称的唯一方式,但是我们总得要在 某个地方 来指定名字。 否则,Seam 注解的其他部分就无法工作。

就如同在JSF中,Seam组件实例绑定成上下文变量时,其名字通常和组件名相同。 因此,例如我们可以通过 Contexts.getStatelessContext().get("loginAction") 来访问 LoginAction。 特别是,不管Seam自己何时初始化一个组件,它将这个新实例以组件的名字绑定成一个变量。 但是,又和JSF一样,应用程序也可以把组件绑定成其他的上下文变量,只需通过API编程调用。 例如,当前登录的用户(User)可以被绑定成为Session上下文中的 currentUser 变量,而同时,另一个用作某种管理功能的用户则被绑定成对话上下文的 user 变量。

对非常大型的应用程序,经常使用全限定名;内置的Seam组件就是这样。

@Name("com.jboss.myapp.loginAction") @Stateless @Interceptors(SeamInterceptor.class) public class LoginAction implements Login {     ... }

我们可以在Java代码和JSF表达式语言中使用全限定的组件名称。

<h:commandButton type="submit" value="Login"                  action="#{com.jboss.myapp.loginAction.login}"/>

这很啰嗦,Seam也提供了把全限定名简写的办法。在 components.xml 文件中加入类似这样的一行:

<factory name="loginAction" scope="STATELESS" value="#{com.jboss.myapp.loginAction}"/>

所有的Seam内置组件都有全限定名,但大多数都在Seam jar文件的 components.xml 中简写为简单的名字。

Seam学习笔记---Seam的上下文

基本的Seam上下文

基本的Seam上下文有:

  • Stateless context

  • Event (or request) context

  • Page context

  • Conversation context

  • Session context

  • Business process context

  • Application context

Stateless context(无状态上下文)


那些确实没有状态的组件(主要是无状态Session Bean)总是运行在无状态上下文中(实际上就是上下文无关)。 无状态组件没什么太大的意思,也有争议认为它们不十分面向对象。但不管怎么样,它们还是很重要,并且通常很有用。

Event context(事件上下文)


事件上下文是“最窄”的有状态上下文,是Web Request 上下文的泛化,用以包含其他种类的事件。 然而,与JSF请求的生命周期相关联的事件上下文是事件上下文最重要的实例,并且也是你最常打交道的。 与事件上下文相关联的组件在请求结束时被销毁,但是它们的状态至少在请求的生命周期中是存在并且是定义良好的。

Page context(页面上下文)


页面上下文允许你将状态与一个渲染页面的实例相关联。 你可以在Event Listener中初始化状态,或者在实际渲染页面的时候初始化状态,任何源于该页面的事件都可以访问到这些状态。 这在支持像可点击列表这种的功能时特别有用,列表的内容通过服务器端的数据变化产生。 实际上状态被序列化到了客户端,因此在多窗口操作或者回退按钮的时候,这种结构是非常健壮的。

Conversation context(业务会话上下文)

业务会话上下文是Seam中最核心的概念conversation(业务会话)是从用户的视角看待的一个工作单元。 它可能跨越与用户交互的多个Servlet、多个请求,和多个数据库事务。但是对用户来说,一个业务会话解决一个单一的问题。 例如说:“预订酒店”,“批准合同”,“创建订单”都是业务会话。 你可以将业务会话理解成对一个“use case(用例)”或“user story(用户故事)”的实现,但这种联系并非是必须的。

业务会话保存关于“在此窗口中,用户正在干什么”的状态。在任何时间,一个用户可能同时位于多个业务会话活动中,一般是在几个不同窗口中。 业务会话上下文让我们可以确保不同业务会话的状态不会互相干扰,不会导致Bug。

你可能要花上一点时间才能习惯以这一业务会话的观点来思考你的应用程序。 但一旦你习惯于它,你会喜欢上这个术语,并且再不会不用业务会话来思考了!

一些业务会话仅存在在一次请求中。跨域多个请求的业务会话必须通过Seam提供的annotation注解来划分。

一些业务会话同时也是tasks(任务)。任务是一种业务会话,它特指一个长时间运行的业务过程,当正确完成后,可能会触发一个业务流程状态的转换。Seam为任务划分提供了专门的annocation注解。

业务对话可以是nested(嵌套)的,一个业务对话嵌套“在”一个更大的业务对话中。这是一项高级特性。

通常,业务对话状态实际上由Seam保存在Servlet Session 中,跨越请求。Seam实现了可配置的 conversation timeout,可以自动销毁不活动的业务会话,这就可以确保,如果用户取消对话,用户的登录Session中保存的状态不会无限增长。

对于在一个长时间运行的业务会话中所产生的并发请求,Seam按顺序执行。

除此之外,Seam也可以配置成把对话状态保存在客户端浏览器中。

Session context(Session上下文)


Session上下文保存与用户登录session相关联的状态。虽然当需要在多个业务会话中交换状态的时候这很有用,但我们一般不建议使用Session 上下文保存组件,除非是保存有关登录用户的全局信息。

在JSR-168 Portal环境下,Session上下文代表Portlet上下文。

Business process context (业务流程上下文)


业务流程上下文保存了长时间运行的业务流程相关的状态。这种状态由BPM引擎(jBPM)管理和持久化。 业务流程跨越多个用户的交互,因此状态在多个用户之间通过良好定义的方式共享。 当前的任务决定当前的业务流程实例,业务流程的生命周期通过外置的 process definition language(流程定义语言) 来定义,因此没有特别的annotation注解用于划分业务流程。

Application context(应用上下文)


Application上下文就是Servlet规范中的Servlet上下文。应用程序上下文在保存静态信息方面有用,例如配置数据,引用数据或者元模型。 例如,Seam把自己的配置和元模型保存在应用程序上下文中。

Context variables(上下文变量)


上下文定义了命名空间,一组 context variables(上下文变量)。 这些工作很类似Servlet规范中对Session或Request attributes的定义。 你可以绑定任何你喜欢的值到Context Variable,但通常我们会绑定Seam组件实例到Context Variables。

因此,在上下文中,组件实例是通过上下文变量名字来辨别的(通常是这样,但并非绝对,就和组件名称一样)。 你可以通过程序在特定范围内访问被命名的组件实例,这是通过 Contexts 类进行的,它提供了对 Context 接口的几个线程绑定的实例的访问:

User user = (User) Contexts.getSessionContext().get("user");

你也可以通过名字来设置或修改变量值:

Contexts.getSessionContext().set("user", user);

但通常,我们通过注射(injection)来从上下文中获得组件,并且通过反向注射(outjection)把组件实例返回上下文。

2008年3月21日星期五

有意思(答案见中缝)

据说能答对5道题的人是天才,答对4道的是帅才,答对3道的是将才,答对2道的是奇才,答对1道的是人才,1道都想不出来的是X才

1、一个数字,去掉前面一个数字后,是13。去掉最后一个数字后,是40。这个数字是什么?

2、这一等式很奇怪,0比2大,2比5大,5比0大。为什么?

3、只字加一笔,会是什么字?

4、人加一笔,除了大/个,还有什么字?

5、桌子上有2、1、6三张卡片,请问摆成一个什么数字可以让43整除?
四十三,剪刀石头布,冲,及,129

2008年3月20日星期四

免得老是忘记-toString

为了方便Log4J等方式的调试,显示一个类的实例,通常需要做如下方式的输出:
log.trace(myClassInstance);
此时需要MyClass实现重载 toString()方法,利用Jakarta Common Lang可以很容易实现toString方法,由ToStringBuilder类完成对一个类的细节的显示,参考toString方法的实现如下:

import org.apache.commons.lang.builder.ToStringBuilder;

public String toString() { return ToStringBuilder.reflectionToString(this); }relectionToString()

将利用Java Refelection机制显示类实例的所有属性的信息.

2008年3月17日星期一

看什么呢?老婆

2008年3月12日星期三

Cognos入门指南

2008-01-08至2008-03-12的工作成果

2008年3月10日星期一

Cognos报表展示的参数传递

如何调用已发布到Enterprise server的ppx报表(参数传递)

Cognos的内容一般作为网页中某一特定的帧来展现。我们可以在外部统一的用户交互界面中收集用户递交的查询条件(一般用JSP实现),在检查完用户输入的有效性之后,把这些参数按照Cognos约定的标准,以POST的方式传到某一帧中的Cognos的网管。Cognos网管就会把用户查询的结果返回到该帧中。

下面是一个接口调用的实例:
假设服务器名称为:servername
ppx报表发布到enterprise server之后在enterprise server的根目录下,名称为:testreport
如果我们要对这个报表进行访问,可通过如下url对报表进行调用:http://test/cognos/ cgi-bin/ppdscgi.exe?DC=R&E=%2Ftestreport
如果用户要求访问的是一个可动态分析的cube,那么相应的url为
http://test/cognos/ cgi-bin/ppdscgi.exe?DC=Q&E=%2Fcubename

其中:%2F是一个URL使用的转意符,它的原型是符号“\”。

如果报表或Cube是发布于一个文件夹test中的,那么相应的url为:

http://test/cognos/ cgi-bin/ppdscgi.exe?DC=R&E=%2Ftest%2Ftestreport



通过以上的接口可以访问到任意发布到Powerplay Enterprise Server的报表或Cube。如果要向报表或Cube传递过滤条件,可采用下面的调用标准。

例如在Enterprise Server发布有报表ICBC,该报表开放了四个传参接口(Years,Products,Locations,Channles)。用户可以选择向其中的某几个接口传参。

如果选择“Products”为“Outdoor Products”则调用

http://test/cognos/cgi-bin/ppdscgi.exe?DC=R&E=%2Ficbc&DM=Products&FC=0%09Outdoor%20Products&ZZ=X

其中&DM=Products //表示要过滤维度Products

&FC=0%09Outdoor%20Products //表示维度Products的过滤值



如果是过滤两个维度,例如过滤“Products”和“Locations”则调用

http://info/cognos/cgi-bin/ppdscgi.exe?DC=R&E=%2Ficbc&DM=Products%09Locations&FC=0%09Outdoor%20Products%091%09Europe&ZZ=X

其中&DM=Products%09Locations //维度间用%09分开

&FC=0%09Outdoor%20Products%091%09Europe //维度值从0开始标号



如果是过滤三个维度,例如过滤“Products”和“Locations”及“Channels”则调用

http://info/cognos/cgi-bin/ppdscgi.exe?DC=R&E=%2Ficbc2&DM=Products%09Locations%09Channels&FC=0%09Environmental%20Line%091%09Europe%092%09Independent&ZZ=X

其中&DM=Products%09Locations%09Channels //维度间用%09分开

&FC=0%09Outdoor%20Products%091%09Europe%092%09Independent

//维度值从0开始标号



在每条Url后添加&ZZ=X,表示参数传递结束。



注意:维度过滤值必须用该维度节点的code

2008年3月7日星期五

真假猴王

  千年以前
  你匍匐地下
  明知生死未来痛苦欢乐
  但
  你无须说破
  生命历程里的漫漫长路
  说与不说
  对任何人
  都是轮回的花开花落
  
  千年以前
  你伏在地下
  明知是非真假
  但
  你不能说破
  那两个惊天动地的神猴
  说出来
  对天对地
  都是难躲的祸
  
  千年以后
  你伏在我心中
  明知爱与不爱
  但
  你无法说破
  那深深寂寞里的烟花
  说出来
  对你对我
  都是遗憾三生的错

2008年3月5日星期三

Operational Data Storage

ODS是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需 求。常常被作为数据仓库的过渡,也是数据仓库项目的可选项之一。

根据Bill.Inmon的定义,“数据仓库是面向主题的、集成的、稳定的、随时间变化的,主要用于决策支持的数据库系统”

ODS是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需 求。常常被作为数据仓库的过渡,也是数据仓库项目的可选项之一。

在Kimball的<<数据仓库生命周期工具集The Data WareHouse Liftcycle Toolkit>>,他是这样定义的

1. 是操作型系统中的集成,用于当前,历史以及其它细节查询(业务系统的一部分)

2. 为决策支持提供当前细节数据(数据仓库的一部分)

因此操作数据存储(ODS) 是用于支持企业日常的全局应用的数据集合,ODS的数据具有面向主题、集成的、可变的和数据是当前的或是接近当前的4个基本特征。同样也可以看出ODS是介于DB和DW 之间的一种数据存储技术,和原来面向应用的分散的DB相比,ODS中的数据组织方式和数据仓库(DW)一样也是面向主题的和集成的,所以对进入ODS的数 据也象进入数据仓库的数据一样进行集成处理。另外ODS只是存放当前或接近当前的数据,如果需要的话还可以对ODS中的数据进行增、删和更新等操 作,虽然DW中的数据也是面向主题和集成的,但这些数据一般不进行修改,所以ODS和DW的区别主要体现数据的可变性、当前性、稳定性、汇总度上。

由于ODS仍然存储在普通的关系数据库中,出于性能、存储和备份恢复等数据库的角度以及对源数据库的性能影响角度,个人不建议ODS保存相当长周期的数据,同样ODS中的数据也尽量不做转换,而是原封不动地与业务数据库保持一致。即ODS只是业务数据库的一个备份或者映像,目的是为了使数据仓库的处理和决策支持要求与OLTP系统相隔离,减少决策支持要求对OLTP系统的影响。

为什么需要有一个ODS系统呢?一般在带有ODS的系统体系结构中,ODS都具备如下几个作用:

1) 在业务系统和数据仓库之间形成一个隔离层。

一 般的数据仓库应用系统都具有非常复杂的数据来源,这些数据存放在不同的地理位置、不同的数据库、不同的应用之中,从这些业务系统对数据进行抽取并不是一件 容易的事。因此,ODS用于存放从业务系统直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系上都与业务系统基本保持一致,因此在抽取过程中极 大降低了数据转化的复杂性,而主要关注数据抽取的接口、数据量大小、抽取方式等方面的问题。

2) 转移一部分业务系统细节查询的功能

在 数据仓库建立之前,大量的报表、分析是由业务系统直接支持的,在一些比较复杂的报表生成过程中,对业务系统的运行产生相当大的压力。ODS的数据从粒度、 组织方式等各个方面都保持了与业务系统的一致,那么原来由业务系统产生的报表、细节数据的查询自然能够从ODS中进行,从而降低业务系统的查询压力。

3) 完成数据仓库中不能完成的一些功能。

一 般来说,带有ODS的数据仓库体系结构中,DW层所存储的数据都是进行汇总过的数据和运营指标,并不存储每笔交易产生的细节数据,但是在某些特殊的应用中,可能需要 对交易细节数据进行查询,这时就需要把细节数据查询的功能转移到ODS来完成,而且ODS的数据模型按照面向主题的方式进行存储,可以方便地支持多维分析 等查询功能。即数据仓库从宏观角度满足企业的决策支持要求,而ODS层则从微观角度反映细节交易数据或者低粒度的数据查询要求。

在一个没有ODS层的数据仓库应用系统体系结构中,数据仓库中存储的数据粒度是根据需要而确定的,但一般来说,最为细节的业务数据也是需要保留的,实际上 也就相当于ODS,但与ODS所不同的是,这时的细节数据不是“当前、不断变化的”数据,而是“历史的,不再变化的”数据。这样的数据仓库的存储压力和性能压力都是比较大的,因此对数据仓库的物理设计和逻辑设计提出了更高的要求。

房价上涨的原因

以前,有个地主有很多地,找了很多长工干活,地主给长工们盖了一批团结楼住着,一天,地主的谋士对地主说:东家,长工们这几年手上有点钱了,他们住你的房子,每月交租子,不划算,反正他们永远住下去,你干脆把房子卖给他们起个名堂叫做-----公房出售!告诉他们房子永远归他们了,可以把他们这几年攒的钱收回来,地主说:不错,那租金怎么办?谋士说:照收不误,起个日本名儿,叫物业费!地主很快实行了,赚了好多钱,长工们那个高兴啊!
  过了几年,地主的村子发展成城镇了,有钱人越来越多,没地方住,谋士对地主说:东家,长工们这几年手上又有钱了,咱们给他们盖新房子,起个名堂叫做旧城改造,他们把手上的钱给我们,我们拆了房子盖新的,叫他们再买回去,可以多盖一些卖给别人,地主又实行了,这次,有些长工们不高兴了,地主的家丁派上用途了,长工们打掉牙只好往肚子里咽,地主又赚了好多钱。
  又过了几年,地主的村子发展成大城市了,有钱人更多了,地主的土地更值钱了,谋士对地主说:东家,咱们把这些长工的房子拆了,在这个地方建别墅,拆出来的地盖好房子卖给那些有钱的大款还能赚一笔,地主说:长工们不干怎么办?谋士说:咱给他们钱多点儿,起个名堂叫货币化安置,咱再到咱们的猪圈旁边建房子,起个名堂叫经济适用房,给他们修个马车道让他们到那边买房住,地主说:他们钱不够怎么办?谋士说:从咱家的钱庄借前给他们,一年6分利,咱这钱还能生钱崽,又没风险,地主又实行了,长工们拿到钱,地主的经济适用房到现在才建了一间,长工们只好排队等房子,直到现在,还等着呢——
  于是,长工们开始闹事了,地主有点慌,忙问谋士怎么办?谋士说:赶紧通知长工们,房子要跌价了,别买了,租房住吧,正好把我们的猪圈租给他们,结果,这么多年后,长工们的钱全没了,还在租房住,直到永远 。

2008年3月4日星期二

鱼我所欲也

鱼,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍鱼而取熊掌者也。生,亦我所欲也,义,亦我所欲也,二者不可得兼,舍生而取义者也。生亦我所欲,所欲有甚于生者,故不为苟得也。死亦我所恶,所恶有甚于死者,故患有所不避也。如使人之所欲莫甚于生,则凡可以得生者何不用也?使人之所恶莫甚于死者,则凡可以避患者何不为也?由是则生而有不用也;由是则可以避患而有不为也。是故所欲有甚于生者,所恶有甚于死者。非独贤者有是心也,人皆有之,贤者能勿丧耳。

一箪食,一豆羹,得之则生,弗得则死。呼尔而与之,行道之人弗受;蹴尔而与之,乞人不屑也。

万钟则不辨礼义而受之,万钟于我何加焉!为宫室之美,妻妾之奉,所识穷乏者得我欤?向为身死而不受,今为宫室之美为之;向为身死而不受,今为妻妾之奉为之;向为身死而不受,今为所识穷乏者得我而为之:是亦不可以已乎?此之谓失其本心。