Skip to content

{ Category Archives } 默认分类

《色.戒》

     张爱玲的小说本是写的极好的,拍电影的人却太俗气,把好生生的一个故事,摆弄成了“少儿不宜”的限制级。 但这回看完《色戒》,散场的时候却不像上次看《狙击手》那么意犹未尽。上次是看的兴高采烈,过瘾,这次却没有任何的反应?旧上海的弄堂,奔驰的人力车,汤唯的旗袍,梁朝伟的毫无表情的脸,本都是好的,可是组合到一块,在萤幕上晃来晃去两个多小时,便倦了,乏了,无趣了,无聊了。 故事中不合情理的地方太多,到最后,结局却是最真实的一种。

看病记

        从前天晚上看完李连杰的最新电影《游侠》开始,右眼就感觉有点发痒。到昨天上午对新视频搜索后台进行压力测试的时候,眼睛不停的流泪,几乎看不清屏幕。幸亏压力测试进行的还算顺利,通过修改一个 决定如何取得摘要的参数(从动态生成改成超过长度直接截断),检索后台的承压能力从10个并发每秒提升到40个并发,而且 io 的压力仍然不是很大,只是 cpu 不够用了(后台机器是一个普通的双核机器,硬盘都没有做 raid,只是把服务分散到 4 块不同的硬盘上而已)。这样我们能够确定等播客搜索的后台切换到新系统上来,后台还可以精简下 2 台机器(把当前 2 台独立的合并机器撤下来,合并服务放到检索服务机一起)。 测试结束后,我立即打电话问人事部门关于我的医疗保险卡的问题。幸运的是,医保卡刚刚发下来了。在一堆未整理的卡片中翻出自己的医保卡和条形码,自己往上面贴了照片,拿着就往中关村医院跑。 医院居然是下午 5 点下班,5 点以后就算急诊了——真黑!而且中关村医院这种社区医院急诊没有眼科!于是打车去北医三院。 挂号 5 块,诊疗费 6 块,开了一小瓶从日本进口的滴眼液,28.83 。一个小小的结膜炎,一下子就花去了 40 块。医生最后叮嘱道:如果这两天眼睛有发红或者发肿的现象,赶紧再来复查一下。心里想,医院真是个吃钱的地方,想想中关村修电脑一般都是检查不要钱,修不好也不要钱,可这医院,随便看看就算检查过了,开个药,也不管“修”的好“修”不好,先收了钱再说。 不过人去医院看病,图的就是个心安。开个药,也不管是不是真的管用,看了医生,用了药,心里踏实了,过一两天,病就真的好了。 周五去体检,好好检查一下。

密码保护:流水账

无法提供任何摘要。这是一篇受保护的文章。

密码保护:毕业

无法提供任何摘要。这是一篇受保护的文章。

我们为什么吵架?

有一位名人在博客上说:任何一种稳定关系都是奴役与被奴役的关系。在感情中同理,也是主动和被动的关系。如果还没有确定,就要通过吵架、离家出走等等手段来确定地位。 两个人明明相爱,往往最不惮以直接强硬的态度对待对方。大到经济大事、百年树人育儿方针,小到今天晚上吃馒头还是面条,都有可能发生激烈争吵,仿佛和自己最亲密的人针锋相对才显得格外有成就感,还是最在乎的人就彼此最挑剔? 据说,某些吵架是前戏的一种,似乎没有哪对儿男女不曾经历过。俗话有很多,什么上牙还有碰下牙的时候,大多数人还都认同小两口打架不记仇这一句。但 是,这并不意味着就可以肆无忌惮口无遮拦。有很多男女因为一件微不足道的小事,最后吵成劳燕纷飞的怨偶;还有的人吵起架来,就好象按下了REPLAY键, 在某些事件中反复循环播放,无休无止。亲爱的,难道我们不能吵一场有技术含量的架吗? 我们为什么要吵架? 那么那么爱,当初含在口里都怕化,为什么现在可以面目狰狞的吼叫或目中无人的冷战?难道还是因为过于爱。 两个人互相尊重爱慕,但不意味着在他们在所有问题上选择一致的态度。相遇之前,他们有不同的 生活背景;他们的学识、职业、气质都决定了看问题的角度并不一致,甚至,仅仅是男女有别,都会在一个看法上产生偏差。那么,两个人的生活该怎么过?于是每 个人都会提出自己的意见,但是对方并不同意,于是需要互相说服。当问题被看得比较严重尖锐的时候,说服的过程也比较激烈,那么,这个过程就叫吵架。说到 底,因为这个人是自己最爱的,因此希望他/她可以按照自己的生活方式和思维模式来认同服从—-跟外人说,人家才懒得理你呢。因此,吵架可以被视为批着 感情外衣的杀熟行为。仔细分析各种各样的吵架原因,难道不是都要求对方跟着自己的思路走听自己的话吗? 所以,回到前面所说的,当男女关系中一方以绝对优势压倒另一方占据主动权的时候,被动方百依百顺,两个人肯定是吵不起来的。只有势均力敌都觉得自己 有道理,并且觉得人家天经地义要听自己的话的时候,才会滔滔不绝的辩个不休。可是,爱人是用来宠爱心疼的,为什么一定要叫人家服服帖贴呢,应该还有另外的 婉转方式吧。

