推荐桌面壁纸自动更换软件“我想要壁纸 V1.0 Beta”

2008年10月05日 13点37分 » 作者: lowellzhong »

  我想要壁纸是一款针对Windows桌面背景图片进行自动更换的应用软件。通过它你可以将壁纸图片组织一起创建为不同类别的壁纸专辑(如:美女壁纸、明星壁纸等等),并指定随机、顺序等自动更换(播放)模式。
  尤为推荐大家的是,我想要壁纸还可以将互联网上喜欢的壁纸图片网址添加到壁纸专辑中,它会自动为你下载并设置为桌面背景,这样使得你的桌面更佳丰富多彩。并且,我想要壁纸软件体积小强,资源占用少,不会影响日常的电脑操作。

软件下载地址(非常小109K):
http://www.bz531.com/blog/index.php/publish

界面截图:

基于libevent 的http server 简单例子

2008年04月13日 21点21分 » 作者: lowellzhong »

libevent 是一个强大的跨平台的事件通知库,它从1.2.* 版本开始支持轻量级的http server 开发支持,随后陆续还推出轻量级 DNS server、RPC server 开发支持,网络上目前可参考的代码不多,希望本人的代码可供大家交流使用。

本例子使用 libevent-1.4.3-stable 版本。

libevent 编译安装使用默认:

./configure && make && make install

如果再编译本例子过程遇到 libtool 无法找到 libevent.so,请操作如下步骤:

echo “/usr/local/lib” >> ld.so.conf
ldconfig

查看全文 »

Internet Explorer 8 beta 安装体验(多图)

2008年03月06日 11点37分 » 作者: lowellzhong »

微软终于按耐不住,正式公布了Internet Explorer 8 beta版本下载,立即安排体验了一把,截图分享给大家。

ie8-1.png ie8-2.png

ie8-3.png ie8-4.png

ie8-5.png ie8-5.png

ie8-6.png ie8-7.png

让JS脚本代码远离Html标签

2008年01月28日 00点08分 » 作者: lowellzhong »

MVC程序设计模式已经被广泛应用在服务器端网页编程,通过这个开发思想彻底改变了传统的CGI程序html和CGI混合的情形,通过按照模型层、视图层、控制层将CGI语言(业务逻辑)和Html代码分离,降低了耦合度。

客户端JS和HTML也同样可以发挥MVC的思想,将JS代码和HTML代码尽可能分离,提升维护性。

改造之前

先来看一个传统的JS/HTML编写场景:Demo1.html

通过查看源代码,可以看到 html 元素中混杂这多个事件函数,为了实现一些华丽的特性(鼠标经过文本框时文本框的边框颜色便蓝等),而不得不在input元素标签上嵌入一堆的代码,导致最终html和js的纵横交错:

<form action="?" name="form1" id="form1" onsubmit="return chkform(this)">
    <p>用户:<input type="text" name="user" id="user" onmouseover="this.style.border = '2px solid #0000ff'" onmouseout="this.style.border = '2px solid #333'" onfocus="chkuser(this, 'focus')"  onblur="chkuser(this, 'blur')" value='请输入用户名' onmouseover="this.style.color = 'red'" onmouseout="this.style.color = '#333'"/></p>
    <p>密码:<input type="password" name="pass" id="pass" onmouseover="this.style.border = '2px solid #0000ff'" onmouseout="this.style.border = '2px solid #333'"/></p>
    <input type="submit" value="  登入  " />
</form>

这些html标签难道从来对js如此的霸王硬上弓毫无怨言?

改造以后

请查看这个改造后崭新场景的 demo2.html 的源代码。
你会立即发现,一起都变的如此的清晰、井井有条,原来onmouse\onmouseover等事件的代码已经在input 标签身上消失,转而这些代码都统一集中在了页面底部 body 结束标签处。

html又重新恢复了往日的干净:

<form action="?" name="form1" id="form1">
    <p>用户:<input type="text" name="user" id="user" /></p>
    <p>密码:<input type="password" name="pass" id="pass" /></p>
    <input type="submit" value="  登入  " />
</form>

事件代码被分离成:

$('user').onfocus = function () {
        if(this.value == defUserValue)
        {
            this.value = '';
        }
    }
       
    $('user').onblur = function () {
        if(this.value == '')
        {
            this.value = defUserValue;
        }
    }

通过上面改造前后例子的演示,充分将js/html分离的思想应用到实际项目开发中,并形成开发框架,尤其在大中型项目中后期的页面维护上将发挥出积极的作用。

JavaScript/Jscript 面向对象编程

2008年01月27日 22点12分 » 作者: lowellzhong »

通常,JavaScript/Jscript的对象有4种类型:

  1. 内部预定义对象(如:Object, Array, String, Match, Date等)
  2. 外部对象(宿主环境内创建的对象,如:浏览器中的 window, document)
  3. 外部组件对象(如:ActiveX控件等)
  4. 生成对象(就是由WEB程序员创建的对象)

下面具体介绍“生成对象”的3种实现方法:

通过 Object() 创建对象

Object() 为内部预定义对象,通过它可以快速创建对象的实例,缺点是它不具备‘类’的构造能力,不可以通过new方法实例化多个对象。
代码实现:

/* 创建名为boy的对象实例 */
var boy = new Object();
/* 为对象添加属性 */
boy.name = 'lowell';
boy.age = 26;

