Tuesday, May 5, 2009
考试
51 B
52 B
53 C
54 B
55 AB
56 A
57 D
58 C
59 B
60 A
61 C
62 A
63 D
64 D
65 C
66 A
67 A
68 C
69 D
Thursday, October 9, 2008
贝叶斯决策理论
模式分类(Pattern Classification) 第二章 贝叶斯决策理论
在第一节介绍中,给出了在决策过程中,只用先验概率的不足:只能决策一次,在以后的过程中给出的决策结果都是一样的,这个用在决策论中很不足。
究其原因,是在决策过程中,使用的信息太少。没有用feature,给出了calss-conditional probability density也就是类条件概率密度。 先验概率 + 类条件概率密度 给出了决策信息的组合。同时给出了贝叶斯公式,在该章,或者是模式分类很大一块上,都是基于这个公式做了一个问题的转化。 将先验概率 + 类条件概率密度 转化为后验概率,从而指导我们分类。
给出后验概率并不代表就给出了分类方法或者说决策规则。引入了最小化错误概率(minimize the probability of error),这个才是我们的目的。用这给出了贝叶斯决策规则,让规则不和后验概率绑定,是为了以后我们简化计算,找到问题的本质,提供余地。所以就可以写出很多的决策规则,虽然都和后验概率有那么点关系。
那么一个决策过程的大体框架搭设好了,以后就是对这个框架具体化了。这个是贝叶斯公式在模式分类中应用的,理论基础。一切基础都是构建在其之上,修改一些条件,从而去适合一些情况,得到一些决策规则。
贝叶斯决策理论的形式上扩展,在此节,给出了用数学语言来表示贝叶斯决策问题。一个类向量,feature空间,feature向量等。用它们做基础进行给负责情况下,贝叶斯决策问题的数学推导。而且还引入了"风险"概念,让决策目的更明确了,从最小化错误概率(minimize the probability of error)到最小化风险,从而使得决策理论更有效应用于实际问题。
用一个两—类分类问题,提出了如何利用贝叶斯公式,后验概率推导我们的决策函数
最小错误率分类节,给出了从后验概率,在有损失函数的情况下,如何推导出决策规则。提出了Minimax最小化最大可能总风险准则,Neyman-Pearson准则。
分类器,判定函数,决策面。 给出了决策规则,在实际中的表示和实现。它们从数学推导中出发,用这些概念来构造分类器,也就是分类的最后输入。
正态分布密度,在这节,给出了研究最活跃,透彻的正态分布模型,一般的feature是以这样的概率密度的随机分布。有单变量的和多变量。一些数学基础,对于我来说,有些难,但是他是以后分析的基础。
在假定正态分布基础上,对判定函数进行了推导,用一些特殊的假设,来简化我们的判断式。一般正态分布也就有个协方差矩阵,我们一般在其基础上进行讨论。把其简单化,复杂化等,都是在协方差矩阵的基础上。在该节给出了好多图像例子,可以对判断面有一些直观的认识。使得我们明白,我们做的数学模型,是什么样子的架构,图像一画出,我们就很容易了解我们的模型复杂度。好好体会这些图像吧。
第七节,从错误概率和错误积分角度讲分类器的特性,用联合密度的加(离散情况)或者积分(连续情况)来得到错误概率,对于多类问题,求错误概率太麻烦,所以用正确概率来表示分类器的特性。
第八节,给出了正态分布的错误边界的上界,Chernoff边界和Bhattacharya边界,两者的区别,和求法对我来说,好像难了点,先有个大致了解吧。这些讲述了信号检测用的ROC曲线,在Data Mining书了有涉及,大致了解。 这些方法,最主要的是搞清在实际中如何应用,然后建造和上述边界相同的模型处理,再套用上述求法。
第九节,如果特征值是离散的,那么贝叶斯决策理论如果处理。将积分运算,变成加运算。
第十节,也是给出了实际中可能遇到的情况,正如上面的离散情况,如果遇到缺失值或者噪声值如何办,这里给出的处理是,在缺失值所在领域积分,求其均值。噪声的话,就需要个噪声条件概率,用它去求后验概率。
第十一节,贝叶斯置信网,我是第一次看到(孤陋寡闻阿),感觉这么处理随机变量的有点粗糙,因为它将相关关系,都处理为因果关系,而是还是单向的,我的感觉,事物的相关关系,至少也应该是想神经网络那样错综复杂的,但这样一个模型应该不好计算吧。不过在实际应用中,贝叶斯置信网应该很不错,事物之间的依赖并不要求那么的确定(事物关系之间的本质关系,那是那么容易就说清呢,神经网络研究告诉我们,可能事物,比如,神经元,自身的结构不负责,复杂的是事物之间的联系,反馈,加权值等等,它们构造了复杂系统的特性),但是在实际应用中,却给了很大的指导作用,从而不会让我们迷失了复杂的关系面前,而毫无办法。置信网络是由,节点(事物,父节点,子节点),连接(因果关系),和条件概率表(父节点,如何对子节点产生影响)表示。 用置信网络可以使得求联合概率成为可能,使联合概率等价于一些条件概率的乘积。
第十二节,同样是从应用考虑,如果决策时,使用上下文的信息,也就是,上次的决策,对下面决策有什么有用信息。给出了数学表示,并没有深究,据说第三章还有描述。
这一章,总的来说,是对贝叶斯决策的一个介绍性描述,给出了最基本的理论基础,先验概率和后验概率,然后如何用后验概率,构建决策规则,在构建过程中考虑错误概率,或者错误风险(成本)的情况。并着重讲述了,当特征值(或称事例的属性值)的概率分布为正态分布的数学求解,仔细体会它的求解过程,可以指导我们面对其他分布情况的求解。而且还给出了评估该模型的简单准则。在其简单模型上,有实际中遇到的问题,进行了一些扩展,缺失值,噪声值,离散值(不同于正态分布的概率分布),组合决策等实际扩展。还有贝叶斯置信网,这个很有用的求联合分布的工具,对于相关性作了一些简化和探讨。
[广告] 特惠尝必胜客26道新品
人工智能
人工智能精选网站
| 1. | 机器人爱好者 介绍最机器人技术,机器人新闻,还有论坛以供交流。 www.roboticfan.com |
| 2. | Artificial Intelligence Laboratory<English> www.ai.mit.edu |
| 3. | American Associationfor Artificial Intelligence<English> www.aaai.org |
| 4. | 中科院自动化所人工智能实验室 中国科学院自动化研究所人工智能实验室源于早期的智能系统实验室,具有较长的科学研究历史和浓厚的学术氛围。 ai.ia.ac.cn |
| 5. | International Joint Conference on Artificial Intelligence (IJCAI)<English> www.ijcai.org |
| 6. | 恋雪 包括站长自己有关人工智能,模式识别技术的文章、作品。 www.lovesnow.com |
| 7. | 华中科技大学图像识别与人工智能研究所 iprai.hust.edu.cn |
| 8. | 先进人机通信技术联合实验室 从事多媒体技术和智能人机交互技术等研究的机构。 www.jdl.ac.cn |
| 9. | Game AI Page www.gameai.com |
| 10. | HNC自然语言理解处理网站 中国科学院声学研究所主办,介绍HNC知识, 报道HNC动态。 www.hncnlp.com |
| 11. | Artificial Intelligence Lab<English> ai.eecs.umich.edu |
| 12. | 中国情感计算网站 探讨情感计算和智能交互技术的发展动态与趋势。 www.affectivecomputing.org |
| 13. | Generation5.org www.generation5.org |
| 14. | MIT Media Lab Machine Listening Group sound.media.mit.edu |
| 15. | 西安交大人机所 西安交通大学人工智能与机器人研究所简介。 www.aiar.xjtu.edu.cn |
| 16. | 人工智能研究者俱乐部 一个专门为人工智能研究者创建的网站。 www.souwu.com |
| 17. | Artificial Intelligence Applications Institute<English> www.singinst.org |
| 18. | Artificial Intelligence Laboratory<English> www.ai.sri.com |
| 19. | 中国科大人工智能实验室 介绍其主要成员、科研课题、以及学术资料。 ailab.ai.ustc.edu.cn |
| 20. | BotSpot www.botspot.com |
| 21. | 计算机语言与机器人教学 包括机器人的发展史、机器人的分类等知识。 www.student.gov.cn/robot |
| 22. | A.I. Link www.ailink.org |
| 23. | Artificial Intelligence Research Group<English> www.cs.washington.edu/ai |
| 24. | Department of Medical Cybernetics and Artificial Intelligence<English> www.ai.univie.ac.at/../imkai.html |
| 25. | Japanese Society for AI<English> www.ai-gakkai.or.jp/../english.html |
| 26. | Michigan State Intelligent Systems Lab islnotes.cse.msu.edu |
| 27. | 中科院自动化所fingerpass 指纹识别研究、指纹新闻、网络安全与数字认证。 www.fingerpass.net |
| 28. | Keele大学机器知觉研究组<English> 成员由计算机系、神经科学及心理学系人员构成。研究内容包括图像处理、声音处理、颜色处理等。 www.keele.ac.uk/../mprg.html |
| 29. | Lab for Artificial Intelligence Research<English> www.cis.ohio-state.edu/lair |
| 30. | New Scientist: Artificial Intelligence and A-Life www.newscientist.com/../ai |
| 31. | University of Bristol (United Kingdom) - Artificial Intelligence Group www.enm.bris.ac.uk/ai |
| 32. | 合肥工业大学人工智能与数据挖掘实验室 含实验室简介、科学研究动态、学术研讨与交流。 www1.hfut.edu.cn/../kddweb |
| 33. | Ai - Artificial Intelligence<English> www.a-i.com |
| 34. | ArtificialBrains.com www.artificialbrains.com |
| 35. | 神经计算信息处理及应用研究室 介绍研究宗旨、研究内容、科研项目等信息。 www.114who.com |
| 36. | Staffordshire University - AI Research Group www.soc.staffs.ac.uk/../ai |
| 37. | Artificial Intelligence Depot<English> www.ai-depot.com |
| 38. | 大连市CBE学会 大连市人工智能与计算机辅助教育学会。含学会简介、教学基地、信息技术教育等。 www.dlcbe.org.cn |
| 39. | 俄勒冈大学计算智能研究实验室<English> 计算机科学系下的进行人工智能基础研究的机构。 cirl.uoregon.edu |
| 40. | 南京大学人工智能实验室 主要研究方向为人工智能与知识工程、神经计算等。 ai.nju.edu.cn |
| 41. | Odyssey研究协会 进行人工智能的研究以及发展规划,机器学习,未知系统及概率论的研究。 www.oracorp.com |
| 42. | Rio Grande Institute for Soft Computing www.riosoft.nmsu.edu |
| 43. | Canadian Society for the Computational Studies of Intelligence www.cscsi.org/../CSCSI |
| 44. | 江苏大学人工智能站点 介绍人工智能研究,发展人工智能科学。 chengxianyi.6to23.com |
| 45. | Gnod www.gnod.net |
| 46. | 中国人工智能网 以服务于广大人工智能、模式识别、数字图像处理及相关领域科研人员和爱好者为根本宗旨,开设论文文章,资源下载,登陆搜索,网站联盟,开发论坛等服务栏目。含人工智能,模式识别,数字图像处理等。 www.ChinaAI.org |
| 47. | Artificial Intelligence Applications Institute<English> www.aiai.ed.ac.uk |
| 48. | Center for Intelligent Machines www.cim.mcgill.ca |
| 49. | Institute for Human and Machine Cognition - University of West Florida www.ihmc.us |
| 50. | IRIDIA - Universite' Libre de Bruxelles - Artifical Intelligence Lab iridia.ulb.ac.be |
| 51. | Istituto Dalle Molle di Studi sull'Intelligenza Artificiale www.idsia.ch |
| 52. | Laboratorio de Inteligencia Artificial www.lia.ufc.br |
| 53. | University of Toronto - Enterprise Integration Laboratory www.eil.utoronto.ca |
| 54. | 国家研究协会知识系统实验室 |
[广告] 特惠尝必胜客26道新品
Sunday, October 5, 2008
hashcode
解析Java对象的equals()和hashCode()的使用
在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况 下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下,这两个函数最好是自己设计,才能确保整个程序的正常运行。最常见的是当 一个对象被加入收集对象(collection object)时,这两个函数必须自己设计。更细化的定义是:如果你想将一个对象A放入另一个收集对象B里,或者使用这个对象A为查找一个元对象在收集对 象B里位置的钥匙,并支持是否容纳,删除收集对象B里的元对象这样的操作,那么,equals()和hashCode()函数必须开发者自己定义。其他情 况下,这两个函数是不需要定义的。equals():
它是用于进行两个对象的比较的,是对象内容的比较,当然也能用于进行对象参阅值的比较。什么是对象参阅值的比较?就是两个参阅变量的值得比较,我们 都知道参阅变量的值其实就是一个数字,这个数字可以看成是鉴别不同对象的代号。两个对象参阅值的比较,就是两个数字的比较,两个代号的比较。这种比较是默 认的对象比较方式,在Object这个对象中,这种方式就已经设计好了。所以你也不用自己来重写,浪费不必要的时间。对象内容的比较才是设计equals()的真正目的,Java语言对equals()的要求如下,这些要求是必须遵循的。否则,你就不该浪费时间:
对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
反射性:x.equals(x)必须返回是“true”。
类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。 hashCode():这 个函数返回的就是一个用来进行赫希操作的整型代号,请不要把这个代号和前面所说的参阅变量所代表的代号弄混了。后者不仅仅是个代号还具有在内存中才查找对 象的位置的功能。hashCode()所返回的值是用来分类对象在一些特定的收集对象中的位置。这些对象是HashMap, Hashtable, HashSet,等等。这个函数和上面的equals()函数必须自己设计,用来协助HashMap, Hashtable, HashSet,等等对自己所收集的大量对象进行搜寻和定位。这些收集对象究竟如何工作的,想象每个元对象hashCode是一个箱子的 编码,按照编码,每个元对象就是根据hashCode()提供的代号归入相应的箱子里。所有的箱子加起来就是一个HashSet,HashMap,或 Hashtable对象,我们需要寻找一个元对象时,先看它的代码,就是hashCode()返回的整型值,这样我们找到它所在的箱子,然后在箱子里,每 个元对象都拿出来一个个和我们要找的对象进行对比,如果两个对象的内容相等,我们的搜寻也就结束。这种操作需要两个重要的信息,一是对象的 hashCode(),还有一个是对象内容对比的结果。hashCode()的返回值和equals()的关系如下:
如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。
如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。
为什么这两个规则是这样的,原因其实很简单,拿HashSet来说吧,HashSet可以拥有一个或更多的箱子,在同一个箱子中可以有一个 或更多的独特元对象(HashSet所容纳的必须是独特的元对象)。这个例子说明一个元对象可以和其他不同的元对象拥有相同的hashCode。但是一个 元对象只能和拥有同样内容的元对象相等。所以这两个规则必须成立。设计这两个函数所要注意到的:如果你设计的对象类型并不使用于收集性对象,那么没有必要自己再设计这两个函数的处理方式。这是正确的面向对象设计方法,任何用户一时用不到的功能,就先不要设计,以免给日后功能扩展带来麻烦。
如果你在设计时想别出心裁,不遵守以上的两套规则,那么劝你还是不要做这样想入非非的事。我还没有遇到过哪一个开发者和我说设计这两个函数要违背前面说的两个规则,我碰到这些违反规则的情况时,都是作为设计错误处理。
当一个对象类型作为收集型对象的元对象时,这个对象应该拥有自己处理equals(),和/或处理hashCode()的设计,而且要遵守前面所说 的两种原则。equals()先要查null和是否是同一类型。查同一类型是为了避免出现ClassCastException这样的异常给丢出来。查 null是为了避免出现NullPointerException这样的异常给丢出来。如果你的对象里面容纳的数据过多,那么这两个函数 equals()和hashCode()将会变得效率低。如果对象中拥有无法serialized的数据,equals()有可能在操作中出现错误。想象 一个对象x,它的一个整型数据是transient型(不能被serialize成二进制数据流)。然而equals()和hashCode()都有依靠 这个整型数据,那么,这个对象在serialization之前和之后,是否一样?答案是不一样。因为serialization之前的整型数据是有效的 数据,在serialization之后,这个整型数据的值并没有存储下来,再重新由二进制数据流转换成对象后,两者(对象在serialization 之前和之后)的状态已经不同了。这也是要注意的。知道以上这些能够帮助你:1. 进行更好的设计和开发。2. 进行更好的测试案例开发。3. 在面试过程中让面试者对你的学识渊博感到满意。
Friday, September 26, 2008
铁齿李肇星这样向美国人解释西藏,当场雷倒对方
十一出游完全攻略
Thursday, September 25, 2008
君子不重则不威
子曰:君子不重则不威;学则不固;主忠信;无友不如己者;过则勿惮改。
此章小弟以为应断为五句,其中比较有问题的是“学则不固”及“无友不如己者”两句。
君子不重则不威:君子如果不厚重就会失去威严。
学则不固:此固字基本上有两解:一为坚固,作此解时学则不固需与上一句君子不重则不威合为一句,合解为:人如果不厚重则无法固守所学。另一解如孔安国所主张:固为固陋,如此学则不固四字自成一句,解为如果努力向学则不会固执蔽陋。事实上固字在论语中共出现于9章,其中以作固陋解的占最多,共4章(含本章),仅1章解为坚固。进一步分析之,用来形容抽象意义者,皆以固陋解较为妥当。述而篇:“俭则固”;子罕篇:“毋固”;宪问篇:“疾固也”;用来形容具体意义者,才以坚固解。卫灵公篇:“今夫颛臾,固而近于费”。而本章的“学”亦属抽象意义,故小弟以为应以固陋解较好。
主忠信:行事以忠信为主。
无友不如己者:此句亦有多种解释,说来说去都有点看不懂。所以还是用小弟拙见来解:孔子此句与下一句过则勿惮改皆是以假设语法来勉励我们,即孔子在勉励我们,如果发现朋友的某些修为超过自己时,应要加倍努力、迎头赶上,以达无友不如己者之境界。
过则勿惮改:此亦是假设语,万一真有过错的话,则不能怕改正,应有勇气来改过。
最后再把小弟以为比较合宜的解释整理一下: 君子如果不厚重,就会失去威严;如果努力向学则不会固执蔽陋;行事必须以忠信为主;假若发现朋友的某些修为超过自己时,应要加倍努力迎头赶上,以达无友不如己者之境界;万一真有过错的话,则不能怕改正,应有勇气来改过。
头花的寓言
在她十八岁那年的圣诞节,妈妈破天荒给了她二十美元,让她用这个钱给自己买一份圣诞礼物。
她大喜过望,但是还是没有勇气从大路上大大方方地走过。她捏着这些钱,绕开人群,帖着墙角朝商店走。
一路上,她看见所有人的生活都比自己好,心中不无遗憾地想,我是这个小镇上最抬不起头来,最寒碜的女孩子。看到自己特别心仪的小伙子,她又酸溜溜地想,今天晚上盛大的舞会上,不知道谁会成为他的舞伴呢?
她就这样一路嘀嘀咕咕地躲着人群来到了商店,一进门,她感觉自己的眼睛都被刺痛了,她看到柜台上摆着一批特别漂亮的缎子做的头花发饰。
正当她站在那里发呆的时候,售货员对她说,小姑娘,你亚麻色的头发真漂亮!如果配上一朵淡绿色的头花,肯定美极了。她看到价签上写着十六美元,就说我买不起,还是不试了,但是这个售货员已经把头花戴到她的头上了。
售货员拿起镜子让她看看自己。当这个小姑娘看到镜子里的自己时,突然惊呆了,她从来没有见过自己这个样子,她觉得这朵头花使她变得象天使一样容光焕发!
她不再迟疑,掏出钱来买下了这朵头花。她的内心无比陶醉,无比激动,接过售货员找的四美元后,转身就往外跑,结果在一个刚进门的老绅士身上撞了一下。她仿佛听到那个老人在叫她,但是已经顾不上这些了,就一路飘飘忽忽地往前跑。
她不知不觉跑到了镇子最中间的大路上,她看到所有人投给她的都是惊讶的目光,她听到人们在议论说:没想到这个镇子上还有如此漂亮的女孩子,她是谁家的孩子呢?她又一次遇见自己暗暗喜欢的那个男孩,那个男孩竟然叫住她说:不知今天晚上我能不能荣幸地请你做我圣诞舞会的舞伴?
这个女孩简直心花怒放!她想我索性就奢侈一回,用剩下的四美元回去再给自己买点东西吧,于是她又一路飘飘地回到了商店。
刚一进门,那个老绅士就微笑着对她说:孩子,我就知道你会回来的,你刚才撞到我的时候,这个头花也掉下来了,我一直在等你来取。
Thursday, September 18, 2008
XAMPP是什么
XAMPP是什么―xampp for windows又是什么?
XAMPP是什么
XAMPP是什么?XAMPP 是一个功能全面的 AMPP (Apache、MySQL、PHP、Perl)软件包,这是 Linux 平台上可以使用的几种非商业 AMPP 中间件之一。采用这种紧密的集成,XAMPP 可以运行任何程序:从个人主页到功能全面的产品站点(虽然这仅仅用于开发目的;出于安全考虑,XAMPP 还不适于用在产品服务器上)。
基本的软件包
基本的软件包包括系统、编程和服务器软件:
Apache,著名的 Web 服务器
MySQL,一种杰出、免费的开源数据库
PHP,一种编程语言(在撰写本文时版本为 4.3.8 和 5.0.1)
Perl,一种编程语言
ProFTPD,一个 FTP 服务器
OpenSSL,可以支持安全套接字层
图形软件包
XAMPP 包括以下与图形有关的软件包:
GD,"Graphics Draw"库
libpng,官方的 PNG 参考实现库
libjpeg,官方的 JPEG 参考实现库
ncurses,字符图形库
数据库软件包
如果没有以下的数据库软件包,怎么还能叫集成软件呢?
gdbm,标准的 UNIX® dbm 库的 GNU 实现
SQLite,一个相当小的、无需任何配置的 SQL 数据库引擎
FreeTDS,一个数据库,让 UNIX 和 Linux 程序可以访问 Microsoft® SQL 和 Sybase 数据库
XML 软件包
为了开发 XML 程序,XAMPP 应该包含以下软件包:
expat,一个 XML 解析器库
Salbotron,一个 XML 工具包
libxml,一个 XML C 解析器和 GNOME 工具包
PHP 软件包
为了开发 PHP 程序,XAMPP 应该包括以下软件包:
PEAR,PHP 库
一个 pdf 类,可以使用 PHP 生成动态的 PDF 文档
TURCK MMCache,一个 PHP 性能增强器
其他软件包
最后,XAMPP 中包含了以下软件包来展示自己的强大功能:
zlib,一个压缩库
mod_perl,在 Apache 中嵌入了一个永久的 Perl 解释器
gettext,一个工具集,可以帮助 GNU 软件包生成多语言的消息
mcrypt,一个加密程序
Ming,一个 Flash (SWF) 输出库
Freetype2,一个软件前端引擎
IMAP C-Client,一个邮件编程 API
Friday, September 12, 2008
支持google adsense
这100美元很容易赚么?我不这么认为。我的所有的Blog(至少有6-7个,不同领域的内容)都放有Google Adsense广告,即使这样我的第一张100美元支票,仍旧让我等上了整整一年多才挣到。那我为什么还要放这个推介呢?那是因为即使没有任何收入,我也愿意向别人推荐Google Adsense广告。
是,我知道Google Adsense也有很多的问题,比如广告和内容的相关性没有像Google说的那么好,比如对发布商非常苛刻的用户协议(不能公布统计数字,不能作弊,否则就会被干掉),等等。然而,我还真没有更好的选择可以推荐给我的朋友们。我反对强制性的广告,强制弹窗广告严重影响用户体验,只能帮用户练习快速关闭新窗口的技能。我反对内容无关的广告,我正在看一篇感人至深的文章时,一个突然冒出来的性用品广告可能会让我感到非常不快。我反对晃眼睛的广告,他们让我精力严重分散,甚至经常逼得我把整个页面关掉了事儿。
这是一个恶性的循环。因为广告是用干扰用户的方式推出的,所以往往效果不好。商家发现投放广告效果不好后,只能加大投放力度,这样就更近一步的干扰了用户,同时也更加降低的广告的效果。在这样的恶性循环下,种种掩耳盗铃的手段出现了,用户不是不爱点这些广告么,我们把广告放在滚动条那里,叫你一拖滚动条就点到;用户不是看到广告就关闭么,我们做个假的关闭按钮,点了以后其实是打开广告,等等等等。页面上广告越来越多,页面对用户的实际价值也就会越来越低,这些做法不仅仅在损害用户和商家的利益,而且他们在摧毁这个价值体系。他们在降低网络广告的可信度和含金量,这样的恶性循环发展下去,就会毁掉整个网络广告行业。
但是我不反对广告。有很多消息我们是从广告知道的,比如现在正在进行Google Code Jam大赛的消息,我就是在Donews的广告发现的。当我想租房子的时候,我甚至会去注意平时鄙视的电线杆广告。广告本应是消费者和商家的桥梁,帮助消费者找到需要的产品和服务,帮助商家找到消费者。一个不需要的信息在你眼前乱晃的时候就是垃圾,一个广告在你需要他的时候冒出来,那就是有价值的信息了。
Google Adsense正是把广告信息化有序化的一种努力。让广告出现在相关的搜索结果的旁边,让广告出现在内容相关的文章旁边,这些保证了看到广告的人正式需要这些广告的人。Google Adsense这种内容相关的,非强制性的广告成为一种标准后,我们的互联网会更加有价值,用户也会更容易找到他需要的东西
Thursday, September 11, 2008
超聪明司机
警察:我能看一下你的驾驶执照吗?
司机:我没有驾照,因为第五次酒后开车,我的驾照被吊销了。
警察:我可以看看你车子的牌照吗?
司机:这不是我的车,是我偷人家的。
警察:车是偷的?
司机:对。但是让我想一想……我想起来了,车主的牌照……噢,放在仪表签盘上的小柜子里面了。当我把我的手枪放进小柜子里时,我看见过车牌照。
警察:仪表盘上的小柜子里有一把手枪?
司机:是的,先生。我杀了这部车的女主人,把她放进车后边的行李箱里,然后,把我的枪放进了那个小柜子里。
警察:你是说后备箱里有一具女尸?
司机:是的,先生。
听到这里,警察大惊,立刻向警察局呼叫求援。很快,这部汽车被一群警察包围了。一名警官走向司机,去处理这一紧急情况。
警官:先生,我能看一下你的驾照吗?
司机:当然可以,给。
警官:车是谁的?
司机:我的,警官先生。这是我的牌照。
警官:你能打开仪表盘上的小柜子上我看看里面的手枪吗?
司机:我可以打开小柜子,长官。但是,里面没有什么手枪。
小柜子打开了,里面果然没有手枪。
警官:我被告知你车尾的行李箱里藏着一具尸体。你不介意打开它吧?
司机:没问题。
行李箱打开了,没有发现尸体。
警官:我不明白这是怎么回事。那名让你停车的警察说,你没有驾照,车是偷的,小柜子里有一把手枪,后备箱里装着一具尸体,难道是我们这位警察谎报吗?
司机:那当然!他还谎报我超速行驶了呢!
幽默问答
答:古月。
问:我的头像牛逼吗?
答:像。
问:大家见过公鸡下蛋吗?
答:没有,不过我见过CCTV说真话。
问:我新买了一处庄园,有多大说出来吓死你��我开车绕一圈足足用了两个半小时!!!
答:嗯,以前我也有这么一辆破车~
问:每天对着单位那群白痴讲话让我觉得前途很渺茫……
答:幸福吧你~因为对牛弹琴并不可怕,可怕的是一群牛每天对着你弹琴!
问:你们女人大夏天的戴胸罩不热吗?
答:我们不戴你们会热……
问:和女友ML时,女友好像喊了另外一个男人的名字……
答:你日了别人的女人你还有什么不满意的!!!
问:为什么胡主席访问日本,日本方面比较冷淡,甚至机场连欢迎标语都没有挂?
答:怎么挂?热烈欢迎中国老朋友来日?
问:去年到黑龙江谈生意,晚上找了个俄罗斯小姐狂干俩钟头,你猜射完后她对我说什么?嘿嘿~
答:Are�you�ready?
问:利用东西方信息不对称,很多国外地摊货到中国都变成了奢侈品,那中国有啥垃圾牌子在国外冒充高档货?
答:章子怡。
问:从来都觉得蝎子精是整部《西游记》里最美的女人,当蝎子精把唐僧逼到床上撩拨时,我心下不住地为唐僧鼓劲:从了,从了,咱就从了吧!但关键时刻,可恶的悟空出现了……
答:嗯,八戒出现了,这次改蝎子精不从了……
问:老爸送我老公一根鹿鞭,大家说这是啥意思?还有照片的说~
答:这是老一辈对青年一代的鞭策啊~~~
问:怀疑老婆红杏出墙,但苦于没证据……
答:如果你没本事做陈冠希,那就做谢霆峰吧~
问:《神雕侠侣》里小龙女胳膊上的守宫砂是什么东西,干什么用的?
答:守宫砂是处女的桌面快捷方式。
问:单位人都说我长得像韩国人,大家说像吗?(上照片)
答:因为你长得像个棒子,单位同事又不好意思明说,所以只好说你长得像韩国人!
问:帅有个屁用��到头来还不是被卒吃掉!
答:帅有士陪,有炮打,有马骑,有车坐,有相暗恋……帅怎么不好?!!
问:夏天要刮腋毛,否则穿短袖会影响淑女形象的~那再弱弱地问一句,**用刮吗?
答:不刮扎嘴!
问:问个欠扁的问题,为什么跳水运动员入水时裤衩不会被冲掉?
答:跳水运动员平时训练主要有两大方面:1.压水花;2.夹裤衩。
问:是中国人就抵制《古惑仔》之类的烂片,因为这种烂片很容易就把小孩教坏!
答:晕~像楼主这样的看《鼹鼠的故事》都会去学盗墓……
问:大家知道,从六教东侧往北的路是个下坡,刚才我来六教时突然看见一可爱MM骑车直冲而下,并高呼"太爽了!"引来不少行人侧目。现在回想起来,MM甜美的声音真是让人回味无穷啊~
答:明天我就把这丫头的车座再装回去!
问:反腐真的就这么难吗?
答:你割割自己的JJ看难不难!!
问:请用一句话形容中国国家地震台。
答:事后诸葛亮,事前猪一样!
问:美军在伊拉克不能抽身说明美国是个负责任的国家!!
答:那我股票被套牢说明我是个负责任的中国股民??
问:为什么警察抓坏人时都要鸣警笛?难道不怕坏人老大远就听到跑了?
答:上级单位来检查之前一般都会事先通知下级单位的~
问:萨达姆就义前仍振臂高呼,虽听不懂他在喊什么,但还是由衷地敬佩这位领袖!
答:萨达姆咒道:"中国哪个狗日的说'让领导先走'的!!!"
问:据香港翡翠台报道,今晨阿娇在其母亲陪同下到圣约翰女子医院做过检查,医院诊断报告证明其处女膜未见器质性损伤,不信大家可以浏览翡翠台网站��我永远的阿娇。
答:妈的,你是在嘲笑陈冠希的JJ小吗?!!
flex 是什么
运用Flash是完全可以做到flex的效果的,为什么还需要flex呢?这里面有两个原因:1:为了迎合更多的developers(开发者)。Flash天生是为了designer(设计者)设计的,界面还有flash的动画概念和程序开发人员格格不入,为了吸引更多的jsp/asp/php等程序员,Macromedia推出了Flex,用非常简单的.mxml来描述界面给jsp/asp/php程序人员使用.(x/d)html非常相似,而且mxml更加规范化、标准化。
2,为了一个标准。大家一定听说过微软下一代系统longhorn,在longhorn推出的同时微软也会推出新的语言xaml,一种界面描述语言,与之相应的就是smart client和flex非常相似的东西。Mxml和Xaml的也很相似… …这是人机交互技术的进步的重要体现,即内部逻辑与外部界面交互相分离。
Flex和j2ee/.net其实没什么关系,Macromedia用java做出来个应用把flash的技术融合到J2EE里面,再用.net的技术做出来个.net应用把flash技术融合到.net里面去;应该说flex解决了J2EE里面和.net里面最繁琐的问题那就是web 客户端的问题。微软比较卑鄙,在ie里面built-in(事先安装好了)很多控件,可以被.net调用比如datagrid(gridview),java就没有办法啦,只能用最原始的html一个tag一个tag地print,真是头疼,还有客户端的javascript是最难调试的,不论java还是.net都束手无策。
3、与FLEX学习相关
[相关链接]
Adobe公司Flex主页:http://www.adobe.com/cn/products/flex/
ACAA教育(Adobe官方高级Flex & AIR富互联网应用开发培训):http://www.acaa.cn/
FlexExamples:http://blog.flexexamples.com/
Adobe - Flex Developer Center http://www.adobe.com/devnet/flex/?sdid=ZFCT
中文FlexExamples(上百个包含代码的Flex例子,主要是翻译的):http://blog.minidx.com
RIAShanghai:http://riashanghai.com
Flex中文社区:http://www.flexcoders.cn/
蓝色理想网站的Flex入门教程:http://www.blueidea.com/tech/multimedia/2004/2130.asp
一个不错的英文Flex资源列表收集站点:http://ntt.cc
关于Flex的Blog:http://www.k-zone.cn/zblog/
《Flex 3.0 RIA开发详解:基于ActionScript3.0实现》 黄曦 电子工业出版社 2008
《Flex与ActionScript编程》. 王睿. 机械工业出版社. 2008
xml文件过大
package searchRing.ring.util.<SPAN class=hilite1>xml</SPAN>BufferTool;
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class <SPAN class=hilite1>XML</SPAN>BufferTool {
private static final int defaultLineCount = 10;
private static final int defaultMaxOutputSize = 50;
private static final Pattern elementPattern = Pattern.compile("<[a-zA-Z]+>");
private static final Pattern charSetPattern = Pattern.compile("<[?][[0-9a-zA-Z]|[\\s]|[=]|[\"]|[.]|[-]]+[?]>");
private StringBuffer <SPAN class=hilite1>xml</SPAN>ContentBuffer;
/* just used to store and output the data divided */
<SPAN class=hilite1>XML</SPAN>OutputBuffer <SPAN class=hilite1>xml</SPAN>Output;
private String charSetTitle = "";
private String rootElemetMark = "";
private String childElementMark = "";
InputStreamReader bufferedReader;
InputStream fileInputStream;
public <SPAN class=hilite1>XML</SPAN>BufferTool(String <SPAN class=hilite1>xml</SPAN>FilePath) {
this.<SPAN class=hilite1>xml</SPAN>ContentBuffer = new StringBuffer();
try {
this.fileInputStream = new FileInputStream(<SPAN class=hilite1>xml</SPAN>FilePath);
// bufferedReader = new InputStreamReader(fileInputStream, "UTF-8");
String charSet = getCharSet(<SPAN class=hilite1>xml</SPAN>FilePath);
if (charSet != null)
bufferedReader = new InputStreamReader(fileInputStream, charSet);
else
bufferedReader = new InputStreamReader(fileInputStream);
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (UnsupportedEncodingException uee) {
uee.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
try {
preparePaser();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public String getCharSetTitle() {
return charSetTitle;
}
public String getRootElemetMark() {
return rootElemetMark;
}
private String getCharSet(String filePath) throws IOException {
char temp[] = new char[512];
FileInputStream tempInput = new FileInputStream(filePath);
InputStreamReader tempReader = new InputStreamReader(tempInput);
int i = tempReader.read(temp);
tempReader.close();
tempInput.close();
if (i < 0)
return null;
String tempStr = new String(temp);
Matcher m = charSetPattern.matcher(tempStr);
if (m.find()) {
String charSetStr = tempStr.substring(m.start(), m.end());
Pattern tempP = Pattern.compile("[\"][[0-9a-zA-Z]|[-]]+[\"]");
Matcher tempM = tempP.matcher(charSetStr);
if (tempM.find()) {
String charSet = charSetStr.substring(tempM.start(), tempM.end());
return charSet.substring(1, charSet.length() - 1);
}
}
return null;
}
private void preparePaser() throws IOException {
readSomeLine(defaultLineCount);
Matcher m = charSetPattern.matcher(<SPAN class=hilite1>xml</SPAN>ContentBuffer);
if (m.find()) {
this.charSetTitle = this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.substring(m.start(), m.end());
this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.delete(0, m.end());
}
m = elementPattern.matcher(<SPAN class=hilite1>xml</SPAN>ContentBuffer);
if (m.find()) {
this.rootElemetMark = this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.substring(m.start(), m.end());
this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.delete(0, m.end());
}
m = elementPattern.matcher(<SPAN class=hilite1>xml</SPAN>ContentBuffer);
if (m.find()) {
this.childElementMark = this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.substring(m.start(), m.end());
}
this.<SPAN class=hilite1>xml</SPAN>Output = new <SPAN class=hilite1>XML</SPAN>OutputBuffer(this.childElementMark);
parserBuffer();
}
private int readSomeLine(int lineCount) throws IOException {
char buffer[] = new char[1024];
int i = 0;
int index = 0;
/* be careful of the sequence of the boolean caculation */
while (i++ < lineCount && (index = this.bufferedReader.read(buffer)) > 0) {
<SPAN class=hilite1>xml</SPAN>ContentBuffer.append(buffer, 0, index);
}
return index;
}
private void parserBuffer() {
int lastIndex = this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.lastIndexOf(this.childElementMark);
if (lastIndex > 0) {
this.<SPAN class=hilite1>xml</SPAN>Output.append(this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.substring(0, lastIndex));
this.<SPAN class=hilite1>xml</SPAN>ContentBuffer.delete(0, lastIndex);
}
}
public StringBuffer popDividedDataAfterParser() throws IOException {
while (this.<SPAN class=hilite1>xml</SPAN>Output.getItemCount() < defaultMaxOutputSize) {
int i = readSomeLine(defaultLineCount);
parserBuffer();
if (i < 0)
break;
}
if (this.<SPAN class=hilite1>xml</SPAN>Output.getItemCount() == 0)
return null;
StringBuffer returnSB = this.<SPAN class=hilite1>xml</SPAN>Output.get<SPAN class=hilite1>Xml</SPAN>Output();
this.<SPAN class=hilite1>xml</SPAN>Output.clearBuffer();
return returnSB.insert(0, this.rootElemetMark).append(this.rootElemetMark.replaceFirst("<", "</"));
}
public static void main(String args[]) throws Exception {
String str = "F:/ringInfo<SPAN class=hilite1>XML</SPAN>/ringTime.<SPAN class=hilite1>xml</SPAN>";
<SPAN class=hilite1>XML</SPAN>BufferTool <SPAN class=hilite1>xml</SPAN>b = new <SPAN class=hilite1>XML</SPAN>BufferTool(str);
StringBuffer s = <SPAN class=hilite1>xml</SPAN>b.popDividedDataAfterParser();
int i = 0;
Matcher m = Pattern.compile("<ring>").matcher(s);
while (m.find())
i++;
System.out.println(i);
System.out.println(s);
}
private static class <SPAN class=hilite1>XML</SPAN>OutputBuffer {
private StringBuffer <SPAN class=hilite1>xml</SPAN>Output;
private int itemCount;
private Pattern markPattern;
<SPAN class=hilite1>XML</SPAN>OutputBuffer(String markStr) {
this.markPattern = Pattern.compile(markStr);
<SPAN class=hilite1>xml</SPAN>Output = new StringBuffer();
itemCount = 0;
}
public void append(String str) {
if (str == null || "".equals(str))
return;
this.<SPAN class=hilite1>xml</SPAN>Output.append(str);
Matcher m = this.markPattern.matcher(str);
while (m.find())
this.itemCount++;
}
public void clearBuffer() {
<SPAN class=hilite1>xml</SPAN>Output = new StringBuffer();
this.itemCount = 0;
}
public StringBuffer get<SPAN class=hilite1>Xml</SPAN>Output() {
return <SPAN class=hilite1>xml</SPAN>Output;
}
public int getItemCount() {
return itemCount;
}
}
}