Mac下SSH代理软件Secret Socks修改版

Secret Socks是Mac下不错的SSH代理软件,不过有两点非常的不爽:一是不能记住密码(可能原作者是考虑到安全因素),二是超时时间设置得有点过短,而且不能修改,导致经常半天都连不上,实在是让人很郁闷。

令人欣慰的是,作者公开了此软件的源代码,索性直接拿来改了下,重新发布一个新版本。专门针对以上两点做了修改,基于安全因素(相对安全)考虑,给保存的密码用DES进行了加密,key是一个随机的字符串,非公开的。

打包后的文件只在Lion(10.7.x)下进行了测试,要求系统的最低版本是10.5.x,但未进行测试。

安装包下载地址:http://vdisk.weibo.com/s/IAQS(新浪微盘)

下载地址:http://115.com/file/bevneg0p#Secret-Socks.zip

 …

js中函数预解析在Firefox下的异常表现

前几天同事发现的一个诡异现象,猜猜浏览器执行下面这段代码会弹出什么提示?

if(1){
    f(1);
    function f(a){
        alert(a);
    }
}

通常情况下,都认为javascript中function会被预解析,所以这里应该会弹出一个对话框,显示字符“1”。没错,在IE6-IE9,Chrome,Safari,Opera等待浏览器下也都是这个结果。但是偏偏Firefox有点特立独行,会提示“引用错误,f未定义”。

我们再试试,把if去掉,只留两个花括号看看:

{
    f(1);
    function f(a){
        alert(a);
    }
}

还是一样!现在我们在试试几种情况:

if(1){
    function f(a){
        alert(a);
    }
    f(1);
}

这个没有问题,正常显示1,再试试这个:

if(1){
    function f(a){
        alert(a);
    }
}
f(1);

也没有问题,再试试这个:

