<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pedant.dk &#187; Java</title>
	<atom:link href="http://www.pedant.dk/category/coding/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pedant.dk</link>
	<description>Honesty in small things is not a small thing</description>
	<lastBuildDate>Thu, 05 Aug 2010 16:11:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A wave is coming</title>
		<link>http://www.pedant.dk/2009/09/13/a-wave-is-coming/</link>
		<comments>http://www.pedant.dk/2009/09/13/a-wave-is-coming/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 09:16:02 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=618</guid>
		<description><![CDATA[Last week I attended a  day of outstanding geek fun . At the Google wave hackathon I had the chance to sink my teeth into the Google wave API after seeing presentations on gwt and google wave  by Tommy Pedersen and a presentation on wave gadgets by  Joakim Recht.
After a couple of hours of presentations and [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I attended a  day of <a title="outstanding geek fun" href="http://www.masteringwave.com/2009/09/wave-hackathon-in-copenhagen/">outstanding geek fun</a> . At the Google wave hackathon I had the chance to sink my teeth into the Google wave API after seeing presentations on gwt and google wave  by <a href="http://twitter.com/tpedersen">Tommy Pedersen</a> and a presentation on wave gadgets by  Joakim Recht.</p>
<p>After a couple of hours of presentations and brainstorming  we started hacking.  I teamed up with <a title="skakanka" href="http://twitter.com/skakanka"> skakanka</a> to experiment with sending the contents of a wave to a Proof of concept Document storage system . But we ended up doing a simple Echo Bot (but hey! we illustrated how to extract content from a wavelet and send it somewhere).</p>
<p>I brought a mac and used the <a title="google eclipse plugin" href="http://code.google.com/eclipse/">Google eclipse plugin</a> for galileo for coding. It helped that I allready had a Google app engine account from some earlier experiments &#8211; but I spent some time learning the different key combinations on the mac &#8211; it was great fun though (and now I know how to use eclipse on  a mac!). Deploying on google app engine is as simple as pressing a button in eclipse (I also tried using som ant tasks in my earlier experiments).</p>
<p>We managed to have a google wave running sometime before lunch &#8211; so it is very easy to get a basic understanding what a wave bot is all about. (You could think of it as an <a href="https://sourceforge.net/projects/pluggableircbot/">ircbot</a> on steroids ! )</p>
<p>The overall idea of building a google wave bot is to listen to incoming events defined in the protocol. Let&#8217;s say we want to perform something when somebody enters the wave or write something &#8211; then we can define the capabilities like this:</p>
<p><code lang="xml"><br />
<?xml version="1.0"?><br />
<w:robot xmlns:w="http://wave.google.com/extensions/robots/1.0"><br />
  <w:version>0.0.4</w:version><br />
  <w:capabilities><br />
     <w:capability name="blip_submitted"></w:capability><br />
    <w:capability name="wavelet_participants_changed"/><br />
  </w:capabilities><br />
</w:robot><br />
</code></p>
<p>Then the robot should act on the defined events in a manner similar to this :</p>
<p><code lang="java"><br />
@Override<br />
public void processEvents(RobotMessageBundle robotMessageBundle) {<br />
  Wavelet wavelet = robotMessageBundle.getWavelet();<br />
  String rootText = wavelet.getRootBlip().getDocument().getText();<br />
  for ( Event e: robotMessageBundle.getEvents()){<br />
    Blip b= e.getBlip();<br />
    String text= e.getBlip().getDocument().getText();<br />
    if (e.getType().equals(EventType.BLIP_SUBMITTED)){<br />
      e.getBlip().getDocument().append( makeEcho(text));<br />
    }<br />
  }<br />
}<br />
</code></p>
<p>The Wave client api  offers something like the DOM api for the xml being sent back and forth. During the hackathon I learnt that there is no way to ask for the contents of the entire wave from a single blip &#8211; so it will require some thinking to save the entire contents of the wave &#8211; but it should be doable.</p>
<p>Sometime during the afternoon things started to slow down on the wave test server. I noticed that some of the other guys doing a multiuser  interactive drawing gadget for wave. It looked like they recorded a delta to send every time the mouse moved! This made me want to look a bit under &#8220;the hood&#8221;:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/uOFzWZrsPV0" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/uOFzWZrsPV0"></embed></object></p>
<p>Sounds like the team are handling the multiuser issues using &#8220;operational transforms&#8221; . Maybe they could somehow &#8216;batch&#8217; deltas from interactive gadgets ? I have yet to fully understand how &#8220;operational transforms&#8221; work  &#8211; but it sounds like an exciting challenge to make this work on a large scale!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/09/13/a-wave-is-coming/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>afprøvning af groovy på tomcat5.5 på ubuntu vha mysql</title>
		<link>http://www.pedant.dk/2009/03/04/afpr%c3%b8vning-af-groovy-pa-tomcat55-pa-ubuntu-vha-mysql/</link>
		<comments>http://www.pedant.dk/2009/03/04/afpr%c3%b8vning-af-groovy-pa-tomcat55-pa-ubuntu-vha-mysql/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 22:27:33 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=319</guid>
		<description><![CDATA[Jeg har iøjeblikket brug for at kunne afprøve flere forskellige måder at implementere ting i java ifbm prototypning.  Under prototypning kan det være forbundet med ulemper at benytte hele J2EE stakken under udvikling da det kan tage unødigt lang tid at kompilere og deploye  Derfor  har jeg valgt at kigge  på groovy [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg har iøjeblikket brug for at kunne afprøve flere forskellige måder at implementere ting i java ifbm prototypning.  Under prototypning kan det være forbundet med ulemper at benytte hele J2EE stakken under udvikling da det kan tage unødigt lang tid at kompilere og deploye  Derfor  har jeg valgt at kigge  på <a title="groovy" href="http://groovy.codehaus.org/">groovy</a> .</p>
<p>Da det iøjeblikket er for webapplikationer jeg undersøger , så har jeg valgt at køre under tomcat5.5 på min testmaskine.<br />
tomcat5.5 og groovy kan nemt installeres sammen  på ubuntu. Det gøres sådan her  (jeg antager at du allerede har installeret mysql og den virker)</p>
<p><code lang="bash"><br />
sudo apt-get install tomcat5.5 tomcat5.5-admin groovy<br />
</code></p>
<p>For at få tomcat5.5 til at køre groovy til demonstrationsformål har jeg sat &#8220;TOMCAT5_SECURITY=no&#8221; i filen &#8220;/etc/init.d/tomcat5.5&#8243;. I et produktionsmiljø bør man gøre sig overvejelser om brugen af classloaders.</p>
<p> Jeg har  til demonstrationsformål valgt at rette filen /etc/tomcat5.5/tomcat-users.xml til således at bruger &#8220;tomcat&#8221; har roles=&#8221;tomcat,admin,manager&#8221; &#8211; derved kan jeg logge ind i  /manager/ vha &#8216;tomcat&#8217; og &#8216;tomcat&#8217; .Bemærk at der nederst på manager-siden står &#8220;WAR file to deploy&#8221;. Her kan du uploade flg. fil : <a title="groovytest.war" href="http://pedant.dk/hacks/20090303/groovytest.war">groovytest.war</a></p>
<p>Herefter kan der ses et resultat i  /groovytest/ på testmaskinen. groovy testkoden ser således ud:</p>
<p><code lang="bash"><br />
Sql.loadDriver("com.mysql.jdbc.Driver");<br />
sql = Sql.newInstance("jdbc:mysql://localhost:3306/test", "web","sockmonkey");</p>
<p>sql.eachRow("select * from test") {<br />
println it.id + " " + it.name<br />
}<br />
print "mere test"<br />
</code></p>
<p>&#8220;test.groovy&#8221;  henviser til en database &#8220;test&#8221; med tabellen &#8220;test&#8221;. Disse kan skabes vha filen &#8220;test.sql&#8221; der er vedlagt i <a title="groovytest.war" href="http://pedant.dk/hacks/20090303/groovytest.war">groovytest.war</a></p>
<p>war-filen indeholder mysql-driveren , så forbindelsen mellem mysql og groovy skulle fungere der. Men hvis du vil forsøge dig med at køre test.groovy fra kommandolinjen , så kan du også det , hvis du kopierer mysql-connector-java-3.1.14-bin.jar over i din  ~/.groovy/lib/ .  På den facon kan du afvikle testen på serveren uden om tomcat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/03/04/afpr%c3%b8vning-af-groovy-pa-tomcat55-pa-ubuntu-vha-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brug af java reflection til at generere JSON data</title>
		<link>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/</link>
		<comments>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 10:02:11 +0000</pubDate>
		<dc:creator>Jacob</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.pedant.dk/?p=169</guid>
		<description><![CDATA[Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.
Hvis vi antager flg klasser :

class A{
  public int B;
  public int C;
  [...]]]></description>
			<content:encoded><![CDATA[<p>Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.</p>
<p>Hvis vi antager flg klasser :</p>
<p><code lang="java"><br />
class A{<br />
  public int B;<br />
  public int C;<br />
  public D F;<br />
  public D G;<br />
};</p>
<p>class D {<br />
  public String E;<br />
}<br />
</code></p>
<p>og at de var initialiseret således:<br />
<code lang="java"><br />
A a=new A();<br />
a.B=1;<br />
a.C=2;<br />
a.F=new D();<br />
a.F.E="test";<br />
a.G=new D();<br />
a.G.E="test2";<br />
</code></p>
<p>Så kunne man kigge på selve java objekterne vha reflection for at generere JSON output til bruge i javascript således:</p>
<p><code lang="java"><br />
public class JsonEmit{<br />
  public static String emit(Object target) throws Exception{<br />
     StringBuilder sb=new StringBuilder();<br />
     sb.append("{");<br />
     Class targetClass=target.getClass();<br />
     Field[] publicFields = targetClass.getFields();<br />
     for (int i=0;i
<publicFields.length;i++){<br />
       String sFieldName = publicFields[i].getName();<br />
       Class typeClass = publicFields[i].getType();<br />
       String sFieldType = typeClass.getName();<br />
       Object value = publicFields[i].get(target);<br />
       if(value!=null){<br />
         sb.append(sFieldName+":");<br />
         if(typeClass.isPrimitive()<br />
         ||sFieldType=="java.lang.String"){<br />
         sb.append("""+value.toString()+""");<br />
      }else{<br />
        sb.append(JsonEmit.emit(value));<br />
      }<br />
    }<br />
    if(i!=(publicFields.length-1))<br />
      sb.append(",");<br />
  }<br />
 sb.append("}");<br />
 return(sb.toString());<br />
}<br />
</code>
<p>På den facon vil man kunne genere JSON ved et simpelt kald til<br />
<code lang="java"><br />
JsonEmit.emit(a)<br />
</code></p>
<p>hvorefter man vil se<br />
<code lang="javascript"><br />
{B:"1",C:"2",F:{E:"test"},G:{E:"test2"}}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pedant.dk/2009/02/08/brug-af-java-reflection-til-at-generere-json-data/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
