<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>zaya</title>
    <description>创业中……</description>
    <link>http://zaya.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>zaya</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zaya.javaeye.com">zaya</a>&nbsp;
          链接：<a href="http://zaya.javaeye.com/blog/139309" style="color:red;">http://zaya.javaeye.com/blog/139309</a>&nbsp;
          发表时间: 2007年11月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我知道这样来找人很盲目，不过还是想碰碰运气。我现在有想法，个人的技术应该还算不错，目前只是我一个人，我也没有多少钱。但是我相信这个想法是有前景的，而且我认为是不错的前景，项目本身也是对社会有益的。当然中间有无数的细节需要考虑，也会遇到无数的困难，在看得见的将来是否能有收入都不清楚。<br /><br />我认为对能够在一起合作，并且长期合作的伙伴来说，相比于能力和资金来说，能够有相似的价值观更为重要。我是想做一个企业的，一个能够长久生存，盈利，并且健康的企业，一个可以留之后世的企业。现在来看这只是个渺不可及的目标，但是我愿意为之付出，并且为之坚持。我知道这种志向或许看起来很傻，但是如果您愿意加入我这个团队，我衷心希望您也能像我一样傻。如果您只愿意做些事情并拿到钱，我想我这里并不适合您。<br /><br />技术方面，我这里目前用的是JSF+SEAM，如果您有类似的背景最好不过。如果您没有也没有关系，我也是在一点一滴的学习。用这个框架来做，只是因为我认为它简化了不少开发流程，如果您有更好的技术我这里也可以作调整。<br /><br />我在北京，如果您有意，可以在javaeye上和我联系。或者发信到这个邮箱：&lt;his.stone@gmail.com><br /><br />&lt;一些要求><br />价值观上面：<strong>愿意为一件事情执著付出，重视团队有合作精神，做事有自己的原则，渴望成功</strong><br /><br />客观环境方面： <strong>需要在北京，能够接收短期内没有收入（暂时养得起自己），全职（或者能保证一半以上的工作时间）</strong><br /><br />技术方面：<strong>越好越好。有学习能力并乐于学习。至少有英文技术文档的阅读能力，至少用java做过企业开发，一般来说至少有2年以上经验或者同等经验。了解linux开发环境。有不同领域的工作经历比较好。</strong>
          <br/><br/>
          <span style="color:red;">
            <a href="http://zaya.javaeye.com/blog/139309#comments" style="color:red;">已有 <strong>64</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Nov 2007 20:21:44 +0800</pubDate>
        <link>http://zaya.javaeye.com/blog/139309</link>
        <guid>http://zaya.javaeye.com/blog/139309</guid>
      </item>
      <item>
        <title>JSF的加减法与Seam(二)之对java的改进</title>
        <author>zaya</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zaya.javaeye.com">zaya</a>&nbsp;
          链接：<a href="http://zaya.javaeye.com/blog/137567" style="color:red;">http://zaya.javaeye.com/blog/137567</a>&nbsp;
          发表时间: 2007年11月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">引用</div><div class="quote_div"><br />题记：Seam对开发的简化，对各种不同软件的统一能力，我想其主要来源不是创造了conversation域，不是使用了元注解，不是依赖于JSF，不是使用了反射机制，而是一种更加全局的域管理机制。那些其它因素都是为了这一目的服务的，或多或少的使这一目的的实现变得更加方便可靠。如果说Seam有什么决定性的区别于其它框架的东西，那就是它的全局域管理机制。<br /><br />说明：1楼和2楼铺垫了很多基础的东西。如果没有耐性，可以把它们略过去，直接从第3楼读起。<br />另： 文章里的命，生命周期(lifecycle)，上下文(context)，域(scope)在这里指同一内容，可以互相替换。<br /></div><br /><br />不说Seam诞生的大环境和Seam产生的语言基础，只是说Seam本身的功能，大概也可以，不过我认为非常多的外在功能都只是某些环境外在因素和基本内在因素所决定了的。大环境和内在可能定了之后，细节的东西只是做就可以了。所以没有办法，还是得绕开Seam本身说些题外话。<br /><br />JSF的加减法与Seam（一）<a href="http://www.javaeye.com/topic/137027" target="_blank">http://www.javaeye.com/topic/137027</a>大概说了一下 Seam诞生的环境，这是外在机会，是融合各种技术的可能性，是广的纬度。 这篇文章说说java上的可能性，是何让Seam具有了融合的本事，是内在能力，从深的纬度上说吧。<br /><br />其实也不深，因为说JAVA，其实得从最基本的说起：<br /><br />1. Java 对象的命<br /><br />1.1 概述<br />这个命呢，就是生命周期，就是什么时候生下来可以用它，什么时候死了不能再用了。一个对象在内存中的时间和生命周期是不一定相等的，因为即使一个对象完全没有办法再用了，它仍然可能还在内存里。比如<pre name="code" class="java">
