手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2010年08月的文章

告垃圾评论者

我想,我遇到的问题应该不是个案,即,博客的评论被大量的垃圾评论所占据。里面充斥着N多链接之类的,或者上来就是一句:博主,我看好你哦,又或者,我也在学习这个。然后就是一个主页链接。
事实上,自从08年8月1日以来,我的博客的评论就处于审核再发布的状态,因此所有的评论都不会直接发布出来,而是先审核再发布。对于这种垃圾评论,我一向是直接删除的。也请垃圾评论发布者们不要浪费大家的时间 。既浪费你也浪费我,何必呢?

记得前一阵,mysql中文网(mysql.cn)也宣布评论开始审核了在本站发广告评论的看过来。冯大辉等也早就开启审核。和他们这些大流量网站相比,我的站点的流量可以忽略不计了,但,我觉得这种事情不是一个个案,而是大家都遇到的(可惜不能把这些IP进行鉴定处理,否则可能对不起同一IP段的朋友),再加上即使我人工审核,每天还是有不少垃圾评论出现,因此设为置顶贴,请这些朋友手下留情。

可惜。。。

Tags: 垃圾评论, seo

PHP图像识别

对于一些几乎没有变型的图片来说,下面这个方法或者会减轻你的工作量。
事实上,我也是从http://fr.cc0311.com/php-telephone-number-ocr.html看的代码,再想想,walkerlee在05年就写过了关于bmp图片的识别。不过BMP可能会相对简单一点吧?
看了这个法月博客的代码。脑子一热,花了半小时,重写了一遍。。。没有优化。因为大部分方法还是参考的他的,只是对法月的这篇文章中的代码,我做了简单的改动。版权,还是算他的吧。。。去年的时候,也写过类似的。。只是因为图片变形,最终识别率超低,因此对于这种不变形的,还是写下代码做个笔记吧。

