tools @ 22 March 2007, “No Comments”

为了能够在blog里显示代码,一直没有找到理想的解决方案,因为没能满足以下三个要求:

  1. 能够根据语法高亮或者着色;
  2. 不在代码里添加内嵌的css代码;
  3. 没有副作用(比如第二点,在代码里直接插入渲染的代码,要修改可能就比较麻烦),包括增加服务器的压力;

今天找到一个满意的方案:google-code-prettify,很好地满足了前面三个要求,使用方法很简单

当然,如果在RSS阅读器里看代码,是看不到语法着色的(这是第二个要求的代价);如果浏览器关掉了Javascript,也看不到(这是第三个要求的代价)。

例子:

PHP:


require_once 'Url/PathVars.class.php';
...
require_once 'View/SearchPage.class.php';

class Controller_Dispatcher
{
	public static function handle_request($url)
	{
		$pv = new Url_PathVars('/');

		// TODO:this is ugly, got to change it
		if (substr(strtolower($pv->fragment), 0, 8) == '/search?')
		{
			self::handle_search_request($pv);
			return;
		}
		switch ( strtolower($pv->fetchByIndex(0)) )
		{
			case '':
				self::handle_default_home_request($pv);
				break;
			case 'people':
				self::handle_people_scope_request($pv);
				break;
		...
	}
}

Javascript:

window.addEventListener(
		"load",
		function()
		{
			twsstopper = new TWSStopper(window);
			window.twsstopper = twsstopper;
			twsstopper.startUp(window);

		    var appcontent = window.document.getElementById("appcontent");
		    if (appcontent)
			{
    		    if (!appcontent.TimeWastingSiteStopper)
				{
        		    appcontent.TimeWastingSiteStopper = true;
	            	appcontent.addEventListener("DOMContentLoaded", twsstopper.onAction, false);
    	    	}
			}
		},
		false);

bash:

cd $TMP_DIR

if [ -f "chrome.manifest" ]; then
  echo "Preprocessing chrome.manifest..."
  # You think this is scary?
  #s/^(content\s+\S*\s+)(\S*\/)$/\1jar:chrome\/$APP_NAME\.jar!\/\2/
  #s/^(skin|locale)(\s+\S*\s+\S*\s+)(.*\/)$/\1\2jar:chrome\/$APP_NAME\.jar!\/\3/
  #
  # Then try this! (Same, but with characters escaped for bash :)
  sed -i -r s/^\(content\\s+\\S*\\s+\)\(\\S*\\/\)\\s*$/\\1jar:chrome\\/$APP_NAME\\.jar!\\/\\2/ chrome.manifest
  sed -i -r s/^\(skin\|locale\)\(\\s+\\S*\\s+\\S*\\s+\)\(.*\\/\)\\s*$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest

  # (it simply adds jar:chrome/whatever.jar!/ at appropriate positions of chrome.manifest)
fi

BAT?:

xcopy build\skin build\chrome\skin /i /e
...
rmdir /s /q build\locale
rmdir /s /q build\skin

cd build\chrome
7z a -tzip "%x%.jar" * -r -mx=0
cd ..\..
Tech, tools @ 03 February 2007, “2 Comments”

我的电脑一直是用Linux和Windows双启动,Evolution是在Linux上的email客户端,现在打算换成Thunderbird。其实Evolution没什么特别不好用的地方(除了更占内存,偶尔崩溃等小麻烦外),可以继续用下去。只是现在打算windows和linux下都用同一个email客户端,方便管理(导入导出备份等),Thunderbird就是最好的选择了。

除了跨平台,TB最大的功能就是扩展,跟firefox一样,强大的扩展性可以说是它们的killer feature。现在在用的有:

比较有趣的扩展是Display Mail User Agent,它会显示发件人所用的email客户端软件的logo,用了它才发现原来有那么多以前都不知道的email客户端软件。

另外值得一提的是TB的垃圾邮件过滤也做得不错。

现在Evolution最让我怀念的功能是unmatched vfolder,希望将来TB上也能有这样的功能,或者有扩展提供这个功能,实在不行,自己写一个也不是不可能。

Tech, tools @ 08 January 2007, “6 Comments”

平时使用电脑的时候为了备份或者整理硬盘空间,需要了解目录的大小,Linux上有df和du两个命令,Windows上却没有对应的命令或者工具,而Windows Explorer(资源管理器)上的Details view里只能显示文件的大小,不能显示目录的大小。

痒总是有人会挠的,于是就有了Folder Size和WinDirStat。

Folder Size是个Shell Plugin,安装后,打开Windows Explorer,到要查看的目录,选择detail view,鼠标移到列表头,按右键,选择Folder Size就可以了。要注意的是因为读取目录大小的操作可能比较耗时和导致大量读硬盘的操作(如果某目录下子目录深,文件多,或者变化频繁)。在控制面板里还有个Folder Size的选项,可以终止Folder Size服务。

FolderSize

WinDirStat是个独立的程序,它在显示目录大小之外,还提供了使用TreeMap的直观的展现。

WinDirStat