2010年1月

强迫Firefox安装低版本的扩展,不检查扩展兼容性

Firefox升级后,很多时候一些扩展都用不了了,有什么办法能让Firefox不检查扩展的兼容性呢?在config里面添加或者修改布尔值extensions.checkCompatibility,设置为false,这样可以避开Firefox的兼容性检查,但也存在一个风险,可能会导致Firefox不能启动,如果真的不能启动Firefox了,那只能把扩展都删掉了。

IETab居然下架了,Coral IETab代替

Firefox升级到3.6,一直使用的IETab无法使用了,本以为改了maxVersion可以用,没想到打开还是一片漆黑。在官方扩展区搜索IETab,居然都找不到了,看来这个扩展是真的停止开发了。本来以前也试过Coral IETab,但老是崩溃,现在没办法了,只能用Coral IETab顶上了,不知道现在的版本还会不会经常崩溃。

NetBeans中使用的Consolas字体并显示中文

安装了NetBeans,默认的字体实在看不下去,在设置里面把字体改为Consolas后,NetBeans怎么都显示不了中文,中文都变成了方块,解决问题的方法比较复杂,要修改Java配置文件,因为swing程序中的字体会在一个文件中进行配置。
首先要找到这个文件的地址,在netbeans的安装目录下的etc目录下有一个netbeans.conf的文件,打开这个文件找到netbeans所使用的jdk的路径。

在上图所示的路径下的jre\lib\文件夹下找到fontconfig.properies文件(如果没有——一般是没有的——就将fontconfig.properties.src复制或改名就ok),打开此文件,要修改3处地方。
1、在最后添加四行:

filename.Consolas=consola_1.ttf
filename.Consolas_Bold=consola_1.ttf
filename.Consolas_Italic=consola_1.ttf
filename.Consolas_Bold_Italic=consola_1.ttf

2、找到monospace.plain.**的这一行,按下面进行修改:

#monospaced.plain.alphabetic=Courier New
monospaced.plain.alphabetic=Consolas
monospaced.plain.chinese-ms950=MingLiU
monospaced.plain.hebrew=David
monospaced.plain.japanese=MS Gothic
monospaced.plain.korean=GulimChe

#monospaced.bold.alphabetic=Courier New Bold
monospaced.bold.alphabetic=Consolas Bold
monospaced.bold.chinese-ms950=PMingLiU
monospaced.bold.hebrew=David Bold
monospaced.bold.japanese=MS Gothic
monospaced.bold.korean=GulimChe

#monospaced.italic.alphabetic=Courier New Italic
monospaced.italic.alphabetic=Consolas Italic
monospaced.italic.chinese-ms950=PMingLiU
monospaced.italic.hebrew=David
monospaced.italic.japanese=MS Gothic
monospaced.italic.korean=GulimChe

#monospaced.bolditalic.alphabetic=Courier New Bold Italic
monospaced.bolditalic.alphabetic=Consolas Bold Italic
monospaced.bolditalic.chinese-ms950=PMingLiU
monospaced.bolditalic.hebrew=David Bold
monospaced.bolditalic.japanese=MS Gothic
monospaced.bolditalic.korean=GulimChe

3、修改字体的search顺序,按下图找到并修改:

# Search Sequences

sequence.allfonts=alphabetic/default,dingbats,symbol

sequence.serif.GBK=alphabetic,chinese-ms936,dingbats,symbol
sequence.sansserif.GBK=alphabetic,chinese-ms936,dingbats,symbol
sequence.monospaced.GBK=alphabetic,chinese-ms936,dingbats,symbol
sequence.dialog.GBK=alphabetic,chinese-ms936,dingbats,symbol
sequence.dialoginput.GBK=alphabetic,chinese-ms936,dingbats,symbol

现在在NetBeans中只要将字体设置成Consolas就可以显示漂亮的英文和中文了。

chrome扩展:显示网站收录数和反向链接数、PR及Alexa

2010-10-15:改变显示方式,改成和Firefox里的GreaseMonkey脚本一样的显示方式;
2010-05-28:修正google收录数和外链数;修正bing收录数和外链数;

看到有人在“GreaseMonkey脚本:显示每个网站的收录数和外链数及PR、Alexa”留言说要chrome上的扩展,今天有时间就把那个脚本修改了一下,翻了下chrome的扩展文档,简单的弄了个chrome上面的扩展,可以查常用的搜索引擎收录数和反链、alexa排名、PR、域名注册日期,扩展显示如下(搜狗的第一次查询要输入验证码才能查):

