StatPressCN,1.6.9.6版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

功能开发:

  1. 和wp-comments数据库联动,自动过滤掉垃圾留言者的访问记录;这样“朋友来访”显示的朋友访问列表就更精准了
  2. 修正了widget中可用参数不准确的问题,主要涉及今日来访数量、昨日来访数量、今日页面访问数量、昨日页面访问数量;
  3. “朋友来访”中显示的数量增加了50的选项卡,现在可以设定为5、10、20或50个了。

def规则:

  1. 增加了yahoo日本、cnnic的搜索引擎规则;
  2. 增加了Ginxbot、FairShare、Congentbot爬虫规则的识别。

代码改进:

  1. 在“支持”的调试信息中增加了时区和utc时间、本地时间内容显示;
  2. 在“支持”函数体中共享global $wpdb;
  3. 增加了对博客网址的识别,对me的天高云淡不再显示iframe框架调用;
  4. 动态识别blog网址(通过get_option(‘home’)函数;
  5. 修正widget中可调用参数的时间识别。

升级需做:

  • 升级至1.6.9.6版本后,请进入“系统更新”,选项卡一个都不要选,运行一次“更新统计系统和数据记录”,这样会清理掉那些垃圾留言者的访问记录。

开发笔记

听了dust2k朋友的建议后开始认真考虑过滤掉垃圾留言者。原来曾经尝试过,对akismet的运作机制不甚了了,也就作罢了。这次重新启动,一定要搞定。仔细研读了akisme的代码,它主要是针对comments进行相关处置的,并且是借助了集中存放规则的网络服务器进行的,每次判断都会提交到查询服务器上去(这种机制其实是最高效的,sharethis就是这样升级的,可惜me没有服务器资源,只好在每个版本中自带dat文件进行规则更新)。打开wordpress的默认数据库comments看了下,记录了每条留言的id、ip、agent、内容、留言者等等,其中有一项是是否验证通过。仔细考虑了下,其实基本不关akismet的事情。在StatPressCN记录ip之前,看看是否是comments表中被标记为spam就行了。

昨日访问和今日访问数据不对,刚开始以为差一天,后来发现差了是几个小时。上午测试发现不仅仅是8个小时,而是16个小时,看来问题出在时区。简单的查阅了mysql的时间函数后就更改了代码,结果和php的gmdate不太一样。关键还是时区问题。经过仔细测试,发现还是utc时间好用。机制大约这样:查找blog option中的时区设定,再结合utc时间进行处理,就能得到当地时间。但是用sql语句得到时间效率高还是php本身的时间函数效率高就不清楚了,以后有时间再测试下。

处理访问记录中的spam

做blog访问统计插件,所有的个性化创新功能都是为了方便站主或博主。StatPressCN作为基于wordpress网志的统计插件,必须要结合网志的特点提供特色功能。最开始接管StatPress的时候,就对提供的最近来访者、最近的搜索关键词以及对供稿(feed)的处理比较满意,后来结合近来移动上网(通过手机等)迅猛增加的发展趋势新增了“移动访问分析”板块,这两天又增加了“朋友”功能,呵呵,这可是其他常规统计插件不可能提供的哟。然而,这一切,都以能得到纯净的访问记录为前提,这中间的关键是,把spam给有效的识别出来并做相应处理。想起原来的访问记录居然是常规第三方统计插件(如GA、yahoo统计等)的两倍多,汗颜啊,惭愧啊,不过现在已经非常准确了,估计比那些通用插件还要精确些呐,呵呵,因为me自认对spam的处理还是非常精确高效的。

spam指的那些无聊甚至恶意的访问,属于非自然人访问的一种(另外一种是大名鼎鼎的spider)。大多数是为了做广告、拉流量,也有一些是三脚猫黑客的造访记录。wordpress提供了较好的防止spam功能,比如留言审核(可以设定为全部审核或首次审核),另外还有第三方插件,比如鼎鼎大名的Akismet可以过滤垃圾评论。但是这并不能禁止所有的spam,它们该来还是来了。

首当其冲的是三脚猫黑客的恶意访问。一般情况下大家架的blog不会夹杂其他程序或服务,这样就给识别这些恶意访问提供了方便。比如asp后缀名文件的访问(明明服务器端脚本用的是php嘛)、对“网站.rar”的请求(估计是针对那些打包上传空间的漏洞的)。对于这些访问,不能轻易在StatPressCN中忽略了事,还要做针对性处理。最直接的方式就是禁止这些ip访问,采用.htaccess文件进行限定,具体办法见博文“黑客黑啊”。考虑每次上传下载.htaccess文件不方便,me在StatPressCN中提供了动态更新.htaccess规则的子页面(可以在选项中使能)。

其次就是那些试图通过注册为用户的方式阿布广告的访问。为了让新朋友方便,一般的blog都设置为“任何人都可以注册”,这一方面提供了用户友好度,显得我们很好客嘛,呵呵,但另外一方面也给那些spamer提供了方便。对于那些偷偷溜进来的spam,第一道关自然是Akismet,但也有些漏网之鱼,那就靠自己识别了。前两天发现不少对“/wp-signup.php”的访问,me还以为是有用户注册呢。后来遍查wordpress的源文件库都没有发现此文件。后来在网络上搜索才知道,原来是针对wordpress mu的漏洞来的。对这种访问量刑后觉得罪不当诛,在记录时忽略了事好了。

最后一种则是那些隐形spider,其中以微软的live为最。对于这种偷偷摸摸的行为说实话没啥好的识别办法,就是注意观察那些短时间内大量的连续访问(任谁都不可能半分钟内访问三十多页面吧,服务器也反应不过来啊),查出来就把ip拉入banip.dat文件进行阻止。再一个方面是看“详情”板块中的“倾情粉丝”,呵呵,一个月内访问了几百页面的可能是“粉丝”,也可能是spam哟。把那些ip在“搜索”中查查就可以了。

对spam的处理其实只有两种,要么在统计是忽略它,如果是恶意的,要考虑同时把ip通过.htaccess机制完全禁止访问(要小心,不要误伤)。

关于PHP开发工具Netbeans IDE for PHP和版本管理工具svn的应用

近段一直在用Netbeans IDE early access for PHP开发StatPressCN,感觉还不错。刚好上午看到冰古在讨论PHP开发工具的问题,me觉得还是有必要给大家秀下NB for PHP。另外,顺带讲讲svn的应用。

其实me一直挺喜欢Netbeans IDE的,因为开源以及令人惊讶的运行速度,原来玩儿JAVA的时候几乎就是拿它做主力工具使用了。前段时间开发玩儿WordPress,需要弄一个PHP开发工具的时候才发现Netbeans IDE已经支持PHP开发了。直接拿来用,也没啥过度和其他考量,很顺利。为WordPress开发插件,必然涉及代码的版本管理,原来做JAVA时NB对cvs良好的支持me仍记忆犹新,看到WordPress的plugins是由svn进行管理的时候心里还在担忧为什么不用cvs呢。具体使用了才发现其实Netbeans IDE已经内置了对svn的支持。很好。

要搭建一个WordPress插件的开发环境,首先请到Netbeans的官方网站下载Netbeans IDE 6.1发布版的php预览版本并安装(提醒:不要用最新的6.5版本,svn支持有问题),然后到svn的官方网站下载客户端并安装。

然后进入NB的Options-》Miscellaneous-》Versioning-》SubVersion,设定刚才安装的svn工具的目录。

netbeans_ide_early_access_for_php_version_options_misc_versioning
netbeans ide early access for php version options misc versioning

下面需要做的签出代码,构建开发项目。

netbeans ide early access for php svn checkout
netbeans ide early access for php svn checkout

开发项目设定好后就可以进入开发界面了,功能还是很强大的。

me蓝点标明的地方是svn相关的一些信息显示。文件改动后,在项目栏中会自动把该文件标蓝,上方的tab标签页会显示为蓝色并提示已经修改;在代码编辑窗口中,增加修改处用蓝色表示,删除了则是红色;另外贴心的是如果您在view中设定了查看diff,则在最右侧会有很多小横线:蓝色(代表增加或修改了内容)、红色(代表删除了内容)以及橙色(是警告,比如html代码标签丢失等)、灰色(说明那里定义了书签),点击可以到该位置,可以很方便的浏览代码。

在项目窗口中点鼠标右键则可以看到svn的全部相关功能菜单。可以提交代码,显示版本信息等等。

netbeans ide early access for php svn function
netbeans ide early access for php svn function

不过在具体使用过程中,通过NB IDE中图形化的方式进行copy to从来没有成功过。me只好在命令行中手动完成,步骤如下:

  1. 在NB IDE中完成修改后程序文件的commit;
  2. 进入checkout出来的目录,运行svn up(记得把svn所在目录加入电脑的环境变量中)把本地的代码仓库更新到最新状态;
  3. 然后svn cp trunk tags/1.6.6.9;
  4. 然后提交svn ci -m “tag 1.6.6.9″;
  5. Done。

原来在使用tags拷贝的时候svn经常提示出错,害得me只好不停的svn co,在电脑目录中设置了很多子目录来存放每次下载;现在通过以上的方式从来就是一次成功,仔细想想可能是没有先运行svn up的关系。

wordpress汉化使用和技巧

语言障碍是国内用户的普遍问题,这很要命,要知道按照我们国家目前的发展轨迹,我们非依赖欧美英语文化不可,因为我们好像一切都在学习他们,一切好东西好像都是那边传过来的。不懂英文就像是把窗户都关上了,唉,悲惨的很。要解决这个问题,不能要求中国像印度那样当回殖民地,那就只能全民学英语,效果又很差,咋办,把英文即时转成汉语就好了。说起来简单,做起来很难,因为这是个系统工程,所涉甚多甚广。教育线:原来从初中开始的英语课现在已经从幼儿园开始了,效果咋样确实难说,但现在很难找到工作的大学生英语水平普遍较差却是事实;专业线:外国语学院算是专业培养语言人才的了,但它们能做的事情仍然是影响所谓翻译界,圈子很小;技术线:Google的在线语言翻译蹒跚到现在中算小有所成,但和实用差距还不是一般的小,不知所云的翻译比比皆是,将来wiki方式的纳入可能会解决部分问题,但实用化仍很难,需要理论的突破和技术的积累;志愿者线:me刚加入的译言是典型,靠兴趣和志愿精神及时转化国外最新讯息,很难成规模;工具线:遍地开花的汉化网站好像都活的不错,实际情况是连me已经比较喜欢(这两年基本不去了)汉化新世纪也在逐步商业化庸俗化,不是能找来crack,估计去的人也不会多,但把一些实用的日常的工具中文化应该是比较现实也比较实用的。感慨发完,me来说说如何汉化wordpress这个最流行的blog工具系统。

一、如何使用wordpress的中文包

随着wordpress的流行,国内做汉化的还是很多,您可以在网上随便Google下就可以找到很多中文包,各个版本的都有。me这里讲讲如何使用。

  1. 得到特定版本wordpress的中文语言包。版本一定要对应,是2.6.3就是2.6.3,不可混用。得到的中文语言包应该是后缀名为mo的文件,名称一般是zh_CN.mo这样的。
  2. 把该文件上传到服务器blog安装目录(不见得是根目录哟)下的wp-includes/languages下。
  3. 修改blog安装目录下的wp-config.php,找到增加修改语句define (‘WPLANG’, ‘zh_CN‘);。注意到没有这个定义和语言包是对应的。
  4. OK!再进入blog的管理后台就是中文界面了。当然,大家访问您的blog时会发现部分内容已经是中文了,比如分类标签之类的,但很不完全,这取决于您使用的主题是否汉化了。

二、如何汉化主题或插件

一般情况下,主题和插件都是英文的,因为是英语用户开发的,即使是中国人开发的,考虑到兼容沟通等问题,界面也一般是英文的。怎么办?首先我们要看看该主题或插件是否支持汉化(对我们是汉化,也可能是韩化或印度化,呵呵,其实这里是指国际化语言支持),标志是代码中是否有__($text)_e($text)__ngettext($single,$plural,$number),如果有这样的命令,有门,否则就算了吧,除非您确实懂php编程,那样的话您可以手工把上面修改成支持国际化语言的版本,呵呵。我们就按支持国际化语言的说吧。

  1. 下载poedit软件并安装,然后选择中文语言界面。
  2. 新建消息目录文档。填写相关信息:首先是工程信息,包括工程名称版本(自填,这里那akismet做例子)、团队(自填)、专用电子邮件(自填)、语言(Chinese)、国家(CHINA)、字符集(UTF-8,推荐选这个)、源代码字符集(一般也是UTF-8)、复数形式(这样写:nplurals=2; plural=1;)等;其次是路径,包括基本路径(这个很关键,是您要汉化的主题所在目录,不提供浏览功能,需要您手动记录并填写进去)和路径(填小数点.,是当前目录的意思);第三是关键字(加三个,分别是___e__ngettext:1,2
  3. 确定后会提示保存po文件。您要找到源文件的目录并把文件名称从default.po改为zh_CN.po,保存。
  4. 在消息目录文档管理员界面中找到akismet工程,双击刚才命名的那个akismet-zh_CN.po,进入翻译窗口。
  5. 翻译界面很直观,在左下角窗口写您的翻译,右下角窗口写注释(这个me一般没写,呵呵);逐条翻译后按第二个按钮保存。以后如果代码更新了(比如升级了版本之类的),只要名称未变,您按第三个按钮(就是那个互联网地球)可以更新需要翻译的语句。
  6. 翻译好了就保存吧。没其他工作了,您只需要把生成的akismet-zh_CN.mo上传到服务器上该插件目录就行了。

三、注意事项和技巧

翻译的时候不需要规规矩矩,可以有些个性化的甚至俏皮的翻译,比如me对自己开发的StatPressCN中文化时,就把TOP DAY翻译成了“洪水泛滥的日子”,呵呵。

四、me汉化的主题和插件中文语言包(暂缺

主题

插件

五、更多资源

如果有兴趣,您可以看看下面这些文章,讲理论还是比较系统的。

汉化WordPress教程

WordPress汉化手册

正确使用gettext来翻译Wordpress主题

闲言碎语 每周小结 2008-11-23

  • 凡事不过认真二字!但几千元的学费也太高了。这对自认技术派的me来讲有点汗啊。 #
  • 高亮代码工具使用方法:进入HTML代码编辑窗口(文章撰写界面中),用特定的开关(一般都是pre、code之类的)把要高亮显示的代码写入,然后直接保存,就可以了。切记:代码写好后千万不要� #
  • @gamezen 呵呵,所以我们首先要意识到这个问题,其次要做些反方向的引导并突破。 in reply to gamezen #
  • 今晚任务:更新404页面,提高用户友好度;对汉化进行总结(需要先安装一个Hugo推荐的代码高亮插件)。 #
  • 好的创意都是在日常中被限制形成恶性体制封杀了。中国目前高等教育包括初等教育的通病如此,甚至都要上升到文化层面了。 #
  • 中国产品研发缺的是创意。美国小学画画的案例。能画清楚的就是good,看不懂的则是excellent。若干年后就可能懂了! #
  • 南斯拉夫大使馆被炸事件军事技术版本。美军两枚导弹没炸,交涉后南联盟同意我们去研究,美国发现导弹被我们转移到中国大使馆了,两个小时后使馆被精确制导轰炸,原来导弹上安装有GPS制 #
  • 开发新产品的方式:1、独立研制,全部自己进行,借用已有的研究成果进行应用开发,仅进行产品开发;2、技术引进,用市场换技术的策略(成功?失败?不完美?);3、技术协作。 #
  • 任正非的口头禅:让员工拿着美国的工资在中国干活!高薪激励让员工拼命干!在华为唯独开发人员不用固定时间上下班,但必须完成分配的任务。 #
  • 商标注册是使用优先还是注册优先,抑或两者互为补充,但即使能补充还是需要主次。另外的问题就是资源占用或浪费用来保护自己的品牌,如哇哈哈把娃和哈的各种组合都注册了,红桃K更厉� #
  • 商标注册是使用优先还是注册优先,抑或两者互为补充,但即使能补充还是需要主次。另外的问题就是资源占用或浪费用来保护自己的品牌,如哇哈哈把娃和哈的各种组合都注册了,红桃K更厉� #
  • Gmail的主题好棒,哇! #
  • 欢迎albert5888朋友跟踪me的消息! #
  • 南昌直达武昌,三个半小时,不错。乘务员有帮扶行为,但厕所仍然很不干静。 #
  • 晚点睡真的对身体不好?! #
  • 酒的多与少很重要吗? #
  • 刚看了下文档,PHP居然提供了那么多sort,看来真是为了方便技术低低的广大群众啊。 #
  • Google页面下已经有到天涯问答提问的链接了,昨天提了个问题(匿名方式0,解答质量一般。今天到天涯注册了帐号,结果登录问答的时候Firefox报警“检测到该服务器正在将此地址的请求循环重� #
  • 换了个主题,还是三栏的,整体感觉要秀气些,呵呵。 #
  • 时间没安排好,只好跳过九江直达南昌。火车又晚点了半个小时,从上车时晚的十四分钟直到最后的半个小时。不过整体感觉比以前有所提升,刚巧还碰到了武汉铁路局和武汉理工大学合作的一 #
  • 欢迎LeeZhang朋友订阅me的FriendFeed! #
  • 欢迎pcload朋友跟踪me的消息! #
  • 本机安装的调试环境和服务器上的显示还是略有不同! #
  • 启用应为弃用。唉,现在别字越来越多,要改正。 #
  • 为了显得(呵呵)更国际化,启用搜狐的ip查询,还是用hostinfo。免得国外友人感觉被歧视。 #
  • IE很有点烦,排版都是乱的,唉。 #
  • 来访地址输出时需要过滤,否则直接请求登录使用此插件的blog的管理界面了。 #
  • 应该为是否在侧栏显示spy信息提供了一个选择机会,在选项中实现此功能。因为毕竟这个玩意可能会拖慢一点页面载入速度。 #
  • 为StatPressCN在侧栏添加spy功能成功,排版不够美观,马马虎虎,看来css等知识还是高深学问需要细细研究提高啊。 #
  • 刚发现TwitterFox无法自动处理长的链接地址了,原来好像用tinyurl挺好的。 #
  • StatPressCN下步计划:为侧栏统计结果显示增加spy功能。 #