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道新品

贝叶斯算法

http://www.263mail.com.cn/blog/post/390.html 贝叶斯算法

Sunday, October 5, 2008

hashcode

hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。 以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。) 当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

解析Java对象的equals()和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

铁齿李肇星这样向美国人解释西藏,当场雷倒对方

有一次,他和美国一位领导人会谈,对方说,我对中国“侵略”西藏感到非常不满。李肇星立刻问他,你了解西藏的历史吗?对方摇摇头。李肇星说:“我可以向您解释,但您理解起来可能会有点困难,因为西藏被划入中国版图的时候,还没有美国这个国家。”

十一出游完全攻略

十一出游完全攻略:全国最宰人的景点 十一黄金旅游周马上就来了,首先,提前祝朋友们节日快乐!有出行旅游的,祝旅途愉快!一路平安!   中国已是一个旅游大国,旅游产业如朝阳般蓬勃上升。但是,由于景区所在的地方管理理念落后,景区管理措施不到位,监督跟不上,缺少必要的法规制度,加上地方保护主义严重,出现问题,一致对外,“宰人”现象极为普遍,让广大游客蒙受了很重的经济损失和心灵创伤。以下是千千结总结出的中国最黑的十五大风景区。   同时也希望网友们晒出自己所知道的“黑”景点,以飨更多的网友出游中能及时注意,掌握完全攻略…… 1、北京十三陵和长城:进陵留下买路钱出陵更要买路钱   别以为皇城根下就盛世太平,别以为天子脚下就安然无恙,北京的八达岭、十三陵,宰你没商量。这里主要讲十三陵一带骗人和宰人的事情。   一是让你留钱还愿。黑导游开始非常热情带着大家游陵园,还有规矩,从左边进去,右边出来,男人先迈左脚,女人先卖右脚,让你觉得这世上会有这么热心的人。如果你在长城和车上被宰了,以为可以结束旅游被宰的恐怖事情了,别着急,宰你的时候还没到。往右边出来,黑导游会把游客带进一个屋子,说十三陵是阴朝陵墓,你们进去惊动他们了,烧钱给自己还愿,家里有几个人就还几个愿,保太平,保平安。一个愿一百块。得,几百大洋又出去了。   二是小庙滥竽充数十三陵。这种现象那些黑车带你去的最多。昌平十三陵周边一些农民家小院,经过稍一改造,烧点香火弥漫着,取个名字,就说是明朝哪个帝王哪个帝王的陵墓。而且有的这种小院就在村委会边上,一墙之隔。宰人招数仍然和上面的黑导招数大同小异。工作人员会让你选香烛去烧,看他也没有收钱意思,就多多益善地取香烛烧,烧完了,就会有人要求你捐功德钱。一支香定价一百,给你的时候都是一把十多支,烧完了再算钱。不够?不够可以刷卡。边上不显眼的地方真有一个刷卡机。   三是中医药和玉石店。中医药打着北京中医药大学的牌子,墙上琳琅满目挂了国家领导人视察的照片和外国元首视察的照片,以及他们的题字。进一个屋,导游请来国家某某领导人的保健医生一生讲课,寥寥数语后,进来十来个所谓的专家。这些专家也是国家某某领导人的保健医生。一对一的给游客们把脉,问诊,面对面直接对话,你会觉得受宠若惊,也享受了国家领导人的保健待遇。这些专家就喋喋不休说出你一大堆病症,给你开出处方,旁边的工作人员马山配合地走上来带你去买药。那些药都价格惊人。另外就是那些玉石店,导游会说是国家某某领导人的儿子开发出来的,绝对的真实,绝对的便宜。拿回家摔了,可以寄回来换新的。走进店,每个导游会请一位专业的玉器签定专家给你解说。然后就是购买玉器、貔貅等。还不能讲价,都说卖的是货真价实。遇到这种情况,诸位擦亮眼睛了。 2、长江三峡:套票里做文章   秋高气爽,坐船游览长江三峡是非常惬意的事情。长江三峡的重要旅游点集中在重庆,沿途有重庆大足时刻、武隆仙女山、丰都鬼城、雪玉洞、大三峡、小三峡、三峡大坝、武汉、黄鹤楼。三峡的旅游黑点更多集中在套票里,说的是套票,进去了还有这样那样的旅游点得再掏腰包。吃在重庆,玩在重庆,三峡人耿直憨厚,旅游点周边的农家菜、农家乐不会向北京一样宰人,都明码标价,并且基本上是保质保量。三峡旅游的宰还有就是买东西,如果你上了黑导游的船,一定要睁开眼镜,勒紧腰包,稍不留神,有可能两块钱的石头,骗你花一万块钱买下来还乐滋滋的。 3、西双版纳:“洞房”的温柔陷阱   在西双版纳有许多所谓的民俗风情村。比如西双版纳原始森林公园,就有一个爱伲部落。游客进入村寨以后,打扮得花枝招展的少女将游人热情地迎进二层竹楼,参观其民居。一名女子稍作介绍,一摆手,进来好几位女孩,不由分说把一个小葫芦样的幸运符戴到男士的脖子上,然后让你一起参加所谓的抢亲游戏。“婚礼”的一个重要戏,是“送入洞房”。不要以为洞房里真有那好事,可怜的、无辜的 “新郎”都在那乖乖交钱呢。进了洞房,女孩就伸手向你要做嫁妆的钱。   主婚人会说,爱伲姑娘给你戴幸运符的时候,如果你接受了,那就表示同意这门亲事了,如果反悔,就要把你在村口的大树上倒挂三天,还要给他们干三年苦力。游客稀里糊涂就被强拉入“洞房” ,不把钱给够甭想出“洞房”。忍痛掏大洋把自己给赎回来吧,少则五六十,多则上百元。如果掏的是整的,这里的规矩是概不找零。如今民俗风情却往往成了民俗陷阱。从西双版纳回来的男女游客,大多有这样一个教训,那就是:“洞房不是随便进的”。 4、九寨沟:牛肉卖出天价钱   九寨沟卖的牦牛肉和烤全羊,更是宰你就像宰牛羊。导游很热衷带你去免费尝牦牛肉。你免费品尝,会有人笑你没钱,贪便宜,还有人劝你买回去送朋友。   总之,你很不小心就慷慨掏钱了。但很快你就会后悔不已,同样的牛肉,在成都只要22元一斤,在九寨沟你却要花88元。 5、峨眉山:烧香就是烧钱   还在去峨眉山的路上,游客就会被导游上一堂课:在座各位都是有缘人,正好赶上峨眉山开光大典,这可是很难得的,上次开光大典还是2000年呢,这次还有三天就结束了,各位有缘人可以去开平安光,不收钱,是随喜功德。这可真是有缘啊。可是用什么开光呢,那就得请佛和观音坠子。导游又发话了:各位可以去四川佛教协会某某佛善堂请佛,那里的收入都是捐给佛教协会的。既可以保平安,又可以做善事。一进门,导购小姐特热情:只要500元就能请一尊佛。   你瞪大眼睛看,最便宜的也要80元一尊,还没小拇指盖大。全家都请,那得2000多元。到了寺里,想开光的先请炷香,平安香60元一炷,全家福香190元。有人端着相机要帮你照请香照,15元一张,90元一套。开光了,进到前殿看到几个人,才开口说了句大师,就有人说一人50元。交了钱,“大师”说到里面跪着等,进去一看,大堂里全跪成一排一排的。等到腿都麻了,有个和尚进来,端了个杯子嘴里念念有词,然后在每个人请的佛上洒了两滴水。ok,开光完毕。回家一算,这免费的开光,不知不觉开去了七八百元,原来“佛”也不善啊。 6、布达拉宫:门票飙涨   涨价就像一场瘟疫。在2006年7月1日青藏铁路全线开通之前,拉萨的宾馆就纷纷开始了大幅涨价行动,在这个物价高出内地近一倍的西藏首府,不是用传说中的哈达和青稞酒,而是以先“宰一刀”的方式来迎接远方的客人。不说酒店宾馆价格的成倍提升,就是车站外面乱七八糟挤堆的出租车,司机开价就是60元,而原来正常的价格是30块。想大赚一笔的不仅仅是拉萨的宾馆,在首批乘火车进藏游客还没完全卸下风尘的时候,西藏自治区文物局就将布达拉宫旺季的门票价格,从 100元提高到了300元。   但将门票价格由100元增加到300元,每天2300人的参观人数并未减少,其“保护”从何谈起呢?还有,布达拉宫的殿堂内按规定是不准拍照的,但只要交一笔钱,就能拍了;交更多的钱,就能用闪光灯对着佛像拍个够。是不是交了钱,文物就不受损害啦? 7、崂山:道士的麻衣诓术   崂山在人们的印象中,是和蓬莱仙境连在一起的:山上的道士个个道行高明,蒲松龄笔下崂山穿墙术,留下的那堵穿洞断墙就是明证。崂山道士的穿墙术终究难以考证,而忽悠人的功夫却实在了得。在崂山,解说兼导游会神秘地告诉你“有个地方,你们还没去过。”说着,就会把你带进庙宇的一间屋子,七八个“道士”像迎祖师爷一样,围着你,说这位红光满面有财运,如果你要了他几个字,就得退点财了。   道长会带你进入旁边一间“办公室”,先掏出他的证件给你看,告诉你他是多少多少代传人、和施主你很有缘云云。然后开始看你的手相。事罢,当你满怀感激,准备告退时,道长却掏出了个本本,轻描淡写说:随意捐点香火钱。本来你早准备几十元钱来捐的,可是一翻开道长的本子,上面却赫然写着捐者的姓名和钱款:xxx,籍贯xxx,3900元;xxx,籍贯xxx,2000……捐款数目没有小于1000元的。不捐?道长不高兴,后果很严重。于是你瞬间“悟道”:破财除灾,这才是万变不离的真理。 8、吐鲁番葡萄沟:葡萄变味了   “ 吐鲁番的葡萄哈密的瓜,库尔勒的香梨人人夸”。吐鲁番葡萄沟内绿树成荫,葡萄架成片。终日流淌的天山雪水滋润,最诱人的当然是挂满枝头的葡萄,晶莹如珍珠,鲜艳似玛瑙,令人垂涎欲滴。在葡萄沟,卖葡萄的摊点上摆满了各种葡萄,金黄色、紫色的、褐色的琳琅满目,大的如一节小手指,小的如大米粒,名字也是很古怪的,有叫女人红的,有叫男人红的,有的号称治高血压的,有的号称治风湿的,看得让人眼花缭乱,目不暇接。   葡萄沟的农家大都有葡萄可买,可这里最便宜的,也要50元一斤,贵的七八十元。到了乌鲁木齐,你会发现最贵的也就30多元一斤。去葡萄沟吃饭,你又进“沟” 了,老板娘把菜单递上来,菜贵得离谱,一碗素抓饭要15元,一份羊肉120元,炒青菜都在二三十元左右。你抱怨太贵了,老板娘还会振振有辞:我们是4A景区,价格相当于五星级酒店的消费。 9、西安:假古董乱真   到了西安,你可得当心。西安的一些地方,往往只能动眼,不能动手。西安遍地古董、玉器、兵马俑纪念品、西周刀币、北洋大头镲来到这里,游客总要带些“古董” 回去。但西安的古董伪造术以假弄真,专家都说绝了。西安有条著名的古玩一条街--化觉巷,小巷子里布满卖古玩的小店铺、鼻烟壶、玉器、化妆盒、老锁、瓷器、头饰,应有尽有,但这些大都是伪造的赝品。   在西安路边摊点购物时,更要千万小心。一些不良小贩专门把货物摆成三角形,只要你一拿,东西就倒,而摆在下边的东西多是他提前安排好,已经坏了的。于是,小贩会告诉你这是多么值钱的古董,不花上几百元是不行的。西安火车站广场对面的一条街,假货很普遍,而且一些商店,店主会暗设机关,放上一柄很漂亮的刀或者剑,只要你一伸手去拿,所谓的玉镯、紫砂壶之类就会像多米诺骨牌一样摔下来。这样,一个价值两元的玻璃“玉镯,就会向你敲诈一两百元。 10、大理:“老乡”的蒙 汗 药   云南以产玉出名,又靠近玉石王国缅甸。来丽江的游客,多会购买玉石,但通常挨了宰还蒙在鼓里。在云南大理和丽江等地,普遍存在着“认老乡”的销售方式,即与游客攀亲,冒称老乡,以拉近双方距离,最后骗取游客购买珠宝。这些珠宝往往以次充好,假货居多。精品区标价好几万的珠宝首饰,经鉴定,通常是20~30元的地摊假货。在购货时,讲解员不经意间,会惊讶地说,我们老板和你们是同乡。随后,老板出场,关切地询问家乡的某某地,再介绍起自己几千万的生意规模。   老板”还会坦诚地自报家丑,自报珠宝业经营内幕,说出自己经营的珠宝商品有着几十倍的利润,用苦肉计增加对方信任。最后,老板必定豪气大发,以成本价即标价几十分之一的价格限量,向老乡出售一两套珍贵首饰。认老乡这一招往往见效,许多道行很深的游客也会掉坑里。 11、阳朔:温情背后的狰狞   阳朔是驴子的天堂,但有不少驴子就栽在天堂的“花架”下。阳朔的娱乐城不少,最是吸引寻求艳遇的游客。但娱乐城不少暗藏杀机,其手法通常是,联合一些社会上的黑导游和一些出租车司机,以廉价消费为诱饵,拉游客来娱乐场所消费,然后由陪侍小姐索要“特饮”。结帐的时候,游客才发现,娱乐城使用的是两份标价不同的“鸳鸯”价目表,结帐的价目表中所谓的“特饮”价格高得惊人。   “特饮”其实就是雪碧和可乐等饮料互相调在一起,几毛钱的一杯成本,卖给客人就是一二百元。还有特服费,少则600-800元,多则几千,交不了钱,是脱不了身的。 12、坝上:骑马容易下马难   蓝天白云,乌兰公河清澈如镜,一碧万顷的草原,漫山遍野的野花散发着阵阵芳香,这就是坝上迷人的风光。   骑马是坝上最吸引游客的项目,收费当然不低。红山第三军马场附近的经营户特别会坑游客。刚到那,游客还没摸到马,就给你计算起时间,等你上得马,计时已经 10分钟了。马的主人牵着马慢悠悠走,除非游客骑1小时马,付1.5小时的钱,他才会勉强让马跑几步。说好40元/小时的费用,可这马一骑上就难下了,由不得你,当地人会拉着马胡乱绕上半天再回到起点,动辄耗上两三个小时。索要几百元的牵马费的现象也是屡见不鲜。  13、泰山:山上山下“好汉”多   泰山五岳独尊,自然景色威严、壮观,人文历史厚重,它承载了中华五千历史的精华,是中华文化的象征。当年,孔子登泰山而小天下,现在,泰山人也是傲视天下。游客在泰山上,你得小心翼翼,不时要为你拍照付出代价:拿钱。   稍有辩解或不满,便是对泰山的不敬,轻则招来责骂威胁,重则招来泰山人群体的“拳脚礼遇”,游客被打伤的事件不断发生。泰山下供游客住宿的黑店很多,稍有不慎,就会被宰,如果争执起来,泰山人会很生气,后果会很严重。 14、三亚:无赖的天堂   三亚的无赖因互联网而“臭名远扬”。小商小贩强买强卖,群殴游客的事件被互联网曝光,闹得沸沸扬扬,整个事件让我们看到,如果没有景区内部人的纵容,小贩们决不会如此霸道,简直就是黑社会做派。山西政协副主席吕日周游三亚被宰不说,还差点被打,忿而给海南省领导投书。这些事件让三亚市的领导很没有面子,于是开始了强力整治,抓了打人的小贩,撤了景区领导的职务。  15、少林寺:烧香等同打劫   少林寺大雄宝殿前面的香龛里,最细的一柱香比胳膊粗,最粗的一柱香比碗口粗,长都在一米二左右,一看就不是烧香,是烧钱,佛门烧香,只是一个礼节和规矩,以清香味的醇或淡、好或坏有一些要求,但不是粗越好、越长越好,过去的佛门没有碗口粗的香可以烧,想烧也造不出来啊。明明知道这里的佛界已经蒙上了一层铜臭味,我还是忍不住凑了过去,以为百来十块也能请到一柱佛香。不看不知道,一看吓一跳。   少林寺大雄宝殿前面的香龛旁边,端坐三个穿袈裟的和尚,请香的客人过来,他们先不告诉你价格和规矩,而是请你在签名簿上签上自己的名字。游客并不知道签名簿是一个陷阱,可能有人还误以为那是少林寺对香客们的尊重,糊里糊涂的就把自己的名字签上去,这一签,你就中了圈套。   签完名,和尚告诉你,凡签了名的香客,释永信法师都会亲自诵经念佛,为你消灾,等等。然后指着粗细不一、华丽不一,但都金光灿灿的香问你:施主,你请哪一柱香?因为前面说了释永信法师替你念经消灾的话,好面子的游客一般都会选择粗的、华丽的高香,等到他们把香递到你手上,才告诉你说,这柱香是六千块钱。   那时候,你后悔都来不及了,名字已经签上去不说,香都拿到手里,周边又围着看客,面前又供着大佛,人在这个时候一般都会咽着苦水把钱掏出来。   香龛里面的高香,最便宜的六百,最贵的六千。   

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