相比GM的那个脚本,没有弄设置项,没有快捷键(也不知道如何弄chrome扩展的快捷键),本来开始修改的时候弄的跟Firefox里面一样显示的,也是显示在网页里面,不是从chrome的扩展栏点击那个图标弹出popup小窗口,但弄到最后,才发现包含在页面里面的脚本居然不能跨域请求,郁闷死,非要放在popup页里或者其它包含页里才能跨域(即使设置了permission也不行),只好弄成现在这样了,这样就失去了快捷键的功能,先就只能这样了。欢迎拍砖!

扩展下载地址:http://junstyle.me/upload/files/SEInformation.rar,先把压缩包解压,然后把里面的SEInfomation.crx拖到chrome里面就可以安装了,或者用chrome打开它也行!

火狐Firefox里九个非常有用的快捷键

1:Alt+D

你可以使用该快捷键直接把光标转到火狐的地址栏。非常有用。

2:网址后缀.org和.net的自动完成

我们知道,如果我们在地址栏输入google,然后按下Ctrl+Enter ,然后浏览器就会转到www.google.com。但是如果我们想对网址输入.org或者.net后缀呢?在火狐中,Shift+Enter 会自动给网址后缀加入.net ,Ctrl+Shift+Enter会自动给网址后缀加入.org。所以如果你想去Problogger,只需要在火狐地址栏输入该单词,然后按下 Shift+Enter。

3:Ctrl+T和Ctrl+Shift+T

Ctrl+T帮你打开一个新标签,Ctrl+Shift+T重新打开上次关闭的标签。

这个快捷键显得非常便捷在你意外关闭一个标签后。另外一种方法就是到历史→最近关闭的标签来找到并打开。

4:使用Delete键

Delete非常有用因为你可以用来删除浏览器的一些历史栏的或者自动填充表格的特定地址。比如在下边表格,当我在google的地址栏输入“a”你可以看到三个下拉条目。如果我想在自动完成历史里删除掉第二个条目,我把鼠标指向它然后按下Delete键就可以了。

5:Ctrl+Tab

Ctrl+Tab可以帮你在不同火狐标签间轻松切换。

6:鼠标中键

这不是一个键盘快捷键但是是一个很好的快捷键。指向任何一个链接并按下鼠标中键(即滚轮),然后该页面会在新标签打开。

7:Alt+Enter

这个是一个非常有用的快捷键。它可以在你选中自动完成列表里边的项目时自动在另外一个标签打开一个网站。例如,你想去Facebook,你开 始在地址栏输入www.face...,同时它开始在下拉列表显示。你仅需使用下方向键选中(该例子中是facebook.com)同时按下 Alt+Enter这样就可以在新标签打开。

8:Ctrl+[1,2….9]

Ctrl+Tab可以用来在交替切换不同的标签,但是如果你是像我一样喜欢打开很多标签的用户同时希望转到一个特定的标签,你可以使用Ctrl+相应标签的序号。比如:转到第三个标签使用Ctrl+3。

9:空格键和Shift+空格键或者PageDown和PageUp

空格键或者PageUp键可以下翻当前页面,Shift+空格键和PageUp可以上翻当前页面。

百度site首页出现两个不同的结果

今天加一个友情链接,在百度site了一下他的网站,百度居然出现了这样的结果,首页的出现了两天记录,分别排第一和第二,而且快照时间也不一样,很是奇怪!看下图:

两个首页的标题有点区别,可能这段时间修改过标题,百度就把修改前和修改后的首页都保存了?

CSS技巧:使每个规则只出现一次

为了加快网页的加载速度,优化CSS文件,缩小CSS文件的大小是必须的,一个比较有用的技巧就是让你的每个CSS规则只出现一次(当然这里指的是相同的CSS规则),也就是使用分组选择器。

例如,我们可以合并下面的样式:

h1 { color: black; } p { color: black; }

我们可以合并到一个样式中:

h1, p { color: black; }

上面是一个简单的合并,看不出来有什么很大的优化。下面这个比较复杂的样式可以让代码减少20-40%,请看这个例子:

h1, h2, h3 { font-weight: normal; } a strong { font-weight: normal !important; } strong { font-style: italic; font-weight: normal; } #nav { font-style: italic; } .note { font-style: italic; }

使用上面的分组选择器:

h1, h2, h3, strong { font-weight: normal; } a strong { font-weight: normal !important; } strong, #nav, .note { font-style: italic; }

javascript代码优化

一、字符串的连接

