<?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>sellmic.com &#187; Java</title>
	<atom:link href="http://sellmic.com/blog/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://sellmic.com/blog</link>
	<description>Augusto's corner of art, code and fun</description>
	<lastBuildDate>Sun, 24 Jul 2011 06:25:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Hidden Java 7 Features &#8211; System and Process CPU Load Monitoring</title>
		<link>http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/</link>
		<comments>http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 04:10:28 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=612</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/' addthis:title='Hidden Java 7 Features &#8211; System and Process CPU Load Monitoring' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>A couple of weeks ago I wrote a summary of 7 new cool features in Java 7. Others have written great blog posts about them, so I was thinking it might be useful for me to focus on lesser known or &#8220;Hidden Java 7 Features&#8221;. In the next few weeks, I&#8217;ll try to explore and [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/' addthis:title='Hidden Java 7 Features &#8211; System and Process CPU Load Monitoring ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/' addthis:title='Hidden Java 7 Features &#8211; System and Process CPU Load Monitoring' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><p style="text-align: center;"><a href="http://sellmic.com/blog/wp-content/uploads/2011/07/java-duke-as-indiana-jones-treasure-med.jpg"><img class="aligncenter" title="Duke Indy finds treasure in latest release! (or 'Raiders of the Lost Classpath', thanks to Dan Salt for suggesting that title)" src="http://sellmic.com/blog/wp-content/uploads/2011/07/java-duke-as-indiana-jones-treasure-med.jpg" alt="" width="589" height="372" /></a></p>
<p>A couple of weeks ago I wrote a summary of <a href="http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/">7 new cool features in Java 7</a>. Others have <a href="http://loianegroner.com/2011/07/new-java-7-language-features/">written</a> great <a href="http://www.phphosts.org/2011/07/java-se-7-brings-better-file-handling-than-ever-to-groovy/">blog</a> <a href="http://techiedan.com/2011/03/15/java-7-new-try-catch-blocks/">posts</a> about them, so I was thinking it might be useful for me to focus on lesser known or &#8220;Hidden Java 7 Features&#8221;. In the next few weeks, I&#8217;ll try to explore and write a series of blog posts about them.</p>
<p><strong>System and Process CPU Load Monitoring</strong></p>
<p>Java 7 provides a new MBean that finally allows Java developers to access overall System and current process CPU load monitoring. This feature is not really that hidden as it&#8217;s listed in the <a href="http://openjdk.java.net/projects/jdk7/features/#fa530068">what&#8217;s new page for JDK 7</a>, but I haven&#8217;t really noticed a lot of talk about it and I certainly overlooked it initially.</p>
<p>The interface <a href="http://download.java.net/jdk7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html">com.sun.management.OperatingSystemMXBean</a>, has two new methods that easily get this information; <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; white-space: pre;"><a href="http://download.java.net/jdk7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad()">getSystemCpuLoad()</a> </span>and <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; white-space: pre;"><a href="http://download.java.net/jdk7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html#getProcessCpuLoad()">getProcessCpuLoad()</a></span>. Both methods return the load as a double value in the [0.0,1.0] interval, with 0.0 representing no load to 1.0 representing 100% CPU load for the whole system or the current JVM process respectively.</p>
<p>It&#8217;s pretty easy to get access to this MBean;</p>
<pre class="java" name="code">import com.sun.management.OperatingSystemMXBean;
...
OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(
                OperatingSystemMXBean.class);
// What % CPU load this current JVM is taking, from 0.0-1.0
System.out.println(osBean.getProcessCpuLoad());

