<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jindw</title>
    <description>  </description>
    <link>http://jindw.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>最好的标准就是没有标准</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/191037" style="color:red;">http://jindw.javaeye.com/blog/191037</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚才与一个msn上的朋友谈到web ui的设计，提到标准二字。<br /><br />我提出的观点是:<br />最好的标准，就是没有标准<br /><br /><br />最好的标准，就是约定俗成的东西，而不要大家去阅读长编累牍的规范文档。<br />给开发人员一匹快马，让他去开阔的草原上纵马奔腾，而不是给他一根缆绳，在悬崖峭壁间艰难的攀爬。<br /><br />开发人员大多数喜欢自由，那就给他们足够的自由。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/191037#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Thu, 08 May 2008 13:39:39 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/191037</link>
        <guid>http://jindw.javaeye.com/blog/191037</guid>
      </item>
          <item>
        <title>JSA压缩Prototype1.6时，经常表现的一个错误</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/190715" style="color:red;">http://jindw.javaeye.com/blog/190715</a>&nbsp;
          发表时间: 2008年05月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          开始发帖错误，我的测试不够严谨。<br /><br /><br /><br />经过测试，IE也没有踩到那个地雷，只是我测试的时候刚好发生了另外一个错误。<br />那就是直接出现了“&lt;/script>”字符串。这个问题导致压缩结果不能直接粘贴到html中（一般的做法，放到js中是没有问题的）。<br /><br />不过这也确实是个问题，这辆个问题都是问题，前者已经解决了，后者我也将在下次发布之前解决。<br /><br /><br />原帖：<br /><div class="quote_title">引用</div><div class="quote_div">错误原因：<a href="http://hi.baidu.com/jindw/blog/item/6aa695355835e11491ef39d6.html/cmtid/47dd9618b4531cb14aedbc90" target="_blank">http://hi.baidu.com/jindw/blog/item/6aa695355835e11491ef39d6.html/cmtid/47dd9618b4531cb14aedbc90</a><br /><br /><br />这个错误已经在新版本的JSA中解决，但是因为图形界面尚未完工，所以还不能发布。</div>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/190715#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 07 May 2008 21:15:26 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/190715</link>
        <guid>http://jindw.javaeye.com/blog/190715</guid>
      </item>
          <item>
        <title>技术人成长的阶段特征</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/189505" style="color:red;">http://jindw.javaeye.com/blog/189505</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <ol><li>   <strong>不敢否认</strong>－－自己的知识面还不够宽阔，自我不够自信，表现比较谦虚。</li><li>   <strong>自我否认</strong>－－这是一个快速提升的阶段，开始发现自己的不足，否认过去，才能有将来的进步。</li><li>    <strong>否认他人</strong>－－有了一定的认识深度和广度，有自己思维套路和行事风格，形成了自我的评价体系，但是看待问题往往不能兼顾事物的多面性，感觉这个世界“不完美”的事情太多。这个时候最容易犯和潘长江比身高一类的错误。</li><li>    <strong>不再否认</strong>－－。。。。。</li></ol><br />大部分是自我描述，大家看看是否如此？
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/189505#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 20:20:11 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/189505</link>
        <guid>http://jindw.javaeye.com/blog/189505</guid>
      </item>
          <item>
        <title>发布一个JSI Example Project</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/188433" style="color:red;">http://jindw.javaeye.com/blog/188433</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          部署到Tomcat中，打开script目录，可以显示你当前script目录下全部托管脚本的API试图。<br /><br /><strong>导出功能介绍：</strong><br /><ol><li>导出成jsidoc文档 （单个文件）</li><li>合并脚本（可以选择不同的隔离级别）</li></ol>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/188433#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 30 Apr 2008 14:58:57 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/188433</link>
        <guid>http://jindw.javaeye.com/blog/188433</guid>
      </item>
          <item>
        <title>JSI Side 代码风格与规范</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/188191" style="color:red;">http://jindw.javaeye.com/blog/188191</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>准备编写JSI的外围元素，先整理一下编码风格和一些约定，欢迎大家讨论。</p>
