Source favicon22:35 Web2.0 , SSO & OpenID » Xerdoc Together
Web2.0的应用越来越多,对SSO的需求也就愈发强烈,Delicious,Flickr,Mail,Blog,43things, Feedburner……,每个应用都有自己的一套Identit需要维护,这带来了很多问题,比如: 每个应用都需要注册一个用户名和密码 每天需要输入很多次同样的认证信息 可能无法注册到自己希望的用户名 如果这些Web2.0应用能够采用某种Single Sign-On系统,会带来很多好处: 简化Web2.0的开发,不需要开发Identity认证,只需要集成SSO的SDK 用户只需要记住一个简单的Identity就可以 统一认证,方便集成各种Web2.0的应用 BTW:这里需要分清Authentication与Authorization的区别:SSO负责的仅仅是Authentication - is proving that You Are Who You Say You Are,Authorization则是某个Identity在这个应用系统中有什么数据,这是Web2.0网站自己的事儿。 最先想到的是Microsoft Passport,它的基本工作原理是: 1) 客户端对Passport合作站点(比如MSN Space)发出访问请求,检查Cookie是否有Passport登陆验证的Cookie,如果没有,则显示"登陆"按钮; 2) 点击登陆按钮,Redirect -> Passport.com 进行验证,参数: returnUrl - 返回到应用的URL SiteID - 合作站点的ID 3) Passport检查客户端Cookie,如果用户未登陆(用户有可能在其它的Passport-Enable站点登陆过),则显示登陆页面;如果登陆过,则更新Cookie,到(5); 4) 用户提交登陆数据(用户名、密码,有时还图像验证等),HTTPS发送; 5) Passport验证用户身份,生成sid,重定向回刚才传递的那个returnUrl,也就是Passport的应用站点。 6) Passport合作站点通过预先约定验证SID,并生成本地Cookie,显示"登出"按钮。 其实,类似的SSO方案还有很多,有跨网站应用的,比如Sixapart的Typekey;也有本公司的Passport,比如Sohu Passport(Sohu Passport的认证页面是通过HTTP明文传的…),还有为了其它应用集成的,比如Flickr API中的认证。 这种SSO解决方案中最重要的三个元素为: SiteID - 标识哪个合作应用站点 ReturnURL - 要返回的页面 SID - 预先约定的某种认证方式。比如对称密钥加密,或者PKI公钥技术 这种解决方案,所有的用户隐私资料都是保存在中心服务器中的。这就带来了一个问题,由谁来替大家Host用户的隐私数据呢?如果是某个中心化的Server,谁能相信这个Server呢? Livejournal的创始人给出了他的答案 - OpenID。 This is a decentralized identity system, but one that’s actually decentralized and doesn’t [...]
Source favicon22:30 Google 黑板报居然用的 DreamHost » DBA notes
刚才和田春峰聊的时候,他说: 据说 Google 中国的黑板报 也使用的 Dreamhost... 我特地去查了查,真的呀.Whois.有意思. 但是 GoogleChinaBlog.net 的域名似乎被网友抢注了 :) 不过 Google 黑板报的页面代码似乎就是拼凑的. 虽然好像也用了 Blogger.com 的模板,但页面代码结构非常糟糕. CSS 是随便嵌进去的, 很多内容都是直接用 font 标记做格式化. Site:www.googlechinablog.com , 结果只有一条. 稍稍有点丢人哦.
Source favicon22:24 google desktop 3 英文版beta的野心 » Ada's Blog 艾达思语
2月9日,google发布了gd3 beta in english,使用了一下,感觉google的还是野心勃勃的要控制用户,巩固市场: 1. gd3的search across computers,理所应当的copy个人文件信息到google的服务器; 2. sidebar可拖出到桌面,填补了google在桌面的空白; 3. ie首页设置;增强了google对ie主页的占有率。 4. google无处不收集用户信息,隐私问题将是被人诟病的话柄。 5. google的各个产品路线更趋于融合:通过gd来融合gmail、map、talk等google软件/服务,并带动他们的的使用量/用户量 google search history、gmail、Gtalk、Gd、Gtoolbar等等都在收集用户信息,是否google最终的目的就是收集足够的个人信息后,向个人发送广告?
Source favicon21:17 发布我的中文分词程序源代码--DartSplitter » 天堂的阶梯