void doIt() {
Object o = new Object();
o = null;
}
</pre><br />这个方法执行完了之后，o是没办法再用了，但是o可能仍然还在内存里，因为内存的垃圾回收有延时，术语叫做best effort，意思就是我尽我最大能力去回收了，但是回收回得来回不来，得看情况。这篇文章里说到的生命周期，是不考虑这个延时的，如果我没有办法再用这个对象了，我就认为它已经死掉了。<br /><br />1.2 假如无状态<br />我举一个非常理想化的例子，假如java的所有的对象的都不能有状态，那对生命周期会有什么影响呢？<br />如果没有状态，那么所有对象都只能用方法调用。假设我有类A,B,C；而a,b,c是它们的对象。底下老这么说费事，凡是大写都是类，凡是小写都是对象。而a.getB()则假设a有属性b并且有它的getter和setter方法。<br />如果所有对象的状态不能改变，则只能是这样：<br /><br /><pre name="code" class="java">
public static void main() {
  A a = new A();
  a.doSomthing();
}
class A() {
  doSomething() {
    B b = new B();
    b.doSomething();
  }
}
class B() {
  doSomehing() {
    C c = new C();
    c.doSomething;
  }
}
</pre><br /><br />每个对象都得在某个方法里被创建（出生），而且必须在那个方法内被销毁（死亡）。那么所有的对象的生命都是和调用它的方法一样长的。这样产生了一个现象就是所有的被调用的对象一定比调用它的对象的命短，而且它出生于调用它的对象出生之后，死亡于调用它的对象死亡之前。 我们把一段生命周期称为“域”，则前者存在的域一定被包含在后者存在的域中。<br />如何断定的呢？ 因为调用者的那个方法的域（也就是命，也就是生命周期）一定包含于调用者本身存在的域──因为任何时候我调用那个方法，拥有该方法的那个对象一定存在，否则该方法也就不能存在了（静态方法是特殊情况等会再说）。而被调用者存在的域一定被包含在调用者方法的域中，这刚才已经讨论了。所以：<br />对于任意 a通过它的方法doXYZ()来调用b来说：<br />b的域 包含于（被包含）  doXYZ()的域，  而 doXYZ() 的域 包含于 a的域。<br />由此可知 b的域包含于a的域。<br />以此类推，如果a调用b,b调用c,c调用d…… 那么后者的域总是被包含在前者的域里，也就是说越成为被调用者，命越短，越成为调用者，命越长。且被调用者存在时，调用者必然存在。
          <br/><br/>
          <span style="color:red;">
            <a href="http://zaya.javaeye.com/blog/137567#comments" style="color:red;">已有 <strong>26</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 Nov 2007 13:59:34 +0800</pubDate>
        <link>http://zaya.javaeye.com/blog/137567</link>
        <guid>http://zaya.javaeye.com/blog/137567</guid>
      </item>
      <item>
        <title>JSF的加减法与Seam</title>
        <author>zaya</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zaya.javaeye.com">zaya</a>&nbsp;
          链接：<a href="http://zaya.javaeye.com/blog/137027" style="color:red;">http://zaya.javaeye.com/blog/137027</a>&nbsp;
          发表时间: 2007年10月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Jsf 本身是很多问题的。当然，jsf不是一项技术，而是标准。看看 javax.faces.* 包里的内容，不是抽象类就是接口，是没有实现的。 jsf 出来的时候目的也不是面向应用开发者的，而是面向组件供应商的，从这点意义上来说，jsf是成功的。Sun提供了一个reference implementation, 但是那更像是教组件供应商如何做组件的一个demo，而非真正意义上的给应用开发人员用的成型的组件。<br />