通常我们进行字符串连接是这样的:

var veryLongMessage =
'This is a long string that due to our strict line length limit of' +
maxCharsPerLine +
' characters per line must be wrapped. ' +
percentWhoDislike +
'% of engineers dislike this rule. The line length limit is for ' +
' style purposes, but we don't want it to have a performance impact.' +
' So the question is how should we do the wrapping?';

可以用如下的数字代替:

var veryLongMessage =
['This is a long string that due to our strict line length limit of',
maxCharsPerLine,
' characters per line must be wrapped. ',
percentWhoDislike,
'% of engineers dislike this rule. The line length limit is for ',
' style purposes, but we don't want it to have a performance impact.',
' So the question is how should we do the wrapping?'
].join();

二、通过助手函数生成字符串

通过把字符串生成器传递到函数中来构造一个长字符串,要避免临时的String结果,例如,假设函数buildMenuItemHtml_ 需要用文字串(literal)和变量来构造String,并在内部使用了String构造器.而不是如下方式使用:
var strBuilder = [];
for (var i = 0, length = menuItems.length; i < length; i++) {
strBuilder.push(this.buildMenuItemHtml_(menuItems[i]));
}
var menuHtml = strBuilder.join();

推荐如下方式:

var strBuilder = [];
for (var i = 0, length = menuItems.length; i < length; i++) {
this.buildMenuItem_(menuItems[i], strBuilder);
}
var menuHtml = strBuilder.join();

三、定义类方法(Defining class methods)

下面的代码是低效率的,每生成一次baz.Bar对象,就会为其生成一个方法和闭包.
baz.Bar = function() {
// 构造函数, constructor body
this.foo = function() {
// 方法,method body
};
}

推荐方式是:
baz.Bar = function() {
// 构造函数,constructor body
};

baz.Bar.prototype.foo = function() {
//方法, method body
};

这种方式,不管有多少个baz.Bar对象生成,仅仅只建立一个方法foo且没有产生闭包.

四、初始化实例变量(Initializing instance variables)

在原型(prototype)上用值类型[value type](而不是引用类型[reference type])声明或初始化实例变量.这避免了在每次调用构造函数时运行不必要的初始化代码.(有些情况下是不能这样做的:实例变量的初始值依赖于构造参数或是在构造时的其它状态的变量(some other state at time of construction))
例子:
foo.Bar = function() {
this.prop1_ = 4;
this.prop2_ = true;
this.prop3_ = [];
this.prop4_ = 'blah';
};

推荐的写法:
foo.Bar = function() {
this.prop3_ = [];
};
foo.Bar.prototype.prop1_ = 4;
foo.Bar.prototype.prop2_ = true;
foo.Bar.prototype.prop4_ = 'blah';

五、避开闭包的陷阱(Avoiding pitfalls with closures)

闭包是JavaScript的一个强大且有用的特色;但是它有几个缺点:
1,它们是常见的内存泄漏源
2,生成闭包明显的比生成不是闭包的内部函数慢,比调用静态函数更慢.例如
function setupAlertTimeout() {
var msg = 'Message to alert';
window.setTimeout(function() { alert(msg); }, 100);
}

上面比下面的写法要慢:(上面的代码产生了闭包)
function setupAlertTimeout() {
window.setTimeout(function() {
var msg = 'Message to alert';
alert(msg);
}, 100);
}

上面比下面的写法要慢:
function alertMsg() {
var msg = 'Message to alert';
alert(msg);
}

function setupAlertTimeout() {
window.setTimeout(alertMsg, 100);
}

3,它们增加了变量的作用域(scope chain)的层次.当浏览器解析属性的时候,将会检查所有层次的作用域.见下面的例子:
var a = 'a';
function createFunctionWithClosure() {
var b = 'b';
return function () {
var c = 'c';
a;
b;
c;
};
}

var f = createFunctionWithClosure();
f();

当执行f方法的时候,引用a比引用b慢,引用b比引用c慢.
IE中闭包更多信息可以查看 IE+JScript Performance Recommendations Part 3: JavaScript Code inefficiencies

六、避免用with(Avoiding with)

在你代码中避免用with.它对性能有负面影响,因为它修改了作用域,在其它作用域查找变量的开销很大.

七、避免浏览器的内存泄露(Avoiding browser memory leaks)

内存泄露是web应用程序普遍存在的问题,它会产生巨大的性能危害(hit).随着浏览器内存使用增加,你的web应用程序,用户系统其它部分操作,将变的慢起来.大部分web应用程序的内存泄露是因为在 JavaScript脚本和Dom之间生成了循环引用(例如:javascript脚本和IE com结构之间,javascript脚本和Firefox xpcom结构之间)
下面是避免内存泄漏一些经验法则

