Feb 25, 2010

Feedburner + Pubsubhubbub + Wordpress 实现blog的实时更新

Pubsubhubbub

在谷奥上看到一条消息,Google Reader已经全面支持PubSubHubbub服务了。换而言之,如果你的博客的feed支持PubSubHubbub,那么当你的博客更新后,新的文章会实时出现在那些订阅者的Google Reader里面。

按照谷奥上的说法,用WordPress搭建博客的用户可以安装插件来实现本站feed的实时更新功能。不过还有不少人和我一样是用 Feedburner 来烧制自己的feed,对于这部分用户,其实也可以很方便的实现PubSubHubbub,具体步骤只需要两步

  1. 打开你的wordpress后台,找到Settings->Writing一项,在Update Services一栏中填写

    http://ping.feedburner.com

  2. 打开FeedBurner,找到你博客对应的Feed项,激活Publicize一栏中的PingShot功能。

    pingshot

好了,至此你的博客就有实时更新的功能了,任何用Google Reader订阅你博客的朋友都会在你发布后的几分钟内收到更新。

现在,我将按下发布按钮……

Tags:   
Post by SUN @ 6:27 pm | 与时俱进 | Comments (7)
Aug 7, 2009

Gravatar通用头像服务

Gravatar(个人全球统一标识)全称为Globally Recognized Avatar(直译为”全球认识的头像”)的缩写。

它起源于在网上各处论坛中所广泛使用的头像(avatar),随着Blog的广泛普及,在各处Blog的留言上也相继出现了头像,为了方便用户在四处的Blog广泛留言的同时可以拥有统一的头像,http://www.gravatar.com/ 提出了Gravatar这个概念并开始提供这项服务。这项服务概念上十分简单,就是把个人email地址与头像作为捆绑(请登录 http://www.gravatar.com 申请帐户,上传照片即可完成),当你再在支持Gravatar的网站留言并使用你的个人email2时,头像就会出现在你的留言旁。

比方说,我的头像现在就是一只健身老鼠: 8-)

该网站会对各个头像评定等级,就按照美国电影协会所制定的标准。所以就有X、R、PG、G四个等级(从最不适宜到老少皆宜排序),然后更酷的是,网站/Blog的管理者还能决定什么等级的头像才能显示,这显然更符合将来网络管理的趋势。

怎样申请Gravatar?

步骤很简单,如果你也有兴趣想做看看,就跟着一起试作吧:

(一)、首先是到Gravatar网站上去注册一个账号,很简单,只要填写一个你最常用的email,接着输入两次密码,送出之后,系统会寄一封确认信到你的信箱,开信,点一下启用账号连结即可。

(二)、接着,到Gravatar去登入,登入后,就可以开始上传你的图片了,格式则JPG/GIF/PNG皆可,头像尽量用jpg格式的,gif和png容易背景变黑。上传完后,等待着网站的管理员对头像图片分级 (G 普通级、PG 辅导级、R 和 X 为限制级),审核完毕它会email通知你的。

注:一般来说一天时间就可以审核通过。如果图片不含暴力或者暴露内容,多半会得到G级别的等级。

通过之后这个头像就可以使用了。在任何支持Gravatar的地方,在填写email地址时,请填写你申请注册头像用的这个email地址。你的头像就会出现在留言中。

-----------分割线----------------

顺便更新了一下Wordpress后台。之前每次更新Wordpress都是个噩梦。需要备份数据库、deactivate插件、移除旧的WP文件,上传新的WP压缩包、然后解压、改文件夹权限属性、再activate插件、重新hack一些后台文件,再逐个检查插件是否有更新……。

以后就好了,现在更新WP和插件都可以在一分钟内自动完成,自己要注意的就是备份好数据库和hack过的文件啦。

Tags:   
Post by SUN @ 12:27 pm | 网站更新 | Comments (2)
Aug 5, 2009

CSS 优化工具

现在网页制作中采用CSS/XHTML技术,可以有效地对页面以及各种元素的布局、字体、颜色、背景和其它效果实现跨浏览器的精确控制。但是,就算是简单的博客,所包含的CSS文件就可能很大。举个简单的例子,WordPress theme的CSS文件有时就多大20k。从网页速度优化的角度来说,CSS有很大的可压缩空间。

CSS优化工具是一款基于CSS Tidy 的强大CSS优化器。它可以根据你的需要对CSS进行精简优化,提高网页加载速度。

之前我使用的优化工具是CSS Tweak,不过在使用了一段时间后,我却发现这个网页已经不复存在了。 为了方便自己使用,就在自己网站上安装了这款开源工具。也希望能给其他人一点帮助。

