<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>顺其自然</title>
    <description></description>
    <link>http://ziyan200801.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>自言200801</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ziyan200801.javaeye.com">自言200801</a>&nbsp;
          链接：<a href="http://ziyan200801.javaeye.com/blog/181789" style="color:red;">http://ziyan200801.javaeye.com/blog/181789</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          某日上午，到电信营业厅A续交下个月宽带费用，身上只带了100块钱。<br /><br />服务员A：请问先生您要办理什么业务？<br />我: 续交一个月宽带费(80元/月)。<br /><br />服务员A：现在不能按月交了，得一次交够三个月。<br />我: 怎么那么快就不行啦？上个月还能按月交。<br /><br />服务员A：没办法，最近的政策刚变动。<br /><br />我真是汗死。。。<br /><br /><br />下午，身上的钱带了300多，再一次进入电信营业厅A。<br /><br />服务员B：请问先生您要办理什么业务？<br />我: 续交3个月宽带费。<br /><br />服务员B埋头查数据中。。。<br /><br />3分钟后，<br /><br />服务员B：先生，您的宽带帐号已被自动停机。<br />我: 什么？昨晚我还能上网。<br />服务员B：是今天上午停的，我们的系统会自动查看你的帐号的余额，要是余额不够支付下个月的宽带费，就自动停掉。<br />我: 那我现在续交3个月宽带费。<br /><br />服务员B埋头折腾中。。。<br /><br />3分钟后，<br /><br />服务员B：先生，您现在不能续费。<br />我:为什么？<br />服务员B：系统说不可以。<br />我:那什么时候可以？<br />服务员B：不知道，您过几天再来试试吧。<br /><br />我又一次汗死。。。<br />一天不能上网真是难受。<br /><br /><br />第二天中午，同样带了300多块钱，但换了个电信营业厅（电信营业厅B)。<br />取了号，上面写着：您前面还有30位顾客。<br />汗死。。。<br />去书店看了2小时书，转回电信营业厅B，再等了25分钟，<br />从广播那里传来：“请XXX号顾客到XXX号台办理业务”<br />到我了，到我了。。。<br /><br /><br />服务员C：请问先生您要办理什么业务？<br />我暗想了一下，说到：续交两个月宽带费可以吗？我现在上不了网啦，请顺便帮我查一下是不是我的帐号被关掉了。<br /><br />服务员C埋头折腾中。。。<br /><br />2分钟后，<br /><br />服务员C：交两个月宽带费可以的，您的帐号没有问题。<br /><br />20分钟后成功续交两个月宽带费，有点喜悦但更多的是迷惑：<br /><span style="color: red">每个电信营业厅所依据的政策、所使用的软件系统不相同吗？</span><br /><br /><br /><br />接着，16点半回到家，给ADSL猫开通电源，link灯一直闪啊闪，闪了20分钟还是闪，<br />汗死。。。还是上不了网，等等吧，想想晚上会好的。<br /><br />到了晚上20点半，照例开了电脑，开了ADSL猫，还是老样子，上不了网，真是泄气。<br /><br />拿起手机，按了10000号，给客服描述了情况，客服link灯不知是啥，我汗死。。。<br /><br />每三天早上9点多，接到陌生人电话，说他是电信技术人员，询问了我的情况后，<br />查数据显示说：你目前是停机保号状态。<br />我说：我昨天才去营业厅交了费啦，营业厅的人说我的帐号没问题。<br />“你再到营业厅查一下”，<br /><br />我真是没话说啦，中午又跑到电信营业厅B，<br /><br />这回换了服务员D：请问先生您要办理什么业务？<br />我：我现在上不了网啦，请帮我查一下是否我的帐号被停了？<br /><br />服务员D忙乱中。。。<br /><br />20分钟后，<br /><br />服务员D：先生，您的续费是成功记录了的，帐号也没停，都是正常的，请您回家后晚点再试试好吗。<br /><br />又是汗死。。。<br /><br />晚上ADSL猫开开停停了不下10次，还是一如既往。。。<br /><br /><br />第四天，直接打电信技术人员的电话，那边不耐烦说到:你目前还是停机保号状态，你到底去了营业厅没有？？<br />当时真想发飙，老子钱都交了两天啦，<span style="color: red">跑了两次营业厅都说系统查出的数据没问题，<br />没钱你系统就自动停机，交了钱就不自动开机？</span><br /><br />接着再打10000号，客服告知再到另外一个营业厅问问。<br /><br />没办法，中午去了电信营业厅C，<br /><br />服务员E：请问先生您要办理什么业务？（听多了，想呕吐）<br />我:我现在上不了网，但我已交了费用啦，你们的技术人员说是停机保号状态，请帮我开机。<br /><br />服务员E用鼠标快速的点击那套“外表华丽”的系统，两分钟后，<br /><br />服务员E：先生，我已下了工单了，您留下您的电话，到时再通知您。<br />我：是什么问题？<br />服务员E：系统有不合常规问题。<br /><br /><br />晚上8点多再试，还是不行，再打电信技术人员的电话，<br />告知已下了工单，但过了这么久了还是上不了网，请帮忙再看一下。<br /><br />电信技术人员说他只管线路，说他可以打电话叫其他人查看，<br />我还是谢谢他了。<br /><br />半小时后，ADSL猫的link灯终于不再一直闪啦。<br />四天没上网真能把人憋死。。。<br /><br /><br />3天后，10000号自动打来电话，请为这次故障处理评价，<br />满意请按1,不满意请按0，<br />好，咱是软心肠的人，还是按1吧，按完了1还没完，又接着无数个是否满意的问题，<br />搞到最后，逼我直接结束通话。。。<br /><br /><br /><br />总结:<br /><br /><span style="color: red">电信公司是SB，开发此类电信软件的人也是SB。知道啥叫做“事务”吗？<br /><br />但愿我不会碰到SB银行、SB银行软件。</span>
          <br/>
          <span style="color:red;">
            <a href="http://ziyan200801.javaeye.com/blog/181789#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 15:15:56 +0800</pubDate>
        <link>http://ziyan200801.javaeye.com/blog/181789</link>
        <guid>http://ziyan200801.javaeye.com/blog/181789</guid>
      </item>
      <item>
        <title>10多年前的小学、初中生活简史(兼回dearmite的话)</title>
        <author>自言200801</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ziyan200801.javaeye.com">自言200801</a>&nbsp;
          链接：<a href="http://ziyan200801.javaeye.com/blog/179560" style="color:red;">http://ziyan200801.javaeye.com/blog/179560</a>&nbsp;
          发表时间: 2008年04月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          10多年前的小学、初中生活简史(兼回dearmite的话)<br /><br />原贴在<a href="http://www.javaeye.com/topic/178897" target="_blank">http://www.javaeye.com/topic/178897</a><br />主题:一直努力就好了<br /><br /><div class="quote_title">dearmite 写道</div><div class="quote_div"><br />那我只能向你说声对不起，<br />我真的难以想象你们老师对你是怎么想的！！<br /><br />如果此事属实，我感觉，你应该去那个学校控告他！！<br /><br /></div><br /><br />呵呵，真是意外，没想到一回贴，10前那么多事一下又勾起了，<br />贴子每点一次，想说的就越多。。。(呵呵，也许今天是上坟的日子)<br /><br />至今都常在“澎湃激昂的美梦“中与那个禽兽班主任相见（下文用“它”代替）<br />要是你在网上见到说老师体罚、辱骂学生不当一回事的话，<br />我说的你也可以不当一回事。<br /><br />当然我没被它用脚揣过，因为我成绩好，想揣也找不到借口。<br />它一开始教小学3年级数学，我那时读5年级，早有耳闻它的“强悍作风“，<br />没想到到了6年级，当上了我们班的数学老师，还是班主任。<br />差不多每天放学全班留到6点，<br />以前吗，还是早上7点吃过早饭，下午5点半放学回家吃午饭，晚上8点接着吃晚饭，<br />那一年直接放学回家吃晚饭了。。。<br /><br />我们班的女生常被骂得在课堂上哭的、流鼻涕的，还被煽巴掌的，<br />一边听它在喷粪，一边暗想着用长凳向它砸去。。。<br /><br />发考卷时，不到60分的，或到了，它看着不爽的，念了XXX的名字后，往地上一扔，“潇洒“得很。。。<br /><br />我同桌有次被它拽着耳朵直接“横过”桌子直拉到讲台上。。。<br /><br />记不清了，无数无数。。。<br /><br /><br />更不可思议的是，本以为上了初中了一切都结束了，“幽灵“还是“如影随形“<br />之后三年也熬过啦，虽不及小学那样“强悍“，但老狗还是一样会吃屎。<br /><br />我那四年是跟它对着干的唯一一位学生，数学课几乎全是自学，它讲它的，我看我的，<br />我一直是班长，还常考第一，它拿我没辙。<br /><br />98年算是洪水年，也是我中考的那一年，我们到镇上参加考试，考三天，<br />那三天所有考生都是住在镇中学的专用教室，新到镇上，没见过世面吗，就到镇上的小街玩玩，<br />回来被它当着整个年级男同学的面，假借洪水一事骂我家人，骂我祖宗，大声吼叫。。。<br />搞得我当场热泪盈眶，真想拿个刀给它来几下。<br /><br />接下来的三天考试，情绪复杂加上胃病发作，只考了599，最失败的一次考试。。。<br /><br /><br />事情都过了10多年啦，无意再去告谁谁谁啦，有很多无奈的事，<br />它吗，早就见过生了几个仔都夭折的(它本人是酒鬼、烟鬼，斗鸡眼)，初三那年又生了个，<br />10年没见到它了，不知道它是不是入土啦，当然，希望它那仔还在，长大了给它爹积点德。。。<br /><br />那给它撑腰的人呢，我也不知道有谁，只见过初中校长常跟它一起喝啊喝。。。<br /><br />前年，虽不想触景伤情，但好多好多年没见母校了，还是想着回到初中母校看看，<br />踏上自行车，走了40来分钟，到了，到了，<br />路跟10年前差不多，有坑的地方还是一样的坑，<br />没想到母校终于有了围墙，但在门口一望，好一片野草。。。<br /><br />回家问了儿时的伴，<br />说到：“初中母校由于生源少，几年前早已归入乡里的中学啦，现在小孩上初中，都得抗米去，半月回家一趟。”<br /><br />“那它去哪了？”<br /><br />”谁知它死去哪了”<br /><br />“那以前初中校长呢？”<br /><br />“早换了，听说作风问题被换的，现在在XXX小学教书“。
          <br/>
          <span style="color:red;">
            <a href="http://ziyan200801.javaeye.com/blog/179560#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Apr 2008 22:36:19 +0800</pubDate>
        <link>http://ziyan200801.javaeye.com/blog/179560</link>
        <guid>http://ziyan200801.javaeye.com/blog/179560</guid>
      </item>
      <item>
        <title>一门天生就能损害人眼视力的语言－&gt;Erlang</title>
        <author>自言200801</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ziyan200801.javaeye.com">自言200801</a>&nbsp;
          链接：<a href="http://ziyan200801.javaeye.com/blog/179337" style="color:red;">http://ziyan200801.javaeye.com/blog/179337</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一门天生就能损害人眼视力的语言－>Erlang<br /><br />受javaEye综合技术版的熏陶，受某位大牛：“Erlang下一个java语言“文章的蛊惑，<br />学起了函数式编程思想，学起了Erlang。<br /><br />学习开始于“Getting Started With Erlang”，仅寥寥4小时就学完了，算是入了门，<br />当时的体会是：函数式编程也就这样，简单之极，搞来搞去都是list、tuple,函数传来传去、套来套去。<br />入门的顺利促使了进一步学习的冲动，但是越了解越是觉得在受罪。<br /><br />Ok,憋了20多天啦，常常有想砸死Erlang（恶狼）的冲动。。。<br /><br />我起初只是对Erlang语言本身及它的编译器实现感兴趣，<br />一切的不爽都来自于看Erlang语言编译器源码的过程:<br /><br />故事从compiler/src目录开始，<br />用自个写的小程序纺计了compiler/src目录下的所有文件的行数，还不到4万行，哇！这么牛X。<br /><br />找到了切入点:compile.erl<br />看到了如下代码:<br /><pre name="code" class="ruby">
