<?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>Transentia &#187; Java</title>
	<atom:link href="http://wordpress.transentia.com.au/wordpress/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://wordpress.transentia.com.au/wordpress</link>
	<description>transentia pty. ltd.; development, consulting, training at the leading-edge of technology</description>
	<lastBuildDate>Tue, 13 Dec 2011 03:01:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>More Java Futures Speculation</title>
		<link>http://wordpress.transentia.com.au/wordpress/2010/10/30/more-java-futures-speculation/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2010/10/30/more-java-futures-speculation/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 00:32:21 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/wordpress/?p=1139</guid>
		<description><![CDATA[For what it is worth, here are my current postulations and position regarding &#8220;Where to now, for Java&#8221;&#8230; Consider this: Microsoft&#8217;s customers don&#8217;t buy into C# (regardless of what most techies will tell you), they buy the Visual Studio packaged, pre-canned development pathway to development nirvana. They take on a particular packaged view of the [...]]]></description>
			<content:encoded><![CDATA[<p>For what it is worth, here are my current postulations and position regarding &#8220;Where to now, for Java&#8221;&#8230;</p>
<p>Consider this: Microsoft&#8217;s customers don&#8217;t buy into C# (regardless of what most techies will tell you), they buy the Visual Studio packaged, pre-canned development pathway to development nirvana. They take on a particular packaged view of the world. Then they pretty much sit back and go where Microsoft leads them. It&#8217;s a well-marketed, appealling, popular, putatively risk-free and well-trodden strategy.</p>
<p>(Dont&#8217; kid yourself that the marketing is actually <em>real</em>, however. Script-kiddies will produce script-kiddy grade coding, regardless of the quality of the marketing, or the prettiness of the tool. Trust me, I&#8217;ve seen the code! The <em>only</em> way out of this is training and experience. There&#8217;s a cost there, both dollars and time, so the professional managers that now rule our world will do almost anything to avoid that cost.)</p>
<p>The Microsoft market is notoriously <em>not</em> innovation-driven. The customers and practitioners typically don&#8217;t care less about better ways of skinning the cat, as long as it gets skinned somehow. </p>
<p>On the surface, this seems fine and dandy but let&#8217;s look around our modern world to see if innovation actually is or is not needed&#8230;</p>
<ul>
<li>I am pretty happy that I don&#8217;t drive a Model-T Ford: love those modern innovations like anti-lock brakes, seatbelts, aircon, airbags pneumatic tyres and suspension systems. I am VERY happy that I don&#8217;t have to ride a horse&#8230;or a donkey.</li>
<li>I&#8217;m grateful for penicillin.</li>
<li>Being able to step into a Boeing 747 to travel half-way around the planet has certainly changed my life.</li>
<li><em>Love</em> the <a href="http://en.wikipedia.org/wiki/Lidocaine">lidocaine</a> that my dentist pumps into me before digging around inside one of my teeth&#8217;s root canals.</li>
<li>I often remark at the way modern materials have changed the game of Tennis (sometimes for the worse but the actual rackets are indubitably superior to those of yore). </li>
<li>Let&#8217;s not forget that ASP.Net is better because of the influence of JSP/JSF technology, and that JSP/JSP (especially JSF) is better because of ASP.Net&#8230;that raw competition has been good for all concerned.</li>
</ul>
<p>Innovation <em>does</em> make a difference, it seems.</p>
<p>Oh well. That was then, this is now.</p>
<p>(It is interesting to note that Microsoft is <a href="http://www.infoq.com/news/2010/05/STM-Dropped">finding it hard to add new features into C#</a> nowadays: the customers are effectively saying &#8220;we dont&#8217; need no stinkin&#8217; innovation&#8221;&#8230;)</p>
<p>So: I see Java becoming Oracle&#8217;s C# analogue.</p>
<p>All Java&#8217;s best features&#8230;all those features that make it attractive to Oracle the tool vendor (a mature, stable, efficient, cross-platform execution environment with minimum cost of development and support but with maximum market penetration)&#8230;will be &#8216;deprecated&#8217;/no longer mentioned. They will still be there and still be relevant but they will be pushed under the covers. You won&#8217;t see them and Oracle will educate you to let you know that you don&#8217;t even need to see them. What you&#8217;ll &#8216;need&#8217; is to buy their product set. The product set that has been carefully engineered and (especially)  advertised to sit right in the sweet-spot of minimum effort to produce and maximum profitability&#8230;for Oracle.</p>
<p>You&#8217;ll be bombarded with marketing and other influences to ensure that you forget those Java communities and competitors out there (you know, the ones that <strong>have</strong> benefitted your world over the past 10-15 years); Oracle&#8217;s sales team will be happy to explain to you why you don&#8217;t need the likes of Apache.org, the JCP, Spring, JBoss, etc. any more.</p>
<p>As long as you cross their palms with copious quantities of gold, Oracle will show you the One True Way.</p>
<p>Hopefully, there will be <em>some</em> sort of convergence between what Oracle will feed you and what you actually need.</p>
<p>Just remember what happens to a drug addict when he/she can&#8217;t pay their dealer&#8230;</p>
<p>The current Java-based multi-vendor marketplace simply won&#8217;t be able to survive under such conditions.</p>
<p>Don&#8217;t believe me? Want proof? Answer me this, then: what&#8217;s the second-best selling C# IDE in the windows world? There pretty much isn&#8217;t one, is there! Or this: what&#8217;s the alternative framework to ASP.Net? Again, there ain&#8217;t no such animal&#8230;</p>
<p><a href="http://www.wtso.net/movie-comments/195-2-The_Simpsons_1619_Thank_God_It039s_Doomsday.html">It&#8217;s the end of the world, people</a>!</p>
<p>Perhaps one day in 2025, some manager with an atavistic streak of innovation in his/her DNA will suddenly pause the &#8220;Oracle Charge-O-Meter&#8221; on his/her pay-per-cycle copy of &#8220;Oracle Developer Brain  Enhancement Interface for the Enterprise 17.7c&#8221; and think: &#8220;You know, what we need is a way of building <em>Open</em> Systems and not being beholden to a single monopolistic vendor! Wonder why no-one ever thought of that before?&#8221; I&#8217;m assuming that about 100 cycles after detecting such a wayward and unprofitable thought, the &#8220;Oracle License Mangager&#8221; will take appropriate remedial action&#8230;</p>
<p>Whoops! There I go! Again with the Open Systems thing&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2010/10/30/more-java-futures-speculation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practices For JNI</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/07/21/best-practices-for-jni/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/07/21/best-practices-for-jni/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 22:56:30 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/07/21/best-practices-for-jni/</guid>
		<description><![CDATA[Wish I&#8217;d had this a few years back: Best practices for using the Java Native Interface. Might have saved me some grief.]]></description>
			<content:encoded><![CDATA[<p>Wish I&#8217;d had this a few years back: <a href="http://www.ibm.com/developerworks/java/library/j-jni/index.html?ca=dgr-jw22dth-j&#038;S_TACT=105AGX59&#038;S_CMP=grjw22">Best practices for using the Java Native Interface</a>.</p>
<p>Might have saved me some grief.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/07/21/best-practices-for-jni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JPA Implementation Patterns</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/07/16/jpa-implementation-patterns/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/07/16/jpa-implementation-patterns/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 05:38:14 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/07/16/jpa-implementation-patterns/</guid>
		<description><![CDATA[A useful blog series: http://blog.xebia.co &#8230; ementation-patterns/. I&#8217;m sure that this will be useful sometime in the future.]]></description>
			<content:encoded><![CDATA[<p>A useful blog series: <a href="http://blog.xebia.com/category/jpa/implementation-patterns/">http://blog.xebia.co &hellip; ementation-patterns/</a>.</p>
<p>I&#8217;m sure that this will be useful sometime in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/07/16/jpa-implementation-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Technology and Development Courseware: Now DonationWare</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/07/05/java-technology-and-development-courseware-now-donationware/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/07/05/java-technology-and-development-courseware-now-donationware/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 09:51:19 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[DonationWare]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/07/05/java-technology-and-development-courseware-now-donationware/</guid>
		<description><![CDATA[DonationWare! I am opening up old courseware to the world on a “pay if you like it” or have it free basis. My fifth offering is Java Technology and Development. (You will find other offerings in this site tagged with DonationWare.) This course was started in ~1996 as Java was becoming popular. I stopped hacking it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=6584697">DonationWare!</a> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=6584697"><img src="https://www.paypal.com/en_AU/i/btn/btn_donate_SM.gif" border="0" alt="" align="middle" /></a></p>
<p>I am opening up old courseware to the world on a “pay if you like it” or have it free basis.</p>
<p>My fifth offering is <em>Java Technology and Development</em>.</p>
<p>(You will find other offerings in this site tagged with <a href="/wordpress/tag/donationware/">DonationWare</a>.)</p>
<p>This course was started in ~1996 as Java was becoming popular. I stopped hacking it sometime around 2002, so it had a pretty good run. This version is from sometime in 2001 (it was pretty much the first “reasonably up-to-date” copy I found in my archive…actually a big pile of CDs).</p>
<p>This course had a lot of mileage: it went around Australia and the US many times, it went around various bits of Asia a couple of times and it went to NZ a few times.</p>
<p>It was used by a team of presenters, each of whom presented it very differently (interestingly enough), and contributed bits and pieces and bugfixes to it (thanks, guys!). Nonetheless, it retained <em>my</em> somewhat cynical/quirky view of the Java Universe.</p>
<p>It was presented under a few different banners. Never under the transentia banner in Australia.</p>
<p>It was even ‘informally’ licensed (meaning I pretty much got ripped-off!) to a US company for their purposes (whatever they were…I never really found out).</p>
<p>I have also presented Java courseware for a number of other organisations and I still believe that <em>this is the best</em>.</p>
<p>I remember presenting it for the very first time, to a local ISP in Darwin. After discussing Applets, I was talking about how Applets could be used to build a Tsunami-style <a href="http://en.wikipedia.org/wiki/Denial-of-service_attack">D.O.S. attack</a> and bring down a whole network. Suddenly one participant jumped up and walked out and I didn’t see him for quite a whle. Turns out that he was the owner of the company. He later explained that he had just spent a day madly reconfiguring his servers and network to be more resistant to the type of attack I had been talking about. I really scared the poor guy!</p>
<p>When the course first burst onto the world, the course participants were all keen and clever “early adopters”: for exercises, it was enough to say “Here is a Java compiler, go build me an ‘X’.” and everyone had fun, and learned lots along the way. By the time I knocked it on its head–no more early adopters were coming through and in some cases we had to deal with people who simply didn’t want to know but were being told to follow the company line–the exercises were having to be specified a lot more completely (it seemed like we had to detail practically every keypress and mouse movement). It wasn’t so much fun at the end, sad to say!</p>
<p>I also recall telling my colleagues about one participant that really <em>did not know how to use her mouse</em> (this makes life really hard for an instructor; to this day, the phrase “No. Use the <em>other</em> mouse button.” has significance to us) and they were scoffing at me, thinking I was exaggerating. Until the time when one poor guy came back from presenting the course for the first time and said: “I was really shocked. I always thought you were laying it on thick, but some of these participants didn’t even know how to <em>type</em>, let along <em>program</em>.” I paraphrase, but you get the idea.</p>
<p>Fun days…</p>
<p>Enough reminiscing! Here’s the ‘blurb’:</p>
<div style="padding-left:10px;padding-right:10px;padding-top:10px;margin-left:20px;margin-right:20px;background:#FFFFCC;">
<p><img src="/wordpress/wp-content/uploads/2009/07/java-courseware-logo.png" alt="" /></p>
<p><strong>Java Technology and Development</strong></p>
<p>A five-day hands-on overview of the Java language and environment</p>
<p><strong>Audience</strong></p>
<p>Programmers, Technical IT Managers, World-Wide Web Administrators and Developers, other IT Personnel and Consultants.</p>
<p><strong>Overview</strong></p>
<p>The Java programming language attracts enormous interest throughout the on-line community. IT professionals are also recognizing the importance of such technologies. This course will provide an understanding of what Java is, its history, how it works and is used, its application areas, industry support, competing technologies, and so forth.</p>
<p>The course includes a number of practical exercises spread over the five-day period.</p>
<p><strong>Objective</strong></p>
<p>The aim of this course is to provide a proper description and overview of Java as a programming language and distributed system technology. At the end of the course the student will have a sufficient understanding of Java to enable him or her to undertake software development using Java in various situations, including the development of executable content for the World-Wide Web and the construction of stand-alone applications.</p>
<p>Note: Java is strongly derived from C so knowledge of C or C++ is needed for this course.</p>
<p><strong>Day One: The Java Language</strong></p>
<p>An Overview of Java</p>
<p>An examination of why Java is the sensation it is; where it came from and what it can do:</p>
<ul>
<li>history</li>
<li>comparing Java to other languages</li>
<li>buzzwords: simple, object-oriented, distributed, robust, secure, architecture neutral, portable, interpreted, high-performance, multithreaded, and dynamic.</li>
</ul>
<p>The Basic Java Language</p>
<p>An overview of the more straightforward of Java’s features together with a brief comparison of Java with its ancestors: C/C++:</p>
<ul>
<li>tokens</li>
<li>reserved words</li>
<li>types and data values</li>
<li>operators</li>
<li>garbage collection</li>
</ul>
<p>Java Tools</p>
<p>A look at Sun’s Java Development Toolkit (JDK):</p>
<ul>
<li>why choose the JDK?</li>
<li>JDK for Windows95/NT4:
<ul>
<li>appletviewer</li>
<li>javac</li>
<li>javah</li>
<li>java</li>
<li>javadoc</li>
<li>javap</li>
<li>jdb</li>
<li>rmic</li>
<li>jar</li>
<li>javakey</li>
</ul>
</li>
</ul>
<p>A quick look at some other tools:</p>
<ul>
<li>IBM VisualAge for Java</li>
<li>Microsoft Visual J++</li>
</ul>
<p>Programming Java Applications</p>
<p>Writing standalone applications in Java:</p>
<ul>
<li>program structure and environment</li>
<li>application versus applet</li>
<li>a whole new phylum: aglets, servlets, beans</li>
</ul>
<p>More Basic Java</p>
<p>More data types:</p>
<ul>
<li>arrays</li>
<li>strings</li>
</ul>
<p>The flow of control:</p>
<ul>
<li>if, switch, for, while, do</li>
<li>labeled statements</li>
</ul>
<p>Some of the changes Java 1.1 has brought to the language:</p>
<ul>
<li>desktop colors</li>
<li>internationalization</li>
<li>deprecated features</li>
<li>‘blank’ finals</li>
<li>anonymous arrays</li>
<li>type wrappers</li>
</ul>
<p><strong>Day Two: More Java Language/Java Applets</strong></p>
<p>Object-Oriented Programming with Java</p>
<p>An examination of the features that make Java an Object-Oriented language:</p>
<ul>
<li>classes and objects</li>
<li>constructors and object finalization</li>
<li>methods, overriding and parameter passing</li>
<li>initializers</li>
<li>inheritance and the IS-A/HAS-A relationships</li>
<li>accessing run-time type information</li>
<li>encapsulation: packages visibility modifiers and techniques</li>
<li>abstract classes</li>
<li>interfaces</li>
</ul>
<p>The New Java 1.1 Object-Oriented Features</p>
<p>Java 1.1 introduced a number of features that substantially increased the power and flexibility of the language:</p>
<ul>
<li>reflection</li>
<li>inner classes:
<ul>
<li>nested top-level classes</li>
<li>member classes</li>
<li>local classes</li>
<li>anonymous classes</li>
</ul>
</li>
<li>instance initializers</li>
</ul>
<p>More Java Language</p>
<p>An examination of the ways in which Java promotes creating robust software:</p>
<ul>
<li>exceptions</li>
<li>using and understanding threads:
<ul>
<li>the Runnable interface</li>
<li>synchronization: mutual exclusion and critical sections</li>
<li>conditions</li>
</ul>
</li>
</ul>
<p>Java Applets</p>
<p>Java and executable content on the World-Wide Web:</p>
<ul>
<li>applet capabilities</li>
<li>the &lt;APPLET&gt; tag</li>
<li>responsive applets</li>
<li>dual-purpose applets and applications</li>
</ul>
<p><strong>Day Three: User Interfaces &amp; Java’s Abstract Windowing Toolkit</strong></p>
<p>An AWT Overview</p>
<p>A look at the basic concepts underlying Java’s “window on the world”:</p>
<ul>
<li>the Abstract Windowing Toolkit (AWT):
<ul>
<li>aim</li>
<li>fundamental organization</li>
</ul>
</li>
</ul>
<p>Using Java for simple graphics programming:</p>
<ul>
<li>primitive graphics tools</li>
<li>sounds in applets</li>
</ul>
<p>Multimedia and Interactivity</p>
<p>Multimedia is one of the driving forces behind Java:</p>
<ul>
<li>color handling</li>
<li>fonts</li>
<li>images</li>
<li>animation and double buffering</li>
</ul>
<p>More AWT</p>
<p>The building blocks of a Java User Interface:</p>
<ul>
<li>components:
<ul>
<li>button</li>
<li>checkbox</li>
<li>scrollbar</li>
<li>menu</li>
<li>label, text area and text field</li>
<li>canvas</li>
</ul>
</li>
<li>containers:
<ul>
<li>panel</li>
<li>frame</li>
<li>window</li>
<li>dialog</li>
</ul>
</li>
<li>event handling</li>
<li>layout managers</li>
</ul>
<p>AWT Enhancements</p>
<p>The enhancements and changes that Java version 1.1 introduced:</p>
<ul>
<li>a new event model</li>
<li>delegation</li>
<li>listeners and adapters</li>
<li>lightweight components</li>
<li>printing</li>
<li>data transfer; copy and paste; drag and drop</li>
</ul>
<p>Java Foundation Classes</p>
<ul>
<li>Java 2D</li>
<li>model-view-controller paradigm</li>
<li>‘swing’ components</li>
<li>drag &amp; drop</li>
</ul>
<p>The Stream Zoo</p>
<p>A look at some of the many classes for handling input/output:</p>
<ul>
<li>standard streams</li>
<li>“mix &amp; match” capabilities</li>
<li>files</li>
<li>random access streams</li>
<li>tokenizers</li>
<li>serialization and externalization</li>
<li>writer classes</li>
</ul>
<p>The Java Utility Classes</p>
<p>An overview of the classes supplied to remove the need for developers to have to “reinvent the wheel”:</p>
<ul>
<li>type wrappers</li>
<li>vector</li>
<li>enumeration</li>
<li>hashtable</li>
<li>property</li>
<li>random, stack, date, bitset</li>
<li>Java Collection Classes</li>
</ul>
<p><strong>Day Four: Advanced Java Programming</strong></p>
<p>Java Beans</p>
<p>An introduction to the Java-based component software infrastructure:</p>
<ul>
<li>why Java beans?</li>
<li>properties:
<ul>
<li>simple</li>
<li>indexed</li>
<li>bound</li>
<li>constrained</li>
</ul>
</li>
<li>events</li>
<li>methods</li>
<li>the BeanInfo class</li>
</ul>
<p>Security</p>
<p>An examination of why and how Java claims to be a secure programming environment for the World-Wide Web:</p>
<ul>
<li>the sandbox</li>
<li>the bytecode verifier</li>
<li>the class loader</li>
<li>the security manager</li>
<li>hostile attacks</li>
<li>code signing</li>
<li>access control lists</li>
</ul>
<p>Java Database Connectivity</p>
<p>A look at interfacing Java with SQL-based relational databases:</p>
<ul>
<li>the DriverManager class</li>
<li>drivers</li>
<li>connections</li>
<li>statements</li>
<li>SQL Utility classes</li>
<li>ResultSet handling</li>
<li>metadata</li>
</ul>
<p>Native Code</p>
<p>A look at the facilities that exist to allow Java to interact with other programming environments:</p>
<ul>
<li>Java Native Interface</li>
<li>Java invocation API</li>
</ul>
<p><strong>Day Five: Distributed Systems Using Java</strong></p>
<p>Java features aimed at making the development of distributed systems easier:</p>
<ul>
<li>URL</li>
<li>URLConnection</li>
<li>sockets:
<ul>
<li>clients</li>
<li>servers</li>
</ul>
</li>
<li>Remote Method Invocation
<ul>
<li>naming</li>
<li>clients</li>
<li>servers</li>
<li>stubs &amp; skeletons</li>
<li>security</li>
</ul>
</li>
<li>Servlets</li>
<li>Enterprise Java Beans</li>
<li>Java and CORBA</li>
</ul>
<p>The Future</p>
<p>An overview of some of the exciting developments currently happening in the Java world, such as JDBC, the “100% Java” initiative and the Network Computer.</p>
<p> </p></div>
<p>The course is now well and truly at End of Life.</p>
<p>I figure that it would be such a pity for it to end as a set of bits decaying away on my hard disk so I am opening it up to the world on as “as-is” basis:</p>
<p><a href="/wordpress/wp-content/uploads/2009/07/java-courseware-donationware.04.july.2009.zip">java-courseware-donationware.04.july.2009.zip</a></p>
<p>(MD5: 197bf97bf6020c2ca2ba440f87b59790; size: 6,615,799 bytes)</p>
<p>Some (unfortunately necessary) legalese:</p>
<ul>
<li>This content is provided “as-is”, with no guarantees.</li>
<li>Feel free to use it, but not to abuse it (to give a couple of examples: don’t make hundreds of copies for friends; don’t claim it as your own work).</li>
<li>I retain copyright, so “<a href="http://en.wikipedia.org/wiki/All_rights_reserved">all rights reserved</a>.”</li>
</ul>
<p>Enjoy!</p>
<p>If you like it, or have any questions/comments, send me an email (<em><script type="text/javascript">// < ![CDATA[
  // obfuscate this stuff... var who = 'javacoursewaredonationware' var a = 'transentia' var b = 'com' var c = 'au' var s = who + '@' + a + '.' + b + '.' + c; document.write(s)
// ]]&gt;</script></em>).</p>
<p>If you find this material useful, <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=6584697">please consider paying me a small amount</a>: <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=6584697"><img src="https://www.paypal.com/en_AU/i/btn/btn_donate_SM.gif" border="0" alt="" align="middle" /></a> via PayPal.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/07/05/java-technology-and-development-courseware-now-donationware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, Groovy, JavaFX</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/04/26/java-groovy-javafx/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/04/26/java-groovy-javafx/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 08:23:09 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/04/26/java-groovy-javafx/</guid>
		<description><![CDATA[From late 1997 to late 2004, I developed and ran a very nice Java course. Took it all round the world, in fact. It&#8217;s still available&#8230;and still the best Java course out there, IMHO (and I have given quite a few from several other [major] vendors in addition to my own). One of the exercises [...]]]></description>
			<content:encoded><![CDATA[<p>From late 1997 to late 2004, I developed and ran a very nice Java course. Took it all round the world, in fact.</p>
<p>It&#8217;s <strong>still available</strong>&#8230;and still <em>the best Java course</em> out there, IMHO (and I have given quite a few from several other [major] vendors in addition to my own).</p>
<p>One of the exercises that that participants seemed to enjoy was to take an applet not to dissimilar from the Scribble applet published in David Flanagan&#8217;s <em>Java in a Nutshell</em> and modify it so that the drawing persevered through screen redraws. </p>
<p>This helped the participants get their head around anonymous inner classes and the applet lifecycle callbacks and also gave them a chance to play with the List collection interface/classes.</p>
<p>Time moves on and we now have Groovy&#8217;s <a href="http://groovy.codehaus.org/Swing+Builder">SwingBuilder</a> and the new <a href="http://javafx.com/">JavaFX</a> technology promoted by Sun.</p>
<p>Prompted by the negative press that JavaFX has received, postings such as <a href="http://lexecorp.com/2009/04/20/javafx-it-has-merit/">this</a> and the speed increases of the &#8220;consumer JRE&#8221;, together with the fact that it is now bundled into <a href="http://www.netbeans.org">Netbeans 6.5.1</a> (making it easy to get hold of and play with; not sure why it is currently missing in action for 6.7m3) I decided to see how the &#8216;newcomers&#8217; stacked up.</p>
<p>The examples aren&#8217;t completely identical (one is an applet, while the others are JFrames, for example) but this is still a nice &#8216;feel&#8217; exercise.</p>
<p>I am reminded of the <a href="http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html">Evolution of a Programmer</a> joke&#8230;</p>
<p>Here goes&#8230;</p>
<p>=== Java (in homage to <a href="http://oreilly.com/catalog/9781565922624/">Java in a Nutshell, Second Edition</a>)</p>
<pre>import&nbsp;java.awt.*;
import&nbsp;java.awt.event.*;
import&nbsp;java.util.*;

public&nbsp;class&nbsp;PerseveringScribbleCollections&nbsp;extends&nbsp;java.applet.Applet
&nbsp;&nbsp;{
&nbsp;&nbsp;int&nbsp;last_x&nbsp;=&nbsp;0;
&nbsp;&nbsp;int&nbsp;last_y&nbsp;=&nbsp;0;
&nbsp;&nbsp;List&nbsp;model&nbsp;=&nbsp;new&nbsp;ArrayList&nbsp;();

&nbsp;&nbsp;public&nbsp;void&nbsp;init&nbsp;()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;addMouseListener
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MouseAdapter&nbsp;()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;mousePressed&nbsp;(MouseEvent&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_x&nbsp;=&nbsp;e.getX&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_y&nbsp;=&nbsp;e.getY&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);

&nbsp;&nbsp;&nbsp;&nbsp;addMouseMotionListener
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;MouseMotionAdapter&nbsp;()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;mouseDragged&nbsp;(MouseEvent&nbsp;e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;g&nbsp;=&nbsp;getGraphics&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x&nbsp;=&nbsp;e.getX&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;y&nbsp;=&nbsp;e.getY&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor&nbsp;(Color.black);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawLine&nbsp;d&nbsp;=&nbsp;new&nbsp;DrawLine&nbsp;(last_x,&nbsp;last_y,&nbsp;x,&nbsp;y);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.add&nbsp;(d);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.paint&nbsp;(g);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_x&nbsp;=&nbsp;x;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_y&nbsp;=&nbsp;y;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;public&nbsp;void&nbsp;paint&nbsp;(Graphics&nbsp;g)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;ListIterator&nbsp;l&nbsp;=&nbsp;model.listIterator&nbsp;();
&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(l.hasNext&nbsp;())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((DrawLine)&nbsp;l.next&nbsp;()).paint&nbsp;(g);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}

class&nbsp;DrawLine
&nbsp;&nbsp;{
&nbsp;&nbsp;private&nbsp;int&nbsp;x0;
&nbsp;&nbsp;private&nbsp;int&nbsp;y0;
&nbsp;&nbsp;private&nbsp;int&nbsp;x1;
&nbsp;&nbsp;private&nbsp;int&nbsp;y1;

&nbsp;&nbsp;public&nbsp;DrawLine&nbsp;(int&nbsp;x0,&nbsp;int&nbsp;y0,&nbsp;int&nbsp;x1,&nbsp;int&nbsp;y1)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;this.x0&nbsp;=&nbsp;x0;
&nbsp;&nbsp;&nbsp;&nbsp;this.y0&nbsp;=&nbsp;y0;
&nbsp;&nbsp;&nbsp;&nbsp;this.x1&nbsp;=&nbsp;x1;
&nbsp;&nbsp;&nbsp;&nbsp;this.y1&nbsp;=&nbsp;y1;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;public&nbsp;void&nbsp;paint&nbsp;(Graphics&nbsp;g)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;g.drawLine&nbsp;(x0,&nbsp;y0,&nbsp;x1,&nbsp;y1);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}</pre>
<p>=== Groovy (based on the Java version, above. All my own work ;=))</p>
<pre>import&nbsp;javax.swing.WindowConstants&nbsp;as&nbsp;WC

import&nbsp;groovy.swing.SwingBuilder
import&nbsp;java.awt.Color
import&nbsp;java.awt.Graphics
import&nbsp;javax.swing.JPanel

def&nbsp;list&nbsp;=&nbsp;[]
def&nbsp;last_x&nbsp;=&nbsp;0
def&nbsp;last_y&nbsp;=&nbsp;0

SwingBuilder.build&nbsp;{
&nbsp;&nbsp;frame(title:&nbsp;'Groovy&nbsp;Scribble',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size:&nbsp;[600,&nbsp;400],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show:&nbsp;true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pack:&nbsp;false,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resizable:&nbsp;false,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaultCloseOperation:&nbsp;WC.EXIT_ON_CLOSE)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;widget(new&nbsp;Scribble(list:&nbsp;list),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mousePressed:&nbsp;{e&nbsp;-&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last_x,&nbsp;last_y)&nbsp;=&nbsp;[e.x,&nbsp;e.y]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mouseDragged:&nbsp;{e&nbsp;-&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x,&nbsp;y)&nbsp;=&nbsp;[e.x,&nbsp;e.y]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;d&nbsp;=&nbsp;new&nbsp;DrawLine(x0:&nbsp;last_x,&nbsp;y0:&nbsp;last_y,&nbsp;x1:&nbsp;x,&nbsp;y1:&nbsp;y)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.paint(e.component.graphics)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;&lt;&lt;&nbsp;d
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last_x,&nbsp;last_y)&nbsp;=&nbsp;[x,&nbsp;y]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;)
&nbsp;&nbsp;}
}

class&nbsp;Scribble&nbsp;extends&nbsp;JPanel&nbsp;{
&nbsp;&nbsp;def&nbsp;list&nbsp;=&nbsp;[]

&nbsp;&nbsp;public&nbsp;void&nbsp;paint(Graphics&nbsp;g)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;list.each&nbsp;{&nbsp;it.paint(g)&nbsp;}
&nbsp;&nbsp;}
}

class&nbsp;DrawLine&nbsp;{
&nbsp;&nbsp;def&nbsp;x0
&nbsp;&nbsp;def&nbsp;y0
&nbsp;&nbsp;def&nbsp;x1
&nbsp;&nbsp;def&nbsp;y1

&nbsp;&nbsp;public&nbsp;void&nbsp;paint(Graphics&nbsp;g)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(Color.black);
&nbsp;&nbsp;&nbsp;&nbsp;g.drawLine(x0,&nbsp;y0,&nbsp;x1,&nbsp;y1);
&nbsp;&nbsp;}
}</pre>
<p>=== JavaFX (adapted from <a href="http://jfx.wikia.com/wiki/Scribble">Planet JFX</a>)</p>
<pre>package&nbsp;au.com.transentia.scribble.javafx;

import&nbsp;java.lang.System;
import&nbsp;javafx.scene.*;
import&nbsp;javafx.scene.input.MouseEvent;
import&nbsp;javafx.scene.paint.*;
import&nbsp;javafx.scene.shape.Polyline;
import&nbsp;javafx.scene.shape.Rectangle;
import&nbsp;javafx.stage.Stage;

def&nbsp;w&nbsp;=&nbsp;600;
def&nbsp;h&nbsp;=&nbsp;400;

class&nbsp;Scribble&nbsp;extends&nbsp;CustomNode&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;polyline:&nbsp;Polyline;

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;function&nbsp;create():&nbsp;Node&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;group:&nbsp;Group&nbsp;=&nbsp;Group{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onMousePressed:&nbsp;function&nbsp;(e:&nbsp;MouseEvent)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;polyline&nbsp;=&nbsp;Polyline{&nbsp;points:&nbsp;[e.sceneX,&nbsp;e.sceneY]&nbsp;};
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;polyline&nbsp;into&nbsp;group.content&nbsp;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onMouseDragged:&nbsp;function&nbsp;(e:&nbsp;MouseEvent)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;[e.sceneX,&nbsp;e.sceneY]&nbsp;into&nbsp;polyline.points;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;Rectangle&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;w
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;h
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill:&nbsp;Color&nbsp;{opacity:&nbsp;0}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;group;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

Stage&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;onClose:&nbsp;function():&nbsp;Void&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(0);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;title:&nbsp;"JavaFX&nbsp;Scribble"
&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;w
&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;h
&nbsp;&nbsp;&nbsp;&nbsp;visible:&nbsp;true
&nbsp;&nbsp;&nbsp;&nbsp;resizable:&nbsp;false
&nbsp;&nbsp;&nbsp;&nbsp;scene:&nbsp;Scene&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content:&nbsp;[Scribble{}]
&nbsp;&nbsp;&nbsp;&nbsp;}
}</pre>
<p>I&#8217;m not going to draw any conclusion&#8230;not one. Nope, not one. &#8220;Left as an exercise for the reader&#8221;, that sort of thing applies here&#8230;</p>
<p>I had fun and each example is interesting, in its own way.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/04/26/java-groovy-javafx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Big, Sad, Happy Day</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/04/21/a-big-sad-happy-day/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/04/21/a-big-sad-happy-day/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 23:02:50 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/04/21/a-big-sad-happy-day/</guid>
		<description><![CDATA[Big: Oracle buys Sun. Sad: Sun and I have a long, happy history together (in the UK, Sun engineers would frequently ring me up and ask for help; I knew a Sun 3/75 from top to bottom [I remember signing an NDA to get a look-see at the board schematics and other such &#8220;forbidden fruit&#8221;]). [...]]]></description>
			<content:encoded><![CDATA[<p><em>Big</em>: <a href="http://www.sun.com/aboutsun/media/presskits/2009-0420/index.jsp">Oracle buys Sun</a>.<br />
<em>Sad</em>: Sun and I have a long, happy history together (in the UK, Sun engineers would frequently ring me up and ask for help; I knew a Sun 3/75 from top to bottom [I remember signing an NDA to get a look-see at the board schematics and other such &#8220;forbidden fruit&#8221;]). I have always regarded Solaris as the one &#8216;true&#8217; Unix. Sun has always seemed innovative, young (sometimes immature) and &#8216;cool.&#8217; I guess that coolness factor will evaporate now.<br />
<em>Happy</em>: For a long time, it has seemed to me that Sun had lost its way. Now there will be a new pathway opening in front of it. Perhaps that pathway won&#8217;t be exactly the one it would have chosen for itself, but I am happy that some road remains&#8230;</p>
<p>Where now for Solaris?</p>
<p>Seems pretty clear: &#8216;Unbreakable&#8217; Solaris, coming soon to a datacentre near you.</p>
<p>Where now for Java?</p>
<p>Ah. Now that is <em>the</em> question as far as I&#8217;m concerned, isn&#8217;t it?</p>
<p>It&#8217;s a major part of why Oracle wanted Sun&#8230;no doubt.</p>
<p>Oracle&#8217;s (even more than Sun&#8217;s) early statements of &#8220;Use your Java skills everywhere: from Stored Procedures in the database, through the server on to mobile devices.&#8221; always resonated with me: it made good business sense (and that should tell you what a doomed idea it was&#8230;)</p>
<p>Trouble is: history. </p>
<p>At first, Java was a pissy little language. I didn&#8217;t take it too seriously (didn&#8217;t stop me making $$$, though!). </p>
<p>Before release 1.1 came along, IBM contributed a big slab of technology and know-how and raised Java up quite a few levels. I saw some of this first-hand. Thus, for the longest time I said: &#8220;Java is <em>practically</em> a product of IBM&#8217;s experience; IBM should buy Java.&#8221; But over time, they stopped driving (or&#8211;more accurately, I guess&#8211;were prevented from driving) and so went off to play with Apache and then Eclipse. The end result is a lot of excellent Java-based tools and componentry but not enough at the &#8216;core.&#8217;</p>
<p>IBM recently made a few noises but eventually didn&#8217;t follow though, it seems. Apparently however, they opened the door for Oracle to step through.</p>
<p>Oracle have <em>used</em> Java a lot; their fusion middleware stack, etc. is all Java; they have made some excellent products using Java; they have contributed to JCPs; they have bought other big users. This is all good. But I can&#8217;t see that they have ever really <em>driven</em> Java. </p>
<p>Stability seems to be what they need and will be aiming at. </p>
<p><a href="http://en.wikipedia.org/wiki/The_Outing">Not that there is anything wrong with that</a>.</p>
<p>The question is: what gets dropped? </p>
<p>Take IDEs: Oracle now has the Eclipse-based Workshop, JDeveloper and now Netbeans on its sheet. <a href="/wordpress/?x=entry:entry090402-224008">I was worried about them having two</a>&#8230;</p>
<p>Another: JRockit. What is going to happen to the best server-side JVM out there? I was pretty mad at Oracle for restricting access to JRockit after they bought BEA. Now it seems that the JVM pack of cards will be up in the air&#8230;</p>
<p>My prediction is that some other pissy little language is going to become &#8220;safe harboour&#8221; and the industry will run after it like some dumb slathering dog chasing a bone: &#8220;Never mind hey! There&#8217;s another silver bullet in the chamber, let&#8217;s see what that does!&#8221; </p>
<p>A proof of this, I offer <a href="http://www.infoq.com/news/2009/04/ruby-on-sap">SAP</a>.</p>
<p>Seems inevitable, doesn&#8217;t it.</p>
<p>My vote would go to <a href="http://en.wikipedia.org/wiki/Whitespace_(programming_language)">whitespace</a>. If we&#8217;re going to throw away all the good stuff that has happened since the late &#8217;90s, we may as well <em>really</em> throw it away ;-)</p>
<p>Let&#8217;s remember the &#8220;bad old days&#8221; too (not too long ago): when DEC forced BLISS at us, IBM wanted you to use PL/I, Burroughs were the &#8216;Algol&#8217; shop, etc. etc. These days persist with all the silly little SQL dialects out there, not to mention Microsoft .Net. Do we really want to return to this? The vendors&#8217; natural proclivities are to &#8220;lock us in&#8221; to their worlds&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/04/21/a-big-sad-happy-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Java?</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/03/25/why-java/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/03/25/why-java/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 12:02:06 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/03/25/why-java/</guid>
		<description><![CDATA[I am often asked questions like: &#8220;Isn&#8217;t Java too old now?&#8221; or &#8220;C# is better on the desktop, so why shouldn&#8217;t we use it for our next enterprise project?&#8221; or even &#8220;Java is far too difficult for our dev. team. I&#8217;m told that C# is much easier, so shouldn&#8217;t we go that way?&#8221; I always [...]]]></description>
			<content:encoded><![CDATA[<p>I am often asked questions like: &#8220;Isn&#8217;t Java too old now?&#8221; or &#8220;C# is better on the desktop, so why shouldn&#8217;t we use it for our next enterprise project?&#8221; or even &#8220;Java is far too difficult for <em>our</em> dev. team. I&#8217;m told that C# is much easier, so shouldn&#8217;t we go that way?&#8221;</p>
<p>I always answer that the respective Java and .Net technologies are roughly equivalent (I have my preference, of course) but that there are <em>important</em> differences in the <em>ethos of the developer communities</em> that IMHO make Java a better choice overall.</p>
<p>I don&#8217;t want to get into a flame war here, but <a href="http://blog.briandicroce.com/2009/03/10/dear-vb-developer/">Dear Developer&#8230;</a> reinforces this quite nicely:</p>
<blockquote><p>Here’s my point: some of the most influential books on software development and programming such as &#8230;hold a vast, deep and rich knowledge of the craft of software development that VB/VB.NET developers are mostly ignorant of.  &#8230;they should take a look at Enterprise Library from the Patterns and Practices Group at Microsoft (&#8230;) for it can save them time, cost and effort in common development situations.  I even tell them that it is open source, which means they have access to the code.  However, I don’t get much excitement from their part, &#8230;, I haven’t even heard of one VB developer simply using Enterprise Library in his projects.  The same goes for projects like nHibernate, the Castle project, NUnit, even mocking tools like Rhino.Mocks and Moq.  That’s very sad, because by not using some of these tools, VB developers tend to stay far behind common practices such as TDD and technologies like ORM tools&#8230;</p>
</blockquote>
<p>It comes down to: which group of developers is going to create better quality software? This is <strong>not</strong> a &#8220;my for loop has better syntax than yours&#8221; question, but a question that speaks to the fundamental ethos of the developer group; to their willingness and ability to embrace and improve with new tools and techniques.</p>
<p>I have witnessed several .Net teams operate and it has always seemed to me that they have been pushed into adopting the technology and are looking for the minimal step to take, for the minimal change to their toolkit or their technique toolbox, for the quickest way to return to their comfort zone.</p>
<p>This is not universal, of course (trust me; I have seen things come from the Java/J2EE communities that would curl your hair!) but my experiences point to the truth of what I have written.</p>
<p>To me, <em>this</em> is the key differentiator.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/03/25/why-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Really Big Index</title>
		<link>http://wordpress.transentia.com.au/wordpress/2009/02/12/the-really-big-index/</link>
		<comments>http://wordpress.transentia.com.au/wordpress/2009/02/12/the-really-big-index/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 02:30:44 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://wordpress.transentia.com.au/2009/02/12/the-really-big-index/</guid>
		<description><![CDATA[A list of all content pages in Sun&#8217;s The Java Tutorial. http://java.sun.com/ &#8230; /reallybigindex.html. Even though I have been programmng in Java for lo these many years (SDK 0.98 on a Mac Duo 280c; circa 1995/6), I&#8217;ve never seen this before.]]></description>
			<content:encoded><![CDATA[<p>A list of all content pages in Sun&#8217;s <em>The Java Tutorial</em>.</p>
<p><a href="http://java.sun.com/docs/books/tutorial/reallybigindex.html">http://java.sun.com/ &hellip; /reallybigindex.html</a>.</p>
<p>Even though I have been programmng in Java for lo these many years (SDK 0.98 on a Mac Duo 280c; circa 1995/6), I&#8217;ve never seen this before.</p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress.transentia.com.au/wordpress/2009/02/12/the-really-big-index/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

