<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Myndian.de - Softwaretechnik</title>
    <link>http://www.myndian.de/blog/</link>
    <description>Softwaretechnik, Politisches, Interessantes und mehr</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.3 - http://www.s9y.org/</generator>
    <managingEditor>blog@myndian.de</managingEditor>
<webMaster>webmaster@myndian.de</webMaster>

    <image>
        <url>http://www.myndian.de/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Myndian.de - Softwaretechnik - Softwaretechnik, Politisches, Interessantes und mehr</title>
        <link>http://www.myndian.de/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Absolute and relative date and time</title>
    <link>http://www.myndian.de/blog/archives/106-Absolute-and-relative-date-and-time.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/106-Absolute-and-relative-date-and-time.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=106</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=106</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    When I tell others about my life and things happening in it, most of the time I do &lt;em&gt;not&lt;/em&gt; say: &amp;#8220;In 1990 I have done this and in 2000 I have done that.&amp;#8221; I mostly say &amp;#8220;when I was 14&amp;#8221; or &amp;#8220;when I was 22&amp;#8221;. I talk about &amp;#8220;last year&amp;#8221; or &amp;#8220;when we married&amp;#8221;. I talk about my son &amp;#8220;when he was 9 month old&amp;#8221; and so on ...&lt;br /&gt;
&lt;br /&gt;
When I tell somebody about my job an the business it&amp;#8217;s mostly the same. When discussing projects I know the exact date of the deadline and sometimes we communicate about it, but in our minds we calculate how much time we have till then.&lt;br /&gt;
&lt;br /&gt;
But in most systems dates are entered, edited and shown as absolute dates. That&amp;#8217;s mostly because this is the base for calculation and persistence. So mainly technical reasons.&lt;br /&gt;
&lt;br /&gt;
There are exceptions: Have a look at the &lt;a href=&quot;http://twitter.com/gottschling&quot; title=&quot;Jörg Gottschling @ Twitter&quot;&gt;twitter messages&lt;/a&gt; passing by. It&amp;#8217;s &amp;#8220;less than a minute ago&amp;#8221; or &amp;#8220;about 1 hour ago&amp;#8221;. I think, that&amp;#8217;s really fine, because the exact time does not matter. I even think, instead of &amp;#8220;about 22 hours ago&amp;#8221; the term &amp;#8220;yesterday&amp;#8221; would be enough.&lt;br /&gt;
&lt;br /&gt;
Do you know the &lt;a href=&quot;http://trac.edgewall.org/&quot; title=&quot;web site of &amp;#x0022;Trac&amp;#x0022;&quot;&gt;software project management tool &amp;#8220;Trac&amp;#8221;&lt;/a&gt;? Looking at a roadmap with milestones you first see &amp;#8220;Due in 12 days&amp;#8221;, &amp;#8220;Due in 6 weeks&amp;#8221; or &amp;#8220;2 days late&amp;#8221; and after it there is the absolute date in brackets.&lt;br /&gt;
&lt;br /&gt;
I thought about this, because we implemented a &amp;#8220;rapid messaging tool&amp;#8221; like twitter into our &lt;a href=&quot;http://www.Portal-CRM.com&quot; title=&quot;Portal-CRM.com&quot;&gt;Portal-CRM.com&lt;/a&gt;. I think the presentation of date and time informations there should work like in twitter or probably better.&lt;br /&gt;
&lt;br /&gt;
But I think managing activities, sales opportunities and so and may work with the same principle at some point. Maybe one should be able to enter dates like &amp;#8220;in two weeks&amp;#8221;, not concerning about the absolute one. Will this work? Showing my activities to me with &amp;#8220;Due in 2 days&amp;#8221;, &amp;#8220;Due tomorrow&amp;#8221; or &amp;#8220;One day late&amp;#8221; would be really nice and not bending my brain about the calender every time I read it. This is much faster!&lt;br /&gt;
&lt;br /&gt;
In some cases it may be better to present the difference between to dates. So you set one fixed date and every other date information is displayed relative to it. For example the activities in a project may be shown relative to the project start and/or to the deadline. This activity starts two weeks after project start and should be finished a month before the deadline. Would this be helpful?&lt;br /&gt;
&lt;br /&gt;
These are just some moving thoughts and no conclusions. 
    </content:encoded>

    <pubDate>Sun, 18 Oct 2009 12:22:43 +0200</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/106-guid.html</guid>
    <category>crm</category>