前几天因为好久没发blog了,就拿我毕设中的一段算法凑数,没想到引起很多人的兴趣。因此就把我的分词算法单独拎出来做了一个项目叫作DartSplitter。暂时把分词算法的名称叫做树状词库分词法。


刚刚统计了一下源代码,一共也就950多行代码,加上测试用例共1200行代码。看来确实还是想法比实现重要。说明如下:

1、由于不能用原来的专业词库,因此我特地去网上找了个Access的词库,一共有一万条记录左右,还有很多单字,因此分词的效果不会太理想。不过我这里只是为了演示一下功能,幸好从数据库转成我现的词库并不复杂,我的演示程序里提供了例子,后面还会有说明。而且,真正好的词库可能还要加入机器学习等功能,真正全面的分词可能还需要将基于词库的分词与无意义的分词结合,不过这些功能都不是那么简单的啦。

2、由于测试对词库的依赖性太强了,因此我的测试用例里没有用太多的assert,只是简单地log一下结果。而且考虑到大家用TestNG的还比较少,因此我把测试用例都改成JUnit了。测试用例与外部资源的依赖一直是困扰着我的问题,不知大家有何良策?

3、由于我现在写程序已经对Spring产生依赖症了,因此虽然我希望我程序依赖的包越少越好,但还是用了Spring,这样的好处是所有接口与关联都是可配置的。因此如果要替换掉某一部分实现也会比较简单,例如从关系数据库的词库取词的接口肯定是要重写,只要配置文件里修改一行就可以了,这个在后面说明。

4、为了方便大家使用我特意写了示例splitterTest,里面提供了两个main,一个是建词库(DictSerializationMain),另一个是对一篇文章的analysis(AnalysisTest),用了SimpleAnalyzerStandardAnalyzer和我的TreeDictAnalyzer进行对比。

下面讲一下使用说明:

1、如果不需要修改源代码的话,只要下载dartsplitter-0.3.jar就可以了。

2、需要在新建项目的sourceetc下放入以下配置文件(示例项目里都有,只要copy就行了):dartSplitter.properties, dictJdbc.properties, dartSplitterContext.xml

dartSplitter.properties的大概内容如下:

splitter.dictDir=f:/WebDict (指定了词典的路径,主要用于lazy load,目前还没用到)

splitter.dictFile=f:/WebDict/common.dict (词典的文件名,只要将词典文件与配置对就行了)

splitter.maxWordLength=20 (放入词库的最大词长,load之后相当于树的高度)

演示的字典文件名位于dict文件夹下:common.dict commonDict.mdb则是当时找来的access文件。

dictJdbc.properties的内容如下:

dict.jdbc.driverClassName=sun.jdbc.odbc.JdbcOdbcDriver

dict.jdbc.url=jdbc:odbc:commonDict

dict.jdbc.username=

dict.jdbc.password=

其实就是词库文件对应的Jdbc链接啦。

dartSplitterContext.xmlSpring的配置文件,除了建词库时访问关系数据库的DAO配置要改动外,其它都不要去动。

3、建自己的词库

A、自己implements一下DictDAO接口,提供自己的实现,DictDAO的接口定义很简单,只要实现两个方法就行了,可参考CommonDictDAO的实现:

public interface DictDAO {

/**

* @param strPrefix 词的首个字

* @return 以这个字为首字的词对象(@see cn.edu.zju.dartsplitter.data.DictValue)的列表

*/

public List<DictValue> getDictValues(String strPrefix);

/**

* @return 词库中所有词的首字列表

*/

public List<String> getAllPrefixes();

}

B、修改dartSplitterContext.xml的配置:

<bean id="dictTree" class="cn.edu.zju.dartsplitter.impl.DictTreeImpl">

<property name="rebuild"><value>false</value></property>

<property name="maxWordLength"><value>${splitter.maxWordLength}</value></property>

<property name="fileName"><value>${splitter.dictFile}</value></property>

<property name="dictDAOList">

<list>

<ref local="commonDictDAO "/>

</list>

</property>

</bean>

只要在以下这段里将替换commonDictDAO为自己的DAO就行了,也可以加入新的DAO,因为我们考虑到有多个数据来源的情况,因此可以把多个DAO实现一起放入List里。

C、执行一下包里或者示例程序里的DictSerializationMainOK

