PHP  curl实现异步的http请求

PHP是不支持线程的,但是我们有总想并行地干一些事情,比如,同时执行多个http的请求,如果使用多进程的话,有两个问题:
1. 不能跨平台
2. 创建进程的开销似乎大了些
于是,我们就想到了使用异步来达到类似并行的效果,曾经早就写程序实现过,不过是很初级的,现在curl帮我们实现了,只是目前网上的文档还少一些,这个贡献一些。

文档1:

Let’s get one thing out in the open. Curl is sweet. It does it’s job very well, and I’m absoutely thrilled it exists.

If you’re using curl in your PHP app to make web requests, you’ve probably realized that by doing them one after the other, the total time of your request is the sum of all the requests put together. That’s lame.

Unfortunately using the curl_multi_exec is poorly documented in the PHP manual.

Let’s say that your app is hitting APIs from these servers:

Google: .1s
Microsoft: .3s
rustyrazorblade.com: .5s

Your total time will be .9s, just for api calls.

By using curl_multi_exec, you can execute those requests in parallel, and you’ll only be limited by the slowest request, which is about .5 sec to rustyrazorblade in this case, assuming your download bandwidth is not slowing you down.

Sample code:

It’s really not documented on php.net how to use curl_multi_getcontent, so hopefully this helps someone.

 

文档2:

 <?php
function getMultipleDocuments($nodes$referer
){
    
set_time_limit(90
);
    if(!
$referer
){
        
$referer $nodes[0
];
    }
    
$node_count count($nodes
);

    $curl_arr = array();
    
$master curl_multi_init
();

    for($i 0$i $node_count$i++)
    {
        
$curl_arr[$i] = curl_init($nodes[$i
]);
        
curl_setopt($curl_arr[$i], CURLOPT_FOLLOWLOCATIONtrue
);
        
curl_setopt($curl_arr[$i],CURLOPT_FRESH_CONNECT,true
);
        
curl_setopt($curl_arr[$i],CURLOPT_CONNECTTIMEOUT,10
);
        
curl_setopt($curl_arr[$i],CURLOPT_RETURNTRANSFER,true
);
        
curl_setopt($curl_arr[$i],CURLOPT_REFERER,$referer
);
        
curl_setopt($curl_arr[$i],CURLOPT_TIMEOUT,30
);

        curl_multi_add_handle($master$curl_arr[$i]);
    }
    
$previousActive = –1
;
    
$finalresult 
= array();
    
$returnedOrder 
= array();
    do{
        
curl_multi_exec($master$running
);
        if(
$running !== $previousActive
){
            
$info curl_multi_info_read($master
);
            if(
$info[‘handle’
]){
                
$finalresult[] = curl_multi_getcontent($info[‘handle’
]);
                
$returnedOrder[] = array_search($info[‘handle’], $curl_arrtrue
);
                
curl_multi_remove_handle($master$info[‘handle’
]);
                
curl_close($curl_arr[end($returnedOrder
)]);
                echo 
‘downloaded ‘.$nodes[end($returnedOrder)].‘. We can process it further straight away, but for this example, we will not.’
;
                
ob_flush();flush
();
            }
        }
        
$previousActive $running
;
    }while(
$running 0
);
    
curl_multi_close($master
);

    set_time_limit(30);
    return 
array_combine($returnedOrder$finalresult
);
}

