Seven Yu @ 05/21/2009 (2:26 pm)

import this

Tags: ::

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!

Seven Yu @ 05/08/2009 (5:21 pm)

如何在 GM(greasemonkey) 脚本中使用外部资源

这里所说的外部资源分为三种: 脚本, 图片 和 文本.

先说如何载入外部脚本:

相信很多写 GM 脚本的朋友包括我以前在引入外部脚本时都会使用下面的(或类似的)代码:

PLAIN TEXT >> JAVASCRIPT:
  1. var jQlab = document.createElement('script');
  2. jQlab.type = 'text/javascript';
  3. jQlab.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js';
  4. document.getElementsByTagName('head')[0].appendChild(jQlab);

这段脚本是可以工作的, 但有个问题, 就是每次执行脚本时都会重新去加载这个脚本, 很浪费时间和带宽.
正确的做法是利用 @require 元标签, 代码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. // ==UserScript==
  2. // 此处省略其他一些 GM 元标签 ...
  3. // @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
  4. // ==/UserScript==

这样做的好处有二: 一是节省代码; 二是不会每次执行脚本都加载, 因为 GM 在安装脚本时会去加载这个文件, 把他下载到本地(脚本所在文件夹中), 之后每次运行脚本时都会到本地文件夹去加载文件, 这样就大大节省了带宽, 同时提高了脚本响应速度.

当然这样做也有一个缺点就是如果被载入文件更新了, 就只能从新安装该脚本, 本地文件不会跟着更新, 因为只在安装时才加载这个文件.

下面再来说说如何加载图片和文本:

这涉及到另外一个 GM 元标签 @resource, 代码如下:

PLAIN TEXT >> JAVASCRIPT:
  1. // ==UserScript==
  2. // 此处省略其他一些 GM 元标签 ...
  3. // @resource    resourceName http://www.example.com/resource.png
  4. // ==/UserScript==

使用时需要用到两个 GM 函数: GM_getResourceURL(resourceName)GM_getResourceText(resourceName), 前者将返回脚本中可用的 url 格式 (base64 编码), 后者返回文件内容.

这个元标签和 @require 一样, 也会在安装脚本的同时将资源下载到本地, 所以如果需要更新资源的话, 请重新安装脚本.

Seven Yu @ 05/04/2009 (5:05 pm)

新站 gm.phpz.org

一个新站, 偶的 GM 脚本集合.
地址: http://gm.phpz.org/

目前包括针对 Twitter, Plurk 和 Picasaweb 等站的 5 个脚本.

会陆续丰富更新, 敬请关注.