Apr 25, 2007

Flash Media Player

关键词: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
    王晓峰的博客《不许联想》中有个音乐盒,其实用的就是这款播放器。这款播放器的好处是界面比较漂亮,缺点就是音乐必须在同目录下,且不能更改playlist文件的地址。换句话说,要是有人想下载《不许联想》中音乐盒里的歌曲,其实很简单……,秘密就在我提供的这个下载包里。

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

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

echo " <track>\n";

后添加如下的代码:

if (($row['artist'] != ") || ($row['title'] != ")) {
printf(" <title>%s</title>\n<creator>%s</creator>\n", xspf_player::entities($row['title']), xspf_player::entities($row['artist']));}

Post by SUN @ 4:20 pm 与时俱进 | Comments (27)
Apr 18, 2007

搜索机器人访问控制

关键词:搜索 机器人 Web Spider php

主页在载入速度对浏览者来说是一个比较关键的因素。一般来说,浏览者的容忍极限为5s左右,如果读取时间大于5s,浏览者往往会选择放弃。因此,我采用了现在的Live Archive方式,用 http://blog.znsunimage.com/archives.html 来代替我现在的主页,同时对该页面内的内容进行精简,将内容控制在80k以内,以提高那些新访问者的速度。

但是,相应的问题也来了。Live Archive的结构不利于搜索机器人(Web Spider)爬行,且它调用了不少的javascript内容,搜索机器人(Web Spider)无法跟踪;其次,正常主页上的诸多好友链接也被“精简”,影响了交互。虽然部分问题可以用设定robots.txt的方式来弥补,但是还是有些欠缺。

