<?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/"
	>

<channel>
	<title>byte bohemian</title>
	<atom:link href="http://nicl.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://nicl.net</link>
	<description></description>
	<pubDate>Mon, 01 Jun 2009 20:36:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Making it lean</title>
		<link>http://nicl.net/2009/06/making-it-lean/</link>
		<comments>http://nicl.net/2009/06/making-it-lean/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 20:35:10 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Agile software development]]></category>

		<category><![CDATA[Lean software development]]></category>

		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://nicl.net/?p=37</guid>
		<description><![CDATA[Programming is the most known part of software engineering to non software types. A couple of years ago I improved my skills in programming with the hope to improve my software engineering skills. But it took not very long for me to realize, that it takes a lot more to be successful in software engineering.
It&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Programming is the most known part of software engineering to non software types. A couple of years ago I improved my skills in programming with the hope to improve my software engineering skills. But it took not very long for me to realize, that it takes a lot more to be successful in software engineering.</p>
<p>It&#8217;s quite sad, but if you are honest even with your source code quality is far below average the project may be a success by the given business goals. On the other hand side your source code may be excellent, your code metrics are outstanding and your architecture is state of the art but you are missing the needs of your stakeholders by miles.<span id="more-37"></span>Programming is the most known part of software engineering to non software types. A couple of years ago I improved my skills in programming with the hope to improve my software engineering skills. But it took not very long for me to realize, that it takes a lot more to be successful in software engineering.</p>
<p>This is quite sad to say, but if you are honest: Even with your source code quality is far below average the project may be a success by the given business goals. On the other hand side your source code may be excellent, your code metrics are outstanding and your architecture is state of the art but you are missing the needs of your stakeholders by miles.</p>
<p>Realizing this made me a kind of sad, because learning to be a good programmer is task you can achieve by practicing. But learning how to e a good software engineer is a lot more difficult. It&#8217;s about communication, understanding the needs of your stakeholders, making good decisions, being flexible and able to incorporating short-term requirements.</p>
<p>In the last years I was able to learn some important lessons, which I believe, made me a better software engineer. Working on some medium to large sized software development projects from 2001 to 2009 I learned what is important and works fine but I also had the chance to make some quite big mistakes. </p>
<p>During the last years I read a couple of books about different software development approaches. Starring the classics from <a href="http://www.systemsguild.com/GuildSite/TDM/Tom_DeMarco.html">Tom DeMarco</a> (e.g. <a href="http://www.amazon.com/Deadline-Novel-About-Project-Management/dp/0932633390/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1243886478&#038;sr=8-1">The Deadline</a>) which are quite excellent. My problem with the DeMarco/Lister books is, that they soon start to repeat them self.</p>
<p>The next great books where from the extreme programming (e.g. from <a href="http://www.amazon.com/Extreme-Programming-Kent-Beck/dp/3827321395/ref=sr_1_9?ie=UTF8&#038;s=books&#038;qid=1243886608&#038;sr=1-9">Kent Beck</a>) and agile development guys. I love this concepts. They are great! I guess anyone dealing with waterfall style processes and monster MS Project plans will agree.</p>
<p>One of the highlights of the last year where the books of <a href="http://www.poppendieck.com/">Mary</a> and <a href="http://www.poppendieck.com/">Tom Poppendiek</a>:</p>
<ul>
<li><a href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1243886158&#038;sr=8-2">Lean Software Development: An Agile Toolkit&#8221;</a></li>
<li><a href="http://www.amazon.com/Implementing-Lean-Software-Development-Addison-Wesley/dp/0321437381/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1243883659&#038;sr=8-1">Implementing Lean Software Development: From Concept to Cash</a></li>
</ul>
<p>The <a href="http://www.poppendieck.com/">Poppendieks</a> are bearing some resemblance between agile software development and lean production methods and offering some very easy to understand principles.  I am quite curious and exited how I will be able to incorporate this principles to my daily work and our organization at <a href="http://www-de.scoyo.com">scoyo</a>.</p>
<p>One thing I learned the hard way. No software development process will work, if your organization is not willing to accept the consequences.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/06/making-it-lean/feed/</wfw:commentRss>
		</item>
		<item>
		<title>jaev 1.0 released</title>
		<link>http://nicl.net/2009/05/jaev-10-released/</link>
		<comments>http://nicl.net/2009/05/jaev-10-released/#comments</comments>
		<pubDate>Sat, 30 May 2009 10:31:11 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Adobe Flex]]></category>

		<category><![CDATA[JSF]]></category>

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

		<category><![CDATA[Tapestry]]></category>

		<category><![CDATA[jaev]]></category>

		<guid isPermaLink="false">http://87.106.3.237/?p=35</guid>
		<description><![CDATA[After some weeks the third release candidate of the jaev was the final one yesterday.
The jaev framework is in productional use at least one installation and no major problems where filed so far. I&#8217;m keeping my fingers crossed 
I am working already on some new features:

Caching negative responses of mail serversWhen a mail server refuses [...]]]></description>
			<content:encoded><![CDATA[<p>After some weeks the third release candidate of the <a href="http://code.google.com/p/jaev/">jaev</a> was the final one yesterday.</p>
<p>The <a href="http://code.google.com/p/jaev/">jaev</a> framework is in productional use at least one installation and no major problems where filed so far. I&#8217;m keeping my fingers crossed <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
I am working already on some new features:</p>
<ul>
<li>Caching negative responses of mail servers<br />When a mail server refuses communication due to suspected spam, the result will be cached to reduce network traffic.</li>
<li>Suggest e-mail addresses<br />When the validation fails suggest a list e-mail addresses. This algorithm may use the previous request and a default list of domains to compute some suggestions.</li>
</ul>
<p>If you have any good ideas, file them on the <a href="http://code.google.com/p/jaev/issues/list">issue tracking system</a> or the <a href="http://groups.google.com/group/jaev-users/topics">google group</a>.</p>
<p>Maybe I am applying for a <a href="http://wave.google.com">google wave</a> developer sandbox access to provide a <a href="http://wave.google.com">google wave</a> robot for online e-mail suggestion. Bah, that sounds like some work <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/05/jaev-10-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Maven and Flex hoodoo</title>
		<link>http://nicl.net/2009/05/maven-and-flex-hoodoo/</link>
		<comments>http://nicl.net/2009/05/maven-and-flex-hoodoo/#comments</comments>
		<pubDate>Fri, 15 May 2009 16:11:56 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Adobe Flash]]></category>

		<category><![CDATA[Adobe Flex]]></category>

		<category><![CDATA[Flex-mojo]]></category>

		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://87.106.3.237/?p=33</guid>
		<description><![CDATA[
The last time when I blogged about the Flex mojos I was still quite frustrated and thought I had a better solution. Now some time passed and on April the 3rd the new version (3.1) of the flex mojos was released and me and some of my colleges made some interesting discoveries.


The last time when [...]]]></description>
			<content:encoded><![CDATA[<p>
The last time <a href="/2009/03/mavenizing-a-flex-build/">when I blogged about the Flex mojos</a> I was still quite frustrated and thought I had a better solution. Now some time passed and on April the 3rd the <a href="http://flex-mojos.info/2009/04/03/ann-flexmojos-31-released/">new version (3.1) of the flex mojos was released</a> and me and some of my colleges made some interesting discoveries.</p>
<p><span id="more-33"></span>
<p>
The last time <a href="/2009/03/mavenizing-a-flex-build/">when I blogged about the Flex mojos</a> I was still quite frustrated and thought I had a better solution. Now some time passed and on April the 3rd the <a href="http://flex-mojos.info/2009/04/03/ann-flexmojos-31-released/">new version (3.1) of the flex mojos was released</a> and me and some of my colleges made some interesting discoveries.</p>
<p>
Well, but in the last few weeks I often thought about the meaning and the source of the word mojo. Lets take a closer look at <a href="http://en.wikipedia.org/wiki/Mojo_(African_American_culture)">wikipedia.</a></p>
<blockquote cite="http://de.selfhtml.org/">
<p>
Mojo (pronounced /ˈmoʊdʒoʊ/) is a term commonly encountered in the African-American folk belief called hoodoo. A mojo is a type of magic charm, often of red flannel cloth and tied with a drawstring, containing botanical, zoological, and/or mineral curios, petition papers, and the like. It is typically worn under clothing.</p>
</blockquote>
<p>Okay, hoodoo! That explains quite a lot. Sometimes maven and the flex-mojos are a kind of magic.
</p>
<p>
But let&#8217;s get back on topic <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> The boys from the Flex mojos where quite busy and created with the 3.x release very usable platform for flex builds in the maven world. It took us (mainly a <a href="http://www.peter-jacobsen.de/">freelance colleague</a>) two more weeks to adapt our build process form various ant scripts into a multi-module maven2 build. But now it looks quite nice, the build is even faster and we were able to fix a problem with our Flex Builder configuration.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/05/maven-and-flex-hoodoo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Frist TV spot for scoyo</title>
		<link>http://nicl.net/2009/05/frist-tv-spot-for-scoyo/</link>
		<comments>http://nicl.net/2009/05/frist-tv-spot-for-scoyo/#comments</comments>
		<pubDate>Fri, 15 May 2009 15:35:56 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://87.106.3.237/?p=29</guid>
		<description><![CDATA[My new employer has created his first TV spot. It addresses the target audience quite aggressively, but I guess it&#8217;s all right. The german culture lacks the will to pay for education at all.
Due to my position as head of client development I am very curios about the performance of our website when TV broadcasting [...]]]></description>
			<content:encoded><![CDATA[<p>My new <a href="http://www.scoyo.de">employer</a> has created his first TV spot. It addresses the target audience quite aggressively, but I guess it&#8217;s all right. The german culture lacks the will to pay for education at all.</p>
<p>Due to my position as head of client development I am very curios about the performance of our website when TV broadcasting starts. We have lots of good people in the operations and software development team but we never tested our system in peak usage scenarios. I&#8217;ll guess you can&#8217;t simulate the load generated by TV broadcast anyway. This reminds me on the 30th of may 2005, when we launched the <a href="http://www.simyo.de">simyo Website</a> with prime time TV spots. Damn, I was nervous. And I really was relieved when called your customer to tell that the website was fine (gimme more!) and they already sold over 1,000 units. A highlight on their release party, which I missed. But I was a scary chicken that day and didn&#8217;t want to travel half around Germany while nobody takes care about a brand new website <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So, this is the scoyo TV spot:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/VeKsjAejAzc&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=de&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/VeKsjAejAzc&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=de&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>I&#8217;ll keep my fingers crossed when the first TV spot goes over the air &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/05/frist-tv-spot-for-scoyo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Waiting on the bank of river Elbe</title>
		<link>http://nicl.net/2009/05/waiting-on-the-bank-of-river-elbe/</link>
		<comments>http://nicl.net/2009/05/waiting-on-the-bank-of-river-elbe/#comments</comments>
		<pubDate>Sat, 09 May 2009 15:33:09 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Privat]]></category>

		<guid isPermaLink="false">http://87.106.3.237/?p=27</guid>
		<description><![CDATA[This weekend (8.-10. May) is Hafengeburtstag in my home town of Hamburg. This fair is celebrated every year. This year the Patrouille Suisse air acrobatic team from the swiss air force show their skills. This weekend (8.-10. May) is Hafengeburtstag in my home town of Hamburg. This fair is celebrated every year. This year the [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend (8.-10. May) is <a href="http://www.hamburg-hafengeburtstag.de">Hafengeburtstag</a> in my home town of Hamburg. This fair is celebrated every year. This year the <a href="http://www.lw.admin.ch/internet/luftwaffe/de/home/verbaende/einsatz_lw/kunstflugteam/ps.html">Patrouille Suisse</a> air acrobatic team from the swiss air force show their skills. <span id="more-27"></span>This weekend (8.-10. May) is <a href="http://www.hamburg-hafengeburtstag.de">Hafengeburtstag</a> in my home town of Hamburg. This fair is celebrated every year. This year the <a href="http://www.lw.admin.ch/internet/luftwaffe/de/home/verbaende/einsatz_lw/kunstflugteam/ps.html">Patrouille Suisse</a> air acrobatic team from the swiss air force show their skills. </p>
<p>After I heard the F-5 fighter jets yesterday twice in the city I decided to got to the banks of the Elbe to see, if I can fetch a look. It was a sunny day, so I was in no hurry. But after 45 minutes waiting I decided to leave, without spotting the planes. On the <a href="http://www1.ndr.de/nachrichten/hamburg/fliegerstaffel100.html">news</a> I discovered that the plan was stripped-down due to some complaints. Maybe tomorrow I&#8217;ll have some luck <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
But the time was not wasted at all. I took some <a href="http://picasaweb.google.com/niclas.meier/Hafengeburtstag2009">pictures of boats</a> sailing to the <a href="http://maps.google.de/maps?f=q&#038;source=s_q&#038;hl=de&#038;geocode=&#038;q=st.+pauli+landungsbr%C3%BCcken&#038;sll=53.743624,9.698966&#038;sspn=0.011015,0.021629&#038;ie=UTF8&#038;ll=53.552751,10.016613&#038;spn=0.08852,0.173035&#038;t=h&#038;z=13&#038;iwloc=B>&#8220;>St. Pauli Landungsbrücken</a>. Some guys deployed their mobile DJ station also, so I enjoyed some chilly electro beats too.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/05/waiting-on-the-bank-of-river-elbe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New technical Infrastructure and design</title>
		<link>http://nicl.net/2009/03/new-technical-infrastructure-and-design/</link>
		<comments>http://nicl.net/2009/03/new-technical-infrastructure-and-design/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 21:00:13 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://87.106.3.237/?p=25</guid>
		<description><![CDATA[I used the weekend and moved the blog onto a new technical infrastructure. The blog system is still Wordpress, but a more recent version. This enabled the switch to a more decent theme, which is now fusion by digital&#124;nature. This is a good start for further customization I guess.
]]></description>
			<content:encoded><![CDATA[<p>I used the weekend and moved the blog onto a new technical infrastructure. The blog system is still <a href="http://wordpress.org/">Wordpress</a>, but a more recent version. This enabled the switch to a more decent theme, which is now <a href="http://digitalnature.ro/projects/fusion/">fusion by digital|nature</a>. This is a good start for further customization I guess.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/03/new-technical-infrastructure-and-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mavenizing a Flex build</title>
		<link>http://nicl.net/2009/03/mavenizing-a-flex-build/</link>
		<comments>http://nicl.net/2009/03/mavenizing-a-flex-build/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 12:54:51 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Adobe Flash]]></category>

		<category><![CDATA[Adobe Flex]]></category>

		<category><![CDATA[Flex-mojo]]></category>

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

		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://nicl.net/2009/03/21/mavenizing-a-flex-build/</guid>
		<description><![CDATA[In the last week the release 1.0 platform release of scoyo came close and we were tying up some loose ends. One of these ends was the integration of the scoyo Flash/Flex portal build process  into the platform build process.
The platform build process is realized with Apache Maven, which is, in humble my opinion, [...]]]></description>
			<content:encoded><![CDATA[<p>In the last week the release 1.0 platform release of <a href"http://www.scoyo.de">scoyo</a> came close and we were tying up some loose ends. One of these ends was the integration of the scoyo Flash/Flex portal build process  into the platform build process.</p>
<p>The platform build process is realized with <a href="http://maven.apache.org">Apache Maven</a>, which is, in humble my opinion, still the first choice for <a href="http://java.sun.com">Java</a> based software projects, but integrating other project types into maven is a kind of challenging due to the nature of Maven. You may summarize this in: If you do it the maven way it&#8217;s very easy, if you don&#8217;t it is up to you &#8230;</p>
<p>Luckily there was already an existing build with <a href="http://ant.apache.org">Ant</a> and a dysfunctional Maven variant with the Maven <a href="http://code.google.com/p/flex-mojos/">Flex-mojos</a> plugin. So it stated  my journey to insanity an back &#8230;<br />
<span id="more-22"></span><br />
In the last week the release 1.0 platform release of <a href"http://www.scoyo.de">scoyo</a> came close and we were tying up some loose ends. One of these ends was the integration of the scoyo Flash/Flex portal build process  into the platform build process.</p>
<p>The platform build process is realized with <a href="http://maven.apache.org">Apache Maven</a>, which is, in humble my opinion, still the first choice for <a href="http://java.sun.com">Java</a> based software projects, but integrating other project types into maven is a kind of challenging due to the nature of Maven. You may summarize this in: If you do it the maven way it&#8217;s very easy, if you don&#8217;t it is up to you &#8230;</p>
<p>Luckily there was already an existing build with <a href="http://ant.apache.org">Ant</a> and a dysfunctional Maven variant with the Maven <a href="http://code.google.com/p/flex-mojos/">Flex-mojos</a> plugin. So it stated  my journey to insanity an back.</p>
<p>My first attempts started  with reactivating the Flex-mojos maven build. I already had some experience with Flex-mojos when preparing the build for the <a href="http://jaev.googlecode.com">jaev</a> Flex example. This example Project for the <a href="http://jaev.googlecode.com">jaev</a> framework also uses the Flex-mojos maven plugin to create the example <code>.swf</code> and uses the infrastructure of maven to assemble the web application with the HTML and the <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/">BlazeDS</a> services. Took me some time and a quite nice <a href="http://sebastien-arbogast.com/2008/04/10/flex-spring-and-blazeds-the-full-stack/">tutorial</a> from <a href="http://sebastien-arbogast.com/">Sébastien Arbogast</a> but finally it worked!</p>
<p>So I thought I was prepared for the task and nothing could stop me. There is no law against being wrong, at least in Germany <code> <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </code>.</p>
<p>The main problems was finding all the required libraries in various maven repositories. Additionally there were some foul libraries. Some yahoo uploaded HTML files as <code>.pom</code> and <code>.jar</code> file in a repository. It took me quite a moment to realize this. Unfortunately the current <a href="http://www.adobe.com/products/flex/flexdownloads/">Flex SDK 3.3</a> was not available at all in any maven repository. At least I did not find any.</p>
<p>So after wasting some hours I changed the strategy: My new Idea was to call the Flex <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html">Ant tasks</a> provided by <a href="http://www.adobe.com">Adobe</a> from the maven build using the <a href="http://maven.apache.org/plugins/maven-antrun-plugin/">maven-antrun-plugin</a>. The antrun-plugin is quite nice if you have to perform some tasks not covered by maven. So you can execute some <a href="http://ant.apache.org">Ant</a><a> tasks to enrich your build.</p>
<p>But things where going to be worse. A couple of very &#8220;unsatisfying&#8221; hours later I discovered a bug or incompatibility of the maven </a><a href="http://maven.apache.org/plugins/maven-antrun-plugin/">maven-antrun-plugin</a> and the Adobe <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html">Ant tasks</a>. So it was time to rethink my strategy again. Should I switch back to the Flex-mojo approach? I went for a minor adjustment first: Instead of using the the <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html">Ant tasks</a> I went for the compilers (<code>mxmlc</code> for Flex applications and <code>compc</code> for Flex libraries) directly. Calling them with the Ant <a href="http://ant.apache.org/manual/CoreTasks/exec.html"><code>&lt;exec /&gt;</code></a> task, which executes a command on the command line. Then use the <a href="http://maven.apache.org/plugins/maven-assembly-plugin/">maven-assembly-plugin</a> to create a ZIP file of the compiled artifact and install/deploy it into the repository.</p>
<p>Let&#8217;s sum this up:
<ol>
<li>start JVM and execute maven</li>
<li>execute the maven-antrun-plugin to execute ant tasks</li>
<li>use some Ant tasks to assemble the Flex build path (external and included libraries)</li>
<li>use the Ant <code>&lt;exec /&gt;</code> task to execute the flex compiler (let&#8217;s share a secret: The Flex compilers are written in Java. Welcome back home <code> <img src='http://nicl.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </code>)</li>
<li>use the maven-assembly-plugin</li>
<p> to create a ZIP file</p>
<li>install the ZIP file into the local repository</li>
<li>(optionally deploy the artifact into a remote repository)</li>
</ol>
<p>That does not sound like a simple build process. And let me amend something: If you a using shared libraries in the build (yepp we have a couple of them) you may add another step before invoking the maven-antrun plugin. You&#8217;ll have to use the maven dependency plugin to copy and uncompress the libraries from the local (remote) repository to your build environment, so they can be accessed/found by the build. You&#8217;ll imagine I was not satisfied at all with this build variant &#8230;</p>
<p>Again my old friend came along, the question:&#8221;What to do?&#8221;</p>
<p>The Flex-mojo approach obliged my to upload the whole Flex SDK into our local <a href="http://archiva.apache.org/">archiva</a> installation which hosts out company maven repository. This includes the minimum 54 libraries supplied by the Flex SDK. Okay most of them are quite common, but when a new Flex SDK is released (which happens on a quite regular basis) you&#8217;ll have to recheck all dependencies. No thanks &#8230;<br />
The maven/Ant/Flex compiler variant emerged as juggernaut with bad performance and a loads of catches. No improvement at all &#8230;</p>
<p>So I decided to take a closer look at the Flex-mojo plugin itself. Why do I need to have all this dependencies? The major advantages to the Flex-mojo plugin are the special packaging types <code>swf</code> and <code>swc</code> for Flash movies and libraries. Using this packaging types maven will use a special life cycle and offer the possibility to install/deploy the artifacts directly into the repository. To my relief only a <a href="http://svn.sonatype.org/flexmojos/trunk/flexmojos-maven-plugin/src/main/resources/META-INF/plexus/components.xml">quite simple XML file</a> (a plexus component definition) was necessary to achieve this.</p>
<p>So desperate as I was, I decided to write a maven plugin on my own. I must confess it was not my first time. I already wrote a simple maven plugin for the <a href="http://www.sinnerschrader.de">SinnerSchrader commerce framework</a>, a library developed by my former employer. I really do not like to reinvent software on my own. But I was curious and I want to give it a shot. My goal was to combine the two approaches I tried before and use the best of both. So the plugin should be able to manage the <code>swc</code> dependencies, the flex compiler configuration (via <code>-load-config</code>) and the direct deployment of <code>swc</code> and <code>swf</code> artifacts.</p>
<p>The approach was simple:
<ol>
<li>check the maven dependencies for libraries to reference or to include</li>
<li>check for a configured compiler configuration</li>
<li>create the compiler command line and all options like <code>-load-config</code>, <code>-compile.debug</code>, <code>-compiler.include-libraries</code> or <code>-compiler.external-library-path</code>, etc. </li>
<li>invoke the compiler via the<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ProcessBuilder.html"><code>java.lang.ProcessBuilder</code></a></li>
<li>install the artifact into the local repository</li>
</ol>
<p>It took me not an hour to build a working proof of concept and only approx. four more hours to mavenize almost the entire build. This was really fun after two days of trying and failing. There are still some minor adjustments to make on monday, but I am really looking forward to finish the build. And if all works out as I want, there might be a 15-20% speed improvements for a complete build. But this also reduces the necessity to perform complete builds, because some shared libraries are rarely changing at all, so we can deploy them into our company maven repository.</p>
<p>As I went to bed last night, I was wondering why the Flex-mojo approach failed and the home-grown maven plugin approach succeeded. Under the shower this morning it was quite obvious to me. The Flex-mojo plugin stores the whole Flex SDK in maven repositories, so you don&#8217;t even have to download the Flex SDK to compile your Flex application. My home-grown plugin needs the Flex SDK installed on the build computer and the <code>FLEX_HOME</code> environment variable set. But that is okay, because the <a href="http://maven.apache.org/plugins/maven-compiler-plugin/">maven-compiler-plugin</a> does the same. It does not work without the <code>JAVA_HOME</code> set and it does not try to deploy the Java SDK into maven repositories. Maybe the Flex-mojo guys will also realize the difference. It seems to be a quite nice piece of software but with too much unnecessary complexity and very &#8220;clustered&#8221; documentation.</p>
<p>After tying up this loose end me and a very experienced Flex development colleague already discovered some further TODOs relating to the maven and <a href="http://www.adobe.com/products/flex/features/flex_builder">Flex Builder</a> integration. There is still lots of work to do, so I am exited. My <a href="http://www.scoyo.de">new job</a> is different as I expected but a am very confident that it will offer some exiting further challenges for me &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/03/mavenizing-a-flex-build/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting closer to 1.0</title>
		<link>http://nicl.net/2009/03/getting-closer-to-10/</link>
		<comments>http://nicl.net/2009/03/getting-closer-to-10/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 18:00:33 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Tapestry]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<category><![CDATA[jaev]]></category>

		<guid isPermaLink="false">http://nicl.net/2009/03/14/getting-closer-to-10/</guid>
		<description><![CDATA[This afternoon I spend some time to take the jaev Framework closer to the 1.0 final release.

This afternoon I spend some time to take the jaev Framework closer to the 1.0 final release.
The second release candidate was built this afternoon. It contains some fixes and some improvements suggested by PMD and Findbugs. Another major focus [...]]]></description>
			<content:encoded><![CDATA[<p>This afternoon I spend some time to take the <a href="http://jaev.googlecode.com">jaev</a> Framework closer to the 1.0 final release.<br />
<span id="more-21"></span><br />
This afternoon I spend some time to take the <a href="http://jaev.googlecode.com">jaev</a> Framework closer to the 1.0 final release.</p>
<p>The second release candidate was built this afternoon. It contains some fixes and some improvements suggested by <a href="http://pmd.sourceforge.net/">PMD</a> and <a href="http://findbugs.sourceforge.net">Findbugs</a>. Another major focus was to improve the performance of <a href="http://jaev.googlecode.com">jaev</a>. This was achieved in reducing the number DNS lookups by introducing a cache for DNS MX record resolution.</p>
<p>This may lead to another nifty feature in the next release candidate, final or 1.1 release. I am planning to introduce a domain suggest function. This may be achieved by using a fix/initial suggestion list and the queries against the DNS lookup cache. If everything works out well the i.e. the Tapestry 5 example may offer a suggest function for e-mail addresses.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/03/getting-closer-to-10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rethinking logging</title>
		<link>http://nicl.net/2009/02/18/</link>
		<comments>http://nicl.net/2009/02/18/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 14:31:04 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://nicl.net/2009/02/15/18/</guid>
		<description><![CDATA[Recently I discovered something new about a thing I am using on an every day basis like most of the software engineers. It&#8217;s about logging. You may ask: &#8220;What is so exiting about logging?&#8221;
In my opinion logging is one of the underestimated aspects of software development. Everyone uses it, but only very few are using [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I discovered something new about a thing I am using on an every day basis like most of the software engineers. It&#8217;s about logging. You may ask: &#8220;What is so exiting about logging?&#8221;<br />
In my opinion logging is one of the underestimated aspects of software development. Everyone uses it, but only very few are using it right.<br />
Logging is the bridge between the development phase and the operational phase in the software life cycle. If you do it right it may provide valuable informations about the inner workings of an application.</p>
<p>I&#8217;am using <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> for quite a while. I am not sure when the framework was created by <a href="http://ceki.blogspot.com/">Ceki Gülcü</a>, but log4j was the straight edge for java logging in the recent years. Unfortunately it became very quite around the log4j project recently.</p>
<p><span id="more-20"></span></p>
<p>Recently I discovered something new about a thing I am using on an every day basis like most of the software engineers. It&#8217;s about logging. You may ask: &#8220;What is so exiting about logging?&#8221;<br />
In my opinion logging is one of the underestimated aspects of software development. Everyone uses it, but only very few are using it right.<br />
Logging is the bridge between the development phase and the operational phase in the software life cycle. If you do it right it may provide valuable informations about the inner workings of an application.</p>
<p>I&#8217;am using <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> for quite a while. I am not sure when the framework was created by <a href="http://ceki.blogspot.com/">Ceki Gülcü</a>, but log4j was the straight edge for java logging for the recent years. Unfortunately it became very quite around the log4j project recently.</p>
<p>In <a href="http://jaev.googlecode.com/">my new open source project</a> I broke some new grounds. It started with the <a href="http://www.slf4j.org/">simple logging for java (slf4j)</a>, which I used for logging. The motivation was clear, I wanted to get rid of a dedicated logger implementation and offer the possibility to integrate the output of <a href="http://jaev.googlecode.com">jaev</a> logging into the application log files (streams).<br />
The <a href="http://www.slf4j.org">sl4j</a> is not the first &#8220;meta&#8221; logging library. The <a href="http://commons.apache.org/logging/">commons logging</a> framework was one of the first of these frameworks. At least it&#8217;s the one I came across most. The <a href="http://www.slf4j.org">sl4j</a> framework is quite new. It offers a similar functionality like the <a href="http://commons.apache.org/logging/">commons logging</a> framework, but <a href="http://www.slf4j.org/">slf4j</a> uses a static binding against the executing logging framework. It also supports various logger implementations and offers bridges from i.e. the JUL (java.util.logging) logging into the <a href="http://www.slf4j.org">sl4j</a> world. So you can integrate all logging informations in the <a href="http://www.slf4j.org">sl4j</a> infrastructure.</p>
<p>This is quite handy if you are combining frameworks which rely on a specific logger implementation (i.e. <a href="https://facelets.dev.java.net/">facelets</a> which relies on JUL). When you use the JUL to slf4j bridge you may merge all logging streams and handle the events on you logger implementations. The <a href="http://www.slf4j.org/">slf4j</a> framework by the way was created by <a href="http://ceki.blogspot.com/">Ceki Gülcü</a>.</p>
<p>One other word to the logger implementation. Durning my first steps with <a href="http://www.slf4j.org/">slf4j</a> I used the <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> implementation. Which works pretty well. But in last weeks I stumbled about the <a href="http://logback.qos.ch/">logback</a> project, an offspring of <a href="http://ceki.blogspot.com/">Ceki Gülcü</a> too. The <a href="http://logback.qos.ch/">logback</a> project is a native implementation of the <a href="http://www.slf4j.org/">slf4j</a> API and it offers a state of the art logger implementation. If you are using <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> you feel familiar in no time. But it also offers quite some interesting new features and continues the evolution which stalled at the <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> project for quite some years. Here are some highlights:</p>
<ul>
<li>Configuration fully in XML via <code>logback.xml</code> and read automatically on logging initialisation.</li>
<li>Different configuration files for productive and test environment (<code>logback.xml</code> and <code>logback-test.xml</code>).</li>
<li>Configuration via JMX possible.</li>
<li>Quite handy reduction of the logger name length.</li>
<li>Provides position informations of the caller (class, line, method).</li>
<li>Shortened stack traces of exceptions</li>
</ul>
<p>It took not very long to convince me to switch my logging implementation from <a href="http://logging.apache.org/log4j/1.2/index.html">log4j</a> to <a href="http://logback.qos.ch/">logback</a> for the <a href="http://jaev.googlecode.com/">jaev</a> project.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/02/18/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The name is jaev &#8230;</title>
		<link>http://nicl.net/2009/02/the-name-is-jaev/</link>
		<comments>http://nicl.net/2009/02/the-name-is-jaev/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 21:52:38 +0000</pubDate>
		<dc:creator>niclas</dc:creator>
		
		<category><![CDATA[Adobe Flex]]></category>

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

		<category><![CDATA[Tapestry]]></category>

		<category><![CDATA[jaev]]></category>

		<guid isPermaLink="false">http://nicl.net/2009/02/09/the-name-is-jaev/</guid>
		<description><![CDATA[The name of who/what is jaev? The jaev framework is my first open source project! Jepp, I joined the community and giving something back after years of using the frameworks of other people.
What does jaev do? The name jaev is the abbreviation for java (advanced) email validation. So the framework does validate e-mails. Sounds quite [...]]]></description>
			<content:encoded><![CDATA[<p>The name of who/what is jaev? The jaev framework is my first open source project! Jepp, I joined the community and giving something back after years of using the frameworks of other people.</p>
<p>What does jaev do? The name jaev is the abbreviation for <i>ja</i>va (<i>a</i>dvanced) <i>e</i>mail <i>v</i>alidation. So the framework does validate e-mails. Sounds quite boring, isn&#8217;t it? Of course not!<br />
<span id="more-19"></span><br />
The name of who/what is <a href="http://code.google.com/p/jaev/">jaev</a>? The <a href="http://code.google.com/p/jaev/">jaev framework</a> is my first open source project! Jepp, I joined the community and giving something back after years of using the frameworks of other people.</p>
<p>What does jaev do? The name <a href="http://code.google.com/p/jaev/">jaev</a> is the abbreviation for <i>ja</i>va (<i>a</i>dvanced) <i>e</i>mail <i>v</i>alidation. So the framework does validate e-mails. Sounds quite boring, isn&#8217;t it? Of course not! There are some quite good tools for e-mail validation like the one in the <a href="http://commons.apache.org/validator/">Apache commons validator</a> project (I <i>&#8220;borrowed&#8221;</i> some test cases there). But the e-mail validation in java was quite shallow. If you want to have a more advanced validation, i.e. of the domain, you&#8217;ll had to do it yourself. The <a href="http://code.google.com/p/jaev/">jaev framework</a> tries to fill this gap.</p>
<p>It provides facilities to validate the syntax of an e-mail address with including addresses with names like <code>Niclas Meier &lt;niclas.meier@example.com&gt;</code>  (I confess the handling of comments in e-mail addresses has still some flaws, but it&#8217;s not so important I guess). This is obligatory but the <a href="http://code.google.com/p/jaev/">jaev framework</a> offers quite more.</p>
<p>With the <a href="http://code.google.com/p/jaev/">jaev framework</a> you&#8217;ll may check the domain of the e-mail address. The framework uses a local (or server) copy of the IANA top level domain database (<a href="http://data.iana.org/TLD/tlds-alpha-by-domain.txt">http://data.iana.org/TLD/tlds-alpha-by-domain.txt</a>) to validate the top level domain. If the top level domain is okay  the DNS database will be queries if the domain exists and has <code>MX</code> entries. If a domain has no <code>MX</code> entries you&#8217;ll have to assume that you will could not relay an e-mail message to the e-mail address. The mail server uses the same mechanism.</p>
<p>A very important feature of the <a href="http://code.google.com/p/jaev/">jaev framework</a> is: You have the choice! You are receiving a <code>Result</code> object as outcome of the validation process. The <code>Result</code> contains a code, which specifies the details, and a validity level which specifies  the level of validity of an e-mail address. I.e. <code>SYNTAX</code> suggests that an e-mail address is syntactically valid but the domain and account may be invalid. The maximum validity is <code>ACCESSIBLE</code>. With <code>ACCESSIBLE</code> validity the <a href="http://code.google.com/p/jaev/">jaev framework</a> was able to verify the existence and accessibility of the e-mail address on the <a href="http://de.wikipedia.org/wiki/Mail_Transfer_Agent">MTA</a> of the e-mail domain.</p>
<p>This is the last big feature of the <a href="http://code.google.com/p/jaev/">jaev framework</a>. The framework can connect to the <a href="http://de.wikipedia.org/wiki/Mail_Transfer_Agent">MTA</a> specified in the MX entry of the domain and tries to send an e-mail to the e-mail address. If the mail transfer can be initiated the framework will abort the process, no mail will be send, but we can assure that the e-mail account exits.</p>
<p>Around the three step validation mechanism the framework offers quite simple and extendible construction and configuration mechanisms, examples for JSF, Tapestry 5 and Flex &amp; BlazeD and different acceptance strategies. Timeouts may be applied on different levels and operations, so you can assure that you&#8217;ll get a <code>Result</code> in a defined amount of time.</p>
<p>I think this is quite a handy package. And I spent lots of my spare time the last four weeks to bring this to life. Maybe someone out there agrees with me and uses the framework in his application.</p>
<p>If you encounter some problems or you would like to contribute/request some features you may post them to the <a href="http://groups.google.com/group/jaev-users?pli=1">google group</a> or to the <a href="http://code.google.com/p/jaev/issues/list">issue management system</a>. Maybe there is someone out there who is firm in <a href="http://www.antlr.org/">ANTLR</a> which the jeav framework uses for e-mail parsing.</p>
]]></content:encoded>
			<wfw:commentRss>http://nicl.net/2009/02/the-name-is-jaev/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