PHP代码
  1. <?php  
  2.   
  3. $imgfile = 'http://bj.ganji.com/tel/5463013757650d6c5e31093e563c51315b6c5c6c5237.png';  
  4.   
  5. interface imagedatas {  
  6.     public function setimagedata();  
  7.     public function getimagedata();  
  8. }  
  9.   
  10. class GanjiImage implements imagedatas{  
  11.     public $imagedata;  
  12.     public function __construct(){  
  13.         $this->setimagedata();  
  14.     }  
  15.     public function setimagedata(){  
  16.         $this->imagedata = array(  
  17.             0=>'000011111000001111111110011000000011110000000001110000000001110000000001110000000001011000000011011100000111000111111100000001110000',  
  18.             1=>'011000000000011000000000111111111111111111111111',  
  19.             2=>'001000000011011000000111110000001101110000011001110000011001110000110001111001100001011111100001000110000001',  
  20.             3=>'001000000010011000000011110000000001110000000001110000110001110000110001011001110011011111011111000110001100',  
  21.             4=>'000000001100000000111100000001111100000011101100000111001100001100001100011000001100111111111111111111111111000000001100000000000100',  
  22.             5=>'111111000001111111000001110001000001110001000001110001100001110001100001110000110011110000111111000000001100',  
  23.             6=>'000011111000001111111110011000110011110001100001110001100001110001100001110001100001010001110011010000111111000000001100',  
  24.             7=>'110000000000110000000111110000111111110001110000110111000000111100000000111000000000111000000000',  
  25.             8=>'000100011110011111111111110011100001110001100001110001100001110001100001110011100001011111111111000100011110',  
  26.             9=>'001111000000011111100001110000110001110000110001110000110001110000110001011000100001011111100111000111111110000001110000',  
  27.         );  
  28.     }  
  29.     public function getimagedata(){  
  30.         return $this->imagedata;  
  31.     }  
  32. }  
  33.   
  34. class imageValidation  
  35. {  
  36.     protected $imgfile;  
  37.     protected $imgsize;  
  38.   
  39.     protected $imgdata//数组  
  40.     protected $hordata//横向  
  41.     protected $verdata//纵向  
  42.   
  43.     protected $imgfunc;  
  44.   
  45.     function __construct( $imgfile , $imgsource = ''){  
  46.         $this->imgfile = $imgfile;  
  47.         $this->imgsize = getimagesize($imgfile);  
  48.         $this->imgfunc = $this->getImageFunc();  
  49.         if($this->imgfunc == 'imagecreatefromstring'){  
  50.             $this->imgfile = file_get_contents($this->imgfile);  
  51.         }  
  52.         $this->imgsource = new $imgsource();  
  53.     }  
  54.   
  55.     function getImageData(){  
  56.         $func = $this->imgfunc;  
  57.         $resource = $func$this->imgfile );  
  58.         for$i=0 ; $i < $this->imgsize[1] ; $i++){  
  59.             for$j=0 ; $j<$this->imgsize[0] ; $j++){  
  60.                 $rgbcolor = imagecolorat( $resource , $j , $i);  
  61.                 $rgbarray = imagecolorsforindex( $resource , $rgbcolor );  
  62.                 if($rgbarray['red'] < 125 || $rgbarray['green']<125 || $rgbarray['blue'] < 125){  
  63.                     $data[$i][$j]=1;  
  64.                 }else{  
  65.                     $data[$i][$j]=0;  
  66.                 }  
  67.             }  
  68.         }  
  69.         $this->imgdata = $data;  
  70.     }  
  71.       
  72.     function getHorData(){  
  73.         $z = 0;  
  74.         for($i=0; $i<$this->imgsize[1]; $i++){  
  75.             if(in_array('1',$this->imgdata[$i])){  
  76.                 for($j=0; $j<$this->imgsize[0]; $j++){  
  77.                     if($this->imgdata[$i][$j] == '1'){  
  78.                         $newdata[$z][$j] = 1;  
  79.                     }else{  
  80.                         $newdata[$z][$j] = 0;  
  81.                     }  
  82.                 }  
  83.                 $z++;  
  84.             }  
  85.         }  
  86.         $this->hordata = $newdata;  
  87.         return $newdata;  
  88.     }  
  89.   
  90.     function getVerData(){  
  91.         //$data = array_reverse($this->hordata); //这是180度翻转,不是90度  
  92.         for$i=0; $icount($this->hordata[0]) ; ++$i){  
  93.             for$j=0;$j<count($this->hordata);$j++){  
  94.                 $newdata[$i][$j] = $this->hordata[$j][$i];  
  95.             }  
  96.         }  
  97.         $i = 0;  
  98.         foreach($newdata as $k=> $v){  
  99.             if( in_array(1 , $v ) || (isset($newdata[$k+1]) && in_array(1,$newdata[$k+1]) )){  
  100.                 $newdatas[$i] = $v;  
  101.                 $i++;  
  102.             }  
  103.         }  
  104.         $this->verdata = $newdatas;  
  105.         return $newdatas;  
  106.     }  
  107.     function get(){  
  108.         $i = 0;  
  109.         foreach$this->verdata as $val){  
  110.             if(in_array(1,$val)){  
  111.                 $datas[$i] .= join("",$val);  
  112.             }else{  
  113.                 $i++;  
  114.             }  
  115.         }  
  116.         foreach$datas as $k => $val ){  
  117.             $number[$k] = $this->check($val);  
  118.         }  
  119.         return $number;  
  120.     }  
  121.     function check($str){  
  122.         $imgsourcesdata = $this->imgsource->getimagedata();  
  123.         foreach$imgsourcesdata as $k => $val){  
  124.             similar_text($str,$val,$percent);  
  125.             $ret[$k]=$percent;  
  126.         }  
  127.         return array_search(max($ret),$ret);  
  128.     }  
  129.   
  130.     function draw( $data ){  
  131.         $str = '';  
  132.         if(is_array($data)){  
  133.             foreach ($data as $key => $val){  
  134.                 foreach ($val as $k => $v){  
  135.                     if($v == 0){  
  136.                         $str .= "<font color='#FFFFFF'>".$v."</font>";  
  137.                     }else{  
  138.                         $str .= $v;  
  139.                     }  
  140.                 }  
  141.                 $str.= "<br/>";  
  142.             }  
  143.         }  
  144.         echo $str;  
  145.     }  
  146.   
  147.     function getImageFunc(){  
  148.         switch($this->imgsize[2]){  
  149.             case IMAGETYPE_PNG :  
  150.                 $this->imgfunc = 'imagecreatefrompng';  
  151.             break;  
  152.             case IMAGETYPE_JPEG :  
  153.             case IMAGETYPE_JPG :  
  154.                 $this->imgfunc = 'imagecreatefromjpeg';  
  155.             break;  
  156.             case IMAGETYPE_GIF :  
  157.                 $this->imgfunc = 'imagecreatefromgif';  
  158.             break;  
  159.             default:  
  160.                 $this->imgfunc = 'imagecreatefromstring';  
  161.             break;  
  162.         }  
  163.         return $this->imgfunc;  
  164.     }  
  165.   
  166. }  
  167.   
  168. $img = new imageValidation($imgfile,'GanjiImage');  
  169. $img->getImageData();  
  170. $img->getHorData();  
  171. $img->getVerData();  
  172. $phone = $img->get();  
  173. dump($phone);  
  174.   
  175.   
  176.   
  177. function dump($data){  
  178.     print("<pre>");  
  179.     print_r($data);  
  180.     print("</pre>");  
  181. }  