首先,我们说说什么是Google Adsense推介 ,简单的说就是如果有人点了你网站上面的Google Adsense推介图标,然后如果他通过这个链接注册了Google Adsense帐号的话,那么在他得到第一次的100美元的广告费的同时,你也会得到100美元,但是他不会有任何损失。也就是说,你给Google拉来一个新的赚钱工具后,如果确认了他有赚钱能力(得到第一次的100美元),那么你就会得到100美元的奖励。

这100美元很容易赚么?我不这么认为。我的所有的Blog(至少有6-7个,不同领域的内容)都放有Google Adsense广告,即使这样我的第一张100美元支票,仍旧让我等上了整整一年多才挣到。那我为什么还要放这个推介呢?那是因为即使没有任何收入,我也愿意向别人推荐Google Adsense广告。

是,我知道Google Adsense也有很多的问题,比如广告和内容的相关性没有像Google说的那么好,比如对发布商非常苛刻的用户协议(不能公布统计数字,不能作弊,否则就会被干掉),等等。然而,我还真没有更好的选择可以推荐给我的朋友们。我反对强制性的广告,强制弹窗广告严重影响用户体验,只能帮用户练习快速关闭新窗口的技能。我反对内容无关的广告,我正在看一篇感人至深的文章时,一个突然冒出来的性用品广告可能会让我感到非常不快。我反对晃眼睛的广告,他们让我精力严重分散,甚至经常逼得我把整个页面关掉了事儿。