expand_opt(basic_validation, Os) ->
    [no_code_generation,to_pp,binary|Os];
expand_opt(strong_validation, Os) ->
    [no_code_generation,to_kernel,binary|Os];
expand_opt(report, Os) ->
    [report_errors,report_warnings|Os];
expand_opt(return, Os) ->
    [return_errors,return_warnings|Os];
expand_opt(r10, Os) ->
    [no_stack_trimming,no_topt,no_binaries,no_gc_bifs,no_constant_pool|Os];
expand_opt(r11, Os) ->
    [no_stack_trimming,no_binaries,no_constant_pool|Os];
expand_opt({debug_info_key,_}=O, Os) ->
    [encrypt_debug_info,O|Os];
expand_opt(no_binaries=O, Os) ->
    %%Turn off the entire type optimization pass.
    [no_topt,O|Os];
expand_opt(no_float_opt, Os) ->
    %%Turn off the entire type optimization pass.
    [no_topt|Os];
expand_opt(O, Os) -> [O|Os].
</pre><br />眼睛第一次随着“->” “并发/并行“起来，<br />Ok，经过一阵拐弯抹角之后总算找到了词法分析的源文件stdlib/src/erl_scan.erl，<br />要是你看过上面的代码后眼睛还是立体的，试试下面:<br /><pre name="code" class="ruby">
sub_scan_escape([O1,O2,O3|Cs], [Fun|Stack], Toks, Pos, State, Errors) 
  when O1 >= $0, O1 =&lt; $7, O2 >= $0, O2 =&lt; $7, O3 >= $0, O3 =&lt; $7 ->
    Val = (O1*8 + O2)*8 + O3 - 73*$0,
    Fun([Val|Cs], Stack, Toks, Pos, State, Errors);