<br />
标准因为要融合各方需求，所以内容只能是各方能力的交集。至于标准之外的东西，则需要各方去发挥。<br />
<br />
JSF标准因为是先于成型的应用出来的（不同于EJB3的借鉴hibernate和spring，jsf299的借鉴seam），难免会有预见不足的地方。在某些地方可能作了过分的限制，而另外某些地方则完全没有规定放得太开导致标准实现商完全忽略了它们。<br />
<br />
但是 Jsf 的初衷是不错的，而且标准本身也足够的可扩展。 所以现在才会诞生如此多的基于 jsf 的框架。 这些框架在不同程度上修复了 JSF 初始制定时的不足。<br />
<br />
Ajax4Jsf, Facelets, Seam 是这其中三个独立的方向。<br />
<br />
<strong>1. A4J:</strong>&nbsp;&nbsp; 用网络检测工具可以清晰地看到，每次在JSF postback 的时候，虽然可能只有部分页面需要刷新，但整个页面都会被从服务器送往浏览器。这是非常浪费的。 JSF的event-driven模型实际上非常适合部分页面刷新（试想如果没有事件模型，每晃一下鼠标显示器就把整屏幕重画，现在也就没有 windows了），但是因为ajax出来的时候JSF标准已经final了，就没有把Ajax考虑进去。对于事件模型来说，把整屏幕重画改为部分组件重画是件相对容易的事情，这也就是 Ajax4Jsf 这个项目的目的。是否开启AJAX，可以不需要javascript，只是更改页面中的某个开关（tag）就行了。<br />
<br />
<strong>2. Facelets:</strong>&nbsp;&nbsp; JSF是建立在JSP上的，但这是完全没有必要的。JSP不是模板语言，它只是简单得把嵌入在html里的java语言原样放入Java的源文件里，实际上是混合的html和java。这种模型和JSF的事件模型没有任何互补的关系。相反，它给JSF加入了不必要的限制。Facelets的目的在于取代 jsp在jsf里的地位。它是真正的模板语言，el表达式可以嵌入在页面的任何位置，比如写成：<br />
<br />
&lt;h2&gt;Hi,I'm Jordan, I think the winner of this cup is #{winner.name}, is that right?&lt;/h2&gt;<br />
<br />
Facelets不需要编译，页面是hot-deploy的，性能比jsp快。另外，facelets本身提供了加参模板的功能，定制新的组件可以完全不写java，只把页面里的需要提成组件的内容扔进分离的页面，并且在taglib.xml里面加入tag指向分离的页面，并指定参数名字就可以了。 JSF最为人诟病的组件缺乏的问题，在facelets这里得到了缓解，实际上是不怎么需要第三方组件就可以快速写出舒服的代码来。Facelets还有其它的功能，比如debug页面显示facelets页面出错的行号，比如无限嵌套的模板，等等。<br />
<strong><br />
3. Seam:&nbsp;</strong> Seam 其实本身是无关JSF的，但是因为它从一开始就建在JSF上面，所以也不得不对JSF的一些问题进行修复。<br />
<br />
Seam的工作需要分开来细说：<br />
<br />
<em>3.1</em>&nbsp; page行为&nbsp;&nbsp;&nbsp; //TODO<br />
<br />
<em>3.2</em> Context-filter&nbsp;&nbsp; //TODO<br />
<br />
<em>3.3</em> RESTful（重建页面参数） //TODO<br />
<br />
<em>3.4</em> 异常处理&nbsp; //TODO<br />
<br />
<em>3.5</em> 跨越重定向的状态&nbsp; //TODO<br />
<br />
现在我们有了JSF的加减法：<br />
<br />
JSF - (全页面刷新) + Ajax4Jsf&nbsp; -&nbsp; Jsp&nbsp;&nbsp; +&nbsp; Facelets&nbsp; +&nbsp; 全局Page行为&nbsp; +&nbsp; Context-filter&nbsp;&nbsp; +&nbsp; Restful参数绑定&nbsp; +&nbsp; 可定制异常 + 跨越重定向的状态&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp; &ldquo; -_-&nbsp; ！ 一大碗炸酱面&rdquo;<br />
<br />
就好像一件黄金圣衣，经过无数次修补，虽然还能再用，但是实在不如重铸了。<br />
<br />
JSF 需要一套整合的模型，使这些各个分散的部分重新以一种整体的局面展现出来。它需要把多余的东西抛弃掉，把新的内容以更集成的方式融在一起，因为光是熟悉这些不同分散的部分，理解它们之间的关系，知道哪里会有BUG，哪里则可以避免这些BUG，并且在运用的时候总是用对该用的东西，这已经使人非常头大了。 JSF作为标准来说是成功的，在这一标准下有了如此多的可以插拔的第三方软件。 但是该是时候对这些零散的东西统一了。就好像ubuntu在统一的指导思想下集合了尽可能多的零散的开源软件，使它们可以被一种简单并且相似的方式获取，使我不需要像在Gentoo里安装任何一个东西都要搜索搜索再搜索，了解它的来源，了解它的BUG，了解我的硬件是否支持。作为用户，我不想学习，我想有明白的人替我作决定，那是最好的，特别是当这些决定make sense的时候。<br />
<br />
现在的Seam正是朝这个方向走的。能走这样的路，得有两个条件，一是有众多零散的可用的东西，但是它们缺乏统一的形式（但它们得有能够统一的背景，比如ubuntu下是posix标准，Seam下是jsf标准）；二是有对该领域非常熟悉的人来做这样的事情。上面提到的Seam对JSF的改进其实只是Seam框架下非常小的一部分，是Seam在向这个目标前进的必须的一个步骤，是在Seam内核基础上水到渠成的东西，而远非Seam的全部。正如Seam的名字所示：缝合；正如ubuntu的名字所示：分享与同在。它们的制定者在决定之初即是向着这一目标前进的。<br />
<br />
已经early draft review的JSR 299， 即是借鉴了Seam（以及其它比如Guice）的一个标准，试图把这一方向推得更远。<br />
<br />
至于对于缝合所需要的本事，Seam的conversation模型，CoC理念，元注解配置+xml补充方式，动态双向注入模型（不同于spring的静态单向注入），扩展了的EL等，是其基础。内部事件和监听模型，和drools的安全集成模型，和hibernate-seach, hibernate-validation, seam-remoting, jbpm,groovy,itext的集成，是其在基础之上的应用。这些则需要另外的文章来写了。//TODO//TODO//TODO
          <br/><br/>
          <span style="color:red;">
            <a href="http://zaya.javaeye.com/blog/137027#comments" style="color:red;">已有 <strong>4</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 31 Oct 2007 15:50:48 +0800</pubDate>
        <link>http://zaya.javaeye.com/blog/137027</link>
        <guid>http://zaya.javaeye.com/blog/137027</guid>
      </item>
      <item>
        <title>rfc1149：禽类作为载体传输IP数据包标准</title>
        <author>zaya</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zaya.javaeye.com">zaya</a>&nbsp;
          链接：<a href="http://zaya.javaeye.com/blog/129431" style="color:red;">http://zaya.javaeye.com/blog/129431</a>&nbsp;
          发表时间: 2007年10月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          RFC 1149, 描述性标题为&ldquo;禽类作为载体传输IP数据包标准&rdquo;。<br />