/* 为对象添加方法 */
boy.sayhi = function (){
    alert('my name is ' + this.name + ', ' + this.age + ' years old');
}

/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();

通过 JSON 化创建对象

缺点也是不具备‘类’的构造能力,不可以通过new方法实例化多个对象。

/* 创建名为boy的对象实例 */
var boy = {
    /* 为对象添加属性 */
    'name' : 'lowell',
    'age' : 26,
   
    /* 为对象添加方法 */
    'sayhi' : function(){
        alert('my name is ' + this.name + ', ' + this.age + ' years old');
    }
}

/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();

通过 function() 构造函数创建对象

构造函数的方式比较灵活,并且支持通过 new 方法创建对象实例,如下:

function human(name, age) {
    /* 为对象添加属性 */
    this.name = name;
    this.age = age;
   
    /* 为对象添加方法 */
    this.sayhi = function (){
        alert('my name is ' + this.name + ', ' + this.age + ' years old');
    }   
}

/* 创建名为boy的对象实例 */
var boy = new human('lowell', 26);
/* 调用boy对象实例的 sayhi 方法 */
boy.sayhi();

/* 创建名为girl的对象实例 */
var girl = new human('lily', 18);
/* 调用girl对象实例的 sayhi 方法 */
girl.sayhi();

以上3种对象方法都是ECMAScript标准中支持的,请根据实际需要选择。

认识 ECMAScript 标准化程序设计语言

2008年01月13日 20点51分 » 作者: lowellzhong »

咋一看ECMAScript这个英文单词估计很多从事WEB个把年头的程序员还是一头雾水。如果提及JavaScript大家可是如雷贯耳,ECMAScript和JavaScript的关系是什么?

下面收集了部分资料,有兴趣的朋友可以借此了解一下。

介绍

ECMAScript是一种由欧洲计算机制造商协会(ECMA)通过ECMA-262标准化的脚本程序设计语言。ECMA-262的第一个版本于 1997年6月被欧洲计算机制造商协会采纳。

ECMAScript是由ECMA-262标准化的脚本语言的名称。

JavaScript和JScript与 ECMAScript兼容,但包含超出ECMAScript的功能。至今为止有三个ECMA-262版本发表,第四版也已经正式公布。

历史

1995年12月升阳公司与网景通讯公司一起引入了JavaScript。1996年3月网景通讯公司发表了支持JavaScript的网景导航者2.0。由于JavaScript作为网页的客户面脚本语言非常成功,微软于1996年8月引入了Internet Explorer3.0,这个软件支持一个“约”与JavaScript相容的JScript。

1996年11月网景通讯公司将JavaScript提交给欧洲计算机制造商协会进行标准化。ECMA-262的第一个版本于1997年6月被欧洲计算机制造商协会采纳。

国内大技术环境内,目前极为匮乏标准化制定组织、团队,我们要走的路不仅仅只是实现一个高效的某一功能!

通俗易懂聊 Document Object Modle

2008年01月12日 15点38分 » 作者: lowellzhong »

Document Object Modle(DOM) 中文称为文档对象模型,是经由W3C标准协会定义的一套对于Html/Xml文档读写接口(API)规范,这样便于所有程序语言的开发人员可以对文档使用统一、标准化的方法进行读写操作。

老外特别热衷于技术标准化推广文化,不得不佩服!

不过,W3C不具体编写DOM的代码实现,而是交由各软件制造者依据使用程序语言,按照这个规范实现相应功能。
查看全文 »

趣味生动话数字签名技术

2008年01月10日 11点42分 » 作者: lowellzhong »

《什么是数字签名》,本文有罗威尔翻译,原作者趣味生动的再现了数字签名的过程,有兴趣的推荐看看。网址:http://www.zhongguowen.com/demo/signature/DigitalSignature.html

推荐两款WEB版项目管理系统dotproject和redmine

2008年01月09日 22点07分 » 作者: lowellzhong »

使用一套功能使用,切合自己日常工作需求的项目管理系统,有助于培养团队良好的工作规范、提示工作效率、降低项目风险。这里推荐两款不错的WEB版本项目管理系统,希望对你有所用启发。

查看全文 »

PHP基于Memcache的跨服务器Session共享

2008年01月05日 00点25分 » 作者: lowellzhong »

PHP的Session的实现原理就不复述,大家google相关资料。
源码下载:shared-session-memcache.rar

功能特色:配置、调用简洁

<?php
require("mysession.memcache.php");

/* please specify memcached host */
$mmc_hosts = array();      
$mmc_hosts[] = array('127.0.0.1', 51001);
$mmc_hosts[] = array('127.0.0.1', 51002);

/* please specify PHPSESSIONID cookie doamin */
mysession_run($mmc_hosts, 10, '.myhost.com');

/* read session */
$_SESSION['count'] = isset($_SESSION['count']) ? $_SESSION['count'] + 1 : 0;

// TODO
?>

功能特色:均衡调度memcached

使用md5 hash算法实现session在多个memcached之间的负载均衡,如:

function mysession_dispatch($session_id)
{
    $env = &$GLOBALS['mysession_env'];
    $count = count($env['hosts']);
    if($count == 1)
    {
        $index  = 1;
    }else{
        /* load balancing */
        $index = hexdec(substr(md5($session_id), 0, 4)) % $count;
    }
    $host = &$env['hosts'][$index];

    $env["index"] = $index;
    $link = memcache_connect($host[0], $host[1]);
    return($link);
}