sub_scan_escape([O1,O2]=Cs, Stack, Toks, Pos, State, Errors) 
  when O1 >= $0, O1 =&lt; $7, O2 >= $0, O2 =&lt; $7 ->
    more(Cs, Stack, Toks, Pos, State, Errors, fun sub_scan_escape/6);
sub_scan_escape([O1,O2|Cs], [Fun|Stack], Toks, Pos, State, Errors) 
  when O1 >= $0, O1 =&lt; $7, O2 >= $0, O2 =&lt; $7 ->
    Val = (O1*8 + O2) - 9*$0,
    Fun([Val|Cs], Stack, Toks, Pos, State, Errors);
sub_scan_escape([O1]=Cs, Stack, Toks, Pos, State, Errors) 
  when O1 >= $0, O1 =&lt; $7 ->
    more(Cs, Stack, Toks, Pos, State, Errors, fun sub_scan_escape/6);
sub_scan_escape([O1|Cs], [Fun|Stack], Toks, Pos, State, Errors) 
  when O1 >= $0, O1 =&lt; $7 ->
    Val = O1 - $0,
    Fun([Val|Cs], Stack, Toks, Pos, State, Errors);
%% \^X -> CTL-X
sub_scan_escape([$^,C|Cs], [Fun|Stack], Toks, Pos, State, Errors) ->
    Val = C band 31,
    Fun([Val|Cs], Stack, Toks, Pos, State, Errors);