开源搜索引擎简介

搜索引擎的工作流程主要分为三步:从互联网抓取网页→创建抓取网页的索引库→从索引库中进行搜索。 首先需要一个能访问网络的爬虫器程序,依据URL之间的关联性自动爬行整个互联网,并对爬行过的网页进行抓取收集。当网页被收集回来后,采用索引分析程序进行网页信息的分析,依据一定的相关度算法(如超链接算法)进行大量计算,创建倒排序的索引库。索引库建好后用户就可以通过提供的搜索界面提交关键词进行搜索,依据特定的排序算法返回搜索结果。因此,搜索引擎并不是对互联网进行直接搜索,而是对已抓取网页索引库的搜索,这也是能快速返回搜索结果的原因,索引在其中扮演了最为重要的角色,索引算法的效率直接影响搜索引擎的效率,是评测搜索引擎是否高效的关键因素。 网页爬行器、索引器、查询器共同构成了搜索引擎的重要组成单元,针对特定的语言,如中文、韩文等,还需要分词器进行分词,一般情况下,分词器与索引器一起使用创建特定语言的索引库。它们之间的协同关系如图1所示。 而开放源代码的搜索引擎为用户提供了极大的透明性,开放的源代码、公开的排序算法、随意的可定制性,相比于商业搜索引擎而言,更为用户所需要。目前,开放源代码的搜索引擎项目也有一些,主要集在中搜索引擎开发工具包与架构、Web搜索引擎、文件搜索引擎几个方面,本文概要介绍一下当前比较流行且相对比较成熟的几个搜索引擎项目。 开源搜索引擎工具包 1.Lucene Lucene是目前最为流行的开放源代码全文搜索引擎工具包,隶属于Apache基金会,由资深全文索引/检索专家Doug Cutting所发起,并以其妻子的中间名作为项目的名称。Lucene不是一个具有完整特征的搜索应用程序,而是一个专注于文本索引和搜索的工具包,能够为应用程序添加索引与搜索能力。基于Lucene在索引及搜索方面的优秀表现,虽然由Java编写的Lucene具有天生的跨平台性,但仍被改编为许多其他语言的版本:Perl、Python、C++、.Net等。 同其他开源项目一样,Lucene具有非常好的架构,能够方便地在其基础上进行研究与开发,添加新功能或者开发新系统。Lucene本身只支持文本文件及少量语种的索引,并且不具备爬虫功能,而这正是Lucene的魅力所在,通过Lucene提供的丰富接口,我们可以根据自身的需要在其上添加具体语言的分词器,针对具体文档的文本解析器等,而这些具体的功能实现都可以借助于一些已有的相关开源软件项目、甚至是商业软件来完成,这也保证了Lucene在索引及搜索方面的专注性。目前,通过在Lucene的基础上加入爬行器、文本解析器等也形成了一些新的开源项目,如 LIUS、Nutch等。并且Lucene的索引数据结构已经成了一种事实上的标准,为许多搜索引擎所采用。 2.LIUS LIUS即Lucene Index Update and Search的缩写,它是以Lucene为基础发展起来的一种文本索引框架,和Lucene一样,同样可以看作搜索引擎开发工具包。它在Lucene的基础上作了一些相应的研究及添加了一些新的功能。LIUS借助于许多开源软件,可以直接对各种不同格式/类型的文档进行文本解析与索引,这些文档格式包括 MS Word、MS Excel、MS PowerPoing、RTF、PDF、XML、HTML、TXT、Open Office及JavaBeans等,对Java Beans的支持对于进行数据库索引非常有用,在用户进行对象关系映射(如:Hibernate、JDO、TopLink、Torque等)的数据库连接编程时会变得更加精确。LIUS还在Lucene的基础上增加了索引更新功能,使针对索引的维护功能进一步完善。并且支持混和索引,可以把同一目录下与某一条件相关的所有内容整合到一起,这种功能对于需要对多种不同格式的文档同时进行索引时非常有用。 3.Egothor Egothor是一款开源的高性能全文搜索引擎,适用于基于全文搜索功能的搜索应用,它具有与Luccene类似的核心算法,这个项目已经存在了很多年,并且拥有一些积极的开发人员及用户团体。项目发起者Leo Galambos是捷克布拉格查理大学数学与物理学院的一名高级助理教授,他在博士研究生期间发起了此项目。 更多的时候,我们把Egothor看作一个用于全文搜索引擎的Java库,能够为具体的应用程序添加全文搜索功能。它提供了扩展的Boolean模块,使得它能被作为Boolean模块或者Vector模块使用,并且Egothor具有一些其他搜索引擎所不具有的特有功能:它采用新的动态算法以有效提高索引更新的速度,并且支持平行的查询方式,可有效提高查询效率。在Egothor的发行版中,加入了爬行器、文本解析器等许多增强易用性的应用程序,融入了Golomb、Elias-Gamma等多种高效的压缩方法,支持多种常用文档格式的文本解析,如HTML、 PDF、PS、微软Office文档、XLS等,提供了GUI的索引界面及基于Applet或者Web的查询方式。另外,Egothor还能被方便地配置成独立的搜索引擎、元数据搜索器、点对点的HUB等多种且体的应用系统。 4.Xapian Xapian是基于GPL发布的搜索引擎开发库,它采用C++语言编写,通过其提供绑定程序包可以使Perl、Python、PHP、Java、Tck、C#、Ruby等语言方便地使用它。 Xapian还是一个具有高适应性的工具集,使开发人员能够方便地为他们的应用程序添加高级索引及搜索功能。它支持信息检索的概率模型及丰富的布尔查询操作。Xapian的发布包通常由两部分组成:xapian-core及xapian-bindings,前者是核心主程序,后者是与其他语言进行绑定的程序包。 Xapian为程序开发者提供了丰富的API及文档进行程序的编制,而且还提供了许多编程实例及一个基于 Xapian的应用程序Omega,Omega由索引器及基于CGI的前端搜索组成,能够为HTML、PHP、PDF、PostScript、 OpenOffice/StarOffice、RTF等多种格式的文档编制索引,通过使用Perl DBI模块甚至能为MySQL、PostgreSQL、SQLite、Sybase、MS SQL、LDAP、ODBC等关系数据库编制索引,并能以CSV或XML格式从前端导出搜索结果,程序开发者可以在此基础上进行扩展。 5.Compass Compass是在Lucene上实现的开源搜索引擎架构,相对比于Lucene而言,提供更加简洁的搜索引擎 API。增加了索引事务处理的支持,使其能够更方便地与数据库等事务处理应用进行整合。它更新时无需删除原文档,更加简单更加高效。资源与搜索引擎之间采用映射机制,此种机制使得那些已经使用了Lucene或者不支持对象及XML的应用程序迁移到Compass上进行开发变得非常容易。 Compass还能与Hibernate、Spring等架构进行集成,因此如果想在Hibernate、Spring项目中加入搜索引擎功能,Compass是个极好的选择。 开源Web搜索引擎系统 1.Nutch Nutch是Lucene的作者Doug Cutting发起的另一个开源项目,它是构建于Lucene基础上的完整的Web搜索引擎系统,虽然诞生时间不长,但却以其优良血统及简洁方便的使用方式而广收欢迎。我们可以使用Nutch搭建类似Google的完整的搜索引擎系统,进行局域网、互联网的搜索。 2.YaCy YaCy是一款基于P2P(peer-to-peer)的分布式开源Web搜索引擎系统,采用Java语言进行编写,其核心是分布在数百台计算机上的被称为YaCy-peer的计算机程序,基于P2P网络构成了YaCy网络,整个网络是一个分散的架构,在其中所有的 YaCy-peers都处于对等的地位,没有统一的中心服务器,每个YaCy-peer都能独立的进行互联网的爬行抓取、分析及创建索引库,通过P2P网络与其他YaCy-peers进行共享,并且每个YaCy-peer又都是一个独立的代理服务器,能够对本机用户使用过的网页进行索引,并且采取多机制来保护用户的隐私,同时用户也通过本机运行的Web服务器进行查询及返回查询结果。 YaCy搜索引擎主要包括五个部分,除普通搜索引擎所具有的爬行器、索引器、反排序的索引库外,它还包括了一个非常丰富的搜索与管理界面以及用于数据共享的P2P网络。 开源桌面搜索引擎系统 1.Regain regain是一款与Web搜索引擎类似的桌面搜索引擎系统,其不同之处在于regain不是对Internet 内容的搜索,而是针对自己的文档或文件的搜索,使用regain可以轻松地在几秒内完成大量数据(许多个G)的搜索。Regain采用了Lucene的搜索语法,因此支持多种查询方式,支持多索引的搜索及基于文件类型的高级搜索,并且能实现URL重写及文件到HTTP的桥接,并且对中文也提供了较好的支持。 Regain提供了两种版本:桌面搜索及服务器搜索。桌面搜索提供了对普通桌面计算机的文档与局域网环境下的网页的快速搜索。服务器版本主要安装在Web服务器上,为网站及局域网环境下的文件服务器进行搜索。 Regain使用Java编写,因此可以实现跨平台安装,能安装于Windows、Linux、Mac OS及Solaris上。服务器版本需要JSPs环境及标签库(tag library),因此需要安装一个Tomcat容器。而桌面版自带了一个小型的Web服务器,安装非常简单。 [...]