<category>datetime</category>
<category>gui</category>
<category>usability</category>

</item>
<item>
    <title>Toying around ... with Scala</title>
    <link>http://www.myndian.de/blog/archives/96-Toying-around-...-with-Scala.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/96-Toying-around-...-with-Scala.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=96</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=96</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    &lt;p&gt;After a long time here is a post about &lt;a href=&quot;http://www.scala-lang.org/&quot; title=&quot;Homepage of the programming language Scala&quot;&gt;Scala&lt;/a&gt; again. I played around with composition of objects an classes from traits.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;This post is also a reaction to Thomas Biskups post &lt;a href=&quot;http://www.adom.de/blog/2008/12/16/toying-around/&quot; title=&quot;ADOM Blog - Toying around ...&quot;&gt;Toying around ...&lt;/a&gt;, where he played around with &lt;a href=&quot;http://www.qi4j.org/&quot;&gt;Qi4j&lt;/a&gt; to perhaps find a better architecture for his rogue like rpg &amp;#8220;JADE&amp;#8221;. We sometimes talking about this and I once mentioned Scalas traits.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;So here is a little example of object and class composition with traits in Scala from the domain of role play games. I implemented some simple traits which I used to compose a class and a (singelton) object.&lt;/p&gt;
&lt;br /&gt;

&lt;pre&gt;
package de.myndian.scala.rpg

// Something that has a &amp;#8220;name&amp;#8221;
trait Named
{
  def name : String
}

// Something that has &amp;#8220;power&amp;#8221;
trait Powered
{
  def power : Int
}

// A namend thing that can be hitted 
trait Hitable
{
  this: Named =&gt;
  
  var hitpoints : Int
  
  def hit(points : Int)
  {
    hitpoints -= points
    print(name + &amp;#8220; was hitted with &amp;#8221; + points + &amp;#8220; points. &amp;#8221;) 
    if(hitpoints &lt;= 0)
      println(name + &quot; is dead.&quot;)
    else
      println(name + &quot; has &quot; + hitpoints + &quot; hitpoints remaining.&quot;)
  }
}

// A named thing that can use its power to hit a hittable
trait Fighter
{
  this : Named with Powered =&gt;
  
  val rnd = new Random(System.currentTimeMillis)
  
