<?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>Developers blog &#187; Helga</title>
	<atom:link href="http://www.realdevelopers.com/blog/author/htauscher/feed" rel="self" type="application/rss+xml" />
	<link>http://www.realdevelopers.com/blog</link>
	<description>realdevelopers.com</description>
	<lastBuildDate>Wed, 14 Sep 2011 21:38:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pair Teaching: How to build a Web Application on the Couch</title>
		<link>http://www.realdevelopers.com/blog/development/pair-teaching-how-to-build-a-web-application-on-the-couch</link>
		<comments>http://www.realdevelopers.com/blog/development/pair-teaching-how-to-build-a-web-application-on-the-couch#comments</comments>
		<pubDate>Wed, 14 Sep 2011 10:23:33 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[pairing]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1494</guid>
		<description><![CDATA[Recently I was co-lecturing a workshop about web application developement with CouchDB. The event took place in the scope of a Summer University, which explicitly claims to provide a setting for lecturers to improve and to try out experimental teaching concepts.
Apart from simply distributing the share of work and apart from parallelizing preparation as well [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I was co-lecturing a workshop about web application developement with <a href="http://couchdb.apache.org/">CouchDB</a>. The event took place in the scope of a <a href="http://www.informatica-feminale.de/en/index.html">Summer University</a>, which explicitly claims to provide a setting for lecturers to improve and to try out experimental teaching concepts.</p>
<p>Apart from simply distributing the share of work and apart from parallelizing preparation as well as oral presentation, my impression is that lecturing in pairs has positive side effects similiar to pair programming: <span id="more-1494"></span></p>
<ul>
<li><strong>better discipline, better flow:</strong> It is easier to fight off disruptions or to get back to the topic after disruptions (e.g. students questions, unforeseen complications with the students OSs etc.)</li>
<li><strong>mentoring, sharing knowledge:</strong> The knowlege you share is not only more details on the topic you are teaching, but also knowledge about the teaching process itself &#8211; as you watch how your pair talks to the students, how she partitions the topics, how she words the tasks and how the students react, you can adjust your own teaching style. This is learning by doing at its best.</li>
<li><strong>better quality, less errors:</strong> As the passive pair lecturer has a distant view on what is being said, she is better able to add details and corrections &#8211; thus improving the lecture quality. And of course the different focus of expertise allows for a more comprehensive presentation. Complex topics can even be presented in a dialog style.</li>
<li><strong>fun:</strong> No matter how bright you are, it is always fun to work together with like-minded people. If you have fun, you will convey the enthusiasm for your topic. Students will be better motivated, hence teaching will be improved.</li>
<li><strong>confidence:</strong> Shy people need extra backup to talk in front of a crowd. Having a fallback helps.</li>
</ul>
<p>As for CouchDB itself: The workshop preparation was an excellent opportunity to dive into the principles of <a href="http://en.wikipedia.org/wiki/NoSQL">non-relational databases</a>, especially schemaless key-value-stores. Apart from the <a href="http://en.wikipedia.org/wiki/CAP_theorem">CAP-theorem</a> and the idea of resigning consistency in favour of availibility and partition tolerance, I am also excited about the option of having data and application together &#8211; thus disposing the need of manually keeping application versions and data migrations in sync. Can&#8217;t wait for a real world project to try CouchDB!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/development/pair-teaching-how-to-build-a-web-application-on-the-couch/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patterns come home: From architecture to computer science and back</title>
		<link>http://www.realdevelopers.com/blog/culture/patterns-come-home-from-architecture-to-computer-science-and-back</link>
		<comments>http://www.realdevelopers.com/blog/culture/patterns-come-home-from-architecture-to-computer-science-and-back#comments</comments>
		<pubDate>Fri, 13 May 2011 16:16:19 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[postmodern]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1411</guid>
		<description><![CDATA[As only few developers and few architects might know, the idea of design patterns &#8211; popular in computer sciences &#8211; originates from the playground of architecture and built environment. It was Christopher Alexander with Sara Ishikawa and Murray Silverstein who wrote &#8220;A Pattern Language: Towns, Buildings, Construction&#8221; in 1977. In this book they describe patterns [...]]]></description>
			<content:encoded><![CDATA[<p>As only few developers and few architects might know, the idea of design patterns &#8211; popular in computer sciences &#8211; originates from the playground of architecture and built environment. It was Christopher Alexander with Sara Ishikawa and Murray Silverstein who wrote &#8220;A Pattern Language: Towns, Buildings, Construction&#8221; in 1977. In this book they describe patterns extracted from the rich (european) architectural history and how to apply them to current problems. Each pattern consists of a description of the problem, a sketch of the prototypical situation, a solution and a reference to related problems. Exactly the same way as the Gang of Four adapted it for problems in computer science in their book &#8220;Design Patterns. Elements of Reusable Object-Oriented Software&#8221; in 1994. Apart from the formal characteristics in both areas the idea of design patterns produces an answer to the same question: how to transfer previous experiences into productive sources of knowledge?<span id="more-1411"></span></p>
<p>The architectural design patterns Alexander describes cover problems like: how to design an entrance situation, how to choose an appropriate building height and how to make streets that are a pleasure to walk along. Each of the patterns is not very complex in itself but by adapting it to a specific context and by combining it with others it unfolds its potential.</p>
<p>From an architectural theory point of view the patterns are an expression of postmodern design thinking and an antimodern reference to the past. It is critized that design patterns lead to eclectic application of past architectural style elements such as a column there, a porticus here and funny roof and window shapes everywhere. This postmodern spirit of the 80s can bee seen on every street corner. The kind of criticism described for architecture can&#8217;t be applied to software code directly for obvious reasons. But every now and then in legacy code you will stumble about some pattern which seems to be applied out of context &#8211; just as eclectic as an unexpected column, which seems to be there just because someone wants do demonstrate that she knows pattern 123 (columns near entrances are a good thing) and to show off her detailed knowledge about the greek doric column system.</p>
<p>In architecture the strong tradition of theoretical reflection leads to constantly evolving new design approaches. As a consequence the design pattern method was consigned to history together with the early postmodern style. That may be one of the root causes for the phenomenon that today design patterns are better know to developers then to architects and building engineers. I even thought for some time, that Alexander had picked the idea of design patterns from some computer science book and adapted it to the built environment.</p>
<p>I was amused to see that design patterns were brought back to architecture in 2007 by computer scientists themself: Some folks defined patterns for building hacker spaces. Allthough they are concentrated around organizational and financial questions they also cover spatial and architectural topics such as the <a href="http://hackerspaces.org/wiki/The_Kitchen_Pattern">Kitchen Pattern</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/culture/patterns-come-home-from-architecture-to-computer-science-and-back/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scared by my IDE</title>
		<link>http://www.realdevelopers.com/blog/development/scared-by-my-ide</link>
		<comments>http://www.realdevelopers.com/blog/development/scared-by-my-ide#comments</comments>
		<pubDate>Mon, 10 Jan 2011 22:43:55 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[IDEA]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1381</guid>
		<description><![CDATA[In general it&#8217;s a good thing, when your IDE is able to surprise you from time to time. However I was a little scared, when IntelliJ IDEA informed me that vertex(maxX, maxX, 0); was probably wrong. Of course I knew that I was gonna replace the second maxX with maxY as soon as I would [...]]]></description>
			<content:encoded><![CDATA[<p>In general it&#8217;s a good thing, when your IDE is able to surprise you from time to time. However I was a little scared, when IntelliJ IDEA informed me that <code>vertex(maxX, maxX, 0);</code> was probably wrong. Of course I knew that I was gonna replace the second maxX with maxY as soon as I would give up symmetry and calculate the second dimension, but IDEA &#8211; how could it know? It&#8217;s easy &#8211; the vertex methods parameter names are <code>(x, y, z)</code> &#8211; that&#8217;s why IDEA infered that &#8220;max&#8221; was probably a prefix. Clever. By the way this confirms the need to choose meaningful and consistent names, even though your IDE is the only one who will ever read and comment on your code <img src='http://www.realdevelopers.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/development/scared-by-my-ide/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s another robot!</title>
		<link>http://www.realdevelopers.com/blog/fun/its-another-robot</link>
		<comments>http://www.realdevelopers.com/blog/fun/its-another-robot#comments</comments>
		<pubDate>Fri, 05 Nov 2010 01:14:48 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[doodling]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[Wassily]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1350</guid>
		<description><![CDATA[  
Me and its godparents from conject proudly introduce the little sibling of our first baby. Parents always love to show around the achievements of their little geniuses and make big plans for their future &#8211; so do we. Wassily (named after his famous Bauhaus role model) is really good with colors. For now [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/12/wassily_1.jpg" alt="This is Wassily." title="This is Wassily." width="212" height="284" style="margin-right: 20px;" /> <img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/12/wassily_2.jpg" alt="Wassily in action." title="Wassily in action." width="212" height="284" style="margin-right: 20px;" /> <img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/12/wassily_3.jpg" alt="Wassilys art work." title="Wassilys art work." width="200" height="284" /></p>
<p>Me and its godparents from conject proudly introduce the little sibling of our <a href="http://www.realdevelopers.com/blog/fun/a-real-developers-baby">first baby</a>. Parents always love to show around the achievements of their little geniuses and make big plans for their future &#8211; so do we. Wassily (named after his famous <a href="http://en.wikipedia.org/wiki/Kandinsky">Bauhaus role model</a>) is really good with colors. For now his drawings decorate my fridge only and conjects Munic office, but thats where all artists start their carrier, right? Soon after he has learned some basic rules of composition, we will start preparing the portfolio for his college of art application. Some time you&#8217;ll wish you had snatched some of his early work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/fun/its-another-robot/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guys&#8217;n&#039;girls</title>
		<link>http://www.realdevelopers.com/blog/culture/guysngirls</link>
		<comments>http://www.realdevelopers.com/blog/culture/guysngirls#comments</comments>
		<pubDate>Sat, 07 Aug 2010 00:04:21 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1283</guid>
		<description><![CDATA[If you are a real developer you most likely have already been in a situation, where a group was welcomed with the phrase hey guys &#8211; on IRC, mailing lists or even in personal talk. Some of you might share the experience to not feel being addressed by this salutation. This situations leave me personally [...]]]></description>
			<content:encoded><![CDATA[<p>If you are a real developer you most likely have already been in a situation, where a group was welcomed with the phrase <em>hey guys</em> &#8211; on IRC, mailing lists or even in personal talk. Some of you might share the experience to not feel being addressed by this salutation. This situations leave me personally a little angry, because I don&#8217;t like to be ignored. As I am a calm and non-aggressive person my usual reaction is to just ignore the speaker as well and to behave as if the salutation didn&#8217;t take place (as if nobody talked to me). Unfortunately this way most people won&#8217;t notice they did something wrong, because they really aren&#8217;t aware of the exclusive nature of their language.<span id="more-1283"></span></p>
<p>Indeed there are a plenty of alternatives which do include all genders: <em>People, folks, fellows, mates, buddies, pals</em> &#8230; I&#8217;d even accept <em>homies</em>, although it originates in <em>homeboy</em>, but might also come from <em>homegirl</em>. Whatever is special about a group but valid for all members of that group may be used: hey <em>hackers, freaks, late risers</em> &#8230; are some of those, which would appeal to me. But I wouldn&#8217;t use <em>late risers</em> whenever there is an <em>early bird</em> in the group <img src='http://www.realdevelopers.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>So what about the option to add some female counterpart to the male part of the phrase to be more inclusive or to even point out mixed gender? We discussed <em>guys and girls</em> for our job announcement to make clear, that there are females among us. But the original meaning of <em>girl </em>is that of a female child &#8211; young, premature and dependent. Therefor it is not a proper equivalent to <em>guy</em>, rather the complement to <em>boy</em>, and many adult females don&#8217;t like to be called <em>girl</em>, at least not in a professional environment. The alternative being more similiar to <em>guy </em>in meaning could be <em>gal</em>, but that word is just as little a perfect match &#8211; some consider it sounding ugly (but does <em>guy</em> sound beautiful? &#8211; not really), it is not common in all english-speaking regions, it is considered old-fashioned in some parts of the world.</p>
<p>So we thought again about <em>girl</em>, because there seems to be a shift in its meaning recently. Starting with the riot <em>grrrl</em> movement in the 90s, third-wave feminism reclaimed the word. The derogatory use of the word <em>girl </em>was objected by removing the vowel and duplicating the <em>r</em>. That made-up word with the unspeakable growling sound said: You call us girls &#8211; yes, we might be girls, but not in the sense that you think of (well-behaved, handsome, neat) &#8211; here comes our own definition of girlishness. It was a loud and angry call for respect.</p>
<p>Apart from the fact that being called something and call oneself something are two different things, some say that the redefinition of the word has advanced so far, that being called a <em>girl</em> today and being a self-confident, respected, notable person isn&#8217;t an antagonism anymore. Another trend in our world is the prolongation of the youth up to the age of thirty-something. That also might be a reason, why the term <em>girl</em> nowadays seems to also include older females, which are young at heart. But seriously: Can you think of a wise, experienced woman with white hair, telling fascinationg stories about her rich life and would you still call her a <em>girl</em>? I doubt.</p>
<p>To finally come to the point after this excursion into linguistic history: In most cases pointing out gender differences is unnecessary and should be avoided. Mixed gender is best expressed by neutral wording. If the group we are talking to is named and described as exactly as necessary, but as general as possible, then for sure all girls, boys, guys, gals, women, men and everyone who doesn&#8217;t fit any of those schemes, but who feels involved in the description will be encouraged to read, listen, answer and apply. And needless to repeat, the term <em>guys</em> alone is a no-go, as it excludes people who might be our target audience, but at the same time it&#8217;s way too general.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/culture/guysngirls/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Is Grails (now) worth it?</title>
		<link>http://www.realdevelopers.com/blog/development/is-grails-now-worth-it</link>
		<comments>http://www.realdevelopers.com/blog/development/is-grails-now-worth-it#comments</comments>
		<pubDate>Wed, 21 Jul 2010 08:44:42 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[rapid development]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1272</guid>
		<description><![CDATA[This question was raised and discussed at stackoverflow recently. Having used Grails for the sixbee project I shared our experiences compared to standard J2EE application development, especially to the subquestion:
Does it really confer rapid development benefits?
Definitely, it does. Even if the scaffolding path is left early and conventions are overriden to the own needs, the [...]]]></description>
			<content:encoded><![CDATA[<p>This question was raised and discussed at <a href="http://stackoverflow.com/questions/2055396/is-grails-now-worth-it/3297486">stackoverflow</a> recently. Having used Grails for the sixbee project I shared our experiences compared to standard J2EE application development, especially to the subquestion:</p>
<p><b>Does it really confer rapid development benefits?</b></p>
<p>Definitely, it does. Even if the scaffolding path is left early and conventions are overriden to the own needs, the start-up period is very short, as we don&#8217;t have to care for many different technologies. That kind of lightweightness makes us work not only faster, but also more precise and clean.<span id="more-1272"></span></p>
<p>Writing tags was never easier &#8211; while with JSF we first deliberate about whether it&#8217;s worth the effort, with Grails we just do it. To work testdriven and to achieve a high coverage rate is also made quite easy, although the different test cases and mocking strategies are sometimes inconsistent and buggy.</p>
<p>Switching from Java to Groovy is a great pleasure, we loved to have list and map literals, closures, builders, to throw away our boiler plate &#8220;map&#8221; implementation in Java and to write compact, meaningful and focused code.</p>
<p>What slows down the development speed is the not so perfect IDE-support, which also holds true for the IntelliJ plugin, that we use. The bad, often old and even wrong documentation scattered over different places (foiling the promise &#8220;the search is over&#8221;) gets also in the way of rapid development. So we often had to fall back to source code reading &#8211; subsequently being scared by the underlying Spring class hierarchies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/development/is-grails-now-worth-it/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1:n &#8211; choose your working style</title>
		<link>http://www.realdevelopers.com/blog/culture/1n-choose-your-working-style</link>
		<comments>http://www.realdevelopers.com/blog/culture/1n-choose-your-working-style#comments</comments>
		<pubDate>Mon, 05 Jul 2010 17:52:06 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[equipment]]></category>
		<category><![CDATA[pairing]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1237</guid>
		<description><![CDATA[ 
Do you love to be surrounded by as much and good as possible technical equipment or do you prefer to sit in a group of at least three peers discussing a detail no matter how small the screen is? And what do you like about your favourite setting? In our team both work modes [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/07/choose_workingstyle_2g.png" alt="workstyle - one person : three screens" title="workstyle - one person : three screens" width="330" height="255" style="border: 1px solid black; margin-right: 10px;" /> <img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/07/choose_workingstyle_1g.png" alt="workstyle - one screen : three persons" title="workstyle - one screen : three persons" width="330" height="255" style="border: 1px solid black;" /></p>
<p>Do you love to be surrounded by as much and good as possible technical equipment or do you prefer to sit in a group of at least three peers discussing a detail no matter how small the screen is? And what do you like about your favourite setting? In our team both work modes coexist peacefully completing each other and also the happy medium (2:2) can be observed sometimes &#8211; and of course also the small screens are of high quality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/culture/1n-choose-your-working-style/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Groovy builders in Grails taglibs</title>
		<link>http://www.realdevelopers.com/blog/code/groovy-builders-in-grails-taglibs</link>
		<comments>http://www.realdevelopers.com/blog/code/groovy-builders-in-grails-taglibs#comments</comments>
		<pubDate>Sat, 19 Jun 2010 10:08:56 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[MarkupBuilder]]></category>
		<category><![CDATA[taglib]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=1187</guid>
		<description><![CDATA[Did you ever want to use builders in your grails taglib and wondered why the approach mentioned in the grails documentation doesn&#8217;t work at all? Here is what I found out after a lot of trial and error and digging in the MarkupBuilder, BuilderSupport and GroovyPagTagBody sources. Let&#8217;s stick with the example from the documentation [...]]]></description>
			<content:encoded><![CDATA[<p>Did you ever want to use builders in your grails taglib and wondered why the approach mentioned in the <a href="http://grails.org/Dynamic%20Tag%20Libraries#Markup%20building%20in%20tags">grails documentation</a> doesn&#8217;t work at all? Here is what I found out after a lot of trial and error and digging in the MarkupBuilder, BuilderSupport and GroovyPagTagBody sources. Let&#8217;s stick with the example from the documentation and correct it until it works (the impatient can scroll down):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> dialog = <span class="br0">&#123;</span> attrs, body -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> markup = <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new"><span class="kw2">new</span></a> groovy.<span class="me1">xml</span>.<span class="me1">MarkupBuilder</span><span class="br0">&#40;</span>out<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; markup <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; div<span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; body<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><span id="more-1187"></span></p>
<p>The first small remark is about line 3: <code>markup{//doSomething}</code> is similiar to <code>markup.call({//doSomething})</code>. BuilderSupport intercepts all method calls and MarkupBuilder produces xml tags from these method calls. So this will lead to an enclosing <code>&lt;call&gt;</code> tag. Surely not what we want.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> dialog = <span class="br0">&#123;</span> attrs, body -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> markup = <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new"><span class="kw2">new</span></a> groovy.<span class="me1">xml</span>.<span class="me1">MarkupBuilder</span><span class="br0">&#40;</span>out<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; markup.<span class="me1">div</span><span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; body<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Now let&#8217;s have a closer look at the body parameter. This is a GroovyPageTagBody, a special Closure which captures output using a special Writer (GroovyPageTageWriter). These bodies are usually called by various GroovyPage.invokeTag methods (see another following article on how to investigate groovy pages rendering) and return either a StreamCharBuffer (a special Writable and CharSequence) or the result of the closure evaluation, which is also Writable or a CharSequence if we are lucky.</p>
<p>So what is the right way to pass a CharSequence to the builder if we want our MarkupBuilder to use it as tag content? This will not work:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> markup = <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new"><span class="kw2">new</span></a> groovy.<span class="me1">xml</span>.<span class="me1">MarkupBuilder</span><span class="br0">&#40;</span>out<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">markup.<span class="me1">div</span><span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;some text&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The String will be evaluated, but as it&#8217;s not in a method call, our MarkupBuilder doesn&#8217;t know what to do with it. There are two possibilities to do it right:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> markup = <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new"><span class="kw2">new</span></a> groovy.<span class="me1">xml</span>.<span class="me1">MarkupBuilder</span><span class="br0">&#40;</span>out<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">markup.<span class="me1">div</span><span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span>, <span class="st0">&quot;some text&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">markup.<span class="me1">div</span><span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; mkp.<span class="me1">yield</span> <span class="st0">&quot;some text&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>If we now replace &#8220;some text&#8221; with our GroovyPageTagBody call, we are nearly done. But wait, there&#8217;s one more thing. mkp (short for <code>markup.getMkp()</code>) returns a MarkupBuilderHelper (since Groovy 1.6.6, prior it was the builder itself). Instead of <code>mkp.yield("some text")</code> we could also use the yield method of the MarkupBuilder itself: <code>yield("some text", true)</code>. But, hey, what means <code>true</code>? It&#8217;s the XML escaping of the text, which is also done if we pass the text as last parameter to the builder method (as in line 2 above). If we expect our body to contain markup, we should omit escaping. Of course there is also a helper method for that and our corrected example now finally looks right:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> dialog = <span class="br0">&#123;</span> attrs, body -&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span class="kw2">def</span></a> markup = <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20new"><span class="kw2">new</span></a> groovy.<span class="me1">xml</span>.<span class="me1">MarkupBuilder</span><span class="br0">&#40;</span>out<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; markup.<span class="me1">div</span><span class="br0">&#40;</span><span class="st0">&#8216;class&#8217;</span>: <span class="st0">&#8216;dialog&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; mkp.<span class="me1">yieldUnescaped</span> body<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>One last remark: Prior to Groovy 1.7.2 MarkupBuilderHelpers yield and yieldUnescaped methods were duplicated in MarkupBuilder itself, so the mkp prefix could be omitted. This is no longer true. You have to either fall back to the ugly boolean parameter or use the helpers pretty named methods.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/code/groovy-builders-in-grails-taglibs/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New colors: CMYK theme</title>
		<link>http://www.realdevelopers.com/blog/fun/new-colors-cmyk-theme</link>
		<comments>http://www.realdevelopers.com/blog/fun/new-colors-cmyk-theme#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:14:35 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[relaunch]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=949</guid>
		<description><![CDATA[About a month ago we relaunched this blog with fresh colors and a crispy new layout. On the left you can see a reminder to the old green and grey theme as it was before. Its seriousness and tediousness didn&#8217;t seem to perfectly match our attitude (allthough we are of course serious after all). Some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.realdevelopers.com/blog/wp-content/uploads/2010/03/screenshot.png"><img src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/03/screenshot.png" alt="" title="screenshot" width="300" height="225" class="alignleft size-full wp-image-1089" /></a>About a month ago we relaunched this blog with fresh colors and a crispy new layout. On the left you can see a reminder to the old green and grey theme as it was before. Its seriousness and tediousness didn&#8217;t seem to perfectly match our attitude (allthough we are of course serious after all). Some evenings of moving around pixels and poking around in php templates (enough is enough now) finally produced this colorful spring theme.<br />
Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/fun/new-colors-cmyk-theme/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tribute to Barbara Liskov, Kathy Sierra, Hedy Lamarr</title>
		<link>http://www.realdevelopers.com/blog/society/tribute-to-barbara-liskov-kathy-sierra-hedy-lamarr</link>
		<comments>http://www.realdevelopers.com/blog/society/tribute-to-barbara-liskov-kathy-sierra-hedy-lamarr#comments</comments>
		<pubDate>Wed, 24 Mar 2010 10:04:36 +0000</pubDate>
		<dc:creator>Helga</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Society]]></category>

		<guid isPermaLink="false">http://www.realdevelopers.com/blog/?p=978</guid>
		<description><![CDATA[Today is the 2nd Ada-Lovelace-Day, an &#8220;international day of blogging to celebrate the achievements of women in technology and science&#8221;. This initiative originating in the UK encourages people to write about tech women whom they admire, who impressed them and who are heroines to them. I also pledged myself to write something, because womens achievements [...]]]></description>
			<content:encoded><![CDATA[<p>Today is the 2nd <a href="http://findingada.com/about/">Ada-Lovelace-Day</a>, an &#8220;international day of blogging to celebrate the achievements of women in technology and science&#8221;. This initiative originating in the UK encourages people to write about tech women whom they admire, who impressed them and who are heroines to them. I also pledged myself to write something, because womens achievements are often overlooked, disregarded or even disrated and therefor its a duty to me to spread the word.</p>
<p>There are plenty of stories to tell, so it was not easy to choose which one to write about. There are for instance the girls I work with, who are inspiring, amusing and fun to work with every day. They earn my respect, but instead of glorifying my colleagues (you can meet them in this blog btw) I want to take my hat off to three of the great ladies out there, each one totally different from the other.<span id="more-978"></span></p>
<p><img class="alignleft size-full wp-image-1001" title="liskov" src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/03/liskov.jpg" alt="" width="144" height="120" /></p>
<h3>Barbara Liskov</h3>
<blockquote><p>Let q(x) be a property provable about objects x of type T. Then q(y)  should be true for objects y of type S where S  is a subtype of T.</p></blockquote>
<p style="clear: left; padding-top:10px; margin-bottom:20px; ">She&#8217;s the one who the Liskov-Substitution-Principle (LSP) was named after, because she formulated it together with Jeannette Wing. As I&#8217;m not an educated computer scientist, I had to do some homework and read about it (a <a href="http://www.objectmentor.com/resources/articles/lsp.pdf ">general introduction</a> and an article on <a href="http://blog.objectmentor.com/articles/2008/09/06/the-liskov-substitution-principle-for-duck-typed-languages">LSP and dynamic languages</a>)  Apart from LSP being one of the fundamentals of object orientated programming, Barbara Liskov worked on and published about data abstraction in general, developed CLU, an object orientated language, ARGUS, a distributed programming language and THOR, a distributed OO database system. She&#8217;s the institute professor of MIT&#8217;s Programming Methodology Group where she works since 1972, here current research topics are &#8211; guess what &#8211; distributed applications. For her work she received the Turing award and the Von-Neumann-Medal &#8211; a real heroine.</p</p>
<p><img class="alignleft size-full wp-image-1008" title="sierra" src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/03/sierra.jpg" alt="" width="145" height="120" /></p>
<h3>Kathy Sierra</h3>
<blockquote><p>And there you have it. I think &#8216;girl code&#8217; is quite a compliment. Because caring about things like beauty makes us better programmers and engineers. We make better things.</p></blockquote>
<p style="clear: left; padding-top:10px; margin-bottom:20px; ">Although she seems to be around for a decade now (founder of <a href="http://www.javaranch.com/">Java Ranch</a>, editor and author of the O&#8217;Reilly <a href="http://oreilly.com/headfirst/">Head First Series</a>), I stumbled about her amazing blog some weeks ago only. Its a pitty that she had to discontinue her activity due to death threads and now even closed her twitter stream. Nevertheless <a href="http://headrush.typepad.com/creating_passionate_users">&#8220;Creating passionate users&#8221;</a> is worth the lecture and allthough the articles are some years old, they come up with refreshing views on usability, are sometimes provoking and always fun to read and to watch. Just to point out one: <a href="http://headrush.typepad.com/creating_passionate_users/2006/03/code_like_a_gir.html ">Code like a girl</a> talks about clean code and the aesthetics of source code and turns the prejudice about girls caring more about beauty then boys from a negative to a positive connotation. If you call cool things &#8220;girl things&#8221; it doesn&#8217;t make that things bad, no &#8211; on the contrary it makes the girls cool. Other articles are called &#8220;T-shirt-first-developement&#8221; and &#8220;Featuritis vs. the Happy User Peak&#8221;, but you should go and discover them yourself.</p>
<p><img class="alignleft size-full wp-image-1011" title="lamarr" src="http://www.realdevelopers.com/blog/wp-content/uploads/2010/03/lamarr.jpg" alt="" width="144" height="120" /></p>
<h3>Hedy Lamarr</h3>
<blockquote><p>Any girl can be glamorous. All you have to do is stand still and look stupid.</p></blockquote>
<p style="clear: left; padding-top:10px; margin-bottom:20px; ">Hedwig Eva Maria Kiesler, after leaving Vienna and her first husband, an arms producer, during world war II, changed her name and became a glamourous Hollywood actress. She was admired for her beauty, which as she experienced at least in Hollywood doesn&#8217;t go very well with being noted as intelligent. Thats one of the reasons why it took a long time, until her invention was notified, appriciated and honoured (she received the EFF pioneer award in 1997). Together with George Antheil, anvantgarde composer and her neighbour, she invented a &#8220;Secret Communications System&#8221; based on piano rolls (patented in 1942), an early form of frequency hopping, which is a technique of switching the frequency for communication on the transmitter and receiver side simultanously. Similar methods are the base of our todays mobile communication systems.</p>
<p>Photos credits:<br />
Mirko Raner (Barbara Liskov),  James Duncan Davidson (Kathy Sierra), Movie trailer screenshot (Hedy Lamarr)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.realdevelopers.com/blog/society/tribute-to-barbara-liskov-kathy-sierra-hedy-lamarr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