$nodes = array(‘http://mediumSpeedSite.org’‘http://fastSpeedSite.com’‘http://quiteSlowSite.com’);
$returnedDocs getMultipleDocuments($nodesnull
);

?>

utf-8 & bom

问题描述:在使用EditPlus等文本编辑工具,在windows下修改编码格式为UTF-8的文档时,会在文件的开头阐产生<feff>的字符。

问题影响:用IE浏览页面时,顶部会出现一行空白,查看页面的DOM结构,会发现其中的<link><script>标签会被解析到<body>标签下,在IE下,<meta>标签页会被解析到<body>标签下。

问题原因:在Windows标准下的UTF-8编码文档,是以<feff>开头来标识的,成为BOM(Byte Order Mark,字节序标记)

文档摘录:

Q: What is a BOM?

A: A byte order mark (BOM) consists of the character code U+FEFF at the beginning of a data stream, where it can be used as a signature defining the byte order and encoding form, primarily of unmarked plaintext files. Under some higher level protocols, use of a BOM may be mandatory (or prohibited) in the Unicode data stream defined in that protocol.

解决方案:

        

  • 配置EditPlus,删除BOM:“工具->首选项->文件->UTF-8标识->总是删除签名”,对应的英文版EditPlus路径为“Tools->Preferences->Files->UTF-8 signature->Always remove signature”
  •     

  • 改用其他编辑工具,推荐VIM
  •     

  • 转换为ASCII格式

相关文章: http://unicode.org/faq/utf_bom.html

 

一些值得借鉴的处事、励志语句

摘自: http://www.cnblogs.com/yinhaiming/archive/2009/02/12/1388777.html 

 

一、墨菲定律

    1949年,一位名叫墨菲的空军上尉工程师,认为他的某位同事是个倒霉蛋,不经意间开了句玩笑:“如果一件事情有可能被弄糟,让他去做就一定会弄糟。”
这句话迅速流传,并扩散到世界各地。在流传扩散的过程中,这句笑话逐渐失去它原有的局限性,演变成各种各样的形式,其中一个最通行的形式是:“如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。”
  这就是著名的“墨菲定律”。下面是墨菲定律的一些变种或推论。
人生哲学
1.别试图教猫唱歌,这样不但不会有结果,还会惹猫不高兴?
2.别跟傻瓜吵架,不然旁人会搞不清楚,到底谁是傻瓜?
3.不要以为自己很重要,因为没有你,太阳明天还是一样从东方升上来?
4.笑一笑,明天未必比今天好。
5.好的开始,未必就有好结果;坏的开始,结果往往会更糟。
处世原理
6.你若帮助了一个急需用钱的朋友,他一定会记得你——在他下次急需用钱的时候。
7.有能力的——让他做;没能力的──教他做;做不来的──管理他。
8.你早到了,会议却取消;你准时到,却还要等;迟到,就是迟了。
9.你携伴出游,越不想让人看见,越会遇见熟人。
爱情意义
10.你爱上的人,总以为你爱上他是因为:他使你想起你的老情人。
11.你最后硬着头皮寄出的情书;寄达对方的时间有多长,你反悔的时间就有多长。
生活常识
12.东西越好,越不中用。
13.一种产品保证60天不会出故障,等于保证第61天一定就会坏掉。
14.东西久久都派不上用场,就可以丢掉;东西一丢掉,往往就必须要用它。
15.你丢掉了东西时,最先去找的地方,往往也是可能找到的最后一个地方。
16.你往往会找到不是你正想找的东西。
17.你出去买爆米花的时候,银幕上偏偏就出现了精彩镜头。
18.另一排总是动的比较快;你换到另一排,你原来站的那一排,就开始动的比较快了;你站的越久,越有可能是站错了排。
19.一分钟有多长? 这要看你是蹲在厕所里面,还是等在厕所外面。

    二、二八法则

    1897年,意大利经济学家帕列托在对19世纪英国社会各阶层的财富和收益统计分析时发现:80%的社会财富集中在20%的人手里,而80%的人只拥有社会财富的20%,这就是“二八法则”。“二八法则”反应了一种不平衡性,但它却在社会、经济及生活中无处不在。    附:破窗理论等

     在商品营销中,商家往往会认为所有顾客一样重要;所有生意、每一种产品都必须付出相同的努力,所有机会都必须抓住。而“二八法则”恰恰指出了在原因和结果、投入和产出、努力和报酬之间存在这样一种典型的不平衡现象:80%的成绩,归功于20%的努力;市场上80%的产品可能是20%的企业生产的;20% 的顾客可能给商家带来80%的利润。遵循“二八法则”的企业在经营和管理中往往能抓住关键的少数顾客,精确定位,加强服务,达到事半功倍的效果。美国的普尔斯马特会员店始终坚持会员制,就是基于这一经营理念。

    “二八法则”同样适用于我们的生活,如一个人应该选择在几件事上追求卓越,而不必强求在每件事上都有好的表现;锁定少数能完成的人生目标,而不必追求所有的机会。

    三、马太效应

    《新约·马太福音》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说:“主人,你交给我的一锭银子,我已赚了10锭。”于是国王奖励了他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于是国王便奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆人的那锭银子赏给第一个仆人,并且说:“凡是少的,就连他所有的,也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应,它反映了当今社会中存在的一个普遍现象,即赢家通吃。
对企业经营发展而言,马太效应告诉我们,要想在某个领域保持优势,就必须在此领域迅速做大。当你成为某个领域的领头羊的时候,即便投资回报率相同,你也能更轻易地获得比弱小的同行更大的收益。而若没有实力迅速在某个领域做大,就要不停地寻找新的发展领域,才能保证获得较好的回报。

    四、手表定理

    手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。两只表并不能告诉一个人更准确的时间,反而会让看表的人失去对准确时间的信心。你要做的就是选择其中较信赖的一只,尽力校准它,并以此作为你的标准,听从它的指引行事。记住尼采的话:“兄弟,如果你是幸运的,你只需有一种道德而不要贪多,这样,你过桥更容易些。”
  如果每个人都“选择你所爱,爱你所选择”,无论成败都可以心安理得。然而,困扰很多人的是:他们被“两只表”弄得无所,心身交瘁,不知自己该信仰哪一个,还有人在环境、他人的压力下,违心选择了自己并不喜欢的道路,为此而郁郁终生,即使取得了受人瞩目的成就,也体会不到成功的快乐。
  手表定理在企业经营管理方面给我们一种非常直观的启发,就是对同一个人或同一个组织的管理不能同时采用两种不同的方法,不能同时设置两个不同的目标。甚至每一个人不能由两个人来同时指挥,否则将使这个企业或这个人无所适从。手表定理所指的另一层含义在于每个人都不能同时挑选两种不同的价值观,否则,你的行为将陷于混乱。

    五、“不值得”定律

    不值得定律最直观的表述是:不值得做的事情,就不值得做好,这个定律似乎再简单不过了,但它的重要性却时时被人们疏忘。不值得定律反映出人们的一种心理,一个人如果从事的是一份自认为不值得做的事情,往往会保持冷嘲热讽,敷衍了事的态度。不仅成功率小,而且即使成功,也不会觉得有多大的成就感。
   哪些事值得做呢?一般而言,这取决于三个因素。
  1、价值观。关于价值观我们已经谈了很多,只有符合我们价值观的事,我们才会满怀热情去做。
  2、个性和气质。一个人如果做一份与他的个性气质完全背离的工作,他是很难做好的,如一个好交往的人成了档案员,或一个害羞者不得不每天和不同的人打交道。
  3、现实的处境。同样一份工作,在不同的处境下去做,给我们的感受也是不同的。例如,在一家大公司,如果你最初做的是打杂跑腿的工作,你很可能认为是不值得的,可是,一旦你被提升为领班或部门经理,你就不会这样认为了。
  总结一下,值得做的工作是:符合我们的价值观,适合我们的个性与气质,并能让我们看到期望。如果你的工作不具备这三个因素,你就要考虑换一个更合适的工作,并努力做好它。
  因此,对个人来说,应在多种可供选择的奋斗目标及价值观中挑选一种,然后为之而奋斗。“选择你所爱的,爱你所选择的”,才可能激发我们的奋斗毅力,也才可以心安理得。而对一个企业或组织来说,则要很好地分析员工的性格特性,合理分配工作,如让成就欲较强的职工单独或牵头来完成具有一定风险和难度的工作,并在其完成时给予定时的肯定和赞扬;让依附欲较强的职工更多地参加到某个团体中共同工作;让权力欲较强的职工担任一个与之能力相适应的主管。同时要加强员工对企业目标的认同感,让员工感觉到自己所做的工作是值得的,这样才能激发职工的热情。

    六、彼得原理

管理学家劳伦斯·丁·彼得(Laurence.J.Peter),1917年牛于加拿大的范库弗,1957年获美国华盛顿州立大学学士学位,6年后又获得该校教育哲学博士学位,他阅历丰富,博学多才,著述颇丰,他的名字还被收人了《美国名人榜》、《美国科学界名人录》和《国际名人传记辞典》等辞书中。

     彼得原理(The Peter PrinciPle)正是彼得根据千百个有关组织中不能胜任的失败实例的分析而归纳出来的。其具体内容是:“在一个等级制度中,每个职工趋向于上升到他所不能胜任的地位”。彼得指出,每一个职工由于在原有职位上工作成绩表现好(胜任),就将被提升到更高一级职位;其后,如果继续胜任则将进一步被提升,直至到达他所不能胜任的职位。由此导出的彼得推论是,“每一个职位最终都将被一个不能胜任其工作的职工所占据。层级组织的工作任务多半是由尚未达到不胜任阶层的员工完成的。”每一个职工最终都将达到彼得高地,在该处他的提升商数(PQ)为零。至于如何加速提升到这个高地,有两种方法。其一。是上面的“拉动”,即依靠裙带关系和熟人等从上面拉;其二是自我的“推动”,即自我训练和进步等,而前者是被普遍采用的。

     彼得认为,由于彼得原理的推出,使他“无意间”创设了一门新的科学——层级组织学(hierarchiolgy)。该科学是解开所有阶层制度之谜的钥匙,因此也是了解整个文明结构的关键所在。凡是置身于商业、工业、政治、行政、军亨、宗教、教育各界的每个人都和层级组织息息相关,亦都受彼得原理的控制。当然,原理的假设条件是:时间足够长,五层级组织里有足够的阶层。彼得原理被认为是同帕金森定律有联系的。

     帕金森(C.N.Parkinson)是著名的社会理论家,他曾仔细观察并有趣地描述层级组织中冗员累积的现象。他假设,组织中的高级主管采用分化和征服的策略,故意使组织效率降低,借以提升自己的权势,这种现象即帕金森所说的“爬升金字塔”。彼得认为这种理论设计是有缺陷的,他给出的解释员工累增现象的原因是层级组织的高级主管真诚追求效率(虽然徒劳无功)。正如彼得原理显示的,许多或大多数主管必已到达他们的不胜任阶层。这些人无法改进现有的状况,因为所有的员工已经竭尽全力了,于是为了再增进效率,他们只好雇用更多的员工。员工的增加或许可以使效率暂时提升,但是这些新进的人员最后将因晋升过程而到达不胜任阶层,于是唯一改善的方法就是再次增雇员工,再次获得暂时的高效率,然后是另一。次逐渐归于无效率。这样就使组织中的人数超过了工作的实际需要。

     彼得原理首次公开发表于1960年9月美国联邦出资的一次研习会上,听众是一群负责教育研究计划、并刚获晋升的项目主管,彼得认为他们多数人“只是拼命地想复制一些老掉牙了的统计习题”,于是引介彼得原理说明他们的困境。演说召来了敌意与嘲笑,但是彼得仍然决定以独特的讽刺手法呈现彼得原理,尽管所有案例研究都经过精确编纂,且引用的资料也都符合事实,最后定稿于1965年春完成,然后总计有16家之多的出版社无情地拒绝了该书的手稿。1966年,作者零星地在报纸上发表了几篇述论同一主题的文章,读者的反应异常热烈,引得各个出版社趋之若婺鸳。正如彼得在自传中提到的,人偶尔会在镜中瞥见自己的身影而不能立即自我辩认,于是在不自知前就加以嘲笑一番,这样的片刻里正好可以使人进一步认识自己,“彼得原理”扮演的正是那样一面镜子。

    七、零和游戏

一个游戏无论几个人来玩,总有输家和赢家,赢家所赢的都是输家所翰的,所以无论输赢多少,正负相抵,最后游戏的总和都为零,这就是零和游戏。
    零和游戏之所以受人关注,是因为人们在社会生活中处处都能找到与零和游戏雷同或类似的现象。我们大肆开发利用煤炭石油资源,留给后人的便越来越少;我们研究生产了大量的转基因产品,一些新的病毒也跟着冒了出来;我们修筑了葛洲坝水利工程,白鳍豚就再也不能洄游到金沙江产卵了……
    发展是硬道理。人类在经历了经济高速增长、科技迅猛发展、全球经济一体化及曰益严重的生态破坏、环境污染之后,可持续发展理论才逐渐浮出水面。零和游戏原理正在逐渐为“双赢”观念所取代,人们逐渐认识到“利己”而不“损人”才是最美好的结局。实践证明,通过有效合作,实现皆大欢喜的结局是可能的。
    领导者要善于跳出“零和”的圈子,寻找能够实现“双赢”的机遇和突破口,防止负面影响抵消正面成绩。批评下属如何才能做到使其接受而不抵触,发展经济如何才能做到不损害环境,开展竞争如何使自己胜出而不让对方受到伤害,这些都是每一个为官者应该仔细思考的问题。
    还是那句话,世上没有现成的标准答案。这些企业经营管理定律只能供我们参考和借鉴,至于什么条件下适合借鉴哪一种,回到手表定理上去,你需要自己选择一块戴着舒适而又走时准确的手表。

    八、华盛顿合作规律

    华盛顿合作规律说的是:一个人敷衍了事,两个人互相推诿,三个人则永无成事之日。多少有点类似于“三个和尚”的故事。

  人与人的合作不是人力的简单相加,而是复杂和微妙得多。在人与人的合作中,假定每一个人的能力都为1,那么10个人的合作结果有时比10大得多,有时甚至比1还要小。因为人不是静止的物,而更像方向不同的能量,相互推动时自然事半功倍,相互抵触时则一事无成。

    九、酒与污水定律

    酒与污水定律是指,如果把一匙酒倒进一桶污水中,你得到的是一桶污水;如果把一匙污水倒进一桶酒中,你得到的还是一桶污水。几乎在任何组织里,都存在几个难弄的人物,他们存在的目的似乎就是为了把事情搞糟。他们到处搬弄是非,传播流言、破坏组织内部的和谐。最糟糕的是,他们像果箱里的烂苹果,如果你不及时处理,它会迅速传染,把果箱里其它苹果也弄烂,“烂苹果”的可怕之处在于它那惊人的破坏力。一个正直能干的人进入一个混乱的部门可能会被吞没,而一个人无德无才者能很快将一个高效的部门变成一盘散沙。组织系统往往是脆弱的,是建立在相互理解、妥协和容忍的基础上的,它很容易被侵害、被毒化。破坏者能力非凡的另一个重要原因在于,破坏总比建设容易。一个能工巧匠花费时日精心制作的陶瓷器,一头驴子一秒钟就能毁坏掉。如果拥有再多的能工巧匠,也不会有多少像样的工作成果。如果你的组织里有这样的一头驴子,你应该马上把它清除掉;如果你无力这样做,你就应该把它拴起来。

     十、水桶定律

    一只水桶能装多少水取决于水桶中最短的一块木板而不是最长的那块木板。
    任何组织几乎都有一个共同的特点,即构成组织的各个部分往往是优劣不齐的,但劣势部分却往往决定着整个组织的水平。问题是劣势部分是组织中一个有用的部分,你不能把它当成烂苹果扔掉,否则,你会一点水也装不了,可它却让你那些长的东西白长了!
    劣势决定优势,劣势决定生死,这是市场竞争的残酷法则。水桶定律告诉我们,领导者要有忧患意识,如果你个人身上某个方面是“最短的一块”,你应该考虑尽快把它补起来;如果你所领导的集体中存在着“一块最短的木板”,你一定要迅速将它做长补齐,否则,它带给你的损失可能是毁灭性的—叫艮多时候,往往就是因为一件事没做好而毁了所有的努力。有些人也许不知道水桶定律,但都知道“一票否决”,这是中国的“水桶”,有了它你便矢口道水桶定律是多么重要。
    决策和执行发生的机率。让谋划的人尽心谋划,让执行的人全力执行,让他们都从中获得间接而不是直接的功利,这样我们才能把“粥”分得更好。当然,还应有必不可少的独立的监督。

    十一、蘑菇管理原理

    蘑菇长在阴暗的角落,得不到阳光,也没有肥料,自生自灭,只有长到足够高的时候才开始被人关注,可此时它自己已经能够接受阳光了。
    蘑菇管理是大多数组织对待初入门者、初学者的一种管理方法。从传统的观念上讲,“蘑菇经历”是一件好事,它是人才蜕壳羽化前的一种磨炼,对人的意志和耐力的培养有促进作用。但用发展的眼光来看,蘑菇管理有着先天的不足:一是太慢,还没等它长高长大恐怕疯长的野草就已经把它盖住了,使它没有成长的机会;二是缺乏主动,有些本来基因较好的蘑菇,一钻出土就碰上了石头,因为得不到帮助,结果胎死腹中。
    让初入门者当上一段时间的“蘑菇”,可以消除他们不切实际的幻想,从而使他们更加接近现实,更实际、更理性地思考问题和处理问题。领导者应当注意的是,这一过程不可过长,时间太长便会使其消极退化乃至枯萎,须知不给阳光不给关爱不仅是任其自生自灭,而且更是对其成长的抑制。如何让他们成功地走过生命中的这一段,尽快吸取经验、成熟起来,这才是领导者所应当考虑的。

    十二、钱的问题

    当某人告诉你:“不是钱,而是原则问题”时,十有八九就是钱的问题。
  照一般的说法,金钱是价值的尺度,交换的媒介,财富的贮藏。但是这种说法忽略了它的另一面,它令人陶醉、令人疯狂、令人激动的一面,也撇开了爱钱的心理不谈。马克思说,金钱是“人情的离心力”,就是指这一方面而言。
  关于金钱的本质、作用和功过,从古到今,人们已经留下了无数精辟深刻的格言和妙语。我们常会看到,人们为钱而兴奋,努力赚钱,用财富的画面挑逗自己。金钱对世界的秩序以及我们的生活产生的影响是巨大的、广泛的,这种影响有时是潜在的,我们往往意识不到它的作用如此巨大,然而奇妙的是:它完全是人类自己创造的。致富的驱动力并不是起源于生物学上的需要,动物生活中也找不到任何相同的现象。它不能顺应基本的目标,不能满足根本的需求 -的确,“致富”的定义就是获得超过自己需要的东西。然而这个看起来漫无目标的驱动力却是人类最强大的力量,人类为金钱而互相伤害,远超过其他原因。

    附:一街东头那个乞丐去摸彩票。中了五等奖,得款50元。甚喜!这个冬天好过了,他拥有棉袄、棉裤、和棉鞋了。街西头那个乞丐也去摸彩票。中了一等奖,得款50万元。狂喜! 

 首先大宴宾客,热闹三天,煞是风光,耗款3千元,小意思。然后买西服、配手机、穿金戴银,容光焕发,一扫穷气。再次,买房子,满街转悠,要带车库的。第四,就是买车了。“夏利”太便宜,“奔驰”太贵,还是“桑塔纳”吧!第五……第六……第七……过年的时候,街东头那个乞丐还在到处晃悠,穿着那50元买的“家当”;而街西头那个乞丐却在劳教所里,据说是因为赌博、嫖娼、吸毒、闹事……拥有50元,街东头的乞丐不再受冻,自得其乐;拥有50万元,街西头乞丐成了个大富翁,却也把自己送上了死路。不懂得善用钱财的人,还是没钱点才安全。

    十三、奥卡姆剃刀定律

    12世纪,英国奥卡姆的威廉主张唯名论,只承认确实存在的东西,认为那些空洞无物的普遍性概念都是无用的累赘,应当被无情地“剃除”。他主张“如无必要,勿增实体”。这就是常说的“奥卡姆剃刀”。这把剃刀曾使很多人感到威胁,被认为是异端邪说,威廉本人也因此受到迫害。然而,并未损害这把刀的锋利,相反,经过数百年的岁月,奥卡姆剃刀已被历史磨得越来越快,并早已超载原来狭窄的领域,而具有广泛、丰富、深刻的意义。

  奥卡姆剃刀定律在企业管理中可进一步演化为简单与复杂定律:把事情变复杂很简单,把事情变简单很复杂。这个定律要求,我们在处理事情时,要把握事情的主要实质,把握主流,解决最根本的问题,尤其要顺应自然,不要把事情人为地复杂化,这样才能把事情处理好。

    美国政治学家威尔逊和犯罪学家凯林经过观察提出了“破窗理论”。

  如果有人打坏了一栋建筑上的一块玻璃,又没有及时修复,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。久而久之,这些窗户就给人造成一种无序的感觉,在这种麻木不仁的氛围中,犯罪就会滋生、蔓延。

  “破窗理论”更多的是从犯罪的心理去思考问题,但不管把“破窗理论”用在什么领域,角度不同,道理却相似:环境具有强烈的暗示性和诱导性,必须及时修好“第一扇被打碎玻璃的窗户”。

  推而广之,从人与环境的关系这个角度去看,我们周围生活中所发生的许多事情,不正是环境暗示和诱导作用的结果吗?

  比如,在窗明几净、环境优雅的场所,没有人会大声喧哗,或“噗”地吐出一口痰来;相反,如果环境脏乱不堪,倒是时常可以看见吐痰、便溺、打闹、互骂等不文明的举止。

  又比如,在公交车站,如果大家都井然有序地排队上车,又有多少人会不顾众人的文明举动和鄙夷眼光而贸然插队?与这相反,车辆尚未停稳,猴急的人们你推我拥,争先恐后,后来的人如果想排队上车,恐怕也没有耐心了。因此,环境好,不文明之举也会有所收敛;环境不好,文明的举动也会受到影响。人是环境的产物,同样,人的行为也是环境的一部分,两者之间是一种互动的关系。

  在公共场合,如果每个人都举止优雅、谈吐文明、遵守公德,往往能够营造出文明而富有教养的氛围。千万不要因为我们个人的粗鲁、野蛮和低俗行为而形成“破窗效应”,进而给公共场所带来无序和失去规范的感觉。

  从这个意义上说,我们平时一直强调的“从我做起,从身边做起”,就不仅仅是一个空洞的口号,它决定了我们自身的一言一行对环境造成什么样的影响。

帕金森定律

  英国著名历史学家诺斯古德·帕金森通过长期调查研究,写出一本名叫《帕金森定律》的书。他在书中阐述了机构人员膨胀的原因及后果:一个不称职的官员,可能有三条出路,第一是申请退职,把位子让给能干的人;第二是让一位能干的人来协助自己工作;第三是任用两个水平比自己更低的人当助手。这第一条路是万万走不得的,因为那样会丧失许多权利;第二条路也不能走,因为那个能干的人会成为自己的对手;看来只有第三条路最适宜。于是,两个平庸的助手分担了他的工作,他自己则高高在上发号施令,他们不会对自己的权利构成威胁。两个助手既然无能,他们就上行下效,再为自己找两个更加无能的助手。如此类推,就形成了一个机构臃肿,人浮于事,相互扯皮,效率低下的领导体系。

  苛希纳定律

  西方管理学中有一条著名的苛希纳定律:如果实际管理人员比最佳人数多两倍,工作时间就要多两倍,工作成本就要多4倍;如果实际管理人员比最佳人员多3倍,工作时间就要多3倍,工作成本就要多6倍。

  250定律

  美国著名推销员拉德在商战中总结出了“250定律”。他认为每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意味着得罪了250名顾客。这一定律有力地论证了“顾客就是上帝”的真谛。由此,我们可以得到如下启示:必须认真对待身边的每一个人,因为每一个人的身后,都有一个相对稳定的、数量不小的群体。善待一个人,就像拨亮一盏灯,照亮一大片。

  达维多定律

  达维多定律是以英特尔公司副总裁达维多的名字命名的。他认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。这一定律的基点是着眼于市场开发和利益分割的成效。因为人们在市场竞争中无时无刻不在抢占先机,只有先入市场才能更容易获取较大的份额和较高的利润。

  木桶定律

一个有许多块长短不同的木板箍成的木桶,决定其容量大小的并非其中最长的那块木板,而是其中最短的那块木板。同样,在一个企业的营销过程中,必然存在着许多相关的环节,只有找出制约企业经济效益提高的某一关键环节,把这一个矛盾解决了,其它矛盾就可以迎刃而解了。

 

一、 素养

蓝斯登原则

在你往上爬的时候,一定要保持梯子的整洁,否则你下来时可能会滑倒。
提出者:美国管理学家蓝斯登
点评:进退有度,才不至进退维谷;宠辱皆忘,方可以宠辱不惊。

卢维斯定理

谦虚不是把自己想得很糟,而是完全不想自己。
提出者:美国心理学家h·卢维斯
点评:如果把自己想得太好,就很容易将别人想得很糟。

托利得定理

测验一个人的智力是否属于上乘,只看脑子里能否同时容纳两种相反的思想,而无碍于其处世行事。
提出者:法国社会心理学家h·m·托利得
点评:思可相反,得须相成。

二、统御

刺猬理论

刺猬在天冷时彼此靠拢取暖,但保持一定距离,以免互相刺伤。
点评:保持亲密的重要方法,乃是保持适当的距离。

鲦鱼效应

鲦鱼因个体弱小而常常群居,并以强健者为自然首领。将一只稍强的鲦鱼脑后控制行为的部分割除后,此鱼便失去自制力,行动也发生紊乱,但其他鲦鱼却仍像从前一样盲目追随。
提出者:德国动物学家霍斯特
点评:1、下属的悲剧总是领导一手造成的。2、下属觉得最没劲的事,是他们跟着一位最差劲的领导。

雷鲍夫法则

在你着手建立合作和信任时要牢记我们语言中:
1、最重要的八个字是:我承认我犯过错误
2、最重要的七个字是:你干了一件好事
3、最重要的六个字是:你的看法如何
4、最重要的五个字是:咱们一起干
5、最重要的三个字是:谢谢您
6、最重要的两个字是:咱们
提出者:美国管理学家雷鲍夫
点评:1、最重要的四个字是:不妨试试;2、最重要的一个字是:您

洛伯定理

对于一个经理人来说,最要紧的不是你在场时的情况,而是你不在场时发生了什么。
提出者:美国管理学家r·洛伯
点评:如果只想让下属听你的,那么当你不在身边时他们就不知道应该听谁的了。

三、沟通

斯坦纳定理

在哪里说得愈少,在哪里听到的就愈多。
提出者:美国心理学家s·t·斯坦纳
点评:只有很好听取别人的,才能更好说出自己的。

费斯诺定理

人有两只耳朵却只有一张嘴巴,这意味着人应该多听少讲。
提出者:英国联合航空公司总裁兼总经理l·费斯诺
点评:说得过多了,说的就会成为做的障碍。

牢骚效应

凡是公司中有对工作发牢骚的人,那家公司或老板一定比没有这种人或有这种人而把牢骚埋在肚子里的公司要成功得多。
提出者:美国密歇根大学社会研究院
点评:1、牢骚是改变不合理现状的催化剂。2、牢骚虽不总是正确的,但认真对待牢骚却总是正确的。

避雷针效应

在高大建筑物顶端安装一个金属棒,用金属线与埋在地下的一块金属板连接起来,利用金属棒的尖端放电,使云层所带的电和地上的电逐渐中和,从而保护建筑物等避免雷击。
点评:善疏则通,能导必安

四、协调

氨基酸组合效应

组成人体蛋白的八种氨基酸,只要有一种含量不足,其他七种就无法合成蛋白质。
点评:当缺一不可时,"一"就是一切。

米格-25效应

前苏联研制的米格-25喷气式战斗机的许多零部件与美国的相比都落后,但因设计者考虑了整体性能,故能在升降、速度、应急反应等方面成为当时世界一流。
点评:所谓最佳整体,乃是个体的最佳组合。

磨合效应

新组装的机器,通过一定时期的使用,把磨擦面上的加工痕迹磨光而变得更加密合。
点评:要想达到完整的契合,须双方都作出必要的割舍。

五、指导

波特定理

当遭受许多批评时,下级往往只记住开头的一些,其余就不听了,因为他们忙于思索论据来反驳开头的批评。
提出者:英国行为科学家l·w·波特
点评:总盯着下属的失误,是一个领导者的最大失误。

蓝斯登定律

跟一位朋友一起工作,远较在"父亲"之下工作有趣得多。
提出者:美国管理学家蓝斯登
点评:可敬不可亲,终难敬;有权没有威,常失权。

吉尔伯特法则

工作危机最确凿的信号,是没有人跟你说该怎样作。
提出者:英国人力培训专家b·吉尔伯特
点评:真正危险的事,是没人跟你谈危险。

权威暗示效应

一化学家称,他将测验一瓶臭气的传播速度,他打开瓶盖15秒后,前排学生即举手,称自己闻到臭气,而后排的人则陆续举手,纷纷称自己也已闻到,其实瓶中什么也没有。
点评:迷信则轻信,盲目必盲从。

没走过的路。2、特色不特,优势无优。

古特雷定理

每一处出口都是另一处的入口。
提出者:美国管理学家W·古特雷
点评:上一个目标是下一个目标的基础,下一个目标是上一个目标的延续。

十四、计划

列文定理

那些犹豫着迟迟不能作出计划的人,通常是因为对自己的能力没有把握。
提出者:法国管理学家P·列文
点评:如果没有能力去筹划,就只有时间去后悔了。

弗洛斯特法则

在筑墙之前应该知道把什么圈出去,把什么圈进来。
提出者:美国思想家W·P·弗洛斯特
点评:开始就明确了界限,最终就不会作出超越界限的事来。

十五、参谋

波克定理

只有在争辩中,才可能诞生最好的主意和最好的决定。
提出者:美国庄臣公司总经理詹姆士·波克
点评:无磨擦便无磨合,有争论才有高论。

韦奇定理

即使你已有了主见,但如果有十个朋友看法和你相反,你就很难不动摇。
提出者:美国洛杉矶加州大学经济学家伊渥·韦奇
点评:1、未听之时不应有成见,既听之后不可无主见。2、不怕开始众说纷纭,只怕最后莫衷一是。

十六、决策

福克兰定律

没有必要作出决定时,就有必要不作决定。
提出者:法国管理学家D·L·福克兰
点评:当不知如何行动时,最好的行动就是不采取任何行动。

王安论断

犹豫不决固然可以免去一些作错事的机会,但也失去了成功的机遇。
提出者:美籍华裔企业家王安博士
点评:寡断能使好事由好变坏,果断可将危机转危为安。

十七、执行

格瑞斯特定理

杰出的策略必须加上杰出的执行才能奏效。
提出者:美国企业家H·格瑞斯特
点评:好事干实更好,实事办好愈实。

吉德林法则

把难题清清楚楚地写出来,便已经解决了一半。
提出者:美国通用汽车公司管理顾问查尔斯·吉德林
点评:杂乱无章的思维,不可能产生有条有理的行动

d、调控

十八、信息

沃尔森法则

把信息和情报放在第一位,金钱就会滚滚而来。
提出者:美国企业家s·m·沃尔森
点评:你能得到多少,往往取决于你能知道多少。

塔马拉效应

塔马拉是捷克雷达专家弗·佩赫发明的一种雷达,它与其他雷达的最大不同是不发射信号而只接收信号,故不会被敌方反雷达装置发现。
点评:善藏者人不可知,能知者人无以藏。

十九、监督

小池定理

越是沉醉,就越是抓住眼前的东西不放。
提出者:日本管理学家小池敬
点评:自我陶醉不易清醒,自以为是不喜批评。

赫勒法则

当人们知道自己的工作成绩有人检查的时候会加倍努力。
提出者:英国管理学家h·赫勒
点评:只有在相互信任的情况下,监督才会成为动力。

二十、控制

横山法则

最有效并持续不断的控制不是强制,而是触发个人内在的自发控制。
提出者:日本社会学家横山宁夫
点评:有自觉性才有积极性,无自决权便无主动权。

蝴蝶效应

"紊乱学"研究者称,南半球某地的一只蝴蝶偶尔扇动一下翅膀所引起的微弱气流,几星期后可变成席卷北半球某地的一场龙卷风。他们将这种由一个极小起因,经过一定的时间,在其他因素的参与作用下,发展成极为巨大和复杂后果的现象称为"蝴蝶效应"。
点评:善终者慎始,谨小者慎微。

阿什法则

承认问题是解决问题的第一步。
提出者:美国企业家m·k·阿什
点评:你愈是躲着问题,问题愈会揪住你不放。

二十一、法纪

洛克忠告

规定应该少定,一旦定下之后,便得严格遵守。
提出者:英国教育家洛克
点评:简则易循,严则必行。

热炉法则

当人用手去碰烧热的火炉时,就会受到"烫"的惩罚,其有以下三个特点:即时性、预警性、平等性。
点评:罪与罚能相符,法与治可相期。

二十二、改革

柯美雅定律

世上没有十全十美的东西,所以任何东西都有改革的余地。
提出者:美国社会心理学家m·r·柯美雅
点评:不拘于常规,才能激发出创造力。

达维多夫定律

没有创新精神的人永远也只能是一个执行者。
提出者:前苏联心理学家达维多夫
点评:只有敢为人先的人,才最有资格成为真正的先驱者。

自吃幼崽效应

美国硅谷企业竞争十分激烈,以至于各公司都积极寻找自己的致命弱点,所有公司共同的生存之道是:拿出更好看产品来击败自己的原有产品。有人将这种行为戏称为"自吃幼崽"。
点评:1、自己不逼自己,别人迟早会逼你。2、敢于对过去告一个段落,才有信心掀开新的一章。

二十三、创新

舍恩定理

新思想只有落到真正相信它,对它着迷的人手里才能开花结果。
提出者:美国麻省理工学院教授舍恩
点评:只有信之不疑,才能持之以恒。

吉宁定理

真正的错误是害怕犯错误。
提出者:美国管理学家h·吉宁
点评:不怕错误的人,错误往往也离他最远。

卡贝定理

放弃是创新的钥匙。
提出者:美国电话电报公司前总经理卡贝
点评:在未学会放弃之前,你将很难懂得什么是争取。

二十四、考评

吉普林忠告

将成败同等看待。
提出者:英国作家、诺贝尔文学奖获得者吉普林
点评:如果不明白失败是什么,那么对成功的理解也是片面的。

史华兹论断

所有"不幸事件",都只有在我们认为它不幸的情况下,才会真正成为不幸事件。
提出者:美国管理心理学家d·克华兹
点评:若能坏中看好,终会好上加好。

e、绩效

二十五、竞争

廷克定律

如果你处在第二的位置,你就总想努力去争作第一。
提出者:英国管理学家哈罗德·廷克
点评:欲往高处走,须向高处看。

鲁尼恩定律

赛跑时不一定快的赢,打架时不一定弱的输。
提出者:奥地利经济学家r·h·鲁尼恩
点评:无备,强不抵弱,出奇,弱可胜强。

史密斯原则

如果你不能战胜他们,你就加入到他们之中去。
提出者:美国通用汽车公司前董事长r·史密斯
点评:竞争使人进步最快,合作让人得到最多。

二十六、营销

阿尔巴德定理一个企业经营成功与否,全靠对顾客的要求了解到什么程度。
提出者:匈牙利全面质量管理国际有限公司顾问波尔加·韦雷什·阿尔巴德
点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。

冰淇淋哲学

卖冰淇淋必须从冬天开始,因为冬天顾客少,会逼迫你降低成本,改善服务。如果能在冬天的逆境中生存,就再也不会害怕夏天的竞争。
提出者:台湾著名企业家王永庆
点评:逆境不错,顺境更好。

二十七、广告

布里特定理

商品不作广告,就像姑娘在暗处向小伙子递送秋波,脉脉此情只有她自己知道。
提出者:英国广告学专家s·布里特
点评:要推而广之,先广而告之。

伯内特定理

只有占领头脑,才会占有市场。
提出者:美国广告专家利奥·伯内特
点评:脍炙人口才会耐人寻味,深得人心方可引人入胜。

拉图尔定律

一个好品名可能无助于劣质产品的销售,但是一个坏品名则会使好产品滞销。
提出者:法国诺门公司德国分公司负责人苏珊·拉图尔
点评:取名的艺术,亦是取得成功的艺术。

赫斯定律

广告超过12个字,读者的记忆力要降低50%。
提出者:澳大利亚广告家h·赫斯
点评:忘却即等于抛弃。

二十八、公关

玛丽法则

假如还没有破,就不要去修它,免得弄巧成拙。
提出者:美国著名企业家玛丽·凯·阿什
点评:弄巧之所以成拙,往往是因为本来就无巧可弄。

弗里施定理

没有满意的工作人员,就没有满意的顾客。
提出者:德国慕尼黑企业咨询顾问弗里施
点评:协调内外关系,从协调内部关系开始。

反哺效应

动物学家将某些动物长大后把觅到的食物给予其父母的行为称为反哺。
点评:给别人好处的人,往往也是得到好处最多的人。

史崔维兹定理

如果你为获得好处而帮助他人,就不算帮助他人。
提出者:美国社会心理学家g·史崔维兹
点评:动机不纯,行为失真。

二十九、谈判

奥狄思法则

在每一次谈判中,你都应准备向对方作出让步。
提出者:美国谈判专家j·s·奥狄思
点评:争,丈不足;让,寸有余。

居家效应

一个人在家里或自己最熟悉的环境中,言谈举止表现得最为自信和从容。
点评:没有实力垫底,自信永远是苍白的。

尼伦伯格原则

一场圆满的、成功的谈判,每一方都应是胜利者。
提出者:美国著名谈判学家尼伦伯格
点评:总想自己得势,必然势不两立。

比林定律

一生中的麻烦有一半是由于太快说"是",太慢说"不"造成的。
提出者:美国幽默作家比林
点评:1、没有否决权,发言权也很容易被剥夺。2、对不该让步的事不让步,别人反而更容易给你让步。

三十、交往

克林纳德法则

与人相处得好坏,在很大程度上取决于我们用什么方式与人打交道。
提出者:美国人际关系学家h·h·克林纳德
点评:交之有道,能打好交道;来而无往,难有常来往。

忌讳效应

因风俗习惯或个人理由等,对某些言语或举动有所顾忌,积久成为禁忌。
点评:知道别人不喜欢什么,比知道别人喜欢什么更重要。

弗里德曼定律 

当一个人的需要可以满足另一个人的需要时,两人就趋于互相喜欢。
提出者:美国心理学家n·w·弗里德曼
点评:有利益与利益的相互补充,才会有需要与需要的相互满足。

三十一、成果

基利定理

容忍失败,这是人们可以学习并加以运用的极为积极的东西。
提出者:美国多布林咨询公司集团总经理拉里·基利
点评:1、成功者之所以成功,只不过是他不被失败左右而已。2、不许失败,无异于不许成功。

沸腾效应

水温升到99度,还不是开水,其价值有限;若再添一把火,在99度的基础上再升高1度,就会使水沸腾,并产生大量水蒸气来开动机器,从而获得巨大的经济效益。
点评:只差一点点,往往是导致最大差别的关键。

王永庆法则

节省一元钱等于净赚一元钱。
提出者:台湾企业界"精神领袖"台塑总裁王永庆
点评:赚钱要依赖别人,节省只取决自己。

AJAX架构之Dojo篇

出处【饮水思源】: http://www.51ajax.com/

一、前言
自去年开始,AJAX一下成了关注的技术热点,各种AJAX框架迅速的发展了起来,其中又分为客户端AJAX架构,服务器端AJAX架构等,其中DojoToolkit做为一个优秀的客户端AJAX架构,被越来越多的人所关注,学习。自去年开始,AJAX一下成了关注的技术热点,各种AJAX框架迅速的发展了起来,其中又分为客户端AJAX架构,服务器端AJAX架构等,其中DojoToolkit做为一个优秀的客户端AJAX架构,被越来越多的人所关注,学习。

二、Dojo简介

作为早期的开源AJAX架构之一,Dojo开始于2004年9月,网址是 http://www.dojotoolkit.org,由JotSpot的Alex Russell所领导。

Dojo是一个开源的JavaScript工具包,本身预置了很多模块,可以实现完整的轻量级窗口组件及很多功能。Dojo的包加载机制(Package System)可以实现动态加载所需模块,而且用户可以编写自己的Dojo扩展模块,有很好的灵活性。

三、技术特点

1.文件结构

Dojo目前最高版本号是0.3.1,它的文件主要由一个包含主要功能的核心代码文件(Dojo.js)和众多的Javascript文件组成。使用时可以根据包机制,动态载入所需模块。

根据核心代码包含模块的不同,又细分为以下多个版本:
·AJAX版本:可以创建带有AJAX应用程序,集成复杂的可视效果,并使用事件模块。
·Widget版本:包括与小器件实现松散耦合的 HTML 和CSS 模板能力,提供明确分离的样式、内容和逻辑。
·Event and I/O版本:包括事件模块及I/O模块
·Event版本:包括事件模块
·Kitchen Sink版本:该版本包括整个工具集合

以上版本分别适用于不同的场合。用户也可以根据自己的需求重新构建自己的核心代码文件,只包含自己常用的模块,以避免频繁动态加载常用的模块。

2.程序结构

Dojo官方的定义中,将Dojo称之为Toolkit(工具包),不是Framework(只是Framework的一部分),也不是Library(在Library之上又加了一层封包系统)。Dojo包括了Javascript本身的语言扩展,以及各个方面的工具类库,和比较完善的UI组件库。

如下图:


从图中也可看出,Dojo的设计结构非常合理,且扩展性非常强,能够不断增加新的功能,且保证程序高效的运行。

四、官方资源

Dojo的官方网站有以下资源,可以帮助我们很快的熟悉Dojo的结构,当然,因为Dojo有丰富的功能,要完全掌握还需要在实际开发中逐渐掌握。

1. Dojo手册(The Dojo Manual)
网址:http://manual.dojotoolkit.org/
系统地介绍Dojo的机制,使用方法,示例代码等

2.Dojo邮件列表(The Dojo Mailing Lists)
可以讨论交流在使用Dojo中遇到的问题,或希望改进的建议
申请加入地址:http://dojotoolkit.org/mailman/listinfo/dojo-interest
查看存档:http://news.gmane.org/gmane.comp.web.dojo.user

3.Dojo错误跟踪系统(Bug Tracking)
网址:http://trac.dojotoolkit.org/
可以提交有效地发现bug,提交bug,以便能够及时地消除Dojo中的bug

4.代码仓库(The Dojo Subversion Repository)
网址:http://trac.dojotoolkit.org/browser
可以很方便地获得最新版本的Dojo程序包

5.The Dojo Wiki
网址:http://dojo.jot.com/
Dojo Wiki的内容类别相对比较丰富,涉及到Dojo的各个方面。

6.IRC
聊天室地址:irc.freenode.net

7.Dojo程序包中附带的Demo程序
提供了8大类近30个Demo程序,可以在实践中更快地掌握Dojo的用法。

提示:推荐加入Dojo的邮件列表,并仔细研究示例代码,这样能更快地掌握Dojo的使用方法。

五、发展前景

1.技术层面
与其它AJAX框架相比,Dojo设计的包加载机制(Package System)和模块化(Libraries)的结构,能保持更好的扩展性,提高执行性能,减轻了用户开发的工作量,并保持一定的灵活性(用户可以自己编写扩展)。

2.市场层面
Dojo现在发展迅猛,得到广泛的支持,并成立了Dojo 基金会 , IBM 、AOL 、SUN这些大公司和WebWork、Tapestry、Open Laszlo等开源团队都是dojo基金会的成员,雄厚的后盾保证了Dojo可以持续的发展下去。

3.开发团队
在Alex Russell的领导下,Dojo的开发团队有着强大的开发能力,从目前版本提供的功能、质量及更新的速度我们就可以看出来了。另外近期Dojo将会发布0.4.0。

4.用户群体
由于Dojo出色的设计,越来越多的AJAX专家及新手加入到了Dojo的开发者中,这些开发者也会相应地动Dojo的发展。

5.学习资源
Dojo官方网站有着丰富的学习资源(见“官方资源”一节),可以帮助人们更快地掌握Dojo,减少学习成本。

六、结语

Dojo可以帮助开发人员开发大型的AJAX项目,并有助于构建健壮的代码,节省开发时间。Dojo背后强大的支持后盾也可以保证持续不断的补充新功能,有助于我们脱离低层重复的工作,专注于在此基础上进行开发。

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/9347.htm

fckeditor 中javascript做copy操作的写法

1. 如果是ie,copy到剪贴板自然好办,如果不是ie,这里使用了flash来做copy操作

//===============================Copy to clipboard=================================//

function CopyText(id) { 
    
//copyToClipboard(document.getElementById(id).value); 
    
if (document.getElementById(id
))     {
        var 
tocopy=document.getElementById(id).innerHTML
;
        
tocopy=tocopy.replace(/&amp;/g"&"
); 
        
copy(tocopy
);
    }
}

function copy(text2copy) {
    if (
window.clipboardData
) { 
        
window.clipboardData.setData("Text",text2copy
); 
    } else {
        var 
flashcopier ‘flashcopier’

        if(!
document.getElementById(flashcopier
)) { 
            var 
divholder document.createElement(‘div’); divholder.id flashcopier

            
document.body.appendChild(divholder
); 
        } 
        
document.getElementById(flashcopier).innerHTML 

        var 
divinfo ‘<embed src="’+absbaseurl+‘images/others/_clipboard.swf" FlashVars="clipboard=’+escape(text2copy)+‘" width="0" height="0" type="application/x-shockwave-flash"></embed>’

        
document.getElementById(flashcopier).innerHTML divinfo
;
        
alert(jslang[72
]);
    } 
}

function copyToClipboard(meintext)
{
     if (
window.clipboardData

       {
       
alert("ie"
);
       
// the IE-manier
       
window.clipboardData.setData("Text"meintext
);
       
       
// waarschijnlijk niet de beste manier om Moz/NS te detecteren;
       // het is mij echter onbekend vanaf welke versie dit precies werkt:
       
}
       else if (
window.netscape

       { 
       
       
// dit is belangrijk maar staat nergens duidelijk vermeld:
       // you have to sign the code to enable this, or see notes below 
       
netscape.security.PrivilegeManager.enablePrivilege(‘UniversalXPConnect’
);
       
       
// maak een interface naar het clipboard
       
var clip Components.classes[‘@mozilla.org/widget/clipboard;1’].createInstance(Components.interfaces.nsIClipboard
);
       if (!
clip
) return;
       
alert("mozilla"
);
       
// maak een transferable
       
var trans Components.classes[‘@mozilla.org/widget/transferable;1’
]
                      .
createInstance(Components.interfaces.nsITransferable
);
       if (!
trans
) return;
       
       
// specificeer wat voor soort data we op willen halen; text in dit geval
       
trans.addDataFlavor(‘text/unicode’
);
       
       
// om de data uit de transferable te halen hebben we 2 nieuwe objecten 
       // nodig om het in op te slaan
       
var str = new Object
();
       var 
len = new Object
();
       
       var 
str Components.classes["@mozilla.org/supports-string;1"
]
                    .
createInstance(Components.interfaces.nsISupportsString
);
       
       var 
copytext=meintext
;
       
       
str.data=copytext
;
       
       
trans.setTransferData("text/unicode",str,copytext.length*2
);
       
       var 
clipid=Components.interfaces.nsIClipboard
;
       
       if (!
clip) return false
;
       
       
clip.setData(trans,null,clipid.kGlobalClipboard
);
       
       }
       
alert("Following info was copied to your clipboard:\n\n" meintext
);
       return 
false
;
}

中文分词软件 LibMMSeg

xapian 是不支持中文的,但是可以通过LibMMSeg来弥补改缺憾。

LibMMSeg 简介

LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。

MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm

Published: 1996-04-29
Updated: 1998-03-06
Document updated: 2000-03-12
License: Free for noncommercial use
Copyright 1996-2006 Chih-Hao Tsai (Email: hao520 at yahoo.com )

您可以在Chih-Hao Tsai’s Technology Page找到算法的原文。

LibMMSeg 采用C++开发,同时支持Linux平台和Windows平台,切分速度大约在300K/s(PM-1.2G),截至当前版本(0.7.1)LibMMSeg没有为速度仔细优化过,进一步的提升切分速度应仍有空间。

下载

下载 MMSeg 0.7.3

修订记录

0.7.3
– 2008.05.27 修正 Makefile 无法安装csr_typedefs.h的问题
– 2008.05.27 修正 x64系统上编译无法作为动态库的一部分编译的问题

0.7.2
– 2008.05.19 修正 指定的目录中无词典不提示错误的问题
– 2008.05.19 新增 Ruby 的调用API

0.7.1
– 2008.04.23 修正了在类似 “english 中文 english" 的句子,切分不正确的问题

0.7
– 第一次发行

安装

Window平台

打开源码包中src\win32 子目录下的对应的工程文件,目前LibMMSeg内置了VS2003和VS2005的工程文件。

Linux平台

在源码包根目录下执行:

./configure && make && make install

使用

词典的构造

mmseg -u unigram.txt

该命令执行后,将会产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt 必须为UTF-8编码。

词典文件格式:

….
河 187
x:187
造假者 1
x:1
台北队 1
x:1
湖边 1
……

其中,每条记录分两行。其中,第一行为词项,其格式为:[词条]\t[词频率]。需要注意的是,对于单个字后面跟这个字作单字成词的频率,这个频率需要在大量的预先切分好的语料库中进行统计,用户增加或删除词时,一般不需要修改这个数值;对于非单字词,词频率处必须为1。第二行为占位项,是由于LibMMSeg库的代码是从Coreseek其他的分词算法库(N-gram模型)中改造而来的,在原来的应用中,第二行为该词在各种词性下的分布频率。LibMMSeg的用户只需要简单的在第二行处填"x:1"即可。

用户可以通过修改词典文件增加自己的自定义词,以提高分词法在某一具体领域的切分精度,系统默认的词典文件在data/unigram.txt中。

分词

mmseg -d <dict_dir> tobe_segment.txt

其中,命令使用‘-d’开关指定词库文件所在的位置,参数dict_dir为词库文件(uni.lib )所在的目录;tobe_segment.txt 为待切分的文本文件,必须为UTF-8编码。如果一切正确,mmseg会将切分结果以及所花费的时间显示到标准输出上。

对特殊短语的支持

由于LibMMSeg是为Sphinx全文搜索引擎设计的,因此其内置了部分搜索引擎切分算法的特性,主要表现在对特殊短语的支持上。

在搜索引擎中,需要处理C++时,如果分词器中没有词组C++,则将被切分为C/x +/x +/x,在进一步的检索中,可能每个词会由于出现的过于频繁而被过滤掉,导致搜索的结果与C++相关度不高不说,也严重影响的全文搜索的速度。在LibMMSeg中,内置对特殊短语的支持。

其输入文件格式如下

// test commit
.net => dotnet
c# => csharp
c++ => cplusplus

其中左侧是待支持的特殊短语,右侧是左侧的特殊短语需要被转换为的短语。这一转换在分词前进行。

可以在行的开头加入’//’作为注释符号,发现符号’//’后,整行将被忽略。

特殊短语词库构造命令:

mmseg -b exceptions.txt

其中, 开关’-b’指示mmseg是要构造特殊短语词库;exceptions.txt是用户编辑的特殊短语转换规则。

该命令执行后,将在当前目录下产生一个名为"synonyms.dat"的文件,将该文件放在"uni.lib"同一目录下,分词系统将自动启动特殊短语转换功能。

注意:

1、在启用了该功能后,如果分词系统发现了一个特殊短语,将直接输出其在右侧对应的替换的值;

2、右侧被替换的值,请保证不会被分词器进行切分。(eg. C++ => C# 这个转换的意义不大,并且可能导致C++这个短语永远无法被检索到!)

 

附录:

MMSeg算法说明

首先来理解一下chunk,它是MMSeg分词算法中一个关键的概念。Chunk中包含依据上下文分出的一组词和相关的属性,包括长度(Length)、平均长度(Average Length)、标准差的平方(Variance)和自由语素度(Degree Of Morphemic Freedom)。下面列出了这4个属性:

    

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

        

            

            

        

    

属性 含义
长度(Length) chuck中各个词的长度之和
平均长度(Average Length) 长度(Length)/词数
标准差的平方(Variance) 同数学中的定义
自由语素度(Degree Of Morphemic Freedom) 各单字词词频的对数之和

 

Chunk中的4个属性只有在需要该属性的值时才进行计算,而且只计算一次。

其次来理解一下规则(Rule),它是MMSeg分词算法中的又一个关键的概念。实际上我们可以将规则理解为一个过滤器(Filter),过滤掉不符合要求的chunk。MMSeg分词算法中涉及了4个规则:

        

  • 规则1:取最大匹配的chunk (Rule 1: Maximum matching)
  •     

  • 规则2:取平均词长最大的chunk (Rule 2: Largest average word length)
  •     

  • 规则3:取词长标准差最小的chunk (Rule 3: Smallest variance of word lengths)
  •     

  • 规则4:取单字词自由语素度之和最大的chunk (Rule 4: Largest sum of degree of morphemic freedom of one-character words)

这4个规则符合汉语成词的基本习惯。

再来理解一下匹配方式复杂最大匹配(Complex maximum matching):

复杂最大匹配先使用规则1来过滤chunks,如果过滤后的结果多于或等于2,则使用规则2继续过滤,否则终止过滤过程。如果使用规则2得到的过滤结果多于或等于2,则使用规则3继续过滤,否则终止过滤过程。如果使用规则3得到的过滤结果多于或等于2,则使用规则4继续过滤,否则终止过滤过程。如果使用规则 4得到的过滤结果多于或等于2,则抛出一个表示歧义的异常,否则终止过滤过程。

最后通过一个例句–“研究生命起源来简述”一下复杂最大匹配的分词过程。MMSeg分词算法会得到7个chunk,分别为:

    

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

    

编号 chunk 长度
0 研_究_生 3
1 研_究_生命 4
2 研究_生_命 4
3 研究_生命_起 5
4 研究_生命_起源 6
5 研究生_命_起 5
6 研究生_命_起源 6

使用规则1过滤后得到2个chunk,如下:

    

        

            

            

            

        

        

            

            

            

        

        

            

            

            

        

    

编号 chunk 长度
4 研究_生命_起源 6
6 研究生_命_起源 6

计算平均长度后为:

    

        

            

            

            

            

        

        

            

            

            

            

        

        

            

            

            

            

        

    

编号 chunk 长度 平均长度
4 研究_生命_起源 6 2
6 研究生_命_起源 6 2

使用规则2过滤后得到2个chunk,如下:

    

        

            

            

            

            

        

        

            

            

            

            

        

        

            

            

            

            

        

    

编号 chunk 长度 平均长度
4 研究_生命_起源 6 2
6 研究生_命_起源 6 2

计算标准差的平方后为:

    

        

            

            

            

            

            

        

        

            

            

            

            

            

        

        

            

            

            

            

            

        

    

编号 chunk 长度 平均长度 标准差的平方
4 研究_生命_起源 6 2 0
6 研究生_命_起源 6 2 4/9

使用规则3过滤后得到1个chunk,如下:

    

        

            

            

            

            

            

        

        

            

            

            

            

            

        

    

编号 chunk 长度 平均长度 标准差的平方
4 研究_生命_起源 6 2 0

匹配过程终止。最终取“研究”成词,以相同的方法继续处理“生命起源”。

分词效果:

研究_生命_起源_
研究生_教育_

 

摘自: http://www.coreseek.com/index.php?page=mmseg

 

相关软件: http://www.coreseek.com/opensource/Sphinx/

Sphinx 官方网站: http://www.sphinxsearch.com/