git svn实战

我之前写了几个wordpress插件,比如inline-javascript, code-prettify。这些插件都托管在wordpress.org提供的svn服务器上,但是我实在太喜欢在git下活动了,因此动了点心思,想把插件代码传到github上,开发完之后利用git-svn传到wordpress的svn服务上。

照着这个思路,捋起袖子就开干了。

用git-svn抓取插件代码

wordpress的插件svn库大且缓慢,如果直接用git-svn去clone代码,一定会慢死,所以我按照以前的笔记,用git从大型svn快速clone代码

以code-prettify插件为例,首先需要读取这个插件创建时的版本号

svn log http://svn.wp-plugins.org/code-prettify|tail -4|head -1

得到了如下信息,获得一个版本号 318479

r318479 | plugin-master | 2010-12-03 20:12:29 +0800 (五, 03 12 2010) | 1 line

开始clone代码

git svn clone -s --prefix=svn/ -r318479:HEAD http://svn.wp-plugins.org/code-prettify

设置git仓库

首先把代码传了一份到github: https://github.com/volca/code-prettify

然后操作本地git仓库

git branch -m svn
git remote add origin git@github.com:volca/code-prettify.git
git checkout master

本地svn分支对应svn的远程仓库,本地master分支对应github的远程仓库

Happy time

现在可以按照平常的习惯在git下更改代码,然后用git push到github上。

如果需要更新代码到svn上,按这个流程操作就可以了:

git checkout svn
git merge master
git svn dcommit

如果需要发布wordpress插件的新版本,这个在svn里就是一个打tag的过程,用git-svn操作非常简单,下面的例子表示发布code-prettify插件的0.3版本:

git svn tag 0.3

code-prettify — wordpress语法高亮插件

最近基于google-code-prettify实现了一个代码高亮的wordpress插件 — code-pretttify,测试了下效果还不错,所以我马上把全站的代码高亮插件换成了这个。

这里是code-prettify的项目主页,我会把这个plugin的最新情况更新在这里。

code-prettify的特点

  • 完全由javascript完成代码高亮,不占用服务器资源
  • 使用简单,只要用<pre><code>和</code></pre>包住代码,发布即可,这是wordpress编辑器自带的quicktag。
  • 没有添加额外的hook,所以不会和别的wordpress插件产生冲突,绿色无污染
  • 载入速度很快,因为js是在页面尾部加载的,不会堵塞页面的载入!

代码高亮效果演示

eg:


<pre><code>
class BigBang {
    function blah() {
        echo "Hello ooso.net";
    }
}
</code></pre>

Effect:


class BigBang {
    function blah() {
        echo "Hello ooso.net";
    }
}

测试objective-c的code prettify效果

TTImageView *thumb = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 0, 0)] autorelease];
[thumb setAutoresizesToImage:YES];
[thumb setURL:@"http://farm4.static.flickr.com/3163/3110335722_7a906f9d8b_m.jpg"];
[self.view addSubview:thumb];

code-prettify下载

暂时把代码托管到github.com/volca/code-prettify,所以你可以直接使用git下载代码,或者直接从github下载现成的zip包。

代码非常简单,如果你有合适修正,可以试着用github推给我。

Update

另外安装了一个全新的wordpress测试,发现一些bug,因为wordpress默认对文本进行格式修正,在代码后面添加了很多br以及p标签,导致插件失效,所以我不得已用php替换了一些内容保证插件的正常运行。

wordpress plugin “search engine related posts” 1.2发布

去年写了个wordpress插件”search engine related posts“,不知不觉也有将近一年没有更新过了。这个插件的作用:当用户从google搜索到你的博客上,自动显示站内搜索相关的主题。这里没有用到数据库来做相关的搜索工作,而是利用google公开的一些api进行查询,因此对个人博客来说,不会增加服务器负载,完全只是一段js代码而已。

本次1.2相对第一个版本的改动

  • 将javascript提取出来放到单独的js文件里,这是为了减小每个url的大小,浏览器也会对外部js进行缓存,有效的减少带宽输出
  • js文件已经用yui compressor压缩过,只有900多个字节
  • 支持多语种搜索,修改文件中的$related_posts_lang变量即可,中文用户需要将这个值修改为zh-CN(默认是en-US)
  • 可以去除网页标题中的站名以及部分连接字符,让标题更简短且有意义

下载search engine related posts 1.2

http://wordpress.org/extend/plugins/search-engine-related-posts/

Easy DragToGo — Super DragAndGo的替代品

从前我也算是Mathon的fans,那阵子很喜欢一只手拿着鼠标浏览网页,另一只手端个茶喝喝,拎个零食扔嘴里,安逸。后来改投到Firefox门下,页面链接的拖拽就靠Super DragAndGo插件来搞定了,鼠标手势则用另外一个插件——FireGestures,两者配合使用,很是能够找回一些当初Maxthon的感觉。

但是不知道什么时候,有可能是在安装Firefox 3.0之后,Super DragAndGo插件突然失灵了,懒人式网页浏览法变得不可能,也尝试过练习用脚板来代替一部分敲击键盘的操作,终究是因为难度太高而放弃修炼:) 好在最近又找到了替代品——Easy DragToGo,不仅能够拖动链接,还能在网页上选取一些词直接拖到搜索框里,比起Super DragAndGo是有过之而无不及,从此删掉了可恶的SDAG,过上了幸福的生活。