这是一个恶性的循环。因为广告是用干扰用户的方式推出的,所以往往效果不好。商家发现投放广告效果不好后,只能加大投放力度,这样就更近一步的干扰了用户,同时也更加降低的广告的效果。在这样的恶性循环下,种种掩耳盗铃的手段出现了,用户不是不爱点这些广告么,我们把广告放在滚动条那里,叫你一拖滚动条就点到;用户不是看到广告就关闭么,我们做个假的关闭按钮,点了以后其实是打开广告,等等等等。页面上广告越来越多,页面对用户的实际价值也就会越来越低,这些做法不仅仅在损害用户和商家的利益,而且他们在摧毁这个价值体系。他们在降低网络广告的可信度和含金量,这样的恶性循环发展下去,就会毁掉整个网络广告行业。

但是我不反对广告。有很多消息我们是从广告知道的,比如现在正在进行Google Code Jam大赛的消息,我就是在Donews的广告发现的。当我想租房子的时候,我甚至会去注意平时鄙视的电线杆广告。广告本应是消费者和商家的桥梁,帮助消费者找到需要的产品和服务,帮助商家找到消费者。一个不需要的信息在你眼前乱晃的时候就是垃圾,一个广告在你需要他的时候冒出来,那就是有价值的信息了。

Google Adsense正是把广告信息化有序化的一种努力。让广告出现在相关的搜索结果的旁边,让广告出现在内容相关的文章旁边,这些保证了看到广告的人正式需要这些广告的人。Google Adsense这种内容相关的,非强制性的广告成为一种标准后,我们的互联网会更加有价值,用户也会更容易找到他需要的东西

