<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>群英汇博客 &#187; 崔 锐</title> <atom:link href="http://blog.ossxp.com/author/%E5%B4%94%E9%94%90/feed/" rel="self" type="application/rss+xml" /><link>http://blog.ossxp.com</link> <description></description> <lastBuildDate>Wed, 14 Sep 2011 03:52:03 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Xapian的检索</title><link>http://blog.ossxp.com/2010/08/1760/</link> <comments>http://blog.ossxp.com/2010/08/1760/#comments</comments> <pubDate>Sun, 08 Aug 2010 13:53:52 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[搜索引擎]]></category> <category><![CDATA[Xapian]]></category> <category><![CDATA[检索]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=1760</guid> <description><![CDATA[
Xapian中有关查询的代码比索引复杂的多,因为它支持多种查询机制，而索引就只是循环叠加。如下面的多种查询机制:概率性搜索排名
相关度反馈
词组和邻近搜索
全方位的布尔型搜索器
支持提取搜索关键字的词干
支持通配符查询
支持别名查询
Xapian支持拼写纠正Xapian的查询语法有两种，在Xapian中Query类便起着“查询”的作用，Query类的生成方法有两种，第一种是由QueryParser类解析查询字符串生成，别一种则是创建多个表示不同描述表达式的Query类，然后再将这些Query按需组合起来,具体的有关Xapian的查询机制和查询语法的情况请参考博客 利用Xapian构建自己的搜索引擎：检索 。这篇博客详细的介绍了有关搜索引擎的性能，评价标准，xapian的检索机制和查询机制等。相信对使用Xapian的开发具有非常大的帮助。Xapian中两种查询语法本质上都是一样的。第一种方法首先进行字符串解析，确定是哪一种查询机制，接着就会生成对应的Query类(代码中加粗的部分)，然后按需组合起来。下面是Query QueryParser::Internal::parse_query(const string &#38;qs, unsigned flags, const string &#38;default_prefix)方法中的一段代码:
if (op.size() == 3) {
if (op == "AND") {
Parse(pParser, AND, NULL, &#38;state);
goto just_had_operator;
<a
href="http://blog.ossxp.com/2010/08/1760/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/08/1760/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>xapian索引的term处理</title><link>http://blog.ossxp.com/2010/07/1613/</link> <comments>http://blog.ossxp.com/2010/07/1613/#comments</comments> <pubDate>Sat, 31 Jul 2010 09:57:55 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[搜索引擎]]></category> <category><![CDATA[Xapian]]></category> <category><![CDATA[中文切词]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=1613</guid> <description><![CDATA[
Xapian 是一个用C++编写的全文检索程序，License是GPL，它的作用类似于Java的lucene。Xapian 的 官方网站是http://xapian.org/,采用trac作为项目管理软件。如果想要了解更多则可以查看xapian的文档。Xapian的索引不支持中文切词，不管是单字切词还是多元切词，中文是同英文一样的处理方式。下面就来分析Xapian怎样索引英文文档。首先介绍一个迭代器 Utf8Iterator（unicode.h),它在索引的时候起着非常重要的作用。它有三个私有 成员，其中其中 p表示指向字符数组的元素指针，end表示指向字符数组末端元素的下一个,seqlen表示当前字符所占的字节数:
const unsigned char *p;
const unsigned char *end;
mutable unsigned seqlen;
Utf8Lterator还有四个非常重要的操作符重载，索引时它们多次被调用。其中 * 表示操作符返回对应的unicode码， ++ 表示指针指向下一位字符， == 和 != 是判断迭代器是否相同:
unsigned Utf8Iterator::operator*() const {
if (p == NULL) return unsigned(-1);
if (seqlen == 0) calculate_sequence_length();
unsigned char ch = *p;
<a
href="http://blog.ossxp.com/2010/07/1613/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/07/1613/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>rst2pdf图片处理（续）</title><link>http://blog.ossxp.com/2010/07/1533/</link> <comments>http://blog.ossxp.com/2010/07/1533/#comments</comments> <pubDate>Mon, 26 Jul 2010 01:03:03 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[Python]]></category> <category><![CDATA[技术文章]]></category> <category><![CDATA[rst2pdf]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=1533</guid> <description><![CDATA[继在上一篇博客 《rst2pdf中图片的处理》 中提出问题，本文通过一个简单的实现，解决 rst 转换为 HTML 和 PDF 时图片显示不一致（尤其是PDF中不同格式图片忽大忽小）的问题。
图像分辨率是用于度量位图图像内数据量多少的一个参数。通常表示成ppi（每英寸像素 pixel per inch）和dpi(每英寸点 dot pre inch)。包含的数据越多，图形文件的长度就越大，也能表现更丰富的细节。但更大的文件也需要耗用更多的计算机资源，更多的内存，更大的硬盘空间等等。在另一方面，假如图像包含的数据不够充分（图形分辨率较低），就会显得相当粗糙，特别是把图像放大为一个较大尺寸观看的时候。Ppi和dpi经常都会出现混用现象。从技术角度说，&#8221;像素&#8221;（p）只存在于计算机显示领域，而&#8221;点&#8221;（d）只出现于打印或印刷领域。Gif格式的图片不支持打印分辨率等一些基本的图像属性，这也是为什么rst2pdf根据后缀的不同而分别处理图片。在处理png图片时rst2pdf会取到图像自带的分辨率属性，一般情况计算机生成的图片的分辨率都是72dpi（根据不同显示器的分辨率而不同，我机器上的GIMP创建的png图片缺省是112dpi)，gif则在 rst2pdf 的处理中默认采用 300 dpi， 所以就会出现原本同样大小的图片在pdf中png显示比gif大。代码分析
现在我们来分析rst2pdf中图片分辨率的处理情况。首先由命令选项 &#8211;default-dpi 来修改分辨率设置:
def_dpi = config.getValue("general", "default_dpi", 300)
parser.add_option('--default-dpi', dest='def_dpi', metavar='NUMBER',
default=def_dpi,
help='DPI for objects sized in pixels. Default=%d'%def_dpi)
第一行代码是从配置文件中得到default-dpi的默认值，有关配置文件的情况在上一篇博客 rst2pdf中图片的处理 中有简单说明。 default-dpi <a
href="http://blog.ossxp.com/2010/07/1533/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/07/1533/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>rst2pdf中图片的处理</title><link>http://blog.ossxp.com/2010/07/1450/</link> <comments>http://blog.ossxp.com/2010/07/1450/#comments</comments> <pubDate>Mon, 19 Jul 2010 00:03:54 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[Python]]></category> <category><![CDATA[技术文章]]></category> <category><![CDATA[rst2pdf]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=1450</guid> <description><![CDATA[
一般情况下，使用 reStructuredText(ReST) 生成 PDF 格式的文件需要先转化成 LaTeX 格式。而 rst2pdf 通过调用 reportlab 工具包直接生成 PDF 文件。配置文件
rst2pdf 会读取配置文件 (如果存在)/etc/rst2pdf.conf 和 ~/.rst2pdf/config ，也可以通过命令参数 &#8211;config=FILE 来设置配置文件的路径。配置文件的格式如下:
[general]# Footnote backlinks enabled or not (default: enabled)
footnote_backlinks=True# Show footnotes inline instead of at the end of the document
<a
href="http://blog.ossxp.com/2010/07/1450/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/07/1450/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Fail2ban&#8212;-暴力口令破解的克星</title><link>http://blog.ossxp.com/2010/04/961/</link> <comments>http://blog.ossxp.com/2010/04/961/#comments</comments> <pubDate>Wed, 07 Apr 2010 12:28:33 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[安全]]></category> <category><![CDATA[fail2ban]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=961</guid> <description><![CDATA[
Fail2ban对防止暴力破解口令有非常好的作用，它可以设置对方密码失败n次后用防火墙屏蔽n分钟，写入日志中，并可邮件你。 它的工作原理就是:
fail2ban → 监视log file → 连续出现多次错误信息 → 封锁IP.请确定已经安装了 fail2ban,如果没有可以使用 sudo aptitude install fail2ban 来安装（fail2ban 这是 debian 源中的包，如果是群英汇客户，安装 ossxp-secure-fail2ban，自动安装了群英汇提供的过滤器扩展等）。您可以在群英汇的单点登录网站 中亲身体验到 fail2ban的威力。  8-) 8-)
下面以配置cosign 为例来演示 fail2ban 的配置使用。
在Debian上Fail2ban的配置文件在 /etc/fail2ban 下，jail.conf配置文件是fail2ban所保护的具体服务的配置，但是一般都是配置 jail.local 文件来覆盖 jail.conf。下面是一些fail2ban的全局变量，可以被覆盖:
ignoreip = 127.0.0.1 172.13.14.15   #忽略IP,在这个清单里的IP不会被屏蔽
bantime = 600                <a
href="http://blog.ossxp.com/2010/04/961/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/04/961/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>提高Nutch局域网抓取的速度</title><link>http://blog.ossxp.com/2010/03/911/</link> <comments>http://blog.ossxp.com/2010/03/911/#comments</comments> <pubDate>Wed, 31 Mar 2010 09:51:09 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[搜索引擎]]></category> <category><![CDATA[未分类]]></category> <category><![CDATA[nutch]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=911</guid> <description><![CDATA[
如果想要提高Nutch局域网抓取的速度，大家第一个想到肯定是 -threads .但是那是错误的,如果只是单单增大线程数，那根本于事无补。通过下面这组测试，我们看看 -threads 是否起作用。首先在本地apache2下建立两个网站，写一个简单的Rakefile来帮助完成测试。设定 depth=3,下面是Rakefile的内容:
threads=1
depth=3
task:default =&#62; [:crawl]
task:crawl =&#62; [:clean] do
t=Time.now
sh "bin/nutch crawl myurl -dir crawl -depth #{depth} -threads #{threads}"
puts Time.now-t
end
task:clean do
sh "rm -rf crawl"
endthreads的值分别为1，5，10 结果如下表:线程数
时间1
891.0014625
889.56052910
878.812949从上面表格可以看出，这根本一点作用都没有。第一种提高速度的方法就是减少抓取之间的延迟时间，我们可以通过修改conf/nutch-default.xml中 fetcher.server.delay 来减少延迟时间。fetcher.server.delay
抓取器在同一服务器的逐次请求所延迟的秒数我们试试减小它的值为1.0(原先的值为5.0)。经过测试，结果如下:线程数
时间1
482.8070965
488.66685310
486.67904显然速度提高了，但是线程数还是起没有作用，原因就在于conf/nutch-default.xml中 fetcher.threads.per.host 配置为1。那么第二种方法就是同一时刻允许多个线程访问同一主机。fetcher.threads.per.host
这个值允许同一时刻访问一台主机的最大线程数如果这个配置为1，同一时刻只允许一个线程，启动多少的线程都没用。下面我们增大这个配置为5,测试结果如下:线程数
时间1
484.7549185
384.20104110
332.934009很明显随着线程数的增大，抓取速度也在增大。如果还想再提高速度的话，可以减小抓取之间的延迟时间。不过不是修改 fetcher.server.delay ,而是修改 fetcher.server.min.delay 。这个配置是设定抓取器在同一服务器的逐次请求所延迟最小的秒数，这个值仅当 fetcher.threads.per.host 属性值比1大时适用。]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/03/911/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Firebug&#8212;-javascript调试利器</title><link>http://blog.ossxp.com/2010/03/889/</link> <comments>http://blog.ossxp.com/2010/03/889/#comments</comments> <pubDate>Fri, 26 Mar 2010 12:42:21 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[firebug]]></category> <category><![CDATA[firefox]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=889</guid> <description><![CDATA[
以前调试 javascript 总是痛苦不堪的使用一个又一个的 alert. 不过现在通过使用 firefox 的 firibug 的插件，终于摆脱了可恶的 alert .
Firebug是一个非常好用的调试工具，它可以除错、编辑、甚至删改任何网站的 CSS、HTML、DOM、与 JavaScript 代码，当然对ajax也十分好用。其中最主要的Console是Firebug给出各种信息的窗口，而这也正是Console的主要用途。除此之外，Console还提供了通过命令行方式来调试Javascript的多种方法。console.debug(object[, object, ...])
在控制台输出一条消息,包含一个指向代码调用位置的超链接.假如是直接在控制台输入该命令,就不会出现超链接(和console.log()一  样).
console.info(object[, object, ...])
在控制台输出一条带有“信息”图标的消息和一个指向代码调用位置的超链接.
console.warn(object[, object, ...])
在控制台输出一条带有“警告”图标的消息和一个指向代码调用位置的超链接.
console.error(object[, object, ...])
在控制台输出一条带有“错误”图标的消息和一个指向代码调用位置的超链接.
console.assert(expression[, object, ...])
测试表达式expression是否为真.如果不是真,会在控制台写一条消息并抛出异常
console.dir(object)
以列表形式输出一个对象的所有属性,有点和查看DOM窗口相类似.
console.dirxml(node)
输出一个HTML或者XML元素的XML源代码,和在HTML窗口看到的相似.
console.group(object[, object, ...])
输出一条消息,并打开一个嵌套块,块中的内容都会缩进.调用console.groupEnd()关闭块,该命令可以嵌套使用.
console.groupEnd()
关闭最近一个由console.group打开的块.
console.time(name)
创建一个名字为name的计时器,调用console.timeEnd(name)停止计时器并输出所耗时间(毫秒).
console.timeEnd(name)
停止同名的计时器并输出所耗时间(毫秒).
console.profile([title])
打开Javascript性能测试开关,可选参数title会在打印性能测试报告时在报告的开头输出.
console.profileEnd()
关闭Javascript性能测试开关并输出报告.
console.clear()
清空console信息窗口.另外，Firebug还可以设置断点。单击行号，就会设置一个断点。右击行号，就可以设置一个断点出现的条件，只有当条件为真时，程序才会暂停执行。右面还有一个watch窗口，可以监控当前的变量，也可以查看设置的断点。]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/03/889/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Nutch 深度的测试</title><link>http://blog.ossxp.com/2010/03/869/</link> <comments>http://blog.ossxp.com/2010/03/869/#comments</comments> <pubDate>Fri, 19 Mar 2010 01:34:17 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[技术文章]]></category> <category><![CDATA[搜索引擎]]></category> <category><![CDATA[未分类]]></category> <category><![CDATA[java]]></category> <category><![CDATA[nutch]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=869</guid> <description><![CDATA[
今天下午我做了一个Nutch深度的测试。先在apache2下建立一个小网站,这个网站用Git作版本控制工具，它只有5个网页，分别是a.html,b.html,c.html,d.html,index.html。它们的链接关系index.html中有a.html,a.html有b.html,依次类推。这五个网页分别有各自的特殊字符页面
特殊字符index.html
首页a.html
三国演义b.html
西游记c.html
群英汇d.html
红楼梦这期间发生一个小插曲，我开始用nutch爬起这个小网站，结果什么都搜不到。我反复折腾，最后总算对比其他网页才知道错在哪。原因就是开始我图简单就少写了meta标签，所以总是搜不到。看来下一次要好好研究研究nutch的字符编码问题:
&#60;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&#62;下面正式开始测试，先写个Rakefile,这样就可以简化操作:
depth=1
task:default =&#62; [:search]
task:crawl do
sh "bin/nutch crawl myurl -dir crawl/ -depth #{depth} -threads 10"
end
task:search =&#62; [:crawl] do
sh 'rm -rf ../crawl'
sh 'mv crawl ../'
sh 'sudo /etc/init.d/tomcat6 restart'
end修改depth的值，依次从1－5，分别执行rake，搜诉网页上的特殊字符结果如下:depth
首页
三国演义
西游记
群英汇
红楼梦1
可以2
可以
可以3
可以
可以
可以4
可以
可以
可以
可以5
可以
可以
可以
可以
可以nutch的深度是依据链接的，这样设计的爬虫容易控制。]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/03/869/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Nutch的安装与配置</title><link>http://blog.ossxp.com/2010/03/746/</link> <comments>http://blog.ossxp.com/2010/03/746/#comments</comments> <pubDate>Fri, 05 Mar 2010 09:38:54 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[Java＆J2EE]]></category> <category><![CDATA[搜索引擎]]></category> <category><![CDATA[nutch]]></category> <category><![CDATA[搜索引擎，java]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=746</guid> <description><![CDATA[Nutch的介绍
Nutch是一个开源Java实现的 搜索引擎 。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫.Nutch的安装
在Apache官方网页下载目前最新版本的 Nutch-1.0 ,大小83M。解压下载的压缩包:
$ tar -zxvf nutch-1.0.tar.gz环境变量的配置
确保已安装jdk和tomcat,设置环境变量NUTCH_JAVA_HOME:
$ export NUTCH_JAVA_HOME=$JAVA_HOME抓取前的配置工作新建myurl文本文件，文件中写入要抓取网站的顶级网址，即要抓取的起始页。以我抓取我们公司的博客网站为例： http://blog.ossxp.com/编辑conf/crawl-urlfilter.txt文件，修改MY.DOMAIN.NAME部分，把它替换为你想要抓取的域名（地       址），即把:
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
修改为：
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*ossxp.com/编辑conf/nutch-site.xml文件，在&#60;configuration&#62;&#60;/configuration&#62;中加入下面一段:
&#60;configuration&#62;
&#60;property&#62;
&#60;name&#62;http.agent.name&#60;/name&#62;
&#60;value&#62;HD nutch agent&#60;/value&#62;
&#60;/property&#62;
<a
href="http://blog.ossxp.com/2010/03/746/" class="more-link">阅读全部内容 &#187;</a>]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/03/746/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>网站维护通知</title><link>http://blog.ossxp.com/2010/02/684/</link> <comments>http://blog.ossxp.com/2010/02/684/#comments</comments> <pubDate>Wed, 24 Feb 2010 03:13:28 +0000</pubDate> <dc:creator>崔 锐</dc:creator> <category><![CDATA[新闻]]></category><guid
isPermaLink="false">http://blog.ossxp.com/?p=684</guid> <description><![CDATA[因服务器硬件升级，从今日（2010/2/24）起，国内的服务器将迁出进行例行维护，群英汇网站的各项服务暂时托管在国外的服务器。
单点登录服务将迁移至新域名 weblogin.ossxp.net。
迁移期间，服务可能会不正常，敬请原谅。
更新：服务器已完成硬件升级和维护工作，于今日 (2010/3/7) 重新迁入国内的IDC机房。
]]></description> <wfw:commentRss>http://blog.ossxp.com/2010/02/684/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (user agent is rejected)
Database Caching using disk

Served from: blog.ossxp.com @ 2012-02-10 17:34:10 -->
