Archive for October, 2005

Parasoft 的自动化测试工具

2005-10-25 20:12 | by 2ndboy

  今天早晨 PM 要求去参加一个 C++ 的培训,到了一听,原来是两个 Parasoft 的台湾工程师给我们做他们的产品培训,有关自动化测试的。开始一段有点像广告,后来基本搞明白了,原来公司打算采购 Parasoft 的 UnitTest 工具,今年都在强调 Quality,这应该也算是具体举措之一吧。

  后半程都是在讲他们的 C++ 测试工具——C++Test 的,细听之下觉得这个产品还是比较强的,至少是在白盒测试这方面,尤其是机器的代码分析和自动的测试用例生成给我留下的印象比较深!这个工具的基本思路就是用程序去分析 Source Code,在分析时应用他们预制或自己编写的各种 Rule。Rule 的编写采用两种方式,一种是将 Source Code 看作字符流,用正则表达式进行模式匹配;另外一种是用语法分析器对代码进行分析,将代码解析成若干 Node 后再应用 Rule。为此还专门提供了 Rule Editor,从 Demo 来看可以把 Rule 设定的非常复杂。比较有意思的是在 build-in rules 里面已经预制了 Effective C++ 和 More Effective C++ 的规则,不用翻着书去查了,就算自己去查,代码一多也查不过来呀。

  这次讲的都是 GUI 的工具,据说他们还有 Command Line 的工具,可以应用同样的 Rule 来 Test,这样在 Night Build 的时候就可以用 Script 来调用做自动化测试了。他们还有独立的 Memory Leak 检查工具,这次没有做 Demo,不知道跟 BoundsChecker 比较起来有什么特别的优势?

  虽然按 PM 的要求 QA 也来参加了,但我觉得 Parasoft 的解决方案是不适合 QA 的,我觉得他们解决方案是定位于 Programmer 做 UnitTest 用的。

  两位台湾工程师大概久在内地做培训了,过程中没有讲台湾通用的“程式”,但量词仍旧用的是“一支程序”,还有“呼叫”某个函数、不够“精进”……术语的不同无可厚非,只是听着挺有意思的:-)尤其是口音,虽然其中的一个是浑厚的男低音,但听他讲起话来还是软绵绵的^_^

开始关注 Ruby 了

2005-10-22 22:05 | by 2ndboy

  之前因为想在 PHP 这种 Web 开发脚本之外再掌握一门系统开发脚本而看过一段时间的 Python,不过因为没有练手项目的缘故现在对它还是比较生疏的,Ruby 也听说过,不过没太刻意去了解(可能跟发明人是 Japanese 也有点关系?^_^)。

  昨晚在《程序员》第 9 期上面看到了一个 Ruby on Rails 的专题,细看之下立刻就对 Ruby 和 RoR 这种技术产生了浓厚的兴趣。现在第 10 期也在手边,为什么刚看到第 9 期呢?其实是俺的一个缺点:看杂志的时候对某些内容选择性失明。每期《程序员》到手翻一遍之后总是会漏掉至少 50% :-),所以总是在数天、数月后再顺手翻翻过刊反而看到自己很感兴趣的内容。现在花在看书上的时间是越来越少了,都是在线看 Internet 上的文档,所以习惯也变得不好起来,看书越来越没耐性了。这应该算科技进步的另一面吧?!

  联想起十几天前在 slashdotcn.org 上看到的一则新闻投递:TurboGears: Python on Rails?里面有一段 Ruby on Rails 的演示视频,是在十几分钟之内用 RoR 写一个 Blog 的,看完以后虽然没明白是怎么弄的,但对于这种开发效率很是觉得震撼!尤其是 Ruby on Rails 居然将 Ajax 也集成进了它的框架中,还真是挺时髦哈!

  《程序员》上的这个 Ruby on Rails 专题算是个催化剂,立即勾起了我十几天前对那个演示视频的记忆和对 Ruby 的兴趣。好吧,虽然我现在的工作并不是 B/S 相关的,但凭着对 Web 开发一直以来的兴趣,从现在起研究一下 Ruby 和 Ruby on Rails 吧。

  再扯点不着题的话,IT 业新名词就是多!像 Ruby、Python、.NET 这些还好点,都是英文单词,就算不认识查查金山词霸也就知道怎么发音了,可有些新造出来的词在不知道确切读法之前还真不敢吓念,像刚知道 Java 那会儿我就念了段时间的 JV(字母发音)。还有 Linux,一开始念“雷那克斯”,后来听了 Linus 本人的发音才确定这个念“李牛克斯”。这还算好的,直到现在我也不知道 SQL 准确的发音是什么?到底是“瑟Q”还是“瑟扣”?说来也怪大学里教数据库的老师,年纪大点也就算了,说的还是方言,反正我们班上的人最后谁都没搞明白。想想要是有个 IT 名词的发音词典就好了,有吗?

以前写的一个 PHP 代码快速测试工具

