Skip navigation.

极湖

无不用其“极”

把 Windows 的 Notepad 换成 Notepad2

,

Notepad2 很小巧,然而功能强大,和 Windows 自带的 Notepad 相比,说有天壤之别也不为过。

网上有不少文章介绍如何把 Windows 的 Notepad 换成 Notepad2,步骤都比较复杂,而且成功率不高,尤其是 XP SP2 以后的版本。

经我验证,这个网页上介绍的方法比较好使。方法是在 Notepad2 的文件夹内做一个批处理文件,然后执行。原文介绍的批处理如下(注释已译):
@echo 替换 NOTEPAD.EXE 为 notepad2.EXE ...
REM
REM 1. 阻止系统自动恢复文件
attrib -r -h -s %systemroot%\system32\dllcache
del %systemroot%\system32\dllcache\notepad.bak.exe
ren %systemroot%\system32\dllcache\notepad.exe notepad.bak.exe
attrib +r +h +s %systemroot%\system32\dllcache
attrib -r -h -s %systemroot%\ServicePackFiles\i386
del %systemroot%\ServicePackFiles\i386\notepad.bak.exe
ren %systemroot%\ServicePackFiles\i386\notepad.exe notepad.bak.exe
attrib +r +h +s %systemroot%\ServicePackFiles\i386 

REM
REM 2. 备份 Windows 和 System32中 的 Notepad
del %systemroot%\system32\notepad.bak.exe
copy %systemroot%\system32\notepad.exe %systemroot%\system32\notepad.bak.exe
copy %systemroot%\notepad.exe %systemroot%\notepad.bak.exe
REM
REM 3. 拷贝 notepad2 并覆盖 Windows 和 System32中 的 Notepad
del %systemroot%\notepad.exe
copy notepad2.exe %systemroot%\notepad.exe
copy notepad2.exe %systemroot%\system32\notepad.exe
REM
@echo 替换完成。
@echo
@echo 注: 如果 Windows 文件保护的对话框弹出,请按“取消”。

各大 Javascript 框架DOM选择器速度比拼

,

看了一下 SlickSpeed,各大 JS 框架都已更新至今天最新发布版。

在自己的机器上用 Firefox 3.0.11 测试了一下,结果如图:


从这个结果来看,DOMAssistant 2.8 最强(65 ms),ExtJS Core 3.0 次之(260 ms),最差是 YUI 2.7.0(811 ms),最强和最差之间相差10倍还多!

DOMAssistant 我还没用过,看来得关注一下了。

ExtJS: 深度查找树节点

, ,

方法一: 自己做递归函数
function findChildRecursively(rootNode, key, value) {
    var nodes = rootNode.childNodes;
    for(var i = 0; i < nodes.length; i++) {
        if(nodes[i].attributes[key] == value){
            return nodes[i];
        } else {
            if(!nodes[i].isLeaf()) {
                // 查找结果不包含 Folder 的情况下
                continue;
            }
            if(!nodes[i].isLoaded()) {
                //加载子节点,AsyncTreeNode 需要,TreeNode 则不需
                nodes[i].reload();
            }
            if(node = findChildRecursively(nodes[i], key, value)) {
                return node;
            }
        }
    }
    return null;
} 

方法二: 利用现成方法 cascade
var node = null;
rootNode.cascade(function(n) {
    if(n.isLeaf() && !n.isLoaded()) {
        n.reload();
        return true;
    }
    if(n.attributes[key] == value) {
        node = n;
        return false;
    }
    return true;
});

JavaScript: 取得字符串的字节数

, ,

代码:
//四舍五入
function _round(num, X) {
    X = X || 2;
    return Math.round(num*Math.pow(10, X))/Math.pow(10, X);
}

//取得字符串的字节数
function _byteLength(str){
    //方法一:正则
    if(!str) return 0;
    return str.replace(/[^\x00-\xFF]/g,'**').length;
    //方法二:循环
    /*
    var byteLen=0,len=str.length;
    for(var i=0; i<len; i++){
        if(str.charCodeAt(i)>255){
            byteLen += 2;
        } else {
            byteLen++;
        }
    }
    return byteLen;
    */
}

//测试
var str = "試験helloテストテスト";
var size = _byteLength(str);
alert(size + ' bytes');
alert(_round(size/1024) + ' Kb');

