<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>squall's blog</title>
    <description>squall's blog</description>
    <link>http://squall.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>简化struts配置</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/30212" style="color:red;">http://squall.javaeye.com/blog/30212</a>&nbsp;
          发表时间: 2006年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近rails很火，我也不落俗套的看了一下。觉得其开发方式很直接了当，十分符合人的思维习惯，并且记住了一句话：“约定优于配置”。<br />于是我对一个现有的小项目进行了重构，来看一下一个struts的action-mapping配置：<br />    &lt;action path="/*/index" forward="sample.{1}Frame" /><br /><br />    &lt;action path="/*/get*"<br />            name="{1}Form"<br />            scope="request"<br />            type="com.whcyit.framework.struts.BeanAction"<br />            validate="false"><br />      &lt;forward name="success" path="/{2}.jsp" /><br />    &lt;/action><br /><br />    &lt;action path="/*/query*"<br />            name="{1}Form"<br />            scope="request"<br />            type="com.whcyit.framework.struts.BeanAction"<br />            validate="false"><br />      &lt;forward name="success" path="sample.{1}{2}" /><br />    &lt;/action><br /><br />    &lt;action path="/*/insert*"<br />            name="{1}Form"<br />            scope="request"<br />            type="com.whcyit.framework.struts.BeanAction"<br />            input="fail"<br />            validate="true"><br />      &lt;forward name="fail" path="/{1}/query{2}.do" /><br />      &lt;forward name="success" path="/{1}/query{2}.do" redirect="true" /><br />    &lt;/action><br /><br />    &lt;action path="/*/update*"<br />            name="{1}Form"<br />            scope="request"<br />            type="com.whcyit.framework.struts.BeanAction"<br />            input="fail"<br />            validate="true"><br />      &lt;forward name="fail" path="/{1}/query{2}.do" /><br />      &lt;forward name="success" path="/{1}/query{2}.do" redirect="true" /><br />    &lt;/action><br /><br />    &lt;action path="/*/delete*"<br />            name="{1}Form"<br />            scope="request"<br />            type="com.whcyit.framework.struts.BeanAction"<br />            validate="false"><br />      &lt;forward name="success" path="/{1}/query{2}.do" /><br />    &lt;/action><br />这就是整个工程的action配置了，是不是很简洁(BeanAction见ibatis的JPetStore)。<br />每个action path分为两节如/*/inser*，第一节相当于rails中的controller，第二节就是controller的方法了。这个是仿rails的匹配方式，当然你也可以定义自己习惯的匹配方式。
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/30212#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Oct 2006 15:08:43 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/30212</link>
        <guid>http://squall.javaeye.com/blog/30212</guid>
      </item>
      <item>
        <title>关于IE(frameset)导致cookie丢失的问题</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/27373" style="color:red;">http://squall.javaeye.com/blog/27373</a>&nbsp;
          发表时间: 2006年10月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          目前采用SSO来对不同的应用系统进行整合。发现如下问题，当在frameset结构下引入另一个站点的页面，就会导致cookie丢失，也就同样导致服务端的session会话的丢失(firefox 无此问题)，从而使得每次请求都要到SSO服务器去验证大大降低运行效率。查询 MSDN 得知加入Response Header：response.addHeader("P3P","CP=CAO PSA OUR")，就可以解决该问题。
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/27373#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Oct 2006 20:55:27 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/27373</link>
        <guid>http://squall.javaeye.com/blog/27373</guid>
      </item>
      <item>
        <title>AIX 常用命令</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26921" style="color:red;">http://squall.javaeye.com/blog/26921</a>&nbsp;
          发表时间: 2006年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          提取输入的命令历史<br />set -o vi<br />ESC,k<br />或者<br />set -o emacs<br />Ctrl + P<br /><br />--看运行的线程数<br />#ps -emo THREAD -o thcount<br />--看内核的位数<br />#bootinfo -K<br />--看操作系统版本<br />#oslevel -r<br /><br />--查看当前系统所打的补丁<br />instfix -i|grep ML<br /><br />--改变异步io<br />#smitty aio 最大为10X并行磁盘数&lt;80,最小为最大的一半<br /><br />--从32位切换到64位<br />ln -sf /usr/lib/boot/unix_64 /unix <br />ln -sf /usr/lib/boot/unix_64 /usr/lib/boot/unix <br />lslv -m hd5 <br />bosboot -ad /dev/ipldevice <br />shutdown -Fr  <br />--64位切换到32位<br />ln -sf /usr/lib/boot/unix_mp /unix <br />ln -sf /usr/lib/boot/unix_mp /usr/lib/boot/unix <br />lslv -m hd5 <br />bosboot -ad /dev/ipldevice <br />shutdown -Fr  <br /><br />--看所有硬件信息<br />prtconf<br />--加载光驱<br />mount -v cdrfs -o ro /dev/cdrom /mnt<br /><br />--查看内存<br />lsdev -Cc memory<br />lsattr -El mem0<br />lsattr -El L2cache0<br /><br />--拷贝文件<br />cp 文件1 文件2<br /><br />--检查文件系统<br />fsck /dev/hd6<br />--修复错误<br />fsck -V jfs2 /myfs<br /><br />--查看逻辑卷的情况<br />lvmstat -v rootvg -e --先打开<br />lvmstat -v rootvg    --查看<br />lvmstat -v rootvg -C    --清除数据<br />lvmstat -l hb3<br />lvmstat -d -v rootvg --停止收集<br /><br />--备份rootvg<br />smitty mksyskb<br /><br />--性能监控<br />sar <br />    -a    文件访问情况<br />    -b    缓冲区访问情况<br />    -c    系统调用情况<br />    -k    内核进程活动情况<br />    -m    消息队列和信号量情况<br />    -q    队列情况<br />    -v    进程、内核线程、i节点、文件表情况<br />    -w    上下文切换情况<br />    -y    tty设备活动情况<br /><br />vmstat <br /><br />iostat <br /><br />netstat <br /><br />filemon<br />filemon -u -O all -o /out.txt; sleep 30; trcstop<br /><br />netpmon<br />netpmon -O all -o /out.txt;sleep; trcstop<br /><br />topas<br /><br />entstat<br /><br />fileplace<br /><br />no -a<br /><br />ioo -a<br /><br />svmon<br />--看限制<br />ulimit -a<br />--查找文件<br />find / -size +10375<br /><br />--定时编辑<br />crontab -e<br /><br />--自动清除文件系统<br />skulker -p<br /><br />--看磁盘情况<br />df -g<br />du -g<br /><br />--查看文件系统的安装<br />mount<br />mount 文件系统<br />--配置Xwindow的变量<br />export DISPLAY = ip:0.0<br />xhost + <br />
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26921#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Apr 2006 11:50:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26921</link>
        <guid>http://squall.javaeye.com/blog/26921</guid>
      </item>
      <item>
        <title>Refactoring 笔记 - 对第一个案例的再重构</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26922" style="color:red;">http://squall.javaeye.com/blog/26922</a>&nbsp;
          发表时间: 2006年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>案例中 Movie 的 setPriceCode 方法还是存在着 case 语句，站在代码美学的角度上来讲这显然是不可容忍的，而且对以后的扩展也不是很方便。比如现在要加一种 Price 策略需要修改哪些地方？首先加入一个 Price subclass，那个 case 是肯定要修改的，还要加一个 priceCode 常量，好麻烦，即然都 Strategy 了，那就 Stragegy 到底。</div>
<div> </div>
<div>把所有的 Price subclass 的 getProceCode 方法里面返回自已所代表的ProceCode<br />public class ChildrensPrice extends Price {<br />  public int getPriceCode() {<br />    return 2;<br />  }<br />}</div>
<div>public class NewReleasePrice extends Price {<br />  public int getPriceCode() {<br />    return 1;<br />  }  <br />}</div>
<div>public class RegularPrice extends Price {<br />  public int getPriceCode() {<br />    return 0;<br />  }<br />}</div>
<div> </div>
<div>修改 Movie 中常量定义为<br />public final static Price REGULAR = new RegularPrice();<br />public final static Price CHILDRENS = new ChildrensPrice();<br />public final static Price NEW_RELEASE = new NewReleasePrice();</div>
<div> </div>
<div>修改 Movie 的构造方法为，注意：这里修改了对外的接口，除非能做到不用修改客户端程序，否则在实际项目中要酌情处理<br />public Movie(String name, Price price) {<br />  _title = name;<br />  _price = price;<br />}</div>
<div> </div>
<div>这样 setPriceCode 就没用了，干掉，现在程序看起来爽多了</div>
<div>run 你的测式</div>
<div>done......</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26922#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Apr 2006 09:22:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26922</link>
        <guid>http://squall.javaeye.com/blog/26922</guid>
      </item>
      <item>
        <title>Refactoring 笔记 - 代码的坏味道总结</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26924" style="color:red;">http://squall.javaeye.com/blog/26924</a>&nbsp;
          发表时间: 2006年04月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>同一个 class 内的两个或多个方法有重复代码：使用 Extract Method 提抽取复代码。<br />多个互为兄弟的 class 含重复代码：对这些 class 使用 Extract Method 提抽取复代码，再使用 </div>
<div>pull up method 把重复代码向上拉到父类中。<br />多个不相关的 class 出现重复代码：应该考虑使用 Extract Class，将重复代码抽取到一个独立的 </div>
<div>class 中。抽取时应注意这些代码是否真的需要一个独立的类，应照 OO 原则将这些代码归属到</div>
<div>应该拥有这些代码的 class 中。</div>
<div> </div>
<div>理清 class 的职责，把一些成员变量和方法抽取到一个新的 class 中或子类中。<br />技巧：可以先确定客户端如何使用它们，使用 Extract Interface 抽取接口，这可以帮助程序员</div>
<div>看清楚该如何分解这个 class。</div>
<div> </div>
<div>参数过多可以考虑把这些参数由一个对象提供。<br />如果这些参数缺乏合理的对象归属，可以考虑为它们创建一个参数对象。</div>
<div> </div>
<div>一般情况下一个变更修改应该只有一个修改点，如果不能做到这点，就应该想想这些地方是否</div>
<div>需要重构了(可以看看 OOAD 原则中的单一责任原则)。</div>
<div> </div>
<div>如果需要修改的代码散布四处将会很难找到它们，也很容易忘记某个重要的修改。这种情况下</div>
<div>可以考虑把所有需要修改的代码放进同一个 class。如果没有合适的 class 可以创建一个，比如</div>
<div>说创建一个 Inline class。</div>
<div>当发现一个 class 的某个方法中使用了很多另一个对象的方法或值时就应该考虑把这个方法移到</div>
<div>它该去的地方。<br />有时候方法中只有一部分代码出现这种情况就应该考虑把这部分代码抽取出成独立的方法再移</div>
<div>到它该去的地方。<br />如果一个方法用上数个 class 的特性，那么应该考虑把这部份代码抽取为一个个的小方法再把它</div>
<div>们移到它该去的地方。<br />不管怎么说最根本的原则是总是将一起变化的东西放到一块儿。</div>
<div> </div>
<div>应该使用面向对象中的多态还替换 case 语句。</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26924#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Apr 2006 10:25:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26924</link>
        <guid>http://squall.javaeye.com/blog/26924</guid>
      </item>
      <item>
        <title>Refactoring 笔记 - 重构原则总结</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26925" style="color:red;">http://squall.javaeye.com/blog/26925</a>&nbsp;
          发表时间: 2006年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>重构再定义<br />名词：对软件内部结构的一种调整，目的是在不改变软件之可察行为前提下，提高其可理解性</div>
<div>，降低其修改成本。<br />动词：使用一系列重构准则，在不改变软件之可察行为前提下，调整其结构。</div>
<div>重构的目的是使软件更容易被理解和修改。可以在软件内部做很多修改，但对其 public 的接口</div>
<div>造成很小的变化或甚至不能造成变化，在决定改变接口时一定要慎之再慎。</div>
<div> </div>
<div>两个方面<br />1、添加新功能：不应该修改已有的代码，只管添加新功能和对应的测试。<br />2、重构：不应该再添加功能，也不应该更改对应的测试，只管改进程序结构并使改进后的程序</div>
<div>通过测试。</div>
<div> </div>
<div>为何重构？<br />程序设计是与计算机交谈，程序告诉计算机做什么，怎么做，它的响应则是精确按照程序的指</div>
<div>示行动，机算机是程序主要的读者。从而往往忽略了程序另一种重要的读者，自己或其它程序</div>
<div>员。有人说懒惰是程序员的美德之一，懒惰常常使程序员写出精妙的代码，创造出更好的应用</div>
<div>，而重构则使程序员偷懒有方，呵呵，至少我这么认为。<br />在重构过程中能够帮助找到隐藏的 bugs，也能帮助深入理解代码的行为。</div>
<div> </div>
<div>何时重构？<br />三次法则：事不过三，三则重构。第一次做某件事时只管去做；第二次做类似的事会产生反感</div>
<div>，但无论如何还是做了；第三次再做类似的事，就应该重构。</div>
<div> </div>
<div>重构的阻力<br />这一章谈到了一些，我的感受是最大的阻力来自于程序员本身、整个团队、一些政治因素，呵</div>
<div>呵，有经验的程序员可能都会有此感受。</div>
<div> </div>
<div>修改接口<br />不到最后关头千万不要做此决定，接口是对外的承诺，一但收回承诺，任何事情都有可能发生</div>
<div>。如果一定要修改接口应该让旧的接口依然能够工作，直到所有的用户都做出反应为止。</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26925#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Apr 2006 15:48:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26925</link>
        <guid>http://squall.javaeye.com/blog/26925</guid>
      </item>
      <item>
        <title>Refactoring 笔记 - 第一个案例总结</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26926" style="color:red;">http://squall.javaeye.com/blog/26926</a>&nbsp;
          发表时间: 2006年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>重构保障<br />1、建立测试环境(比如单元测试)，确保重构后的代码不会带来新的 bugs。</div>
<div> </div>
<div>重构前提<br />1、当一个函数或类履行了太多的职责。<br />2、当一个变更存在多个相同的修改点。<br />3、当需要为程序添加一个特性，而代码结构使你无法很方便地那么做。</div>
<div> </div>
<div>重构原则<br />1、尽量以最小的步伐修改程序。如果你犯下错误，很容易发现它。<br />2、使用有意义的命名，增强程序的可读性，代码本身应该能够表现自己的目的。任何一个 fool </div>
<div>都能写出计算机可以理解的代码，惟有写出人类容易理解的代码，才是优秀的程序员。<br />3、函数应该放在它所使用数据所属的 object 内。</div>
<div> </div>
<div>重构手段<br />1、Extract Method，把一个昂长的方法按职责抽取为多个简洁的方法。<br />2、除去冗余的临时变量。往往一个临时变量的存在是为了保存一个运算的结果，可以考虑把临</div>
<div>时变量及临时变量相关的运算抽取到一个单独的函数中。<br />3、合适的选择设计模式。</div>
<div> </div>
<div>重构节奏 - 测试、小修改、测试、小修改......正是这种节奏让重构变得快速和安全。</div>
<div> </div>
<div>
<div>这一章以一个实例演示了重构的全过程，使我本来零星破碎的思维变得逐渐完整，当然这一章中所用到的重构手段和原则并不是全部，continue......</div></div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26926#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Apr 2006 14:19:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26926</link>
        <guid>http://squall.javaeye.com/blog/26926</guid>
      </item>
      <item>
        <title>Refactoring 笔记 - 什么是重构?</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26927" style="color:red;">http://squall.javaeye.com/blog/26927</a>&nbsp;
          发表时间: 2006年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>        听说这本书好长时间了，一直没有时间去读，也可以说一直没时间静下心来去读，如果静不下心来读，读了也是白读。本人记性虽好无奈忘性更好，唯有寄于文字，记录于此。呵呵，废话少说，下面开始...</div>
<div><br />什么是重构?<br />        重构就是指在不改变程序外在行为的前提下，对代码做出修改，改进程序内部结构的过程。<br />        书中说到本质上说，重构就是在代码写好之后改进它的设计。这句话听上去有点怪怪的，好像跟重构的定义本身有少少冲突，使人容易误解为一开始应该实现之再设计之，这样的话在重构时不可避免的要对程序外在行为进行改变岂不是违背了重构的初衷？但是想深一层，如果以测试先行为前提呢？答案就很浅显了，至于 martin 为什么不说明，可能他认为测试先行是程序开发不可缺少的一个环节，没有必要复述，也许在后面的章节中会提到。书名也说明了是 Improving the Design of Existing Code，即然是改进存在的代码，那么可以理解为在不改变程序外在行为的前提下最大程度改进已有代码的可读性、可维护性。</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26927#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Apr 2006 11:23:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26927</link>
        <guid>http://squall.javaeye.com/blog/26927</guid>
      </item>
      <item>
        <title>shell 程序之切换用户</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26928" style="color:red;">http://squall.javaeye.com/blog/26928</a>&nbsp;
          发表时间: 2006年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>切换用户并执行一个命令</div>
<div>su - otheruser -c your command</div>
<div> </div>
<div>切换用并执行一批命令</div>
<div>su - otheruser - c your other shell file</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26928#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Apr 2006 10:07:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26928</link>
        <guid>http://squall.javaeye.com/blog/26928</guid>
      </item>
      <item>
        <title>shell 程序之遍历目录</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26929" style="color:red;">http://squall.javaeye.com/blog/26929</a>&nbsp;
          发表时间: 2006年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>取当前路径</div>
<div>currentpath = $PWD</div>
<div> </div>
<div>遍历根目录</div>
<div>for file in /*</div>
<div>  do</div>
<div>  if test -f $file</div>
<div>  then</div>
<div>    echo 是文件</div>
<div>  fi</div>
<div>
<div>  if test -d $file</div>
<div>  then</div>
<div>    echo 是目录</div>
<div>  fi</div>
<div>  if test -x $file</div>
<div>  then</div>
<div>    echo 可执行</div>
<div>  fi</div>
<div>  if test -w $file</div>
<div>  then</div>
<div>    echo 可写</div>
<div>  fi</div>  echo $file</div>
<div>done</div>
<div> </div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26929#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Apr 2006 18:38:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26929</link>
        <guid>http://squall.javaeye.com/blog/26929</guid>
      </item>
      <item>
        <title>shell 程序之参数</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26930" style="color:red;">http://squall.javaeye.com/blog/26930</a>&nbsp;
          发表时间: 2006年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>$0 程序名</div>
<div>$* 全部参数</div>
<div>$n 程序的第n个参数值，n=1..9</div>
<div>$# 程序的参数个数</div>
<div>$$ 程序的PID</div>
<div>$! 执行上一个背景指令的PID</div>
<div>$? 执行上一个指令的返回值</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26930#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Apr 2006 18:16:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26930</link>
        <guid>http://squall.javaeye.com/blog/26930</guid>
      </item>
      <item>
        <title>EL 内置对象</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26931" style="color:red;">http://squall.javaeye.com/blog/26931</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>  
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr valign="top">
<td width="100%">
<table cellspacing="0" border="0" width="100%" cellpadding="0">
<tbody>
<tr valign="top">
<td width="100%">
<table cellspacing="0" border="1" width="100%" cellpadding="3">
<tbody>
<tr valign="top">
<td><b>类别</b> </td>
<td><b>标识符</b> </td>
<td><b>描述</b> </td></tr>
<tr valign="top">
<td>JSP</td>
<td><code>pageContext</code> </td>
<td><code>PageContext</code> 实例对应于当前页面的处理 </td></tr>
<tr valign="top">
<td rowspan="4">作用域</td>
<td><code>pageScope</code> </td>
<td>与页面作用域属性的名称和值相关联的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td><code>requestScope</code> </td>
<td>与请求作用域属性的名称和值相关联的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td><code>sessionScope</code> </td>
<td>与会话作用域属性的名称和值相关联的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td><code>applicationScope</code> </td>
<td>与应用程序作用域属性的名称和值相关联的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td rowspan="2">请求参数</td>
<td><code>param</code> </td>
<td>按名称存储请求参数的主要值的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td><code>paramValues</code> </td>
<td>将请求参数的所有值作为 <code>String</code> 数组存储的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td rowspan="2">请求头</td>
<td><code>header</code> </td>
<td>按名称存储请求头主要值的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td><code>headerValues</code> </td>
<td>将请求头的所有值作为 <code>String</code> 数组存储的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td>Cookie</td>
<td><code>cookie</code> </td>
<td>按名称存储请求附带的 cookie 的 <code>Map</code> 类 </td></tr>
<tr valign="top">
<td>初始化参数</td>
<td><code>initParam</code> </td>
<td>按名称存储 Web 应用程序上下文初始化参数的 <code>Map</code> 类</td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26931#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 13:17:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26931</link>
        <guid>http://squall.javaeye.com/blog/26931</guid>
      </item>
      <item>
        <title>[转]在中国搞技术只能混碗饭吃</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26932" style="color:red;">http://squall.javaeye.com/blog/26932</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>在中国搞技术只能混碗饭吃，没有太大希望，原因如下：<br />　　<br />　　1、中国的文化传统决定的<br /><br />　　 在中国，技术以及技术人员缺乏社会地位，具有悠久的历史传统，自古就被斥为“奇技淫巧”，工匠（技术人员）在古代的地位非常低下； 而欧洲从几个世纪以前就非常重视科技了，各国都成立了皇家科学院，很多科学家拥有爵位，地位非常高。<br />　　<br />　　2、中国是个官本位的社会<br /><br />　　 这导致了“唯官正确”的怪象，很多事情，当官的并不懂，但是他发表几句狗p不通的指示，人人都点头称是。我们在做项目的过程中这种事情屡见不鲜，领导的话不管对错，都跟圣旨一样，没人敢去怀疑和辩驳，其实也不是大家都傻到不明是非，而是辩驳只会给自己带来麻烦。<br />　　 但是如果某个技术人员发表一番见解，则会遭来诸多诘难，原因不是你说错了，而是因为你没权力，人家不怕你，每个人都敢辩驳你，不管他的观点多么荒谬。<br />　　 <br />　　在这样一种氛围下，试问还有多少人有兴趣继续搞技术。<br />　　<br />　　3、中国几乎有无限的劳力供应<br />　　 <br />　　在几大生产力要素中：土地、资本、劳力（在中国还要加上权力），资本最值钱（在中国也许是权力），而劳力最不值钱，原因在于中国几乎拥有无限的劳力供应，供大于求，价格当然下跌（也包括劳力的地位）；而资本是最紧缺的，供不应求，当然价格上涨（也包括资本家的地位）。<br />　　 <br />　　当然有人会说高端技术人才并不多，甚至极度紧缺，这点我承认，但是我们当中（来此论坛的）有几个是紧缺的高端技术人才呢？99.99%的不都是普通技术人员嘛。<br />　　<br />　　4、缺乏支持技术创新的体制，缺乏良好的知识产权保护环境<br />　　 <br />　　没有上述二者，请问还有多少技术人员有无穷的热忱投身于技术创新和发明创造？<br />　　<br />　　5、企业宁可去买技术，也不愿投入资金进行研发<br />　　 <br />　　君不见上汽南汽抢着收购罗孚汽车，TCL收购阿尔卡特手机研发部门和飞利浦彩电研发部门，我们的政策是市场换技术，而不是加大研发投入自己搞技术。<br />　　<br />　　6、企业内的“政治”让技术人员心灰意冷<br />　　<br />　　大部分热衷于技术的人员在“政治”上都相当低能，这也不是他们笨，而是“一心不能二用”，满脑袋都琢磨的是技术，怎么可能天天去琢磨人，但是，企业里混得好的都是成天琢磨人的主。<br />　　 <br />　　这也是为什么很多搞技术的都想自己去创业，没办法，实在受不了这种环境。但是在现在这个时代，没有足够的资金，仅靠几个人的小作坊很难成功。</div>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26932#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 12:54:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26932</link>
        <guid>http://squall.javaeye.com/blog/26932</guid>
      </item>
      <item>
        <title>Eclipse 找不到插件的问题</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26933" style="color:red;">http://squall.javaeye.com/blog/26933</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Courier New">1、</font><font size="2" face="Courier New">help-&gt;software update-&gt;manage update 显示出disable的项目，把他enable<br />2、 eclipse的readme知道是Fat文件系统的原因,所有装在fat里的eclipse默认不会自动监测feature和plugin的变动，需要在eclipse_home/configuration/config.ini里加上一个参数:osgi.checkConfiguration= true即可</font></p>
<p align="right"> 2004年8月10日 11:59</p>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26933#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 11:15:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26933</link>
        <guid>http://squall.javaeye.com/blog/26933</guid>
      </item>
      <item>
        <title>Eclipse 常用快捷键</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26934" style="color:red;">http://squall.javaeye.com/blog/26934</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Courier New">Ctrl+1 快速修复(把光标移至出错处按下该键会自动提供修改的方案，例如快速增加try catch块)</font></p>
<p><font size="2" face="Courier New">Ctrl+Shift+F 格式化代码</font></p>
<p><font size="2" face="Courier New">Ctrl+Shift+M 添加导入(把光标移至出错处按下该键会自动导入该类需要的包文件)</font></p>
<p><font size="2" face="Courier New">Alt+/ 手动打开代码提示功能</font></p>
<p><font size="2" face="Courier New">Ctrl+\ 取消注释</font></p>
<p><font size="2" face="Courier New">Ctrl+/ 注释</font></p>
<p><font size="2" face="Courier New">Ctrl+Shift+O 组织导入(把导入的内容分组)</font></p>
<p align="right"> 2004年8月12日 13:32</p>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26934#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 11:12:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26934</link>
        <guid>http://squall.javaeye.com/blog/26934</guid>
      </item>
      <item>
        <title>KOL 入门</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26935" style="color:red;">http://squall.javaeye.com/blog/26935</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Courier New">注：下面的教程都是以Win2000Pro(SP3)+Delphi6(SP2)+KOL1.42+MCK1.42为平台讲解的。</font></p>
<p><font size="2" face="Courier New">一、KOL是什么?KOL能做什么? MCK是什么?MCK能做什么?</font></p>
<p><font size="2" face="Courier New">KOL是一套对象库，免费而且开放源代码，大家可以</font><a href="http://bonanzas.rinet.ru/"><font size="2" color="#0000ff" face="Courier New"><u>http://bonanzas.rinet.ru/</u></font></a><font size="2" face="Courier New">去下载到它。它能够使Delphi编出尺寸非常小的32位Windows图形用户界面的应用程序。</font></p>
<p><font size="2" face="Courier New">目前支持的Delphi版本:Delphi6,Delphi5,Delphi4,Delphi3和Delphi2。</font></p>
<p><font size="2" face="Courier New">使用KOL在D2-D5中编写的最小图形界面程序(只有一个窗体的空应用程序)，只有13K左右。在D6中为20K左右。</font></p>
<p><font size="2" face="Courier New">MCK一套以KOL为基础的可视化组件，用它就像用VCL一样的方便省事而且可以达到和KOL一样的效果。</font></p>
<p><font size="2" face="Courier New">二、KOL和MCK的安装</font></p>
<p><font size="2" face="Courier New">1、</font><a href="http://bonanzas.rinet.ru/"><font size="2" color="#0000ff" face="Courier New"><u>http://bonanzas.rinet.ru/</u></font></a><font size="2" face="Courier New">下载到KOL和MCK后，把它们解压到你自已想要的目录中。把KOL中的kol.pas拷贝到MCK目录中。</font></p>
<p><font size="2" face="Courier New">2、运行Delphi选择Tools菜单-&gt;Environmaent Options...-&gt;Library页，选择&quot;Library Path&quot;右边的按钮会弹出&quot;Directories&quot;对话框，然后添加KOL和MCK的路径。</font></p>
<p><font size="2" face="Courier New">3、打MCK目录中的包文件安装。</font></p>
<p><font size="2" face="Courier New">三、如何创建一个KOL工程</font></p>
<p><font size="2" face="Courier New">1、在Delphi中新建一个应用程序,然后保存(这一步一定要做)，保存时工程名一定不要改变，窗体名可以随便。</font></p>
<p><font size="2" face="Courier New">2、在控件面板KOL中放一个TKOLProject控件到窗体并设置projectDest属性为你想要的工程名比如说是&quot;KOLSample&quot;，再把dprResource属性设为真(这关系到你能不能用Project-&gt;Options...中的设置设置你的程序图标以及程序的版本号)。</font></p>
<p><font size="2" face="Courier New">3、在控件面板KOL中放一个TKOLForm控件到窗体，这个控件和TForm差不多的，保存并关闭当前工程。</font></p>
<p><font size="2" face="Courier New">4、这时候你就会在保存目录中发现一个名为&quot;KOLSample&quot;的工程，聪明的你可能会想到Project1这个工程不再需要了，是的你可以毫不留情的删掉它(其它的就不要删了)。打开KOLSample，运行它，看看生成的程序，怎么样?：）</font></p>
<p align="right"> 2004年7月30日 9:55</p>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26935#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 11:10:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26935</link>
        <guid>http://squall.javaeye.com/blog/26935</guid>
      </item>
      <item>
        <title>Delphi 内嵌汇编初探总结</title>
        <author>squall</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://squall.javaeye.com">squall</a>&nbsp;
          链接：<a href="http://squall.javaeye.com/blog/26936" style="color:red;">http://squall.javaeye.com/blog/26936</a>&nbsp;
          发表时间: 2006年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="2" face="Courier New">1、在对象中 EAX 寄存器将永远存放 Self 指针，第一个参数放在 EDX，第二个参数放在 ECX，其它的参数放入栈中，如果企图使用类方法做比如系统回调函数的应用将会把 Self 破坏掉，从而产生 AV 类型的异常。</font></p>
<p><font size="2" face="Courier New">2、在 Delphi 中参数的存放是从右向左的顺序，如果函数或过程在类中 EAX 寄存器中将存放 Self 指针，EDX 存放第一个参数，ECX 存放第二个参数，其它的参数将放入栈中(EBP 中存放栈的基地址，EBP+8为栈中的第一个变量)。如果函数或过程不在类中 EAX 寄存器中将存放第一个参数，其它同上。由此可见，在 Delphi 中永远将前三个参数放入寄存器中达到优化的目的，所以在写函数和过程时参数最好不要超过三个而且最好把常用的参数放到前面。</font></p>
<p><font size="2" face="Courier New">3、用汇编调用类方法，可以通用 Self 的指针加上类方法的偏移地址来调用，如下：<br />   //其中 FSomething 为方法指针(相信有 Delphi 基础的人都看得懂)<br />   add eax, offset(TForm1.FSomething)<br />   call TMethod[eax].code<br />   还有更简单的调用方法，如下：<br />   //这种方法相信编译器在幕后做了不少功夫<br />   call TForm1.MethodName<br />   还有一种方法，是在 Delphi 的 CPU 窗口中学到的和第一种方法大同小异，如下<br />   add edx, offset(TForm1.FSomething)<br />   call dword ptr [eax]</font></p>
<p align="right"> 2004年7月30日 9:53</p>
          <br/>
          <span style="color:red;">
            <a href="http://squall.javaeye.com/blog/26936#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Apr 2006 11:05:00 +0800</pubDate>
        <link>http://squall.javaeye.com/blog/26936</link>
        <guid>http://squall.javaeye.com/blog/26936</guid>
      </item>
  </channel>
</rss>