电视之外的friends

“friends ”们虽然创造了“十年”的壮举。但他们在电影里就不是很顺利咯。

ross 兄弟连(band of brothers)里一个傻冒中尉

chandler, 扭转未来(the kid)里演一个只有一个镜头的nerd,虽然装了大胡子但还是被我一眼看出。还有整九码(the whole nine yards),也是和bruce willis,没看过,至少算主演之一

joey 迷失太空(lost in space)里的卫斯特上校和garry oldman。就是剧集里和他一起配戏往他脸上喷口水那个。

monica神探飞机头(Ace Ventura: Pet Detective)和jim carrey

rachel留言蜚语(rumor has it…)和kevin costner,分手(the break up)和Vince Vaughn,衰鬼上帝(bruce almighty)和jim carrey

pheobe,完美结局(Happy Endings),没看过

简单的div显示,隐藏例子

<script type=”text/javascript” language=”JavaScript”><!–
function HideContent(d) {
if(d.length < 1) { return; }
document.getElementById(d).style.display = “none”;
}
function ShowContent(d) {
if(d.length < 1) { return; }
document.getElementById(d).style.display = “block”;
}
function ReverseContentDisplay0(d) {
if(d.length < 1) { return; }
if(document.getElementById(d).style.display == “none”) { document.getElementById(d).style.display = “block”; }
else { document.getElementById(d).style.display = “none”; }
}

function ReverseContentDisplay(d) {
if(d.length < 1) { return; }
for(i=1;i<=3;i++){
var tmp = ‘block’+i;
if(d==tmp){
if(document.getElementById(d).style.display == “none”) { document.getElementById(d).style.display = “block”; }
else { document.getElementById(d).style.display = “none”; }
}else{
document.getElementById(tmp).style.display = “none”;
}
}
}
//–></script>

<a
onclick=”javascript:ReverseContentDisplay(‘block1’); return true;”
href=”#”>
[Bid 1]
</a>
<div
id=”block1″
style=”display:none;
border-style: solid;
background-color: white;
padding: 5px;”>

bLOCK 1
</div>
<br>
<a
onclick=”javascript:ReverseContentDisplay(‘block2’); return true;”
href=”#”>
[Bid 2]
</a>
<div
id=”block2″
style=”display:none;
border-style: solid;
background-color: white;
padding: 5px;”>

bLOCK 2
</div>
<br>
<a
onclick=”javascript:ReverseContentDisplay(‘block3’); return true;”
href=”#”>
[Bid 3]
</a>
<div
id=”block3″
style=”display:none;
border-style: solid;
background-color: white;
padding: 5px;”>

bLOCK 3
</div>

Unplugged in Newyork

今天看到有Unplugged in Newyork的DVD。毫不犹豫的买下来。把以前买的磁带,cd放到一起就“全集”了。呵呵。大学时候还专门搜集了演唱会的视频刻成盘。93年到现在,终于等来了。。。

设计者与自我设计

在2007年度最佳产品与设计:人本界面里看到这句话

如同控制论之父维纳对于群体目标的论断中谈到的一样,设计者不仅要从事产品的设计,更要不时地进行自我设计,以让自己符合群体性大众的认同。每个人都在寻找自我,每个人对于消费产品的自我标签也越清晰。对于每一位中国经济增长的参与者,在经历个人财富和物质价格波动的岁月,这种混杂恐慌性和炫耀性情绪的身份焦虑更迫切,每个人都生怕自己手持的产品设计形象过时,同时又不希望自己流俗。不希望自己跟别人用一样的手机,开一样的车,喷一样的香水,在精神上寻求物质化的满足时,越来越多的人又不甘心盲目的成为快速消费品经济的宿主。

Spring的FactoryBean和InitializingBean

刚刚“领略”了一些spring-modules的源代码看到了FactoryBean和InitiliazingBean的用处。记在这里

  • InitializingBean.afterPropertiesSet()

