<?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>Introspection &#187; Java</title>
	<atom:link href="http://blog.jeffhaynie.us/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.jeffhaynie.us</link>
	<description>Jeff Haynie on business and technology in Silicon Valley</description>
	<lastBuildDate>Fri, 14 Jan 2011 18:39:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Service Oriented UI Architecture in the world of web, desktop and mobile applications</title>
		<link>http://blog.jeffhaynie.us/service-oriented-ui-architecture-in-the-world-of-web-desktop-and-mobile-applications.html</link>
		<comments>http://blog.jeffhaynie.us/service-oriented-ui-architecture-in-the-world-of-web-desktop-and-mobile-applications.html#comments</comments>
		<pubDate>Wed, 03 Dec 2008 16:49:34 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[appcelerator]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=308</guid>
		<description><![CDATA[I gave a talk last night (December 2, 2008) at the SD Forum&#8217;s Java SIG in Palo Alto, CA.
The subtitle of the presentation was: &#8220;How the web has gone beyond the browser and we’re headed back to Client/Server&#8221;.  I&#8217;m including the presentation slides below:
SD Forum Java SIG &#8211; Service Oriented UI Architecture
View SlideShare presentation [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I gave a talk last night (December 2, 2008) at the <a href="http://www.sdforum.org/index.cfm?fuseaction=Calendar.eventDetail&#038;eventID=13241&#038;pageId=471">SD Forum&#8217;s Java SIG</a> in Palo Alto, CA.</p>
<p>The subtitle of the presentation was: &#8220;How the web has gone beyond the browser and we’re headed back to Client/Server&#8221;.  I&#8217;m including the presentation slides below:</p>
<div style="width:425px;text-align:left" id="__ss_813836"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jhaynie/sd-forum-java-sig-service-oriented-ui-architecture-presentation?type=powerpoint" title="SD Forum Java SIG - Service Oriented UI Architecture">SD Forum Java SIG &#8211; Service Oriented UI Architecture</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=sdforumjava120208-1228321750248283-8&#038;stripped_title=sd-forum-java-sig-service-oriented-ui-architecture-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=sdforumjava120208-1228321750248283-8&#038;stripped_title=sd-forum-java-sig-service-oriented-ui-architecture-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/jhaynie/sd-forum-java-sig-service-oriented-ui-architecture-presentation?type=powerpoint" title="View SD Forum Java SIG - Service Oriented UI Architecture on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/web">web</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/ajax">ajax</a>)</div>
</div>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=308&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/service-oriented-ui-architecture-in-the-world-of-web-desktop-and-mobile-applications.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dear Java</title>
		<link>http://blog.jeffhaynie.us/dear-java.html</link>
		<comments>http://blog.jeffhaynie.us/dear-java.html#comments</comments>
		<pubDate>Tue, 30 Jan 2007 02:42:08 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=81</guid>
		<description><![CDATA[Dear Java,
I&#8217;m sorry to have to write you this letter, and I hope you can forgive me for doing so.
I think we both know that our relationship has been over for some time. I have loved every minute of the ten years we have spent together. I feel bad it has to be over.
You see, [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Dear Java,</p>
<p>I&#8217;m sorry to have to write you this letter, and I hope you can forgive me for doing so.</p>
<p>I think we both know that our relationship has been over for some time. I have loved every minute of the ten years we have spent together. I feel bad it has to be over.</p>
<p>You see, the thing is I&#8217;ve been seeing someone new lately. Her name is <a href="http://www.ruby-lang.org/en/">Ruby</a>.  Ever since I started seeing her, things just haven&#8217;t been the same.  She&#8217;s quite beautiful and you&#8217;ve aged a lot over the past few years.  She&#8217;s fun and exciting.  You&#8217;ve gotten really boring.  She&#8217;s got some sexy friends she hangs out with, like <a href="http://www.rubyonrails.org/">Rails</a> and <a href="http://rubygems.org/">Gems</a>.  All your friends are really defensive and bitchy. She&#8217;s really flexible and works out a lot these days.  Lately, you&#8217;re really showing your age and you haven&#8217;t been keeping yourself fit &#8211; you&#8217;ve become pretty bloated and disorganized.  I&#8217;m sorry to say it, but you&#8217;re really losing it.</p>
<p>And one more thing. Your <a href="http://www.sun.com">parents</a> are really part of the problem and they are very controlling.  You should figure out how to get on your own.  Things would be much easier if you weren&#8217;t under their thumb.  I know they&#8217;ve told you that <a href="http://www.infoworld.com/article/06/06/27/79685_HNsunopensourcejava_1.html">you can part ways soon and get own your own</a>, but I think we know that that&#8217;s just another ploy and they&#8217;ll still control your life.  You need your independence if you&#8217;re going to have a chance at a good relationship.</p>
<p>All I can say is that I really hope we can still be friends. You&#8217;ve got a great personality and we&#8217;ve got a lot of great memories. I wish you the best of luck, please keep in touch.</p>
<p>Love always,</p>
<p>Jeff</p>
<p><img id="image329" alt="Technorati" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" /> technorati tags: <a rel="tag" href="http://www.technorati.com/tags/java">java</a>, <a rel="tag" href="http://www.technorati.com/tags/ruby">ruby</a>, <a rel="tag" href="http://www.technorati.com/tags/rubyonrails">rubyonrails</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=81&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/dear-java.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DJ Red Baron is a blogger</title>
		<link>http://blog.jeffhaynie.us/dj-red-baron-is-a-blogger.html</link>
		<comments>http://blog.jeffhaynie.us/dj-red-baron-is-a-blogger.html#comments</comments>
		<pubDate>Thu, 25 Jan 2007 05:51:14 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=79</guid>
		<description><![CDATA[I posted a slight blurb awhile back that the famous marcf (Marc Fleury if you didn&#8217;t already know), is now going by &#8220;DJ Red Baron&#8221;.  Of course, Marc told me this over a lunch a couple weeks ago &#8211; and I about fell out of my seat laughing.  He&#8217;s blogging about it if [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I posted a <a href="http://blog.jeffhaynie.us/jboss-revenue-for-red-hat-is-significant.html">slight blurb</a> awhile back that the famous marcf (Marc Fleury if you didn&#8217;t already know), is now going by &#8220;DJ Red Baron&#8221;.  Of course, Marc told me this over a lunch a couple weeks ago &#8211; and I about fell out of my seat laughing.  He&#8217;s <a href="http://marcf.blogspot.com/index.html">blogging about it</a> if you&#8217;d like to read the craziness.<br />
You see, if you don&#8217;t know marcf, well &#8211; you wouldn&#8217;t understand.  Marc was the founder and CEO of <a href="http://www.jboss.com">JBoss</a>.  Yea, the company that sold for almost a half-billion dollars to <a href="http://www.redhat.com">Red Hat</a> last year.  So, Marc&#8217;s worth a lot of money &#8211; like $100 million.  And he&#8217;s on &#8220;paternity leave&#8221; &#8211; I think we know what that means.</p>
<p>So, he&#8217;s now milling around Atlanta <a href="http://marcf.blogspot.com/2007/01/working-street-part-ii-halo-lounge.html">looking for DJ gigs</a> and paying off poor DJs trying to make a buck on the side so he can spin his techno junk with his long finger nails (grown especially for the tablet he&#8217;s using for the spin).</p>
<p>Marc&#8217;s a funny dude.  Heck, Marc&#8217;s brilliant and very smart.  I guess I can&#8217;t blame him.  When you go from living in your father-in-law&#8217;s house to $100 million in five years &#8211; well, I guess sometimes you&#8217;re prone to do weird stuff.  But, that&#8217;s cool. I&#8217;d like to have a hundred million and have the freedom to roam local bars looking for a gig or teaching math at the international school.<br />
I swear, I&#8217;m going to try and get Marc on video for my <a href="http://www.southernfriedtech.com">new video show</a> &#8211; so I can show it off to the world.  It&#8217;s almost unbelieveable.  Mr. JBoss, Mr. Java, Mr. Millionaire &#8211; roaming the crappy Atlanta club scene with his JBoss backpack and tablet gizmo strapped to his back.  That&#8217;s priceless.</p>
<p><img alt="Technorati" id="image329" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" /> technorati tags: <a rel="tag" href="http://www.technorati.com/tags/jboss">jboss</a>, <a rel="tag" href="http://www.technorati.com/tags/redhat">redhat</a>, <a rel="tag" href="http://www.technorati.com/tags/marcfleury">marcfleury</a>, <a rel="tag" href="http://www.technorati.com/tags/atlanta">atlanta</a>, <a rel="tag" href="http://www.technorati.com/tags/georgia">georgia</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=79&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/dj-red-baron-is-a-blogger.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JBoss revenue for Red Hat is significant</title>
		<link>http://blog.jeffhaynie.us/jboss-revenue-for-red-hat-is-significant.html</link>
		<comments>http://blog.jeffhaynie.us/jboss-revenue-for-red-hat-is-significant.html#comments</comments>
		<pubDate>Fri, 12 Jan 2007 07:28:50 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=67</guid>
		<description><![CDATA[From CNET:
Red Hat said its acquisition of the JBoss open-source Java server software would mean $22 million to $27 million in new revenue from June 2, 2006, when the acquisition was completed, and February 27, 2007, when the Linux seller&#8217;s quarter ends. The company&#8217;s quarterly report, released Tuesday, indicates that the company will just make [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>From <a href="http://news.com.com/2061-10795_3-6149715.html">CNET</a>:</p>
<blockquote><p>Red Hat said its acquisition of the JBoss open-source Java server software would mean $22 million to $27 million in new revenue from June 2, 2006, when the acquisition was completed, and February 27, 2007, when the Linux seller&#8217;s quarter ends. The company&#8217;s quarterly report, released Tuesday, indicates that the company will just make that goal.</p></blockquote>
<p>Who cares?  Well, first of all, <a href="http://www.redhat.com">Red Hat</a> chief Matthew Szulik fired almost 80% of the sales staff in the first quarter after the <a href="http://www.jboss.com">JBoss</a> acquisition and placed the remaining sales team largely in an inside sales rep role.  A good number of people have left JBoss &#8211; including Marc Fleury, Rob Beardon (COO), Cary Smith (CFO), Ben Sabrin (VP Sales) just to name a few at the top level.  OK, I get it &#8211; that makes sense.  You get acquired by a large company and it&#8217;s expected.</p>
<p>But, fire the sales team?  And not only did he fire them, during the firing, he completely lambasted them and insulted the ones remaining &#8211; according to inside sources.</p>
<p>What I love about this story is that Red Hat, even among their recent incompetence in dealing with the JBoss acquisition, can&#8217;t hardly screw up their momentum.  And, this is such a JBoss story.  Among all the negative publicity and against all odds &#8211; they still somehow pull it off.  Good for them.</p>
<p>And what&#8217;s Marc&#8217;s take on the whole thing?  Given that he&#8217;s previewing as a House DJ at a local club here in Atlanta tomorrow night, I would bet his reaction would be &#8220;I really don&#8217;t care&#8221; (with some expletives intermixed).  And if I made what he made, I wouldn&#8217;t either.</p>
<p><img alt="Technorati" id="image329" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" /> technorati tags: <a rel="tag" href="http://www.technorati.com/tags/jboss">jboss</a>, <a rel="tag" href="http://www.technorati.com/tags/redhat">redhat</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=67&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/jboss-revenue-for-red-hat-is-significant.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seam(less) Web Application Framework Released</title>
		<link>http://blog.jeffhaynie.us/seamless-web-application-framework-released.html</link>
		<comments>http://blog.jeffhaynie.us/seamless-web-application-framework-released.html#comments</comments>
		<pubDate>Wed, 03 Jan 2007 04:59:18 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Seam(less)]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=56</guid>
		<description><![CDATA[Today, we introduced the Seam(less) web application framework.  The project uses the open source Apache Software License, version 2.0 for flexibility.  You can download Seam(less) from Sourceforge.  We have also setup a Google discussion group.
We started Seam(less) because we believe that Ajax has enabled much more than rich web client interfaces.  [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Today, we introduced the <a href="http://www.hakano.org/introducing-seamless.html">Seam(less) web application framework</a>.  The <a href="http://www.sourceforge.net/projects/seamless-web">project</a> uses the open source <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License, version 2.0</a> for flexibility.  You can download Seam(less) from <a href="http://sourceforge.net/project/showfiles.php?group_id=184499">Sourceforge</a>.  We have also setup a Google <a href="http://groups.google.com/group/seamless-web?hl=en">discussion group</a>.</p>
<p>We started <strong>Seam(less)</strong> because we believe that <a href="http://en.wikipedia.org/wiki/AJAX">Ajax</a> has enabled much more than rich web client interfaces.  We believe it has paved the way for a paradigm shift in web programming &#8211; a shift away from <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a>-based frameworks towards lightly coupled Client/Server-based frameworks.<span id="more-56"></span></p>
<p>We believe these next generation frameworks should have the following characteristics:</p>
<ul>
<li><strong> Server language independence</strong></li>
</ul>
<blockquote><p>Developers should be able to use any language for sever development (e.g., Java, Ruby, PHP or .NET) and this choice should not impact the development of the user interface in any way or vice versa.</p></blockquote>
<ul>
<li><strong> Integrate the Client and Server via a lightweight, language independent message protocol</strong></li>
</ul>
<blockquote><p>You should be able to develop client and server components independently.  The contract between the client and the server should be a very simple message-based protocol.  This is the primary principle behind a <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">Service Oriented Architecture</a> (SOA), and we believe it&#8217;s mandatory if you want to rapidly build and deploy web-based services.</p>
<p>You should also be able to develop fully functional client prototypes without writing a single line of server code.  Furthermore, client prototypes should be convertible into production clients with little to no change.</p></blockquote>
<ul>
<li><strong></strong><strong> Leverage Ajax and DHTML without Javascript</strong></li>
</ul>
<blockquote><p>Using Ajax and DHTML requires a significant amount of Javascript.  We believe that rich client functionality should be possible without writing a single line of Javascript, but there should be Javascript-based hooks available for developers that desire more control.</p></blockquote>
<ul>
<li><strong></strong><strong> Cross-browser Support</strong></li>
</ul>
<blockquote><p>Application developers should not have to worry about the complexities of running an application across multiple web browser products and versions.</p></blockquote>
<p>With these characteristics in mind, we developed Seam(less).  We&#8217;ve been using the framework for almost six months.  It has been used on all of our projects since its development, and it has saved us hundreds of hours in development time.</p>
<p>We decided it was time to give Seam(less) to the community.  We hope you enjoy using it as much as we have.  We welcome any suggestions, comments or contributions that you would like to make. We will continue to update this site with examples that demonstrate how to use the Seam(less) framework.</p>
<p><img id="image329" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" alt="Technorati" /> technorati tags: <a href="http://www.technorati.com/tags/seamless" rel="tag">seamless</a>, <a href="http://www.technorati.com/tags/javascript" rel="tag">javascript</a>, <a href="http://www.technorati.com/tags/ajax" rel="tag">ajax</a>, <a href="http://www.technorati.com/tags/web2.0" rel="tag">web2.0</a>, <a href="http://www.technorati.com/tags/programming" rel="tag">programming</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=56&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/seamless-web-application-framework-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to disable Jetty default favicon</title>
		<link>http://blog.jeffhaynie.us/how-to-disable-jetty-default-favicon.html</link>
		<comments>http://blog.jeffhaynie.us/how-to-disable-jetty-default-favicon.html#comments</comments>
		<pubDate>Sat, 16 Dec 2006 02:32:59 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=49</guid>
		<description><![CDATA[We have a favicon setup on one of our new sites we&#8217;re deploying.  The favicon works fine under the HTML pages.  However, on other pages, the Jetty logo is displayed &#8211; how annoying.  After looking around and then finally digging in the source code, it appears that Jetty places a nice little [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>We have a <a href="http://en.wikipedia.org/wiki/Favicon" target="_blank">favicon</a> setup on one of our new sites we&#8217;re deploying.  The favicon works fine under the HTML pages.  However, on other pages, the <a href="http://www.mortbay.org/" target="_blank">Jetty</a> logo is displayed &#8211; how annoying.  After looking around and then finally digging in the source code, it appears that Jetty places a nice little hack to return their own favicon (for speed they claim) instead of returning it from the application directory.</p>
<p>Check out this beauty:</p>
<p><img id="image49" src="http://blog.jeffhaynie.us/wp-content/uploads/2006/12/jetty_favicon.png" alt="Jetty Favicon" /></p>
<p>You gotta love it.  It would have been better for them to check the existence of the file in the web application directory (and then cache the reference to it) rather than this sloppy crap.  Oh well, now how in the heck do you get rid of this?</p>
<p>Simple:</p>
<ol>
<li>open up <cite>jetty.xml</cite> from your <cite>$JETTY_HOME/etc</cite> directory in an editor</li>
<li>find the following:
<pre>&lt;New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/&gt;</pre>
</li>
<li>change to:
<pre>&lt;New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"&gt;
  &lt;Set name="serveIcon"&gt;false&lt;/Set&gt;
&lt;/New&gt;</pre>
</li>
<li>restart jetty and you&#8217;re set</li>
</ol>
<p><em>Note: You may have to clear your browser&#8217;s cache for him to see the new changes.</em></p>
<p><img id="image329" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" alt="Technorati" /> technorati tags: <a href="http://www.technorati.com/tags/jetty" rel="tag">jetty</a>, <a href="http://www.technorati.com/tags/favicon" rel="tag">favicon</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=49&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/how-to-disable-jetty-default-favicon.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JBoss in trouble?</title>
		<link>http://blog.jeffhaynie.us/jboss-in-trouble.html</link>
		<comments>http://blog.jeffhaynie.us/jboss-in-trouble.html#comments</comments>
		<pubDate>Wed, 29 Nov 2006 02:12:41 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=33</guid>
		<description><![CDATA[ Open source and management disputes by ZDNet&#8217;s Dana Blankenhorn &#8212; Marc spoke out of turn, saying he wasn&#8217;t happy with the R&#038;D investment he was getting from home office. In a traditional company, a division manager who speaks out of turn like this gets tossed out on their ear. His successor learns to keep [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><a title="Permalink" rel="bookmark" href="http://blogs.zdnet.com/open-source/?p=855"> Open source and management disputes</a> by <a href="http://zdnet.com">ZDNet</a>&#8217;s Dana Blankenhorn &#8212; Marc spoke out of turn, saying he wasn&#8217;t happy with the R&#038;D investment he was getting from home office. In a traditional company, a division manager who speaks out of turn like this gets tossed out on their ear. His successor learns to keep his head down and his mouth shut. But to do that here would be a huge mistake.</p>
<p>I&#8217;m no longer as connected to JBoss as I used to be. I once was one of the core committers of JBoss in the early days and contributed a good bit to JMX, JMX Remoting and JBoss Remoting.  I like to believe I have several really good colleagues on the &#8220;inside&#8221; such as Marc Fleury, Ben Sabrin (who RedHat canned like idiots), Bill Burke, Bela, Andrian, Scott Stark, Tom Elrod, Roy Russo,  and the likes &#8211; and several people who have worked for me in past startups.  However, the tide has shifted &#8211; albeit it starting shifting even before the RedHat takeover.</p>
<p>I&#8217;m sure that RedHat is gripping with the culture impact that JBoss brings to a rather large institution such as RedHat. RedHat is as slow and risk adverse as any public software company likes to be these days.  RedHat innovates, but in a different dimension in both time and technology &#8211; and on different terms than a small, surviving startup like JBoss.  RedHat strives not so much on cowboys who tame the wild west, but on a consistent output in mediocre projects with a consistent customer base.</p>
<p>So, I can understand Marc&#8217;s frustration.  I know Marc and I understand his passion as an entrepreneur.  But more than an entrepreneur and programmer &#8211; Marc is foremost a <strong>visionary</strong> and <strong>passionate leader of what is possible</strong>.  People who drive vision and passion are motivated by different outcomes than people who are driven by consistent results scrutinized by Wall Street.  And people who manage wall street, and to the same degree, a company with thousands of employees or more, manage largely to the lower (note the use of <em>lower</em>, not necessarily <em>lowest</em>) denominator.  Marc manages the top 5% of the people his stead. The other 95% he should leave to experts who are &#8220;professional managers&#8221;. Marc needs to be surrounded by the best and the brightest &#8211; not your average 9-to-5&#8242;er.  That&#8217;s not to say that only people like Marc are better than others &#8211; it&#8217;s simply to suggest that Marc is motivated by his desire for doing the impossible, bucking the norm, taking on the big dog &#8211; driving excellence out of people that are better than excellent.  And people like Marc, well, &#8230; they flock together like bird&#8217;s of a feather &#8211; to use an old adage.</p>
<p>Marc is wrong when he say&#8217;s &#8220;he&#8217;s got no power&#8221;.  He&#8217;s certainly not <em>powerless</em>.  If anything, he&#8217;s got a good deal of power &#8211; but it&#8217;s being completely misguided, misdirected &#8211; and worse of all, completely <strong>untapped</strong>.  Marc&#8217;s talent, sadly, is being completely wasted &#8211; not so much in salary &#8211; but in capabilities of vision, in technical foresight, in shaping RedHat into become a better company by creating more value.  However, Marc doesn&#8217;t have power in the traditional sense that he&#8217;s accustomed to in previous days with JBoss.  He doesn&#8217;t have power in the traditional corporate hierarchy &#8211; his power lays, for a little bit longer, in the hearts and souls of the core developers.  Not all of which are connected still to the JBoss codebase.  Marc has loyalty &#8211; something that he&#8217;s built up over time and something that has also caused division and much hatred among lots of people.  What Marc needs to do &#8211; and which will be the defining moment for both RedHat and Marc Fluery &#8211; is synthesize this energy, this passion and his unique position &#8211; to turn RedHat and the JBoss legacy into a competitive weapon in the ever increasing Linux and Java evolution.  This is no easy task and one that I&#8217;m not sure can easily be accomplished at RedHat with the current management team.</p>
<p>So, being a RedHat shareholder, I would like to see a management team shakeup.  I think we need to get new blood in the CEO office &#8211; and I think we need someone with a little more fire in the their belly that can bring in a new team to move RedHat to the next level.  I think RedHat&#8217;s Matthew J. Szulik should retire and <em>replace himself</em> with someone that can bring some new life into the company and who understands how to expand RedHat&#8217;s portfolio to compete with Microsoft (and now Apple), IBM and Novell.   What we need most, is a team that can leverage Marc Fleury&#8217;s passion and skill for getting the best and helping shape technology&#8217;s future.  I don&#8217;t believe the current team will be able to extract &#8211; or better yet, motivate &#8211; value from the JBoss asset.  What JBoss brings the most to the table is not just the open source code &#8211; it&#8217;s the expertise, the commitment, the experience.  The code is just a reflection of that, the by-product of passionate people dedicated to a cause larger than themselves.</p>
<p>At least &#8230;. for a little bit longer.</p>
<p><img alt="Technorati" id="image329" src="http://freehogg.wordpress.com/files/2006/04/technorati.gif" /> technorati tags: <a rel="tag" href="http://www.technorati.com/tags/jboss">jboss</a>, <a rel="tag" href="http://www.technorati.com/tags/redhat">redhat</a>, <a rel="tag" href="http://www.technorati.com/tags/fleury">fleury</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=33&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/jboss-in-trouble.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Image Verification Utility for Form submission</title>
		<link>http://blog.jeffhaynie.us/image-verification-utility-for-form-submission.html</link>
		<comments>http://blog.jeffhaynie.us/image-verification-utility-for-form-submission.html#comments</comments>
		<pubDate>Fri, 23 Jun 2006 06:35:32 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=25</guid>
		<description><![CDATA[ Ever wanted one of those cool HTML form submission pages where you can make sure that only humans are submitting form data, and not machines (like spam bots)?   Well, no you can have one. I created a simple Java utility class for generating the dynamic image in PNG format and then a [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><img src="http://www.jeffhaynie.us/images/imgverify.png" alt="image verify screenshot" align="left"/> Ever wanted one of those cool HTML form submission pages where you can make sure that only humans are submitting form data, and not machines (like spam bots)?   Well, no you can have one. I created a simple Java utility class for generating the dynamic image in PNG format and then a simple servlet and web page for testing.  You can download the <a href="http://www.jeffhaynie.us/demo/imageverify.zip">source and demo</a> here. Good luck!</p>
<h3>Utility class</h3>
<pre><span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>  1: </span><font COLOR=GREEN><i>/**
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  2: </span> * Copyright (c) 2006 by Jeff Haynie
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  3: </span> *

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  4: </span> * Licensed under the Apache License, Version 2.0 (the "License");
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>  5: </span> * you may not use this file except in compliance with the License.
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  6: </span> *
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  7: </span> * You may obtain a copy of the License at
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  8: </span> * http://www.apache.org/licenses/LICENSE-2.0

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>  9: </span> *
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 10: </span> * Unless required by applicable law or agreed to in writing,
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 11: </span> * software distributed under the License is distributed on an "AS IS" BASIS,
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 12: </span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 13: </span> * See the License for the specific language governing permissions and

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 14: </span> * limitations under the License.
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 15: </span>*/</i></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 16: </span><font COLOR=RED><b>package</b></font> us<font COLOR=BLUE SIZE=+1><b>.</b></font>jeffhaynie<font COLOR=BLUE SIZE=+1><b>.</b></font>image<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 17: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 18: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>awt<font COLOR=BLUE SIZE=+1><b>.</b></font>Color<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 19: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>awt<font COLOR=BLUE SIZE=+1><b>.</b></font>Font<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 20: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>awt<font COLOR=BLUE SIZE=+1><b>.</b></font>Graphics2D<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 21: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>awt<font COLOR=BLUE SIZE=+1><b>.</b></font>geom<font COLOR=BLUE SIZE=+1><b>.</b></font>AffineTransform<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 22: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>awt<font COLOR=BLUE SIZE=+1><b>.</b></font>image<font COLOR=BLUE SIZE=+1><b>.</b></font>BufferedImage<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 23: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>io<font COLOR=BLUE SIZE=+1><b>.</b></font>IOException<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 24: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>io<font COLOR=BLUE SIZE=+1><b>.</b></font>OutputStream<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 25: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>util<font COLOR=BLUE SIZE=+1><b>.</b></font>Random<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 26: </span><font COLOR=RED><b>import</b></font> java<font COLOR=BLUE SIZE=+1><b>.</b></font>util<font COLOR=BLUE SIZE=+1><b>.</b></font>UUID<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 27: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 28: </span><font COLOR=RED><b>import</b></font> javax<font COLOR=BLUE SIZE=+1><b>.</b></font>imageio<font COLOR=BLUE SIZE=+1><b>.</b></font>ImageIO<font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 29: </span>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 30: </span><font COLOR=GREEN><i>/**
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 31: </span> * ImageVerification is a simple utility class for
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 32: </span> * creating an image verification PNG file that will
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 33: </span> * allow you to make sure that only a human can read

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 34: </span> * the alphanumeric values and enter them into a text
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 35: </span> * field during verification. &lt;P&gt;
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 36: </span> *
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 37: </span> * Make sure that when you can &lt;tt&gt;getVerificationCode&lt;/tt&gt;

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 38: </span> * you don't encode the value in the URL or inside the
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 39: </span> * HTML form - otherwise, this whole excerise is pointless
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 40: </span> * (dummy!).
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 41: </span> *
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 42: </span> * @author Jeff Haynie

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 43: </span> * @copyright Copyright (c) by Jeff Haynie. All Rights Reserved.
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 44: </span> */</i></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 45: </span><font COLOR=RED><b>public</b></font> <font COLOR=RED><b>class</b></font> ImageVerification
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 46: </span><font COLOR=BLUE SIZE=+1><b>{</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 47: </span>    <font COLOR=RED><b>private</b></font> String value<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 48: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 49: </span>    <font COLOR=RED><b>public</b></font> ImageVerification <font COLOR=BLUE SIZE=+1><b>(</b></font>OutputStream out<font COLOR=BLUE SIZE=+1><b>)</b></font> <font COLOR=RED><b>throws</b></font> IOException

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 50: </span>    <font COLOR=BLUE SIZE=+1><b>{</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 51: </span>        <font COLOR=RED><b>this</b></font><font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>50</font><font COLOR=BLUE SIZE=+1><b>,</b></font>120<font COLOR=BLUE SIZE=+1><b>,</b></font>out<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 52: </span>    <font COLOR=BLUE SIZE=+1><b>}</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 53: </span>    <font COLOR=RED><b>public</b></font> ImageVerification <font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>int</b></font> height<font COLOR=BLUE SIZE=+1><b>,</b></font> <font COLOR=RED><b>int</b></font> width<font COLOR=BLUE SIZE=+1><b>,</b></font> OutputStream out<font COLOR=BLUE SIZE=+1><b>)</b></font> <font COLOR=RED><b>throws</b></font> IOException

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 54: </span>    <font COLOR=BLUE SIZE=+1><b>{</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 55: </span>        BufferedImage bimage <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=RED><b>new</b></font> BufferedImage<font COLOR=BLUE SIZE=+1><b>(</b></font>width<font COLOR=BLUE SIZE=+1><b>,</b></font> height<font COLOR=BLUE SIZE=+1><b>,</b></font> BufferedImage<font COLOR=BLUE SIZE=+1><b>.</b></font>TYPE_INT_RGB<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 56: </span>        Random rand<font COLOR=BLUE SIZE=+1>=</font><font COLOR=RED><b>new</b></font> Random<font COLOR=BLUE SIZE=+1><b>(</b></font>System<font COLOR=BLUE SIZE=+1><b>.</b></font>currentTimeMillis<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 57: </span>        Graphics2D g <font COLOR=BLUE SIZE=+1>=</font> bimage<font COLOR=BLUE SIZE=+1><b>.</b></font>createGraphics<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 58: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 59: </span>        <font COLOR=GREEN><i>// create a random color

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 60: </span></i></font>        Color color <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=RED><b>new</b></font> Color<font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 61: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 62: </span>        <font COLOR=GREEN><i>// the the background to the random color to fill the
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 63: </span></i></font>        <font COLOR=GREEN><i>// background and make it darker
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 64: </span></i></font>        g<font COLOR=BLUE SIZE=+1><b>.</b></font>setColor<font COLOR=BLUE SIZE=+1><b>(</b></font>color<font COLOR=BLUE SIZE=+1><b>.</b></font>darker<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 65: </span>        g<font COLOR=BLUE SIZE=+1><b>.</b></font>fillRect<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>,</b></font> <font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>,</b></font> width<font COLOR=BLUE SIZE=+1><b>,</b></font> height<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 66: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 67: </span>        <font COLOR=GREEN><i>// set the font
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 68: </span></i></font>        g<font COLOR=BLUE SIZE=+1><b>.</b></font>setFont<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>new</b></font> Font<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=PURPLE>"arial"</font><font COLOR=BLUE SIZE=+1><b>,</b></font>Font<font COLOR=BLUE SIZE=+1><b>.</b></font>BOLD<font COLOR=BLUE SIZE=+1><b>,</b></font><font COLOR=BROWN>36</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 69: </span>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 70: </span>        <font COLOR=GREEN><i>// generate a random value
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 71: </span></i></font>        <font COLOR=RED><b>this</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>value <font COLOR=BLUE SIZE=+1>=</font> UUID<font COLOR=BLUE SIZE=+1><b>.</b></font>randomUUID<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>toString<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>replace<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=PURPLE>"-"</font><font COLOR=BLUE SIZE=+1><b>,</b></font><font COLOR=PURPLE>""</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>substring<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>,</b></font>5<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 72: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 73: </span>        <font COLOR=RED><b>int</b></font> w <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BLUE SIZE=+1><b>(</b></font>g<font COLOR=BLUE SIZE=+1><b>.</b></font>getFontMetrics<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>stringWidth<font COLOR=BLUE SIZE=+1><b>(</b></font>value<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 74: </span>        <font COLOR=RED><b>int</b></font> d <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BLUE SIZE=+1><b>(</b></font>g<font COLOR=BLUE SIZE=+1><b>.</b></font>getFontMetrics<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>getDescent<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 75: </span>        <font COLOR=RED><b>int</b></font> a <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BLUE SIZE=+1><b>(</b></font>g<font COLOR=BLUE SIZE=+1><b>.</b></font>getFontMetrics<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>getMaxAscent<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 76: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 77: </span>        <font COLOR=RED><b>int</b></font> x <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>,</b></font> y <font COLOR=BLUE SIZE=+1>=</font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 78: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 79: </span>        <font COLOR=GREEN><i>// randomly set the color and draw some straight lines through it
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 80: </span></i></font>        <font COLOR=RED><b>for</b></font> <font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>int</b></font> i <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font> i <font COLOR=BLUE SIZE=+1>&lt;</font> height<font COLOR=BLUE SIZE=+1><b>;</b></font> i <font COLOR=BLUE SIZE=+1>+</font><font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BROWN>5</font><font COLOR=BLUE SIZE=+1><b>)</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 81: </span>        <font COLOR=BLUE SIZE=+1><b>{</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 82: </span>           g<font COLOR=BLUE SIZE=+1><b>.</b></font>setColor<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>new</b></font> Color<font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 83: </span>           g<font COLOR=BLUE SIZE=+1><b>.</b></font>drawLine<font COLOR=BLUE SIZE=+1><b>(</b></font>x<font COLOR=BLUE SIZE=+1><b>,</b></font> y <font COLOR=BLUE SIZE=+1>+</font> i<font COLOR=BLUE SIZE=+1><b>,</b></font> width<font COLOR=BLUE SIZE=+1><b>,</b></font> y<font COLOR=BLUE SIZE=+1>+</font>i<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 84: </span>        <font COLOR=BLUE SIZE=+1><b>}</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 85: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 86: </span>        <font COLOR=GREEN><i>// reset x and y
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 87: </span></i></font>        x<font COLOR=BLUE SIZE=+1>=</font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 88: </span>        y<font COLOR=BLUE SIZE=+1>=</font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 89: </span>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 90: </span>        <font COLOR=GREEN><i>// randomly set the color of the lines and just draw think at an angle
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 91: </span></i></font>        <font COLOR=RED><b>for</b></font> <font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>int</b></font> i <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font> i <font COLOR=BLUE SIZE=+1>&lt;</font> height<font COLOR=BLUE SIZE=+1><b>;</b></font> i <font COLOR=BLUE SIZE=+1>+</font><font COLOR=BLUE SIZE=+1>=</font> <font COLOR=BROWN>5</font><font COLOR=BLUE SIZE=+1><b>)</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 92: </span>        <font COLOR=BLUE SIZE=+1><b>{</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 93: </span>           g<font COLOR=BLUE SIZE=+1><b>.</b></font>setColor<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>new</b></font> Color<font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 94: </span>           g<font COLOR=BLUE SIZE=+1><b>.</b></font>drawLine<font COLOR=BLUE SIZE=+1><b>(</b></font>x<font COLOR=BLUE SIZE=+1><b>,</b></font> y <font COLOR=BLUE SIZE=+1>+</font> d <font COLOR=BLUE SIZE=+1>-</font> i<font COLOR=BLUE SIZE=+1><b>,</b></font> width <font COLOR=BLUE SIZE=+1>+</font> w<font COLOR=BLUE SIZE=+1><b>,</b></font> height <font COLOR=BLUE SIZE=+1>+</font> d <font COLOR=BLUE SIZE=+1>-</font> i<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'> 95: </span>        <font COLOR=BLUE SIZE=+1><b>}</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 96: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 97: </span>        <font COLOR=GREEN><i>// randomly set the color and make it really bright for more readability
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 98: </span></i></font>        g<font COLOR=BLUE SIZE=+1><b>.</b></font>setColor<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>new</b></font> Color<font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>,</b></font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>255</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>brighter<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>brighter<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'> 99: </span>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>100: </span>        <font COLOR=GREEN><i>// we need to position the text in the center of the box
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>101: </span></i></font>        x <font COLOR=BLUE SIZE=+1>=</font> width<font COLOR=BLUE SIZE=+1>/</font><font COLOR=BROWN>2</font> <font COLOR=BLUE SIZE=+1>-</font> w<font COLOR=BLUE SIZE=+1>/</font><font COLOR=BROWN>2</font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>102: </span>        y <font COLOR=BLUE SIZE=+1>=</font> height<font COLOR=BLUE SIZE=+1>/</font><font COLOR=BROWN>2</font> <font COLOR=BLUE SIZE=+1>+</font> a<font COLOR=BLUE SIZE=+1>/</font><font COLOR=BROWN>2</font> <font COLOR=BLUE SIZE=+1>-</font> <font COLOR=BROWN>2</font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>103: </span>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>104: </span>        <font COLOR=GREEN><i>// affine transform is used to rock the text a bit
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>105: </span></i></font>        AffineTransform fontAT <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=RED><b>new</b></font> AffineTransform<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>106: </span>        <font COLOR=RED><b>int</b></font> xp <font COLOR=BLUE SIZE=+1>=</font> x<font COLOR=BLUE SIZE=+1>-</font><font COLOR=BROWN>2</font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>107: </span>        <font COLOR=GREEN><i>// walk through each character and rotate it randomly
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>108: </span></i></font>        <font COLOR=RED><b>for</b></font> <font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=RED><b>int</b></font> c<font COLOR=BLUE SIZE=+1>=</font><font COLOR=BROWN>0</font><font COLOR=BLUE SIZE=+1><b>;</b></font>c<font COLOR=BLUE SIZE=+1>&lt;</font>value<font COLOR=BLUE SIZE=+1><b>.</b></font>length<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>c<font COLOR=BLUE SIZE=+1></font><font COLOR=BLUE SIZE=+1>+</font><font COLOR=BLUE SIZE=+1>+</font><font COLOR=BLUE SIZE=+1><b>)</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>109: </span>        <font COLOR=BLUE SIZE=+1><b>{</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>110: </span>            <font COLOR=GREEN><i>// apply a random radian either left or right (left is half since it's too far back)
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>111: </span></i></font>            <font COLOR=RED><b>int</b></font> rotate <font COLOR=BLUE SIZE=+1>=</font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>20</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>112: </span>            fontAT<font COLOR=BLUE SIZE=+1><b>.</b></font>rotate<font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextBoolean<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font> <font COLOR=BLUE SIZE=+1>?</font> Math<font COLOR=BLUE SIZE=+1><b>.</b></font>toRadians<font COLOR=BLUE SIZE=+1><b>(</b></font>rotate<font COLOR=BLUE SIZE=+1><b>)</b></font> <font COLOR=BLUE SIZE=+1>:</font> <font COLOR=BLUE SIZE=+1>-</font>Math<font COLOR=BLUE SIZE=+1><b>.</b></font>toRadians<font COLOR=BLUE SIZE=+1><b>(</b></font>rotate<font COLOR=BLUE SIZE=+1>/</font><font COLOR=BROWN>2</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>113: </span>            Font fx <font COLOR=BLUE SIZE=+1>=</font> <font COLOR=RED><b>new</b></font> Font<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=PURPLE>"arial"</font><font COLOR=BLUE SIZE=+1><b>,</b></font> Font<font COLOR=BLUE SIZE=+1><b>.</b></font>BOLD<font COLOR=BLUE SIZE=+1><b>,</b></font> <font COLOR=BROWN>36</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>deriveFont<font COLOR=BLUE SIZE=+1><b>(</b></font>fontAT<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>114: </span>            g<font COLOR=BLUE SIZE=+1><b>.</b></font>setFont<font COLOR=BLUE SIZE=+1><b>(</b></font>fx<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>115: </span>            String ch <font COLOR=BLUE SIZE=+1>=</font> String<font COLOR=BLUE SIZE=+1><b>.</b></font>valueOf<font COLOR=BLUE SIZE=+1><b>(</b></font>value<font COLOR=BLUE SIZE=+1><b>.</b></font>charAt<font COLOR=BLUE SIZE=+1><b>(</b></font>c<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>116: </span>            <font COLOR=RED><b>int</b></font> ht <font COLOR=BLUE SIZE=+1>=</font> rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextInt<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BROWN>3</font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>117: </span>            <font COLOR=GREEN><i>// draw the string and move the y either up or down slightly

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>118: </span></i></font>            g<font COLOR=BLUE SIZE=+1><b>.</b></font>drawString<font COLOR=BLUE SIZE=+1><b>(</b></font>ch<font COLOR=BLUE SIZE=+1><b>,</b></font> xp<font COLOR=BLUE SIZE=+1><b>,</b></font> y <font COLOR=BLUE SIZE=+1>+</font> <font COLOR=BLUE SIZE=+1><b>(</b></font>rand<font COLOR=BLUE SIZE=+1><b>.</b></font>nextBoolean<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1>?</font><font COLOR=BLUE SIZE=+1>-</font>ht<font COLOR=BLUE SIZE=+1>:</font>ht<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>119: </span>            <font COLOR=GREEN><i>// move our pointer
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>120: </span></i></font>            xp<font COLOR=BLUE SIZE=+1>+</font><font COLOR=BLUE SIZE=+1>=</font>g<font COLOR=BLUE SIZE=+1><b>.</b></font>getFontMetrics<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>stringWidth<font COLOR=BLUE SIZE=+1><b>(</b></font>ch<font COLOR=BLUE SIZE=+1><b>)</b></font> <font COLOR=BLUE SIZE=+1>+</font> <font COLOR=BROWN>2</font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>121: </span>        <font COLOR=BLUE SIZE=+1><b>}</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>122: </span>        <font COLOR=GREEN><i>// write out the PNG file
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>123: </span></i></font>        ImageIO<font COLOR=BLUE SIZE=+1><b>.</b></font>write<font COLOR=BLUE SIZE=+1><b>(</b></font>bimage<font COLOR=BLUE SIZE=+1><b>,</b></font> <font COLOR=PURPLE>"png"</font><font COLOR=BLUE SIZE=+1><b>,</b></font> out<font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>124: </span>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>125: </span>        <font COLOR=GREEN><i>// make sure your clean up the graphics object
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>126: </span></i></font>        g<font COLOR=BLUE SIZE=+1><b>.</b></font>dispose<font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font><font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>127: </span>    <font COLOR=BLUE SIZE=+1><b>}</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>128: </span>    <font COLOR=GREEN><i>/**
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>129: </span>     * return the value to check for when the user enters it in. Make sure you
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>130: </span>     * store this off in the session or something like a database and NOT in the
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>131: </span>     * form of the webpage since the whole point of this exercise is to ensure that
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>132: </span>     * only humans and not machines are entering the data.
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>133: </span>     *

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>134: </span>     * @return
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>135: </span>     */</i></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>136: </span>    <font COLOR=RED><b>public</b></font> String getVerificationValue <font COLOR=BLUE SIZE=+1><b>(</b></font><font COLOR=BLUE SIZE=+1><b>)</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>137: </span>    <font COLOR=BLUE SIZE=+1><b>{</b></font>

<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>138: </span>        <font COLOR=RED><b>return</b></font> <font COLOR=RED><b>this</b></font><font COLOR=BLUE SIZE=+1><b>.</b></font>value<font COLOR=BLUE SIZE=+1><b>;</b></font>
<span style='font-style:normal;color:#eeeeee;background-color:#ffffff;'>139: </span>    <font COLOR=BLUE SIZE=+1><b>}</b></font>
<span style='font-style:normal;color:#cccccc;background-color:#ffffff;'>140: </span><font COLOR=BLUE SIZE=+1><b>}</b></font>
</pre>
<hr />
<p><b>Technorati Tags:</b> <a href="http://www.technorati.com/tags/image" rel="tag">image</a>, <a href="http://www.technorati.com/tags/verification" rel="tag">verification</a>, <a href="http://www.technorati.com/tags/form" rel="tag">form</a>, <a href="http://www.technorati.com/tags/submission" rel="tag">submission</a>, <a href="http://www.technorati.com/tags/html" rel="tag">html</a>, <a href="http://www.technorati.com/tags/java" rel="tag">java</a>, <a href="http://www.technorati.com/tags/security" rel="tag">security</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=25&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/image-verification-utility-for-form-submission.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss Collaboration Server + Voice?</title>
		<link>http://blog.jeffhaynie.us/jboss-collaboration-server-voice.html</link>
		<comments>http://blog.jeffhaynie.us/jboss-collaboration-server-voice.html#comments</comments>
		<pubDate>Tue, 23 May 2006 04:43:03 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=20</guid>
		<description><![CDATA[The JBoss guys have released a pretty nice new product, (well, at least it&#8217;s a new name), called the JBoss Collaboration Server.
What would really be nice would be to add Voice features to the collaboration suite, something that both Microsoft and Siemens have done to their respective competitive products.  This would provide a nice [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>The <a href="http://www.jboss.org">JBoss</a> guys have <a href="http://jboss.org/jbossBlog/blog/acoliver/2006/05/15/JBoss_Collaboration_Server_1_0M5_pre1.txt">released</a> a pretty nice new product, (well, at least it&#8217;s a new name), called the JBoss Collaboration Server.</p>
<p>What would really be nice would be to add Voice features to the collaboration suite, something that both <a href="http://www.microsoft.com">Microsoft</a> and <a href="http://www.siemens.com">Siemens</a> have done to their respective competitive products.  This would provide a nice alternative to Asterisk, one which could be based on a Java specification (JSR-116 or the new upcoming JSR-289), and one which would be based on standards such as VoiceXML, CCXML and MRCP.</p>
<p>But, then again, that would require JBoss to enter the telecom space I suppose and that might be challenging for them as Ken Lee&#8217;s pointed out in his <a href="http://dev2dev.bea.com/blog/jusmagk/archive/2006/02/oracle_buys_non.html">blog</a> about JBoss-based HotSip.  JBoss only has one real telecom evangelist, <a href="http://ivelinivanov.blogspot.com/">Ivelin Ivanov</a>.  But Ivelin&#8217;s <a href="http://www.mobicents.org/">Mobicents</a> has almost no play inside of the JBoss mind-meld it seems on the surface &#8212; to no fault of Ivelin&#8217;s I would suspect.</p>
<p>Maybe JBoss+RedHat should buy <a href="http://www.asterisk.org">Asterisk</a>?  That would combine two large open source communities &#8211; sure &#8211; but would be somewhat of a technical disaster.  The Asterisk codebase is horrible and pretty unstable.  It&#8217;s also C (not even fully C++) and would be difficult to merge into the JBoss codebase, which of course is Java, and fairly next generation.</p>
<hr />
<p><b>Technorati Tags:</b> <a href="http://www.technorati.com/tags/jboss" rel="tag">jboss</a>, <a href="http://www.technorati.com/tags/sip" rel="tag">sip</a>, <a href="http://www.technorati.com/tags/voip" rel="tag">voip</a>, <a href="http://www.technorati.com/tags/redhat" rel="tag">redhat</a>, <a href="http://www.technorati.com/tags/asterisk" rel="tag">asterisk</a>, <a href="http://www.technorati.com/tags/java" rel="tag">java</a></p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=20&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/jboss-collaboration-server-voice.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby + Java?</title>
		<link>http://blog.jeffhaynie.us/ruby-java.html</link>
		<comments>http://blog.jeffhaynie.us/ruby-java.html#comments</comments>
		<pubDate>Sat, 04 Feb 2006 07:26:19 +0000</pubDate>
		<dc:creator>Jeff Haynie</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.jeffhaynie.us/?p=11</guid>
		<description><![CDATA[I&#8217;m very interested in Ruby and have been playing around with Rails quite a bit. It&#8217;s amazing how much easier it easy to create fairly powerful web applications.
I&#8217;ve found a nice blog by Rick Bradley on moving from Java to Rails.
One of the problems I&#8217;m facing right now is that RoR offers very tight integration [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m very interested in <a href="http://www.ruby-lang.org/en/">Ruby</a> and have been playing around with <a href="http://www.rubyonrails.org/">Rails</a> quite a bit. It&#8217;s amazing how much easier it easy to create fairly powerful web applications.</p>
<p>I&#8217;ve found a <a href="http://rewrite.rickbradley.com/pages/moving_to_rails/">nice blog</a> by Rick Bradley on moving from Java to Rails.</p>
<p>One of the problems I&#8217;m facing right now is that RoR offers very tight integration ala ActiveRecord into the backend and the view/controller are somewhat tightly coupled together &#8211; in the since that I&#8217;d like to use a pure XML over HTTP backend for some of the web components.  I&#8217;d really like to integrate to existing web services at the web side and only use rails for certain backend capabilities that don&#8217;t exist in the Java tier today; this way I can leverage the best of both worlds.</p>
<p>It seems like there might be another lightweight alternative to RoR for Java &#8211; called <a href="http://rifers.org/about">Rife</a>.  Rife is pretty impressive too and pure Java.  The other advantage of Rife is that it integrates into <a href="http://www.springframework.org">Spring</a>.</p>
<p>One of the things that probably irks me the most about Ruby is the licensing. It&#8217;s either GPL or some bulleted list of constraints. This guy should follow RoR and just make it MIT style.</p>
<img src="http://blog.jeffhaynie.us/?ak_action=api_record_view&id=11&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.jeffhaynie.us/ruby-java.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

