<?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>MuddyHorse Farm and Tech</title>
	<atom:link href="http://blog.muddyhorse.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.muddyhorse.com</link>
	<description>Where animals and technology collide</description>
	<lastBuildDate>Thu, 11 Mar 2010 20:42: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>
		<atom:link rel="next" href="http://blog.muddyhorse.com/feed/?page=2" />

		<item>
		<title>Not fixing the Xbox 360?</title>
		<link>http://blog.muddyhorse.com/2010/03/not-fixing-the-xbox-360/</link>
		<comments>http://blog.muddyhorse.com/2010/03/not-fixing-the-xbox-360/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 20:40:07 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[360]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[shopping]]></category>
		<category><![CDATA[xbox]]></category>
		<category><![CDATA[xbox-360]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=318</guid>
		<description><![CDATA[I broke down and bought a new Xbox 360 Arcade unit to replace my variously failing boxes.  If you , I tried a couple of strategies to fix my machine.  They all worked &#8212; for a time.  The time the fix worked, however, was variable, ranging from 5-30 hours for a good fix, and as [...]]]></description>
			<content:encoded><![CDATA[<p>I broke down and bought a <a href="http://dealnews.com/Microsoft-Xbox-360-Arcade-Console-for-159-free-shipping/352789.html">new Xbox 360 Arcade</a> unit to replace my variously failing boxes.  If you <a href="http://blog.muddyhorse.com/2010/02/fixing-the-xbox-360/">remember back just a bit in time</a>, I tried a couple of strategies to fix my machine.  They all worked &#8212; for a time.  The time the fix worked, however, was variable, ranging from 5-30 hours for a good fix, and as short as 30 minutes for a bad fix.</p>
<p>I&#8217;ve spent a lot of time on the boxes, and unfortunately, the time I spent fixing seems to have eclipsed the time I spent playing.</p>
<p>The thing I&#8217;ve found most fascinating about the process is that, while buggy, the 360 hardware is quite resilient.  With enough twiddling of screws, I can get a box up and running quite consistently.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/03/not-fixing-the-xbox-360/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Small Token of Our Appreciation</title>
		<link>http://blog.muddyhorse.com/2010/02/a-small-token-of-our-appreciation/</link>
		<comments>http://blog.muddyhorse.com/2010/02/a-small-token-of-our-appreciation/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 16:10:54 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[bonus]]></category>
		<category><![CDATA[mr. yuck]]></category>
		<category><![CDATA[wow]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=307</guid>
		<description><![CDATA[<a href="http://blog.muddyhorse.com/2010/02/a-small-token-of-our-appreciation/" title="A Small Token of Our Appreciation"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/img00056.e85a7vl676gcw8k4w4c08goo4.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="135" alt="A Small Token of Our Appreciation" style="float:left;padding:0 10px 10px 0;" ></a>The Company was pleased with our performance last year.  So they went against everything we&#8217;ve been teaching our kids, and gave us candy pills.
That&#8217;s Jelly beans on the left, mints on the right.  Or so I hope.
]]></description>
			<content:encoded><![CDATA[<a href="http://blog.muddyhorse.com/2010/02/a-small-token-of-our-appreciation/" title="A Small Token of Our Appreciation"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/img00056.e85a7vl676gcw8k4w4c08goo4.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="135" alt="A Small Token of Our Appreciation" style="float:left;padding:0 10px 10px 0;" ></a><p>The Company was pleased with our performance last year.  So they went against everything we&#8217;ve been teaching our kids, and gave us candy pills.</p>
<p>That&#8217;s Jelly beans on the left, mints on the right.  Or so I hope.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/a-small-token-of-our-appreciation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A good and bad thing about Buzz.</title>
		<link>http://blog.muddyhorse.com/2010/02/a-good-and-bad-thing-about-buzz/</link>
		<comments>http://blog.muddyhorse.com/2010/02/a-good-and-bad-thing-about-buzz/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:23:22 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=303</guid>
		<description><![CDATA[One cool thing about Buzz:  I get more replies than before on my posts.
One bad thing about Buzz: Those replies are on the Buzz server, not here.
I&#8217;ll try to scale back the user requirements for posting, as I have gotten complaints about that.  But if spam gets too high, I&#8217;ll have to turn it [...]]]></description>
			<content:encoded><![CDATA[<p>One cool thing about Buzz:  I get more replies than before on my posts.</p>
<p>One bad thing about Buzz: Those replies are on the Buzz server, not here.</p>
<p><span id="more-303"></span>I&#8217;ll try to scale back the user requirements for posting, as I have gotten complaints about that.  But if spam gets too high, I&#8217;ll have to turn it back on.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/a-good-and-bad-thing-about-buzz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Clumsy Pattern: Software Development</title>
		<link>http://blog.muddyhorse.com/2010/02/the-clumsy-pattern-software-development/</link>
		<comments>http://blog.muddyhorse.com/2010/02/the-clumsy-pattern-software-development/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 14:30:48 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[The Clumsy Pattern]]></category>
		<category><![CDATA[archaic]]></category>
		<category><![CDATA[clumsy]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=295</guid>
		<description><![CDATA[I haven&#8217;t formulated exactly what I&#8217;m going to say, but I wanted to start a series on the Clumsy pattern in software development.  Don&#8217;t get excited, I&#8217;m neither adopting patterns as a beloved thing (that sentence needs its own post), nor am I trying to establish a new industry term.  I&#8217;ll do a Clumsy Pattern [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t formulated exactly what I&#8217;m going to say, but I wanted to start a series on the Clumsy pattern in software development.  Don&#8217;t get excited, I&#8217;m neither adopting patterns as a beloved thing (that sentence needs its own post), nor am I trying to establish a new industry term.  I&#8217;ll do a Clumsy Pattern post when I come across things that are so archaic or broken that they have no right still existing.<span id="more-295"></span></p>
<p>Another way of putting it is that I&#8217;m ashamed of the state of our industry, in these cases.  It may be inertia, or the teams I&#8217;m on, or anything, but I still have to fight it, understand it.  These things are what we should be laughing about, when talking about  the bad old days.</p>
<p>I have some thing swirling in my head&#8230; part of this may be the continuation of the <a href="http://blog.muddyhorse.com/2009/02/java-build-systems-part-2-maven/">Java Build Systems posts</a> I had earlier, and more.  Next two entries, I think: Java and ORM, Java and the Web.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/the-clumsy-pattern-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Well, they&#8217;re now on the list, anyway&#8230;</title>
		<link>http://blog.muddyhorse.com/2010/02/well-theyre-now-on-the-list-anyway/</link>
		<comments>http://blog.muddyhorse.com/2010/02/well-theyre-now-on-the-list-anyway/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 16:46:14 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[idiocy]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=291</guid>
		<description><![CDATA[Alternate titles for this post:

How Gamestop ruined my Valentine&#8217;s Day
 Gamestop Made Me Do It
I&#8217;m an Idiot

The wife lovingly bought me a copy of Mass Effect 2 for Valentines Day.  In fact, she told me she was going to, hence my desire to .  She gives it to me, and the first thing out of [...]]]></description>
			<content:encoded><![CDATA[<p>Alternate titles for this post:</p>
<ul>
<li>How Gamestop ruined my Valentine&#8217;s Day</li>
<li> Gamestop Made Me Do It</li>
<li>I&#8217;m an Idiot</li>
</ul>
<p><span id="more-291"></span>The wife lovingly bought me a copy of Mass Effect 2 for Valentines Day.  In fact, she told me she was going to, hence my desire to <a href="http://blog.muddyhorse.com/2010/02/fixing-the-xbox-360/">get my Xbox working</a>.  She gives it to me, and the first thing out of my mouth is &#8220;Oh, you bought this used?  I&#8217;ll have to pay $15 to be able to download the free stuff for it.&#8221;</p>
<p>I always do this.  My wife could buy me the coolest toy, phone, gadget, or netbook, and I&#8217;ll mention how much I like it, and oh did you see the deal on it last week where it was half off?  I make the lovely wife feel like an idiot, and the gift seem cheap and poorly thought-out.</p>
<p>That&#8217;s my personal demon to remove.  The real enemy here?  Gamestop, for knowingly selling my wife a game for $55 (a five-dollar discount off new retail price) without even mentioning this to her.  They made a ton of money off the deal, probably way more than they would have from selling the game new.  It was very well publicized in gaming circles that this was coming down the line, there&#8217;s no way they were innocent.</p>
<p>I&#8217;m putting them on my list of most hated companies.  Companies I won&#8217;t go to or buy from.  Congrats, guys &#8212; you just joined the ranks of Best Buy and Sony!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/well-theyre-now-on-the-list-anyway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Work&#8230;</title>
		<link>http://blog.muddyhorse.com/2010/02/design-work/</link>
		<comments>http://blog.muddyhorse.com/2010/02/design-work/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 04:16:23 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=283</guid>
		<description><![CDATA[<a href="http://blog.muddyhorse.com/2010/02/design-work/" title="Design Work&#8230;"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/everyday.31bexqhnccmc4wcw4cgss4g0w.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="66" height="100" alt="Design Work&#8230;" style="float:left;padding:0 10px 10px 0;" ></a>I just picked up three books on Design, based largely on the recommendations in the JavaPosse Roundup 09 sessions on the topic.  I haven&#8217;t read them yet, but just perusing them makes them look to be a lot of fun.  First, the Amazon links:

The Design of Everyday Things by Donald Norman
Don&#8217;t Make Me Think!  A [...]]]></description>
			<content:encoded><![CDATA[<a href="http://blog.muddyhorse.com/2010/02/design-work/" title="Design Work&#8230;"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/everyday.31bexqhnccmc4wcw4cgss4g0w.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="66" height="100" alt="Design Work&#8230;" style="float:left;padding:0 10px 10px 0;" ></a><p>I just picked up three books on Design, based largely on the recommendations in the <a href="http://javaposse.com/">JavaPosse</a> Roundup 09 sessions on the topic.  I haven&#8217;t read them yet, but just perusing them makes them look to be a lot of fun. <span id="more-283"></span> First, the Amazon links:</p>
<ol>
<li><a href="http://www.amazon.com/gp/product/0465067107/ref=oss_product">The Design of Everyday Things</a> by Donald Norman</li>
<li><a href="http://www.amazon.com/gp/product/0321344758/ref=oss_product">Don&#8217;t Make Me Think!  A common sense approach to Web Usability</a> by Steve Krug</li>
<li><a href="http://www.amazon.com/gp/product/0321534042/ref=oss_product">The Non-Designer&#8217;s Design Book</a> by Robin Williams</li>
</ol>
<p><em>Everyday Things</em> is actually about physical, industrial design, but a lot of the anecdotes, photographs, and diagrams seem to apply just as well to software design.  The <em>Design Book</em> steps a bit closer to my familiar software realms by covering general graphic design principles, largely for print media.  It covers the basics of Proximity, Alignment, Repetition, and Contrast, and a host of other things including color and type (font to us normals).  And lastly, <em>Don&#8217;t Make Me Think!</em> covers style and web patterns.  It has juicy bits on brevity, breadcrumbs, scanning patterns, and tons more.</p>
<p>I can&#8217;t wait!  Practical design has always been something I like.  I want to learn the best patterns.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/design-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing the XBox 360</title>
		<link>http://blog.muddyhorse.com/2010/02/fixing-the-xbox-360/</link>
		<comments>http://blog.muddyhorse.com/2010/02/fixing-the-xbox-360/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 21:04:59 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[xbox]]></category>
		<category><![CDATA[xbox-360]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=272</guid>
		<description><![CDATA[I thought I was in the clear as far as the 3 red lights goes for the XBox 360&#8230; it happened, I was under warranty, Microsoft send a cardboard coffin, and I sent it back.  End of story.
Oops, it happened again.  There&#8217;s no free lunch this time.  Even if I paid the $100 to MS [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I was in the clear as far as the 3 red lights goes for the XBox 360&#8230; it happened, I was under warranty, Microsoft send a cardboard coffin, and I sent it back.  End of story.</p>
<p>Oops, it happened again.  There&#8217;s no free lunch this time.  Even if I paid the $100 to MS to repair it, they would only give a 90 day warranty on their work.  So, either buy a new one (with a massive extended warranty, of course) or try to fix it myself.  After attempting to buy a new Arcade unit for $200 at K-Mart twice, but failing both times because they were out of stock, I went the fix route.</p>
<p><span id="more-272"></span>Oooh, that&#8217;s a dark and scary part of the internet.  Everyone&#8217;s trying to sell you their $40 guide on how to fix it like the pros.  Plus they tout how their guides are not scams (a good indication of scamminess), and how they will make you a better person.  I kept digging, though, and found help on my <a href="http://eforhan.wordpress.com">brother</a>&#8217;s recommendation:</p>
<p><a href="http://www.youtube.com/watch?v=wsz0lNJ6JrQ">YouTube &#8211; How To Fix the Red Ring of Death #1 (Penny Trick)</a><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="445" height="364" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/wsz0lNJ6JrQ&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="445" height="364" src="http://www.youtube.com/v/wsz0lNJ6JrQ&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>It actually worked.  I used the video as a general guide.  The only thing I had to do &#8220;off the books&#8221; was convince the xbox to get out of the three red rings mode.  I&#8217;m not sure I did this the best way, but I unplugged the fan and powered up for about 2 minutes.  Even though the three red rings keep flashing, all the parts warm up decently (but can get too warm, that&#8217;s the part I&#8217;m not sure about). After a 30-minute cooldown, the xbox booted just fine.</p>
<p>Along the way, I came across these other reputable/useful links:</p>
<ul>
<li><a href="http://www.instructables.com/id/Fix-the-Red-Ring-of-Deathwithout-towels/">Fixing without towels</a></li>
<li><a href="http://www.llamma.com/xbox360/repair/ring_of_light_x-clamp_fix.htm">Llamma&#8217;s X-Clamp fix</a></li>
<li><a href="http://xbox360repairfix.blogspot.com/2008/09/xbox-360-x-clamp-fix.html">X-Clamp fix 2</a></li>
<li><a href="http://repairmyxbox360-mario.com">Mario&#8217;s Repair Guide</a></li>
</ul>
<p>I played Gears of War 2 for 30 minutes, no problems.  It logs onto Xbox Live just fine.  And, we&#8217;ve gone through the movie Dinosaur today with no issues.  Perhaps it will live long enough for me to play up some Mass Effect 2!</p>
<p>Update:  Not long enough for <em>all</em> of Mass Effect 2&#8230; see also <a href="http://blog.muddyhorse.com/2010/03/not-fixing-the-xbox-360/">this new post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/02/fixing-the-xbox-360/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Podcast Rotation</title>
		<link>http://blog.muddyhorse.com/2010/01/podcast-rotation/</link>
		<comments>http://blog.muddyhorse.com/2010/01/podcast-rotation/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 15:00:12 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[podcasts]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=267</guid>
		<description><![CDATA[I just wanted to capture the current set of podcasts I listen to.  I commute two hours a day, and this set keeps me lightly stocked &#8212; Sometimes I run out for a day or two, and I rarely fall behind.
This is my current gold-standard set of podcasts:
Here are some podcasts I&#8217;ve just started [...]]]></description>
			<content:encoded><![CDATA[<p>I just wanted to capture the current set of podcasts I listen to.  I commute two hours a day, and this set keeps me lightly stocked &#8212; Sometimes I run out for a day or two, and I rarely fall behind.</p>
<p><span id="more-267"></span>This is my current gold-standard set of podcasts:<br />

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Podcast / RSS Link</th><th class="column-2">Category</th><th class="column-3">Average Length</th><th class="column-4">Description</th>
	</tr>
</thead>
<tbody class="row-hover">
	<tr class="row-2 even">
		<td class="column-1"><a href="http://feeds.feedburner.com/MajorNelsonblogcast">Major Nelson Radio</a></td><td class="column-2">Gaming</td><td class="column-3">1:15 - 2:00</td><td class="column-4">Gaming podcast, focussed almost exclusively on the Xbox 360.  Interviews and news.</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1"><a href="http://scripts.ign.com/rss/ign.podcasts.2.0.xml">IGN Games Podcasts</a></td><td class="column-2">Gaming</td><td class="column-3">0:40 - 1:15</td><td class="column-4">I listen to the following podcasts from this RSS:<br />
Game Scoop (all around gaming news)<br />
Three Red Lights (ostensibly 360, often silly)<br />
Nintendo Voice Chat (Wii / DS)<br />
Command Prompt (PC Gaming)</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1"><a href="http://feeds.ign.com/ignfeeds/podcasts/entertainment/">IGN Entertainment Podcasts</a></td><td class="column-2">Television / Movies / Technology</td><td class="column-3">0:40 - 1:00</td><td class="column-4">I only currently listen to Channel Surfing, but occasionally there are other interesting podcasts</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1"><a href="http://www.bungie.net/podcast/bungiepodcast.xml">Bungie Podcast</a><br />
</td><td class="column-2">Gaming</td><td class="column-3">1:30 - 2:00</td><td class="column-4">Bungie studios talking mostly about Halo.  Note:  Not bleeped, not filtered.</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1"><a href="http://rampancy.net/podcast/angersadnessenvy">Anger, Sadness, Envy</a><br />
</td><td class="column-2">Gaming</td><td class="column-3">1:15 - 1:45</td><td class="column-4">Rampancy.net's podcast discussing all things halo.  Fun deep dives into story and gameplay.</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1"><a href="http://dealnews.com/rss/516-">The Dealnews Podcast</a></td><td class="column-2">Technology, Consumer News</td><td class="column-3">0:40 - 1:00</td><td class="column-4">A medium-length, somewhat lighthearted take on tech news and product deals.</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1"><a href="http://feeds.feedburner.com/javaposse">The Java Posse</a></td><td class="column-2">Programming</td><td class="column-3">1:00 - 1:30</td><td class="column-4">Java and JVM news and sessions</td>
	</tr>
</tbody>
</table>
<br />
Here are some podcasts I&#8217;ve just started listening to and am still evaluating:</p>

<table id="wp-table-reloaded-id-2-no-1" class="wp-table-reloaded wp-table-reloaded-id-2">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Podcast / RSS</th><th class="column-2">Category</th><th class="column-3">Average Length</th><th class="column-4">Description</th>
	</tr>
</thead>
<tbody class="row-hover">
	<tr class="row-2 even">
		<td class="column-1"><a href="http://www.twiandroid.com/?feed=rss2">This Week in Android</a></td><td class="column-2">Mobile</td><td class="column-3">?</td><td class="column-4">News and interview regarding Android phones and OS.  Just got started.</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1"><a href="http://feeds.feedburner.com/ThisAintYourDadsJava">This Ain't Your Dad's Java</a></td><td class="column-2">Programming, JavaFX</td><td class="column-3">1:00 - 1:30</td><td class="column-4">News and comments about JavaFX</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1"><a href="http://feeds.feedburner.com/LibrivoxCommunityPodcast">Librivox Community Podcast</a></td><td class="column-2">Audio Books</td><td class="column-3">?</td><td class="column-4">Community thoughts from the Librivox audio book site</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1"><a href="http://www.npr.org/rss/podcast.php?id=510221">NPR Science Friday</a></td><td class="column-2">Science and Technology</td><td class="column-3">?</td><td class="column-4">Segments from NPR's Talk of the Nation Science Fridays</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1"><a href="http://www.npr.org/rss/podcast.php?id=5">NPR Talk of the Nation</a></td><td class="column-2">News</td><td class="column-3">?</td><td class="column-4">Segments from NPR's Talk of the Nation</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1"><a href="http://marketplace.publicradio.org/RSS/mmr_full.xml">Marketplace Morning Report</a></td><td class="column-2">Financial News</td><td class="column-3">0:08</td><td class="column-4">Short but dense financial news</td>
	</tr>
</tbody>
</table>

]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/01/podcast-rotation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Coolish: Mozilla Bespin</title>
		<link>http://blog.muddyhorse.com/2010/01/coolish-mozilla-bespin/</link>
		<comments>http://blog.muddyhorse.com/2010/01/coolish-mozilla-bespin/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 22:14:27 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=251</guid>
		<description><![CDATA[I know I&#8217;m late to the game, but I was looking over Mozilla Bespin &#8212; a web-based IDE with a surprising amount of features, including source control and syntax highlighting.  Right now, it&#8217;s all about web techs, with a strong focus on HTML, Javascript, and CSS, but it is extensible and seems like it is [...]]]></description>
			<content:encoded><![CDATA[<p>I know I&#8217;m late to the game, but I was looking over <a href="http://en.wikipedia.org/wiki/Mozilla_Bespin">Mozilla Bespin</a> &#8212; a web-based IDE with a surprising amount of features, including source control and syntax highlighting.  Right now, it&#8217;s all about web techs, with a strong focus on HTML, Javascript, and CSS, but it is extensible and seems like it is headed in the right direction.</p>
<p><span id="more-251"></span>This could be a cool way to develop/test the <a href="http://gamesbyemail.com/">GamesByEmail</a> game I&#8217;ve been fiddling with, perhaps.  I don&#8217;t think code-completion is in there, yet, which will ultimately be a must-have, but I can play for now&#8230;</p>
<p>Big bonus:  the editor is high-performance, and is implemented with my favorite, the HTML5 Canvas tag.  See also my experiments <a href="http://muddyhorse.com/canvas">right here</a> (I&#8217;d recommend <a href="http://www.muddyhorse.com/canvas/planetaryZ2.html">planetaryZ2</a>, and don&#8217;t forget to mouseover/click a planet).</p>
<p>There is some work going on integrating eclipse with this&#8230; not sure exactly what, yet, though.  See <a href="http://borisoneclipse.blogspot.com/2009/02/eclipse-in-cloud.html">Eclipse in the Cloud </a>and <a href="http://wiki.eclipse.org/E4/Bespin">E4/Bespin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/01/coolish-mozilla-bespin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You&#8217;re just fooling yourself&#8230;</title>
		<link>http://blog.muddyhorse.com/2010/01/youre-just-fooling-yourself/</link>
		<comments>http://blog.muddyhorse.com/2010/01/youre-just-fooling-yourself/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 16:28:46 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[mmo]]></category>
		<category><![CDATA[nerds]]></category>
		<category><![CDATA[obfuscation]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=249</guid>
		<description><![CDATA[&#8230; that you&#8217;re cool if you find yourself ever saying any of the following:

buff
debuff
tank
aggro
DPS
AoE
Bonus:

Tapping
Untap



In some cases, you may even be fooling yourself that you&#8217;re playing a game.  Seriously, though, I&#8217;m a nerd, and listening to people talk like the above makes me want to take their lunch money.
The discussion that spawned this was an article [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; that you&#8217;re cool if you find yourself ever saying any of the following:</p>
<ul>
<li>buff</li>
<li>debuff</li>
<li>tank</li>
<li>aggro</li>
<li>DPS</li>
<li>AoE</li>
<li>Bonus:
<ul>
<li>Tapping</li>
<li>Untap</li>
</ul>
</li>
</ul>
<p>In some cases, you may even be fooling yourself that you&#8217;re playing a game.  Seriously, though, I&#8217;m a nerd, and listening to people talk like the above makes me want to take their lunch money.</p>
<p><span id="more-249"></span>The discussion that spawned this was an <a href="http://games.slashdot.org/firehose.pl?op=view&amp;type=story&amp;sid=09/12/18/0710206">article on Slashdot</a> about breaking up some of these concepts, so that MMOs don&#8217;t all end up the same.  I&#8217;m in full agreement&#8230; I want to have fun playing, and I want to at least pretend that it&#8217;s not all numbers in a computer somewhere.</p>
<p>(I had to throw in the <a href="http://www.com-www.com/mtg/glossary.html">M:tG</a> terms just because playing that game causes you to talk especially nerdy.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/01/youre-just-fooling-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Review: Crackdown</title>
		<link>http://blog.muddyhorse.com/2010/01/game-review-crackdown/</link>
		<comments>http://blog.muddyhorse.com/2010/01/game-review-crackdown/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 02:35:34 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[xbox-360]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=234</guid>
		<description><![CDATA[<a href="http://blog.muddyhorse.com/2010/01/game-review-crackdown/" title="Game Review: Crackdown"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/crackdown_cover21.5xuzycfyh6o0wooo0gkgo84co.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="95" height="134" alt="Game Review: Crackdown" style="float:left;padding:0 10px 10px 0;" ></a>Buy.com recently had a great deal on some games and battery packs.  One of the games included was Crackdown.  Here&#8217;s a quick review, after playing about half the game.  I get the feeling that Crackdown is one of those games everyone&#8217;s heard of, but few have played.  It&#8217;s never had a mega promotional campaign, but [...]]]></description>
			<content:encoded><![CDATA[<a href="http://blog.muddyhorse.com/2010/01/game-review-crackdown/" title="Game Review: Crackdown"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/crackdown_cover21.5xuzycfyh6o0wooo0gkgo84co.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="95" height="134" alt="Game Review: Crackdown" style="float:left;padding:0 10px 10px 0;" ></a><p>Buy.com recently had a great deal on some games and battery packs.  One of the games included was Crackdown.  Here&#8217;s a quick review, after playing about half the game.  I get the feeling that Crackdown is one of those games everyone&#8217;s heard of, but few have played.  It&#8217;s never had a mega promotional campaign, but it&#8217;s a solid, well put-together title.  To sum up my feelings about the game: it&#8217;s a blast.  And it gets blastier the farther along you get.</p>
<p><span id="more-234"></span>This is clearly an open-world title.  The city, its people, and its gangs and cars all go on without your intervention.  They even get into traffic accidents and pile-ups, all by themselves.  There is a light, guiding hand as to the first few missions to undertake, but the order of everything is optional.  You can go almost anywhere in the city right from the beginning, sort of&#8230; more on that in a bit.</p>
<p>What do you do?  Well, basically, you can drive, shoot, punch, detonate, and jump.  In fact, doing those five activities nets you better abilities resulting in a stronger ability.  For example, the more you drive a car, with drifting, stunts, and checkpoint races, the better the car handles and performs.  Likewise with shooting, punching, and explosives.  Higher skill levels will give you faster aiming, additional health, and larger blasts.</p>
<p>And lots of jumping gets you, well, nothing, by itself.  Jumping is improved by picking up Agility orbs, placed all over the city.  With some clever jumping, you can pick up a ton of orbs.  Once you have enough for the next level, you are rewarded with a major boost to your jumping height and running speed.  After a couple of levels, you are crossing the city by leaps and bounds.  You might find yourself orb hunting rather than playing the game.  It&#8217;s almost peaceful&#8230; until you miss that jump and land on the highway and get run over.  Such is life, though.</p>
<p>Taken all together, you have a pretty fun game.  You begin to feel like a superhero, throwing barrels, jumping to the top of tall buildings, punching guys into next week.  And you have guns and cars, which make everything better.  And, you can play two-player co-op.</p>
<p>This is a violent game &#8212; you&#8217;ll be running people down, punching guys off buildings, and lighting people on fire via explosives.  The game has some minor flaws, and archaic-feeling menu system, some odd button choices for actions, and targeting and camera issues.</p>
<hr /><strong>Pat’s Rating system:</strong></p>
<ul>
<li><strong>How much would I pay for the game?</strong> Despite its second-generation mistakes and issues, I can say this game would be worth buying at least $50, possibly a full retail of $60.  The fact that I paid about $6 for it is just gravy.</li>
<li><strong>How many times would I replay it?</strong> I&#8217;m absolutely going to play this one through to the end, and gather all 800 orbs if I can.  I could see myself playing it again, especially if I can find a co-op buddy to do it with.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/01/game-review-crackdown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Googly Nexus One &#8212; Pricing and Plan breakdown</title>
		<link>http://blog.muddyhorse.com/2010/01/googly-nexus-one-pricing-and-plan-breakdown/</link>
		<comments>http://blog.muddyhorse.com/2010/01/googly-nexus-one-pricing-and-plan-breakdown/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 02:33:22 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[cell phones]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=230</guid>
		<description><![CDATA[While looking around for an online loan amortization creator (nice one here), I came across a Google ad for the Nexus One, the &#8220;Google phone&#8221; that there&#8217;s been much buzz about.  Apparently, it just came out today, while the great Snomaggeddon blankets the world (or at least Missouri) and I&#8217;ve been oblivious.
I had just been [...]]]></description>
			<content:encoded><![CDATA[<p>While looking around for an online loan amortization creator (nice one <a href="http://www.amortization-calc.com/">here</a>), I came across a Google ad for the Nexus One, the &#8220;Google phone&#8221; that there&#8217;s been much buzz about.  Apparently, it just came out today, while the great Snomaggeddon blankets the world (or at least Missouri) and I&#8217;ve been oblivious.</p>
<p><span id="more-230"></span>I had just been pricing out Android phones at T-Mobile last month, so I was a bit interested.  Here&#8217;s a quick breakdown of the options, buy-first, or 2-year contract:</p>
<table border="1">
<tbody>
<tr>
<th>Phone</th>
<th>T-Mobile Plan</th>
<th>Phone Cost</th>
<th>Monthly Cost</th>
<th>2 years of monthly</th>
<th>Total cost after 2 years</th>
</tr>
<tr>
<td>myTouch 3G</td>
<td>Even More  500 (subsidized)</td>
<td>$150</td>
<td>$70</td>
<td>$1680</td>
<td>$1830</td>
</tr>
<tr>
<td>myTouch 3G</td>
<td>Even More Plus 500</td>
<td>$400</td>
<td>$60</td>
<td>$1440</td>
<td>$1840</td>
</tr>
<tr>
<td>Nexus One</td>
<td>Even More  500 (subsidized)</td>
<td>$180</td>
<td>$80</td>
<td>$1920</td>
<td>$2100</td>
</tr>
<tr>
<td>Nexus One</td>
<td>Even More Plus 500</td>
<td>$530</td>
<td>$60</td>
<td>$1440</td>
<td>$1970</td>
</tr>
</tbody>
</table>
<p>You&#8217;ll notice the subsidized plans are not the same &#8212; the Nexus&#8217; plan includes unlimited text messages.  If they allowed you to drop that, the subsidized Nexus 2-yr price would be about $1860, not too bad.  I kinda doubt they&#8217;d let you drop that, though.</p>
<p>Also, I&#8217;m a bit curious what the plans look like family-style.  Again, can you change the Nexus plan to be a family plan?  A casual glance generally shows a 750 minute minimum, and another $20 baseline, and $10 per extra phone.</p>
<p>And finally, <a href="http://nosugrefneb.com/1896">some crazy folks</a> propose dropping voice altogether, and going data-only, for an apparent $40 / month + a Skype subscription for $3 a month.</p>
<p>Recently, our AT&amp;T GSM reception at home has improved from 0 to 1 or 2 bars&#8230; I wonder how T-Mobile would perform?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2010/01/googly-nexus-one-pricing-and-plan-breakdown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting all of Ubuntu to talk through a NTLM proxy</title>
		<link>http://blog.muddyhorse.com/2009/11/getting-all-of-ubuntu-to-talk-through-a-ntlm-proxy/</link>
		<comments>http://blog.muddyhorse.com/2009/11/getting-all-of-ubuntu-to-talk-through-a-ntlm-proxy/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 21:36:17 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ntlm]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=224</guid>
		<description><![CDATA[NTLM proxies are relatively common corporate web proxy.  It takes special software to pass through it, unfortunately.  One must essentially log into an NT domain to get to the web past the proxy.  By default, web browsers are the only software on Ubuntu Linux that know how to perform the complex handshake. [...]]]></description>
			<content:encoded><![CDATA[<p>NTLM proxies are relatively common corporate web proxy.  It takes special software to pass through it, unfortunately.  One must essentially log into an NT domain to get to the web past the proxy.  By default, web browsers are the only software on Ubuntu Linux that know how to perform the complex handshake.  Many core tools (like apt, etc) cannot do what they need &#8212; and your system can&#8217;t download software updates.</p>
<p><span id="more-224"></span>One solution: <a href="http://packages.ubuntu.com/karmic/web/ntlmaps">ntlmaps</a> &#8212; NTLM Authorization Proxy Server.  Roughly following the guide <a href="http://www.linuxquestions.org/linux/answers/Networking/HOWTO_Install_and_Configure_NTLMaps_for_use_with_an_ISA_Proxy">here</a>, it&#8217;s pretty quick to get done.  You will want to replace the URL in &#8220;Step 1&#8243; with a recent one, such as (for 9.10) <a href="http://packages.ubuntu.com/karmic/all/ntlmaps/download">http://packages.ubuntu.com/karmic/all/ntlmaps/download</a>.</p>
<p>The beauty of this is that, since Firefox can get past the NTLM proxy, you can download the ntlmaps package directly and install it.  After it is set up, reconfigure System &gt; Preferences &gt; Network Proxy to localhost:5865, restart all apps (including terminals), and everything should be ready to go.</p>
<p>The one concern I have is that it stores my password in plain text at /etc/ntlmaps/server.cfg &#8212; granted, you must have sudo access to read it.  You can apparently have it prompt when it starts up, but I&#8217;m not sure how this impacts the UI.</p>
<p>From reading the config file, it appears you can at least use the browser to store the password, in the basic auth scheme.  It is possible you could even use the system preferences to do so, which is at least a bit more user-friendly.  You will still have to remember to change the password, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/11/getting-all-of-ubuntu-to-talk-through-a-ntlm-proxy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Biting the bullet</title>
		<link>http://blog.muddyhorse.com/2009/06/biting-the-bullet/</link>
		<comments>http://blog.muddyhorse.com/2009/06/biting-the-bullet/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 16:49:30 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=213</guid>
		<description><![CDATA[Well, we&#8217;re going to try out the WildBlue through Dish Network for internet.  *Sigh*.  It feels like a defeat.  I have only heard good things about Satellite internet from one person, and all the anecdotes online are negative.  But at least it is something.
]]></description>
			<content:encoded><![CDATA[<p>Well, we&#8217;re going to try out the <a href="http://www.dishnetwork.com/internet/internetComparison/default.aspx">WildBlue</a> through Dish Network for internet.  *Sigh*.  It feels like a defeat.  I have only heard good things about Satellite internet from one person, and all the anecdotes online are negative.  But at least it is something.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/06/biting-the-bullet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Critter chasing&#8230;</title>
		<link>http://blog.muddyhorse.com/2009/06/critter-chasing/</link>
		<comments>http://blog.muddyhorse.com/2009/06/critter-chasing/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 18:13:01 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Farm]]></category>
		<category><![CDATA[animals]]></category>
		<category><![CDATA[chickens]]></category>
		<category><![CDATA[dogs]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=205</guid>
		<description><![CDATA[<a href="http://blog.muddyhorse.com/2009/06/critter-chasing/" title="Critter chasing&#8230;"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/coon.f1ex0b63bo08k0csok0g04scg.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="135" alt="Critter chasing&#8230;" style="float:left;padding:0 10px 10px 0;" ></a>Chickens are delicate creatures, sometimes dying for no good reason.  Unfortunately, they are also delectable creatures, and find themselves in harm&#8217;s way.
Our chickens have been cooped up in their, er, coop for several days now.  We&#8217;d lost 1-2 chickens a day last week.  Several of the abductions seem to happen during the middle of day, [...]]]></description>
			<content:encoded><![CDATA[<a href="http://blog.muddyhorse.com/2009/06/critter-chasing/" title="Critter chasing&#8230;"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/coon.f1ex0b63bo08k0csok0g04scg.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="135" alt="Critter chasing&#8230;" style="float:left;padding:0 10px 10px 0;" ></a><p>Chickens are delicate creatures, sometimes dying for no good reason.  Unfortunately, they are also delectable creatures, and find themselves in harm&#8217;s way.</p>
<p><span id="more-205"></span>Our chickens have been cooped up in their, er, coop for several days now.  We&#8217;d lost 1-2 chickens a day last week.  Several of the abductions seem to happen during the middle of day, unusual for us.  Raccoons and possums (technically, Opossums, but that&#8217;s beside the point) are nocturnal, and do their worst work if we haven&#8217;t locked up the coop by 10 PM.</p>
<p>So that probably leaves a dog.  Not ours &#8212; they&#8217;re cooped up in the house while we&#8217;re gone.  A month ago, though, we had a couple of dogs in the yard; maybe they&#8217;ve returned.  We haven&#8217;t seen the afternoon striker yet, though, so it is hard to tell.</p>
<p>I&#8217;ve put up live no-kill traps, and after 2 apparent escapes and one time catching our out cat, I got a racoon last night.  Adorable little guy.  We&#8217;ll give him to someone in the country who doesn&#8217;t much like his neighbor, so it should have a happy life elsewhere.</p>
<p>We saw a possum two nights ago, but the dog let it run off somewhere&#8230; perhaps we&#8217;ll get it next time.  And no ETA on the dog thing, either.  But at least one perp is out!  Thanks, <a href="http://en.wikipedia.org/wiki/Raccoon">wikipedia</a>, for the image!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/06/critter-chasing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Right up my alley&#8230;</title>
		<link>http://blog.muddyhorse.com/2009/06/right-up-my-alley/</link>
		<comments>http://blog.muddyhorse.com/2009/06/right-up-my-alley/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:11:21 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[achievements]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=201</guid>
		<description><![CDATA[Play Achievement Unlocked
This game makes me so happy.  Did I mention that I got all 1250 achievement points in Mass Effect?
]]></description>
			<content:encoded><![CDATA[<p>Play <a href="http://www.kongregate.com/games/ArmorGames/achievement-unlocked">Achievement Unlocked</a></p>
<p>This game makes me so happy.  Did I mention that I got all 1250 achievement points in Mass Effect?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/06/right-up-my-alley/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Return to the Land of Unhappy Zombies</title>
		<link>http://blog.muddyhorse.com/2009/06/return-to-the-land-of-unhappy-zombies/</link>
		<comments>http://blog.muddyhorse.com/2009/06/return-to-the-land-of-unhappy-zombies/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 19:37:50 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Farm]]></category>
		<category><![CDATA[animals]]></category>
		<category><![CDATA[dogs]]></category>
		<category><![CDATA[futurama]]></category>
		<category><![CDATA[nibbler]]></category>
		<category><![CDATA[walmart]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=195</guid>
		<description><![CDATA[<a href="http://blog.muddyhorse.com/2009/06/return-to-the-land-of-unhappy-zombies/" title="Return to the Land of Unhappy Zombies"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/nibbler.d5g6ek6w21kc8s44ogcw8o08g.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="200" alt="Return to the Land of Unhappy Zombies" style="float:left;padding:0 10px 10px 0;" ></a>Memorial day weekend, we broke the ban on Wal-mart.  Why, you might ask?  Because of Nibbler.
We were in Blytheville, AR over memorial day for the Hudson family reunion.  Lots of food, visiting, long-lost relatives, and, this year, rain.  After the reunion and 2 hours of swimming in an indoor heated pool, we headed out to [...]]]></description>
			<content:encoded><![CDATA[<a href="http://blog.muddyhorse.com/2009/06/return-to-the-land-of-unhappy-zombies/" title="Return to the Land of Unhappy Zombies"><img src="http://blog.muddyhorse.com/wp-content/uploads/yapb_cache/nibbler.d5g6ek6w21kc8s44ogcw8o08g.a9sxxja1njksswcs400wcc4cg.th.jpeg" width="180" height="200" alt="Return to the Land of Unhappy Zombies" style="float:left;padding:0 10px 10px 0;" ></a><p>Memorial day weekend, we broke the ban on Wal-mart.  Why, you might ask?  Because of Nibbler.</p>
<p><span id="more-195"></span>We were in Blytheville, AR over memorial day for the Hudson family reunion.  Lots of food, visiting, long-lost relatives, and, this year, rain.  After the reunion and 2 hours of swimming in an indoor heated pool, we headed out to Pizza Hut for some high-quality food.</p>
<p>We couldn&#8217;t find it.  Actually, if I remember right, we set out for a Mazzio&#8217;s Pizza, which was long gone, so we stopped at a parking lot to locate (&amp; verify) a Pizza Hut.  But I digress.</p>
<p>It was a heavy downpour, and in a flat place like north-eastern Arkansas, that means something, since there&#8217;s nowhere for the water to go.  There was 1-2 inches of water basically standing in the lot, with more coming down every minute.  Suddenly, my wife jumps out of the car, and starts looking underneath.  She then runs around to my door and opens it, asking for beef jerky.</p>
<p>I had a pretty good idea what was going on&#8230; an animal.  A minute later she jumps back in the car with a shivering chihuahua, emaciated, missing hair, and with some scabs from the harness it was wearing.</p>
<p>We run back to the hotel, get my wife changed, and head to pretty much the only operating store in the county, Wal-mart, to pick up some basics for the dog.  There, we met an officer who told us to just take care of the dog, animal control was full.  We left some messages with folks down there, and still haven&#8217;t heard back.</p>
<p>So, that&#8217;s my path to destruction.  The real question:  should I go back?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/06/return-to-the-land-of-unhappy-zombies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Build Systems, Part 2: Maven</title>
		<link>http://blog.muddyhorse.com/2009/02/java-build-systems-part-2-maven/</link>
		<comments>http://blog.muddyhorse.com/2009/02/java-build-systems-part-2-maven/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 20:39:21 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[java-build-systems]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=165</guid>
		<description><![CDATA[Continuing the Java build systems discussion, today I want to focus on Maven, what it does well and what it does that frustrates.  We&#8217;ll get a little taste of the minimum expectations for a new build system as well.  Note:  this page may be subject to edits, as I come across more pros &#38; cons [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing the <a href="http://blog.muddyhorse.com/?tag=java-build-systems">Java build systems discussion</a>, today I want to focus on Maven, what it does well and what it does that frustrates.  We&#8217;ll get a little taste of the minimum expectations for a new build system as well.  Note:  this page may be subject to edits, as I come across more pros &amp; cons of Maven.</p>
<p><span id="more-165"></span><strong>What Maven does right</strong></p>
<p>Maven teaches us several important things about what we need from a build system.</p>
<ul>
<li><em>Convention over configuration. </em> Maven strongly encourages developers to put source files, resources, tests, and project metadata in standard locations.  Maven make life very difficult for anyone deviating from the norms.  In general, this is good, helps teamwork and collaboration, and helps for picking up a project cold.</li>
<li><em>Defaults just work.</em> Similar to the last entry, if you follow maven standards, then it works fine and has a reasonable assumption of defaults.</li>
<li><em>Dependency Management.</em> Probably the single best feature of Maven and modern build tools.  This allows a developer to specify requirements for a project without having to directly specify the physical location of those library dependencies.  This frees the build system to resolve from the network, automatically check for updates, and manage multiple versions of libraries.</li>
<li><em>Plugins</em>.  Easy extensibility is key to Maven.  In fact, most of its internals actually exist as plugins, from compilation to Ant support to deployment.  The ability to add new, custom behavior and have it tie into your builds is fantastic.</li>
</ul>
<p><strong>What Maven does wrong</strong></p>
<p>There are some pretty big gotchas in Maven.  Nothing insurmountable, but frustrating nonetheless.  And before you say &#8220;It&#8217;s open source, fix it yourself!&#8221; know that it is not that simple.  There may be resistance to a certain change, for example, from &#8220;the establishment&#8221; or some issues and Maven&#8217;s solutions are fundamentally tricky.</p>
<ul>
<li><em>Outside the ordinary is very hard.</em> Doing anything beyond the standard use cases requires an arcane knowledge of plugins.  All of a sudden, Maven&#8217;s configuration-based approach falls down, and things become easier to do in code &#8212; ie, you have to write a plugin.  But don&#8217;t think you can use the nifty <a href="http://maven.apache.org/guides/plugin/guide-ant-plugin-development.html">ant-scripted mojos</a> for that plugin&#8211; for example, for compilation, there isn&#8217;t a standard way to get the classpath into the ant script.</li>
<li><em>Dependency Management.</em> Yep, the same benefit is a detriment.  Or, at the very least, Maven&#8217;s handling of it.  Several things fall in here.  The ones I can recall are:
<ul>
<li>Transitive dependencies prove very tricky and make for lots of classloading troubles.  Adding a single dependency to a POM can really change the entire dependency graph of  a project.</li>
<li>There is no way to simply say &#8220;I want the latest of library XX&#8221;.  On the one hand, Maven makes sense here; you should usually know exactly which version of software you are building against.  But there are cases, for example, due to a lack of maturity, where having to know that version number is just an annoyance.  Ivy apparently has an intermediate option here, where you can specify latest, but when a build happens, it records what that version was.</li>
</ul>
</li>
<li><em>Long-standing bugs.</em> Maven suffers a bit from what other mature open-source products hit upon.  Whether it is loss of momentum for something that works well enough or that too many are depending on the quirks, there are lots of oddities and issues left in core plugins.  A perfect example is maven-antrun-plugin, which only sets its classpath once per maven run, regardless of how many POMs reference it.</li>
<li><em>Documentation bugs.</em> Some of the Maven docs are a bit light on details.  Part of it may be Maven&#8217;s built-in site creation, which leads to some sites that have lots of links but are pretty information-sparse.  Other times, many common scenarios are presented, but some of the edge cases are glossed over.  Related:  looking for a list of available Maven properties for use in your POM is tricky because of Maven&#8217;s dynamic nature.  But a simple guide describing common ones and how to construct others would be great.</li>
</ul>
<p><strong>Summary</strong></p>
<p>Generally, what Maven teaches us is that you need to fully embrace Maven to get the full benefit of Maven.  Once you get the hang of the Maven way, things go much more smoothly.  That is not unexpected, but it is uncomfortable.  But there are times where you have to fight &#8212; deploying to multiple load-balanced servers, for example, and you end up with some nasty scripts and configuration on top of a previously elegant solution.</p>
<p>The important thing is, though, that Maven does work.  It&#8217;s not too much of a bear to get started with, has great defaults, and it has some compelling solutions to annoying problems.</p>
<p>So, can Maven be fixed?  Should it be fixed, or should a build system start from scratch?  More on that next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/02/java-build-systems-part-2-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven + OSGi + Spring + JavaFX (+Ant)</title>
		<link>http://blog.muddyhorse.com/2009/02/maven-osgi-spring-javafx-ant/</link>
		<comments>http://blog.muddyhorse.com/2009/02/maven-osgi-spring-javafx-ant/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 21:46:50 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=174</guid>
		<description><![CDATA[We had to go through a number of steps to support the combination of Maven + OSGi + Spring + JavaFX-1.1 in our Swing-based application.  This document describes all the steps and technology we&#8217;ve gone through to get it working.
! With JavaFX 1.2, some of the steps have changed.  I will post a [...]]]></description>
			<content:encoded><![CDATA[<p>We had to go through a number of steps to support the combination of Maven + OSGi + Spring + JavaFX-1.1 in our Swing-based application.  This document describes all the steps and technology we&#8217;ve gone through to get it working.</p>
<h3><span id="more-174"></span>! With JavaFX 1.2, some of the steps have changed.  I will post a new entry covering the differences shortly.</h3>
<h1>Build / Compile</h1>
<p>We use Maven as our build system, so JavaFX compilation must coexist with these.</p>
<h3>Upload Dependencies to a Maven repository</h3>
<p>First, we took every single Jar file in the JavaFX SDK 1.1 and uploaded them into Nexus, our development Maven repository.  We took all jars from lib/shared and lib/desktop, uploaded them with groupID of javafx, artifactID matching the Jar name, version 1.1.</p>
<h3>Building alongside Java code</h3>
<p>To combat an explosion of modules, we determined that we wanted to have a src/main/fx source folder that is compiled and used right alongside src/main/java and src/main/resources.  Furthermore, the JavaFX code needs to be able to refer to classes and interfaces in the same module as well as in any maven dependencies.</p>
<p>Our first attempt was to use the seemingly perfect fit, the <a rel="nofollow" href="http://m2-javafxc.sourceforge.net/">m2-javafxc maven plugin</a>.  Early attempts seemed workable, but things started to fall apart and we had to abandon.  Here are some of the issues:</p>
<ol>
<li>m2-javafxc is based on the maven-plexus-compiler.  This compiler will only run once per module.  So we were unable to have src/main/java and src/main/fx side-by-side</li>
<li>m2-javafxc filters out anything other than .fx files.  So we couldn&#8217;t have java and fx intermingled inside a single source folder.</li>
<li>Unfortunately, m2-javafxc is supported by only one individual, and barely used by the community.  While the codebase is not large or complicated, this does represent a bit of a risk.</li>
</ol>
<p>Next, we we noticed that the SDK includes an ant task, something easily runnable in maven.  So, we built up a working ant script.  If you look carefully, you will notice it takes three parameters.  These are covered below.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;compile-jfx&quot;</span> <span style="color: #000066;">basedir</span>=<span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #000066;">xmlns:artifact</span>=<span style="color: #ff0000;">&quot;urn:maven-artifact-ant&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;compile.jfx&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;check-if-should-build&quot;</span> <span style="color: #000066;">if</span>=<span style="color: #ff0000;">&quot;should-build&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;path</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;javafxc.class.path&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${localRepo}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;javafx/**/${javafx.version}/*-${javafx.version}.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fileset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pathelement</span> <span style="color: #000066;">path</span>=<span style="color: #ff0000;">&quot;${compile.classpath}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/path<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;localRepo: ${localRepo}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;jfx ver: ${javafx.version}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;compiler.class.path&quot;</span> <span style="color: #000066;">refid</span>=<span style="color: #ff0000;">&quot;javafxc.class.path&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;jfxc classpath: ${compiler.class.path}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!-- create output directories: --&gt;</span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;target/fxclasses&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;target/classes&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;target/clover/classes&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;taskdef</span> <span style="color: #000066;">resource</span>=<span style="color: #ff0000;">&quot;javafxc-ant-task.properties&quot;</span> <span style="color: #000066;">classpathref</span>=<span style="color: #ff0000;">&quot;javafxc.class.path&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;javafxc</span> <span style="color: #000066;">srcdir</span>=<span style="color: #ff0000;">&quot;src/main/fx&quot;</span> <span style="color: #000066;">destdir</span>=<span style="color: #ff0000;">&quot;target/fxclasses&quot;</span> <span style="color: #000066;">includes</span>=<span style="color: #ff0000;">&quot;**/*.fx&quot;</span> <span style="color: #000066;">compilerclasspath</span>=<span style="color: #ff0000;">&quot;${compiler.class.path}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!-- copy output files to two places to deal with clovery issues: --&gt;</span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;target/fxclasses&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;fxclasses&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;copy</span> <span style="color: #000066;">todir</span>=<span style="color: #ff0000;">&quot;target/classes&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">refid</span>=<span style="color: #ff0000;">&quot;fxclasses&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/copy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;copy</span> <span style="color: #000066;">todir</span>=<span style="color: #ff0000;">&quot;target/clover/classes&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">refid</span>=<span style="color: #ff0000;">&quot;fxclasses&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/copy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;check-if-should-build&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;available</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;src/main/fx&quot;</span> <span style="color: #000066;">property</span>=<span style="color: #ff0000;">&quot;should-build&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;echo</span> <span style="color: #000066;">message</span>=<span style="color: #ff0000;">&quot;should-build: ${should-build}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>To integrate into maven, we use the following snippet.  It ties into the standard lifecycle, as you see, and happens just after src/main/java is compiled.  It supplies three parameters to the ant script:</p>
<ul>
<li>compile.classpath &#8212; the modules&#8217;s dependecy classpath</li>
<li>localRepo &#8212; the root of the local repository</li>
<li>javafx.vesion &#8212; the version of JavaFX to build with.</li>
</ul>
<p>The last two parameters are used in the script to build the classpath to insure all the JavaFX libraries are present during compilation.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-antrun-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ant-process-classes<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tasks<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;compile.classpath&quot;</span> <span style="color: #000066;">refid</span>=<span style="color: #ff0000;">&quot;maven.compile.classpath&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;localRepo&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${settings.localRepository}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;javafx.version&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${javafx.version}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ant</span> <span style="color: #000066;">antfile</span>=<span style="color: #ff0000;">&quot;javafxc.build.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
                                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;compile.jfx&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ant<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/tasks<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>run<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #808080; font-style: italic;">&lt;!-- needed to compile javafx --&gt;</span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafxc<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafxrt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>scenario<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>Working Around Bugs</h3>
<h4>Ant Mojo</h4>
<p>Next, we tried to wrap the above into a Maven plugin via the nifty <a rel="nofollow" href="http://maven.apache.org/guides/plugin/guide-ant-plugin-development.html">Ant script-driven Mojo</a> concept.  However, I could not specify dependencies as I could with a Java mojo, and I was unable to get maven to pass the compile classpath into the script</p>
<h4>maven-antrun-plugin</h4>
<p>It turns out, if you have a multimodule project (we do) and you have multiple invocations of maven-antrun-plugin, the classpath gets set once, by the first run.  We had the choice of putting every dependency on every antrun, or the light hack of having an empty antrun in the parent project with every dependency specified.</p>
<h4>Clover</h4>
<p>When doing a build that includes Clover numbers, clover changes the build classpath to include the artifact with the clover classifier instead of the regular one.  We were putting our result classes directly into target/classes</p>
<h4>javafxc crash</h4>
<p>A dependency on org.apache.felix:org.osgi.compendium will cause the javafxc ant task to crash, hard, with a JVM dump.  I suspect it is the javax-servlet 1.0.0, but I&#8217;m too lazy to prove that.</p>
<pre>+- org.apache.felix:org.osgi.compendium:jar:1.2.0:compile
|  +- org.apache.felix:javax.servlet:jar:1.0.0:compile
|  \- org.apache.felix:org.osgi.foundation:jar:1.2.0:compile</pre>
<h1>OSGi / Runtime</h1>
<p>The above gets us to a compiling and building state. However, our target platform is OSGi, specifically the Felix implementation. We need to be able to supply the JavaFX runtime classes to other bundles.</p>
<h3>The javafx-runtime bundle</h3>
<p>Rather than packaging each SDK jar individually into a bundle, we just dropped all of them into a single mega bundle.  The following POM accomplishes this:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://maven.apache.org/POM/4.0.0&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;parent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>PT2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.bjc.es<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.11.0-SNAPSHOT<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/parent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>4.0.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/modelVersion<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.bjc.pt2.javafx-runtime<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.bjc.pt2.javafx-runtime<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #808080; font-style: italic;">&lt;!-- the &lt;packaging&gt; pulls bundle from the parent's properties --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${packaging}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>bundle<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clover-percentage<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>-100<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clover-percentage<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        This bundle simply wraps the various javafx-compiled jars as a bundle.
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>decora-d3d<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>decora-hw<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>decora-ogl<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx-swing<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafxc<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #808080; font-style: italic;">&lt;!--</span>
<span style="color: #808080; font-style: italic;">        &lt;dependency&gt;</span>
<span style="color: #808080; font-style: italic;">          &lt;groupId&gt;javafx&lt;/groupId&gt;</span>
<span style="color: #808080; font-style: italic;">          &lt;artifactId&gt;javafxdoc&lt;/artifactId&gt;</span>
<span style="color: #808080; font-style: italic;">          &lt;version&gt;${javafx.version}&lt;/version&gt;</span>
<span style="color: #808080; font-style: italic;">        &lt;/dependency&gt;</span>
<span style="color: #808080; font-style: italic;">        --&gt;</span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>gluegen-rt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>scenario<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jogl<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jmc<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafxgui<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafx<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>javafxrt<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${javafx.version}<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependencies<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.felix<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-bundle-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;extensions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/extensions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;instructions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Bundle-SymbolicName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            ${pom.artifactId}
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Bundle-SymbolicName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                        <span style="color: #808080; font-style: italic;">&lt;!-- embed all compile and runtime scope dependencies --&gt;</span>
                        <span style="color: #808080; font-style: italic;">&lt;!-- &lt;Embed-Dependency&gt;*;scope=compile;artifactId=!log4j|javafxc&lt;/Embed-Dependency&gt; --&gt;</span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Import-Package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            com.sun.imageio.plugins.gif;resolution:=optional,
                            javax.imageio.*,
                            javax.swing.*,
                            javax.sound.*,
                            javax.xml.parsers,
                            javax.media.*;resolution:=optional,
                            javax.script.*;resolution:=optional,
                            netscape.javascript.*;resolution:=optional,
                            sun.*;resolution:=optional,
                            com.sun.javafx.api;resolution:=optional,
                            com.sun.javafx.runtime.adapter;resolution:=optional,
                            org.jdesktop.applet.util;resolution:=optional,
                            org.jdesktop.animation.timing.*;resolution:=optional,
                            org.xml.sax.*;resolution:=optional,
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Import-Package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Export-Package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                            com.sun.gluegen.*,
                            !com.sun.javafx.runtime.adapter,
                            !com.sun.javafx.runtime.liveconnect,
                            !com.sun.javafx.runtime.provider,
                            !com.sun.javafx.api.*,
                            com.sun.javafx.*,
                            com.sun.embeddedswing,
                            com.sun.media.*,
                            com.sun.medialib.*,
                            com.sun.opengl.*,
                            com.sun.scenario.*,
                            com.sun.stylesheet.*,
                            javax.media.opengl.*,
                            org.jdesktop.layout,
                            !javafx.fxunit,
                            javafx.*,
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Export-Package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/instructions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>You can alternately use Eclipse to export a bundle like this, see the post <a rel="nofollow" href="http://sinnema313.wordpress.com/2008/08/01/running-a-javafx-script-from-an-osgi-bundle/">Running a JavaFX script from an OSGi bundle</a>&#8211; generally a good article, but slightly skewed from our purpose.</p>
<p>The bundle created above is not quite perfect; some imports marked optional are probably not optional, but are for parts we aren&#8217;t using just yet, like sound, or applets.  It is missing all the native code shipped with the SDK, which probably has a performance impact.  We also haven&#8217;t tested a fully-featured screen yet.  Finally, there is another problem, which we&#8217;ll see in the next section.</p>
<h1>Integrating JavaFX into a Swing Application</h1>
<h3>I can&#8217;t create a Scene!</h3>
<p>There is a pretty nice article called <a rel="nofollow" href="http://blogs.sun.com/javafx/entry/how_to_use_javafx_in">How to Use JavaFX in Your Swing Application</a> on the main JavaFX blog.  It gives details for how to convert a Scene subclass into a JComponent for use in a swing app.  The only problem with that:  With the javafx-runtime bundle above, I <strong>always</strong> get a NullPointerException during some StyleSheet intialization.  Even when we do it from the command-line, the result is the same.  Again, the javafx-runtime bundle is not quite perfect, and I think that this bears that out.</p>
<h3>Getting the JComponent</h3>
<p>So, we had a workaround:  Extend CustomNode, then create a Scene in Java and inject the custom node in.  The class below has a field called node, which is of type javafx.scene.Node, set in by Spring (see next section).  We steal some of the code from the above link to help with the final extraction.  Also note, we had to duplicate SingletonSequence.java in our package, since it is package-protected in the SDK.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        Scene scene <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Scene<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Sequence<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>Node<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> seq <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SingletonSequence<span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>Node<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span>TypeInfo.<span style="color: #006633;">getTypeInfo</span><span style="color: #009900;">&#40;</span>Node.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>, node<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        scene.<span style="color: #006633;">get</span>$content<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setAsSequenceFromLiteral</span><span style="color: #009900;">&#40;</span>seq<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        scene.<span style="color: #006633;">initialize</span>$<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// stolen from JFXPanel.java by Richard Bair and Jasper Potts:</span>
&nbsp;
        <span style="color: #003399;">String</span> helperName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;com.sun.javafx.scene.JSGPanelSceneImpl&quot;</span><span style="color: #339933;">;</span>
        FXClassType type <span style="color: #339933;">=</span> FXContext.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">findClass</span><span style="color: #009900;">&#40;</span>helperName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        FXObjectValue panelSceneImpl <span style="color: #339933;">=</span> type.<span style="color: #006633;">allocate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        panelSceneImpl.<span style="color: #006633;">initVar</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;scene&quot;</span>, FXLocal.<span style="color: #006633;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">mirrorOf</span><span style="color: #009900;">&#40;</span>scene<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        panelSceneImpl.<span style="color: #006633;">initialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        FXValue jsgPanelV <span style="color: #339933;">=</span> type.<span style="color: #006633;">getVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;jsgPanel&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span>panelSceneImpl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">JComponent</span> jsgPanel <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">JComponent</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>FXLocal.<span style="color: #006633;">ObjectValue</span><span style="color: #009900;">&#41;</span> jsgPanelV<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">asObject</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<h3>Working with Spring</h3>
<p>The last piece of the puzzle is the ability to allow Spring to create JavaFX instances and set properties on them.  Here is an example JavaFX class:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">whatever</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.paint.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.shape.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.text.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EDText <span style="color: #000000; font-weight: bold;">extends</span> CustomNode <span style="color: #009900;">&#123;</span>
    var text<span style="color: #339933;">:</span><span style="color: #003399;">String</span> <span style="color: #339933;">=</span> <span style="color: #003399;">Dialog</span>.<span style="color: #006633;">MESSAGE</span><span style="color: #339933;">;</span>
&nbsp;
    override <span style="color: #000000; font-weight: bold;">public</span> function create<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>Node <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Group</span> <span style="color: #009900;">&#123;</span>
            content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
                <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span>
                    width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">300</span>
                    height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span>
                    fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLUE</span>
                <span style="color: #009900;">&#125;</span>,
                Text <span style="color: #009900;">&#123;</span>
                    x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span>
                    y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span>
                    content<span style="color: #339933;">:</span> bind text
                    fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#93;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// endgroup</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    function setDisplayString<span style="color: #009900;">&#40;</span>newValue<span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        text <span style="color: #339933;">=</span> newValue<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>It has a single operation, setDisplayString().  Then came this Spring config snippet to access it:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;edNode&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.bjc.pt2.authentication.ui.EDText&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;displayString&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;set a value from spring!&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>&#8230; which of course <strong>doesn&#8217;t</strong> work.  JavaFX infers that the setter has a return value because none was specified.  Spring is looking for public void setDisplayString(String) but finds public string setDisplayString(String) and complains.  Minor tweak to the JavaFX code for the function declaration:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"> function setDisplayString<span style="color: #009900;">&#40;</span>newValue<span style="color: #339933;">:</span><span style="color: #003399;">String</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #003399;">Void</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>And it&#8217;s all happy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/02/maven-osgi-spring-javafx-ant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java Build Systems, Part 1: What they do</title>
		<link>http://blog.muddyhorse.com/2009/02/java-build-systems-part-1-what-they-do/</link>
		<comments>http://blog.muddyhorse.com/2009/02/java-build-systems-part-1-what-they-do/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 22:10:08 +0000</pubDate>
		<dc:creator>pforhan</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java-build-systems]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.muddyhorse.com/?p=159</guid>
		<description><![CDATA[Two recent posts on the java-weblog circuit spurred me to motion:
Maven Adoption Curve (Alex Miller, coworker at MetaMatrix)
Maven and Ivy (Ryan Senior, coworker at BJC)
I was trying to think of the ideal build system.  I won&#8217;t pretend that I&#8217;m going to get there in this post.  Instead, I&#8217;ll enumerate what we do every day and [...]]]></description>
			<content:encoded><![CDATA[<p>Two recent posts on the java-weblog circuit spurred me to motion:</p>
<p><a href="http://tech.puredanger.com/2009/01/28/maven-adoption-curve/">Maven Adoption Curve</a> (Alex Miller, coworker at MetaMatrix)<a href="http://www.objectcommando.com/blog/?p=12"><br />
Maven and Ivy</a> (Ryan Senior, coworker at BJC)</p>
<p>I was trying to think of the ideal build system.  I won&#8217;t pretend that I&#8217;m going to get there in this post.  Instead, I&#8217;ll enumerate what we do every day and what we need from a build system so as to start thinking about the ideal system.</p>
<p><span id="more-159"></span>So, to the brainstorming.  Here&#8217;s what we do in the regular process of our osgi bundle development:</p>
<ol>
<li>Obtain dependencies</li>
<li>Compile java source</li>
<li>Compile javafx source</li>
<li>Generate metadata / configuration data</li>
<li>Make jar files</li>
<li>Upload jar files to central repository</li>
<li>Upload jar files to deployment location</li>
<li>Update remote (OBR) xml file with information about uploaded jar</li>
<li>Generate reports about the quality of the source (clover, PMD, checkstyle, etc)</li>
<li>check out from CVS / source control</li>
<li>check in to CVS / source control</li>
<li>tag CVS / source control</li>
<li>manage versions and releases</li>
</ol>
<p>I&#8217;m sure there are more.  Obviously, under web development, you&#8217;d deal with wars and their deployment.  We have ssh tasks to run code on the server.  We even have some install/run stuff that works pretty well.</p>
<p>You may have guessed we use maven.  Maven is so close, but just not there.  It is frustrating, performs a lot of magic, and just falls down in annoying ways.  We have gotten it to do all of the above, some of it is just not pretty.</p>
<p>Next episode, I&#8217;ll go into Maven and what it does well and what it does poorly.  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.muddyhorse.com/2009/02/java-build-systems-part-1-what-they-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
