Posts Tagged ‘475’

PHP 操作 HTML/XML 的类库:QueryPath

星期三, 09月 1st, 2010

    毫无疑问,HTML、HTTP 和 XML 是支撑 Web 技术的三种最重要的技术。对于 PHP 开发人员而言,使用这些技术可能比较麻烦。但是,新的 QueryPath 库,即 jQuery JavaScript 库面向 PHP 的一个版本,为使用 XML、HTML 和 HTTP 提供了一个方便的 API。从 Web 页面到 Web 服务、从 SVG 到 SPARQL、从 RDF 到 Atom,QueryPath 为目前使用 PHP 的 Web 开发提供了一个健壮而简单的 API。

    为了提供简单性,QueryPath 使用一种简洁的语法。方法名称简短地表示出它们所做的事情(例如,text()、append()、 remove())。由于大多数方法返回一个 QueryPath 对象,因此方法调用是可链接的(chainable),也就是说,可以在一个语句中依次调用多个方法。 这一惯例有时被称作连续接口(fluent interface)。为了让 JavaScript 开发人员感到熟悉,QueryPath 实现了大部分的 jQuery 遍历和操纵函数和行为。

    为了具有健壮性,QueryPath 提供了为解决装载、搜索、读写 XML 和 HTML 内容等典型用例而设计的工具。但是,无论库有多大,一种通用的 API 无法满足所有的要求。为解决这个问题,QueryPath 提供一种扩展机制,以便为 QueryPath 添加新的方法。QueryPath 还包括用于添加数据库支持、模板支持和附加的 XML 特性的扩展。

    您也许有疑问:“为什么还是 XML 或 HTML 工具?PHP V5 已经有一些 XML 工具,包括一个 Document Object Model(DOM)实现和 SimpleXML 库。为什么还有增加一个?”答案很简单:QueryPath 被设计为一种通用的工具。而 DOM API 比较复杂和麻烦。它的面向对象模型也许很强大,但即使最简单的任务都需要编写很多行代码。另一方面,SimpleXML 对于很多编程任务而言又过于简单。除非 XML 是完全可预测的,否则导航一个 SimpleXML 文档绝不简单。

    QueryPath 试图在 DOM 的丰富性与 SimpleXML 的简单性之间找到一个最佳结合点。

    QueryPath 是一个纯 PHP 库。要使用它,只需从官方 Web 站点 下载 它,并将它添加到 PHP 库路径中。

    QueryPath 对系统的要求很低。只要启用 DOM 扩展,它就可以在 PHP V5 上工作。PHP V5 的大多数发行版都可以满足这个需求。QueryPath 不支持早已被弃用的 PHP V4。

    重要的 QueryPath 遍历方法:

query_path1.gif

    示例代码:

    <?php
    require 'QueryPath/QueryPath.php';
    $xml = '<?xml version="1.0"?><root><child id="one"/>
        <child id="two"/><child id="three"/><ignore/></root>';
    $qp = qp($xml, 'root')->children();
    print $qp->size();
    ?>

滚动条触发的内容动态加载效果

星期一, 07月 26th, 2010

    效果介绍文章:分页加载数据效果的新颖改进:
    http://blog.why100000.com/?p=823

    技术细节:jQuery 的 Div 标签滚动条属性及判断垂直滚动条是否到达底部:
    http://blog.why100000.com/?p=843

    开发环境:jQuery1.4.2,Ajax,PHP5.2.5。
    测试环境:IE7、IE8、FF3.6.2

    效果:
    页面打开时,加载了一些初始内容。
    下拉滚动条,到底部时触发事件,从 Web 服务器后台实时下载内容,添加到页面的底部。

    效果演示:http://www.why100000.com/test/scrolldown/scrolldown.htm
    需要代码及资料的,发邮件到:9365822@QQ.com

测试 html 中 disabled 后的 form 元素的取值