2005-10-21 20:52 | by 2ndboy

  如果只是偶尔要测试一小段代码或者验证一个想法的话,打开编辑器,写好代码,保存,用浏览器测试,比较麻烦,而且 htdocs 下垃圾越来越多,用这个测试工具可以随时测试代码,很方便。不过不要把它装在接入 Internet 的机器上,安全第一!

  1. <html>
  2.      <head>
  3.          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  4.          <title>PHP 代码快速测试</title>
  5.          <script language="JavaScript">
  6.              function GetCursorPos( Who )
  7.              {
  8.                  OldData = clipboardData.getData( "text" );
  9.                  Tag = "~!@#$%^";
  10.                  clipboardData.setData( "text", Tag );
  11.                  Who.focus();
  12.                  document.execCommand( "paste" );
  13.                  var Pos = Who.value.indexOf( Tag );
  14.                  document.execCommand( "undo" );
  15.                  clipboardData.setData( "text", OldData );
  16.                  return Pos;
  17.              }
  18.              function OnCodeKeyDown()
  19.              {
  20.                  if( 9 == window.event.keyCode )
  21.                  {
  22.                      Pos = GetCursorPos( document.Foo.Code );
  23.                      Code = document.Foo.Code.value;
  24.                      document.Foo.Code.value = Code.substring( 0, Pos ) + "\t" + Code.substring( Pos, Code.length );
  25.                      return( false );
  26.                  }
  27.              }
  28.              function OnChangeCode( Who )
  29.              {
  30.                  if( "0" == Who )
  31.                      ;
  32.                  if( "1" == Who )
  33.                      document.Foo.Code.value = "phpinfo();";
  34.                  if( "2" == Who )
  35.                      document.Foo.Code.value = "highlight_file( '<?php echo $_SERVER['SCRIPT_FILENAME'] ?>' );";
  36.              }
  37.          </script>
  38.      </head>
  39.      <body>
  40.  <?php
  41.  $Code = $_REQUEST["Code"];
  42.  if( "" != $Code )
  43.  {
  44.      if( get_magic_quotes_gpc() )
  45.          $Code = stripslashes( $Code );
  46.  }
  47.  ?>
  48.  <form name="Foo" method="post">
  49.  <textarea name="Code" rows="10" style="width:100%" onKeyDown="return OnCodeKeyDown();">
  50.  <?php
  51.  echo $Code;
  52.  ?>
  53.  </textarea>
  54.  <br/>
  55.  <select name="SmallCode" onChange="OnChangeCode( this.options[this.selectedIndex].value);">
  56.      <option value="0">代码速贴</option>
  57.      <option value="1">phpinfo();</option>
  58.      <option value="2">显示源代码</option>
  59.  </select>
  60.  <input type="submit" value=" 执 行 "/>
  61.  <input type="button" value=" 清 除 " onClick="document.Foo.Code.value='';"/>
  62.  </form>
  63.  <hr/>
  64.  <?php
  65.  if( "" != $Code )
  66.  {
  67.      print_r( eval( $Code ) );
  68.  }
  69.  ?>
  70.  </body>
  71.  </html>

BTW:Spaces 里贴代码还真是麻烦!

也说钱

2005-10-20 20:43 | by 2ndboy

  昨天在刘韧的 Blog 上看到一篇“有钱以后,干什么?”,恐怕所有人在私下里都想过这个问题吧?!我也来写写:)

1)给父母在杭州买房子然后把他们接来安度晚年
父母为了我和哥哥辛苦了半辈子,无以为报啊

2)学钢琴
很早以前就有这个念头,觉得弹钢琴的感觉很爽,其实这件事也并不一定要多有钱才能干,但还是放在“有了钱”以后再干吧:)

3)参与一两个感兴趣的开源项目
曾经看到过一个参加开源项目的人群统计,从统计数字来看,中国人参加开源项目的远远少于其它国家,我想着不是国内的程序员们缺少参与开源的热情,实在是忙于养家糊口啊,我也一样

4)去一直想去的地方玩儿
金字塔、迪拜、南美热带雨林、马尔代夫……

  想干的事还很多,不说了,节约点时间留着实现梦想吧

闲扯个人网站的进化