sub_scan_escape([$^]=Cs, Stack, Toks, Pos, State, Errors) ->
    more(Cs, Stack, Toks, Pos, State, Errors, fun sub_scan_escape/6);
sub_scan_escape([$^|Eof], [Fun|Stack], Toks, Pos, State, Errors) ->
    Fun(Eof, Stack, Toks, Pos, State, Errors);
%% \NL (backslash newline)
sub_scan_escape([$\n|Cs],[Fun|Stack], Toks, Pos, State, Errors) ->
    Fun([nl|Cs], Stack, Toks, Pos, State, Errors);
%% \X - familiar escape sequences
sub_scan_escape([C|Cs], [Fun|Stack], Toks, Pos, State, Errors) ->
    Val = escape_char(C),
    Fun([Val|Cs], Stack, Toks, Pos, State, Errors);
%%
sub_scan_escape([], Stack, Toks, Pos, State, Errors) ->
    more([], Stack, Toks, Pos, State, Errors, fun sub_scan_escape/6);
sub_scan_escape(Eof, [Fun|Stack], Toks, Pos, State, Errors) ->
    Fun(Eof, Stack, Toks, Pos, State, Errors).
</pre><br /><br />好的，接着得转到语法分析啦，找啊找，找到了源头yecc（parsetools/src/yecc.erl）<br />这回想让你体会一下Erlang的List Comprehensions:<br /><pre name="code" class="ruby">
find_user_code(ParseActions, St) ->
    [#user_code{state = State, 
                terminal = Terminal, 
                funname = inlined_function_name(State, Terminal), 
                action = Action} || 
        {State, La_actions} &lt;- ParseActions,
        {Action, Terminals, RuleNmbr, NmbrOfDaughters} 
            &lt;- find_user_code2(La_actions),
        case tokens(RuleNmbr, St) of
            [{var, _, '__1'}] -> NmbrOfDaughters =/= 1;
            _ -> true
        end,
        Terminal &lt;- Terminals].