如何申请adsense

This summary is not available. Please click here to view the post.

Thursday, September 11, 2008

超聪明司机

一名警察要一位超速行驶的男士把车停到路边,之后开始了下面的问话调查:

  警察:我能看一下你的驾驶执照吗?

  司机:我没有驾照,因为第五次酒后开车,我的驾照被吊销了。

  警察:我可以看看你车子的牌照吗?

  司机:这不是我的车,是我偷人家的。

  警察:车是偷的?

  司机:对。但是让我想一想……我想起来了,车主的牌照……噢,放在仪表签盘上的小柜子里面了。当我把我的手枪放进小柜子里时,我看见过车牌照。

  警察:仪表盘上的小柜子里有一把手枪?

  司机:是的,先生。我杀了这部车的女主人,把她放进车后边的行李箱里,然后,把我的枪放进了那个小柜子里。

  警察:你是说后备箱里有一具女尸?

  司机:是的,先生。

  听到这里,警察大惊,立刻向警察局呼叫求援。很快,这部汽车被一群警察包围了。一名警官走向司机,去处理这一紧急情况。

  警官:先生,我能看一下你的驾照吗?

  司机:当然可以,给。

  警官:车是谁的?

  司机:我的,警官先生。这是我的牌照。

  警官:你能打开仪表盘上的小柜子上我看看里面的手枪吗?

  司机:我可以打开小柜子,长官。但是,里面没有什么手枪。

  小柜子打开了,里面果然没有手枪。

  警官:我被告知你车尾的行李箱里藏着一具尸体。你不介意打开它吧?

  司机:没问题。

  行李箱打开了,没有发现尸体。

  警官:我不明白这是怎么回事。那名让你停车的警察说,你没有驾照,车是偷的,小柜子里有一把手枪,后备箱里装着一具尸体,难道是我们这位警察谎报吗?

  司机:那当然!他还谎报我超速行驶了呢!