因此做了如下的处理:

  1. 让用户可以自己设定浏览方式。
    用户可以通过点击左侧“我的网站”中的Live Archive/Normal Mode 来切换浏览主页的方式,同时结果保存在浏览器Cookies中,下次用同一台电脑访问时候,系统会自动根据用户喜好选择不同的浏览方式。比方说我自己就采用正常浏览方式,因为大量的内容已经被缓存在我的浏览器中,对我来说速度已经不是瓶颈问题。
  2. 将搜索机器人(Web Spider)直接引导到正常的主页,使得他们能够收集更详细全面的信息,包括我的诸多好友链接。主要参考了该网页,精简为下面的一段代码:

    $UA=$_SERVER['HTTP_USER_AGENT'];
    if eregi("Googlebot|Yahoo|VoilaBot|Ask Jeeves|SpeedySpider|MSNbot|Yahoobot|Baiduspider|Sohubot|Lycos|Robozilla|Inktomi Slurp|larbin|spider|crawlGoogle AdSense|EchO!|Magpie|InternetSeer|Magpie|Alexa|The World Wide Web Worm|Voyager|robot|Speedy Spider|Motor|AskJeeves|GigaBot|The Python Robot|MSIECrawler|GetBot|SurveyBot|Fish search|Netcraft",$UA) //大小写没有影响
    {$file = "/home/znsunima/public_html/wordpress/index2.html";
    ob_start('ob_gzhandler');
    echo implode(", file($file));
    ob_end_flush();}
    else
    header("Location: http://blog.znsunimage.com/archives.html"); //见注¹

上面代码的原理是利用HTTP_USER_AGENT参数来判断是否为搜索机器人²,如果是,返回压缩过的正常主页;反之,返回Live Archive版本的主页。如果你用的是firefox,可以通过在地址栏输入“about:config”,新增general.useragent.override 字段后设定User_Agent来测试。

注¹. 其实其中的archives.html其实我也用php压缩过了,因为我的服务器不支持html格式的直接压缩
注². 网上的机器人很多,我只列了访问过我网站的和其他一些常见的Spider。

  
Post by SUN @ 12:07 pm 与时俱进, 网站更新 | Comment (1)
Apr 16, 2007

SB Google or SB 粪青

前段时间有件事情闹得沸沸扬扬,这就是百度的SB搜索门事件
用百度搜索“SB”的时候,出来的第一条结果就是google的一个域名:http://sb.google.com 。而打开该域名,你看到的却是Google的主页内容,和“SB”没有任何关系。基于“SB”一词在中国的特殊含义,不少国人研判是百度在故意诋毁Google。

于是粪青扎堆的中文网络上硝烟四起,随便搜搜可以找到一大堆,这里随便抓俩:
blog.chinaunix.net/u/19782/showart_262214.html
www.zousuper.com/?p=158
内容无非是义正严词的控诉baidu的万恶行径,指责baidu利用技术手段操控搜索结果。身为愤青,每每看到粪青的这种大作总觉得抓狂,毛主席说过,没有调查就没有发言权。可这帮特“锑”的粪青把这金玉良言全忘得一干二净了。

其实,用Google英文搜索,就不难得到答案:
http://sb.google.com  是为下面的网址设立的域名:
http://sb.google.com/safebrowsing/update?version=goog-black-url:1:1
这个网址是google的黑名单,记录着Google收集的对你有害的垃圾网站。当你安装了Google的工具条后,Google在你浏览网页的时候会自动连接到该网址验证你浏览的网页,保证你网上冲浪的安全;SB其实是safe browsing的意思。
而当你直接键入这个网址所在的域名http://sb.google.com时候,Google会自动跳转到其主页,和baidu全无关系。

而另一方面,这个域名中包含有sb这词,多数搜索引擎对关键词存在与网址中给与相当高的权重。其实不单百度,在其他搜索引擎得到的结果中 sb.google.com 的排名也相当靠前。Baidu将sb.google.com放在首位,只能说明它对这个因素的权重设置相对较高,所以得到了这样的结果,和中国的国骂是没有关系的。

至此,SB搜索门事件真相大白。SB不是Google,也不是百度……

Post by SUN @ 6:25 pm 与时俱进 | Comments (2)
Apr 15, 2007

共享你的RSS资源

接下来的网络时代,必定是web2.0的天下。之前我用Google Reader对自己的网络资源进行了整合。
今天发现Yahoo!几个月前推出了Pipes功能,同样可以让用户自己收集网络上的资源,然后整合之。

就目前来说,前者更适合自己阅读时候使用;而后者在“共享”这个理念上更符合web2.0这个概念,因为它可以的组合、生成新的RSS资源,而且方便其他用户在你的基础上更改。。

作为终端用户,当然是要取长补短啦。我将自己Google Reader整合到了pipes中,于是就得到了下面这个新的资源:
Chaney's Life

里面收集了我的blog,我的delicious网络书签,大部分我关注的blog ,甚至当别人的blog上提到我时,这个聚集器也能帮我收集到(传说中的自恋……)。当然,应用这个聚集器最好的方法就是利用它生成的RSS,将其导入到自己的Google Reader中使用啦。

你也可以自己定制自己的pipe,如果你不会,只要在我的pipe基础上修改一下就可以了。

Post by SUN @ 4:07 pm 与时俱进 | Comment (0)
Apr 7, 2007

想和你一起看星星

小时候上学,经常要晚归——或是学棋,或是晚自习。中间有段路没有路灯,黑漆漆的。
天不好的时候,这段路我是跑过去的,主要是怕不小心把哪个孤魂野鬼给吓着了。如果天气不错,我会仰着头慢慢溜达,天上除了熟悉的星座外,还能看到“卫星”(其实是飞机)、流星、还有银河。不过很遗憾的是,直到现在,我熟识的星座还仅限于大熊小熊仙后猎户天蝎。当然,这不能怪我不好学,主要是因为所待的几个城市都充满了大气污染和光污染,别说银河,就是看到北极星都难。

所以说现在大城市里的小孩其实挺没劲的,想拉自己喜欢的mm去看星星都不成。你要是冲个mm说:“咱一起去看星星吧。”保管被人当花痴……

不过nie,真要看呢,还是有不少地方的。比方说川西啦,云南啦,西藏啦,米国的national park,北欧的小镇啦,澳洲的大草原啦,新西兰的峡湾啦,再次点,就是到了太平山顶都还是能看到点星星的。不过今天我要说的观星台,其实就是你的电脑,准确的说,是一款观星软件——stellarium

stellarium其实寻星观星软件很多。我以前就安过一款专业级的寻星软件,存储了全世界科学家发现的几乎所有各种星星资料。不过因为是科研用的,所以界面也有点学究,不喜欢。今天要说的stellarium就不一样。它是一款开源软件,针对的就是咱们这些业余观星者。

你可以设置自己所在的位置,可以360°全天观察,可以看到行星、星座,星云等等多达12万的星体。更重要的是它可以实时显示你所在位置的星图,而且你还可以非常方便的更改时间。这对于远离洁净天空的我们来说,无疑是一个很好的助手。

试想一下:赶上个好天气,扛上自己的笔记本,带上自己的宝宝驱车到远郊的海滩上,用GPS定好位置,打开笔记本和儿子一起对着星图找星星;看着儿子兴奋的样子,回想自己的青葱岁月,能不开心么。 :)

顺便附上一个演示视频,给大家参考下:

Post by SUN @ 5:16 am 与时俱进 | Comments (7)
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,把所有修改过的文件保存一下,上传,试试下效果吧。

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