存档在 2009 年 03 月

500G硬盘如何建立文件夹

2009年3月30日

软件:

开发用

工具

系统

多媒体

驱动程序

办公

装机必备【这个好像很杂】

歌曲音乐:

音乐专辑

电子书:

按类别,按出版时间分类

文档:

RSS feed

电影:

一个目录就够了吗?

家庭资料:

音频

视频

照片

游戏:

三国群英传2

CS1.6

SC全集

51game

系统备份:

光盘镜像:

虚拟机系统文件:

原来51.com和百度一个风格的

2009年3月28日

今天在cnBeta的RSS上看到一条消息说,李彦宏大人亲自下令将刚刚在昨天改版的百度贴吧改回原来的版本。哈哈,这种做法和51.com前几天的行为简直是一个模子里出来的。

上周51.com的相册浏览页也进行了改版,主要的变化是缩略图由780px改为了460px,页面背景有一个很难看的黑底。结果,受到很多老用户的抵触,第三天,就又改回去了。百度这次事件基本上也是因为爆发了大量的用户差评导致的。这里我不知道新版的百度贴吧是个什么样子的,不过就改版这件事来说,我觉得有时候过分顺从用户未必是件好事。

一个产品总归有人喜欢,有人不喜欢,做不到完美,那么就应该向着尽善尽美的方向努力。一旦有了较大的变动而导致负面意见短时期较大就诚惶诚恐的话,是不利于整个产品的发展的。当然,我这样说的意思也不是说随便改版,不顾用户的看法。

比较好的做法是:

1.尽可能做好前期调研,发现用户的切实需要,埋头做项目最后浪费的只是大家的心情和相关产品开发人员的精力

2.最好是提出一个过渡式的方案,新老版本并存,可以让部分的用户可选这两个版本之一即可

3.即使出现负面评论也不要过分紧张,新版本也许并没有那么差,也许有些觉得新版本好的用户只是在心里面夸【比如这次51.com的相册浏览页改版,米妈就觉得不错】,也许只要在新版上稍微发掘一下就能满足更多用户的需求

Js+Flash实现复制-适用于Flash Player10及以上

2009年3月23日

又有几天没有写日记了,通常有2种原因会出现这种情况,一个是因为生活太枯燥没什么可写的,第二种可能就是我正遇到的。

生活太忙碌,没有时间写。

上个礼拜接连是我的阳历生日,我的阴历生日,米米的阴历100天,米米的阳历100天,又是吃饭前的种种,又是米妈要去体检,米外婆身体又不大舒服。我的有些事情也不大顺心。还好,周末买了5注彩票,中了最高级别的5元钱,冲冲霉气。

下面步入正题:通常情况下,IE里面我们用window.clipboardData这个对象来实现用户点击按钮即可拷贝指定文本框里面的内容


<input type="text" id="txt" value="ABCDEF" />
<input type="button" onclick="co();" value="COPY" />
<script>
function co() {
  var txt = document.getElementById("txt");
  var t = txt.value;
  if (window.clipboardData) {
    window.clipboardData.setData("Text",t);
  }
}
</script>

对于非IE浏览器由于安全问题,默认是禁止控制剪贴板的,于是诞生了JS+Flash结合解决该问题的“终极方案”。利用Flash的剪贴板功能,将数据传递给FLASH然后调用FLASH内置方法,设置剪贴板。

<embed src="clipboard.swf" flashvars="clipboard=escape('这里是要传输的文字')" 
type="application/x-shockwave-flash" width="0" height="0"></embed>

clipboard.swf文件里只有简单的这些代码即可。


if(clipboard.length) {
  System.setClipboard(clipboard);
}

但是,自从Flash Player 10出来之后,一切都改变了。具体如何处理明天继续。

升级jquery版本导致BUG引起的Jquery代码阅读

2009年3月18日

今天碰到一个古怪的问题,按照以前的逻辑思维怎么也走不通。大概的代码是:


$("#node_a,#node_b,#node_c").appendTo($("#container"));

按照以前的逻辑就是将node_a,node_b,node_c节点按顺序插入到container节点内。可是今天出错了。

下面看一个DEMO。http://demo.thankphp.net/65_jquery.htm [IE下看效果]

可以看出来jquery1.3.2和jquery1.3.1的selector有着天壤之别。

仔细阅读了一下jquery最新的1.3.2的代码,发现jquery1.3.2的selector有这样的代码变化。

Sizzle CSS选择器引擎中增加了这样一段话:http://sizzlejs.com/ thankwsx


if ( sortOrder ) {
	hasDuplicate = false;
	results.sort(sortOrder);
	if ( hasDuplicate ) {
		for ( var i = 1; i < results.length; i++ ) {
			if ( results[i] === results[i-1] ) {
				results.splice(i--, 1);
			}
		}
	}
}

sortOrder又是哪里来的呢?


var sortOrder;