这个方法比较容易理解,是在spring根据配置文件设置了bean的属性后调用的,一般这里会做一些初始化的工作。比如,xml配置中只是提供了resource的路径,在这个方法里 就要根据resource的路径初始化一些成员变量(那些不能被注入或者没有被注入的成员变量)。

public void afterPropertiesSet() throws Exception {
if (this.definitionLocation == null) {
throw new FatalBeanException(“Property [definitionLocation] of class [”
+ ProcessDefinitionFactoryBean.class.getName()
+ “] is required.”);
}

InputStream inputStream = null;
try {
inputStream = this.definitionLocation.getInputStream();
this.processDefinition = ProcessDefinition.parseXmlInputStream(inputStream);
//       这里就是初始化的地方,spring的配置文件中只配置了definitionLocation的信息,其他的事就在这里做

}
finally {
if (inputStream != null) {
inputStream.close();
}
}
}

  • FactoryBean.getObject & getObjectType

在比较配置文件和源代码的时候我很疑惑,为什么类型都不对头,怎么可以注入的?答案就在FactoryBean的这两个方法里

public Object getObject() throws Exception {
return this.processDefinition;
}

public Class getObjectType() {
return (processDefinition == null) ? ProcessDefinition.class : processDefinition.getClass();
}

getObject返回的是成员变量processDefinition,getObjectType返回的也不是this.class,而是processDefinition.getClass();spring在加载这样的factorybean的时候就会根据这两个方法来决定类型和实例。比如在xml中配置了ref=”someFactoryBean”的 时候,实际的引用可以是任意的,只要你提供了这两个方法。-好像有点表达不清楚。

记住这一天

记住这一天2003年12月20号。这是应该是我第一天开始blog的日子。今天用百度无意中搜到了这个当年的blog,虽然只有几篇,而且也没有什么实际内容:

· smtp example
· POP3 example
· about pop3
· 税收超额负担
· (无标题)
· 挣了一些钱
· 宏观4题
· 微观12题,尝试自己阐述
· (无标题)
· 第一篇

那时候自己在研究pop和smtp,学习经济学,还当了一回枪手。

xmpp的验证流程

来自 www.xmpp.org

Step 1: Client initiates stream to server:

 

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>

Step 2: Server responds with a stream tag sent to client:

 

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_234'
    from='example.com'
    version='1.0'>

Step 3: Server informs client of available authentication mechanisms:

 

<stream:features>
  <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
</stream:features>

Step 4: Client selects an authentication mechanism:

 

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
      mechanism='DIGEST-MD5'/>

Step 5: Server sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:

 

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgi
LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==
</challenge>

The decoded challenge is:

 

realm="somerealm",nonce="OA6MG9tEQGm2hh",
qop="auth",charset=utf-8,algorithm=md5-sess

Step 5 (alt): Server returns error to client:

 

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
  <incorrect-encoding/>
</failure>
</stream:stream>

Step 6: Client sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded response to the challenge:

 

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i
T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw
MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i
LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo
YXJzZXQ9dXRmLTgK
</response>

The decoded response is:

 

username="somenode",realm="somerealm",
nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",
nc=00000001,qop=auth,digest-uri="xmpp/example.com",
response=d388dad90d4bbd760a152321f2143af7,charset=utf-8

