<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://dengyin2000.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdengyin2000.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Java Dreams</title><description>Java Dreams</description><link>http://dengyin2000.spaces.live.com/</link><language>en-US</language><pubDate>Sat, 02 Aug 2008 01:08:53 GMT</pubDate><lastBuildDate>Sat, 02 Aug 2008 01:08:53 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>-5815636772130029849</live:id><live:alias>dengyin2000</live:alias></live:identity><image><title>Java Dreams</title><url>http://byfiles.storage.live.com/y1pgSicOwHsT-jfLW9vG1f_drKmLY8mELK-84nufmuK5A-PkB6n84claA</url><link>http://dengyin2000.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Tapestry之Cache组件</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!258.entry</link><description>&lt;blockquote&gt; &lt;p&gt;有许多页面的一部分或者这个页面是很少更新的，他们通常是由外部文件来生成这个部分。所以我们可以把这部分内容cache住，当有新的请求时，我们就response cache，这样可以减少服务器的负担，还可以提高性能。其中oscache已经可以实现页面的cache和页面部分cache。oscache使用jsp tags来实现局部cache的。拿到Tapestry中肯定是行不通的。在同事的提醒下，想到写这个Tapestry的cache组件来达到重用的目的。 &lt;p&gt;  &lt;p&gt;说干就干，先在头脑中想好要怎样使用cache（页面上的布局）。ok。 我想好了。 &lt;p&gt;&lt;strong&gt;&amp;lt;span jwcid=&amp;quot;@Cache&amp;quot; cacheProvider=&amp;quot;ognl:cacheProvider&amp;quot; updateCondition=&amp;quot;ognl:needUpdate&amp;quot;&amp;gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;    //Cache body, which is the content you want to cache.&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&amp;lt;/span&amp;gt;&lt;/strong&gt; &lt;p&gt;这里有2个参数，updateCondition 当为true时，我们就绕过cache， cacheProvider 我把他定义为一个接口，这样用户可以把cache存在任何地方。而且提供这样的一个接口，用户可以更好的操作cache。先看看jwc对cache组件的定义。 &lt;p&gt;  &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;!DOCTYPE component-specification PUBLIC &lt;br&gt;&amp;quot;-//Apache Software Foundation//Tapestry Specification 4.0//EN&amp;quot; &lt;br&gt;&amp;quot;&lt;a href="http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd&amp;quot;"&gt;http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd&amp;quot;&lt;/a&gt;&amp;gt;  &lt;p&gt;&amp;lt;component-specification allow-body=&amp;quot;yes&amp;quot; allow-informal-parameters=&amp;quot;no&amp;quot; class=&amp;quot;com.live.spaces.dengyin2000.tapestry.tfancomponents.components.Cache&amp;quot;&amp;gt;&lt;br&gt;   &amp;lt;description&amp;gt;&lt;br&gt;   Cache component, this component can inclue any content as its body, and cache its body.&lt;br&gt;    This is useful in rarely updated content.&lt;br&gt;    &amp;lt;/description&amp;gt;&lt;br&gt;&amp;lt;parameter name=&amp;quot;updateCondition&amp;quot; required=&amp;quot;no&amp;quot; default-value=&amp;quot;false&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;description&amp;gt;&lt;br&gt;     The flag that need to refresh cache, it would casue tapestry render not use the cache.&lt;br&gt;    &amp;lt;/description&amp;gt;&lt;br&gt;&amp;lt;/parameter&amp;gt;&lt;br&gt;&amp;lt;parameter name=&amp;quot;cacheProvider&amp;quot; required=&amp;quot;yes&amp;quot;&amp;gt;&lt;br&gt;     &amp;lt;description&amp;gt;&lt;br&gt;     You need to provider an cache provider to store its body content. for some simply use.&lt;br&gt;    Please see     @com.live.spaces.dengyin2000.tapestry.tfancomponents.components.SimpleHtmlSourceCacheProvider&lt;br&gt;    &amp;lt;/description&amp;gt;&lt;br&gt;&amp;lt;/parameter&amp;gt;&lt;br&gt;&amp;lt;/component-specification&amp;gt; &lt;p&gt;下面的是ICacheProvider接口 &lt;p&gt;  &lt;p&gt;public interface ICacheProvider {&lt;br&gt;/**&lt;br&gt;* &lt;br&gt;* @param cacheKey&lt;br&gt;* @param cacheContent&lt;br&gt;*/&lt;br&gt;public void storeCache(String cacheKey, String cacheContent);&lt;br&gt;/**&lt;br&gt;* &lt;br&gt;* @param cacheKey&lt;br&gt;* @return&lt;br&gt;*/&lt;br&gt;public String getCacheContent(String cacheKey); &lt;br&gt;/**&lt;br&gt;* This method provider to user, so that user can controll cache manaully.&lt;br&gt;* @param cacheKey&lt;br&gt;*/&lt;br&gt;public void removeCache(String cacheKey);&lt;br&gt;/**&lt;br&gt;* This method provider to user, so that user can controll cache manaully.&lt;br&gt;* Clear all caches&lt;br&gt;*&lt;br&gt;*/&lt;br&gt;public void reset();&lt;br&gt;} &lt;p&gt;ok。 再来看看Cache组件的代码。 &lt;p&gt;  &lt;p&gt;public abstract class Cache extends AbstractComponent {&lt;br&gt;protected static final Log logger = LogFactory.getLog(Cache.class);&lt;br&gt;public abstract boolean getUpdateCondition();&lt;br&gt;public abstract ICacheProvider getCacheProvider();&lt;br&gt;@Override&lt;br&gt;protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {&lt;br&gt;if (getUpdateCondition()){&lt;br&gt;renderComponentWithCache(writer, cycle);&lt;br&gt;}else{&lt;br&gt;if (getCacheProvider().getCacheContent(this.getIdPath()) != null){&lt;br&gt;//response cache html content.&lt;br&gt;writer.printRaw(getCacheProvider().getCacheContent(this.getIdPath()));&lt;br&gt;}else{&lt;br&gt;renderComponentWithCache(writer, cycle);&lt;br&gt;}&lt;br&gt;}  &lt;p&gt;}&lt;br&gt;private void renderComponentWithCache(IMarkupWriter writer, IRequestCycle cycle) {  &lt;p&gt;logger.debug(&amp;quot;We need to refresh cache now.&amp;quot;);&lt;br&gt;CacheWriterWrapper cacheWrapper = new CacheWriterWrapper();&lt;br&gt;super.renderBody(buildCacheMarkupWriter(cacheWrapper.getPrintWriter(), writer), cycle);&lt;br&gt;String cacheContent = cacheWrapper.getCacheContent();&lt;br&gt;logger.debug(&amp;quot;fetched cache content, ready to put it into cache.&amp;quot;);  &lt;p&gt;getCacheProvider().storeCache(this.getIdPath(), cacheContent);&lt;br&gt;// response html content.&lt;br&gt;writer.printRaw(cacheContent);&lt;br&gt;}&lt;br&gt;private IMarkupWriter buildCacheMarkupWriter(PrintWriter writer, IMarkupWriter sourceWriter){&lt;br&gt;return this.getPage().getRequestCycle().getInfrastructure().getMarkupWriterSource().newMarkupWriter(writer, new ContentType(sourceWriter.getContentType()));&lt;br&gt;}&lt;br&gt;class CacheWriterWrapper{&lt;br&gt;private StringWriter sw;&lt;br&gt;private PrintWriter pw; &lt;br&gt;public CacheWriterWrapper() {&lt;br&gt;sw = new StringWriter();&lt;br&gt;pw = new PrintWriter(sw);&lt;br&gt;}  &lt;p&gt;public String getCacheContent(){&lt;br&gt;return sw.getBuffer().toString();&lt;br&gt;}&lt;br&gt;public PrintWriter getPrintWriter(){&lt;br&gt;return pw;&lt;br&gt;}&lt;br&gt;}&lt;br&gt;} &lt;p&gt;主要是得到cache组件body的内容，然后把body的内容cache住，下次的话就response Cache的内容。 其实也是满简单的。 &lt;p&gt;我自己还写了一个简单CacheProvider。 &lt;p&gt;  &lt;p&gt;public class SimpleHtmlSourceCacheProvider implements ICacheProvider {&lt;br&gt;private Map&amp;lt;String, String&amp;gt; cache = new HashMap&amp;lt;String, String&amp;gt;();&lt;br&gt;public String getCacheContent(String cacheKey) {&lt;br&gt;return cache.get(cacheKey);&lt;br&gt;}  &lt;p&gt;public void storeCache(String cacheKey, String cacheContent) {&lt;br&gt;cache.put(cacheKey, cacheContent);&lt;br&gt;}  &lt;p&gt;public void removeCache(String cacheKey) {&lt;br&gt;cache.remove(cacheKey);&lt;br&gt;}  &lt;p&gt;public void reset() {&lt;br&gt;cache.clear();&lt;br&gt;}&lt;br&gt;} &lt;p&gt;在使用中你可以把CacheProvider放到Global或者Visit对象中。注意要使用同一个CacheProvider。 &lt;p&gt;我在google code host上面建了一个probject地址是&lt;a title="http://code.google.com/p/tfancomponents/" href="http://code.google.com/p/tfancomponents/"&gt;http://code.google.com/p/tfancomponents/&lt;/a&gt; 有兴趣的同学可以看看， 这是一个maven项目。&lt;/blockquote&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Tapestry%e4%b9%8bCache%e7%bb%84%e4%bb%b6&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!258.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!258.entry</guid><pubDate>Fri, 22 Dec 2006 03:09:02 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!258/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!258.entry#comment</wfw:comment><dcterms:modified>2006-12-22T03:20:35Z</dcterms:modified></item><item><title>提高eclipse在windows下的性能</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!254.entry</link><description>在windows中，假如程序处理一定的状态下，会把memory放到paging里面。这样就降低了性能，但提高了memory的利用率。 &lt;br&gt;&lt;br&gt;打开windows注册表， 找到 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\DisablePagingExecutive  值， 然后把这个值1。 这样应用程序就会一直使用物理内存了。&lt;br&gt;&lt;br&gt;详细请看：http://technet2.microsoft.com/WindowsServer/en/library/3d3b3c16-c901-46de-8485-166a819af3ad1033.mspx?mfr=true&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e6%8f%90%e9%ab%98eclipse%e5%9c%a8windows%e4%b8%8b%e7%9a%84%e6%80%a7%e8%83%bd&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Eclipse</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!254.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!254.entry</guid><pubDate>Wed, 29 Nov 2006 04:04:37 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!254/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!254.entry#comment</wfw:comment><dcterms:modified>2006-11-29T04:04:37Z</dcterms:modified></item><item><title>让GWT的FlexTable支持双击（double click）</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!253.entry</link><description>&lt;div&gt;
&lt;p&gt;Each event has a set of browser events that fires it.  For example take &lt;br&gt;
&lt;p&gt;a look at the source of the HTMLTable Class in the gwt-user jar.  It &lt;br&gt;has the following constructor: &lt;br&gt;
&lt;p&gt;  public HTMLTable() { &lt;br&gt;    tableElem = DOM.createTable(); &lt;br&gt;    bodyElem = DOM.createTBody(); &lt;br&gt;    DOM.appendChild(tableElem, bodyElem); &lt;br&gt;    setElement(tableElem); &lt;br&gt;    sinkEvents(Event.ONCLICK); &lt;br&gt;  } &lt;br&gt;
&lt;p&gt;Basically, it is &amp;quot;sinking&amp;quot; only the ONCLICK event, and will ignore all &lt;br&gt;other events.   To 'sink' and event just means to react to any firings &lt;br&gt;of that event.  A full list of the various events are listed here: &lt;br&gt;
&lt;p&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.c"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://code.google.com/webtoolkit/documentation/com.google.gwt.user.c&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;... &lt;br&gt;
&lt;p&gt;So, for example, if you wanted the &lt;b style="color:black;background-color:rgb(255,255,102)"&gt;table&lt;/b&gt; to respond to ONDBLCLICK &lt;br&gt;events, all you need to do is extend the class of the &lt;b style="color:black;background-color:rgb(255,255,102)"&gt;table&lt;/b&gt; you want to &lt;br&gt;
&lt;p&gt;use (let's say FlexTable), so you would make the class: &lt;br&gt;
&lt;p&gt;public class HappyTable extends FlexTable { &lt;br&gt;        public HappyTable(){ &lt;br&gt;                super(); &lt;br&gt;                addTableListener(this); &lt;br&gt;                sinkEvents(Event.ONCLICK | Event.ONDBLCLICK | &lt;br&gt;Event.ONKEYDOWN); &lt;br&gt;        } &lt;br&gt;... &lt;br&gt;
&lt;p&gt;
&lt;div style="display:block"&gt;} &lt;br&gt;&lt;br&gt;&lt;/div&gt;What this code is doing, is telling the &lt;b style="color:black;background-color:rgb(255,255,102)"&gt;table&lt;/b&gt; to react to &lt;b style="color:black;background-color:rgb(255,153,153)"&gt;click&lt;/b&gt;, &lt;b style="color:black;background-color:rgb(153,255,153)"&gt;double&lt;/b&gt; &lt;br&gt;
&lt;p&gt;&lt;b style="color:black;background-color:rgb(255,153,153)"&gt;click&lt;/b&gt;, and key press events.  In the same code you would create an &lt;br&gt;onBrowser event method which would define what you want to do: &lt;br&gt;
&lt;p&gt;public void onBrowserEvent(Event event) { &lt;br&gt;                // Find out which cell was actually clicked. &lt;br&gt;                Element td = getEventTargetCell(event); &lt;br&gt;                if (td == null) { &lt;br&gt;                        return; &lt;br&gt;                } &lt;br&gt;                Element tr = DOM.getParent(td); &lt;br&gt;                Element body = DOM.getParent(tr); &lt;br&gt;                int &lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt; = DOM.getChildIndex(body, tr); &lt;br&gt;                int column = DOM.getChildIndex(tr, td); &lt;br&gt;                switch (DOM.eventGetType(event)) { &lt;br&gt;                case Event.ONCLICK: { &lt;br&gt;                        if (this.tableListeners != null) { &lt;br&gt;                                // Fire the event. &lt;br&gt;                                tableListeners.fireCellClicked(this, &lt;br&gt;&lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, column); &lt;br&gt;                        } &lt;br&gt;                        break; &lt;br&gt;
&lt;p&gt;                } &lt;br&gt;                case Event.ONDBLCLICK: { &lt;br&gt;                        if (this.tableListeners != null) { &lt;br&gt;                                // Fire the event. &lt;br&gt;                                tableListeners.fireCellDblClicked(this, &lt;br&gt;&lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, column); &lt;br&gt;                        } &lt;br&gt;                        break; &lt;br&gt;                } &lt;br&gt;                case Event.ONKEYDOWN: { &lt;br&gt;                        if (DOM.eventGetKeyCode(event) == KEY_UP) { &lt;br&gt;                                // Fire the event. &lt;br&gt;                                tableListeners.fireUpKey(this); &lt;br&gt;                        } &lt;br&gt;                        else if (DOM.eventGetKeyCode(event) == &lt;br&gt;KEY_DOWN) { &lt;br&gt;                                // Fire the event. &lt;br&gt;                                tableListeners.fireDownKey(this); &lt;br&gt;                        } &lt;br&gt;                        break; &lt;br&gt;                } &lt;br&gt;                default: { &lt;br&gt;                        // Do nothing &lt;br&gt;                } &lt;br&gt;
&lt;p&gt;                } &lt;br&gt;        } &lt;br&gt;
&lt;p&gt;Because I was doing a variety of things with the &lt;b style="color:black;background-color:rgb(255,255,102)"&gt;table&lt;/b&gt; I created my own &lt;br&gt;
&lt;p&gt;listener interface, and listener collection which included &lt;b style="color:black;background-color:rgb(153,255,153)"&gt;double&lt;/b&gt; &lt;br&gt;clicks, but this is not necessary for simpler things.  Here it is &lt;br&gt;anyway (note that this implements all of clicks, dblclicks, and up/down &lt;br&gt;
&lt;p&gt;keys): &lt;br&gt;
&lt;p&gt;public interface HappyTableListener extends TableListener{ &lt;br&gt;
&lt;p&gt;        public void onCellDblClicked(SourcesTableEvents sender, int &lt;br&gt;&lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, int &lt;br&gt;cell); &lt;br&gt;        public void onUpKey(SourcesTableEvents sender); &lt;br&gt;        public void onDownKey(SourcesTableEvents sender); &lt;br&gt;
&lt;p&gt;
&lt;div style="display:block"&gt;} &lt;br&gt;&lt;br&gt;&lt;/div&gt;public class MyTableListenerCollection extends Vector { &lt;br&gt;
&lt;p&gt;        public void fireCellClicked(SourcesTableEvents sender, int &lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, &lt;br&gt;int &lt;br&gt;cell) { &lt;br&gt;                for (Iterator it = iterator(); it.hasNext();) { &lt;br&gt;                        MyTableListener listener = (MyTableListener) &lt;br&gt;it.next(); &lt;br&gt;                        listener.onCellClicked(sender, &lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, cell); &lt;br&gt;                } &lt;br&gt;        } &lt;br&gt;
&lt;p&gt;        public void fireCellDblClicked(SourcesTableEvents sender, int &lt;br&gt;&lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, int &lt;br&gt;cell) { &lt;br&gt;                for (Iterator it = iterator(); it.hasNext();) { &lt;br&gt;                        MyTableListener listener = (MyTableListener) &lt;br&gt;it.next(); &lt;br&gt;                        listener.onCellDblClicked(sender, &lt;b style="color:black;background-color:rgb(160,255,255)"&gt;row&lt;/b&gt;, cell); &lt;br&gt;                } &lt;br&gt;        } &lt;br&gt;
&lt;p&gt;        public void fireUpKey(SourcesTableEvents sender) { &lt;br&gt;                for (Iterator it = iterator(); it.hasNext();) { &lt;br&gt;                        MyTableListener listener = (MyTableListener) &lt;br&gt;it.next(); &lt;br&gt;                        listener.onUpKey(sender); &lt;br&gt;                } &lt;br&gt;        } &lt;br&gt;        public void fireDownKey(SourcesTableEvents sender) { &lt;br&gt;                for (Iterator it = iterator(); it.hasNext();) { &lt;br&gt;                        MyTableListener listener = (MyTableListener) &lt;br&gt;it.next(); &lt;br&gt;                        listener.onDownKey(sender); &lt;br&gt;                } &lt;br&gt;        } &lt;/div&gt;
&lt;p&gt;详细请看：&lt;a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/861b1cb22c8423c3/fcaf84884d8d3d13?lnk=gst&amp;amp;q=table+row+double+click&amp;amp;rnum=1#fcaf84884d8d3d13"&gt;http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/861b1cb22c8423c3/fcaf84884d8d3d13?lnk=gst&amp;amp;q=table+row+double+click&amp;amp;rnum=1#fcaf84884d8d3d13&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e8%ae%a9GWT%e7%9a%84FlexTable%e6%94%af%e6%8c%81%e5%8f%8c%e5%87%bb%ef%bc%88double+click%ef%bc%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ajax</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!253.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!253.entry</guid><pubDate>Fri, 24 Nov 2006 05:57:52 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!253/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!253.entry#comment</wfw:comment><dcterms:modified>2006-11-24T05:57:52Z</dcterms:modified></item><item><title>Dojo TreeV3使用详解</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry</link><description>&lt;h2&gt;
    &lt;span style="font-weight:bold"&gt; Dojo TreeV3使用详解&lt;/span&gt;
  &lt;/h2&gt;
  &lt;div style="text-align:center"&gt;
                                                 
    作者：邓胤(deng.yin@gmail.com)&lt;br&gt;
  &lt;/div&gt;
  &lt;br&gt;
  
       
    工作中使用了TreeV3这个dojo的组件，感觉基本上已经是把dojo的treeV3使用到了极点（自定义树的外观，树节点的拖拉，把其他Drag
    Source拖拉到树中），公司也要求我作个treeV3演说。所以特意把这篇文章写下来。&lt;br&gt;
    &lt;br&gt;
        首先先对treeV3做一个简单的介绍。TreeV3.js, TreeNodeV3.js,
    .TreeBasicControllerV3.js,
    TreeContextMenuV3.js,TreeDndControllerV3.js,TreeEditor.js,
    主要的就是这些js一起协作。有兴趣的可以看看源码，
    其实dojo的代码看起来还算是瞒简单的。下面我就用几个例子来说明怎样扩展或自定义TreeV3。本篇文章是增对有一定dojo知识的读者，如果你现在还不了解dojo，请看&lt;br&gt;
    http://dojotoolkit.org/.&lt;br&gt;
    &lt;br&gt;
        &lt;font size=4&gt;1.  为叶子节点增加图标。&lt;/font&gt;&lt;br&gt;
           IconTree.html&lt;br&gt;
          &lt;br&gt;
    &lt;div&gt;
      &amp;lt;div dojoType=&amp;quot;TreeV3&amp;quot; listeners=&amp;quot;controller&amp;quot;&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 1&amp;quot;
      widgetId=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 1.1&amp;quot; widgetId=&amp;quot;Item 1.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 1.2&amp;quot; widgetId=&amp;quot;Item 1.2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 2&amp;quot;
      widgetId=&amp;quot;Item 2&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 2.1&amp;quot; widgetId=&amp;quot;Item 2.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Empty Folder&amp;quot;
      isFolder=&amp;quot;true&amp;quot; widgetId=&amp;quot;Item 3&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      &lt;span style="font-weight:bold"&gt;childIconSrc=&amp;quot;images/page.gif&amp;quot;&lt;/span&gt;
      title=&amp;quot;Item 4&amp;quot; widgetId=&amp;quot;Item 4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
    &lt;/div&gt;
        我们在每个TreeNode上加上childIconSrc属性。请看icontree.js怎样让这个属性生效的。&lt;br&gt;
        icontree.js&lt;br&gt;
    
      dojo.lang.extend(dojo.widget.TreeNodeV3, {&lt;br&gt;
          childIconsrc: &amp;quot;&amp;quot;,&lt;br&gt;
          childIcon: null,&lt;br&gt;
          iconNode:null,&lt;br&gt;
          titleNode:null,&lt;br&gt;
          postCreate: function(args) {&lt;br&gt;
          //build icon&lt;br&gt;
              if (args[&amp;quot;childIconsrc&amp;quot;]) {&lt;br&gt;
                  this.childIconsrc
      = args[&amp;quot;childIconsrc&amp;quot;];&lt;br&gt;
              }&lt;br&gt;
              this.childIcon =
      document.createElement(&amp;quot;img&amp;quot;);&lt;br&gt;
              if (this.childIconsrc != &amp;quot;&amp;quot;) {&lt;br&gt;
                 
      this.childIcon.src = this.childIconsrc;&lt;br&gt;
                 
      this.childIcon.setAttribute(&amp;quot;width&amp;quot;, &amp;quot;16&amp;quot;);&lt;br&gt;
                 
      this.childIcon.setAttribute(&amp;quot;height&amp;quot;, &amp;quot;16&amp;quot;);&lt;br&gt;
              }&lt;br&gt;
              this.iconNode =
      this.tree.labelNodeTemplate.cloneNode(true);&lt;br&gt;
              this.titleNode =
      this.tree.labelNodeTemplate.cloneNode(true);&lt;br&gt;
              if (!this.isFolder){&lt;br&gt;
                  //clear treenode,
      if it is not folder node&lt;br&gt;
                 
      this.labelNode.innerHTML=&amp;quot;&amp;quot;;&lt;br&gt;
              }&lt;br&gt;
              this.titleNode.innerHTML=this.title;&lt;br&gt;
             
      this.iconNode.appendChild(this.childIcon);&lt;br&gt;
              // add icon first, then add title&lt;br&gt;
             
      this.labelNode.appendChild(this.iconNode);&lt;br&gt;
             
      this.labelNode.appendChild(this.titleNode);   
         &lt;br&gt;
          }&lt;br&gt;
      });&lt;br&gt;
      我们扩展了TreeNodeV3这个组件的postCreate方法（&lt;span style="color:rgb(255, 0, 0)"&gt;dojo组件都有这个方法，他相当于构造方法吧，我们可以在这里做必要的初始化&lt;/span&gt;），这里做的事应该比较清楚，我们通过childIconsrc这个属性创建了iconNode，
      然后清空TreeNodeV3的labelNode。再增加iconNode和titleNode&lt;br&gt;
      &lt;br&gt;
      &lt;font size=4&gt;2. 拖动物体到tree中&lt;/font&gt;&lt;br&gt;
      dragother.html&lt;br&gt;
      &amp;lt;div dojoType=&amp;quot;TreeV3&amp;quot; DndMode=&amp;quot;between;onto&amp;quot;
      &lt;span style="font-weight:bold"&gt;DndAcceptTypes=&amp;quot;firstTree;feed&amp;quot;&lt;/span&gt;
      widgetId=&amp;quot;firstTree&amp;quot;
      listeners=&amp;quot;basicController;&lt;span style="font-weight:bold"&gt;dndcontroller&lt;/span&gt;;selector;disableWrap&amp;quot;
      toggle=&amp;quot;fade&amp;quot; showGrid=&amp;quot;false&amp;quot; showRootGrid=&amp;quot;true&amp;quot;&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 1&amp;quot;
      widgetId=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; 
      title=&amp;quot;Item 1.1&amp;quot; widgetId=&amp;quot;Item 1.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      title=&amp;quot;Item 1.2&amp;quot; widgetId=&amp;quot;Item 1.2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 2&amp;quot;
      widgetId=&amp;quot;Item 2&amp;quot;&amp;gt;&lt;br&gt;
              &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot;
      title=&amp;quot;Item 2.1&amp;quot; widgetId=&amp;quot;Item 2.1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Empty Folder&amp;quot;
      isFolder=&amp;quot;true&amp;quot; widgetId=&amp;quot;Item 3&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
          &amp;lt;div dojoType=&amp;quot;TreeNodeV3&amp;quot; title=&amp;quot;Item 4&amp;quot;
      widgetId=&amp;quot;Item 4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
      &lt;br&gt;
      &amp;lt;br/&amp;gt;&lt;br&gt;
      &lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_0&amp;quot;&amp;gt;Drag me0 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_1&amp;quot;&amp;gt;Drag me1 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span id=&amp;quot;feed_2&amp;quot;&amp;gt;Drag me2 to tree.&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&lt;br&gt;
      &amp;lt;span&amp;gt;You can't drag me.&amp;lt;/span&amp;gt;&lt;br&gt;
      注意黑体的DndAcceptTypes属性。说明这个树接受dragSource
      type为firstTree或者feed的（也就是自己，还有就是下面的span， 我们需要把span变成可以拖动的物体
      dragSource）。再看dragother.js。&lt;br&gt;
          dojo.addOnLoad(function(){&lt;br&gt;
                 var num = 0;&lt;br&gt;
                 while(dojo.byId(&amp;quot;feed_&amp;quot;
      + num) != null){&lt;br&gt;
                     var
      dropSource = new dojo.dnd.HtmlDragSource(dojo.byId(&amp;quot;feed_&amp;quot; + num),
      &amp;quot;feed&amp;quot;);&lt;br&gt;
                    
      num++;&lt;br&gt;
              }   &lt;br&gt;
          });&lt;br&gt;
      &lt;br&gt;
      dojo.dnd.TreeDropTargetV3.prototype.oldGetDropHandler =
      dojo.dnd.TreeDropTargetV3.prototype.getDropHandler;&lt;br&gt;
      dojo.lang.extend(dojo.dnd.TreeDropTargetV3, {&lt;br&gt;
         &lt;br&gt;
          getDropHandler: function(e, source, targetParent,
      targetIndex) {&lt;br&gt;
              if (source.type == &amp;quot;feed&amp;quot;){&lt;br&gt;
                  var sourceNode =
      source.domNode;&lt;br&gt;
                  if
      (dojo.widget.byId(sourceNode.id) != null){&lt;br&gt;
                 
          alert(&amp;quot;this widget has already been here.&amp;quot;);&lt;br&gt;
                 
          return function(){&lt;br&gt;
                 
              return false;&lt;br&gt;
                 
          }&lt;br&gt;
                  }
                 &lt;br&gt;
                  var node =
      createTreeNode(sourceNode.id, sourceNode.innerHTML);&lt;br&gt;
                 
      targetParent.addChild(node, targetIndex);&lt;br&gt;
                  return
      function(){&lt;br&gt;
                 
          return true;&lt;br&gt;
                  }&lt;br&gt;
              }&lt;br&gt;
              return this.oldGetDropHandler(e,
      source, targetParent, targetIndex);&lt;br&gt;
          }   &lt;br&gt;
      });   &lt;br&gt;
      &lt;br&gt;
      function createTreeNode(widgetId, title) {&lt;br&gt;
          return dojo.widget.createWidget(&amp;quot;TreeNodeV3&amp;quot;,&lt;br&gt;
          {&lt;br&gt;
              widgetId:
      widgetId,           
                 
                 
                 
         &lt;br&gt;
              title: title,&lt;br&gt;
              isFolder: false,&lt;br&gt;
              tree: 'firstTree'&lt;br&gt;
          });&lt;br&gt;
      }&lt;br&gt;
      &lt;br&gt;
第一段是让那些span成为dragsource。第二段我们hack了dojo.dnd.TreeDropTargetV3的
getDropHandler方法（具体可以看看TreeDndControllerV3.js）。当我们接收到dragSources时我们获取那些
span中的一些信息，然后create 一个treeNode，在把这个treeNode加到树中。&lt;br&gt;
      &lt;br&gt;
      3.   ...................................................&lt;br&gt;
      4.   ...................................................&lt;br&gt;
      5.   ...................................................&lt;br&gt;
      &lt;br&gt;
      
        还有一些hack treeV3的东西实在不愿写。
        dojo的treeV3真的是蛮强大的（&lt;span style="color:rgb(255, 0, 0)"&gt;仔细看看那几个＊＊Controller和TreeV3
        TreeNodeV3的源码&lt;/span&gt;），
        而且dojo的widget源码还是蛮容易理解的。有兴趣的朋友可以看看dojo的源码。还有就是dojo包里面tests目录下面的例子。大多数应用的话看看里面的例子也就行了。&lt;br&gt;
        &lt;br&gt;
        &lt;span style="color:rgb(255, 0, 0)"&gt;例
子的源码可以在http://deng.yin.googlepages.com/TreeV3Sample.zip下载。本例子中没有包括
dojo0.4源码，用户可以到http://download.dojotoolkit.org/release-0.4.0/dojo-0.4.0-
ajax.zip下载源码， 然后解压到例子中的dojo目录。&lt;br&gt;&lt;br&gt;格式不好的话可以看http://docs.google.com/View?docid=ajgd3tgv958v_3gz374h&lt;br&gt;&lt;/span&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Dojo+TreeV3%e4%bd%bf%e7%94%a8%e8%af%a6%e8%a7%a3&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>javascript</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry</guid><pubDate>Wed, 15 Nov 2006 08:38:07 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!250/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!250.entry#comment</wfw:comment><dcterms:modified>2006-11-15T08:38:07Z</dcterms:modified></item><item><title>HttpURLConnection 访问页面时发生403问题。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry</link><description>工作中发现一个问题。当我用HttpURLConnection去连接读取一个网站时，老是会发生这个403错误。这个引起了IOException，但是我用firefox访问这个网站时就没问题。 google后知道了答案。原来如果用java代码HttpURLConnection去连的话 http header 中的User-Agent就为空，解决方法就是在连接之前先设置这个属性。&lt;br&gt;&lt;pre&gt;URL myUrl = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; URL(searchURL);&lt;br&gt;URLConnection myConn = (HttpURLConnection)myUrl.openConnection();&lt;br&gt;myConn.setRequestProperty(&lt;font color=red&gt;&amp;quot;User-agent&amp;quot;&lt;/font&gt;,&lt;font color=red&gt;&amp;quot;Mozilla/4.0&amp;quot;&lt;/font&gt;);&lt;br&gt;BufferedReader br = &lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; BufferedReader(&lt;font color=navy&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; InputStreamReader(myConn.getInputStream()));&lt;br&gt;&lt;br&gt;&lt;/pre&gt;&lt;p&gt;那台Server上要这么做， 可能是要组织一些网络机器人的访问（不过感觉不是很有用，用上面的方法就能破了）。 其实实现感觉也很简单， 加上一个Filter，判断如果request.getHeader(&lt;font color=red&gt;&amp;quot;User-agent&amp;quot;&lt;/font&gt;)为空的话，然后再response一个403 status就行。&lt;br&gt;
&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+HttpURLConnection+%e8%ae%bf%e9%97%ae%e9%a1%b5%e9%9d%a2%e6%97%b6%e5%8f%91%e7%94%9f403%e9%97%ae%e9%a2%98%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>java基础</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry</guid><pubDate>Wed, 15 Nov 2006 05:03:43 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!249/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!249.entry#comment</wfw:comment><dcterms:modified>2006-11-15T05:03:43Z</dcterms:modified></item><item><title>晕，inputstream for get image from internet.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry</link><description>需要网站的favicon保存到数据库中。思路很简单连接internet，然后得到图片的bytes保存到数据库的blob字段就行。但是我却在取到图片的bytes上面浪费了许多时间。&lt;br&gt;&lt;br&gt;开始的代码如下&lt;br&gt;    boolean fetched = false;&lt;br&gt;        URL url = null;&lt;br&gt;        try {&lt;br&gt;            url = new URL(&amp;quot;http://&amp;quot; + channel.getSite().getHost() + &amp;quot;/favicon.ico&amp;quot;);&lt;br&gt;            HttpURLConnection httpURL = (HttpURLConnection) url.openConnection();&lt;br&gt;            //httpURL.setConnectTimeout(60*1000);&lt;br&gt;            httpURL.connect();&lt;br&gt;            if (httpURL.getResponseCode()==200){&lt;br&gt;                InputStream is = httpURL.getInputStream(); &lt;br&gt;                int length = is.available();&lt;br&gt;                byte[] bytes = new byte[length];&lt;br&gt;                is.read(bytes, 0, length);&lt;br&gt;                Blob blob = Hibernate.createBlob(bytes);&lt;br&gt;                ((Image)image).setLocalSmallImage(blob);&lt;br&gt;                logger.debug(&amp;quot;Image URL:[&amp;quot; + url + &amp;quot;] has been fetched.&amp;quot;);&lt;br&gt;                logger.debug(&amp;quot;read image size:&amp;quot; + length);&lt;br&gt;                fetched = true;&lt;br&gt;            }&lt;br&gt;        } catch (Exception e)    {&lt;br&gt;            //ignored&lt;br&gt;        }&lt;br&gt;        if (!fetched)&lt;br&gt;            logger.debug(&amp;quot;Fail to fetch Image URL:[&amp;quot; + url + &amp;quot;] &amp;quot;);&lt;br&gt;在本地上设置断点调试发现一切正常。 但是发不到服务器上却发现数据更本没有保存到进去，或者只保存进去一部分。奇怪！然后log了bytes的长度（logger.debug(&amp;quot;read image size:&amp;quot; + length);）。发现这时候的长度为0。上面的代码肯定是有问题。 因为网络延时之类的这里的available根本就不准确。其实这里我们应该像读取一个文件，然后在把他写入另一个文件的操作是一样的。需要先用过inputstream read出bytes， 然后再通过outputstream把bytes输出。 但是这里我们不需要写到文件之类的datasource中。我们需要的只是bytes。我们可以方便的使用ByteArrayOutputStream来存储我们的bytes。&lt;br&gt;&lt;br&gt;    public static byte[] getAllBytes(InputStream in) throws Exception {&lt;br&gt;        int chunkSize = 4096;&lt;br&gt;        byte[] b = new byte[chunkSize];&lt;br&gt;        int borb = -1;&lt;br&gt;        ByteArrayOutputStream fos = new ByteArrayOutputStream();&lt;br&gt;        while ((borb = in.read(b)) != -1) {&lt;br&gt;                fos.write(b, 0, borb);&lt;br&gt;        }&lt;br&gt;        return fos.toByteArray();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e6%99%95%ef%bc%8cinputstream+for+get+image+from+internet.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>java基础</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry</guid><pubDate>Tue, 07 Nov 2006 09:28:57 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!248/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!248.entry#comment</wfw:comment><dcterms:modified>2006-11-07T09:28:57Z</dcterms:modified></item><item><title>升级到Edgy后， Vmware server不能启动。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!247.entry</link><description>I can't start vmware server after I upgrade Ubuntu to lastest version &amp;quot;Edgy&amp;quot;. do as this article(http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!237.entry), it still can't work. Finally I google an solution for this problem, please see http://www.debian-administration.org/users/emeitner/weblog/6&lt;br&gt;&lt;br&gt;change command &amp;quot;vmware&amp;quot; to &amp;quot;LD_PRELOAD=/usr/lib/libdbus-1.so.3:$LD_PRELOAD vmware&amp;quot;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%8d%87%e7%ba%a7%e5%88%b0Edgy%e5%90%8e%ef%bc%8c+Vmware+server%e4%b8%8d%e8%83%bd%e5%90%af%e5%8a%a8%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!247.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!247.entry</guid><pubDate>Tue, 07 Nov 2006 06:38:50 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!247/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!247.entry#comment</wfw:comment><dcterms:modified>2006-11-07T06:38:50Z</dcterms:modified></item><item><title>小试GWT</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!246.entry</link><description>当gwt发布的时候我就初略的看了gwt的文档。当时没有在注意这个东西。当自己经过ajax， javascript洗礼后，蓦然想试试gwt这个东西。原卷了javascript的开发效率（虽然FF 有firebug， IE下面有VS）。我也不确定gwt是否会提高开发效率（我也没有用gwt做过项目），但是就评google的技术，而且可以用java去写页面代码。 我觉得有必要试试。&lt;br&gt;&lt;br&gt;发了些时间看了gwt的&lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;Getting started guide&lt;/a&gt; 和 &lt;a href="http://code.google.com/webtoolkit/documentation/"&gt;Develop guide&lt;/a&gt;  这个写得还是非常简单明了的。gwt会把你写的这些client java代码编译成html和js。应该大部分都是js吧。&lt;br&gt;&lt;br&gt;在实践Reomte produce call 遇到的一个问题， 我把 MyService.java MyServiceImpl.java, MyServiceAsync.java都放在了com.dengyin.client包中，然后程序运行的时候老是会出现&amp;quot;com.google.gwt.user.server包找不到的错误&amp;quot;， 但是程序运行是正常的。但是classpath中确实有MyServiceImpl这个类，后来在&lt;a href="http://groups.google.com/group/Google-Web-Toolkit"&gt;gwt develop forum&lt;/a&gt;    找到答案。 问题原因应该是gwt在真正运行前会先独立的编译com.dengyin.client包下的所有的类。但在编译的时候是不会把com.google.gwt.user.server中的类include进来。但是MyServiceImpl继承了RemoteServiceServlet，RemoteServiceServlet是在com.google.gwt.user.server包里面的，所以会发生这个问题。其实想想也就知道gwt为什么强制用户要有client这个包的原因了， 所有在client包里面的类都不应该跟Server端的有关系，在这个包里面的所有类应该仅仅是跟界面有关系。解决办法是把MyServiceImpl移到com.dengyin.server包里面。&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%b0%8f%e8%af%95GWT&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ajax</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!246.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!246.entry</guid><pubDate>Wed, 25 Oct 2006 09:42:06 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!246/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!246.entry#comment</wfw:comment><dcterms:modified>2006-10-25T09:42:06Z</dcterms:modified></item><item><title>巧妙使用javascript让你的页面程序处于index frame中。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry</link><description>假如我们有这个一个页面，  index.html &lt;br&gt;&amp;lt;frameset framespacing=&amp;quot;0&amp;quot; border=&amp;quot;false&amp;quot; cols=&amp;quot;180,*&amp;quot; frameborder=&amp;quot;1&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame name=&amp;quot;left&amp;quot;  scrolling=&amp;quot;auto&amp;quot; marginwidth=&amp;quot;0&amp;quot; marginheight=&amp;quot;0&amp;quot; src=&amp;quot;Toc.html&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;frame name=&amp;quot;main&amp;quot; scrolling=&amp;quot;auto&amp;quot; src=&amp;quot;Content.html&amp;quot;&amp;gt;&lt;br&gt;  &amp;lt;/frameset&amp;gt;&lt;br&gt;  &amp;lt;noframes&amp;gt;&lt;br&gt;  &amp;lt;body&amp;gt;&lt;br&gt;  &amp;lt;p&amp;gt;This page uses frames, but your browser doesn't support them.&amp;lt;/p&amp;gt;&lt;br&gt;  &amp;lt;/body&amp;gt;&lt;br&gt;  &amp;lt;/noframes&amp;gt;&lt;br&gt;&lt;br&gt;Toc.html是目录页面， Content.html是内容页面。       &lt;br&gt;&lt;br&gt;场景1：假如一个用户登入后， 进入index.html，然后用户过了很长一段时间没有操作session timeout了。这时候用户再去点页面的操作的话，这时候Content.html会转到登入页面， 但是因为在一个frame里面， 所以登入页面会在index.html中。我们希望他不出现在index.html中， 清在登入页面加上下面这段javascript&lt;br&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br&gt;    if (window.top != self){&lt;br&gt;        window.top.location = self.location;&lt;br&gt;    }&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;&lt;br&gt;场景2：我们希望右边的内容页面不能独立的出现（即一定要出现在index.html中），我们也需要在每个在“main” frame的页面加上下面这段javascript&lt;br&gt;if (window.top == self){&lt;br&gt;    // ensure sub page would contain in index page&lt;br&gt;    window.location=&amp;quot;index.html&amp;quot;;&lt;br&gt;}&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%b7%a7%e5%a6%99%e4%bd%bf%e7%94%a8javascript%e8%ae%a9%e4%bd%a0%e7%9a%84%e9%a1%b5%e9%9d%a2%e7%a8%8b%e5%ba%8f%e5%a4%84%e4%ba%8eindex+frame%e4%b8%ad%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>javascript</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry</guid><pubDate>Fri, 20 Oct 2006 02:00:37 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!245/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!245.entry#comment</wfw:comment><dcterms:modified>2006-10-20T02:00:37Z</dcterms:modified></item><item><title>使用Maven和WTP开发WEB项目。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!244.entry</link><description>&lt;font size=3&gt;首先下载、安装Maven WTP。&lt;br&gt;&lt;br&gt;Maven:  http://maven.apache.org/download.html&lt;br&gt;WTP:  &lt;/font&gt;&lt;font size=3&gt;&lt;span&gt;www.eclipse.org/webtools/   建议使用1.03 或 1.5.1&lt;br&gt;&lt;br&gt;首先你用Maven创建一个WEB项目，其实就是在你的pom.xml指定&amp;lt;packaging&amp;gt;war&amp;lt;/packaging&amp;gt;就行了。然后自己在    src/main目录下面建立webapp web.xml等web项目需要的文件。 ok。 不知道的话请参阅Maven文档。&lt;br&gt;&lt;br&gt;假设你的web项目已经用maven搭建好了。然后运行mvn clean install -Dtest , maven会自动从网上download依赖的包， 编译源码然后把声称的war放到你的资源库中。其中-Dtest是在打包之前跳过单元测试。&lt;br&gt;&lt;br&gt;再运行mvn eclipse:eclipse -Dwtpversion=1.0 -DdownloadSources=true,maven会使用他的eclipse插件（如果没有的话，maven会自动download install这个插件）为你把这个项目转成eclipse的wtp项目。-Dwtpversion=1.0这里是指定wtp的版本，当前好像支持R7和1.0，但是因为1.5版本的wtp配置文件没有更改，所以-Dwtpversion=1.0一样适合1.5的版本。&lt;br&gt;&lt;br&gt;配置wtp，添加你刚才那个项目到wtp Server中。 启动Server。这里有个好处就是他不会把dependency lib的scope为test 或 provided的lib考到webapp下。&lt;br&gt;&lt;br&gt;当你更改了pom.xml后， 你还需要再运行下mvn eclipse:eclipse -Dwtpversion=1.0来更新你的wtp的配置文件。&lt;br&gt;&lt;br&gt;我在使用wtp中发现一个非常严重的性能问题。 当你publish的文件非常多的时候，你保存一个文件时的性能非常低，有时候会需要6－10秒。wtp把你项目中需要deploy的文件都保存一个像这样的一个file:///home/denny/workspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish1.xml文件中。假如你保存的那个文件位于publish.xml中比较靠头，那还是非常快的。 如果比较靠后就非常慢了。应为wtp需要更新你保存文件对应的stamp属性。假如非常考后的话，他需要先装在publish.xml文件， 然后找到你保存的文件再更新他的stamp属性。。&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e4%bd%bf%e7%94%a8Maven%e5%92%8cWTP%e5%bc%80%e5%8f%91WEB%e9%a1%b9%e7%9b%ae%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>项目管理</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!244.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!244.entry</guid><pubDate>Tue, 10 Oct 2006 09:53:49 GMT</pubDate><slash:comments>8</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!244/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!244.entry#comment</wfw:comment><dcterms:modified>2006-10-10T10:02:14Z</dcterms:modified></item><item><title>How can I move text cursor in a text input field?</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry</link><description>&lt;pre&gt;Thanks the following codes. while in Firefox, you just need to invoke textElement.focus() method.&lt;br&gt;&lt;br&gt;So here is how to position the caret end the end of a text field/text&lt;br&gt;area with IE4/5:&lt;br&gt;&lt;br&gt;&amp;lt;SCRIPT&amp;gt;&lt;br&gt;function setCaretToEnd (el) {&lt;br&gt;  if (el.createTextRange) {&lt;br&gt;    var v = el.value;&lt;br&gt;    var r = el.createTextRange();&lt;br&gt;    r.moveStart('character', v.length);&lt;br&gt;    r.select();&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;function insertAtEnd (el, txt) {&lt;br&gt;  el.value += txt;&lt;br&gt;  setCaretToEnd (el);&lt;br&gt;}&lt;br&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br&gt;&amp;lt;/HEAD&amp;gt;&lt;br&gt;&amp;lt;BODY&amp;gt;&lt;br&gt;&amp;lt;FORM&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;aText&amp;quot; SIZE=&amp;quot;40&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;a2ndText&amp;quot; VALUE=&amp;quot;Kibology for all.&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;button&amp;quot; VALUE=&amp;quot;insert and move to end&amp;quot;&lt;br&gt;       ONCLICK=&amp;quot;insertAtEnd (this.form.aText,&lt;br&gt;this.form.a2ndText.value);&amp;quot;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;a3rdText&amp;quot; VALUE=&amp;quot;All for Kibology.&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;INPUT TYPE=&amp;quot;button&amp;quot; VALUE=&amp;quot;insert and move to end&amp;quot;&lt;br&gt;       ONCLICK=&amp;quot;insertAtEnd (this.form.aTextArea,&lt;br&gt;this.form.a3rdText.value);&amp;quot;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;lt;BR&amp;gt;&lt;br&gt;&amp;lt;TEXTAREA NAME=&amp;quot;aTextArea&amp;quot; ROWS=&amp;quot;5&amp;quot; COLS=&amp;quot;20&amp;quot; WRAP=&amp;quot;soft&amp;quot;&amp;gt;&amp;lt;/TEXTAREA&amp;gt;&lt;br&gt;&amp;lt;/FORM&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;http://www.faqts.com/knowledge_base/view.phtml/aid/17749/fid/53&lt;br&gt;&lt;/pre&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+How+can+I+move+text+cursor+in+a+text+input+field%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>javascript</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry</guid><pubDate>Mon, 09 Oct 2006 07:29:09 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!242/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!242.entry#comment</wfw:comment><dcterms:modified>2006-10-09T07:29:09Z</dcterms:modified></item><item><title>国庆购机柯达C603</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!241.entry</link><description>国庆在国美买了柯达C603， 总体感觉还不错。。 1399 + 512SD卡 + 手提袋 + 充电器和两只充电电池&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;* 610万像素&lt;br&gt;* 3倍光学变焦&lt;br&gt;* 4倍数码变焦&lt;br&gt;* 2.4寸显示屏（11.2万像素）&lt;br&gt;* 17种场景拍摄模式&lt;br&gt;* 内置28M内存&lt;/span&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%9b%bd%e5%ba%86%e8%b4%ad%e6%9c%ba%e6%9f%af%e8%be%beC603&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>旅游</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!241.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!241.entry</guid><pubDate>Wed, 04 Oct 2006 13:26:22 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!241/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!241.entry#comment</wfw:comment><dcterms:modified>2006-10-04T13:26:22Z</dcterms:modified></item><item><title>安装VMWare Server， 模拟Windows Xp</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!237.entry</link><description>虽说以前通过linux4ie安装了IE， 但这个确实不好用， 一旦有javascript错误，看不到javascript错误弹出窗口，对调式来说的话根本就没有， 所以其实跟没有一样，所以调式IE的话，我还是希望切换到windows xp中用VS调式javascript。今天狠下心装了VMWare Server， 再在上面装了一个Window XP。 虽说慢一点（鼠标有点晃），其实的跟真正的Windows没有区别。&lt;br&gt;&lt;br&gt;安装VMWare Server   &lt;br&gt;http://forum.ubuntu.org.cn/viewtopic.php?t=22441&lt;br&gt;http://thinkbase.net/w/main/Wiki?2006-08-26+%E5%9C%A8+Ubuntu+6.06+%E4%B8%8A%E5%AE%89%E8%A3%85+VMware-server+1.0.1&lt;br&gt;&lt;br&gt;今天发现一个问题， 我更新内核后发现VMWare需要重新设置。 我们只学要再运行下
&lt;br&gt;这个应该内核的C库吧。&lt;br&gt;sudo apt-get install linux-headers-`uname -r` build-essential xinetd&lt;br&gt;然后再重新配置下&lt;br&gt;sudo /usr/bin/vmware-config.pl&lt;br&gt;&lt;br&gt;Show 下我在Ubuntu下的Windows XP&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pt6Fds1xOGLGFXnYGqFNuhvgmmKVSvx0V4IStAtb-MiZealYafAsrzw"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;238&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+%e5%ae%89%e8%a3%85VMWare+Server%ef%bc%8c+%e6%a8%a1%e6%8b%9fWindows+Xp&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!237.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!237.entry</guid><pubDate>Tue, 19 Sep 2006 07:05:02 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!237/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!237.entry#comment</wfw:comment><dcterms:modified>2006-09-19T07:05:02Z</dcterms:modified></item><item><title>File permission (chmod)</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!236.entry</link><description>&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt; &lt;strong&gt;Options&lt;/strong&gt;

&lt;td&gt;
&lt;p&gt; &lt;strong&gt;Definition&lt;/strong&gt;


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; u 

&lt;td&gt;
&lt;p&gt; owner 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; g 

&lt;td&gt;
&lt;p&gt; group 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; o 

&lt;td&gt;
&lt;p&gt; other 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; x 

&lt;td&gt;
&lt;p&gt; execute 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; w 

&lt;td&gt;
&lt;p&gt; write 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; r 

&lt;td&gt;
&lt;p&gt; read 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; + 

&lt;td&gt;
&lt;p&gt; add permission 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; - 

&lt;td&gt;
&lt;p&gt; remove permission 


&lt;tr&gt;
&lt;td&gt;
&lt;p&gt; = 

&lt;td&gt;
&lt;p&gt; set permission &lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;pre&gt;user@host:/home/user$ touch file1 file2 file3 file4&lt;br&gt;user@host:/home/user$ ls -l&lt;br&gt;total 0&lt;br&gt;-rw-r--r--  1 user user 0 Nov 19 20:13 file1&lt;br&gt;-rw-r--r--  1 user user 0 Nov 19 20:13 file2&lt;br&gt;-rw-r--r--  1 user user 0 Nov 19 20:13 file3&lt;br&gt;-rw-r--r--  1 user user 0 Nov 19 20:13 file4&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Add owner execute bit: 

&lt;pre&gt;user@host:/home/user$ chmod u+x file1&lt;br&gt;user@host:/home/user$ ls -l file1&lt;br&gt;-rwxr--r--  1 user user 0 Nov 19 20:13 file1&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Add other write &amp;amp; execute bit: 

&lt;pre&gt;user@host:/home/user$ chmod o+wx file2&lt;br&gt;user@host:/home/user$ ls -l file2&lt;br&gt;-rw-r--rwx  1 user user 0 Nov 19 20:13 file2&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Remove group read bit: 

&lt;pre&gt;user@host:/home/user$ chmod g-r file3&lt;br&gt;user@host:/home/user$ ls -l file3&lt;br&gt;-rw----r--  1 user user 0 Nov 19 20:13 file3&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Add read, write and execute to everyone: 

&lt;pre&gt;user@host:/home/user$ chmod ugo+rwx file4&lt;br&gt;user@host:/home/user$ ls -l file4&lt;br&gt;-rwxrwxrwx  1 user user 0 Nov 19 20:13 file4&lt;br&gt;user@host:/home/user$&lt;br&gt;&lt;/pre&gt;&lt;br&gt;Details in: https://help.ubuntu.com/community/FilePermissions&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+File+permission+(chmod)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!236.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!236.entry</guid><pubDate>Sun, 17 Sep 2006 10:42:56 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!236/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!236.entry#comment</wfw:comment><dcterms:modified>2006-09-17T10:42:56Z</dcterms:modified></item><item><title>Install xubuntu-desktop</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!234.entry</link><description>今天装了xubuntu了，耗资源少点，试了下还真不错。show张图片&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://byfiles.storage.live.com&amp;#47;y1pq6yDQdkpo2OsmHsj213rTJLo84ZIYf3kRlZUcmlRVLSo3qa6be9WYQ"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;AF4AB52B167D7EE7&amp;#33;235&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Install+xubuntu-desktop&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!234.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!234.entry</guid><pubDate>Fri, 15 Sep 2006 06:19:45 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!234/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!234.entry#comment</wfw:comment><dcterms:modified>2006-09-15T06:19:45Z</dcterms:modified></item><item><title>Add font in Ubuntu</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!233.entry</link><description>下载字体（通常是以ttf格式的）， copy到`/.fonts目录下。  然后运行sudo fc-cache -f -v来更新font库。&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Add+font+in+Ubuntu&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!233.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!233.entry</guid><pubDate>Thu, 14 Sep 2006 08:46:28 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!233/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!233.entry#comment</wfw:comment><dcterms:modified>2006-09-14T08:46:28Z</dcterms:modified></item><item><title>Hack dojo codes with dojo's util</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry</link><description>dojo.lang.extend(dojo.widget.PopupMenu2, {&lt;br&gt;    onOpen: function(e){&lt;br&gt;        this.openEvent = e;&lt;br&gt;        var x = e.pageX, y = e.pageY;&lt;br&gt;&lt;br&gt;        var win = dojo.html.getElementWindow(e.target);&lt;br&gt;        var iframe = win._frameElement || win.frameElement;&lt;br&gt;        if(iframe){&lt;br&gt;            var cood = dojo.html.abs(iframe, true);&lt;br&gt;            x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left;&lt;br&gt;            //override the onOpen to reslove the problem the context popup menu open under the selected TreeNode.&lt;br&gt;            if (!(e.type == &amp;quot;contextmenu&amp;quot; &amp;amp;&amp;amp; dojo.render.html.ie))&lt;br&gt;                y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top;&lt;br&gt;        }&lt;br&gt;        this.open(x, y, null, [x, y]);&lt;br&gt;&lt;br&gt;        e.preventDefault();&lt;br&gt;        e.stopPropagation();&lt;br&gt;    }&lt;br&gt;});&lt;br&gt;&lt;br&gt;这样我们就是复写了dojo.widget.PopupMenu2类的onOpen方法。如果我们想调用覆盖以前的方法。&lt;br&gt;//backup the old function&lt;br&gt;dojo.widget.TreeBasicControllerV3.prototype.oldOnKey =dojo.widget.TreeBasicControllerV3.prototype.onKey; &lt;br&gt;dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {&lt;br&gt;    onClick: function(e) {&lt;br&gt;        if (e.target.tagName == &amp;quot;INPUT&amp;quot;)&lt;br&gt;            return ;&lt;br&gt;        // default click handler just sets the focus&lt;br&gt;        var treeWidget = this.getWidgetByNode(e.currentTarget);&lt;br&gt;        if (!treeWidget || !treeWidget.isTree) { return; }&lt;br&gt;        var nodeWidget = this.getWidgetByNode(e.target);&lt;br&gt;        if (!nodeWidget || !nodeWidget.isTreeNode) { return; }&lt;br&gt;        this._focusLabel(treeWidget, nodeWidget);&lt;br&gt;    },&lt;br&gt;    onKey: function (e){&lt;br&gt;        if (e.target.tagName == &amp;quot;INPUT&amp;quot;)&lt;br&gt;            return ;&lt;br&gt;        this.oldOnKey(e);&lt;br&gt;    }&lt;br&gt;});&lt;br&gt;&lt;br&gt;dojo.lang.extend这个方式是多么的方便。我们可以用这个方法方便的扩展或修改以有的代码。&lt;br&gt;&lt;br&gt;看看dojo的dojo.lang.common  里面包括了对象间的一些操作。如dojo.lang.inherits， dojo.lang.mixin etc&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Hack+dojo+codes+with+dojo's+util&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>javascript</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry</guid><pubDate>Tue, 12 Sep 2006 07:05:02 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!232/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!232.entry#comment</wfw:comment><dcterms:modified>2006-09-12T07:05:02Z</dcterms:modified></item><item><title>Ubuntu 常用技巧</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!231.entry</link><description>快速设置指南&lt;br&gt;http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake&lt;br&gt;&lt;br&gt;挂载硬盘&lt;br&gt;/etc/fstab&lt;br&gt;&lt;br&gt;/dev/hda1      /windows/C      ntfs    auto,user,ro,nls=utf8,umask&lt;div&gt;=000   0   0&lt;br&gt;/dev/hda5      /windows/D      vfat    auto,user,rw,utf8,umask=000   0   0&lt;br&gt;/dev/hda6      /windows/E      vfat    auto,user,rw,utf8,umask=000  0   0&lt;br&gt;&lt;br&gt;http://forum.ubuntu.org.cn/about19112.html&lt;br&gt;&lt;br&gt;&lt;br&gt;环境变量的设置&lt;br&gt;&lt;br&gt;/home/denny/.bashrc&lt;br&gt;&lt;br&gt;export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.06&lt;br&gt;export CLASSPATH=$CLASSPATH:$JAVA&lt;div&gt;_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.&lt;br&gt;export MAVEN_HOME=/usr/local/maven-2.0.4&lt;br&gt;export PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/jre/bin:$JAVA_HOME/bin:.&lt;br&gt;&lt;br&gt;adsl拨号设置&lt;br&gt;&lt;br&gt;第一次使用 sudo pppoeconf 设置好了之后以后只要使用下面两个命令拨号或断线。&lt;br&gt;&lt;br&gt;sudo pon dsl-provider&lt;br&gt;sudo poff&lt;br&gt;&lt;/div&gt;&lt;br&gt;设置xserver 主要有显示器分辨率等等&lt;br&gt;sudo dpkg-reconfigure xserver-x&lt;br&gt;&lt;br&gt;安装MPlayer&lt;br&gt;http://wiki.ubuntu.org.cn/%E5%AE%89%E8%A3%85MPlayer&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Ubuntu+%e5%b8%b8%e7%94%a8%e6%8a%80%e5%b7%a7&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>Ubuntu Linux</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!231.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!231.entry</guid><pubDate>Wed, 06 Sep 2006 02:04:43 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!231/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!231.entry#comment</wfw:comment><dcterms:modified>2006-09-06T02:04:43Z</dcterms:modified></item><item><title /><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!228.entry</link><description>&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!228.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!228.entry</guid><pubDate>Tue, 05 Sep 2006 14:15:17 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!228/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!228.entry#comment</wfw:comment><dcterms:modified>2006-09-05T14:15:17Z</dcterms:modified></item><item><title>javascript中的继承。</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry</link><description>本来打算写篇关于javascript继承的文章， 但是觉得这篇文章已经写得够好了。&lt;br&gt;&lt;br&gt;http://forum.javaeye.com/viewtopic.php?t=19748&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+javascript%e4%b8%ad%e7%9a%84%e7%bb%a7%e6%89%bf%e3%80%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><category>javascript</category><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry</guid><pubDate>Tue, 05 Sep 2006 02:00:59 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!227/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!227.entry#comment</wfw:comment><dcterms:modified>2006-09-05T02:00:59Z</dcterms:modified></item><item><title>Custom List: My Zone</title><link>http://dengyin2000.spaces.live.com/Lists/cns!AF4AB52B167D7EE7!215</link><description>&lt;p&gt;My Zone&lt;/p&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://picasaweb.google.com&amp;#47;deng.yin"&gt;&amp;#25105;&amp;#30340;&amp;#30456;&amp;#20876;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.csdn.net&amp;#47;dengyin2000"&gt;&amp;#25105;&amp;#30340;CSDN BLOG&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://del.icio.us&amp;#47;dengyin2000"&gt;My delicious&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://dengyin2000.javaeye.com"&gt;&amp;#25105;&amp;#30340;javaeye BLOG&amp;#40;&amp;#29616;&amp;#22312;&amp;#27491;&amp;#22312;&amp;#20351;&amp;#29992;&amp;#30340;blog&amp;#41;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Custom+List%3a+My+Zone&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><guid isPermaLink="false">cns!AF4AB52B167D7EE7!215</guid><pubDate>Mon, 25 Dec 2006 02:56:00 GMT</pubDate><msn:type>list</msn:type><live:type>list</live:type><live:typelabel>List</live:typelabel><cf:itemRSS>http://dengyin2000.spaces.live.com/Lists/cns!AF4AB52B167D7EE7!215/feed.rss</cf:itemRSS><dcterms:modified>2006-12-25T02:56:00Z</dcterms:modified></item><item><title>Blog list: Blog list</title><link>http://dengyin2000.spaces.live.com/Lists/cns!AF4AB52B167D7EE7!113</link><description>&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;complyuestill&amp;#47;"&gt;&amp;#26469;&amp;#33258;&amp;#27462;&amp;#28170; - Born Beauty Within&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://gzdlw.blogchina.com&amp;#47;"&gt;&amp;#24178;&amp;#29048;&amp;#22235;&amp;#23395;&amp;#35910;-blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://martinfowler.com&amp;#47;"&gt;Martin Fowler&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.theserverside.com"&gt;theserverside&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.hibernate.org.cn"&gt;Hibernate&amp;#20013;&amp;#25991;&amp;#32593;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.javalobby.org"&gt;Java Lobby&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://mail-archives.apache.org&amp;#47;mod_mbox&amp;#47;jakarta-tapestry-user&amp;#47;"&gt;Tapestry User maillist&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://jakarta.apache.org&amp;#47;tapestry&amp;#47;"&gt;Tapestry&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;zbw25&amp;#47;"&gt;&amp;#24196;&amp;#34920;&amp;#20255;&amp;#30340;blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.blogcn.com&amp;#47;user6&amp;#47;caoxg&amp;#47;index.html"&gt;&amp;#26361;&amp;#26195;&amp;#38050;&amp;#30340;BLOG&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blogger.org.cn&amp;#47;blog&amp;#47;blog.asp&amp;#63;name&amp;#61;hongrui"&gt;&amp;#37026;&amp;#32418;&amp;#29790;&amp;#30340;blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.nona.name&amp;#47;"&gt;&amp;#20912;&amp;#20113;&amp;#64;Blogging&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://femto.blogdriver.com&amp;#47;femto&amp;#47;index.html"&gt;femto&amp;#39;s blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.blogjava.net&amp;#47;calvin&amp;#47;"&gt;&amp;#27743;&amp;#21335;&amp;#30333;&amp;#34915;&amp;#30340;BLOG&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.blogjava.net&amp;#47;dlee&amp;#47;"&gt;&amp;#26446;&amp;#38175;&amp;#40;dlee&amp;#41;&amp;#30340;BLOG&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.blogjava.net&amp;#47;robbin"&gt;&amp;#33539;&amp;#20975;&amp;#40;Robbin&amp;#41;&amp;#30340;BLOG&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.bbs51.org"&gt;&amp;#20013;&amp;#22269;&amp;#21171;&amp;#21160;&amp;#27861;&amp;#35770;&amp;#22363;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://swik.net&amp;#47;"&gt;http&amp;#58;&amp;#47;&amp;#47;swik.net&amp;#47;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.dzone.com"&gt;dzone&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Blog+list%3a+Blog+list&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><guid isPermaLink="false">cns!AF4AB52B167D7EE7!113</guid><pubDate>Wed, 10 May 2006 04:16:00 GMT</pubDate><msn:type>bloglist</msn:type><live:type>bloglist</live:type><live:typelabel>Blog list</live:typelabel><cf:itemRSS>http://dengyin2000.spaces.live.com/Lists/cns!AF4AB52B167D7EE7!113/feed.rss</cf:itemRSS><dcterms:modified>2006-05-10T04:16:00Z</dcterms:modified></item></channel></rss>