simhash算法的原理 01月06日

第一次听说google的simhash算法[1]时,我感到很神奇。传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。传统hash算法产生的两个签名,如果相等,说明原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大。从这个意义上来说,要设计一个hash算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相等的信息外,还能额外提供不相等的原始内容的差异程度的信息。

因此当我知道google的simhash算法产生的签名,可以用来比较原始内容的相似度时,便很想了解这种神奇的算法的原理。出人意料,这个算法并不深奥,其思想是非常清澈美妙的。 (更多…)

网页查重算法Shingling和Simhash研究 01月06日

据统计,互联网上的重复网页约占 30%~45%。这其中有由于镜像转载引起的内容完全相同的网页,也有仅存在微小差别的网页,比如广告,计数器,时间戳等不同,而这些差别是和搜索的内容 无关的。根据中国互联网络信息中心2005年7月发布的统计报告显示,用户在回答“检索信息时遇到的最大问题”这一提问时,选择“重复信息太多”选项的占 44.6%,排名第1位[1]。将相似的网页消除,可以节省网络带宽,减少占用的存储空间,提高索引的质量,即提高查询服务的效率和质量,同时减轻网页所 在远程服务器的负担。在网页查重算法中shingling和simhash被认为是当前最好的两个算法。 (更多…)

当我们老了 11月06日

一直很想知道当我们老了的时候,我们是否会因为年轻的时候的一些选择后悔,后悔没有选择其他的路,如果当时选择另外一条路,或许将是不一样的人生。

想起大学的时候激励宿舍哥们的一句话:只要一直努力,即使方向不对,以后也不会后悔。我们后悔,是为了以前的碌碌无为而愤怒,为以前没有理解师长们的教导而叹息,但是绝对不是,为父母不是官二代、富二代而后悔投胎投错了。

当我们老了,孙子坐在我们身边的时候,让我们将故事的时候,我们还能像我们的爷爷那样,讲出以前奋斗的历史么?或许,我们会告诉我们的孙子,你爷爷,坐在电脑前大半辈子,现在快累了,要躺下了。

按照乔布斯的年龄,我们的生命已经过去了一半,但是,我们能讲出的故事,仅仅是:我奋斗了十八年,才能和你坐在一起喝咖啡,这个时候的咖啡,我还只知道辛巴克,不知道costa。

回想起自己过去的一半生命,谈不上壮阔的历史,突然总结,发现自己是一个千年老二,从小学到中学、中学到大学、大学到工作,我总是在一个和顶尖团体边缘的一个团体。

我很努力,但是很少有人知道,我是那样一个不喜欢张扬的人,那样坚定地、默默地做着自己认为正确的事情。但是这个社会节奏是在是太快了,以至于你不告诉别人你NB,整个世界都认为你是SB。

一直都想把我的博客做成我的技术博客,和我的人生无关,但是,终究想了一下,写这个博客是为了让我更多地思考,或许当我们老了的时候,我们都懒得看年轻的时候那些所谓的技术崇拜的文章了。

用GDB调试PHP程序[转] 03月28日

转载自:http://www.sulabs.net/?p=40

我们先想办法重现一下Segmentation fault现象,下面我们先使用Shell的方式来试验,编写demo.sh脚本:

#!/bin/bash
kill -s SEGV $$

其中$$就是脚本的进程号,SEGV信号的作用等同于Segmentation fault,整句基本意思就是让自己崩溃。

保存好,并且加上执行权限:chmod +x demo.sh (更多…)

诺基亚推出网页小工具:打小鸟切水果“破坏”所有网站【转】 11月08日

诺基亚推出网页小工具:打小鸟切水果“破坏”所有网站【转】

转载自:http://www.chinaz.com/mobile/2011/1108/218842.shtml [...]

nosql相关的图书–附下载地址 08月06日

memcache和memcached之间的区别和联系【转】 07月11日