百度之星三

2007年5月26号 百度之星编程比赛 第二题 数7 #include #include //int maxa=10002, maxb=10002, maxc=240003, maxd=2001; #define maxa 10002 #define maxb 10002 #define maxc 240003 #define maxd 2001 int a[maxa], ra[maxa], b[maxb], rb[maxb], c[maxc]; int main() { int digit[10]; int x,y,z,n,mc,mra,mrb; int i,j,k,kk,flag,f; char s[6]; memset(a, 0, sizeof(a) ); memset(ra, 0, sizeof(ra)); memset(b, 0, sizeof(b) ); memset(rb, 0, sizeof(rb)); memset(c, [...]

百度之星二

2007年5月27号 百度之星编程比赛 第四题 inurl 高级查询 #include #include #define maxn 9999 #define maxstrlen 258 int m,n; char site[maxn][maxstrlen], inurl[maxn][maxstrlen]; char str1[maxstrlen], str2[maxstrlen]; char *pos; int main() { int i,j,k; memset(site,’\0′,sizeof(site)); memset(inurl,’\0′,sizeof(inurl)); scanf(“%d”, &n); for(i=0; i

百度之星一

2007年5月27号 百度之星编程比赛 第一题 百度时间 #include #include #include #define MAX 25 int y,m,d; char str[25]; int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int runnian(int yy, int flag) { int nian=0, i; if (flag == 1) // after { for (i=2000; iyy; i+=flag) { if (i % 400 ==0 || (i % 4 == 0 && i % 100 != 0)) ++ [...]