修复 Debian/Ubuntu/Mint 软件包依赖关系

, ,

在 Mint 下安装一些 deb 的软件包,把系统的依赖关系给搞乱了,结果再运行 apt-get 和 dpkg 都出错。
最后找到解决办法如下:
sudo dpkg --configure -a
sudo aptitude -f remove
sudo apt-get update
sudo apt-get upgrade

console.log Everywhere

, , ,

console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebugs 之后的 Firefox 所独有的调试“绝招”。

这一招,IE8 学会了,不过用起来比 Firebugs 麻烦,只有在开启调试窗口(F12)的时候,console.log 才能出结果,不然就报错。

今天看到 Opera 也有个叫 dragonfly 的东东,用这东西查看 DOM,已经可以和 Firebugs 媲美,然而还是不能用 console.log。于是有人就提供了这样两句代码:

window.console = window.console || {};
console.log || (console.log = opera.postError);


经测试,以上代码好使。

至此,Firefox/IE/Opera 都能用上 console.log 了。

当然,IE 和 Opera 下的 console.log 比起 Firebugs 原创的 console.log,还是太过简单,比如参数是 Object 或者数组就没有进一步的显示功能。

IME 打开时 Firefox 不触发 keyup 之解决方法

, ,

输入法打开时, Firefox 不触发 keyup 事件。经常写javascript代码的人,尤其是中日韩等国的人,都可能会遇上这个不大好解决的问题,。

在一个日文 Blog 上找到了解决办法,用 jQuery 通过 text 事件实现。
自己写了一段测试代码如下:

var logFunc = function(e){
  console.log($(this).val());
  if(e){
    // keyup 时能取到键值
    console.log(e.keyCode)
  }
};
$(':text').keyup(logFunc).text('text', logFunc);

一些东西搬迁至 GAE

, ,

Google App Engine 是个好东西,可以让你免费创建在线应用。

GAE 默认支持的语言是 Python,后台使用的框架是 django,Python 我不熟悉,正好可以学习学习。

前段时间,我把一个域名 geedigg.com 废了,想想上面的东西丢了也可惜,就把它们搬迁到了 GAE,胡乱取个名字叫“静湖”。这些东西原来都是静态的网页,加了一点JavaScript实现动态显示的功能。这次加了一个留言功能,其实就是把 GAE 提供的例子原样套了进去。

免费的东西难免有限制,GAE也不例外,有一次我上传的文件超过1000个,它就不干了。目前还不知道数据库的存储记录数有没有限制。

最近 GAE 增加了 Java 语言的支持,不过我对 Java 硬是提不起兴趣,所以也没有尝试用 Java 做网站,对于喜欢 Java 的朋友,这应该是个好消息。

JavaScript 查错小帮手: JavaScript Lint

JavaScript 的调试,一般情况下,FireBug 足可应付。可有时候 FireBug 所报的错误太笼统,比如一个括号没有匹配,它不能给出具体的位置,js 文件比较大的时候,查找这样的错误很费功夫。

于是找到了这个 JavaScript Lint ,我用下来的结果,不能说很好,可也是个帮手,有时候实在查不出错误在哪儿,就用它分析一下 js 文件,根据输出的列表(有行号),再去查找错误,有时也可行,能够提高一些效率。

JavaScript Lint 的安装比较简单,看看帮助文件很快就能搞定。安装之后建议把 jsl 的路径追加到用户的 PATH 变量中。

用法:
jsl -conf jsl.conf -process javascript文件名
jsl -process javascript文件名

SQL 关键字 → Zend_Db_Select 函数

,

今天用 Zend_Db 碰上 having 关键字,一开始写在 group() 中,没成功,后来发现有 having() 方法,问题解决了。

顺便总结一下 SQL 关键字与 Zend_Db_Select 函数的对应关系:
FROM → from()
DISTINCT → distinct()
JOIN → join()
LEFT OUTER JOIN → joinLeft()
RIGHT OUTER JOIN → joinRight()
FULL OUTER JOIN → joinFULL()
WHERE → where()、orWhere()
GROUP BY → group()
HAVING → having()
ORDER BY → order()
July 2009
S M T W T F S
June 2009August 2009
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31