星期日, 07月 11th, 2010

      <form action="getval.asp">
      <input name=v1 value="mmm"><br>
      <input name=v2 value="mmm" disabled><br><br>

      <input type="radio" name="b1" value="true">是  
      <input type="radio" name="b1" value="false" checked>否<br><br>

      <input type="radio" name="b2" value="true" disabled>是  
      <input type="radio" name="b2" value="false" checked disabled>否<br><br>

      <select name="sel1" disabled>
       <option value="1">selest1
       <option value="2">selest2
       <option value="3">selest3
       <option value="4">selest4
      </select>
      <br>

      <input type=submit>
    </form>

    //使用ASP编写后台代码,getval.asp 文件的内容:
    <%
      response.write "v1=" & request("v1") & "<br>"
      response.write "v2=" & request("v2") & "<br>"

      response.write "b1=" & request("b1") & "<br>"
      response.write "b2=" & request("b2") & "<br>"

      response.write "sel1=" & request("sel1") & "<br>"
    %>

    测试结论:disabled 后,form 元素传输的值为空字符串。

    ---“十万个为什么”电脑学习网-http://www.why100000.com-原创文章
    张庆(网眼)2007-10-4

把图片转换为Html代码的PHP脚本程序

星期日, 06月 27th, 2010

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="x-ua-compatible" content="ie=7">
<title>Ascii</title>
<style>
body
{
  line-height:1px;
  font-size:1px;
}
</style>
</head>
<body>
<?php
function getext($filename)
{
  $pos = strrpos($filename,'.');
  $str = substr($filename, $pos);
  return $str;
}
if(!isset($_POST['submit'])){
?>
  <form action="<?= $_SERVER['PHP_SELF'];?>" method="post">
  <font style="font-size:12px;line-height:20px;">JPG image URL: </font><br>
  <input type="text" name="image"><br>
  <input type="submit" name="submit" value="Create">
  </form>
<?
}
else
{
  $image = $_POST['image'];
  $ext = getext($image);
  if($ext == ".jpg")
    $img = ImageCreateFromJpeg($image);
  else
    echo 'Wrong File Type';

  $width = imagesx($img);
  $height = imagesy($img);

  for($h=0;$h<$height;$h++)
  {
    for($w=0;$w<=$width;$w++)
    {
      $rgb = ImageColorAt($img, $w, $h);
      $r = ($rgb >> 16) & 0xFF;
      $g = ($rgb >> 8) & 0xFF;
      $b = $rgb & 0xFF;
      if($w == $width)
        echo '<br>';
      else
        echo '<span style="color:rgb('.$r.','.$g.','.$b.');">#</span>';
    }
    echo "\n";
  }
}
?>
</body>
</html>

Firefox 的 HTML 注释 Bug

星期二, 01月 19th, 2010

    HTML 的注释应该这样写:<!- - ...... - ->

    在 Firefox(包括版本2、3)中,HTML注释“......”中不能出现连续两个减号“--”,否则会导致接下来的内容在浏览器界面中暴露出来。例如:

    <!- -
    - -
    这段文字会暴露
    - ->

    其实还会导致其它一些莫名其妙的现象。而其它浏览器都是正常的。在做 FF 兼容测试时要注意了,如果认为HTML代码确实是正确的,就看看是不是注释产生了影响。

    但严格地说,其实也不是Firefox的bug,因为HTML4标准中已经明确规定不能这样写了:
    http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.4

    所以Firefox就是死不承认这是它的bug。

    在HTML5中也认为这样写是错误的:
    http://www.w3.org/html/wg/html5/#comments

    但是HTML5中明确了,浏览器对于这种错误的处理是要忽略的:
    http://www.w3.org/html/wg/html5/#bogus

    所以将来最终还会是Firefox的bug。

一个小错误,消耗4小时