Step 7: Server sends another [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:

 

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
</challenge>

The decoded challenge is:

 

rspauth=ea40f60335c427b5527b84dbabcdfffd

Step 7 (alt): Server returns error to client:

 

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
  <temporary-auth-failure/>
</failure>
</stream:stream>

Step 8: Client responds to the challenge:

 

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

Step 9: Server informs client of successful authentication:

 

<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

Step 9 (alt): Server informs client of failed authentication:

 

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
  <temporary-auth-failure/>
</failure>
</stream:stream>

Step 10: Client initiates a new stream to server:

 

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>

Step 11: Server responds by sending a stream header to client along with any additional features (or an empty features element):

 

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_345'
    from='example.com'
    version='1.0'>
<stream:features>
  <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
  <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
</stream:features>

指环王和西游记的对比

可能大多数没有看过魔戒原著小说的人在看《指环王》的时候都有点一头雾水,也许是电影的缘故吧 – 没有足够的时间去给观众诠释完整的背景,这几天再看第一部。越看越像《西游记》。作个类比:

  • 《西》是师徒人五人去取经,《指》是远征队九人去毁灭魔戒
  • 中国神话是佛教和道教的结合,种族基本上是天龙八部,而魔戒是tolkein创造的一套完整神话体系,种族包括:矮人,精灵,人类,神,半兽人。(不太确定是否应该把habbit人和dwarf算作一个种族)
  • 《西》里的唐僧对应《指》里的哈比人佛罗多。都是选出来为了“拯救众生”。
  • 都会需要来自外力的帮忙,《西》里是求助各种神仙,《指》里是求助各种其他种族,比如树精或者其他牛x精灵
  • 《西》里是孙悟空,《指》里是gandolf。法力强大,人缘也好,而且二者基本也算是同一个级别。孙悟空算是半神,gandolf本来是次级神
  • 《西》是前面比较好看,《指》似乎是后面比较好看。从电影也可以看出来。
  • 《西》里人物个性比较鲜明,《指》里似乎只是强调各种种族的不同

先只想到这些

媒阀时代

让我们幻想一下媒阀时代是什么样子的

  • 每个人都变成媒体的一部分,包括他自己的生活
  • 只要愿意,你可以出卖任何的,包括你的行为,有媒体会向你购买“你每天下班经过衡山路和天钥桥路”,他们自然有办法来监控你的这些行为,而且会送给你免费的加油8折券
  • 你会发现看电视是免费的,只要你可以容忍画中画里播放和你所看的节目匹配的广告,比如你在看赵本山的小品,同时会送给你已立身的广告。你甚至可以通过这个免费得到电视机,所要做的就是一定要看满10年。这个要比每15分钟插5分钟广告温柔多了。
  • 窗户靠近马路的人可以得到佣金,所要做的就是安装一个在晚上会工作的楼宇广告牌,而且不会影响你晚上休息,还可以阻挡噪音和光污染
  • 你的小区管理员会向你调查是否支持google的“ google city”活动,如果得到大多数业主的同意,那么你的楼顶会安装一个google的鸟玩意,那么所有人就可以通过googleearth看到上海的夜空有一个巨大的“google”。而google也不会让你白出力的,你可以得到“google city”的T恤一件。
  • 书的厚度增加了一倍,但是价格却降一倍。因为,每页的背面都是广告,但也就是这些广告,广告商帮你支付了另一半的钱
  • 报纸不要钱(好像现在已经很多都一样了),而且同一张报纸会根据不同的读者印刷不同的广告,比如,人民日报上海浦东张江版和人民日报谷歌中国版。
  • 以后火箭和航天飞机不叫长征和发现号,而叫伊利2号,雅虎再现号,这个没算不上什么,迟早的事
  • 有专门的人体或行为艺术广告代理,只要愿意付钱这些人可以帮你找到愿意为你在同一天在柏林,上海,纽约,布宜诺斯艾利斯进行2公里裸奔的人。当然每个人身上都写着modofo的字样

千万不要装

自从把hamilton的照片贴上来以后就不知道怎么回事,似乎不知道该写什么上来了。这就是装的后果 – 千万不要因为流行就贴出来表明自己的主流。像我这个从来不看f1的人,靠听听新闻知道几个名字或者知道几个很酷的术语和地名,就开始把这些鸟东西装裱在自己的门面上。我到底想要通过这个得到什么?得到别人的崇拜 – 上肢天文,狭小地理?让别人觉得自己的很有品位? 品味有什么用?

其实上面写这些东西不是说我自己的,至少不全是。说的是那些可怜的流行文化的俘虏。马斯洛和罗素教导我们要懂得体会他人的幸福,无论他人对幸福的定义与你有何等不同。 –  这才是更高层次人应该有的想法。

我写这些东西干嘛?