高并发高流量网站架构后续关注

RAID的英文全称为:Redundant Array of Independent Disks。翻译成中文即为独立磁盘冗余阵列,或简称磁盘阵列。由美国加州大学在1987年开发成功。 RAID的初衷主要是为大型服务器提供高端的存储功能和冗余的数据安全。 我们可以这样来理解,RAID是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据冗余的技术。组成磁盘阵列的不同方式成为RAID级别(RAID Levels)。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储性能要比单个硬盘高很多,而且在很多RAID模式中都有较为完备的相互校检/恢复的措施,甚至是直接相互的镜象备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性,这也是Redundant一词的由来。 不过,所有的RAID系统最大的优点则是”热交换”能力:用户可以取出一个存在缺陷的驱动器,并插入一个新的予以更换。对大多数类型的RAID来说,可以利用镜像或奇偶信息来从剩余的驱动器重建数据不必中断服务器或系统,就可以自动重建某个出现故障的磁盘上的数据。这一点,对服务器用户以及其他高要求的用户是至关重要的。 数据冗余的功能指的是:在用户数据一旦发生损坏后,利用冗余信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。 RAID以前一直是SCSI领域独有的产品,因为它当时的技术与成本也限制了其在低端市场的发展。今天,随着RAID技术的不断成熟与厂商的不断努力,我们已经能够享受到相对成本低廉的多的IDE-RAID系统,虽然稳定与可靠性还不能与SCSI-RAID相比,但它相对于单个硬盘的性能优势对广大玩家是一个不小的诱惑。随着相关设备的拥有成本和使用成本不断下降,这项技术也已获得一般电脑用户的青睐。 RAID技术是一种工业标准,下面我们就一起来对各主要RAID级别做一个大致的了解。 RAID 0 RAID 0又称为Stripe或Striping,中译为集带工作方式。它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取。系统传输来的数据,经过RAID控制器通常是平均分配到几个磁盘中,而这一切对于系统来说是完全不用干预的,每个磁盘执行属于它自己的那部分数据请求。这样,系统有数据请求就可以被多个磁盘并行的执行。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。我们可以这样简单的认为:N个硬盘是一个容量为N个硬盘容量之和的”大”硬盘。RAID0的主要工作目的是获得更大的”单个”磁盘容量。另一方面就是多个硬盘同时读取,从而获得更高的存取速度。例如一个由两个硬盘组成的Raid系统中,系统向两个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为2项操作,其中的每一项操作都对应于一块物理硬盘。通过建立RAID 0,原先顺序的数据请求被分散到所有的两块硬盘中同时执行。从理论上讲,两块硬盘的并行操作使同一时间内磁盘读写速度提升了2倍。虽然由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值。但是,大量数据并行传输与串行传输比较,提速效果还是非常明显的。 RAID 0最大的缺点是不提供数据冗余,其安全性大大降低,构成阵列的任何一块硬盘的损坏都将带来灾难性的数据损失。 RAID 0具有的特点,使其不适用于关键任务环境,但是,它却非常适合于特别适用于对性能要求较高的视频生产和编辑或图像编辑领域。对个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。 RAID 1 RAID 1又称为Mirror或Mirroring,中译为镜像方式。这种工作方式的出现完全是为了数据安全考虑的,因为在整个镜像的过程中,只有一半的磁盘容量是有效的,因为另一半用来存放同这一半完全一样的数据,也就是数据的冗余了。同RAID0相比,它是另一个极端。RAID0首要考虑的是磁盘的速度和容量,忽略安全;而RAID1首要考虑的是数据的安全性,容量可以减半、速度可以不变。它的宗旨是最大限度的保证用户数据的可用性和可修复性。 RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。当读取数据时,系统先从RAID 0的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回的数据损失。 由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。 Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域。 RAID 0+1 正如其名字一样RAID 0+1是RAID 0和RAID 1的组合形式,也称为RAID 10。它的出现就是为了达到既高速又安全目的, RAID10也可以简单的理解成两个分别由多个磁盘组成的 RAID0阵列再进行镜像;其实反过来理解也没有错。 以四个磁盘组成的RAID 0+1为例,RAID 0+1是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。 由于RAID 0+1也通过数据的100%备份提供数据安全保障,因此RAID 0+1的磁盘空间利用率与RAID 1相同,存储成本高。 构建RAID 0+1阵列的成本投入大,数据空间利用率低。不是种经济高效的磁盘阵列解决方案。但特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、政府各种档案管理等。 [...]