<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/javablogs" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/javablogs" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 15 Oct 2008 18:52:08 GMT</lastBuildDate><title>java.blogs Recent Entries</title><description>Recent blog entries syndicated on javablogs.com</description><link>http://javablogs.com</link><copyright>All blog content Copyright their respective authors. Everything else copyright Atlassian Software Systems. If you believe your feed is being syndicated on java.blogs without your permission, please contact javablogs@atlassian.com</copyright><pubDate>Wed, 15 Oct 2008 20:18:35 GMT</pubDate><dc:creator>java.blogs Syndicated Feeds</dc:creator><item><title>OpenSSO Quality Assurance</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124668230/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://blogs.sun.com/superpat/&gt;Superpatterns&lt;/a&gt;&lt;/p&gt;&lt;span style=&quot;margin: 5px; float: right;&quot;&gt;
&lt;a href=&quot;http://developers.sun.com/identity/reference/techart/qa.html&quot;&gt;&lt;img src=&quot;http://developers.sun.com/img/indira_thangasamy.jpg&quot; /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;
The other day, I blogged about &lt;a href=&quot;http://blogs.sun.com/superpat/entry/openings_in_the_opensso_qa&quot;&gt;Openings in the OpenSSO QA Team&lt;/a&gt;, under &lt;a href=&quot;http://blogs.sun.com/indira/&quot;&gt;Indira Thangasamy&lt;/a&gt;. Well, this week it's Indira's turn in the spotlight over at the &lt;a href=&quot;http://developers.sun.com/identity/&quot;&gt;Sun Developer Network Identity pages&lt;/a&gt; - talking with &lt;a href=&quot;http://weblogs.java.net/blog/marinasum/&quot;&gt;Marina Sum&lt;/a&gt; about &lt;a href=&quot;http://developers.sun.com/identity/reference/techart/qa.html&quot;&gt;Quality Assurance on OpenSSO&lt;/a&gt;. Indira talks about how we are automating QA on &lt;a href=&quot;http://opensso.org/&quot;&gt;OpenSSO&lt;/a&gt; and building quality into the software right through the development process. It's a fascinating look at an oft-neglected area of software development, so make yourself a cup of tea, &lt;a href=&quot;http://developers.sun.com/identity/reference/techart/qa.html&quot;&gt;settle down to read it&lt;/a&gt; then &lt;a href=&quot;http://blogs.sun.com/superpat/entry/openings_in_the_opensso_qa&quot;&gt;apply for one of the openings on Indira's team&lt;/a&gt;.
&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2008 02:52:08 +0800</pubDate><author>Superpatterns</author><guid isPermaLink="false">http://blogs.sun.com/superpat/entry/opensso_quality_assurance</guid><dc:creator>Superpatterns</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461824</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124668230/1222496</fs:itemid></item><item><title>Spring Batch 2.0.0.M2 Released</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124658068/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.dzone.com/links/tag/java.html&gt;DZone: java&lt;/a&gt;&lt;/p&gt;Spring Batch 2.0.0.M2 is now available. See the Spring Batch downloads page for more information - there is the usual .zip download and also Maven artifacts in S3.</description><pubDate>Thu, 16 Oct 2008 02:35:38 +0800</pubDate><author>DZone: java</author><guid isPermaLink="false">http://www.dzone.com/links/126082.html</guid><dc:creator>DZone: java</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461822</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124658068/1222496</fs:itemid></item><item><title>Susan McLucas - Tech Writer Looking for Work</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124668232/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://blogs.sun.com/superpat/&gt;Superpatterns&lt;/a&gt;&lt;/p&gt;&lt;p&gt;
Since I encouraged Susan to create a blog, and she actually went ahead and did it, I'm happy to be able to link to her... &lt;a href=&quot;http://susanmclucas.blogspot.com/&quot;&gt;Susan McLucas&lt;/a&gt; is a &lt;a href=&quot;http://susanmclucas.blogspot.com/2008/10/keeping-it-simple-i-am-writer-for-hire.html&quot;&gt;tech writer looking for work&lt;/a&gt;. She has worked for companies ranging from startups to giants like Intel and Cisco - in fact, &lt;a href=&quot;http://newsroom.cisco.com/dlls/2007/corp_061107.html&quot;&gt;Cisco acquired the last startup she worked for&lt;/a&gt;, so she has experience of the acquisition process too.
&lt;/p&gt;
&lt;p&gt;
As I mentioned in my recommendation on her &lt;a href=&quot;http://www.linkedin.com/pub/1/96a/888&quot;&gt;LinkedIn profile&lt;/a&gt;:
&lt;blockquote&gt;
I know Susan socially, rather than through her work, but I can attest that she is articulate and professional with a keen eye for detail. If we had any openings in my group here at Sun, I'd definitely hire her.
&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
So, there you go, if you're looking for a tech writer, contact Susan through her &lt;a href=&quot;http://www.linkedin.com/pub/1/96a/888&quot;&gt;LinkedIn profile&lt;/a&gt; or &lt;a href=&quot;http://susanmclucas.blogspot.com/2008/10/keeping-it-simple-i-am-writer-for-hire.html#comments&quot;&gt;leave a comment on her blog&lt;/a&gt;. And tell her I sent you &lt;img src=&quot;http://blogs.sun.com/images/smileys/smile.gif&quot; /&gt;
&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2008 02:29:02 +0800</pubDate><author>Superpatterns</author><guid isPermaLink="false">http://blogs.sun.com/superpat/entry/susan_mclucas_tech_writer_looking</guid><dc:creator>Superpatterns</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461823</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124668232/1222496</fs:itemid></item><item><title>Program for Nuxeo Dev Day (Paris, 1st Dec.) is now online</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124668228/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://blogs.nuxeo.com/sections/aggregators/nuxeo-5&gt;Nuxeo 5 project&lt;/a&gt;&lt;/p&gt;I&amp;#8217;m happy to report that we&amp;#8217;ve finished setting up the conference program for the first Nuxeo Developer Day in Paris, which will take place on 1st December, as a &amp;#8220;community session&amp;#8221; during the awesome Open World Forum.