星期四, 11月 5th, 2009

    一个网页页面模版,头部代码如下:

    <html>
    <head>
    <title>新楼盘管理</title>
    <meta http-equiv="Content-Type" content="text/html; charset={$charset}">
    <link href="styles/style.css" rel="stylesheet">
    <script language="javascript" src="scripts/common.js"></script>
    <script type="text/javascript" src="scripts/jquery/jquery.js"></script>
    </head>
    <body topmargin="0" leftmargin="0" >
     ……

    其中{$charset}是模版中的变量,被赋值为“utf-8”,页面也保存为 utf8 编码。

    其中“新楼盘管理”的 title 原来是没有这串字符的,我顺手就加上了。但是:出问题了!

    一定有人说,加个title能出什么问题?!

    出问题的现象是这样的,页面下载下来了,但显示是空白。能看到源代码,但浏览器就是显示不了页面的界面!

    测试了IE各种浏览器,也测试了Firefox浏览器。结果是:
    在 Apache 做服务器时无论什么浏览器都正常。
    Firefox浏览什么web服务器上的该页面,都正常!
    IE的部分版本完全正常,部分版本偶尔正常、偶尔不正常!

    最感到奇怪的就是,部分IE偶尔正常、偶尔不正常!也就是故障现象不确定,无法复制故障的环境,也就无法跟踪故障。一度怀疑浏览器版本问题,一度怀疑是 IIS 不稳定的问题(差点又把屎盆子扣到微软头上了)。

    但结果问题是:网页的编码问题。

    由于之前 titlt 标签内是空的,charset=tuf-8 就从该语句后起作用了,但加了标题字符串后,页面就不知道如何解释标题的编码了。但为什么在 Apache 下却是正常的呢?估计 Apache 解释页面时,是首先解释语句
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    然后,再把这个编码应用到整个页面,而 IIS 却是顺序解释页面的代码的。

    为什么有的浏览器正常,有的又不正常呢?原因可能也和代码的解释顺序有关。

    所以,为了兼顾各种情况,语句调整一下顺序,把定义编码的语句放到最前头即可。

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset={$charset}">
    <title>新楼盘管理</title>
    ……

    事实上,用 Drameweaver 建立页面,定义编码的语句本身就是在最前头的,还是软件工具兼容性做的最好。

Google 首页代码分析及评价

星期日, 09月 21st, 2008

    Google.cn 首页界面简洁,尤其是中下部“视频”“图片”“生活”等小图标的动画效果还很炫目。

toolbar_animation_20080807.png

toolbar_animation_20080807.pngtoolbar_animation_20080807.png
    几乎天天打开 google.cn 页面,有没有想到看看这个页面的 Html 代码是什么样子?当试图分析其 Html 代码时会发现,虽然页面看起来简单,但代码并不是想像的那么简单!

    分析其代码发现:

    以<Div>和表格混合布局,并不是所谓的纯粹的 XHTML <Div>+CSS “Web标准”布局;

    <script> 也不加 language="javascript";

    标签的属性也不用 "" 或 '' 括起来。

    使用 Javascript 的比较生僻的语句形式,比如 window.google = {kEI:"oCDVSLaCH4vu6gOGmLm0CA",kEXPI:"17259,17735",kHL:"zh-CN"}

    Javascript 代码写的晦涩难懂,变量用单个字母表示,意义不明确,是为了显示技巧高超,还是为了“保密”?

    “视频”“图片”……等地方的效果不是用 Html 代码构建,而是用纯粹的 js 代码构造,不知道是手工写的,还是用什么工具完成的?

    本人把“很炫目”那部分的代码扣了下来,效果还在,但还是 js 脚本的形式,想进一步分析的可以继续。

    其实“很炫目”的那个效果并没用很玄的编程技巧,无非就是把类似动画帧的几个图片按时间顺序分别显示了一下,做出了动感的效果。大家看一下图片就知道了。但具体怎么实现还要看代码。

    这段代码还有值得学习的地方,例如判断浏览器类型的代码就很不错,毕竟是 Google 的东西嘛,不但搜索引擎世界第一,而且以玩 Javascript 而闻名于世。

    Google.htm 文件代码:

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Google</title>
  <script>  //Google 的代码,也不加 language="javascript"呀
    //window.google = {kEI:"oCDVSLaCH4vu6gOGmLm0CA",kEXPI:"17259,17735",kHL:"zh-CN"};
    //以上代码是 Google 原来的代码,作用是建立一个对象。相当于以下4句代码:
    google = new Object;
    google.kEI="oCDVSLaCH4vu6gOGmLm0CA";
    google.kEXPI="17259,17735";
    google.kHL="zh-CN";
  </script>