<br />
文本地址可以在这里找到：<br />
<a href="http://www.faqs.org/rfcs/rfc1149.html">www.faqs.org/rfcs/rfc1149.html</a><br />
<br />
这是一个基于该标准的一个实现：<br />
<a href="http://www.blug.linux.no/rfc1149">www.blug.linux.no/rfc1149</a><br />
该标准发布后11年之后才有实现，可见该标准的技术含量之高，难度之大。<br />
<br />
<br />
<pre>Network Working Group                                        D. Waitzman<br />Request for Comments: 1149                                       BBN STC<br />                                                            1 April 1990<br /><br />   A Standard for the Transmission of IP Datagrams on Avian Carriers<br /><br />Status of this Memo<br /><br />   This memo describes an experimental method for the encapsulation of<br />   IP datagrams in avian carriers.  This specification is primarily<br />   useful in Metropolitan Area Networks.  This is an experimental, not<br />   recommended standard.  Distribution of this memo is unlimited.<br /><br />Overview and Rational<br /><br />   Avian carriers can provide high delay, low throughput, and low<br />   altitude service.  The connection topology is limited to a single<br />   point-to-point path for each carrier, used with standard carriers,<br />   but many carriers can be used without significant interference with<br />   each other, outside of early spring.  This is because of the 3D ether<br />   space available to the carriers, in contrast to the 1D ether used by<br />   IEEE802.3.  The carriers have an intrinsic collision avoidance<br />   system, which increases availability.  Unlike some network<br />   technologies, such as packet radio, communication is not limited to<br />   line-of-sight distance.  Connection oriented service is available in<br />   some cities, usually based upon a central hub topology.<br /><br />Frame Format<br /><br />   The IP datagram is printed, on a small scroll of paper, in<br />   hexadecimal, with each octet separated by whitestuff and blackstuff.<br />   The scroll of paper is wrapped around one leg of the avian carrier.<br />   A band of duct tape is used to secure the datagram's edges.  The<br />   bandwidth is limited to the leg length.  The MTU is variable, and<br />   paradoxically, generally increases with increased carrier age.  A<br />   typical MTU is 256 milligrams.  Some datagram padding may be needed.<br /><br />   Upon receipt, the duct tape is removed and the paper copy of the<br />   datagram is optically scanned into a electronically transmittable<br />   form.<br /><br />Discussion<br /><br />   Multiple types of service can be provided with a prioritized pecking<br />   order.  An additional property is built-in worm detection and<br />   eradication.  Because IP only guarantees best effort delivery, loss<br />   of a carrier can be tolerated.  With time, the carriers are self-<br /><br />   regenerating.  While broadcasting is not specified, storms can cause<br />   data loss.  There is persistent delivery retry, until the carrier<br />   drops.  Audit trails are automatically generated, and can often be<br />   found on logs and cable trays.<br /><br />Security Considerations<br /><br />   Security is not generally a problem in normal operation, but special<br />   measures must be taken (such as data encryption) when avian carriers<br />   are used in a tactical environment.<br /><br />Author's Address<br /><br />   David Waitzman<br />   BBN Systems and Technologies Corporation<br />   BBN Labs Division<br />   10 Moulton Street<br />   Cambridge, MA 02238<br /><br />   Phone: (617) 873-4323<br /><br />   EMail: <a href="mailto:dwaitzman@BBN.COM">dwaitzman@BBN.COM</a></pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://zaya.javaeye.com/blog/129431#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 07 Oct 2007 10:33:28 +0800</pubDate>
        <link>http://zaya.javaeye.com/blog/129431</link>
        <guid>http://zaya.javaeye.com/blog/129431</guid>
      </item>
  </channel>
</rss>