对于该图片,识别率很高。

Tags: 图像识别

jQuery:TAB切换

没有什么特别的东西。主要就是有了一个延迟,但效果不是特别好。。将就点了。

JavaScript代码
  1. $.fn.gTab = function( opts ){  
  2.     var options = {  
  3.         'timer':0,  //0.005秒  
  4.         'hover':'',  
  5.         'target':'',  
  6.         'autoswitch':false,  
  7.         'addClass':'',  
  8.         'removeClass':''  
  9.     };  
  10.     var self = $(this);  
  11.     opts = $.extend(true, {},options,opts || {});    
  12.     if(!opts.target){  
  13.         alert('对不起,请设置目标对象');  
  14.         return ;  
  15.     }  
  16.     if(!opts.hover){  
  17.         opts.hover = self;  
  18.     }  
  19.     var hoverIntervalFunc = function(index){  
  20.         return setInterval(function(){  
  21.             $(opts.target+':not(eq('+index+'))').hide();  
  22.             $(opts.hover+':not(eq('+index+'))').removeClass(opts.addClass).addClass(opts.removeClass);  
  23.             $(opts.target+':eq('+index+')').show();  
  24.             $(opts.hover+':eq('+index+')').removeClass(opts.removeClass).addClass(opts.addClass);  
  25.         },opts.timer);  
  26.     }  
  27.       
  28.     $(this).hover(  
  29.         function(){  
  30.             var index = self.index(this);  
  31.             cId = hoverIntervalFunc(index);  
  32.         },  
  33.         function(){  
  34.             clearInterval(cId);  
  35.         }  
  36.     )                 
  37. }  
花了半小时写的。所以效果一些都没有特别的考虑。只考虑实现就完事了。。。象很多都是用的:eq和:not(:eq),事实上siblings()已经实现这个功能,但当时写的时候没翻到这个函数,就直接用:not(:eq)来解决了。

Tags: jquery, tab

zendstudio 8 ??

看zendstudio.net的博客才发现,zendstudio居然升级到8了。。感觉自从这个zendstudio在換了eclipse核心之后,版本号突突突的上升啊。6.0,6.1,7.0,7.1突然就到8.0了。。真是不可思议。

记得以前的版本,从5.0~5.5,花了多久,现在呢?半年一个版本?

唉,看zendstudio.net上的翻译吧,我也懒得翻译了。。。

--------------------------------------------

8.0新版具有以下几个亮点:

1、Zend Studio编辑器支持javascript以及常见js库,例如jquery,dojo,Extjs,prototype

2、更好的支持javascript,html,css等的编辑和调试(gently认为是否不用再做和 Aptana的整合工作了?)

3、集成的新的ajax调试器,将javascript和php的调试工作趋于统一

4、PHP编辑器的编辑功能和导航功能的改进和增强。

网址:http://www.zendstudio.net/archives/zend-studio-8-beta-is-now-available/

Tags: zendstudio

电池

原来的42t458历经一年后,崩了
水货电池在8个月后,充不进电了
今天,我的8芯电池又到货了,不知道他这次能够使用几天。

其实挺郁闷的。为了这个电池,我的笔记本几乎又多花了1000大洋。早知道买苹果去了
不过我不是果粉,对于苹果没有这样那样的爱好,但,听说电力真的够强劲。而不是象我,8芯电池,亮度最低,开着word之类的软件,才能用上7小时左右 。

这次我的8芯电池不知道会用几小时。之所以买8 芯的,是怕出去找不着电源插座,8芯的,几乎全功能运转,也可以3~4小时,这才是我想要的。

权当记录一下,等下次崩掉的时候也好有个记录

Tags: 联想, thinkpad, 42t4568

Records:45123456789