</pre><br /><br />再快一点，跳到compiler/src/v3_core.erl超前体验一下为各类括号找配偶的“乐趣”<br /><pre name="code" class="ruby">
gexpr_test({atom,L,true}, Bools, St0) ->
    {#c_literal{anno=lineno_anno(L, St0),val=true},[],Bools,St0};
gexpr_test({atom,L,false}, Bools, St0) ->
    {#c_literal{anno=lineno_anno(L, St0),val=false},[],Bools,St0};
gexpr_test(E0, Bools0, St0) ->
    {E1,Eps0,St1} = expr(E0, St0),
    %% Generate "top-level" test and argument calls.
    case E1 of
	#icall{anno=Anno,module=#c_literal{val=erlang},name=#c_literal{val=N},args=As} ->
	    Ar = length(As),
	    case erl_internal:type_test(N, Ar) orelse
		erl_internal:comp_op(N, Ar) of
		true -> {E1,Eps0,Bools0,St1};
		false ->
		    Lanno = Anno#a.anno,
		    {New,St2} = new_var(Lanno, St1),
		    Bools = [New|Bools0],
		    {#icall{anno=Anno,	%Must have an #a{}
			    module=#c_literal{anno=Lanno,val=erlang},
			    name=#c_literal{anno=Lanno,val='=:='},
			    args=[New,#c_literal{anno=Lanno,val=true}]},
		     Eps0 ++ [#iset{anno=Anno,var=New,arg=E1}],Bools,St2}
	    end;
	_ ->
	    Anno = get_ianno(E1),
	    Lanno = get_lineno_anno(E1),
	    case core_lib:is_simple(E1) of
		true ->
		    Bools = [E1|Bools0],
		    {#icall{anno=Anno,	%Must have an #a{}
			    module=#c_literal{anno=Lanno,val=erlang},
			    name=#c_literal{anno=Lanno,val='=:='},
			    args=[E1,#c_literal{anno=Lanno,val=true}]},Eps0,Bools,St1};
		false ->
		    {New,St2} = new_var(Lanno, St1),
		    Bools = [New|Bools0],
		    {#icall{anno=Anno,	%Must have an #a{}
			    module=#c_literal{anno=Lanno,val=erlang},
			    name=#c_literal{anno=Lanno,val='=:='},
			    args=[New,#c_literal{anno=Lanno,val=true}]},
		     Eps0 ++ [#iset{anno=Anno,var=New,arg=E1}],Bools,St2}
	    end
    end.
</pre><br /><br /><br /><br />累了，先说这么多，有反对的，下回眼睛休息好了继续砸死Erlang（恶狼）<br /><br />最后给个Erlang让人超级傻眼的例子（你认为输出是什么?)：<br /><pre name="code" class="ruby">
-module(record_test).
-export([test/0]).
-record(rec,{f1,f2}).

test()->
Rec2=#rec{f1=2,f2=3},
test2(Rec2),
io:fwrite("Rec2=~p ~n",[Rec2]),

F1=2,
F2=ets:new(rec_f2, [set]),
Rec3 = #rec{f1 =F1, f2=F2},
ets:insert(Rec3#rec.f2, {10}),
io:fwrite("Rec3#rec.f2=~p ~n",[ets:tab2list(Rec3#rec.f2)]),
test3(Rec3),
io:fwrite("Rec3#rec.f2=~p ~n",[ets:tab2list(Rec3#rec.f2)]),
io:fwrite("Rec3=~p ~n",[Rec3]).

test2(Rec)->
Rec#rec{f1=20,f2=30}.

test3(Rec)->
Rec#rec{f1=20,f2=ets:insert(Rec#rec.f2, {30})}.
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ziyan200801.javaeye.com/blog/179337#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Apr 2008 17:34:24 +0800</pubDate>
        <link>http://ziyan200801.javaeye.com/blog/179337</link>
        <guid>http://ziyan200801.javaeye.com/blog/179337</guid>
      </item>
      <item>
        <title>现在写技术类(高阶)图书有市场吗？</title>
        <author>自言200801</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ziyan200801.javaeye.com">自言200801</a>&nbsp;
          链接：<a href="http://ziyan200801.javaeye.com/blog/160203" style="color:red;">http://ziyan200801.javaeye.com/blog/160203</a>&nbsp;
          发表时间: 2008年01月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          比如像java语言编译器、虚拟机，<br />ruby解析器，tomcat这样的开源的东西，<br />在书里边分析源码边讲述设计理论。<br /><br /><br />国内好少见有这样的图书，是否是因为读者群体太小，<br />作者、出版社都不愿花时间、花钱去出书？
          <br/>
          <span style="color:red;">
            <a href="http://ziyan200801.javaeye.com/blog/160203#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Jan 2008 19:20:52 +0800</pubDate>
        <link>http://ziyan200801.javaeye.com/blog/160203</link>
        <guid>http://ziyan200801.javaeye.com/blog/160203</guid>
      </item>
  </channel>
</rss>