</head>

<body bgcolor=#ffffff text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 topmargin=3 marginheight=3>
<center>
  <div id="tb"></div>
</center>
</body>
<script>
  google.y={first:[]};
  window.setTimeout(  //在这里加载 wt_QGEYUfoQ.js 脚本文件
    function()
    {
      var xjs=document.createElement('script');
      xjs.src='wt_QGEYUfoQ.js';
      document.getElementsByTagName('head')[0].appendChild(xjs);
    }, 0);

  /*google.y.first.push(
    function()
    {
      google.ac.i(document.f,document.f.q,'','');
    }
  )*/
  google.xjs_ready=1;
</script>

</html>

    wt_QGEYUfoQ.js脚本代码:

(
  function()
  {
    var e=navigator.userAgent.toLowerCase();
    google.isOpera=e.indexOf("opera")!=-1;
    google.isIE=document.all&&e.indexOf("msie")!=-1&&!google.isOpera;google.isSafari=e.indexOf("safari")!=-1;
    //google.time=function(){return(new Date).getTime()};
    //google.log=function(a,b){(new Image).src="/gen_204?atyp=i&ct=" mce_src="/gen_204?atyp=i&ct="+a+"&cad="+b+"&zx="+google.time()};
    //google.xhr=function(){var a=null;if(window.XMLHttpRequest)try{a=new XMLHttpRequest}catch(b){}else if(window.ActiveXObject)for(var d=0,c;c=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"][d++];)try{a=new ActiveXObject(c);break}catch(b){}return a};
    window.google.bind=function(a,b,d)
      {
        var c="on"+b;
        if(a.addEventListener)
          a.addEventListener(b,d,false);
        else
          if(a.attachEvent)
            a.attachEvent(c,d);
          else
          {
            var h=a[c];
            a[c]=function()
              {
                var f=h.apply(this,arguments),g=d.apply(this,arguments);
                return f==undefined?g:(g==undefined?f:g&&f)
               }
           }
       };
  }
)();

