• Tag:    2006-05-17

    由于项目需要,要在Linux下虚拟一个Windows,经过查找些资料,发现可一用VMware来实现,当然还有其他一些虚拟机可以使用如Win4lin,bochs等,但经过试用,只有VMware还好用.以下就是安装的步骤.
    首先到https://www.vmware.com/ 下载最新的安装包,比如VMware-workstation-4.0.5-6030.tar.gz,假设放在“/tmp”下.然后使用下面的命令解压后安装.
    1、tar –zxvf VMware-workstation-4.0.5-6030.tar.gz
    2、cd ./vmware-distrib
    3、./vmware-install.pl
    下面按照提示选择就可以了,如果没有特殊要求,直接回车即可.
    4、安装完启动VM,提示符下输入命令:vmware,或者按照提示输入就可以起动,就可以看到VMware的界面了.

    如果是用rpm包安装:
    1、rpm -ivh VMware-workstation-4.0.5-6030.i386.rpm
    Preparing… ########################################### [100%]
    1:VMwareWorkstation ###########################################[100%]
    2、安装完现用下面命令启动:vmware &
    3、提示要配置vmware-install.pl,仔细查看“vmware-install.pl”他的位置,并进入他的文件夹,用命令./vmware-install.pl,进行配置,根据提示做就行。
    4、完成之后就可以用命令:“vmware”启动了。

    起动后就可以添加的你自己的虚拟机了,我这里添加的windows 2000 prwfessnal,把虚拟机的CDROM设置成光驱,就可以从光盘安装操作系统了.
    当然这里有很关键的一步,就是先到VMware的网站申请30天试用的序列号,在打开虚拟机之前要输入注册号,否则没办法Pow on。
    ok,现在你可以施用了.

  • Tag:    2006-05-01

      今天是五一,劳动人民的节日,但是我这个劳动人民仍然呆在实验室,继续在代码中游荡。
    前些天看了看Ajax,正好,在正在写的程序中用得着,马上拿过来试试,效果还不错。
    uploads/200605/01_145457_ajaxtest1.gif
    要完成的功能如下:在输入了职工的工号后,马上显示出该职工的一些基本信息。如图所示,在文本框“employeeid”输入工号,在层”showresult”处显示职工基本信息。
    在以前的处理中我是将“showresult”处用了一个Iframe来实现,当然也可以实现,但是每次当输完工号后,显示职工基本信息的页面都要加载一次,很是麻烦,正好Ajax可以解决此类问题,就用上了。下面就是具体的代码:

    输入页面的Ajax代码:

    < script language=”javascript”>
    //ajax start
    var xmlHttp;
    function createXMLHttpRequest() {
    xmlHttp = false;
    if(window.XMLHttpRequest) { //Mozilla
    xmlHttp = new XMLHttpRequest();
    if (xmlHttp.overrideMimeType) {
    xmlHttp.overrideMimeType(”text/xml”);
    }
    }
    else if (window.ActiveXObject) { // IE
    try {
    xmlHttp = new ActiveXObject(”Msxml2.XMLHTTP”);
    } catch (e) {
    try {
    xmlHttp = new ActiveXObject(”Microsoft.XMLHTTP”);
    } catch (e) {}
    }
    }
    if (!xmlHttp) { // 异常
    window.alert(”不能创建XMLHttpRequest 对象实例.”);
    return false;
    }

    }
    function processRequest() {
    if (xmlHttp.readyState == 4) {
    if (xmlHttp.status == 200) {
    document.getElementById(”showresult”).innerHTML = xmlHttp.responseText;
    } else {
    alert(”您所请求的页面有异常。”);
    }
    }
    }

    function startRequest(strurl){
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = processRequest;
    xmlHttp.open(”Get”, strurl, true);
    xmlHttp.send(null);
    }
    function showemployeeinfo() {
    var employeeid=document.form1.employeeid.value;
    var temstr=”showmsg.asp?employeeid=” + employeeid;
    document.getElementById(”showresult”).parentNode.style.display = “”;
    document.getElementById(”showresult”).innerHTML = “正在读取数据…”
    startRequest(temstr);
    }

    数据录入部分的HTML代码:

    < form id=”form1″ name=”form1″ method=”post” action=”">
    工号:< input name=”employeeid” type=”text” id=”employeeid” size=”6″ maxlength=”8″ onblur=”javascript:showemployeeinfo();” />
    姓名:< input name=”employeename” type=”text” id=”employeename” size=”8″ maxlength=”8″ onblur=”javascript:showemployeeinfo();” />
    < input type=”submit” name=”Submit” value=”提交” />
    < /form>

    < div id=”showresult”>< /div>

    数据处理程序showmsg.asp的代码:

    Response.Charset=”gb2312″ ‘避免乱码
    EmployeeID=Request.Querystring(”employeeid”)
    ‘这里省略了数据库查询的代码,将职工信息给strEmployeeInfo,然后输出就可以了
    strEmployeeInfo strEmployeeInfo = “职工信息”
    Response.Write strEmployeeInfo

  • Tag:    2006-05-01

      在很多页面中都可能会用到同样的Ajax初始化代码,因此,可以把这部分公共的代码写到一个js文件中, 在某个页面需要调用时,直接调用这个文件就可以了,就不要在每个页面中都加入一段Ajax的初始化代码。这段公用代码如下:

    var xmlHttp;
    function createXMLHttpRequest() {
    xmlHttp = false;
    if(window.XMLHttpRequest) { //Mozilla
    xmlHttp = new XMLHttpRequest();
    if (xmlHttp.overrideMimeType) {
    xmlHttp.overrideMimeType(”text/xml”);
    }
    }
    else if (window.ActiveXObject) { // IE
    try {
    xmlHttp = new ActiveXObject(”Msxml2.XMLHTTP”);
    } catch (e) {
    try {
    xmlHttp = new ActiveXObject(”Microsoft.XMLHTTP”);
    } catch (e) {}
    }
    }
    if (!xmlHttp) { // 异常
    window.alert(”不能创建XMLHttpRequest对象实例.”);
    return false;
    }

    }
    function processRequest() {
    if (xmlHttp.readyState == 4) {
    if (xmlHttp.status == 200) {
    document.getElementById(”showresult”).innerHTML = xmlHttp.responseText;
    } else {
    alert(”您所请求的页面有异常。”);
    }
    }
    }

    function startRequest(strurl){
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = processRequest;
    xmlHttp.open(”Get”, strurl, true);
    xmlHttp.send(null);
    }

    可以将这段代码存为ajaxcommon.js文件,在页
    中需要使用时在标签中引入就可以了,代码如下:

    < language=”JavaScript” type=”text/javascript” src=”http://mryang.blogspot.com/js/ajaxcommon.js”>< /script>

    在使用的页面中用下面的方法来调用:

    function resultshow() {
    var temstr=”showmsg.asp”;
    document.getElementById(”showresult”).parentNode.style.display = “”;
    document.getElementById(”showresult”).innerHTML = “正在读取数据…”;
    startRequest(temstr);
    }

  • Tag:    2006-04-29

    近日在读《程序员修炼之道》一书时,读到这样的故事,很有些意思,故事大概如下:

    三个士兵从战场返回家乡,在路上饿了。他们看见前面有村庄,就来了精神——他们相信村民会给他们一顿饭吃。但当他们到了哪里,去发现门紧锁,窗户也关着。经历了多年战乱,村民们粮食匮乏,并把他们仅有的一点粮食藏了起来。

    士兵们并未气妥,他们开始煮一锅水,小心地把三块石头放进去,吃惊的村民们走出来看望着他们。

    “这是石头汤。”士兵们解释说。“就放石头吗?”村民们问。“一点没错——但有人说加一些胡萝卜味道更好……”一个村民跑开了,又很快带着他储藏的一篮胡萝卜跑回来。
    几分钟之后,村民们又问:“就是这些了吗?”

    “哦,”士兵说:“几个土豆会让汤更实在。”又一个村民跑开了。

    接下来的一小时,士兵们列举了更多让汤更加鲜美的配料:牛肉、韭菜、盐,还有香菜。每次都回又一个不同的村民跑回去搜寻自己的私人储藏品。

    最后他们煮出了一大锅热气腾腾的汤。士兵们拿掉石头,和所有村民一起享用了一顿美餐,这是几个月以来他们所有人第一次吃饱饭。

    看完后,又在Google搜了一下,发现这个故事还有其他的版本,比如有的说是一个乞丐到了一个地主家使用了该方法,有的有说是一群小孩中的一个小孩使用了该方法,不管什么样的版本,故事的大概都查不都,不过我更喜欢这本书上的版本,因为在里面一直都有一种相互合作的氛围,实际上团队软件开发也是这样,团队中需要有个催化剂来提高队员的协作能力,而上面的士兵就充当了这个催化剂,只要团队协作效果好,最后每个人都是赢家。

    当然,每个故事在不同的情形下都有自己不同的寓意,对于读到这则故事的你,得到些收获了吗?

    最后在附上该故事的英文版:
    The Story of Stone Soup

    Once upon a time, somewhere in post-war Eastern Europe, there was a great famine in which people jealously hoarded whatever food they could find, hiding it even from their friends and neighbors. One day a wandering soldier came into a village and began asking questions as if he planned to stay for the night.

    “There’s not a bite to eat in the whole province,” he was told. “Better keep moving on.”

    “Oh, I have everything I need,” he said. “In fact, I was thinking of making some stone soup to share with all of you.” He pulled an iron cauldron from his wagon, filled it with water, and built a fire under it. Then, with great ceremony, he drew an ordinary-looking stone from a velvet bag and dropped it into the water.

    By now, hearing the rumor of food, most of the villagers had come to the square or watched from their windows. As the soldier sniffed the “broth” and licked his lips in anticipation, hunger began to overcome their skepticism.

    “Ahh,” the soldier said to himself rather loudly, “I do like a tasty stone soup. Of course, stone soup with cabbage — that’s hard to beat.”

    Soon a villager approached hesitantly, holding a cabbage he’d retrieved from its hiding place, and added it to the pot. “Capital!” cried the soldier. “You know, I once had stone soup with cabbage and a bit of salt beef as well, and it was fit for a king.”

    The village butcher managed to find some salt beef . . . and so it went, through potatoes, onions, carrots, mushrooms, and so on, until there was indeed a delicious meal for all. The villagers offered the soldier a great deal of money for the magic stone, but he refused to sell and traveled on the next day. The moral is that by working together, with everyone contributing what they can, a greater good is achieved.

  • Tag:    2006-04-17

    XMLHttpRequest对象简介
    XMLHttpRequest对象在我看来是AJax的核心, XMLHttpRequest 是XMLHTTP 组件的对象,通过这个对象,AJAX 可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加 快了响应速度、缩短了用户等待的时间。

    IE5.0 开始,开发人员可以在Web 页面内部使用XMLHTTP ActiveX 组件扩展自身的功能,不用从当前的Web 页面导航就可以直接传输数据到服务器或者从服务器接收数据。,Mozilla1.0 以及NetScape7 则是创建继承XML 的代理类XMLHttpRequest;对于大多数情况,XMLHttpRequest 对象和XMLHTTP 组件很相似,方法和属性类似,只是部分属性不同。

    XMLHttpRequest对象的方法:

    XMLHttpRequest对象的属性:

    AJAX开发步骤(框架)
    AJAX 实质上也是遵循Request/Server 模式,所以这个框架基本的流程也是:对象初始化->发送请求->服务器接收->服务器返回->客户端接收->修改客户端页面内容。只不过这个过程是异步的。

    A、初始化对象并发出XMLHttpRequest 请求
    为了让Javascript 可以向服务器发送HTTP 请求,必须使用XMLHttpRequest 对象。使用之前,要先将XMLHttpRequest 对象实例化。之前说过,各个浏览器对这个实例化过程实现不同。IE 以ActiveX 控件的形式提供,而Mozilla 等浏览器则直接以XMLHttpRequest 类的形式提供。为了让编写的程序能够跨浏览器运行,要这样写:

    if (window.XMLHttpRequest) { // Mozilla, Safari, …
    http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject(”Microsoft.XMLHTTP”);
    }

    有些版本的Mozilla 浏览器处理服务器返回的未包含XML mime-type 头部信息的内容时会出错。因此,要确保返回的内容包含text/xml 信息。

    http_request = new XMLHttpRequest();
    http_request.overrideMimeType(’text/xml’);


    B、指定响应处理函数

    接下来要指定当服务器返回信息时客户端的处理方式。只要将相应的处理函数名称赋给XMLHttpRequest 对象的onreadystatechange 属性就可以了。比如:

    http_request.onreadystatechange = processRequest;

    需要指出的时,这个函数名称不加括号,不指定参数。也可以用Javascript 即时定义函数的方式定义响应函数。比如:

    http_request.onreadystatechange = function() {};

    C、发出HTTP 请求
    指定响应处理函数之后, 就可以向服务器发出HTTP 请求了。这一步调用XMLHttpRequest 对象的open 和send 方法。

    http_request.open(’GET’, ‘http://www.example.org/some.file’, true);
    http_request.send(null);

    open 的第一个参数是HTTP 请求的方法,为Get、Post 或者Head。
    open 的第二个参数是目标URL。基于安全考虑,这个URL 只能是同网域的,否则会提示“没有权限”的错误。这个URL 可以是任何的URL,包括需要服务器解释执行的页面,不仅仅是静态页面。目标URL 处理请求XMLHttpRequest 请求则跟处理普通的HTTP 请求一样,比如JSP 可以用request.getParameter(“”)或者request.getAttribute(“”)来取得URL 参数值。
    open 的第三个参数只是指定在等待服务器返回信息的时间内是否继续执行下面的代码。如果为True,则不会继续执行,直到服务器返回信息。默认为True。
    按照顺序,open 调用完毕之后要调用send 方法。send 的参数如果是以Post 方式发出的话,可以是任何想传给服务器的内容。不过,跟form 一样,如果要传文件或者Post 内容给服务器,必须先调用setRequestHeader 方法,修改MIME 类别。如下:

    http_request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);

    D、处理服务器返回的信息
    在第二步我们已经指定了响应处理函数,这一步,来看看这个响应处理函数都应该做什么。
    首先,它要检查XMLHttpRequest 对象的readyState 值,判断请求目前的状态。参照前文的属性表可以知道,readyState 值为4 的时候,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下:

    if (http_request.readyState == 4) {
    // 信息已经返回,可以开始处理
    } else {
    // 信息还没有返回,等待
    }

    服务器返回信息后,还需要判断返回的HTTP状态码,确定返回的页面没有错误。所有的状态码都可以在W3C的官方网站上查到。其中,200 代表页面正常。

    if (http_request.status == 200) {
    // 页面正常,可以开始处理信息
    } else {
    // 页面有问题
    }

    XMLHttpRequest 对成功返回的信息有两种处理方式:
    responseText:将传回的信息当字符串使用;
    responseXML:将传回的信息当XML 文档使用,可以用DOM 处理。
    E、一个初步的开发框架
    总结上面的步骤,我们整理出一个初步的可用的开发框架,供以后调用;这里,将服务器返回的信息用window.alert 以字符串的形式显示出来:

    < script language=”javascript”>
    var http_request = false;
    function send_request(url) {//初始化、指定处理函数、发送请求的函数
    http_request = false;
    //开始初始化XMLHttpRequest 对象
    if(window.XMLHttpRequest) { //Mozilla 浏览器
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {//设置MiME 类别
    http_request.overrideMimeType(”text/xml”);
    }
    }
    else if (window.ActiveXObject) { // IE 浏览器
    try {
    http_request = new ActiveXObject(”Msxml2.XMLHTTP”);
    } catch (e) {
    try {
    http_request = new ActiveXObject(”Microsoft.XMLHTTP”);
    } catch (e) {}
    }
    }
    if (!http_request) { // 异常,创建对象实例失败
    window.alert(”不能创建XMLHttpRequest 对象实例.”);
    return false;
    }
    http_request.onreadystatechange = processRequest;
    // 确定发送请求的方式和URL 以及是否同步执行下段代码
    http_request.open(”GET”, url, true);
    http_request.send(null);
    }
    // 处理返回信息的函数
    function processRequest() {
    if (http_request.readyState == 4) { // 判断对象状态
    if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
    alert(http_request.responseText);
    } else { //页面不正常
    alert(”您所请求的页面有异常。”);
    }
    }
    }
    < /script>