The conference will be a unique opportunity for you to meet and discuss with the Nuxeo core developers, and to exchange your experiences as users ...</description><pubDate>Thu, 16 Oct 2008 02:17:14 +0800</pubDate><author>Nuxeo 5 project</author><guid isPermaLink="false">tag:blogs.nuxeo.com:sections:blogs:fermigier:2008_10_15_program-for-nuxeo-dev-day-paris-1st-dec-now-online</guid><dc:creator>Nuxeo 5 project</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461825</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124668228/1222496</fs:itemid></item><item><title>Pensamientos sobre la pobreza</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124675001/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://certified-es.blogspot.com/&gt;Certified (en Espa&amp;#241;ol)&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2008 01:55:00 +0800</pubDate><author>Certified (en Español)</author><guid isPermaLink="false">tag:blogger.com,1999:blog-3011868110297097116.post-8134572051523827436</guid><dc:creator>Certified (en Español)</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461826</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124675001/1222496</fs:itemid></item><item><title>Apache MINA based Server Application Architecture</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645440/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.dzone.com/links/tag/java.html&gt;DZone: java&lt;/a&gt;&lt;/p&gt;Apache MINA is one of the best available NIO Frameworks for creating scalable Server applications in Java. Its fun to create applications using MINA. 

Lets have a look how the application architecture looks like</description><pubDate>Thu, 16 Oct 2008 00:45:40 +0800</pubDate><author>DZone: java</author><guid isPermaLink="false">http://www.dzone.com/links/125797.html</guid><dc:creator>DZone: java</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461818</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645440/1222496</fs:itemid></item><item><title>Facebook: 10 миллиардов фото!</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124665652/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://voituk.kiev.ua&gt;&amp;#1047;&amp;#1072;&amp;#1087;&amp;#1080;&amp;#1089;&amp;#1082;&amp;#1080; &amp;#1080;&amp;#1089;&amp;#1082;&amp;#1072;&amp;#1090;&amp;#1077;&amp;#1083;&amp;#1077;&amp;#1081;&lt;/a&gt;&lt;/p&gt;Вчера вечером Doug Beaver, член Facebook Engineering Team, сообщил что Facebook преодолел рубеж в 10 миллиардов хранимых фото.
Учитывая что каждое изображение хранится в 4 размерах, - это равнозначно 40 миллиардам файлов.
Для сравнения, по последним данным, на серверах Photobucket, принадлежащий News Corp., хранится более 6.2 миллиарда фотографий, а Yahoo-шном Flickr, по прошлогодним данным - около 2 [...]</description><pubDate>Thu, 16 Oct 2008 00:41:33 +0800</pubDate><author>Записки искателей</author><guid isPermaLink="false">http://voituk.kiev.ua/?p=714</guid><dc:creator>Записки искателей</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461820</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124665652/1222496</fs:itemid></item><item><title>SCWCD :  POST, GET e Idempotencia</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645427/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://certified-es.blogspot.com/&gt;Certified (en Espa&amp;#241;ol)&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2008 00:05:00 +0800</pubDate><author>Certified (en Español)</author><guid isPermaLink="false">tag:blogger.com,1999:blog-3011868110297097116.post-748014950858379590</guid><dc:creator>Certified (en Español)</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461819</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645427/1222496</fs:itemid></item><item><title>Adobe releases a buggy flash plugin once again</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124658077/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.jroller.com/melix/&gt;Cedric Champeau&amp;apos;s Weblog&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Today more than ever, I'm really angry about Adobe. They have just released a brand new Flash 10 plugin with a very annoying bug which is there for months : Adobe hates Linux users, especially non-US users. Would anyone tolerate that a Windows user can't write text in its favorite editor ? No, because if you're not able to input text, you are not able to do anything with your computer. It's just what's happening with this Linux release once again : special characters (unicode) like accents, @, {, ... can't be entered.
&lt;/p&gt;
&lt;p&gt;
The bug has been reported &lt;b&gt;&lt;a href=&quot;http://bugs.adobe.com/jira/browse/FP-40&quot; target=&quot;_blank&quot;&gt;in early April this year&lt;/a&gt;&lt;/b&gt; AND IT'S STILL NOT FIXED ! Furthermore, no one at Adobe deigns to answer. Adobe ignores 39 votes, placed 10th most voted in the bug tracker. You'll also notice that the most voted is another Linux issue.&lt;/p&gt;
&lt;p&gt;It's really a pity that Adobe does not wish to take Linux users seriously. It just makes impossible to release Flex based applications for customers which use Linux. More, it makes our work harder since, like me, many developers develop on this platform.&lt;/p&gt;</description><pubDate>Wed, 15 Oct 2008 22:38:37 +0800</pubDate><author>Cedric Champeau's Weblog</author><guid isPermaLink="false">http://jroller.com/melix/entry/adobe_releases_a_buggy_flash</guid><dc:creator>Cedric Champeau's Weblog</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461821</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124658077/1222496</fs:itemid></item><item><title>Our Baby Moves!</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645459/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I felt our baby move for the first time today! So far so good as I think that&amp;#8217;s right on schedule. Chau is now 18 weeks along. We will have the anatomy scan in a week and half when we&amp;#8217;ll find out if it&amp;#8217;s a boy or a girl. I really don&amp;#8217;t care which we have, but I am getting pretty curious.&lt;/p&gt;</description><pubDate>Mon, 25 Aug 2008 09:06:19 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/our_baby_moves</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461817</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645459/1222496</fs:itemid></item><item><title>New Host</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645471/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I&amp;#8217;ve been meaning to switch to a vps for a while and finally got round to it. I&amp;#8217;m now set up on &lt;a href=&quot;http://www.slicehost.com&quot;&gt;Slicehost&lt;/a&gt;. Seems pretty great so far and you gotta love all the &lt;a href=&quot;http://articles.slicehost.com&quot;&gt;excellent articles&lt;/a&gt; they provide to aid you in setting up your server.&lt;/p&gt;</description><pubDate>Mon, 25 Aug 2008 06:13:46 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/new_host</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461816</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645471/1222496</fs:itemid></item><item><title>Lily Allen</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645477/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We happened to see Lily Allen recently&amp;#8230;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/rainkinz/456840603/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/226/456840603_d450bc7670.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;IMG_4798.JPG&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 18 May 2007 05:58:09 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/lily_allen</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461815</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645477/1222496</fs:itemid></item><item><title>Radeox, still alive?</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645480/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I just integrated the {link:Radeox|http://radeox.org} wiki rendering engine into my blog software. I had a rich text editor, but in general I prefer wiki markup, so finally did it. I got the source code and someone had put together a maven build so it wasn&amp;#8217;t too hard to put together. The thing that took me sometime was getting a filter to parse h1\. as a heading instead of == etc. I am very used to the Confluence wiki so I wanted the formatting to be the same or similar.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not really sure what the status of the Radeox project is. It looks like development of {link:Snip Snap|http://snipsnap.org} has stopped, but  {link:someone|http://www.pabrantes.net/blog/comments/start/2007-04-07/1} has picked it up at least. If anyone knows the status of Radeox I&amp;#8217;d love to know what&amp;#8217;s up with it. It still seems like a really useful library.&lt;/p&gt;</description><pubDate>Tue, 15 May 2007 05:45:26 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/radeox_still_alive</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461814</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645480/1222496</fs:itemid></item><item><title>Peer Programing</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645484/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I am a big fan of &lt;a href=&quot;http://www.extremeprogramming.org/rules/pair.html&quot;&gt;Pair Programming&lt;/a&gt;. However, if you&amp;#39;re a team that is geographically disbursed I think peer reviews are crucial. Even if you&amp;#39;re not it&amp;#39;s a great idea! There&amp;#39;s a nice article about the Jupiter plugin for eclipse here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.devx.com/enterprise/Article/31658&quot;&gt;http://www.devx.com/enterprise/Article/31658&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 17 Mar 2007 21:16:17 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/peer_programing</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461813</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645484/1222496</fs:itemid></item><item><title>Andy arrives in New York!</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645517/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/rainkinz/423553013/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/167/423553013_29c6c8cf94.jpg&quot; alt=&quot;Happy Dog and Uncle&quot; width=&quot;375&quot; height=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;(Click on the picture to see more)  &lt;/p&gt;</description><pubDate>Sat, 17 Mar 2007 02:16:38 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/andy_arrives_in_new_york</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461812</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645517/1222496</fs:itemid></item><item><title>DWR Netbeans Plugin</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645520/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I don&amp;#39;t use Netbeans that much, but here is a nice little &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; plugin if you do: &lt;a href=&quot;http://blogs.sun.com/chuk/entry/dwr_netbeans_plugin&quot;&gt;Netbeans &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; Plugin&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 08 Mar 2007 22:22:28 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/dwr_netbeans_plugin</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461811</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645520/1222496</fs:itemid></item><item><title>Snow in New York</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645526/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It actually snowed a bit last night. Bella enjoyed playing at the park in it, but not the walk home with all the salt. So she&amp;#39;s back to being Dog in Boots.&lt;/p&gt;&lt;p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/rainkinz/373883966/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/155/373883966_418b38fa13_m.jpg&quot; alt=&quot;Bella in boots&quot; width=&quot;180&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Tue, 30 Jan 2007 02:18:02 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/snow_in_new_york</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461810</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645526/1222496</fs:itemid></item><item><title>GUNKANJIMA - Pictures of an abandoned city</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645528/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;GUNKANJIMA&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I stumbled upon this today. A fascinating deserted city off the coast of Japan &lt;a href=&quot;http://www14.big.or.jp/~kawamura/m-city/english_top.html&quot;&gt;http://www14.big.or.jp/~kawamura/m-city/english_top.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Mon, 29 Jan 2007 20:23:11 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/gunkanjima_pictures_of_an_abandoned_city</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461809</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645528/1222496</fs:itemid></item><item><title>DWR, Spring and Captcha</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645533/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Recently a bot figured out how to submit my comment form. It was pretty funny I had more than 700 comments telling me how interesting my post on how to install a jar in maven was. I decided to add captcha support and while I was at it, make the comment form use &lt;a href=&quot;http://getahead.ltd.uk/dwr/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;&lt;/a&gt; for submission so that the page didn&amp;#39;t refresh etc.   &lt;/p&gt;&lt;p&gt;I have created a little example application demonstrating how I integrated JCaptcha with &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. The example is also (hopefully) serves as an example of how to use the new Spring Namespace support that has been added to &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. I think if you&amp;#39;re using &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; with Spring 2 and you want to keep all your configuration within Spring, you should use the Namespace support for configuring &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. It&amp;#39;s just easier. Please note this example only runs in a Java 5 environment and that if you&amp;#39;re using &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; 2.0.rc2 there is a small issue with using Spring 2.0.1 or better so I&amp;#39;ve had to use Spring 2.0. This issue is fixed in &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;HEAD&lt;/span&gt; so if you want to build &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; yourself from source you should have no problems with Spring 2.0.1 or 2.0.2.  &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; Configuration in Spring&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;To keep things simple, in this example all the &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; configuration is done in the spring-catpcha-controllers.xml spring configuration. First we register the DwrController using:&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:controller&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;dwrController&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;debug&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Now we need to tell &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; what domain objects we&amp;#39;d like to expose using javascript. &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; does this using &lt;a href=&quot;http://getahead.ltd.uk/dwr/server/dwrxml/converters&quot;&gt;Converters&lt;/a&gt;. In this case I&amp;#39;m really only exposing the Comment domain object: &lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:convert&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;bean&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;com.kuripai.example.domain.Comment&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;postedBy&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;website&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;createdAt&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;humanResponse&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/dwr:convert&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;The next step is to configure and expose the service that saves comments. I&amp;#39;ve created a very simple WeblogService for this purpose which just saves the comments into a java.util.List. Obviously a production version would save the comments in a database or similar. Here is the configuration:&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class=&quot;ta&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;weblogService&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;com.kuripai.example.service.WeblogService&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:remote&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;javascript&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;weblogService&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;c&quot;&gt;&amp;lt;!--  Methods that are allowed to be exposed via javascript --&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;getComments&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:include&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;method&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;saveComment&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- Filter to handle Captcha --&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;dwr:filter&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;com.kuripai.example.dwr.captcha.CaptchaAjaxFilter&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/dwr:remote&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;validators&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ta&quot;&gt;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;list&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class=&quot;ta&quot;&gt;&amp;lt;ref&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;local&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;captchaValidator&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;                &lt;span class=&quot;ta&quot;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&quot;an&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;com.kuripai.example.domain.CommentValidator&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ta&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class=&quot;ta&quot;&gt;&amp;lt;/list&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class=&quot;ta&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;ta&quot;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;As you can see you configure your service as normal with the additional &amp;lt;dwr:remote javascript=&amp;quot;weblogService&amp;quot; /&amp;gt; element telling &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; what the name of the service should be in Javascript and the &amp;lt;dwr:include method=&amp;quot;xxx&amp;quot; /&amp;gt; elements telling &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; what methods are &lt;em&gt;allowed&lt;/em&gt; to be exposed. Also note that I&amp;#39;ve exposed the service directly via &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. Personally I don&amp;#39;t normally do this. Instead I write a very simple proxy around the service and expose that instead. One reason I like to do this is to invoke regular Spring Validators and return a regular org.springframework.validation.Errors object to &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. I&amp;#39;m not really sure if this is such a great idea. Just something I&amp;#39;m playing with at the moment.&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;public Errors saveComment(Comment comment) {&lt;tt&gt;
&lt;/tt&gt;  Errors errors = new BindException(comment, &amp;quot;comment&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;  for (int i = 0; i &amp;lt; validators.length; i++) {&lt;tt&gt;
&lt;/tt&gt;     ValidationUtils.invokeValidator(validators[i], comment, errors);&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  if (!errors.hasErrors()) {&lt;tt&gt;
&lt;/tt&gt;    comments.add(comment);&lt;tt&gt;
&lt;/tt&gt;    comment.setId(Long.valueOf((long)comments.size()));&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  return errors;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;The org.directwebremoting.AjaxFilter&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You might have notices the &amp;lt;dwr:filter /&amp;gt; element in the previous configuration code snippet. &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; 2 introduced the org.directwebremoting.AjaxFilter that can be configured to be invoked per request for a method exposed by &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt;. I use a filter to here to get the current Captcha ID in Session and put it in a threadlocal based holder object for use in the Captcha validator.&amp;nbsp;  &lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;public Object doFilter(Object object, Method method, Object[] params, AjaxFilterChain chain) &lt;tt&gt;
&lt;/tt&gt;    throws Exception {&lt;tt&gt;
&lt;/tt&gt;    if (logger.isDebugEnabled()) {&lt;tt&gt;
&lt;/tt&gt;        logger.info(&amp;quot;Processing method '&amp;quot; + method.getName() + &amp;quot;' on service '&amp;quot; + object + &amp;quot;'&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    HttpSession session = WebContextFactory.get().getSession();&lt;tt&gt;
&lt;/tt&gt;    CaptchaResponseHolder.setCaptchaId(session.getId());&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    Object reply = chain.doFilter(object, method, params);&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    return reply;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;The CaptchaValidator then is a regular org.springframework.validation.Validator:&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;public void validate(Object target, Errors errors) {        &lt;tt&gt;
&lt;/tt&gt;    ValidationUtils.rejectIfEmpty(errors, CAPTCHA_FIELD_NAME, &lt;tt&gt;
&lt;/tt&gt;            &amp;quot;form.error.required&amp;quot;,&lt;tt&gt;
&lt;/tt&gt;            new Object[] { new DefaultMessageSourceResolvable(&amp;quot;form.captcha&amp;quot;) }, &lt;tt&gt;
&lt;/tt&gt;                                 &amp;quot;Please enter the validation word&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    if (errors.getFieldError(CAPTCHA_FIELD_NAME) != null) {&lt;tt&gt;
&lt;/tt&gt;        return;&lt;tt&gt;
&lt;/tt&gt;    } &lt;tt&gt;
&lt;/tt&gt;    &lt;tt&gt;
&lt;/tt&gt;    CaptchaAware captchaAware = (CaptchaAware)target;&lt;tt&gt;
&lt;/tt&gt;    if (!isCaptchaValid(captchaAware.getHumanResponse())) {&lt;tt&gt;
&lt;/tt&gt;        errors.rejectValue(CAPTCHA_FIELD_NAME, &amp;quot;form.error.captchaInvalid&amp;quot;, &lt;tt&gt;
&lt;/tt&gt;                &amp;quot;Please enter the security word again&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;    } &lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;private boolean isCaptchaValid(Object response) {&lt;tt&gt;
&lt;/tt&gt;    String captchaId = CaptchaResponseHolder.getCaptchaId(); &lt;tt&gt;
&lt;/tt&gt;    if (logger.isDebugEnabled()) {&lt;tt&gt;
&lt;/tt&gt;        logger.debug(&amp;quot;Validating captcha response '&amp;quot; + response + &amp;quot;' for captchaId '&amp;quot; &lt;tt&gt;
&lt;/tt&gt;                + captchaId + &amp;quot;'&amp;quot;);&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;    Boolean isValid = captchaService.validateResponseForID(captchaId, response);&lt;tt&gt;
&lt;/tt&gt;    return isValid.booleanValue();&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Running the Example&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;That&amp;#39;s pretty much it. I&amp;#39;ve zipped up the source code for the example &lt;a href=&quot;../../download/dwr-captcha-example.zip&quot;&gt;here&lt;/a&gt;. Unzip this into a directory of your choice and type mvn tomcat:run after completing the steps below providing of course you have maven 2 installed. You should also be able to import the project into eclipse to take a look at it. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing JCaptcha and Other Required Libraries in your Maven Repository&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately there seems to be a problem with the version of JCaptcha in on ibiblio. So you will need download and install the jar in you maven repository yourself following these steps (assuming you have Maven 2 installed):&lt;/p&gt;
&lt;p&gt;1. Download &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=97877&amp;amp;package_id=104743&amp;amp;release_id=412287&quot;&gt;jcaptcha-1.0-RC3&lt;/a&gt; binary from the projects &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=97877&quot;&gt;download page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;2. Unzip the downloaded jcaptcha binary and cd into the directory where you unzipped it.&lt;/p&gt;
&lt;p&gt;3. Install the jar using this command:  &lt;br /&gt;&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;&lt;tt&gt;
&lt;/tt&gt;mvn install:install-file -DgroupId=jcaptcha -DartifactId=jcaptcha-all &lt;tt&gt;
&lt;/tt&gt;-Dversion=1.0-RC3 -Dpackaging=jar -Dfile=jcaptcha-all-1.0-RC3.jar&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Running the Example&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You should now be ready to run the example. From the command line, cd into the directory where you downloaded the example. Type &lt;/p&gt;&lt;/p&gt;
&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td class=&quot;line_numbers&quot; title=&quot;click to toggle&quot; onclick=&quot;with (this.firstChild.style) { display = (display == '') ? 'none' : '' }&quot;&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre ondblclick=&quot;with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }&quot;&gt;mvn clean tomcat:run&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Maven should download a whole bunch of jar files including a enough to run an embedded version of Tomcat. Which will start up and run. &lt;/p&gt;&lt;p&gt;Navigate to http://localhost:8080/dwr-captcha-example/example/comments.html and you should see a regular looking comment form with captcha that never refreshes.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Sat, 27 Jan 2007 17:07:00 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/dwr_spring_and_captcha</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461808</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645533/1222496</fs:itemid></item><item><title>My new desk</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645537/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I bought a new desk last weekend from Ikea. Finally set it up.  Belly seemed to want to be near it and sit under it. &lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.flickr.com/photos/rainkinz/363911172/&quot; title=&quot;Photo Sharing&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/169/363911172_7f81d01677_m.jpg&quot; alt=&quot;IMG_4625.JPG&quot; width=&quot;180&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 21 Jan 2007 01:39:53 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/my_new_desk</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461807</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645537/1222496</fs:itemid></item><item><title>Maven 2 Tricks and Tips</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645539/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Debugging From the Command Line&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;mvn help:effective-pom: prints out final result for the target &lt;span class=&quot;caps&quot;&gt;POM&lt;/span&gt;, i.e. after applying parent dependencies etc. &lt;/p&gt;</description><pubDate>Sat, 13 Jan 2007 02:16:15 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/maven_2_tricks_and_tips</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461806</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645539/1222496</fs:itemid></item><item><title>The New Blog</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645542/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;So after a bit of a hiatus, I&amp;#39;m going to try to get back into this blogging thing. As stated in my about page, this site is really just for me to muck around with some technology I&amp;#39;m interested in and maybe leave some notes for my friends and family about what&amp;#39;s happening here in New York and life in general. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, the new version of my blogging software now uses Acegi for security and &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; for the comment form (so no more page refresh madness and makes coding the thing easier too!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That&amp;#39;s about it for now. Some &lt;span class=&quot;caps&quot;&gt;DWR&lt;/span&gt; specific posts coming.&lt;/div&gt;&lt;/p&gt;</description><pubDate>Wed, 08 Nov 2006 10:27:10 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/the_new_blog</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461805</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645542/1222496</fs:itemid></item><item><title>A little note on Spring Bean Factory Hierarchy</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645545/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There seems to be a lot of confusion about Spring Bean Factories that actually form part of a hierarchy. Spring does have a concept of BeanFactories having a parent and a common parent child relationship&lt;/p&gt;</description><pubDate>Fri, 10 Mar 2006 18:19:33 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/a_little_note_on_spring_bean_factory_hierarchy</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461804</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645545/1222496</fs:itemid></item><item><title>The Blizzard of '06</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645548/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We were having a very mild winter (thanks to global warming) in New York until recently. Most days have been hovering around the 50 degree mark or better. Then craziness. I think officially it was 29 inches of snow. As you can see Chau and Bella made the best of it (although I think Bella looks slightly unhappy in this picture). &lt;img src=&quot;http://static.flickr.com/43/104308192_42e2d61c24.jpg&quot; alt=&quot;&quot; width=&quot;200&quot; /&gt;&lt;/p&gt;</description><pubDate>Fri, 24 Feb 2006 15:13:01 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/the_blizzard_of_06</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461803</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645548/1222496</fs:itemid></item><item><title>My Favorite Linux Sites</title><link>http://item.feedsky.com/~feedsky/javablogs/~1220813/124645550/1222496/1/item.html</link><description>&lt;p&gt;&lt;a href=http://www.kuripai.com/posts.rss&gt;Kuripai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.howtoforge.com/&quot;&gt;http://www.howtoforge.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Interesting:&lt;/p&gt;
&lt;p&gt;http://labs.silverorange.com/&lt;/p&gt;</description><pubDate>Wed, 22 Feb 2006 15:31:41 +0800</pubDate><author>Kuripai</author><guid isPermaLink="false">http://www.kuripai.com/posts/my_favorite_linux_sites</guid><dc:creator>Kuripai</dc:creator><fs:srclink>http://www.javablogs.com/Jump.action?id=461802</fs:srclink><fs:srcfeed>http://javablogs.com/ViewDaysBlogs.action?view=rss</fs:srcfeed><fs:itemid>feedsky/javablogs/~1220813/124645550/1222496</fs:itemid></item></channel></rss>