由于在项目后期会引入缓存策略对角色的数据进行缓存,而现在我们大部分缓存都使用文件缓存,开发过网页游戏的朋友们大都知道,语言包和游戏相关的数 据大部分不经常改动,有时候几个星期不需要更新,只是在进行版本更新的时候才重新生成一次数据缓存,而角色的数据和数值时刻在变化着,会频繁的更新和操 作,采用文件缓存会频繁地进行I/O操作,在这个功能上文件缓存就不太适合了,所以对于角色的数据采取内存缓存策略在这里就比较合适。

对于内存缓存,比较常用的有两种memcache和memcached扩展。而memcached和memcache的守护进程memcached同名, 比较容易引起混淆,甚至提到memcached,有些人第一想到的是后台的守护进程,这里还是有必要分析一下两者之间的区别,以下观点仅是个人观点,希望 朋友进行补充和更正。
首先我们可以从php官方手册上可以清晰的看到两者的区别:
memcache:http://cn2.php.net/manual/en/book.memcache.php
memcached:http://cn2.php.net/manual/en/book.memcached.php

memcache是完全在PHP框架内开发的,memecached是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多。 (更多…)

PHP5.4改变的新特性(未完待续) 07月04日

PHP5.4改变的特性

20 Jun 2011, PHP 5.4.0 Alpha 1
- autoconf 2.59+ is now supported (and required) for generating the
configure script with ./buildconf. Autoconf 2.60+ is desirable
otherwise the configure help order may be incorrect. (Rasmus, Chris Jones)

删除的特性:
. break/continue $var syntax. (Dmitry)
. Safe mode and all related ini options. (Kalle) //删除安全模式相关的所有函数和配置
. register_globals and register_long_arrays ini options. (Kalle) //删除这两个函数配置文件中的内容
. import_request_variables(). (Kalle) //
. allow_call_time_pass_reference. (Pierrick)
. define_syslog_variables ini option and its associated function. (Kalle)
. highlight.bg ini option. (Kalle)
. Session bug compatibility mode (session.bug_compat42 and
session.bug_compat_warn ini options). (Kalle)
. session_is_registered(), session_register() and session_unregister()
functions. (Kalle)
. y2k_compliance ini option. (Kalle)

- Moved extensions to PECL: (Johannes) //sqlite 被移动到PECL中
. ext/sqlite. (更多…)

BASE64编码的图片在网页中的显示【转】 06月27日

BASE64编码的图片在网页中的显示【转】

摘编自:http://www.javaeye.com/topic/314651 原作者:mfcai 1.为什么 [...]

利用Curl、socket、file_get_contents POST数据 05月16日

 /**
* Socket版本
* 使用方法:
* $post_string = "app=socket&version=beta";
* request_by_socket('facebook.cn','/restServer.php',$post_string);
*/
function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){
$socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);
if (!$socket) die("$errstr($errno)");
fwrite($socket,"POST $remote_path HTTP/1.0");
fwrite($socket,"User-Agent: Socket Example");
fwrite($socket,"HOST: $remote_server");
fwrite($socket,"Content-type: application/x-www-form-urlencoded");
fwrite($socket,"Content-length: ".strlen($post_string)+8."");
fwrite($socket,"Accept:*/*");
fwrite($socket,"");
fwrite($socket,"mypost=$post_string");
fwrite($socket,"");
$header = "";
while ($str = trim(fgets($socket,4096))) {
$header.=$str;
}


$data = "";
while (!feof($socket)) {
$data .= fgets($socket,4096);
}
return $data;
}
 /**
* Curl版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_curl('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_curl($remote_server,$post_string){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$remote_server);
curl_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT,"Jimmy's CURL Example beta");
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
 /**
* 其它版本
* 使用方法:
* $post_string = "app=request&version=beta";
* request_by_other('http://facebook.cn/restServer.php',$post_string);
*/
function request_by_other($remote_server,$post_string){
$context = array(
'http'=>array(
'method'=>'POST',
'header'=>'Content-type: application/x-www-form-urlencoded'."".
'User-Agent : Jimmy's POST Example beta'."".
'Content-length: '.strlen($post_string)+8,
'content'=>'mypost='.$post_string)
);
$stream_context = stream_context_create($context);
$data = file_get_contents($remote_server,FALSE,$stream_context);
return $data;
}
?>
第 865 页,共 867 页« 最新...102030...863864865866867