if(0){
    function f(a){
        alert(a);

解决Opera不能访问内网资源的问题

开发测试时,经常会把公网页面上的部分域名指向内网时,在Opera下并不会发送对应请求,导致页面不正常,而几乎所有的浏览器都正常。这个并不是页面兼容性问题,这其实是Opera独有的一种安全策略。解决此问题的方法如下:

菜单->设置->首选项->高级->安全性->信任的网站->安全的内部主机->添加,输入你内网服务器的IP即可。

opera 设置

 …

也谈JavaScript代码性能优化

差不多两年前写了个选择器whiz,除在DOM查找方面做了许多优化工作之外,还在代码优化上做了很多工作,一直没有分享。抽空总结一下,基本上在jQuery、Mootools和YUI的源码里面都可以看到这些写法。有些是已经在网上分享很多遍了,众所周知的,也有一些可能写了多年的JavaScript的开发人员也不一定想得到的。如果有说得不正确的地方,还请大家指出。还有特别说明的是,其中某些写法不是很推荐,虽然代码简洁了,但是有可能造成阅读困难。

1.尽量使用源生方法(Native Method)

js是解释性语言,相比编译性语言执行速度要慢。如果浏览器已经实现了该方法,就不要再用js再去实现一遍了。另外,绝大部分情况下,浏览器已经实现的方法已经在算法方面做了很多优化,再重复实现一遍只是浪费时间和精力还有带宽。当然,如果你只是为了练习算法,那另当别论。

2.尽可能减少循环次数

代码的瓶颈大多在循环,少一层循环,就能数倍地提高性能。如果要对一个数组的每个元素进行多次操作,尽可能使用一次循环,多次操作,而不是多次循环,每次循环执行一次操作。尤其是在进行多个正则匹配的时候,尽可能合并正则表达式,在一次遍历中尽可能找到相应的匹配。…

Merpressor——自动合并压缩与无缝调试

这个是在第19期WEB标准交流会上的分享PPT,分享的内容很简单,主要是大家讨论,都很诚恳地提出了各种想法和意见。在前端这一块,平常的交流太多都在于各种技术交流,而太少关注调试、测试和发布环境。

大的互联网公司可能都有各自的调试、测试和发布流程,但是在这方面的资料实在是不多。Bobby(曾在yahoo台湾,现在盛大创新院) 讲到yahoo内部其实也有这么一套,我的和他们的很类似,遗憾的是内部使用的,也无迹可寻。Hax(盛大创新院)也提到一些想法,比如自动解决依赖关系,部分更新等,都是不错的想法。


解决ubuntu下ibus没有输入窗口的问题

在用ubuntu 10的时候为了装google拼音输入法,把ibus给卸载了,装来scim,而且一直用google拼音也用得挺好。直到后来升级到了ubuntu 11,发现google拼音变得极不稳定,经常在选第二个词的时候挂掉,然后就再也没办法输入中文,只能重新启动scim,挺烦人的。于是考虑再次回到默认的ibus输入法,于是卸载scim,重新装上ibus,结果更悲剧的事情发生了,ibus一直提示没有输入窗口,现象就是下面的这张图。

ibus没有输入窗口

Google了N下发现有很多人和我碰到一样的问题,但似乎都没有解决办法。折腾了几天之后,终于找到一个办法,就是修改gtk配置文件。首先进入这个目录:/usr/lib/gtk-2.0/2.10.0(gtk版本可能略有区别),里面有个gtk.immodules文件,用vim或者gedit等文本编辑器打开它,找到这两行:

"/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so"

用AS3来解析HTTP头部

AS3的URLLoader本身没有提供解析HTTP头部的功能,而在应用中,我们偶尔也会需要去解析HTTP头部,可以通过HTTP头部获取一些状态信息或者一些其他数据。

幸好AS3提供了Socket类,我们可以利用Socket来模拟HTTP请求,解析HTTP头部以及返回的内容。基本原理很简单:连接服务器的80端口或者其他web端口,向服务器发送请求头,基本上和下面类似:

GET /web/crystal/v1.1Beta01Build011/crystal_ext-min.js HTTP/1.1
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Accept-Encoding: deflate
Host: adsfile.qq.com

最新版flashplayer 10.1可能存在的一个安全问题bug

最近flashplayer 10.1升级到了10.1.82.76,由于该版本在安全性控制方面做了许多改进,导致出现了如下的问题。

在Firefox或者Chrome浏览器下,当跨域向远程服务器请求数据时,如果URL使用的是GBK编码的,那么即使在远程服务器上有安全策略控制文件,仍然会引发安全错误。而同样的服务器,使用UTF8或者纯ASCII码做URL则不存在此问题。

也有人发现了相同的问题:http://forums.adobe.com/thread/699750?tstart=0

此问题已提交至Adobe Flash Player Bug跟踪系统中,等待响应。

因此,建议大家尽量不要使用中文名作为URL路径,能使用英文字符的尽量使用英文字符,虽然有时候是难看一点。…

Merpressor —— 在线自动合并、压缩JS文件

最近工作稍微空了点,正好又有幸见到了盛大的在线合并工具,于是一时兴起,把YUI Compressor改造了一下,写了个在线合并JS和CSS的工具,命名为Merpressor,目前已经在工作中使用了。

Mepressor分为两个部分:一部分为公网发布时所用,使用Java编写;另一部分为本地调试时所用,使用轻量和方便的PHP编写。(似乎很绕,简单地讲:Java版本用来公网部署,合并同时压缩代码;PHP版用来本地测试,并不压缩内容。)

在项目中需要合并多个js文件或者css文件时,前端开发者只需修改一个xml格式的配置文件,指定需要合并的文件,通过一定的规则访问,服务器则可自动合并多个js文件,并使用YUI Compressor压缩后返回相应内容,而本地环境下,则会自动导入xml中指定的多个js文件或者css文件,从而使得开发调试和发布一体化,真正做到无缝切换。

注意: 由于合并和压缩需要花费较大的资源和时间,因此在响应速度和并发上会表现较差,在实际使用过程中,需要配合CDN(内容分发网络,一般中大型网站都会采用)使用。当然,你也可以只是把这个工具当合并压缩工具使用。…

在弹出窗口用POST提交数据

话说离上一篇日志的发表时间已有漫长的四个多月,实在是对不住读者。客观原因找一下,但是还是要实事求是:一是因为工作实在是太忙太累,无暇顾及;二是BLOG系统太慢,从前到后都需要大概,在开忙之前想修改BLOG系统来着,结果改了一点点就开始忙得不可开交了,于是也中止了。

春节休息了几天,今天上班第一天,最近混twitter混得比较多,经常要压缩URL,以前做了个书签http://is.gd/压缩,后来发现了全球最短的URL——http://to./,于是决定换API压缩。以前的API可以用GET方式提交数据压缩,但是这个却需要用POST方式提交,因此需要在弹出窗口的同时用POST提交数据。实现起来很简单:在弹出窗口中生成一个表单,把value写到对应的字段中,打开弹出窗口后再用js提交表单即可。

代码如下:

javascript: void(function() {
	var p = 'http://to./',