(
  function()
  {
    var k="images/toolbar_animation_20080807.png",l=52,m=37,n=75,o=100;
    function p(d,c,b,a,e)
    {
      return{url:d,name:c,tooltip:b,color:a,yAdjust:e}
    }
    var q=[p("http://video.google.cn/","<font size=-1>\u89c6\u9891</font>","\u641c\u7d22\u70ed\u95e8\u7f51\u7edc\u89c6\u9891","#54a70d",[2,5]),p("http://images.google.cn/","<font size=-1>\u56fe\u7247</font>","\u641c\u7d22\u5168\u7403\u7684\u56fe\u7247","#3b79e7",[2,5]),p("http://shenghuo.google.cn/","<font size=-1>\u751f\u6d3b</font>","\u641c\u7d22\u60a8\u8eab\u8fb9\u7684\u5206\u7c7b\u751f\u6d3b\u4fe1\u606f",
           "#96cfec",[3,7]),p("http://ditu.google.cn/","<font size=-1>\u5730\u56fe</font>","\u67e5\u8be2\u5730\u5740\u3001\u635c\u7d22\u5468\u8fb9\u548c\u89c4\u5212\u8def\u7ebf","#e8d40f",[4,9]),p("http://finance.google.cn/","<font size=-1>\u8d22\u7ecf</font>","\u5546\u4e1a\u4fe1\u606f\u3001\u8d22\u7ecf\u65b0\u95fb\u3001\u5b9e\u65f6\u80a1\u4ef7\u548c\u52a8\u6001\u56fe\u8868","#ea504c",[3,7]),p("http://translate.google.cn/translate_t?hl=zh-CN","<font size=-1>\u7ffb\u8bd1</font>","\u5728\u7ebf\u7ffb\u8bd1\u5916\u6587\u6bb5\u843d\u3001\u7f51\u9875\u3001\u641c\u7d22\u7ed3\u679c",
           "#54a70d",[2,5]),p("http://daohang.google.cn/","<font size=-1>\u7f51\u7ad9\u5bfc\u822a</font>","\u7f51\u5740\u5927\u5168\uff0c\u5feb\u901f\u76f4\u8fbe\u5e38\u7528\u7f51\u7ad9","#d93c08",[2,5])],
        r=[];

    function s(d,c)
    {while(c&&d!=c)c=c.parentNode;return c==d}

    function u(d,c)
    { return function(b)
      { b=b||window.event;
        var a=r[c],e=d=="mouseover",g=b.target||b.srcElement,f=b.relatedTarget||(e?b.fromElement:b.toElement),h=!f||s(a.element,f),i=s(a.element,g);
        if(e&&!h||!e&&(!f||i&&!h))
        { var j=a.icon;
          j.mouseTimeout=window.clearTimeout(j.mouseTimeout);
          var t=e?1:-1;
          if(j.b!=t)
            j.mouseTimeout=window.setTimeout(j.e(t,undefined),e?o/3:o)
        }
      }
    }

    function v(d,c,b)
    {google.bind(d,c,u(c,b))}

    function w(d,c,b)
    { this.c=d;
      var a=document.createElement("div"),e=d.color,g="background-color:"+e,f="width:1px;height:1px;"+g+";float:",h='<div style="height:1px;overflow:hidden"><div style="'+f+'left"></div><div style="'+f+'right"></div></div>',i="margin:0 1px;height:1px;overflow:hidden;"+g;a.innerHTML='<div style="display:none;position:absolute;top:0;left:0;z-index:2;background:#fff;cursor:pointer;cursor:hand"><a href="'+
          c+'" style="color:#444;text-decoration:none" target=_blank><div style="'+i+'"></div><div style="text-align:center;border-left:1px solid;border-right:1px solid;border-color:'+e+'">'+h+'<div style="margin:0 auto;white-space:nowrap;padding:.2em 0 0"><font size=-1><span>'+b+"</span></font></div>"+h+'</div><div style="'+i+'"></div><div style="height:4px" align="center"><div style="position:relative;top:-1px;z-index:3;width:8px;overflow:hidden;margin:0 auto;height:4px;background:no-repeat -260px '+-d.spriteCoordinateList[0].y+
         'px"></div></div></a></div>';
      this.h=a.getElementsByTagName("span")[0];
      document.body.appendChild(a);a.firstChild.firstChild.lastChild.firstChild.style.backgroundImage="url("+k+")";this.element=a.firstChild;var j=r.length;r.push({icon:d,element:this.element});v(this.element,"mouseover",j);v(this.element,"mouseout",j)}w.prototype.play=function(d){var c=this.c.element.firstChild,b={left:-c.offsetLeft,top:0};
      while(c)
      { b.left+=c.offsetLeft;
        b.top+=c.offsetTop;
        c=c.offsetParent
      }
      var a=this.element.style;
      if(a.display=="none")
      { a.visibility="hidden";a.display="block"}
      var e=this.element.offsetHeight,g=this.h.offsetWidth+14;
      if(a.visibility=="hidden")
      { a.display="none";
        a.visibility="visible"
      }
      a.width=g+"px";
      b.left-=(g-this.c.element.parentNode.offsetWidth)/2;
      b.top-=e-3;
      b.top+=20*Math.pow(1-d/this.c.frames,3);
      a.left=b.left+"px";
      a.top=b.top+"px";
      if(d==0||this.c.b<0)
        a.display="none";
      else
      { a.display="";
        var f=d/this.c.frames;
        if("opacity"in a)
          a.opacity=f;
        else
          if("MozOpacity"in a)
            a.MozOpacity=f;
          else
            if("KhtmlOpacity"in a)
              a.KhtmlOpacity=f;
            else
              if("filter"in a)
                a.filter="alpha(opacity="+f*100+")"
      }
    };

    function x(d,c,b,a,e)
    { this.element=d;
      this.mouseTimeout=null;
      this.frames=c.length-1;
      this.spriteCoordinateList=c;
      this.color=b;this.d=null;
      this.g=d.getElementsByTagName("div")[1];
      this.i=new w(this,a,e);
      this.b=-1;
      this.a=1;
      var g=r.length;
      r.push({icon:this,element:d});
      v(d,"mouseover",g);
      v(d,"mouseout",g)
    }

    x.prototype.e=function(d,c)
      { var b=this;
        return function(){ b.f(d,c)}
      };

    x.prototype.f=function(d,c)
      { if(d)
        { this.b=d;this.mouseTimeout=window.clearTimeout(this.mouseTimeout);
          this.d=window.clearTimeout(this.d)
        }
        typeof c!="undefined"&&(this.a=c);
        var b=this.spriteCoordinateList[this.a];
        this.g.style.backgroundPosition=-b.x+"px "+-b.y+"px";
        this.i.play(this.a);
        var a=this.element.getElementsByTagName("font")[0].style;
        if(this.b<0)
        { a.color="#444";
          a.textDecoration="none"
        }
        else
        { a.color=this.color;
          a.textDecoration="underline"
        }
        this.a+=this.b;
        if(this.a>this.frames)
          this.a=this.frames-1;
        else
          if(this.a<0)
            this.a=1;
          else
            this.d=window.setTimeout(this.e(undefined,undefined),n)
      };

    google.y.first.push(function()
      {
        try{document.execCommand("BackgroundImageCache",false,true)}
        catch(d){}
        var c='<table style="margin:2em auto;border-collapse:collapse;line-height:1.4em" cellpadding="3" cellspacing="2" border="0"><tr>';for(var b=0;b<q.length;++b){var a=q[b];a.url="/url?ct=pro&cd="+b+"&source=cwh&q="+encodeURIComponent(a.url);var e=[],g=m*b;for(var f=0;f<7;++f)if(f>4)e.push({x:l*4,y:g-a.yAdjust[f-5]});else e.push({x:l*f,y:g});a.coordinates=e;c+='<td valign=bottom style="text-align:center;padding:0 .35em 0 .4em;margin:0;cursor:pointer;cursor:hand"><a style="color:#444;text-decoration:none;vertical-align:bottom" href="'+
              a.url+'" target=_blank><div><div style="width:52px;height:37px;margin:.5em auto;cursor:pointer;cursor:hand;background:no-repeat 0 '+-g+'px"></div><span style="white-space:nowrap">'+a.name+"</span></div></a></td>"}c+="</tr></table>";
        var h=document.getElementById("tb");
        h.innerHTML=c;
        var i=h.getElementsByTagName("a");
        for(var b=0;b<i.length;++b)
        { i[b].firstChild.firstChild.style.backgroundImage="url("+k+")";
          new x(i[b],q[b].coordinates,q[b].color,q[b].url,q[b].tooltip)
        }
      }
    );
  }
)();

  google.doFirst=function()
    { if(!google.xjs_ready)
        window.setTimeout(google.doFirst,10);
      else
      { if(google.y.first)
        { for(var a=0,b;b=google.y.first[a];++a)
            b();
          delete google.y.first
        }
        for(var a in google.y)
          google.y[a][1]?google.y[a][1].apply(google.y[a][0]):google.y[a][0].go();
        google.x=function(d,c)
          { c&&c.apply(d);
            return false
          }
      }
    };

  google.doFirst();