<h2>基本风格</h2>
<p>
&nbsp;&nbsp;&nbsp; * <strong>基本参照Java代码风格。</strong>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 驼峰式命名（单词无连接字符，单词首字母大写，其余小写）；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 类的首字母大写(eg:MyClass)；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 变量名，方法名，成员名首字母小写(eg:name,value,targetObject)；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. 单例对象遵循类的命名方式(eg:GlobalController)；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. 常量全部大写，下划线分割单词(eg:APPLICATION_ID)；<br />
<br />
&nbsp;&nbsp;&nbsp; 参考：http://java.sun.com/docs/codeconv/ <br />
<br />
&nbsp;&nbsp;&nbsp; * <strong>变量所用单词尽量不用缩写。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 缩写的单词容易造成语意的不明，不易阅读，而且容易造成争议。</p>
<h2>
编码约定</h2>
<p>
<br />
&nbsp;&nbsp;<strong>&nbsp; * 不要随意扩展原始对象。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 自Prototype
起，扩展原始对象似乎成了一个时髦的东西，大家都喜欢用。我承认他的便捷，但是请不要滥用，尽量做到有标准可循（比如为IE5扩展
Array.prototype.push），原始对象就这么几个，万一那天碰到两个人写的代码，行为不一致，那麻烦就大了。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 不要扩展Object.prototype。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 这个地雷貌似已经被头大牛踩到，但是你不要踩，谁踩到他，你就和他割席断交吧。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 不要盯上对象的constructor属性。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; constructor属性是非常不可靠的，很容易也经常被改写，而且经常被改写到Object对象[MyClass.prototype = {...}]，能后你以为是你的构造器，动之，能后天下大乱。 <br />
<strong><br />
&nbsp;&nbsp;&nbsp; * 不要写那些中看不中用的集合。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 不要模仿Java 集合API，去写什么 HashMap，ArrayList。JavaScript不相信这些，这个世界简单才是硬道理。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 在结构中始终使用区块。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 莫偷懒，省略区块（即{ }）会引发不经意的错误和麻烦。即使只有一句，也老老实实写上： <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 单例模式直接使用对象申明。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 我们不需要那个不中用的构造函数, 不如直接来个对象申明，直接定义属性。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 变量名就是最好的文档。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 不要担心变量名称的长度,他们只是一个符号，符号的意义在于表明变量的意义，而大小的事就交给压缩工具吧。比如，可以使用thisPackage，targetPackage；而不要用pkg1，pkg2。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 表达式中赋值需要明确注释。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 直接在表达式中赋值可以使代码紧凑，但会降低程序可读性，应尽量避免，但是对于一些关键元素,可以采用（压缩/优化考虑），但必须明确注释。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 目录名以&quot;/&quot;结尾。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; JSI内核中，有一些地方需要记录目录地址。这里我们统一以&ldquo;/&rdquo;结尾。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 不要使用原始类型的对象量。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 原始对象有些诡异的地方，如。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new String(&quot;test&quot;) != new String(&quot;test&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(new Boolean(false)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(&quot;执行到&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(&quot;未被执行&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; 对外接口可以考虑兼容，但是内部元素，不考虑，内部也不要使用这些对象。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 杜绝变量悬空现象<br />
</strong>
<br />
&nbsp;&nbsp;&nbsp; 不要出现:<br />
<br />
&nbsp;&nbsp;&nbsp; if (!window.Element){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var Element = new Object();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; 改成：</p>
<p>
&nbsp;&nbsp;&nbsp; var Element = window.Element || new Object();</p>
<p><br />
&nbsp;&nbsp;&nbsp; 这段代码来自大名鼎鼎的Prototype，这里没错，但是如果被拷贝到某个函数内，问题就大了，有此类问题的脚本，放在JSI中装载，也会存在问题。 </p>
<h2><br />
一些诡异的技巧</h2>
<p>
<br />
<strong>
&nbsp;&nbsp;&nbsp; * {}就是Map</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 哪简单对象当map是个非常方便的地方，缺点是key都被转化成string。但是大多数情况下还是够用的，简单就好，没必要复杂化。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * []用作LinkedHashMap</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 使用数组保存键的顺序，对象存储键的值，基本可以等价于LinkedHashMap结构。缺点是有上，同时，length不能为键。 <br />
<strong><br />
&nbsp;&nbsp;&nbsp; * 使用constructor == String代替typeof</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 上面说到constructor不可靠，是的，但是constructor用来代替typeof，一般来说更可靠了。还可以同时做好对象类型和值类型的兼容。 <br />
<strong><br />
&nbsp;&nbsp;&nbsp; * 巧用与或。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(fn){</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fn();</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fn&amp;&amp;fn();</p>
<h2><br />
慎用动态元素</h2>
<p>
<br />
<strong>
&nbsp;&nbsp;&nbsp; * eval</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; eval的性能问题到不是主要的，主要理由依然是他的动态性，容易给程序带来不稳定因素。 <br />
<strong><br />
&nbsp;&nbsp;&nbsp; * with</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 少用with，主要不是他的性能问题，其实with的性能问题并不太明显，但是他容易给程序带来不稳定因素。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * execScript</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 类似eval，ie上通行，不同之处在于他是一个上下文无关的eval，传入的脚本直接在全局上下文执行。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * document.write</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 当打印一段脚本标签时，近似等价与execScript <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * new Function</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 不仅是动态元素，他同时还有一个上下文短路问题。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * 少用属性。</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp;
属性虽然是面向对象的常用元素，但JavaScript?属性的动态性太强，不便自动优化处理；同时属性的使用，将产生更多不稳定的状态，虽然貌似易于阅
读，却增加了程序的复杂性。实际编码中应该谨慎。常量性质的私有属性不要出现，能用变量的地方也不要随意升级为属性。 <br />
<br />
<strong>
&nbsp;&nbsp;&nbsp; * window.xyz</strong>
<br />
<br />
&nbsp;&nbsp;&nbsp; 有些人习惯用这个来申明全局变量，或者干脆不申明， 那么，改掉你的坏习惯。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/188191#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 29 Apr 2008 22:07:09 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/188191</link>
        <guid>http://jindw.javaeye.com/blog/188191</guid>
      </item>
          <item>
        <title>关于Eclipse 下的Ant FTP操作</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/186931" style="color:red;">http://jindw.javaeye.com/blog/186931</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          编写一个部署脚本，需要吧打包的war文件上传到服务器上。<br /><br />以前一直都是用默认的ftp task<br /><br />但是，在eclipse下，这个task是依赖的类库并没有提供，我们必须吧相关jar文件拷贝到 ant 插件的库路径中。<br />这个就很麻烦了，我们不应让每个新同事都如此繁琐的设置。<br /><br />我现在的办法是：<br /><pre name="code" class="java">
        &lt;exec dir="build" executable="ftp">
            &lt;arg value="-s:${basedir}/build/ftp.txt"/>
        &lt;/exec>
</pre><br />需要一个额外的ftp.txt文件。<br /><pre name="code" class="java">
open xx.yy.com
uploader
******
put dest/platform.war
quit 

</pre><br />大家还有其他办法不？
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/186931#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 21:05:01 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/186931</link>
        <guid>http://jindw.javaeye.com/blog/186931</guid>
      </item>
          <item>
        <title>《如何做开源项目——ABC》 读后感</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/186326" style="color:red;">http://jindw.javaeye.com/blog/186326</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          文章出自不祥，内容如下：<br /><br /><div class="quote_title">引用</div><div class="quote_div"><br />谈开源不能不谈免费，现在国内几乎所有的所谓开源软件，根本不具备任何开源特征，对开源领域及计算机业的奉献甚少。比如Discuz一类的论坛什么的。<br />他们都抓住了人贪婪的本性，一味的将开源同免费划成等号。我们今天就不详细讲述他们的罪过，我们在这里讲讲，假如你想做开源你需要做好什么样的心理和技<br />术的准备。<br /><br />心理准备：<br />1、做的时候就要考虑好你的项目要发展10年甚至100年。长期的考虑可以更好的规划你的项目，放下浮躁的心态，认真的做事情。<br /><br />一个开源项目同一个公司的项目不同。公司的项目是计划式项目，利益为目的，如果公司破产或业务改变那么项目就可能会取消。而开源项目不一定，很多项目都<br />是由爱好者发起维护的，你要准备好即使你离开，这个项目也会继续，一个项目的发展目的不仅仅是为了你个人（当然你出发点可能是为了个人，但是项目能否存<br />活关键一点在于心态）。<br /><br />2、万事怀着感恩的心。宽待别人，善于倾听别人的意见，但同时也要保证自己的设计思路不被打乱。<br /><br />一定要倾听别人的意见，但是作为项目的执行者，要以自己的理解为准则。不要怕自己做错了，做的不好。记住你有10年的时间来使项目完善。一个项目如果想<br />发展起来一定是有很多人参与的，所以不要做一言堂。<br /><br />3、尊重合约。不是要求别人尊重你的合约，而是尊重他人的。不偷窃他人的代码，尊重微软这类公司，对盗版憎恨。这是做开源的基础，如果做不到，恐怕你还<br />需要学习。建议，如果有时间请先看过圣经，在圣经中你会学习信用是多么重要的。<br /><br />开源最大的敌人是谁？不是商业软件，不是微软，是盗版。如果你想别人尊重你的劳动成果你现在就应该尊重微软这类公司。我们现在不是土匪时代（英雄时<br />代），盗版不利于我们的科技进步，人人想着不劳而获，贪婪不要占据你全身。尊重合同，可以得到所有人的尊重，因此请注意，如果你要抄袭别人代码。请为他<br />们保留版权说明，别啥都是你做的。你也想搞个小汉芯吗？<br /><br />4、作好心态，不论你是为了盈利你还是为了兴趣，做开源就要做好心态，你要允许别人在没给你任何好处的时候利用你的成果获利。<br /><br />不论你是为了盈利，还是为了兴趣，只要不违背开源的精神，你对这个行业都有贡献。请不要做的太自私，既然开源的就要让大家共同享受知识带来的好处，不然<br />你开源干吗，还是继续去搞“免费软件”吧。<br /><br />5、不要相信那些说“我愿意参加你的项目，我希望参与工作”的人，真正参与项目的人从来不会表态他只会给你一个patch然后告诉你你代码有什么问<br />题。<br /><br />根据多年的经验，以及多次项目的失败总结，基本上热火朝天的跟你说这句话的人，根本对你一点帮助也没有。真正愿意参与做事情的人，是不会说这句话的。这<br />不仅仅在国内，在海外也是有这个特点的。<br /><br />技术准备：<br /><br />你可以选择sourceforge.net或是你自己弄服务器做开源，不论怎么样。不是简单有个下载，有个web就叫开源的，你需要一些工具来帮助<br />你：<br /><br />1.WIKI<br />你的网站可以采用WIKI这样可以方便参与者编辑修改页面，尤其是编写文档的时候很重要。当然国内的垃圾广告太厉害了，如果你是中文网站，就做上权限<br />吧。我推荐你可以使用dokuwiki来做。<br /><br />2.BugTracker<br />作为一个长期发展的项目，你总的做计划吧，你总的允许别人向你报告错误吧。你需要一个缺陷跟踪系统。如果你系统有什么问题或别人对你系统有什么需求，他<br />可以在bug tracker里发出需求。推荐你使用mantis这个代码是php编写的很简单容易使用。<br /><br />3.SVN<br />你需要协同工作，就一定需要一个SVN现在几乎所有的项目都有自己的SVN仓，SVN不仅仅可以协同工作。他还可以对你的代码做历史记录。网上可以下载<br />到svn的中文pdf 你搜索一下看看。<br /><br />4.Maillist或是BBS<br />有这样一个特点，老外是习惯使用Maillist的，而中国人习惯使用BBS。所以根据你自己的需要给项目选择一个沟通方式。<br /><br />5.QQ或IRC<br />如果你项目针对国内，建立一个QQ群是很重要的。当然你也可以建立一个IRC房间，上www.freenode.org上去申请一个，所有的大型项目都<br />在freenode上有实时的讨论组。<br /><br />有了以上，你还需要怎么做？很简单，开始干事情，别记得请别人加入项目。记得你是要发展10年，你的项目只要做的好，做一些简单的宣传，很快就有人找上<br />门来了。<br />6.GPLv2/LGPL/MPL.....想好用什么协议<br />你当然可以自己“开创”一些协议，不过我建议你使用一些标准的协议，这些协议精力了时间的磨练，并且在法律和道德的问题上他们更能经的住考验。协议很<br />多，每个厂家比如SUN都有自己的或APACHE也有自己的。但是目前最流行的还是GPLv2 LGPL MPL等。<br /></div><br /><br />个人感觉，做开源项目，首先要有真正有意义的想法（自认为即可），开源项目是一个长期的投入，如果只是一个简单平庸的主意，还是别让费时间的好，我们可以去做的事情太多，我们没有那么多的时间面面具到。<br /><br />然后摆正心态，你不要指望它可以一夜成名，或许它将来可以给你带来一些名气，但是，任何事情都要一个发展的过程，任何想法大家都需要一个接受的时间。何况是开源项目（如果价值在任何人面前，都一目了然了，也许他就不应该是一个开源项目）。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/186326#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Thu, 24 Apr 2008 12:06:30 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/186326</link>
        <guid>http://jindw.javaeye.com/blog/186326</guid>
      </item>
          <item>
        <title>请教Mozilla自定义标签的解析的问题。</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/182706" style="color:red;">http://jindw.javaeye.com/blog/182706</a>&nbsp;
          发表时间: 2008年04月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天重新考虑JSI装饰引擎的事情。<br /><br />一个一年多前的老问题：<br /><br />我在html中嵌入如下自定义标记：<br />&lt;ns:test> &lt;div>test&lt;/div> &lt;/ns:test><br />Mozilla 浏览器将解析为: &lt;ns:test>&lt;/ns:test> &lt;div>test&lt;/div><br />而不是我们想当然的：&lt;ns:test> &lt;div>test&lt;/div> &lt;/ns:test><br /><br />这样一来，JSI的装饰引擎就无法装饰这些div，table之类的块元素（现在的办法是在他们外面套一个span，极不优雅）<br /><br />Google了半天没有找到任何解决办法。<br /><br />倒是找到一个与我同样的问题：<br />http://groups.google.com/group/mozilla.dev.apps.firefox/browse_thread/thread/921eb0451e5ed66c<br /><br />在这里问问大家，有没有谁考虑过这个问题呢？<br />最好有解决办法，那就不胜感激了，^_^
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/182706#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Mon, 14 Apr 2008 20:59:47 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/182706</link>
        <guid>http://jindw.javaeye.com/blog/182706</guid>
      </item>
          <item>
        <title>2008年我可以做一些什么</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/164607" style="color:red;">http://jindw.javaeye.com/blog/164607</a>&nbsp;
          发表时间: 2008年02月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1。寻找值得合作的人。<br />2。完成<a href="http://hi.baidu.com/jindw/blog/item/3af1f5ddd8ba15eb77c63810.html" target="_blank">JSI IDE</a>的计划。<br />3。初步完成前端模板编译系统。<br />4。建立JSI开发社区，推广JSI的开发模式。<br />5。关心一下技术之外的事情...<br /><br />本来就是个没有计划的人，现在就想到这些了，再想到再补充
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/164607#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 24 Feb 2008 18:42:39 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/164607</link>
        <guid>http://jindw.javaeye.com/blog/164607</guid>
      </item>
          <item>
        <title>给大家展示一下JSI文档工具和导出工具</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/163856" style="color:red;">http://jindw.javaeye.com/blog/163856</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>演示地址(<strong>目前只支持Firefox</strong>):</p><p>&nbsp;</p><p><a href="http://www.xidea.org/project/jsidoc/#http%3A%2F%2Fwww.xidea.org%2Fproject%2Fjsidoc%2Fstyles%2Fexport.html">http://www.xidea.org/project/jsidoc/</a></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div>
<h3>基本功能</h3>
<ul><li><span class="access">API查阅</span>:
   该程序可以通过脚本源代码及注释,自动适时生成对应的JavaScript API文档。</li><li><span class="access">源码浏览</span>:
   你可以通过API文档内连接,进入相关实现代码。</li><li><strong><span class="access">脚本导出</span>:
   </strong>导出工具可以更据JSI的包文件,以正确的顺序,自动导出选中的脚本元素及其依赖。</li></ul><br />
</div><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/163856#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Feb 2008 11:43:54 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/163856</link>
        <guid>http://jindw.javaeye.com/blog/163856</guid>
      </item>
          <item>
        <title>JSI的延迟装载和异步装载过程的一些原理解释</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/162280" style="color:red;">http://jindw.javaeye.com/blog/162280</a>&nbsp;
          发表时间: 2008年02月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          出自该贴的回复:<br />http://www.javaeye.com/topic/161609<br /><br />JSI的延迟装载和异步装载过程非常相似.<br /><br />他们的实现是这样的:<br />1.计算出全部未装载的依赖,并将依赖加入缓存.<br />2.执行同步装载.<br /><br />其实所有的三种装载方式,原理都是一样的,只不过非同步装载在真正装载前有个预处理.<br />而异步装载和延迟装载的区别也就在于预处理过程中如何缓存脚本.<br />异步装载就是直接xhr异步读取js文件,加入JSI的脚本缓存.<br />而延迟模式就略显麻烦了,如hax所言,他是通过打印一段引用脚本,脚本文件的内容就是用闭包封起来的源代码.<br /><pre name="code" class="java">
$JSI.addCacheScript("mypkg","hello.js",function(){eval(this.varText)/**
 * helllo world 函数
 */
function hello(){
    alert("hello world")
}
})
</pre><br />而这段脚本的生成,我们可以在脚本打包时自动生成.<br />如果在调试期间,我们不希望每次修改都去运行任务,我们可以用一个jsp代理或者一个servlet过滤器去做相关的文本处理,同时还可以确保转换后的脚本与源文件行数完全对应,这就是JSI对于调试友好实现的基本原理.<br /><br />其中:eval(this.varText)这句时jsi里面比较关键的一点,他除了申明依赖之外,还构造了一个钩子函数.<br />能后外界就可以控制装载单元的内容了.如:注入装载后依赖.
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/162280#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Feb 2008 17:13:12 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/162280</link>
        <guid>http://jindw.javaeye.com/blog/162280</guid>
      </item>
          <item>
        <title>补充一下2007年度总结</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/162146" style="color:red;">http://jindw.javaeye.com/blog/162146</a>&nbsp;
          发表时间: 2008年02月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天下午刚刚被人嘲笑说，我是个总是慢半拍的家伙。呵呵，真是如此。<br /><br />2007年，总的来说是失败的。<br /><br />首先是窝在老家荒废了大半年。<br />9月份才迟迟出来从江西老家出来，开始现在这份工作。<br />从一个纯粹的后端程序员，转向前端开发。<br /><br />变化如此之大，面临的风险也很大，不单是技术上的问题。<br />不同人群的关注点、思维方式，都有着显著的区别。<br />工作上让我感受到前所未有的孤立。<br />在各种复杂的问题前面寻找一种平衡，让自己倍感疲惫。<br /><br />本来也想在现在的岗位好好做出一点成绩。<br />可是事与愿违，不懂得大公司的政治环境。最后只能落个为他人做嫁衣裳的结果。<br /><br />有些失望，迷茫。<br />无法改变环境，那就适应环境吧，等待、守候、沉默。<br />先保护好自己，等待适合的时机适合的伙伴。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/162146#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Feb 2008 23:22:47 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/162146</link>
        <guid>http://jindw.javaeye.com/blog/162146</guid>
      </item>
          <item>
        <title>动态装载脚本的调试问题</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/161951" style="color:red;">http://jindw.javaeye.com/blog/161951</a>&nbsp;
          发表时间: 2008年02月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="postbody clearfix"> 
      
      <p>一个论坛回复,粘贴过来.</p><p>&nbsp;</p><p>&nbsp;</p><blockquote><p>关于调试问题，同类动态装载脚本的实现都有类似问题。</p><p>这个问题在JSI中有一些解决办法，先给大家截个图。</p><p>&nbsp;</p><p>这时<a href="http://www.javaeye.com/topic/152188">JSI2.1</a>在firebug上做脚本调试时的截图，我们可以轻松定位到没个源文件，可以在其中设置断点，一旦有错误，可以准确定位到准确行数。</p><p>PS:<a href="http://www.javaeye.com/topic/152188">JSI2.1 </a>以基本开发完成，将择日发布</p><p>&nbsp;</p><p>&nbsp;<img src="http://www.javaeye.com/topics/download/ac3e773f-5e17-3eb5-8a2c-9ef057a4e9a0" alt="" /></p></blockquote>
    </div>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/161951#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Feb 2008 16:13:19 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/161951</link>
        <guid>http://jindw.javaeye.com/blog/161951</guid>
      </item>
          <item>
        <title>JSIDoc设计的两个失败点</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/161639" style="color:red;">http://jindw.javaeye.com/blog/161639</a>&nbsp;
          发表时间: 2008年02月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JSIDoc是我一年前开发的用来解析JS文档的纯客户端脚本程序。<br />
<br />
现在随着JSI2的重构，已经好久没有跟进了，今天回头看看。<br />
<br />
很多设计实在是失误，记录一下：<br />
<br />
<br />
<br />
<strong>SourceEntry作为ECMAParser的子类</strong>：非常失败，导致SourceEntry非常复杂，回头一看，头大！<br />
如果使用组合，这种局面就不会发生。<br />
总结：不要滥用继承。特别是JavaScript这种弱类型语言，成员多了，鬼知道他们在干什么。<br />
<br />
<strong>JSDoc作为类</strong>：算是比较失败吧，如果用单例，很多东西可以简化。<br />
总结：不要总去假设一些没有的需求，宁可新需求到达后重构，甚至重写。<br />
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/161639#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 08 Feb 2008 00:11:06 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/161639</link>
        <guid>http://jindw.javaeye.com/blog/161639</guid>
      </item>
          <item>
        <title>JSI的导入指令参数顺序调整意见征询</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/161609" style="color:red;">http://jindw.javaeye.com/blog/161609</a>&nbsp;
          发表时间: 2008年02月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h4>改动</h4><blockquote><p>&nbsp;
2.0方式：<br />
</p><div style="border-style: dotted dotted dotted solid; border-color: #8394b2; border-width: 1px 1px 1px 4px; padding: 3px; background: #fafcfe none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">$import(path,callbackOrLazyLoad,<strong><span style="color: #ff0000">target</span></strong>)</div><br /><br />
调整成(将<span style="color: #ff0000"><strong>target</strong></span>参数提前)<br /><div style="border-style: dotted dotted dotted solid; border-color: #8394b2; border-width: 1px 1px 1px 4px; padding: 3px; background: #fafcfe none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">/** <br />&nbsp;* @param &lt;string&gt; path (package:Object|package.Object|package.*| scriptPath) <br />&nbsp;* @param &lt; Object&gt; target
可选参数，指定导入容器。<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当该参数为有效对象时(instanceof Object &amp;&amp; not instanceof Function)，导入的元素将赋值成其属性；<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当该参数未指定时
(arguments.length==1)， target为全局变量容器,这种情况等价于直接声明的全局变量。 <br />&nbsp;* @param &lt;boolean|Function&gt; col callbackOrLazyLoad 可选参数,默认为null。<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果其值为函数，表示异步导入模式；<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果其值为真，表示延迟同步导入模式，否则为即时同步导入（默认如此）。 <br />&nbsp;*/  <br />
$import(path,<span style="color: #ff0000"><strong>target</strong></span>,col)</div><br /></blockquote>




<br />
<strong><br /></strong><h4>
理由：</h4><blockquote>
延迟装载和异步装载并不常用。<br />
而target紧跟path似乎更合逻辑。<br /></blockquote><p>&nbsp;</p><h4>
不妥之处：</h4><blockquote>
对于target的处理：<br />
以前的办法：当制定null时，是不会将导入的对象拉出来的，只有没有指定target的时候，才会使用global(window)对象（arguments.length&lt;=2）。<br />
而现在，一但指定了callbackOrLazyLoad，target就必须指定了，这个时候，如何去处理还没想好。<br /></blockquote><p>&nbsp;</p><h4>
JSI开发现状：</h4><blockquote>
<a href="http://xidea.cvs.sourceforge.net/xidea/JSI2/web/source/boot-core.js?view=markup" target="_blank">http://xidea.cvs.sourceforge.net/xidea/JSI2/web/source/boot-core.js?view=markup</a><br />
目前主要的发展方向是开发环境支持、简化内核。 <br />
一切向易用、简单、性能方向考虑；避免过渡设计。<br />
2.0版，启动文件压缩后近<strong>30k</strong><br /><br />
2.1彻底清理了一些不常用的功能，同时，将一些非必要的功能，作为可选项。<br />
最小版本压缩后不到<strong>5k</strong>（未启用文本压缩）。</blockquote><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/161609#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Thu, 07 Feb 2008 17:20:18 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/161609</link>
        <guid>http://jindw.javaeye.com/blog/161609</guid>
      </item>
          <item>
        <title>JSI2.1计划</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/152188" style="color:red;">http://jindw.javaeye.com/blog/152188</a>&nbsp;
          发表时间: 2008年01月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先回顾历史：<br />
JSI1（2006-2007）是个简单的框架，只有脚本级别的依赖管理，只有阻塞同步装载模式。<br />
<br />
JSI2 （2007-2008）是个庞然大物，同步装载，异步装载，延迟装载，装饰引擎。。。。。<br />
网撒的太宽，而且学习曲线也非常陡峭。<br />
<br />
JSI2.1 新的2008，JSI2也打算做点改进。<br />
时至今日， JSI已经有两年多的历史了，自己也在大大小小的项目中有了不少实践，普遍的反映是。内核庞大。依赖管理复杂，难以掌握。<br />
<br />
确实，JSI的依赖管理非常复杂，而且内核源码的组织也不够完美。装饰引擎，异步装载，等等，全部混合在一起，别说他人，我自己看着也头晕。当时的借口：压缩优化。得了，为了压缩损失代码的可读性，实在是有点笨。改吧：<br />
初步决定的重构点如下。<br />
<br />
<strong>1。新的定位</strong><br />
以前都吧JSI定位成运行时的脚本管理，经过一年多的实践，发现，让他作为开发期的脚本管理更有价值。因其无侵入的特征，开发结束后，导出脚本就是。光脚的不怕穿鞋的，没有装载器的束缚，跑的更快。<br />
<br />
<strong>2。去除js.*.*包，内核不包括任何托管脚本。</strong><br />
JSI2中有些包是内核用到的，比如异步装载就需要队列管理（js.util.TaskQueue）。<br />
还有，总想写一些大家能公用的基础包，实事证明，没那个必要，保留框架的简单最重要，这次重构的目标之一就是吧引导文件控制在10k以内（补充一下第一
条，我虽然吧JSI做成开发期的脚本管理框架，运行时同样支持，10k的附加引导文件，轻微的装载开销，我想还是能被大多数用户接受的）。<br />
<br />
<strong>3。把装饰引擎和异步装载延迟装载从内核中剥离。</strong><br />
JSI的一个重要目标是无侵入，当时这个已经给依赖管理变得复杂了，而我们还吧这一堆东西困在一起，导致一个core.js就达到了2000行的代码，实在有点过。重新规划。<br />
<table border="0" cellspacing="0" cellpadding="0">
	<tbody>
		<tr>
			<td>
			<p>
			boot-core.js
			</p>
			</td>
			<td>简单内核</td>
		</tr>
		<tr bgcolor="#f8f8f8">
			<td>
			<p>
			boot-lazy.js
			</p>
			</td>
			<td>
			<p>
			扩展简单内核中的import函数，令其支持异步和延迟两种装载模式
			</p>
			</td>
		</tr>
		<tr>
			<td>
			<p>
			boot-decorator.js
			</p>
			</td>
			<td>
			<p>
			装饰引擎支持。
			</p>
			</td>
		</tr>
	</tbody>
</table>
<br />
后两个脚本是可选的，如opoa中，我们理当吧全部脚本打包在一起，这时，就完全没有异步装载和延迟装载的必要。而装饰引擎更是没必要强行推销。<br />
<br />
<strong>4。删除CSS导入功能，删除内置日志功能。</strong><br />
JSI的内核已经够庞大了，这些不常用的功能就不要给我添乱了^_^<br />
<br />
<strong>5。重构脚本定义函数</strong><br />
原来用于脚本管理的函数有:<br />
<pre name="code" class="js">
this.addScript(file,objects)
this.addObjectDependence(object,
dependenceObject,
isBeforeLoadDependence);
this.addScriptDependence(script, dependenceScript, isBeforeLoadDependence);
this.addObjectScriptDependence(object, dependenceScript, isBeforeLoadDependence);
this.addScriptObjectDependence(script, dependenceObject, isBeforeLoadDependence);
</pre>
&nbsp;<br />
<br />
好复杂啊，重构成:<br />
<pre name="code" class="js">
this.addScript(file,objects,beforeLoadDependences,afterLoadDependences)
this.addDependence(object,
dependenceObject,
isBeforeLoadDependence);
</pre>
<p>
&nbsp;<br />
<br />
重构理由：<br />
把添加脚本和添加依赖放在一起，更加简单方便了。不过，这样我们只能添加整个脚本的依赖，如果要添加单个对象的装载后依赖（很少见），还是的借助addDependence函数。<br />
四个添加脚本依赖函数，没必要吧？到底是脚本依赖还是对象依赖完全可以自动探测，何必给用户添加麻烦。<br />
<br />
<strong>6。脚本定义时*模式的支持（调试模式）。</strong><br />
很多人都认为JSI的包定义语法有些复杂，比如我们定义一个脚本，还需要指出我脚本里面的元素名称，那些东西我都在源文件里var function什么的都申明了啊！！<br />
确实，如果你只是想吧你在源文件中申明的东西全部暴露出来，我们一直都没有一个简单有效的办法，现在，我们将引入*模式。<br />
包定义实例：
</p>
<p>
&nbsp;
</p>
<div style="border-style: dotted dotted dotted solid; border-color: #8394b2; border-width: 1px 1px 1px 4px; padding: 3px; background: #fafcfe none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial">
this.addScript('youscript.js','*')
</div>
关于实现，这确实是个大问题，我们需要用脚本分析你的js文件，找出你定义的全部变量、函数。是个较大的开销。所以，我们只能在调试模式下支持该功能，产品发布时，可以在脚本编译时计算出准确的变量名称数据。<br />
<br />
<strong>7。异步装载和延迟装载的优化。</strong><br />
首先，我决定取消包的非即时装载功能，理由，包定义文件本来就很小，没必要。而且一旦放开了这一枷锁，实现将简单很多很多。<br />
<br />
<strong>8。调试支持附加功能<br />
</strong>调试支持涉及到很多的内容。<br />
1。IE7原生XHR不支持本地文件访问。这样一来无法本地调试，所以，我们还要为IE7做特殊处理。<br />
2。延迟装载的调试时最友好的，应为它不是用eval装载的脚本，可以很方便的找到出错位置。但是，这需要编译支持的，我们不能修改后马上见效。这样，我们就可以借助非ie浏览器支持的data协议，脚本内编译预装载脚本。<br />
。。。。<br />
这些东西，开发期的东西，写的大一点，多一点，升值性能低一点，无所谓。上线时踢出了照常运行^_^<br />
<br />
<br />
<br />
<strong><br />
此外，我还打算支持一些其他装载模式。</strong><br />
比如，我们可以吧JSI以最简单的方式工作，如，不需要装载单元的隔离。<br />
不需要依赖管理<br />
这样虽然有点退化的感觉，不过也是一种普及JSI的办法，JSI的思想有点超前了，曲高和寡，不如做点简单的东西，让大众也能接受东西。<br />
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/152188#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jan 2008 21:13:59 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/152188</link>
        <guid>http://jindw.javaeye.com/blog/152188</guid>
      </item>
          <item>
        <title>MSXML2家族探秘</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/152054" style="color:red;">http://jindw.javaeye.com/blog/152054</a>&nbsp;
          发表时间: 2007年12月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="cnt">客户端程序编写免不了经常接触XMLHttpRequest对象。<br />
微软的XHR实现的progid又是一串一串的。 烦人。抽一个中午时间，找了找资料，整理记录如下：<br />
<br />
<strong> &quot;Microsoft.XMLHTTP&quot;</strong><br />
最早的XHR实现。微软官网上说这是MSXML 2.x系列版本的progid。<br />
2.x 系列progid是不带版本号的。看起来简单清楚。<br />
<div align="center" style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178) rgb(131, 148, 178) -moz-use-text-color; border-width: 1px 1px 0px 4px; padding: 5px; background: rgb(234, 236, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90px; color: blue;"><strong>引用：</strong></div>
<div style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178); border-width: 1px 1px 1px 4px; padding: 3px; background: rgb(250, 252, 254) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p>MSXML 2.6 was shipped with SQL Server 2000 and MDAC 2.6 and is provided in Windows or other service pack updates provided by Microsoft.</p>
<p>MSXML 2.6 installs in replace mode only.</p>
</div>
<strong><br />
</strong><br />
<strong> &quot;MSXML2.XMLHTTP&quot;</strong><br />
MSXML 3.0 的progid，<br />
<strong>&quot;MSXML2.XMLHTTP.3.0&quot;</strong><br />
也是MSXML 3.0 的，应该等价于MSXML2.XMLHTTP；这时，可能是感觉到那种不带版本号的progid，在升级后造成的兼容性问题，以后的更新版本的progid都可以带上版本好吗。<br />
<div align="center" style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178) rgb(131, 148, 178) -moz-use-text-color; border-width: 1px 1px 0px 4px; padding: 5px; background: rgb(234, 236, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90px; color: blue;"><strong>引用：</strong></div>
<div style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178); border-width: 1px 1px 1px 4px; padding: 3px; background: rgb(250, 252, 254) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p>MSXML 3.0 is provided as a required component with a number of Microsoft products, such as Microsoft Visual Studio and Microsoft Office. It is also a system component for current versions of Microsoft Windows.</p>
<p>MSXML 3.0 SP2 or later installs in replace mode only. (Note: you do not need to run xmlinst.exe utility when updating to this version of MSXML 3.0)</p>
</div>
<strong><br />
</strong><strong><br />
</strong><br />
<strong> &quot;Msxml2.XMLHTTP.4.0&quot;</strong><br />
此后的版本，都带上了版本号码，可能是为了应对程序员懒散的习惯（不喜欢带那个版本号），不提供以前那种无版本后缀的progid了。<br />
<div align="center" style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178) rgb(131, 148, 178) -moz-use-text-color; border-width: 1px 1px 0px 4px; padding: 5px; background: rgb(234, 236, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90px; color: blue;"><strong>引用：</strong></div>
<div style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178); border-width: 1px 1px 1px 4px; padding: 3px; background: rgb(250, 252, 254) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p>MSXML 4.0 is a separate download that was released by Microsoft in October 2001. The latest or current service pack release of MSXML 4.0 is available through the Microsoft Web site. MSXML 4.0 must be installed separately and is not currently included with other Microsoft products.</p>
<p>MSXML 4.0 installs side-by-side with earlier versions of MSXML without affecting any existing functionality.</p>
</div>
<strong><br />
&ldquo;Msxml2.XMLHTTP.5.0&quot;</strong><br />
<div align="center" style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178) rgb(131, 148, 178) -moz-use-text-color; border-width: 1px 1px 0px 4px; padding: 5px; background: rgb(234, 236, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90px; color: blue;"><strong>引用：</strong></div>
<div style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178); border-width: 1px 1px 1px 4px; padding: 3px; background: rgb(250, 252, 254) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p>MSXML 5.0 for Microsoft Office Applications is only available with current versions of Microsoft Office.</p>
<p>MSXML 5.0 for Microsoft Office Applications installs side-by-side with earlier versions of MSXML without affecting any existing functionality.</p>
</div>
<br />
<strong> &quot;Msxml2.XMLHTTP.6.0&quot;</strong><strong><br />
</strong>
<div align="center" style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178) rgb(131, 148, 178) -moz-use-text-color; border-width: 1px 1px 0px 4px; padding: 5px; background: rgb(234, 236, 238) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90px; color: blue;"><strong>引用：</strong></div>
<div style="border-style: dotted dotted dotted solid; border-color: rgb(131, 148, 178); border-width: 1px 1px 1px 4px; padding: 3px; background: rgb(250, 252, 254) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p>MSXML 6.0 is a separate download that was released by Microsoft in November 2005. The latest or current service pack release of MSXML 6.0 is available through the Microsoft Web site. MSXML 6.0 must be installed separately. It is included with SQL Server 2005.</p>
<p>MSXML 6.0 installs side-by-side with earlier versions of MSXML without affecting any existing functionality.</p>
</div>
<br />
<br />
这么多的实现，哪我们如何探测呢？一般来说，我们应该尽量采用更新的更常用的版本。<br />
我的选择是（摘自<a href="http://www.xidea.org/project/jsi" target="_blank">JSI</a>内核源码）：：<br />
<div class="code_title">
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.ActiveXObject&nbsp;&amp;&amp;&nbsp;!</span><span class="keyword">this</span><span>.XMLHttpRequest&nbsp;){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;xmlHttpRequstActiveIds&nbsp;=&nbsp;[&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;Microsoft.XMLHTTP&quot;</span><span class="comment">//IE5的，最早的XHR实现</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,<span class="string">&quot;MSXML2.XMLHTTP&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//,&quot;MSXML2.XMLHTTP.3.0&quot;//应该等价于MSXML2.XMLHTTP</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//,&quot;Msxml2.XMLHTTP.4.0&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,<span class="string">&quot;Msxml2.XMLHTTP.5.0&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//,&quot;Msxml2.XMLHTTP.6.0&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;];&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;xmlHttpRequstActiveId&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.XMLHttpRequest&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(xmlHttpRequstActiveId){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveXObject(xmlHttpRequstActiveId);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span class="keyword">else</span><span>{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;i=xmlHttpRequstActiveIds.length;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>(i&nbsp;--){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;impl&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveXObject(xmlHttpRequstActiveId&nbsp;=&nbsp;xmlHttpRequstActiveIds[i]);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlHttpRequstActiveIds&nbsp;=&nbsp;<span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;impl;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span class="keyword">catch</span><span>&nbsp;(e){}&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<br />
<strong><br />
<br />
<br />
</strong>参考：<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms762757" target="_blank">http://msdn2.microsoft.com/en-us/library/ms762757</a>(VS.85).aspx<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms761415" target="_blank">http://msdn2.microsoft.com/en-us/library/ms761415</a>(VS.85).aspx</div>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/152054#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Mon, 31 Dec 2007 14:39:34 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/152054</link>
        <guid>http://jindw.javaeye.com/blog/152054</guid>
      </item>
          <item>
        <title>JSA 压缩JS时的常见问题</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/151976" style="color:red;">http://jindw.javaeye.com/blog/151976</a>&nbsp;
          发表时间: 2007年12月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1。保留字滥用<br />
如果你的脚本中存在某些保留字或者关键字属性甚至变量名，那么，对不起，您的脚本无法通过解析。<br />
虽然大多数浏览器在这个时候会对你宽大处理，但是JSA不能，比如新浪编辑器里有一个float属性（其实那是错误写法，正确写法应该为<a href="../properties/float.html">styleFloat</a>）<br />
<br />
2。严格的正则语法<br />
JSA使用的是Rhino语法解析器，在正则处理时，哪怕在[]号内，依然需要对全部特殊字符转义。否则可能会出错。<br />
比如，如下表达式：<br />
<br />
<div class="dp-highlighter">
<ol start="1" class="dp-c">
    <li class="alt"><span><span>/[/]/.test('/')&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
它在大多数浏览器上，都能通过。<br />
但是Rhino解析器，则无法通过。<br />
我粗略过了一下ECMA规范的语法说明，这一点应该算Rhino实现的bug。
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-sql">
    <li class="alt"><span><span>ClassAtomNoDash&nbsp;::&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SourceCharacter&nbsp;but&nbsp;<span class="op">not</span><span>&nbsp;one&nbsp;</span><span class="keyword">of</span><span>\&nbsp;]&nbsp;-&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;ClassEscape&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/151976#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 30 Dec 2007 16:08:32 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/151976</link>
        <guid>http://jindw.javaeye.com/blog/151976</guid>
      </item>
          <item>
        <title>脚本合并时混淆隔离的三个级别</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/150262" style="color:red;">http://jindw.javaeye.com/blog/150262</a>&nbsp;
          发表时间: 2007年12月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>直接合并－－传统方式</strong><br />根据脚本依赖关系，组织好导入顺序，简单的合并成单个大文件。<br />这是最常见简单功能的一种合并方式。通常也不需要任何工具的支持。由程序员手动完成。<br /><strong>优点</strong>：简单<br /><strong>缺点</strong>：需要程序员自己管理脚本名称冲突。<br /><br /><br /><strong>间接依赖全局变量的隔离－－JSI运行时等价的隔离策略</strong><br />就是说，比如你在脚本包p1有一个脚本A 依赖脚本元素B，脚本元素B依赖仍外一个脚本包p2中的脚本元素A,如果你采用直接合并的话，两个包中都有一个名为A的元素，直接合并一定会产生冲突。<br />这时，就需要我们在最后导出发布脚本时，做好这种隔离操作。<br />如：我们正真直接使用的只是p1包中的A，那么这些元素导出前后变量名映射可能是：<br /><pre name="code" class="java">A(p1)->A
B(p1)->a_
A(p2)->b_</pre><br /><br /><strong>优点</strong>：借助外力，很好的解决了冲突问题。<br /><strong>缺点</strong>：支持工具实现比较复杂。<br /><br /><br /><strong>内部变量隔离合并－－简化版本</strong><br /><br />脚本文件A.js中可能由多个全局变量：A、 _temp、 index 、status。<br />但是，除A外，其他都是都不希望被其他脚本访问，就是说，虽然从JS语法上，他们也算全局变量。但是，我更愿意把他看作一种内部变量，或者说脚本文件内可以访问的变量。这里，我们称他们为内部变量（JSI中，未在包定义文件中添加的脚本元素，即是这种类型）<br />实事上。如果你习惯了由工具管理这些内部变量，那么，你一定会经常的使用他们，因为他们才是真正简单的JS私有元素实践。<br />如果我们的合并混淆器能达到这个隔离级别，那么我们就可以大胆的大量使用这类设计了。<br /><br /><br /><strong>优点</strong>：借助外力，解决了大部分冲突问题，支持工具实现相对简单。<br /><strong>缺点</strong>：支持工具实现依然比较复杂。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/150262#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 23 Dec 2007 13:38:07 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/150262</link>
        <guid>http://jindw.javaeye.com/blog/150262</guid>
      </item>
          <item>
        <title>eclipse正则表达式在编码过程中的运用</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/139672" style="color:red;">http://jindw.javaeye.com/blog/139672</a>&nbsp;
          发表时间: 2007年11月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚刚经历的一点小技巧，共享一下。<br />
<br />
1。给代理函数加上空判断<br />
<br />
一个组合模式的运用。代码如下：<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;Composite&nbsp;impliments&nbsp;IF1,IF2,IF3{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF1&nbsp;if1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;Composite&nbsp;(if1,if2,if3){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
eclipse 生成指代方法&gt;&gt;&gt;&gt;<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;Composite&nbsp;impliments&nbsp;IF1,IF2,IF3{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF1&nbsp;if1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;Composite&nbsp;(if1,if2,if3){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;method1(){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if1.method1();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;..........&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
//正则表达式 <br />
// (\w+method\d)(\..*)              if($1!=null){$0}<br />
//&gt;&gt;&gt;<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol start="1" class="dp-j">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;Composite&nbsp;impliments&nbsp;IF1,IF2,IF3{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF1&nbsp;if1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IF2&nbsp;if2;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;Composite&nbsp;(if1,if2,if3){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;method1(){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(if1=&nbsp;</span><span class="keyword">null</span><span>){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if1.method1();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;..........&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
//还有一个构造函数里的属性赋值：<br />
// (\w+)        &nbsp;&nbsp;    &nbsp;&nbsp;    this.$1=$1<br />
<br />
结果，略<br />
<br />
触类旁通，更多新的用法待你去发掘^_^
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/139672#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sat, 10 Nov 2007 18:19:29 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/139672</link>
        <guid>http://jindw.javaeye.com/blog/139672</guid>
      </item>
          <item>
        <title>JSA2 邀请公测（新增全局变量混淆、API调用接口）</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/133986" style="color:red;">http://jindw.javaeye.com/blog/133986</a>&nbsp;
          发表时间: 2007年10月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨晚忙到三点半，加上今天一天，我重构了一下JSA以前的代码。<br />
<br />
增加了对全局变量混淆的设置，<br />
公开了部分API调用接口。<br />
方便于二次开发<br />
<br />
现在邀请大家测试测试。<br />
<br />
国庆前说了要完成的事情，拖到现在^_^<br />
<br />
<br />
补充：20071022凌晨改进版发布<br />
完善了操作语言切换，并且在非安全区域外混淆提供了更友好的用户界面。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/133986#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 21 Oct 2007 17:11:43 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/133986</link>
        <guid>http://jindw.javaeye.com/blog/133986</guid>
      </item>
          <item>
        <title>Re: 在Ext的全Ajax项目中，你是怎么组织js的？</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/133970" style="color:red;">http://jindw.javaeye.com/blog/133970</a>&nbsp;
          发表时间: 2007年10月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">Sean220 写道</div><div class="quote_div">我认为实现$import机制至少不能对用户编程有过多要求，比如你的延迟同步按需装载，还不能同一个script标签里继续编码，那这种方法我个人认为比较难以接受。特别是在一些函数里需要动态import就没办法使用。<br /></div><br />我们最求完美，但是应为一些我们无法控制的问题存在，只能求其从次。<br /><br /><div class="quote_title">Sean220 写道</div><div class="quote_div"><br />你考虑的第二种方法，就是异步回调的方法，我也曾经设想过，但最终实现为同步，一方面考虑设计简单化，一方面为了实现嵌套$import时候代码能正常运行.<br /></div><br />你的设计是简单了，但可能将有成千上万的用户为一些没有避免的问题买单。<br /><br /><br /><div class="quote_title">Sean220 写道</div><div class="quote_div"><br />比如：$import("A")调用A.js<br />那么如果A.js里也有一句$import("B")<br />我当时没想到更好的办法解决这种引用的问题。但如果简单地做成同步$import就没问题。<br /><br />    而我的初衷是为了实现去除js文件之间关联性，不需要在调用者页面去维护这种依赖关系，而由各个js里自己使用$import指定，有点像java的思路，A只引用B,而不关心B文件需要引用那些文件才能运行。当然相同js只需要$import一次的机制肯定得保证。<br />   所以可能侧重点和你考虑的问题出发点不太一样，当然我的主要应用场景在LAN里面。<br /></div><br />依赖关系的管理，我在JSI1的时候也提出过，看似我们的想法也差不多，^_^<br />不过，我强调一种被管理脚本的无框架依赖，所以，我不想在别人的脚本里面使用import指令，而是在包定义文件中描述依赖。<br />明显，你这种方式确实很简单，但也造成了对第三方代码的侵入，而且如此以来，你在实现异步装在，延迟装在上，都将成为问题。<br />而且，改动了第三方脚本，那么后期的升级同步，也相对麻烦。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/133970#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 21 Oct 2007 14:04:07 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/133970</link>
        <guid>http://jindw.javaeye.com/blog/133970</guid>
      </item>
          <item>
        <title>这是hsqldb的bug？还是自己的用法不对。</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/132972" style="color:red;">http://jindw.javaeye.com/blog/132972</a>&nbsp;
          发表时间: 2007年10月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          被一个貌似hsqldb bug的问题折磨了好几个小时。<br />
把经过帖出来，大家帮我看看。<br />
<br />
习惯把hql都写成预定义的形式，同时又为了避免过多的hql定义，我的惯用伎俩：通过如下方式定义hql。<br />
<br />
<div class="code_title">sql 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-sql" start="1">
    <li class="alt"><span><span class="keyword">from</span><span>&nbsp;Message</span></span></li>
    <li class="alt"><span><span>&nbsp;</span><span class="keyword">where</span><span>&nbsp;packageKey=:packageKey</span></span></li>
    <li class="alt"><span><span>&nbsp; </span><span class="op">and</span><span>&nbsp;(</span></span><span><strong><span> </span><span class="op">null</span></strong><span><strong>&nbsp;=&nbsp;&nbsp;:fileKey</strong></span></span><span><span>&nbsp;</span><strong><span class="op">or</span></strong></span><span><span> </span></span><span><span>fileKey&nbsp;=&nbsp;:fileKey</span><strong><span class="op" /><span></span></strong><span>)</span></span></li>
    <li class="alt"><span><span>&nbsp; </span><span class="op">and</span><span>&nbsp;(</span></span><span><strong><span></span><span class="op">null</span></strong><span><strong>&nbsp;=&nbsp;:objectKey</strong></span></span><span><span> </span><strong><span class="op">or</span><span> </span></strong></span><span><span>objectKey=&nbsp;:objectKey</span><strong><span /></strong><span>)</span></span></li>
    <li class="alt"><span><span>&nbsp; </span><span class="op">and</span><span>&nbsp;(</span><strong><span class="op">null</span><span>&nbsp;=&nbsp;:memberKeys&nbsp;</span><span class="op">or</span></strong><span><strong>&nbsp;</strong>memberKey&nbsp;</span><span class="op">in</span><span>&nbsp;(&nbsp;:memberKeys))&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<br />
但是。今天在hqldb上测试时发现，在任何情况下 （null = ?）&nbsp; 都为真！！！<br />
非常奇怪，害我调试了老半天，后来把数据库换成了mysql，ok！！<br />
<br />
非常奇怪啊。<br />
不过，上面的写法（<span><strong><span></span><span class="op">null</span></strong><span><strong>&nbsp;=&nbsp;&nbsp;:fileKey</strong></span></span>）也有点怪怪的。
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/132972#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 17 Oct 2007 20:29:47 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/132972</link>
        <guid>http://jindw.javaeye.com/blog/132972</guid>
      </item>
          <item>
        <title>运动曲线研究(缓动效果)</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/131786" style="color:red;">http://jindw.javaeye.com/blog/131786</a>&nbsp;
          发表时间: 2007年10月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚刚学习了一下网页动画中上的缓动效果，分享一下学习心得。<br />
<br />
<strong>缓动曲线的概念：</strong><br />
<br />
缓动曲线是一个0为起点的连续函数曲线，x轴表示时间变化，y轴表示位移变化。曲线的斜率反映出运动的数度。<br />
<br />
缓动效果在Flash动画中比较常见，用于模拟一些现实中常见的运动轨迹，或者制造一些超绚的效果。<br />
而且新版本的Flash中，内置了一些常用的缓动曲线函数。<br />
<br />
可惜,Flash的这些曲线函数不是开源的，我们不知道内部如何实现，也就无法将其移植到JS中。感受其绚丽的同时，未免有一丝遗憾。<br />
<br />
于是乎，自己琢磨琢磨。<br />
<br />
首先，我对Flash的渐变函数接口非常不满。<br />
搞那么多参数干吗？<br />
要描述一个区间的渐变运动特征，只需一个y = f(x)足已。那么一大堆参数，真够罗嗦。<br />
//原理：我们以终点位移为参考，只需要知道中间个点相对于最终位移，我们就能确定运动的规律。<br />
y= f(x)<br />
//约定<br />
//x &isin; [0,1] #将x变化换算成[0,1]是最简单不过的操作<br />
//f(0)  = 0  #运动是连续的嘛^_^.<br />
//f(1) != 0  #如果f(1) = 0了，那不就没有运动嘛，中间即使有位移，我也无法计算中间的位移相对于总体位移的比例。<br />
<br />
<strong>曲线转换</strong><br />
每种类型的渐变都有三种变形         <br />
<p>
<table cellspacing="0" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td>
            <p>渐入(in)</p>
            </td>
            <td>
            <p>在过渡的开始提供缓动效果。</p>
            </td>
        </tr>
        <tr bgcolor="#f8f8f8">
            <td>
            <p>渐出(out)</p>
            </td>
            <td>
            <p>在过渡的结尾提供缓动效果。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>渐入渐出(inOut/Both)</p>
            </td>
            <td>
            <p>在过渡的开始和结尾提供缓动效果。</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<br />
其中，我们只要知道一个的曲线，其他两个都可以转换生成：<br />
知道渐入曲线之后，将其相对于(0.5,0.5)点绘制镜像，就是一个缓出运动，分段叠加就是一个完整的缓入缓出运动。<br />
<br />
<br />
<br />
<strong>首先，常见的加速/减速运动：</strong><br />
初中物理就能搞定。<br />
加速渐变函数为(easeIn)：<br />
y=x*x;  //y轴比例常数无需考虑<br />
<br />
这是一个简单的2次曲线，表现一个渐入运动。<br />
简单的变换一下：y = 1-(1-x)*(1-x) 减速运动(easeOut)<br />
复杂一点：<br />
y = x&gt;0.5? 1-2(1-x)*(1-x) :<br />
2*x*x : <br />
先加速后减速运动(easeBoth)<br />
<br />
<div forimg="1"><a target="_blank" href="http://hiphotos.baidu.com/jindw/pic/item/cc349202e727ca044afb513c.jpg"><img border="0" class="blogimg" small="1" src="http://hiphotos.baidu.com/jindw/abpic/item/cc349202e727ca044afb513c.jpg" alt="" /></a></div>
<br />
<br />
<br />
既然有二次曲线，很自然就想到三次、四次曲线。是的，这些曲线都有类似特征，区别在中间更陡峭，两头平缓（缓入缓出）<br />
<strong><br />
接下来，我就想实现一下弹动效果：</strong><br />
这类效果就好像一个甲虫飞到蜘蛛网上，在网上抖动两下，静下来听天由命。<br />
抖动，周期运动，好，我们很快就想到正弦曲线。<br />
方法基本正确，不过我起初还是走弯路了，我自作聪明的想着延长开始的半周期（x轴边形处理，振动让周期先大后小）。<br />
但最终发现效果非常不理想，最后查看yui的实现。模仿一下，走出了这个误区。<br />
我们通常看到的振荡移位效果，都是开始移动了较长位移，给人一种开始的振动周期更长的错觉，振动周期是不需要变化的。<br />
纠正这个错误后，实现曲线函数如下：<br />
<br />
y = Math.pow(1024,x-1)*Math.sin(x*((2*(period||1)+0.5)*Math.PI));<br />
<br />
利用指数函数的第二象限的渐变特征变形，取处理正弦波形的振幅，达到一个衰减的效果。<br />
<br />
<br />
<div forimg="1">
<div forimg="1"><a target="_blank" href="http://hiphotos.baidu.com/jindw/pic/item/12aacdc4f448efc038db4906.jpg"><img border="0" class="blogimg" small="1" src="http://hiphotos.baidu.com/jindw/abpic/item/12aacdc4f448efc038db4906.jpg" alt="" /></a></div>
<a target="_blank" href="http://hiphotos.baidu.com/jindw/pic/item/4fdb2a2949658ef598250a04.jpg"><br />
</a>
<div class="tmpDiv"><a> </a></div>
</div>
<br />
趁热打铁，看看yui的其他几类渐变效果：<br />
<br />
<strong>回退起步效果。</strong><br />
喜欢看动画片的话，你一定记得这个常见的场面，当一个家伙想快跑的时候，一点要先回撤一段距离，能后如突然加速前进。ok要的就是这个效果。<br />
实现其实也很简单，一个二次曲线就可以搞定<br />
<br />
y = x*(x-(backDistance||0.1)*4)<br />
<div forimg="1"><a target="_blank" href="http://hiphotos.baidu.com/jindw/pic/item/b8cc3838f8a8872fb9998f0d.jpg"><img border="0" class="blogimg" small="1" src="http://hiphotos.baidu.com/jindw/abpic/item/b8cc3838f8a8872fb9998f0d.jpg" alt="" /></a></div>
<br />
<br />
<br />
<strong>撞墙效果</strong><br />
<br />
这个名字可能不太合适吧，应该叫撞地效果更合适，鉴于撞墙这个名词更常见一些，也就标题党一回好了：）<br />
玩过弹球吧，弹球的运动规律一定还记得。<br />
对就是这种轨迹。<br />
运功轨迹就是若干条二次曲线的分段拼接。改写一个yui里面的模拟实现。<br />
<br />
this.bounceOut = function (x) {<br />
if (x &lt; (1/2.75)) {<br />
return x*x;<br />
} else if (x &lt; (2/2.75)) {<br />
return (x-=(1.5/2.75))*x + .75/7.5625;<br />
} else if (x &lt; (2.5/2.75)) {<br />
return (x-=(2.25/2.75))*x + .9375/7.5625;<br />
}<br />
return (x-=(2.625/2.75))*x + .984375/7.5625;<br />
};<br />
这里手动指出了一大堆参数，其实，这些参数都可以通过计算得出，偷个懒，就这么地吧，^_^
<div class="tmpDiv"> </div>
<div class="tmpDiv"> </div>
<a target="_blank" href="http://hiphotos.baidu.com/jindw/pic/item/b3f79744f3597447500ffe15.jpg"><img border="0" class="blogimg" small="1" src="http://hiphotos.baidu.com/jindw/abpic/item/b3f79744f3597447500ffe15.jpg" alt="" /></a>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/131786#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 14 Oct 2007 18:55:02 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/131786</link>
        <guid>http://jindw.javaeye.com/blog/131786</guid>
      </item>
          <item>
        <title>看图学习W3C盒子模型及相关通用脚本元素</title>
        <author>jindw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jindw.javaeye.com">jindw</a>&nbsp;
                    链接：<a href="http://jindw.javaeye.com/blog/130866" style="color:red;">http://jindw.javaeye.com/blog/130866</a>&nbsp;
          发表时间: 2007年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font color="#000000"><strong><font face="宋体">
<div forimg="1">
<div forimg="1"><img width="734" height="405" border="0" alt="from:www.xidea.org" class="blogimg" src="http://hiphotos.baidu.com/jindw/pic/item/d1c20d9505e64f037af48009.jpg" small="0" /></div>
<br />
<div class="tmpDiv"><font size="-0"><strong></strong></font></div>
</div>
<br />
获取大小的属性有
<div class="tmpDiv"><font size="-0"><strong></strong></font></div>
<div class="tmpDiv"><font size="-0"><strong></strong></font></div>
</font></strong></font><font color="#000000"><font face="Times New Roman">CSS (</font><font face="宋体">大小</font><font face="Times New Roman">+border)</font><font face="宋体">属性对应的</font><font face="Times New Roman"> offset</font><font face="宋体">长宽属性（无标准的实事标准）：</font></font><br />
<font face="Times New Roman"><strong><em><font color="#000000">1.</font></em></strong><font color="#000000"><strong>offsetWidth</strong><br />
</font></font><font color="#000000"><em><font face="宋体">获取对象相对于版面或由父坐标</font><font face="Times New Roman"> offsetParent </font></em><em><font face="宋体">属性指定的父坐标的宽度。</font></em></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000">  CSS </font><font color="blue">width + border</font></font><font color="#000000"><font face="宋体">对应</font></font><br />
<font face="Times New Roman"><strong><font color="#000000">2.</font></strong><font color="#000000"><strong>offsetHeight</strong></font></font><font color="#000000"><em><font face="宋体">获取对象相对于版面或由父坐标</font><font face="Times New Roman"> offsetParent </font></em><em><font face="宋体">属性指定的父坐标的高度。</font></em><font face="Times New Roman">  </font></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000"> CSS</font><font color="blue"> height +  border</font></font><font color="#000000"><font face="宋体">对应</font></font><br />
<font color="#000000"><font face="Times New Roman">CSS (</font><font face="宋体">大小</font><font face="Times New Roman">-padding )</font><font face="宋体">属性对应的</font><font face="Times New Roman"> client</font><font face="宋体">长宽属性（无标准的实事标准）：</font><font face="Times New Roman">  </font></font><br />
<font face="Times New Roman"><strong><font color="#000000">3.</font></strong><font color="#000000"><strong>clientWidth</strong><br />
</font></font><font color="#000000"><font face="宋体">获取对象的宽度，不计算任何边距、边框、滚动条或可能应用到该对象的补白。</font></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000">CSS </font><font color="blue">width -</font></font><font color="blue"><font face="宋体"><strong>滚动条宽度</strong></font></font><font color="blue"><strong><font face="Times New Roman">(</font></strong></font><font color="blue"><font face="宋体"><strong>如果有</strong></font></font><font face="Times New Roman"><font color="blue"><strong>)</strong></font><br />
</font><font color="#000000"><font face="宋体">对应</font></font><br />
<font face="Times New Roman"><strong><font color="#000000">4.</font></strong><font color="#000000"><strong>clientHeight</strong><br />
</font></font><font color="#000000"><font face="宋体">获取对象的高度，不计算任何边距</font><font face="Times New Roman">(margin)</font><font face="宋体">、边框、滚动条或可能应用到该对象的补白</font><font face="Times New Roman">(padding)</font><font face="宋体">。</font><font face="Times New Roman"> </font></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000">CSS </font><font color="blue">height -</font></font><font color="blue"><font face="宋体"><strong>滚动条宽度</strong></font></font><font color="blue"><strong><font face="Times New Roman">(</font></strong></font><font color="blue"><font face="宋体"><strong>如果有</strong></font></font><font face="Times New Roman"><font color="blue"><strong>)</strong></font><br />
</font><font color="#000000"><font face="宋体">对应</font></font><br />
<br />
<strong><font color="#000000"><font face="宋体">获取位置信息的属性有：</font></font></strong><br />
<font color="#000000"><font face="宋体">几个</font><font face="Times New Roman">offset</font><font face="宋体">属性（无标准的实事标准）：</font></font><br />
<font color="#000000"><font face="Times New Roman">offset </font><font face="宋体">坐标</font><font face="Times New Roman">0</font><font face="宋体">点是</font><font face="Times New Roman">offsetParent</font><font face="宋体">元素</font><font face="Times New Roman">content</font><font face="宋体">区域的左上点</font></font><br />
<font face="Times New Roman"><strong><font color="#000000">5.</font></strong><font color="#000000"><strong>offsetParent</strong><br />
</font></font><font color="#000000"><font face="宋体">获取定义对象</font><font face="Times New Roman"> offsetTop  </font><font face="宋体">和</font><font face="Times New Roman"> offsetLeft  </font><font face="宋体">属性的容器对象的引用。</font></font><br />
<font color="#000000"><font face="Times New Roman">CSS persition = absolute</font><font face="宋体">时，</font><font face="Times New Roman">left,top </font><font face="宋体">属性值参照的元素。</font></font><br />
<font color="#000000"><em><font face="Verdana">Object is positioned relative to parent element's position&mdash;or to  the body object if its parent element is not positioned&mdash;using the top and left  properties.</font></em></font><br />
<font face="Times New Roman"><strong><font color="#000000">6.</font></strong><font color="#000000"><strong>offsetLeft</strong><br />
</font></font><font color="#000000"><em><font face="宋体">获取对象相对于版面或由</font><font face="Times New Roman">  offsetParent </font></em><em><font face="宋体">属性指定的父坐标的计算左侧位置。</font></em></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000">  CSS </font><font color="blue">left(</font></font><font color="blue"><font face="Verdana">absolute</font></font><font color="blue"><font face="Times New Roman">)+margin</font></font><font color="#000000"><font face="宋体">对应</font></font><br />
<font color="#000000"><font face="Times New Roman"><strong>7.</strong><strong>offsetTop</strong><br />
</font><font face="宋体">获取对象相对于版面或由</font><font face="Times New Roman"> offsetTop </font><font face="宋体">属性指定的父坐标的计算顶端位置。</font><font face="Times New Roman">  </font></font><br />
<font face="宋体"><font color="#000000">与</font></font><font face="Times New Roman"><font color="#000000"> CSS </font><font color="blue">top(absolute)+margin</font></font><font face="宋体"><font color="#000000">对应 </font></font>
          <br/>
          <span style="color:red;">
            <a href="http://jindw.javaeye.com/blog/130866#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 10 Oct 2007 20:09:53 +0800</pubDate>
        <link>http://jindw.javaeye.com/blog/130866</link>
        <guid>http://jindw.javaeye.com/blog/130866</guid>
      </item>
      </channel>
</rss>