  def hit(target : Named with Hitable)
  {
    println(name + &amp;#8220; hits &amp;#8221; + target.name)
    target.hit(rnd.nextInt(power))
  }
}

class Door(val name : String, var hitpoints : Int) 
    extends Named
    with Hitable


// In this fight the dwarf &amp;#8220;kills&amp;#8221; a door 
object DemoFight
    extends Application
{
  var aDoor = new Door(&amp;#8220;a door&amp;#8221;, 10)

  object TheDwarf
      extends Named
      with Hitable
      with Fighter
      with Powered
  {
    val name = &amp;#8220;the dwarf&amp;#8221;
    val power = 10
    var hitpoints = 20
  }

  while(aDoor.hitpoints &gt; 0)
    TheDwarf.hit(aDoor)
}
&lt;/pre&gt;

&lt;p&gt;Some sample output:&lt;/p&gt;

&lt;pre&gt;
the dwarf hits a door
a door was hitted with 3 points. a door has 7 hitpoints remaining.
the dwarf hits a door
a door was hitted with 7 points. a door is dead.
&lt;/pre&gt;

&lt;p&gt;So Thomas, what about &amp;#8220;SADE&amp;#8221;? ;-) &lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 07 Feb 2009 15:41:11 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/96-guid.html</guid>
    <category>adom</category>
<category>composition</category>
<category>jade</category>
<category>mixins</category>
<category>object orientation</category>
<category>rpg</category>
<category>scala</category>
<category>traits</category>

</item>
<item>
    <title>Grails tutorials and a free e-book</title>
    <link>http://www.myndian.de/blog/archives/93-Grails-tutorials-and-a-free-e-book.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/93-Grails-tutorials-and-a-free-e-book.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=93</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=93</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    I startet trying &lt;a href=&quot;http://grails.org/&quot;&gt;Grails&lt;/a&gt; by reading the &lt;a href=&quot;http://grails.org/Quick+Start&quot;&gt;Quick Start Tutorial&lt;/a&gt;. That&amp;#8217;s nice to get a very trivial application running, but it was not enoough for me. So I read across &lt;a href=&quot;http://grails.org/Tutorials&quot;&gt;the other tutorials&lt;/a&gt;, and tried some, but they did not really satisfy me.&lt;br /&gt;
&lt;br /&gt;
So after some search I found one of those nice free e-books from &lt;a href=&quot;http://www.infoq.com/&quot;&gt;InfoQ&lt;/a&gt;, one of my favorite sources for technical news, presentations, interviews, articles and tutorials about Java &amp;amp; Co. They published the book &lt;a href=&quot;http://www.infoq.com/minibooks/grails&quot;&gt;&amp;#8220;Getting Started with Grails&amp;#8221;&lt;/a&gt;, which can be downloaded as e-book for free or purchased as print version. There is also a &lt;a href=&quot;http://www.infoq.com/presentations/rudolph-grails-intro&quot;&gt;presentation about the content of the book&lt;/a&gt; (one hour).&lt;br /&gt;
&lt;br /&gt;
The book is written in tutorial style or &amp;#8220;learning by example&amp;#8221; as called by the author. For me it is just the tutorial I was looking for. Great! 
    </content:encoded>

    <pubDate>Sat, 15 Nov 2008 17:14:20 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/93-guid.html</guid>
    <category>book</category>
<category>grails</category>
<category>groovy</category>
<category>tutorial</category>

</item>
<item>
    <title>Runnig Grails</title>
    <link>http://www.myndian.de/blog/archives/92-Runnig-Grails.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/92-Runnig-Grails.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=92</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=92</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Today I started my fourth attempt to build and run a simple Hello World Application in Groovy. I failed using Grails 0.4 and 0.5.something because it just did not work and I did not get any help. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  Because these were premature version I tried using grails 1.0.rc4, but on my new machine. It failed too. But as I know now, because of configuration and windows permission issues.&lt;br /&gt;
&lt;br /&gt;
Now I was successful! But it is very hard if you try to develop grails, while being no local admin. The problem is not Grails itself, but my lack of windows knowledge. I ended up, with nearly all windows runing as admin, except the browser. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
I also stumpled upon different problems. I could solve them together with our friend Google, but I think I needed two hours to get my very simple CRUD application working.&lt;br /&gt;
&lt;br /&gt;
My conclusion up to now: Grails has to be easier to start with. 
    </content:encoded>

    <pubDate>Sun, 09 Nov 2008 13:26:15 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/92-guid.html</guid>
    <category>grails</category>
<category>groovy</category>
<category>windows</category>

</item>
<item>
    <title>Simpler implementation of ApplicationContextAware</title>
    <link>http://www.myndian.de/blog/archives/91-Simpler-implementation-of-ApplicationContextAware.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/91-Simpler-implementation-of-ApplicationContextAware.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=91</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=91</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    &lt;pre&gt;
public class MyApplicationContextAwareClass
{

  @Autowired(required = true)
  private ApplicationContext applicationContext;

  // ...
}
&lt;/pre&gt;

Probably not very usable if you like to test your class (or you have to made the property package visible). But if your class is a test it is very nice and quite usefull. 
    </content:encoded>

    <pubDate>Sun, 16 Mar 2008 13:59:55 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/91-guid.html</guid>
    <category>configuration</category>
<category>spring framework</category>

</item>
<item>
    <title>Premature optimization and object orientation</title>
    <link>http://www.myndian.de/blog/archives/90-Premature-optimization-and-object-orientation.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/90-Premature-optimization-and-object-orientation.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=90</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=90</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Just a litte note aside: I know many people saying that object oriented software does not perform well. Mostly that is their pretext to do ancient procedural programming or - worse - to mix up both. But every informed developer knows that this is not true. The (performance, architectural, ...) problem of many oo-software is the mashup of procedural/relational on one side and object oriented on the other. A well-known advice is to build the simplest object oriented programm you could and to leave out optimization as far as you could. Optimize only if it is really, really necessary and only if you know very, very well where your performance lack resides.&lt;br /&gt;
&lt;br /&gt;
This week I stumbled over such a situation. Last week - friday afternoon, of course &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; - a customer called us that the result of the actual iteration does not work properly. A component which generates a network plan from a template and does some computations on that structure really killed the test system. A test on our development machine with their test data showed us that this process takes over three minutes of full workload of the hardware. And the plan had only 64 nodes.&lt;br /&gt;
&lt;br /&gt;
So I took Nils over to a pair debugging session and we did some profiling. The bug was found quickly in the gap between some domain objects that evolved from a relational structure. To fix this we added a little cache to one class. The process took about one minute. Another cache and it performed in under one second! Without changing any other part of the system, because of the oo design. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
We took this as a proof of the advices above. 
    </content:encoded>

    <pubDate>Sat, 15 Mar 2008 11:51:48 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/90-guid.html</guid>
    <category>java</category>
<category>object orientation</category>
<category>optimization</category>
<category>performance</category>

</item>
<item>
    <title>POJOs, POGOs und POCOs</title>
    <link>http://www.myndian.de/blog/archives/88-POJOs,-POGOs-und-POCOs.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/88-POJOs,-POGOs-und-POCOs.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=88</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=88</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Every up-to-date Java developer knows what a &amp;#8216;plain old java object&amp;#8217; is and its shorthand: POJO. It is a reasonable term from the view of a Java developer and especially of a JEE developer. But there is so much hype around POJOs that other communities are using this term too. So I found articles about &amp;#8216;plain old CLR/C# objects&amp;#8217; - shortly called POCOs as you may imagin - and a few minutes ago I stumbled upon &amp;#8216;plain old groovy objects&amp;#8217; or POGOs.&lt;br /&gt;
&lt;br /&gt;
What the hack is &lt;em&gt;old&lt;/em&gt; within a &amp;#8216;POCO&amp;#8217; or a &amp;#8216;POGO&amp;#8217;? Did I miss &amp;#8216;.Net 2 enterprise edition&amp;#8217; and &amp;#8216;enterprise groovy beans&amp;#8217;? When will there be POROs and POBOs and POPOs and ...?&lt;br /&gt;
&lt;br /&gt;
Perhaps the term &amp;#8216;simple objects&amp;#8217; does really describe what is meant. 
    </content:encoded>

    <pubDate>Sun, 02 Mar 2008 16:05:41 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/88-guid.html</guid>
    <category>c#</category>
<category>groocy</category>
<category>java</category>
<category>language</category>

</item>
<item>
    <title>View technologys for generated web layers</title>
    <link>http://www.myndian.de/blog/archives/83-View-technologys-for-generated-web-layers.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/83-View-technologys-for-generated-web-layers.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=83</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=83</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    We use model driven software development in many places in the company. I think, some workmates (consultants &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; ) do not really know that they only build a model that is generating the real application. But that&amp;#8217;s OK. Some colleagues are working on a web application, were the web interface will be generated out of an description in XML. The same applies for the framework I use most the time. As I have a some experience in this area, I tried to tell them what works well and what does not. They asked me initially, but I do not think they wanted to hear the answer I gave them. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
They like to use &lt;a href=&quot;http://java.sun.com/products/jsp/index.jsp&quot;  title=&quot;JavaServer Pages Official Site&quot;&gt;JSP&lt;/a&gt; as the view technology, but the lead architects forbade this, because of testability. So they looked after alternatives, like &lt;a href=&quot;http://velocity.apache.org/&quot;  title=&quot;Apache Velocity Project Official Site&quot;&gt;Velocity&lt;/a&gt; and &lt;a href=&quot;http://www.freemarker.org/&quot;  title=&quot;FreeMarker Official Site&quot;&gt;FreeMarker&lt;/a&gt;. I told them to have a look at &lt;a href=&quot;http://www.stringtemplate.org/&quot;  title=&quot;StringTemplate Template Engine Official Site&quot;&gt;StringTemplate&lt;/a&gt;. That&amp;#8217;s an amazing template engine. You can even say that it is the only real template engine that exits. There are &lt;a href=&quot;http://www.stringtemplate.org/article/list&quot;  title=&quot;Article related to StringTemplate - Look at the &#039;highlights&#039;&quot;&gt;some scientific paper&lt;/a&gt; from Terence Parr - who is professor of computer science at the University of San Francisco - that explain what a template engine should allow you to do and what it should not allow and why StringTemplate fits in this academic definition of template engines.&lt;br /&gt;
&lt;br /&gt;
Look at this quote from the FreeMarker Site:&lt;br /&gt;
&lt;blockquote&gt;[...] you separate the designers (HTML authors) from the programmers. Everybody works on what they are good at. Designers can change the appearance of a page without programmers having to change or recompile code, because the application logic (Java programs) and page design (FreeMarker templates) are separated. Templates do not become polluted with complex program fragments. [...] it helps to keep the application clear and easily maintainable.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Does FreeMarker really fits in this description? According to Terence Parr it does not, because &lt;q&gt;FreeMarker has some programming capabilities&lt;/q&gt;. &amp;#8220;Some&amp;#8221; is just too much here. Like with PHP or JSP, which are full blown programming languages you &lt;em&gt;could&lt;/em&gt; work that way! But with a real template engine you &lt;em&gt;have to&lt;/em&gt; work that way! Why do a HTML designers need to multiply numbers? Why do they need to make database querys? They do not need to. And that&amp;#8217;s why nobody should need a template engine with &amp;#8220;programming capabilities&amp;#8221;. As everybody knows it is not easy to divide the template from the controller or renderer and it is not difficult to mix them together.&lt;br /&gt;
&lt;br /&gt;
How often have you seen code like: &lt;pre&gt;Your order from %&amp;lt;%= new SimpleDateFormat(&amp;#8220;yyyy.MM.dd HH:mm:ss&amp;#8221;).format(order.getDate()) &amp;gt;&lt;/pre&gt; That is to much logic for a template in opinion! Even if you move that into a Tag Lib or a Velocity or FreeMarker Macro like &lt;pre&gt;Your order from #dateFormat(order.Date &amp;#8220;yyyy.MM.dd HH:mm:ss&amp;#8221;)&lt;/pre&gt; you have not really achieved anything in decoupling the template from the controller. Using StringTemplate you &lt;em&gt;could&lt;/em&gt; only write&lt;br /&gt;
&lt;pre&gt;Your order from $order.Date$&lt;/pre&gt; and nothing more. That really decouples the template and the controller.&lt;br /&gt;
&lt;br /&gt;
A question to the architects: Would you (unit) test these template? I think you can, because it&amp;#8217;s really easy, but you would not, because you want to test the logic and not the template engine.&lt;br /&gt;
&lt;br /&gt;
There is only one thing you could do with StringTemplate that you should not do:&lt;br /&gt;
&lt;pre&gt;This is &amp;lt;span style=&amp;#8220;color:$colors.Red$&amp;#8221;&amp;gt;bad&amp;lt;/span&amp;gt; usage!&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
But remember the background: The web layer is generated from a description! Taking this into account you have to ask yourself which of two general ways you want to use. Do you want to generate one complete template for each view or do you want to compose the views out of many fragments?&lt;br /&gt;
&lt;br /&gt;
I think the first one - generating complete pages - may have advantages according performance. Especially if you use JSP which is (according to the german magazine c&amp;#8217;t) one of the fastest view technologies available. The greatest disadvantage is that you have to  generate all views again and again if you change a template generating those views. Trust me: That&amp;#8217;s really annoying. Have you ever spend a hour waiting for the generation of the applications just to determine that you had made a mistake?&lt;br /&gt;
&lt;br /&gt;
So the main advantage of the second way - composing the views - is that you can change a template and the changed one will be used all over the place. It may have a slower performance at runtime, but this can be addressed using caching. You may even not have to generate code when using this solution. Because you can read the XML description and compose the views at runtime. When going that way, StringTemplate will be the best solution available, because of its abilities to reuse templates in a way you can not with Velocity, FreeMarker or JSP. StringTemplate is made to compose views out of fragments.&lt;br /&gt;
&lt;br /&gt;
Last but not least, there may the a way to use both solutions. In a development environment you could use &amp;#8220;composing&amp;#8221; and you could use these templates to generate the complete templates for the production environment. But I would stick to the second solution.&lt;br /&gt;
&lt;br /&gt;
Just my two cents. 
    </content:encoded>

    <pubDate>Thu, 27 Dec 2007 08:50:19 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/83-guid.html</guid>
    <category>java</category>
<category>jsp</category>
<category>model driven software development</category>
<category>mvc</category>
<category>strindtemplate</category>
<category>velocity</category>
<category>web development</category>
<category>web-applikationen</category>

</item>
<item>
    <title>More about Groovy SQL Maps</title>
    <link>http://www.myndian.de/blog/archives/82-More-about-Groovy-SQL-Maps.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/82-More-about-Groovy-SQL-Maps.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=82</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=82</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    &lt;p&gt;A week ago I &lt;a href=&quot;http://www.myndian.de/blog/archives/79-Make-your-SQL-Maps-Groovy!.html&quot;  title=&quot;myndian.de: Make your SQL Maps Groovy!&quot;&gt;posted about a GroovyIBatisDao&lt;/a&gt;. Here I like to tell you about a few details as I announced.&lt;/p&gt;
&lt;br/&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.myndian.de/blog/archives/82-More-about-Groovy-SQL-Maps.html#extended&quot;&gt;&quot;More about Groovy SQL Maps&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 22 Dec 2007 15:33:24 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/82-guid.html</guid>
    <category>dynamic typing</category>
<category>groovy</category>
<category>ibatis</category>
<category>java</category>
<category>sql maps</category>
<category>test</category>

</item>
<item>
    <title>Make your SQL Maps Groovy!</title>
    <link>http://www.myndian.de/blog/archives/79-Make-your-SQL-Maps-Groovy!.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/79-Make-your-SQL-Maps-Groovy!.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=79</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=79</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    &lt;p&gt;At work we mainly use Java as general purpose language, but we also pay attention to groovy. There are other scripting languages which are more mature and with a much better syntax, but for our purpose - scripting some Java applications and frameworks - it&amp;#8217;s best suited. (You may read a &lt;a href=&quot;http://martinfowler.com/bliki/GroovyOrJRuby.html&quot; &gt;nice article from Fowler&lt;/a&gt; about that.)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;In one case we use IBatis in the persistence layer and startet to write services which use our SqlMapDaos in Groovy. So I thought about an generic DAO for SQL-Maps using groovy. I had implemented a DAO using Spring Aspects before, like in this &lt;a href=&quot;http://www.ibm.com/developerworks/java/library/j-genericdao.html&quot; &gt;article about a generic Hibernate DAO&lt;/a&gt;. But this requires at least to define an interface for the DAO. But because Groovy it uses dynamic typing, we can even drop that also.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.myndian.de/blog/archives/79-Make-your-SQL-Maps-Groovy!.html#extended&quot;&gt;&quot;Make your SQL Maps Groovy!&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 15 Dec 2007 13:37:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/79-guid.html</guid>
    <category>dynamic typing</category>
<category>groovy</category>
<category>ibatis</category>
<category>java</category>
<category>spring framework</category>
<category>sql maps</category>

</item>
<item>
    <title>Groovy again</title>
    <link>http://www.myndian.de/blog/archives/81-Groovy-again.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/81-Groovy-again.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=81</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=81</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Groovy 1.5 ist out. It&amp;#8217;s grooviest thing on earth. Far beyond the Grandfather of Funk himself, if you believe to the rumours and the &amp;#8216;press&amp;#8217;. Wow! It&amp;#8217;s sooo groooovy and you really feel groovy if you&amp;#8217;re elected to work with it.&lt;br /&gt;
&lt;br /&gt;
I had some looks at groovy again and again since years. In theory it&amp;#8217;s cool and I have many ideas where to use it. I developed some really groovy things in the past two weeks and I wanted to report about them here. But I only feel groovy when thinking about groovy. In theory.&lt;br /&gt;
&lt;br /&gt;
Pratically I hate groovy, because I spend to much time on it, trying to run stupid unit tests in eclipse. The Eclipse Groovy plugin is shockingly terrible. At least it does not even compile my Groovy classes. Argh! Renaming a package which is used in a Groovy class crashes the whole IDE. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  Much wasted time.&lt;br /&gt;
&lt;br /&gt;
Yes, groovy could be groovy, if there were a reasenable tooling we can use. (I have to stick with Eclipse.)&lt;br /&gt;
&lt;br /&gt;
I hope I can report something positive soon. 
    </content:encoded>

    <pubDate>Fri, 14 Dec 2007 08:08:01 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/81-guid.html</guid>
    <category>eclipse</category>
<category>enttäuschung</category>
<category>groovy</category>

</item>
<item>
    <title>Blogroll / Springify</title>
    <link>http://www.myndian.de/blog/archives/80-Blogroll-Springify.html</link>
            <category>Internet</category>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/80-Blogroll-Springify.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=80</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=80</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Our blogroll took a little refresh. I moved out some links, where nothing happened for a longer time and introduced a new link to our workmate and Spring Framework Guru Nils Wloka. He&amp;#8217;s running the little Spring related blog &lt;a href=&quot;http://www.springify.com/&quot;  title=&quot;All about Spring&quot;&gt;&amp;#8220;Springify&amp;#8221;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I think there is some work left to do about our blogroll. 
    </content:encoded>

    <pubDate>Wed, 12 Dec 2007 08:39:24 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/80-guid.html</guid>
    <category>myndian.de</category>
<category>spring framework</category>

</item>
<item>
    <title>3644 views in one empty ORACLE database</title>
    <link>http://www.myndian.de/blog/archives/77-3644-views-in-one-empty-ORACLE-database.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/77-3644-views-in-one-empty-ORACLE-database.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=77</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=77</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    No, that is not a joke! An empty ORACLE 10g database has 3644 views. There are 49441 objects at all in an empty database. Crazy. 
    </content:encoded>

    <pubDate>Tue, 20 Nov 2007 13:49:06 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/77-guid.html</guid>
    <category>database</category>
<category>oracle</category>
<category>view</category>

</item>
<item>
    <title>last language war language trolling</title>
    <link>http://www.myndian.de/blog/archives/76-last-language-war-language-trolling.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/76-last-language-war-language-trolling.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=76</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=76</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    Sorry, I could not get around. I had to post &lt;a href=&quot;http://davidrupp.blogspot.com/2007/10/last-language-war-language-trolling.html&quot; &gt;this&lt;/a&gt;. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/laugh.png&quot; alt=&quot;:-D&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
(via &lt;a href=&quot;http://blogs.tedneward.com/2007/10/20/Link+The+Last+Language+WarLanguage+Trolling+Post+Youll+Ever+Need+To+Read.aspx&quot; &gt;Ted Newards Blog Ride&lt;/a&gt;) 
    </content:encoded>

    <pubDate>Wed, 31 Oct 2007 16:51:59 +0100</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/76-guid.html</guid>
    <category>c#</category>
<category>fun</category>
<category>java</category>
<category>scala</category>

</item>
<item>
    <title>Drop all tables</title>
    <link>http://www.myndian.de/blog/archives/74-Drop-all-tables.html</link>
            <category>Softwaretechnik</category>
    
    <comments>http://www.myndian.de/blog/archives/74-Drop-all-tables.html#comments</comments>
    <wfw:comment>http://www.myndian.de/blog/wfwcomment.php?cid=74</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.myndian.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=74</wfw:commentRss>
    

    <author>nospam@example.com (Jörg)</author>
    <content:encoded>
    We tried to deploy an application to a customer&amp;#8217;s test system yesterday and needed to clean up the full database. We agreed before that they have to delete the schema and the user with all table etc. but they missed to notify their ORACLE adminstrators. We had only the permissions to work in, but not with the schema. So how to drop a few hundred tables?&lt;br /&gt;
&lt;br /&gt;
DROP TABLE * CASCADE CONSTRAINTS!?&lt;br /&gt;
&lt;br /&gt;
No. No such statement is possible. The solution of my workmate was a little funny:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
  &lt;li&gt;Open ORACLE SQL Developer and connect to the database / schema.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Mark all tables to delete.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Choose &amp;#8220;edit / copy full path&amp;#8221; from the applications menu.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Paste the stuff into the script editor. You get something like &amp;#8220;TABLE MySchema.MyTable@MyDb&amp;#8221;.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Open Search/replace and replace &amp;#8220;TABLE MySchema&amp;#8221; with &amp;#8220;DROP TABLE MySchema&amp;#8221;.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Replace also &amp;#8220;@MyDb&amp;#8221; with &amp;#8220; CASCADE CONSTRAINTS;&amp;#8221;.&lt;/li&gt;&lt;br /&gt;
  &lt;li&gt;Run the script. &lt;img src=&quot;http://www.myndian.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 11 Jul 2007 07:58:01 +0200</pubDate>
    <guid isPermaLink="false">http://www.myndian.de/blog/archives/74-guid.html</guid>
    <category>database</category>
<category>oracle</category>
<category>sql</category>
<category>tools</category>

</item>

</channel>
</rss>
