2008年9月26日星期五

更新: Dictionary Tooltip支持爱词霸的脚本

更新了一下Dictionary Tooltip支持金山爱词霸网站(http://www.iciba.com)的脚本。不打算支持stardict.org了,网站太慢,开放的词典太少。

Dictionary Tooltip是个Firefox扩展,可以让你双击一个单词就在线去查词典,将结果显示出来(不是新开一页,而是在当前页内显示,可以过滤不相关的内容)。

将以下内容添加到(firefox profile)
/dictionarytip/dictionarytip_dictScript.js尾部即可。

--- 8< --------------------------------------------------------------
dtip_arrDict[19]=
{
dictName : "www.iciba.com",
url : "",
subCatName : " *",
subCatValue : " *",
selectedText : "",
assignUrl : function(selectedText, prefLang)
{

this.url = " http://www.iciba.com/" + selectedText + "/";
this.selectedText = selectedText;
},
filterPage : function (ftDoc, prefLang, strNoResults)
{
try
{
var elemId = "dict_content";

var newDiv = "";
if (ftDoc.getElementById(elemId) != null)
{
newDiv = ftDoc.getElementById(elemId).cloneNode(true);

ftDoc.body.innerHTML = newDiv.innerHTML;
}

}
catch (ex)
{
alert(ex);
}
}
}
dtip_strDictText += ";www.iciba.com"
--- >8 --------------------------------------------------------------
(2008-10-5 更新: 做了补充说明,并修订了一下脚本)

2008年9月20日星期六

推荐的Total Commander工具箱

(以下的东东除了单独注明的外,均可以在http://www.totalcmd.net上找到)

主程序:
Packer 插件:
  • 7z: 不用说
  • mhtunpack: 可打开mht,提取里面的文件
  • chmdir: 可打开chm/hxt,提取里面的文件
  • isoread/totaliso: 前者可解压iso/bin/nrg/img/,后者可解压和制作ISO镜像
Lister插件:
  • scilister: 基于scintilla的文件查看器,速度很快,不能编辑,非常适于浏览代码文件(需要SciTE <= 1.72,并且这个插件要放在scite安装目录中)
  • syn2: 不错的编辑器
  • ieview: IE,用于查看网页
  • imagine: 浏览各种图片文件(如果有irfanview也凑合)
  • fileinfo: 可查看exe/dll/lib等文件的一些信息(PE信息、动态库输出/依赖、LIB输出函数列表)
不要安装太多lister插件,对稳定性和性能多有一些影响,我期望按下F3之后能快速出现内容
其它的lister插件( XML, SynPlus, ICLView, eml, xbaseview)可以安装到外部浏览器UniversalViewer中去

FileSys插件:
  • UnInstaller: 用于卸载程序,控制面板里那个实在让人等得不耐烦
  • Startup Guard: 管理那些自动启动的程序,可禁用或者删除
  • Services: 删除、启动、停止服务
  • ProcFS: 查看运行中的进程,可“删除”进程
  • Virtual Disk: 虚拟磁盘,除了可以虚拟光驱代替DaemonTools,还可以虚拟硬盘、软盘
Content插件:
  • 似乎大多没啥用。常用exifxpiinfo这两个
外部工具:
  • PlugMan: TC插件管理器
  • FavMenu2: 在TC/资源管理器/打开文件对话框 /浏览目录对话框中跳到常用的目录(以及TC中当前显示的目录),常用目录列表缺省读自TC的hotlist
  • UniveralViewer: 可浏览各种文件,支持TC的lister插件
  • F4Menu: 将TC的外部编辑器(F4)设置为此功能,可显示一个打开此文件类型的常用程序列表
  • TCShell2: 可给目录关联一个“在TC中打开”菜单,也可将压缩文件关联为TC打开(后面一个功能为本人添加的,基于TCShell-1.3.6的代码)
我常用的其它插件:
Packer: z, msi-plus, bzip2, deb, rpm, cpio, mbox, diskdir, iclread, nscopy,
Lister: iclview, xml, xbaseview, eml
FileSys: ext2fs
Content: xpiinfo, exif, deb, rpm

2008年9月16日星期二

JavaScript也够魔幻的

可支持按如下方式使用,而且这几个方法不是在一个函数实现中判断arguments.length来走不同分支的,而是可以动态添加方法的——当然,由于JavaScript不是静态类型语言,只能根据参数个数来决定走那个实现,不能根据参数类型
var users = new Users();
users.find(); // Finds all
users.find("John"); // Finds users by name
users.find("John", "Resig"); // Finds users by first and last name
users.find("John", "E", "Resig");
作者说的private members,其实只是在constructor中声明的变量和函数,没有挂到this后面,根据JavaScript的闭包原则,constructor中声明的函数是可以访问这些private变量和函数的,但在constructor之外(比如通过classFoo.prototype.funcB = function(...) {...}创建的方法)的就无法访问这些东西了。所以作者称constructor里面通过this.funcA = function(...) {...}方式添加的成员函数为priviliged method.
  • 属性名一定要满足标识符规定么?
今天一个兄弟项目组的同事碰到一个问题,让我帮忙看看。他在Firebug中看到一个params对象有如下一些属性显示了出来(大致如此)
params
filter[0][data][type]="string"
filter[0][data][value]=2
filter[0][type]="field"
start=0
limit=20
然后他想去取有多少个filter,然后逐一处理。但访问params.filter时出错,访问params.filter[0]时也出错。但上面连数组内各个值都显示出来了啊。

我开始也觉得不可能,但看了一阵,觉得Filebug的显示比较奇怪,为什么它不把filter作为一个成员,再在下面显示数组内容呢? 然后我用for (e in params) { alter(e) }试了一下,发现它有属性就叫做"
filter[0][data][type]"!

这是怎么设进去的呢?
以前看文章说JavaScript中foo.bar=1和foo["bar"]=1是等价的, 当然现在不经过params.filter[0]就直接设置params.filter[0][data][type]="string"是不行的,所以估计是这种方式: params["filter[0][data][type]"]="string"——不过也说明了这两种不是等价的。至于为什么要这么写,据后来另外一个同事说PHP里面可以直接用上这样的数据(我是不懂)。

2008年9月14日星期日

Firefox上的命令行: Ubiquity和Vimperator

前几天Firefox的新扩展Ubiquity掀起了一个热潮,都说是浏览器上人机交互的突破。

GUI的优势在于上手比较容易,而CLI的优势在于效率更高。其实Ubiquity并不是第一个这么干的,这之前的vimperator扩展也早通过模拟vi里面的ex命令的方式,实现了Firefox上的命令行,比如输入:tabopen google就能在新的标签页中打开http://www.google.com ,输入 :dialog addons就能显示"附加组件"对话框,也可以跟ubiquity一样扩充新的命令但vimperator的主要目的在于模仿vi/vim的操作方式,"模"的问题决定了很多人不会使用,或者不愿使用。

(BTW: 最开始vimperator给我看Google Reader造成了很大的不便,因为快捷键都得先按一下Ctrl-V才行,烦得要命,好在不久发现可以用autocomand在某些网址上禁用vimperator的键拦截(在vimperator中输入:help autocommand可以找到相应说明,不过那个网址匹配表达式需要懂一点JavaScript才能搞懂怎么写)

不过Ubiquity似乎比普通CLI要跟强一些,还可以利用命令的输出与网页交互。以官网的视频里 的第一个例子来说,以前我们要跟朋友相约去哪里吃饭,发电子邮件时需要这样:先到某个网址查饭馆联系方式,然后将内容拷贝粘贴到邮件中,然后又 Google Maps上找相应的地图,然后点击拷贝图片和链接到邮件中,最后发送。但现在只需要在写邮件时,用map命令查出地图,点击一些"insert into page"就可以将地图直接放入邮件了,而饭馆的信息则可以通过yelp来查然后添加到邮件中(当然,这些命令对应的网站能否服务于我这里是另外一个不得 不考虑在内的问题)——这倒有点象vi中用!!调用外部命令并将其输出插入到当前文本中来。

2008年9月11日星期四

Ubuntu vs Debian 杂感几则

看见这么一篇文章: I'm TualatriX:叹: Ubuntu的软件包比Debian还稳定。 他说的“稳定”是Debian里面的stable/testing/unstable的概念,指的是软件包的版本新旧。
  • 其 实我也早发现Ubuntu的不少包比Debian更新慢。想想也是,毕竟现在不是当初Ubuntu只做GNOME桌面的时候,当越来越多的人来给他添砖加 瓦,也就使得大家需要的软件包越来越多,当它的摊子越铺越大的时候,它不可能保证所有的包都能很快更新。也就是说,只可能部分比debian新,而那些平时不在焦点之中的包,就比debian更新得慢了。
  • 以前在犹豫要不要切换到Ubuntu时,我的一个顾虑就是以为它 只有GNOME,其它的软件包大多没有(我还是会跑某些Qt/KDE甚至一些老X11程序的),当后来别人告诉我Debian有的包它都有,我就一直不太 相信——它怎么可能维护那么多软件包,又能保持“焦点”软件的快速更新? (后来这个顾虑打消后,我又有了另外一个问题:Ubuntu里面有testing这样的概念么?——这个问题导致我到现在也没有换用Ubuntu,当然, 另一个重要原因是最近一年工作太忙,没时间来折腾这些。)
  • 以前我们对Debian的更新速度颇多抱怨,尤其是稳定版本的推出节奏。现在想来,摊子大还的确是个问题,君不见,当Ubuntu的摊子铺大之后,虽然仍然一年两个版本,但质量却在下降,作为LTS的8.04质量并不是太好,连续推出了8.04.1和8.04.2?
  • 也 许我是有点嫉妒,但我觉得Ubuntu的成功有Debian的基础在,但风头都被Ubuntu抢去了。如果不是Debian强大的包依赖机制、升级/安装 管理系统,以及alternatives, menu等小机制,Ubuntu不会有精力去优化内核、搞炫桌面。我是有点打抱不平的。
    • 关于Debian的包管理系统,我看见这样一篇文章 "红帽将在未来的RHEL中支持deb软件包", 但没有找到原文,不知道是否属实。里面说道: 红帽(RedHat)总裁卫赫士(Jim Whitehurst)透露,未来的RHEL(红帽企业版Linux)将加入对DEB软件包的支持。卫赫士说,“众所周知,红帽创造了RPM,并成为了一 时的Linux工业标准。但是RPM一个很大的缺点就是软件包的依赖性很难解决。以Ubuntu为代 表的使用DEB软件包的Linux发行版拥抱自由开源,取得了很大成功。虽然为了避免Linux陷入像Unix那样的分裂局面,Linux厂商一致遵守 LSB标准。但这还不够,所以红帽将在未来的RHEL中加入对DEB包的支持,并计划逐渐削弱RPM包,直到最终取代。”
  • 我 有一个朋友,装东西特喜欢装最新最炫的东西,他开始玩Linux的时候,总是要装最新版本的gcc(同时他是一个C++超级fans),装最新版本的 KDE(他觉得GNOME太简陋了, 不够炫)。最开始的时候他听说用Fedora/RedHat的人最多,结果为了加装软件折腾得够呛。后来在我的劝说下改用Debian(关键是我也不怎么 会用Fedora,我只会用apt-get来装软件 :-(,本来觉得Mandrake给他用倒是更合适,urpmi也好使,但实在不知道有没有快一点的镜像),但他现在恋恋不忘的是要改用Ubuntu——不过他最近工作也忙,估计Linux连摸都不摸了。