最后感谢要一下blueGuitar,如果没有当时与他讨论时的灵感,就不会有现在的算法。

以下是项目的地址: http://ccnt.zju.edu.cn/projects/DartSplitter

我的blog地址: http://blog.itpub.net/xiecc

Source favicon20:25 如何比较两个 Schema 的异同 » DBA notes
有的时候, DBA 需要迅速找出来同一个 Oracle 数据库上或者不同数据库的两个 Schema 的差异.这种情况应该比较常见,比如测试数据库发布到产品数据库的时候,需要 DBA 做频繁的检查。 应对的办法之一是通过 Toad 这样的 GUI 工具来查找.具体操作应该是很简单的。Oracle 自带的 OEM 工具也有这样的功能( Oracle 变化管理工具包,不过不是免费的)。对于不喜欢图形工具的 DBA 来说, 用手工的方式更容易接受一些。如果已经建立了 Database Link ,可以通过类似如下的 SQL 简单的发现一些差异: select * from user_tables@a minus select * from user_tables@b; 可以考虑先从 用户的 objects 入手,然后表->字段->索引 等等. 在 AskTom 上有一个关于 Schema 比较的讨论,以及一些参予讨论的人提交的 SQL 脚本。 今天测试了一个 Perl 脚本 Schemadiff, 这个工具分两个部分组成,一个执行 Perl 脚本加上一个配置文件。配置文件比较简单。看看就可以清楚。比较结果能够输出为 ASCII 文本与 HTML 两种格式。需要说明的是,使用这个脚本需要安装 DDL::Oracle 包。间接拒绝了对 Perl 不熟悉的朋友.
Source favicon18:52 書籍掃瞄器 » Jan's Tech Blog
這機械會自動為你翻頁,並掃瞄書的內容。只要透過USB 2.0介面便可連到你的電腦,不過US$35,000,會不會太貴呢? 另外,若出現Jam紙,我們的書籍便會重創吧?...
Source favicon18:28 淋雨与建模 » 搜索引擎研究

刘润在首富的宴请 vs. 雨中的犹豫里写到关于Chris的故事:

南京暴雨的下午。一个男孩在雨中骑自行车。非常的犹豫,不知道应该骑的快一点还是慢一点。他边骑边计算怎样淋的雨会少。他非常苦恼,不知道怎样才好。所有听到的人都在大笑。

看到这里我突然想起来我高中的时候也思考这个问题,可是那个时候没有得到结果,直到我进了大学后通过建模的方法才彻底解决了这个问题。

建模的方法是我在粒子的里学到的,常常一个非常复杂的数学问题,或者一个难以下手的实际问题,都是可以通过建模来实现的。

下面我介绍一下我对这里淋雨问题的建模和求解,当然,简化的的求解方法,不见得全面。


1.我们先对雨进行建模,我们先进行最少参数的简化建模。假设雨点是一个均匀分布和垂直往下降落的物体,就会有以下参数:
v 下降速度
r 雨点的大小
n 单位面积雨点的个数
l 两个雨点上下相距的长度

2.下面我们对在雨中行走,奔跑的人进行建模。我们的模型是简化人为一个圆柱体,分两个参数,高度和直径:
h 身高
w 就是人的宽度
s 就是人跑或者走的速度
L 两建筑物(点)之间的距离

3.初步的计算
我们对人进行了简化后实际上人能够接收到雨点的地方只有两个:
横截面 和 纵向
我们先计算横截面接受到的雨滴数目

3.1 横截面(头顶接收到的雨量)
这个雨量就应该是人头顶单位时间内接收到的雨量乘以时间
人跑完L 需要的时间: L/s
这个时间共接收到雨量的体积是:(L/s)*v*(pai/4)*w*w
那么全部的雨滴数目:
((L/s)v)*(pai/4)w*w*n/l
全部的水的体积是:
((L/s)v)*(pai/4)w*w*n/l*(4/3)*(pai)*r*r*r

3.2 纵向面(迎面接受到的雨量)
这个雨量就是人身子扫过的横断面乘以长度,这个体积是:
w*h*L
全部的雨滴的个数是:
w*h*L*n/l
全部的水的体积是:
w*h*L*n/l*(4/3)*(pai)*r*r*r