下载安装Easy DragToGo

推荐一下Firefox插件Stylish

Stylish是这样一个firefox插件,你可以利用它来定制目标网页或网站的css样式,甚至一些firefox app的样式,让浏览效果更加舒适。而且在UserStyles网站上已经有不少现成的样式可供下载,让不会写css的普通用户也可以享受到它的便利。

其实Stylish和greasemonkey正好是一对,一个改变css,一个改变javascript。之前我写了一个用来看新浪新闻的greasemonkey脚本,这个脚本的大概原理是删除了新浪新闻页面上的右侧边栏,这样浏览的范围会更加宽一些,但是greasemonkey脚本会有这样一个缺点,它必须等到页面load完成之后,才开始生效,这样看上去会比较突兀,洋人对这个等待load的时间有个专有名词——flicker(这个词可不是指的图片网站flickr哦)。

使用Stylish就可以有效避免flicker,它在页面最开始载入时就是生效的,也不会有greasemonkey产生的突兀效果了。比如我用来看新浪新闻的样式是这样的:


@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document url-prefix("http://news.sina.com.cn/") {
td.lc_blue {width:100%!important; font-size:1.2em;}
div.rightShell {display:none}
}

这个css除了把侧边广告隐藏以外,还把新闻的字体调大,像我这样的近视眼就可以看的比较轻松了。其中的-moz-document关键字是消除flicker的关键:

The @-moz-document rule is a Gecko-specific at-rule that restricts the style rules contained within it based on the URL of the document. It is designed primarily for user style sheets.

所以要想写出避免flicker发生的greasemonkey脚本,最好是加上Stylish支持,用-moz-document()来隐藏会变化的html部分,待到页面载入完成之后,greasemonkey脚本就可以不慌不忙的处理后续事宜了。

wordpress plugin – search engine related posts

Table of content

Description

English version

When someone is referred from a search engine like Google, the plugin show your blog content matched the terms they search for.

中文说明

当用户从google搜索到你的博客上,这个wordpress 插件会根据用户搜索的关键词显示你的博客上更多的相关内容。目前也只对google生效,下一个版本将对baidu生效。

这个插件完全使用javascript加上google的api完成,不需要占用服务器端的资源,环保且安全。

Usage

English version:

  • unzip it
  • Put <div style=”display:none” id=”search_content”></div> at the place in your template where you want the list of related posts
  • Copy search_related_posts.php to direcotry wp-contents/plugin and activate the plugin.
  • done!

中文说明:

  • 解压
  • 在wordpress模板中添加一个id为search_content的html标签,比如
  • 复制search_related_posts.php到wp-contents/plugin目录,并激活插件.
  • done! 现在你可以试着从google搜索上先搜到自己的博客,然后点击进去看看插件的效果。

Download

latest search engine related posts

History

在wordpress.org上提交了inline-js

前几天在wordpress.org的plugin list里提交了inline-js,这是我写的第一个wordpress插件,估计实用价值和使用者都不是太多:)但是我想如果有更多的使用者对这个plugin提一些意见的话,可能会更加完善,很希望能看到这个插件能持续发展,如果我能挤出更多的时间来维护的话。

用vim来写wordpress

用vim习惯了之后,用别的编辑器写长一点的文本都没法适应,写wordpress更是如此。为此我郁闷了很长一段时间,直到前不久找到了一个新的宝贝 —- vimpress。这个东东可不是什么新的软件,它只不过是vim的一个plugin罢了。

只要装好vimpress,你就可以用它来列出或者发布blog。

目前这个插件有如下功能

  • 获得文章列表
  • 写新文章
  • 编辑文章
  • 现场保存 (yeah, no kidding)
  • 支持分类
  • 支持标签

vim命令清单

  • “:BlogList”
    列出blog里的文章
  • “:BlogNew”
    写新文章
  • “:BlogOpen id”
    打开一篇现有的文章进行编辑
  • “:BlogSend”
    保存并发布文章

安装过程

  • 将解压之后plugin和syntax目录复制到vimfiles目录下
  • 修改plugin下的blog.vim进行配置,需要配置username,password以及xmlrpc.php的url
  • 如果需要支持tag,可以设置enable_tags=1。
  • 如果需要支持UTW tags,需要另外下载一个vim插件utw-rpc-autotag

vimpress的主页

发现的bug

  • 如果标题中包含:号,那么:以后的字符会被截断
  • 如果试图对草稿进行修改,那么发布后的博客没设定发布日期

BTW:现在这篇blog就是我使用vimpress完成的:)

马甲切换插件 — CookieSwap

前些天在cnBeta上看到一个firefox插件,可以方便的切换cookie,可用于论坛灌水。上addons.mozilla.org上查了一遍,已经有个类似功能的插件——CookieSwap。

CookieSwap

CookieSwap is an extension that enables you to maintain numerous sets or "profiles" of cookies that you can quickly swap between while browsing.

如此一来,我就可以在多个帐号间自如的切换而不用重新登录,有空完全可以在论坛上一个人轻松完成十几个人自娱自乐的火爆讨论现场。

下载CookieSwap