function action(get_data){
get_data(callback);
}
function callback(data){
alert(data.join());
}
function get_asyn_data(callback){
// ...
xmlhttp.onreadystatechange = function(){
// ...
callback(json.parse(xmlhttp.responseText));
};
}
function get_sync_data(callback){
return callback([1,2,3]);
}
action(get_asyn_data);
action(get_sync_data);
- 01 2009. 06
-
同步/异步处理数据的设计模式
- 24 2009. 05
-
折腾Pidgin手记
一般朋友都会有QQ帐号(装B不用的另外再说),腾讯的TM做的还是不错的,所以主要是使用TM上QQ。
现在公司要求使用旺旺,同事间用旺旺交流较多,而且没有替代软件,这个没有办法。
新装的系统上没有安装msn程序,因为好友不多,通信数量也少,加上新版安装不上,旧版太丑,尤其是讨厌大面积入侵的广告,所以很久都不登录msn了。
Gtalk上倒是有一些geek好友,虽然交流不算多,但对Gtalk本身还是很满意的。常用Gmail,而且Web端的Gtalk也很强大,甚至超过了桌面应用程序,所以客户端是不考虑安装的。
突然手贱想再折腾下Pidgin玩玩,这次除了旺旺和百度HI没办法外,我将所有的可用帐号都给折腾上了,包括一起没折腾好的Gtalk自定义域名(customer domain)帐号,以下为各个帐号的设置及其注意事项。
继续阅读 »
- 19 2009. 05
-
快速定位到Google Reader指定的订阅条目和标签
当Google Reader订阅数量或者其中的标签使用过多时,要找到某个指定的订阅条目或者标签则会显得困难(查看指定的标签可以使用快捷键gt,然后输入标签名)这里提供一个Greasemonkey脚本,在Google Reader中增加一个文本框,辅助快速定位到指定的被订阅者和标签。
安装:
1. 需要先安装Greasemonkey (Firefox)。
2. 点击这里安装脚本。使用:
安装完成后,刷新Google Reader即可看到左侧订阅列表栏上方多了一个文本输入框。
在文本框中输入关键字即可。
- 09 2009. 05
-
未知选项的表单设计
发现许多的注册表单设计中,性别部分的设计大都这样:使用单选按钮(radio)并默认选中一个(大都为男性,某些女性频道为主的可能为女性)。例如网页申请QQ帐号和注册网易通行证等
网页申请QQ (qq.com)帐号
注册网易(163.com)通行证
雅虎(yahoo.com)的设计比较特立独行,使用选择框(select),并默认不选中任何一个。我觉得本身只有两个选项,用选择框(select)比较费事,要多点一下(最近我怕了我这弹力十足的鼠标左键)。
而雅虎中国(yahoo.cn)的设计也是使用单选框(radio),但是不选中任何一个。
按常理来说,注册系统并不知道用户的性别是什么,默认选中任何一个都不合理。yummy有一篇文章《中文按1,For English, press 2》提到“如果用户必须做出选择,那就先给他做好一个选择。”,这个道理在某些情况很不错,但是用在这里不合适。
如果不足够了解用户,就不要替用户做选择。
继续阅读 »
- 08 2009. 05
-
状态模式
现有的IM软件都有状态设置功能,常见的默认状态有:在线,忙碌,离开,隐身,离线,但是这些状态对应的选项是不可设置的,例如TM/QQ,选择在线或者忙碌,对应的通知铃声,接收消息方式都是指定、不可改变的,虽然这些默认设置在某些情景下可能很合理,但不总是这样。
TM/QQ 状态:可以使用默认状态作为模板附加消息来添加状态。
继续阅读 »
- 08 2009. 05
-
谷歌地图(Google Maps)全屏
一直想让Google地图能全屏显示,今天起的早,顺手写了几行代码,初步实现了全屏功能,代码本身没有什么技术含量,而且还有很多值得改进的地方,准备周末完成。下面的Javascript代码支持谷歌(中国)地图和Google Maps全屏,让浏览器全部可见区域显示地图。
全屏源码:// Full Screen (function(){ function $(i){return document.getElementById(i);} for(var i=0,a=["gbar","guser","header","links"],l=a.length;i<l;i++){ $(a[i]).style.display="none"; } /*$("panel").style.left="-380px";*/ })();