我用过的计算机语言及其开发环境

星期六, 09月 13th, 2008

    gwbasic:学计算机的入门语言。解释执行。语句前有行号,便于排序和执行跳转(goto)语句。好像只有 18 条核心语句。

    turbo basic:Borlan 公司出的编程IDE,可以把basic程序编译成 exe 可执行文件。当年获得的是 1.0 版本,兴奋得在学校的操场上转了半夜。

    quick basic:一种改进的 basic 版本,是现在的 VB 的前身。

    Qbasic:quick basic 的简化版,随 MS-DOS5.0 以后的版本一起发行。

    fortran:一种擅长科学计算的语言(fortran 是 formula translation 的缩写),比 basic 还古老。当年为参加计算机二级考试时学过。

    C:C语言在我心中就像计算机语言的圣经。一个永葆青春的语言。是自己用谭浩强老师的那本著名的教程自学的,至今受用匪浅。C 语言开发过 Unix 操作系统,还是 Windows 下最早的编程语言。C++ 的圣殿其实是构筑在 C 语言的基础上的。当前学习 C 的时候用的是 borlan 的 Turbo C 开发环境。

    MASM(宏汇编):学计算机原理前必须懂的语言,可以理解为计算机机器语言的符号表示。当年为了学习DOS是怎么启动和加载的,曾经狂热追捧的语言。据说求伯君当前写打印机通用驱动程序和 WPS 用的就是纯汇编语言。

    turbo pascal:与 turbo basic 和 turbo C 是一个系列软件。原来学过 pascal 版数据结构的学生差不多用的都是这个 IDE。

    cobel:当年是数据处理的首选语言,财院的研究生就在学这个。本人仅仅是了解,写过程序,但从来没在机上调试过。

    dbase:当年数据库处理语言的“大哥大”,简直就是数据库的别名。最著名的是 dBaseII版本。许多工资系统就是用它开发的。有自己的一套数据库操作语句,不同于现在的标准 SQL 语言。一个“数据库”就是一个文件(.dbf),和现在数据库系统的“表”的概念是一样的。

    foxbase:dbase 的进化版本,与 dbase 大同小异。

    foxpro for DOS:foxbase 的进化版本,是微软收购后进一步开发的产品,已经与 foxbase 有很大的差别,是微软点石成金的典型案例。已经内置支持标准 SQL 语句的功能。

    foxpro for windows:foxpro 的 Windows 版本,数据处理语法没有多大变化,但支持类似 Windows 的图形界面了。

    visual foxpro:开始有了“表”的概念。是 foxpro 在 windows 下的真正的可视化开发环境,能建造真正的 Windows 下的数据库应用软件。vf6.0 是最成熟和应用最多的版本。现在基本没落了,但仍有高校用它给学生教授“数据库”知识,误人子弟。

    VB:第一个简单和快速开发 Windows 程序的语言,6.0是其最成熟的版本。与现在的 VB.NET 基本语法近似,但还是有较大的差别。因为爱好者太多,现在已经在被大多数公司所抛弃。

    PB:是数据库生产厂家 sybase 的产品,试图在 Windows 下复制当年 dBase 的辉煌,但仅仅辉煌过几年。现在书店里 PB 的书不少,但已经很少见公司用它开发东西了。

    VC++:微软的面向对象的开发语言和环境。6.0是其最成熟的版本。现在的 VC++.NET 用的人并不多。

    vbscript:VB 的简化版,作为脚本语言,是 asp 开发环境的默认语言。也可以和 javascript 一样在浏览器端使用,但现在用的人不多。

    javascript:网景公司(Netscape)为浏览器开发的一种嵌入式动态脚本语言。网景公司的浏览器 Netscape 被微软的 IE 挤垮了,但其 Javascript 却顽强的生存了下来,算是网景公司对互联网的一大贡献。而微软公司自己的 vbscript 在浏览器端却莫名其妙的很少有人问津了。好在对手 Netscape 已经倒下了,vbscript 已经没有存在的意义了。

    html:超文本标记语言,写网页用的。搞互联网的人人皆知。

    css;层叠式样式表。用来修饰 html 的。

    perl:曾经是写 CGI 的流行语言,跨平台(Unix/Linux/Windows),特长是处理字符串,但很快被 vbscript 和 PHP 等语言所取代。

    php:跨平台的 Web 后台开发语言,开源产品,从 C 和 Perl 吸收了许多语法特性,简单和容易上手。与 Apache 和 mySQL 结合紧密。近几年来发展迅速,是 asp 的取代产品。行业人才需求旺盛,但学习者积累比较慢。

    java:1990年代中期出现在人们的视野,当时号称要做成一个“网络操作系统”,但以失败而告终。后来摇身一变,借助其虚拟机概念,成为一种跨平台的、风靡IT界的开发语言。害得微软仓促应战,推出其 .NET 战略,ASP.NET 就是 Windows 操作系统上的 Java 平台,但其开发语言却有 C# 和 VB.NET 等等。但 Java 已经走在前边,现在独占鳌头。

    Delphi:号称是“VB杀手”,事实上它做到了。用过 Delphi 的人都会爱不释手。我就是在接触 Delphi 后彻底抛弃 VB 的。对于系统开发和数据库开发都很擅长,可能还是 PB 流行不起来的一个重要原因。但由于 Borland 公司那些技术官僚的瞎指挥和在 .NET 时代的频频失误,Delphi 被推入了万劫不复的深渊。尽管现在被 Borland 卖掉的公司还在开发 Delphi2009(和 C++bulder2009),但其没落已经是势不可当。一个时代结束了。注意 Delphi 最早是一种开发环境(RAD),其语言是 Object Pascal,后来叫着叫着就把 Delphi 当作一种语言了,后来就正式称 Delphi 为一种语言。

    xml:一种标记语言,用来描述信息用的。我用的比较多的是数据交换和表示软件配置信息,还有就是生成 RSS 文档。

    xsl:用来对 xml 数据进行样式格式化的,可以实现数据和呈现的分离,做页面很不做。但是可能因为太复杂,流行没几天就慢慢淡化了。

    C#:是微软为其 .NET 战略大力打造的一种新型的完全面向对象的语言,可以同时开发 Winform 和 Webform 应用程序。C# 吸收了 C++ 和 Java 的许多优点,摈弃了它们的许多不足,比如没有 C/C++ 语言中的指针的概念等,我个人认为这是目前最规范、最先进的一种语言。可以作为初学者入门,也可以依此描述数据结构。

    我知道的其他语言:

    Borland C++:进入 Windows 时代后,Borland 公司的一款 C++ 开发产品,曾风靡一时,但很快被 VC++ 取代。
    lisp:人工智能语言。
    kylix:麒麟。Borland 公司雄心勃勃的 Delphi for Linux 版本。失败的产品,已经被扫进计算机语言历史的垃圾堆了。
    C++ builder:Borland 公司的 C++ 语言产品,基于 Delphi 的 VCL 架构开发,曾经好像很流行,但终于没有很流行。据说 borland 公司和微软当年有一个约定,borland 公司不涉足 Basic 语言,而微软不涉足 Pascal 语言。Basic 语言是比尔.盖茨的发迹语言。但它们都有 C/C++ 的产品。
    VB.NET:ASP.NET 下的开发语言的一种。
    VC++.NET:ASP.NET 下的开发语言的一种。但是因为有了 C#,就不知道用 VC++.NET 来干啥了。
    J++/J#:微软曾经为对抗 java 而开发的“Java for Windows”,可能连微软自己都不曾认为它还是一种计算机语言。
    F#:传说是一种语言,但没人知道它到底是什么。

    我认为以后可能长期存在的几种主流语言:
    Java,C#,C/C++,PHP

    曾经和正在用的主要语言:
    foxpro,VB,html,css,javascript,Delphi,C#,java,php

    可能即将接触的语言:
    ruby on rail:简称 ROR。新型动态语言,前途未卜。玩玩可以,但现在还不能靠它吃饭。
    python:同 ROR。
   
    作者:张庆(网眼)
    更多文章:http://blog.why100000.com
    2008-9-13