2005-10-19 22:16 | by 2ndboy

  我接触网络的时间比较晚,大约是在 99 年的时候,2000 年就做了第一个个人网站,有一个比较土的名字——C 地带。上面主要放了一些从各处搜刮来的算法,自己写的一些小程序和心得体会,当时还不会写 CGI,是用 FrontPage 做的纯静态网页,很多地方都用了 frame 来分割版面,当然,版面设定都是用 table。

  其实最初的个人网站也差不多都是这种模式,静态 HTML,最多再加上点 JavaScript 和 JavaApplet 做点动态效果,而且很多都用了 frame,这样写页面的时候就可以只写会变化的内容页面了,导航页不用做变化。后来 CGI 技术出现后大家好像都倾向于不用 frame 了,整个版面就是一个页面,每次发生页面跳转时整个页面都要重新传输一次,现在我还清楚的记得在一个 B/S 架构的 PKI 系统的 What’s new 看到他们把放弃 frame 使用“单页式”的版面作为一个版本更新的亮点。

  其实在 Web 标准没有流行起来之前网络上的绝大多数网站都是我上面说的这种模式,不用 frame,用 table 组织版面,发生页面跳转时整个网页都重新 load,这样就导致页面加载和显示都比较慢,带宽浪费严重,每一次改版都异常痛苦(想想层层嵌套有如天书的 td、tr)。Web 标准流行起来之后这种情况有了较大的改观,做网站的时候将内容和表现形式进行剥离,版面都分块封装到 div 中,而使用 CSS 来定制每个部分的位置、大小和外观。这样一来虽然每次的页面跳转还是要 load 整个页面,但只是重新传输了网页数据,而网页的表现形式 CSS 则在第一次取页面时就已经下载到了本地(除非你强制刷新页面),使带宽占用大大减小,无怪乎众多的网站都急着要拥抱 Web 标准,因为好处是实实在在的。

  其实这个阶段的网页还有一种制作技术就是用 XML 数据源 + XSLT,转换的结果还可以应用 CSS 来渲染,但我对这种方法其实并无多少好感,也没有太多实践,这里就不去说它了。还有纯粹用 Flash 构架出来的网站,交互性非常强,也可以做到很多用 (X)HTML + JS 无法实现的效果。

  说 Google 是一家很有创意的公司绝对没错,自从他们的 GMail 和 GMap 服务推出之后,早就存在于这世上的 XMLHTTP 技术又重新被无数的人重新拾起焕发了无限生机,尤其是被人冠以 Ajax 的名头之后越发的声名远扬引来众人的追捧。现在看来,个人网站在技术上继 Web 标准的应用后又要进入一个新的历史阶段了。Ajax 的应用不仅可以做到无提交刷新更节省了网络带宽,网页内容在更新时只传输需要变化的内容,其它内容都无需变化,真是好处多多!现在看来已经有 N 多 BSP 提供了构建于 Ajax 之上的 Blog 系统,相信未来还会有更多的应用使用这种技术。

  上面都是从技术角度解读的个人网站的进化,下面再聊聊个人网站的功能性进化。

  做个人网站放在以前还真是个技术活儿,普通人无法胜任,就算众多 WYSSWYG 的网页制作工具提供了各种各样的模板,但用户终究还是要面对工具,面对网页的上传发布,更甭提为了提高交互性集成个留言板或是论坛什么的。在 Blog 出现之前也有很多服务商提供了个人建站的向导来帮助用户为自己在线创建个人网站,但却缺少 Blog 的灵魂——非常简单的发布和非常强的交互性,不过至少又在个人网站的进化路程上迈了一小步。

  在 Blog 广泛流行之前,个人主页和用于个人目的的论坛是没有交汇点的,虽然 forum 跟 Blog 确实很像。如果要简单的归纳为什么 Blog 现在会如此的流行,我觉得最直接的原因就是 Blog 降低了用户维护个人网站的门槛。每个人在潜意识里都有表现自己的欲望,有了合适的形式和便捷的方式,Blog 就开始流行了。

  以 Blog 为代表的这种形式,据说被称之为 Web 2.0,而传统意义上的网站就是 Web 1.0 了,Web 1.0 是只读的,用户不可以对其进行修改,而是要由网站后面的一大群编辑进行发布,用户只能被动参与,如果某一天这个网站的所有编辑都罢工了,那么这个网站就不会有更新了,有人把 Web 1.0 称之为“死网站”就是这个原因。Web 2.0 的网站,所有的内容都来自于用户,是网站的用户给网站带来的内容和活力,而网站背后之需要很少的人对其进行日常维护,所以称之为“活网站”。Web 2.0 的这种特性决定了几个人的小团队也可以创业成功,目前业界的例子已经很多了,而且还有更多的人正在跃跃欲试的想加入这股创业风潮中。

  说到 Web 2.0,还应该提一个概念——社会性网络,最初听说并理解这个词是从 del.icio.us(美味书签)那里。发布、分享、结识跟自己有共同兴趣的人,这是很有意思的体验!www.43things.com 也是一个很好的例子,人生中要做的若干件事情,有谁跟我目标一致,我可以认识他们并且进行交流。这,就是社会性网络的魅力!

  个人网站发展到现在又有人提出了“个人门户”的概念,说实在的,对于这个概念我一直体会不深,我目前的理解,个人门户大概就是一个集成了众多我想要使用的网络服务和我可以提供出来的信息的一个平台,这个平台既是一个自我展示的地方,又是一个方便我体验网络在线生活享受服务的地方,更是一个可以跟网络大众交流分享的地方。

  呵呵,以我的认识也只能侃这么多了,无论从技术上讲还是从功能性上讲,互联网还会不断的进化,不管是将来使用 XUL 也好,集成多媒体特性也好,还是加入虚拟现实的元素,Internet 都会朝着不断集合人类智慧、方便沟通交流和分享的大平台。

后记:今天得闲,心血来潮就敲出这么一大堆东西来,很少有写 Blog 写这么长的时候,而且话题还这么大,呵呵,胡言乱语了不少,欢迎拍砖:-)