if ( document.documentElement.compareDocumentPosition ) {
	sortOrder = function( a, b ) {
		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( "sourceIndex" in document.documentElement ) {
	sortOrder = function( a, b ) {
		var ret = a.sourceIndex - b.sourceIndex;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( document.createRange ) {
	sortOrder = function( a, b ) {
		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
		aRange.selectNode(a);
		aRange.collapse(true);
		bRange.selectNode(b);
		bRange.collapse(true);
		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
}

现在一切都清楚了,jquery1.3.2版本之前,选择器是按选择器提供的顺序选择节点的,而jquery1.3.2版本之后选择器选择节点的先后顺序与你的书写顺序无关了,jquery会自动匹配节点集合中节点的顺序按节点顺序返回。

为了查这么一个BUG,花费了大半天的时间。其实只要看看jquery官方提供的Release Note就一切明了了。http://docs.jquery.com/Release:jQuery_1.3.2

项目庞大了之后,所有引用的第三方的代码更新升级的时候必须小心谨慎,如果有一些意料外的事情发生要首先检查是否是第三方代码引起的。【在本身代码未作更改的前提下】。第三方代码的升级换代要了解清楚可能会有的影响。兼容性在项目中有时候是最最重要的。

google为jquery提供的cdn服务

2009年3月17日

大家随便用,比放在自己服务器上要方便省事。

http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js

http://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js

http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js

http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js

将URL中的min去掉是源文件的地址。

这下可以在自己的模板里添加<script type=”text/javascript” src=”GOOGLE_JQUERY_SRC”></script>了。

好久不见的windows 98 se

2009年3月16日

因为工作需要,装了个windows98第二版,真晕啊,这东西恐怕有4-5年没见了。老朋友,绝对是老朋友。

还记得01年左右的时候,经常装98系统,那序列号背的是贼溜,今天输入序列号的时候依稀还记得。WXWGP XDR8Y 等等。。后来实在想不起来,还是去网上找了另外一个能用的。

98系统就像以前的红白机游戏一样,某些软件只能在古老的系统上运行了。

今年的生日礼物

2009年3月13日

米妈在网上给咱买了个包包,单肩、SONY原装正品、最大可容纳15寸笔记本、防雨、防晒、防盗的包包。

正品:¥280。

我刚拿到手的时候还闲这闲那的,米妈气色特了,要把包推掉。哈哈,我就是这个臭毛病,舍不得花钱。【习惯是很难改掉的】

其实还是很喜欢的。不过今天早上背来的路上发现,帅归帅,舒适性还是双肩背包好,不过坐着的话,双肩背包又没地方放,放在腿上太别扭了,占地方。如果是小本本的话,路上都可以拿出来玩。

我说要不要弄把锁防止电脑背偷了,米米外婆说,人家不撬锁,把你的包拿走就行了。汗~

程序之弊

2009年3月12日

客运总站的余票是真的,火车站的余票是假的。

网络上也不乏虚假的及时更新。

今天无意中打开一个大型网站,上面有一行字:“全国鲜活信息:9178281 条 今日新发信息数:34852 条 注册用户数:2901131”。

而且这个数字还在不断的更新,一片火爆景象。

我是一个做技术的,自然很佩服,这样高的更新频率得对程序要求多高啊?于是好奇起来看该网站的程序。

结果刚打开源代码搜索到这个关键字“全国鲜活信息”就发现紧跟着有下面这段代码。


var post_freq = 0.75;
var user_freq = 3.75;
setInterval("document.getElementById(\"total_new\").innerHTML =
parseInt(document.getElementById(\"total_new\").innerHTML)+1;
document.getElementById(\"total_active\").innerHTML =
parseInt(document.getElementById(\"total_active\").innerHTML)+1",1000*post_freq);
setInterval("document.getElementById(\"total_user\").innerHTML =
parseInt(document.getElementById(\"total_user\").innerHTML)+1",1000*user_freq);

哦,我明白了。。

用纯文本显示图片

2009年3月10日

这里不是介绍img 的 src属性里的data而是真正的由文本构成的图片。【有关src data的参考资料见 http://dean.edwards.name/weblog/2005/06/base64-ie/ 】先看看效果吧。

这里 http://demo.thankphp.net/php/pix.php【可能有点慢,PSP,智能机当心点开】

下面看代码,非常非常简单。


$imgname = "http://www.haoting.com/images/logo.jpg";
$im = imagecreatefromjpeg($imgname);
$width = imagesx($im);
$height = imagesy($im);
echo '<style type="text/css">span {font-size:4px;line-height:2px;}</style>'; //good
$space = 1;
for( $i = 0 ; $i < $height ; $i+=$space) {
  for ($j = 0 ; $j < $width ; $j+=$space) {
    $rgb = imagecolorat($im,$j,$i);
    $color = dechex($rgb);
    echo '<span><font color="#'.$color.'">*</font></span>';
  }
  echo "<br />\n";
}

一个不错的基于jquery的overlay – boxy

2009年3月9日

该plugin的主页是:http://onehackoranother.com/projects/jquery/boxy/

最新版本是:0.1.4

一般性的效果截图如下:

目前IE7还存在问题。

经检测,问题不是出在Boxy,而是我用的YAML和Boxy的CSS定义冲突了。解决中。。。