幽默问答

问:提名大陆扮演黑社会老大最象的演员。
  答:古月。

  问:我的头像牛逼吗?
  答:像。

  问:大家见过公鸡下蛋吗?
  答:没有,不过我见过CCTV说真话。

  问:我新买了一处庄园,有多大说出来吓死你��我开车绕一圈足足用了两个半小时!!!
  答:嗯,以前我也有这么一辆破车~

  问:每天对着单位那群白痴讲话让我觉得前途很渺茫……
  答:幸福吧你~因为对牛弹琴并不可怕,可怕的是一群牛每天对着你弹琴!

  问:你们女人大夏天的戴胸罩不热吗?
  答:我们不戴你们会热……

  问:和女友ML时,女友好像喊了另外一个男人的名字……
  答:你日了别人的女人你还有什么不满意的!!!

  问:为什么胡主席访问日本,日本方面比较冷淡,甚至机场连欢迎标语都没有挂?
  答:怎么挂?热烈欢迎中国老朋友来日?

  问:去年到黑龙江谈生意,晚上找了个俄罗斯小姐狂干俩钟头,你猜射完后她对我说什么?嘿嘿~
  答:Are�you�ready?

  问:利用东西方信息不对称,很多国外地摊货到中国都变成了奢侈品,那中国有啥垃圾牌子在国外冒充高档货?
  答:章子怡。

  问:从来都觉得蝎子精是整部《西游记》里最美的女人,当蝎子精把唐僧逼到床上撩拨时,我心下不住地为唐僧鼓劲:从了,从了,咱就从了吧!但关键时刻,可恶的悟空出现了……
  答:嗯,八戒出现了,这次改蝎子精不从了……

  问:老爸送我老公一根鹿鞭,大家说这是啥意思?还有照片的说~
  答:这是老一辈对青年一代的鞭策啊~~~

  问:怀疑老婆红杏出墙,但苦于没证据……
  答:如果你没本事做陈冠希,那就做谢霆峰吧~

  问:《神雕侠侣》里小龙女胳膊上的守宫砂是什么东西,干什么用的?
  答:守宫砂是处女的桌面快捷方式。

  问:单位人都说我长得像韩国人,大家说像吗?(上照片)
  答:因为你长得像个棒子,单位同事又不好意思明说,所以只好说你长得像韩国人!

  问:帅有个屁用��到头来还不是被卒吃掉!
  答:帅有士陪,有炮打,有马骑,有车坐,有相暗恋……帅怎么不好?!!

  问:夏天要刮腋毛,否则穿短袖会影响淑女形象的~那再弱弱地问一句,**用刮吗?
  答:不刮扎嘴!

  问:问个欠扁的问题,为什么跳水运动员入水时裤衩不会被冲掉?
  答:跳水运动员平时训练主要有两大方面:1.压水花;2.夹裤衩。

  问:是中国人就抵制《古惑仔》之类的烂片,因为这种烂片很容易就把小孩教坏!
  答:晕~像楼主这样的看《鼹鼠的故事》都会去学盗墓……

  问:大家知道,从六教东侧往北的路是个下坡,刚才我来六教时突然看见一可爱MM骑车直冲而下,并高呼"太爽了!"引来不少行人侧目。现在回想起来,MM甜美的声音真是让人回味无穷啊~
  答:明天我就把这丫头的车座再装回去!

  问:反腐真的就这么难吗?
  答:你割割自己的JJ看难不难!!

  问:请用一句话形容中国国家地震台。
  答:事后诸葛亮,事前猪一样!

  问:美军在伊拉克不能抽身说明美国是个负责任的国家!!
  答:那我股票被套牢说明我是个负责任的中国股民??

  问:为什么警察抓坏人时都要鸣警笛?难道不怕坏人老大远就听到跑了?
  答:上级单位来检查之前一般都会事先通知下级单位的~

  问:萨达姆就义前仍振臂高呼,虽听不懂他在喊什么,但还是由衷地敬佩这位领袖!
  答:萨达姆咒道:"中国哪个狗日的说'让领导先走'的!!!"

  问:据香港翡翠台报道,今晨阿娇在其母亲陪同下到圣约翰女子医院做过检查,医院诊断报告证明其处女膜未见器质性损伤,不信大家可以浏览翡翠台网站��我永远的阿娇。
  答:妈的,你是在嘲笑陈冠希的JJ小吗?!!

