<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>JBuzz-Word &#187; 2008 &#187; March</title>
	<atom:link href="http://people.byte-code.com/dpanelli/2008/03/feed" rel="self" type="application/rss+xml" />
	<link>http://people.byte-code.com/dpanelli</link>
	<description>...Java, buzzwords and random development topics</description>
	<pubDate>Mon, 23 Jun 2008 13:49:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Coffee break application&#8230; a &lt; 30 minutes groovy application!</title>
		<link>http://people.byte-code.com/dpanelli/2008/03/04/coffe-break-application/</link>
		<comments>http://people.byte-code.com/dpanelli/2008/03/04/coffe-break-application/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 08:55:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Groovy&amp;Grails]]></category>

		<category><![CDATA[Java JEE]]></category>

		<guid isPermaLink="false">http://people.byte-code.com/dpanelli/2008/03/04/coffe-break-application/</guid>
		<description><![CDATA[How many lines of code to do something like this?

def host = new Ghost(&#8220;barman.byte-code.com&#8220;)
def result = host.ls()
println result

think about it carefully&#8230; do you think it&#8217;s possible in less then 10?
Let&#8217;s pull out a groovy solution!
The server:
  1:import groovy.net.xmlrpc.*
 2:import java.net.ServerSocket
 3:
 4:def server = new XMLRPCServer()
 5:def socket = new ServerSocket(8080)
 6:
 7:server.executeShell = [...]]]></description>
			<content:encoded><![CDATA[<p>How many lines of code to do something like this?</p>
<blockquote><style type="text/css"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --></style>
<p><span class="syntax0"><span class="gutter"></span><span class="syntax9">def</span> host <span class="syntax18">=</span> <span class="syntax8">new</span> <span class="syntax6">Ghost</span><span class="syntax18">(</span><span class="syntax13">&#8220;</span><span class="syntax13">barman</span><span class="syntax13">.</span><span class="syntax13">byte</span><span class="syntax13">-</span><span class="syntax13">code</span><span class="syntax13">.</span><span class="syntax13">com</span><span class="syntax13">&#8220;</span><span class="syntax18">)</span><br />
<span class="gutter"></span><span class="syntax9">def</span> result <span class="syntax18">=</span> host.<span class="syntax6">ls</span><span class="syntax18">(</span><span class="syntax18">)</span><br />
<span class="gutter"></span><span class="syntax11">println</span> result<br />
</span></p></blockquote>
<p>think about it carefully&#8230; do you think it&#8217;s possible in less then 10?<br />
Let&#8217;s pull out a groovy solution!</p>
<p>The server:</p>
<blockquote><p> <span class="syntax0"><span class="gutter"> 1:</span><span class="syntax8">import</span> groovy.net.xmlrpc.*<br />
<span class="gutter"> 2:</span><span class="syntax8">import</span> java.net.ServerSocket<br />
<span class="gutter"> 3:</span><br />
<span class="gutter"> 4:</span><span class="syntax9">def</span> server <span class="syntax18">=</span> <span class="syntax8">new</span> <span class="syntax6">XMLRPCServer</span><span class="syntax18">(</span><span class="syntax18">)</span><br />
<span class="gutterH"> 5:</span><span class="syntax9">def</span> socket <span class="syntax18">=</span> <span class="syntax8">new</span> <span class="syntax6">ServerSocket</span><span class="syntax18">(</span><span class="syntax5">8080</span><span class="syntax18">)</span><br />
<span class="gutter"> 6:</span><br />
<span class="gutter"> 7:</span>server.executeShell <span class="syntax18">=</span> { commandArray <span class="syntax18">-&gt;</span><br />
<span class="gutter"> 8:</span>        <span class="syntax9">def</span> p <span class="syntax18">=</span> commandArray.<span class="syntax6">execute</span><span class="syntax18">(</span><span class="syntax18">)</span><br />
<span class="gutter"> 9:</span>        p.<span class="syntax6">waitFor</span><span class="syntax18">(</span><span class="syntax18">)</span><br />
<span class="gutterH">10:</span>        p.text<br />
<span class="gutter">11:</span>}<br />
<span class="gutter">12:</span><br />
<span class="gutter">13:</span>server.<span class="syntax6">startServer</span><span class="syntax18">(</span>socket<span class="syntax18">)</span><br />
</span></p></blockquote>
<p>And the client:</p>
<blockquote><p><span class="syntax0"><span class="gutter"> 1:</span><span class="syntax8">import</span> groovy.net.xmlrpc.*<br />
<span class="gutter"> 2:</span><br />
<span class="gutter"> 3:</span><span class="syntax10">class</span> Ghost{<br />
<span class="gutter"> 4:</span><br />
<span class="gutterH"> 5:</span>        <span class="syntax9">def</span> hostProxy<br />
<span class="gutter"> 6:</span><br />
<span class="gutter"> 7:</span>        <span class="syntax6">Ghost</span><span class="syntax18">(</span>host<span class="syntax18">)</span>{<br />
<span class="gutter"> 8:</span>          hostProxy <span class="syntax18">=</span> <span class="syntax8">new</span> <span class="syntax6">XMLRPCServerProxy</span><span class="syntax18">(</span><span class="syntax13">&#8220;</span><span class="syntax13">http</span><span class="syntax13">:</span><span class="syntax13">/</span><span class="syntax13">/</span><span class="syntax9">${</span><span class="syntax9">host</span><span class="syntax9">}</span><span class="syntax13">:</span><span class="syntax13">8080</span><span class="syntax13">&#8220;</span><span class="syntax18">)</span><br />
<span class="gutter"> 9:</span>        }<br />
<span class="gutterH">10:</span><br />
<span class="gutter">11:</span>        <span class="syntax9">def</span> <span class="syntax6">callCommand</span><span class="syntax18">(</span>methodName,params<span class="syntax18">)</span>{<br />
<span class="gutter">12:</span>                <span class="syntax9">def</span> commandArray <span class="syntax18">=</span> []<br />
<span class="gutter">13:</span>                commandArray &lt;&lt; methodName<br />
<span class="gutter">14:</span>                params.<span class="syntax11">each</span>{ commandArray &lt;&lt; <span class="syntax15">it</span> }<br />
<span class="gutterH">15:</span>                hostProxy.<span class="syntax6">executeShell</span><span class="syntax18">(</span>commandArray<span class="syntax18">)</span><br />
<span class="gutter">16:</span>        }<br />
<span class="gutter">17:</span><br />
<span class="gutter">18:</span>        <span class="syntax9">def</span> <span class="syntax6">methodMissing</span><span class="syntax18">(</span>String name , args<span class="syntax18">)</span>{<br />
<span class="gutter">19:</span>                callCommand name,args<br />
<span class="gutterH">20:</span>        }<br />
<span class="gutter">21:</span><br />
<span class="gutter">22:</span>}<br />
</span></p></blockquote>
<p>I&#8217;m just amazed&#8230; this is what I call next generation devlopemt: based on solid foundation of good java libs and move foward on top them.<br />
I don&#8217;t think this a full &#8220;production-ready&#8221; implementation but..it works!<br />
and they&#8217;re less the 10 line of code if you remove the &#8220;bloat&#8221;&#8230; half an hour work, a fullblown coffe break application!</p>
<p>Repeat&#8230; less then 10 line of code!</p>
<p>Happy groovin&#8217; , keep DRY and write less code that do more;)</p>
]]></content:encoded>
			<wfw:commentRss>http://people.byte-code.com/dpanelli/2008/03/04/coffe-break-application/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