4.总的水量:
((L/s)v)*(pai/4)w*w*n/l*(4/3)*(pai)*r*r*r+w*h*L*n/l*(4/3)*(pai)*r*r*r
=n/l*(4/3)*(pai)*r*r*r*(L*v*w*w*pai/s/4+w*h*L*)

因此可以看出来,速度s是总的水量的一个函数,而且随着s的提高,总的水量在下降。因此从这个简单的模型里说,要最少的被雨淋湿,就要跑的快,越快头上的水越少。

5.当雨的方向不是垂直向下
这点我没有进行特别的计算,有兴趣的可以继续求解。

Source favicon18:09 Google Calendar » Jan's Tech Blog
有興趣的就看這裡吧,好像有中文版(看最後一張圖)。...
Source favicon17:56 测试又拍的发布功能 » 刻录事@上海
测试又拍的发布功能 由zhengys上传于Yupoo. 小家伙会不会把爸爸给忘记啊? 奶奶说,小家伙昨天坐车的时候,突然说”爸爸在上海”。
Source favicon16:50 用Google挖掘数据 » Blog on 27th Floor
看到了一篇digg推荐的文章,又看到有人用Google挖出很厉害的东西,所以记录一下Google搜索tips,其中有以前知道的,有以前知道后来不用给忘掉的,也有新近学到并用上的,还有偶尔用一下的。



今天刚知道网上出了个很厉害的人物,一个年轻气质有闲多金贵气留洋的中国男人,有人奔走呼号,有人就很理性的用Google查了一些东西出来,果然是厉害!
Source favicon16:34 music underground map » information aesthetics

musicundergroundmap.jpga relational visualization chart showing the branches & connections of 100 years of music using the London Underground map. train lines denote different music styles (e.g. pop.soul, reggae) & are directional according to time, branch lines represent sub-genres (e.g. rock divides into grunge & psychedelia). stations represent music artists, so that key stations naturally are linked to the most eclectic artists. see also music similarity map & artist similarity visualization & music plasma.
[guardian.co.uk (pdf) & guardian.co.uk|thnkx Rajio]

Source favicon12:20 本月脑筋急转弯 » 车东[Blog^2]
上次的 脑筋急转弯 回应很多。 本月再转载一份,感谢作者王天天 ;-)

WangChen的考题:

很久很久的现在,有一场比赛,在到终点前:

1.第二名超过了你,结果,你成了第几名?
不知道 1 2 3 4

2.你超过了第二名,结果,你成了第几名?
不知道 1 2 3 4

3.倒数第二名超过了你,结果,你成了倒数第几名?
不知道 1 2 3 4

4.你超过了倒数第二名,结果,你得了倒数第几名?
不知道 1 2 3 4

Source favicon11:56 Kung fu pastry, not kosher » Danwei RSS 1.0
hidden_bacon.jpg
Click to enlarge

This image comes from Noah Weinzweig with the following comment:
Saw this in Shanghai at a bread store. It's the most brilliant copy I've seen in the bread industry for ages - and as you know many of the great copy writers of the bread industry were killed in 1994 in that huge baking tragedy.
08:00 2006/02/20 08:00:00TQ洽谈通搜索力指数排行榜 » TQ洽谈通搜索力指数
 搜索引擎  搜索力指数  排名升降  份额
1. Baidu  139087106     59.66%
2. Google  32980438     14.15%
3. 3721  26368234     11.31%
4. Yahoo  22641854     9.71%
5. Sogou  3401490     1.46%
6. QQ  3002598     1.29%
7. 163  1853306     0.80%
8. China  1595918     0.68%
9. iAsk  1162722     0.50%
10. Zhongsou  690934     0.30%
11. Tom  330634     0.14%
Source favicon05:52 reverbiage news aggregator » information aesthetics

reverbiage.jpga live news feed aggregator featuring auto-tagged & filtered news stories from NPR (National Public Radio), augmented with different forms of data visualization. the homepage features an animated map-based feed with circles denoting the popularity of the different news story tags. in addition, the individual tag pages contain interactive timeline graphs. see also what's up news map. [reverbiage.com]

Source favicon00:16 Collaborative filtering - Wikipedia, the free encyclopedia » del.icio.us/chedong
Collaborative filtering (CF) is the method of making automatic predictions (filtering) about the interests of a user by collecting taste information from many users (collaborating).

^==Back Home: www.chedong.com

<== 2006-02-19

==> 2006-02-21