flex 是什么

的Macromedia Flash是强大的矢量动画编辑工具,在做动画起家之后,Flash一直在谋求rich internet application(ria富客户端)的霸主地位,最有影响的是,已经推出了面向对象的编程脚本actionscript2.0,并且建立起类似于java swing的类库和相应component(组件)。Flex是通过java或者.net等非Flash途径,解释.mxml文件组织components,并生成相应得.swf文件。Flex的component和flash的component很相似,但是有所改进增强。

运用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文件过大

在项目里面遇到了一些被解析的xml文件超过30M 或 60M 以上的情况, 现在已经不好去说为什么不在一开始产生xml的情况下就把xml 做小点,但是遇到这个问题后,我只能解决问题了,解决问题同时害怕重复发明轮子,我也去看了下现有的xml 解析东西,jdom 的SAXBuilder和 dom4j 的SAXReader都是把XML文件一次读入,xml文件过来 会报溢出的异常 但即使SAXParser是可以批量读入解析,但它也是一次解析完,假设XML文件中有一万条数据,解析后就必须在内存中放这么多的对象 个人觉得这样有些不灵活,就自己做了个小东西来切分 但前提是这个xml文件得有文件头 <?xml version="1.0" encoding="GBK"?> encoding必须跟文件编码格式一致 ,不然解析的时候会出乱码。
 

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;
        }
    }


}

代码中popDividedDataAfterParser() 输出的StringBuffer 可用来初始化一个 StringReader 再给dom4j 的saxReader去解析,这样联合一起用, 想处理多少,就先分出来解析多少,特别适合多线程的生产者和消费者的那种情况,希望对大家有用。
 

Wednesday, August 20, 2008

第一篇博客

我以后就决定把它作为阵地了