用法很简单:
把你的CSS代码复制进去,然后根据需要选择不同的压缩方式就可以了。一般建议自己保留一份未压缩的,然后网站上使用的css文件用最大压缩比方式(就是下拉菜单的第一个选项)来压缩。

Tags:     
Post by SUN @ 3:24 pm | 随笔杂谈 | Comment (0)
Dec 17, 2007

PHP中远程文件的调用-关于Allow url fopen

关键词:Allow url fopen,php

最近发现blog突然出了点小问题,调试后发现是服务器提供商基于安全理由把Allow url fopen这个选项给关了,而我自己写的有一些代码中就用了相应的功能,所以导致了问题的出现,具体错误特征如下:

URL file-access is disabled in the server configuration

打开Allow url fopen的作用主要是在php程序中可以用http或者ftp方式来调用其他文件。如下面的代码:

<?php include("http://example.com/includes/example_include.php"); ?>

而关闭该选项后,使用上面的代码就会出错,必须换成下面的代码方可。

<?php include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php"); ?>

这里,系统变量 $_SERVER['DOCUMENT_ROOT']返回的是远程系统根目录。

其实现在很多服务商都把allow url fopen功能给关了,主要原因是防止黑客的注入式进攻,所以强烈建议用第二种方法来写代码。另外,如果还是想用url方式来写代码的话,可以考虑用curl

我用这个功能主要是实现WordPress的首页静态化。我的blog首页使用了我自己hack过的af-extended-live-archive插件,这样的好处就是可以整个站用ajax方式来访问,但是加载速度就比较一般了。所以我首先生成一个静态的页面(比方说叫example.html),然后在用index.php将example.html中的内容读取出来,实现静态化。

这里大家也许会觉得奇怪,那你把首页直接重定向到example.html不就可以了……
这里我的考量主要是两点:
1. php方式可以对example.html的内容进行压缩。
2. 为了更好的SEO,我在index.php进行了判定,如果来访问的是机器人,我会把正常的页面发给它,而不是显示加载了af-extended-live-archive插件的example.html,方便机器人进行爬行抓取。

Tags:   
Post by SUN @ 10:31 pm | 与时俱进 | Comment (0)
Apr 25, 2007

Flash Media Player

本文于2011年10月25日再次更新

本文于2009年08月20日再次更新

关键词:Flash Media Mp3 播放器 Player wordpress

目前网路上的Media播放器可谓是多不胜数,所以,这里只说说几个我认为优秀的Flash方式的播放器和Wordpress中的优秀插件,最后再沙说一下我自己使用的组合版本。

  1. CoolPlayer
    CoolPlayer是国人制作的一个Wordpress的插件,但是也可以在其他平台上运行。支持目前网络上的绝大多数格式的media,包括Google Video, Youtube等比较难获取media源的网站,配置简单,容易上手。
    严格意义上来说,CoolPlayer不应该被称做Flash Media Player,我觉得用Online Media Player更合适一些。
    和CoolPlayer类似的一款插件叫做Anarchy media Player,但是没有Coolplayer支持的格式多,不推荐。
  2. Flash Media Player
    名副其实的Flash Media Player (CoolPlayer实质上就是整合了这款Flash播放器)。
    这个播放器可以根据你自己的需要进行定制,功能非常强大;而且作者公开了源码,方便你进一步定制。
  3. XSPF Player plugin
    顾名思义,这个其实是XSPF Web Mp3 Player的Wordpress插件(XSPF Player是一款Mp3播放器,支持xml格式的playerlist)。利用此插件,你可以方便的在后台定制自己的播放列表,不需要去修改网页源代码。不过XSPF Player比较丑陋,而且播放列表不支持中文。
  4. Flash Mp3 Player
    更新:他的blog现在已经改为虾米播放器了。不过下载链接中的Flash播放器还能用。
    王晓峰的博客《不许联想》中有个音乐盒,其实用的就是这款播放器。这款播放器的好处是界面比较漂亮,缺点就是音乐必须在同目录下,且不能更改playlist文件的地址。换句话说,要是有人想下载《不许联想》中音乐盒里的歌曲,其实很简单……,秘密就在我提供的这个下载包里。

我的blog上其实使用了前面三个插件。平常在文中出现的media,我用的是CoolPlayer,而左侧的音乐盒(不好意思,强迫大家一起跟着听了……)我用的是“Flash Media Player+XSPF Player Plugin PlayerList”的组合。因为前者的播放器可以定制,且支持中文;而后者的播放列表可以很容易的进行更新——其实可以将他们整合为一个新的音乐盒插件,不过那样太耗时间,就等着有心人来做吧。我这里只说一下XSPF Player Plugin中生成的playlist中需要修改的地方:

你可以打开playlist.php中,在代码

echo "<br /><br />
<track>\n";

后添加如下的代码:

if (($row['artist'] != '') || ($row['title'] != '')) {<br /><br />
printf(" <title>%s</title>\n<creator>%s</creator>\n", xspf_player::entities($row['title']), xspf_player::entities($row['artist']));}
Tags:     
Post by SUN @ 4:20 pm | 与时俱进 | Comments (31)
Apr 6, 2007

优化WP-Cache:Wordperss优化手册(2)

关键词:WP-CacheWordpress优化加速Gzip

注:
♣ 本文是加速Wordpress-终极优化手册一文的补充,强烈建议您先参考终极优化手册后再看此文。
♣ 本文的方法只适用于单作者(不开放注册)的wordpress系统(但我相信目前绝大多数wordpress系统都是不开放注册的)。

加载WP-Cache插件是wordpress中最为常用的一种优化方式,同时,php程序本身也提供了一种非常强大的优化方式,也就是Gzip压缩传输。非常遗憾的是,WP-Cache插件要求关闭wordpress的内置gzip压缩功能。因此,我们要实现的就是在WP-Cache中使用Gzip的功能。这一思路的实现,我在终极优化手册中已经提到:

打开wp-cache-phase1.php,大概在35行左右找到如下代码:

foreach ($meta->headers as $header) {
header($header);

在此代码前添加下面的代码:

if ( extension_loaded('zlib') ) ob_start('ob_gzhandler');

OK,现在问题来了。
让我们深入分析一下加了Gzip功能的WP-Cache的工作原理:
首先,WP-Cache在用户第一次访问页面的时候,将生成的页面传输给用户,同时在服务器上缓存了页面,这第一次传输给用户的页面是没有用gzip方式压缩的。
第二,我们看wp-cache-phase1.php中的最后一个函数function wp_cache_get_cookies_values(),不难发现wp-cache是根据访问者的email来判断是否为同一用户的。问题就在WP-Cache的的这个判断机制上:

WP-Cache为不同的用户生成了不同的缓存页面。而这些用户第一次访问某一页面时候,WP-Cache发送的都是未经过Gzip压缩的页面。因此,除非这些用户再次访问该页面,否则他们都是享受不到Gzip压缩带来的好处的。

既然知道了问题的症结所在,解决的方法也就显而易见了。我们可以换用判断用户网址的办法来判断是否为同一用户,因为大多数用户都不会填写网址。这样用户A访问后,其他的BCDE等用户来访问,系统一般都会将用Gzip压缩过的页面传输给他,大大提高了缓存页面的利用率。但是这会产生一个新的问题:当用户A访问某一页面后,缓存页面中也就保留了他填写的用户名和email地址(comments.php中用php来读取缓存)。这个问题很好解决,我们可以用javascript来读取缓存

现在要做的就是修改代码了:
在wp-cache-phase1.php文件中找到如下代码

if (preg_match("/^wordpress|^comment_author_email_/", $key)) {

在前面加上//将其comment out,随后在该行的下一行添加如下代码:

if (preg_match("/^wordpress|^comment_author_url_/", $key)) {

接着,打开你的theme中的comments.php文件,找到填写comment的表单部分,这里以theme/default下的文件为例:

<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>"

将其中的 value="<?php echo $comment_author; ?>"删除。并以此类推,删除表单中email和url的value项。
随后,我们在紧跟表单后的<?php endif; ?>之前添加如下的代码,用以读取用户的Cookies:

<script type="text/javascript">
//<![CDATA[
// Set cookies
var aCookie = document.cookie.split("; ");
function GetCookie(sName, id)
{
// cookies are separated by semicolons
var something = document.getElementById(id);
// set value to NULL for new visitors
something.value="";
if(!something) return 0;
for (var i=0; i < aCookie.length; i++)
{
// a name alue pair (a crumb) is separated by an equal sign
var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
{
//reading cookie value
something.value=unescape(aCrumb[1]);
return 1;
}
}
// a cookie with the requested name does not exist
return 0;
}
GetCookie("comment_author_8e11b42cc2f3a74aac664cc9afa5baf7", "author");
GetCookie("comment_author_email_8e11b42cc2f3a74aac664cc9afa5baf7", "email");
GetCookie("comment_author_url_8e11b42cc2f3a74aac664cc9afa5baf7", "url");
//]]>
</script>

请注意,其中的"comment_author_"中的长串字符为系统生成,请自行查找后替换。(我是用firefox的web developer插件看cookie的名字的)OK,把所有修改过的文件保存一下,上传,试试下效果吧。

Tags:     
Post by SUN @ 10:53 pm | 与时俱进 | Comments (14)