使用事件系统关联事件处理函数(Use an event system for attaching event handlers)
大部分的循环引用模式[DOM 元素-->事件处理函数(event handler)-->闭包(closure scope)-->DOM元素].为了避免这个问题,可以用经过充分测试事件系统(event system)来关联事件处理函数(event handlers),例如:Google doctype,Dojo,JQuery
另外,在IE中使用用内联事件函数(inline event handlers)会导致另一种的类型的泄露.这不是通常的循环引用类型的泄露,而是由内部临时匿名脚本对象产生的泄露.详细信息,请看文章"DOM insertin Order Leak Model"和例子JavaScript Kit tutorial.
避免扩展(expando)属性
扩展(expando)属性是把任意JavaScript的属性附加的到DOM元素上,这是循环引用产生的根源.你可以不产生内存泄露来扩展 (expando)属性,但是这是很容易产生内存泄露的.泄露模式是[DOM元素-->扩展(via expando)-->中间对象(intermediary object)-->DOM元素].最好是避免使用用它们.如果你用到它们,仅可使用原始类型(primitive types)作为值.如果不是原始类型,当扩展(expando)属性不在使用的时候,要把它置为空.可以参考文章"Circular References"

完美解决笔记本Vista休眠耗电的问题

一、如果你用的是Vista,或者Vista sp1,也就是没有升级到sp2,那么如果你的笔记本休眠的情况下耗电,那你可以如下操作,51nb上面一个网友发布的方法。直接转载过来了,操作很详细了,不作多说。

无意中看到cmd下的命令行工具powercfg,仔细研究了一下所有参数后,先运行了这个
C:\>powercfg -devicequery wake_programmable
ThinkPad Modem
HID-compliant mouse (001)
Intel(R) 82566MM Gigabit Network Connection
High Definition Audio Intel(R) Wireless WiFi Link 4965AGN

上面列出的是“用户可配置的从某个睡眠状态唤醒系统的设备”。
第一行是猫,第二行是外接的鼠标,第三行是内置网卡,最后一行 “High Definition Audio Intel(R) Wireless WiFi Link 4965AGN” 引起了我的注意,在无线网卡的前面多了一个“High Definition Audio”。这里可能是个bug,两个设备写成了一行。运行下面这个
C:\>powercfg -devicequery wake_armed
High Definition Audio

这里说明还有一个设备配置成用于唤醒。
使用powercfg -devicedisablewake "ThinkPad Modem",能顺利的把Modem的唤醒开关关上
但无法用同样的方法关闭这个"High Definition Audio"。

打开设备管理器,却无法找到这个“High Definition Audio”。然后在设备管理器的菜单“查看”里面选“依连接排序设备”,下面就能找到这个“High Definition Audio 控制器”了。
在它的属性里面果然也有一个“电源管理”,把唤醒的开关去掉。

现在再运行
C:\>powercfg -devicequery wake_armed

现在没有设备配置成用于唤醒了。

到了晚上,我看了一下电量,98%。休眠。然后拔掉电源,睡觉。
上午来到办公室,打开电源,从休眠恢复(毕竟比开机快了好多),看电量 98% ,!!! 搞定了!!!

我的系统是T61,vista,我想其他机型或是用xp,应该可以用同样的方法解决。

二、如果你已经把Vista升级到sp2,或者某天你用上面那个方法设置了之后你的笔记本又开始休眠耗电的话,你可以试试下面的解决方法,反正我是解决了休眠耗电的问题了,折磨了我整整大半年(自从把vista升级到sp2后),关机都不敢休眠,要忍受缓慢的系统重启过程,休眠的那种飞速启动的感觉没了,经过不懈的查找,终于找到解决的方法。

原来这是Vista系统的一个bug,微软在7月份的时候终于推出了一个补丁,当然这个补丁没有自动推送过来更新,需要你自己去下载,这个补丁的说明页面:http://support.microsoft.com/kb/970030,耗电问题是因为音效卡引起的,从微软官方下载这个补丁有点小麻烦,还要填邮箱,然后从邮箱里面提取下载地址,所以本站就提供一个给大家下载了,vista-sp2补丁-解决休眠耗电的补丁,希望大家能解决此问题,解救你的电池!当然,有机会的话还是升级到windows7,windows7应该没有休眠耗电的问题!