// What % load the overall system is at, from 0.0-1.0
System.out.println(osBean.getSystemCpuLoad());</pre>
<p><strong>Wasn&#8217;t this already available?</strong><br />
Java 6 introduced a new method in java.lang.management.OperatingSystemMXBean called <a href="http://download.oracle.com/javase/6/docs/api/java/lang/management/OperatingSystemMXBean.html#getSystemLoadAverage()">getSystemLoadAverage()</a>, which could get the CPU average for the overall system (there wasn&#8217;t a mechanism for the JVM/current process load). However this <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6336608">doesn&#8217;t seem to work on Windows</a> and would just return a -1 (tried this with Java 7 in Windows 7 and that is still the case).</p>
<p>Other ways of doing this prior to Java 7 would include Java APIs implemented via native libraries like <a href="http://support.hyperic.com/display/SIGAR/Home">SIGAR</a>, which are good alternatives but obviously not part of the standard Java distribution, or may not support most platforms.</p>
<p><strong>Now the bad news</strong><br />
If you notice in my code I use <a href="http://download.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html">com.sun.management.OperatingSystemMXBean</a>, not <a href="http://download.oracle.com/javase/7/docs/api/java/lang/management/OperatingSystemMXBean.html?is-external=true">java.lang.management.OperatingSystemMXBean</a> which means the methods getSystemCpuLoad() and getProcessCpuLoad() are not part of the official, supported public interface of the Java Platform. <a href="http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html">Oracle actually discourages the use of these packages</a>, since they could be removed in future releases or may not be available in all JVM implementations.</p>
<p>I&#8217;m not 100% sure why these methods were only added to the com.sun version of OperatingSystemMXBean. Initially I thought it was because Oracle didn&#8217;t want to add a method to a public interface (which would break any code implementing that interface), however Java 6 added getSystemLoadAverage(). If anybody has any insight on this, please let me know.</p>
<p>There are ways to use these new methods without having a hard dependency to these com.sun classes (for example via reflection, or using JMX conventions), I may cover these in a future blog post or update to this one.</p>
<p><strong>Demo, JCPUMon</strong><br />
Finally, I wanted to do a simple UI that would use this feature to have a little widget to monitor system CPU and current process load graphically. I call it &#8220;JCPMon&#8221;, it can be launched as a standalone Java application, run inside an application you want to monitor or just used as a Swing component in a Java UI.</p>
<p><a href="http://sellmic.com/blog/wp-content/uploads/2011/07/JCPUMon1.jpg"><img class="aligncenter size-full wp-image-630" title="JCPUMon - Java System and Process Monitoring Tool" src="http://sellmic.com/blog/wp-content/uploads/2011/07/JCPUMon1.jpg" alt="" width="450" height="281" /></a></p>
<p>The green part of the graph represents the overall system CPU load, while the yellow part represents the current process load, in this case CPU load imposed by the GUI (I did a lot of resizing to get a few yellow bars for this image <img src='http://sellmic.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). If you want to monitor a Java application you already have, you can easily do so by calling;</p>
<pre class="java" name="code">
// This method won't block, so you can call it at the start of your program
com.sellmic.apps.monitoring.jcpumon.Main(null);

// And then continue doing anything else ...
</pre>
<p>Of course an improvement would be to have the ability to connect to an external process via JMX (remote or local).</p>
<p>You can launch this app via webstart, <a href="http://sellmic.com/lab/dev/jcpumon/launch.jnlp"><img src="http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png"/></a>.You&#8217;ll need Java 7 to be installed.</p>
<p>This simple GUI uses this new Java 7 capability and also has some extras to configure the look of the UI (squares or circles, size, how often to update, always on top, full screen). If anybody is interested in the code for this let me know and I can setup a page to host it.</p>
<p><strong>UPDATE:</strong> JNLP URL was wrong, if you tried webstart before and it failed please try again. Sorry about that!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/' addthis:title='Hidden Java 7 Features &#8211; System and Process CPU Load Monitoring ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2011/07/21/hidden-java-7-features-cpu-load-monitoring/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>7 new cool features in Java 7</title>
		<link>http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/</link>
		<comments>http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 21:53:17 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[java 7]]></category>
		<category><![CDATA[jdk 7]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=515</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/' addthis:title='7 new cool features in Java 7' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>The evolution of the Java language and VM continues! Mark Reinhold (Chief Architect of the Java Platform Group) announced yesterday that the first release candidate for Java 7 is available for download, he confirms that the final released date is planned for July 28. For a good overview of the new features and what&#8217;s coming [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/' addthis:title='7 new cool features in Java 7 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/' addthis:title='7 new cool features in Java 7' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><p><a href="http://sellmic.com/blog/wp-content/uploads/2007/01/duke_evolution.png"><img class="aligncenter size-full wp-image-24" title="Evolving to Java 7" src="http://sellmic.com/blog/wp-content/uploads/2007/01/duke_evolution.png" alt="" width="450" height="209" /></a></p>
<p>The evolution of the Java language and VM continues! Mark Reinhold (Chief Architect of the Java Platform Group) <a href="http://mreinhold.org/blog/jdk7-rc"> announced yesterday</a> that the first release candidate for Java 7 is <a href="http://jdk7.java.net/download.html"> available for download</a>, he <a href="https://twitter.com/#!/mreinhold/status/89049145041625088">confirms</a> that the final released date is planned for July 28.</p>
<p>For a good overview of the new features and what&#8217;s coming next in Java 8, <a href="http://medianetwork.oracle.com/media/show/16796">I recommend this video on the Oracle Media Network</a>, which features Adam Messinger, Mark Reinhold, John Rose and Joe Darcy. I think Mark sums up Java 7 very well when describing it as an evolutionary release, with good number &#8220;smaller&#8221; changes that make for a great update to the language and platform.</p>
<p>I had a chance to play a bit with the release candidate (made easier by the Netbeans 7  JDK 7 support!), and decided to list 7 features (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/enhancements.html">full list is here</a>) I&#8217;m particularly excited about. Here they are;</p>
<p><strong>1. Strings in switch Statements (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html">doc</a>)</strong></p>
<p>Did you know previous to Java 7 you could only do a switch on <em>char</em>, <em>byte</em>, <em>short</em>, <em>int</em>, <em>Character</em>, <em>Byte</em>, <em>Short</em>, <em>Integer</em>, or an <em>enum </em>type (<a href="http://java.sun.com/docs/books/jls/third_edition/html/statements.html">spec</a>)? Java 7 adds Strings making the switch instruction much friendlier to String inputs. The alternative before was to do with with if/else if/else statements paired with a bunch of String.equals() calls. The result is much cleaner and compact code.</p>
<pre class="java" name="code">    public void testStringSwitch(String direction) {
        switch (direction) {
             case "up":
                 y--;
             break;

             case "down":
                 y++;
             break;

             case "left":
                 x--;
             break;

             case "right":
                 x++;
             break;

            default:
                System.out.println("Invalid direction!");
            break;
        }
    }</pre>
<p><strong>2. Type Inference for Generic Instance Creation (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html">doc</a>)</strong></p>
<p>Previously when using generics you had to specify the type twice, in the declaration and the constructor;</p>
<pre class="java" name="code">List&lt;String&gt; strings = new ArrayList&lt;String&gt;();</pre>
<p>In Java 7, you just use the diamond operator without the type;</p>
<pre class="java" name="code">List&lt;String&gt; strings = new ArrayList&lt;&gt;();</pre>
<p>If the compiler can infer the type arguments from the context, it does all the work for you. Note that you have always been able do a &#8220;<em>new ArrayList()</em>&#8221; without the type, but this results in an unchecked conversion warning.</p>
<p>Type inference becomes even more useful for more complex cases;</p>
<pre class="java" name="code">// Pre-Java 7
// Map&lt;String,Map&lt;String,int&gt;&gt;m=new HashMap&lt;String, Map&lt;String,int&gt;&gt;();

// Java 7
Map&lt;String, Map&lt;String, int&gt;&gt; m = new HashMap&lt;&gt;();</pre>
<p><strong>3. Multiple Exception Handling Syntax (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html">doc</a>)</strong></p>
<p><a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html"></a>Tired of repetitive error handling code in &#8220;exception happy&#8221; APIs like <em>java.io</em> and <em>java.lang.reflect</em>?</p>
<pre class="java" name="code">try {
    Class a = Class.forName("wrongClassName");
    Object instance = a.newInstance();
} catch (ClassNotFoundException ex) {
    System.out.println("Failed to create instance");
} catch (IllegalAccessException ex) {
    System.out.println("Failed to create instance");
} catch (InstantiationException ex) {
   System.out.println("Failed to create instance");
}</pre>
<p>When the exception handling is basically the same, the improved catch operator now supports multiple exceptions in a single statement separated by &#8220;|&#8221;.</p>
<pre class="java" name="code">try {
    Class a = Class.forName("wrongClassName");
    Object instance = a.newInstance();
} catch (ClassNotFoundException | IllegalAccessException |
   InstantiationException ex) {
   System.out.println("Failed to create instance");
}</pre>
<p>Sometimes developers use a &#8220;<em>catch (Exception ex)</em> to achieve a similar result, but that&#8217;s a dangerous idea because it makes code catch exceptions it can&#8217;t handle and instead should bubble up (IllegalArgumentException, OutOfMemoryError, etc.).<br />
<span id="more-515"></span><br />
<strong>4. The try-with-resources Statement (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html">doc</a>)</strong></p>
<p>The new try statement allows opening up a &#8220;resource&#8221; in a try block and automatically closing the resource when the block is done.</p>
<p>For example, in this piece of code we open a file and print line by line to stdout, but pay close attention to the finally block;</p>
<pre name="code" class="java">
        try {
            in = new BufferedReader(new FileReader("test.txt"));

            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (in != null) in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
</pre>
<p>When using a resource that has to be closed, a finally block is needed to make sure the clean up code is executed even if there are exceptions thrown back (in this example we catch IOException but if we didn&#8217;t, finally would still be executed). The new try-with-resources statement allows us to automatically close these resources in a more compact set of code;</p>
<pre name="code" class="java">
       try (BufferedReader in=new BufferedReader(new FileReader("test.txt")))
       {
            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
</pre>
<p>So &#8220;in&#8221; will be closed automatically at the end of the try block because it implements an interface called <a href="http://download.java.net/jdk7/docs/api/java/lang/AutoCloseable.html">java.lang.AutoCloseable</a>. An additional benefit is we don&#8217;t have to call the awkward IOException on close(), and what this statement does is &#8220;suppress&#8221; the exception for us (although there is a mechanism to get that exception if needed, <a href="http://download.java.net/jdk7/docs/api/java/lang/Throwable.html#getSuppressed()">Throwable.getSuppressed()</a>).</p>
<p><strong>5. Improved File IO API (docs <a href="http://download.oracle.com/javase/7/docs/technotes/guides/io/enhancements.html#7">1</a>, <a href="http://download.oracle.com/javase/tutorial/essential/io/notification.html">2</a>)</strong></p>
<p>There are quite a bit of changes in the java.nio package. Many are geared towards performance improvements, but long awaited enhancements over java.io (specially java.io.File) have finally materialized in a new package called <a href="http://download.java.net/jdk7/docs/api/java/nio/file/package-summary.html#package_description">java.nio.file</a>.</p>
<p>For example, to read a small file and print all the lines (see example above);</p>
<pre name="code" class="java">
       List&lt;String&gt; lines =  Files.readAllLines(
       FileSystems.getDefault().getPath("test.txt"), StandardCharsets.UTF_8);

       for (String line : lines) System.out.println(line);
</pre>
<p><em>java.nio.file.Path</em> is an interface that pretty much serves as a replacement for <em>java.io.File</em>, we need a <em>java.nio.file.FileSystem </em>to get paths, which you can get by using the <em>java.nio.file.FileSystems</em> factory (getDefault() gives you the default file system).</p>
<p>java.nio.file.Files then provides static methods for file related operations. In this example we can read a whole file much more easily by using readAllLines(). This class also has methods to create symbolic links, which was impossible to do pre-Java 7. Another feature long overdue is the ability to set file permissions for POSIX compliant file systems via the Files.setPosixFilePermissions method. These are all long over due file related operations, impossible without JNI methods or System.exec() hacks.</p>
<p>I didn&#8217;t have time to play with it but this package also contains a very interesting capability via the WatchService API which allows notification of file changes. You can for example, register directories you want to watch and get notified when a file is added, removed or updated. Before, this required manually polling the directories, which is not fun code to write.</p>
<p>For more on monitoring changes <a href="http://download.oracle.com/javase/tutorial/essential/io/notification.html">read this tutorial from Oracle</a>.</p>
<p><strong>6. Support for Non-Java Languages: invokedynamic (<a href="http://download.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html">doc</a>)</strong></p>
<p>The first new instruction since Java 1.0 was released and introduced in this version is called invokedynamic. Most developers will never interact or be aware of this new bytecode. The exciting part of this feature is that it improves support for compiling programs that use dynamic typing. Java is statically typed (which means you know the type of a variable at compile time) and dynamically typed languages (like Ruby, bash scripts, etc.) need this instruction to support these type of variables.</p>
<p>The JVM already supports many types of non-Java languages, but this instruction makes the JVM more language independent, which is good news for people who would like to implement components in different languages and/or want to inter-operate between those languages and standard Java programs.</p>
<p><strong>7. JLayerPane (<a href="http://download.oracle.com/javase/tutorial/uiswing/misc/jlayer.html">doc</a>)</strong></p>
<p>Finally, since I&#8217;m a UI guy, I want to mention JLayerPane. This component is similar to the one provided in the JXLayer project. I&#8217;ve used JXLayer many times in the past in order to add effects on top of Swing components. Similarly, JLayerPane allows you to decorate a Swing component by drawing on top of it and respond to events without modifying the original component.</p>
<p>This example from the JLayerPane tutorial shows a component using this functionality, providing a &#8220;spotlight&#8221; effect on a panel.</p>
<p><a href="http://sellmic.com/blog/wp-content/uploads/2011/07/jlayer-spotlight.png"><img src="http://sellmic.com/blog/wp-content/uploads/2011/07/jlayer-spotlight.png" alt="" title="jlayer-spotlight" width="300" height="200" class="aligncenter size-full wp-image-603" /></a></p>
<p>You could also blur the entire window, draw animations on top of components, or create transition effects.</p>
<p>And that&#8217;s just a subset of the features, Java 7 is a long overdue update to the platform and language which offers a nice set of new functionality. The hope is the time from Java 7 to 8 is a lot shorter than from 6 to 7!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/' addthis:title='7 new cool features in Java 7 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2011/07/08/7-new-cool-features-in-java-7/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Serious Java bug when parsing 2.2250738585072012e-308</title>
		<link>http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/</link>
		<comments>http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 11:15:18 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[bugs]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=443</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/' addthis:title='Serious Java bug when parsing 2.2250738585072012e-308' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>Noticed a good post on this bug here via the Java Posse Google Group, if you parse the double &#8220;2.2250738585072012e-308&#8243; it will hang a Thread, both at runtime (via parseDouble) or at compile time (just by defining referencing that number as a literal). Examples (from the post at exploringbinary.com); class runhang { public static void main(String[] [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/' addthis:title='Serious Java bug when parsing 2.2250738585072012e-308 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/' addthis:title='Serious Java bug when parsing 2.2250738585072012e-308' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><p><a href="http://sellmic.com/blog/wp-content/uploads/2008/02/dead_fish1.jpg"><img class="aligncenter size-full wp-image-127" title="DeadFish2" src="http://sellmic.com/blog/wp-content/uploads/2008/02/dead_fish1.jpg" alt="" width="300" height="233" /></a></p>
<p>Noticed a good p<a href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/">ost on this bug here</a> via the <a href="http://groups.google.com/group/javaposse/browse_thread/thread/b7614b612b5ef3e7">Java Posse Google Group</a>, if you parse the double <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 25px; font-size: 11.8056px; white-space: pre;">&#8220;2.2250738585072012e-308&#8243; </span><span style="font-size: 13.1944px;">it will hang a Thread, both at runtime (via parseDouble) or at compile time (just by defining referencing that number as a literal).</span></p>
<p>Examples (from the post at<a href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/"> exploringbinary.com</a>);</p>
<pre name="code" class="java">class runhang {
public static void main(String[] args) {
  System.out.println("Test:");
  double d = Double.parseDouble("2.2250738585072012e-308");
  System.out.println("Value: " + d);
 }
}</pre>
<p>And then at compile time;</p>
<pre name="code" class="java">class compilehang {
public static void main(String[] args) {
  double d = 2.2250738585072012e-308;
  System.out.println("Value: " + d);
 }
}</pre>
<p>See that blog post for a detailed analysis, it has links to the offending file in question (FloatingDecimal.java) and a pretty long comment list that is worth reading. Everybody is still trying to access what this impacts, and it seems to impact JVM based languages of course, and all platforms. I did notice on the Java Posse Group people saying that Android and Harmony are not affected (since they&#8217;re different implementations of course).</p>
<p>Impact of the bug? The most obvious one I can see is you can hang a thread on any JVM based software that accepts an input string that will be eventually parsed as a double. So for example a servlet on tomcat, you can eventually hang all HTTP threads and exhaust it&#8217;s thread pool to the point were it won&#8217;t be able to handle any more incoming request unless you restart the server. Ouch!</p>
<p>The bug will hang a thread, not the whole JVM (I wanted to clarify this because some people are saying it hangs the JVM, but it&#8217;s really the thread that is processing the call).</p>
<pre name="code" class="java">class hangthread {

    public static void main(String[] args) {

    Thread t1 = new Thread() {
        @Override
        public void run() {hangme();}};

    Thread t2 = new Thread() {
        @Override
        public void run() {hangme();}};

    Thread t3 = new Thread() {
        @Override
        public void run() {amialive();}};

        t3.start();
        t2.start();
        t1.start();
    }

    public static void amialive()
    {
        while (true){ System.out.println("I'm alive ...");
        try {Thread.sleep(1000);} catch (Exception e){}
        }
    }

    public static void hangme()
    {
        System.out.println("Test:" + Thread.currentThread().getName());
        double d = Double.parseDouble("2.2250738585072012e-308");
        System.out.println("Value: " + d);
    }
}</pre>
<p>Seems this bug was originally <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4421494">reported to Sun on 04-MAR-2001(infinite loop while parsing double literal)</a> !!!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/' addthis:title='Serious Java bug when parsing 2.2250738585072012e-308 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2011/02/02/massive-java-bug-dont-parse-2-2250738585072012e-308/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>James Gosling explains why he quit Oracle</title>
		<link>http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/</link>
		<comments>http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 11:50:40 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=424</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/' addthis:title='James Gosling explains why he quit Oracle' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>Uh oh &#8230; &#8220;Why I Quit Oracle&#8221; eWEEK got quite the scoop interviewing Java creator James Gosling, where he finally spills the beans on why he quit Oracle earlier this year. If you are a tech geek, or more likely a Java geek, you probably know who Gosling is. I first saw him presenting at [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/' addthis:title='James Gosling explains why he quit Oracle ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/' addthis:title='James Gosling explains why he quit Oracle' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><div id="attachment_425" class="wp-caption alignnone" style="width: 599px"><img class="size-full wp-image-425" title="James Gosling &amp; me at JavaOne 2006" src="http://sellmic.com/blog/wp-content/uploads/2010/09/james_gosling.jpg" alt="james_gosling" width="589" height="323" /><p class="wp-caption-text">A photo I took with James Gosling, during happier times (for Sun)</p></div>
<p>Uh oh &#8230; <a href="http://www.eweek.com/c/a/Application-Development/Java-Creator-James-Gosling-Why-I-Quit-Oracle-813517/">&#8220;Why I Quit Oracle&#8221;</a></p>
<p>eWEEK got quite the scoop interviewing Java creator <a href="http://en.wikipedia.org/wiki/James_Gosling">James Gosling</a>, where he finally spills the beans on why <a href="http://nighthacks.com/roller/jag/entry/time_to_move_on">he quit Oracle</a> earlier this year.</p>
<p>If you are a tech geek, or more likely a Java geek, you probably know who Gosling is. I first saw him presenting at my first JavaOne, and in JavaOne 2006 was fortunate enough to talk to him about how we were using Java for one of our projects and take a picture with him.</p>
<p>It&#8217;s hard to image a JavaOne without Gosling&#8217;s on stage and infectious enthusiasm. His tradition of <a href="http://www.youtube.com/watch?v=PC5HrW2DY4o&amp;feature=related">catapulting T-shirts into the audience</a> will be missed (maybe somebody at Oracle will give it a try? Let me know).</p>
<p>In the interview he mentions several things that contributed to his discontent; his salary, a modified job title, and perhaps more importantly a feeling that he had lost quite a bit of control and influence over the important decisions dealing with Java.</p>
<p>Gosling is a bit uncharacteristically harsh when he describers his previous boss,&#8221;<em>He’s [Ellison] the kind of person that just gives me the creeps</em>,”.</p>
<p><em><strong>Ouch.</strong></em></p>
<p>I have mixed feeling about this article. At first glance, and considering the timing (week of Oracle&#8217;s first JavaOne), it sounds like sour grapes. That was my first reaction. To be fair to Oracle, I don&#8217;t think it&#8217;s horribly unreasonable that if they acquired a company that wasn&#8217;t able to sutain itself, a lot of things were going to change, and they all include a lot of what James mentions (who makes decisions, job titles, how you are compensated).</p>
<p>A good example is this:</p>
<blockquote><p>However, at Sun, any executive that was a vice president or above was given what amounted to a bump or bonus based on the performance of the company. “In a mediocre year you did OK, but in a good year you did great” in terms of this compensation, he said.</p></blockquote>
<p>Perhaps this was part of the problem? Maybe Sun executives shouldn&#8217;t have been getting bonuses at all in a &#8220;mediocre year&#8221;. I&#8217;m not sure Oracle is being entirely unreasonable here.</p>
<p>On the other hand, based on Gosling&#8217;s description, it sounds like things could have been handled much better. He mentions that he felt he and his peers felt that their ability to decide anything was gone, and it&#8217;s completely understandable that this would be extremely frustrating. Specially when he&#8217;s the creator of the language, and is a well known and respected &#8220;tech celebrity&#8221; (do people in the real world know there&#8217;s such a thing?).</p>
<p>At the end of the day, Gosling has every right to complain, just like Oracle has every right to make internal decisions about how to run their business.</p>
<p>I hope James Gosling can still find ways to contribute to the project he gave birth to, just like people like <a href="http://gafter.blogspot.com/">Gafter </a>and <a href="http://www.javapuzzlers.com/bios.html">Bloch </a>continue to be involved even though they work at different companies now (I mean Gafter is at Microsoft of all places!!!).</p>
<p>You can follow what James Gosling is up to at <a href="http://nighthacks.com/roller/jag/">his blog</a>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/' addthis:title='James Gosling explains why he quit Oracle ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2010/09/23/james-gosling-explains-why-he-quit-oracle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Goodbye JavaFX Script, hello JavaFX 2.0</title>
		<link>http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/</link>
		<comments>http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 06:19:01 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[javafx]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=415</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/' addthis:title='Goodbye JavaFX Script, hello JavaFX 2.0' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>JavaFX Script is officially dead. Oracle has decided to continue investing in JavaFX as the UI platform for Java client applications, but at the same time they&#8217;ve realized that the JavaFX Script language was probably a limiting factor in the general adoption of their RIA technology. History On November 8, 2006, Sun engineer Chris Oliver [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/' addthis:title='Goodbye JavaFX Script, hello JavaFX 2.0 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/' addthis:title='Goodbye JavaFX Script, hello JavaFX 2.0' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><p><img class="alignnone size-full wp-image-417" title="Goodbye JavaFX Script, we hardly knew ye" src="http://sellmic.com/blog/wp-content/uploads/2010/09/goodbye_javafx_script1.jpg" alt="Goodbye JavaFX Script, we hardly knew ye" width="589" height="340" /></p>
<p><a href="http://en.wikipedia.org/wiki/JavaFX_Script">JavaFX Script</a> is <a href="http://www.dzone.com/links/r/oracle_to_discontinue_javafx_script_will_use_java.html">officially dead</a>.</p>
<p>Oracle has decided to continue investing in JavaFX as the UI platform for Java client applications, but at the same time they&#8217;ve realized that the JavaFX Script language was probably a limiting factor in the general adoption of their RIA technology.</p>
<p><strong>History</strong></p>
<p>On November 8, 2006, Sun engineer Chris Oliver published an <a href="http://blogs.sun.com/chrisoliver/entry/f3">entry in his blog</a> introducing a project he had been working on called &#8220;F3&#8243;. His <a href="http://blogs.sun.com/chrisoliver/entry/f3">blog entry</a> explained the general concepts behind the project;</p>
<blockquote><p>My name is Chris Oliver. I came to Sun through their acquisition of Seebeyond in September 2005. I&#8217;d like to present something about my current work – it’s not public yet but it should be open-sourced on java.net shortly.</p>
<p>My project is called F3 which stands for “Form follows function”, and its purpose was to explore making GUI programming easier in general.</p>
<p>F3 is actually a declarative Java scripting language with static typing for good IDE support and compile-time error reporting (unlike JavaScript&#8230;), type-inference, declarative syntax, and automatic data-binding with full support for 2d graphics and standard Swing components as well as declarative animation. You can also import java classes, create new Java objects, call their methods, and implement Java interfaces.</p></blockquote>
<p>Chris&#8217; first blog post on F3 introduced code snippets showing off the main features of the language, and a <a href="http://blogs.sun.com/chrisoliver/entry/more_f3_demos">follow up post had a set of very impressive demos</a> meant to show off the language and how it could compete with other RIA technologies like Flash.</p>
<p>At <a href="http://sellmic.com/blog/2007/05/08/javafx/">JavaOne 2007 F3 was rebranded as JavaFX Script</a>, and we were shown some cool demos, like this <a href="http://sellmic.com/blog/2007/05/11/javafx-pdf-viewer-demo/">JavaFX PDF Reader</a> which unfortunately was never released.</p>
<p><a href="http://sellmic.com/blog/2008/12/04/javafx-is-here/"> JavaFX 1.0 was released on December, 2008</a>.</p>
<p>At JavaOne 2009,<a href="http://sellmic.com/blog/2009/06/05/javafx-authoring-tool-demo-at-javaone-2009-with-video/"> Sun showed off a much needed JavaFX designer tool</a>. The demo showed how the tool would allow for visual design of JavaFX applications on different &#8220;screens&#8221; (desktop, mobile, TV, etc.). This tool hasn&#8217;t been released to the public, instead there&#8217;s a more developer oriented Netbeans plugin with Matisse like UI design capabilities that was released a while ago.</p>
<p><strong>But it&#8217;s not Java</strong></p>
<p>The complaint I would often hear from developers when talking about JavaFX is that it was not Java. Unlike Java, F3 was designed from the beginning with UIs in mind. Chris Oliver wanted the flexibility of a declarative language, and decided that XML was not the best fit for this, thus the need for the F3 language.</p>
<p>The problem was that the new language was very different from Java. <a href="http://sellmic.com/blog/2008/05/18/my-javafx-presentation-at-panamajug-2007-javafx-en-espanol/">I remember doing a JavaFX Script presentation for a JUG in Panama</a>, and even after having written a few programs in it, the context switch between it and Java was quite big for me.</p>
<p>At the last JavaOne I attended, I could overhear a lot of people rejecting the idea of learning yet another new language just to do a Java based UI. Not only a new language, but one that was so different from what they were used to. People often forget that one of the reasons Java dominates the development landscape today is because it was so similar to it&#8217;s predecessors; C and C++. While the benefits of a new UI focused language are many (the binding features alone in JavaFX Script are a good example), one thing that I&#8217;ve noticed is that modern UIs are being done in less exotic ways; just take a look at the UI framework in Android which is Java language based and on iPhone which uses Objective C.</p>
<p><strong>JavaFX technology in Java, and other languages</strong></p>
<p>Oracle has published the proposed <a href="http://javafx.com/roadmap/">roadmap for JavaFX 2.0</a>. The key standout feature listed there is <em>&#8220;Port JavaFX Script APIs to Java&#8221;</em>, which will make JavaFX not only easily available to Java developers but to those who use other dynamic languages like Scale, JRuby, Groovy, Javascript, etc. The roadmap also mentions<a href="http://openjdk.java.net/projects/lambda/"> support for lambda expressions (closures)</a>, which I can already see being very useful for UI programming.</p>
<p>There are other notable features listed there, like additional UI controls, web views and integration with HTML5, HD playback, etc. The roadmap mentions the binding API, I&#8217;m curious to see how it would be integrated in the core Java language.</p>
<p>I think Oracle has made the right move here, the JavaFX stack is already pretty advanced and shows a lot of promise. It should be used more, but was being hindered by the lack of adoption of JavaFX Script. Porting these APIs to Java, and supporting other dynamic languages should allow a lot more developers to leverage the power of JavaFX.</p>
<p>Sorry for the long post, but I wanted to include a bit of history at the beginning about F3. I wonder how Chris Oliver and the other engineers that worked so hard on the core JavaFX Script language feel about this development. Hopefully they feel pretty proud about their work, because even though the language is being dropped, it seems the core of JavaFX is pretty strong. Adoption should grow now that there is no &#8220;new language&#8221; excuse.</p>
<p>At least that&#8217;s what I&#8217;m hoping for.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/' addthis:title='Goodbye JavaFX Script, hello JavaFX 2.0 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2010/09/21/goodbye-javafx-script-hello-javafx-2-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Watching JavaOne 2010 from afar</title>
		<link>http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/</link>
		<comments>http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 02:56:33 +0000</pubDate>
		<dc:creator>Augusto</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://sellmic.com/blog/?p=407</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/' addthis:title='Watching JavaOne 2010 from afar' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div>Well, unfortunately for me I couldn&#8217;t make it to JavaOne this year. However I am happy Oracle is keeping JavaOne alive, and that my prediction from last year proved to be true (Is this the last JavaOne ever? &#8211; answer: no). If you are not in San Francisco this week or have JavaOne passes, you [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/' addthis:title='Watching JavaOne 2010 from afar ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style" addthis:url='http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/' addthis:title='Watching JavaOne 2010 from afar' ><a class="addthis_button_facebook_like"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone"></a><a class="addthis_button_compact"></a></div><p><img class="alignnone size-full wp-image-408" title="Watching JavaOne 2010 from my new Samsung LED" src="http://sellmic.com/blog/wp-content/uploads/2010/09/javaone_from_afar.jpg" alt="javaone_from_afar" width="589" height="442" /></p>
<p>Well, unfortunately for me I couldn&#8217;t make it to JavaOne this year. However I am happy Oracle is keeping JavaOne alive, and that my <a href="http://sellmic.com/blog/2009/06/04/is-this-the-last-javaone-ever/">prediction from last year proved to be true</a> (Is this the last JavaOne ever? &#8211; answer: no).</p>
<p>If you are not in San Francisco this week or have JavaOne passes, you can still attend virtually. Here are a few resources to keep you in touch;</p>
<ul>
<li><span style="font-size: 13.1944px; ">The official <a href="http://www.oracle.com/us/javaonedevelop/062264.html">JavaOne 2010 Site</a></span></li>
<li><span style="font-size: 13.1944px; ">Ustream <a href="http://www.google.com/url?sa=D&amp;q=http://www.oracle.com/us/javaonedevelop/oracle-technology-network-live-166853.html&amp;usg=AFQjCNG63DR2ZGfFh06AeHuYG5Qv06ILuQ">live keynote video streams</a> or <a href="http://www.oracle.com/us/javaonedevelop/oracle-technology-network-live-166853.html">here with schedule</a></span></li>
<li>Twitter <a href="http://twitter.com/search?q=%23javaone">#javaone</a></li>
<li>JavaOne on <a href="http://www.facebook.com/#!/javaone?ref=ts">facebook</a></li>
</ul>
<p><span style="font-size: 13.1944px;">I&#8217;ve heard Oracle will keep Sun&#8217;s tradition of posting all the presentations at a later date, I will post the links as they become available.</span></p>
<p>I&#8217;ll also be trying to scan blogs for any interesting tidbits to be highlighted, so stay tuned.</p>
<p>Also, I didn&#8217;t make it this year but at least one of my silly drawings did. Thanks to <a href="http://steveonjava.com/">Steve Chin</a> for including my little<a href="http://sellmic.com/gallery2/main.php?g2_itemId=471"> Java/Duke Evolution picture</a> into his <a href="http://steveonjava.com/javafx-your-way-building-javafx-applications-with-alternative-languages/">&#8220;JavaFX Your Way: Building JavaFX Applications with Alternative Languages&#8221;</a>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/' addthis:title='Watching JavaOne 2010 from afar ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://sellmic.com/blog/2010/09/20/watching-javaone-2010-from-afar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

